summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author(no author) <(no author)@unknown>2004-08-04 00:32:07 +0000
committer(no author) <(no author)@unknown>2004-08-04 00:32:07 +0000
commit87db347486e04f8adca4a593f1900a08158b7f37 (patch)
treeef58c28430c75407309b03c620403c432c09d89c
parent0fa986980f9fad917545dbeef1fe1e07e1e062c9 (diff)
downloadhttpd-pre_ajp_proxy.tar.gz
This commit was manufactured by cvs2svn to create tagpre_ajp_proxy
'pre_ajp_proxy'. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/tags/pre_ajp_proxy@104470 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--.cvsignore41
-rw-r--r--.gdbinit273
-rw-r--r--ABOUT_APACHE277
-rw-r--r--Apache.dsp128
-rw-r--r--Apache.dsw1940
-rw-r--r--BuildBin.dsp97
-rw-r--r--CHANGES14033
-rw-r--r--INSTALL91
-rw-r--r--InstallBin.dsp109
-rw-r--r--LAYOUT201
-rw-r--r--LICENSE678
-rw-r--r--Makefile.in211
-rw-r--r--Makefile.win683
-rw-r--r--NOTICE17
-rw-r--r--NWGNUmakefile362
-rw-r--r--README90
-rw-r--r--README.platforms86
-rw-r--r--ROADMAP256
-rw-r--r--STATUS900
-rw-r--r--VERSIONING154
-rw-r--r--acinclude.m4528
-rw-r--r--apachenw.mcp.zipbin189152 -> 0 bytes
-rw-r--r--build/.cvsignore8
-rw-r--r--build/NWGNUenvironment.inc305
-rw-r--r--build/NWGNUhead.inc106
-rw-r--r--build/NWGNUmakefile82
-rw-r--r--build/NWGNUtail.inc319
-rwxr-xr-xbuild/binbuild.sh205
-rwxr-xr-xbuild/bsd_makefile33
-rw-r--r--build/build-modules-c.awk81
-rwxr-xr-xbuild/buildinfo.sh170
-rwxr-xr-xbuild/config-stubs27
-rw-r--r--build/default.pl496
-rwxr-xr-xbuild/fastgen.sh88
-rwxr-xr-xbuild/get-version.sh56
-rwxr-xr-xbuild/httpd_roll_release136
-rwxr-xr-xbuild/install-bindist.sh.in175
-rwxr-xr-xbuild/install.sh122
-rwxr-xr-xbuild/instdso.sh92
-rw-r--r--build/library.mk21
-rw-r--r--build/ltlib.mk22
-rw-r--r--build/make_exports.awk163
-rw-r--r--build/make_nw_export.awk90
-rw-r--r--build/make_var_export.awk74
-rw-r--r--build/mkconfNW.awk113
-rw-r--r--build/mkdep.perl92
-rwxr-xr-xbuild/mkdir.sh47
-rw-r--r--build/nw_export.inc49
-rw-r--r--build/nw_ver.awk39
-rwxr-xr-xbuild/prebuildNW.bat47
-rw-r--r--build/program.mk21
-rwxr-xr-xbuild/rpm/httpd.init126
-rw-r--r--build/rpm/httpd.logrotate8
-rw-r--r--build/rpm/httpd.spec.in532
-rw-r--r--build/rules.mk.in229
-rw-r--r--build/special.mk37
-rwxr-xr-xbuild/sysv_makefile33
-rw-r--r--build/win32/.cvsignore4
-rw-r--r--build/win32/apache.icobin1078 -> 0 bytes
-rw-r--r--build/win32/win32ver.awk138
-rwxr-xr-xbuildconf181
-rw-r--r--config.layout324
-rw-r--r--configure.in576
-rw-r--r--docs/STATUS139
-rw-r--r--docs/cgi-examples/printenv13
-rw-r--r--docs/cgi-examples/test-cgi31
-rw-r--r--docs/conf/.cvsignore2
-rwxr-xr-xdocs/conf/highperformance-std.conf70
-rw-r--r--docs/conf/httpd-std.conf.in1084
-rw-r--r--docs/conf/httpd-win.conf1013
-rw-r--r--docs/conf/magic382
-rw-r--r--docs/conf/mime.types592
-rw-r--r--docs/conf/ssl-std.conf.in242
-rw-r--r--docs/docroot/apache_pb.gifbin2326 -> 0 bytes
-rw-r--r--docs/docroot/apache_pb.pngbin1385 -> 0 bytes
-rw-r--r--docs/docroot/apache_pb2.gifbin2414 -> 0 bytes
-rw-r--r--docs/docroot/apache_pb2.pngbin1463 -> 0 bytes
-rw-r--r--docs/docroot/apache_pb2_ani.gifbin2160 -> 0 bytes
-rw-r--r--docs/docroot/index.html.ca38
-rw-r--r--docs/docroot/index.html.cz.iso8859-251
-rw-r--r--docs/docroot/index.html.de57
-rw-r--r--docs/docroot/index.html.dk47
-rw-r--r--docs/docroot/index.html.ee53
-rw-r--r--docs/docroot/index.html.el37
-rw-r--r--docs/docroot/index.html.en38
-rw-r--r--docs/docroot/index.html.es51
-rw-r--r--docs/docroot/index.html.et53
-rw-r--r--docs/docroot/index.html.fr47
-rw-r--r--docs/docroot/index.html.he.iso8859-854
-rw-r--r--docs/docroot/index.html.hr.iso8859-235
-rw-r--r--docs/docroot/index.html.hu65
-rw-r--r--docs/docroot/index.html.it39
-rw-r--r--docs/docroot/index.html.ja.iso2022-jp42
-rw-r--r--docs/docroot/index.html.ko.euc-kr37
-rw-r--r--docs/docroot/index.html.lb.utf837
-rw-r--r--docs/docroot/index.html.nl54
-rw-r--r--docs/docroot/index.html.nn48
-rw-r--r--docs/docroot/index.html.no48
-rw-r--r--docs/docroot/index.html.po.iso8859-240
-rw-r--r--docs/docroot/index.html.pt42
-rw-r--r--docs/docroot/index.html.pt-br47
-rw-r--r--docs/docroot/index.html.ru.cp-125134
-rw-r--r--docs/docroot/index.html.ru.cp86634
-rw-r--r--docs/docroot/index.html.ru.iso-ru34
-rw-r--r--docs/docroot/index.html.ru.koi8-r34
-rw-r--r--docs/docroot/index.html.ru.utf834
-rw-r--r--docs/docroot/index.html.sv43
-rw-r--r--docs/docroot/index.html.var127
-rw-r--r--docs/docroot/index.html.zh-cn.gb231229
-rw-r--r--docs/docroot/index.html.zh-tw.big546
-rw-r--r--docs/doxygen.conf52
-rw-r--r--docs/error/HTTP_BAD_GATEWAY.html.var235
-rw-r--r--docs/error/HTTP_BAD_REQUEST.html.var172
-rw-r--r--docs/error/HTTP_FORBIDDEN.html.var301
-rw-r--r--docs/error/HTTP_GONE.html.var343
-rw-r--r--docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var365
-rw-r--r--docs/error/HTTP_LENGTH_REQUIRED.html.var177
-rw-r--r--docs/error/HTTP_METHOD_NOT_ALLOWED.html.var172
-rw-r--r--docs/error/HTTP_NOT_ACCEPTABLE.html.var172
-rw-r--r--docs/error/HTTP_NOT_FOUND.html.var353
-rw-r--r--docs/error/HTTP_NOT_IMPLEMENTED.html.var163
-rw-r--r--docs/error/HTTP_PRECONDITION_FAILED.html.var167
-rw-r--r--docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var183
-rw-r--r--docs/error/HTTP_REQUEST_TIME_OUT.html.var176
-rw-r--r--docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var176
-rw-r--r--docs/error/HTTP_SERVICE_UNAVAILABLE.html.var190
-rw-r--r--docs/error/HTTP_UNAUTHORIZED.html.var271
-rw-r--r--docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var163
-rw-r--r--docs/error/HTTP_VARIANT_ALSO_VARIES.html.var179
-rw-r--r--docs/error/README36
-rw-r--r--docs/error/contact.html.var96
-rw-r--r--docs/error/include/bottom.html14
-rw-r--r--docs/error/include/spacer.html2
-rw-r--r--docs/error/include/top.html24
-rw-r--r--docs/icons/README158
-rw-r--r--docs/icons/a.gifbin246 -> 0 bytes
-rw-r--r--docs/icons/a.pngbin293 -> 0 bytes
-rw-r--r--docs/icons/alert.black.gifbin242 -> 0 bytes
-rw-r--r--docs/icons/alert.black.pngbin279 -> 0 bytes
-rw-r--r--docs/icons/alert.red.gifbin247 -> 0 bytes
-rw-r--r--docs/icons/alert.red.pngbin298 -> 0 bytes
-rw-r--r--docs/icons/apache_pb.gifbin2326 -> 0 bytes
-rw-r--r--docs/icons/apache_pb.pngbin1385 -> 0 bytes
-rw-r--r--docs/icons/apache_pb2.gifbin2414 -> 0 bytes
-rw-r--r--docs/icons/apache_pb2.pngbin1463 -> 0 bytes
-rw-r--r--docs/icons/apache_pb2_ani.gifbin2160 -> 0 bytes
-rw-r--r--docs/icons/back.gifbin216 -> 0 bytes
-rw-r--r--docs/icons/back.pngbin284 -> 0 bytes
-rw-r--r--docs/icons/ball.gray.gifbin233 -> 0 bytes
-rw-r--r--docs/icons/ball.gray.pngbin277 -> 0 bytes
-rw-r--r--docs/icons/ball.red.gifbin205 -> 0 bytes
-rw-r--r--docs/icons/ball.red.pngbin265 -> 0 bytes
-rw-r--r--docs/icons/binary.gifbin246 -> 0 bytes
-rw-r--r--docs/icons/binary.pngbin296 -> 0 bytes
-rw-r--r--docs/icons/binhex.gifbin246 -> 0 bytes
-rw-r--r--docs/icons/binhex.pngbin304 -> 0 bytes
-rw-r--r--docs/icons/blank.gifbin148 -> 0 bytes
-rw-r--r--docs/icons/blank.pngbin195 -> 0 bytes
-rw-r--r--docs/icons/bomb.gifbin308 -> 0 bytes
-rw-r--r--docs/icons/bomb.pngbin356 -> 0 bytes
-rw-r--r--docs/icons/box1.gifbin251 -> 0 bytes
-rw-r--r--docs/icons/box1.pngbin308 -> 0 bytes
-rw-r--r--docs/icons/box2.gifbin268 -> 0 bytes
-rw-r--r--docs/icons/box2.pngbin322 -> 0 bytes
-rw-r--r--docs/icons/broken.gifbin247 -> 0 bytes
-rw-r--r--docs/icons/broken.pngbin305 -> 0 bytes
-rw-r--r--docs/icons/burst.gifbin235 -> 0 bytes
-rw-r--r--docs/icons/burst.pngbin314 -> 0 bytes
-rw-r--r--docs/icons/c.gifbin242 -> 0 bytes
-rw-r--r--docs/icons/c.pngbin285 -> 0 bytes
-rw-r--r--docs/icons/comp.blue.gifbin251 -> 0 bytes
-rw-r--r--docs/icons/comp.blue.pngbin313 -> 0 bytes
-rw-r--r--docs/icons/comp.gray.gifbin246 -> 0 bytes
-rw-r--r--docs/icons/comp.gray.pngbin304 -> 0 bytes
-rw-r--r--docs/icons/compressed.gifbin1038 -> 0 bytes
-rw-r--r--docs/icons/compressed.pngbin315 -> 0 bytes
-rw-r--r--docs/icons/continued.gifbin214 -> 0 bytes
-rw-r--r--docs/icons/continued.pngbin272 -> 0 bytes
-rw-r--r--docs/icons/dir.gifbin225 -> 0 bytes
-rw-r--r--docs/icons/dir.pngbin272 -> 0 bytes
-rw-r--r--docs/icons/diskimg.gifbin167 -> 0 bytes
-rw-r--r--docs/icons/diskimg.pngbin202 -> 0 bytes
-rw-r--r--docs/icons/down.gifbin163 -> 0 bytes
-rw-r--r--docs/icons/down.pngbin232 -> 0 bytes
-rw-r--r--docs/icons/dvi.gifbin238 -> 0 bytes
-rw-r--r--docs/icons/dvi.pngbin290 -> 0 bytes
-rw-r--r--docs/icons/f.gifbin236 -> 0 bytes
-rw-r--r--docs/icons/f.pngbin282 -> 0 bytes
-rw-r--r--docs/icons/folder.gifbin225 -> 0 bytes
-rw-r--r--docs/icons/folder.open.gifbin242 -> 0 bytes
-rw-r--r--docs/icons/folder.open.pngbin305 -> 0 bytes
-rw-r--r--docs/icons/folder.pngbin272 -> 0 bytes
-rw-r--r--docs/icons/folder.sec.gifbin243 -> 0 bytes
-rw-r--r--docs/icons/folder.sec.pngbin290 -> 0 bytes
-rw-r--r--docs/icons/forward.gifbin219 -> 0 bytes
-rw-r--r--docs/icons/forward.pngbin284 -> 0 bytes
-rw-r--r--docs/icons/generic.gifbin221 -> 0 bytes
-rw-r--r--docs/icons/generic.pngbin260 -> 0 bytes
-rw-r--r--docs/icons/generic.red.gifbin220 -> 0 bytes
-rw-r--r--docs/icons/generic.red.pngbin262 -> 0 bytes
-rw-r--r--docs/icons/generic.sec.gifbin249 -> 0 bytes
-rw-r--r--docs/icons/generic.sec.pngbin279 -> 0 bytes
-rw-r--r--docs/icons/hand.right.gifbin217 -> 0 bytes
-rw-r--r--docs/icons/hand.right.pngbin280 -> 0 bytes
-rw-r--r--docs/icons/hand.up.gifbin223 -> 0 bytes
-rw-r--r--docs/icons/hand.up.pngbin280 -> 0 bytes
-rw-r--r--docs/icons/icon.sheet.gifbin11977 -> 0 bytes
-rw-r--r--docs/icons/icon.sheet.pngbin8898 -> 0 bytes
-rw-r--r--docs/icons/image1.gifbin274 -> 0 bytes
-rw-r--r--docs/icons/image1.pngbin307 -> 0 bytes
-rw-r--r--docs/icons/image2.gifbin309 -> 0 bytes
-rw-r--r--docs/icons/image2.pngbin355 -> 0 bytes
-rw-r--r--docs/icons/image3.gifbin286 -> 0 bytes
-rw-r--r--docs/icons/image3.pngbin323 -> 0 bytes
-rw-r--r--docs/icons/index.gifbin268 -> 0 bytes
-rw-r--r--docs/icons/index.pngbin316 -> 0 bytes
-rw-r--r--docs/icons/layout.gifbin276 -> 0 bytes
-rw-r--r--docs/icons/layout.pngbin306 -> 0 bytes
-rw-r--r--docs/icons/left.gifbin172 -> 0 bytes
-rw-r--r--docs/icons/left.pngbin235 -> 0 bytes
-rw-r--r--docs/icons/link.gifbin249 -> 0 bytes
-rw-r--r--docs/icons/link.pngbin297 -> 0 bytes
-rw-r--r--docs/icons/movie.gifbin243 -> 0 bytes
-rw-r--r--docs/icons/movie.pngbin258 -> 0 bytes
-rw-r--r--docs/icons/p.gifbin237 -> 0 bytes
-rw-r--r--docs/icons/p.pngbin284 -> 0 bytes
-rw-r--r--docs/icons/patch.gifbin251 -> 0 bytes
-rw-r--r--docs/icons/patch.pngbin295 -> 0 bytes
-rw-r--r--docs/icons/pdf.gifbin249 -> 0 bytes
-rw-r--r--docs/icons/pdf.pngbin289 -> 0 bytes
-rw-r--r--docs/icons/pie0.gifbin188 -> 0 bytes
-rw-r--r--docs/icons/pie0.pngbin242 -> 0 bytes
-rw-r--r--docs/icons/pie1.gifbin198 -> 0 bytes
-rw-r--r--docs/icons/pie1.pngbin261 -> 0 bytes
-rw-r--r--docs/icons/pie2.gifbin198 -> 0 bytes
-rw-r--r--docs/icons/pie2.pngbin253 -> 0 bytes
-rw-r--r--docs/icons/pie3.gifbin191 -> 0 bytes
-rw-r--r--docs/icons/pie3.pngbin256 -> 0 bytes
-rw-r--r--docs/icons/pie4.gifbin193 -> 0 bytes
-rw-r--r--docs/icons/pie4.pngbin239 -> 0 bytes
-rw-r--r--docs/icons/pie5.gifbin189 -> 0 bytes
-rw-r--r--docs/icons/pie5.pngbin258 -> 0 bytes
-rw-r--r--docs/icons/pie6.gifbin186 -> 0 bytes
-rw-r--r--docs/icons/pie6.pngbin253 -> 0 bytes
-rw-r--r--docs/icons/pie7.gifbin185 -> 0 bytes
-rw-r--r--docs/icons/pie7.pngbin258 -> 0 bytes
-rw-r--r--docs/icons/pie8.gifbin173 -> 0 bytes
-rw-r--r--docs/icons/pie8.pngbin233 -> 0 bytes
-rw-r--r--docs/icons/portal.gifbin254 -> 0 bytes
-rw-r--r--docs/icons/portal.pngbin303 -> 0 bytes
-rw-r--r--docs/icons/ps.gifbin244 -> 0 bytes
-rw-r--r--docs/icons/ps.pngbin287 -> 0 bytes
-rw-r--r--docs/icons/quill.gifbin267 -> 0 bytes
-rw-r--r--docs/icons/quill.pngbin315 -> 0 bytes
-rw-r--r--docs/icons/right.gifbin172 -> 0 bytes
-rw-r--r--docs/icons/right.pngbin233 -> 0 bytes
-rw-r--r--docs/icons/screw1.gifbin258 -> 0 bytes
-rw-r--r--docs/icons/screw1.pngbin312 -> 0 bytes
-rw-r--r--docs/icons/screw2.gifbin263 -> 0 bytes
-rw-r--r--docs/icons/screw2.pngbin318 -> 0 bytes
-rw-r--r--docs/icons/script.gifbin242 -> 0 bytes
-rw-r--r--docs/icons/script.pngbin275 -> 0 bytes
-rw-r--r--docs/icons/small/README.txt6
-rw-r--r--docs/icons/small/back.gifbin129 -> 0 bytes
-rw-r--r--docs/icons/small/back.pngbin238 -> 0 bytes
-rw-r--r--docs/icons/small/binary.gifbin134 -> 0 bytes
-rw-r--r--docs/icons/small/binary.pngbin242 -> 0 bytes
-rw-r--r--docs/icons/small/binhex.gifbin131 -> 0 bytes
-rw-r--r--docs/icons/small/binhex.pngbin248 -> 0 bytes
-rw-r--r--docs/icons/small/blank.gifbin55 -> 0 bytes
-rw-r--r--docs/icons/small/blank.pngbin90 -> 0 bytes
-rw-r--r--docs/icons/small/broken.gifbin139 -> 0 bytes
-rw-r--r--docs/icons/small/broken.pngbin254 -> 0 bytes
-rw-r--r--docs/icons/small/burst.gifbin128 -> 0 bytes
-rw-r--r--docs/icons/small/burst.pngbin194 -> 0 bytes
-rw-r--r--docs/icons/small/comp1.gifbin130 -> 0 bytes
-rw-r--r--docs/icons/small/comp1.pngbin197 -> 0 bytes
-rw-r--r--docs/icons/small/comp2.gifbin131 -> 0 bytes
-rw-r--r--docs/icons/small/comp2.pngbin194 -> 0 bytes
-rw-r--r--docs/icons/small/compressed.gifbin128 -> 0 bytes
-rw-r--r--docs/icons/small/compressed.pngbin189 -> 0 bytes
-rw-r--r--docs/icons/small/continued.gifbin114 -> 0 bytes
-rw-r--r--docs/icons/small/continued.pngbin214 -> 0 bytes
-rw-r--r--docs/icons/small/dir.gifbin132 -> 0 bytes
-rw-r--r--docs/icons/small/dir.pngbin175 -> 0 bytes
-rw-r--r--docs/icons/small/dir2.gifbin122 -> 0 bytes
-rw-r--r--docs/icons/small/dir2.pngbin161 -> 0 bytes
-rw-r--r--docs/icons/small/doc.gifbin191 -> 0 bytes
-rw-r--r--docs/icons/small/doc.pngbin269 -> 0 bytes
-rw-r--r--docs/icons/small/forward.gifbin125 -> 0 bytes
-rw-r--r--docs/icons/small/forward.pngbin244 -> 0 bytes
-rw-r--r--docs/icons/small/generic.gifbin116 -> 0 bytes
-rw-r--r--docs/icons/small/generic.pngbin182 -> 0 bytes
-rw-r--r--docs/icons/small/generic2.gifbin127 -> 0 bytes
-rw-r--r--docs/icons/small/generic2.pngbin158 -> 0 bytes
-rw-r--r--docs/icons/small/generic3.gifbin113 -> 0 bytes
-rw-r--r--docs/icons/small/generic3.pngbin147 -> 0 bytes
-rw-r--r--docs/icons/small/image.gifbin126 -> 0 bytes
-rw-r--r--docs/icons/small/image.pngbin178 -> 0 bytes
-rw-r--r--docs/icons/small/image2.gifbin138 -> 0 bytes
-rw-r--r--docs/icons/small/image2.pngbin186 -> 0 bytes
-rw-r--r--docs/icons/small/index.gifbin145 -> 0 bytes
-rw-r--r--docs/icons/small/index.pngbin206 -> 0 bytes
-rw-r--r--docs/icons/small/key.gifbin187 -> 0 bytes
-rw-r--r--docs/icons/small/key.pngbin254 -> 0 bytes
-rw-r--r--docs/icons/small/movie.gifbin134 -> 0 bytes
-rw-r--r--docs/icons/small/movie.pngbin202 -> 0 bytes
-rw-r--r--docs/icons/small/patch.gifbin182 -> 0 bytes
-rw-r--r--docs/icons/small/patch.pngbin250 -> 0 bytes
-rw-r--r--docs/icons/small/ps.gifbin184 -> 0 bytes
-rw-r--r--docs/icons/small/ps.pngbin254 -> 0 bytes
-rw-r--r--docs/icons/small/rainbow.gifbin3811 -> 0 bytes
-rw-r--r--docs/icons/small/rainbow.pngbin2418 -> 0 bytes
-rw-r--r--docs/icons/small/sound.gifbin130 -> 0 bytes
-rw-r--r--docs/icons/small/sound.pngbin176 -> 0 bytes
-rw-r--r--docs/icons/small/sound2.gifbin119 -> 0 bytes
-rw-r--r--docs/icons/small/sound2.pngbin236 -> 0 bytes
-rw-r--r--docs/icons/small/tar.gifbin132 -> 0 bytes
-rw-r--r--docs/icons/small/tar.pngbin227 -> 0 bytes
-rw-r--r--docs/icons/small/text.gifbin128 -> 0 bytes
-rw-r--r--docs/icons/small/text.pngbin202 -> 0 bytes
-rw-r--r--docs/icons/small/transfer.gifbin124 -> 0 bytes
-rw-r--r--docs/icons/small/transfer.pngbin186 -> 0 bytes
-rw-r--r--docs/icons/small/unknown.gifbin131 -> 0 bytes
-rw-r--r--docs/icons/small/unknown.pngbin226 -> 0 bytes
-rw-r--r--docs/icons/small/uu.gifbin125 -> 0 bytes
-rw-r--r--docs/icons/small/uu.pngbin217 -> 0 bytes
-rw-r--r--docs/icons/sound1.gifbin248 -> 0 bytes
-rw-r--r--docs/icons/sound1.pngbin310 -> 0 bytes
-rw-r--r--docs/icons/sound2.gifbin221 -> 0 bytes
-rw-r--r--docs/icons/sound2.pngbin297 -> 0 bytes
-rw-r--r--docs/icons/sphere1.gifbin285 -> 0 bytes
-rw-r--r--docs/icons/sphere1.pngbin326 -> 0 bytes
-rw-r--r--docs/icons/sphere2.gifbin264 -> 0 bytes
-rw-r--r--docs/icons/sphere2.pngbin322 -> 0 bytes
-rw-r--r--docs/icons/tar.gifbin219 -> 0 bytes
-rw-r--r--docs/icons/tar.pngbin261 -> 0 bytes
-rw-r--r--docs/icons/tex.gifbin251 -> 0 bytes
-rw-r--r--docs/icons/tex.pngbin295 -> 0 bytes
-rw-r--r--docs/icons/text.gifbin229 -> 0 bytes
-rw-r--r--docs/icons/text.pngbin273 -> 0 bytes
-rw-r--r--docs/icons/transfer.gifbin242 -> 0 bytes
-rw-r--r--docs/icons/transfer.pngbin319 -> 0 bytes
-rw-r--r--docs/icons/unknown.gifbin245 -> 0 bytes
-rw-r--r--docs/icons/unknown.pngbin291 -> 0 bytes
-rw-r--r--docs/icons/up.gifbin164 -> 0 bytes
-rw-r--r--docs/icons/up.pngbin234 -> 0 bytes
-rw-r--r--docs/icons/uu.gifbin236 -> 0 bytes
-rw-r--r--docs/icons/uu.pngbin280 -> 0 bytes
-rw-r--r--docs/icons/uuencoded.gifbin236 -> 0 bytes
-rw-r--r--docs/icons/uuencoded.pngbin280 -> 0 bytes
-rw-r--r--docs/icons/world1.gifbin228 -> 0 bytes
-rw-r--r--docs/icons/world1.pngbin315 -> 0 bytes
-rw-r--r--docs/icons/world2.gifbin261 -> 0 bytes
-rw-r--r--docs/icons/world2.pngbin339 -> 0 bytes
-rw-r--r--docs/man/ab.8125
-rw-r--r--docs/man/apachectl.892
-rw-r--r--docs/man/apxs.8255
-rw-r--r--docs/man/dbmmanage.1118
-rw-r--r--docs/man/htdigest.157
-rw-r--r--docs/man/htpasswd.1146
-rw-r--r--docs/man/httpd.8119
-rw-r--r--docs/man/logresolve.851
-rw-r--r--docs/man/rotatelogs.8133
-rw-r--r--docs/man/suexec.848
-rw-r--r--docs/manual/.cvsignore12
-rw-r--r--docs/manual/LICENSE202
-rw-r--r--docs/manual/bind.html19
-rw-r--r--docs/manual/bind.html.de164
-rw-r--r--docs/manual/bind.html.en160
-rw-r--r--docs/manual/bind.html.fr197
-rw-r--r--docs/manual/bind.html.ja.euc-jp174
-rw-r--r--docs/manual/bind.html.ko.euc-kr149
-rw-r--r--docs/manual/bind.xml162
-rw-r--r--docs/manual/bind.xml.de169
-rw-r--r--docs/manual/bind.xml.fr193
-rw-r--r--docs/manual/bind.xml.ja171
-rw-r--r--docs/manual/bind.xml.ko151
-rw-r--r--docs/manual/bind.xml.meta15
-rw-r--r--docs/manual/cgi_path.html11
-rw-r--r--docs/manual/cgi_path.html.en115
-rw-r--r--docs/manual/cgi_path.html.ja.euc-jp115
-rw-r--r--docs/manual/cgi_path.html.ko.euc-kr103
-rw-r--r--docs/manual/cgi_path.xml104
-rw-r--r--docs/manual/cgi_path.xml.ja106
-rw-r--r--docs/manual/cgi_path.xml.ko92
-rw-r--r--docs/manual/cgi_path.xml.meta13
-rw-r--r--docs/manual/configuring.html11
-rw-r--r--docs/manual/configuring.html.en165
-rw-r--r--docs/manual/configuring.html.ja.euc-jp167
-rw-r--r--docs/manual/configuring.html.ko.euc-kr148
-rw-r--r--docs/manual/configuring.xml198
-rw-r--r--docs/manual/configuring.xml.ja199
-rw-r--r--docs/manual/configuring.xml.ko182
-rw-r--r--docs/manual/configuring.xml.meta13
-rw-r--r--docs/manual/content-negotiation.html11
-rw-r--r--docs/manual/content-negotiation.html.en678
-rw-r--r--docs/manual/content-negotiation.html.ja.euc-jp727
-rw-r--r--docs/manual/content-negotiation.html.ko.euc-kr608
-rw-r--r--docs/manual/content-negotiation.xml675
-rw-r--r--docs/manual/content-negotiation.xml.ja713
-rw-r--r--docs/manual/content-negotiation.xml.ko602
-rw-r--r--docs/manual/content-negotiation.xml.meta13
-rw-r--r--docs/manual/custom-error.html11
-rw-r--r--docs/manual/custom-error.html.en202
-rw-r--r--docs/manual/custom-error.html.ja.euc-jp195
-rw-r--r--docs/manual/custom-error.html.ko.euc-kr196
-rw-r--r--docs/manual/custom-error.xml191
-rw-r--r--docs/manual/custom-error.xml.ja185
-rw-r--r--docs/manual/custom-error.xml.ko185
-rw-r--r--docs/manual/custom-error.xml.meta13
-rw-r--r--docs/manual/developer/.cvsignore2
-rw-r--r--docs/manual/developer/API.html3
-rw-r--r--docs/manual/developer/API.html.en1222
-rw-r--r--docs/manual/developer/API.xml1237
-rw-r--r--docs/manual/developer/API.xml.meta11
-rw-r--r--docs/manual/developer/debugging.html3
-rw-r--r--docs/manual/developer/debugging.html.en196
-rw-r--r--docs/manual/developer/debugging.xml192
-rw-r--r--docs/manual/developer/debugging.xml.meta11
-rw-r--r--docs/manual/developer/documenting.html3
-rw-r--r--docs/manual/developer/documenting.html.en84
-rw-r--r--docs/manual/developer/documenting.xml83
-rw-r--r--docs/manual/developer/documenting.xml.meta11
-rw-r--r--docs/manual/developer/filters.html3
-rw-r--r--docs/manual/developer/filters.html.en210
-rw-r--r--docs/manual/developer/filters.xml208
-rw-r--r--docs/manual/developer/filters.xml.meta11
-rw-r--r--docs/manual/developer/hooks.html3
-rw-r--r--docs/manual/developer/hooks.html.en239
-rw-r--r--docs/manual/developer/hooks.xml235
-rw-r--r--docs/manual/developer/hooks.xml.meta11
-rw-r--r--docs/manual/developer/index.html3
-rw-r--r--docs/manual/developer/index.html.en73
-rw-r--r--docs/manual/developer/index.xml75
-rw-r--r--docs/manual/developer/index.xml.meta11
-rw-r--r--docs/manual/developer/modules.html7
-rw-r--r--docs/manual/developer/modules.html.en273
-rw-r--r--docs/manual/developer/modules.html.ja.euc-jp274
-rw-r--r--docs/manual/developer/modules.xml271
-rw-r--r--docs/manual/developer/modules.xml.ja270
-rw-r--r--docs/manual/developer/modules.xml.meta12
-rw-r--r--docs/manual/developer/request.html3
-rw-r--r--docs/manual/developer/request.html.en260
-rw-r--r--docs/manual/developer/request.xml257
-rw-r--r--docs/manual/developer/request.xml.meta11
-rw-r--r--docs/manual/developer/thread_safety.html3
-rw-r--r--docs/manual/developer/thread_safety.html.en285
-rw-r--r--docs/manual/developer/thread_safety.xml290
-rw-r--r--docs/manual/developer/thread_safety.xml.meta11
-rw-r--r--docs/manual/dns-caveats.html11
-rw-r--r--docs/manual/dns-caveats.html.en239
-rw-r--r--docs/manual/dns-caveats.html.ja.euc-jp241
-rw-r--r--docs/manual/dns-caveats.html.ko.euc-kr221
-rw-r--r--docs/manual/dns-caveats.xml227
-rw-r--r--docs/manual/dns-caveats.xml.ja230
-rw-r--r--docs/manual/dns-caveats.xml.ko208
-rw-r--r--docs/manual/dns-caveats.xml.meta13
-rw-r--r--docs/manual/dso.html11
-rw-r--r--docs/manual/dso.html.en312
-rw-r--r--docs/manual/dso.html.ja.euc-jp293
-rw-r--r--docs/manual/dso.html.ko.euc-kr274
-rw-r--r--docs/manual/dso.xml310
-rw-r--r--docs/manual/dso.xml.ja290
-rw-r--r--docs/manual/dso.xml.ko272
-rw-r--r--docs/manual/dso.xml.meta13
-rw-r--r--docs/manual/env.html11
-rw-r--r--docs/manual/env.html.en405
-rw-r--r--docs/manual/env.html.ja.euc-jp393
-rw-r--r--docs/manual/env.html.ko.euc-kr371
-rw-r--r--docs/manual/env.xml438
-rw-r--r--docs/manual/env.xml.ja425
-rw-r--r--docs/manual/env.xml.ko409
-rw-r--r--docs/manual/env.xml.meta13
-rw-r--r--docs/manual/faq/.cvsignore2
-rw-r--r--docs/manual/faq/all_in_one.html7
-rw-r--r--docs/manual/faq/all_in_one.html.en200
-rw-r--r--docs/manual/faq/all_in_one.html.ko.euc-kr205
-rw-r--r--docs/manual/faq/all_in_one.xml43
-rw-r--r--docs/manual/faq/all_in_one.xml.ko45
-rw-r--r--docs/manual/faq/all_in_one.xml.meta12
-rw-r--r--docs/manual/faq/categories.xml22
-rw-r--r--docs/manual/faq/categories.xml.ko23
-rw-r--r--docs/manual/faq/error.html7
-rw-r--r--docs/manual/faq/error.html.en83
-rw-r--r--docs/manual/faq/error.html.ko.euc-kr82
-rw-r--r--docs/manual/faq/error.xml83
-rw-r--r--docs/manual/faq/error.xml.ko83
-rw-r--r--docs/manual/faq/error.xml.meta12
-rw-r--r--docs/manual/faq/index.html7
-rw-r--r--docs/manual/faq/index.html.en47
-rw-r--r--docs/manual/faq/index.html.ko.euc-kr45
-rw-r--r--docs/manual/faq/index.xml46
-rw-r--r--docs/manual/faq/index.xml.ko46
-rw-r--r--docs/manual/faq/index.xml.meta12
-rw-r--r--docs/manual/faq/support.html7
-rw-r--r--docs/manual/faq/support.html.en132
-rw-r--r--docs/manual/faq/support.html.ko.euc-kr138
-rw-r--r--docs/manual/faq/support.xml134
-rw-r--r--docs/manual/faq/support.xml.ko140
-rw-r--r--docs/manual/faq/support.xml.meta12
-rw-r--r--docs/manual/filter.html19
-rw-r--r--docs/manual/filter.html.en80
-rw-r--r--docs/manual/filter.html.es77
-rw-r--r--docs/manual/filter.html.fr82
-rw-r--r--docs/manual/filter.html.ja.euc-jp80
-rw-r--r--docs/manual/filter.html.ko.euc-kr78
-rw-r--r--docs/manual/filter.xml85
-rw-r--r--docs/manual/filter.xml.es89
-rw-r--r--docs/manual/filter.xml.fr87
-rw-r--r--docs/manual/filter.xml.ja89
-rw-r--r--docs/manual/filter.xml.ko83
-rw-r--r--docs/manual/filter.xml.meta15
-rw-r--r--docs/manual/glossary.html11
-rw-r--r--docs/manual/glossary.html.en354
-rw-r--r--docs/manual/glossary.html.es389
-rw-r--r--docs/manual/glossary.html.ko.euc-kr358
-rw-r--r--docs/manual/glossary.xml386
-rw-r--r--docs/manual/glossary.xml.es430
-rw-r--r--docs/manual/glossary.xml.ko373
-rw-r--r--docs/manual/glossary.xml.meta13
-rw-r--r--docs/manual/handler.html15
-rw-r--r--docs/manual/handler.html.en153
-rw-r--r--docs/manual/handler.html.es162
-rw-r--r--docs/manual/handler.html.ja.euc-jp157
-rw-r--r--docs/manual/handler.html.ko.euc-kr147
-rw-r--r--docs/manual/handler.xml162
-rw-r--r--docs/manual/handler.xml.es172
-rw-r--r--docs/manual/handler.xml.ja161
-rw-r--r--docs/manual/handler.xml.ko156
-rw-r--r--docs/manual/handler.xml.meta14
-rw-r--r--docs/manual/howto/.cvsignore2
-rw-r--r--docs/manual/howto/auth.html11
-rw-r--r--docs/manual/howto/auth.html.en352
-rw-r--r--docs/manual/howto/auth.html.ja.euc-jp384
-rw-r--r--docs/manual/howto/auth.html.ko.euc-kr321
-rw-r--r--docs/manual/howto/auth.xml364
-rwxr-xr-xdocs/manual/howto/auth.xml.ja389
-rw-r--r--docs/manual/howto/auth.xml.ko333
-rw-r--r--docs/manual/howto/auth.xml.meta13
-rw-r--r--docs/manual/howto/cgi.html11
-rw-r--r--docs/manual/howto/cgi.html.en555
-rw-r--r--docs/manual/howto/cgi.html.ja.euc-jp544
-rw-r--r--docs/manual/howto/cgi.html.ko.euc-kr501
-rw-r--r--docs/manual/howto/cgi.xml567
-rw-r--r--docs/manual/howto/cgi.xml.ja552
-rw-r--r--docs/manual/howto/cgi.xml.ko518
-rw-r--r--docs/manual/howto/cgi.xml.meta13
-rwxr-xr-xdocs/manual/howto/htaccess.html11
-rw-r--r--docs/manual/howto/htaccess.html.en355
-rw-r--r--docs/manual/howto/htaccess.html.ja.euc-jp341
-rw-r--r--docs/manual/howto/htaccess.html.ko.euc-kr329
-rwxr-xr-xdocs/manual/howto/htaccess.xml377
-rw-r--r--docs/manual/howto/htaccess.xml.ja364
-rw-r--r--docs/manual/howto/htaccess.xml.ko350
-rw-r--r--docs/manual/howto/htaccess.xml.meta13
-rw-r--r--docs/manual/howto/index.html11
-rw-r--r--docs/manual/howto/index.html.en105
-rw-r--r--docs/manual/howto/index.html.ja.euc-jp102
-rw-r--r--docs/manual/howto/index.html.ko.euc-kr107
-rw-r--r--docs/manual/howto/index.xml103
-rw-r--r--docs/manual/howto/index.xml.ja100
-rw-r--r--docs/manual/howto/index.xml.ko103
-rw-r--r--docs/manual/howto/index.xml.meta13
-rw-r--r--docs/manual/howto/public_html.html11
-rw-r--r--docs/manual/howto/public_html.html.en161
-rw-r--r--docs/manual/howto/public_html.html.ja.euc-jp155
-rw-r--r--docs/manual/howto/public_html.html.ko.euc-kr156
-rw-r--r--docs/manual/howto/public_html.xml163
-rw-r--r--docs/manual/howto/public_html.xml.ja157
-rw-r--r--docs/manual/howto/public_html.xml.ko160
-rw-r--r--docs/manual/howto/public_html.xml.meta13
-rw-r--r--docs/manual/howto/ssi.html11
-rw-r--r--docs/manual/howto/ssi.html.en486
-rw-r--r--docs/manual/howto/ssi.html.ja.euc-jp481
-rw-r--r--docs/manual/howto/ssi.html.ko.euc-kr426
-rw-r--r--docs/manual/howto/ssi.xml488
-rw-r--r--docs/manual/howto/ssi.xml.ja480
-rw-r--r--docs/manual/howto/ssi.xml.ko427
-rw-r--r--docs/manual/howto/ssi.xml.meta13
-rw-r--r--docs/manual/images/apache_header.gifbin4084 -> 0 bytes
-rw-r--r--docs/manual/images/custom_errordocs.pngbin22907 -> 0 bytes
-rwxr-xr-xdocs/manual/images/down.gifbin56 -> 0 bytes
-rwxr-xr-xdocs/manual/images/favicon.icobin1078 -> 0 bytes
-rwxr-xr-xdocs/manual/images/feather.gifbin6471 -> 0 bytes
-rw-r--r--docs/manual/images/feather.pngbin6345 -> 0 bytes
-rw-r--r--docs/manual/images/home.gifbin1465 -> 0 bytes
-rw-r--r--docs/manual/images/index.gifbin1540 -> 0 bytes
-rwxr-xr-xdocs/manual/images/left.gifbin60 -> 0 bytes
-rw-r--r--docs/manual/images/mod_rewrite_fig1.gifbin3525 -> 0 bytes
-rw-r--r--docs/manual/images/mod_rewrite_fig1.pngbin5597 -> 0 bytes
-rw-r--r--docs/manual/images/mod_rewrite_fig2.gifbin2553 -> 0 bytes
-rw-r--r--docs/manual/images/mod_rewrite_fig2.pngbin4144 -> 0 bytes
-rw-r--r--docs/manual/images/pixel.gifbin61 -> 0 bytes
-rwxr-xr-xdocs/manual/images/right.gifbin59 -> 0 bytes
-rw-r--r--docs/manual/images/sub.gifbin6083 -> 0 bytes
-rwxr-xr-xdocs/manual/images/up.gifbin57 -> 0 bytes
-rw-r--r--docs/manual/index.html23
-rw-r--r--docs/manual/index.html.de98
-rw-r--r--docs/manual/index.html.en97
-rw-r--r--docs/manual/index.html.es102
-rw-r--r--docs/manual/index.html.fr97
-rw-r--r--docs/manual/index.html.ja.euc-jp97
-rw-r--r--docs/manual/index.html.ko.euc-kr97
-rw-r--r--docs/manual/index.xml89
-rw-r--r--docs/manual/index.xml.de90
-rw-r--r--docs/manual/index.xml.es95
-rw-r--r--docs/manual/index.xml.fr89
-rw-r--r--docs/manual/index.xml.ja89
-rw-r--r--docs/manual/index.xml.ko89
-rw-r--r--docs/manual/index.xml.meta16
-rw-r--r--docs/manual/install.html23
-rw-r--r--docs/manual/install.html.de407
-rw-r--r--docs/manual/install.html.en383
-rw-r--r--docs/manual/install.html.es434
-rw-r--r--docs/manual/install.html.fr427
-rw-r--r--docs/manual/install.html.ja.euc-jp392
-rw-r--r--docs/manual/install.html.ko.euc-kr358
-rw-r--r--docs/manual/install.xml383
-rw-r--r--docs/manual/install.xml.de401
-rw-r--r--docs/manual/install.xml.es428
-rw-r--r--docs/manual/install.xml.fr420
-rw-r--r--docs/manual/install.xml.ja390
-rw-r--r--docs/manual/install.xml.ko352
-rw-r--r--docs/manual/install.xml.meta16
-rw-r--r--docs/manual/invoking.html19
-rw-r--r--docs/manual/invoking.html.de151
-rw-r--r--docs/manual/invoking.html.en149
-rw-r--r--docs/manual/invoking.html.es162
-rw-r--r--docs/manual/invoking.html.ja.euc-jp160
-rw-r--r--docs/manual/invoking.html.ko.euc-kr136
-rw-r--r--docs/manual/invoking.xml145
-rw-r--r--docs/manual/invoking.xml.de151
-rw-r--r--docs/manual/invoking.xml.es160
-rw-r--r--docs/manual/invoking.xml.ja151
-rw-r--r--docs/manual/invoking.xml.ko131
-rw-r--r--docs/manual/invoking.xml.meta15
-rw-r--r--docs/manual/license.html3
-rw-r--r--docs/manual/license.html.en238
-rw-r--r--docs/manual/license.xml239
-rw-r--r--docs/manual/license.xml.meta11
-rw-r--r--docs/manual/logs.html11
-rw-r--r--docs/manual/logs.html.en583
-rw-r--r--docs/manual/logs.html.ja.euc-jp551
-rw-r--r--docs/manual/logs.html.ko.euc-kr519
-rw-r--r--docs/manual/logs.xml626
-rw-r--r--docs/manual/logs.xml.ja584
-rw-r--r--docs/manual/logs.xml.ko556
-rw-r--r--docs/manual/logs.xml.meta13
-rw-r--r--docs/manual/misc/.cvsignore2
-rw-r--r--docs/manual/misc/index.html7
-rw-r--r--docs/manual/misc/index.html.en80
-rw-r--r--docs/manual/misc/index.html.ko.euc-kr76
-rw-r--r--docs/manual/misc/index.xml77
-rw-r--r--docs/manual/misc/index.xml.ko74
-rw-r--r--docs/manual/misc/index.xml.meta12
-rw-r--r--docs/manual/misc/perf-tuning.html7
-rw-r--r--docs/manual/misc/perf-tuning.html.en1056
-rw-r--r--docs/manual/misc/perf-tuning.html.ko.euc-kr974
-rw-r--r--docs/manual/misc/perf-tuning.xml1112
-rw-r--r--docs/manual/misc/perf-tuning.xml.ko1041
-rw-r--r--docs/manual/misc/perf-tuning.xml.meta12
-rw-r--r--docs/manual/misc/relevant_standards.html7
-rw-r--r--docs/manual/misc/relevant_standards.html.en199
-rw-r--r--docs/manual/misc/relevant_standards.html.ko.euc-kr191
-rw-r--r--docs/manual/misc/relevant_standards.xml191
-rw-r--r--docs/manual/misc/relevant_standards.xml.ko183
-rw-r--r--docs/manual/misc/relevant_standards.xml.meta12
-rw-r--r--docs/manual/misc/rewriteguide.html7
-rw-r--r--docs/manual/misc/rewriteguide.html.en2101
-rw-r--r--docs/manual/misc/rewriteguide.html.ko.euc-kr2004
-rw-r--r--docs/manual/misc/rewriteguide.xml2101
-rw-r--r--docs/manual/misc/rewriteguide.xml.ko2005
-rw-r--r--docs/manual/misc/rewriteguide.xml.meta12
-rw-r--r--docs/manual/misc/security_tips.html7
-rw-r--r--docs/manual/misc/security_tips.html.en350
-rw-r--r--docs/manual/misc/security_tips.html.ko.euc-kr341
-rw-r--r--docs/manual/misc/security_tips.xml344
-rw-r--r--docs/manual/misc/security_tips.xml.ko334
-rw-r--r--docs/manual/misc/security_tips.xml.meta12
-rw-r--r--docs/manual/mod/.cvsignore3
-rw-r--r--docs/manual/mod/allmodules.xml80
-rw-r--r--docs/manual/mod/allmodules.xml.de80
-rw-r--r--docs/manual/mod/allmodules.xml.es80
-rw-r--r--docs/manual/mod/allmodules.xml.ja80
-rw-r--r--docs/manual/mod/allmodules.xml.ko80
-rw-r--r--docs/manual/mod/beos.html15
-rw-r--r--docs/manual/mod/beos.html.de108
-rw-r--r--docs/manual/mod/beos.html.en106
-rw-r--r--docs/manual/mod/beos.html.es111
-rw-r--r--docs/manual/mod/beos.html.ko.euc-kr103
-rw-r--r--docs/manual/mod/beos.xml101
-rw-r--r--docs/manual/mod/beos.xml.de101
-rw-r--r--docs/manual/mod/beos.xml.es108
-rw-r--r--docs/manual/mod/beos.xml.ko97
-rw-r--r--docs/manual/mod/beos.xml.meta14
-rw-r--r--docs/manual/mod/core.html11
-rw-r--r--docs/manual/mod/core.html.de3325
-rw-r--r--docs/manual/mod/core.html.en3165
-rw-r--r--docs/manual/mod/core.html.ja.euc-jp3173
-rw-r--r--docs/manual/mod/core.xml3110
-rw-r--r--docs/manual/mod/core.xml.de3261
-rw-r--r--docs/manual/mod/core.xml.ja3099
-rw-r--r--docs/manual/mod/core.xml.meta13
-rw-r--r--docs/manual/mod/directive-dict.html11
-rw-r--r--docs/manual/mod/directive-dict.html.en291
-rw-r--r--docs/manual/mod/directive-dict.html.ja.euc-jp301
-rw-r--r--docs/manual/mod/directive-dict.html.ko.euc-kr250
-rw-r--r--docs/manual/mod/directive-dict.xml288
-rw-r--r--docs/manual/mod/directive-dict.xml.ja294
-rw-r--r--docs/manual/mod/directive-dict.xml.ko248
-rw-r--r--docs/manual/mod/directive-dict.xml.meta13
-rw-r--r--docs/manual/mod/directives.html19
-rw-r--r--docs/manual/mod/directives.html.de414
-rw-r--r--docs/manual/mod/directives.html.en415
-rw-r--r--docs/manual/mod/directives.html.es417
-rw-r--r--docs/manual/mod/directives.html.ja.euc-jp410
-rw-r--r--docs/manual/mod/directives.html.ko.euc-kr412
-rw-r--r--docs/manual/mod/directives.xml39
-rw-r--r--docs/manual/mod/directives.xml.de39
-rw-r--r--docs/manual/mod/directives.xml.es41
-rw-r--r--docs/manual/mod/directives.xml.ja37
-rw-r--r--docs/manual/mod/directives.xml.ko36
-rw-r--r--docs/manual/mod/directives.xml.meta15
-rw-r--r--docs/manual/mod/index.html19
-rw-r--r--docs/manual/mod/index.html.de187
-rw-r--r--docs/manual/mod/index.html.en185
-rw-r--r--docs/manual/mod/index.html.es188
-rw-r--r--docs/manual/mod/index.html.ja.euc-jp174
-rw-r--r--docs/manual/mod/index.html.ko.euc-kr169
-rw-r--r--docs/manual/mod/index.xml36
-rw-r--r--docs/manual/mod/index.xml.de36
-rw-r--r--docs/manual/mod/index.xml.es40
-rw-r--r--docs/manual/mod/index.xml.ja35
-rw-r--r--docs/manual/mod/index.xml.ko35
-rw-r--r--docs/manual/mod/index.xml.meta15
-rw-r--r--docs/manual/mod/leader.html11
-rw-r--r--docs/manual/mod/leader.html.de94
-rw-r--r--docs/manual/mod/leader.html.en90
-rw-r--r--docs/manual/mod/leader.html.ko.euc-kr89
-rw-r--r--docs/manual/mod/leader.xml98
-rw-r--r--docs/manual/mod/leader.xml.de101
-rw-r--r--docs/manual/mod/leader.xml.ko97
-rw-r--r--docs/manual/mod/leader.xml.meta13
-rw-r--r--docs/manual/mod/mod_actions.html15
-rw-r--r--docs/manual/mod/mod_actions.html.de168
-rw-r--r--docs/manual/mod/mod_actions.html.en165
-rw-r--r--docs/manual/mod/mod_actions.html.ja.euc-jp173
-rw-r--r--docs/manual/mod/mod_actions.html.ko.euc-kr164
-rw-r--r--docs/manual/mod/mod_actions.xml153
-rw-r--r--docs/manual/mod/mod_actions.xml.de156
-rw-r--r--docs/manual/mod/mod_actions.xml.ja157
-rw-r--r--docs/manual/mod/mod_actions.xml.ko152
-rw-r--r--docs/manual/mod/mod_actions.xml.meta14
-rw-r--r--docs/manual/mod/mod_alias.html11
-rw-r--r--docs/manual/mod/mod_alias.html.en370
-rw-r--r--docs/manual/mod/mod_alias.html.ja.euc-jp380
-rw-r--r--docs/manual/mod/mod_alias.html.ko.euc-kr349
-rw-r--r--docs/manual/mod/mod_alias.xml357
-rw-r--r--docs/manual/mod/mod_alias.xml.ja372
-rw-r--r--docs/manual/mod/mod_alias.xml.ko335
-rw-r--r--docs/manual/mod/mod_alias.xml.meta13
-rw-r--r--docs/manual/mod/mod_asis.html11
-rw-r--r--docs/manual/mod/mod_asis.html.en112
-rw-r--r--docs/manual/mod/mod_asis.html.ja.euc-jp110
-rw-r--r--docs/manual/mod/mod_asis.html.ko.euc-kr108
-rw-r--r--docs/manual/mod/mod_asis.xml93
-rw-r--r--docs/manual/mod/mod_asis.xml.ja92
-rw-r--r--docs/manual/mod/mod_asis.xml.ko90
-rw-r--r--docs/manual/mod/mod_asis.xml.meta13
-rw-r--r--docs/manual/mod/mod_auth_basic.html11
-rw-r--r--docs/manual/mod/mod_auth_basic.html.en130
-rw-r--r--docs/manual/mod/mod_auth_basic.html.ja.euc-jp133
-rw-r--r--docs/manual/mod/mod_auth_basic.html.ko.euc-kr128
-rw-r--r--docs/manual/mod/mod_auth_basic.xml111
-rw-r--r--docs/manual/mod/mod_auth_basic.xml.ja112
-rw-r--r--docs/manual/mod/mod_auth_basic.xml.ko109
-rw-r--r--docs/manual/mod/mod_auth_basic.xml.meta13
-rw-r--r--docs/manual/mod/mod_auth_digest.html7
-rw-r--r--docs/manual/mod/mod_auth_digest.html.en299
-rw-r--r--docs/manual/mod/mod_auth_digest.html.ko.euc-kr288
-rw-r--r--docs/manual/mod/mod_auth_digest.xml307
-rw-r--r--docs/manual/mod/mod_auth_digest.xml.ko295
-rw-r--r--docs/manual/mod/mod_auth_digest.xml.meta12
-rw-r--r--docs/manual/mod/mod_auth_ldap.html3
-rw-r--r--docs/manual/mod/mod_auth_ldap.html.en860
-rw-r--r--docs/manual/mod/mod_auth_ldap.xml852
-rw-r--r--docs/manual/mod/mod_auth_ldap.xml.meta11
-rw-r--r--docs/manual/mod/mod_authn_anon.html11
-rw-r--r--docs/manual/mod/mod_authn_anon.html.en224
-rw-r--r--docs/manual/mod/mod_authn_anon.html.ja.euc-jp224
-rw-r--r--docs/manual/mod/mod_authn_anon.html.ko.euc-kr211
-rw-r--r--docs/manual/mod/mod_authn_anon.xml207
-rw-r--r--docs/manual/mod/mod_authn_anon.xml.ja206
-rw-r--r--docs/manual/mod/mod_authn_anon.xml.ko195
-rw-r--r--docs/manual/mod/mod_authn_anon.xml.meta13
-rw-r--r--docs/manual/mod/mod_authn_dbm.html11
-rw-r--r--docs/manual/mod/mod_authn_dbm.html.en136
-rw-r--r--docs/manual/mod/mod_authn_dbm.html.ja.euc-jp135
-rw-r--r--docs/manual/mod/mod_authn_dbm.html.ko.euc-kr129
-rw-r--r--docs/manual/mod/mod_authn_dbm.xml118
-rw-r--r--docs/manual/mod/mod_authn_dbm.xml.ja118
-rw-r--r--docs/manual/mod/mod_authn_dbm.xml.ko112
-rw-r--r--docs/manual/mod/mod_authn_dbm.xml.meta13
-rw-r--r--docs/manual/mod/mod_authn_default.html11
-rw-r--r--docs/manual/mod/mod_authn_default.html.en80
-rw-r--r--docs/manual/mod/mod_authn_default.html.ja.euc-jp80
-rw-r--r--docs/manual/mod/mod_authn_default.html.ko.euc-kr76
-rw-r--r--docs/manual/mod/mod_authn_default.xml64
-rw-r--r--docs/manual/mod/mod_authn_default.xml.ja64
-rw-r--r--docs/manual/mod/mod_authn_default.xml.ko60
-rw-r--r--docs/manual/mod/mod_authn_default.xml.meta13
-rw-r--r--docs/manual/mod/mod_authn_file.html11
-rw-r--r--docs/manual/mod/mod_authn_file.html.en132
-rw-r--r--docs/manual/mod/mod_authn_file.html.ja.euc-jp142
-rw-r--r--docs/manual/mod/mod_authn_file.html.ko.euc-kr127
-rw-r--r--docs/manual/mod/mod_authn_file.xml116
-rw-r--r--docs/manual/mod/mod_authn_file.xml.ja124
-rw-r--r--docs/manual/mod/mod_authn_file.xml.ko114
-rw-r--r--docs/manual/mod/mod_authn_file.xml.meta13
-rw-r--r--docs/manual/mod/mod_authz_dbm.html7
-rw-r--r--docs/manual/mod/mod_authz_dbm.html.en184
-rw-r--r--docs/manual/mod/mod_authz_dbm.html.ko.euc-kr168
-rw-r--r--docs/manual/mod/mod_authz_dbm.xml167
-rw-r--r--docs/manual/mod/mod_authz_dbm.xml.ko152
-rw-r--r--docs/manual/mod/mod_authz_dbm.xml.meta12
-rw-r--r--docs/manual/mod/mod_authz_default.html11
-rw-r--r--docs/manual/mod/mod_authz_default.html.en80
-rw-r--r--docs/manual/mod/mod_authz_default.html.ja.euc-jp79
-rw-r--r--docs/manual/mod/mod_authz_default.html.ko.euc-kr78
-rw-r--r--docs/manual/mod/mod_authz_default.xml64
-rw-r--r--docs/manual/mod/mod_authz_default.xml.ja63
-rw-r--r--docs/manual/mod/mod_authz_default.xml.ko62
-rw-r--r--docs/manual/mod/mod_authz_default.xml.meta13
-rw-r--r--docs/manual/mod/mod_authz_groupfile.html11
-rw-r--r--docs/manual/mod/mod_authz_groupfile.html.en125
-rw-r--r--docs/manual/mod/mod_authz_groupfile.html.ja.euc-jp132
-rw-r--r--docs/manual/mod/mod_authz_groupfile.html.ko.euc-kr121
-rw-r--r--docs/manual/mod/mod_authz_groupfile.xml109
-rw-r--r--docs/manual/mod/mod_authz_groupfile.xml.ja114
-rw-r--r--docs/manual/mod/mod_authz_groupfile.xml.ko105
-rw-r--r--docs/manual/mod/mod_authz_groupfile.xml.meta13
-rw-r--r--docs/manual/mod/mod_authz_host.html11
-rw-r--r--docs/manual/mod/mod_authz_host.html.en330
-rw-r--r--docs/manual/mod/mod_authz_host.html.ja.euc-jp344
-rw-r--r--docs/manual/mod/mod_authz_host.html.ko.euc-kr308
-rw-r--r--docs/manual/mod/mod_authz_host.xml332
-rw-r--r--docs/manual/mod/mod_authz_host.xml.ja337
-rw-r--r--docs/manual/mod/mod_authz_host.xml.ko312
-rw-r--r--docs/manual/mod/mod_authz_host.xml.meta13
-rw-r--r--docs/manual/mod/mod_authz_owner.html7
-rw-r--r--docs/manual/mod/mod_authz_owner.html.en183
-rw-r--r--docs/manual/mod/mod_authz_owner.html.ko.euc-kr180
-rw-r--r--docs/manual/mod/mod_authz_owner.xml169
-rw-r--r--docs/manual/mod/mod_authz_owner.xml.ko165
-rw-r--r--docs/manual/mod/mod_authz_owner.xml.meta12
-rw-r--r--docs/manual/mod/mod_authz_user.html7
-rw-r--r--docs/manual/mod/mod_authz_user.html.en82
-rw-r--r--docs/manual/mod/mod_authz_user.html.ko.euc-kr79
-rw-r--r--docs/manual/mod/mod_authz_user.xml66
-rw-r--r--docs/manual/mod/mod_authz_user.xml.ko63
-rw-r--r--docs/manual/mod/mod_authz_user.xml.meta12
-rw-r--r--docs/manual/mod/mod_autoindex.html11
-rw-r--r--docs/manual/mod/mod_autoindex.html.en893
-rw-r--r--docs/manual/mod/mod_autoindex.html.ja.euc-jp985
-rw-r--r--docs/manual/mod/mod_autoindex.html.ko.euc-kr835
-rw-r--r--docs/manual/mod/mod_autoindex.xml940
-rw-r--r--docs/manual/mod/mod_autoindex.xml.ja1023
-rw-r--r--docs/manual/mod/mod_autoindex.xml.ko883
-rw-r--r--docs/manual/mod/mod_autoindex.xml.meta13
-rw-r--r--docs/manual/mod/mod_cache.html7
-rw-r--r--docs/manual/mod/mod_cache.html.en333
-rw-r--r--docs/manual/mod/mod_cache.html.ko.euc-kr321
-rw-r--r--docs/manual/mod/mod_cache.xml335
-rw-r--r--docs/manual/mod/mod_cache.xml.ko323
-rw-r--r--docs/manual/mod/mod_cache.xml.meta12
-rw-r--r--docs/manual/mod/mod_cern_meta.html7
-rw-r--r--docs/manual/mod/mod_cern_meta.html.en128
-rw-r--r--docs/manual/mod/mod_cern_meta.html.ko.euc-kr120
-rw-r--r--docs/manual/mod/mod_cern_meta.xml119
-rw-r--r--docs/manual/mod/mod_cern_meta.xml.ko111
-rw-r--r--docs/manual/mod/mod_cern_meta.xml.meta12
-rw-r--r--docs/manual/mod/mod_cgi.html11
-rw-r--r--docs/manual/mod/mod_cgi.html.en246
-rw-r--r--docs/manual/mod/mod_cgi.html.ja.euc-jp254
-rw-r--r--docs/manual/mod/mod_cgi.html.ko.euc-kr232
-rw-r--r--docs/manual/mod/mod_cgi.xml238
-rw-r--r--docs/manual/mod/mod_cgi.xml.ja244
-rw-r--r--docs/manual/mod/mod_cgi.xml.ko226
-rw-r--r--docs/manual/mod/mod_cgi.xml.meta13
-rw-r--r--docs/manual/mod/mod_cgid.html11
-rw-r--r--docs/manual/mod/mod_cgid.html.en104
-rw-r--r--docs/manual/mod/mod_cgid.html.ja.euc-jp98
-rw-r--r--docs/manual/mod/mod_cgid.html.ko.euc-kr97
-rw-r--r--docs/manual/mod/mod_cgid.xml98
-rw-r--r--docs/manual/mod/mod_cgid.xml.ja92
-rw-r--r--docs/manual/mod/mod_cgid.xml.ko91
-rw-r--r--docs/manual/mod/mod_cgid.xml.meta13
-rw-r--r--docs/manual/mod/mod_charset_lite.html7
-rw-r--r--docs/manual/mod/mod_charset_lite.html.en209
-rw-r--r--docs/manual/mod/mod_charset_lite.html.ko.euc-kr196
-rw-r--r--docs/manual/mod/mod_charset_lite.xml198
-rw-r--r--docs/manual/mod/mod_charset_lite.xml.ko185
-rw-r--r--docs/manual/mod/mod_charset_lite.xml.meta12
-rw-r--r--docs/manual/mod/mod_dav.html11
-rw-r--r--docs/manual/mod/mod_dav.html.en268
-rw-r--r--docs/manual/mod/mod_dav.html.ja.euc-jp274
-rw-r--r--docs/manual/mod/mod_dav.html.ko.euc-kr263
-rw-r--r--docs/manual/mod/mod_dav.xml254
-rw-r--r--docs/manual/mod/mod_dav.xml.ja257
-rw-r--r--docs/manual/mod/mod_dav.xml.ko247
-rw-r--r--docs/manual/mod/mod_dav.xml.meta13
-rw-r--r--docs/manual/mod/mod_dav_fs.html11
-rw-r--r--docs/manual/mod/mod_dav_fs.html.en97
-rw-r--r--docs/manual/mod/mod_dav_fs.html.ja.euc-jp89
-rw-r--r--docs/manual/mod/mod_dav_fs.html.ko.euc-kr96
-rw-r--r--docs/manual/mod/mod_dav_fs.xml86
-rw-r--r--docs/manual/mod/mod_dav_fs.xml.ja75
-rw-r--r--docs/manual/mod/mod_dav_fs.xml.ko82
-rw-r--r--docs/manual/mod/mod_dav_fs.xml.meta13
-rw-r--r--docs/manual/mod/mod_dav_lock.html3
-rw-r--r--docs/manual/mod/mod_dav_lock.html.en99
-rw-r--r--docs/manual/mod/mod_dav_lock.xml91
-rw-r--r--docs/manual/mod/mod_dav_lock.xml.meta11
-rwxr-xr-xdocs/manual/mod/mod_deflate.html11
-rw-r--r--docs/manual/mod/mod_deflate.html.en382
-rw-r--r--docs/manual/mod/mod_deflate.html.ja.euc-jp383
-rw-r--r--docs/manual/mod/mod_deflate.html.ko.euc-kr366
-rw-r--r--docs/manual/mod/mod_deflate.xml364
-rw-r--r--docs/manual/mod/mod_deflate.xml.ja354
-rw-r--r--docs/manual/mod/mod_deflate.xml.ko345
-rw-r--r--docs/manual/mod/mod_deflate.xml.meta13
-rw-r--r--docs/manual/mod/mod_dir.html11
-rw-r--r--docs/manual/mod/mod_dir.html.en169
-rw-r--r--docs/manual/mod/mod_dir.html.ja.euc-jp180
-rw-r--r--docs/manual/mod/mod_dir.html.ko.euc-kr167
-rw-r--r--docs/manual/mod/mod_dir.xml153
-rw-r--r--docs/manual/mod/mod_dir.xml.ja163
-rw-r--r--docs/manual/mod/mod_dir.xml.ko149
-rw-r--r--docs/manual/mod/mod_dir.xml.meta13
-rw-r--r--docs/manual/mod/mod_disk_cache.html7
-rw-r--r--docs/manual/mod/mod_disk_cache.html.en368
-rw-r--r--docs/manual/mod/mod_disk_cache.html.ko.euc-kr355
-rw-r--r--docs/manual/mod/mod_disk_cache.xml347
-rw-r--r--docs/manual/mod/mod_disk_cache.xml.ko334
-rw-r--r--docs/manual/mod/mod_disk_cache.xml.meta12
-rw-r--r--docs/manual/mod/mod_echo.html11
-rw-r--r--docs/manual/mod/mod_echo.html.en73
-rw-r--r--docs/manual/mod/mod_echo.html.ja.euc-jp72
-rw-r--r--docs/manual/mod/mod_echo.html.ko.euc-kr71
-rw-r--r--docs/manual/mod/mod_echo.xml59
-rw-r--r--docs/manual/mod/mod_echo.xml.ja58
-rw-r--r--docs/manual/mod/mod_echo.xml.ko57
-rw-r--r--docs/manual/mod/mod_echo.xml.meta13
-rw-r--r--docs/manual/mod/mod_env.html11
-rw-r--r--docs/manual/mod/mod_env.html.en117
-rw-r--r--docs/manual/mod/mod_env.html.ja.euc-jp117
-rw-r--r--docs/manual/mod/mod_env.html.ko.euc-kr112
-rw-r--r--docs/manual/mod/mod_env.xml97
-rw-r--r--docs/manual/mod/mod_env.xml.ja98
-rw-r--r--docs/manual/mod/mod_env.xml.ko92
-rw-r--r--docs/manual/mod/mod_env.xml.meta13
-rw-r--r--docs/manual/mod/mod_example.html7
-rw-r--r--docs/manual/mod/mod_example.html.en156
-rw-r--r--docs/manual/mod/mod_example.html.ko.euc-kr153
-rw-r--r--docs/manual/mod/mod_example.xml140
-rw-r--r--docs/manual/mod/mod_example.xml.ko137
-rw-r--r--docs/manual/mod/mod_example.xml.meta12
-rw-r--r--docs/manual/mod/mod_expires.html11
-rw-r--r--docs/manual/mod/mod_expires.html.en234
-rw-r--r--docs/manual/mod/mod_expires.html.ja.euc-jp222
-rw-r--r--docs/manual/mod/mod_expires.html.ko.euc-kr215
-rw-r--r--docs/manual/mod/mod_expires.xml215
-rw-r--r--docs/manual/mod/mod_expires.xml.ja205
-rw-r--r--docs/manual/mod/mod_expires.xml.ko199
-rw-r--r--docs/manual/mod/mod_expires.xml.meta13
-rw-r--r--docs/manual/mod/mod_ext_filter.html7
-rw-r--r--docs/manual/mod/mod_ext_filter.html.en374
-rw-r--r--docs/manual/mod/mod_ext_filter.html.ko.euc-kr350
-rw-r--r--docs/manual/mod/mod_ext_filter.xml353
-rw-r--r--docs/manual/mod/mod_ext_filter.xml.ko329
-rw-r--r--docs/manual/mod/mod_ext_filter.xml.meta12
-rw-r--r--docs/manual/mod/mod_file_cache.html7
-rw-r--r--docs/manual/mod/mod_file_cache.html.en212
-rw-r--r--docs/manual/mod/mod_file_cache.html.ko.euc-kr200
-rw-r--r--docs/manual/mod/mod_file_cache.xml198
-rw-r--r--docs/manual/mod/mod_file_cache.xml.ko189
-rw-r--r--docs/manual/mod/mod_file_cache.xml.meta12
-rw-r--r--docs/manual/mod/mod_headers.html7
-rw-r--r--docs/manual/mod/mod_headers.html.en352
-rw-r--r--docs/manual/mod/mod_headers.html.ja.euc-jp283
-rw-r--r--docs/manual/mod/mod_headers.xml342
-rw-r--r--docs/manual/mod/mod_headers.xml.ja265
-rw-r--r--docs/manual/mod/mod_headers.xml.meta12
-rw-r--r--docs/manual/mod/mod_ident.html3
-rw-r--r--docs/manual/mod/mod_ident.html.en99
-rw-r--r--docs/manual/mod/mod_ident.xml88
-rw-r--r--docs/manual/mod/mod_ident.xml.meta11
-rw-r--r--docs/manual/mod/mod_imap.html3
-rw-r--r--docs/manual/mod/mod_imap.html.en380
-rw-r--r--docs/manual/mod/mod_imap.xml358
-rw-r--r--docs/manual/mod/mod_imap.xml.meta11
-rw-r--r--docs/manual/mod/mod_include.html7
-rw-r--r--docs/manual/mod/mod_include.html.en806
-rw-r--r--docs/manual/mod/mod_include.html.ja.euc-jp789
-rw-r--r--docs/manual/mod/mod_include.xml791
-rw-r--r--docs/manual/mod/mod_include.xml.ja770
-rw-r--r--docs/manual/mod/mod_include.xml.meta12
-rw-r--r--docs/manual/mod/mod_info.html7
-rw-r--r--docs/manual/mod/mod_info.html.en117
-rw-r--r--docs/manual/mod/mod_info.html.ja.euc-jp115
-rw-r--r--docs/manual/mod/mod_info.xml104
-rw-r--r--docs/manual/mod/mod_info.xml.ja102
-rw-r--r--docs/manual/mod/mod_info.xml.meta12
-rw-r--r--docs/manual/mod/mod_isapi.html3
-rw-r--r--docs/manual/mod/mod_isapi.html.en335
-rw-r--r--docs/manual/mod/mod_isapi.xml320
-rw-r--r--docs/manual/mod/mod_isapi.xml.meta11
-rw-r--r--docs/manual/mod/mod_ldap.html3
-rw-r--r--docs/manual/mod/mod_ldap.html.en373
-rw-r--r--docs/manual/mod/mod_ldap.xml342
-rw-r--r--docs/manual/mod/mod_ldap.xml.meta11
-rw-r--r--docs/manual/mod/mod_log_config.html7
-rw-r--r--docs/manual/mod/mod_log_config.html.en425
-rw-r--r--docs/manual/mod/mod_log_config.html.ja.euc-jp421
-rw-r--r--docs/manual/mod/mod_log_config.xml447
-rw-r--r--docs/manual/mod/mod_log_config.xml.ja441
-rw-r--r--docs/manual/mod/mod_log_config.xml.meta12
-rw-r--r--docs/manual/mod/mod_log_forensic.html3
-rw-r--r--docs/manual/mod/mod_log_forensic.html.en160
-rw-r--r--docs/manual/mod/mod_log_forensic.xml145
-rw-r--r--docs/manual/mod/mod_log_forensic.xml.meta11
-rw-r--r--docs/manual/mod/mod_logio.html11
-rw-r--r--docs/manual/mod/mod_logio.html.en91
-rw-r--r--docs/manual/mod/mod_logio.html.ja.euc-jp91
-rw-r--r--docs/manual/mod/mod_logio.html.ko.euc-kr92
-rw-r--r--docs/manual/mod/mod_logio.xml75
-rw-r--r--docs/manual/mod/mod_logio.xml.ja76
-rw-r--r--docs/manual/mod/mod_logio.xml.ko77
-rw-r--r--docs/manual/mod/mod_logio.xml.meta13
-rw-r--r--docs/manual/mod/mod_mem_cache.html3
-rw-r--r--docs/manual/mod/mod_mem_cache.html.en237
-rw-r--r--docs/manual/mod/mod_mem_cache.xml221
-rw-r--r--docs/manual/mod/mod_mem_cache.xml.meta11
-rw-r--r--docs/manual/mod/mod_mime.html7
-rw-r--r--docs/manual/mod/mod_mime.html.en937
-rw-r--r--docs/manual/mod/mod_mime.html.ja.euc-jp936
-rw-r--r--docs/manual/mod/mod_mime.xml899
-rw-r--r--docs/manual/mod/mod_mime.xml.ja888
-rw-r--r--docs/manual/mod/mod_mime.xml.meta12
-rw-r--r--docs/manual/mod/mod_mime_magic.html3
-rw-r--r--docs/manual/mod/mod_mime_magic.html.en274
-rw-r--r--docs/manual/mod/mod_mime_magic.xml270
-rw-r--r--docs/manual/mod/mod_mime_magic.xml.meta11
-rw-r--r--docs/manual/mod/mod_negotiation.html7
-rw-r--r--docs/manual/mod/mod_negotiation.html.en306
-rw-r--r--docs/manual/mod/mod_negotiation.html.ja.euc-jp300
-rw-r--r--docs/manual/mod/mod_negotiation.xml285
-rw-r--r--docs/manual/mod/mod_negotiation.xml.ja277
-rw-r--r--docs/manual/mod/mod_negotiation.xml.meta12
-rw-r--r--docs/manual/mod/mod_nw_ssl.html3
-rw-r--r--docs/manual/mod/mod_nw_ssl.html.en97
-rw-r--r--docs/manual/mod/mod_nw_ssl.xml80
-rw-r--r--docs/manual/mod/mod_nw_ssl.xml.meta11
-rw-r--r--docs/manual/mod/mod_proxy.html3
-rw-r--r--docs/manual/mod/mod_proxy.html.en1042
-rw-r--r--docs/manual/mod/mod_proxy.xml1029
-rw-r--r--docs/manual/mod/mod_proxy.xml.meta11
-rw-r--r--docs/manual/mod/mod_proxy_connect.html3
-rw-r--r--docs/manual/mod/mod_proxy_connect.html.en62
-rw-r--r--docs/manual/mod/mod_proxy_connect.xml51
-rw-r--r--docs/manual/mod/mod_proxy_connect.xml.meta11
-rw-r--r--docs/manual/mod/mod_proxy_ftp.html3
-rw-r--r--docs/manual/mod/mod_proxy_ftp.html.en61
-rw-r--r--docs/manual/mod/mod_proxy_ftp.xml50
-rw-r--r--docs/manual/mod/mod_proxy_ftp.xml.meta11
-rw-r--r--docs/manual/mod/mod_proxy_http.html3
-rw-r--r--docs/manual/mod/mod_proxy_http.html.en65
-rw-r--r--docs/manual/mod/mod_proxy_http.xml54
-rw-r--r--docs/manual/mod/mod_proxy_http.xml.meta11
-rw-r--r--docs/manual/mod/mod_rewrite.html3
-rw-r--r--docs/manual/mod/mod_rewrite.html.en1801
-rw-r--r--docs/manual/mod/mod_rewrite.xml1818
-rw-r--r--docs/manual/mod/mod_rewrite.xml.meta11
-rw-r--r--docs/manual/mod/mod_setenvif.html11
-rw-r--r--docs/manual/mod/mod_setenvif.html.en286
-rw-r--r--docs/manual/mod/mod_setenvif.html.ja.euc-jp280
-rw-r--r--docs/manual/mod/mod_setenvif.html.ko.euc-kr257
-rw-r--r--docs/manual/mod/mod_setenvif.xml272
-rw-r--r--docs/manual/mod/mod_setenvif.xml.ja264
-rw-r--r--docs/manual/mod/mod_setenvif.xml.ko244
-rw-r--r--docs/manual/mod/mod_setenvif.xml.meta13
-rw-r--r--docs/manual/mod/mod_so.html11
-rw-r--r--docs/manual/mod/mod_so.html.en190
-rw-r--r--docs/manual/mod/mod_so.html.ja.euc-jp190
-rw-r--r--docs/manual/mod/mod_so.html.ko.euc-kr174
-rwxr-xr-xdocs/manual/mod/mod_so.xml175
-rw-r--r--docs/manual/mod/mod_so.xml.ja174
-rw-r--r--docs/manual/mod/mod_so.xml.ko159
-rw-r--r--docs/manual/mod/mod_so.xml.meta13
-rw-r--r--docs/manual/mod/mod_speling.html11
-rw-r--r--docs/manual/mod/mod_speling.html.en128
-rw-r--r--docs/manual/mod/mod_speling.html.ja.euc-jp127
-rw-r--r--docs/manual/mod/mod_speling.html.ko.euc-kr118
-rwxr-xr-xdocs/manual/mod/mod_speling.xml119
-rw-r--r--docs/manual/mod/mod_speling.xml.ja117
-rw-r--r--docs/manual/mod/mod_speling.xml.ko109
-rw-r--r--docs/manual/mod/mod_speling.xml.meta13
-rw-r--r--docs/manual/mod/mod_ssl.html3
-rw-r--r--docs/manual/mod/mod_ssl.html.en1582
-rw-r--r--docs/manual/mod/mod_ssl.xml1559
-rw-r--r--docs/manual/mod/mod_ssl.xml.meta11
-rw-r--r--docs/manual/mod/mod_status.html11
-rw-r--r--docs/manual/mod/mod_status.html.en162
-rw-r--r--docs/manual/mod/mod_status.html.ja.euc-jp154
-rw-r--r--docs/manual/mod/mod_status.html.ko.euc-kr148
-rw-r--r--docs/manual/mod/mod_status.xml143
-rw-r--r--docs/manual/mod/mod_status.xml.ja134
-rw-r--r--docs/manual/mod/mod_status.xml.ko129
-rw-r--r--docs/manual/mod/mod_status.xml.meta13
-rw-r--r--docs/manual/mod/mod_suexec.html11
-rw-r--r--docs/manual/mod/mod_suexec.html.en80
-rw-r--r--docs/manual/mod/mod_suexec.html.ja.euc-jp79
-rw-r--r--docs/manual/mod/mod_suexec.html.ko.euc-kr79
-rw-r--r--docs/manual/mod/mod_suexec.xml67
-rw-r--r--docs/manual/mod/mod_suexec.xml.ja66
-rw-r--r--docs/manual/mod/mod_suexec.xml.ko65
-rw-r--r--docs/manual/mod/mod_suexec.xml.meta13
-rw-r--r--docs/manual/mod/mod_unique_id.html11
-rw-r--r--docs/manual/mod/mod_unique_id.html.en216
-rw-r--r--docs/manual/mod/mod_unique_id.html.ja.euc-jp214
-rw-r--r--docs/manual/mod/mod_unique_id.html.ko.euc-kr189
-rwxr-xr-xdocs/manual/mod/mod_unique_id.xml199
-rw-r--r--docs/manual/mod/mod_unique_id.xml.ja198
-rw-r--r--docs/manual/mod/mod_unique_id.xml.ko173
-rw-r--r--docs/manual/mod/mod_unique_id.xml.meta13
-rw-r--r--docs/manual/mod/mod_userdir.html11
-rw-r--r--docs/manual/mod/mod_userdir.html.en171
-rw-r--r--docs/manual/mod/mod_userdir.html.ja.euc-jp181
-rw-r--r--docs/manual/mod/mod_userdir.html.ko.euc-kr159
-rwxr-xr-xdocs/manual/mod/mod_userdir.xml157
-rw-r--r--docs/manual/mod/mod_userdir.xml.ja165
-rw-r--r--docs/manual/mod/mod_userdir.xml.ko145
-rw-r--r--docs/manual/mod/mod_userdir.xml.meta13
-rw-r--r--docs/manual/mod/mod_usertrack.html3
-rw-r--r--docs/manual/mod/mod_usertrack.html.en236
-rwxr-xr-xdocs/manual/mod/mod_usertrack.xml241
-rw-r--r--docs/manual/mod/mod_usertrack.xml.meta11
-rw-r--r--docs/manual/mod/mod_version.html7
-rw-r--r--docs/manual/mod/mod_version.html.en147
-rw-r--r--docs/manual/mod/mod_version.html.ko.euc-kr146
-rwxr-xr-xdocs/manual/mod/mod_version.xml135
-rw-r--r--docs/manual/mod/mod_version.xml.ko133
-rw-r--r--docs/manual/mod/mod_version.xml.meta12
-rw-r--r--docs/manual/mod/mod_vhost_alias.html3
-rw-r--r--docs/manual/mod/mod_vhost_alias.html.en312
-rw-r--r--docs/manual/mod/mod_vhost_alias.xml306
-rw-r--r--docs/manual/mod/mod_vhost_alias.xml.meta11
-rw-r--r--docs/manual/mod/module-dict.html11
-rw-r--r--docs/manual/mod/module-dict.html.en117
-rw-r--r--docs/manual/mod/module-dict.html.ja.euc-jp119
-rw-r--r--docs/manual/mod/module-dict.html.ko.euc-kr109
-rw-r--r--docs/manual/mod/module-dict.xml106
-rw-r--r--docs/manual/mod/module-dict.xml.ja108
-rw-r--r--docs/manual/mod/module-dict.xml.ko97
-rw-r--r--docs/manual/mod/module-dict.xml.meta13
-rw-r--r--docs/manual/mod/mpm_common.html11
-rw-r--r--docs/manual/mod/mpm_common.html.de978
-rw-r--r--docs/manual/mod/mpm_common.html.en907
-rw-r--r--docs/manual/mod/mpm_common.html.ja.euc-jp907
-rw-r--r--docs/manual/mod/mpm_common.xml943
-rw-r--r--docs/manual/mod/mpm_common.xml.de1002
-rw-r--r--docs/manual/mod/mpm_common.xml.ja903
-rw-r--r--docs/manual/mod/mpm_common.xml.meta13
-rw-r--r--docs/manual/mod/mpm_netware.html3
-rw-r--r--docs/manual/mod/mpm_netware.html.en109
-rw-r--r--docs/manual/mod/mpm_netware.xml105
-rw-r--r--docs/manual/mod/mpm_netware.xml.meta11
-rw-r--r--docs/manual/mod/mpm_winnt.html11
-rw-r--r--docs/manual/mod/mpm_winnt.html.de93
-rw-r--r--docs/manual/mod/mpm_winnt.html.en93
-rw-r--r--docs/manual/mod/mpm_winnt.html.ja.euc-jp91
-rw-r--r--docs/manual/mod/mpm_winnt.xml88
-rw-r--r--docs/manual/mod/mpm_winnt.xml.de88
-rw-r--r--docs/manual/mod/mpm_winnt.xml.ja86
-rw-r--r--docs/manual/mod/mpm_winnt.xml.meta13
-rw-r--r--docs/manual/mod/mpmt_os2.html3
-rw-r--r--docs/manual/mod/mpmt_os2.html.en72
-rw-r--r--docs/manual/mod/mpmt_os2.xml70
-rw-r--r--docs/manual/mod/mpmt_os2.xml.meta11
-rw-r--r--docs/manual/mod/perchild.html3
-rw-r--r--docs/manual/mod/perchild.html.en264
-rw-r--r--docs/manual/mod/perchild.xml269
-rw-r--r--docs/manual/mod/perchild.xml.meta11
-rw-r--r--docs/manual/mod/prefork.html11
-rw-r--r--docs/manual/mod/prefork.html.de189
-rw-r--r--docs/manual/mod/prefork.html.en175
-rw-r--r--docs/manual/mod/prefork.html.ja.euc-jp187
-rw-r--r--docs/manual/mod/prefork.xml168
-rw-r--r--docs/manual/mod/prefork.xml.de179
-rw-r--r--docs/manual/mod/prefork.xml.ja176
-rw-r--r--docs/manual/mod/prefork.xml.meta13
-rw-r--r--docs/manual/mod/quickreference.html19
-rw-r--r--docs/manual/mod/quickreference.html.de746
-rw-r--r--docs/manual/mod/quickreference.html.en727
-rw-r--r--docs/manual/mod/quickreference.html.es730
-rw-r--r--docs/manual/mod/quickreference.html.ja.euc-jp678
-rw-r--r--docs/manual/mod/quickreference.html.ko.euc-kr676
-rw-r--r--docs/manual/mod/quickreference.xml58
-rw-r--r--docs/manual/mod/quickreference.xml.de60
-rw-r--r--docs/manual/mod/quickreference.xml.es61
-rw-r--r--docs/manual/mod/quickreference.xml.ja59
-rw-r--r--docs/manual/mod/quickreference.xml.ko55
-rw-r--r--docs/manual/mod/quickreference.xml.meta15
-rw-r--r--docs/manual/mod/threadpool.html3
-rw-r--r--docs/manual/mod/threadpool.html.en81
-rw-r--r--docs/manual/mod/threadpool.xml93
-rw-r--r--docs/manual/mod/threadpool.xml.meta11
-rw-r--r--docs/manual/mod/worker.html11
-rw-r--r--docs/manual/mod/worker.html.de169
-rw-r--r--docs/manual/mod/worker.html.en176
-rw-r--r--docs/manual/mod/worker.html.ja.euc-jp185
-rw-r--r--docs/manual/mod/worker.xml184
-rw-r--r--docs/manual/mod/worker.xml.de184
-rw-r--r--docs/manual/mod/worker.xml.ja189
-rw-r--r--docs/manual/mod/worker.xml.meta13
-rw-r--r--docs/manual/mpm.html15
-rw-r--r--docs/manual/mpm.html.en127
-rw-r--r--docs/manual/mpm.html.es133
-rw-r--r--docs/manual/mpm.html.ja.euc-jp135
-rw-r--r--docs/manual/mpm.html.ko.euc-kr118
-rw-r--r--docs/manual/mpm.xml115
-rw-r--r--docs/manual/mpm.xml.es123
-rw-r--r--docs/manual/mpm.xml.ja123
-rw-r--r--docs/manual/mpm.xml.ko106
-rw-r--r--docs/manual/mpm.xml.meta14
-rw-r--r--docs/manual/new_features_2_0.html23
-rw-r--r--docs/manual/new_features_2_0.html.de261
-rw-r--r--docs/manual/new_features_2_0.html.en241
-rw-r--r--docs/manual/new_features_2_0.html.fr249
-rw-r--r--docs/manual/new_features_2_0.html.ja.euc-jp251
-rw-r--r--docs/manual/new_features_2_0.html.ko.euc-kr231
-rw-r--r--docs/manual/new_features_2_0.html.ru.koi8-r250
-rw-r--r--docs/manual/new_features_2_0.xml233
-rw-r--r--docs/manual/new_features_2_0.xml.de255
-rw-r--r--docs/manual/new_features_2_0.xml.fr237
-rw-r--r--docs/manual/new_features_2_0.xml.ja238
-rw-r--r--docs/manual/new_features_2_0.xml.ko218
-rw-r--r--docs/manual/new_features_2_0.xml.meta16
-rw-r--r--docs/manual/new_features_2_0.xml.ru247
-rw-r--r--docs/manual/platform/.cvsignore2
-rw-r--r--docs/manual/platform/ebcdic.html7
-rw-r--r--docs/manual/platform/ebcdic.html.en584
-rw-r--r--docs/manual/platform/ebcdic.html.ko.euc-kr557
-rw-r--r--docs/manual/platform/ebcdic.xml578
-rw-r--r--docs/manual/platform/ebcdic.xml.ko551
-rw-r--r--docs/manual/platform/ebcdic.xml.meta12
-rw-r--r--docs/manual/platform/index.html7
-rw-r--r--docs/manual/platform/index.html.en94
-rw-r--r--docs/manual/platform/index.html.ko.euc-kr94
-rw-r--r--docs/manual/platform/index.xml87
-rw-r--r--docs/manual/platform/index.xml.ko87
-rw-r--r--docs/manual/platform/index.xml.meta12
-rw-r--r--docs/manual/platform/netware.html7
-rw-r--r--docs/manual/platform/netware.html.en589
-rw-r--r--docs/manual/platform/netware.html.ko.euc-kr579
-rw-r--r--docs/manual/platform/netware.xml586
-rw-r--r--docs/manual/platform/netware.xml.ko591
-rw-r--r--docs/manual/platform/netware.xml.meta12
-rw-r--r--docs/manual/platform/perf-hp.html7
-rw-r--r--docs/manual/platform/perf-hp.html.en105
-rw-r--r--docs/manual/platform/perf-hp.html.ko.euc-kr100
-rw-r--r--docs/manual/platform/perf-hp.xml112
-rw-r--r--docs/manual/platform/perf-hp.xml.ko106
-rw-r--r--docs/manual/platform/perf-hp.xml.meta12
-rw-r--r--docs/manual/platform/win_compiling.html7
-rw-r--r--docs/manual/platform/win_compiling.html.en425
-rw-r--r--docs/manual/platform/win_compiling.html.ko.euc-kr421
-rw-r--r--docs/manual/platform/win_compiling.xml425
-rw-r--r--docs/manual/platform/win_compiling.xml.ko423
-rw-r--r--docs/manual/platform/win_compiling.xml.meta12
-rw-r--r--docs/manual/platform/windows.html7
-rw-r--r--docs/manual/platform/windows.html.en729
-rw-r--r--docs/manual/platform/windows.html.ko.euc-kr686
-rw-r--r--docs/manual/platform/windows.xml721
-rw-r--r--docs/manual/platform/windows.xml.ko688
-rw-r--r--docs/manual/platform/windows.xml.meta12
-rw-r--r--docs/manual/programs/.cvsignore2
-rw-r--r--docs/manual/programs/ab.html7
-rw-r--r--docs/manual/programs/ab.html.en198
-rw-r--r--docs/manual/programs/ab.html.ko.euc-kr199
-rw-r--r--docs/manual/programs/ab.xml192
-rw-r--r--docs/manual/programs/ab.xml.ko193
-rw-r--r--docs/manual/programs/ab.xml.meta12
-rw-r--r--docs/manual/programs/apachectl.html7
-rw-r--r--docs/manual/programs/apachectl.html.en152
-rw-r--r--docs/manual/programs/apachectl.html.ko.euc-kr142
-rw-r--r--docs/manual/programs/apachectl.xml152
-rw-r--r--docs/manual/programs/apachectl.xml.ko143
-rw-r--r--docs/manual/programs/apachectl.xml.meta12
-rw-r--r--docs/manual/programs/apxs.html7
-rw-r--r--docs/manual/programs/apxs.html.en337
-rw-r--r--docs/manual/programs/apxs.html.ko.euc-kr331
-rw-r--r--docs/manual/programs/apxs.xml332
-rw-r--r--docs/manual/programs/apxs.xml.ko328
-rw-r--r--docs/manual/programs/apxs.xml.meta12
-rw-r--r--docs/manual/programs/configure.html7
-rw-r--r--docs/manual/programs/configure.html.en918
-rw-r--r--docs/manual/programs/configure.html.ko.euc-kr928
-rw-r--r--docs/manual/programs/configure.xml928
-rw-r--r--docs/manual/programs/configure.xml.ko933
-rw-r--r--docs/manual/programs/configure.xml.meta12
-rw-r--r--docs/manual/programs/dbmmanage.html7
-rw-r--r--docs/manual/programs/dbmmanage.html.en172
-rw-r--r--docs/manual/programs/dbmmanage.html.ko.euc-kr170
-rw-r--r--docs/manual/programs/dbmmanage.xml169
-rw-r--r--docs/manual/programs/dbmmanage.xml.ko169
-rw-r--r--docs/manual/programs/dbmmanage.xml.meta12
-rw-r--r--docs/manual/programs/htdigest.html7
-rw-r--r--docs/manual/programs/htdigest.html.en72
-rw-r--r--docs/manual/programs/htdigest.html.ko.euc-kr73
-rw-r--r--docs/manual/programs/htdigest.xml68
-rw-r--r--docs/manual/programs/htdigest.xml.ko69
-rw-r--r--docs/manual/programs/htdigest.xml.meta12
-rw-r--r--docs/manual/programs/htpasswd.html7
-rw-r--r--docs/manual/programs/htpasswd.html.en215
-rw-r--r--docs/manual/programs/htpasswd.html.ko.euc-kr215
-rw-r--r--docs/manual/programs/htpasswd.xml209
-rw-r--r--docs/manual/programs/htpasswd.xml.ko209
-rw-r--r--docs/manual/programs/htpasswd.xml.meta12
-rw-r--r--docs/manual/programs/httpd.html7
-rw-r--r--docs/manual/programs/httpd.html.en192
-rw-r--r--docs/manual/programs/httpd.html.ko.euc-kr186
-rw-r--r--docs/manual/programs/httpd.xml198
-rw-r--r--docs/manual/programs/httpd.xml.ko190
-rw-r--r--docs/manual/programs/httpd.xml.meta12
-rwxr-xr-xdocs/manual/programs/index.html11
-rw-r--r--docs/manual/programs/index.html.en93
-rw-r--r--docs/manual/programs/index.html.es96
-rw-r--r--docs/manual/programs/index.html.ko.euc-kr91
-rw-r--r--docs/manual/programs/index.xml88
-rw-r--r--docs/manual/programs/index.xml.es93
-rw-r--r--docs/manual/programs/index.xml.ko86
-rw-r--r--docs/manual/programs/index.xml.meta13
-rw-r--r--docs/manual/programs/logresolve.html7
-rw-r--r--docs/manual/programs/logresolve.html.en72
-rw-r--r--docs/manual/programs/logresolve.html.ko.euc-kr69
-rw-r--r--docs/manual/programs/logresolve.xml66
-rw-r--r--docs/manual/programs/logresolve.xml.ko63
-rw-r--r--docs/manual/programs/logresolve.xml.meta12
-rwxr-xr-xdocs/manual/programs/other.html7
-rw-r--r--docs/manual/programs/other.html.en59
-rw-r--r--docs/manual/programs/other.html.ko.euc-kr57
-rw-r--r--docs/manual/programs/other.xml53
-rw-r--r--docs/manual/programs/other.xml.ko51
-rw-r--r--docs/manual/programs/other.xml.meta12
-rw-r--r--docs/manual/programs/rotatelogs.html7
-rw-r--r--docs/manual/programs/rotatelogs.html.en146
-rw-r--r--docs/manual/programs/rotatelogs.html.ko.euc-kr143
-rw-r--r--docs/manual/programs/rotatelogs.xml139
-rw-r--r--docs/manual/programs/rotatelogs.xml.ko135
-rw-r--r--docs/manual/programs/rotatelogs.xml.meta12
-rw-r--r--docs/manual/programs/suexec.html7
-rw-r--r--docs/manual/programs/suexec.html.en61
-rw-r--r--docs/manual/programs/suexec.html.ko.euc-kr62
-rw-r--r--docs/manual/programs/suexec.xml57
-rw-r--r--docs/manual/programs/suexec.xml.ko57
-rw-r--r--docs/manual/programs/suexec.xml.meta12
-rw-r--r--docs/manual/sections.html11
-rw-r--r--docs/manual/sections.html.en458
-rw-r--r--docs/manual/sections.html.ja.euc-jp466
-rw-r--r--docs/manual/sections.html.ko.euc-kr420
-rw-r--r--docs/manual/sections.xml495
-rw-r--r--docs/manual/sections.xml.ja478
-rw-r--r--docs/manual/sections.xml.ko464
-rw-r--r--docs/manual/sections.xml.meta13
-rw-r--r--docs/manual/server-wide.html11
-rw-r--r--docs/manual/server-wide.html.en99
-rw-r--r--docs/manual/server-wide.html.ja.euc-jp99
-rw-r--r--docs/manual/server-wide.html.ko.euc-kr93
-rw-r--r--docs/manual/server-wide.xml117
-rw-r--r--docs/manual/server-wide.xml.ja117
-rw-r--r--docs/manual/server-wide.xml.ko111
-rw-r--r--docs/manual/server-wide.xml.meta13
-rw-r--r--docs/manual/sitemap.html19
-rw-r--r--docs/manual/sitemap.html.de256
-rw-r--r--docs/manual/sitemap.html.en254
-rw-r--r--docs/manual/sitemap.html.es260
-rw-r--r--docs/manual/sitemap.html.ja.euc-jp255
-rw-r--r--docs/manual/sitemap.html.ko.euc-kr260
-rw-r--r--docs/manual/sitemap.xml163
-rw-r--r--docs/manual/sitemap.xml.de165
-rw-r--r--docs/manual/sitemap.xml.es167
-rw-r--r--docs/manual/sitemap.xml.ja164
-rw-r--r--docs/manual/sitemap.xml.ko169
-rw-r--r--docs/manual/sitemap.xml.meta15
-rw-r--r--docs/manual/ssl/.cvsignore2
-rw-r--r--docs/manual/ssl/index.html7
-rw-r--r--docs/manual/ssl/index.html.en57
-rw-r--r--docs/manual/ssl/index.html.ja.euc-jp59
-rw-r--r--docs/manual/ssl/index.xml55
-rw-r--r--docs/manual/ssl/index.xml.ja55
-rw-r--r--docs/manual/ssl/index.xml.meta12
-rw-r--r--docs/manual/ssl/ssl_compat.html3
-rw-r--r--docs/manual/ssl/ssl_compat.html.en226
-rw-r--r--docs/manual/ssl/ssl_compat.xml260
-rw-r--r--docs/manual/ssl/ssl_compat.xml.meta11
-rw-r--r--docs/manual/ssl/ssl_faq.html3
-rw-r--r--docs/manual/ssl/ssl_faq.html.en1017
-rw-r--r--docs/manual/ssl/ssl_faq.xml1023
-rw-r--r--docs/manual/ssl/ssl_faq.xml.meta11
-rw-r--r--docs/manual/ssl/ssl_howto.html3
-rw-r--r--docs/manual/ssl/ssl_howto.html.en282
-rw-r--r--docs/manual/ssl/ssl_howto.xml290
-rw-r--r--docs/manual/ssl/ssl_howto.xml.meta11
-rw-r--r--docs/manual/ssl/ssl_intro.html7
-rw-r--r--docs/manual/ssl/ssl_intro.html.en641
-rw-r--r--docs/manual/ssl/ssl_intro.html.ja.euc-jp695
-rw-r--r--docs/manual/ssl/ssl_intro.xml668
-rw-r--r--docs/manual/ssl/ssl_intro.xml.ja722
-rw-r--r--docs/manual/ssl/ssl_intro.xml.meta12
-rw-r--r--docs/manual/ssl/ssl_intro_fig1.gifbin5738 -> 0 bytes
-rw-r--r--docs/manual/ssl/ssl_intro_fig1.pngbin7325 -> 0 bytes
-rw-r--r--docs/manual/ssl/ssl_intro_fig2.gifbin2700 -> 0 bytes
-rw-r--r--docs/manual/ssl/ssl_intro_fig2.pngbin3190 -> 0 bytes
-rw-r--r--docs/manual/ssl/ssl_intro_fig3.gifbin4020 -> 0 bytes
-rw-r--r--docs/manual/ssl/ssl_intro_fig3.pngbin5487 -> 0 bytes
-rw-r--r--docs/manual/stopping.html19
-rw-r--r--docs/manual/stopping.html.de252
-rw-r--r--docs/manual/stopping.html.en229
-rw-r--r--docs/manual/stopping.html.es263
-rw-r--r--docs/manual/stopping.html.ja.euc-jp255
-rw-r--r--docs/manual/stopping.html.ko.euc-kr203
-rw-r--r--docs/manual/stopping.xml226
-rw-r--r--docs/manual/stopping.xml.de246
-rw-r--r--docs/manual/stopping.xml.es262
-rw-r--r--docs/manual/stopping.xml.ja247
-rw-r--r--docs/manual/stopping.xml.ko202
-rw-r--r--docs/manual/stopping.xml.meta15
-rw-r--r--docs/manual/style/.cvsignore1
-rw-r--r--docs/manual/style/build.properties7
-rw-r--r--docs/manual/style/common.dtd171
-rw-r--r--docs/manual/style/css/manual-chm.css26
-rw-r--r--docs/manual/style/css/manual-loose-100pc.css154
-rw-r--r--docs/manual/style/css/manual-print.css715
-rw-r--r--docs/manual/style/css/manual-zip-100pc.css22
-rw-r--r--docs/manual/style/css/manual-zip.css23
-rw-r--r--docs/manual/style/css/manual.css1005
-rw-r--r--docs/manual/style/description.xml46
-rw-r--r--docs/manual/style/faq.dtd34
-rw-r--r--docs/manual/style/lang-targets.xml155
-rw-r--r--docs/manual/style/lang/de.xml126
-rw-r--r--docs/manual/style/lang/en.xml125
-rw-r--r--docs/manual/style/lang/es.xml125
-rw-r--r--docs/manual/style/lang/fr.xml125
-rw-r--r--docs/manual/style/lang/ja.xml113
-rw-r--r--docs/manual/style/lang/ko.xml128
-rw-r--r--docs/manual/style/lang/ru.xml112
-rw-r--r--docs/manual/style/latex/atbeginend.sty65
-rw-r--r--docs/manual/style/latex/common.xsl243
-rw-r--r--docs/manual/style/latex/directiveindex.xsl60
-rw-r--r--docs/manual/style/latex/faq.xsl42
-rw-r--r--docs/manual/style/latex/html.xsl322
-rw-r--r--docs/manual/style/latex/latex.xsl375
-rw-r--r--docs/manual/style/latex/manualpage.xsl34
-rw-r--r--docs/manual/style/latex/moduleindex.xsl217
-rw-r--r--docs/manual/style/latex/quickreference.xsl139
-rw-r--r--docs/manual/style/latex/synopsis.xsl345
-rw-r--r--docs/manual/style/manual.de.xsl36
-rw-r--r--docs/manual/style/manual.en.xsl36
-rw-r--r--docs/manual/style/manual.es.xsl36
-rw-r--r--docs/manual/style/manual.fr.xsl36
-rw-r--r--docs/manual/style/manual.ja.xsl36
-rw-r--r--docs/manual/style/manual.ko.xsl36
-rw-r--r--docs/manual/style/manual.ru.xsl36
-rw-r--r--docs/manual/style/manualpage.dtd26
-rw-r--r--docs/manual/style/modulesynopsis.dtd75
-rw-r--r--docs/manual/style/sitemap.dtd37
-rw-r--r--docs/manual/style/xsl/common.xsl1064
-rw-r--r--docs/manual/style/xsl/directiveindex.xsl129
-rw-r--r--docs/manual/style/xsl/faq.xsl198
-rw-r--r--docs/manual/style/xsl/hhc.xsl667
-rw-r--r--docs/manual/style/xsl/hhp.xsl315
-rw-r--r--docs/manual/style/xsl/indexpage.xsl209
-rw-r--r--docs/manual/style/xsl/language.xsl625
-rw-r--r--docs/manual/style/xsl/manualpage.xsl86
-rw-r--r--docs/manual/style/xsl/moduleindex.xsl332
-rw-r--r--docs/manual/style/xsl/nroff.xsl443
-rw-r--r--docs/manual/style/xsl/quickreference.xsl209
-rw-r--r--docs/manual/style/xsl/sitemap.xsl241
-rw-r--r--docs/manual/style/xsl/synopsis.xsl507
-rw-r--r--docs/manual/style/xsl/typemap.xsl79
-rw-r--r--docs/manual/style/xsl/util/allmodules.xml10
-rw-r--r--docs/manual/style/xsl/util/designations.xml10
-rw-r--r--docs/manual/style/xsl/util/lf.xml3
-rw-r--r--docs/manual/style/xsl/util/li-end.xml1
-rw-r--r--docs/manual/style/xsl/util/li-start.xml1
-rw-r--r--docs/manual/style/xsl/util/modtrans.xsl43
-rw-r--r--docs/manual/style/xsl/util/nbsp.xml3
-rw-r--r--docs/manual/style/xsl/util/tab.xml3
-rw-r--r--docs/manual/style/xsl/util/ul-end.xml1
-rw-r--r--docs/manual/style/xsl/util/ul-start.xml1
-rw-r--r--docs/manual/suexec.html11
-rw-r--r--docs/manual/suexec.html.en607
-rw-r--r--docs/manual/suexec.html.ja.euc-jp609
-rw-r--r--docs/manual/suexec.html.ko.euc-kr532
-rw-r--r--docs/manual/suexec.xml596
-rw-r--r--docs/manual/suexec.xml.ja597
-rw-r--r--docs/manual/suexec.xml.ko526
-rw-r--r--docs/manual/suexec.xml.meta13
-rw-r--r--docs/manual/upgrading.html23
-rw-r--r--docs/manual/upgrading.html.de214
-rw-r--r--docs/manual/upgrading.html.en209
-rw-r--r--docs/manual/upgrading.html.fr164
-rw-r--r--docs/manual/upgrading.html.ja.euc-jp210
-rw-r--r--docs/manual/upgrading.html.ko.euc-kr192
-rw-r--r--docs/manual/upgrading.html.ru.koi8-r201
-rw-r--r--docs/manual/upgrading.xml203
-rw-r--r--docs/manual/upgrading.xml.de212
-rw-r--r--docs/manual/upgrading.xml.ja196
-rw-r--r--docs/manual/upgrading.xml.ko180
-rw-r--r--docs/manual/upgrading.xml.meta16
-rw-r--r--docs/manual/upgrading.xml.ru199
-rwxr-xr-xdocs/manual/urlmapping.html11
-rwxr-xr-xdocs/manual/urlmapping.html.en285
-rw-r--r--docs/manual/urlmapping.html.ja.euc-jp284
-rw-r--r--docs/manual/urlmapping.html.ko.euc-kr245
-rw-r--r--docs/manual/urlmapping.xml305
-rw-r--r--docs/manual/urlmapping.xml.ja298
-rw-r--r--docs/manual/urlmapping.xml.ko267
-rw-r--r--docs/manual/urlmapping.xml.meta13
-rw-r--r--docs/manual/vhosts/.cvsignore2
-rw-r--r--docs/manual/vhosts/details.html7
-rw-r--r--docs/manual/vhosts/details.html.en439
-rw-r--r--docs/manual/vhosts/details.html.ko.euc-kr380
-rw-r--r--docs/manual/vhosts/details.xml432
-rw-r--r--docs/manual/vhosts/details.xml.ko376
-rw-r--r--docs/manual/vhosts/details.xml.meta12
-rw-r--r--docs/manual/vhosts/examples.html7
-rw-r--r--docs/manual/vhosts/examples.html.en630
-rw-r--r--docs/manual/vhosts/examples.html.ko.euc-kr618
-rw-r--r--docs/manual/vhosts/examples.xml608
-rw-r--r--docs/manual/vhosts/examples.xml.ko596
-rw-r--r--docs/manual/vhosts/examples.xml.meta12
-rw-r--r--docs/manual/vhosts/fd-limits.html11
-rw-r--r--docs/manual/vhosts/fd-limits.html.en126
-rw-r--r--docs/manual/vhosts/fd-limits.html.ja.euc-jp123
-rw-r--r--docs/manual/vhosts/fd-limits.html.ko.euc-kr120
-rw-r--r--docs/manual/vhosts/fd-limits.xml123
-rw-r--r--docs/manual/vhosts/fd-limits.xml.ja120
-rw-r--r--docs/manual/vhosts/fd-limits.xml.ko118
-rw-r--r--docs/manual/vhosts/fd-limits.xml.meta13
-rw-r--r--docs/manual/vhosts/index.html15
-rw-r--r--docs/manual/vhosts/index.html.de106
-rw-r--r--docs/manual/vhosts/index.html.en105
-rw-r--r--docs/manual/vhosts/index.html.ja.euc-jp100
-rw-r--r--docs/manual/vhosts/index.html.ko.euc-kr102
-rw-r--r--docs/manual/vhosts/index.xml106
-rw-r--r--docs/manual/vhosts/index.xml.de106
-rw-r--r--docs/manual/vhosts/index.xml.ja99
-rw-r--r--docs/manual/vhosts/index.xml.ko100
-rw-r--r--docs/manual/vhosts/index.xml.meta14
-rw-r--r--docs/manual/vhosts/ip-based.html7
-rw-r--r--docs/manual/vhosts/ip-based.html.en157
-rw-r--r--docs/manual/vhosts/ip-based.html.ko.euc-kr146
-rw-r--r--docs/manual/vhosts/ip-based.xml161
-rw-r--r--docs/manual/vhosts/ip-based.xml.ko148
-rw-r--r--docs/manual/vhosts/ip-based.xml.meta12
-rw-r--r--docs/manual/vhosts/mass.html7
-rw-r--r--docs/manual/vhosts/mass.html.en445
-rw-r--r--docs/manual/vhosts/mass.html.ko.euc-kr421
-rw-r--r--docs/manual/vhosts/mass.xml436
-rw-r--r--docs/manual/vhosts/mass.xml.ko411
-rw-r--r--docs/manual/vhosts/mass.xml.meta12
-rw-r--r--docs/manual/vhosts/name-based.html15
-rw-r--r--docs/manual/vhosts/name-based.html.de266
-rw-r--r--docs/manual/vhosts/name-based.html.en244
-rw-r--r--docs/manual/vhosts/name-based.html.ja.euc-jp269
-rw-r--r--docs/manual/vhosts/name-based.html.ko.euc-kr234
-rw-r--r--docs/manual/vhosts/name-based.xml268
-rw-r--r--docs/manual/vhosts/name-based.xml.de297
-rw-r--r--docs/manual/vhosts/name-based.xml.ja288
-rw-r--r--docs/manual/vhosts/name-based.xml.ko263
-rw-r--r--docs/manual/vhosts/name-based.xml.meta14
-rw-r--r--emacs-style12
-rw-r--r--include/.cvsignore12
-rw-r--r--include/.indent.pro54
-rw-r--r--include/ap_compat.h24
-rw-r--r--include/ap_config.h251
-rw-r--r--include/ap_config_layout.h.in58
-rw-r--r--include/ap_listen.h113
-rw-r--r--include/ap_mmn.h123
-rw-r--r--include/ap_mpm.h175
-rw-r--r--include/ap_provider.h53
-rw-r--r--include/ap_regkey.h217
-rw-r--r--include/ap_release.h52
-rw-r--r--include/http_config.h1031
-rw-r--r--include/http_connection.h138
-rw-r--r--include/http_core.h635
-rw-r--r--include/http_log.h284
-rw-r--r--include/http_main.h57
-rw-r--r--include/http_protocol.h696
-rw-r--r--include/http_request.h372
-rw-r--r--include/http_vhost.h84
-rw-r--r--include/httpd.h1753
-rw-r--r--include/mpm_common.h271
-rw-r--r--include/pcreposix.h99
-rw-r--r--include/scoreboard.h215
-rw-r--r--include/util_cfgtree.h78
-rw-r--r--include/util_charset.h47
-rw-r--r--include/util_ebcdic.h77
-rw-r--r--include/util_filter.h515
-rw-r--r--include/util_ldap.h295
-rw-r--r--include/util_md5.h69
-rw-r--r--include/util_script.h141
-rw-r--r--include/util_time.h84
-rw-r--r--include/util_xml.h45
-rw-r--r--libhttpd.dsp687
-rw-r--r--modules/.cvsignore2
-rw-r--r--modules/Makefile.in6
-rw-r--r--modules/NWGNUmakefile53
-rw-r--r--modules/README54
-rw-r--r--modules/aaa/.cvsignore21
-rw-r--r--modules/aaa/.indent.pro54
-rw-r--r--modules/aaa/Makefile.in3
-rw-r--r--modules/aaa/NWGNUauthbasc250
-rw-r--r--modules/aaa/NWGNUauthdigt250
-rw-r--r--modules/aaa/NWGNUauthnano250
-rw-r--r--modules/aaa/NWGNUauthndbm249
-rw-r--r--modules/aaa/NWGNUauthndef250
-rw-r--r--modules/aaa/NWGNUauthnfil250
-rw-r--r--modules/aaa/NWGNUauthzdbm250
-rw-r--r--modules/aaa/NWGNUauthzdef250
-rw-r--r--modules/aaa/NWGNUauthzgrp250
-rw-r--r--modules/aaa/NWGNUauthzusr250
-rw-r--r--modules/aaa/NWGNUmakefile253
-rw-r--r--modules/aaa/config.m447
-rw-r--r--modules/aaa/mod_auth.h73
-rw-r--r--modules/aaa/mod_auth_basic.c314
-rw-r--r--modules/aaa/mod_auth_basic.dsp128
-rw-r--r--modules/aaa/mod_auth_digest.c2053
-rw-r--r--modules/aaa/mod_auth_digest.dsp128
-rw-r--r--modules/aaa/mod_authn_anon.c213
-rw-r--r--modules/aaa/mod_authn_anon.dsp128
-rw-r--r--modules/aaa/mod_authn_dbm.c204
-rw-r--r--modules/aaa/mod_authn_dbm.dsp128
-rw-r--r--modules/aaa/mod_authn_default.c102
-rw-r--r--modules/aaa/mod_authn_default.dsp128
-rw-r--r--modules/aaa/mod_authn_file.c178
-rw-r--r--modules/aaa/mod_authn_file.dsp128
-rw-r--r--modules/aaa/mod_authz_dbm.c282
-rw-r--r--modules/aaa/mod_authz_dbm.dsp128
-rw-r--r--modules/aaa/mod_authz_default.c114
-rw-r--r--modules/aaa/mod_authz_default.dsp128
-rw-r--r--modules/aaa/mod_authz_groupfile.c283
-rw-r--r--modules/aaa/mod_authz_groupfile.dsp128
-rw-r--r--modules/aaa/mod_authz_host.c321
-rw-r--r--modules/aaa/mod_authz_host.dsp128
-rw-r--r--modules/aaa/mod_authz_owner.c238
-rw-r--r--modules/aaa/mod_authz_user.c128
-rw-r--r--modules/aaa/mod_authz_user.dsp128
-rw-r--r--modules/arch/netware/libprews.c69
-rw-r--r--modules/arch/netware/mod_auth_basic.def1
-rw-r--r--modules/arch/netware/mod_auth_digest.def1
-rw-r--r--modules/arch/netware/mod_authn_anon.def1
-rw-r--r--modules/arch/netware/mod_authn_dbm.def2
-rw-r--r--modules/arch/netware/mod_authn_default.def1
-rw-r--r--modules/arch/netware/mod_authn_file.def3
-rw-r--r--modules/arch/netware/mod_authz_dbm.def1
-rw-r--r--modules/arch/netware/mod_authz_default.def1
-rw-r--r--modules/arch/netware/mod_authz_groupfile.def2
-rw-r--r--modules/arch/netware/mod_authz_user.def1
-rw-r--r--modules/arch/netware/mod_cache.def5
-rw-r--r--modules/arch/netware/mod_cern_meta.def1
-rw-r--r--modules/arch/netware/mod_dav.def3
-rw-r--r--modules/arch/netware/mod_disk_cache.def3
-rw-r--r--modules/arch/netware/mod_echo.def2
-rw-r--r--modules/arch/netware/mod_expires.def1
-rw-r--r--modules/arch/netware/mod_file_cache.def2
-rw-r--r--modules/arch/netware/mod_headers.def1
-rw-r--r--modules/arch/netware/mod_info.def1
-rw-r--r--modules/arch/netware/mod_logio.def2
-rw-r--r--modules/arch/netware/mod_mem_cache.def3
-rw-r--r--modules/arch/netware/mod_mime_magic.def1
-rw-r--r--modules/arch/netware/mod_netware.c193
-rw-r--r--modules/arch/netware/mod_nw_ssl.c1117
-rw-r--r--modules/arch/netware/mod_proxy.def6
-rw-r--r--modules/arch/netware/mod_proxy_connect.def4
-rw-r--r--modules/arch/netware/mod_proxy_ftp.def4
-rw-r--r--modules/arch/netware/mod_proxy_http.def7
-rw-r--r--modules/arch/netware/mod_rewrite.def1
-rw-r--r--modules/arch/netware/mod_speling.def1
-rw-r--r--modules/arch/netware/mod_status.def2
-rw-r--r--modules/arch/netware/mod_unique_id.def1
-rw-r--r--modules/arch/netware/mod_usertrack.def1
-rw-r--r--modules/arch/netware/mod_vhost_alias.def2
-rw-r--r--modules/arch/netware/moddavfs.def1
-rw-r--r--modules/arch/win32/.cvsignore20
-rw-r--r--modules/arch/win32/Makefile.in3
-rw-r--r--modules/arch/win32/config.m49
-rw-r--r--modules/arch/win32/mod_isapi.c1646
-rw-r--r--modules/arch/win32/mod_isapi.dsp132
-rw-r--r--modules/arch/win32/mod_isapi.h259
-rw-r--r--modules/arch/win32/mod_win32.c571
-rw-r--r--modules/cache/.cvsignore21
-rw-r--r--modules/cache/.indent.pro54
-rw-r--r--modules/cache/Makefile.in3
-rw-r--r--modules/cache/config.m49
-rw-r--r--modules/cache/mod_file_cache.c416
-rw-r--r--modules/cache/mod_file_cache.dsp128
-rw-r--r--modules/cache/mod_file_cache.exp1
-rw-r--r--modules/config5.m443
-rw-r--r--modules/dav/fs/.cvsignore20
-rw-r--r--modules/dav/fs/Makefile.in3
-rw-r--r--modules/dav/fs/NWGNUmakefile269
-rw-r--r--modules/dav/fs/config6.m423
-rw-r--r--modules/dav/fs/dbm.c752
-rw-r--r--modules/dav/fs/lock.c1516
-rw-r--r--modules/dav/fs/mod_dav_fs.c107
-rw-r--r--modules/dav/fs/mod_dav_fs.dsp152
-rw-r--r--modules/dav/fs/repos.c2156
-rw-r--r--modules/dav/fs/repos.h77
-rw-r--r--modules/dav/lock/.cvsignore20
-rw-r--r--modules/dav/lock/Makefile.in3
-rw-r--r--modules/dav/lock/NWGNUmakefile262
-rw-r--r--modules/dav/lock/config6.m417
-rw-r--r--modules/dav/lock/locks.c1214
-rw-r--r--modules/dav/lock/locks.h26
-rw-r--r--modules/dav/lock/mod_dav_lock.c103
-rw-r--r--modules/dav/main/.cvsignore20
-rw-r--r--modules/dav/main/Makefile.in3
-rw-r--r--modules/dav/main/NWGNUmakefile272
-rw-r--r--modules/dav/main/config5.m422
-rw-r--r--modules/dav/main/dav.imp28
-rw-r--r--modules/dav/main/liveprop.c138
-rw-r--r--modules/dav/main/mod_dav.c4844
-rw-r--r--modules/dav/main/mod_dav.dsp164
-rw-r--r--modules/dav/main/mod_dav.h2404
-rw-r--r--modules/dav/main/props.c1118
-rw-r--r--modules/dav/main/providers.c32
-rw-r--r--modules/dav/main/std_liveprop.c190
-rw-r--r--modules/dav/main/util.c2033
-rw-r--r--modules/dav/main/util_lock.c787
-rw-r--r--modules/echo/.cvsignore15
-rw-r--r--modules/echo/.indent.pro54
-rw-r--r--modules/echo/Makefile.in3
-rw-r--r--modules/echo/NWGNUmakefile261
-rw-r--r--modules/echo/config.m49
-rw-r--r--modules/echo/mod_echo.c104
-rw-r--r--modules/echo/mod_echo.dsp128
-rw-r--r--modules/experimental/.cvsignore21
-rw-r--r--modules/experimental/.indent.pro54
-rw-r--r--modules/experimental/Makefile.in3
-rw-r--r--modules/experimental/NWGNUauthldap263
-rw-r--r--modules/experimental/NWGNUcharsetl260
-rw-r--r--modules/experimental/NWGNUdsk_cach267
-rw-r--r--modules/experimental/NWGNUexample260
-rw-r--r--modules/experimental/NWGNUmakefile255
-rw-r--r--modules/experimental/NWGNUmem_cach271
-rw-r--r--modules/experimental/NWGNUmod_cach270
-rw-r--r--modules/experimental/NWGNUutilldap266
-rw-r--r--modules/experimental/README41
-rw-r--r--modules/experimental/README.ldap47
-rw-r--r--modules/experimental/cache_cache.c170
-rw-r--r--modules/experimental/cache_cache.h111
-rw-r--r--modules/experimental/cache_hash.c289
-rw-r--r--modules/experimental/cache_hash.h160
-rw-r--r--modules/experimental/cache_pqueue.c289
-rw-r--r--modules/experimental/cache_pqueue.h159
-rw-r--r--modules/experimental/cache_storage.c283
-rw-r--r--modules/experimental/cache_util.c519
-rw-r--r--modules/experimental/charset.conv55
-rw-r--r--modules/experimental/config.m438
-rw-r--r--modules/experimental/mod_auth_ldap.c1021
-rw-r--r--modules/experimental/mod_auth_ldap.def6
-rw-r--r--modules/experimental/mod_auth_ldap.dsp128
-rw-r--r--modules/experimental/mod_cache.c995
-rw-r--r--modules/experimental/mod_cache.dsp168
-rw-r--r--modules/experimental/mod_cache.h291
-rw-r--r--modules/experimental/mod_cache.imp14
-rw-r--r--modules/experimental/mod_case_filter.c129
-rw-r--r--modules/experimental/mod_case_filter_in.c159
-rw-r--r--modules/experimental/mod_charset_lite.c1137
-rw-r--r--modules/experimental/mod_charset_lite.dsp124
-rw-r--r--modules/experimental/mod_charset_lite.exp1
-rw-r--r--modules/experimental/mod_disk_cache.c921
-rw-r--r--modules/experimental/mod_disk_cache.dsp128
-rw-r--r--modules/experimental/mod_example.c1335
-rw-r--r--modules/experimental/mod_mem_cache.c1150
-rw-r--r--modules/experimental/mod_mem_cache.dsp128
-rw-r--r--modules/experimental/util_ldap.c1336
-rw-r--r--modules/experimental/util_ldap.def6
-rw-r--r--modules/experimental/util_ldap.dsp140
-rw-r--r--modules/experimental/util_ldap_cache.c429
-rw-r--r--modules/experimental/util_ldap_cache.h191
-rw-r--r--modules/experimental/util_ldap_cache_mgr.c740
-rw-r--r--modules/filters/.cvsignore21
-rw-r--r--modules/filters/.indent.pro54
-rw-r--r--modules/filters/Makefile.in3
-rw-r--r--modules/filters/NWGNUdeflate281
-rw-r--r--modules/filters/NWGNUextfiltr250
-rw-r--r--modules/filters/NWGNUmakefile255
-rw-r--r--modules/filters/config.m463
-rw-r--r--modules/filters/mod_deflate.c1179
-rw-r--r--modules/filters/mod_deflate.dsp176
-rw-r--r--modules/filters/mod_deflate.exp1
-rw-r--r--modules/filters/mod_ext_filter.c906
-rw-r--r--modules/filters/mod_ext_filter.dsp128
-rw-r--r--modules/filters/mod_ext_filter.exp1
-rw-r--r--modules/filters/mod_include.c3841
-rw-r--r--modules/filters/mod_include.dsp132
-rw-r--r--modules/filters/mod_include.exp1
-rw-r--r--modules/filters/mod_include.h105
-rw-r--r--modules/generators/.cvsignore21
-rw-r--r--modules/generators/.indent.pro54
-rw-r--r--modules/generators/Makefile.in3
-rw-r--r--modules/generators/NWGNUinfo250
-rw-r--r--modules/generators/NWGNUmakefile247
-rw-r--r--modules/generators/NWGNUstatus250
-rw-r--r--modules/generators/config5.m427
-rw-r--r--modules/generators/mod_asis.c144
-rw-r--r--modules/generators/mod_asis.dsp128
-rw-r--r--modules/generators/mod_asis.exp1
-rw-r--r--modules/generators/mod_autoindex.c2261
-rw-r--r--modules/generators/mod_autoindex.dsp128
-rw-r--r--modules/generators/mod_autoindex.exp1
-rw-r--r--modules/generators/mod_cgi.c1218
-rw-r--r--modules/generators/mod_cgi.dsp132
-rw-r--r--modules/generators/mod_cgi.exp1
-rw-r--r--modules/generators/mod_cgi.h58
-rw-r--r--modules/generators/mod_cgid.c1767
-rw-r--r--modules/generators/mod_cgid.exp1
-rw-r--r--modules/generators/mod_info.c532
-rw-r--r--modules/generators/mod_info.dsp128
-rw-r--r--modules/generators/mod_info.exp1
-rw-r--r--modules/generators/mod_status.c854
-rw-r--r--modules/generators/mod_status.dsp128
-rw-r--r--modules/generators/mod_status.exp1
-rw-r--r--modules/generators/mod_status.h53
-rw-r--r--modules/generators/mod_suexec.c137
-rw-r--r--modules/generators/mod_suexec.h22
-rw-r--r--modules/http/.cvsignore20
-rw-r--r--modules/http/.indent.pro54
-rw-r--r--modules/http/Makefile.in3
-rw-r--r--modules/http/config2.m420
-rw-r--r--modules/http/http_core.c322
-rw-r--r--modules/http/http_protocol.c3118
-rw-r--r--modules/http/http_request.c543
-rw-r--r--modules/http/mod_core.h79
-rw-r--r--modules/http/mod_mime.c990
-rw-r--r--modules/http/mod_mime.dsp128
-rw-r--r--modules/http/mod_mime.exp1
-rw-r--r--modules/loggers/.cvsignore21
-rw-r--r--modules/loggers/.indent.pro54
-rw-r--r--modules/loggers/Makefile.in3
-rw-r--r--modules/loggers/NWGNUforensic261
-rw-r--r--modules/loggers/NWGNUmakefile247
-rw-r--r--modules/loggers/NWGNUmodlogio261
-rw-r--r--modules/loggers/config.m417
-rw-r--r--modules/loggers/mod_log_config.c1521
-rw-r--r--modules/loggers/mod_log_config.dsp128
-rw-r--r--modules/loggers/mod_log_config.exp1
-rw-r--r--modules/loggers/mod_log_config.h62
-rw-r--r--modules/loggers/mod_log_forensic.c288
-rw-r--r--modules/loggers/mod_log_forensic.dsp128
-rw-r--r--modules/loggers/mod_log_forensic.exp1
-rw-r--r--modules/loggers/mod_logio.c191
-rw-r--r--modules/loggers/mod_logio.dsp128
-rw-r--r--modules/mappers/.cvsignore21
-rw-r--r--modules/mappers/.indent.pro54
-rw-r--r--modules/mappers/Makefile.in3
-rw-r--r--modules/mappers/NWGNUmakefile247
-rw-r--r--modules/mappers/NWGNUrewrite250
-rw-r--r--modules/mappers/NWGNUspeling249
-rw-r--r--modules/mappers/NWGNUvhost249
-rw-r--r--modules/mappers/config9.m461
-rw-r--r--modules/mappers/mod_actions.c220
-rw-r--r--modules/mappers/mod_actions.dsp128
-rw-r--r--modules/mappers/mod_actions.exp1
-rw-r--r--modules/mappers/mod_alias.c483
-rw-r--r--modules/mappers/mod_alias.dsp128
-rw-r--r--modules/mappers/mod_alias.exp1
-rw-r--r--modules/mappers/mod_dir.c246
-rw-r--r--modules/mappers/mod_dir.dsp128
-rw-r--r--modules/mappers/mod_dir.exp1
-rw-r--r--modules/mappers/mod_imap.c893
-rw-r--r--modules/mappers/mod_imap.dsp128
-rw-r--r--modules/mappers/mod_imap.exp1
-rw-r--r--modules/mappers/mod_negotiation.c3211
-rw-r--r--modules/mappers/mod_negotiation.dsp128
-rw-r--r--modules/mappers/mod_negotiation.exp1
-rw-r--r--modules/mappers/mod_rewrite.c4885
-rw-r--r--modules/mappers/mod_rewrite.dsp128
-rw-r--r--modules/mappers/mod_rewrite.exp1
-rw-r--r--modules/mappers/mod_rewrite.h29
-rw-r--r--modules/mappers/mod_so.c425
-rw-r--r--modules/mappers/mod_so.h29
-rw-r--r--modules/mappers/mod_speling.c532
-rw-r--r--modules/mappers/mod_speling.dsp128
-rw-r--r--modules/mappers/mod_speling.exp1
-rw-r--r--modules/mappers/mod_userdir.c365
-rw-r--r--modules/mappers/mod_userdir.dsp128
-rw-r--r--modules/mappers/mod_userdir.exp1
-rw-r--r--modules/mappers/mod_vhost_alias.c456
-rw-r--r--modules/mappers/mod_vhost_alias.dsp128
-rw-r--r--modules/mappers/mod_vhost_alias.exp1
-rw-r--r--modules/metadata/.cvsignore21
-rw-r--r--modules/metadata/.indent.pro54
-rw-r--r--modules/metadata/Makefile.in3
-rw-r--r--modules/metadata/NWGNUcernmeta250
-rw-r--r--modules/metadata/NWGNUexpires250
-rw-r--r--modules/metadata/NWGNUheaders251
-rw-r--r--modules/metadata/NWGNUmakefile253
-rw-r--r--modules/metadata/NWGNUmimemagi250
-rw-r--r--modules/metadata/NWGNUmodident250
-rw-r--r--modules/metadata/NWGNUmodversion250
-rw-r--r--modules/metadata/NWGNUuniqueid254
-rw-r--r--modules/metadata/NWGNUusertrk250
-rw-r--r--modules/metadata/config.m423
-rw-r--r--modules/metadata/mod_cern_meta.c370
-rw-r--r--modules/metadata/mod_cern_meta.dsp128
-rw-r--r--modules/metadata/mod_cern_meta.exp1
-rw-r--r--modules/metadata/mod_env.c178
-rw-r--r--modules/metadata/mod_env.dsp128
-rw-r--r--modules/metadata/mod_env.exp1
-rw-r--r--modules/metadata/mod_expires.c559
-rw-r--r--modules/metadata/mod_expires.dsp128
-rw-r--r--modules/metadata/mod_expires.exp1
-rw-r--r--modules/metadata/mod_headers.c747
-rw-r--r--modules/metadata/mod_headers.dsp128
-rw-r--r--modules/metadata/mod_headers.exp1
-rw-r--r--modules/metadata/mod_ident.c351
-rw-r--r--modules/metadata/mod_ident.dsp128
-rw-r--r--modules/metadata/mod_ident.exp1
-rw-r--r--modules/metadata/mod_mime_magic.c2471
-rw-r--r--modules/metadata/mod_mime_magic.dsp128
-rw-r--r--modules/metadata/mod_mime_magic.exp1
-rw-r--r--modules/metadata/mod_setenvif.c585
-rw-r--r--modules/metadata/mod_setenvif.dsp128
-rw-r--r--modules/metadata/mod_setenvif.exp1
-rw-r--r--modules/metadata/mod_unique_id.c366
-rw-r--r--modules/metadata/mod_unique_id.dsp128
-rw-r--r--modules/metadata/mod_unique_id.exp1
-rw-r--r--modules/metadata/mod_usertrack.c452
-rw-r--r--modules/metadata/mod_usertrack.dsp128
-rw-r--r--modules/metadata/mod_usertrack.exp1
-rw-r--r--modules/metadata/mod_version.c311
-rw-r--r--modules/metadata/mod_version.dsp128
-rw-r--r--modules/metadata/mod_version.exp1
-rw-r--r--modules/ssl/.cvsignore20
-rw-r--r--modules/ssl/Makefile.in37
-rw-r--r--modules/ssl/README107
-rw-r--r--modules/ssl/README.dsov.fig346
-rw-r--r--modules/ssl/README.dsov.ps1138
-rw-r--r--modules/ssl/config.m4126
-rw-r--r--modules/ssl/mod_ssl.c506
-rw-r--r--modules/ssl/mod_ssl.dsp328
-rw-r--r--modules/ssl/mod_ssl.h41
-rw-r--r--modules/ssl/ssl_engine_config.c1383
-rw-r--r--modules/ssl/ssl_engine_dh.c207
-rw-r--r--modules/ssl/ssl_engine_init.c1250
-rw-r--r--modules/ssl/ssl_engine_io.c1630
-rw-r--r--modules/ssl/ssl_engine_kernel.c1834
-rw-r--r--modules/ssl/ssl_engine_log.c100
-rw-r--r--modules/ssl/ssl_engine_mutex.c123
-rw-r--r--modules/ssl/ssl_engine_pphrase.c788
-rw-r--r--modules/ssl/ssl_engine_rand.c178
-rw-r--r--modules/ssl/ssl_engine_vars.c684
-rw-r--r--modules/ssl/ssl_expr.c81
-rw-r--r--modules/ssl/ssl_expr.h103
-rw-r--r--modules/ssl/ssl_expr_eval.c253
-rw-r--r--modules/ssl/ssl_expr_parse.c1081
-rw-r--r--modules/ssl/ssl_expr_parse.h27
-rw-r--r--modules/ssl/ssl_expr_parse.y147
-rw-r--r--modules/ssl/ssl_expr_scan.c1969
-rw-r--r--modules/ssl/ssl_expr_scan.l224
-rw-r--r--modules/ssl/ssl_private.h639
-rw-r--r--modules/ssl/ssl_scache.c175
-rw-r--r--modules/ssl/ssl_scache_dbm.c462
-rw-r--r--modules/ssl/ssl_scache_dc.c176
-rw-r--r--modules/ssl/ssl_scache_shmcb.c1338
-rw-r--r--modules/ssl/ssl_toolkit_compat.h230
-rw-r--r--modules/ssl/ssl_util.c347
-rw-r--r--modules/ssl/ssl_util_ssl.c571
-rw-r--r--modules/ssl/ssl_util_ssl.h79
-rw-r--r--modules/test/.cvsignore16
-rw-r--r--modules/test/.indent.pro54
-rw-r--r--modules/test/Makefile.in3
-rw-r--r--modules/test/README1
-rw-r--r--modules/test/config.m410
-rw-r--r--modules/test/mod_bucketeer.c183
-rw-r--r--modules/test/mod_bucketeer.dsp128
-rw-r--r--modules/test/mod_optional_fn_export.c47
-rw-r--r--modules/test/mod_optional_fn_export.h18
-rw-r--r--modules/test/mod_optional_fn_import.c54
-rw-r--r--modules/test/mod_optional_hook_export.c43
-rw-r--r--modules/test/mod_optional_hook_export.h23
-rw-r--r--modules/test/mod_optional_hook_import.c44
-rw-r--r--os/.cvsignore2
-rw-r--r--os/.indent.pro54
-rw-r--r--os/Makefile.in4
-rw-r--r--os/beos/.cvsignore5
-rw-r--r--os/beos/Makefile.in5
-rw-r--r--os/beos/beosd.c165
-rw-r--r--os/beos/beosd.h59
-rw-r--r--os/beos/config.m43
-rw-r--r--os/beos/os.c36
-rw-r--r--os/beos/os.h29
-rw-r--r--os/bs2000/.cvsignore2
-rw-r--r--os/bs2000/ebcdic.c209
-rw-r--r--os/bs2000/ebcdic.h23
-rw-r--r--os/bs2000/os.c142
-rw-r--r--os/bs2000/os.h33
-rw-r--r--os/config.m426
-rw-r--r--os/netware/Apache.def5
-rw-r--r--os/netware/apache.xdcbin128 -> 0 bytes
-rw-r--r--os/netware/modules.c120
-rw-r--r--os/netware/os.h39
-rw-r--r--os/netware/pre_nw.h69
-rw-r--r--os/netware/util_nw.c104
-rw-r--r--os/os2/.cvsignore5
-rw-r--r--os/os2/Makefile.in5
-rw-r--r--os/os2/config.m43
-rw-r--r--os/os2/core.mk7
-rw-r--r--os/os2/core_header.def19
-rw-r--r--os/os2/os.h32
-rw-r--r--os/os2/util_os2.c38
-rw-r--r--os/tpf/.cvsignore2
-rw-r--r--os/tpf/TPFExport7
-rw-r--r--os/tpf/ebcdic.c178
-rw-r--r--os/tpf/ebcdic.h23
-rw-r--r--os/tpf/os.c131
-rw-r--r--os/tpf/os.h86
-rw-r--r--os/tpf/samples/linkdll.jcl121
-rw-r--r--os/tpf/samples/loadset.jcl58
-rw-r--r--os/unix/.cvsignore5
-rw-r--r--os/unix/Makefile.in5
-rw-r--r--os/unix/config.m47
-rw-r--r--os/unix/os.h26
-rw-r--r--os/unix/unixd.c587
-rw-r--r--os/unix/unixd.h108
-rw-r--r--os/win32/BaseAddr.ref66
-rw-r--r--os/win32/ap_regkey.c643
-rw-r--r--os/win32/modules.c56
-rw-r--r--os/win32/os.h122
-rw-r--r--os/win32/util_win32.c185
-rw-r--r--server/.cvsignore23
-rw-r--r--server/.indent.pro54
-rw-r--r--server/Makefile.in82
-rw-r--r--server/NWGNUmakefile251
-rw-r--r--server/buildmark.c28
-rw-r--r--server/config.c2056
-rw-r--r--server/config.m415
-rw-r--r--server/connection.c178
-rw-r--r--server/core.c4628
-rw-r--r--server/eoc_bucket.c54
-rw-r--r--server/error_bucket.c73
-rw-r--r--server/gen_test_char.c120
-rw-r--r--server/gen_test_char.dsp94
-rw-r--r--server/listen.c511
-rw-r--r--server/log.c917
-rw-r--r--server/main.c748
-rw-r--r--server/mpm/.cvsignore2
-rw-r--r--server/mpm/MPM.NAMING15
-rw-r--r--server/mpm/Makefile.in4
-rw-r--r--server/mpm/beos/.cvsignore5
-rw-r--r--server/mpm/beos/Makefile.in5
-rw-r--r--server/mpm/beos/beos.c1206
-rw-r--r--server/mpm/beos/beos.h25
-rw-r--r--server/mpm/beos/config5.m47
-rw-r--r--server/mpm/beos/mpm.h39
-rw-r--r--server/mpm/beos/mpm_default.h75
-rw-r--r--server/mpm/config.m445
-rw-r--r--server/mpm/experimental/leader/.cvsignore5
-rw-r--r--server/mpm/experimental/leader/Makefile.in5
-rw-r--r--server/mpm/experimental/leader/README15
-rw-r--r--server/mpm/experimental/leader/config5.m46
-rw-r--r--server/mpm/experimental/leader/leader.c1997
-rw-r--r--server/mpm/experimental/leader/mpm.h51
-rw-r--r--server/mpm/experimental/leader/mpm_default.h68
-rw-r--r--server/mpm/experimental/perchild/.cvsignore5
-rw-r--r--server/mpm/experimental/perchild/Makefile.in5
-rw-r--r--server/mpm/experimental/perchild/config5.m46
-rw-r--r--server/mpm/experimental/perchild/mpm.h59
-rw-r--r--server/mpm/experimental/perchild/mpm_default.h70
-rw-r--r--server/mpm/experimental/perchild/perchild.c2050
-rw-r--r--server/mpm/experimental/threadpool/.cvsignore5
-rw-r--r--server/mpm/experimental/threadpool/Makefile.in5
-rw-r--r--server/mpm/experimental/threadpool/README12
-rw-r--r--server/mpm/experimental/threadpool/config5.m46
-rw-r--r--server/mpm/experimental/threadpool/mpm.h50
-rw-r--r--server/mpm/experimental/threadpool/mpm_default.h68
-rw-r--r--server/mpm/experimental/threadpool/pod.c107
-rw-r--r--server/mpm/experimental/threadpool/pod.h49
-rw-r--r--server/mpm/experimental/threadpool/threadpool.c2251
-rw-r--r--server/mpm/monitoring-services.txt94
-rw-r--r--server/mpm/mpmt_os2/.cvsignore5
-rw-r--r--server/mpm/mpmt_os2/Makefile.in5
-rw-r--r--server/mpm/mpmt_os2/config5.m45
-rw-r--r--server/mpm/mpmt_os2/mpm.h33
-rw-r--r--server/mpm/mpmt_os2/mpm_default.h58
-rw-r--r--server/mpm/mpmt_os2/mpmt_os2.c576
-rw-r--r--server/mpm/mpmt_os2/mpmt_os2_child.c479
-rw-r--r--server/mpm/netware/mpm.h47
-rw-r--r--server/mpm/netware/mpm_default.h113
-rw-r--r--server/mpm/netware/mpm_netware.c1280
-rw-r--r--server/mpm/prefork/.cvsignore5
-rw-r--r--server/mpm/prefork/Makefile.in5
-rw-r--r--server/mpm/prefork/config.m43
-rw-r--r--server/mpm/prefork/mpm.h50
-rw-r--r--server/mpm/prefork/mpm_default.h64
-rw-r--r--server/mpm/prefork/prefork.c1376
-rw-r--r--server/mpm/winnt/Win9xConHook.c696
-rw-r--r--server/mpm/winnt/Win9xConHook.def10
-rw-r--r--server/mpm/winnt/Win9xConHook.dsp103
-rw-r--r--server/mpm/winnt/Win9xConHook.h56
-rw-r--r--server/mpm/winnt/child.c1155
-rw-r--r--server/mpm/winnt/mpm.h39
-rw-r--r--server/mpm/winnt/mpm_default.h79
-rw-r--r--server/mpm/winnt/mpm_winnt.c1682
-rw-r--r--server/mpm/winnt/mpm_winnt.h120
-rw-r--r--server/mpm/winnt/nt_eventlog.c188
-rw-r--r--server/mpm/winnt/service.c1345
-rw-r--r--server/mpm/worker/.cvsignore5
-rw-r--r--server/mpm/worker/Makefile.in5
-rw-r--r--server/mpm/worker/config5.m46
-rw-r--r--server/mpm/worker/fdqueue.c382
-rw-r--r--server/mpm/worker/fdqueue.h63
-rw-r--r--server/mpm/worker/mpm.h50
-rw-r--r--server/mpm/worker/mpm_default.h68
-rw-r--r--server/mpm/worker/pod.c109
-rw-r--r--server/mpm/worker/pod.h49
-rw-r--r--server/mpm/worker/worker.c2118
-rw-r--r--server/mpm_common.c1053
-rw-r--r--server/protocol.c1558
-rw-r--r--server/provider.c97
-rw-r--r--server/request.c1897
-rw-r--r--server/scoreboard.c505
-rw-r--r--server/util.c2120
-rw-r--r--server/util_cfgtree.c46
-rw-r--r--server/util_charset.c41
-rw-r--r--server/util_debug.c127
-rw-r--r--server/util_ebcdic.c111
-rw-r--r--server/util_filter.c587
-rw-r--r--server/util_md5.c171
-rw-r--r--server/util_script.c703
-rw-r--r--server/util_time.c239
-rw-r--r--server/util_xml.c134
-rw-r--r--server/vhost.c1014
-rw-r--r--srclib/.cvsignore5
-rw-r--r--srclib/Makefile.in6
-rw-r--r--srclib/pcre/.cvsignore30
-rw-r--r--srclib/pcre/AUTHORS6
-rw-r--r--srclib/pcre/COPYING50
-rw-r--r--srclib/pcre/ChangeLog790
-rw-r--r--srclib/pcre/INSTALL185
-rw-r--r--srclib/pcre/LICENCE50
-rw-r--r--srclib/pcre/Makefile.in20
-rw-r--r--srclib/pcre/NEWS85
-rw-r--r--srclib/pcre/NON-UNIX-USE53
-rw-r--r--srclib/pcre/NWGNUmakefile267
-rw-r--r--srclib/pcre/README307
-rwxr-xr-xsrclib/pcre/RunTest94
-rwxr-xr-xsrclib/pcre/RunTest.in149
-rw-r--r--srclib/pcre/config.guess1344
-rw-r--r--srclib/pcre/config.hw46
-rw-r--r--srclib/pcre/config.in47
-rw-r--r--srclib/pcre/config.sub1507
-rw-r--r--srclib/pcre/configure.in104
-rw-r--r--srclib/pcre/dftables.c148
-rw-r--r--srclib/pcre/dftables.dsp165
-rw-r--r--srclib/pcre/dll.mk60
-rw-r--r--srclib/pcre/doc/Tech.Notes253
-rw-r--r--srclib/pcre/doc/pcre.31991
-rw-r--r--srclib/pcre/doc/pcre.html2669
-rw-r--r--srclib/pcre/doc/pcre.txt2315
-rw-r--r--srclib/pcre/doc/pcregrep.188
-rw-r--r--srclib/pcre/doc/pcregrep.html120
-rw-r--r--srclib/pcre/doc/pcregrep.txt101
-rw-r--r--srclib/pcre/doc/pcreposix.3149
-rw-r--r--srclib/pcre/doc/pcreposix.html191
-rw-r--r--srclib/pcre/doc/pcreposix.txt159
-rw-r--r--srclib/pcre/doc/pcretest.1282
-rw-r--r--srclib/pcre/doc/pcretest.html369
-rw-r--r--srclib/pcre/doc/pcretest.txt319
-rw-r--r--srclib/pcre/doc/perltest.txt29
-rw-r--r--srclib/pcre/doc/pgrep.176
-rw-r--r--srclib/pcre/doc/pgrep.html105
-rw-r--r--srclib/pcre/doc/pgrep.txt86
-rw-r--r--srclib/pcre/get.c227
-rwxr-xr-xsrclib/pcre/install-sh251
-rw-r--r--srclib/pcre/internal.h412
-rwxr-xr-xsrclib/pcre/ltconfig3078
-rw-r--r--srclib/pcre/ltmain.sh4946
-rw-r--r--srclib/pcre/maketables.c132
-rwxr-xr-xsrclib/pcre/mkinstalldirs40
-rw-r--r--srclib/pcre/pcre-config.in59
-rw-r--r--srclib/pcre/pcre.c5174
-rw-r--r--srclib/pcre/pcre.def19
-rw-r--r--srclib/pcre/pcre.dsp193
-rw-r--r--srclib/pcre/pcre.hw113
-rw-r--r--srclib/pcre/pcre.in113
-rw-r--r--srclib/pcre/pcredemo.c94
-rw-r--r--srclib/pcre/pcregrep.c540
-rw-r--r--srclib/pcre/pcreposix.c303
-rw-r--r--srclib/pcre/pcreposix.dsp154
-rw-r--r--srclib/pcre/pcreposix.h88
-rw-r--r--srclib/pcre/pcretest.c1262
-rwxr-xr-xsrclib/pcre/perltest169
-rwxr-xr-xsrclib/pcre/perltest8208
-rw-r--r--srclib/pcre/pgrep.c225
-rw-r--r--srclib/pcre/study.c401
-rw-r--r--srclib/pcre/testdata/testinput11950
-rw-r--r--srclib/pcre/testdata/testinput2723
-rw-r--r--srclib/pcre/testdata/testinput31724
-rw-r--r--srclib/pcre/testdata/testinput465
-rw-r--r--srclib/pcre/testdata/testinput5118
-rw-r--r--srclib/pcre/testdata/testinput678
-rw-r--r--srclib/pcre/testdata/testoutput13018
-rw-r--r--srclib/pcre/testdata/testoutput22380
-rw-r--r--srclib/pcre/testdata/testoutput32991
-rw-r--r--srclib/pcre/testdata/testoutput4116
-rw-r--r--srclib/pcre/testdata/testoutput5242
-rw-r--r--srclib/pcre/testdata/testoutput6319
-rw-r--r--support/.cvsignore36
-rw-r--r--support/.indent.pro54
-rw-r--r--support/Makefile.in64
-rw-r--r--support/NWGNUab254
-rw-r--r--support/NWGNUhtdbm252
-rw-r--r--support/NWGNUhtdigest252
-rw-r--r--support/NWGNUhtpasswd252
-rw-r--r--support/NWGNUlogres254
-rw-r--r--support/NWGNUmakefile249
-rw-r--r--support/NWGNUrotlogs251
-rw-r--r--support/README62
-rw-r--r--support/SHA1/README.sha134
-rw-r--r--support/SHA1/convert-sha1.pl36
-rw-r--r--support/SHA1/htpasswd-sha1.pl22
-rw-r--r--support/SHA1/ldif-sha1.example19
-rw-r--r--support/ab.c2216
-rw-r--r--support/ab.dsp123
-rw-r--r--support/abs.dsp134
-rw-r--r--support/apachectl.in102
-rw-r--r--support/apxs.in772
-rwxr-xr-xsupport/check_forensic15
-rw-r--r--support/checkgid.c109
-rw-r--r--support/config.m4104
-rw-r--r--support/dbmmanage350
-rw-r--r--support/dbmmanage.in311
-rw-r--r--support/envvars-std.in23
-rw-r--r--support/htdbm.c581
-rw-r--r--support/htdbm.dsp123
-rw-r--r--support/htdigest.c289
-rw-r--r--support/htdigest.dsp123
-rw-r--r--support/htpasswd.c609
-rw-r--r--support/htpasswd.dsp123
-rwxr-xr-xsupport/list_hooks.pl100
-rw-r--r--support/log_server_status114
-rw-r--r--support/log_server_status.in77
-rw-r--r--support/logresolve.c386
-rw-r--r--support/logresolve.dsp123
-rw-r--r--support/logresolve.pl261
-rw-r--r--support/logresolve.pl.in224
-rw-r--r--support/phf_abuse_log.cgi22
-rw-r--r--support/phf_abuse_log.cgi.in37
-rw-r--r--support/rotatelogs.c260
-rw-r--r--support/rotatelogs.dsp123
-rw-r--r--support/split-logfile98
-rw-r--r--support/split-logfile.in66
-rw-r--r--support/suexec.c635
-rw-r--r--support/suexec.h107
-rw-r--r--support/utilitiesnw.def3
-rw-r--r--support/win32/.cvsignore13
-rw-r--r--support/win32/ApacheMonitor.c1763
-rw-r--r--support/win32/ApacheMonitor.dsp175
-rw-r--r--support/win32/ApacheMonitor.h74
-rw-r--r--support/win32/ApacheMonitor.icobin1078 -> 0 bytes
-rw-r--r--support/win32/ApacheMonitor.rc96
-rw-r--r--support/win32/apache_header.bmpbin6498 -> 0 bytes
-rw-r--r--support/win32/aprun.icobin318 -> 0 bytes
-rw-r--r--support/win32/apstop.icobin318 -> 0 bytes
-rw-r--r--support/win32/srun.bmpbin246 -> 0 bytes
-rw-r--r--support/win32/sstop.bmpbin246 -> 0 bytes
-rw-r--r--support/win32/wintty.c368
-rw-r--r--support/win32/wintty.dsp123
-rw-r--r--test/.cvsignore16
-rw-r--r--test/.indent.pro54
-rw-r--r--test/Makefile.in20
-rw-r--r--test/README3
-rw-r--r--test/check_chunked57
-rw-r--r--test/cls.c181
-rw-r--r--test/tcpdumpscii.txt50
-rw-r--r--test/test-writev.c100
-rw-r--r--test/test_find.c77
-rw-r--r--test/test_limits.c200
-rw-r--r--test/test_parser.c74
-rw-r--r--test/test_select.c45
-rw-r--r--test/time-sem.c590
-rw-r--r--test/zb.c567
2299 files changed, 0 insertions, 514560 deletions
diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644
index 6c750fc902..0000000000
--- a/.cvsignore
+++ /dev/null
@@ -1,41 +0,0 @@
-config.nice
-configure
-missing
-install-sh
-mkinstalldirs
-aclocal.m4
-.deps
-generated_lists
-buildmk.stamp
-config.log
-Makefile
-libtool
-shlibtool
-config.status
-modules.c
-config.cache
-.libs
-httpd
-modules.lo
-Debug
-Release
-LibD
-LibR
-Apache.suo
-Apache.ncb
-Apache.opt
-apachecore.dll
-*.x
-*.aps
-*.plg
-*.dep
-*.mak
-*.rc
-Apache.sln
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
-autom4te.cache
-httpd.spec
diff --git a/.gdbinit b/.gdbinit
deleted file mode 100644
index 0fbe4a1a5a..0000000000
--- a/.gdbinit
+++ /dev/null
@@ -1,273 +0,0 @@
-# gdb macros which may be useful for folks using gdb to debug
-# apache. Delete it if it bothers you.
-
-define dump_table
- set $t = (apr_table_entry_t *)((apr_array_header_t *)$arg0)->elts
- set $n = ((apr_array_header_t *)$arg0)->nelts
- set $i = 0
- while $i < $n
- printf "[%u] '%s'='%s'\n", $i, $t[$i].key, $t[$i].val
- set $i = $i + 1
- end
-end
-document dump_table
- Print the key/value pairs in a table.
-end
-
-
-define rh
- run -f /home/dgaudet/ap2/conf/mpm.conf
-end
-
-define ro
- run -DONE_PROCESS
-end
-
-define dump_string_array
- set $a = (char **)((apr_array_header_t *)$arg0)->elts
- set $n = (int)((apr_array_header_t *)$arg0)->nelts
- set $i = 0
- while $i < $n
- printf "[%u] '%s'\n", $i, $a[$i]
- set $i = $i + 1
- end
-end
-document dump_string_array
- Print all of the elements in an array of strings.
-end
-
-define printmemn
- set $i = 0
- while $i < $arg1
- if $arg0[$i] < 0x20 || $arg0[$i] > 0x7e
- printf "~"
- else
- printf "%c", $arg0[$i]
- end
- set $i = $i + 1
- end
-end
-
-define print_bkt_datacol
- # arg0 == column name
- # arg1 == format
- # arg2 == value
- # arg3 == suppress header?
- set $suppressheader = $arg3
-
- if !$suppressheader
- printf " "
- printf $arg0
- printf "="
- else
- printf " | "
- end
- printf $arg1, $arg2
-end
-
-define dump_bucket_ex
- # arg0 == bucket
- # arg1 == suppress header?
- set $bucket = (struct apr_bucket *)$arg0
- set $sh = $arg1
- set $refcount = -1
-
- print_bkt_datacol "bucket" "%-9s" $bucket->type->name $sh
- printf "(0x%08lx)", (unsigned long)$bucket
- print_bkt_datacol "length" "%-6ld" (long)($bucket->length) $sh
- print_bkt_datacol "data" "0x%08lx" $bucket->data $sh
-
- if !$sh
- printf "\n "
- end
-
- if (($bucket->type == &apr_bucket_type_eos) || \
- ($bucket->type == &apr_bucket_type_flush))
-
- # metadata buckets, no content
- print_bkt_datacol "contents" "%c" ' ' $sh
- printf " "
- print_bkt_datacol "rc" "n/%c" 'a' $sh
-
- else
- if ($bucket->type == &ap_bucket_type_error)
-
- # metadata bucket, no content but it does have an error code in it
- print_bkt_datacol "contents" "%c" ' ' $sh
- set $status = ((ap_bucket_error *)$bucket->data)->status
- printf " (status=%3d) ", $status
- print_bkt_datacol "rc" "n/%c" 'a' $sh
-
- else
- if (($bucket->type == &apr_bucket_type_file) || \
- ($bucket->type == &apr_bucket_type_pipe) || \
- ($bucket->type == &apr_bucket_type_socket))
-
- # buckets that contain data not in memory (ie not printable)
-
- print_bkt_datacol "contents" "[**unprintable**%c" ']' $sh
- printf " "
- if $bucket->type == &apr_bucket_type_file
- set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
- print_bkt_datacol "rc" "%d" $refcount $sh
- end
-
- else
- if (($bucket->type == &apr_bucket_type_heap) || \
- ($bucket->type == &apr_bucket_type_pool) || \
- ($bucket->type == &apr_bucket_type_mmap) || \
- ($bucket->type == &apr_bucket_type_transient) || \
- ($bucket->type == &apr_bucket_type_immortal))
-
- # in-memory buckets
-
- if $bucket->type == &apr_bucket_type_heap
- set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
- set $p = (apr_bucket_heap *)$bucket->data
- set $data = $p->base+$bucket->start
-
- else
- if $bucket->type == &apr_bucket_type_pool
- set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
- set $p = (apr_bucket_pool *)$bucket->data
- if !$p->pool
- set $p = (apr_bucket_heap *)$bucket->data
- end
- set $data = $p->base+$bucket->start
-
- else
- if $bucket->type == &apr_bucket_type_mmap
- # is this safe if not APR_HAS_MMAP?
- set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
- set $p = (apr_bucket_mmap *)$bucket->data
- set $data = ((char *)$p->mmap->mm)+$bucket->start
-
- else
- if (($bucket->type == &apr_bucket_type_transient) || \
- ($bucket->type == &apr_bucket_type_immortal))
- set $data = ((char *)$bucket->data)+$bucket->start
-
- end
- end
- end
- end
-
- if $sh
- printf " | ["
- else
- printf " contents=["
- end
- set $datalen = $bucket->length
- if $datalen > 17
- printmem $data 17
- printf "..."
- set $datalen = 20
- else
- printmemn $data $datalen
- end
- printf "]"
- while $datalen < 20
- printf " "
- set $datalen = $datalen + 1
- end
-
- if $refcount != -1
- print_bkt_datacol "rc" "%d" $refcount $sh
- else
- print_bkt_datacol "rc" "n/%c" 'a' $sh
- end
-
- else
- # 3rd-party bucket type
- print_bkt_datacol "contents" "[**unknown**%c" ']' $sh
- printf " "
- print_bkt_datacol "rc" "n/%c" 'a' $sh
- end
- end
- end
- end
-
- printf "\n"
-
-end
-
-define dump_bucket
- dump_bucket_ex $arg0 0
-end
-document dump_bucket
- Print bucket info
-end
-
-define dump_brigade
- set $bb = (apr_bucket_brigade *)$arg0
- set $bucket = $bb->list.next
- set $sentinel = ((char *)((&($bb->list)) \
- - ((size_t) &((struct apr_bucket *)0)->link)))
- printf "dump of brigade 0x%lx\n", (unsigned long)$bb
-
- printf " | type (address) | length | "
- printf "data addr | contents | rc\n"
- printf "----------------------------------------"
- printf "----------------------------------------\n"
-
- if $bucket == $sentinel
- printf "brigade is empty\n"
- end
-
- set $j = 0
- while $bucket != $sentinel
- printf "%2d", $j
- dump_bucket_ex $bucket 1
- set $j = $j + 1
- set $bucket = $bucket->link.next
- end
- printf "end of brigade\n"
-end
-document dump_brigade
- Print bucket brigade info
-end
-
-define dump_filters
- set $f = $arg0
- while $f
- printf "%s(0x%lx): ctx=0x%lx, r=0x%lx, c=0x%lx\n", \
- $f->frec->name, (unsigned long)$f, (unsigned long)$f->ctx, \
- $f->r, $f->c
- set $f = $f->next
- end
-end
-document dump_filters
- Print filter chain info
-end
-
-define dump_process_rec
- set $p = $arg0
- printf "process_rec=0x%lx:\n", (unsigned long)$p
- printf " pool=0x%lx, pconf=0x%lx\n", \
- (unsigned long)$p->pool, (unsigned long)$p->pconf
-end
-document dump_process_rec
- Print process_rec info
-end
-
-define dump_server_rec
- set $s = $arg0
- printf "name=%s:%d\n", \
- $s->server_hostname, $s->port
- dump_process_rec($s->process)
-end
-document dump_server_rec
- Print server_rec info
-end
-
-define dump_servers
- set $s = $arg0
- while $s
- dump_server_rec($s)
- printf "\n"
- set $s = $s->next
- end
-end
-document dump_servers
- Print server_rec list info
-end
diff --git a/ABOUT_APACHE b/ABOUT_APACHE
deleted file mode 100644
index f1a193cb3b..0000000000
--- a/ABOUT_APACHE
+++ /dev/null
@@ -1,277 +0,0 @@
-
- The Apache HTTP Server Project
-
- http://httpd.apache.org/
-
- February 2002
-
-The Apache Project is a collaborative software development effort aimed
-at creating a robust, commercial-grade, featureful, and freely-available
-source code implementation of an HTTP (Web) server. The project is
-jointly managed by a group of volunteers located around the world, using
-the Internet and the Web to communicate, plan, and develop the server and
-its related documentation. These volunteers are known as the Apache Group.
-In addition, hundreds of users have contributed ideas, code, and
-documentation to the project. This file is intended to briefly describe
-the history of the Apache Group, recognize the many contributors, and
-explain how you can join the fun too.
-
-In February of 1995, the most popular server software on the Web was the
-public domain HTTP daemon developed by Rob McCool at the National Center
-for Supercomputing Applications, University of Illinois, Urbana-Champaign.
-However, development of that httpd had stalled after Rob left NCSA in
-mid-1994, and many webmasters had developed their own extensions and bug
-fixes that were in need of a common distribution. A small group of these
-webmasters, contacted via private e-mail, gathered together for the purpose
-of coordinating their changes (in the form of "patches"). Brian Behlendorf
-and Cliff Skolnick put together a mailing list, shared information space,
-and logins for the core developers on a machine in the California Bay Area,
-with bandwidth and diskspace donated by HotWired and Organic Online.
-By the end of February, eight core contributors formed the foundation
-of the original Apache Group:
-
- Brian Behlendorf Roy T. Fielding Rob Hartill
- David Robinson Cliff Skolnick Randy Terbush
- Robert S. Thau Andrew Wilson
-
-with additional contributions from
-
- Eric Hagberg Frank Peters Nicolas Pioch
-
-Using NCSA httpd 1.3 as a base, we added all of the published bug fixes
-and worthwhile enhancements we could find, tested the result on our own
-servers, and made the first official public release (0.6.2) of the Apache
-server in April 1995. By coincidence, NCSA restarted their own development
-during the same period, and Brandon Long and Beth Frank of the NCSA Server
-Development Team joined the list in March as honorary members so that the
-two projects could share ideas and fixes.
-
-The early Apache server was a big hit, but we all knew that the codebase
-needed a general overhaul and redesign. During May-June 1995, while
-Rob Hartill and the rest of the group focused on implementing new features
-for 0.7.x (like pre-forked child processes) and supporting the rapidly growing
-Apache user community, Robert Thau designed a new server architecture
-(code-named Shambhala) which included a modular structure and API for better
-extensibility, pool-based memory allocation, and an adaptive pre-forking
-process model. The group switched to this new server base in July and added
-the features from 0.7.x, resulting in Apache 0.8.8 (and its brethren)
-in August.
-
-After extensive beta testing, many ports to obscure platforms, a new set
-of documentation (by David Robinson), and the addition of many features
-in the form of our standard modules, Apache 1.0 was released on
-December 1, 1995.
-
-Less than a year after the group was formed, the Apache server passed
-NCSA's httpd as the #1 server on the Internet.
-
-The survey by Netcraft (http://www.netcraft.com/survey/) shows that Apache
-is today more widely used than all other web servers combined.
-
- ============================================================================
-
-Current Apache Group in alphabetical order as of 2 April 2002:
-
- Greg Ames IBM Corporation, Research Triangle Park, NC, USA
- Aaron Bannert California
- Brian Behlendorf Collab.Net, California
- Ken Coar IBM Corporation, Research Triangle Park, NC, USA
- Mark J. Cox Red Hat, UK
- Lars Eilebrecht Freelance Consultant, Munich, Germany
- Ralf S. Engelschall Cable & Wireless Deutschland, Munich, Germany
- Justin Erenkrantz University of California, Irvine
- Roy T. Fielding Day Software, California
- Tony Finch Covalent Technologies, California
- Dean Gaudet Transmeta Corporation, California
- Dirk-Willem van Gulik Covalent Technologies, California
- Brian Havard Australia
- Ian Holsman CNET, California
- Ben Hyde Gensym, Massachusetts
- Jim Jagielski jaguNET Access Services, Maryland
- Manoj Kasichainula Collab.Net, California
- Alexei Kosut Stanford University, California
- Martin Kraemer Munich, Germany
- Ben Laurie Freelance Consultant, UK
- Rasmus Lerdorf Yahoo!, California
- Daniel Lopez Ridruejo Covalent Technologies, California
- Doug MacEachern Covalent Technologies, California
- Aram W. Mirzadeh CableVision, New York
- Chuck Murcko The Topsail Group, Pennsylvania
- Brian Pane CNET Networks, California
- Sameer Parekh California
- David Reid UK
- William A. Rowe, Jr. Covalent, Illinois
- Wilfredo Sanchez Apple Computer, California
- Cliff Skolnick California
- Marc Slemko Canada
- Joshua Slive Canada
- Greg Stein California
- Bill Stoddard IBM Corporation, Research Triangle Park, NC
- Sander Striker The Netherlands
- Paul Sutton Seattle
- Randy Terbush Covalent Technologies, California
- Jeff Trawick IBM Corporation, Research Triangle Park, NC
- Cliff Woolley University of Virginia
-
-Apache Emeritus (old group members now off doing other things)
-
- Ryan Bloom California
- Rob Hartill Internet Movie DB, UK
- David Robinson Cambridge University, UK
- Robert S. Thau MIT, Massachusetts
- Andrew Wilson Freelance Consultant, UK
-
-Other major contributors
-
- Howard Fear (mod_include), Florent Guillaume (language negotiation),
- Koen Holtman (rewrite of mod_negotiation),
- Kevin Hughes (creator of all those nifty icons),
- Brandon Long and Beth Frank (NCSA Server Development Team, post-1.3),
- Ambarish Malpani (Beginning of the NT port),
- Rob McCool (original author of the NCSA httpd 1.3),
- Paul Richards (convinced the group to use remote CVS after 1.0),
- Garey Smiley (OS/2 port), Henry Spencer (author of the regex library).
-
-Many 3rd-party modules, frequently used and recommended, are also
-freely-available and linked from the related projects page:
-<http://modules.apache.org/>, and their authors frequently
-contribute ideas, patches, and testing.
-
-Hundreds of people have made individual contributions to the Apache
-project. Patch contributors are listed in the CHANGES file.
-Frequent contributors have included Petr Lampa, Tom Tromey, James H.
-Cloos Jr., Ed Korthof, Nathan Neulinger, Jason S. Clary, Jason A. Dour,
-Michael Douglass, Tony Sanders, Brian Tao, Michael Smith, Adam Sussman,
-Nathan Schrenk, Matthew Gray, and John Heidemann.
-
- ============================================================================
-
-How to become involved in the Apache project
-
-There are several levels of contributing. If you just want to send
-in an occasional suggestion/fix, then you can just use the bug reporting
-form at <http://httpd.apache.org/bug_report.html>. You can also subscribe
-to the announcements mailing list (announce-subscribe@httpd.apache.org) which
-we use to broadcast information about new releases, bugfixes, and upcoming
-events. There's a lot of information about the development process (much of
-it in serious need of updating) to be found at <http://httpd.apache.org/dev/>.
-
-If you'd like to become an active contributor to the Apache project (the
-group of volunteers who vote on changes to the distributed server), then
-you need to start by subscribing to the dev@httpd.apache.org mailing list.
-One warning though: traffic is high, 1000 to 1500 messages/month.
-To subscribe to the list, send an email to dev-subscribe@httpd.apache.org.
-We recommend reading the list for a while before trying to jump in to
-development.
-
- NOTE: The developer mailing list (dev@httpd.apache.org) is not
- a user support forum; it is for people actively working on development
- of the server code and documentation, and for planning future
- directions. If you have user/configuration questions, send them
- to users list <http://httpd.apache.org/userslist> or to the USENET
- newsgroup "comp.infosystems.www.servers.unix".or for windows users,
- the newsgroup "comp.infosystems.www.servers.ms-windows".
-
-There is a core group of contributors (informally called the "core")
-which was formed from the project founders and is augmented from time
-to time when core members nominate outstanding contributors and the
-rest of the core members agree. The core group focus is more on
-"business" issues and limited-circulation things like security problems
-than on mainstream code development. The term "The Apache Group"
-technically refers to this core of project contributors.
-
-The Apache project is a meritocracy -- the more work you have done, the more
-you are allowed to do. The group founders set the original rules, but
-they can be changed by vote of the active members. There is a group
-of people who have logins on our server (apache.org) and access to the
-CVS repository. Everyone has access to the CVS snapshots. Changes to
-the code are proposed on the mailing list and usually voted on by active
-members -- three +1 (yes votes) and no -1 (no votes, or vetoes) are needed
-to commit a code change during a release cycle; docs are usually committed
-first and then changed as needed, with conflicts resolved by majority vote.
-
-Our primary method of communication is our mailing list. Approximately 40
-messages a day flow over the list, and are typically very conversational in
-tone. We discuss new features to add, bug fixes, user problems, developments
-in the web server community, release dates, etc. The actual code development
-takes place on the developers' local machines, with proposed changes
-communicated using a patch (output of a unified "diff -u oldfile newfile"
-command), and committed to the source repository by one of the core
-developers using remote CVS. Anyone on the mailing list can vote on a
-particular issue, but we only count those made by active members or people
-who are known to be experts on that part of the server. Vetoes must be
-accompanied by a convincing explanation.
-
-New members of the Apache Group are added when a frequent contributor is
-nominated by one member and unanimously approved by the voting members.
-In most cases, this "new" member has been actively contributing to the
-group's work for over six months, so it's usually an easy decision.
-
-The above describes our past and current (as of July 2000) guidelines,
-which will probably change over time as the membership of the group
-changes and our development/coordination tools improve.
-
- ============================================================================
-
-The Apache Software Foundation (www.apache.org)
-
-The Apache Software Foundation exists to provide organizational, legal,
-and financial support for the Apache open-source software projects.
-Founded in June 1999 by the Apache Group, the Foundation has been
-incorporated as a membership-based, not-for-profit corporation in order
-to ensure that the Apache projects continue to exist beyond the participation
-of individual volunteers, to enable contributions of intellectual property
-and funds on a sound basis, and to provide a vehicle for limiting legal
-exposure while participating in open-source software projects.
-
-You are invited to participate in The Apache Software Foundation. We welcome
-contributions in many forms. Our membership consists of those individuals
-who have demonstrated a commitment to collaborative open-source software
-development through sustained participation and contributions within the
-Foundation's projects. Many people and companies have contributed towards
-the success of the Apache projects.
-
- ============================================================================
-
-Why Apache Is Free
-
-Apache exists to provide a robust and commercial-grade reference
-implementation of the HTTP protocol. It must remain a platform upon which
-individuals and institutions can build reliable systems, both for
-experimental purposes and for mission-critical purposes. We believe the
-tools of online publishing should be in the hands of everyone, and
-software companies should make their money providing value-added services
-such as specialized modules and support, amongst other things. We realize
-that it is often seen as an economic advantage for one company to "own" a
-market - in the software industry that means to control tightly a
-particular conduit such that all others must pay. This is typically done
-by "owning" the protocols through which companies conduct business, at the
-expense of all those other companies. To the extent that the protocols of
-the World Wide Web remain "unowned" by a single company, the Web will
-remain a level playing field for companies large and small. Thus,
-"ownership" of the protocol must be prevented, and the existence of a
-robust reference implementation of the protocol, available absolutely for
-free to all companies, is a tremendously good thing.
-
-Furthermore, Apache is an organic entity; those who benefit from it
-by using it often contribute back to it by providing feature enhancements,
-bug fixes, and support for others in public newsgroups. The amount of
-effort expended by any particular individual is usually fairly light, but
-the resulting product is made very strong. This kind of community can
-only happen with freeware -- when someone pays for software, they usually
-aren't willing to fix its bugs. One can argue, then, that Apache's
-strength comes from the fact that it's free, and if it were made "not
-free" it would suffer tremendously, even if that money were spent on a
-real development team.
-
-We want to see Apache used very widely -- by large companies, small
-companies, research institutions, schools, individuals, in the intranet
-environment, everywhere -- even though this may mean that companies who
-could afford commercial software, and would pay for it without blinking,
-might get a "free ride" by using Apache. We would even be happy if some
-commercial software companies completely dropped their own HTTP server
-development plans and used Apache as a base, with the proper attributions
-as described in the LICENSE file.
-
-Thanks for using Apache!
-
diff --git a/Apache.dsp b/Apache.dsp
deleted file mode 100644
index eaf52238b0..0000000000
--- a/Apache.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Apache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=Apache - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "Apache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "Apache.mak" CFG="Apache - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "Apache - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "Apache - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "Apache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "SHARED_MODULE" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /Fd"Release\Apache" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /stack:0x40000 /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "Apache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /Fd"Debug\Apache" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /stack:0x40000 /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "Apache - Win32 Release"
-# Name "Apache - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\build\win32\Apache.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\Apache.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\main.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "Apache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\Apache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ./build/win32/win32ver.awk Apache.exe "Apache HTTP Server" ./include/ap_release.h icon=apache.ico > .\build\win32\Apache.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "Apache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\Apache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ./build/win32/win32ver.awk Apache.exe "Apache HTTP Server" ./include/ap_release.h icon=apache.ico > .\build\win32\Apache.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/Apache.dsw b/Apache.dsw
deleted file mode 100644
index 01d6d22c11..0000000000
--- a/Apache.dsw
+++ /dev/null
@@ -1,1940 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "Apache"=".\Apache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ApacheMonitor"=".\support\win32\ApacheMonitor.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "BuildBin"=".\BuildBin.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name Apache
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name ApacheMonitor
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libapriconv_ccs_modules
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libapriconv_ces_modules
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_actions
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_alias
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_asis
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_digest
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_ldap
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authn_anon
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authn_dbm
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authn_default
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authn_file
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authz_dbm
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authz_default
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authz_groupfile
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authz_host
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_authz_user
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_autoindex
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_cern_meta
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_cgi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_charset_lite
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_dav_fs
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_dir
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_disk_cache
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_env
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_expires
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_ext_filter
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_file_cache
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_headers
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_ident
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_imap
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_include
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_info
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_isapi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_logio
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_log_config
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_log_forensic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_mem_cache
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_mime
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_mime_magic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_negotiation
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_rewrite
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_setenvif
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_speling
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_status
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_unique_id
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_userdir
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_usertrack
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_version
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_vhost_alias
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_proxy_connect
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_proxy_ftp
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_proxy_http
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name ab
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name htdbm
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name htdigest
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name htpasswd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name logresolve
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name rotatelogs
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name wintty
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "InstallBin"=".\InstallBin.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name BuildBin
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ab"=".\support\ab.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "abs"=".\support\abs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "apr"=".\srclib\apr\apr.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "apriconv"=".\srclib\apr-iconv\apriconv.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "aprutil"=".\srclib\apr-util\aprutil.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apriconv
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name gen_uri_delims
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name xml
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "dftables"=".\srclib\pcre\dftables.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "gen_test_char"=".\server\gen_test_char.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "gen_uri_delims"=".\srclib\apr-util\uri\gen_uri_delims.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "htdbm"=".\support\htdbm.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "htdigest"=".\support\htdigest.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "htpasswd"=".\support\htpasswd.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libapr"=".\srclib\apr\libapr.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "libapriconv"=".\srclib\apr-iconv\libapriconv.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libapriconv_ccs_modules"=".\srclib\apr-iconv\ccs\libapriconv_ccs_modules.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libapriconv
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libapriconv_ces_modules"=".\srclib\apr-iconv\ces\libapriconv_ces_modules.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libapriconv
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libaprutil"=".\srclib\apr-util\libaprutil.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libapriconv
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name gen_uri_delims
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name xml
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libhttpd"=".\libhttpd.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libapriconv
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name pcreposix
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name gen_test_char
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "logresolve"=".\support\logresolve.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_actions"=".\modules\mappers\mod_actions.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_alias"=".\modules\mappers\mod_alias.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_asis"=".\modules\generators\mod_asis.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_auth_basic"=".\modules\aaa\mod_auth_basic.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_auth_digest"=".\modules\aaa\mod_auth_digest.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_auth_ldap"=".\modules\experimental\mod_auth_ldap.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name util_ldap
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authn_anon"=".\modules\aaa\mod_authn_anon.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authn_dbm"=".\modules\aaa\mod_authn_dbm.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authn_default"=".\modules\aaa\mod_authn_default.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authn_file"=".\modules\aaa\mod_authn_file.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authz_dbm"=".\modules\aaa\mod_authz_dbm.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authz_default"=".\modules\aaa\mod_authz_default.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authz_groupfile"=".\modules\aaa\mod_authz_groupfile.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authz_host"=".\modules\aaa\mod_authz_host.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_authz_user"=".\modules\aaa\mod_authz_user.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_auth_basic
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_autoindex"=".\modules\generators\mod_autoindex.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_bucketeer"=".\modules\test\mod_bucketeer.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_cache"=".\modules\experimental\mod_cache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_cern_meta"=".\modules\metadata\mod_cern_meta.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_cgi"=".\modules\generators\mod_cgi.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_charset_lite"=".\modules\experimental\mod_charset_lite.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_dav"=".\modules\dav\main\mod_dav.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_dav_fs"=".\modules\dav\fs\mod_dav_fs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_dav
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_deflate"=".\modules\filters\mod_deflate.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_dir"=".\modules\mappers\mod_dir.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_disk_cache"=".\modules\experimental\mod_disk_cache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_cache
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_echo"=".\modules\echo\mod_echo.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_env"=".\modules\metadata\mod_env.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_expires"=".\modules\metadata\mod_expires.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_ext_filter"=".\modules\filters\mod_ext_filter.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_file_cache"=".\modules\cache\mod_file_cache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_headers"=".\modules\metadata\mod_headers.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_ident"=".\modules\metadata\mod_ident.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_imap"=".\modules\mappers\mod_imap.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_include"=".\modules\filters\mod_include.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_info"=".\modules\generators\mod_info.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_isapi"=".\modules\arch\win32\mod_isapi.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_log_config"=".\modules\loggers\mod_log_config.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_log_forensic"=".\modules\loggers\mod_log_forensic.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_logio"=".\modules\loggers\mod_logio.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_mem_cache"=".\modules\experimental\mod_mem_cache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_cache
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_mime"=".\modules\http\mod_mime.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_mime_magic"=".\modules\metadata\mod_mime_magic.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_negotiation"=".\modules\mappers\mod_negotiation.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy"=".\modules\proxy\mod_proxy.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy_connect"=".\modules\proxy\mod_proxy_connect.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_proxy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy_ftp"=".\modules\proxy\mod_proxy_ftp.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_proxy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy_http"=".\modules\proxy\mod_proxy_http.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name mod_proxy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_rewrite"=".\modules\mappers\mod_rewrite.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_setenvif"=".\modules\metadata\mod_setenvif.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_speling"=".\modules\mappers\mod_speling.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_ssl"=".\modules\ssl\mod_ssl.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_status"=".\modules\generators\mod_status.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_unique_id"=".\modules\metadata\mod_unique_id.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_userdir"=".\modules\mappers\mod_userdir.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_usertrack"=".\modules\metadata\mod_usertrack.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_version"=".\modules\metadata\mod_version.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_vhost_alias"=".\modules\mappers\mod_vhost_alias.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pcre"=".\srclib\pcre\pcre.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name dftables
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pcreposix"=".\srclib\pcre\pcreposix.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name pcre
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "rotatelogs"=".\support\rotatelogs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "util_ldap"=".\modules\experimental\util_ldap.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libapr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libaprutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name libhttpd
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "wintty"=".\support\win32\wintty.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name aprutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "xml"=".\srclib\apr-util\xml\expat\lib\xml.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/BuildBin.dsp b/BuildBin.dsp
deleted file mode 100644
index eda300bd40..0000000000
--- a/BuildBin.dsp
+++ /dev/null
@@ -1,97 +0,0 @@
-# Microsoft Developer Studio Project File - Name="BuildBin" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=BuildBin - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BuildBin.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BuildBin.mak" CFG="BuildBin - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BuildBin - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "BuildBin - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-
-!IF "$(CFG)" == "BuildBin - Win32 Release"
-
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir ""
-# PROP BASE Cmd_Line "NMAKE /f makefile.win"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name ".\Browse\BuildBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ""
-# PROP Intermediate_Dir ""
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" LONG=Release _tryssl _tryzlib _dummy"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name ".\Browse\Apache.bsc"
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "BuildBin - Win32 Debug"
-
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir ""
-# PROP BASE Cmd_Line "NMAKE /f makefile.win"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name ".\Browse\BuildBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ""
-# PROP Intermediate_Dir ""
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" LONG=Debug _tryssl _tryzlib _dummy"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name ".\Browse\Apache.bsc"
-# PROP Target_Dir ""
-
-!ENDIF
-
-# Begin Target
-
-# Name "BuildBin - Win32 Release"
-# Name "BuildBin - Win32 Debug"
-
-!IF "$(CFG)" == "BuildBin - Win32 Release"
-
-!ELSEIF "$(CFG)" == "BuildBin - Win32 Debug"
-
-!ENDIF
-
-# Begin Source File
-
-SOURCE=.\os\win32\BaseAddr.ref
-# End Source File
-# Begin Source File
-
-SOURCE=.\CHANGES
-# End Source File
-# Begin Source File
-
-SOURCE=.\Makefile.win
-# End Source File
-# Begin Source File
-
-SOURCE=.\STATUS
-# End Source File
-# End Target
-# End Project
diff --git a/CHANGES b/CHANGES
deleted file mode 100644
index 22aed4e4a9..0000000000
--- a/CHANGES
+++ /dev/null
@@ -1,14033 +0,0 @@
-Changes with Apache 2.1.0-dev
-
- [Remove entries to the current 2.0 section below, when backported]
-
- *) Fixes the build of proxy on Windows. Since the proxy_module is declared
- as extern using AP_MODULE_DECLARE_DATA that expands to dllexport, there
- is a LNK2001 error when building proxy_http. [Mladen Turk]
-
- *) Remove LDAP toolkit specific code from util_ldap and mod_auth_ldap.
- [Graham Leggett]
-
- *) Remove deprecated/removed APR_STATUS_IS_SUCCESS(). [Justin Erenkrantz]
-
- *) perchild MPM: Fix thread safety problem in the use of longjmp().
- [Tsuyoshi SASAMOTO <nazonazo super.win.ne.jp>]
-
- *) Add load balancer support to the scoreboard in preparation for
- load balancing support in mod_proxy. [Mladen Turk]
-
- *) mod_ssl: Build on RHEL 3. (RedHat bug: 82369.) [Justin Erenkrantz]
-
- *) mod_nw_ssl: Added the directive NWSSLUpgradeable to mod_nw_ssl to
- allow a non-secure connection to be upgraded to secure connections
- [Brad Nicholes]
-
- *) core: Add Options= syntax to AllowOverride to specify which options
- may be overridden in .htaccess files. PR 29310.
- [Tom Alsberg <alsbergt cs.huji.ac.il>, Paul Querna]
-
- *) ab: Handle long URLs with an error instead of an buffer overflow.
- PR 28204. [Erik Weide <erik.weidel mplus-technologies.de>, Paul Querna]
-
- *) mod_so, core: Add new command line options to print all loaded
- modules. '-t -D DUMP_MODULES' and '-M' will show all static
- and shared modules as loaded from the configuration file.
- [Paul Querna]
-
- *) mod_autoindex: Add ShowForbidden to IndexOptions to list files
- that are not shown because the subrequest returned 401 or 403.
- PR 10575. [Paul Querna]
-
- *) util_ldap: Switched the lock types on the shared memory cache
- from thread reader/writer locks to global mutexes in order to
- provide cross process cache protection. [Brad Nicholes]
-
- *) util_ldap: Reworked the cache locking scheme to eliminate duplicate
- cache entries in the credentials cache due to race conditions.
- [Brad Nicholes]
-
- *) util_ldap: Enhanced the util_ldap cache-info display to show more
- detail about the contents and current state of the cache.
- [Brad Nicholes]
-
- *) mod_headers: implement "Early" processing option in post_read_request
- to enable Header and RequestHeader directives to be used to set up
- testcases for pre-fixups request phases [Nick Kew]
-
- *) mod_dir: the trailing-slash behaviour is now configurable using the
- DirectorySlash directive. [André Malo]
-
- *) mod_proxy: multiple bugfixes, principally support cookies in
- ProxyPassReverse, and don't canonicalise URL passed to backend.
- Documentation correspondingly updated. [Nick Kew <nick webthing.com>]
-
- *) mod_deflate: support gzip flags in inflate_out_filter
- [Nick Kew <nick webthing.com>]
-
- *) mod_log_config: Fix a bug which prevented request completion time
- from being logged for I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
- processing. PR 29696. [Alois Treindl <alois astro.ch>]
-
- *) Add -l option to rotatelogs to let it use local time rather than
- UTC. PR 24417. [Ken Coar, Uli Zappe <uli ritual.org>]
-
- *) Drop the ErrorHeader directive which turned out to be a misnomer.
- Instead there's a new optional flag for the Header directive
- ('always'), which keeps the former ErrorHeader functionality.
- [André Malo]
-
- *) mod_deflate: Don't deflate responses with zero length
- e.g. proxied 304's [Allan Edwards]
-
- *) <IfModule> now recognizes the module identifier in addition to the
- file name. PR 29003. [Edward Rudd <eddie omegaware.com>, André Malo]
-
- *) mod_ssl: Add "SSLUserName" directive to set r->user based on a
- chosen SSL environment variable. PR 20957.
- [Martin v. Loewis <martin v.loewis.de>]
-
- *) mod_ssl: Add "SSLHonorCipherOrder" directive to enable the
- OpenSSL 0.9.7 flag which uses the server's cipher order rather
- than the client's. PR 28665.
- [Jim Schneider <jschneid netilla.com>]
-
- *) mod_ssl: Drop support for the CompatEnvVars argument to
- SSLOptions, which was never actually implemented in 2.0.
- [Joe Orton]
-
- *) Fix bug in mod_deflate that unconditionally sent deflate'd output
- even when Accept-Encoding is not present. [Justin Erenkrantz]
-
- *) Pass environment variables through to piped loggers and start
- them via the shell, resolving regressions since 1.3. PR 28815
- [Ken Coar, Jeff Trawick]
-
- *) External rewrite map responses are no longer limited to 2048
- bytes. [André Malo]
-
- *) Proxy server was deleting cookies that Apache had already
- assigned if the origin server had set any cookies. PR 27023.
- [Jim Jagielski]
-
- *) Prevent Win32 pool corruption at startup [Allan Edwards]
-
- *) Removed old and unmaintained ap_add_named_module API and changed
- the following APIs to return an error instead of hard exiting:
- ap_add_module, ap_add_loaded_module, ap_setup_prelinked_modules,
- and ap_process_resource_config. [André Malo]
-
- *) Include directives no longer refuse to process symlinks on
- directories. Instead there's now a maximum nesting level
- of included directories (128 as distributed). This is configurable
- at compile time using the -DAP_MAX_INCLUDE_DIR_DEPTH switch.
- PR 28492. [André Malo]
-
- *) Recursive Include directives no longer crash. The server stops
- including configuration files after a certain nesting level (128
- as distributed). This is configurable at compile time using the
- -DAP_MAX_INCLUDE_DEPTH switch. PR 28370. [André Malo]
-
- *) mod_headers: Allow %% in header values to represent a literal %.
- [André Malo]
-
- *) mod_headers: Allow env clauses also for 'echo' and 'unset' actions.
- [André Malo]
-
- *) mod_headers: Allow 'echo' also for ErrorHeaders. [André Malo]
-
- *) mod_cgi: Handle output on stderr during script execution on Unix
- platforms; preventing deadlock when stderr output fills pipe buffer.
- Also fixes case where stderr from nph- scripts could be lost.
- PR 22030, 18348. [Joe Orton, Jeff Trawick]
-
- *) mod_deflate: New option for DEFLATE output file (force-gzip),
- new output filter 'INFLATE' for uncompressing responses.
- [Nick Kew <Nick at WebThing dot com>, Ian Holsman]
-
- *) Added new module mod_version, which provides version dependent
- configuration containers. [André Malo]
-
- *) mod_rewrite no longer confuses the RewriteMap caches if
- different maps defined in different virtual hosts use the
- same map name. PR 26462. [André Malo]
-
- *) mod_log_config now logs all Set-Cookie headers if the %{Set-Cookie}o
- format is used. PR 27787. [André Malo]
-
- *) mod_usertrack: Escape the cookie name before pasting into the
- regexp. [André Malo]
-
- *) Allow Digest providers to return AUTH_DENIED to propagate a 401
- status and terminate the provider chain prior to checking the password.
- [Geoffrey Young]
-
- *) mod_rewrite now officially supports RewriteRules in <Proxy> sections.
- PR 27985. [André Malo]
-
- *) mod_cgid: Don't allow Scriptsock to be specified inside VirtualHost;
- Don't place script socket inside default server root instead of
- actual server root. PR 27886. [Jeff Trawick]
-
- *) Satisfy directives now can be influenced by a surrounding <Limit>
- container. PR 14726. [André Malo]
-
- *) mod_proxy: Fix handling of non-200 success status codes when
- "ProxyErrorOverride On" is configured. PR 20183.
- [Marcus Janson <marcus.janson tre.se>, Joe Orton]
-
- *) Threaded MPMs for Unix and Win32: Add support for ThreadStackSize
- directive (previously NetWare-only) to override default thread
- stack size for threads which handle client connections. Required
- for some third-party modules on platforms with small default
- thread stack size. [Jeff Trawick]
-
- *) mod_rewrite: Support for recognizing SSL variables in RewriteCond
- using the new "SSL:" format. [Joe Orton, Madhusudan Mathihalli]
-
- *) mod_setenvif: Remove "support" for Remote_User variable which
- never worked at all. PR 25725. [André Malo]
-
- *) minor mod_auth_basic and mod_auth_digest sync. mod_auth_basic
- now populates r->user with the (possibly unauthenticated) user,
- and mod_auth_digest returns 500 when a provider returns
- AUTH_GENERAL_ERROR.
- [Geoffrey Young]
-
- *) The whole codebase was relicensed and is now available under
- the Apache License, Version 2.0 (http://www.apache.org/licenses).
- [Apache Software Foundation]
-
- *) FreeBSD: Use the httpready accept filter instead of dataready on
- newer levels of the OS. [Paul Querna <chip force-elite.com>]
-
- *) Delete some make-generated files in the server directory during
- "make clean" processing. PR 26552. [Jeff Trawick]
-
- *) Add core version query function (ap_get_server_revision) and
- accompanying ap_version_t structure (minor MMN bump).
- [André Malo]
-
- *) mod_rewrite: EOLs sent by external rewritemaps are now consumed
- as whole. That way, on systems with more than one EOL character
- rewritemap programs no longer need to switch stdout to binary
- mode. PR 25635. [André Malo]
-
- *) mod_rewrite: Introduce the ability to force a content handler via
- the [handler=...] flag. [André Malo]
-
- *) mod_rewrite: Introduce the RewriteCond -x check, which returns
- true if the pattern is a file with execution permissions.
- [André Malo]
-
- *) Allow proxying of resources that are invoked via DirectoryIndex.
- PR 14648, 15112, 29961. [André Malo]
-
- *) mod_rewrite: Allow proxying and RewriteRules in directory context
- for subrequests. PR 14648, 15114. [André Malo]
-
- *) mod_rewrite: Allow setting of any valid HTTP response code.
- PR 25917. [André Malo]
-
- *) mod_rewrite: Cookie creation now works locale independent.
- [André Malo]
-
- *) mod_ssl: Add support for distributed session cache using 'distcache'.
- [Geoff Thorpe <geoff geoffthorpe.net>]
-
- *) mod_dav: Disallow requests with an unescaped hash character in
- the Request-URI. PR 21779. [Amit Athavale <amit_athavale lycos.com>]
-
- *) mod_proxy with ProxyErrorOverride On in a reverse-proxy configuration
- attaches a body to the 302 response and a wrong Content-Length header.
- PR: 22951 [Ermanno Scaglione scaglione ..at.. starnetone.de]
-
- *) Bring ErrorHeader concept forward from 1.3, so that response
- header fields can be set for return even on errors or external
- redirects. [Ken Coar]
-
- *) Fix <Limit> and <LimitExcept> parsing to require a closing '>'
- in the initial container. PR 25414.
- [Geoffrey Young <geoff apache.org>]
-
- *) Clean up httpd -V output: Instead of displaying the MPM source
- directory, display the MPM name and some MPM properties.
- [Geoffrey Young <geoff apache.org>]
-
- *) mod_ssl/mod_status: Re-enable support for output of SSL session
- cache information in server-status page. [Joe Orton]
-
- *) mod_ssl: Remove the shmht session cache, shmcb should be used
- instead. [Joe Orton]
-
- *) mod_logio: Account for some bytes handed to the network layer prior to
- dropped connections. [Jeff Trawick]
-
- *) mod_autoindex: new directive IndexStyleSheet
- [Tyler Riddle <triddle_1999 yahoo.com>, Paul Querna <chip force-elite.com>]
-
- *) Fix uninitialized gprof directory name in prefork MPM. PR 24450.
- [Chris Knight <Christopher.D.Knight nasa.gov>]
-
- *) Log an error when requests for URIs which fail to map to a valid
- filesystem name are rejected with 403. [Jeff Trawick]
-
- *) Switch to APR 1.0 API.
-
- *) Major overhaul of mod_include's filter parser. The new parser code
- is expected to be more robust and should catch all of the edge cases
- that were not handled by the previous one. This includes a binary
- incompatible change of mod_include's external API. [André Malo]
-
- *) mod_rewrite: Allow forced mimetypes [T=...] to get expanded.
- PR 14223. [André Malo]
-
- *) mod_rewrite: Fix LA-U and LA-F lookups in directory context. Previously
- the current rewrite state was just used as lookup path, which lead to
- strange and often useless results. Related to PR 8493. [André Malo]
-
- *) Change Listen directive to bind to all addresses when a hostname is
- not specified. [Justin Erenkrantz]
-
- *) Correct failure with Listen directives on machines with IPv6 enabled.
- [Colm MacCárthaigh <colm stdlib.net>, Justin Erenkrantz]
-
- *) Fix a link failure in mod_ssl when the OpenSSL libraries contain
- the ENGINE functions but the engine header files are missing.
- [Cliff Woolley]
-
- *) mod_rewrite: RewriteRules in server context using the force
- type feature [T=...] no longer disable MultiViews. [André Malo]
-
- *) mod_rewrite: Allow piped rewrite logs to be relative to ServerRoot.
- [André Malo]
-
- *) mod_authz_groupfile: Strip trailing spaces of group names. This
- hopefully saves some hours of searching for typos. PR 12863.
- [André Malo]
-
- *) mod_actions: Propagate the handler name to the action script via
- the REDIRECT_HANDLER environment variable. [André Malo]
-
- *) mod_actions: Introduce the "virtual" modifier to the Action directive,
- which allows the use of handlers for virtual locations. PR 8431.
- [André Malo]
-
- *) mod_speling: Recognize AcceptPathInfo setting for the particular
- location. Default is to reject path information. PR 21059.
- [André Malo]
-
- *) mod_ext_filter: Add the ability to filter request bodies.
- [Philipp Reisner <philipp.reisner linbit.com>]
-
- *) Fix some broken log messages in WinNT MPM.
- [Juan Rivera <Juan.Rivera citrix.com>]
-
- *) prefork MPM: Use the right permissions for the directory created
- for gprof support. [Jim Carlson <jcarlson jnous.com>]
-
- *) Fix a compile failure with recent OpenSSL and picky compilers
- (e.g., OpenSSL 0.9.7a and xlc_r on AIX). [Jeff Trawick]
-
- *) OpenSSL headers should be included as "openssl/ssl.h", and not rely on
- the INCLUDE path to be defined properly.
- PR 11310. [Geoff Thorpe <geoff geoffthorpe.net>]
-
- *) Modify APACHE_CHECK_SSL_TOOLKIT to detect SSL-C. [Madhusudan Mathihalli]
-
- *) Replace the APACHE_CHECK_SSL_TOOLKIT method with a cleaner one, using
- autoconf tools (AC_CHECK_HEADER, AC_CHECK_LIB etc).
- [Geoff Thorpe <geoff geoffthorpe.net>]
-
- *) change directive name from 'compressionlevel' to 'deflatecompressionlevel'
- [Ian Holsman, André Malo]
-
- *) mod_negotiation: quality values are now parsed independent from
- the current locale. level values are now really parsed as integers.
- PR 17564. [André Malo]
-
- *) Extend mod_negotiation to evaluate the environment variables
- no-gzip and gzip-only-text/html the same way as mod_deflate does.
- [André Malo]
-
- *) mod_rewrite: Fix some problems reporting errors with mapping
- programs (RewriteMap prg:/something). [Jeff Trawick]
-
- *) Return 413 if chunk-ext-header is too long rather than reading from
- the truncated line. PR 15857. [Justin Erenkrantz]
-
- *) Allow restart of httpd to occur even with syntax errors in the config
- file. PR 16813. [Justin Erenkrantz]
-
- *) Use APR_LAYOUT instead of APACHE_LAYOUT in configure. PR 15679.
- [Justin Erenkrantz]
-
- *) Remove files on 'make distclean' that should be. PR 15592.
- [Justin Erenkrantz]
-
- *) Allow apachectl to perform status with links and elinks as well.
- [Justin Erenkrantz]
-
- *) Extend the SetEnvIf directive to capture subexpressions of the
- matched value. [André Malo]
-
- *) mod_log_config change optional hook to return previous handler
- [Ian Holsman]
-
- *) Forward port of mod_actions' ability to handle arbitrary methods
- with the Script directive. [André Malo]
-
- *) Let suexec send a message to stderr, if it failed or its policy
- was violated. This message appears in the error log and allows
- for easier debugging. PR 5381, 7638, 8255, 10773. [André Malo]
-
- *) Modify buildconf to copy all required files into httpd's tree.
- [Thom May <thom planetarytramp.net>]
-
- *) Allow mod_dav to do weak entity comparison functions.
- [Justin Erenkrantz]
-
- *) Move RFC 1413 ident requests from core to new module mod_ident.
- [André Malo]
-
- *) Add mod_authz_owner - a forward port of "Require file-owner"
- and "Require file-group", which was already present in version
- 1.3.21. [André Malo]
-
- *) Add mod_dav_lock - a generic subset of the DAV locking implementation.
- [Justin Erenkrantz]
-
- *) Replace some of the mutex locking in the worker MPM with
- atomic operations for higher concurrency. [Brian Pane]
-
- *) Allow 'make depend' to work with non-GCC compilers.
- [Justin Erenkrantz]
-
- *) If an httpd.conf has commented out AddModule directives,
- apxs -i -a will add an un-commented AddModule directive for
- the new module, which breaks the config.
- PR: 11212 [Joe Orton]
-
- *) Fix mod_proxy handling of filtered input bodies. [Justin Erenkrantz]
-
- *) Move the check of the Expect request header field after the hook
- for ap_post_read_request, since that is the only opportunity for
- modules to handle Expect extensions. [Justin Erenkrantz]
-
- *) Rewrite of aaa modules to an authn/authz model.
- [Dirk-Willem van Gulik, Justin Erenkrantz]
-
-
- [Apache 2.1.0-dev includes those bug fixes and changes with the
- Apache 2.0.xx tree as documented, and except as noted, below.]
-
-Changes with Apache 2.0.51
-
- *) Enable the option to support anonymous shared memory in mod_ldap.
- This makes the cache work on Linux again. [Graham Leggett]
-
- *) Enable special ErrorDocument value 'default' which restores the
- canned server response for the scope of the directive.
- [Geoffrey Young, Andre Malo]
-
- *) work around MSIE Digest auth bug - if AuthDigestEnableQueryStringHack
- is set in r->subprocess_env allow mismatched query strings to pass.
- PR 27758. [Paul Querna, Geoffrey Young]
-
- *) Accept URLs for the ServerAdmin directive. If the supplied
- argument is not recognized as an URL, assume it's a mail address.
- PR 28174. [André Malo, Paul Querna]
-
- *) initialize server arrays prior to calling ap_setup_prelinked_modules
- so that static modules can push Defines values when registering
- hooks just like DSO modules can ["Philippe M. Chiasson" <gozer cpan.org>]
-
- *) Small fix to allow reverse proxying to an ftp server. Previously
- an attempt to do this would try and connect to 0.0.0.0, regardless
- of the server specified. PR 24922
- [Pascal Terjan <pterjan@linuxfr.org>]
-
- *) Add the NOTICE file to the rpm spec file in compliance with the
- Apache v2.0 license. [Graham Leggett]
-
- *) RPM spec file changes: changed default dependancy to link to db4
- instead of db3. Fixed complaints about unpackaged files.
- [Graham Leggett]
-
-Changes with Apache 2.0.50
-
- *) SECURITY: CAN-2004-0493 (cve.mitre.org)
- Close a denial of service vulnerability identified by Georgi
- Guninski which could lead to memory exhaustion with certain
- input data. [Jeff Trawick]
-
- *) mod_alias now emits a warning if it detects overlapping *Alias*
- directives. [André Malo]
-
- *) mod_rewrite no longer turns forward proxy requests into reverse proxy
- requests. PR 28125 [ast domdv.de, André Malo]
-
- *) ap_set_sub_req_protocol and ap_finalize_sub_req_protocol are now
- exported on Win32 and Netware as well (minor MMN bump). PR 28523.
- [Edward Rudd <eddie omegaware.com>, André Malo]
-
- *) Restore the ability to disable the use of AcceptEx on Win9x systems
- automatically (broken in2.0.49). PR 28529. [André Malo]
-
- *) <VirtualHost myhost> now applies to all IP addresses for myhost
- instead of just the first one reported by the resolver. This
- corrects a regression since 1.3. [Jeff Trawick]
-
- *) util_ldap: allow relative paths for LDAPTrustedCA to be resolved
- against ServerRoot PR#26602 [Brad Nicholes]
-
- *) SECURITY: CAN-2004-0488 (cve.mitre.org)
- mod_ssl: Fix a buffer overflow in the FakeBasicAuth code for a
- (trusted) client certificate subject DN which exceeds 6K in length.
- [Joe Orton]
-
- *) mod_dav_fs: Fix MKCOL response for missing parent collections, which
- caused issues for the Eclipse WebDAV extension.
- PR 29034. [Joe Orton]
-
- *) mod_deflate: Fix memory consumption (which was proportional to the
- response size). PR 29318. [Joe Orton]
-
- *) mod_ssl: Log the errors returned on failure to load or initialize
- a crypto accelerator engine. [Joe Orton]
-
- *) Allow RequestHeader directives to be conditional. PR 27951.
- [Vincent Deffontaines <vincent gryzor.com>, André Malo]
-
- *) Allow LimitRequestBody to be reset to unlimited. PR 29106
- [André Malo]
-
- *) Fix a bunch of cases where the return code of the regex compiler
- was not checked properly. This affects: mod_setenvif, mod_usertrack,
- mod_proxy, mod_proxy_ftp and core. PR 28218. [André Malo]
-
- *) mod_ssl: Fix a potential segfault in the 'shmcb' session cache for
- small cache sizes. PR 27751. [Geoff Thorpe <geoff geoffthorpe.net>]
-
- *) Remove 2Gb log file size restriction on some 32-bit platforms.
- PR 13511. [Joe Orton]
-
- *) mod_logio no longer removes the EOS bucket. PR 27928.
- [Bojan Smojver <bojan rexursive.com>]
-
- *) htpasswd no longer refuses to process files that contain empty
- lines. [André Malo]
-
- *) Regression from 1.3: At startup, suexec now will be checked for
- availability, the setuid bit and user root. The works only if
- httpd is compiled with the shipped APR version (0.9.5).
- PR 28287. [André Malo]
-
- *) Unix MPMs: Stop dropping connections when the file descriptor
- is at least FD_SETSIZE. [Jeff Trawick]
-
- *) Fix handling of IPv6 numeric strings in mod_proxy. [Jeff Trawick]
-
- *) mod_isapi: send_response_header() failed to copy status string's
- last character. PR 20619. [Jesse Pelton <jsp pkc.com>]
-
- *) Fix a segfault when requests for shared memory fails and returns
- NULL. Fix a segfault caused by a lack of bounds checking on the
- cache. PR 24801. [Graham Leggett]
-
- *) Throw an error message if an attempt is made to use the LDAPTrustedCA
- or LDAPTrustedCAType directives in a VirtualHost. PR 26390
- [Brad Nicholes]
-
- *) Fix a potential segfault if the bind password in the LDAP cache
- is NULL. PR 28250. [Jari Ahonen <jah progress.com>]
-
- *) Quotes cannot be used around require group and require dn
- directives, update the documentation to reflect this. Also add
- quotes around the dn and group within debug messages, to make it
- more obvious why authentication is failing if quotes are used in
- error. PR 19304. [Graham Leggett]
-
- *) The Microsoft LDAP SDK escapes filters for us, stop util_ldap
- from escaping filters twice when the backslash character is used.
- PR 24437. [Jess Holle <jessh ptc.com>]
-
- *) Overhaul handling of LDAP error conditions, so that the util_ldap_*
- functions leave the connections in a sane state after errors have
- occurred. PR 27748, 17274, 17599, 18661, 21787, 24595, 24683, 27134,
- 27271 [Graham Leggett]
-
- *) mod_ldap calls ldap_simple_bind_s() to validate the user
- credentials. If the bind fails, the connection is left
- in an unbound state. Make sure that the ldap connection
- record is updated to show that the connection is no longer
- bound. [Brad Nicholes]
-
- *) Ensure that lines in the request which are too long are
- properly terminated before logging.
- [Tsurutani Naoki <turutani scphys.kyoto-u.ac.jp>]
-
- *) Update the bind credentials for the cached LDAP connection to
- reflect the last bind. This prevents util_ldap from creating
- unnecessary connections rather than reusing cached connections.
- [Brad Nicholes]
-
- *) mod_isapi: GetServerVariable returned improperly terminated header
- fields given "ALL_HTTP" or "ALL_RAW". PR 20656.
- [Jesse Pelton <jsp pkc.com>]
-
- *) mod_isapi: GetServerVariable("ALL_RAW") returned the wrong buffer
- size. PR 20617. [Jesse Pelton <jsp pkc.com>]
-
- *) mod_dav: Fix a problem that could cause crashes when manipulating
- locks on some platforms. [Jeff Trawick]
-
- *) mod_headers no longer crashes if an empty header value should
- be added. [André Malo]
-
- *) Fix segfault in mod_expires, which occured under certain
- circumstances. PR 28047. [André Malo]
-
- *) htpasswd: use apr_temp_dir_get() and general cleanup
- [Guenter Knauf <eflash gmx.net>, Thom May]
-
- *) mod_ssl: Fix memory leak in session cache handling. PR 26562
- [Madhusudan Mathihalli]
-
- *) mod_ssl: Fix potential segfaults when performing SSL shutdown from
- a pool cleanup. PR 27945. [Joe Orton]
-
- *) Add forensic logging module (mod_log_forensic).
- [Ben Laurie]
-
- *) logresolve: Allow size of log line buffer to be overridden at
- build time (MAXLINE). PR 27793. [Jeff Trawick]
-
- *) Fix the comment delimiter in htdbm so that it correctly parses the
- username comment. Also add a terminate function to allow NetWare
- to pause the output before the screen is destroyed.
- [Guenter Knauf <eflash gmx.net>, Brad Nicholes]
-
- *) Fix crash when Apache was started with no Listen directives.
- [Michael Corcoran <mcorcoran warpsolutions.com>]
-
- *) core_output_filter: Fix bug that could result in sending
- garbage over the network when module handlers construct
- bucket brigades containing multiple file buckets all referencing
- the same open file descriptor. [Bojan Smojver]
-
- *) Fix memory corruption problem with ap_custom_response() function.
- The core per-dir config would later point to request pool data
- that would be reused for different purposes on different requests.
- [Jeff Trawick, based on an old 1.3 patch submitted by Will Lowe]
-
- *) Win32: Tweak worker thread accounting routines to eliminate
- server hang when number of Listen directives in httpd.conf
- is greater than or equal to the setting of ThreadsPerChild.
- [Bill Stoddard]
-
-Changes with Apache 2.0.49
-
- *) SECURITY: CAN-2004-0174 (cve.mitre.org)
- Fix starvation issue on listening sockets where a short-lived
- connection on a rarely-accessed listening socket will cause a
- child to hold the accept mutex and block out new connections until
- another connection arrives on that rarely-accessed listening socket.
- With Apache 2.x there is no performance concern about enabling the
- logic for platforms which don't need it, so it is enabled everywhere
- except for Win32. [Jeff Trawick]
-
- *) mod_cgid: Fix storage corruption caused by use of incorrect pool.
- [Jeff Trawick]
-
- *) Win32: find_read_listeners was not correctly handling multiple
- listeners on the Win32DisableAcceptEx path. [Bill Stoddard]
-
- *) Fix bug in mod_usertrack when no CookieName is set. PR 24483.
- [Manni Wood <manniwood planet-save.com>]
-
- *) Fix some piped log problems: bogus "piped log program '(null)'
- failed" messages during restart and problem with the logger
- respawning again after Apache is stopped. PR 21648, PR 24805.
- [Jeff Trawick]
-
- *) Fixed file extensions for real media files and removed rpm extension
- from mime.types. PR 26079. [Allan Sandfeld <kde carewolf.com>]
-
- *) Remove compile-time length limit on request strings. Length is
- now enforced solely with the LimitRequestLine config directive.
- [Paul J. Reder]
-
- *) mod_ssl: Send the Close Alert message to the peer before closing
- the SSL session. PR 27428. [Madhusudan Mathihalli, Joe Orton]
-
- *) SECURITY: CAN-2004-0113 (cve.mitre.org)
- mod_ssl: Fix a memory leak in plain-HTTP-on-SSL-port handling.
- PR 27106. [Joe Orton]
-
- *) mod_ssl: Fix bug in passphrase handling which could cause spurious
- failures in SSL functions later. PR 21160. [Joe Orton]
-
- *) mod_log_config: Fix corruption of buffered logs with threaded
- MPMs. PR 25520. [Jeff Trawick]
-
- *) Fix mod_include's expression parser to recognize strings correctly
- even if they start with an escaped token. [André Malo]
-
- *) Add fatal exception hook for use by diagnostic modules. The hook
- is only available if the --enable-exception-hook configure parm
- is used and the EnableExceptionHook directive has been set to
- "on". [Jeff Trawick]
-
- *) Allow mod_auth_digest to work with sub-requests with different
- methods than the original request. PR 25040.
- [Josh Dady <jpd indecisive.com>]
-
- *) fix "Expected </Foo>> but saw </Foo>" errors in nested,
- argumentless containers.
- ["Philippe M. Chiasson" <gozer cpan.org>]
-
- *) mod_auth_ldap: Fix some segfaults in the cache logic. PR 18756.
- [Matthieu Estrade <apache moresecurity.org>, Brad Nicholes]
-
- *) mod_cgid: Restart the cgid daemon if it crashes. PR 19849
- [Glenn Nielsen <glenn apache.org>]
-
- *) The whole codebase was relicensed and is now available under
- the Apache License, Version 2.0 (http://www.apache.org/licenses).
- [Apache Software Foundation]
-
- *) Fixed cache-removal order in mod_mem_cache.
- [Jean-Jacques Clar, Cliff Woolley]
-
- *) mod_setenvif: Fix the regex optimizer, which under circumstances
- treated the supplied regex as literal string. PR 24219.
- [André Malo]
-
- *) ap_mpm.h: Fix include guard of ap_mpm.h to reference mpm
- instead of mmn. [André Malo]
-
- *) mod_rewrite: Catch an edge case, where strange subsequent RewriteRules
- could lead to a 400 (Bad Request) response. [André Malo]
-
- *) Keep focus of ITERATE and ITERATE2 on the current module when
- the module chooses to return DECLINE_CMD for the directive.
- PR 22299. [Geoffrey Young <geoff apache.org>]
-
- *) Add support for IMT minor-type wildcards (e.g., text/*) to
- ExpiresByType. PR#7991 [Ken Coar]
-
- *) Fix segfault in mod_mem_cache cache_insert() due to cache size
- becoming negative. PR: 21285, 21287
- [Bill Stoddard, Massimo Torquati, Jean-Jacques Clar]
-
- *) core.c: If large file support is enabled, allow any file that is
- greater than AP_MAX_SENDFILE to be split into multiple buckets.
- This allows Apache to send files that are greater than 2gig.
- Otherwise we run into 32/64 bit type mismatches in the file size.
- [Brad Nicholes]
-
- *) proxy_http fix: mod_proxy hangs when both KeepAlive and
- ProxyErrorOverride are enabled, and a non-200 response without a
- body is generated by the backend server. (e.g.: a client makes a
- request containing the "If-Modified-Since" and "If-None-Match"
- headers, to which the backend server respond with status 304.)
- [Graham Wiseman <gwiseman fscinternet.com>, Richard Reiner]
-
- *) mod_dav: Reject requests which include an unescaped fragment in the
- Request-URI. PR 21779. [Amit Athavale <amit_athavale lycos.com>]
-
- *) Build array of allowed methods with proper dimensions, fixing
- possible memory corruption. [Jeff Trawick]
-
- *) mod_ssl: Fix potential segfault on lookup of SSL_SESSION_ID.
- PR 15057. [Otmar Lendl <lendl nic.at>]
-
- *) mod_ssl: Fix streaming output from an nph- CGI script. PR 21944
- [Joe Orton]
-
- *) mod_usertrack no longer inspects the Cookie2 header for
- the cookie name. PR 11475. [Chris Darrochi <chrisd pearsoncmg.com>]
-
- *) mod_usertrack no longer overwrites other cookies.
- PR 26002. [Scott Moore <apache nopdesign.com>]
-
- *) worker MPM: fix stack overlay bug that could cause the parent
- process to crash. [Jeff Trawick]
-
- *) Win32: Add Win32DisableAcceptEx directive. This Windows
- NT/2000/CP directive is useful to work around bugs in some
- third party layered service providers like virus scanners,
- VPN and firewall products, that do not properly handle
- WinSock 2 APIs. Use this directive if your server is issuing
- AcceptEx failed messages.
- [Allan Edwards, Bill Rowe, Bill Stoddard, Jeff Trawick]
-
- *) Make REMOTE_PORT variable available in mod_rewrite.
- PR 25772. [André Malo]
-
- *) Fix a long delay with CGI requests and keepalive connections on
- AIX. [Jeff Trawick]
-
- *) mod_autoindex: Add 'XHTML' option in order to allow switching between
- HTML 3.2 and XHTML 1.0 output. PR 23747. [André Malo]
-
- *) Add XHTML Document Type Definitions to httpd.h (minor MMN bump).
- [André Malo]
-
- *) mod_ssl: Advertise SSL library version as determined at run-time rather
- than at compile-time. PR 23956. [Eric Seidel <seidel apple.com>]
-
- *) mod_ssl: Fix segfault on a non-SSL request if the 'c' log
- format code is used. PR 22741. [Gary E. Miller <gem rellim.com>]
-
- *) Fix build with parallel make. PR 24643. [Joe Orton]
-
- *) mod_rewrite: In external rewrite maps lookup keys containing
- a newline now cause a lookup failure. PR 14453.
- [Cedric Gavage <cedric.gavage unixtech.be>, André Malo]
-
- *) Backport major overhaul of mod_include's filter parser from 2.1.
- The new parser code is expected to be more robust and should
- catch all of the edge cases that were not handled by the previous one.
- The 2.1 external API changes were hidden by a wrapper which is
- expected to keep the API backwards compatible. [André Malo]
-
- *) Add a hook (insert_error_filter) to allow filters to re-insert
- themselves during processing of error responses. Enable mod_expires
- to use the new hook to include Expires headers in valid error
- responses. This addresses an RFC violation. It fixes PRs 19794,
- 24884, and 25123. [Paul J. Reder]
-
- *) Add Polish translation of error messages. PR 25101.
- [Tomasz Kepczynski <tomek jot23.org>]
-
- *) Add AP_MPMQ_MPM_STATE function code for ap_mpm_query. (Not yet
- supported for BeOS or OS/2 MPMs.) [Jeff Trawick, Brad Nicholes,
- Bill Stoddard]
-
- *) Add mod_status hook to allow modules to add to the mod_status
- report. [Joe Orton]
-
- *) Fix htdbm to generate comment fields in DBM files correctly.
- [Justin Erenkrantz]
-
- *) mod_dav: Use bucket brigades when reading PUT data. This avoids
- problems if the data stream is modified by an input filter. PR 22104.
- [Tim Robbins <tim robbins.dropbear.id.au>, André Malo]
-
- *) Fix RewriteBase directive to not add double slashes. [André Malo]
-
- *) Improve 'configure --help' output for some modules. [Astrid Keßler]
-
- *) Correct UseCanonicalName Off to properly check incoming port number.
- [Jim Jagielski]
-
- *) Fix slow graceful restarts with prefork MPM. [Joe Orton]
-
- *) Fix a problem with namespace mappings being dropped in mod_dav_fs;
- if any property values were set which defined namespaces these
- came out mangled in the PROPFIND response. PR 11637.
- [Amit Athavale <amit_athavale persistent.co.in>]
-
- *) mod_dav: Return a WWW-auth header for MOVE/COPY requests where
- the destination resource gives a 401. PR 15571. [Joe Orton]
-
- *) SECURITY: CAN-2003-0020 (cve.mitre.org)
- Escape arbitrary data before writing into the errorlog. Unescaped
- errorlogs are still possible using the compile time switch
- "-DAP_UNSAFE_ERROR_LOG_UNESCAPED". [Geoffrey Young, André Malo]
-
- *) mod_autoindex / core: Don't fail to show filenames containing
- special characters like '%'. PR 13598. [André Malo]
-
- *) mod_status: Report total CPU time accurately when using a threaded
- MPM. PR 23795. [Jeff Trawick]
-
- *) Fix memory leak in handling of request bodies during reverse
- proxy operations. PR 24991. [Larry Toppi <larry.toppi citrix.com>]
-
- *) Win32 MPM: Implement MaxMemFree to enable setting an upper
- limit on the amount of storage used by the bucket brigades
- in each server thread. [Bill Stoddard]
-
- *) Modified the cache code to be header-location agnostic. Also
- fixed a number of other cache code bugs related to PR 15852.
- Includes a patch submitted by Sushma Rai <rsushma novell.com>.
- This fixes mod_mem_cache but not mod_disk_cache yet so I'm not
- closing the PR since that is what they are using. [Paul J. Reder]
-
- *) complain via error_log when mod_include's INCLUDES filter is
- enabled, but the relevant Options flag allowing the filter to run
- for the specific resource wasn't set, so that the filter won't
- silently get skipped. next remove itself, so the warning will be
- logged only once [Stas Bekman, Jeff Trawick, Bill Rowe]
-
- *) mod_info: HTML escape configuration information so it displays
- correctly. PR 24232. [Thom May]
-
- *) Restore the ability to add a description for directories that
- don't contain an index file. (Broken in 2.0.48) [André Malo]
-
- *) Fix a problem with the display of empty variables ("SetEnv foo") in
- mod_include. PR 24734 [Markus Julen <mj zermatt.net>]
-
- *) mod_log_config: Log the minutes component of the timezone correctly.
- PR 23642. [Hong-Gunn Chew <hgbug gunnet.org>]
-
- *) mod_proxy: Fix cases where an invalid status-line could be sent
- to the client. PR 23998. [Joe Orton]
-
- *) mod_ssl: Fix segfaults at startup if other modules which use OpenSSL
- are also loaded. [Joe Orton]
-
- *) mod_ssl: Use human-readable OpenSSL error strings in logs; use
- thread-safe interface for retrieving error strings. [Joe Orton]
-
- *) mod_expires: Initialize ExpiresDefault to NULL instead of "" to
- avoid reporting an Internal Server error if it is used without
- having been set in the httpd.conf file. PR: 23748, 24459
- [Andre Malo, Liam Quinn <liam htmlhelp.com>]
-
- *) mod_autoindex: Don't omit the <tr> start tag if the SuppressIcon
- option is set. PR 21668. [Jesse Tie-Ten-Quee <highos highos.com>]
-
- *) mod_include no longer allows an ETag header on 304 responses.
- PR 19355. [Geoffrey Young <geoff apache.org>, André Malo]
-
- *) EBCDIC: Convert header fields to ASCII before sending (broken
- since 2.0.44). [Martin Kraemer]
-
- *) Fix the inability to log errors like exec failure in
- mod_ext_filter/mod_cgi script children. This was broken after
- such children stopped inheriting the error log handle.
- [Jeff Trawick]
-
- *) Fix mod_info to use the real config file name, not the default
- config file name. [Aryeh Katz <aryeh secured-services.com>]
-
- *) Set the scoreboard state to indicate logging prior to running
- logging hooks so that server-status will show 'L' for hung loggers
- instead of 'W'. [Jeff Trawick]
-
-Changes with Apache 2.0.48
-
- *) SECURITY [CAN-2003-0789]: mod_cgid: Resolve some mishandling of
- the AF_UNIX socket used to communicate with the cgid daemon and
- the CGI script. [Jeff Trawick]
-
- *) SECURITY [CAN-2003-0542]: Fix buffer overflows in mod_alias and
- mod_rewrite which occurred if one configured a regular expression
- with more than 9 captures. [André Malo]
-
- *) mod_include: fix segfault which occured if the filename was not
- set, for example, when processing some error conditions.
- PR 23836. [Brian Akins <bakins web.turner.com>, André Malo]
-
- *) fix the config parser to support <Foo>..</Foo> containers (no
- arguments in the opening tag) supported by httpd 1.3. Without
- this change mod_perl 2.0's <Perl> sections are broken.
- ["Philippe M. Chiasson" <gozer cpan.org>]
-
- *) mod_cgid: fix a hash table corruption problem which could
- result in the wrong script being cleaned up at the end of a
- request. [Jeff Trawick]
-
- *) Update httpd-*.conf to be clearer in describing the connection
- between AddType and AddEncoding for defining the meaning of
- compressed file extensions. [Roy Fielding]
-
- *) mod_rewrite: Don't die silently when failing to open RewriteLogs.
- PR 23416. [André Malo]
-
- *) mod_rewrite: Fix mod_rewrite's support of the [P] option to send
- rewritten request using "proxy:". The code was adding multiple "proxy:"
- fields in the rewritten URI. PR: 13946.
- [Eider Oliveira <eider bol.com.br>]
-
- *) cache_util: Fix ap_check_cache_freshness to check max_age, smax_age, and
- expires as directed in RFC 2616. [Thomas Castelle <tcastelle generali.fr>]
-
- *) Ensure that ssl-std.conf is generated at configure time, and switch
- to using the expanded config variables to work the same as
- httpd-std.conf PR: 19611
- [Thom May]
-
- *) mod_ssl: Fix segfaults after renegotiation failure. PR 21370
- [Hartmut Keil <Hartmut.Keil adnovum.ch>]
-
- *) mod_autoindex: If a directory contains a file listed in the
- DirectoryIndex directive, the folder icon is no longer replaced
- by the icon of that file. PR 9587.
- [David Shane Holden <dpejesh yahoo.com>]
-
- *) Fixed mod_usertrack to not get false positive matches on the
- user-tracking cookie's name. PR 16661.
- [Manni Wood <manniwood planet-save.com>]
-
- *) mod_cache: Fix the cache code so that responses can be cached
- if they have an Expires header but no Etag or Last-Modified
- headers. PR 23130.
- [<bjorn exoweb.net>]
-
- *) mod_log_config: Fix %b log format to write really "-" when 0 bytes
- were sent (e.g. with 304 or 204 response codes). [Astrid Keßler]
-
- *) Modify ap_get_client_block() to note if it has seen EOS.
- [Justin Erenkrantz]
-
- *) Fix a bug, where mod_deflate sometimes unconditionally compressed the
- content if the Accept-Encoding header contained only other tokens than
- "gzip" (such as "deflate"). PR 21523. [Joe Orton, André Malo]
-
- *) Avoid an infinite recursion, which occured if the name of an included
- config file or directory contained a wildcard character. PR 22194.
- [André Malo]
-
- *) mod_ssl: Fix a problem setting variables that represent the
- client certificate chain. PR 21371 [Jeff Trawick]
-
- *) Unix: Handle permissions settings for flock-based mutexes in
- unixd_set_global|proc_mutex_perms(). Allow the functions to be
- called for any type of mutex. PR 20312 [Jeff Trawick]
-
- *) ab: Work over non-loopback on Unix again. PR 21495. [Jeff Trawick]
-
- *) Fix a misleading message from the some of the threaded MPMs when
- MaxClients has to be lowered due to the setting of ServerLimit.
- [Jeff Trawick]
-
- *) Lower the severity of the "listener thread didn't exit" message
- to debug, as it is of interest only to developers. PR 9011
- [Jeff Trawick]
-
- *) MPMs: The bucket brigades subsystem now honors the MaxMemFree setting.
- [Cliff Woolley, Jean-Jacques Clar]
-
- *) Install config.nice into the build/ directory to make
- minor version upgrades easier. [Joshua Slive]
-
- *) Fix mod_deflate so that it does not call deflate() without checking
- first whether it has something to deflate. (Currently this causes
- deflate to generate a fatal error according to the zlib spec.)
- PR 22259. [Stas Bekman]
-
- *) mod_ssl: Fix FakeBasicAuth for subrequest. Log an error when an
- identity spoof is encountered.
- [Sander Striker]
-
- *) mod_rewrite: Ignore RewriteRules in .htaccess files if the directory
- containing the .htaccess file is requested without a trailing slash.
- PR 20195. [André Malo]
-
- *) ab: Overlong credentials given via command line no longer clobber
- the buffer. [André Malo]
-
- *) mod_deflate: Don't attempt to hold all of the response until we're
- done. [Justin Erenkrantz]
-
- *) Assure that we block properly when reading input bodies with SSL.
- PR 19242. [David Deaves <David.Deaves dd.id.au>, William Rowe]
-
- *) Update mime.types to include latest IANA and W3C types. [Roy Fielding]
-
- *) mod_ext_filter: Set additional environment variables for use by
- the external filter. PR 20944. [Andrew Ho, Jeff Trawick]
-
- *) Fix buildconf errors when libtool version changes. [Jeff Trawick]
-
- *) Remember an authenticated user during internal redirects if the
- redirection target is not access protected and pass it
- to scripts using the REDIRECT_REMOTE_USER environment variable.
- PR 10678, 11602. [André Malo]
-
- *) mod_include: Fix a trio of bugs that would cause various unusual
- sequences of parsed bytes to omit portions of the output stream.
- PR 21095. [Ron Park <ronald.park cnet.com>, André Malo, Cliff Woolley]
-
- *) Update the header token parsing code to allow LWS between the
- token word and the ':' seperator. [PR 16520]
- [Kris Verbeeck <kris.verbeeck advalvas.be>, Nicel KM <mnicel yahoo.com>]
-
- *) Eliminate creation of a temporary table in ap_get_mime_headers_core()
- [Joe Schaefer <joe+gmane sunstarsys.com>]
-
- *) Added FreeBSD directory layout. PR 21100.
- [Sander Holthaus <info orangexl.com>, André Malo]
-
- *) Fix NULL-pointer issue in ab when parsing an incomplete or non-HTTP
- response. PR 21085. [Glenn Nielsen <glenn apache.org>, André Malo]
-
- *) mod_rewrite: Perform child initialization on the rewrite log lock.
- This fixes a log corruption issue when flock-based serialization
- is used (e.g., FreeBSD). [Jeff Trawick]
-
- *) Don't respect the Server header field as set by modules and CGIs.
- As with 1.3, for proxy requests any such field is from the origin
- server; otherwise it will have our server info as controlled by
- the ServerTokens directive. [Jeff Trawick]
-
-Changes with Apache 2.0.47
-
- *) SECURITY [CAN-2003-0192]: Fixed a bug whereby certain sequences
- of per-directory renegotiations and the SSLCipherSuite directive
- being used to upgrade from a weak ciphersuite to a strong one
- could result in the weak ciphersuite being used in place of the
- strong one. [Ben Laurie]
-
- *) SECURITY [CAN-2003-0253]: Fixed a bug in prefork MPM causing
- temporary denial of service when accept() on a rarely accessed port
- returns certain errors. Reported by Saheed Akhtar
- <S.Akhtar talis.com>. [Jeff Trawick]
-
- *) SECURITY [CAN-2003-0254]: Fixed a bug in ftp proxy causing denial
- of service when target host is IPv6 but proxy server can't create
- IPv6 socket. Fixed by the reporter. [Yoshioka Tsuneo
- <tsuneo.yoshioka f-secure.com>]
-
- *) SECURITY [VU#379828] Prevent the server from crashing when entering
- infinite loops. The new LimitInternalRecursion directive configures
- limits of subsequent internal redirects and nested subrequests, after
- which the request will be aborted. PR 19753 (and probably others).
- [William Rowe, Jeff Trawick, André Malo]
-
- *) core_output_filter: don't split the brigade after a FLUSH bucket if
- it's the last bucket. This prevents creating unneccessary empty
- brigades which may not be destroyed until the end of a keepalive
- connection.
- [Juan Rivera <Juan.Rivera citrix.com>]
-
- *) Add support for "streamy" PROPFIND responses.
- [Ben Collins-Sussman <sussman collab.net>]
-
- *) mod_cgid: Eliminate a double-close of a socket. This resolves
- various operational problems in a threaded MPM, since on the
- second attempt to close the socket, the same descriptor was
- often already in use by another thread for another purpose.
- [Jeff Trawick]
-
- *) mod_negotiation: Introduce "prefer-language" environment variable,
- which allows to influence the negotiation process on request basis
- to prefer a certain language. [André Malo]
-
- *) Make mod_expires' ExpiresByType work properly, including for
- dynamically-generated documents. [Ken Coar, Bill Stoddard]
-
-Changes with Apache 2.0.46
-
- *) SECURITY [CAN-2003-0245]: Fixed a bug causing apr_pvsprintf() to crash
- by sending an overly long string. This can be triggered remotely
- through mod_dav, mod_ssl, and other mechanisms. Reported by David
- Endler <DEndler iDefense.com>.
- [Joe Orton <jorton redhat.com>]
-
- *) SECURITY [CAN-2003-0189]: Fixed a denial-of-service vulnerability
- affecting basic authentication on Unix platforms related to
- thread-safety in apr_password_validate(). The problem was reported
- by John Hughes <john.hughes entegrity.com>.
-
- *) Fix for mod_dav. Call the 'can_be_activity' callback, if provided,
- when a MKACTIVITY request comes in.
- [Ben Collins-Sussman <sussman collab.net>]
-
- *) Perform run-time query in apxs for apr and apr-util's includes.
- [Justin Erenkrantz]
-
- *) run libtool from the apr install directory (in case that is different
- from the apache install directory) [Jeff Trawick]
-
- *) configure.in: Play nice with libtool-1.5. [Wilfredo Sanchez]
-
- *) If mod_mime_magic does not know the content-type, do not attempt to
- guess. PR 16908. [Andrew Gapon <agapon telcordia.com>]
-
- *) ssl session caching(shmht) : Fix a SEGV problem with SHMHT session
- caching. PR 17864.
- [Andreas Leimbacher <andreasl67 yahoo.de>, Madhusudan Mathihalli]
-
- *) Add a delete flag to htpasswd.
- [Thom May]
-
- *) Fix mod_rewrite's handling of absolute URIs. The escaping routines
- now work scheme dependent and the query string will only be
- appended if supported by the particular scheme. [André Malo]
-
- *) Add another check for already compressed content in mod_deflate.
- PR 19913. [Tsuyoshi SASAMOTO <nazonazo super.win.ne.jp>]
-
- *) Fixes for VPATH builds; copying special.mk and any future .mk files
- from the source tree as well as the build tree (now creates a usable
- configuration for apxs), and eliminated redundant -I'nclude paths.
- [William Rowe]
-
- *) Code fixes, constness corrections and ssl_toolkit_compat.h updates
- for SSLC and OpenSSL toolkit compatibility. Still work remains to
- be done to cripple features based on the limitations of RSA's binary
- distribution of their SSL-C toolkit.
- [William Rowe, Madhusudan Mathihalli, Jeff Trawick]
-
- *) Linux 2.4+: If Apache is started as root and you code
- CoreDumpDirectory, coredumps are enabled via the prctl() syscall.
- [Greg Ames]
-
- *) ap_get_mime_headers_core: allocate space for the trailing null
- when folding is in effect.
- PR 18170 [Peter Mayne <PeterMayne SPAM_SUX.ap.spherion.com>]
-
- *) Fix --enable-mods-shared=most and other variants. [Aaron Bannert]
-
- *) mod_log_config: Add the ability to log the id of the thread
- processing the request via new %P formats. [Jeff Trawick]
-
- *) Use appropriate language codes for Czech (cs) and Traditional Chinese
- (zh-tw) in default config files. PR 9427. [André Malo]
-
- *) mod_auth_ldap: Use generic whitespace character class when parsing
- "require" directives, instead of literal spaces only. PR 17135.
- [André Malo]
-
- *) Hook mod_rewrite's type checker before mod_mime's one. That way the
- RewriteRule [T=...] Flag should work as expected now. PR 19626.
- [André Malo]
-
- *) htpasswd: Check the processed file on validity. If a line is not empty
- and not a comment, it must contain at least one colon. Otherwise exit
- with error code 7. [Kris Verbeeck <Kris.Verbeeck ubizen.com>, Thom May]
-
- *) Fix a problem that caused httpd to be linked with incorrect flags
- on some platforms when mod_so was enabled by default, breaking
- DSOs on AIX. PR 19012 [Jeff Trawick]
-
- *) By default, use the same CC and CPP with which APR was built.
- The user can override with CC and CPP environment variables.
- [Jeff Trawick]
-
- *) Fix ap_construct_url() so that it surrounds IPv6 literal address
- strings with []. This fixes certain types of redirection.
- PR 19207. [Jeff Trawick]
-
- *) forward port of buffer overflow fixes for htdigest. [Thom May]
-
- *) Added AllowEncodedSlashes directive to permit control of whether
- the server will accept encoded slashes ('%2f') in the URI path.
- Default condition is off (the historical behaviour). This permits
- environments in which the path-info needs to contain encoded
- slashes. PR 543, 2389, 3581, 3589, 5687, 7066, 7865, 14639. [Ken Coar]
-
- *) When using Redirect in directory context, append requested query
- string if there's no one supplied by configuration. PR 10961.
- [André Malo]
-
- *) Unescape the supplied wildcard pattern in mod_autoindex. Otherwise
- the pattern will not always match as desired. PR 12596.
- [André Malo]
-
- *) mod_autoindex now emits and accepts modern query string parameter
- delimiters (;). Thus column headers no longer contain unescaped
- ampersands. PR 10880 [André Malo]
-
- *) Enable ap_sock_disable_nagle for Windows. This along with the
- addition of APR_TCP_NODELAY_INHERITED to apr.hw will cause Nagle
- to be disabled for Windows. [Allan Edwards]
-
- *) Correct a mis-correlation between mpm_common.c and mpm_common.h;
- This patch reverts us to pre-2.0.46 behavior, using the
- ap_sock_disable_nagle noop macro, because ap_sock_disable_nagle
- was never compiled on Win32. [Allan Edwards, William Rowe]
-
- *) Fix a build problem with passing unsupported --enable-layout
- args to apr and apr-util. This broke binbuild.sh as well as
- user-specified layout parameters. PR 18649 [Justin Erenkrantz,
- Jeff Trawick]
-
- *) If a Date response header was already set in the headers array,
- this value was ignored in favour of the current time. This meant
- that Date headers on proxied requests where rewritten when they
- should not have been. PR: 14376 [Graham Leggett]
-
- *) Add code to buildconf that produces an httpd.spec file from
- httpd.spec.in, using build/get-version.sh from APR.
- [Graham Leggett]
-
- *) Fixed a segfault when multiple ProxyBlock directives were used.
- PR: 19023 [Sami Tikka <sami.tikka f-secure.com>]
-
- *) SECURITY [CAN-2003-0134] OS2: Fix a Denial of Service vulnerability
- identified and reported by Robert Howard <rihoward rawbw.com> that
- where device names faulted the running OS2 worker process.
- The fix is actually in APR 0.9.4. [Brian Havard]
-
- *) Forward port: Escape special characters (especially control
- characters) in mod_log_config to make a clear distinction between
- client-supplied strings (with special characters) and server-side
- strings. This was already introduced in version 1.3.25.
- [André Malo]
-
- *) mod_deflate: Check also err_headers_out for an already set
- Content-Encoding: gzip header. This prevents gzip compressed content
- from a CGI script from being compressed once more. PR 17797.
- [André Malo]
-
-Changes with Apache 2.0.45
-
- *) Fix possible segfaults under obscure error conditions within the
- cgid daemon. [Jeff Trawick, William Rowe]
-
- *) SECURITY [CAN-2003-0132]: Close a Denial of Service vulnerability
- identified by David Endler <DEndler iDefense.com> on all platforms.
- An unlimited stream of newlines were acceptable between requests
- where each <lf> would allocate an 80 byte buffer, leading very
- quickly to memory exahustion. [Brian Pane]
-
- *) Added an rpm build script.
- [Graham Leggett, Joe Orton <jorton redhat.com>]
-
- *) Simpler, faster code path for request header scanning [Brian Pane]
-
- *) SECURITY: Eliminated leaks of several file descriptors to child
- processes, such as CGI scripts. This fix depends on the APR library
- release 0.9.2 or later (0.9.3 was distributed with the httpd
- source tarball for Apache 2.0.45.) PR 17206
- [Christian Kratzer <ck cksoft.de>, Bjoern A. Zeeb <bz zabbadoz.net>]
-
- *) Fix path handling of mod_rewrite, especially on non-unix systems.
- There was some confusion between local paths and URL paths.
- PR 12902. [André Malo]
-
- *) Prevent endless loops of internal redirects in mod_rewrite by
- aborting after exceeding a limit of internal redirects. The
- limit defaults to 10 and can be changed using the RewriteOptions
- directive. PR 17462. [André Malo]
-
- *) Win32: Avoid busy wait (consuming all the CPU idle cycles) when
- all worker threads are busy.
- [Igor Nazarenko <igor_nazarenko hotmail.com>]
-
- *) Keep the subrequest filter in place when a subrequest is
- redirected. PR 15423. [Jeff Trawick]
-
- *) you can now specify the compression level for mod_deflate.
- [Ian Holsman, Stephen Pierzchala <stephen pierzchala.com>,
- Michael Schroepl <Michael.Schroepl telekurs.de>]
-
- *) mod_deflate: Extend the DeflateFilterNote directive to
- allow accurate logging of the filter's in- and outstream.
- [André Malo]
-
- *) Allow SSLMutex to select/use the full range of APR locking
- mechanisms available to it. Also, fix the bug that SSLMutex uses
- APR_LOCK_DEFAULT no matter what. PR 8122 [Jim Jagielski,
- Martin Kutschker <martin.t.kutschker blackbox.net>]
-
- *) Restore the ability of htdigest.exe to create files that contain
- more than one user. PR 12910. [André Malo]
-
- *) Improve binary compatibility of the core between debug (aka
- maintainer-mode) and a non-debug compile.
- [Sander Striker]
-
- *) mod_usertrack: don't set the cookie in subrequests. This works
- around the problem that cookies were set twice during fast internal
- redirects. PR 13211. [André Malo]
-
- *) mod_autoindex no longer forgets output format and enabled version
- sort in linked column headers. [André Malo]
-
- *) Use .sv instead of .se as extension for Swedish documents in the
- default configuration. PR 12877. [André Malo]
-
- *) Updated mod_ldap and mod_auth_ldap to support the Novell LDAP SDK SSL
- and standardized the LDAP SSL support across the various LDAP SDKs.
- Isolated the SSL functionality to mod_ldap rather than speading it
- across mod_auth_ldap and mod_ldap. Also added LDAPTrustedCA
- and LDAPTrustedCAType directives to mod_ldap to allow for a more
- common method of specifying the SSL certificate.
- [Dave Ward, Brad Nicholes]
-
- *) Fixed mod_ssl's SSLCertificateChain initialization to no longer
- skip the first cert of the chain by default. This misbehavior
- was introduced in 2.0.34. PR 14560 [Madhusudan Mathihalli]
-
- *) mod_cgi, mod_cgid, mod_ext_filter: Log errors when scripts cannot
- be started on Unix because of such problems as bad permissions,
- bad shebang line, etc. [Jeff Trawick]
-
- *) Fix 64-bit problem in mod_ssl input logic.
- [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>]
-
- *) Fix potential memory leaks in mod_deflate on malformed data. PR 16046.
- [Justin Erenkrantz]
-
- *) Rewrite ap_xml_parse_input to use bucket brigades. PR 16134.
- [Justin Erenkrantz]
-
- *) Fix segfault which occurred when a section in an included
- configuration file was not closed. PR 17093. [André Malo]
-
- *) Enhance the behavior of mod_isapi's WriteClient() callback to
- provide better emulation for isapi modules that presume that the
- first WriteClient() call may send status and headers. An example
- of WriteClient() abuse is the foxisapi module, which relies on
- that assumpion and now works. [William Rowe, Milan Kosina]
-
- *) Check the return value of ap_run_pre_connection(). So if the
- pre_connection phase fails (without setting c->aborted)
- ap_run_process_connection is not executed. [Stas Bekman]
-
- *) Fixed a problem with mod_ldap which caused it to fault when caching
- was disabled. Needed to make sure that the code did not
- attempt to use the cache if it didn't exist. Also fixed some memory
- leaks which were due to not releasing LDAP resources on error
- conditions. [Brad Nicholes]
-
- *) Hook mod_proxy's fixup before mod_rewrite's fixup, so that by
- mod_rewrite proxied URLs will not be escaped accidentally by
- mod_proxy's fixup. PR 16368 [André Malo]
-
- *) While processing filters on internal redirects, remember seen EOS
- buckets also in the request structure of the redirect issuer(s). This
- prevents filters (such as mod_deflate) from adding garbage to the
- response. PR 14451. [André Malo]
-
- *) suexec: Be more pedantic when cleaning environment. Clean it
- immediately after startup. PR 2790, 10449.
- [Jeff Stewart <jws purdue.edu>, André Malo]
-
- *) Fix apxs to insert LoadModule directives only outside of sections.
- PR 8712, 9012. [André Malo]
-
- *) Fix suexec compile error under SUNOS4, where strerror() doesn't
- exist. PR 5913, 9977.
- [Jonathan W Miner <Jonathan.W.Miner lmco.com>]
-
- *) Fix If header parsing when a non-mod_dav lock token is passed to it.
- PR 16452. [Justin Erenkrantz]
-
- *) mod_auth_digest no longer tries to guess AuthDigestDomain, if it's
- not specified. Now it assumes "/" as already documented. PR 16937.
- [André Malo]
-
- *) Try to log an error if a piped log program fails. Try to
- restart a piped log program in more failure situations. Fix an
- existing problem with error handling in piped_log_spawn(). Use
- new APR apr_proc_create() features to prevent Apache from starting
- on Unix* in most cases where a piped log program can be started,
- and add log messages for the other situations. *Other platforms
- already failed Apache initialization if a piped log program
- couldn't be started. PR 15761 [Jeff Trawick]
-
- *) Fix mod_cern_meta to not create empty metafiles when the
- metafile searched for does not exist. PR 12353
- [Owen Rees <owen_rees hp.com>]
-
- *) Introduce debugging symbols for Win32 release builds, both .pdb
- and .dbg files (older debuggers and Dr. Watson-type utilities
- on WinNT or Win9x don't support the newer .pdb flavor.)
- [Allen Edwards, William Rowe]
-
- *) Fix bug where 'Satisfy Any' without an AuthType lost all MIME
- information (and more). Related to PR 9076. [André Malo]
-
- *) mod_file_cache: fix segfault serving mmaped cached files.
- [Bill Stoddard]
-
- *) mod_file_cache: fixed a segfault when multiple MMapFile directives
- were used. PR 16313. [Cliff Woolley]
-
- *) Fix a nasty segfault in mmap_bucket_setaside() caused by passing
- an incompatible pointer type to mmap_bucket_destroy(void*).
- [Gerard Eviston <geviston bigpond.net.au>]
-
- *) Enable the -n name parameter on NetWare to allow the
- administrator to rename the Apache console screen
- [Brad Nicholes]
-
- *) Fixed piped access logs on Win32 by disabling OTHER_CHILD
- support by default in APR. More development is required
- to deploy OTHER_CHILD on Win32. [William Rowe]
-
- *) Use saner default config values for suexec. PR 15713.
- [Thom May <thom planetarytramp.net>]
-
- *) mod_rewrite: Allow "RewriteEngine Off" even if no "Options FollowSymlinks"
- (or SymlinksIfOwnermatch) is set. PR 12395. [André Malo]
-
- *) apxs: Include any special APR ld flags when linking the DSO.
- This resolves problems on AIX when building a DSO with apxs+gcc.
- [Jeff Trawick]
-
- *) Added character set support to mod_auth_LDAP to allow it to
- convert extended characters used in the user ID to UTF-8
- before authenticating against the LDAP directory. The new
- directive AuthLDAPCharsetConfig is used to specify the config
- file that contains the character set conversion table.
- [Brad Nicholes]
-
- *) Don't remove the Content-Length from responses in mod_proxy
- PR: 8677 [Brian Pane]
-
- *) Ensure LDAP version is set to v3 on every bind. PR 14235.
- [Sergey A. Lipnevich <sergeyli pisem.net>]
-
- *) Fix mod_ldap to open an existing shared memory file should one
- already exist. PR 12757. [Scooter Morris <scooter gene.com>,
- Graham Leggett]
-
- *) Fix the ulimit command used by apachectl on Tru64. PR 13609.
- [Joseph Senulis <Joseph.Senulis dnr.state.wi.us>, Jeff Trawick]
-
- *) Change the ulimit command used by apachectl on AIX so that it
- works in all locales. [Jeff Trawick]
-
- *) mod_ext_filter: Fix a problem building argument lists which
- occasionally caused exec to fail. PR 15491. [Jeff Trawick]
-
-Changes with Apache 2.0.44
-
- *) mod_autoindex: Bring forward the IndexOptions IgnoreCase option
- from Apache 1.3. PR 14276
- [David Shane Holden <dpejesh yahoo.com>, William Rowe]
-
- *) mod_mime: Workaround to prevent a segfault if r->filename=NULL
- [Brian Pane]
-
- *) Reorder the definitions for mod_ldap and mod_auth_ldap within
- config.m4 to make sure the parent mod_ldap is defined first.
- This ensures that mod_ldap comes before mod_auth_ldap in the
- httpd.conf file, which is necessary for mod_auth_ldap to load.
- PR 14256 [Graham Leggett]
-
- *) Fix the building of cgi command lines when the query string
- contains '='. PR 13914 [Ville Skyttä <ville.skytta iki.fi>,
- Jeff Trawick]
-
- *) Rename CacheMaxStreamingBuffer to MCacheMaxStreamingBuffer. Move
- implementation of MCacheMaxStreamingBuffer from mod_cache to
- mod_mem_cache. MCacheMaxStreamingBuffer now defaults to the
- lesser of 100,000 bytes or MCacheMaxCacheObjectSize. This should
- eliminate the need for explicitly coding MCacheMaxStreamingBuffer
- in most configurations. [Bill Stoddard]
-
- *) mod_cache: Fix PR 15113, a core dump in cache_in_filter when
- a redirect occurs. The code was passing a format string and
- integer to apr_pstrcat. Changed to apr_psprintf.
- [Paul J. Reder]
-
- *) Replace APU_HAS_LDAPSSL_CLIENT_INIT with APU_HAS_LDAP_NETSCAPE_SSL
- as set by apr-util in util_ldap.c. This should allow mod_ldap
- to work with the Netscape/Mozilla LDAP library. [Øyvin Sømme
- <somme oslo.westerngeco.slb.com>, Graham Leggett]
-
- *) Fix critical bug in new --enable-v4-mapped configure option
- implementation which broke IPv4 listening sockets on some
- systems. [hiroyuki hanai <hanai imgsrc.co.jp>]
-
- *) mod_setenvif: Fix BrowserMatchNoCase support for non-regex
- patterns [André Malo <nd perlig.de>]
-
- *) Add version string to provider API. [Justin Erenkrantz]
-
- *) build: './configure && make' now works without an in-tree
- apr and apr-util. [Wilfredo Sanchez]
-
- *) mod_negotiation: Set the appropriate mime response headers
- (Content-Type, charset, Content-Language and Content-Encoding)
- for negotated type-map "Body:" responses (such as the error
- pages.) [André Malo <nd perlig.de>]
-
- *) mod_log_config: Allow '%%' escaping in CustomLog format
- strings to insert a literal, single '%'.
- [André Malo <nd perlig.de>]
-
- *) mod_autoindex: AddDescription directives for directories
- now work as in Apache 1.3, where no trailing '/' is
- specified on the directory name. Previously, the trailing
- '/' *had* to be specified, which was incompatible with
- Apache 1.3. PR 7990 [Jeff Trawick]
-
- *) Fix for PR 14556. The expiry calculations in mod_cache were
- trying to perform "now + ((date - lastmod) * factor)" where
- date == lastmod resulting in "now + 0". The code now follows
- the else path (using the default expiration) if date is
- equal to lastmod. [Sergey <rx armstrike.com>, Paul J. Reder]
-
- *) Use AP_DECLARE in the debug versions of ap_strXXX in case the
- default calling convention is not the same as the one used by
- AP_DECLARE. [Juan Rivera <Juan.Rivera citrix.com>]
-
- *) mod_cache: Don't cache response header fields designated
- as hop-by-hop headers in HTTP/1.1 (RFC 2616 Section 13.5.1).
- [Estrade Matthieu <estrade-m ifrance.com>, Brian Pane]
-
- *) mod_cgid: Handle environment variables containing newlines.
- PR 14550 [Piotr Czejkowski <apache czarny.eu.org>, Jeff
- Trawick]
-
- *) Move mod_ext_filter out of experimental and into filters.
- [Jeff Trawick]
-
- *) Fixed a memory leak in mod_deflate with dynamic content.
- PR 14321 [Ken Franken <kfranken decisionmark.com>]
-
- *) Add --[enable|disable]-v4-mapped configure option to control
- whether or not Apache expects to handle IPv4 connections
- on IPv6 listening sockets. Either setting will work on
- systems with the IPV6_V6ONLY socket option. --enable-v4-mapped
- must be used on systems that always allow IPv4 connections on
- IPv6 listening sockets. PR 14037 (Bugzilla), PR 7492 (Gnats)
- [Jeff Trawick]
-
- *) This fixes a problem where the underlying cache code
- indicated that there was one more element on the cache
- than there actually was. This happened since element 0
- exists but is not used. This code allocates the correct
- number of useable elements and reports the number of
- actually used elements. The previous code only allowed
- MCacheMaxObjectCount-1 objects to be stored in the
- cache. [Paul J. Reder]
-
- *) mod_setenvif: Add SERVER_ADDR special keyword to allow
- envariable setting according to the server IP address
- which received the request. [Ken Coar]
-
- *) mod_cgid: Terminate CGI scripts when the client connection
- drops. PR 8388 [Jeff Trawick]
-
- *) Rearrange OpenSSL engine initialization to support RAND
- redirection on crypto accelerator.
- [Frederic DONNAT <frederic.donnat zencod.com>]
-
- *) Always emit Vary header if mod_deflate is involved in the
- request. [Andre Malo <nd perlig.de>]
-
- *) mod_isapi: Stop unsetting the 'empty' query string result with
- a NULL argument in ecb->lpszQueryString, eliminating segfaults
- for some ISAPI modules. PR 14399
- [Detlev Vendt <detlev.vendt brillit.de>]
-
- *) mod_isapi: Fix an issue where the HSE_REQ_DONE_WITH_SESSION
- notification is received before the HttpExtensionProc() returns
- HSE_STATUS_PENDING. This only affected isapi .dll's configured
- with the ISAPIFakeAsync on directive. PR 11918
- [John DeSetto <jdesetto radiantsystems.com>, William Rowe]
-
- *) mod_isapi: Fix the issue where all results from mod_isapi would
- run through the core die handler resulting in invalid responses
- or access log entries. PR 10216 [William Rowe]
-
- *) Improves the user friendliness of the CacheRoot processing
- over my last pass. This version avoids the pool allocations
- but doesn't avoid all of the runtime checks. It no longer
- terminates during post-config processing. An error is logged
- once per worker, indicating that the CacheRoot needs to be set.
- [Paul J. Reder]
-
- *) Fix a bug where we keep files open until the end of a
- keepalive connection, which can result in:
- (24)Too many open files: file permissions deny server access
- especially on threaded servers. [Greg Ames, Jeff Trawick]
-
- *) Fix a bug in which mod_proxy sent an invalid Content-Length
- when a proxied URL was invoked as a server-side include within
- a page generated in response to a form POST. [Brian Pane]
-
- *) Added code to process min and max file size directives and to
- init the expirychk flag in mod_disk_cache. Added a clarifying
- comment to cache_util. [Paul J. Reder]
-
- *) The value emitted by ServerSignature now mimics the Server HTTP
- header as controlled by ServerTokens. [Francis Daly <deva daoine.org>]
-
- *) Gracefully handly retry situations in the SSL input filter,
- by following the SSL libraries' retry semantics.
- [William Rowe]
-
- *) Terminate CGI scripts when the client connection drops. This
- fix only applies to some normal paths in mod_cgi. mod_cgid
- is still busted. PR 8388 [Jeff Trawick]
-
- *) Fix a bug where 416 "Range not satisfiable" was being
- returned for content that should have been redirected.
- [Greg Ames]
-
- *) Fix memory leak in mod_ssl from internal SSL library allocations
- within SSL_get_peer_certificate and X509_get_pubkey.
- [Zvi Har'El <rl math.technion.ac.il>
- Madhusudan Mathihalli <madhusudan_mathihalli hp.com>].
-
- *) mod_ssl uses free() inappropriately in several places, to free
- memory which has been previously allocated inside OpenSSL.
- Such memory should be freed with OPENSSL_free(), not with free().
- [Nadav Har'El <nyh math.technion.ac.il>,
- Madhusudan Mathihalli <madhusudan_mathihalli hp.com>].
-
- *) Emit a message to the error log when we return 404 because
- the URI contained '%2f'. (This was previously nastily silent
- and difficult to debug.) [Ken Coar]
-
- *) Fix streaming output from an nph- CGI script. CGI:IRC now
- works. PR 8482 [Jeff Trawick]
-
- *) More accurate logging of bytes sent in mod_logio when
- the client terminates the connection before the response
- is completely sent [Bojan Smojver <bojan rexursive.com>]
-
- *) Fix some problems in the perchild MPM.
- [Jonas Eriksson <jonas webkonsulterna.com>]
-
- *) Change the CacheRoot processing to check for a required
- value at config time. This saves a lot of wasted processing
- if the mod_disk_cache module is loaded but no CacheRoot
- was provided. This fix also adds code to log an error
- and avoid useless pallocs and procesing when the computed
- cache file name cannot be opened. This also updates the
- docs accordingly. [Paul J. Reder]
-
- *) Introduce the EnableSendfile directive, allowing users of NFS
- shares to disable sendfile mechanics when they either fail
- outright or provide intermitantly corrupted data. PR
- [William Rowe]
-
- *) Resolve the error "An operation was attempted on something
- that is not a socket. : winnt_accept: AcceptEx failed.
- Attempting to recover." for users of various firewall and
- anti-virus software on Windows. PR 8325 [William Rowe]
-
- *) Add the ProxyBadHeader directive, which gives the admin some
- control on how mod_proxy should handle bogus HTTP headers from
- proxied servers. This allows 2.0 to "emulate" 1.3's behavior if
- desired. [Jim Jagielski]
-
- *) Change the LDAP modules to export their symbols correctly
- during a Windows build. Add dsp files for Windows. Update
- README.ldap file for Windows build instructions.
- [Andre Schild <A.Schild aarboard.ch>]
-
- *) Performance improvements for the code that generates HTTP
- response headers [Brian Pane]
-
- *) Add -S as a synonym for -t -DDUMP_VHOSTS.
- [Thom May <thom planetarytramp.net>]
-
- *) Fix a bug with dbm rewrite maps which caused the wrong value to
- be used when the key was not found in the dbm. PR 13204
- [Jeff Trawick]
-
- *) Fix a problem with streaming script output and mod_cgid.
- [Jeff Trawick]
-
- *) Add ap_register_provider/ap_lookup_provider API.
- [John K. Sterling <john sterls.com>, Justin Erenkrantz]
-
-Changes with Apache 2.0.43
-
- *) SECURITY [CAN-2002-0840]: HTML-escape the address produced by
- ap_server_signature() against this cross-site scripting
- vulnerability exposed by the directive 'UseCanonicalName Off'.
- Also HTML-escape the SERVER_NAME environment variable for CGI
- and SSI requests. It's safe to escape as only the '<', '>',
- and '&' characters are affected, which won't appear in a valid
- hostname. Reported by Matthew Murphy <mattmurphy kc.rr.com>.
- [Brian Pane]
-
- *) Fix a core dump in mod_cache when it attemtped to store uncopyable
- buckets. This happened, for instance, when a file to be cached
- contained SSI tags to execute a CGI script (passed as a pipe
- bucket). [Paul J. Reder]
-
- *) Ensure that output already available is flushed to the network
- when the content-length filter realizes that no new output will
- be available for a while. This helps some streaming CGIs as
- well as some other dynamically-generated content. [Jeff Trawick]
-
- *) Fix a mutex problem in mod_ssl session cache support which
- could lead to an infinite loop. PR 12705
- [Amund Elstad <amund.elstad ergo.no>, Jeff Trawick]
-
- *) SECURITY [CAN-2002-1156] (cve.mitre.org):
- Fix the exposure of CGI source when a POST request is sent to
- a location where both DAV and CGI are enabled. [Ryan Bloom]
-
- *) Allow the UserDir directive to accept a list of directories.
- This matches what Apache 1.3 does. Also add documentation for
- this feature. [Jay Ball <jay veggiespam.com>]
-
- *) New Module: mod_logio. adds the ability to log bytes sent and
- received. [Bojan Smojver <bojan rexursive.com>]
-
- *) SuExec needs to use the same default directory as the rest of
- server, namely /usr/local/apache2.
- [SangBeom han <sbhan os.korea.ac.kr>]
-
- *) Get mod_auth_ldap to retry connections on LDAP_SERVER_DOWN.
- [Thomas Bennett <thomas.bennett eds.com>, Graham Leggett]
-
- *) Make sure the contents of the WWW-Authenticate header is
- passed on a 4xx error by proxy. Previously all headers
- were dropped, resulting in the browser being unable to
- authenticate. [Dr Richard Reiner <rreiner fscinternet.com>,
- Richard Danielli <rdanielli fscinternet.com>, Graham Wiseman
- <gwiseman fscinternet.com>, David Henderson
- <dhenderson fscinternet.com>]
-
- *) Make mod_cache's CacheMaxStreamingBuffer directive work
- properly for virtual hosts that override server-wide mod_cache
- setttings. [Matthieu Estrade <estrade-m ifrance.com>]
-
- *) Add -p option to apxs to allow programs to be compiled with apxs.
- [Justin Erenkrantz]
-
-Changes with Apache 2.0.42
-
- *) mod_dav: Check for versioning hooks before using them.
- [Greg Stein]
-
-Changes with Apache 2.0.41
-
- *) The protocol version (eg: HTTP/1.1) in the request line parsing
- is now case insensitive. [Jim Jagielski]
-
- *) Allow AddOutputFilterByType to add multiple filters per directive.
- [Justin Erenkrantz]
-
- *) Remove warnings with Sun's Forte compiler. [Justin Erenkrantz]
-
- *) Fixed mod_disk_cache's generation of 304s
- [Kris Verbeeck <Kris.Verbeeck ubizen.com>]
-
- *) Add support for using fnmatch patterns in the final path
- segment of an Include statement (eg.. include /foo/bar/*.conf).
- and remove the noise on stderr during config dir processing.
- [Joe Orton <jorton redhat.com>]
-
- *) mod_cache: cache_storage.c. Add the hostname and any request
- args to the key generated for caching. This provides a unique
- key for each virtual host and for each request with unique
- args. [Paul J. Reder, args code provided by Kris Verbeeck]
-
- *) mod_cache: Do not cache responses to GET requests with query
- URLs if the origin server does not explicitly provide an
- Expires header on the response (RFC 2616 Section 13.9)
- [Kris Verbeeck <krisv be.ubizen.com>]
-
- *) Fix memory leak in core_output_filter. [Justin Erenkrantz]
-
- *) Update OpenSSL detection to work on Darwin.
- [Sander Temme <sctemme covalent.net>]
-
- *) Update the xslt and css to give the documentation a more
- modern style.
- [André Malo <nd perlig.de>, Gernot Winkler <greh o3media.de>]
-
- *) Fix some bucket memory leaks in the chunking code
- [Joe Schaefer <joe+apache sunstarsys.com>]
-
- *) Add ModMimeUsePathInfo directive. [Justin Erenkrantz]
-
- *) mod_cache: added support for caching streamed responses (proxy,
- CGI, etc) with optional CacheMaxStreamingBuffer setting [Brian Pane]
-
- *) Add image/x-icon to httpd.conf PR 10993.
- [Ian Holsman, Peter Bieringer <pb bieringer.de>]
-
- *) Fix FileETags none operation. PR 12207.
- [Justin Erenkrantz, Andrew Ho <andrew tellme.com>]
-
- *) Restored the experimental leader/followers MPM to working
- condition and converted its thread synchronization from
- mutexes to atomic CAS. [Brian Pane]
-
- *) Fix Logic on non-html file removal in mod_deflate
- [Kris Verbeeck <Kris.Verbeeck ubizen.com>]
-
- *) Fix "ab -g"'s truncated year: the last digit was cut off.
- [Leon Brocard <acme astray.com>]
-
- *) mod_rewrite can now sets cookies in err_headers, uses the correct
- expiry date, and can now set the path as well
- PR 12132,12181,12172.
- [Ian Holsman / Rob Cromwell <apachechangelog robcromwell.com>]
-
- *) The content-length filter no longer tries to buffer up
- the entire output of a long-running request before sending
- anything to the client. [Brian Pane]
-
- *) Win32: Lower the default stack size from 1MB to 256K. This will
- allow around 8000 threads to be started per child process.
- 'EDITBIN /STACK:size apache.exe' can be used to change this
- value directly in the apache.exe executable.
- [Bill Stoddard]
-
- *) Win32: Implement ThreadLimit directive in the Windows MPM.
- [Bill Stoddard]
-
- *) Remove CacheOn config directive since it is set but never checked.
- No sense wasting cycles on unused code. Besides, the only truly
- bug free code is deleted code. :) [Paul J. Reder]
-
- *) BufferLogs are now run-time enabled, and the log_config now has 2 new
- callbacks to allow a 3rd party module to actually do the writing of the
- log file [Ian Holsman]
-
- *) Correct ISAPIReadAheadBuffer to default to 49152, per mod_isapi docs.
- [André Malo, Astrid Keßler <kess kess-net.de>]
-
- *) Fix Segfault in mod_cache. [Kris Verbeeck <Kris.Verbeeck ubizen.com>]
-
- *) Fix a null pointer dereference in the merge_env_dir_configs
- function of the mod_env module. PR 11791
- [Paul J. Reder]
-
- *) New option to ServerTokens 'maj[or]'. Only show the major version
- Also Surfaced this directive in the standard config (default FULL)
- [Ian Holsman]
-
- *) Change mod_rewrite to use apr-util's dbm support for dbm rewrite
- maps. The dbm type (e.g., ndbm, gdbm) can be specified on the
- RewriteMap directive. PR 10644 [Jeff Trawick]
-
- *) Fixed mod_rewrite's RewriteMap prg: support so that request/response
- pairs will no longer get out of sync with each other. PR 9534
- [Cliff Woolley]
-
- *) Fixes required to get quoted and escaped command args working in
- mod_ext_filter. PR 11793 [Paul J. Reder]
-
- *) mod-proxy: handle proxied responses with no status lines
- [JD Silvester <jsilves uwo.ca>, Brett Huttley <brett huttley.net>]
-
- *) Fix bug where environment or command line arguments containing
- non-ASCII-7 characters would cause the Win32 child process creation
- to fail. PR 11854 [William Rowe]
-
- *) Bug #11213.. make module loading error messages more informative
- [Ian Darwin <Ian779 darwinsys.com>]
-
- *) thread safety & proxy-ftp [Alexey Panchenko <alexey liwest.ru>, Ian Holsman]
-
- *) mod_disk_cache works much better. This module should still
- be considered experimental. [Eric Prud'hommeaux]
-
- *) Performance improvement for keepalive requests: when setting
- aside a small file for potential concatenation with the next
- response on the connection, set aside the file descriptor rather
- than copying the file into the heap. [Brian Pane]
-
- *) Modified version check on openssl so that it finds the executable
- first and then performs a check of the version, only warning the
- user if they chose, or we selected, an old version of OpenSSL.
- This change also allows the code to work for non-openssl libraries
- selected via the --with-ssl=dir option, which can override the
- automated library check in any case. [Roy Fielding]
-
-Changes with Apache 2.0.40
-
- *) SECURITY [CAN-2002-0661] (cve.mitre.org):
- Close a very significant security hole that
- applies only to the Win32, OS2 and Netware platforms. Unix was not
- affected, Cygwin may be affected. Certain URIs will bypass security
- and allow users to invoke or access any file depending on the system
- configuration. Without upgrading, a single .conf change will close
- the vulnerability. Add the following directive in the global server
- httpd.conf context before any other Alias or Redirect directives;
- RedirectMatch 400 "\\\.\."
- Reported by Auriemma Luigi <bugtest sitoverde.com>.
- [Brad Nicholes]
-
- *) SECURITY [CAN-2002-0654] (cve.mitre.org):
- Close a path-revealing exposure in multiview type
- map negotiation (such as the default error documents) where the
- module would report the full path of the typemapped .var file when
- multiple documents or no documents could be served based on the mime
- negotiation. Reported by Auriemma Luigi <bugtest sitoverde.com>.
- [William Rowe]
-
- *) SECURITY [CAN-2002-0654] (cve.mitre.org):
- Close a path-revealing exposure in cgi/cgid when we
- fail to invoke a script. The modules would report "couldn't create
- child process /path-to-script/script.pl" revealing the full path
- of the script. Reported by Jim Race <jrace qualys.com>.
- [Bill Stoddard]
-
- *) Set aside the apr-iconv and apr_xlate() features for the Win32
- build of 2.0.40 so development can be completed. A patch, from
- <http://www.apache.org/dist/httpd/patches/apply_to_2.0.40/>
- will be available for those that wish to work with apr-iconv.
- [William Rowe]
-
- *) Fix proxy so that it is possible to access ftp: URLs via a proxy
- chain. [Peter Van Biesen <peter.vanbiesen vlafo.be>]
-
- *) mod-deflate now checks to make sure that 'gzip-only-text/html' is
- set to 1, so we can exclude things from the general case with
- browsermatch. [Ian Holsman, Andre Schild <A.Schild aarboard.ch>]
-
- *) Accept multiple leading /'s for requests within the DocumentRoot.
- PR 10946 [William Rowe, David Shane Holden <dpejesh yahoo.com>]
-
- *) Solved the reports of .pdf byterange failures on Win32 alone.
- APR's sendfile for the win32 platform collapses header and trailer
- buffers into a single buffer. However, we destroyed the pointers
- to the header buffer if a trailer buffer was present. PR 10781
- [William Rowe]
-
- *) mod_ext_filter: Add the ability to enable or disable a filter via
- an environment variable. Add the ability to register a filter of
- type other than AP_FTYPE_RESOURCE. [Jeff Trawick]
-
- *) Restore the ability to specify host names on Listen directives.
- PR 11030. [Jeff Trawick, David Shane Holden <dpejesh yahoo.com>]
-
- *) When deciding on the default address family for listening sockets,
- make sure we can actually bind to an AF_INET6 socket before
- deciding that we should default to AF_INET6. This fixes a startup
- problem on certain levels of OpenUNIX. PR 10235. [Jeff Trawick]
-
- *) Replace usage of atol() to parse strings when we might want a
- larger-than-long value with apr_atoll(), which returns long long.
- This allows HTTPD to deal with larger files correctly.
- [Shantonu Sen <ssen apple.com>]
-
- *) mod_ext_filter: Ignore any content-type parameters when checking if
- the response should be filtered. Previously, "intype=text/html"
- wouldn't match something like "text/html;charset=8859_1".
- [Jeff Trawick]
-
- *) mod_ext_filter: Set up environment variables for external programs.
- [Craig Sebenik <craig netapp.com>]
-
- *) Modified the HTTP_IN filter to immediately append the EOS (end of
- stream) bucket for C-L POST bodies, saving a roundtrip and allowing
- the caller to determine that no content remains without prefetching
- additional POST body. [William Rowe]
-
- *) Get proxy ftp to work over IPv6. [Shoichi Sakane <sakane kame.net>]
-
- *) Look for OpenSSL libraries in /usr/lib64. [Peter Poeml <poeml suse.de>]
-
- *) Update SuSE layout. [Peter Poeml <poeml suse.de>]
-
- *) Changes to the internationalized error documents:
- Comment them out in the default config file to make the default
- install as simple as possible; Correct the english 500 error to
- be more understandable; Add a Swedish translation.
- [Thomas Sjogren <thomas northernsecurity.net>,
- Erik Abele <erik codefaktor.de>, Rich Bowen, Joshua Slive]
-
- *) Increase the limit on file descriptors per process in apachectl.
- [Brian Pane]
-
- *) Fix a dependency error when building ApacheMonitor, so that Win32
- and MSVC now trust that the project is current (when it is).
- [James Cox <imajes php.net>]
-
- *) mod_ext_filter: don't segfault if content-type is not set. PR 10617.
- [Arthur P. Smith <apsmith aps.org>, Jeff Trawick]
-
- *) APR-Util Renames pending have been completed [Thom May]
-
- *) Performance improvements for the code that reads request
- headers (ap_rgetline_core() and related functions) [Brian Pane]
-
- *) Add a new directive: MaxMemFree. MaxMemFree makes it possible
- to configure the maximum amount of memory the allocators will
- hold on to for reuse. Anything over the MaxMemFree threshold
- will be free()d. This directive is useful when uncommon large
- peaks occur in memory usage. It should _not_ be used to mask
- defective modules' memory use. [Sander Striker]
-
- *) Fixed the Content-Length filter so that HTTP/1.0 requests to CGI
- scripts would not result in a truncated response.
- [Ryan Bloom, Justin Erenkrantz, Cliff Woolley]
-
- *) Add a filter_init parameter to the filter registration functions
- so that a filter can execute arbitrary code before the handlers
- are invoked. This resolves a problem where mod_include requests
- would incorrectly return a 304. [Justin Erenkrantz]
-
- *) Fix a long-standing bug in 2.0, CGI scripts were being called
- with relative paths instead of absolute paths. Apache 1.3 used
- absolute paths for everything except for SuExec, this brings back
- that standard. [Ryan Bloom]
-
- *) Fix infinite loop due to two HTTP_IN filters being present for
- internally redirected requests. PR 10146. [Justin Erenkrantz]
-
- *) Switch conn_rec->keepalive to an enumeration rather than a bitfield.
- [Justin Erenkrantz]
-
- *) Fix mod_ext_filter to look in the main server for filter definitions
- when running in a vhost if the filter definition is not found in
- the vhost. PR 10147 [Jeff Trawick]
-
- *) Support WinNT CGI invocation through ScriptInterpreterSource
- 'registry' for script interpreter paths and names with non-ascii
- characters in the executable filepath. [William Rowe]
-
- *) Support the -w flag on to keep the Win32 console open on error.
- [William Rowe]
-
- *) Normalize the hostname value in the request_rec to all-lowercase
- [Perry Harrington <pedward webcom.com>]
-
- *) Fix WinNT cgi 500 errors when QUERY_ARGS or other strings include
- extended characters (non US-ASCII) in non-utf8 format. This brings
- Win32 back into CGI/1.1 compliance, and leaves charset decoding up
- to the cgi application itself. [William Rowe]
-
- *) Major overhaul of mod_dav, mod_dav_fs and the experimental/cache
- modules to bring them up to the current apr/apr-util APIs.
- [William Rowe]
-
- *) Fix segfault in mod_mem_cache most frequently observed when
- serving the same file to multiple clients on an MP machine.
- [Bill Stoddard]
-
- *) mod_rewrite can now set cookies (RewriteRule (.*) - [CO=name:$1:.domain])
- [Brian Degenhardt <bmd mp3.com>, Ian Holsman]
-
- *) Fix perchild to work with apachectl by adding -k support to perchild.
- PR 10074 [Jeff Trawick]
-
- *) Fix a silly htpasswd.c logic error that incorrectly reported that
- both -c and -n had been used. PR 9989 [Cliff Woolley]
-
- *) Fixed a mod_include error case in which no HTTP response was sent
- to the client if an shtml document contained an unterminated SSI
- directive [Brian Pane]
-
- *) Improve ap_get_client_block implementation by using APR-util brigade
- helper functions and relying on current filter assumptions.
- [Justin Erenkrantz]
-
-Changes with Apache 2.0.39
-
- *) Fixed a build problem in htpasswd.c on Win32.
- [Guenter Knauf <eflash gmx.net>, Cliff Woolley]
-
-Changes with Apache 2.0.38
-
- *) Rewrite htpasswd to use APR. The removes the annoying warning about
- tmpnam being unsafe. [Ryan Bloom]
-
- *) We must set the MIME-type for .shtml files to text/html if we want them
- to be parsed for SSI tags. Add the config for that to the default
- config file so that it is easier to enable .shtml parsing.
- [Dave Dyer <ddyer real-me.net>]
-
- *) Fixed a problem with 'make install' on ReliantUnix.
- [Jean-frederic Clere <jfrederic.clere fujitsu-siemens.com>]
-
- *) Make the default_handler catch all requests that aren't served by
- another handler. This also gets us to return a 404 if a directory
- is requested, there is no DirectoryIndex, and mod_autoindex isn't
- loaded. [Justin Erenkrantz]
-
- *) Fixed the handling of nested if-statements in shtml files.
- PR 9866 [Brian Pane]
-
- *) Allow 'make install DESTDIR=/path'. This allows packagers to install
- into a directory different from the one that was configured. This
- also mirrors the root= feature from 1.3. We cannot use prefix=,
- because both APR and APR-util resolve their installation paths at
- configuration time. This means that there is no variable prefix
- to replace. [Andreas Hasenack <andreas netbank.com.br>]
-
- *) AIX 4.3.2 and above: Define SINGLE_LISTEN_UNSERIALIZED_ACCEPT.
- These levels of AIX don't have a thundering herd problem with
- accept(). [Jeff Trawick]
-
- *) prefork MPM: Ignore mutex errors during graceful restart. For
- certain types of mutexes (particularly SysV semaphores), we
- should expect to occasionally fail to obtain or release the
- mutex during restart processing. [Jeff Trawick]
-
- *) Fix install-bindist.sh so that it finds any perl instead of just
- early perl 5.x versions. This is consistent with a build/install
- from source, and it allows the perl scripts installed by a bindist
- to work on systems with perl 5.6. [Jeff Trawick]
-
- *) Fix apxs so that the makefile created by "apxs -g" works on AIX and
- Tru64 (and probably some other platforms). [Jeff Trawick]
-
- *) Allow CGI scripts to return their Content-Length. This also fixes a
- hang on HEAD requests seen on certain platforms (such as FreeBSD).
- [Justin Erenkrantz]
-
- *) Added log rotation based on file size to the RotateLog support
- utility. [Brad Nicholes]
-
- *) Fix some casting in mod_rewrite which broke random maps.
- PR 9770 [Allan Edwards, Greg Ames, Jeff Trawick]
-
-Changes with Apache 2.0.37
-
- *) allow POST method over SSL when per-directory client cert
- authentication is used with 'SSLOptions +OptRenegotiate' enabled
- and a client cert was found in the ssl session cache.
-
- *) 'SSLOptions +OptRengotiate' will use client cert in from the ssl
- session cache when there is no cert chain in the cache. prior to
- the fix this situation would result in a FORBIDDEN response and
- error message "Cannot find peer certificate chain"
- [Doug MacEachern]
-
- *) ap_finalize_sub_req_protocol() shouldn't send an EOS bucket if
- one was already sent. PR 9644 [Jeff Trawick]
-
- *) Fix the display of the default name for the mime types config
- file. PR 9729 [Matthew Brecknell <mbrecknell orchestream.com>]
-
- *) Fix the working directory *for WinNT/2K/XP services only* to
- change to the Apache directory (one level above the location
- of Apache.exe, in the case that Apache.exe resides in bin/.)
- Solves the case of ServerRoot /foo paths where /foo was not
- on the same drive as /winnt/system32. [William Rowe]
-
- *) Make 2.0's "AcceptMutex" startup message now "completely"
- match how 1.3 does it. [Jim Jagielski]
-
- *) Implement a fixed size memory cache using a priority queue
- [Ian Holsman]
-
- *) Fix apxs to allow "apxs -q installbuilddir" and to allow
- querying certain other variables from config_vars.mk. PR 9316
- [Jeff Trawick]
-
- *) Added the "detached" attribute to the cgi_exec_info_t internals
- so that Win32 and Netware won't create a new window or console
- for each CGI invoked. PR 8387
- [Brad Nicholes, William Rowe]
-
- *) Consolidated the command line parameters and attributes that are
- manipulated by the optional function ap_cgi_build_command() in
- mod_cgi into a single structure.
- [Brad Nicholes]
-
- *) Get rid of uninitialized value errors with "apxs -q" on certain
- variables. [Stas Bekman <stas stason.org>]
-
- *) Fix apxs to allow it to work when the build directory is somewhere
- besides server-root/build. PR 8453
- [Jeff Trawick and a host of others]
-
- *) Allow ap_discard_request_body to be called multiple times in the
- same request. Essentially, ap_http_filter keeps track of whether
- it has sent an EOS bucket up the stack, if so, it will only ever
- send an EOS bucket for this request.
- [Ryan Bloom, Justin Erenkrantz, Greg Stein]
-
- *) Remove all special mod_ssl URIs. This also fixes the bug where
- redirecting (.*) will allow an SSL protected page to be viewed
- without SSL. [Ryan Bloom]
-
- *) Fix the binary build install script so that the build logic
- created by "apxs -g" will work when the user has a binary
- build. [Jeff Trawick]
-
- *) Allow instdso.sh to work with full paths to the shared module.
- [Justin Erenkrantz]
-
- *) NetWare: Enabled CGI functionality and added mod_cgi as a built
- in module for NetWare [Brad Nicholes]
-
- *) Changed cgi and piped log behavior to accept 65536 characters
- on Win32 (matching Linux) before deadlocking between outputing
- client stdin, slurping the output from stdout and then the stderr
- stream. PR 8179 [William Rowe]
-
- *) Fixed Win32 wintty.exe support to assure the window title is valid.
- Elimiates possible gpfault or garbage title without the -t option.
- [William Rowe]
-
- *) Rewrite mod_cgi, mod_cgid, and mod_proxy input handling to use
- brigades and input filters. [Justin Erenkrantz]
-
- *) Allow ap_http_filter (HTTP_IN) to return EOS when there is no request
- body. [Justin Erenkrantz]
-
- *) NetWare: Piping log entries through RotateLogs using the
- CustomLogs directive is finally supported now that we have
- the pipes and spawning functionality working.
- [Brad Nicholes]
-
- *) SECURITY [CVE-2002-0392] (cve.mitre.org) [CERT VU#944335]:
- Detect overflow when reading the hex bytes forming a chunk line.
- [Aaron Bannert]
-
- *) Allow RewriteMap prg:'s to take command-line arguments. PR 8464.
- [James Tait <JTait wyrddreams.demon.co.uk>]
-
- *) Correctly return 413 when an invalid chunk size is given on
- input. Also modify ap_discard_request_body to not do anything
- on sub-requests or when the connection will be dropped.
- [Justin Erenkrantz]
-
- *) Fix the TIME_* SSL var lookups to be threadsafe. PR 9469.
- [Cliff Woolley]
-
- *) Ensure that apr_brigade_write() flushes in all of the cases that
- it should to avoid conditions in some modules that could cause
- large amounts of data to be buffered. [Cliff Woolley]
-
- *) Fix problem where mod_cache/mod_disk_cache was incorrectly
- stripping the content_type from cached responses.
- [Bill Stoddard]
-
- *) apachectl passes through any httpd options. Note: apachectl
- should be used in preference to httpd since it ensures that any
- appropriate environment variables have been set up.
- [Jeff Trawick]
-
- *) Fix the combination of mod_cgid, mod_setuexec, and mod_userdir.
- PR 7810 [Colm MacCarthaigh <colmmacc redbrick.dcu.ie>]
-
- *) Fix suexec execution of CGI scripts from mod_include.
- PR 7791, 8291 [Colm MacCarthaigh <colmmacc redbrick.dcu.ie>]
-
- *) Fix segfaults at startup on some platforms when mod_auth_digest,
- mod_suexec, or mod_ssl were used as DSO's due to the way they
- were tracking the current init phase since DSO's get completely
- unloaded and reloaded between phases. PR 9413.
- [Tsuyoshi Sasamoto <nazonazo super.win.ne.jp>, Brad Nicholes]
-
- *) Fix mod_include's handling of regular expressions in
- "<!--#if" directives [Julius Gawlas <julius_gawlas hp.com>]
-
- *) Fix the worker MPM deadlock problem [Brian Pane]
-
- *) Modify the module documentation to allow for translations.
- [Yoshiki Hayashi, Joshua Slive]
-
- *) Fix a file permissions problem which prevented mod_disk_cache
- from working on Unix. [Jeff Trawick]
-
- *) Add "-k start|restart|graceful|stop" support to httpd for the Unix
- MPMs. These have semantics very similar to the old apachectl
- commands of the same name. [Justin Erenkrantz, Jeff Trawick]
-
- *) Make sure that the runtime dir is created by make install.
- PR 9233. [Jeff Trawick]
-
- *) Fix an unusual set of ./configure arguments that could cause
- mod_http to be built as a DSO, which it currently doesn't
- support. PR 9244.
- [Cliff Woolley, Robin Johnson <robbat2 orbis-terrarum.net>]
-
- *) Win32: Fix bug in apr_sendfile() that caused incorrect operation
- of the %X, %b and %B logformat options. PR 8253, 8996.
- [Bill Stoddard]
-
- *) If content-encoding is already present, do not run deflate (PR 9222)
- [Kazuhisa ASADA <kaz asada.sytes.net>]
-
- *) The APLOG_NOERRNO flag to ap_log_[r]error() is now deprecated.
- It is currently ignored and it will be removed in a future release
- of Apache. [Jeff Trawick]
-
- *) Removed documentation references to the no-longer-supported
- "make certificate" feature of mod_ssl for Apache 1.3.x. Test
- certificates, if truly desired, can be generated using openssl
- commands. PR 8724. [Cliff Woolley]
-
- *) Remove SSLLog and SSLLogLevel directives in favor of having
- mod_ssl use the standard ErrorLog directives. [Justin Erenkrantz]
-
- *) OS/390: LIBPATH no longer has to be manually uncommented in
- envvars to get apachectl to set up httpd properly. [Jeff Trawick]
-
- *) mod_isapi: All mod_isapi directives, excluding ISAPICacheFile,
- may now be specified to the <File/Directory > container, rather
- than by vhost. [William Rowe]
-
- *) mod_isapi: Experimental support for faux async support for ISAPI
- modules. [William Rowe]
-
- *) mod_isapi: Major refactoring of the code to rely on apr internals
- rather than MS APIs (using our own mod_isapi.h headers for ISAPI
- symbol definitions.) [William Rowe]
-
- *) mod_isapi: Fixed the return string length from GetServerVariable
- callback, it was not including the trailing null in the consumed
- buffer size. This was particularly bad for Delphi 6.0 users.
- PR 8934 [Sebastian Hantsch <sebastian.hantsch gmx.de>]
-
- *) Fixed Win32 builds for Microsoft VisualStudio 7.0 (.net).
- [William Rowe]
-
- *) Make apxs look in the correct directory for envvars. It was
- broken when sbindir != bindir. PR 8869
- [Andreas Sundström <sunkan zappa.cx>]
-
- *) Fix mod_deflate corruption when using multiple buckets. PR 9014.
- [Asada Kazuhisa <kaz asada.sytes.net>]
-
- *) Performance enhancements for access logger when using
- default timestamp formatting [Brian Pane]
-
- *) Added EnableMMAP config directive to enable the server
- administrator to disable memory-mapping of delivered files
- on a per-directory basis. [Brian Pane]
-
- *) Performance enhancements for mod_setenvif [Brian Pane]
-
- *) Fix a mod_ssl build problem on OS/390. [Jeff Trawick]
-
- *) Fixed If-Modified-Since on Win32, which would give false positives
- because of the sub-second resolution of file timestamps on that
- platform. [Cliff Woolley]
-
- *) Reverse the hook ordering for mod_userdir and mod_alias so
- that Alias/ScriptAlias will override Userdir. PR 8841
- [Joshua Slive]
-
- *) Move mod_deflate out of experimental and into filters.
- [Justin Erenkrantz]
-
- *) Get proxy CONNECT basically working. [Jeff Trawick]
-
- *) Fix mod_rewrite hang when APR uses SysV Semaphores and
- RewriteLogLevel is set to anything other than 0. PR: 8143
- [Aaron Bannert, Cliff Woolley]
-
- *) Fix byterange requests from returning 416 when using dynamic data
- (such as filters like mod_include). [Justin Erenkrantz]
-
- *) Allow mod_rewrite's set of "int:" internal RewriteMap functions
- to be extended by third-party modules via an optional function.
- [Tahiry Ramanamampanoharana <nomentsoa hotmail.com>, Cliff Woolley]
-
- *) Fix mod_include expression parser's handling of unquoted strings
- followed immediately by a closing paren. PR 8462. [Brian Pane]
-
- *) Remove autom4te.cache in 'make distclean'.
- [Thom May <thom planetarytramp.net>]
-
- *) Fix generated httpd.conf to respect layout for LoadModule lines.
- PR 8170. [Thom May <thom planetarytramp.net>]
-
- *) Win32: During a graceful restart, threads in the new process
- were accessing scoreboard slots still in use by active threads in
- the old process. [Bill Stoddard]
-
-Changes with Apache 2.0.36
-
- *) Fix some minor formatting issues with ab. Part of this is
- in reference to PR 8544, the rest I noticed while testing
- the PR fix. [Paul J. Reder]
-
- *) Fix a case where an invalid pass phrase is entered and an
- error message is given, but the prompt is not shown again.
- This left the user in an ambiguous state. PR 8320 [Paul J. Reder]
-
- *) Close sockets on worker MPM when doing a graceless restart.
- [Aaron Bannert]
-
- *) Reverted a minor optimization in mod_ssl.c that used the vhost ID
- as the session id context rather that a MD5 hash of that vhost ID,
- because it caused very long vhost id's to be unusable with mod_ssl.
- PR 8572. [Cliff Woolley]
-
- *) Fix the link to the description of the CoredumpDirectory
- directive in the server-wide document. PR 8643. [Jeff Trawick]
-
- *) Fixed SHMCB session caching. [Aaron Bannert, Cliff Woolley]
-
- *) Synced with remaining changes from mod_ssl 2.8.8-1.3.24:
- - Avoid SIGBUS on sparc machines with SHMCB session caches
- - Allow whitespace between the pipe and the name of the
- program in SSLLog "| /path/to/program". [Cliff Woolley]
-
- *) Introduce mod_ext_filter and mod_deflate experimental modules
- to the Win32 build (zlib sources must be in srclib\zlib.)
- [William Rowe]
-
- *) Changes to the worker MPM's queue management and thread
- synchronization code to reduce mutex contention [Brian Pane]
-
- *) Don't install *.in configuration files since we already install
- *-std.conf files. [Aaron Bannert]
-
- *) Many improvements to the threadpool MPM. [Aaron Bannert]
-
- *) Fix subreqs that are promoted via fast_redirect from having invalid
- frec->r structures. This would cause subtle errors later on in
- request processing such as seen in PR 7966. [Justin Erenkrantz]
-
- *) More efficient pool recycling logic for the worker MPM [Brian Pane]
-
- *) Modify the worker MPM to not accept() new connections until
- there is an available worker thread. This prevents queued
- connections from starving for processing time while long-running
- connections were hogging all the available threads. [Aaron Bannert]
-
- *) Convert the worker MPM's fdqueue from a LIFO back into a FIFO.
- [Aaron Bannert]
-
- *) Get basic HTTP proxy working on EBCDIC machines. [Jeff Trawick]
-
- *) Allow mod_unique_id to work on systems with no IPv4 address
- corresponding to their host name. [Jeff Trawick]
-
- *) Fix suexec behavior with user directories. PR 7810.
- [Colm <colmmacc redbrick.dcu.ie>]
-
- *) Reject a blank UserDir directive since it is ambiguous. PR 8472.
- [Justin Erenkrantz]
-
- *) Make mod_mime use case-insensitive matching when examining
- extensions on all platforms. PR 8223. [Justin Erenkrantz]
-
- *) Add an intelligent error message should no proxy submodules be
- valid to handle a request. PR 8407 [Graham Leggett]
-
- *) Major improvements in concurrent processing for AB by enabling
- non-blocking connect()s and preventing APR from doing blocking
- read()s. Also implement fatal error checking for apr_recv().
- [Aaron Bannert]
-
- *) Fix Win32 NTFS Junctions (symlinks). PR 8014 [William Rowe]
-
- *) Fix Win32 'short name' aliases in httpd.conf directives.
- PR 8009 [William Rowe]
-
- *) Fix generation of default httpd.conf when the layout paths are
- disjoint. PR 7979, 8227. [Justin Erenkrantz]
-
- *) Swap downgrade-1.0 and force-response-1.0 conditional checks so
- that downgraded responses can have force-response. PR 8357.
- [Justin Erenkrantz]
-
- *) Fix perchild MPM so that it can be configured with the move to the
- experimental directory. [Scott Lamb <slamb slamb.org>]
-
- *) Fix perchild MPM so that it uses ap_gname2id for groups instead of
- ap_uname2id. [Scott Lamb <slamb slamb.org>]
-
- *) Fix AcceptPathInfo. PR 8234 [Cliff Woolley]
-
- *) SECURITY: Added the APLOG_TOCLIENT flag to ap_log_rerror() to
- explicitly tell the server that warning messages should be sent
- to the client in addition to being recorded in the error log.
- Prior to this change, ap_log_rerror() always sent warning
- messages to the client. In one case, a faulty CGI script caused
- the server to send a warning message to the client that contained
- the full path to the CGI script. This could be considered a
- minor security exposure. [Bill Stoddard]
-
- *) mod_autoindex output when SuppressRules was specified would
- omit the first carriage return so the first item in the list
- would appear to the right of the column headings instead of
- underneath them. PR 8016 [David Shane Holden <dpejesh yahoo.com>]
-
- *) Moved the call to apr_mmap_dup outside the error branch so
- that it would actually get called. This fixes a core dump
- at init everytime you use the MMapFile directive. PR 8314
- [Paul J. Reder]
-
- *) Trigger an error when a LoadModule directive attempts to
- load a module which is built-in. This is a common error when
- switching from a DSO build to a static build. [Jeff Trawick]
-
- *) Change instdso.sh to use libtool --install everywhere and then
- clean up some stray files and symlinks that libtool leaves around
- on some platforms. This gets subversion building properly since
- it needed a re-link to be performed by libtool at install time,
- and the old instdso.sh logic to simply cp the DSO didn't handle
- that requirement. [Sander Striker]
-
- *) Allow VPATH builds to succeed when configured from an empty
- directory. [Thom May <thom planetarytramp.net>]
-
- *) Fix 'control reaches end of non-void function' warning in
- server/log.c. [Ben Collins-Sussman <sussman collab.net>]
-
- *) Perchild MPM is now correctly deemed as experimental and is now
- located in server/mpm/experimental. [Justin Erenkrantz]
-
- *) Fix segfault in mod_mem_cache when garabge collecting an expired
- cache entry. [Bill Stoddard]
-
- *) Introduced -E startup_logfile_name option to httpd to allow admins
- to begin logging errors immediately. This provides Win32 users
- an alternative to sending startup errors to the event viewer, and
- allows other daemon tool authors an alternative to logging to stderr.
- [William Rowe]
-
- *) Fix subreqs with non-defined Content-Types being served improperly.
- [Justin Erenkrantz]
-
- *) Merge in latest GNU config.guess and config.sub files. PR 7818.
- [Justin Erenkrantz]
-
- *) Move 100 - Continue support to the HTTP_IN filter so that filters
- are guaranteed to support 100 - Continue logic without any
- intervention. [Justin Erenkrantz]
-
- *) Add HTTP chunked input trailer support. [Justin Erenkrantz]
-
- *) Rename and export get_mime_headers as ap_get_mime_headers.
- [Justin Erenkrantz]
-
- *) Allow empty Host: header arguments. PR 7441. [Justin Erenkrantz]
-
- *) Properly substitute sbindir as httpd's location in apachectl. PR 7840.
- [Andreas Hasenack <andreas netbank.com.br>]
-
- *) Allow Win32 shebang scripts to follow the path (or omit the .exe
- suffix from the shebang command), and allow ScriptInterpreterSource
- Registry or RegistryStrict to override shebang lines, as 1.3 did.
- PR 8004 [William Rowe]
-
- *) worker MPM: Fix a situation where a child exited without releasing
- the accept mutex. Depending on the OS and mutex mechanism this
- could result in a hang. [Jeff Trawick]
-
- *) Update the instructions for how to get started with mod_example.
- [Stas Bekman]
-
- *) Fix PidFile to default to rel_runtimedir instead of
- rel_logfiledir. PR 7841. [Andreas Hasenack <andreas netbank.com.br>]
-
- *) Win32: Fix problem that caused rapid performance degradation
- when number of connecting clients exceeded ThreadsPerChild.
- [Bill Stoddard]
-
- *) Fixed a segfault parsing large SSIs on non-mmap systems.
- [Brian Havard]
-
- *) Proxy was bombing out every second keepalive request, caused by a
- stray CRLF before the second response's status line. Proxy now
- tries to read one more line if it encounters a CRLF where it
- expected a status. PR 10010 [Graham Leggett]
-
- *) Deprecated the apr_lock.h API. Please see the following files
- for the improved thread and process locking and signaling:
- apr_proc_mutex.h, apr_thread_mutex.h, apr_thread_rwlock.h,
- apr_thread_cond.h, and apr_global_mutex.h. [Aaron Bannert]
-
- *) Change mod_status to use scoreboard accessor functions so it can
- be used in any MPM without having to be recompiled.
- [Ryan Morgan <rmorgan covalent.net>]
-
- *) Fix parsing of some AP_DECLARE_DATA declarations so that the filter
- handle declarations are recognized. This fixes problems loading
- mod_autoindex on some platforms. [Brian Havard]
-
- *) add optional fixup hook to proxy [Daniel Lopez <daniel covalent.net>]
-
- *) Remind the admin about the User and Group directives when we are
- unable to set permissions on a semaphore. PR 7812 [Jeff Trawick]
-
- *) fix possible compilation problem in ssl_engine_kernel.c. PR 7802
- [Doug MacEachern]
-
- *) fix possible infinite loop in mod_ssl triggered by certain
- netscape clients [Doug MacEachern]
-
- *) fix ProxyPass when frontend is https and backend is http
- [Doug MacEachern]
-
- *) Add DASL support to mod_dav
- [Sung Kim <hunkim cse.ucsc.edu>]
-
-Changes with Apache 2.0.35
-
- *) mod_rewrite: updated to use the new APR global mutex type.
- [Aaron Bannert]
-
- *) Fixes for mod_include errors on boundary conditions in which
- "<!--#" occurs at the very end of a bucket
- [Paul Reder, Brian Pane]
-
- *) worker, prefork, perchild, beos MPMs: Add -DFOREGROUND switch to
- cause the Apache parent process to run in the foreground (similar to
- -DNO_DETACH except that it doesn't switch session ids).
- [Jeff Trawick]
-
- *) Added support for Posix semaphore mutex locking (AcceptMutex posixsem)
- for those platforms that support it. If using the default
- implementation, this is between pthread and sysvsem in priority.
- This implies it's the new default for Darwin. [Jim Jagielski]
-
- *) AIX: Fix the syntax for setting the LDR_CNTRL and AIXTHREAD_SCOPE
- environment variables in the envvars file. [Jeff Trawick]
-
- *) worker MPM: Don't create a listener thread until we have a worker
- thread. Otherwise, in situations where we'll have to wait a while
- to take over scoreboard slots from a previous generation, we'll be
- accepting connections we can't process yet. [Jeff Trawick]
-
- *) Allow worker MPM to build on systems without pthread_kill().
- [Pier Fumagalli, Jeff Trawick]
-
- *) Prevent ap_add_output_filters_by_type from being called in
- ap_set_content_type if the content-type hasn't changed.
- [Justin Erenkrantz]
-
- *) Performance: implemented the bucket allocator made possible by the
- API change in 2.0.34. [Cliff Woolley]
-
- *) Don't allow initialization to succeed if we can't get a socket
- corresponding to one of the Listen statements. [Jeff Trawick]
-
-Changes with Apache 2.0.34
-
- *) Allow all Perchild directives to accept either numerical UID/GID
- or logical user/group names. [Scott Lamb <slamb slamb.org>]
-
- *) Make Perchild compile cleanly and serve pages again. [Ryan Bloom]
-
- *) implement ssl proxy to support ProxyPass / https:// and the
- SSLProxy* directives [Doug MacEachern]
-
- *) Update mod_cgid to not do single-byte socket reads for CGI headers
- [Brian Pane]
-
- *) Made AB's use of the Host: header rfc2616 compliant
- by Taisuke Yamada <tai iij.ad.jp> [Dirk-Willem van Gulik].
-
- *) The old, legacy (and unused) code in which the scoreboard was totally
- and completely contained in a file (SCOREBOARD_FILE) has been
- removed. This does not affect scoreboards which are *mapped* to
- files using named-shared-memory. [Jim Jagielski]
-
- *) Change bucket brigades API to allow a "bucket allocator" to be
- passed in at certain points. This allows us to implement freelists
- so that we can stop using malloc/free so frequently.
- [Cliff Woolley, Brian Pane]
-
- *) Add support for macro expansion within the variable names in
- <!--#echo--> and <!--#set--> directives [Brian Pane]
-
- *) Fix some mod_include segfaults [Cliff Woolley, Brian Pane, Brad Nicholes]
-
- *) Update the "RedHat" Layout to match Red Hat Linux version 7. PR BZ-7422
- [Joe Orton]
-
- *) add compat layer to support RSA SSLC 1.x and 2.x in mod_ssl
- [Jon Travis, John Barbee, William Rowe, Ryan Bloom, Doug MacEachern]
-
- *) Add a new parameter to the quick_handler hook to instruct
- quick handlers to optionally do a lookup rather than actually
- serve content. This is the first of several changes required fix
- several problems with how quick handlers work with subrequests.
- [Bill Stoddard]
-
- *) worker MPM: Get MaxRequestsPerChild to work again. [Jeff Trawick]
-
- *) [APR-related] The ordering of the default accept mutex method has
- been changed to better match what's done in Apache 1.3. The ordering
- is now (highest to lowest): pthread -> sysvsem -> fcntl -> flock.
- [Jim Jagielski]
-
- *) Ensure that the build/ directory is created when using VPATH.
- [Justin Erenkrantz]
-
- *) Add some popular types to the mime magic file. PR 7730.
- [Linus Walleij <triad df.lth.se>, Justin Erenkrantz]
-
- *) Remove the single-byte socket reads for CGI headers [Brian Pane]
-
- *) When a proxied site was being served, Apache was replacing
- the original site Server header with it's own, which is not
- allowed by RFC2616. Fixed. [Graham Leggett]
-
- *) Fix a mod_cgid problem that left daemon processes stranded
- in some server restart scenarios. [Jeff Trawick]
-
- *) Added exp_foo and rel_foo variables to config_vars.mk for
- all Apache and Autoconf path variables (like --sysconfdir,
- --sbindir, etc). exp_foo is the "expanded" version, which means
- that all internal variable references have been interpolated.
- rel_foo is the same as $exp_foo, only relative to $prefix if they
- share a common path. [Aaron Bannert]
-
- *) Fix some restart/terminate problems in the worker MPM. Don't
- drop connections during graceful restart. [Jeff Trawick]
-
- *) Change the header merging behaviour in proxy, as some headers
- (like Set-Cookie) cannot be unmerged due to stray commas in
- dates. [Graham Leggett]
-
- *) Be more vocal about what AcceptMutex values we allow, to make
- us closer to how 1.3 does it. [Jim Jagielski]
-
- *) Get nph- CGI scripts working again. PRs 8902, 8907, 9983
- [Jeff Trawick]
-
- *) Upgraded PCRE library to latest version 3.9 [Brian Pane]
-
- *) Add accessor function to set r->content_type. From now on,
- ap_rset_content_type() should be used to set r->content_type.
- This change is required to properly implement the
- AddOutputFilterByType configuration directive.
- [Bill Stoddard, Sander Striker, Ryan Bloom]
-
- *) Add new M_FOO symbols for the WebDAV/DeltaV methods specified by
- RFC 3253. Improved the method name/number mapping functions.
- [Greg Stein]
-
- *) remove sock_enable_linger from connection.c [Ian Holsman]
-
- *) Fix for virtual host processing where the requested hostname
- has a '.' at the end (PR 9187) [Ryan Cruse <ryan estara.com>]
-
- *) mod_dav's APIs for REPORT response handling was changed so that
- providers can generate the content directly into the output filter
- stack, rather than buffering the response into memory. [Greg Stein]
-
- *) Fix a hang condition with graceful restart and prefork MPM
- in the situation where MaxClients is very high but
- much fewer servers are actually started at the time of the
- restart. [Jeff Trawick]
-
- *) Small performance fixes for mod_include [Brian Pane]
-
- *) Performance improvement for the error logger [Brian Pane]
-
- *) Change configure so that Solaris 8 and above have
- SINGLE_LISTEN_UNSERIALIZED_ACCEPT defined by default.
- according to sun people solaris 8+ doesn't have a thundering
- herd problem [Ian Holsman]
-
- *) Allow URIs specifying CGI scripts to include '/' at the end
- (e.g., /cgi-bin/printenv/) on AIX and Solaris (and other OSs
- which ignore '/' at the end of the names of non-directories).
- PR 10138 [Jeff Trawick]
-
- *) implement SSLSessionCache shmht and shmcb based on apr_rmm and
- apr_shm. [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>]
-
- *) Fix apxs -g handling. Move config_vars.mk from the top build
- directory to the build directory. PR 10163 [Jeff Trawick]
-
- *) Fix some mod_include problems which broke evaluation of some
- expressions. PR 10108 [Jeff Trawick]
-
- *) Fix the calculation of request time in mod_status. [Stas Bekman]
-
- *) Fix the calculation of thread_num in the worker score structure.
- [Stas Bekman]
-
- *) Use apr_atomic operations in managing the mod_mem_cache
- cache_objects for SMP scalability. (see USE_ATOMICS
- preprocessor directive in mod_file_cache)
- [Bill Stoddard]
-
- *) Add filehandle caching to mod_mem_cache. (see CACHE_FD
- preprocessor directive in mod_file_cache)
- [Bill Stoddard]
-
- *) Implement prototype mod_disk_cache for use with mod_cache.
- [Bill Stoddard]
-
- *) Add a missing manualdir entry in the Debian config.layout.
- [Thom May <thom planetarytramp.net>]
-
- *) Stop installing libtool for APR and tell APR where it should place
- its copy of libtool (via our installbuildpath layout variable).
- [Justin Erenkrantz]
-
- *) New directive ProxyIOBufferSize. Sets the size of the buffer used
- when reading from a remote HTTP server in proxy. [Graham Leggett]
-
- *) Modify receive/send loop in proxy_http and proxy_ftp so that
- should it be necessary, the remote server socket is closed before
- transmitting the last buffer (set by ProxyIOBufferSize) to the
- client. This prevents the backend server from being forced to hang
- around while the last few bytes are transmitted to a slow client.
- Fix the case where no error checking was performed on the final
- brigade in the loop. [Graham Leggett]
-
- *) Scrap CacheMaxExpireMin and CacheDefaultExpireMin. Change
- CacheMaxExpire and CacheDefaultExpire to use seconds rather than
- hours. [Graham Leggett, Bill Stoddard]
-
- *) New Directive SSIUndefinedEcho. to change the '(none)' echoed
- for a undefined variable. [Ian Holsman]
-
- *) Proxy HTTP and CONNECT: Keep trying other addresses from the DNS
- when we can't get a socket in the specified address family. We may
- have gotten back an IPv6 address first and yet our system is not
- configured to allow IPv6 sockets. [Jeff Trawick]
-
- *) Be more careful about recursively removing CVS directories. Make
- sure that we aren't cd'ing to their home directory first. PR: 9993
- [Aaron Bannert, James LewisMoss <dres lewismoss.net>]
-
- *) Add a missing errordir entry in the Debian config.layout. PR: 10067
- [Dirk-Jan Faber <dirk-jan selwerd.nl>, Aaron Bannert,
- Thom May <thom planetarytramp.net>]
-
- *) Rename the filter ordering priorities. The recent filtering fixes
- have showcased problems with their usage. Therefore, we need to
- rename them to increase the clarity. (CONTENT->RESOURCE,
- HTTP_HEADER->CONTENT_SET/PROTOCOL) [Justin Erenkrantz]
-
-Changes with Apache 2.0.33
-
- *) Fix a problem in the new --enable-layout functionality where
- it wouldn't allow overrides from variables like --prefix,
- --bindir, etc. [Thom May <thom planetarytramp.net>]
-
- *) Fix a bug in the core input filter for AP_MODE_EXHAUSTIVE. It
- no longer hangs around waiting for the socket to close before
- returning exhaustive data. [Aaron Bannert]
-
- *) rename apr_exploded_time_t to apr_time_exp_t (as per renames pending)
- [Thom May <thom planetarytramp.net>]
-
- *) Change mod_ssl to always do a full startup/teardown on restarts.
- this allows mod_ssl to be added to a server that is already
- running and makes it possible to add/change certs/keys after the
- server has been started. [Doug MacEachern]
-
- *) Introduce PassPhraseDialog "|/path/to/pipe" mechanism to mod_ssl.
- This pipe must be a bidirectional 'console' style relay, which
- mod_ssl prints all prompts to the pipe's stdin, and reads the
- passphrases from the pipe's stdout. [William Rowe]
-
- *) Fix bug where --sysconfdir and --localstatedir were being
- ignored. [Thom May <thom planetarytramp.net>, Aaron Bannert]
- PR 9888
-
- *) Fix --enable-layout to work again. Caution: When specifying
- --enable-layout, common arguments like --prefix, --exec-prefix,
- etc. will be ignored and the settings from the layout will be
- used instead. [Thom May <thom planetarytramp.net>, Aaron Bannert]
- PR 9124, 9873, 9885
-
- *) New Directive for mod_proxy: ProxyRemoteMatch. This provides
- regex pattern matching for the determination of which requests
- to use the remote proxy for. [Jim Jagielski]
-
- *) Fix CustomLog bytes-sent with HTTP 0.9. [Justin Erenkrantz]
-
- *) Prevent Apache from ignoring SIGHUP due to some lingering 1.3
- cruft in piped logs and rewritemap child processes.
- [William Rowe]
-
- *) All instances of apr_lock_t have been removed and converted
- to one of the following new lock APIs: apr_thread_mutex.h,
- apr_proc_mutex.h, or apr_global_mutex.h. No new code should
- use the apr_lock.h API, as the old API will soon be deprecated.
- [Aaron Bannert]
-
- *) Merged in changes to mod_ssl up through 2.8.7-1.3.23.
- [Ralf S. Engelschall, Cliff Woolley]
-
- *) mod-include: make it handle flush'es and fix the 'false-alarm'
- [Justin Erenkrantz, Brian Pane, Ian Holsman]
-
- *) ap_get_*_filter_handle() functions to allow 3rd party modules
- to lookup filter handles so they can bypass the filter name
- lookup when adding filters to a request (via ap_add_*_filter_handle())
- [Ryan Morgan <rmorgan covalent.net>]
-
- *) Fix for multiple file buckets on Win32, where the first file
- bucket would cause the immediate closure of the socket on any
- non-keepalive requests. [Ryan Morgan <rmorgan covalent.net>]
-
- *) Correct Win32 failure of mmap of a segment beyond start of the
- file; fixes large SSL and similar transfers. [William Rowe]
- PR 9898
-
- *) Implement apr_proc_detach changes and allow -DNO_DETACH in the
- multi-process mode to not "daemonize" while detaching from the
- controlling terminal. This is necessary for Apache to work with
- process-management tools like AIX's "System Resource Controller"
- as well as Dan Bernstein's "daemontools".
- [Jos Backus <josb cncdsl.com>, Aaron Bannert]
-
- *) Convert mod_auth_digest to use the new apr_global_mutex_t
- type. [Aaron Bannert]
-
- *) fix bug in mod-include where it wouldn't send a unmatched
- part if it was at the end of a bucket [Ian Holsman]
-
- *) worker MPM: Improve logging of errors with the interface between
- the listener thread and worker threads. [Jeff Trawick]
-
- *) Some browsers ignore cookies that have been merged into a
- single Set-Cookie header. Set-Cookie and Set-Cookie2 headers
- are now unmerged in the http proxy before being sent to the
- client. [Graham Leggett]
-
- *) Fix a problem with proxy where each entry of a duplicated
- header such as Set-Cookie would overwrite and obliterate the
- previous value of the header, resulting in multiple header
- values (like cookies) going missing.
- [Graham Leggett, Joshua Slive]
-
- *) Add the server-limit and thread-limit values to the scoreboard
- for the sake of third-party applications.
- [Adam Sussman <myddryn vishnu.vidya.com>]
-
- *) Fix segfault when proxy recieves an invalid HTTP response [Ian Holsman]
-
- *) OS/390: Get make install to properly copy DSO modules.
- [Jeff Trawick]
-
- *) Win32: Fix bug in mod_status with displaying "Restart Time"
- and "Server uptime".
- [Bill Stoddard]
-
- *) Fix IPv6 name-based virtual hosts. [Jeff Trawick]
-
- *) Introduce AddOutputFilterByType directive. [Justin Erenkrantz]
-
- *) Fix DEBUG_CGI support in mod_cgi. PR 9670, 9671.
- [David MacKenzie <djm pix.net>]
-
- *) Fix incorrect check for script_in in mod_cgi. PR 9669.
- [David MacKenzie <djm pix.net>]
-
- *) Fix segfault and display error when SSLMutex file can not be
- created. [Adam Sussman <myddryn vishnu.vidya.com>]
-
- *) Add reference counting to mod_mem_cache cache objects to
- better manage removing objects from the cache.
- [Bill Stoddard]
-
- *) Change the verbage on the ScoreBoardFile in our default configs.
- Also change the default to be commented out (unspecified) so we
- get anonymous shared memory by default. [Aaron Bannert]
-
- *) Implement new ScoreBoardFile directive logic. This affects how
- we create the scoreboard's shared memory segment. If the directive
- is present, a name-based segment is created. If the directive is
- not present, first an anonymous segment is created, and if that
- fails, a name-based segment is created from a file of the name
- DEFAULT_SCOREBOARD. This gives third-party applications the
- ability to access our scoreboard. [Aaron Bannert]
-
- *) Allow mod_deflate to work with non-GET requests and properly send
- Content-Lengths. [Sander Striker <striker apache.org>]
-
- *) Fix ap_directory_merge() to correctly merge configs when there is
- no <Directory /> block. [Justin Erenkrantz, William Rowe]
-
- *) Remove spurious debug messsages that are normal under HTTP
- keep-alive logic. [Jeff Trawick, Justin Erenkrantz]
-
- *) Fix a bug in mod_cgid that would prevent proper shutdown death
- of the cgid process. [Aaron Bannert]
-
- *) Add signal handling back in to the worker MPM for the one_process
- (-X, -DDEBUG, -DONE_PROCESS) case. [Aaron Bannert]
-
- *) Performance: Reuse per-connection transaction pools in the
- worker MPM, rather than destroying and recreating them. [Brian Pane]
-
- *) Remove all signals from the worker MPM's child process. Instead,
- the parent uses the Pipe of Death for all communication with the
- child processes. [Ryan Bloom]
-
-Changes with Apache 2.0.32
-
- *) mod_negotiation: ForceLanguagePriority now uses 'Prefer' as the
- default if the directive is not specified. This mirrors older
- behavior without changes to the httpd.conf. [William Rowe]
-
- *) Win32: solve the win32 service problems in 2.0.31-alpha, by fixing
- the service, mpm and logging code, and bugs in apr_file_open_stderr
- and apr_file_dup2 functions. Win2K/XP services have no handles
- associated for stdin/out/err, which caused unpredictable behavior
- in the prior release. [William Rowe, Bill Stoddard]
-
- *) Win32: simplify the Application Event Log messages, since there isn't
- likely to be 'more information in the error log' before an error log
- has been opened. [William Rowe]
-
- *) Win32: substantial cleanup to the mpm_winnt code for legibility and
- to follow the program flow of other MPMs. [Ryan Bloom, William Rowe]
-
- *) Win32: apache -k shutdown now behaves like apache -k stop.
- [Bill Stoddard]
-
- *) Fix prefork to not kill the parent if a child hits a resource shortage
- on accept(). [Greg Ames]
-
- *) Fix seg faults that occur when what should be the httpd request line
- starts with \r\n followed by garbage. [Greg Ames]
-
- *) Allow statically linked support binaries with the new
- --enable-static-support flag, and enable this behavior in
- the binbuild script. Also add a new --enable-static-htdbm
- flag. [Aaron Bannert]
-
- *) Allow mod_autoindex to serve symlinks if permitted and attempt to
- do only one stat() call when generating the directory listings.
- [Justin Erenkrantz]
-
- *) Fix resolve_symlink to save the original symlink name if known.
- [Justin Erenkrantz]
-
- *) Be a bit more sane with regard to CanonicalNames. If the user has
- specified they want to use the CanonicalName, but they have not
- configured a port with the ServerName, then use the same port that
- the original request used. [Ryan Bloom and Ken Coar]
-
- *) In core_input_filter, check for an empty brigade after
- APR_BRIGADE_NORMALIZE(). Otherwise, we can get segfaults if a
- client says it will post some data but we get FIN before any
- data arrives. [Jeff Trawick]
-
- *) Not being able to bind to the socket is a fatal error. We should
- print an error to the console, and return a non-zero status code.
- With these changes, all of the Unix MPMs do that correctly.
- [Ryan Bloom]
-
- *) suexec: Allow HTTPS and SSL_* environment variables to be passed
- through to CGI scripts. PR 9163
- [Brian Reid <breid customlogic.com>,
- Zvi Har'El <rl math.technion.ac.il>]
-
- *) binbuild.sh: Make sure that we use the expat from our source
- tree so that there aren't any surprises on the target machine.
- [Jeff Trawick]
-
- *) mod_cgid: Add retry logic for when the daemon can't fork fast
- enough to keep up with new requests. Start using
- HTTP_SERVER_UNAVAILABLE instead of HTTP_INTERNAL_SERVER_ERROR
- when we can't talk to the daemon. [Jeff Trawick]
-
- *) apxs: LTFLAGS envvar can override default libtool options. Try
- "LTFLAGS=' ' apxs -c mod_foo.c" to see what libtool does under
- the covers. [Jeff Trawick]
-
- *) The Location: response header field, used for external
- redirect, *must* be an absoluteURI. The Redirect directive
- tested for that, but RedirectMatch didn't -- it would allow
- almost anything through. Now it will try to turn an abs_path
- into an absoluteURI, but it will correctly varf like Redirect
- if the final redirection target isn't an absoluteURI. [Ken Coar]
-
-Changes with Apache 2.0.31
-
- *) Create the scoreboard (in the parent) in a global pool context,
- so it survives graceful restarts. This fixes a SEGV during
- graceful restarts. [Aaron Bannert]
-
- *) Add a timeout option to the proxy code 'ProxyTimeout'
- [Ian Holsman]
-
- *) FTP directory listings are now always retrieved in ASCII mode.
- The FTP proxy properly escapes URI's and HTML in the generated
- listing, and escapes the path components when talking to the FTP
- server. It is now possible to browse the root directory by using
- a url like: ftp://user@host/%2f/ (ported from apache_1.3.24)
- Also, the last path component may contain wildcard characters
- '*' and '?', and if they do, a directory listing is created instead
- of a file retrieval. Example: ftp://user@host/httpd/server/*.c
- [Martin Kraemer]
-
- *) Added single-listener unserialized accept support to the
- worker MPM [Brian Pane]
-
- *) New Directive for mod_proxy: 'ProxyPreserveHost'. This passes
- the incoming host header through to the proxied server
- [Geoff <g.russell ieee.org>]
-
- *) New Directive Option for ProxyPass. It now can block a location
- from being proxied [Jukka Pihl <jukka.pihl entirem.com>]
-
- *) Don't let the default handler try to serve a raw directory. At
- best you get gibberish. Much worse things can happen depending
- on the OS. [Jeff Trawick]
-
- *) Change the pre_config hook to return a value. Modules can now emit
- an error message and then cause the server to quit gracefully during
- startup. This required a bump to the MMN. [Aaron Bannert]
-
- *) Fix some unix socket descriptor leaks in the handler side of
- mod_cgid (the part that runs in the server process). Whack a
- silly "close(-1)" in the handler too. [Jeff Trawick]
-
- *) Change the pre_mpm hook to return a value, so that scoreboard
- init errors percolate up to code that knows how to exit
- cleanly. This required a bump to the MMN. [Jeff Trawick]
-
- *) Add the socket back to the conn_rec and remove the create_connection
- hook. The create_connection hook had a design flaw that did not
- allow creating connections based on vhost info. [Bill Stoddard]
-
- *) Fixed PATH_INFO and QUERY_STRING from mod_negotiation results.
- Resolves the common case of using negotation to resolve the request
- /script/foo for /script.cgi/foo. [William Rowe]
-
- *) Added new functions ap_add_(input|output)_filter_handle to
- allow modules to bypass the usual filter name lookup when
- adding hard-coded filters to a request [Brian Pane]
-
- *) caching should now work on subrequests (still very experimental)
- [Ian Holsman]
-
- *) The Win32 mpm_winnt now has a shared scoreboard. [William Rowe]
-
- *) Change ap_get_brigade prototype to use apr_off_t instead of apr_off_t*.
- [Justin Erenkrantz]
-
- *) Refactor ap_rgetline so that it does not use an internal brigade.
- Change ap_rgetline's prototype to return errors. [Justin Erenkrantz]
-
- *) Remove mod_auth_db. [Justin Erenkrantz]
-
- *) Do not install unnecessary pcre headers like config.h and internal.h.
- [Joe Orton <joe manyfish.co.uk>]
-
- *) Change in quick_hanlder behavior for subrequests. it now passes DONE
- (as it does for a normal request). quick_handled sub-requests now work
- in mod-include [Ian Holsman]
-
- *) Change SUBREQ_CORE so that it is a 'HTTP_HEADER' filter instead of
- 'CONTENT' one, as it needs to run AFTER all content headers
-
- *) Rename BeOS MPM directive RequestsPerThread to MaxRequestsPerThread.
- [Lars Eilebrecht]
-
- *) Split out blocking from the mode in the input filters.
- [Justin Erenkrantz]
-
- *) Fix a segfault in mod_include. [Justin Erenkrantz, Jeff Trawick]
-
- *) Cause Win32 to capture all child-worker process errors in
- Apache to the main server error log, until the child can
- open its own error logs. [William Rowe]
-
- *) HPUX 11.*: Do not kill the child process when accept()
- returns ENOBUFS on HPUX 11.*. (ported from th 1.3 patch)
- [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>, Bill Stoddard]
-
- *) Fix a problem in the parsing of the <Proxy foo> directive.
- [Jeff Trawick]
-
- *) rewrite of mod_ssl input filter for better performance and less
- memory usage [Doug MacEachern]
-
- *) allow quick_handler to be run on subrequests. [Ian Holsman]
-
- *) mod_dav now asks its provider to place content directly into the
- filter stack when handling a GET request. The mod_dav/provider
- API has changed, so providers need to be updated. [Greg Stein]
-
- *) Clear the output socket descriptor in unixd_accept() to make sure
- we don't supply a bogus socket to the caller if the accept fails.
- This caused problems with the worker MPM, which tried to process
- the returned socket if it was non-NULL. [Brian Pane]
-
- *) Move a check for an empty brigade to the start of core input filter
- to avoid segfaults. [Justin Erenkrantz, Jeff Trawick]
-
- *) Add FileETag directive to allow configurable control of what
- data are used to form ETag values for file-based URIs. MMN
- bumped to 20020111 because of fields added to the end of
- the core_dir_config structure. [Ken Coar]
-
- *) Fix a segfault in mod_rewrite's logging code caused by passing the
- wrong config to ap_get_remote_host(). [Jeff Trawick]
-
- *) Allow mod_cgid to work from a binary distribution install by
- using 755 for the permissions on the log directory instead of
- 750. [Jeff Trawick]
-
- *) Fixed a segfault that happened during graceful shutdown (or when
- the httpd ran out of file descriptors) with the worker MPM [Brian Pane]
-
- *) Split all Win32 modules [excluding the core components mod_core,
- mod_so, mod_win32 and the winnt mpm] into individual loadable
- modules, so the administrator may individually disable the former
- compiled-in modules by simply commenting out their LoadModule
- directives. [William Rowe]
-
- *) Saved Win32 module authors and porters many future headaches, by
- duplicating the appropriate .h files such as os.h into the include
- directory, including in the build tree. [William Rowe]
-
- *) mod_ssl adjustments to help with using toolkits other than OpenSSL:
- Use SSL functions/macros instead of directly dereferencing SSL
- structures wherever possible.
- Add type-casts for the cases where functions return a generic pointer.
- Add $SSL/include to configure search path.
- [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>]
-
- *) Moved several pointers out of the shared Scoreboard so it is
- more portable, and will present the vhost name across server
- generation restarts. [William Rowe]
-
- *) Fix SSLPassPhraseDialog exec: and SSLRandomSeed exec:
- [Doug MacEachern]
-
-Changes with Apache 2.0.30
-
- *) Fix the main bug for FreeBSD and threaded MPM's. There are
- still issues (see STATUS) but at least the server will now
- run without crashing the machine.
- [David Reid, Aaron Bannert, Justin Erenkrantz]
-
- *) Fix a typo in mod_deflate's m4 config section.
- [albert chin <china thewrittenword.com>]
-
- *) Fix a couple of mod_proxy problems forwarding HTTP connections
- and handling CONNECT:
- (1) PR #9190 Proxy failed to connect to IPv6 hosts.
- (2) Proxy failed to connect when the first IP address returned by
- the resolver was unreachable but a secondary IP address was.
- [Jeff Trawick]
-
- *) Fix the module identifer as shown in the docs for various core
- modules (e.g., the identifer for mod_log_config was previously
- listed as config_log_module). PR #9338
- [James Watson <ap2bug sowega.org>]
-
- *) Fix LimitRequestBody directive by placing it in the HTTP
- filter. [Justin Erenkrantz]
-
- *) Fix mod_proxy seg fault when the proxied server returns
- an HTTP/0.9 response or a bogus status line.
- [Adam Sussman]
-
- *) Prevent mod_proxy from truncating one character off the
- end of the status line returned from the proxied server.
- [Adam Sussman, Bill Stoddard]
-
- *) Eliminate loop in ap_proxy_string_read().
- [Adam Sussman, Bill Stoddard]
-
- *) Provide $0..$9 results from mod_include regex parsing.
- [William Rowe]
-
- *) Allow mod-include to look for alternate start & end tags [Ian Holsman]
-
- *) Introduced the ForceLanguagePriority directive, to prevent
- returning MULTIPLE_CHOICES or NONE_ACCEPTABLE in some cases,
- when using Multiviews. [William Rowe]
-
- *) Fix a problem which prevented mod_cgid and suexec from working
- together reliably [Greg Ames]
-
- *) Remove the call to exit() from within mod_auth_digest's post_config
- phase. [Aaron Bannert]
-
- *) Fix a problem in mod_auth_digest that could potentially cause
- problems with initialized static data on a system that uses DSOs.
- [Aaron Bannert]
-
- *) Fix a segfault in the worker MPM that could happen during
- child process exits. [Brian Pane, Aaron Bannert]
-
- *) Allow mod_auth_dbm to handle multiple DBM types [Ian Holsman]
-
- *) Fix matching of vhosts by ip address so we find IPv4
- vhost address when target address is v4-mapped form of
- that address. [Jeff Trawick]
-
- *) More performance tweaks to the BNDM string-search algorithm
- used to find "<!--#" tokens in mod_include [Brian Pane]
-
- *) Miscellaneous small performance fixes: optimized away various
- string copy operations and removed large temp buffers from
- the stack [Brian Pane]
-
- *) Fixed startup segfault that occurred when a VirtualHost
- directive had a port but no address [Brian Pane]
-
- *) Allow htdbm to work with multiple DBM types [Ian Holsman]
-
- *) Win32: Made change to apr_sendfile() to return APR_ENOTIMPL
- if oslevel < WINNT. This should fix several problems reported
- Against 2.0.28 on Windows 98 [Bill Stoddard]
-
- *) Win32: Fix bug that could cause CGI scripts with QUERY_STRINGS
- to fail. [Bill Stoddard]
-
- *) Change core code to allow an MPM to set hard thread/server
- limits at startup. prefork, worker, and perchild MPMs now have
- directives to set these limits. [Jeff Trawick]
-
- *) Win32: The async AcceptEx() event should be autoreset upon
- successful completion of a wait (WaitForSingleObject). This
- eliminates a number of spurious
- setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed." messages.
- [Bill Stoddard]
-
- *) Move any load library path environment variables out of
- apachectl and into a separate environment variable file which
- can be more easily tailored by the admin. The environment
- variable file as built by Apache may have additional system-
- specific settings. For example, on OS/390 we tailor the heap
- settings to allow lots of threads. [Jeff Trawick]
-
- *) Use the new APR pool code to reduce pool-related lock
- contention in the worker MPM. [Sander Striker]
-
- *) The POD no longer assumes the child is listening on 127.0.0.1
- and now pulls the first hostname in the list of listeners to
- perform the dummy connect on. This fixes a bug when the user
- had configured the Listen directive for an IP other than
- 127.0.0.1. This would result in undead children and error
- messages such as "Connection refused: connect to listener".
- [Aaron Bannert]
-
- *) The worker MPM now respects the LockFile setting, needed to
- avoid locking problems with NFS. [Jeff Trawick]
-
- *) Fix segfault when worker MPM receives SIGHUP.
- [Ian Holsman, Aaron Bannert, Justin Erenkrantz]
-
- *) Fix bug that could potentially prevent the perchild MPM from
- working with more than one vhost/uid. [Aaron Bannert]
-
- *) Change make install and apxs -i processing of DSO modules to
- perform special handling on platforms where libtool doesn't install
- mod_foo.so. This fixes some wonkiness on HP-UX, Tru64, and AIX
- which prevented standard LoadModule statements from working.
- [Jeff Trawick]
-
- *) Whenever mod_so is enabled (not just when there are DSOs for
- our modules), do whatever special magic is required for compiling/
- loading third-party modules. This allows third-party DSOs to
- be used on an AIX build when there were no built-in modules
- built as DSOs. (This should help on OS/390 and BeOS as well.)
- [Jeff Trawick]
-
- *) Allow apxs to be used to build DSOs on AIX without requiring the
- user to hard-code the list of import files. (This should help
- on OS/390 and BeOS as well.) [Jeff Trawick]
-
- *) Resolved segfault in mod_isapi when configuring with ISAPICacheFile.
- PR 8563, 8919 [William Rowe]
-
- *) Get binary builds working when libapr and libaprutil are built
- shared [Greg Ames]
-
- *) Get shared builds of libapr and libaprutil, as well as Apache DSOs,
- working on AIX. [Aaron Bannert, Dick Dunbar <RLDunbar pacbell.net>,
- Gary Hook <ghook us.ibm.com>, Victor Orlikowski, Jeff Trawick]
-
- *) Fix the handling of SSI directives in which the ">" of the
- terminating "-->" is the last byte in a file [Brian Pane]
-
- *) Add back in the "suEXEC mechanism enabled (wrapper: /path/to/suexec)"
- message that we had back in apache-1.3 and still have scattered
- throughout our docs. [Aaron Bannert]
-
- *) Prevent the Win32 port from continuing after encountering an
- error in the command line args to apache. [William Rowe]
-
- *) On a error in the proxy, make it write a line to the error log
- [Ian Holsman]
-
- *) Various mod_ssl performance improvements [Doug MacEachern]
-
-Changes with Apache 2.0.29
-
- *) Add buffering in core_output_filter to ensure that long
- lists of small buckets don't cause small packet writes.
- [Brian Pane, Ryan Bloom]
-
- *) Fix the installation target to make sure that the manual is
- installed in the correct location.
- [Yoshifumi Hiramatsu <hiramatu boreas.dti.ne.jp> and
- Gomez Henri <hgomez slib.fr>]
-
- *) Fix the cmd command for mod_include. When we are processing
- a cmd command, we do not want to use the r->filename to set
- the command name. The command comes from the SSI tag. To do this,
- I added a variable to the function that builds the command line
- in mod_cgi. This allows the include_cmd function to specify
- the command line itself. [Ryan Bloom]
-
- *) Change open_logs hook to return a value, allowing you
- to flag a error while opening logs
- [Ian Holsman, Doug MacEachern]
-
- *) Change post_config hook to return a value, allowing you
- to flag a error post config
- [Ian Holsman, Jeff Trawick]
-
- *) Allow SUEXEC_BIN (the path to the suexec binary that is
- hard-coded into the server) to be specified to the configure
- script by the --with-suexec-bin parameter. [Aaron Bannert]
-
- *) Fix segv in worker MPM following accept on pipe-of-death
- [Brian Pane]
-
- *) Add mod_deflate to experimental.
- [Ian Holsman, Justin Erenkrantz]
-
- *) Bail out at configure time if an invalid MPM was specified.
- [jean-frederic clere <jfrederic.clere fujitsu-siemens.com>]
-
- *) Prevent segv in ap_note_basic_auth_failure() when no AuthName is
- configured [John Sterling <sterling covalent.net>]
-
- *) Fix apxs to use sbindir. [Henri Gomez <hgomez slib.fr>]
-
- *) Fix a problem with IPv6 vhosts. PR #8118 [Jeff Trawick]
-
- *) Optimization for the BNDM string-search function in
- mod_include. [Brian Pane]
-
- *) Fixed the behavior of the XBitHack directive.
- [Taketo Kabe <kabe sra-tohoku.co.jp>, Cliff Woolley] PR#8804
-
- *) The threaded MPM for Unix has been removed. Use the worker
- MPM instead. [various]
-
- *) APR-ize the resolver logic in mod_unique_id. This fixes a bug
- in logging the error from a failed DNS lookup. [Jeff Trawick]
-
- *) Added the missing macros AP_INIT_TAKE13 and AP_INIT_TAKE123.
- [Cliff Woolley]
-
- *) Get mod_cgid killed when a MPM exits due to a fatal error.
- [Jeff Trawick]
-
- *) Fix a file descriptor leak in mod_include. When we include a
- file, we use a sub-request, but we didn't destroy the sub-request
- immediately, instead we waited until the original request was
- done. This patch closes the sub-request as soon as the data is
- done being generated. [Brian Pane <bpane pacbell.net>]
-
- *) Allow modules that add sockets to the ap_listeners list to
- define the function that should be used to accept on that
- socket. Each MPM can define their own function to use for
- the accept function with the MPM_ACCEPT_FUNC macro. This
- also abstracts out all of the Unix accept error handling
- logic, which has become out of synch across Unix MPMs.
- [Ryan Bloom]
-
- *) Fix a bug which would cause the response headers to be omitted
- when sending a negotiated ErrorDocument because the required
- filters were attached to the wrong request_rec.
- [John Sterling <sterling covalent.net>]
-
- *) Remove commas from the end of the macros that define
- directives that are used by MPMs. Prior to this patch,
- you would use these macros without commas, which was unlike
- the macros for any other directives. Now, the caller provides
- the comma rather than the macro providing it. This makes
- the macros look more like the rest of the directives.
- [Ryan Bloom and Cliff Woolley]
-
- *) Add 'redirect-carefully' environment option to disable sending
- redirects under special circumstances. This is helpful for
- Microsoft's WebFolders when accessing a directory resource via
- DAV methods. [Justin Erenkrantz]
-
- *) Begin to abstract out the underlying transport layer.
- The first step is to remove the socket from the conn_rec,
- the server now lives in a context that is passed to the
- core's input and output filters. This forces us to be very
- careful when adding calls that use the socket directly,
- because the socket isn't available in most locations.
- [Ryan Bloom]
-
- *) Really reset the MaxClients value in worker and threaded
- when the configured value is not a multiple of the number
- of threads per child. We said we did previously but we
- forgot to. [Jeff Trawick]
-
- *) Add Debian layout. [Daniel Stone <daniel sfarc.net>]
-
- *) If shared modules are requested and mod_so is not available,
- produce a fatal config-time error. [Justin Erenkrantz]
-
- *) Improve http2env's performance by cutting the work it has to
- do. [Brian Pane <bpane pacbell.net>]
-
- *) use new 'apr_hash_merge' function in mod_mime (performance fix)
- [Brian Pane <bpane pacbell.net>]
-
-Changes with Apache 2.0.28
-
- *) Fix infinite loop in mod_cgid.c.
- [Dale Ghent <daleg elemental.org>, Brian Pane <bpane pacbell.net>]
-
- *) When no port is given in a "ServerName host" directive, the
- server_rec->port is now set to zero, not 80. That allows for
- run-time deduction of the correct server port (depending on
- SSL/plain, and depending also on the current setting of
- UseCanonicalName). This change makes redirections
- work, even with https:// connections. As in Apache-1.3, the
- connection's actual port number is never used, only the ServerName
- setting or the client's Host: setting. Documentation updated
- to reflect the change. [Martin Kraemer]
-
- *) Add a '%{note-name}e' argument to mod-headers, which works in
- the same way as mod_log_confg. [Ian Holsman]
-
- *) Fix the spelling of the AP_MPMQ_MIN_SPARE_DAEMONS and
- AP_MPMQ_MAX_REQUESTS_DAEMON macros in ap_mpm.h and all standard
- MPMs. [Cliff Woolley]
-
- *) Introduce htdbm, a user management utility for db/dbm authorization
- databases. [Mladen Turk <mturk mappingsoft.com>]
-
- *) Optimize usage of strlen and strcat in ap_directory_walk.
- [Brian Pane <bpane pacbell.net>]
-
-Changes with Apache 2.0.27
-
- *) Introduce an Apache mod_ssl initial configuration template
- (ssl.conf, generated from ssl-std.conf). [Ralf S. Engelschall]
-
- *) Fixed a memory leak in the getline parsing code that could
- be triggered by arbitrarily large header lines. Requests
- from the core input filter for single lines are now limited
- to HUGE_STRING_LEN (8192 bytes). [Aaron Bannert]
-
- *) Fix a truncation bug in how we print the port on the Via: header.
- The routine that prints the Via: header now takes a length for
- the port string. [Zvi Har'El <rl math.technion.ac.il>]
-
- *) Some syntax errors in mod_mime_magic's magic file can result
- in a 500 error, which previously was unlogged. Now we log the
- error. [Jeff Trawick]
-
- *) Add the support/checkgid helper app, which checks the run-time
- validity of group identifiers usable in the Group directive.
- [Ken Coar]
-
- *) Various --enable-so options have been fixed: --enable-so is
- treated as "static"; explicit --enable-so=shared issues an error;
- and explicit --enable-so fails with error on systems without
- APR_HAS_DSO. [Aaron Bannert]
-
- *) Fix a segfault in the core input filter when the client socket
- gets disconnected unexpectedly. [Cliff Woolley]
-
- *) Fix the reporting for child processes that die. This removes
- all of the non-portable W* macros from Apache.
- [Jeff Trawick and Ryan Bloom]
-
- *) Win32: Track and display "Parent Server Generation:" in
- mod_status output. The generation will be bumped at
- server graceful restart, when the child process exits
- by hitting MaxRequestsPerChild or if the child
- process exits abnormally. [Bill Stoddard]
-
- *) Win32: Fix problem where MaxRequestsPerChild directive was
- not being picked up in favor of the default. Enable
- the parent to start up a new child process immediately upon
- the old child starting shutdown.
- [Bill Stoddard]
-
- *) Fix some bungling of the remote port in rfc1413.c so that
- IdentityCheck retrieves the proper user id instead of failing
- and thus always returning "nobody."
- [Dick Streefland <Dick.Streefland xs4all.nl>]
-
- *) Introduced thread saftey for mod_rewrite's internal cache.
- [Brian Pane <bpane pacbell.net>]
-
- *) Simplified mod_env's directives to behave as most directives are
- expected, in that UnsetEnv will not unset a SetEnv and PassEnv
- directive following that UnsetEnv within the same container.
- Also provides a runtime startup warning if a PassEnv configured
- environment value is undefined. [William Rowe]
-
- *) The worker MPM is now completely ported to APR's new lock API. It
- uses native APR types for thread mutexes, cross-process mutexes,
- and condition variables. [Aaron Bannert]
-
- *) Sync up documentation to remove all references to the now deprecated
- Port directive. [Justin Erenkrantz]
-
- *) Moved all ldap modules from the core to httpd-ldap sub-project
- [Ryan Bloom]
-
- *) Exit when we can't listen on any of the configured ports. This
- is the same behavior as 1.3, and it avoids having the MPMs to
- deal with bogus ap_listen_rec structures. [Jeff Trawick]
-
- *) Cleanup the proxy code that creates a request to the origin
- server. This change adds an optional hook, which allows modules
- to gain control while the request is created if the proxy module
- is loaded. The purpose of this hook is to allow modules to add
- input and/or output filters to the request to the origin. While
- I was at it, I made the core use this hook, so that proxy request
- creation uses some of the code from the core. This can still be
- greatly improved, but this is a good start. [Ryan Bloom]
-
-Changes with Apache 2.0.26
-
- *) Port the MaxClients changes from the worker MPM to the threaded
- MPM. [Ryan Bloom]
-
- *) Fix mod_proxy so that it handles chunked transfer-encoding and works
- with the new input filtering system. [Justin Erenkrantz]
-
- *) Introduce the MultiviewsMatch directive, to allow the operator
- to be flexible in recognizing Handlers and Filters filename
- extensions as part of the Multiviews matching logic, strict with
- MultiviewsMatch NegotiatedOnly to accept only filename extentions
- that designate negotiated parameters, (content type, charset, etc.)
- or MultiviewsAll for the 1.3 behavior of matching any files, even
- if they have unregistered extensions. [William Rowe]
-
- *) Fixed the configure script to add a LoadModule directive to
- the default httpd.conf for any module that was compiled
- as a DSO. [Aaron Bannert <aaron clove.org>]
-
- *) rewrite mod_ssl input filtering to work with the new input filtering
- system. [Justin Erenkrantz]
-
- *) prefork: Don't segfault when we are able to listen on some but
- not all of the configured ports. [Jeff Trawick]
-
- *) Build mod_so even if no core modules are built shared.
- [Aaron Bannert <aaron clove.org>]
-
- *) Introduce ap_directory_walk rewrite (with further optimizations
- required) to adapt to the ap_process_request_internal() changes.
- Optimized so subrequests and redirects now reuse previous section
- merges, until we mismatch with the original directory_walk, and
- precomputed r->finfo results will cause directory_walk to skip
- the most expensive phases of the function. [William Rowe]
-
- *) Allow ApacheMonitor to connect to and control Apache on other
- WinNT/2K machines. [Mladen Turk <mturk mappingsoft.com>]
-
- *) Remove the Port directive. In it's place, the Listen directive
- is now a required directive, which tells Apache what port to
- listen on. The ServerName directive has also been extended
- to accept an optional port. If the port is specified to the
- ServerName, the server will report that port whenever it
- reports the port that it is listening on. This change was
- made to ease configuration errors that stem from having a Port
- directive, and a Listen directive. In that situation, the server
- would only listen to the port specified by the Listen command,
- which caused a lot of confusion to users. [Ryan Bloom]
-
- *) Added mod_mime_magic, mod_unique_id and mod_vhost_alias to the Win32
- build, as loadable modules. [William Rowe]
-
- *) Fix --enable-mods-shared processing. If most is specified,
- then all modules that can be compiled as shared modules are.
- [Aaron Bannert <aaron clove.org>]
-
- *) Update the mime.types file to map video/vnd.mpegurl to mxu
- and add commonly used audio/x-mpegurl for m3u extensions.
- [Heiko Recktenwald <uzs106 uni-bonn.de>, Lars Eilebrecht]
-
- *) Eliminate the depreciated r->content_language, in favor of the array
- r->content_languages introduced many years ago. Module authors must
- substantially overhaul their modules, so this needs to be upgraded
- if the module still relied on backwards-brokeness. [William Rowe]
-
- *) Allow configure help strings to work with autoconf 2.50+ and 2.13.
- [Justin Erenkrantz]
-
- *) Rewrite the input filtering mechanisms to consolidate and reorganize
- code. In short, core_input_filter does something now and
- ap_http_filter is now only concerned with HTTP. [Justin Erenkrantz]
-
- *) Update the Win32 build to re-absorb mod_proxy and family.
- [William Rowe]
-
- *) Resolved the build failure on Win32 using MSVC 5.0 (without the
- current SDK.) [William Rowe]
-
- *) Some style changes to the code that does ProxyErrorOverride. Fixed
- config merge behaviour. [Graham Leggett]
-
- *) Allow support programs to be compiled against a static version
- of libapr. This allows the smaller support programs to be
- relocated. [Aaron Bannert <aaron clove.org>]
-
- *) Update the mime.types file to the registered media types as
- of 2001-09-25, and add mapping for xsl extension [Mark Cox]
-
- *) Fix MaxClients in the Worker MPM, so that it specifies the maximum
- number of clients that can connect at the same time, instead of
- specifying the maximum number of child processes.
- [Aaron Bannert <aaron clove.org>]
-
- *) Switch proc_pthread AcceptMutex configuration directive to pthread to
- be consistent with 1.3. [Justin Erenkrantz]
-
- *) Cache apr_explode_localtime() value for 15 seconds.
- [Brian Pane <bpane pacbell.net>]
-
- *) Fix mod_include to not return ETag or Last-Modified headers.
- [Ian Holsman <ianh cnet.com>]
-
- *) Fix worker MPM's scoreboard logic. [Aaron Bannert <aaron clove.org>]
-
- *) Eliminate the wasteful run-time conversion of method names from strings
- to numbers in places where the methods are known at compile time.
- [Brian Pane <bpane pacbell.net>]
-
- *) Turn the worker MPM's queue into a LIFO. This may
- improve cache-hit performance under some conditions.
- [Aaron Bannert <aaron clove.org>]
-
- *) Switch back to SIGUSR1 for graceful restarts on all platforms that
- support it. [Justin Erenkrantz]
-
- *) Cleanup the worker MPM. We no longer re-use transaction
- pools. This incurs less overhead than shuffling the pools
- around so that they can be re-used. Remove one of the
- queue's condition variables. We just redefined the API to
- state that you can't try to add more stuff than you allocated
- segments for. [Aaron Bannert <aaron clove.org>]
-
- *) Fix SSL VPATH builds [Cody Sherr <csherr covalent.net>]
-
- *) Fixed persistent connections when a request contains a body.
- [Greg Stein]
-
- *) mod_dav uses a new API to speak to the backend provider for dead
- property management. [Greg Stein]
-
- *) Remove the Win32 script-processing exception from mod_cgi, and
- roll build_command_line/build_argv_list into a unified, overrideable
- ap_cgi_build_command optional function. [William Rowe]
-
- *) Rewrite find_start_sequence to use a better search algorithm
- to find the start tag. [Justin Erenkrantz]
-
- *) Fix a seg fault in mod_include. When we are generating an
- internal redirect, we must set r->uri to "", not a bogus
- string, and not NULL. [Ryan Bloom]
-
- *) Optimized location_walk, so subrequests, redirects and second passes
- now reuse previous section merges on a <Location > by <Location >
- basis, until we mismatch with the original location_walk.
- [William Rowe]
-
- *) Back out the 1.45 change to util_script.c. This change made
- us set the environment variable REQUEST_URI to the redirected
- URI, instead of the originally requested URI.
- [Taketo Kabe <kabe sra-tohoku.co.jp>]
-
- *) Make mod_include do lazy evaluation of potentially expensive to
- compute variables. [Brian Pane <bpane pacbell.net>]
-
- *) Fix logging of bytes sent for HEAD requests. %b and %B should
- log either - or 0, before this patch, they were both logging
- the file size. [Taketo Kabe <kabe sra-tohoku.co.jp>]
-
- *) Make mod_include check for BYTE_CHECK_THRESHOLD per bucket rather
- than per character. [Brian Pane <bpane pacbell.net>]
-
- *) Normalize the primary request, redirects and sub-requests to
- run the same ap_process_request_internal for consistency in
- robustness, behavior and security. [William Rowe]
-
- *) Fix a segfault with mod_include when r->path_info is not set
- (which is the case with mod_proxy). [Ian Holsman <ianh cnet.com>]
-
- *) Add -X functionality back. This indicates to all MPMs and any other
- part of Apache that it should run in "debug" mode. [Justin Erenkrantz]
-
- *) Some initial support for the cygwin platform [prefork only].
- This is not to be confused with support for the WinNT/Win32
- platform, which is the recommended configuration for native
- Win32 users. The cygwin platform support is recommended for
- cygwin platform users. [Stipe Tolj <tolj wapme-systems.de>]
-
- *) Changed syntax of Set{Input|Output}Filter. The list of filters
- must be semicolon delimited (if more than one filter is given.)
- The Set{Input|Output}Filter directive now overrides a parent
- container's directive (e.g. SetInputFilter in <Directory /web/foo>
- will override any SetInputFilter directive in <Directory /web>.)
- This new syntax is more consistent with Add{Input|Output}Filter
- directives defined in mod_mime. Also cures a bug in prior releases
- where the Set{Input|Output}Filter directive would corrupt the
- global configuration if the multiple directives were nested.
- [William Rowe]
-
- *) Cured what's ailed mime for quite some time. If an AddSomething
- was given in the configuration (Language, Charset, Handler or
- Encoding) Apache would set the content type as given by AddType,
- but refused to check the mime.types file if AddType wasn't given
- for that specific extension. Setting the AddHandler for .html
- without setting the AddType text/html html would cause Apache to
- use the default content type. [William Rowe]
-
- *) Added some bulletproofing to memory allocation in the LDAP cache
- code. [Graham Leggett]
-
-Changes with Apache 2.0.25
-
- *) Move the installed /manual directory out of the /htdocs/ tree, so
- that it can be kept more independently from the remaining document
- root. The "Alias /manual ..." already allowed for easy projection
- into existing private document trees. [Martin Kraemer]
-
- *) Add specified user attributes to the environment when using
- mod_auth_ldap. This allows you to use mod_include to embed specified
- user attributes in a page like so:
- Hello <!--#echo var="AUTHENTICATE_CN"-->, how are you?
- [Graham Leggett]
-
- *) Fix a performance problem with the worker MPM. We now create
- transaction pools once, and re-use them for each connection.
- [Aaron Bannert <aaron clove.org>]
-
- *) Modfied mod_mime to prevent mod_negotation from serving a multiview
- of a 'handler' or 'filter', so that any filename extension that does
- not contribute to the negotiated metadata can't be served without
- an explicit request. E.g., if the .Z extension is associated with
- an unzip filter, the user request somefile.Z.html, mod_negotiation
- won't serve it. It can serve somefile.Z.html when somefile.Z is
- requested, since the .Z extension is explictly requested, if the
- .html extension is associated with ContentType text/html.
- [William Rowe]
-
- *) Introduce the AddInputFilter filter[;filter...] ext [ext...]
- and corresponding AddOutputFilter syntax, to insert one or more
- filters by mod_mime filename extension processing.
- [William Rowe]
-
- *) Fix a growing connection pool in core_output_filter() for
- keepalive requests. [Jeff Trawick]
-
- *) Moved split_and_pass_pretag_buckets back to being a
- macro at Ryans's request. Removed the return from it
- by setting and returning a return code instead. Updated
- the code to check the return code from the macro and
- do the right thing. [Paul J. Reder]
-
- *) Fix a segfault when a numeric value was received for Host:.
- [Jeff Trawick]
-
- *) Add a function ap_remove_input_filter. This is to match
- up with ap_remove_output_filter. [Ryan Bloom]
-
- *) Clean up location_walk, so that this step performs a minimum
- amount of redundant effort (it must be run twice, but it will no
- longer reparse all <Location > blocks when the request uri
- hadn't changed.) [William Rowe]
-
- *) Eliminate proxy: (and all other 'special') processing from the
- ap_directory_walk() phase. Modules that want to use special
- walk logic should refer to the mod_proxy map_to_location example,
- with it's proxy_walk and proxysection implementation. This makes
- either directory_walk flavor much more legible, since that phase
- only runs against real <Directory > blocks.
- [William Rowe]
-
- *) SECURITY: Fix a security problem in mod_include which would allow
- an SSI document to be passed to the client unparsed.
- [Cliff Woolley, Brian Pane]
-
- *) Introduce the map_to_storage hook, which allows modules to bypass
- the directory_walk and file_walk for non-file requests. TRACE
- shortcut moved to http_protocol.c as APR_HOOK_MIDDLE, and the
- directory_walk/file_walk happen as APR_HOOK_VERY_LAST in core.c.
- [William Rowe]
-
- *) Add the ability for mod_include to add the INCLUDES filter
- if the file is configured for the server-parsed handler.
- This makes the configuration for .shtml files much easier
- to understand, and allows mod_include to honor Apache 1.3
- config files. Based on Doug MacEachern's patch to PHP
- to do the same thing. [Ryan Bloom]
-
- *) force OpenSSL to ignore process local-caching and to always
- get/set/delete sessions using mod_ssl's callbacks
- [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>,
- Geoff Thorpe <geoff geoffthorpe.net>]
-
- *) Make the worker MPM shutdown and restart cleanly. This also
- cleans up some race conditions, and gets the worker using
- pools more cleanly. [Aaron Bannert <aaron clove.org>]
-
- *) Implement CRYPTO_set_locking_callback() in terms of apr_lock
- for mod_ssl
- [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>]
-
- *) Fix for mod_include. Ryan's patch to check error
- codes put a return in the wrong place. Also, the
- include handler return code wasn't being checked.
- I don't like macros with returns, so I converted
- SPLIT_AND_PASS_PRETAG_BUCKETS into a function.
- [Paul J. Reder <rederpj raleigh.ibm.com>]
-
- *) fix segv in mod_mime if no AddTypes are configured
- [John Sterling <sterling covalent.net>]
-
- *) Enable ssl client authentication at SSL_accept time
- [Madhusudan Mathihalli <madhusudan_mathihalli hp.com>]
-
- *) Fix a segfault in mod_include when the original request has no
- associated filename (e.g., we're filtering the error document for
- a bad URI). [Jeff Trawick]
-
- *) Fix a storage leak (a strdup() call) in mod_mime_magic. [Jeff Trawick]
-
- *) The prefork and OS/2 MPMs are overwriting the pid file when a second copy
- of httpd is started and shuts down due to socket conflict. Moving the
- call to ap_log_pid solves the problem.
-
- *) Changed the late-1.3 log_config substitution %c to %X, to log the
- status of the closed connection, as it conflicts with the far more
- common, historical ssl logging directive %...{var}c. [William Rowe]
-
- *) Added the common error/ tree to the build/install targets
- (similar to the common icons/ tree) for the multi-language error
- messages that Lars committed earlier. [William Rowe]
-
- *) Added a multi process, multi threaded OS/2 MPM mpmt_os2. [Brian Havard]
-
- *) Added a default commented-out mod_ldap and mod_auth_ldap
- configuration to httpd-std.conf and httpd-win.conf
- [Graham Leggett]
-
- *) Added documentation for mod_ldap and mod_auth_ldap.
- [Graham Leggett]
-
- *) Enabled negative caching on attribute comparisons in the LDAP cache.
- Fixed a problem where the default cache TTL was set in milliseconds
- not microseconds causing the cache to time out almost immediately.
- [Graham Leggett]
-
- *) Fixed all the #if APR_HAS_SHARED_MEMORY checks within the LDAP
- module code to follow APR. [Graham Leggett]
-
- *) Fixed LDAP cleanup on graceful restarts. LDAP connections are now
- cleaned up when the connection pool pool is cleaned up.
- [Graham Leggett]
-
- *) Fix a minor issue with Jeff Trawick's mod_include
- patch. Without this patch, the code will just allocate
- more bytes in get_combined_directive than are needed.
- [Paul Reder]
-
- *) Added the LDAP authentication module mod_auth_ldap.
- [Dave Carrigan <dave rudedog.org>, Graham Leggett]
-
- *) Added the LDAP cache and connection pooling module mod_ldap.
- [Dave Carrigan <dave rudedog.org>, Graham Leggett]
-
- *) Fix --enable-modules=all breakage with mod_auth_db and mod_auth_digest
- by allowing a module to disable itself if its prerequisites are not
- met. [Justin Erenkrantz]
-
-Changes with Apache 2.0.24
-
- *) Fix a couple of issues in mod_include when the tag appeared at
- offsets near 8192 in the file being parsed. [Jeff Trawick]
-
- *) Fix an assertion failure in mod_ssl when the keepalive timeout is
- reached. [Jeff Trawick]
-
- *) Numerous improvements to the Win32 build system. Introduced command line
- builds without requiring .mak files for MSVC 6.0 and later versions.
- Improved .dsp file compatibility for both Visual Studio 5.0 and 6.0 users.
- [William Rowe]
-
- *) Assorted corrections and improvements to the winnt_mpm startup code. Better
- reporting of uninstalled services and other error conditions, and changed the
- default service name to Apache2. [William Rowe]
-
- *) Numerous improvements to the Win32 ApacheMonitor utility, including winnt_mpm
- compatibility with existing Apache 1.3 Win32 Apache management utilites.
- [Mladen Turk <mturk mappingsoft.com>, William Rowe]
-
- *) Fixed the segfaults in mod_mime introduced by hash tables in 2.0.20.
- [William Rowe, Greg Ames]
-
- *) Rounded out the mod_mime Add/Remove pairs by adding RemoveLanguage
- and RemoveCharset directives. [William Rowe]
-
- *) The Unix MPMs other than perchild now allow child server
- processes to use the accept mutex when starting as root and
- using SysV sems for the accept mutex. Previously, this
- combination would lead to fatal errors in the child server
- processes. perchild can't use SysV sems because of security
- issues. [Jeff Trawick, Greg Ames]
-
- *) Added Win32 revision stamp resources to all http binaries
- (including modules/ and support/ tools.) PR7322 [William Rowe]
-
- *) Fix ap_rvprintf to support more than 4K of data at one time.
- [Cody Sherr <csherr covalent.net>]
-
- *) We have always used the obsolete/deprecated Netscape syntax
- for our tracking cookies; now the CookieStyle directive
- allows the Webmaster to choose the Netscape, RFC2109, or
- RFC2965 format. The new CookieDomain directive allows the
- setting of the cookie's Domain= attribute, too. PR #s 5006,
- 5023, 5920, 6140 [Ken Coar]
-
- *) Tweak server/Makefile so that the rules for generating exports.c
- are compatible with make utilities which don't expand wildcards
- in a dependency list (e.g., OS/390 make, certain levels of GNU
- make). [Jeff Trawick]
-
- *) Install the SSL headers. [John Sterling <sterling covalent.net>]
-
- *) Begin to sanitize the MPM configuration directives. Now, all
- MPMs use the same functions for all common MPM directives. This
- should make it easier to catch all bugs in these directives once.
- [Cody Sherr <csherr covalent.net>]
-
- *) Close a major resource leak. Every time we had issued a
- graceful restart, we leaked a socket descriptor.
- [Ryan Bloom]
-
- *) Fix a problem with the new method code. We need to cast
- the 1 to an apr_int64_t or it will be treated as a 32-bit
- integer, and it will wrap after being shifted 32 times.
- [Cody Sherr <csherr covalent.net> and Ryan Morgan <rmorgan covalent.net>]
-
- *) Fix a bug in mod_expires. Previous to this patch, if you
- told mod_expires to add 604800 seconds to the last-modified
- time, it actually added 604800 usec's to the last-modified time,
- so that when looking at the response it looked like nothing
- had been done. The root of the problem was that we always compute
- time in usec's, but we ask users to input sec's. This means we
- need to convert to usec's before using those values.
- [Ryan Bloom]
-
- *) The worker MPM now handles shutdown and restart requests. It
- definitely isn't perfect, but we do stop the servers correctly.
- The biggest problem right now is that SIGHUP causes the server to
- just die. [Ryan Bloom]
-
-Changes with Apache 2.0.23
-
- *) Use the prefork MPM by default on Unix. [various]
-
- *) Added a systray icon monitor application for Win32.
- [Mladen Turk <mturk mappingsoft.com>]
-
- *) mod_rewrite: Fix the line ending on some non-Unix systems for
- messages written to the rewrite log.
- [Richard Labennett <rlabenn us.ibm.com>]
-
- *) All mod_autoindex query parsing is now quietly quashed with the
- IndexOption IgnoreClient. The IndexOption SuppressColumnSorting
- still drops the column sort <a href>'s for the column headers, but
- IgnoreClient is required to ignore these Query options entirely.
- [William Rowe]
-
- *) Introduced new mod_autoindex query argument parsing for F=[0|1|2]
- to allow the client to select plain, FancyIndexing or HTMLTable
- formatting, V=[0|1] to inhibit or enable version sorting, and
- P=pattern to return only specific files. The old Query Arguments
- were reorganized as C=f for sorting column 'f' (same N, D, S, or M
- as before), and O=A|D for ordering ascending or descending.
- [William Rowe]
-
- *) Fixed an error in mod_include's directive parsing routines which
- caused #if, #elif, and #else expressions containing backslashes
- to be improperly evaluated. [Cliff Woolley]
-
- *) Introduced new mod_autoindex IndexOptions flags: SuppressIcon to
- drop the icon column, SuppressRules to drop the <hr> elements,
- and HTMLTable to create rudimentary HTML table listings (implies
- FancyIndexing). [William Rowe]
-
- *) Re-introduced the mod_autoindex IndexOptions flag TrackModified
- from Apache 1.3.15. This is needed for two reasons, first, given
- multiple machines within a server farm, ETags and Last-Modified
- stamps won't correspond from machine to machine, and second, many
- Unixes don't capture changes to the date or time stamp of existing
- files, since these don't modify the dirent itself. [William Rowe]
-
- *) Re-introduced the mod_autoindex IndexOptions flag FoldersFirst
- and DirectoryWidth options from Apache 1.3.10.
- [William Rowe, Ken Coar]
-
- *) Eliminated FancyIndexing directive, deprecated early in Apache
- 1.3 by the IndexOptions FancyIndexing syntax. [William Rowe]
-
- *) mod_autoindex now excludes any file names that would result in
- an error, other than a success or redirect. Also optimized
- the parent directory, always included except in the URI '/'.
- [William Rowe]
-
- *) Refactored mod_negotiation and mod_mime to help mod_dir accept
- negotiated index pages, and prevent the server from defaulting
- to an autoindex of the directory. mod_negotiation will now die
- with a 500 Internal Error if it could match some filenames
- (e.g. for mod_dir) but none can be served. mod_negotation now
- refuses to serve any file with an extention that mod_mime doesn't
- recognize, and wasn't part of the request. [William Rowe]
-
- *) Eliminate mod_cgi's handling of .exe files without the .exe file
- extension. This is already handled by multiviews, if the admin
- wishes to AddHandler .exe or define a content type handler and
- associate .exe files with that content type. Multiviews must be
- enabled to allow these to be served. [William Rowe]
-
- *) Speed up the server's response to a spike in incoming workload
- or restarts by assigning empty scoreboard slots to new processes
- when they are available. [Greg Ames]
-
- *) Add a handler to mod_includes.c. This handler is designed to
- implement the XbitHack directive. This can't be done with a
- fixup, because we need to check the content-type, which is
- only available in the handler phase. [Ryan Bloom]
-
- *) Make the includes filter check return codes from filters lower in
- the filter chain. If a lower level filter returns an error, then
- the request needs to stop immediately. This allows mod_include to
- stop parsing data once a lower filter recognizes an error.
- [Ryan Bloom]
-
- *) Add the ability to extend the methods that Apache understands
- and have those methods <limit>able in the httpd.conf. It uses
- the same bit mask/shifted offset as the original HTTP methods
- such as M_GET or M_POST, but expands the total bits from an int to
- an ap_int64_t to handle more bits for new request methods than
- an int provides. [Cody Sherr <csherr covalent.net>]
-
- *) Fix broken mod_mime behavior in merging its arguments. Possible
- cause of unexplicable crashes introduced in 2.0.20. [William Rowe]
-
- *) Solve many mod_ssl porting issues (too many to detail) with
- help from the whole team, but most notably [Ralf S. Engelschall,
- Madhusudan Mathihalli <madhusudan_mathihalli hp.com>,
- Doug MacEachern, William Rowe, Cliff Woolley]
-
- *) More stall fixes for the threaded & worker mpm's.
- Make mod_status output more accurate. Don't
- count workers in processes which aren't actively
- serving requests. [Greg Ames]
-
- *) Win32: Get SSI exec cgi tag working. [Bill Stoddard]
-
- *) Add a single listener/multiple worker MPM. This MPM is
- definately not fully correct, but it allows us to solve many
- of the problems that exist in the threaded MPM. This is a
- modified version of the threaded MPM. [Ryan Bloom]
-
- *) Improve content generation throughout Apache, providing closer
- compliance with HTML 3.2, HTML 4.01 Transitional and XHTML 1.0
- Transitional specifications. [William Rowe]
-
-Changes with Apache 2.0.22
-
- *) Fix a problem where the threaded MPM stalls after restarts or
- segfaults. Also prevent multiple active processes from using
- the same scoreboard slot. [Greg Ames]
-
- *) Apache/Win32 now fills in the service description with Apache's
- server version string, including loaded and advertised modules.
- [William Rowe]
-
- *) Improved support for the Win32 build, to recover gracefully from
- missing apr or apr-util directories or the awk interpreter,
- create the proper cgi-bin examples, including a test-cgi.bat, and
- fix the perl shebang line for printenv.pl, when installing from
- the build environment. [William Rowe]
-
- *) Fix a segfault in threaded.c caused by passing uninitialized
- apr_thread_t * to apr_thread_join(). [Jeff Trawick]
-
- *) Use new APR number conversion functions to reduce CPU consumption
- when setting the content length, and in mod_log_config.
- [Brian Pane]
-
- *) Fix problem reported by Taketo Kabe <kabe sra-tohoku.co.jp>
- where HEAD response headers were being repeated twice for
- files greater than 32K bytes (4*AP_MIN_BYTES_TO_WRITE). This
- problem in the http_header filter was exposed by the recent rewrite
- of the content_length filter. [Taketo Kabe, Bill Stoddard]
-
- *) Fix seg faults in mod_status with ExtendedStatus enabled, after
- restarts. A garbage pointer to a vhost's server_rec from the
- previous generation was being left around under certain
- conditions. [Greg Ames]
-
- *) Fix a cosmetic problem with mod_include. Non-existant SSI vars
- used to appear as '(none', without the closing paren.
- [Günter Knauf <eflash gmx.net>]
-
- *) Improve the exports generating awk script. In the past, we had
- work around problems in the awk script by avoiding some #if and
- #ifdefs. This has bitten us many times in generating the exports.c
- file. This improvement allows corrects the header file parsing.
- [Sander Striker <striker apache.org>]
-
-Changes with Apache 2.0.21
-
- *) Resolve the Win32 htpasswd bug, where a file that existed would be
- overwritten, regardless of the -c flag.
- [William Rowe, Mladen Turk <mladen.turk mail.inet.hr>]
-
- *) Introduce connection sub-pools into ab. Truncating the lifetime
- of these allocations means that ab no longer perpetually grows
- its working set, running out of memory on large request attempts.
- [William Rowe]
-
- *) Make scoreboard creation a hook. This allows management
- modules to have access to the scoreboard at the time that it is
- created, and at every restart request.
- [Cody Sherr <csherr covalent.net>]
-
- *) Changed AP_MPMQ_MAX_DAEMONS to refer to MaxClients and
- added an AP_MPMQ_MAX_DAEMON_USED to refer to the highest
- daemon index actually used in the scoreboard. I also
- updated the pertinent calls. [Paul J. Reder]
-
- *) Win32: Prevent listening sockets from being inherited by
- the Apache child process, CGI scripts, rotatelog process
- etc. If the Apache child process segfaults, any processes
- that the child started are not reaped. Prior to this fix,
- these processes inherited the listening sockets which sometimes
- prevented the restarted Apache child process from accepting
- connections (ie, the server would hang).
- [Bill Stoddard]
-
- *) Provide vhost and request strings when ExtendedStatus is on.
- [Greg Ames]
-
- *) Fix some issues with the pod and prefork: check the pod *after*
- processing a connection so that a server processing a time-
- consuming request bails out as soon as practical; when the
- parent process wakes up a server process via connect(), use an
- APR timeout on the connect() so that we don't hang for a long
- time if there aren't server processes around to do accept().
- [Jeff Trawick, Greg Ames]
-
- *) Performance improvement to mod_mime.c. find_ct() in mod_mime,
- spends a lot of time in apr_table_get calls. Using the default
- httpd.conf, the tables for languages and charsets are somewhat
- large, so the time spent scanning them on each request is
- significant. Replacing the tables with hash tables provides
- a nice speedup. [Brian Pane <bpane pacbell.net>]
-
- *) Add two functions to allow modules to access random parts of the
- scoreboard. This allows modules compiled for one MPM to access the
- scoreboard, even if it the server was compiled for another MPM.
- [Harrie Hazewinkel <harrie covalent.net>]
-
-Changes with Apache 2.0.20
-
- *) Fix problem in content-length filter where the filter would
- buffer all the output from a CGI before sending any bytes
- down the filter stack to the network. This problem would cause
- significant memory consumption if the CGIs generated
- lots of bytes. [Bill Stoddard]
-
- *) Get non-blocking CGI pipe reads working with the bucket brigades.
- [Bill Stoddard]
-
- *) Fix seg fault on Windows when serving files cached with mod_file_cache.
- [Bill Stoddard]
-
- *) Fix a bug in the threaded MPM that would cause it to kill off all
- workers immediately after starting if the number of workers started
- was above a certain threshold. [Ryan Bloom, Bill Stoddard]
-
-Changes with Apache 2.0.19
-
- *) Fix problem with threaded MPM. The problem was that if each child
- process was busy serving a single long-lived request and the server
- was sent a graceful restart signal, the server would stop serving
- requests. This would happen because each child process would wait to
- die until the last thread was done, and the parent wouldn't spawn any
- new children until a process died. Now, the parent looks at the fact
- that the children are dying gracefully, and starts new children.
- Those new children only start enough threads to compliment the number
- of threads in the other child process that shares the same spot in
- the scoreboard. In this way, we make sure to never go over
- MaxClients. [Ryan Bloom]
-
- *) modified mod_negotiation and mod_autoindex to speed up by almost a
- factor of two on apr_dir_read()-enhanced platforms, such as Win32
- and OS2, by calling ap_sub_request_lookup_dirent() with the results
- already provided by apr_dir_read(). [William Rowe]
-
- *) mod_file_cache is now more robust to filtering and serves requests
- slightly more efficiently. [Cliff Woolley]
-
- *) Fix problem handling FLUSH bucket in the chunked encoding filter.
- Module was calling ap_rwrite() followed by ap_rflush() but the
- served content was not being displayed in the browser. Inspection
- of the output stream revealed that the first data chunk was
- missing the trailing CRLF required by the RFC. [Bill Stoddard]
-
- *) apxs no longer generates ap_send_http_header() in the example handler
-
- *) Fix an ab problem which could cause a divide-by-zero exception
- with certain invocations (e.g., ab -k -c 6 -n 100 localhost/).
- [Ian Holsman <ianh cnet.com>]
-
- *) Solve case-insensitive platforms' confusion about negotiated
- filenames, allowing files of differnt case to match in choosing
- the document to serve. [William Rowe]
-
- *) Fix brokenness when ThreadsPerChild is higher than the built-in
- limit. We left ap_threads_per_child at the higher value which
- led to segfaults when doing certain scoreboard operations.
- [Jeff Trawick]
-
- *) Fix seg faults and/or missing output from mod_include. The
- default_handler was using the subrequest pool for files and
- MMAPs, even though the associated APR structures typically
- live longer than the subrequest. [Greg Ames]
-
- *) Extend mod_setenvif to support specifying regular expressions
- on the SetEnvIf (and SetEnvIfNoCase) directive attribute field.
- Example: SetEnvIf ^TS* [a-z].* HAVE_TS
- will cause HAVE_TS to be set if any of the request headers begins
- with "TS" and has a value that begins with any character in the
- set [a-z]. [Bill Stoddard]
-
- *) httpd children now re-bind themselves to a random CPU on
- multiprocessor systems on AIX via bindprocessor() in 2.0.
- [Victor J. Orlikowski]
-
- *) Fix htdigest. It would go into a loop in getline when adding
- a second user. [Bill Stoddard]
-
- *) Win32 platforms now fully support mod_userdir options. [Will Rowe]
-
- *) Automatically generate httpd.exp for AIX.
- DSOs now work again on AIX in 2.0
- [Victor J. Orlikowski]
-
- *) Add a new request hook, error_log. This phase allows modules
- to act on the error log string _after_ it has been written
- to the error log. The goal for this hook is to allow monitoring
- modules to send the error string to the monitoring agent.
- [Ryan Bloom]
-
- *) Modify mod_echo to make it use filters for input and output.
- [Ryan Morgan <rmorgan covalent.net>]
-
- *) Extend mod_headers to support conditional driven Header
- add, append and set. Use SetEnvIf to set an envar and conditionally
- add/append/set headers based on this envar thusly:
-
- SetEnvIf TSMyHeader value HAVE_TSMyHeader
- Header add MyHeader "%t %D" env=HAVE_TSMyHeader
-
- If the request contains header "TSMyHeader: value" then header
- MyHeader: "t=xxxxxxxxxx D=yyyy" will be sent on the response.
- [Bill Stoddard]
-
- *) Extend mod_headers to support using format specifiers on Header
- add, append and set header values. Two format specifiers are supported:
-
- %t - reports, in UTC microseconds since the epoch, when the
- request was received.
-
- %D - reports the time, in microseconds, between when the request was
- received and the response sent.
-
- Examples:
- Header add MyHeader "This request served in %D microseconds. %t"
-
- results in a header being added to the response that looks like this:
-
- MyHeader: This request served in D=5438 microseconds. t=991424704447256
-
- [Bill Stoddard]
-
- *) Fix reset_filter(). We need to be careful how we remove filters.
- If we set r->output_filters to NULL, we also have to reset the
- connection's filters. [John Sterling]
-
- *) Optimise reset_filter() in http_protocol.c. [Greg Stein]
-
- *) Add a check to ap_die() to make sure the filter stack is sane and
- contains the correct basic filters when an error occurs. This fixes
- a problem where headers are not being sent on error. [John Sterling]
-
- *) New Header directive 'echo' option. "Header echo regex" will
- cause any headers received on the request that match regex to be
- echoed to (included in) the response headers.
- [Bill Stoddard]
-
- *) include/ap_compat.h tested and set APR_COMPAT_H instead of AP_COMPAT_H.
- This prevented the inclusion of apr_compat.h. PR #7773
- [Oleg Broytmann <phd phd.pp.ru>]
-
- *) Moved util_uri to the apr-util library. This required a bunch of
- apr_name changes for the uri utility functions. [Justin Erenkrantz]
-
- *) Move the addition of default AP_HTTP_HTTP_HEADER filters to the
- insert_filter phase so that other filters are not bypassed by default.
- [Graham Leggett]
-
- *) Reimplement mod_headers as an output filter. mod_headers can now
- add custom headers to inbound requests using the RequestHeader directive
- and to responses using the same old Header directive. [Graham Leggett]
-
-Changes with Apache 2.0.18
-
- *) Fix command-line processing so that if a bad argument is specified
- Apache will exit. [Jeff Trawick]
-
- *) Change the make targets and rules to be consistent in all of the
- Apache-owned source trees. [Roy Fielding]
-
- *) Fix processing of the TRACE method. Previously we passed bogus
- parms to form_header_field() and it overlaid some vhost structures,
- resulting in a segfault in check_hostalias().
- [Greg Ames, Jeff Trawick]
-
- *) Win32: Add support for reliable piped logs. If the logging process
- goes down, Apache will automatically restart it. This function has
- been part of Apache on Unix/Linux/BSD since the early v1.3 releases.
- [Bill Stoddard]
-
- *) Do not start piped log processes during the config file
- preflight. This change also circumvents a problem on
- Windows where the rotatelog processes created during preflight
- was not getting cleaned up properly.
- [Bill Stoddard]
-
- *) add "Request Phase Participation" info to mod_info
- [Doug MacEachern]
-
- *) Make first phase changes to the scoreboard data structures in
- preparation for the rewriting of the scoreboard per my posted
- design notes. [Paul J. Reder]
-
- *) Fix httpd's definition of LTFLAGS to be consistent with that of apr
- and apr-util, allow it to be overridden by the configure command-line
- (default="--silent") and introduce LT_LDFLAGS to replace what we were
- formerly abusing as LTFLAGS. [Roy Fielding]
-
- *) Clean up the reporting of incorrect closing container tags.
- [Barrie Slaymaker <barries slaysys.com>]
-
- *) Simplify the configure process by moving all libtool stuff to APR
- and moving hints.m4 inline. [Roy Fielding]
-
- *) Add the AP_DECLARE()/AP_CORE_DECLARE macros on the return types
- of functions used by mod_proxy for export in the DLL
- [Ian Holsman <IanH cnet.com>]
-
- *) Prevent a hang when a cgi handled by mod_cgid tries to read a
- request body from its stdin but no reqest body is being written to
- the cgi. [Jeff Trawick]
-
- *) mod_log_config: %c connection status incorrectly logged
- as "-" (non-keepalive) when MaxKeepAliveRequests is set to 0.
- [Bill Stoddard]
-
- *) Get mod_cern_meta working under Windows
- [Bill Stoddard]
-
- *) Create Files, and thus MMAPs, out of the request pool, not the
- connection pool. This solves a small resource leak that had us
- not closing files until a connection was closed. In order to do
- this, at the end of the core_output_filter, we loop through the
- brigade and convert any data we have into a single HEAP bucket
- that we know will survive clearing the request_rec.
- [Ryan Bloom, Justin Erenkrantz <jerenkrantz ebuilt.com>,
- Cliff Woolley]
-
- *) Completely revamp configure so that it preserves the standard make
- variables CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS and LIBS by moving
- the configure additions to EXTRA_* variables. Also, allow the user
- to specify NOTEST_* values for all of the above, which eliminates the
- need for THREAD_CPPFLAGS, THREAD_CFLAGS, and OPTIM. Fix the setting
- of INCLUDES and EXTRA_INCLUDES. Check flags as they are added to
- avoid pointless duplications. Fix the order in which flags are given
- on the compile and link lines. Remove obsolete macros APR_DOEXTRA,
- AC_ADD_LIBRARY, AC_CHECK_DEFINE, APACHE_PASSTHRU, and APACHE_ONCE.
- Added APR_SAVE_THE_ENVIRONMENT and APR_RESTORE_THE_ENVIRONMENT macros.
- Renamed AC_TYPE_RLIM_T macro to APACHE_TYPE_RLIM_T. [Roy Fielding]
-
- *) Get mod_tls to compile/work better on Windows. PR #7612
- [Bernhard Schrenk <b.schrenk improx.com>]
-
- *) Fix shutdown/restart hangs in the threaded MPM.
- [Jeff Trawick, Greg Ames, Ryan Bloom]
-
- *) Removed the keptalive boolean from conn_rec because it is now only
- used by a single routine and can be replaced by a local variable.
- [Greg Stein, Ryan Bloom, Roy Fielding]
-
- *) Patch prefork to put enough of the signal processing back in so that
- signals are all handled properly now. The previous patch fixed the
- deadlock race condition, but broke the user directed signal handling.
- This fixes it to work the way it did before my previous prefork patch
- (primarily, SIGTERM is now working).
-
- *) Change how input filters decide how much data is returned to the
- higher filter. We used to use a field in the conn_rec, with this
- change, we use an argument to ap_get_brigade to determine how much
- data is retrieved. [Ryan Bloom]
-
- *) Fix seg fault at start-up introduced by Ryan's change to enable
- modules to specify their own logging tags. mod_log_config
- registers an optional function, ap_register_log_handler().
- ap_register_log_handler() was being called by http_core before
- the directive hash table was created. This patch creates the
- directive hash table before ap_register_log_handler() is
- registered as an optional function.
- [jean-frederic clere <jfrederic.clere fujitsu-siemens.com>]
-
- *) Add ap_set_int_slot() function
- [John K. Sterling <sterling covalent.net>]
-
- *) Under certain circumstances, Apache did not supply the
- right response headers when requiring authentication.
- [Gertjan van Wingerde <Gertjan.van.Wingerde cmg.nl>] PR#7114
- (This is a port of the change that went into Apache 1.3.19.)
-
- *) Allow modules to specify their own logging tags. This basically
- allows a module to tell mod_log_config that when %x is encountered
- a specific function should be called. Currently, x can be any single
- character. It may be more useful to make this a string at some point.
- [Ryan Bloom]
-
-Changes with Apache 2.0.17
-
- *) If a higher-level filter handles the byterange aspects of a
- request, then the byterange filter should not try to redo the
- work. The most common case of this happening, is a byterange
- request going through the proxy, and the origin server handles
- the byterange request. The proxy should ignore it.
- [Graham Leggett <minfrin sharp.fm>]
-
- *) Changed the threaded mpm to have child_main join to each of the
- worker threads to make sure the kids are all gone before child_main
- exits after a signal (cleanup from perform_idle_server_maintenance).
- This is an extension of Ryans recent commit to make the child_main
- the signal thread.
-
- *) Add more options to the ap_mpm_query function. This also allows MPMs to
- report if their threads are dynamic or static. Finally, this also
- implements a new API, ap_show_mpm, which returns the MPM that was
- required into the core. [Harrie Hazewinkel <harrie covalent.net>]
-
- *) Do not install the binaries from the support directory twice.
- [jun-ichiro hagino <itojun iijlab.net>]
-
- *) The ap_f* functions should flush data to the filter that is passed
- in, not the filter after the one passed in.
- [Ryan Morgan <rmorgan covalent.net>]
-
- *) Make ab work again by changing its native types to apr types and formats.
- [Justin Erenkrantz <jerenkrantz ebuilt.com>]
-
- *) Move the byterange filter and all of the supporting functions back
- to the HTTP module. The byterange filter turned out to be very
- HTTP specific, and it belongs in the HTTP module. [Greg Stein]
-
- *) Make clean, distclean, and extraclean consistently according to the
- Gnu makefile guidelines. [Justin Erenkrantz <jerenkrantz ebuilt.com>]
-
- *) Fix errors in the renaming of the apr_threadattr_detach_xxx functions.
- This may have been causing problems stopping processes in the threaded
- mpm's. [Greg Ames]
-
- *) Fix content-length in mod_negotiation to a long int representation.
- [William Rowe]
-
- *) Remove BindAddress from the default config file.
- [<giles nemeton.com.au>]
-
- *) Allow module authors to add a module to their Apache build using
- --with-module, without re-running buildconf. The syntax is:
- --with-module=module_type:/path/to/module.c
- The configure script will copy the module.c file to
- modules/module_type, and it will be added to the relevant Makefiles.
- currently, this only works for static modules. [Ryan Bloom]
-
- *) Changes required to make prefork clean up idle children properly.
- There was a window during which a starting worker deadlocks when
- an idle cleanup arrives before it completes init. Apache then keeps
- trying to cleanup the same deadlocked worker forever (until higher
- pids come along, but it still will never reduce below the deadlocked
- pid). Thus the number of children would not reduce to the correct
- idle level. [Paul J. Reder]
-
-Changes with Apache 2.0.16
-
- *) Change the default installation directory to /usr/local/apache2,
- as now defined by the "Apache" layout in config.layout. [Marc Slemko]
-
- *) OS/2: Added support for building loadable modules as OS/2 DLLs.
- [Brian Havard]
-
- *) Get MaxRequestsPerChild working with the Windows MPM.
- [Bill Stoddard]
-
- *) Make generic hooks to work, with mod_generic_hook_import/export
- experimental modules. [Ben Laurie, Will Rowe]
-
- *) Fix segfaults for configuration file syntax errors such as
- "<Directory>" followed by "</Directory" and
- "<Directory>" followed by "</Directoryz>". [Jeff Trawick]
-
- *) Cleanup the --enable-layout option of configure. This makes
- us use a consistent location for the config.layout file, and it
- makes configure more portable.
- [jun-ichiro hagino <itojun iijlab.net>]
-
- *) Changes to 'ab'; fixed int overrun's, added statistics, output in
- csv/gnuplot format, rudimentary ssl support and various other tweaks
- to make results more true to what is measured. The upshot of this it
- turns out that 'ab' has often underreported the true performance of
- apache. Often by a order of magnitude :-) See talk/paper of Sander
- Temme at April ApacheCon 2001 for details.
- [Dirk-Willem van Gulik]
-
- *) Clean up mod_cgid's temporary request pool. Besides fixing a
- storage leak this ensures that some unnecessary pipes are closed.
- [Jeff Trawick]
-
- *) Performance: Add quick_handler hook. This hook is called at the
- very beginning of the request processing before location_walk,
- translate_name, etc. This hook is useful for URI keyed content
- caches like Mike Abbott's Quick Shortcut Cache.
- [Bill Stoddard]
-
- *) top_module global variable renamed to ap_top_module [Perl]
-
- *) Move ap_set_last_modified to the core. This is a potentially
- controversial change, because this is kind of HTTP specific. However
- many protocols should be able to take advantage of this kind of
- information. I expect that headers will need one more layer of
- indirection for multi-protocol work, but this is a small step in
- the right direction. [Ryan Bloom]
-
- *) Enable mod_status by default. This matches what Apache 1.3 does.
- [Ed Korthof]
-
- *) Add a ScriptSock directive to the default config file. This is
- only enabled when mod_cgid is used.
- [Taketo Kabe <kabe sra-tohoku.co.jp>]
-
-Changes with Apache 2.0.15
-
- *) Untangled the buildconf script and eliminated the need for build's
- aclocal.m4, generated_lists, build.mk, build2.mk, and a host of other
- libtool muck that is now under srclib/apr/build. [Roy Fielding]
-
- *) Win32: Don't accept more connections than we have worker threads
- to handle.
- [Bill Stoddard]
-
- *) Fix bug in the Unix threaded.c MPM that allowed child processes
- to fork() new child processes.
- [Bill Stoddard]
-
- *) SECURITY: Fix a major security problem with double-reverse lookup
- checking. Previously, a client connecting over IPv4 would not be
- matched properly when the server had an IPv6 listening socket.
- PR #7407 [Taketo Kabe <kiabe sra-tohoku.co.jp>]
-
- *) Change the way the beos MPM handles polling to allow it to stop and
- restart. Problem was the sockets being polled were being reset by
- the select call, so once it had accepted a connection it was no
- longer listening on the UDP socket we use for shutdown instructions.
- APR needs to be altered, patch on it's way. [David Reid]
-
- *) Empty out the brigade shared by ap_getline()/ap_get_client_block()
- on error exit from ap_getline(). Some other code got upset because
- the wrong data was in the brigade. [Greg Ames, Jeff Trawick]
-
- *) Handle ap_discard_request_body() being called more than once.
- [Greg Ames, Jeff Trawick]
-
- *) Get rid of an inadvertent close of file descriptor 2 in
- mod_mime_magic. [Greg Ames, Jeff Trawick]
-
- *) Add a hook, create_request. This hook allows modules to modify
- a request while it is being created. This hook is called for all
- request_rec's, main request, sub request, and internal redirect.
- When this hook is called, the r->main, r->prev, r->next
- pointers have been set, so modules can determine what kind of
- request this is. [Ryan Bloom]
-
- *) Cleanup the build process a bit more. The Apache configure
- script no longer creates its own helper scripts, it just
- uses APR's.
- [jean-frederic clere <jfrederic.clere fujitsu-siemens.com>]
-
- *) Stop the forced downgrade of the connection to HTTP/1.0 for
- proxy requests. [Graham Leggett]
-
- *) Avoid using sscanf to determine the HTTP protocol number in
- the common case because sscanf is a performance hog. From
- Mike Abbot's Accelerating Apache patch number 6.
- [Mike Abbot <mja trudge.engr.sgi.com>, Bill Stoddard]
-
- *) SECURITY: Fix a security exposure in mod_access. Previously when
- IPv6 listening sockets were used, allow/deny-from-IPv4-address rules
- were not evaluated properly (PR #7407). Also, add the ability to
- specify IPv6 address strings with optional prefix length on Allow
- and Deny. [Jeff Trawick]
-
- *) Enhance rotatelogs so that a UTC offset can be specified, and
- the logfile name can be formatted using strftime(3). (Brought
- forward from 1.3.) [Ken Coar]
-
- *) Reimplement the Windows MPM (mpm_winnt.c) to eliminate calling
- DuplicateHandle on an IOCompletionPort (a practice which
- MS "discourages"). The new model does not rely on associating
- the completion port with the listening sockets, thus the
- completion port can be completely managed within the child
- process. A dedicated thread accepts connections off the network,
- then calls PostQueuedCompletionStatus() to wake up worker
- threads blocked on the completion port.
- [Bill Stoddard]
-
- *) Bring forward the --suexec-umask option which allows the
- builder to preset the umask for suexec processes. [Ken Coar]
-
- *) Add a -V flag to suexec, which causes it to display the
- compile-time settings with which it was built. (Only
- usable by root or the AP_HTTPD_USER username.) [Ken Coar]
-
- *) Mod_include should always unset the content-length if the file is
- going to be passed through send_parsed_content. There is no to
- determine if the content will change before actually scanning the
- entire content. It is far safer to just remove the C-L as long
- as we are scanning it. [Ryan Bloom]
-
- *) Make sure Apache sends WWW-Authenticate during a reverse proxy
- request and not Proxy-Authenticate.
- [Graham Leggett <minfrin sharp.fm>]
-
-Changes with Apache 2.0.14
-
- *) Fix content-length computation. We ONLY compute a content-length if
- We are not in a 1.1 request and we cannot chunk, and this is a keepalive
- or we already have all the data. [Ryan Bloom]
-
- *) Report unbounded containers in the config file. Previously, a typo
- in the </container> directive could result in the rest of the config
- file being silently ignored, with undesired defaults used.
- [Jeff Trawick]
-
- *) Make the old_write filter use the ap_f* functions for the buffering.
- [Ryan Bloom]
-
- *) Move more code from the http module into the core server. This
- is core code, basically the default handler, the default input
- and output filters, and all of the core configuration directives.
- All of this code is required in order for the server to work, with or
- without HTTP. The server is closer to working without the HTTP
- module, although there is still more to do. [Ryan Bloom]
-
- *) Fix a number of SGI compile warnings throughout the server. Fix some
- bad parameters to apr_bucket_read(). Fix a bad statement in
- ap_method_in_list(). For the mod_rewrite cache use apr_time_t
- consistently; we were mixing apr_time_t and time_t in invalid ways
- before. In load_file(), call apr_dso_error() instead of
- apr_strerror() so that we get a more specific string on some platforms.
- PR #6980 [Jeff Trawick]
-
- *) Allow modules to query the MPM about it's execution profile. This
- query API can and should be extended in the future, but for now,
- max_daemons, and threading or forking is a very good start.
- [Jon Travis <jtravis covalent.net>]
-
- *) Modify mod_include to send blocks of data no larger than 9k.
- Without this, mod_include will wait until the whole file is parsed,
- or the first tag is found to send any data to the client.
- [Paul J. Reder <rederpj raleigh.ibm.com>]
-
- *) Fix mod_info, so that <Directory> and <Location> directives are
- not displayed twice when displaying the current configuration.
- [Ryan Morgan <rmorgan covalent.net>]
-
- *) Add config directives to override DEFAULT_ERROR_MSG and
- DEFAULT_TIME_FORMAT. This was sent in as PR 6193.
- [Dan Rench <drench xnet.com>]
-
- *) Get mod_info building and loading on Win32. [William Rowe]
-
- *) Begin to move protocol independant functions out of mod_http. The goal
- is to have only functions that are HTTP specific in the http directory.
- [Ryan Bloom]
-
-Changes with Apache 2.0.13
-
- *) Don't assume that there will always be multiple calls to the byterange
- filter. It is possible that we will need to do byteranges with only
- one call to the filter. [Ryan Morgan <rmorgan covalent.net>]
-
- *) Move the error_bucket definition from the http module to the
- core server. Every protocol will need this ability, not just
- HTTP. [Ryan Bloom]
-
-Changes with Apache 2.0.12
-
- *) Modify mod_file_cache to save pre-formatted strings for
- content-length and last-modified headers for performance.
- [Mike Abbot <mja trudge.engr.sgi.com>]
-
- *) Namespace protect IOBUFSIZ since it is exposed in the API.
- [Jon Travis <jtravis covalent.net>]
-
- *) Use "Basic" authentication instead of "basic" in ab, as the spec
- says we should. [Andre Breiler <andre.breiler rd.bbc.co.uk>]
-
- *) Fix a seg fault in mod_userdir.c. We used to use the pw structure
- without ever filling it out. This fixes PR 7271.
- [Taketo Kabe <kabe sra-tohoku.co.jp> and
- Cliff Woolley <cliffwoolley yahoo.com>]
-
- *) Add a couple of GCC attribute tags to printf style functions.
- [Jon Travis <jtravis covalent.net>]
-
- *) Add the correct language tag for interoperation with the Taiwanese
- versions of MSIE and Netscape. [Clive Lin <clive CirX.ORG>] PR#7142
-
- *) Migrate the perchild MPM to use the new apr signal child, and
- APR thread functions. [Ryan Bloom]
-
- *) Close one copy of the CGI's stdout before creating the new process.
- The CGI will still have stdout, because we have already dup'ed it.
- This keeps Apache from waiting forever to send the results of a CGI
- process that has forked a long-lived child process.
- [Taketo Kabe <kabe sra-tohoku.co.jp>]
-
- *) Remove the rest of the pthreads functions from the threaded MPM.
- This requires the APR support for a signal thread that was just
- added. [Ryan Bloom]
-
- *) Make mod_dir use a fixup for sending a redirect to the browser.
- Before this, we were using a handler, which doesn't make much
- sense, because the handler wasn't generating any data, it would
- either return a redirect error code, or DECLINED. This fits the
- current hooks better. [Ryan Morgan <rmorgan covalent.net>]
-
- *) Make the threaded MPM use APR threads instead of pthreads.
- [Ryan Bloom]
-
- *) Get mod_tls to the point where it actually appears to work in all cases.
- [Ben Laurie]
-
- *) implement --enable-modules and --enable-mods-shared for "all" and
- "most". [Greg Stein]
-
- *) Move the threaded MPM to use APR locks instead of pthread locks.
- [Ryan Bloom]
-
- *) Rename mpmt_pthread to threaded. This is more in line with the
- fact that mpmt_pthread shouldn't be using pthreads directly, and
- it is a smaller name that doesn't tie into anything.
- [Ryan Bloom]
-
- *) Rename the module structures so that the exported symbol matches
- the file name, and it is easier to automate the installation
- process (generating LoadModule directives from the module filenames).
- [Martin Kraemer]
-
- *) Remove the coalesce filter. With the ap_f* functions, this filter
- is no longer needed. [Ryan Bloom]
-
-Changes with Apache 2.0.11
-
- *) Remove the dexter MPM. Perchild is the same basic idea, but it has the
- added feature of allowing a uid/gid per child process. If no
- uid/gid is specified, then Perchild behaves exactly like dexter.
- [Ryan Bloom]
-
- *) Get perchild building again. [Ryan Bloom]
-
- *) Don't disable threads just because we are using the prefork MPM.
- If somebody wants to compile without threads, they must now add
- --disable-threads to the configure command line. [Ryan Bloom]
-
- *) Begin to move the calls to update_child_status into common code, so
- that each individual MPM does not need to update the scoreboard itself.
- [Ryan Bloom]
-
- *) Allow mod_tls to compile under Unix boxes where openssl has been
- installed to the system include files.
- [Gomez Henri <new-httpd slib.fr>]
-
- *) Cleanup the mod_tls configure process. This should remove any need
- to hand-edit any files. We require OpenSSL 0.9.6 or later, but
- configure doesn't check that yet. [Ryan Bloom]
-
- *) Add a very early prototype of SSL support (in mod_tls.c). It is
- vital that you read modules/tls/README before attempting to build
- it. [Ben Laurie]
-
- *) Fix a potential seg fault on all platforms. David Reid fixed this
- on BEOS, but the problem could happen anywhere, so we don't want
- to #ifdef it. [Cliff Woolley <cliffwoolley yahoo.com>]
-
- *) Add new LogFormat directive, %D, to log time it takes to serve a
- request in microseconds. [Bill Stoddard]
-
- *) Change AddInputFilter and AddOutputFilter to SetInputFilter and
- SetOutputFilter. This corresponds nicely with the other Set
- directives, which operate on containers while the Add* directives
- tend to work directly on extensions. [Ryan Bloom]
-
- *) Cleanup the header handling a bit. This uses the apr_brigade_*
- functions for the buffering so that we don't need to compute
- the length of the headers before we actually create the header
- buffer. [Ryan Bloom]
-
- *) Allow filters to buffer data using the ap_f* functions. These have
- become macros that resolve directly to apr_brigade_*.
- [Ryan Bloom]
-
- *) Get the Unix MPM's to do a graceful restart again. If we are going
- to register a cleanup with ap_cleanup_scoreboard, then we have to
- kill the cleanup with the same function, and that function can't be
- static. [Ryan Bloom]
-
- *) Install all required header files. Without these, it was not
- possible to compile some modules outside of the server.
- [Ryan Bloom]
-
- *) Fix the AliasMatch directive in Apache 2.0. When we brought a patch
- forward from 1.3 to 2.0, we missed a single line, which broke regex
- aliases. [Ryan Bloom]
-
- *) We have a poor abstraction in the protocol. This is a temporary
- hack to fix the bug, but it will need to be fixed for real. If
- we find an error while sending out a custom error response, we back
- up to the first non-OK request and send the data. Then, when we send
- the EOS from finalize_request_protocol, we go to the last request,
- to ensure that we aren't sending an EOS to a request that has already
- received one. Because the data is sent on a different request than
- the EOS, the error text never gets sent down the filter stack. This
- fixes the problem by finding the last request, and sending the data
- with that request. [Ryan Bloom]
-
- *) Make the server status page show the correct restart time, and
- thus the proper uptime. [Ryan Bloom]
-
- *) Move the CGI creation logic from mod_include to mod_cgi(d). This
- should reduce the amount of duplicate code that is required to
- create CGI processes.
- [Paul J. Reder <rederpj raleigh.ibm.com>]
-
- *) ap_new_connection() closes the socket and returns NULL if a socket
- call fails. Usually this is due to a connection which has been
- reset. [Jeff Trawick]
-
- *) Move the Apache version information out of httpd.h and into release.h.
- This is in preparation for the first tag with the new tag and release
- system. [Ryan Bloom]
-
- *) Begin restructuring scoreboard code to enable adding back in
- the ability to use IPC other than shared memory.
- Get mod_status working on Windows again. [Bill Stoddard]
-
- *) Make mod_status work with 2.0. This will work for prefork,
- mpmt_pthread, and dexter. [Ryan Bloom]
-
- *) Correct a typo in httpd.conf.
- [Kunihiro Tanaka <tanaka apache.or.jp>] PR#7154
-
- *) Really fix mod_rewrite map lookups this time. [Tony Finch]
-
- *) Get the correct IP address if ServerName isn't set and we can't
- find a fully-qualified domain name at startup.
- PR#7170 [Danek Duvall <dduvall eng.sun.com>]
-
- *) Make mod_cgid work with SuExec. [Ryan Bloom]
-
- *) Adopt apr user/group name features for mod_rewrite. Eliminates some
- 'extra' stat's for user/group since they should never occur, and now
- resolves the SCRIPT_USER and SCRIPT_GROUP, including on WinNT NTFS
- volumes. [William Rowe]
-
- *) Adopt apr features to simplify mod_includes. This changes the
- behavior of the USER_NAME variable, unknown uid's are now reported
- as USER_NAME="<unknown>" rather than the old user#000 result.
- WinNT now resolves USER_NAME on NTFS volumes. [William Rowe]
-
- *) Adopt apr features for simplifing mod_userdir, and accept the new
- Win32/OS2 exceptions without hiccuping. [William Rowe]
-
- *) Replace configure --with-optim option by using and saving the
- environment variable OPTIM instead. This is needed because configure
- options do not support multiple flags separated by spaces.
- [Roy Fielding]
-
- *) Fix some byterange handling. If we get a byte range that looks like
- "-999999" where that is past the end of the file, we should return
- a PARTIAL CONTENT status code, and return the whole file as one big
- byterange. This matches the 1.3 handling now. [Ryan Bloom]
-
- *) Make the error bucket a real meta-data bucket. This means that the
- bucket length is 0, and a read returns NULL data. If one of these
- buckets is passed down after the headers are sent, this data will
- just be ignored. [Greg Stein]
-
- *) The prefork MPM wasn't killing child processes correctly if a restart
- signal was received while the process was serving a request. The child
- process would become the equivalent of a second parent process. If
- we break out of the accept loop, then we need to do die after cleaning
- up after ourselves. [Ryan Bloom]
-
- *) Change the Prefork MPM to use SIGWINCH instead of SIGUSR1 for graceful
- restarts. [Ryan Bloom]
-
- *) Modify the apr_stat/lstat/getfileinfo calls within apache to use
- the most optimal APR_FINFO_wanted bits. This spares Win32 from
- performing very expensive owner, group and permission lookups
- and allows the server to function until these apr_finfo_t fields
- are implemented under Win32. [William Rowe]
-
- *) Support for typedsafe optional functions - that is functions exported by
- optional modules, which, therefore, may or may not be present, depending
- on configuration. See the experimental modules mod_optional_fn_{ex,im}port
- for sample code. [Ben Laurie]
-
- *) filters can now report an HTTP error to the server. This is done
- by sending a brigade where the first bucket is an error_bucket.
- This bucket is a simple bucket that stores an HTTP error and
- a string. Currently the string is not used, but it may be needed
- to output an error log. The http_header_filter will find this
- bucket, and output the error text, and then return
- AP_FILTER_ERROR, which informs the server that the error web page
- has already been sent. [Ryan Bloom]
-
- *) If we get an error, then we should remove all filters except for
- those critical to serving a web page. This fixes a bug, where
- error pages were going through the byterange filter, even though
- that made no sense. [Ryan Bloom]
-
- *) Relax the syntax checking of Host: headers in order to support
- iDNS. PR#6635 [Tony Finch]
-
- *) Cleanup the byterange filter to use the apr_brigade_partition
- and apr_bucket_copy functions. This removes a lot of very messy
- code, and hopefully makes this filter more stable.
- [Ryan Bloom]
-
- *) Remove AddModule and ClearModuleList directives. Both of these
- directives were used to ensure that modules could be enabled
- in the correct order. That requirement is now gone, because
- we use hooks to ensure that modules are in the correct order.
- [Ryan Bloom]
-
- *) When SuExec is specified, we need to add it to the list of
- targets to be built. If we don't, then any changes to the
- configuration won't affect SuExec, unless 'make suexec' is
- specifically run. [Ryan Bloom]
-
- *) Cleaned out open_file from mod_file_cache, as apr now accepts
- the APR_XTHREAD argument to open a file for consumption by
- parallel threads on win32. [William Rowe]
-
- *) Correct a bug in determining when we follow symlinks. The code
- expected a stat -1 result, not an apr_status_t positive error.
- Also check if the APR_FINFO_USER fields are valid before we
- follow the link. [William Rowe]
-
- *) Move initgroupgs, ap_uname2id and ap_gname2id from util.c to
- mpm_common.c. These functions are only valid on some platforms,
- so they should not be in the main-line code. [Ryan Bloom]
-
- *) Remove ap_chdir_file(). This function is not thread-safe,
- and nobody is currently using it. [Ryan Bloom]
-
- *) Do not try to run make depend if there are no .c files in the
- current directory, doing so makes `make depend` fail.
- [Ryan Bloom]
-
- *) Update highperformance.conf to work with either prefork or
- pthreads mpms. [Greg Ames]
-
- *) Stop checking to see if this is a pipelined request if we know
- for a fact that it isn't. Basically, if r->connection->keepalive == 0.
- This keeps us from making an extra read call when serving a 1.0
- request. [Ryan Bloom and Greg Stein]
-
- *) Fix the handling of variable expansion look-ahead in mod_rewrite,
- i.e. syntax like %{LA-U:REMOTE_USER}, and also fix the parsing of
- more complicated nested RewriteMap lookups. PR#7087 [Tony Finch]
-
- *) Fix the RFC number mentioned when complaining about a missing
- Host: header. PR#7079 [Alexey Toptygin <alexeyt wam.umd.edu>]
-
- *) Fix an endless loop in ab which occurred when ab was posting
- and the server dropped the connection unexpectedly.
- [Jeff Trawick]
-
- *) Fix a segfault while handling request bodies in ap_http_filter().
- This problem has been seen with mod_dav usage as well as with
- requests where the body was just being discarded. [Jeff Trawick]
-
- *) Some adjustment on the handling and automatic setting (via
- hints.m4) of various compilation flags (eg: CFLAGS). Also,
- add the capability to specify flags (NOTEST_CFLAGS and
- NOTEST_LDFLAGS) which are used to compile Apache, but
- not used during the configuration process. Useful for
- flags like "-Werror". [Jim Jagielski]
-
- *) Stop using environment variables to force debug mode or
- no detach. We now use the -D command line argument to
- specify the correct mode. -DONE_PROCESS and -DNO_DETACH.
- [Greg Stein, Ryan Bloom]
-
- *) Change handlers to use hooks. [Ben Laurie]
-
- *) Stop returning copies of filenames from both apr_file_t and
- apr_dir_t. We pstrdup the filenames that we store in the
- actual structures, so we don't need to pstrdup the strings again.
- [Ryan Bloom]
-
- *) mod_cgi: Fix some problems where the wrong error value was being
- traced. [Jeff Trawick]
-
- *) EBCDIC: Fix some missing ASCII conversion on some protocol data.
- [Jeff Trawick]
-
- *) Add generic hooks. [Ben Laurie]
-
- *) Use a real pool to dup the error log descriptor. [Ryan Bloom]
-
- *) Fix a segfault caused by mod_ext_filter when the external filter
- program does not exist. [Jeff Trawick]
-
- *) Fix an output truncation error when on an HTTP >= 1.0 request an
- object of size between DEFAULT_BUCKET_SIZE and AP_MIN_BYTES_TO_WRITE
- was served through mod_charset_lite (or anything else that would
- create a transient bucket in this size range). ap_bucket_make_heap()
- silently failed (fixed), transient_setaside() discovered it, but
- ap_save_brigade() ignored it (fixed). [Jeff Trawick]
-
- *) Ignore \r\n or \n when using PEEK mode for input filters. The problem
- is that some browsers send extra lines at the end of POST requests, and
- we don't want to delay sending data back to the user just because the
- browser isn't well behaved. [Ryan Bloom]
-
- *) Get SuEXEC working again. We can't send absolute paths to suExec
- because it refuses to execute those programs. SuEXEC also wasn't
- always recognizing configuration changes made using the autoconf
- setup. [Ryan Bloom]
-
- *) Allow the buildconf process to find the config.m4 files in the correct
- order. Basically, we can now name config.m4 files as config\d\d.m4,
- and we will sort them correctly when inserting them into the build
- process. [Ryan Bloom]
-
- *) Get mod_cgid to use apr calls for creating the actual CGI process.
- This also allows mod_cgid to use ap_os_create_priviledged_process,
- thus allowing for SuExec execution from mod_cgid. Currently, we do
- not support everything that standard SuExec supports, but at least
- it works minimally now. [Ryan Bloom]
-
- *) Allow SuExec to be configured from the ./configure command line.
- [Ryan Bloom]
-
- *) Update some of the docs in README and INSTALL to reflect some of
- the changes in Apache 2.0 [Cliff Woolley <cliffwoolley yahoo.com>]
-
- *) If we get EAGAIN returned from the call to apr_sendfile, then we
- need to call sendfile again. This gets us serving large files
- such as apache_2.0a9.tar.gz on FreeBSD again. [Ryan Bloom]
-
- *) Get the support programs building cleanly again.
- [Cliff Woolley <cliffwoolley yahoo.com>]
-
- *) The Apache/Win32 Apache.exe and dll's now live in bin. The
- current directory logic now backs up over bin/ to determine the
- server root from the Apache.exe path.
-
- *) Apache/Win32 now follows the standard conventions of mod_foo.so
- loadable modules, dynamic libs are all named libfoo.dll, and the
- makefile.win populates the include, lib and libexec directories.
-
- *) Apache is now IPv6-capable. On systems where APR supports IPv6,
- Apache gets IPv6 listening sockets by default. Additionally, the
- Listen, NameVirtualHost, and <VirtualHost> directives support IPv6
- numeric address strings (e.g., "Listen [fe80::1]:8080").
- [Jeff Trawick]
-
- *) Modify the install directory layout. Modules are now installed in
- modules/. Shared libraries should be installed in libraries/, but
- we don't have any of those on Unix yet. All install directories
- are modifyable at configure time. [Ryan Bloom]
-
- *) Install all header files in the same directory on Unix. [Ryan Bloom]
-
- *) Get the functions in server/linked into the server, regardless of
- which modules linked into the server. This uses the same hack
- for Apache that we use for APR and apr-util to ensure all of the
- necessary functions are linked. As a part of thise, the CHARSET_EBCDIC
- was renamed to AP_CHARSET_EBCDIC for namespace protection, and to make
- the scripts a bit easier.
- [Ryan Bloom]
-
- *) Rework the RFC1413 handling to make it thread-safe, use a timeout
- on the query, and remove IPv4 dependencies. [Jeff Trawick]
-
- *) Get all of the auth modules to the point that they will install and
- be loadable into the server. Our new build/install mechanism expects
- that all modules will have a common name format. The auth modules
- didn't use that format, so we didn't install them properly.
- [Ryan Bloom]
-
- *) API routines ap_pgethostbyname() and ap_pduphostent() are no longer
- available. Use apr_getaddrinfo() instead. [Jeff Trawick]
-
- *) Get "NameVirtualHost *" working in 2.0. [Ryan Bloom]
-
- *) Return HTTP_RANGE_NOT_SATISFIABLE if the every range requested starts
- after the end of the response. [Ryan Bloom]
-
- *) Get byterange requests working with responses that do not have a
- content-length. Because of the way byterange requests work, we have to
- have all of the data before we can actually do the byterange, so we
- can compute the content-length in the byterange filter.
- [Ryan Bloom]
-
- *) Get exe CGI's working again on Windows.
- [Allan Edwards]
-
- *) Get mod_cgid and mod_rewrite to work as DSOs by changing the way
- they keep track of whether or not their post config hook has been
- called before. Instead of a static variable (which is replaced when
- the DSO is loaded a second time), use userdata in the process pool.
- [Jeff Trawick]
-
-Changes with Apache 2.0a9
-
- *) Win32 now requires perl to complete the final install step for users
- to build + install on Win32. Makefile.win now rewrites @@ServerRoot@
- and installs the conf, htdocs and htdocs/manual directories.
- [William Rowe]
-
- *) Make mod_include use a hash table to associate directive tags with
- functions. This allows modules to implement their own SSI tags easily.
- The idea is simple enough, a module can insert it's own tag and function
- combination into a hash table provided by mod_include. While mod_include
- parses an SSI file, when it encounters a tag in the file, it does a
- hash lookup to find the function that implements that tag, and passes
- all of the relevant data to the function. That function is then
- responsible for processing the tag and handing the remaining data back
- to mod_include for further processing.
- [Paul J. Reder <rederpj raleigh.ibm.com>]
-
- *) Get rid of ap_new_apr_connection(). ap_new_connection() now has
- fewer parameters: the local and remote socket addresses were removed
- from the parameter list because all required information is available
- via the APR socket. [Jeff Trawick]
-
- *) Distribution directory structure reorganized to reflect a
- normal source distribution with external install targets.
- [Roy Fielding]
-
- *) The MPMs that need multiple segments of shared memory now create
- two apr_shmem_t variables, one for each shared memory allocation.
- the problem is that we can't determine how much memory will be required
- for shared memory allocations once we try to allocate more than one
- variable. The MM code automatically aligns the shared memory allocations,
- so we end up needing to pad the amount of shared memory we want based
- on how many variables will be allocated out of the shared memory segment.
- It is just easier to create a second apr_shmem_t variable, and two
- shmem memory blocks.
- [Ryan Bloom]
-
- *) Cleanup the export list a bit. This creates a single unified list of
- functions exported by APR. The export list is generated at configure
- time, and that list is then used to generate the exports.c file.
- Because of the way the export list is generated, we only export those
- functions that are valid on the platform we are building on.
- [Ryan Bloom]
-
- *) Enable logging the cookie with mod_log_config
- [Sander van Zoest <sander covalent.net>]
-
- *) Fix a segfault in mod_info when it reaches the end of the configuration.
- [Jeff Trawick]
-
- *) Added lib/aputil/ as a placeholder for utility functions which are not
- specific to the Apache HTTP Server (but do not make sense with APR).
- The first utility is "apu_dbm": a set of functions to work with DBM
- files. This first version can be compiled for SDBM or GDBM databases.
- [Greg Stein]
-
- *) Complete re-write of mod_include. This makes mod_include a filter that
- uses buckets directly. This has now served the FAQ correctly.
- [Paul Reder <rederpj raleigh.ibm.com>]
-
- *) Allow modules to specify the first filter in a sub_request when
- making the sub_request. This keeps modules from having to change the
- output_filter immediately after creating the sub-request, and therefore
- skip the sub_req_output_filter. [Ryan Bloom]
-
- *) Update ab to accept URLs with IPv6 literal address strings (in the
- format described in RFC 2732), and to build Host header fields in
- the same format. This allows IPv6 literal address strings to be
- used with ab. This support has been tested against Apache 1.3 with
- the KAME patch, but Apache 2.0 does not yet work with this format
- of the Host header field. [Jeff Trawick]
-
- *) Accomodate an out-of-space condition in the piped logs and the
- rotatelogs.c code, and no longer churn log processes for this
- condition. [Victor J. Orlikowski]
-
- *) Add support for partial writes with apr_sendfile() to core_output_filter.
- [Greg Ames]
-
-Changes with Apache 2.0a8
-
- *) Add a directive to mod_mime so that filters can be associated with
- a given mime-type.
- [Ryan Bloom]
-
- *) Get multi-views working again. We were setting the path_info
- field incorrectly if we couldn't find the specified file.
- [Ryan Bloom]
-
- *) Fix 304 processing. The core should never try to send the headers
- down the filter stack. Always, just setup the table in the request
- record, and let the header filter convert it to data that is ready
- for the network.
- [Ryan Bloom]
-
- *) More fixes for the proxy. There are still bugs in the proxy code,
- but this has now proxied www.yahoo.com and www.ntrnet.net (my ISP)
- successfully.
- [Ryan Bloom]
-
- *) Fix params for apr_getaddrinfo() call in connect proxy handler.
- [Chuck Murcko]
-
- *) APR: Add new apr_getopt_long function to handle long options.
- [B. W. Fitzpatrick <fitz red-bean.com>]
-
- *) APR: Change apr_connect() to take apr_sockaddr_t instead of hostname.
- Add generic apr_create_socket(). Add apr_getaddrinfo() for doing
- hostname resolution/address string parsing and building
- apr_sockaddr_t. Add apr_get_sockaddr() for getting the address
- of one of the apr_sockaddr_t structures for a socket. Change
- apr_bind() to take apr_sockaddr_t. [David Reid and Jeff Trawick]
-
- *) Remove the BUFF from the HTTP proxy. This is still a bit ugly, but
- I have proxied pages with it, cleanup will commence soon.
- [Ryan Bloom]
-
- *) Make the proxy work with filters. This isn't perfect, because we
- aren't dealing with the headers properly. [Ryan Bloom]
-
- *) Do not send a content-length iff the C-L is 0 and this is a head
- request. [Ryan Bloom]
-
- *) Make cgi-bin work as a regular directory when using mod_vhost_alias
- with no VirtualScriptAlias directives. PR#6829 [Tony Finch]
-
- *) Remove BUFF from the PROXY connect handling. [Ryan Bloom]
-
- *) Get the default_handler to stop trying to deal with HEAD requests.
- The idea is to let the content-length filter compute the C-L before
- we try to send the data. If we can get the C-L correctly, then we
- should send it in the HEAD response.
- [Ryan Bloom]
-
- *) The Header filter can now determine if a body should be sent based
- on r->header_only. The general idea of this is that if we delay
- deciding to send the body, then we might be able to compute the
- content-length correctly, which will help caching proxies to cache
- our data better. Any handler that doesn't want to try to compute
- the content-length can just send an EOS bucket without data and
- everything will just work.
- [Ryan Bloom]
-
- *) Add the referer to the error log if one is available.
- [Markus Gyger <mgyger itr.ch>]
-
- *) Mod_info.c has now been ported to Apache 2.0. As a part of this
- change, the root of the configuration tree has been exposed to modules
- as ap_conftree.
- [Ryan Morgan <rmorgan covalent.net>]
-
- *) Get the core_output_filter to use the bucket interface directly.
- This keeps us from calling the content-length filter multiple times
- for a simple static request.
- [Ryan Bloom]
-
- *) We are sending the content-type correctly now.
- [Ryan Bloom and Will Rowe]
-
- *) APR on FreeBSD: Fix a bug in apr_sendfile() which caused us to report
- a bogus bytes-sent value when the only thing being sent was trailers
- and writev() returned an error (or EAGAIN). [Jeff Trawick]
-
- *) Get SINGLE_LISTEN_UNSERIALIZED_ACCEPT working again. This uses the
- hints file to determine which platforms define
- SINGLE_LISTEN_UNSERIALIZED_ACCEPT.
- [Ryan Bloom]
-
- *) APR: add apr_get_home_directory() [Jeff Trawick]
-
- *) Initial import of 1.3-current mod_proxy. [Chuck Murcko]
-
- *) Not all platforms have INADDR_NONE defined by default. Apache
- used to make this check and define INADDR_NONE if appropriate,
- but APR needs the check too, and I suspect other applications will
- as well. APR now defines APR_INADDR_NONE, which is always a valid
- value on all platforms.
- [Branko Èibej <brane xbc.nu>]
-
- *) Destroy the pthread mutex in lock_intra_cleanup() for PR#6824.
- [Shuichi Kitaguchi <ki hh.iij4u.or.jp>]
-
- *) Relax the syntax checking of Host: headers in order to support
- iDNS. PR#6635 [Tony Finch]
-
- *) When reading from file buckets we convert to an MMAP if it makes
- sense. This also simplifies the default handler because the
- default handler no longer needs to try to create MMAPs.
- [Ryan Bloom]
-
- *) BUFF has been removed from the main server. The BUFF code will remain
- in the code until it has been purged from the proxy module as well.
- [Ryan Bloom]
-
- *) Byteranges have been completely re-written to be a filter. This
- has been tested, and I believe it is working correctly, but it could
- doesn't work for the Adobe Acrobat plug-in. The output almost matches
- the output from 1.3, the only difference being that 1.3 includes
- a content-length in the response, and this does not.
- [Ryan Bloom]
-
- *) APR read/write functions and bucket read functions now operate
- on unsigned integers, instead of signed ones. It doesn't make
- any sense to use signed ints, because we return the error codes,
- so if we have an error we should report 0 bytes read or written.
- [Ryan Bloom]
-
- *) Always compute the content length, whether it is sent or not.
- The reason for this, is that it allows us to correctly report
- the bytes_sent when logging the request. This also simplifies
- content-length filter a bit, and fixes the actual byte-reporing
- code in mod_log_config.c
- [Ryan Bloom]
-
- *) Remove AP_END_OF_BRIGADE definition. This does not signify what
- it says, because it was only used by EOS and FLUSH buckets. Since
- neither of those are required at the end of a brigade, this was
- really signifying FLUSH_THE_DATA, but that can be determined better
- by checking AP_BUCKET_IS_EOS() or AP_BUCKET_IS_FLUSH. EOS and FLUSH
- buckets now return a length of 0, which is actually the amount of data
- read, so they make more sense.
- [Ryan Bloom]
-
- *) Allow the core_output_filter to save some data past the end of a
- request. If we get an EOS bucket, we only send the data if it
- makes sense to send it. This allows us to pipeline request
- responses. As a part of this, we also need to allocate mmap
- buckets out of the connection pool, not the request pool. This
- allows the mmap to outlive the request.
- [Ryan Bloom]
-
- *) Make blocking and non-blocking bucket reads work correctly for
- sockets and pipes. These are the only bucket types that should
- have non-blocking reads, because the other bucket types should
- ALWAYS be able to return something immediately.
- [Ryan Bloom]
-
- *) In the Apache/Win32 console window, accept Ctrl+C to stop the
- server, but use Ctrl+Break to initiate a graceful restart
- instead of duplicating behavior. [John Sterling]
-
- *) Patch mod_autoindex to set the Last-Modified header based on
- the directory's mtime, and add the ETag header. [William Rowe]
-
- *) Merge the 1.3 patch to add support for logging query string in
- such a way that "%m %U%q %H" is the same as "%r".
- [Bill Stoddard]
-
- *) Port three log methods from mod_log_config 1.3 to 2.0:
- CLF compliant '-' byte count, method and protocol.
- [Bill Stoddard]
-
- *) Add a new LogFormat directive, %c, that will log connection
- status at the end of the response as follows:
- 'X' - connection aborted before the response completed.
- '+' - connection may be kept-alive by the server.
- '-' - connection will be closed by the server.
- [Bill Stoddard]
-
- *) Expand APR for WinNT to fully accept and return utf-8 encoded
- Unicode file names and paths for Win32, and tag the Content-Type
- from mod_autoindex to reflect that charset if the feature
- macro APR_HAS_UNICODE_FS is true. [William Rowe]
-
- *) Compute the content length (and add appropriate header field) for
- the response when no content length is available and we can't use
- chunked encoding. [Jeff Trawick]
-
- *) Changed ap_discard_request_body() to use REQUEST_CHUNKED_DECHUNK,
- so that content input filters get dechunked data when using
- the default handler. Also removed REQUEST_CHUNKED_PASS.
- [Sascha Schumann]
-
- *) Add mod_ext_filter as an experimental module. This module allows
- the administrator to use external programs as filters. Currently,
- only filtering of output is supported. [Jeff Trawick]
-
- *) Most Apache functions work on EBCDIC machines again, as protocol
- data is now translated (again). [Jeff Trawick]
-
- *) Introduce ap_xlate_proto_{to|from}_ascii() to clean up some of
- the EBCDIC support. They are noops on ASCII machines, so this
- type of translation doesn't have to be surrounded by #ifdef
- CHARSET_EBCDIC. [Jeff Trawick]
-
- *) Fix mod_include. tag commands work again, and the server will
- send the FAQ again. This also allows mod_include to set aside
- buckets that include partial buckets.
- [Ryan Bloom and David Reid]
-
- *) Add suexec support back. [Manoj Kasichainula]
-
- *) Lingering close now uses the socket directly instead of using
- BUFF. This has been tested, but since all we can tell is that it
- doesn't fail, this needs to be really hacked on.
- [Ryan Bloom]
-
- *) Allow filters to modify headers and have those headers be sent to
- the client. The idea is that we have an http_header filter that
- actually sends the headers to the network. This removes the need
- for the BUFF to send headers.
- [Ryan Bloom]
-
- *) Charset translation: mod_charset_lite handles translation of
- request bodies. Get rid of the xlate version of ap_md5_digest()
- since we don't compute digests of filtered (e.g., translated)
- response bodies this way anymore. (Note that we don't do it at
- all at the present; somebody needs to write a filter to do so.)
- [Jeff Trawick]
-
- *) Input filters and ap_get_brigade() now have a input mode parameter
- (blocking, non-blocking, peek) instead of a length parameter.
- [hackathon]
-
- *) Update the mime.types file to the registered media types as
- of 2000-10-19. PR#6613 [Carsten Klapp <carsten.klapp home.net>,
- Tony Finch]
-
- *) Namespace protect some macros declared in ap_config.h
- [Ryan Bloom]
-
- *) Support HTTP header line folding with input filtering.
- [Greg Ames]
-
- *) Mod_include works again. This should still be re-written, but at
- least now we can serve an SHTML page again.
- [Ryan Bloom]
-
- *) Begin to remove BUFF from the core. Currently, we keep a pointer
- to both the BUFF and the socket in the conn_rec. Functions that
- want to use the BUFF can, functions that want to use the socket,
- can. They point to the same place.
- [Ryan Bloom]
-
- *) apr_psprintf doesn't understand %lld as a format. Make it %ld.
- [Tomas "Ögren" <stric ing.umu.se>]
-
- *) APR pipes on Unix and Win32 are now cleaned up automatically when the
- associated pool goes away. (APR pipes on OS/2 were already had this
- logic.) This resolvs a fatal file descriptor leak with CGIs.
- [Jeff Trawick]
-
- *) The final line of the config file was not being read if there was
- no \n at the end of it. This was caused by apr_fgets returning
- APR_EOF even though we had read valid data. This is solved by
- making cfg_getline check the buff that was returned from apr_fgets.
- If apr_fgets return APR_EOF, but there was data in the buf, then we
- return the buf, otherwise we return NULL.
- [Ryan Bloom]
-
- *) Piped logs work again in the 2.0 series.
- [Ryan Bloom]
-
- *) Restore functionality broken by the mod_rewrite security fix:
- rewrite map lookup keys and default values are now expanded
- so that the lookup can depend on the requested URI etc.
- PR #6671 [Tony Finch]
-
- *) SECURITY: Tighten up the syntax checking of Host: headers to fix a
- security bug in some mass virtual hosting configurations
- that can allow a remote attacker to retrieve some files
- on the system that should be inaccessible. [Tony Finch]
-
- *) Add a pool bucket type. This bucket is used for data allocated out
- of a pool. If the pool is cleaned before the bucket is destroyed, then
- the data is converted to a heap bucket, allowing it to survive the
- death of the pool.
- [Ryan Bloom]
-
- *) Add a flush bucket. This allows modules to signal that the filters
- should all flush whatever data they currently have. There is no way
- to actually force them to do this, so if a filter ignores this bucket,
- that's life, but at least we can try with this.
- [Ryan Bloom]
-
- *) Add an output filter for sub-requests. This filter just strips the
- EOS bucket so that we don't confuse the main request's core output
- filter by sending multiple EOS buckets. This change also makes sub
- requests start to send EOS buckets when they are finished.
- [Ryan Bloom]
-
- *) Make ap_bucket_(read|destroy|split|setaside) into macros. Also
- makes ap_bucket_destroy a return void, which is okay because it
- used to always return APR_SUCCESS, and nobody ever checked its
- return value anyway.
- [Cliff Woolley <cliffwoolley yahoo.com>]
-
- *) Remove the index into the bucket-type table from the buckets
- structure. This has now been replaced with a pointer to the
- bucket_type. Also add some macros to test the bucket-type.
- [Ryan Bloom]
-
- *) Renamed all MODULE_EXPORT symbols to AP_MODULE_DECLARE and all symbols
- for CORE_EXPORT to AP_CORE_DECLARE (namespace protecting the wrapper)
- and retitled API_EXPORT as AP_DECLARE and APR_EXPORT as APR_DECLARE.
- All _VAR_ flavors changes to _DATA to be absolutely clear.
- [William Rowe]
-
- *) Add support for /, //, //servername and //server/sharename
- parsing of <Directory> blocks under Win32 and OS2.
- [Tim Costello, William Rowe, Brian Harvard]
-
- *) Remove the function pointers from the ap_bucket type. They have been
- replaced with a global table. Modules are allowed to register bucket
- types and use then use those buckets.
- [Ryan Bloom]
-
- *) mod_cgid: In the handler, shut down the Unix socket (only for write)
- once we finish writing the request body to the cgi child process;
- otherwise, the client doesn't hit EOF on stdin. Small request bodies
- worked without this change (for reasons I don't understand), but large
- ones didn't. [Jeff Trawick]
-
- *) Remove file bucket specific information from the ap_bucket type.
- This has been moved to a file_bucket specific type that hangs off
- the data pointer in the ap_bucket type.
- [Ryan Bloom]
-
- *) Input filtering now has a third argument. This is the amount of data
- to read from lower filters. This argument can be -1, 0, or a positive
- number. -1 means give me all the data you have, I'll deal with it and
- let you know if I need more. 0 means give me one line and one line
- only. A positive number means I want no more than this much data.
-
- Currently, only 0 and a positive number are implemented. This allows
- us to remove the remaining field from the conn_rec structure, which
- has also been done.
- [Ryan Bloom]
-
- *) Big cleanup of the input filtering. The goal is that http_filter
- understands two conditions, headers and body. It knows where it is
- based on c->remaining. If c->remaining is 0, then we are in headers,
- and http_filter returns a line at a time. If it is not 0, then we are
- in body, and http_filter returns raw data, but only up to c->remaining
- bytes. It can return less, but never more.
- [Greg Ames, Ryan Bloom, Jeff Trawick]
-
- *) mod_cgi: Write all of the request body to the child, not just what
- the kernel would accept on the first write. [Jeff Trawick]
-
- *) Back out the change that moved the brigade from the core_output_filters
- ctx to the conn_rec. Since all requests over a given connection
- go through the same core_output_filter, the ctx pointer has the
- correct lifetime.
- [Ryan Bloom]
-
- *) Fix another bug in the send_the_file() read/write loop. A partial
- send by apr_send would cause unsent data in the read buffer to
- get clobbered. Complete making send_the_file handle partial
- writes to the network.
- [Bill Stoddard]
-
- *) Fix a couple of type fixes to allow compilation on AIX again
- [Victor J. Orlikowski <v.j.orlikowski gte.net>]
-
- *) Fix bug in send_the_file() which causes offset to be ignored
- if there are no headers to send.
- [Bill Stoddard]
-
- *) Handle APR_ENOTIMPL returned from apr_sendfile in the core
- filter. Useful for supporting Windows 9* with a binary
- compiled on Windows NT.
- [Bill Stoddard]
-
-Changes with Apache 2.0a7
-
- *) Reimplement core_output_filter to buffer/save bucket brigades
- across multiple calls to the core_filter. The brigade will be
- sent when either MIN_BYTES_TO_SEND or MAX_IOVEC_TO_WRITE
- thresholds are hit or the EOS bucket is received.
- [Bill Stoddard]
-
- *) Create experimental filter (buffer_filter) that coalesces bytes
- into one large buffer before invoking the next filter in the
- chain. This filter is particularly useful with the current
- implementation of mod_autoindex when it inserted above the
- chunk_filter. mod_autoindex generates a lot of brigades that
- containing buckets holding just a few bytes each. The
- buffer_filter coalesces these buckets into a single large bucket.
- [Bill Stoddard]
-
- *) Add apr_sendfile() support into the core_output_filter.
- [Bill Stoddard]
-
- *) Add apr_sendv() support into the core_output_filter.
- [Bill Stoddard]
-
- *) Fix mod_log_config so that it compiles cleanly with BUFFERED_LOGS
- [Mike Abbott <mja sgi.com>]
-
- *) Remove ap_send_fb. This is no longer used in Apache, and it doesn't
- make much sense, because Apache uses buckets instead of BUFFs now.
- [Ryan Bloom]
-
- *) send_the_file now falls back to a read/write loop on platforms that
- do not have sendfile.
- [Ryan Bloom and Brian Havard]
-
- *) Install apachectl correctly, and substitute the proper values so
- that it works again. [Ryan Bloom]
-
- *) Better(??) handle platforms that lack sendfile().
- [Jim Jagielski]
-
- *) APR now has UUID generation/formatting/parsing support.
- [Greg Stein]
-
- *) Begin the http_filter. This is an input filter that understands
- the absolute basic amount required to parse an HTTP Request. The
- goal is to be able to split headers from request body before passing
- the data back to the other filters.
- [Ryan Bloom]
-
- *) Bring forward from 1.3.13 the config directory implementation
- [Jim Jagielski]
-
- *) install apxs if it is created
- [Ryan Bloom]
-
- *) Added APR_IS_STATUS_condition test macros to eliminate canonical error
- conversions. [William Rowe]
-
- *) Now that we have ap_add_input_filter(), rename ap_add_filter() to
- ap_add_output_filter(). [Jeff Trawick]
-
- *) Multiple build and configuration fixes
- Build process:
-
- -add datadir and localstatedir substitutions
- -fix layout name
- -fix logfilename misspelling
- -fix evaluation of installation dir variables and
- -replace $foobar by $(foobar) to be usefull in the makefile
-
- Cross compile:
-
- -add rules for cross-compiling in rules.mk. Okay, rule to check for
- $CC_FOR_BUILD is still missing
- -use CHECK_TOOL instead of CHECK_PROG for ranlib
- -add missing "AR=@AR@" to severaly Makefile.in's
- -cache result for "struct rlimit"
- -compile all helper programs with native and cross compiler
- and use the native version to generate header file
- ["Rüdiger" Kuhlmann <Tadu gmx.de>]
-
- *) Prepare our autoconf setup for autoconf 2.14a and for cross-
- compiling.
- ["Rüdiger" Kuhlmann <Tadu gmx.de>]
-
- *) Fix a bug where a client which only sends \n to delimit header
- lines (netcat) gets a strange looking HTTP_NOT_IMPLEMENTED
- message. Start working on ebcdic co-existance with input
- filtering.
- [William Rowe, Greg Ames]
-
- *) If mod_so is enabled in the server always create libexec, even
- if there are no modules installed in this directory. This is a
- requirement for APXS to work correctly.
- [Ryan Bloom]
-
- *) Connection oriented output filters are now stored in the
- conn_rec instead of the request_rec. This allows us to add the
- output filter in the pre-connection phase instead of the
- post_read_request phase, which keeps us from trying to write an
- error page before we have a filter to write to the network.
- [Ryan Bloom, Jeff Trawick, and Greg Ames]
-
- *) Cleaning up an mmap bucket no longer deletes the mmap. An
- mmap can be used across multiple buckets (default_handler with
- byte ranges, mod_file_cache, mod_mmap_static), so cleanup of
- the mmap itself can't be associated with the bucket.
- [Jeff Trawick]
-
- *) Add .dll caching directive ISAPICacheFile to mod_isapi.
- [William Rowe]
-
- *) Radical surgery to improve mod_isapi support under Win32.
- Includes a number of newer ServerSupportFunction calls, support
- for ReadClient (in order to retrieve POSTs greater than 48KB),
- and general bug fixes to more reliably load ISAPI .dll's and
- prevent leaking handle resources. Note: There are still
- discrepancies between IIS's and Apache's ServerVariables, and
- async calls are still not supported. Additional warnings are
- logged to facilitate debugging of unsupported ISAPI calls.
- [William Rowe]
-
- *) Add input filtering to Apache. The basic idea for the input
- filters is the same as the ideas for output filters. The biggest
- difference is that instead of calling ap_pass_brigade, ap_get_brigade
- should be called, and the order of execution for the filter itself is
- different. When writing an output filter, a brigade is passed in,
- and filters operate directly on that brigade, when done, they call
- ap_pass_brigade. Input filters are the exact opposite. Because input
- is not a push operation, filters first call ap_get_brigade. When this
- function returns, the input filter will be left with a valid brigade.
- The input filter should then operate on the brigade, and return.
- [Ryan Bloom]
-
- *) Fix building on BSD/OS using its native make. The build system
- falls back to the BSD .include directive on that host platform.
- [Sascha Schumann]
-
- *) Expand dbmmanage to allow -d -m -s -p options for Crypt, MD5,
- SHA1 and plaintext password encodings. Make feature tests a
- bit more flexible. [William Rowe]
-
- *) Charset translation: mod_charset_lite handles output content
- translation in a filter. mod_charset_lite no longer ignores
- subrequests. A bunch of cruft related to BUFF's support for
- translating request and response bodies was removed.
- [Jeff Trawick]
-
- *) Move the addition of the CORE filter to the post_read_request
- hook in http_core.c. This removes the need to add the filter in
- multiple places and allows for an SSL module to be added much
- simpler. [Ryan Bloom]
-
- *) SECURITY [CVE-2000-0913] (cve.mitre.org):
- Fix a security problem that affects certain configurations of
- mod_rewrite. If the result of a RewriteRule is a filename that
- contains expansion specifiers, especially regexp backreferences
- $0..$9 and %0..%9, then it may be possible for an attacker to
- access any file on the web server. [Tony Finch]
-
- *) Fix a bug where errors that are detected during early request parsing
- don't produce visible HTTP error messages at the browser, because
- the core_filter wasn't present. [Greg Ames]
-
- *) Provide apr_socklen_t as a portability aid.
- [Victor J. Orlikowski]
-
- *) Overhaul of dbmmanage to allow a groups arg (as in Apache 1.2)
- as well as a comment arg to the add, adduser and update cmds.
- update allows the user to clear or preserve pw/groups/comment.
- Fixed a bug in dbmmanage that prevented the check option from
- parsing a password followed by :group... text. Corrected the
- seed calcualation for Win32 systems, and added -lsdbm support.
- [William Rowe]
-
- *) Configured mod_auth_dbm to compile with sdbmlib under Win32.
- [William Rowe]
-
- *) Avoid a segfault when parsing .htaccess files. An
- uninitialized tree pointer was passed to ap_build_config().
- [Jeff Trawick]
-
- *) Change the way that inet_addr & inet_network are checked for
- in APR's configure process to allow BeOS BONE to correctly
- find them. With this change BeOS BONE now builds from source
- with no problems. [David Reid]
-
- *) Fix a bug in apr_create_process() for Unix. The NULL signifying
- the end of the parameters to execve() was stored in the wrong
- location, overlaying the storage beyond the newargs[] array and
- also passing uninitialized storage to execve(), which would
- sometimes fail with EFAULT. [Jeff Trawick]
-
- *) Fix a bug parsing configuration file containers. With a sequence
- like this in the config file
-
- <IfModule mod_kilroy.c>
- any stuff
- </IfModule>
- <IfModule mod_lovejoy.c>
- (blank line)
- any stuff
- </IfModule>
-
- the second container would be terminated at the blank line due to
- sediment in the buffer from reading the prior </IfModule> and an
- error message would be generated for the real </IfModule> for the
- second container. Also due to this problem, any two characters
- could be used for "</" in the close of a container.
- [Jeff Trawick]
-
- *) ap_add_filter prototype changed to remove the ctx pointer. The
- pointer still remains in the filter structure, but it can not be
- a part of the ap_add_filter prototype. The reason is that when
- the core uses AddFilter to add a filter to the stack it doesn't
- know how to allocate the ctx pointer, or even how much memory should
- be allocated. The filters will have to be responsible for allocating
- the ctx memory when they need it.
- [Ryan Bloom]
-
- *) Add an AddFilter directive. This directive takes a list of filters
- that should be activated for the requested resource.
- [Ryan Bloom]
-
- *) apr_snprintf(): Get quad format strings working on OS/390 (and perhaps
- some other platforms). [Jeff Trawick]
-
- *) Modify mod_include to be a filter. Currently, it has only been tested
- on actual files, but it should work for CGI scripts too.
- [Ryan Bloom]
-
- *) apr_putc(), apr_puts() for Unix: handle buffered files and interrupted
- writes. apr_flush() for Unix: handle interrupted writes.
- [Jeff Trawick]
-
- *) NameVirtualHost can now take "*" as an argument instead of
- an IP address. This allows you to create a purely name-based
- virtual hosting server that does not have any IP addresses in
- the configuration file and which ignores the local address
- of any connections. PR #5595, PR #4455 [Tony Finch]
-
- *) Fix some compile warnings in mod_mmap_static.c
- [Mike Abbott <mja sgi.com>]
-
- *) Fix chunking problem with CGI scripts. The general problem was that
- the CGI modules were adding an EOS bucket and then the core added an
- EOS bucket. The chunking filter finalizes the chunked response when it
- encounters an EOS bucket. Because two EOS buckets were sent, we
- finalized the response twice. The fix is to make sure we only send one
- EOS, by utilizing a flag in the request_rec.
- [Ryan Bloom]
-
- *) apr_put_os_file() now sets up the unget byte appropriately on Unix
- and Win32. Previously, the first read from an apr_file_t set up via
- apr_put_os_file() would return a '\0'. [Jeff Trawick]
-
- *) Mod_cgid now creates a single element bucket brigade, with a pipe
- bucket, instead of using BUFF's and ap_r*.
- [Ryan Bloom]
-
- *) APRVARS.in no longer overwrites the EXTRA_LIBS variable.
- [Mike Abbott <mja sgi.com>]
-
- *) Remove ap_bopenf from buff code. This required modifying the file_cache
- code to use APR file's directly instead of going through BUFFs.
- [Ryan Bloom]
-
- *) Fix compile break on some platforms for mod_mime_magic.c
- [John K. Sterling <sterling covalent.net>]
-
- *) Fix merging of AddDefaultCharset directive.
- PR #5872 (1.3) [Jun Kuriyama <kuriyama imgsrc.co.jp>]
-
- *) Minor revamp of the rlimit sections of code. We now test
- explicitly for setrlimit and getrlimit. Also, unixd_set_rlimit()
- is now "available" even if the platform doesn't support
- the rlimit family (it's just a noop though). [Jim Jagielski]
-
- *) Migrate the pre-selection of which MPM to use for specific
- platforms to hints.m4, which contains (or should contain)
- all platform specific "hints". [Jim Jagielski]
-
- *) Remove IOLs from Apache. With filtering, IOLs are no longer necessary
- [Ryan Bloom]
-
- *) Add tables with non-string/binary values to APR.
- [Ken Coar]
-
- *) Fix some bad calls to ap_log_rerror() in mod_rewrite.
- [Jeff Trawick]
-
- *) Update PCRE to version 3.2. [Ryan Bloom]
-
- *) Change the way buckets' destroy functions are called so that
- they can be more directly used when changing the type of a
- bucket in place. [Tony Finch]
-
- *) Add generic support for reference-counting the resources used by
- buckets, and alter the HEAP and MMAP buckets to use it. Change
- the way buckets are initialised to support changing the type of
- buckets in place, and use it when setting aside TRANSIENT buckets.
- Change the implementation of TRANSIENT buckets so that it can be
- mostly shared with IMMORTAL buckets, which are now implemented.
- [Tony Finch]
-
-Changes with Apache 2.0a6
-
- *) Add support to Apache and APR for dsos on OS/390. [Greg Ames]
-
- *) Add a chunking filter to Apache. This brings us one step closer
- to removing BUFF. [Ryan Bloom]
-
- *) ap_add_filter now adds filters in a LIFO fashion. The first filter
- added to the stack is the last filter to be called. [Ryan Bloom]
-
- *) Apache 2.0 has been completely documented using Scandoc. The
- docs can be generated by running 'make docs'. [Ryan Bloom]
-
- *) Add filtered I/O to Apache. This is based on bucket brigades,
- Currently the buckets still use BUFF under the covers, but that
- should change quickly. The only currently written filter is the
- core filter which just calls ap_bwrite. [The Apache Group]
-
- *) APR locks on Unix: Let APR_LOCKALL locks work when APR isn't
- built with thread support. [Jeff Trawick]
-
- *) Abort configuration if --with-layout was specified and there's
- no layout definition file. [Ken Coar]
-
- *) Add support for '--with-port=n' option to configure. [Ken Coar]
-
- *) Add support for extension methods for the Allow response header
- field, and an API routine for accessing r->allowed and the
- list of extension methods in a unified manner. [Ken Coar]
-
- *) mod_cern_meta: fix broken file reading loop in scan_meta_file().
- [Rob Simonson <simo us.ibm.com>]
-
- *) Get xlate builds working again. The apr renaming in 2.0a5 broke
- APACHE_XLATE builds. [Jeff Trawick]
-
- *) A configuration file parsing problem was fixed. When the
- configuration file started with an IfModule/IfDefine container,
- only the last statement in the container would be retained.
- [Jeff Trawick]
-
-Changes with Apache 2.0a5
-
- *) Perchild is serving pages after passing them to different child
- processes. There are still a lot of bugs, but this does work. I
- have made requests against the same installation of Apache, and had
- different servers use different user IDs to serve the responses.
- This change moves to using socketpair instead of an AF_UNIX socket.
- [Ryan Bloom]
-
- *) Perchild MPM still doesn't work perfectly, but it is serving pages.
- It can't seem to pass between child processes yet, but I think we
- are closer now than before. This moves us back to using Unix
- Domain Sockets. [Ryan Bloom]
-
- *) libapr functions and types renamed with apr_ prefix.
- #include "apr_compat.h" for 1.3.x backwards compat
- [Perl]
-
- *) Fix problems with APR sockaddr handling on Win32. It didn't always
- return the right information on the local socket address.
- [Gregory Nicholls <gnicholls level8.com>]
-
- *) ap_recv() on Win32: Set bytes-read to 0 on error.
- [Gregory Nicholls <gnicholls level8.com>]
-
- *) Add an option to not detach from the controlling terminal without
- going into single process mode. This allows for much easier
- debugging of the process startup code. [Ryan Bloom]
-
- *) ab: don't use perror() to report the failure of an APR function.
- [Jeff Trawick]
-
- *) Make dexter, mpmt_pthread, and perchild MPMs not destroy the
- scoreboard on graceful restarts.
- [Ryan Bloom]
-
- *) Fix segfault/SIGSEGV when running gzip from mod_mime_magic.c.
- An invalid ap_proc_t was passed to ap_create_process().
- [Jeff Trawick]
-
- *) Allow modules to register filters. Those filters are still
- never called, but this is a step in the right direction.
- [Ryan Bloom and Greg Stein]
-
- *) Register the mod_cgid daemon process for cleanup so that it is
- killed at termination if it does not die when the parent gets
- SIGTERM. This change is to fix occasional problems where the
- process stays around. Bugs in similar logic in mod_rewrite and
- mod_include were also fixed. [Jeff Trawick]
-
- *) Fix a bug in the time handling. Basically, we were imploding a time
- in ap_parseHTTPdate, but it had bogus data in the exploded time format.
- Namely, tm_usec and tm_gmtoff were not filled out. ap_implode_time
- uses those two fields to adjust the time value. Because of the HTTP
- spec, both of those values can be zero'ed out safely. This fixes
- the bug correctly. [Ryan Bloom]
-
- *) Fix a couple of place in the Windows code where the wrong error
- code was being returned. [Gregory Nicholls <gnicholls level8.com>]
-
- *) Fix POOL_DEBUG (at least for prefork mpm). [Dean Gaudet]
-
- *) Added the APR_EOL_STR macro for platform dependent differences in
- logfiles and other raw text (such as all APR files). Fixes logfiles
- not terminated with cr/lf sequences in Win32. [William Rowe]
-
- *) Move all strings functions in APR to src/lib/apr/strings and create
- apr_strings.h for the prototypes. [Ryan Bloom]
-
- *) APR lock fixes: when using SysV sems, flock(), or fcntl(), be sure
- to repeat the syscall until we stop getting EINTR. I noticed a
- related problem at termination (SIGTERM) on FreeBSD when using
- fcntl(). Apache 1.3 had these new loops too. Also, make the flock()
- implementation work properly with child init. Previously, ap_lock()
- was essentially a no-op because all children were using different
- locks and thus nobody ever blocked. [Jeff Trawick]
-
- *) The htdocs/ tree has been moved out of the CVS source tree into
- a separate area for easier development. This has NO EFFECT on
- end-users or Apache installations. [Ken Coar]
-
- *) Integrate the mod_dav module for WebDAV protocol handling. This
- adds the dav and dav_fs modules, the SDBM library, and additional
- XML handling utilities. [Greg Stein]
-
- *) Clean out obsolete names (from httpd.h) for the HTTP Status Codes
- [Greg Stein]
-
- *) Update the lib/expat-lite/ library (bring forward changes from
- the Apache 1.3 repository). [Greg Stein]
-
- *) If sizeof(long long) == sizeof(long), then prefer long in APR
- configure.in. [Dave Hill <ddhill zk3.dec.com>]
-
- *) Add ap_sendfile for Tru64 Unix. Also, add an error message for
- machines where sendfile is detected, but nobody has written ap_sendfile.
- [Dave Hill <ddhill zk3.dec.com>]
-
- *) Compile fixes in mod_mmap_static. [Victor J. Orlikowski]
-
- *) ab would start up more connections than needed, then quit when the
- desired number were finished. Also fixed a logic error involving
- ab keepalives. [Victor J. Orlikowski]
-
- *) WinNT: Implement non-blocking pipes with timeouts to communicate
- with CGIs. Apache 2.0a4 had non-blocking pipes but without
- timeouts (i.e, if a timeout was specified, the pipe reverted to
- a full blocking pipe). Now the behaviour is more in line with
- Unix non-blocking pipes.
- [Bill Stoddard]
-
- *) WinNT: Implement accept socket reuse. Using mod_file_cache to
- cache open file handles along with accept socket reuse enables
- Apache 2.0 to serve non-keepalive requests for static files at
- 3x the rate of Apache 1.3.(e.g, Apache 1.3 will serve 400 rps
- and Apache 2.0 will serve almost 1200 rps on my system).
- [Bill Stoddard]
-
- *) Merge mod_mmap_static function into mod_file_cache. mod_file_cache
- supports two config directives, mmapfile (same behavious as
- mod_mmap_static) and cachefile. Use the cachefile directive
- to cache open file handles. This directive only works on systems
- that have implemented the ap_sendfile API. cachefile works today
- on Windows NT, but has not been tested on any flavors of Unix.
- [Bill Stoddard]
-
- *) Cleanup the configuration. With the last few changes the
- configuration process automatically:
- inherits information about how to build from APR. Allowing
- APR to inform Apache that it should or should not use -ldl
-
- Detects which mod_cgi should be used mod_cgi or mod_cgid,
- based on the threading model
-
- Apache calls APR's configure process before finishing it's
- configuration processing, allowing for more information flow
- between the two.
- [Ryan Bloom]
-
-
- *) Change Unix and Win32 ap_setsockopt() so that APR_SO_NONBLOCK
- with non-zero argument makes the socket non-blocking. BeOS and
- OS/2 already worked this way. [Jeff Trawick]
-
- *) ap_close() now calls ap_flush() for buffered files, so write
- operations work a whole lot better on buffered files.
- [Jeff Trawick]
-
- *) Fix error messages issued from MPMs which explain where to change
- compiled-in limits (e.g., ThreadsPerChild, MaxClients, StartTreads).
- [Greg Ames]
-
- *) ap_create_pipe() now leaves pipes in blocking state. (This helps
- reduce the number of syscalls on Unix.) ap_set_pipe_timeout() is
- now the way that the blocking state of a pipe is manipulated.
- ap_block_pipe() is gone. [Jeff Trawick]
-
- *) Correct the problem where the only local host name that the IP stack
- can discover are 'undotted' private names. If no fully qualified
- domain name can be identified, the default ServerName will be set to
- the machine's IP address string. A warning is always provided if the
- ServerName not specified, but assumed. Solves PR6215 [William Rowe]
-
- *) Repair problems with config file processing which caused segfault
- at init when virtual hosts were defined and which caused ServerName to
- be ignored when there was no valid DNS setup. [Jeff Trawick]
-
- *) Removed pointless ap_is_aborted macro function. [Roy Fielding]
-
- *) Add ap_sendfile implementation for AIX
- [Victor J. Orlikowski]
-
- *) Repair C++ compatibility in ap_config.h, apr_file_io.h,
- apr_network_io.h, and apr_thread_proc.h.
- [Tyler J. Brooks <tylerjbrooks home.com>, Jeff Trawick]
-
- *) Bring the allocation and pool debugging code back into a working
- state. This will need to be tested as so far it's only been used on
- BeOS. [David Reid]
-
- *) Change configuration command setup to be properly typesafe when in
- maintainer mode. Note that this requires a compiler that can initialise
- unions. [Ben Laurie]
-
- *) Turn on buffering for config file reads. Part of this was to
- repair buffered I/O support in Unix and implement buffered
- ap_fgets() for all platforms. [Brian Havard, Jeff Trawick]
-
- *) Win32: Fix problem where UTC offset was not being set correctly
- in the access log. Problem reported on news group by Jerry Baker.
- [Bill Stoddard]
-
- *) Fix segfault when reporting this type of syntax error:
- "</container> without matching <container> section", where
- container is VirtualHost or Directory or whatever.
- [Jeff Trawick]
-
- *) SECURITY [CAN-2000-1204] (cve.mitre.org):
- Prevent the source code for CGIs from being revealed when
- using mod_vhost_alias and the CGI directory is under the document root
- and a user makes a request like http://www.example.com//cgi-bin/cgi
- as reported in <news:960999105.344321 ernani.logica.co.uk>
- [Tony Finch]
-
- *) Add support for the new Beos NetwOrking Environment (BONE)
- [David Reid]
-
- *) xlate: ap_xlate_conv_buffer() now tells the caller when the
- final input char is incomplete; ap_bwrite_xlate() now handles
- incomplete final input chars. [Jeff Trawick]
-
- *) Yet another update to saferead/halfduplex stuff -- need to ensure
- that a bhalfduplex call occurs before logging or else DNS and
- such can delay the last packet of the response. [Dean Gaudet]
-
- *) Some syscall reduction in APR on unix -- don't seek when setting
- up an mmap; and don't fcntl() more than once per socket.
- [Dean Gaudet]
-
- *) When mod_cgid is started as root, the cgi daemon now switches
- to the configured User/Group (like other httpd processes)
- instead of continuing as root. [Jeff Trawick]
-
- *) The prefork MPM now uses an APR lock for the accept() mutex.
- It has not been getting a lock at all recently. httpd -V now
- displays APR's selection of the lock mechanism instead of the
- symbols previously respected by prefork. [Jeff Trawick]
-
- *) Change the mmap() feature test to check only for existence.
- The previous check required features not used by Apache.
- [Greg Ames]
-
- *) Fix a couple of bugs in mod_cgid: The cgi arguments were
- sometimes mangled. The len parm to accept() was not
- initialized, leading sometimes to an endless loop of failed
- accept() calls on OS/390 and anywhere else that failed the call
- if the len was negative. Use <sys/un.h> for struct sockaddr_un
- instead of declaring it ourselves to fix a compilation problem
- on Solaris. [Jeff Trawick]
-
- *) Add Resource limiting code back into Apache 2.0. [Ryan Bloom]
-
- *) Fix zombie process problem with mod_cgi. [Jeff Trawick]
-
- *) Port mod_mmap_static to 2.0. Make it go faster. [Greg Ames]
-
- *) Fix storage overlay when loading dsos. Symptom: Apache dies at
- initialization if ALLOC_DEBUG is defined; no known symptom
- otherwise. [Jeff Trawick]
-
- *) Fix typo in configure script when checking for mod_so. bash
- doesn't seem to have a problem but /bin/sh on Solaris does.
- Symptom: "./configure: test: unknown operator =="
- [Jeff Trawick]
-
- *) Rebind the Win32 NT and 9x services control into the MPM.
- All console, WinNT SCM and Win9x pseudo-service control code is
- now wrapped within the WinNT MPM.
- [William Rowe]
-
- *) Make a copy of getenv("PATH") before storing for later use. Some
- getenv() implementations use the same storage for successive calls.
- CGIs on OS/390 had a bad PATH due to this. [Jeff Trawick]
-
- *) Server Tokens work in 2.0 again. This also propogates the change
- to allow just the product name in the server string using
- PRODUCT_ONLY.
- [Ryan Bloom]
-
-Changes with Apache 2.0a4
-
- *) EBCDIC: Rearrange calls to ap_checkconv() so that most handlers
- won't need to call it. [Greg Ames, Jeff Trawick]
-
- *) Move pre_config hook call to between configuration read and config
- tree walk. This allows all modules to implement pre_config hooks
- and know that they will be called at an appropriate time.
- [Ryan Bloom]
-
- *) mod_cgi, mod_cgid: Make ScriptLog directive work again.
- [Jeff Trawick]
-
- *) Add pre-config hooks back to all modules.
- [Ryan Bloom]
-
- *) Fix a SIGSEGV in ap_md5digest(), which is used when you have
- ContentDigest enabled and we can't/don't mmap the file.
- [Jeff Trawick]
-
- *) We now report the correct line number for syntax errors in config
- files. [Ryan Bloom, Greg Stein, Jeff Trawick]
-
- *) Brought mod_auth_digest up to synch with 1.3, fixed ap_time_t-
- related bugs, and changed shmem/locking to use apr API. Shared-mem
- is currently disabled, however, because of problems with graceful
- restarts. [Ronald Tschalär]
-
- *) Fix corruption of IFS variable in --with-module= handling.
- Depending on the user's shell or customization thereof, there
- would be errors generating ap_config_auto.h later in the configure
- procedure. [Jeff Trawick]
-
- *) mod_cgi: Restore logging of stderr from child process when ScriptLog
- isn't used (as in 1.3), except that on Unix it is now logged via
- ap_log_rerror() instead of by the child having STDERR_FILENO refer
- to the error log. [Greg Ames, Jeff Trawick]
-
- *) Add '-D' argument processing for run time configuration defines.
- [William Rowe]
-
- *) Organize http_main.c as independent code, such that no code or
- global data is exported from it. WIN32 will dynamically link it
- to the server core, so this will prevent mutual dependency.
- [William Rowe]
-
- *) Add separate dynamic linkage tags APR_EXPORT(), APR_EXPORT_NONSTD()
- and APR_VAR_EXPORT to correctly resolve apr functions and globals.
- [William Rowe]
-
- *) Add Win9x service execution and Ctrl+C/Ctrl+Break/Shutdown handlers.
- [William Rowe, Jan Just Keijser <KEIJSERJJ logica.com>]
-
- *) Add mod_charset_lite for configuring character set translation.
- [Jeff Trawick]
-
- *) Add '-n' option to htpasswd to make it print its user:pw record
- on stdout rather than having to frob a text file. [Ken Coar]
-
- *) Fix saferead. Basically, we flush the output buffer if a read on the
- input will block.
- [Ryan Bloom]
-
- *) APR: Add ap_xlate_get_sb() so that an app can find out whether or not
- a conversion is single-byte only. [Jeff Trawick]
-
- *) BEOS: ap_shutdown should return APR_SUCCESS or errno. Note that
- the BeOS 5.0 documentation says that shutdown doesn't work yet.
- [Roy Fielding]
-
- *) Fix some minor errors where pid was being manipulated as an int
- instead of the portable pid_t. [Roy Fielding]
-
- *) Fix some error log prints that were printing the pointer to a
- structure rather than the pid within the structure.
- [Jeff Trawick, Roy Fielding]
-
- *) ab: Fix a command-line processing bug; track bad headers in
- err_response; support reading headers up to 2K.
- [Ask Bjoern Hansen <ask valueclick.com>]
-
- *) Fix ap_resolve_env() so that it handles new function added in a prior
- alpha (see "Added the capability to do ${ENVVAR} constructs in the
- config file.") as well as the constructs used by mod_rewrite.
- [Paul Reder <rederpj raleigh.ibm.com>]
-
- *) Apache 2.0 builds and runs on OS/390. [Jeff Trawick, Greg Ames]
-
- *) Change the EBCDIC support in functions for MD5, SHA1, and base 64 to use
- APR to perform translation, instead of accessing the hard-coded tables
- in 1.3's ebcdic.c. [Jeff Trawick]
-
- *) Fix some bugs (mostly lost 1.3 code) in ab's command-line processing.
- [Jeff Trawick]
-
- *) Add the ability to hook into the config file reading phase. Basically
- if a directive is specified EXEC_ON_READ, then when that directive is
- read from the config file, the assocaited function is executed. This
- should only be used for those directives that must muck with HOW the
- server INTERPRETS the config. This should not be used for directives
- that re-order or replace items in the config tree. Those changes should
- be made in the pre-config step.
- [Ryan Bloom]
-
- *) Add mod_example to the build system.
- [Tony Finch]
-
- *) APR: Add ap_xlate_conv_byte() to convert one char between single-
- byte character sets. [Jeff Trawick]
-
- *) Pick up various EBCDIC fixes from 1.3 (from Martin
- Kraemer and Oliver Reh originally according to the change log).
- [Jeff Trawick]
-
- *) Fix a couple of problems in RFC1413 support (controlled by the
- IdentityCheck directive). Apache did not build the request string
- properly and more importantly Apache would loop forever if the
- would-be ident server dropped the connection before sending a
- properly terminated response. [Jeff Trawick]
-
- *) apxs works in 2.0.
- [Ryan Bloom]
-
- *) Reliable piped logs work in 2.0.
- [Ryan Bloom]
-
- *) Introduce a hash table implementation into APR to be used for
- replacing tables and other random data structures in Apache.
- [Tony Finch]
-
- *) Add some more error reporting to htpasswd in the case of problems
- generating or accessing the temporary file. Also, pass in a
- buffer if the implementation knows how to use it (i.e., if L_tmpnam
- is defined). [Ken Coar]
-
- *) Configure creates config.nice now containing your configure
- options. Syntax: ./config.nice [--more-options]
- [Sascha Schumann]
-
- *) Fix various return code problems in APR on Win32. For most of
- these, APR was returning APR_EEXIST instead of GetLastError()/
- WSAGetLastError(). [Jeff Trawick]
-
- *) Make piped logs work again in version 2.0
- [Ryan Bloom]
-
- *) Add VPATH support to UNIX build system of Apache and APR.
- [Sascha Schumann]
-
- *) Fix ap_tokenize_to_argv to respect the const arguments that are
- passed to it.
- [Ryan Bloom]
-
- *) Fix mm's memcpy/memset macros, pointer arithmetic was broken.
- Patch submitted to author.
- [Sascha Schumann]
-
- *) Fix mm configuration on Solaris 8 x86 and OS/390. Don't require
- /sbin in PATH on FreeBSD (all submitted to rse previously)
- [Jeff Trawick]
-
- *) Fix building Pthread-based MPMs on OpenBSD
- [Sascha Schumann] PR#26
-
- *) Fix ap_readdir() problem on systems where d_name[] field in
- struct dirent is declared with only one byte. (This problem only
- affected multithreaded builds.) This caused a segfault during
- pool cleanup with mod_autoindex on Solaris (Solaris 8 x86, at
- least). [Jeff Trawick]
-
- *) Fix some make-portability problems on at least Tru64, Irix
- and UnixWare.
- [Sascha Schumann] PR#18, PR#39
-
- *) Add ap_sigwait() to support old-style sigwait() on systems
- like OS/390 and UnixWare.
- [Sascha Schumann]
-
- *) Add POSIX-thread flags for more platforms.
- [Sascha Schumann]
-
- *) Fix some minor bugs in ap_strerror(). Teach ap_strerror()
- (on Unix, at least) to handle resolver errors. Fix a bug in
- the definition of APR_ENOMEM so that ap_strerror() can spit
- out the correct error message for it.
- [Jeff Trawick]
-
-Changes with Apache 2.0a3
-
- *) mod_so reports ap_os_dso_error() if ap_dso_load() fails
- [Doug MacEachern]
-
- *) API: *HOOK* macros now have an AP_ prefix
- [Doug MacEachern]
-
- *) Win32: Eliminate redundant calls to initialize winsock.
- [Tim Costello <timcostello ozemail.com.au>]
-
- *) Fix bugs initializing ungetchar for pipes.
- [Chia-liang Kao <clkao CirX.ORG>]
-
- *) The ab program in the src/support directory is now portable using
- APR.
- [Ryan Bloom]
-
- *) Support directory is being compiled when the server is built
- [Ryan Bloom]
-
- *) The configure option --with-program-name has been added to allow
- developers to rename the executable at configure time. This also
- changes the name of the config files to match the executable's name.
- [Ryan Bloom]
-
- *) mod_autoindex: Add `IndexOptions +VersionSort', to nicely sort filenames
- containing version numbers. [Martin Pool]
-
- *) ap_open(..,APR_OS_DEFAULT,..) uses perms 0666 instead of 0777 on
- Unix; access_log and error_log now created with these perms; non-
- Unix is unaffected [Jeff Trawick]
-
- *) Finished move of ap_md5 routines to apr_md5. Removed ap_md5.h.
- Replaced more magic numbers with MD5_DIGESTSIZE.
- [William Rowe, Roy Fielding]
-
- *) Win32: Get mod_auth_digest compiling and added to the Windows
- build environment. Not tested and I'd be suprised if it
- actually works. [Bill Stoddard]
-
- *) Revamp the Win32 make environment. Makefiles have been removed and
- Apache.dsw created to bring together all the pieces. Create new file
- os/win32/BaseAddr.ref to define module base addresses (to prevent
- dll relocation at start-up).
- [William Rowe, Greg Marr, Tim Costello, Bill Stoddard]
-
- *) [EBCDIC] Port Paul Gilmartin's CRLF patch from 1.3. This replaces most
- of the \015, \012, and \015\012 constants with macros.
- [Greg Ames]
-
- *) Add ap_xlate_open() et al for translation of text between different
- character sets. The initial implementation requires iconv().
- [Jeff Trawick]
-
- *) More FAQs and answers from comp.infosystems.www.servers.unix.
- [Joshua Slive <slive finance.commerce.ubc.ca>]
-
- *) CGI output is being timed out now.
- [Ryan Bloom]
-
- *) Fix the problem with dieing quietly. dupfile now takes a pool which
- is used by the new apr file. There is no reason to create a new file
- with the same lifetime as the original file.
- [Ryan Bloom]
-
- *) Win32: Attempt to eliminate dll relocation at start-up by specifying
- module base addresses. This will help shooting seg faults
- in the field. [William Rowe <wrowe lnd.com>]
-
- *) Update Apache on Windows documentation. Add new document
- describing how to compile Apache on Windows.
- [William Rowe <wrowe lnd.com>]
-
- *) ap_set_pipe_timeout(), ap_poll(), and APR_SO_TIMEOUT now take
- microseconds instead of seconds. Some storage leaks and other
- minor bugs in related code were fixed. [Jeff Trawick]
-
- *) Win32: First cut at getting mod_isapi working under 2.0
- [William Rowe <wrowe lnd.com>]
-
- *) First stab at getting mod_auth_digest working under 2.0
- quick change summary:
- - moved the random byte generation (ap_generate_random_bytes) into APR
- - now uses ap_time_t
- - compiles and runs on linux
- - tested with amaya
- [Brian Martin <bmartin penguincomputing.com>]
-
- *) Win32: Move the space stripping of physical service names
- fix up from Apache 1.3. #include'ing "ap_mpm.h" fixes up an
- unresolved symbol. Add dependency checking to the
- CreateService call to ensure TCPIP and AFP (winsock) is started
- before Apache.
- [William Rowe <wrowe lnd.com>]
-
- *) Win32: Add code to perform latebinding on functions that may
- not exist on all levels of Windows where Apache runs. This
- is needed to allow Apache to start-up on Win95/98. All calls
- to non portable functions should be protected with
- ap_oslevel checks to prevent runtime segfaults.
- [William Rowe <wrowe lnd.com>]
-
- *) Fix fallback default values for SHM_R and SHM_W [Martin Kraemer]
-
- *) Get lingering_close() working again. [Dean Gaudet, Jeff Trawick]
-
- *) Win32: Get non-blocking CGI pipe reads working under Windows NT.
- This addresses PR 1623. Still need to address timing out runaway
- CGI scripts. [Bill Stoddard]
-
- *) Win32: Make ap_stat Windows 95/98 friendly
- [William Rowe <wrowe lnd.com>]
-
- *) Win32: Fix a bug in ap_get_oslevel which causes GetVersionEx() to
- always fail. Need to initialise the dwOSVersionInfoSize member of the
- OSVERSIONINFO struct before calling GetVersionEx, so GetVersionEx
- always fails.
-
- The patch also enhances ap_get_oslevel (and the associated enum) to
- handle selected service packs for NT4, and adds recognition for
- Windows 2000. This is useful, eg. if we can recognise NT4 SP2 then
- we can use ReadFileScatter and WriteFileGather in readwrite.c.
- [Tim Costello <Tim.Costello BTFinancialgroup.com>]
-
- *) Get mod_rewrite building and running, and mod_status building for Win NT
- [Allan Edwards <ake raleigh.ibm.com>]
-
- *) Patch to port mod_auth_db to the 2.0 api and also to support
- Berlekey DB 3.0. It works for me with both Berkeley DB 3.0.55 and
- 2.7.7. It should work with version 1 as well but I haven't tested it.
- [Brian Martin <bmartin penguincomputing.com>]
-
- *) Get APR DSO code working under Windows. Includes cross platform
- fixes to mod_so.c.
- [<Tim.Costello BTFinancialgroup.com>]
-
- *) Fix some of the Windows APR time functions.
- [William Rowe]
-
- *) FAQ changes related to tidying up historical documents on the web site.
- [Joshua Slive <slive finance.commerce.ubc.ca>]
-
- *) Move Windows DSO code into APR.
- [Bill Stoddard]
-
- *) Eliminate apr_win.h and apr_winconfig.h (and the ugly #ifdefs they cause).
- Now, apr.h and apr_config.h are generated from apr.hw and apr_config.hw
- at build time. At this point, the server will not compile on Windows because
- of the recent DSO commits. Fixing those next.
- [Bill Rowe & Bill Stoddard]
-
- *) Added error checking for file I/O APR routines.
- [Jon Travis <jtravis covalent.net>]
-
- *) APR: Don't use the values of resolver error codes for the
- corresponding APR error codes. On Unix and Win32, return the
- proper APR error code after a resolver error. [Jeff Trawick]
-
-Changes with Apache 2.0a2
-
- *) Renamed the executable back to httpd on all platforms other
- than Win32
- [Ryan Bloom]
-
- *) Allow BeOS to survive restarts, log properly and a few
- small things it had problems with due to the way it setup
- users and groups. [David Reid]
-
- *) Get mod_rewrite working with APR locks
- [Paul Reder <rederpj raleigh.ibm.com>]
-
- *) Actually remove the sempahore when the lock cleanup routine
- is called on BeOS. [David Reid]
-
- *) Clear hook registrations between reads of the config file.
- When DSOs are unloaded and re-loaded the old hook pointers may
- no longer be valid. This fix eliminates potential segfaults.
- [Allan Edwards <ake raleigh.ibm.com>]
-
- *) Fix a problem with Sigfunc not being defined or bypassed
- if sigaction() wasn't found. [Jim Jagielski]
-
- *) Fix the locking mechanism on BSD variants. They now use fcntl
- locks. This allows the server to start and serve pages.
- [Ryan Bloom]
-
- *) First cut at getting the Win32 installer to work
- [William Rowe <wrowe lnd.com>]
-
- *) Get htpasswd compiling under Windows
- [William Rowe <wrowe lnd.com>]
-
- *) Change the log message for a bind() failure to show the
- interface and port number. [Jeff Trawick]
-
- *) Import the documentation from 1.3.12 and bring parts of it
- up-to-date with respect to the changes that have occurred
- in 2.0.
- [Tony Finch]
-
- *) BeOS MPM updated. CGI bug on BeOS fixed. IP addresses
- now logged correctly on BeOS.
- [David Reid]
-
- *) Create one makefile for all Win32 distributions (NT/2000/95/98).
- Makefile.win includes the same user interface as the old
- Makefile.nt
- [William Rowe <wrowe lnd.com>, Jeff Trawick <trawick us.ibm.com>]
-
- *) Win32 exec now uses COMSPEC environment string for command
- shell path resolution.
- [William Rowe <wrowe lnd.com>] PR#3715
-
- *) Win32: ap_connect() was not returning correct error condition
- PR5866
- [Allen Prescott <allen clanprescott.com>]
-
- *) Win32: ap_open() was broken on Win9x because an NT-specific
- flag was passed to CreateFile. ap_puts() added an unnecessary
- '\n'.
- [Jeff Trawick <trawick us.ibm.com>]
-
- *) Put in Korean and Norwegian index.html pages (2.0 and 1.3)
- which where donated by Lee Kuk Hyun and Lorant Czaran. 'Fixed'
- confusing ee/et name and made all extensions language/dialect
- rather than country reflecting. Changed example files to
- explicit reflect the ISO charset and added a few common
- ones to the example config [dirkx]
-
- *) Extend external module capability. To use this, you call
- configure with --with-module=path/to/mod1,path/to/mod2,etc.
- [Ryan Bloom]
-
- *) Backported the various "default charset" fixes from 1.3.12,
- including the AddDefaultCharset directive. [Jim Jagielski]
-
- *) Added the capability to do ${ENVVAR} constructs in the
- config file. E.g. 'ServerAdmin ${POSTMASTER}'. As commited
- it does this on a line by line basis; i.e. if the envvar
- expands to something with spaces you have to protect it
- by adding quotes around it (Unless of course you expect it
- to contains more than one argument. Alternatively you
- can compile it on a per token basis; which is what people
- usually expect by setting RESOLVE_ENV_PER_TOKEN. But this
- hampers fancier hacks.
- [Dirk-Willem van Gulik]
-
- *) Changed the 'ErrorDocument' syntax in that it NO longer
- supports the asymetric
-
- ErrorDocument 301 "Some message
-
- Note the opening " quote, without a closing quote. It now
- has either the following syntaxes
-
- ErrorDocument XXX /local/uri
- ErrorDocument XXX http://valid/url
- ErrorDocument XXX "Some Message"
-
- The recognition heuristic is: if it has a space it
- is a message. If it has no spaces and starts with a /
- or is a valid URL then treat it that way. Otherwise it
- is assumed to be a message.
-
- This breaks backward compatibility but makes live a hell
- of a lot easier for GUI's and config file parsers.
- [Dirk-Willem van Gulik]
-
- *) Changed 'CacheNegotiatedDocs' from its present/not-present
- syntax into a 'on' or 'off' syntax. As it currently is the
- only non nesting token which uses NO_ARGS and thus is an
- absolute pain for any config interface automation. This
- breaks backward compatibility. [Dirk-Willem van Gulik]
-
- *) Add ability to add external modules to the build process. This is
- done with --with-module=/path/to/module. Modules can only be added
- as static modules at this point.
- [Ryan Bloom]
-
-Changes with Apache 2.0a1
-
- *) Fix FreeBSD 3.3 core dump.
- Basically, ap_initialize() needs to get called before
- create_process(), since create_process() passes op_on structure
- to semop() to get a lock, but op_on isn't initialized until
- ap_initialize() calls setup_lock(). Here is a slight
- rearrangement to main() which calls ap_initialize() earlier...
- [Jeff Trawick <trawick us.ibm.com>]
-
- *) Enable Apache to use sendfile/TransmitFile API
- [Bill Stoddard, David Reid, Paul Reder]
-
- *) Re-Implement Win32 APR network I/O APIs and most of the file I/O
- APIs.
- [Bill Stoddard]
-
- *) Make file I/O and network I/O writev/sendv APIs consistent.
- Eliminate use of ap_iovec_t and use Posix struct iovec.
- Use seperate variable on ap_writev to set the number of iovecs
- passed in and number of bytes written.
- [Bill Stoddard]
-
- *) Adapt file iol to use APR functions. Replaced ap_open_file()
- with ap_create_file_iol(). ap_create_file_iol() requires that
- the file be opened prior to the call using ap_open().
- [Bill Stoddard]
-
- *) Port mod_include and mod_cgi to 2.0
- [Paul Reder, Bill Stoddard]
-
- *) ap_send{,v}, ap_recv, ap_sendfile API clarification --
- bytes_read/bytes_written is always valid (never -1). Plus
- some fixes to buff.c to correct problems introduced by the
- errno => ap_status_t changes a while back. Plus a fix to
- chunked encoding introduced right at the beginning of 2.0.
- [Dean Gaudet]
-
- *) Revamped UNIX build system to use autoconf and libtool.
- [Manoj Kasichainula, Sascha Schumann]
-
- *) port mod_rewrite to 2.0. [Paul J. Reder <rederpj raleigh.ibm.com>]
-
- *) SECURITY: More rigorous checking of Host: headers to fix security
- problems with mass name-based virtual hosting (whether using mod_rewrite
- or mod_vhost_alias).
- [Ben Hyde, Tony Finch]
-
- *) Add back support for UseCanonicalName in <Directory> containers.
- [Manoj Kasichainula]
-
- *) Added APLOG_STARTUP log type. This allows us to write an error
- message without any of the date and time information. As a part
- of this change, I also removed all of the calls to fprintf(stderr
- and replaced them with calls to ap_log_error using APLOG_STARTUP
- writing to stderr is no longer portable, because we don't direct
- stderr to the error log on all platforms.
- [Ryan Bloom]
-
- *) Convert error logging functions to take errno as an argument.
- This makes our error logs more portable, because some Windows API's
- don't set errno. This change allows us to still output a valid
- message on all of our platforms.
- [Ryan Bloom]
-
- *) mod_mime_magic runs in 2.0-dev now.
- [Paul Reder <rederpj raleigh.ibm.com>]
-
- *) sendfile has been added to APR.
- [John Zedlewski <zedlwski Princeton.EDU>]
-
- *) buff.c has been converted to no longer use errno.
- [Manoj Kasichainula]
-
- *) mod_speling runs in 2.0-dev now: a bug in readdir_r handling and
- interface adaption to APR functions did it. [Martin Kraemer]
-
- *) Support DSOs properly on 32-bit HP-UX 11.0
- [Dilip Khandekar <dilip cup.hp.com>]
-
- *) Updated MM in APR source tree from version 1.0.8 to 1.0.11
- [Ralf S. Engelschall]
-
- *) Cleaned APR build environment integration and bootstrap APR
- automatically for developers from src/Configure.
- [Ralf S. Engelschall]
-
- *) Fixed building of src/support/htpasswd.c
- [Ralf S. Engelschall]
-
- *) When generating the Location: header, mod_speling forgot
- to escape the spelling-fixed uri. (Forw-Port from 1.3)
- [Martin Kraemer]
-
- *) Moved mod_auth_digest.c from experimental to standard. [Roy Fielding]
-
- *) Change all pools to APR contexts. This is the first step to
- incorporating APR into Apache. [Ryan Bloom]
-
- *) Move "handler not found" warning message to below the check
- for a wildcard handler. [Dirk <dirkm teleport.com>, Roy Fielding]
- PR#2584, PR#2751, PR#3349, PR#3436, PR#3548, PR#4384, PR#4795, PR#4807
-
- *) Support line-continuation feature in config.option file and
- allow the loading of multiple option sections at once via
- ``--with-option=<section1>,<section2>,...''
- [Ralf S. Engelschall]
-
- *) Rebuilt CVS repository with Apache 1.3.9 as basis. [Roy Fielding]
-
-Changes with Apache MPM
-
- *) Use asynchronous AcceptEx() and a completion port to accept and
- dispatch connections to threads in Windows NT/2000.
- [Bill Stoddard]
-
- *) Implement WINNT Win32 MPM from original Win32 code in http_main.c
- [Bill Stoddard]
-
- *) Implement the APACI --with-option facility
- (per default used the config.option file).
- [Ralf S. Engelschall]
-
- *) MPM BEOS port. [David Reid <abb37 dial.pipex.com>]
-
- *) Start to implement module-defined hooks that are a) fast and b) typesafe.
- Replace pre_connection module call with a register_hook call and
- implement pre_connection as a hook. The intent is that these hooks will
- be extended to allow Apache to be multi-protocol, and also to allow the
- calling order to be specified on a per-hook/per-module basis.
- [Ben Laurie]
-
- *) Implement mpm_* methods as "modules". Each method gets its own
- subdir in src/modules (eg: src/modules/prefork). Selection
- of method uses Rule MPM_METHOD. [Jim Jagielski]
-
- *) Port the hybrid server from the apache-apr repository as
- mpm_mpmt_pthread. [Manoj Kasichainula]
-
- *) os/unix/unixd.[ch]: detach, setuid, setgid, stuff which will be common
- amongst the unix MPMs.
-
- *) mpm_prefork: throw away all the alarm/timeout crud; and clean up the
- signal handling for the new world order. [Dean Gaudet]
-
- *) Crude ap_thread_mutex abstraction so that we get the pthread stuff out
- of alloc.c for now. [Dean Gaudet]
-
- *) Handle partial large writes correctly. [Ben Laurie]
-
- *) Eliminate conn_rec's pointer to server. All it knows is the base server
- based on IP/port. [Ben Laurie]
-
- *) Port a bunch of modules to the new module structure.
- ["Michael H. Voase" <mvoase midcoast.com.au>]
-
- *) I/O layering and BUFF revamp. See docs/buff.txt. [Dean Gaudet]
-
- *) Basic restructuring to introduce the MPM concept; includes various
- changes to the module API... better described by
- docs/initial_blurb.txt. [Dean Gaudet]
-
-Changes with Apache pthreads
-
- *) New buff option added: BO_TIMEOUT. It describes the timeout for
- buff operations (generally over a network).
- [Dean Gaudet, Ryan Bloom, Manoj Kasichainula]
-
- *) Created http_accept abstraction. Added 4 new functions (not exported):
- init_accept(), begin_accepting_requests(), get_request(),
- stop_accepting_requests() [Bill Stoddard]
-
- *) Fix to ap_rprintf call that allows mod_info to work properly.
- [James Morris <jmorris intercode.com.au>]
-
- *) user and ap_auth_type fields were moved from connection_rec to
- request_rec. [Ryan Bloom]
-
- *) Removed the ap_block_alarms and ap_unblock_alarm calls. These aren't
- needed in a threaded server.
-
- *) Initial pthread implementation from from Dean's apache-nspr code.
- [Bill Stoddard, Ryan Bloom]
-
-
-Changes with Apache 1.3.9
-
- *) Remove bogus error message when a redirect doesn't set Location.
- Instead, use an empty string to avoid coredump if the error message
- was supposed to include a location. [Roy Fielding]
-
- *) Don't allow configure to include mod_auth_digest unless it is
- explicitly requested, even if the user asked for all modules.
- [Roy Fielding]
-
- *) Translate module names to dll names for OS/2 so that they are no more
- than 8 characters long and have an extension of "dll" instead of "so".
- [Brian Havard]
-
- *) Print out pointer to Rule DEV_RANDOM when truerand lib not found.
- Fix test-compile check to check for randbyte instead of trand32.
- Use ap_base64encode_binary/decode instead of copy in mod_auth_digest.c
- and tweak to make Amaya happier. [Ronald Tschalär]
-
- *) Ensure that the installed expat include files are world readable,
- just like the other header files. [Martin Kraemer]
-
- *) Fixed generated AddModule adjustments in APACI's `configure' script
- in order to allow (new) modules like mod_vhost_alias to be handled
- correctly (which was touched by the adjustments for mod_alias).
- [Ralf S. Engelschall]
-
- *) For binary builds, add -R flag to apachectl to work around the lack of
- an absolute path to the ./libexec directory where the libhttp.ep file
- is needed for SHARED_CORE architectures. [Randy Terbush]
-
- *) WIN32: Create the CGI script process as DETACHED. This may solve the
- problem observed by some Win95/98 users where they get CGI script
- output sent to the console. [Bill Stoddard]
-
- *) Fix (re)naming in the uuencode/decode section. The ap/ap_
- routines are now called ap_base64* and are 'plain' (i.e., no
- pool access or anything clever). Inside util.c the routines acting
- like pstrdup are called ap_pbase64encode() and ap_pbase64decode().
- The oddly named ap_uuencode(), ap_uudecode() are kept around for
- now but deprecated. [dirkx]
-
- *) Clean up the base64 and SHA1 additions and make sure they are
- represented in the ApacheCore.def, ApacheCoreOS2.def, and httpd.exp
- files. [Roy Fielding]
-
- *) WIN32: Migrate to InstallShield 5.5 and provide a bit more error
- checking. Allow compiling on VS 6.0. [Randy Terbush]
-
- *) Fixed assumption of absolute paths in binbuild.sh. [Tony Finch]
-
- *) Use TestCompile to search for the truerand library (rather than blindly
- assuming its existence). If it is not found, complain (but do not
- exit - yet). [Martin Kraemer]
-
- *) We forgot to add the new exported function names to
- src/support/httpd.exp. [Bill Stoddard, Randy Terbush]
-
- *) Add description of -T command-line option to usage().
- [Ralf S. Engelschall]
-
- *) For "some" platforms (notably, EBCDIC based ones), libos needs to be
- searched only AFTER libap has been searched, because libap needs
- some symbols from libos. [Martin Kraemer]
-
- *) Fix conflict with original mod_digest related to the symbol of the
- module dispatch list (which has to be unique for DSO and follow the
- usual conventions for the installation procedure).
- [Ralf S. Engelschall]
-
- *) Add a dbm-library check for the "usual places" (-ldbm, -lndbm, -ldb)
- for other platforms as well. [Martin Kraemer]
-
- *) Make ap_sha1.c compile for EBCDIC platforms: replace remaining LONG
- types by AP_LONG and replace reference to renamed variable 'ubuf'
- by 'buffer'. [Martin Kraemer]
-
-Changes with Apache 1.3.8 [not released]
-
- *) Flush the output buffer immediately after sending an error or redirect
- response, since the result may be needed by the client to abort a
- long data transfer or restart a series of pipelined requests.
- [Tom Vaughan <tvaughan aventail.com>, Roy Fielding]
-
- *) PORT: Improved compilation and DSO support on Sequent DYNIX/ptx.
- [Ian Turner <iant sequent.com>] PR#4735
-
- *) Local struct mmap in http_core.c conflicted with system structure
- name on DYNIX -- changed to mmap_rec. [Roy Fielding] PR#4735
-
- *) Added updated mod_digest as modules/experimental/mod_auth_digest.
- [Ronald Tschalär <ronald innovation.ch>]
-
- *) Fix a memory leak where the module counts were getting messed
- up across restarts. [David Harris <dharris drh.net>]
-
- *) CIDR addresses such as a.b.c.d/24 where d != 0 weren't handled
- properly in mod_access.
- ["Paul J. Reder" <rederpj raleigh.ibm.com>] PR#4770
-
- *) RewriteLock/RewriteMap didn't work properly with virtual hosts.
- [Dmitry Khrustalev <dima bog.msu.su>] PR#3874
-
- *) PORT: Support for compaq/tandem/com.
- [Michael Ottati <michael.ottati compaq.com>, dirkx]
-
- *) Added SHA1 password encryption support to easy migration from
- Netscape servers. See support/SHA1 for more information.
- Caused the separation of ap_md5.c into md5, sha1 and a general
- ap_checkpass.c with just a validate_passwd routine. Added a
- couple of flags to support/htpasswd. Some reuse of the to64()
- function; hence renamed to ap_to64().
- [Dirk-Willem van Gulik, Clinton Wong <clintdw netcom.com>]
-
- *) Change for EBCDIC platforms (TPF and BS2000) to correctly deal
- with ASCII/EBCDIC conversions in "ident" query.
- [David McCreedy <McCreedy us.ibm.com>]
-
- *) Get rid of redefinition warning on MAC_OS_X_SERVER platform.
- Change "Power Macintosh" to Power* so if uname prints "Power Book"
- we're still happy on Rhapsody platforms. [Wilfredo Sanchez]
-
- *) Fix SIGSEGV on some systems because the Vary fix below included
- a call to table_do with a variable argument list that was not
- NULL terminated. Replaced with better implementation. [Roy Fielding]
-
-Changes with Apache 1.3.7 [not released]
-
- *) The "Vary" response header field is now sanitised right before
- the header is sent back to the client. Multiple "Vary" fields
- are combined, and duplicate tokens (e.g., "Vary: host, host" or
- "Vary: host, negotiate, host, accept-language") are reduced to
- single instances. This is a better solution than the force-no-vary
- one (which is still valid for clients that can't cope with Vary
- at all). PR#3118 [Dean Gaudet, Roy Fielding, Ken Coar]
-
- *) Portability changes for BeOS. [David Reid <abb37 dial.pipex.com>]
-
- *) Link DSO's with "gcc -shared" instead of "ld -Bshareable" at
- least on Linux and FreeBSD for now.
- [Rasmus Lerdorf]
-
- *) Win32: More apache -k restart work. Restarts are now honored
- immediately and connections in the listen queue are -not- lost.
- This is made possible by the use of the WSADuplicateSocket()
- call. The listeners are opened in the parent, duplicated, then
- the duplicates are passed to the child. The original listen sockets
- are not closed by the parent across a restart, thus the listen queue
- is preserved.
- [Bill Stoddard <stoddard raleigh.ibm.com>]
-
- *) Fix handling of case when a client has sent "Expect: 100-continue"
- and we are going to respond with an error, but get stuck waiting to
- discard the body in the pointless hope of preserving the connection.
- [Roy Fielding, Joe Orton <jeo101 york.ac.uk>] PR#4499, PR#3806
-
- *) Fix 'configure' to work correctly with SysV-based versions of
- 'tr' (consistent with Configure's use as well). [Jim Jagielski]
-
- *) apxs: Add "-S var=val" option which allows for override of CFG_*
- built-in values. Add "-e" option which works like -i but doesn't
- install the DSO; useful for editing httpd.conf with apxs. Fix
- editing code so that multiple invocations of apxs -a will not
- create duplicate LoadModule/AddModule entries; apxs can now be
- used to re- enable/disable a module. [Wilfredo Sanchez]
-
- *) Win32: Update the server to use Winsock 2. Specifically, link with
- ws2_32.lib rather than wsock32.lib. This gives us access to
- WSADuplcateSocket() in addition to some other enhanced comm APIs.
- Win 95 users may need to update their TCP/IP stack to pick up
- Winsock 2. (See http://www.microsoft.com/windows95/downloads/)
- [Bill Stoddard <stoddard raleigh.ibm.com>]
-
- *) Win32: Redirect CGI script stderr (script debug info) into the
- error.log when CGI scripts fail. This makes Apache on Win32
- behave more like Unix.
- [Bill Stoddard <stoddard raleigh.ibm.com>]
-
- *) Fixed `httpd' usage display: -D was missing.
- [Ralf S. Engelschall] PR#4614
-
- *) Fix `make r' test procedure in src/regex/: ap_isprint was not found.
- [Ralf S. Engelschall] PR#4561, PR#4562
-
- *) OS/2: Fix problem with accept lock semaphores where server would die with
- "OS2SEM: Error 105 getting accept lock. Exiting!"
- [Brian Havard] PR#4505
-
- *) Add DSO support for DGUX 4.x using gcc. Tested on x86 platforms.
- [Randy Terbush <randy covalent.net>]
-
- *) Add the new mass-vhost module (mod_vhost_alias.c) developed and
- used by Demon Internet, Ltd. [Tony Finch <fanf demon.net>]
-
- *) Better GCC detection for DSO flags under Solaris 2 where the `cc'
- command potentially _is_ GCC. [Ralf S. Engelschall]
-
- *) Fix apxs build issues on AIX
- [Rasmus Lerdorf <rasmus raleigh.ibm.com>]
-
- *) DocumentRoot Checking: Under previous versions, when Apache
- first started up, it used to do a stat of each DocumentRoot to
- see if it existed and was a directory. If not, then an error
- message was printed. THIS HAS BEEN DISABLED. If DocumentRoot
- does not exist, you will get error messages in error_log. If
- the '-t' command line option is used (to check the configuration)
- the check of DocumentRoot IS performed. An additional command
- line option, '-T', has been added if you want to avoid the
- DocumentRoot check even when checking the configuration.
- [Jim Jagielski]
-
- *) Win32: The query switch "apache -S" didn't exit after showing the
- vhost settings. That was inconsistent with the other query functions.
- [Bill Stoddard - Fixed by Martin on Unix in 1.3.4]
-
- *) Win32: Changed behaviour of apache -k restart.
- Previously, the server would drain all connections in the stack's
- listen queue before honoring the restart. On a busy server, this
- could take hours. Now, a restart is honored almost immediately.
- All connections in Apache's queues are handled but connections in
- the stack's listen queue are discarded. Restart triggered by
- MaxRequestPerChild is unchanged.
- [Bill Stoddard <stoddard raleigh.ibm.com>]
-
- *) Win32: Eliminated unnecessary call to wait_for_multiple_objects in
- the accept loop. Good for a 5% performance boost. Cleaned up
- parent/child process management code.
- [Bill Stoddard <stoddard raleigh.ibm.com>]
-
- *) Added ceiling on file size for memory mapped files.
- [John Giannandrea <jg meer.net>] PR#4122
-
- *) Fix ndbm.h include problems with brain-dead glibc >= 2.1 which
- has ndbm.h in a non-standard db1/ subdir. PR#4431, PR#4528
- [Henri Gomez <gomez slib.fr>, Ralf S. Engelschall]
-
- *) Determine AP_BYTE_ORDER for ap_config_auto.h and already
- use this at least for Expat. [Ralf S. Engelschall]
-
- *) Allow .module files to specify libraries with Lib:.
- [Ben Laurie]
-
- *) Allow SetEnvIf[NoCase] to test environment variables as well
- as header fields and request attributes. [Ken Coar]
-
- *) Fix mod_autoindex's handling of ScanHTMLTitles when file
- content-types are "text/html;parameters". PR#4524 [Ken Coar]
-
- *) Remove "mxb" support from mod_negotiation -- it was a draft feature
- never accepted into any standard, and it opens up certain DoS
- attacks. [Koen Holtman <Koen.Holtman cern.ch>]
-
- *) TestCompile updated. We can now run programs and output the
- results during the Configure process. [ Jim Jagielski]
-
- *) The source is now quad (long long) aware as needed. Specifically,
- the Configure process determines the correct size of off_t and
- *void. When the OS/platform/compiler supports quads, ap_snprintf()
- provides for the 'q' format qualifier (if quads are not available,
- 'q' is silently "demoted" to long). [Jim Jagielski]
-
- *) When the username or password fed to htpasswd is too long, include the
- size limit in the error message. Also report illegal characters
- (currently only ':') in the username. Add the size restrictions
- to the man page. [Ken Coar]
-
- *) Fixed the configure --without-support option so it doesn't result in
- an infinite loop. [Marc Slemko]
-
- *) Piped error logs could cause a segfault if an error occured
- during configuration after a restart.
- [Aidan Cully <aidan panix.com>] PR#4456
-
- *) If a "Location" field was stored in r->err_headers_out rather
- than r->headers_out, redirect processing wouldn't find it and
- the server would core dump on ap_escape_html(NULL). Check both
- tables and raise HTTP_INTERNAL_SERVER_ERROR with a log message
- if Location isn't set. [Doug MacEachern, Ken Coar]
-
- *) Add RULE_EXPAT, the src/lib/ directory structure, and a modified copy
- of the Expat 1.0.2 distribution. [Greg Stein]
-
- *) Replace regexec() calls with calls to a new API stub function
- ap_regexec(). This solves problems with DSO modules which use the regex
- library. [Jens-Uwe Mager <jum helios.de>, Ralf S. Engelschall]
-
- *) Add 'Request_Protocol' special keyword to mod_setenvif so that
- environment variables can be set according to the protocol version
- (e.g., HTTP/0.9 or HTTP/1.1) of the request. [Ken Coar]
-
- *) Add DSO support for OpenStep (Mach 4.2) platform.
- [Ralf S. Engelschall, Rex Dieter <rdieter math.unl.edu>] PR#3997
-
- *) Fix sed regex for generating ap_config_auto.h in src/Configure.
- [Jan Gallo <gallo pvt.sk>] PR#3690, PR#4373
-
- *) Switch to /bin/sh5 in APACI on Ultrix and friends to avoid problems with
- their brain-dead /bin/sh. [Ralf S. Engelschall] PR#4372
-
- *) Better DSO flags recognition on NetBSD platforms using ELF.
- [Todd Vierling <tv pobox.com>] PR#4310
-
- *) Always log months in english format for %t in mod_log_config.
- [Petr Lampa <lampa fee.vutbr.cz>] PR#4366, 679
-
- *) Support for server-parsed and multiview-determined ReadmeName and
- HeaderName files in mod_autoindex. Removed the restriction on
- "/"s in ReadmeName and HeaderName directives since the *sub_req*
- routines will deal with the access issues. (It's now possible to
- have {site|group|project|customer|...} wide readmes and headers.)
- [Raymond S Brand <rsbx rsbx.net>, Ken Coar] PR#1574, 3026, 3529,
- 3569, 4256
-
- *) When stat() fails, don't assume anything about the contents of
- the struct stat. [Ed Korthof <ed bitmechanic.com>]
-
- *) It's OK for a semop to return EINTR, just loop around and try
- again. [Dean Gaudet]
-
- *) Fix configuration engine re-entrant hangups, which solve a
- handful of problems seen with mod_perl <Perl> configuration sections
- [Salvador Ortiz Garcia <sog msg.com.mx>]
-
- *) Mac OS and Mac OS X Server now use the appropriate custom layout
- by default when building with APACI; allow for platform-specific
- variable defaults in configure. [Wilfredo Sanchez]
-
- *) Do setgid() before initgroups() in http_main; some platforms
- zap the grouplist when setgid() is called. This was fixed in
- suexec earlier, but the main httpd code missed the change.
- [Rob Saccoccio <robs InfiniteTechnology.com>] PR#2579
-
- *) Add recognition of .tgz as a gzipped tarchive.
- [Bertrand de Singly <bertrand.de-singly polytechnique.fr>] PR#2364
-
- *) mod_include's fsize/flastmod should allow only relative paths, just
- like "include file". [Jaroslav Benkovsky <benkovsk pha.pvt.cz>]
-
- *) OS/2: Add support for building loadable modules using DLLs.
- [Brian Havard]
-
- *) Add iconsdir, htdocsdir, and cgidir to config.layout.
- [Wilfredo Sanchez]
-
- *) Fix minor but annoying bug with the test for Configuration.tmpl
- being newer than Configuration so that it is less likely to fail
- when using APACI and shadow sources. [Wilfredo Sanchez]
-
- *) PORT: Add initial support for Mac OS (versions 10.0 and
- greater). Use Mac OS X Server layout for now. Clean up dyld code
- in unix/os.c, and don't install the dyld error handlers, which
- are no longer needed in Mac OS. [Wilfredo Sanchez]
-
- *) Rename Rhapsody layout to "Mac OS X Server". Change install
- locations to appropriate ones for user-built (as opposed to
- system) installs. [Wilfredo Sanchez]
-
- *) Modify mod_autoindex's handling of AddDescription so that the
- behaviour matches the documentation. [Ken Coar] PR#1898, 3072.
-
- *) Add functionality to the install-bindist.sh script created by
- binbuild.sh to use tar when copying distribution files to the
- serverroot. This allows upgrading an existing installation
- without nesting the new distribution in the old.
-
- install-bindist.sh now detects the local perl5 path to install
- apxs and dbmmanage with proper path to perl interpreter.
-
- Add an install-binsupport target which copies the source files
- for apxs and dbmmanage to bindist to allow these scripts to
- be properly installed relative to the destination serverroot.
- [Randy Terbush, Covalent Technologies, <randy covalent.net>]
-
- *) Fix intermittent SEGV in ap_proxy_cache_error() in
- src/modules/proxy_util.c where a NULL filepointer and
- temporary filename were closed and unlinked.
- [Graham Leggett <minfrin sharp.fm>,
- Tim Costello <tjcostel socs.uts.edu.au>] PR#3178
-
- *) Fix inconsistent error messages reported by mod_proxy.
- [Graham Leggett <minfrin sharp.fm>]
-
- *) OS/2: Fix terminating CGIs that aren't compiled by EMX GCC when a
- connection is aborted. [Brian Havard]
-
- *) Force the LANG envariable to the known state of "C" so that we
- have assurance about how string manipulators (e.g., tr) will
- function. [Ken Coar] PR#1630
-
- *) Add a directive to allow customising of the tracking cookie name.
- [Ken Coar] PR#2921, 4303
-
- *) Add "force-no-vary" envariable to allow servers to work around
- clients that choke on "Vary" fields in the response header.
- [Ken Coar, Dmitry Khrustalev <dima zippy.machaon.ru>] PR#4118
-
- *) Fixed a bug in mod_dir that causes a child process will infinitely
- recurse when it attemps to handle a request for a directory wnd the
- value of the DirectoryIndex directive is a single dot. Also likely
- to happen for anyother values of DirectoryIndex that will map back
- to the same directory. The handler now only considers regular files
- as being index candidates. No PR#s found.
- [Raymond S Brand <rsbx rsbx.net>]
-
- *) Ease configuration debugging by making TestCompile fall back to
- using "make" if the $MAKE variable is unset [Martin Kraemer]
-
- *) Fixed the ServerSignature directive to work as documented.
- [Raymond S Brand <rsbx rsbx.net>] PR#4248
-
- *) Add "opt" (SysV-style) layout to config.layout. [Raymond S Brand
- <rsbx rsbx.net>]
-
- *) Add APACI --without-execstrip option which can be used to disable the
- stripping of executables on installation. This is very important for DSO
- and debugging situations. [Ralf S. Engelschall]
-
- *) Add support for OS/2 (case insenstive filesystem, .exe suffix, etc)
- to APACI files and related scripts.
- [Yitzchak Scott-Thoennes <sthoenna efn.org>, Ralf S. Engelschall] PR#4269
-
- *) Add support for standalone mode in TPF
- [Joe Moenich <moenich us.ibm.com>]
-
- *) Fix number of bytes copied by read_connection() in src/support/ab.c
- [Jim Cox <jc superlink.net>] PR#4271
-
- *) Fix special RewriteCond "-s" pattern matching.
- [Bob Finch <bob nas.com>]
-
- *) Fix value quoting in src/Configure script for ap_config_auto.h
- [Paul Sutton <paul awe.com>]
-
- *) Make sure RewriteLock can be used only in the global context, (i.e.
- outside of any <VirtualHost> sections) because it's a global facility of
- the rewrite engine. [Ralf S. Engelschall]
-
- *) Fix the ownership delegation for proxy directory under `make install'.
- [Ralf S. Engelschall]
-
- *) APACI would not correctly build suexec. [Maria Verina
- <mariav icgeb.trieste.it>] PR#4260
-
- *) mod_mime_magic passed only the first 4k of a file to
- uncompress/gzip, but those tools sometimes do not produce
- any output unless a sufficient portion of the compressed
- file is input. Change to pass the entire file -- but
- only read 4k of output.
- [Marcin Cieslak <saper system.pl>] PR#4097
-
- *) "IndexOptions None" generated extra spaces at the end of each
- line. [<inkling firstnethou.com>] PR#3770
-
- *) The "100 Continue" response wasn't being sent after internal
- redirects. [Jose KAHAN <kahan w3.org>] PR#3910, 3806, 3575
-
- *) When padding the name with spaces for display, mod_autoindex would
- count &, <, and > in their escaped width, messing up the display.
- [Dean Gaudet] PR#4075, 3758
-
- *) PORT: fixed a compilation problem on NEXT.
- [Jacques Distler <distler golem.ph.utexas.edu>] PR#4130
-
- *) r->request_time wasn't being set properly in certain error conditions.
- [Dean Gaudet] PR#4156
-
- *) PORT: deal with UTS compiler error in http_protocol.c
- [Dave Dykstra <dwd bell-labs.com>] PR#4189
-
- *) Add ap_vrprintf() function. [John Tobey <jtobey banta-im.com>] PR#4246
-
- *) Fix the mod_mime hash table to work properly with locales other
- than C. [Dean Gaudet] PR#3427
-
- *) Fix a memory leak which is exacerbated by certain configurations.
- [Dean Gaudet] PR#4225
-
- *) Prevent clobbering saved IFS values in APACI. [Jim Jagielski]
-
- *) Fix buffer overflows in ap_uuencode and ap_uudecode pointed out
- by "Peter 'Luna' Altberg <peter altberg.nu>" and PR#3422
- [Peter 'Luna' Altberg <peter altberg.nu>, Ronald Tschalär]
-
- *) Make {Set,Unset,Pass}Env per-directory instead of per-server.
- [Ben Laurie]
-
- *) Correct an apparent typo: on the Windows and MPE platforms, the
- htpasswd utility was limiting passwords to only 8 characters.
- [Ken Coar]
-
- *) EBCDIC platforms: David submitted patches for two bugs in the
- MD5 digest port for EBCDIC machines:
- a) the htdigest utility overwrote the old contents of the digest file
- b) the Content-MD5 header value (ContentDigest directive) was wrong
- when the returned file was not converted from EBCDIC, but was a
- binary (e.g., image file) in the first place.
- [David McCreedy <mccreedy us.ibm.com>]
-
- *) support/htpasswd now permits the password to be specified on the
- command line with the '-b' switch. This is useful when passwords
- need to be maintained by scripts -- particularly in the Win32
- environment. [Ken Coar]
-
- *) Win32: Win32 multiple services patch. Added capability to install and
- run multiple copies of apache as individual services.
-
- Example 1:
- apache -n apache1 -i -f c:/httpd.conf
- Installs apache as service 'apache1' and associates c:/httpd.conf
- with that service.
- net start apache1
- Starts apache1 service.
- net stop apache1
- Stops apache1 service
-
- Example 2:
- apache -n apache2 -i
- Installs apache as service 'apache2'. httpd.conf is located under
- the default server root (/apache/conf/httpd.conf).
- net start apache2
- Starts apache2 service.
-
- Example 3:
- apache -n apache3 -i -d c:/program files/apache
- Install apache as service 'apache3' and sets server root to
- c:/program files/apache.
-
- Example 4:
- apache -n apache2 -k restart
- Restart apache2 service
-
- [Keith Wannamaker, Ken Parzygnat, Bill Stoddard]
-
- *) Correct the signed/unsigned character handling for the MD5 routines;
- mismatches were causing compilation problems with gcc -pedantic and
- in the TPF cross-compilation. [Ken Coar]
-
- *) OS/2: Rework CGI handling to use spawn*() instead of fork/exec, achieving
- a roughly 5 fold speed up. [Brian Havard]
-
- *) proxy ftp: instead of using the hardwired string "text/plain" as
- a fallback type for files served by the ftp proxy, use the
- ap_default_type() function to determine the configured type.
- This allows for special configurations like
- <Directory proxy:ftp://some.host>
- DefaultType gargle/blurb
- </Directory>
- Additionally, add the Content-Encoding: header to FTP proxy replies
- when the encoding is defined (by the AddEncoding directive).
- Because it was missing, it was almost impossible to browse compressed
- files using the FTP proxy (works now perfectly in Communicator).
- The ftp proxy now also returns the Date: and Server: header lines (if not
- much else... This code is "somewhat" broken) like normal requests do.
- [Martin Kraemer]
-
- *) Be more smart in APACI's configure script when determining the UID/GID
- for User/Group directives and use the determined UID/GID to initialize
- the permissions on the proxycachedir.
- [Dirk-Willem van Gulik, Ralf S. Engelschall]
-
- *) Changed the forking-prior-to-cleanup in the proxy module to first
- check wether it actually needs to collect garbage. This reduces
- the number of fork()s from one/request to just the odd one an hour.
- [Dirk-Willem van Gulik]
-
- *) Added proxy, auth and header support to src/support/ab.c. Added a
- README file to src/support/
- [Dirk-Willem van Gulik]
-
- *) Don't hard-code the path to AWK in --shadow bootstrapping Makefile.
- [Ralf S. Engelschall] PR#4050
-
- *) Add support for DSO module compilation on BSD/OS 3.x.
- [Randy Terbush, Covalent Technologies]
-
- *) Fix sed-substitutions in `make install': path elements like `httpd/conf'
- (for instance from an APACI configure --sysconfdir=/etc/httpd/conf
- option) were substituted with $(TARGET).conf, etc. Same for other strings
- with dots where the dot wasn't matched as plain text.
- [Ralf S. Engelschall]
-
- *) PORT: Add support for FreeBSD 4.x [Ralf S. Engelschall]
-
- *) Fix verbose output of APACI configure (option -v)
- [Martin Kraemer, Ralf S. Engelschall]
-
-Changes with Apache 1.3.6
-
- *) Removed new PassAllEnv code due to DSO problems. [Lars Eilebrecht]
-
-Changes with Apache 1.3.5 [not released]
-
- *) M_INVALID needed a value within the scope of METHODS so that unknown
- methods can be access controlled. [Roy Fielding] PR#3821
-
- *) Added PassAllEnv; makes server's entire environment available
- to CGIs and SSIs executed within directive's scope. [Ken Coar]
-
- *) ap_uuencode() always added two trailing '='s and encoding of
- 8 bit characters on a machine with signed char may produced
- incorrect results. Additionally ap_uuencode() should now
- work correctly on EBCDIC platforms.
- [Ronald Tschalär <ronald innovation.ch>] PR#3411
-
- *) WIN32: Binary installer now runs the configuration DLL before
- the reboot prompt (which is only given if MSVCRT.DLL system
- DLL is new or updated). This should avoid the configuration
- directory being empty after installation. [Paul Sutton]
- PR#3767, 3800, 3827, 3850, 3900, 3953, 3988
-
- *) WIN32: Binary installer now creates Start menu options to start
- and stop Apache as a console application and to uninstall
- the Apache service on NT. [Paul Sutton] PR#3741
-
- *) WIN32: Apache.exe now contains an icon. [Paul Sutton]
-
- *) PORT: Switch back to using fcntl() locking on Linux -- instabilities
- have been reported with flock() locking (probably related to kernel
- version). [Dean Gaudet] PR#2723, 3531
-
- *) Using APACI, the main config file (usually httpd.conf) was
- not being adjusted as $(TARGET).conf. [Wilfredo Sanchez
- <wsanchez apple.com>]
-
- *) PORT: AIX does not require the SHARED_CODE "hack"
- [Ryan Bloom <rbb raleigh.ibm.com>]
-
- *) Set-Cookie headers were being doubled up for some CGIs by the O(n^2)
- avoidance code added in 1.3.3.
- [Dean Gaudet, Jeff Lewis <lewis stanford.edu>] PR#3872
-
- *) ap_isxdigit was somehow neglected when adding the ap_isfoo() macros
- for 8-bit safeness. [Dean Gaudet]
-
- *) PORT: Use -fPIC instead of -fpic on Solaris and SunOS for compiling DSOs
- because SPARCs have a small machine-specific maximum size for the Global
- Offset Table which is often exceeded when compiling one of the larger
- third-party modules with Apache. [Peter Urban <Peter.Urban epfl.ch>] PR#3977
-
- *) Move the directive `ExtendedStatus' in httpd.conf-dist-win _after_ the
- DSO/DLL section because it's a directive from mod_status and isn't
- available before the DLL of mod_status is loaded.
- [Martin POESCHL <mpoeschl gmx.net>] PR#3936
-
- *) SECURITY: Fix a bug in the calculation of the buffer size for the line
- continuation facility in Apache's configuration files which could
- lead to a buffer overflow situation.
- [Thomas Devanneaux <Thomas.Devanneaux enst.fr>] PR#3617
-
- *) Make documentation and error messages of APACI's --activate-module=FILE
- option more clear. [Jan Wolter <janc wwnet.net>] PR#3995
-
- *) Fix the gcc version check (for enabling the `inline' facility) to
- really support all future gcc versions >= 2.7 until we know more.
- [John Tobey <jtobey banta-im.com>] PR#3983
-
- *) Let APACI's configure script correctly complain for unknown --enable-XXX
- and --disable-XXX options. [Ralf S. Engelschall] PR#3958
-
- *) Link the shared core bootstrap program (``Rule SHARED_CORE=yes'') also
- against libap.a and use its ap_snprintf() instead of sprintf() to avoid
- possible buffer overflows. [Ralf S. Engelschall]
-
- *) Remove no longer used non-API function ap_single_module_init().
- [Ralf S. Engelschall]
-
- *) Add Apple's Mac OS X Server Layout "Rhapsody" to config.layout.
- [Wilfredo Sanchez]
-
- *) Add cgidir, htdocsdir, iconsdir variables to Makefile.tmpl in order
- to make platform installations easier. [Wilfredo Sanchez]
-
- *) In configure, do not append the target name to the directory path if
- the path already contains "apache". [Ralf S. Engelschall]
-
- *) SIGPIPE is now ignored by the server core. The request write routines
- (ap_rputc, ap_rputs, ap_rvputs, ap_rwrite, ap_rprintf, ap_rflush) now
- correctly check for output errors and mark the connection as aborted.
- Replaced many direct (unchecked) calls to ap_b* routines with the
- analogous ap_r* calls. [Roy Fielding]
-
- *) Enhanced mod_rewrite's mapfile handling: The in-core cache for text and
- DBM format mapfiles now uses a 4-way hash table with LRU functionality.
- Furthermore map lookups for non-existent keys are now cached as well.
- Additionally "txt" maps are now parsed with simple string functions
- instead of using ap_pregcomp(). As a side effect a bug that prevented
- the usage of keys containing the "," character was fixed.
- The changes drastically improve the performance when large rewrite maps
- are in use.
- [Michael van Elst <mlelstv serpens.swb.de>, Lars Eilebrecht] PR#3160
-
- *) Added ap_sub_req_method_uri() for doing a subrequest with a method
- other than GET, and const'd the definition of method in request_rec.
- [Greg Stein]
-
- *) Use proper pid_t type for saving PIDs in alloc.c. [John Bley]
-
- *) Replaced use of WIN32 define with HAVE_DRIVE_LETTERS to indicate
- when the OS allows a DOS drive letter within pathnames. [Brian Havard]
-
- *) Add %V to mod_log_config, this logs the hostname according to the
- UseCanonicalName setting (this is the pre-1.3.4 behaviour of
- %v). Useful for mass vhosting. [Tony Finch <dot dotat.at>]
-
- *) Add support for \n and \t to mod_log_config, can be used to produce
- more reliable logs with multiline entries. [Tony Finch <dot dotat.at>]
-
- *) Fixed a few compiler nits. [John Bley <jbb6 acpub.duke.edu>]
-
- *) Added informative error messages for failed munmap() and fseek() calls
- in http_core.c. [John Bley, Roy Fielding]
-
- *) Added some informative error messages for some failed malloc()
- calls. [John Bley <jbb6 acpub.duke.edu>, Jim Jagielski]
-
- *) OS/2 ap_os_canonical_filename()'s behaviour is improved: ap_assert()
- is removed. This allows <Directory proxy:*> directives to work and
- prevents invalid requests from killing the process.
- [Brian Havard <brianh kheldar.apana.org.au>]
-
- *) Reorganised FAQ document.
- [Joshua Slive <slive finance.commerce.ubc.ca>] PR#2497
-
- *) src/support/: The ApacheBench benchmark program was overhauled by
- David N. Welton: you can now have it generate an HTML TABLE, presumably
- for integration into other HTML sources. David updated the ab man page
- as well and added some missing descriptions. Thanks!
- [David N. Welton <davidw prosa.it>]
-
- *) Win32: The filename validity checker now allows filenames containing
- characters in the range 0x80 to 0xff (for example accented characters).
- [Paul Sutton] PR#3890
-
- *) Added conditional logging based upon environment variables to
- mod_log_config. mod_log_referer and mod_log_agent
- are now deprecated. [Ken Coar]
-
- *) Allow apache acting as a proxy server to relay the real
- reason of a failure to a client rather than the "internal
- server error" it does currently. The general exposure mechanism
- can be triggered by any module by setting the "verbose-error-to"
- note to "*"; this allows more than just proxy errors to be exposed.
- [Cliff Skolnick, Roy Fielding, Martin Kraemer] Related to PR#3455, 4086
-
- *) Moved man pages for ab and apachectrl to section 8.
- [Wilfredo Sanchez, Roy Fielding]
-
- *) Added -S option to install.sh so that options can be passed to
- strip on some platforms. [Ralf S. Engelschall, Wilfredo Sanchez]
-
- *) Tweak modules Makefile generated by Configure so that it handles
- the test case of no modules being selected. [<chaz reliant.com>]
-
- *) Added a <LimitExcept method ...> sectioning directive that allows
- the user to assign authentication control to any HTTP method that
- is *not* given in the argument list; i.e., the logical negation
- of the <Limit> directive. This is particularly useful for controlling
- access on methods unknown to the Apache core, but perhaps known by
- some module or CGI script. [Roy Fielding, Tony Finch]
-
- *) Prevent apachectl from complaining if the PIDFILE exists but
- does not contain a process id, as might occur if the server is
- being rapidly restarted. [Wilfredo Sanchez]
-
- *) Win32: Add global symbols missing from ApacheCore.def. [Carl Olsen]
-
- *) Entity tag comparisons for If-Match and If-None-Match were not being
- performed correctly -- weak tags might cause false positives. Also,
- strong comparison wasn't properly enforced in all cases.
- [Roy Fielding, Ken Coar, Dean Gaudet] PR#2065, 3657
-
- *) OS/2: Supply OS/2 error code instead of errno on semaphore errors.
- [Brian Havard]
-
- *) Work around a bug in Lynx regarding its sending "Negotiate: trans"
- even though it doesn't understand TCN. [Koen Holtman, Roy Fielding]
-
- *) Added ap_size_list_item(), ap_get_list_item(), and ap_find_list_item()
- to util.c for parsing an HTTP header field value to extract the next
- list item, taking into account the possible presence of nested comments,
- quoted-pairs, and quoted-strings. ap_get_list_item() also removes
- insignificant whitespace and lowercases non-quoted tokens.
- [Roy Fielding] PR#2065
-
- *) proxy: The various calls to ap_proxyerror() can return HTTP/1.1 status
- code different from 500. This allows the proxy to, e.g., return
- "403 Forbidden" for ProxyBlock'ed URL's. [Martin Kraemer] Related to PR#3455
-
- *) Fix ordering of language variants for the case where the traditional
- negotiation algorithm is being used with multiple language variants
- and no Accept-Language. [James Treacy <treacy debian.org>] PR#3299, 3688
-
- *) Do not round the TCN quality calculation to 5 decimal places,
- unlike RFC 2296, because the calculation might need 12 decimal places
- to get the right result. [Roy Fielding]
-
- *) Remove unused code to disable transparent negotiation when
- negotiating on encoding only, as we now handle encoding too
- (though this is nonstandard for TCN), remove charset=ISO-8859-1
- fiddle from the fiddle-averse RVSA comparison, and fix bugs in
- some debugging statements within mod_negotiation. [Koen Holtman]
-
- *) Fixed a rare memory corruption possibility in mod_dir if the index
- file is negotiable and no acceptable variant can be found.
- [Dean Gaudet, Roy Fielding, Martin Kraemer]
-
- *) Win32: Add new config directive, ScriptInterpreterSource, to enable
- searching the Win32 registry for script interpreters.
- [Bill Stoddard]
-
- *) Win32: The compiled-in default filename for the error log is now
- error.log, which matches the default in the distributed httpd.conf.
- [Paul Sutton]
-
- *) Win32: Any error messages from -i or -u command line options are now
- displayed on the console output rather than sent to the error log.
- Also the "Running Apache..." message is not output unless Apache is
- going to serve requests. [Paul Sutton]
-
- *) Rework the MD5 authentication scheme to use FreeBSD's algorithm,
- and use a private significator ('$apr1$') to mark passwords as
- being smashed with our own algorithm. Also abstract the password
- checking into a new ap_validate_password() routine. [Ken Coar]
-
- *) Win32: The filename validity checker now allows "COM" but refuses
- access to "COM1" through "COM4". This allows filenames such
- as "com.name" to be served. [Paul Sutton] PR#3769.
-
- *) BS2000: Adapt to the new ufork() system call interface which will
- make subtasking easier on the OSD/POSIX mainframe environment.
- [Martin Kraemer]
-
- *) Add a compatibility define for escape_uri() -> ap_escape_uri() to
- ap_compat.h. [David White <david persimmon.com>] PR#3725
-
- *) Make NDBM file suffix determination for mod_rewrite more accurate, i.e.
- use `.db' instead of `.pag' not only for FreeBSD, but also when
- the NDBM library looks like Berkeley-DB based.
- [Ralf S. Engelschall] PR#3773
-
- *) Add ability to handle DES or MD5 authentication passwords.
- [Ryan Bloom <rbb Raleigh.IBM.Com>]
-
- *) Fix O(n^2) memory consumption in mod_speling. [Dean Gaudet]
-
- *) SECURITY: Avoid some buffer overflow problems when escaping
- quoted strings. (This overflow was on the heap and we believe
- impossible to exploit.) [Rick Perry <perry ece.vill.edu>]
-
- *) Let src/Configure be aware of CFLAGS options starting with plus
- signs as it's the case for the HP/UX compiler.
- [Doug Yatcilla <yatcilda umdnj.edu>] PR#3681
-
- *) Remove the hard-wire of TAR=tar (we now check for gtar and gnutar first)
- and check to see if the tar we wind up with supports '-h'.
- [Jim Jagielski] PR#3671
-
- *) A consistent and conservative style for all shell scripts has been
- implemented. Basically, all shell string tests use the traditional
- hack of 'if [ "x$var" != "x" ]' or 'if [ "x$var" = "xstring" ]'
- to protect against bare null variable strings (ie: wrapping both
- sides with double quotes and prepending 'x'). 'x' was chosen
- because it's more universal and hopefully easier for old shell
- prgrammers, as well as being easier to search for in 'vi' (/x\$) :)
- [Jim Jagielski]
-
- *) The status module now prints out both the main server generation as
- well as the generation of each process. Also, the vhost info is
- printed with '?notable'. [Jim Jagielski]
-
- *) Move src/main/md5c.c to src/ap/ap_md5c.c; it's httpd-neutral
- and this makes its functions available to things in src/support.
- [Ken Coar]
-
-Changes with Apache 1.3.4
-
- *) Renamed macros status_drops_connection to ap_status_drops_connection
- and vestigial scan_script_header to ap_scan_script_header_err,
- mostly for aesthetic reasons. [Roy Fielding]
-
- *) The query switch "httpd -S" didn't exit after showing the
- vhost settings. That was inconsistent with the other query functions.
- [Martin Kraemer]
-
- *) Moved the MODULE_MAGIC_COOKIE from before the versions and
- filename to the end of the STANDARD_MODULE_STUFF. Its
- presence at the beginning prevented reporting of the filename
- for modules compiled before 1 January 1999. [Ken Coar]
-
- *) SECURITY: ap_os_is_filename_valid() has been added to Win32
- to detect and prevent access to special DOS device file names.
- [Paul Sutton, Ken Parzygnat]
-
- *) WIN32: Created new makefiles Makefile_win32.txt (normal build)
- and Makefile_win32_debug.txt (debug build) that work on Win95.
- Run each of the following from the src directory:
- nmake /f Makefile_win32.txt # compiles normal build
- nmake /f Makefile_win32.txt install # compiles and installs
- nmake /f Makefile_win32.txt clean # removes compiled junk
- nmake /f Makefile_win32_debug.txt # compiles debug build
- nmake /f Makefile_win32_debug.txt install
- nmake /f Makefile_win32_debug.txt clean
- [Roy Fielding]
-
- *) Added binbuild.sh and findprg.sh helpers to make it easier for us
- to build binary distributions. [Lars Eilebrecht]
-
- *) IndexOptions SuppressColumnSorting only turned off making
- the column headers anchors; you could still change the display
- order by manually adding a '?N=A' or similar query string to the
- URL. Now SuppressColumnSorting locks in the sort order so
- it can't be overridden this way. [Ken Coar]
-
- *) Added IndexOrderDefault directive to supply a default sort order
- for FancyIndexed directory listings. [Ken Coar] PR#1699
-
- *) Change the ap_assert macro to a variant that works on all platforms.
- [Richard Prinz <richard.prinz cso.net>] PR#2575
-
- *) Make sure under ELF-based NetBSD (now) and OpenBSD (future) we don't
- search for an underscore on dlsym() (as it's already the case
- for FreeBSD 3.0). [Todd Vierling <tv pobox.com>] PR#2462
-
- *) Small fix for mod_env.html: The module was documented as to be _not_
- compiled into Apache per default, although it _IS_ compiled into
- Apache per default. [Sim Harbert <sim mindspring.com>] PR#3572
-
- *) Instead of fixing a bug in the generation procedure for config.status (a
- backslash was missing) we remove the bug together with it's complete
- context because the special cases of the past can now no longer occur
- because of the recent magic for the --with-layout default.
- [Ralf S. Engelschall] PR#3590
-
- *) Make top-level Makefile aware of a parallel build procedures (make -j) by
- making sure the src/support/ tools are _forced_ to be build last (they
- depend on other libraries).
- [Markus Theissinger <markus.theissinger gmx.de>]
-
- *) Fix installation procedure: Now that os-inline.c is actually used (a
- recently fixed bug prevented this) we need to also install os-include.c
- in addition to os.h into the PREFIX/include/ location or building of
- module DSOs with APXS fails. [Ralf S. Engelschall] PR#3527
-
- *) Added MODULE_MAGIC_COOKIE as the first field in a module structure to
- allow us to distinguish between a garbled DSO (or even a file which isn't
- an Apache module DSO at all) and a DSO which doesn't match the current
- Apache API. [Ralf S. Engelschall] PR#3152
-
- *) Two minor enhancements to mod_rewrite: First RewriteRule now also
- supports the ``nocase|NC'' flag (as RewriteCond already does for ages) to
- match case insensitive (this especially avoids nasty patterns like
- `[tT][eE][sS][tT]'). Second two additional internal map functions
- `escape' and `unescape' were added which can be used to escape/unescape
- to/from hex-encodings in URLs parts (this is especially useful in
- combination with map lookups).
- [Magnus Bodin, Ian Kallen, Ralf S. Engelschall]
-
- *) Renamed the macro escape_uri() to ap_escape_uri() which was
- forgotten (because it was a macro) in the symbol renaming process.
- [Ralf S. Engelschall]
-
- *) Fix some inconsistencies related to the scopes of directives. The only
- user visible change is that the directives `UseCanonicalName' and
- `ContentDigest' now use the (more correct) `Options' scope instead of
- (less correct) `AuthConfig' scope. [Ralf S. Engelschall]
-
- *) Using DSO, the Server token was being mangled. Specifically, the
- module's token was being added first before the Apache token. This
- has been fixed. [Jim Jagielski]
-
- *) Major overhaul of mod_negotiation.c, part 2.
- - properly handle "identity" within Accept-Encoding.
- - allow encoded variants in RVSA negotiation and let them appear in
- the Alternates field using the non-standard "encoding" tag-list.
- - fixed both negotiation algorithms so that an explicitly accepted
- encoding is preferred over no encoding if "identity" is not
- included within Accept-Encoding.
- - added ap_array_pstrcat() to alloc.c for efficient concatenation
- of large substring sequences.
- - replaced O(n^2) memory hogs in mod_negotiation with ap_array_pstrcat.
- [Roy Fielding]
-
- *) Major overhaul of mod_negotiation.c, part 1.
- - cleanups to mod_negotiation comments and code structure
- - made compliant with HTTP/1.1 proposed standard (rfc2068) and added
- support for everything in the upcoming HTTP/1.1
- revision (draft-ietf-http-v11-spec-rev-06.txt).
- - language tag matching also handles tags with more than 2
- levels like x-y-z
- - empty Accept, Accept-Language, Accept-Charset headers are
- processed correctly; previously an empty header would make all
- values acceptable instead of unacceptable.
- - allowed for q values in Accept-Encoding
- - added support for transparent content negotiation (rfc2295 and
- rfc2296) (though we do not implement all features in these drafts,
- e.g. no feature negotiation). Removed old experimental version.
- - implemented 'structured entity tags' for better cache correctness
- (structured entity tags ensure that caches which can deal with Vary
- will (eventually) be updated if the set of variants on the server
- is changed)
- - this involved adding a vlist_validator element to request_rec
- - this involved adding the ap_make_etag() function to the global API
- - modified guessing of charsets used by Apache negotiation algorithm
- to guess 'no charset' if the variant is not a text/* type
- - added code to sort multiviews variants into a canonical order so that
- negotiation results are consistent across backup/restores and mirrors
- - removed possibility of a type map file resolving to another type map
- file as its best variant
- [Koen Holtman, Roy Fielding, Lars Eilebrecht] PR#3451, 3299, 1987
-
- *) RFC2396 allows the syntax http://host:/path (with no port number)
- but the proxy disallowed it (ap_proxy_canon_netloc()).
- [David Kristol <dmk bell-labs.com>] PR#3530
-
- *) When modules update/modify the file name in the configfile_t structure,
- syntax errors will report the updated name, not the original one.
- [Fabien Coelho <coelho cri.ensmp.fr>] PR#3573
-
- *) Correct some filename case assumptions from WIN32 to
- CASE_BLIND_FILESYSTEM. [Brian Havard <brianh kheldar.apana.org.au>]
-
- *) For %v log ServerName regardless of the UseCanonicalName
- setting (similarly for %p). [Dean Gaudet]
-
- *) Configure was initializing the variables $OSDIR, $INCDIR and $SHELL
- rather late (too late for some invocations of TestCompile).
- This improves the make environment available to TestCompile and
- the *.module scripts. [Martin Kraemer]
-
- *) The hashbang emulation code in ap_execve.c would interpret
- #!/hashbang/scripts correctly, but failed to fall back to a
- standard shell for scripts which did NOT start with #!
- Now SHELL_PATH is started in these cases. [Martin Kraemer]
-
- *) PORT: Added the Cyberguard V2 port [Richard Stagg <stagg lentil.org>]
- PR#3336
-
- *) Update APXS manual page: some -q option arguments were missing
- and another was incorrect. [Mark Anderson <mda discerning.com>] PR#3553
-
- *) Cleanup the command line options: `-?' was documented to show
- the usage list but does it with an error because `?' is not a valid
- command. OTOH a lot of users expect `-h' to print such a usage list and
- instead are annoyed for ages by our huge unreadable list of directives.
- So we now changed the command line options this way:
- 1. `-L' => `-R'
- Intent: we need `-L' to be free, and `-R' for the DSO run-time path is
- very similar to the popular linker option.
- 2. `-h' => `-L'
- Intent: while -l gives the small list of modules, -L now gives the
- large list of directives implemented by these modules. This is also
- consistent with -v (short version info) and -V (large version info).
- 3. `-?' => `-h'
- Intent: it's now the expected option ;-)
- The manual page was adjusted accordingly.
- [Ralf S. Engelschall] PR#2714
-
- *) Fixed problem of fclose() on an unopened file in suexec if LOG_EXEC
- wasn't defined. [Rick Franchuk <rickf transpect.net>]
-
- *) Removed recently introduced bugs and disfigurements in APACI:
- o fixed argument line processing: using $args was broken: It was not
- initialized and using args="$args $apc_option" and even args="$args
- \"$apc_option\"" fails in the second processing round for any arguments
- containing whitespaces. The only correct way is to use the construct
- "$@" (but not possible here) or iterate _both_ times over the implicit
- argument line (no argument to for-loop) which is what we now use.
- o make --with-layout=Apache the default without creating
- redundancy (copying the --with-layout block in the argument parsing
- loop). We achieve this by using the "$@" construct together with the
- `set' command to prepend --with-layout=Apache to the command line in
- case --with-layout is not used.
- o fixed auto-suffix handling now that config.layout exists.
- Paths which are auto-suffixed are marked with a trailing plus sign in
- config.layout and every path now can be marked this way (not only the
- four paths for which we do it currently). Additionally the suffix is
- no longer a static one. Instead it's now `/<target>' where <target> is
- the argument of the --target option or per default `httpd'.
- o allow also tabs (and only spaces) where we match whitespaces
- o various fixes and cleanups related to used shell coding style
- o made Jim happy by replacing `Written by' with `Initially written by' ;-)
- o trimmed output of --help to fit into 80 columns
- [Ralf S. Engelschall]
-
- *) Added two new core API functions, ap_single_module_configure() and
- ap_single_module_init(), which are now used by mod_so to configure a module
- after loading. [Ralf S. Engelschall]
-
- *) PORT: Add defines for USE_FLOCK_SERIALIZED_ACCEPT and
- SINGLE_LISTEN_UNSERIALIZED_ACCEPT to NetBSD/OpenBSD section
- of ap_config.h to allow serialized accept for multiport listens.
- [Roy Fielding, Curt Sampson] PR#3120
-
- *) PORT: Fixed a misplaced #endif for NetBSD/OpenBSD section
- of ap_config.h that would skip several defines if DEFAULT_GROUP
- was overridden. [Roy Fielding]
-
- *) PORT: The I86 version of DGUX has support for strncasecmp and
- strcasecmp, so allow it in ap_config.h. [Amiel Lee Yee] PR#3247
-
- *) Fix ordering of definitions in ap_config.h so that ap_inline is
- defined before it might be used. [Victor Khimenko]
-
- *) PORT: Add Dynamic Shared Object (DSO) support for BSDI (v4.0).
- [Tom Serkowski <tks bsdi.com>] PR#3453
-
- *) Make generation of src/Configuration.apaci more robust: It failed to
- differenciate between modules when one module name was a postfix of
- another (e.g. cgi vs. fastcgi). We now check for mod_XXX, libXXX and even
- just XXX (think about totally non-standard names like "apache_ssl", too).
- [Ralf S. Engelschall] PR#3380
-
- *) In src/Configure remove the SERVER_SUBVERSION support (already deprecated
- since 1.3b7) and make whitespace handling more robust (it failed horrible
- when whitespaces were present in the arguments of -D options).
- [Ralf S. Engelschall] PR#3240
-
- *) Add APACI --shadow=DIR variant (in addition to --shadow). This now first
- creates an external package shadow tree in DIR before the local build
- shadow tree is generated under DIR. This way one can have the extracted
- Apache distribution tree read-only on NFS or CDROM and still build Apache
- from these sources. An automatically triggered VPATH-like mechanism is
- provided through the TOP variable, too.
- [Ralf S. Engelschall, Wilfredo Sanchez <wsanchez apple.com>]
-
- *) Fix negotiation so that a Vary response header is correctly
- generated when, for a particular dimension, variants only vary
- in having or not having a value for that dimension. [Paul Sutton]
-
- *) Fix negotiation so that we prefer an encoded variant over an
- unencoded variant if the user-agent explicitly says it can
- accept that encoding. Previously we always preferred the unencoded
- variant.
- [Paul Ausbeck <paula alumni.cse.ucsc.edu>, Paul Sutton] PR#3447
-
- *) Fix APXS tool: query variables LIBS_SHLIB and TARGET were not recognized
- and the usage page was inconsistent with the functionality and manpage.
- [Ralf S. Engelschall]
-
- *) Allow special options -Wc,xxx and -Wl,xxx on APXS compile/link command.
- They can occur multiple times and their arguments (`xxx') are passed AS
- IS to the compiler/linker command. [Ralf S. Engelschall]
-
- *) Fixed possible (but harmless in practice) bug in the DBM lookup
- procedure of mod_rewrite: very long keys were truncated.
- [Ralf S. Engelschall]
-
- *) Added a generic --with-layout=[FILE:]ID option. ID here is a layout
- identifier, currently "Apache" and "GNU" are pre-defined in the file
- config.layout. Custom layouts are possible by using FILE:ID as the
- argument where the layout ID is taken from FILE.
-
- The config.layout file consists of <Layout ID>..</Layout> sections
- where inside those sections "path_variable: path_value" pairs can be
- specified. These lines are converted to path_variable='path_value'.
-
- *) Add a DefaultLanguage directive so that files missing a language
- extension (e.g., .fr, .de) can be labelled as being some other
- default language. DefaultLanguage can appear in <Directory> and
- <Files> containers as well as .htaccess files. [Paul Sutton]
- PR#1180
-
- *) Fix TARGET configuration when configuring and installing using
- APACI configure. TARGET now defines the basename of the configuration
- file, startup script, manual page, etc. log_error_core() now reports
- the server binary name given by argv[0]. TARGET can now also be defined
- with --target=TARGET parameter passed to APACI configure.
- [Ralf Engelschall, Randy Terbush]
-
- *) mod_include.c:handle_perl() now properly tests for OPT_INCNOEXEC
- rather than OPT_INCLUDES [Rainer Schoepf <schoepf uni-mainz.de>]
-
- *) ap_md5_binary() was using sprintf() rather than a table lookup
- to convert binary bytes to hex digits.
- [Ronald Tschalär <ronald innovation.ch>] PR#3409
-
- *) Fix SEGV in TCN negotiation if no variants are acceptable.
- [Martin Plechsmid <plechsmi karlin.mff.cuni.cz>] PR#1987
-
- *) API: ap_exists_config_define() function is now "public" [Doug MacEachern]
-
- *) Fix documentation of `Action' directive: It can activate a CGI script
- when either a handler or a MIME content type is triggered by the request.
- [Andrew Pimlott <pimlott math.harvard.edu>] PR#3340
-
- *) Document the `add' command of `dbmmanage' in `dbmmanage.1' manpage.
- [David MacKenzie <djm uu.net>] PR#3394
-
- *) Ignore a "ErrorDocument 401" directive with a full URL and write a
- notice to the error log. It is not possible to send a 401 response
- and a redirect at the same time. [Lars Eilebrecht]
-
- *) Fallback to native compilers for IRIX-32 platform. It seems that
- a gcc 2.8.1 compiled apache is logging client addresses with all
- bits set (255.255.255.255). This is the second such problem caused
- by gcc 2.8.1 compiler. The first being broken semaphore locking.
- [Randy Terbush]
-
- *) Updated mime.types to reflect current Internet media types
- and include a URL to the registry.
- [Manoj Kasichainula, Roy Fielding] PR#2380, 2286, 2246
-
- *) SECURITY: Do a more complete check in mod_include to avoid
- an infinite loop of recursive SSI includes. [Marc Slemko] PR#3323
-
- *) Add APACI --suexec-docroot and --suexec-logfile options which can be
- used to set the document root directory (DOC_ROOT) and the suexec
- logfile (LOG_EXEC), respectively. Additionally the --layout option
- was changed to show more information about the suEXEC setup.
- [Lars Eilebrecht] PR#3316, 3357, 3361
-
- *) Added the last two WebDAV status codes of 424 (Failed Dependency)
- and 507 (Insufficient Storage) for use by third-party modules.
- [Roy Fielding]
-
- *) Enabled all of the WebDAV method names for use by third-party
- modules, Limit, and Script directives. That includes PATCH,
- PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, and UNLOCK.
- Improved mod_actions.c so that it can use any of the methods
- defined in httpd.h. Added ap_method_number_of(method) for
- getting the internal method number. [Roy Fielding]
-
- *) PORT: Add a port to the TPF OS. [Joe Moenich <moenich us.ibm.com> and
- others at IBM]
-
- *) Fix problems with handling of UNC names (e.g., \\host\path)
- on Win32. [Ken Parzygnat <kparz us.ibm.com>]
-
- *) Rework os_canonical_*() on Win32 so it's simpler, more
- robust, and works. [Ken Parzygnat <kparz us.ibm.com>]
- PR#2555, 2915, 3064, 3232
-
- *) Work around incomplete implementation of strftime on Win32.
- [Manoj Kasichainula, Ken Parzygnat <kparz us.ibm.com>]
-
- *) Move a typedef to fix compile problems on Linux with 1.x kernels.
- [Manoj Kasichainula] PR#3177
-
- *) PORT: Add a port to the Concurrent PowerMAX OS. [Tom Horsley
- <Tom.Horsley mail.ccur.com>]
-
- *) WIN32: Log more explicit error messages if spawning an interpreted
- script failed, including the command line used to attempt to execute
- the interpreter and the Win32 error code returned. [Marc Slemko]
-
- *) Disable sending of error-notes on a 500 (Internal Server Error) response
- since it often includes file path info. Enable sending of error-notes
- on a 501 (Method Not Implemented). [Roy Fielding] PR#3173
-
- *) http_config.c would respond with 501 (Method Not Implemented) if a
- content type handler was specified but could not be found, which
- should have been a 500 response. Likewise, mod_proxy.c would responsd
- with a 501 if the URI scheme is unrecognized instead of the correct
- response of 403 (Forbidden). [Roy Fielding]
-
- *) SECURITY: Eliminate DoS attack when a bad URI path contains what
- looks like a printf format escape. [Marc Slemko, Studenten Net Twente]
-
- *) Fix in mod_autoindex: for files where the last modified time stamp was
- unavailable, an empty string was printed which was 2 bytes short.
- The size and description columns were therefore not aligned correctly.
- [Martin Kraemer] (no PR#)
-
- *) Update BS2000 OS code to work with recent versions. Starting with
- release A17, the child fork() must be replaced by a _rfork().
- (BS2000 only) [Martin Kraemer]
-
- *) Add the actual server_rec structure of the specific Vhost to the
- scoreboard file and avoid a string copy (as well as allow some
- further future enhancements). [Harrie Hazewinkel
- <harrie.hazewinkel jrc.it>]
-
- *) Add APACI --permute-module=foo:bar option which can be used to
- on-the-fly/batch permute the order of two modules (mod_foo and mod_bar)
- in the Configuration[.apaci] file. Two special and important variants are
- supported for the option argument: first BEGIN:foo which permutes module
- mod_foo with the begin of the module list, i.e. it `moves' the module to
- the begin of the list (gives it lowest priority). And second foo:END
- which permutes mod_foo with the end of the module list, i.e. it `moves'
- the module to the end of the list (gives it highest priority).
- [Ralf S. Engelschall]
-
- *) Fix problem with 'apache -k shutdown' and startup event
- synchronisation (Win32). [Ken Parzygnat <kparz raleigh.ibm.com>]
- PR#3255
-
- *) The config parser wasn't correctly noticing a missing '>'
- on container start lines (e.g., it wouldn't spot
- "<Directory /" as a syntax error). [Ryan Bloom <rbbloom us.ibm.com>]
- PR#3279
-
- *) Add a 'RemoveHandler' directive which will selectively remove
- all handler associations for the specified file extensions.
- [Ryan Bloom <rbbloom us.ibm.com>] PR#1799.
-
- *) Properly handle & allow "nul" and ".*/null" in AccessConfig and
- ResourceConfig directives on Win32. Also add a note to the effect
- of 'useless User directive ignored on Win32' to the errorlog if
- a User directive is encountered on Win32.
- [Ken Parzygnat <kparz raleigh.ibm.com>] PR#2078, 2303.
-
- *) Fix multiple whitespace handling in imagemaps for mod_imap which was
- broken since Apache 1.3.1 where we took out compressing of multiple
- spaces in ap_cfg_getline().
- [Ivan Richwalski <ivan seppuku.net>] PR#3249
-
- *) Fix Berkeley-DB/2.x support in mod_auth_db: The data structures were not
- initialized correctly and the db_open() call used an invalid mode
- parameter. [Ron Klatchko <ron ckm.ucsf.edu>] PR#3171
-
- *) PORT: DSO support for UnixWare 7
- [Ralf S. Engelschall, Ron Record <rr sco.com>]
-
- *) Merge the contents of the {srm,access}.conf-dist* files into the
- httpd.conf-dist* files. The srm and access files now contain
- only comments, and httpd.conf has all the combined contents in
- a rational order. [Ken Coar]
-
- *) PORT: DSO/ELF support for FreeBSD 3.0.
- [Ralf S. Engelschall, Dirk Froemberg <ibex physik.TU-Berlin.DE>]
-
- *) Add a "default-handler" handler that calls the default_hander()
- function which is normally called for static content. This allows
- you to override a specific handler. [Marc Slemko]
-
- *) Further simplify checking for absolute paths by replacing an
- hard-coded syntax check with a call to a routine we already created to
- do this. [Ken Parzygnat <kparz raleigh.ibm.com>] PR#2976, 3074
-
- *) Log an error if we encounter a malformed "require" directive
- in mod_auth if we know that we know that no other module can
- deal with it. [Marc Slemko]
-
- *) Remove ap_private_extern method of hiding conflicting symbols
- on the NEXT platform because it is not correct for all versions,
- and the versions for which it is correct are unknown.
- [Wilfredo Sanchez <wsanchez apple.com>]
-
- *) Fix inheritance of IndexOptions NameWidth and remove unintended
- restriction on +NameWidth, +IconHeight, and +IconWidth. [Ken Coar]
-
- *) Fix per-directory config merging for cases in which a 500 error
- is encountered in an .htaccess file somewhere down the tree.
- [Ken Coar] PR#2409
-
- *) Minor performance improvement to ap_escape_html(). [Roy Fielding]
-
- *) Fixed a segmentation violation in mod_proxy when a response is
- non-cachable. [Roy Fielding, traced by Doug Bloebaum]. PR#2950, 3056
-
-Changes with Apache 1.3.3
-
- *) Added a complete implementation of the Expect header field as
- specified in rev-05 of HTTP/1.1. Disabled the 100 Continue
- response when we already know the final status, which is mighty
- useful for PUT responses that result in 302 or 401. [Roy Fielding]
-
- *) Remove extra trailing whitespace from the getline results as part
- of the protocol processing, which is extra nice because it works
- between continuation lines, is almost no cost in the normal case
- of no extra whitespace, and saves memory. [Roy Fielding]
-
- *) Added new HTTP status codes and default response bodies from the
- revised HTTP/1.1 (307, 416, 417), WebDAV (102, 207, 422, 423), and
- HTTP Extension Framework (510) specifications. Did not add the
- WebDAV 424 and 425 codes because they are bogus. We don't use any
- of these codes yet, but they are now available to 3rd-party modules.
- [Roy Fielding]
-
- *) Fix a possible race condition between timed-out requests and the
- ap_bhalfduplex select that might result in an infinite loop on
- platforms that do not validate the descriptor. [Roy Fielding]
-
- *) WIN32: Add "-k shutdown" and "-k restart" options to signal a
- running Apache server [Paul Sutton]
-
- *) Fix mod_autoindex bug where directories got a size of "0k" instead
- of "-". [Martin Plechsmid <plechsmi karlin.mff.cuni.cz>, Marc Slemko]
- PR#3130
-
- *) PORT: DRS 6000 machine. [Paul Debleecker <pdebleecker jetair.be>]
-
- *) Add the server signature text (from the core ServerSignature directive)
- to the list of envariables available to scripts, SSI, and the like.
- [Ken Coar]
-
- *) PORT: Fix sys/resource.h handling for SCO 3.x platform.
- [M. Laak <maert proinv.ee>] PR#3108
-
- *) Fallback from sysconf-based to plain HZ-based `ticks per second'
- calculation in mod_status for all systems which don't have POSIX
- sysconf() (like UTS 2.1) and not only for the NEXT platform.
- [Dave Dykstra <dwd bell-labs.com>] PR#3055
-
- *) Fix `require ...' directive parsing in mod_auth, mod_auth_dbm and
- mod_auth_db by using ap_getword_white() (which uses ap_isspace())
- instead of ap_getword(..., ' ') (which parses only according to spaces
- but not tabs). [James Morris <jmorris intercode.com.au>,
- Ralf S. Engelschall] PR#3105
-
- *) Fix the SERVER_NAME variable under sub-request situations (where
- `UseCanonicalName off' is used) like CGI's called from SSI pages or
- RewriteCond variables by adopting r->hostname to sub-requests.
- [James Grinter <jrg blodwen.demon.co.uk>] PR#3111
-
- *) Fix stderr redirection under syslog-based error logging situation.
- [Youichirou Koga <y-koga jp.FreeBSD.org>] PR#3095
-
- *) Document `ErrorLog syslog:facility' variant of error logging.
- [Youichirou Koga <y-koga jp.FreeBSD.org>] PR#3096
-
- *) Fix http://localhost/ hints in top-level INSTALL document.
- [Rob Jenson <robjen spotch.com>, Ralf S. Engelschall] PR#3088
-
- *) Quote paths in default configuration files. [Wilfredo Sanchez]
-
- *) PORT: Remove extra HAVE_SYS_RESOURCE_H define for RHAPSODY since
- it is now taken care of properly by the header file tests.
- [Wilfredo Sanchez <wsanchez apple.com>]
-
- *) Fix problem with scripts and filehandle inheritance on Win32.
- [Ken Parzygnat <kparz raleigh.ibm.com>] PR#2884, 2910
-
- *) Win32 name canonicalisation could end up using the server's
- working directory to fill in some blanks. [Ken Parzygnat
- <kparz raleigh.ibm.com>] PR#3001
-
- *) Correct invalid assumption by ap_sub_req_lookup_file() that all
- absolute paths begin with "/" -- because they don't on Win32.
- [Ken Parzygnat <kparz raleigh.ibm.com>] PR#2976, 3074
-
- *) Add [REDIRECT_]VARIANTS environment variable to mod_speling
- so that ErrorDocument 300 processors can reformat the list
- if desired. [Ken Coar] PR#2859
-
- *) Add +/- incremental prefixes to IndexOptions keywords, and
- enable merging of multiple IndexOptions directives. [Ken Coar]
-
- *) PORT: Allow GuessOS to recognize Unixware 7.0.1 [Steve Cameron
- <steve.cameron compaq.com>]
-
- *) Reconstructed the loop through multiple htaccess file names so
- that missing files are not confused with unreadable files.
- [Roy Fielding]
-
- *) The ap_pfopen and ap_pfdopen routines were failing to protect the
- errno on an error, which leads to one error being mistaken for
- another when reading non-existent .htaccess files.
- [Jim Jagielski]
-
- *) OS/2: The new header tests get things right, need to update
- ap_config.h. [Brian Havard]
-
- *) The Perl %ENV hash will now be setup by default when using the
- mod_include `perl' command [Doug MacEachern]
-
- *) PORT: Add Pyramid DC/OSx support to configuration mechanism.
- [Earle Ake <akee wpdiss1.wpafb.af.mil>]
-
- *) PORT: Fix sys/resource.h handling for Amdahl's UTS 2.1
- [Dave Dykstra <dwd bell-labs.com>] PR#3054
-
- *) Correct comment in mod_log_config.c about its internals.
- [Elf Sternberg <elf halcyon.com>]
-
- *) Avoid possible line overflow in Configure: Use an awkfile to
- handle the creation of modules.c [Jim Jagielski]
-
-Changes with Apache 1.3.2
-
- *) Fix bug in ap_remove_module(), which caused problems for dso's
- who were the top_module. [Doug MacEachern]
-
- *) Add support for Berkeley-DB/2.x (in addition to Berkeley-DB/1.x) to
- mod_auth_db to both be friendly to users who wants to use this version
- and to avoid problems under platforms where only version 2.x is present.
- [Dan Jacobowitz <drow false.org>, Ralf S. Engelschall]
-
- *) When using ap_log_rerror(), make the error message available to the
- *ERROR_NOTES envariables by default. [Ken Coar]
-
- *) BS2000 platform only: get rid of the nasty BS2000AuthFile.
- You now must define a BS2000Account name for the server User.
- This has fewer security implications than the old approach.
- [Martin Kraemer]
-
- *) Fix SHARED_CORE feature for HPUX platform: We now use extension `.sl'
- instead of `.so' and `SHLIB_PATH' instead of `LD_LIBRARY_PATH' on this
- platform to make the braindead HPUX linker happy. Notice, for the module
- DSOs we don't have to use this, because these are loaded manually (and
- not via HPUX' dld). [Ralf S. Engelschall] PR#2905, PR#2968
-
- *) Remove 64 thread limit on Win32.
- [Bill Stoddard <stoddard raleigh.ibm.com>]
-
- *) Remove redundant substitutions in top-level Makefile.tmpl.
- [Ralf S. Engelschall]
-
- *) Fix APACI's `Group' configuration adjustment - especially for Linux
- platforms where `nogroup' exists in /etc/group. [Ralf S. Engelschall]
-
- *) Make PrintPath work generically instead of having one version
- strictly for OS/2. [Jim Jagielski, Brian Havard]
-
- *) Fix the recently introduced C header file checking: We now use the C
- pre-processor pass only (and no longer the complete compiler pass) to
- determine whether a C header file exists or not. Because only this way
- we're safe against inter-header dependencies (which caused horrible
- portability problems). The only drawback is that we now have a CPP
- configuration variable which has to be determined first (we do a similar
- approach as GNU Autoconf does here). When all fails the user still has
- the possibility to override it manually via APACI or src/Configuration.
- As a fallback for the header check itself we can directly check the
- existance of the file under /usr/include, too.
- [Ralf S. Engelschall] PR#2777
-
- *) PORT: Added RHAPSODY (Mac OS X Server) support. MAP_TMPFILE defined
- as an alternate mechanism for mmap'd shared memory for RHAPSODY.
- ap_private_extern defined to hide symbols that conflict with loaded
- dynamic libraries on the NEXT and RHAPSODY platforms.
- [Wilfredo Sanchez <wsanchez apple.com>]
-
- *) Delete PID file on clean shutdowns.
- [Charles Randall <crandall matchlogic.com>] PR#2947
-
- *) Fix mod_auth_*.html documents: NSCA -> NCSA
- [Youichirou Koga <y-koga jp.FreeBSD.org>] PR#2991
-
- *) Fix INSTALL document: www.gnu.ai.mit.edu -> www.gnu.org
- [Karl Berry <karl gnu.org>] PR#2994
-
- *) Fix dbmmanage.1 manual page.
- [Youichirou Koga <y-koga jp.FreeBSD.org>] PR#2992
-
- *) Fix possible buffer overflow situation in suexec.c.
- [Jeff Stewart <jws purdue.edu>] PR#2790
-
- *) Add some more LIBS for the SCO5 platform which are needed for the already
- used -lprot. It's actually a bug in SCO5, of course.
- [Ronald Record <rr sco.com>] PR#2533
-
- *) Fix documentation of ProxyPass/ProxyPassReverse according to the
- trailing slash problem. [Jon Drukman <jsd gamespot.com>] PR#2933
-
- *) Remove `-msym' option from LDFLAGS_SHLIB for the Digital UNIX (OSF/1)
- platform, because it's only supported under version 4.0 and higher. But
- because our GuessOS is still unaware of Digital UNIX versions and the
- -msym is just to optimize the DSO statup time a little bit it's safe and
- best when we leave it out now. [Ralf S. Engelschall] PR#2969
-
- *) Fix the ap_log_error_old(), ap_log_unixerr() and ap_log_printf()
- functions: First all three functions no longer fail on strings containing
- "%" chars and second ap_log_printf() no longer does a double-formatting
- (instead it directly passes through the message to be formatted to the
- real internal formatting function). [Ralf S. Engelschall] PR#2941
-
- *) Allow "Include" directives anywhere in the server config
- files (but not .htaccess files). [Ken Coar] PR#2727
-
- *) The proxy was refusing to serve CONNECT requests except to
- port 443 (https://) and 563 (snews://). The new AllowCONNECT
- directive allows the configuration of the ports to which a
- CONNECT is allowed. [Sameer Parekh, Martin Kraemer]
-
- *) mod_expires will now act on content that is not sent from a file
- on disk. Previously it would never add an Expires: header to
- any response that did not come from a file on disk; the only
- case where it still doesn't (and can't) add one for that type of
- content is if you are using a modification date based setting.
- [Marc Slemko, Paul Phillips <paulp go2net.com>]
-
- *) Problems encountered during .htaccess parsing or CGI execution
- that lead to a "500 Server Error" condition now provide explanatory
- text (in the *ERROR_NOTES envariable) to ErrorDocument 500 scripts.
- [Ken Coar] PR#1291
-
- *) Add NameWidth keyword to IndexOptions directive so that the
- width of the filename column is customisable. [Ken Coar, Dean Gaudet]
- PR#1949, 2324.
-
- *) Recognize lowercase _and_ uppercase `uname' results under
- SCO OpenServer. [David Coelho <drc ppt.com>]
-
- *) As duplicate "HTTP/1.0 200 OK" lines within the header seem to be
- a common problem of (mis-administrated?) IIS servers, make the apache
- proxy immune to these errors (and ignore the duplicates, but log
- the fact to error_log). [Martin Kraemer], after the proposal in PR#2914
-
- *) The <IfModule and <IfDefine block starting directives now only
- allow exactly one argument. Previously, the optional negation
- character '!' could be separated by whitespace without a syntax
- error being reported, albeit defeating the IfModule functionality
- (enclosed directives would ALWAYS be executed). By using the
- stricter syntax, these hard-to-track errors can be avoided.
- [Martin Kraemer]
-
- *) Simplify handling of IndexOptions in mod_autoindex -- and BTW
- cause the standalone FancyIndexing directive to logically OR
- into any existing IndexOptions settings rather than wiping
- them out. [Ken Coar]
-
- *) Changes in ftp proxy: make URL parsing simpler by using the
- parsed_uri stuff.
- + Add display of the "current directory" in cases where it's
- different from the supplied path (e.g., ftp://user@host/ lives
- in /home/user, not in /, therefore clicking on "../" in the
- starting directory might send us to /home/).
- + When ftp login fails, (esp. when a user name was part of the
- URL already), we now return [401 Unauthorized ] to allow the
- browser to pop up an authorization dialog. This makes passwords
- slightly less visible (they don't appear in the regular log files)
- and implements a functionality that other www proxy servers
- already offered.
- [Martin Kraemer]
-
- *) Triggered by the recent "Via:" header changes, the proxy module would
- dump core for replies with invalid headers (e.g., duplicate
- "HTTP/1.0 200 OK" lines). These errors are now logged and the
- core dump is avoided. Also, broken replies are not cached.
- [Martin Kraemer] PR#2914
-
- *) new `GprofDir' directive when compiled with -DGPROF, where gprof can
- plop gmon.out profile data for each child [Doug MacEachern]
-
- *) Use the construct ``"$@"'' instead of ``$*'' in the generated
- config.status script to be immune against arguments with whitespaces.
- [Yves Arrouye <yves apple.com>] PR#2866
-
- *) Replace the inlined information grabbing stuff for the configuration
- adjustment feature (no --without-confadjust) with calls to a new helper
- script `buildinfo.sh' which is both more flexible and already proofed to
- be more robust against platform differences. This mainly fixes the
- recently occured ``sed: command garbled: ...'' problems.
- [Ralf S. Engelschall] PR#2776, PR#2848
-
- *) Make ab.c again pass ``gcc -Wall -Wshadow -Wpointer-arith -Wcast-align
- -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline''
- without complains after we recently added the POST feature.
- [Ralf S. Engelschall]
-
- *) Renamed is_HTTP_xxx() macros to ap_is_HTTP_xxx() name. They are used inside
- modules as API functions and we forgot them at the big symbol renaming.
- [Ralf S. Engelschall]
-
- *) Remove bad reference to non-existing SERVER_VERSION in mod_rewrite.html
- [Youichirou Koga <y-koga jp.FreeBSD.ORG>] PR#2895
-
- *) Dynamically size the filename column of mod_autoindex output.
- [Dean Gaudet]
-
- *) Add the ability to do POST requests to the ab benchmarking tool.
- [Kurt Sussman <kls best.com>] PR#2871
-
- *) Bump up MAX_ENV_FLAGS in mod_rewrite.h from the too conservatice limit of
- 5 to 10 because there are some users out there who always have 5 to 8
- variables in one RewriteRule and had to patch mod_rewrite.h for every
- release. So 15 should be now more than enough, even for them. (I never
- needed more than 4 in my RewriteRules ;-)
- [Ralf S. Engelschall]
-
- *) Make the proxy generate and understand Via: headers
- [Martin Kraemer]
-
- *) Change the proxy to use tables instead of array_headers for
- the header lines. [Martin Kraemer]
-
- *) Make sure the config.status file is not overridden when just
- ``configure --help'' is used. [Ralf S. Engelschall] PR#2844
-
- *) Split MODULE_MAGIC_NUMBER into _MAJOR/_MINOR numbers. This should
- provide a way to trace API changes that add functionality but do
- not create a compatibility issue for precompiled modules, etc.
- See include/ap_mmn.h for more details. [Randy Terbush]
-
- *) Fix suexec installation under `make install root=xxx' situation.
- [Ralf S. Engelschall]
-
- *) Extend the output of the -V switch to include the paths of all
- compiled-in configuration files, if they were overridden at
- compile time, for least astonishment of the user.
- [Martin Kraemer]
-
- *) When READing a request in ExtendedStatus mode, the "old"
- vhost, request and client information is not displayed.
- [Jim Jagielski]
-
- *) STATUS is no longer available. Full status information now
- run-time configurable using the ExtendedStatus directive.
- [Jim Jagielski]
-
- *) SECURITY [CAN-1999-1199] (cve.mitre.org):
- Eliminate O(n^2) space DoS attacks (and other O(n^2)
- cpu time attacks) in header parsing. Add ap_overlap_tables(),
- a function which can be used to perform bulk update operations
- on tables in a more efficient manner.
- [Dean Gaudet]
-
- *) SECURITY: Added compile-time and configurable limits for
- various aspects of reading a client request to avoid some simple
- denial of service attacks, including limits on maximum request-line
- size (LimitRequestLine), number of header fields (LimitRequestFields),
- and size of any one header field (LimitRequestFieldsize). Also added
- a configurable directive LimitRequestBody for limiting the size of the
- request message body. [Roy Fielding]
-
- *) Make status module aware of DNS and logging states, even if
- STATUS not defined. [Jim Jagielski]
-
- *) Fix a problem with the new OS/2 mutexes. [Brian Havard]
-
- *) Enhance mod_speling so that CheckSpelling can be used in
- <Directory> containers and .htaccess files. [Ken Coar]
-
- *) API: new ap_custom_response() function for hooking into the
- ErrorDocument mechanism at runtime [Doug MacEachern]
-
- *) API: new ap_uuencode() function [Doug MacEachern]
-
- *) API: scan_script_header_err_core() now "public" and renamed
- ap_scan_script_header_err_core() [Doug MacEachern]
-
- *) The 'status' module will now show the process pid's and their
- state even without full STATUS accounting. [Jim Jagielski]
-
- *) Restore the client IP address to the error log messages, this
- was lost during the transition from 1.2 to 1.3. Add a new
- function ap_log_rerror() which takes a request_rec * and
- formats it appropriately. [Dean Gaudet] PR#2661
-
- *) Cure ap_cfg_getline() of its nasty habit of compressing internal
- whitespace in input lines -- including within quoted strings.
- [Ken Coar]
- but leading and trailing whitespace should continue to be
- stripped [Martin Kraemer]
-
- *) Cleanup of the PrintPath/PrintPathOS2 helper functions. Avoid
- the ugly use of an env. variable and use command-line args for
- alternate $PATH. Make more like advanced 'type's as well.
- [Jim Jagielski]
-
- *) The IRIXN32 Rule was being ignored. Configure now correctly adds
- -n32 only if IRIXN32 says to. [Jim Jagielski, Alain St-Denis
- <alain.st-denis ec.gc.ca>] PR#2736
-
- *) Clean up a warning in mod_proxy. [Ralf S. Engelschall]
-
- *) Renamed __EMX__ (internal define of the gcc port under OS/2) to OS2
- following the same idea as "MSVC vs WIN32". Additionally the src/os/emx/
- directory was renamed to src/os/os2/ for consistency.
- [Brian Havard, Ralf S. Engelschall]
-
- *) Add new Rule SHARED_CHAIN which can be used to enable linking of DSO
- files (here modules) against other DSO files (here shared libraries).
- This is done by determining a subset of LIBS which can be safely used for
- linking the DSOs, i.e. PIC libs and shared libs. Currently the rule is
- disabled for all platforms to avoid problems with this (experimental)
- rule. But we provide it now for those people how ran into problems and
- want to came out by forcing linking against DSOs.
- [Ralf S. Engelschall] PR#2587
-
- *) Fix suEXEC start message: Has to be of `notice' level to really get
- printed together with the standard startup message because the `notice'
- level is handled special inside ap_log_error() for startup messages.
- [Ralf S. Engelschall] PR#2761 PR#2761 PR#2765
-
- *) Add correct `model' MIME types from RFC2077 to mime.types file.
- [Ralf S. Engelschall] PR#2732
-
- *) Fixed examples in mod_rewrite.html document.
- [Youichirou Koga <y-koga jp.FreeBSD.org>, Ralf S. Engelschall] PR#2756
-
- *) Allow ap_read_request errors to propagate through the normal request
- handling loop so that the connection can be properly closed with
- lingering_close, thus avoiding a potential TCP reset that would
- cause the client to miss the HTTP error response. [Roy Fielding]
-
- *) One more portability fix for APACI shadow tree support: Swap order of awk
- and sed in top-level configure script to avoid sed fails on some
- platforms (for instance SunOS 4.1.3 and NCR SysV) because of the
- non-newline-termined output of Awk. [Ralf S. Engelschall] PR#2729
-
- *) PORT: NEC EWS4800 support.
- [MATSUURA Takanori <t-matsuu protein.osaka-u.ac.jp>]
-
- *) Fix a segfault in the proxy on OS/2. [Brian Havard]
-
- *) Fix Win32 part of ap_spawn_child() by providing a reasonable child_info
- structure instead of just NULL. This fixes at least the RewriteMap
- programs under Win32. [Marco De Michele <mdemichele tin.it>] PR#2483
-
- *) Add workaround to top-level `configure' script for brain dead
- `echo' commands which interpet escape sequences per default.
- [Ralf S. Engelschall] PR#2654
-
- *) Make sure that the path to the Perl interpreter is correctly
- adjusted under `make install' also for the printenv CGI script.
- [Ralf S. Engelschall] PR#2595
-
- *) Update the mod_rewrite.html document to correctly reflect the situation
- of the `proxy' (`[P]') feature. [Ralf S. Engelschall] PR#2679
-
- *) Fix `install-includes' sub-target of `install' target in top-level
- Makefile.tmpl: The umask+cp approach didn't work as expected (especially
- for users which extracted the distribution under 'umask 077'), so replace
- it by an explicit cp+chmod approach.
- [Richard Lloyd, Curt Sampson, Ralf S. Engelschall] PR#2656 PR#2626
-
- *) Fix `distclean' and `clean' targets in src/Makefile.tmpl to have same
- behavior and to cleanup correctly even under enabled SHARED_CORE rule.
- [Ralf S. Engelschall]
-
- *) Use a more straight forward and thus less problematic Sed command in
- src/helper/mkdir.sh script. [Ralf S. Engelschall]
-
- *) Make sure the `configure' scripts doesn't fail when trying to guess the
- domainname of the machine and there are multiple `domainname' and
- `search' entries in /etc/resolv.conf.
- [Ralf S. Engelschall] PR#2710
-
- *) Add note about the SHARED_CORE requirement on some platforms also to the
- INSTALL file because a lot of users don't read htdocs/manual/dso.html
- first. [Ralf S. Engelschall] PR#2701
-
- *) Fix document "hyperlink" for dso.html in src/Configuration.tmpl
- [Knut A.Syed <Knut.Syed nhh.no>] PR#2674
-
- *) Modify mod_rewrite to update the Vary response field if the URL rewriting
- engine does any manipulations or decisions based upon request fields.
- [Ken Coar] PR#1644
-
- *) Document the special APACI behavior for installation paths where
- ``/apache'' is appended to paths under some (well defined, of course)
- situations to prevent pollution of system locations with Apache files.
- [Ralf S. Engelschall] PR#2660
-
- *) Fixed problem with buffered response message not being sent for
- the read_request error conditions of URI-too-long (414) and
- malformed header fields (400). [Roy Fielding] PR#2646
-
- *) Add support for the Max-Forwards: header line required by RFC2068 for
- the TRACE method. This allows apache to TRACE along a chain of proxies
- up to a predetermined depth. [Martin Kraemer]
-
- *) Fix SHARED_CORE rule: The CFLAGS_SHLIB variable is no longer doubled
- (compilers complained) and the .so.V.R.P filename extension was adjusted
- to correctly reflect the 1.3.2 version.
- [Ralf S. Engelschall] PR#2644
-
- *) SECURITY: Plug "..." and other canonicalization holes under OS/2.
- [Brian Havard]
-
- *) PORT: implement serialized accepts for OS/2. [Brian Havard]
-
- *) mod_include had problems with the fsize and flastmod directives
- under WIN32. Fix also avoids the minor security hole of using
- ".." paths for fsize and flastmod.
- [Manoj Kasichainula <manojk raleigh.ibm.com>] PR#2355
-
- *) Fixed some Makefile dependency problems. [Dean Gaudet]
-
-Changes with Apache 1.3.1
-
- *) Disable the incorrect entry for application/msword in the
- mod_mime_magic "magic" file because it also matches other Office
- documents. [Ralf S. Engelschall] PR#2608
-
- *) Fix broken RANLIB handling in src/Configure (the entry from
- src/Configuration.tmpl was ignored) and additionally force RANLIB to
- /bin/true under HP/UX where ranlib exists but is deprecated.
- [Ralf S. Engelschall] PR#2627
-
- *) 'apachectl status' failed on some systems.
- [Steve VanDevender <stevev darkwing.uoregon.edu>, Lars Eilebrecht] PR#2613
-
- *) Add new flags for ap_unparse_uri_components() to make it generate
- the scheme://sitepart string only, or to omit the query string.
- [Martin Kraemer]
-
- *) WIN32: Canonicalize ServerRoot before checking to see if it
- is a valid directory. The failure to do this caused certain
- ServerRoot settings (eg. "ServerRoot /apache") to be improperly
- rejected. [Marc Slemko]
-
- *) Global renaming of C header files to both get rid of conflicts with third
- party packages and to again reach consistency:
- 1. conf.h -> ap_config.h
- 2. conf_auto.h -> ap_config_auto.h \ these are now merged
- 3. ap_config.h -> ap_config_auto.h / in the config process
- 4. compat.h -> ap_compat.h
- 5. apctype.h -> ap_ctype.h
- Backward compatibility files for conf.h and compat.h were created.
-
- *) mod_mmap_static will no longer take action on requests unless at
- least one "mmapfile" directive is present in the configuration.
- This experimental module has to do some black magic to operate
- inside the current API and thus creates side-effects for other
- modules under some circumstances.
- [Ralf S. Engelschall]
-
- *) Add conservative ticks around more egrep arguments in top-level configure
- to avoid problems under brain-dead platforms like Digital UNIX (OSF1).
- [Ralf S. Engelschall] PR#2596
-
- *) mod_rewrite created RewriteLock files under the UID of the parent
- process, thus the child processes had no write access to the files.
- Now a chown() is done on the file to the uid of the children,
- if applicable. [Lars Eilebrecht, Ralf S. Engelschall] PR#2341
-
- *) Autogenerate some HAVE_XXXXX_H defines in conf_auto.h (determined via
- TestCompile) instead of defining them manually in conf.h based on less
- accurate platform definitions. This way we no longer have to fiddle with
- OS-type and/or OS-version identifiers to discover whether a system header
- file exists or not. Instead we now directly check for the existence of
- those esoteric ones.
- [Ralf S. Engelschall] PR#2093, PR#2361, PR#2377, PR#2434,
- PR#2524, PR#2525, PR#2533, PR#2569
-
- *) mod_setenvif (BrowserMatch* and friends) will now match a missing
- field with "^$". [Ken Coar]
-
- *) Set the RTLD_GLOBAL dlopen mode parameter to allow dynamically loaded
- modules to load their own modules dynamically. This improves mod_perl
- and mod_php3 when these modules are loaded dynamically into Apache.
- [Rasmus Lerdorf]
-
- *) Cache a proxied request in the event that the client cancels the
- transfer, provided that the configured percentage of the file has
- already been transfered. It works for HTTP transfers only. The
- new configuration directive is called CacheForceCompletion.
- [Glen Parker <glenebob nwlink.com>] PR#2277
-
- *) Add the "<!DOCTYPE HTML" magic cookie used by modern documents (and
- required by HTML 3.2 and later) to mod_mime_magic's conf/magic.
- [Anna Shergold <anna inext.co.uk>]
-
- *) Fix yet another signal-based race condition involving nested timers.
- Signals suck. [Dean Gaudet]
-
- *) suexec's error messages have been clarified a little bit. [Ken Coar]
-
- *) Clean up some, but perhaps not all, 8-bit character set problems
- with config file parsing, and URL parsing. We now define
- ap_isdigit(), ap_isupper(), ... which cast to an (unsigned char).
- This should work on most modern unixes.
- [Dean Gaudet] PR#800, 2282, 2553 (and others)
-
- *) The "handler not found" error was issued in cases where the handler
- really did exist, but was just declining to serve the request.
- [John Van Essen <jve gamers.org>] PR#2529
-
- *) Add Dynamic Shared Object (DSO) support for SCO5 (OpenServer 5.0.x).
- [Ronald Record <rr sco.com>] PR#2533
-
- *) The APACI libexecdir was not extended with an "apache/" subdir
- if the installation prefix didn't already contain "apache", but
- it should be because the DSO files are Apache-specific. Now
- libexecdir is treated the same way sysconfdir, datadir, localstatedir
- and includedir are already treated.
- [Charles Levert <charles comm.polymtl.ca>] PR#2551
-
- *) The <Limit> parsing routine was incorrectly treating methods as
- case-insensitive. [Ken Coar]
-
- *) The ap_bprintf() code neglected to test if there was an error on
- the connection. ap_bflush() misdiagnosed a failure as a success.
- [Dean Gaudet]
-
- *) add support for #perl arg interpolation in mod_include
- [Doug MacEachern]
-
- *) API: Name changes of table_elts to ap_table_elts, is_table_empty
- to ap_is_table_empty and bgetflag to ap_bgetflag. [Ben Laurie]
-
- *) PORT: Add UnixWare 7 support
- [Vadim Kostoglodoff <vadim olly.ru>] PR#2463
-
- *) Fix the Guess-DSO-flags-from-Perl stuff in src/Configure: "perl" was
- used instead of "$PERL" which contains the correctly determined Perl
- interpreter (important for instance on systems where "perl" and "perl5"
- exists, like BSDI or FreeBSD, etc).
- [Ralf S. Engelschall] PR#2505
-
- *) Move the initial suEXEC-related startup message from plain
- fprintf()/stderr to a delayed ap_log_error()-based one to avoid problems
- when Apache is started from inetd (instead of standalone). Under this
- situation startup messages on stderr lead to problems (the line is sent
- to the client in front of the requested document).
- [Ralf S. Engelschall] PR#871, PR#1318
-
- *) Add a flag so ap_fnmatch() can be used for case-blind pattern matching.
- [Ken Coar, Dean Gaudet]
-
- *) WIN32: Don't collapse multiple slashes in PATH_INFO.
- [Ben Laurie, Bill Stoddard <wgstodda us.ibm.com>] PR#2274
-
- *) WIN32 SECURITY: Eliminate trailing "."s in path components. These are
- ignored by the Windows filesystem, and so can be used to bypass security.
- [Ben Laurie, Alexei Kosut].
-
- *) We now attempt to dump core when we get SIGILL. [Jim Jagielski]
-
- *) PORT: remove broken test for MAP_FILE in http_main.c.
- [Wilfredo Sanchez <wsanchez apple.com>]
-
- *) PORT: Change support/apachectl to use "kill -0 $pid" to test if the
- httpd is running. This should be more portable than figuring out
- which of three dozen different versions of "ps" are installed.
- [a cast of dozens]
-
- *) WIN32: If we can't figure out how to execute a file in a script
- directory, bail out of the request with an error message. [W G Stoddard]
-
- *) WIN32 SECURITY: Eliminate directories consisting of three or more dots;
- these are treated by Win32 as if they are ".." but are not detected by
- other machinery within Apache. This is something of a kludge but
- eliminates a security hole. [Manoj Kasichainula, Ben Laurie]
-
- *) Move ap_escape_quotes() from src/ap to src/main/util.c; it uses
- pools and thus pollutes libap (until the pool stuff is moved there).
- [Ken Coar]
-
- *) IndexIgnore should be case-blind on Win32 (and any other case-aware
- but case-insensitive platforms). New #define for this added to conf.h
- (CASE_BLIND_FILESYSTEM). [Ken Coar] PR#2455
-
- *) Enable DSO support for OpenBSD in general, not only for 2.x, because it
- also works for OpenBSD 1.x. [Ralf S. Engelschall]
-
- *) PORT: Fix compilation problem on ARM Linux.
- [Sam Kington <sam illuminated.co.uk>] PR#2443
-
- *) Let APACI's configure script determine some configuration parameters
- (Group, Port, ServerAdmin, ServerName) via some intelligent tests to
- remove some of the classical hurdles for new users when setting up
- Apache. This is done per default because it is useful for the average
- user. Package authors can use the --without-confadjust option to disable
- these configuration adjustments.
- [Ralf S. Engelschall]
-
- *) Added an EXTRA_DEPS configuration parameter which can be used
- to add an extra Makefile dependency for the httpd target, for instance
- to external third-party libraries, etc.
- [Ralf S. Engelschall]
-
- *) Add <IfDefine>..</IfDefine> sections to the core module (with same spirit
- as <IfModule>..</IfModule> sections) which can be used to skip or process
- contained commands dependend of ``-D PARAMETER'' options on the command
- line. This can be used to achieve logical conditions like <IfDefine
- ReverseProxy> instead of physically ones (e.g. <IfModule mod_proxy.c>)
- and thus especially can be used for conditionally loading DSO-based
- modules via LoadModule, etc. [Ralf S. Engelschall]
-
- *) PORT: clean up a warning in mod_status for OS/2. [Brian Havard]
-
- *) Make table elements const. This may prevent obscure errors. [Ben Laurie]
-
- *) Fix parsing of FTP `SIZE' responses in proxy module: The newline was not
- truncated which forced following HTTP headers to be data in the HTTP
- reponse. [Ralf S. Engelschall, Charles Fu <ccwf bacchus.com>]
- PR#2412, 2367
-
- *) Portability fix for APACI shadow tree support: Swap order of awk and sed
- in top-level configure script to avoid sed fails on some platforms (for
- instance SunOS 4.1.3 and NCR SysV) because of the non-newline-termined
- output of Awk. [Bill Houle <bhoule sandiegoca.ncr.com>] PR#2435
-
- *) Improve performance of directory listings (mod_autoindex) by comparing
- integer keys (last-modified and size) as integers rather than converting
- them to strings first. Also use a set of explicit byte tests rather
- than strcmp() to check for parent directory-ness of an entry. Oh, and
- make sure the parent directory (if displayed) is *always* listed first
- regardless of the sort key. Overall performance winnage should be good
- in CPU time, instruction cache, and memory usage, particularly for large
- directories. [Ken Coar]
-
- *) Add a tiny but useful goody to APACI's configure script: The generation
- of a config.status script (as GNU Autoconf does) which remembers the used
- configure command and hence can be used to restore the configuration by
- just re-running this script or for remembering the configuration between
- releases.
- [Ralf S. Engelschall]
-
- *) Add httpd -t (test) option for running configuration syntax tests only.
- If something is broken it complains and exits with a return code
- non-equal to 0. This can be used manually by the user to check the Apache
- configuration after editing and is also automatically used by apachectl
- on (graceful) restart command to make sure Apache doesn't die on restarts
- because of a configuration which is now broken since the last (re)start.
- This way `apachectl restart' can be used inside cronjobs without having
- to expect Apache to be falling down. Additionally the httpd -t can be run
- via `apachectl configtest'.
- [Ralf S. Engelschall] PR#2393
-
- *) Minor display fix for "install" target of top-level Makefile:
- the displayed installation command was incorrect although the
- executed command was correct. Now they are in sync.
- [Ralf S. Engelschall] PR#2402
-
- *) Correct initialization of variable `allowed_globals' in http_main.c
- [Justin Bradford <justin ukans.edu>] PR#2400
-
- *) Apache would incorrectly downcase the entire Content-Type passed from
- CGIs. This affected server-push scripts and such which use
- multipart/x-mixed-replace;boundary=ThisRandomString.
- [Dean Gaudet] PR#2394
-
- *) PORT: QNX update to properly guess 32-bit systems.
- [Sean Boudreau <seanb qnx.com>] PR#2390
-
- *) Make sure the DSO emulation code for HPUX finds the proprietary shl_xxx()
- functions which are in libdld under HPUX 9/10.
- [Ralf S. Engelschall] PR#2378
-
- *) Make sure the "install" target of the top-level Makefile doesn't break
- because of a return code of 1 from an "if" (for instance under braindead
- Ultrix the result code of an "if" construct is 1 if the "then" clause
- didn't match). [Ralf S. Engelschall]
-
- *) Add an additional "dummy" target to the "$(LIB)" target in generated
- modules/xxx/Makefile's to avoid problems with SVR4 Make under "full-DSO"
- situation (no libxxx.a built, only mod_xxx.so's) where LIB and OBJS are
- empty. [Ralf S. Engelschall, Dean Gaudet, Martin Kraemer]
-
- *) Replace two bad sprintf() calls with ap_snprintf() variants in
- mod_rewrite. [Ralf S. Engelschall]
-
- *) Fix missing usage description for MetaFiles directive.
- [David MacKenzie <djm va.pubnix.com>] PR#2384
-
- *) mod_log_config wouldn't let vhosts use log formats defined in the
- main server. [Christof Damian <damian mediaconsult.com>] PR#2090
-
- *) mod_usertrack was corrupting the client hostname. As part of the
- fix, the cookie values were slightly extended to include the
- fully qualified hostname of the client.
- [Dean Gaudet] PR#2190, 2229, 2366
-
- *) Fix a typo in pool debugging code. [Alvaro Martinez Echevarria]
-
- *) mod_unique_id did not work on alpha linux (in general on any
- architecture that has 64-bit time_t).
- [Alvaro Martinez Echevarria]
-
- *) PORT: Make SCO 5 (and probably 3) compile again. [Ben Laurie]
-
- *) PORT: NCR MPRAS systems have the same bug with SIGHUP restart that
- Solaris systems experience. So define WORKAROUND_SOLARIS_BUG.
- [Klaus Weber <kweber chephren.germany.ncr.com>] PR#1973
-
- *) Change "Options None" to "Options FollowSymLinks" in the
- <Directory /> section of the default access.conf-dist
- (and -win even though it doesn't matter there). This has better
- performance, and more intuitive semantics. [Dean Gaudet]
-
- *) PORT: Updated support for UTS 2.1.2.
- [Dave Dykstra <dwd bell-labs.com>] PR#2320
-
- *) Fix symbol export list (src/support/httpd.exp) after recent
- API changes in the child spawning area.
- [Jens-Uwe Mager <jum helios.de>]
-
- *) Workaround for configure script and old `test' commands which do not
- support the -x flag (for instance under platforms like Ultrix). This is
- solved by another helper script findprg.sh which searches for Perl and
- Awk like PrintPath but _via different names_.
- [Ralf S. Engelschall]
-
- *) Remove the system() call from htpasswd.c, which eliminates a system
- dependancy. ["M.D.Parker" <mdpc netcom.com>] PR#2332
-
- *) PORT: Fix compilation failures on NEXTSTEP.
- [Rex Dieter <rdieter math.unl.edu>] PR#2293, 2316
-
- *) PORT: F_NDELAY is a typo, should have been FNDELAY. There's also
- O_NDELAY on various systems. [Dave Dykstra <dwd bell-labs.com>] PR#2313
-
- *) PORT: helpers/GuessOS updates for various versions for NCR SVR4.
- [juerg schreiner <j.schreiner zh.ch>,
- Bill Houle <Bill.Houle SanDiegoCA.NCR.COM>] PR#2310
-
- *) Fix recently introduced Win32 child spawning code in mod_rewrite.c which
- was broken because of invalid ap_pstrcat() -> strcat() transformation.
- [Ralf S. Engelschall]
-
- *) Proxy Cache Fixes: account for directory sizes, fork off garbage collection
- to continue in background, use predefined types (off_t, size_t, time_t),
- log the current cache usage percentage at LogLevel debug
- [Martin Kraemer, based on discussion between Dean Gaudet & Dirk vanGulik]
-
-Changes with Apache 1.3.0
-
- *) Using a type map file as a custom error document was not possible.
- [Lars Eilebrecht] PR#1031
-
- *) Avoid problems with braindead Awks by additionally searching for gawk
- and nawk in APACI's configure script.
- [Dave Dykstra <dwd bell-labs.com>, Ralf S. Engelschall] PR#2319
-
- *) Rename md5.h to ap_md5.h to avoid conflicts with native MD5 on
- some systems. [Randy Terbush]
-
- *) Change usage of perror()+fprintf(stderr,...) in mod_rewrite to
- more proper ap_log_error() variants.
- [Ralf S. Engelschall]
-
- *) Make sure the argument for the --add-module option to APACI's configure
- script is of type [path/to/]mod_xxx.c because all calculations inside
- configure and src/Configure depend on this.
- [Ralf S. Engelschall] PR#2307
-
- *) Changes usage of perror/fprintf to stderr to more proper ap_log_error
- in mod_mime, mod_log_referer, mod_log_agent, and mod_log_config.
- [Brian Behlendorf]
-
- *) Various OS/2 cleanups ["Brian Havard" <brianh kheldar.apana.org.au>]
-
- *) PORT: QNX needed a #include <sys/mman.h>; and now it uses flock
- serialized accept to handle multiple sockets.
- [Rob Saccoccio <robs InfiniteTechnology.com>] PR#2295, 2296
-
- *) Have NT properly set the directory for CGI scripts
- (& other spawned children)
- [W G Stoddard <wgstodda us.ibm.com>]
-
- *) Propagate environment to CGI scripts correctly in Win32.
- [W G Stoddard <wgstodda us.ibm.com>] PR#2294
-
- *) Some symbol renaming:
- ap_spawn_child_err became ap_spawn_child
- ap_spawn_child_err_buff became ap_bspawn_child
- spawn_child was obsoleted and moved to compat.h
- [Brian Behlendorf]
-
- *) Upgrade the child spawning code in mod_rewrite for the RewriteMap
- programs: ap_spawn_child_err() is used and the Win32 case now uses
- CreateProcess() instead of a low-level execl() (which caused problems in
- the past under Win32).
- [Ralf S. Engelschall]
-
- *) A few cosmetics and trivial enhancements to APXS to make the
- generated Makefile more user friendly. [Ralf S. Engelschall]
-
- *) Proxy Fix: The proxy special failure routine ap_proxyerror()
- was updated to use the normal apache error processing, thereby allowing
- proxy errors to be treated by ErrorDocument's as well. For this
- purpose, a new module-to-core communication variable "error-notes"
- was introduced; the proxy (and possibly other modules) communicates
- its error text using this variable. Its content is copied to a new
- cgi-env-var REDIRECT_ERROR_NOTES for use by ErrorDocuments.
- The old proxy special error routine ap_proxy_log_uerror()
- was replaced by regular ap_log_error() calls, many messages were made
- more informative.
- [Martin Kraemer] PR#494, 1259
-
- *) SECURITY: A possible buffer overflow in the ftp proxy was fixed.
- [Martin Kraemer]
-
- *) Transform the configure message "You need root privileges for suEXEC"
- from a fatal error into a (more friendly) warning because the building
- ("make") of Apache we can allow, of course. Root privileges are needed
- only for the installation step ("make install"). So make sure the
- user is aware of this fact but let him proceed as long as he can.
- [Ralf S. Engelschall] PR#2288
-
- *) Renamed three more functions to common ap_ prefix which we missed at the
- Big Symbol Renaming because they're #defines and not real C functions:
- is_default_port(), default_port(), http_method().
- [Ralf S. Engelschall]
-
- *) A zero-length name after a $ in an SSI document should cause
- just the $ to be in the expansion. This was broken during the
- security fixes in 1.2.5. [Dean Gaudet] PR#1921, 2249
-
- *) Call ap_destroy_sub_req() in ap_add_cgi_vars() to reclaim some
- memory. [Rob Saccoccio <robs InfiniteTechnology.com>] PR#2252
-
- *) Fix src/support/httpd.exp (DSO export file which is currently only
- used under AIX) because of recent changes to function names.
- [Ralf S. Engelschall]
-
-Changes with Apache 1.3b7
-
- *) Make sure a MIME-type can be forced via a RewriteRule even when no
- substitution takes place, for instance via the following rule:
- ``RewriteRule ^myscript$ - [T=application/x-httpd-cgi]'' This was often
- requested by users in the past to force a single script without a .cgi
- extension and outside any cgi-bin dirs to be executed as a CGI program.
- [Ralf S. Engelschall] PR#2254
-
- *) A fix for protocol issues surrounding 400, 408, and
- 414 responses. [Ed Korthof]
-
- *) Ignore MaxRequestsPerChild on WIN32. [Brian Behlendorf]
-
- *) Fix discrepancy in proxy_ftp.c which was causing failures when
- trying to connect to certain ftpd's, such as anonftpd.
- [Rick Ohnemus <rick ecompcon.com>]
-
- *) Make mod_rewrite use ap_open_piped_log() for RewriteLog directive's
- logfile instead of fiddling around itself with child spawning stuff.
- [Ralf S. Engelschall]
-
- *) Made RefererIgnore case-insensitive.
-
- *) Mod_log_agent, mod_log_referer now use ap_open_piped_log for piped logs.
- [Brian Behlendorf]
-
- *) Replace use of spawn_child with ap_spawn_child_err_buff, to make everything
- "safe" under Win32. In: mod_include.c, mod_mime_magic.c
- [Brian Behlendorf]
-
- *) Improve RFC1413 support. [Bob Beck <beck bofh.ucs.ualberta.ca>]
-
- *) Fix support script `dbmmanage': It was unable to handle some sort
- of passwords, especially passwords with "0" chars.
- [Ralf S. Engelschall] PR#2242
-
- *) WIN32: Clicking on "Last Modified" in a fancy index caused a crash. Fixed.
- [Ben Laurie] PR#2238
-
- *) WIN32: CGIs could cause a hang (because of a deadlock in the standard C
- library), so CGI handling has been changed to use Win32 native handles
- instead of C file descriptors.
- [Ben Laurie and Bill Stoddard <wgstodda us.ibm.com>] PR#1129, 1607
-
- *) The proxy cache would store an incorrect content-length in the cached
- file copy after a cache update. That resulted in repeated fetching
- of the original copy instead of using the cached copy.
- [Ernst Kloppenburg <kloppen isr.uni-stuttgart.de>] PR#2094
-
- *) The Makefiles assumed that DSO files are build via $(LD). This
- is broken for two reasons: First we never defined at least LD=ld
- somewhere to make sure this works (it was silently assumed that most Make
- provide a built-in LD definition - ARGL!) and second using the generic LD
- variable is not the truth. Instead a special variable named LD_SHLIB is
- reasonable because although "ld" is usually the default, the command for
- building DSO files can be "libtool" or even "cc" on some systems.
- [Ralf S. Engelschall]
-
- *) Replace the AddVersionPlatform directive with ServerTokens which
- provides for more control over the format of the Server:
- header line. SERVER_SUBVERSION is no longer supported;
- all module should use the ap_add_version_component()
- API function instead. [Jim Jagielski]
-
- *) Support for the NCR MP/RAS 3.0
- [John Withers <withers semi.kcsc.mwr.irs.gov>]
-
- *) The LDFLAGS_SHLIB_EXPORT variable of src/Configuration[.tmpl] was
- not retrieved in src/Configure and thus was not useable.
- [Ralf S. Engelschall]
-
- *) Various Makefile consistency cleanups:
- - make OSDIR also automatically be relative to src/ like INCDIR
- - SUBDIRS is now generated in src/Makefile only and not in
- Makefile.config because it is a local define for this location.
- - remove BROKEN_BPRINTF_FLAGS because is it no longer used inside
- any Makefile but make sure that at least the "-K inline" is kept in
- CFLAGS for SCO 5.
- - update the "depend" targets in Makefile.tmpl files to use $(OSDIR), too.
- - updated the dependencies theirself
- - removed not existing SHLIB variable from "clean" targets
- - replaced SHLIB_OBJS/SHLIBS_OBJ consistently with OBJS_PIC because OBJS
- already exists and OBJS_PIC are also just plain objects and have not
- directly to do with "shared" things. The only difference is that they
- contain PIC. So OBJS_PIC is the more canonical name.
- - Updated the Makefile-dependency lines for OBJS_PIC
- - Removed the Makefile-dependency line in Configure to avoid double
- definitions
- - replaced ugly xx-so.o/xx.so-o hack with a clean and consistent usage
- of xxx.lo as GNU libtool does with its PIC objects
- - reduce local complexity in modules Makefile.tmpl by moving the last
- existing target "depend" to the generation section in Configure, too.
- - removed the historical $(SPACER) which was used in the past together
- with BROKEN_BPRINTF_FLAGS to avoid zig-zags in the build process. This
- is no longer needed.
- - force the build and run of the gen_xxx programs under main/ as the
- first step before building the objects because it looks cleaner
- [Ralf S. Engelschall]
-
- *) WIN32: Make Win32 work again after the /dev/null DoS fix.
- [Ben Laurie]
-
- *) WIN32: Check for buffer overflows in ap_os_canonical_filename.
- [Ben Laurie]
-
- *) WIN32: Don't force ISAPI headers to finish with \n.
- [Jim Patterson <Jim.Patterson Cognos.COM>, Ben Laurie] PR#2060
-
- *) When opening "configuration" files (like httpd.conf, htaccess
- and htpasswd), Apache will not allow them to be non-/dev/null
- device files. This closes a DoS hole. At the same time,
- we use ap_pfopen to open these files to handle timeouts.
- [Jim Jagielski, Martin Kraemer]
-
- *) Apache will now log the reason its httpd children exit if they exit
- due to an unexpected signal. (It requires a new porting define,
- SYS_SIGLIST, which if defined should point to a list of text
- descriptions of the signals available. See PORTING.) [Dean Gaudet]
-
- *) WIN32: chdir() doesn't make sense in a multithreaded environment
- like WIN32. Before, Win32 CGI's could have had sporadic failures
- if a chdir call from one thread was made between another chdir call
- and a spawn in another thread. So, for now don't chdir for CGI scripts
- in WIN32. The current CGI "spec" is unclear as to whether it's
- necessary. Long-term fix is to either serialize the chdir/spawn combo
- or use WIN32 native calls to spawn a process. This temp fix was
- necessary to remove this as a showstopper for 1.3's release.
- [Brian Behlendorf]
-
- *) Cleanup the suEXEC support in APACI and make it more safe:
- 1. Add big fat hint in INSTALL about risks and to read the
- htdocs/manual/suexec.html document before using the suexec-related
- configure options.
- 2. Make sure the user has at least provided one --suexec-xxxx option
- (specifies suEXEC parameters) in addition to --enable-suexec option.
- If only --enable-suexec is given APACI stops with a hint to INSTALL
- and htdocs/manual/suexec.html documents.
- 3. Provide two additional --suexec-xxxx options to make the suEXEC
- configuration complete (especially for package maintainers who else
- had to patch the source tree) by providing ways to configure minimal
- UID/GID and safe PATH, too.
- [Ralf S. Engelschall]
-
- *) Cleanup of the `configure --shadow' process:
- - make sure the configure script creates its temporary files in the
- shadow tree to avoid conflicts with parallel configure runs
- - removed unnecessary option "-r" from "rm" call for Makefiles
- - make sure the configure scripts creates the shadow-wrapper Makefile
- only when no shadow trees already exists
- - make sure "make distclean" removes the shadow-wrapper Makefile but only
- when no more shadow trees exists
- - overhauled mkshadow.sh script: now its more IFS-safe and approx. twice
- as fast (in the past it needed 70sec, now it runs just 38sec)
- - make sure CVS does not complain about the created files
- Makefille.<gnutriple> and directories src.<gnutriple>
- [Ralf S. Engelschall]
-
- *) Added the ap_add_version_component() API routine and the
- AddVersionPlatform core directive. The first allows modules to
- declare themselves in the Server response header field value,
- augmenting the SERVER_SUBVERSION define in the Configuration file
- with run-time settings (more useful in a loadable-module environment).
- AddVersionPlatform inserts a comment such as "(UNIX)" or "(Win32)"
- into the server version string. [Ken Coar] PR#2056
-
- *) Minor stability tweaks to avoid core dumps in ap_snprintf.
- [Martin Kraemer]
-
- *) Emit the "Accept-Range" header for the default handler.
- [Brian Behlendorf] PR#1464
-
- *) Add a note to httpd.conf-dist that apache will on some systems fail
- to start when the Group # is set to a negative or large positive value.
- [Martin Kraemer]
-
- *) Make sure the module execution order is correct even when some modules
- are loaded under runtime (`LoadModule') via the DSO mechanism:
- 1. The list of loaded modules is now a dynamically allocated one
- and not the original statically list from modules.c
- 2. The loaded modules are now correctly setup by LoadModule for
- later use by the AddModule command.
- 3. When the DSO mechanism for modules is used APACI's `install'
- target now enables all created `LoadModule' lines per default because
- this is both already expected by the user _and_ needed to avoid
- confusion with the next point and reduces the Makefile.tmpl complexity
- 4. When the DSO mechanism for modules is used, APACI's `install'
- target now additionally makes sure the module list is reconstructed
- via a complete `ClearModuleList+AddModule...' entry.
- 5. The support tool `apxs' now also makes sure an AddModule command
- is added in addition to the LoadModule command.
- 6. The modules.c generation was extended to now contain two
- comments to make sure no one is confused by the confusing terminology
- of loading/linking (we use load=link+load & link=activate instead of
- the obvious load=activate & link=link :-( )
- This way now there is no longer a difference under execution time between
- statically and dynamically linked modules.
- [Ralf S. Engelschall]
-
- *) Fix the generated mod_xxx.c from "apxs -g -f xxx" after the
- Big Symbol Renaming. [Ralf S. Engelschall]
-
- *) Add a comment to mod_example.c showing the format of a FLAG command
- handler. [Ken Coar]
-
- *) Standardized the time format in mod_status to match that of other
- places in the code (e.g. DATE_GMT). PR#1551
-
- *) Fix handling of %Z in timefmt strings for those platforms with no time
- zone information in their tm struct. [Paul Eggert <eggert twinsun.com>]
- PR#754
-
- *) Makes mod_rewrite, mod_log_config, mod_status and the ServerSignature
- feature compatible with 'UseCanonicalName off' by changing
- r->server->server_hostname to ap_get_server_name(). And I changed some
- functions which use r->server->port to use ap_get_server_port() instead,
- because if there's no Port directive in the config r->server->port is 0.
- [Lars Eilebrecht]
-
- *) get/set_module_config are trivial enough to be better off inline. Worth
- 1.5% performance boost. [Dean Gaudet]
-
- *) Fix off-by-one error in ap_proxy_date_canon() in proxy_util.c
- when ensuring 'x' is at least 30-chars big. [Jim Jagielski,
- Brian Behlendorf]
-
- *) [BS2000 security] BS2000 needs an extra authentication to initialize
- the task environment to the unprivileged User id. Otherwise CGI scripts
- would have a way to gain super user access. [Martin Kraemer]
-
- *) Fix debug log messages for BS2000/OSD: instead of logging the whole
- absolute path, only log base name of logging source as is done
- in unix. [Martin Kraemer]
-
- *) Ronald Tschalaer's Accept-Encoding patch - preserve the "x-" in
- the encoding type from the Accept-Encoding header (if it's there)
- and use it in the response, as that's probably what it'll be expecting.
- [<Ronald.Tschalaer psi.ch>]
-
- *) Fix to mod_alias: translate_alias_redir is dealing with
- a URI, not a filename, so the check for drive letters for win32
- and emx is not necessary. [Dean Gaudet]
-
- *) WIN32: Allow .cmd as an executable extension.
- [Kari Likovuori <Kari.Likovuori mol.fi>] PR#2146
-
- *) Make Apache header files, and some variables, C++ friendly.
- [Michael Anderson's <mka redes.int.com.mx>]
-
- *) Child processes can now "signal" (by exiting with a status
- of APEXIT_CHILDFATAL) the parent process to abort and
- shutdown the server if the error in the child process was
- fatal enough. [Jim Jagielski]
-
- *) mod_autoindex's find_itme() was sensitive to MIME type case.
- [Jim Jagielski] PR#2112
-
- *) Make sure the referer_log and agent_log entries in the default httpd.conf
- file are also adjusted for the actual relative installation paths.
- [Ralf S. Engelschall] PR#2175
-
- *) WIN32: Extensive overhaul of the way UNCs are handled. [Ben Laurie]
-
- *) WIN32: Make roots of filesystems (e.g. c:/) work. [Ben Laurie]
- PR#1558
-
- *) PORT: Various porting changes to support AIX 3.2, 4.1.5, 4.2 and 4.3.
- Additionally the checks for finding the vendor DSO library were moved
- from mod_so.c to Configure because first it needs $PLAT etc. and second
- mod_so already uses an abstraction layer and does not fiddle with the
- vendor functions itself.
- [Jens-Uwe Mager, Ralf S. Engelschall]
-
- *) PORT: Some optimization defines for NetBSD
- [Jaromir Dolecek <dolecek ics.muni.cz>] PR#2165
-
- *) PORT: Dynamic Shared Object (DSO) support for NetBSD.
- [Jaromir Dolecek <dolecek ics.muni.cz>, Ralf S. Engelschall] PR#2158
-
- *) Add Dynamic Shared Object (DSO) support for AIX (at least 4.2 but older
- AIX variants should work fine, too. Even AIX 3.x should work). This is
- accomplished by using the free DSO emulation code from Jens-Uwe Mager
- which we put into a os/unix/os-dso-aix.c file.
- [Ralf S. Engelschall]
-
- *) PORT: Fix compiler warnings under AIX >= 4.2 where the manual pages imply
- that we should use NET_SIZE_T == int but the include files force size_t.
- [Ralf S. Engelschall]
-
- *) Fix two bugs in select() handling in http_main.c.
- [Roy Fielding]
-
- *) Suppress "error(0)" messages for ap_log_error() when the APLOG_NOERRNO
- is unset (as it is in situations like timeouts) where it is unclear
- whether errno is set or not. [Martin Kraemer]
-
- *) Just having APACI's localstatedir is too general and not enough for most
- of the systems. 1.3b6 again required manual APACI patches by package
- maintainers from Red Hat and FreeBSD because for their filesystem layout a
- little bit more flexibility in configuring the paths is needed. Hence we
- provide three additional configure options (--runtimedir, --logfiledir,
- --proxycachedir) which now can be used for more granular adjustments if
- --localstatedir is not enough to fit the particular needs. As a nice
- side-effect this reduces some subdir fiddling in configure+Makefile.tmpl.
- [Ralf S. Engelschall]
-
- *) Make the install root for "make install" in APACI's Makefile overrideable
- by package authors. This way we are even more friendly to package
- maintainers (especially Debian and Red Hat) who build for the real prefix
- via "configure --prefix=/<real>" but use a different local prefix via
- "make root=/tmp/apache install" for rolling the package without bristling
- the target location on their system.
- [Ralf S. Engelschall]
-
- *) Workaround sed limitations in APACI's configure script by now
- substituting in chunks of 50 commands (because for instance HPUX's vendor
- sed has a limit of max. 98 commands)
- [Ralf S. Engelschall] PR#2136
-
- *) Adding SOCKS5 support and fixing existing SOCKS4 support.
- [Ralf S. Engelschall] PR#2140
-
- *) Manually fix some symbols which were not renamed to prefix ap_ in the BIG
- RENAMING process because they are defined as pre-processor macros instead
- of real functions: bputc, bgetc, piped_log_write_fd, piped_log_read_fd
- [Ralf S. Engelschall]
-
- *) Workaround braindead AWK's when generating ap_config.h: The split() and
- substr() functions cannot be nested under vendor AWK from Solaris 2.6.
- [Ralf S. Engelschall] PR#2139
-
- *) Various bugfixes and cleanups for the APACI configure script:
- o fix IFS handling for _nested_ situation
- o fix Perl interpreter search: take first one found instead of last one
- o fix DSO consistency check
- o print error messages to stderr instead of stdout
- o add install-quiet for --shadow situation to Makefile stub
- o reduce complexity by avoiding sed-hacks for rule and module list loops
- [Ralf S. Engelschall]
-
- *) Fix DEBUG_CGI situation in mod_cgi.c [David MacKenzie] PR#2114
-
- *) Make sure the input field separator (IFS) shell variable is explicitly
- initialized correctly before _every_ `for' loop and also restored after
- the loops. [Ralf S. Engelschall]
-
- *) Make sure that "make install" doesn't overwrite the `mime.types' and
- `magic' files from an existing Apache installation. Because people often
- customize these for own MIME and content types.
- [Ralf S. Engelschall]
-
- *) PORT: Dynamic Shared Object (DSO) support for OpenBSD 2.x
- [Peter Galbavy, Ralf S. Engelschall] PR#2109
-
- *) Fix the path to the ScoreBoardFile in the install-config target, too.
- [Ralf S. Engelschall] PR#2105
-
- *) Let "configure" clear out the users parameters (provided as shell
- variables) to avoid side-effects in "src/Configure" when the user
- exported them (which is not needed, but some users do it).
- [Ralf S. Engelschall] PR#2101
-
- *) Provide backward compatibility from some old src/Configuration.tmpl
- parameter names to the canonical Autoconf-style shell variable names. For
- instance CFLAGS vs. EXTRA_CFLAGS. The EXTRA_xxx variants are accepted now
- but a hint message is displayed. [Ralf S. Engelschall]
-
- *) Make sure that "make install" doesn't overwrite the DocumentRoot and
- CGI scripts from an existing Apache installation.
- [Ralf S. Engelschall, Jim Jagielski] PR#2084
-
- *) Make `configure --compat' more "compatible" by first
- let the libexecdir default to EPREFIX/libexec instead of EPREFIX/bin and
- second by making sure the "avoid-bristling-suffix" /apache is not
- appended to sysconfdir, datadir, localstatedir and includedir when
- --compat is used. [Ralf S. Engelschall, Lars Eilebrecht]
-
- *) NeXT required strdup() in support/logresolve.c
- [Francisco Tomei <fatomei sandburg.unm.edu>] PR#2082
-
- *) AIX required sys/select.h in support/ab.c
- [Jens Schleusener <Jens.Schleusener dlr.de>] PR#2081
-
- *) Fix the path to the MimeMagicFile in the install-config target, too.
- [Ralf S. Engelschall] PR#2089
-
- *) PORT: Added HP-UX 11 patches [Jeff Earickson <jaearick colby.edu>]
-
- *) If you start apache with the -S command line option it will dump
- out the parsed vhost settings. This is useful for folks trying
- to figure out what is wrong with their vhost configuration.
- (Other dumps may be added in the future.) [Dean Gaudet]
-
- *) Add %pA, %pI, and %pp codes to ap_vformatter (and hence ap_bprintf,
- ap_snprintf, and ap_psprintf). See include/ap.h for docs.
- [Dean Gaudet]
-
- *) Because /usr/local/apache is the default prefix the ``configure
- --compat'' option no longer has to set prefix, again. This way the
- --compat option honors a leading --prefix option. [Lars Eilebrecht]
-
- *) PORT: Cast the first argument of dlopen() in ap_os_dso_load()
- to `char *' under OSF1 and FreeBSD 2.x where it is defined this way
- to avoid "discard const" warnings. [Ralf S. Engelschall]
-
- *) If a specific handler is set for a file yet the request still
- ends up being handled by the default handler, log an error
- message before handling it. This catches things such as trying
- to use SSIs without mod_include enabled. [Marc Slemko]
-
- *) Fix error logging for the startup case where ap_log_error() still uses
- stderr as the target. Now the default log level is honored here, too.
- [Ralf S. Engelschall]
-
- *) PORT: Make sure some AWK's don't fail in src/Configure with "string too
- long" errors when generating the MODULES entry for src/Makefile
- [Ben Hyde, Ralf S. Engelschall]
-
- *) Make sure src/Configure doesn't complain about the old directory
- /usr/local/etc/httpd/ when APACI is used. [Lars Eilebrecht]
-
-Changes with Apache 1.3b6
-
- *) PORT: Clean up warnings on Ultrix and HPUX. [Ben Hyde]
-
- *) Adding DSO support for the HP/UX platform by emulating the dlopen-style
- interface via the similar but proprietary HP/UX shl_xxx-style system
- calls. [Ralf S. Engelschall]
-
- *) PORT: Updated UnixWare 2.0.x and 2.1.x entries for DSO support and made
- APACI Makefile.tmpl "install" target more robust for sensible UnixWare
- Make. [Ralf S. Engelschall]
-
- *) ++++ THE BIG SYMBOL RENAMING ++++
- To avoid symbol clashes with third-party code compiled into the server,
- we globally applied the prefix "ap_" to the following classes of
- functions:
- - Apache provided general functions (e.g., ap_cpystrn)
- - Public API functions (e.g., palloc, bgets)
- - Private functions which we can't make static (because of
- cross-object usage) but should be (e.g., new_connection)
- For backward source compatibility a new header file named compat.h was
- created which provides defines for the old symbol names and can be used
- by third-party module authors.
- [The Apache Group]
-
- *) Added dynamic shared object (DSO) support for SVR4-derivates: The
- problem under SVR4 is that there is no command flag to force the linker
- to export the global symbols of the httpd executable therewith they are
- available to the DSO's. Instead of problematic hacks like creating a
- dummy.so file (containing dummy references to all global symbols) the
- httpd binary is linked against, we use a clean trick stolen from Perl 5:
- Placing the Apache core code itself into a DSO library named libhttpd.so.
- This way the global symbols _HAVE_ to be exported and thus are available
- to any manually loaded DSO's under runtime. To reduce the impact to the
- user to null we go even further and create a stub httpd executable which
- automatically keeps track of the DSO library loading itself and thus
- hides the complete mechanism from the user. Although the generation of
- this DSO library is automatically triggered for platforms which
- essentially need it (mostly all SVR4-derivates) it can be also enabled
- manually via the Rule SHARED_CORE. This can be interesting in the future
- where we perhaps exploit this libhttpd.so mechanism for providing nifty
- features like graceful upgrades, or whatever.
- [Ralf S. Engelschall, Martin Kraemer]
-
- *) Build the libraries before building the rest of the tools. [Ben Hyde]
-
- *) Add "distclean" target to src/-Makefiles to provide "make distclean" also
- inside the src subtree (i.e. for non-APACI users). Following GNU Makefile
- conventions while "clean" removes only stuff created by "all" targets,
- "distclean" additionally removes the stuff from the configuration
- process. This way "make distclean" (hence the name) provides a fresh
- source tree as it was for distribution.
- [Ralf S. Engelschall]
-
- *) Allow top-level (APACI) Makefile to break on build errors
- the same way the src/ subtree Makefiles breaks on them by replacing the
- initial APACI sed-subdir-display-kludge with a more clean
- variable-passing-solution: variable SDP can optionally hold the subdir
- prefix which is consistently used for displaying the subdir movement.
- This way even the top-level Makefile can stop correctly on errors as the
- user expects. [Ralf S. Engelschall]
-
- *) Fixed ordering of argument checks for RewriteBase directive.
- [Todd Eigenschink <eigenstr mixi.net>] PR#2045
-
- *) Change Win32 IS_MODULE to SHARED_MODULE to match Unix' method of
- indicating that a module is being compiled for dynamic loading. Also
- remove #define IS_MODULE from modules and add SHARED_MODULE define
- to the mak/dsp files. [Alexei Kosut]
-
- *) Reduce logging level of "normal" warning messages to APLOG_INFO,
- since we are now logging APLOG_WARNING by default. [Roy Fielding]
-
- *) PORT: OS/2 tweak to deal with multiple .exe targets. [Brian Havard]
-
- *) Add documentation file and src/Configuration.tmpl entry for the
- experimental mod_mmap_static module. Because although it is and marked as
- an experimental one it is distributed and thus should be documented and
- prepared for configuration the same way as all others modules.
- [Ralf S. Engelschall]
-
- *) Add query (-q) option to apxs support tool to be able to manually query
- specific settings from apxs. This is needed for instance when you
- manually want to access Apache's header files and you need to assemble
- the -I option. Now you can do -I`apxs -q INCLUDEDIR`.
- [Ralf S. Engelschall]
-
- *) Now src/Configure uses a fallback strategy for the shared object support
- on platforms where no explicit information is available: If a Perl
- installation exists we ask it about its shared object support and if it's
- the dlopen-style one we shamelessly guess the compiler and linker flags
- for creating shared objects from Perls knowledge. Of course, the user is
- warning about what we are doing and informed that he should send us
- the guessed flags when they work. [Ralf S. Engelschall]
-
- *) Provide APACI --without-support option to be able to disable the build
- and installation of the support tools from the src/support/ area.
- Although its useful to have these installed per default we should provide
- a way to compile and install without them for backward-compatibility.
- [Ralf S. Engelschall]
-
- *) Add of the new APache eXtenSion (apxs) support tool for building and
- installing modules into an _already installed_ Apache package through the
- dynamic shared object (DSO) mechanism [mod_so.c]. The trick here is that
- this approach actually doesn't need the Apache source tree. The
- (APACI-installed) server package is enough, because this now includes the
- Apache C header files (PREFIX/include) and the new APXS tool
- (SBINDIR/apxs). The intend is to provide a handy tool for third-party
- module authors to build their Apache modules _OUTSIDE_ the Apache source
- tree while avoiding them to fiddle around with the totally platform
- dependend way of compiling DSO files. The tool supports all ranges of
- modules, from trivial ones (single mod_foo.c) to complex ones (like PHP3
- which has a mod_php3.c plus a pre-built libmodphp3-so.a) and even can
- on-the-fly generate a minimalistic Makefile and sample module for the
- first step to provide both a quick success event and to demonstrate the
- APXS mechanism to module authors. [Ralf S. Engelschall]
-
- *) Fix core dumps in use of CONNECT in proxy.
- [<Rainer.Scherg rexroth.de>] PR#1326, #1573, #1942
-
- *) Modify the log directives in httpd.conf-dist files to use CustomLog
- so that users have examples of how CustomLog can be used.
- [Lars Eilebrecht]
-
- *) Add the new Apache Autoconf-style Interface (APACI) for the top-level of
- the Apache distribution tree. Until Apache 1.3 there was no real
- out-of-the-box batch-capable build and installation procedure for the
- complete Apache package. This is now provided by a top-level "configure"
- script and a corresponding top-level "Makefile.tmpl" file. The goal is
- to provide a GNU Autoconf-style frontend which is capable to both drive
- the old src/Configure stuff in batch and additionally installs the
- package with a GNU-conforming directory layout. Any options from the old
- configuration scheme are available plus a lot of new options for flexibly
- customizing Apache. [Ralf S. Engelschall]
-
- *) The floating point ap_snprintf code wasn't threadsafe.
- Had to remove the HAVE_CVT macro in order to do threadsafe
- calling of the ?cvt() floating point routines. [Dean Gaudet]
-
- *) PORT: Add the SCO_SV port. [Jim Jagielski] PR#1962
-
- *) PORT: IRIX needs the -n32 flag iff using the 'cc' compiler
- [Jim Jagielski] PR#1901
-
- *) BUG: Configure was using TCC and CC inconsistently. Make sure
- Configure knows which CC we are using. [Jim Jagielski]
-
- *) "Options +Includes" wasn't correctly merged if "+IncludesNoExec"
- was defined in a parent directory. [Lars Eilebrecht]
-
- *) API: ap_snprintf() code mutated into ap_vformatter(), which is
- a generic printf-style routine that can call arbitrary output
- routines. Use this to replace http_bprintf.c. Add new routines
- psprintf(), pvsprintf() which allocate the exact amount of memory
- required for a string from a pool. Use psprintf() to clean up
- various bits of code which used ap_snprintf()/pstrdup().
- [Dean Gaudet]
-
- *) PORT: HAVE_SNPRINTF doesn't do anything any longer. This is because
- ap_snprintf() has different semantics and formatting codes than
- snprintf(). [Dean Gaudet]
-
- *) SIGXCPU and SIGXFSZ are now reset to SIG_DFL at boot-time. This
- is necessary on at least Solaris where the /etc/rc?.d scripts
- are run with these signals ignored, and "SIG_IGN" settings are
- maintained across exec().
- [Rein Tollevik <reint sys.sol.no>] PR#2009
-
- *) Fix the check for symbolic links in ``RewriteCond ... -l'': stat() was
- used instead of lstat() and thus this flag didn't work as expected.
- [Rein Tollevik <reint sys.sol.no>] PR#2010
-
- *) Fix the proxy pass-through feature of mod_rewrite for the case of
- existing QUERY_STRING now that mod_proxy was recently changed because of
- the new URL parsing stuff. [Ralf S. Engelschall]
-
- *) A few changes to scoreboard definitions which helps gcc generate
- better code. [Dean Gaudet]
-
- *) ANSI C doesn't guarantee that "int foo : 2" in a structure will
- be a signed bitfield. So mark a few bitfields as signed to
- ensure correct code. [Dean Gaudet]
-
- *) The default for HostnameLookups was changed to Off, but there
- was a problem and it wasn't taking effect. [Dean Gaudet]
-
- *) PORT: Clean up undefined signals on some platforms (SCO, BeOS).
- [Dean Gaudet]
-
- *) After a SIGHUP the listening sockets in the parent weren't
- properly marked for closure on fork().
- [Jürgen Keil <jk tools.de>] PR#2000
-
- *) Allow %2F in two situations: 1) it is in the query part of the URI,
- therefore not exposed to %2F -> '/' translations and 2) the request
- is a proxy request, so we're not dealing with a local resource anyway.
- Without this, the proxy would fail to work for any URL's with
- %2f in them (occurs quite often in
- http://.../cgi-bin/...?http%3A%2F%2F... references) [Martin Kraemer]
-
- *) Protect against FD_SETSIZE mismatches. [Dean Gaudet]
-
- *) Make the shared object compilation command more portable by avoiding
- the direct combination of `-c' & `-o' which is not honored by some
- compilers like UnixWare's cc. [Ralf S. Engelschall]
-
- *) WIN32: the proxy was creating filenames missing the last four
- characters. While this normally doesn't stop anything from
- working, it can result in extra collisions.
- [Tim Costello <tjcostel socs.uts.edu.au>] PR#1890
-
- *) Now mod_proxy uses the response string (in addition to the response status
- code) from the already used FTP SIZE command to setup the Content-Length
- header if available. [Ralf S. Engelschall] PR#1183
-
- *) Reanimated the (still undocumented) proxy receive buffer size directive:
- Renamed from ReceiveBufferSize to ProxyReceiveBufferSize because the old
- name was really too generic, added documentation for this directive to
- the mod_proxy.html and corrected the hyperlink to it in the
- new_features_1.3.html document. [Ralf S. Engelschall] PR#1348
-
- *) Fix a bug in the src/helpers/fp2rp script and make it a little bit
- faster [Martin Kraemer]
-
- *) Make Configure die when you give it an unknown command switch.
- [Ben Hyde]
-
- *) Add five new and fresh manpages for the support programs: dbmmanage.1,
- suexec.8, htdigest.1, rotatelogs.8 and logresolve.8. Now all up-to-date
- and per default compiled support programs have manual pages - just to
- document our stuff a little bit more and to be able to do really
- Unix-like installations ;-) [Ralf S. Engelschall]
-
- *) Major cleanups to the Configure script to make it and its generated
- Makefiles again readable and maintainable: add SRCDIR option, removed
- INCLUDES_DEPTH[0-2] kludge, cleanup of TARGET option, cleanup of
- generated sections, consequently added Makefile headers with inheritance
- information, added subdir movement messages for easier following where
- the build process currently stays (more verbose then standard Make, less
- verbose than GNU make), same style to comments in the Configure script,
- added Apache license header, fixed a few bugs, etc. [Ralf S. Engelschall]
-
- *) Add the new ApacheBench program "ab" to src/support/: This is derived
- from the ZeusBench benchmarking program and can be used to determine the
- response performance of an Apache installation. This version is
- officially licensed with Zeus Technology, Ltd. See the license agreement
- statements in <199803171224.NAA24547 en1.engelschall.com> in apache-core.
- [Ralf S. Engelschall]
-
- *) API: Various core functions that are definately not part of the API
- have been made static, and a few have been marked API_EXPORT. Still
- more have been marked CORE_EXPORT and are not intended for general
- use by modules. [Doug MacEachern, Dean Gaudet]
-
- *) mod_proxy was not clearing the Proxy-Connection header from
- requests; now it does. This did not violate any spec, however
- causes poor interactions when you are talking to remote proxies.
- [Marc Slemko] PR#1741
-
- *) Various cleanups to the command line interface and manual pages.
- [Ralf S. Engelschall]
-
- *) cfg_getline() was not properly handling lines that did not end
- with a line termination character. [Marc Slemko] PR#1869, 1909
-
- *) Performance tweak to mod_log_config. [Dmitry Khrustalev]
-
- *) Clean up some undocumented behavior of mod_setenvif related to
- "merging" two SetEnvIf directives when they match the same header
- and regex. Document that mod_setenvif will perform comparisons in
- the order they appear in the config file. Optimize mod_setenvif by
- doing more work at config time rather than at runtime.
- [Dean Gaudet]
-
- *) src/include/ap_config.h now wraps it's #define's with #ifndef/#endif's
- to allow for modules to overrule them and to reduce redefinition
- warnings [Jim Jagielski]
-
- *) [PORT] For A/UX change the OS-#define for -DAUX to -DAUX3.
- [Jim Jagielski]
-
- *) Making the hard-coded cross-module function call mime_find_ct() (from
- mod_proxy to mod_mime) obsolete by making sure the API hook for MIME type
- checking is really called even for proxy requests except for URLs with
- HTTP schemes (because there we can optimize by not running the type
- checking hooks due to the fact that the proxy gets the MIME Content-type
- from the remote host later). This change cleans up mod_mime by removing
- the ugly export kludge, makes the one-liner file mod_mime.h obsolete, and
- especially unbundles mod_proxy and mod_mime. This way they both now can
- be compiled as shared objects and are no longer tied together.
- [Ralf S. Engelschall]
-
- *) util.c cleanup and speedup. [Dean Gaudet]
-
- *) API: Clarification, pstrndup() will always copy n bytes of the source
- and NUL terminate at the (n+1)st byte. [Dean Gaudet]
-
- *) Mark module command_rec and handler_rec structures const so that they
- end up in the read-only data section (and are friendlier to systems
- that don't do optimistic memory allocation on fork()). [Dean Gaudet]
-
- *) Add check to the "Port" directive to make sure the specified
- port is in the appropriate range. [Ben Hyde]
-
- *) Performance improvements to invoke_handler().
- [Dmitry Khrustalev <dima bog.msu.su>]
-
- *) Added support for building shared objects even for library-style modules
- (which are built from more than one object file). This now provides the
- ability to build mod_proxy as a shared object module. Additionally
- modules like mod_example are now also supported for shared object
- building because the generated Makefiles now no longer assume there is at
- least one statically linked module. [Ralf S. Engelschall]
-
- *) API: Clarify usage of content_type, handler, content_encoding,
- content_language and content_languages fields in request_rec. They
- must always be lowercased; and the strings pointed to shouldn't
- be modified (you must copy them to modify them). Fix a few bugs
- related to this. [Dean Gaudet]
-
- *) API: Clarification: except for RAW_ARGS, all command handlers can
- treat the char * parameters as permanent, and modifiable. There
- is no need to pstrdup() them. Clean up some needless pstrdup().
- [Dean Gaudet]
-
- *) Now mod_so keeps track of which module shared objects with which names
- are loaded and thus avoids multiple loading and unloading and irritating
- error_log messages. [Ralf S. Engelschall]
-
- *) Prior to the existence of mod_setenv it was necessary to tweak the TZ
- environment variable in the apache core. But that tweaking interferes
- with mod_setenv. So don't tweak if the user has specified an explicit
- TZ variable. [Jay Soffian <jay cimedia.com>] PR#1888
-
- *) rputs() did not calculate r->sent_bodyct properly.
- [Siegmund Stirnweiss <siegst kat.ina.de>] PR#1900
-
- *) The CGI spec says that REMOTE_HOST should be set to the remote hosts's
- name, or left unset if this value is unavailable. Apache was setting
- it to the IP address when unavailable.
- [Tony Finch <fanf demon.net>] PR#1925
-
- *) Various improvements to the configuration and build support for compiling
- modules as shared objects. Especially Solaris 2.x, SunOS 4.1, IRIX and
- OSF1 support with GCC and vendor compilers was added. This way shared
- object support is now provided out-of-the-box for FreeBSD, Linux,
- Solaris, SunOS, IRIX and OSF1. In short: On all major platforms!
- [Ralf S. Engelschall]
-
- *) Minor cleanup in http_main -- split QNX and OS2 specific "mmap"
- scoreboard code into separate #defines -- USE_POSIX_SCOREBOARD
- and USE_OS2_SCOREBOARD. [Dean Gaudet]
-
- *) Fix one more special locking problem for RewriteMap programs in
- mod_rewrite: According to the documentation of flock(), "Locks are on
- files, not file descriptors. That is, file descriptors duplicated
- through dup(2) or fork(2) do not result in multiple instances of a lock,
- but rather multiple references to a single lock. If a process holding a
- lock on a file forks and the child explicitly unlocks the file, the
- parent will lose its lock.". To overcome this we have to make sure the
- RewriteLock file is opened _AFTER_ the childs were spawned which is now
- the case by opening it in the child_init instead of the module_init API
- hook. [Ralf S. Engelschall] PR#1029
-
- *) Change to Location and LocationMatch semantics. LocationMatch no
- longer lets a single slash match multiple adjacent slashes in the
- URL. This change is for consistency with RewriteRule and
- AliasMatch. Multiple slashes have meaning in URLs that they do
- not have in (some) filesystems. Location on the other hand can
- be considered a shorthand for a more complicated regex, and it
- does match multiple slashes with a single slash -- which is
- also consistent with the Alias directive.
- [Dean Gaudet] related PR#1440
-
- *) Fix bug with mod_mime_magic causing certain files, including files
- of length 0, to result in no response from the server.
- [Dean Gaudet]
-
- *) The Configure script now generates src/include/ap_config.h which
- contains the set of defines used when Apache is compiled on a platform.
- This file can then be included by external modules before including
- any Apache header files in case they are being built separately from
- Apache. Along with this change, a couple of minor changes were
- made to make Apache's #defines coexist peacefully with any autoconf
- defines an external module might have. [Rasmus Lerdorf]
-
- *) Fix mod_rewrite for the ugly API case where <VirtualHost> sections exist
- but without any RewriteXXXXX directives. Here mod_rewrite is given no
- chance by the API to initialize its per-server configuration and thus
- receives the wrong one from the main server. This is now avoided by
- remembering the server together with the config structure while
- configuring and later assuming there is no config when we see a
- difference between the remembered server and the one calling us.
- [Ralf S. Engelschall] PR#1790
-
- *) Fixed the DBM RewriteMap support for mod_rewrite: First the support now
- is automatically disabled under configure time when the dbm_xxx functions
- are not available. Second, two heavy source code errors in the DBM
- support code were fixed. This makes DBM RewriteMap's usable again after
- a long time of brokenness. [Ralf S. Engelschall] PR#1696
-
- *) Now all configuration files support Unix-style line-continuation via
- the trailing backslash ("\") character. This enables us to write down
- complex or just very long directives in a more readable way. The
- backslash character has to be really the last character before the
- newline and it has not been prefixed by another (escaping) backslash.
- [Ralf S. Engelschall]
-
- *) When using ProxyPass the ?querystring was not passed correctly.
- [Joel Truher <truher wired.com>]
-
- *) To deal with modules being compiled and [dynamically] linked
- at a different time from the core, the SERVER_VERSION and
- SERVER_BUILT symbols have been abstracted through the new
- API routines apapi_get_server_version() and apapi_get_server_built().
- [Ken Coar] PR#1448
-
- *) WIN32: Preserve trailing slash in canonical path (and hence
- in PATH_INFO). [Paul Sutton, Ben Laurie]
-
- *) PORT: USE_PTHREAD_SERIALIZED_ACCEPT has proven unreliable
- depending on the rev of Solaris and what mixture of modules
- are in use. So it has been disabled, and Solaris is back to
- using USE_FCNTL_SERIALIZED_ACCEPT. Users may experiment with
- USE_PTHREAD_SERIALIZED_ACCEPT at their own risk, it may speed
- up static content only servers. Or it may fail unpredictably.
- [Dean Gaudet] PR#1779, 1854, 1904
-
- *) mod_test_util_uri.c created which tests the logic in util_uri.c.
- [Dean Gaudet]
-
- *) API: Rewrite of absoluteURI handling, and in particular how
- absoluteURIs match vhosts. Unless a request is a proxy request, a
- "http://host" url is treated as if a similar "Host:" header had been
- supplied. This change was made to support future HTTP/1.x protocols
- which may require clients to send absoluteURIs for all requests.
-
- In order to achieve this change subtle changes were made to the API. In a
- request_rec, r->hostlen has been removed. r->unparsed_uri now exists so
- that the unmodified uri can be retrieved easily. r->proxyreq is not set
- by the core, modules must set it during the post_read_request or
- translate_names phase.
-
- Plus changes to the virtualhost test suite for absoluteURI testing.
-
- This fixes several bugs with the proxy proxying requests to vhosts
- managed by the same httpd.
- [Dean Gaudet]
-
- *) API: Cleanup of code in http_vhost.c, and remove vhost matching
- code from mod_rewrite. The vhost matching is now performed by a
- globally available function matches_request_vhost(). [Dean Gaudet]
-
- *) Reduce memory usage, and speed up ServerAlias support. As a
- side-effect users can list multiple ServerAlias directives
- and they're all considered.
- [Chia-liang Kao <clkao cirx.org>] PR#1531
-
- *) The "poly" directive in image maps did not include the borders of the
- polygon, whereas the "rect" directive does. Fix this inconsistency.
- [Konstantin Morshnev <moko design.ru>] PR#1771
-
- *) Make \\ behave as expected. [<Ronald.Tschalaer psi.ch>]
-
- *) Add the `%a' construct to LogFormat and CustomLog to log the client IP
- address. [Todd Eigenschink <eigenstr mixi.net>] PR#1885
-
- *) API: A new source module main/util_uri.c; It contains a routine
- parse_uri_components() and friends which breaks a URI into its component
- parts. These parts are stored in a uri_components structure called
- parsed_uri within each request_rec, and are available to all modules.
- Additionally, an unparse routine is supplied which re-assembles the URI
- components back to an URI, optionally hiding the username:password@ part
- from ftp proxy requests, and other useful routines. Within the structure,
- you find on a ready-for-use basis:
- scheme; /* scheme ("http"/"ftp"/...) */
- hostinfo; /* combined [user[:password]@]host[:port] */
- user; /* user name, as in http://user:passwd@host:port/ */
- password; /* password, as in http://user:passwd@host:port/ */
- hostname; /* hostname from URI (or from Host: header) */
- port_str; /* port string (integer representation is in "port") */
- path; /* the request path (or "/" if only scheme://host was given) */
- query; /* Everything after a '?' in the path, if present */
- fragment; /* Trailing "#fragment" string, if present */
- This is meant to serve as the platform for *BIG* savings in
- code complexity for the proxy module (and maybe the vhost logic).
- [Martin Kraemer]
-
- *) Make all possible meta-construct expansions ($N, %N, %{NAME} and
- ${map:key}) available for all location where a string is created in
- mod_rewrite rewriting rulesets: 1st arg of RewriteCond, 2nd arg of
- RewriteRule and for the [E=NAME:STRING] flag of RewriteRule. This way the
- possible expansions are consequently usable at all string creation
- locations. [Ralf S. Engelschall]
-
- *) Fix initialization of RewriteLogLevel (default now is 0 as documented
- and not 1) and the per-virtual-server merging of directives. Now all
- directives except `RewriteEngine' and `RewriteOption' are either
- completely overridden (default) or completely inherited (when
- `RewriteOptions inherit') is used. [Ralf S. Engelschall] PR#1325
-
- *) Fix `RewriteMap' program lookup in situations where such maps are
- defined but disabled (`RewriteEngine off') in per-server context.
- [Ralf S. Engelschall] PR#1431
-
- *) Fix bug introduced in 1.3b4-dev, config with no Port setting would cause
- server to bind to port 0 rather than 80. [Dean Gaudet]
-
- *) Fix long-standing problem with RewriteMap _programs_ under Unix derivates
- (like SunOS and FreeBSD) which don't accept the locking of pipes
- directly. A new directive RewriteLock is introduced which can be used to
- setup a separate locking file which then is used for synchronization.
- [Ralf S. Engelschall] PR#1029
-
- *) WIN32: The server root is obtained from the registry key
- HKLM\SOFTWARE\Apache Group\Apache\<version> (version is currently
- "1.3 beta"), unless overridden by the -d command line flag. The
- value is stored by running "apache -i -d serverroot". [Paul Sutton]
-
- *) Merged os/win32/mod_dll.c into modules/standard/mod_so.c to support
- dynamic loading on Win32 and Unix via the same module. [Paul Sutton]
-
- *) Now mod_rewrite no longer makes problematic assumptions on the characters
- a username can contain when trying to expand it via /etc/passwd.
- [Ralf S. Engelschall]
-
- *) The mod_setenvif BrowserMatch backwards compatibility command did not
- work properly with spaces in the regex. [Ronald Tschalaer] PR#1825
-
- *) Add new RewriteMap types: First, `rnd' which is equivalent to the `txt'
- type but with a special post-processing for the looked-up value: It
- parses it into alternatives according to `|' chars and then only one
- particular alternative is chosen randomly (this is an essential
- functionality needed for balancing between backend-servers when using
- Apache as a Reverse Proxy. The looked up value here is a list of
- servers). Second, `int' with the built-in maps named `tolower' and
- `toupper' which can be used to map URL parts to a fixed case (this is an
- essential feature to fix the case of server names when doing mass
- virtual-hosting with the help of mod_rewrite instead of using
- <VirtualHost> sections). [Ralf S. Engelschall, parts based on code from
- Jay Soffian <jay cimedia.com>] PR#1631
-
- *) Add a new directive to mod_proxy similar to ProxyPass: `ProxyPassReverse'.
- This directive lets Apache adjust the URL in Location-headers on HTTP
- redirect responses sent by the remote server. This way the virtually
- mapped area is no longer left on redirects and thus by-passed which is
- especially essential when running Apache as a reverse proxy.
- [Ralf S. Engelschall]
-
- *) Hide Proxy-Authorization from CGI/SSI/etc just like Authorization is
- hidden. [Alvaro Martinez Echevarria]
-
- *) Apache will, when started with the -X (single process) debugging flag,
- honor the SIGINT or SIGQUIT signals again now. This capability got lost
- a while ago during OS/2 signal handling changes.
-
- *) [PORT] Work around the fact that NeXT runs on more than the
- m68k chips in mod_status [Scott Anguish and Timothy Luoma
- <luomat peak.org>]
-
- *) [PORT] Recognize FreeBSD versions so we can use the OS regex as well
- as handling unsigned-chars for FreeBSD v3 and v2 [Andrey Chernov
- <ache nagual.pp.ru> and Jim] PR#1450
-
- *) Use SA_RESETHAND or SA_ONESHOT when installing the coredump handlers.
- In particular the handlers could trigger themselves into an infinite
- loop if RLimitMem was used with a small amount of memory -- too small
- for the signal stack frame to be set up. [Dean Gaudet]
-
- *) Fix problems with absoluteURIs introduced during 1.3b4. [Dean Gaudet,
- Alvaro Martinez Echevarria <alvaro lander.es>]
-
- *) Fix multiple UserDir problem introduced during 1.3b4-dev.
- [Dean Gaudet] PR#1850
-
- *) ap_cpystrn() had an off-by-1 error.
- [Charles Fu <ccwf klab.caltech.edu>] PR#1847
-
- *) API: As Ken suggested the check_cmd_context() function and related
- defines are non-static now so modules can use 'em. [Martin Kraemer]
-
- *) mod_info would occasionally produce an unpaired <tt> in its
- output. Fixed. [Martin Kraemer]
-
- *) By default AIX binds a process (and it's children) to a single
- processor. httpd children now unbind themselves from that cpu
- and re-bind to one selected at random via bindprocessor()
- [Doug MacEachern]
-
- *) Linux 2.0 and above implement RLIMIT_AS, RLIMIT_DATA has almost no
- effect. Work around it by using RLIMIT_AS for the RLimitMEM
- directive. [Enrik Berkhan <enrik inka.de>] PR#1816
-
- *) mod_mime_magic error message should indicate the filename when
- reads fail. ["M.D.Parker" <mdpc netcom.com>] PR#1827
-
- *) Previously Apache would permit </Files> to end <FilesMatch> (and
- similary for Location and Directory), now this is diagnosed as an
- error. Improve error messages for mismatched sections (<Files>,
- <FilesMatch>, <Directory>, <DirectoryMatch>, ...).
- [Dean Gaudet, Martin Kraemer]
-
- *) <Files> is not permitted within <Location> (because of the
- semantic ordering). [Dean Gaudet] PR#379
-
- *) <Files> with wildcards was broken by the change in wildcard
- semantics (* does not match /). To fix this, <Files> now
- apply only to the basename of the request filename. This
- fixes some other inconsistencies in <Files> semantics
- (such as <Files a*b> not working). [Dean Gaudet] PR#1817
-
- *) Removed bogus "dist.tar" target from Makefile.tmpl and make sure
- backup files are removed on "clean" target [Ralf S. Engelschall]
-
- *) PORT: Add -lm to LIBS for HPUX. [Dean Gaudet] PR#1639
-
- *) Various errors from select() and accept() in child_main() would
- result in an infinite loop. It seems these two tickle kernel
- or library bugs occasionally, and result in log spammage and
- a generally bad scene. Now the child exits immediately,
- which seems to be a good workaround.
- [Dean Gaudet] PR#1747, 1107, 588, 1787, 987, 588
-
- *) Cleaned up some race conditions in unix child_main during
- initialization. [Dean Gaudet]
-
- *) SECURITY: "UserDir /abspath" without a * in the path would allow
- remote users to access "/~.." and bypass access restrictions
- (but note /~../.. was handled properly).
- [Lauri Jesmin <jesmin ut.ee>] PR#1701
-
- *) API: os_is_path_absolute() now takes a const char * instead of a char *.
- [Dean Gaudet]
-
-Changes with Apache 1.3b5
-
- *) Source file dependencies in Makefile.tmpl files throughout the
- source tree were updated to accurately reflect reality.
- [Dean Gaudet]
-
- *) Preserve the content encoding given by the AddEncoding directive
- when the client doesn't otherwise specify an encoding.
- [Ronald Tschalaer <Ronald.Tschalaer psi.ch>]
-
- *) Sort out problems with canonical filename handling happening too late.
- [Dean Gaudet, Ben Laurie]
-
-Changes with Apache 1.3b4
-
- *) The module structure was modified to include a *dynamic_load_handle
- in the STANDARD_MODULE_STUFF portion, and the MODULE_MAGIC_NUMBER
- has been bumped accordingly. [Paul Sutton]
-
- *) All BrowserMatch directives mentioned in
- htdocs/manual/known_client_problems.html are in the default
- configuration files. [Lars Eilebrecht]
-
- *) MiNT port update. [Jan Paul Schmidt]
-
- *) HTTP/1.1 requires x-gzip and gzip encodings be treated
- equivalent, similarly for x-compress and compress. Apache
- now ignores a leading x- when comparing encodings. It also
- preserves the encoding the client requests (for example if
- it requests x-gzip, then Apache will respond with x-gzip
- in the Content-Encoding header).
- [Ronald Tschalaer <Ronald.Tschalaer psi.ch>] PR#1772
-
- *) Fix a memory leak on keep-alive connections. [Igor Tatarinov]
-
- *) Added mod_so module to support dynamic loading of modules on Unix
- (like mod_dld for Win32). This replaces mod_dld.c. Use SharedModule
- instead of AddModule in Configuration to build shared modules
- [Sameer Parekh, Paul Sutton]
-
- *) Minor cleanups to r->finfo handling in some modules.
- [Dean Gaudet]
-
- *) Abstract read()/write() to ap_read()/ap_write().
- Makes it easier to add other types of IO code such as SFIO.
- [Randy Terbush]
-
- *) API: Generalize default_port manipulations to make support of
- different protocols easier. [Ben Laurie, Randy Terbush]
-
- *) There are many cases where users do not want Apache to form
- self-referential urls using the "canonical" ServerName and Port.
- The new UseCanonicalName directive (default on), if set to off
- will cause Apache to use the client-supplied hostname and port.
- API: Part of this change required a change to the construct_url()
- prototype; and the addition of get_server_name() and
- get_server_port().
- [Michael Douglass <mikedoug texas.net>, Dean Gaudet]
- PR#315, 459, 485, 1433
-
- *) Yet another rearrangement of the source tree.. now all the common
- header files are in the src/include directory. The -Imain -Iap
- references in Makefiles have been changed to the simpler -Iinclude
- instead. In addition to simplifying the build a little bit, this
- also makes it clear when a module is referencing something in a
- other than kosher manner (e.g., the proxy including mod_mime.h).
- Module-private header files (the proxy, mod_mime, the regex library,
- and mod_rewrite) have not been moved to src/include; nor have
- the OS-abstraction files. [Ken Coar]
-
- *) Fix a bug where r->hostname didn't have the :port stripped
- from it. [Dean Gaudet]
-
- *) Tweaked the headers_out table size, and the subprocess_env
- table size guess in rename_original_environment(). Added
- MAKE_TABLE_PROFILE which can help discover make_table()
- calls that use too small an initial guess, see alloc.c.
- [Dean Gaudet]
-
- *) Options and AllowOverride weren't properly merging in the main
- server setting inside vhosts (only an issue when you have no
- <Directory> or other section containing an Options that affects
- a request). Options +foo or -foo in the main_server wouldn't
- affect the main_server's lookup defaults. [Dean Gaudet]
-
- *) Variable 'cwd' was being used pointlessly before being set.
- [Ken Coar] PR#1738
-
- *) r->allowed handling cleaned up in the standard modules.
- [Dean Gaudet]
-
- *) Some case-sensitivity issues cleaned up to be consistent with
- RFC2068. [Dean Gaudet]
-
- *) SIGURG doesn't exist everywhere.
- [Mark Andrew Heinrich <heinrich tinderbox.Stanford.EDU>]
-
- *) mod_unique_id was erroneously generating a second unique id when
- an internal redirect occured. Such redirects occur, for example,
- when processing a DirectoryIndex match. [Dean Gaudet]
-
- *) API: table_add, table_merge, and table_set include implicit pstrdup()
- of the key and value. But in many cases this is not required
- because the key/value is a constant, or the value has been built
- by pstrcat() or other similar means. New routines table_addn,
- table_mergen, and table_setn have been added to the API, these
- routines do not pstrdup() their arguments. The core code and
- standard modules were changed to take advantage of these routines.
- The resulting server is up to 20% faster in some situations.
-
- Note that it is easy to get code subtly wrong if you pass a key/value
- which is in a pool other than the pool of the table. The only
- safe thing to do is to pass key/values which are in the pool of
- the table, or in one of the ancestors of the pool of the table.
- i.e. if the table is part of a subrequest, a value from the main
- request's pool is OK since the subrequest pool is a sub_pool of the
- main request's pool (and therefore has a lifespan at most as long as
- the main pool). There is debugging code which can detect improper
- usage, enabled by defining POOL_DEBUG. See alloc.c for more details.
- [Dmitry Khrustalev <dima bog.msu.su>, Dean Gaudet]
-
- *) More mod_mime_magic cleanup: fewer syscalls; should handle "files"
- which don't exist on disk more gracefully; handles vhosts properly.
- Update documentation to reflect the code -- if there's no
- MimeMagicFile directive then the module is not enabled.
- [Dean Gaudet]
-
- *) PORT: Some older *nix dialects cannot automatically start scripts
- which begin with a #! interpreter line (the shell starts the scripts
- appropriately on these platforms). Apache now supports starting of
- "hashbang-scripts" when the NEED_HASHBANG_EMUL define is set.
- [Martin Kraemer, with code from Peter Wemm <peter zeus.dialix.oz.au>
- taken from tcsh]
-
- *) API: "typedef array_header table" removed from alloc.h, folks should
- have been writing to use table as if it were an opaque type, but even
- some standard modules got this wrong. By changing the definition
- to "typedef struct table table" module authors will receive compile
- time warnings that they're doing the wrong thing. This change
- facilitates future changes with more sophisticated table
- structures. Specifically, module authors should be using table_elts()
- to get access to an array_header * for the table. [Dean Gaudet]
-
- *) API: Renamed new_connection() to avoid namespace collision with LDAP
- library routines. [Ken Coar, Rasmus Lerdorf]
-
- *) WIN32: mod_speling is now available on the Win32 platform.
- [Marc Slemko]
-
- *) For clarity the following compile time definition was changed:
-
- SAFE_UNSERIALIZED_ACCEPT -> SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-
- Also, for example, HAVE_MMAP would mean to use mmap() scoreboards
- and not be a general notice that the OS has mmap(). Now the
- HAVE_MMAP/SHMGET #defines strictly are informational that the
- OS has that method of shared memory; the type to use for
- the scoreboard is a seperate #define (USE_MMAP_SCOREBOARD
- and USE_SHMGET_SCOREBOARD). This allows outside modules to
- determine if shared memory is available and allows Apache
- to determine the best method to use for the scoreboard.
- [Jim Jagielski]
-
- *) PORT: UnixWare 2.1.2 SMP appears to require USE_FCNTL_SERIALIZED_ACCEPT,
- as do various earlier versions. It should be safe on all versions.
- Unixware 1.x appears to have the same SIGHUP bug as solaris does with
- the slack code. A few other cleanups for Unixware.
- [Tom Hughes <thh cyberscience.com>] PR#1082, PR#1282, PR#1499, PR#1553
-
- *) PORT: A/UX can handle single-listen accepts without mutex
- locking, so we add SINGLE_LISTEN_UNSERIALIZED_ACCEPT. [Jim Jagielski]
-
- *) When die() happens we need to eat any request body if one exists.
- Otherwise we can't continue with a keepalive session. This shows up
- as a POST problem with MSIE 4.0, typically against pages which are
- authenticated. [Roy Fielding] PR#1399
-
- *) If you define SECURITY_HOLE_PASS_AUTHORIZATION then the Authorization
- header will be passed to CGIs. This is generally a security hole, so
- it's not a default. [Marc Slemko] PR#549
-
- *) Fix Y2K problem with date printing in suexec log.
- [Paul Eggert <eggert twinsun.com>] PR#1343
-
- *) WIN32 deserves a pid file. [Ben Hyde]
-
- *) suexec errors now include the errno/description. [Marc Slemko] PR#1543
-
- *) PORT: OSF/1 now uses USE_FLOCK_SERIALIZED_ACCEPT to solve PR#467.
- The choice of flock vs. fcntl was made based on timings which showed that
- even on non-NFS, non-exported filesystems fcntl() was an order of
- magnitude slower. It also uses SINGLE_LISTEN_UNSERIALIZED_ACCEPT so
- that single socket users will see no difference. [Dean Gaudet] PR#467
-
- *) "File does not exist" error message was erroneously including the
- errno. [Marc Slemko]
-
- *) Improve the warning message generated when a client drops the
- connection (hits stop button, etc.) during a send. [Roy Fielding]
-
- *) Defining GPROF will disable profiling in the parent and enable it
- in the children. If you're profiling under Linux this is pretty much
- necessary because SIGPROF is lost across a fork(). [Dean Gaudet]
-
- *) htdigest and htpasswd needed slight tweaks to work on OS/2 and WIN32.
- [Brian Havard]
-
- *) The NeXT cc (which is gcc hacked up) doesn't appear to support some
- gcc functionality. Work around it.
- [Keith Severson <keith sssd.navy.mil>] PR#1613
-
- *) Some linkers complain when .o files contain no functions.
- [Keith Severson <keith sssd.navy.mil>] PR#1614
-
- *) Some const declarations in mod_imap.c that were added for debugging
- purposes caused some compilers heartburn without adding any
- significant value, so they've been removed. [Ken Coar]
-
- *) The src/main/*.h header files have had #ifndef wrappers added to
- insulate them against duplicate calls if they get included through
- multiple paths (e.g., in .c files as well as other .h files).
- [Ken Coar]
-
- *) The libap routines now have a header file for their prototypes,
- src/ap/ap.h, to ease their use in non-httpd applications. [Ken Coar]
-
- *) mod_autoindex with a plaintext header file would emit the <PRE>
- start-tag before the HTML preamble, rather than after the preamble
- but before the header file contents. [John Van Essen <jve gamers.org>]
- PR#1667
-
- *) SECURITY: Fix a possible buffer overflow in logresolve. This is
- only an issue on systems without a MAXDNAME define or where
- the resolver returns domain names longer than MAXDNAME. [Marc Slemko]
-
- *) SECURITY: Eliminate possible buffer overflow in cfg_getline, which
- is used to read various types of files such as htaccess and
- htpasswd files. [Marc Slemko]
-
- *) SECURITY: Ensure that the buffer returned by ht_time is always
- properly null terminated. [Marc Slemko]
-
- *) The "Connection" header could be sent back with multiple "close"
- tokens. Not an error, but a waste.
- [<Ronald.Tschalaer psi.ch>] PR#1683
-
- *) mod_rewrite's RewriteLog should behave like mod_log_config, it
- shouldn't force hostname lookups. [Dean Gaudet] PR#1684
-
- *) "basic" auth needs a case-insensitive comparison.
- [<Ronald.Tschalaer psi.ch>] PR#1666
-
- *) For maximum portability, the environment passed to CGIs should
- only contain variables whose names match the regex
- /[a-zA-Z][a-zA-Z0-9_]*/. This is now enforced by stamping
- underscores over any character outside the regex. This
- affects HTTP_* variables, in a way that should be backward
- compatible for all the standard headers; and affects variables
- set with SetEnv/BrowserMatch and similar directives.
- [Dean Gaudet]
-
- *) mod_speling returned incorrect HREF's when an ambigous match
- was found. Noticed by <robinton amtrash.comlink.de> (Soeren Ziehe)
- [Soeren Ziehe <robinton amtrash.comlink.de>, Martin Kraemer]
-
- *) PORT: Apache now compiles & runs on an EBCDIC mainframe
- (the Siemens BS2000/OSD family) in the POSIX subsystem
- [Martin Kraemer]
-
- *) PORT: Fix problem killing children when terminating. Allow ^C
- to shut down the server. [Brian Havard]
-
- *) pstrdup() is implicit in calls to table_* functions, so there's
- no need to do it before calling. Clean up a few cases.
- [Marc Slemko, Dean Gaudet]
-
- *) new -C and -c command line arguments
- usage:
- -C "directive" : process directive before reading config files
- -c "directive" : process directive after reading config files
- example:
- httpd -C "PerlModule Apache::httpd_conf"
- [Doug MacEachern, Martin Kraemer]
-
- *) WIN32: Fix the execution of CGIs that are scripts and called
- with path info that does not have an '=' in.
- (eg. http://server/cgi-bin/printenv?foobar)
- [Marc Slemko] PR#1591
-
- *) WIN32: Fix a call to os_canonical_filename so it doesn't try to
- mess with fake filenames. This fixes proxy caching on
- win32. PR#1265
-
- *) SECURITY: General mod_include cleanup, including fixing several
- possible buffer overflows and a possible infinite loop.
- [Dean Gaudet, Marc Slemko]
-
- *) SECURITY: Numerous changes to mod_imap in a general cleanup
- including fixing a possible buffer overflow. [Dean Gaudet]
-
- *) WIN32: overhaul of multithreading code. Shutdowns are now graceful
- (connections are not dropped). Code can handle graceful restarts
- (but there is as yet no way to signal this to Apache). Various
- other cleanups. [Paul Sutton]
-
- *) The aplog_error changes specific to 1.3 introduced a buffer
- overrun in the (now legacy) log_printf function. Fixed.
- [Dean Gaudet]
-
- *) mod_digest didn't properly deal with proxy authentication. It
- also lacked a case-insensitive comparision of the "Digest"
- token. [Ronald Tschalaer <Ronald.Tschalaer psi.ch>] PR#1599
-
- *) A few cleanups in mod_status for efficiency. [Dean Gaudet]
-
- *) A few cleanups in mod_info to make it thread-safe, and remove an
- off-by-5 bug that could hammer \0 on the stack. [Dean Gaudet]
-
- *) no2slash() was O(n^2) in the length of the input. Make it O(n).
- [Dean Gaudet]
-
- *) API: migration from strncpy() to our "enhanced" version called
- ap_cpystrn() for performance and functionality reasons.
- Located in libap.a. [Jim Jagielski]
-
- *) table_set() and table_unset() did not deal correctly with
- multiple occurrences of the same key.
- [Stephen Scheck <sscheck infonex.net>, Ben Laurie] PR#1604
-
- *) The AuthName must now be enclosed in quotes if it is to contain
- spaces. [Ken Coar] PR#1195
-
- *) API: new function: ap_escape_quotes(). [Ken Coar] PR#1195
-
- *) WIN32: Work around optimiser bug that killed ISAPI in release
- versions. [Ben Laurie] PR#1533
-
- *) PORT: Update the MPE port [Mark Bixby, Jim Jagielski]
-
- *) Interim (slow) fix for p->sub_pool critical sections in
- alloc.c (affects win32 only). [Ben Hyde]
-
- *) non-WIN32 was missing destroy_mutex definition. [Ben Hyde]
-
- *) send_fd_length() did not calculate total_bytes_sent properly.
- [Ben Reser <breser regnow.com>] PR#1366
-
- *) The bputc() macro was not properly integrated with the chunking
- code; in many cases modules using bputc() could cause completely
- bogus chunked output. (Typically this will show up as problems
- with Internet Explorer 4.0 reading a page, but other browsers
- having no problem.) [Dean Gaudet]
-
- *) Create LARGE_WRITE_THRESHOLD define which determines how many
- bytes have to be supplied to bwrite() before it will consider
- doing a writev() to assemble multiple buffers in one system
- call. This is critical for modules such as mod_include,
- mod_autoindex, mod_php3 which all use bputc()/bputs() of smaller
- strings in some cases. The result would be extra effort
- setting up writev(), and in many cases extra effort building
- chunks. The default is 31, it can be overriden at compile
- time. [Dean Gaudet]
-
- *) Move the gid switching code into the child so that log files
- and pid files are opened with the root gid.
- [Gregory A Lundberg <lundberg vr.net>]
-
- *) WIN32: Check for binaries by looking for the executable header
- instead of counting control characters.
- [Jim Patterson <Jim.Patterson Cognos.COM>] PR#1340
-
- *) ap_snprintf() moved from main/util_snprintf.c to ap/ap_snprintf.c
- so the functionality is available to applications other than the
- server itself (like the src/support tools). [Ken Coar]
-
- *) ap_slack() moved out of main/util.c into ap/ap_slack.c as part of
- the libap consolidation work. [Ken Coar]
-
- *) ap_snprintf() with a len of 0 behaved like sprintf(). This is not
- useful, and isn't what the standards require. Now it returns 0
- and writes nothing. [Dean Gaudet]
-
- *) When an error occurs in fcntl() locking suggest the user look up
- the docs for LockFile. [Dean Gaudet]
-
- *) Eliminate some dead code from writev_it_all().
- [Igor Tatarinov <tatarino prairie.NoDak.edu>]
-
- *) mod_autoindex had an fread() without checking the result code.
- It also wouldn't handle "AddIconByType (TXT,/icons/text.gif text/*"
- (note the missing closing paren) properly. [Dean Gaudet]
-
- *) It appears the "257th byte" bug (see
- htdocs/manual/misc/known_client_problems.html#257th-byte) can happen
- at the 256th byte as well. Fixed. [Dean Gaudet]
-
- *) PORT: Fix mod_mime_magic under OS/2, no support for block devices.
- [Brian Havard]
-
- *) Fix memory corruption caused by allocating auth usernames in the
- wrong pool. [Dean Gaudet] PR#1500
-
- *) Fix an off-by-1, and an unterminated string error in
- mod_mime_magic. [Dean Gaudet]
-
- *) Fix a potential SEGV problem in mod_negotiation when dealing
- with type-maps. [Dean Gaudet]
-
- *) Better glibc support under Linux. [Dean Gaudet] PR#1542
-
- *) "RedirectMatch gone /" would cause a SIGSEGV. [Dean Gaudet] PR#1319
-
- *) WIN32: avoid overflows during file canonicalisations.
- [<malcolm mgdev.demon.co.uk>] PR#1378
-
- *) WIN32: set_file_slot() didn't detect absolute paths. [Ben Laurie]
- PR#1511, 1508
-
- *) WIN32: mod_status display header didn't match fields. [Ben Laurie]
-
- *) The pthread_mutex_* functions return an error code, and don't
- set errno. [Igor Tatarinov <tatarino prairie.NoDak.edu>]
-
- *) WIN32: Allow spaces to prefix the interpreter in #! lines.
- [Ben Laurie] PR#1101
-
- *) WIN32: Cure file leak in CGIs. [Peter Tillemans <pti net4all.be>] PR#1523
-
- *) proxy_ftp: the directory listings generated by the proxy ftp module
- now have a title in which the path components are clickable and allow
- quick navigation to the clicked-on directory on the currently listed
- ftp server. This also fixes a bug where the ".." directory links would
- sometimes refer to the wrong directory. [Martin Kraemer]
-
- *) WIN32: Allocate the correct amount of memory for the scoreboard.
- [Ben Hyde] PR#1387
-
- *) WIN32: Only lowercase the part of the path that is real. [Ben Laurie]
- PR#1505
-
- *) Fix problems with timeouts in inetd mode and -X mode. [Dean Gaudet]
-
- *) Fix the spurious "(0)unknown error: mmap_handler: mmap failed"
- error messages. [Ben Hyde]
-
-Changes with Apache 1.3b3
-
- *) WIN32: Work around brain-damaged spawn calls that can't deal
- with spaces and slashes. [Ben Laurie]
-
- *) WIN32: Fix the code so CGIs can use socket calls on Windows.
- The problem was that certain undocumented environment variables
- needed for sockets to work under Win32 were not being passed.
- [Frank Faubert <frank sane.com>]
-
- *) Add a "-V" command line flag to the httpd binary. This
- flag shows some of the defines that Apache was compiled with.
- It is useful for debugging purposes. [Martin Kraemer]
-
- *) Start separating the ap_*() routines into their own library, so they
- can be used by items in src/support among other things.
- [Ken Coar] PR#512, 905, 1252, 1308
-
- *) Give a more informative error when no AuthType is set.
- [Lars Eilebrecht]
-
- *) Remove strtoul() use from mod_proxy because it isn't available
- on all platforms. [Marc Slemko] PR#1214
-
- *) WIN32: Some Win32 systems terminated all responses after 16 kB.
- This turns out to be a bug in Winsock - select() doesn't always
- return the correct status. [Ben Laurie]
-
- *) Directives owned by http_core can now use the new check_cmd_context()
- routine to ensure that they're not being used within a container
- (e.g., <Directory>) where they're invalid. [Martin Kraemer]
-
- *) PORT: Recent changes made it necessary to add explicit prototype
- for fgetc() and fgets() on SunOS 4.x. [Martin Kraemer, Ben Hyde]
-
- *) It was necessary to distinguish between resources which are
- allocated in the parent, for cleanup in the parent, and resources
- which are allocated in each child, for cleanup in each child.
- A new pool was created which is passed to the module child_init
- and child_exit functions; modules are free to register per-child
- cleanups there. This fixes a bug with reliable piped logs.
- [Dean Gaudet]
-
- *) mod_autoindex wasn't displaying the ReadmeName file at the bottom
- unless it was also doing FancyIndexes, but it displayed the
- HeaderName file at the top under all circumstances. It now shows
- the ReadmeName file for simple indices, too, as it should.
- [Ken Coar] PR#1373
-
- *) http_core was mmap()ing even in cases where it wasn't going to
- read the file. [Ben Hyde <bhyde gensym.com>]
-
- *) Complete rewrite ;-) of mod_rewrite's URL rewriting engine:
- Now the rewriting engine (the heart of mod_rewrite) is organized more
- straight-forward, first time well documented and reduced to the really
- essential parts. All redundant cases were stripped off and processing now
- is the same for both per-server and per-directory context with only a
- minimum difference (the prefix stripping in per-dir context). As a
- side-effect some subtle restrictions and two recently discovered problems
- are gone: Wrong escaping of QUERY_STRING on redirects in per-directory
- context and restrictions on the substitution URL on redirects.
- Additionally some minor source cleanups were done.
- [Ralf S. Engelschall]
-
- *) Lars Eilebrecht wrote a whole new set of Apache Vhost Internals
- documentation, examples, explanations and caveats. They live in a new
- subdirectory htdocs/manual/vhost/. [Lars Eilebrecht <sfx unix-ag.org>]
-
- *) If ap_slack fails to allocate above the low slack line it's a good
- indication that further problems will occur; it's a better indication
- than many external libraries give us when we actually run out of
- descriptors. So report it to the user once per restart.
- [Dean Gaudet] PR#1181
-
- *) Change mod_include and mod_autoindex to use Y2K-safe date formats
- by default. [Ken Coar]
-
- *) Add a "SuppressColumnSorting" option to the IndexOptions list,
- which will keep the column heading from being links for sorting
- the display. [Ken Coar, suggested by Brian Tiemann <btman pacific.net>]
- PR #1261
-
- *) PORT: Update the LynxOS port. [Marius Groeger <mag sysgo.de>]
-
- *) Fix logic error when issuing a mmap() failed message
- with a non-zero MMAP_THRESHOLD.
- [David Chambers <davidc flosun.salk.edu>] PR#1294
-
- *) Preserve handler value on ProxyPass'ed requests by not
- calling find_types on a proxy'd request; fixes problems
- where some ProxyPass'ed URLs weren't actually passed
- to the proxy.
- [Lars Eilebrecht] PR#870
-
- *) Fix a byte ordering problem in mod_access which prevented
- the old-style syntax (i.e. "a.b.c." to match a class C)
- from working properly. [Dean Gaudet] PR#1248, 1328, 1384
-
- *) Fix problem with USE_FLOCK_SERIALIZED_ACCEPT not working
- properly. Each child needs to open the lockfile instead
- of using the passed file-descriptor from the parent.
- [Jim Jagielski] PR#1056
-
- *) Fix the error logging in mod_cgi; the recent error log changes
- introduced a bug that prevented it from working correctly.
- [M.D.Parker] PR#1352
-
- *) Default to USE_FCNTL_SERIALIZED_ACCEPT on HPUX to properly
- handle multiple Listen directives. [Marc Slemko] PR#872
-
- *) Inherit a bugfix to fnmatch.c from FreeBSD sources.
- ["[KOI8-R] áÎÄÒÅÊ þÅÒÎÏ×" <ache nagual.pp.ru>] PR#1311
-
- *) When a configuration parse complained about a bad directive,
- the logger would use whatever (unrelated) value was in errno.
- errno is now forced to EINVAL first in this case. [Ken Coar]
-
- *) A sed command in the Configure script pushed the edge of POSIXness,
- breaking on some systems. [Bhaba R.Misra <system vt.edu>] PR#1368
-
- *) Solaris >= 2.5 was totally broken due to a mess up using pthread
- mutexes. [Roy Fielding, Dean Gaudet]
-
- *) OS/2 Port updated; it should be possible to build OS/2 from the same
- sources as Unix now. [Brian Havard <brianh kheldar.apana.org.au>]
-
- *) Fix a year formatting bug in mod_usertrack.
- [Paul Eggert <eggert twinsun.com>] PR#1342
-
- *) A mild SIGTERM/SIGALRM race condition was eliminated.
- [Dean Gaudet] PR#1211
-
- *) Warn user that default path has changed if /usr/local/etc/httpd
- is found on the system. [Lars Eilebrecht]
-
- *) Various mod_mime_magic bug fixes and cleanups: Uncompression
- should work, it should work on WIN32, and a few resource
- leaks and abort conditions are fixed.
- [Dean Gaudet] PR#1205
-
- *) PORT: On AIX 1.x files can't be named '@', fix the proxy cache
- to use '%' instead of '@' in its encodings.
- [David Schuler <schuld btv.ibm.com>] PR#1317
-
- *) Improve the warning message generated when the "server is busy".
- [Dean Gaudet] PR#1293
-
- *) PORT: All ports which don't otherwise define DEF_WANTHSREGEX will
- get Spencer regex by default. This is to avoid having to
- discover bugs in operating system libraries. [Dean Gaudet]
-
- *) PORT: "Fix" PR#467 by generating warnings on systems which we have
- not been able to get working USE_*_SERIALIZED_ACCEPT settings for.
- Document this a bit more in src/PORTING. [Dean Gaudet] PR#467
-
- *) Ensure that one copy of config warnings makes it to the
- error_log. [Dean Gaudet]
-
- *) Invent new structure and associated methods to handle config file
- reading. Add "custom" hook to use config file cfg_getline() on
- something which is not a FILE* [Martin Kraemer]
-
- *) Make single-exe Windows install. [Ben Laurie and Eric Esselink]
-
- *) WIN32: Make CGI work under Win95. [Ben Laurie and Paul Sutton]
-
- *) WIN32: Make index.html and friends work under Win95. [Ben Laurie]
-
- *) PORT: Solaris 2.4 needs Spencer regex, the system regex is broken.
- [John Line <jml4 cam.ac.uk>] PR#1321
-
- *) Default pathname has been changed everywhere to /usr/local/apache
- [Sameer <sameer c2.net>]
-
- *) PORT: AIX now uses USE_FCNTL_SERIALIZED_ACCEPT.
- [David Bronder <David-Bronder uiowa.edu>] PR#849
-
- *) PORT: i386 AIX does not have memmove.
- [David Schuler <schuld btv.ibm.com>] PR#1267
-
- *) PORT: HPUX now defaults to using Spencer regex.
- [Philippe Vanhaesendonck <pvanhaes be.oracle.com>,
- Omar Del Rio <al112263 academ01.lag.itesm.mx>] PR#482, 1246
-
- *) PORT: Some versions of NetBSD don't automatically define
- __NetBSD__. Workaround by defining NETBSD.
- [Chris Craft <ccraft cncc.cc.co.us>] PR#977
-
- *) PORT: UnixWare 2.x requires -lgen for syslog.
- [Hans Snijder <hs meganet.nl>] PR#1249
-
- *) PORT: ULTRIX appears to not have syslog.
- [Lars Eilebrecht <Lars.Eilebrecht unix-ag.org>]
-
- *) PORT: Basic Gemini port (treat it like unixware212).
- ["Pavel Yakovlev (Paul McHacker)" <hac tomcat.olly.ru>]
-
- *) PORT: All SVR4 systems now use NET_SIZE_T = size_t, and
- use USE_SHMGET_SCOREBOARD.
- [Martin Kraemer]
-
- *) Various improvements in detecting config file errors (missing closing
- directives for <Directory>, <Files> etc. blocks, prohibiting global
- server settings in <VirtualHost> blocks, flagging unhandled multiple
- arguments to <Directory>, <Files> etc.)
- [Martin Kraemer]
-
- *) Add support to suexec wrapper program for mod_unique_id's UNIQUE_ID
- variable to provide this one to suexec'd CGIs, too.
- [M.D.Parker <mdpc netcom.com>] PR#1284
-
- *) New support tool: src/support/split-logfile, a sample Perl script which
- splits up a combined access log into separate files based on the
- name of the virtual host (listed first in the log records by "%v").
- [Ken Coar]
-
-Changes with Apache 1.3b2 (there is no 1.3b1)
-
- *) TestCompile was not passing $LIBS [Dean Gaudet]
-
- *) Makefile.tmpl was not using $CFLAGS in the link phase.
- [Martin Kraemer]
-
- *) Add debugging code to alloc.c. Defining ALLOC_DEBUG provides a
- rudimentary memory debugger which can be used on live servers with
- low impact -- it sets all allocated and freed memory bytes to 0xa5.
- Defining ALLOC_USE_MALLOC will cause the alloc code to use malloc()
- and free() for each object. This is far more expensive and should
- only be used for testing with tools such as Electric Fence and
- Purify. See main/alloc.c for more details. [Dean Gaudet]
-
- *) Configure uses a sh trap and didn't set its exitcode properly.
- [Dean Gaudet] PR#1159
-
- *) Yet another vhost revamp. Add the NameVirtualHost directive which
- explicitly lists the ip:port pairs that are to be used for name-vhosts.
- From a given ip:port, regardless what the Host: header is, you can
- only reach the vhosts defined on that ip:port. The precedence of
- vhosts was reversed to match other precedences in the config --
- the earlier vhosts override the later vhosts. All vhost matching was
- moved into http_vhost.[ch]. [Dean Gaudet]
-
- *) ap_inline can be used to force inlining. GNUC __attribute__() can
- be used for whatever reason is appropriate (i.e. format() warnings
- for printf style functions). Both are enabled only with
- gcc >= 2.7.x (so that we have fewer support issues with older
- versions). [Dean Gaudet]
-
- *) Fix support for Proxy Authentication (we were testing the response
- status too early). [Marc Slemko]
-
- *) CoreDumpDirectory directive directs where the core file is
- written when a SIGSEGV, SIGBUS, SIGABORT or SIGABRT are
- received. [Marc Slemko, Dean Gaudet]
-
- *) PORT: Support for Atari MINT.
- [Jan Paul Schmidt <Jan.P.Schmidt mni.fh-giessen.de>]
-
- *) When booting, apache will now detach itself from stdin, stdout,
- and stderr. stderr will not be detached until after the config
- files have been read so you will be able to see initial error
- messages. After that all errors are logged in the error_log.
- This makes it more convenient to start apache via rsh, ssh,
- or crontabs. [Dean Gaudet] PR#523
-
- *) mod_proxy was sending HTTP/1.1 responses to ftp requests by mistake.
- Also removed the auto-generated link to www.apache.org that was the
- source of so many misdirected bug reports. [Roy Fielding, Marc Slemko]
-
- *) send_fb would not detect aborted connections in some situations.
- [Dean Gaudet]
-
- *) mod_include would use uninitialized data when parsing certain
- expressions involving && and ||. [Brian Slesinsky] PR#1139
-
- *) mod_imap should only handle GET methods. [Jay Bloodworth]
-
- *) suexec.c wouldn't build without -DLOG_EXEC. [Jason A. Dour]
-
- *) mod_autoindex improperly counted &escapes; as more than one
- character in the description. It also improperly truncated
- descriptions that were exactly the maximum length.
- [Martin Kraemer]
-
- *) RedirectMatch was not properly escaping the result (PR#1155). Also
- "RedirectMatch /advertiser/(.*) $1" is now permitted.
- [Dean Gaudet]
-
- *) mod_include now uses symbolic names to check for request success
- and return HTTP errors, and correctly handles all types of
- redirections (previously it only did temporary redirect correctly).
- [Ken Coar, Roy Fielding]
-
- *) mod_userdir was modifying r->finfo in cases where it wasn't setting
- r->filename. Since those two are meant to be in sync with each other
- this is a bug. ["Paul B. Henson" <henson intranet.csupomona.edu>]
-
- *) PORT: Support Unisys SVR4, whose uname returns mostly useless data.
- ["Kaufman, Steven E" <Steven.Kaufman unisys.com>]
-
- *) Inetd mode (which is buggy) uses timeouts without having setup the
- jmpbuffer. [Dean Gaudet] PR#1064
-
- *) Work around problem under Linux where a child will start looping
- reporting a select error over and over.
- [Rick Franchuk <rickf transpect.net>] PR#1107, 987, 588
-
- *) Fixed error in proxy_util.c when looping through multiple host IP
- addresses. [Lars Eilebrecht] PR#974
-
- *) If BUFFERED_LOGS is defined then mod_log_config will do atomic
- buffered writes -- that is, it will buffer up to PIPE_BUF (i.e. 4k)
- bytes before writing, but it will never split a log entry across a
- buffer boundary. [Dean Gaudet]
-
- *) API: the short_score record has been split into two pieces, one which
- the parent writes on, and one which the child writes on. As part of
- this change the get_scoreboard_info() function was removed, and
- scoreboard_image was exported. This change fixes a race condition
- in file based scoreboard systems, and speeds up changes involving the
- scoreboard in earlier 1.3 development. [Dean Gaudet]
-
- *) API: New register_other_child() API (see http_main.h) which allows
- modules to register children with the parent for maintenance. It
- is disabled by defining NO_OTHER_CHILD. [Dean Gaudet]
-
- *) API: New piped_log API (see http_log.h) which implements piped logs,
- and will use register_other_child to implement reliable piped logs
- when it is available. The reliable piped logs part can be disabled
- by defining NO_RELIABLE_PIPED_LOGS. At the moment reliable piped
- logs is only available on Unix. [Dean Gaudet]
-
- *) API: set_last_modified() broken into set_last_modified(), set_etag(), and
- meets_conditions(). This allows conditional HTTP selection to be
- handled separately from the storing of the header fields, and provides
- the ability for CGIs to set their own ETags for conditional checking.
- [Ken Coar, Roy Fielding] PR#895
-
- *) Changes to mod_log_config to allow naming of format strings.
- Format nicknames are defined with "LogFormat fmt nickname", and can
- be used with "LogFormat nickname" and "CustomLog logtarget nickname".
- [Ken Coar]
-
- *) New module, "mod_speling", which can help find files even when
- the URL is slightly misspelled. [Martin Kraemer, Alexei Kosut]
-
- *) API: New function child_terminate() triggers the child process to
- exit, while allowing the child finish what it needs to for the
- current request first.
- [Doug MacEachern, Alexei Kosut]
-
- *) Windows now defaults to using full status reports with mod_status.
- [Alexei Kosut] PR #1094
-
- *) *Really* disable all mod_rewrite operations if the engine is off.
- Some things (like RewriteMaps) were checked/performed even if they
- weren't supposed to be. [Ken Coar] PR #991
-
- *) Implement a new timer scheme which eliminates the need to call alarm() all
- the time. Instead a counter in the scoreboard for each child is used to
- show when the child has made forward progress. The parent samples this
- counter every scoreboard maintenance cycle, and issues SIGALRM if no
- progress has been made in the timeout period. This reduces the static
- request best-case syscall count to 22 from 29. This scheme is only
- used by systems with memory-based scoreboards. [Dean Gaudet]
-
- *) The proxy now properly handles CONNECT requests which are sent
- to proxy servers when using ProxyRemote. [Marc Slemko] PR#1024
-
- *) A script called apachectl has been added to the support
- directory. This script allows you to do things such as
- "apachectl start" and "apachectl restart" from the command
- line. [Marc Slemko]
-
- *) Modules and core routines are now put into libraries, which
- simplifies the link line tremendously (among other advantages).
- [Paul Sutton]
-
- *) Some of the MD5 names defined in Apache have been renamed to have
- an `ap_' prefix to avoid conflicts with routines supplied by
- external libraries. [Ken Coar]
-
- *) Removal of mod_auth_msql.c from the distribution. There are many
- other options for databases today. Rather than offer one option,
- offer none at this time. mod_auth_msql and other SQL database
- authentication modules can be found at the Apache Module Registry.
- http://modules.apache.org/ It would be nice to offer a generic
- mod_auth_sql option in the near future.
-
- *) PORT: BeOS support added [Alexei Kosut]
-
- *) Configure no longer accepts the -make option, since it creates
- Makefile on the fly based on Makefile.tmpl and Configuration.
-
- *) Apache now gracefully shuts down when it receives a SIGTERM, instead
- of forcibly killing off all its processes and exiting without
- cleaning up. [Alexei Kosut]
-
- *) API: A new field in the request_rec, r->mtime, has been added to
- avoid gratuitous parsing of date strings. It is intended to hold
- the last-modified date of the resource (if applicable). An
- update_mtime() routine has also been added to advance it if
- appropriate. [Roy Fielding, Ken Coar]
-
- *) SECURITY: If a htaccess file can not be read due to bad permissions,
- deny access to the directory with a HTTP_FORBIDDEN. The previous
- behavior was to ignore the htaccess file if it could not be read.
- This change may make some setups with unreadable htaccess files
- stop working. [Marc Slemko] PR#817
-
- *) Add aplog_error() providing a mechanism to define levels of
- verbosity to the server error logging. This addition also provides
- the ability to log errors using syslogd. Error logging is configurable
- on a per-server basis using the LogLevel directive. Conversion
- of log_*() in progress. [Randy Terbush]
-
- *) Further enhance aplog_error() to not log filename, line number, and
- errno information when it isn't applicable. [Ken Coar, Dean Gaudet]
-
- *) WIN32: Canonicalise filenames under Win32. Short filenames are
- converted to long ones. Backslashes are converted to forward
- slashes. Case is converted to lower. Parts of URLs that do not
- correspond to files are left completely alone. [Ben Laurie]
-
- *) PORT: 2 new OSs added to the list of ports:
- Encore's UMAX V: Arieh Markel <amarkel encore.com>
- Acorn RISCiX: Stephen Borrill <sborrill xemplar.co.uk>
-
- *) Add the server version (SERVER_VERSION macro) to the "server
- configured and running" entry in the error_log. Also build an
- object file at link-time that contains the current time
- (SERVER_BUILT global const char[]), and include that in the
- message. [Ken Coar]
-
- *) Set r->headers_out when sending responses from the proxy.
- This fixes things such as the logging of headers sent from
- the proxy. [Marc Slemko] PR#659
-
- *) support/httpd_monitor is no longer distributed because the
- scoreboard should not be file based if at all possible. Use
- mod_status to see current server snapshot.
-
- *) (set_file_slot): New function, allowing auth directives to be
- independent of the server root, so the server documents can be
- moved to a different directory or machine more easily.
- [David J. MacKenzie]
-
- *) If no TransferLog is given explicitly, decline
- to log. This supports coexistence with other logging modules,
- such as the custom one that UUNET uses. [David J. MacKenzie]
-
- *) Check for titles in server-parsed HTML files.
- Ignore leading newlines and returns in titles. The old behavior
- of replacing a newline after <title> with a space causes the
- title to be misaligned in the listing. [David J. MacKenzie]
-
- *) Change mod_cern_meta to be configurable on a per-directory basis.
- [David J. MacKenzie]
-
- *) Add 'Include' directive to allow inclusion of configuration
- files within configuration files. [Randy Terbush]
-
- *) Proxy errors on connect() are logged to the error_log (nothing
- new); now they include the IP address and port that failed
- (*that's* new). [Ken Coar, Marc Slemko] PR#352
-
- *) Various architectures now define USE_MMAP_FILES which causes
- the server to use mmap() for static files. There are two
- compile-time tunables MMAP_THRESHOLD (minimum number of bytes
- required to use mmap(), default is 0), and MMAP_SEGMENT_SIZE (maximum
- number of bytes written in one cycle from a single mmap()d object,
- default 32768). [Dean Gaudet]
-
- *) API: Added post_read_request API phase which is run right after reading
- the request from a client, or right after an internal redirect. It is
- useful for modules setting environment variables that depend only on
- the headers/contents of the request. It does not run during subrequests
- because subrequests inherit pretty much everything from the main
- request. [Dean Gaudet]
-
- *) Added mod_unique_id which is used to generate a unique identifier for
- each hit, available in the environment variable UNIQUE_ID.
- [Dean Gaudet]
-
- *) init_modules is now called after the error logs have been opened. This
- allows modules to emit information messages into the error logs.
- [Dean Gaudet]
-
- *) Fixed proxy-pass-through feature of mod_rewrite; Added error logging
- information for case where proxy module is not available. [Marc Slemko]
-
- *) PORT: Apache has need for mutexes to serialize its children around
- accept. In prior versions either fcntl file locking or flock file
- locking were used. The method is chosen by the definition of
- USE_xxx_SERIALIZED_ACCEPT in conf.h. xxx is FCNTL for fcntl(),
- and FLOCK for flock(). New options have been added:
- - SYSVSEM to use System V style semaphores
- - PTHREAD to use POSIX threads (appears to work on Solaris only)
- - USLOCK to use IRIX uslock
- Based on timing various techniques, the following changes were made
- to the defaults:
- - Linux 2.x uses flock instead of fcntl
- - Solaris 2.x uses pthreads
- - IRIX uses SysV semaphores -- however multiprocessor IRIX boxes
- work far faster if you -DUSE_USLOCK_SERIALIZED_ACCEPT
- [Dean Gaudet, Pierre-Yves Kerembellec <Pierre-Yves.Kerembellec vtcom.fr>,
- Martijn Koster <m.koster pobox.com>]
-
- *) PORT: The semantics of accept/select make it very desirable to use
- mutexes to serialize accept when multiple Listens are in use. But
- in the case where only a single socket is open it is sometimes
- redundant to serialize accept(). Not all unixes do a good job with
- potentially dozens of children blocked on accept() on the same
- socket. It's now possible to define SINGLE_LISTEN_UNSERIALIZED_ACCEPT and
- the server will avoid serialization when listening on only one socket,
- and use serialization when listening on multiple sockets.
- [Dean Gaudet] PR#467
-
- *) Configure changes: TestLib replaced by TestCompile, which has
- some additional capability (such as doing a sanity check of
- the compiler and flags selected); the version of Solaris is now
- available via the #define value of SOLARIS2; IRIX n32bit libs
- now supported and selectable by new Configuration Rule: IRIXN32;
- We no longer default to -O2 optimization. [Jim Jagielski]
-
- *) Updated Configure: Configuration now uses AddModule to specify
- module source or binary file location, relative to src directory.
- Modules can be dropped into modules/extra, or in their own
- directory, and modules can come with a Makefile or Configure can
- create one. Modules can add compiler or library information to
- generated Makefiles. [Paul Sutton]
-
- *) Source core re-organisation: distributed modules are now in
- modules/standard. All other source code is in main. OS-specific
- code is in os/{unix,emx,win32} directories. [Paul Sutton]
-
- *) mod_browser has been removed, since it's replaced by mod_setenvif.
- [Ken Coar]
-
- *) Fix another long-standing bug in sub_req_lookup_file where it would
- happily skip past access checks on subdirectories looked up with
- relative paths. (It's used by mod_dir, mod_negotiation,
- and mod_include.) [Dean Gaudet]
-
- *) directory_walk optimization to reduce an O(N*M) loop to O(N+M) where
- N is the number of <Directory> sections, and M is the number of
- components in the filename of an object.
-
- To achieve this optimization the following config changes were made:
- - Wildcards (* and ?, not the regex forms) in <Directory>s,
- <Files>s, and <Location>s now treat a slash as a special
- character. For example "/home/*/public_html" previously would
- match "/home/a/andrew/public_html", now it only matches things
- like "/home/bob/public_html". This mimics /bin/sh behaviour.
- - It's possible now to use [] wildcarding in <Directory>, <Files>
- or <Location>.
- - Regex <Directory>s are applied after all non-regex <Directory>s.
-
- [Dean Gaudet]
-
- *) Fix a bug introduced in 1.3a1 directory_walk regarding .htaccess files
- and corrupted paths. [Dean Gaudet]
-
- *) Enhanced and cleaned up the URL rewriting engine of mod_rewrite:
- First the grouped parts of RewriteRule pattern matches (parenthesis!) can
- be accessed now via backreferences $1..$9 in RewriteConds test-against
- strings in addition to RewriteRules subst string. Second the grouped
- parts of RewriteCond pattern matches (parenthesis!) can be accessed now
- via backreferences %1..%9 both in following RewriteCond test-against
- strings and RewriteRules subst string. This provides maximum flexibility
- through the use of backreferences.
- Additionally the rewriting engine was cleaned up by putting common
- code to the new expand_backrefs_inbuffer() function.
- [Ralf S. Engelschall]
-
- *) When merging the main server's <Directory> and <Location> sections into
- a vhost, put the main server's first and the vhost's second. Otherwise
- the vhost can't override the main server. [Dean Gaudet] PR#717
-
- *) The <Directory> code would merge and re-merge the same section after
- a match was found, possibly causing problems with some modules.
- [Dean Gaudet]
-
- *) ip-based vhosts are stored and queried using a hashing function, which
- has been shown to improve performance on servers with many ip-vhosts.
- Some other changes had to be made to accommodate this:
- - the * address for vhosts now behaves like _default_
- - the matching process now is:
- - match an ip-vhost directly via hash (possibly matches main
- server)
- - if that fails, just pretend it matched the main server
- - if so far only the main server has been matched, perform
- name-based lookups (ServerName, ServerAlias, ServerPath)
- *only on name-based vhosts*
- - if they fail, look for _default_ vhosts
- [Dean Gaudet, Dave Hankins <dhankins sugarat.net>]
-
- *) dbmmanage overhaul:
- - merge dbmmanage and dbmmanage.new functionality, remove dbmmanage.new
- - tie() to AnyDBM_File which will use one of DB_File, NDBM_File or
- GDBM_File (-ldb, -lndbm, -lgdbm) (trying each in that order)
- - provide better seed for rand
- - prompt for password as per getpass(3) (turn off echo, read from
- /dev/tty, etc.)
- - use "newstyle" crypt based on $Config{osname} ($^O)
- - will not add a user if already in database, use new `update' command
- instead
- - added `check' command to check a users' password
- - added `import' command to convert existing password text-files or
- dbm files exported with `view'
- - more descriptive usage, general cleanup, 'use strict' clean, etc.
- [Doug MacEachern]
-
- *) Added psocket() which is a pool form of socket(), various places within
- the proxy weren't properly blocking alarms while registering the cleanup
- for its sockets. bclose() now uses pclose() and pclosesocket(). There
- was a bug where the client socket was being close()d twice due a still
- registered cleanup. [Dean Gaudet]
-
- *) A few cleanups were made to reduce time(), getpid(), and signal() calls.
- [Dean Gaudet]
-
- *) PORT: AIX >= 4.2 requires -lm due to libc changes.
- [Jason Venner <jason idiom.com>] PR#667
-
- *) Enable ``=""'' for RewriteCond directives to match against
- the empty string. This is the preferred way instead of ``^$''.
- [Ralf S. Engelschall]
-
- *) Fixed an infinite loop in mod_imap for references above the server root
- [Dean Gaudet] PR#748
-
- *) mod_proxy now has a ReceiveBufferSize directive, similar to
- SendBufferSize, so that the TCP window can be set appropriately
- for LFNs. [Phillip A. Prindeville]
-
- *) mod_browser has been replaced by the more general mod_setenvif
- (courtesy of Paul Sutton). BrowserMatch* directives are still
- available, but are now joined by SetEnvIf*, UnSetEnvIf*, and
- UnSetEnvIfZero directives. [Ken Coar]
-
- *) "HostnameLookups double" forces double-reverse DNS to succeed in
- order for remote_host to be set (for logging, or for the env var
- REMOTE_HOST). The old define MAXIMUM_DNS has been deprecated.
- [Dean Gaudet]
-
- *) mod_access overhaul:
- - Now understands network/netmask syntax (i.e. 10.1.0.0/255.255.0.0)
- and cidr syntax (i.e. 10.1.0.0/16). PR#762
- - Critical path was sped up by pre-computing a few things at config time.
- - The undocumented syntax "allow user-agents" was removed,
- the replacement is "allow from env=foobar" combined with mod_browser.
- - When used with hostnames it now forces a double-reverse lookup
- no matter what the directory settings are. This double-reverse
- doesn't affect any of the other routines that use the remote
- hostname. In particular it's still passed to CGIs and the log
- without the double-reverse check. Related PR#860.
- [Dean Gaudet]
-
- *) When a large bwrite() occurs (larger than the internal buffer size),
- while there is already something in the buffer, apache will combine
- the large write and the buffer into a single writev(). (This is
- in anticipation of using mmap() for reading files.)
- [Dean Gaudet]
-
- *) In obscure cases where a partial socket write occurred while chunking,
- Apache would omit the chunk header/footer on the next block. Cleaned
- up other bugs/inconsistencies in error conditions in buff.c. Fixed
- a bug where a long pause in DNS lookups could cause the last packet
- of a response to be unduly delayed. [Roy Fielding, Dean Gaudet]
-
- *) API: Added child_exit function to module structure. This is called
- once per "heavy-weight process" just before a server child exit()'s
- e.g. when max_requests_per_child is reached, etc.
- [Doug MacEachern, Dean Gaudet]
-
- *) mod_include cleanup showed that handle_else was being used to handle
- endif. It didn't cause problems, but it was cleaned up too.
- [Howard Fear]
-
- *) mod_cern_meta would attempt to find meta files for the directory itself
- in some cases, but not in others. It now avoids it in all cases.
- [Dean Gaudet]
-
- *) mod_mime_magic would core dump if there was a decompression error.
- [Martin Kraemer <Martin.Kraemer mch.sni.de>] PR#904
-
- *) PORT: some variants of DGUX require -lsocket -lnsl
- [Alexander L Jones <alex systems-options.co.uk>] PR#732
-
- *) mod_autoindex now allows sorting of FancyIndexed directory listings
- by the various fields (name, size, et cetera), either in ascending
- or descending order. Just click on the column header. [Ken Coar]
-
- *) PORT: Various tweaks to eliminate pointer-int casting warnings on 64-bit
- CPUs like the Alpha. Apache still stores ints in pointers, but that's
- the relatively safe direction. [Dean Gaudet] PR#344
-
- *) PORT: QNX mmap() support for faster/more reliable scoreboard handling.
- [Igor N Kovalenko <infoh mail.wplus.net>] PR#683
-
- *) child_main avoids an unneeded call to select() when there is only one
- listening socket. [Dean Gaudet]
-
- *) In the event that the server is starved for idle servers it will
- spawn 1, then 2, then 4, ..., then 32 servers each second,
- doubling each second. It'll also give a warning in the errorlog
- since the most common reason for this is a poor StartServers
- setting. The define MAX_SPAWN_RATE can be used to raise/lower
- the maximum. [Dean Gaudet]
-
- *) Apache now provides an effectively unbuffered connection for
- CGI scripts. This means that data will be sent to the client
- as soon as the CGI pauses or stops output; previously, Apache would
- buffer the output up to a fixed buffer size before sending, which
- could result in the user viewing an empty page until the CGI finished
- or output a complete buffer. It is no longer necessary to use an
- "nph-" CGI to get unbuffered output. Given that most CGIs are written
- in a language that by default does buffering (e.g. perl) this
- shouldn't have a detrimental effect on performance.
-
- "nph-" CGIs, which formerly provided a direct socket to the client
- without any server post-processing, were not fully compatible with
- HTTP/1.1 or SSL support. As such they would have had to implement
- the transport details, such as encryption or chunking, in order
- to work properly in certain situations. Now, the only difference
- between nph and non-nph scripts is "non-parsed headers".
- [Dean Gaudet, Sameer Parekh, Roy Fielding]
-
- *) If a BUFF is switched from buffered to unbuffered reading the first
- bread() will return whatever remained in the buffer prior to the
- switch. [Dean Gaudet]
-
-Changes with Apache 1.3a1
-
- *) Added another Configure helper script: TestLib. It determines
- if a specified library exists. [Jim Jagielski]
-
- *) PORT: Allow for use of n32bit libraries under IRIX 6.x
- [derived from patch from Jeff Hayes <jhayes aw.sgi.com>]
- PR#721
-
- *) PORT: Some architectures use size_t for various lengths in network
- functions such as accept(), and getsockname(). The definition
- NET_SIZE_T is used to control this. [Dean Gaudet]
-
- *) PORT: Linux: Attempt to detect glibc based systems and include crypt.h
- and -lcrypt. Test for various db libraries (dbm, ndbm, db) when
- mod_auth_dbm or mod_auth_db are included. [Dean Gaudet]
-
- *) PORT: QNX doesn't have initgroups() which support/suexec.c uses.
- [Igor N Kovalenko <infoh mail.wplus.net>]
-
- *) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
- begin with. "nokeepalive" now works for HTTP/1.1 clients. Added
- "downgrade-1.0" which causes Apache to pretend it received a 1.0.
- [Dean Gaudet] related PR#875
-
- *) API: Correct child_init() slot declaration from int to void, to
- match the init() declaration. Update mod_example to use the new
- hook. [Ken Coar]
-
- *) added transport handle slot (t_handle) to the BUFF structure
- [Doug MacEachern]
-
- *) get_client_block() returns wrong length if policy is
- REQUEST_CHUNKED_DECHUNK.
- [Kenichi Hori <ken d2.bs1.fc.nec.co.jp>] PR#815
-
- *) Support the image map format of FrontPage. For example:
- rect /url.hrm 10 20 30 40
- ["Chris O'Byrne" <obyrne iol.ie>] PR#807
-
- *) PORT: -lresolv and -lsocks were in the wrong order for Solaris.
- ["Darren O'Shaughnessy" <darren aaii.oz.au>] PR#846
-
- *) AddModuleInfo directive for mod_info which allows you to annotate
- the output of mod_info. ["Lou D. Langholtz" <ldl usi.utah.edu>]
-
- *) Added NoProxy directive to avoid using ProxyRemote for selected
- addresses. Added ProxyDomain directive to cause unqualified
- names to be qualified by redirection.
- [Martin Kraemer <Martin.Kraemer mch.sni.de>]
-
- *) Support Proxy Authentication, and don't pass the Proxy-Authorize
- header to the remote host in the proxy. [Sameer Parekh and
- Wallace]
-
- *) Upgraded mod_rewrite from 3.0.6+ to latest officially available version
- 3.0.9. This upgrade includes: fixed deadlooping on rewriting to same
- URLs, fixed rewritelog(), fixed forced response code handling on
- redirects from within .htaccess files, disabled pipe locking under
- braindead SunOS 4.1.x, allow env variables to be set even on rules with
- no substitution, bugfixed situations where HostnameLookups is off, made
- mod_rewrite more thread-safe for NT port and fixed problem when creating
- an empty query string via "xxx?".
- This update also removes the copyright of Ralf S. Engelschall,
- i.e. now mod_rewrite no longer has a shared copyright. Instead is is
- exclusively copyrighted by the Apache Group now. This happened because
- the author now has gifted mod_rewrite exclusively to the Apache Group and
- no longer maintains an external version.
- [Ralf S. Engelschall]
-
- *) API: Added child_init function to module structure. This is called
- once per "heavy-weight process" before any requests are handled.
- See http_config.h for more details. [Dean Gaudet]
-
- *) Anonymous_LogEmail was logging on each subrequest.
- [Dean Gaudet] PR#421, 868
-
- *) API: Added is_initial_req() which tests if the request being
- processed is the initial request, or a subrequest.
- [Doug MacEachern]
-
- *) Extended SSI (mod_include) now handles additional relops for
- string comparisons (<, >, <=, and >=). [Bruno Wolff III] PR#41
-
- *) Configure fixed to correctly propagate user-selected options and
- settings (such as CC and OPTIM) to Makefiles other than
- src/Makefile (notably support/Makefile). [Ken Coar] PR#666, #834
-
- *) IndexOptions SuppressHTMLPreamble now causes the actual HTML of
- directory indices to start with the contents of the HeaderName file
- if there is one. If there isn't one, the behaviour is unchanged.
- [Ken Coar, Roy Fielding, Andrey A. Chernov]
-
- *) WIN32: Modules can now be dynamically loaded DLLs using the
- LoadModule/LoadFile directives. Note that module DLLs must be
- compiled with the multithreaded DLL version of the runtime library.
- [Alexei Kosut and Ben Laurie]
-
- *) Automatic indexing removed from mod_dir and placed into mod_autoindex.
- This allows the admin to completely remove automatic indexing
- from the server, while still supporting the basic functions of
- trailing-slash redirects and DirectoryIndex files. Note that if
- you're carrying over an old Configuration file and you use directory
- indexing then you'll want to add:
-
- Module autoindex_module mod_autoindex.o
-
- before mod_dir in your Configuration. [Dean Gaudet]
-
- *) popendir/pclosedir created to properly protect directory scanning.
- [Dean Gaudet] PR#525
-
- *) AliasMatch, ScriptAliasMatch and RedirectMatch directives added,
- giving regex support to mod_alias. <DirectoryMatch>, <LocationMatch>
- and <FilesMatch> sections added to succeed <DirectoryMatch ~>, etc...
- [Alexei Kosut]
-
- *) The AccessFileName directive can now take more than one filename.
- ["Lou D. Langholtz" <ldl usi.utah.edu>]
-
- *) The new mod_mime_magic can be used to "magically" determine the type
- of a file if the extension is unknown. Based on the unix file(1)
- command. [Ian Kluft <ikluft cisco.com>]
-
- *) We now determine and display the time spent processing a
- request if desired. [Jim Jagielski]
-
- *) mod_status: PID field of "dead" child slots no longer displays
- main httpd process's PID. [Jim Jagielski]
-
- *) Makefile.nt added - to build all the bits from the command line:
- nmake -f Makefile.nt
- Doesn't yet work properly. [Ben Laurie]
-
- *) Default text of 404 error is now "Not Found" rather than the
- potentially misleading "File Not Found". [Ken Coar]
-
- *) CONFIG: "HostnameLookups" now defaults to off because it is far better
- for the net if we require people that actually need this data to
- enable it. [Linus Torvalds]
-
- *) directory_walk() is an expensive function, keep a little more state to
- avoid needless string counting. Add two new functions make_dirstr_parent
- and make_dirstr_prefix which replace all existing uses of make_dirstr.
- The new functions are a little less general than make_dirstr, but
- work more efficiently (less memory, less string counting).
- [Dean Gaudet]
-
- *) EXTRA_LFLAGS was changed to EXTRA_LDFLAGS (and LFLAGS was changed
- to LDFLAGS) to avoid complications with lex rules in make files.
- [Dean Gaudet] PR#372
-
- *) run_method optimized to avoid needless scanning over NULLs in the
- module list. [Dean Gaudet]
-
- *) Revamp of (unix) scoreboard management code such that it avoids
- unnecessary traversals of the scoreboard on each hit. This is
- particularly important for high volume sites with a large
- HARD_SERVER_LIMIT. Some of the previous operations were O(n^2),
- and are now O(n). See also SCOREBOARD_MAINTENANCE_INTERVAL in
- httpd.h. [Dean Gaudet]
-
- *) In configurations using multiple Listen statements it was possible for
- busy sockets to starve other sockets of service. [Dean Gaudet]
-
- *) Added hook so standalone_main can be replaced at compile time
- (define STANDALONE_MAIN)
- [Doug MacEachern]
-
- *) Lowest-level read/write functions in buff.c will be replaced with
- the SFIO library calls sfread/sfwrite if B_SFIO is defined at
- compile time. The default sfio discipline will behave as apache
- would without sfio compiled in.
- [Doug MacEachern]
-
- *) Enhance UserDir directive (mod_userdir) to accept a list of
- usernames for the 'disable' keyword, and add 'enable user...' to
- selectively *en*able userdirs if they're globally disabled.
- [Ken Coar]
-
- *) If NETSCAPE_DBM_COMPAT is defined in EXTRA_CFLAGS then Apache
- will work with Netscape dbm files. (dbmmanage will probably not
- work however.) [Alexander Spohr <aspohr netmatic.com>] PR#444
-
- *) Add a ListenBacklog directive to control the backlog parameter
- passed to listen(). Also change the default to 511 from 512.
- [Marc Slemko]
-
- *) API: A new handler response DONE which informs apache that the
- request has been handled and it can finish off quickly, similar to
- how it handles errors. [Rob Hartill]
-
- *) Turn off chunked encoding after sending terminating chunk/footer
- so that we can't do it twice by accident. [Roy Fielding]
-
- *) mod_expire also issues Cache-Control: max-age headers.
- [Rob Hartill]
-
- *) API: Added kill_only_once option for free_proc_chain so that it won't
- aggressively try to kill off specific children. For fastcgi.
- [Stanley Gambarin <gambarin OpenMarket.com>]
-
- *) mod_auth deals with extra ':' delimited fields. [Marc Slemko]
-
- *) Added IconHeight and IconWidth to mod_dir's IndexOptions directive.
- When used together, these cause mod_dir to emit HEIGHT and WIDTH
- attributes in the FancyIndexing IMG tags. [Ken Coar]
-
- *) PORT: Sequent and SONY NEWS-OS support added. [Jim Jagielski]
-
- *) PORT: Added Windows NT support
- [Ben Laurie and Ambarish Malpani <ambarish valicert.com>]
-
-Changes with Apache 1.2.6
-
- *) mod_include when using XBitHack Full would send ETags in addition to
- sending Last-Modifieds. This is incorrect HTTP/1.1 behaviour.
- [Dean Gaudet] PR#1133
-
- *) SECURITY: When a client connects to a particular port/addr, and
- gives a Host: header ensure that the virtual host requested can
- actually be reached via that port/addr. [Ed Korthof <ed organic.com>]
-
- *) Support virtual hosts with wildcard port and/or multiple ports
- properly. [Ed Korthof <ed organic.com>]
-
- *) Fixed some case-sensitivity issues according to RFC2068.
- [Dean Gaudet]
-
- *) Set r->allowed properly in mod_asis.c, mod_dir.c, mod_info.c,
- and mod_include.c. [Dean Gaudet]
-
- *) Variable 'cwd' was being used pointlessly before being set.
- [Ken Coar] PR#1738
-
- *) SIGURG doesn't exist on all platforms.
- [Mark Andrew Heinrich <heinrich tinderbox.Stanford.EDU>]
-
- *) When an error occurs during a POST, or other operation with a
- request body, the body has to be read from the net before allowing
- a keepalive session to continue. [Roy Fielding] PR#1399
-
- *) When an error occurs in fcntl() locking suggest the user look up
- the docs for LockFile. [Dean Gaudet]
-
- *) table_set() and table_unset() did not deal correctly with
- multiple occurrences of the same key. [Stephen Scheck
- <sscheck infonex.net>, Ben Laurie] PR#1604
-
- *) send_fd_length() did not calculate total_bytes_sent properly in error
- cases. [Ben Reser <breser regnow.com>] PR#1366
-
- *) r->connection->user was allocated in the wrong pool causing corruption
- in some cases when used with mod_cern_meta. [Dean Gaudet] PR#1500
-
- *) mod_proxy was sending HTTP/1.1 responses to ftp requests by mistake.
- Also removed the auto-generated link to www.apache.org that was the
- source of so many misdirected bug reports. [Roy Fielding, Marc Slemko]
-
- *) Multiple "close" tokens may have been set in the "Connection"
- header, not an error, but a waste.
- [<Ronald.Tschalaer psi.ch>] PR#1683
-
- *) "basic" and "digest" auth tokens should be tested case-insensitive.
- [<Ronald.Tschalaer psi.ch>] PR#1599, PR#1666
-
- *) It appears the "257th byte" bug (see
- htdocs/manual/misc/known_client_problems.html#257th-byte) can happen
- at the 256th byte as well. Fixed. [Dean Gaudet]
-
- *) mod_rewrite would not handle %3f properly in some situations.
- [Ralf Engelschall]
-
- *) Apache could generate improperly chunked HTTP/1.1 responses when
- the bputc() or rputc() functions were used by modules (such as
- mod_include). [Dean Gaudet]
-
- *) #ifdef wrap a few #defines in httpd.h to make life easier on
- some ports. [Ralf Engelschall]
-
- *) Fix MPE compilation error in mod_usertrack.c. [Mark Bixby]
-
- *) Quote CC='$(CC)' to improve recurse make calls. [Martin Kraemer]
-
- *) Avoid B_ERROR redeclaration on sysvr4 systems. [Martin Kraemer]
-
-Changes with Apache 1.2.5
-
- *) SECURITY: Fix a possible buffer overflow in logresolve. This is
- only an issue on systems without a MAXDNAME define or where
- the resolver returns domain names longer than MAXDNAME. [Marc Slemko]
-
- *) Fix an improper length in an ap_snprintf call in proxy_date_canon().
- [Marc Slemko]
-
- *) Fix core dump in the ftp proxy when reading incorrectly formatted
- directory listings. [Marc Slemko]
-
- *) SECURITY: Fix possible minor buffer overflow in the proxy cache.
- [Marc Slemko]
-
- *) SECURITY: Eliminate possible buffer overflow in cfg_getline, which
- is used to read various types of files such as htaccess and
- htpasswd files. [Marc Slemko]
-
- *) SECURITY: Ensure that the buffer returned by ht_time is always
- properly null terminated. [Marc Slemko]
-
- *) SECURITY: General mod_include cleanup, including fixing several
- possible buffer overflows and a possible infinite loop. This cleanup
- was done against 1.3 code and then backported to 1.2, the result
- is a large difference (due to indentation cleanup in 1.3 code).
- Users interested in seeing a smaller set of relevant differences
- should consider comparing against src/modules/standard/mod_include.c
- from the 1.3b3 release. Non-indentation changes to mod_include
- between 1.2 and 1.3 were minimal. [Dean Gaudet, Marc Slemko]
-
- *) SECURITY: Numerous changes to mod_imap in a general cleanup
- including fixing a possible buffer overflow. This cleanup also
- was done with 1.3 code as a basis, see the previous note
- about mod_include. [Dean Gaudet]
-
- *) SECURITY: If a htaccess file can not be read due to bad
- permissions, deny access to the directory with a HTTP_FORBIDDEN.
- The previous behavior was to ignore the htaccess file if it could not
- be read. This change may make some setups with unreadable
- htaccess files stop working. PR#817 [Marc Slemko]
-
- *) SECURITY: no2slash() was O(n^2) in the length of the input.
- Make it O(n). This inefficiency could be used to mount a denial
- of service attack against the Apache server. Thanks to
- Michal Zalewski <lcamtuf boss.staszic.waw.pl> for reporting
- this. [Dean Gaudet]
-
- *) mod_include used uninitialized data for some uses of && and ||.
- [Brian Slesinsky <bslesins wired.com>] PR#1139
-
- *) mod_imap should decline all non-GET methods.
- [Jay Bloodworth <jay pathways.sde.state.sc.us>]
-
- *) suexec.c wouldn't build without -DLOG_EXEC. [Jason A. Dour]
-
- *) mod_userdir was modifying r->finfo in cases where it wasn't setting
- r->filename. Since those two are meant to be in sync with each other
- this is a bug. ["Paul B. Henson" <henson intranet.csupomona.edu>]
-
- *) mod_include did not properly handle all possible redirects from sub-
- requests. [Ken Coar]
-
- *) Inetd mode (which is buggy) uses timeouts without having setup the
- jmpbuffer. [Dean Gaudet] PR#1064
-
- *) Work around problem under Linux where a child will start looping
- reporting a select error over and over.
- [Rick Franchuk <rickf transpect.net>] PR#1107
-
-Changes with Apache 1.2.4
-
- *) The ProxyRemote change in 1.2.3 introduced a bug resulting in the proxy
- always making requests with the full-URI instead of just the URI path.
- [Marc Slemko, Roy Fielding]
-
- *) Add -lm for AIX versions >= 4.2 to allow Apache to link properly
- on this platform. [Marc Slemko]
-
-Changes with Apache 1.2.3
-
- *) The request to a remote proxy was mangled if it was generated as the
- result of a ProxyPass directive. URL schemes other than http:// were not
- supported when ProxyRemote was used. PR#260, PR#656, PR#699, PR#713,
- PR#812 [Lars Eilebrecht]
-
- *) Fixed proxy-pass-through feature of mod_rewrite; Added error logging
- information for case where proxy module is not available. [Marc Slemko]
-
- *) Force proxy to always respond as HTTP/1.0, which it was failing to
- do for errors and cached responses. [Roy Fielding]
-
- *) PORT: Improved support for ConvexOS 11. [Jeff Venters]
-
-Changes with Apache 1.2.2 [not released]
-
- *) Fixed another long-standing bug in sub_req_lookup_file where it would
- happily skip past access checks on subdirectories looked up with relative
- paths. (It's used by mod_dir, mod_negotiation, and mod_include.)
- [Dean Gaudet]
-
- *) Add lockfile name to error message printed out when
- USE_FLOCK_SERIALIZED_ACCEPT is defined.
- [Marc Slemko]
-
- *) Enhanced the chunking and error handling inside the buffer functions.
- [Dean Gaudet, Roy Fielding]
-
- *) When merging the main server's <Directory> and <Location> sections into
- a vhost, put the main server's first and the vhost's second. Otherwise
- the vhost can't override the main server. [Dean Gaudet] PR#717
-
- *) The <Directory> code would merge and re-merge the same section after
- a match was found, possibly causing problems with some modules.
- [Dean Gaudet]
-
- *) Fixed an infinite loop in mod_imap for references above the server root.
- [Dean Gaudet] PR#748
-
- *) mod_include cleanup showed that handle_else was being used to handle
- endif. It didn't cause problems, but it was cleaned up too.
- [Howard Fear]
-
- *) Last official synchronization of mod_rewrite with author version (because
- mod_rewrite is now directly developed by the author at the Apache Group):
- o added diff between mod_rewrite 3.0.6+ and 3.0.9
- minus WIN32/NT stuff, but plus copyright removement.
- In detail:
- - workaround for detecting infinite rewriting loops
- - fixed setting of env vars when "-" is used as subst string
- - fixed forced response code on redirects (PR#777)
- - fixed cases where r->args is ""
- - kludge to disable locking on pipes under braindead SunOS
- - fix for rewritelog in cases where remote hostname is unknown
- - fixed totally damaged request_rec walk-back loop
- o remove static from local data and add static to global ones.
- o replaced ugly proxy finding stuff by simple
- find_linked_module("mod_proxy") call.
- o added missing negation char on rewritelog()
- o fixed a few comment typos
- [Ralf S. Engelschall]
-
- *) Anonymous_LogEmail was logging on each subrequest.
- [Dean Gaudet] PR#421, PR#868
-
- *) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
- begin with. "nokeepalive" now works for HTTP/1.1 clients. Added
- "downgrade-1.0" which causes Apache to pretend it received a 1.0.
- Additionally mod_browser now triggers during translate_name to workaround
- a deficiency in the header_parse phase.
- [Dean Gaudet] PR#875
-
- *) get_client_block() returns wrong length if policy is
- REQUEST_CHUNKED_DECHUNK.
- [Kenichi Hori <ken d2.bs1.fc.nec.co.jp>] PR#815
-
- *) Properly treat <files> container like other containers in mod_info.
- [Marc Slemko] PR#848
-
- *) The proxy didn't treat the "Host:" keyword of the host header as case-
- insensitive. The proxy would corrupt the first line of a response from
- an HTTP/0.9 server. [Kenichi Hori <ken d2.bs1.fc.nec.co.jp>] PR#813,814
-
- *) mod_include would log some bogus values occasionally.
- [Skip Montanaro <skip calendar.com>, Marc Slemko] PR#797
-
- *) PORT: The slack fd changes in 1.2.1 introduced a problem with SIGHUP
- under Solaris 2.x (up through 2.5.1). It has been fixed.
- [Dean Gaudet] PR#832
-
- *) API: In HTTP/1.1, whether or not a request message contains a body
- is independent of the request method and based solely on the presence
- of a Content-Length or Transfer-Encoding. Therefore, our default
- handlers need to be prepared to read a body even if they don't know
- what to do with it; otherwise, the body would be mistaken for the
- next request on a persistent connection. discard_request_body()
- has been added to take care of that. [Roy Fielding] PR#378
-
- *) API: Symbol APACHE_RELEASE provides a numeric form of the Apache
- release version number, such that it always increases along the
- same lines as our source code branching. [Roy Fielding]
-
- *) Minor oversight on multiple variants fixed. [Paul Sutton] PR#94
-
-Changes with Apache 1.2.1
-
- *) SECURITY: Don't serve file system objects unless they are plain files,
- symlinks, or directories. This prevents local users from using pipes
- or named sockets to invoke programs for an extremely crude form of
- CGI. [Dean Gaudet]
-
- *) SECURITY: HeaderName and ReadmeName were settable in .htaccess and
- could contain "../" allowing a local user to "publish" any file on
- the system. No slashes are allowed now. [Dean Gaudet]
-
- *) SECURITY: It was possible to violate the symlink Options using mod_dir
- (headers, readmes, titles), mod_negotiation (type maps), or
- mod_cern_meta (meta files). [Dean Gaudet]
-
- *) SECURITY: Apache will refuse to run as "User root" unless
- BIG_SECURITY_HOLE is defined at compile time. [Dean Gaudet]
-
- *) CONFIG: If a symlink pointed to a directory then it would be disallowed
- if it contained a .htaccess disallowing symlinks. This is contrary
- to the rule that symlink permissions are tested with the symlink
- options of the parent directory. [Dean Gaudet] PR#353
-
- *) CONFIG: The LockFile directive can be used to place the serializing
- lockfile in any location. It previously defaulted to /usr/tmp/htlock.
- [Somehow it took four of us: Randy Terbush, Jim Jagielski, Dean Gaudet,
- Marc Slemko]
-
- *) Request processing now retains state of whether or not the request
- body has been read, so that internal redirects and subrequests will
- not try to read it twice (and block). [Roy Fielding]
-
- *) Add a placeholder in modules/Makefile to avoid errors with certain
- makes. [Marc Slemko]
-
- *) QUERY_STRING was unescaped in mod_include, it shouldn't be.
- [Dean Gaudet] PR#644
-
- *) mod_include was not properly changing the current directory.
- [Marc Slemko] PR#742
-
- *) Attempt to work around problems with third party libraries that do not
- handle high numbered descriptors (examples include bind, and
- solaris libc). On all systems apache attempts to keep all permanent
- descriptors above 15 (called the low slack line). Solaris users
- can also benefit from adding -DHIGH_SLACK_LINE=256 to EXTRA_CFLAGS
- which keeps all non-FILE * descriptors above 255. On all systems
- this should make supporting large numbers of vhosts with many open
- log files more feasible. If this causes trouble please report it,
- you can disable this workaround by adding -DNO_SLACK to EXTRA_CFLAGS.
- [Dean Gaudet] various PRs
-
- *) Related to the last entry, network sockets are now opened before
- log files are opened. The only known case where this can cause
- problems is under Solaris with many virtualhosts and many Listen
- directives. But using -DHIGH_SLACK_LINE=256 described above will
- work around this problem. [Dean Gaudet]
-
- *) USE_FLOCK_SERIALIZED_ACCEPT is now default for FreeBSD, A/UX, and
- SunOS 4.
-
- *) Improved unix error response logging. [Marc Slemko]
-
- *) Update mod_rewrite from 3.0.5 to 3.0.6. New ruleflag
- QSA=query_string_append. Also fixed a nasty bug in per-dir context:
- when a URL http://... was used in conjunction with a special
- redirect flag, e.g. R=permanent, the permanent status was lost.
- [Ronald Tschalaer <Ronald.Tschalaer psi.ch>, Ralf S. Engelschall]
-
- *) If an object has multiple variants that are otherwise equal Apache
- would prefer the last listed variant rather than the first.
- [Paul Sutton] PR#94
-
- *) "make clean" at the top level now removes *.o. [Dean Gaudet] PR#752
-
- *) mod_status dumps core in inetd mode. [Marc Slemko and Roy Fielding]
- PR#566
-
- *) pregsub had an off-by-1 in its error checking code. [Alexei Kosut]
-
- *) PORT: fix rlim_t problems with AIX 4.2. [Marc Slemko] PR#333
-
- *) PORT: Update UnixWare support for 2.1.2.
- [Lawrence Rosenman <ler lerctr.org>] PR#511
-
- *) PORT: NonStop-UX [Joachim Schmitz <schmitz_joachim tandem.com>] PR#327
-
- *) PORT: Update ConvexOS support for 11.5.
- [David DeSimone <fox convex.com>] PR#399
-
- *) PORT: Support for DEC cc compiler under ULTRIX.
- ["P. Alejandro Lopez-Valencia" <alejolo ideam.gov.co>] PR#388
-
- *) PORT: Support for Maxion/OS SVR4.2 Real Time Unix. [no name given] PR#383
-
- *) PORT: Workaround for AIX 3.x compiler bug in http_bprintf.c.
- [Marc Slemko] PR#725
-
- *) PORT: fix problem compiling http_bprintf.c with gcc under SCO
- [Marc Slemko] PR#695
-
-Changes with Apache 1.2
-
-Changes with Apache 1.2b11
-
- *) Fixed open timestamp fd in proxy_cache.c [Chuck Murcko]
-
- *) Added undocumented perl SSI mechanism for -DUSE_PERL_SSI and mod_perl.
- [Doug MacEachern, Rob Hartill]
-
- *) Proxy needs to use hard_timeout instead of soft_timeout when it is
- reading from one buffer and writing to another, at least until it has
- a custom timeout handler. [Roy Fielding and Petr Lampa]
-
- *) Fixed problem on IRIX with servers hanging in IdentityCheck,
- apparently due to a mismatch between sigaction and setjmp.
- [Roy Fielding] PR#502
-
- *) Log correct status code if we timeout before receiving a request (408)
- or if we received a request-line that was too long to process (414).
- [Ed Korthof and Roy Fielding] PR#601
-
- *) Virtual hosts with the same ServerName, but on different ports, were
- not being selected properly. [Ed Korthof]
-
- *) Added code to return the requested IP address from proxy_host2addr()
- if gethostbyaddr() fails due to reverse DNS lookup problems. Original
- change submitted by Jozsef Hollosi <hollosi sbcm.com>.
- [Chuck Murcko] PR#614
-
- *) If multiple requests on a single connection are used to retrieve
- data from different virtual hosts, the virtual host list would be
- scanned starting with the most recently used VH instead of the first,
- causing most virtual hosts to be ignored.
- [Paul Sutton and Martin Mares] PR#610
-
- *) The OS/2 handling of process group was broken by a porting patch for
- MPE, so restored prior code for OS/2. [Roy Fielding and Garey Smiley]
-
- *) Inherit virtual server port from main server if none (or "*") is
- given for VirtualHost. [Dean Gaudet] PR#576
-
- *) If the lookup for a DirectoryIndex name with content negotiation
- has found matching variants, but none are acceptable, return the
- negotiation result if there are no more DirectoryIndex names to lookup.
- [Petr Lampa and Roy Fielding]
-
- *) If a soft_timeout occurs after keepalive is set, then the main child
- loop would try to read another request even though the connection
- has been aborted. [Roy Fielding]
-
- *) Configure changes: Allow for whitespace at the start of a
- Module declaration. Also, be more understanding about the
- CC=/OPTIM= format in Configuration. Finally, fix compiler
- flags if using HP-UX's cc compiler. [Jim Jagielski]
-
- *) Subrequests and internal redirects now inherit the_request from the
- original request-line. [Roy Fielding]
-
- *) Test for error conditions before creating output header fields, since
- we don't want the error message to include those fields. Likewise,
- reset the content_language(s) and content_encoding of the response
- before generating or redirecting to an error message, since the new
- message will have its own Content-* definitions. [Dean Gaudet]
-
- *) Restored the semantics of headers_out (headers sent only with 200..299
- and 304 responses) and err_headers_out (headers sent with all responses).
- Avoid the overhead of copying tables if err_headers_out is empty
- (the usual case). [Roy Fielding]
-
- *) Fixed a couple places where a check for the default Content-Type was
- not properly checking both the value configured by the DefaultType
- directive and the DEFAULT_TYPE symbol in httpd.h. Changed the value
- of DEFAULT_TYPE to match the documented default (text/plain).
- [Dean Gaudet] PR#506
-
- *) Escape the HTML-sensitive characters in the Request-URI that is
- output for each child by mod_status. [Dean Gaudet and Ken Coar] PR#501
-
- *) Properly initialize the flock structures used by the mutex locking
- around accept() when USE_FCNTL_SERIALIZED_ACCEPT is defined.
- [Marc Slemko]
-
- *) The method for determining PATH_INFO has been restored to the pre-1.2b
- (and NCSA httpd) definition wherein it was the extra path info beyond
- the CGI script filename. The environment variable FILEPATH_INFO has
- been removed, and instead we supply the original REQUEST_URI to any
- script that wants to be Apache-specific and needs the real URI path.
- This solves a problem with existing scripts that use extra path info
- in the ScriptAlias directive to pass options to the CGI script.
- [Roy Fielding]
-
- *) The _default_ change in 1.2b10 will change the behaviour on configs
- that use multiple Listen statements for listening on multiple ports.
- But that change is necessary to make _default_ consistent with other
- forms of <VirtualHost>. It requires such configs to be modified
- to use <VirtualHost _default_:*>. The documentation has been
- updated. [Dean Gaudet] PR#530
-
- *) If an ErrorDocument CGI script is used to respond to an error
- generated by another CGI script which has already read the message
- body of the request, the server would block trying to read the
- message body again. [Rob Hartill]
-
- *) signal() replacement conflicted with a define on QNX (and potentially
- other platforms). Fixed. [Ben Laurie] PR#512
-
-Changes with Apache 1.2b10
-
- *) Allow HTTPD_ROOT, SERVER_CONFIG_FILE, DEFAULT_PATH, and SHELL_PATH
- to be configured via -D in Configuration. [Dean Gaudet] PR#449
-
- *) <VirtualHost _default_:portnum> didn't work properly. [Dean Gaudet]
-
- *) Added prototype for mktemp() for SUNOS4 [Marc Slemko]
-
- *) In mod_proxy.c, check return values for proxy_host2addr() when reading
- config, in case the hostent struct returned is trash.
- [Chuck Murcko] PR #491
-
- *) Fixed the fix in 1.2b9 for parsing URL query info into args for CGI
- scripts. [Dean Gaudet, Roy Fielding, Marc Slemko]
-
-Changes with Apache 1.2b9 [never announced]
-
- *) Reset the MODULE_MAGIC_NUMBER to account for the unsigned port
- changes and in anticipation of 1.2 final release. [Roy Fielding]
-
- *) Fix problem with scripts not receiving a SIGPIPE when client drops
- the connection (e.g., when user presses Stop). Apache will now stop
- trying to send a message body immediately after an error from write.
- [Roy Fielding and Nathan Kurz] PR#335
-
- *) Rearrange Configuration.tmpl so that mod_rewrite has higher priority
- than mod_alias, and mod_alias has higher priority than mod_proxy;
- rearranged other modules to enhance understanding of their purpose
- and relative order (and maybe even reduce some overhead).
- [Roy Fielding and Sameer Parekh]
-
- *) Fix graceful restart. Eliminate many signal-related race
- conditions in both forms of restart, and in SIGTERM. See
- htdocs/manual/stopping.html for details on stopping and
- restarting the parent. [Dean Gaudet]
-
- *) Fix memory leaks in mod_rewrite, mod_browser, mod_include. Tune
- memory allocator to avoid a behaviour that required extra blocks to
- be allocated. [Dean Gaudet]
-
- *) Allow suexec to access files relative to current directory but not
- above. (Excluding leading / or any .. directory.) [Ken Coar]
- PR#269, 319, 395
-
- *) Fix suexec segfault when group doesn't exist. [Gregory Neil Shapiro]
- PR#367, 368, 354, 453
-
- *) Fix the above fix: if suexec is enabled, avoid destroying r->url
- while obtaining the /~user and save the username in a separate data
- area so that it won't be overwritten by the call to getgrgid(), and
- fix some misuse of the pool string allocation functions. Also fixes
- a general problem with parsing URL query info into args for CGI scripts.
- [Roy Fielding] PR#339, 367, 354, 453
-
- *) Fix IRIX warning about bzero undefined. [Marc Slemko]
-
- *) Fix problem with <Directory proxy:...>. [Martin Kraemer] PR#271
-
- *) Corrected spelling of "authoritative". AuthDBAuthoratative became
- AuthDBAuthoritative. [Marc Slemko] PR#420
-
- *) MaxClients should be at least 1. [Lars Eilebrecht] PR#375
-
- *) The default handler now logs invalid methods or URIs (i.e. PUT on an
- object that can't be PUT, or FOOBAR for some method FOOBAR that
- apache doesn't know about at all). Log 404s that occur in mod_include.
- [Paul Sutton, John Van Essen]
-
- *) If a soft timeout (or lingerout) occurs while trying to flush a
- buffer or write inside buff.c or fread'ing from a CGI's output,
- then the timeout would be ignored. [Roy Fielding] PR#373
-
- *) Work around a bug in Netscape Navigator versions 2.x, 3.x and 4.0b2's
- parsing of headers. If the terminating empty-line CRLF occurs starting
- at the 256th or 257th byte of output, then Navigator will think a normal
- image is invalid. We are guessing that this is because their initial
- read of a new request uses a 256 byte buffer. We check the bytes written
- so far and, if we are about to tickle the bug, we instead insert a
- padding header of eminent bogosity. [Roy Fielding and Dean Gaudet] PR#232
-
- *) Fixed SIGSEGV problem when a DirectoryIndex file is also the source
- of an external redirection. [Roy Fielding and Paul Sutton]
-
- *) Configure would create a broken Makefile if the configuration file
- contained a commented-out Rule. [Roy Fielding]
-
- *) Promote per_dir_config and subprocess_env from the subrequest to the
- main request in mod_negotiation. In particular this fixes a bug
- where <Files> sections wouldn't properly apply to negotiated content.
- [Dean Gaudet]
-
- *) Fix a potential deadlock in mod_cgi script_err handling.
- [Ralf S. Engelschall]
-
- *) rotatelogs zero-pads the logfile names to improve alphabetic sorting.
- [Mitchell Blank Jr]
-
- *) Updated mod_rewrite to 3.0.4: Fixes HTTP redirects from within
- .htaccess files because the RewriteBase was not replaced correctly.
- Updated mod_rewrite to 3.0.5: Fixes problem with rewriting inside
- <Directory> sections missing a trailing /. [Ralf S. Engelschall]
-
- *) Clean up Linux settings in conf.h by detecting 2.x versus 1.x. For
- 1.x the settings are those of pre-1.2b8. For 2.x we include
- USE_SHMGET_SCOREBOARD (scoreboard in shared memory rather than file) and
- HAVE_SYS_RESOURCE_H (enable the RLimit commands).
- [Dean Gaudet] PR#336, PR#340
-
- *) Redirect did not preserve ?query_strings when present in the client's
- request. [Dean Gaudet]
-
- *) Configure was finding non-modules on EXTRA_LIBS. [Frank Cringle] PR#380
-
- *) Use /bin/sh5 on ULTRIX. [P. Alejandro Lopez-Valencia] PR#369
-
- *) Add UnixWare compile/install instructions. [Chuck Murcko]
-
- *) Add mod_example (illustration of API techniques). [Ken Coar]
-
- *) Add macro for memmove to conf.h for SUNOS4. [Marc Slemko]
-
- *) Improve handling of directories when filenames have spaces in them.
- [Chuck Murcko]
-
- *) For hosts with multiple IP addresses, try all additional addresses if
- necessary to get a connect. Fail only if hostent address list is
- exhausted. [Chuck Murcko]
-
- *) More signed/unsigned port fixes. [Dean Gaudet]
-
- *) HARD_SERVER_LIMIT can be defined in the Configuration file now.
- [Dean Gaudet]
-
-Changes with Apache 1.2b8
-
- *) suexec.c doesn't close the log file, allowing CGIs to continue writing
- to it. [Marc Slemko]
-
- *) The addition of <Location> and <File> directives made the
- sub_req_lookup_simple() function bogus, so we now handle
- the special cases directly. [Dean Gaudet]
-
- *) We now try to log where the server is dumping core when a fatal
- signal is received. [Ken Coar]
-
- *) Improved lingering_close by adding a special timeout, removing the
- spurious log messages, removing the nonblocking settings (they
- are not needed with the better timeout), and adding commentary
- about the NO_LINGCLOSE and USE_SO_LINGER issues. NO_LINGCLOSE is
- now the default for SunOS4, UnixWare, NeXT, and IRIX. [Roy Fielding]
-
- *) Send error messages about setsockopt failures to the server error
- log instead of stderr. [Roy Fielding]
-
- *) Fix loopholes in proxy cache expiry vis a vis alarms. [Brian Moore]
-
- *) Stopgap solution for CGI 3-second delay with server-side includes: if
- processing a subrequest, allocate memory from r->main->pool instead
- of r->pool so that we can avoid waiting for free_proc_chain to cleanup
- in the middle of an SSI request. [Dean Gaudet] PR #122
-
- *) Fixed status of response when POST is received for a nonexistent URL
- (was sending 405, now 404) and when any method is sent with a
- full-URI that doesn't match the server and the server is not acting
- as a proxy (was sending 501, now 403). [Roy Fielding]
-
- *) Host port changed to unsigned short. [Ken Coar] PR #276
-
- *) Fix typo in command definition of AuthAuthoritative. [Ken Coar] PR #246
-
- *) Defined USE_SHMGET_SCOREBOARD for shared memory on Linux. [Dean Gaudet]
-
- *) Report extra info from errno with many errors that cause httpd to exit.
- spawn_child, popenf, and pclosef now have valid errno returns in the
- event of an error. Correct problems where errno was stomped on
- before being reported. [Dean Gaudet]
-
- *) In the proxy, if the cache filesystem was full, garbage_coll() was
- never called, and thus the filesystem would remain full indefinitely.
- We now also remove incomplete cache files left if the origin server
- didn't send a Content-Length header and either the client has aborted
- transfer or bwrite() to client has failed. [Petr Lampa]
-
- *) Fixed the handling of module and script-added header fields.
- Improved the interface for sending header fields and reduced
- the duplication of code between sending okay responses and errors.
- We now always send both headers_out and err_headers_out, and
- ensure that the server-reserved fields are not being overridden,
- while not overriding those that are not reserved. [Roy Fielding]
-
- *) Moved transparent content negotiation fields to err_headers_out
- to reflect above changes. [Petr Lampa]
-
- *) Fixed the determination of whether or not we should make the
- connection persistent for all of the cases where some other part
- of the server has already indicated that we should not. Also
- improved the ordering of the test so that chunked encoding will
- be set whenever it is desired instead of only when KeepAlive
- is enabled. Added persistent connection capability for most error
- responses (those that do not indicate a bad input stream) when
- accessed by an HTTP/1.1 client. [Roy Fielding]
-
- *) Added missing timeouts for sending header fields, error responses,
- and the last chunk of chunked encoding, each of which could have
- resulted in a process being stuck in write forever. Using soft_timeout
- requires that the sender check for an aborted connection rather than
- continuing after an EINTR. Timeouts that used to be initiated before
- send_http_header (and never killed) are now initiated only within or
- around the routines that actually do the sending, and not allowed to
- propagate above the caller. [Roy Fielding]
-
- *) mod_auth_anon required an @ or a . in the email address, not both.
- [Dirk vanGulik]
-
- *) per_dir_defaults weren't set correctly until directory_walk for
- name-based vhosts. This fixes an obscure bug with the wrong config
- info being used for vhosts that share the same ip as the server.
- [Dean Gaudet]
-
- *) Improved generation of modules/Makefile to be more generic for
- new module directories. [Ken Coar, Chuck Murcko, Roy Fielding]
-
- *) Generate makefile dependency for Configuration based on the actual
- name given when running the Configure process. [Dean Gaudet]
-
- *) Fixed problem with vhost error log not being set prior to
- initializing virtual hosts. [Dean Gaudet]
-
- *) Fixed infinite loop when a trailing slash is included after a type map
- file URL (extra path info). [Petr Lampa]
-
- *) Fixed server status updating of per-connection counters. [Roy Fielding]
-
- *) Add documentation for DNS issues (reliability and security), and try
- to explain the virtual host matching process. [Dean Gaudet]
-
- *) Try to continue gracefully by disabling the vhost if a DNS lookup
- fails while parsing the configuration file. [Dean Gaudet]
-
- *) Improved calls to setsockopt. [Roy Fielding]
-
- *) Negotiation changes: Don't output empty content-type in variant list;
- Output charset in variant list; Return sooner from handle_multi() if
- no variants found; Add handling of '*' wildcard in Accept-Charset.
- [Petr Lampa and Paul Sutton]
-
- *) Fixed overlaying of request/sub-request notes and headers in
- mod_negotiation. [Dean Gaudet]
-
- *) If two variants' charset quality are equal and one is the default
- charset (iso-8859-1), then prefer the variant that was specifically
- listed in Accept-Charset instead of the default. [Petr Lampa]
-
- *) Memory allocation problem in push_array() -- it would corrupt memory
- when nalloc==0. [Kai Risku <krisku tf.hut.fi> and Roy Fielding]
-
- *) invoke_handler() doesn't handle mime arguments in content-type
- [Petr Lampa] PR#160
-
- *) Reduced IdentityCheck timeout to 30 seconds, as per RFC 1413 minimum.
- [Ken Coar]
-
- *) Fixed problem with ErrorDocument not working for virtual hosts
- due to one of the performance changes in 1.2b7. [Dean Gaudet]
-
- *) Log an error message if we get a request header that is too long,
- since it may indicate a buffer overflow attack. [Marc Slemko]
-
- *) Made is_url() allow "[-.+a-zA-Z0-9]+:" as a valid scheme and
- not reject URLs without a double-slash, as per RFC2068 section 3.2.
- [Ken Coar] PR #146, #187
-
- *) Added table entry placeholder for new header_parser callback
- in all of the distributed modules. [Ken Coar] PR #191
-
- *) Allow for cgi files without the .EXE extension on them under OS/2.
- [Garey Smiley] PR #59
-
- *) Fixed error message when resource is not found and URL contains
- path info. [Petr Lampa and Dean Gaudet] PR #40
-
- *) Fixed user and server confusion over what should be a virtual host
- and what is the main server, resulting in access to something
- other than the name defined in the virtualhost directive (but
- with the same IP address) failing. [Dean Gaudet]
-
- *) Updated mod_rewrite to version 3.0.2, which: fixes compile error on
- AIX; improves the redirection stuff to enable the users to generally
- redirect to http, https, gopher and ftp; added TIME variable for
- RewriteCond which expands to YYYYMMDDHHMMSS strings and added the
- special patterns >STRING, <STRING and =STRING to RewriteCond, which
- can be used in conjunction with %{TIME} or other variables to create
- time-dependent rewriting rules. [Ralf S. Engelschall]
-
- *) bpushfd() no longer notes cleanups for the file descriptors it is handed.
- Module authors may need to adjust their code for proper cleanup to take
- place (that is, call note_cleanups_for_fd()). This change fixes problems
- with file descriptors being erroneously closed when the proxy module was
- in use. [Ben Laurie]
-
- *) Fix bug in suexec reintroduced by changes in 1.2b7 which allows
- initgroups() to hose the group information needed for later
- comparisons. [Randy Terbush]
-
- *) Remove unnecessary call to va_end() in create_argv() which
- caused a SEGV on some systems.
-
- *) Use proper MAXHOSTNAMELEN symbol for limiting length of server name.
- [Dean Gaudet]
-
- *) Clear memory allocated for listeners. [Randy Terbush]
-
- *) Improved handling of IP address as a virtualhost address and
- introduced "_default_" as a synonym for the default vhost config.
- [Dean Gaudet] PR #212
-
-Changes with Apache 1.2b7
-
- *) Port to UXP/DS(V20) [Toshiaki Nomura <nom yk.fujitsu.co.jp>]
-
- *) unset Content-Length if chunked (RFC-2068) [Petr Lampa]
-
- *) mod_negotiation fixes [Petr Lampa] PR#157, PR#158, PR#159
- - replace protocol response numbers with symbols
- - save variant-list into main request notes
- - free allocated memory from subrequests
- - merge notes, headers_out and err_headers_out
-
- *) changed status check mask in proxy_http.c from "HTTP/#.# ### *" to
- "HTTP/#.# ###*" to be more lenient about what we accept.
- [Chuck Murcko]
-
- *) more proxy FTP bug fixes:
- - Changed send_dir() to remove user/passwd from displayed URL.
- - Changed login error messages to be more descriptive.
- - remove setting of SO_DEBUG socket option
- - Make ftp_getrc() more lenient about multiline responses,
- specifically, 230 responses which don't have continuation 230-
- on each line). These seem to be all NT FTP servers, and while
- perhaps questionable, they appear to be legal by RFC 959.
- - Add missing kill_timeout() after transfer to user completes.
- [Chuck Murcko]
-
- *) Fixed problem where a busy server could hang when restarting
- after being sent a SIGHUP due to child processes not exiting.
- [Marc Slemko]
-
- *) Modify mod_include escaping so a '\' only signifies an escaped
- character if the next character is one that needs
- escaping. [Ben Laurie]
-
- *) Eliminated possible infinite loop in mod_imap when relative URLs are
- used with a 'base' directive that does not have a '/' in it.
- [Marc Slemko, reported by Onno Witvliet <onno tc.hsa.nl>]
-
- *) Reduced the default timeout from 1200 seconds to 300, and the
- one in the sample configfile from 400 to 300. [Marc Slemko]
-
- *) Stop vbprintf from crashing if given a NULL string pointer;
- print (null) instead. [Ken Coar]
-
- *) Don't disable Nagle algorithm if system doesn't have TCP_NODELAY.
- [Marc Slemko and Roy Fielding]
-
- *) Fixed problem with mod_cgi-generated internal redirects trying to
- read the request message-body twice. [Archie Cobbs and Roy Fielding]
-
- *) Reduced timeout on lingering close, removed possibility of a blocked
- read causing the child to hang, and stopped logging of errors if
- the socket is not connected (reset by client). [Roy Fielding]
-
- *) Rearranged main child loop to remove duplication of code in
- select/accept and keep-alive requests, fixed several bugs regarding
- checking scoreboard_image for exit indication and failure to
- account for all success conditions and trap all error conditions,
- prevented multiple flushes before closing the socket; close the entire
- socket buffer instead of just one descriptor, prevent logging of
- EPROTO and ECONNABORTED on platforms where supported, and generally
- improved readability. [Roy Fielding]
-
- *) Extensive performance improvements. Cleaned up inefficient use of
- auto initializers, multiple is_matchexp calls on a static string,
- and excessive merging of response_code_strings. [Dean Gaudet]
-
- *) Added double-buffering to mod_include to improve performance on
- server-side includes. [Marc Slemko]
-
- *) Several fixes for suexec wrapper. [Randy Terbush]
- - Make wrapper work for files on NFS filesystem.
- - Fix portability problem of MAXPATHLEN.
- - Fix array overrun problem in clean_env().
- - Fix allocation of PATH environment variable
-
- *) Removed extraneous blank line is description of mod_status chars.
- [Kurt Kohler]
-
- *) Logging of errors from the call_exec routine simply went nowhere,
- since the logfile fd has been closed, so now we send them to stderr.
- [Harald T. Alvestrand]
-
- *) Fixed core dump when DocumentRoot is a CGI.
- [Ben Laurie, reported by <geddis tesserae.com>]
-
- *) Fixed potential file descriptor leak in mod_asis; updated it and
- http_core to use pfopen/pfclose instead of fopen/fclose.
- [Randy Terbush and Roy Fielding]
-
- *) Fixed handling of unsigned ints in ap_snprintf() on some chips such
- as the DEC Alpha which is 64-bit but uses 32-bit ints.
- [Dean Gaudet and Ken Coar]
-
- *) Return a 302 response code to the client when sending a redirect
- due to a missing trailing '/' on a directory instead of a 301; now
- it is cacheable. [Markus Gyger]
-
- *) Fix condition where, if a bad directive occurs in .htaccess, and
- sub_request() goes first to this directory, then log_reason() will
- SIGSEGV because it doesn't have initialized r->per_dir_config.
- [PR#162 from Petr Lampa, fix by Marc Slemko and Dean Gaudet]
-
- *) Fix handling of lang_index in is_variant_better(). This was
- causing problems which resulted in the server sending the
- wrong language document in some cases. [Petr Lampa]
-
- *) Remove free() from clean_env() in suexec wrapper. This was nuking
- the clean environment on some systems.
-
- *) Tweak byteserving code (e.g. serving PDF files) to work around
- bugs in Netscape Navigator and Microsoft Internet Explorer.
- Emit Content-Length header when sending multipart/byteranges.
- [Alexei Kosut]
-
- *) Port to HI-UX/WE2. [Nick Maclaren]
-
- *) Port to HP MPE operating system for HP 3000 machines
- [Mark Bixby <markb cccd.edu>]
-
- *) Fixed bug which caused a segmentation fault if only one argument
- given to RLimit* directives. [Ed Korthof]
-
- *) Continue persistent connection after 204 or 304 response. [Dean Gaudet]
-
- *) Improved buffered output to the client by delaying the flush decision
- until the BUFF code is actually about to read the next request.
- This fixes a problem introduced in 1.2b5 with clients that send
- an extra CRLF after a POST request. Also improved chunked output
- performance by combining writes using writev() and removing as
- many bflush() calls as possible. NOTE: Platforms without writev()
- must add -DNO_WRITEV to the compiler CFLAGS, either in Configuration
- or Configure, unless we have already done so. [Dean Gaudet]
-
- *) Fixed mod_rewrite bug which truncated the rewritten URL [Marc Slemko]
-
- *) Fixed mod_info output corruption bug introduced by buffer overflow
- fixes. [Dean Gaudet]
-
- *) Fixed http_protocol to correctly output all HTTP/1.1 headers, including
- for the special case of a 304 response. [Paul Sutton]
-
- *) Improved handling of TRACE method by bypassing normal method handling
- and header parsing routines; fixed Allow response to always allow TRACE.
- [Dean Gaudet]
-
- *) Fixed compiler warnings in the regex library. [Dean Gaudet]
-
- *) Cleaned-up some of the generated HTML. [Ken Coar]
-
-Changes with Apache 1.2b6
-
- *) Allow whitespace in imagemap mapfile coordinates. [Marc Slemko]
-
- *) Fix typo introduced in fix for potential infinite loop around
- accept() in child_main(). This change caused the rev to 1.2b6.
- 1.2b5 was never a public beta.
-
-Changes with Apache 1.2b5
-
- *) Change KeepAlive semantics (On|Off instead of a number), add
- MaxKeepAliveRequests directive. [Alexei Kosut]
-
- *) Various NeXT compilation patches, as well as a change in
- regex/regcomp.c since that file also used a NEXT define.
- [Andreas Koenig]
-
- *) Allow * to terminate the end of a directory match in mod_dir.
- Allows /~* to match for both /~joe and /~joe/. [David Bronder]
-
- *) Don't call can_exec() if suexec_enabled. Calling this requires
- scripts executed by the suexec wrapper to be world executable, which
- defeats one of the advantages of running the wrapper. [Randy Terbush]
-
- *) Portability Fix: IRIX complained with 'make clean' about *pure* (removed)
- [Jim Jagielski]
-
- *) Migration from sprintf() to snprintf() to avoid buffer
- overflows. [Marc Slemko]
-
- *) Provide portable snprintf() implementation (ap_snprintf)
- as well as *cvt family. [Jim Jagielski]
-
- *) Portability Fix: NeXT lacks unistd.h so we wrap it's inclusion
- [Jim Jagielski]
-
- *) Remove mod_fastcgi.c from the distribution. This module appears
- to be maintained more through the Open Market channels and should
- continue to be easily available at http://www.fastcgi.com/
-
- *) Fixed bug in modules/Makefile that wouldn't allow building in more
- than one subdirectory (or cleaning, either). [Jeremy Laidman]
-
- *) mod_info assumed that the config files were relative to ServerRoot.
- [Ken the Rodent]
-
- *) CGI scripts called as an error document resulting from failed
- CGI execution would hang waiting for POST'ed data. [Rob Hartill]
-
- *) Log reason when mod_dir returns access HTTP_FORBIDDEN
- [Ken the Rodent]
-
- *) Properly check errno to prevent display of a directory index
- when server receives a long enough URL to confuse stat().
- [Marc Slemko]
-
- *) Several security enhancements to suexec wrapper. It is _highly_
- recommended that previously installed versions of the wrapper
- be replaced with this version. [Randy Terbush, Jason Dour]
-
- - ~user execution now properly restricted to ~user's home
- directory and below.
- - execution restricted to UID/GID > 100
- - restrict passed environment to known variables
- - call setgid() before initgroups() (portability fix)
- - remove use of setenv() (portability fix)
-
- *) Add HTTP/1.0 response forcing. [Ben Laurie]
-
- *) Add access control via environment variables. [Ben Laurie]
-
- *) Add rflush() function. [Alexei Kosut]
-
- *) remove duplicate pcalloc() call in new_connection().
-
- *) Fix incorrect comparison which could allow number of children =
- MaxClients + 1 if less than HARD_SERVER_LIMIT. Also fix potential
- problem if StartServers > HARD_SERVER_LIMIT. [Ed Korthof]
-
- *) Updated support for OSes (MachTen, ULTRIX, Paragon, ISC, OpenBSD
- AIX PS/2, CONVEXOS. [Jim Jagielski]
-
- *) Replace instances of inet_ntoa() with inet_addr() for ProxyBlock.
- It's more portable. [Martin Kraemer]
-
- *) Replace references to make in Makefile.tmpl with $(MAKE).
- [Chuck Murcko]
-
- *) Add ProxyBlock directive w/IP address caching. Add IP address
- caching to NoCache directive as well. ProxyBlock works with all
- handlers; NoCache now also works with FTP for anonymous logins.
- Still more code cleanup. [Chuck Murcko]
-
- *) Add "header parse" API hook [Ben Laurie]
-
- *) Fix byte ordering problems for REMOTE_PORT [Chuck Murcko]
-
- *) suEXEC wrapper was freeing memory that had not been malloc'ed.
-
- *) Correctly allow access and auth directives in <Files> sections in
- server config files. [Alexei Kosut]
-
- *) Fix bug with ServerPath that could cause certain files to be not
- found by the server. [Alexei Kosut]
-
- *) Fix handling of ErrorDocument so that it doesn't remove a trailing
- double-quote from text and so that it properly checks for unsupported
- status codes using the new index_of_response interface. [Roy Fielding]
-
- *) Multiple fixes to the lingering_close code in order to avoid being
- interrupted by a stray timeout, to avoid lingering on a connection
- that has already been aborted or never really existed, to ensure that
- we stop lingering as soon as any error condition is received, and to
- prevent being stuck indefinitely if the read blocks. Also improves
- reporting of error conditions. [Marc Slemko and Roy Fielding]
-
- *) Fixed initialization of parameter structure for sigaction.
- [<mgyger itr.ch>, Adrian Filipi-Martin]
-
- *) Fixed reinitializing the parameters before each call to accept and
- select, and removed potential for infinite loop in accept.
- [Roy Fielding, after useful PR from <adrian virginia.edu>]
-
- *) Fixed condition where, if a child fails to fork, the scoreboard would
- continue to say SERVER_STARTING forever. Eventually, the main process
- would refuse to start new children because count_idle_servers() will
- count those SERVER_STARTING entries and will always report that there
- are enough idle servers. [Phillip Vandry]
-
- *) Fixed bug in bcwrite regarding failure to account for partial writes.
- Avoided calling bflush() when the client is pipelining requests.
- Removed unnecessary flushes from http_protocol. [Dean Gaudet]
-
- *) Added description of "." mode in server-status [Jim Jagielski]
-
-Changes with Apache 1.2b4
-
- *) Fix possible race condition in accept_mutex_init() that
- could leave a small security hole open allowing files to be
- overwritten in cases where the server UID has write permissions.
- [Marc Slemko]
-
- *) Fix awk compatibilty problem in Configure. [Jim Jagielski]
-
- *) Fix portablity problem in util_script where ARG_MAX may not be
- defined for some systems.
-
- *) Add changes to allow compilation on Machten 4.0.3 for PowerPC.
- [Randal Schwartz]
-
- *) OS/2 changes to support an MMAP style scoreboard file and UNIX
- style magic #! token for better script portability. [Garey Smiley]
-
- *) Fix bug in suexec wrapper introduced in b3 that would cause failed
- execution for ~userdir CGI. [Jason Dour]
-
- *) Fix initgroups() business in suexec wrapper. [Jason Dour]
-
- *) Fix month off by one in suexec wrapper logging.
-
-Changes with Apache 1.2b3:
-
- *) Fix error in mod_cgi which could cause resources not to be properly
- freed, or worse. [Dean Gaudet]
-
- *) Fix find_string() NULL pointer dereference. [Howard Fear]
-
- *) Add set_flag_slot() at the request of Dirk and others.
- [Dirk vanGulik]
-
- *) Sync mod_rewrite with patch level 10. [Ralf Engelschall]
-
- *) Add changes to improve the error message given for invalid
- ServerName parameters. [Dirk vanGulik]
-
- *) Add "Authoritative" directive for Auth modules that don't
- currently have it. This gives admin control to assign authoritative
- control to an authentication scheme and allow "fall through" for
- those authentication modules that aren't "Authoritative" thereby
- allowing multiple authentication mechanisms to be chained.
- [Dirk vanGulik]
-
- *) Remove requirement for ResourceConfig/AccessConfig if not using
- the three config file layout. [Randy Terbush]
-
- *) Add PASV mode to mod_proxy FTP handler. [Chuck Murcko]
-
- *) Changes to suexec wrapper to fix the following problems:
- 1. symlinked homedirs will kill ~userdirs.
- 2. initgroups() on Linux 2.0.x clobbers gr->grid.
- 3. CGI command lines paramters problems
- 4. pw-pwdir for "docroot check" still the httpd user's pw record.
- [Randy Terbush, Jason Dour]
-
- *) Change create_argv() to accept variable arguments. This fixes
- a problem where arguments were not getting passed to the CGI via
- argv[] when the suexec wrapper was active. [Randy Terbush, Jake Buchholz]
-
- *) Collapse multiple slashes in path URLs to properly apply
- handlers defined by <Location>. [Alexei Kosut]
-
- *) Define a sane set of DEFAULT_USER and DEFAULT_GROUP values for AIX.
-
- *) Improve the accuracy of request duration timings by setting
- r->request_time in read_request_line() instead of read_request().
- [Dean Gaudet]
-
- *) Reset timeout while reading via get_client_block() in mod_cgi.c
- Fixes problem with timed out transfers of large files. [Rasmus Lerdorf]
-
- *) Add the ability to pass different Makefile.tmpl files to Configure
- using the -make flag. [Rob Hartill]
-
- *) Fix coredump triggered when sending a SIGHUP to the server caused
- by an assertion failure, in turn caused by an uninitialised field in a
- listen_rec.
- [Ben Laurie]
-
- *) Add FILEPATH_INFO variable to CGI environment, which is equal to
- PATH_INFO from previous versions of Apache (in certain situations,
- Apache 1.2's PATH_INFO will be different than 1.1's). [Alexei Kosut]
- [later removed in 1.2b11]
-
- *) Add rwrite() function to API to allow for sending strings of
- arbitrary length. [Doug MacEachern]
-
- *) Remove rlim_t typedef for NetBSD. Do older versions need this?
-
- *) Defined rlim_t and WANTHSREGEX=yes and fixed waitpid() substitute for
- NeXT. [Jim Jagielski]
-
- *) Removed recent modification to promote the status code on internal
- redirects, since the correct fix was to change the default log format
- in mod_log_config so that it outputs the original status. [Rob Hartill]
-
-Changes with Apache 1.2b2:
-
- *) Update set_signals() to use sigaction() for setting handlers.
- This appears to fix a re-entrant problem in the seg_fault()
- bus_error() handlers. [Randy Terbush]
-
- *) Changes to allow mod_status compile for OS/2 [Garey Smiley]
-
- *) changes for DEC AXP running OSF/1 v3.0. [Marc Evans]
-
- *) proxy_http.c bugfixes: [Chuck Murcko]
- 1) fixes possible NULL pointer reference w/NoCache
- 2) fixes NoCache behavior when using ProxyRemote (ProxyRemote
- host would cache nothing if it was in the local domain,
- and the local domain was in the NoCache list)
- 3) Adds Host: header when not available
- 4) Some code cleanup and clarification
-
- *) mod_include.c bugfixes:
- 1) Fixed an ommission that caused include variables to not
- be parsed in config errmsg directives [Howard Fear]
- 2) Remove HAVE_POSIX_REGEX cruft [Alexei Kosut]
- 3) Patch to fix compiler warnings [<perrot lal.in2p3.fr>]
- 4) Allow backslash-escaping to all quoted text
- [Ben Yoshino <ben wiliki.eng.hawaii.edu>]
- 5) Pass variable to command line if not set in XSSI's env
- [Howard Fear]
-
- *) Fix infinite loop when processing Content-language lines in
- type-map files. [Alexei Kosut]
-
- *) Closed file-globbing hole in test-cgi script. [Brian Behlendorf]
-
- *) Fixed problem in set_[user|group] that prevented CGI execution
- for non-virtualhosts when suEXEC was enabled. [Randy Terbush]
-
- *) Added PORTING information file. [Jim Jagielski]
-
- *) Added definitions for S_IWGRP and S_IWOTH to conf.h [Ben Laurie]
-
- *) Changed default group to "nogroup" instead of "nobody" [Randy Terbush]
-
- *) Fixed define typo of FCNTL_SERIALIZED_ACCEPT where
- USE_FCNTL_SERIALIZED_ACCEPT was intended.
-
- *) Fixed additional uses of 0xffffffff where INADDR_NONE was intended,
- which caused problems of systems where socket s_addr is >32bits.
-
- *) Added comment to explain (r->chunked = 1) side-effect in
- http_protocol.c [Roy Fielding]
-
- *) Replaced use of index() in mod_expires.c with more appropriate
- and portable isdigit() test. [Ben Laurie]
-
- *) Updated Configure for ...
- OS/2 (DEF_WANTHSREGEX=yes, other code changes)
- *-dg-dgux* (bad pattern match)
- QNX (DEF_WANTHSREGEX=yes)
- *-sunos4* (DEF_WANTHSREGEX=yes, -DUSEBCOPY)
- *-ultrix (new)
- *-unixware211 (new)
- and added some user diagnostic info. [Ben Laurie]
-
- *) In helpers/CutRule, replaced "cut" invocation with "awk" invocation
- for better portability. [Jim Jagielski]
-
- *) Updated helpers/GuessOS for ...
- SCO 5 (recognize minor releases)
- SCO UnixWare (braindamaged uname, whatever-whatever-unixware2)
- SCO UnixWare 2.1.1 (requires a separate set of #defines in conf.h)
- IRIX64 (-sgi-irix64)
- ULTRIX (-unknown-ultrix)
- SINIX (-whatever-sysv4)
- NCR Unix (-ncr-sysv4)
- and fixed something in helpers/PrintPath [Ben Laurie]
-
-Changes with Apache 1.2b1
-
- *) Not listed. See <http://www.apache.org/docs/new_features_1_2.html>
-
-Changes with Apache 1.1.1
-
- *) Fixed bug where Cookie module would make two entries in the
- logfile for each access [Mark Cox]
-
- *) Fixed bug where Redirect in .htaccess files would cause memory
- leak. [Nathan Neulinger]
-
- *) MultiViews now works correctly with AddHandler [Alexei Kosut]
-
- *) Problems with mod_auth_msql fixed [Dirk vanGulik]
-
- *) Fix misspelling of "Anonymous_Authorative" directive in mod_auth_anon.
-
-Changes with Apache 1.1.0
-
- *) Bring NeXT support up to date. [Takaaki Matsumoto]
-
- *) Bring QNX support up to date. [Ben Laurie]
-
- *) Make virtual hosts default to main server keepalive parameters.
- [Alexei Kosut, Ben Laurie]
-
- *) Allow ScanHTMLTitles to work with lowercase <title> tags. [Alexei Kosut]
-
- *) Fix missing address family for connect, also remove unreachable statement
- in mod_proxy. [Ben Laurie]
-
- *) mod_env now turned on by default in Configuration.tmpl.
-
- *) Bugs which were fixed:
- a) yet more mod_proxy bugs [Ben Laurie]
- b) CGI works again with inetd [Alexei Kosut]
- c) Leading colons were stripped from passwords [<osm interguide.com>]
- d) Another fix to multi-method Limit problem [<jk tools.de>]
-
-Changes with Apache 1.1b4
-
- *) r->bytes_sent variable restored. [Robert Thau]
-
- *) Previously broken multi-method <Limit> parsing fixed. [Robert Thau]
-
- *) More possibly unsecure programs removed from the support directory.
-
- *) More mod_auth_msql authentication improvements.
-
- *) VirtualHosts based on Host: headers no longer conflict with the
- Listen directive.
-
- *) OS/2 compatibility enhancements. [Gary Smiley]
-
- *) POST now allowed to directory index CGI scripts.
-
- *) Actions now work with files of the default type.
-
- *) Bugs which were fixed:
- a) more mod_proxy bugs
- b) early termination of inetd requests
- c) compile warnings on several systems
- d) problems when scripts stop reading output early
-
-Changes with Apache 1.1b3
-
- *) Much of cgi-bin and all of cgi-src has been removed, due to
- various security holes found and that we could no longer support
- them.
-
- *) The "Set-Cookie" header is now special-cased to not merge multiple
- instances, since certain popular browsers can not handle multiple
- Set-Cookie instructions in a single header. [Paul Sutton]
-
- *) rprintf() added to buffer code, occurrences of sprintf removed.
- [Ben Laurie]
-
- *) CONNECT method for proxy module, which means tunneling SSL should work.
- (No crypto needed) Also a NoCache config directive.
-
- *) Several API additions: pstrndup(), table_unset() and get_token()
- functions now available to modules.
-
- *) mod_imap fixups, in particular Location: headers are now complete
- URL's.
-
- *) New "info" module which reports on installed module set through a
- special URL, a la mod_status.
-
- *) "ServerPath" directive added - allows for graceful transition
- for Host:-header-based virtual hosts.
-
- *) Anonymous authentication module improvements.
-
- *) MSQL authentication module improvements.
-
- *) Status module design improved - output now table-based. [Ben Laurie]
-
- *) htdigest utility included for use with digest authentication
- module.
-
- *) mod_negotiation: Accept values with wildcards to be treated with
- less priority than those without wildcards at the same quality
- value. [Alexei Kosut]
-
- *) Bugs which were fixed:
- a) numerous mod_proxy bugs
- b) CGI early-termination bug [Ben Laurie]
- c) Keepalives not working with virtual hosts
- d) RefererIgnore problems
- e) closing fd's twice in mod_include (causing core dumps on
- Linux and elsewhere).
-
-Changes with Apache 1.1b2
-
- *) Bugfixes:
- a) core dumps in mod_digest
- b) truncated hostnames/ip address in the logs
- c) relative URL's in mod_imap map files
-
-Changes with Apache 1.1b1
-
- *) Not listed. See <http://www.apache.org/docs/new_features_1_1.html>
-
-Changes with Apache 1.0.3
-
- *) Internal redirects which occur in mod_dir.c now preserve the
- query portion of a request (the bit after the question mark).
- [Adam Sussman]
-
- *) Escape active characters '<', '>' and '&' in html output in
- directory listings, error messages and redirection links.
- [David Robinson]
-
- *) Apache will now work with LynxOS 2.3 and later [Steven Watt]
-
- *) Fix for POSIX compliance in waiting for processes in alloc.c.
- [Nick Williams]
-
- *) setsockopt no longer takes a const declared argument [Martijn Koster]
-
- *) Reset timeout timer after each successful fwrite() to the network.
- This patch adds a reset_timeout() procedure that is called by
- send_fd() to reset the timeout ever time data is written to the net.
- [Nathan Schrenk]
-
- *) timeout() signal handler now checks for SIGPIPE and reports
- lost connections in a more user friendly way. [Rob Hartill]
-
- *) Location of the "scoreboard" file which used to live in /tmp is
- now configurable (for OSes that can't use mmap) via ScoreBoardFile
- which works similar to PidFile (in httpd.conf) [Rob Hartill]
-
- *) Include sys/resource.h in the correct place for SunOS4 [Sameer Parekh]
-
- *) the pstrcat call in mod_cookies.c didn't have an ending NULL,
- which caused a SEGV with cookies enabled
-
- *) Output warning when MinSpareServers is set to <= 0 and change it to 1
- [Rob Hartill]
-
- *) Log the UNIX textual error returned by some system calls, in
- particular errors from accept() [David Robinson]
-
- *) Add strerror function to util.c for SunOS4 [Randy Terbush]
-
-Changes with Apache 1.0.2
-
- *) patch to get Apache compiled on UnixWare 2.x, recommended as
- a temporary measure, pending rewrite of rfc931.c. [Chuck Murcko]
-
- *) Fix get_basic_auth_pw() to set the auth_type of the request.
- [David Robinson]
-
- *) past changes to http_config.c to only use the
- setrlimit function on systems defining RLIMIT_NOFILE
- broke the feature on SUNOS4. Now defines HAVE_RESOURCE
- for SUNOS and prototypes the needed functions.
-
- *) Remove uses of MAX_STRING_LEN/HUGE_STRING_LEN from several routines.
- [David Robinson]
-
- *) Fix use of pointer to scratch memory. [Cliff Skolnick]
-
- *) Merge multiple headers from CGI scripts instead of taking last
- one. [David Robinson]
-
- *) Add support for SCO 5. [Ben Laurie]
-
-Changes with Apache 1.0.1
-
- *) Silence mod_log_referer and mod_log_agent if not configured
- [Randy Terbush]
-
- *) Recursive includes can occur if the client supplies PATH_INFO data
- and the server provider uses relative links; as file.html
- relative to /doc.shtml/pathinfo is /doc.shtml/file.html. [David Robinson]
-
- *) The replacement for initgroups() did not call {set,end}grent(). This
- had two implications: if anything else used getgrent(), then
- initgroups() would fail, and it was consuming a file descriptor.
- [Ben Laurie]
-
- *) On heavily loaded servers it was possible for the scoreboard to get
- out of sync with reality, as a result of a race condition.
- The observed symptoms are far more Apaches running than should
- be, and heavy system loads, generally followed by catastrophic
- system failure. [Ben Laurie]
-
- *) Fix typo in license. [David Robinson]
-
-Changes with Apache 1.0.0 23 Nov 1995
-
- *) Not listed. See <http://www.apache.org/docs/new_features_1_0.html>
-
-Changes with Apache 0.8.16 05 Nov 1995
-
- *) New man page for 'httpd' added to support directory [David Robinson]
-
- *) .htgroup files can have more than one line giving members for a
- given group (each must have the group name in front), for NCSA
- back-compatibility [Robert Thau]
-
- *) Mutual exclusion around accept() is on by default for SVR4 systems
- generally, since they generally can't handle multiple processes in
- accept() on the same socket. This should cure flaky behavior on
- a lot of those systems. [David Robinson]
-
- *) AddType, AddEncoding, and AddLanguage directives take multiple
- extensions on a single command line [David Robinson]
-
- *) UserDir can be disabled for a given virtual host by saying
- "UserDir disabled" in the <VirtualHost> section --- it was a bug
- that this didn't work. [David Robinson]
-
- *) Compiles on QNX [Ben Laurie]
-
- *) Corrected parsing of ctime time format [David Robinson]
-
- *) httpd does a perror() before exiting if it can't log its pid
- to the PidFile, to make diagnosing the error a bit easier.
- [David Robinson]
-
- *) <!--#include file="..."--> can no longer include files in the
- parent directory, for NCSA back-compatibility. [David Robinson]
-
- *) '~' is *not* escaped in URIs generated for directory listings
- [Roy Fielding]
-
- *) Eliminated compiler warning in the imagemap module [Randy Terbush]
-
- *) Fixed bug involving handling URIs with escaped %-characters
- in redirects [David Robinson]
-
-Changes with Apache 0.8.15 14 Oct 1995
-
- *) Switched to new, simpler license
-
- *) Eliminated core dumps with improperly formatted DBM group files [Mark Cox]
-
- *) Don't allow requests for ordinary files to have PATH_INFO [Ben Laurie]
-
- *) Reject paths containing %-escaped '%' or null characters [David Robinson]
-
- *) Correctly handles internal redirects to files with names containing '%'
- [David Robinson]
-
- *) Repunctuated some error messages [Aram Mirzadeh, Andrew Wilson]
-
- *) Use geteuid() rather than getuid() to see if we have root privilege,
- so that server correctly resets privilege if run setuid root. [Andrew
- Wilson]
-
- *) Handle ftp: and telnet: URLs correctly in imagemaps (built-in module)
- [Randy Terbush]
-
- *) Fix relative URLs in imagemap files [Randy Terbush]
-
- *) Somewhat better fix for the old "Alias /foo/ /bar/" business
- [David Robinson]
-
- *) Don't repeatedly open the ErrorLog if a bunch of <VirtualHost>
- entries all name the same one. [David Robinson]
-
- *) Fix directory listings with filenames containing unusual characters
- [David Robinson]
-
- *) Better URI-escaping for generated URIs in directories with filenames
- containing unusual characters [Ben Laurie]
-
- *) Fixed potential FILE* leak in http_main.c [Ben Laurie]
-
- *) Unblock alarms on error return from spawn_child() [David Robinson]
-
- *) Sample Config files have extra note for SCO users [Ben Laurie]
-
- *) Configuration has note for HP-UX users [Rob Hartill]
-
- *) Eliminated some bogus Linux-only #defines in conf.h [Aram Mirzadeh]
-
- *) Nuked bogus #define in httpd.h [David Robinson]
-
- *) Better test for whether a system has setrlimit() [David Robinson]
-
- *) Calls update_child_status() after reopen_scoreboard() [David Robinson]
-
- *) Doesn't send itself SIGHUP on startup when run in the -X debug-only mode
- [Ben Laurie]
-
-Changes with Apache 0.8.14 19 Sep 1995
-
- *) Compiles on SCO ODT 3.0 [Ben Laurie]
-
- *) AddDescription works (better) [Ben Laurie]
-
- *) Leaves an intelligible error diagnostic when it can't set group
- privileges on standalone startup [Andrew Wilson]
-
- *) Compiles on NeXT again --- the 0.8.13 RLIMIT patch was failing on
- that machine, which claims to be BSD but does not support RLIMIT.
- [Randy Terbush]
-
- *) gcc -Wall no longer complains about an unused variable when util.c
- is compiled with -DMINIMAL_DNS [Andrew Wilson]
-
- *) Nuked another compiler warning for -Wall on Linux [Aram Mirzadeh]
-
-Changes with Apache 0.8.13 07 Sep 1995
-
- *) Make IndexIgnore *work* (ooops) [Jarkko Torppa]
-
- *) Have built-in imagemap code recognize & honor Point directive [James
- Cloos]
-
- *) Generate cleaner directory listings in directories with a mix of
- long and short filenames [Rob Hartill]
-
- *) Properly initialize dynamically loaded modules [Royston Shufflebotham]
-
- *) Properly default ServerName for virtual servers [Robert Thau]
-
- *) Rationalize handling of BSD in conf.h and elsewhere [Randy Terbush,
- Paul Richards and a cast of thousands...]
-
- *) On self-identified BSD systems (we don't try to guess any more),
- allocate a few extra file descriptors per virtual host with setrlimit,
- if we can, to avoid running out. [Randy Terbush]
-
- *) Write 22-character lock file name into buffer with enough space
- on startup [Konstantin Olchanski]
-
- *) Use archaic setpgrp() interface on NeXT, which requires it [Brian
- Pinkerton]
-
- *) Suppress -Wall warning by casting const away in util.c [Aram Mirzadeh]
-
- *) Suppress -Wall warning by initializing variable in negotiation code
- [Tobias Weingartner]
-
-Changes with Apache 0.8.12 31 Aug 1995
-
- *) Doesn't pause three seconds after including a CGI script which is
- too slow to die off (this is done by not even trying to kill off
- subprocesses, including the SIGTERM/pause/SIGKILL routine, until
- after the entire document has been processed). [Robert Thau]
-
- *) Doesn't do SSI if Options Includes is off. (Ooops). [David Robinson]
-
- *) Options IncludesNoExec allows inclusion of at least text/* [Roy Fielding]
-
- *) Allows .htaccess files to override <Directory> sections naming the
- same directory [David Robinson]
-
- *) Removed an efficiency hack in sub_req_lookup_uri which was
- causing certain extremely marginal cases (e.g., ScriptAlias of a
- *particular* index.html file) to fail. [David Robinson]
-
- *) Doesn't log an error when the requested URI requires
- authentication, but no auth header line was supplied by the
- client; this is a normal condition (the client doesn't no auth is
- needed here yet). [Robert Thau]
-
- *) Behaves more sanely when the name server loses its mind [Sean Welch]
-
- *) RFC931 code compiles cleanly on old BSDI releases [Randy Terbush]
-
- *) RFC931 code no longer passes out name of prior clients on current
- requests if the current request came from a server that doesn't
- do RFC931. [David Robinson]
-
- *) Configuration script accepts "Module" lines with trailing whitespace.
- [Robert Thau]
-
- *) Cleaned up compiler warning from mod_access.c [Robert Thau]
-
- *) Cleaned up comments in mod_cgi.c [Robert Thau]
-
-Changes with Apache 0.8.11 24 Aug 1995
-
- *) Wildcard <Directory> specifications work. [Robert Thau]
-
- *) Doesn't loop for buggy CGI on Solaris [Cliff Skolnick]
-
- *) Symlink checks (FollowSymLinks off, or SymLinkIfOwnerMatch) always check
- the file being requested itself, in addition to the directories leading
- up to it. [Robert Thau]
-
- *) Logs access failures due to symlink checks or invalid client address
- in the error log [Roy Fielding, Robert Thau]
-
- *) Symlink checks deal correctly with systems where lstat of
- "/path/to/some/link/" follows the link. [Thau, Fielding]
-
- *) Doesn't reset DirectoryIndex to 'index.html' when
- other directory options are set in a .htaccess file. [Robert Thau]
-
- *) Clarified init code and nuked bogus warning in mod_access.c
- [Florent Guillaume]
-
- *) Corrected several directives in sample srm.conf
- --- includes corrections to directory indexing icon-related directives
- (using unknown.gif rather than unknown.xbm as the DefaultIcon, doing
- icons for encodings right, and turning on AddEncoding by default).
- [Roy Fielding]
-
- *) Corrected descriptions of args to AddIcon and AddAlt in command table
- [James Cloos]
-
- *) INSTALL & README mention "contributed modules" directory [Brian
- Behlendorf]
-
- *) Fixed English in the license language... "for for" --> "for".
- [Roy Fielding]
-
- *) Fixed ScriptAlias/Alias interaction by moving ScriptAlias handling to
- mod_alias.c, merging it almost completely with handling of Alias, and
- adding a 'notes' field to the request_rec which allows the CGI module
- to discover whether the Alias module has put this request through
- ScriptAlias (which it needs to know for back-compatibility, as the old
- NCSA code did not check Options ExecCGI in ScriptAlias directories).
- [Robert Thau]
-
-Changes with Apache 0.8.10 18 Aug 1995
-
- *) AllowOverride applies to the named directory, and not just
- subdirectories. [David Robinson]
-
- *) Do locking for accept() exclusion (on systems that need it)
- using a special file created for the purpose in /usr/tmp, and
- not the error log; using the error log causes real problems
- if it's NFS-mounted; this is known to be the cause of a whole
- lot of "server hang" problems with Solaris. [David Robinson;
- thanks to Merten Schumann for help diagnosing the problem].
-
-Changes with Apache 0.8.9 12 Aug 1995
-
- *) Compiles with -DMAXIMUM_DNS ---- ooops! [Henrik Mortensen]
-
- *) Nested includes see environment variables of the including document,
- for NCSA bug-compatibility (some sites have standard footer includes
- which try to print out the last-modified date). [Eric Hagberg/Robert
- Thau]
-
- *) <!--exec cgi="/some/uri/here"--> always treats the item named by the
- URI as a CGI script, even if it would have been treated as something
- else if requested directly, for NCSA back-compatibility. (Note that
- this means that people who know the name of the script can see the
- code just by asking for it). [Robert Thau]
-
- *) New version of dbmmanage script included in support directory as
- dbmmanage.new.
-
- *) Check if scoreboard file couldn't be opened, and say so, rather
- then going insane [David Robinson]
-
- *) POST to CGI works on A/UX [Jim Jagielski]
-
- *) AddIcon and AddAlt commands work properly [Rob Hartill]
-
- *) NCSA server push works properly --- the Arena bug compatibility
- workaround, which broke it, is gone (use -DARENA_BUG_WORKAROUND
- if you still want the workaround). [Rob Hartill]
-
- *) If client didn't submit any Accept-encodings, ignore encodings in
- content negotiation. (NB this will all have to be reworked anyway
- for the new HTTP draft). [Florent Guillaume]
-
- *) Don't dump core when trying to log timed-out requests [Jim Jagielski]
-
- *) Really honor CacheNegotiatedDocs [Florent Guillaume]
-
- *) Give Redirect priority over Alias, for NCSA bug compatibility
- [David Robinson]
-
- *) Correctly set PATH_TRANSLATED in all cases from <!--#exec cmd=""-->,
- paralleling earlier bug fix for CGI [David Robinson]
-
- *) If DBM auth is improperly configured, report a server error and don't
- dump core.
-
- *) Deleted FCNTL_SERIALIZED_ACCEPTS from conf.h entry for A/UX;
- it seems to work well enough without it (even in a 10 hits/sec
- workout), and the overhead for the locking under A/UX is
- alarmingly high (though it is very low on other systems).
- [Eric Hagberg, Jim Jagielski]
-
- *) Fixed portability problems with mod_cookies.c [Cliff Skolnick]
-
- *) Further de-Berklize mod_cookies.c; change the bogus #include. [Brian
- Behlendorf/Eric Hagberg]
-
- *) More improvements to default Configuration for A/UX [Jim Jagielski]
-
- *) Compiles clean on NEXT [Rob Hartill]
-
- *) Compiles clean on SGI [Robert Thau]
-
-Changes with Apache 0.8.8 08 Aug 1995
-
- *) SunOS library prototypes now never included unless explicitly
- requested in the configuration (via -DSUNOS_LIB_PROTOTYPES);
- people using GNU libc on SunOS are screwed by prototypes for the
- standard library.
-
- (Those who wish to compile clean with gcc -Wall on a standard
- SunOS setup need the prototypes, and may obtain them using
- -DSUNOS_LIB_PROTOTYPES. Those wishing to use -Wall on a system
- with nonstandard libraries are presumably competent to make their
- own arrangements).
-
- *) Strips trailing '/' characters off both args to the Alias command,
- to make 'Alias /foo/ /bar/' work.
-
-Changes with Apache 0.8.7 03 Aug 1995
-
- *) Don't hang when restarting with a child from 'TransferLog "|..."' running
- [reported by David Robinson]
-
- *) Compiles clean on OSF/1 [David Robinson]
-
- *) Added some of the more recent significant changes (AddLanguage stuff,
- experimental LogFormat support) to CHANGES file in distribution root
- directory
-
-Changes with Apache 0.8.6 02 Aug 1995
-
- *) Deleted Netscape reload workaround --- it's in violation of HTTP specs.
- (If you actually wanted a conditional GET which bypassed the cache, you
- couldn't get it). [Reported by Roy Fielding]
-
- *) Properly terminate headers on '304 Not Modified' replies to conditional
- GETs --- no browser we can find cares much, but the CERN proxy chokes.
- [Reported by Cliff Skolnick; fix discovered independently by Rob Hartill]
-
- *) httpd -v doesn't call itself "Shambhala". [Reported by Chuck Murcko]
-
- *) SunOS lib-function prototypes in conf.h conditionalized on __GNUC__,
- not __SUNPRO_C (they're needed to quiet gcc -Wall, but acc chokes on 'em,
- and older versions don't set the __SUNPRO_C preprocessor variable). On
- all other systems, these are never used anyway. [Reported by Mark Cox].
-
- *) Scoreboard file (/tmp/htstatus.*) no longer publically writable.
-
-Changes with Apache 0.8.5 01 Aug 1995
-
- *) Added last-minute configurable log experiment, as optional module
-
- *) Correctly set r->bytes_sent for HTTP/0.9 requests, so they get logged
- properly. (One-line fix to http_protocol.c).
-
- *) Work around bogus behavior when reloading from Netscape.
- It's Netscape's bug --- for some reason they expect a request with
- If-modified-since: to not function as a conditional GET if it also
- comes with Pragma: no-cache, which is way out of line with the HTTP
- spec (according to Roy Fielding, the redactor).
-
- *) Added parameter to set maximum number of server processes.
-
- *) Added patches to make it work on A/UX. A/UX is *weird*. [Eric Hagberg,
- Jim Jagielski]
-
- *) IdentityCheck bugfix [Chuck Murcko].
-
- *) Corrected cgi-src/Makefile entry for new imagemap script. [Alexei Kosut]
-
- *) More sample config file corrections; add extension to AddType for
- *.asis, move AddType generic description to its proper place, and
- fix miscellaneous typos. [ Alexei Kosut ]
-
- *) Deleted the *other* reference to the regents from the Berkeley
- legal disclaimer (everyplace).
-
- *) Nuked Shambhala name from src/README; had already cleaned it out
- of everywhere else.
-
-Changes with Apache 0.8.4
-
- *) Changes to server-pool management parms --- renamed current
- StartServers to MinSpareServers, created separate StartServers
- parameter which means what it says, and renamed MaxServers to
- MaxSpareServers (though the old name still works, for NCSA 1.4
- back-compatibility). The old names were generally regarded as
- too confusing. Also altered "docs" in sample config files.
-
- *) More improvements to default config files ---
- sample directives (commented out) for XBitHack, BindAddress,
- CacheNegotiatedDocs, VirtualHost; decent set of AddLanguage
- defaults, AddTypes for send-as-is and imagemap magic types, and
- improvements to samples for DirectoryIndex [Alexei Kosut]
-
- *) Yet more improvements to default config files --- changes to
- Alexei's sample AddLanguage directives, and sample LanguagePriority
- [ Florent Guillaume ]
-
- *) Set config file locations properly if not set in httpd.conf
- [ David Robinson ]
-
- *) Don't escape URIs in internal redirects multiple times; don't
- do that when translating PATH_INFO to PATH_TRANSLATED either.
- [ David Robinson ]
-
- *) Corrected spelling of "Required" in 401 error reports [Andrew Wilson]
-
-Changes with Apache 0.8.3
-
- *) Edited distribution README to *briefly* summarize installation
- procedures, and give a pointer to the INSTALL file in the src/
- directory.
-
- *) Upgraded imagemap script in cgi-bin to 1.8 version from more
- recent NCSA distributions.
-
- *) Bug fix to previous bug fix --- if .htaccess file and <Directory>
- exist for the same directory, use both and don't segfault. [Reported
- by David Robinson]
-
- *) Proper makefile dependencies [David Robinson]
-
- *) Note (re)starts in error log --- reported by Rob Hartill.
-
- *) Only call no2slash() after get_path_info() has been done, to
- preserve multiple slashes in the PATH_INFO [NCSA compatibility,
- reported by Andrew Wilson, though this one is probably a real bug]
-
- *) Fixed mod_imap.c --- relative paths with base_uri referer don't
- dump core when Referer is not supplied. [Randy Terbush]
-
- *) Lightly edited sample config files to refer people to our documentation
- instead of NCSA's, and to list Rob McCool as *original* author (also
- deleted his old, and no doubt non-functional email address). Would be
- nice to have examples of new features...
-
-Changes with Apache 0.8.2 19 Jul 1995
-
- *) Added AddLanuage code [Florent Guillaume]
-
- *) Don't say "access forbidden" when a CGI script is not found. [Mark Cox]
-
- *) All sorts of problems when MultiViews finds a directory. It would
- be nice if mod_dir.c was robust enough to handle that, but for now,
- just punt. [reported by Brian Behlendorf]
-
- *) Wait for all children on restart, to make sure that the old socket
- is gone and we can reopen it. [reported by Randy Terbush]
-
- *) Imagemap module is enabled in default Configuration
-
- *) RefererLog and UserAgentLog modules properly default the logfile
- [Randy Terbush]
-
- *) Mark Cox's mod_cookies added to the distribution as an optional
- module (commented out in the default Configuration, and noted as
- an experiment, along with mod_dld). [Mark Cox]
-
- *) Compiles on ULTRIX (a continuing battle...). [Robert Thau]
-
- *) Fixed nasty bug in SIGTERM handling [reported by Randy Terbush]
-
- *) Changed "Shambhala" to "Apache" in API docs. [Robert Thau]
-
- *) Added new, toothier legal disclaimer. [Robert Thau; copied from BSD
- license]
-
-Changes with Apache 0.8.1
-
- *) New imagemap module [Randy Terbush]
-
- *) Replacement referer log module with NCSA-compatible RefererIgnore
- [Matthew Gray again]
-
- *) Don't mung directory listings with very long filenames.
- [Florent Guillaume]
-
-Changes with Apache 0.8.0 (nee Shambhala 0.6.2) 16 Jul 1995
-
- *) New config script. See INSTALL for info. [Robert Thau]
-
- *) Scoreboard mechanism for regulating the number of extant server
- processes. MaxServers and StartServers defaults are the same as
- for NCSA, but the meanings are slightly different. (Actually,
- I should probably lower the MaxServers default to 10).
-
- Before asking for a new connection, each server process checks
- the number of other servers which are also waiting for a
- connection. If there are more than MaxServers, it quietly dies
- off. Conversely, every second, the root, or caretaker, process
- looks to see how many servers are waiting for a new connection;
- if there are fewer than StartServers, it starts a new one. This
- does not depend on the number of server processes already extant.
- The accounting is arranged through a "scoreboard" file, named
- /tmp/htstatus.*, on which each process has an independent file
- descriptor (they need to seek without interference).
-
- The end effect is that MaxServers is the maximum number of
- servers on an *inactive* server machine, but more will be forked
- off to handle unusually heavy loads (or unusually slow clients);
- these will die off when they are no longer needed --- without
- reverting to the overhead of full forking operation. There is a
- hard maximum of 150 server processes compiled in, largely to
- avoid forking out of control and dragging the machine down.
- (This is arguably too high).
-
- In my server endurance tests, this mechanism did not appear to
- impose any significant overhead, even after I forced it to put the
- scoreboard file on a normal filesystem (which might have more
- overhead than tmpfs). [Robert Thau]
-
- *) Set HTTP_FOO variables for SSI <!--#exec cmd-->s, not just CGI scripts.
- [Cliff Skolnick]
-
- *) Read .htaccess files even in directory with <Directory> section.
- (Former incompatibility noted on mailing list, now fixed). [Robert
- Thau]
-
- *) "HEAD /" gives the client a "Bad Request" error message, rather
- than trying to send no body *and* no headers. [Cliff Skolnick].
-
- *) Don't produce double error reports for some very obscure cases
- mainly involving auth configuration (the "all modules decline to
- handle" case which is a sure sign of a server bug in most cases,
- but also happens when authentication is badly misconfigured).
- [Robert Thau]
-
- *) Moved FCNTL_SERIALIZED_ACCEPT defines into conf.h (that's what
- it's *for*, and this sort of thing really shouldn't be cluttering
- up the Makefile). [Robert Thau]
-
- *) Incidental code cleanups in http_main.c --- stop dragging
- sa_client around; just declare it where used. [Robert Thau]
-
- *) Another acc-related fix. (It doesn't like const char
- in some places...). [Mark Cox]
-
-Changes with Shambhala 0.6.1 13 Jul 1995
-
- *) Fixed auth_name-related typos in http_core.c [Brian Behlendorf]
- Also, fixed auth typo in http_protocol.c unmasked by this fix.
-
- *) Compiles clean with acc on SunOS [Paul Sutton]
-
- *) Reordered modules in modules.c so that Redirect takes priority
- over ScriptAlias, for NCSA bug-compatibility [Rob Hartill] ---
- believe it or not, he has an actual site with a ScriptAlias and
- a Redirect declared for the *exact same directory*. Even *my*
- compatibility fetish wouldn't motivate me to fix this if the fix
- required any effort, but it doesn't, so what the hey.
-
- *) Fixed to properly default several server_rec fields for virtual
- servers from the corresponding fields in the main server_rec.
- [Cliff Skolnick --- 'port' was a particular irritant].
-
- *) No longer kills off nph- child processes before they are
- finished sending output. [Matthew Gray]
-
-Changes with Shambhala 0.6.0 10 Jul 1995
-
- *) Two styles of timeout --- hard and soft. soft_timeout()s just put
- the connection to the client in an "aborted" state, but otherwise
- allow whatever handlers are running to clean up. hard_timeout()s
- abort the request in progress completely; anything not tied to some
- resource pool cleanup will leak. They're still around because I
- haven't yet come up with a more elegant way of handling
- timeouts when talking to something that isn't the client. The
- default_handler and the dir_handler now use soft timeouts, largely
- so I can test the feature. [Robert Thau]
-
- *) TransferLog "| my_postprocessor ..." seems to be there. Note that
- the case of log handlers dying prematurely is probably handled VERY
- gracelessly at this point, and if the logger stops reading input,
- the server will hang. (It is known to correctly restart the
- logging process on server restart; this is (should be!) going through
- the same SIGTERM/pause/SIGKILL routine used to ding an errant CGI
- script). [Robert Thau]
-
- *) asis files supported (new module). [Robert Thau]
-
- *) IdentityCheck code is compiled in, but has not been tested. (I
- don't know anyone who runs identd). [Robert Thau]
-
- *) PATH_INFO and PATH_TRANSLATED are not set unless some real PATH_INFO
- came in with the request, for NCSA bug-compatibility. [Robert Thau]
-
- *) Don't leak the DIR * on HEAD request for a directory. [Robert Thau]
-
- *) Deleted the block_alarms() stuff from dbm_auth; no longer necessary,
- as timeouts are not in scope. [Robert Thau]
-
- *) quoted-string args in config files now handled correctly (doesn't drop
- the last character). [Robert Thau; reported by Randy Terbush]
-
- *) Fixed silly typo in http_main.c which was suddenly fatal in HP-UX.
- How the hell did it ever work? [Robert Thau; reported by Rob Hartill]
-
- *) mod_core.c --- default_type returns DEFAULT_TYPE (the compile-time
- default default type); the former default default behavior when all
- type-checkers defaulted had been a core dump. [Paul Sutton]
-
- *) Copy filenames out of the struct dirent when indexing
- directories. (On Linux, readdir() returns a pointer to the same
- memory area every time). Fix is in mod_dir.c. [Paul Sutton]
-
-Changes with Shambhala 0.5.3 [not released]
-
- *) Default response handler notes "file not found" in the error log,
- if the file was not found. [Cliff Skolnick].
-
- *) Another Cliff bug --- "GET /~user" now properly redirects (the userdir
- code no longer sets up bogus PATH_INFO which fakes out the directory
- handler). [Cliff Skolnick]
-
-Changes with Shambhala 0.5.2 06 Jul 1995
-
- *) Changes to http_main.c --- root server no longer plays silly
- games with SIGCHLD, and so now detects and replaces dying
- children. Child processes just die on SIGTERM, without taking
- the whole process group with them. Potential problem --- if any
- child process refuses to die, we hang in restart.
- MaxRequestsPerChild may still not work, but it certainly works
- better than it did before this! [Robert Thau]
-
- *) mod_dir.c bug fixes: ReadmeName and HeaderName
- work (or work better, at least); over-long description lines
- properly terminated. [Mark Cox]
-
- *) http_request.c now calls unescape_url() more places where it
- should [Paul Sutton].
-
- *) More directory handling bugs (reported by Cox)
- Parent Directory link is now set correctly. [Robert Thau]
-
-Changes with Shambhala 0.5.1 04 Jul 1995
-
- *) Generalized cleanup interface in alloc.c --- any function can be
- registered with alloc.c as a cleanup for a resource pool;
- tracking of files and file descriptors has been reimplemented in
- terms of this interface, so I can give it some sort of a test.
- [Robert Thau]
-
- *) More changes in alloc.c --- new cleanup_for_exec() function,
- which tracks down and closes all file descriptors which have been
- registered with the alloc.c machinery before the server exec()s a
- child process for CGI or <!--#exec-->. CGI children now get
- started with exactly three file descriptors open. Hopefully,
- this cures the problem Rob H. was having with overly persistent
- CGI connections. [Robert Thau]
-
- *) Mutual exclusion around the accept() in child_main() --- this is
- required on at least SGI, Solaris and Linux, and is #ifdef'ed in
- by default on those systems only (-DFCNTL_SERIALIZED_ACCEPT).
- This uses fcntl(F_SETLK,...) on the error log descriptor because
- flock() on that descriptor won't work on systems which have BSD
- flock() semantics, including (I think) Linux 1.3 and Solaris.
-
- This does work on SunOS (when the server is idle, only one
- process in the pool is waiting on accept()); it *ought* to work
- on the other systems. [Robert Thau]
-
- *) FreeBSD and BSDI portability tweaks [Chuck Murcko]
-
- *) sizeof(*sa_client) bugfix from [Rob Hartill]
-
- *) pstrdup(..., NULL) returns NULL, [Randy Terbush]
-
- *) block_alarms() to avoid leaking the DBM* in dbm auth (this should
- be unnecessary if I go to the revised timeout-handling scheme).
- [Robert Thau]
-
- *) For NCSA bug-compatibility, set QUERY_STRING env var (to a null
- string) even if none came in with the request. [Robert Thau]
-
- *) CHANGES file added to distribution ;-).
-
-Changes with Shambhala 0.4.5
-
- *) mod_dld --- early dynamic loading support [rst]
- *) Add wildcard content handlers for XBITHACK; default_hander now
- invoked with that mechanism (as a handler hanging off mod_core) [rst]
- *) XBITHACK supported as a wildcard content-handler, and
- configurable at run-time (not just at compile time, as in the
- "patchy server" releases) [rst]
-
-Changes with Shambhala 0.4.4 30 Jun 1995
-
- *) Fixed basic thinkos in mod_dbm_auth.c [rst, reported by Mark Cox]
- *) Handle Addtype x/y .z [rst, reported by Cox]
-
-Changes with Shambhala 0.4.3
-
- *) Fixed very dumb bug in mod_alias; "Alias" and "Redirect" are not
- synonymous [rst, terbush]
-
-Changes with Shambhala 0.4.1 28 Jun 1995
-
- *) First-cut virtual host implementation; some refit in the config
- reading code, and log management, was necessary to support this [rst]
- *) Sub-pool machinery, originally added to avoid excessive storage
- allocation on listings of large directories (which turned out to
- be the problem that the 0.3 storage accounting was added to
- find). Subrequests and mod_dir changed to use subpools. [rst]
- *) More memory debugging --- free list consistency checks. [rst]
- *) Added err_headers to request_rec, with support elsewhere [rst]
- *) Other fixes to minor bugs in mod_dir and mod_includes [rst, terbush]
-
-Changes with Shambhala 0.3 19 Jun 1995
-
- *) Switch ONE_PROCESS to a runtime command-line option (-X)
- *) Don't compile in mod_ai_backcompat by default
- *) Switch name of server from Apache to Shambhala in Makefile
- *) Add some accounting routines to track memory usage in the pools,
- for debugging
-
-Changes with Shambhala 0.2
-
- *) Set DOCUMENT_ROOT CGI variable
- *) Add single-process debugging, as a compile-time option (ONE_PROCESS)
- *) Add critical section protection to handling of cleanup structures
- in alloc.c [rst]
- *) Significant code reorg within the server core to group related
- functions together [rst]
- *) Correctly handle clients that hang up before sending any request
- [rst]
- *) Replace dying child processes. [rst]
-
-Changes with Shambhala 0.1 12 Jun 1995
-
- Major rewrite of the pre-existing "patchy server" codebase, by
- Robert Thau (rst). Significant portions of the server code, such
- as configuration-file handling and HTTP authentication support,
- were ripped out and rewritten from scratch. Code that was not
- completely rewritten was significantly altered.
-
- Major changes with this release include:
-
- *) Introduction of the module API; in request handling, the central
- machinery just dispatches to various modules, which actually do
- most of the work. Configuration handling is similar --- modules
- declare their own commands, and the central machinery just
- dispatches to them.
-
- API features from shambhala/0.1 were substantially unchanged in
- Apache 1.0 and 1.1. (1.0 API features not yet present in this
- release, such as wildcard handlers and subpools, were added in
- subsequent Shambhala releases, and were also generally rst's
- work).
-
- *) This release included the following modules:
-
- mod_access (access control --- allow and deny directives),
- mod_alias (Alias and Redirect commands),
- mod_auth (straight HTTP authentication, based on flat-files)
- mod_auth_dbm (same, with dbm files)
- mod_cgi (CGI scripts and, in this release, ScriptAlias)
- mod_common_log (CLF access logs; later renamed mod_log_common)
- mod_dir (directory indexing)
- mod_include (server-side includes)
- mod_mime (AddType directives)
- mod_negotiation (content negotiation)
- mod_userdir (support for users' public_html directories)
-
- It also included a mod_ai_backcompat, which was a private hack
- for back-compatibility with rst's own AI-lab servers.
-
- All of these modules were substantially complete, and functional
- or nearly so (a few, which implemented features not in use at
- Thau's site, required patches of a few lines).
-
- *) sub-request machinery, to allow modules to determine how other
- modules would assign MIME types to a given file, or optionally
- serve its content (this is heavily used by mod_dir, mod_include
- and mod_negotiation).
-
- *) Resource pool system for keeping track of memory allocated and
- files opened in service of a particular request. Much of the
- code in the modules (when they weren't rewrites) was adjusted to
- replace a pervasive convention of using fixed-size buffers on
- the stack with an equally pervasive convention of using memory
- allocated with palloc().
-
- *) Reorganization of data structures associated with a given
- request to eliminate use of global variables and the troublesome
- unmunge_name function (used in NCSA and early Apache releases to
- attempt to determine the URI which mapped to a given filename
- --- a difficult proposition, given that it is easy to produce
- setups in which multiple URIs map to the same file).
-
- *) Source files renamed and rearranged
-
- *) Very simple pre-forking behavior --- parent process forked off a
- fixed number of children, and then just waited for SIGHUP.
-
- *) Other more minor changes too numerous to list.
-
- This release included modified versions of a lot of code from the
- Apache 0.6.4 public release, plus an early pre-forking patch
- codeveloped by Robert Thau and Rob Hartill.
-
-Changes with Apache 0.7.3 20 Jun 1995
-
- *) There were a bunch of changes between Apache 0.6.4 and 0.7.3 that
- were incorporated by Rob Hartill on the main branch while Robert Thau
- worked on the Shambhala rewrite above. Most were merged into the
- Shambala architecture after Apache 0.8.0.
-
-Changes with Apache 0.6.4 13 May 1995
-
- *) Patches by Rob Hartill, Cliff Skolnick, Randy Terbush, Robert Thau,
- and others.
-
-Changes with Apache 0.5.1 10 Apr 1995
-
-Changes with Apache 0.4 02 Apr 1995
-
- *) Patches by Brian Behlendorf, Andrew Wilson, Robert Thau,
- and Rob Hartill.
-
-Changes with Apache 0.3 24 Mar 1995
-
- *) Patches by Robert Thau, David Robinson, Rob Hartill, and
- Carlos Varela.
-
-Changes with Apache 0.2 18 Mar 1995
-
- *) Based on NCSA httpd 1.3 by Rob McCool and patches by CERT,
- Roy Fielding, Robert Thau, Nicolas Pioch, David Robinson,
- Brian Behlendorf, Rob Hartill, and Cliff Skolnick.
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 7a17d3675b..0000000000
--- a/INSTALL
+++ /dev/null
@@ -1,91 +0,0 @@
-
- APACHE INSTALLATION OVERVIEW
-
- Quick Start - Unix
- ------------------
-
- For complete installation documentation, see [ht]docs/manual/install.html or
- http://httpd.apache.org/docs-2.1/install.html
-
- $ ./configure --prefix=PREFIX
- $ make
- $ make install
- $ PREFIX/bin/apachectl start
-
- NOTES: * Replace PREFIX with the filesystem path under which
- Apache should be installed. A typical installation
- might use "/usr/local/apache2" for PREFIX (without the
- quotes).
-
- * If you are building on FreeBSD, be aware that threads will
- be disabled and the prefork MPM will be used by default,
- as threads do not work well with Apache on FreeBSD. If
- you wish to try a threaded Apache on FreeBSD anyway, use
- "./configure --enable-threads".
-
- * If you are building on Mac OS X (Darwin), make sure to
- use libtool 1.4.2 or newer.
-
- * If you are a developer building Apache directly from CVS,
- you will need to run ./buildconf before running configure.
-
- For a short impression of what possibilities you have, here is a
- typical example which configures Apache for the installation tree
- /sw/pkg/apache with a particular compiler and flags plus the two
- additional modules mod_rewrite and mod_speling for later loading
- through the DSO mechanism:
-
- $ CC="pgcc" CFLAGS="-O2" \
- ./configure --prefix=/sw/pkg/apache \
- --enable-rewrite=shared \
- --enable-speling=shared
-
- The easiest way to find all of the configuration flags for Apache 2.1
- is to run ./configure --help.
-
-
- Quick Start - Windows
- ---------------------
-
- For complete documentation, see [ht]docs/manual/platform/windows.html or
- http://httpd.apache.org/docs-2.1/platform/windows.html.
-
- The Apache/Win32 binaries are primarily distributed as a Windows Installer
- package (.msi), and may be available as a .zip file as well. These packages
- are named apache-2.1.xx-win32-x86.msi and apache-2.1.xx-win32-x86.zip.
- Please choose the .msi package if at all possible.
-
- If you have unpacked a source distribution (named httpd-2.1-xx.zip, without
- any -win32-x86 notation) you must compile the package yourself, see the links
- mentioned above. Unless you intended to do this, please look again for the
- binary package from http://www.apache.org/dist/httpd/binaries/win32/ and
- install that .msi (or .zip package, if you must.)
-
- If you have unpacked this binary distribution from the .zip package, you
- _must_ edit the conf/httpd.conf file (with notepad or another text editor)
- to reflect the correct ServerName, Domain, and directory paths. Search for
- the text "@@" to discover what you must edit. To install and start the
- service after you have corrected the httpd.conf file, use the command
-
- bin\Apache -k install
- bin\Apache -k start
-
- The .msi package configures the httpd.conf file, and installs and starts
- the Apache2 service for you. It also installs plenty of useful shortcuts
- and the taskbar ApacheMonitor. We strongly encourage you to use it.
-
-
- Postscript
- ----------
-
- The Apache HTTP Server group cannot field user's installation questions.
- There are many valuable forums to help you get started. Please refer your
- questions to the appropriate forum, such as the Users Mailing List at
- http://httpd.apache.org/userslist.html or the usenet newsgroups
- comp.infosystems.www.servers.unix or
- comp.infosystems.www.servers.ms-windows.
-
- Thanks for using the Apache HTTP Server, version 2.1.
-
- The Apache Software Foundation
- http://www.apache.org/
diff --git a/InstallBin.dsp b/InstallBin.dsp
deleted file mode 100644
index e772efab13..0000000000
--- a/InstallBin.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="InstallBin" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=InstallBin - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "InstallBin.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "InstallBin.mak" CFG="InstallBin - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "InstallBin - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "InstallBin - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-
-!IF "$(CFG)" == "InstallBin - Win32 Release"
-
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Cmd_Line "NMAKE /f InstallBin.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name "InstallBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" SHORT=R LONG=Release _install"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name "Browse\Apache.bsc"
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "InstallBin - Win32 Debug"
-
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Cmd_Line "NMAKE /f InstallBin.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name "InstallBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" SHORT=D LONG=Debug _install"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-
-!ENDIF
-
-# Begin Target
-
-# Name "InstallBin - Win32 Release"
-# Name "InstallBin - Win32 Debug"
-
-!IF "$(CFG)" == "InstallBin - Win32 Release"
-
-!ELSEIF "$(CFG)" == "InstallBin - Win32 Debug"
-
-!ENDIF
-
-# Begin Source File
-
-SOURCE=..\logs\access.log
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\BaseAddr.ref
-# End Source File
-# Begin Source File
-
-SOURCE=.\CHANGES
-# End Source File
-# Begin Source File
-
-SOURCE=..\logs\error.log
-# End Source File
-# Begin Source File
-
-SOURCE=..\conf\httpd.conf
-# End Source File
-# Begin Source File
-
-SOURCE=.\Makefile.win
-# End Source File
-# Begin Source File
-
-SOURCE=..\STATUS
-# End Source File
-# End Target
-# End Project
diff --git a/LAYOUT b/LAYOUT
deleted file mode 100644
index 8385e67f0f..0000000000
--- a/LAYOUT
+++ /dev/null
@@ -1,201 +0,0 @@
-The httpd-2.1 Source Tree LAYOUT
---------------------------------
-
-./ .................... Top-Level httpd-2.1 Root Directory
-
- ABOUT_APACHE .......... Overview of the Apache HTTP Server
- LAYOUT ................ This file describing the source tree
- README ................ Overview of this distribution
- STATUS ................ Current project activity and commentary
-
-build/ ................ Supporting tools for buildconf/configure
-
- win32/ ................ Supporting tools for Win32 MSVC builds
-
-docs/ ................. Documentation and Examples
-
- cgi-examples/ .........
-
- conf/ .................
-
- docroot/ ..............
-
- error/ ................
-
- include/ ..............
-
- icons/ ................
-
- small/ ................
-
- man/ ..................
-
- manual/ ...............
-
- developer/ ............
-
- faq/ ..................
-
- howto/ ................
-
- images/ ...............
-
- misc/ .................
-
- mod/ ..................
-
- platform/ .............
-
- programs/ .............
-
- search/ ...............
-
- ssl/ ..................
-
- style/ ................
-
- vhosts/ ...............
-
-include/ ................
-
-modules/ ................ Manditory and Add-In Apache stock modules
-
- aaa/ ....................
-
- arch/ ...................
-
- netware/ ................
-
- win32/ ..................
-
- cache/ ..................
-
- dav/ ....................
-
- fs/ .....................
-
- main/ ...................
-
- echo/ ...................
-
- experimental/ ...........
-
- filters/ ................
-
- generators/ .............
-
- http/ ................... HTTP: protocol module
-
- loggers/ ................
-
- mappers/ ................
-
- metadata/ ...............
-
- pop3/ ...................
-
- private/ ................
-
- proxy/ ..................
-
- ssl/ .................... HTTPS: SSL v2/v3 and TLS v1 protocol module
-
- README .................. Overview of mod_ssl
- README.dsov.fig ......... Overview diagram of mod_ssl design
- README.dsov.ps .......... Overview diagram of mod_ssl design
- Makefile.in ............. Makefile template for Unix platform
- config.m4 ............... Autoconf stub for the Apache config mechanism
- mod_ssl.c ............... main source file containing API structures
- mod_ssl.h ............... common header file of mod_ssl
- ssl_engine_config.c ..... module configuration handling
- ssl_engine_dh.c ......... DSA/DH support
- ssl_engine_init.c ....... module initialization
- ssl_engine_io.c ......... I/O support
- ssl_engine_kernel.c ..... SSL engine kernel
- ssl_engine_log.c ........ logfile support
- ssl_engine_mutex.c ...... mutual exclusion support
- ssl_engine_pphrase.c .... pass-phrase handling
- ssl_engine_rand.c ....... PRNG support
- ssl_engine_vars.c ....... Variable Expansion support
- ssl_expr.c .............. expression handling main source
- ssl_expr.h .............. expression handling common header
- ssl_expr_scan.c ......... expression scanner automaton (pre-generated)
- ssl_expr_scan.l ......... expression scanner source
- ssl_expr_parse.c ........ expression parser automaton (pre-generated)
- ssl_expr_parse.h ........ expression parser header (pre-generated)
- ssl_expr_parse.y ........ expression parser source
- ssl_expr_eval.c ......... expression machine evaluation
- ssl_scache.c ............ session cache abstraction layer
- ssl_scache_dbm.c ........ session cache via DBM file
- ssl_scache_shmcb.c ...... session cache via shared memory cyclic buffer
- ssl_scache_dc.c ......... session cache offloading via 'distcache'
- ssl_util.c .............. utility functions
- ssl_util_ssl.c .......... the OpenSSL companion source
- ssl_util_ssl.h .......... the OpenSSL companion header
- ssl_util_table.c ........ the hash table library source
- ssl_util_table.h ........ the hash table library header
-
- test/ ................... not distributed with released source tarballs
-
-os/ .....................
-
- beos/ ...................
-
- bs2000/ .................
-
- netware/ ................
-
- os2/ ....................
-
- tpf/ ....................
-
- samples/ ................
-
- unix/ ...................
-
- win32/ ..................
-
-server/ .................
-
- mpm/ ....................
-
- beos/ ...................
-
- experimental/ ...........
-
- leader/ .................
-
- perchild/ ...............
-
- threadpool/ .............
-
- mpmt_os2/ ...............
-
- netware/ ................
-
- prefork/ ................
-
- winnt/ ..................
-
- worker/ .................
-
-srclib/ ................... Additional Libraries
-
- apr/ ...................... SEE srclib/apr/LAYOUT
-
- apr-util/ ................. SEE srclib/apr/LAYOUT
-
- pcre/ .....................
-
- doc/ ......................
-
- testdata/ .................
-
-support/ ................ Sources for Support Binaries
-
- SHA1/ .................. Ancient SHA1 password conversion utilities
-
- win32/ ................. Win32-only Support Applications
-
-test/ ................... not distributed with released source tarballs
-
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 7b69c6227f..0000000000
--- a/LICENSE
+++ /dev/null
@@ -1,678 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
-
-APACHE HTTP SERVER SUBCOMPONENTS:
-
-The Apache HTTP Server includes a number of subcomponents with
-separate copyright notices and license terms. Your use of the source
-code for the these subcomponents is subject to the terms and
-conditions of the following licenses.
-
-For the mod_mime_magic component:
-
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Group in July
- * 1997. Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Group.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix. Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- */
-
-
-For the modules\mappers\mod_imap.c component:
-
- "macmartinized" polygon code copyright 1992 by Eric Haines, erich@eye.com
-
-For the server\util_md5.c component:
-
-/************************************************************************
- * NCSA HTTPd Server
- * Software Development Group
- * National Center for Supercomputing Applications
- * University of Illinois at Urbana-Champaign
- * 605 E. Springfield, Champaign, IL 61820
- * httpd@ncsa.uiuc.edu
- *
- * Copyright (C) 1995, Board of Trustees of the University of Illinois
- *
- ************************************************************************
- *
- * md5.c: NCSA HTTPd code which uses the md5c.c RSA Code
- *
- * Original Code Copyright (C) 1994, Jeff Hostetler, Spyglass, Inc.
- * Portions of Content-MD5 code Copyright (C) 1993, 1994 by Carnegie Mellon
- * University (see Copyright below).
- * Portions of Content-MD5 code Copyright (C) 1991 Bell Communications
- * Research, Inc. (Bellcore) (see Copyright below).
- * Portions extracted from mpack, John G. Myers - jgm+@cmu.edu
- * Content-MD5 Code contributed by Martin Hamilton (martin@net.lut.ac.uk)
- *
- */
-
-
-/* these portions extracted from mpack, John G. Myers - jgm+@cmu.edu */
-/* (C) Copyright 1993,1994 by Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of Carnegie
- * Mellon University not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. Carnegie Mellon University makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
- * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
- * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)
- *
- * Permission to use, copy, modify, and distribute this material
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice and this permission notice
- * appear in all copies, and that the name of Bellcore not be
- * used in advertising or publicity pertaining to this
- * material without the specific, prior written permission
- * of an authorized representative of Bellcore. BELLCORE
- * MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
- * OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS",
- * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
- */
-
-For the srclib\apr\include\apr_md5.h component:
-/*
- * This is work is derived from material Copyright RSA Data Security, Inc.
- *
- * The RSA copyright statement and Licence for that original material is
- * included below. This is followed by the Apache copyright statement and
- * licence for the modifications made to that material.
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-For the srclib\apr\passwd\apr_md5.c component:
-
-/*
- * This is work is derived from material Copyright RSA Data Security, Inc.
- *
- * The RSA copyright statement and Licence for that original material is
- * included below. This is followed by the Apache copyright statement and
- * licence for the modifications made to that material.
- */
-
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-/*
- * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0
- * MD5 crypt() function, which is licenced as follows:
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- */
-
-For the srclib\apr-util\crypto\apr_md4.c component:
-
- * This is derived from material copyright RSA Data Security, Inc.
- * Their notice is reproduced below in its entirety.
- *
- * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- * rights reserved.
- *
- * License to copy and use this software is granted provided that it
- * is identified as the "RSA Data Security, Inc. MD4 Message-Digest
- * Algorithm" in all material mentioning or referencing this software
- * or this function.
- *
- * License is also granted to make and use derivative works provided
- * that such works are identified as "derived from the RSA Data
- * Security, Inc. MD4 Message-Digest Algorithm" in all material
- * mentioning or referencing the derived work.
- *
- * RSA Data Security, Inc. makes no representations concerning either
- * the merchantability of this software or the suitability of this
- * software for any particular purpose. It is provided "as is"
- * without express or implied warranty of any kind.
- *
- * These notices must be retained in any copies of any part of this
- * documentation and/or software.
- */
-
-For the srclib\apr-util\include\apr_md4.h component:
-
- *
- * This is derived from material copyright RSA Data Security, Inc.
- * Their notice is reproduced below in its entirety.
- *
- * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- * rights reserved.
- *
- * License to copy and use this software is granted provided that it
- * is identified as the "RSA Data Security, Inc. MD4 Message-Digest
- * Algorithm" in all material mentioning or referencing this software
- * or this function.
- *
- * License is also granted to make and use derivative works provided
- * that such works are identified as "derived from the RSA Data
- * Security, Inc. MD4 Message-Digest Algorithm" in all material
- * mentioning or referencing the derived work.
- *
- * RSA Data Security, Inc. makes no representations concerning either
- * the merchantability of this software or the suitability of this
- * software for any particular purpose. It is provided "as is"
- * without express or implied warranty of any kind.
- *
- * These notices must be retained in any copies of any part of this
- * documentation and/or software.
- */
-
-
-For the srclib\apr-util\test\testdbm.c component:
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * This file came from the SDBM package (written by oz@nexus.yorku.ca).
- * That package was under public domain. This file has been ported to
- * APR, updated to ANSI C and other, newer idioms, and added to the Apache
- * codebase under the above copyright and license.
- */
-
-
-For the srclib\apr-util\test\testmd4.c component:
-
- *
- * This is derived from material copyright RSA Data Security, Inc.
- * Their notice is reproduced below in its entirety.
- *
- * Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
- * rights reserved.
- *
- * RSA Data Security, Inc. makes no representations concerning either
- * the merchantability of this software or the suitability of this
- * software for any particular purpose. It is provided "as is"
- * without express or implied warranty of any kind.
- *
- * These notices must be retained in any copies of any part of this
- * documentation and/or software.
- */
-
-For the srclib\apr-util\xml\expat\conftools\install-sh component:
-
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-
-For the srclib\pcre\install-sh component:
-
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-
-For the pcre component:
-
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2001 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software which you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
- then the terms of that licence shall supersede any condition above with
- which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
-
-End PCRE LICENCE
-
-
-For the test\zb.c component:
-
-/* ZeusBench V1.01
- ===============
-
-This program is Copyright (C) Zeus Technology Limited 1996.
-
-This program may be used and copied freely providing this copyright notice
-is not removed.
-
-This software is provided "as is" and any express or implied waranties,
-including but not limited to, the implied warranties of merchantability and
-fitness for a particular purpose are disclaimed. In no event shall
-Zeus Technology Ltd. be liable for any direct, indirect, incidental, special,
-exemplary, or consequential damaged (including, but not limited to,
-procurement of substitute good or services; loss of use, data, or profits;
-or business interruption) however caused and on theory of liability. Whether
-in contract, strict liability or tort (including negligence or otherwise)
-arising in any way out of the use of this software, even if advised of the
-possibility of such damage.
-
- Written by Adam Twiss (adam@zeus.co.uk). March 1996
-
-Thanks to the following people for their input:
- Mike Belshe (mbelshe@netscape.com)
- Michael Campanella (campanella@stevms.enet.dec.com)
-
-*/
-
-For the expat xml parser component:
-
-Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
- and Clark Cooper
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-====================================================================
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index 7af3ca6cc9..0000000000
--- a/Makefile.in
+++ /dev/null
@@ -1,211 +0,0 @@
-
-SUBDIRS = srclib os server modules support
-CLEAN_SUBDIRS = test
-
-PROGRAM_NAME = $(progname)
-PROGRAM_SOURCES = modules.c
-PROGRAM_LDADD = $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
-PROGRAM_DEPENDENCIES = \
- $(BUILTIN_LIBS) \
- $(MPM_LIB) \
- server/libmain.la \
- os/$(OS_DIR)/libos.la
-
-PROGRAMS = $(PROGRAM_NAME)
-TARGETS = $(PROGRAMS) $(shared_build) $(other_targets)
-INSTALL_TARGETS = install-conf install-htdocs install-error install-icons \
- install-other install-cgi install-include install-suexec install-man \
- install-build
-
-DISTCLEAN_TARGETS = include/ap_config_auto.h include/ap_config_layout.h \
- modules.c config.cache config.log config.status build/config_vars.mk \
- build/rules.mk docs/conf/httpd-std.conf docs/conf/ssl-std.conf shlibtool
-EXTRACLEAN_TARGETS = configure include/ap_config_auto.h.in generated_lists \
- httpd.spec
-
-include $(top_builddir)/build/rules.mk
-include $(top_srcdir)/build/program.mk
-
-install-conf:
- @echo Installing configuration files ; \
- if [ ! -d $(DESTDIR)$(sysconfdir) ]; then \
- $(MKINSTALLDIRS) $(DESTDIR)$(sysconfdir) ; \
- fi ; \
- cd $(top_srcdir)/docs/conf; \
- for i in mime.types magic; do \
- if test ! -f $(DESTDIR)$(sysconfdir)/$$i; then \
- $(INSTALL_DATA) $$i $(DESTDIR)$(sysconfdir); \
- fi; \
- done; \
- for j in $(top_srcdir)/docs/conf $(top_builddir)/docs/conf ; do \
- cd $$j ; \
- for i in *-std*.conf; do \
- ( \
- n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
- if test $$n_lm -eq 0 -o "x$(DSO_MODULES)" = "x"; then \
- sed -e 's#@@ServerRoot@@#$(prefix)#g' \
- -e 's#@@Port@@#$(PORT)#g' \
- -e '/@@LoadModule@@/d' \
- < $$i; \
- else \
- sed -n -e '/@@LoadModule@@/q' \
- -e 's#@@ServerRoot@@#$(prefix)#g' \
- -e 's#@@Port@@#$(PORT)#g' \
- -e 'p' \
- < $$i; \
- for j in $(DSO_MODULES) "^EOL^"; do \
- if test "x$$j" = "xssl"; then \
- echo "<IfDefine SSL>"; \
- fi; \
- if test $$j != "^EOL^"; then \
- echo "LoadModule $${j}_module $(rel_libexecdir)/mod_$${j}.so"; \
- fi; \
- if test "x$$j" = "xssl"; then \
- echo "</IfDefine>"; \
- fi; \
- done; \
- sed -e '1,/@@LoadModule@@/d' \
- -e '/@@LoadModule@@/d' \
- -e 's#@@ServerRoot@@#$(prefix)#g' \
- -e 's#@@Port@@#$(PORT)#g' \
- < $$i; \
- fi \
- ) > $(DESTDIR)$(sysconfdir)/$$i; \
- chmod 0644 $(DESTDIR)$(sysconfdir)/$$i; \
- file=`echo $$i|sed s/-std//`; \
- if [ "$$file" = "httpd.conf" ]; then \
- file=`echo $$file|sed s/.*.conf/$(PROGRAM_NAME).conf/`; \
- fi; \
- if test "$$file" != "$$i" && test ! -f $(DESTDIR)$(sysconfdir)/$$file; then \
- $(INSTALL_DATA) $(DESTDIR)$(sysconfdir)/$$i $(DESTDIR)$(sysconfdir)/$$file; \
- fi; \
- done ; \
- done ; \
- if test -f "$(builddir)/envvars-std"; then \
- cp -p envvars-std $(DESTDIR)$(sbindir); \
- if test ! -f $(DESTDIR)$(sbindir)/envvars; then \
- cp -p envvars-std $(DESTDIR)$(sbindir)/envvars ; \
- fi ; \
- fi
-
-install-build:
- @echo Installing build system files
- @test -d $(DESTDIR)$(installbuilddir) || $(MKINSTALLDIRS) $(DESTDIR)$(installbuilddir)
- @cp $(top_srcdir)/build/*.mk $(DESTDIR)$(installbuilddir); \
- cp build/*.mk $(DESTDIR)$(installbuilddir); \
- sed 's#LIBTOOL = \(.*\)#LIBTOOL = $(SHELL) $(installbuilddir)/libtool $(LTFLAGS)#' \
- build/config_vars.mk > $(DESTDIR)$(installbuilddir)/config_vars.mk; \
- cp $(top_srcdir)/build/instdso.sh $(DESTDIR)$(installbuilddir); \
- cp $(top_builddir)/config.nice $(DESTDIR)$(installbuilddir);
-
-htdocs-srcdir = $(top_srcdir)/docs/docroot
-
-docs::
- mkdir -p ./docs/api
- srclib/apr/build/scandoc.pl -i./build/default.pl -p./docs/api/ ./include/*.h
-
-dox::
- doxygen $(top_srcdir)/docs/doxygen.conf
-
-install-htdocs:
- -@if [ -d $(DESTDIR)$(htdocsdir) ]; then \
- echo "[PRESERVING EXISTING HTDOCS SUBDIR: $(DESTDIR)$(htdocsdir)]"; \
- else \
- echo Installing HTML documents ; \
- $(MKINSTALLDIRS) $(DESTDIR)$(htdocsdir) ; \
- test -d $(htdocs-srcdir) && (cd $(htdocs-srcdir) && cp -rp * $(DESTDIR)$(htdocsdir)) ; \
- cd $(DESTDIR)$(htdocsdir) && find . -name "CVS" -type d -print | xargs rm -rf 2>/dev/null || true; \
- fi
-
-install-error:
- -@if [ -d $(DESTDIR)$(errordir) ]; then \
- echo "[PRESERVING EXISTING ERROR SUBDIR: $(DESTDIR)$(errordir)]"; \
- else \
- echo Installing error documents ; \
- $(MKINSTALLDIRS) $(DESTDIR)$(errordir) ; \
- cd $(top_srcdir)/docs/error && cp -rp * $(DESTDIR)$(errordir) ; \
- test "x$(errordir)" != "x" && cd $(DESTDIR)$(errordir) && find . -name "CVS" -type d -print | xargs rm -rf 2>/dev/null || true; \
- fi
-
-install-icons:
- -@if [ -d $(DESTDIR)$(iconsdir) ]; then \
- echo "[PRESERVING EXISTING ICONS SUBDIR: $(DESTDIR)$(iconsdir)]"; \
- else \
- echo Installing icons ; \
- $(MKINSTALLDIRS) $(DESTDIR)$(iconsdir) ; \
- cd $(top_srcdir)/docs/icons && cp -rp * $(DESTDIR)$(iconsdir) ; \
- test "x$(iconsdir)" != "x" && cd $(DESTDIR)$(iconsdir) && find . -name "CVS" -type d -print | xargs rm -rf 2>/dev/null || true; \
- fi
-
-install-cgi:
- -@if [ -d $(DESTDIR)$(cgidir) ];then \
- echo "[PRESERVING EXISTING CGI SUBDIR: $(DESTDIR)$(cgidir)]"; \
- else \
- echo Installing CGIs ; \
- $(MKINSTALLDIRS) $(DESTDIR)$(cgidir) ; \
- cd $(top_srcdir)/docs/cgi-examples && cp -rp * $(DESTDIR)$(cgidir) ; \
- test "x$(cgidir)" != "x" && cd $(DESTDIR)$(cgidir) && find . -name "CVS" -type d -print | xargs rm -rf 2>/dev/null || true; \
- fi
-
-install-other:
- @test -d $(DESTDIR)$(logfiledir) || $(MKINSTALLDIRS) $(DESTDIR)$(logfiledir)
- @test -d $(DESTDIR)$(runtimedir) || $(MKINSTALLDIRS) $(DESTDIR)$(runtimedir)
- @for ext in dll x; do \
- file=apachecore.$$ext; \
- if test -f $$file; then \
- cp -p $$file $(DESTDIR)$(libdir); \
- fi; \
- done; \
- file=httpd.dll; \
- if test -f $$file; then \
- cp -p $$file $(DESTDIR)$(bindir); \
- fi;
-
-install-include:
- @echo Installing header files
- @test -d $(DESTDIR)$(includedir) || $(MKINSTALLDIRS) $(DESTDIR)$(includedir)
- @cp -p include/*.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/include/*.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/os/$(OS_DIR)/os.h $(DESTDIR)$(includedir)
- @if test -f $(srcdir)/os/$(OS_DIR)/os-inline.c; then \
- cp -p $(srcdir)/os/$(OS_DIR)/os-inline.c $(DESTDIR)$(includedir); \
- fi;
- @cp -p $(srcdir)/server/mpm/$(MPM_SUBDIR_NAME)/*.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/aaa/mod_auth.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/dav/main/mod_dav.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/filters/mod_include.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/generators/mod_cgi.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/generators/mod_status.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/loggers/mod_log_config.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/http/mod_core.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/proxy/mod_proxy.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/modules/ssl/mod_ssl.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/srclib/pcre/pcre*.h $(DESTDIR)$(includedir)
- @cp -p $(srcdir)/os/$(OS_DIR)/*.h $(DESTDIR)$(includedir)
- @chmod 644 $(DESTDIR)$(includedir)/*.h
-
-install-man:
- @echo Installing man pages and online manual
- @test -d $(DESTDIR)$(mandir) || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)
- @test -d $(DESTDIR)$(mandir)/man1 || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1
- @test -d $(DESTDIR)$(mandir)/man8 || $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man8
- @test -d $(DESTDIR)$(manualdir) || $(MKINSTALLDIRS) $(DESTDIR)$(manualdir)
- @cp -p $(top_srcdir)/docs/man/*.1 $(DESTDIR)$(mandir)/man1
- @cp -p $(top_srcdir)/docs/man/*.8 $(DESTDIR)$(mandir)/man8
- @(cd $(top_srcdir)/docs/manual && cp -rp * $(DESTDIR)$(manualdir))
- @(cd $(DESTDIR)$(manualdir) && find . -name "CVS" -type d -print | xargs rm -rf 2>/dev/null ) || true
-
-install-suexec:
- @if test -f $(builddir)/support/suexec; then \
- test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir); \
- $(INSTALL_PROGRAM) $(top_builddir)/support/suexec $(DESTDIR)$(sbindir); \
- chmod 4755 $(DESTDIR)$(sbindir)/suexec; \
- fi
-
-suexec:
- cd support && $(MAKE) suexec
-
-x-local-distclean:
- @rm -rf autom4te.cache
-
-include $(top_srcdir)/os/os2/core.mk
diff --git a/Makefile.win b/Makefile.win
deleted file mode 100644
index 72b60ed84f..0000000000
--- a/Makefile.win
+++ /dev/null
@@ -1,683 +0,0 @@
-# Makefile for Windows NT and Windows 95/98/2000
-
-# Targets are:
-# _apacher - build Apache in Release mode
-# _apached - build Apache in Debug mode
-# installr - build and install a Release build
-# installd - build and install a Debug build
-# clean - remove (most) generated files
-# _cleanr - remove (most) files generated by a Release build
-# _cleand - remove (most) files generated by a Debug build
-# _browse - build the browse info file
-#
-# The following install defaults may be customized;
-#
-# Option Default
-# INSTDIR \Apache2
-# PORT 80
-# SERVERNAME localhost
-#
-# For example;
-#
-# nmake /f Makefile.win PORT=80 INSTDIR="d:\Program Files\Apache" installr
-#
-# Be aware that certain awk's will not accept backslahed names,
-# so the server root should be given in forward slashes (quoted),
-# preferably with the drive designation!
-
-default: _apacher
-
-!IF ("$(CTARGET)" == "") && EXIST("Apache.sln")
-CTARGET=/build
-!ENDIF
-
-!IF !EXIST("srclib\apr") || !EXIST("srclib\apr-util") || !EXIST("srclib\apr-iconv")
-!MESSAGE Please check out or download and unpack the Apache Portability Runtime
-!MESSAGE sources (apr, apr-iconv and apr-util) into your $(INSTDIR)\srclib dir.
-!MESSAGE Apache cannot build without these libraries!
-!MESSAGE
-!ERROR Need $(INSTDIR)\srclib\ apr, apr-iconv and apr-util
-!ENDIF
-
-# Note; _tryssl: is only used by the msvc developer studio environment to 'fix up'
-# the build, since conditional dependencies aren't supported.
-#
-!IF EXIST("srclib\openssl")
-!IF "$(LONG)" == "Debug"
-SSLBIN=out32dll.dbg
-!ELSE
-SSLBIN=out32dll
-!ENDIF
-
-_tryssl:
-!IF EXIST("modules\ssl\mod_ssl.mak")
- cd modules\ssl
- $(MAKE) $(MAKEOPT) -f mod_ssl.mak CFG="mod_ssl - Win32 $(LONG)" RECURSE=0 .\$(LONG)\mod_ssl.so
- cd ..\..
- cd support
- $(MAKE) $(MAKEOPT) -f abs.mak CFG="abs - Win32 $(LONG)" RECURSE=0 .\$(LONG)\abs.exe
- cd ..
-!ELSEIF EXIST("Apache.sln")
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project mod_ssl
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project abs
-!ELSE
- @msdev Apache.dsw /USEENV /MAKE \
- "mod_ssl - Win32 $(LONG)" \
- "abs - Win32 $(LONG)" /NORECURSE $(CTARGET)
-!ENDIF
-
-!ELSE
-# NOT EXIST("srclib\openssl")
-
-_tryssl:
- @echo -----
- @echo mod_ssl and ab/ssl will not build unless openssl is installed
- @echo in srclib\openssl. They must be precompiled using the
- @echo ms/ntdll.mak file, see srclib\openssl\INSTALL.W32. The most
- @echo recent version confirmed to build with mod_ssl and ab is 0.9.6h.
- @echo Available from http://www.openssl.org/
-!ENDIF
-
-!IF EXIST("srclib\zlib")
-
-_tryzlib:
-!IF EXIST("modules\filters\mod_deflate.mak")
- cd modules\filters
- $(MAKE) $(MAKEOPT) -f mod_deflate.mak CFG="mod_deflate - Win32 $(LONG)" RECURSE=0 .\$(LONG)\mod_deflate.so
- cd ..\..
-!ELSEIF EXIST("Apache.sln")
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project mod_deflate
-!ELSE
- @msdev Apache.dsw /USEENV /MAKE \
- "mod_deflate - Win32 $(LONG)" /NORECURSE $(CTARGET)
-!ENDIF
-
-!ELSE
-# NOT EXIST("srclib\zlib")
-
-_tryzlib:
- @echo -----
- @echo mod_deflate will not build unless zlib is installed in srclib\zlib.
- @echo zlib does not need to be built, we compile the sources directly.
- @echo Available from http://www.gzip.org/zlib/
-
-!ENDIF
-
-!IF "$(INSTDIR)" == ""
-INSTDIR=\Apache2
-!ENDIF
-!IF "$(SERVERNAME)" == ""
-SERVERNAME=localhost
-!ENDIF
-!IF "$(PORT)" == ""
-PORT=80
-!ENDIF
-
-!IF "$(LONG)" == ""
-!MESSAGE
-!MESSAGE INSTDIR = $(INSTDIR)
-!MESSAGE SERVERNAME = $(SERVERNAME)
-!MESSAGE PORT = $(PORT)
-!MESSAGE
-!MESSAGE To change these options use 'nmake /f Makefile.win [option=value]'
-!MESSAGE Example: nmake /f Makefile.win PORT=8080
-!MESSAGE
-!MESSAGE
-!ENDIF
-
-!IFNDEF MAKEOPT
-# Only default the behavior if MAKEOPT= is omitted
-!IF "$(MAKE)" == "NMAKE"
-# Microsoft NMake options
-MAKEOPT=-nologo
-!ELSEIF "($MAKE)" == "make"
-# Borland make options? Not really supported (yet)
-MAKEOPT=-s -N
-!ENDIF
-!ENDIF
-
-_dummy:
-
-_browse:
- cd Browse
- bscmake.exe -nologo -Iu -o Apache.bsc *.sbr
- cd ..
-
-_apacher:
- @$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release _build
-
-_apached:
- @$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug _build
-
-installr:
- @$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release _build _install
-
-installd:
- @$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug _build _install
-
-clean: _cleanr _cleand
- -if exist Browse\. rd /s Browse < << > nul
-y
-<<
-
-!IF EXIST("Apache.mak")
-
-_cleanr:
- $(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release CTARGET=CLEAN _build
-
-_cleand:
- $(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug CTARGET=CLEAN _build
-
-_build:
- echo Building Win32 $(LONG) targets ($(SHORT) suffixes)
- cd srclib\apr
- $(MAKE) $(MAKEOPT) -f apr.mak CFG="apr - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f libapr.mak CFG="libapr - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd srclib\apr-iconv
- $(MAKE) $(MAKEOPT) -f apriconv.mak CFG="apriconv - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f libapriconv.mak CFG="libapriconv - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-!IF "$(CTARGET)" == "CLEAN"
- $(MAKE) $(MAKEOPT) /f build\modules.mk.win clean \
- BUILD_MODE=$(LONG) BIND_MODE=shared API_SOURCE=.
-!ELSE
- cd ccs
- $(MAKE) /nologo /f Makefile.win all \
- BUILD_MODE=$(LONG) BIND_MODE=shared
- cd ..\ces
- $(MAKE) /nologo /f Makefile.win all \
- BUILD_MODE=$(LONG) BIND_MODE=shared
- cd ..
-!ENDIF
- cd ..\..
- cd srclib\apr-util\uri
- $(MAKE) $(MAKEOPT) -f gen_uri_delims.mak CFG="gen_uri_delims - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..\..
- cd srclib\apr-util\xml\expat\lib
- $(MAKE) $(MAKEOPT) -f xml.mak CFG="xml - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..\..
- $(MAKE) $(MAKEOPT) -f aprutil.mak CFG="aprutil - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f libaprutil.mak CFG="libaprutil - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd srclib\pcre
- $(MAKE) $(MAKEOPT) -f dftables.mak CFG="dftables - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f pcre.mak CFG="pcre - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f pcreposix.mak CFG="pcreposix - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd server
- $(MAKE) $(MAKEOPT) -f gen_test_char.mak CFG="gen_test_char - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..
- $(MAKE) $(MAKEOPT) -f libhttpd.mak CFG="libhttpd - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f Apache.mak CFG="Apache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd modules\aaa
- $(MAKE) $(MAKEOPT) -f mod_auth_basic.mak CFG="mod_auth_basic - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_auth_digest.mak CFG="mod_auth_digest - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authn_anon.mak CFG="mod_authn_anon - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authn_dbm.mak CFG="mod_authn_dbm - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authn_default.mak CFG="mod_authn_default - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authn_file.mak CFG="mod_authn_file - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authz_dbm.mak CFG="mod_authz_dbm - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authz_default.mak CFG="mod_authz_default - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authz_groupfile.mak CFG="mod_authz_groupfile - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authz_host.mak CFG="mod_authz_host - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_authz_user.mak CFG="mod_authz_user - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\arch\win32
- $(MAKE) $(MAKEOPT) -f mod_isapi.mak CFG="mod_isapi - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..\..
- cd modules\cache
- $(MAKE) $(MAKEOPT) -f mod_file_cache.mak CFG="mod_file_cache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\dav\main
- $(MAKE) $(MAKEOPT) -f mod_dav.mak CFG="mod_dav - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..\..
- cd modules\dav\fs
- $(MAKE) $(MAKEOPT) -f mod_dav_fs.mak CFG="mod_dav_fs - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..\..
- cd modules\experimental
- $(MAKE) $(MAKEOPT) -f mod_cache.mak CFG="mod_cache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_charset_lite.mak CFG="mod_charset_lite - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_mem_cache.mak CFG="mod_mem_cache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_disk_cache.mak CFG="mod_disk_cache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f util_ldap.mak CFG="util_ldap - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_auth_ldap.mak CFG="mod_auth_ldap - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\filters
-!IF EXIST("srclib\zlib")
- $(MAKE) $(MAKEOPT) -f mod_deflate.mak CFG="mod_deflate - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-!ENDIF
- $(MAKE) $(MAKEOPT) -f mod_ext_filter.mak CFG="mod_ext_filter - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_include.mak CFG="mod_include - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\generators
- $(MAKE) $(MAKEOPT) -f mod_asis.mak CFG="mod_asis - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_autoindex.mak CFG="mod_autoindex - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_cgi.mak CFG="mod_cgi - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_info.mak CFG="mod_info - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_status.mak CFG="mod_status - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\http
- $(MAKE) $(MAKEOPT) -f mod_mime.mak CFG="mod_mime - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\loggers
- $(MAKE) $(MAKEOPT) -f mod_log_config.mak CFG="mod_log_config - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_log_forensic.mak CFG="mod_log_forensic - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_logio.mak CFG="mod_logio - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\mappers
- $(MAKE) $(MAKEOPT) -f mod_actions.mak CFG="mod_actions - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_alias.mak CFG="mod_alias - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_dir.mak CFG="mod_dir - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_imap.mak CFG="mod_imap - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_negotiation.mak CFG="mod_negotiation - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_rewrite.mak CFG="mod_rewrite - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_speling.mak CFG="mod_speling - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_userdir.mak CFG="mod_userdir - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_vhost_alias.mak CFG="mod_vhost_alias - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\metadata
- $(MAKE) $(MAKEOPT) -f mod_cern_meta.mak CFG="mod_cern_meta - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_env.mak CFG="mod_env - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_expires.mak CFG="mod_expires - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_headers.mak CFG="mod_headers - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_ident.mak CFG="mod_ident - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_mime_magic.mak CFG="mod_mime_magic - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_setenvif.mak CFG="mod_setenvif - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_unique_id.mak CFG="mod_unique_id - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_usertrack.mak CFG="mod_usertrack - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_version.mak CFG="mod_version - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
- cd modules\proxy
- $(MAKE) $(MAKEOPT) -f mod_proxy.mak CFG="mod_proxy - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_proxy_connect.mak CFG="mod_proxy_connect - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_proxy_ftp.mak CFG="mod_proxy_ftp - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f mod_proxy_http.mak CFG="mod_proxy_http - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
-!IF EXIST("srclib\openssl")
- cd modules\ssl
- $(MAKE) $(MAKEOPT) -f mod_ssl.mak CFG="mod_ssl - Win32 $(LONG)" RECURSE=0 $(CTARGET) .\$(LONG)\mod_ssl.so
- cd ..\..
- cd support
- $(MAKE) $(MAKEOPT) -f abs.mak CFG="abs - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..
-!ENDIF
- cd support
- $(MAKE) $(MAKEOPT) -f ab.mak CFG="ab - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f htdbm.mak CFG="htdbm - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f htdigest.mak CFG="htdigest - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f htpasswd.mak CFG="htpasswd - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f logresolve.mak CFG="logresolve - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f rotatelogs.mak CFG="rotatelogs - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..
- cd support\win32
- $(MAKE) $(MAKEOPT) -f ApacheMonitor.mak CFG="ApacheMonitor - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- $(MAKE) $(MAKEOPT) -f wintty.mak CFG="wintty - Win32 $(LONG)" RECURSE=0 $(CTARGET)
- cd ..\..
-
-!ELSEIF EXIST("Apache.sln")
-
-_cleanr:
- $(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release CTARGET="/clean" _build
-
-_cleand:
- $(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug CTARGET="/clean" _build
-
-_build:
- echo Building Win32 $(LONG) targets ($(SHORT) suffixes)
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project BuildBin
-!IF EXIST("srclib\openssl")
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project mod_ssl
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project abs
-!ENDIF
-!IF EXIST("srclib\zlib")
- devenv Apache.sln /useenv $(CTARGET) $(LONG) /project mod_deflate
-!ENDIF
-
-!ELSE
-
-_cleanr:
- @$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release CTARGET="/CLEAN" _build
-
-_cleand:
- @$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug CTARGET="/CLEAN" _build
-
-_build:
- @echo Building Win32 $(LONG) targets ($(SHORT) suffixes)
- @msdev Apache.dsw /USEENV /MAKE \
- "BuildBin - Win32 $(LONG)" $(CTARGET)
-!IF "$(CTARGET)" == "/CLEAN"
- @cd srclib\apr-iconv
- @$(MAKE) $(MAKEOPT) /f build\modules.mk.win clean \
- BUILD_MODE=$(LONG) BIND_MODE=shared API_SOURCE=.
- @cd ..\..
-!ENDIF
-!IF EXIST("srclib\openssl")
- @msdev Apache.dsw /USEENV /MAKE \
- "mod_ssl - Win32 $(LONG)" \
- "abs - Win32 $(LONG)" /NORECURSE $(CTARGET)
-!ENDIF
-!IF EXIST("srclib\zlib")
- @msdev Apache.dsw /USEENV /MAKE \
- "mod_deflate - Win32 $(LONG)" /NORECURSE $(CTARGET)
-!ENDIF
-
-!ENDIF
-
-
-_copybin:
- copy $(LONG)\Apache.$(src_exe) "$(inst_exe)" <.y
- copy $(LONG)\libhttpd.$(src_dll) "$(inst_dll)" <.y
- copy srclib\apr\$(LONG)\libapr-1.$(src_dll) "$(inst_dll)" <.y
- copy srclib\apr-iconv\$(LONG)\libapriconv-1.$(src_dll) "$(inst_dll)" <.y
- copy srclib\apr-util\$(LONG)\libaprutil-1.$(src_dll) "$(inst_dll)" <.y
- copy modules\aaa\$(LONG)\mod_auth_basic.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_auth_digest.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authn_anon.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authn_dbm.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authn_default.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authn_file.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authz_dbm.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authz_default.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authz_groupfile.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authz_host.$(src_so) "$(inst_so)" <.y
- copy modules\aaa\$(LONG)\mod_authz_user.$(src_so) "$(inst_so)" <.y
- copy modules\arch\win32\$(LONG)\mod_isapi.$(src_so) "$(inst_so)" <.y
- copy modules\cache\$(LONG)\mod_file_cache.$(src_so) "$(inst_so)" <.y
- copy modules\dav\fs\$(LONG)\mod_dav_fs.$(src_so) "$(inst_so)" <.y
- copy modules\dav\main\$(LONG)\mod_dav.$(src_so) "$(inst_so)" <.y
- copy modules\experimental\$(LONG)\mod_cache.$(src_so) "$(inst_so)" <.y
- copy modules\experimental\$(LONG)\mod_charset_lite.$(src_so) "$(inst_so)" <.y
- copy modules\experimental\$(LONG)\mod_mem_cache.$(src_so) "$(inst_so)" <.y
- copy modules\experimental\$(LONG)\mod_disk_cache.$(src_so) "$(inst_so)" <.y
- copy modules\experimental\$(LONG)\util_ldap.$(src_so) "$(inst_so)" <.y
- copy modules\experimental\$(LONG)\mod_auth_ldap.$(src_so) "$(inst_so)" <.y
-!IF EXIST("srclib\zlib")
- copy modules\filters\$(LONG)\mod_deflate.$(src_so) "$(inst_so)" <.y
-!ENDIF
- copy modules\filters\$(LONG)\mod_ext_filter.$(src_so) "$(inst_so)" <.y
- copy modules\filters\$(LONG)\mod_include.$(src_so) "$(inst_so)" <.y
- copy modules\generators\$(LONG)\mod_asis.$(src_so) "$(inst_so)" <.y
- copy modules\generators\$(LONG)\mod_autoindex.$(src_so) "$(inst_so)" <.y
- copy modules\generators\$(LONG)\mod_cgi.$(src_so) "$(inst_so)" <.y
- copy modules\generators\$(LONG)\mod_info.$(src_so) "$(inst_so)" <.y
- copy modules\generators\$(LONG)\mod_status.$(src_so) "$(inst_so)" <.y
- copy modules\http\$(LONG)\mod_mime.$(src_so) "$(inst_so)" <.y
- copy modules\loggers\$(LONG)\mod_log_config.$(src_so) "$(inst_so)" <.y
- copy modules\loggers\$(LONG)\mod_log_forensic.$(src_so) "$(inst_so)" <.y
- copy modules\loggers\$(LONG)\mod_logio.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_actions.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_alias.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_dir.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_imap.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_negotiation.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_rewrite.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_speling.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_userdir.$(src_so) "$(inst_so)" <.y
- copy modules\mappers\$(LONG)\mod_vhost_alias.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_cern_meta.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_env.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_expires.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_headers.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_ident.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_mime_magic.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_setenvif.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_unique_id.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_usertrack.$(src_so) "$(inst_so)" <.y
- copy modules\metadata\$(LONG)\mod_version.$(src_so) "$(inst_so)" <.y
- copy modules\proxy\$(LONG)\mod_proxy.$(src_so) "$(inst_so)" <.y
- copy modules\proxy\$(LONG)\mod_proxy_connect.$(src_so) "$(inst_so)" <.y
- copy modules\proxy\$(LONG)\mod_proxy_ftp.$(src_so) "$(inst_so)" <.y
- copy modules\proxy\$(LONG)\mod_proxy_http.$(src_so) "$(inst_so)" <.y
-!IF EXIST("srclib\openssl")
- copy modules\ssl\$(LONG)\mod_ssl.$(src_so) "$(inst_so)" <.y
- $(quiet)copy srclib\openssl\$(SSLBIN)\openssl.$(src_exe) "$(inst_exe)" <.y
- $(quiet)copy srclib\openssl\$(SSLBIN)\libeay32.$(src_dll) "$(inst_dll)" <.y
- $(quiet)copy srclib\openssl\$(SSLBIN)\ssleay32.$(src_dll) "$(inst_dll)" <.y
- copy support\$(LONG)\abs.$(src_exe) "$(inst_exe)\ab.$(src_exe)" <.y
-!ELSE
- copy support\$(LONG)\ab.$(src_exe) "$(inst_exe)" <.y
-!ENDIF
- copy support\$(LONG)\htdbm.$(src_exe) "$(inst_exe)" <.y
- copy support\$(LONG)\htdigest.$(src_exe) "$(inst_exe)" <.y
- copy support\$(LONG)\htpasswd.$(src_exe) "$(inst_exe)" <.y
- copy support\$(LONG)\logresolve.$(src_exe) "$(inst_exe)" <.y
- copy support\$(LONG)\rotatelogs.$(src_exe) "$(inst_exe)" <.y
- copy support\win32\$(LONG)\ApacheMonitor.$(src_exe) "$(inst_exe)" <.y
- copy support\win32\$(LONG)\wintty.$(src_exe) "$(inst_exe)" <.y
-
-# First we create the tree and populate the README so that
-# whatever happens, all licensing has already propagated.
-# Then repeatedly invoke the _copybin build to copy the
-# real binaries, then pdb symbols, anf finally dbg syms.
-# Then hit docs of various sorts, then includes and libs,
-# and finally do the .conf magic.
-#
-_install:
- echo Y >.y
- echo A >.A
- -mkdir "$(INSTDIR)"
- -mkdir "$(INSTDIR)\bin"
- -mkdir "$(INSTDIR)\bin\iconv"
- -mkdir "$(INSTDIR)\cgi-bin"
- -mkdir "$(INSTDIR)\conf"
- -mkdir "$(INSTDIR)\error"
- -mkdir "$(INSTDIR)\htdocs"
- -mkdir "$(INSTDIR)\manual"
- -mkdir "$(INSTDIR)\icons"
- -mkdir "$(INSTDIR)\include"
- -mkdir "$(INSTDIR)\lib"
- -mkdir "$(INSTDIR)\logs"
- -mkdir "$(INSTDIR)\modules"
- -mkdir "$(INSTDIR)\proxy"
- -mkdir "$(INSTDIR)\symbols"
- -mkdir "$(INSTDIR)\symbols\exe"
- -mkdir "$(INSTDIR)\symbols\dll"
- -mkdir "$(INSTDIR)\symbols\so"
- copy ABOUT_APACHE "$(INSTDIR)\ABOUT_APACHE.txt" <.y
- copy CHANGES "$(INSTDIR)\CHANGES.txt" <.y
- copy INSTALL "$(INSTDIR)\INSTALL.txt" <.y
- copy LICENSE "$(INSTDIR)\LICENSE.txt" <.y
- copy README "$(INSTDIR)\README.txt" <.y
-!IF EXIST("srclib\openssl")
- type << >> "$(INSTDIR)\README.txt"
-
- This binary distribution includes cryptographic software written by
- Eric Young (eay@cryptsoft.com), software written by Tim Hudson
- (tjh@cryptsoft.com), and software developed by the OpenSSL Project
- for use in the OpenSSL Toolkit <http://www.openssl.org/>.
-<<
- -awk -f <<script.awk < "srclib\openssl\LICENSE" >> "$(INSTDIR)\LICENSE.txt"
-BEGIN {
- print "";
- print "For the libeay32.dll, ssleay32.dll and certtool.exe components:";
- print "";
- while ( getline > 0 ) {
- print $$0;
- }
-}
-<<
- copy << + srclib\openssl\NEWS "$(INSTDIR)\OPENSSL-NEWS.txt" <.y
-
- Apache HTTP Server 2.0 Limited OpenSSL Distribution
-
- This binary distribution includes the minimal components of OpenSSL required
- to support mod_ssl for Apache HTTP Server version 2.0 (details are listed
- in OPENSSL-README.txt.) For the complete list of CHANGES to this and later
- versions of OpenSSL, please refer to the definative source,
- <http://www.openssl.org/news/changelog.html>, or see the CHANGES file in the
- full binary or source distribution package from <http://www.openssl.org/>.
-
- These OpenSSL binaries were built for distribution from the U.S. without
- support for the patented encryption methods IDEA, MDC-2 or RC5.
-
---------------------------------------------------------------------------------
-<<
- copy << + srclib\openssl\README "$(INSTDIR)\OPENSSL-README.txt" <.y
-
- Apache HTTP Server 2.0 Limited OpenSSL Distribution
-
- This binary installation of OpenSSL is a limited distribution of the documents
- OPENSSL-LICENSE.txt, OPENSSL-NEWS.txt and OPENSSL-README.txt, and the binaries
-
- libeay32.dll
- ssleay32.dll
- openssl.exe
-
- These are the minimal libraries and tools required to use mod_ssl as
- distributed with Apache HTTP Server version 2.0. No library link files,
- headers or sources are distributed with this binary distribution. Please
- refer to the <http://www.openssl.org/> site for complete source or binary
- distributions.
-
- These OpenSSL binaries were built for distribution from the U.S. without
- support for the patented encryption methods IDEA, MDC-2 or RC5.
-
- The Apache HTTP Project only supports the binary distribution of these files
- and development of the mod_ssl module. We cannot provide support assistance
- for using or configuring the OpenSSL package or these modules. Please refer
- all installation and configuration questions to the appropriate forum,
- such as the user supported lists, <http://httpd.apache.org/userslist.html>
- the Apache HTTP Server user's list or <http://www.openssl.org/support/> the
- OpenSSL support page.
-
---------------------------------------------------------------------------------
-<<
-!ENDIF
-!IF EXIST("srclib\zlib")
- type << >> "$(INSTDIR)\README.txt"
-
- This binary distribution of mod_deflate.so includes zlib compression code
- <http://www.gzip.org/zlib/> written by Jean-loup Gailly (jloup@gzip.org)
- and Mark Adler (madler@alumni.caltech.edu) .
-<<
- -awk -f <<script.awk < "srclib\zlib\README" >> "$(INSTDIR)\LICENSE.txt"
-BEGIN {
- while ( getline > 0 ) {
- if ( $$0 ~ /Copyright notice:/ ) {
- print "";
- print "For the mod_deflate zlib compression component:";
- while ( getline > 0 && $$0 !~ /^[^ ]/ ) {
- print $$0;
- }
- exit 0;
- }
- }
- exit 1;
-}
-<<
-!ENDIF
- $(MAKE) $(MAKEOPT) -f Makefile.win SHORT=$(SHORT) LONG=$(LONG) \
- _copybin src_exe=exe src_dll=dll src_so=so \
- inst_exe="$(INSTDIR)\bin" \
- inst_dll="$(INSTDIR)\bin" \
- inst_so="$(INSTDIR)\modules"
- $(MAKE) $(MAKEOPT) -f Makefile.win SHORT=$(SHORT) LONG=$(LONG) \
- _copybin src_exe=pdb src_dll=pdb src_so=pdb quiet="-" \
- inst_exe="$(INSTDIR)\bin" \
- inst_dll="$(INSTDIR)\bin" \
- inst_so="$(INSTDIR)\modules"
- cd srclib\apr-iconv
- $(MAKE) $(MAKEOPT) -f build\modules.mk.win install \
- BUILD_MODE=$(LONG) BIND_MODE=shared API_SOURCE=. \
- INSTALL_DIR="$(INSTDIR)\bin\iconv"
- cd ..\..
- copy docs\cgi-examples\printenv "$(INSTDIR)\cgi-bin\printenv.pl" <.y
- -awk -f <<script.awk "docs/cgi-examples/printenv" > "$(INSTDIR)\cgi-bin\printenv.pl"
- BEGIN {
- if ( "perl -e \"print $$^X;\"" | getline perlroot ) {
- gsub( /\\/, "/", perlroot );
- print "#!" perlroot;
- }
- }
- {
- if ( $$0 !~ /^#!/ ) {
- print $$0;
- }
- }
-<<
- xcopy docs\error "$(INSTDIR)\error" /s /d < .a
- xcopy docs\docroot "$(INSTDIR)\htdocs" /d < .a
- xcopy docs\icons "$(INSTDIR)\icons" /s /d < .a
- xcopy docs\manual "$(INSTDIR)\manual" /s /d < .a
- xcopy srclib\pcre\pcre*.h "$(INSTDIR)\include" /d < .a
- xcopy srclib\apr-util\xml\expat\lib\expat.h "$(INSTDIR)\include" /d < .a
- xcopy srclib\apr\include\*.h "$(INSTDIR)\include" /d < .a
- xcopy srclib\apr-util\include\*.h "$(INSTDIR)\include" /d < .a
- xcopy include\*.h "$(INSTDIR)\include" /d < .a
- copy srclib\apr\Lib$(SHORT)\apr-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr\Lib$(SHORT)\apr_src.pdb "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\Lib$(SHORT)\aprutil-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\Lib$(SHORT)\aprutil_src.pdb "$(INSTDIR)\lib" <.y
- copy srclib\pcre\Lib$(SHORT)\pcre.lib "$(INSTDIR)\lib" <.y
- copy srclib\pcre\Lib$(SHORT)\pcre_src.pdb "$(INSTDIR)\lib" <.y
- copy srclib\pcre\Lib$(SHORT)\pcreposix.lib "$(INSTDIR)\lib" <.y
- copy srclib\pcre\Lib$(SHORT)\pcreposix_src.pdb "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\xml\expat\lib\Lib$(SHORT)\xml.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\xml\expat\lib\Lib$(SHORT)\xml_src.pdb "$(INSTDIR)\lib" <.y
- copy srclib\apr\$(LONG)\libapr-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr\$(LONG)\libapr-1.exp "$(INSTDIR)\lib" <.y
- copy srclib\apr-iconv\$(LONG)\libapriconv-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr-iconv\$(LONG)\libapriconv-1.exp "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\$(LONG)\libaprutil-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\$(LONG)\libaprutil-1.exp "$(INSTDIR)\lib" <.y
- copy $(LONG)\libhttpd.exp "$(INSTDIR)\lib" <.y
- copy $(LONG)\libhttpd.lib "$(INSTDIR)\lib" <.y
- copy modules\dav\main\$(LONG)\mod_dav.exp "$(INSTDIR)\lib" <.y
- copy modules\dav\main\$(LONG)\mod_dav.lib "$(INSTDIR)\lib" <.y
- copy docs\conf\magic "$(INSTDIR)\conf\magic.default" <.y
- if not exist "$(INSTDIR)\conf\magic" \
- copy "$(INSTDIR)\conf\magic.default" "$(INSTDIR)\conf\magic"
- copy docs\conf\mime.types "$(INSTDIR)\conf\mime.types.default" <.y
- if not exist "$(INSTDIR)\conf\mime.types" \
- copy "$(INSTDIR)\conf\mime.types.default" "$(INSTDIR)\conf\mime.types"
- copy docs\conf\httpd-win.conf "$(INSTDIR)\conf\httpd.default.conf" <.y
- -awk -f <<script.awk "docs/conf/httpd-win.conf" "$(INSTDIR)" > "$(INSTDIR)\conf\httpd.default.conf"
- BEGIN {
- serverroot = ARGV[2];
- delete ARGV[2];
- gsub( /\\/, "/", serverroot );
- "cd" | getline root;
- gsub( /^\//, substr( root, 1, 2 ) "/", serverroot );
- }
- {
- gsub( /@@ServerRoot@@/, serverroot );
- gsub( /@@ServerName@@/, "$(SERVERNAME)" );
- gsub( /@@Port@@/, "$(PORT)" );
- print $$0;
- }
-<<
- if not exist "$(INSTDIR)\conf\httpd.conf" \
- copy "$(INSTDIR)\conf\httpd.default.conf" "$(INSTDIR)\conf\httpd.conf"
-!IF EXIST("srclib\openssl")
- copy docs\conf\ssl-std.conf.in "$(INSTDIR)\conf\ssl.default.conf" <.y
- -awk -f <<script.awk "docs/conf/ssl-std.conf.in" "$(INSTDIR)" > "$(INSTDIR)\conf\ssl.default.conf"
- BEGIN {
- serverroot = ARGV[2];
- delete ARGV[2];
- gsub( /\\/, "/", serverroot );
- "cd" | getline root;
- gsub( /^\//, substr( root, 1, 2 ) "/", serverroot );
- }
- {
- gsub( /@@ServerRoot@@/, serverroot );
- gsub( /@exp_runtimedir@/, "logs" );
- gsub( /@exp_htdocsdir@/, serverroot "/htdocs" );
- gsub( /@exp_logfiledir@/, "logs" );
- gsub( /@exp_sysconfdir@/, "conf" );
- gsub( /@exp_cgidir@/, serverroot "/cgi" );
- print $$0;
- }
-<<
- if not exist "$(INSTDIR)\conf\ssl.conf" \
- copy "$(INSTDIR)\conf\ssl.default.conf" "$(INSTDIR)\conf\ssl.conf"
-!ENDIF
- -awk -f <<script.awk "support/dbmmanage.in" >"$(INSTDIR)\bin\dbmmanage.pl"
- { if ( $$0 ~ /^BEGIN \{ @AnyDBM_File::/ ) {
- sub( /ISA = qw\(.*\)/, "ISA = qw(SDBM_File)" );
- }
- if ( $$0 !~ /^#!@perlbin@/ )
- print $$0;
- }
-<<
- del .y
- del .a
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index f074dd2219..0000000000
--- a/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
-
-Portions of this software were developed at the National Center
-for Supercomputing Applications (NCSA) at the University of
-Illinois at Urbana-Champaign.
-
-This software contains code derived from the RSA Data Security
-Inc. MD5 Message-Digest Algorithm, including various
-modifications by Spyglass Inc., Carnegie Mellon University, and
-Bell Communications Research, Inc (Bellcore).
-
-Regular expression support is provided by the PCRE library package,
-which is open source software, written by Philip Hazel, and copyright
-by the University of Cambridge, England. The original software is
-available from
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
diff --git a/NWGNUmakefile b/NWGNUmakefile
deleted file mode 100644
index 869e602ff1..0000000000
--- a/NWGNUmakefile
+++ /dev/null
@@ -1,362 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- srclib\apr \
- build \
- support \
- modules \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/modules/filters/ \
- $(AP_WORK)/modules/generators/ \
- $(AP_WORK)/modules/http/ \
- $(AP_WORK)/modules/loggers/ \
- $(AP_WORK)/modules/mappers/ \
- $(AP_WORK)/modules/proxy/ \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = Apache2
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache Web Server $(VERSION_STR)
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Apache
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-NLM_SCREEN_NAME = Apache $(VERSION_STR) for NetWare
-
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM = _LibCCheckUnload
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/Apache2.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/buildmark.o \
- $(OBJDIR)/config.o \
- $(OBJDIR)/connection.o \
- $(OBJDIR)/core.o \
- $(OBJDIR)/eoc_bucket.o \
- $(OBJDIR)/error_bucket.o \
- $(OBJDIR)/http_core.o \
- $(OBJDIR)/http_protocol.o \
- $(OBJDIR)/http_request.o \
- $(OBJDIR)/listen.o \
- $(OBJDIR)/log.o \
- $(OBJDIR)/main.o \
- $(OBJDIR)/mod_authz_host.o \
- $(OBJDIR)/mod_actions.o \
- $(OBJDIR)/mod_alias.o \
- $(OBJDIR)/mod_asis.o \
- $(OBJDIR)/mod_autoindex.o \
- $(OBJDIR)/mod_cgi.o \
- $(OBJDIR)/mod_dir.o \
- $(OBJDIR)/mod_env.o \
- $(OBJDIR)/mod_imap.o \
- $(OBJDIR)/mod_include.o \
- $(OBJDIR)/mod_log_config.o \
- $(OBJDIR)/mod_mime.o \
- $(OBJDIR)/mod_negotiation.o \
- $(OBJDIR)/mod_netware.o \
- $(OBJDIR)/mod_nw_ssl.o \
- $(OBJDIR)/mod_setenvif.o \
- $(OBJDIR)/mod_so.o \
- $(OBJDIR)/mod_userdir.o \
- $(OBJDIR)/modules.o \
- $(OBJDIR)/mpm_common.o \
- $(OBJDIR)/mpm_netware.o \
- $(OBJDIR)/pcre.o \
- $(OBJDIR)/pcreposix.o \
- $(OBJDIR)/protocol.o \
- $(OBJDIR)/provider.o \
- $(OBJDIR)/request.o \
- $(OBJDIR)/scoreboard.o \
- $(OBJDIR)/util.o \
- $(OBJDIR)/util_cfgtree.o \
- $(OBJDIR)/util_charset.o \
- $(OBJDIR)/util_debug.o \
- $(OBJDIR)/util_filter.o \
- $(OBJDIR)/util_md5.o \
- $(OBJDIR)/util_nw.o \
- $(OBJDIR)/util_script.o \
- $(OBJDIR)/util_time.o \
- $(OBJDIR)/util_xml.o \
- $(OBJDIR)/vhost.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- Libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @netware.imp \
- @$(APR)/aprlib.imp \
- @libc.imp \
- @ws2nlm.imp \
- GetCurrentAddressSpace \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- @$(NWOS)/httpd.imp \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- -copy $(OBJDIR)\Apache2.nlm $(INSTALL)\Apache2\*.*
- -copy ABOUT_APACHE $(INSTALL)\Apache2\*.*
- -copy README $(INSTALL)\Apache2\*.*
- -copy STATUS $(INSTALL)\Apache2\*.*
- -copy LICENSE $(INSTALL)\Apache2\*.*
- -copy CHANGES $(INSTALL)\Apache2\*.*
- -copy support\dbmmanage.in $(INSTALL)\Apache2\bin\dbmmanage.pl
- -copy support\logresolve.pl.in $(INSTALL)\Apache2\bin\logresolve.pl
- -awk -f build\mkconfnw.awk docs\conf\httpd-std.conf.in >$(INSTALL)\Apache2\conf\httpd.conf
- -copy docs\conf\magic $(INSTALL)\Apache2\conf\magic
- -copy docs\conf\mime.types $(INSTALL)\Apache2\conf\mime.types
- -copy docs\cgi-examples\printenv $(INSTALL)\Apache2\cgi-bin\printenv.pl
- @echo rem copying the docs directories > xc.bat
- @echo xcopy docs\error $(INSTALL)\Apache2\error $(XCOPYSW) >> xc.bat
- @echo xcopy docs\docroot $(INSTALL)\Apache2\htdocs $(XCOPYSW) >> xc.bat
- @echo xcopy docs\icons $(INSTALL)\Apache2\icons $(XCOPYSW) >> xc.bat
- @echo xcopy docs\man $(INSTALL)\Apache2\man $(XCOPYSW) >> xc.bat
- @echo xcopy docs\manual $(INSTALL)\Apache2\manual $(XCOPYSW) >> xc.bat
- $(CMD) xc.bat
- $(DEL) xc.bat
-
-
-
-installdev :: FORCE
- -copy $(subst /,\,$(AP_WORK))\include\*.h $(INSTALL)\Apache2\include\*.*
- -copy $(subst /,\,$(AP_WORK))\os\netware\*.h $(INSTALL)\Apache2\include\*.*
- -copy $(subst /,\,$(NWOS))\*.imp $(INSTALL)\Apache2\lib\*.*
- -copy $(subst /,\,$(APR))\include\*.h $(INSTALL)\Apache2\include\*.*
- -copy $(subst /,\,$(APRUTIL))\include\*.h $(INSTALL)\Apache2\include\*.*
- -copy $(subst /,\,$(APR))\*.imp $(INSTALL)\Apache2\lib\*.*
- -copy $(subst /,\,$(NWOS))\*.xdc $(INSTALL)\Apache2\lib\*.*
-
-#
-# Any specialized rules here
-#
-
-vpath %.c server:modules/arch/netware:modules/http:modules/aaa:modules/mappers
-vpath %.c modules/generators:modules/metadata:modules/filters:modules/loggers
-vpath %.c os/netware:server/mpm/netware:srclib/pcre
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/README b/README
deleted file mode 100644
index 59217a37d9..0000000000
--- a/README
+++ /dev/null
@@ -1,90 +0,0 @@
-
- Apache HTTP Server
-
- What is it?
- -----------
-
- The Apache HTTP Server is a powerful and flexible HTTP/1.1 compliant
- web server. Originally designed as a replacement for the NCSA HTTP
- Server, it has grown to be the most popular web server on the
- Internet. As a project of the Apache Software Foundation, the
- developers aim to collaboratively develop and maintain a robust,
- commercial-grade, standards-based server with freely available
- source code.
-
- The Latest Version
- ------------------
-
- Details of the latest version can be found on the Apache HTTP
- server project page under http://httpd.apache.org/.
-
- Documentation
- -------------
-
- The documentation available as of the date of this release is
- included in HTML format in the docs/manual/ directory. The most
- up-to-date documentation can be found at
- http://httpd.apache.org/docs-2.1/.
-
- Installation
- ------------
-
- Please see the file called INSTALL. Platform specific notes can be
- found in README.platforms.
-
- Licensing
- ---------
-
- Please see the file called LICENSE.
-
- Contacts
- --------
-
- o If you want to be informed about new code releases, bug fixes,
- security fixes, general news and information about the Apache server
- subscribe to the apache-announce mailing list as described under
- http://httpd.apache.org/lists.html#http-announce
-
- o If you want freely available support for running Apache please join the
- Apache user community by subscribing to Users Mailing List at
- http://httpd.apache.org/userslist.html or one of the following USENET
- newsgroups:
- comp.infosystems.www.servers.unix
- comp.infosystems.www.servers.ms-windows
- Also available at:
- http://groups.google.com/groups?group=comp.infosystems.www.servers
-
- o If you want commercial support for running Apache please contact
- one of the companies and contractors which are listed at
- http://www.apache.org/info/support.cgi
-
- o If you have a concrete bug report for Apache please go to the
- Apache Group Bug Database and submit your report:
- http://httpd.apache.org/bug_report.html
-
- o If you want to participate in actively developing Apache please
- subscribe to the `dev@httpd.apache.org' mailing list as described at
- http://www.apache.org/lists.html#http-dev
-
- Acknowledgments
- ----------------
-
- We wish to acknowledge the following copyrighted works that
- make up portions of the Apache software:
-
- Portions of this software were developed at the National Center
- for Supercomputing Applications (NCSA) at the University of
- Illinois at Urbana-Champaign.
-
- This software contains code derived from the RSA Data Security
- Inc. MD5 Message-Digest Algorithm, including various
- modifications by Spyglass Inc., Carnegie Mellon University, and
- Bell Communications Research, Inc (Bellcore).
-
- Regular expression support is provided by the PCRE library package, which
- is open source software, written by Philip Hazel, and copyright by the
- University of Cambridge, England. The original software is available from
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- Apache 2 relies heavily on the use of autoconf and libtool to provide
- a build environment.
diff --git a/README.platforms b/README.platforms
deleted file mode 100644
index 3524cd1ea7..0000000000
--- a/README.platforms
+++ /dev/null
@@ -1,86 +0,0 @@
-
- Apache HTTP Server
-
- Platform specific notes:
- ------------------------
-
-================
- Darwin (OS X):
- Apache 2 relies heavily on the use of autoconf and libtool to
- provide a build environment. Darwin provides these tools as part
- of the Developers Tools package. Under Darwin, however, GNUlibtool
- is installed as 'glibtool' to avoid conflicting with the Darwin
- 'libtool' program. Apache 2 knows about this so that's not a
- problem.
-
- As of OS X 10.2 (Jaguar), the bundled versions work perfectly. Partly
- this is due to the fact that /bin/sh is now 'bash' and not 'zsh' as
- well as the fact that the bundled versions are up-to-date:
- autoconf 2.52 and (g)libtool 1.4.2.
-
- Earlier versions of OS X are not so fortunate, and the bundled tools
- are not only older versions, but also, for the most part, do not work
- well. If you are interested in developing under Darwin, we
- recommend that you obtain and install replacement versions of what
- are normally installed on Darwin (and OS X, as of v10.1.5). If
- you build your own versions of autoconf 2.52 and libtool 1.4.2, be
- aware that there are some Darwin specific patches to the official
- code that still must be applied for them to fully work. A useful
- page to check out is:
-
- http://fink.sourceforge.net/doc/porting/libtool.php
-
- Pier Fumagalli also provides pre-built Darwin packages of the
- patched autoconf and libtool suites, available at:
-
- http://www.apache.org/~pier/macosx/
-
- You will note that GNU libtool should actually be installed as
- glibtool, to avoid conflict with a Darwin program of the same
- name. Pier's packages have this change already. All files are
- installed under /usr/local/ so to use these versions, and be sure
- that /usr/local/bin is earlier in your PATH.
-
- There have been some reports that autoconf 2.52 prevents Apache's
- build system from correctly handling passing multi-value envvars
- to the build system (eg: CFLAGS="-g -O3" ./configure), causing
- errors. Use of bash does not seem to help in this situation. If
- this affects you, downgrading to autoconf 2.13 (which is installed
- on Darwin) will help.
-
-==========
- FreeBSD:
- autoconf 2.52 creates scripts that are incompatible with the Posix
- shell implementation (/bin/sh) on FreeBSD. Be sure to use v2.13
- of autoconf.
-
- Threaded MPMs are not supported on FreeBSD 4.x. Current releases of
- FreeBSD 5.x (5.2 or later) support threaded MPMs correctly. You must pass
- '--enable-threads=yes' to APR's configure in order to enable threads.
- Additionally, you must use libthr or libkse via libmap.conf as the default
- libc_r is still broken as of this writing. Please consult the man page for
- libmap.conf for more details about configuring libthr or libkse.
-================
- HP-UX:
- The dlopen() system call in HP-UX has problems when loading/unloading
- C++ modules. The problem can be resolved by using shl_load() instead
- of dlopen(). This is fixed in the Apache 2.0.44 release.
- To enable loading of C++ modules, the httpd binary has to be linked with
- the following libraries :
-
- HP-UX (11.0 / 11i):
- When using shl_load : "cpprt0_stub.s -lcl"
- When using dlopen : "cpprt0_stub.s -lcl -lCsup"
-
- HP-UX (11i version 1.5 and greater):
- When using dlopen/shl_load : "cpprt0_stub.s -lcl -lunwind"
-
- The cpprt0_stub.s can be downloaded from the web site :
- http://h21007.www2.hp.com/hpux-devtools/CXX/hpux-devtools.0107/0083.html
-
- Compile cpprt0_stub.s with the PIC option
- cc -c +z cpprt0_stub.s
- - OR -
- gcc -c -fPIC cpprt0_stub.s
-
-
diff --git a/ROADMAP b/ROADMAP
deleted file mode 100644
index a76c20a038..0000000000
--- a/ROADMAP
+++ /dev/null
@@ -1,256 +0,0 @@
-APACHE 2.x ROADMAP
-==================
-Last modified at [$Date: 2002/10/28 07:37:29 $]
-
-
-WORKS IN PROGRESS
------------------
-
- * Source code should follow style guidelines.
- OK, we all agree pretty code is good. Probably best to clean this
- up by hand immediately upon branching a 2.1 tree.
- Status: Justin volunteers to hand-edit the entire source tree ;)
-
- Justin says:
- Recall when the release plan for 2.0 was written:
- Absolute Enforcement of an "Apache Style" for code.
- Watch this slip into 3.0.
-
- David says:
- The style guide needs to be reviewed before this can be done.
- http://httpd.apache.org/dev/styleguide.html
- The current file is dated April 20th 1998!
-
- OtherBill offers:
- It's survived since '98 because it's welldone :-) Suggest we
- simply follow whatever is documented in styleguide.html as we
- branch the next tree. Really sort of straightforward, if you
- dislike a bit within that doc, bring it up on the dev@httpd
- list prior to the next branch.
-
- So Bill sums up ... let's get the code cleaned up in CVS head.
- Remember, it just takes cvs diff -b (that is, --ignore-space-change)
- to see the code changes and ignore that cruft. Get editing Justin :)
-
- * revamp the input filter syntax to provide for ordering of
- filters created with the Set{Input|Output}Filter and the
- Add{Input|Output}Filter directives. A 'relative to filterx'
- syntax is definately preferable.
-
- * Platforms that do not support fork (primarily Win32 and AS/400)
- Architect start-up code that avoids initializing all the modules
- in the parent process on platforms that do not support fork.
-
- . Better yet - not only inform the startup of which phase it's in,
- but allow the parent 'process' to initialize shared memory, etc,
- and create a module-by-module stream to pass to the child, so the
- parent can actually arbitrate the important stuff.
-
- * Replace stat [deferred open] with open/fstat in directory_walk.
- Justin, Ian, OtherBill all interested in this. Implies setting up
- the apr_file_t member in request_rec, and having all modules use
- that file, and allow the cleanup to close it [if it isn't a shared,
- cached file handle.]
-
- * The Async Apache Server implemented in terms of APR.
- [Bill Stoddard's pet project.]
- Message-ID: <008301c17d42$9b446970$01000100@sashimi> (dev@apr)
-
- OtherBill notes that this can proceed in two parts...
-
- Async accept, setup, and tear-down of the request
- e.g. dealing with the incoming request headers, prior to
- dispatching the request to a thread for processing.
- This doesn't need to wait for a 2.x/3.0 bump.
-
- Async delegation of the entire request processing chain
- Too many handlers use stack storage and presume it is
- available for the life of the request, so a complete
- async implementation would need to happen 3.0 release.
-
- Brian notes that async writes will provide a bigger
- scalability win than async reads for most servers.
- We may want to try a hybrid sync-read/async-write MPM
- as a next step. This should be relatively easy to
- build: start with the current worker or leader/followers
- model, but hand off each response brigade to a "completion
- thread" that multiplexes writes on many connections, so
- that the worker thread doesn't have to wait around for
- the sendfile to complete.
-
- * Add a string "class" that combines a char* with a length
- and a reference count. This will help reduce the number
- of strlen and strdup operations during request processing.
- Including both the length and allocation will save us a ton
- of reallocation we do today, in terms of string manipulation.
-
- OtherBill asks if this is really an APR issue, not an HTTPD issue?
-
- Brian notes that the performance optimization work in 2.0
- has all but eliminated the original motiviation for this
- idea. The httpd doesn't spend that much time in strlen
- calls any more.
-
-
-MAKING APACHE REPOSITORY-AGNOSTIC
-(or: remove knowledge of the filesystem)
-
-[ 2002/10/01: discussion in progress on items below; this isn't
- planned yet ]
-
- * dav_resource concept for an HTTP resource ("ap_resource")
-
- * r->filename, r->canonical_filename, r->finfo need to
- disappear. All users need to use new APIs on the ap_resource
- object.
-
- (backwards compat: today, when this occurs with mod_dav and a
- custom backend, the above items refer to the topmost directory
- mapped by a location; e.g. docroot)
-
- Need to preserve a 'filename'-like string for mime-by-name
- sorts of operations. But this only needs to be the name itself
- and not a full path.
-
- Justin: Can we leverage the path info, or do we not trust the
- user?
-
- gstein: well, it isn't the "path info", but the actual URI of
- the resource. And of course we trust the user... that is
- the resource they requested.
-
- dav_resource->uri is the field you want. path_info might
- still exist, but that portion might be related to the
- CGI concept of "path translated" or some other further
- resolution.
-
- To continue, I would suggest that "path translated" and
- having *any* path info is Badness. It means that you did
- not fully resolve a resource for the given URI. The
- "abs_path" in a URI identifies a resource, and that
- should get fully resolved. None of this "resolve to
- <here> and then we have a magical second resolution
- (inside the CGI script)" or somesuch.
-
- Justin: Well, let's consider mod_mbox for a second. It is sort of
- a virtual filesystem in its own right - as it introduces
- it's own notion of a URI space, but it is intrinsically
- tied to the filesystem to do the lookups. But, for the
- portion that isn't resolved on the file system, it has
- its own addressing scheme. Do we need the ability to
- layer resolution?
-
- * The translate_name hook goes away
-
- Wrowe altogether disagrees. translate_name today even operates
- on URIs ... this mechansim needs to be preserved.
-
- * The doc for map_to_storage is totally opaque to me. It has
- something to do with filesystems, but it also talks about
- security and per_dir_config and other stuff. I presume something
- needs to happen there -- at least better doc.
-
- Wrowe agrees and will write it up.
-
- * The directory_walk concept disappears. All configuration is
- tagged to Locations. The "mod_filesystem" module might have some
- internal concept of the same config appearing in multiple
- places, but that is handled internally rather than by Apache
- core.
-
- Wrowe suggests this is wrong, instead it's private to filesystem
- requests, and is already invoked from map_to_storage, not the core
- handler. <Directory > and <Files > blocks are preserved as-is,
- but <Directory > sections become specific to the filesystem handler
- alone. Because alternate filesystem schemes could be loaded, this
- should be exposed, from the core, for other file-based stores to
- share. Consider an archive store where the layers become
- <Directory path> -> <Archive store> -> <File name>
-
- Justin: How do we map Directory entries to Locations?
-
- * The "Location tree" is an in-memory representation of the URL
- namespace. Nodes of the tree have configuration specific to that
- location in the namespace.
-
- Something like:
-
- typedef struct {
- const char *name; /* name of this node relative to parent */
-
- struct ap_conf_vector_t *locn_config;
-
- apr_hash_t *children; /* NULL if no child configs */
- } ap_locn_node;
-
- The following config:
-
- <Location /server-status>
- SetHandler server-status
- Order deny,allow
- Deny from all
- Allow from 127.0.0.1
- </Location>
-
- Creates a node with name=="server_status", and the node is a
- child of the "/" node. (hmm. node->name is redundant with the
- hash key; maybe drop node->name)
-
- In the config vector, mod_access has stored its Order, Deny, and
- Allow configs. mod_core has stored the SetHandler.
-
- During the Location walk, we merge the config vectors normally.
-
- Note that an Alias simply associates a filesystem path (in
- mod_filesystem) with that Location in the tree. Merging
- continues with child locations, but a merge is never done
- through filesystem locations. Config on a specific subdir needs
- to be mapped back into the corresponding point in the Location
- tree for proper merging.
-
- * Config is parsed into a tree, as we did for the 2.0 timeframe,
- but that tree is just a representation of the config (for
- multiple runs and for in-memory manipulation and usage). It is
- unrelated to the "Location tree".
-
- * Calls to apr_file_io functions generally need to be replaced
- with operations against the ap_resource. For example, rather
- than calling apr_dir_open/read/close(), a caller uses
- resource->repos->get_children() or somesuch.
-
- Note that things like mod_dir, mod_autoindex, and mod_negotation
- need to be converted to use these mechanisms so that their
- functions will work on logical repositories rather than just
- filesystems.
-
- * How do we handle CGI scripts? Especially when the resource may
- not be backed by a file? Ideally, we should be able to come up
- with some mechanism to allow CGIs to work in a
- repository-independent manner.
-
- - Writing the virtual data as a file and then executing it?
- - Can a shell be executed in a streamy manner? (Portably?)
- - Have an 'execute_resource' hook/func that allows the
- repository to choose its manner - be it exec() or whatever.
- - Won't this approach lead to duplication of code? Helper fns?
-
- gstein: PHP, Perl, and Python scripts are nominally executed by
- a filter inserted by mod_php/perl/python. I'd suggest
- that shell/batch scripts are similar.
-
- But to ask further: what if it is an executable
- *program* rather than just a script? Do we yank that out
- of the repository, drop it onto the filesystem, and run
- it? eeewwwww...
-
- I'll vote -0.9 for CGIs as a filter. Keep 'em handlers.
-
- Justin: So, do we give up executing CGIs from virtual repositories?
- That seems like a sad tradeoff to make. I'd like to have
- my CGI scripts under DAV (SVN) control.
-
- * How do we handle overlaying of Location and Directory entries?
- Right now, we have a problem when /cgi-bin/ is ScriptAlias'd and
- mod_dav has control over /. Some people believe that /cgi-bin/
- shouldn't be under DAV control, while others do believe it
- should be. What's the right strategy?
diff --git a/STATUS b/STATUS
deleted file mode 100644
index c91a83f947..0000000000
--- a/STATUS
+++ /dev/null
@@ -1,900 +0,0 @@
-APACHE 2.1 STATUS: -*-text-*-
-Last modified at [$Date: 2004/04/27 22:09:17 $]
-
-Release [NOTE that only Alpha/Beta releases occur in 2.1 development]:
-
- 2.1.0 : in development
-
-Please consult the following STATUS files for information
-on related projects:
-
- * srclib/apr/STATUS
- * srclib/apr-util/STATUS
- * docs/STATUS
-
-Contributors looking for a mission:
-
- * Just do an egrep on "TODO" or "XXX" in the source.
-
- * Review the "PatchAvailable" bugs in the bug database.
- Append a comment saying "Reviewed and tested".
-
- * Open bugs in the bug database.
-
-CURRENT RELEASE NOTES:
-
- * When the CVS->SVN is done, there's a bogus avendor branch that should be
- removed from most files. The branch was created 4/27/2004. It's safest
- (and easiest) for now just to leave it in there; the MAIN branch and the
- APACHE_2_0_BRANCH are untouched and unharmed. --jwoolley
-
-RELEASE SHOWSTOPPERS:
-
- * Handling of non-trailing / config by non-default handler is broken
- http://marc.theaimsgroup.com/?l=apache-httpd-dev&m=105451701628081&w=2
-
- * the edge connection filter cannot be removed
- http://marc.theaimsgroup.com/?l=apache-httpd-dev&m=105366252619530&w=2
-
-CURRENT VOTES:
-
- * Promote mod_cache from experimental to non-experimental
- status (keep issues noted below in EXPERIMENTAL MODULES as
- items to be addressed as a supported module).
- +1: jim, bnicholes
- -0: jerenkrantz
- -1: stoddard
- There are a couple of problems that need to be resolved
- before this module is moved out of experimental.
- 1) We need to at least review and comment on the RFC violations
- 2) Resolve issue of how to cache page fragements (or perhaps -if- we
- want to cache page fragements). Today, mod_cache/mod_mem_cache
- will cache #include 'virtual' requests (but not #include 'file'
- requests). This was accomplished by making CACHE_IN a
- CONTENT_SET-1 filter to force it to run before the SUBREQ_CORE
- filter. But now responses cannot be cached that include the
- effects of having been run through CONTENT_SET filters
- (mod_deflate, mod_expires, etc). We could rerun all the
- CONTENT_SET filters on the cached response, but this will not
- work in all cases. For example, mod_expires relies on installing
- the EXPIRATION filter during fixups. Contents served out of
- mod_cache (out of the quick_handler) bypass -all- the request
- line server hooks (Ryan really hated this. It is great for
- performance, but bad because of the complications listed above).
-
-
- jerenkrantz: There are a slew of RFC compliance bugs filed in Bugzilla
- for mod_cache (see 'RFC 2616 violations' below). I think
- fixing them is a pre-requisite before it isn't experimental.
-
- * httpd-std.conf and friends
-
- a) httpd-std.conf should be tailored by install (from src or
- binbuild) even if user has existing httpd.conf
- +1: trawick, slive, gregames, ianh, Ken, wrowe, jwoolley, jim, nd,
- erikabele
- wrowe - prefer httpd.default.conf to avoid ambiguity with cvs
-
- b) tailored httpd-std.conf should be copied by install to
- sysconfdir/examples
- -0: striker
-
- c) tailored httpd-std.conf should be installed to
- sysconfdir/examples or manualdir/exampleconf/
- +1: slive, trawick, Ken, nd (prefer the latter), erikabele
-
- d) Installing a set of default config files when upgrading a server
- doesn't make ANY sense at all.
- +1: ianh - medium/big sites don't use 'standard config' anyway, as it
- usually needs major customizations
- -1: Ken, wrowe, jwoolley, jim, nd, erikabele
- wrowe - diff is wonderful when comparing old/new default configs,
- even for customized sites that ianh mentions
- jim - ... assuming that the default configs have been updated
- with the required inline docs to explain the
- changes
-
- * If the parent process dies, should the remaining child processes
- "gracefully" self-terminate. Or maybe we should make it a runtime
- option, or have a concept of 2 parent processes (one being a
- "hot spare").
- See: Message-ID: <3C58232C.FE91F19F@Golux.Com>
-
- Self-destruct: Ken, Martin, Lars
- Not self-destruct: BrianP, Ian, Cliff, BillS
- Make it runtime configurable: Aaron, jim, Justin, wrowe, rederpj, nd
-
- /* The below was a concept on *how* to handle the problem */
- Have 2 parents: +1: jim
- -1: Justin, wrowe, rederpj, nd
- +0: Lars, Martin (while standing by, could it do
- something useful?)
-
- * Make the worker MPM the default MPM for threaded Unix boxes.
- +1: Justin, Ian, Cliff, BillS, striker, wrowe, nd
- +0: BrianP, Aaron (mutex contention is looking better with the
- latest code, let's continue tuning and testing), rederpj, jim
- -0: Lars
-
-RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
-
- * Patches submitted to the bug database:
- http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Apache+httpd-2.0&keywords=PatchAvailable
-
- * Filter stacks and subrequests, redirects and fast redirects.
- There's at least one PR that suffers from the current unclean behaviour
- (which lets the server send garbage): PR 17629
- nd says: Every subrequest should get its own filter stack with the
- subreq_core filter as bottom-most. That filter does two things:
- - swallow EOS buckets
- - redirect the data stream to the upper request's (rr->main)
- filter chain directly after the subrequest's starting
- point.
- Once we have a clean solution, we can try to optimize
- it, so that the server won't be slow down too much.
-
- * RFC 2616 violations.
- Closed PRs: 15857.
- Open PRs: 15852, 15859, 15861, 15864, 15865, 15866, 15868, 15869,
- 15870, 16120, 16125, 16126, 16133, 16135, 16136, 16137,
- 16138, 16139, 16140, 16142, 16518, 16520, 16521,
- jerenkrantz says: need to decide how many we need to backport and/or
- if these rise to showstopper status.
- wrowe suggests: it would be nice to see "MUST" v.s. "SHOULD" v.s. "MAY"
- out of this list, without reviewing them individually.
-
- * There is a bug in how we sort some hooks, at least the pre-config
- hook. The first time we call the hooks, they are in the correct
- order, but the second time, we don't sort them correctly. Currently,
- the modules/http/config.m4 file has been renamed to
- modules/http/config2.m4 to work around this problem, it should moved
- back when this is fixed.
-
- OtherBill offers that this is a SERIOUS problem. We do not sort
- correctly by the ordering arguments passed to the register hook
- functions. This was proven when I reordered the open_logs hook
- to attempt to open the error logs prior to the access logs. Possibly
- the entire sorting code needs to be refactored.
-
- * pipes deadlock on all platforms with limited pipe buffers (e.g. both
- Linux and Win32, as opposed to only Win32 on 1.3). The right solution
- is either GStein's proposal for a "CGI Brigade", or OtherBill's proposal
- for "Poll Buckets" for "Polling Filter Chains". Or maybe both :-)
-
- * All handlers should always send content down even if r->header_only
- is set. If not, it means that the HEAD requests don't generate the
- same headers as a GET which is wrong.
-
- * HP/UX 10.20: compile breakage in APR. Looks like it should be easy
- to fix, probably just some extraneous #include's that are fouling
- things up.
- PR: 9457
- Jeff: See my reply and patch in the PR (and previous commit to
- stop using "pipe" as a field name). If patch is committed, we
- should be okay. I'll wait to see if the user tests the patch.
- Update by Jeff 20020722: I got an account on HP 10.20. It looks
- like some of the APR thread detection is screwed up. If we find
- pthread.h but we can't compile the pthread test program we still
- think we can use threads. For that reason, the patch I posted
- to the PR won't work as-is since a failed compile of the test
- program means nothing.
-
- * exec cmd and suexec arg-passing enhancements
- Status: Patches proposed
- Message-ID: <20020526041748.A29148@prodigy.Redbrick.DCU.IE>
- (see the "proc.patch" and "suexec-shell.patch" links in this message)
-
- * The 2.0.36 worker MPM graceless shutdown changes work but are
- a bit clunky on some platforms; eg, on Linux, the loop to
- join each worker thread seems to hang, and the parent ends up
- killing off the child with SIGKILL. But at least it shuts down.
-
- * --enable-mods-shared="foo1 foo2" is busted on Darwin. Pier
- posted a patch (Message-ID: <B8DBBE8D.575A%pier@betaversion.org>).
-
- * We do not properly substitute the prefix-variables in the configuration
- scripts or generated-configs. (i.e. if sysconfdir is etc,
- httpd-std.conf points to conf.)
-
- * If any request gets through ap_process_request_internal() and is
- scheduled to be served by the core handler, without a flag that this
- r->filename was tested by dir/file_walk, we need to 500 at the very
- end of the ap_process_request_internal() processing so sub_req-esters
- know this request cannot be run. This provides authors of older
- modules better compatibility, while still improving the security and
- robustness of 2.0.
-
- Status: still need to decide where this goes, OtherBill comments...
- Message-ID: <065701c14526$495203b0$96c0b0d0@roweclan.net>
- [Deleted comments regarding the ap_run_handler phase, as irrelevant
- as BillS points out that "common case will be caught in
- default_handler already (with the r->finfo.filetype == 0 check)"
- and the issue is detecting this -before- we try to run the req.]
-
- gregames says: can this happen somehow without a broken module
- being involved? If not, why waste cycles trying to defend against
- potential broken modules? It seems futile.
- wrowe counters: no, it shouldn't happen unless the module is broken.
- But the right answer is to fail the request up-front in dir/file
- walk if the path was entirely invalid; and we can't do that either
- UNTIL 2.1 or we break modules that haven't hooked map_to_storage.
-
- * With AP_MODE_EXHAUSTIVE in the core, it is finally clear to me
- how the Perchild MPM should be re-written. It hasn't worked
- correctly since filters were added because it wasn't possible to
- get the content that had already been written and the socket at
- the same time. This mode lets us do that, so the MPM can be
- fixed.
-
- * Can a static httpd be built reliably?
- Message-ID: <20020207142751.T31582@clove.org>
-
- * [Ken] Test suite failures:
- o worker is also failing some of the 'cgi' subtests
- (see <URL:http://Source-Zone.Org/Apache/regression/>):
- Justin says: "Worker should be fine and passes httpd-test here.
- I think it's a perl or a httpd-test problem."
-
- * Usage of APR_BRIGADE_NORMALIZE in core_input_filter should be
- removed if possible.
- Message-ID: <Pine.LNX.4.33.0201202232430.318-100000@deepthought.cs.virginia.edu>
- Jeff wonders if we still care about this. It is no longer an
- API issue but simply an extra trip through the brigade.
-
- * The Add...Filter and Set...Filter directives do not allow the
- administrator to order filters, beyond the order of filename (mime)
- extensions. It isn't clear if Set...Filter(s) should be inserted
- before or after the Add...Filter(s) which are ordered by sequence of
- filename extensions. At minimum, some sort of +-[0-10] syntax seems
- like a nice solution. See ROADMAP.
-
- * Get perchild to work on platforms other than Linux. This
- will require a portable mechanism to pass data and file/socket
- descriptors between vhost child groups. An API was proposed
- on dev@apr:
- Message-ID: <20020111115006.K1529@clove.org>
-
- * Try to get libtool inter-library dependency code working on AIX.
- Message-ID: <cm3n10lx555.fsf@rdu163-40-092.nc.rr.com>
-
- Justin says: If we get it working on AIX, we can enable this
- on all platforms and clean up our build system
- somewhat.
- Jeff says: I thought I tested a patch for you sometime in
- January that you were going to commit within a few
- days.
-
- * Handling of %2f in URIs. Currently both 1.3 and 2.0
- completely disallow %2f in the request URI path (see
- ap_unescape_url() in util.c). It's permitted and passed
- through in the query string, however. Roy says the
- original reason for disallowing it, from five years ago,
- was to protect CGI scripts that applied PATH_INFO to
- a filesystem location and which might be tricked by
- ..%2f..%2f(...). We *should* allow path-info of the
- form 'http://foo.com/index.cgi/path/to/path%2finfo'.
- Since we've revamped a lot of our processing of path
- segments, it would be nice to allow this, or at least
- allow it conditionally with a directive.
-
- OtherBill adds that %2f as the SECOND character of a multibyte
- sequence causes the request to fail! This happens notably in
- the ja-jis encoding.
-
- * FreeBSD, threads, and worker MPM. All seems to work fine
- if you only have one worker process with many threads. Add
- a second worker process and the accept lock seems to be
- lost. This might be an APR issue with how it deals with
- the child_init hook (i.e. the fcntl lock needs to be resynced).
- More examination and analysis is required.
- Status: This has also been reported on Cygwin.
- FreeBSD 4.7 was reputed to have 'fixed' threads. Not.
- FreeBSD 5.2-RC is a confirmed fix w/either libkse or libthr.
- [libc_r, still the default, does not serve any pages w/worker;
- so on FreeBSD 5.2, you must use libmap.conf (see man page).]
- Work needs to be done to get APR to try to be knowledgable that
- libkse/libthr are acceptable. Still not recommended for the
- default since libc_r is still broken.
- Message-ID: <3C2CC514.8EF3BED1@wapme-systems.de> (cygnus)
-
- * There is increasing demand from module writers for an API
- that will allow them to control the server à la apachectl.
- Reasons include sole-function servers that need to die if
- an external dependency (e.g., a database) fails, et cetera.
- Perhaps something in the (ever more abused) scoreboard?
-
- On the other hand, we already have a pipe that goes between parent
- and child for graceful shutdown events, along with an API that
- can be used to send a message down that pipe. In threaded MPMs,
- it is easy enough to make that one pipe be used for graceful
- and graceless events, and it is also easy to open that pipe
- to both parent and child for writing. Then we just need to
- figure out how to do graceless on non-threaded MPMs.
-
- * Allow the DocumentRoot directive within <Location > scopes? This
- allows the beloved (crusty) Alias /foo/ /somepath/foo/ followed
- by a <Directory /somepath/foo> to become simply
- <Location /foo/> DocumentRoot /somefile/foo (IMHO a bit more legible
- and in-your-face.) DocumentRoot unset would be accepted [and would
- not permit content to be served, only virtual resources such as
- server-info or server-status.
- This proposed change would _not_ depricate Alias.
- striker: See the thread starting with Message-ID:
- JLEGKKNELMHCJPNMOKHOGEEJFBAA.striker@apache.org.
-
- * Win32: Rotatelogs sometimes is not terminated when Apache
- goes down hard. FirstBill was looking at possibly tracking the
- child's-child processes in the parent process.
- stoddard: Shared scoreboard might offer a good way for the parent
- to keep track of 'other child' processes and whack them if the child
- goes down.
- Other thoughts on walking the process chain using the NT kernel
- have also been proposed on APR.
-
- * Eliminate unnecessary creation of pipes in mod_cgid
-
- * Combine log_child and piped_log_spawn. Clean up http_log.c.
- Common logging API.
-
- * Platforms that do not support fork (primarily Win32 and AS/400)
- Architect start-up code that avoids initializing all the modules
- in the parent process on platforms that do not support fork.
-
- * There are still a number of places in the code where we are
- losing error status (i.e. throwing away the error returned by a
- system call and replacing it with a generic error code)
-
- * Mass vhosting version of suEXEC.
-
- * All DBMs suffer from confusion in support/dbmmanage (perl script) since
- the dbmmanage employs the first-matched dbm format. This is not
- necessarily the library that Apache was built with. Aught to
- rewrite dbmmanage upon installation to bin/ with the proper library
- for predictable mod_auth_dbm administration.
- Questions; htdbm exists, time to kill dbmmanage, or does it remain
- useful as a perl dbm management example? If we keep it,
- do we address the issue above?
-
- * Integrate mod_dav.
- Some additional items remaining:
- - case_preserved_filename stuff
- (use the new canonical name stuff?)
- - find a new home for ap_text(_header)
- - is it possible to remove the DAV: namespace stuff from util_xml?
-
- * ap_core_translate() and its use by mod_mmap_static and mod_file_cache
- are a bit wonky. The function should probably be exposed as a utility
- function (such as ap_translate_url2fs() or ap_validate_fs_url() or
- something). Another approach would be a new hook phase after
- "translate" which would allow the module to munge what the
- translation has decided to do.
- Status: Greg +1 (volunteers)
-
- * Explore use of a post-config hook for the code in http_main.c which
- calls ap_fixup_virutal_hosts(), ap_fini_vhost_config(), and
- ap_sort_hooks() [to reduce the logic in main()]
-
- * read the config tree just once, and process N times (as necessary)
-
- * (possibly) use UUIDs in mod_unique_id and/or mod_usertrack
-
- * (possibly) port the bug fix for PR 6942 (segv when LoadModule is put
- into a VirtualHost container) to 2.0.
-
- * shift stuff to mod_core.h
-
- * callers of ap_run_create_request() should check the return value
- for failure (Doug volunteers)
-
- * Win32: Get Apache working on Windows 95/98. The following work
- (at least) needs to be done:
- - Document warning that OSR2 is required (for Crypt functions, in
- rand.c, at least.) This could be resolved with an SSL library, or
- randomization in APR itself.
- - Bring the Win9xConHook.dll from 1.3 into 2.0 (no sense till it
- actually works) and add in a splash of Win9x service code.
-
- * Fix the worker MPM to use POD to kill child processes instead
- of ap_os_killpg, regardless of how they should die.
-
- * Scoreboard structures could be changed in the future such that
- proper alignment is not maintained, leading to segfaults on
- some systems. Cliff posted a patch to deal with this issue but
- later recanted. See this message to dev@apr.apache.org:
- Message-ID: <Pine.LNX.4.44.0203011354090.16457-200000@deepthought
- .cs.virginia.edu>
-
- * When sufficiently tested, the AllowEncodedSlashes/%2f patch
- needs to be backported to 2.0 and 1.3.
-
- * APXS either needs to be fixed completely for use when apr is out of tree,
- or it should drop query mode altogether, and we just grow an
- httpd-config or similar arrangement.
- To quote a discussion in STATUS earlier:
-
- thommay: this doesn't fix all the problems with apxs and out of
- tree apr/apr-util, but it's a good start. There's still the
- query cases; but I'm beginning to think that in these cases
- the app should be querying ap{r,u}-config directly
- gstein: agreed. apxs should deprecate the -q flag
-
-TODO ISSUES REMAINING IN MOD_SSL:
-
- * In order to use a DSO version of mod_ssl we have to link with
- -lssl and -lcrypto. A workaround is in place right now where the
- entire EXTRA_LIBS macro is being appended to the objects list, but
- this is a hack. We should either revamp the APACHE_CHECK_SSL_TOOLKIT
- autoconf function or come up with some other autoconf checks to
- search for libssl and libcrypto and properly add them to mod_ssl's
- link flags.
-
- * SSL renegotiations in combination with POST request
-
- * Port or dispose all code inside #if 0...#endif blocks that remain
- from the porting effort.
-
- * Do we need SSL_set_read_ahead()?
-
- * the ssl_expr api is NOT THREAD SAFE. race conditions exist:
- -in ssl_expr_comp() if SSLRequire is used in .htaccess
- (ssl_expr_info is global)
- -is ssl_expr_eval() if there is an error
- (ssl_expr_error is global)
-
- * SSLRequire directive (parsing of) leaks memory
-
- * Diffie-Hellman-Parameters for temporary keys are hardcoded in
- ssl_engine_dh.c, while the comment in ssl_engine_kernel.c says:
- "it is suggested that keys be changed daily or every 500
- transactions, and more often if possible."
-
- * ssl_var_lookup could be rewritten to be MUCH faster
-
- * CRL callback should be pluggable
-
- * session cache store should be pluggable
-
- * init functions should return status code rather than ssl_die()
-
- * ssl_engine_pphrase.c needs to be reworked so it is generic enough
- to also decrypt proxy keys
-
- * the shmcb code should just align its memory segment rather than
- jumping through all the "safe" memcpy and memset hoops
-
-WISH LIST
- * mod_proxy performance: when mod_proxy is configured to do proxy
- gateway (aka reverse proxy), it would be nice to be able to reuse
- connections to the backend servers. Now, connections to the
- backend servers are taken down when the corresponding frontend
- connection is taken down.
-
- * mod_proxy: Ability to run SSL over proxy gateway connections,
- encrypting (or reencrypting) at the proxy.
-
- * mod_proxy: Add capability of mod_proxy to load balance across
- a farm of backend servers.
-
- * mod_cache: Handle ESI tags.
-
-EXPERIMENTAL MODULES:
-
- Experimental modules should eventually be be promoted to fully supported
- status or removed from the repository entirely (ie, the
- 'experiment' failed). This section tracks what needs to happen to
- get the modules promoted to fully supported status.
-
- mod_cache/mod_mem_cache/mod_disk_cache:
- * mod_cache: handle cache_control: no_cache "field_name" to enable
- cacheing the response w/o header "field_name"
- See RFC2616 section 14.9.1
-
- * mod_mem_cache: Consider adding a RevalidateTimeout directive to
- specify time at which local cached content is to be revalidated
- (ie, underlying file stat'ed to see if it has changed).
-
- * mod_cache: CacheEnable/CacheDisable should accept regular expressions.
-
- * mod_cache: Fix dependency on ATOMIC operators. Need
- APR_HAS_ATOMIC_* feature macros.
-
- * mod_disk_cache: Implement garbage collection
-
- * mod_mem_cache/mod_disk_cache: Need to be able to query cache
- status (num of entries, cache object properties, etc.).
- mod_status could be extended to query optional hooks defined
- by modules for the purpose of reporting module status.
- mod_cache (et. al.) could define optional hooks that are called
- to collect status. Status should be queryable by
- HTTP or SNMP?
-
- * Enable mod_cache/mod_mem_cache/mod_disk_cache to handle
- multiviews
-
- * mod_mem_cache/mod_disk_cache: Complete implementing config
- directives (mod_disk_cache: CacheExpiryCheck and GC directives
- including CacheGc*, CacheSize, and, CacheTimeMargin)
- (mod_mem_cache: MCacheMaxObjectCount) and
- (mod_cache: CacheForceCompletion).
-
- mod_auth_ldap/util_ldap:
- * General stabilization and testing
-
-
-PRs that have been suspended forever waiting for someone to
-put them into 'the next release':
-
- * documentation and Q&A
-
- PR#2221: Make online documentation search link back to my installation
- Status:
-
- PR#2906: Propose that Apache recommend $UNIQUE_ID for all "session id"
- algorithms
- Status:
-
- PR#2793: When will Apache support P3P? Any Plans?
- Status:
-
- * build
-
- PR#2113: HTTP Server Rebuild Line Needs Changing for the better
- Status:
-
- PR#2421: problem specifying ndbm library for build ?with autoconfigure
- Status:
-
- * config
-
- PR#76: missing call to "setlocale();"
- Status:
-
- PR#628: Request of "Options SymLinksIfGroupMatch"
- Status:
-
- PR#793: RLimitCPU and RLimitMEM don't apply to all children like they should
- Status:
-
- PR#922: it is useful to allow specifiction that root-owned symlinks
- should always be followed
- Status:
-
- PR#1028: DoS attacks involving memory consumption
- Status:
-
- PR#1191: setlogin() is not called, causing problems with e.g. identd
- Status:
-
- PR#1204: regerror() exists, use it
- Status:
-
- PR#2284: Can not POST to ErrorDocument - Apache/1.3b6
- Status:
-
- PR#2396: Proposal for TimeZone directive
- Status:
-
- PR#2446: AllowOverride FileInfo is too coarse
- Status:
-
- PR#2760: [PATCH] User/Group for <Directory> and <Location> i.e. not only
- in global and <Virtual>.
- Status:
-
- PR#2907: suggestion: power up your Include directive :)
- Status:
-
- PR#3018: cannot limit some HTTP methods
- Status:
-
- PR#3677: New ErrorDocumentMatch directive
- Status:
-
- PR#4244: "Files" and "FilesMatch" regexp does not recognize bang as
- negation operator
- Status:
-
- PR#5993: AllowOverride should have a 'CheckNone' and 'AllowNone' argument
- instead of only 'None'
- Status:
-
- * mod_access
-
- PR#537: mod_access syntax allows hosts that should be restricted
- Status:
-
- PR#1287: add allow,deny/deny,allow warning to mod_access
- Status:
-
- PR#2512: <IfDenied> directive wanted
- Status:
-
- * mod_auth-any
-
- PR#557: ~UserHome directories are not honored in absolute pathname
- requests (.htaccess)
- Status:
-
- PR#1117: Using NIS passwd.byname dbm files with AuthDBMUserFile
- Status:
-
- PR#1809: Suggestion for improving authentication modules and core source
- code, problem with 401 and ErrorDocument
- Status:
-
- * mod_autoindex
-
- PR#1263: Add frame-safe anchor attribute to mod_autoindex links
- Status:
-
- * mod_cgi (and suexec)
-
- PR#921: suexec Uses cwd before filling it in, doesn't use syslog
- Status:
-
- PR#1176: Apache cannot handle continuation line in headers
- Status:
-
- PR#1120: suexec does not parse arguments to #exec cmd
- Status:
-
- PR#1268: CGI scripts running as Apache user: security (suexec etc.)
- Status:
-
- PR#1285: Error messages could be easier to spot in cgi.log file for suexec.c
- Status:
-
- PR#1905: suexec - Allow modules to set user:group for execution.
- Status:
-
- PR#2360: suexec for general access of user content?
- Status:
-
- PR#2460: TimeOut applies to output of CGI scripts
- Status:
-
- PR#2573: CGI's for general use still have to be run as another user
- with suExec
- Status:
-
- PR#4241: Need to be able to override shebang line to make CGI scripts
- more portable.
- Status:
-
- PR#4490: mod_cgi prevents handling of OPTIONS requests
- Status:
-
- * mod_env
-
- PR#370: Modified PATH environemnt variable is not passed, instead
- system's is used
- Status:
-
- * mod_headers
-
- PR#1383: I make mod_headers to modify request headers as well as
- response ones.
- Status:
-
- PR#1677: mod_headers should allow mod_log_config-style formats in
- header values
- Status:
-
- * mod_imap
-
- PR#759: imap should read <MAP><AREA>*</MAP> too!
- Status:
-
- * mod_include
-
- PR#78: Additional status for XBitHack directive
- Status:
-
- PR#623: A smarter "Last Modified" value for SSI documents (see PR number 600)
- Status:
-
- PR#1145: mod_include
- Allow for Last-Modified: without resorting to XBitHack
- Status:
-
- PR#1803: patches to mod_include to allow for file tests
- Status:
-
- PR#4459: Suggestion for better handling of Last-modified headers
- Status:
-
- * mod_info
-
- PR#2415: /server-info doesn't check for the virtual host to list the info
- Status:
-
- * mod_log-any
-
- PR#1050: Logging of virtual server to error_log as well
- Status:
-
- PR#1358: Selective url-encode of log fields (or maybe a pseudo
- log_rewrite module?)
- Status:
-
- PR#2073: pipelined connections are not logged correctly
- Status:
-
- PR#4448: Please allow CGI env variables (QUERY_STRING, ...) to be logged
- with %{}e
- Status:
-
- * mod_negotiation
-
- PR#3191: no way to set global quality-of-source (qs) coneg values
- with multiviews
- Status:
-
- * mod_proxy
-
- PR#362: Mod_proxy doesn't allow change of error pages
- Status:
-
- PR#440: Proxy doesn't deliver documents if not connected
- Status:
-
- PR#534: proxy converts ~name to %7Ename when name starts with a dot (.)
- Status:
-
- PR#612: Proxy FTP Authentication Fails
- Status:
-
- PR#700: Proxy doesn't do links right for OpenVMS files through ftp:
- Status:
-
- PR#980: Controlling Access to Remote Proxies would be nice...
- Status:
-
- PR#994: Adding authentication "on the fly" through the proxy module
- Status:
-
- PR#1085: ProxyRemote make a dead cycle.
- Status:
-
- PR#1166: ``nph-'' not honored (no buffering) for ProxyRemote mapping
- Status:
-
- PR#1290: Need to know "hit-rate" on proxy cache
- Status:
-
- PR#1532: Proxy transfer logging
- Status:
-
- PR#1547: No HTTP_X_FORWARDED_FOR set...
- Status:
-
- PR#1567: ProxyRemote proxy requests fail authentication by firewall
- Status:
-
- PR#1702: mod_proxy to support persistent conns?
- Status:
-
- PR#1878: listing of proxy cache content
- Status:
-
- PR#2314: patterns in ProxyRemote
- Status:
-
- PR#2648: Cache file names in Proxy module
- Status:
-
- PR#3568: Accessing URL through proxy server corrupts data.
- Status:
-
- PR#3605: Some anonymous FTP URLs ask for authentication
- Status:
-
- * mod_rewrite
-
- PR#1582: mod_rewrite forms REQUEST_URI different than mod_cgi does
- Status:
-
- PR#2074: mod_rewrite doesn't pass Proxy Throughput on internal subrequests
- Status:
-
- * mod_status
-
- PR#2138: mod_status always displays 256 possible connection slots
- Status:
-
- PR#2343: Status module averages are for entire uptime
- Status:
-
- * apache-api
-
- PR#1004: request_config field in request_rec is moderately bogus
- Status:
-
- PR#1158: improvements to child spawning API
- Status:
-
- PR#1233: there is no way to keep per-connection per-module state
- Status:
-
- PR#2024: adding auth_why to conn_rec
- Status:
-
- PR#2873: Feedback/Comment on APACI
- Status:
-
- PR#3143: No module specific data hook for per-connection data
- Status:
-
- * generally odds and ends
-
- PR#2431: A small addition to rotatelogs.c to improve program functionality.
- Status:
-
- PR#2763: mailto tags and bundling bug report script
- Status:
-
- PR#2785: os-aix Support for System Resource Controller
- Status:
-
- PR#2889: Inclusion of RPM spec file in CVS/distributions
- Status:
-
- PR#5713: os-windows [PATCH] install as win32 service with domain account
- Status: Cannot accept password-as-arg, we should prompt the
- user when -k install/-k config with a user argument.
-
-
-
-Other bugs that need fixing:
-
- * ap_discard_request should be converted to use the bucket API
- directly rather than waste cycles copying buffers with the old API.
-
- * MaxRequestsPerChild measures connections, not requests.
- Until someone has a better way, we'll probably just rename it
- "MaxConnectionsPerChild".
-
- * Regex containers don't work in an intutive way
- Status: No one has come up with an efficient way to fix this
- behavior. Dean has suggested getting rid of regex containers
- completely.
- OtherBill suggests: We at least seem to agree on eliminating
- the <Container ~ foo> forms, and using only
- <ContainerMatch foo> semantics.
-
- * SIGSEGV on Linux (glibc 2.1.2) isn't caught properly by a
- sigwaiting thread. We need to work around this, perhaps unless
- there is hope soon for a fixed glibc.
-
- * orig_ct in the byterange/multipart handling may not be
- needed. Apache 1.3 just never stashed "multipart" into
- r->content_type. We should probably follow suit since the
- byterange stuff doesn't want the rest of the code to see the
- multipart content-type; the other code should still think it is
- dealing with the <orig_ct> stuff.
- Status: Greg volunteers to investigate (esp. since he was most
- likely the one to break it :-)
-
-Binaries (probably not till beta):
-
- Platform Avail. Volunteer
- ------------------------------------------------------------------
- AIX 4.3.3 no Bill Stoddard
- Mandrake 8.1 no open
- FreeBSD 4.1 no open
- hppa2.0w-hp-hpux11.00 no Cliff Woolley
- i386-pc-solaris2.8 no Aaron Bannert
- i386-unknown-freebsd4.5 no
- i386-unknown-freebsd4.6 no Cliff Woolley
- i686-pc-linux-gnu-slackware81 no Cliff Woolley
- i686-pc-linux-gnu-rh70 no Aaron Bannert
- i686-pc-linux-gnu-rh73 no Cliff Woolley
- ia64-hp-hpux11.20 no
- powerpc-apple-darwin5.5 no Aaron Bannert
- powerpc-unknown-linux-gnu no Graham Leggett
- s390-ibm-linux no Greg Ames
- sparc-sun-solaris2.8 no Jim Jagielski
- NetWare no Brad Nicholes
- OS/2 no Brian Havard
- OS/390 no Greg Ames
- Win32-x86 no William Rowe
diff --git a/VERSIONING b/VERSIONING
deleted file mode 100644
index 9ca9783701..0000000000
--- a/VERSIONING
+++ /dev/null
@@ -1,154 +0,0 @@
-APACHE 2.x VERSIONING
-=====================
-Last modified at [$Date: 2002/10/28 04:16:40 $]
-
-
-INTRODUCTION
-------------
-The Apache HTTP Server project must balance two competing and disjoint
-objectives: maintain stable code for third party authors, distributors and
-most importantly users so that bug and security fixes can be quickly adopted
-without significant hardship due to user-visible changes; and continue the
-development process that requires ongoing redesign to correct earlier
-oversights and to add additional features.
-
-The Apache HTTP Server, through version 2.0, used the Module Magic Number (MMN)
-to reflect API changes. This had the shortcoming of often leaving users
-hunting to replace binary third party modules that were now incompatible.
-This also left module authors searching through the API change histories to
-determine the exact cause for the MMN change and whether their module was
-affected.
-
-With the simultaneous release of Apache 2.2-stable and Apache 2.3-development,
-the Apache HTTP Server project is moving towards a more predictable stable
-release cycle, while allowing forward progress to occur without concern
-for breaking the stable branch. This document explains the rationale between
-the two versions and their behavior.
-
-
-STABLE RELEASES, 2.{even}.{revision}
-------------------------------------
-
-All even numbered releases will be considered stable revisions.
-
-Stable revisions will retain forward compatiblity to the maximum
-possible extent. Features may be added during minor revisions, and
-features may be deprecated by making appropriate notations in the
-documentation, but no features may be removed.
-
-In essence, that implies that you can upgrade from one minor revision
-to the next with a minimum of trouble. In particular, this means:
-
- * The Module API will retain forward compatibility.
- It will not be necessary to update modules to work with new
- revisions of the stable tree.
-
- * The run-time configuration will be forward compatible.
- No configuration changes will be necessary to work with new
- revisions of the stable tree.
-
- * Compile-time configuration will be forward compatible.
- The configure command line options that work in one release
- of the stable tree will also work in the next release.
-
-As always, it will be necessary to test any new release to assure
-that it works correctly with a particular configuration and a
-particular set of modules, but every effort will be made to assure
-that upgrades are as smooth as possible.
-
-In addition, the following development restrictions will aid in
-keeping the stable tree as safe as possible:
-
- * No 'Experimental' modules; while it may be possible (based on API changes
- required to support a given module) to load a 2.3-development module into
- a 2.2-stable build of Apache, there are no guarantees. Experimental
- modules will be introduced to the 2.3-development versions and either
- added to 2.2-stable once they are proven and compatible, or deferred
- to the 2.4-stable release if they cannot be incorporated in the current
- stable release due to API change requirements.
-
- * The stable CVS tree should not remain unstable at any time. Atomic commits
- aught be used to introduce code from the development version to the stable
- tree. At any given time a security release may be in preparation,
- unbeknownst to other contributors. At any given time, testers may be
- checking out CVS head to confirm that a bug has been corrected. And as
- all code was well-tested in development prior to committing to the stable
- tree, there is really no reason for this tree to be broken for more than
- a few minutes during a lengthy commit.
-
-In order to avoid 'skipped' release numbers in the stable releases, the
-Release Manager will generally roll a release candidate (APACHE_#_#_#_RC#)
-tag. Release Candidate tarballs will be announced to the
-stable-testers@httpd.apache.org for the stable tree. Then, the participants
-will vote on the quality of the proposed release tarball.
-
-The final APACHE_#_#_# tag will not exist until the APACHE_#_#_#_RC# candidate
-has passed the usual votes to release that version. Only then is the final
-tarball packaged, removing all -rc# designations from the version number, and
-tagging the tree with the release number.
-
-DEVELOPMENT RELEASES, 2.{odd}.{revision}
------------------------------------------
-
-All odd numbered releases designate the 'next' possible stable release,
-therefore the current development version will always be one greater than
-the current stable release. Work proceeds on development releases, permitting
-the modification of the MMN at any time in order to correct deficiencies
-or shortcomings in the API. This means that modules from one development
-release to another may not be binary compatible, or may not successfully
-compile without modification to accomodate the API changes.
-
-The only 'supported' development release at any time will be the most
-recently released version. Developers will not be answering bug reports
-of older development releases once a new release is available. It becomes
-the resposibility of the reporter to use the latest development version
-to confirm that any issue still exists.
-
-Any new code, new API features or new ('experimental') modules may be
-promoted at any time to the next stable release, by a vote of the project
-contributors. This vote is based on the technical stability of the new
-code and the stability of the interface. Once moved to stable, that feature
-cannot change for the remainder of that stable release cycle, so the vote must
-reflect that the final decisions on the behavior and naming of that new
-feature were reached. Vetos continue to apply to this choice of introducing
-the new work to the stable version.
-
-At any given time, when the quality of changes to the development branch
-is considered release quality, that version may become a candidate for the
-next stable release. This includes some or all of the API changes, promoting
-experimental modules to stable or deprecating and eliminating older modules
-from the last stable release. All of these choices are considered by the
-project as a group in the interests of promoting the stable release, so that
-any given change may be 'deferred' for a future release by the group, rather
-than introduce unacceptable risks to adopting the next stable release.
-
-Third party module authors are strongly encouraged to test with the latest
-development version. This assures that the module will be ready for the next
-stable release, but more importantly, the author can react to shortcomings
-in the API early enough to warn the dev@httpd.apache.org community of the
-shortcomings so that they can be addressed before the stable release. The
-entire burden is on the module author to anticipate the needs of their module
-before the stable release is created. Once a new stable release cycle has
-begun, that API will be present for the lifetime of the stable release. Any
-desired changes in the stable versions must wait for inclusion into the next
-release cycle.
-
-When deciding to promote a development tree to being stable, a determination
-should be made whether the changes since the last stable version warrant a
-major version bump. That is, if 2.2 is the current stable version and 2.3 is
-'ready' to become stable, the group needs to decide if the next stable
-version is 2.4 or 3.0. One suggested rule of thumb is that if it requires
-too much effort to port a module from 2.2 to 2.4, then the stable version
-should be labeled 3.0.
-
-In order to ease the burden of creating development releases, the process
-for packaging a development releases is less formal than for the stable
-release. This strategy reflects the fact that while in development, versions
-are cheap. Development releases may be classified as alpha, beta, or GA
-to reflect the group's perceived stability of the tree. Development releases
-may be made at any time by any committer.
-
-Please read the following link for a more detailed description of the
-development release strategy:
-
-http://httpd.apache.org/dev/release.html
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644
index bf214addc3..0000000000
--- a/acinclude.m4
+++ /dev/null
@@ -1,528 +0,0 @@
-
-dnl APACHE_HELP_STRING(LHS, RHS)
-dnl Autoconf 2.50 can not handle substr correctly. It does have
-dnl AC_HELP_STRING, so let's try to call it if we can.
-dnl Note: this define must be on one line so that it can be properly returned
-dnl as the help string.
-AC_DEFUN(APACHE_HELP_STRING,[ifelse(regexp(AC_ACVERSION, 2\.1), -1, AC_HELP_STRING($1,$2),[ ]$1 substr([ ],len($1))$2)])dnl
-
-dnl APACHE_SUBST(VARIABLE)
-dnl Makes VARIABLE available in generated files
-dnl (do not use @variable@ in Makefiles, but $(variable))
-AC_DEFUN(APACHE_SUBST,[
- APACHE_VAR_SUBST="$APACHE_VAR_SUBST $1"
- AC_SUBST($1)
-])
-
-dnl APACHE_FAST_OUTPUT(FILENAME)
-dnl Perform substitutions on FILENAME (Makefiles only)
-AC_DEFUN(APACHE_FAST_OUTPUT,[
- APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES $1"
-])
-
-dnl APACHE_GEN_CONFIG_VARS
-dnl Creates config_vars.mk
-AC_DEFUN(APACHE_GEN_CONFIG_VARS,[
- APACHE_SUBST(abs_srcdir)
- APACHE_SUBST(bindir)
- APACHE_SUBST(sbindir)
- APACHE_SUBST(cgidir)
- APACHE_SUBST(logfiledir)
- APACHE_SUBST(exec_prefix)
- APACHE_SUBST(datadir)
- APACHE_SUBST(localstatedir)
- APACHE_SUBST(mandir)
- APACHE_SUBST(libdir)
- APACHE_SUBST(libexecdir)
- APACHE_SUBST(htdocsdir)
- APACHE_SUBST(manualdir)
- APACHE_SUBST(includedir)
- APACHE_SUBST(errordir)
- APACHE_SUBST(iconsdir)
- APACHE_SUBST(sysconfdir)
- APACHE_SUBST(installbuilddir)
- APACHE_SUBST(runtimedir)
- APACHE_SUBST(proxycachedir)
- APACHE_SUBST(other_targets)
- APACHE_SUBST(progname)
- APACHE_SUBST(prefix)
- APACHE_SUBST(AWK)
- APACHE_SUBST(CC)
- APACHE_SUBST(CPP)
- APACHE_SUBST(CXX)
- APACHE_SUBST(CPPFLAGS)
- APACHE_SUBST(CFLAGS)
- APACHE_SUBST(CXXFLAGS)
- APACHE_SUBST(LTFLAGS)
- APACHE_SUBST(LDFLAGS)
- APACHE_SUBST(LT_LDFLAGS)
- APACHE_SUBST(SH_LDFLAGS)
- APACHE_SUBST(HTTPD_LDFLAGS)
- APACHE_SUBST(UTIL_LDFLAGS)
- APACHE_SUBST(LIBS)
- APACHE_SUBST(DEFS)
- APACHE_SUBST(INCLUDES)
- APACHE_SUBST(NOTEST_CPPFLAGS)
- APACHE_SUBST(NOTEST_CFLAGS)
- APACHE_SUBST(NOTEST_CXXFLAGS)
- APACHE_SUBST(NOTEST_LDFLAGS)
- APACHE_SUBST(NOTEST_LIBS)
- APACHE_SUBST(EXTRA_CPPFLAGS)
- APACHE_SUBST(EXTRA_CFLAGS)
- APACHE_SUBST(EXTRA_CXXFLAGS)
- APACHE_SUBST(EXTRA_LDFLAGS)
- APACHE_SUBST(EXTRA_LIBS)
- APACHE_SUBST(EXTRA_INCLUDES)
- APACHE_SUBST(LIBTOOL)
- APACHE_SUBST(SHELL)
- APACHE_SUBST(MODULE_DIRS)
- APACHE_SUBST(MODULE_CLEANDIRS)
- APACHE_SUBST(PORT)
- APACHE_SUBST(nonssl_listen_stmt_1)
- APACHE_SUBST(nonssl_listen_stmt_2)
- APACHE_SUBST(CORE_IMPLIB_FILE)
- APACHE_SUBST(CORE_IMPLIB)
- APACHE_SUBST(SH_LIBS)
- APACHE_SUBST(SH_LIBTOOL)
- APACHE_SUBST(MK_IMPLIB)
- APACHE_SUBST(MKDEP)
- APACHE_SUBST(INSTALL_PROG_FLAGS)
- APACHE_SUBST(DSO_MODULES)
- APACHE_SUBST(APR_BINDIR)
- APACHE_SUBST(APR_INCLUDEDIR)
- APACHE_SUBST(APR_VERSION)
- APACHE_SUBST(APU_BINDIR)
- APACHE_SUBST(APU_INCLUDEDIR)
- APACHE_SUBST(APU_VERSION)
-
- abs_srcdir="`(cd $srcdir && pwd)`"
-
- echo creating config_vars.mk
- test -d build || $mkdir_p build
- > build/config_vars.mk
- for i in $APACHE_VAR_SUBST; do
- eval echo "$i = \$$i" >> build/config_vars.mk
- done
-])
-
-dnl APACHE_GEN_MAKEFILES
-dnl Creates Makefiles
-AC_DEFUN(APACHE_GEN_MAKEFILES,[
- $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $APACHE_FAST_OUTPUT_FILES
-])
-
-dnl ## APACHE_OUTPUT(file)
-dnl ## adds "file" to the list of files generated by AC_OUTPUT
-dnl ## This macro can be used several times.
-AC_DEFUN(APACHE_OUTPUT, [
- APACHE_OUTPUT_FILES="$APACHE_OUTPUT_FILES $1"
-])
-
-dnl
-dnl APACHE_TYPE_RLIM_T
-dnl
-dnl If rlim_t is not defined, define it to int
-dnl
-AC_DEFUN(APACHE_TYPE_RLIM_T, [
- AC_CACHE_CHECK([for rlim_t], ac_cv_type_rlim_t, [
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-], [rlim_t spoon;], [
- ac_cv_type_rlim_t=yes
- ],[ac_cv_type_rlim_t=no
- ])
- ])
- if test "$ac_cv_type_rlim_t" = "no" ; then
- AC_DEFINE(rlim_t, int,
- [Define to 'int' if <sys/resource.h> doesn't define it for us])
- fi
-])
-
-dnl APACHE_MODPATH_INIT(modpath)
-AC_DEFUN(APACHE_MODPATH_INIT,[
- current_dir=$1
- modpath_current=modules/$1
- modpath_static=
- modpath_shared=
- test -d $1 || $srcdir/build/mkdir.sh $modpath_current
- > $modpath_current/modules.mk
-])dnl
-dnl
-AC_DEFUN(APACHE_MODPATH_FINISH,[
- echo "DISTCLEAN_TARGETS = modules.mk" >> $modpath_current/modules.mk
- echo "static = $modpath_static" >> $modpath_current/modules.mk
- echo "shared = $modpath_shared" >> $modpath_current/modules.mk
- if test ! -z "$modpath_static" -o ! -z "$modpath_shared"; then
- MODULE_DIRS="$MODULE_DIRS $current_dir"
- else
- MODULE_CLEANDIRS="$MODULE_CLEANDIRS $current_dir"
- fi
- APACHE_FAST_OUTPUT($modpath_current/Makefile)
-])dnl
-dnl
-dnl APACHE_MODPATH_ADD(name[, shared[, objects [, ldflags[, libs]]]])
-AC_DEFUN(APACHE_MODPATH_ADD,[
- if test -z "$3"; then
- objects="mod_$1.lo"
- else
- objects="$3"
- fi
-
- if test -z "$module_standalone"; then
- if test -z "$2"; then
- # The filename of a convenience library must have a "lib" prefix:
- libname="libmod_$1.la"
- BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
- modpath_static="$modpath_static $libname"
- cat >>$modpath_current/modules.mk<<EOF
-$libname: $objects
- \$(MOD_LINK) $objects $5
-EOF
- else
- apache_need_shared=yes
- libname="mod_$1.la"
- shobjects=`echo $objects | sed 's/\.lo/.slo/g'`
- modpath_shared="$modpath_shared $libname"
- cat >>$modpath_current/modules.mk<<EOF
-$libname: $shobjects
- \$(SH_LINK) -rpath \$(libexecdir) -module -avoid-version $4 $objects $5
-EOF
- fi
- fi
-])dnl
-
-dnl
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-dnl
-dnl default is one of:
-dnl yes -- enabled by default. user must explicitly disable.
-dnl no -- disabled under default, most, all. user must explicitly enable.
-dnl most -- disabled by default. enabled explicitly or with most or all.
-dnl static -- enabled as static by default, must be explicitly changed.
-dnl "" -- disabled under default, most. enabled explicitly or with all.
-dnl
-dnl basically: yes/no is a hard setting. "most" means follow the "most"
-dnl setting. otherwise, fall under the "all" setting.
-dnl explicit yes/no always overrides.
-dnl
-AC_DEFUN(APACHE_MODULE,[
- AC_MSG_CHECKING(whether to enable mod_$1)
- define([optname],[--]ifelse($5,yes,disable,enable)[-]translit($1,_,-))dnl
- AC_ARG_ENABLE(translit($1,_,-),APACHE_HELP_STRING(optname(),$2),,enable_$1=ifelse($5,,maybe-all,$5))
- undefine([optname])dnl
- _apmod_extra_msg=""
- dnl When --enable-modules=most is set and the module was not explicitly
- dnl requested, allow a module to disable itself if its pre-reqs fail.
- if test "$module_selection" = "most" -a "$enable_$1" = "most"; then
- _apmod_error_fatal="no"
- else
- _apmod_error_fatal="yes"
- fi
- if test "$enable_$1" = "static"; then
- enable_$1=yes
- elif test "$enable_$1" = "yes"; then
- enable_$1=$module_default
- _apmod_extra_msg=" ($module_selection)"
- elif test "$enable_$1" = "most"; then
- if test "$module_selection" = "most" -o "$module_selection" = "all"; then
- enable_$1=$module_default
- _apmod_extra_msg=" ($module_selection)"
- elif test "$enable_$1" != "yes"; then
- enable_$1=no
- fi
- elif test "$enable_$1" = "maybe-all"; then
- if test "$module_selection" = "all"; then
- enable_$1=$module_default
- _apmod_extra_msg=" (all)"
- else
- enable_$1=no
- fi
- fi
- if test "$enable_$1" != "no"; then
- dnl If we plan to enable it, allow the module to run some autoconf magic
- dnl that may disable it because of missing dependencies.
- ifelse([$6],,:,[AC_MSG_RESULT([checking dependencies])
- $6
- AC_MSG_CHECKING(whether to enable mod_$1)
- if test "$enable_$1" = "no"; then
- if test "$_apmod_error_fatal" = "no"; then
- _apmod_extra_msg=" (disabled)"
- else
- AC_MSG_ERROR([mod_$1 has been requested but can not be built due to prerequisite failures])
- fi
- fi])
- fi
- AC_MSG_RESULT($enable_$1$_apmod_extra_msg)
- if test "$enable_$1" != "no"; then
- case "$enable_$1" in
- shared*)
- enable_$1=`echo $enable_$1|sed 's/shared,*//'`
- sharedobjs=yes
- shared=yes
- DSO_MODULES="$DSO_MODULES $1"
- ;;
- *)
- MODLIST="$MODLIST ifelse($4,,$1,$4)"
- if test "$1" = "so"; then
- sharedobjs=yes
- fi
- shared="";;
- esac
- define([modprefix], [MOD_]translit($1, [a-z-], [A-Z_]))
- APACHE_MODPATH_ADD($1, $shared, $3,, [\$(]modprefix[_LDADD)])
- APACHE_SUBST(modprefix[_LDADD])
- undefine([modprefix])
- fi
-])dnl
-
-dnl
-dnl APACHE_ENABLE_MODULES
-dnl
-AC_DEFUN(APACHE_ENABLE_MODULES,[
- module_selection=default
- module_default=yes
-
- AC_ARG_ENABLE(modules,
- APACHE_HELP_STRING(--enable-modules=MODULE-LIST,Space-separated list of modules to enable | "all" | "most"),[
- for i in $enableval; do
- if test "$i" = "all" -o "$i" = "most"; then
- module_selection=$i
- else
- i=`echo $i | sed 's/-/_/g'`
- eval "enable_$i=yes"
- fi
- done
- ])
-
- AC_ARG_ENABLE(mods-shared,
- APACHE_HELP_STRING(--enable-mods-shared=MODULE-LIST,Space-separated list of shared modules to enable | "all" | "most"),[
- for i in $enableval; do
- if test "$i" = "all" -o "$i" = "most"; then
- module_selection=$i
- module_default=shared
- else
- i=`echo $i | sed 's/-/_/g'`
- eval "enable_$i=shared"
- fi
- done
- ])
-])
-
-AC_DEFUN(APACHE_REQUIRE_CXX,[
- if test -z "$apache_cxx_done"; then
- AC_PROG_CXX
- AC_PROG_CXXCPP
- apache_cxx_done=yes
- fi
-])
-
-dnl
-dnl APACHE_CHECK_SSL_TOOLKIT
-dnl
-dnl Configure for the detected openssl/ssl-c toolkit installation, giving
-dnl preference to "--with-ssl=<path>" if it was specified.
-dnl
-AC_DEFUN(APACHE_CHECK_SSL_TOOLKIT,[
-if test "x$ap_ssltk_configured" = "x"; then
- dnl initialise the variables we use
- ap_ssltk_base=""
- ap_ssltk_inc=""
- ap_ssltk_lib=""
- ap_ssltk_type=""
-
- dnl Determine the SSL/TLS toolkit's base directory, if any
- AC_MSG_CHECKING(for SSL/TLS toolkit base)
- AC_ARG_WITH(sslc, APACHE_HELP_STRING(--with-sslc=DIR,RSA SSL-C SSL/TLS toolkit), [
- dnl If --with-sslc specifies a directory, we use that directory or fail
- if test "x$withval" != "xyes" -a "x$withval" != "x"; then
- dnl This ensures $withval is actually a directory and that it is absolute
- ap_ssltk_base="`cd $withval ; pwd`"
- fi
- ap_ssltk_type="sslc"
- ])
- AC_ARG_WITH(ssl, APACHE_HELP_STRING(--with-ssl=DIR,OpenSSL SSL/TLS toolkit), [
- dnl If --with-ssl specifies a directory, we use that directory or fail
- if test "x$withval" != "xyes" -a "x$withval" != "x"; then
- dnl This ensures $withval is actually a directory and that it is absolute
- ap_ssltk_base="`cd $withval ; pwd`"
- fi
- ])
- if test "x$ap_ssltk_base" = "x"; then
- AC_MSG_RESULT(none)
- else
- AC_MSG_RESULT($ap_ssltk_base)
- fi
-
- dnl Run header and version checks
- saved_CPPFLAGS=$CPPFLAGS
- if test "x$ap_ssltk_base" != "x"; then
- ap_ssltk_inc="-I$ap_ssltk_base/include"
- CPPFLAGS="$CPPFLAGS $ap_ssltk_inc"
- fi
- if test "x$ap_ssltk_type" = "x"; then
- AC_MSG_CHECKING(for OpenSSL version)
- dnl First check for manditory headers
- AC_CHECK_HEADERS([openssl/opensslv.h openssl/ssl.h], [ap_ssltk_type="openssl"], [])
- if test "$ap_ssltk_type" = "openssl"; then
- dnl so it's OpenSSL - test for a good version
- AC_TRY_COMPILE([#include <openssl/opensslv.h>],[
-#if !defined(OPENSSL_VERSION_NUMBER)
-#error "Missing openssl version"
-#endif
-#if (OPENSSL_VERSION_NUMBER < 0x009060af) \
- || ((OPENSSL_VERSION_NUMBER > 0x00907000) && (OPENSSL_VERSION_NUMBER < 0x0090702f))
-#error "Insecure openssl version " OPENSSL_VERSION_TEXT
-#endif],
- [AC_MSG_RESULT(OK)],
- [dnl Replace this with OPENSSL_VERSION_TEXT from opensslv.h?
- AC_MSG_RESULT([not encouraging])
- echo "WARNING: OpenSSL version may contain security vulnerabilities!"
- echo " Ensure the latest security patches have been applied!"
- ])
- dnl Look for additional, possibly missing headers
- AC_CHECK_HEADERS(openssl/engine.h)
- if test -n "$PKGCONFIG"; then
- $PKGCONFIG openssl
- if test $? -eq 0; then
- ap_ssltk_inc="$ap_ssltk_inc `$PKGCONFIG --cflags-only-I openssl`"
- CPPFLAGS="$CPPFLAGS $ap_ssltk_inc"
- fi
- fi
- else
- AC_MSG_RESULT([no OpenSSL headers found])
- fi
- fi
- if test "$ap_ssltk_type" != "openssl"; then
- dnl Might be SSL-C - report, then test anything relevant
- AC_MSG_CHECKING(for SSL-C version)
- AC_CHECK_HEADERS([sslc.h], [ap_ssltk_type="sslc"], [ap_ssltk_type=""])
- if test "$ap_ssltk_type" = "sslc"; then
- AC_MSG_CHECKING(for SSL-C version)
- AC_TRY_COMPILE([#include <sslc.h>],[
-#if !defined(SSLC_VERSION_NUMBER)
-#error "Missing SSL-C version"
-#endif
-#if SSLC_VERSION_NUMBER < 0x2310
-#define stringize_ver(x) #x
-#error "Insecure SSL-C version " stringize_ver(SSLC_VERSION_NUMBER)
-#endif],
- [AC_MSG_RESULT(OK)],
- [dnl Replace this with SSLC_VERSION_NUMBER?
- AC_MSG_RESULT([not encouraging])
- echo "WARNING: SSL-C version may contain security vulnerabilities!"
- echo " Ensure the latest security patches have been applied!"
- ])
- else
- AC_MSG_RESULT([no SSL-C headers found])
- fi
- fi
- dnl restore
- CPPFLAGS=$saved_CPPFLAGS
- if test "x$ap_ssltk_type" = "x"; then
- AC_MSG_ERROR([...No recognized SSL/TLS toolkit detected])
- fi
-
- dnl Run library and function checks
- saved_LDFLAGS=$LDFLAGS
- saved_LIBS=$LIBS
- if test "x$ap_ssltk_base" != "x"; then
- if test -d "$ap_ssltk_base/lib"; then
- ap_ssltk_lib="$ap_ssltk_base/lib"
- else
- ap_ssltk_lib="$ap_ssltk_base"
- fi
- LDFLAGS="$LDFLAGS -L$ap_ssltk_lib"
- fi
- dnl make sure "other" flags are available so libcrypto and libssl can link
- LIBS="$LIBS `$apr_config --libs`"
- liberrors=""
- if test "$ap_ssltk_type" = "openssl"; then
- AC_CHECK_LIB(crypto, SSLeay_version, [], [liberrors="yes"])
- AC_CHECK_LIB(ssl, SSL_CTX_new, [], [liberrors="yes"])
- AC_CHECK_FUNCS(ENGINE_init)
- AC_CHECK_FUNCS(ENGINE_load_builtin_engines)
- else
- AC_CHECK_LIB(sslc, SSLC_library_version, [], [liberrors="yes"])
- AC_CHECK_LIB(sslc, SSL_CTX_new, [], [liberrors="yes"])
- AC_CHECK_FUNCS(SSL_set_state)
- fi
- AC_CHECK_FUNCS(SSL_set_cert_store)
- dnl restore
- LDFLAGS=$saved_LDFLAGS
- LIBS=$saved_LIBS
- if test "x$liberrors" != "x"; then
- AC_MSG_ERROR([... Error, SSL/TLS libraries were missing or unusable])
- fi
-
- dnl Adjust apache's configuration based on what we found above.
- dnl (a) define preprocessor symbols
- if test "$ap_ssltk_type" = "openssl"; then
- AC_DEFINE(HAVE_OPENSSL, 1, [Define if SSL is supported using OpenSSL])
- else
- AC_DEFINE(HAVE_SSLC, 1, [Define if SSL is supported using SSL-C])
- fi
- dnl (b) hook up include paths
- if test "x$ap_ssltk_inc" != "x"; then
- APR_ADDTO(INCLUDES, [$ap_ssltk_inc])
- fi
- dnl (c) hook up linker paths
- if test "x$ap_ssltk_lib" != "x"; then
- APR_ADDTO(LDFLAGS, ["-L$ap_ssltk_lib"])
- if test "x$ap_platform_runtime_link_flag" != "x"; then
- APR_ADDTO(LDFLAGS, ["$ap_platform_runtime_link_flag$ap_ssltk_lib"])
- fi
- fi
- # Put SSL libraries in SSL_LIBS.
- if test "$ap_ssltk_type" = "openssl"; then
- APR_SETVAR(SSL_LIBS, [-lssl -lcrypto])
- if test -n "$PKGCONFIG"; then
- $PKGCONFIG openssl
- if test $? -eq 0; then
- ap_ssltk_libdep=`$PKGCONFIG --libs openssl`
- APR_ADDTO(SSL_LIBS, $ap_ssltk_libdep)
- fi
- fi
- else
- APR_SETVAR(SSL_LIBS, [-lsslc])
- fi
- APACHE_SUBST(SSL_LIBS)
-fi
-])
-
-dnl
-dnl APACHE_EXPORT_ARGUMENTS
-dnl Export (via APACHE_SUBST) the various path-related variables that
-dnl apache will use while generating scripts like autoconf and apxs and
-dnl the default config file.
-
-AC_DEFUN(APACHE_SUBST_EXPANDED_ARG,[
- APR_EXPAND_VAR(exp_$1, [$]$1)
- APACHE_SUBST(exp_$1)
- APR_PATH_RELATIVE(rel_$1, [$]exp_$1, ${prefix})
- APACHE_SUBST(rel_$1)
-])
-
-AC_DEFUN(APACHE_EXPORT_ARGUMENTS,[
- APACHE_SUBST_EXPANDED_ARG(exec_prefix)
- APACHE_SUBST_EXPANDED_ARG(bindir)
- APACHE_SUBST_EXPANDED_ARG(sbindir)
- APACHE_SUBST_EXPANDED_ARG(libdir)
- APACHE_SUBST_EXPANDED_ARG(libexecdir)
- APACHE_SUBST_EXPANDED_ARG(mandir)
- APACHE_SUBST_EXPANDED_ARG(sysconfdir)
- APACHE_SUBST_EXPANDED_ARG(datadir)
- APACHE_SUBST_EXPANDED_ARG(installbuilddir)
- APACHE_SUBST_EXPANDED_ARG(errordir)
- APACHE_SUBST_EXPANDED_ARG(iconsdir)
- APACHE_SUBST_EXPANDED_ARG(htdocsdir)
- APACHE_SUBST_EXPANDED_ARG(manualdir)
- APACHE_SUBST_EXPANDED_ARG(cgidir)
- APACHE_SUBST_EXPANDED_ARG(includedir)
- APACHE_SUBST_EXPANDED_ARG(localstatedir)
- APACHE_SUBST_EXPANDED_ARG(runtimedir)
- APACHE_SUBST_EXPANDED_ARG(logfiledir)
- APACHE_SUBST_EXPANDED_ARG(proxycachedir)
-])
-
diff --git a/apachenw.mcp.zip b/apachenw.mcp.zip
deleted file mode 100644
index 6e7e7224b3..0000000000
--- a/apachenw.mcp.zip
+++ /dev/null
Binary files differ
diff --git a/build/.cvsignore b/build/.cvsignore
deleted file mode 100644
index 7cb806e907..0000000000
--- a/build/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-rules.mk
-config_vars.mk
-apr_common.m4
-find_apr.m4
-find_apu.m4
-ltconfig
-ltmain.sh
-PrintPath
diff --git a/build/NWGNUenvironment.inc b/build/NWGNUenvironment.inc
deleted file mode 100644
index 206e0b4002..0000000000
--- a/build/NWGNUenvironment.inc
+++ /dev/null
@@ -1,305 +0,0 @@
-#
-# Setup needed Tools and Libraries
-#
-
-ifeq "$(wildcard $(AP_WORK)\NWGNUcustom.ini)" "$(AP_WORK)\NWGNUcustom.ini"
-include $(AP_WORK)\NWGNUcustom.ini
-CUSTOM_INI = $(AP_WORK)\NWGNUcustom.ini
-endif
-
-ifndef VERBOSE
-.SILENT:
-endif
-
-#
-# Treat like an include
-#
-ifndef EnvironmentDefined
-
-#
-# simple macros for parsing makefiles
-#
-EOLIST:=
-EMPTY :=
-COMMA := ,
-SPACE := $(EMPTY) $(EMPTY)
-
-#
-# Base environment
-#
-
-# Try and handle case issues
-ifndef NOVELLLIBC
-ifdef NovellLibC
-NOVELLLIBC = $(NovellLibC)
-endif
-endif
-
-ifndef NOVELLLIBC
-NOVELLLIBC = C:/novell/ndk/libc
-endif
-
-# This is a placeholder
-# ifndef LDAPSDK
-# LDAPSDK = C:/novell/ndk/cldapsdk
-# endif
-
-# This is a placeholder
-# ifndef ZLIBSDK
-# ZLIBSDK = C:/novell/ndk/zlibsdk
-# endif
-
-ifndef METROWERKS
-METROWERKS = C:\Program Files\Metrowerks\CodeWarrior
-endif
-
-# If LM_LICENSE_FILE isn't defined, define a variable that can be used to
-# restart make with it defined
-ifndef LM_LICENSE_FILE
-NO_LICENSE_FILE = NO_LICENSE_FILE
-endif
-
-#
-# Set the Release type that you want to build, possible values are:
-#
-# debug - full debug switches are set
-# noopt - normal switches are set (default)
-# optimized - optimization switches are set
-
-ifdef reltype
-RELEASE=$(reltype)
-endif
-
-ifdef RELTYPE
-RELEASE=$(RELTYPE)
-endif
-
-ifdef debug
-RELEASE=debug
-endif
-
-ifdef DEBUG
-RELEASE=debug
-endif
-
-ifdef optimized
-RELEASE=optimized
-endif
-
-ifdef OPTIMIZED
-RELEASE=optimized
-endif
-
-ifndef RELEASE
-RELEASE = optimized
-endif
-
-ifeq "$(RELEASE)" "debug"
-OBJDIR = Debug
-endif
-
-ifeq "$(RELEASE)" "noopt"
-OBJDIR = Noopt
-endif
-
-ifeq "$(RELEASE)" "optimized"
-OBJDIR = Release
-endif
-
-#
-# Setup compiler information
-#
-
-# MetroWerks NLM tools
-CC = mwccnlm
-CPP = mwccnlm
-LINK = mwldnlm
-LIB = mwldnlm -type library -w nocmdline
-
-NOVI = $(NOVELLLIBC)\imports
-
-INCDIRS = $(NOVELLLIBC)\include;$(NOVELLLIBC)\include\nks;$(NOVELLLIBC)\include\winsock;
-ifneq "$(LDAPSDK)" ""
-INCDIRS := $(INCDIRS);$(LDAPSDK)/inc
-endif
-ifneq "$(ZLIBSDK)" ""
-INCDIRS := $(INCDIRS);$(ZLIBSDK)
-endif
-
-DEFINES = -DNETWARE
-
-#
-# MetroWerks static Libraries
-
-CLIB3S = $(METROWERKS)\Novell Support\Metrowerks Support\Libraries\Runtime\mwcrtl.lib
-MATH3S =
-PLIB3S = $(METROWERKS)\Novell Support\Metrowerks Support\Libraries\MSL C++\MWCPP.lib
-
-# Base compile flags
-# and prefix or precompiled header added here.
-
-# The default flags are as follows:
-#
-# -c compile only, no link
-# -nosyspath treat #include <...> like #include "..."
-# -Cpp_exceptions off disable C++ exceptions
-# -RTTI off disable C++ run-time typing information
-# -align 4 align on 4 byte bounderies
-# -w nocmdline disable command-line driver/parser warnings
-# -proc PII generate code base on Pentium II instruction set
-# -inst mmx use MMX extensions (Not used)
-
-CFLAGS = -c -nosyspath -Cpp_exceptions off -RTTI off -align 4 -w nocmdline -proc PII
-
-# -g generate debugging information
-# -O0 level 0 optimizations
-
-ifeq "$(RELEASE)" "debug"
-CFLAGS += -g -O0
-endif
-
-# -O4,p level 4 optimizations, optimize for speed
-ifeq "$(RELEASE)" "optimized"
-CFLAGS += -O4,p
-endif
-
-# -prefix pre_nw.h #include pre_nw.h for all files
-
-CFLAGS += -prefix pre_nw.h
-
-
-PATH:=$(PATH);$(METROWERKS)\bin;$(METROWERKS)\Other Metrowerks Tools\Command Line Tools
-
-#
-# Declare major project deliverables output directories here
-#
-
-ifdef DEST
-INSTALL = $(DEST)
-ifeq (\, $(findstring \,$(INSTALL)))
-INSTDIRS = $(DEST)
-endif
-endif
-
-ifdef dest
-INSTALL = $(dest)
-ifeq (\, $(findstring \,$(INSTALL)))
-INSTDIRS = $(dest)
-endif
-endif
-
-ifndef INSTALL
-INSTALL = $(AP_WORK)\Dist
-INSTDIRS = $(AP_WORK)\Dist
-endif
-
-# Add support for building IPV6 alongside
-ifneq "$(IPV6)" ""
-DEFINES += -DNW_BUILD_IPV6
-INCDIRS := $(NOVELLLIBC)\include\winsock\IPV6;$(INCDIRS)
-
-ifneq "$(findstring IPV6,$(OBJDIR))" "IPV6"
-OBJDIR := $(OBJDIR)_IPV6
-endif
-
-ifneq "$(findstring IPV6,$(INSTALL))" "IPV6"
-INSTALL := $(INSTALL)_IPV6
-endif
-
-ifneq "$(findstring IPV6,$(INSTDIRS))" "IPV6"
-INSTDIRS := $(INSTDIRS)_IPV6
-endif
-
-endif
-
-INSTDEVDIRS := \
- $(INSTDIRS) \
- $(INSTALL)\Apache2\include \
- $(INSTALL)\Apache2\lib \
-
-INSTDIRS += \
- $(INSTALL)\Apache2 \
- $(INSTALL)\Apache2\bin \
- $(INSTALL)\Apache2\cgi-bin \
- $(INSTALL)\Apache2\conf \
- $(INSTALL)\Apache2\error \
- $(INSTALL)\Apache2\htdocs \
- $(INSTALL)\Apache2\icons \
- $(INSTALL)\Apache2\logs \
- $(INSTALL)\Apache2\man \
- $(INSTALL)\Apache2\manual \
- $(INSTALL)\Apache2\modules \
-
-#
-# Declare Command and tool macros here
-#
-
-# Os2LibPath is an extra check to see if we are on NT
-ifdef Os2LibPath
-OS = Windows_NT
-endif
-
-ifeq "$(OS)" "Windows_NT"
-CMD=cmd /C
-CHK=cmd /C if exist
-CHKNOT=cmd /C if not exist
-DEL = del /F
-DELTREE = cmd /C rd /s/q
-WINNT=1
-XCOPYSW = /E
-else
-CMD=command /C
-CHK=command /C if exist
-CHKNOT=command /C if not exist
-DEL = del
-DELTREE = deltree /y
-XCOPYSW = /E /Y
-endif
-
-
-#
-# Setup base C compiler flags
-#
-
-#
-# Common directories
-#
-
-STDMOD = $(AP_WORK)/modules
-NWOS = $(AP_WORK)/os/netware
-SERVER = $(AP_WORK)/server
-SRC = $(AP_WORK)
-APR = $(AP_WORK)/srclib/apr
-APRUTIL = $(AP_WORK)/srclib/apr-util
-SUPMOD = $(AP_WORK)/support
-PCRE = $(AP_WORK)/srclib/pcre
-APRTEST = $(AP_WORK)/srclib/apr/test
-HTTPD = $(AP_WORK)/modules/http
-XML = $(AP_WORK)/srclib/apr-util/xml
-
-#
-# Internal Libraries
-#
-
-APRLIB = $(APR)/$(OBJDIR)/aprlib.lib
-APRUTLIB = $(APRUTIL)/$(OBJDIR)/aprutil.lib
-STMODLIB = $(STDMOD)/$(OBJDIR)/stdmod.lib
-PCRELIB = $(PCRE/$(OBJDIR)/pcre.lib
-NWOSLIB = $(NWOS)/$(OBJDIR)/netware.lib
-SERVLIB = $(SERVER)/$(OBJDIR)/server.lib
-HTTPDLIB = $(HTTPD)/$(OBJDIR)/httpd.lib
-XMLLIB = $(XML)/$(OBJDIR)/xmllib.lib
-
-#
-# Additional general defines
-#
-
-EnvironmentDefined = 1
-endif # ifndef EnvironmentDefined
-
-# This is always set so that it will show up in lower directories
-
-ifdef Path
-Path = $(PATH)
-endif
-
diff --git a/build/NWGNUhead.inc b/build/NWGNUhead.inc
deleted file mode 100644
index dbb3f9597f..0000000000
--- a/build/NWGNUhead.inc
+++ /dev/null
@@ -1,106 +0,0 @@
-#
-# Obtain the global build environment
-#
-
-include $(AP_WORK)\build\NWGNUenvironment.inc
-
-#
-# Define base targets and rules
-#
-
-TARGETS = libs nlms install clobber_libs clobber_nlms clean installdev
-
-.PHONY : $(TARGETS) default all help $(NO_LICENSE_FILE)
-
-# Here is where we will use the NO_LICENSE_FILE variable to see if we need to
-# restart the make with it defined
-
-ifdef NO_LICENSE_FILE
-
-default: NO_LICENSE_FILE
-
-all: NO_LICENSE_FILE
-
-install :: NO_LICENSE_FILE
-
-installdev :: NO_LICENSE_FILE
-
-NO_LICENSE_FILE :
- $(MAKE) $(MAKECMDGOALS) -f NWGNUmakefile RELEASE=$(RELEASE) DEST="$(INSTALL)" LM_LICENSE_FILE="$(METROWERKS)\license.dat"
-
-else # LM_LICENSE_FILE must be defined so use the real targets
-
-default: $(SUBDIRS) libs nlms
-
-all: $(SUBDIRS) libs nlms install
-
-$(TARGETS) :: $(SUBDIRS)
-
-install :: nlms $(INSTDIRS)
-
-installdev :: $(INSTDEVDIRS)
-
-$(INSTDIRS) ::
- $(CHKNOT) $@\NUL mkdir $@
-
-$(INSTDEVDIRS) ::
- $(CHKNOT) $@\NUL mkdir $@
-
-endif #NO_LICENSE_FILE check
-
-help :
- @echo targets for RELEASE=$(RELEASE):
- @echo (default) . . . . libs nlms
- @echo all . . . . . . . does everything (libs nlms install)
- @echo libs. . . . . . . builds all libs
- @echo nlms. . . . . . . builds all nlms
- @echo install . . . . . builds libs and nlms and copies install files to
- @echo "$(INSTALL)"
- @echo installdev. . . . copies headers and files needed for development to
- @echo "$(INSTALL)"
- @echo clean . . . . . . deletes $(OBJDIR) dirs, *.err, and *.map
- @echo clobber_all . . . deletes all possible output from the make
- @echo clobber_install . deletes all files in $(INSTALL)
- @$(CMD) echo.
- @echo Multiple targets can be used on a single nmake command line -
- @echo (i.e. $(MAKE) clean all)
- @$(CMD) echo.
- @echo You can also specify RELEASE=debug, RELEASE=noopt, or RELEASE=optimized
- @echo The default is RELEASE=optimized
-
-clobber_all :: clean clobber_install
-
-clobber_install ::
- -$(DELTREE) $(INSTALL) 2>NUL
-
-#
-# build recursive targets
-#
-
-$(SUBDIRS) : FORCE
-ifneq "$(MAKECMDGOALS)" "clean"
- $(CMD) echo.
- @echo Building $(CURDIR)/$@
-endif
- $(MAKE) -C $@ $(MAKECMDGOALS) -f NWGNUmakefile RELEASE=$(RELEASE) DEST="$(INSTALL)" LM_LICENSE_FILE="$(LM_LICENSE_FILE)"
- $(CMD) echo.
-
-FORCE:
-
-#
-# Standard targets
-#
-
-clean :: $(SUBDIRS)
- @echo Cleaning up $(CURDIR)
- -$(DELTREE) $(OBJDIR) 2> NUL
- $(CHK) *.err $(DEL) *.err
- $(CHK) *.map $(DEL) *.map
- $(CHK) *.d $(DEL) *.d
- $(CHK) *.tmp $(DEL) *.tmp
- $(CHK) xc.bat $(DEL) xc.bat
- -$(DELTREE) $(OBJDIR) 2> NUL
-
-$(OBJDIR) ::
- $(CHKNOT) $(OBJDIR)\nul mkdir $(OBJDIR)
-
diff --git a/build/NWGNUmakefile b/build/NWGNUmakefile
deleted file mode 100644
index 8b631f21aa..0000000000
--- a/build/NWGNUmakefile
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-FILES_prebuild_headers = \
- $(APR)/include/apr.h \
- $(APRUTIL)/include/apu.h \
- $(APRUTIL)/include/apr_ldap.h \
- $(PCRE)/config.h \
- $(PCRE)/pcre.h \
- $(EOLIST)
-
-nlms :: $(NWOS)/httpd.imp
-
-$(NWOS)/httpd.imp : make_nw_export.awk nw_export.i
- @echo Generating $(subst /,\,$@)
- awk -f make_nw_export.awk nw_export.i | sort >$(NWOS)/httpd.imp
-
-nw_export.i : nw_export.inc $(FILES_prebuild_headers) cc.opt
- @echo Generating $(subst /,\,$@)
- $(CC) $< @cc.opt
-
-cc.opt : NWGNUmakefile $(AP_WORK)\build\NWGNUenvironment.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUhead.inc
- $(CHK) $@ $(DEL) $@
- @echo -P >> $@
- @echo -EP >> $@
- @echo -nosyspath >> $@
- @echo -w nocmdline >> $@
- @echo -DNETWARE >> $@
- @echo -DCORE_PRIVATE >> $@
- @echo -I..\include >> $@
- @echo -I..\modules\http >> $@
- @echo -I..\modules\aaa >> $@
- @echo -I..\os\netware >> $@
- @echo -I..\server\mpm\netware >> $@
- @echo -I..\srclib\apr\include >> $@
- @echo -I..\srclib\apr-util\include >> $@
- @echo -ir $(NOVELLLIBC) >> $@
-
-$(APR)/include/%.h: $(subst /,\,$(APR))\include\%.hnw
- @echo Creating $(subst /,\,$@)
- copy $< $(subst /,\,$(APR))\include\$(@F)
-
-$(APRUTIL)/include/%.h: $(subst /,\,$(APRUTIL))\include\%.hnw
- @echo Creating $(subst /,\,$@)
- copy $< $(subst /,\,$(APRUTIL))\include\$(@F)
-
-$(PCRE)/%.h: $(subst /,\,$(PCRE))\%.hw
- @echo Creating $(subst /,\,$@)
- copy $< $(subst /,\,$(PCRE))\$(@F)
-
-#
-# You can use this target if all that is needed is to copy files to the
-# installation area
-#
-install :: nlms FORCE
-
-
-clean ::
- $(CHK) nw_export.i $(DEL) nw_export.i
- $(CHK) cc.opt $(DEL) cc.opt
- $(CHK) NWGNUversion.inc $(DEL) NWGNUversion.inc
- $(CHK) $(subst /,\,$(APR))\include\apr.h $(DEL) $(subst /,\,$(APR))\include\apr.h
- $(CHK) $(subst /,\,$(APRUTIL))\include\apu.h $(DEL) $(subst /,\,$(APRUTIL))\include\apu.h
- $(CHK) $(subst /,\,$(APRUTIL))\include\apr_ldap.h $(DEL) $(subst /,\,$(APRUTIL))\include\apr_ldap.h
- $(CHK) $(subst /,\,$(PCRE))\config.h $(DEL) $(subst /,\,$(PCRE))\config.h
- $(CHK) $(subst /,\,$(PCRE))\pcre.h $(DEL) $(subst /,\,$(PCRE))\pcre.h
- $(CHK) $(subst /,\,$(NWOS))\httpd.imp $(DEL) $(subst /,\,$(NWOS))\httpd.imp
-
diff --git a/build/NWGNUtail.inc b/build/NWGNUtail.inc
deleted file mode 100644
index 3e13ee4cd4..0000000000
--- a/build/NWGNUtail.inc
+++ /dev/null
@@ -1,319 +0,0 @@
-#
-# This contains final targets and should be included at the end of any
-# NWGNUmakefile file
-#
-
-#
-# If we are going to create an nlm, make sure we have assigned variables to
-# use during the link.
-#
-echo NLM_NAME=$(NLM_NAME)
-ifndef NLM_NAME
-NLM_NAME = $(TARGET_nlm)
-endif
-
-ifndef NLM_DESCRIPTION
-NLM_DESCRIPTION = $(NLM_NAME)
-endif
-
-ifndef NLM_THREAD_NAME
-NLM_THREAD_NAME = $(NLM_NAME) Thread
-endif
-
-ifndef NLM_SCREEN_NAME
-NLM_SCREEN_NAME = DEFAULT
-endif
-
-ifndef NLM_COPYRIGHT
-NLM_COPYRIGHT = Copyright (c) 2000-2004 The Apache Software Foundation. All rights reserved.
-endif
-
-#
-# Create dependency lists based on the files available
-#
-
-CCOPT_DEPENDS = \
- $(AP_WORK)\build\NWGNUhead.inc \
- $(AP_WORK)\build\NWGNUenvironment.inc \
- $(AP_WORK)\build\NWGNUtail.inc \
- NWGNUmakefile \
- $(CUSTOM_INI) \
- $(EOLIST)
-
-CPPOPT_DEPENDS = \
- $(AP_WORK)\build\NWGNUhead.inc \
- $(AP_WORK)\build\NWGNUenvironment.inc \
- $(AP_WORK)\build\NWGNUtail.inc \
- NWGNUmakefile \
- $(CUSTOM_INI) \
- $(EOLIST)
-
-$(NLM_NAME)_LINKOPT_DEPENDS = \
- $(TARGET_lib) \
- $(AP_WORK)\build\NWGNUenvironment.inc \
- NWGNUmakefile \
- $(AP_WORK)\build\NWGNUtail.inc \
- $(CUSTOM_INI) \
- $(VERSION_INC) \
- $(EOLIST)
-
-ifeq "$(words $(strip $(TARGET_lib)))" "1"
-LIB_NAME = $(basename $(notdir $(TARGET_lib)))
-$(LIB_NAME)_LIBLST_DEPENDS = \
- $(FILES_lib_objs) \
- $(AP_WORK)\build\NWGNUenvironment.inc \
- NWGNUmakefile \
- $(AP_WORK)\build\NWGNUtail.inc \
- $(CUSTOM_INI) \
- $(EOLIST)
-endif
-
-ifeq "$(wildcard NWGNU$(LIB_NAME))" "NWGNU$(LIB_NAME)"
-$(LIB_NAME)_LIBLST_DEPENDS += NWGNU$(LIB_NAME)
-endif
-
-ifeq "$(wildcard NWGNU$(NLM_NAME))" "NWGNU$(NLM_NAME)"
-$(NLM_NAME)_LINKOPT_DEPENDS += NWGNU$(NLM_NAME)
-CCOPT_DEPENDS += NWGNU$(NLM_NAME)
-CPPOPT_DEPENDS += NWGNU$(NLM_NAME)
-endif
-
-#
-# Generic compiler rules
-#
-
-$(AP_WORK)\build\NWGNUversion.inc : $(AP_WORK)\include\ap_release.h $(AP_WORK)\build\nw_ver.awk
- @echo Generating $(subst /,\,$@)
- awk -f $(AP_WORK)\build\nw_ver.awk $(AP_WORK)\include\ap_release.h > $(AP_WORK)\build\NWGNUversion.inc
-
--include $(AP_WORK)\build\NWGNUversion.inc
-
-ifneq "$(strip $(VERSION_STR))" ""
-VERSION_INC = $(AP_WORK)\build\NWGNUversion.inc
-else
-VERSION = 2,0,0
-VERSION_STR = 2.0.0
-endif
-
-
-ifeq "$(words $(strip $(TARGET_nlm)))" "1"
-
-$(OBJDIR)/%.o: %.c $(OBJDIR)\$(NLM_NAME)_cc.opt
- @echo Compiling $<
- $(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\$(NLM_NAME)_cc.opt
-
-$(OBJDIR)\$(NLM_NAME)_cc.opt: $(CCOPT_DEPENDS)
- $(CHK) $@ $(DEL) $@
- @echo Generating $@
-ifneq "$(strip $(CFLAGS))" ""
- @echo $(CFLAGS) >> $@
-endif
-ifneq "$(strip $(XCFLAGS))" ""
- @echo $(XCFLAGS) >> $@
-endif
-ifneq "$(strip $(XINCDIRS))" ""
- @echo $(foreach xincdir,$(strip $(subst ;,$(SPACE),$(XINCDIRS))),-I$(xincdir)) >> $@
-endif
-ifneq "$(strip $(INCDIRS))" ""
- @echo $(foreach incdir,$(strip $(subst ;,$(SPACE),$(INCDIRS))),-I$(incdir)) >> $@
-endif
-ifneq "$(strip $(DEFINES))" ""
- @echo $(DEFINES) >> $@
-endif
-ifneq "$(strip $(XDEFINES))" ""
- @echo $(XDEFINES) >> $@
-endif
-
-$(OBJDIR)/%.o: %.cpp $(OBJDIR)\cpp.opt
- @echo Compiling $<
- $(CPP) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cpp.opt
-
-$(OBJDIR)\cpp.opt: $(CPPOPT_DEPENDS)
- $(CHK) $@ $(DEL) $@
- @echo Generating $@
-ifneq "$(strip $(CFLAGS))" ""
- @echo $(CFLAGS) >> $@
-endif
-ifneq "$(strip $(XCFLAGS))" ""
- @echo $(XCFLAGS) >> $@
-endif
-ifneq "$(strip $(XINCDIRS))" ""
- @echo $(foreach xincdir,$(strip $(subst ;,$(SPACE),$(XINCDIRS))),-I$(xincdir)) >> $@
-endif
-ifneq "$(strip $(INCDIRS))" ""
- @echo $(foreach incdir,$(strip $(subst ;,$(SPACE),$(INCDIRS))),-I$(incdir)) >> $@
-endif
-ifneq "$(strip $(DEFINES))" ""
- @echo $(DEFINES) >> $@
-endif
-ifneq "$(strip $(XDEFINES))" ""
- @echo $(XDEFINES) >> $@
-endif
-
-endif # one target nlm
-
-#
-# Rules to build libraries
-#
-
-# If we only have one target library then build it
-
-ifeq "$(words $(strip $(TARGET_lib)))" "1"
-
-$(TARGET_lib) : $(OBJDIR)\$(LIB_NAME)_lib.lst
- @echo Generating $@
- $(CHK) $(OBJDIR)\$(@F) $(DEL) $(OBJDIR)\$(@F)
- $(LIB) -o $(OBJDIR)\$(@F) @$?
-
-$(OBJDIR)\$(LIB_NAME)_lib.lst: $($(LIB_NAME)_LIBLST_DEPENDS)
- $(CHK) $@ $(DEL) $@
- @echo Generating $@
-ifneq "$(strip $(FILES_lib_objs))" ""
- @echo $(foreach objfile,$(FILES_lib_objs),$(subst /,\,$(objfile)) ) >> $@
-endif
-
-else # We must have more than one target library so load the individual makefiles
-
-$(OBJDIR)/%.lib: NWGNU% $(AP_WORK)\build\NWGNUhead.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUenvironment.inc FORCE
- @echo Calling $<
- $(MAKE) -f $< $(MAKECMDGOALS) RELEASE=$(RELEASE)
-
-endif
-
-#
-# Rules to build nlms.
-#
-
-vpath libcpre.o $(NOVELLLIBC)\imports
-
-# If we only have one target NLM then build it
-ifeq "$(words $(strip $(TARGET_nlm)))" "1"
-
-$(TARGET_nlm) : $(FILES_nlm_objs) $(FILES_nlm_libs) $(OBJDIR)\$(NLM_NAME)_link.opt
- @echo Linking $@
- $(LINK) @$(OBJDIR)\$(NLM_NAME)_link.opt
-
-# This will force the link option file to be rebuilt if we change the
-# corresponding makefile
-
-$(OBJDIR)\$(NLM_NAME)_link.opt : $($(NLM_NAME)_LINKOPT_DEPENDS)
- $(CHK) $(OBJDIR)\$(@F) $(DEL) $(OBJDIR)\$(@F)
- $(CHK) $(OBJDIR)\$(NLM_NAME)_link.def $(DEL) $(OBJDIR)\$(NLM_NAME)_link.def
- @echo Generating $@
- @echo -warnings off >> $@
- @echo -zerobss >> $@
- @echo -desc "$(NLM_DESCRIPTION)" >> $@
- @echo -o $(TARGET_nlm) >> $@
-ifneq "$(FILE_nlm_copyright)" ""
- @-type $(FILE_nlm_copyright) >> $@
-else
- @echo -copy "$(NLM_COPYRIGHT)" >> $@
-endif
-ifeq "$(RELEASE)" "debug"
- @echo -g >> $@
- @echo -sym internal >> $@
- @echo -sym codeview4 >> $@
- @echo -osym $(OBJDIR)\$(NLM_NAME).sym >> $@
-else
- @echo -sym internal >> $@
-endif
- @echo -screenname "$(NLM_SCREEN_NAME)" >> $@
-ifneq "$(NLM_VERSION)" ""
- @echo -nlmversion=$(NLM_VERSION) >> $@
-else
- @echo -nlmversion=$(VERSION) >> $@
-endif
- @echo -l $(NWOS) >> $@
- @echo -l $(AP)/$(OBJDIR) >> $@
- @echo -l $(APR)/$(OBJDIR) >> $@
- @echo -l $(APRUTIL)/$(OBJDIR) >> $@
- @echo -l $(PCRE)/$(OBJDIR) >> $@
- @echo -l $(HTTPD)/$(OBJDIR) >> $@
- @echo -l $(SERVER)/$(OBJDIR) >> $@
- @echo -l $(STDMOD)/$(OBJDIR) >> $@
- @echo -l $(NWOS)/$(OBJDIR) >> $@
- @echo -l "$(METROWERKS)/Novell Support/Metrowerks Support/Libraries/Runtime" >> $@
- @echo -l "$(METROWERKS)/Novell Support/Metrowerks Support/Libraries/MSL C++" >> $@
-ifneq "$(IPV6)" ""
- @echo -l $(NOVELLLIBC)\include\winsock\IPV6 >> $@
-endif
- @echo -l $(NOVELLLIBC)/imports >> $@
-ifneq "$(LDAPSDK)" ""
- @echo -l $(LDAPSDK)/lib/nlm >> $@
-endif
- @echo -l $(XML)/$(OBJDIR) >> $@
- @echo -nodefaults >> $@
- @echo -map $(OBJDIR)\$(NLM_NAME).map>> $@
- @echo -threadname "$(NLM_THREAD_NAME)" >> $@
-ifneq "$(NLM_STACK_SIZE)" ""
- @echo -stacksize $(subst K,000,$(subst k,K,$(strip $(NLM_STACK_SIZE)))) >> $@
-else
- @echo -stacksize 64000 >> $@
-endif
-ifneq "$(NLM_ENTRY_SYM)" ""
- @echo -entry $(NLM_ENTRY_SYM) >> $@
-endif
-ifneq "$(NLM_EXIT_SYM)" ""
- @echo -exit $(NLM_EXIT_SYM) >> $@
-endif
-ifneq "$(NLM_CHECK_SYM)" ""
- @echo -check $(NLM_CHECK_SYM) >> $@
-endif
-ifneq "$(NLM_FLAGS)" ""
- @echo -flags $(NLM_FLAGS) >> $@
-endif
-ifneq "$(strip $(XLFLAGS))" ""
- @echo $(XLFLAGS) >> $@
-endif
-ifneq "$(strip $(FILES_nlm_objs))" ""
- @echo $(foreach objfile,$(strip $(FILES_nlm_objs)),$(subst /,\,$(objfile))) >> $@
-endif
-ifneq "$(FILES_nlm_libs)" ""
- @echo $(foreach libfile, $(notdir $(strip $(FILES_nlm_libs))),-l$(subst /,\,$(libfile))) >> $@
-endif
- @echo -commandfile $(OBJDIR)\$(NLM_NAME)_link.def >> $@
-ifneq "$(FILE_nlm_msg)" ""
- @echo Messages $(FILE_nlm_msg) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILE_nlm_hlp)" ""
- @echo Help $(FILE_nlm_hlp) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILES_nlm_modules)" ""
- @echo module $(foreach module,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_modules))),$(subst /,\,$(module))) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILES_nlm_Ximports)" ""
- @echo Import $(foreach import,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_Ximports))),$(subst /,\,$(import))) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILES_nlm_exports)" ""
- @echo Export $(foreach export,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_exports))),$(subst /,\,$(export))) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-
-# if APACHE_UNIPROC is defined, don't include XDCData
-ifndef APACHE_UNIPROC
-ifneq "$(string $(XDCDATA))" ""
- @echo XDCData $(XDCDATA) >> $(OBJDIR)\$(NLM_NAME)_link.def
-else
- @echo XDCData $(NWOS)\apache.xdc >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-endif
-
-else # more than one target so look for individual makefiles.
-
-# Only include these if NO_LICENSE_FILE isn't set to prevent excessive
-# recursion
-
-ifndef NO_LICENSE_FILE
-
-$(OBJDIR)/%.nlm: NWGNU% $(AP_WORK)\build\NWGNUhead.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUenvironment.inc $(CUSTOM_INI) $(VERSION_INC) FORCE
- @echo Calling $<
- $(MAKE) -f $< $(MAKECMDGOALS) RELEASE=$(RELEASE)
- $(CMD) echo.
-
-else
-
-$(TARGET_nlm):
-
-endif # NO_LICENSE_FILE
-
-endif
-
diff --git a/build/binbuild.sh b/build/binbuild.sh
deleted file mode 100755
index 352a090045..0000000000
--- a/build/binbuild.sh
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/bin/sh
-#
-# Copyright 1999-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# binbuild.sh - Builds an Apache binary distribution.
-# Initially written by Lars Eilebrecht <lars apache.org>.
-
-OS=`./build/config.guess`
-PRINTPATH="build/PrintPath"
-APFULLDIR=`pwd`
-BUILD_DIR="$APFULLDIR/bindist"
-DEFAULT_DIR="/usr/local/apache2"
-APDIR="$APFULLDIR"
-APDIR=`basename $APDIR`
-CONFIGPARAM="--enable-layout=Apache --prefix=$BUILD_DIR --enable-mods-shared=most --with-expat=$APFULLDIR/srclib/apr-util/xml/expat --enable-static-support"
-VER=`echo $APDIR | sed s/httpd-//`
-TAR="`$PRINTPATH tar`"
-GZIP="`$PRINTPATH gzip`"
-COMPRESS="`$PRINTPATH compress`"
-MD5="`$PRINTPATH md5`"
-if [ x$MD5 = x ]; then
- OPENSSL="`$PRINTPATH openssl`"
- if [ x$OPENSSL != x ]; then
- MD5="$OPENSSL md5"
- fi
-fi
-
-if [ x$1 != x ]; then
- USER=$1
-else
- USER="`build/buildinfo.sh -n %u@%h%d`"
-fi
-
-if [ ! -f ./ABOUT_APACHE ]; then
- echo "ERROR: The current directory contains no valid Apache distribution."
- echo "Please change the directory to the top level directory of a freshly"
- echo "unpacked Apache 2.0 source distribution and re-execute the script"
- echo "'./build/binbuild.sh'."
- exit 1;
-fi
-
-if [ -d ./CVS ]; then
- echo "ERROR: The current directory is a CVS checkout of Apache."
- echo "Only a standard Apache 2.0 source distribution should be used to"
- echo "create a binary distribution."
- exit 1;
-fi
-
-echo "Building Apache $VER binary distribution..."
-echo "Platform is \"$OS\"..."
-
-( echo "Build log for Apache binary distribution" && \
- echo "----------------------------------------------------------------------" && \
- ./configure $CONFIGPARAM && \
- echo "----------------------------------------------------------------------" && \
- make clean && \
- rm -rf bindist install-bindist.sh *.bindist
- echo "----------------------------------------------------------------------" && \
- make && \
- echo "----------------------------------------------------------------------" && \
- make install root="bindist/" && \
- echo "----------------------------------------------------------------------" && \
- make clean && \
- echo "----------------------------------------------------------------------" && \
- echo "[EOF]" \
-) 2>&1 | tee build.log
-
-if [ ! -f ./bindist/bin/httpd ]; then
- echo "ERROR: Failed to build Apache. See \"build.log\" for details."
- exit 1;
-fi
-
-echo "Binary image successfully created..."
-
-./bindist/bin/httpd -v
-
-echo "Creating supplementary files..."
-
-( echo " " && \
- echo "Apache $VER binary distribution" && \
- echo "================================" && \
- echo " " && \
- echo "This binary distribution is usable on a \"$OS\"" && \
- echo "system and was built by \"$USER\"." && \
- echo "" && \
- echo "The distribution contains all standard Apache modules as shared" && \
- echo "objects. This allows you to enable or disable particular modules" && \
- echo "with the LoadModule/AddModule directives in the configuration file" && \
- echo "without the need to re-compile Apache." && \
- echo "" && \
- echo "See \"INSTALL.bindist\" on how to install the distribution." && \
- echo " " && \
- echo "NOTE: Please do not send support-related mails to the address mentioned" && \
- echo " above or to any member of the Apache Group! Support questions" && \
- echo " should be directed to the forums mentioned at" && \
- echo " http://httpd.apache.org/lists.html#http-users" && \
- echo " where some of the Apache team lurk, in the company of many other" && \
- echo " Apache gurus who should be able to help." && \
- echo " If you think you found a bug in Apache or have a suggestion please" && \
- echo " visit the bug report page at http://httpd.apache.org/bug_report.html" && \
- echo " " && \
- echo "----------------------------------------------------------------------" && \
- ./bindist/bin/httpd -V && \
- echo "----------------------------------------------------------------------" \
-) > README.bindist
-cp README.bindist ../httpd-$VER-$OS.README
-
-( echo " " && \
- echo "Apache $VER binary installation" && \
- echo "================================" && \
- echo " " && \
- echo "To install this binary distribution you have to execute the installation" && \
- echo "script \"install-bindist.sh\" in the top-level directory of the distribution." && \
- echo " " && \
- echo "The script takes the ServerRoot directory into which you want to install" && \
- echo "Apache as an option. If you omit the option the default path" && \
- echo "\"$DEFAULT_DIR\" is used." && \
- echo "Make sure you have write permissions in the target directory, e.g. switch" && \
- echo "to user \"root\" before you execute the script." && \
- echo " " && \
- echo "See \"README.bindist\" for further details about this distribution." && \
- echo " " && \
- echo "Please note that this distribution includes the complete Apache source code." && \
- echo "Therefore you may compile Apache yourself at any time if you have a compiler" && \
- echo "installation on your system." && \
- echo "See \"INSTALL\" for details on how to accomplish this." && \
- echo " " \
-) > INSTALL.bindist
-
-sed -e "s%\@default_dir\@%$DEFAULT_DIR%" \
- -e "s%\@ver\@%$VER%" \
- -e "s%\@os\@%$OS%" \
- build/install-bindist.sh.in > install-bindist.sh
-
-chmod 755 install-bindist.sh
-
-sed -e "s%$BUILD_DIR%$DEFAULT_DIR%" \
- -e "s%^ServerAdmin.*%ServerAdmin you@your.address%" \
- -e "s%#ServerName.*%#ServerName localhost%" \
- bindist/conf/httpd-std.conf > bindist/conf/httpd.conf
-cp bindist/conf/httpd.conf bindist/conf/httpd-std.conf
-
-for one_file in apachectl envvars envvars-std; do
- sed -e "s%$BUILD_DIR%$DEFAULT_DIR%" \
- bindist/bin/$one_file > bindist/bin/$one_file.tmp
- mv bindist/bin/$one_file.tmp bindist/bin/$one_file
-done
-
-echo "Creating distribution archive and readme file..."
-
-if [ ".`grep -i error build.log > /dev/null`" != . ]; then
- echo "ERROR: Failed to build Apache. See \"build.log\" for details."
- exit 1;
-else
- if [ "x$TAR" != "x" ]; then
- case "x$OS" in
- x*os390*) $TAR -cfU ../httpd-$VER-$OS.tar -C .. httpd-$VER;;
- *) (cd .. && $TAR -cf httpd-$VER-$OS.tar httpd-$VER);;
- esac
- if [ "x$GZIP" != "x" ]; then
- $GZIP -9 ../httpd-$VER-$OS.tar
- ARCHIVE=../httpd-$VER-$OS.tar.gz
- elif [ "x$COMPRESS" != "x" ]; then
- $COMPRESS ../httpd-$VER-$OS.tar
- ARCHIVE=../httpd-$VER-$OS.tar.Z
- else
- echo "WARNING: Could not find a 'gzip' program!"
- echo " tar archive is not compressed."
- ARCHIVE=../httpd-$VER-$OS.tar
- fi
- else
- echo "ERROR: Could not find a 'tar' program!"
- echo " Please execute the following commands manually:"
- echo " tar -cf ../httpd-$VER-$OS.tar ."
- echo " gzip -9 ../httpd-$VER-$OS.tar"
- fi
-
- if [ "x$MD5" != "x" ]; then
- $MD5 $ARCHIVE > $ARCHIVE.md5
- fi
-
- if [ -f $ARCHIVE ] && [ -f ../httpd-$VER-$OS.README ]; then
- echo "Ready."
- echo "You can find the binary archive ($ARCHIVE)"
- echo "and the readme file (httpd-$VER-$OS.README) in the"
- echo "parent directory."
- exit 0;
- else
- echo "ERROR: Archive or README is missing."
- exit 1;
- fi
-fi
diff --git a/build/bsd_makefile b/build/bsd_makefile
deleted file mode 100755
index c3b8131101..0000000000
--- a/build/bsd_makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-#! /bin/sh
-#
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-# cwd must be top_srcdir
-test -f build/bsd_makefile || exit 2
-
-test -f bsd_converted && exit 0
-
-tmpfile=`mktemp /tmp/bsd_makefile.XXXXXX 2>/dev/null` || tmpfile="tmp.$$"
-for i in build/*.mk; do
- sed 's/^include \(.*\)/.include "\1"/' $i >$tmpfile \
- && cp $tmpfile $i
-done
-rm -f $tmpfile
-
-touch bsd_converted
-exit 0
diff --git a/build/build-modules-c.awk b/build/build-modules-c.awk
deleted file mode 100644
index fda31c2860..0000000000
--- a/build/build-modules-c.awk
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 1999-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-BEGIN {
- RS = " "
- modules[n++] = "core"
- pmodules[pn++] = "core"
-}
-{
- modules[n] = $1;
- pmodules[pn] = $1;
- gsub("\n","",modules[n]);
- gsub("\n","",pmodules[pn]);
- ++n;
- ++pn;
-}
-END {
- print "/*"
- print " * modules.c --- automatically generated by Apache"
- print " * configuration script. DO NOT HAND EDIT!!!!!"
- print " */"
- print ""
- print "#include \"ap_config.h\""
- print "#include \"httpd.h\""
- print "#define CORE_PRIVATE"
- print "#include \"http_config.h\""
- print ""
- for (i = 0; i < pn; ++i) {
- printf ("extern module %s_module;\n", pmodules[i])
- }
- print ""
- print "/*"
- print " * Modules which implicitly form the"
- print " * list of activated modules on startup,"
- print " * i.e. these are the modules which are"
- print " * initially linked into the Apache processing"
- print " * [extendable under run-time via AddModule]"
- print " */"
- print "module *ap_prelinked_modules[] = {"
- for (i = 0 ; i < n; ++i) {
- printf " &%s_module,\n", modules[i]
- }
- print " NULL"
- print "};"
- print ""
- print "/*"
- print " * We need the symbols as strings for <IfModule> containers"
- print " */"
- print ""
- print "ap_module_symbol_t ap_prelinked_module_symbols[] = {"
- for (i = 0; i < n; ++i) {
- printf (" {\"%s_module\", &%s_module},\n", modules[i], modules[i])
- }
- print " {NULL, NULL}"
- print "};"
- print ""
- print "/*"
- print " * Modules which initially form the"
- print " * list of available modules on startup,"
- print " * i.e. these are the modules which are"
- print " * initially loaded into the Apache process"
- print " * [extendable under run-time via LoadModule]"
- print " */"
- print "module *ap_preloaded_modules[] = {"
- for (i = 0; i < pn; ++i) {
- printf " &%s_module,\n", pmodules[i]
- }
- print " NULL"
- print "};"
- print ""
-}
diff --git a/build/buildinfo.sh b/build/buildinfo.sh
deleted file mode 100755
index c3623a4812..0000000000
--- a/build/buildinfo.sh
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# buildinfo.sh -- Determine Build Information
-# Initially written by Ralf S. Engelschall <rse@apache.org>
-# for the Apache's Autoconf-style Interface (APACI)
-
-#
-# argument line handling
-#
-error=no
-if [ $# -ne 1 -a $# -ne 2 ]; then
- error=yes
-fi
-if [ $# -eq 2 -a "x$1" != "x-n" ]; then
- error=yes
-fi
-if [ "x$error" = "xyes" ]; then
- echo "$0:Error: invalid argument line"
- echo "$0:Usage: $0 [-n] <format-string>"
- echo "Where <format-string> can contain:"
- echo " %u ...... substituted by determined username (foo)"
- echo " %h ...... substituted by determined hostname (bar)"
- echo " %d ...... substituted by determined domainname (.com)"
- echo " %D ...... substituted by determined day (DD)"
- echo " %M ...... substituted by determined month (MM)"
- echo " %Y ...... substituted by determined year (YYYYY)"
- echo " %m ...... substituted by determined monthname (Jan)"
- exit 1
-fi
-if [ $# -eq 2 ]; then
- newline=no
- format_string="$2"
-else
- newline=yes
- format_string="$1"
-fi
-
-#
-# initialization
-#
-username=''
-hostname=''
-domainname=''
-time_day=''
-time_month=''
-time_year=''
-time_monthname=''
-
-#
-# determine username
-#
-username="$LOGNAME"
-if [ "x$username" = "x" ]; then
- username="$USER"
- if [ "x$username" = "x" ]; then
- username="`(whoami) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ "x$username" = "x" ]; then
- username="`(who am i) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ "x$username" = "x" ]; then
- username='unknown'
- fi
- fi
- fi
-fi
-
-#
-# determine hostname and domainname
-#
-hostname="`(uname -n) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
-if [ "x$hostname" = "x" ]; then
- hostname="`(hostname) 2>/dev/null |\
- awk '{ printf("%s", $1); }'`"
- if [ "x$hostname" = "x" ]; then
- hostname='unknown'
- fi
-fi
-case $hostname in
- *.* )
- domainname=".`echo $hostname | cut -d. -f2-`"
- hostname="`echo $hostname | cut -d. -f1`"
- ;;
-esac
-if [ "x$domainname" = "x" ]; then
- if [ -f /etc/resolv.conf ]; then
- domainname="`egrep '^[ ]*domain' /etc/resolv.conf | head -1 |\
- sed -e 's/.*domain//' \
- -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \
- -e 's/^\.//' -e 's/^/./' |\
- awk '{ printf("%s", $1); }'`"
- if [ "x$domainname" = "x" ]; then
- domainname="`egrep '^[ ]*search' /etc/resolv.conf | head -1 |\
- sed -e 's/.*search//' \
- -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \
- -e 's/ .*//' -e 's/ .*//' \
- -e 's/^\.//' -e 's/^/./' |\
- awk '{ printf("%s", $1); }'`"
- fi
- fi
-fi
-
-#
-# determine current time
-#
-time_day="`date '+%d' | awk '{ printf("%s", $1); }'`"
-time_month="`date '+%m' | awk '{ printf("%s", $1); }'`"
-time_year="`date '+%Y' 2>/dev/null | awk '{ printf("%s", $1); }'`"
-if [ "x$time_year" = "x" ]; then
- time_year="`date '+%y' | awk '{ printf("%s", $1); }'`"
- case $time_year in
- [5-9][0-9]) time_year="19$time_year" ;;
- [0-4][0-9]) time_year="20$time_year" ;;
- esac
-fi
-case $time_month in
- 1|01) time_monthname='Jan' ;;
- 2|02) time_monthname='Feb' ;;
- 3|03) time_monthname='Mar' ;;
- 4|04) time_monthname='Apr' ;;
- 5|05) time_monthname='May' ;;
- 6|06) time_monthname='Jun' ;;
- 7|07) time_monthname='Jul' ;;
- 8|08) time_monthname='Aug' ;;
- 9|09) time_monthname='Sep' ;;
- 10) time_monthname='Oct' ;;
- 11) time_monthname='Nov' ;;
- 12) time_monthname='Dec' ;;
-esac
-
-#
-# create result string
-#
-if [ "x$newline" = "xyes" ]; then
- echo $format_string |\
- sed -e "s;%u;$username;g" \
- -e "s;%h;$hostname;g" \
- -e "s;%d;$domainname;g" \
- -e "s;%D;$time_day;g" \
- -e "s;%M;$time_month;g" \
- -e "s;%Y;$time_year;g" \
- -e "s;%m;$time_monthname;g"
-else
- echo "${format_string}&" |\
- sed -e "s;%u;$username;g" \
- -e "s;%h;$hostname;g" \
- -e "s;%d;$domainname;g" \
- -e "s;%D;$time_day;g" \
- -e "s;%M;$time_month;g" \
- -e "s;%Y;$time_year;g" \
- -e "s;%m;$time_monthname;g" |\
- awk '-F&' '{ printf("%s", $1); }'
-fi
-
diff --git a/build/config-stubs b/build/config-stubs
deleted file mode 100755
index 425dc80268..0000000000
--- a/build/config-stubs
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-#
-# Find all config files (config*.m4) and map them into lines with the
-# form: NUM? '0' ' ' PATH
-#
-# For example:
-#
-# 50 ./modules/generators/config5.m4
-# 0 ./modules/aaa/config.m4
-# 10 ./example/config1.m4
-#
-# These lines are sorted, then the first field is removed. Thus, we
-# have a set of paths sorted on the config-number (if present). All
-# config files without a number are sorted before those with a number.
-#
-
-configfiles=`find . -name "config*.m4" | \
- sed 's#\(.*/config\)\(.*\).m4#\20 \1\2.m4#' | \
- sort | \
- sed 's#.* ##'`
-
-for configfile in $configfiles; do
- if [ -r $configfile ]; then
- echo "sinclude($configfile)"
- fi
-done
diff --git a/build/default.pl b/build/default.pl
deleted file mode 100644
index 4a73b77821..0000000000
--- a/build/default.pl
+++ /dev/null
@@ -1,496 +0,0 @@
-<<
-# Scandoc template file.
-#
-# This is an example set of templates that is designed to create several
-# different kinds of index files. It generates a "master index" which intended
-# for use with a frames browser; A "package index" which is the root page of
-# the index, and then "package files" containing documentation for all of the
-# classes within a single package.
-
-######################################################################
-
-## For quick and superficial customization,
-## simply change these variables
-
-$project_name = '[Apache]';
-$company_logo = '<img src="../images/ScanDocBig.jpg">'; # change this to an image tag.
-$copyright = '&copy 2000 [Apache Software Foundation]';
-$image_directory = "../images/";
-$bullet1_image = $image_directory . "ball1.gif";
-$bullet2_image = $image_directory . "ball2.gif";
-$bgcolor1 = "#FFFFFF";
-$bgcolor2 = "#FFFFFF";
-
-######################################################################
-
-## Begin generating frame index file.
-
-file "index.html";
->><html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; iso-8859-1">
- <title>$project_name</title>
- </head>
- <frameset cols="190,*">
- <frame src="master.html" name="Master Index" noresize>
- <frame src="packages.html" name="Documentation">
- <noframes>
- <body bgcolor="$bgcolor2" stylesrc="index.html">
- <p>Some Documentation</p>
- </body>
- </noframes>
- </frameset>
-</html>
-<<
-
-######################################################################
-
-## Begin generating master index file (left-hand frame).
-
-file "master.html";
->><html>
- <head>
- <title>Master Index</title>
- </head>
- <body bgcolor="$bgcolor1" text=#0000ff link=#0020ff vlink=#0020ff>
- <center><img src="${image_directory}ScanDocSmall.jpg" border="0" /></center>
- <p>
- <a href="packages.html" target="Documentation">Master Index</a>
- </p>
- <p>
- <font size="2">
- <nobr>
-<<
-
-## For each package, generate an index entry.
-
-foreach $p (packages()) {
- $_ = $p->url;
- s/\s/%20/g;
- >><a href="$_" target="Documentation"><b>$(p.name)</b></a><br>
- <dir>
- <<
- foreach $e ($p->classes()) {
- $_ = $e->url;
- s/\s/%20/g;
- >><li><a href="$_" target="Documentation">$(e.fullname)</a>
- <<
- }
- foreach $e ($p->globals()) {
- $_ = $e->url;
- s/\s/%20/g;
- >><li><a href="$_" target="Documentation">$(e.fullname)</a>
- <<
- }
- >></dir><<
-}
-
->>
- <a href="to-do.html" target="Documentation"><b>To-Do List</b></a><br>
- </nobr>
- </font>
- </p>
- </body>
-</html>
-<<
-
-######################################################################
-
-## Begin generating package index file
-
-file "packages.html";
->><html>
- <head>
- <title>$project_name -- Packages</title>
- </head>
- <body bgcolor="$bgcolor2">
-
- <center>$company_logo
- <h1>Documentation for $project_name</h1>
- </center>
- <h2>Package List</h2>
-<<
-
-## For each package, generate an index entry.
-
-foreach $p (packages()) {
- $_ = $p->url;
- s/\s/%20/g;
- >><a href = "$_">$(p.name)</a><br>
- <<
-}
-
->>
- <p>
- <hr size=4>
- $copyright<br>
- Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br>
- Last Updated: $date<br>
- </body>
-</html>
-
-<<
-
-######################################################################
-
-## Generate "To-do list"
-
-file "to-do.html";
->><html>
- <head>
- <title>$project_name -- To-Do list</title>
- </head>
- <body bgcolor="$bgcolor2">
-
- $company_logo
-
- <h1>To-do list for $project_name</h1>
-<<
-
-if (&todolistFiles()) {
- >><hr size=4><p>
- <<
- foreach $f (&todolistFiles()) {
- my @m = &todolistEntries( $f );
- if ($f =~ /([^\/]+)$/) { $f = $1; }
- >><b>$f:</b><ul>
- <<
- foreach $text (@m) {
- if ($text) {
- print "<li>", &processDescription( $text ), "\n";
- }
- }
- >></ul>
- <<
- }
-}
-
->>
- <hr size=4>
- $copyright<br>
- Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br>
- Last Updated: $date<br>
- </body>
-</html>
-<<
-
-######################################################################
-
-## Generate individual files for each package.
-
-my $p;
-foreach $p (packages()) {
- file $p->name() . ".html";
- >><html>
- <head>
- <title>$project_name -- $(p.name)</title>
- </head>
- <body bgcolor="$bgcolor2">
- <center>
- <font size=6><b>$project_name</b></font>
- <hr size=4><p>
- </center>
-
- <h2>Package Name: $(p.name)</h2>
- <b>
-<<
-
-## Generate class and member index at the top of the file.
-
-foreach $c ($p->classes()) {
- >><h3><img src="$bullet1_image" width=18 height=17 align=texttop>
- <a href="$(c.url)">$(c.fullname)</h3></a>
- <ul>
- <<
- foreach $m ($c->members()) {
- >><li><a href="$(m.url)">$(m.longname)</a>
- <<
- }
- >></ul>
- <<
-}
-
->>
-</b>
-<<
-
-## Generate detailed class documentation
-foreach $c ($p->classes()) {
- ## Output searchable keyword list
- if ($c->keywords()) {
- print "<!-- ", $c->keywords(), " -->\n";
- }
-
- >><hr size="4">
- <a name="$(c.anchor)"></a>
- <h1>$(c.fullname)</h1>
- <table bgcolor="ffffff" border="0" cellspacing="4">
- <tr>
- <th align=center colspan=2>
- </th>
- </tr>
- <<
-
- # Output author tag
- if ($c->author()) {
- >><tr><th width=20% align=right>Author:</th><<
- >><td>$(c.author)</td></tr><<
- }
-
- # Output package version
- if ($c->version()) {
- >><tr><th width=20% align=right>Version:</th><<
- >><td>$(c.version)</td></tr><<
- }
-
- # Output Source file
- if ($c->sourcefile()) {
- >><tr><th width=20% align=right>Source:</th><<
- >><td>$(c.sourcefile)</td></tr><<
- }
-
- # Output base class list
- if ($c->baseclasses()) {
- >><tr><th width=20% align=right>Base classes:</th>
- <td><<
- my @t = ();
- foreach $b ($c->baseclasses()) {
- my $name = $b->name();
- if ($url = $b->url()) {
- push @t, "<a href=\"$url\">$name</a>";
- }
- else { push @t, $name; }
- }
- print join( ', ', @t );
- >></td></tr>
- <<
- }
-
- # Output subclasses list
- if ($c->subclasses()) {
- >><tr><th width=20% align=right>Subclasses:</th>
- <td><<
- my @t = ();
- foreach $s ($c->subclasses()) {
- my $name = $s->name();
- if ($url = $s->url()) {
- push @t, "<a href=\"$url\">$name</a>";
- }
- else { push @t, $name; }
- }
- print join( ', ', @t );
- >></td></tr><<
- }
-
- # Output main class description
- >></tr>
- </table>
- <p>
- <<
- print &processDescription( $c->description() );
-
- # Output "see also" information
- if ($c->seealso()) {
- >><p><dt><b>See Also</b><dd>
- <<
- my @r = ();
- foreach $a ($c->seealso()) {
- my $name = $a->name();
- if ($url = $a->url()) {
- push @r, "<a href=\"$url\">$name</a>";
- }
- else { push @r, $name; }
- }
- print join( ',', @r );
- >><p>
- <<
- }
-
- # Output class member index
- if ($c->members()) {
- print "<h2>Member Index</h2>\n";
- print "<ul>";
- foreach $m ($c->members()) {
- >><li><a href="$(m.url)">$(m.fullname)</a>
- <<
- }
- >></ul><<
- }
-
- # Output class member variable documentation
- if ($c->membervars()) {
- print "<h2>Class Variables</h2>\n";
- print "<blockquote>\n";
- foreach $m ($c->membervars()) { &variable( $m ); }
- print "</blockquote>\n";
- }
-
- # Output class member function documentation
- if ($c->memberfuncs()) {
- print "<h2>Class Methods</h2>\n";
- print "<blockquote>\n";
- foreach $m ($c->memberfuncs()) { &function( $m ); }
- print "</blockquote>\n";
- }
-}
-
-# Output global variables
-if ($p->globalvars()) {
- >><h2>Global Variables</h2>
- <blockquote>
- <<
- foreach $m ($p->globalvars()) { &variable( $m ); }
- print "</blockquote>\n";
-}
-
-# Output global functions
-if ($p->globalfuncs()) {
- >><h2>Global Functions</h2>
- <blockquote>
- <<
- foreach $m ($p->globalfuncs()) { &function( $m ); }
- print "</blockquote>\n";
-}
-
->>
- <hr size=4>
- $copyright<br>
- Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br>
- Last Updated: $date<br>
- </body>
-</html>
-<<
-} # end of foreach (packages) loop
-
-######################################################################
-
-## Subroutine to generate documentation for a member function or global function
-
-sub function {
- local ($f) = @_;
-
- if ($f->keywords()) {
- >><!-- $(f.keywords) -->
- <<
- }
- >>
- <a name="$(f.anchor)"></a>
- <dl>
- <dt>
- <b><img src="$bullet2_image" width=19 height=17 align=texttop>$(f.fullname);</b>
- <dd>
- <<
- print &processDescription( $f->description() );
- >>
- <p><dl>
- <<
- if ($f->params()) {
- >>
- <dt><b>Parameters</b><dd>
- <table width="85%">
- <<
- foreach $a ($f->params()) {
- >><tr valign=top><th align=right>
- $(a.name)</th><td><<
- print &processDescription( $a->description() );
- >></td></tr>
- <<
- }
- >></table>
- <<
- }
-
- if ($f->returnValue()) {
- >><dt><b>Return Value</b>
- <dd><<
- print &processDescription( $f->returnValue() );
- >><p><<
- }
-
- if ($f->exceptions()) {
- >><dt><b>Exceptions</b><dd>
- <table width=85%><tr><td colspan=2><hr size=3></td></tr>
- <<
- foreach $a ($f->exceptions()) {
- >><tr valign=top><th align=right>
- $(a.name)</th><td><<
- print &processDescription( $a->description() );
- >></td></tr>
- <<
- }
- >><tr><td colspan=2><hr size=3></td></tr></table>
- <<
- }
-
- if ($f->seealso()) {
- >><dt><b>See Also</b><dd>
- <<
- my @r = ();
- foreach $a ($f->seealso()) {
- my $name = $a->name();
- if ($url = $a->url()) {
- push @r, "<a href=\"$url\">$name</a>";
- }
- else { push @r, $name; }
- }
- print join( ',', @r );
- >><p><<
- }
- >></dl></dl>
- <<
-}
-
-######################################################################
-
-## Subroutine to generate documentation for a member variable or global variable.
-
-sub variable {
- local ($v) = @_;
-
- if ($v->keywords()) {
- print "<!-- $(v.keywords) -->";
- }
-
- >>
- <a name="$(v.name)"></a>
- <dl><dt>
- <b><img src="$bullet2_image" width=19 height=17 align=texttop>$(v.fullname);</b>
- <dd>
- <<print &processDescription( $v->description() );>>
- <p><dl>
- <<
- if ($v->seealso()) {
- >><dt><b>See Also</b><dd>
- <<
- $comma = 0;
- foreach $a ($v->seealso()) {
- if ($comma) { print ","; }
- $comma = 1;
- >><a href="$(a.url)">$(a.name)</a>
- <<
- }
- >><p>
- <<
- }
- >></dl></dl>
- <<
-}
-
-######################################################################
-
-sub processDescription {
- local ($_) = @_;
-
- s/^\s+//; # Remove whitespace from beginning
- s/\s+$/\n/; # Remove whitespace from end
- s/\n\n/<p>\n/g; # Replace multiple CR's with paragraph markers
- s:\@heading(.*)\n:<p><h2>$1</h2>:; # Handle heading text
-
- # Handle embedded image tags
- s:\@caution:<p><img src=\"${image_directory}/caution.gif\" align=left>:;
- s:\@warning:<p><img src=\"${image_directory}/warning.gif\" align=left>:;
- s:\@bug:<p><img src=\"${image_directory}/bug.gif\">:;
- s:\@tip:<p><img src=\"${image_directory}/tip.gif\">:;
-
- return $_;
-}
diff --git a/build/fastgen.sh b/build/fastgen.sh
deleted file mode 100755
index b7e7835f71..0000000000
--- a/build/fastgen.sh
+++ /dev/null
@@ -1,88 +0,0 @@
-#! /bin/sh
-#
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-srcdir=$1
-shift
-
-mkdir_p=$1
-shift
-
-bsd_makefile=$1
-shift
-
-top_srcdir=`(cd $srcdir; pwd)`
-top_builddir=`pwd`
-
-if test "$mkdir_p" = "yes"; then
- mkdir_p="mkdir -p"
-else
- mkdir_p="$top_srcdir/build/mkdir.sh"
-fi
-
-if test "$bsd_makefile" = "yes"; then
- (cd $top_srcdir; ./build/bsd_makefile)
-
- for makefile in $@; do
- echo "creating $makefile"
- dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
-
- if test -z "$dir"; then
- real_srcdir=$top_srcdir
- real_builddir=$top_builddir
- dir="."
- else
- $mkdir_p "$dir/"
- real_srcdir=$top_srcdir/$dir
- real_builddir=$top_builddir/$dir
- fi
- cat - $top_srcdir/$makefile.in <<EOF |sed 's/^include \(.*\)/.include "\1"/' >$makefile
-top_srcdir = $top_srcdir
-top_builddir = $top_builddir
-srcdir = $real_srcdir
-builddir = $real_builddir
-VPATH = $real_srcdir
-EOF
-
- touch $dir/.deps
- done
-else
- for makefile in $@; do
- echo "creating $makefile"
- dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
-
- if test -z "$dir"; then
- real_srcdir=$top_srcdir
- real_builddir=$top_builddir
- dir="."
- else
- $mkdir_p "$dir/"
- real_srcdir=$top_srcdir/$dir
- real_builddir=$top_builddir/$dir
- fi
- cat - $top_srcdir/$makefile.in <<EOF >$makefile
-top_srcdir = $top_srcdir
-top_builddir = $top_builddir
-srcdir = $real_srcdir
-builddir = $real_builddir
-VPATH = $real_srcdir
-EOF
-
- touch $dir/.deps
- done
-fi
diff --git a/build/get-version.sh b/build/get-version.sh
deleted file mode 100755
index 5cee69189f..0000000000
--- a/build/get-version.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2003-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# extract version numbers from a header file
-#
-# USAGE: get-version.sh CMD VERSION_HEADER PREFIX
-# where CMD is one of: all, major, libtool
-# where PREFIX is the prefix to {MAJOR|MINOR|PATCH}_VERSION defines
-#
-# get-version.sh all returns a dotted version number
-# get-version.sh major returns just the major version number
-# get-version.sh libtool returns a version "libtool -version-info" format
-#
-
-if test $# != 3; then
- echo "USAGE: $0 CMD INCLUDEDIR PREFIX"
- echo " where CMD is one of: all, major"
- exit 1
-fi
-
-major_sed="/#define.*$3_MAJORVERSION/s/^.*\([0-9][0-9]*\).*$/\1/p"
-minor_sed="/#define.*$3_MINORVERSION/s/^.*\([0-9][0-9]*\).*$/\1/p"
-patch_sed="/#define.*$3_PATCHLEVEL/s/^[^0-9]*\([0-9][0-9a-z-]*\).*$/\1/p"
-mmn_sed="/#define.*$3_MAJOR/s/^[^0-9]*\([0-9][0-9]*\).*$/\1/p"
-major="`sed -n $major_sed $2`"
-minor="`sed -n $minor_sed $2`"
-patch="`sed -n $patch_sed $2`"
-mmn="`sed -n $mmn_sed $2`"
-
-if test "$1" = "all"; then
- echo ${major}.${minor}.${patch}
-elif test "$1" = "major"; then
- echo ${major}
-elif test "$1" = "mmn"; then
- echo ${mmn}
-elif test "$1" = "libtool"; then
- # Yes, ${minor}:${patch}:${minor} is correct due to libtool idiocy.
- echo ${minor}:${patch}:${minor}
-else
- echo "ERROR: unknown version CMD ($1)"
- exit 1
-fi
diff --git a/build/httpd_roll_release b/build/httpd_roll_release
deleted file mode 100755
index 67c3443c76..0000000000
--- a/build/httpd_roll_release
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-export CVSROOT=cvs.apache.org:/home/cvs
-
-if [ "x$1" = "xhelp" -o "x$2" = "x" ]; then
- echo "Usage: ./httpd_roll_release tag log_name [user]"
- echo "tag the tag to use when checking out the repository"
- echo "log_name the name of a file to log the results to."
- echo "user An optional user name to use when siging the release"
- exit
-else
- TAG=$1
-fi
-
-LOG_NAME=`pwd`/$2
-
-USER=$3
-
-REPO="httpd-2.0"
-WORKING_DIR=`echo "$REPO" | sed -e 's/[\-\.]/./g'`
-WORKING_TAG=`echo "$TAG" | sed -e 's/APACHE_2_1_/./'`
-WORKING_DIR="$WORKING_DIR$WORKING_TAG"
-
-START_DIR=`echo "$PWD"`
-
-# Check out the correct repositories.
-echo "Checking out repository $REPO into $WORKING_DIR using tag $TAG"
-
-umask 022
-echo Checking out httpd-2.0 > $LOG_NAME
-cvs checkout -r $TAG -d $WORKING_DIR $REPO >> $LOG_NAME
-cd $WORKING_DIR/srclib
-echo "Checking out apr, and apr-util" >> $LOG_NAME
-cvs checkout -r $TAG apr apr-util >> $LOG_NAME
-cd $START_DIR/$WORKING_DIR
-
-# Make sure the master site's FAQ is up-to-date. It doesn't hurt to do this
-# all the time. :-)
-echo "REMEMBER TO UPDATE THE SITE'S FAQ!!"
-#(cd /www/httpd.apache.org/docs-2.1/faq/; cvs update)
-
-# Now update the FAQ in the tarball via a download from the master site.
-# The FAQ contains SSI tags too complex for the expand.pl script to handle.
-rm -f docs/manual/faq/*.html
-links -source http://httpd.apache.org/docs-2.1/faq/index.html?ONEPAGE \
- > docs/manual/faq/index.html
-
-# Create the configure scripts
-echo "Creating the configure script"
-cd $START_DIR/$WORKING_DIR
-
-echo >> $LOG_NAME
-echo "Running ./buildconf" >> $LOG_NAME
-./buildconf >> $LOG_NAME
-
-echo >> $LOG_NAME
-echo "Fixup the timestamps preventing remake of generated files." >> $LOG_NAME
-touch modules/ssl/ssl_expr_parse.c >> $LOG_NAME
-touch modules/ssl/ssl_expr_parse.h >> $LOG_NAME
-touch modules/ssl/ssl_expr_scan.c >> $LOG_NAME
-
-# Remove any files we don't distribute with our code
-rm -f STATUS
-
-echo >> $LOG_NAME
-echo "Removing files that we don't distribute"
-echo "Removing files that we don't distribute" >> $LOG_NAME
-find . -name ".cvsignore" -exec rm {} \; >> $LOG_NAME
-find . -type d -name "CVS" | xargs rm -rf >> $LOG_NAME
-find . -type d -name "autom4te.cache" | xargs rm -rf >> $LOG_NAME
-
-# expand SSI directives in the manual
-echo "Making sure people can read the manual (expanding SSI's)"
-
-echo >> $LOG_NAME
-echo "Making sure people can read the manual (expanding SSI's)" >> $LOG_NAME
-( cd docs/manual ; chmod +x expand.pl ; ./expand.pl ; rm ./expand.pl ) >> $LOG_NAME
-
-# Time to roll the tarball
-echo "Rolling the tarballs"
-
-cd $START_DIR
-echo >> $LOG_NAME
-echo "Rolling the tarball" >> $LOG_NAME
-tar cvf $WORKING_DIR-alpha.tar $WORKING_DIR >> $LOG_NAME
-cp -p $WORKING_DIR-alpha.tar x$WORKING_DIR-alpha.tar
-gzip -9 $WORKING_DIR-alpha.tar
-mv x$WORKING_DIR-alpha.tar httpd.tar
-compress httpd.tar
-mv httpd.tar.Z $WORKING_DIR-alpha.tar.Z
-
-# Test the tarballs
-echo "Testing the tarball"
-
-echo >> $LOG_NAME
-echo "Testing the tarball $WORKING_DIR-alpha.tar.gz" >> $LOG_NAME
-gunzip -c $WORKING_DIR-alpha.tar.gz | tar tvf - >> $LOG_NAME
-zcat $WORKING_DIR-alpha.tar.Z | tar tvf - >> $LOG_NAME
-
-# remember the CHANGES file
-echo "Copying the CHANGES file to this directory"
-cp $WORKING_DIR/CHANGES .
-
-# cleanup
-echo "Cleaning up my workspace"
-rm -fr $WORKING_DIR
-
-if [ "x$USER" != "x" ]; then
- USER="-u $USER"
-fi
-
-echo Signing the tarballs
-
-echo "Signing the tarballs" >> $LOG_NAME
-pgp -sba $WORKING_DIR-alpha.tar.gz $USER
-pgp -sba $WORKING_DIR-alpha.tar.Z $USER
-
-pgp $WORKING_DIR-alpha.tar.gz.asc $WORKING_DIR-alpha.tar.gz >> $LOG_NAME
-pgp $WORKING_DIR-alpha.tar.Z.asc $WORKING_DIR-alpha.tar.Z >> $LOG_NAME
-
-echo "Don't forget to make the tarballs available by copying them to the"
-echo "/www/httpd.apache.org/dev/dist directory."
diff --git a/build/install-bindist.sh.in b/build/install-bindist.sh.in
deleted file mode 100755
index 44cbb8bfd6..0000000000
--- a/build/install-bindist.sh.in
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# Usage: install-bindist.sh [ServerRoot]
-# This script installs the Apache binary distribution and
-# was automatically created by binbuild.sh.
-
-lmkdir()
-{
- path=""
- dirs=`echo $1 | sed -e 's%/% %g'`
- mode=$2
-
- set -- ${dirs}
-
- for d in ${dirs}
- do
- path="${path}/$d"
- if test ! -d "${path}" ; then
- mkdir ${path}
- if test $? -ne 0 ; then
- echo "Failed to create directory: ${path}"
- exit 1
- fi
- chmod ${mode} ${path}
- fi
- done
-}
-
-lcopy()
-{
- from=$1
- to=$2
- dmode=$3
- fmode=$4
-
- test -d ${to} || lmkdir ${to} ${dmode}
- (cd ${from} && tar -cf - *) | (cd ${to} && tar -xf -)
-
- if test "X${fmode}" != X ; then
- find ${to} -type f -print | xargs chmod ${fmode}
- fi
- if test "X${dmode}" != X ; then
- find ${to} -type d -print | xargs chmod ${dmode}
- fi
-}
-
-##
-## determine path to (optional) Perl interpreter
-##
-PERL=no-perl5-on-this-system
-perls='perl5 perl'
-path=`echo $PATH | sed -e 's/:/ /g'`
-found_perl=0
-
-for dir in ${path} ; do
- for pperl in ${perls} ; do
- if test -f "${dir}/${pperl}" ; then
- if `${dir}/${pperl} -v >/dev/null 2>&1` ; then
- PERL="${dir}/${pperl}"
- found_perl=1
- break
- fi
- fi
- done
- if test $found_perl = 1 ; then
- break
- fi
-done
-
-if [ .$1 = . ]
-then
- SR=@default_dir@
-else
- SR=$1
-fi
-echo "Installing binary distribution for platform @os@"
-echo "into directory $SR ..."
-lmkdir $SR 755
-lmkdir $SR/proxy 750
-lmkdir $SR/logs 755
-lmkdir $SR/build 755
-lcopy bindist/build $SR/build 750 750
-lcopy bindist/man $SR/man 755 644
-if [ -d bindist/modules ]
-then
- lcopy bindist/modules $SR/modules 750 750
-fi
-lcopy bindist/include $SR/include 755 644
-lcopy bindist/icons $SR/icons 755 644
-lcopy bindist/manual $SR/manual 755 644
-lcopy bindist/cgi-bin $SR/cgi-bin 750 750
-if [ -f $SR/bin/envvars ]
-then
- echo "[Preserving existing envvars settings.]"
- cp -p $SR/bin/envvars ./envvars.orig
- HAD_ENVVARS=yes
-else
- HAD_ENVVARS=no
-fi
-lcopy bindist/bin $SR/bin 750 750
-if [ $HAD_ENVVARS = yes ]
-then
- cp -p ./envvars.orig $SR/bin/envvars
- rm ./envvars.orig
-fi
-lcopy bindist/lib $SR/lib 750 750
-if [ -d $SR/conf ]
-then
- echo "[Preserving existing configuration files.]"
- cp bindist/conf/*-std.conf $SR/conf/
-else
- lcopy bindist/conf $SR/conf 750 640
- sed -e "s%@default_dir@%$SR%" $SR/conf/httpd-std.conf > $SR/conf/httpd.conf
-fi
-if [ -d $SR/htdocs ]
-then
- echo "[Preserving existing htdocs directory.]"
-else
- lcopy bindist/htdocs $SR/htdocs 755 644
-fi
-if [ -d $SR/error ]
-then
- echo "[Preserving existing error documents directory.]"
-else
- lcopy bindist/error $SR/error 755 644
-fi
-
-sed -e "s;^#!\@perlbin\@.*;#!$PERL;" -e "s;\@exp_installbuilddir\@;$SR/build;" \
- support/apxs.in > $SR/bin/apxs
-PRE=`grep "^prefix = " bindist/build/config_vars.mk`
-PRE=`echo $PRE | sed -e "s;prefix = ;;"`
-sed -e "s;$PRE;$SR;" bindist/build/config_vars.mk > $SR/build/config_vars.mk
-sed -e "s;^#!/.*;#!$PERL;" bindist/bin/dbmmanage > $SR/bin/dbmmanage
-sed -e "s%@default_dir@%$SR%" \
- -e "s%^HTTPD=.*$%HTTPD=\"$SR/bin/httpd -d $SR\"%" bindist/bin/apachectl > $SR/bin/apachectl
-sed -e "s%@default_dir@%$SR%" \
- bindist/bin/envvars-std > $SR/bin/envvars-std
-if [ $HAD_ENVVARS = no ]
-then
- cp -p $SR/bin/envvars-std $SR/bin/envvars
-fi
-
-echo "Ready."
-echo " +--------------------------------------------------------+"
-echo " | You now have successfully installed the Apache @ver@ |"
-echo " | HTTP server. To verify that Apache actually works |"
-echo " | correctly you should first check the (initially |"
-echo " | created or preserved) configuration files: |"
-echo " | |"
-echo " | $SR/conf/httpd.conf"
-echo " | |"
-echo " | You should then be able to immediately fire up |"
-echo " | Apache the first time by running: |"
-echo " | |"
-echo " | $SR/bin/apachectl start "
-echo " | |"
-echo " | Thanks for using Apache. The Apache Group |"
-echo " | http://www.apache.org/ |"
-echo " +--------------------------------------------------------+"
-echo " "
diff --git a/build/install.sh b/build/install.sh
deleted file mode 100755
index ba676624d7..0000000000
--- a/build/install.sh
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/sh
-#
-# Copyright 1999-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# install.sh -- install a program, script or datafile
-#
-# Based on `install-sh' from the X Consortium's X11R5 distribution
-# as of 89/12/18 which is freely available.
-# Cleaned up for Apache's Autoconf-style Interface (APACI)
-# by Ralf S. Engelschall <rse apache.org>
-
-#
-# put in absolute paths if you don't have them in your path;
-# or use env. vars.
-#
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-
-#
-# parse argument line
-#
-instcmd="$mvprog"
-chmodcmd=""
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-ext=""
-src=""
-dst=""
-while [ "x$1" != "x" ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift; continue
- ;;
- -m) chmodcmd="$chmodprog $2"
- shift; shift; continue
- ;;
- -o) chowncmd="$chownprog $2"
- shift; shift; continue
- ;;
- -g) chgrpcmd="$chgrpprog $2"
- shift; shift; continue
- ;;
- -s) stripcmd="$stripprog"
- shift; continue
- ;;
- -S) stripcmd="$stripprog $2"
- shift; shift; continue
- ;;
- -e) ext="$2"
- shift; shift; continue
- ;;
- *) if [ "x$src" = "x" ]; then
- src=$1
- else
- dst=$1
- fi
- shift; continue
- ;;
- esac
-done
-if [ "x$src" = "x" ]; then
- echo "install.sh: no input file specified"
- exit 1
-fi
-if [ "x$dst" = "x" ]; then
- echo "install.sh: no destination specified"
- exit 1
-fi
-
-#
-# If destination is a directory, append the input filename; if
-# your system does not like double slashes in filenames, you may
-# need to add some logic
-#
-if [ -d $dst ]; then
- dst="$dst/`basename $src`"
-fi
-
-# Add a possible extension (such as ".exe") to src and dst
-src="$src$ext"
-dst="$dst$ext"
-
-# Make a temp file name in the proper directory.
-dstdir=`dirname $dst`
-dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-$instcmd $src $dsttmp
-
-# And set any options; do chmod last to preserve setuid bits
-if [ "x$chowncmd" != "x" ]; then $chowncmd $dsttmp; fi
-if [ "x$chgrpcmd" != "x" ]; then $chgrpcmd $dsttmp; fi
-if [ "x$stripcmd" != "x" ]; then $stripcmd $dsttmp; fi
-if [ "x$chmodcmd" != "x" ]; then $chmodcmd $dsttmp; fi
-
-# Now rename the file to the real destination.
-$rmcmd $dst
-$mvcmd $dsttmp $dst
-
-exit 0
-
diff --git a/build/instdso.sh b/build/instdso.sh
deleted file mode 100755
index 6b9e438636..0000000000
--- a/build/instdso.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# instdso.sh - install Apache DSO modules
-#
-# we use this instead of libtool --install because:
-# 1) on a few platforms libtool doesn't install DSOs exactly like we'd
-# want (weird names, doesn't remove DSO first)
-# 2) we never want the .la files copied, so we might as well copy
-# the .so files ourselves
-
-if test "$#" != "3"; then
- echo "wrong number of arguments to instdso.sh"
- echo "Usage: instdso.sh SH_LIBTOOL-value dso-name path-to-modules"
- exit 1
-fi
-
-SH_LIBTOOL=`echo $1 | sed -e 's/^SH_LIBTOOL=//'`
-DSOARCHIVE=$2
-DSOARCHIVE_BASENAME=`basename $2`
-TARGETDIR=$3
-DSOBASE=`echo $DSOARCHIVE_BASENAME | sed -e 's/\.la$//'`
-TARGET_NAME="$DSOBASE.so"
-
-SYS=`uname -s`
-
-if test "$SYS" = "AIX"
-then
- # on AIX, shared libraries remain in storage even when
- # all processes using them have exited; standard practice
- # prior to installing a shared library is to rm -f first
- CMD="rm -f $TARGETDIR/$TARGET_NAME"
- echo $CMD
- $CMD || exit $?
-fi
-
-CMD="$SH_LIBTOOL --mode=install cp $DSOARCHIVE $TARGETDIR/"
-echo $CMD
-$CMD || exit $?
-
-if test "$SYS" = "OS/2"
-then
- # on OS/2, aplibtool --install doesn't copy the .la files & we can't
- # rename DLLs to have a .so extension or they won't load so none of the
- # steps below make sense.
- exit 0
-fi
-
-DLNAME=`grep "^dlname" $TARGETDIR/$DSOARCHIVE_BASENAME | sed -e "s/dlname='\([^']*\)'/\1/"`
-LIBRARY_NAMES=`grep "library_names" $TARGETDIR/$DSOARCHIVE_BASENAME | sed -e "s/dlname='\([^']*\)'/\1/"`
-LIBRARY_NAMES=`echo $LIBRARY_NAMES | sed -e "s/ *$DLNAME//g"`
-
-if test -z "$DLNAME"
-then
- echo "Warning! dlname not found in $TARGETDIR/$DSOARCHIVE_BASENAME."
- echo "Assuming installing a .so rather than a libtool archive."
- exit 0
-fi
-
-if test -n "$LIBRARY_NAMES"
-then
- for f in $LIBRARY_NAMES
- do
- rm -f $TARGETDIR/$f
- done
-fi
-
-if test "$DLNAME" != "$TARGET_NAME"
-then
- mv $TARGETDIR/$DLNAME $TARGETDIR/$TARGET_NAME
-fi
-
-rm -f $TARGETDIR/$DSOARCHIVE_BASENAME
-rm -f $TARGETDIR/$DSOBASE.a
-rm -f $TARGETDIR/lib$DSOBASE.a
-rm -f $TARGETDIR/lib$TARGET_NAME
-
-exit 0
diff --git a/build/library.mk b/build/library.mk
deleted file mode 100644
index 6cee6d2b30..0000000000
--- a/build/library.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)
-
-$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES)
- $(LINK) -static $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD)
diff --git a/build/ltlib.mk b/build/ltlib.mk
deleted file mode 100644
index 5ab0750498..0000000000
--- a/build/ltlib.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-TARGETS = $(LTLIBRARY_NAME)
-
-include $(top_builddir)/build/rules.mk
-include $(top_srcdir)/build/library.mk
-
diff --git a/build/make_exports.awk b/build/make_exports.awk
deleted file mode 100644
index aa69b257ad..0000000000
--- a/build/make_exports.awk
+++ /dev/null
@@ -1,163 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-BEGIN {
- printf("/*\n")
- printf(" * THIS FILE WAS AUTOGENERATED BY make_exports.awk\n")
- printf(" *\n")
- printf(" * This is an ugly hack that needs to be here, so\n")
- printf(" * that libtool will link all of the APR functions\n")
- printf(" * into server regardless of whether the base server\n")
- printf(" * uses them.\n")
- printf(" */\n")
- printf("\n")
- printf("#define CORE_PRIVATE\n")
- printf("\n")
-
- for (i = 1; i < ARGC; i++) {
- file = ARGV[i]
- sub("([^/]*[/])*", "", file)
- printf("#include \"%s\"\n", file)
- }
-
- printf("\n")
- printf("const void *ap_ugly_hack = NULL;\n")
- printf("\n")
-
- TYPE_NORMAL = 0
- TYPE_HEADER = 1
-
- stackptr = 0
-}
-
-function push(line) {
- stack[stackptr] = line
- stackptr++
-}
-
-function do_output() {
- printf("/*\n")
- printf(" * %s\n", FILENAME)
- printf(" */\n")
-
- for (i = 0; i < stackptr; i++) {
- printf("%s\n", stack[i])
- }
-
- stackptr = 0
-
- printf("\n");
-}
-
-function enter_scope(type) {
- scope++
- scope_type[scope] = type
- scope_stack[scope] = stackptr
- delete scope_used[scope]
-}
-
-function leave_scope() {
- used = scope_used[scope]
-
- if (!used)
- stackptr = scope_stack[scope]
-
- scope--
- if (used) {
- scope_used[scope] = 1
-
- if (!scope)
- do_output()
- }
-}
-
-function add_symbol(symbol) {
- if (!index(symbol, "#")) {
- push("const void *ap_hack_" symbol " = (const void *)" symbol ";")
- scope_used[scope] = 1
- }
-}
-
-/^[ \t]*AP[RU]?_(CORE_)?DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ {
- sub("[ \t]*AP[RU]?_(CORE_)?DECLARE[^(]*[(][^)]*[)][ \t]*", "")
- sub("[(].*", "")
- sub("([^ ]* (^([ \t]*[(])))+", "")
-
- add_symbol($0)
- next
-}
-
-/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*/ {
- split($0, args, ",")
- symbol = args[2]
- sub("^[ \t]+", "", symbol)
- sub("[ \t]+$", "", symbol)
-
- add_symbol("ap_hook_" symbol)
- add_symbol("ap_hook_get_" symbol)
- add_symbol("ap_run_" symbol)
- next
-}
-
-/^[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(][^)]*[)]/ {
- sub("[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(]", "", $0)
- sub("[)].*$", "", $0)
- add_symbol("apr_" $0 "_pool_get")
- next
-}
-
-/^[ \t]*APR_DECLARE_INHERIT_SET[^(]*[(][^)]*[)]/ {
- sub("[ \t]*APR_DECLARE_INHERIT_SET[^(]*[(]", "", $0)
- sub("[)].*$", "", $0)
- add_symbol("apr_" $0 "_inherit_set")
- next
-}
-
-/^[ \t]*APR_DECLARE_INHERIT_UNSET[^(]*[(][^)]*[)]/ {
- sub("[ \t]*APR_DECLARE_INHERIT_UNSET[^(]*[(]", "", $0)
- sub("[)].*$", "", $0)
- add_symbol("apr_" $0 "_inherit_unset")
- next
-}
-
-/^#[ \t]*if(ndef| !defined[(])([^_]*_)*H/ {
- enter_scope(TYPE_HEADER)
- next
-}
-
-/^#[ \t]*if([n]?def)? / {
- enter_scope(TYPE_NORMAL)
- push($0)
- next
-}
-
-/^#[ \t]*endif/ {
- if (scope_type[scope] == TYPE_NORMAL)
- push($0)
-
- leave_scope()
- next
-}
-
-/^#[ \t]*else/ {
- push($0)
- next
-}
-
-/^#[ \t]*elif/ {
- push($0)
- next
-}
-
-
diff --git a/build/make_nw_export.awk b/build/make_nw_export.awk
deleted file mode 100644
index 4640ff696e..0000000000
--- a/build/make_nw_export.awk
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# Based on apr's make_export.awk, which is
-# based on Ryan Bloom's make_export.pl
-
-BEGIN {
- printf(" (APACHE2)\n")
-}
-
-# List of functions that we don't support, yet??
-#/ap_some_name/{next}
-
-function add_symbol (sym_name) {
- if (count) {
- found++
- }
- gsub (/ /, "", sym_name)
- line = line sym_name ",\n"
-
- if (count == 0) {
- printf(" %s", line)
- line = ""
- }
-}
-
-/^[ \t]*AP([RU]|_CORE)?_DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ {
- sub("[ \t]*AP([RU]|_CORE)?_DECLARE[^(]*[(][^)]*[)][ \t]*", "")
- sub("[(].*", "")
- sub("([^ ]* (^([ \t]*[(])))+", "")
-
- add_symbol($0)
- next
-}
-
-/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*/ {
- split($0, args, ",")
- symbol = args[2]
- sub("^[ \t]+", "", symbol)
- sub("[ \t]+$", "", symbol)
-
- add_symbol("ap_hook_" symbol)
- add_symbol("ap_hook_get_" symbol)
- add_symbol("ap_run_" symbol)
- next
-}
-
-/^[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(][^)]*[)]/ {
- sub("[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(]", "", $0)
- sub("[)].*$", "", $0)
- add_symbol("apr_" $0 "_pool_get")
- next
-}
-
-/^[ \t]*APR_DECLARE_INHERIT_SET[^(]*[(][^)]*[)]/ {
- sub("[ \t]*APR_DECLARE_INHERIT_SET[^(]*[(]", "", $0)
- sub("[)].*$", "", $0)
- add_symbol("apr_" $0 "_inherit_set")
- next
-}
-
-/^[ \t]*APR_DECLARE_INHERIT_UNSET[^(]*[(][^)]*[)]/ {
- sub("[ \t]*APR_DECLARE_INHERIT_UNSET[^(]*[(]", "", $0)
- sub("[)].*$", "", $0)
- add_symbol("apr_" $0 "_inherit_unset")
- next
-}
-
-/^[ \t]*(extern[ \t]+)?AP[RU]?_DECLARE_DATA .*;$/ {
- varname = $NF;
- gsub( /[*;]/, "", varname);
- gsub( /\[.*\]/, "", varname);
- add_symbol(varname);
-}
-
-#END {
-# printf(" %s", line)
-#}
diff --git a/build/make_var_export.awk b/build/make_var_export.awk
deleted file mode 100644
index be150d4710..0000000000
--- a/build/make_var_export.awk
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# Based on apr's make_export.awk, which is
-# based on Ryan Bloom's make_export.pl
-
-/^#[ \t]*if(def)? (AP[RU]?_|!?defined).*/ {
- if (old_filename != FILENAME) {
- if (old_filename != "") printf("%s", line)
- macro_no = 0
- found = 0
- count = 0
- old_filename = FILENAME
- line = ""
- }
- macro_stack[macro_no++] = macro
- macro = substr($0, length($1)+2)
- count++
- line = line "#ifdef " macro "\n"
- next
-}
-
-/^#[ \t]*endif/ {
- if (count > 0) {
- count--
- line = line "#endif /* " macro " */\n"
- macro = macro_stack[--macro_no]
- }
- if (count == 0) {
- if (found != 0) {
- printf("%s", line)
- }
- line = ""
- }
- next
-}
-
-function add_symbol (sym_name) {
- if (count) {
- found++
- }
- for (i = 0; i < count; i++) {
- line = line "\t"
- }
- line = line sym_name "\n"
-
- if (count == 0) {
- printf("%s", line)
- line = ""
- }
-}
-
-/^[ \t]*(extern[ \t]+)?AP[RU]?_DECLARE_DATA .*;$/ {
- varname = $NF;
- gsub( /[*;]/, "", varname);
- gsub( /\[.*\]/, "", varname);
- add_symbol(varname);
-}
-
-END {
- printf("%s", line)
-}
diff --git a/build/mkconfNW.awk b/build/mkconfNW.awk
deleted file mode 100644
index 8691cf653b..0000000000
--- a/build/mkconfNW.awk
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright 2002-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-BEGIN {
-
- A["ServerRoot"] = "SYS:/APACHE2"
- A["Port"] = "80"
- A["cgidir"] = "cgi-bin"
- A["logfiledir"] = "logs"
- A["htdocsdir"] = "htdocs"
- A["sysconfdir"] = "conf"
- A["iconsdir"] = "icons"
- A["manualdir"] = "manual"
- A["runtimedir"] = "logs"
- A["errordir"] = "error"
- A["proxycachedir"] = "proxy"
-
- B["htdocsdir"] = A["ServerRoot"]"/"A["htdocsdir"]
- B["iconsdir"] = A["ServerRoot"]"/"A["iconsdir"]
- B["manualdir"] = A["ServerRoot"]"/"A["manualdir"]
- B["errordir"] = A["ServerRoot"]"/"A["errordir"]
- B["proxycachedir"] = A["ServerRoot"]"/"A["proxycachedir"]
- B["cgidir"] = A["ServerRoot"]"/"A["cgidir"]
- B["listen_stmt_1"] = "Listen "A["Port"]
- B["listen_stmt_2"] = ""
-}
-
-/@@LoadModule@@/ {
- print "#LoadModule auth_basic_module modules/authbasc.nlm"
- print "#LoadModule auth_digest_module modules/authdigt.nlm"
- print "#LoadModule authn_anon_module modules/authnano.nlm"
- print "#LoadModule authn_dbm_module modules/authndbm.nlm"
- print "#LoadModule authn_default_module modules/authndef.nlm"
- print "#LoadModule authn_file_module modules/authnfil.nlm"
- print "#LoadModule authz_dbm_module modules/authzdbm.nlm"
- print "#LoadModule authz_default_module modules/authzdef.nlm"
- print "#LoadModule authz_groupfile_module modules/authzgrp.nlm"
- print "#LoadModule authz_user_module modules/authzusr.nlm"
- print "#LoadModule cern_meta_module modules/cernmeta.nlm"
- print "#LoadModule dav_module modules/mod_dav.nlm"
- print "#LoadModule dav_fs_module modules/moddavfs.nlm"
- print "#LoadModule dav_lock_module modules/moddavlk.nlm"
- print "#LoadModule expires_module modules/expires.nlm"
- print "#LoadModule ext_filter_module modules/extfiltr.nlm"
- print "#LoadModule file_cache_module modules/filecach.nlm"
- print "#LoadModule headers_module modules/headers.nlm"
- print "#LoadModule ident_module modules/modident.nlm"
- print "#LoadModule info_module modules/info.nlm"
- print "#LoadModule log_forensic_module modules/forensic.nlm"
- print "#LoadModule logio_module modules/modlogio.nlm"
- print "#LoadModule mime_magic_module modules/mimemagi.nlm"
- print "#LoadModule proxy_module modules/proxy.nlm"
- print "#LoadModule proxy_connect_module modules/proxycon.nlm"
- print "#LoadModule proxy_http_module modules/proxyhtp.nlm"
- print "#LoadModule proxy_ftp_module modules/proxyftp.nlm"
- print "#LoadModule rewrite_module modules/rewrite.nlm"
- print "#LoadModule speling_module modules/speling.nlm"
- print "#LoadModule status_module modules/status.nlm"
- print "#LoadModule unique_id_module modules/uniqueid.nlm"
- print "#LoadModule usertrack_module modules/usertrk.nlm"
- print "#LoadModule version_module modules/modversion.nlm"
- print "#LoadModule vhost_alias_module modules/vhost.nlm"
- print ""
- next
-}
-
-match ($0,/@@.*@@/) {
- s=substr($0,RSTART+2,RLENGTH-4)
- sub(/@@.*@@/,A[s],$0)
-}
-
-match ($0,/@rel_.*@/) {
- s=substr($0,RSTART+5,RLENGTH-6)
- sub(/@rel_.*@/,A[s],$0)
-}
-
-match ($0,/@exp_.*@/) {
- s=substr($0,RSTART+5,RLENGTH-6)
- sub(/@exp_.*@/,B[s],$0)
-}
-
-match ($0,/@nonssl_.*@/) {
- s=substr($0,RSTART+8,RLENGTH-9)
- sub(/@nonssl_.*@/,B[s],$0)
-}
-
-{
- print
-}
-
-
-END {
- print
- print "#"
- print "# SecureListen: Allows you to securely bind Apache to specific IP addresses "
- print "# and/or ports."
- print "#"
- print "# Change this to SecureListen on specific IP addresses as shown below to "
- print "# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)"
- print "#"
- print "#SecureListen 443 \"SSL CertificateDNS\""
-}
diff --git a/build/mkdep.perl b/build/mkdep.perl
deleted file mode 100644
index a9f1a67d0b..0000000000
--- a/build/mkdep.perl
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/perl
-#
-# $Id: mkdep.perl,v 1.2 2000/03/19 13:25:33 bjh Exp $
-#
-# Created: Thu Aug 15 11:57:33 1996 too
-# Last modified: Mon Dec 27 09:23:56 1999 too
-#
-# Copyright (c) 1996-1999 Tomi Ollila. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-die "Usage: mkdep CPP-command [CPP options] file1 [file2...]\n"
- if ($#ARGV < 1);
-
-$cmdl = shift(@ARGV);
-
-$cmdl = "$cmdl " . shift (@ARGV) while ($ARGV[0] =~ /^-[A-Z]/);
-
-while ($file = shift(@ARGV))
-{
- $file =~ s/\.o$/.c/;
-
- open(F, "$cmdl $file|");
-
- &parseout;
-
- close(F);
-}
-
-
-sub initinit
-{
- %used = ();
- $of = $file;
- $of =~ s/\.c$/.lo/;
- $str = "$of:\t$file";
- $len = length $str;
-}
-
-sub initstr
-{
- $str = "\t";
- $len = length $str;
-}
-
-sub parseout
-{
- &initinit;
- while (<F>)
- {
- s/\\\\/\//g;
- next unless (/^# [0-9]* "(.*\.h)"/);
-
- next if ($1 =~ /^\//);
-
- next if $used{$1};
-
- $used{$1} = 1;
-
- $nlen = length($1) + 1;
-
- if ($len + $nlen > 72)
- {
- print $str, "\\\n";
- &initstr;
- $str = $str . $1;
- }
- else { $str = $str . " " . $1; }
-
- $len += $nlen;
-
- }
- print $str, "\n";
-}
diff --git a/build/mkdir.sh b/build/mkdir.sh
deleted file mode 100755
index a46c9a9aa0..0000000000
--- a/build/mkdir.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-#
-# Copyright 1999-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# mkdir.sh -- make directory hierarchy
-#
-# Based on `mkinstalldirs' from Noah Friedman <friedman@prep.ai.mit.edu>
-# as of 1994-03-25, which was placed in the Public Domain.
-# Cleaned up for Apache's Autoconf-style Interface (APACI)
-# by Ralf S. Engelschall <rse apache.org>
-
-umask 022
-errstatus=0
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" |\
- sed -e 's/^:\//%/' -e 's/^://' -e 's/\// /g' -e 's/^%/\//'`
- shift
- pathcomp=
- for d in ${1+"$@"}; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- ?: ) pathcomp="$pathcomp/"
- continue ;;
- esac
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" || errstatus=$?
- fi
- pathcomp="$pathcomp/"
- done
-done
-exit $errstatus
-
diff --git a/build/nw_export.inc b/build/nw_export.inc
deleted file mode 100644
index 50231249ff..0000000000
--- a/build/nw_export.inc
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Must include ap_config.h first so that we can redefine
- the standard prototypes macros after it messes with
- them. */
-#include "ap_config.h"
-
-/* Define all of the standard prototype macros as themselves
- so that httpd.h will not mess with them. This allows
- them to pass untouched so that the AWK script can pick
- them out of the preprocessed result file. */
-#define AP_DECLARE AP_DECLARE
-#define AP_CORE_DECLARE AP_CORE_DECLARE
-#define AP_DECLARE_NONSTD AP_DECLARE_NONSTD
-#define AP_CORE_DECLARE_NONSTD AP_CORE_DECLARE_NONSTD
-#define AP_DECLARE_HOOK AP_DECLARE_HOOK
-#define AP_DECLARE_DATA AP_DECLARE_DATA
-#undef APACHE_OS_H
-
-#include "httpd.h"
-
-/* Preprocess all of the standard HTTPD headers. */
-#include "ap_compat.h"
-#include "ap_listen.h"
-#include "ap_mmn.h"
-#include "ap_mpm.h"
-#include "ap_provider.h"
-#include "ap_release.h"
-#include "http_config.h"
-#include "http_connection.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "mpm_common.h"
-#include "pcreposix.h"
-#include "scoreboard.h"
-#include "util_cfgtree.h"
-#include "util_charset.h"
-#include "util_ebcdic.h"
-#include "util_filter.h"
-/*#include "util_ldap.h"*/
-#include "util_md5.h"
-#include "util_script.h"
-#include "util_time.h"
-#include "util_xml.h"
-
-#include "mod_core.h"
-#include "mod_auth.h"
diff --git a/build/nw_ver.awk b/build/nw_ver.awk
deleted file mode 100644
index 59304a244c..0000000000
--- a/build/nw_ver.awk
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2002-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-BEGIN {
-
- # fetch Apache version numbers from input file and writes them to STDOUT
-
- while ((getline < ARGV[1]) > 0) {
- if (match ($0, /^#define AP_SERVER_MAJORVERSION_NUMBER /)) {
- ver_major = $3;
- }
- else if (match ($0, /^#define AP_SERVER_MINORVERSION_NUMBER /)) {
- ver_minor = $3;
- }
- else if (match ($0, /^#define AP_SERVER_PATCHLEVEL_NUMBER/)) {
- ver_patch = $3;
- }
- else if (match ($0, /^#define AP_SERVER_ADD_STRING /)) {
- ver_str_release = substr($3, 2, length($3) - 2);
- }
- }
- ver = ver_major "," ver_minor "," ver_patch;
- ver_str = ver_major "." ver_minor "." ver_patch ver_str_release;
-
- print "VERSION = " ver "";
- print "VERSION_STR = " ver_str "";
-
-}
diff --git a/build/prebuildNW.bat b/build/prebuildNW.bat
deleted file mode 100755
index 0ce59f1e66..0000000000
--- a/build/prebuildNW.bat
+++ /dev/null
@@ -1,47 +0,0 @@
-@echo off
-
-if not "%NovellLibC%" == "" goto CheckNDK
-set NovellLibC=\novell\ndk\libc
-@echo Could not find the NovellLibC environment variable
-@echo Setting NovellLibC = %NovellLibC%
-@echo ---------------------
-
-:CheckNDK
-if exist %NovellLibC%\include\netware.h goto NDKOK
-@echo The path to the NDK "%NovellLibC%" is invalid.
-@echo Please set then NovellLibC environment variable to the location of the NDK
-@echo ---------------------
-goto Done
-
-:NDKOK
-@echo # As part of the pre-build process, the utilities GenChars.NLM
-@echo # (Gen Test Chars) and DFTables.NLM (dftables) must be built,
-@echo # copied to a NetWare server and run using the following commands:
-@echo #
-@echo # "sys:\genchars >sys:\test_char.h"
-@echo # "sys:\dftables >sys:\chartables.c"
-@echo #
-@echo # The files "sys:\test_chars.h" and "sys:\chartables.c" must be
-@echo # copied to "httpd\os\netware" on the build machine.
-
-@echo Fixing up the APR headers
-copy ..\srclib\apr\include\apr.hnw ..\srclib\apr\include\apr.h
-
-@echo Fixing up the APR-Util headers
-copy ..\srclib\apr-util\include\apu.hnw ..\srclib\apr-util\include\apu.h
-copy ..\srclib\apr-util\include\apr_ldap.hnw ..\srclib\apr-util\include\apr_ldap.h
-
-@echo Fixing up the pcre headers
-copy ..\srclib\pcre\config.hw ..\srclib\pcre\config.h
-copy ..\srclib\pcre\pcre.hw ..\srclib\pcre\pcre.h
-
-@echo Generating the import lists...
-set MWCIncludes=..\include;..\modules\http;..\modules\aaa;..\os\netware;..\server\mpm\netware;..\srclib\apr\include;..\srclib\apr-util\include;+%NovellLibC%
-mwccnlm -P nw_export.inc -d NETWARE -d CORE_PRIVATE -EP
-awk -f make_nw_export.awk nw_export.i |sort >..\os\netware\httpd.imp
-
-rem cd ..\srclib\apr\build
-rem call prebuildnw.bat
-
-:Done
-pause
diff --git a/build/program.mk b/build/program.mk
deleted file mode 100644
index 19312c88d8..0000000000
--- a/build/program.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo)
-
-$(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS)
- $(LINK) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD)
diff --git a/build/rpm/httpd.init b/build/rpm/httpd.init
deleted file mode 100755
index 218b69d1b1..0000000000
--- a/build/rpm/httpd.init
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2003-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# Startup script for the Apache Web Server
-#
-# chkconfig: - 85 15
-# description: Apache is a World Wide Web server. It is used to serve \
-# HTML files and CGI.
-# processname: httpd
-# pidfile: /var/run/httpd.pid
-# config: /etc/httpd/conf/httpd.conf
-
-# Source function library.
-. /etc/rc.d/init.d/functions
-
-if [ -f /etc/sysconfig/httpd ]; then
- . /etc/sysconfig/httpd
-fi
-
-# This will prevent initlog from swallowing up a pass-phrase prompt if
-# mod_ssl needs a pass-phrase from the user.
-INITLOG_ARGS=""
-
-# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
-# with the thread-based "worker" MPM; BE WARNED that some modules may not
-# work correctly with a thread-based MPM; notably PHP will refuse to start.
-
-# Path to the apachectl script, server binary, and short-form for messages.
-apachectl=/usr/sbin/apachectl
-httpd=${HTTPD-/usr/sbin/httpd}
-prog=httpd
-RETVAL=0
-
-# check for 1.3 configuration
-check13 () {
- CONFFILE=/etc/httpd/conf/httpd.conf
- GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
- GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
- GONE="${GONE}AccessConfig|ResourceConfig)"
- if grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
- echo
- echo 1>&2 " Apache 1.3 configuration directives found"
- echo 1>&2 " please read @docdir@/migration.html"
- failure "Apache 1.3 config directives test"
- echo
- exit 1
- fi
-}
-
-# The semantics of these two functions differ from the way apachectl does
-# things -- attempting to start while running is a failure, and shutdown
-# when not running is also a failure. So we just do it the way init scripts
-# are expected to behave here.
-start() {
- echo -n $"Starting $prog: "
- check13 || exit 1
- daemon $httpd $OPTIONS
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
- return $RETVAL
-}
-stop() {
- echo -n $"Stopping $prog: "
- killproc $httpd
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid
-}
-reload() {
- echo -n $"Reloading $prog: "
- check13 || exit 1
- killproc $httpd -HUP
- RETVAL=$?
- echo
-}
-
-# See how we were called.
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- status $httpd
- RETVAL=$?
- ;;
- restart)
- stop
- start
- ;;
- condrestart)
- if [ -f /var/run/httpd.pid ] ; then
- stop
- start
- fi
- ;;
- reload)
- reload
- ;;
- graceful|help|configtest|fullstatus)
- $apachectl $@
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
- exit 1
-esac
-
-exit $RETVAL
diff --git a/build/rpm/httpd.logrotate b/build/rpm/httpd.logrotate
deleted file mode 100644
index dd0ce1b9a9..0000000000
--- a/build/rpm/httpd.logrotate
+++ /dev/null
@@ -1,8 +0,0 @@
-/var/log/httpd/*log {
- missingok
- notifempty
- sharedscripts
- postrotate
- /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
- endscript
-}
diff --git a/build/rpm/httpd.spec.in b/build/rpm/httpd.spec.in
deleted file mode 100644
index 259135ef3a..0000000000
--- a/build/rpm/httpd.spec.in
+++ /dev/null
@@ -1,532 +0,0 @@
-%define contentdir /var/www
-%define suexec_caller apache
-%define mmn APACHE_MMN
-
-%ifarch ia64
-# disable debuginfo on IA64
-%define debug_package %{nil}
-%endif
-
-Summary: Apache HTTP Server
-Name: httpd
-Version: APACHE_VERSION
-Release: APACHE_RELEASE
-URL: http://httpd.apache.org/
-Vendor: Apache Software Foundation
-Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz
-License: Apache License, Version 2.0
-Group: System Environment/Daemons
-BuildRoot: %{_tmppath}/%{name}-root
-BuildPrereq: openldap-devel, db4-devel, expat-devel, findutils, perl, pkgconfig
-Requires: gawk, /usr/share/magic.mime, /usr/bin/find, openldap
-Prereq: /sbin/chkconfig, /bin/mktemp, /bin/rm, /bin/mv
-Prereq: sh-utils, textutils, /usr/sbin/useradd
-Provides: webserver
-Provides: httpd-mmn = %{mmn}
-Conflicts: thttpd
-Obsoletes: apache, secureweb, mod_dav
-
-%description
-Apache is a powerful, full-featured, efficient, and freely-available
-Web server. Apache is also the most popular Web server on the
-Internet.
-
-%package devel
-Group: Development/Libraries
-Summary: Development tools for the Apache HTTP server.
-Obsoletes: secureweb-devel, apache-devel
-Requires: libtool, httpd = %{version}
-
-%description devel
-The httpd-devel package contains the APXS binary and other files
-that you need to build Dynamic Shared Objects (DSOs) for Apache.
-
-If you are installing the Apache HTTP server and you want to be
-able to compile or develop additional modules for Apache, you need
-to install this package.
-
-%package manual
-Group: Documentation
-Summary: Documentation for the Apache HTTP server.
-Obsoletes: secureweb-manual, apache-manual
-
-%description manual
-The httpd-manual package contains the complete manual and
-reference guide for the Apache HTTP server. The information can
-also be found at http://httpd.apache.org/docs/.
-
-%package -n mod_ssl
-Group: System Environment/Daemons
-Summary: SSL/TLS module for the Apache HTTP server
-Serial: 1
-BuildPrereq: openssl-devel
-Prereq: openssl, dev, /bin/cat
-Requires: httpd, make, httpd-mmn = %{mmn}
-
-%description -n mod_ssl
-The mod_ssl module provides strong cryptography for the Apache Web
-server via the Secure Sockets Layer (SSL) and Transport Layer
-Security (TLS) protocols.
-
-%prep
-%setup -q
-
-# Safety check: prevent build if defined MMN does not equal upstream MMN.
-vmmn=`echo MODULE_MAGIC_NUMBER_MAJOR | cpp -include \`pwd\`/include/ap_mmn.h | grep -e '^[0-9]'`
-if test x${vmmn} != x%{mmn}; then
- : Error: Upstream MMN is now ${vmmn}, packaged MMN is %{mmn}.
- : Update the mmn macro and rebuild.
- exit 1
-fi
-
-# regenerate configure scripts
-./buildconf
-
-# Before configure; fix location of build dir in generated apxs
-%{__perl} -pi -e "s:\@exp_installbuilddir\@:%{_libdir}/httpd/build:g" \
- support/apxs.in
-
-%build
-
-if pkg-config openssl ; then
- # configure -C barfs with trailing spaces in CFLAGS
- CFLAGS="$RPM_OPT_FLAGS `pkg-config --cflags openssl | sed 's/ *$//'`"
- AP_LIBS="$AP_LIBS `pkg-config --libs openssl`"
-else
- CFLAGS="$RPM_OPT_FLAGS"
- AP_LIBS="-lssl -lcrypto"
-fi
-export CFLAGS
-export AP_LIBS
-
-function mpmbuild()
-{
-mpm=$1; shift
-mkdir $mpm; pushd $mpm
-cat > config.cache <<EOF
-ac_cv_func_pthread_mutexattr_setpshared=no
-ac_cv_func_sem_open=no
-EOF
-../configure -C \
- --prefix=%{_sysconfdir}/httpd \
- --exec-prefix=%{_prefix} \
- --bindir=%{_bindir} \
- --sbindir=%{_sbindir} \
- --mandir=%{_mandir} \
- --libdir=%{_libdir} \
- --sysconfdir=%{_sysconfdir}/httpd/conf \
- --includedir=%{_includedir}/httpd \
- --libexecdir=%{_libdir}/httpd/modules \
- --datadir=%{contentdir} \
- --with-mpm=$mpm \
- --enable-suexec --with-suexec \
- --with-suexec-caller=%{suexec_caller} \
- --with-suexec-docroot=%{contentdir} \
- --with-suexec-logfile=%{_localstatedir}/log/httpd/suexec.log \
- --with-suexec-bin=%{_sbindir}/suexec \
- --with-suexec-uidmin=500 --with-suexec-gidmin=500 \
- --with-devrandom \
- --with-ldap --enable-ldap --enable-auth-ldap \
- --enable-cache --enable-disk-cache --enable-mem-cache \
- --enable-ssl --with-ssl \
- --enable-deflate --enable-cgid \
- --enable-proxy --enable-proxy-connect \
- --enable-proxy-http --enable-proxy-ftp \
- $*
-
-make %{?_smp_mflags}
-popd
-}
-
-# Only bother enabling optional modules for main build.
-mpmbuild prefork --enable-mods-shared=all
-
-# To prevent most modules being built statically into httpd.worker,
-# easiest way seems to be enable them shared.
-mpmbuild worker --enable-mods-shared=all
-
-# Verify that the same modules were built into the two httpd binaries
-./prefork/httpd -l | grep -v prefork > prefork.mods
-./worker/httpd -l | grep -v worker > worker.mods
-if ! diff -u prefork.mods worker.mods; then
- : Different modules built into httpd binaries, will not proceed
- exit 1
-fi
-
-%install
-rm -rf $RPM_BUILD_ROOT
-
-# Classify ab and logresolve as section 1 commands, as they are in /usr/bin
-mv docs/man/ab.8 docs/man/ab.1
-sed -e "1s/logresolve 8/logresolve 1/" \
- < docs/man/logresolve.8 > docs/man/logresolve.1
-rm docs/man/logresolve.8
-
-pushd prefork
-make DESTDIR=$RPM_BUILD_ROOT install
-popd
-# install worker binary
-install -m 755 worker/.libs/httpd $RPM_BUILD_ROOT%{_sbindir}/httpd.worker
-
-# mod_ssl bits
-for suffix in crl crt csr key prm; do
- mkdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/ssl.${suffix}
-done
-
-# Makefiles for certificate management
-#for ext in crt crl; do
-# install -m 644 ./build/rpm/mod_ssl-Makefile.${ext} \
-# $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/ssl.${ext}/Makefile.${ext}
-#done
-#ln -s ../../../usr/share/ssl/certs/Makefile $RPM_BUILD_ROOT/etc/httpd/conf
-
-# for holding mod_dav lock database
-mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/dav
-
-# create a prototype session cache
-mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/mod_ssl
-touch $RPM_BUILD_ROOT%{_localstatedir}/cache/mod_ssl/scache.{dir,pag,sem}
-
-# move utilities to /usr/bin
-mv $RPM_BUILD_ROOT%{_sbindir}/{ab,htdbm,logresolve,htpasswd,htdigest} \
- $RPM_BUILD_ROOT%{_bindir}
-
-# make libtool a symlink
-mv $RPM_BUILD_ROOT%{contentdir}/build $RPM_BUILD_ROOT%{_libdir}/httpd/build
-rm $RPM_BUILD_ROOT%{_libdir}/httpd/build/libtool
-ln -s ../../../..%{_bindir}/libtool $RPM_BUILD_ROOT%{_libdir}/httpd/build/libtool
-
-# fix up config_vars file: relocate the build directory into libdir;
-# reference correct libtool; remove references to RPM build root.
-sed -e "s|%{contentdir}/build|%{_libdir}/httpd/build|g" \
- -e "/AP_LIBS/d" -e "/abs_srcdir/d" \
- -e "/^LIBTOOL/s|/[^ ]*/libtool|%{_bindir}/libtool|" \
- -e "/^EXTRA_INCLUDES/s|-I$RPM_BUILD_DIR[^ ]* ||g" \
- < prefork/build/config_vars.mk \
- > $RPM_BUILD_ROOT%{_libdir}/httpd/build/config_vars.mk
-
-# Make the MMN accessible to module packages
-echo %{mmn} > $RPM_BUILD_ROOT%{_includedir}/httpd/.mmn
-
-# docroot
-mkdir $RPM_BUILD_ROOT%{contentdir}/html
-rm -r $RPM_BUILD_ROOT%{contentdir}/manual/style
-rm $RPM_BUILD_ROOT%{contentdir}/manual/*/*.xml
-
-# logs
-rmdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/logs
-mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/httpd
-
-# symlinks for /etc/httpd
-ln -s ../..%{_localstatedir}/log/httpd $RPM_BUILD_ROOT/etc/httpd/logs
-ln -s ../..%{_localstatedir}/run $RPM_BUILD_ROOT/etc/httpd/run
-ln -s ../..%{_libdir}/httpd/modules $RPM_BUILD_ROOT/etc/httpd/modules
-ln -s ../..%{_libdir}/httpd/build $RPM_BUILD_ROOT/etc/httpd/build
-
-# install SYSV init stuff
-mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
-install -m755 ./build/rpm/httpd.init \
- $RPM_BUILD_ROOT/etc/rc.d/init.d/httpd
-%{__perl} -pi -e "s:\@docdir\@:%{_docdir}/%{name}-%{version}:g" \
- $RPM_BUILD_ROOT/etc/rc.d/init.d/httpd
-
-# install log rotation stuff
-mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
-install -m644 ./build/rpm/httpd.logrotate \
- $RPM_BUILD_ROOT/etc/logrotate.d/httpd
-
-# Remove unpackaged files
-rm -rf $RPM_BUILD_ROOT%{_libdir}/libapr{,util}.{a,la} \
- $RPM_BUILD_ROOT%{_libdir}/APRVARS $RPM_BUILD_ROOT%{_libdir}/*.exp \
- $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.exp \
- $RPM_BUILD_ROOT%{_bindir}/ap?-config \
- $RPM_BUILD_ROOT%{_sbindir}/{checkgid,dbmmanage,envvars*} \
- $RPM_BUILD_ROOT%{contentdir}/htdocs/* \
- $RPM_BUILD_ROOT%{contentdir}/cgi-bin/*
-
-%pre
-# Add the "apache" user
-/usr/sbin/useradd -c "Apache" -u 48 \
- -s /sbin/nologin -r -d %{contentdir} apache 2> /dev/null || :
-
-%triggerpostun -- apache < 2.0
-/sbin/chkconfig --add httpd
-
-%post
-# Register the httpd service
-/sbin/chkconfig --add httpd
-
-%preun
-if [ $1 = 0 ]; then
- /sbin/service httpd stop > /dev/null 2>&1
- /sbin/chkconfig --del httpd
-fi
-
-%post -n mod_ssl
-/sbin/ldconfig ### is this needed?
-umask 077
-
-if [ ! -f %{_sysconfdir}/httpd/conf/ssl.key/server.key ] ; then
-%{_bindir}/openssl genrsa -rand /proc/apm:/proc/cpuinfo:/proc/dma:/proc/filesystems:/proc/interrupts:/proc/ioports:/proc/pci:/proc/rtc:/proc/uptime 1024 > %{_sysconfdir}/httpd/conf/ssl.key/server.key 2> /dev/null
-fi
-
-FQDN=`hostname`
-if [ "x${FQDN}" = "x" ]; then
- FQDN=localhost.localdomain
-fi
-
-if [ ! -f %{_sysconfdir}/httpd/conf/ssl.crt/server.crt ] ; then
-cat << EOF | %{_bindir}/openssl req -new -key %{_sysconfdir}/httpd/conf/ssl.key/server.key -x509 -days 365 -out %{_sysconfdir}/httpd/conf/ssl.crt/server.crt 2>/dev/null
---
-SomeState
-SomeCity
-SomeOrganization
-SomeOrganizationalUnit
-${FQDN}
-root@${FQDN}
-EOF
-fi
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-
-%doc ABOUT_APACHE README CHANGES LICENSE NOTICE
-
-%dir %{_sysconfdir}/httpd
-%{_sysconfdir}/httpd/modules
-%{_sysconfdir}/httpd/logs
-%{_sysconfdir}/httpd/run
-%dir %{_sysconfdir}/httpd/conf
-%config(noreplace) %{_sysconfdir}/httpd/conf/httpd.conf
-%{_sysconfdir}/httpd/conf/httpd-std.conf
-%config(noreplace) %{_sysconfdir}/httpd/conf/highperformance.conf
-%{_sysconfdir}/httpd/conf/highperformance-std.conf
-%config(noreplace) %{_sysconfdir}/httpd/conf/magic
-%config(noreplace) %{_sysconfdir}/httpd/conf/mime.types
-
-%config %{_sysconfdir}/logrotate.d/httpd
-%config %{_sysconfdir}/rc.d/init.d/httpd
-
-#%dir %{_sysconfdir}/httpd/conf
-
-%{_bindir}/ab
-%{_bindir}/ht*
-%{_bindir}/logresolve
-%{_sbindir}/httpd
-%{_sbindir}/httpd.worker
-%{_sbindir}/apachectl
-%{_sbindir}/rotatelogs
-%attr(4510,root,%{suexec_caller}) %{_sbindir}/suexec
-
-%{_libdir}/libapr-1.so.*
-%{_libdir}/libaprutil-1.so.*
-
-%dir %{_libdir}/httpd
-%dir %{_libdir}/httpd/modules
-# everything but mod_ssl.so:
-%{_libdir}/httpd/modules/mod_[a-r]*.so
-%{_libdir}/httpd/modules/mod_s[petu]*.so
-%{_libdir}/httpd/modules/mod_[t-z]*.so
-
-%dir %{contentdir}
-%dir %{contentdir}/cgi-bin
-%dir %{contentdir}/html
-%dir %{contentdir}/icons
-%dir %{contentdir}/error
-%dir %{contentdir}/error/include
-%{contentdir}/icons/*
-%{contentdir}/error/README
-%config(noreplace) %{contentdir}/error/*.var
-%config(noreplace) %{contentdir}/error/include/*.html
-
-%attr(0700,root,root) %dir %{_localstatedir}/log/httpd
-
-%attr(0700,apache,apache) %dir %{_localstatedir}/lib/dav
-
-%{_mandir}/man1/*
-
-%{_mandir}/man8/rotatelogs*
-%{_mandir}/man8/suexec*
-%{_mandir}/man8/apachectl.8*
-%{_mandir}/man8/httpd.8*
-
-%files manual
-%defattr(-,root,root)
-%{contentdir}/manual
-%{contentdir}/error/README
-
-%files -n mod_ssl
-%defattr(-,root,root)
-%{_libdir}/httpd/modules/mod_ssl.so
-%config(noreplace) %{_sysconfdir}/httpd/conf/ssl.conf
-%{_sysconfdir}/httpd/conf/ssl-std.conf
-%attr(0700,root,root) %dir %{_sysconfdir}/httpd/conf/ssl.crl
-%attr(0700,root,root) %dir %{_sysconfdir}/httpd/conf/ssl.crt
-%attr(0700,root,root) %dir %{_sysconfdir}/httpd/conf/ssl.csr
-%attr(0700,root,root) %dir %{_sysconfdir}/httpd/conf/ssl.key
-%attr(0700,root,root) %dir %{_sysconfdir}/httpd/conf/ssl.prm
-#%config %{_sysconfdir}/httpd/conf/Makefile
-#%dir %{_sysconfdir}/httpd/conf/ssl.*
-%attr(0700,apache,root) %dir %{_localstatedir}/cache/mod_ssl
-%attr(0600,apache,root) %ghost %{_localstatedir}/cache/mod_ssl/scache.dir
-%attr(0600,apache,root) %ghost %{_localstatedir}/cache/mod_ssl/scache.pag
-%attr(0600,apache,root) %ghost %{_localstatedir}/cache/mod_ssl/scache.sem
-
-%files devel
-%defattr(-,root,root)
-#%{_libdir}/libapr-0.so
-#%{_libdir}/libaprutil-0.so
-%{_libdir}/libapr-1.a
-%{_libdir}/libapr-1.la
-%{_libdir}/libaprutil-1.a
-%{_libdir}/libaprutil-1.la
-%{_libdir}/httpd/build/config.nice
-%{_includedir}/httpd
-%{_sysconfdir}/httpd/build
-%{_sbindir}/apxs
-%{_mandir}/man8/apxs.8*
-%dir %{_libdir}/httpd/build
-%{_libdir}/httpd/build/*.mk
-%{_libdir}/httpd/build/instdso.sh
-%{_libdir}/httpd/build/libtool
-
-%changelog
-* Thu May 20 2004 Graham Leggett <minfrin@apache.org> 2.0.50-dev
-- Changed default dependancy to link to db4 instead of db3.
-- Fixed complaints about unpackaged files.
-
-* Sat Apr 5 2003 Graham Leggett <minfrin@apache.org> 2.0.46-dev
-- Moved mime.types back to the default location.
-- Added mod_ldap and friends, mod_cache and friends.
-- Added openldap dependancy.
-
-* Sun Mar 30 2003 Graham Leggett <minfrin@apache.org> 2.0.45-1
-- Created generic Apache rpm spec file from that donated by Redhat.
-- Removed Redhat specific patches and boilerplate files.
-- Removed SSL related Makefiles.
-
-* Mon Feb 24 2003 Joe Orton <jorton@redhat.com> 2.0.40-21
-- add security fix for CAN-2003-0020; replace non-printable characters
- with '!' when printing to error log.
-- disable debuginfo on IA64.
-
-* Tue Feb 11 2003 Joe Orton <jorton@redhat.com> 2.0.40-20
-- disable POSIX semaphores to support 2.4.18 kernel (#83324)
-
-* Wed Jan 29 2003 Joe Orton <jorton@redhat.com> 2.0.40-19
-- require xmlto 0.0.11 or later
-- fix apr_strerror on glibc2.3
-
-* Wed Jan 22 2003 Tim Powers <timp@redhat.com> 2.0.40-18
-- rebuilt
-
-* Thu Jan 16 2003 Joe Orton <jorton@redhat.com> 2.0.40-17
-- add mod_cgid and httpd binary built with worker MPM (#75496)
-- allow choice of httpd binary in init script
-- pick appropriate CGI module based on loaded MPM in httpd.conf
-- source /etc/sysconfig/httpd in apachectl to get httpd choice
-- make "apachectl status" fail gracefully when links isn't found (#78159)
-
-* Mon Jan 13 2003 Joe Orton <jorton@redhat.com> 2.0.40-16
-- rebuild for OpenSSL 0.9.7
-
-* Fri Jan 3 2003 Joe Orton <jorton@redhat.com> 2.0.40-15
-- fix possible infinite recursion in config dir processing (#77206)
-- fix memory leaks in request body processing (#79282)
-
-* Thu Dec 12 2002 Joe Orton <jorton@redhat.com> 2.0.40-14
-- remove unstable shmht session cache from mod_ssl
-- get SSL libs from pkg-config if available (Nalin Dahyabhai)
-- stop "apxs -a -i" from inserting AddModule into httpd.conf (#78676)
-
-* Wed Nov 6 2002 Joe Orton <jorton@redhat.com> 2.0.40-13
-- fix location of installbuilddir in apxs when libdir!=/usr/lib
-
-* Wed Nov 6 2002 Joe Orton <jorton@redhat.com> 2.0.40-12
-- pass libdir to configure; clean up config_vars.mk
-- package instdso.sh, fixing apxs -i (#73428)
-- prevent build if upstream MMN differs from mmn macro
-- remove installed but unpackaged files
-
-* Wed Oct 9 2002 Joe Orton <jorton@redhat.com> 2.0.40-11
-- correct SERVER_NAME encoding in i18n error pages (thanks to Andre Malo)
-
-* Wed Oct 9 2002 Joe Orton <jorton@redhat.com> 2.0.40-10
-- fix patch for CAN-2002-0840 to also cover i18n error pages
-
-* Wed Oct 2 2002 Joe Orton <jorton@redhat.com> 2.0.40-9
-- security fixes for CAN-2002-0840 and CAN-2002-0843
-- fix for possible mod_dav segfault for certain requests
-
-* Tue Sep 24 2002 Gary Benson <gbenson@redhat.com>
-- updates to the migration guide
-
-* Wed Sep 4 2002 Nalin Dahyabhai <nalin@redhat.com> 2.0.40-8
-- link httpd with libssl to avoid library loading/unloading weirdness
-
-* Tue Sep 3 2002 Joe Orton <jorton@redhat.com> 2.0.40-7
-- add LoadModule lines for proxy modules in httpd.conf (#73349)
-- fix permissions of conf/ssl.*/ directories; add Makefiles for
- certificate management (#73352)
-
-* Mon Sep 2 2002 Joe Orton <jorton@redhat.com> 2.0.40-6
-- provide "httpd-mmn" to manage module ABI compatibility
-
-* Sun Sep 1 2002 Joe Orton <jorton@redhat.com> 2.0.40-5
-- fix SSL session cache (#69699)
-- revert addition of LDAP support to apr-util
-
-* Mon Aug 26 2002 Joe Orton <jorton@redhat.com> 2.0.40-4
-- set SIGXFSZ disposition to "ignored" (#69520)
-- make dummy connections to the first listener in config (#72692)
-
-* Mon Aug 26 2002 Joe Orton <jorton@redhat.com> 2.0.40-3
-- allow "apachectl configtest" on a 1.3 httpd.conf
-- add mod_deflate
-- enable LDAP support in apr-util
-- don't package everything in /var/www/error as config(noreplace)
-
-* Wed Aug 21 2002 Bill Nottingham <notting@redhat.com> 2.0.40-2
-- add trigger (#68657)
-
-* Mon Aug 12 2002 Joe Orton <jorton@redhat.com> 2.0.40-1
-- update to 2.0.40
-
-* Wed Jul 24 2002 Joe Orton <jorton@redhat.com> 2.0.36-8
-- improve comment on use of UserDir in default config (#66886)
-
-* Wed Jul 10 2002 Joe Orton <jorton@redhat.com> 2.0.36-7
-- use /sbin/nologin as shell for apache user (#68371)
-- add patch from CVS to fix possible infinite loop when processing
- internal redirects
-
-* Wed Jun 26 2002 Gary Benson <gbenson@redhat.com> 2.0.36-6
-- modify init script to detect 1.3.x httpd.conf's and direct users
- to the migration guide
-
-* Tue Jun 25 2002 Gary Benson <gbenson@redhat.com> 2.0.36-5
-- patch apachectl to detect 1.3.x httpd.conf's and direct users
- to the migration guide
-- ship the migration guide
-
-* Fri Jun 21 2002 Joe Orton <jorton@redhat.com>
-- move /etc/httpd2 back to /etc/httpd
-- add noindex.html page and poweredby logo; tweak default config
- to load noindex.html if no default "/" page is present.
-- add patch to prevent mutex errors on graceful restart
-
-* Fri Jun 21 2002 Tim Powers <timp@redhat.com> 2.0.36-4
-- automated rebuild
-
-* Wed Jun 12 2002 Joe Orton <jorton@redhat.com> 2.0.36-3
-- add patch to fix SSL mutex handling
-
-* Wed Jun 12 2002 Joe Orton <jorton@redhat.com> 2.0.36-2
-- improved config directory patch
-
-* Mon May 20 2002 Joe Orton <jorton@redhat.com>
-- initial build; based heavily on apache.spec and mod_ssl.spec
-- fixes: #65214, #58490, #57376, #61265, #65518, #58177, #57245
diff --git a/build/rules.mk.in b/build/rules.mk.in
deleted file mode 100644
index 38c6fe8829..0000000000
--- a/build/rules.mk.in
+++ /dev/null
@@ -1,229 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was originally provided by Sascha Schumann.
-
-@ap_make_include@ @ap_make_delimiter@$(top_builddir)/build/config_vars.mk@ap_make_delimiter@
-
-# Combine all of the flags together in the proper order so that
-# the user-defined flags can always override the configure ones, if needed.
-# Note that includes are listed after the flags because -I options have
-# left-to-right precedence and CPPFLAGS may include user-defined overrides.
-#
-ALL_CFLAGS = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS)
-ALL_CPPFLAGS = $(DEFS) $(EXTRA_CPPFLAGS) $(NOTEST_CPPFLAGS) $(CPPFLAGS)
-ALL_CXXFLAGS = $(EXTRA_CXXFLAGS) $(NOTEST_CXXFLAGS) $(CXXFLAGS)
-ALL_LDFLAGS = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS)
-ALL_LIBS = $(EXTRA_LIBS) $(NOTEST_LIBS) $(LIBS)
-ALL_INCLUDES = $(INCLUDES) $(EXTRA_INCLUDES)
-
-# Compile commands
-
-COMPILE = $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)
-CXX_COMPILE = $(CXX) $(ALL_CXXFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)
-
-SH_COMPILE = $(LIBTOOL) --mode=compile $(COMPILE) @SHLTCFLAGS@ -c $< && touch $@
-SH_CXX_COMPILE = $(LIBTOOL) --mode=compile $(CXX_COMPILE) @SHLTCFLAGS@ -c $< && touch $@
-
-LT_COMPILE = $(LIBTOOL) --mode=compile $(COMPILE) @LTCFLAGS@ -c $< && touch $@
-LT_CXX_COMPILE = $(LIBTOOL) --mode=compile $(CXX_COMPILE) @LTCFLAGS@ -c $< && touch $@
-
-# Link-related commands
-
-LINK = $(LIBTOOL) --mode=link $(CC) $(ALL_CFLAGS) $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
-SH_LINK = $(SH_LIBTOOL) --mode=link $(CC) $(ALL_CFLAGS) $(LT_LDFLAGS) $(ALL_LDFLAGS) $(SH_LDFLAGS) $(CORE_IMPLIB) $(SH_LIBS) -o $@
-MOD_LINK = $(LIBTOOL) --mode=link $(CC) $(ALL_CFLAGS) -static $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
-
-# Cross compile commands
-
-# Helper programs
-
-MKINSTALLDIRS = $(abs_srcdir)/build/mkdir.sh
-INSTALL = $(LIBTOOL) --mode=install $(abs_srcdir)/build/install.sh -c
-INSTALL_DATA = $(INSTALL) -m 644
-INSTALL_PROGRAM = $(INSTALL) -m 755 $(INSTALL_PROG_FLAGS)
-
-#
-# Standard build rules
-#
-all: all-recursive
-depend: depend-recursive
-clean: clean-recursive
-distclean: distclean-recursive
-extraclean: extraclean-recursive
-install: install-recursive
-shared-build: shared-build-recursive
-
-all-recursive install-recursive depend-recursive:
- @otarget=`echo $@|sed s/-recursive//`; \
- list=' $(BUILD_SUBDIRS) $(SUBDIRS)'; \
- for i in $$list; do \
- if test -d "$$i"; then \
- target="$$otarget"; \
- echo "Making $$target in $$i"; \
- if test "$$i" = "."; then \
- made_local=yes; \
- target="local-$$target"; \
- fi; \
- (cd $$i && $(MAKE) $$target) || exit 1; \
- fi; \
- done; \
- if test "$$otarget" = "all" && test -z '$(TARGETS)'; then \
- made_local=yes; \
- fi; \
- if test "$$made_local" != "yes"; then \
- $(MAKE) "local-$$otarget" || exit 1; \
- fi
-
-clean-recursive distclean-recursive extraclean-recursive:
- @otarget=`echo $@|sed s/-recursive//`; \
- list='$(CLEAN_SUBDIRS) $(SUBDIRS)'; \
- for i in $$list; do \
- if test -d "$$i"; then \
- target="$$otarget"; \
- echo "Making $$target in $$i"; \
- if test "$$i" = "."; then \
- made_local=yes; \
- target="local-$$target"; \
- fi; \
- (cd $$i && $(MAKE) $$target); \
- fi; \
- done; \
- if test "$$otarget" = "all" && test -z '$(TARGETS)'; then \
- made_local=yes; \
- fi; \
- if test "$$made_local" != "yes"; then \
- $(MAKE) "local-$$otarget"; \
- fi
-
-shared-build-recursive:
- @if test `pwd` = "$(top_builddir)"; then \
- $(PRE_SHARED_CMDS) ; \
- fi; \
- list='$(SUBDIRS)'; for i in $$list; do \
- target="shared-build"; \
- if test "$$i" = "."; then \
- made_local=yes; \
- target="local-shared-build"; \
- fi; \
- if test "$$i" != "srclib"; then \
- (cd $$i && $(MAKE) $$target) || exit 1; \
- fi; \
- done; \
- if test -f 'modules.mk'; then \
- if test -n '$(SHARED_TARGETS)'; then \
- echo "Building shared: $(SHARED_TARGETS)"; \
- if test "$$made_local" != "yes"; then \
- $(MAKE) "local-shared-build" || exit 1; \
- fi; \
- fi; \
- fi; \
- if test `pwd` = "$(top_builddir)"; then \
- $(POST_SHARED_CMDS) ; \
- fi
-
-local-all: $(TARGETS)
-
-local-shared-build: $(SHARED_TARGETS)
-
-local-depend: x-local-depend
- @if test -n "`ls $(srcdir)/*.c 2> /dev/null`"; then \
- rm -f .deps; \
- list='$(srcdir)/*.c'; \
- for i in $$list; do \
- $(MKDEP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) $$i | sed 's/\.o:/.lo:/' >> .deps; \
- done; \
- fi
-
-local-clean: x-local-clean
- rm -f *.o *.lo *.slo *.obj *.a *.la $(CLEAN_TARGETS) $(TARGETS)
- rm -rf .libs
-
-local-distclean: local-clean x-local-distclean
- rm -f .deps Makefile $(DISTCLEAN_TARGETS)
-
-local-extraclean: local-distclean x-local-extraclean
- @if test -n "$(EXTRACLEAN_TARGETS)"; then \
- echo "rm -f $(EXTRACLEAN_TARGETS)"; \
- rm -f $(EXTRACLEAN_TARGETS) ; \
- fi
-
-local-install: $(TARGETS) $(SHARED_TARGETS) $(INSTALL_TARGETS)
- @if test -n '$(PROGRAMS)'; then \
- test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir); \
- list='$(PROGRAMS)'; for i in $$list; do \
- $(INSTALL_PROGRAM) $$i $(DESTDIR)$(sbindir); \
- done; \
- fi
-
-# to be filled in by the actual Makefile if extra commands are needed
-x-local-depend x-local-clean x-local-distclean x-local-extraclean:
-
-#
-# Implicit rules for creating outputs from input files
-#
-CXX_SUFFIX = cpp
-SHLIB_SUFFIX = so
-
-.SUFFIXES:
-.SUFFIXES: .S .c .$(CXX_SUFFIX) .lo .o .s .y .l .slo .def .la
-
-.c.o:
- $(COMPILE) -c $<
-
-.s.o:
- $(COMPILE) -c $<
-
-.c.lo:
- $(LT_COMPILE)
-
-.s.lo:
- $(LT_COMPILE)
-
-.c.slo:
- $(SH_COMPILE)
-
-.$(CXX_SUFFIX).lo:
- $(LT_CXX_COMPILE)
-
-.$(CXX_SUFFIX).slo:
- $(SH_CXX_COMPILE)
-
-.y.c:
- $(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
- if test -f y.tab.h; then \
- if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
- else :; fi
-
-.l.c:
- $(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
-
-# Makes an import library from a def file
-.def.la:
- $(LIBTOOL) --mode=compile $(MK_IMPLIB) -o $@ $<
-
-#
-# Dependencies
-#
-@ap_make_include@ @ap_make_delimiter@$(builddir)/.deps@ap_make_delimiter@
-
-.PHONY: all all-recursive install-recursive local-all $(PHONY_TARGETS) \
- shared-build shared-build-recursive local-shared-build \
- depend depend-recursive local-depend x-local-depend \
- clean clean-recursive local-clean x-local-clean \
- distclean distclean-recursive local-distclean x-local-distclean \
- extraclean extraclean-recursive local-extraclean x-local-extraclean \
- install local-install $(INSTALL_TARGETS)
-
diff --git a/build/special.mk b/build/special.mk
deleted file mode 100644
index 87a2e67bcb..0000000000
--- a/build/special.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-all: all-recursive
-
-include $(builddir)/modules.mk
-TARGETS = $(static)
-SHARED_TARGETS = $(shared)
-INSTALL_TARGETS = install-modules
-
-install-modules:
- @test -d $(DESTDIR)$(libexecdir) || $(MKINSTALLDIRS) $(DESTDIR)$(libexecdir)
- @builtin='$(BUILTIN_LIBS)'; \
- has_mod_so=`echo $$builtin|sed 's/^.*libmod_so.*$$/has_mod_so/'`; \
- if [ "x$$has_mod_so" = "xhas_mod_so" ]; then \
- list='$(shared)'; \
- for i in $$list; do \
- $(top_srcdir)/build/instdso.sh SH_LIBTOOL='$(SH_LIBTOOL)' $$i $(DESTDIR)$(libexecdir); \
- done; \
- fi
-
-include $(top_builddir)/build/rules.mk
-
diff --git a/build/sysv_makefile b/build/sysv_makefile
deleted file mode 100755
index 4d2ddae282..0000000000
--- a/build/sysv_makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-#! /bin/sh
-#
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# The build environment was provided by Sascha Schumann.
-
-# cwd must be top_srcdir
-test -f build/sysv_makefile || exit 2
-
-test -f bsd_converted || exit 1
-
-tmpfile=`mktemp /tmp/sysv_makefile.XXXXXX 2>/dev/null` || tmpfile="tmp.$$"
-for i in build/*.mk; do
- sed 's/^\.include "\(.*\)"/include \1/' $i >$tmpfile \
- && cp $tmpfile $i
-done
-rm -f $tmpfile
-
-rm bsd_converted
-exit 0
diff --git a/build/win32/.cvsignore b/build/win32/.cvsignore
deleted file mode 100644
index be37498501..0000000000
--- a/build/win32/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Apache.aps
-Apache.rc
-libhttpd.rc
-libhttpd.aps
diff --git a/build/win32/apache.ico b/build/win32/apache.ico
deleted file mode 100644
index bfb4f63ab6..0000000000
--- a/build/win32/apache.ico
+++ /dev/null
Binary files differ
diff --git a/build/win32/win32ver.awk b/build/win32/win32ver.awk
deleted file mode 100644
index 5b1bc1e3af..0000000000
--- a/build/win32/win32ver.awk
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-BEGIN {
-
- # ff bits: 1(debug), 2(prerelease), 4(patched), 8(vendor) and 32(special)
- # debug is summed based on the /Define _DEBUG
- # prerelease is based on the -dev extension,
- # patched is based on a non-standard "-ver" extension,
- # special and vendor are toggled by their args.
- #
- ff = 0;
-
- file=ARGV[1];
- desc=ARGV[2];
- rel_h=ARGV[3];
-
- i = 4;
- while (length(ARGV[i])) {
- if (match(ARGV[i], /icon=/)) {
- icon = substr(ARGV[i], 6);
- }
- if (match(ARGV[i], /vendor=/)) {
- vendor = substr(ARGV[i], 8);
- ff = ff + 8;
- }
- if (match(ARGV[i], /special=/)) {
- special = substr(ARGV[i], 9);
- ff = ff + 32;
- }
- i = i + 1
- }
-
- i = i - 1;
- while (i) {
- delete ARGV[i];
- i = i - 1;
- }
-
- while ((getline < rel_h) > 0) {
- if (match ($0, /^.*Copyright /)) {
- copyright = substr($0, RLENGTH + 1);
- }
- if (match ($0, /^#define AP_SERVER_MAJORVERSION_NUMBER [^*]/)) {
- ver_major = $3;
- }
- else if (match ($0, /^#define AP_SERVER_MINORVERSION_NUMBER [^*]/)) {
- ver_minor = $3;
- }
- else if (match ($0, /^#define AP_SERVER_PATCHLEVEL_NUMBER [^*]/)) {
- ver_patch = $3;
- }
- else if (match ($0, /^#define AP_SERVER_ADD_STRING [^"]+"/)) {
- ver_patch_modifier = substr($3, 2, length($3) - 2);
- }
- }
-
- ver = ver_major "." ver_minor "." ver_patch ver_patch_modifier;
- verc = ver_major "," ver_minor "," ver_patch;
- if (build) {
- sub(/-.*/, "", verc)
- verc = verc "," build;
- } else if (sub(/-dev/, ",0", verc)) {
- ff = ff + 2;
- } else if (!sub(/-alpha/, ",10", verc) \
- && !sub(/-beta/, ",100", verc) \
- && !sub(/-gold/, ",200", verc)) {
- sub(/-.*/, "", verc);
- verc = verc "," 0;
- }
-
- if (length(vendor)) {
- ff = ff + 8;
- }
-
- if (length(icon)) {
- print "1 ICON DISCARDABLE \"" icon "\"";
- }
- print "1 VERSIONINFO";
- print " FILEVERSION " verc "";
- print " PRODUCTVERSION " verc "";
- print " FILEFLAGSMASK 0x3fL";
- print "#if defined(_DEBUG)"
- print " FILEFLAGS 0x" sprintf("%02x", ff + 1) "L";
- print "#else"
- print " FILEFLAGS 0x" sprintf("%02x", ff) "L";
- print "#endif"
- print " FILEOS 0x40004L";
- print " FILETYPE 0x1L";
- print " FILESUBTYPE 0x0L";
- print "BEGIN";
- print " BLOCK \"StringFileInfo\"";
- print " BEGIN";
- print " BLOCK \"040904b0\"";
- print " BEGIN";
- print " VALUE \"Comments\", "\
- "\"Licensed under the Apache License, Version 2.0 (the \"\"License\"\"); "\
- "you may not use this file except in compliance with the License. "\
- "You may obtain a copy of the License at\\r\\n\\r\\n"\
- "http://www.apache.org/licenses/LICENSE-2.0\\r\\n\\r\\n"\
- "Unless required by applicable law or agreed to in writing, "\
- "software distributed under the License is distributed on an "\
- "\"\"AS IS\"\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, "\
- "either express or implied. See the License for the specific "\
- "language governing permissions and limitations under the License.\\0\"";
- print " VALUE \"CompanyName\", \"Apache Software Foundation\\0\"";
- print " VALUE \"FileDescription\", \"" desc "\\0\"";
- print " VALUE \"FileVersion\", \"" ver "\\0\"";
- print " VALUE \"InternalName\", \"" file "\\0\"";
- print " VALUE \"LegalCopyright\", \"Copyright " copyright "\\0\"";
- print " VALUE \"OriginalFilename\", \"" file "\\0\"";
- if (vendor) {
- print " VALUE \"PrivateBuild\", \"" vendor "\\0\"";
- }
- if (special) {
- print " VALUE \"SpecialBuild\", \"" vendor "\\0\"";
- }
- print " VALUE \"ProductName\", \"Apache HTTP Server\\0\"";
- print " VALUE \"ProductVersion\", \"" ver "\\0\"";
- print " END";
- print " END";
- print " BLOCK \"VarFileInfo\"";
- print " BEGIN";
- print " VALUE \"Translation\", 0x409, 1200";
- print " END";
- print "END";
-}
diff --git a/buildconf b/buildconf
deleted file mode 100755
index e68ba1f898..0000000000
--- a/buildconf
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/bin/sh
-#
-# Copyright 1999-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# buildconf: Build the support scripts needed to compile from a
-# checked-out version of the source code.
-
-# set a couple of defaults for where we should be looking for our support libs.
-# can be overridden with --with-apr=[dir] and --with-apr-util=[dir]
-
-apr_src_dir=srclib/apr
-apu_src_dir=srclib/apr-util
-
-while test $# -gt 0
-do
- # Normalize
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- case "$1" in
- --with-apr=*)
- apr_src_dir=$optarg
- ;;
- esac
-
- case "$1" in
- --with-apr-util=*)
- apu_src_dir=$optarg
- ;;
- esac
-
- shift
-done
-
-#
-# Check to be sure that we have the srclib dependencies checked-out
-#
-
-if [ ! -d "$apr_src_dir" -o ! -f "$apr_src_dir/build/apr_common.m4" ]; then
- echo ""
- echo "You don't have a copy of the apr source in $apr_src_dir. "
- echo "Please get the source using the following instructions,"
- echo "or specify the location of the source with "
- echo "--with-apr=[path to apr] :"
- echo ""
- echo " cd srclib"
- echo " cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login"
- echo " (password 'anoncvs')"
- echo " cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr"
- echo ""
- exit 1
-fi
-if [ ! -d "$apu_src_dir" -o ! -f "$apu_src_dir/Makefile.in" ]; then
- echo ""
- echo "You don't have a copy of the apr-util source in $apu_src_dir. "
- echo "Please get one the source using the following instructions, "
- echo "or specify the location of the source with "
- echo "--with-apr-util=[path to apr-util]:"
- echo ""
- echo " cd srclib"
- echo " cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login"
- echo " (password 'anoncvs')"
- echo " cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr-util"
- echo ""
- exit 1
-fi
-
-# These are temporary until Roy finishes the other build changes
-#
-touch .deps
-rm -f aclocal.m4
-rm -f generated_lists
-
-# Remove autoconf 2.5x's cache directory
-rm -rf autom4te*.cache
-
-case "`uname`" in
-*BSD/OS*)
- ./build/bsd_makefile;;
-esac
-#
-# end temporary stuff
-
-apr_configure="$apr_src_dir/configure"
-aprutil_configure="$apu_src_dir/configure"
-pcre_configure="srclib/pcre/configure"
-config_h_in="include/ap_config_auto.h.in"
-
-cross_compile_warning="warning: AC_TRY_RUN called without default to allow cross compiling"
-
-if [ -d srclib/apr ]; then
- echo rebuilding $apr_configure
- (cd srclib/apr && ./buildconf) || {
- echo "./buildconf failed for apr"
- exit 1
- }
-fi
-
-if [ -d srclib/apr-util ]; then
- echo rebuilding $aprutil_configure
- (cd srclib/apr-util && ./buildconf) || {
- echo "./buildconf failed for apr-util"
- exit 1
- }
-fi
-
-echo copying build files
-cp $apr_src_dir/build/config.guess $apr_src_dir/build/config.sub \
- $apr_src_dir/build/PrintPath $apr_src_dir/build/apr_common.m4 \
- $apr_src_dir/build/find_apr.m4 $apu_src_dir/build/find_apu.m4 build
-
-# Remove any libtool files so one can switch between libtool 1.3
-# and libtool 1.4 by simply rerunning the buildconf script.
-(cd build ; rm -f ltconfig ltmain.sh)
-
-# Optionally copy libtool-1.3.x files
-if [ -f $apr_src_dir/build/ltconfig ]; then
- cp $apr_src_dir/build/ltconfig build
-fi
-if [ -f $apr_src_dir/build/ltmain.sh ]; then
- cp $apr_src_dir/build/ltmain.sh build
-fi
-
-echo rebuilding $pcre_configure
-(cd srclib/pcre && ${AUTOCONF:-autoconf})
-
-echo rebuilding $config_h_in
-rm -f $config_h_in
-${AUTOHEADER:-autoheader} 2>&1 | grep -v "$cross_compile_warning"
-
-echo rebuilding configure
-rm -f config.cache
-${AUTOCONF:-autoconf} 2>&1 | grep -v "$cross_compile_warning"
-
-# Remove autoconf 2.5x's cache directory
-rm -rf autom4te*.cache
-
-if [ -f `which cut` ]; then
- echo rebuilding rpm spec file
- ( VMMN=`build/get-version.sh mmn include/ap_mmn.h MODULE_MAGIC_NUMBER`
- REVISION=`build/get-version.sh all include/ap_release.h AP_SERVER`
- VERSION=`echo $REVISION | cut -d- -s -f1`
- RELEASE=`echo $REVISION | cut -d- -s -f2`
- if [ "x$VERSION" = "x" ]; then
- VERSION=$REVISION
- RELEASE=1
- fi
- cat ./build/rpm/httpd.spec.in | \
- sed -e "s/APACHE_VERSION/$VERSION/" \
- -e "s/APACHE_RELEASE/$RELEASE/" \
- -e "s/APACHE_MMN/$VMMN/" \
- > httpd.spec )
-fi
-
-# ensure that the mod_ssl expression parser sources are never regenerated
-# when running make
-echo fixing timestamps for mod_ssl sources
-cd modules/ssl
-touch ssl_expr_parse.y
-sleep 1
-touch ssl_expr_parse.c ssl_expr_parse.h ssl_expr_scan.l
-sleep 1
-touch ssl_expr_scan.c
-cd ../..
-
-exit 0
diff --git a/config.layout b/config.layout
deleted file mode 100644
index 03cb8f5930..0000000000
--- a/config.layout
+++ /dev/null
@@ -1,324 +0,0 @@
-##
-## config.layout -- Pre-defined Installation Path Layouts
-##
-## Hints:
-## - layouts can be loaded with configure's --enable-layout=ID option
-## - when no --enable-layout option is given, the default layout is `Apache'
-## - a trailing plus character (`+') on paths is replaced with a
-## `/<target>' suffix where <target> is currently hardcoded to 'apache2'.
-## (This may become a configurable parameter at some point.)
-##
-
-# Classical Apache path layout.
-<Layout Apache>
- prefix: /usr/local/apache2
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/bin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/modules
- mandir: ${prefix}/man
- sysconfdir: ${prefix}/conf
- datadir: ${prefix}
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include
- localstatedir: ${prefix}
- runtimedir: ${localstatedir}/logs
- logfiledir: ${localstatedir}/logs
- proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-# GNU standards conforming path layout.
-# See FSF's GNU project `make-stds' document for details.
-<Layout GNU>
- prefix: /usr/local
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec
- mandir: ${prefix}/man
- sysconfdir: ${prefix}/etc+
- datadir: ${prefix}/share+
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include+
- localstatedir: ${prefix}/var+
- runtimedir: ${localstatedir}/run
- logfiledir: ${localstatedir}/log
- proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-# Mac OS X Server (Rhapsody)
-<Layout Mac OS X Server>
- prefix: /Local/Library/WebServer
- exec_prefix: /usr
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: /System/Library/Apache/Modules
- mandir: ${exec_prefix}/share/man
- sysconfdir: ${prefix}/Configuration
- datadir: ${prefix}
- installbuilddir: /System/Library/Apache/Build
- errordir: /System/Library/Apache/Error
- iconsdir: /System/Library/Apache/Icons
- manualdir: /System/Library/Apache/Manual
- htdocsdir: ${datadir}/Documents
- cgidir: ${datadir}/CGI-Executables
- includedir: /System/Library/Frameworks/Apache.framework/Versions/2.0/Headers
- localstatedir: /var
- runtimedir: ${prefix}/Logs
- logfiledir: ${prefix}/Logs
- proxycachedir: ${prefix}/ProxyCache
-</Layout>
-
-# Darwin/Mac OS Layout
-<Layout Darwin>
- prefix: /usr
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec+
- mandir: ${prefix}/share/man
- datadir: /Library/WebServer
- sysconfdir: /etc+
- installbuilddir: ${prefix}/share/httpd/build
- errordir: ${prefix}/share/httpd/error
- iconsdir: ${prefix}/share/httpd/icons
- htdocsdir: ${datadir}/Documents
- manualdir: ${datadir}/share/httpd/manual
- cgidir: ${datadir}/CGI-Executables
- includedir: ${prefix}/include+
- localstatedir: /var
- runtimedir: ${localstatedir}/run
- logfiledir: ${localstatedir}/log+
- proxycachedir: ${runtimedir}/proxy
-</Layout>
-
-# Red Hat Linux 7.x layout
-<Layout RedHat>
- prefix: /usr
- exec_prefix: ${prefix}
- bindir: ${prefix}/bin
- sbindir: ${prefix}/sbin
- libdir: ${prefix}/lib
- libexecdir: ${prefix}/lib/apache
- mandir: ${prefix}/man
- sysconfdir: /etc/httpd/conf
- datadir: /var/www
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/html
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include/apache
- localstatedir: /var
- runtimedir: ${localstatedir}/run
- logfiledir: ${localstatedir}/log/httpd
- proxycachedir: ${localstatedir}/cache/httpd
-</Layout>
-
-# According to the /opt filesystem conventions
-<Layout opt>
- prefix: /opt/apache
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec
- mandir: ${prefix}/man
- sysconfdir: /etc${prefix}
- datadir: ${prefix}/share
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include
- localstatedir: /var${prefix}
- runtimedir: ${localstatedir}/run
- logfiledir: ${localstatedir}/logs
- proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-# BeOS layout...
-<Layout beos>
- prefix: /boot/home/apache
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/bin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec
- mandir: ${prefix}/man
- sysconfdir: ${prefix}/conf
- datadir: ${prefix}
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include
- localstatedir: ${prefix}
- runtimedir: ${localstatedir}/logs
- logfiledir: ${localstatedir}/logs
- proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-# SuSE 6.x layout
-<Layout SuSE>
- prefix: /usr
- exec_prefix: ${prefix}
- bindir: ${prefix}/bin
- sbindir: ${prefix}/sbin
- libdir: ${prefix}/lib
- libexecdir: ${prefix}/lib/apache
- mandir: ${prefix}/share/man
- sysconfdir: /etc/httpd
- datadir: /usr/local/httpd
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include/apache
- localstatedir: /var/lib/httpd
- runtimedir: /var/run
- logfiledir: /var/log/httpd
- proxycachedir: /var/cache/httpd
-</Layout>
-
-# BSD/OS layout
-<Layout BSDI>
- prefix: /var/www
- exec_prefix: /usr/contrib
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/bin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec/apache
- mandir: ${exec_prefix}/man
- sysconfdir: ${prefix}/conf
- datadir: ${prefix}
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${exec_prefix}/include/apache
- localstatedir: /var
- runtimedir: ${localstatedir}/run
- logfiledir: ${localstatedir}/log/httpd
- proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-# Solaris 8 Layout
-<Layout Solaris>
- prefix: /usr/apache
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/bin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec
- mandir: ${exec_prefix}/man
- sysconfdir: /etc/apache
- datadir: /var/apache
- installbuilddir: ${datadir}/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${datadir}/cgi-bin
- includedir: ${exec_prefix}/include
- localstatedir: ${prefix}
- runtimedir: /var/run
- logfiledir: ${datadir}/logs
- proxycachedir: ${datadir}/proxy
-</Layout>
-
-# OpenBSD Layout
-<Layout OpenBSD>
- prefix: /var/www
- exec_prefix: /usr
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/lib/apache/modules
- mandir: ${exec_prefix}/share/man
- sysconfdir: ${prefix}/conf
- datadir: ${prefix}
- installbuilddir: ${prefix}/build
- errordir: ${prefix}/error
- iconsdir: ${prefix}/icons
- htdocsdir: ${prefix}/htdocs
- manualdir: ${datadir}/manual
- cgidir: ${prefix}/cgi-bin
- includedir: ${exec_prefix}/lib/apache/include
- localstatedir: ${prefix}
- runtimedir: ${prefix}/logs
- logfiledir: ${prefix}/logs
- proxycachedir: ${prefix}/proxy
-</Layout>
-
-# FreeBSD Layout
-<Layout FreeBSD>
- prefix: /usr/local
- exec_prefix: ${prefix}
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/libexec/apache2
- mandir: ${prefix}/man
- sysconfdir: ${prefix}/etc/apache2
- datadir: ${prefix}/www
- installbuilddir: ${prefix}/share/apache2/build
- errordir: ${datadir}/error
- iconsdir: ${datadir}/icons
- htdocsdir: ${datadir}/data
- manualdir: ${prefix}/share/doc/apache2
- cgidir: ${datadir}/cgi-bin
- includedir: ${prefix}/include/apache2
- localstatedir: /var
- runtimedir: ${localstatedir}/run
- logfiledir: ${localstatedir}/log
- proxycachedir: ${datadir}/proxy
-</Layout>
-
-# Debian layout
-<Layout Debian>
- prefix:
- exec_prefix: ${prefix}/usr
- bindir: ${exec_prefix}/bin
- sbindir: ${exec_prefix}/sbin
- libdir: ${exec_prefix}/lib
- libexecdir: ${exec_prefix}/lib/apache2/modules
- mandir: ${exec_prefix}/share/man
- sysconfdir: ${prefix}/etc/apache2
- datadir: ${exec_prefix}/share/apache2
- iconsdir: ${datadir}/icons
- htdocsdir: ${prefix}/usr/share/apache2/default-site/htdocs
- manualdir: ${htdocsdir}/manual
- cgidir: ${prefix}/usr/lib/cgi-bin
- includedir: ${exec_prefix}/include/apache2
- localstatedir: ${prefix}/var/run
- runtimedir: ${prefix}/var/run
- logfiledir: ${prefix}/var/log/apache2
- proxycachedir: ${prefix}/var/cache/apache2/proxy
- infodir: ${exec_prefix}/share/info
- installbuilddir: ${prefix}/etc/apache2/build
- errordir: ${datadir}/error
-</Layout>
diff --git a/configure.in b/configure.in
deleted file mode 100644
index 944159c7a7..0000000000
--- a/configure.in
+++ /dev/null
@@ -1,576 +0,0 @@
-dnl
-dnl Autoconf configuration for Apache httpd
-dnl
-dnl Use ./buildconf to produce a configure script
-dnl
-
-AC_PREREQ(2.13)
-AC_INIT(ABOUT_APACHE)
-
-AC_CONFIG_HEADER(include/ap_config_auto.h)
-AC_CONFIG_AUX_DIR(build)
-
-dnl #
-dnl # Include our own M4 macros along with those for APR and libtool
-dnl #
-sinclude(build/apr_common.m4)
-sinclude(build/find_apr.m4)
-sinclude(build/find_apu.m4)
-sinclude(acinclude.m4)
-
-dnl XXX we can't just use AC_PREFIX_DEFAULT because that isn't subbed in
-dnl by configure until it is too late. Is that how it should be or not?
-dnl Something seems broken here.
-AC_PREFIX_DEFAULT(/usr/local/apache2)
-
-dnl Get the layout here, so we can pass the required variables to apr
-APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir])
-
-dnl reparse the configure arguments.
-APR_PARSE_ARGUMENTS
-
-dnl export expanded and relative configure argument variables
-APACHE_EXPORT_ARGUMENTS
-
-dnl Save user-defined environment settings for later restoration
-dnl
-APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
-APR_SAVE_THE_ENVIRONMENT(CFLAGS)
-APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
-APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
-APR_SAVE_THE_ENVIRONMENT(LIBS)
-APR_SAVE_THE_ENVIRONMENT(INCLUDES)
-
-dnl Generate ./config.nice for reproducing runs of configure
-dnl
-APR_CONFIG_NICE(config.nice)
-
-nl='
-'
-dnl Check that mkdir -p works
-APR_MKDIR_P_CHECK($top_srcdir/build/mkdir.sh)
-
-dnl ## Run configure for packages Apache uses
-
-dnl shared library support for these packages doesn't currently
-dnl work on some platforms
-
-AC_CANONICAL_SYSTEM
-
-orig_prefix="$prefix"
-
-echo $ac_n "${nl}Configuring Apache Portable Runtime library ...${nl}"
-
-APR_FIND_APR("$srcdir/srclib/apr", "./srclib/apr", 1)
-
-if test "$apr_found" = "no"; then
- AC_MSG_ERROR([APR not found. Please read the documentation.])
-fi
-
-if test "$apr_found" = "reconfig"; then
- APR_SUBDIR_CONFIG(srclib/apr,
- [$apache_apr_flags --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir --datadir=$datadir --with-installbuilddir=$installbuilddir],
- [--enable-layout=*|\'--enable-layout=*])
- dnl We must be the first to build and the last to be cleaned
- AP_BUILD_SRCLIB_DIRS="apr $AP_BUILD_SRCLIB_DIRS"
- AP_CLEAN_SRCLIB_DIRS="$AP_CLEAN_SRCLIB_DIRS apr"
-fi
-
-APR_SETIFNULL(CC, `$apr_config --cc`)
-APR_SETIFNULL(CPP, `$apr_config --cpp`)
-APR_ADDTO(CFLAGS, `$apr_config --cflags`)
-APR_ADDTO(CPPFLAGS, `$apr_config --cppflags`)
-APR_ADDTO(LDFLAGS, `$apr_config --ldflags`)
-APR_ADDTO(INCLUDES, `$apr_config --includes`)
-SHLIBPATH_VAR=`$apr_config --shlib-path-var`
-APR_BINDIR=`$apr_config --bindir`
-APR_INCLUDEDIR=`$apr_config --includedir`
-APR_VERSION=`$apr_config --version`
-
-echo $ac_n "${nl}Configuring Apache Portable Runtime Utility library...${nl}"
-
-APR_FIND_APU("$srcdir/srclib/apr-util", "./srclib/apr-util", 1)
-
-if test "$apu_found" = "no"; then
- AC_MSG_ERROR([APR-util not found. Please read the documentation.])
-fi
-
-if test "$apu_found" = "reconfig"; then
- APR_SUBDIR_CONFIG(srclib/apr-util,
- [--with-apr=../apr --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir],
- [--enable-layout=*|\'--enable-layout=*])
- dnl We must be the last to build and the first to be cleaned
- AP_BUILD_SRCLIB_DIRS="$AP_BUILD_SRCLIB_DIRS apr-util"
- AP_CLEAN_SRCLIB_DIRS="apr-util $AP_CLEAN_SRCLIB_DIRS"
-fi
-
-APR_ADDTO(LDFLAGS, `$apu_config --ldflags`)
-APR_ADDTO(INCLUDES, `$apu_config --includes`)
-APU_BINDIR=`$apu_config --bindir`
-APU_INCLUDEDIR=`$apu_config --includedir`
-APU_VERSION=`$apu_config --version`
-
-dnl In case we picked up CC and CPP from APR, get that info into the
-dnl config cache so that PCRE uses it. Otherwise, CC and CPP used for
-dnl PCRE and for our config tests will be whatever PCRE determines.
-AC_PROG_CC
-AC_PROG_CPP
-
-echo $ac_n "${nl}Configuring PCRE regular expression library ...${nl}"
-
-APR_SUBDIR_CONFIG(srclib/pcre,
- [--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir])
-
-echo $ac_n "${nl}Configuring Apache httpd ...${nl}"
-
-dnl Absolute source/build directory
-abs_srcdir=`(cd $srcdir && pwd)`
-abs_builddir=`pwd`
-
-dnl If the source dir is not equal to the build dir,
-dnl then we are running in VPATH mode.
-
-APR_ADDTO(INCLUDES, [-I.])
-
-if test "$abs_builddir" != "$abs_srcdir"; then
- APR_ADDTO(INCLUDES, [-I\$(top_builddir)/include])
-fi
-
-APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_srcdir)/server/mpm/\$(MPM_SUBDIR_NAME) -I\$(top_srcdir)/modules/http -I\$(top_srcdir)/modules/filters -I\$(top_srcdir)/modules/proxy -I\$(top_srcdir)/include -I\$(top_srcdir)/modules/generators -I\$(top_srcdir)/modules/mappers])
-
-echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"
-
-case $host in
- *os2*)
- # Use a custom made libtool replacement
- echo "using aplibtool"
- LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
- SH_LIBTOOL="$LIBTOOL --shared --export-all"
- SH_LIBS="\$(ALL_LIBS)"
- CORE_IMPLIB_FILE="ApacheCoreOS2.la"
- CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
- MK_IMPLIB="emximp"
- other_targets="$other_targets os2core"
- INSTALL_PROG_FLAGS="-e .exe"
- SHLTCFLAGS=""
- LTCFLAGS=""
- ;;
- *)
- if test "x$LTFLAGS" = "x"; then
- LTFLAGS='--silent'
- fi
- my_libtool=`$apr_config --apr-libtool`
- LIBTOOL="$my_libtool \$(LTFLAGS)"
- libtoolversion=`$my_libtool --version`
- case $libtoolversion in
- *1.[[45]]*)
- SH_LIBTOOL='$(LIBTOOL)'
- SHLTCFLAGS="-prefer-pic"
- LTCFLAGS="-prefer-non-pic -static"
- ;;
- *)
- SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
- SHLTCFLAGS=""
- LTCFLAGS=""
- ;;
- esac
- ;;
-esac
-APACHE_SUBST(SHLTCFLAGS)
-APACHE_SUBST(LTCFLAGS)
-
-AP_SIG_GRACEFUL=USR1
-
-case $host in
- *-apple-aux3*)
- APR_SETVAR(APACHE_MPM, [prefork])
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- *-beos*)
- APR_SETVAR(APACHE_MPM, [beos])
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- *os2_emx*)
- APR_SETVAR(APACHE_MPM, [mpmt_os2])
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- *-linux-*)
- case `uname -r` in
- 2.0* )
- AP_SIG_GRACEFUL=WINCH
- ;;
- 2.[[2-9]]* )
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- * )
- ;;
- esac
- ;;
- *486-*-bsdi* | *-netbsd* | *-freebsd* | *-apple-darwin* | *-dec-osf* | *-qnx)
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- *-solaris2*)
- dnl This is a hack -- we should be using AC_TRY_RUN instead
- ap_platform_runtime_link_flag="-R"
- dnl solaris 8 and above don't have a thundering herd
- dnl not sure about rev's before this one.
- case `uname -r` in
- 5.[567]*)
- ;;
- * )
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- esac
- ;;
- *cygwin*)
- APR_SETVAR(APACHE_MPM, [prefork])
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
- *aix*)
- aixver=`echo $host | sed 's/^[[^0-9]]*//' | sed 's/\.//g'`
- if test $aixver -ge 4320; then
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- fi
- ;;
- *os390*)
- APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
- ;;
-esac
-
-APR_SETVAR(AP_NONBLOCK_WHEN_MULTI_LISTEN, [1])
-
-dnl
-dnl Process command line arguments. This is done early in the process so the
-dnl user can get feedback quickly in case of an error.
-dnl
-dnl ### need to move some of the arguments "up here"
-
-dnl ## Check for programs
-
-AC_PATH_PROG(RM, rm)
-AC_PATH_PROG(PKGCONFIG, pkg-config)
-AC_PROG_AWK
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_CHECK_TOOL(RANLIB, ranlib, true)
-dnl AC_PATH_PROG(PERL_PATH, perl)
-AC_CHECK_PROGS(LYNX_PATH,[lynx links elinks], [lynx])
-
-dnl various OS checks that apparently set required flags
-AC_AIX
-AC_ISC_POSIX
-AC_MINIX
-
-dnl Check for what we can generate dependency files with
-APR_CHECK_DEPEND
-
-dnl ## Check for libraries
-
-dnl ## Check for header files
-
-dnl I think these are just used all over the place, so just check for
-dnl them at the base of the tree. If some are specific to a single
-dnl directory, they should be moved (Comment #Spoon)
-
-dnl Regarding standard header files: AC_HEADER_STDC doesn't set symbols
-dnl HAVE_STRING_H, HAVE_STDLIB_H, etc., so those are checked for
-dnl explicitly so that the normal HAVE_xxx_H symbol is defined.
-
-AC_HEADER_STDC
-AC_CHECK_HEADERS( \
-string.h \
-limits.h \
-unistd.h \
-sys/socket.h \
-pwd.h \
-grp.h \
-strings.h \
-sys/prctl.h \
-sys/processor.h \
-sys/sem.h
-)
-AC_HEADER_SYS_WAIT
-
-dnl ## Check for typedefs, structures, and compiler characteristics.
-
-AC_C_CONST
-if test "$ac_cv_prog_gcc" = "yes"; then
- APR_ADDTO(NOTEST_CPPFLAGS,-DAP_HAVE_DESIGNATED_INITIALIZER)
-fi
-
-dnl ## Check for library functions
-AC_SEARCH_LIBS(sqrt, m)
-
-dnl See Comment #Spoon
-
-AC_CHECK_FUNCS( \
-getpwnam \
-getgrnam \
-initgroups \
-bindprocessor \
-prctl \
-timegm \
-)
-
-dnl ## Check for the tm_gmtoff field in struct tm to get the timezone diffs
-AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
- ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
-if test "$ac_cv_struct_tm_gmtoff" = "yes"; then
- AC_DEFINE(HAVE_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field])
-fi
-
-dnl ## Set up any appropriate OS-specific environment variables for apachectl
-
-case $host in
- *aix*)
- # for 32-bit builds, increase MAXDATA to allow lots of threads
- if test x$OBJECT_MODE != x64; then
- OS_SPECIFIC_VARS="LDR_CNTRL=\"MAXDATA=0x80000000\" ; export LDR_CNTRL ;"
- fi
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS AIXTHREAD_SCOPE=S ; export AIXTHREAD_SCOPE"
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_MUTEX_DEBUG=OFF ; export AIXTHREAD_MUTEX_DEBUG"
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_RWLOCK_DEBUG=OFF ; export AIXTHREAD_RWLOCK_DEBUG"
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_COND_DEBUG=OFF ; export AIXTHREAD_COND_DEBUG"
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; SPINLOOPTIME=1000 ; export SPINLOOPTIME"
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; YIELDLOOPTIME=8 ; export YIELDLOOPTIME"
- OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; MALLOCMULTIHEAP=considersize,heaps:8 ; export MALLOCMULTIHEAP"
- ;;
- *os390*)
- OS_SPECIFIC_VARS="export _CEE_RUNOPTS=\"STACK(,,ANY)\" ; export _EDC_ADD_ERRNO2=1"
- ;;
- *)
- OS_SPECIFIC_VARS=""
-esac
-
-AC_ARG_WITH(port,APACHE_HELP_STRING(--with-port=PORT,Port on which to listen (default is 80)),
- [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-port requires a value (the TCP port number)'); else PORT="$withval"; fi],
- [PORT=80])
-
-APR_CHECK_APR_DEFINE(APR_HAVE_IPV6)
-
-AC_ARG_ENABLE(v4-mapped,APACHE_HELP_STRING(--enable-v4-mapped,Allow IPv6 sockets to handle IPv4 connections),
-[
- v4mapped=$enableval
-],
-[
- case $host in
- *freebsd5*|*netbsd*|*openbsd*)
- v4mapped=no
- ;;
- *)
- v4mapped=yes
- ;;
-esac
-])
-
-if test $v4mapped = "yes" -a $ac_cv_define_APR_HAVE_IPV6 = "yes"; then
- AC_DEFINE(AP_ENABLE_V4_MAPPED, 1,
- [Allow IPv4 connections on IPv6 listening sockets])
-fi
-
-AC_ARG_ENABLE(exception-hook,APACHE_HELP_STRING(--enable-exception-hook,Enable fatal exception hook),
-[
- AC_DEFINE(AP_ENABLE_EXCEPTION_HOOK, 1,
- [Allow modules to run hook after a fatal exception])
-])dnl
-
-AC_ARG_ENABLE(maintainer-mode,APACHE_HELP_STRING(--enable-maintainer-mode,Turn on debugging and compile time warnings),
-[
- APR_ADDTO(CPPFLAGS, -DAP_DEBUG)
-])dnl
-
-prefix="$orig_prefix"
-APACHE_ENABLE_MODULES
-
-dnl reading config stubs
-esyscmd(./build/config-stubs .)
-
-APACHE_SUBST(progname)
-APACHE_SUBST(MPM_LIB)
-APACHE_SUBST(OS)
-APACHE_SUBST(OS_DIR)
-APACHE_SUBST(BUILTIN_LIBS)
-APACHE_SUBST(SHLIBPATH_VAR)
-APACHE_SUBST(OS_SPECIFIC_VARS)
-
-PRE_SHARED_CMDS='echo ""'
-POST_SHARED_CMDS='echo ""'
-
-dnl apache_need_shared tells us if Apache modules are being built as DSOs
-
-if test "$apache_need_shared" = "yes"; then
- if test -f $ac_aux_dir/ltconfig; then
- $SHELL $ac_aux_dir/ltconfig --output=shlibtool --disable-static --srcdir=$ac_aux_dir --cache-file=./config.cache $ac_aux_dir/ltmain.sh
- fi
- shared_build="shared-build"
-fi
-
-dnl enable_so tells us if *any* modules can be built as DSOs
-
-if test "$enable_so" = "yes"; then
- case $host in
- *-ibm-aix*)
- HTTPD_LDFLAGS="$HTTPD_LDFLAGS -Wl,-uXML_Parse -Wl,-bE:$abs_builddir/server/httpd.exp"
- SH_LDFLAGS="$SH_LDFLAGS \$(EXTRA_LDFLAGS) \$(EXTRA_LIBS)"
- UTIL_LDFLAGS="$UTIL_LDFLAGS -Wl,-uXML_Parse"
- ;;
- *beos)
- SH_LDFLAGS='$(top_builddir)/_APP_'
- PRE_SHARED_CMDS='ln -s $(top_builddir)/httpd $(top_builddir)/_APP_'
- POST_SHARED_CMDS='rm $(top_builddir)/_APP_'
- ;;
- *os390)
- HTTPD_LDFLAGS="$HTTPD_LDFLAGS --main=$abs_srcdir/server/main.o --core-dll=$abs_srcdir/apachecore.dll"
- SH_LDFLAGS="$SH_LDFLAGS --core-dll=$abs_srcdir/apachecore.dll"
- esac
-fi
-
-APACHE_SUBST(PRE_SHARED_CMDS)
-APACHE_SUBST(POST_SHARED_CMDS)
-APACHE_SUBST(shared_build)
-
-AC_ARG_WITH(program-name,
-APACHE_HELP_STRING(--with-program-name,alternate executable name),[
- progname="$withval" ], [
- progname="httpd"] )
-
-# SuExec parameters
-AC_ARG_WITH(suexec-bin,
-APACHE_HELP_STRING(--with-suexec-bin,Path to suexec binary),[
- AC_DEFINE_UNQUOTED(SUEXEC_BIN, "$withval", [Path to suexec binary] )
-] )
-
-AC_ARG_WITH(suexec-caller,
-APACHE_HELP_STRING(--with-suexec-caller,User allowed to call SuExec),[
- AC_DEFINE_UNQUOTED(AP_HTTPD_USER, "$withval", [User allowed to call SuExec] ) ] )
-
-AC_ARG_WITH(suexec-userdir,
-APACHE_HELP_STRING(--with-suexec-userdir,User subdirectory),[
- AC_DEFINE_UNQUOTED(AP_USERDIR_SUFFIX, "$withval", [User subdirectory] ) ] )
-
-AC_ARG_WITH(suexec-docroot,
-APACHE_HELP_STRING(--with-suexec-docroot,SuExec root directory),[
- AC_DEFINE_UNQUOTED(AP_DOC_ROOT, "$withval", [SuExec root directory] ) ] )
-
-AC_ARG_WITH(suexec-uidmin,
-APACHE_HELP_STRING(--with-suexec-uidmin,Minimal allowed UID),[
- AC_DEFINE_UNQUOTED(AP_UID_MIN, $withval, [Minimum allowed UID] ) ] )
-
-AC_ARG_WITH(suexec-gidmin,
-APACHE_HELP_STRING(--with-suexec-gidmin,Minimal allowed GID),[
- AC_DEFINE_UNQUOTED(AP_GID_MIN, $withval, [Minimum allowed GID] ) ] )
-
-AC_ARG_WITH(suexec-logfile,
-APACHE_HELP_STRING(--with-suexec-logfile,Set the logfile),[
- AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] )
-
-AC_ARG_WITH(suexec-safepath,
-APACHE_HELP_STRING(--with-suexec-safepath,Set the safepath),[
- AC_DEFINE_UNQUOTED(AP_SAFE_PATH, "$withval", [safe shell path for SuExec] ) ] )
-
-AC_ARG_WITH(suexec-umask,
-APACHE_HELP_STRING(--with-suexec-umask,umask for suexec'd process),[
- AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] )
-
-dnl AP_LIBS specifies the actual libraries. note we have some required libs.
-AP_LIBS="$abs_builddir/srclib/pcre/libpcre.la $AP_LIBS"
-
-dnl APR should go after the other libs, so the right symbols can be picked up
-AP_LIBS="$AP_LIBS `$apu_config --link-libtool --libs` `$apr_config --link-libtool --libs`"
-APACHE_SUBST(AP_LIBS)
-APACHE_SUBST(AP_BUILD_SRCLIB_DIRS)
-APACHE_SUBST(AP_CLEAN_SRCLIB_DIRS)
-
-AC_DEFINE(AP_USING_AUTOCONF, 1,
- [Using autoconf to configure Apache])
-
-if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then
- AC_DEFINE(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, 1,
- [This platform doesn't suffer from the thundering herd problem])
-fi
-
-if test "$AP_NONBLOCK_WHEN_MULTI_LISTEN" = "1"; then
- AC_DEFINE(AP_NONBLOCK_WHEN_MULTI_LISTEN, 1,
- [Listening sockets are non-blocking when there are more than 1])
-fi
-
-AC_DEFINE_UNQUOTED(AP_SIG_GRACEFUL, SIG$AP_SIG_GRACEFUL, [Signal used to gracefully restart])
-AC_DEFINE_UNQUOTED(AP_SIG_GRACEFUL_STRING, "SIG$AP_SIG_GRACEFUL", [Signal used to gracefully restart (as a quoted string)])
-AC_DEFINE_UNQUOTED(AP_SIG_GRACEFUL_SHORT, $AP_SIG_GRACEFUL, [Signal used to gracefully restart (without SIG prefix)])
-AP_SIG_GRACEFUL_SHORT=$AP_SIG_GRACEFUL
-AP_SIG_GRACEFUL=SIG$AP_SIG_GRACEFUL_SHORT
-AC_SUBST(AP_SIG_GRACEFUL)
-AC_SUBST(AP_SIG_GRACEFUL_STRING)
-AC_SUBST(AP_SIG_GRACEFUL_SHORT)
-
-APACHE_FAST_OUTPUT(Makefile modules/Makefile srclib/Makefile)
-APACHE_FAST_OUTPUT(os/Makefile server/Makefile)
-APACHE_FAST_OUTPUT(support/Makefile srclib/pcre/Makefile)
-
-if test -d ./test; then
- APACHE_FAST_OUTPUT(test/Makefile)
-fi
-
-dnl ## Finalize the variables
-echo $ac_n "${nl}Restore user-defined environment settings...${nl}"
-
-APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_)
-
-echo $ac_n "${nl}Construct makefiles and header files...${nl}"
-
-APACHE_GEN_CONFIG_VARS
-
-dnl ## Build modules.c
-rm -f modules.c
-echo $MODLIST | $AWK -f $srcdir/build/build-modules-c.awk > modules.c
-
-APR_EXPAND_VAR(ap_prefix, $prefix)
-AC_DEFINE_UNQUOTED(HTTPD_ROOT, "${ap_prefix}",
- [Root directory of the Apache install area])
-AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "${rel_sysconfdir}/${progname}.conf",
- [Location of the config file, relative to the Apache root directory])
-AC_DEFINE_UNQUOTED(AP_TYPES_CONFIG_FILE, "${rel_sysconfdir}/mime.types",
- [Location of the MIME types config file, relative to the Apache root directory])
-AC_DEFINE_UNQUOTED(APACHE_MPM_DIR, "$MPM_DIR",
- [Location of the source for the current MPM])
-
-perlbin=`$ac_aux_dir/PrintPath perl`
-if test "x$perlbin" = "x"; then
- perlbin="/replace/with/path/to/perl/interpreter"
-fi
-AC_SUBST(perlbin)
-
-dnl If we are running on BSD/OS, we need to use the BSD .include syntax.
-
-BSD_MAKEFILE=no
-ap_make_include=include
-ap_make_delimiter=' '
-case $host in
-*bsdi*)
- # Check whether they've installed GNU make
- if make --version > /dev/null 2>&1; then
- true
- else
- BSD_MAKEFILE=yes
- ap_make_include=.include
- ap_make_delimiter='"'
- fi
- ;;
-esac
-AC_SUBST(ap_make_include)
-AC_SUBST(ap_make_delimiter)
-
-dnl Ensure that docs/conf is created.
-test -d docs/conf||$mkdir_p docs/conf
-
-AC_OUTPUT($APACHE_OUTPUT_FILES docs/conf/httpd-std.conf docs/conf/ssl-std.conf include/ap_config_layout.h support/apxs support/apachectl support/dbmmanage support/envvars-std support/log_server_status support/logresolve.pl support/phf_abuse_log.cgi support/split-logfile build/rules.mk,[true],[
- APACHE_GEN_MAKEFILES
-])
-
diff --git a/docs/STATUS b/docs/STATUS
deleted file mode 100644
index 50dd60bb42..0000000000
--- a/docs/STATUS
+++ /dev/null
@@ -1,139 +0,0 @@
-Apache HTTP Server 2.1 Documentation Status File.
-Last modified: $Date: 2004/04/02 21:08:29 $
-
-For more information on how to contribute to the Apache Documentation
-Project, please see http://httpd.apache.org/docs-project/
-
- ------------------------------
-
-Decisions pending
-=================
-
-- Remove several out-of-place files into somewhere in the tree outside
- of the actual web site content? Erik suggests we merge the two icons
- readmes into one. Perhaps all of these go into httpd-2.0/docs/README?
- error/readme
- icons/readme
- icons/small/readme.txt
- Votes for a single top-level README reference?
- +1: wrowe, slive, nd, erikabele, kess, mads
-
-
-Things That Need Fixing
-=======================
-
-- Windows platform docs are in desperate need of rewrites/updates for 2.0.
- - Bill Rowe and Bill Stoddard are good contacts for tech questions.
- - "using apache" has been done, "compiling apache" is still open
- - hints on uninstalling apache (exit monitor, close directories,
- registry entries etc) (PR 10154)
- - FAQ: UTF-8 config and URL encoding for non-ascii characters.
- - FAQ: AcceptEx failed / virusscanner, firewall fun
-
-- New Auth system
- - Much clean-up and enhancement of aaa howto
- - Independent note on how to upgrade to new auth system
-
-- modules docs
- - mod_suexec: very little documentation
- - mod_status: updates for 2.0
- - mod_example: updates for 2.0
- - mod_rewrite: explain, when which variables are actually available
- (PR 16402)
-
-- MPM documentation
- - explain what the following command line options do
- (perhaps in the developer/debugging docs):
- -D DEBUG
- -D ONE_PROCESS
- one-process-mode == no threads, i.e. only one
- process handling the requests in a single loop?
- -D NO_DETACH (not in every MPM avail.)
- no daemon, but detached from terminal?
- -D FOREGROUND (not in every MPM avail.)
- ?
-
-- Individual docs will need some cleanup.
- - misc/custom_errordocs.html needs to be updated to
- essentially describe how the international error
- docs included in 2.0 work
- - misc/perf-tuning.html - needs major rewrite for 2.0
- - misc/rewriteguide.html - needs cleaning in 1.3 and 2.0
- - platform/ebcdic.xml - needs major rework for 2.0
-
-- API documentation
- - Ben Laurie has written some hooks documentation
- - authn provider API documentation could be useful
-
-- SSL docs need serious update and enhancement
- - compat docs are wrong
- - no basic how to setup ssl doc
- mads said he was working on this, but...
-
-- How does <Proxy> fit into sections.html?
-
-Documentation improvements
-==========================
-
-* Missing documentation for the support programs htdbm and checkgid
-
-* New user docs: Directory Handling (mod_dir/mod_autoindex/etc)
-
-* Enhancements to the DTD/XSL:
- - <glossary> tag that links to the glossary and uses some special
- style in the css.
- - New index: directives by context, including listing which directives
- are available for each AllowOverride setting.
- - New index: backout modules by type (aaa, mappers, loggers etc.)
- probably by introducing a <category> element in modulesynopsis
- - Use a tag like <var> in place of <em> for things like the
- <syntax> listing.
- - in progress
- - add letter links to glossary and quickreference,
- perhaps also a term overview (sidebar)
- - remove <pre> elements. Use <br /> and <indent> elements to get
- a similar effect.
-
-* Improving the documentation of the documentations' build system
- itself (requirements, procedures)
-
-* Improving the "security docs"
- - More content and better organisation
- - mod_dav ressources are owned by the httpd
-
-* Making site-specific enhancements easier, including a documented
- and robust way for 3P module docco to be added -- and have it
- survive a server docco upgrade
-
- - This could be something a simple and hackish as a manual/extra/
- directory (a la the 1.3 src/modules/extra/ directory) and a
- script in the support directory that scans the files there and
- updates the manual indices. (We do something like that now for
- httpd.conf file with apxs [LoadModule, etc.].)
-
-* Provide example solutions for the mapping of encodings, especially
- for .gz etc. (also in regard to our default configuration)
-
-* Several features in Apache require write-access to the filesystem.
- Examples: CacheRoot, DavLockDB, ScriptLog
- We should treat the things consistently in the docs, and perhaps
- suggest the use of directory like /usr/local/apache2/var/ that is
- httpd-writable.
-
-* Change the name 'Apache' to 'Apache HTTP Server' or 'http'.
-
-LaTeX Todo list
-==================
-
-- Dozens of other little problems with presentation, cross-referencing,
- etc.
-
-- Cleanup xsl to make it more readable. Almost everything
- that is currently in latex.xsl should probably be moved to common.xsl.
- There may be a license problem with the atbeginend.sty file, since
- latex style files rarely have explict licenses. At worst, we can
- drop this and manually adjust the relevant spacing.
-
-- Reduce the size of the pdf (both bytes and pages) in any way possible.
-
-- Translations.
diff --git a/docs/cgi-examples/printenv b/docs/cgi-examples/printenv
deleted file mode 100644
index 207074361a..0000000000
--- a/docs/cgi-examples/printenv
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/local/bin/perl
-##
-## printenv -- demo CGI program which just prints its environment
-##
-
-print "Content-type: text/plain\n\n";
-foreach $var (sort(keys(%ENV))) {
- $val = $ENV{$var};
- $val =~ s|\n|\\n|g;
- $val =~ s|"|\\"|g;
- print "${var}=\"${val}\"\n";
-}
-
diff --git a/docs/cgi-examples/test-cgi b/docs/cgi-examples/test-cgi
deleted file mode 100644
index a85631e3aa..0000000000
--- a/docs/cgi-examples/test-cgi
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-# disable filename globbing
-set -f
-
-echo Content-type: text/plain
-echo
-
-echo CGI/1.0 test script report:
-echo
-
-echo argc is $#. argv is "$*".
-echo
-
-echo SERVER_SOFTWARE = $SERVER_SOFTWARE
-echo SERVER_NAME = $SERVER_NAME
-echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
-echo SERVER_PROTOCOL = $SERVER_PROTOCOL
-echo SERVER_PORT = $SERVER_PORT
-echo REQUEST_METHOD = $REQUEST_METHOD
-echo HTTP_ACCEPT = "$HTTP_ACCEPT"
-echo PATH_INFO = "$PATH_INFO"
-echo PATH_TRANSLATED = "$PATH_TRANSLATED"
-echo SCRIPT_NAME = "$SCRIPT_NAME"
-echo QUERY_STRING = "$QUERY_STRING"
-echo REMOTE_HOST = $REMOTE_HOST
-echo REMOTE_ADDR = $REMOTE_ADDR
-echo REMOTE_USER = $REMOTE_USER
-echo AUTH_TYPE = $AUTH_TYPE
-echo CONTENT_TYPE = $CONTENT_TYPE
-echo CONTENT_LENGTH = $CONTENT_LENGTH
diff --git a/docs/conf/.cvsignore b/docs/conf/.cvsignore
deleted file mode 100644
index fe809e1048..0000000000
--- a/docs/conf/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-httpd-std.conf
-ssl-std.conf
diff --git a/docs/conf/highperformance-std.conf b/docs/conf/highperformance-std.conf
deleted file mode 100755
index a8e033c267..0000000000
--- a/docs/conf/highperformance-std.conf
+++ /dev/null
@@ -1,70 +0,0 @@
-# Ha, you're reading this config file looking for the easy way out!
-# "how do I make my apache server go really really fast??"
-# Well you could start by reading the /manual/misc/perf-tuning.html
-# page. But, we'll give you a head start.
-#
-# This config file is small, it is probably not what you'd expect on a
-# full featured internet webserver with multiple users. But it's
-# probably a good starting point for any folks interested in testing
-# performance.
-#
-# To run this config you'll need to use something like:
-# httpd -f @@ServerRoot@@/conf/highperformance.conf
-
-Listen 80
-ServerRoot @@ServerRoot@@
-DocumentRoot @@ServerRoot@@/htdocs
-
-User nobody
-# If you're not on Linux, you'll probably need to change Group
-Group nobody
-
-<IfModule prefork.c>
-MaxClients 150
-StartServers 5
-MinSpareServers 5
-MaxSpareServers 10
-</IfModule>
-
-<IfModule worker.c>
-StartServers 2
-MaxClients 150
-MinSpareThreads 25
-MaxSpareThreads 75
-ThreadsPerChild 25
-MaxRequestsPerChild 0
-</IfModule>
-
-# Assume no memory leaks at all
-MaxRequestsPerChild 0
-
-# it's always nice to know the server has started
-ErrorLog logs/error_log
-
-# Some benchmarks require logging, which is a good requirement. Uncomment
-# this if you need logging.
-#TransferLog logs/access_log
-
-<Directory />
- # The server can be made to avoid following symbolic links,
- # to make security simpler. However, this takes extra CPU time,
- # so we will just let it follow symlinks.
- Options FollowSymLinks
-
- # Don't check for .htaccess files in each directory - they slow
- # things down
- AllowOverride None
-
- # If this was a real internet server you'd probably want to
- # uncomment these:
- #order deny,allow
- #deny from all
-</Directory>
-
-# If this was a real internet server you'd probably want to uncomment this:
-#<Directory "@@ServerRoot@@/htdocs">
-# order allow,deny
-# allow from all
-#</Directory>
-
-# OK that's enough hints. Read the documentation if you want more.
diff --git a/docs/conf/httpd-std.conf.in b/docs/conf/httpd-std.conf.in
deleted file mode 100644
index 02388110c3..0000000000
--- a/docs/conf/httpd-std.conf.in
+++ /dev/null
@@ -1,1084 +0,0 @@
-#
-# Based upon the NCSA server configuration files originally by Rob McCool.
-#
-# This is the main Apache server configuration file. It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs-2.1/> for detailed information about
-# the directives.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do. They're here only as hints or reminders. If you are unsure
-# consult the online docs. You have been warned.
-#
-# The configuration directives are grouped into three basic sections:
-# 1. Directives that control the operation of the Apache server process as a
-# whole (the 'global environment').
-# 2. Directives that define the parameters of the 'main' or 'default' server,
-# which responds to requests that aren't handled by a virtual host.
-# These directives also provide default values for the settings
-# of all virtual hosts.
-# 3. Settings for virtual hosts, which allow Web requests to be sent to
-# different IP addresses or hostnames and have them handled by the
-# same Apache server process.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path. If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "@rel_logfiledir@/foo.log"
-# with ServerRoot set to "@@ServerRoot@@" will be interpreted by the
-# server as "@@ServerRoot@@/@rel_logfiledir@/foo.log".
-#
-
-### Section 1: Global Environment
-#
-# The directives in this section affect the overall operation of Apache,
-# such as the number of concurrent requests it can handle or where it
-# can find its configuration files.
-#
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# NOTE! If you intend to place this on an NFS (or otherwise network)
-# mounted filesystem then please read the LockFile documentation (available
-# at <URL:http://httpd.apache.org/docs-2.1/mod/mpm_common.html#lockfile>);
-# you will save yourself a lot of trouble.
-#
-# Do NOT add a slash at the end of the directory path.
-#
-ServerRoot "@@ServerRoot@@"
-
-#
-# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
-#
-#<IfModule !mpm_winnt.c>
-#<IfModule !mpm_netware.c>
-#LockFile @rel_logfiledir@/accept.lock
-#</IfModule>
-#</IfModule>
-
-#
-# ScoreBoardFile: File used to store internal server process information.
-# If unspecified (the default), the scoreboard will be stored in an
-# anonymous shared memory segment, and will be unavailable to third-party
-# applications.
-# If specified, ensure that no two invocations of Apache share the same
-# scoreboard file. The scoreboard file MUST BE STORED ON A LOCAL DISK.
-#
-#<IfModule !mpm_netware.c>
-#<IfModule !perchild.c>
-#ScoreBoardFile @rel_logfiledir@/apache_runtime_status
-#</IfModule>
-#</IfModule>
-
-
-#
-# PidFile: The file in which the server should record its process
-# identification number when it starts.
-#
-<IfModule !mpm_netware.c>
-PidFile @rel_runtimedir@/httpd.pid
-</IfModule>
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-##
-## Server-Pool Size Regulation (MPM specific)
-##
-
-# prefork MPM
-# StartServers: number of server processes to start
-# MinSpareServers: minimum number of server processes which are kept spare
-# MaxSpareServers: maximum number of server processes which are kept spare
-# MaxClients: maximum number of server processes allowed to start
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule prefork.c>
- StartServers 5
- MinSpareServers 5
- MaxSpareServers 10
- MaxClients 150
- MaxRequestsPerChild 0
-</IfModule>
-
-# worker MPM
-# StartServers: initial number of server processes to start
-# MaxClients: maximum number of simultaneous client connections
-# MinSpareThreads: minimum number of worker threads which are kept spare
-# MaxSpareThreads: maximum number of worker threads which are kept spare
-# ThreadsPerChild: constant number of worker threads in each server process
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule worker.c>
- StartServers 2
- MaxClients 150
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 25
- MaxRequestsPerChild 0
-</IfModule>
-
-# perchild MPM
-# NumServers: constant number of server processes
-# StartThreads: initial number of worker threads in each server process
-# MinSpareThreads: minimum number of worker threads which are kept spare
-# MaxSpareThreads: maximum number of worker threads which are kept spare
-# MaxThreadsPerChild: maximum number of worker threads in each server process
-# MaxRequestsPerChild: maximum number of connections per server process
-<IfModule perchild.c>
- NumServers 5
- StartThreads 5
- MinSpareThreads 5
- MaxSpareThreads 10
- MaxThreadsPerChild 20
- MaxRequestsPerChild 0
-</IfModule>
-
-# WinNT MPM
-# ThreadsPerChild: constant number of worker threads in the server process
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule mpm_winnt.c>
- ThreadsPerChild 250
- MaxRequestsPerChild 0
-</IfModule>
-
-# BeOS MPM
-# StartThreads: how many threads do we initially spawn?
-# MaxClients: max number of threads we can have (1 thread == 1 client)
-# MaxRequestsPerThread: maximum number of requests each thread will process
-<IfModule beos.c>
- StartThreads 10
- MaxClients 50
- MaxRequestsPerThread 10000
-</IfModule>
-
-# NetWare MPM
-# ThreadStackSize: Stack size allocated for each worker thread
-# StartThreads: Number of worker threads launched at server startup
-# MinSpareThreads: Minimum number of idle threads, to handle request spikes
-# MaxSpareThreads: Maximum number of idle threads
-# MaxThreads: Maximum number of worker threads alive at the same time
-# MaxRequestsPerChild: Maximum number of requests a thread serves. It is
-# recommended that the default value of 0 be set for this
-# directive on NetWare. This will allow the thread to
-# continue to service requests indefinitely.
-<IfModule mpm_netware.c>
- ThreadStackSize 65536
- StartThreads 250
- MinSpareThreads 25
- MaxSpareThreads 250
- MaxThreads 1000
- MaxRequestsPerChild 0
- MaxMemFree 100
-</IfModule>
-
-# OS/2 MPM
-# StartServers: Number of server processes to maintain
-# MinSpareThreads: Minimum number of idle threads per process,
-# to handle request spikes
-# MaxSpareThreads: Maximum number of idle threads per process
-# MaxRequestsPerChild: Maximum number of connections per server process
-<IfModule mpmt_os2.c>
- StartServers 2
- MinSpareThreads 5
- MaxSpareThreads 10
- MaxRequestsPerChild 0
-</IfModule>
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#Listen 12.34.56.78:80
-Listen @@Port@@
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-@@LoadModule@@
-
-#
-# ExtendedStatus controls whether Apache will generate "full" status
-# information (ExtendedStatus On) or just basic information (ExtendedStatus
-# Off) when the "server-status" handler is called. The default is Off.
-#
-#ExtendedStatus On
-
-### Section 2: 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition. These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-<IfModule !mpm_winnt.c>
-<IfModule !mpm_netware.c>
-#
-# If you wish httpd to run as a different user or group, you must run
-# httpd as root initially and it will switch.
-#
-# User/Group: The name (or #number) of the user/group to run httpd as.
-# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
-# . On HPUX you may not be able to use shared memory as nobody, and the
-# suggested workaround is to create a user www and use that user.
-# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
-# when the value of (unsigned)Group is above 60000;
-# don't use Group #-1 on these systems!
-#
-User nobody
-Group #-1
-</IfModule>
-</IfModule>
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed. This address appears on some server-generated pages, such
-# as error documents. e.g. admin@your-domain.com
-#
-ServerAdmin you@example.com
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If this is not set to valid DNS name for your host, server-generated
-# redirections will not work. See also the UseCanonicalName directive.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-# You will have to access it by its address anyway, and this will make
-# redirections work in a sensible way.
-#
-#ServerName www.example.com:80
-
-#
-# UseCanonicalName: Determines how Apache constructs self-referencing
-# URLs and the SERVER_NAME and SERVER_PORT variables.
-# When set "Off", Apache will use the Hostname and Port supplied
-# by the client. When set "On", Apache will use the value of the
-# ServerName directive.
-#
-UseCanonicalName Off
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "@exp_htdocsdir@"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories).
-#
-# First, we configure the "default" to be a very restrictive set of
-# features.
-#
-<Directory />
- Options FollowSymLinks
- AllowOverride None
- Order deny,allow
- Deny from all
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "@exp_htdocsdir@">
-
- #
- # Possible values for the Options directive are "None", "All",
- # or any combination of:
- # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
- #
- # Note that "MultiViews" must be named *explicitly* --- "Options All"
- # doesn't give it to you.
- #
- # The Options directive is both complicated and important. Please see
- # http://httpd.apache.org/docs-2.1/mod/core.html#options
- # for more information.
- #
- Options Indexes FollowSymLinks
-
- #
- # AllowOverride controls what directives may be placed in .htaccess files.
- # It can be "All", "None", or any combination of the keywords:
- # Options FileInfo AuthConfig Limit
- #
- AllowOverride None
-
- #
- # Controls who can get stuff from this server.
- #
- Order allow,deny
- Allow from all
-
-</Directory>
-
-#
-# UserDir: The name of the directory that is appended onto a user's home
-# directory if a ~user request is received. Note that you must also set
-# the default access control for these directories, as in the example below.
-#
-<IfModule mod_userdir.c>
- UserDir public_html
-</IfModule>
-
-#
-# Control access to UserDir directories. The following is an example
-# for a site where these directories are restricted to read-only.
-#
-#<Directory /home/*/public_html>
-# AllowOverride FileInfo AuthConfig Limit Indexes
-# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
-# <Limit GET POST OPTIONS PROPFIND>
-# Order allow,deny
-# Allow from all
-# </Limit>
-# <LimitExcept GET POST OPTIONS PROPFIND>
-# Order deny,allow
-# Deny from all
-# </LimitExcept>
-#</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-# The index.html.var file (a type-map) is used to deliver content-
-# negotiated documents. The MultiViews Option can be used for the
-# same purpose, but it is much slower.
-#
-<IfModule mod_dir.c>
- DirectoryIndex index.html index.html.var
-</IfModule>
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for additional configuration directives. See also the AllowOverride
-# directive.
-#
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being
-# viewed by Web clients.
-#
-<Files ~ "^\.ht">
- Order allow,deny
- Deny from all
-</Files>
-
-<IfModule mod_mime.c>
- #
- # TypesConfig describes where the mime.types file (or equivalent) is
- # to be found.
- #
- TypesConfig @rel_sysconfdir@/mime.types
-
-</IfModule>
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value. If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type. The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-<IfModule mod_mime_magic.c>
- MIMEMagicFile @rel_sysconfdir@/magic
-</IfModule>
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# EnableMMAP: Control whether memory-mapping is used to deliver
-# files (assuming that the underlying OS supports it).
-# The default is on; turn this off if you serve from NFS-mounted
-# filesystems. On some systems, turning it off (regardless of
-# filesystem) can improve performance; for details, please see
-# http://httpd.apache.org/docs-2.1/mod/core.html#enablemmap
-#
-#EnableMMAP off
-
-#
-# EnableSendfile: Control whether the sendfile kernel support is
-# used to deliver files (assuming that the OS supports it).
-# The default is on; turn this off if you serve from NFS-mounted
-# filesystems. Please see
-# http://httpd.apache.org/docs-2.1/mod/core.html#enablesendfile
-#
-#EnableSendfile off
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here. If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog @rel_logfiledir@/error_log
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-<IfModule mod_log_config.c>
- #
- # The following directives define some format nicknames for use with
- # a CustomLog directive (see below).
- #
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- LogFormat "%h %l %u %t \"%r\" %>s %b" common
- LogFormat "%{Referer}i -> %U" referer
- LogFormat "%{User-agent}i" agent
-
- # You need to enable mod_logio.c to use %I and %O
- #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
-
- #
- # The location and format of the access logfile (Common Logfile Format).
- # If you do not define any access logfiles within a <VirtualHost>
- # container, they will be logged here. Contrariwise, if you *do*
- # define per-<VirtualHost> access logfiles, transactions will be
- # logged therein and *not* in this file.
- #
- CustomLog @rel_logfiledir@/access_log common
-
- #
- # If you would like to have agent and referer logfiles, uncomment the
- # following directives.
- #
- #CustomLog @rel_logfiledir@/referer_log referer
- #CustomLog @rel_logfiledir@/agent_log agent
-
- #
- # If you prefer a single logfile with access, agent, and referer information
- # (Combined Logfile Format) you can use the following directive.
- #
- #CustomLog @rel_logfiledir@/access_log combined
-</IfModule>
-
-#
-# ServerTokens
-# This directive configures what you return as the Server HTTP response
-# Header. The default is 'Full' which sends information about the OS-Type
-# and compiled in modules.
-# Set to one of: Full | OS | Minor | Minimal | Major | Prod
-# where Full conveys the most information, and Prod the least.
-#
-ServerTokens Full
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (internal error documents, FTP directory
-# listings, mod_status and mod_info output etc., but not CGI generated
-# documents or custom error documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of: On | Off | EMail
-#
-ServerSignature On
-
-<IfModule mod_alias.c>
- #
- # Aliases: Add here as many aliases as you need (with no limit). The format is
- # Alias fakename realname
- #
- # Note that if you include a trailing / on fakename then the server will
- # require it to be present in the URL. So "/icons" isn't aliased in this
- # example, only "/icons/". If the fakename is slash-terminated, then the
- # realname must also be slash terminated, and if the fakename omits the
- # trailing slash, the realname must also omit it.
- #
- # We include the /icons/ alias for FancyIndexed directory listings. If
- # you do not use FancyIndexing, you may comment this out.
- #
- Alias /icons/ "@exp_iconsdir@/"
-
- <Directory "@exp_iconsdir@">
- Options Indexes MultiViews
- AllowOverride None
- Order allow,deny
- Allow from all
- </Directory>
-
- #
- # This should be changed to the ServerRoot/manual/. The alias provides
- # the manual, even if you choose to move your DocumentRoot. You may
- # comment this out if you do not care for the documentation.
- #
- AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "@exp_manualdir@$1"
-
- <Directory "@exp_manualdir@">
- Options Indexes
- AllowOverride None
- Order allow,deny
- Allow from all
-
- <Files *.html>
- SetHandler type-map
- </Files>
-
- SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1
- RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2
- </Directory>
-
- #
- # ScriptAlias: This controls which directories contain server scripts.
- # ScriptAliases are essentially the same as Aliases, except that
- # documents in the realname directory are treated as applications and
- # run by the server when requested rather than as documents sent to the
- # client. The same rules about trailing "/" apply to ScriptAlias
- # directives as to Alias.
- #
- ScriptAlias /cgi-bin/ "@exp_cgidir@/"
-
-</IfModule>
-
-<IfModule mod_cgid.c>
- #
- # Additional to mod_cgid.c settings, mod_cgid has Scriptsock <path>
- # for setting UNIX socket for communicating with cgid.
- #
- #Scriptsock @rel_runtimedir@/cgisock
-</IfModule>
-
-#
-# "@exp_cgidir@" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@exp_cgidir@">
- AllowOverride None
- Options None
- Order allow,deny
- Allow from all
-</Directory>
-
-#
-# Redirect allows you to tell clients about documents which used to exist in
-# your server's namespace, but do not anymore. This allows you to tell the
-# clients where to look for the relocated document.
-# Example:
-# Redirect permanent /foo http://www.example.com/bar
-
-#
-# Directives controlling the display of server-generated directory listings.
-#
-<IfModule mod_autoindex.c>
-
- #
- # IndexOptions: Controls the appearance of server-generated directory
- # listings.
- #
- IndexOptions FancyIndexing VersionSort
-
- #
- # AddIcon* directives tell the server which icon to show for different
- # files or filename extensions. These are only displayed for
- # FancyIndexed directories.
- #
- AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
-
- AddIconByType (TXT,/icons/text.gif) text/*
- AddIconByType (IMG,/icons/image2.gif) image/*
- AddIconByType (SND,/icons/sound2.gif) audio/*
- AddIconByType (VID,/icons/movie.gif) video/*
-
- AddIcon /icons/binary.gif .bin .exe
- AddIcon /icons/binhex.gif .hqx
- AddIcon /icons/tar.gif .tar
- AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
- AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
- AddIcon /icons/a.gif .ps .ai .eps
- AddIcon /icons/layout.gif .html .shtml .htm .pdf
- AddIcon /icons/text.gif .txt
- AddIcon /icons/c.gif .c
- AddIcon /icons/p.gif .pl .py
- AddIcon /icons/f.gif .for
- AddIcon /icons/dvi.gif .dvi
- AddIcon /icons/uuencoded.gif .uu
- AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
- AddIcon /icons/tex.gif .tex
- AddIcon /icons/bomb.gif core
-
- AddIcon /icons/back.gif ..
- AddIcon /icons/hand.right.gif README
- AddIcon /icons/folder.gif ^^DIRECTORY^^
- AddIcon /icons/blank.gif ^^BLANKICON^^
-
- #
- # DefaultIcon is which icon to show for files which do not have an icon
- # explicitly set.
- #
- DefaultIcon /icons/unknown.gif
-
- #
- # AddDescription allows you to place a short description after a file in
- # server-generated indexes. These are only displayed for FancyIndexed
- # directories.
- # Format: AddDescription "description" filename
- #
- #AddDescription "GZIP compressed document" .gz
- #AddDescription "tar archive" .tar
- #AddDescription "GZIP compressed tar archive" .tgz
-
- #
- # ReadmeName is the name of the README file the server will look for by
- # default, and append to directory listings.
- #
- # HeaderName is the name of a file which should be prepended to
- # directory indexes.
- ReadmeName README.html
- HeaderName HEADER.html
-
- #
- # IndexIgnore is a set of filenames which directory indexing should ignore
- # and not include in the listing. Shell-style wildcarding is permitted.
- #
- IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
-</IfModule>
-
-<IfModule mod_mime.c>
-
- #
- # AddType allows you to add to or override the MIME configuration
- # file mime.types for specific file types.
- #
- #AddType application/x-gzip .tgz
- #
- # AddEncoding allows you to have certain browsers uncompress
- # information on the fly. Note: Not all browsers support this.
- # Despite the name similarity, the following Add* directives have
- # nothing to do with the FancyIndexing customization directives above.
- #
- #AddEncoding x-compress .Z
- #AddEncoding x-gzip .gz .tgz
- #
- # If the AddEncoding directives above are commented-out, then you
- # probably should define those extensions to indicate media types:
- #
- AddType application/x-compress .Z
- AddType application/x-gzip .gz .tgz
-
- #
- # DefaultLanguage and AddLanguage allows you to specify the language of
- # a document. You can then use content negotiation to give a browser a
- # file in a language the user can understand.
- #
- # Specify a default language. This means that all data
- # going out without a specific language tag (see below) will
- # be marked with this one. You probably do NOT want to set
- # this unless you are sure it is correct for all cases.
- #
- # * It is generally better to not mark a page as
- # * being a certain language than marking it with the wrong
- # * language!
- #
- # DefaultLanguage nl
- #
- # Note 1: The suffix does not have to be the same as the language
- # keyword --- those with documents in Polish (whose net-standard
- # language code is pl) may wish to use "AddLanguage pl .po" to
- # avoid the ambiguity with the common suffix for perl scripts.
- #
- # Note 2: The example entries below illustrate that in some cases
- # the two character 'Language' abbreviation is not identical to
- # the two character 'Country' code for its country,
- # E.g. 'Danmark/dk' versus 'Danish/da'.
- #
- # Note 3: In the case of 'ltz' we violate the RFC by using a three char
- # specifier. There is 'work in progress' to fix this and get
- # the reference data for rfc1766 cleaned up.
- #
- # Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)
- # English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)
- # Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)
- # Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)
- # Norwegian (no) - Polish (pl) - Portugese (pt)
- # Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)
- # Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)
- #
- AddLanguage ca .ca
- AddLanguage cs .cz .cs
- AddLanguage da .dk
- AddLanguage de .de
- AddLanguage el .el
- AddLanguage en .en
- AddLanguage eo .eo
- AddLanguage es .es
- AddLanguage et .et
- AddLanguage fr .fr
- AddLanguage he .he
- AddLanguage hr .hr
- AddLanguage it .it
- AddLanguage ja .ja
- AddLanguage ko .ko
- AddLanguage ltz .ltz
- AddLanguage nl .nl
- AddLanguage nn .nn
- AddLanguage no .no
- AddLanguage pl .po
- AddLanguage pt .pt
- AddLanguage pt-BR .pt-br
- AddLanguage ru .ru
- AddLanguage sv .sv
- AddLanguage zh-CN .zh-cn
- AddLanguage zh-TW .zh-tw
-</IfModule>
-
-<IfModule mod_negotiation.c>
- #
- # LanguagePriority allows you to give precedence to some languages
- # in case of a tie during content negotiation.
- #
- # Just list the languages in decreasing order of preference. We have
- # more or less alphabetized them here. You probably want to change this.
- #
- LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
-
- #
- # ForceLanguagePriority allows you to serve a result page rather than
- # MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
- # [in case no accepted languages matched the available variants]
- #
- ForceLanguagePriority Prefer Fallback
-
-</IfModule>
-
-<IfModule mod_mime.c>
- #
- # Specify a default charset for all pages sent out. This is
- # always a good idea and opens the door for future internationalisation
- # of your web site, should you ever want it. Specifying it as
- # a default does little harm; as the standard dictates that a page
- # is in iso-8859-1 (latin1) unless specified otherwise i.e. you
- # are merely stating the obvious. There are also some security
- # reasons in browsers, related to javascript and URL parsing
- # which encourage you to always set a default char set.
- #
- AddDefaultCharset ISO-8859-1
-
- #
- # Commonly used filename extensions to character sets. You probably
- # want to avoid clashes with the language extensions, unless you
- # are good at carefully testing your setup after each change.
- # See http://www.iana.org/assignments/character-sets for the
- # official list of charset names and their respective RFCs.
- #
- AddCharset us-ascii .ascii .us-ascii
- AddCharset ISO-8859-1 .iso8859-1 .latin1
- AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
- AddCharset ISO-8859-3 .iso8859-3 .latin3
- AddCharset ISO-8859-4 .iso8859-4 .latin4
- AddCharset ISO-8859-5 .iso8859-5 .cyr .iso-ru
- AddCharset ISO-8859-6 .iso8859-6 .arb .arabic
- AddCharset ISO-8859-7 .iso8859-7 .grk .greek
- AddCharset ISO-8859-8 .iso8859-8 .heb .hebrew
- AddCharset ISO-8859-9 .iso8859-9 .latin5 .trk
- AddCharset ISO-8859-10 .iso8859-10 .latin6
- AddCharset ISO-8859-13 .iso8859-13
- AddCharset ISO-8859-14 .iso8859-14 .latin8
- AddCharset ISO-8859-15 .iso8859-15 .latin9
- AddCharset ISO-8859-16 .iso8859-16 .latin10
- AddCharset ISO-2022-JP .iso2022-jp .jis
- AddCharset ISO-2022-KR .iso2022-kr .kis
- AddCharset ISO-2022-CN .iso2022-cn .cis
- AddCharset Big5 .Big5 .big5 .b5
- AddCharset cn-Big5 .cn-big5
- # For russian, more than one charset is used (depends on client, mostly):
- AddCharset WINDOWS-1251 .cp-1251 .win-1251
- AddCharset CP866 .cp866
- AddCharset KOI8 .koi8
- AddCharset KOI8-E .koi8-e
- AddCharset KOI8-r .koi8-r .koi8-ru
- AddCharset KOI8-U .koi8-u
- AddCharset KOI8-ru .koi8-uk .ua
- AddCharset ISO-10646-UCS-2 .ucs2
- AddCharset ISO-10646-UCS-4 .ucs4
- AddCharset UTF-7 .utf7
- AddCharset UTF-8 .utf8
- AddCharset UTF-16 .utf16
- AddCharset UTF-16BE .utf16be
- AddCharset UTF-16LE .utf16le
- AddCharset UTF-32 .utf32
- AddCharset UTF-32BE .utf32be
- AddCharset UTF-32LE .utf32le
- AddCharset euc-cn .euc-cn
- AddCharset euc-gb .euc-gb
- AddCharset euc-jp .euc-jp
- AddCharset euc-kr .euc-kr
- #Not sure how euc-tw got in - IANA doesn't list it???
- AddCharset EUC-TW .euc-tw
- AddCharset gb2312 .gb2312 .gb
- AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2
- AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4
- AddCharset shift_jis .shift_jis .sjis
-
- #
- # AddHandler allows you to map certain file extensions to "handlers":
- # actions unrelated to filetype. These can be either built into the server
- # or added with the Action directive (see below)
- #
- # To use CGI scripts outside of ScriptAliased directories:
- # (You will also need to add "ExecCGI" to the "Options" directive.)
- #
- #AddHandler cgi-script .cgi
-
- #
- # For files that include their own HTTP headers:
- #
- #AddHandler send-as-is asis
-
- #
- # For server-parsed imagemap files:
- #
- #AddHandler imap-file map
-
- #
- # For type maps (negotiated resources):
- # (This is enabled by default to allow the Apache "It Worked" page
- # to be distributed in multiple languages.)
- #
- AddHandler type-map var
-
- #
- # Filters allow you to process content before it is sent to the client.
- #
- # To parse .shtml files for server-side includes (SSI):
- # (You will also need to add "Includes" to the "Options" directive.)
- #
- #AddType text/html .shtml
- #AddOutputFilter INCLUDES .shtml
-</IfModule>
-
-#
-# Action lets you define media types that will execute a script whenever
-# a matching file is called. This eliminates the need for repeated URL
-# pathnames for oft-used CGI file processors.
-# Format: Action media/type /cgi-script/location
-# Format: Action handler-name /cgi-script/location
-#
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# Putting this all together, we can internationalize error responses.
-#
-# We use Alias to redirect any /error/HTTP_<error>.html.var response to
-# our collection of by-error message multi-language collections. We use
-# includes to substitute the appropriate text.
-#
-# You can modify the messages' appearance without changing any of the
-# default HTTP_<error>.html.var files by adding the line:
-#
-# Alias /error/include/ "/your/include/path/"
-#
-# which allows you to create your own set of files by starting with the
-# @exp_errordir@/include/ files and copying them to /your/include/path/,
-# even on a per-VirtualHost basis. The default include files will display
-# your Apache version number and your ServerAdmin email address regardless
-# of the setting of ServerSignature.
-#
-# The internationalized error documents require mod_alias, mod_include
-# and mod_negotiation. To activate them, uncomment the following 30 lines.
-
-# Alias /error/ "@exp_errordir@/"
-#
-# <Directory "@exp_errordir@">
-# AllowOverride None
-# Options IncludesNoExec
-# AddOutputFilter Includes html
-# AddHandler type-map var
-# Order allow,deny
-# Allow from all
-# LanguagePriority en cs de es fr it nl sv pt-br ro
-# ForceLanguagePriority Prefer Fallback
-# </Directory>
-#
-# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
-# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
-# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
-# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
-# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
-# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
-# ErrorDocument 410 /error/HTTP_GONE.html.var
-# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
-# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
-# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
-# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
-# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
-# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
-# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
-# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
-# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
-
-<IfModule mod_setenvif.c>
- #
- # The following directives modify normal HTTP response behavior to
- # handle known problems with browser implementations.
- #
- BrowserMatch "Mozilla/2" nokeepalive
- BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
- BrowserMatch "RealPlayer 4\.0" force-response-1.0
- BrowserMatch "Java/1\.0" force-response-1.0
- BrowserMatch "JDK/1\.0" force-response-1.0
-
- #
- # The following directive disables redirects on non-GET requests for
- # a directory that does not include the trailing slash. This fixes a
- # problem with Microsoft WebFolders which does not appropriately handle
- # redirects for folders with DAV methods.
- # Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
- #
- BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
- BrowserMatch "^WebDrive" redirect-carefully
- BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
- BrowserMatch "^gnome-vfs/1.0" redirect-carefully
- BrowserMatch "^XML Spy" redirect-carefully
-</IfModule>
-
-<IfModule mod_status.c>
- #
- # Allow server status reports generated by mod_status,
- # with the URL of http://servername/server-status
- # Change the ".example.com" to match your domain to enable.
- #
- #<Location /server-status>
- # SetHandler server-status
- # Order deny,allow
- # Deny from all
- # Allow from .example.com
- #</Location>
-</IfModule>
-
-<IfModule mod_info.c>
- #
- # Allow remote server configuration reports, with the URL of
- # http://servername/server-info (requires that mod_info.c be loaded).
- # Change the ".example.com" to match your domain to enable.
- #
- #<Location /server-info>
- # SetHandler server-info
- # Order deny,allow
- # Deny from all
- # Allow from .example.com
- #</Location>
-</IfModule>
-
-#
-# Bring in additional module-specific configurations
-#
-<IfModule mod_ssl.c>
- Include @rel_sysconfdir@/ssl.conf
-</IfModule>
-
-
-### Section 3: Virtual Hosts
-#
-# VirtualHost: If you want to maintain multiple domains/hostnames on your
-# machine you can setup VirtualHost containers for them. Most configurations
-# use only name-based virtual hosts so the server doesn't need to worry about
-# IP addresses. This is indicated by the asterisks in the directives below.
-#
-# Please see the documentation at
-# <URL:http://httpd.apache.org/docs-2.1/vhosts/>
-# for further details before you try to setup virtual hosts.
-#
-# You may use the command line option '-S' to verify your virtual host
-# configuration.
-
-#
-# Use name-based virtual hosting.
-#
-#NameVirtualHost *:80
-
-#
-# VirtualHost example:
-# Almost any Apache directive may go into a VirtualHost container.
-# The first VirtualHost section is used for requests without a known
-# server name.
-#
-#<VirtualHost *:80>
-# ServerAdmin webmaster@dummy-host.example.com
-# DocumentRoot /www/docs/dummy-host.example.com
-# ServerName dummy-host.example.com
-# ErrorLog @rel_logfiledir@/dummy-host.example.com-error_log
-# CustomLog @rel_logfiledir@/dummy-host.example.com-access_log common
-#</VirtualHost>
diff --git a/docs/conf/httpd-win.conf b/docs/conf/httpd-win.conf
deleted file mode 100644
index 22a5809b59..0000000000
--- a/docs/conf/httpd-win.conf
+++ /dev/null
@@ -1,1013 +0,0 @@
-#
-# Based upon the NCSA server configuration files originally by Rob McCool.
-#
-# This is the main Apache server configuration file. It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs-2.1/> for detailed information about
-# the directives.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do. They're here only as hints or reminders. If you are unsure
-# consult the online docs. You have been warned.
-#
-# The configuration directives are grouped into three basic sections:
-# 1. Directives that control the operation of the Apache server process as a
-# whole (the 'global environment').
-# 2. Directives that define the parameters of the 'main' or 'default' server,
-# which responds to requests that aren't handled by a virtual host.
-# These directives also provide default values for the settings
-# of all virtual hosts.
-# 3. Settings for virtual hosts, which allow Web requests to be sent to
-# different IP addresses or hostnames and have them handled by the
-# same Apache server process.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path. If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "@@ServerRoot@@" will be interpreted by the
-# server as "@@ServerRoot@@/logs/foo.log".
-#
-# NOTE: Where filenames are specified, you must use forward slashes
-# instead of backslashes (e.g., "c:/apache" instead of "c:\apache").
-# If a drive letter is omitted, the drive on which Apache.exe is located
-# will be used by default. It is recommended that you always supply
-# an explicit drive letter in absolute paths, however, to avoid
-# confusion.
-#
-
-### Section 1: Global Environment
-#
-# The directives in this section affect the overall operation of Apache,
-# such as the number of concurrent requests it can handle or where it
-# can find its configuration files.
-#
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# NOTE! If you intend to place this on an NFS (or otherwise network)
-# mounted filesystem then please read the LockFile documentation (available
-# at <URL:http://httpd.apache.org/docs-2.1/mod/mpm_common.html#lockfile>);
-# you will save yourself a lot of trouble.
-#
-# Do NOT add a slash at the end of the directory path.
-#
-ServerRoot "@@ServerRoot@@"
-
-#
-# ScoreBoardFile: File used to store internal server process information.
-# If unspecified (the default), the scoreboard will be stored in an
-# anonymous shared memory segment, and will be unavailable to third-party
-# applications.
-# If specified, ensure that no two invocations of Apache share the same
-# scoreboard file. The scoreboard file MUST BE STORED ON A LOCAL DISK.
-#
-#ScoreBoardFile logs/apache_runtime_status
-
-#
-# PidFile: The file in which the server should record its process
-# identification number when it starts.
-#
-PidFile logs/httpd.pid
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-##
-## Server-Pool Size Regulation (MPM specific)
-##
-
-# WinNT MPM
-# ThreadsPerChild: constant number of worker threads in the server process
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule mpm_winnt.c>
-ThreadsPerChild 250
-MaxRequestsPerChild 0
-</IfModule>
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#Listen 12.34.56.78:80
-Listen @@Port@@
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-LoadModule actions_module modules/mod_actions.so
-LoadModule alias_module modules/mod_alias.so
-LoadModule asis_module modules/mod_asis.so
-LoadModule auth_basic_module modules/mod_auth_basic.so
-#LoadModule auth_digest_module modules/mod_auth_digest.so
-#LoadModule authn_anon_module modules/mod_authn_anon.so
-#LoadModule authn_dbm_module modules/mod_authn_dbm.so
-LoadModule authn_default_module modules/mod_authn_default.so
-LoadModule authn_file_module modules/mod_authn_file.so
-#LoadModule authz_dbm_module modules/mod_authz_dbm.so
-LoadModule authz_default_module modules/mod_authz_default.so
-LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
-LoadModule authz_host_module modules/mod_authz_host.so
-LoadModule authz_user_module modules/mod_authz_user.so
-LoadModule autoindex_module modules/mod_autoindex.so
-#LoadModule cern_meta_module modules/mod_cern_meta.so
-LoadModule cgi_module modules/mod_cgi.so
-#LoadModule dav_module modules/mod_dav.so
-#LoadModule dav_fs_module modules/mod_dav_fs.so
-#LoadModule deflate_module modules/mod_deflate.so
-LoadModule dir_module modules/mod_dir.so
-LoadModule env_module modules/mod_env.so
-#LoadModule expires_module modules/mod_expires.so
-#LoadModule file_cache_module modules/mod_file_cache.so
-#LoadModule headers_module modules/mod_headers.so
-LoadModule imap_module modules/mod_imap.so
-LoadModule include_module modules/mod_include.so
-#LoadModule info_module modules/mod_info.so
-LoadModule isapi_module modules/mod_isapi.so
-LoadModule log_config_module modules/mod_log_config.so
-LoadModule mime_module modules/mod_mime.so
-#LoadModule mime_magic_module modules/mod_mime_magic.so
-#LoadModule proxy_module modules/mod_proxy.so
-#LoadModule proxy_connect_module modules/mod_proxy_connect.so
-#LoadModule proxy_http_module modules/mod_proxy_http.so
-#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
-LoadModule negotiation_module modules/mod_negotiation.so
-#LoadModule rewrite_module modules/mod_rewrite.so
-LoadModule setenvif_module modules/mod_setenvif.so
-#LoadModule speling_module modules/mod_speling.so
-#LoadModule status_module modules/mod_status.so
-#LoadModule unique_id_module modules/mod_unique_id.so
-LoadModule userdir_module modules/mod_userdir.so
-#LoadModule usertrack_module modules/mod_usertrack.so
-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
-#LoadModule ssl_module modules/mod_ssl.so
-
-#
-# ExtendedStatus controls whether Apache will generate "full" status
-# information (ExtendedStatus On) or just basic information (ExtendedStatus
-# Off) when the "server-status" handler is called. The default is Off.
-#
-#ExtendedStatus On
-
-### Section 2: 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition. These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed. This address appears on some server-generated pages, such
-# as error documents. e.g. admin@your-domain.com
-#
-ServerAdmin @@ServerAdmin@@
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If this is not set to valid DNS name for your host, server-generated
-# redirections will not work. See also the UseCanonicalName directive.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-# You will have to access it by its address anyway, and this will make
-# redirections work in a sensible way.
-#
-ServerName @@ServerName@@:@@Port@@
-
-#
-# UseCanonicalName: Determines how Apache constructs self-referencing
-# URLs and the SERVER_NAME and SERVER_PORT variables.
-# When set "Off", Apache will use the Hostname and Port supplied
-# by the client. When set "On", Apache will use the value of the
-# ServerName directive.
-#
-UseCanonicalName Off
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "@@ServerRoot@@/htdocs"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories).
-#
-# First, we configure the "default" to be a very restrictive set of
-# features.
-#
-<Directory />
- Options FollowSymLinks
- AllowOverride None
- Order deny,allow
- Deny from all
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "@@ServerRoot@@/htdocs">
-
-#
-# Possible values for the Options directive are "None", "All",
-# or any combination of:
-# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
-#
-# Note that "MultiViews" must be named *explicitly* --- "Options All"
-# doesn't give it to you.
-#
-# The Options directive is both complicated and important. Please see
-# http://httpd.apache.org/docs-2.1/mod/core.html#options
-# for more information.
-#
- Options Indexes FollowSymLinks
-
-#
-# AllowOverride controls what directives may be placed in .htaccess files.
-# It can be "All", "None", or any combination of the keywords:
-# Options FileInfo AuthConfig Limit
-#
- AllowOverride None
-
-#
-# Controls who can get stuff from this server.
-#
- Order allow,deny
- Allow from all
-
-</Directory>
-
-#
-# UserDir: The name of the directory that is appended onto a user's home
-# directory if a ~user request is received. Be especially careful to use
-# proper, forward slashes here. On Windows NT, "Personal/My Website"
-# is a more appropriate choice. Note that you must also set the default
-# access control for these directories, as in the example below.
-#
-UserDir "My Documents/My Website"
-
-#
-# Control access to UserDir directories. The following is an example
-# for a site where these directories are restricted to read-only.
-#
-# You must correct the path for the root to match your system's configured
-# user directory location, e.g. "C:/WinNT/profiles/*/My Documents/My Website"
-# or whichever, as appropriate.
-#
-#<Directory "C:/Documents and Settings/*/My Documents/My Website">
-# AllowOverride FileInfo AuthConfig Limit
-# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
-# <Limit GET POST OPTIONS PROPFIND>
-# Order allow,deny
-# Allow from all
-# </Limit>
-# <LimitExcept GET POST OPTIONS PROPFIND>
-# Order deny,allow
-# Deny from all
-# </LimitExcept>
-#</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-# The index.html.var file (a type-map) is used to deliver content-
-# negotiated documents. The MultiViews Option can be used for the
-# same purpose, but it is much slower.
-#
-DirectoryIndex index.html index.html.var
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for additional configuration directives. See also the AllowOverride
-# directive.
-#
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being
-# viewed by Web clients.
-#
-<Files ~ "^\.ht">
- Order allow,deny
- Deny from all
-</Files>
-
-#
-# TypesConfig describes where the mime.types file (or equivalent) is
-# to be found.
-#
-TypesConfig conf/mime.types
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value. If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type. The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-<IfModule mod_mime_magic.c>
- MIMEMagicFile conf/magic
-</IfModule>
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# EnableMMAP: Control whether memory-mapping is used to deliver
-# files (assuming that the underlying OS supports it).
-# The default is on; turn this off if you serve from NFS-mounted
-# filesystems. On some systems, turning it off (regardless of
-# filesystem) can improve performance; for details, please see
-# http://httpd.apache.org/docs-2.1/mod/core.html#enablemmap
-#
-#EnableMMAP off
-
-#
-# EnableSendfile: Control whether the sendfile kernel support is
-# used to deliver files (assuming that the OS supports it).
-# The default is on; turn this off if you serve from NFS-mounted
-# filesystems. Please see
-# http://httpd.apache.org/docs-2.1/mod/core.html#enablesendfile
-#
-#EnableSendfile off
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here. If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog logs/error.log
-
-#
-# LogLevel: Control the number of messages logged to the error.log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-# You need to enable mod_logio.c to use %I and %O
-#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
-
-#
-# The location and format of the access logfile (Common Logfile Format).
-# If you do not define any access logfiles within a <VirtualHost>
-# container, they will be logged here. Contrariwise, if you *do*
-# define per-<VirtualHost> access logfiles, transactions will be
-# logged therein and *not* in this file.
-#
-CustomLog logs/access.log common
-
-#
-# If you would like to have agent and referer logfiles, uncomment the
-# following directives.
-#
-#CustomLog logs/referer.log referer
-#CustomLog logs/agent.log agent
-
-#
-# If you prefer a single logfile with access, agent, and referer information
-# (Combined Logfile Format) you can use the following directive.
-#
-#CustomLog logs/access.log combined
-
-#
-# ServerTokens
-# This directive configures what you return as the Server HTTP response
-# Header. The default is 'Full' which sends information about the OS-Type
-# and compiled in modules.
-# Set to one of: Full | OS | Minor | Minimal | Major | Prod
-# where Full conveys the most information, and Prod the least.
-#
-ServerTokens Full
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (internal error documents, FTP directory
-# listings, mod_status and mod_info output etc., but not CGI generated
-# documents or custom error documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of: On | Off | EMail
-#
-ServerSignature On
-
-#
-# Apache parses all CGI scripts for the shebang line by default.
-# This comment line, the first line of the script, consists of the symbols
-# pound (#) and exclamation (!) followed by the path of the program that
-# can execute this specific script. For a perl script, with perl.exe in
-# the C:\Program Files\Perl directory, the shebang line should be:
-
- #!c:/program files/perl/perl
-
-# Note you _must_not_ indent the actual shebang line, and it must be the
-# first line of the file. Of course, CGI processing must be enabled by
-# the appropriate ScriptAlias or Options ExecCGI directives for the files
-# or directory in question.
-#
-# However, Apache on Windows allows either the Unix behavior above, or can
-# use the Registry to match files by extention. The command to execute
-# a file of this type is retrieved from the registry by the same method as
-# the Windows Explorer would use to handle double-clicking on a file.
-# These script actions can be configured from the Windows Explorer View menu,
-# 'Folder Options', and reviewing the 'File Types' tab. Clicking the Edit
-# button allows you to modify the Actions, of which Apache 1.3 attempts to
-# perform the 'Open' Action, and failing that it will try the shebang line.
-# This behavior is subject to change in Apache release 2.0.
-#
-# Each mechanism has it's own specific security weaknesses, from the means
-# to run a program you didn't intend the website owner to invoke, and the
-# best method is a matter of great debate.
-#
-# To enable the this Windows specific behavior (and therefore -disable- the
-# equivilant Unix behavior), uncomment the following directive:
-#
-#ScriptInterpreterSource registry
-#
-# The directive above can be placed in individual <Directory> blocks or the
-# .htaccess file, with either the 'registry' (Windows behavior) or 'script'
-# (Unix behavior) option, and will override this server default option.
-#
-
-#
-# Aliases: Add here as many aliases as you need (with no limit). The format is
-# Alias fakename realname
-#
-# Note that if you include a trailing / on fakename then the server will
-# require it to be present in the URL. So "/icons" isn't aliased in this
-# example, only "/icons/". If the fakename is slash-terminated, then the
-# realname must also be slash terminated, and if the fakename omits the
-# trailing slash, the realname must also omit it.
-#
-# We include the /icons/ alias for FancyIndexed directory listings. If you
-# do not use FancyIndexing, you may comment this out.
-#
-Alias /icons/ "@@ServerRoot@@/icons/"
-
-<Directory "@@ServerRoot@@/icons">
- Options Indexes MultiViews
- AllowOverride None
- Order allow,deny
- Allow from all
-</Directory>
-
-#
-# This should be changed to the ServerRoot/manual/. The alias provides
-# the manual, even if you choose to move your DocumentRoot. You may comment
-# this out if you do not care for the documentation.
-#
-AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "@@ServerRoot@@/manual$1"
-
-<Directory "@@ServerRoot@@/manual">
- Options Indexes
- AllowOverride None
- Order allow,deny
- Allow from all
-
- <Files *.html>
- SetHandler type-map
- </Files>
-
- SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1
- RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2
-</Directory>
-
-#
-# ScriptAlias: This controls which directories contain server scripts.
-# ScriptAliases are essentially the same as Aliases, except that
-# documents in the realname directory are treated as applications and
-# run by the server when requested rather than as documents sent to the client.
-# The same rules about trailing "/" apply to ScriptAlias directives as to
-# Alias.
-#
-ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
-
-#
-# "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@@ServerRoot@@/cgi-bin">
- AllowOverride None
- Options None
- Order allow,deny
- Allow from all
-</Directory>
-
-#
-# Redirect allows you to tell clients about documents which used to exist in
-# your server's namespace, but do not anymore. This allows you to tell the
-# clients where to look for the relocated document.
-# Example:
-# Redirect permanent /foo http://www.example.com/bar
-
-#
-# Directives controlling the display of server-generated directory listings.
-#
-
-#
-# IndexOptions: Controls the appearance of server-generated directory
-# listings.
-#
-IndexOptions FancyIndexing VersionSort
-
-#
-# AddIcon* directives tell the server which icon to show for different
-# files or filename extensions. These are only displayed for
-# FancyIndexed directories.
-#
-AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
-
-AddIconByType (TXT,/icons/text.gif) text/*
-AddIconByType (IMG,/icons/image2.gif) image/*
-AddIconByType (SND,/icons/sound2.gif) audio/*
-AddIconByType (VID,/icons/movie.gif) video/*
-
-AddIcon /icons/binary.gif .bin .exe
-AddIcon /icons/binhex.gif .hqx
-AddIcon /icons/tar.gif .tar
-AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
-AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
-AddIcon /icons/a.gif .ps .ai .eps
-AddIcon /icons/layout.gif .html .shtml .htm .pdf
-AddIcon /icons/text.gif .txt
-AddIcon /icons/c.gif .c
-AddIcon /icons/p.gif .pl .py
-AddIcon /icons/f.gif .for
-AddIcon /icons/dvi.gif .dvi
-AddIcon /icons/uuencoded.gif .uu
-AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
-AddIcon /icons/tex.gif .tex
-AddIcon /icons/bomb.gif core
-
-AddIcon /icons/back.gif ..
-AddIcon /icons/hand.right.gif README
-AddIcon /icons/folder.gif ^^DIRECTORY^^
-AddIcon /icons/blank.gif ^^BLANKICON^^
-
-#
-# DefaultIcon is which icon to show for files which do not have an icon
-# explicitly set.
-#
-DefaultIcon /icons/unknown.gif
-
-#
-# AddDescription allows you to place a short description after a file in
-# server-generated indexes. These are only displayed for FancyIndexed
-# directories.
-# Format: AddDescription "description" filename
-#
-#AddDescription "GZIP compressed document" .gz
-#AddDescription "tar archive" .tar
-#AddDescription "GZIP compressed tar archive" .tgz
-
-#
-# ReadmeName is the name of the README file the server will look for by
-# default, and append to directory listings.
-#
-# HeaderName is the name of a file which should be prepended to
-# directory indexes.
-ReadmeName README.html
-HeaderName HEADER.html
-
-#
-# IndexIgnore is a set of filenames which directory indexing should ignore
-# and not include in the listing. Shell-style wildcarding is permitted.
-#
-IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
-
-#
-# AddType allows you to add to or override the MIME configuration
-# file mime.types for specific file types.
-#
-#AddType application/x-gzip .tgz
-#
-# AddEncoding allows you to have certain browsers uncompress
-# information on the fly. Note: Not all browsers support this.
-# Despite the name similarity, the following Add* directives have
-# nothing to do with the FancyIndexing customization directives above.
-#
-#AddEncoding x-compress .Z
-#AddEncoding x-gzip .gz .tgz
-#
-# If the AddEncoding directives above are commented-out, then you
-# probably should define those extensions to indicate media types:
-#
-AddType application/x-compress .Z
-AddType application/x-gzip .gz .tgz
-
-#
-# DefaultLanguage and AddLanguage allows you to specify the language of
-# a document. You can then use content negotiation to give a browser a
-# file in a language the user can understand.
-#
-# Specify a default language. This means that all data
-# going out without a specific language tag (see below) will
-# be marked with this one. You probably do NOT want to set
-# this unless you are sure it is correct for all cases.
-#
-# * It is generally better to not mark a page as
-# * being a certain language than marking it with the wrong
-# * language!
-#
-# DefaultLanguage nl
-#
-# Note 1: The suffix does not have to be the same as the language
-# keyword --- those with documents in Polish (whose net-standard
-# language code is pl) may wish to use "AddLanguage pl .po" to
-# avoid the ambiguity with the common suffix for perl scripts.
-#
-# Note 2: The example entries below illustrate that in some cases
-# the two character 'Language' abbreviation is not identical to
-# the two character 'Country' code for its country,
-# E.g. 'Danmark/dk' versus 'Danish/da'.
-#
-# Note 3: In the case of 'ltz' we violate the RFC by using a three char
-# specifier. There is 'work in progress' to fix this and get
-# the reference data for rfc1766 cleaned up.
-#
-# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)
-# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)
-# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)
-# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)
-# Norwegian (no) - Polish (pl) - Portugese (pt)
-# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)
-# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)
-#
-AddLanguage ca .ca
-AddLanguage cs .cz .cs
-AddLanguage da .dk
-AddLanguage de .de
-AddLanguage el .el
-AddLanguage en .en
-AddLanguage eo .eo
-AddLanguage es .es
-AddLanguage et .et
-AddLanguage fr .fr
-AddLanguage he .he
-AddLanguage hr .hr
-AddLanguage it .it
-AddLanguage ja .ja
-AddLanguage ko .ko
-AddLanguage ltz .ltz
-AddLanguage nl .nl
-AddLanguage nn .nn
-AddLanguage no .no
-AddLanguage pl .po
-AddLanguage pt .pt
-AddLanguage pt-BR .pt-br
-AddLanguage ru .ru
-AddLanguage sv .sv
-AddLanguage zh-CN .zh-cn
-AddLanguage zh-TW .zh-tw
-
-#
-# LanguagePriority allows you to give precedence to some languages
-# in case of a tie during content negotiation.
-#
-# Just list the languages in decreasing order of preference. We have
-# more or less alphabetized them here. You probably want to change this.
-#
-LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
-
-#
-# ForceLanguagePriority allows you to serve a result page rather than
-# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
-# [in case no accepted languages matched the available variants]
-#
-ForceLanguagePriority Prefer Fallback
-
-#
-# Specify a default charset for all pages sent out. This is
-# always a good idea and opens the door for future internationalisation
-# of your web site, should you ever want it. Specifying it as
-# a default does little harm; as the standard dictates that a page
-# is in iso-8859-1 (latin1) unless specified otherwise i.e. you
-# are merely stating the obvious. There are also some security
-# reasons in browsers, related to javascript and URL parsing
-# which encourage you to always set a default char set.
-#
-AddDefaultCharset ISO-8859-1
-
-#
-# Commonly used filename extensions to character sets. You probably
-# want to avoid clashes with the language extensions, unless you
-# are good at carefully testing your setup after each change.
-# See http://www.iana.org/assignments/character-sets for the
-# official list of charset names and their respective RFCs.
-#
-AddCharset ISO-8859-1 .iso8859-1 .latin1
-AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
-AddCharset ISO-8859-3 .iso8859-3 .latin3
-AddCharset ISO-8859-4 .iso8859-4 .latin4
-AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
-AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
-AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
-AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
-AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
-AddCharset ISO-2022-JP .iso2022-jp .jis
-AddCharset ISO-2022-KR .iso2022-kr .kis
-AddCharset ISO-2022-CN .iso2022-cn .cis
-AddCharset Big5 .Big5 .big5
-# For russian, more than one charset is used (depends on client, mostly):
-AddCharset WINDOWS-1251 .cp-1251 .win-1251
-AddCharset CP866 .cp866
-AddCharset KOI8-r .koi8-r .koi8-ru
-AddCharset KOI8-ru .koi8-uk .ua
-AddCharset ISO-10646-UCS-2 .ucs2
-AddCharset ISO-10646-UCS-4 .ucs4
-AddCharset UTF-8 .utf8
-
-# The set below does not map to a specific (iso) standard
-# but works on a fairly wide range of browsers. Note that
-# capitalization actually matters (it should not, but it
-# does for some browsers).
-#
-# See http://www.iana.org/assignments/character-sets
-# for a list of sorts. But browsers support few.
-#
-AddCharset GB2312 .gb2312 .gb
-AddCharset utf-7 .utf7
-AddCharset utf-8 .utf8
-AddCharset big5 .big5 .b5
-AddCharset EUC-TW .euc-tw
-AddCharset EUC-JP .euc-jp
-AddCharset EUC-KR .euc-kr
-AddCharset shift_jis .sjis
-
-#
-# AddHandler allows you to map certain file extensions to "handlers":
-# actions unrelated to filetype. These can be either built into the server
-# or added with the Action directive (see below)
-#
-# To use CGI scripts outside of ScriptAliased directories:
-# (You will also need to add "ExecCGI" to the "Options" directive.)
-#
-#AddHandler cgi-script .cgi
-
-#
-# For files that include their own HTTP headers:
-#
-#AddHandler send-as-is asis
-
-#
-# For server-parsed imagemap files:
-#
-#AddHandler imap-file map
-
-#
-# For type maps (negotiated resources):
-# (This is enabled by default to allow the Apache "It Worked" page
-# to be distributed in multiple languages.)
-#
-AddHandler type-map var
-
-#
-# Filters allow you to process content before it is sent to the client.
-#
-# To parse .shtml files for server-side includes (SSI):
-# (You will also need to add "Includes" to the "Options" directive.)
-#
-#AddType text/html .shtml
-#AddOutputFilter INCLUDES .shtml
-
-#
-# Action lets you define media types that will execute a script whenever
-# a matching file is called. This eliminates the need for repeated URL
-# pathnames for oft-used CGI file processors.
-# Format: Action media/type /cgi-script/location
-# Format: Action handler-name /cgi-script/location
-#
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# Putting this all together, we can internationalize error responses.
-#
-# We use Alias to redirect any /error/HTTP_<error>.html.var response to
-# our collection of by-error message multi-language collections. We use
-# includes to substitute the appropriate text.
-#
-# You can modify the messages' appearance without changing any of the
-# default HTTP_<error>.html.var files by adding the line:
-#
-# Alias /error/include/ "/your/include/path/"
-#
-# which allows you to create your own set of files by starting with the
-# @exp_errordir@/include/ files and copying them to /your/include/path/,
-# even on a per-VirtualHost basis. The default include files will display
-# your Apache version number and your ServerAdmin email address regardless
-# of the setting of ServerSignature.
-#
-# The internationalized error documents require mod_alias, mod_include
-# and mod_negotiation. To activate them, uncomment the following 30 lines.
-
-# Alias /error/ "@exp_errordir@/"
-#
-# <Directory "@exp_errordir@">
-# AllowOverride None
-# Options IncludesNoExec
-# AddOutputFilter Includes html
-# AddHandler type-map var
-# Order allow,deny
-# Allow from all
-# LanguagePriority en cs de es fr it nl sv pt-br ro
-# ForceLanguagePriority Prefer Fallback
-# </Directory>
-#
-# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
-# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
-# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
-# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
-# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
-# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
-# ErrorDocument 410 /error/HTTP_GONE.html.var
-# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
-# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
-# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
-# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
-# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
-# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
-# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
-# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
-# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
-
-
-
-#
-# The following directives modify normal HTTP response behavior to
-# handle known problems with browser implementations.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
-
-#
-# The following directive disables redirects on non-GET requests for
-# a directory that does not include the trailing slash. This fixes a
-# problem with Microsoft WebFolders which does not appropriately handle
-# redirects for folders with DAV methods.
-# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
-#
-BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
-BrowserMatch "^WebDrive" redirect-carefully
-BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
-BrowserMatch "^gnome-vfs/1.0" redirect-carefully
-BrowserMatch "^XML Spy" redirect-carefully
-
-#
-# Allow server status reports generated by mod_status,
-# with the URL of http://servername/server-status
-# Change the ".@@DomainName@@" to match your domain to enable.
-#
-#<Location /server-status>
-# SetHandler server-status
-# Order deny,allow
-# Deny from all
-# Allow from .@@DomainName@@
-#</Location>
-
-#
-# Allow remote server configuration reports, with the URL of
-# http://servername/server-info (requires that mod_info.c be loaded).
-# Change the ".@@DomainName@@" to match your domain to enable.
-#
-#<Location /server-info>
-# SetHandler server-info
-# Order deny,allow
-# Deny from all
-# Allow from .@@DomainName@@
-#</Location>
-
-
-#
-# Bring in additional module-specific configurations
-#
-<IfModule mod_ssl.c>
- Include conf/ssl.conf
-</IfModule>
-
-
-### Section 3: Virtual Hosts
-#
-# VirtualHost: If you want to maintain multiple domains/hostnames on your
-# machine you can setup VirtualHost containers for them. Most configurations
-# use only name-based virtual hosts so the server doesn't need to worry about
-# IP addresses. This is indicated by the asterisks in the directives below.
-#
-# Please see the documentation at
-# <URL:http://httpd.apache.org/docs-2.1/vhosts/>
-# for further details before you try to setup virtual hosts.
-#
-# You may use the command line option '-S' to verify your virtual host
-# configuration.
-
-#
-# Use name-based virtual hosting.
-#
-#NameVirtualHost *:80
-
-#
-# VirtualHost example:
-# Almost any Apache directive may go into a VirtualHost container.
-# The first VirtualHost section is used for requests without a known
-# server name.
-#
-#<VirtualHost *:80>
-# ServerAdmin webmaster@dummy-host.example.com
-# DocumentRoot /www/docs/dummy-host.example.com
-# ServerName dummy-host.example.com
-# ErrorLog logs/dummy-host.example.com-error_log
-# CustomLog logs/dummy-host.example.com-access_log common
-#</VirtualHost>
diff --git a/docs/conf/magic b/docs/conf/magic
deleted file mode 100644
index 9e3e721142..0000000000
--- a/docs/conf/magic
+++ /dev/null
@@ -1,382 +0,0 @@
-# Magic data for mod_mime_magic Apache module (originally for file(1) command)
-# The module is described in /manual/mod/mod_mime_magic.html
-#
-# The format is 4-5 columns:
-# Column #1: byte number to begin checking from, ">" indicates continuation
-# Column #2: type of data to match
-# Column #3: contents of data to match
-# Column #4: MIME type of result
-# Column #5: MIME encoding of result (optional)
-
-#------------------------------------------------------------------------------
-# Localstuff: file(1) magic for locally observed files
-# Add any locally observed files here.
-
-#------------------------------------------------------------------------------
-# end local stuff
-#------------------------------------------------------------------------------
-
-#------------------------------------------------------------------------------
-# Java
-
-0 short 0xcafe
->2 short 0xbabe application/java
-
-#------------------------------------------------------------------------------
-# audio: file(1) magic for sound formats
-#
-# from Jan Nicolai Langfeldt <janl@ifi.uio.no>,
-#
-
-# Sun/NeXT audio data
-0 string .snd
->12 belong 1 audio/basic
->12 belong 2 audio/basic
->12 belong 3 audio/basic
->12 belong 4 audio/basic
->12 belong 5 audio/basic
->12 belong 6 audio/basic
->12 belong 7 audio/basic
-
->12 belong 23 audio/x-adpcm
-
-# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
-# that uses little-endian encoding and has a different magic number
-# (0x0064732E in little-endian encoding).
-0 lelong 0x0064732E
->12 lelong 1 audio/x-dec-basic
->12 lelong 2 audio/x-dec-basic
->12 lelong 3 audio/x-dec-basic
->12 lelong 4 audio/x-dec-basic
->12 lelong 5 audio/x-dec-basic
->12 lelong 6 audio/x-dec-basic
->12 lelong 7 audio/x-dec-basic
-# compressed (G.721 ADPCM)
->12 lelong 23 audio/x-dec-adpcm
-
-# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM"
-# AIFF audio data
-8 string AIFF audio/x-aiff
-# AIFF-C audio data
-8 string AIFC audio/x-aiff
-# IFF/8SVX audio data
-8 string 8SVX audio/x-aiff
-
-# Creative Labs AUDIO stuff
-# Standard MIDI data
-0 string MThd audio/unknown
-#>9 byte >0 (format %d)
-#>11 byte >1 using %d channels
-# Creative Music (CMF) data
-0 string CTMF audio/unknown
-# SoundBlaster instrument data
-0 string SBI audio/unknown
-# Creative Labs voice data
-0 string Creative\ Voice\ File audio/unknown
-## is this next line right? it came this way...
-#>19 byte 0x1A
-#>23 byte >0 - version %d
-#>22 byte >0 \b.%d
-
-# [GRR 950115: is this also Creative Labs? Guessing that first line
-# should be string instead of unknown-endian long...]
-#0 long 0x4e54524b MultiTrack sound data
-#0 string NTRK MultiTrack sound data
-#>4 long x - version %ld
-
-# Microsoft WAVE format (*.wav)
-# [GRR 950115: probably all of the shorts and longs should be leshort/lelong]
-# Microsoft RIFF
-0 string RIFF audio/unknown
-# - WAVE format
->8 string WAVE audio/x-wav
-# MPEG audio.
-0 beshort&0xfff0 0xfff0 audio/mpeg
-# C64 SID Music files, from Linus Walleij <triad@df.lth.se>
-0 string PSID audio/prs.sid
-
-#------------------------------------------------------------------------------
-# c-lang: file(1) magic for C programs or various scripts
-#
-
-# XPM icons (Greg Roelofs, newt@uchicago.edu)
-# ideally should go into "images", but entries below would tag XPM as C source
-0 string /*\ XPM image/x-xbm 7bit
-
-# this first will upset you if you're a PL/1 shop... (are there any left?)
-# in which case rm it; ascmagic will catch real C programs
-# C or REXX program text
-0 string /* text/plain
-# C++ program text
-0 string // text/plain
-
-#------------------------------------------------------------------------------
-# compress: file(1) magic for pure-compression formats (no archives)
-#
-# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc.
-#
-# Formats for various forms of compressed data
-# Formats for "compress" proper have been moved into "compress.c",
-# because it tries to uncompress it to figure out what's inside.
-
-# standard unix compress
-0 string \037\235 application/octet-stream x-compress
-
-# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
-0 string \037\213 application/octet-stream x-gzip
-
-# According to gzip.h, this is the correct byte order for packed data.
-0 string \037\036 application/octet-stream
-#
-# This magic number is byte-order-independent.
-#
-0 short 017437 application/octet-stream
-
-# XXX - why *two* entries for "compacted data", one of which is
-# byte-order independent, and one of which is byte-order dependent?
-#
-# compacted data
-0 short 0x1fff application/octet-stream
-0 string \377\037 application/octet-stream
-# huf output
-0 short 0145405 application/octet-stream
-
-# Squeeze and Crunch...
-# These numbers were gleaned from the Unix versions of the programs to
-# handle these formats. Note that I can only uncrunch, not crunch, and
-# I didn't have a crunched file handy, so the crunch number is untested.
-# Keith Waclena <keith@cerberus.uchicago.edu>
-#0 leshort 0x76FF squeezed data (CP/M, DOS)
-#0 leshort 0x76FE crunched data (CP/M, DOS)
-
-# Freeze
-#0 string \037\237 Frozen file 2.1
-#0 string \037\236 Frozen file 1.0 (or gzip 0.5)
-
-# lzh?
-#0 string \037\240 LZH compressed data
-
-#------------------------------------------------------------------------------
-# frame: file(1) magic for FrameMaker files
-#
-# This stuff came on a FrameMaker demo tape, most of which is
-# copyright, but this file is "published" as witness the following:
-#
-0 string \<MakerFile application/x-frame
-0 string \<MIFFile application/x-frame
-0 string \<MakerDictionary application/x-frame
-0 string \<MakerScreenFon application/x-frame
-0 string \<MML application/x-frame
-0 string \<Book application/x-frame
-0 string \<Maker application/x-frame
-
-#------------------------------------------------------------------------------
-# html: file(1) magic for HTML (HyperText Markup Language) docs
-#
-# from Daniel Quinlan <quinlan@yggdrasil.com>
-# and Anna Shergold <anna@inext.co.uk>
-#
-0 string \<!DOCTYPE\ HTML text/html
-0 string \<!doctype\ html text/html
-0 string \<HEAD text/html
-0 string \<head text/html
-0 string \<TITLE text/html
-0 string \<title text/html
-0 string \<html text/html
-0 string \<HTML text/html
-0 string \<!-- text/html
-0 string \<h1 text/html
-0 string \<H1 text/html
-
-# XML eXtensible Markup Language, from Linus Walleij <triad@df.lth.se>
-0 string \<?xml text/xml
-
-#------------------------------------------------------------------------------
-# images: file(1) magic for image formats (see also "c-lang" for XPM bitmaps)
-#
-# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
-# additions by janl@ifi.uio.no as well as others. Jan also suggested
-# merging several one- and two-line files into here.
-#
-# XXX - byte order for GIF and TIFF fields?
-# [GRR: TIFF allows both byte orders; GIF is probably little-endian]
-#
-
-# [GRR: what the hell is this doing in here?]
-#0 string xbtoa btoa'd file
-
-# PBMPLUS
-# PBM file
-0 string P1 image/x-portable-bitmap 7bit
-# PGM file
-0 string P2 image/x-portable-greymap 7bit
-# PPM file
-0 string P3 image/x-portable-pixmap 7bit
-# PBM "rawbits" file
-0 string P4 image/x-portable-bitmap
-# PGM "rawbits" file
-0 string P5 image/x-portable-greymap
-# PPM "rawbits" file
-0 string P6 image/x-portable-pixmap
-
-# NIFF (Navy Interchange File Format, a modification of TIFF)
-# [GRR: this *must* go before TIFF]
-0 string IIN1 image/x-niff
-
-# TIFF and friends
-# TIFF file, big-endian
-0 string MM image/tiff
-# TIFF file, little-endian
-0 string II image/tiff
-
-# possible GIF replacements; none yet released!
-# (Greg Roelofs, newt@uchicago.edu)
-#
-# GRR 950115: this was mine ("Zip GIF"):
-# ZIF image (GIF+deflate alpha)
-0 string GIF94z image/unknown
-#
-# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better):
-# FGF image (GIF+deflate beta)
-0 string FGF95a image/unknown
-#
-# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal
-# (best; not yet implemented):
-# PBF image (deflate compression)
-0 string PBF image/unknown
-
-# GIF
-0 string GIF image/gif
-
-# JPEG images
-0 beshort 0xffd8 image/jpeg
-
-# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu)
-0 string BM image/bmp
-#>14 byte 12 (OS/2 1.x format)
-#>14 byte 64 (OS/2 2.x format)
-#>14 byte 40 (Windows 3.x format)
-#0 string IC icon
-#0 string PI pointer
-#0 string CI color icon
-#0 string CP color pointer
-#0 string BA bitmap array
-
-
-#------------------------------------------------------------------------------
-# lisp: file(1) magic for lisp programs
-#
-# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
-0 string ;; text/plain 8bit
-# Emacs 18 - this is always correct, but not very magical.
-0 string \012( application/x-elc
-# Emacs 19
-0 string ;ELC\023\000\000\000 application/x-elc
-
-#------------------------------------------------------------------------------
-# mail.news: file(1) magic for mail and news
-#
-# There are tests to ascmagic.c to cope with mail and news.
-0 string Relay-Version: message/rfc822 7bit
-0 string #!\ rnews message/rfc822 7bit
-0 string N#!\ rnews message/rfc822 7bit
-0 string Forward\ to message/rfc822 7bit
-0 string Pipe\ to message/rfc822 7bit
-0 string Return-Path: message/rfc822 7bit
-0 string Path: message/news 8bit
-0 string Xref: message/news 8bit
-0 string From: message/rfc822 7bit
-0 string Article message/news 8bit
-#------------------------------------------------------------------------------
-# msword: file(1) magic for MS Word files
-#
-# Contributor claims:
-# Reversed-engineered MS Word magic numbers
-#
-
-0 string \376\067\0\043 application/msword
-0 string \333\245-\0\0\0 application/msword
-
-# disable this one because it applies also to other
-# Office/OLE documents for which msword is not correct. See PR#2608.
-#0 string \320\317\021\340\241\261 application/msword
-
-
-
-#------------------------------------------------------------------------------
-# printer: file(1) magic for printer-formatted files
-#
-
-# PostScript
-0 string %! application/postscript
-0 string \004%! application/postscript
-
-# Acrobat
-# (due to clamen@cs.cmu.edu)
-0 string %PDF- application/pdf
-
-#------------------------------------------------------------------------------
-# sc: file(1) magic for "sc" spreadsheet
-#
-38 string Spreadsheet application/x-sc
-
-#------------------------------------------------------------------------------
-# tex: file(1) magic for TeX files
-#
-# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
-#
-# From <conklin@talisman.kaleida.com>
-
-# Although we may know the offset of certain text fields in TeX DVI
-# and font files, we can't use them reliably because they are not
-# zero terminated. [but we do anyway, christos]
-0 string \367\002 application/x-dvi
-#0 string \367\203 TeX generic font data
-#0 string \367\131 TeX packed font data
-#0 string \367\312 TeX virtual font data
-#0 string This\ is\ TeX, TeX transcript text
-#0 string This\ is\ METAFONT, METAFONT transcript text
-
-# There is no way to detect TeX Font Metric (*.tfm) files without
-# breaking them apart and reading the data. The following patterns
-# match most *.tfm files generated by METAFONT or afm2tfm.
-#2 string \000\021 TeX font metric data
-#2 string \000\022 TeX font metric data
-#>34 string >\0 (%s)
-
-# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
-#0 string \\input\ texinfo Texinfo source text
-#0 string This\ is\ Info\ file GNU Info text
-
-# correct TeX magic for Linux (and maybe more)
-# from Peter Tobias (tobias@server.et-inf.fho-emden.de)
-#
-0 leshort 0x02f7 application/x-dvi
-
-# RTF - Rich Text Format
-0 string {\\rtf application/rtf
-
-#------------------------------------------------------------------------------
-# animation: file(1) magic for animation/movie formats
-#
-# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8)
-# MPEG file
-0 string \000\000\001\263 video/mpeg
-#
-# The contributor claims:
-# I couldn't find a real magic number for these, however, this
-# -appears- to work. Note that it might catch other files, too,
-# so BE CAREFUL!
-#
-# Note that title and author appear in the two 20-byte chunks
-# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
-# 255 (hex FF)! DL format SUCKS BIG ROCKS.
-#
-# DL file version 1 , medium format (160x100, 4 images/screen)
-0 byte 1 video/unknown
-0 byte 2 video/unknown
-# Quicktime video, from Linus Walleij <triad@df.lth.se>
-# from Apple quicktime file format documentation.
-4 string moov video/quicktime
-4 string mdat video/quicktime
-
diff --git a/docs/conf/mime.types b/docs/conf/mime.types
deleted file mode 100644
index 3485692d11..0000000000
--- a/docs/conf/mime.types
+++ /dev/null
@@ -1,592 +0,0 @@
-# This is a comment. I love comments.
-
-# This file controls what Internet media types are sent to the client for
-# given file extension(s). Sending the correct media type to the client
-# is important so they know how to handle the content of the file.
-# Extra types can either be added here or by using an AddType directive
-# in your config files. For more information about Internet media types,
-# please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type
-# registry is at <http://www.iana.org/assignments/media-types/>.
-
-# MIME type Extensions
-application/activemessage
-application/andrew-inset ez
-application/applefile
-application/atom+xml atom
-application/atomicmail
-application/batch-smtp
-application/beep+xml
-application/cals-1840
-application/cnrp+xml
-application/commonground
-application/cpl+xml
-application/cybercash
-application/dca-rft
-application/dec-dx
-application/dvcs
-application/edi-consent
-application/edifact
-application/edi-x12
-application/eshop
-application/font-tdpfr
-application/http
-application/hyperstudio
-application/iges
-application/index
-application/index.cmd
-application/index.obj
-application/index.response
-application/index.vnd
-application/iotp
-application/ipp
-application/isup
-application/mac-binhex40 hqx
-application/mac-compactpro cpt
-application/macwriteii
-application/marc
-application/mathematica
-application/mathml+xml mathml
-application/msword doc
-application/news-message-id
-application/news-transmission
-application/ocsp-request
-application/ocsp-response
-application/octet-stream bin dms lha lzh exe class so dll dmg
-application/oda oda
-application/ogg ogg
-application/parityfec
-application/pdf pdf
-application/pgp-encrypted
-application/pgp-keys
-application/pgp-signature
-application/pkcs10
-application/pkcs7-mime
-application/pkcs7-signature
-application/pkix-cert
-application/pkix-crl
-application/pkixcmp
-application/postscript ai eps ps
-application/prs.alvestrand.titrax-sheet
-application/prs.cww
-application/prs.nprend
-application/prs.plucker
-application/qsig
-application/rdf+xml rdf
-application/reginfo+xml
-application/remote-printing
-application/riscos
-application/rtf
-application/sdp
-application/set-payment
-application/set-payment-initiation
-application/set-registration
-application/set-registration-initiation
-application/sgml
-application/sgml-open-catalog
-application/sieve
-application/slate
-application/smil smi smil
-application/srgs gram
-application/srgs+xml grxml
-application/timestamp-query
-application/timestamp-reply
-application/tve-trigger
-application/vemmi
-application/vnd.3gpp.pic-bw-large
-application/vnd.3gpp.pic-bw-small
-application/vnd.3gpp.pic-bw-var
-application/vnd.3gpp.sms
-application/vnd.3m.post-it-notes
-application/vnd.accpac.simply.aso
-application/vnd.accpac.simply.imp
-application/vnd.acucobol
-application/vnd.acucorp
-application/vnd.adobe.xfdf
-application/vnd.aether.imp
-application/vnd.amiga.ami
-application/vnd.anser-web-certificate-issue-initiation
-application/vnd.anser-web-funds-transfer-initiation
-application/vnd.audiograph
-application/vnd.blueice.multipass
-application/vnd.bmi
-application/vnd.businessobjects
-application/vnd.canon-cpdl
-application/vnd.canon-lips
-application/vnd.cinderella
-application/vnd.claymore
-application/vnd.commerce-battelle
-application/vnd.commonspace
-application/vnd.contact.cmsg
-application/vnd.cosmocaller
-application/vnd.criticaltools.wbs+xml
-application/vnd.ctc-posml
-application/vnd.cups-postscript
-application/vnd.cups-raster
-application/vnd.cups-raw
-application/vnd.curl
-application/vnd.cybank
-application/vnd.data-vision.rdz
-application/vnd.dna
-application/vnd.dpgraph
-application/vnd.dreamfactory
-application/vnd.dxr
-application/vnd.ecdis-update
-application/vnd.ecowin.chart
-application/vnd.ecowin.filerequest
-application/vnd.ecowin.fileupdate
-application/vnd.ecowin.series
-application/vnd.ecowin.seriesrequest
-application/vnd.ecowin.seriesupdate
-application/vnd.enliven
-application/vnd.epson.esf
-application/vnd.epson.msf
-application/vnd.epson.quickanime
-application/vnd.epson.salt
-application/vnd.epson.ssf
-application/vnd.ericsson.quickcall
-application/vnd.eudora.data
-application/vnd.fdf
-application/vnd.ffsns
-application/vnd.fints
-application/vnd.flographit
-application/vnd.framemaker
-application/vnd.fsc.weblaunch
-application/vnd.fujitsu.oasys
-application/vnd.fujitsu.oasys2
-application/vnd.fujitsu.oasys3
-application/vnd.fujitsu.oasysgp
-application/vnd.fujitsu.oasysprs
-application/vnd.fujixerox.ddd
-application/vnd.fujixerox.docuworks
-application/vnd.fujixerox.docuworks.binder
-application/vnd.fut-misnet
-application/vnd.grafeq
-application/vnd.groove-account
-application/vnd.groove-help
-application/vnd.groove-identity-message
-application/vnd.groove-injector
-application/vnd.groove-tool-message
-application/vnd.groove-tool-template
-application/vnd.groove-vcard
-application/vnd.hbci
-application/vnd.hhe.lesson-player
-application/vnd.hp-hpgl
-application/vnd.hp-hpid
-application/vnd.hp-hps
-application/vnd.hp-pcl
-application/vnd.hp-pclxl
-application/vnd.httphone
-application/vnd.hzn-3d-crossword
-application/vnd.ibm.afplinedata
-application/vnd.ibm.electronic-media
-application/vnd.ibm.minipay
-application/vnd.ibm.modcap
-application/vnd.ibm.rights-management
-application/vnd.ibm.secure-container
-application/vnd.informix-visionary
-application/vnd.intercon.formnet
-application/vnd.intertrust.digibox
-application/vnd.intertrust.nncp
-application/vnd.intu.qbo
-application/vnd.intu.qfx
-application/vnd.irepository.package+xml
-application/vnd.is-xpr
-application/vnd.japannet-directory-service
-application/vnd.japannet-jpnstore-wakeup
-application/vnd.japannet-payment-wakeup
-application/vnd.japannet-registration
-application/vnd.japannet-registration-wakeup
-application/vnd.japannet-setstore-wakeup
-application/vnd.japannet-verification
-application/vnd.japannet-verification-wakeup
-application/vnd.jisp
-application/vnd.kde.karbon
-application/vnd.kde.kchart
-application/vnd.kde.kformula
-application/vnd.kde.kivio
-application/vnd.kde.kontour
-application/vnd.kde.kpresenter
-application/vnd.kde.kspread
-application/vnd.kde.kword
-application/vnd.kenameaapp
-application/vnd.koan
-application/vnd.liberty-request+xml
-application/vnd.llamagraphics.life-balance.desktop
-application/vnd.llamagraphics.life-balance.exchange+xml
-application/vnd.lotus-1-2-3
-application/vnd.lotus-approach
-application/vnd.lotus-freelance
-application/vnd.lotus-notes
-application/vnd.lotus-organizer
-application/vnd.lotus-screencam
-application/vnd.lotus-wordpro
-application/vnd.mcd
-application/vnd.mediastation.cdkey
-application/vnd.meridian-slingshot
-application/vnd.micrografx.flo
-application/vnd.micrografx.igx
-application/vnd.mif mif
-application/vnd.minisoft-hp3000-save
-application/vnd.mitsubishi.misty-guard.trustweb
-application/vnd.mobius.daf
-application/vnd.mobius.dis
-application/vnd.mobius.mbk
-application/vnd.mobius.mqy
-application/vnd.mobius.msl
-application/vnd.mobius.plc
-application/vnd.mobius.txf
-application/vnd.mophun.application
-application/vnd.mophun.certificate
-application/vnd.motorola.flexsuite
-application/vnd.motorola.flexsuite.adsi
-application/vnd.motorola.flexsuite.fis
-application/vnd.motorola.flexsuite.gotap
-application/vnd.motorola.flexsuite.kmr
-application/vnd.motorola.flexsuite.ttc
-application/vnd.motorola.flexsuite.wem
-application/vnd.mozilla.xul+xml xul
-application/vnd.ms-artgalry
-application/vnd.ms-asf
-application/vnd.ms-excel xls
-application/vnd.ms-lrm
-application/vnd.ms-powerpoint ppt
-application/vnd.ms-project
-application/vnd.ms-tnef
-application/vnd.ms-works
-application/vnd.ms-wpl
-application/vnd.mseq
-application/vnd.msign
-application/vnd.music-niff
-application/vnd.musician
-application/vnd.netfpx
-application/vnd.noblenet-directory
-application/vnd.noblenet-sealer
-application/vnd.noblenet-web
-application/vnd.novadigm.edm
-application/vnd.novadigm.edx
-application/vnd.novadigm.ext
-application/vnd.obn
-application/vnd.osa.netdeploy
-application/vnd.palm
-application/vnd.pg.format
-application/vnd.pg.osasli
-application/vnd.powerbuilder6
-application/vnd.powerbuilder6-s
-application/vnd.powerbuilder7
-application/vnd.powerbuilder7-s
-application/vnd.powerbuilder75
-application/vnd.powerbuilder75-s
-application/vnd.previewsystems.box
-application/vnd.publishare-delta-tree
-application/vnd.pvi.ptid1
-application/vnd.pwg-multiplexed
-application/vnd.pwg-xhtml-print+xml
-application/vnd.quark.quarkxpress
-application/vnd.rapid
-application/vnd.s3sms
-application/vnd.sealed.net
-application/vnd.seemail
-application/vnd.shana.informed.formdata
-application/vnd.shana.informed.formtemplate
-application/vnd.shana.informed.interchange
-application/vnd.shana.informed.package
-application/vnd.smaf
-application/vnd.sss-cod
-application/vnd.sss-dtf
-application/vnd.sss-ntf
-application/vnd.street-stream
-application/vnd.svd
-application/vnd.swiftview-ics
-application/vnd.triscape.mxs
-application/vnd.trueapp
-application/vnd.truedoc
-application/vnd.ufdl
-application/vnd.uplanet.alert
-application/vnd.uplanet.alert-wbxml
-application/vnd.uplanet.bearer-choice
-application/vnd.uplanet.bearer-choice-wbxml
-application/vnd.uplanet.cacheop
-application/vnd.uplanet.cacheop-wbxml
-application/vnd.uplanet.channel
-application/vnd.uplanet.channel-wbxml
-application/vnd.uplanet.list
-application/vnd.uplanet.list-wbxml
-application/vnd.uplanet.listcmd
-application/vnd.uplanet.listcmd-wbxml
-application/vnd.uplanet.signal
-application/vnd.vcx
-application/vnd.vectorworks
-application/vnd.vidsoft.vidconference
-application/vnd.visio
-application/vnd.visionary
-application/vnd.vividence.scriptfile
-application/vnd.vsf
-application/vnd.wap.sic
-application/vnd.wap.slc
-application/vnd.wap.wbxml wbxml
-application/vnd.wap.wmlc wmlc
-application/vnd.wap.wmlscriptc wmlsc
-application/vnd.webturbo
-application/vnd.wrq-hp3000-labelled
-application/vnd.wt.stf
-application/vnd.wv.csp+wbxml
-application/vnd.xara
-application/vnd.xfdl
-application/vnd.yamaha.hv-dic
-application/vnd.yamaha.hv-script
-application/vnd.yamaha.hv-voice
-application/vnd.yellowriver-custom-menu
-application/voicexml+xml vxml
-application/watcherinfo+xml
-application/whoispp-query
-application/whoispp-response
-application/wita
-application/wordperfect5.1
-application/x-bcpio bcpio
-application/x-cdlink vcd
-application/x-chess-pgn pgn
-application/x-compress
-application/x-cpio cpio
-application/x-csh csh
-application/x-director dcr dir dxr
-application/x-dvi dvi
-application/x-futuresplash spl
-application/x-gtar gtar
-application/x-gzip
-application/x-hdf hdf
-application/x-javascript js
-application/x-koan skp skd skt skm
-application/x-latex latex
-application/x-netcdf nc cdf
-application/x-sh sh
-application/x-shar shar
-application/x-shockwave-flash swf
-application/x-stuffit sit
-application/x-sv4cpio sv4cpio
-application/x-sv4crc sv4crc
-application/x-tar tar
-application/x-tcl tcl
-application/x-tex tex
-application/x-texinfo texinfo texi
-application/x-troff t tr roff
-application/x-troff-man man
-application/x-troff-me me
-application/x-troff-ms ms
-application/x-ustar ustar
-application/x-wais-source src
-application/x400-bp
-application/xhtml+xml xhtml xht
-application/xslt+xml xslt
-application/xml xml xsl
-application/xml-dtd dtd
-application/xml-external-parsed-entity
-application/zip zip
-audio/32kadpcm
-audio/amr
-audio/amr-wb
-audio/basic au snd
-audio/cn
-audio/dat12
-audio/dsr-es201108
-audio/dvi4
-audio/evrc
-audio/evrc0
-audio/g722
-audio/g.722.1
-audio/g723
-audio/g726-16
-audio/g726-24
-audio/g726-32
-audio/g726-40
-audio/g728
-audio/g729
-audio/g729D
-audio/g729E
-audio/gsm
-audio/gsm-efr
-audio/l8
-audio/l16
-audio/l20
-audio/l24
-audio/lpc
-audio/midi mid midi kar
-audio/mpa
-audio/mpa-robust
-audio/mp4a-latm
-audio/mpeg mpga mp2 mp3
-audio/parityfec
-audio/pcma
-audio/pcmu
-audio/prs.sid
-audio/qcelp
-audio/red
-audio/smv
-audio/smv0
-audio/telephone-event
-audio/tone
-audio/vdvi
-audio/vnd.3gpp.iufp
-audio/vnd.cisco.nse
-audio/vnd.cns.anp1
-audio/vnd.cns.inf1
-audio/vnd.digital-winds
-audio/vnd.everad.plj
-audio/vnd.lucent.voice
-audio/vnd.nortel.vbk
-audio/vnd.nuera.ecelp4800
-audio/vnd.nuera.ecelp7470
-audio/vnd.nuera.ecelp9600
-audio/vnd.octel.sbc
-audio/vnd.qcelp
-audio/vnd.rhetorex.32kadpcm
-audio/vnd.vmx.cvsd
-audio/x-aiff aif aiff aifc
-audio/x-alaw-basic
-audio/x-mpegurl m3u
-audio/x-pn-realaudio ram ra
-audio/x-pn-realaudio-plugin
-application/vnd.rn-realmedia rm
-audio/x-wav wav
-chemical/x-pdb pdb
-chemical/x-xyz xyz
-image/bmp bmp
-image/cgm cgm
-image/g3fax
-image/gif gif
-image/ief ief
-image/jpeg jpeg jpg jpe
-image/naplps
-image/png png
-image/prs.btif
-image/prs.pti
-image/svg+xml svg
-image/t38
-image/tiff tiff tif
-image/tiff-fx
-image/vnd.cns.inf2
-image/vnd.djvu djvu djv
-image/vnd.dwg
-image/vnd.dxf
-image/vnd.fastbidsheet
-image/vnd.fpx
-image/vnd.fst
-image/vnd.fujixerox.edmics-mmr
-image/vnd.fujixerox.edmics-rlc
-image/vnd.globalgraphics.pgb
-image/vnd.mix
-image/vnd.ms-modi
-image/vnd.net-fpx
-image/vnd.svf
-image/vnd.wap.wbmp wbmp
-image/vnd.xiff
-image/x-cmu-raster ras
-image/x-icon ico
-image/x-portable-anymap pnm
-image/x-portable-bitmap pbm
-image/x-portable-graymap pgm
-image/x-portable-pixmap ppm
-image/x-rgb rgb
-image/x-xbitmap xbm
-image/x-xpixmap xpm
-image/x-xwindowdump xwd
-message/delivery-status
-message/disposition-notification
-message/external-body
-message/http
-message/news
-message/partial
-message/rfc822
-message/s-http
-message/sip
-message/sipfrag
-model/iges igs iges
-model/mesh msh mesh silo
-model/vnd.dwf
-model/vnd.flatland.3dml
-model/vnd.gdl
-model/vnd.gs-gdl
-model/vnd.gtw
-model/vnd.mts
-model/vnd.parasolid.transmit.binary
-model/vnd.parasolid.transmit.text
-model/vnd.vtu
-model/vrml wrl vrml
-multipart/alternative
-multipart/appledouble
-multipart/byteranges
-multipart/digest
-multipart/encrypted
-multipart/form-data
-multipart/header-set
-multipart/mixed
-multipart/parallel
-multipart/related
-multipart/report
-multipart/signed
-multipart/voice-message
-text/calendar ics ifb
-text/css css
-text/directory
-text/enriched
-text/html html htm
-text/parityfec
-text/plain asc txt
-text/prs.lines.tag
-text/rfc822-headers
-text/richtext rtx
-text/rtf rtf
-text/sgml sgml sgm
-text/t140
-text/tab-separated-values tsv
-text/uri-list
-text/vnd.abc
-text/vnd.curl
-text/vnd.dmclientscript
-text/vnd.fly
-text/vnd.fmi.flexstor
-text/vnd.in3d.3dml
-text/vnd.in3d.spot
-text/vnd.iptc.nitf
-text/vnd.iptc.newsml
-text/vnd.latex-z
-text/vnd.motorola.reflex
-text/vnd.ms-mediapackage
-text/vnd.net2phone.commcenter.command
-text/vnd.sun.j2me.app-descriptor
-text/vnd.wap.si
-text/vnd.wap.sl
-text/vnd.wap.wml wml
-text/vnd.wap.wmlscript wmls
-text/x-setext etx
-text/xml
-text/xml-external-parsed-entity
-video/bmpeg
-video/bt656
-video/celb
-video/dv
-video/h261
-video/h263
-video/h263-1998
-video/h263-2000
-video/jpeg
-video/mp1s
-video/mp2p
-video/mp2t
-video/mp4v-es
-video/mpv
-video/mpeg mpeg mpg mpe
-video/nv
-video/parityfec
-video/pointer
-video/quicktime qt mov
-video/smpte292m
-video/vnd.fvt
-video/vnd.motorola.video
-video/vnd.motorola.videop
-video/vnd.mpegurl mxu m4u
-video/vnd.nokia.interleaved-multimedia
-video/vnd.objectvideo
-video/vnd.vivo
-video/x-msvideo avi
-video/x-sgi-movie movie
-x-conference/x-cooltalk ice
diff --git a/docs/conf/ssl-std.conf.in b/docs/conf/ssl-std.conf.in
deleted file mode 100644
index 4c6629932c..0000000000
--- a/docs/conf/ssl-std.conf.in
+++ /dev/null
@@ -1,242 +0,0 @@
-#
-# This is the Apache server configuration file providing SSL support.
-# It contains the configuration directives to instruct the server how to
-# serve pages over an https connection. For detailing information about these
-# directives see <URL:http://httpd.apache.org/docs-2.1/mod/mod_ssl.html>
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do. They're here only as hints or reminders. If you are unsure
-# consult the online docs. You have been warned.
-#
-
-#
-# Pseudo Random Number Generator (PRNG):
-# Configure one or more sources to seed the PRNG of the SSL library.
-# The seed data should be of good random quality.
-# WARNING! On some platforms /dev/random blocks if not enough entropy
-# is available. This means you then cannot use the /dev/random device
-# because it would lead to very long connection times (as long as
-# it requires to make more entropy available). But usually those
-# platforms additionally provide a /dev/urandom device which doesn't
-# block. So, if available, use this one instead. Read the mod_ssl User
-# Manual for more details.
-#
-# Note: This must come before the <IfDefine SSL> container to support
-# starting without SSL on platforms with no /dev/random equivalent
-# but a statically compiled-in mod_ssl.
-#
-SSLRandomSeed startup builtin
-SSLRandomSeed connect builtin
-#SSLRandomSeed startup file:/dev/random 512
-#SSLRandomSeed startup file:/dev/urandom 512
-#SSLRandomSeed connect file:/dev/random 512
-#SSLRandomSeed connect file:/dev/urandom 512
-
-<IfDefine SSL>
-
-#
-# When we also provide SSL we have to listen to the
-# standard HTTP port (see above) and to the HTTPS port
-#
-# Note: Configurations that use IPv6 but not IPv4-mapped addresses need two
-# Listen directives: "Listen [::]:443" and "Listen 0.0.0.0:443"
-#
-Listen 443
-
-##
-## SSL Global Context
-##
-## All SSL configuration in this context applies both to
-## the main server and all SSL-enabled virtual hosts.
-##
-
-#
-# Some MIME-types for downloading Certificates and CRLs
-#
-AddType application/x-x509-ca-cert .crt
-AddType application/x-pkcs7-crl .crl
-
-# Pass Phrase Dialog:
-# Configure the pass phrase gathering process.
-# The filtering dialog program (`builtin' is a internal
-# terminal dialog) has to provide the pass phrase on stdout.
-SSLPassPhraseDialog builtin
-
-# Inter-Process Session Cache:
-# Configure the SSL Session Cache: First the mechanism
-# to use and second the expiring timeout (in seconds).
-#SSLSessionCache none
-#SSLSessionCache shmht:@exp_runtimedir@/ssl_scache(512000)
-#SSLSessionCache shmcb:@exp_runtimedir@/ssl_scache(512000)
-SSLSessionCache dbm:@exp_runtimedir@/ssl_scache
-SSLSessionCacheTimeout 300
-
-# Semaphore:
-# Configure the path to the mutual exclusion semaphore the
-# SSL engine uses internally for inter-process synchronization.
-SSLMutex file:@exp_runtimedir@/ssl_mutex
-
-##
-## SSL Virtual Host Context
-##
-
-<VirtualHost _default_:443>
-
-# General setup for the virtual host
-DocumentRoot "@exp_htdocsdir@"
-ServerName www.example.com:443
-ServerAdmin you@example.com
-ErrorLog @exp_logfiledir@/error_log
-TransferLog @exp_logfiledir@/access_log
-
-# SSL Engine Switch:
-# Enable/Disable SSL for this virtual host.
-SSLEngine on
-
-# SSL Cipher Suite:
-# List the ciphers that the client is permitted to negotiate.
-# See the mod_ssl documentation for a complete list.
-SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-
-# Server Certificate:
-# Point SSLCertificateFile at a PEM encoded certificate. If
-# the certificate is encrypted, then you will be prompted for a
-# pass phrase. Note that a kill -HUP will prompt again. Keep
-# in mind that if you have both an RSA and a DSA certificate you
-# can configure both in parallel (to also allow the use of DSA
-# ciphers, etc.)
-SSLCertificateFile @exp_sysconfdir@/ssl.crt/server.crt
-#SSLCertificateFile @exp_sysconfdir@/ssl.crt/server-dsa.crt
-
-# Server Private Key:
-# If the key is not combined with the certificate, use this
-# directive to point at the key file. Keep in mind that if
-# you've both a RSA and a DSA private key you can configure
-# both in parallel (to also allow the use of DSA ciphers, etc.)
-SSLCertificateKeyFile @exp_sysconfdir@/ssl.key/server.key
-#SSLCertificateKeyFile @exp_sysconfdir@/ssl.key/server-dsa.key
-
-# Server Certificate Chain:
-# Point SSLCertificateChainFile at a file containing the
-# concatenation of PEM encoded CA certificates which form the
-# certificate chain for the server certificate. Alternatively
-# the referenced file can be the same as SSLCertificateFile
-# when the CA certificates are directly appended to the server
-# certificate for convinience.
-#SSLCertificateChainFile @exp_sysconfdir@/ssl.crt/ca.crt
-
-# Certificate Authority (CA):
-# Set the CA certificate verification path where to find CA
-# certificates for client authentication or alternatively one
-# huge file containing all of them (file must be PEM encoded)
-# Note: Inside SSLCACertificatePath you need hash symlinks
-# to point to the certificate files. Use the provided
-# Makefile to update the hash symlinks after changes.
-#SSLCACertificatePath @exp_sysconfdir@/ssl.crt
-#SSLCACertificateFile @exp_sysconfdir@/ssl.crt/ca-bundle.crt
-
-# Certificate Revocation Lists (CRL):
-# Set the CA revocation path where to find CA CRLs for client
-# authentication or alternatively one huge file containing all
-# of them (file must be PEM encoded)
-# Note: Inside SSLCARevocationPath you need hash symlinks
-# to point to the certificate files. Use the provided
-# Makefile to update the hash symlinks after changes.
-#SSLCARevocationPath @exp_sysconfdir@/ssl.crl
-#SSLCARevocationFile @exp_sysconfdir@/ssl.crl/ca-bundle.crl
-
-# Client Authentication (Type):
-# Client certificate verification type and depth. Types are
-# none, optional, require and optional_no_ca. Depth is a
-# number which specifies how deeply to verify the certificate
-# issuer chain before deciding the certificate is not valid.
-#SSLVerifyClient require
-#SSLVerifyDepth 10
-
-# Access Control:
-# With SSLRequire you can do per-directory access control based
-# on arbitrary complex boolean expressions containing server
-# variable checks and other lookup directives. The syntax is a
-# mixture between C and Perl. See the mod_ssl documentation
-# for more details.
-#<Location />
-#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
-# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
-# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
-# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
-# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
-# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-#</Location>
-
-# SSL Engine Options:
-# Set various options for the SSL engine.
-# o FakeBasicAuth:
-# Translate the client X.509 into a Basic Authorisation. This means that
-# the standard Auth/DBMAuth methods can be used for access control. The
-# user name is the `one line' version of the client's X.509 certificate.
-# Note that no password is obtained from the user. Every entry in the user
-# file needs this password: `xxj31ZMTZzkVA'.
-# o ExportCertData:
-# This exports two additional environment variables: SSL_CLIENT_CERT and
-# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
-# server (always existing) and the client (only existing when client
-# authentication is used). This can be used to import the certificates
-# into CGI scripts.
-# o StdEnvVars:
-# This exports the standard SSL/TLS related `SSL_*' environment variables.
-# Per default this exportation is switched off for performance reasons,
-# because the extraction step is an expensive operation and is usually
-# useless for serving static content. So one usually enables the
-# exportation for CGI and SSI requests only.
-# o StrictRequire:
-# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
-# under a "Satisfy any" situation, i.e. when it applies access is denied
-# and no other module can change it.
-# o OptRenegotiate:
-# This enables optimized SSL connection renegotiation handling when SSL
-# directives are used in per-directory context.
-#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
-<Files ~ "\.(cgi|shtml|phtml|php3?)$">
- SSLOptions +StdEnvVars
-</Files>
-<Directory "@exp_cgidir@">
- SSLOptions +StdEnvVars
-</Directory>
-
-# SSL Protocol Adjustments:
-# The safe and default but still SSL/TLS standard compliant shutdown
-# approach is that mod_ssl sends the close notify alert but doesn't wait for
-# the close notify alert from client. When you need a different shutdown
-# approach you can use one of the following variables:
-# o ssl-unclean-shutdown:
-# This forces an unclean shutdown when the connection is closed, i.e. no
-# SSL close notify alert is send or allowed to received. This violates
-# the SSL/TLS standard but is needed for some brain-dead browsers. Use
-# this when you receive I/O errors because of the standard approach where
-# mod_ssl sends the close notify alert.
-# o ssl-accurate-shutdown:
-# This forces an accurate shutdown when the connection is closed, i.e. a
-# SSL close notify alert is send and mod_ssl waits for the close notify
-# alert of the client. This is 100% SSL/TLS standard compliant, but in
-# practice often causes hanging connections with brain-dead browsers. Use
-# this only for browsers where you know that their SSL implementation
-# works correctly.
-# Notice: Most problems of broken clients are also related to the HTTP
-# keep-alive facility, so you usually additionally want to disable
-# keep-alive for those clients, too. Use variable "nokeepalive" for this.
-# Similarly, one has to force some clients to use HTTP/1.0 to workaround
-# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
-# "force-response-1.0" for this.
-SetEnvIf User-Agent ".*MSIE.*" \
- nokeepalive ssl-unclean-shutdown \
- downgrade-1.0 force-response-1.0
-
-# Per-Server Logging:
-# The home of a custom SSL log file. Use this when you want a
-# compact non-error SSL logfile on a virtual host basis.
-CustomLog @exp_logfiledir@/ssl_request_log \
- "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-
-</VirtualHost>
-
-</IfDefine>
diff --git a/docs/docroot/apache_pb.gif b/docs/docroot/apache_pb.gif
deleted file mode 100644
index 3a1c139fc4..0000000000
--- a/docs/docroot/apache_pb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb.png b/docs/docroot/apache_pb.png
deleted file mode 100644
index eb99a8cd39..0000000000
--- a/docs/docroot/apache_pb.png
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb2.gif b/docs/docroot/apache_pb2.gif
deleted file mode 100644
index 4e67c7113c..0000000000
--- a/docs/docroot/apache_pb2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb2.png b/docs/docroot/apache_pb2.png
deleted file mode 100644
index 28baa70fb8..0000000000
--- a/docs/docroot/apache_pb2.png
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb2_ani.gif b/docs/docroot/apache_pb2_ani.gif
deleted file mode 100644
index fc41c03610..0000000000
--- a/docs/docroot/apache_pb2_ani.gif
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/index.html.ca b/docs/docroot/index.html.ca
deleted file mode 100644
index 9e7eef0bfd..0000000000
--- a/docs/docroot/index.html.ca
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>P&agrave;gina de prova de la instal&middot;laci&oacute; d'Apache</title>
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<p>Si veieu aix&ograve;, la instal&middot;laci&oacute; del progamari
-del <a href="http://www.apache.org/foundation/preFAQ.html">servidor
-web d'Apache</a> al sistema ha tingut &egrave;xit. Ja podeu afegir
-contingut al directori i substituir aquesta p&agrave;gina.</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">Veieu aquest text en comptes de la p&agrave;gina web que
-cerc&agrave;veu?</h2>
-
-<p>Aquesta p&agrave;gina &eacute;s aqu&iacute; perqu&egrave; l'administrador
-del lloc ha canviat la configuraci&oacute; d'aquest servidor web.
-<strong>Poseu-vos en contacte amb la persona responsable del manteniment
-d'aquest servidor.</strong>
-La Apache Software Foundation, que va escriure el programari del servidor web
-que fa servir l'administrador d'aquest lloc, no t&eacute; res a veure amb el
-seu manteniment i no pot ajudar-vos a resoldre els problemes de configuraci&oacute;.</p>
-
-<hr width="50%" size="8" />
-<p>Aquesta distribuci&oacute; inclou la <a href="manual/">documentaci&oacute;</a>
-d'Apache.</p>
-
-<p>Podeu fer servir lliurement la imatge que surt a sota en un servidor web
-que funcioni amb Apache. Gr&agrave;cies per fer servir Apache!</p>
-
-<div align="center"><img src="apache_pb.gif" alt="" /></div>
-</body>
-</html>
-
diff --git a/docs/docroot/index.html.cz.iso8859-2 b/docs/docroot/index.html.cz.iso8859-2
deleted file mode 100644
index e0cd2ba610..0000000000
--- a/docs/docroot/index.html.cz.iso8859-2
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <META HTTP-Equiv="Content-Type" CONTENT="text/html; charset=iso-8859-2">
- <TITLE>Testovací stránka instalace web serveru Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Funguje to! Na tomto serveru bì¾í Apache!
- </H1>
- <P>
- Pokud vidíte tuto zprávu, správce tohoto poèítaèe právì úspì¹nì
- nainstaloval Apache web server.
- Teï je¹tì musí doplnit obsah a nahradit tuto standardní uvítací
- stránku, nebo pøesmìrovat server na skuteènou domovskou stránku.
- </P>
- <HR>
- <BLOCKQUOTE>
- Pokud vidíte tuto zprávu místo oèekávané domovské stránky,
- <STRONG>kontaktujte, prosím, správce pøíslu¹ného web
- serveru.</STRONG> (Zkuste poslat e-mail na adresu
- <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
- Pøesto¾e tento server pou¾ívá program Apache, témìø jistì nemá nic
- spoleèného s Apache Group, proto prosím neposílejte e-maily o tomto
- serveru nebo jeho obsahu autorùm Apache. Pokud to udìláte, budeme
- va¹e zprávy <STRONG><BIG>ignorovat</BIG></STRONG>.
- </BLOCKQUOTE>
- <HR>
- <P>
- Zde najdete
- <A
- HREF="manual/"
- >dokumentaci</A>
- Apache (anglicky) obsa¾enou v této distribuci.
- </P>
- <P>
- Následující logo mù¾e být pou¾ito bez omezení na web serveru s
- programem Apache. Dìkujeme za pou¾ití Apache!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.de b/docs/docroot/index.html.de
deleted file mode 100644
index 72a824cb49..0000000000
--- a/docs/docroot/index.html.de
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
- <head>
- <title>Testseite fuer die Apache-Installation auf dieser Website</title>
- <!-- Translated Wed Aug 18 11:04:02 GMT 1999 - Martin.Kraemer@Mchp.Siemens.De -->
- </head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
- <h1 align="center">
- Es klappt! Der Apache-Webserver ist auf dieser Website installiert!
- </h1>
- <p>
- Wenn Sie diese Seite sehen, dann bedeutet das, dass die
- Eigent&uuml;mer dieser Dom&auml;ne soeben einen neuen
- Apache-Webserver
- erfolgreich installiert haben. Jetzt muss noch der
- richtige Webinhalt zugef&uuml;gt und diese Platzhalterseite
- ersetzt werden (oder der Webserver f&uuml;r den Zugriff auf den
- richtigen Inhalt umkonfiguriert werden).
- </p>
- <hr />
- <blockquote>
- Wenn Sie diese Seite an Stelle einer anderen erwarteten Website
- sehen sollten, dann <strong>nehmen Sie bitte Kontakt mit dem
- Eigent&uuml;mer dieser Site auf</strong> (Versuchen Sie, eine E-Mail
- an <samp>&lt;Webmaster@<em>dom&auml;nenname</em>&gt;</samp>
- zu senden)!<br />
- <p>
- Obwohl der Eigent&uuml;mer dieser Dom&auml;ne die Apache-Webserver-Software
- verwendet, hat diese Website ziemlich sicher
- keinerlei Verbindung mit der <em>Apache Software Foundation</em>
- (die diese Software kostenlos vertreibt). Es besteht also
- <big><strong>keinerlei Veranlassung</strong></big>, eine E-Mail an
- die Entwickler der Software zu senden. Sollten Sie das dennoch
- tun, wird Ihre E-Mail stillschweigend
- <strong><big>ignoriert</big></strong>.
- </blockquote>
- <hr />
- <p>
- Die englische <A
- HREF="manual/">Online-Dokumentation</a> f&uuml;r die
- Apache-Webserver-Software ist Bestandteil dieser
- Software-Distribution.
- </p>
- <p>
- Dem <i>Webmaster</i> dieser Website steht es frei, das
- untenstehende "Powered by Apache"-Logo auf einem Apache-basierten
- Webserver zu verwenden.<br />
- Vielen Dank, dass Sie Apache gew&auml;hlt haben!
- </p>
- <div align="center">
- <img src="apache_pb.gif" alt="Powered by the Apache HTTP Server!">
- </div>
- </body>
-</html>
diff --git a/docs/docroot/index.html.dk b/docs/docroot/index.html.dk
deleted file mode 100644
index cbe8aade05..0000000000
--- a/docs/docroot/index.html.dk
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Pr&oslash;veside for Apache installationen</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Det virkede! Apache Webserveren er installeret p&aring; denne maskine!
- </H1>
- <P>
- Hvis du kan se denne side, s&aring; har dem som ejer dette dom&aelig;ne lige
- installeret Apache Webserveren.
- Du m&aring; nu placere web sider i dette directory og fjerne denne side, eller
- konfigurere serveren til at anvende et andet directory.
- </P>
- <HR>
- <BLOCKQUOTE>
- Hvis du ser denne side istedet for en anden forventet side, <STRONG>kontakt
- venligst administratoren for den server du pr&oslash;ver at kontakte.</STRONG>
- (Pr&oslash;v at sende mail til <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
- Apachegruppen har ikke noget at g&oslash;re med denne site, s&aring; det vil ikke
- hj&aelig;lpe at sende mail to Apache udviklerne ang&aring;ende denne site.
- </BLOCKQUOTE>
- <HR>
- <P>
- Apache-
- <A
- HREF="manual/index.html"
- >documentationen</A>
- er inkluderet med denne distribution.
- </P>
- <P>
- Webmasteren af denne site m&aring; gerne bruge den f&oslash;lgende grafik
- p&aring; en Apache-drevet webserver. Mange tak for at bruge Apache!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.ee b/docs/docroot/index.html.ee
deleted file mode 100644
index 7d8bc9c8d1..0000000000
--- a/docs/docroot/index.html.ee
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Apache veebiserveri installatsiooni testlehek&uuml;lg</TITLE>
- <!-- Original translation: Ahti Heinla, ahti@ahti.bluemoon.ee, Thu Aug 19 12:57:48 GMT 1999 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Kujuta pilti, k&auml;ima l&auml;ks! Apache veebiserver on installeeritud!
- </H1>
- <P>
- Kui Sa n&auml;ed seda lehek&uuml;lge, siis selle domeeni omanikud on
- edukalt hakkama saanud Apache veebiserveri
- installeerimisega. J&auml;rgmiseks peaks nad selle lehek&uuml;lje asendama
- misiganes materjaliga, mida nad oma veebisaidis n&auml;idata tahavad,
- v&otilde;i siis juhatama veebiserverile k&auml;tte tegeliku materjali
- asukoha.
- </P>
- <HR>
- <BLOCKQUOTE>
- Kui Sa ootasid siin lehek&uuml;ljel n&auml;ha hoopis midagi muud,
- siis palun <STRONG>v&otilde;ta &uuml;hendust selle veebisaidi
- administraatoriga.</STRONG> (V&otilde;id n&auml;iteks kirjutada aadressil
- <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.) Kuigi see veebisait
- kasutab Apache tarkvara, pole ta peaaegu kindlasti mitte Apache Group'iga
- mingil muul moel seotud. Seega, palun &auml;ra kirjuta selle saidi
- asjus Apache autoritele. Kui sa seda teed, siis sinu kirja
- <STRONG><BIG>ignoreeritakse</BIG></STRONG>.
- </BLOCKQUOTE>
- <HR>
- <P>
- Ka Apache
- <A
- HREF="manual/index.html"
- >dokumentatsioon</A>
- on selles distributsioonis olemas.
- </P>
- <P>
- Kohalik veebmeister v&otilde;ib vabalt kasutada allpool olevat
- pilti oma Apache veebiserveril. Ait&auml;h Apachet kasutamast!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.el b/docs/docroot/index.html.el
deleted file mode 100644
index 75c8737e82..0000000000
--- a/docs/docroot/index.html.el
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EL">
-<HTML>
- <HEAD>
- <TITLE>ÄïêéìáóôéêÞ Óåëßäá ãéá ôçí ÅãêáôÜóôáóç ôïõ Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
-
-
-<P>
-ÅÜí ìðïñåßôå íá äåßôå áõôÞ ôç óåëßäá, ôüôå ç åãêáôÜóôáóç ôïõ ëïãéóìéêïý ôïõ ÅîõðçñåôçôÞ WWW Apache óå áõôü ôï óýóôçìá Þôáí åðéôõ÷Þò. Ìðïñåßôå ôþñá íá ðñïóèÝóåôå ðåñéå÷üìåíï óå áõôü ôïí êáôÜëïãï êáé íá áíôéêáôáóôÞóåôå áõôÞ ôç óåëßäá.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">ÂëÝðåôå áõôÞ ôç óåëßäá áíôß ãéá ôï äéêôõáêü ôüðï ðïõ ðåñéìÝíáôå;</H2>
-
-<P>
-ÁõôÞ ç óåëßäá âñßóêåôáé åäþ ãéáôß ï äéá÷åéñéóôÞò áõôïý ôïõ äéêôõáêïý ôüðïõ ôñïðïðïßçóå ôéò ñõèìßóåéò óôïí åîõðçñåôçôÞ Apache. Ðáñáêáëþ <STRONG>åðéêïéíùíÞóôå ìå ôïí õðåýèõíï ãéá ôç äéá÷åßñéóç ôïõ ðáñüíôïò åîõðçñåôçôÞ.</STRONG> Ôï ºäñõìá Ëïãéóìéêïý Apache (The Apache Software Foundation) Ýãñáøå ôï ëïãéóìéêü ôïõ åîõðçñåôçôÞ WWW ôï ïðïßï ÷ñçóéìïðïéåß ï äéá÷åéñéóôÞò áõôïý ôïõ äéêôõáêïý ôüðïõ. Ôï ºäñõìá üìùò äåí Ý÷åé êáìéÜ áñìïäéüôçôá ó÷åôéêÞ ìå ôç äéá÷åßñéóç áõôïý ôïõ äéêôõáêïý ôüðïõ êáé äåí ìðïñåß íá âïçèÞóåé óôçí åðßëõóç èåìÜôùí ðïõ Ý÷ïõí ó÷Ýóç ìå ôéò ñõèìßóåéò ôïõ.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P>
-Ç <A HREF="manual/">ôåêìçñßùóç</A> ôïõ Apache Ý÷åé óõìðåñéëçöèåß óå áõôÞ ôç äéáíïìÞ.
-
-<P>
-Åßóôå åëåýèåñïò/ç íá ÷ñçóéìïðïéÞóåôå ôçí ðáñáêÜôù åéêüíá óå Ýíáí åîõðçñåôçôÞ ôïõ WWW ðïõ âáóßæåôáé óå Apache. Åõ÷áñéóôïýìå ðïõ ÷ñçóéìïðïéåßôå ôïí Apache!
-
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.en b/docs/docroot/index.html.en
deleted file mode 100644
index dc4c5182e5..0000000000
--- a/docs/docroot/index.html.en
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>Test Page for Apache Installation</title>
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<p>If you can see this, it means that the installation of the <a
-href="http://www.apache.org/foundation/preFAQ.html">Apache web
-server</a> software on this system was successful. You may now add
-content to this directory and replace this page.</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">Seeing this instead of the website you
-expected?</h2>
-
-<p>This page is here because the site administrator has changed the
-configuration of this web server. Please <strong>contact the person
-responsible for maintaining this server with questions.</strong>
-The Apache Software Foundation, which wrote the web server software
-this site administrator is using, has nothing to do with
-maintaining this site and cannot help resolve configuration
-issues.</p>
-
-<hr width="50%" size="8" />
-<p>The Apache <a href="manual/">documentation</a> has been included
-with this distribution.</p>
-
-<p>You are free to use the image below on an Apache-powered web
-server. Thanks for using Apache!</p>
-
-<div align="center"><img src="apache_pb.gif" alt="" /></div>
-</body>
-</html>
-
diff --git a/docs/docroot/index.html.es b/docs/docroot/index.html.es
deleted file mode 100644
index 6f501db5b6..0000000000
--- a/docs/docroot/index.html.es
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//ES">
-<HTML>
- <HEAD>
- <TITLE>Pag&iacute;na para probar la instalaci&oacute;n de Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- &iexcl;Funcion&oacute;! &iexcl;El Servidor de Red Apache ha sido instalado en ese sitio!
- </H1>
- <P>
- Si usted puede ver esta pag&iacute;na, entonces los due&ntilde;os de esta
- maqu&iacute;na han instalado el Servidor de
- Red Apache con ex&iacute;to. Ahora deben a&ntilde;adir contenido a este directorio
- y reemplazar esta pag&iacute;na, &oacute; apuntar este servidor al contenido real.
- </P>
- <HR>
- <BLOCKQUOTE>
- Si usted esta leyendo esta pag&iacute;na y no es lo que esperaba, por favor
- <STRONG>contacte el administrador de este sitio.</STRONG>
- (Trate de enviar correo electr&oacute;nico a <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
- Aunque este sitio esta utilizando el programa Apache es casi seguro
- que no tiene ninguna conexi&oacute;n con el Apache Group, por eso favor de
- no enviar correo sobre este sitio o su contenido a los autores de
- Apache. Si lo hace, su mensaje sera
- <STRONG><BIG>ignorado</BIG></STRONG>.
- </BLOCKQUOTE>
- <HR>
- <P>
- La
- <A
- HREF="manual/index.html"
- >documentaci&oacute;n</A>
- de Apache ha sido incluida en esta distribuci&oacute;n.
- </P>
- <P>
- El administrador del sitio esta invitado a usar la siguiente
- imagen para indicar que su sitio es servido por Apache.
- &iexcl;Gracias por usar Apache!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.et b/docs/docroot/index.html.et
deleted file mode 100644
index 99f2ce6b15..0000000000
--- a/docs/docroot/index.html.et
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Apache veebiserveri installatsiooni testlehek&uuml;lg</TITLE>
- <!-- Original translation: Ahti Heinla, ahti@ahti.bluemoon.ee, Thu Aug 19 12:57:48 GMT 1999 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Kujuta pilti, k&auml;ima l&auml;ks! Apache veebiserver on installeeritud!
- </H1>
- <P>
- Kui Sa n&auml;ed seda lehek&uuml;lge, siis selle domeeni omanikud on
- edukalt hakkama saanud <A HREF="http://httpd.apache.org/">Apache veebiserveri</A>
- installeerimisega. J&auml;rgmiseks peaks nad selle lehek&uuml;lje asendama
- misiganes materjaliga, mida nad oma veebisaidis n&auml;idata tahavad,
- v&otilde;i siis juhatama veebiserverile k&auml;tte tegeliku materjali
- asukoha.
- </P>
- <HR>
- <BLOCKQUOTE>
- Kui Sa ootasid siin lehek&uuml;ljel n&auml;ha hoopis midagi muud,
- siis palun <STRONG>v&otilde;ta &uuml;hendust selle veebisaidi
- administraatoriga.</STRONG> (V&otilde;id n&auml;iteks kirjutada aadressil
- <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.) Kuigi see veebisait
- kasutab Apache tarkvara, pole ta peaaegu kindlasti mitte Apache Group'iga
- mingil muul moel seotud. Seega, palun &auml;ra kirjuta selle saidi
- asjus Apache autoritele. Kui sa seda teed, siis sinu kirja
- <STRONG><BIG>ignoreeritakse</BIG></STRONG>.
- </BLOCKQUOTE>
- <HR>
- <P>
- Ka Apache
- <A
- HREF="manual/index.html"
- >dokumentatsioon</A>
- on selles distributsioonis olemas.
- </P>
- <P>
- Kohalik veebmeister v&otilde;ib vabalt kasutada allpool olevat
- pilti oma Apache veebiserveril. Ait&auml;h Apachet kasutamast!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.fr b/docs/docroot/index.html.fr
deleted file mode 100644
index 98154f1ef7..0000000000
--- a/docs/docroot/index.html.fr
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <meta http-equiv="Content-Type" content="text/html">
- <TITLE>Page de test de l'installation d'Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
-
-
-<p>Si vous lisez cette page, c'est que les propriétaires de ce
-domaine viennent d'installer le
-serveur web Apache
-avec succès. Ils doivent maintenant ajouter du contenu à ce
-répertoire et remplacer cette page, ou bien faire pointer le serveur
-vers l'endroit où se trouve le contenu réel du site.</p>
-
-<HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">Vous voyez cette page au lieu du site attendu&nbsp;?</H2>
-
-<p>Vous voyez cette page parce que l'administrateur du site a modifié
-la configuration de ce serveur Web. Veuillez contacter
-<STRONG>l'administrateur du site concerné</STRONG>. La Fondation
-Apache (Apache Software Foundation), qui produit le logiciel Apache
-utilisé par ce site, n'a rien à voir avec la maintenance de ce
-site et ne peut intervenir sur sa configuration.</p>
-
-<HR WIDTH="50%" SIZE="8">
-
-<p>La <A HREF="manual/">documentation</A> Apache est incluse dans cette
-distribution.</p>
-
-<p>Le webmaster de ce site peut librement utiliser l'image ci-dessous sur un
-site web utilisant le logiciel Apache. Merci d'avoir choisi Apache&nbsp;!</p>
-
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.he.iso8859-8 b/docs/docroot/index.html.he.iso8859-8
deleted file mode 100644
index 7006856ecb..0000000000
--- a/docs/docroot/index.html.he.iso8859-8
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-8">
- <TITLE>Apache-ä úøù úð÷úäì ïåéñð óã</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
-
-<div align=center>
- <P>
-
- <BR> äæä ãåîòä úà äàåø äúà íà
-<BR>Apache èðøèðéàä úøù ìù äð÷úääù øîåà äæ
- <BR>!!!äçìöäá äøáò
- <BR> êìù íéöá÷ä úà óéñåäì ìåëé äúà åéùëò
- <BR>.äæä óãä úà óéìçäìå úàæä äöéçîì
-
-
-<P><HR WIDTH="50%" SIZE="8">
-
- <H2 ALIGN="CENTER">?úéôéöù øúàä íå÷îá úàæ äàåø</H2>
- <P>
- <BR> äæä øúàä ìò éàøçàä éë ,ïàë àöîð äæä ãåîòä
- <BR>.äæä èðøèðéàä úøù ìù äéöøåâéôðå÷ä úà äðéù
- <BR>.<STRONG>úåìàù íò úøùä éàøçà íò øù÷ øåöéì</STRONG> àð
- <BR>úà äøöé øùà Apache Software Foundation
- <BR>úøùä ú÷åæçú ìò úéàøçà äðéà ,äæä úøùä úðëåú
- <BR>äéöøåâéôðå÷ úåéòá ïåøúôá òééñì äìåëé äðéàå
- .ïäùìë
-
-<P><HR WIDTH="50%" SIZE="8">
-
- <P>
- <BR> êåúá íéòöîð <A HREF="manual/index.html">äéöèðîå÷åãä éëîñî</A>
- .úøùä úðëåú úìéáç
-
-
- <P>
- <BR>ãåîòä úéúçúá àöîðä ìîñá ùîúùäì éàùø äúà
- <BR>.Apache é''ò ìòôåîù úøùä ìò ÷ø
-
- !!!Apache-á ùåîéùä ìò äãåú
-
- </div>
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.hr.iso8859-2 b/docs/docroot/index.html.hr.iso8859-2
deleted file mode 100644
index fdbc6a7d7b..0000000000
--- a/docs/docroot/index.html.hr.iso8859-2
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
-<title>Testna Stranica Apache Instalacije</title>
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<h2 align="center">Èestitamo! Apache web poslu¾itelj funkcionira!</h2>
-<p>Ukoliko vidite ovu stranicu, to znaèi da je instalacija <a
-href="http://www.apache.org/foundation/preFAQ.html">Apache web poslu¾itelja</a> uspje¹no izvr¹ena na ovom raèunalu.
-Sada mo¾ete dodati sadr¾aj u ovaj direktorij te promijeniti ovu stranicu.</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">Oèekivali ste neku drugu stranicu?</h2>
-
-<p>Ovu stranica vidite stoga ¹to je administrator ovog poslu¾itelja promijenio
-konfiguraciju. Apache Softver Fondacija napisala je softver koji koristi
-administrator ovog web poslulitelja i nije odgovorna za njegovo odr¾avanje! Zbog toga vas molimo da se za
-sva pitanja obratite <strong>administratoru ili osobi odgovornoj za odrzavanje ovog poslu¾itelja.</strong></p>
-
-<hr width="50%" size="8" />
-<p>Ovdje se nalazi <a href="manual/">Dokumentacija</a> o Apache web poslu¾itelju
-(engleski).</p>
-
-<p>Donju slièicu mo¾ete slobodno koristiti na stranicama ovog veb poslu¾itelja.
-Hvala vam ¹to koristite Apache!</p>
-
-<div align="center"><img src="apache_pb.gif" alt="Apache Web Poslu¾itelj" /></div>
-</body>
-</html>
-
diff --git a/docs/docroot/index.html.hu b/docs/docroot/index.html.hu
deleted file mode 100644
index d92e7a2343..0000000000
--- a/docs/docroot/index.html.hu
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
- <head>
- <title>Ezen a web oldalon az Apache-webszerver van telepítve!</title>
- <!-- Translated Wed Jan 7 09:22:01 2004 - Lacza Vilmos at siemens dot com -->
- </head>
- <!-- Background white, links blue (unvisited), navy (visited), red
- (active) -->
- <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
- vlink="#000080" alink="#FF0000">
- <h1 align="center">Tal&aacute;lt! Ezen a web oldalon az
- Apache-webszerver van telep&iacute;tve!</h1>
- <p>
- Ha &Ouml;n ezt az oldalt l&aacute;tja, az azt jelenti, hogy
- ennek a domain-nek a tulajdonosa &eacute;ppen egy &uacute;j
- Apache webszervert telep&iacute;tett sikeresen. Most
- m&eacute;g ezt a lapot a val&oacute;s web tartalommal ki kell
- eg&eacute;sz&iacute;teni &eacute;s a lapot
- &aacute;talak&iacute;tani (vagy a webszervert a val&oacute;s
- tartalmak el&eacute;r&eacute;s&eacute;hez &aacute;t kell
- konfigur&aacute;lni).
- </p>
- <hr />
- <blockquote>
- <p>
- Ha &Ouml;n ezt a lapot egy m&aacute;sik v&aacute;rt weblap
- helyett l&aacute;tn&aacute;, <strong>vegye fel a kapcsolatot
- ennek a lapnak a tulajdonos&aacute;val!</strong>
- (K&iacute;s&eacute;relje meg e-mail &uuml;zenet
- k&uuml;ld&eacute;s&eacute;t a
- <samp>&lt;webmaster@<em>domain-n&eacute;v</em>&gt;</samp>
- c&iacute;mre).<br />
- </p>
- <p>
- Annak ellen&eacute;re, hogy ennek a domain-nek a tulajdonosa
- az Apache webszerver szoftvert haszn&aacute;lja, ennek az
- oldalnak semminem&uuml; kapcsolata nincs az <em>Apache
- Software Foundation</em> szervezettel (amely ezt a szoftvert
- ingyenesen terjeszti). <strong>Ebb&otilde;l kifoly&oacute;lag
- nem &aacute;ll fenn semmilyen indok e-mail &uuml;zenet
- k&uuml;ld&eacute;s&eacute;re a szoftver fejleszt&otilde;inek
- c&iacute;mezve.</strong> Ha &Ouml;n m&eacute;gis ezt
- tenn&eacute;, az &Ouml;n e-mail <strong><big>&uuml;zenete
- t&ouml;r&ouml;lve lesz</big></strong>.
- </p>
- </blockquote>
- <hr />
- <p>
- Az Apache-webszerver szoftver angol nyelv&ucirc; <a
- href="manual/">online dokument&aacute;ci&oacute;ja</a>
- r&eacute;sze ennek a szoftvercsomagnak.
- </p>
- <p>
- Ezen weblap webmester&eacute;nek joga van az alul
- elhelyezked&otilde; "Powered by Apache"-log&oacute;t Apache
- szoftveren alapul&oacute; webszerveren haszn&aacute;lni.
- <br />
- K&ouml;sz&ouml;net, hogy &Ouml;n az Apache szoftvert
- v&aacute;lasztotta!
- </p>
- <div align="center">
- <img src="apache_pb.gif" alt="Powered by the Apache HTTP Server!">
- </div>
- </body>
-</html>
diff --git a/docs/docroot/index.html.it b/docs/docroot/index.html.it
deleted file mode 100644
index e9ef9ed01e..0000000000
--- a/docs/docroot/index.html.it
+++ /dev/null
@@ -1,39 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html">
- <title>Pagina di prova dell'installazione di un sito Web con Apache</title>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Funziona! Il Server Web Apache &egrave; stato installato su questo sito Web!</h1></center>
-Se riuscite a vedere questa pagina, allora vuol dire che coloro che gestiscono
-questo dominio hanno appena installato il software
-Web&nbsp;Server
-Apache correttamente. Ora &egrave; necessario aggiungere il vostro materiale
-in questa directory e sostituire questa pagina di prova, oppure configurare
-il server per far riferimento al vostro materiale se collocato altrove.
-<p>
-<hr>
-<blockquote>Se state vedendo questa pagina invece del sito che pensavate,
-vi preghiamo di <b>contattare l'amministratore del sito in questione.</b>
-(Provate ad inviare un email a <tt>&lt;Webmaster@<i>domain</i>&gt;</tt>.)&nbsp;
-Nonostante questo sito stia utilizzando il software Apache, questo non
-vi garantisce nessun tipo di contatto diretto al Gruppo Apache, quindi
-vi preghiamo di non inviare email riguardanti questo sito o il materiale
-in esso contenuto agli autori di Apache. Ogni messaggio del genere verr&agrave;
-<b><font size="+1">ignorato</font></b>.</blockquote>
-
-<hr>
-<br>La <a href="manual/">documentazione</a> relativa di Apache
-&egrave; inclusa nella distribuzione.
-<p>Il Webmaster di questo sito &egrave; libero di utilizzare l'immagine qui sotto
-su qualsiasi Web server potenziato con Apache. Grazie per aver scelto Apache!
-<center>
-<p><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ja.iso2022-jp b/docs/docroot/index.html.ja.iso2022-jp
deleted file mode 100644
index ba3e736bad..0000000000
--- a/docs/docroot/index.html.ja.iso2022-jp
+++ /dev/null
@@ -1,42 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"
- "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP">
- <title>Apache $B%$%s%9%H!<%k;~$N%F%9%H%Z!<%8(B</title>
- </head>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <body
- bgcolor="#ffffff"
- text="#000000"
- link="#0000ff"
- vlink="#000080"
- alink="#ff0000"
- >
-
-
-<p>
-$B$b$7$3$N%Z!<%8$,FI$a$?$N$G$"$l$P!"(B<a href="http://www.apache.org/foundation/preFAQ.html">Apache $B%&%'%V%5!<%P(B</a>$B$N%$%s%9%H!<%k$,$3$N7W;;5!$GL5;v$K=*N;$7$?$3$H$r0UL#$7$^$9!#$"$J$?$O!"$3$N%G%#%l%/%H%j$KJ8=q$r2C$($?$j!"$3$N%Z!<%8$rCV$-$+$($k$3$H$,$G$-$^$9!#(B
-</p>
-<hr width="50%" size="8">
-
-<h2 align="center">$B$"$J$?$NM=A[$KH?$7$F!"$3$N%Z!<%8$,8+$($F$$$k$G$7$g$&$+(B?</h2>
-
-<p>
-$B$3$N%Z!<%8$O!"%5%$%H4IM}<T$,$3$N(B web $B%5!<%P$N@_Dj$rJQ99$7$?$?$a$K8+$($F$$$^$9!#(B
-<strong>$B$3$N%5!<%P$r4IM}$9$k@UG$$r;}$C$F$$$kJ}$KO"Mm$r$H$C$F(B</strong>$B$/$@$5$$!#$3$N%5%$%H4IM}<T$,MxMQ$7$F$$$k(B web $B%5!<%P$r3+H/$7$?(B The Apache Software Foundation $B$O!"$3$N%5%$%H$N(B web $B%5!<%P$N4IM}$H$O4X78$,$J$/!"%5!<%P$N@_Dj$K4X$9$kLdBj$r2r7h$9$k$3$H$O$G$-$^$;$s!#(B
-</p>
-<hr width="50%" size="8">
-
-
-<p>
-Apache $B$K4X$9$k(B<A HREF="manual/">$BJ8=q(B</A> $B$O!"$3$N(B web $B%5!<%PG[I[J*$NCf$K4^$^$l$F$$$^$9!#(B
-</p>
-<p>
-$B0J2<$N2hA|$O!"(BApache $B$rMxMQ$7$F$$$k(B web $B%5!<%P$G<+M3$K;H$&$3$H$,$G$-$^$9!#(BApache $B$r$4MxMQ$$$?$@$-!"$"$j$,$H$&$4$6$$$^$9(B!
-</p>
- <div align="center">
- <img src="apache_pb.gif" alt="">
- </div>
- </body>
-</html>
diff --git a/docs/docroot/index.html.ko.euc-kr b/docs/docroot/index.html.ko.euc-kr
deleted file mode 100644
index 65e90d2e50..0000000000
--- a/docs/docroot/index.html.ko.euc-kr
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
-<head>
-<title>¾ÆÆÄÄ¡ ¼³Ä¡ °Ë»ç¿ë ÆäÀÌÁö</title>
-<!-- original translation by Lee, Kuk Hyun <errai@hitel.net>, March 1 2000 -->
-<!-- minor correction by Jeon, Jeongho <mahajjh@myscan.org>, June 6 2002 -->
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<p>ÀÌ ÆäÀÌÁö°¡ º¸ÀÎ´Ù¸é ½Ã½ºÅÛ¿¡
-<a href="http://www.apache.org/foundation/preFAQ.html">Apache À¥¼­¹ö</a>
-¼ÒÇÁÆ®¿þ¾î°¡ ¼º°øÀûÀ¸·Î ¼³Ä¡µÇ¾úÀ½À» ÀǹÌÇÕ´Ï´Ù. ÀÌÁ¦ ÀÌ µð·ºÅ丮¿¡
-³»¿ëÀ» Ãß°¡ÇÏ°í ÀÌ ÆäÀÌÁö¸¦ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù.</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">¿¹»óÇÑ À¥»çÀÌÆ® ´ë½Å ÀÌ ÆäÀÌÁö°¡ º¸ÀԴϱî?</h2>
-
-<p>»çÀÌÆ® °ü¸®ÀÚ°¡ À¥¼­¹ö ¼³Á¤À» º¯°æÇ߱⠶§¹®¿¡ ÀÌ ÆäÀÌÁö°¡
-º¸ÀÌ´Â °Í ÀÔ´Ï´Ù. <strong>Áú¹®»çÇ×Àº ÀÌ ¼­¹öÀÇ °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϽñæ
-¹Ù¶ø´Ï´Ù.</strong> Apache Software FoundationÀº ÀÌ »çÀÌÆ® °ü¸®ÀÚ°¡
-»ç¿ëÇÏ´Â À¥¼­¹ö¸¦ ¸¸µç ´ÜüÀÏ »Ó, »çÀÌÆ® °ü¸®¿Í ¾Æ¹«·± °ü°è°¡ ¾ø°í
-¼³Á¤¹®Á¦¿¡ °üÇÑ µµ¿òÀ» µå¸± ¼ö ¾ø½À´Ï´Ù.</p>
-
-<hr width="50%" size="8" />
-<p>¾ÆÆÄÄ¡ <a href="manual/">¹®¼­</a>´Â ÀÌ ¹èÆ÷ÆÇ¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.</p>
-
-<p>¾ÆÆÄÄ¡¸¦ »ç¿ëÇÏ´Â À¥¼­¹ö¿¡¼­ ¾Æ·¡ À̹ÌÁö¸¦ »ç¿ëÇÏ´Â°Ç ¿©·¯ºÐÀÇ
-ÀÚÀ¯ÀÔ´Ï´Ù. ¾ÆÆÄÄ¡¸¦ »ç¿ëÇØ Áּż­ °¨»çÇÕ´Ï´Ù!</p>
-
-<div align="center"><img src="apache_pb.gif" alt="" /></div>
-</body>
-</html>
-
diff --git a/docs/docroot/index.html.lb.utf8 b/docs/docroot/index.html.lb.utf8
deleted file mode 100644
index f98c855752..0000000000
--- a/docs/docroot/index.html.lb.utf8
+++ /dev/null
@@ -1,37 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <!-- Originally translated by Jean-Luc Widlowski, jean-luc.widlowski@jrc.it Thu Aug 19 13:00:18 GMT 1999 -->
- <title>Test Page for Apache Installation on Web Site</title>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Et huet geklappt! Den Apache Web Server as op d&euml;ser 'Web Site' installeiert!</h1></center>
-Wann Dir die heiten Sait gesit, dann hun d'Proprietairen vun d&euml;ser 'domain'
-elo just d'Apache Web server software
-mat succ&eacute;s installeiert. Sie mussen allerdengs nach des Decksait
-remplaceieren oder awer de Server op eng aner Sait mat dem richtigen contenu
-em-dirigeieren.
-<br>
-<hr>
-<blockquote>Wann Dir die heiten Sait anstell vun der site die Dir erw&acirc;rt
-hut gesitt, da contacteiert wannechglift den <b>administrator vun dem betraffener
-site.</b> (Versicht &eacute;n email no <tt>&lt;Webmaster@<i>domain</i>&gt; </tt><font face="Times New Roman,Times">ze
-schecken.) Obwuel den heiten site </font>Apache software benotzt, as et
-ball secher datt keng Verbindung mat der Apache Group existeiert, also scheckt
-wannechglift keng email iwert desen site oder sein contenu zu den Apache
-Autoren. Falls Dir d&euml;st awer macht, get &auml;ren message&nbsp; <b><font size="+2">ignoreiert.</font></b></blockquote>
-
-<hr>
-<p>D'Apache <a href="manual/">documentation</a> ass d&euml;ser Ausgab
-beigef&uuml;cht.
-<p>Dem Webmaster vun dem heitenen site steht et zou dest Bild ob engem
-Apache-powered Web server ze presenteieren. Merci dat Dir Apache benotzt!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.nl b/docs/docroot/index.html.nl
deleted file mode 100644
index fdd7ff9312..0000000000
--- a/docs/docroot/index.html.nl
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Test Pagina voor de Apache Installatie op deze Web Site</TITLE>
- <!-- Translated Tue Aug 17 20:57:17 GMT 1999 - dirkx@webweaving.org -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Alles Werkt! De Apache Web Server is geinstalleerd op deze Web Site
- </H1>
- <P>
- Mocht u deze pagina zien, dan betekent dat, dat de eigenaren van dit
- domein zojuist een nieuwe Apache Web
- Server hebben geinstalleerd. Nu moet men nog de echte inhoud gaan
- toevoegen, en moet men deze pagina gaan vervangen door de echte web
- site.
- </P>
- <HR>
- <BLOCKQUOTE>
- Mocht u deze pagina zien, in plaats van de pagina of web site die u
- verwachtte, neem dan <STRONG>contact op met de beheerder van
- deze site</STRONG>. Bijvoorbeeld door een berichtje te sturen naar
- <SAMP>&lt;Webmaster@<EM>dit-domain</EM>&gt;</SAMP>.
- <P>
- Alhoewel deze web site gebruik maakt van de Apache Software is er
- verder geen enkele relatie tussen de beheerders van deze web site en
- de Apache Groep (die de web software geschreven heeft). Het heeft dus
- <BIG><STRONG>absoluut</STRONG></BIG>
- geen zin de web software auteurs een emailtje te sturen. Mocht u dat
- toch doen, dan wordt uw bericht gewoon <STRONG><BIG>genegeerd</BIG></STRONG>.
- </BLOCKQUOTE>
- <HR>
- <P>
- De
- <A HREF="manual/index.html" >handleiding</A> voor de apache web
- server software maakt deel uit van deze distributie.
- </P>
- <P>
- Als beheerder of <I>webmaster</I> is het u toegestaan het onderstaande
- plaatje vrijelijk te gebruiken op uw 'Apache Powered' web site. Bedankt
- voor het kiezen voor, en gebruiken van, Apache!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="Klein 'Powered by Apache' Logotje">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.nn b/docs/docroot/index.html.nn
deleted file mode 100644
index 67db9570b0..0000000000
--- a/docs/docroot/index.html.nn
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Testside Apache-installasjon</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Det gjekk bra! Apache er no installert på denne maskina!
- </H1>
- <P>
- Dersom du kan sjå denne sida, har den eller dei som driv denne nettstaden
- installert <A href="http://www.apache.org/foundation/preFAQ.html">Apache vevtenar</a>.
- No må denne testsida erstattast med verkeleg innhald.
- </P>
- <HR>
- <BLOCKQUOTE>
- Dersom du hadde venta å sjå ei anna side enn denne, bør du
- <strong>ta kontakt med den som er ansvarleg for denne nettstaden</strong>
- (Prøv å sende e-post til <SAMP>&lt;webmaster@<EM>domene</EM>&gt;</SAMP>.)
- Sjølv om denne nettstaden vert kjørt på Apache, har den ingen annan
- tilknytning til Apache-gruppa, som har utvikla programvaren.
- Ver snill og ikkje send e-post om denne nettstaden eller
- innhaldet du finn her til utviklarane i Apache-gruppa.
- I så tilfelle vil førespurnaden <strong><BIG>ignorerast</BIG></strong>.
- </BLOCKQUOTE>
- <HR>
- <P>
- <A
- HREF="manual/index.html"
- >Dokumentasjon</A>
- for Apache er inkludert i denne pakka.
- </P>
- <P>
- Logoen under kan brukast på kva som helst av maskiner som køyrer Apache.
- Takk for at du nyttar Apache!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.no b/docs/docroot/index.html.no
deleted file mode 100644
index d7553bce6d..0000000000
--- a/docs/docroot/index.html.no
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Testside Apache-installasjon</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
- <H1 ALIGN="CENTER">
- Det gikk bra! Apache er nå installert på denne maskinen!
- </H1>
- <P>
- Hvis du kan se denne siden har den eller de som driver dette nettstedet
- installert Apache Web server.
- Nå må denne testsiden erstattes med virkelig innhold.
- </P>
- <HR>
- <BLOCKQUOTE>
- Hvis du hadde ventet å se en annen side enn denne bør du
- <STRONG>ta kontakt med den som har ansvaret for nettstedet.</STRONG>
- (Prøv å sende e-post til <SAMP>&lt;webmaster@<EM>domene</EM>&gt;</SAMP>.)
- Selv om dette nettstedet kjøres på Apache, har det ingen annen
- tilknytning til Apache-gruppen som har utviklet programvaren.
- Vennligst ikke send post angående dette nettstedet eller dets
- innhold til Apache-gruppens programmerere. I så fall vil din henvendelse
- bli <STRONG><BIG>ignorert</BIG></STRONG>.
- </BLOCKQUOTE>
- <HR>
- <P>
- <A
- HREF="manual/index.html"
- >Dokumentasjon</A>
- for Apache er inkludert i denne pakken.
- </P>
- <P>
- Logoen under kan benyttes på en hvilken som helst maskin som kjører Apache.
- Takk for at du benytter Apache!
- </P>
- <DIV ALIGN="CENTER">
- <IMG SRC="apache_pb.gif" ALT="">
- </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.po.iso8859-2 b/docs/docroot/index.html.po.iso8859-2
deleted file mode 100644
index 8b030bd651..0000000000
--- a/docs/docroot/index.html.po.iso8859-2
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Strona testowa instalacji serwera Apache</TITLE>
- <META http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
- <!-- translated by Bart Grzybicki, bgrzybicki@morliny.pl - http://www.bgrzybicki.morliny.pl on 19th of December 2000 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
-
-
-<P>
-Je¿eli strona ta jest widoczna, oznacza to poprawn± instalacjê serwera Apache. Mo¿na ju¿ zamieniæ zawarto¶æ tej witryny.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">Czy zamiast spodziewanej witryny WWW widoczna jest ta?</H2>
-
-<P>
-Strona ta jest widoczna, poniewa¿ administrator serwera WWW zmieni³ jego konfiguracjê.
-Proszê <STRONG>skontaktowaæ siê z osob± odpowiedzialn± za zarz±dzanie tym serwerem.</STRONG> Apache Software Foundation, producent oprogramowania serwerowego Apache, nie administruje t± witryn± i nie jest w stanie pomóc w sprawach zwi±zanych z jej konfiguracj±.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P>
-Do niniejszej dystrybucji serwera Apache do³±czono anglojêzyczn± <A HREF="manual/index.html">dokumentacjê</A>.
-
-<P>
-Poni¿sze logo, "Powered by Apache", mo¿na stosowaæ bez ograniczeñ. Dziêkujemy za wybranie Apache'a!
-
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.pt b/docs/docroot/index.html.pt
deleted file mode 100644
index dbeb5ed0be..0000000000
--- a/docs/docroot/index.html.pt
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>Página de teste da instalação do Apache Web Server</TITLE>
-<!-- original translation for portuguese by Hugo Ramos, ramos@pop3r.com, Sat Jan 29 05:30:00 GMT 2000 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
-
-
-<P> Se est&aacute; a ver esta p&aacute;gina significa que a instala&ccedil;&atilde;o
- do Apache Web Server foi efectuada
- com sucesso. Pode agora adicionar conte&uacute;do a esta directoria e substituir
- esta p&aacute;gina.
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">Est&aacute; a ver esta p&aacute;gina em vez do website que
- esperava?</H2>
-
-<P> Esta p&aacute;gina est&aacute; neste momento activa porque o administrador
- deste site alterou a configura&ccedil;&atilde;o do web server. Por favor <STRONG>contacte
- a pessoa respons&aacute;vel pela manuten&ccedil;&atilde;o deste servidor.</STRONG>
- A Funda&ccedil;&atilde;o Apache Software (Apache Software Foundation), apesar
- de ter produzido o web server que o administrador deste site est&aacute; a usar,
- n&atilde;o tem qualquer tipo de responsabilidade pela manuten&ccedil;&atilde;o
- deste nem pode ajudar a resolver problemas de configura&ccedil;&atilde;o.
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P> A <A HREF="manual/">documenta&ccedil;&atilde;o</A> foi inclu&iacute;da
- juntamente com esta distribui&ccedil;&atilde;o.
-<P> A imagem abaixo pode ser usada livremente em qualquer site presente num servidor
- com o Apache Web Server instalado. Obrigado por usar o Apache Web Server!
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.pt-br b/docs/docroot/index.html.pt-br
deleted file mode 100644
index ece2a8a81d..0000000000
--- a/docs/docroot/index.html.pt-br
+++ /dev/null
@@ -1,47 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="GENERATOR" content="Mozilla/4.73 [en] (X11; I; Linux 2.2.15-4mdk i586) [Netscape]">
- <title>P&aacute;gina teste para a instala&ccedil;&atilde;o do Apache no
-Web Site</title>
-<!-- original translation Ricardo Oliva, rfoliva@writeme.com, Thu Dec 07
-19:51:00 PST 2000 -->
-<!-- Background white, links blue (unvisited), navy (visited), red
- (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Funcionou! O Apache Web Server foi instalado corretamente neste Web Site!</h1></center>
-Se voc&ecirc; est&aacute; vendo esta p&aacute;gina, isso quer dizer que o software
-Apache
-Web server foi instalado com sucesso. Agora, basta adicionar o conte&uacute;do
-ao diret&oacute;rio raiz e substituir esta p&aacute;gina tempor&aacute;ria, ou configurar o servidor
-para o seu conte&uacute;do real.
-<br>
-<hr>
-<blockquote>
-<center>
-<h3>
-<b>Est&aacute; vendo esta p&aacute;gina em vez do site que esperava?</b></h3></center>
-Esta p&aacute;gina foi carregada, pois provavelmente, o administrador modificou as
-configura&ccedil;&otilde;es
-deste servidor. Por favor, <b>contate o administrador do site para esclarecimentos.</b>
-(Tente enviar um e-mail para <tt>&lt;Webmaster@dominio></tt>.) A Apache
-Server Foundation, que desenvolveu o software (web server) utilizado pelo
-administrador, n&atilde;o tem nenhuma responsabilidade sobre a manuten&ccedil;&atilde;o desta
-p&aacute;gina e n&atilde;o poder&aacute; ajudar na resolu&ccedil;&atilde;o de problemas de
-configura&ccedil;&atilde;o.</blockquote>
-
-<hr>
-<p>A <a href="manual/index.html">documenta&ccedil;&atilde;o</a> do Apache foi inclu&iacute;da
-com esta distribui&ccedil;&atilde;o.
-<p>O Webmaster deste site &eacute; livre para utilizar a imagem abaixo num web
-server utilizando o Apache.
-<p>Obrigado por utilizar o Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.cp-1251 b/docs/docroot/index.html.ru.cp-1251
deleted file mode 100644
index e9c51afb6b..0000000000
--- a/docs/docroot/index.html.ru.cp-1251
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
- <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
- <title>Òåñòîâàÿ ñòðàíèöà óñòàíîâêè Apache</title>
-<!-- Áåëûé ôîí, ññûëêè: ñèíèå (íåïîñåù¸ííûå), ò¸ìíî-ôèîëåòîâûå (ïîñåù¸ííûå), êðàñíûå (ïîñåù¸ííûå) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-Åñëè Âû ýòî âèäèòå, ýòî çíà÷èò, ÷òî óñòàíîâêà
-ÏÎ âåá-ñåðâåðà Apache íà ýòîé
-ñèñòåìå çàâåðøèëàñü óñïåøíî. Âû ìîæåòå òåïåðü äîáàâëÿòü ñîäåðæèìîå â ýòó
-äèðåêòîðèþ è çàìåíèòü ýòó ñòðàíèöó.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-Âû âèäèòå ýòî âìåñòî îæèäàåìîé ñòðàíèöû?</h2></center>
-Ýòà ñòðàíèöà íàõîäèòñÿ çäåñü ïîòîìó, ÷òî àäìèíèñòðàòîð ñèñòåìû èçìåíèë
-êîíôèãóðàöèþ ýòîãî âåá-ñåðâåðà. Ïîæàëóéñòà, <b>ñâÿæèòåñü ñ ëèöîì, îòâåòñâåííûì
-çà ïîääåðæêó ýòîãî ñåðâåðà äëÿ âûÿñíåíèÿ âàøèõ âîïðîñîâ.</b> Apache Software
-Foundation, àâòîð ÏÎ âåá-ñåðâåðà, êîòîðûì ïîëüçóåòñÿ àäìèíèñòðàòîð ýòîé
-ñèñòåìû, íå ñâÿçàí ñ ïîääåðæêîé ýòîé ñèñòåìû è íå ìîæåò ïîìî÷ü&nbsp;Âàì
-ðàçðåøèòü ïðîáëåìû êîíôèãóðàöèè.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">Äîêóìåíòàöèÿ</a> ïî âåá-ñåðâåðó Apache ïðèëàãàåòñÿ
-ê êîìïëåêòó ÏÎ.
-<p>Âû ìîæåòå ñâîáîäíî èñïîëüçîâàòü ïèêòîãðàììó, íàõîäÿùóþñÿ íèæå, íà âåá-ñåðâåðå,
-èñïîëüçóþùèì ÏÎ Apache. Ñïàñèáî çà èñïîëüçîâàíèå Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.cp866 b/docs/docroot/index.html.ru.cp866
deleted file mode 100644
index 05fa119b3d..0000000000
--- a/docs/docroot/index.html.ru.cp866
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=cp866">
- <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
- <title>’¥á⮢ ï áâà ­¨æ  ãáâ ­®¢ª¨ Apache</title>
-<!-- ¥«ë© ä®­, áá뫪¨: ᨭ¨¥ (­¥¯®á¥éñ­­ë¥), âñ¬­®-䨮«¥â®¢ë¥ (¯®á¥éñ­­ë¥), ªà á­ë¥ (¯®á¥éñ­­ë¥) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-…᫨ ‚ë íâ® ¢¨¤¨â¥, íâ® §­ ç¨â, çâ® ãáâ ­®¢ª 
-Ž ¢¥¡-á¥à¢¥à  Apache ­  í⮩
-á¨á⥬¥ § ¢¥à訫 áì ãᯥ譮. ‚ë ¬®¦¥â¥ ⥯¥àì ¤®¡ ¢«ïâì ᮤ¥à¦¨¬®¥ ¢ íâã
-¤¨à¥ªâ®à¨î ¨ § ¬¥­¨âì íâã áâà ­¨æã.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-‚ë ¢¨¤¨â¥ íâ® ¢¬¥áâ® ®¦¨¤ ¥¬®© áâà ­¨æë?</h2></center>
-â  áâà ­¨æ  ­ å®¤¨âáï §¤¥áì ¯®â®¬ã, çâ®  ¤¬¨­¨áâà â®à á¨áâ¥¬ë ¨§¬¥­¨«
-ª®­ä¨£ãà æ¨î í⮣® ¢¥¡-á¥à¢¥à . ®¦ «ã©áâ , <b>á¢ï¦¨â¥áì á «¨æ®¬, ®â¢¥âᢥ­­ë¬
-§  ¯®¤¤¥à¦ªã í⮣® á¥à¢¥à  ¤«ï ¢ëïá­¥­¨ï ¢ è¨å ¢®¯à®á®¢.</b> Apache Software
-Foundation,  ¢â®à Ž ¢¥¡-á¥à¢¥à , ª®â®àë¬ ¯®«ì§ã¥âáï  ¤¬¨­¨áâà â®à í⮩
-á¨á⥬ë, ­¥ á¢ï§ ­ á ¯®¤¤¥à¦ª®© í⮩ á¨áâ¥¬ë ¨ ­¥ ¬®¦¥â ¯®¬®çì&nbsp;‚ ¬
-à §à¥è¨âì ¯à®¡«¥¬ë ª®­ä¨£ãà æ¨¨.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">„®ªã¬¥­â æ¨ï</a> ¯® ¢¥¡-á¥à¢¥àã Apache ¯à¨« £ ¥âáï
-ª ª®¬¯«¥ªâã Ž.
-<p>‚ë ¬®¦¥â¥ ᢮¡®¤­® ¨á¯®«ì§®¢ âì ¯¨ªâ®£à ¬¬ã, ­ å®¤ïéãîáï ­¨¦¥, ­  ¢¥¡-á¥à¢¥à¥,
-¨á¯®«ì§ãî騬 Ž Apache. ‘¯ á¨¡® §  ¨á¯®«ì§®¢ ­¨¥ Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.iso-ru b/docs/docroot/index.html.ru.iso-ru
deleted file mode 100644
index ef25c8012a..0000000000
--- a/docs/docroot/index.html.ru.iso-ru
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-5">
- <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
- <title>ÂÕáâÞÒÐï áâàÐÝØæÐ ãáâÐÝÞÒÚØ Apache</title>
-<!-- ±ÕÛëÙ äÞÝ, ááëÛÚØ: áØÝØÕ (ÝÕßÞáÕéñÝÝëÕ), âñÜÝÞ-äØÞÛÕâÞÒëÕ (ßÞáÕéñÝÝëÕ), ÚàÐáÝëÕ (ßÞáÕéñÝÝëÕ) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-µáÛØ ²ë íâÞ ÒØÔØâÕ, íâÞ ×ÝÐçØâ, çâÞ ãáâÐÝÞÒÚÐ
-¿¾ ÒÕÑ-áÕàÒÕàÐ Apache ÝÐ íâÞÙ
-áØáâÕÜÕ ×ÐÒÕàèØÛÐáì ãáßÕèÝÞ. ²ë ÜÞÖÕâÕ âÕßÕàì ÔÞÑÐÒÛïâì áÞÔÕàÖØÜÞÕ Ò íâã
-ÔØàÕÚâÞàØî Ø ×ÐÜÕÝØâì íâã áâàÐÝØæã.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-²ë ÒØÔØâÕ íâÞ ÒÜÕáâÞ ÞÖØÔÐÕÜÞÙ áâàÐÝØæë?</h2></center>
-ÍâÐ áâàÐÝØæÐ ÝÐåÞÔØâáï ×ÔÕáì ßÞâÞÜã, çâÞ ÐÔÜØÝØáâàÐâÞà áØáâÕÜë Ø×ÜÕÝØÛ
-ÚÞÝäØÓãàÐæØî íâÞÓÞ ÒÕÑ-áÕàÒÕàÐ. ¿ÞÖÐÛãÙáâÐ, <b>áÒïÖØâÕáì á ÛØæÞÜ, ÞâÒÕâáÒÕÝÝëÜ
-×Ð ßÞÔÔÕàÖÚã íâÞÓÞ áÕàÒÕàÐ ÔÛï ÒëïáÝÕÝØï ÒÐèØå ÒÞßàÞáÞÒ.</b> Apache Software
-Foundation, ÐÒâÞà ¿¾ ÒÕÑ-áÕàÒÕàÐ, ÚÞâÞàëÜ ßÞÛì×ãÕâáï ÐÔÜØÝØáâàÐâÞà íâÞÙ
-áØáâÕÜë, ÝÕ áÒï×ÐÝ á ßÞÔÔÕàÖÚÞÙ íâÞÙ áØáâÕÜë Ø ÝÕ ÜÞÖÕâ ßÞÜÞçì&nbsp;²ÐÜ
-àÐ×àÕèØâì ßàÞÑÛÕÜë ÚÞÝäØÓãàÐæØØ.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">´ÞÚãÜÕÝâÐæØï</a> ßÞ ÒÕÑ-áÕàÒÕàã Apache ßàØÛÐÓÐÕâáï
-Ú ÚÞÜßÛÕÚâã ¿¾.
-<p>²ë ÜÞÖÕâÕ áÒÞÑÞÔÝÞ ØáßÞÛì×ÞÒÐâì ßØÚâÞÓàÐÜÜã, ÝÐåÞÔïéãîáï ÝØÖÕ, ÝÐ ÒÕÑ-áÕàÒÕàÕ,
-ØáßÞÛì×ãîéØÜ ¿¾ Apache. ÁßÐáØÑÞ ×Ð ØáßÞÛì×ÞÒÐÝØÕ Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.koi8-r b/docs/docroot/index.html.ru.koi8-r
deleted file mode 100644
index db6ee830ed..0000000000
--- a/docs/docroot/index.html.ru.koi8-r
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
- <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
- <title>ôÅÓÔÏ×ÁÑ ÓÔÒÁÎÉÃÁ ÕÓÔÁÎÏ×ËÉ Apache</title>
-<!-- âÅÌÙÊ ÆÏÎ, ÓÓÙÌËÉ: ÓÉÎÉÅ (ÎÅÐÏÓÅÝ£ÎÎÙÅ), Ô£ÍÎÏ-ÆÉÏÌÅÔÏ×ÙÅ (ÐÏÓÅÝ£ÎÎÙÅ), ËÒÁÓÎÙÅ (ÐÏÓÅÝ£ÎÎÙÅ) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-åÓÌÉ ÷Ù ÜÔÏ ×ÉÄÉÔÅ, ÜÔÏ ÚÎÁÞÉÔ, ÞÔÏ ÕÓÔÁÎÏ×ËÁ
-ðï ×ÅÂ-ÓÅÒ×ÅÒÁ Apache ÎÁ ÜÔÏÊ
-ÓÉÓÔÅÍÅ ÚÁ×ÅÒÛÉÌÁÓØ ÕÓÐÅÛÎÏ. ÷Ù ÍÏÖÅÔÅ ÔÅÐÅÒØ ÄÏÂÁ×ÌÑÔØ ÓÏÄÅÒÖÉÍÏÅ × ÜÔÕ
-ÄÉÒÅËÔÏÒÉÀ É ÚÁÍÅÎÉÔØ ÜÔÕ ÓÔÒÁÎÉÃÕ.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-÷Ù ×ÉÄÉÔÅ ÜÔÏ ×ÍÅÓÔÏ ÏÖÉÄÁÅÍÏÊ ÓÔÒÁÎÉÃÙ?</h2></center>
-üÔÁ ÓÔÒÁÎÉÃÁ ÎÁÈÏÄÉÔÓÑ ÚÄÅÓØ ÐÏÔÏÍÕ, ÞÔÏ ÁÄÍÉÎÉÓÔÒÁÔÏÒ ÓÉÓÔÅÍÙ ÉÚÍÅÎÉÌ
-ËÏÎÆÉÇÕÒÁÃÉÀ ÜÔÏÇÏ ×ÅÂ-ÓÅÒ×ÅÒÁ. ðÏÖÁÌÕÊÓÔÁ, <b>Ó×ÑÖÉÔÅÓØ Ó ÌÉÃÏÍ, ÏÔ×ÅÔÓ×ÅÎÎÙÍ
-ÚÁ ÐÏÄÄÅÒÖËÕ ÜÔÏÇÏ ÓÅÒ×ÅÒÁ ÄÌÑ ×ÙÑÓÎÅÎÉÑ ×ÁÛÉÈ ×ÏÐÒÏÓÏ×.</b> Apache Software
-Foundation, Á×ÔÏÒ ðï ×ÅÂ-ÓÅÒ×ÅÒÁ, ËÏÔÏÒÙÍ ÐÏÌØÚÕÅÔÓÑ ÁÄÍÉÎÉÓÔÒÁÔÏÒ ÜÔÏÊ
-ÓÉÓÔÅÍÙ, ÎÅ Ó×ÑÚÁÎ Ó ÐÏÄÄÅÒÖËÏÊ ÜÔÏÊ ÓÉÓÔÅÍÙ É ÎÅ ÍÏÖÅÔ ÐÏÍÏÞØ&nbsp;÷ÁÍ
-ÒÁÚÒÅÛÉÔØ ÐÒÏÂÌÅÍÙ ËÏÎÆÉÇÕÒÁÃÉÉ.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">äÏËÕÍÅÎÔÁÃÉÑ</a> ÐÏ ×ÅÂ-ÓÅÒ×ÅÒÕ Apache ÐÒÉÌÁÇÁÅÔÓÑ
-Ë ËÏÍÐÌÅËÔÕ ðï.
-<p>÷Ù ÍÏÖÅÔÅ Ó×ÏÂÏÄÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÉËÔÏÇÒÁÍÍÕ, ÎÁÈÏÄÑÝÕÀÓÑ ÎÉÖÅ, ÎÁ ×ÅÂ-ÓÅÒ×ÅÒÅ,
-ÉÓÐÏÌØÚÕÀÝÉÍ ðï Apache. óÐÁÓÉÂÏ ÚÁ ÉÓÐÏÌØÚÏ×ÁÎÉÅ Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.utf8 b/docs/docroot/index.html.ru.utf8
deleted file mode 100644
index fc6694f616..0000000000
--- a/docs/docroot/index.html.ru.utf8
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
- <title>ТеÑÑ‚Ð¾Ð²Ð°Ñ Ñтраница уÑтановки Apache</title>
-<!-- Белый фон, ÑÑылки: Ñиние (непоÑещённые), тёмно-фиолетовые (поÑещённые), краÑные (поÑещённые) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-ЕÑли Ð’Ñ‹ Ñто видите, Ñто значит, что уÑтановка
-ПО веб-Ñервера Apache на Ñтой
-ÑиÑтеме завершилаÑÑŒ уÑпешно. Ð’Ñ‹ можете теперь добавлÑÑ‚ÑŒ Ñодержимое в Ñту
-директорию и заменить Ñту Ñтраницу.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-Ð’Ñ‹ видите Ñто вмеÑто ожидаемой Ñтраницы?</h2></center>
-Эта Ñтраница находитÑÑ Ð·Ð´ÐµÑÑŒ потому, что админиÑтратор ÑиÑтемы изменил
-конфигурацию Ñтого веб-Ñервера. ПожалуйÑта, <b>ÑвÑжитеÑÑŒ Ñ Ð»Ð¸Ñ†Ð¾Ð¼, ответÑвенным
-за поддержку Ñтого Ñервера Ð´Ð»Ñ Ð²Ñ‹ÑÑÐ½ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐ¸Ñ… вопроÑов.</b> Apache Software
-Foundation, автор ПО веб-Ñервера, которым пользуетÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратор Ñтой
-ÑиÑтемы, не ÑвÑзан Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Ñтой ÑиÑтемы и не может помочь&nbsp;Вам
-разрешить проблемы конфигурации.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">ДокументациÑ</a> по веб-Ñерверу Apache прилагаетÑÑ
-к комплекту ПО.
-<p>Ð’Ñ‹ можете Ñвободно иÑпользовать пиктограмму, находÑщуюÑÑ Ð½Ð¸Ð¶Ðµ, на веб-Ñервере,
-иÑпользующим ПО Apache. СпаÑибо за иÑпользование Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.sv b/docs/docroot/index.html.sv
deleted file mode 100644
index 377307f53d..0000000000
--- a/docs/docroot/index.html.sv
+++ /dev/null
@@ -1,43 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
- <head>
- <title>Testsida f&ouml;r Apache-installationen</title>
- </head>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <body
- bgcolor="#FFFFFF"
- text="#000000"
- link="#0000FF"
- vlink="#000080"
- alink="#FF0000"
- >
- <h1 align="CENTER">
- Det fungerade! Apache &auml;r installerad p&aring; denna maskin!
- </h1>
- <p>
- Om du kan se denna sida s&aring; har &auml;garen till denna maskin installerat
- webbserverprogramvaran Apache.<br>
- Denne m&aring;ste nu placera webbsidor i detta bibliotek och &auml;ndra p&aring; denna sida, eller
- peka servern mot ett annat bibliotek.
- </p>
- <hr>
- <blockquote>
- Om du f&ouml;rv&auml;ntat dig att se n&aring;got helt annat h&auml;r &auml;n denna sida, <strong>kontakta
- v&auml;nligen administrat&ouml;ren f&ouml;r den webbserver du f&ouml;rs&ouml;ker komma i kontakt med.</strong>
- (F&ouml;rs&ouml;k att skicka ett brev till <samp>&lt;webmaster@<em>domain</em>&gt;</samp>.)
- Apache Software Foundation har inget med denna webbplats att g&ouml;ra, s&aring; det &auml;r ingen id&eacute;
- att skicka mail till f&ouml;rfattarna av Apache r&ouml;rande denna webbplats.
- </blockquote>
- <hr>
- <p>
- Apache-<a href="manual/">dokumentationen</a> &auml;r inkluderad i denna distribution.
- </p>
- <p>
- Administrat&ouml;ren av denna webbplats f&aring;r g&auml;rna anv&auml;nda f&ouml;ljande bild till en webbplats som anv&auml;nder Apache.<br>
- Tack f&ouml;r att ni anv&auml;nder Apache!
- </p>
- <div align="CENTER">
- <img src="apache_pb.gif" alt="">
- </div>
- </body>
-</html>
diff --git a/docs/docroot/index.html.var b/docs/docroot/index.html.var
deleted file mode 100644
index 74d040211e..0000000000
--- a/docs/docroot/index.html.var
+++ /dev/null
@@ -1,127 +0,0 @@
-URI: index.html.ca
-Content-language: ca
-Content-type: text/html
-
-URI: index.html.cz.iso8859-2
-Content-language: cs
-Content-type: text/html;charset=ISO-8859-2
-
-URI: index.html.de
-Content-language: de
-Content-type: text/html
-
-URI: index.html.dk
-Content-language: da
-Content-type: text/html
-
-URI: index.html.ee
-Content-language: ee
-Content-type: text/html
-
-URI: index.html.el
-Content-language: el
-Content-type: text/html
-
-URI: index.html.en
-Content-language: en
-Content-type: text/html
-
-URI: index.html.es
-Content-language: es
-Content-type: text/html
-
-URI: index.html.et
-Content-language: et
-Content-type: text/html
-
-URI: index.html.fr
-Content-language: fr
-Content-type: text/html
-
-URI: index.html.he.iso8859-8
-Content-language: he
-Content-type: text/html;charset=ISO-8859-8
-
-URI: index.html.hu
-Content-language: hu
-Content-type: text/html
-
-URI: index.html.hr.iso8859-2
-Content-language: hr
-Content-type: text/html;charset=ISO-8859-2
-
-URI: index.html.it
-Content-language: it
-Content-type: text/html
-
-URI: index.html.ja.iso2022-jp
-Content-language: ja
-Content-type: text/html;charset=ISO-2022-JP
-
-URI: index.html.ko.euc-kr
-Content-language: ko
-Content-type: text/html;charset=EUC-KR
-
-URI: index.html.ltz.utf8
-Content-language: ltz
-Content-type: text/html;charset=UTF-8
-
-URI: index.html.lu.utf8
-Content-language: lu
-Content-type: text/html;charset=UTF-8
-
-URI: index.html.nl
-Content-language: nl
-Content-type: text/html
-
-URI: index.html.nn
-Content-language: nn
-Content-Type: text/html
-
-URI: index.html.no
-Content-language: no
-Content-type: text/html
-
-URI: index.html.po.iso8859-2
-Content-language: pl
-Content-type: text/html;charset=ISO-8859-2
-
-URI: index.html.pt
-Content-language: pt
-Content-type: text/html
-
-URI: index.html.pt-br
-Content-language: pt-br
-Content-type: text/html
-
-URI: index.html.ru.cp-1251
-Content-language: ru
-Content-type: text/html;charset=WINDOWS-1251
-
-URI: index.html.ru.cp866
-Content-language: ru
-Content-type: text/html;charset=CP866
-
-URI: index.html.ru.iso-ru
-Content-language: ru
-Content-type: text/html;charset=ISO-8859-5
-
-URI: index.html.ru.koi8-r
-Content-language: ru
-Content-type: text/html;charset=KOI8-r
-
-URI: index.html.ru.utf8
-Content-language: ru
-Content-type: text/html;charset=UTF-8
-
-URI: index.html.sv
-Content-language: sv
-Content-type: text/html
-
-URI: index.html.zh-cn.gb2312
-Content-language: zh-CN
-Content-type: text/html;charset=GB2312
-
-URI: index.html.zh-tw.big5
-Content-language: tw, zh-TW
-Content-type: text/html;charset=Big5
diff --git a/docs/docroot/index.html.zh-cn.gb2312 b/docs/docroot/index.html.zh-cn.gb2312
deleted file mode 100644
index b31d07daea..0000000000
--- a/docs/docroot/index.html.zh-cn.gb2312
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 FINAL//EN">
-<HTML>
-<head>
-<title>°²×°ApacheµÄ²âÊÔÒ³Ãæ</title>
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<p>ÄúÄÜ¿´¼ûÕâ¸öÒ³Ã棬˵Ã÷<a
-href="http://www.apache.org/foundation/preFAQ.html">Apache web
-server</a> ÒѾ­°²×°³É¹¦¡£Äú¿ÉÒÔÔÚÕâ¸öĿ¼ÖÐÔö¼ÓÄÚÈÝ£¬»òÕß°ÑÕâ¸öÒ³ÃæÌæ»»µô¡£</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">Õâ²»ÊÇÄãÏë¿´¼ûµÄÒ³Ãæ°É?</h2>
-
-<p>Ö®ËùÒԻῴ¼ûÕâ¸öÒ³Ã棬ÊÇÒòΪÍøÕ¾¹ÜÀíÔ±¸Ä±äÁËÕâ¸öÕ¾µãµÄÉèÖá£
-Èç¹ûÓÐÒÉÎÊ£¬Çë<strong>×Éѯά»¤´ËÕ¾µãµÄÈËÔ±¡£</strong>
-ApacheÈí¼þ»ù½ð»á, ¼´´ËÕ¾µãËùʹÓõÄÍøÕ¾·þÎñÆ÷Èí¼þµÄ¿ª·¢Õߣ¬
-²»¸ºÔð´ËÕ¾µãµÄά»¤¹¤×÷£¬Ò²ÎÞ·¨ÎªÄú½â¾öÉèÖÃÉϵÄÎÊÌâ¡£</p>
-
-<hr width="50%" size="8" />
-<p>Apache <a href="../manual/">Îĵµ</a>ÒѾ­°üº¬ÔÚ´Ë·¢ÐаæÖС£</p>
-
-<p>Äú¿ÉÒÔÔÚʹÓÃApacheµÄÍøÕ¾·þÎñÆ÷ÉÏ£¬×ÔÓɵØʹÓÃÏÂÃæµÄͼƬ¡£¸ÐлʹÓÃApache£¡</p>
-
-<div align="center"><img src="apache_pb.gif" alt="" /></div>
-</body>
-</html>
diff --git a/docs/docroot/index.html.zh-tw.big5 b/docs/docroot/index.html.zh-tw.big5
deleted file mode 100644
index 1ca02124a7..0000000000
--- a/docs/docroot/index.html.zh-tw.big5
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
- <TITLE>¦w¸Ë Apache ªº´ú¸Õºô­¶</TITLE>
- </HEAD>
- <!-- Background white, links blue (unvisited), navy (visited), red (active)-->
- <BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
- >
-
-
-<P>
-¦pªG§A¥i¥H¬Ý¨£¦¹­¶¡A³oªí¥Ü§Aªº
-<A HREF="http://httpd.apache.org/">Apache Web Server</A>
-¤w¸g¦w¸Ë¦¨¥\¡C
-§A¥i¥H¼W¥[¤º®e¨ì³o­Ó¥Ø¿ý¡A©Î§â³o­Óºô­¶´«±¼¡C<P>
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">¨S¦³¬Ý¨ì§A·Q¬Ýªººô¯¸¶Ü ?</H2>
-
-<P>
-³o­Óºô­¶¤§©Ò¥H·|¦b³oùØ¡A¨º¬O¦]¬°ºô¯¸ºÞ²zªÌ¤w¸g§ó§ï³o­Óºô¯¸ªº³]©w¡C
-­Y¦³°ÝÃD, ½Ð»P <STRONG>ºûÅ@³o­Ó¦øªA¾¹ªº¤H­ûÁpµ¸</STRONG>¡C
-Apache ³nÅé°òª÷·|¡A¤]´N¬O¶}µo³o®M³nÅ骺³æ¦ì¡A»P¦¹ºô¯¸¨ÃµL¥ô¦óÃö«Y¡A
-¦Ó¥B¤]µLªkÀ°§A¸Ñ¨M³]©w¤Wªº°ÝÃD¡C
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<P>
-Apache ªº
-<A HREF="manual/">¤å¥ó</A>
-¤w¸g¥]§t¦b¸Óª©¥»¤¤¡C
-
-<P>
-§A¥i¥H¦b¨Ï¥Î Apache ªººô¯¸¦øªA¾¹¤W¡A¦Û¥Ñªº¨Ï¥Î¤U­±¤§¹Ï¥Ü¡A
-·PÁ±z¨Ï¥Î Apache¡I
-<BR><BR>
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-
-</BODY>
-</HTML>
diff --git a/docs/doxygen.conf b/docs/doxygen.conf
deleted file mode 100644
index 9ff8250b23..0000000000
--- a/docs/doxygen.conf
+++ /dev/null
@@ -1,52 +0,0 @@
-PROJECT_NAME=Apache
-
-#INPUT=srclib/apr
-INPUT=.
-RECURSIVE=YES
-FILE_PATTERNS=*.h
-
-OUTPUT_DIRECTORY=docs/dox
-
-ENABLE_PREPROCESSING=YES
-MACRO_EXPANSION=YES
-QUIET=YES
-EXPAND_ONLY_PREDEF=YES
-#EXPAND_AS_DEFINED=
-# not sure why this doesn't work as EXPAND_AS_DEFINED, it should!
-PREDEFINED="APR_DECLARE(x)=x" \
- "APR_DECLARE_NONSTD(x)=x" \
- "AP_DECLARE_HOOK(ret,name,args)=ret name args;" \
- "AP_DECLARE(x)=x" \
- "AP_DECLARE_NONSTD(x)=x" \
- "APR_HAS_THREADS" \
- "APR_HAS_MMAP" \
- APR_HAS_INLINE \
- APR_HAS_FLOCK_SERIALIZE \
- APR_HAS_SYSVSEM_SERIALIZE \
- APR_HAS_POSIXSEM_SERIALIZE \
- APR_HAS_FCNTL_SERIALIZE \
- APR_HAS_PROC_PTHREAD_SERIALIZE \
- APR_HAS_RWLOCK_SERIALIZE \
- APR_HAS_SHARED_MEMORY \
- APR_HAS_SENDFILE \
- APR_HAS_FORK \
- APR_HAS_RANDOM \
- APR_HAS_XLATE \
- APR_HAS_OTHER_CHILD \
- APR_HAS_DSO \
- APR_HAS_SO_ACCEPTFILTER \
- APR_HAS_UNICODE_FS \
- APR_HAS_PROC_INVOKED \
- APR_HAS_USER \
- APR_HAS_LARGE_FILES \
- APR_HAS_XTHREAD_FILES \
- DOXYGEN= \
- APU_DECLARE_DATA= \
- __pre_nw__= \
- "APU_DECLARE(x)=x"
-
-OPTIMIZE_OUTPUT_FOR_C=YES
-
-FULL_PATH_NAMES=YES
-# some autoconf guru needs to make configure set this correctly...
-STRIP_FROM_PATH=/var/www/lxr/source
diff --git a/docs/error/HTTP_BAD_GATEWAY.html.var b/docs/error/HTTP_BAD_GATEWAY.html.var
deleted file mode 100644
index fbd1d9bdcf..0000000000
--- a/docs/error/HTTP_BAD_GATEWAY.html.var
+++ /dev/null
@@ -1,235 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Chybná brána!"
---><!--#include virtual="include/top.html" -->
-
- Proxy server obdr¾el od nadøazeného
- serveru chybnou odpovìï.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Fehlerhaftes Gateway!"
---><!--#include virtual="include/top.html"-->
-
- Der Proxy-Server erhielt eine fehlerhafte Antwort
- eines &uuml;bergeordneten Servers oder Proxies.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Bad Gateway!"
---><!--#include virtual="include/top.html" -->
-
- The proxy server received an invalid
- response from an upstream server.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Puerta de enlace err&oacute;nea!"
---><!--#include virtual="include/top.html" -->
-
- El servidor origen recibi&oacute; informaci&oacute;n
- inv&aacute;lida por parte del servidor destino.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Gateway incorrecte!"
---><!--#include virtual="include/top.html" -->
-
- Le serveur proxy a re&ccedil;u une r&eacute;ponse
- incorrecte de la part d'un serveur sup&eacute;rieur.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Gateway errato!"
---><!--#include virtual="include/top.html" -->
-
- Il server proxy ha ricevuto una risposta
- non valida dal server precedente.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="À߸øµÈ °ÔÀÌÆ®¿þÀÌ!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ÇÁ·Ï½Ã ¼­¹ö°¡ ´õ À­ÂÊÀÇ ¼­¹ö·ÎºÎÅÍ À߸øµÈ ÀÀ´äÀ» ¹Þ¾Ò½À´Ï´Ù.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Verkeerde Gateway!"
---><!--#include virtual="include/top.html" -->
-
- De proxy server heeft een ongeldig
- antwoord ontvangen van een gecontacteerde server.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Nieprawid³owa brama!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Serwer otrzyma³ nieprawid³ow± odpowied¼
- od kolejnego serwera.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Gateway inv&aacute;lido!"
---><!--#include virtual="include/top.html" -->
-
- O servidor proxy recebeu uma resposta
- inv&aacute;lida do servidor destino.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Gateway invalid!"
---><!--#include virtual="include/top.html" -->
-
- Serverul proxy a primit un raspuns invalid
- de la serverul precedent.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Felaktig Gateway!"
---><!--#include virtual="include/top.html" -->
-
- Proxyservern mottog ett felaktigt svar fr&aring;n
- en tidigare server.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Bad Gateway!"
---><!--#include virtual="include/top.html" -->
-
- Vekil (proxy) sunucu üstbirim (upstream) sunucusundan
- anlams&#305;z bir cevap ald&#305;.
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
- <!--#include virtual="include/spacer.html" -->
- <!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_BAD_REQUEST.html.var b/docs/error/HTTP_BAD_REQUEST.html.var
deleted file mode 100644
index 408fa0f64b..0000000000
--- a/docs/error/HTTP_BAD_REQUEST.html.var
+++ /dev/null
@@ -1,172 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Chybný po¾adavek!"
---><!--#include virtual="include/top.html" -->
-
- Vá¹ prohlí¾eè (nebo proxy server) vyslal po¾adavek,
- kterému tento server nerozumìl.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Fehlerhafte Anfrage!"
---><!--#include virtual="include/top.html" -->
-
- Ihr Browser (oder Proxy) hat eine ung&uuml;ltige Anfrage
- gesendet, die vom Server nicht beantwortet werden kann.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Bad request!"
---><!--#include virtual="include/top.html" -->
-
- Your browser (or proxy) sent a request that
- this server could not understand.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Solicitud err&oacute;nea!"
---><!--#include virtual="include/top.html" -->
-
- El navegador ha solicitado una operaci&oacute;n
- que no puede ser procesada por el servidor.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Demande incorrecte!"
---><!--#include virtual="include/top.html" -->
-
- Votre navigateur (ou votre proxy) a envoy&eacute;
- une demande que ce serveur n'a pas comprise.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Richiesta incomprensibile!"
---><!--#include virtual="include/top.html" -->
-
- Il tuo browser (o il proxy) ha inviato a
- questo server una richiesta incomprensibile.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="À߸øµÈ ¿äû!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ºê¶ó¿ìÀú ¶Ç´Â ÇÁ·Ï½Ã°¡
- ÀÌ ¼­¹ö°¡ ó¸®ÇÒ ¼ö ¾ø´Â À߸øµÈ ¿äûÀ» º¸³Â½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Slechte vraag!"
---><!--#include virtual="include/top.html" -->
-
- Uw browser (of proxy) stuurde een vraag die
- deze server niet kon begrijpen.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Nieprawid³owe ¿±danie!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Twoja przegl±darka (lub serwer po¶rednicz±cy) wys³a³ ¿±danie,
- którego ten serwer nie potrafi obs³u¿yæ.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Requisi&ccedil;&atilde;o Inv&aacute;lida!"
---><!--#include virtual="include/top.html" -->
-
- Seu "browser" (ou o servidor proxy) enviou uma
- requisi&ccedil;&atilde;o inv&aacute;lida ao servidor.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Cerere incomprensibila!"
---><!--#include virtual="include/top.html" -->
-
- Browserul (sau proxy-ul) dumneavoastra a trimis
- serverului o cerere ce nu poate fi procesata.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Felaktig f&ouml;rfr&aring;gan!"
---><!--#include virtual="include/top.html" -->
-
- Din webbl&auml;sare eller proxy skickade en f&ouml;rfr&aring;gan
- som denna server inte kunde f&ouml;rst&aring;.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Bad request!"
---><!--#include virtual="include/top.html" -->
-
- Gezgininiz (veya vekil sunucunuz) bu sunucunun
- tan&#305;mad&#305;&#287;&#305;
- bir istemde bulundu.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_FORBIDDEN.html.var b/docs/error/HTTP_FORBIDDEN.html.var
deleted file mode 100644
index fae32f3333..0000000000
--- a/docs/error/HTTP_FORBIDDEN.html.var
+++ /dev/null
@@ -1,301 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Pøístup odmítnut!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Nemáte právo pro pøístup do po¾adovaného adresáøe. Buï neexistuje ¾ádný
- dokument s&nbsp;obsahem (tzv. index), nebo je adresáø chránìn proti ètení.
-
- <!--#else -->
-
- Nemáte právo pro pøístup k&nbsp;po¾adovanému objektu.
- Buï je chránìn proti ètení, nebo není serverem èitelný.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Zugriff verweigert!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Der Zugriff auf das angeforderte Verzeichnis ist nicht m&ouml;glich.
- Entweder ist kein Index-Dokument vorhanden oder das Verzeichnis
- ist zugriffsgesch&uuml;tzt.
-
- <!--#else -->
-
- Der Zugriff auf das angeforderte Objekt ist nicht m&ouml;glich.
- Entweder kann es vom Server nicht gelesen werden oder es
- ist zugriffsgesch&uuml;tzt.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Access forbidden!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- You don't have permission to access the requested directory.
- There is either no index document or the directory is read-protected.
-
- <!--#else -->
-
- You don't have permission to access the requested object.
- It is either read-protected or not readable by the server.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Acceso prohibido!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Usted no tiene permiso para accesar a la direcci&oacute;n
- solicitada. Existe la posibilidad de que el directorio
- este protegido contra lectura o que no exista la
- documentaci&oacute;n requerida.
-
- <!--#else -->
-
- Usted no tiene permiso de accesar al objeto solicitado.
- Existe la posibilidad de que este protegido contra
- lectura o que no haya podido ser leido por el servidor.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Acc&egrave;s interdit!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Vous n'avez pas le droit d'acc&eacute;der au r&eacute;pertoire
- demand&eacute;. Soit il n'y a pas de document index soit le r&eacute;pertoire
- est prot&eacute;g&eacute;.
-
- <!--#else -->
-
- Vous n'avez pas le droit d'acc&eacute;der &agrave; l'objet
- demand&eacute;. Soit celui-ci est prot&eacute;g&eacute;, soit il ne peut
- &ecirc;tre lu par le serveur.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Accesso negato!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Non disponi dei permessi necessari per accedere alla
- directory richiesta oppure non esiste il documento indice.
-
- <!--#else -->
-
- Non disponi dei permessi necessari per accedere all'oggetto
- richiesto, oppure l'oggetto non pu&ograve; essere letto dal server.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="Á¢±ÙÀÌ °ÅºÎµÊ!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- ¿äûÇÑ µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.
- µð·ºÅ丮¿¡ ù ÆäÀÌÁö°¡ ¾ø°Å³ª ¾Æ´Ï¸é Àб⠺¸È£°¡ µÇ¾î ÀÖ½À´Ï´Ù.
-
- <!--#else -->
-
- ¿äûÇÑ °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.
- Àб⠺¸È£°¡ µÇ¾î Àְųª À¥¼­¹ö°¡ ÀÐÀ» ¼ö ¾øµµ·Ï µÇ¾î ÀÖ½À´Ï´Ù.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Toegang verboden!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- U hebt niet de toestemming om toegang te krijgen tot de gevraagde map.
- Er is of wel geen index document of de map is beveiligd tegen lezen.
-
- <!--#else -->
-
- U hebt niet de toestemming om toegang te krijgen tot de gevraagde map.
- Die is ofwel beveiligd tegen lezen of onleesbaar door de server.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Zabroniony dostêp!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Nie masz prawa dostêpu do ¿±danego katalogu. W katalogu nie
- ma indeksu lub katalog jest zabezpieczony przed odczytem.
-
- <!--#else -->
-
- Nie masz dostêpu do ¿±danego obiektu. Jest on zabezpieczony
- przed odczytem lub nie mo¿e byæ odczytany przez serwer.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Acesso Proibido!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Voc&ecirc; n&atilde;o tem permiss&atilde;o para acessar o
- diret&oacute;rio requisitado.
- Pode n&atilde;o existir o arquivo de &iacute;ndice ou
- o diret&oacute;rio pode estar protegido contra leitura.
-
- <!--#else -->
-
- Voc&ecirc; n&atilde;o tem premiss&atilde;o para acessar o
- objeto requisitado. Ele pode estar protegido contra leitura ou
- n&atilde;o ser leg&iacute;vel pelo servidor.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Accesul interzis!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Nu aveti permisiunea sa accesati directorul cerut.
- Nu este nici un document index sau directorul este protejat la citire.
-
- <!--#else -->
-
- Nu aveti permisiunea sa accesati obiectul cerut.
- Este protejat la citire sau nu poate fi citit de server.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="&Aring;tkomst f&ouml;rbjuden!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Du har inte tillr&auml;ckliga r&auml;ttigheter f&ouml;r att f&aring;
- tillg&aring;ng till den &ouml;nskade katalogen. Det existerar inget
- indexdokument eller s&aring; &auml;r katalogen l&auml;sskyddad.
-
- <!--#else -->
-
- Du har inte tillr&auml;ckliga r&auml;ttigheter f&ouml;r att f&aring;
- tillg&aring;ng till det &ouml;nskade objektet. Objektet &auml;r
- l&auml;sskyddat eller inte l&auml;sbart f&ouml;r servern.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Access forbidden!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
- Talep etti&#287;iniz dizine eri&#351;im izniniz yok.
- Ya belirteç doküman yok, ya da dizin okumaya kar&#351;&#305; korumal&#305;.
-
- <!--#else -->
-
- Talep etti&#287;iniz dizine eri&#351;im izniniz yok.
- Dizin, ya okumaya kar&#351;&#305; korumal&#305;, ya da sunucu taraf?ndan
- okunam&#305;yor.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_GONE.html.var b/docs/error/HTTP_GONE.html.var
deleted file mode 100644
index 31796e5018..0000000000
--- a/docs/error/HTTP_GONE.html.var
+++ /dev/null
@@ -1,343 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Zdroj ji¾ není dále dostupný!"
---><!--#include virtual="include/top.html" -->
-
- Po¾adované URL ji¾ není na tomto serveru k dispozici, ani není k dispozici
- ¾ádná adresa k pøesmìrování.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Informujte, prosím, autora
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">odkazující
- stránky</a>, ¾e odkaz je zastaralý.
-
- <!--#else -->
-
- Pokud jste následovali odkaz z&nbsp;cizí stránky, kontaktujte, prosím,
- jejího autora.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Objekt nicht mehr verf&uuml;gbar!"
---><!--#include virtual="include/top.html" -->
-
- Der angeforderte URL existiert auf dem Server nicht mehr
- und wurde dauerhaft entfernt.
- Eine Weiterleitungsadresse ist nicht verf&uuml;gbar.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Bitte informieren Sie den Autor der
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">verweisenden
- Seite</a>, dass der Link nicht mehr aktuell ist.
-
- <!--#else -->
-
- Falls Sie einem Link von einer anderen Seite gefolgt sind,
- informieren Sie bitte den Autor dieser Seite hier&uuml;ber.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Resource is no longer available!"
---><!--#include virtual="include/top.html" -->
-
- The requested URL is no longer available on this server and there is no
- forwarding address.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Please inform the author of the
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">referring
- page</a> that the link is outdated.
-
- <!--#else -->
-
- If you followed a link from a foreign page, please contact the
- author of this page.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Recurso no disponible!"
---><!--#include virtual="include/top.html" -->
-
- Los recursos solicitados ya no est&aacute;n disponibles en
- este servidor y no existe una direcci&oacute;n alternativa.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Le solicitamos que comunique al autor de la
- <a href="<!--#echo encoding="url" var="HTTP_REFERER"
- -->">p&aacute;gina referente</a> que el enlace est&aacute; obsoleto.
-
- <!--#else -->
-
- Si usted sigui&oacute; el enlace desde una p&aacute;gina externa,
- por favor contacte con el autor de esa p&aacute;gina.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Cette ressource n'existe plus!"
---><!--#include virtual="include/top.html" -->
-
- L'URL demand&eacute;e n'est plus accessible sur ce serveur et il
- n'y a pas d'adresse de suite.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Nous vous prions d'informer l'auteur de
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">la
- page en question</a> que la r&eacute;f&eacute;rence n'est plus actuelle.
-
- <!--#else -->
-
- Si vous avez suivi une r&eacute;f&eacute;rence issue d'une page autre,
- veuillez contacter l'auteur de cette page.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="La risorsa non &egrave; pi&ugrave; disponibile!"
---><!--#include virtual="include/top.html" -->
-
- L'URL richiesto non &egrave; pi&ugrave; disponibile su questo server
- e non esistono indirizzi verso i quali sia possibile inoltrare
- la richiesta.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Per favore, informa l'autore della
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">pagina
- di provenienza</a> che il link non &egrave; pi&ugrave; valido.
-
- <!--#else -->
-
- Se sei arrivato da una pagina esterna, informa l'autore della
- pagina di provenienza che il link non &egrave; pi&ugrave; valido.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="°´Ã¼°¡ ¾ø¾îÁ³À½!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¿äûÇÑ URLÀº ´õ ÀÌ»ó ÀÌ ¼­¹ö¿¡ ³²¾ÆÀÖÁö ¾ÊÀ¸¸ç,
- ±× °´Ã¼°¡ ¿Å°ÜÁø ´Ù¸¥ URL ¿ª½Ã ³²¾ÆÀÖÁö ¾Ê½À´Ï´Ù.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">ÀÌÀü
- ÆäÀÌÁö</a>ÀÇ ¸¸µçÀÌ¿¡°Ô ÁÖ¼Ò°¡ À߸øµÇ¾ú´Ù°í ¾Ë·ÁÁֽñ⠹ٶø´Ï´Ù.
-
- <!--#else -->
-
- ´Ù¸¥ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ µû¶ó¿À¼Ì´Ù¸é, ±× ÆäÀÌÁöÀÇ ¸¸µçÀÌ¿¡°Ô ¿¬¶ôÀ» ÇϽñâ
- ¹Ù¶ø´Ï´Ù.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Dit object is niet langer beschikbaar!"
---><!--#include virtual="include/top.html" -->
-
- De gevraagde URL is niet langer beschikbaar op deze server en er is geen
- doorverwijsadres.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Gelieve aan de auteur van
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">deze pagina</a>
- te melden dat deze link niet langer actueel is.
-
- <!--#else -->
-
- Indien u deze link hebt gekregen van een andere pagina, gelieve
- de auteur van deze pagina te contacteren.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Zasób usuniêty!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Poszukiwany zasób nie jest ju¿ dostêpny na tym serwerze i nie
- podano nowego adresu zasobu.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Prosimy poinformowaæ autora
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">referuj±cej
- strony</a> o nieaktualnym linku.
-
- <!--#else -->
-
- Je¶li pod±¿y³e¶ za linkiem z innej strony skontaktuj siê z jej
- autorem.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Recurso n&atilde;o dispon&iacute;vel!"
---><!--#include virtual="include/top.html" -->
-
- A URL solicitada n&atilde;o est&aacute; dispon&iacute;vel neste servidor
- e n&atilde;o existe um endere&ccedil;o alternativo.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Por favor informe o autor da
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">p&aacute;gina
- referida</a> que a URL est&aacute; desatualizada.
-
- <!--#else -->
-
- Se voc&ecirc; seguiu um "link" de uma p&aacute;gina externa, por favor
- entre em contato com o autor desta p&aacute;gina e o informe sobre a
- mudan&ccedil;a do "link".
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Resursa nu mai este disponibila!"
---><!--#include virtual="include/top.html" -->
-
- URL-ul cerut nu mai este disponibil pe acest server si nu
- exista o adresa de inaintare.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Va rugam informati autorul
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">paginii
- referite</a> ca link-ul nu mai este de actualitate.
-
- <!--#else -->
-
- Va rugam contactati autorul acestei pagini daca ati urmat
- un link dintr-o pagina externa.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Resursen inte l&auml;ngre tillg&auml;nglig!"
---><!--#include virtual="include/top.html" -->
-
- Den &ouml;nskade adressen &auml;r inte l&auml;ngre tillg&auml;nglig hos
- denna server och det finns inte n&aring;gon adress f&ouml;r vidarebefodran.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- V&auml;nligen informera f&ouml;rfattaren bakom
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">den aktuella
- sidan</a> att l&auml;nken &auml;r inaktuell.
-
- <!--#else -->
-
- Om du f&ouml;ljde en l&auml;nk fr&aring;n en extern sida, v&auml;nligen
- kontakta f&ouml;rfattaren av den sidan.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Resource is no longer available!"
---><!--#include virtual="include/top.html" -->
-
- Talep etti&#287;iniz URL bu sunucu üzerinde bar&#305;nd&#305;r&#305;lm&#305;yor
- ve herhangi bir yöneltme de mevcut de&#287;il.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Lütfen
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">referans sayfan&#305;n</a>
- yazar&#305;na, bu ba&#287;lant&#305;n&#305;n güncel
- olmad&#305;&#287;&#305;n&#305; bildirin.
-
- <!--#else -->
-
- Yabanc&#305; bir sayfadan bu ba&#287;lant&#305;y&#305; izlediyseniz,
- lütfen sözkonusu sayfan&#305;n yazar&#305; ile ileti&#351;ime geçin.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var b/docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var
deleted file mode 100644
index 4fea8f4558..0000000000
--- a/docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var
+++ /dev/null
@@ -1,365 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Chyba serveru!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Nastala vnitøní chyba a server nebyl schopen
- dokonèit Vá¹ po¾adavek.
-
- <!--#include virtual="include/spacer.html" -->
-
- Chybová zpráva
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Nastala vnitøní chyba a server nebyl schopen
- dokonèit Vá¹ po¾adavek. Buï je server
- pøetí¾en, nebo do¹lo k&nbsp;chybì v&nbsp;CGI skriptu.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Serverfehler!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Die Anfrage kann nicht beantwortet werden, da im Server
- ein interner Fehler aufgetreten ist.
-
- <!--#include virtual="include/spacer.html" -->
-
- Fehlermeldung:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Die Anfrage kann nicht beantwortet werden, da im Server
- ein interner Fehler aufgetreten ist.
- Der Server ist entweder &uuml;berlastet oder ein Fehler in
- einem CGI-Skript ist aufgetreten.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Server error!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- The server encountered an internal error and was
- unable to complete your request.
-
- <!--#include virtual="include/spacer.html" -->
-
- Error message:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- The server encountered an internal error and was
- unable to complete your request. Either the server is
- overloaded or there was an error in a CGI script.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Error en el servidor!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- El servidor encontro un error interno y fue
- imposible completar su solicitud.
-
- <!--#include virtual="include/spacer.html" -->
-
- Mensaje de error:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- El servidor encontro un error interno y fue
- imposible completar su solicitud.
- Existe tambien la posibilidad de que el servidor
- este sobrecargado o de alg&uacute;n error en un
- programa de CGI.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Erreur du serveur!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Le serveur a &egrave;t&eacute; victime d'une erreur interne et n'a pas
- &eacute;t&eacute; capable de faire aboutir votre requ&ecirc;te.
-
- <!--#include virtual="include/spacer.html" -->
-
- Message d'erreur:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Le serveur a &egrave;t&eacute; victime d'une erreur interne et n'a pas
- &eacute;t&eacute; capable de faire aboutir votre requ&ecirc;te.
- Soit le server est surcharg&eacute; soit il s'agit d'une erreur dans
- le script CGI.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Errore del server!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Il server ha generato un errore interno e non &egrave;
- in grado di soddisfare la richiesta.
-
- <!--#include virtual="include/spacer.html" -->
-
- Messaggio di errore:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Il server ha generato un errore interno e non &egrave;
- in grado di soddisfare la richiesta. Il server potrebbe
- essere sovraccarico oppure si &egrave; verificato un
- errore in uno script CGI.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="¼­¹ö ¿À·ù!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- ¼­¹ö¿¡ ³»ºÎ ¿À·ù°¡ ¹ß»ýÇÏ¿© ¿äûÀ» ³¡±îÁö ó¸®ÇÏÁö ¸øÇß½À´Ï´Ù.
-
- <!--#include virtual="include/spacer.html" -->
-
- ¿À·ù ³»¿ë:
- <br /><!--#echo var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- ¼­¹ö¿¡ ³»ºÎ ¿À·ù°¡ »ý°Ü ¿äûÀ» ³¡±îÁö ó¸®ÇÏÁö ¸øÇß½À´Ï´Ù.
- ¼­¹ö¿¡ °úºÎÇÏ°¡ °É·È°Å³ª ¾Æ´Ï¸é CGI ÇÁ·Î±×·¥¿¡ ¿À·ù°¡ ÀÖ¾ú½À´Ï´Ù.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Server fout!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- <!--#include virtual="include/spacer.html" -->
-
- Foutbericht:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- De server kreeg een interne fout en kon
- uw vraag niet beantwoorden. De server is overbelast
- of er was een fout in een CGI script.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="B³±d serwera!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Serwer napotka³ b³±d wewnêtrzny i nie jest w stanie
- zrealizowaæ twojego ¿±dania.
-
- <!--#include virtual="include/spacer.html" -->
-
- Informacja o b³êdzie:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Serwer napotka³ b³±d wewnêtrzny i nie jest w stanie
- zrealizowaæ twojego ¿±dania. Serwer jest przeci±¿ony lub
- napotka³ na b³±d w skrypcie CGI.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Erro interno do Servidor!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- O servidor encontrou um erro interno e n&atilde;o pode
- completar sua requisi&ccedil;&atilde;o.
-
- <!--#include virtual="include/spacer.html" -->
-
- Mensagem de Erro:
- <br /><!--#echo var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- O servidor encontrou um erro interno e n&atilde;o
- foi poss&iacute;vel completar sua requisi&ccedil;&atilde;o.
- O servidor est&aacute; sobrecarregado ou existe um
- erro em um script CGI.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Eroare server!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Serverul a intalnit o eroare interna si nu a
- putut rezolva cererea dumneavoastra.
-
- <!--#include virtual="include/spacer.html" -->
-
- Mesajul de eroare :
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Serverul a intalnit o eroare interna si nu a
- putut rezolva cererea dumneavoastra. Serverul este
- supraincarcat sau a fost o eroare intr-un script CGI.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Serverfel!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Servern r&aring;kade ut f&ouml;r ett internt fel och det var inte m&ouml;jligt
- att slutf&ouml;ra din beg&auml;ran.
-
- <!--#include virtual="include/spacer.html" -->
-
- Felmeddelande:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Servern r&aring;kade ut f&ouml;r ett internt fel och det var inte m&ouml;jligt
- att slutf&ouml;ra din beg&auml;ran. Servern &auml;r antingen &ouml;verbelastad
- eller s&aring; inneh&aring;ller CGI-skriptet fel.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Server error!"
---><!--#include virtual="include/top.html" -->
-
- <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
- Sunucu içine bir hata olu&#351;tu ve sunucu talebinize hizmet vermekte ba&#351;ar&#305;l&#305; olamad&#305;.
-
- <!--#include virtual="include/spacer.html" -->
-
- Hata mesaj&#305;:
- <br /><!--#echo encoding="none" var="REDIRECT_ERROR_NOTES" -->
-
- <!--#else -->
-
- Sunucu içine bir hata olu&#351;tu ve sunucu talebinize hizmet vermekte ba&#351;ar&#305;l&#305; olamad&#305;.
- Ya sunucuya çok yüklenildi, ya da CGI betiklerinde hata belirdi.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_LENGTH_REQUIRED.html.var b/docs/error/HTTP_LENGTH_REQUIRED.html.var
deleted file mode 100644
index f4f967ca9d..0000000000
--- a/docs/error/HTTP_LENGTH_REQUIRED.html.var
+++ /dev/null
@@ -1,177 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Chybná hlavièka Content-Length!"
---><!--#include virtual="include/top.html" -->
-
- Po¾adavek metodou <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- vy¾aduje korektní hlavièku <code>Content-Length</code>.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Content-Length-Angabe fehlerhaft!"
---><!--#include virtual="include/top.html" -->
-
- Die Anfrage kann nicht beantwortet werden.
- Bei Verwendung der <!--#echo var="REDIRECT_REQUEST_METHOD" -->-Methode
- mu&szlig; ein korrekter <code>Content-Length</code>-Header
- angegeben werden.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Bad Content-Length!"
---><!--#include virtual="include/top.html" -->
-
- A request with the <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- method requires a valid <code>Content-Length</code> header.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Content-Length err&oacute;neo!"
---><!--#include virtual="include/top.html" -->
-
- Una solicitud con el m&eacute;todo <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- necesita una cabecera <code>Content-Length</code> v&aacute;lida.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Longueur du contenu ill&eacute;gal!"
---><!--#include virtual="include/top.html" -->
-
- Une requ&ecirc;te utilisant la m&eacute;thode <!--#echo
- var="REDIRECT_REQUEST_METHOD" --> n&eacute;cessite un header valable
- <code>Content-Length</code> (indiquant la longueur).
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Campo Content-Length non valido!"
---><!--#include virtual="include/top.html" -->
-
- Una richiesta con il metodo
- <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- richiede che venga specificato un header <code>Content-Length</code>
- valido.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="À߸øµÈ Content-Length!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"--> ¹æ½ÄÀ» ¾²´Â
- ¿äûÀº ¿Ã¹Ù¸¥ <code>Content-Length</code> Çì´õµµ ÇÔ²² º¸³»¾ß¸¸ ÇÕ´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Ongeldige lengte inhoud!"
---><!--#include virtual="include/top.html" -->
-
- Een vraag met het <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- type methode heeft een correcte <code>Content-Length</code> lijn nodig.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="B³êdne Content-Length!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- ¯±danie <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- wymaga poprawnego nag³ówka <code>Content-Length</code>.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Content-Length Inv&aacute;lido!"
---><!--#include virtual="include/top.html" -->
-
- Uma requisi&ccedil;&atilde;o
- do m&eacute;todo <!--#echo var="REDIRECT_REQUEST_METHOD"-->
- requer um cabe&ccedil;alho <code>Content-Length</code> v&aacute;lido.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Content-Length invalid!"
---><!--#include virtual="include/top.html" -->
-
- O cerere cu metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- necesita un header <code>Content-Length</code> valid.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Felaktig Content-Length!"
---><!--#include virtual="include/top.html" -->
-
- En f&ouml;rfr&aring;gan med <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- metoden kr&auml;ver ett korrekt <code>Content-Length</code> huvud.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Bad Content-Length!"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo var="REDIRECT_REQUEST_METHOD" --> metodunu kullanan bir talep
- geçerli bir <code>Content-Length</code> (içerik uzunlu&#287;u) ba&#351;l&#305;&#287;&#305; gerektirir.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_METHOD_NOT_ALLOWED.html.var b/docs/error/HTTP_METHOD_NOT_ALLOWED.html.var
deleted file mode 100644
index cdd0cc9dcb..0000000000
--- a/docs/error/HTTP_METHOD_NOT_ALLOWED.html.var
+++ /dev/null
@@ -1,172 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Metoda nepovolena!"
---><!--#include virtual="include/top.html" -->
-
- Metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- není pro po¾adované URL povolena.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Methode nicht erlaubt!"
---><!--#include virtual="include/top.html" -->
-
- Die <!--#echo var="REDIRECT_REQUEST_METHOD" -->-Methode
- ist f&uuml;r den angeforderten URL nicht erlaubt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Method not allowed!"
---><!--#include virtual="include/top.html" -->
-
- The <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- method is not allowed for the requested URL.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;M&eacute;todo no permitido!"
---><!--#include virtual="include/top.html" -->
-
- El <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- m&eacute;todo utilizado por su solicitud no est&aacute;
- permitido por el enlace.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="M&eacute;thode interdite!"
---><!--#include virtual="include/top.html" -->
-
- La m&eacute;thode <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- n'est pas utilisable pour l'URL requise.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Metodo non consentito!"
---><!--#include virtual="include/top.html" -->
-
- Il metodo <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- non &egrave; consentito per l'URL richiesto.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="Çã¿ëµÇÁö ¾Ê´Â ¿äû ¹æ½Ä!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"--> ¹æ½ÄÀº
- ¿äûÇÑ URL¿¡ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Type methode niet toegelaten!"
---><!--#include virtual="include/top.html" -->
-
- Het <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- type methode is niet toegelaten voor de gevraagde URL.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Niedozwolona metoda!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- jest niedozwolona dla podanego URLa.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="M&eacute;todo n&atilde;o permitido!"
---><!--#include virtual="include/top.html" -->
-
- O m&eacute;todo <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- n&atilde;o &eacute; permitido para a URL requisitada.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Metoda nepermisa!"
---><!--#include virtual="include/top.html" -->
-
- Metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- nu este permisa pentru URL-ul cerut.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Metoden inte till&aring;ten!"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- metoden &auml;r inte till&aring;ten f&ouml;r den f&ouml;rfr&aring;gade
- adressen.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Method not allowed!"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo var="REDIRECT_REQUEST_METHOD" --> yöntemi talep etti&#287;iniz URL için kullan&#305;lamaz.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_NOT_ACCEPTABLE.html.var b/docs/error/HTTP_NOT_ACCEPTABLE.html.var
deleted file mode 100644
index cdca67797f..0000000000
--- a/docs/error/HTTP_NOT_ACCEPTABLE.html.var
+++ /dev/null
@@ -1,172 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Nenalezen ¾ádný akceptovatelný objekt!"
---><!--#include virtual="include/top.html" -->
-
- Adekvátní reprezentace po¾adoveného zdroje
- nebyla na tomto serveru nalezena.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Kein passendes Objekt gefunden!"
---><!--#include virtual="include/top.html" -->
-
- Unter dem angeforderten URL konnte kein geeignetes Objekt
- auf dem Server gefunden werden, das dem vom Browser
- geforderten Format entsprechen w&uuml;rde.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="No acceptable object found!"
---><!--#include virtual="include/top.html" -->
-
- An appropriate representation of the requested resource
- could not be found on this server.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;No se encontr&oacute; ning&uacute; objeto aceptable!"
---><!--#include virtual="include/top.html" -->
-
- Una representaci&oacute;n apropiada de los recursos
- solicitados no ha podido ser localizada en
- este servidor.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="L'objet trouv&eacute; n'est pas acceptable!"
---><!--#include virtual="include/top.html" -->
-
- Une repr&eacute;sentation appropri&eacute;e de la ressource requise
- n'a pu &ecirc;tre trouv&eacute;e sur ce serveur.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Nessun oggetto accettabile!"
---><!--#include virtual="include/top.html" -->
-
- Questo server non riesce a trovare una rappresentazione
- appropriata per la risorsa richiesta.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="Àû´çÇÑ °´Ã¼ ¾øÀ½!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¿äûÇÑ °´Ã¼ÀÇ Àû´çÇÑ ÇüŸ¦ ÀÌ ¼­¹ö¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Geen acceptabel object gevonden!"
---><!--#include virtual="include/top.html" -->
-
- Een toereikende representatie van het gevraagde object
- kon niet gevonden worden op deze server.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Brak akceptowalnego obiektu!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Nie znaleziono akceptowalnego obiektu reprezentuj±cego
- ¿±dany zasób.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Objeto apropriado n&atilde;o encontrado!"
---><!--#include virtual="include/top.html" -->
-
- N&atilde;o existe uma representa&ccedil;&atilde;o apropriada
- para o recurso requisitado neste servidor.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Nici un obiect acceptabil gasit!"
---><!--#include virtual="include/top.html" -->
-
- Nici o reprezentare potrivita a resursei cerute
- nu a putut fi gasita pe acest server.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Inget acceptabelt objekt hittat!"
---><!--#include virtual="include/top.html" -->
-
- En l&auml;mplig representation av den efterfr&aring;gade
- resursen kunde inte hittas p&aring; denna server.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="No acceptable object found!"
---><!--#include virtual="include/top.html" -->
-
- Sunucu üzerinde, talep etti&#287;iniz kayna&#287;&#305;n
- uygun bir kar&#351;&#305;l&#305;&#287;&#305; bulunamad&#305;.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_NOT_FOUND.html.var b/docs/error/HTTP_NOT_FOUND.html.var
deleted file mode 100644
index 9ee71d4a8a..0000000000
--- a/docs/error/HTTP_NOT_FOUND.html.var
+++ /dev/null
@@ -1,353 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Objekt nenalezen!"
---><!--#include virtual="include/top.html" -->
-
- Po¾adované URL nebylo na tomto serveru nalezeno.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Zdá se, ¾e odkaz na
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">odkazující
- stránce</a> je chybný nebo zastaralý. Informujte, prosím, autora
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">této stránky</a>
- o&nbsp;chybì.
-
- <!--#else -->
-
- Pokud jste zadal(a) URL ruènì, zkontrolujte, prosím,
- zda jste zadal(a) URL správnì, a zkuste to znovu.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Objekt nicht gefunden!"
---><!--#include virtual="include/top.html" -->
-
- Der angeforderte URL konnte auf dem Server nicht gefunden werden.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Der Link auf der
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">verweisenden
- Seite</a> scheint falsch oder nicht mehr aktuell zu sein.
- Bitte informieren Sie den Autor
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">dieser Seite</a>
- &uuml;ber den Fehler.
-
- <!--#else -->
-
- Sofern Sie den URL manuell eingegeben haben,
- &uuml;berpr&uuml;fen Sie bitte die Schreibweise und versuchen Sie es erneut.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Object not found!"
---><!--#include virtual="include/top.html" -->
-
- The requested URL was not found on this server.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- The link on the
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">referring
- page</a> seems to be wrong or outdated. Please inform the author of
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">that page</a>
- about the error.
-
- <!--#else -->
-
- If you entered the URL manually please check your
- spelling and try again.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Objeto no encontrado!"
---><!--#include virtual="include/top.html" -->
-
- El enlace requerido no ha sido localizado en
- este servidor.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- El enlace en la
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">p&aacute;gina
- referente</a> parece tener algun error o ha expirado. Por favor
- comunique al autor de
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">la
- p&aacute;gina</a> el error.
-
- <!--#else -->
-
- Si usted proporcion&oacute; el enlace de manera manual le solicitamos
- que por favor revise los datos e intentelo de nuevo.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Objet non trouv&eacute;!"
---><!--#include virtual="include/top.html" -->
-
- L'URL requise n'a pu etre trouv&eacute;e sur ce serveur.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- La r&eacute;f&eacute;rence sur
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">la page
- cit&eacute;e</a>
- semble &ecirc;tre erron&eacute;e ou perim&eacute;e. Nous vous prions
- d'informer l'auteur de
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">cette page</a>
- de cette erreur.
-
- <!--#else -->
-
- Si vous avez tap&eacute; l'URL &agrave; la main, veuillez v&eacute;rifier
- l'orthographe et r&eacute;essayer.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Oggetto non trovato!"
---><!--#include virtual="include/top.html" -->
-
- L'URL richiesto non esiste su questo server.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Il link della
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">pagina da cui
- sei arrivato</a> potrebbe essere errato o non essere pi&ugrave; valido.
- Per favore, informa dell'errore l'autore della
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">pagina</a>.
-
- <!--#else -->
-
- Se hai scritto l'URL a mano, per favore controlla che
- non ci siano errori.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="°´Ã¼ ¾øÀ½!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¿äûÇÑ URLÀ» ÀÌ ¼­¹ö¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">ÀÌÀü
- ÆäÀÌÁö</a>¿¡ ÀÖ´Â ¸µÅ©°¡ À߸øµÇ¾ú°Å³ª ¿À·¡µÇ¾î ¾ø¾îÁø °Í °°½À´Ï´Ù.
- <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">±× ÆäÀÌÁö</a>¸¦
- ¸¸µçÀÌ¿¡°Ô ÀÌ »ç½ÇÀ» ¾Ë·ÁÁֽñ⠹ٶø´Ï´Ù.
-
- <!--#else -->
-
- URLÀ» Á÷Á¢ ÀÔ·ÂÇÏ¼Ì´Ù¸é ¹Ù¸£°Ô ÀÔ·ÂÇϼ̴ÂÁö È®ÀÎÇÏ½Ã°í ´Ù½Ã ½ÃµµÇϽñâ
- ¹Ù¶ø´Ï´Ù.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Object niet gevonden!"
---><!--#include virtual="include/top.html" -->
-
- De gevraagde URL was niet gevonden op deze server.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- De link op
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">deze pagina
- pagina</a> is verkeerd of achterhaald. Gelieve de auteur van
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">die pagina</a>
- in te lichten over deze fout.
-
- <!--#else -->
-
- Indien u de URL manueel hebt ingevuld, gelieve uw
- spelling te controleren en probeer opnieuw.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Nie znaleziono obiektu!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Nie znaleziono ¿±danego URLa na tym serwerze.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Odno¶nik na
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">referuj±cej stronie
- </a> wydaje siê byæ nieprawid³owy lub nieaktualny. Poinformuj autora
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">tej strony</a>
- o problemie.
-
- <!--#else -->
- Je¶li wpisa³e¶ URLa rêcznie, sprawd¼, czy nie siê nie pomyli³e¶.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Objeto n&atilde;o encontrado!"
---><!--#include virtual="include/top.html" -->
-
- A URL requisitada n&atilde;o foi encontrada neste servidor.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- O link na
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">p&aacute;gina
- referida</a> parece estar com algum erro ou desatualizado. Por favor informe o
- autor <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">desta
- p&aacute;gina</a> sobre o erro.
-
- <!--#else -->
-
- Se voc&ecirc; digitou o endere&ccedil;o (URL) manualmente,
- por favor verifique novamente a sintaxe do endere&ccedil;o.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Obiectul nu a fost gasit!"
---><!--#include virtual="include/top.html" -->
-
- URL-ul cerut nu a fost gasit pe acest server.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- Link-ul de pe
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">pagina
- de unde ati venit</a> pare a fi gresit sau invechit. Va rugam informati autorul
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">acestei pagini</a>
- despre eroare.
-
- <!--#else -->
-
- Daca ati introdus URL-ul manual, va rugam verificati
- corectitudinea si incercati din nou.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Objektet hittas ej!"
---><!--#include virtual="include/top.html" -->
-
- Den efterfr&aring;gade adressen hittades inte p&aring; denna server.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- L&auml;nken p&aring; den
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">tidigare sidan</a>
- verkar vara felaktig eller inaktuell. V&auml;nligen informera f&ouml;rfattaren av
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">sidan</a>
- om felet.
-
- <!--#else -->
-
- Om du skrev in adressen manuellt s&aring; kontrollera din stavning och
- f&ouml;rs&ouml;k igen.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Object not found!"
---><!--#include virtual="include/top.html" -->
-
- Talep etti&#287;iniz URL, sunucu üzerinde bulunmuyor.
-
- <!--#if expr="$HTTP_REFERER" -->
-
- <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">Referans sayfa</a>
- üzerindeki ba&#287;lant&#305; güncel de&#287;il.
- Lütfen <a href="<!--#echo encoding="url" var="HTTP_REFERER" -->">referans sayfa</a>'n&#305;n
- yazar&#305;n&#305; konuyla ilgili bilgilendirin.
-
- <!--#else -->
-
- URL'i kendiniz elle girdiyseniz, yaz&#305;m&#305;n&#305;z&#305; denetleyip tekrar deneyin.
-
- <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_NOT_IMPLEMENTED.html.var b/docs/error/HTTP_NOT_IMPLEMENTED.html.var
deleted file mode 100644
index 37b166c1d3..0000000000
--- a/docs/error/HTTP_NOT_IMPLEMENTED.html.var
+++ /dev/null
@@ -1,163 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Nelze zpracovat po¾adavek!"
---><!--#include virtual="include/top.html" -->
-
- Server nepodporuje akci po¾adovanou prohlí¾eèem.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Anfrage nicht ausf&uuml;hrbar!"
---><!--#include virtual="include/top.html" -->
-
- Die vom Browser angeforderte Aktion wird vom Server
- nicht unterst&uuml;tzt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Cannot process request!"
---><!--#include virtual="include/top.html" -->
-
- The server does not support the action requested by the browser.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Solicitud no procesada!"
---><!--#include virtual="include/top.html" -->
-
- El navegador est&aacute; solicitando una acci&oacute;n
- que no puede ser procesada.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="La requ&ecirc;te ne peut &ecirc;tre effectu&eacute;e!"
---><!--#include virtual="include/top.html" -->
-
- Le serveur n'est pas en mesure d'effectuer l'action
- requise par le navigateur.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="La richiesta non pu&ograve; essere soddisfatta!"
---><!--#include virtual="include/top.html" -->
-
- Il server non supporta il tipo di azione richiesta dal browser.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="¿äû ó¸® ½ÇÆÐ!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ºê¶ó¿ìÀú°¡ º¸³½ ¿äûÀ» ÀÌ ¼­¹ö°¡ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Kan vraag niet verwerken!"
---><!--#include virtual="include/top.html" -->
-
- De server ondersteunt de actie, gevraagd door de browser, niet.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="¯±danie nieobs³ugiwane!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Ten serwer nie obs³uguje ¿±dania przes³anego przez przegl±darkê.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="A requisi&ccedil;&atilde;o n&atilde;o pode ser processada!"
---><!--#include virtual="include/top.html" -->
-
- O servidor n&atilde;o suporta a a&ccedil;&atilde;o requisitada pelo
- seu "browser".
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Cererea nu poate fi procesata!"
---><!--#include virtual="include/top.html" -->
-
- Serverul nu suporta actiunea ceruta de browser.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Kan ej utf&ouml;ra f&ouml;rfr&aring;gan!"
---><!--#include virtual="include/top.html" -->
-
- Servern st&ouml;djer inte den handling som &ouml;nskades
- av webbl&auml;saren.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Cannot process request!"
---><!--#include virtual="include/top.html" -->
-
- Sunucu, gezgin taraf&#305;ndan talep edilen yöntemi desteklemiyor.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_PRECONDITION_FAILED.html.var b/docs/error/HTTP_PRECONDITION_FAILED.html.var
deleted file mode 100644
index 4483d47edf..0000000000
--- a/docs/error/HTTP_PRECONDITION_FAILED.html.var
+++ /dev/null
@@ -1,167 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Vstupní podmínka selhala!"
---><!--#include virtual="include/top.html" -->
-
- Vstupní podmínka pro po¾adavek o&nbsp;zadané URL nesplnila pozitivní
- vyhodnocení.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Vorbedingung negativ!"
---><!--#include virtual="include/top.html" -->
-
- Die Vorbedingung unter dem angeforderten URL wurde
- negativ ausgewertet.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Precondition failed!"
---><!--#include virtual="include/top.html" -->
-
- The precondition on the request for the URL failed positive evaluation.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Precondici&oacute;n err&oacute;nea!"
---><!--#include virtual="include/top.html" -->
-
- La precondici&oacute;n para que exista una
- conexi&oacute;n a la direcci&oacute;n solicitada es falsa.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Pr&eacute;condition n&eacute;gative!"
---><!--#include virtual="include/top.html" -->
-
- La pr&eacute;condition pour l'URL requise a &eacute;t&eacute;
- &eacute;valu&eacute;e n&eacute;gativement.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Criteri di precondizione non soddisfatti!"
---><!--#include virtual="include/top.html" -->
-
- I criteri di precondizione per consentire l'invio dell'URL
- richiesto non sono stati soddisfatti.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="ÁÖ¾îÁø Á¶°Ç ½ÇÆÐ!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¹Ì¸® ÁÖ¾îÁø Á¶°ÇÀÌ ¸¸Á·µÇÁö ¾Ê¾Æ¼­ URL ¿äûÀ» ó¸®ÇÒ ¼ö ¾ø½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Startvoorwaarde niet voldaan!"
---><!--#include virtual="include/top.html" -->
-
- Een startvoorwaarde werd niet voldaan bij verwerking van de vraag naar de URL.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Niespe³niony warunek!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Warunek wstêpny dla URLa nie zosta³ spe³niony.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Falha de precondi&ccedil;&atilde;o!"
---><!--#include virtual="include/top.html" -->
-
- A condi&ccedil;&atilde;o necess&aacute;ria para a
- requisi&ccedil;&atilde;o da URL foi avaliada como falsa.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Precondition failed!"
---><!--#include virtual="include/top.html" -->
-
- Preconditionarea pentru cererea URL-ului nu a fost evaluata pozitiv.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="N&ouml;dv&auml;ndig f&ouml;ruts&auml;ttning misslyckades!"
---><!--#include virtual="include/top.html" -->
-
- Den n&ouml;dv&auml;ndiga f&ouml;ruts&auml;ttningen f&ouml;r
- adressf&ouml;rfr&aring;gan passerade inte utv&auml;rderingen
- med acceptabelt resultat.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Precondition failed!"
---><!--#include virtual="include/top.html" -->
-
- URL talebinin ön&#351;art&#305;, olumlu süreci
- ba&#351;ar&#305;s&#305;zl&#305;kla sonland&#305;rd&#305;.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var b/docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
deleted file mode 100644
index 56a2ea63b7..0000000000
--- a/docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
+++ /dev/null
@@ -1,183 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Po¾adovaná entita je pøíli¹ velká!"
---><!--#include virtual="include/top.html" -->
-
- Metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- nedovoluje pøenos dat nebo objem dat
- pøesahuje kapacitní limit.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="&Uuml;bergebene Daten zu gro&szlig;!"
---><!--#include virtual="include/top.html" -->
-
- Die bei der Anfrage &uuml;bermittelten Daten sind f&uuml;r
- die <!--#echo var="REDIRECT_REQUEST_METHOD" -->-Methode
- nicht erlaubt oder die Datenmenge hat das Maximum &uuml;berschritten.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Request entity too large!"
---><!--#include virtual="include/top.html" -->
-
- The <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- method does not allow the data transmitted, or the data volume
- exceeds the capacity limit.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Entidad solicitada demasiado larga!"
---><!--#include virtual="include/top.html" -->
-
- Los recursos establecidos no permiten peticiones con
- el <!--#echo var="REDIRECT_REQUEST_METHOD" --> m&eacute;todo
- suministrado por su solicitud, o, la cantidad de datos
- provistos exceden los l&iacute;mites de capacidad.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Volume de la demande trop grand!"
---><!--#include virtual="include/top.html" -->
-
- La m&eacute;thode <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- n'autorise pas le transfert de ces donn&eacute;es ou bien le volume
- des donn&eacute;es exc&egrave;de la limite de capacit&eacute;.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Richiesta troppo grande!"
---><!--#include virtual="include/top.html" -->
-
- Il metodo <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- non consente di trasferire dati, oppure la quantit&agrave; di dati
- richiesti &egrave; eccessiva.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="³Ê¹« ±ä ¿äû!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"--> ¹æ½ÄÀÇ
- ¿äûÀ¸·Î´Â ³»¿ëÀ» º¸³¾ ¼ö ¾ø°Å³ª, ¶Ç´Â º¸³»¿Â ³»¿ëÀÌ ±× ¹æ½Ä¿¡¼­ Çã¿ëÇÏ´Â
- ÃÖ´ë ±æÀ̸¦ ³Ñ¾ú½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Volume van gevraagde entiteit te groot!"
---><!--#include virtual="include/top.html" -->
-
- Het <!--#echo var="REDIRECT_REQUEST_METHOD" --> type methode laat niet toe
- data te versturen of het datavolume is groter dan maximaal toegelaten.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="¯±dany obiekt zbyt du¿y!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- nie zezwala na typ przesy³anych danych lub rozmiar danych przekracza
- ustalony limit.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Volume da dados muito grande!"
---><!--#include virtual="include/top.html" -->
-
- O m&eacute;todo <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- n&atilde;o permite a transmiss&atilde;o dos dados,
- ou o volume de dados excede a capacidade limite.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Entitate ceruta prea mare!"
---><!--#include virtual="include/top.html" -->
-
- Metoda <!--#echo var="REDIRECT_REQUEST_METHOD" -->
- nu permite transmiterea datelor, sau volumul de date
- depaseste limita capacitatii.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="F&ouml;r stor enhet vid f&ouml;rfr&aring;gan!"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo var="REDIRECT_REQUEST_METHOD" --> metoden till&aring;ter
- inte den skickade datan eller s&aring; &ouml;verskrider datavolymen
- kapacitetsniv&aring;n.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Request entity too large!"
---><!--#include virtual="include/top.html" -->
-
- <!--#echo var="REDIRECT_REQUEST_METHOD" --> yöntemi iletilen
- veri tipini desteklemez, ya da veri hacmi kapasite limitlerini a&#351;&#305;yor.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_REQUEST_TIME_OUT.html.var b/docs/error/HTTP_REQUEST_TIME_OUT.html.var
deleted file mode 100644
index dcdfa4a09c..0000000000
--- a/docs/error/HTTP_REQUEST_TIME_OUT.html.var
+++ /dev/null
@@ -1,176 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Vypr¹el èasový limit po¾adavku!"
---><!--#include virtual="include/top.html" -->
-
- Server uzavøel sí»ové spojení, proto¾e prohlí¾eè
- nedokonèil po¾adavek ve stanoveném èase.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Zeitlimit &uuml;berschritten!"
---><!--#include virtual="include/top.html" -->
-
- Der Server konnte nicht mehr l&auml;nger auf die Beendigung
- der Browseranfrage warten; die Netzwerkverbindung wurde
- vom Server geschlossen.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Request time-out!"
---><!--#include virtual="include/top.html" -->
-
- The server closed the network connection because the browser
- didn't finish the request within the specified time.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;La solicitud ha excedido el tiempo de espera permitido!"
---><!--#include virtual="include/top.html" -->
-
- El servidor ha cerrado la conexi&oacute;n de red
- debido a que el navegador no termin&oacute; la solicitud
- dentro del tiempo especificado.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Requ&ecirc;te trop longue !"
---><!--#include virtual="include/top.html" -->
-
- Le serveur a ferm&eacute; la connection car le navigateur n'a pas
- fini la requ&ecirc;te dans le temps sp&eacute;cifi&eacute;.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Time-out della richiesta!"
---><!--#include virtual="include/top.html" -->
-
- Il server ha chiuso la connessione in quanto &egrave; stato
- superato il limite di tempo entro il quale il browser avrebbe
- dovuto eseguire la richiesta.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="¿äû ½Ã°£ ÃÊ°ú!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ºê¶ó¿ìÀú°¡ ³Ê¹« ¿À·§µ¿¾È ¿äûÀ» ³¡³»Áö ¾Ê¾Æ¼­ ¼­¹ö°¡ ³×Æ®¿öÅ© ¿¬°áÀ»
- °­Á¦·Î ²÷¾ú½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Tijdlimiet overschreden!"
---><!--#include virtual="include/top.html" -->
-
- De server heeft de netwerkverbinding gesloten omdat de browser
- de vraag niet heeft be&euml;indigd binnen een gestelde tijd.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Przedawnione ¿±danie!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Serwer zamkn±³ po³±czenie sieciowe poniewa¿ przegl±darka
- nie zakoñczy³a operacji w przewidywanym czasie.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Tempo excedido!"
---><!--#include virtual="include/top.html" -->
-
- O servidor encerrou a conex&atilde;o porque o "browser"
- n&atilde;o finalizou a requisi&ccedil;&atilde;o dentro
- do tempo limite.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Time-out al cererii!"
---><!--#include virtual="include/top.html" -->
-
- Serverul a terminat conexiunea cu browserul pentru ca acesta
- nu a terminat cererea in limita timpului specificat.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Request time-out!"
---><!--#include virtual="include/top.html" -->
-
- Servern st&auml;ngde f&ouml;rbindelsen d&auml;rf&ouml;r att
- webbl&auml;saren inte avslutade f&ouml;rfr&aring;gan inom
- f&ouml;rbest&auml;md tid.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Request time-out!"
---><!--#include virtual="include/top.html" -->
-
- Sunucu a&#287; ba&#287;lant&#305;s&#305;n&#305; kapatt&#305; çünkü gezgin
- talebini belirlenmi&#351; süre içinde tamamlayamad&#305;.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var b/docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
deleted file mode 100644
index 150d0bc546..0000000000
--- a/docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
+++ /dev/null
@@ -1,176 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Po¾adované URI je pøíli¹ velké!"
---><!--#include virtual="include/top.html" -->
-
- Délka po¾adovaného URL pøesahuje kapacitní limit tohoto
- serveru. Po¾adavek nemù¾e být zpracován.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="&Uuml;bergebener URI zu gro&szlig;!"
---><!--#include virtual="include/top.html" -->
-
- Der bei der Anfrage &uuml;bermittelte URI &uuml;berschreitet
- die maximale L&auml;nge.
- Die Anfrage kann nicht ausgef&uuml;hrt werden.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Submitted URI too large!"
---><!--#include virtual="include/top.html" -->
-
- The length of the requested URL exceeds the capacity limit for
- this server. The request cannot be processed.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Direcci&oacute;n suministrada demasiado larga!"
---><!--#include virtual="include/top.html" -->
-
- Su solicitud no puede procesarse debido a que la
- longitud del enlace excede la capacidad l&iacute;mite del
- servidor.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="L'URI demandee est trop longue!"
---><!--#include virtual="include/top.html" -->
-
- La longueur de l'URL demand&eacute;e exc&egrave;de la limite de
- capacit&egrave; pour ce serveur. Nous ne pouvons donner suite
- &agrave; votre requ&ecirc;te.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="URI troppo lungo!"
---><!--#include virtual="include/top.html" -->
-
- La lunghezza dell'indirizzo (URL) trasmesso supera il
- limite massimo imposto da questo server.
- La richiesta non pu&ograve; essere soddisfatta.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="³Ê¹« ±ä URI!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¿äûÇÑ URLÀÌ ³Ê¹« ±æ¾î¼­ ÀÌ ¼­¹ö°¡ ó¸®ÇÒ ¼ö ¾ø½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Aangeboden URI te groot!"
---><!--#include virtual="include/top.html" -->
-
- De lengte van de aangeboden URL overschreidt het maximum
- voor deze server. De vraag kan niet verwerkt worden.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Zbyt d³ugie URI!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- D³ugo¶æ ¿±danego URLa przekracza limit ustanowiony dla tego
- serwera. ¯±danie nie mo¿e zostaæ zrealizowane.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="URL excede limite!"
---><!--#include virtual="include/top.html" -->
-
- O tamanho do endere&ccedil;o (URL) excede a capacidade limite
- desse servidor. A requisi&ccedil;&atilde;o n&atilde;o pode ser
- processada.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="URL-ul submis este prea mare!"
---><!--#include virtual="include/top.html" -->
-
- Lungimea URL-ului cerut depaseste limita capacitatii pentru
- acest server. Cererea nu poate fi procesata.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Efterfr&aring;gad URI f&ouml;r stor!"
---><!--#include virtual="include/top.html" -->
-
- L&auml;ngden p&aring; adressen som efterfr&aring;gas &ouml;verskrider
- kapacitetsgr&auml;nsen f&ouml;r denna server. F&ouml;rfr&aring;gan kan
- inte verkst&auml;llas.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Submitted URI too large!"
---><!--#include virtual="include/top.html" -->
-
- Talep edilen URL'nin uzunlu&#287;u, sunucunun kapasite limitlerini a&#351;&#305;yor.
- Talep i&#351;lenemiyor.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_SERVICE_UNAVAILABLE.html.var b/docs/error/HTTP_SERVICE_UNAVAILABLE.html.var
deleted file mode 100644
index ec870340db..0000000000
--- a/docs/error/HTTP_SERVICE_UNAVAILABLE.html.var
+++ /dev/null
@@ -1,190 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Slu¾ba není dostupná!"
---><!--#include virtual="include/top.html" -->
-
- Server doèasnì nemù¾e zpracovat Vá¹ po¾adavek
- kvùli údr¾bì nebo kapacitním problémùm.
- Zkuste to, prosím, pozdìji.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Zugriff nicht m&ouml;glich!"
---><!--#include virtual="include/top.html" -->
-
- Der Server ist derzeit nicht in der Lage die Anfrage
- zu bearbeiten. Entweder ist der Server derzeit &uuml;berlastet
- oder wegen Wartungsarbeiten nicht verf&uuml;gbar.
- Bitte versuchen Sie es sp&auml;ter wieder.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Service unavailable!"
---><!--#include virtual="include/top.html" -->
-
- The server is temporarily unable to service your
- request due to maintenance downtime or capacity
- problems. Please try again later.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Servicio no disponible!"
---><!--#include virtual="include/top.html" -->
-
- El servidor no puede atender su solicitud por
- el momento debido a problemas de mantenimiento
- o de capacidad.
-
- Le solicitamos que por favor repita la operaci&oacute;n
- m&aacute;s tarde.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Service inaccessible!"
---><!--#include virtual="include/top.html" -->
-
- En raison de travaux de maintenance ou de probl&egrave;mes
- de capacit&eacute; le serveur n'est pas en mesure de r&eacute;pondre
- &agrave; votre requ&ecirc;te pour l'instant. Veuillez r&eacute;essayer
- plus tard.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Servizio non disponibile!"
---><!--#include virtual="include/top.html" -->
-
- Il server in questo momento non &egrave; in grado di
- soddisfare la richiesta per motivi di manutenzione
- o di sovraccarico del sistema.
- Per favore, riprova pi&ugrave; tardi.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="¼­ºñ½º ÀϽÃÁßÁö!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- °ü¸® ÀÛ¾÷À̳ª ¿ë·® ¹®Á¦·Î ¼­¹ö°¡ Àá½Ãµ¿¾È ¿äûÀ» ó¸®ÇÒ ¼ö ¾ø½À´Ï´Ù.
- ³ªÁß¿¡ ´Ù½Ã ½ÃµµÇØÁֽñ⠹ٶø´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Dienst niet beschikbaar!"
---><!--#include virtual="include/top.html" -->
-
- De server kan tijdelijk uw vraag niet verwerken
- door onderhoud of problemen met de capaciteit van de server.
- Gelieve later nog eens opnieuw te proberen.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Serwis niedostêpny!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Serwer nie mo¿e zrealizowaæ twojego ¿±dania
- ze wzglêdu na konserwacjê lub zbyt du¿e obci±¿enie.
- Prosimy spróbowaæ pó¼niej.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Servi&ccedil;o indispon&iacute;vel!"
---><!--#include virtual="include/top.html" -->
-
- O servidor est&aacute; temporariamente fora de servi&ccedil;o
- para manutan&ccedil;&atilde;o ou devido a problemas de capacidade.
- Por favor tente acessar mais tarde.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Serviciu indisponibil!"
---><!--#include virtual="include/top.html" -->
-
- Serverul nu poate, temporar, sa raspunda cererii
- dumneavoastra datorita intretinerii acestuia sau a
- unor probleme de capacitate. Va rugam incercati mai tarziu.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Tj&auml;nsten ej tillg&auml;nglig!"
---><!--#include virtual="include/top.html" -->
-
- Servern &auml;r f&ouml;r tillf&auml;llet of&ouml;rm&ouml;gen att
- utf&ouml;ra din f&ouml;rfr&aring;gan p&aring; grund av underh&aring;ll
- eller kapacitetsbegr&auml;nsningar. V&auml;nligen f&ouml;rs&ouml;k
- igen senare.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Service unavailable!"
---><!--#include virtual="include/top.html" -->
-
- Sunucu, kendi içindeki çe&#351;itli sorunlardan ötürü,
- bir süreli&#287;ine taleplerinize cevap veremeyecek.
- Lütfen daha sonra tekrar deneyin.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_UNAUTHORIZED.html.var b/docs/error/HTTP_UNAUTHORIZED.html.var
deleted file mode 100644
index f9ddf3ab38..0000000000
--- a/docs/error/HTTP_UNAUTHORIZED.html.var
+++ /dev/null
@@ -1,271 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Po¾adována autentizace!"
---><!--#include virtual="include/top.html" -->
-
- Server nemohl ovìøit, ¾e jste autorizován(a) k&nbsp;pøístupu
- k&nbsp;URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Buï jste dodal(a) neplatné povìøení (napø. chybné heslo) nebo Vá¹
- prohlí¾eè neumí dodat po¾adované ovìøení.
-
- <!--#include virtual="include/spacer.html" -->
-
- V&nbsp;pøípadì, ¾e smíte po¾adovat tento dokument, zkontrolujte, prosím,
- Va¹i u¾ivatelskou identifikaci a heslo a zkuste to znovu.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Authentisierung fehlgeschlagen!"
---><!--#include virtual="include/top.html" -->
-
- Der Server konnte nicht verifizieren, ob Sie autorisiert sind,
- auf den URL "<!--#echo encoding="url" var="REDIRECT_URL"-->" zuzugreifen.
- Entweder wurden falsche Referenzen (z.B. ein falsches Passwort)
- angegeben oder ihr Browser versteht nicht, wie die geforderten
- Referenzen zu &uuml;bermitteln sind.
-
- <!--#include virtual="include/spacer.html" -->
-
- Sofern Sie f&uuml;r den Zugriff berechtigt sind, &uuml;berpr&uuml;fen
- Sie bitte die eingegebene User-ID und das Passwort und versuchen Sie
- es erneut.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Authentication required!"
---><!--#include virtual="include/top.html" -->
-
- This server could not verify that you are authorized to access
- the URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- You either supplied the wrong credentials (e.g., bad password), or your
- browser doesn't understand how to supply the credentials required.
-
- <!--#include virtual="include/spacer.html" -->
-
- In case you are allowed to request the document, please
- check your user-id and password and try again.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Autentificaci&oacute;n requerida!"
---><!--#include virtual="include/top.html" -->
-
- El servidor no puede certificar que usted este autorizado
- para acceder al enlace "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Usted pudo suministrar informaci&oacute;n err&oacute;nea accidentalmente
- (ejem. una contrase&ntilde;a inv&aacute;lida) o, el navegador no sabe
- como suministrar la informaci&oacute;n requerida.
-
- <!--#include virtual="include/spacer.html" -->
-
- En caso de que a usted le este permitido el uso del
- documento requerido, le solicitamos de la manera m&aacute;s atenta
- que por favor vuelva a intentar la operaci&oacute;n suministrando
- nuevamente su identificador y su contrase&ntilde;a.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Autorisation requise!"
---><!--#include virtual="include/top.html" -->
-
- Ce server n'a pas &eacute;t&eacute; en mesure de v&eacute;rifier que
- vous &ecirc;tes autoris&eacute; &agrave; acc&eacute;der &agrave; cette
- URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
-
- Vous avez ou bien fourni des coordonn&eacute;es erron&eacute;es
- (p.ex. mot de passe inexact) ou bien votre navigateur ne parvient
- pas &agrave; fournir les donn&eacute;es exactes.
-
- <!--#include virtual="include/spacer.html" -->
-
- Si vous &ecirc;tez autoris&eacute; &agrave; requ&eacute;rir le document,
- veuillez v&eacute;rifier votre nom d'utilisateur et votre mot de passe
- et r&eacute;essayer.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Autorizzazione necessaria!"
---><!--#include virtual="include/top.html" -->
-
- Questo server non pu&ograve; verificare l'autorizzazione
- all'accesso a "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Questo errore potrebbe essere causato da credenziali errate
- (nome utente o password errata) oppure da un browser che non
- riesce a comunicare il nome utente e la password in modo corretto.
-
- <!--#include virtual="include/spacer.html" -->
-
- Nel caso in cui ritieni di aver diritto ad accedere al documento,
- controlla il nome utente e la password forniti e riprova.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="ÀÎÁõ ÇÊ¿ä!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ÀÌ ¼­¹ö°¡ "<!--#echo encoding="url" var="REDIRECT_URL" -->" URLÀ»
- Á¢±ÙÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇÏÁö ¸øÇß½À´Ï´Ù.
- À߸øµÈ ÀÎÁõ Á¤º¸(°¡·É, À߸øµÈ ¾ÏÈ£)¸¦ º¸³Â°Å³ª ¾Æ´Ï¸é
- »ç¿ëÇϽô ºê¶ó¿ìÀú°¡ ÇÊ¿äÇÑ ÀÎÁõ Á¤º¸¸¦ ¾î¶»°Ô º¸³»´ÂÁö ¸ð¸£´Â °ÍÀÔ´Ï´Ù.
-
- <!--#include virtual="include/spacer.html" -->
-
- ÀÌ ¹®¼­¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã°¡¸¦ ¹Þ¾Ò´Âµ¥µµ ÀÌ·±´Ù¸é,
- »ç¿ëÀÚ ID¿Í ¾ÏÈ£¸¦ È®ÀÎÇÏ½Ã°í ´Ù½Ã ½ÃµµÇϽñ⠹ٶø´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Authenticatie nodig!"
---><!--#include virtual="include/top.html" -->
-
- De server kon niet controleren of u gemachtigd bent om toegang te krijgen
- tot de URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- U hebt zich onvoldoende geauthenticeerd ( vb : verkeerd paswoord ), of
- uw browser is niet in staat de nodige authentificatiegegevens door te geven.
-
- <!--#include virtual="include/spacer.html" -->
-
- Indien u toch gemachtigd bent toegang te krijgen tot het document,
- controleer uw gebruikersnaam en paswoord en probeer opnieuw.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Wymagana autoryzacja!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Serwer nie mo¿e zweryfikowaæ, ¿e masz uprawnienia dostêpu do
- URLa "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Nie poda³e¶ prawid³owych danych autoryzacyjnych (np. has³a),
- lub twoja przegl±darka nie potrafi ich przes³aæ.
-
- <!--#include virtual="include/spacer.html" -->
-
- Je¶li masz prawo dostêpu do ¿±danego dokumentu, sprad¼
- podan± nazwê u¿ytkownika i has³o.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Autentica&ccedil;&atilde;o Requerida!"
---><!--#include virtual="include/top.html" -->
-
- Este servidor n&atilde;o pode autorizar o seu acesso &agrave; URL
- "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Voc&ecirc; deve ter fornecido dados incorretos (ex. senha errada), ou o seu
- "browser" n&atilde;o fornece as credenciais necess&aacute;rias.
-
- <!--#include virtual="include/spacer.html" -->
-
- No caso de voc&ecirc; realmente possuir permiss&atilde;o para este documento,
- por favor checar seu login e sua senha e tentar novamente.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Autentificare necesara!"
---><!--#include virtual="include/top.html" -->
-
- Acest server nu a putut verifica daca sunteti autorizat sa accesati
- URL-ul "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Ati furnizat parametrii de acreditare gresiti (ex: parola gresita), sau browserul
- dumneavoastra nu poate furniza aceste detalii de acreditare.
-
- <!--#include virtual="include/spacer.html" -->
-
- In cazul in care nu va este permis sa cereti un document, va rugam
- sa va verificati numele de utilizator si parola si sa incercati din nou.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Autentisering kr&auml;vs!"
---><!--#include virtual="include/top.html" -->
-
- Servern kunde inte verifiera att du har till&aring;telse att bes&ouml;ka
- adressen "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Antingen angav du felaktiga uppgifter (ex. fel l&ouml;senord) eller s&aring;
- st&ouml;djer inte din webbl&auml;sare detta autentiseringss&auml;tt.
-
- <!--#include virtual="include/spacer.html" -->
-
- Om du har till&aring;telse att bes&ouml;ka sidan, v&auml;nligen kontrollera ditt
- anv&auml;ndarnamn samt l&ouml;senord och f&ouml;rs&ouml;k igen.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Authentication required!"
---><!--#include virtual="include/top.html" -->
-
- Sunucu bu dokümana eri&#351;im izninizi do&#287;rulayamad&#305;.
- Ya kimli&#287;iniz do&#287;rulanamad&#305; (örne&#287;in hatal&#305; parola girdiniz),
- ya da gezgininiz bu i&#351;lemi yerine getiremiyor.
-
- <!--#include virtual="include/spacer.html" -->
-
- E&#287;er bu dokümana eri&#351;me izniniz varsa, lütfen kimli&#287;inizi
- ve parolan&#305;z&#305; kontrol edip, tekrar deneyin.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var b/docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
deleted file mode 100644
index 3ddc0f8235..0000000000
--- a/docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
+++ /dev/null
@@ -1,163 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Nepodporovaný typ prostøedku!"
---><!--#include virtual="include/top.html" -->
-
- Server nepodporuje typ prostøedku (media) pøeneseného v&nbsp;po¾adavku.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Nicht unterst&uuml;tztes Format!"
---><!--#include virtual="include/top.html" -->
-
- Das bei der Anfrage &uuml;bermittelte Format (Media Type)
- wird vom Server nicht unterst&uuml;tzt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Unsupported media type!"
---><!--#include virtual="include/top.html" -->
-
- The server does not support the media type transmitted in the request.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Tipo de datos no soportados!"
---><!--#include virtual="include/top.html" -->
-
- Los datos de su solicitud no se encuentran en
- un formato aceptado por este recurso.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="Type de m&eacute;dia invalide!"
---><!--#include virtual="include/top.html" -->
-
- Le serveur ne supporte pas le type de m&eacute;dia utilis&eacute;
- dans votre requ&ecirc;te.
-
-<!--#include virtual="include/bottom.html"-->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="Tipo di dato non supportato!"
---><!--#include virtual="include/top.html" -->
-
- Il server non &egrave; in grado di gestire il
- tipo del formato dei dati trasmesso nella richiesta.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="Áö¿øÇÏÁö ¾Ê´Â ¹Ìµð¾î Çü½Ä!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¿äûÀ¸·Î º¸³»¿Â ¹Ìµð¾î Çü½ÄÀ» ÀÌ ¼­¹ö°¡ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Niet ondersteund formaat!"
---><!--#include virtual="include/top.html" -->
-
- De server ondersteunt het gevraagde formaat ( media type ) niet.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Nieobs³ugiwany typ danych!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Serwer nie zna typu danych przes³anych w ¿±daniu.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Tipo de media n&atilde;o suportado!"
---><!--#include virtual="include/top.html" -->
-
- O servidor n&atilde;o suporta o tipo de m&iacute;dia
- transmitida nesta requisi&ccedil;&atilde;o.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Tip de date nesuportate!"
---><!--#include virtual="include/top.html" -->
-
- Serverul nu suporta tipul de date trimise in cerere.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Mediatypen st&ouml;ds ej!"
---><!--#include virtual="include/top.html" -->
-
- Servern st&ouml;djer inte den mediatyp som skickats i f&ouml;rfr&aring;gan.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Unsupported media type!"
---><!--#include virtual="include/top.html" -->
-
- Sunucu, talep içinde iletilen ortam türünü desteklemiyor.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/HTTP_VARIANT_ALSO_VARIES.html.var b/docs/error/HTTP_VARIANT_ALSO_VARIES.html.var
deleted file mode 100644
index 0320f37872..0000000000
--- a/docs/error/HTTP_VARIANT_ALSO_VARIES.html.var
+++ /dev/null
@@ -1,179 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-<!--#set var="CONTENT_LANGUAGE" value="cs"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#set var="TITLE" value="Varianta má sama více variant!"
---><!--#include virtual="include/top.html" -->
-
- Varianta po¾adované entity má sama více variant. Pøístup není mo¾ný.
-
-<!--#include virtual="include/bottom.html" -->
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-<!--#set var="CONTENT_LANGUAGE" value="de"
---><!--#set var="TITLE" value="Variante ebenfalls ver&auml;nderlich!"
---><!--#include virtual="include/top.html" -->
-
- Ein Zugriff auf das angeforderte Objekt bzw. einer
- Variante dieses Objektes ist nicht m&ouml;glich, da es ebenfalls
- ein variables Objekt darstellt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-<!--#set var="TITLE" value="Variant also varies!"
---><!--#include virtual="include/top.html" -->
-
- A variant for the requested entity
- is itself a negotiable resource.
- Access not possible.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-<!--#set var="CONTENT_LANGUAGE" value="es"
---><!--#set var="TITLE" value="&iexcl;Variante negociable!"
---><!--#include virtual="include/top.html" -->
-
- No es posible tener acceso debido a que
- una variante de la solicitud es por si
- misma un recurso negociable.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-<!--#set var="CONTENT_LANGUAGE" value="fr"
---><!--#set var="TITLE" value="La variante varie elle-m&ecirc;me!"
---><!--#include virtual="include/top.html" -->
-
- Une variante pour l'entit&eacute; requise
- est elle-m&ecirc;me une ressource n&eacute;gociable.
- L'acc&egrave;s est impossible.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-<!--#set var="CONTENT_LANGUAGE" value="it"
---><!--#set var="TITLE" value="La versione variante varia essa stessa!"
---><!--#include virtual="include/top.html" -->
-
- Non &egrave; possibile accedere all'entit&agrave;
- richiesta perch&eacute; &grave; essa stessa
- una risorsa negoziabile.
-
-<!--#include virtual="include/bottom.html" -->
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-<!--#set var="CONTENT_LANGUAGE" value="ko"
---><!--#set var="TITLE" value="ÇüŸ¦ °áÁ¤ÇÒ ¼ö ¾øÀ½!"
---><!--#set var="CHARACTER_ENCODING" value="EUC-KR"
---><!--#include virtual="include/top.html" -->
-
- ¿äûÇÑ °´Ã¼ÀÇ ÇüÅ ¶ÇÇÑ ¿©·¯ ÇüŸ¦ °¡Áö°í À־
- Á¢±ÙÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.
-
-<!--#include virtual="include/bottom.html" -->
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-<!--#set var="CONTENT_LANGUAGE" value="nl"
---><!--#set var="TITLE" value="Variant varieert ook!"
---><!--#include virtual="include/top.html" -->
-
- Een variant van het gevraagde object
- is op zich ook een te onderhandelen variant.
- Toegang is niet mogelijk.
-
-<!--#include virtual="include/bottom.html" -->
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-<!--#set var="CONTENT_LANGUAGE" value="pl"
---><!--#set var="TITLE" value="Wariant jest wariantowy!"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-2"
---><!--#include virtual="include/top.html" -->
-
- Wariant ¿±danego zasobu jest równie¿ zasobem negocjowalnym.
- Dostêp jest niemo¿liwy.
-
-<!--#include virtual="include/bottom.html" -->
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-<!--#set var="CONTENT_LANGUAGE" value="pt-br"
---><!--#set var="TITLE" value="Variante auto-negoci&aacute;vel!"
---><!--#include virtual="include/top.html" -->
-
- Uma variante da entidade de requisi&ccedil;&atilde;o
- &eacute; por si mesma um recurso negoci&aacute;vel.
- Acesso n&atilde;o &eacute; poss&iacute;vel.
-
-<!--#include virtual="include/bottom.html" -->
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-<!--#set var="CONTENT_LANGUAGE" value="ro"
---><!--#set var="TITLE" value="Varianta deasemenea variaza!"
---><!--#include virtual="include/top.html" -->
-
- O varianta pentru entitatea ceruta
- este ea insasi o resursa negociabila.
- Accesul nu este posibil.
-
-<!--#include virtual="include/bottom.html" -->
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-<!--#set var="CONTENT_LANGUAGE" value="sv"
---><!--#set var="TITLE" value="Variant also varies!"
---><!--#include virtual="include/top.html" -->
-
- En variant av den f&ouml;rfr&aring;gade enheten &auml;r i
- sig sj&auml;lv en giltig resurs. &Aring;tkomst &auml;r inte
- m&ouml;jlig.
-
-<!--#include virtual="include/bottom.html" -->
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-<!--#set var="CONTENT_LANGUAGE" value="tr"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-9"
---><!--#set var="TITLE" value="Variant also varies!"
---><!--#include virtual="include/top.html" -->
-
- Talep edilen eleman&#305;n bir de&#287;i&#351;keninin kendisi zaten payla&#351;&#305;l&#305;r bir kaynak.
- Eri&#351;im mümkün de&#287;il.
-
-<!--#include virtual="include/bottom.html" -->
-----------tr--
diff --git a/docs/error/README b/docs/error/README
deleted file mode 100644
index c2c1754926..0000000000
--- a/docs/error/README
+++ /dev/null
@@ -1,36 +0,0 @@
-
- Multi Language Custom Error Documents
- -------------------------------------
-
- The 'error' directory contains HTTP error messages in multiple languages.
- If the preferred language of a client is available it is selected
- automatically via the MultiViews feature. This feature is enabled
- by default via the Options, Language and ErrorDocument directives.
-
- You may configure the design and markup of the documents by modifying
- the HTML files in the directory 'error/include'.
-
- Supported Languages:
-
- +-----------------------+------------------------------------------+
- | Language | Contributed by |
- +-----------------------+------------------------------------------+
- | Brazilian (pt-br) | Ricardo Leite |
- | Czech (cs) | Marcel Kolaja |
- | Dutch (nl) | Peter Van Biesen |
- | English (en) | Lars Eilebrecht |
- | French (fr) | Cecile de Crecy |
- | German (de) | Lars Eilebrecht |
- | Italian (it) | Luigi Rosa |
- | Korean (ko) | Jaeho Shin |
- | Polish (pl) | Tomasz Kepczynski |
- | Romanian (ro) | Andrei Besleaga |
- | Spanish (es) | Karla Quintero |
- | Swedish (sv) | Thomas Sjögren |
- | Turkish (tr) | Emre Sokullu |
- +-----------------------+------------------------------------------+
- (Please see http://httpd.apache.org/docs-project/ if you would
- like to contribute the pages in an additional language.)
-
-
- Copyright (c) 2001-2004 The Apache Software Foundation. All rights reserved.
diff --git a/docs/error/contact.html.var b/docs/error/contact.html.var
deleted file mode 100644
index 598f033a11..0000000000
--- a/docs/error/contact.html.var
+++ /dev/null
@@ -1,96 +0,0 @@
-Content-language: cs
-Content-type: text/html; charset=ISO-8859-2
-Body:----------cs--
-Pokud si myslíte, ¾e toto je chyba serveru, kontaktujte, prosím,
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmastera</a>.
-----------cs--
-
-Content-language: de
-Content-type: text/html; charset=ISO-8859-1
-Body:----------de--
-Sofern Sie dies f&uuml;r eine Fehlfunktion des Servers halten,
-informieren Sie bitte den
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">Webmaster</a>
-hier&uuml;ber.
-----------de--
-
-Content-language: en
-Content-type: text/html; charset=ISO-8859-1
-Body:----------en--
-If you think this is a server error, please contact
-the <a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a>.
-----------en--
-
-Content-language: es
-Content-type: text/html; charset=ISO-8859-1
-Body:----------es--
-Por favor contacte con el
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a>
-en caso de que usted crea que existe un error en el servidor.
-----------es--
-
-Content-language: fr
-Content-type: text/html; charset=ISO-8859-1
-Body:----------fr--
-Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">gestionnaire du site</a>.
-----------fr--
-
-Content-language: it
-Content-type: text/html; charset=ISO-8859-1
-Body:----------it--
-Se pensi che questo sia un errore del server, per favore contatta il
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a>.
-----------it--
-
-Content-language: ko
-Content-type: text/html; charset=EUC-KR
-Body:----------ko--
-¸¸¾à ÀÌ°ÍÀÌ ¼­¹ö ¿À·ù¶ó°í »ý°¢µÇ¸é,
-<a href="mailto:<!--#echo encoding="none" var="SERVER_ADMIN" -->">À¥ °ü¸®ÀÚ</a>¿¡°Ô ¿¬¶ôÇϽñ⠹ٶø´Ï´Ù.
-----------ko--
-
-Content-language: nl
-Content-type: text/html; charset=ISO-8859-1
-Body:----------nl--
-Indien u van oordeel bent dat deze server in fout is, gelieve
-de <a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a> te contacteren.
-----------nl--
-
-Content-language: pl
-Content-type: text/html; charset=ISO-8859-2
-Body:----------pl--
-Je¶li my¶lisz, ¿e jest to b³±d tego serwera, skontaktuj siê z
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">administratorem</a>.
-----------pl--
-
-Content-language: pt-br
-Content-type: text/html; charset=ISO-8859-1
-Body:-------pt-br--
-Se voc&ecirc; acredita ter encontrado um problema no servidor,
-por favor entre em contato com o
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a>.
--------pt-br--
-
-Content-language: ro
-Content-type: text/html; charset=ISO-8859-1
-Body:----------ro--
-Va rugam sa il contactati pe
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webmaster</a>
-in cazul in care credeti ca aceasta este o eroare a serverului.
-----------ro--
-
-Content-language: sv
-Content-type: text/html; charset=ISO-8859-1
-Body:----------sv--
-Om du tror att detta beror p&aring; ett serverfel, v&auml;nligen kontakta
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">webbansvarig</a>.
-----------sv--
-
-Content-language: tr
-Content-type: text/html; charset=ISO-8859-9
-Body:----------tr--
-Bunun bir sunucu hatas&#305; oldu&#287;unu dü&#351;ünüyorsan&#305;z, lütfen
-<a href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->">site
-yöneticisi</a> ile ileti&#351;ime geçin.
-----------tr--
diff --git a/docs/error/include/bottom.html b/docs/error/include/bottom.html
deleted file mode 100644
index e8522b6e9b..0000000000
--- a/docs/error/include/bottom.html
+++ /dev/null
@@ -1,14 +0,0 @@
-</p>
-<p>
-<!--#include virtual="../contact.html.var" -->
-</p>
-
-<h2>Error <!--#echo encoding="none" var="REDIRECT_STATUS" --></h2>
-<address>
- <a href="/"><!--#echo var="SERVER_NAME" --></a><br />
- <!--#config timefmt="%c" -->
- <span><!--#echo var="DATE_LOCAL" --><br />
- <!--#echo var="SERVER_SOFTWARE" --></span>
-</address>
-</body>
-</html>
diff --git a/docs/error/include/spacer.html b/docs/error/include/spacer.html
deleted file mode 100644
index 7d5e59531b..0000000000
--- a/docs/error/include/spacer.html
+++ /dev/null
@@ -1,2 +0,0 @@
-</p>
-<p>
diff --git a/docs/error/include/top.html b/docs/error/include/top.html
deleted file mode 100644
index 04b73b51b8..0000000000
--- a/docs/error/include/top.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--#if expr="! $CONTENT_LANGUAGE"
---><!--#set var="CONTENT_LANGUAGE" value="en"
---><!--#endif
---><!--#if expr="! $CHARACTER_ENCODING"
---><!--#set var="CHARACTER_ENCODING" value="ISO-8859-1"
---><!--#endif
---><?xml version="1.0" encoding="<!--#echo var="CHARACTER_ENCODING" -->"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="<!--#echo var="CONTENT_LANGUAGE" -->" xml:lang="<!--#echo var="CONTENT_LANGUAGE" -->">
-<head>
-<title><!--#echo encoding="none" var="TITLE" --></title>
-<link rev="made" href="mailto:<!--#echo encoding="url" var="SERVER_ADMIN" -->" />
-<style type="text/css"><!--/*--><![CDATA[/*><!--*/
- body { color: #000000; background-color: #FFFFFF; }
- a:link { color: #0000CC; }
- p, address {margin-left: 3em;}
- span {font-size: smaller;}
-/*]]>*/--></style>
-</head>
-
-<body>
-<h1><!--#echo encoding="none" var="TITLE" --></h1>
-<p>
diff --git a/docs/icons/README b/docs/icons/README
deleted file mode 100644
index 66523b609a..0000000000
--- a/docs/icons/README
+++ /dev/null
@@ -1,158 +0,0 @@
-Public Domain Icons
-
- These icons were originally made for Mosaic for X and have been
- included in the NCSA httpd and Apache server distributions in the
- past. They are in the public domain and may be freely included in any
- application. The originals were done by Kevin Hughes
- (kevinh@kevcom.com).
-
- Many thanks to Andy Polyakov for tuning the icon colors and adding a
- few new images. If you'd like to contribute additions or ideas to
- this set, please let me know.
-
- Almost all of these icons are 20x22 pixels in size. There are
- alternative icons in the "small" directory that are 16x16 in size,
- provided by Mike Brown (mike@hyperreal.org).
-
-Suggested Uses
-
-The following are a few suggestions, to serve as a starting point for ideas.
-Please feel free to tweak and rename the icons as you like.
-
- a.gif
- This might be used to represent PostScript or text layout
- languages.
-
- alert.black.gif, alert.red.gif
- These can be used to highlight any important items, such as a
- README file in a directory.
-
- back.gif, forward.gif
- These can be used as links to go to previous and next areas.
-
- ball.gray.gif, ball.red.gif
- These might be used as bullets.
-
- binary.gif
- This can be used to represent binary files.
-
- binhex.gif
- This can represent BinHex-encoded data.
-
- blank.gif
- This can be used as a placeholder or a spacing element.
-
- bomb.gif
- This can be used to represent core files.
-
- box1.gif, box2.gif
- These icons can be used to represent generic 3D applications and
- related files.
-
- broken.gif
- This can represent corrupted data.
-
- burst.gif
- This can call attention to new and important items.
-
- c.gif
- This might represent C source code.
-
- comp.blue.gif, comp.red.gif
- These little computer icons can stand for telnet or FTP
- sessions.
-
- compressed.gif
- This may represent compressed data.
-
- continued.gif
- This can be a link to a continued listing of a directory.
-
- down.gif, up.gif, left.gif, right.gif
- These can be used to scroll up, down, left and right in a
- listing or may be used to denote items in an outline.
-
- dvi.gif
- This can represent DVI files.
-
- f.gif
- This might represent FORTRAN or Forth source code.
-
- folder.gif, folder.open.gif, folder.sec.gif
- The folder can represent directories. There is also a version
- that can represent secure directories or directories that cannot
- be viewed.
-
- generic.gif, generic.sec.gif, generic.red.gif
- These can represent generic files, secure files, and important
- files, respectively.
-
- hand.right.gif, hand.up.gif
- These can point out important items (pun intended).
-
- image1.gif, image2.gif, image3.gif
- These can represent image formats of various types.
-
- index.gif
- This might represent a WAIS index or search facility.
-
- layout.gif
- This might represent files and formats that contain graphics as
- well as text layout, such as HTML and PDF files.
-
- link.gif
- This might represent files that are symbolic links.
-
- movie.gif
- This can represent various movie formats.
-
- p.gif
- This may stand for Perl or Python source code.
-
- pie0.gif ... pie8.gif
- These icons can be used in applications where a list of
- documents is returned from a search. The little pie chart images
- can denote how relevant the documents may be to your search
- query.
-
- patch.gif
- This may stand for patches and diff files.
-
- portal.gif
- This might be a link to an online service or a 3D world.
-
- ps.gif, quill.gif
- These may represent PostScript files.
-
- screw1.gif, screw2.gif
- These may represent CAD or engineering data and formats.
-
- script.gif
- This can represent any of various interpreted languages, such as
- Perl, python, TCL, and shell scripts, as well as server
- configuration files.
-
- sound1.gif, sound2.gif
- These can represent sound files.
-
- sphere1.gif, sphere2.gif
- These can represent 3D worlds or rendering applications and
- formats.
-
- tex.gif
- This can represent TeX files.
-
- text.gif
- This can represent generic (plain) text files.
-
- transfer.gif
- This can represent FTP transfers or uploads/downloads.
-
- unknown.gif
- This may represent a file of an unknown type.
-
- uuencoded.gif
- This can stand for uuencoded data.
-
- world1.gif, world2.gif
- These can represent 3D worlds or other 3D formats.
diff --git a/docs/icons/a.gif b/docs/icons/a.gif
deleted file mode 100644
index bb23d971f4..0000000000
--- a/docs/icons/a.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/a.png b/docs/icons/a.png
deleted file mode 100644
index c1840256dc..0000000000
--- a/docs/icons/a.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.black.gif b/docs/icons/alert.black.gif
deleted file mode 100644
index eaecd2172a..0000000000
--- a/docs/icons/alert.black.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.black.png b/docs/icons/alert.black.png
deleted file mode 100644
index af6b1246ad..0000000000
--- a/docs/icons/alert.black.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.red.gif b/docs/icons/alert.red.gif
deleted file mode 100644
index a423894043..0000000000
--- a/docs/icons/alert.red.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.red.png b/docs/icons/alert.red.png
deleted file mode 100644
index b9222fd524..0000000000
--- a/docs/icons/alert.red.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb.gif b/docs/icons/apache_pb.gif
deleted file mode 100644
index 3a1c139fc4..0000000000
--- a/docs/icons/apache_pb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb.png b/docs/icons/apache_pb.png
deleted file mode 100644
index eb99a8cd39..0000000000
--- a/docs/icons/apache_pb.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb2.gif b/docs/icons/apache_pb2.gif
deleted file mode 100644
index 4e67c7113c..0000000000
--- a/docs/icons/apache_pb2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb2.png b/docs/icons/apache_pb2.png
deleted file mode 100644
index 28baa70fb8..0000000000
--- a/docs/icons/apache_pb2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb2_ani.gif b/docs/icons/apache_pb2_ani.gif
deleted file mode 100644
index fc41c03610..0000000000
--- a/docs/icons/apache_pb2_ani.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/back.gif b/docs/icons/back.gif
deleted file mode 100644
index a694ae1ec3..0000000000
--- a/docs/icons/back.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/back.png b/docs/icons/back.png
deleted file mode 100644
index 2d8d353bbc..0000000000
--- a/docs/icons/back.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.gray.gif b/docs/icons/ball.gray.gif
deleted file mode 100644
index eb84268c4c..0000000000
--- a/docs/icons/ball.gray.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.gray.png b/docs/icons/ball.gray.png
deleted file mode 100644
index 7b756f2d82..0000000000
--- a/docs/icons/ball.gray.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.red.gif b/docs/icons/ball.red.gif
deleted file mode 100644
index a8425cb574..0000000000
--- a/docs/icons/ball.red.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.red.png b/docs/icons/ball.red.png
deleted file mode 100644
index 05f3e50629..0000000000
--- a/docs/icons/ball.red.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binary.gif b/docs/icons/binary.gif
deleted file mode 100644
index 9a15cbae04..0000000000
--- a/docs/icons/binary.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binary.png b/docs/icons/binary.png
deleted file mode 100644
index c5119d1e1e..0000000000
--- a/docs/icons/binary.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binhex.gif b/docs/icons/binhex.gif
deleted file mode 100644
index 62d0363108..0000000000
--- a/docs/icons/binhex.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binhex.png b/docs/icons/binhex.png
deleted file mode 100644
index eff532202d..0000000000
--- a/docs/icons/binhex.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/blank.gif b/docs/icons/blank.gif
deleted file mode 100644
index 0ccf01e198..0000000000
--- a/docs/icons/blank.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/blank.png b/docs/icons/blank.png
deleted file mode 100644
index 3802c03c9c..0000000000
--- a/docs/icons/blank.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/bomb.gif b/docs/icons/bomb.gif
deleted file mode 100644
index 270fdb1c06..0000000000
--- a/docs/icons/bomb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/bomb.png b/docs/icons/bomb.png
deleted file mode 100644
index 5261a0575e..0000000000
--- a/docs/icons/bomb.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box1.gif b/docs/icons/box1.gif
deleted file mode 100644
index 65dcd002ea..0000000000
--- a/docs/icons/box1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box1.png b/docs/icons/box1.png
deleted file mode 100644
index c55fccf8dc..0000000000
--- a/docs/icons/box1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box2.gif b/docs/icons/box2.gif
deleted file mode 100644
index c43bc4faec..0000000000
--- a/docs/icons/box2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box2.png b/docs/icons/box2.png
deleted file mode 100644
index 26d14325d9..0000000000
--- a/docs/icons/box2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/broken.gif b/docs/icons/broken.gif
deleted file mode 100644
index 9f8cbe9f76..0000000000
--- a/docs/icons/broken.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/broken.png b/docs/icons/broken.png
deleted file mode 100644
index e8fd150a33..0000000000
--- a/docs/icons/broken.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/burst.gif b/docs/icons/burst.gif
deleted file mode 100644
index fbdcf575f7..0000000000
--- a/docs/icons/burst.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/burst.png b/docs/icons/burst.png
deleted file mode 100644
index 2329898f2a..0000000000
--- a/docs/icons/burst.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/c.gif b/docs/icons/c.gif
deleted file mode 100644
index 7555b6c164..0000000000
--- a/docs/icons/c.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/c.png b/docs/icons/c.png
deleted file mode 100644
index 41593b36b3..0000000000
--- a/docs/icons/c.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.blue.gif b/docs/icons/comp.blue.gif
deleted file mode 100644
index f8d76a8c23..0000000000
--- a/docs/icons/comp.blue.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.blue.png b/docs/icons/comp.blue.png
deleted file mode 100644
index 60ff156deb..0000000000
--- a/docs/icons/comp.blue.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.gray.gif b/docs/icons/comp.gray.gif
deleted file mode 100644
index 7664cd0364..0000000000
--- a/docs/icons/comp.gray.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.gray.png b/docs/icons/comp.gray.png
deleted file mode 100644
index 01538f8f31..0000000000
--- a/docs/icons/comp.gray.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/compressed.gif b/docs/icons/compressed.gif
deleted file mode 100644
index 39e732739f..0000000000
--- a/docs/icons/compressed.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/compressed.png b/docs/icons/compressed.png
deleted file mode 100644
index de7276dbc0..0000000000
--- a/docs/icons/compressed.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/continued.gif b/docs/icons/continued.gif
deleted file mode 100644
index b0ffb7e0cc..0000000000
--- a/docs/icons/continued.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/continued.png b/docs/icons/continued.png
deleted file mode 100644
index 8f656e27f2..0000000000
--- a/docs/icons/continued.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dir.gif b/docs/icons/dir.gif
deleted file mode 100644
index 48264601ae..0000000000
--- a/docs/icons/dir.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dir.png b/docs/icons/dir.png
deleted file mode 100644
index 6b97905067..0000000000
--- a/docs/icons/dir.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/diskimg.gif b/docs/icons/diskimg.gif
deleted file mode 100644
index 49b12a8d1a..0000000000
--- a/docs/icons/diskimg.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/diskimg.png b/docs/icons/diskimg.png
deleted file mode 100644
index 11f34e681b..0000000000
--- a/docs/icons/diskimg.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/down.gif b/docs/icons/down.gif
deleted file mode 100644
index a354c871cd..0000000000
--- a/docs/icons/down.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/down.png b/docs/icons/down.png
deleted file mode 100644
index be3904b045..0000000000
--- a/docs/icons/down.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dvi.gif b/docs/icons/dvi.gif
deleted file mode 100644
index 791be33105..0000000000
--- a/docs/icons/dvi.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dvi.png b/docs/icons/dvi.png
deleted file mode 100644
index 19c417f227..0000000000
--- a/docs/icons/dvi.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/f.gif b/docs/icons/f.gif
deleted file mode 100644
index fbe353c282..0000000000
--- a/docs/icons/f.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/f.png b/docs/icons/f.png
deleted file mode 100644
index c946f5b316..0000000000
--- a/docs/icons/f.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.gif b/docs/icons/folder.gif
deleted file mode 100644
index 48264601ae..0000000000
--- a/docs/icons/folder.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.open.gif b/docs/icons/folder.open.gif
deleted file mode 100644
index 30979cb528..0000000000
--- a/docs/icons/folder.open.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.open.png b/docs/icons/folder.open.png
deleted file mode 100644
index dd2d7e0cc2..0000000000
--- a/docs/icons/folder.open.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.png b/docs/icons/folder.png
deleted file mode 100644
index 6b97905067..0000000000
--- a/docs/icons/folder.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.sec.gif b/docs/icons/folder.sec.gif
deleted file mode 100644
index 75332d9e59..0000000000
--- a/docs/icons/folder.sec.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.sec.png b/docs/icons/folder.sec.png
deleted file mode 100644
index 833f59ac51..0000000000
--- a/docs/icons/folder.sec.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/forward.gif b/docs/icons/forward.gif
deleted file mode 100644
index b2959b4c85..0000000000
--- a/docs/icons/forward.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/forward.png b/docs/icons/forward.png
deleted file mode 100644
index c5584a4c30..0000000000
--- a/docs/icons/forward.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.gif b/docs/icons/generic.gif
deleted file mode 100644
index de60b2940f..0000000000
--- a/docs/icons/generic.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.png b/docs/icons/generic.png
deleted file mode 100644
index 0227cabb5c..0000000000
--- a/docs/icons/generic.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.red.gif b/docs/icons/generic.red.gif
deleted file mode 100644
index 94743981d9..0000000000
--- a/docs/icons/generic.red.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.red.png b/docs/icons/generic.red.png
deleted file mode 100644
index be63249beb..0000000000
--- a/docs/icons/generic.red.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.sec.gif b/docs/icons/generic.sec.gif
deleted file mode 100644
index 88d5240c3c..0000000000
--- a/docs/icons/generic.sec.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.sec.png b/docs/icons/generic.sec.png
deleted file mode 100644
index 0bd3d96bdc..0000000000
--- a/docs/icons/generic.sec.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.right.gif b/docs/icons/hand.right.gif
deleted file mode 100644
index 5cdbc7206d..0000000000
--- a/docs/icons/hand.right.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.right.png b/docs/icons/hand.right.png
deleted file mode 100644
index 93035c658a..0000000000
--- a/docs/icons/hand.right.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.up.gif b/docs/icons/hand.up.gif
deleted file mode 100644
index 85a5d68317..0000000000
--- a/docs/icons/hand.up.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.up.png b/docs/icons/hand.up.png
deleted file mode 100644
index 1405a6f156..0000000000
--- a/docs/icons/hand.up.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/icon.sheet.gif b/docs/icons/icon.sheet.gif
deleted file mode 100644
index ad1686e448..0000000000
--- a/docs/icons/icon.sheet.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/icon.sheet.png b/docs/icons/icon.sheet.png
deleted file mode 100644
index b875cb6b1c..0000000000
--- a/docs/icons/icon.sheet.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image1.gif b/docs/icons/image1.gif
deleted file mode 100644
index 01e442bfa9..0000000000
--- a/docs/icons/image1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image1.png b/docs/icons/image1.png
deleted file mode 100644
index c1374fde33..0000000000
--- a/docs/icons/image1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image2.gif b/docs/icons/image2.gif
deleted file mode 100644
index 751faeea36..0000000000
--- a/docs/icons/image2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image2.png b/docs/icons/image2.png
deleted file mode 100644
index 606d4fb87e..0000000000
--- a/docs/icons/image2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image3.gif b/docs/icons/image3.gif
deleted file mode 100644
index 4f30484ff6..0000000000
--- a/docs/icons/image3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image3.png b/docs/icons/image3.png
deleted file mode 100644
index 701fb1e135..0000000000
--- a/docs/icons/image3.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/index.gif b/docs/icons/index.gif
deleted file mode 100644
index 162478fb3a..0000000000
--- a/docs/icons/index.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/index.png b/docs/icons/index.png
deleted file mode 100644
index 9a0de35058..0000000000
--- a/docs/icons/index.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/layout.gif b/docs/icons/layout.gif
deleted file mode 100644
index c96338a152..0000000000
--- a/docs/icons/layout.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/layout.png b/docs/icons/layout.png
deleted file mode 100644
index 0a97c1c475..0000000000
--- a/docs/icons/layout.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/left.gif b/docs/icons/left.gif
deleted file mode 100644
index 279e6710d4..0000000000
--- a/docs/icons/left.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/left.png b/docs/icons/left.png
deleted file mode 100644
index d6e2404a81..0000000000
--- a/docs/icons/left.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/link.gif b/docs/icons/link.gif
deleted file mode 100644
index c5b6889a76..0000000000
--- a/docs/icons/link.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/link.png b/docs/icons/link.png
deleted file mode 100644
index 4714d0ef40..0000000000
--- a/docs/icons/link.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/movie.gif b/docs/icons/movie.gif
deleted file mode 100644
index 0035183774..0000000000
--- a/docs/icons/movie.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/movie.png b/docs/icons/movie.png
deleted file mode 100644
index 5615180de8..0000000000
--- a/docs/icons/movie.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/p.gif b/docs/icons/p.gif
deleted file mode 100644
index 7b917b4e91..0000000000
--- a/docs/icons/p.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/p.png b/docs/icons/p.png
deleted file mode 100644
index 3fbe0e8801..0000000000
--- a/docs/icons/p.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/patch.gif b/docs/icons/patch.gif
deleted file mode 100644
index 39bc90e795..0000000000
--- a/docs/icons/patch.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/patch.png b/docs/icons/patch.png
deleted file mode 100644
index 808ed7865f..0000000000
--- a/docs/icons/patch.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pdf.gif b/docs/icons/pdf.gif
deleted file mode 100644
index c88fd777c4..0000000000
--- a/docs/icons/pdf.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pdf.png b/docs/icons/pdf.png
deleted file mode 100644
index 516142bb47..0000000000
--- a/docs/icons/pdf.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie0.gif b/docs/icons/pie0.gif
deleted file mode 100644
index 6f7a0ae7a7..0000000000
--- a/docs/icons/pie0.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie0.png b/docs/icons/pie0.png
deleted file mode 100644
index 12e0200c97..0000000000
--- a/docs/icons/pie0.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie1.gif b/docs/icons/pie1.gif
deleted file mode 100644
index 03aa6be71e..0000000000
--- a/docs/icons/pie1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie1.png b/docs/icons/pie1.png
deleted file mode 100644
index c44c793ed8..0000000000
--- a/docs/icons/pie1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie2.gif b/docs/icons/pie2.gif
deleted file mode 100644
index b04c5e0908..0000000000
--- a/docs/icons/pie2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie2.png b/docs/icons/pie2.png
deleted file mode 100644
index e0b7167d91..0000000000
--- a/docs/icons/pie2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie3.gif b/docs/icons/pie3.gif
deleted file mode 100644
index 4db9d023ed..0000000000
--- a/docs/icons/pie3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie3.png b/docs/icons/pie3.png
deleted file mode 100644
index 820a3c35fa..0000000000
--- a/docs/icons/pie3.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie4.gif b/docs/icons/pie4.gif
deleted file mode 100644
index 93471fdd88..0000000000
--- a/docs/icons/pie4.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie4.png b/docs/icons/pie4.png
deleted file mode 100644
index 35490d857c..0000000000
--- a/docs/icons/pie4.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie5.gif b/docs/icons/pie5.gif
deleted file mode 100644
index 57aee93f07..0000000000
--- a/docs/icons/pie5.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie5.png b/docs/icons/pie5.png
deleted file mode 100644
index 359b7d377f..0000000000
--- a/docs/icons/pie5.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie6.gif b/docs/icons/pie6.gif
deleted file mode 100644
index 0dc327b569..0000000000
--- a/docs/icons/pie6.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie6.png b/docs/icons/pie6.png
deleted file mode 100644
index 4b293eae18..0000000000
--- a/docs/icons/pie6.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie7.gif b/docs/icons/pie7.gif
deleted file mode 100644
index 8661337f06..0000000000
--- a/docs/icons/pie7.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie7.png b/docs/icons/pie7.png
deleted file mode 100644
index 6bfa2d06ae..0000000000
--- a/docs/icons/pie7.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie8.gif b/docs/icons/pie8.gif
deleted file mode 100644
index 59ddb34ce0..0000000000
--- a/docs/icons/pie8.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie8.png b/docs/icons/pie8.png
deleted file mode 100644
index 716cf2822b..0000000000
--- a/docs/icons/pie8.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/portal.gif b/docs/icons/portal.gif
deleted file mode 100644
index 0e6e506e00..0000000000
--- a/docs/icons/portal.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/portal.png b/docs/icons/portal.png
deleted file mode 100644
index 937c0f87cd..0000000000
--- a/docs/icons/portal.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ps.gif b/docs/icons/ps.gif
deleted file mode 100644
index 0f565bc1db..0000000000
--- a/docs/icons/ps.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ps.png b/docs/icons/ps.png
deleted file mode 100644
index ccccf730b6..0000000000
--- a/docs/icons/ps.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/quill.gif b/docs/icons/quill.gif
deleted file mode 100644
index 818a5cdc7e..0000000000
--- a/docs/icons/quill.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/quill.png b/docs/icons/quill.png
deleted file mode 100644
index b697770a88..0000000000
--- a/docs/icons/quill.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/right.gif b/docs/icons/right.gif
deleted file mode 100644
index b256e5f75f..0000000000
--- a/docs/icons/right.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/right.png b/docs/icons/right.png
deleted file mode 100644
index 41f8529a84..0000000000
--- a/docs/icons/right.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw1.gif b/docs/icons/screw1.gif
deleted file mode 100644
index af6ba2b097..0000000000
--- a/docs/icons/screw1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw1.png b/docs/icons/screw1.png
deleted file mode 100644
index 11673ab97d..0000000000
--- a/docs/icons/screw1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw2.gif b/docs/icons/screw2.gif
deleted file mode 100644
index 06dccb3e44..0000000000
--- a/docs/icons/screw2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw2.png b/docs/icons/screw2.png
deleted file mode 100644
index 5d7d2cf65e..0000000000
--- a/docs/icons/screw2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/script.gif b/docs/icons/script.gif
deleted file mode 100644
index d8a853bc58..0000000000
--- a/docs/icons/script.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/script.png b/docs/icons/script.png
deleted file mode 100644
index 2520570a77..0000000000
--- a/docs/icons/script.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/README.txt b/docs/icons/small/README.txt
deleted file mode 100644
index deb96702b7..0000000000
--- a/docs/icons/small/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-These icons are provided as an alternative to the standard Apache
-icon graphics. All graphics in this directory, with the exception
-of rainbow.gif, are 16x16 pixels in size, rather than the 20x22
-dimension icons which are the normal defaults for Apache and are
-in the parent directory of this one.
diff --git a/docs/icons/small/back.gif b/docs/icons/small/back.gif
deleted file mode 100644
index e331454726..0000000000
--- a/docs/icons/small/back.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/back.png b/docs/icons/small/back.png
deleted file mode 100644
index 2257df2140..0000000000
--- a/docs/icons/small/back.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binary.gif b/docs/icons/small/binary.gif
deleted file mode 100644
index 995f79b9b1..0000000000
--- a/docs/icons/small/binary.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binary.png b/docs/icons/small/binary.png
deleted file mode 100644
index 2e2e1b073d..0000000000
--- a/docs/icons/small/binary.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binhex.gif b/docs/icons/small/binhex.gif
deleted file mode 100644
index 3d54a5458e..0000000000
--- a/docs/icons/small/binhex.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binhex.png b/docs/icons/small/binhex.png
deleted file mode 100644
index 9deab419b6..0000000000
--- a/docs/icons/small/binhex.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/blank.gif b/docs/icons/small/blank.gif
deleted file mode 100644
index 606787a839..0000000000
--- a/docs/icons/small/blank.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/blank.png b/docs/icons/small/blank.png
deleted file mode 100644
index 86f57a504f..0000000000
--- a/docs/icons/small/blank.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/broken.gif b/docs/icons/small/broken.gif
deleted file mode 100644
index 1bcc57f25c..0000000000
--- a/docs/icons/small/broken.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/broken.png b/docs/icons/small/broken.png
deleted file mode 100644
index 79c998c8c3..0000000000
--- a/docs/icons/small/broken.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/burst.gif b/docs/icons/small/burst.gif
deleted file mode 100644
index d882ceba9c..0000000000
--- a/docs/icons/small/burst.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/burst.png b/docs/icons/small/burst.png
deleted file mode 100644
index 2b21436c78..0000000000
--- a/docs/icons/small/burst.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp1.gif b/docs/icons/small/comp1.gif
deleted file mode 100644
index 712f36afdb..0000000000
--- a/docs/icons/small/comp1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp1.png b/docs/icons/small/comp1.png
deleted file mode 100644
index 6d8c3459ed..0000000000
--- a/docs/icons/small/comp1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp2.gif b/docs/icons/small/comp2.gif
deleted file mode 100644
index 7759eb11f9..0000000000
--- a/docs/icons/small/comp2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp2.png b/docs/icons/small/comp2.png
deleted file mode 100644
index 57f7ad197b..0000000000
--- a/docs/icons/small/comp2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/compressed.gif b/docs/icons/small/compressed.gif
deleted file mode 100644
index d3b156072a..0000000000
--- a/docs/icons/small/compressed.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/compressed.png b/docs/icons/small/compressed.png
deleted file mode 100644
index 43acd8b943..0000000000
--- a/docs/icons/small/compressed.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/continued.gif b/docs/icons/small/continued.gif
deleted file mode 100644
index e1c9f2cfa6..0000000000
--- a/docs/icons/small/continued.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/continued.png b/docs/icons/small/continued.png
deleted file mode 100644
index db17c42465..0000000000
--- a/docs/icons/small/continued.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir.gif b/docs/icons/small/dir.gif
deleted file mode 100644
index 7b37b09917..0000000000
--- a/docs/icons/small/dir.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir.png b/docs/icons/small/dir.png
deleted file mode 100644
index 9bd6256bdb..0000000000
--- a/docs/icons/small/dir.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir2.gif b/docs/icons/small/dir2.gif
deleted file mode 100644
index 425d6e4b77..0000000000
--- a/docs/icons/small/dir2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir2.png b/docs/icons/small/dir2.png
deleted file mode 100644
index 836daf49ef..0000000000
--- a/docs/icons/small/dir2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/doc.gif b/docs/icons/small/doc.gif
deleted file mode 100644
index 0fcf18db2a..0000000000
--- a/docs/icons/small/doc.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/doc.png b/docs/icons/small/doc.png
deleted file mode 100644
index c560df21d3..0000000000
--- a/docs/icons/small/doc.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/forward.gif b/docs/icons/small/forward.gif
deleted file mode 100644
index 2997466eb4..0000000000
--- a/docs/icons/small/forward.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/forward.png b/docs/icons/small/forward.png
deleted file mode 100644
index 4ddbc61e14..0000000000
--- a/docs/icons/small/forward.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic.gif b/docs/icons/small/generic.gif
deleted file mode 100644
index f8da6ff92c..0000000000
--- a/docs/icons/small/generic.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic.png b/docs/icons/small/generic.png
deleted file mode 100644
index 16374a12bb..0000000000
--- a/docs/icons/small/generic.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic2.gif b/docs/icons/small/generic2.gif
deleted file mode 100644
index 992f13331b..0000000000
--- a/docs/icons/small/generic2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic2.png b/docs/icons/small/generic2.png
deleted file mode 100644
index 40d60c1df2..0000000000
--- a/docs/icons/small/generic2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic3.gif b/docs/icons/small/generic3.gif
deleted file mode 100644
index 85aa275e25..0000000000
--- a/docs/icons/small/generic3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic3.png b/docs/icons/small/generic3.png
deleted file mode 100644
index aa38963afa..0000000000
--- a/docs/icons/small/generic3.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image.gif b/docs/icons/small/image.gif
deleted file mode 100644
index dc3d95ced7..0000000000
--- a/docs/icons/small/image.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image.png b/docs/icons/small/image.png
deleted file mode 100644
index d92f0a5fcc..0000000000
--- a/docs/icons/small/image.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image2.gif b/docs/icons/small/image2.gif
deleted file mode 100644
index a5c40f1550..0000000000
--- a/docs/icons/small/image2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image2.png b/docs/icons/small/image2.png
deleted file mode 100644
index 4049bda561..0000000000
--- a/docs/icons/small/image2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/index.gif b/docs/icons/small/index.gif
deleted file mode 100644
index 526df6b064..0000000000
--- a/docs/icons/small/index.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/index.png b/docs/icons/small/index.png
deleted file mode 100644
index 080453e215..0000000000
--- a/docs/icons/small/index.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/key.gif b/docs/icons/small/key.gif
deleted file mode 100644
index 8dfd6c09de..0000000000
--- a/docs/icons/small/key.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/key.png b/docs/icons/small/key.png
deleted file mode 100644
index 1a45f67df3..0000000000
--- a/docs/icons/small/key.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/movie.gif b/docs/icons/small/movie.gif
deleted file mode 100644
index 7b4a42e7a0..0000000000
--- a/docs/icons/small/movie.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/movie.png b/docs/icons/small/movie.png
deleted file mode 100644
index 7c126042c9..0000000000
--- a/docs/icons/small/movie.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/patch.gif b/docs/icons/small/patch.gif
deleted file mode 100644
index 100484e598..0000000000
--- a/docs/icons/small/patch.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/patch.png b/docs/icons/small/patch.png
deleted file mode 100644
index c39f14435a..0000000000
--- a/docs/icons/small/patch.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/ps.gif b/docs/icons/small/ps.gif
deleted file mode 100644
index fa4bcfce30..0000000000
--- a/docs/icons/small/ps.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/ps.png b/docs/icons/small/ps.png
deleted file mode 100644
index 5c604230d0..0000000000
--- a/docs/icons/small/ps.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/rainbow.gif b/docs/icons/small/rainbow.gif
deleted file mode 100644
index 8216b89bad..0000000000
--- a/docs/icons/small/rainbow.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/rainbow.png b/docs/icons/small/rainbow.png
deleted file mode 100644
index 175053cb43..0000000000
--- a/docs/icons/small/rainbow.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound.gif b/docs/icons/small/sound.gif
deleted file mode 100644
index a7a89ffd9e..0000000000
--- a/docs/icons/small/sound.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound.png b/docs/icons/small/sound.png
deleted file mode 100644
index 6e3e95d3d0..0000000000
--- a/docs/icons/small/sound.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound2.gif b/docs/icons/small/sound2.gif
deleted file mode 100644
index 07706e07b8..0000000000
--- a/docs/icons/small/sound2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound2.png b/docs/icons/small/sound2.png
deleted file mode 100644
index bc46eb48fe..0000000000
--- a/docs/icons/small/sound2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/tar.gif b/docs/icons/small/tar.gif
deleted file mode 100644
index 59c3ffb9a5..0000000000
--- a/docs/icons/small/tar.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/tar.png b/docs/icons/small/tar.png
deleted file mode 100644
index 12f0347bf9..0000000000
--- a/docs/icons/small/tar.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/text.gif b/docs/icons/small/text.gif
deleted file mode 100644
index 66ceefbc8c..0000000000
--- a/docs/icons/small/text.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/text.png b/docs/icons/small/text.png
deleted file mode 100644
index b4e30f466d..0000000000
--- a/docs/icons/small/text.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/transfer.gif b/docs/icons/small/transfer.gif
deleted file mode 100644
index d460d3fffe..0000000000
--- a/docs/icons/small/transfer.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/transfer.png b/docs/icons/small/transfer.png
deleted file mode 100644
index 324048170a..0000000000
--- a/docs/icons/small/transfer.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/unknown.gif b/docs/icons/small/unknown.gif
deleted file mode 100644
index 7bf0bbc10a..0000000000
--- a/docs/icons/small/unknown.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/unknown.png b/docs/icons/small/unknown.png
deleted file mode 100644
index cad7e7a7aa..0000000000
--- a/docs/icons/small/unknown.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/uu.gif b/docs/icons/small/uu.gif
deleted file mode 100644
index 8c793f8a7f..0000000000
--- a/docs/icons/small/uu.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/uu.png b/docs/icons/small/uu.png
deleted file mode 100644
index ef87c82ee6..0000000000
--- a/docs/icons/small/uu.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound1.gif b/docs/icons/sound1.gif
deleted file mode 100644
index 8efb49f55d..0000000000
--- a/docs/icons/sound1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound1.png b/docs/icons/sound1.png
deleted file mode 100644
index 7a766be6cc..0000000000
--- a/docs/icons/sound1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound2.gif b/docs/icons/sound2.gif
deleted file mode 100644
index 48e6a7fb2f..0000000000
--- a/docs/icons/sound2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound2.png b/docs/icons/sound2.png
deleted file mode 100644
index 4511290939..0000000000
--- a/docs/icons/sound2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere1.gif b/docs/icons/sphere1.gif
deleted file mode 100644
index 7067070da2..0000000000
--- a/docs/icons/sphere1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere1.png b/docs/icons/sphere1.png
deleted file mode 100644
index 2198ae89ec..0000000000
--- a/docs/icons/sphere1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere2.gif b/docs/icons/sphere2.gif
deleted file mode 100644
index a9e462a377..0000000000
--- a/docs/icons/sphere2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere2.png b/docs/icons/sphere2.png
deleted file mode 100644
index 257632ba46..0000000000
--- a/docs/icons/sphere2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tar.gif b/docs/icons/tar.gif
deleted file mode 100644
index 4032c1bd3d..0000000000
--- a/docs/icons/tar.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tar.png b/docs/icons/tar.png
deleted file mode 100644
index 6c40521ff8..0000000000
--- a/docs/icons/tar.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tex.gif b/docs/icons/tex.gif
deleted file mode 100644
index 45e43233b8..0000000000
--- a/docs/icons/tex.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tex.png b/docs/icons/tex.png
deleted file mode 100644
index 906622d384..0000000000
--- a/docs/icons/tex.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/text.gif b/docs/icons/text.gif
deleted file mode 100644
index 4c623909fb..0000000000
--- a/docs/icons/text.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/text.png b/docs/icons/text.png
deleted file mode 100644
index 34d0edf86e..0000000000
--- a/docs/icons/text.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/transfer.gif b/docs/icons/transfer.gif
deleted file mode 100644
index 33697dbb66..0000000000
--- a/docs/icons/transfer.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/transfer.png b/docs/icons/transfer.png
deleted file mode 100644
index efaf17b682..0000000000
--- a/docs/icons/transfer.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/unknown.gif b/docs/icons/unknown.gif
deleted file mode 100644
index 32b1ea23fb..0000000000
--- a/docs/icons/unknown.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/unknown.png b/docs/icons/unknown.png
deleted file mode 100644
index 7c241c383c..0000000000
--- a/docs/icons/unknown.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/up.gif b/docs/icons/up.gif
deleted file mode 100644
index 6d6d6d1ebf..0000000000
--- a/docs/icons/up.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/up.png b/docs/icons/up.png
deleted file mode 100644
index a69ea00c5b..0000000000
--- a/docs/icons/up.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uu.gif b/docs/icons/uu.gif
deleted file mode 100644
index 4387d529f6..0000000000
--- a/docs/icons/uu.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uu.png b/docs/icons/uu.png
deleted file mode 100644
index b1d1a8579d..0000000000
--- a/docs/icons/uu.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uuencoded.gif b/docs/icons/uuencoded.gif
deleted file mode 100644
index 4387d529f6..0000000000
--- a/docs/icons/uuencoded.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uuencoded.png b/docs/icons/uuencoded.png
deleted file mode 100644
index b1d1a8579d..0000000000
--- a/docs/icons/uuencoded.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world1.gif b/docs/icons/world1.gif
deleted file mode 100644
index 05b4ec2058..0000000000
--- a/docs/icons/world1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world1.png b/docs/icons/world1.png
deleted file mode 100644
index 3a65c00d84..0000000000
--- a/docs/icons/world1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world2.gif b/docs/icons/world2.gif
deleted file mode 100644
index e3203f7a88..0000000000
--- a/docs/icons/world2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world2.png b/docs/icons/world2.png
deleted file mode 100644
index 9f8a3ea4b3..0000000000
--- a/docs/icons/world2.png
+++ /dev/null
Binary files differ
diff --git a/docs/man/ab.8 b/docs/man/ab.8
deleted file mode 100644
index 23561b3bdb..0000000000
--- a/docs/man/ab.8
+++ /dev/null
@@ -1,125 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "AB" 8 "2003-12-02" "Apache HTTP Server" "ab"
-
-.SH NAME
-ab \- Apache HTTP server benchmarking tool
-
-.SH "SYNOPSIS"
-
-.PP
-\fBab\fR [ -\fBA\fR \fIauth-username\fR:\fIpassword\fR ] [ -\fBc\fR \fIconcurrency\fR ] [ -\fBC\fR \fIcookie-name\fR=\fIvalue\fR ] [ -\fBd\fR ] [ -\fBe\fR \fIcsv-file\fR ] [ -\fBg\fR \fIgnuplot-file\fR ] [ -\fBh\fR ] [ -\fBH\fR \fIcustom-header\fR ] [ -\fBi\fR ] [ -\fBk\fR ] [ -\fBn\fR \fIrequests\fR ] [ -\fBp\fR \fIPOST-file\fR ] [ -\fBP\fR \fIproxy-auth-username\fR:\fIpassword\fR ] [ -\fBq\fR ] [ -\fBs\fR ] [ -\fBS\fR ] [ -\fBt\fR \fItimelimit\fR ] [ -\fBT\fR \fIcontent-type\fR ] [ -\fBv\fR \fIverbosity\fR] [ -\fBV\fR ] [ -\fBw\fR ] [ -\fBx\fR \fI<table>-attributes\fR ] [ -\fBX\fR \fIproxy\fR[:\fIport\fR] ] [ -\fBy\fR \fI<tr>-attributes\fR ] [ -\fBz\fR \fI<td>-attributes\fR ] [http://]\fIhostname\fR[:\fIport\fR]/\fIpath\fR
-
-
-.SH "SUMMARY"
-
-.PP
-ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server\&. It is designed to give you an impression of how your current Apache installation performs\&. This especially shows you how many requests per second your Apache installation is capable of serving\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--A \fIauth-username\fR:\fIpassword\fR
-Supply BASIC Authentication credentials to the server\&. The username and password are separated by a single : and sent on the wire base64 encoded\&. The string is sent regardless of whether the server needs it (\fIi\&.e\&.\fR, has sent an 401 authentication needed)\&.
-.TP
--c \fIconcurrency\fR
-Number of multiple requests to perform at a time\&. Default is one request at a time\&.
-.TP
--C \fIcookie-name\fR=\fIvalue\fR
-Add a Cookie: line to the request\&. The argument is typically in the form of a \fIname\fR=\fIvalue\fR pair\&. This field is repeatable\&.
-.TP
--d
-Do not display the "percentage served within XX [ms] table"\&. (legacy support)\&.
-.TP
--e \fIcsv-file\fR
-Write a Comma separated value (CSV) file which contains for each percentage (from 1% to 100%) the time (in milliseconds) it took to serve that percentage of the requests\&. This is usually more useful than the 'gnuplot' file; as the results are already 'binned'\&.
-.TP
--g \fIgnuplot-file\fR
-Write all measured values out as a 'gnuplot' or TSV (Tab separate values) file\&. This file can easily be imported into packages like Gnuplot, IDL, Mathematica, Igor or even Excell\&. The labels are on the first line of the file\&.
-.TP
--h
-Display usage information\&.
-.TP
--H \fIcustom-header\fR
-Append extra headers to the request\&. The argument is typically in the form of a valid header line, containing a colon-separated field-value pair (\fIi\&.e\&.\fR, "Accept-Encoding: zip/zop;8bit")\&.
-.TP
--i
-Do HEAD requests instead of GET\&.
-.TP
--k
-Enable the HTTP KeepAlive feature, \fIi\&.e\&.\fR, perform multiple requests within one HTTP session\&. Default is no KeepAlive\&.
-.TP
--n \fIrequests\fR
-Number of requests to perform for the benchmarking session\&. The default is to just perform a single request which usually leads to non-representative benchmarking results\&.
-.TP
--p \fIPOST-file\fR
-File containing data to POST\&.
-.TP
--P \fIproxy-auth-username\fR:\fIpassword\fR
-Supply BASIC Authentication credentials to a proxy en-route\&. The username and password are separated by a single : and sent on the wire base64 encoded\&. The string is sent regardless of whether the proxy needs it (\fIi\&.e\&.\fR, has sent an 407 proxy authentication needed)\&.
-.TP
--q
-When processing more than 150 requests, ab outputs a progress count on stderr every 10% or 100 requests or so\&. The -q flag will suppress these messages\&.
-.TP
--s
-When compiled in (ab -h will show you) use the SSL protected https rather than the http protocol\&. This feature is experimental and \fIvery\fR rudimentary\&. You probably do not want to use it\&.
-.TP
--S
-Do not display the median and standard deviation values, nor display the warning/error messages when the average and median are more than one or two times the standard deviation apart\&. And default to the min/avg/max values\&. (legacy support)\&.
-.TP
--t \fItimelimit\fR
-Maximum number of seconds to spend for benchmarking\&. This implies a -n 50000 internally\&. Use this to benchmark the server within a fixed total amount of time\&. Per default there is no timelimit\&.
-.TP
--T \fIcontent-type\fR
-Content-type header to use for POST data\&.
-.TP
--v \fIverbosity\fR
-Set verbosity level - 4 and above prints information on headers, 3 and above prints response codes (404, 200, etc\&.), 2 and above prints warnings and info\&.
-.TP
--V
-Display version number and exit\&.
-.TP
--w
-Print out results in HTML tables\&. Default table is two columns wide, with a white background\&.
-.TP
--x \fI<table>-attributes\fR
-String to use as attributes for <table>\&. Attributes are inserted <table \fIhere\fR >\&.
-.TP
--X \fIproxy\fR[:\fIport\fR]
-Use a proxy server for the requests\&.
-.TP
--y \fI<tr>-attributes\fR
-String to use as attributes for <tr>\&.
-.TP
--z \fI<td>-attributes\fR
-String to use as attributes for <td>\&.
-
-.SH "BUGS"
-
-.PP
-There are various statically declared buffers of fixed length\&. Combined with the lazy parsing of the command line arguments, the response headers from the server and other external inputs, this might bite you\&.
-
-.PP
-It does not implement HTTP/1\&.x fully; only accepts some 'expected' forms of responses\&. The rather heavy use of strstr(3) shows up top in profile, which might indicate a performance problem; \fIi\&.e\&.\fR, you would measure the ab performance rather than the server's\&.
-
diff --git a/docs/man/apachectl.8 b/docs/man/apachectl.8
deleted file mode 100644
index 48ec3ef9ad..0000000000
--- a/docs/man/apachectl.8
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "APACHECTL" 8 "2003-11-25" "Apache HTTP Server" "apachectl"
-
-.SH NAME
-apachectl \- Apache HTTP Server Control Interface
-
-.SH "SYNOPSIS"
-
-.PP
-When acting in pass-through mode, apachectl can take all the arguments available for the httpd binary\&.
-
-.PP
-\fBapachectl\fR [ \fIhttpd-argument\fR ]
-
-.PP
-When acting in SysV init mode, apachectl takes simple, one-word commands, defined below\&.
-
-.PP
-\fBapachectl\fR \fIcommand\fR
-
-
-.SH "SUMMARY"
-
-.PP
-apachectl is a front end to the Apache HyperText Transfer Protocol (HTTP) server\&. It is designed to help the administrator control the functioning of the Apache httpd daemon\&.
-
-.PP
-The apachectl script can operate in two modes\&. First, it can act as a simple front-end to the httpd command that simply sets any necessary environment variables and then invokes httpd, passing through any command line arguments\&. Second, apachectl can act as a SysV init script, taking simple one-word arguments like start, restart, and stop, and translating them into appropriate signals to httpd\&.
-
-.PP
-If your Apache installation uses non-standard paths, you will need to edit the apachectl script to set the appropriate paths to the httpd binary\&. You can also specify any necessary httpd command line arguments\&. See the comments in the script for details\&.
-
-.PP
-The apachectl script returns a 0 exit value on success, and >0 if an error occurs\&. For more details, view the comments in the script\&.
-
-
-.SH "OPTIONS"
-
-.PP
-Only the SysV init-style options are defined here\&. Other arguments are defined on the httpd manual page\&.
-
-
-.TP
-start
-Start the Apache httpd daemon\&. Gives an error if it is already running\&. This is equivalent to apachectl -k start\&.
-.TP
-stop
-Stops the Apache httpd daemon\&. This is equivalent to apachectl -k stop\&.
-.TP
-restart
-Restarts the Apache httpd daemon\&. If the daemon is not running, it is started\&. This command automatically checks the configuration files as in configtest before initiating the restart to make sure the daemon doesn't die\&. This is equivalent to apachectl -k restart\&.
-.TP
-fullstatus
-Displays a full status report from mod_status\&. For this to work, you need to have mod_status enabled on your server and a text-based browser such as lynx available on your system\&. The URL used to access the status report can be set by editing the STATUSURL variable in the script\&.
-.TP
-status
-Displays a brief status report\&. Similar to the fullstatus option, except that the list of requests currently being served is omitted\&.
-.TP
-graceful
-Gracefully restarts the Apache httpd daemon\&. If the daemon is not running, it is started\&. This differs from a normal restart in that currently open connections are not aborted\&. A side effect is that old log files will not be closed immediately\&. This means that if used in a log rotation script, a substantial delay may be necessary to ensure that the old log files are closed before processing them\&. This command automatically checks the configuration files as in configtest before initiating the restart to make sure Apache doesn't die\&. This is equivalent to apachectl -k graceful\&.
-.TP
-configtest
-Run a configuration file syntax test\&. It parses the configuration files and either reports Syntax Ok or detailed information about the particular syntax error\&. This is equivalent to apachectl -t\&.
-
-.PP
-The following additional option is available, but deprecated\&.
-
-
-.TP
-startssl
-This is equivalent to apachectl -k start -DSSL\&. We recommend that you use that command explicitly, or you adjust your httpd\&.conf to remove the <IfDefine> section so that SSL will always be available\&.
-
diff --git a/docs/man/apxs.8 b/docs/man/apxs.8
deleted file mode 100644
index 55decb92b7..0000000000
--- a/docs/man/apxs.8
+++ /dev/null
@@ -1,255 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "APXS" 8 "2003-11-25" "Apache HTTP Server" "apxs"
-
-.SH NAME
-apxs \- APache eXtenSion tool
-
-.SH "SYNOPSIS"
-
-.PP
-\fBapxs\fR -\fBg\fR [ -\fBS\fR \fIname\fR=\fIvalue\fR ] -\fBn\fR \fImodname\fR
-
-.PP
-\fBapxs\fR -\fBq\fR [ -\fBS\fR \fIname\fR=\fIvalue\fR ] \fIquery\fR \&.\&.\&.
-
-.PP
-\fBapxs\fR -\fBc\fR [ -\fBS\fR \fIname\fR=\fIvalue\fR ] [ -\fBo\fR \fIdsofile\fR ] [ -\fBI\fR \fIincdir\fR ] [ -\fBD\fR \fIname\fR=\fIvalue\fR ] [ -\fBL\fR \fIlibdir\fR ] [ -\fBl\fR \fIlibname\fR ] [ -\fBWc,\fR\fIcompiler-flags\fR ] [ -\fBWl,\fR\fIlinker-flags\fR ] \fIfiles\fR \&.\&.\&.
-
-.PP
-\fBapxs\fR -\fBi\fR [ -\fBS\fR \fIname\fR=\fIvalue\fR ] [ -\fBn\fR \fImodname\fR ] [ -\fBa\fR ] [ -\fBA\fR ] \fIdso-file\fR \&.\&.\&.
-
-.PP
-\fBapxs\fR -\fBe\fR [ -\fBS\fR \fIname\fR=\fIvalue\fR ] [ -\fBn\fR \fImodname\fR ] [ -\fBa\fR ] [ -\fBA\fR ] \fIdso-file\fR \&.\&.\&.
-
-
-.SH "SUMMARY"
-
-.PP
-apxs is a tool for building and installing extension modules for the Apache HyperText Transfer Protocol (HTTP) server\&. This is achieved by building a dynamic shared object (DSO) from one or more source or object \fIfiles\fR which then can be loaded into the Apache server under runtime via the LoadModule directive from mod_so\&.
-
-.PP
-So to use this extension mechanism your platform has to support the DSO feature and your Apache httpd binary has to be built with the mod_so module\&. The apxs tool automatically complains if this is not the case\&. You can check this yourself by manually running the command
-
-.nf
-
- $ httpd -l
-
-.fi
-
-.PP
-The module mod_so should be part of the displayed list\&. If these requirements are fulfilled you can easily extend your Apache server's functionality by installing your own modules with the DSO mechanism by the help of this apxs tool:
-
-.nf
-
- $ apxs -i -a -c mod_foo\&.c
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo\&.c
- ld -Bshareable -o mod_foo\&.so mod_foo\&.o
- cp mod_foo\&.so /path/to/apache/modules/mod_foo\&.so
- chmod 755 /path/to/apache/modules/mod_foo\&.so
- [activating module `foo' in /path/to/apache/etc/httpd\&.conf]
- $ apachectl restart
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
- [Tue Mar 31 11:27:55 1998] [debug] mod_so\&.c(303): loaded module foo_module
- /path/to/apache/sbin/apachectl restart: httpd started
- $ _
-
-.fi
-
-.PP
-The arguments \fIfiles\fR can be any C source file (\&.c), a object file (\&.o) or even a library archive (\&.a)\&. The apxs tool automatically recognizes these extensions and automatically used the C source files for compilation while just using the object and archive files for the linking phase\&. But when using such pre-compiled objects make sure they are compiled for position independent code (PIC) to be able to use them for a dynamically loaded shared object\&. For instance with GCC you always just have to use -fpic\&. For other C compilers consult its manual page or at watch for the flags apxs uses to compile the object files\&.
-
-.PP
-For more details about DSO support in Apache read the documentation of mod_so or perhaps even read the src/modules/standard/mod_so\&.c source file\&.
-
-
-.SH "OPTIONS"
-
-.SS "Common Options"
-
-
-.TP
--n \fImodname\fR
-This explicitly sets the module name for the -i (install) and -g (template generation) option\&. Use this to explicitly specify the module name\&. For option -g this is required, for option -i the apxs tool tries to determine the name from the source or (as a fallback) at least by guessing it from the filename\&.
-
-.SS "Query Options"
-
-
-.TP
--q
-Performs a query for apxs's knowledge about certain settings\&. The \fIquery\fR parameters can be one or more of the following strings: CC, CFLAGS, CFLAGS_SHLIB, INCLUDEDIR, LD_SHLIB, LDFLAGS_SHLIB, LIBEXECDIR, LIBS_SHLIB, SBINDIR, SYSCONFDIR, TARGET\&. .PP Use this for manually determining settings\&. For instance use .nf INC=-I`apxs -q INCLUDEDIR` .fi .PP inside your own Makefiles if you need manual access to Apache's C header files\&.
-
-.SS "Configuration Options"
-
-
-.TP
--S \fIname\fR=\fIvalue\fR
-This option changes the apxs settings described above\&.
-
-.SS "Template Generation Options"
-
-
-.TP
--g
-This generates a subdirectory \fIname\fR (see option -n) and there two files: A sample module source file named mod_\fIname\fR\&.c which can be used as a template for creating your own modules or as a quick start for playing with the apxs mechanism\&. And a corresponding Makefile for even easier build and installing of this module\&.
-
-.SS "DSO Compilation Options"
-
-
-.TP
--c
-This indicates the compilation operation\&. It first compiles the C source files (\&.c) of \fIfiles\fR into corresponding object files (\&.o) and then builds a dynamically shared object in \fIdsofile\fR by linking these object files plus the remaining object files (\&.o and \&.a) of \fIfiles\fR\&. If no -o option is specified the output file is guessed from the first filename in \fIfiles\fR and thus usually defaults to mod_\fIname\fR\&.so\&.
-.TP
--o \fIdsofile\fR
-Explicitly specifies the filename of the created dynamically shared object\&. If not specified and the name cannot be guessed from the \fIfiles\fR list, the fallback name mod_unknown\&.so is used\&.
-.TP
--D \fIname\fR=\fIvalue\fR
-This option is directly passed through to the compilation command(s)\&. Use this to add your own defines to the build process\&.
-.TP
--I \fIincdir\fR
-This option is directly passed through to the compilation command(s)\&. Use this to add your own include directories to search to the build process\&.
-.TP
--L \fIlibdir\fR
-This option is directly passed through to the linker command\&. Use this to add your own library directories to search to the build process\&.
-.TP
--l \fIlibname\fR
-This option is directly passed through to the linker command\&. Use this to add your own libraries to search to the build process\&.
-.TP
--Wc,\fIcompiler-flags\fR
-This option passes \fIcompiler-flags\fR as additional flags to the compiler command\&. Use this to add local compiler-specific options\&.
-.TP
--Wl,\fIlinker-flags\fR
-This option passes \fIlinker-flags\fR as additional flags to the linker command\&. Use this to add local linker-specific options\&.
-
-.SS "DSO Installation and Configuration Options"
-
-
-.TP
--i
-This indicates the installation operation and installs one or more dynamically shared objects into the server's \fImodules\fR directory\&.
-.TP
--a
-This activates the module by automatically adding a corresponding LoadModule line to Apache's httpd\&.conf configuration file, or by enabling it if it already exists\&.
-.TP
--A
-Same as option -a but the created LoadModule directive is prefixed with a hash sign (#), \fIi\&.e\&.\fR, the module is just prepared for later activation but initially disabled\&.
-.TP
--e
-This indicates the editing operation, which can be used with the -a and -A options similarly to the -i operation to edit Apache's httpd\&.conf configuration file without attempting to install the module\&.
-
-.SH "EXAMPLES"
-
-.PP
-Assume you have an Apache module named mod_foo\&.c available which should extend Apache's server functionality\&. To accomplish this you first have to compile the C source into a shared object suitable for loading into the Apache server under runtime via the following command:
-
-.nf
-
- $ apxs -c mod_foo\&.c
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo\&.c
- ld -Bshareable -o mod_foo\&.so mod_foo\&.o
- $ _
-
-.fi
-
-.PP
-Then you have to update the Apache configuration by making sure a LoadModule directive is present to load this shared object\&. To simplify this step apxs provides an automatic way to install the shared object in its "modules" directory and updating the httpd\&.conf file accordingly\&. This can be achieved by running:
-
-.nf
-
- $ apxs -i -a mod_foo\&.c
- cp mod_foo\&.so /path/to/apache/modules/mod_foo\&.so
- chmod 755 /path/to/apache/modules/mod_foo\&.so
- [activating module `foo' in /path/to/apache/etc/httpd\&.conf]
- $ _
-
-.fi
-
-.PP
-This way a line named
-
-.nf
-
- LoadModule foo_module modules/mod_foo\&.so
-
-.fi
-
-.PP
-is added to the configuration file if still not present\&. If you want to have this disabled per default use the -A option, \fIi\&.e\&.\fR
-
-.nf
-
- $ apxs -i -A mod_foo\&.c
-
-.fi
-
-.PP
-For a quick test of the apxs mechanism you can create a sample Apache module template plus a corresponding Makefile via:
-
-.nf
-
- $ apxs -g -n foo
- Creating [DIR] foo
- Creating [FILE] foo/Makefile
- Creating [FILE] foo/mod_foo\&.c
- $ _
-
-.fi
-
-.PP
-Then you can immediately compile this sample module into a shared object and load it into the Apache server:
-
-.nf
-
- $ cd foo
- $ make all reload
- apxs -c mod_foo\&.c
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo\&.c
- ld -Bshareable -o mod_foo\&.so mod_foo\&.o
- apxs -i -a -n "foo" mod_foo\&.so
- cp mod_foo\&.so /path/to/apache/modules/mod_foo\&.so
- chmod 755 /path/to/apache/modules/mod_foo\&.so
- [activating module `foo' in /path/to/apache/etc/httpd\&.conf]
- apachectl restart
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
- [Tue Mar 31 11:27:55 1998] [debug] mod_so\&.c(303): loaded module foo_module
- /path/to/apache/sbin/apachectl restart: httpd started
- $ _
-
-.fi
-
-.PP
-You can even use apxs to compile complex modules outside the Apache source tree, like PHP3:
-
-.nf
-
- $ cd php3
- $ \&./configure --with-shared-apache=\&.\&./apache-1\&.3
- $ apxs -c -o libphp3\&.so mod_php3\&.c libmodphp3-so\&.a
- gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3\&.c
- ld -Bshareable -o libphp3\&.so mod_php3\&.o libmodphp3-so\&.a
- $ _
-
-.fi
-
-.PP
-because apxs automatically recognized C source files and object files\&. Only C source files are compiled while remaining object files are used for the linking phase\&.
-
diff --git a/docs/man/dbmmanage.1 b/docs/man/dbmmanage.1
deleted file mode 100644
index af5a1d8af8..0000000000
--- a/docs/man/dbmmanage.1
+++ /dev/null
@@ -1,118 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "DBMMANAGE" 1 "2003-12-02" "Apache HTTP Server" "dbmmanage"
-
-.SH NAME
-dbmmanage \- Manage user authentication files in DBM format
-
-.SH "SYNOPSIS"
-
-.PP
-\fBdbmmanage\fR [ \fIencoding\fR ] \fIfilename\fR add|adduser|check|delete|update \fIusername\fR [ \fIencpasswd\fR [ \fIgroup\fR[,\fIgroup\fR\&.\&.\&.] [ \fIcomment\fR ] ] ]
-
-.PP
-\fBdbmmanage\fR \fIfilename\fR view [ \fIusername\fR ]
-
-.PP
-\fBdbmmanage\fR \fIfilename\fR import
-
-
-.SH "SUMMARY"
-
-.PP
-dbmmanage is used to create and update the DBM format files used to store usernames and password for basic authentication of HTTP users\&. Resources available from the Apache HTTP server can be restricted to just the users listed in the files created by dbmmanage\&. This program can only be used when the usernames are stored in a DBM file\&. To use a flat-file database see htpasswd\&.
-
-.PP
-This manual page only lists the command line arguments\&. For details of the directives necessary to configure user authentication in httpd see the httpd manual, which is part of the Apache distribution or can be found at http://httpd\&.apache\&.org/\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
-\fIfilename\fR
-The filename of the DBM format file\&. Usually without the extension \&.db, \&.pag, or \&.dir\&.
-.TP
-\fIusername\fR
-The user for which the operations are performed\&. The \fIusername\fR may not contain a colon (:)\&.
-.TP
-\fIencpasswd\fR
-This is the already encrypted password to use for the update and add commands\&. You may use a hyphen (-) if you want to get prompted for the password, but fill in the fields afterwards\&. Additionally when using the update command, a period (\&.) keeps the original password untouched\&.
-.TP
-\fIgroup\fR
-A group, which the user is member of\&. A groupname may not contain a colon (:)\&. You may use a hyphen (-) if you don't want to assign the user to a group, but fill in the comment field\&. Additionally when using the update command, a period (\&.) keeps the original groups untouched\&.
-.TP
-\fIcomment\fR
-This is the place for your opaque comments about the user, like realname, mailaddress or such things\&. The server will ignore this field\&.
-
-.SS "Encodings"
-
-
-.TP
--d
-crypt encryption (default, except on Win32, Netware)
-.TP
--m
-MD5 encryption (default on Win32, Netware)
-.TP
--s
-SHA1 encryption
-.TP
--p
-plaintext (\fInot recommended\fR)
-
-.SS "Commands"
-
-
-.TP
-add
-Adds an entry for \fIusername\fR to \fIfilename\fR using the encrypted password \fIencpasswd\fR\&.
-.TP
-adduser
-Asks for a password and then adds an entry for \fIusername\fR to \fIfilename\fR\&.
-.TP
-check
-Asks for a password and then checks if \fIusername\fR is in \fIfilename\fR and if it's password matches the specified one\&.
-.TP
-delete
-Deletes the \fIusername\fR entry from \fIfilename\fR\&.
-.TP
-import
-Reads \fIusername\fR:\fIpassword\fR entries (one per line) from STDIN and adds them to \fIfilename\fR\&. The passwords already have to be crypted\&.
-.TP
-update
-Same as the adduser command, except that it makes sure \fIusername\fR already exists in \fIfilename\fR\&.
-.TP
-view
-Just displays the contents of the DBM file\&. If you specify a \fIusername\fR, it displays the particular record only\&.
-
-.SH "BUGS"
-
-.PP
-One should be aware that there are a number of different DBM file formats in existence, and with all likelihood, libraries for more than one format may exist on your system\&. The three primary examples are SDBM, NDBM, the GNU project's GDBM, and Berkeley DB 2\&. Unfortunately, all these libraries use different file formats, and you must make sure that the file format used by \fIfilename\fR is the same format that dbmmanage expects to see\&. dbmmanage currently has no way of determining what type of DBM file it is looking at\&. If used against the wrong format, will simply return nothing, or may create a different DBM file with a different name, or at worst, it may corrupt the DBM file if you were attempting to write to it\&.
-
-.PP
-dbmmanage has a list of DBM format preferences, defined by the @AnyDBM::ISA array near the beginning of the program\&. Since we prefer the Berkeley DB 2 file format, the order in which dbmmanage will look for system libraries is Berkeley DB 2, then NDBM, then GDBM and then SDBM\&. The first library found will be the library dbmmanage will attempt to use for all DBM file transactions\&. This ordering is slightly different than the standard @AnyDBM::ISA ordering in Perl, as well as the ordering used by the simple dbmopen() call in Perl, so if you use any other utilities to manage your DBM files, they must also follow this preference ordering\&. Similar care must be taken if using programs in other languages, like C, to access these files\&.
-
-.PP
-One can usually use the file program supplied with most Unix systems to see what format a DBM file is in\&.
-
diff --git a/docs/man/htdigest.1 b/docs/man/htdigest.1
deleted file mode 100644
index fd6598f889..0000000000
--- a/docs/man/htdigest.1
+++ /dev/null
@@ -1,57 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "HTDIGEST" 1 "2003-11-25" "Apache HTTP Server" "htdigest"
-
-.SH NAME
-htdigest \- manage user files for digest authentication
-
-.SH "SYNOPSIS"
-
-.PP
-\fBhtdigest\fR [ -\fBc\fR ] \fIpasswdfile\fR \fIrealm\fR \fIusername\fR
-
-
-.SH "SUMMARY"
-
-.PP
-htdigest is used to create and update the flat-files used to store usernames, realm and password for digest authentication of HTTP users\&. Resources available from the Apache HTTP server can be restricted to just the users listed in the files created by htdigest\&.
-
-.PP
-This manual page only lists the command line arguments\&. For details of the directives necessary to configure digest authentication in httpd see the Apache manual, which is part of the Apache distribution or can be found at http://httpd\&.apache\&.org/\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--c
-Create the \fIpasswdfile\fR\&. If \fIpasswdfile\fR already exists, it is deleted first\&.
-.TP
-\fIpasswdfile\fR
-Name of the file to contain the username, realm and password\&. If -c is given, this file is created if it does not already exist, or deleted and recreated if it does exist\&.
-.TP
-\fIrealm\fR
-The realm name to which the user name belongs\&.
-.TP
-\fIusername\fR
-The user name to create or update in \fIpasswdfile\fR\&. If \fIusername\fR does not exist is this file, an entry is added\&. If it does exist, the password is changed\&.
-
diff --git a/docs/man/htpasswd.1 b/docs/man/htpasswd.1
deleted file mode 100644
index 6ecfb52d6e..0000000000
--- a/docs/man/htpasswd.1
+++ /dev/null
@@ -1,146 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "HTPASSWD" 1 "2003-11-25" "Apache HTTP Server" "htpasswd"
-
-.SH NAME
-htpasswd \- Manage user files for basic authentication
-
-.SH "SYNOPSIS"
-
-.PP
-\fBhtpasswd\fR [ -\fBc\fR ] [ -\fBm\fR ] [ -\fBD\fR ] \fIpasswdfile\fR \fIusername\fR
-
-.PP
-\fBhtpasswd\fR -\fBb\fR [ -\fBc\fR ] [ -\fBm\fR | -\fBd\fR | -\fBp\fR | -\fBs\fR ] [ -\fBD\fR ] \fIpasswdfile\fR \fIusername\fR \fIpassword\fR
-
-.PP
-\fBhtpasswd\fR -\fBn\fR [ -\fBm\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] \fIusername\fR
-
-.PP
-\fBhtpasswd\fR -\fBnb\fR [ -\fBm\fR | -\fBd\fR | -\fBs\fR | -\fBp\fR ] \fIusername\fR \fIpassword\fR
-
-
-.SH "SUMMARY"
-
-.PP
-htpasswd is used to create and update the flat-files used to store usernames and password for basic authentication of HTTP users\&. If htpasswd cannot access a file, such as not being able to write to the output file or not being able to read the file in order to update it, it returns an error status and makes no changes\&.
-
-.PP
-Resources available from the Apache HTTP server can be restricted to just the users listed in the files created by htpasswd\&. This program can only manage usernames and passwords stored in a flat-file\&. It can encrypt and display password information for use in other types of data stores, though\&. To use a DBM database see dbmmanage\&.
-
-.PP
-htpasswd encrypts passwords using either a version of MD5 modified for Apache, or the system's crypt() routine\&. Files managed by htpasswd may contain both types of passwords; some user records may have MD5-encrypted passwords while others in the same file may have passwords encrypted with crypt()\&.
-
-.PP
-This manual page only lists the command line arguments\&. For details of the directives necessary to configure user authentication in httpd see the Apache manual, which is part of the Apache distribution or can be found at http://httpd\&.apache\&.org/\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--b
-Use batch mode; \fIi\&.e\&.\fR, get the password from the command line rather than prompting for it\&. This option should be used with extreme care, since \fBthe password is clearly visible\fR on the command line\&.
-.TP
--c
-Create the \fIpasswdfile\fR\&. If \fIpasswdfile\fR already exists, it is rewritten and truncated\&. This option cannot be combined with the -n option\&.
-.TP
--n
-Display the results on standard output rather than updating a file\&. This is useful for generating password records acceptable to Apache for inclusion in non-text data stores\&. This option changes the syntax of the command line, since the \fIpasswdfile\fR argument (usually the first one) is omitted\&. It cannot be combined with the -c option\&.
-.TP
--m
-Use MD5 encryption for passwords\&. On Windows, Netware and TPF, this is the default\&.
-.TP
--d
-Use crypt() encryption for passwords\&. The default on all platforms but Windows, Netware and TPF\&. Though possibly supported by htpasswd on all platforms, it is not supported by the httpd server on Windows, Netware and TPF\&.
-.TP
--s
-Use SHA encryption for passwords\&. Facilitates migration from/to Netscape servers using the LDAP Directory Interchange Format (ldif)\&.
-.TP
--p
-Use plaintext passwords\&. Though htpasswd will support creation on all platforms, the httpd daemon will only accept plain text passwords on Windows, Netware and TPF\&.
-.TP
--D
-Delete user\&. If the username exists in the specified htpasswd file, it will be deleted\&.
-.TP
-\fIpasswdfile\fR
-Name of the file to contain the user name and password\&. If -c is given, this file is created if it does not already exist, or rewritten and truncated if it does exist\&.
-.TP
-\fIusername\fR
-The username to create or update in \fIpasswdfile\fR\&. If \fIusername\fR does not exist in this file, an entry is added\&. If it does exist, the password is changed\&.
-.TP
-\fIpassword\fR
-The plaintext password to be encrypted and stored in the file\&. Only used with the -b flag\&.
-
-.SH "EXIT STATUS"
-
-.PP
-htpasswd returns a zero status ("true") if the username and password have been successfully added or updated in the \fIpasswdfile\fR\&. htpasswd returns 1 if it encounters some problem accessing files, 2 if there was a syntax problem with the command line, 3 if the password was entered interactively and the verification entry didn't match, 4 if its operation was interrupted, 5 if a value is too long (username, filename, password, or final computed record), 6 if the username contains illegal characters (see the Restrictions section), and 7 if the file is not a valid password file\&.
-
-.SH "EXAMPLES"
-
-.nf
-
- htpasswd /usr/local/etc/apache/\&.htpasswd-users jsmith
-
-.fi
-
-.PP
-Adds or modifies the password for user jsmith\&. The user is prompted for the password\&. If executed on a Windows system, the password will be encrypted using the modified Apache MD5 algorithm; otherwise, the system's crypt() routine will be used\&. If the file does not exist, htpasswd will do nothing except return an error\&.
-
-.nf
-
- htpasswd -c /home/doe/public_html/\&.htpasswd jane
-
-.fi
-
-.PP
-Creates a new file and stores a record in it for user jane\&. The user is prompted for the password\&. If the file exists and cannot be read, or cannot be written, it is not altered and htpasswd will display a message and return an error status\&.
-
-.nf
-
- htpasswd -mb /usr/web/\&.htpasswd-all jones Pwd4Steve
-
-.fi
-
-.PP
-Encrypts the password from the command line (Pwd4Steve) using the MD5 algorithm, and stores it in the specified file\&.
-
-.SH "SECURITY CONSIDERATIONS"
-
-.PP
-Web password files such as those managed by htpasswd should \fInot\fR be within the Web server's URI space -- that is, they should not be fetchable with a browser\&.
-
-.PP
-The use of the -b option is discouraged, since when it is used the unencrypted password appears on the command line\&.
-
-.SH "RESTRICTIONS"
-
-.PP
-On the Windows and MPE platforms, passwords encrypted with htpasswd are limited to no more than 255 characters in length\&. Longer passwords will be truncated to 255 characters\&.
-
-.PP
-The MD5 algorithm used by htpasswd is specific to the Apache software; passwords encrypted using it will not be usable with other Web servers\&.
-
-.PP
-Usernames are limited to 255 bytes and may not include the character :\&.
-
diff --git a/docs/man/httpd.8 b/docs/man/httpd.8
deleted file mode 100644
index 8c24dec788..0000000000
--- a/docs/man/httpd.8
+++ /dev/null
@@ -1,119 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "HTTPD" 8 "2004-07-10" "Apache HTTP Server" "httpd"
-
-.SH NAME
-httpd \- Apache Hypertext Transfer Protocol Server
-
-.SH "SYNOPSIS"
-
-.PP
-\fBhttpd\fR [ -\fBd\fR \fIserverroot\fR ] [ -\fBf\fR \fIconfig\fR ] [ -\fBC\fR \fIdirective\fR ] [ -\fBc\fR \fIdirective\fR ] [ -\fBD\fR \fIparameter\fR ] [ -\fBe\fR \fIlevel\fR ] [ -\fBE\fR \fIfile\fR ] [ \fB-k\fR start|restart|graceful|stop ] [ -\fBR\fR \fIdirectory\fR ] [ -\fBh\fR ] [ -\fBl\fR ] [ -\fBL\fR ] [ -\fBS\fR ] [ -\fBt\fR ] [ -\fBv\fR ] [ -\fBV\fR ] [ -\fBX\fR ] [ -\fBM\fR ]
-
-.PP
-On Windows systems, the following additional arguments are available:
-
-.PP
-\fBhttpd\fR [ -\fBk\fR install|config|uninstall ] [ -\fBn\fR \fIname\fR ] [ -\fBw\fR ]
-
-
-.SH "SUMMARY"
-
-.PP
-httpd is the Apache HyperText Transfer Protocol (HTTP) server program\&. It is designed to be run as a standalone daemon process\&. When used like this it will create a pool of child processes or threads to handle requests\&.
-
-.PP
-In general, httpd should not be invoked directly, but rather should be invoked via apachectl on Unix-based systems or as a service on Windows NT, 2000 and XP and as a console application on Windows 9x and ME\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--d \fIserverroot\fR
-Set the initial value for the ServerRoot directive to \fIserverroot\fR\&. This can be overridden by the ServerRoot directive in the configuration file\&. The default is /usr/local/apache2\&.
-.TP
--f \fIconfig\fR
-Uses the directives in the file \fIconfig\fR on startup\&. If \fIconfig\fR does not begin with a /, then it is taken to be a path relative to the ServerRoot\&. The default is conf/httpd\&.conf\&.
-.TP
--k start|restart|graceful|stop
-Signals httpd to start, restart, or stop\&. See Stopping Apache for more information\&.
-.TP
--C \fIdirective\fR
-Process the configuration \fIdirective\fR before reading config files\&.
-.TP
--c \fIdirective\fR
-Process the configuration \fIdirective\fR after reading config files\&.
-.TP
--D \fIparameter\fR
-Sets a configuration \fIparameter \fRwhich can be used with <IfDefine> sections in the configuration files to conditionally skip or process commands at server startup and restart\&.
-.TP
--e \fIlevel\fR
-Sets the LogLevel to \fIlevel\fR during server startup\&. This is useful for temporarily increasing the verbosity of the error messages to find problems during startup\&.
-.TP
--E \fIfile\fR
-Send error messages during server startup to \fIfile\fR\&.
-.TP
--R \fIdirectory\fR
-When the server is compiled using the SHARED_CORE rule, this specifies the \fIdirectory\fR for the shared object files\&.
-.TP
--h
-Output a short summary of available command line options\&.
-.TP
--l
-Output a list of modules compiled into the server\&. This will \fBnot\fR list dynamically loaded modules included using the LoadModule directive\&.
-.TP
--L
-Output a list of directives together with expected arguments and places where the directive is valid\&.
-.TP
--M
-Dump a list of loaded Static and Shared Modules\&.
-.TP
--S
-Show the settings as parsed from the config file (currently only shows the virtualhost settings)\&.
-.TP
--t
-Run syntax tests for configuration files only\&. The program immediately exits after these syntax parsing tests with either a return code of 0 (Syntax OK) or return code not equal to 0 (Syntax Error)\&. If -D \fIDUMP\fR_\fIVHOSTS \fRis also set, details of the virtual host configuration will be printed\&. If -D \fIDUMP\fR_\fIMODULES \fR is set, all loaded modules will be printed\&.
-.TP
--v
-Print the version of httpd, and then exit\&.
-.TP
--V
-Print the version and build parameters of httpd, and then exit\&.
-.TP
--X
-Run httpd in debug mode\&. Only one worker will be started and the server will not detach from the console\&.
-
-.PP
-The following arguments are available only on the Windows platform:
-
-
-.TP
--k install|config|uninstall
-Install Apache as a Windows NT service; change startup options for the Apache service; and uninstall the Apache service\&.
-.TP
--n \fIname\fR
-The \fIname\fR of the Apache service to signal\&.
-.TP
--w
-Keep the console window open on error so that the error message can be read\&.
-
diff --git a/docs/man/logresolve.8 b/docs/man/logresolve.8
deleted file mode 100644
index 3efd062fcf..0000000000
--- a/docs/man/logresolve.8
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "LOGRESOLVE" 8 "2003-11-25" "Apache HTTP Server" "logresolve"
-
-.SH NAME
-logresolve \- Resolve IP-addresses to hostnames in Apache log files
-
-.SH "SYNOPSIS"
-
-.PP
-\fBlogresolve\fR [ -\fBs\fR \fIfilename\fR ] [ -\fBc\fR ] < \fIaccess_log\fR > \fIaccess_log\&.new\fR
-
-
-.SH "SUMMARY"
-
-.PP
-logresolve is a post-processing program to resolve IP-addresses in Apache's access logfiles\&. To minimize impact on your nameserver, logresolve has its very own internal hash-table cache\&. This means that each IP number will only be looked up the first time it is found in the log file\&.
-
-.PP
-Takes an Apache log file on standard input\&. The IP addresses must be the first thing on each line and must be seperated from the remainder of the line by a space\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--s \fIfilename\fR
-Specifies a filename to record statistics\&.
-.TP
--c
-This causes logresolve to apply some DNS checks: after finding the hostname from the IP address, it looks up the IP addresses for the hostname and checks that one of these matches the original address\&.
-
diff --git a/docs/man/rotatelogs.8 b/docs/man/rotatelogs.8
deleted file mode 100644
index a8875f751f..0000000000
--- a/docs/man/rotatelogs.8
+++ /dev/null
@@ -1,133 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "ROTATELOGS" 8 "2004-06-20" "Apache HTTP Server" "rotatelogs"
-
-.SH NAME
-rotatelogs \- Piped logging program to rotate Apache logs
-
-.SH "SYNOPSIS"
-
-.PP
-\fBrotatelogs\fR [ -\fBl\fR ] \fIlogfile\fR [ \fIrotationtime\fR [ \fIoffset\fR ]] | [ \fIfilesize\fRM ]
-
-
-.SH "SUMMARY"
-
-.PP
-rotatelogs is a simple program for use in conjunction with Apache's piped logfile feature\&. For example:
-
-.nf
-
- CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-
-.fi
-
-.PP
-This creates the files /var/logs/logfile\&.nnnn where nnnn is the system time at which the log nominally starts (this time will always be a multiple of the rotation time, so you can synchronize cron scripts with it)\&. At the end of each rotation time (here after 24 hours) a new log is started\&.
-
-.nf
-
- CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
-
-.fi
-
-.PP
-This configuration will rotate the logfile whenever it reaches a size of 5 megabytes\&.
-
-.nf
-
- ErrorLog "|bin/rotatelogs /var/logs/errorlog\&.%Y-%m-%d-%H_%M_%S 5M"
-
-.fi
-
-.PP
-This configuration will rotate the error logfile whenever it reaches a size of 5 megabytes, and the suffix to the logfile name will be created of the form errorlog\&.YYYY-mm-dd-HH_MM_SS\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--l
-Causes the use of local time rather than GMT as the base for the interval\&. Note that using -l in an environment which changes the GMT offset (such as for BST or DST) can lead to unpredictable results!
-.TP
-\fIlogfile\fR
-The path plus basename of the logfile\&. If \fIlogfile\fR includes any '%' characters, it is treated as a format string for strftime(3)\&. Otherwise, the suffix \fI\&.nnnnnnnnnn\fR is automatically added and is the time in seconds\&. Both formats compute the start time from the beginning of the current period\&.
-.TP
-\fIrotationtime\fR
-The time between log file rotations in seconds\&.
-.TP
-\fIoffset\fR
-The number of minutes offset from UTC\&. If omitted, zero is assumed and UTC is used\&. For example, to use local time in the zone UTC -5 hours, specify a value of -300 for this argument\&.
-.TP
-\fIfilesize\fRM
-The maximum file size in megabytes followed by the letter M to specify size rather than time\&. Use this parameter in place of both rotationtime and offset\&.
-
-.SH "PORTABILITY"
-
-.PP
-The following logfile format string substitutions should be supported by all strftime(3) implementations, see the strftime(3) man page for library-specific extensions\&.
-
-.Ip "\(bu \s-1%A\s0 \- full weekday name (localized)
-
-.Ip "\(bu \s-1%a\s0 \- 3-character weekday name (localized)
-
-.Ip "\(bu \s-1%B\s0 \- full month name (localized)
-
-.Ip "\(bu \s-1%b\s0 \- 3-character month name (localized)
-
-.Ip "\(bu \s-1%c\s0 \- date and time (localized)
-
-.Ip "\(bu \s-1%d\s0 \- 2-digit day of month
-
-.Ip "\(bu \s-1%H\s0 \- 2-digit hour (24 hour clock)
-
-.Ip "\(bu \s-1%I\s0 \- 2-digit hour (12 hour clock)
-
-.Ip "\(bu \s-1%j\s0 \- 3-digit day of year
-
-.Ip "\(bu \s-1%M\s0 \- 2-digit minute
-
-.Ip "\(bu \s-1%m\s0 \- 2-digit month
-
-.Ip "\(bu \s-1%p\s0 \- am/pm of 12 hour clock (localized)
-
-.Ip "\(bu \s-1%S\s0 \- 2-digit second
-
-.Ip "\(bu \s-1%U\s0 \- 2-digit week of year (Sunday first day of week)
-
-.Ip "\(bu \s-1%W\s0 \- 2-digit week of year (Monday first day of week)
-
-.Ip "\(bu \s-1%w\s0 \- 1-digit weekday (Sunday first day of week)
-
-.Ip "\(bu \s-1%X\s0 \- time (localized)
-
-.Ip "\(bu \s-1%x\s0 \- date (localized)
-
-.Ip "\(bu \s-1%Y\s0 \- 4-digit year
-
-.Ip "\(bu \s-1%y\s0 \- 2-digit year
-
-.Ip "\(bu \s-1%Z\s0 \- time zone name
-
-.Ip "\(bu \s-1%%\s0 \- literal `%'
-
diff --git a/docs/man/suexec.8 b/docs/man/suexec.8
deleted file mode 100644
index bcc4e7abea..0000000000
--- a/docs/man/suexec.8
+++ /dev/null
@@ -1,48 +0,0 @@
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.\" DO NOT EDIT! Generated from XML source.
-.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-.de Sh \" Subsection
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.TH "SUEXEC" 8 "2003-12-02" "Apache HTTP Server" "suexec"
-
-.SH NAME
-suexec \- Switch user before executing external programs
-
-.SH "SYNOPSIS"
-
-.PP
-\fBsuexec\fR -\fBV\fR
-
-
-.SH "SUMMARY"
-
-.PP
-suexec is used by the Apache HTTP Server to switch to another user before executing CGI programs\&. In order to achieve this, it must run as root\&. Since the HTTP daemon normally doesn't run as root, the suexec executable needs the setuid bit set and must be owned by root\&. It should never be writable for any other person than root\&.
-
-.PP
-For further information about the concepts and and the security model of suexec please refer to the suexec documentation (http://httpd\&.apache\&.org/docs-2\&.1/suexec\&.html)\&.
-
-
-.SH "OPTIONS"
-
-
-.TP
--V
-If you are root, this option displays the compile options of suexec\&. For security reasons all configuration options are changeable only at compile time\&.
-
diff --git a/docs/manual/.cvsignore b/docs/manual/.cvsignore
deleted file mode 100644
index ae127077ef..0000000000
--- a/docs/manual/.cvsignore
+++ /dev/null
@@ -1,12 +0,0 @@
-_chm
-_zip
-_tools
-_dist
-build
-*.tex
-*.aux
-*.out
-*.log
-*.pdf
-*.toc
-.outdated*
diff --git a/docs/manual/LICENSE b/docs/manual/LICENSE
deleted file mode 100644
index 57bc88a15a..0000000000
--- a/docs/manual/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/docs/manual/bind.html b/docs/manual/bind.html
deleted file mode 100644
index c2af6387d2..0000000000
--- a/docs/manual/bind.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: bind.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: bind.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: bind.html.fr
-Content-Language: fr
-Content-type: text/html; charset=ISO-8859-1
-
-URI: bind.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: bind.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/bind.html.de b/docs/manual/bind.html.de
deleted file mode 100644
index d6fa277f78..0000000000
--- a/docs/manual/bind.html.de
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Anbindung - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Anbindung</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/bind.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Konfiguration der vom Apache verwendeten Adressen und Ports.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Überblick</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">Betrachtung von IPv6-Besonderheiten</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Das Zusammenspiel mit virtuellen Hosts</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="vhosts/">Virtuelle Hosts</a></li><li><a href="dns-caveats.html">Probleme bezüglich DNS und
- Apache</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Überblick</a></h2>
-
-
- <table class="related"><tr><th>Referenzierte Module</th><th>Referenzierte Direktiven</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
-
- <p>Beim Start bindet sich der Apache an bestimmte Adressen und Ports
- der lokalen Maschine und wartet auf eingehende Anfragen.
- Standardmäßig lauscht er an allen Adressen des Systems.
- Es muss ihm jedoch mitgeteilt werden, an bestimmten Ports zu lauschen
- oder nur an ausgewählten Adressen, bzw. einer Kombination aus
- beidem. Dies wird oft mit der Funktionalität virtueller Hosts
- kombiniert, die bestimmt, wie der Apache auf verschiedene IP-Adressen,
- Hostnamen und Ports reagiert.</p>
-
- <p>Die Direktive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- weist den Server an, eingehende Anfragen nur an bestimmten Ports oder
- Adress/Port-Kombinationen zu akzeptieren. Wenn bei der <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Direktive nur eine Portnummer
- angegeben wird, dann lauscht der Server auf allen Netzwerkinterfaces an
- dem angegebenen Port. Ist auch eine IP-Adresse angegeben, dann lauscht der
- Server an der angegebenen Schnittstelle auf dem angegebenen Port. Es
- können mehrere <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Anweisungen verwendet werden, um
- eine Reihe von Adressen und Ports anzugeben, an denen gelauscht werden
- soll. Der Server wird dann auf Anfragen an jeder der abgehörten
- Adressen und Ports antworten.</p>
-
- <p>Um beispielsweise den Server zu veranlassen, sowohl an Port 80, als
- auch an Port 8000 Verbindungen zu akzeptieren, geben Sie an:</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>Um den Server Verbindungen an zwei bestimmten
- Netzwerkinterfaces und Ports zu akzeptieren zu lassen, geben Sie an:</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>IPv6-Adressen müssen wie im folgenden Beispiel in eckigen
- Klammern angegeben werden:</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipv6" id="ipv6">Betrachtung von IPv6-Besonderheiten</a></h2>
-
-
- <p>Eine wachsende Anzahl von Plattformen implementiert IPv6. Die APR
- unterstützt IPv6 auf den meisten dieser Plattformen und
- ermöglicht dem Apache, IPv6-Sockets zu verwenden und Anfragen zu
- behandeln, die über IPv6 gesendet wurden.</p>
-
- <p>Für Apache-Administratoren kommt erschwerend die Frage hinzu, ob
- IPv6-Sockets sowohl IPv4- als auch IPv6-Verbindungen
- handhaben können. Zum Betrieb von IPv4-Verbindungen an
- IPv6-Sockets werden auf IPv6 abgebildete IPv4-Adressen
- <span class="transnote">(<em>Anm.d.Ü.:</em> so genannete IPv4-gemappte IPv6-Adressen)</span>
- verwendet, welche standardmäßig auf den meisten Plattformen
- erlaubt sind. Unter FreeBSD, NetBSD und OpenBSD jedoch sind sie
- standardmäßig deaktiviert, um den Systemgrundsätzen dieser
- Plattformen zu entsprechen. Doch selbst auf Systemen, wo dies
- standardmäßig dekativiert ist, kann dieses Verhalten mit einem
- speziellen Konfigurationsparameter für den Apache geändert
- werden.</p>
-
- <p>Auf der anderen Seite ist die Verwendung von gemappten Adressen bei
- einigen Plattformen wie Linux und True64 der <strong>einzige</strong>
- Weg, sowohl IPv4 wie auch IPv6 zu verwenden. Wenn Sie möchten, dass
- der Apache IPv4- und IPv6-Verbindungen mit einem Minimum an Sockets
- behandelt, was die Verwendung von IPv4-gemappten IPv6-Adressen
- erfordert, dann müssen Sie die <a href="programs/configure.html">configure</a>-Option <code>--enable-v4-mapped</code> angeben.</p>
-
- <p><code>--enable-v4-mapped</code> ist die Voreinstellung auf allen
- Plattformen außer FreeBSD, NetBSD und OpenBSD, so dass Ihr Apache
- wahrscheinlich so übersetzt wurde.</p>
-
- <p>Geben Sie wie in dem folgenden Beispiel bei allen <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Anweisungen eine IPv4-Adresse
- an, wenn Sie möchten, dass Ihr Apache lediglich IPv4-Adressen
- behandelt, unabhängig davon, was Ihre Plattform und die APR
- unterstützen:</p>
-
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </code></p></div>
-
- <p>Wenn Sie möchten, dass der Apache IPv4- und IPv6-Verbindungen an
- separaten Sockets behandelt (d.h. IPv4-gemappte Adressen deaktiviert
- werden sollen) und Ihre Plattform es unterstützt, dann müssen
- Sie die <a href="programs/configure.html">configure</a>-Option
- <code>--disable-v4-mapped</code> angeben.
- Unter FreeBSD, NetBSD und OpenBSD ist <code>--disable-v4-mapped</code>
- voreingestellt.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">Das Zusammenspiel mit virtuellen Hosts</a></h2>
-
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> implementiert keine
- virtuellen Hosts. Es teilt dem Hauptserver lediglich mit, an welchen
- Adressen und Ports er zu lauschen hat. Werden keine <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Container
- verwendet, verhält sich der Server bei allen angenommenen Anfragen
- gleich. <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Abschnitte können jedoch
- dazu verwendet werden, ein unterschiedliches Verhalten für eine oder
- mehrere Adressen und Ports festzulegen. Um einen virtuellen Host
- einzurichten, muss dem Server zunächst mitgeteilt werden, an den
- betreffenden Adressen und Ports zu lauschen. Dann sollte ein <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Abschnitt für
- eine bestimmte Adresse und einen Port erstellt werden, um das Verhalten
- dieses virtuellen Hosts festzulegen. Beachten Sie bitte, dass auf einen
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> nicht
- zugegriffen werden kann, wenn er für eine Adresse und einen Port
- eingerichtet wurde, an dem der Server nicht lauscht.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/bind.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/bind.html.en b/docs/manual/bind.html.en
deleted file mode 100644
index c273d95129..0000000000
--- a/docs/manual/bind.html.en
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Binding - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Binding</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Configuring Apache to listen on specific addresses and ports.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Overview</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">Special IPv6 Considerations</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">How This Works With Virtual Hosts</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="vhosts/">Virtual Hosts</a></li><li><a href="dns-caveats.html">DNS Issues</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Overview</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
-
-
- <p>When Apache starts, it binds to some port and address on
- the local machine and waits for incoming requests. By default,
- it listens to all addresses on the machine. However, it needs to
- be told to listen on specific ports, or to listen on only selected
- addresses, or a combination. This is often combined with the
- Virtual Host feature which determines how Apache responds to
- different IP addresses, hostnames and ports.</p>
-
- <p>The <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- directive tells the server to accept
- incoming requests only on the specified port or
- address-and-port combinations. If only a port number is
- specified in the <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- directive, the server
- listens to the given port on all interfaces. If an IP address
- is given as well as a port, the server will listen on the given
- port and interface. Multiple <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> directives may be used to
- specify a number of addresses and ports to listen on. The
- server will respond to requests from any of the listed
- addresses and ports.</p>
-
- <p>For example, to make the server accept connections on both
- port 80 and port 8000, use:</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>To make the server accept connections on two specified
- interfaces and port numbers, use</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>IPv6 addresses must be surrounded in square brackets, as in the
- following example:</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipv6" id="ipv6">Special IPv6 Considerations</a></h2>
-
-
- <p>A growing number of platforms implement IPv6, and APR supports
- IPv6 on most of these platforms, allowing Apache to allocate IPv6
- sockets and handle requests which were sent over IPv6.</p>
-
- <p>One complicating factor for Apache administrators is whether or
- not an IPv6 socket can handle both IPv4 connections and IPv6
- connections. Handling IPv4 connections with an IPv6 socket uses
- IPv4-mapped IPv6 addresses, which are allowed by default on most
- platforms but are disallowed by default on FreeBSD, NetBSD, and
- OpenBSD in order to match the system-wide policy on those
- platforms. But even on systems where it is disallowed by default, a
- special configure parameter can change this behavior for Apache.</p>
-
- <p>On the other hand, on some platforms such as Linux and Tru64 the
- <strong>only</strong> way to handle both IPv6 and IPv4 is to use
- mapped addresses. If you want Apache to handle IPv4 and IPv6 connections
- with a minimum of sockets, which requires using IPv4-mapped IPv6
- addresses, specify the <code>--enable-v4-mapped</code> <a href="programs/configure.html">configure</a> option.</p>
-
- <p><code>--enable-v4-mapped</code> is the default on all platforms but
- FreeBSD, NetBSD, and OpenBSD, so this is probably how your Apache was
- built.</p>
-
- <p>If you want Apache to handle IPv4 connections only, regardless of
- what your platform and APR will support, specify an IPv4 address on all
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> directives, as in the
- following examples:</p>
-
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </code></p></div>
-
- <p>If your platform supports it and you want Apache to handle IPv4 and
- IPv6 connections on separate sockets (i.e., to disable IPv4-mapped
- addresses), specify the <code>--disable-v4-mapped</code> <a href="programs/configure.html">configure</a> option.
- <code>--disable-v4-mapped</code> is the default on FreeBSD,
- NetBSD, and OpenBSD.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">How This Works With Virtual Hosts</a></h2>
-
-
- <p> <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> does not implement
- Virtual Hosts. It only tells the
- main server what addresses and ports to listen to. If no
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- directives are used, the server will behave
- the same for all accepted requests. However,
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- can be used to specify a different behavior
- for one or more of the addresses and ports. To implement a
- VirtualHost, the server must first be told to listen to the
- address and port to be used. Then a
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> section
- should be created for a specified address and port to set the
- behavior of this virtual host. Note that if the
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- is set for an address and port that the
- server is not listening to, it cannot be accessed.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/bind.html.fr b/docs/manual/bind.html.fr
deleted file mode 100644
index a8bfcf15e6..0000000000
--- a/docs/manual/bind.html.fr
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Liaison - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Liaison</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<div class="outofdate">Cette traduction peut être périmée. Verifiez la version
- Anglaise pour les changements récents.</div>
-
- <p>Configuration des adresses et ports sur lesquels Apache écoute.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Informations générales</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">Considérations Spéciales avec IPv6</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Faire fonctionner tout ceci avec les Serveurs Virtuels</a></li>
-</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="vhosts/">Serveurs Virtuels</a></li><li><a href="dns-caveats.html">Problémes DNS</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Informations générales</a></h2>
-
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
-
-
- <p>Au moment de son démarrage, Apache se lie à un port et à une
- adresse IP sur la machine locale et se met en attente de requètes.
- Par défaut, Apache écoute sur toutes les adresses de la machine.
- Apache accepte d'écouter sur un ou plusieurs ports spécifiques,
- sur une seule ou plusieurs adresses, ou encore sur une combinaison port-adresse.
- Il est fréquent d'utiliser ces possibilités avec les fonctionnalités
- de Serveurs Virtuels, qui permettent de faire répondre le serveur de
- manière différente en fonction de l'adresse IP, du nom d'hôte ou
- du port.</p>
-
- <p>Le serveur interprète la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- en acceptant les requètes seulement sur le port ou la combinaison
- adresse IP + port passée en argument. Dans le cas où seul un port
- est spécifié avec la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- le serveur se met à l'écoute sur le port spécifié, sur toutes
- les interfaces et adresses de la machine. Si une adresse IP est
- spécifiée en plus du port, le serveur n'écoute que sur l'adresse
- et le port spécifié. Il est possible de configurer plusieurs adresses
- et ports avec la directives
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- pour écoute par le serveur. Le serveur répond aux requètes faites
- à toutes les adresses et ports énumérés.</p>
-
-
- <p>Par exemple, pour que le serveur accepte les connexions sur
- les ports 80 et 8000, spécifiez :</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>Pour qu'Apache accepte les connexions sur deux combinaisons
- adresses + ports, spécifiez :</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>Les adresses IPv6 sont acceptées, pourvu qu'elles soient spécifiées
- entre crochets de la façon suivante :</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipv6" id="ipv6">Considérations Spéciales avec IPv6</a></h2>
-
-
- <p>De plus en plus de plate-formes implémentent IPv6. APR
- supporte IPv6 sur la plupart d'entre elles, si bien qu'Apache
- peut assigner des interfaces de connexions IPv6 et répondre aux
- requètes utilisant IPv6.</p>
-
- <p>Une complication possible pour les administrateurs Apache est de
- savoir si une interface de connexion IPv6 peut répondre aux deux types de
- connexions IPv4 et IPv6.
- Manipuler les connexions IPv4 avec une interface de connexion IPv6
- suppose l'utilisation d'adresses IPv6 mappées en IPv4, ce qui est
- le cas par defaut sur la plupart des plate-formes, à l'exeption de FreeBSD,
- NetBSD, et OpenBSD, cela en raison des politiques systèmes de ces plate-formes.
- Mème sur des systèmes où cette fonctionnalité n'est pas activée par
- défaut, une option de compilation permet de changer ce
- fonctionnement pour Apache.</p>
- <p>Pour qu'Apache puisse gérer à la fois les connexions IPv4 et IPv6
- avec un minimum d'interfaces de connexions, il faut permettre l'utilisation
- des adresses
- IPv6 mappées en IPv4, ce qui est possible en spécifiant l'option
-
- de compilation <code>--enable-v4-mapped</code> et en utilisant la
- directive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- comme suit:</p>
-
- <div class="example"><p><code>
- Listen 80
- </code></p></div>
-
- <p>Si <code>--enable-v4-mapped</code> a été spécifié à la compilation,
- les directives <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- de la configuration par défaut sont de la forme ci-dessus.
- <code>--enable-v4-mapped</code> est l'option de compilation
- par défaut sur toutes les plate-formes, sauf FreeBSD, NetBSD, et
- OpenBSD.</p>
-
-
- <p>Pour qu'Apache ne manipule que les connexions IPv4, en ignorant l'éventuel
- support IPv6 de la plate-forme ou d'APR, une adresse IPv4 peut être
- spécifié pour toutes les directives
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- comme dans les exemples suivantss:</p>
-
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </code></p></div>
-
- <p>Pour qu'Apache manipule les connexions IPv4 et IPv6 sur des interfaces
- différentes (c'est-à-dire, pour ne pas accepter les addresse IPv6 mappées
- en IPv4), spécifier l'option de compilation <code>--disable-v4-mapped</code>
- et utiliser des directives <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- spécifiques telles que:</p>
- <div class="example"><p><code>
- Listen [::]:80<br />
- Listen 0.0.0.0:80
- </code></p></div>
-
- <p>Avec <code>--disable-v4-mapped</code>, la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> à l'intérieur
- du fichier de configuration par défaut créé par Apache utilise la forme
- ci-dessus.
- <code>--disable-v4-mapped</code> est l'option de compilation par défaut sous
- FreeBSD, NetBSD, et OpenBSD.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">Faire fonctionner tout ceci avec les Serveurs Virtuels</a></h2>
-
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- n'implémente aucun Serveur Virtuel. Cette directive sert simplement
- à informer le serveur principal sur quels addresses et ports écouter.
- Dans le cas où aucune section
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- n'est utilisée, le serveur répondra de la mème manière pour toutes
- les requètes qu'il acceptera. Cependant des sections
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- peuvent être utilisées pour qu'Apache réagisse de façon différente à
- une requète selon l'adresse ou le port. Avant d'implémenter
- un Serveur Virtuel au moyen de la directive
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>, la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- doit tre utilisée pour que le serveur écoute sur l'adresse
- ou le port spécifié. Une section
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- peut alors être utilisée pour définir la réaction du Serveur Virtuel pour une
- adresse et un port spécifique. À noter que si un Serveur Virtuel est
- positionné au moyen de la directive
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- sur une adresse et un port sur lesquels le serveur n'est pas à l'écoute,
- le Serveur Virtuel ne sera pas accessible.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/bind.html.ja.euc-jp b/docs/manual/bind.html.ja.euc-jp
deleted file mode 100644
index 35e430b275..0000000000
--- a/docs/manual/bind.html.ja.euc-jp
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Ð¥¤¥ó¥É - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥Ð¥¤¥ó¥É</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Apache ¤¬»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÀßÄê¤ò¤·¤Þ¤¹¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">³µÍ×</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">IPv6 ¤ÎÆõ­»ö¹à</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ·¤Æ¤É¤¦Æ¯¤¯¤Î¤«</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li><li><a href="dns-caveats.html">DNS ¤ÎÌäÂê</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">³µÍ×</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
-
-
- <p>Apache ¤Ïµ¯Æ°»þ¤Ë¡¢¥í¡¼¥«¥ë¥Þ¥·¥ó¤Î¤¢¤ë¥Ý¡¼¥È¤¢¤è¤Ó¥¢¥É¥ì¥¹
- ¤ËÂФ·¤ÆÀܳ¤·¡¢¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤Î¤òÂÔ¤Á¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥Þ¥·¥ó¤Î¤¹¤Ù¤Æ¤Î¥¢¥É¥ì¥¹¤ËÂФ·¤Æ listen ¤·¤Þ¤¹¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢ÆÃÄê¤Î¥Ý¡¼¥È¤«¡¢ÆÃÄê¤Î¥¢¥É¥ì¥¹¤Î¤ß¤«¡¢
- ¤Þ¤¿¤Ï¤½¤ì¤é¤ÎÁȤ߹ç¤ï¤»¤Î¤¤¤º¤ì¤«¤ò listen ¤¹¤ë¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢°Û¤Ê¤ë IP ¥¢¥É¥ì¥¹¡¢¥Û¥¹¥È̾¡¢¥Ý¡¼¥È¤ËÂФ¹¤ë Apache
- ¤Î±þÅúÊýË¡¤ò·èÄꤹ¤ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥Èµ¡Ç½¤ÈÁȤ߹ç¤ï¤»¤Æ»È¤ï¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢ÆÃÄê¤Î¥Ý¡¼¥È¤ä¥¢¥É¥ì¥¹¡¦¥Ý¡¼¥È¤ÎÁȤ«¤é¤Î¤ßÆþ¤Ã¤Æ¤¯¤ë
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£
- ¤â¤·¥Ý¡¼¥ÈÈÖ¹æ¤Î¤ß¤¬ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢
- ¤¹¤Ù¤Æ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎÍ¿¤¨¤é¤ì¤¿¥Ý¡¼¥ÈÈÖ¹æ¤ò
- listen ¤·¤Þ¤¹¡£ IP ¥¢¥É¥ì¥¹¤¬¥Ý¡¼¥ÈÈÖ¹æ¤ÈƱ»þ¤ËÍ¿¤¨¤é¤ì¤¿¾ì¹ç¤Ï¡¢
- ¥µ¡¼¥Ð¤ÏÍ¿¤¨¤é¤ì¤¿¥Ý¡¼¥È¤È¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò listen ¤·¤Þ¤¹¡£
- Ê£¿ô¤Î <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÍѤ¤¤Æ
- ¤¤¤¯¤Ä¤«¤Î listen ¤¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ï¥ê¥¹¥È¤µ¤ì¤¿¥¢¥É¥ì¥¹¤ä¥Ý¡¼¥È¤«¤é¤Î¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤Ë
- ÂФ·¤Æ±þÅú¤·¤Þ¤¹¡£</p>
-
- <p>¤¿¤È¤¨¤Ð¡¢¥Ý¡¼¥È 80 ¤È 8000 ¤ÎξÊý¤ËÂФ·¤Æ¤ÎÀܳ¤ò¼õ¤±ÉÕ¤±¤ë¤Ë¤Ï</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>¤È¤·¤Þ¤¹¡£
- Æó¤Ä¤Î»ØÄꤵ¤ì¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤È¥Ý¡¼¥ÈÈÖ¹æ¤ËÂФ·¤Æ¤ÎÀܳ¤ò¼õ¤±ÉÕ¤±¤ë¤Ë¤Ï¡¢
- </p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>¤È¤·¤Þ¤¹¡£
- IPv6 ¥¢¥É¥ì¥¹¤Ï¡¢³Ñ³ç¸Ì¤Ç¼¡¤ÎÎã¤Î¤è¤¦¤Ë°Ï¤Þ¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipv6" id="ipv6">IPv6 ¤ÎÆõ­»ö¹à</a></h2>
-
-
- <p>¿¤¯¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç IPv6 ¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤­¤Æ¤¤¤Æ¡¢
- APR ¤Ï¤³¤ì¤é¤Î¤Û¤È¤ó¤É¤Ç IPv6 ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤Î¤Ç¡¢
- Apache ¤Ï IPv6 ¥½¥±¥Ã¥È¤ò³ä¤êÅö¤Æ¤Æ IPv6
- ·Ðͳ¤ÇÁ÷¤é¤ì¤Æ¤­¤¿¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>IPv6 ¥½¥±¥Ã¥È¤¬ IPv4 ¤È IPv6 ¥³¥Í¥¯¥·¥ç¥ó¤ÎξÊý¤ò°·¤¦¤³¤È¤¬¤Ç¤­¤ë¤«
- ¤É¤¦¤«¤Ï¡¢Apache ´ÉÍý¼Ô¤Ë¤È¤Ã¤ÆÌñ²ð¤ÊÌäÂê¤Ç¤¹¡£
- IPv4 ¥³¥Í¥¯¥·¥ç¥ó¤ò IPv6 ¥½¥±¥Ã¥È¤Ç°·¤¦¾ì¹ç¤Ï¡¢
- IPv4 ¥Þ¥Ã¥×¤µ¤ì¤¿ IPv6 ¥¢¥É¥ì¥¹¤ò»ÈÍѤ·¤Æ¤¤¤Æ¡¢
- ¤Û¤È¤ó¤É¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç»ÈÍѲÄǽ¤Ç¤¹¤¬¡¢
- FreeBSD, NetBSD, OpenBSD ¤Ç¤Ï¡¢¥·¥¹¥Æ¥àÁ´ÂΤȤ·¤Æ¤Î¥Ý¥ê¥·¡¼¤È¤ÎÀ°¹çÀ­¤«¤é¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï»ÈÍÑÉԲĤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ì¤é¤Î¥Ç¥Õ¥©¥ë¥È¤Ç»ÈÍÑÉԲĤΥץé¥Ã¥È¥Û¡¼¥à¤Ç¤¢¤Ã¤Æ¤â¡¢
- ÆÃÊ̤ÊÀßÄê¥Ñ¥é¥á¡¼¥¿¤Ç Apache ¤ÎµóÆ°¤òÊѲ½¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>°ìÊý¤Ç¡¢Linux ¤ä Tru64 ¤È¤¤¤Ã¤¿¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç IPv4 ¤È IPv6
- ¤ÎξÊý¤ò°·¤¦¤Ë¤Ï¡¢¥Þ¥Ã¥×¥È¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ë<strong>°Ê³°¤ÎÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó</strong>¡£
- IPv4 ¤È IPv6 ¤Î¥³¥Í¥¯¥·¥ç¥ó¤òºÇ¾®¸Â¤Î¥½¥±¥Ã¥È¤Ç°·¤¤¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢
- IPv4 ¥Þ¥Ã¥×¤Î IPv6 ¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ê¡¢
- <code>--enable-v4-mapped</code> <a href="programs/configure.html">configure</a>
- ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p><code>--enable-v4-mapped</code> ¤Ï¡¢
- FreeBSD, NetBSD, OpenBSD °Ê³°¤ÎÁ´¤Æ¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ç¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¤ª¤½¤é¤¯¤ª¼ê¸µ¤Î Apache ¤Ï¤³¤ÎÀßÄê¤Ç¥Ó¥ë¥É¤µ¤ì¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ä APR ¤¬²¿¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤«¤Ë´Ø¤ï¤é¤º¡¢
- IPv4 ¥³¥Í¥¯¥·¥ç¥ó¤Î¤ß¤ò°·¤¦¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢
- ¼¡¤ÎÎã¤Î¤è¤¦¤ËÁ´¤Æ¤Î
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- IPv4 ¥¢¥É¥ì¥¹¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </code></p></div>
-
- <p>¾ò·ï¤òËþ¤¿¤¹¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¡¢Apache ¤¬
- IPv4 ¤È IPv6 ¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò¸ÄÊ̤Υ½¥±¥Ã¥È¤Ç°·¤¦¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç
- (¤Ä¤Þ¤ê IPv4 ¥Þ¥Ã¥×¤Î¥¢¥É¥ì¥¹¤ò̵¸ú¤Ë¤·¤¿¤¤¾ì¹ç)
- ¤Ï¡¢<code>--disable-v4-mapped</code>
- <a href="programs/configure.html">configure</a>
- ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Æ¡¢¼¡¤Î¤è¤¦¤Ë¸ÄÊÌ»ØÄê¤Î
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
- <code>--disable-v4-mapped</code> ¤Ï¡¢
- FreeBSD, NetBSD, OpenBSD ¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ç¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ·¤Æ¤É¤¦Æ¯¤¯¤Î¤«</a></h2>
-
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¤Ç¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬¼ÂÁõ¤µ¤ì¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- Listen ¤Ïñ¤Ë¥á¥¤¥ó¥µ¡¼¥Ð¤Ë¤É¤Î¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ò listen ¤¹¤Ù¤­¤«¤ò
- ¶µ¤¨¤ë¤À¤±¤Ç¤¹¡£
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»È¤ï¤ì¤Ê¤¤¾ì¹ç¤Ï¡¢
- ¼õ¤±Æþ¤ì¤¿¥ê¥¯¥¨¥¹¥È¤¹¤Ù¤Æ¤ËÂФ·¤ÆÁ´¤¯Æ±¤¸µóÆ°¤ò¤·¤Þ¤¹¡£
- ¤·¤«¤·¤Ê¤¬¤é
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤ò»È¤Ã¤Æ¡¢
- °ì¤Ä°Ê¾å¤Î¥¢¥É¥ì¥¹¤ä¥Ý¡¼¥È¤ËÂФ·¤Æ°Û¤Ê¤ëµóÆ°¤ò¤¹¤ë¤è¤¦¤Ë
- »ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- VirtualHost ¤ò¼ÂÁõ¤¹¤ë¤Ë¤Ï¡¢»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ò
- ¤Þ¤º½é¤á¤Ë¥µ¡¼¥Ð¤ËÄÌÃΤ·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤½¤·¤Æ¡¢¤½¤Î»ØÄꤷ¤¿¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤Ç¤Î
- ¤³¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎµóÆ°¤òÀßÄꤹ¤ë¤¿¤á¤Ë¡¢
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤òºî¤ê¤Þ¤¹¡£¤â¤·
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤¬ listen ¤·¤Æ¤¤¤Ê¤¤¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ËÂФ·¤Æ
- ÀßÄꤵ¤ì¤Æ¤·¤Þ¤¦¤È¡¢
- ¤½¤ì¤Ë¤Ï¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/bind.html.ko.euc-kr b/docs/manual/bind.html.ko.euc-kr
deleted file mode 100644
index 00e9652612..0000000000
--- a/docs/manual/bind.html.ko.euc-kr
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤ (Binding) - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤ (Binding)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¾ÆÆÄÄ¡°¡ ƯÁ¤ ÁÖ¼Ò¿Í Æ÷Æ®¿¡¼­ ¼­ºñ½ºÇϵµ·Ï ¼³Á¤Çϱâ.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">°³¿ä</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">IPv6¿¡¼­ Ưº°È÷ °í·ÁÇÒ Á¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">°¡»óÈ£½ºÆ®¿Í ¾î¶»°Ô ¿¬°üµÇ³ª</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="vhosts/">°¡»óÈ£½ºÆ®</a></li><li><a href="dns-caveats.html">DNS ¹®Á¦</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">°³¿ä</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
-
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ¸é ¾ÆÆÄÄ¡´Â ÄÄÇ»ÅÍÀÇ ¾î¶² Æ÷Æ®¿Í ÁÖ¼Ò¿¡
- ¿¬°áÇÏ¿©, µé¾î¿À´Â ¿äûÀ» ±â´Ù¸°´Ù. ±âº»ÀûÀ¸·Î ¾ÆÆÄÄ¡´Â
- ÄÄÇ»ÅÍÀÇ ¸ðµç ÁÖ¼Ò¿¡¼­ ±â´Ù¸°´Ù. ±×·¯³ª ¾ÆÆÄÄ¡°¡ ƯÁ¤ Æ÷Æ®³ª
- ¼±ÅÃÇÑ ÁÖ¼Ò¸¸À» ±â´Ù¸®°Ô ÇؾßÇÒ °æ¿ì°¡ ÀÖ´Ù. ¶Ç ÀÌ ¹®Á¦´Â
- ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô ´Ù¸¥ IP ÁÖ¼Ò, È£½ºÆ®¸í, Æ÷Æ®¿¡ ¹ÝÀÀÇÒÁö¸¦
- °áÁ¤ÇÏ´Â °¡»óÈ£½ºÆ® ±â´É°úµµ °ü·ÃµÇÀÖ´Ù.</p>
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î´Â
- ¼­¹ö°¡ ƯÁ¤ Æ÷Æ®³ª ÁÖ¼Ò¿Í Æ÷Æ® Á¶ÇÕ¿¡¼­¸¸ ¿äûÀ» ¹Þ°Ô
- ÇÑ´Ù. <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- Áö½Ã¾î¿¡ Æ÷Æ® ¹øÈ£¸¸ ÁöÁ¤Çϸé, ¼­¹ö´Â ¸ðµç ÀÎÅÍÆäÀ̽º¿¡¼­
- ÁöÁ¤ÇÑ Æ÷Æ®¸¦ ±â´Ù¸°´Ù. ¿©·¯ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î·Î ±â´Ù¸± ¿©·¯
- ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ¼­¹ö´Â ¿­°ÅÇÑ ÁÖ¼Ò¿Í Æ÷Æ®·Î
- ¿äûÀÌ µé¾î¿À¸é ÀÀ´äÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ¼­¹ö°¡ 80¹ø°ú 8000¹ø Æ÷Æ® ¸ðµÎ¿¡¼­ ¿¬°áÀ»
- ¹Þµµ·Ï ÇÏ·Á¸é:</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>¼­¹ö°¡ ÁöÁ¤ÇÑ µÎ ÀÎÅÍÆäÀ̽º¿Í Æ÷Æ®¿¡¼­ ¿¬°áÀ» ±â´Ù¸®µµ·Ï
- ÇÏ·Á¸é,</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>IPv6 ÁÖ¼Ò´Â ´ÙÀ½°ú °°ÀÌ ´ë°ýÈ£·Î ¹­¾î¾ß ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipv6" id="ipv6">IPv6¿¡¼­ Ưº°È÷ °í·ÁÇÒ Á¡</a></h2>
-
-
- <p>IPv6¸¦ ±¸ÇöÇÑ Ç÷¡ÆûÀÌ ´Ã°í ÀÖ°í APRÀÌ À̵é Ç÷¡Æû ´ëºÎºÐ¿¡¼­
- IPv6¸¦ Áö¿øÇϱ⶧¹®¿¡, ¾ÆÆÄÄ¡´Â IPv6 ¼ÒÄÏÀ» ÇÒ´çÇÏ¿© IPv6·Î
- ¹ÞÀº ¿äûÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ °ü¸®ÀÚ¿¡°Ô º¹ÀâÇÑ ºÎºÐÀº IPv6 ¼ÒÄÏÀÌ IPv4 ¿¬°á°ú
- IPv6 ¿¬°áÀ» ¸ðµÎ ó¸®ÇÒ ¼ö ÀÖ´À³Ä´Â Á¡ÀÌ´Ù. ´ëºÎºÐÀÇ Ç÷¡Æû¿¡¼­´Â
- IPv4-´ëÀÀ(mapped) IPv6 ÁÖ¼Ò¸¦ »ç¿ëÇÏ¿© IPv6 ¼ÒÄÏ¿¡¼­ IPv4
- ¿¬°áÀ» ¹ÞÁö¸¸, FreeBSD¿Í NetBSD¿Í OpenBSDÀº ½Ã½ºÅÛÀüü Á¤Ã¥¶§¹®¿¡
- ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö¾Ê´Â
- ½Ã½ºÅÛÀÌ¶óµµ ¾ÆÆÄÄ¡¸¦ À§ÇØ Æ¯º°ÇÑ ¼³Á¤ ÆĶó¹ÌÅÍ·Î º¯°æÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>¹Ý¸é ¸®´ª½º¿Í Tru64 °°Àº ÀϺΠÇ÷¡Æû¿¡¼­ IPv4¿Í IPv6À»
- ¸ðµÎ ó¸®ÇÏ·Á¸é ´ëÀÀ ÁÖ¼Ò¸¦ <strong>»ç¿ëÇؾ߸¸</strong>
- ÇÑ´Ù. ¾ÆÆÄÄ¡°¡ ÃÖ¼ÒÇÑÀÇ ¼ÒÄÏÀ» »ç¿ëÇÏ¿© IPv4 ¿¬°á°ú IPv6
- ¿¬°áÀ» ¸ðµÎ ¹Þµµ·ÏÇÏ·Á¸é, IPv4-´ëÀÀ IPv6 ÁÖ¼Ò¸¦ »ç¿ëÇÏ°í
- <a href="programs/configure.html">configure</a> ¿É¼Ç
- <code>--enable-v4-mapped</code>¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><code>--enable-v4-mapped</code>´Â FreeBSD, NetBSD, OpenBSD¸¦
- Á¦¿ÜÇÑ ¸ðµç Ç÷¡Æû¿¡¼­ ±âº»°ªÀÌ°í, ¾Æ¸¶µµ ´ç½ÅÀÇ ¾ÆÆÄÄ¡µµ
- ¸¶Âù°¡ÁöÀÏ °ÍÀÌ´Ù.</p>
-
- <p>Ç÷¡Æû°ú APRÀÇ Áö¿ø¿©ºÎ¿Í °ü°è¾øÀÌ ¾ÆÆÄÄ¡°¡ IPv4 ¿¬°á¸¸À»
- ¹Þµµ·ÏÇÏ·Á¸é, ´ÙÀ½ ¿¹Á¦¿Í °°ÀÌ ¸ðµç <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î¿¡ IPv4 ÁÖ¼Ò¸¦
- »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </code></p></div>
-
- <p>Ç÷¡Æû¿¡¼­ Áö¿øÇÏ¸ç ¾ÆÆÄÄ¡°¡ ¼­·Î ´Ù¸¥ ¼ÒÄÏÀ¸·Î IPv4
- ¿¬°á°ú IPv6 ¿¬°áÀ» ¹Þµµ·ÏÇÏ·Á¸é (Áï IPv4-´ëÀÀ ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸·Á¸é), <a href="programs/configure.html">configure</a>
- ¿É¼Ç <code>--disable-v4-mapped</code>¸¦
- ÁöÁ¤ÇÑ´Ù. <code>--disable-v4-mapped</code>´Â FreeBSD, NetBSD,
- OpenBSD¿¡¼­ ±âº»°ªÀÌ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">°¡»óÈ£½ºÆ®¿Í ¾î¶»°Ô ¿¬°üµÇ³ª</a></h2>
-
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>˼
- °¡»óÈ£½ºÆ®¸¦ ¸¸µéÁö ¾Ê´Â´Ù. ÀÌ´Â ´ÜÁö ÁÖ¼­¹ö°¡
- ¾î¶² ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ±â´Ù¸±Áö¸¸ ¾Ë·ÁÁØ´Ù. <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏÁö ¾ÊÀ¸¸é, ¼­¹ö´Â ¹ÞÀº ¸ðµç ¿äûÀ» ¶È°°ÀÌ Ã³¸®ÇÑ´Ù.
- ±×·¯³ª <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>·Î ¿©·¯ ÁÖ¼Ò¿Í Æ÷Æ®¿¡
- ´ëÇØ ´Ù¸¥ ÇൿÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. °¡»óÈ£½ºÆ®¸¦ ¸¸µé·Á¸é
- ¸ÕÀú ¼­¹ö¿¡°Ô »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ¾Ë·ÁÁà¾ß ÇÑ´Ù. ±×¸®°í
- ƯÁ¤ ÁÖ¼Ò¿Í Æ÷Æ®¿¡ ´ëÇÑ °¡»óÈ£½ºÆ®ÀÇ ÇൿÀ» ÁöÁ¤ÇÒ
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¼½¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ÁÖ¼­¹ö°¡ ±â´Ù¸®Áö¾Ê´Â ÁÖ¼Ò¿Í Æ÷Æ®¸¦ »ç¿ëÇÏ´Â
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>´Â
- Á¢±ÙÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/bind.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/bind.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/bind.xml b/docs/manual/bind.xml
deleted file mode 100644
index f386403ac8..0000000000
--- a/docs/manual/bind.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="bind.xml.meta">
-
- <title>Binding</title>
-
- <summary>
- <p>Configuring Apache to listen on specific addresses and ports.</p>
- </summary>
-
- <seealso><a href="vhosts/">Virtual Hosts</a></seealso>
- <seealso><a href="dns-caveats.html">DNS Issues</a></seealso>
-
- <section id="overview">
- <title>Overview</title>
-
- <related>
- <modulelist>
- <module>core</module>
- <module>mpm_common</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">VirtualHost</directive>
- <directive module="mpm_common">Listen</directive>
- </directivelist>
- </related>
-
-
- <p>When Apache starts, it binds to some port and address on
- the local machine and waits for incoming requests. By default,
- it listens to all addresses on the machine. However, it needs to
- be told to listen on specific ports, or to listen on only selected
- addresses, or a combination. This is often combined with the
- Virtual Host feature which determines how Apache responds to
- different IP addresses, hostnames and ports.</p>
-
- <p>The <directive module="mpm_common">Listen</directive>
- directive tells the server to accept
- incoming requests only on the specified port or
- address-and-port combinations. If only a port number is
- specified in the <directive module="mpm_common">Listen</directive>
- directive, the server
- listens to the given port on all interfaces. If an IP address
- is given as well as a port, the server will listen on the given
- port and interface. Multiple <directive
- module="mpm_common">Listen</directive> directives may be used to
- specify a number of addresses and ports to listen on. The
- server will respond to requests from any of the listed
- addresses and ports.</p>
-
- <p>For example, to make the server accept connections on both
- port 80 and port 8000, use:</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>To make the server accept connections on two specified
- interfaces and port numbers, use</p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>IPv6 addresses must be surrounded in square brackets, as in the
- following example:</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
- </section>
-
- <section id="ipv6">
- <title>Special IPv6 Considerations</title>
-
- <p>A growing number of platforms implement IPv6, and APR supports
- IPv6 on most of these platforms, allowing Apache to allocate IPv6
- sockets and handle requests which were sent over IPv6.</p>
-
- <p>One complicating factor for Apache administrators is whether or
- not an IPv6 socket can handle both IPv4 connections and IPv6
- connections. Handling IPv4 connections with an IPv6 socket uses
- IPv4-mapped IPv6 addresses, which are allowed by default on most
- platforms but are disallowed by default on FreeBSD, NetBSD, and
- OpenBSD in order to match the system-wide policy on those
- platforms. But even on systems where it is disallowed by default, a
- special configure parameter can change this behavior for Apache.</p>
-
- <p>On the other hand, on some platforms such as Linux and Tru64 the
- <strong>only</strong> way to handle both IPv6 and IPv4 is to use
- mapped addresses. If you want Apache to handle IPv4 and IPv6 connections
- with a minimum of sockets, which requires using IPv4-mapped IPv6
- addresses, specify the <code>--enable-v4-mapped</code> <a
- href="programs/configure.html">configure</a> option.</p>
-
- <p><code>--enable-v4-mapped</code> is the default on all platforms but
- FreeBSD, NetBSD, and OpenBSD, so this is probably how your Apache was
- built.</p>
-
- <p>If you want Apache to handle IPv4 connections only, regardless of
- what your platform and APR will support, specify an IPv4 address on all
- <directive module="mpm_common">Listen</directive> directives, as in the
- following examples:</p>
-
- <example>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </example>
-
- <p>If your platform supports it and you want Apache to handle IPv4 and
- IPv6 connections on separate sockets (i.e., to disable IPv4-mapped
- addresses), specify the <code>--disable-v4-mapped</code> <a
- href="programs/configure.html">configure</a> option.
- <code>--disable-v4-mapped</code> is the default on FreeBSD,
- NetBSD, and OpenBSD.</p>
- </section>
-
- <section id="virtualhost">
- <title>How This Works With Virtual Hosts</title>
-
- <p> <directive
- module="mpm_common">Listen</directive> does not implement
- Virtual Hosts. It only tells the
- main server what addresses and ports to listen to. If no
- <directive module="core" type="section">VirtualHost</directive>
- directives are used, the server will behave
- the same for all accepted requests. However,
- <directive module="core" type="section">VirtualHost</directive>
- can be used to specify a different behavior
- for one or more of the addresses and ports. To implement a
- VirtualHost, the server must first be told to listen to the
- address and port to be used. Then a
- <directive module="core" type="section">VirtualHost</directive> section
- should be created for a specified address and port to set the
- behavior of this virtual host. Note that if the
- <directive module="core" type="section">VirtualHost</directive>
- is set for an address and port that the
- server is not listening to, it cannot be accessed.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/bind.xml.de b/docs/manual/bind.xml.de
deleted file mode 100644
index a86cc2d953..0000000000
--- a/docs/manual/bind.xml.de
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="bind.xml.meta">
-
- <title>Anbindung</title>
-
- <summary>
- <p>Konfiguration der vom Apache verwendeten Adressen und Ports.</p>
- </summary>
-
- <seealso><a href="vhosts/">Virtuelle Hosts</a></seealso>
- <seealso><a href="dns-caveats.html">Probleme bez&#252;glich DNS und
- Apache</a></seealso>
-
- <section id="overview">
- <title>&Uuml;berblick</title>
-
- <related>
- <modulelist>
- <module>core</module>
- <module>mpm_common</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">VirtualHost</directive>
- <directive module="mpm_common">Listen</directive>
- </directivelist>
- </related>
-
- <p>Beim Start bindet sich der Apache an bestimmte Adressen und Ports
- der lokalen Maschine und wartet auf eingehende Anfragen.
- Standardm&auml;&szlig;ig lauscht er an allen Adressen des Systems.
- Es muss ihm jedoch mitgeteilt werden, an bestimmten Ports zu lauschen
- oder nur an ausgew&auml;hlten Adressen, bzw. einer Kombination aus
- beidem. Dies wird oft mit der Funktionalit&auml;t virtueller Hosts
- kombiniert, die bestimmt, wie der Apache auf verschiedene IP-Adressen,
- Hostnamen und Ports reagiert.</p>
-
- <p>Die Direktive <directive module="mpm_common">Listen</directive>
- weist den Server an, eingehende Anfragen nur an bestimmten Ports oder
- Adress/Port-Kombinationen zu akzeptieren. Wenn bei der <directive
- module="mpm_common">Listen</directive>-Direktive nur eine Portnummer
- angegeben wird, dann lauscht der Server auf allen Netzwerkinterfaces an
- dem angegebenen Port. Ist auch eine IP-Adresse angegeben, dann lauscht der
- Server an der angegebenen Schnittstelle auf dem angegebenen Port. Es
- k&ouml;nnen mehrere <directive
- module="mpm_common">Listen</directive>-Anweisungen verwendet werden, um
- eine Reihe von Adressen und Ports anzugeben, an denen gelauscht werden
- soll. Der Server wird dann auf Anfragen an jeder der abgeh&ouml;rten
- Adressen und Ports antworten.</p>
-
- <p>Um beispielsweise den Server zu veranlassen, sowohl an Port 80, als
- auch an Port 8000 Verbindungen zu akzeptieren, geben Sie an:</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>Um den Server Verbindungen an zwei bestimmten
- Netzwerkinterfaces und Ports zu akzeptieren zu lassen, geben Sie an:</p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>IPv6-Adressen m&uuml;ssen wie im folgenden Beispiel in eckigen
- Klammern angegeben werden:</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
- </section>
-
- <section id="ipv6">
- <title>Betrachtung von IPv6-Besonderheiten</title>
-
- <p>Eine wachsende Anzahl von Plattformen implementiert IPv6. Die APR
- unterst&uuml;tzt IPv6 auf den meisten dieser Plattformen und
- erm&ouml;glicht dem Apache, IPv6-Sockets zu verwenden und Anfragen zu
- behandeln, die &uuml;ber IPv6 gesendet wurden.</p>
-
- <p>F&uuml;r Apache-Administratoren kommt erschwerend die Frage hinzu, ob
- IPv6-Sockets sowohl IPv4- als auch IPv6-Verbindungen
- handhaben k&ouml;nnen. Zum Betrieb von IPv4-Verbindungen an
- IPv6-Sockets werden auf IPv6 abgebildete IPv4-Adressen
- <transnote>so genannete IPv4-gemappte IPv6-Adressen</transnote>
- verwendet, welche standardm&auml;&szlig;ig auf den meisten Plattformen
- erlaubt sind. Unter FreeBSD, NetBSD und OpenBSD jedoch sind sie
- standardm&auml;&szlig;ig deaktiviert, um den Systemgrunds&auml;tzen dieser
- Plattformen zu entsprechen. Doch selbst auf Systemen, wo dies
- standardm&auml;&szlig;ig dekativiert ist, kann dieses Verhalten mit einem
- speziellen Konfigurationsparameter f&uuml;r den Apache ge&auml;ndert
- werden.</p>
-
- <p>Auf der anderen Seite ist die Verwendung von gemappten Adressen bei
- einigen Plattformen wie Linux und True64 der <strong>einzige</strong>
- Weg, sowohl IPv4 wie auch IPv6 zu verwenden. Wenn Sie m&ouml;chten, dass
- der Apache IPv4- und IPv6-Verbindungen mit einem Minimum an Sockets
- behandelt, was die Verwendung von IPv4-gemappten IPv6-Adressen
- erfordert, dann m&uuml;ssen Sie die <a href="programs/configure.html"
- >configure</a>-Option <code>--enable-v4-mapped</code> angeben.</p>
-
- <p><code>--enable-v4-mapped</code> ist die Voreinstellung auf allen
- Plattformen au&szlig;er FreeBSD, NetBSD und OpenBSD, so dass Ihr Apache
- wahrscheinlich so &uuml;bersetzt wurde.</p>
-
- <p>Geben Sie wie in dem folgenden Beispiel bei allen <directive
- module="mpm_common">Listen</directive>-Anweisungen eine IPv4-Adresse
- an, wenn Sie m&ouml;chten, dass Ihr Apache lediglich IPv4-Adressen
- behandelt, unabh&auml;ngig davon, was Ihre Plattform und die APR
- unterst&uuml;tzen:</p>
-
- <example>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </example>
-
- <p>Wenn Sie m&ouml;chten, dass der Apache IPv4- und IPv6-Verbindungen an
- separaten Sockets behandelt (d.h. IPv4-gemappte Adressen deaktiviert
- werden sollen) und Ihre Plattform es unterst&uuml;tzt, dann m&uuml;ssen
- Sie die <a href="programs/configure.html">configure</a>-Option
- <code>--disable-v4-mapped</code> angeben.
- Unter FreeBSD, NetBSD und OpenBSD ist <code>--disable-v4-mapped</code>
- voreingestellt.</p>
- </section>
-
- <section id="virtualhost">
- <title>Das Zusammenspiel mit virtuellen Hosts</title>
-
- <p><directive module="mpm_common">Listen</directive> implementiert keine
- virtuellen Hosts. Es teilt dem Hauptserver lediglich mit, an welchen
- Adressen und Ports er zu lauschen hat. Werden keine <directive
- module="core" type="section">VirtualHost</directive>-Container
- verwendet, verh&auml;lt sich der Server bei allen angenommenen Anfragen
- gleich. <directive module="core"
- type="section">VirtualHost</directive>-Abschnitte k&ouml;nnen jedoch
- dazu verwendet werden, ein unterschiedliches Verhalten f&uuml;r eine oder
- mehrere Adressen und Ports festzulegen. Um einen virtuellen Host
- einzurichten, muss dem Server zun&auml;chst mitgeteilt werden, an den
- betreffenden Adressen und Ports zu lauschen. Dann sollte ein <directive
- module="core" type="section">VirtualHost</directive>-Abschnitt f&uuml;r
- eine bestimmte Adresse und einen Port erstellt werden, um das Verhalten
- dieses virtuellen Hosts festzulegen. Beachten Sie bitte, dass auf einen
- <directive module="core" type="section">VirtualHost</directive> nicht
- zugegriffen werden kann, wenn er f&uuml;r eine Adresse und einen Port
- eingerichtet wurde, an dem der Server nicht lauscht.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/bind.xml.fr b/docs/manual/bind.xml.fr
deleted file mode 100644
index 2aa3528174..0000000000
--- a/docs/manual/bind.xml.fr
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1.12 (outdated: 1.13) -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="bind.xml.meta">
-
- <title>Liaison</title>
-
- <summary>
- <p>Configuration des adresses et ports sur lesquels Apache &#233;coute.</p>
- </summary>
-
- <seealso><a href="vhosts/">Serveurs Virtuels</a></seealso>
- <seealso><a href="dns-caveats.html">Probl&#233;mes DNS</a></seealso>
-
- <section id="overview">
- <title>Informations g&#233;n&#233;rales</title>
-
- <related>
- <modulelist>
- <module>core</module>
- <module>mpm_common</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">VirtualHost</directive>
- <directive module="mpm_common">Listen</directive>
- </directivelist>
- </related>
-
-
- <p>Au moment de son d&#233;marrage, Apache se lie &#224; un port et &#224; une
- adresse IP sur la machine locale et se met en attente de requ&#232;tes.
- Par d&#233;faut, Apache &#233;coute sur toutes les adresses de la machine.
- Apache accepte d'&#233;couter sur un ou plusieurs ports sp&#233;cifiques,
- sur une seule ou plusieurs adresses, ou encore sur une combinaison port-adresse.
- Il est fr&#233;quent d'utiliser ces possibilit&#233;s avec les fonctionnalit&#233;s
- de Serveurs Virtuels, qui permettent de faire r&#233;pondre le serveur de
- mani&#232;re diff&#233;rente en fonction de l'adresse IP, du nom d'h&#244;te ou
- du port.</p>
-
- <p>Le serveur interpr&#232;te la directive
- <directive module="mpm_common">Listen</directive>
- en acceptant les requ&#232;tes seulement sur le port ou la combinaison
- adresse IP + port pass&#233;e en argument. Dans le cas o&#249; seul un port
- est sp&#233;cifi&#233; avec la directive
- <directive module="mpm_common">Listen</directive>,
- le serveur se met &#224; l'&#233;coute sur le port sp&#233;cifi&#233;, sur toutes
- les interfaces et adresses de la machine. Si une adresse IP est
- sp&#233;cifi&#233;e en plus du port, le serveur n'&#233;coute que sur l'adresse
- et le port sp&#233;cifi&#233;. Il est possible de configurer plusieurs adresses
- et ports avec la directives
- <directive module="mpm_common">Listen</directive>
- pour &#233;coute par le serveur. Le serveur r&#233;pond aux requ&#232;tes faites
- &#224; toutes les adresses et ports &#233;num&#233;r&#233;s.</p>
-
-
- <p>Par exemple, pour que le serveur accepte les connexions sur
- les ports 80 et 8000, sp&#233;cifiez :</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>Pour qu'Apache accepte les connexions sur deux combinaisons
- adresses + ports, sp&#233;cifiez :</p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>Les adresses IPv6 sont accept&#233;es, pourvu qu'elles soient sp&#233;cifi&#233;es
- entre crochets de la fa&#231;on suivante :</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
- </section>
-
- <section id="ipv6">
- <title>Consid&#233;rations Sp&#233;ciales avec IPv6</title>
-
- <p>De plus en plus de plate-formes impl&#233;mentent IPv6. APR
- supporte IPv6 sur la plupart d'entre elles, si bien qu'Apache
- peut assigner des interfaces de connexions IPv6 et r&#233;pondre aux
- requ&#232;tes utilisant IPv6.</p>
-
- <p>Une complication possible pour les administrateurs Apache est de
- savoir si une interface de connexion IPv6 peut r&#233;pondre aux deux types de
- connexions IPv4 et IPv6.
- Manipuler les connexions IPv4 avec une interface de connexion IPv6
- suppose l'utilisation d'adresses IPv6 mapp&#233;es en IPv4, ce qui est
- le cas par defaut sur la plupart des plate-formes, &#224; l'exeption de FreeBSD,
- NetBSD, et OpenBSD, cela en raison des politiques syst&#232;mes de ces plate-formes.
- M&#232;me sur des syst&#232;mes o&#249; cette fonctionnalit&#233; n'est pas activ&#233;e par
- d&#233;faut, une option de compilation permet de changer ce
- fonctionnement pour Apache.</p>
- <p>Pour qu'Apache puisse g&#233;rer &#224; la fois les connexions IPv4 et IPv6
- avec un minimum d'interfaces de connexions, il faut permettre l'utilisation
- des adresses
- IPv6 mapp&#233;es en IPv4, ce qui est possible en sp&#233;cifiant l'option
-
- de compilation <code>--enable-v4-mapped</code> et en utilisant la
- directive <directive module="mpm_common">Listen</directive>
- comme suit:</p>
-
- <example>
- Listen 80
- </example>
-
- <p>Si <code>--enable-v4-mapped</code> a &#233;t&#233; sp&#233;cifi&#233; &#224; la compilation,
- les directives <directive module="mpm_common">Listen</directive>
- de la configuration par d&#233;faut sont de la forme ci-dessus.
- <code>--enable-v4-mapped</code> est l'option de compilation
- par d&#233;faut sur toutes les plate-formes, sauf FreeBSD, NetBSD, et
- OpenBSD.</p>
-
-
- <p>Pour qu'Apache ne manipule que les connexions IPv4, en ignorant l'&#233;ventuel
- support IPv6 de la plate-forme ou d'APR, une adresse IPv4 peut &#234;tre
- sp&#233;cifi&#233; pour toutes les directives
- <directive module="mpm_common">Listen</directive>,
- comme dans les exemples suivantss:</p>
-
- <example>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </example>
-
- <p>Pour qu'Apache manipule les connexions IPv4 et IPv6 sur des interfaces
- diff&#233;rentes (c'est-&#224;-dire, pour ne pas accepter les addresse IPv6 mapp&#233;es
- en IPv4), sp&#233;cifier l'option de compilation <code>--disable-v4-mapped</code>
- et utiliser des directives <directive module="mpm_common">Listen</directive>
- sp&#233;cifiques telles que:</p>
- <example>
- Listen [::]:80<br />
- Listen 0.0.0.0:80
- </example>
-
- <p>Avec <code>--disable-v4-mapped</code>, la directive
- <directive module="mpm_common">Listen</directive> &#224; l'int&#233;rieur
- du fichier de configuration par d&#233;faut cr&#233;&#233; par Apache utilise la forme
- ci-dessus.
- <code>--disable-v4-mapped</code> est l'option de compilation par d&#233;faut sous
- FreeBSD, NetBSD, et OpenBSD.</p>
- </section>
-
- <section id="virtualhost">
- <title>Faire fonctionner tout ceci avec les Serveurs Virtuels</title>
-
- <p><directive module="mpm_common">Listen</directive>
- n'impl&#233;mente aucun Serveur Virtuel. Cette directive sert simplement
- &#224; informer le serveur principal sur quels addresses et ports &#233;couter.
- Dans le cas o&#249; aucune section
- <directive module="core" type="section">VirtualHost</directive>
- n'est utilis&#233;e, le serveur r&#233;pondra de la m&#232;me mani&#232;re pour toutes
- les requ&#232;tes qu'il acceptera. Cependant des sections
- <directive module="core" type="section">VirtualHost</directive>
- peuvent &#234;tre utilis&#233;es pour qu'Apache r&#233;agisse de fa&#231;on diff&#233;rente &#224;
- une requ&#232;te selon l'adresse ou le port. Avant d'impl&#233;menter
- un Serveur Virtuel au moyen de la directive
- <directive module="core" type="section">VirtualHost</directive>, la directive
- <directive module="mpm_common">Listen</directive>
- doit tre utilis&#233;e pour que le serveur &#233;coute sur l'adresse
- ou le port sp&#233;cifi&#233;. Une section
- <directive module="core" type="section">VirtualHost</directive>
- peut alors &#234;tre utilis&#233;e pour d&#233;finir la r&#233;action du Serveur Virtuel pour une
- adresse et un port sp&#233;cifique. &#192; noter que si un Serveur Virtuel est
- positionn&#233; au moyen de la directive
- <directive module="core" type="section">VirtualHost</directive>
- sur une adresse et un port sur lesquels le serveur n'est pas &#224; l'&#233;coute,
- le Serveur Virtuel ne sera pas accessible.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/bind.xml.ja b/docs/manual/bind.xml.ja
deleted file mode 100644
index 76bccfe064..0000000000
--- a/docs/manual/bind.xml.ja
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="bind.xml.meta">
-
- <title>$B%P%$%s%I(B</title>
-
- <summary>
- <p>Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj$r$7$^$9!#(B</p>
- </summary>
-
- <seealso><a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a></seealso>
- <seealso><a href="dns-caveats.html">DNS $B$NLdBj(B</a></seealso>
-
- <section id="overview">
- <title>$B35MW(B</title>
-
- <related>
- <modulelist>
- <module>core</module>
- <module>mpm_common</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">VirtualHost</directive>
- <directive module="mpm_common">Listen</directive>
- </directivelist>
- </related>
-
-
- <p>Apache $B$O5/F0;~$K!"%m!<%+%k%^%7%s$N$"$k%]!<%H$"$h$S%"%I%l%9(B
- $B$KBP$7$F@\B3$7!"%j%/%(%9%H$,Mh$k$N$rBT$A$^$9!#(B
- $B%G%U%)%k%H$G$O%^%7%s$N$9$Y$F$N%"%I%l%9$KBP$7$F(B listen $B$7$^$9!#(B
- $B$7$+$7$J$,$i!"FCDj$N%]!<%H$+!"FCDj$N%"%I%l%9$N$_$+!"(B
- $B$^$?$O$=$l$i$NAH$_9g$o$;$N$$$:$l$+$r(B listen $B$9$k$h$&$K$9$kI,MW$,$"$j$^$9!#(B
- $B$3$l$O!"0[$J$k(B IP $B%"%I%l%9!"%[%9%HL>!"%]!<%H$KBP$9$k(B Apache
- $B$N1~EzJ}K!$r7hDj$9$k%P!<%A%c%k%[%9%H5!G=$HAH$_9g$o$;$F;H$o$l$^$9!#(B</p>
-
- <p><directive module="mpm_common">Listen</directive>
- $B%G%#%l%/%F%#%V$G!"FCDj$N%]!<%H$d%"%I%l%9!&%]!<%H$NAH$+$i$N$_F~$C$F$/$k(B
- $B%j%/%(%9%H$r<u$1IU$1$k$h$&$K$G$-$^$9!#(B
- $B$b$7%]!<%HHV9f$N$_$,(B <directive module="mpm_common">Listen</directive>
- $B%G%#%l%/%F%#%V$G;XDj$5$l$?>l9g$O!"(B
- $B$9$Y$F$N%$%s%?!<%U%'!<%9$NM?$($i$l$?%]!<%HHV9f$r(B
- listen $B$7$^$9!#(B IP $B%"%I%l%9$,%]!<%HHV9f$HF1;~$KM?$($i$l$?>l9g$O!"(B
- $B%5!<%P$OM?$($i$l$?%]!<%H$H%$%s%?!<%U%'!<%9$r(B listen $B$7$^$9!#(B
- $BJ#?t$N(B <directive module="mpm_common">Listen</directive> $B%G%#%l%/%F%#%V$rMQ$$$F(B
- $B$$$/$D$+$N(B listen $B$9$k%"%I%l%9$H%]!<%H$r;XDj$G$-$^$9!#(B
- $B%5!<%P$O%j%9%H$5$l$?%"%I%l%9$d%]!<%H$+$i$N$9$Y$F$N%j%/%(%9%H$K(B
- $BBP$7$F1~Ez$7$^$9!#(B</p>
-
- <p>$B$?$H$($P!"%]!<%H(B 80 $B$H(B 8000 $B$NN>J}$KBP$7$F$N@\B3$r<u$1IU$1$k$K$O(B</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>$B$H$7$^$9!#(B
- $BFs$D$N;XDj$5$l$?%$%s%?%U%'!<%9$H%]!<%HHV9f$KBP$7$F$N@\B3$r<u$1IU$1$k$K$O!"(B
- </p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>$B$H$7$^$9!#(B
- IPv6 $B%"%I%l%9$O!"3Q3g8L$G<!$NNc$N$h$&$K0O$^$J$1$l$P$$$1$^$;$s!#(B</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
- </section>
-
- <section id="ipv6">
- <title>IPv6 $B$NFC5-;v9`(B</title>
-
- <p>$BB?$/$N%W%i%C%H%[!<%`$G(B IPv6 $B$,%5%]!<%H$5$l$F$-$F$$$F!"(B
- APR $B$O$3$l$i$N$[$H$s$I$G(B IPv6 $B$r%5%]!<%H$7$F$$$k$N$G!"(B
- Apache $B$O(B IPv6 $B%=%1%C%H$r3d$jEv$F$F(B IPv6
- $B7PM3$GAw$i$l$F$-$?%j%/%(%9%H$r07$&$3$H$,$G$-$^$9!#(B</p>
-
- <p>IPv6 $B%=%1%C%H$,(B IPv4 $B$H(B IPv6 $B%3%M%/%7%g%s$NN>J}$r07$&$3$H$,$G$-$k$+(B
- $B$I$&$+$O!"(BApache $B4IM}<T$K$H$C$FLq2p$JLdBj$G$9!#(B
- IPv4 $B%3%M%/%7%g%s$r(B IPv6 $B%=%1%C%H$G07$&>l9g$O!"(B
- IPv4 $B%^%C%W$5$l$?(B IPv6 $B%"%I%l%9$r;HMQ$7$F$$$F!"(B
- $B$[$H$s$I$N%W%i%C%H%[!<%`$G$O%G%U%)%k%H$G;HMQ2DG=$G$9$,!"(B
- FreeBSD, NetBSD, OpenBSD $B$G$O!"%7%9%F%`A4BN$H$7$F$N%]%j%7!<$H$N@09g@-$+$i!"(B
- $B%G%U%)%k%H$G$O;HMQIT2D$K@_Dj$5$l$F$$$^$9!#(B
- $B$3$l$i$N%G%U%)%k%H$G;HMQIT2D$N%W%i%C%H%[!<%`$G$"$C$F$b!"(B
- $BFCJL$J@_Dj%Q%i%a!<%?$G(B Apache $B$N5sF0$rJQ2=$5$;$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B0lJ}$G!"(BLinux $B$d(B Tru64 $B$H$$$C$?%W%i%C%H%[!<%`$G(B IPv4 $B$H(B IPv6
- $B$NN>J}$r07$&$K$O!"%^%C%W%H%"%I%l%9$r;HMQ$9$k(B<strong>$B0J30$NJ}K!$O$"$j$^$;$s(B</strong>$B!#(B
- IPv4 $B$H(B IPv6 $B$N%3%M%/%7%g%s$r:G>.8B$N%=%1%C%H$G07$$$?$$$N$G$"$l$P!"(B
- IPv4 $B%^%C%W$N(B IPv6 $B%"%I%l%9$r;HMQ$9$kI,MW$,$"$j!"(B
- <code>--enable-v4-mapped</code> <a href="programs/configure.html">configure</a>
- $B%*%W%7%g%s$r;XDj$7$^$9!#(B</p>
-
- <p><code>--enable-v4-mapped</code> $B$O!"(B
- FreeBSD, NetBSD, OpenBSD $B0J30$NA4$F$N%W%i%C%H%[!<%`$G$N%G%U%)%k%H$G$9!#(B
- $B$G$9$+$i!"$*$=$i$/$*<j85$N(B Apache $B$O$3$N@_Dj$G%S%k%I$5$l$F$$$k$G$7$g$&!#(B</p>
-
- <p>$B%W%i%C%H%U%)!<%`$d(B APR $B$,2?$r%5%]!<%H$9$k$+$K4X$o$i$:!"(B
- IPv4 $B%3%M%/%7%g%s$N$_$r07$&$h$&$K$7$?$$>l9g$O!"(B
- $B<!$NNc$N$h$&$KA4$F$N(B
- <directive module="mpm_common">Listen</directive> $B%G%#%l%/%F%#%V$G(B
- IPv4 $B%"%I%l%9$r;XDj$7$F$/$@$5$$!#(B</p>
-
- <example>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </example>
-
- <p>$B>r7o$rK~$?$9%W%i%C%H%[!<%`$G!"(BApache $B$,(B
- IPv4 $B$H(B IPv6 $B$N%3%M%/%7%g%s$r8DJL$N%=%1%C%H$G07$&$h$&$K$7$?$$>l9g(B
- ($B$D$^$j(B IPv4 $B%^%C%W$N%"%I%l%9$rL58z$K$7$?$$>l9g(B)
- $B$O!"(B<code>--disable-v4-mapped</code>
- <a href="programs/configure.html">configure</a>
- $B%*%W%7%g%s$r;XDj$7$F!"<!$N$h$&$K8DJL;XDj$N(B
- <directive module="mpm_common">Listen</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$F$/$@$5$$!#(B
- <code>--disable-v4-mapped</code> $B$O!"(B
- FreeBSD, NetBSD, OpenBSD $B%W%i%C%H%[!<%`$G$N%G%U%)%k%H$G$9!#(B</p>
- </section>
-
- <section id="virtualhost">
- <title>$B%P!<%A%c%k%[%9%H$KBP$7$F$I$&F/$/$N$+(B</title>
-
- <p><directive module="mpm_common">Listen</directive>
- $B$G%P!<%A%c%k%[%9%H$,<BAu$5$l$k$o$1$G$O$"$j$^$;$s!#(B
- Listen $B$OC1$K%a%$%s%5!<%P$K$I$N%"%I%l%9$H%]!<%H$r(B listen $B$9$Y$-$+$r(B
- $B65$($k$@$1$G$9!#(B
- <directive module="core" type="section">VirtualHost</directive>
- $B%G%#%l%/%F%#%V$,;H$o$l$J$$>l9g$O!"(B
- $B<u$1F~$l$?%j%/%(%9%H$9$Y$F$KBP$7$FA4$/F1$85sF0$r$7$^$9!#(B
- $B$7$+$7$J$,$i(B
- <directive module="core" type="section">VirtualHost</directive>
- $B$r;H$C$F!"(B
- $B0l$D0J>e$N%"%I%l%9$d%]!<%H$KBP$7$F0[$J$k5sF0$r$9$k$h$&$K(B
- $B;XDj$9$k$3$H$,$G$-$^$9!#(B
- VirtualHost $B$r<BAu$9$k$K$O!";HMQ$9$k%"%I%l%9$H%]!<%H$r(B
- $B$^$:=i$a$K%5!<%P$KDLCN$7$J$1$l$P$J$j$^$;$s!#(B
- $B$=$7$F!"$=$N;XDj$7$?%"%I%l%9$H%]!<%H$G$N(B
- $B$3$N%P!<%A%c%k%[%9%H$N5sF0$r@_Dj$9$k$?$a$K!"(B
- <directive module="core" type="section">VirtualHost</directive>
- $B%;%/%7%g%s$r:n$j$^$9!#$b$7(B
- <directive module="core" type="section">VirtualHost</directive>
- $B$,(B listen $B$7$F$$$J$$%"%I%l%9$H%]!<%H$KBP$7$F(B
- $B@_Dj$5$l$F$7$^$&$H!"(B
- $B$=$l$K$O%"%/%;%9$G$-$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
- </section>
-</manualpage>
diff --git a/docs/manual/bind.xml.ko b/docs/manual/bind.xml.ko
deleted file mode 100644
index 93f91f63e7..0000000000
--- a/docs/manual/bind.xml.ko
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="bind.xml.meta">
-
- <title>ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤ (Binding)</title>
-
- <summary>
- <p>¾ÆÆÄÄ¡°¡ ƯÁ¤ ÁÖ¼Ò¿Í Æ÷Æ®¿¡¼­ ¼­ºñ½ºÇϵµ·Ï ¼³Á¤Çϱâ.</p>
- </summary>
-
- <seealso><a href="vhosts/">°¡»óÈ£½ºÆ®</a></seealso>
- <seealso><a href="dns-caveats.html">DNS ¹®Á¦</a></seealso>
-
- <section id="overview">
- <title>°³¿ä</title>
-
- <related>
- <modulelist>
- <module>core</module>
- <module>mpm_common</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">VirtualHost</directive>
- <directive module="mpm_common">Listen</directive>
- </directivelist>
- </related>
-
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ¸é ¾ÆÆÄÄ¡´Â ÄÄÇ»ÅÍÀÇ ¾î¶² Æ÷Æ®¿Í ÁÖ¼Ò¿¡
- ¿¬°áÇÏ¿©, µé¾î¿À´Â ¿äûÀ» ±â´Ù¸°´Ù. ±âº»ÀûÀ¸·Î ¾ÆÆÄÄ¡´Â
- ÄÄÇ»ÅÍÀÇ ¸ðµç ÁÖ¼Ò¿¡¼­ ±â´Ù¸°´Ù. ±×·¯³ª ¾ÆÆÄÄ¡°¡ ƯÁ¤ Æ÷Æ®³ª
- ¼±ÅÃÇÑ ÁÖ¼Ò¸¸À» ±â´Ù¸®°Ô ÇؾßÇÒ °æ¿ì°¡ ÀÖ´Ù. ¶Ç ÀÌ ¹®Á¦´Â
- ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô ´Ù¸¥ IP ÁÖ¼Ò, È£½ºÆ®¸í, Æ÷Æ®¿¡ ¹ÝÀÀÇÒÁö¸¦
- °áÁ¤ÇÏ´Â °¡»óÈ£½ºÆ® ±â´É°úµµ °ü·ÃµÇÀÖ´Ù.</p>
-
- <p><directive module="mpm_common">Listen</directive> Áö½Ã¾î´Â
- ¼­¹ö°¡ ƯÁ¤ Æ÷Æ®³ª ÁÖ¼Ò¿Í Æ÷Æ® Á¶ÇÕ¿¡¼­¸¸ ¿äûÀ» ¹Þ°Ô
- ÇÑ´Ù. <directive module="mpm_common">Listen</directive>
- Áö½Ã¾î¿¡ Æ÷Æ® ¹øÈ£¸¸ ÁöÁ¤Çϸé, ¼­¹ö´Â ¸ðµç ÀÎÅÍÆäÀ̽º¿¡¼­
- ÁöÁ¤ÇÑ Æ÷Æ®¸¦ ±â´Ù¸°´Ù. ¿©·¯ <directive
- module="mpm_common">Listen</directive> Áö½Ã¾î·Î ±â´Ù¸± ¿©·¯
- ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ¼­¹ö´Â ¿­°ÅÇÑ ÁÖ¼Ò¿Í Æ÷Æ®·Î
- ¿äûÀÌ µé¾î¿À¸é ÀÀ´äÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ¼­¹ö°¡ 80¹ø°ú 8000¹ø Æ÷Æ® ¸ðµÎ¿¡¼­ ¿¬°áÀ»
- ¹Þµµ·Ï ÇÏ·Á¸é:</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>¼­¹ö°¡ ÁöÁ¤ÇÑ µÎ ÀÎÅÍÆäÀ̽º¿Í Æ÷Æ®¿¡¼­ ¿¬°áÀ» ±â´Ù¸®µµ·Ï
- ÇÏ·Á¸é,</p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>IPv6 ÁÖ¼Ò´Â ´ÙÀ½°ú °°ÀÌ ´ë°ýÈ£·Î ¹­¾î¾ß ÇÑ´Ù:</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
- </section>
-
- <section id="ipv6">
- <title>IPv6¿¡¼­ Ưº°È÷ °í·ÁÇÒ Á¡</title>
-
- <p>IPv6¸¦ ±¸ÇöÇÑ Ç÷¡ÆûÀÌ ´Ã°í ÀÖ°í APRÀÌ À̵é Ç÷¡Æû ´ëºÎºÐ¿¡¼­
- IPv6¸¦ Áö¿øÇϱ⶧¹®¿¡, ¾ÆÆÄÄ¡´Â IPv6 ¼ÒÄÏÀ» ÇÒ´çÇÏ¿© IPv6·Î
- ¹ÞÀº ¿äûÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ °ü¸®ÀÚ¿¡°Ô º¹ÀâÇÑ ºÎºÐÀº IPv6 ¼ÒÄÏÀÌ IPv4 ¿¬°á°ú
- IPv6 ¿¬°áÀ» ¸ðµÎ ó¸®ÇÒ ¼ö ÀÖ´À³Ä´Â Á¡ÀÌ´Ù. ´ëºÎºÐÀÇ Ç÷¡Æû¿¡¼­´Â
- IPv4-´ëÀÀ(mapped) IPv6 ÁÖ¼Ò¸¦ »ç¿ëÇÏ¿© IPv6 ¼ÒÄÏ¿¡¼­ IPv4
- ¿¬°áÀ» ¹ÞÁö¸¸, FreeBSD¿Í NetBSD¿Í OpenBSDÀº ½Ã½ºÅÛÀüü Á¤Ã¥¶§¹®¿¡
- ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö¾Ê´Â
- ½Ã½ºÅÛÀÌ¶óµµ ¾ÆÆÄÄ¡¸¦ À§ÇØ Æ¯º°ÇÑ ¼³Á¤ ÆĶó¹ÌÅÍ·Î º¯°æÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>¹Ý¸é ¸®´ª½º¿Í Tru64 °°Àº ÀϺΠÇ÷¡Æû¿¡¼­ IPv4¿Í IPv6À»
- ¸ðµÎ ó¸®ÇÏ·Á¸é ´ëÀÀ ÁÖ¼Ò¸¦ <strong>»ç¿ëÇؾ߸¸</strong>
- ÇÑ´Ù. ¾ÆÆÄÄ¡°¡ ÃÖ¼ÒÇÑÀÇ ¼ÒÄÏÀ» »ç¿ëÇÏ¿© IPv4 ¿¬°á°ú IPv6
- ¿¬°áÀ» ¸ðµÎ ¹Þµµ·ÏÇÏ·Á¸é, IPv4-´ëÀÀ IPv6 ÁÖ¼Ò¸¦ »ç¿ëÇÏ°í
- <a href="programs/configure.html">configure</a> ¿É¼Ç
- <code>--enable-v4-mapped</code>¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><code>--enable-v4-mapped</code>´Â FreeBSD, NetBSD, OpenBSD¸¦
- Á¦¿ÜÇÑ ¸ðµç Ç÷¡Æû¿¡¼­ ±âº»°ªÀÌ°í, ¾Æ¸¶µµ ´ç½ÅÀÇ ¾ÆÆÄÄ¡µµ
- ¸¶Âù°¡ÁöÀÏ °ÍÀÌ´Ù.</p>
-
- <p>Ç÷¡Æû°ú APRÀÇ Áö¿ø¿©ºÎ¿Í °ü°è¾øÀÌ ¾ÆÆÄÄ¡°¡ IPv4 ¿¬°á¸¸À»
- ¹Þµµ·ÏÇÏ·Á¸é, ´ÙÀ½ ¿¹Á¦¿Í °°ÀÌ ¸ðµç <directive
- module="mpm_common">Listen</directive> Áö½Ã¾î¿¡ IPv4 ÁÖ¼Ò¸¦
- »ç¿ëÇÑ´Ù:</p>
-
- <example>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </example>
-
- <p>Ç÷¡Æû¿¡¼­ Áö¿øÇÏ¸ç ¾ÆÆÄÄ¡°¡ ¼­·Î ´Ù¸¥ ¼ÒÄÏÀ¸·Î IPv4
- ¿¬°á°ú IPv6 ¿¬°áÀ» ¹Þµµ·ÏÇÏ·Á¸é (Áï IPv4-´ëÀÀ ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸·Á¸é), <a href="programs/configure.html">configure</a>
- ¿É¼Ç <code>--disable-v4-mapped</code>¸¦
- ÁöÁ¤ÇÑ´Ù. <code>--disable-v4-mapped</code>´Â FreeBSD, NetBSD,
- OpenBSD¿¡¼­ ±âº»°ªÀÌ´Ù.</p>
-
- </section>
-
- <section id="virtualhost">
- <title>°¡»óÈ£½ºÆ®¿Í ¾î¶»°Ô ¿¬°üµÇ³ª</title>
-
- <p><directive module="mpm_common">Listen</directive>˼
- °¡»óÈ£½ºÆ®¸¦ ¸¸µéÁö ¾Ê´Â´Ù. ÀÌ´Â ´ÜÁö ÁÖ¼­¹ö°¡
- ¾î¶² ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ±â´Ù¸±Áö¸¸ ¾Ë·ÁÁØ´Ù. <directive
- module="core" type="section">VirtualHost</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏÁö ¾ÊÀ¸¸é, ¼­¹ö´Â ¹ÞÀº ¸ðµç ¿äûÀ» ¶È°°ÀÌ Ã³¸®ÇÑ´Ù.
- ±×·¯³ª <directive module="core"
- type="section">VirtualHost</directive>·Î ¿©·¯ ÁÖ¼Ò¿Í Æ÷Æ®¿¡
- ´ëÇØ ´Ù¸¥ ÇൿÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. °¡»óÈ£½ºÆ®¸¦ ¸¸µé·Á¸é
- ¸ÕÀú ¼­¹ö¿¡°Ô »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ¾Ë·ÁÁà¾ß ÇÑ´Ù. ±×¸®°í
- ƯÁ¤ ÁÖ¼Ò¿Í Æ÷Æ®¿¡ ´ëÇÑ °¡»óÈ£½ºÆ®ÀÇ ÇൿÀ» ÁöÁ¤ÇÒ
- <directive module="core" type="section">VirtualHost</directive>
- ¼½¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ÁÖ¼­¹ö°¡ ±â´Ù¸®Áö¾Ê´Â ÁÖ¼Ò¿Í Æ÷Æ®¸¦ »ç¿ëÇÏ´Â
- <directive module="core" type="section">VirtualHost</directive>´Â
- Á¢±ÙÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/bind.xml.meta b/docs/manual/bind.xml.meta
deleted file mode 100644
index deaef24040..0000000000
--- a/docs/manual/bind.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>bind</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant outdated="yes">fr</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/cgi_path.html b/docs/manual/cgi_path.html
deleted file mode 100644
index 368d1c17c2..0000000000
--- a/docs/manual/cgi_path.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: cgi_path.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: cgi_path.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: cgi_path.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/cgi_path.html.en b/docs/manual/cgi_path.html.en
deleted file mode 100644
index 7a09e3d68a..0000000000
--- a/docs/manual/cgi_path.html.en
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>PATH_INFO Changes in the CGI Environment - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>PATH_INFO Changes in the CGI Environment</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/cgi_path.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/cgi_path.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/cgi_path.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>As implemented in Apache 1.1.1 and earlier versions, the
- method Apache used to create PATH_INFO in the CGI environment
- was counterintuitive, and could result in crashes in certain
- cases. In Apache 1.2 and beyond, this behavior has changed.
- Although this results in some compatibility problems with
- certain legacy CGI applications, the Apache 1.2 behavior is
- still compatible with the CGI/1.1 specification, and CGI
- scripts can be easily modified (<a href="#compat">see
- below</a>).</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#prob">The Problem</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#solution">The Solution</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compat">Compatibility with Previous Servers</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="prob" id="prob">The Problem</a></h2>
- <p>Apache 1.1.1 and earlier implemented the PATH_INFO and
- SCRIPT_NAME environment variables by looking at the filename,
- not the URL. While this resulted in the correct values in many
- cases, when the filesystem path was overloaded to contain path
- information, it could result in errant behavior. For example,
- if the following appeared in a config file:</p>
-
- <div class="example"><p><code>
- Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
- </code></p></div>
-
- <p>In this case, <code>user.cgi</code> is the CGI script, the
- "/ralph" is information to be passed onto the CGI. If this
- configuration was in place, and a request came for
- "<code>/cgi-ralph/script/</code>", the code would set PATH_INFO
- to "<code>/ralph/script</code>", and SCRIPT_NAME to
- "<code>/cgi-</code>". Obviously, the latter is incorrect. In
- certain cases, this could even cause the server to crash.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="solution" id="solution">The Solution</a></h2>
- <p>Apache 1.2 and later now determine SCRIPT_NAME and PATH_INFO
- by looking directly at the URL, and determining how much of the
- URL is client-modifiable, and setting PATH_INFO to it. To use
- the above example, PATH_INFO would be set to
- "<code>/script</code>", and SCRIPT_NAME to
- "<code>/cgi-ralph</code>". This makes sense and results in no
- server behavior problems. It also permits the script to be
- guaranteed that
- "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
- will always be an accessible URL that points to the current
- script, something which was not necessarily true with previous
- versions of Apache.</p>
-
- <p>However, the "<code>/ralph</code>" information from the
- <code>Alias</code> directive is lost. This is unfortunate, but
- we feel that using the filesystem to pass along this sort of
- information is not a recommended method, and a script making
- use of it "deserves" not to work. Apache 1.2b3 and later,
- however, do provide <a href="#compat">a workaround.</a></p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">Compatibility with Previous Servers</a></h2>
-
-
- <p>It may be necessary for a script that was designed for
- earlier versions of Apache or other servers to need the
- information that the old PATH_INFO variable provided. For this
- purpose, Apache 1.2 (1.2b3 and later) sets an additional
- variable, FILEPATH_INFO. This environment variable contains the
- value that PATH_INFO would have had with Apache 1.1.1.</p>
-
- <p>A script that wishes to work with both Apache 1.2 and
- earlier versions can simply test for the existence of
- FILEPATH_INFO, and use it if available. Otherwise, it can use
- PATH_INFO. For example, in Perl, one might use:</p>
-
- <div class="example"><p><code>
- $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
- </code></p></div>
-
- <p>By doing this, a script can work with all servers supporting
- the CGI/1.1 specification, including all versions of
- Apache.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/cgi_path.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/cgi_path.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/cgi_path.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/cgi_path.html.ja.euc-jp b/docs/manual/cgi_path.html.ja.euc-jp
deleted file mode 100644
index b5154dde05..0000000000
--- a/docs/manual/cgi_path.html.ja.euc-jp
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>CGI ´Ä¶­¤Ç¤Î PATH_INFO ¤ÎÊѹ¹ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>CGI ´Ä¶­¤Ç¤Î PATH_INFO ¤ÎÊѹ¹</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/cgi_path.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/cgi_path.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/cgi_path.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Apache 1.1.1 ¤ª¤è¤Ó¤½¤ì°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤¿
- CGI ´Ä¶­¤Ç PATH_INFO ¤òºîÀ®¤¹¤ëÊýË¡¤Ïľ´ÑŪ¤Ç¤Ê¤¯¡¢
- ¾ì¹ç¤Ë¤è¤Ã¤Æ¤Ï¥¯¥é¥Ã¥·¥å¤¹¤ë¤³¤È¤â¤¢¤ê¤Þ¤·¤¿¡£
- Apache 1.2 µÚ¤Ó¤½¤ì°Ê¹ß¤Ë¤ª¤¤¤Æ¡¢¤³¤ÎÆ°ºî¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿¡£
- ¤³¤Î¤³¤È¤Ë¤è¤êÆÃÄê¤Î¸Å¤¤ CGI ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤ª¤¤¤Æ¤¤¤¯¤Ä¤«
- ¸ß´¹À­¤ÎÌäÂ꤬À¸¤¸¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤½¤ì¤Ç¤â Apache 1.2 ¤ÎÆ°ºî¤Ï
- CGI/1.1 »ÅÍͤȸߴ¹¤¬¤¢¤ê¡¢CGI ¥¹¥¯¥ê¥×¥È¤ÏÍưפ˽¤Àµ¤Ç¤­¤Þ¤¹(<a href="#compat">°Ê²¼»²¾È</a>)¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#prob">ÌäÂê</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#solution">²ò·è</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compat">°ÊÁ°¤Î¥µ¡¼¥Ð¤È¤Î¸ß´¹À­</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="prob" id="prob">ÌäÂê</a></h2>
-
- <p>Apache 1.1.1 ¤ª¤è¤Ó¤½¤ì°ÊÁ°¤Ç¤Ï¡¢URL ¤Ç¤Ï¤Ê¤¯¥Õ¥¡¥¤¥ë̾¤ò»²¾È¤·¤Æ
- PATH_INFO ¤È SCRIPT_NAME ´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¤Æ¤¤¤Þ¤·¤¿¡£
- ¿¤¯¤Î¾ì¹ç¤Ï¤³¤ì¤¬Àµ¤·¤¤·ë²Ì¤òÊÖ¤·¤Þ¤¹¤¬¡¢¥Ñ¥¹¾ðÊó¤ò´Þ¤à¤è¤¦¤Ë
- filesystem ¥Ñ¥¹¤¬¥ª¡¼¥Ð¡¼¥í¡¼¥É¤µ¤ì¤¿¾ì¹ç¤Ï¡¢
- ¸í¤Ã¤¿·ë²Ì¤òÊÖ¤¹¾ì¹ç¤¬¤¢¤ê¤Þ¤·¤¿¡£
- ¤¿¤È¤¨¤Ð¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤Ë°Ê²¼¤¬¤¢¤ë¾ì¹ç</p>
-
- <div class="example"><p><code>
- Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
- </code></p></div>
-
- <p>¤³¤Î¾ì¹ç¡¢<code>user.cgi</code> ¤Ï CGI ¥¹¥¯¥ê¥×¥È¤Ç¤¢¤ê¡¢
- "/ralph" ¤Ï¡¢CGI ¤ËÅϤµ¤ì¤ë¾ðÊó¤Ç¤¹¡£¤â¤·¾å¤ÎÀßÄ꤬¤Ê¤µ¤ì¤Æ¤¤¤Æ¡¢
- "<code>/cgi-ralph/script/</code>" ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤¬Íè¤ì¤Ð¡¢
- PATH_INFO ¤Ë¤Ï "<code>/ralph/script/</code>" ¤¬¡¢
- SCRIPT_NAME ¤Ë¤Ï "<code>/cgi-</code>" ¤¬ÀßÄꤵ¤ì¤Þ¤¹¡£
- ÌÀ¤é¤«¤Ë¡¢¸å¼Ô¤Ï´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£ÆÃÄê¤Î¾ì¹ç¤Ë¤Ï¡¢¤³¤ì¤Ë¤è¤ê
- ¥µ¡¼¥Ð¤¬¥¯¥é¥Ã¥·¥å¤¹¤ë¤³¤È¤µ¤¨¤¢¤ê¤Þ¤·¤¿¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="solution" id="solution">²ò·è</a></h2>
- <p>Apache 1.2 °Ê¹ß¤Ç¤Ï SCRIPT_NAME ¤È PATH_INFO ¤Î·èÄê¤Ë¤Ï URL
- ¤òľÀÜ»²¾È¤·¤Æ¡¢URL
- ¤Î¤É¤ì¤À¤±¤ÎÉôʬ¤¬¥¯¥é¥¤¥¢¥ó¥È¤¬Êѹ¹²Äǽ¤Ê¤Î¤«¤ò³ÎÄꤵ¤»¤¿¾å¤Ç
- PATH_INFO ¤òÀßÄꤹ¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¾å¤ÎÎã¤Ç¤Ï¡¢PATH_INFO ¤Ë¤Ï
- "<code>/script</code>" ¤¬¡¢SCRIPT_NAME ¤Ë¤Ï
- "<code>/cgi-ralph</code>" ¤¬ÀßÄꤵ¤ì¤Þ¤¹¡£
- ¤³¤ì¤ÏÀµ¤·¤¯¡¢¤µ¤é¤Ë¡¢¥µ¡¼¥Ð¤ÎÆ°ºî¤ËÌäÂê¤òµ¯¤³¤¹¤³¤È¤â¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢
- "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
- ¤¬¡¢¾ï¤ËºÇ¿·¤Î¥¹¥¯¥ê¥×¥È¤ò»Ø¤¹¡¢¥¢¥¯¥»¥¹²Äǽ¤Ê URL ¤Ç¤¢¤ë¤³¤È¤ò
- Êݾڤ·¤Þ¤¹¡£¤³¤ì¤Ï¡¢°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Apache
- ¤Ç¤Ïɬ¤º¤·¤â¤½¤¦¤È¤Ï¸Â¤é¤Ê¤«¤Ã¤¿¤³¤È¤Ç¤¹¡£
- </p>
-
- <p>¤·¤«¤· <code>Alias</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤«¤é¤Î
- "<code>/ralph</code>" ¾ðÊó¤Ï¼º¤ï¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ï»ÄÇ°¤Ç¤¹¤¬¡¢filesystem ¤òÄ̤·¤Æ¤³¤Î¼ïÎà¤Î¾ðÊó¤ò
- ÅϤ¹¤Î¤ÏÁ¦¤á¤é¤ì¤¿ÊýË¡¤Ç¤Ï¤Ê¤¯¡¢
- ¤Þ¤¿¤½¤ì¤ò»È¤Ã¤¿¥¹¥¯¥ê¥×¥È¤ÏÆ°ºî¤·¤Ê¤¯¤Æ¤âÅöÁ³¤À¤È¹Í¤¨¤Þ¤¹¡£
- ¤¿¤À¤·¡¢Apache 1.2b3 °Ê¹ß¤Ç¤Ï<a href="#compat">ÂåÂؼêÃÊ</a>¤òÍÑ°Õ¤·¤Æ¤¤¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">°ÊÁ°¤Î¥µ¡¼¥Ð¤È¤Î¸ß´¹À­</a></h2>
-
-
- <p>°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Apache ¤ä¾¤Î¥µ¡¼¥Ð¸þ¤±¤ËÀ߷פµ¤ì¤¿
- ¥¹¥¯¥ê¥×¥È¤Ë¤Ï¸Å¤¤ PATH_INFO ÊÑ¿ô¤Ë¤è¤êÄ󶡤µ¤ì¤ë¾ðÊó¤¬
- ɬÍפǤ¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤³¤ÎÌÜŪ¤Î¤¿¤á¤Ë¡¢
- Apache 1.2 (1.2b3 °Ê¹ß) ¤Ç¤ÏÄɲäÎÊÑ¿ô¡¢FILEPATH_INFO
- ¤òÀßÄꤷ¤Þ¤¹¡£¤³¤Î´Ä¶­ÊÑ¿ô¤Ë¤Ï¡¢Apache 1.1.1 ¤Ç
- PATH_INFO ¤Ç¤¢¤Ã¤¿¤Ç¤¢¤í¤¦Ãͤ¬ÀßÄꤵ¤ì¤Þ¤¹¡£</p>
-
- <p>Apache 1.2 ¤ª¤è¤Ó¤½¤ì°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤ÎξÊý¤ÇÆ°ºî¤µ¤»¤¿¤¤¥¹¥¯¥ê¥×¥È¤Ï¡¢
- FILEPATH_INFO ¤Î¸ºß¤òñ¤ËÄ´¤Ù¤Æ¡¢¤½¤ì¤¬¤¢¤ì¤Ð
- »È¤¦¡¢¤È¤¤¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢PATH_INFO
- ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢Perl ¤Ç¤Ï¼¡¤Î¤â¤Î¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹</p>
-
- <div class="example"><p><code>
- $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
- </code></p></div>
-
- <p>¤³¤ì¤Ë¤è¤ê¡¢¥¹¥¯¥ê¥×¥È¤Ï¤¹¤Ù¤Æ¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Apache ¤ò´Þ¤à¡¢
- CGI/1.1 ¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤¹¤Ù¤Æ¤Î¥µ¡¼¥Ð¤ÇÆ°ºî¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- </p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/cgi_path.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/cgi_path.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/cgi_path.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/cgi_path.html.ko.euc-kr b/docs/manual/cgi_path.html.ko.euc-kr
deleted file mode 100644
index 145a60c56e..0000000000
--- a/docs/manual/cgi_path.html.ko.euc-kr
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>CGI ȯ°æ¿¡¼­ PATH_INFOÀÇ º¯È­ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>CGI ȯ°æ¿¡¼­ PATH_INFOÀÇ º¯È­</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/cgi_path.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/cgi_path.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/cgi_path.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¾ÆÆÄÄ¡ 1.1.1°ú ±× ÀÌÀü ¹öÀüÀÇ °æ¿ì CGI ȯ°æ¿¡¼­
- PATH_INFO¸¦ ¸¸µå´Â ¹æ¹ýÀÌ Á÷°üÀûÀÌÁö ¾Ê°í ¾î¶² °æ¿ì ¼­¹ö¸¦
- Á×À̱⵵ Çß´Ù. ¾ÆÆÄÄ¡ 1.2 ÀÌÈÄ ÀÌ ¹æ¹ýÀÌ º¯Çß´Ù. ±âÁ¸ÀÇ
- ¾î¶² CGI ÇÁ·Î±×·¥µé°ú ¾à°£ÀÇ È£È¯¹®Á¦°¡ ÀÖÁö¸¸
- ¾ÆÆÄÄ¡ 1.2ÀÇ ÇൿÀº ¾ÆÁ÷µµ CGI/1.1 ±Ô¾àÀ» ¹ù¾î³ªÁö¾ÊÀ¸¸ç,
- ½±°Ô CGI ½ºÅ©¸³Æ®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. (<a href="#compat">¾Æ·¡
- Âü°í</a>)</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#prob">¹®Á¦Á¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#solution">ÇØ°áÃ¥</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compat">ÀÌÀü ¼­¹ö¿Í ȣȯ¼º</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="prob" id="prob">¹®Á¦Á¡</a></h2>
- <p>¾ÆÆÄÄ¡ 1.1.1°ú ±× ÀÌÀü ¹öÀüÀº URL ´ë½Å ÆÄÀϸíÀ»
- °¡Áö°í PATH_INFO¿Í SCRIPT_NAME ȯ°æº¯¼ö¸¦ ±¸ÇöÇß´Ù. ¸¹Àº
- °æ¿ì ¿Ã¹Ù¸¥ °á°ú¸¦ ¾òÁö¸¸, ÆÄÀϽýºÅÛ °æ·Î°¡ path
- Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù¸é À߸øµÈ °á°ú°¡ ³ª¿Ã ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
- ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ ÀÖ´Ù¸é:</p>
-
- <div class="example"><p><code>
- Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
- </code></p></div>
-
- <p>ÀÌ °æ¿ì <code>user.cgi</code>´Â CGI ½ºÅ©¸³Æ®ÀÌ°í, "/ralph"´Â
- CGI¿¡ ³Ñ°ÜÁö´Â Á¤º¸´Ù. ÀÌ °æ¿ì
- "<code>/cgi-ralph/script/</code>"·Î ¿äûÀÌ µé¾î¿À¸é PATH´Â
- "<code>/ralph/script</code>"°¡ µÇ°í, SCRIPT_NAMEÀº
- "<code>/cgi-</code>"°¡ µÈ´Ù. ÈÄÀÚ´Â ºÐ¸íÈ÷ À߸øµÇ¾ú´Ù.
- ½ÉÁö¾î ¾î¶² °æ¿ì ¼­¹ö°¡ Áױ⵵ ÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="solution" id="solution">ÇØ°áÃ¥</a></h2>
- <p>¾ÆÆÄÄ¡ 1.2 ÀÌÈÄ¿¡¼­´Â URL¿¡¼­ Ŭ¶óÀ̾ðÆ®°¡ Á¶Àý°¡´ÉÇÑ
- ºÎºÐÀ» ÆÇ´ÜÇÏ¿© SCRIPT_NAME°ú PATH_INFO¸¦ ¼³Á¤ÇÑ´Ù. À§ÀÇ
- ¿¹¿¡¼­ PATH_INFO´Â "<code>/script</code>"°¡ µÇ°í, SCRIPT_NAMEÀº
- "<code>/cgi-ralph</code>"°¡ µÈ´Ù. ÀÌ´Â ÇÕ¸®ÀûÀÌ¸ç ¼­¹ö¿¡
- ¹®Á¦¸¦ ÀÏÀ¸Å°Áö ¾Ê´Â´Ù. ¶Ç, ÀÌÀü ¹öÀü°ú ´Þ¸® ½ºÅ©¸³Æ®¿¡¼­
- "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"°¡
- ÇöÀç ½ºÅ©¸³Æ®¸¦ °¡¸®Å°´Â URLÀÓÀ» º¸ÀåÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>±×·¯³ª ºÒÇàÈ÷µµ <code>Alias</code> Áö½Ã¾îÀÇ
- "<code>/ralph</code>" Á¤º¸´Â »ç¶óÁø´Ù. ±×·¯³ª ¿ì¸®´Â
- ÆÄÀϽýºÅÛÀ» »ç¿ëÇÏ¿© ÀÌ·± Á¤º¸¸¦ ³Ñ°ÜÁÖ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÑ
- ¹æ¹ýÀÌ ¾Æ´Ï¸ç, À̸¦ »ç¿ëÇÏ´Â ½ºÅ©¸³Æ®´Â ÀÛµ¿ÇÒ"¸¸ÇÏÁö"
- ¾Ê´Ù°í »ý°¢ÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡ 1.2b3 ÀÌÈÄ¿¡´Â ÀÌ¿¡ ´ëÇÑ
- <a href="#compat">ÇØ°áÃ¥</a>ÀÌ ÀÖ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">ÀÌÀü ¼­¹ö¿Í ȣȯ¼º</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ ÀÌÀü ¹öÀüÀ̳ª ´Ù¸¥ ¼­¹ö¿ëÀ¸·Î ¼³°èµÈ ½ºÅ©¸³Æ®´Â
- ÀÌÀü PATH_INFO º¯¼ö°¡ Á¦°øÇß´ø Á¤º¸°¡ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­
- ¾ÆÆÄÄ¡ 1.2 (1.2b3 ÀÌÈÄ)´Â FILEPATH_INFO¶ó´Â º¯¼ö¸¦ ´õ ¼³Á¤ÇÑ´Ù.
- ÀÌ È¯°æº¯¼ö´Â ¾ÆÆÄÄ¡ 1.1.1ÀÇ PATH_INFO °ªÀ» °¡Áø´Ù.</p>
-
- <p>½ºÅ©¸³Æ®°¡ ¾ÆÆÄÄ¡ 1.2¿Í ÀÌÀü ¹öÀü ¸ðµÎ¿¡¼­ µ¿ÀÛÇÏ°ÔÇÏ·Á¸é,
- ¸ÕÀú FILEPATH_INFO°¡ ÀÖ´ÂÁö °Ë»çÇÏ°í ÀÖ´Ù¸é ±×°ÍÀ»
- »ç¿ëÇÑ´Ù. ¾ø´Ù¸é PATH_INFO¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î,
- Perl·Î´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><p><code>
- $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
- </code></p></div>
-
- <p>ÀÌ·¸°Ô ÇÏ¸é ¸ðµç ¾ÆÆÄÄ¡¸¦ Æ÷ÇÔÇÏ¿© CGI/1.1 ±ÔÁ¤À» µû¸£´Â
- ¸ðµç ¼­¹ö¿¡¼­ ½ºÅ©¸³Æ®°¡ µ¿ÀÛÇÒ ¼ö ÀÖ´Ù.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/cgi_path.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/cgi_path.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/cgi_path.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/cgi_path.xml b/docs/manual/cgi_path.xml
deleted file mode 100644
index 025527d91d..0000000000
--- a/docs/manual/cgi_path.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="cgi_path.xml.meta">
-
- <title>PATH_INFO Changes in the CGI Environment</title>
-
- <summary>
- <p>As implemented in Apache 1.1.1 and earlier versions, the
- method Apache used to create PATH_INFO in the CGI environment
- was counterintuitive, and could result in crashes in certain
- cases. In Apache 1.2 and beyond, this behavior has changed.
- Although this results in some compatibility problems with
- certain legacy CGI applications, the Apache 1.2 behavior is
- still compatible with the CGI/1.1 specification, and CGI
- scripts can be easily modified (<a href="#compat">see
- below</a>).</p>
- </summary>
-
- <section id="prob"><title>The Problem</title>
- <p>Apache 1.1.1 and earlier implemented the PATH_INFO and
- SCRIPT_NAME environment variables by looking at the filename,
- not the URL. While this resulted in the correct values in many
- cases, when the filesystem path was overloaded to contain path
- information, it could result in errant behavior. For example,
- if the following appeared in a config file:</p>
-
- <example>
- Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
- </example>
-
- <p>In this case, <code>user.cgi</code> is the CGI script, the
- "/ralph" is information to be passed onto the CGI. If this
- configuration was in place, and a request came for
- "<code>/cgi-ralph/script/</code>", the code would set PATH_INFO
- to "<code>/ralph/script</code>", and SCRIPT_NAME to
- "<code>/cgi-</code>". Obviously, the latter is incorrect. In
- certain cases, this could even cause the server to crash.</p>
- </section>
-
- <section id="solution"><title>The Solution</title>
- <p>Apache 1.2 and later now determine SCRIPT_NAME and PATH_INFO
- by looking directly at the URL, and determining how much of the
- URL is client-modifiable, and setting PATH_INFO to it. To use
- the above example, PATH_INFO would be set to
- "<code>/script</code>", and SCRIPT_NAME to
- "<code>/cgi-ralph</code>". This makes sense and results in no
- server behavior problems. It also permits the script to be
- guaranteed that
- "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
- will always be an accessible URL that points to the current
- script, something which was not necessarily true with previous
- versions of Apache.</p>
-
- <p>However, the "<code>/ralph</code>" information from the
- <code>Alias</code> directive is lost. This is unfortunate, but
- we feel that using the filesystem to pass along this sort of
- information is not a recommended method, and a script making
- use of it "deserves" not to work. Apache 1.2b3 and later,
- however, do provide <a href="#compat">a workaround.</a></p>
- </section>
-
- <section id="compat">
- <title>Compatibility with Previous Servers</title>
-
- <p>It may be necessary for a script that was designed for
- earlier versions of Apache or other servers to need the
- information that the old PATH_INFO variable provided. For this
- purpose, Apache 1.2 (1.2b3 and later) sets an additional
- variable, FILEPATH_INFO. This environment variable contains the
- value that PATH_INFO would have had with Apache 1.1.1.</p>
-
- <p>A script that wishes to work with both Apache 1.2 and
- earlier versions can simply test for the existence of
- FILEPATH_INFO, and use it if available. Otherwise, it can use
- PATH_INFO. For example, in Perl, one might use:</p>
-
- <example>
- $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
- </example>
-
- <p>By doing this, a script can work with all servers supporting
- the CGI/1.1 specification, including all versions of
- Apache.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/cgi_path.xml.ja b/docs/manual/cgi_path.xml.ja
deleted file mode 100644
index 386647adb2..0000000000
--- a/docs/manual/cgi_path.xml.ja
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="cgi_path.xml.meta">
-
- <title>CGI $B4D6-$G$N(B PATH_INFO $B$NJQ99(B</title>
-
- <summary>
- <p>Apache 1.1.1 $B$*$h$S$=$l0JA0$N%P!<%8%g%s$G<BAu$5$l$F$$$?(B
- CGI $B4D6-$G(B PATH_INFO $B$r:n@.$9$kJ}K!$OD>4QE*$G$J$/!"(B
- $B>l9g$K$h$C$F$O%/%i%C%7%e$9$k$3$H$b$"$j$^$7$?!#(B
- Apache 1.2 $B5Z$S$=$l0J9_$K$*$$$F!"$3$NF0:n$,JQ99$5$l$^$7$?!#(B
- $B$3$N$3$H$K$h$jFCDj$N8E$$(B CGI $B%"%W%j%1!<%7%g%s$K$*$$$F$$$/$D$+(B
- $B8_49@-$NLdBj$,@8$8$k$3$H$,$"$j$^$9$,!"$=$l$G$b(B Apache 1.2 $B$NF0:n$O(B
- CGI/1.1 $B;EMM$H8_49$,$"$j!"(BCGI $B%9%/%j%W%H$OMF0W$K=$@5$G$-$^$9(B(<a
- href="#compat">$B0J2<;2>H(B</a>)$B!#(B</p>
- </summary>
-
- <section id="prob"><title>$BLdBj(B</title>
-
- <p>Apache 1.1.1 $B$*$h$S$=$l0JA0$G$O!"(BURL $B$G$O$J$/%U%!%$%kL>$r;2>H$7$F(B
- PATH_INFO $B$H(B SCRIPT_NAME $B4D6-JQ?t$r@_Dj$7$F$$$^$7$?!#(B
- $BB?$/$N>l9g$O$3$l$,@5$7$$7k2L$rJV$7$^$9$,!"%Q%9>pJs$r4^$`$h$&$K(B
- filesystem $B%Q%9$,%*!<%P!<%m!<%I$5$l$?>l9g$O!"(B
- $B8m$C$?7k2L$rJV$9>l9g$,$"$j$^$7$?!#(B
- $B$?$H$($P!"@_Dj%U%!%$%k$K0J2<$,$"$k>l9g(B</p>
-
- <example>
- Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
- </example>
-
- <p>$B$3$N>l9g!"(B<code>user.cgi</code> $B$O(B CGI $B%9%/%j%W%H$G$"$j!"(B
- &quot;/ralph&quot; $B$O!"(BCGI $B$KEO$5$l$k>pJs$G$9!#$b$7>e$N@_Dj$,$J$5$l$F$$$F!"(B
- &quot;<code>/cgi-ralph/script/</code>&quot; $B$X$N%j%/%(%9%H$,Mh$l$P!"(B
- PATH_INFO $B$K$O(B &quot;<code>/ralph/script/</code>&quot; $B$,!"(B
- SCRIPT_NAME $B$K$O(B &quot;<code>/cgi-</code>&quot; $B$,@_Dj$5$l$^$9!#(B
- $BL@$i$+$K!"8e<T$O4V0c$C$F$$$^$9!#FCDj$N>l9g$K$O!"$3$l$K$h$j(B
- $B%5!<%P$,%/%i%C%7%e$9$k$3$H$5$($"$j$^$7$?!#(B</p>
- </section>
-
- <section id="solution"><title>$B2r7h(B</title>
- <p>Apache 1.2 $B0J9_$G$O(B SCRIPT_NAME $B$H(B PATH_INFO $B$N7hDj$K$O(B URL
- $B$rD>@\;2>H$7$F!"(BURL
- $B$N$I$l$@$1$NItJ,$,%/%i%$%"%s%H$,JQ992DG=$J$N$+$r3NDj$5$;$?>e$G(B
- PATH_INFO $B$r@_Dj$9$k$h$&$K$J$j$^$7$?!#>e$NNc$G$O!"(BPATH_INFO $B$K$O(B
- &quot;<code>/script</code>&quot; $B$,!"(BSCRIPT_NAME $B$K$O(B
- &quot;<code>/cgi-ralph</code>&quot; $B$,@_Dj$5$l$^$9!#(B
- $B$3$l$O@5$7$/!"$5$i$K!"%5!<%P$NF0:n$KLdBj$r5/$3$9$3$H$b$"$j$^$;$s!#$^$?!"(B
- &quot;<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>&quot;
- $B$,!">o$K:G?7$N%9%/%j%W%H$r;X$9!"%"%/%;%92DG=$J(B URL $B$G$"$k$3$H$r(B
- $BJ]>Z$7$^$9!#$3$l$O!"0JA0$N%P!<%8%g%s$N(B Apache
- $B$G$OI,$:$7$b$=$&$H$O8B$i$J$+$C$?$3$H$G$9!#(B
- </p>
-
- <p>$B$7$+$7(B <code>Alias</code> $B%G%#%l%/%F%#%V$+$i$N(B
- &quot;<code>/ralph</code>&quot; $B>pJs$O<:$o$l$^$9!#(B
- $B$3$l$O;DG0$G$9$,!"(Bfilesystem $B$rDL$7$F$3$N<oN`$N>pJs$r(B
- $BEO$9$N$OA&$a$i$l$?J}K!$G$O$J$/!"(B
- $B$^$?$=$l$r;H$C$?%9%/%j%W%H$OF0:n$7$J$/$F$bEvA3$@$H9M$($^$9!#(B
- $B$?$@$7!"(BApache 1.2b3 $B0J9_$G$O(B<a
- href="#compat">$BBeBX<jCJ(B</a>$B$rMQ0U$7$F$$$^$9!#(B</p>
- </section>
-
- <section id="compat">
- <title>$B0JA0$N%5!<%P$H$N8_49@-(B</title>
-
- <p>$B0JA0$N%P!<%8%g%s$N(B Apache $B$dB>$N%5!<%P8~$1$K@_7W$5$l$?(B
- $B%9%/%j%W%H$K$O8E$$(B PATH_INFO $BJQ?t$K$h$jDs6!$5$l$k>pJs$,(B
- $BI,MW$G$"$k$+$b$7$l$^$;$s!#(B
- $B$3$NL\E*$N$?$a$K!"(B
- Apache 1.2 (1.2b3 $B0J9_(B) $B$G$ODI2C$NJQ?t!"(BFILEPATH_INFO
- $B$r@_Dj$7$^$9!#$3$N4D6-JQ?t$K$O!"(BApache 1.1.1 $B$G(B
- PATH_INFO $B$G$"$C$?$G$"$m$&CM$,@_Dj$5$l$^$9!#(B</p>
-
- <p>Apache 1.2 $B$*$h$S$=$l0JA0$N%P!<%8%g%s$NN>J}$GF0:n$5$;$?$$%9%/%j%W%H$O!"(B
- FILEPATH_INFO $B$NB8:_$rC1$KD4$Y$F!"$=$l$,$"$l$P(B
- $B;H$&!"$H$$$&$3$H$,$G$-$^$9!#$=$&$G$J$1$l$P!"(BPATH_INFO
- $B$r;H$&$3$H$,$G$-$^$9!#$?$H$($P!"(BPerl $B$G$O<!$N$b$N$r;H$&$3$H$,$G$-$^$9(B</p>
-
- <example>
- $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
- </example>
-
- <p>$B$3$l$K$h$j!"%9%/%j%W%H$O$9$Y$F$N%P!<%8%g%s$N(B Apache $B$r4^$`!"(B
- CGI/1.1 $B$r%5%]!<%H$9$k$9$Y$F$N%5!<%P$GF0:n$9$k$3$H$,$G$-$^$9!#(B
- </p>
- </section>
-</manualpage>
diff --git a/docs/manual/cgi_path.xml.ko b/docs/manual/cgi_path.xml.ko
deleted file mode 100644
index 6b3d2e0871..0000000000
--- a/docs/manual/cgi_path.xml.ko
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="cgi_path.xml.meta">
-
- <title>CGI ȯ°æ¿¡¼­ PATH_INFOÀÇ º¯È­</title>
-
- <summary>
- <p>¾ÆÆÄÄ¡ 1.1.1°ú ±× ÀÌÀü ¹öÀüÀÇ °æ¿ì CGI ȯ°æ¿¡¼­
- PATH_INFO¸¦ ¸¸µå´Â ¹æ¹ýÀÌ Á÷°üÀûÀÌÁö ¾Ê°í ¾î¶² °æ¿ì ¼­¹ö¸¦
- Á×À̱⵵ Çß´Ù. ¾ÆÆÄÄ¡ 1.2 ÀÌÈÄ ÀÌ ¹æ¹ýÀÌ º¯Çß´Ù. ±âÁ¸ÀÇ
- ¾î¶² CGI ÇÁ·Î±×·¥µé°ú ¾à°£ÀÇ È£È¯¹®Á¦°¡ ÀÖÁö¸¸
- ¾ÆÆÄÄ¡ 1.2ÀÇ ÇൿÀº ¾ÆÁ÷µµ CGI/1.1 ±Ô¾àÀ» ¹ù¾î³ªÁö¾ÊÀ¸¸ç,
- ½±°Ô CGI ½ºÅ©¸³Æ®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. (<a href="#compat">¾Æ·¡
- Âü°í</a>)</p>
- </summary>
-
- <section id="prob"><title>¹®Á¦Á¡</title>
- <p>¾ÆÆÄÄ¡ 1.1.1°ú ±× ÀÌÀü ¹öÀüÀº URL ´ë½Å ÆÄÀϸíÀ»
- °¡Áö°í PATH_INFO¿Í SCRIPT_NAME ȯ°æº¯¼ö¸¦ ±¸ÇöÇß´Ù. ¸¹Àº
- °æ¿ì ¿Ã¹Ù¸¥ °á°ú¸¦ ¾òÁö¸¸, ÆÄÀϽýºÅÛ °æ·Î°¡ path
- Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù¸é À߸øµÈ °á°ú°¡ ³ª¿Ã ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
- ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ ÀÖ´Ù¸é:</p>
-
- <example>
- Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
- </example>
-
- <p>ÀÌ °æ¿ì <code>user.cgi</code>´Â CGI ½ºÅ©¸³Æ®ÀÌ°í, "/ralph"´Â
- CGI¿¡ ³Ñ°ÜÁö´Â Á¤º¸´Ù. ÀÌ °æ¿ì
- "<code>/cgi-ralph/script/</code>"·Î ¿äûÀÌ µé¾î¿À¸é PATH´Â
- "<code>/ralph/script</code>"°¡ µÇ°í, SCRIPT_NAMEÀº
- "<code>/cgi-</code>"°¡ µÈ´Ù. ÈÄÀÚ´Â ºÐ¸íÈ÷ À߸øµÇ¾ú´Ù.
- ½ÉÁö¾î ¾î¶² °æ¿ì ¼­¹ö°¡ Áױ⵵ ÇÑ´Ù.</p>
- </section>
-
- <section id="solution"><title>ÇØ°áÃ¥</title>
- <p>¾ÆÆÄÄ¡ 1.2 ÀÌÈÄ¿¡¼­´Â URL¿¡¼­ Ŭ¶óÀ̾ðÆ®°¡ Á¶Àý°¡´ÉÇÑ
- ºÎºÐÀ» ÆÇ´ÜÇÏ¿© SCRIPT_NAME°ú PATH_INFO¸¦ ¼³Á¤ÇÑ´Ù. À§ÀÇ
- ¿¹¿¡¼­ PATH_INFO´Â "<code>/script</code>"°¡ µÇ°í, SCRIPT_NAMEÀº
- "<code>/cgi-ralph</code>"°¡ µÈ´Ù. ÀÌ´Â ÇÕ¸®ÀûÀÌ¸ç ¼­¹ö¿¡
- ¹®Á¦¸¦ ÀÏÀ¸Å°Áö ¾Ê´Â´Ù. ¶Ç, ÀÌÀü ¹öÀü°ú ´Þ¸® ½ºÅ©¸³Æ®¿¡¼­
- "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"°¡
- ÇöÀç ½ºÅ©¸³Æ®¸¦ °¡¸®Å°´Â URLÀÓÀ» º¸ÀåÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>±×·¯³ª ºÒÇàÈ÷µµ <code>Alias</code> Áö½Ã¾îÀÇ
- "<code>/ralph</code>" Á¤º¸´Â »ç¶óÁø´Ù. ±×·¯³ª ¿ì¸®´Â
- ÆÄÀϽýºÅÛÀ» »ç¿ëÇÏ¿© ÀÌ·± Á¤º¸¸¦ ³Ñ°ÜÁÖ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÑ
- ¹æ¹ýÀÌ ¾Æ´Ï¸ç, À̸¦ »ç¿ëÇÏ´Â ½ºÅ©¸³Æ®´Â ÀÛµ¿ÇÒ"¸¸ÇÏÁö"
- ¾Ê´Ù°í »ý°¢ÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡ 1.2b3 ÀÌÈÄ¿¡´Â ÀÌ¿¡ ´ëÇÑ
- <a href="#compat">ÇØ°áÃ¥</a>ÀÌ ÀÖ´Ù.</p>
- </section>
-
- <section id="compat">
- <title>ÀÌÀü ¼­¹ö¿Í ȣȯ¼º</title>
-
- <p>¾ÆÆÄÄ¡ ÀÌÀü ¹öÀüÀ̳ª ´Ù¸¥ ¼­¹ö¿ëÀ¸·Î ¼³°èµÈ ½ºÅ©¸³Æ®´Â
- ÀÌÀü PATH_INFO º¯¼ö°¡ Á¦°øÇß´ø Á¤º¸°¡ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­
- ¾ÆÆÄÄ¡ 1.2 (1.2b3 ÀÌÈÄ)´Â FILEPATH_INFO¶ó´Â º¯¼ö¸¦ ´õ ¼³Á¤ÇÑ´Ù.
- ÀÌ È¯°æº¯¼ö´Â ¾ÆÆÄÄ¡ 1.1.1ÀÇ PATH_INFO °ªÀ» °¡Áø´Ù.</p>
-
- <p>½ºÅ©¸³Æ®°¡ ¾ÆÆÄÄ¡ 1.2¿Í ÀÌÀü ¹öÀü ¸ðµÎ¿¡¼­ µ¿ÀÛÇÏ°ÔÇÏ·Á¸é,
- ¸ÕÀú FILEPATH_INFO°¡ ÀÖ´ÂÁö °Ë»çÇÏ°í ÀÖ´Ù¸é ±×°ÍÀ»
- »ç¿ëÇÑ´Ù. ¾ø´Ù¸é PATH_INFO¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î,
- Perl·Î´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <example>
- $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
- </example>
-
- <p>ÀÌ·¸°Ô ÇÏ¸é ¸ðµç ¾ÆÆÄÄ¡¸¦ Æ÷ÇÔÇÏ¿© CGI/1.1 ±ÔÁ¤À» µû¸£´Â
- ¸ðµç ¼­¹ö¿¡¼­ ½ºÅ©¸³Æ®°¡ µ¿ÀÛÇÒ ¼ö ÀÖ´Ù.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/cgi_path.xml.meta b/docs/manual/cgi_path.xml.meta
deleted file mode 100644
index 86a937e5a1..0000000000
--- a/docs/manual/cgi_path.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>cgi_path</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/configuring.html b/docs/manual/configuring.html
deleted file mode 100644
index 556db7b649..0000000000
--- a/docs/manual/configuring.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: configuring.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: configuring.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: configuring.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/configuring.html.en b/docs/manual/configuring.html.en
deleted file mode 100644
index 9848bb9811..0000000000
--- a/docs/manual/configuring.html.en
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Configuration Files - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Configuration Files</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/configuring.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>This document describes the files used to configure the Apache
-HTTP server.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#main">Main Configuration Files</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#syntax">Syntax of the Configuration Files</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">Modules</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#scope">Scope of Directives</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#htaccess">.htaccess Files</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="main" id="main">Main Configuration Files</a></h2>
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#include">Include</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code></li></ul></td></tr></table>
-
- <p>Apache is configured by placing <a href="mod/directives.html">directives</a> in plain text
- configuration files. The main configuration file is usually called
- <code>httpd.conf</code>. The location of this file is set at
- compile-time, but may be overridden with the <code>-f</code>
- command line flag. In addition, other configuration files may be
- added using the <code class="directive"><a href="./mod/core.html#include">Include</a></code>
- directive, and wildcards can be used to include many configuration
- files. Any directive may be placed in any of these configuration
- files. Changes to the main configuration files are only
- recognized by Apache when it is started or restarted.</p>
-
- <p>The server also reads a file containing mime document types;
- the filename is set by the <code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code> directive,
- and is <code>mime.types</code> by default.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="syntax" id="syntax">Syntax of the Configuration Files</a></h2>
-
-
- <p>Apache configuration files contain one directive per line.
- The back-slash "\" may be used as the last character on a line
- to indicate that the directive continues onto the next line.
- There must be no other characters or white space between the
- back-slash and the end of the line.</p>
-
- <p>Directives in the configuration files are case-insensitive,
- but arguments to directives are often case sensitive. Lines
- that begin with the hash character "#" are considered
- comments, and are ignored. Comments may <strong>not</strong> be
- included on a line after a configuration directive. Blank lines
- and white space occurring before a directive are ignored, so
- you may indent directives for clarity.</p>
-
- <p>You can check your configuration files for syntax errors
- without starting the server by using <code>apachectl
- configtest</code> or the <code>-t</code> command line
- option.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modules" id="modules">Modules</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
-
- <p>Apache is a modular server. This implies that only the most
- basic functionality is included in the core server. Extended
- features are available through <a href="mod/">modules</a> which can be loaded
- into Apache. By default, a <a href="mod/module-dict.html#Status">base</a> set of modules is
- included in the server at compile-time. If the server is
- compiled to use <a href="dso.html">dynamically loaded</a>
- modules, then modules can be compiled separately and added at
- any time using the <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- directive.
- Otherwise, Apache must be recompiled to add or remove modules.
- Configuration directives may be included conditional on a
- presence of a particular module by enclosing them in an<code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> block.</p>
-
- <p>To see which modules are currently compiled into the server,
- you can use the <code>-l</code> command line option.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="scope" id="scope">Scope of Directives</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>Directives placed in the main configuration files apply to
- the entire server. If you wish to change the configuration for
- only a part of the server, you can scope your directives by
- placing them in <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>, and <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
- sections. These sections limit the application of the
- directives which they enclose to particular filesystem
- locations or URLs. They can also be nested, allowing for very
- fine grained configuration.</p>
-
- <p>Apache has the capability to serve many different websites
- simultaneously. This is called <a href="vhosts/">Virtual
- Hosting</a>. Directives can also be scoped by placing them
- inside <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- sections, so that they will only apply to requests for a
- particular website.</p>
-
- <p>Although most directives can be placed in any of these
- sections, some directives do not make sense in some contexts.
- For example, directives controlling process creation can only
- be placed in the main server context. To find which directives
- can be placed in which sections, check the <a href="mod/directive-dict.html#Context">Context</a> of the
- directive. For further information, we provide details on <a href="sections.html">How Directory, Location and Files sections
- work</a>.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">.htaccess Files</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
-
- <p>Apache allows for decentralized management of configuration
- via special files placed inside the web tree. The special files
- are usually called <code>.htaccess</code>, but any name can be
- specified in the <code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code>
- directive. Directives placed in <code>.htaccess</code> files
- apply to the directory where you place the file, and all
- sub-directories. The <code>.htaccess</code> files follow the
- same syntax as the main configuration files. Since
- <code>.htaccess</code> files are read on every request, changes
- made in these files take immediate effect.</p>
-
- <p>To find which directives can be placed in
- <code>.htaccess</code> files, check the <a href="mod/directive-dict.html#Context">Context</a> of the
- directive. The server administrator further controls what
- directives may be placed in <code>.htaccess</code> files by
- configuring the <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
- directive in the main configuration files.</p>
-
- <p>For more information on <code>.htaccess</code> files, see
- the <a href="howto/htaccess.html">.htaccess tutorial</a>.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/configuring.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/configuring.html.ja.euc-jp b/docs/manual/configuring.html.ja.euc-jp
deleted file mode 100644
index adf666218d..0000000000
--- a/docs/manual/configuring.html.ja.euc-jp
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÀßÄê¥Õ¥¡¥¤¥ë - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>ÀßÄê¥Õ¥¡¥¤¥ë</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/configuring.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>¤³¤Îʸ½ñ¤Ç¤Ï¡¢Apache HTTP ¥µ¡¼¥Ð¤òÀßÄꤹ¤ë¤Î¤Ë»ÈÍѤ¹¤ë¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤Æ
-µ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#main">¥á¥¤¥ó¤ÎÀßÄê¥Õ¥¡¥¤¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#syntax">ÀßÄê¥Õ¥¡¥¤¥ë¤Î¹½Ê¸</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">¥â¥¸¥å¡¼¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#scope">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈÏ°Ï</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#htaccess">.htaccess ¥Õ¥¡¥¤¥ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="main" id="main">¥á¥¤¥ó¤ÎÀßÄê¥Õ¥¡¥¤¥ë</a></h2>
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#include">Include</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code></li></ul></td></tr></table>
-
- <p>Apache ¤Ï <a href="mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> ¤òÀßÄê¥Õ¥¡¥¤¥ë¤Ëʿʸ¤Ç½ñ¤¯¤³¤È¤Ë¤è¤êÀßÄꤷ¤Þ¤¹¡£
- ¥á¥¤¥ó¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÏÉáÄÌ¤Ï <code>httpd.conf</code> ¤È¤¤¤¦Ì¾Á°¤Ç¤¹¡£
- ¤³¤Î¥Õ¥¡¥¤¥ë¤Î°ÌÃ֤ϥ³¥ó¥Ñ¥¤¥ë»þ¤ËÀßÄꤵ¤ì¤Þ¤¹¤¬¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î
- <code>-f</code> ¥Õ¥é¥°¤Ë¤è¤ê¾å½ñ¤­¤Ç¤­¤Þ¤¹¡£
- ¤Þ¤¿¡¢Â¾¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ò <code class="directive"><a href="./mod/core.html#include">Include</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤ÆÄɲäǤ­¡¢¥ï¥¤¥ë¥É¥«¡¼¥É¤ò»ÈÍѤ·¤Æ¿¿ô¤Î
- ÀßÄê¥Õ¥¡¥¤¥ë¤òÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤É¤ó¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤â¡¢¤³¤ì¤é¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤É¤ì¤Ë¤Ç¤âÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Apache ¤Ïµ¯Æ°»þ¤«ºÆµ¯Æ°»þ¤Î¤ß¥á¥¤¥óÀßÄê¥Õ¥¡¥¤¥ë¤ÎÊѹ¹¤òǧ¼±¤·¤Þ¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¤Ï MIME
- ¥É¥­¥å¥á¥ó¥È¥¿¥¤¥×¤ò´Þ¤ó¤Ç¤¤¤ë¥Õ¥¡¥¤¥ë¤âÆɤ߹þ¤ß¤Þ¤¹¡£¥Õ¥¡¥¤¥ë̾¤Ï
- <code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code>
- ¤ÇÀßÄꤵ¤ì¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï <code>mime.types</code>
- ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="syntax" id="syntax">ÀßÄê¥Õ¥¡¥¤¥ë¤Î¹½Ê¸</a></h2>
-
-
- <p>Apache ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ï 1 ¹Ô¤Ë 1 ¤Ä¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤«¤é¤Ê¤ê¤Þ¤¹¡£
- ¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å "\" ¤Ï¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¼¡¤Î¹Ô¤Ë·Ñ³¤·¤Æ¤¤¤ë¤³¤È¤ò
- ¼¨¤¹¤¿¤á¤Ë¹Ô¤ÎºÇ¸å¤Îʸ»ú¤È¤·¤Æ»È¤ï¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¹Ô¤ÎºÇ¸å¤È¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Î´Ö¤Ë¾¤Îʸ»ú¤ä¶õÇò¤¬¤¢¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
- </p>
-
- <p>ÀßÄê¥Õ¥¡¥¤¥ë¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¤¬¡¢
- °ú¿ô¤Ë¤Ï¤·¤Ð¤·¤Ð¶èÊ̤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¥Ï¥Ã¥·¥åʸ»ú "#"
- ¤Ç»Ï¤Þ¤ë¹Ô¤Ï¥³¥á¥ó¥È¤È¸«¤Ê¤µ¤ì¤Æ̵»ë¤µ¤ì¤Þ¤¹¡£
- ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¸å¤Î¹Ô¤Ç¤Ï¥³¥á¥ó¥È¤¬´Þ¤Þ¤ì¤Æ¤¤¤Æ¤Ï<strong>¤¤¤±¤Þ¤»¤ó</strong>¡£¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÁ°¤Î¶õ¹Ô¤È¶õÇò¤Ï̵»ë¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- ¤ï¤«¤ê¤ä¤¹¤¯¤¹¤ë¤¿¤á¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥¤¥ó¥Ç¥ó¥È¤·¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£
- </p>
-
- <p>ÀßÄê¥Õ¥¡¥¤¥ë¤Î¹½Ê¸¥¨¥é¡¼¤Ï¡¢
- <code>apachectl configtest</code>
- ¤«¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó
- <code>-t</code> ¤ò»È¤Ã¤ÆÄ´¤Ù¤é¤ì¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modules" id="modules">¥â¥¸¥å¡¼¥ë</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
-
- <p>Apache ¤Ï¥â¥¸¥å¡¼¥ë²½¤µ¤ì¤¿¥µ¡¼¥Ð¤Ç¤¹¡£
- ¥³¥¢¥µ¡¼¥Ð¤Ë¤ÏºÇ¤â´ðËÜŪ¤Êµ¡Ç½¤À¤±¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£³ÈÄ¥µ¡Ç½¤Ï
- Apache ¤Ë¥í¡¼¥É¤µ¤ì¤ë<a href="mod/">¥â¥¸¥å¡¼¥ë</a>¤È¤·¤ÆÍøÍѲÄǽ¤Ç¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥â¥¸¥å¡¼¥ë¤Î
- <a href="mod/module-dict.html#status">Base</a> ¥»¥Ã¥È (´ðËÜ¥»¥Ã¥È) ¤¬
- ¥µ¡¼¥Ð¤Ë´Þ¤Þ¤ì¤Þ¤¹¡£¥µ¡¼¥Ð¤¬<a href="dso.html">ưŪ¥í¡¼¥É</a>¥â¥¸¥å¡¼¥ë¤ò»È¤¦¤è¤¦¤Ë¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥â¥¸¥å¡¼¥ë¤òÊ̤˥³¥ó¥Ñ¥¤¥ë¤·¤Æ¡¢¤¤¤Ä¤Ç¤â
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤ÆÄɲäǤ­¤Þ¤¹¡£
- ¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢¥â¥¸¥å¡¼¥ë¤ÎÄɲääºï½ü¤ò¤¹¤ë¤¿¤á¤Ë¤Ï Apache
- ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
- ¥Ö¥í¥Ã¥¯¤ËÆþ¤ì¤ë¤³¤È¤ÇÆÃÄê¤Î¥â¥¸¥å¡¼¥ë¤¬Â¸ºß¤¹¤ë¤È¤­¤À¤±
- ÀßÄê¥Õ¥¡¥¤¥ë¤Ë´Þ¤Þ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó <code>-l</code> ¤ò»È¤Ã¤Æ¸½»þÅÀ¤Ç
- ¤É¤Î¥â¥¸¥å¡¼¥ë¤¬¥µ¡¼¥Ð¤Ë¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="scope" id="scope">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈÏ°Ï</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>¥á¥¤¥óÀßÄê¥Õ¥¡¥¤¥ë¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥µ¡¼¥ÐÁ´ÂΤËŬÍѤµ¤ì¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Î°ìÉôʬ¤ÎÀßÄê¤À¤±¤òÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ï <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤ËÃÖ¤¯¤³¤È¤ÇŬÍÑÈϰϤò·è¤á¤é¤ì¤Þ¤¹¡£
- ¤³¤ì¤é¤Î¥»¥¯¥·¥ç¥ó¤Ï¤½¤ÎÃæ¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈϰϤò
- ÆÃÄê¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃÖ¤ä URL ¤Ë¸ÂÄꤷ¤Þ¤¹¡£
- Èó¾ï¤ËºÙγÅÙ¤ÎÀßÄê¤ò²Äǽ¤Ë¤¹¤ë¤¿¤á¤Ë¡¢
- ¥»¥¯¥·¥ç¥ó¤òÆþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Apache ¤ÏƱ»þ¤Ë¿¤¯¤Î°ã¤¦¥¦¥§¥Ö¥µ¥¤¥È¤ò°·¤¦Ç½ÎϤ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï <a href="vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a> ¤È¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¡£
- ÆÃÄê¤Î¥¦¥§¥Ö¥µ¥¤¥È¤Ë¤Î¤ßŬÍѤµ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤ËÃÖ¤¯¤³¤È¤Ç¤âŬÍÑÈϰϤòÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤Û¤È¤ó¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤É¤Î¥»¥¯¥·¥ç¥ó¤Ë¤Ç¤â½ñ¤±¤Þ¤¹¤¬¡¢
- Ãæ¤Ë¤Ï¥³¥ó¥Æ¥­¥¹¥È¤Ë¤è¤Ã¤Æ¤Ï°ÕÌ£¤ò¤Ê¤µ¤Ê¤¤¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð¡¢¥×¥í¥»¥¹¤ÎºîÀ®¤òÀ©¸æ¤·¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥á¥¤¥ó¥µ¡¼¥Ð¤Î
- ¥³¥ó¥Æ¥­¥¹¥È¤Ë¤Î¤ß½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¤É¤Î¥»¥¯¥·¥ç¥ó¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¤ë¤«¤òÃΤ뤿¤á¤Ë¤Ï
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î <a href="mod/directive-dict.html#context">¥³¥ó¥Æ¥­¥¹¥È</a> ¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£¾Ü¤·¤¤¾ðÊó¤Ï¡¢
- <a href="sections.html">Directory, Location, Files
- ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a>¤Ë¤¢¤ê¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">.htaccess ¥Õ¥¡¥¤¥ë</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
-
- <p>Apache ¤Ç¤Ï¥¦¥§¥Ö¥Ä¥ê¡¼¤ÎÃæ¤ËÃÖ¤«¤ì¤¿ÆÃÊ̤ʥե¡¥¤¥ë¤ò»È¤Ã¤Æ
- ÈóÃæ±û½¸¸¢Åª¤ÊÀßÄê´ÉÍý¤ò¤Ç¤­¤Þ¤¹¡£¤½¤ÎÆÃÊ̤ʥե¡¥¤¥ë¤ÏÉáÄ̤Ï
- <code>.htaccess</code> ¤È¤¤¤¦Ì¾Á°¤Ç¡¢
- <code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤É¤ó¤Ê̾Á°¤Ë¤Ç¤â»ØÄê¤Ç¤­¤Þ¤¹¡£
- <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ë½ñ¤«¤ì¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤¿
- ¥Ç¥£¥ì¥¯¥È¥ê¤È¤½¤ÎÁ´¤Æ¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ï¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤ÇÆɤ߹þ¤Þ¤ì¤ë¤¿¤á¡¢
- Êѹ¹¤Ï¤¹¤°¤ËÈ¿±Ç¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ë½ñ¤±¤ë¤«¤òÄ´¤Ù¤ë¤Ë¤Ï¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î<a href="mod/directive-dict.html#context">¥³¥ó¥Æ¥­¥¹¥È</a>
- ¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£¥µ¡¼¥Ð´ÉÍý¼Ô¤Ï¤µ¤é¤Ë¥á¥¤¥óÀßÄê¥Õ¥¡¥¤¥ë¤Î
- <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
- ¤òÀßÄꤹ¤ë¤³¤È¤Ç¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ë½ñ¤±¤ë¤è¤¦¤Ë¤¹¤ë¤«¤òÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë´Ø¤¹¤ë¾Ü¤·¤¤¾ðÊó¤Ï
- <a href="howto/htaccess.html">.htaccess ¥Á¥å¡¼¥È¥ê¥¢¥ë</a>
- ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/configuring.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/configuring.html.ko.euc-kr b/docs/manual/configuring.html.ko.euc-kr
deleted file mode 100644
index 2bb6053d53..0000000000
--- a/docs/manual/configuring.html.ko.euc-kr
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¼³Á¤ÆÄÀÏ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¼³Á¤ÆÄÀÏ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/configuring.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¼³Á¤ÇÏ´Â ÆÄÀϵéÀ» ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#main">ÁÖ¼³Á¤ÆÄÀÏ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#syntax">¼³Á¤ÆÄÀÏ ¹®¹ý</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">¸ðµâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#scope">Áö½Ã¾î Àû¿ë¹üÀ§</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#htaccess">.htaccess ÆÄÀÏ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="main" id="main">ÁÖ¼³Á¤ÆÄÀÏ</a></h2>
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#include">Include</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code></li></ul></td></tr></table>
-
- <p>ÀÏ¹Ý ¹®¼­ ÆÄÀÏÀÎ ¼³Á¤ÆÄÀÏ¿¡ <a href="mod/directives.html">Áö½Ã¾î</a>¸¦ »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦
- ¼³Á¤ÇÑ´Ù. ÁÖ¼³Á¤ÆÄÀÏÀ» º¸Åë <code>httpd.conf</code>¶ó°í
- ºÎ¸¥´Ù. ÀÌ ÆÄÀÏÀÇ À§Ä¡´Â ÄÄÆÄÀϽà Á¤ÇØÁö³ª, <code>-f</code>
- ¸í·ÉÇà ¿É¼ÇÀ¸·Î ÁöÁ¤ÇØÁÙ ¼ö ÀÖ´Ù. ¶Ç ´Ù¸¥ ¼³Á¤ÆÄÀÏÀ» <code class="directive"><a href="./mod/core.html#include">Include</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Æ÷ÇÔÇÒ
- ¼ö ÀÖ°í, ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÏ¿© ¸¹Àº ¼³Á¤ÆÄÀÏÀ» Æ÷ÇÔÇÒ ¼öµµ
- ÀÖ´Ù. ÀÌ °æ¿ì Áö½Ã¾î¸¦ ¾î¶² ¼³Á¤ÆÄÀÏ¿¡³ª »ç¿ëÇصµ µÈ´Ù.
- ÁÖ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇÏ¸é ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϰųª Àç½ÃÀÛÇÑ ÀÌÈÄ¿¡
- ¹Ý¿µµÈ´Ù.</p>
-
- <p>¼­¹ö´Â mime ¹®¼­Å¸ÀÔÀ» ´ãÀº ÆÄÀϵµ Àд´Ù. ÆÄÀϸíÀº
- <code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code> Áö½Ã¾î·Î
- ¼³Á¤ÇÏ°í, ±âº»°ªÀº <code>mime.types</code>ÀÌ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="syntax" id="syntax">¼³Á¤ÆÄÀÏ ¹®¹ý</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ ¼³Á¤ÆÄÀÏÀº ÇÑÁÙ¿¡ ÇÑ Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ÁÙ ¸¶Áö¸·
- ¹®ÀÚ°¡ ¹é½½·¡½¬ "\"À̸é Áö½Ã¾î°¡ ´ÙÀ½ ÁÙ¿¡¼­ °è¼ÓµÊÀ» ¶æÇÑ´Ù.
- ÀÌ °æ¿ì ¹é½½·¡½¬ µÚ¿¡ ¾î¶² ¹®ÀÚ³ª °ø¹éµµ ³ª¿À¸é ¾ÈµÈ´Ù.</p>
-
- <p>¼³Á¤ÆÄÀÏÀÇ Áö½Ã¾î´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾ÊÁö¸¸, Áö½Ã¾îÀÇ
- ¾Æ±Ô¸ÕÆ®´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. Çؽ¬¹®ÀÚ "#"·Î
- ½ÃÀÛÇÏ´Â ÁÙÀº ÁÖ¼®À¸·Î ¹«½ÃÇÑ´Ù. ÁÖ¼®À» ¼³Á¤ Áö½Ã¾î¿Í °°Àº
- ÁÙ¿¡ »ç¿ëÇÒ ¼ö <strong>¾ø´Ù</strong>. ºóÁÙ°ú Áö½Ã¾î ¾Õ¿¡ ³ª¿À´Â
- °ø¹éÀº ¹«½ÃÇϹǷÎ, °£°áÇÏ°Ô º¸À̵µ·Ï Áö½Ã¾î¸¦ ÁÙµéÀÓÇÒ(indent)
- ¼ö ÀÖ´Ù.</p>
-
- <p><code>apachectl configtest</code>³ª <code>-t</code> ¸í·ÉÇà
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏÁö ¾Ê°íµµ ¼³Á¤ÆÄÀÏÀÇ ¹®¹ý
- ¿À·ù¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modules" id="modules">¸ðµâ</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
-
- <p>¾ÆÆÄÄ¡´Â ¸ðµâÈ­µÈ ¼­¹ö´Ù. ÀÌ´Â ¸Å¿ì ±âº»ÀûÀÎ ±â´É¸¸ÀÌ
- ¼­¹ö Çٽɿ¡ Æ÷ÇÔµÇÀÖÀ½À» ¶æÇÑ´Ù. ¾ÆÆÄÄ¡´Â <a href="mod/">¸ðµâ</a>À» Àоîµé¿©¼­ ±â´ÉÀ»
- È®ÀåÇÑ´Ù. ±âº»ÀûÀ¸·Î ÄÄÆÄÀÏÇÏ¸é ¼­¹ö¿¡ <a href="mod/module-dict.html#Status">base</a> ¸ðµâµéÀÌ Æ÷ÇԵȴÙ.
- ¼­¹ö¸¦ <a href="dso.html">µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â</a> ¸ðµâÀ»
- »ç¿ëÇÒ ¼ö ÀÖ°Ô ÄÄÆÄÀÏÇÏ¿´´Ù¸é ¸ðµâÀ» µû·Î ÄÄÆÄÀÏÇÏ¿© ¾Æ¹«¶§³ª
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î·Î
- Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸ðµâÀ» Ãß°¡Çϰųª »©±âÀ§ÇØ
- ¾ÆÆÄÄ¡¸¦ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ¼³Á¤ Áö½Ã¾î¸¦ <code class="directive"><a href="./mod/core.html#ifmodule">IfModule</a></code> ºí·ÏÀ¸·Î °¨½Î¼­ ƯÁ¤
- ¸ðµâÀÌ ÀÖ´Â °æ¿ì¿¡¸¸ ¼±ÅÃÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÇöÀç ¼­¹ö¿¡ ¾î¶² ¸ðµâÀÌ ÄÄÆÄÀϵÇÀÖ´ÂÁö º¸·Á¸é <code>-l</code>
- ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="scope" id="scope">Áö½Ã¾î Àû¿ë¹üÀ§</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>ÁÖ¼³Á¤ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î´Â ¼­¹ö Àüü¿¡ Àû¿ëµÈ´Ù. Áö½Ã¾î°¡
- ¼­¹öÀÇ ÀϺο¡¸¸ Àû¿ëµÇ°Ô ÇÏ·Á¸é Áö½Ã¾î¸¦ <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> ¼½¼Ç ¾È¿¡ µÎ¾î¾ßÇÑ´Ù.
- ÀÌ ¼½¼ÇµéÀº ±×µéÀÌ °¨½Î´Â Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦ ÆÄÀϽýºÅÛÀ̳ª
- URLÀÇ Æ¯Á¤ À§Ä¡·Î ÇÑÁ¤ÇÑ´Ù. ¶Ç, ¼­·Î °ãÃļ­ »ç¿ëÇÒ ¼ö Àֱ⶧¹®¿¡
- ¸Å¿ì ¼¼¹ÐÇÑ ¼³Á¤ÀÌ °¡´ÉÇÏ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â ¿©·¯ ´Ù¸¥ À¥»çÀÌÆ®¸¦ µ¿½Ã¿¡ ¼­ºñ½ºÇÏ´Â
- ´É·ÂÀÌ ÀÖ´Ù. À̸¦ <a href="vhosts/">°¡»óÈ£½ºÆ®</a>¶ó°í ÇÑ´Ù.
- Áö½Ã¾î¸¦
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¼½¼Ç ¾È¿¡ µÎ¾î ƯÁ¤ À¥»çÀÌÆ®¿¡¸¸ Áö½Ã¾î¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Áö½Ã¾î´Â ´ëºÎºÐ ¾î¶² ¼½¼Ç¿¡ ³ª¿Íµµ µÇÁö¸¸, ¾î¶² Áö½Ã¾î´Â
- ƯÁ¤ Àå¼Ò¿¡¼­ Àǹ̰¡ ¾ø´Ù. ¿¹¸¦ µé¾î ÇÁ·Î¼¼½º »ý¼ºÀ» Á¶ÀýÇÏ´Â
- Áö½Ã¾î´Â ÁÖ¼­¹ö¼³Á¤ Àå¼Ò¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áö½Ã¾î°¡
- ¾î¶² ¼½¼Ç¿¡ À§Ä¡ÇÒ ¼ö ÀÖ´ÂÁö ¾Ë·Á¸é Áö½Ã¾îÀÇ <a href="mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦ È®ÀÎÇ϶ó.
- ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="sections.html">¾î¶»°Ô Directory,
- Location, Files ¼½¼ÇÀÌ µ¿ÀÛÇϳª</a>¸¦ Âü°íÇ϶ó.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">.htaccess ÆÄÀÏ</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
-
- <p>¾ÆÆÄÄ¡´Â Ưº°ÇÑ ÆÄÀÏÀ» »ç¿ëÇÏ¿© ¼³Á¤À»
- ³ª´²¼­(ºÐ±ÇÀûÀ¸·Î) °ü¸®ÇÒ ¼ö ÀÖ´Ù. ÀÌ Æ¯º°ÇÑ ÆÄÀÏÀ» º¸Åë
- <code>.htaccess</code>¶ó°í ºÎ¸£Áö¸¸, À̸§Àº <code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code> Áö½Ã¾î·Î
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î´Â
- ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮¿Í ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡ Àû¿ëµÈ´Ù.
- <code>.htaccess</code> ÆÄÀÏÀº ÁÖ¼³Á¤ÆÄÀÏ°ú °°Àº ¹®¹ýÀ»
- µû¸¥´Ù. <code>.htaccess</code> ÆÄÀÏÀº ¸Å ¿äû¶§¸¶´Ù Àб⶧¹®¿¡
- ÆÄÀÏÀ» ¼öÁ¤Çϸé Áï½Ã È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù.</p>
-
- <p>¾î¶² Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡ »ç¿ëÇÒ ¼ö
- ÀÖ´ÂÁö ¾Ë·Á¸é Áö½Ã¾îÀÇ <a href="mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦
- È®ÀÎÇ϶ó. ¼­¹ö °ü¸®ÀÚ´Â ÁÖ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> Áö½Ã¾î·Î
- <code>.htaccess</code> ÆÄÀÏ¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö
- Á¶ÀýÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏ¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â
- <a href="howto/htaccess.html">.htaccess ÅõÅ丮¾ó</a>À»
- Âü°íÇ϶ó.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/configuring.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/configuring.xml b/docs/manual/configuring.xml
deleted file mode 100644
index 0c4c322a6d..0000000000
--- a/docs/manual/configuring.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="configuring.xml.meta">
-
- <title>Configuration Files</title>
-
-<summary>
-<p>This document describes the files used to configure the Apache
-HTTP server.</p>
-</summary>
-
- <section id="main">
- <title>Main Configuration Files</title>
- <related>
- <modulelist>
- <module>mod_mime</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">IfDefine</directive>
- <directive module="core">Include</directive>
- <directive module="mod_mime">TypesConfig</directive>
- </directivelist>
- </related>
-
- <p>Apache is configured by placing <a
- href="mod/directives.html">directives</a> in plain text
- configuration files. The main configuration file is usually called
- <code>httpd.conf</code>. The location of this file is set at
- compile-time, but may be overridden with the <code>-f</code>
- command line flag. In addition, other configuration files may be
- added using the <directive module="core">Include</directive>
- directive, and wildcards can be used to include many configuration
- files. Any directive may be placed in any of these configuration
- files. Changes to the main configuration files are only
- recognized by Apache when it is started or restarted.</p>
-
- <p>The server also reads a file containing mime document types;
- the filename is set by the <directive
- module="mod_mime">TypesConfig</directive> directive,
- and is <code>mime.types</code> by default.</p>
- </section>
-
- <section id="syntax">
- <title>Syntax of the Configuration Files</title>
-
- <p>Apache configuration files contain one directive per line.
- The back-slash "\" may be used as the last character on a line
- to indicate that the directive continues onto the next line.
- There must be no other characters or white space between the
- back-slash and the end of the line.</p>
-
- <p>Directives in the configuration files are case-insensitive,
- but arguments to directives are often case sensitive. Lines
- that begin with the hash character "#" are considered
- comments, and are ignored. Comments may <strong>not</strong> be
- included on a line after a configuration directive. Blank lines
- and white space occurring before a directive are ignored, so
- you may indent directives for clarity.</p>
-
- <p>You can check your configuration files for syntax errors
- without starting the server by using <code>apachectl
- configtest</code> or the <code>-t</code> command line
- option.</p>
- </section>
-
- <section id="modules">
- <title>Modules</title>
-
- <related>
- <modulelist>
- <module>mod_so</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">IfModule</directive>
- <directive module="mod_so">LoadModule</directive>
- </directivelist>
- </related>
-
- <p>Apache is a modular server. This implies that only the most
- basic functionality is included in the core server. Extended
- features are available through <a
- href="mod/">modules</a> which can be loaded
- into Apache. By default, a <a
- href="mod/module-dict.html#Status">base</a> set of modules is
- included in the server at compile-time. If the server is
- compiled to use <a href="dso.html">dynamically loaded</a>
- modules, then modules can be compiled separately and added at
- any time using the <directive module="mod_so">LoadModule</directive>
- directive.
- Otherwise, Apache must be recompiled to add or remove modules.
- Configuration directives may be included conditional on a
- presence of a particular module by enclosing them in an<directive
- module="core" type="section">IfModule</directive> block.</p>
-
- <p>To see which modules are currently compiled into the server,
- you can use the <code>-l</code> command line option.</p>
- </section>
-
- <section id="scope">
- <title>Scope of Directives</title>
-
- <related>
- <directivelist>
- <directive module="core" type="section">Directory</directive>
- <directive module="core" type="section">DirectoryMatch</directive>
- <directive module="core" type="section">Files</directive>
- <directive module="core" type="section">FilesMatch</directive>
- <directive module="core" type="section">Location</directive>
- <directive module="core" type="section">LocationMatch</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
- </related>
-
- <p>Directives placed in the main configuration files apply to
- the entire server. If you wish to change the configuration for
- only a part of the server, you can scope your directives by
- placing them in <directive module="core"
- type="section">Directory</directive>, <directive module="core"
- type="section">DirectoryMatch</directive>, <directive module="core"
- type="section">Files</directive>, <directive module="core"
- type="section">FilesMatch</directive>, <directive module="core"
- type="section">Location</directive>, and <directive module="core"
- type="section">LocationMatch</directive>
- sections. These sections limit the application of the
- directives which they enclose to particular filesystem
- locations or URLs. They can also be nested, allowing for very
- fine grained configuration.</p>
-
- <p>Apache has the capability to serve many different websites
- simultaneously. This is called <a href="vhosts/">Virtual
- Hosting</a>. Directives can also be scoped by placing them
- inside <directive module="core" type="section">VirtualHost</directive>
- sections, so that they will only apply to requests for a
- particular website.</p>
-
- <p>Although most directives can be placed in any of these
- sections, some directives do not make sense in some contexts.
- For example, directives controlling process creation can only
- be placed in the main server context. To find which directives
- can be placed in which sections, check the <a
- href="mod/directive-dict.html#Context">Context</a> of the
- directive. For further information, we provide details on <a
- href="sections.html">How Directory, Location and Files sections
- work</a>.</p>
- </section>
-
- <section id="htaccess">
- <title>.htaccess Files</title>
-
- <related>
- <directivelist>
- <directive module="core">AccessFileName</directive>
- <directive module="core">AllowOverride</directive>
- </directivelist>
- </related>
-
- <p>Apache allows for decentralized management of configuration
- via special files placed inside the web tree. The special files
- are usually called <code>.htaccess</code>, but any name can be
- specified in the <directive module="core">AccessFileName</directive>
- directive. Directives placed in <code>.htaccess</code> files
- apply to the directory where you place the file, and all
- sub-directories. The <code>.htaccess</code> files follow the
- same syntax as the main configuration files. Since
- <code>.htaccess</code> files are read on every request, changes
- made in these files take immediate effect.</p>
-
- <p>To find which directives can be placed in
- <code>.htaccess</code> files, check the <a
- href="mod/directive-dict.html#Context">Context</a> of the
- directive. The server administrator further controls what
- directives may be placed in <code>.htaccess</code> files by
- configuring the <directive module="core">AllowOverride</directive>
- directive in the main configuration files.</p>
-
- <p>For more information on <code>.htaccess</code> files, see
- the <a href="howto/htaccess.html">.htaccess tutorial</a>.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/configuring.xml.ja b/docs/manual/configuring.xml.ja
deleted file mode 100644
index 59d457db81..0000000000
--- a/docs/manual/configuring.xml.ja
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="configuring.xml.meta">
-
- <title>$B@_Dj%U%!%$%k(B</title>
-
-<summary>
-<p>$B$3$NJ8=q$G$O!"(BApache HTTP $B%5!<%P$r@_Dj$9$k$N$K;HMQ$9$k%U%!%$%k$K$D$$$F(B
-$B5-=R$7$F$$$^$9!#(B</p>
-</summary>
-
- <section id="main">
- <title>$B%a%$%s$N@_Dj%U%!%$%k(B</title>
- <related>
- <modulelist>
- <module>mod_mime</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">IfDefine</directive>
- <directive module="core">Include</directive>
- <directive module="mod_mime">TypesConfig</directive>
- </directivelist>
- </related>
-
- <p>Apache $B$O(B <a href="mod/directives.html"
- >$B%G%#%l%/%F%#%V(B</a> $B$r@_Dj%U%!%$%k$KJ?J8$G=q$/$3$H$K$h$j@_Dj$7$^$9!#(B
- $B%a%$%s$N@_Dj%U%!%$%k$OIaDL$O(B <code>httpd.conf</code> $B$H$$$&L>A0$G$9!#(B
- $B$3$N%U%!%$%k$N0LCV$O%3%s%Q%$%k;~$K@_Dj$5$l$^$9$,!"%3%^%s%I%i%$%s$N(B
- <code>-f</code> $B%U%i%0$K$h$j>e=q$-$G$-$^$9!#(B
- $B$^$?!"B>$N@_Dj%U%!%$%k$r(B <directive module="core">Include</directive>
- $B%G%#%l%/%F%#%V$K$h$C$FDI2C$G$-!"%o%$%k%I%+!<%I$r;HMQ$7$FB??t$N(B
- $B@_Dj%U%!%$%k$rDI2C$9$k$3$H$,$G$-$^$9!#(B
- $B$I$s$J%G%#%l%/%F%#%V$b!"$3$l$i$N@_Dj%U%!%$%k$I$l$K$G$bF~$l$k$3$H$,$G$-$^$9!#(B
- Apache $B$O5/F0;~$+:F5/F0;~$N$_%a%$%s@_Dj%U%!%$%k$NJQ99$rG'<1$7$^$9!#(B</p>
-
- <p>$B%5!<%P$O(B MIME
- $B%I%-%e%a%s%H%?%$%W$r4^$s$G$$$k%U%!%$%k$bFI$_9~$_$^$9!#%U%!%$%kL>$O(B
- <directive module="mod_mime">TypesConfig</directive>
- $B$G@_Dj$5$l!"%G%U%)%k%H$G$O(B <code>mime.types</code>
- $B$K$J$C$F$$$^$9!#(B</p>
- </section>
-
- <section id="syntax">
- <title>$B@_Dj%U%!%$%k$N9=J8(B</title>
-
- <p>Apache $B$N@_Dj%U%!%$%k$O(B 1 $B9T$K(B 1 $B$D$N%G%#%l%/%F%#%V$+$i$J$j$^$9!#(B
- $B%P%C%/%9%i%C%7%e(B "\" $B$O%G%#%l%/%F%#%V$,<!$N9T$K7QB3$7$F$$$k$3$H$r(B
- $B<($9$?$a$K9T$N:G8e$NJ8;z$H$7$F;H$o$l$F$$$k$+$b$7$l$^$;$s!#(B
- $B9T$N:G8e$H%P%C%/%9%i%C%7%e$N4V$KB>$NJ8;z$d6uGr$,$"$C$F$O$$$1$^$;$s!#(B
- </p>
-
- <p>$B@_Dj%U%!%$%k$N%G%#%l%/%F%#%V$OBgJ8;z>.J8;z$r6hJL$7$^$;$s$,!"(B
- $B0z?t$K$O$7$P$7$P6hJL$9$k$b$N$,$"$j$^$9!#%O%C%7%eJ8;z(B "#"
- $B$G;O$^$k9T$O%3%a%s%H$H8+$J$5$l$FL5;k$5$l$^$9!#(B
- $B@_Dj%G%#%l%/%F%#%V$N8e$N9T$G$O%3%a%s%H$,4^$^$l$F$$$F$O(B<strong
- >$B$$$1$^$;$s(B</strong>$B!#%G%#%l%/%F%#%V$NA0$N6u9T$H6uGr$OL5;k$5$l$^$9$N$G!"(B
- $B$o$+$j$d$9$/$9$k$?$a$K%G%#%l%/%F%#%V$r%$%s%G%s%H$7$F$b9=$$$^$;$s!#(B
- </p>
-
- <p>$B@_Dj%U%!%$%k$N9=J8%(%i!<$O!"(B
- <code>apachectl configtest</code>
- $B$+%3%^%s%I%i%$%s%*%W%7%g%s(B
- <code>-t</code> $B$r;H$C$FD4$Y$i$l$^$9!#(B</p>
- </section>
-
- <section id="modules">
- <title>$B%b%8%e!<%k(B</title>
-
- <related>
- <modulelist>
- <module>mod_so</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">IfModule</directive>
- <directive module="mod_so">LoadModule</directive>
- </directivelist>
- </related>
-
- <p>Apache $B$O%b%8%e!<%k2=$5$l$?%5!<%P$G$9!#(B
- $B%3%"%5!<%P$K$O:G$b4pK\E*$J5!G=$@$1$,4^$^$l$F$$$^$9!#3HD%5!G=$O(B
- Apache $B$K%m!<%I$5$l$k(B<a href="mod/">$B%b%8%e!<%k(B</a
- >$B$H$7$FMxMQ2DG=$G$9!#%G%U%)%k%H$G$O!"%3%s%Q%$%k;~$K%b%8%e!<%k$N(B
- <a href="mod/module-dict.html#status">Base</a> $B%;%C%H(B ($B4pK\%;%C%H(B) $B$,(B
- $B%5!<%P$K4^$^$l$^$9!#%5!<%P$,(B<a href="dso.html">$BF0E*%m!<%I(B</a
- >$B%b%8%e!<%k$r;H$&$h$&$K%3%s%Q%$%k$5$l$F$$$k>l9g$O!"(B
- $B%b%8%e!<%k$rJL$K%3%s%Q%$%k$7$F!"$$$D$G$b(B
- <directive module="mod_so">LoadModule</directive>
- $B%G%#%l%/%F%#%V$r;H$C$FDI2C$G$-$^$9!#(B
- $B$=$&$G$J$$>l9g$O!"%b%8%e!<%k$NDI2C$d:o=|$r$9$k$?$a$K$O(B Apache
- $B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#@_Dj%G%#%l%/%F%#%V$O(B <directive
- module="core" type="section">IfModule</directive>
- $B%V%m%C%/$KF~$l$k$3$H$GFCDj$N%b%8%e!<%k$,B8:_$9$k$H$-$@$1(B
- $B@_Dj%U%!%$%k$K4^$^$l$k$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%3%^%s%I%i%$%s%*%W%7%g%s(B <code>-l</code> $B$r;H$C$F8=;~E@$G(B
- $B$I$N%b%8%e!<%k$,%5!<%P$K%3%s%Q%$%k$5$l$F$$$k$+$rCN$k$3$H$,$G$-$^$9!#(B</p>
- </section>
-
- <section id="scope">
- <title>$B%G%#%l%/%F%#%V$NE,MQHO0O(B</title>
-
- <related>
- <directivelist>
- <directive module="core" type="section">Directory</directive>
- <directive module="core" type="section">DirectoryMatch</directive>
- <directive module="core" type="section">Files</directive>
- <directive module="core" type="section">FilesMatch</directive>
- <directive module="core" type="section">Location</directive>
- <directive module="core" type="section">LocationMatch</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
- </related>
-
- <p>$B%a%$%s@_Dj%U%!%$%k$K$"$k%G%#%l%/%F%#%V$O%5!<%PA4BN$KE,MQ$5$l$^$9!#(B
- $B%5!<%P$N0lItJ,$N@_Dj$@$1$rJQ99$7$?$$>l9g$O(B <directive module="core"
- type="section">Directory</directive>, <directive module="core"
- type="section">DirectoryMatch</directive>, <directive module="core"
- type="section">Files</directive>, <directive module="core"
- type="section">FilesMatch</directive>, <directive module="core"
- type="section">Location</directive>, <directive module="core"
- type="section">LocationMatch</directive>
- $B%;%/%7%g%s$NCf$KCV$/$3$H$GE,MQHO0O$r7h$a$i$l$^$9!#(B
- $B$3$l$i$N%;%/%7%g%s$O$=$NCf$K$"$k%G%#%l%/%F%#%V$NE,MQHO0O$r(B
- $BFCDj$N%U%!%$%k%7%9%F%`$N0LCV$d(B URL $B$K8BDj$7$^$9!#(B
- $BHs>o$K:YN3EY$N@_Dj$r2DG=$K$9$k$?$a$K!"(B
- $B%;%/%7%g%s$rF~$l;R$K$9$k$3$H$b$G$-$^$9!#(B</p>
-
- <p>Apache $B$OF1;~$KB?$/$N0c$&%&%'%V%5%$%H$r07$&G=NO$,$"$j$^$9!#(B
- $B$3$l$O(B <a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $B$H8F$P$l$F$$$^$9!#(B
- $BFCDj$N%&%'%V%5%$%H$K$N$_E,MQ$5$l$k$h$&$K$9$k$?$a$K!"(B
- $B%G%#%l%/%F%#%V$O(B
- <directive module="core" type="section">VirtualHost</directive>
- $B%;%/%7%g%s$NCf$KCV$/$3$H$G$bE,MQHO0O$rJQ$($k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$[$H$s$I$N%G%#%l%/%F%#%V$O$I$N%;%/%7%g%s$K$G$b=q$1$^$9$,!"(B
- $BCf$K$O%3%s%F%-%9%H$K$h$C$F$O0UL#$r$J$5$J$$$b$N$b$"$j$^$9!#(B
- $BNc$($P!"%W%m%;%9$N:n@.$r@)8f$7$F$$$k%G%#%l%/%F%#%V$O%a%$%s%5!<%P$N(B
- $B%3%s%F%-%9%H$K$N$_=q$/$3$H$,$G$-$^$9!#(B
- $B$I$N%G%#%l%/%F%#%V$r$I$N%;%/%7%g%s$K=q$/$3$H$,$G$-$k$+$rCN$k$?$a$K$O(B
- $B%G%#%l%/%F%#%V$N(B <a href="mod/directive-dict.html#context"
- >$B%3%s%F%-%9%H(B</a> $B$rD4$Y$F$/$@$5$$!#>\$7$$>pJs$O!"(B
- <a href="sections.html">Directory, Location, Files
- $B%;%/%7%g%s$NF0:nK!(B</a>$B$K$"$j$^$9!#(B</p>
- </section>
-
- <section id="htaccess">
- <title>.htaccess $B%U%!%$%k(B</title>
-
- <related>
- <directivelist>
- <directive module="core">AccessFileName</directive>
- <directive module="core">AllowOverride</directive>
- </directivelist>
- </related>
-
- <p>Apache $B$G$O%&%'%V%D%j!<$NCf$KCV$+$l$?FCJL$J%U%!%$%k$r;H$C$F(B
- $BHsCf1{=88"E*$J@_Dj4IM}$r$G$-$^$9!#$=$NFCJL$J%U%!%$%k$OIaDL$O(B
- <code>.htaccess</code> $B$H$$$&L>A0$G!"(B
- <directive module="core">AccessFileName</directive>
- $B%G%#%l%/%F%#%V$G$I$s$JL>A0$K$G$b;XDj$G$-$^$9!#(B
- <code>.htaccess</code>
- $B%U%!%$%k$K=q$+$l$?%G%#%l%/%F%#%V$O%U%!%$%k$rCV$$$?(B
- $B%G%#%l%/%H%j$H$=$NA4$F$N%5%V%G%#%l%/%H%j$KE,MQ$5$l$^$9!#(B
- <code>.htaccess</code>
- $B%U%!%$%k$O$9$Y$F$N%j%/%(%9%H$GFI$_9~$^$l$k$?$a!"(B
- $BJQ99$O$9$0$KH?1G$5$l$^$9!#(B</p>
-
- <p>$B$I$N%G%#%l%/%F%#%V$,(B <code>.htaccess</code>
- $B%U%!%$%k$K=q$1$k$+$rD4$Y$k$K$O!"%G%#%l%/%F%#%V$N(B<a
- href="mod/directive-dict.html#context">$B%3%s%F%-%9%H(B</a>
- $B$rD4$Y$F$/$@$5$$!#%5!<%P4IM}<T$O$5$i$K%a%$%s@_Dj%U%!%$%k$N(B
- <directive module="core">AllowOverride</directive>
- $B$r@_Dj$9$k$3$H$G$I$N%G%#%l%/%F%#%V$r(B <code>.htaccess</code>
- $B%U%!%$%k$K=q$1$k$h$&$K$9$k$+$r@)8f$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><code>.htaccess</code> $B%U%!%$%k$K4X$9$k>\$7$$>pJs$O(B
- <a href="howto/htaccess.html">.htaccess $B%A%e!<%H%j%"%k(B</a>
- $B$r;2>H$7$F$/$@$5$$!#(B</p>
- </section>
-</manualpage>
diff --git a/docs/manual/configuring.xml.ko b/docs/manual/configuring.xml.ko
deleted file mode 100644
index d85ff0c675..0000000000
--- a/docs/manual/configuring.xml.ko
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="configuring.xml.meta">
-
- <title>¼³Á¤ÆÄÀÏ</title>
-
-<summary>
-<p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¼³Á¤ÇÏ´Â ÆÄÀϵéÀ» ¼³¸íÇÑ´Ù.</p>
-</summary>
-
- <section id="main">
- <title>ÁÖ¼³Á¤ÆÄÀÏ</title>
- <related>
- <modulelist>
- <module>mod_mime</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">IfDefine</directive>
- <directive module="core">Include</directive>
- <directive module="mod_mime">TypesConfig</directive>
- </directivelist>
- </related>
-
- <p>ÀÏ¹Ý ¹®¼­ ÆÄÀÏÀÎ ¼³Á¤ÆÄÀÏ¿¡ <a
- href="mod/directives.html">Áö½Ã¾î</a>¸¦ »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦
- ¼³Á¤ÇÑ´Ù. ÁÖ¼³Á¤ÆÄÀÏÀ» º¸Åë <code>httpd.conf</code>¶ó°í
- ºÎ¸¥´Ù. ÀÌ ÆÄÀÏÀÇ À§Ä¡´Â ÄÄÆÄÀϽà Á¤ÇØÁö³ª, <code>-f</code>
- ¸í·ÉÇà ¿É¼ÇÀ¸·Î ÁöÁ¤ÇØÁÙ ¼ö ÀÖ´Ù. ¶Ç ´Ù¸¥ ¼³Á¤ÆÄÀÏÀ» <directive
- module="core">Include</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Æ÷ÇÔÇÒ
- ¼ö ÀÖ°í, ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÏ¿© ¸¹Àº ¼³Á¤ÆÄÀÏÀ» Æ÷ÇÔÇÒ ¼öµµ
- ÀÖ´Ù. ÀÌ °æ¿ì Áö½Ã¾î¸¦ ¾î¶² ¼³Á¤ÆÄÀÏ¿¡³ª »ç¿ëÇصµ µÈ´Ù.
- ÁÖ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇÏ¸é ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϰųª Àç½ÃÀÛÇÑ ÀÌÈÄ¿¡
- ¹Ý¿µµÈ´Ù.</p>
-
- <p>¼­¹ö´Â mime ¹®¼­Å¸ÀÔÀ» ´ãÀº ÆÄÀϵµ Àд´Ù. ÆÄÀϸíÀº
- <directive module="mod_mime">TypesConfig</directive> Áö½Ã¾î·Î
- ¼³Á¤ÇÏ°í, ±âº»°ªÀº <code>mime.types</code>ÀÌ´Ù.</p>
- </section>
-
- <section id="syntax">
- <title>¼³Á¤ÆÄÀÏ ¹®¹ý</title>
-
- <p>¾ÆÆÄÄ¡ ¼³Á¤ÆÄÀÏÀº ÇÑÁÙ¿¡ ÇÑ Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ÁÙ ¸¶Áö¸·
- ¹®ÀÚ°¡ ¹é½½·¡½¬ "\"À̸é Áö½Ã¾î°¡ ´ÙÀ½ ÁÙ¿¡¼­ °è¼ÓµÊÀ» ¶æÇÑ´Ù.
- ÀÌ °æ¿ì ¹é½½·¡½¬ µÚ¿¡ ¾î¶² ¹®ÀÚ³ª °ø¹éµµ ³ª¿À¸é ¾ÈµÈ´Ù.</p>
-
- <p>¼³Á¤ÆÄÀÏÀÇ Áö½Ã¾î´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾ÊÁö¸¸, Áö½Ã¾îÀÇ
- ¾Æ±Ô¸ÕÆ®´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. Çؽ¬¹®ÀÚ "#"·Î
- ½ÃÀÛÇÏ´Â ÁÙÀº ÁÖ¼®À¸·Î ¹«½ÃÇÑ´Ù. ÁÖ¼®À» ¼³Á¤ Áö½Ã¾î¿Í °°Àº
- ÁÙ¿¡ »ç¿ëÇÒ ¼ö <strong>¾ø´Ù</strong>. ºóÁÙ°ú Áö½Ã¾î ¾Õ¿¡ ³ª¿À´Â
- °ø¹éÀº ¹«½ÃÇϹǷÎ, °£°áÇÏ°Ô º¸À̵µ·Ï Áö½Ã¾î¸¦ ÁÙµéÀÓÇÒ(indent)
- ¼ö ÀÖ´Ù.</p>
-
- <p><code>apachectl configtest</code>³ª <code>-t</code> ¸í·ÉÇà
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏÁö ¾Ê°íµµ ¼³Á¤ÆÄÀÏÀÇ ¹®¹ý
- ¿À·ù¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù.</p>
- </section>
-
- <section id="modules">
- <title>¸ðµâ</title>
-
- <related>
- <modulelist>
- <module>mod_so</module>
- </modulelist>
- <directivelist>
- <directive module="core" type="section">IfModule</directive>
- <directive module="mod_so">LoadModule</directive>
- </directivelist>
- </related>
-
- <p>¾ÆÆÄÄ¡´Â ¸ðµâÈ­µÈ ¼­¹ö´Ù. ÀÌ´Â ¸Å¿ì ±âº»ÀûÀÎ ±â´É¸¸ÀÌ
- ¼­¹ö Çٽɿ¡ Æ÷ÇÔµÇÀÖÀ½À» ¶æÇÑ´Ù. ¾ÆÆÄÄ¡´Â <a
- href="mod/">¸ðµâ</a>À» Àоîµé¿©¼­ ±â´ÉÀ»
- È®ÀåÇÑ´Ù. ±âº»ÀûÀ¸·Î ÄÄÆÄÀÏÇÏ¸é ¼­¹ö¿¡ <a
- href="mod/module-dict.html#Status">base</a> ¸ðµâµéÀÌ Æ÷ÇԵȴÙ.
- ¼­¹ö¸¦ <a href="dso.html">µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â</a> ¸ðµâÀ»
- »ç¿ëÇÒ ¼ö ÀÖ°Ô ÄÄÆÄÀÏÇÏ¿´´Ù¸é ¸ðµâÀ» µû·Î ÄÄÆÄÀÏÇÏ¿© ¾Æ¹«¶§³ª
- <directive module="mod_so">LoadModule</directive> Áö½Ã¾î·Î
- Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸ðµâÀ» Ãß°¡Çϰųª »©±âÀ§ÇØ
- ¾ÆÆÄÄ¡¸¦ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ¼³Á¤ Áö½Ã¾î¸¦ <directive
- module="core">IfModule</directive> ºí·ÏÀ¸·Î °¨½Î¼­ ƯÁ¤
- ¸ðµâÀÌ ÀÖ´Â °æ¿ì¿¡¸¸ ¼±ÅÃÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÇöÀç ¼­¹ö¿¡ ¾î¶² ¸ðµâÀÌ ÄÄÆÄÀϵÇÀÖ´ÂÁö º¸·Á¸é <code>-l</code>
- ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.</p>
- </section>
-
- <section id="scope">
- <title>Áö½Ã¾î Àû¿ë¹üÀ§</title>
-
- <related>
- <directivelist>
- <directive module="core" type="section">Directory</directive>
- <directive module="core" type="section">DirectoryMatch</directive>
- <directive module="core" type="section">Files</directive>
- <directive module="core" type="section">FilesMatch</directive>
- <directive module="core" type="section">Location</directive>
- <directive module="core" type="section">LocationMatch</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
- </related>
-
- <p>ÁÖ¼³Á¤ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î´Â ¼­¹ö Àüü¿¡ Àû¿ëµÈ´Ù. Áö½Ã¾î°¡
- ¼­¹öÀÇ ÀϺο¡¸¸ Àû¿ëµÇ°Ô ÇÏ·Á¸é Áö½Ã¾î¸¦ <directive module="core"
- type="section">Directory</directive>, <directive module="core"
- type="section">DirectoryMatch</directive>, <directive module="core"
- type="section">Files</directive>, <directive module="core"
- type="section">FilesMatch</directive>, <directive module="core"
- type="section">Location</directive>, <directive module="core"
- type="section">LocationMatch</directive> ¼½¼Ç ¾È¿¡ µÎ¾î¾ßÇÑ´Ù.
- ÀÌ ¼½¼ÇµéÀº ±×µéÀÌ °¨½Î´Â Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦ ÆÄÀϽýºÅÛÀ̳ª
- URLÀÇ Æ¯Á¤ À§Ä¡·Î ÇÑÁ¤ÇÑ´Ù. ¶Ç, ¼­·Î °ãÃļ­ »ç¿ëÇÒ ¼ö Àֱ⶧¹®¿¡
- ¸Å¿ì ¼¼¹ÐÇÑ ¼³Á¤ÀÌ °¡´ÉÇÏ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â ¿©·¯ ´Ù¸¥ À¥»çÀÌÆ®¸¦ µ¿½Ã¿¡ ¼­ºñ½ºÇÏ´Â
- ´É·ÂÀÌ ÀÖ´Ù. À̸¦ <a href="vhosts/">°¡»óÈ£½ºÆ®</a>¶ó°í ÇÑ´Ù.
- Áö½Ã¾î¸¦
- <directive module="core" type="section">VirtualHost</directive>
- ¼½¼Ç ¾È¿¡ µÎ¾î ƯÁ¤ À¥»çÀÌÆ®¿¡¸¸ Áö½Ã¾î¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Áö½Ã¾î´Â ´ëºÎºÐ ¾î¶² ¼½¼Ç¿¡ ³ª¿Íµµ µÇÁö¸¸, ¾î¶² Áö½Ã¾î´Â
- ƯÁ¤ Àå¼Ò¿¡¼­ Àǹ̰¡ ¾ø´Ù. ¿¹¸¦ µé¾î ÇÁ·Î¼¼½º »ý¼ºÀ» Á¶ÀýÇÏ´Â
- Áö½Ã¾î´Â ÁÖ¼­¹ö¼³Á¤ Àå¼Ò¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áö½Ã¾î°¡
- ¾î¶² ¼½¼Ç¿¡ À§Ä¡ÇÒ ¼ö ÀÖ´ÂÁö ¾Ë·Á¸é Áö½Ã¾îÀÇ <a
- href="mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦ È®ÀÎÇ϶ó.
- ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="sections.html">¾î¶»°Ô Directory,
- Location, Files ¼½¼ÇÀÌ µ¿ÀÛÇϳª</a>¸¦ Âü°íÇ϶ó.</p>
- </section>
-
- <section id="htaccess">
- <title>.htaccess ÆÄÀÏ</title>
-
- <related>
- <directivelist>
- <directive module="core">AccessFileName</directive>
- <directive module="core">AllowOverride</directive>
- </directivelist>
- </related>
-
- <p>¾ÆÆÄÄ¡´Â Ưº°ÇÑ ÆÄÀÏÀ» »ç¿ëÇÏ¿© ¼³Á¤À»
- ³ª´²¼­(ºÐ±ÇÀûÀ¸·Î) °ü¸®ÇÒ ¼ö ÀÖ´Ù. ÀÌ Æ¯º°ÇÑ ÆÄÀÏÀ» º¸Åë
- <code>.htaccess</code>¶ó°í ºÎ¸£Áö¸¸, À̸§Àº <directive
- module="core">AccessFileName</directive> Áö½Ã¾î·Î
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î´Â
- ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮¿Í ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡ Àû¿ëµÈ´Ù.
- <code>.htaccess</code> ÆÄÀÏÀº ÁÖ¼³Á¤ÆÄÀÏ°ú °°Àº ¹®¹ýÀ»
- µû¸¥´Ù. <code>.htaccess</code> ÆÄÀÏÀº ¸Å ¿äû¶§¸¶´Ù Àб⶧¹®¿¡
- ÆÄÀÏÀ» ¼öÁ¤Çϸé Áï½Ã È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù.</p>
-
- <p>¾î¶² Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡ »ç¿ëÇÒ ¼ö
- ÀÖ´ÂÁö ¾Ë·Á¸é Áö½Ã¾îÀÇ <a
- href="mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦
- È®ÀÎÇ϶ó. ¼­¹ö °ü¸®ÀÚ´Â ÁÖ¼³Á¤ÆÄÀÏÀÇ <directive
- module="core">AllowOverride</directive> Áö½Ã¾î·Î
- <code>.htaccess</code> ÆÄÀÏ¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö
- Á¶ÀýÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏ¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â
- <a href="howto/htaccess.html">.htaccess ÅõÅ丮¾ó</a>À»
- Âü°íÇ϶ó.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/configuring.xml.meta b/docs/manual/configuring.xml.meta
deleted file mode 100644
index 122912194c..0000000000
--- a/docs/manual/configuring.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>configuring</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/content-negotiation.html b/docs/manual/content-negotiation.html
deleted file mode 100644
index 3fbf5ee048..0000000000
--- a/docs/manual/content-negotiation.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: content-negotiation.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: content-negotiation.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: content-negotiation.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/content-negotiation.html.en b/docs/manual/content-negotiation.html.en
deleted file mode 100644
index c4c3a2ae87..0000000000
--- a/docs/manual/content-negotiation.html.en
+++ /dev/null
@@ -1,678 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Content Negotiation - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Content Negotiation</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/content-negotiation.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>Apache supports content negotiation as described in
- the HTTP/1.1 specification. It can choose the best
- representation of a resource based on the browser-supplied
- preferences for media type, languages, character set and
- encoding. It also implements a couple of features to give
- more intelligent handling of requests from browsers that send
- incomplete negotiation information.</p>
-
- <p>Content negotiation is provided by the
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> module, which is compiled in
- by default.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">About Content Negotiation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">Negotiation in Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#methods">The Negotiation Methods</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#better">Fiddling with Quality
- Values</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Extensions to Transparent Content
-Negotiation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#naming">Note on hyperlinks and naming conventions</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#caching">Note on Caching</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#more">More Information</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="about" id="about">About Content Negotiation</a></h2>
-
- <p>A resource may be available in several different
- representations. For example, it might be available in
- different languages or different media types, or a combination.
- One way of selecting the most appropriate choice is to give the
- user an index page, and let them select. However it is often
- possible for the server to choose automatically. This works
- because browsers can send, as part of each request, information
- about what representations they prefer. For example, a browser
- could indicate that it would like to see information in French,
- if possible, else English will do. Browsers indicate their
- preferences by headers in the request. To request only French
- representations, the browser would send</p>
-
-<div class="example"><p><code>Accept-Language: fr</code></p></div>
-
- <p>Note that this preference will only be applied when there is
- a choice of representations and they vary by language.</p>
-
- <p>As an example of a more complex request, this browser has
- been configured to accept French and English, but prefer
- French, and to accept various media types, preferring HTML over
- plain text or other text types, and preferring GIF or JPEG over
- other media types, but also allowing any other media type as a
- last resort:</p>
-
-<div class="example"><p><code>
- Accept-Language: fr; q=1.0, en; q=0.5<br />
- Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</code></p></div>
-
- <p>Apache supports 'server driven' content negotiation, as
- defined in the HTTP/1.1 specification. It fully supports the
- <code>Accept</code>, <code>Accept-Language</code>,
- <code>Accept-Charset</code> and<code>Accept-Encoding</code>
- request headers. Apache also supports 'transparent'
- content negotiation, which is an experimental negotiation
- protocol defined in RFC 2295 and RFC 2296. It does not offer
- support for 'feature negotiation' as defined in these RFCs.</p>
-
- <p>A <strong>resource</strong> is a conceptual entity
- identified by a URI (RFC 2396). An HTTP server like Apache
- provides access to <strong>representations</strong> of the
- resource(s) within its namespace, with each representation in
- the form of a sequence of bytes with a defined media type,
- character set, encoding, etc. Each resource may be associated
- with zero, one, or more than one representation at any given
- time. If multiple representations are available, the resource
- is referred to as <strong>negotiable</strong> and each of its
- representations is termed a <strong>variant</strong>. The ways
- in which the variants for a negotiable resource vary are called
- the <strong>dimensions</strong> of negotiation.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="negotiation" id="negotiation">Negotiation in Apache</a></h2>
-
- <p>In order to negotiate a resource, the server needs to be
- given information about each of the variants. This is done in
- one of two ways:</p>
-
- <ul>
- <li>Using a type map (<em>i.e.</em>, a <code>*.var</code>
- file) which names the files containing the variants
- explicitly, or</li>
-
- <li>Using a 'MultiViews' search, where the server does an
- implicit filename pattern match and chooses from among the
- results.</li>
- </ul>
-
- <h3><a name="type-map" id="type-map">Using a type-map file</a></h3>
-
- <p>A type map is a document which is associated with the
- handler named <code>type-map</code> (or, for
- backwards-compatibility with older Apache configurations, the
- MIME type <code>application/x-type-map</code>). Note that to
- use this feature, you must have a handler set in the
- configuration that defines a file suffix as
- <code>type-map</code>; this is best done with</p>
-
-<div class="example"><p><code>AddHandler type-map .var</code></p></div>
-
- <p>in the server configuration file.</p>
-
- <p>Type map files should have the same name as the resource
- which they are describing, and have an entry for each available
- variant; these entries consist of contiguous HTTP-format header
- lines. Entries for different variants are separated by blank
- lines. Blank lines are illegal within an entry. It is
- conventional to begin a map file with an entry for the combined
- entity as a whole (although this is not required, and if
- present will be ignored). An example map file is shown below.
- This file would be named <code>foo.var</code>, as it describes
- a resource named <code>foo</code>.</p>
-
-<div class="example"><p><code>
- URI: foo<br />
-<br />
- URI: foo.en.html<br />
- Content-type: text/html<br />
- Content-language: en<br />
-<br />
- URI: foo.fr.de.html<br />
- Content-type: text/html;charset=iso-8859-2<br />
- Content-language: fr, de<br />
-</code></p></div>
- <p>Note also that a typemap file will take precedence over the
- filename's extension, even when Multiviews is on. If the
- variants have different source qualities, that may be indicated
- by the "qs" parameter to the media type, as in this picture
- (available as JPEG, GIF, or ASCII-art): </p>
-
-<div class="example"><p><code>
- URI: foo<br />
-<br />
- URI: foo.jpeg<br />
- Content-type: image/jpeg; qs=0.8<br />
-<br />
- URI: foo.gif<br />
- Content-type: image/gif; qs=0.5<br />
-<br />
- URI: foo.txt<br />
- Content-type: text/plain; qs=0.01<br />
-</code></p></div>
-
- <p>qs values can vary in the range 0.000 to 1.000. Note that
- any variant with a qs value of 0.000 will never be chosen.
- Variants with no 'qs' parameter value are given a qs factor of
- 1.0. The qs parameter indicates the relative 'quality' of this
- variant compared to the other available variants, independent
- of the client's capabilities. For example, a JPEG file is
- usually of higher source quality than an ASCII file if it is
- attempting to represent a photograph. However, if the resource
- being represented is an original ASCII art, then an ASCII
- representation would have a higher source quality than a JPEG
- representation. A qs value is therefore specific to a given
- variant depending on the nature of the resource it
- represents.</p>
-
- <p>The full list of headers recognized is available in the <a href="mod/mod_negotiation.html#typemaps">mod_negotation
- typemap</a> documentation.</p>
-
-
-<h3><a name="multiviews" id="multiviews">Multiviews</a></h3>
-
- <p><code>MultiViews</code> is a per-directory option, meaning it
- can be set with an <code class="directive"><a href="./mod/core.html#options">Options</a></code>
- directive within a <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> or <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> section in
- <code>httpd.conf</code>, or (if <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> is properly set) in
- <code>.htaccess</code> files. Note that <code>Options All</code>
- does not set <code>MultiViews</code>; you have to ask for it by
- name.</p>
-
- <p>The effect of <code>MultiViews</code> is as follows: if the
- server receives a request for <code>/some/dir/foo</code>, if
- <code>/some/dir</code> has <code>MultiViews</code> enabled, and
- <code>/some/dir/foo</code> does <em>not</em> exist, then the
- server reads the directory looking for files named foo.*, and
- effectively fakes up a type map which names all those files,
- assigning them the same media types and content-encodings it
- would have if the client had asked for one of them by name. It
- then chooses the best match to the client's requirements.</p>
-
- <p><code>MultiViews</code> may also apply to searches for the file
- named by the <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> directive, if the
- server is trying to index a directory. If the configuration files
- specify</p>
-<div class="example"><p><code>DirectoryIndex index</code></p></div>
- <p>then the server will arbitrate between <code>index.html</code>
- and <code>index.html3</code> if both are present. If neither
- are present, and <code>index.cgi</code> is there, the server
- will run it.</p>
-
- <p>If one of the files found when reading the directory does not
- have an extension recognized by <code>mod_mime</code> to designate
- its Charset, Content-Type, Language, or Encoding, then the result
- depends on the setting of the <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code> directive. This
- directive determines whether handlers, filters, and other
- extension types can participate in MultiViews negotiation.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="methods" id="methods">The Negotiation Methods</a></h2>
-
- <p>After Apache has obtained a list of the variants for a given
- resource, either from a type-map file or from the filenames in
- the directory, it invokes one of two methods to decide on the
- 'best' variant to return, if any. It is not necessary to know
- any of the details of how negotiation actually takes place in
- order to use Apache's content negotiation features. However the
- rest of this document explains the methods used for those
- interested. </p>
-
- <p>There are two negotiation methods:</p>
-
- <ol>
- <li><strong>Server driven negotiation with the Apache
- algorithm</strong> is used in the normal case. The Apache
- algorithm is explained in more detail below. When this
- algorithm is used, Apache can sometimes 'fiddle' the quality
- factor of a particular dimension to achieve a better result.
- The ways Apache can fiddle quality factors is explained in
- more detail below.</li>
-
- <li><strong>Transparent content negotiation</strong> is used
- when the browser specifically requests this through the
- mechanism defined in RFC 2295. This negotiation method gives
- the browser full control over deciding on the 'best' variant,
- the result is therefore dependent on the specific algorithms
- used by the browser. As part of the transparent negotiation
- process, the browser can ask Apache to run the 'remote
- variant selection algorithm' defined in RFC 2296.</li>
- </ol>
-
-<h3><a name="dimensions" id="dimensions">Dimensions of Negotiation</a></h3>
-
- <table>
-
- <tr valign="top">
- <th>Dimension</th>
-
- <th>Notes</th>
- </tr>
-
- <tr valign="top">
- <td>Media Type</td>
-
- <td>Browser indicates preferences with the <code>Accept</code>
- header field. Each item can have an associated quality factor.
- Variant description can also have a quality factor (the "qs"
- parameter).</td>
- </tr>
-
- <tr valign="top">
- <td>Language</td>
-
- <td>Browser indicates preferences with the
- <code>Accept-Language</code> header field. Each item can have
- a quality factor. Variants can be associated with none, one or
- more than one language.</td>
- </tr>
-
- <tr valign="top">
- <td>Encoding</td>
-
- <td>Browser indicates preference with the
- <code>Accept-Encoding</code> header field. Each item can have
- a quality factor.</td>
- </tr>
-
- <tr valign="top">
- <td>Charset</td>
-
- <td>Browser indicates preference with the
- <code>Accept-Charset</code> header field. Each item can have a
- quality factor. Variants can indicate a charset as a parameter
- of the media type.</td>
- </tr>
- </table>
-
-
-<h3><a name="algorithm" id="algorithm">Apache Negotiation Algorithm</a></h3>
-
- <p>Apache can use the following algorithm to select the 'best'
- variant (if any) to return to the browser. This algorithm is
- not further configurable. It operates as follows:</p>
-
- <ol>
- <li>First, for each dimension of the negotiation, check the
- appropriate <em>Accept*</em> header field and assign a
- quality to each variant. If the <em>Accept*</em> header for
- any dimension implies that this variant is not acceptable,
- eliminate it. If no variants remain, go to step 4.</li>
-
- <li>
- Select the 'best' variant by a process of elimination. Each
- of the following tests is applied in order. Any variants
- not selected at each test are eliminated. After each test,
- if only one variant remains, select it as the best match
- and proceed to step 3. If more than one variant remains,
- move on to the next test.
-
- <ol>
- <li>Multiply the quality factor from the <code>Accept</code>
- header with the quality-of-source factor for this variants
- media type, and select the variants with the highest
- value.</li>
-
- <li>Select the variants with the highest language quality
- factor.</li>
-
- <li>Select the variants with the best language match,
- using either the order of languages in the
- <code>Accept-Language</code> header (if present), or else
- the order of languages in the <code>LanguagePriority</code>
- directive (if present).</li>
-
- <li>Select the variants with the highest 'level' media
- parameter (used to give the version of text/html media
- types).</li>
-
- <li>Select variants with the best charset media
- parameters, as given on the <code>Accept-Charset</code>
- header line. Charset ISO-8859-1 is acceptable unless
- explicitly excluded. Variants with a <code>text/*</code>
- media type but not explicitly associated with a particular
- charset are assumed to be in ISO-8859-1.</li>
-
- <li>Select those variants which have associated charset
- media parameters that are <em>not</em> ISO-8859-1. If
- there are no such variants, select all variants
- instead.</li>
-
- <li>Select the variants with the best encoding. If there
- are variants with an encoding that is acceptable to the
- user-agent, select only these variants. Otherwise if
- there is a mix of encoded and non-encoded variants,
- select only the unencoded variants. If either all
- variants are encoded or all variants are not encoded,
- select all variants.</li>
-
- <li>Select the variants with the smallest content
- length.</li>
-
- <li>Select the first variant of those remaining. This
- will be either the first listed in the type-map file, or
- when variants are read from the directory, the one whose
- file name comes first when sorted using ASCII code
- order.</li>
- </ol>
- </li>
-
- <li>The algorithm has now selected one 'best' variant, so
- return it as the response. The HTTP response header
- <code>Vary</code> is set to indicate the dimensions of
- negotiation (browsers and caches can use this information when
- caching the resource). End.</li>
-
- <li>To get here means no variant was selected (because none
- are acceptable to the browser). Return a 406 status (meaning
- "No acceptable representation") with a response body
- consisting of an HTML document listing the available
- variants. Also set the HTTP <code>Vary</code> header to
- indicate the dimensions of variance.</li>
- </ol>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="better" id="better">Fiddling with Quality
- Values</a></h2>
-
- <p>Apache sometimes changes the quality values from what would
- be expected by a strict interpretation of the Apache
- negotiation algorithm above. This is to get a better result
- from the algorithm for browsers which do not send full or
- accurate information. Some of the most popular browsers send
- <code>Accept</code> header information which would otherwise
- result in the selection of the wrong variant in many cases. If a
- browser sends full and correct information these fiddles will not
- be applied.</p>
-
-<h3><a name="wildcards" id="wildcards">Media Types and Wildcards</a></h3>
-
- <p>The <code>Accept:</code> request header indicates preferences
- for media types. It can also include 'wildcard' media types, such
- as "image/*" or "*/*" where the * matches any string. So a request
- including:</p>
-
-<div class="example"><p><code>Accept: image/*, */*</code></p></div>
-
- <p>would indicate that any type starting "image/" is acceptable,
- as is any other type.
- Some browsers routinely send wildcards in addition to explicit
- types they can handle. For example:</p>
-
-<div class="example"><p><code>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</code></p></div>
- <p>The intention of this is to indicate that the explicitly listed
- types are preferred, but if a different representation is
- available, that is ok too. Using explicit quality values,
- what the browser really wants is something like:</p>
-<div class="example"><p><code>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</code></p></div>
- <p>The explicit types have no quality factor, so they default to a
- preference of 1.0 (the highest). The wildcard */* is given a
- low preference of 0.01, so other types will only be returned if
- no variant matches an explicitly listed type.</p>
-
- <p>If the <code>Accept:</code> header contains <em>no</em> q
- factors at all, Apache sets the q value of "*/*", if present, to
- 0.01 to emulate the desired behavior. It also sets the q value of
- wildcards of the format "type/*" to 0.02 (so these are preferred
- over matches against "*/*". If any media type on the
- <code>Accept:</code> header contains a q factor, these special
- values are <em>not</em> applied, so requests from browsers which
- send the explicit information to start with work as expected.</p>
-
-
-<h3><a name="exceptions" id="exceptions">Language Negotiation Exceptions</a></h3>
-
- <p>New in Apache 2.0, some exceptions have been added to the
- negotiation algorithm to allow graceful fallback when language
- negotiation fails to find a match.</p>
-
- <p>When a client requests a page on your server, but the server
- cannot find a single page that matches the
- <code>Accept-language</code> sent by
- the browser, the server will return either a "No Acceptable
- Variant" or "Multiple Choices" response to the client. To avoid
- these error messages, it is possible to configure Apache to ignore
- the <code>Accept-language</code> in these cases and provide a
- document that does not explicitly match the client's request. The
- <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
- directive can be used to override one or both of these error
- messages and substitute the servers judgement in the form of the
- <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
- directive.</p>
-
- <p>The server will also attempt to match language-subsets when no
- other match can be found. For example, if a client requests
- documents with the language <code>en-GB</code> for British
- English, the server is not normally allowed by the HTTP/1.1
- standard to match that against a document that is marked as simply
- <code>en</code>. (Note that it is almost surely a configuration
- error to include <code>en-GB</code> and not <code>en</code> in the
- <code>Accept-Language</code> header, since it is very unlikely
- that a reader understands British English, but doesn't understand
- English in general. Unfortunately, many current clients have
- default configurations that resemble this.) However, if no other
- language match is possible and the server is about to return a "No
- Acceptable Variants" error or fallback to the <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>, the server
- will ignore the subset specification and match <code>en-GB</code>
- against <code>en</code> documents. Implicitly, Apache will add
- the parent language to the client's acceptable language list with
- a very low quality value. But note that if the client requests
- "en-GB; q=0.9, fr; q=0.8", and the server has documents
- designated "en" and "fr", then the "fr" document will be returned.
- This is necessary to maintain compliance with the HTTP/1.1
- specification and to work effectively with properly configured
- clients.</p>
-
- <p>In order to support advanced techniques (such as cookies or
- special URL-paths) to determine the user's preferred language,
- since Apache 2.0.47 <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> recognizes
- the <a href="env.html">environment variable</a>
- <code>prefer-language</code>. If it exists and contains an
- appropriate language tag, <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> will
- try to select a matching variant. If there's no such variant,
- the normal negotiation process applies.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extensions" id="extensions">Extensions to Transparent Content
-Negotiation</a></h2>
-
-<p>Apache extends the transparent content negotiation protocol (RFC
-2295) as follows. A new <code>{encoding ..}</code> element is used in
-variant lists to label variants which are available with a specific
-content-encoding only. The implementation of the RVSA/1.0 algorithm
-(RFC 2296) is extended to recognize encoded variants in the list, and
-to use them as candidate variants whenever their encodings are
-acceptable according to the <code>Accept-Encoding</code> request
-header. The RVSA/1.0 implementation does not round computed quality
-factors to 5 decimal places before choosing the best variant.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="naming" id="naming">Note on hyperlinks and naming conventions</a></h2>
-
- <p>If you are using language negotiation you can choose between
- different naming conventions, because files can have more than
- one extension, and the order of the extensions is normally
- irrelevant (see the <a href="mod/mod_mime.html#multipleext">mod_mime</a> documentation
- for details).</p>
-
- <p>A typical file has a MIME-type extension (<em>e.g.</em>,
- <code>html</code>), maybe an encoding extension (<em>e.g.</em>,
- <code>gz</code>), and of course a language extension
- (<em>e.g.</em>, <code>en</code>) when we have different
- language variants of this file.</p>
-
- <p>Examples:</p>
-
- <ul>
- <li>foo.en.html</li>
-
- <li>foo.html.en</li>
-
- <li>foo.en.html.gz</li>
- </ul>
-
- <p>Here some more examples of filenames together with valid and
- invalid hyperlinks:</p>
-
- <table class="bordered">
-
- <tr>
- <th>Filename</th>
-
- <th>Valid hyperlink</th>
-
- <th>Invalid hyperlink</th>
- </tr>
-
- <tr>
- <td><em>foo.html.en</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html</em></td>
-
- <td>foo</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.en.gz</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>foo.gz<br />
- foo.html.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html.gz</em></td>
-
- <td>foo</td>
-
- <td>foo.html<br />
- foo.html.gz<br />
- foo.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.gz.html.en</em></td>
-
- <td>foo<br />
- foo.gz<br />
- foo.gz.html</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.gz.en</em></td>
-
- <td>foo<br />
- foo.html<br />
- foo.html.gz</td>
-
- <td>foo.gz</td>
- </tr>
- </table>
-
- <p>Looking at the table above, you will notice that it is always
- possible to use the name without any extensions in a hyperlink
- (<em>e.g.</em>, <code>foo</code>). The advantage is that you
- can hide the actual type of a document rsp. file and can change
- it later, <em>e.g.</em>, from <code>html</code> to
- <code>shtml</code> or <code>cgi</code> without changing any
- hyperlink references.</p>
-
- <p>If you want to continue to use a MIME-type in your
- hyperlinks (<em>e.g.</em> <code>foo.html</code>) the language
- extension (including an encoding extension if there is one)
- must be on the right hand side of the MIME-type extension
- (<em>e.g.</em>, <code>foo.html.en</code>).</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="caching" id="caching">Note on Caching</a></h2>
-
- <p>When a cache stores a representation, it associates it with
- the request URL. The next time that URL is requested, the cache
- can use the stored representation. But, if the resource is
- negotiable at the server, this might result in only the first
- requested variant being cached and subsequent cache hits might
- return the wrong response. To prevent this, Apache normally
- marks all responses that are returned after content negotiation
- as non-cacheable by HTTP/1.0 clients. Apache also supports the
- HTTP/1.1 protocol features to allow caching of negotiated
- responses.</p>
-
- <p>For requests which come from a HTTP/1.0 compliant client
- (either a browser or a cache), the directive <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> can be
- used to allow caching of responses which were subject to
- negotiation. This directive can be given in the server config or
- virtual host, and takes no arguments. It has no effect on requests
- from HTTP/1.1 clients.</p>
-
- <p>For HTTP/1.1 clients, Apache sends a <code>Vary</code> HTTP
- response header to indicate the negotiation dimensions for the
- response. Caches can use this information to determine whether a
- subsequent request can be served from the local copy. To
- encourage a cache to use the local copy regardless of the
- negotiation dimensions, set the <code>force-no-vary</code> <a href="env.html#special">environment variable</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="more" id="more">More Information</a></h2>
-
- <p>For more information about content negotiation, see Alan
- J. Flavell's <a href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
- Negotiation Notes</a>. But note that this document may not be
- updated to include changes in Apache 2.0.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/content-negotiation.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/content-negotiation.html.ja.euc-jp b/docs/manual/content-negotiation.html.ja.euc-jp
deleted file mode 100644
index f450ea2216..0000000000
--- a/docs/manual/content-negotiation.html.ja.euc-jp
+++ /dev/null
@@ -1,727 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/content-negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>Apache ¤Ï HTTP/1.1 ¤Îµ¬³Ê¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ò
- ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£
- ¥Ö¥é¥¦¥¶¤Ë¤è¤êÄ󶡤µ¤ì¤¿¥á¥Ç¥£¥¢¥¿¥¤¥×¡¢
- ¸À¸ì¡¢Ê¸»ú¥»¥Ã¥È¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÍ¥Àè·¹¸þ¤Ë´ð¤Å¤¤¤Æ¡¢
- ºÇŬ¤Ê¥ê¥½¡¼¥¹¤Îɽ¸½¤òÁªÂò¤Ç¤­¤Þ¤¹¡£
- ¤Þ¤¿¡¢ÉÔ´°Á´¤Ê¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¾ðÊó¤òÁ÷¤Ã¤Æ¤¯¤ë¥Ö¥é¥¦¥¶¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤ò
- ¤â¤Ã¤È¸­¤¯¼è¤ê°·¤¨¤ë¤è¤¦¡¢¤¤¤¯¤Ä¤«µ¡Ç½¤â¼ÂÁõ¤·¤Æ¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ï
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ë¤è¤Ã¤ÆÄ󶡤µ¤ì¤Æ¤¤¤Æ¡¢¥Ç¥Õ¥©¥ë¥È¤ÇÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">Apache ¤Ë¤ª¤±¤ë¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#methods">¥Í¥´¥·¥¨¡¼¥·¥ç¥óÊýË¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#better">ÉʼÁ¤ÎÃͤòÊѤ¨¤ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Transparent Content Negotiation
-¤Î³ÈÄ¥</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#naming">¥ê¥ó¥¯¤È̾Á°¤ÎÊÑ´¹¤Ë´Ø¤¹¤ëÃí°ÕÅÀ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#caching">¥­¥ã¥Ã¥·¥å¤Ë´Ø¤¹¤ëÃí°Õ»ö¹à</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#more">ÄɲþðÊó</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="about" id="about">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ</a></h2>
-
- <p>¥ê¥½¡¼¥¹¤Ï¡¢´ö¤Ä¤«°Û¤Ê¤Ã¤¿É½¸½¤ÇÍøÍѤǤ­¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð¡¢°Û¤Ê¤ë¸À¸ì¤ä°Û¤Ê¤ë¥á¥Ç¥£¥¢¥¿¥¤¥×¡¢
- ¤Þ¤¿¤Ï¤½¤ì¤é¤ÎÁȤ߹ç¤ï¤»¤ÇÍøÍѤǤ­¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£
- ¤â¤Ã¤È¤âŬ¤·¤¿ÁªÂò¤ò¤¹¤ëÊýË¡¤Î°ì¤Ä¤Ë¤Ï¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹¥Ú¡¼¥¸¤ò
- ¥æ¡¼¥¶¤Ë¸«¤»¤Æ¡¢¥æ¡¼¥¶¤ËÁª¤ó¤Ç¤â¤é¤¦ÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£
- ¤·¤«¤·¡¢¥µ¡¼¥Ð¤¬¼«Æ°Åª¤ËÁª¤Ö¤³¤È¤¬¤Ç¤­¤ë¾ì¹ç¤¬Â¿¤¯¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥Ö¥é¥¦¥¶¤¬¥ê¥¯¥¨¥¹¥ÈËè¤Ë¡¢
- ¤É¤Îɽ¸½¤òÓϹ¥¤¹¤ë¤«¤È¤¤¤¦¾ðÊó¤òÁ÷¤ë¤³¤È¤ÇÆ°ºî¤·¤Æ¤¤¤Þ¤¹¡£
- Î㤨¤Ð¥Ö¥é¥¦¥¶¤Ï¡¢²Äǽ¤Ê¤é¥Õ¥é¥ó¥¹¸ì¤Ç¾ðÊó¤ò¸«¤¿¤¤¡¢
- ÉÔ²Äǽ¤Ê¤é¤½¤ÎÂå¤ï¤ê¤Ë±Ñ¸ì¤Ç¤â¤è¤¤¤È¡¢
- ¼«Ê¬¤ÎÓϹ¥¤òÃΤ餻¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥Ö¥é¥¦¥¶¤Ï¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤Ç¼«Ê¬¤ÎÍ¥Àè·¹¸þ¤òÃΤ餻¤Þ¤¹¡£
- ¥Õ¥é¥ó¥¹¸ì¤Î¤ß¤Îɽ¸½¤òÍ׵᤹¤ë¾ì¹ç¤Ï¡¢¥Ö¥é¥¦¥¶¤Ï¼¡¤òÁ÷¤ê¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>Accept-Language: fr</code></p></div>
-
- <p>¤³¤ÎÍ¥Àè·¹¸þ¤Ï¡¢ÁªÂò²Äǽ¤Êɽ¸½¤¬Â¸ºß¤·¤Æ¡¢
- ¸À¸ì¤Ë¤è¤Ã¤ÆÍÍ¡¹¤Êɽ¸½¤¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ßŬÍѤµ¤ì¤ë
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¤â¤Ã¤ÈÊ£»¨¤Ê¥ê¥¯¥¨¥¹¥È¤ÎÎã¤òµó¤²¤Þ¤·¤ç¤¦¡£
- ¤³¤Î¥Ö¥é¥¦¥¶¤Ï¥Õ¥é¥ó¥¹¸ì¤È±Ñ¸ì¤ò¼õ¤±ÉÕ¤±¤ë¡¢¤·¤«¤·¥Õ¥é¥ó¥¹¸ì¤ò¹¥¤à¡¢
- ¤½¤·¤ÆÍÍ¡¹¤Ê¥á¥Ç¥£¥¢¥¿¥¤¥×¤ò¼õ¤±ÉÕ¤±¤ë¤¬¡¢
- ¥×¥ì¥¤¥ó¥Æ¥­¥¹¥È¤ä¾¤Î¥¿¥¤¥×¤è¤ê¤Ï HTML ¤ò¹¥¤à¡¢
- ¾¤Î¥á¥Ç¥£¥¢¥¿¥¤¥×¤è¤ê¤Ï GIF ¤ä JPEG ¤ò¹¥¤à¡¢¤·¤«¤·ºÇ½ª¼êÃʤȤ·¤Æ
- ¾¤Î¥á¥Ç¥£¥¢¥¿¥¤¥×¤â¼õ¤±ÉÕ¤±¤ë¡¢¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- Accept-Language: fr; q=1.0, en; q=0.5<br />
- Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</code></p></div>
-
- <p>Apache ¤Ï HTTP/1.1 µ¬³Ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë 'server
- driven' ¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£
- <code>Accept</code>, <code>Accept-Language</code>,
- <code>Accept-Charset</code>, <code>Accept-Encoding</code>
- ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ò´°Á´¤Ë¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£Apache ¤Ï
- 'transparent' ¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤â¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¤¬¡¢
- ¤³¤ì¤Ï RFC 2295 ¤È RFC 2296 ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë»î¸³Åª¤Ê
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¥×¥í¥È¥³¥ë¤Ç¤¹¡£
- ¤³¤ì¤é¤Î RFC¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë 'feature negotiation'
- ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£</p>
-
- <p><strong>¥ê¥½¡¼¥¹</strong>¤È¤Ï URI
- ¤ÇÆÃÄꤵ¤ì¤ë³µÇ°¾å¤Î¤â¤Î¤Î¤³¤È¤Ç¤¹ (RFC 2396)¡£ Apache
- ¤Î¤è¤¦¤Ê HTTP ¥µ¡¼¥Ð¤Ï¡¢¤½¤Î̾Á°¶õ´Ö¤ÎÃæ¤Ç¤Î
- ¥ê¥½¡¼¥¹¤Î<strong>ɽ¸½</strong>¤Ø¤Î¥¢¥¯¥»¥¹¤òÄ󶡤·¤Þ¤¹¡£
- ¤½¤ì¤¾¤ì¤Îɽ¸½¤Ï
- ÄêµÁ¤µ¤ì¤¿¥á¥Ç¥£¥¢¥¿¥¤¥×¡¢Ê¸»ú¥»¥Ã¥È¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°Åù¤Î
- ÉÕ°¤·¤¿¡¢¥Ð¥¤¥ÈÎó¤Î·Á¼°¤Ç¤¹¡£
- ¤½¤ì¤¾¤ì¤Î¥ê¥½¡¼¥¹¤Ï¤¢¤ë»þÅÀ¤Ç 0 ¸Ä¡¢1 ¸Ä¡¢¤½¤ì°Ê¾å¤Îɽ¸½¤È
- ´ØÏ¢ÉÕ¤±¤é¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£Ê£¿ô¤Îɽ¸½¤¬ÍøÍѤǤ­¤ë¾ì¹ç¤Ï¡¢
- ¥ê¥½¡¼¥¹¤Ï<strong>¥Í¥´¥·¥¨¡¼¥·¥ç¥ó²Äǽ¤Ç¤¢¤ë</strong>¤È¤µ¤ì¡¢
- ¸Ä¡¹¤Îɽ¸½¤Ï <strong>variant</strong> ¤È¸Æ¤Ð¤ì¤Þ¤¹¡£
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó²Äǽ¤Ê¥ê¥½¡¼¥¹¤Î variant ¤¬°Û¤Ê¤ë¡¢
- ¤½¤Î¾õÂÖ¤ò»Ø¤·¤Æ¡¢
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î<strong>¼¡¸µ</strong>¤È¸Æ¤Ó¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="negotiation" id="negotiation">Apache ¤Ë¤ª¤±¤ë¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a></h2>
-
- <p>¥ê¥½¡¼¥¹¤ò¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï variant ¤½¤ì¤¾¤ì¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òÃΤäƤª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï°Ê²¼¤ÎÆó¤Ä¤ÎÊýË¡¤Î¤É¤Á¤é¤«¤Ç¹Ô¤ï¤ì¤Þ¤¹¡£</p>
-
- <ul>
- <li>¥¿¥¤¥×¥Þ¥Ã¥×
- (<em>¤¹¤Ê¤ï¤Á</em> <code>*.var</code> ¥Õ¥¡¥¤¥ë)
- ¤ò»È¤¦ÊýË¡¡£ ¤³¤ì¤Ï variant
- ¤òÌÀ¼¨Åª¤Ëµó¤²¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Þ¤¹¡£</li>
-
- <li>'Multiviews'
- ¤ò»È¤Ã¤Æ¡¢¥µ¡¼¥Ð¤¬°ÅÌÛ¤ÎÆâ¤Ë¥Õ¥¡¥¤¥ë̾¤Ë¥Ñ¥¿¡¼¥ó¾È¹ç¤ò
- ¹Ô¤Ê¤Ã¤Æ¤½¤Î·ë²Ì¤«¤éÁªÂò¤¹¤ëÊýË¡¡£</li>
- </ul>
-
- <h3><a name="type-map" id="type-map">type-map ¥Õ¥¡¥¤¥ë¤ò»È¤¦</a></h3>
-
- <p>¥¿¥¤¥×¥Þ¥Ã¥×¤Ï <code>type-map</code> ¥Ï¥ó¥É¥é
- (¤â¤·¤¯¤Ï¡¢¸Å¤¤ Apache
- ¤ÎÀßÄê¤È²¼°Ì¸ß´¹¤Ç¤¢¤ë MIME ¥¿¥¤¥×
- <code>application/x-type-map</code>)
- ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥É¥­¥å¥á¥ó¥È¤Ç¤¹¡£
- ¤³¤Îµ¡Ç½¤ò»È¤¦¤¿¤á¤Ë¤Ï¡¢¤¢¤ë¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ò
- <code>type-map</code>
- ¤È¤·¤ÆÄêµÁ¤¹¤ë¤è¤¦¤Ê¥Ï¥ó¥É¥é¤ò¡¢
- ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤ËÃÖ¤¯É¬Íפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤ì¤Ï</p>
-
-<div class="example"><p><code>AddHandler type-map .var</code></p></div>
-
- <p>¤ò¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ë½ñ¤¯¤³¤È¤¬°ìÈÖÎɤ¤ÊýË¡¤Ç¤¹¡£</p>
-
- <p>¥¿¥¤¥×¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤Ïµ­½Ò¤¹¤ë¥ê¥½¡¼¥¹¤ÈƱ¤¸Ì¾Á°¤ò»ý¤Ã¤Æ¤¤¤Æ¡¢
- ÍøÍѲÄǽ¤Ê variant ¤½¤ì¤¾¤ì¤Î¥¨¥ó¥È¥ê¤ò»ý¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¤³¤Î¥¨¥ó¥È¥ê¤ÏϢ³¤·¤¿ HTTP ¤Î¥Ø¥Ã¥À¹Ô¤Ç¹½À®¤µ¤ì¤Þ¤¹¡£
- °Û¤Ê¤ë variant ¤Î¤¿¤á¤Î¥¨¥ó¥È¥ê¤Ï¶õ¹Ô¤Ç¶èÀÚ¤é¤ì¤Æ¤¤¤Þ¤¹¡£
- ¥¨¥ó¥È¥êÃæ¤Ë¶õ¹Ô¤¬Ê£¿ô¤¢¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
- ½¬´·Åª¤Ë¤Ï¡¢¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤ÏÁ´ÂΤò·ë¹ç¤·¤¿¤â¤Î¤Î¥¨¥ó¥È¥ê¤«¤é»Ï¤Þ¤ê¤Þ¤¹
- (¤·¤«¤·¤³¤ì¤Ïɬ¿Ü¤Ç¤Ï¤Ê¤¯¡¢¤¢¤Ã¤¿¤È¤·¤Æ¤â̵»ë¤µ¤ì¤ë¤â¤Î¤Ç¤¹)¡£
- ¼¡¤ËÎã¤ò¼¨¤·¤Þ¤¹¡£¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¥ê¥½¡¼¥¹ <code>foo</code>
- ¤òµ­½Ò¤·¤Æ¤¤¤ë¤Î¤Ç¡¢<code>foo.var</code> ¤È¤¤¤¦Ì¾Á°¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- URI: foo<br />
-<br />
- URI: foo.en.html<br />
- Content-type: text/html<br />
- Content-language: en<br />
-<br />
- URI: foo.fr.de.html<br />
- Content-type: text/html;charset=iso-8859-2<br />
- Content-language: fr, de<br />
-</code></p></div>
- <p>¤¿¤È¤¨ MultiViews ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¢
- ¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤è¤ê¥¿¥¤¥×¥Þ¥Ã¥×¤ÎÊý¤¬Í¥À踢¤ò»ý¤Ä¤È¤¤¤¦¤³¤È¤Ë¤â
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- variant ¤ÎÉʼÁ¤¬°ã¤¦¤È¤­¤Ï¡¢¤³¤Î²èÁü¤Î¤è¤¦¤Ë (JPEG, GIF, ASCII
- ¥¢¡¼¥È¤¬¤¢¤ê¤Þ¤¹) ¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î "qs"
- ¥Ñ¥é¥á¡¼¥¿¤Ç»ØÄꤵ¤ì¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- URI: foo<br />
-<br />
- URI: foo.jpeg<br />
- Content-type: image/jpeg; qs=0.8<br />
-<br />
- URI: foo.gif<br />
- Content-type: image/gif; qs=0.5<br />
-<br />
- URI: foo.txt<br />
- Content-type: text/plain; qs=0.01<br />
-</code></p></div>
-
- <p>qs ÃͤÎÈÏ°Ï¤Ï 0.000 ¤«¤é 1.000 ¤Ç¤¹¡£qs Ãͤ¬
- 0.000 ¤Î variant ¤Ï·è¤·¤Æ
- ÁªÂò¤µ¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£'qs' ÃͤΤʤ¤ variant
- ¤Ï qs ÃÍ 1.0 ¤ò Í¿¤¨¤é¤ì¤Þ¤¹¡£qs
- ¥Ñ¥é¥á¡¼¥¿¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ÎǽÎϤ˴ط¸Ìµ¤¯¡¢Â¾¤Î variant ¤È
- Èæ³Ó¤·¤¿¤È¤­¤Î variant
- ¤ÎÁêÂÐŪ¤Ê¡ÖÉʼÁ¡×¤ò¼¨¤·¤Þ¤¹¡£
- Î㤨¤Ð¡¢¼Ì¿¿¤òɽ¸½¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤È¤­¤Ï JPEG
- ¥Õ¥¡¥¤¥ë¤ÎÊý¤¬ÉáÄÌ¤Ï ASCII
- ¥Õ¥¡¥¤¥ë¤è¤ê¤â¹â¤¤ÉʼÁ¤Ë¤Ê¤ê¤Þ¤¹¡£¤·¤«¤·¡¢¥ê¥½¡¼¥¹¤¬¸µ¡¹
- ASCII ¥¢¡¼¥È¤Çɽ¸½¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢ASCII ¥Õ¥¡¥¤¥ë¤Î
- Êý¤¬ JPEG ¥Õ¥¡¥¤¥ë¤è¤ê¤â¹â¤¤ÉʼÁ¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ë¡¢qs
- ¤Ï ɽ¸½¤µ¤ì¤ë¥ê¥½¡¼¥¹¤ÎÀ­¼Á¤Ë¤è¤Ã¤Æ variant
- Ëè¤ËÆÃÍ­¤ÎÃͤò¼è¤ê¤Þ¤¹¡£</p>
-
- <p>ǧ¼±¤µ¤ì¤ë¥Ø¥Ã¥À¤Î°ìÍ÷¤Ï
- <a href="mod/mod_negotiation.html#typemaps">mod_negotiation</a>
- ¥É¥­¥å¥á¥ó¥È¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
-
-<h3><a name="multiviews" id="multiviews">Multiviews</a></h3>
-
- <p><code>MultiViews</code> ¤Ï¥Ç¥£¥ì¥¯¥È¥êËè¤Î¥ª¥×¥·¥ç¥ó¤Ç¡¢
- <code>httpd.conf</code>¥Õ¥¡¥¤¥ë¤Î
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>,
- <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>,
- <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
- ¥»¥¯¥·¥ç¥óÃæ¤ä¡¢(<code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
- ¤¬Å¬ÀÚ¤ÊÃÍ¤Ë ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È) <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ç <code class="directive"><a href="./mod/core.html#options">Options</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤ÆÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code>Options All</code> ¤Ï
- <code>MultiViews</code>
- ¤ò¥»¥Ã¥È¤·¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ÌÀ¼¨Åª¤Ë
- ¤½¤Î̾Á°¤ò½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p><code>MultiViews</code> ¤Î¸ú²Ì¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹:
- ¥µ¡¼¥Ð¤¬ <code>/some/dir/foo</code>
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤ê¡¢<code>/some/dir</code> ¤Ç
- <code>MultiViews</code> ¤¬Í­¸ú¤Ç¤¢¤Ã¤Æ¡¢
- <code>/some/dir/foo</code> ¤¬Â¸ºß<em>¤·¤Ê¤¤</em>¾ì¹ç¡¢
- ¥µ¡¼¥Ð¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤òÆɤó¤Ç <code>foo.*</code>
- ¤Ë¤¢¤Æ¤Ï¤Þ¤ëÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤òõ¤·¡¢
- »ö¼Â¾å¤½¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤ò¥Þ¥Ã¥×¤¹¤ë¥¿¥¤¥×¥Þ¥Ã¥×¤òºî¤ê¤Þ¤¹¡£
- ¤½¤Î¤È¤­¡¢¥á¥Ç¥£¥¢¥¿¥¤¥×¤È¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ï¡¢¤½¤Î¥Õ¥¡¥¤¥ë̾¤ò
- ľÀÜ»ØÄꤷ¤¿¤È¤­¤ÈƱ¤¸¤â¤Î¤¬³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£
- ¤½¤ì¤«¤é¥¯¥é¥¤¥¢¥ó¥È¤ÎÍ×µá¤Ë°ìÈֹ礦¤â¤Î¤òÁª¤Ó¤Þ¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Îº÷°ú¤òºî¤í¤¦¤È¤·¤Æ¤¤¤ë¾ì¹ç¡¢
- <code>MultiViews</code>
- ¤Ï <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤òõ¤¹²áÄø¤Ë¤â
- ŬÍѤµ¤ì¤Þ¤¹¡£ÀßÄê¥Õ¥¡¥¤¥ë¤Ë</p>
-<div class="example"><p><code>DirectoryIndex index</code></p></div>
- <p>¤¬½ñ¤«¤ì¤Æ¤¤¤Æ¡¢<code>index.html</code> ¤È
- <code>index.html3</code> ¤¬
- ξÊý¸ºß¤·¤Æ¤¤¤ë¤È¡¢¥µ¡¼¥Ð¤Ï¤½¤ÎÃ椫¤é¤É¤Á¤é¤«¤òŬÅö¤ËÁª¤Ó¤Þ¤¹¡£
- ¤â¤·¤½¤ÎξÊý¤¬Â¸ºß¤»¤º¤Ë <code>index.cgi</code>
- ¤¬Â¸ºß¤·¤Æ¤¤¤ë¤È¡¢ ¥µ¡¼¥Ð¤Ï¤½¤ì¤ò¼Â¹Ô¤·¤Þ¤¹¡£</p>
-
- <p>¤â¤·¥Ç¥£¥ì¥¯¥È¥ê¤òÆɤó¤Ç¤¤¤ëºÝ¤Ë¡¢
- ʸ»ú¥»¥Ã¥È¡¢¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¡¢¸À¸ì¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò
- »ØÄꤹ¤ë¤¿¤á¤Î <code>mod_mime</code>
- ¤Çǧ¼±¤Ç¤­¤ë³ÈÄ¥»Ò¤ò»ý¤¿¤Ê¤¤¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ë¤È¡¢·ë²Ì¤Ï
- <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀßÄê¤Ë°Í¸¤·¤Þ¤¹¡£¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥Ï¥ó¥É¥é¡¢¥Õ¥£¥ë¥¿¡¢Â¾¤Î¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¥¿¥¤¥×¤Î¤É¤ì¤¬
- MultiViews ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ç»ÈÍѤǤ­¤ë¤«¤ò·èÄꤷ¤Þ¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="methods" id="methods">¥Í¥´¥·¥¨¡¼¥·¥ç¥óÊýË¡</a></h2>
-
- <p>Apache ¤Ï¥ê¥½¡¼¥¹¤Î variant ¤Î°ìÍ÷¤ò¡¢¥¿¥¤¥×¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤«
- ¥Ç¥£¥ì¥¯¥È¥êÆâ¤Î¥Õ¥¡¥¤¥ë̾¤«¤é¤«¤Ç¼èÆÀ¤·¤¿¸å¡¢
- ¡ÖºÇŬ¤Ê¡× variant ¤ò·èÄꤹ¤ë¤¿¤á¤ËÆó¤Ä¤ÎÊýË¡¤Î
- ¤É¤Á¤é¤«¤òµ¯Æ°¤·¤Þ¤¹¡£
- Apache ¤Î¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Îµ¡Ç½¤ò»È¤¦¤¿¤á¤Ë¡¢
- ¤É¤Î¤è¤¦¤Ë¤·¤Æ¤³¤ÎÄ´Ä䤬¹Ô¤ï¤ì¤ë¤«¾ÜºÙ¤òÃΤëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢¤³¤Îʸ½ñ¤Î»Ä¤ê¤Ç¤Ï´Ø¿´¤Î¤¢¤ë¿Í¤Î¤¿¤á¤Ë¡¢
- »ÈÍѤµ¤ì¤Æ¤¤¤ëÊýË¡¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¥Í¥´¥·¥¨¡¼¥·¥ç¥óÊýË¡¤ÏÆó¤Ä¤¢¤ê¤Þ¤¹¡£</p>
-
- <ol>
- <li>Ä̾ï¤Ï <strong>Apache ¤Î¥¢¥ë¥´¥ê¥º¥à¤òÍѤ¤¤¿ Server
- driven negotiation</strong> ¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£Apache
- ¤Î¥¢¥ë¥´¥ê¥º¥à¤Ï¸å¤Ë¾ÜºÙ¤ËÀâÌÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤¬»ÈÍѤµ¤ì¤¿¾ì¹ç¡¢Apache
- ¤Ï¤è¤êÎɤ¤·ë²Ì¤Ë¤Ê¤ë¤è¤¦¤Ë¡¢ÆÃÄê¤Î¼¡¸µ¤Ë¤ª¤¤¤ÆÉʼÁ¤ÎÃͤò
- ¡ÖÊѤ¨¤ë¡×¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Apache
- ¤¬ÉʼÁ¤ÎÃͤòÊѤ¨¤ëÊýË¡¤Ï¸å¤Ç¾ÜºÙ¤ËÀâÌÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</li>
-
- <li>RFC 2295
- ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ëµ¡¹½¤òÍѤ¤¤Æ¥Ö¥é¥¦¥¶¤¬Æä˻ØÄꤷ¤¿¾ì¹ç¡¢
- <strong>transparent content negotiation</strong>
- ¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£¤³¤Î¥Í¥´¥·¥¨¡¼¥·¥ç¥óÊýË¡¤Ç¤Ï¡¢¡ÖºÇŬ¤Ê¡×
- variant ¤Î·èÄê¤ò¥Ö¥é¥¦¥¶¤¬´°Á´¤ËÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢·ë²Ì¤Ï¥Ö¥é¥¦¥¶¤¬»ÈÍѤ·¤Æ¤¤¤ë¥¢¥ë¥´¥ê¥º¥à¤Ë°Í¸¤·¤Þ¤¹¡£
- Transparent negotiation ¤Î½èÍý¤Î²áÄø¤Ç¡¢¥Ö¥é¥¦¥¶¤Ï RFC 2296
- ¤Ç ÄêµÁ¤µ¤ì¤Æ¤¤¤ë 'remote variant selection algorithm'
- ¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤ËÍê¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</li>
- </ol>
-
-<h3><a name="dimensions" id="dimensions">¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î¼¡¸µ</a></h3>
-
- <table>
-
- <tr valign="top">
- <th>¼¡¸µ</th>
-
- <th>ÀâÌÀ</th>
- </tr>
-
- <tr valign="top">
- <td>¥á¥Ç¥£¥¢¥¿¥¤¥×</td>
-
- <td>¥Ö¥é¥¦¥¶¤Ï <code>Accept</code>
- ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ÇÍ¥Àè·¹¸þ¤ò»ØÄꤷ¤Þ¤¹¡£
- ¥¢¥¤¥Æ¥à¤½¤ì¤¾¤ì¤Ï¡¢´ØÏ¢¤·¤¿ÉʼÁ¿ôÃͤò»ý¤Ä¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- variant ¤ÎÀâÌÀ¤âÉʼÁ¿ôÃͤò»ý¤Ä¤³¤È¤¬¤Ç¤­¤Þ¤¹
- ("qs" ¥Ñ¥é¥á¡¼¥¿¤ò¤´Í÷²¼¤µ¤¤)¡£</td>
- </tr>
-
- <tr valign="top">
- <td>¸À¸ì</td>
-
- <td>¥Ö¥é¥¦¥¶¤Ï <code>Accept-Language</code>
- ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ÇÍ¥Àè·¹¸þ¤ò»ØÄꤷ¤Þ¤¹¡£
- Í×ÁǤ½¤ì¤¾¤ì¤ËÉʼÁ¿ôÃͤò»ý¤¿¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- variants ¤Ï 0 ¤« 1 ¤Ä¤«¤½¤ì°Ê¾å¤Î¸À¸ì¤È
- ´ØÏ¢¤Å¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</td>
- </tr>
-
- <tr valign="top">
- <td>¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°</td>
-
- <td>¥Ö¥é¥¦¥¶¤Ï <code>Accept-Encoding</code>
- ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ÇÍ¥Àè·¹¸þ¤ò»ØÄꤷ¤Þ¤¹¡£
- Í×ÁǤ½¤ì¤¾¤ì¤ËÉʼÁ¿ôÃͤò»ý¤¿¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</td>
- </tr>
-
- <tr valign="top">
- <td>ʸ»ú¥»¥Ã¥È</td>
-
- <td>¥Ö¥é¥¦¥¶¤Ï <code>Accept-Charset</code>
- ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ÇÍ¥Àè·¹¸þ¤ò»ØÄꤷ¤Þ¤¹¡£
- Í×ÁǤ½¤ì¤¾¤ì¤ËÉʼÁ¿ôÃͤò»ý¤¿¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- variant ¤Ï¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î¥Ñ¥é¥á¡¼¥¿¤È¤·¤Æʸ»ú¥»¥Ã¥È¤ò
- »ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</td>
- </tr>
- </table>
-
-
-<h3><a name="algorithm" id="algorithm">Apache ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¥¢¥ë¥´¥ê¥º¥à</a></h3>
-
- <p>¥Ö¥é¥¦¥¶¤ËÊÖ¤¹¡ÖºÇŬ¤Ê¡×variant ¤ò (¤â¤·¤¢¤ì¤Ð) ÁªÂò¤¹¤ë¤è¤¦¤Ë
- Apache ¤Ï¼¡¤Î¥¢¥ë¥´¥ê¥º¥à¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤òÀßÄê¤Ë¤è¤êÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- ¼¡¤Î¤è¤¦¤ËÆ°ºî¤·¤Þ¤¹:</p>
-
- <ol>
- <li>¤Þ¤º¤Ï¤¸¤á¤Ë¡¢¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î¼¡¸µ¤½¤ì¤¾¤ì¤Ë¤Ä¤¤¤ÆŬÀÚ¤Ê
- <em>Accept*</em> ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÄ´¤Ù¡¢
- variant ¤½¤ì¤¾¤ì¤ËÉʼÁ¤ò³ä¤êÅö¤Æ¤Þ¤¹¡£
- ¤â¤·¤¢¤ë¼¡¸µ¤Î <em>Accept*</em> ¥Ø¥Ã¥À¤Ç¤½¤Î variant
- ¤¬µöÍƤǤ­¤Ê¤¤¤³¤È¤¬¼¨¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢¤½¤ì¤òºï½ü¤·¤Þ¤¹¡£
- variant ¤¬°ì¤Ä¤â»Ä¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¥¹¥Æ¥Ã¥× 4 ¤Ë¹Ô¤­¤Þ¤¹¡£</li>
-
- <li>
- ¾ÃµîË¡¤Ç¡ÖºÇŬ¤Ê¡× variant ¤òÁª¤Ó¤Þ¤¹¡£
- ¼¡¤Î¥Æ¥¹¥È¤¬½çÈÖ¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- ¥Æ¥¹¥È¤ÇÁªÂò¤µ¤ì¤Ê¤«¤Ã¤¿ variant ¤Ïºï½ü¤µ¤ì¤Æ¤¤¤­¤Þ¤¹¡£
- ¥Æ¥¹¥È¸å variant ¤¬°ì¤Ä¤À¤±»Ä¤Ã¤Æ¤¤¤ì¤Ð¡¢¤½¤ì¤òºÇŬ¤Ê¤â¤Î¤È¤·¤Æ
- ¥¹¥Æ¥Ã¥× 3 ¤Ë¿Ê¤ß¤Þ¤¹¡£
- Ê£¿ô variant ¤¬»Ä¤Ã¤Æ¤¤¤ì¤Ð¡¢¼¡¤Î¥Æ¥¹¥È¤Ë¿Ê¤ß¤Þ¤¹¡£
-
- <ol>
- <li>variant ¤Î¥á¥Ç¥£¥¢¥¿¥¤¥×¤ÎÉʼÁ¿ôÃÍ¤È <code>Accept</code>
- ¥Ø¥Ã¥À¤ÎÉʼÁ¿ôÃͤȤÎÀѤò·×»»¤·¤Æ¡¢ºÇ¹âÃͤΠvariant
- ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li>¸À¸ìÉʼÁ¿ôÃͤ¬ºÇ¹â¤Î variant ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li>(¤â¤·¤¢¤ì¤Ð) <code>Accept-Language</code> ¥Ø¥Ã¥À¤Î¸À¸ì½ç¤«¡¢
- (¤â¤·¤¢¤ì¤Ð)
- <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¸À¸ì½ç¤ÇºÇŬ¤Ê¸À¸ì¤Î variant ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li>ºÇ¹â¡Ö¥ì¥Ù¥ë¡×¤Î¥á¥Ç¥£¥¢¥Ñ¥é¥á¡¼¥¿
- (text/html ¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î¥Ð¡¼¥¸¥ç¥ó¤òÍ¿¤¨¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹)
- ¤ò»ý¤Ä variant ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li><code>Accept-Charset</code> ¥Ø¥Ã¥À¹Ô¤ÇÍ¿¤¨¤é¤ì¤Æ¤¤¤ëºÇ¹â¤Îʸ»ú¥»¥Ã¥È
- ¥á¥Ç¥£¥¢¥Ñ¥é¥á¡¼¥¿¤ò»ý¤Ä variant ¤òÁª¤Ó¤Þ¤¹¡£
- ÌÀ¼¨Åª¤Ë½ü³°¤µ¤ì¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢ISO-8859-1
- ¤¬µöÍƤµ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- <code>text/*</code> ¥á¥Ç¥£¥¢¥¿¥¤¥×¤Ç¤¢¤ë¤±¤ì¤É¤â
- ÆÃÄê¤Îʸ»ú¥»¥Ã¥È¤ËÌÀ¼¨Åª¤Ë´ØÏ¢¤Å¤±¤é¤ì¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤
- variant ¤Ï ISO-8859-1 ¤Ç¤¢¤ë¤È²¾Äꤵ¤ì¤Þ¤¹¡£</li>
-
- <li>ISO-8859-1 <em>¤Ç¤Ï¤Ê¤¤</em>ʸ»ú¥»¥Ã¥È¥á¥Ç¥£¥¢¥Ñ¥é¥á¡¼¥¿¤È
- ´ØÏ¢¤Å¤±¤é¤ì¤Æ¤¤¤ë variant ¤òÁª¤Ó¤Þ¤¹¡£
- ¤½¤Î¤è¤¦¤Ê variant ¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢Âå¤ï¤ê¤ËÁ´¤Æ¤Î
- variant ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li>ºÇŬ¤Ê¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î variant ¤òÁª¤Ó¤Þ¤¹¡£
- ¤â¤· user-agent ¤¬µöÍƤ¹¤ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤¬¤¢¤ì¤Ð¡¢
- ¤½¤Î variant ¤Î¤ß¤òÁª¤Ó¤Þ¤¹¡£
- ¤½¤¦¤Ç¤Ï¤Ê¤¯¡¢¤â¤·¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¤â¤Î¤È¤½¤¦¤Ç¤Ê¤¤
- variant ¤¬º®¤¶¤Ã¤Æ¸ºß¤·¤Æ¤¤¤¿¤é¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤Ê¤¤
- variant ¤Î¤ß¤òÁª¤Ó¤Þ¤¹¡£
- variant ¤¬Á´Éô¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤«
- variant ¤¬Á´Éô¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤¤¤¦¾ì¹ç¤Ï¡¢
- Á´¤Æ¤Î variant ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li>ÆâÍƤκǤâû¤¤ variant ¤òÁª¤Ó¤Þ¤¹¡£</li>
-
- <li>»Ä¤Ã¤Æ¤¤¤ë variant ¤ÎºÇ½é¤Î¤â¤Î¤òÁª¤Ó¤Þ¤¹¡£
- ¥¿¥¤¥×¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Ë¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë¤«¡¢
- variant ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤«¤éºÇ½é¤ËÆɤ߹þ¤Þ¤ì¤ë»þ¤Ë
- ASCII½ç¤Ç¥½¡¼¥È¤·¤Æ¥Õ¥¡¥¤¥ë̾¤¬ÀèƬ¤Ë¤Ê¤Ã¤¿¤«¡¢¤Î¤É¤Á¤é¤«¤Ç¤¹¡£</li>
- </ol>
- </li>
-
- <li>¥¢¥ë¥´¥ê¥º¥à¤ò»È¤Ã¤Æ°ì¤Ä¤Î¡ÖºÇŬ¤Ê¡×variant ¤òÁª¤Ó¤Þ¤·¤¿¤Î¤Ç¡¢
- ¤½¤ì¤ò±þÅú¤È¤·¤ÆÊÖ¤·¤Þ¤¹¡£¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î¼¡¸µ¤ò»ØÄꤹ¤ë¤¿¤á¤Ë
- HTTP ¥ì¥¹¥Ý¥ó¥¹¥Ø¥Ã¥À <code>Vary</code> ¤¬ÀßÄꤵ¤ì¤Þ¤¹
- (¥ê¥½¡¼¥¹¤Î¥­¥ã¥Ã¥·¥å¤ò¤¹¤ë»þ¤Ë¡¢
- ¥Ö¥é¥¦¥¶¤ä¥­¥ã¥Ã¥·¥å¤Ï¤³¤Î¾ðÊó¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹)¡£
- °Ê¾å¤Ç½ª¤ï¤ê¡£</li>
-
- <li>¤³¤³¤ËÍ褿¤È¤¤¤¦¤³¤È¤Ï¡¢variant ¤¬°ì¤Ä¤âÁªÂò¤µ¤ì¤Ê¤«¤Ã¤¿
- (¥Ö¥é¥¦¥¶¤¬µöÍƤ¹¤ë¤â¤Î¤¬¤Ê¤«¤Ã¤¿¤¿¤á) ¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
- 406 ¥¹¥Æ¡¼¥¿¥¹ ("No Acceptable representation" ¤ò°ÕÌ£¤¹¤ë)
- ¤¬¡¢ÍøÍѲÄǽ¤Ê variant ¤Î¥ê¥¹¥È¤Î¤Ä¤¤¤¿ HTML
- ¥É¥­¥å¥á¥ó¥È¤È¤È¤â¤ËÊÖ¤µ¤ì¤Þ¤¹¡£
- Áê°ã¤Î¼¡¸µ¤ò¼¨¤¹ HTTP <code>Vary</code> ¥Ø¥Ã¥À¤âÀßÄꤵ¤ì¤Þ¤¹¡£</li>
- </ol>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="better" id="better">ÉʼÁ¤ÎÃͤòÊѤ¨¤ë</a></h2>
-
- <p>¾åµ­¤Î Apache ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¥¢¥ë¥´¥ê¥º¥à¤Î¸·³Ê¤Ê²ò¼á¤Ç
- ÆÀ¤é¤ì¤ë¤Ç¤¢¤í¤¦Ãͤ«¤é¡¢Apache ¤ÏÉʼÁ¿ôÃͤò»þ¡¹ÊѤ¨¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤Ç´°Á´¤Ç¤Ï¤Ê¤¤¡¢¤¢¤ë¤¤¤ÏÀµ³Î¤Ç¤Ê¤¤¾ðÊó¤òÁ÷¤ë
- ¥Ö¥é¥¦¥¶¸þ¤±¤Ë¤è¤ê¤è¤¤·ë²Ì¤òÆÀ¤ë¤¿¤á¤Ë¹Ô¤ï¤ì¤Þ¤¹¡£
- ¤«¤Ê¤ê¥Ý¥Ô¥å¥é¡¼¤Ê¥Ö¥é¥¦¥¶¤Ç¡¢¤â¤·¤Ê¤¤¤È´Ö°ã¤Ã¤¿ variant
- ¤òÁªÂò¤¹¤ë·ë²Ì¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤è¤¦¤Ê <code>Accept</code>
- ¥Ø¥Ã¥À¾ðÊó¤òÁ÷¤ë¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£
- ¥Ö¥é¥¦¥¶¤¬´°Á´¤ÇÀµ¤·¤¤¾ðÊó¤òÁ÷¤Ã¤Æ¤¤¤ì¤Ð¡¢
- ¤³¤Î¿ôÃÍÊѲ½¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£</p>
-
-<h3><a name="wildcards" id="wildcards">¥á¥Ç¥£¥¢¥¿¥¤¥×¤È¥ï¥¤¥ë¥É¥«¡¼¥É</a></h3>
-
- <p><code>Accept:</code> ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ï¥á¥Ç¥£¥¢¥¿¥¤¥×¤ÎÍ¥Àè·¹¸þ¤ò»ØÄꤷ¤Þ¤¹¡£
- ¤³¤ì¤Ï¤Þ¤¿¡¢"image/*" ¤ä "*/*"
- ¤È¤¤¤Ã¤¿¡Ö¥ï¥¤¥ë¥É¥«¡¼¥É¡×¥á¥Ç¥£¥¢¥¿¥¤¥×¤ò´Þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤³¤Ç * ¤ÏǤ°Õ¤Îʸ»úÎó¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¼¡¤Î:</p>
-
-<div class="example"><p><code>Accept: image/*, */*</code></p></div>
-
- <p>¤ò´Þ¤à¥ê¥¯¥¨¥¹¥È¤Ï¡¢"image/" ¤Ç¤Ï¤¸¤Þ¤ë¥¿¥¤¥×Á´¤Æ¤¬µöÍƤǤ­¤ë¡¢
- ¤½¤·¤Æ¾¤Î¤É¤ó¤Ê¥¿¥¤¥×¤âµöÍƤǤ­¤ë
- (¤³¤Î¾ì¹ç¤Ï¤¸¤á¤Î "image/*" ¤Ï¾éĹ¤Ë¤Ê¤ê¤Þ¤¹)
- ¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- °·¤¦¤³¤È¤Î¤Ç¤­¤ëÌÀ¼¨Åª¤Ê¥¿¥¤¥×¤Ë²Ã¤¨¤Æ¡¢µ¡³£Åª¤Ë
- ¥ï¥¤¥ë¥É¥«¡¼¥É¤òÁ÷¤ë¥Ö¥é¥¦¥¶¤â¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð:</p>
-
-<div class="example"><p><code>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</code></p></div>
- <p>¤³¤¦¤¹¤ë¤³¤È¤ÎÁÀ¤¤¤Ï¡¢ÌÀ¼¨Åª¤Ë¥ê¥¹¥È¤·¤Æ¤¤¤ë¥¿¥¤¥×¤¬Í¥À褵¤ì¤ë¤±¤ì¤É¤â¡¢
- °Û¤Ê¤ëɽ¸½¤¬ÍøÍѲÄǽ¤Ç¤¢¤ì¤Ð¤½¤ì¤Ç¤âÎɤ¤¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢¾å¤Î´ðËÜŪ¤Ê¥¢¥ë¥´¥ê¥º¥à¤Ç¤Ï¡¢
- */* ¥ï¥¤¥ë¥É¥«¡¼¥É¤Ï¾¤ÎÁ´¤Æ¤Î¥¿¥¤¥×¤ÈÁ´¤¯Æ±Åù¤Ê¤Î¤ÇÍ¥À褵¤ì¤Þ¤»¤ó¡£
- ¥Ö¥é¥¦¥¶¤Ï */* ¤Ë¤â¤Ã¤ÈÄ㤤ÉʼÁ (Í¥Àè)
- ÃͤòÉÕ¤±¤Æ¥ê¥¯¥¨¥¹¥È¤òÁ÷¤ë¤Ù¤­¤Ê¤Î¤Ç¤¹¡£Î㤨¤Ð:</p>
-<div class="example"><p><code>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</code></p></div>
- <p>ÌÀ¼¨Åª¤Ê¥¿¥¤¥×¤Ë¤ÏÉʼÁ¿ôÃͤ¬ÉÕ¤±¤é¤ì¤Æ¤¤¤Þ¤»¤ó¤Î¤Ç¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Î 1.0 (ºÇ¹âÃÍ) ¤ÎÍ¥Àè¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥ï¥¤¥ë¥É¥«¡¼¥É */* ¤ÏÄ㤤ͥÀèÅÙ 0.01 ¤òÍ¿¤¨¤é¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢
- ÌÀ¼¨Åª¤Ë¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë¥¿¥¤¥×¤Ë¹çÃפ¹¤ë variant ¤¬¤Ê¤¤¾ì¹ç¤Ë¤Î¤ß¡¢
- ¾¤Î¥¿¥¤¥×¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤â¤· <code>Accept:</code> ¥Ø¥Ã¥À¤¬ q ÃͤòÁ´¤¯´Þ¤ó¤Ç<em>¤¤¤Ê¤±¤ì¤Ð</em>¡¢
- ˾¤ß¤ÎµóÆ°¤ò¤¹¤ë¤¿¤á¤Ë¡¢
- Apache ¤Ï "*/*" ¤¬¤¢¤ì¤Ð 0.01 ¤Î q ÃͤòÀßÄꤷ¤Þ¤¹¡£
- ¤Þ¤¿¡¢"type/*" ¤Î·Á¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¤Ë¤Ï 0.02 ¤Î q ÃͤòÀßÄꤷ¤Þ¤¹
- (¤Ç¤¹¤«¤é¤³¤ì¤é¤Ï "*/*" ¤Î¥Þ¥Ã¥Á¤è¤ê¤âÍ¥À褵¤ì¤Þ¤¹)¡£
- ¤â¤· <code>Accept:</code> ¥Ø¥Ã¥ÀÃæ¤Î¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î¤É¤ì¤«¤¬ q
- Ãͤò´Þ¤ó¤Ç¤¤¤ì¤Ð¡¢¤³¤ì¤é¤ÎÆüì¤ÊÃͤÏŬ±þ<em>¤µ¤ì¤º</em>¡¢
- Àµ¤·¤¤¾ðÊó¤òÁ÷¤ë¥Ö¥é¥¦¥¶¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Ï´üÂÔÄ̤ê¤Ë
- Æ°ºî¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-
-<h3><a name="exceptions" id="exceptions">¸À¸ì¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ÎÎã³°½èÍý</a></h3>
-
- <p>Apache 2.0 ¤Ç¤Ï¿·¤¿¤Ë¡¢¸À¸ì¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤¬Å¬¹ç¤¹¤ë¤â¤Î¤ò
- ¸«¤Ä¤±¤ë¤Î¤Ë¼ºÇÔ¤·¤¿»þ¤Ë¡¢Í¥²í¤Ë¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¤Ç¤­¤ë¤è¤¦¤Ê
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¥¢¥ë¥´¥ê¥º¥à¤¬´ö¤Ä¤«Äɲ䵤ì¤Þ¤·¤¿¡£</p>
-
- <p>¥µ¡¼¥Ð¤Î¥Ú¡¼¥¸¤ò¥¯¥é¥¤¥¢¥ó¥È¤¬¥ê¥¯¥¨¥¹¥È¤·¤¿¤±¤ì¤É¤â¡¢
- ¥Ö¥é¥¦¥¶¤ÎÁ÷¤Ã¤Æ¤­¤¿ <code>Accept-Language</code> ¤Ë¹çÃפ¹¤ë¥Ú¡¼¥¸¤¬°ì¤Ä¤â
- ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¡¢¥µ¡¼¥Ð¤Ï "No Acceptable Variant"
- ¤« "Multiple Choices" ¥ì¥¹¥Ý¥ó¥¹¤ò¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤·¤Þ¤¹¡£
- ¤³¤ì¤é¤Î¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òÊÖ¤µ¤Ê¤¤¤è¤¦¤Ë¡¢
- ¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï Apache ¤¬ <code>Accept-Language</code> ¤ò̵»ë¤·¤Æ¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ËÌÀ¼¨Åª¤Ë¤Ï¹çÃפ·¤Ê¤¤¥É¥­¥å¥á¥ó¥È¤ò
- Ä󶡤¹¤ë¤è¤¦¤ËÀßÄê¤Ç¤­¤Þ¤¹¡£
- <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¤³¤ì¤é¤Î¥¨¥é¡¼¤Î°ì¤Ä¤«Î¾Êý¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë¤¿¤á¤Ë
- »ÈÍѤǤ­¤Æ¡¢
- <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÆâÍƤò»È¤Ã¤Æ¥µ¡¼¥Ð¤ÎȽÃǤòÂå¹Ô¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¤Ï¾¤ËŬ¹ç¤¹¤ë¤â¤Î¤¬¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð¡¢
- ¸À¸ì¥µ¥Ö¥»¥Ã¥È¤ÇŬ¹ç¤¹¤ë¤â¤Î¤ò»î¤½¤¦¤È¤â¤·¤Þ¤¹¡£
- Î㤨¤Ð¥¯¥é¥¤¥¢¥ó¥È¤¬±Ñ¹ñ±Ñ¸ì¤Ç¤¢¤ë <code>en-GB</code> ¸À¸ì¤Ç
- ¥É¥­¥å¥á¥ó¥È¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¾ì¹ç¡¢¥µ¡¼¥Ð¤Ï HTTP/1.1
- µ¬³Ê¤Ç¤Ï¡¢Ã±¤Ë <code>en</code> ¤È¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¥É¥­¥å¥á¥ó¥È¤ò
- ¥Þ¥Ã¥Á¤¹¤ë¤â¤Î¤È¤¹¤ë¤³¤È¤ÏÄ̾ï¤Ïµö¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
- (±Ñ¹ñ±Ñ¸ì¤ÏÍý²ò¤Ç¤­¤ë¤±¤É°ìÈÌŪ¤Ê±Ñ¸ì¤ÏÍý²ò¤Ç¤­¤Ê¤¤¤È¤¤¤¦Æɤ߼ê¤Ï
- ¹Í¤¨¤é¤ì¤Ê¤¤¤Î¤Ç¡¢Accept-Language ¥Ø¥Ã¥À¤Ç <code>en-GB</code>
- ¤ò´Þ¤ó¤Ç <code>en</code> ¤ò´Þ¤Þ¤Ê¤¤¤Î¤Ï¤Û¤Ü³Î¼Â¤ËÀßÄê¤Î´Ö°ã¤¤¤Ç¤¢¤ë¡¢
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤Ç¤¹¤¬ÉÔ¹¬¤Ê¤³¤È¤Ë¡¢Â¿¤¯¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ç¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç
- ¤³¤Î¤è¤¦¤ÊÀßÄê¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£)
- ¤·¤«¤·¤Ê¤¬¤é¡¢Â¾¤Î¸À¸ì¤Ë¤Ï¥Þ¥Ã¥Á¤»¤º¡¢"No Acceptable Variants"
- ¥¨¥é¡¼¤òÊÖ¤·¤¿¤ê¡¢
- <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
- ¤Ë¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤È¤­¤Ï¡¢
- ¥µ¥Ö¥»¥Ã¥È»ØÄê¤ò̵»ë¤·¤Æ¡¢<code>en-GB</code> ¤ò <code>en</code>
- ¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- Apache ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ÎµöÍƸÀ¸ì¥ê¥¹¥È¤Ë°ÅÌÛ¤Ë
- Èó¾ï¤ËÄ㤤ÉʼÁÃͤοƸÀ¸ì¤ò²Ã¤¨¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤·¤«¤·¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬ "en-GB; q=0.9, fr; q=0.8" ¤È¥ê¥¯¥¨¥¹¥È¤·¤Æ¡¢
- ¥µ¡¼¥Ð¤¬ "en" ¤È "fr" ¤ÈÀ߷פµ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤ò»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- "fr" ¥É¥­¥å¥á¥ó¥È¤¬ÊÖ¤µ¤ì¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤Î¤è¤¦¤Ê½èÍý¤Ï¡¢HTTP 1.1 µ¬³Ê¤È¤ÎÀ°¹çÀ­¤ò°Ý»ý¤·¤Æ¡¢
- ŬÀÚ¤ËÀßÄꤵ¤ì¤¿¥¯¥é¥¤¥¢¥ó¥È¤È¤â¤­¤Á¤ó¤ÈÆ°ºî¤¹¤ë¤¿¤á¤Ë
- ɬÍפǤ¹¡£</p>
-
- <p>¤è¤ê¹âÅ٤ʥƥ¯¥Ë¥Ã¥¯ (Cookie ¤äÆüì¤Ê URL ¥Ñ¥¹Åù)
- ¤Ë¤ª¤¤¤Æ¤â¥æ¡¼¥¶¤Î¸À¸ìÁªÂò¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤¿¤á¡¢
- Apache 2.0.47 ¤«¤é¤Ï¡¢<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
- ¤¬<a href="env.html">´Ä¶­ÊÑ¿ô</a> <code>prefer-language</code>
- ¤òǧ¼±¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¤³¤ÎÊÑ¿ô¤¬Â¸ºß¤·¤Æ¡¢Å¬ÀڤʸÀ¸ì¥¿¥°¤¬ÂåÆþ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> ¤Ï¹çÃפ¹¤ë variant
- ¤òÁªÂò¤·¤è¤¦¤È¤·¤Þ¤¹¡£¹çÃפ¹¤ë¤â¤Î¤¬Ìµ¤±¤ì¤Ð¡¢
- Ä̾ï¤Î¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¼ê½ç¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extensions" id="extensions">Transparent Content Negotiation
-¤Î³ÈÄ¥</a></h2>
-
-<p>Apache ¤Ï transparent content negotiation ¥×¥í¥È¥³¥ë
-(RFC 2295) ¤ò¼¡¤Î¤è¤¦¤Ë³ÈÄ¥¤·¤Æ¤¤¤Þ¤¹¡£
-ÆÃÄê¤Î¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¤ß¤¬ÍøÍѲÄǽ¤Ç¤¢¤ë variant
-¤Ë°õ¤òÉÕ¤±¤ë¤¿¤á¤Ë¡¢¿·¤¿¤Ë <code>{encoding ..}</code>
-Í×ÁǤò variant ¥ê¥¹¥ÈÃæ¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¡£
-¥ê¥¹¥ÈÃæ¤Î¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿ variant ¤òǧ¼±¤·¡¢
-<code>Accept-Encoding</code> ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ë½¾¤Ã¤ÆµöÍƤµ¤ì¤ë
-¥¨¥ó¥³¡¼¥É¤ò¤â¤Ã¤¿ variant ¤Ï¡¢¤É¤ì¤Ç¤â¸õÊä variant
-¤È¤·¤Æ»ÈÍѤ¹¤ë¤è¤¦¤Ë¡¢
-RVSA/1.0 ¥¢¥ë¥´¥ê¥º¥à (RFC 2296) ¤Î¼ÂÁõ¤¬³ÈÄ¥¤µ¤ì¤Þ¤·¤¿¡£
-RVSA/1.0 ¤Î¼ÂÁõ¤Ç¤Ï¡¢ºÇŬ¤Ê variant ¤¬¸«¤Ä¤«¤ë¤Þ¤Ç¡¢
-·×»»¤·¤¿ÉʼÁ¿ôÃͤϾ®¿ôÅÀ°Ê²¼ 5 ·å¤Þ¤Ç´Ý¤á¤Þ¤»¤ó¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="naming" id="naming">¥ê¥ó¥¯¤È̾Á°¤ÎÊÑ´¹¤Ë´Ø¤¹¤ëÃí°ÕÅÀ</a></h2>
-
- <p>¸À¸ì¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥Õ¥¡¥¤¥ë¤¬°ì¤Ä°Ê¾å¤Î³ÈÄ¥»Ò¤ò»ý¤Æ¤Æ¡¢
- ³ÈÄ¥»Ò¤Î½çÈÖ¤ÏÄ̾ï¤Ï¹Í褵¤ì¤Ê¤¤
- (¾ÜºÙ¤Ï <a href="mod/mod_mime.html#multipleext">mod_mime</a>
- ¤ò»²¾È) ¤Î¤Ç¡¢
- ´ö¤Ä¤«¤Î°Û¤Ê¤ë̾Á°¤ÎÊÑ´¹¤òÁª¤Ù¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>ŵ·¿Åª¤Ê¥Õ¥¡¥¤¥ë¤Ç¤Ï¡¢MIME ¥¿¥¤¥×³ÈÄ¥»Ò (<em>Î㤨¤Ð</em>
- <code>html</code>) ¤ò»ý¤Ã¤Æ¤¤¤Æ¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°³ÈÄ¥»Ò
- (<em>Î㤨¤Ð</em> <code>gz</code>) ¤ò»ý¤Ã¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¯¤Æ¡¢
- ¤³¤Î¥Õ¥¡¥¤¥ë¤Ë°Û¤Ê¤ë¸À¸ì variant ¤òÍÑ°Õ¤·¤Æ¤¤¤ì¤Ð¡¢
- ¤â¤Á¤í¤ó¸À¸ì³ÈÄ¥»Ò (<em>Î㤨¤Ð</em> <code>en</code>)
- ¤ò»ý¤Ã¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>Îã:</p>
-
- <ul>
- <li>foo.en.html</li>
-
- <li>foo.html.en</li>
-
- <li>foo.en.html.gz</li>
- </ul>
-
- <p>¥Õ¥¡¥¤¥ë̾¤È¡¢¤½¤ì¤ËÂФ·¤Æ»È¤¨¤ë¥ê¥ó¥¯¤È»È¤¨¤Ê¤¤¥ê¥ó¥¯¤ÎÎã¤Ç¤¹:</p>
-
- <table class="bordered">
-
- <tr>
- <th>¥Õ¥¡¥¤¥ë̾</th>
-
- <th>»È¤¨¤ë¥ê¥ó¥¯</th>
-
- <th>»È¤¨¤Ê¤¤¥ê¥ó¥¯</th>
- </tr>
-
- <tr>
- <td><em>foo.html.en</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html</em></td>
-
- <td>foo</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.en.gz</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>foo.gz<br />
- foo.html.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html.gz</em></td>
-
- <td>foo</td>
-
- <td>foo.html<br />
- foo.html.gz<br />
- foo.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.gz.html.en</em></td>
-
- <td>foo<br />
- foo.gz<br />
- foo.gz.html</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.gz.en</em></td>
-
- <td>foo<br />
- foo.html<br />
- foo.html.gz</td>
-
- <td>foo.gz</td>
- </tr>
- </table>
-
- <p>¾å¤Îɽ¤ò¸«¤Æ¡¢³ÈÄ¥»Ò¤Ê¤·¤Î¥ê¥ó¥¯ (<em>Î㤨¤Ð</em> <code>foo</code>)
- ¤¬¤¤¤Ä¤Ç¤â»È¤¨¤ë¤³¤È¤Ëµ¤¤¬ÉÕ¤¯¤Ç¤·¤ç¤¦¡£
- ¤³¤ÎÍøÅÀ¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ±þÅú¤¹¤ë¥Õ¥¡¥¤¥ë¤Î
- ¼ÂºÝ¤Î¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤ò±£Ê䷤ơ¢¥ê¥ó¥¯¤Î»²¾È¤òÊѹ¹¤¹¤ë¤³¤È¤Ê¤¯
- ¸å¤«¤é¥Õ¥¡¥¤¥ë¤òÊѹ¹¤Ç¤­¤ë¡¢
- <em>Î㤨¤Ð</em> <code>html</code> ¤«¤é <code>shtml</code>
- ¤Ë¡¢¤¢¤ë¤¤¤Ï <code>cgi</code> ¤ËÊѹ¹¤Ç¤­¤ëÅÀ¤Ç¤¹¡£</p>
-
- <p>¥ê¥ó¥¯¤Ë MIME ¥¿¥¤¥×¤ò»È¤¤Â³¤±¤¿¤¤ (<em>Î㤨¤Ð</em>
- <code>foo.html</code>)»þ¤Ï¡¢¸À¸ì³ÈÄ¥»Ò¤Ï
- (¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°³ÈÄ¥»Ò¤â¤¢¤ì¤Ð¤½¤ì¤â´Þ¤á¤Æ)
- MIME ¥¿¥¤¥×³ÈÄ¥»Ò¤Î±¦Â¦¤Ë¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó
- (<em>Î㤨¤Ð</em> <code>foo.html.en</code>)¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="caching" id="caching">¥­¥ã¥Ã¥·¥å¤Ë´Ø¤¹¤ëÃí°Õ»ö¹à</a></h2>
-
- <p>¥­¥ã¥Ã¥·¥å¤¬°ì¤Ä¤Îɽ¸½¤òÊݸ¤·¤Æ¤¤¤ë¤È¤­¤Ï¡¢
- ¥ê¥¯¥¨¥¹¥È URL ¤È´ØÏ¢¤Å¤±¤é¤ì¤Æ¤¤¤Þ¤¹¡£
- ¼¡¤Ë¤½¤Î URL ¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿»þ¤Ë¡¢¥­¥ã¥Ã¥·¥å¤Ï
- Êݸ¤µ¤ì¤Æ¤¤¤ëɽ¸½¤ò»ÈÍѤǤ­¤Þ¤¹¡£¤·¤«¤·¡¢
- ¥ê¥½¡¼¥¹¤¬¥µ¡¼¥Ð¤Ç¥Í¥´¥·¥¨¡¼¥·¥ç¥ó²Äǽ¤Ç¤¢¤ì¤Ð¡¢
- ºÇ½é¤Î¥ê¥¯¥¨¥¹¥È¤Ç¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ³¤¯¥­¥ã¥Ã¥·¥å¥Ò¥Ã¥È¤Ç¤Ï
- ´Ö°ã¤Ã¤¿±þÅú¤òÊÖ¤·¤Æ¤·¤Þ¤¦¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤«¤Í¤Þ¤»¤ó¡£
- ¤³¤ì¤òËɤ°¤¿¤á¤Ë¡¢Apache ¤Ï¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î
- ¸å¤ËÊÖ¤µ¤ì¤¿±þÅúÁ´¤Æ¤Ë¡¢HTTP/1.0 ¥¯¥é¥¤¥¢¥ó¥È¤Ç¤Ï
- ¥­¥ã¥Ã¥·¥åÉÔ²Äǽ¤Î°õ¤ò¤Ä¤±¤Þ¤¹¡£
- ¤Þ¤¿¡¢¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤µ¤ì¤¿±þÅú¤Î¥­¥ã¥Ã¥·¥å¤ò²Äǽ¤Ë¤¹¤ë
- HTTP/1.1 ¥×¥í¥È¥³¥ë¤Îµ¡Ç½¤â Apache ¤Ï¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£</p>
-
- <p>HTTP/1.0 ½àµò¤Î¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¤Ï¡¢
- (¥Ö¥é¥¦¥¶¤Ç¤¢¤í¤¦¤È¥­¥ã¥Ã¥·¥å¤Ç¤¢¤í¤¦¤È)
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ò¼õ¤±¤¿±þÅú¤Î¥­¥ã¥Ã¥·¥å¤òµö¤¹¤¿¤á¤Ë¡¢
- <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤǤ­¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤ä¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¡¢
- °ú¿ô¤ò¤È¤ê¤Þ¤»¤ó¡£
- HTTP/1.1 ¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤Ï¸úÎϤò»ý¤Á¤Þ¤»¤ó¡£</p>
-
- <p>HTTP/1.1 ¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¤Ï¡¢¥ì¥¹¥Ý¥ó¥¹¤Î¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¼¡¸µ
- ¤ò¼¨¤¹¤¿¤á¤Ë <code>Vary</code> HTTP ¥ì¥¹¥Ý¥ó¥¹¥Ø¥Ã¥À¤òÁ÷¤ê¤Þ¤¹¡£
- ¥­¥ã¥Ã¥·¥å¤Ï¡¢¤³¤ì¤ò»È¤Ã¤Æ¸å³¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¥í¡¼¥«¥ë¥³¥Ô¡¼¤Ç±þÅú¤Ç¤­¤ë¤«
- ¤É¤¦¤«¤ò·èÄê¤Ç¤­¤Þ¤¹¡£
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¼¡¸µ¤È¤Ï´Ø·¸¤Ê¤·¤Ë¥í¡¼¥«¥ë¥³¥Ô¡¼¤Î»ÈÍѤòÍ¥À褹¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
- <code>force-no-vary</code> <a href="env.html#special">´Ä¶­ÊÑ¿ô</a>¤ò
- ÀßÄꤷ¤Þ¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="more" id="more">ÄɲþðÊó</a></h2>
-
- <p>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ë´Ø¤¹¤ëÄɲþðÊó¤Ï¡¢
- Alan J. Flavell ¤µ¤ó¤Î<a href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
- Negotiation Notes</a> ¤ò¤´Í÷²¼¤µ¤¤¡£¤Ç¤¹¤¬¡¢
- Apache 2.0 ¤Ç¤ÎÊѹ¹ÅÀ¤ò´Þ¤à¤¿¤á¤Ë¤Ï¹¹¿·¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/content-negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/content-negotiation.html.ko.euc-kr b/docs/manual/content-negotiation.html.ko.euc-kr
deleted file mode 100644
index ba84f26faf..0000000000
--- a/docs/manual/content-negotiation.html.ko.euc-kr
+++ /dev/null
@@ -1,608 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>³»¿ëÇù»ó (Content Negotiation) - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>³»¿ëÇù»ó (Content Negotiation)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/content-negotiation.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>¾ÆÆÄÄ¡´Â HTTP/1.1 ±Ô¾à¿¡ ±â¼úµÈ ³»¿ëÇù»ó(content
- negotiation)À» Áö¿øÇÑ´Ù. ³»¿ëÇù»óÀº media type, ¾ð¾î, ¹®ÀÚÁýÇÕ,
- ÀÎÄÚµù µî¿¡ ´ëÇØ ºê¶ó¿ìÀú°¡ Á¦°øÇÑ ¼±È£µµ¿¡ µû¶ó ÀÚ¿øÀÇ
- °¡Àå ÀûÇÕÇÑ Ç¥ÇöÀ» ¼±ÅÃÇÑ´Ù. ¶Ç ºÒ¿ÏÀüÇÑ Çù»ó Á¤º¸¸¦ º¸³»´Â
- ºê¶ó¿ìÀúÀÇ ¿äûÀ» Áö´ÉÀûÀ¸·Î ó¸®ÇÏ´Â ±â´Éµµ ÀÖ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î ÄÄÆÄÀϵǴ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
- ¸ðµâÀÌ ³»¿ëÇù»ó ±â´ÉÀ» Á¦°øÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">³»¿ëÇù»ó¿¡ ´ëÇØ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">¾ÆÆÄÄ¡ÀÇ Çù»ó</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#methods">Çù»ó¹æ¹ý</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#better">Ç°Áú°è¼ö Á¶ÀÛÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extensions">ÀÚ¿¬½º·¯¿î(transparent) ³»¿ëÇù»óÀÇ È®Àå</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#naming">ÇÏÀÌÆÛ¸µÅ©¿Í À̸§±ÔÄ¢¿¡ ´ëÇÏ¿©</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#caching">ij½¬¿¡ ´ëÇÏ¿©</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#more">´Ù¸¥ Á¤º¸</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="about" id="about">³»¿ëÇù»ó¿¡ ´ëÇØ</a></h2>
-
- <p>ÀÚ¿øÀº ¿©·¯ ´Ù¸¥ Ç¥ÇöÀ» °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´Ù¸¥
- ¾ð¾î³ª ´Ù¸¥ media type ȤÀº µÑ ¸ðµÎ°¡ ´Ù¸¥ Ç¥ÇöµéÀÌ ÀÖÀ»
- ¼ö ÀÖ´Ù. °¡Àå Àû´çÇÑ Ç¥ÇöÀ» ¼±ÅÃÇÏ´Â ÇÑ°¡Áö ¹æ¹ýÀº »ç¿ëÀÚ¿¡°Ô
- ¸ñ·Ï ÆäÀÌÁö¸¦ º¸¿©ÁÖ°í ¼±ÅÃÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª ¼­¹ö°¡
- ÀÚµ¿À¸·Î ¼±ÅÃÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ´Â ºê¶ó¿ìÀú°¡ ¿äûÀÇ
- ÀϺηΠ±×µéÀÌ ¼±È£Çϴ ǥÇö¿¡ ´ëÇÑ Á¤º¸¸¦ º¸³»±â¶§¹®¿¡
- °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î, ºê¶ó¿ìÀú´Â °¡´ÉÇÑÇÑ ºÒ¾î·Î, ±×·¯³ª
- ¾ø´Ù¸é ¿µ¾î·Î Á¤º¸¸¦ º¸°í½Í´Ù°í ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ºê¶ó¿ìÀú´Â
- ¿äûÀÇ Çì´õ·Î ±×µéÀÇ ±âÈ£¸¦ ³ªÅ¸³½´Ù. ¿ÀÁ÷ ºÒ¾î·ÎµÈ Ç¥Çö¸¸À»
- ¿äûÇÑ´Ù¸é ºê¶ó¿ìÀú´Â ´ÙÀ½°ú °°ÀÌ º¸³½´Ù.</p>
-
-<div class="example"><p><code>Accept-Language: fr</code></p></div>
-
- <p>ÀÌ·± ±âÈ£´Â Ç¥ÇöÀÌ ¾ð¾îº°·Î ´Ù¸¦ °æ¿ì¿¡¸¸ °í·ÁµÈ´Ù.</p>
-
- <p>´ÙÀ½Àº ´õ º¹ÀâÇÑ ¿äûÀÇ ¿¹·Î ºê¶ó¿ìÀú°¡ ºÒ¾î¿Í ¿µ¾î¸¦
- ¹ÞÀ» ¼ö ÀÖÁö¸¸, ºÒ¾î¸¦ ´õ ¼±È£ÇÏ°í, ¿©·¯ media typeÀ» ¹ÞÀ»
- ¼ö ÀÖÁö¸¸, ÀÏ¹Ý ÅؽºÆ® º¸´Ù´Â HTML, ´Ù¸¥ media type º¸´Ù´Â
- GIF¿Í JPEGÀ» ¼±È£ÇÑ´Ù°í ¾Ë·ÁÁØ´Ù.</p>
-
-<div class="example"><p><code>
- Accept-Language: fr; q=1.0, en; q=0.5<br />
- Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</code></p></div>
-
- <p>¾ÆÆÄÄ¡´Â HTTP/1.1 ±Ô¾à¿¡ Á¤ÀÇµÈ '¼­¹ö ÁÖµµ(server driven)'
- ³»¿ëÇù»óÀ» Áö¿øÇÑ´Ù. ¾ÆÆÄÄ¡´Â <code>Accept</code>,
- <code>Accept-Language</code>, <code>Accept-Charset</code>,
- <code>Accept-Encoding</code> ¿äû Çì´õ¸¦ ¸ðµÎ Áö¿øÇÑ´Ù.
- ¶Ç, ¾ÆÆÄÄ¡´Â RFC 2295¿Í RFC 2296¿¡ Á¤ÀÇµÈ ½ÇÇèÀûÀÎ ³»¿ëÇù»óÀÎ
- 'ÀÚ¿¬½º·¯¿î(transparent)' ¿äû Çì´õµµ Áö¿øÇÑ´Ù. ±×·¯³ª ÀÌ
- RFC¿¡ Á¤ÀÇµÈ '±â´É Çù»ó(feature negotiation)'Àº Áö¿øÇÏÁö
- ¾Ê´Â´Ù.</p>
-
- <p><strong>ÀÚ¿ø(resource)</strong>Àº (RFC 2396) URI·Î ±¸º°ÇÏ´Â
- °³³äÀûÀÎ Á¸Àç´Ù. ¾ÆÆÄÄ¡¿Í °°Àº À¥¼­¹ö´Â ÀÚ¿øÀÇ
- <strong>Ç¥Çö(representations)</strong>À» Á¦°øÇÑ´Ù. Ç¥ÇöÀº
- ÁöÁ¤µÈ media type, ¹®ÀÚÁýÇÕ, ÀÎÄÚµù µîÀ» °¡Áø ¹ÙÀÌÆ®µé·Î
- µÇÀÖ´Ù. ÀÚ¿øÀº ¿©·¯ Ç¥Çö°ú (¶§·Î´Â ¾øÀ» ¼öµµ ÀÖ´Ù) ¿¬°üµÈ´Ù.
- ÀÚ¿ø¿¡ ¿©·¯ Ç¥ÇöÀÌ ÀÖ´Ù¸é ÀÚ¿øÀ»
- <strong>Çù»ó°¡´ÉÇÏ´Ù°í(negotiable)</strong> ºÎ¸£¸ç, À̶§
- °¢ Ç¥ÇöÀ» <strong>º¯Çü(variant)</strong>À̶ó°í ÇÑ´Ù.
- Çù»ó°¡´ÉÇÑ ÀÚ¿øÀÇ º¯Çü Á¾·ù¸¦ Çù»óÀÇ
- <strong>¹üÀ§(dimension)</strong>¶ó°í ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="negotiation" id="negotiation">¾ÆÆÄÄ¡ÀÇ Çù»ó</a></h2>
-
- <p>ÀÚ¿øÀ» Çù»óÇϱâÀ§ÇØ ¼­¹ö´Â °¢ º¯Çü¿¡ ´ëÇÑ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù.
- ´ÙÀ½ µÎ°¡Áö ¹æ¹ýÁß Çϳª·Î Á¤º¸¸¦ ¾ò´Â´Ù:</p>
-
- <ul>
- <li>º¯ÇüÀ» ´ãÀº ÆÄÀϵéÀ» Á÷Á¢ ¿­°ÅÇÑ type mapÀ» (<em>¿¹¸¦
- µé¾î</em>, <code>*.var</code> ÆÄÀÏ) »ç¿ëÇϰųª,</li>
-
- <li>Á÷Á¢ ÁöÁ¤ÇÏÁö¾Ê¾Æµµ ¼­¹ö°¡ ÆÄÀÏ¸í¿¡¼­ ±ÔÄ¢À» ã¾Æ¼­
- °á°ú¸¦ ¼±ÅÃÇÏ´Â 'MultiViews'¸¦ »ç¿ëÇÑ´Ù.</li>
- </ul>
-
- <h3><a name="type-map" id="type-map">type-map ÆÄÀÏ »ç¿ëÇϱâ</a></h3>
-
- <p>type mapÀº <code>type-map</code>À̶õ Çڵ鷯¿Í ¿¬°áµÈ
- (ȤÀº ÀÌÀü ¾ÆÆÄÄ¡ ¼³Á¤°ú ȣȯÀ» À§ÇØ MIME typeÀÌ
- <code>application/x-type-map</code>ÀÎ) ¹®¼­´Ù. ÀÌ ±â´ÉÀ»
- »ç¿ëÇÏ·Á¸é ¼³Á¤¿¡¼­ <code>type-map</code> Çڵ鷯¿¡ ´ëÇÑ
- ÆÄÀÏ È®ÀåÀÚ¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ
- ¼³Á¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.</p>
-
-<div class="example"><p><code>AddHandler type-map .var</code></p></div>
-
- <p>Type map ÆÄÀÏÀº ÇØ´çÇÏ´Â ÀÚ¿ø°ú À̸§ÀÌ °°¾Æ¾ß ÇÏ°í,
- °¢ º¯Çü¿¡ ´ëÇÑ Ç׸ñÀÌ ÀÖ¾î¾ß ÇÑ´Ù. Ç׸ñÀº ¿©·¯ HTTPÇü½Ä
- Çì´õ ÁÙ·Î ±¸¼ºµÈ´Ù. º¯Çü¿¡ ´ëÇÑ °¢°¢ÀÇ Ç׸ñµéÀº ºóÁÙ·Î
- ±¸ºÐÇÑ´Ù. Ç׸ñ¾È¿¡¼­ ºóÁÙÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. (ÀÌ·¸°Ô ÇÒ
- ÇÊ¿ä°¡ ¾ø°í, À־ ¹«½ÃÇÏÁö¸¸) ¿©·¯ Ç׸ñÀÌ °øÅëÀ¸·Î °¡Áö°í
- ÀÖ´Â ³»¿ëÀ¸·Î map ÆÄÀÏÀ» ½ÃÀÛÇÏ´Â °ÍÀÌ º¸ÅëÀÌ´Ù. ´ÙÀ½Àº
- map ÆÄÀÏ ¿¹´Ù. ÀÌ ÆÄÀÏÀÇ À̸§Àº <code>foo.var</code>·Î,
- <code>foo</code>¶ó´Â ÀÚ¿øÀ» ¼³¸íÇÑ´Ù.</p>
-
-<div class="example"><p><code>
- URI: foo<br />
-<br />
- URI: foo.en.html<br />
- Content-type: text/html<br />
- Content-language: en<br />
-<br />
- URI: foo.fr.de.html<br />
- Content-type: text/html;charset=iso-8859-2<br />
- Content-language: fr, de<br />
-</code></p></div>
- <p>typemap ÆÄÀÏÀÌ ÆÄÀϸí È®ÀåÀÚ º¸´Ù, ½ÉÁö¾î Multiviews¸¦
- »ç¿ëÇÏ¿©µµ, ¿ì¼±±ÇÀ» °¡ÁüÀ» ÁÖÀÇÇ϶ó. º¯ÇüÀÌ ¼­·Î ´Ù¸¥ Ç°ÁúÀ»
- °¡Áø´Ù¸é, ´ÙÀ½°ú °°ÀÌ (JPEG, GIF, ASCII-art¿¡ ÇØ´çÇÏ´Â)
- media type¿¡ "qs" ÆĶó¹ÌÅÍ·Î Ç°Áú(source quality)À» Ç¥½ÃÇÒ
- ¼ö ÀÖ´Ù:</p>
-
-<div class="example"><p><code>
- URI: foo<br />
-<br />
- URI: foo.jpeg<br />
- Content-type: image/jpeg; qs=0.8<br />
-<br />
- URI: foo.gif<br />
- Content-type: image/gif; qs=0.5<br />
-<br />
- URI: foo.txt<br />
- Content-type: text/plain; qs=0.01<br />
-</code></p></div>
-
- <p>qs °ªÀº 0.000¿¡¼­ 1.000 »çÀÌ´Ù. qs °ªÀÌ 0.000ÀÎ º¯ÇüÀº
- Àý´ë ¼±ÅõÇÁö ¾ÊÀ½À» ÁÖÀÇÇ϶ó. 'qs' °ªÀÌ ¾ø´Â º¯ÇüÀº 1.0À¸·Î
- Ãë±ÞµÈ´Ù. qs °ªÀº Ŭ¶óÀ̾ðÆ®ÀÇ ´É·Â°ú´Â °ü°è¾øÀÌ ´Ù¸¥ º¯Çüµé°ú
- ºñ±³ÇÏ¿© ±× º¯ÇüÀÇ »ó´ëÀûÀÎ 'Ç°Áú'À» ³ªÅ¸³½´Ù. ¿¹¸¦ µé¾î,
- »çÁøÀ» ³ªÅ¸³»·Á´Â °æ¿ì JPEG ÆÄÀÏÀÌ ASCII ÆÄÀϺ¸´Ù´Â Ç×»ó
- ³ôÀº Ç°ÁúÀ» °¡Áø´Ù. ±×·¯³ª ÀÚ¿øÀÌ ¿ø·¡ ASCII art¿´´Ù¸é
- ASCII Ç¥ÇöÀÌ JPEG Ç¥Çöº¸´Ù ´õ ³ôÀº Ç°ÁúÀ» °¡Áú ¼ö ÀÖ´Ù.
- ±×·¯¹Ç·Î ¾î¶² º¯ÇüÀÇ qs °ªÀº Ç¥ÇöÇÏ·Á´Â ÀÚ¿øÀÇ ¼ºÁú¿¡
- µû¶ó ´Ù¸£´Ù.</p>
-
- <p>Áö¿øÇÏ´Â ¸ðµç Çì´õ ¸ñ·ÏÀº <a href="mod/mod_negotiation.html#typemaps">mod_negotation
- typemap</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
-
-<h3><a name="multiviews" id="multiviews">Multiviews</a></h3>
-
- <p><code>MultiViews</code>´Â µð·ºÅ丮º° ¿É¼ÇÀ̹ǷÎ,
- <code>httpd.conf</code>ÀÇ
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>,
- <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>,
- <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
- ¼½¼Ç ȤÀº (<code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>°¡
- ÀûÀýÈ÷ ¼³Á¤µÇ¾ú´Ù¸é) <code>.htaccess</code> ÆÄÀÏÀÇ
- <code class="directive"><a href="./mod/core.html#options">Options</a></code> Áö½Ã¾î¿¡ ¼³Á¤ÇÒ
- ¼ö ÀÖ´Ù. <code>Options All</code>Àº <code>MultiViews</code>¸¦
- Æ÷ÇÔÇÏÁö¾ÊÀ½À» ÁÖÀÇÇ϶ó. µû·Î Á÷Á¢ ½áÁà¾ß ÇÑ´Ù.</p>
-
- <p><code>MultiViews</code>¸¦ »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀÏÀÌ ÀϾ´Ù:
- ¼­¹ö°¡ <code>/some/dir/foo</code>¿¡ ´ëÇÑ ¿äûÀ» ¹Þ°í
- <code>/some/dir/foo</code>¿¡ <code>MultiViews</code>°¡ µ¿ÀÛÇϸç
- <code>/some/dir/foo</code>°¡ Á¸ÀçÇÏÁö <em>¾ÊÀ»</em> °æ¿ì,
- ¼­¹ö´Â µð·ºÅ丮¿¡¼­ À̸§ÀÌ foo.*ÀÎ ÆÄÀϵéÀ» ¸ðµç Æ÷ÇÔÇÏ´Â
- °¡»óÀÇ type mapÀ» ¸¸µç´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¿äûÇÑ media type°ú
- content-encodingÀ» °¡Áö°í ÀÌÁß¿¡ °¡Àå ÀûÇÕÇÑ °ÍÀ» ¼±ÅÃÇÑ´Ù.</p>
-
- <p><code>MultiViews</code>´Â ¼­¹ö°¡ µð·ºÅ丮¸¦ ÂüÁ¶ÇÒ¶§
- ÆÄÀÏÀ» ã´Â <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> Áö½Ã¾î¿¡µµ
- Àû¿ëµÈ´Ù. ¼³Á¤ÆÄÀÏÀÌ ´ÙÀ½°ú °°´Ù¸é,</p>
-<div class="example"><p><code>DirectoryIndex index</code></p></div>
- <p><code>index.html</code>°ú <code>index.html3</code>ÀÌ
- ¸ðµÎ ÀÖ´Ù¸é ¼­¹ö´Â ÀÌµÑ Áß¿¡ Çϳª¸¦ °áÁ¤ÇÑ´Ù. µÑ ¸ðµÎ ¾ø°í
- <code>index.cgi</code>°¡ ÀÖ´Ù¸é, ¼­¹ö´Â ±×°ÍÀ» ½ÇÇàÇÑ´Ù.</p>
-
- <p>µð·ºÅ丮¸¦ ÀÐÀ»¶§ ÆÄÀÏÁß Çϳª°¡ Charset, Content-Type,
- Language, Encoding¸¦ ÆÇ´ÜÇÏ´Â <code>mod_mime</code>ÀÌ ¸ð¸£´Â
- È®ÀåÀÚ¸¦ °¡Áø´Ù¸é, °á°ú´Â <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code> Áö½Ã¾î ¼³Á¤¿¡
- ´Þ·Ç´Ù. ÀÌ Áö½Ã¾î´Â Çڵ鷯, ÇÊÅÍ, ´Ù¸¥ È®ÀåÇüµéÀÌ MultiViews
- Çù»ó¿¡ Âü¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="methods" id="methods">Çù»ó¹æ¹ý</a></h2>
-
- <p>¾ÆÆÄÄ¡°¡ type-map ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϸíµé·Î
- ÁÖ¾îÁø ÀÚ¿ø¿¡ ´ëÇÑ º¯Çü ¸ñ·ÏÀ» ¾ò°ÔµÇ¸é 'ÃÖÀûÀÇ' º¯ÇüÀ»
- °áÁ¤ÇϱâÀ§ÇØ µÎ ¹æ¹ýÁß Çϳª¸¦ »ç¿ëÇÑ´Ù. ¾ÆÆÄÄ¡ ³»¿ëÇù»ó
- ±â´ÉÀ» »ç¿ëÇϱâÀ§ÇØ Á¤È®È÷ Çù»óÀÌ ¾î¶»°Ô ÀϾ´ÂÁö ÀÚ¼¼È÷
- ¾Ë ÇÊ¿ä´Â ¾ø´Ù. ±×·¯³ª ±Ã±ÝÇÑ »ç¶÷À» À§ÇØ ÀÌ ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>µÎ°¡Áö Çù»ó¹æ¹ýÀÌ ÀÖ´Ù:</p>
-
- <ol>
- <li><strong>¾ÆÆÄÄ¡ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ¼­¹ö°¡ ÁÖµµÇÏ´Â
- Çù»ó</strong>Àº ÀϹÝÀûÀÎ °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ¾ÆÆÄÄ¡ ¾Ë°í¸®ÁòÀº
- ¾Æ·¡¼­ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù. ÀÌ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â
- ´õ ³ªÀº °á°ú¸¦ ¾ò±âÀ§ÇØ Á¾Á¾ ƯÁ¤ ¹üÀ§ÀÇ
- Ç°Áú°è¼ö(quality factor)¸¦ 'Á¶ÀÛÇÑ´Ù'. ¾ÆÆÄÄ¡°¡ Ç°Áú°è¼ö¸¦
- Á¶ÀÛÇÏ´Â ¹æ¹ýÀº ¾Æ·¡¼­ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.</li>
-
- <li><strong>ÀÚ¿¬½º·¯¿î(Transparent) ³»¿ëÇù»ó</strong>Àº
- ºê¶ó¿ìÀú°¡ RFC 2295¿¡ Á¤ÀÇµÈ ¹æ¹ýÀ¸·Î ¿äûÇÒ °æ¿ì¿¡¸¸
- »ç¿ëÇÑ´Ù. ÀÌ Çù»ó¹æ¹ýÀº 'ÃÖÀûÀÇ' º¯ÇüÀ» °áÁ¤ÇÒ ±ÇÇÑÀ»
- ºê¶ó¿ìÀú¿¡°Ô ºÎ¿©ÇÑ´Ù. ±×·¡¼­ °á°ú´Â ºê¶ó¿ìÀúÀÇ ¾Ë°í¸®Áò¿¡
- ´Þ·È´Ù. ÀÚ¿¬½º·¯¿î Çù»ó°úÁ¤Áß¿¡ ºê¶ó¿ìÀú´Â ¾ÆÆÄÄ¡¿¡°Ô
- RFC 2296¿¡ Á¤ÀÇµÈ '¿ø°Ý º¯Çü¼±Åà ¾Ë°í¸®Áò(remote variant
- selection algorithm)'À» ¿äûÇÒ ¼ö ÀÖ´Ù.</li>
- </ol>
-
-<h3><a name="dimensions" id="dimensions">Çù»óÀÇ ¹üÀ§</a></h3>
-
- <table>
-
- <tr valign="top">
- <th>¹üÀ§</th>
-
- <th>¼³¸í</th>
- </tr>
-
- <tr valign="top">
- <td>Media Type</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept</code> Çì´õ·Î ¼±È£¸¦ ³ªÅ¸³½´Ù.
- °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù. º¯ÇüÀÇ ¼³¸íµµ Ç°Áú°è¼ö¸¦
- ("qs" ÆĶó¹ÌÅÍ) °¡Áú ¼ö ÀÖ´Ù.</td>
- </tr>
-
- <tr valign="top">
- <td>Language</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept-Language</code> Çì´õ·Î ¼±È£¸¦
- ³ªÅ¸³½´Ù. °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù. º¯ÇüÀº
- ¿©·¯ ¾ð¾î¸¦ °¡Áú (ȤÀº ¾Æ¹« ¾ð¾îµµ ¾øÀ») ¼ö ÀÖ´Ù.</td>
- </tr>
-
- <tr valign="top">
- <td>Encoding</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept-Encoding</code> Çì´õ·Î ¼±È£¸¦
- ³ªÅ¸³½´Ù. °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù.</td>
- </tr>
-
- <tr valign="top">
- <td>Charset</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept-Charset</code> Çì´õ·Î ¼±È£¸¦
- ³ªÅ¸³½´Ù. °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù. º¯ÇüÀº
- media typeÀÇ ÆĶó¹ÌÅÍ·Î ¹®ÀÚÁýÇÕÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù.</td>
- </tr>
- </table>
-
-
-<h3><a name="algorithm" id="algorithm">¾ÆÆÄÄ¡ Çù»ó ¾Ë°í¸®Áò</a></h3>
-
- <p>¾ÆÆÄÄ¡´Â ºê¶ó¿ìÀú¿¡°Ô º¸³¾ 'ÃÖÀûÀÇ' º¯ÇüÀ» (ÀÖ´Ù¸é)
- ¼±ÅÃÇϱâÀ§ÇØ ¾Æ·¡ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù. ÀÌ ¾Ë°í¸®ÁòÀº º¯°æÇÒ
- ¼ö ¾ø´Ù. ´ÙÀ½¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù:</p>
-
- <ol>
- <li>¸ÕÀú, Çù»óÀÇ °¢ ¹üÀ§¿¡ ´ëÇØ ÇØ´çÇÏ´Â <em>Accept*</em>
- Çì´õ¸¦ °Ë»çÇÏ°í, °¢ º¯Çü¿¡ Ç°Áú°ªÀ» ¸Å±ä´Ù. ¾î¶² ¹üÀ§ÀÇ
- <em>Accept*</em> Çì´õ°¡ ¹Þ¾ÆµéÀÌÁö ¾Ê´Â º¯ÇüÀº Èĺ¸¿¡¼­
- Á¦¿ÜÇÑ´Ù. ¾î¶² º¯Çüµµ ³²Áö¾ÊÀ¸¸é 4 ´Ü°è·Î °£´Ù.</li>
-
- <li>
- Èĺ¸¿¡¼­ Çϳª¾¿ Á¦¿ÜÇÏ¿© 'ÃÖÀûÀÇ' º¯ÇüÀ» ã´Â´Ù. ´ÙÀ½
- °¢ °Ë»ç´Â ¼ø¼­´ë·Î ÀϾ´Ù. °¢ °Ë»ç¿¡¼­ ¼±ÅõÇÁö¾ÊÀº
- º¯ÇüÀº Á¦¿ÜµÈ´Ù. °¢ °Ë»çÈÄ ÇÑ º¯Çü¸¸ ³²À¸¸é À̸¦ ÃÖÀûÀÇ
- º¯ÇüÀ¸·Î ¼±ÅÃÇÏ°í 3 ´Ü°è·Î °£´Ù. ¿©·¯ º¯ÇüÀÌ ³²À¸¸é
- ´ÙÀ½ °Ë»ç¸¦ ÁøÇàÇÑ´Ù.
-
- <ol>
- <li><code>Accept</code> Çì´õÀÇ Ç°Áú°è¼ö¿Í º¯ÇüÀÇ
- media type¿¡ ´ëÇÑ Ç°Áú°ªÀ» °öÇÏ¿© °¡Àå ³ôÀº °ªÀ»
- °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>°¡Àå ³ôÀº ¾ð¾î(language) Ç°Áú°è¼ö¸¦ °¡Áø º¯ÇüÀ»
- ¼±ÅÃÇÑ´Ù.</li>
-
- <li><code>Accept-Language</code> Çì´õ¿¡ (ÀÖ´Ù¸é)
- ³ª¿Â ¾ð¾îÀÇ ¼ø¼­ ȤÀº <code>LanguagePriority</code>
- Áö½Ã¾î¿¡ (ÀÖ´Ù¸é) ³ª¿Â ¾ð¾îÀÇ ¼ø¼­¸¦ °¡Áö°í °¡Àå
- ÀûÇÕÇÑ ¾ð¾î¸¦ °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>°¡Àå ³ôÀº (text/html media typeÀÇ ¹öÀüÀ» ³ªÅ¸³»´Â)
- 'level' media ÆĶó¹ÌÅ͸¦ °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li><code>Accept-Charset</code> Çì´õ¸¦ °¡Áö°í °¡Àå
- ÀûÇÕÇÑ charset media ÆĶó¹ÌÅ͸¦ °¡Áø º¯ÇüÀ» ã´Â´Ù.
- Çì´õ°¡ ¾ø´Ù¸é ISO-8859-1 ¹®ÀÚÁýÇÕÀ» °¡Àå ¼±È£ÇÑ´Ù.
- <code>text/*</code> media typeÀ» °¡ÁöÁö¸¸ ¸í½ÃÀûÀ¸·Î
- ƯÁ¤ ¹®ÀÚÁýÇÕ°ú ¿¬°áµÇÁö¾ÊÀº º¯ÇüÀº ISO-8859-1·Î
- °¡Á¤ÇÑ´Ù.</li>
-
- <li>ISO-8859-1ÀÌ <em>¾Æ´Ñ</em> charset media ÆĶó¹ÌÅ͸¦
- °¡Áø º¯ÇüµéÀ» ¼±ÅÃÇÑ´Ù. ±×·± º¯ÇüÀÌ ¾ø´Ù¸é, ´ë½Å ¸ðµç
- º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>°¡Àå ÀûÇÕÇÑ ÀÎÄÚµùÀ» °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.
- user-agent¿¡ ÀûÇÕÇÑ ÀÎÄÚµùÀ» °¡Áø º¯ÇüÀÌ ÀÖ´Ù¸é ±×
- º¯Çü¸¸À» ¼±ÅÃÇÑ´Ù. ±×·¸Áö¾Ê°í ÀÎÄÚµùµÈ º¯Çü°ú ÀÎÄÚµù¾ÈµÈ
- º¯ÇüÀÌ °°ÀÌ ÀÖ´Ù¸é ÀÎÄÚµù¾ÈµÊ º¯Çü¸¸À» ¼±ÅÃÇÑ´Ù. º¯ÇüÀÌ
- ¸ðµÎ ÀÎÄÚµùµÇ¾ú°Å³ª ¸ðµÎ ÀÎÄÚµù¾ÈµÈ °æ¿ì ¸ðµç º¯ÇüÀ»
- ¼±ÅÃÇÑ´Ù.</li>
-
- <li>content length°¡ °¡Àå ÀûÀº º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>³²Àº °ÍÁß Ã¹¹øÀç º¯ÇüÀ» ¼±ÅÃÇÑ´Ù. ÀÌ´Â type-map
- ÆÄÀÏÀÇ ¾Õ¿¡ ³ª¿Ô°Å³ª, µð·ºÅ丮¿¡¼­ º¯ÇüÀ» ÀÐÀº °æ¿ì
- ÆÄÀϸíÀ» ASCII ÄÚµå ¼ø¼­·Î ÇÏ¿© ¾Õ¿¡ ³ª¿À´Â °ÍÀÌ´Ù.</li>
- </ol>
- </li>
-
- <li>ÀÌÁ¦ ¾Ë°í¸®ÁòÀÌ 'ÃÖÀûÀÇ' º¯ÇüÀ» ¼±ÅÃÇß´Ù. ÀÌ°ÍÀ» ÀÀ´äÀ¸·Î
- º¸³½´Ù. HTTP ÀÀ´ä Çì´õ <code>Vary</code>´Â Çù»óÀÇ ¹üÀ§¸¦
- ³ªÅ¸³»°Ô µÈ´Ù. (ºê¶ó¿ìÀú¿Í ij½¬´Â ÀÚ¿øÀ» ij½¬ÇÒ¶§ ÀÌ Á¤º¸¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.) ³¡.</li>
-
- <li>ÀÌ ´Ü°è¿¡ µµ´ÞÇß´Ù¸é (¸ðµÎ ºê¶ó¿ìÀú°¡ ¹ÞÁö¸øÇϱ⠶§¹®¿¡)
- ¾î¶² º¯Çüµµ ¼±ÅÃÀÌ ¾ÈµÈ °æ¿ì´Ù. ("No acceptable
- representation"¸¦ ¶æÇÏ´Â) »óÅ 406°ú ³»¿ëÀ¸·Î »ç¿ë°¡´ÉÇÑ
- º¯ÇüÀÇ ¸ñ·ÏÀ» ´ãÀº HTML ¹®¼­¸¦ ÀÀ´äÀ» º¸³½´Ù. ¶Ç, HTML
- <code>Vary</code> Çì´õ´Â º¯ÇüÀÇ ¹üÀ§¸¦ ³ªÅ¸³½´Ù.</li>
- </ol>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="better" id="better">Ç°Áú°è¼ö Á¶ÀÛÇϱâ</a></h2>
-
- <p>¾ÆÆÄÄ¡´Â Á¾Á¾ À§ÀÇ ¾ÆÆÄÄ¡ Çù»ó ¾Ë°í¸®ÁòÀ» ¾ö°ÝÈ÷ ÁöÅ°Áö¾Ê°í
- Ç°Áú°è¼ö¸¦ º¯°æÇÑ´Ù. ÀÌÀ¯´Â ¿ÏÀüÇÏ°í Á¤È®ÇÑ Á¤º¸¸¦ º¸³»Áö¾Ê´Â
- ºê¶ó¿ìÀú¿¡°Ô (¾Ë°í¸®ÁòÀÇ) ´õ ³ªÀº °á°ú¸¦ º¸³»±â À§Çؼ­´Ù.
- ³Î¸® ¾²ÀÌ´Â ºê¶ó¿ìÀúÁß ÀϺδ ÀÚÁÖ À߸øµÈ º¯ÇüÀ» ¼±ÅÃÇϵµ·Ï
- <code>Accept</code> Çì´õ¸¦ º¸³½´Ù. ºê¶ó¿ìÀú°¡ ¿ÏÀüÇÏ°í ¿Ã¹Ù¸¥
- Á¤º¸¸¦ º¸³½´Ù¸é, Á¶ÀÛÀ» ÇÏÁö¾Ê´Â´Ù.</p>
-
-<h3><a name="wildcards" id="wildcards">Media Type°ú ¿ÍÀϵåÄ«µå</a></h3>
-
- <p><code>Accept:</code> ¿äû Çì´õ´Â media type¿¡ ´ëÇÑ ¼±È£¸¦
- ³ªÅ¸³½´Ù. ¶Ç, *´Â ¾î¶² ¹®ÀÚ¿­ÀÌ¶óµµ °¡´ÉÇϱ⶧¹®¿¡ "image/*"³ª
- "*/*" °°ÀÌ '¿ÍÀϵåÄ«µå' media typeÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼­
- ´ÙÀ½°ú °°Àº ¿äûÀº:</p>
-
-<div class="example"><p><code>Accept: image/*, */*</code></p></div>
-
- <p>"image/"·Î ½ÃÀÛÇÏ´Â ¾î¶² type°ú ´Ù¸¥ ¾î¶² typeµµ °¡´ÉÇÔÀ»
- ÀǹÌÇÑ´Ù. ¾î¶² ºê¶ó¿ìÀú´Â
- ÀÚ½ÅÀÌ ½ÇÁ¦·Î ´Ù·ê ¼ö ÀÖ´Â type¿¡ Ãß°¡·Î ¿ÍÀϵåÄ«µå¸¦ º¸³½´Ù.
- ¿¹¸¦ µé¸é:</p>
-
-<div class="example"><p><code>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</code></p></div>
- <p>ÀÌÀ¯´Â Á÷Á¢ ¿­°ÅÇÑ typeÀ» ¼±È£ÇÏÁö¸¸ ´Ù¸¥ Ç¥ÇöÀÌ ÀÖ´Ù¸é
- ±×°Íµµ ±¦ÂúÀ½À» ³ªÅ¸³»±â À§Çؼ­´Ù. ºê¶ó¿ìÀú°¡ ½ÇÁ¦·Î ¿øÇÑ
- °ÍÀº ´ÙÀ½°ú °°ÀÌ ¸í½ÃÀûÀ¸·Î Ç°Áú°ªÀ» »ç¿ëÇÑ °ÍÀÌ´Ù.</p>
-<div class="example"><p><code>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</code></p></div>
- <p>Á÷Á¢ ¿­°ÅÇÑ typeÀº Ç°Áú°è¼ö°¡ ¾ø¾î¼­ ±âº»°ªÀÎ (°¡Àå ³ôÀº)
- 1.0À» °¡Áø´Ù. ¿ÍÀϵåÄ«µå */*´Â ³·Àº ¼±È£µµ 0.01À» °¡Áö¹Ç·Î
- Á÷Á¢ ¿­°ÅÇÑ type¿¡ ¸Â´Â º¯ÇüÀÌ ¾ø´Â °æ¿ì¿¡¸¸ ´Ù¸¥ typeµéÀÌ
- »ç¿ëµÈ´Ù.</p>
-
- <p><code>Accept:</code> Çì´õ¿¡ q °è¼ö°¡ ÀüÇô <em>¾ø°í</em>
- "*/*"°¡ ÀÖ´Ù¸é, ¾ÆÆÄÄ¡´Â ¹Ù¶÷Á÷ÇÑ ÇൿÀ» À§ÇØ q °ªÀ¸·Î 0.01À»
- ÁöÁ¤ÇÑ´Ù. ¶Ç, "type/*" ÇüÅÂÀÇ ¿ÍÀϵåÄ«µå¿¡´Â ("*/*"º¸´Ù´Â
- ´õ ¼±È£Çϵµ·Ï) 0.02¸¦ ÁöÁ¤ÇÑ´Ù. <code>Accept:</code> Çì´õ¿¡¼­
- q °è¼ö¸¦ °¡Áö´Â media typeÀÌ ÀÖ´Ù¸é ÀÌ·± Ưº°ÇÑ °ªÀ» Ãß°¡ÇÏÁö
- <em>¾Ê´Â´Ù</em>. ±×·¡¼­ ¸í½ÃÀûÀÎ Á¤º¸¸¦ º¸³»´Â ºê¶ó¿ìÀúÀÇ
- ¿äûÀº ¿äûÇѵ¥·Î ó¸®ÇÑ´Ù.</p>
-
-
-<h3><a name="exceptions" id="exceptions">¾ð¾î(language) Çù»óÀÇ ¿¹¿Ü</a></h3>
-
- <p>¾ÆÆÄÄ¡ 2.0Àº ¾ð¾î Çù»óÀÌ ½ÇÆÐÇÑ °æ¿ì ºÎµå·´°Ô º¹±¸ÇϱâÀ§ÇØ
- Çù»ó ¾Ë°í¸®Áò¿¡ »õ·Î ¿¹¿Ü¸¦ ¸î°³ Ãß°¡Çß´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡ ÆäÀÌÁö¸¦ ¿äûÇßÀ»¶§ ¼­¹ö°¡ ºê¶ó¿ìÀú°¡
- º¸³½ <code>Accept-language</code>¿¡ ¸Â´Â ÆäÀÌÁö¸¦ ´Ü ÇÑ°³¸¸
- ãÀ¸¸é ¹®Á¦°¡ ¾øÁö¸¸, ±×·¯Áö ¾ÊÀº °æ¿ì ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô
- "No Acceptable Variant"³ª "Multiple Choices" ÀÀ´äÀ» º¸³½´Ù.
- ÀÌ·± ¿À·ù¹®À» ÇÇÇϱâÀ§ÇØ ÀÌ °æ¿ì <code>Accept-language</code>¸¦
- ¹«½ÃÇÏ°í Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ¸íÈ®È÷ ¸ÂÁö´Â ¾ÊÁö¸¸ ¹®¼­¸¦
- º¸³»µµ·Ï ¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
- Áö½Ã¾î´Â ¼­¹ö°¡ ÀÌ·± ¿À·ù¹®Áß Çϳª ȤÀº µÑ´Ù¸¦ ¹«½ÃÇÏ°í
- <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
- Áö½Ã¾î·Î ÆÇ´ÜÇϵµ·Ï ÇÑ´Ù.</p>
-
- <p>¶Ç, ¼­¹ö´Â ¸Â´Â ¾ð¾î¸¦ ¸øãÀº °æ¿ì ºÎ¸ð¾ð¾î¸¦ ãÀ» ¼öµµ
- ÀÖ´Ù. ¿¹¸¦ µé¾î Ŭ¶óÀ̾ðÆ®°¡ ¿µ±¹¿µ¾î¸¦ ¶æÇÏ´Â
- <code>en-GB</code> ¾ð¾î·Î ¹®¼­¸¦ ¿äûÇÑ °æ¿ì, HTTP/1.1 Ç¥ÁØ¿¡
- µû¸£¸é ¼­¹ö´Â <code>en</code>À¸·Î¸¸ Ç¥½ÃµÈ ¹®¼­¸¦ ÀϹÝÀûÀ¸·Î
- ¼±ÅÃÇÏÁö ¸øÇÑ´Ù. (±×·¡¼­ ¿µ±¹¿µ¾î¸¦ ÀÌÇØÇÏ´Â µ¶ÀÚ°¡ ÀϹÝÀûÀÎ
- ¿µ¾îµµ ÀÌÇØÇÒ ¼ö ÀÖÀ¸¹Ç·Î <code>Accept-Language</code> Çì´õ¿¡
- <code>en-GB</code>¸¸ Æ÷ÇÔÇÏ°í <code>en</code>À» Æ÷ÇÔÇÏÁö¾ÊÀ¸¸é
- °ÅÀÇ È®½ÇÈ÷ À߸øµÈ ¼³Á¤ÀÓÀ» À¯ÀÇÇ϶ó. ºÒÇàÈ÷µµ ÇöÀç ¸¹Àº
- Ŭ¶óÀ̾ðÆ®µéÀº ÀÌ·± ½ÄÀ¸·Î ±âº»¼³Á¤µÇÀÖ´Ù.) ´Ù¸¥ ¾ð¾î¸¦
- ãÁö ¸øÇÏ¿© ¼­¹ö°¡ "No Acceptable Variants" ¿À·ù¸¦ º¸³»°Å³ª
- <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>·Î
- µ¹¾Æ°¡¾ß ÇÑ´Ù¸é, ¼­¹ö´Â ÇÏÀ§¾ð¾î ±Ô¾àÀ» ¹«½ÃÇÏ°í
- <code>en-GB</code>¸¦ <code>en</code> ¹®¼­¿¡ ´ëÀÀÇÑ´Ù.
- ¾Ï¹¬ÀûÀ¸·Î ¾ÆÆÄÄ¡´Â ºÎ¸ð¾ð¾î¸¦ ¸Å¿ì ³·Àº Ç°Áú°ªÀ¸·Î
- Ŭ¶óÀ̾ðÆ®ÀÇ Çã¿ë¾ð¾î ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù. ±×·¯³ª Ŭ¶óÀ̾ðÆ®°¡
- "en-GB; q=0.9, fr; q=0.8"À» ¿äûÇÏ°í ¼­¹ö¿¡ "en"°ú "fr"
- ¹®¼­°¡ ÀÖ´Ù¸é, "fr" ¹®¼­°¡ ¼±ÅõÊÀ» ÁÖÀÇÇ϶ó. ÀÌ´Â HTTP/1.1
- Ç¥ÁØÀ» ÁöÅ°°í, ¿Ã¹Ù·Î ¼³Á¤µÈ Ŭ¶óÀ̾ðÆ®¿Í È¿À²ÀûÀ¸·Î
- µ¿ÀÛÇϱâÀ§ÇÔÀÌ´Ù.</p>
-
- <p>»ç¿ëÀÚ°¡ ¼±È£ÇÏ´Â ¾ð¾î¸¦ ¾Ë¾Æ³»±âÀ§ÇÑ (ÄíÅ°³ª Ưº°ÇÑ
- URL-°æ·Î °°Àº) °í±Þ ±â¹ýÀ» Áö¿øÇϱâÀ§ÇØ ¾ÆÆÄÄ¡ 2.0.47ºÎÅÍ
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>Àº <code>prefer-language</code>¶ó´Â
- <a href="env.html">ȯ°æº¯¼ö</a>¸¦ ÀνÄÇÑ´Ù. ÀÌ È¯°æº¯¼ö°¡
- Á¸ÀçÇÏ°í ÀûÀýÇÑ ¾ð¾îű׸¦ Æ÷ÇÔÇÑ´Ù¸é,
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>Àº ÇØ´çÇÏ´Â º¯ÇüÀ» ¼±ÅÃÇÏ·Á°í
- ½ÃµµÇÑ´Ù. ±×·± º¯ÇüÀÌ ¾ø´Ù¸é ÀϹÝÀûÀÎ Çù»ó°úÁ¤À» ½ÃÀÛÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extensions" id="extensions">ÀÚ¿¬½º·¯¿î(transparent) ³»¿ëÇù»óÀÇ È®Àå</a></h2>
-
-<p>¾ÆÆÄÄ¡´Â ´ÙÀ½°ú °°ÀÌ ÀÚ¿¬½º·¯¿î ³»¿ëÈ®Àå ÇÁ·ÎÅäÄÝÀ» (RFC 2295)
-È®ÀåÇÑ´Ù. º¯Çü ¸ñ·ÏÀÇ »õ·Î¿î <code>{encoding ..}</code>´Â ƯÁ¤
-content-encodingÀ» °¡Áø º¯Çü¸¸À» ÁöĪÇÑ´Ù. RVSA/1.0 ¾Ë°í¸®ÁòÀº
-(RFC 2296) ¸ñ·Ï¿¡¼­ ÀÎÄÚµùµÈ º¯ÇüÀ» ÀνÄÇÒ ¼ö ÀÖ°í, ÀÎÄÚµùÀÌ
-<code>Accept-Encoding</code> ¿äû Çì´õ¿¡ ¸Â´Â °æ¿ì ÀÎÄÚµùµÈ
-º¯Çüµéµµ È帷Π»ç¿ëÇϵµ·Ï È®ÀåµÇ¾ú´Ù. RVSA/1.0 ±¸ÇöÀº ÃÖÀûÀÇ
-º¯ÇüÀ» ã±â Àü¿¡ °è»êµÈ Ç°Áú°è¼ö¸¦ ¼Ò¼öÁ¡ 5ÀÚ¸®¿¡¼­ ¹Ý¿Ã¸²ÇÏÁö
-¾Ê´Â´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="naming" id="naming">ÇÏÀÌÆÛ¸µÅ©¿Í À̸§±ÔÄ¢¿¡ ´ëÇÏ¿©</a></h2>
-
- <p>¾ð¾î(language) Çù»óÀ» »ç¿ëÇÑ´Ù¸é ÆÄÀÏÀº ¿©·¯ È®ÀåÀÚ¸¦
- °¡Áö°í È®ÀåÀÚÀÇ ¼ø¼­´Â º¸Åë °ü°è¾øÀ¸¹Ç·Î ÆÄÀÏ¸í¿¡ ¿©·¯ ´Ù¸¥
- À̸§±ÔÄ¢À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. (ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="mod/mod_mime.html#multipleext">mod_mime</a> ¹®¼­¸¦
- Âü°íÇ϶ó.)</p>
-
- <p>ÀüÇüÀûÀÎ ÆÄÀÏÀº MIME-type È®ÀåÀÚ (<em>¿¹¸¦ µé¾î</em>,
- <code>html</code>), °æ¿ì¿¡ µû¶ó encoding È®ÀåÀÚ (<em>¿¹¸¦
- µé¾î</em>, <code>gz</code>), ÆÄÀÏ¿¡ ¿©·¯ ¾ð¾î º¯ÇüÀÌ ÀÖ´Â
- °æ¿ì ¹°·Ð ¾ð¾î È®ÀåÀÚ¸¦ (<em>¿¹¸¦ µé¾î</em>, <code>en</code>)
- °¡Áø´Ù.</p>
-
- <p>¿¹Á¦:</p>
-
- <ul>
- <li>foo.en.html</li>
-
- <li>foo.html.en</li>
-
- <li>foo.en.html.gz</li>
- </ul>
-
- <p>´ÙÀ½Àº ¸î¸î ÆÄÀϸí°ú ±× ÆÄÀÏ¿¡ ´ëÇÑ À¯È¿ÇÏ°í À¯È¿ÇÏÁö¾ÊÀº
- ÇÏÀÌÆÛ¸µÅ©¸¦ º¸ÀδÙ:</p>
-
- <table class="bordered">
-
- <tr>
- <th>ÆÄÀϸí</th>
-
- <th>À¯È¿ÇÑ ÇÏÀÌÆÛ¸µÅ©</th>
-
- <th>À¯È¿ÇÏÁö¾ÊÀº ÇÏÀÌÆÛ¸µÅ©</th>
- </tr>
-
- <tr>
- <td><em>foo.html.en</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html</em></td>
-
- <td>foo</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.en.gz</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>foo.gz<br />
- foo.html.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html.gz</em></td>
-
- <td>foo</td>
-
- <td>foo.html<br />
- foo.html.gz<br />
- foo.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.gz.html.en</em></td>
-
- <td>foo<br />
- foo.gz<br />
- foo.gz.html</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.gz.en</em></td>
-
- <td>foo<br />
- foo.html<br />
- foo.html.gz</td>
-
- <td>foo.gz</td>
- </tr>
- </table>
-
- <p>À§ Ç¥¸¦ º¸¸é ÇÏÀÌÆÛ¸µÅ©¿¡ ¾î¶² È®ÀåÀÚµµ ¾ø´Â À̸§À»
- (<em>¿¹¸¦ µé¾î</em>, <code>foo</code>) Ç×»ó »ç¿ëÇÒ ¼ö ÀÖÀ½À»
- ¾Ë ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ÀåÁ¡Àº ¹®¼­ÀÇ ½ÇÁ¦ Á¾·ù¸¦ ¼û±æ ¼ö À־,
- <em>¿¹¸¦ µé¾î</em> ÇÏÀÌ·¯¸µÅ© ÂüÁ¶¸¦ ¼öÁ¤ÇϾʰí
- <code>html</code> ÆÄÀÏÀ» <code>shtml</code>À̳ª
- <code>cgi</code>·Î º¯°æÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.</p>
-
- <p>°è¼Ó ÇÏÀÌÆÛ¸µÅ©¿¡ MIME-typeÀ» (<em>¿¹¸¦ µé¾î</em>,
- <code>foo.html</code>) »ç¿ëÇÏ°í ½Í´Ù¸é (encoding È®ÀåÀÚ°¡
- ÀÖ´Ù¸é À̰͵µ Æ÷ÇÔÇÏ¿©) ¾ð¾î È®ÀåÀÚ¸¦ MIME-type È®ÀåÀÚº¸´Ù
- ¿À¸¥ÂÊ¿¡ (<em>¿¹¸¦ µé¾î</em>, <code>foo.html.en</code>)
- µÎ¾î¾ßÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="caching" id="caching">ij½¬¿¡ ´ëÇÏ¿©</a></h2>
-
- <p>ij½¬°¡ Ç¥ÇöÀ» ÀúÀåÇϸé Ç¥Çö°ú ¿äû URLÀ» ¿¬°ü½ÃŲ´Ù.
- ´ÙÀ½¹ø ±× URLÀ» ¿äûÇϸé ij½¬´Â ÀúÀåµÈ Ç¥ÇöÀ» »ç¿ëÇÑ´Ù.
- ±×·¯³ª ¼­¹ö¿Í Çù»óÀÌ °¡´ÉÇÑ ÀÚ¿øÀÎ °æ¿ì ù¹ø° ¿äûÇÑ º¯Çü¸¸
- ij½¬µÇ¾î ÀÌÈÄ ¿äûÀº ij½¬µÈ À߸øµÈ ÀÀ´äÀ» ¾òÀ» ¼ö ÀÖ´Ù.
- À̸¦ ¸·±âÀ§ÇØ ¾ÆÆÄÄ¡´Â º¸Åë ³»¿ëÇù»óÈÄ ¹ÝȯµÇ´Â ¸ðµç ¿äû¿¡
- HTTP/1.0 Ŭ¶óÀ̾ðÆ®°¡ ij½¬¸¦ ¸øÇϵµ·Ï Ç¥½Ã¸¦ ÇÑ´Ù. ¶Ç, ¾ÆÆÄÄ¡´Â
- Çù»óÇÑ ÀÀ´äÀÇ Ä³½¬¸¦ Çã¿ëÇÏ´Â HTTP/1.1 ÇÁ·ÎÅäÄÝÀÇ ±â´ÉÀ»
- Áö¿øÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
- Áö½Ã¾î´Â HTTP/1.0 ȣȯ Ŭ¶óÀ̾ðÆ®(ºê¶ó¿ìÀú ȤÀº ij½¬)°¡
- º¸³½ ¿äû¿¡ ´ëÇØ Çù»óÇÑ ÀÀ´äÀ» ij½¬ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- ¼­¹ö³ª °¡»óÈ£½ºÆ® ¼³Á¤¿¡ »ç¿ëÇϸç, ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¾Ê´Â´Ù.
- ÀÌ Áö½Ã¾î´Â HTTP/1.1 Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû°ú´Â °ü°è°¡ ¾ø´Ù.</p>
-
- <p>HTTP/1.1 Ŭ¶óÀ̾ðÆ®¿¡°Ô ¾ÆÆÄÄ¡´Â ÀÀ´äÀÇ Çù»ó ¹üÀ§¸¦
- ¾Ë·ÁÁÖ´Â <code>Vary</code> HTTP ÀÀ´äÇì´õ¸¦ º¸³½´Ù. ÀÌ Á¤º¸¸¦
- »ç¿ëÇÏ¿© ´ÙÀ½ ¿äûÀ» ij½¬µÈ º¹»çº»À¸·Î ´ëüÇÒ ¼ö ÀÖ´ÂÁö
- ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. Çé»óÀÇ ¹üÀ§¿Í °ü°è¾øÀÌ Ä³½¬µÈ º¹»çº»À»
- ±ÇÇÑ´Ù¸é <code>force-no-vary</code> <a href="env.html#special">ȯ°æº¯¼ö</a>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="more" id="more">´Ù¸¥ Á¤º¸</a></h2>
-
- <p>³»¿ëÇù»ó¿¡ ´ëÇÑ ´Ù¸¥ Á¤º¸´Â Alan J. Flavell°¡ ¾´ <a href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
- Negotiation Notes</a>¸¦ Âü°íÇ϶ó. ±×·¯³ª ÀÌ ¹®¼­´Â ¾ÆÁ÷
- ¾ÆÆÄÄ¡ 2.0ÀÇ º¯È­¸¦ ¹Ý¿µÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/content-negotiation.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/content-negotiation.xml b/docs/manual/content-negotiation.xml
deleted file mode 100644
index ac390e8244..0000000000
--- a/docs/manual/content-negotiation.xml
+++ /dev/null
@@ -1,675 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.17 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="content-negotiation.xml.meta">
-
-<title>Content Negotiation</title>
-
-<summary>
-
- <p>Apache supports content negotiation as described in
- the HTTP/1.1 specification. It can choose the best
- representation of a resource based on the browser-supplied
- preferences for media type, languages, character set and
- encoding. It also implements a couple of features to give
- more intelligent handling of requests from browsers that send
- incomplete negotiation information.</p>
-
- <p>Content negotiation is provided by the
- <module>mod_negotiation</module> module, which is compiled in
- by default.</p>
-</summary>
-
-<section id="about"><title>About Content Negotiation</title>
-
- <p>A resource may be available in several different
- representations. For example, it might be available in
- different languages or different media types, or a combination.
- One way of selecting the most appropriate choice is to give the
- user an index page, and let them select. However it is often
- possible for the server to choose automatically. This works
- because browsers can send, as part of each request, information
- about what representations they prefer. For example, a browser
- could indicate that it would like to see information in French,
- if possible, else English will do. Browsers indicate their
- preferences by headers in the request. To request only French
- representations, the browser would send</p>
-
-<example>Accept-Language: fr</example>
-
- <p>Note that this preference will only be applied when there is
- a choice of representations and they vary by language.</p>
-
- <p>As an example of a more complex request, this browser has
- been configured to accept French and English, but prefer
- French, and to accept various media types, preferring HTML over
- plain text or other text types, and preferring GIF or JPEG over
- other media types, but also allowing any other media type as a
- last resort:</p>
-
-<example>
- Accept-Language: fr; q=1.0, en; q=0.5<br />
- Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</example>
-
- <p>Apache supports 'server driven' content negotiation, as
- defined in the HTTP/1.1 specification. It fully supports the
- <code>Accept</code>, <code>Accept-Language</code>,
- <code>Accept-Charset</code> and<code>Accept-Encoding</code>
- request headers. Apache also supports 'transparent'
- content negotiation, which is an experimental negotiation
- protocol defined in RFC 2295 and RFC 2296. It does not offer
- support for 'feature negotiation' as defined in these RFCs.</p>
-
- <p>A <strong>resource</strong> is a conceptual entity
- identified by a URI (RFC 2396). An HTTP server like Apache
- provides access to <strong>representations</strong> of the
- resource(s) within its namespace, with each representation in
- the form of a sequence of bytes with a defined media type,
- character set, encoding, etc. Each resource may be associated
- with zero, one, or more than one representation at any given
- time. If multiple representations are available, the resource
- is referred to as <strong>negotiable</strong> and each of its
- representations is termed a <strong>variant</strong>. The ways
- in which the variants for a negotiable resource vary are called
- the <strong>dimensions</strong> of negotiation.</p>
-</section>
-
-<section id="negotiation"><title>Negotiation in Apache</title>
-
- <p>In order to negotiate a resource, the server needs to be
- given information about each of the variants. This is done in
- one of two ways:</p>
-
- <ul>
- <li>Using a type map (<em>i.e.</em>, a <code>*.var</code>
- file) which names the files containing the variants
- explicitly, or</li>
-
- <li>Using a 'MultiViews' search, where the server does an
- implicit filename pattern match and chooses from among the
- results.</li>
- </ul>
-
- <section id="type-map"><title>Using a type-map file</title>
-
- <p>A type map is a document which is associated with the
- handler named <code>type-map</code> (or, for
- backwards-compatibility with older Apache configurations, the
- MIME type <code>application/x-type-map</code>). Note that to
- use this feature, you must have a handler set in the
- configuration that defines a file suffix as
- <code>type-map</code>; this is best done with</p>
-
-<example>AddHandler type-map .var</example>
-
- <p>in the server configuration file.</p>
-
- <p>Type map files should have the same name as the resource
- which they are describing, and have an entry for each available
- variant; these entries consist of contiguous HTTP-format header
- lines. Entries for different variants are separated by blank
- lines. Blank lines are illegal within an entry. It is
- conventional to begin a map file with an entry for the combined
- entity as a whole (although this is not required, and if
- present will be ignored). An example map file is shown below.
- This file would be named <code>foo.var</code>, as it describes
- a resource named <code>foo</code>.</p>
-
-<example>
- URI: foo<br />
-<br />
- URI: foo.en.html<br />
- Content-type: text/html<br />
- Content-language: en<br />
-<br />
- URI: foo.fr.de.html<br />
- Content-type: text/html;charset=iso-8859-2<br />
- Content-language: fr, de<br />
-</example>
- <p>Note also that a typemap file will take precedence over the
- filename's extension, even when Multiviews is on. If the
- variants have different source qualities, that may be indicated
- by the "qs" parameter to the media type, as in this picture
- (available as JPEG, GIF, or ASCII-art): </p>
-
-<example>
- URI: foo<br />
-<br />
- URI: foo.jpeg<br />
- Content-type: image/jpeg; qs=0.8<br />
-<br />
- URI: foo.gif<br />
- Content-type: image/gif; qs=0.5<br />
-<br />
- URI: foo.txt<br />
- Content-type: text/plain; qs=0.01<br />
-</example>
-
- <p>qs values can vary in the range 0.000 to 1.000. Note that
- any variant with a qs value of 0.000 will never be chosen.
- Variants with no 'qs' parameter value are given a qs factor of
- 1.0. The qs parameter indicates the relative 'quality' of this
- variant compared to the other available variants, independent
- of the client's capabilities. For example, a JPEG file is
- usually of higher source quality than an ASCII file if it is
- attempting to represent a photograph. However, if the resource
- being represented is an original ASCII art, then an ASCII
- representation would have a higher source quality than a JPEG
- representation. A qs value is therefore specific to a given
- variant depending on the nature of the resource it
- represents.</p>
-
- <p>The full list of headers recognized is available in the <a
- href="mod/mod_negotiation.html#typemaps">mod_negotation
- typemap</a> documentation.</p>
-</section>
-
-<section id="multiviews"><title>Multiviews</title>
-
- <p><code>MultiViews</code> is a per-directory option, meaning it
- can be set with an <directive module="core">Options</directive>
- directive within a <directive module="core"
- type="section">Directory</directive>, <directive module="core"
- type="section">Location</directive> or <directive module="core"
- type="section">Files</directive> section in
- <code>httpd.conf</code>, or (if <directive
- module="core">AllowOverride</directive> is properly set) in
- <code>.htaccess</code> files. Note that <code>Options All</code>
- does not set <code>MultiViews</code>; you have to ask for it by
- name.</p>
-
- <p>The effect of <code>MultiViews</code> is as follows: if the
- server receives a request for <code>/some/dir/foo</code>, if
- <code>/some/dir</code> has <code>MultiViews</code> enabled, and
- <code>/some/dir/foo</code> does <em>not</em> exist, then the
- server reads the directory looking for files named foo.*, and
- effectively fakes up a type map which names all those files,
- assigning them the same media types and content-encodings it
- would have if the client had asked for one of them by name. It
- then chooses the best match to the client's requirements.</p>
-
- <p><code>MultiViews</code> may also apply to searches for the file
- named by the <directive
- module="mod_dir">DirectoryIndex</directive> directive, if the
- server is trying to index a directory. If the configuration files
- specify</p>
-<example>DirectoryIndex index</example>
- <p>then the server will arbitrate between <code>index.html</code>
- and <code>index.html3</code> if both are present. If neither
- are present, and <code>index.cgi</code> is there, the server
- will run it.</p>
-
- <p>If one of the files found when reading the directory does not
- have an extension recognized by <code>mod_mime</code> to designate
- its Charset, Content-Type, Language, or Encoding, then the result
- depends on the setting of the <directive
- module="mod_mime">MultiViewsMatch</directive> directive. This
- directive determines whether handlers, filters, and other
- extension types can participate in MultiViews negotiation.</p>
-</section>
-</section>
-
-<section id="methods"><title>The Negotiation Methods</title>
-
- <p>After Apache has obtained a list of the variants for a given
- resource, either from a type-map file or from the filenames in
- the directory, it invokes one of two methods to decide on the
- 'best' variant to return, if any. It is not necessary to know
- any of the details of how negotiation actually takes place in
- order to use Apache's content negotiation features. However the
- rest of this document explains the methods used for those
- interested. </p>
-
- <p>There are two negotiation methods:</p>
-
- <ol>
- <li><strong>Server driven negotiation with the Apache
- algorithm</strong> is used in the normal case. The Apache
- algorithm is explained in more detail below. When this
- algorithm is used, Apache can sometimes 'fiddle' the quality
- factor of a particular dimension to achieve a better result.
- The ways Apache can fiddle quality factors is explained in
- more detail below.</li>
-
- <li><strong>Transparent content negotiation</strong> is used
- when the browser specifically requests this through the
- mechanism defined in RFC 2295. This negotiation method gives
- the browser full control over deciding on the 'best' variant,
- the result is therefore dependent on the specific algorithms
- used by the browser. As part of the transparent negotiation
- process, the browser can ask Apache to run the 'remote
- variant selection algorithm' defined in RFC 2296.</li>
- </ol>
-
-<section id="dimensions"><title>Dimensions of Negotiation</title>
-
- <table>
- <columnspec><column width=".15"/><column width=".85"/></columnspec>
- <tr valign="top">
- <th>Dimension</th>
-
- <th>Notes</th>
- </tr>
-
- <tr valign="top">
- <td>Media Type</td>
-
- <td>Browser indicates preferences with the <code>Accept</code>
- header field. Each item can have an associated quality factor.
- Variant description can also have a quality factor (the "qs"
- parameter).</td>
- </tr>
-
- <tr valign="top">
- <td>Language</td>
-
- <td>Browser indicates preferences with the
- <code>Accept-Language</code> header field. Each item can have
- a quality factor. Variants can be associated with none, one or
- more than one language.</td>
- </tr>
-
- <tr valign="top">
- <td>Encoding</td>
-
- <td>Browser indicates preference with the
- <code>Accept-Encoding</code> header field. Each item can have
- a quality factor.</td>
- </tr>
-
- <tr valign="top">
- <td>Charset</td>
-
- <td>Browser indicates preference with the
- <code>Accept-Charset</code> header field. Each item can have a
- quality factor. Variants can indicate a charset as a parameter
- of the media type.</td>
- </tr>
- </table>
-</section>
-
-<section id="algorithm"><title>Apache Negotiation Algorithm</title>
-
- <p>Apache can use the following algorithm to select the 'best'
- variant (if any) to return to the browser. This algorithm is
- not further configurable. It operates as follows:</p>
-
- <ol>
- <li>First, for each dimension of the negotiation, check the
- appropriate <em>Accept*</em> header field and assign a
- quality to each variant. If the <em>Accept*</em> header for
- any dimension implies that this variant is not acceptable,
- eliminate it. If no variants remain, go to step 4.</li>
-
- <li>
- Select the 'best' variant by a process of elimination. Each
- of the following tests is applied in order. Any variants
- not selected at each test are eliminated. After each test,
- if only one variant remains, select it as the best match
- and proceed to step 3. If more than one variant remains,
- move on to the next test.
-
- <ol>
- <li>Multiply the quality factor from the <code>Accept</code>
- header with the quality-of-source factor for this variants
- media type, and select the variants with the highest
- value.</li>
-
- <li>Select the variants with the highest language quality
- factor.</li>
-
- <li>Select the variants with the best language match,
- using either the order of languages in the
- <code>Accept-Language</code> header (if present), or else
- the order of languages in the <code>LanguagePriority</code>
- directive (if present).</li>
-
- <li>Select the variants with the highest 'level' media
- parameter (used to give the version of text/html media
- types).</li>
-
- <li>Select variants with the best charset media
- parameters, as given on the <code>Accept-Charset</code>
- header line. Charset ISO-8859-1 is acceptable unless
- explicitly excluded. Variants with a <code>text/*</code>
- media type but not explicitly associated with a particular
- charset are assumed to be in ISO-8859-1.</li>
-
- <li>Select those variants which have associated charset
- media parameters that are <em>not</em> ISO-8859-1. If
- there are no such variants, select all variants
- instead.</li>
-
- <li>Select the variants with the best encoding. If there
- are variants with an encoding that is acceptable to the
- user-agent, select only these variants. Otherwise if
- there is a mix of encoded and non-encoded variants,
- select only the unencoded variants. If either all
- variants are encoded or all variants are not encoded,
- select all variants.</li>
-
- <li>Select the variants with the smallest content
- length.</li>
-
- <li>Select the first variant of those remaining. This
- will be either the first listed in the type-map file, or
- when variants are read from the directory, the one whose
- file name comes first when sorted using ASCII code
- order.</li>
- </ol>
- </li>
-
- <li>The algorithm has now selected one 'best' variant, so
- return it as the response. The HTTP response header
- <code>Vary</code> is set to indicate the dimensions of
- negotiation (browsers and caches can use this information when
- caching the resource). End.</li>
-
- <li>To get here means no variant was selected (because none
- are acceptable to the browser). Return a 406 status (meaning
- "No acceptable representation") with a response body
- consisting of an HTML document listing the available
- variants. Also set the HTTP <code>Vary</code> header to
- indicate the dimensions of variance.</li>
- </ol>
-</section>
-</section>
-
-<section id="better"><title>Fiddling with Quality
- Values</title>
-
- <p>Apache sometimes changes the quality values from what would
- be expected by a strict interpretation of the Apache
- negotiation algorithm above. This is to get a better result
- from the algorithm for browsers which do not send full or
- accurate information. Some of the most popular browsers send
- <code>Accept</code> header information which would otherwise
- result in the selection of the wrong variant in many cases. If a
- browser sends full and correct information these fiddles will not
- be applied.</p>
-
-<section id="wildcards"><title>Media Types and Wildcards</title>
-
- <p>The <code>Accept:</code> request header indicates preferences
- for media types. It can also include 'wildcard' media types, such
- as "image/*" or "*/*" where the * matches any string. So a request
- including:</p>
-
-<example>Accept: image/*, */*</example>
-
- <p>would indicate that any type starting "image/" is acceptable,
- as is any other type.
- Some browsers routinely send wildcards in addition to explicit
- types they can handle. For example:</p>
-
-<example>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</example>
- <p>The intention of this is to indicate that the explicitly listed
- types are preferred, but if a different representation is
- available, that is ok too. Using explicit quality values,
- what the browser really wants is something like:</p>
-<example>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</example>
- <p>The explicit types have no quality factor, so they default to a
- preference of 1.0 (the highest). The wildcard */* is given a
- low preference of 0.01, so other types will only be returned if
- no variant matches an explicitly listed type.</p>
-
- <p>If the <code>Accept:</code> header contains <em>no</em> q
- factors at all, Apache sets the q value of "*/*", if present, to
- 0.01 to emulate the desired behavior. It also sets the q value of
- wildcards of the format "type/*" to 0.02 (so these are preferred
- over matches against "*/*". If any media type on the
- <code>Accept:</code> header contains a q factor, these special
- values are <em>not</em> applied, so requests from browsers which
- send the explicit information to start with work as expected.</p>
-</section>
-
-<section id="exceptions"><title>Language Negotiation Exceptions</title>
-
- <p>New in Apache 2.0, some exceptions have been added to the
- negotiation algorithm to allow graceful fallback when language
- negotiation fails to find a match.</p>
-
- <p>When a client requests a page on your server, but the server
- cannot find a single page that matches the
- <code>Accept-language</code> sent by
- the browser, the server will return either a "No Acceptable
- Variant" or "Multiple Choices" response to the client. To avoid
- these error messages, it is possible to configure Apache to ignore
- the <code>Accept-language</code> in these cases and provide a
- document that does not explicitly match the client's request. The
- <directive
- module="mod_negotiation">ForceLanguagePriority</directive>
- directive can be used to override one or both of these error
- messages and substitute the servers judgement in the form of the
- <directive module="mod_negotiation">LanguagePriority</directive>
- directive.</p>
-
- <p>The server will also attempt to match language-subsets when no
- other match can be found. For example, if a client requests
- documents with the language <code>en-GB</code> for British
- English, the server is not normally allowed by the HTTP/1.1
- standard to match that against a document that is marked as simply
- <code>en</code>. (Note that it is almost surely a configuration
- error to include <code>en-GB</code> and not <code>en</code> in the
- <code>Accept-Language</code> header, since it is very unlikely
- that a reader understands British English, but doesn't understand
- English in general. Unfortunately, many current clients have
- default configurations that resemble this.) However, if no other
- language match is possible and the server is about to return a "No
- Acceptable Variants" error or fallback to the <directive
- module="mod_negotiation">LanguagePriority</directive>, the server
- will ignore the subset specification and match <code>en-GB</code>
- against <code>en</code> documents. Implicitly, Apache will add
- the parent language to the client's acceptable language list with
- a very low quality value. But note that if the client requests
- "en-GB; q=0.9, fr; q=0.8", and the server has documents
- designated "en" and "fr", then the "fr" document will be returned.
- This is necessary to maintain compliance with the HTTP/1.1
- specification and to work effectively with properly configured
- clients.</p>
-
- <p>In order to support advanced techniques (such as cookies or
- special URL-paths) to determine the user's preferred language,
- since Apache 2.0.47 <module>mod_negotiation</module> recognizes
- the <a href="env.html">environment variable</a>
- <code>prefer-language</code>. If it exists and contains an
- appropriate language tag, <module>mod_negotiation</module> will
- try to select a matching variant. If there's no such variant,
- the normal negotiation process applies.</p>
-
- <example><title>Example</title>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1
- </example>
-</section>
-</section>
-
-<section id="extensions"><title>Extensions to Transparent Content
-Negotiation</title>
-
-<p>Apache extends the transparent content negotiation protocol (RFC
-2295) as follows. A new <code>{encoding ..}</code> element is used in
-variant lists to label variants which are available with a specific
-content-encoding only. The implementation of the RVSA/1.0 algorithm
-(RFC 2296) is extended to recognize encoded variants in the list, and
-to use them as candidate variants whenever their encodings are
-acceptable according to the <code>Accept-Encoding</code> request
-header. The RVSA/1.0 implementation does not round computed quality
-factors to 5 decimal places before choosing the best variant.</p>
-</section>
-
-<section id="naming"><title>Note on hyperlinks and naming conventions</title>
-
- <p>If you are using language negotiation you can choose between
- different naming conventions, because files can have more than
- one extension, and the order of the extensions is normally
- irrelevant (see the <a
- href="mod/mod_mime.html#multipleext">mod_mime</a> documentation
- for details).</p>
-
- <p>A typical file has a MIME-type extension (<em>e.g.</em>,
- <code>html</code>), maybe an encoding extension (<em>e.g.</em>,
- <code>gz</code>), and of course a language extension
- (<em>e.g.</em>, <code>en</code>) when we have different
- language variants of this file.</p>
-
- <p>Examples:</p>
-
- <ul>
- <li>foo.en.html</li>
-
- <li>foo.html.en</li>
-
- <li>foo.en.html.gz</li>
- </ul>
-
- <p>Here some more examples of filenames together with valid and
- invalid hyperlinks:</p>
-
- <table border="1" cellpadding="8" cellspacing="0">
- <columnspec><column width=".2"/><column width=".2"/>
- <column width=".2"/></columnspec>
- <tr>
- <th>Filename</th>
-
- <th>Valid hyperlink</th>
-
- <th>Invalid hyperlink</th>
- </tr>
-
- <tr>
- <td><em>foo.html.en</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html</em></td>
-
- <td>foo</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.en.gz</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>foo.gz<br />
- foo.html.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html.gz</em></td>
-
- <td>foo</td>
-
- <td>foo.html<br />
- foo.html.gz<br />
- foo.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.gz.html.en</em></td>
-
- <td>foo<br />
- foo.gz<br />
- foo.gz.html</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.gz.en</em></td>
-
- <td>foo<br />
- foo.html<br />
- foo.html.gz</td>
-
- <td>foo.gz</td>
- </tr>
- </table>
-
- <p>Looking at the table above, you will notice that it is always
- possible to use the name without any extensions in a hyperlink
- (<em>e.g.</em>, <code>foo</code>). The advantage is that you
- can hide the actual type of a document rsp. file and can change
- it later, <em>e.g.</em>, from <code>html</code> to
- <code>shtml</code> or <code>cgi</code> without changing any
- hyperlink references.</p>
-
- <p>If you want to continue to use a MIME-type in your
- hyperlinks (<em>e.g.</em> <code>foo.html</code>) the language
- extension (including an encoding extension if there is one)
- must be on the right hand side of the MIME-type extension
- (<em>e.g.</em>, <code>foo.html.en</code>).</p>
-</section>
-
-<section id="caching"><title>Note on Caching</title>
-
- <p>When a cache stores a representation, it associates it with
- the request URL. The next time that URL is requested, the cache
- can use the stored representation. But, if the resource is
- negotiable at the server, this might result in only the first
- requested variant being cached and subsequent cache hits might
- return the wrong response. To prevent this, Apache normally
- marks all responses that are returned after content negotiation
- as non-cacheable by HTTP/1.0 clients. Apache also supports the
- HTTP/1.1 protocol features to allow caching of negotiated
- responses.</p>
-
- <p>For requests which come from a HTTP/1.0 compliant client
- (either a browser or a cache), the directive <directive
- module="mod_negotiation">CacheNegotiatedDocs</directive> can be
- used to allow caching of responses which were subject to
- negotiation. This directive can be given in the server config or
- virtual host, and takes no arguments. It has no effect on requests
- from HTTP/1.1 clients.</p>
-
- <p>For HTTP/1.1 clients, Apache sends a <code>Vary</code> HTTP
- response header to indicate the negotiation dimensions for the
- response. Caches can use this information to determine whether a
- subsequent request can be served from the local copy. To
- encourage a cache to use the local copy regardless of the
- negotiation dimensions, set the <code>force-no-vary</code> <a
- href="env.html#special">environment variable</a>.</p>
-
-</section>
-
-<section id="more"><title>More Information</title>
-
- <p>For more information about content negotiation, see Alan
- J. Flavell's <a
- href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
- Negotiation Notes</a>. But note that this document may not be
- updated to include changes in Apache 2.0.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/content-negotiation.xml.ja b/docs/manual/content-negotiation.xml.ja
deleted file mode 100644
index 55e20292ad..0000000000
--- a/docs/manual/content-negotiation.xml.ja
+++ /dev/null
@@ -1,713 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="content-negotiation.xml.meta">
-
-<title>$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</title>
-
-<summary>
-
- <p>Apache $B$O(B HTTP/1.1 $B$N5,3J$K5-=R$5$l$F$$$k%3%s%F%s%H%M%4%7%(!<%7%g%s$r(B
- $B%5%]!<%H$7$F$$$^$9!#(B
- $B%V%i%&%6$K$h$jDs6!$5$l$?%a%G%#%"%?%$%W!"(B
- $B8@8l!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0$NM%@h798~$K4p$E$$$F!"(B
- $B:GE,$J%j%=!<%9$NI=8=$rA*Br$G$-$^$9!#(B
- $B$^$?!"IT40A4$J%M%4%7%(!<%7%g%s>pJs$rAw$C$F$/$k%V%i%&%6$+$i$N%j%/%(%9%H$r(B
- $B$b$C$H8-$/<h$j07$($k$h$&!"$$$/$D$+5!G=$b<BAu$7$F$"$j$^$9!#(B</p>
-
- <p>$B%3%s%F%s%H%M%4%7%(!<%7%g%s$O(B
- <module>mod_negotiation</module>
- $B%b%8%e!<%k$K$h$C$FDs6!$5$l$F$$$F!"%G%U%)%k%H$GAH$_9~$^$l$F$$$^$9!#(B</p>
-</summary>
-
-<section id="about"><title>$B%3%s%F%s%H%M%4%7%(!<%7%g%s$K$D$$$F(B</title>
-
- <p>$B%j%=!<%9$O!"4v$D$+0[$J$C$?I=8=$GMxMQ$G$-$k>l9g$,$"$j$^$9!#(B
- $BNc$($P!"0[$J$k8@8l$d0[$J$k%a%G%#%"%?%$%W!"(B
- $B$^$?$O$=$l$i$NAH$_9g$o$;$GMxMQ$G$-$k$+$bCN$l$^$;$s!#(B
- $B$b$C$H$bE,$7$?A*Br$r$9$kJ}K!$N0l$D$K$O!"%$%s%G%C%/%9%Z!<%8$r(B
- $B%f!<%6$K8+$;$F!"%f!<%6$KA*$s$G$b$i$&J}K!$,$"$j$^$9!#(B
- $B$7$+$7!"%5!<%P$,<+F0E*$KA*$V$3$H$,$G$-$k>l9g$,B?$/$"$j$^$9!#(B
- $B$3$l$O!"%V%i%&%6$,%j%/%(%9%HKh$K!"(B
- $B$I$NI=8=$rSO9%$9$k$+$H$$$&>pJs$rAw$k$3$H$GF0:n$7$F$$$^$9!#(B
- $BNc$($P%V%i%&%6$O!"2DG=$J$i%U%i%s%98l$G>pJs$r8+$?$$!"(B
- $BIT2DG=$J$i$=$NBe$o$j$K1Q8l$G$b$h$$$H!"(B
- $B<+J,$NSO9%$rCN$i$;$k$3$H$,$G$-$^$9!#(B
- $B%V%i%&%6$O%j%/%(%9%H$N%X%C%@$G<+J,$NM%@h798~$rCN$i$;$^$9!#(B
- $B%U%i%s%98l$N$_$NI=8=$rMW5a$9$k>l9g$O!"%V%i%&%6$O<!$rAw$j$^$9!#(B</p>
-
-<example>Accept-Language: fr</example>
-
- <p>$B$3$NM%@h798~$O!"A*Br2DG=$JI=8=$,B8:_$7$F!"(B
- $B8@8l$K$h$C$FMM!9$JI=8=$,$"$k>l9g$K$N$_E,MQ$5$l$k(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <p>$B$b$C$HJ#;($J%j%/%(%9%H$NNc$r5s$2$^$7$g$&!#(B
- $B$3$N%V%i%&%6$O%U%i%s%98l$H1Q8l$r<u$1IU$1$k!"$7$+$7%U%i%s%98l$r9%$`!"(B
- $B$=$7$FMM!9$J%a%G%#%"%?%$%W$r<u$1IU$1$k$,!"(B
- $B%W%l%$%s%F%-%9%H$dB>$N%?%$%W$h$j$O(B HTML $B$r9%$`!"(B
- $BB>$N%a%G%#%"%?%$%W$h$j$O(B GIF $B$d(B JPEG $B$r9%$`!"$7$+$7:G=*<jCJ$H$7$F(B
- $BB>$N%a%G%#%"%?%$%W$b<u$1IU$1$k!"$H@_Dj$5$l$F$$$^$9!#(B</p>
-
-<example>
- Accept-Language: fr; q=1.0, en; q=0.5<br />
- Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</example>
-
- <p>Apache $B$O(B HTTP/1.1 $B5,3J$GDj5A$5$l$F$$$k(B 'server
- driven' $B%3%s%F%s%H%M%4%7%(!<%7%g%s$r%5%]!<%H$7$F$$$^$9!#(B
- <code>Accept</code>, <code>Accept-Language</code>,
- <code>Accept-Charset</code>, <code>Accept-Encoding</code>
- $B%j%/%(%9%H%X%C%@$r40A4$K%5%]!<%H$7$F$$$^$9!#(BApache $B$O(B
- 'transparent' $B%3%s%F%s%H%M%4%7%(!<%7%g%s$b%5%]!<%H$7$F$$$^$9$,!"(B
- $B$3$l$O(B RFC 2295 $B$H(B RFC 2296 $B$GDj5A$5$l$F$$$k;n83E*$J(B
- $B%M%4%7%(!<%7%g%s%W%m%H%3%k$G$9!#(B
- $B$3$l$i$N(B RFC$B$GDj5A$5$l$F$$$k(B 'feature negotiation'
- $B$O%5%]!<%H$7$F$$$^$;$s!#(B</p>
-
- <p><strong>$B%j%=!<%9(B</strong>$B$H$O(B URI
- $B$GFCDj$5$l$k35G0>e$N$b$N$N$3$H$G$9(B (RFC 2396)$B!#(B Apache
- $B$N$h$&$J(B HTTP $B%5!<%P$O!"$=$NL>A06u4V$NCf$G$N(B
- $B%j%=!<%9$N(B<strong>$BI=8=(B</strong>$B$X$N%"%/%;%9$rDs6!$7$^$9!#(B
- $B$=$l$>$l$NI=8=$O(B
- $BDj5A$5$l$?%a%G%#%"%?%$%W!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0Ey$N(B
- $BIUB0$7$?!"%P%$%HNs$N7A<0$G$9!#(B
- $B$=$l$>$l$N%j%=!<%9$O$"$k;~E@$G(B 0 $B8D!"(B1 $B8D!"$=$l0J>e$NI=8=$H(B
- $B4XO"IU$1$i$l$k2DG=@-$,$"$j$^$9!#J#?t$NI=8=$,MxMQ$G$-$k>l9g$O!"(B
- $B%j%=!<%9$O(B<strong>$B%M%4%7%(!<%7%g%s2DG=$G$"$k(B</strong>$B$H$5$l!"(B
- $B8D!9$NI=8=$O(B <strong>variant</strong> $B$H8F$P$l$^$9!#(B
- $B%M%4%7%(!<%7%g%s2DG=$J%j%=!<%9$N(B variant $B$,0[$J$k!"(B
- $B$=$N>uBV$r;X$7$F!"(B
- $B%M%4%7%(!<%7%g%s$N(B<strong>$B<!85(B</strong>$B$H8F$S$^$9!#(B</p>
-</section>
-
-<section id="negotiation"><title>Apache $B$K$*$1$k%M%4%7%(!<%7%g%s(B</title>
-
- <p>$B%j%=!<%9$r%M%4%7%(!<%7%g%s$9$k$?$a$K$O!"(B
- $B%5!<%P$O(B variant $B$=$l$>$l$K$D$$$F$N>pJs$rCN$C$F$*$/I,MW$,$"$j$^$9!#(B
- $B$3$l$O0J2<$NFs$D$NJ}K!$N$I$A$i$+$G9T$o$l$^$9!#(B</p>
-
- <ul>
- <li>$B%?%$%W%^%C%W(B
- (<em>$B$9$J$o$A(B</em> <code>*.var</code> $B%U%!%$%k(B)
- $B$r;H$&J}K!!#(B $B$3$l$O(B variant
- $B$rL@<(E*$K5s$2$F$$$k%U%!%$%k$r;XDj$7$^$9!#(B</li>
-
- <li>'Multiviews'
- $B$r;H$C$F!"%5!<%P$,0EL[$NFb$K%U%!%$%kL>$K%Q%?!<%s>H9g$r(B
- $B9T$J$C$F$=$N7k2L$+$iA*Br$9$kJ}K!!#(B</li>
- </ul>
-
- <section id="type-map"><title>type-map $B%U%!%$%k$r;H$&(B</title>
-
- <p>$B%?%$%W%^%C%W$O(B <code>type-map</code> $B%O%s%I%i(B
- ($B$b$7$/$O!"8E$$(B Apache
- $B$N@_Dj$H2<0L8_49$G$"$k(B MIME $B%?%$%W(B
- <code>application/x-type-map</code>)
- $B$K4XO"IU$1$i$l$?%I%-%e%a%s%H$G$9!#(B
- $B$3$N5!G=$r;H$&$?$a$K$O!"$"$k%U%!%$%k$N3HD%;R$r(B
- <code>type-map</code>
- $B$H$7$FDj5A$9$k$h$&$J%O%s%I%i$r!"(B
- $B@_Dj%U%!%$%kCf$KCV$/I,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$3$l$O(B</p>
-
-<example>AddHandler type-map .var</example>
-
- <p>$B$r%5!<%P@_Dj%U%!%$%kCf$K=q$/$3$H$,0lHVNI$$J}K!$G$9!#(B</p>
-
- <p>$B%?%$%W%^%C%W%U%!%$%k$O5-=R$9$k%j%=!<%9$HF1$8L>A0$r;}$C$F$$$F!"(B
- $BMxMQ2DG=$J(B variant $B$=$l$>$l$N%(%s%H%j$r;}$C$F$$$kI,MW$,$"$j$^$9!#(B
- $B$=$7$F!"$3$N%(%s%H%j$OO"B3$7$?(B HTTP $B$N%X%C%@9T$G9=@.$5$l$^$9!#(B
- $B0[$J$k(B variant $B$N$?$a$N%(%s%H%j$O6u9T$G6h@Z$i$l$F$$$^$9!#(B
- $B%(%s%H%jCf$K6u9T$,J#?t$"$C$F$O$$$1$^$;$s!#(B
- $B=,47E*$K$O!"%^%C%W%U%!%$%k$OA4BN$r7k9g$7$?$b$N$N%(%s%H%j$+$i;O$^$j$^$9(B
- ($B$7$+$7$3$l$OI,?\$G$O$J$/!"$"$C$?$H$7$F$bL5;k$5$l$k$b$N$G$9(B)$B!#(B
- $B<!$KNc$r<($7$^$9!#$3$N%U%!%$%k$O%j%=!<%9(B <code>foo</code>
- $B$r5-=R$7$F$$$k$N$G!"(B<code>foo.var</code> $B$H$$$&L>A0$K$J$j$^$9!#(B</p>
-
-<example>
- URI: foo<br />
-<br />
- URI: foo.en.html<br />
- Content-type: text/html<br />
- Content-language: en<br />
-<br />
- URI: foo.fr.de.html<br />
- Content-type: text/html;charset=iso-8859-2<br />
- Content-language: fr, de<br />
-</example>
- <p>$B$?$H$((B MultiViews $B$r;HMQ$9$k$h$&$K$J$C$F$$$?$H$7$F$b!"(B
- $B%U%!%$%kL>$N3HD%;R$h$j%?%$%W%^%C%W$NJ}$,M%@h8"$r;}$D$H$$$&$3$H$K$b(B
- $BCm0U$7$F$/$@$5$$!#(B
- variant $B$NIJ<A$,0c$&$H$-$O!"$3$N2hA|$N$h$&$K(B (JPEG, GIF, ASCII
- $B%"!<%H$,$"$j$^$9(B) $B%a%G%#%"%?%$%W$N(B "qs"
- $B%Q%i%a!<%?$G;XDj$5$l$^$9!#(B</p>
-
-<example>
- URI: foo<br />
-<br />
- URI: foo.jpeg<br />
- Content-type: image/jpeg; qs=0.8<br />
-<br />
- URI: foo.gif<br />
- Content-type: image/gif; qs=0.5<br />
-<br />
- URI: foo.txt<br />
- Content-type: text/plain; qs=0.01<br />
-</example>
-
- <p>qs $BCM$NHO0O$O(B 0.000 $B$+$i(B 1.000 $B$G$9!#(Bqs $BCM$,(B
- 0.000 $B$N(B variant $B$O7h$7$F(B
- $BA*Br$5$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B'qs' $BCM$N$J$$(B variant
- $B$O(B qs $BCM(B 1.0 $B$r(B $BM?$($i$l$^$9!#(Bqs
- $B%Q%i%a!<%?$O%/%i%$%"%s%H$NG=NO$K4X78L5$/!"B>$N(B variant $B$H(B
- $BHf3S$7$?$H$-$N(B variant
- $B$NAjBPE*$J!VIJ<A!W$r<($7$^$9!#(B
- $BNc$($P!"<L??$rI=8=$7$h$&$H$7$F$$$k$H$-$O(B JPEG
- $B%U%!%$%k$NJ}$,IaDL$O(B ASCII
- $B%U%!%$%k$h$j$b9b$$IJ<A$K$J$j$^$9!#$7$+$7!"%j%=!<%9$,85!9(B
- ASCII $B%"!<%H$GI=8=$5$l$F$$$k$H$-$O!"(BASCII $B%U%!%$%k$N(B
- $BJ}$,(B JPEG $B%U%!%$%k$h$j$b9b$$IJ<A$K$J$j$^$9!#$3$N$h$&$K!"(Bqs
- $B$O(B $BI=8=$5$l$k%j%=!<%9$N@-<A$K$h$C$F(B variant
- $BKh$KFCM-$NCM$r<h$j$^$9!#(B</p>
-
- <p>$BG'<1$5$l$k%X%C%@$N0lMw$O(B
- <a href="mod/mod_negotiation.html#typemaps">mod_negotiation</a>
- $B%I%-%e%a%s%H$K$"$j$^$9!#(B</p>
-</section>
-
-<section id="multiviews"><title>Multiviews</title>
-
- <p><code>MultiViews</code> $B$O%G%#%l%/%H%jKh$N%*%W%7%g%s$G!"(B
- <code>httpd.conf</code>$B%U%!%$%k$N(B
- <directive module="core" type="section">Directory</directive>,
- <directive module="core" type="section">Location</directive>,
- <directive module="core" type="section">Files</directive>
- $B%;%/%7%g%sCf$d!"(B(<directive module="core">AllowOverride</directive>
- $B$,E,@Z$JCM$K(B $B@_Dj$5$l$F$$$k$H(B) <code>.htaccess</code>
- $B%U%!%$%k$G(B <directive module="core">Options</directive>
- $B%G%#%l%/%F%#%V$K$h$C$F@_Dj$9$k$3$H$,$G$-$^$9!#(B
- <code>Options All</code> $B$O(B
- <code>MultiViews</code>
- $B$r%;%C%H$7$J$$$3$H$KCm0U$7$F$/$@$5$$!#L@<(E*$K(B
- $B$=$NL>A0$r=q$/I,MW$,$"$j$^$9!#(B</p>
-
- <p><code>MultiViews</code> $B$N8z2L$O0J2<$N$h$&$K$J$j$^$9(B:
- $B%5!<%P$,(B <code>/some/dir/foo</code>
- $B$X$N%j%/%(%9%H$r<u$1<h$j!"(B<code>/some/dir</code> $B$G(B
- <code>MultiViews</code> $B$,M-8z$G$"$C$F!"(B
- <code>/some/dir/foo</code> $B$,B8:_(B<em>$B$7$J$$(B</em>$B>l9g!"(B
- $B%5!<%P$O%G%#%l%/%H%j$rFI$s$G(B <code>foo.*</code>
- $B$K$"$F$O$^$kA4$F$N%U%!%$%k$rC5$7!"(B
- $B;v<B>e$=$l$i$N%U%!%$%k$r%^%C%W$9$k%?%$%W%^%C%W$r:n$j$^$9!#(B
- $B$=$N$H$-!"%a%G%#%"%?%$%W$H%3%s%F%s%H%(%s%3!<%G%#%s%0$O!"$=$N%U%!%$%kL>$r(B
- $BD>@\;XDj$7$?$H$-$HF1$8$b$N$,3d$jEv$F$i$l$^$9!#(B
- $B$=$l$+$i%/%i%$%"%s%H$NMW5a$K0lHV9g$&$b$N$rA*$S$^$9!#(B</p>
-
- <p>$B%5!<%P$,%G%#%l%/%H%j$N:w0z$r:n$m$&$H$7$F$$$k>l9g!"(B
- <code>MultiViews</code>
- $B$O(B <directive module="mod_dir">DirectoryIndex</directive>
- $B%G%#%l%/%F%#%V$G;XDj$5$l$?%U%!%$%k$rC5$92aDx$K$b(B
- $BE,MQ$5$l$^$9!#@_Dj%U%!%$%k$K(B</p>
-<example>DirectoryIndex index</example>
- <p>$B$,=q$+$l$F$$$F!"(B<code>index.html</code> $B$H(B
- <code>index.html3</code> $B$,(B
- $BN>J}B8:_$7$F$$$k$H!"%5!<%P$O$=$NCf$+$i$I$A$i$+$rE,Ev$KA*$S$^$9!#(B
- $B$b$7$=$NN>J}$,B8:_$;$:$K(B <code>index.cgi</code>
- $B$,B8:_$7$F$$$k$H!"(B $B%5!<%P$O$=$l$r<B9T$7$^$9!#(B</p>
-
- <p>$B$b$7%G%#%l%/%H%j$rFI$s$G$$$k:]$K!"(B
- $BJ8;z%;%C%H!"%3%s%F%s%H%?%$%W!"8@8l!"%(%s%3!<%G%#%s%0$r(B
- $B;XDj$9$k$?$a$N(B <code>mod_mime</code>
- $B$GG'<1$G$-$k3HD%;R$r;}$?$J$$%U%!%$%k$,8+$D$+$k$H!"7k2L$O(B
- <directive module="mod_mime">MultiViewsMatch</directive>
- $B%G%#%l%/%F%#%V$N@_Dj$K0MB8$7$^$9!#$3$N%G%#%l%/%F%#%V$O(B
- $B%O%s%I%i!"%U%#%k%?!"B>$N%U%!%$%k3HD%;R%?%$%W$N$I$l$,(B
- MultiViews $B%M%4%7%(!<%7%g%s$G;HMQ$G$-$k$+$r7hDj$7$^$9!#(B</p>
-</section>
-</section>
-
-<section id="methods"><title>$B%M%4%7%(!<%7%g%sJ}K!(B</title>
-
- <p>Apache $B$O%j%=!<%9$N(B variant $B$N0lMw$r!"%?%$%W%^%C%W%U%!%$%k$+(B
- $B%G%#%l%/%H%jFb$N%U%!%$%kL>$+$i$+$G<hF@$7$?8e!"(B
- $B!V:GE,$J!W(B variant $B$r7hDj$9$k$?$a$KFs$D$NJ}K!$N(B
- $B$I$A$i$+$r5/F0$7$^$9!#(B
- Apache $B$N%3%s%F%s%H%M%4%7%(!<%7%g%s$N5!G=$r;H$&$?$a$K!"(B
- $B$I$N$h$&$K$7$F$3$ND4Dd$,9T$o$l$k$+>\:Y$rCN$kI,MW$O$"$j$^$;$s!#(B
- $B$7$+$7$J$,$i!"$3$NJ8=q$N;D$j$G$O4X?4$N$"$k?M$N$?$a$K!"(B
- $B;HMQ$5$l$F$$$kJ}K!$K$D$$$F@bL@$7$F$$$^$9!#(B</p>
-
- <p>$B%M%4%7%(!<%7%g%sJ}K!$OFs$D$"$j$^$9!#(B</p>
-
- <ol>
- <li>$BDL>o$O(B <strong>Apache $B$N%"%k%4%j%:%`$rMQ$$$?(B Server
- driven negotiation</strong> $B$,;HMQ$5$l$^$9!#(BApache
- $B$N%"%k%4%j%:%`$O8e$K>\:Y$K@bL@$5$l$F$$$^$9!#(B
- $B$3$N%"%k%4%j%:%`$,;HMQ$5$l$?>l9g!"(BApache
- $B$O$h$jNI$$7k2L$K$J$k$h$&$K!"FCDj$N<!85$K$*$$$FIJ<A$NCM$r(B
- $B!VJQ$($k!W$3$H$,$G$-$^$9!#(BApache
- $B$,IJ<A$NCM$rJQ$($kJ}K!$O8e$G>\:Y$K@bL@$5$l$F$$$^$9!#(B</li>
-
- <li>RFC 2295
- $B$GDj5A$5$l$F$$$k5!9=$rMQ$$$F%V%i%&%6$,FC$K;XDj$7$?>l9g!"(B
- <strong>transparent content negotiation</strong>
- $B$,;HMQ$5$l$^$9!#$3$N%M%4%7%(!<%7%g%sJ}K!$G$O!"!V:GE,$J!W(B
- variant $B$N7hDj$r%V%i%&%6$,40A4$K@)8f$9$k$3$H$,$G$-$^$9!#(B
- $B$G$9$+$i!"7k2L$O%V%i%&%6$,;HMQ$7$F$$$k%"%k%4%j%:%`$K0MB8$7$^$9!#(B
- Transparent negotiation $B$N=hM}$N2aDx$G!"%V%i%&%6$O(B RFC 2296
- $B$G(B $BDj5A$5$l$F$$$k(B 'remote variant selection algorithm'
- $B$r<B9T$9$k$h$&$KMj$`$3$H$,$G$-$^$9!#(B</li>
- </ol>
-
-<section id="dimensions"><title>$B%M%4%7%(!<%7%g%s$N<!85(B</title>
-
- <table>
- <columnspec><column width=".15"/><column width=".85"/></columnspec>
- <tr valign="top">
- <th>$B<!85(B</th>
-
- <th>$B@bL@(B</th>
- </tr>
-
- <tr valign="top">
- <td>$B%a%G%#%"%?%$%W(B</td>
-
- <td>$B%V%i%&%6$O(B <code>Accept</code>
- $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B
- $B%"%$%F%`$=$l$>$l$O!"4XO"$7$?IJ<A?tCM$r;}$D$3$H$,$G$-$^$9!#(B
- variant $B$N@bL@$bIJ<A?tCM$r;}$D$3$H$,$G$-$^$9(B
- ("qs" $B%Q%i%a!<%?$r$4Mw2<$5$$(B)$B!#(B</td>
- </tr>
-
- <tr valign="top">
- <td>$B8@8l(B</td>
-
- <td>$B%V%i%&%6$O(B <code>Accept-Language</code>
- $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B
- $BMWAG$=$l$>$l$KIJ<A?tCM$r;}$?$;$k$3$H$,$G$-$^$9!#(B
- variants $B$O(B 0 $B$+(B 1 $B$D$+$=$l0J>e$N8@8l$H(B
- $B4XO"$E$1$k$3$H$,$G$-$^$9!#(B</td>
- </tr>
-
- <tr valign="top">
- <td>$B%(%s%3!<%G%#%s%0(B</td>
-
- <td>$B%V%i%&%6$O(B <code>Accept-Encoding</code>
- $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B
- $BMWAG$=$l$>$l$KIJ<A?tCM$r;}$?$;$k$3$H$,$G$-$^$9!#(B</td>
- </tr>
-
- <tr valign="top">
- <td>$BJ8;z%;%C%H(B</td>
-
- <td>$B%V%i%&%6$O(B <code>Accept-Charset</code>
- $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B
- $BMWAG$=$l$>$l$KIJ<A?tCM$r;}$?$;$k$3$H$,$G$-$^$9!#(B
- variant $B$O%a%G%#%"%?%$%W$N%Q%i%a!<%?$H$7$FJ8;z%;%C%H$r(B
- $B;XDj$9$k$3$H$b$G$-$^$9!#(B</td>
- </tr>
- </table>
-</section>
-
-<section id="algorithm"><title>Apache $B%M%4%7%(!<%7%g%s%"%k%4%j%:%`(B</title>
-
- <p>$B%V%i%&%6$KJV$9!V:GE,$J!W(Bvariant $B$r(B ($B$b$7$"$l$P(B) $BA*Br$9$k$h$&$K(B
- Apache $B$O<!$N%"%k%4%j%:%`$r;H$&$3$H$,$G$-$^$9!#(B
- $B$3$N%"%k%4%j%:%`$r@_Dj$K$h$jJQ99$9$k$3$H$O$G$-$^$;$s!#(B
- $B<!$N$h$&$KF0:n$7$^$9(B:</p>
-
- <ol>
- <li>$B$^$:$O$8$a$K!"%M%4%7%(!<%7%g%s$N<!85$=$l$>$l$K$D$$$FE,@Z$J(B
- <em>Accept*</em> $B%X%C%@%U%#!<%k%I$rD4$Y!"(B
- variant $B$=$l$>$l$KIJ<A$r3d$jEv$F$^$9!#(B
- $B$b$7$"$k<!85$N(B <em>Accept*</em> $B%X%C%@$G$=$N(B variant
- $B$,5vMF$G$-$J$$$3$H$,<($5$l$F$$$l$P!"$=$l$r:o=|$7$^$9!#(B
- variant $B$,0l$D$b;D$C$F$$$J$1$l$P!"%9%F%C%W(B 4 $B$K9T$-$^$9!#(B</li>
-
- <li>
- $B>C5nK!$G!V:GE,$J!W(B variant $B$rA*$S$^$9!#(B
- $B<!$N%F%9%H$,=gHV$KE,MQ$5$l$^$9!#(B
- $B%F%9%H$GA*Br$5$l$J$+$C$?(B variant $B$O:o=|$5$l$F$$$-$^$9!#(B
- $B%F%9%H8e(B variant $B$,0l$D$@$1;D$C$F$$$l$P!"$=$l$r:GE,$J$b$N$H$7$F(B
- $B%9%F%C%W(B 3 $B$K?J$_$^$9!#(B
- $BJ#?t(B variant $B$,;D$C$F$$$l$P!"<!$N%F%9%H$K?J$_$^$9!#(B
-
- <ol>
- <li>variant $B$N%a%G%#%"%?%$%W$NIJ<A?tCM$H(B <code>Accept</code>
- $B%X%C%@$NIJ<A?tCM$H$N@Q$r7W;;$7$F!":G9bCM$N(B variant
- $B$rA*$S$^$9!#(B</li>
-
- <li>$B8@8lIJ<A?tCM$,:G9b$N(B variant $B$rA*$S$^$9!#(B</li>
-
- <li>($B$b$7$"$l$P(B) <code>Accept-Language</code> $B%X%C%@$N8@8l=g$+!"(B
- ($B$b$7$"$l$P(B)
- <directive module="mod_negotiation">LanguagePriority</directive>
- $B%G%#%l%/%F%#%V$N8@8l=g$G:GE,$J8@8l$N(B variant $B$rA*$S$^$9!#(B</li>
-
- <li>$B:G9b!V%l%Y%k!W$N%a%G%#%"%Q%i%a!<%?(B
- (text/html $B%a%G%#%"%?%$%W$N%P!<%8%g%s$rM?$($k$?$a$K;H$o$l$^$9(B)
- $B$r;}$D(B variant $B$rA*$S$^$9!#(B</li>
-
- <li><code>Accept-Charset</code> $B%X%C%@9T$GM?$($i$l$F$$$k:G9b$NJ8;z%;%C%H(B
- $B%a%G%#%"%Q%i%a!<%?$r;}$D(B variant $B$rA*$S$^$9!#(B
- $BL@<(E*$K=|30$5$l$F$$$J$$8B$j!"(BISO-8859-1
- $B$,5vMF$5$l$k$h$&$K$J$C$F$$$^$9!#(B
- <code>text/*</code> $B%a%G%#%"%?%$%W$G$"$k$1$l$I$b(B
- $BFCDj$NJ8;z%;%C%H$KL@<(E*$K4XO"$E$1$i$l$F$$$k$o$1$G$O$J$$(B
- variant $B$O(B ISO-8859-1 $B$G$"$k$H2>Dj$5$l$^$9!#(B</li>
-
- <li>ISO-8859-1 <em>$B$G$O$J$$(B</em>$BJ8;z%;%C%H%a%G%#%"%Q%i%a!<%?$H(B
- $B4XO"$E$1$i$l$F$$$k(B variant $B$rA*$S$^$9!#(B
- $B$=$N$h$&$J(B variant $B$,$J$$>l9g$O!"Be$o$j$KA4$F$N(B
- variant $B$rA*$S$^$9!#(B</li>
-
- <li>$B:GE,$J%(%s%3!<%G%#%s%0$N(B variant $B$rA*$S$^$9!#(B
- $B$b$7(B user-agent $B$,5vMF$9$k%(%s%3!<%G%#%s%0$,$"$l$P!"(B
- $B$=$N(B variant $B$N$_$rA*$S$^$9!#(B
- $B$=$&$G$O$J$/!"$b$7%(%s%3!<%I$5$l$?$b$N$H$=$&$G$J$$(B
- variant $B$,:.$6$C$FB8:_$7$F$$$?$i%(%s%3!<%I$5$l$F$$$J$$(B
- variant $B$N$_$rA*$S$^$9!#(B
- variant $B$,A4It%(%s%3!<%I$5$l$F$$$k$+(B
- variant $B$,A4It%(%s%3!<%I$5$l$F$$$J$$$H$$$&>l9g$O!"(B
- $BA4$F$N(B variant $B$rA*$S$^$9!#(B</li>
-
- <li>$BFbMF$N:G$bC;$$(B variant $B$rA*$S$^$9!#(B</li>
-
- <li>$B;D$C$F$$$k(B variant $B$N:G=i$N$b$N$rA*$S$^$9!#(B
- $B%?%$%W%^%C%W%U%!%$%k$N:G=i$K%j%9%H$5$l$F$$$k$+!"(B
- variant $B$,%G%#%l%/%H%j$+$i:G=i$KFI$_9~$^$l$k;~$K(B
- ASCII$B=g$G%=!<%H$7$F%U%!%$%kL>$,@hF,$K$J$C$?$+!"$N$I$A$i$+$G$9!#(B</li>
- </ol>
- </li>
-
- <li>$B%"%k%4%j%:%`$r;H$C$F0l$D$N!V:GE,$J!W(Bvariant $B$rA*$S$^$7$?$N$G!"(B
- $B$=$l$r1~Ez$H$7$FJV$7$^$9!#%M%4%7%(!<%7%g%s$N<!85$r;XDj$9$k$?$a$K(B
- HTTP $B%l%9%]%s%9%X%C%@(B <code>Vary</code> $B$,@_Dj$5$l$^$9(B
- ($B%j%=!<%9$N%-%c%C%7%e$r$9$k;~$K!"(B
- $B%V%i%&%6$d%-%c%C%7%e$O$3$N>pJs$r;H$&$3$H$,$G$-$^$9(B)$B!#(B
- $B0J>e$G=*$o$j!#(B</li>
-
- <li>$B$3$3$KMh$?$H$$$&$3$H$O!"(Bvariant $B$,0l$D$bA*Br$5$l$J$+$C$?(B
- ($B%V%i%&%6$,5vMF$9$k$b$N$,$J$+$C$?$?$a(B) $B$H$$$&$3$H$G$9!#(B
- 406 $B%9%F!<%?%9(B ("No Acceptable representation" $B$r0UL#$9$k(B)
- $B$,!"MxMQ2DG=$J(B variant $B$N%j%9%H$N$D$$$?(B HTML
- $B%I%-%e%a%s%H$H$H$b$KJV$5$l$^$9!#(B
- $BAj0c$N<!85$r<($9(B HTTP <code>Vary</code> $B%X%C%@$b@_Dj$5$l$^$9!#(B</li>
- </ol>
-</section>
-</section>
-
-<section id="better"><title>$BIJ<A$NCM$rJQ$($k(B</title>
-
- <p>$B>e5-$N(B Apache $B%M%4%7%(!<%7%g%s%"%k%4%j%:%`$N873J$J2r<a$G(B
- $BF@$i$l$k$G$"$m$&CM$+$i!"(BApache $B$OIJ<A?tCM$r;~!9JQ$($^$9!#(B
- $B$3$l$O!"$3$N%"%k%4%j%:%`$G40A4$G$O$J$$!"$"$k$$$O@53N$G$J$$>pJs$rAw$k(B
- $B%V%i%&%68~$1$K$h$j$h$$7k2L$rF@$k$?$a$K9T$o$l$^$9!#(B
- $B$+$J$j%]%T%e%i!<$J%V%i%&%6$G!"$b$7$J$$$H4V0c$C$?(B variant
- $B$rA*Br$9$k7k2L$K$J$C$F$7$^$&$h$&$J(B <code>Accept</code>
- $B%X%C%@>pJs$rAw$k$b$N$b$"$j$^$9!#(B
- $B%V%i%&%6$,40A4$G@5$7$$>pJs$rAw$C$F$$$l$P!"(B
- $B$3$N?tCMJQ2=$OE,MQ$5$l$^$;$s!#(B</p>
-
-<section id="wildcards"><title>$B%a%G%#%"%?%$%W$H%o%$%k%I%+!<%I(B</title>
-
- <p><code>Accept:</code> $B%j%/%(%9%H%X%C%@$O%a%G%#%"%?%$%W$NM%@h798~$r;XDj$7$^$9!#(B
- $B$3$l$O$^$?!"(B"image/*" $B$d(B "*/*"
- $B$H$$$C$?!V%o%$%k%I%+!<%I!W%a%G%#%"%?%$%W$r4^$`$3$H$,$G$-$^$9!#(B
- $B$3$3$G(B * $B$OG$0U$NJ8;zNs$K%^%C%A$7$^$9!#(B
- $B$G$9$+$i!"<!$N(B:</p>
-
-<example>Accept: image/*, */*</example>
-
- <p>$B$r4^$`%j%/%(%9%H$O!"(B"image/" $B$G$O$8$^$k%?%$%WA4$F$,5vMF$G$-$k!"(B
- $B$=$7$FB>$N$I$s$J%?%$%W$b5vMF$G$-$k(B
- ($B$3$N>l9g$O$8$a$N(B "image/*" $B$O>iD9$K$J$j$^$9(B)
- $B$3$H$r<($7$^$9!#(B
- $B07$&$3$H$N$G$-$kL@<(E*$J%?%$%W$K2C$($F!"5!3#E*$K(B
- $B%o%$%k%I%+!<%I$rAw$k%V%i%&%6$b$"$j$^$9!#Nc$($P(B:</p>
-
-<example>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</example>
- <p>$B$3$&$9$k$3$H$NA@$$$O!"L@<(E*$K%j%9%H$7$F$$$k%?%$%W$,M%@h$5$l$k$1$l$I$b!"(B
- $B0[$J$kI=8=$,MxMQ2DG=$G$"$l$P$=$l$G$bNI$$!"$H$$$&$3$H$G$9!#(B
- $B$7$+$7$J$,$i!">e$N4pK\E*$J%"%k%4%j%:%`$G$O!"(B
- */* $B%o%$%k%I%+!<%I$OB>$NA4$F$N%?%$%W$HA4$/F1Ey$J$N$GM%@h$5$l$^$;$s!#(B
- $B%V%i%&%6$O(B */* $B$K$b$C$HDc$$IJ<A(B ($BM%@h(B)
- $BCM$rIU$1$F%j%/%(%9%H$rAw$k$Y$-$J$N$G$9!#Nc$($P(B:</p>
-<example>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</example>
- <p>$BL@<(E*$J%?%$%W$K$OIJ<A?tCM$,IU$1$i$l$F$$$^$;$s$N$G!"(B
- $B%G%U%)%k%H$N(B 1.0 ($B:G9bCM(B) $B$NM%@h$K$J$j$^$9!#(B
- $B%o%$%k%I%+!<%I(B */* $B$ODc$$M%@hEY(B 0.01 $B$rM?$($i$l$F$$$k$N$G!"(B
- $BL@<(E*$K%j%9%H$5$l$F$$$k%?%$%W$K9gCW$9$k(B variant $B$,$J$$>l9g$K$N$_!"(B
- $BB>$N%?%$%W$,JV$5$l$^$9!#(B</p>
-
- <p>$B$b$7(B <code>Accept:</code> $B%X%C%@$,(B q $BCM$rA4$/4^$s$G(B<em>$B$$$J$1$l$P(B</em>$B!"(B
- $BK>$_$N5sF0$r$9$k$?$a$K!"(B
- Apache $B$O(B "*/*" $B$,$"$l$P(B 0.01 $B$N(B q $BCM$r@_Dj$7$^$9!#(B
- $B$^$?!"(B"type/*" $B$N7A$N%o%$%k%I%+!<%I$K$O(B 0.02 $B$N(B q $BCM$r@_Dj$7$^$9(B
- ($B$G$9$+$i$3$l$i$O(B "*/*" $B$N%^%C%A$h$j$bM%@h$5$l$^$9(B)$B!#(B
- $B$b$7(B <code>Accept:</code> $B%X%C%@Cf$N%a%G%#%"%?%$%W$N$I$l$+$,(B q
- $BCM$r4^$s$G$$$l$P!"$3$l$i$NFC<l$JCM$OE,1~(B<em>$B$5$l$:(B</em>$B!"(B
- $B@5$7$$>pJs$rAw$k%V%i%&%6$+$i$N%j%/%(%9%H$O4|BTDL$j$K(B
- $BF0:n$9$k$h$&$K$J$j$^$9!#(B</p>
-</section>
-
-<section id="exceptions"><title>$B8@8l%M%4%7%(!<%7%g%s$NNc30=hM}(B</title>
-
- <p>Apache 2.0 $B$G$O?7$?$K!"8@8l%M%4%7%(!<%7%g%s$,E,9g$9$k$b$N$r(B
- $B8+$D$1$k$N$K<:GT$7$?;~$K!"M%2m$K%U%)!<%k%P%C%/$G$-$k$h$&$J(B
- $B%M%4%7%(!<%7%g%s%"%k%4%j%:%`$,4v$D$+DI2C$5$l$^$7$?!#(B</p>
-
- <p>$B%5!<%P$N%Z!<%8$r%/%i%$%"%s%H$,%j%/%(%9%H$7$?$1$l$I$b!"(B
- $B%V%i%&%6$NAw$C$F$-$?(B <code>Accept-Language</code> $B$K9gCW$9$k%Z!<%8$,0l$D$b(B
- $B8+$D$+$i$J$+$C$?>l9g$K!"%5!<%P$O(B "No Acceptable Variant"
- $B$+(B "Multiple Choices" $B%l%9%]%s%9$r%/%i%$%"%s%H$KJV$7$^$9!#(B
- $B$3$l$i$N%(%i!<%a%C%;!<%8$rJV$5$J$$$h$&$K!"(B
- $B$3$N$h$&$J>l9g$K$O(B Apache $B$,(B <code>Accept-Language</code> $B$rL5;k$7$F!"(B
- $B%/%i%$%"%s%H$N%j%/%(%9%H$KL@<(E*$K$O9gCW$7$J$$%I%-%e%a%s%H$r(B
- $BDs6!$9$k$h$&$K@_Dj$G$-$^$9!#(B
- <directive module="mod_negotiation">ForceLanguagePriority</directive>
- $B%G%#%l%/%F%#%V$O!"$3$l$i$N%(%i!<$N0l$D$+N>J}$r%*!<%P!<%i%$%I$9$k$?$a$K(B
- $B;HMQ$G$-$F!"(B
- <directive module="mod_negotiation">LanguagePriority</directive>
- $B%G%#%l%/%F%#%V$NFbMF$r;H$C$F%5!<%P$NH=CG$rBe9T$9$k$h$&$K$G$-$^$9!#(B</p>
-
- <p>$B%5!<%P$OB>$KE,9g$9$k$b$N$,8+$D$+$i$J$1$l$P!"(B
- $B8@8l%5%V%;%C%H$GE,9g$9$k$b$N$r;n$=$&$H$b$7$^$9!#(B
- $BNc$($P%/%i%$%"%s%H$,1Q9q1Q8l$G$"$k(B <code>en-GB</code> $B8@8l$G(B
- $B%I%-%e%a%s%H$r%j%/%(%9%H$7$?>l9g!"%5!<%P$O(B HTTP/1.1
- $B5,3J$G$O!"C1$K(B <code>en</code> $B$H%^!<%/$5$l$F$$$k%I%-%e%a%s%H$r(B
- $B%^%C%A$9$k$b$N$H$9$k$3$H$ODL>o$O5v$5$l$F$$$^$;$s!#(B
- ($B1Q9q1Q8l$OM}2r$G$-$k$1$I0lHLE*$J1Q8l$OM}2r$G$-$J$$$H$$$&FI$_<j$O(B
- $B9M$($i$l$J$$$N$G!"(BAccept-Language $B%X%C%@$G(B <code>en-GB</code>
- $B$r4^$s$G(B <code>en</code> $B$r4^$^$J$$$N$O$[$\3N<B$K@_Dj$N4V0c$$$G$"$k!"(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$G$9$,IT9,$J$3$H$K!"B?$/$N%/%i%$%"%s%H$G$O%G%U%)%k%H$G(B
- $B$3$N$h$&$J@_Dj$K$J$C$F$$$^$9!#(B)
- $B$7$+$7$J$,$i!"B>$N8@8l$K$O%^%C%A$;$:!"(B"No Acceptable Variants"
- $B%(%i!<$rJV$7$?$j!"(B
- <directive module="mod_negotiation">LanguagePriority</directive>
- $B$K%U%)!<%k%P%C%/$7$h$&$H$7$F$$$k$H$-$O!"(B
- $B%5%V%;%C%H;XDj$rL5;k$7$F!"(B<code>en-GB</code> $B$r(B <code>en</code>
- $B$K%^%C%A$7$^$9!#(B
- Apache $B$O%/%i%$%"%s%H$N5vMF8@8l%j%9%H$K0EL[$K(B
- $BHs>o$KDc$$IJ<ACM$N?F8@8l$r2C$($k$3$H$K$J$j$^$9!#(B
- $B$7$+$7!"%/%i%$%"%s%H$,(B "en-GB; q=0.9, fr; q=0.8" $B$H%j%/%(%9%H$7$F!"(B
- $B%5!<%P$,(B "en" $B$H(B "fr" $B$H@_7W$5$l$?%I%-%e%a%s%H$r;}$C$F$$$k>l9g$O!"(B
- "fr" $B%I%-%e%a%s%H$,JV$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$3$N$h$&$J=hM}$O!"(BHTTP 1.1 $B5,3J$H$N@09g@-$r0];}$7$F!"(B
- $BE,@Z$K@_Dj$5$l$?%/%i%$%"%s%H$H$b$-$A$s$HF0:n$9$k$?$a$K(B
- $BI,MW$G$9!#(B</p>
-
- <p>$B$h$j9bEY$J%F%/%K%C%/(B (Cookie $B$dFC<l$J(B URL $B%Q%9Ey(B)
- $B$K$*$$$F$b%f!<%6$N8@8lA*Br$r%5%]!<%H$9$k$?$a!"(B
- Apache 2.0.47 $B$+$i$O!"(B<module>mod_negotiation</module>
- $B$,(B<a href="env.html">$B4D6-JQ?t(B</a> <code>prefer-language</code>
- $B$rG'<1$9$k$h$&$K$J$j$^$7$?!#(B
- $B$3$NJQ?t$,B8:_$7$F!"E,@Z$J8@8l%?%0$,BeF~$5$l$F$$$k$N$G$"$l$P!"(B
- <module>mod_negotiation</module> $B$O9gCW$9$k(B variant
- $B$rA*Br$7$h$&$H$7$^$9!#9gCW$9$k$b$N$,L5$1$l$P!"(B
- $BDL>o$N%M%4%7%(!<%7%g%s<j=g$,E,MQ$5$l$^$9!#(B</p>
-
- <example><title>Example</title>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1
- </example>
-</section>
-</section>
-
-<section id="extensions"><title>Transparent Content Negotiation
-$B$N3HD%(B</title>
-
-<p>Apache $B$O(B transparent content negotiation $B%W%m%H%3%k(B
-(RFC 2295) $B$r<!$N$h$&$K3HD%$7$F$$$^$9!#(B
-$BFCDj$N%3%s%F%s%H%(%s%3!<%G%#%s%0$N$_$,MxMQ2DG=$G$"$k(B variant
-$B$K0u$rIU$1$k$?$a$K!"?7$?$K(B <code>{encoding ..}</code>
-$BMWAG$r(B variant $B%j%9%HCf$K;H$C$F$$$^$9!#(B
-$B%j%9%HCf$N%(%s%3!<%I$5$l$?(B variant $B$rG'<1$7!"(B
-<code>Accept-Encoding</code> $B%j%/%(%9%H%X%C%@$K=>$C$F5vMF$5$l$k(B
-$B%(%s%3!<%I$r$b$C$?(B variant $B$O!"$I$l$G$b8uJd(B variant
-$B$H$7$F;HMQ$9$k$h$&$K!"(B
-RVSA/1.0 $B%"%k%4%j%:%`(B (RFC 2296) $B$N<BAu$,3HD%$5$l$^$7$?!#(B
-RVSA/1.0 $B$N<BAu$G$O!":GE,$J(B variant $B$,8+$D$+$k$^$G!"(B
-$B7W;;$7$?IJ<A?tCM$O>.?tE@0J2<(B 5 $B7e$^$G4]$a$^$;$s!#(B</p>
-</section>
-
-<section id="naming"><title>$B%j%s%/$HL>A0$NJQ49$K4X$9$kCm0UE@(B</title>
-
- <p>$B8@8l%M%4%7%(!<%7%g%s$r;H$C$F$$$k>l9g$O!"(B
- $B%U%!%$%k$,0l$D0J>e$N3HD%;R$r;}$F$F!"(B
- $B3HD%;R$N=gHV$ODL>o$O9MN8$5$l$J$$(B
- ($B>\:Y$O(B <a href="mod/mod_mime.html#multipleext">mod_mime</a>
- $B$r;2>H(B) $B$N$G!"(B
- $B4v$D$+$N0[$J$kL>A0$NJQ49$rA*$Y$k$3$H$K$J$j$^$9!#(B</p>
-
- <p>$BE57?E*$J%U%!%$%k$G$O!"(BMIME $B%?%$%W3HD%;R(B (<em>$BNc$($P(B</em>
- <code>html</code>) $B$r;}$C$F$$$F!"%(%s%3!<%G%#%s%03HD%;R(B
- (<em>$BNc$($P(B</em> <code>gz</code>) $B$r;}$C$F$$$k$+$b$7$l$J$/$F!"(B
- $B$3$N%U%!%$%k$K0[$J$k8@8l(B variant $B$rMQ0U$7$F$$$l$P!"(B
- $B$b$A$m$s8@8l3HD%;R(B (<em>$BNc$($P(B</em> <code>en</code>)
- $B$r;}$C$F$$$k$G$7$g$&!#(B</p>
-
- <p>$BNc(B:</p>
-
- <ul>
- <li>foo.en.html</li>
-
- <li>foo.html.en</li>
-
- <li>foo.en.html.gz</li>
- </ul>
-
- <p>$B%U%!%$%kL>$H!"$=$l$KBP$7$F;H$($k%j%s%/$H;H$($J$$%j%s%/$NNc$G$9(B:</p>
-
- <table border="1" cellpadding="8" cellspacing="0">
- <columnspec><column width=".2"/><column width=".2"/>
- <column width=".2"/></columnspec>
- <tr>
- <th>$B%U%!%$%kL>(B</th>
-
- <th>$B;H$($k%j%s%/(B</th>
-
- <th>$B;H$($J$$%j%s%/(B</th>
- </tr>
-
- <tr>
- <td><em>foo.html.en</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html</em></td>
-
- <td>foo</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.en.gz</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>foo.gz<br />
- foo.html.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html.gz</em></td>
-
- <td>foo</td>
-
- <td>foo.html<br />
- foo.html.gz<br />
- foo.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.gz.html.en</em></td>
-
- <td>foo<br />
- foo.gz<br />
- foo.gz.html</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.gz.en</em></td>
-
- <td>foo<br />
- foo.html<br />
- foo.html.gz</td>
-
- <td>foo.gz</td>
- </tr>
- </table>
-
- <p>$B>e$NI=$r8+$F!"3HD%;R$J$7$N%j%s%/(B (<em>$BNc$($P(B</em> <code>foo</code>)
- $B$,$$$D$G$b;H$($k$3$H$K5$$,IU$/$G$7$g$&!#(B
- $B$3$NMxE@$O!"%I%-%e%a%s%H$H$7$F1~Ez$9$k%U%!%$%k$N(B
- $B<B:]$N%U%!%$%k%?%$%W$r1#JC$7$F!"%j%s%/$N;2>H$rJQ99$9$k$3$H$J$/(B
- $B8e$+$i%U%!%$%k$rJQ99$G$-$k!"(B
- <em>$BNc$($P(B</em> <code>html</code> $B$+$i(B <code>shtml</code>
- $B$K!"$"$k$$$O(B <code>cgi</code> $B$KJQ99$G$-$kE@$G$9!#(B</p>
-
- <p>$B%j%s%/$K(B MIME $B%?%$%W$r;H$$B3$1$?$$(B (<em>$BNc$($P(B</em>
- <code>foo.html</code>)$B;~$O!"8@8l3HD%;R$O(B
- ($B%(%s%3!<%G%#%s%03HD%;R$b$"$l$P$=$l$b4^$a$F(B)
- MIME $B%?%$%W3HD%;R$N1&B&$K$J$1$l$P$J$j$^$;$s(B
- (<em>$BNc$($P(B</em> <code>foo.html.en</code>)$B!#(B</p>
-</section>
-
-<section id="caching"><title>$B%-%c%C%7%e$K4X$9$kCm0U;v9`(B</title>
-
- <p>$B%-%c%C%7%e$,0l$D$NI=8=$rJ]B8$7$F$$$k$H$-$O!"(B
- $B%j%/%(%9%H(B URL $B$H4XO"$E$1$i$l$F$$$^$9!#(B
- $B<!$K$=$N(B URL $B$,%j%/%(%9%H$5$l$?;~$K!"%-%c%C%7%e$O(B
- $BJ]B8$5$l$F$$$kI=8=$r;HMQ$G$-$^$9!#$7$+$7!"(B
- $B%j%=!<%9$,%5!<%P$G%M%4%7%(!<%7%g%s2DG=$G$"$l$P!"(B
- $B:G=i$N%j%/%(%9%H$G%-%c%C%7%e$5$l$FB3$/%-%c%C%7%e%R%C%H$G$O(B
- $B4V0c$C$?1~Ez$rJV$7$F$7$^$&$H$$$&$3$H$K$J$j$+$M$^$;$s!#(B
- $B$3$l$rKI$0$?$a$K!"(BApache $B$O%3%s%F%s%H%M%4%7%(!<%7%g%s$N(B
- $B8e$KJV$5$l$?1~EzA4$F$K!"(BHTTP/1.0 $B%/%i%$%"%s%H$G$O(B
- $B%-%c%C%7%eIT2DG=$N0u$r$D$1$^$9!#(B
- $B$^$?!"%M%4%7%(!<%7%g%s$5$l$?1~Ez$N%-%c%C%7%e$r2DG=$K$9$k(B
- HTTP/1.1 $B%W%m%H%3%k$N5!G=$b(B Apache $B$O%5%]!<%H$7$^$9!#(B</p>
-
- <p>HTTP/1.0 $B=`5r$N%/%i%$%"%s%H$+$i$N%j%/%(%9%H$KBP$7$F$O!"(B
- ($B%V%i%&%6$G$"$m$&$H%-%c%C%7%e$G$"$m$&$H(B)
- $B%M%4%7%(!<%7%g%s$r<u$1$?1~Ez$N%-%c%C%7%e$r5v$9$?$a$K!"(B
- <directive module="mod_negotiation">CacheNegotiatedDocs</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$G$-$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$O!"%5!<%P@_Dj%U%!%$%k$d%P!<%A%c%k%[%9%H$K=q$/$3$H$,$G$-!"(B
- $B0z?t$r$H$j$^$;$s!#(B
- HTTP/1.1 $B%/%i%$%"%s%H$+$i$N%j%/%(%9%H$K$O8zNO$r;}$A$^$;$s!#(B</p>
-
- <p>HTTP/1.1 $B%/%i%$%"%s%H$KBP$7$F$O!"%l%9%]%s%9$N%M%4%7%(!<%7%g%s<!85(B
- $B$r<($9$?$a$K(B <code>Vary</code> HTTP $B%l%9%]%s%9%X%C%@$rAw$j$^$9!#(B
- $B%-%c%C%7%e$O!"$3$l$r;H$C$F8eB3$N%j%/%(%9%H$KBP$7$F%m!<%+%k%3%T!<$G1~Ez$G$-$k$+(B
- $B$I$&$+$r7hDj$G$-$^$9!#(B
- $B%M%4%7%(!<%7%g%s<!85$H$O4X78$J$7$K%m!<%+%k%3%T!<$N;HMQ$rM%@h$9$k$h$&$K$9$k$K$O!"(B
- <code>force-no-vary</code> <a href="env.html#special">$B4D6-JQ?t(B</a>$B$r(B
- $B@_Dj$7$^$9!#(B</p>
-
-</section>
-
-<section id="more"><title>$BDI2C>pJs(B</title>
-
- <p>$B%3%s%F%s%H%M%4%7%(!<%7%g%s$K4X$9$kDI2C>pJs$O!"(B
- Alan J. Flavell $B$5$s$N(B<a
- href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
- Negotiation Notes</a> $B$r$4Mw2<$5$$!#$G$9$,!"(B
- Apache 2.0 $B$G$NJQ99E@$r4^$`$?$a$K$O99?7$5$l$F$$$J$$$+$b$7$l$J$$(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/content-negotiation.xml.ko b/docs/manual/content-negotiation.xml.ko
deleted file mode 100644
index f37f31f908..0000000000
--- a/docs/manual/content-negotiation.xml.ko
+++ /dev/null
@@ -1,602 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="content-negotiation.xml.meta">
-
-<title>³»¿ëÇù»ó (Content Negotiation)</title>
-
-<summary>
-
- <p>¾ÆÆÄÄ¡´Â HTTP/1.1 ±Ô¾à¿¡ ±â¼úµÈ ³»¿ëÇù»ó(content
- negotiation)À» Áö¿øÇÑ´Ù. ³»¿ëÇù»óÀº media type, ¾ð¾î, ¹®ÀÚÁýÇÕ,
- ÀÎÄÚµù µî¿¡ ´ëÇØ ºê¶ó¿ìÀú°¡ Á¦°øÇÑ ¼±È£µµ¿¡ µû¶ó ÀÚ¿øÀÇ
- °¡Àå ÀûÇÕÇÑ Ç¥ÇöÀ» ¼±ÅÃÇÑ´Ù. ¶Ç ºÒ¿ÏÀüÇÑ Çù»ó Á¤º¸¸¦ º¸³»´Â
- ºê¶ó¿ìÀúÀÇ ¿äûÀ» Áö´ÉÀûÀ¸·Î ó¸®ÇÏ´Â ±â´Éµµ ÀÖ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î ÄÄÆÄÀϵǴ <module>mod_negotiation</module>
- ¸ðµâÀÌ ³»¿ëÇù»ó ±â´ÉÀ» Á¦°øÇÑ´Ù.</p>
-</summary>
-
-<section id="about"><title>³»¿ëÇù»ó¿¡ ´ëÇØ</title>
-
- <p>ÀÚ¿øÀº ¿©·¯ ´Ù¸¥ Ç¥ÇöÀ» °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´Ù¸¥
- ¾ð¾î³ª ´Ù¸¥ media type ȤÀº µÑ ¸ðµÎ°¡ ´Ù¸¥ Ç¥ÇöµéÀÌ ÀÖÀ»
- ¼ö ÀÖ´Ù. °¡Àå Àû´çÇÑ Ç¥ÇöÀ» ¼±ÅÃÇÏ´Â ÇÑ°¡Áö ¹æ¹ýÀº »ç¿ëÀÚ¿¡°Ô
- ¸ñ·Ï ÆäÀÌÁö¸¦ º¸¿©ÁÖ°í ¼±ÅÃÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª ¼­¹ö°¡
- ÀÚµ¿À¸·Î ¼±ÅÃÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ´Â ºê¶ó¿ìÀú°¡ ¿äûÀÇ
- ÀϺηΠ±×µéÀÌ ¼±È£Çϴ ǥÇö¿¡ ´ëÇÑ Á¤º¸¸¦ º¸³»±â¶§¹®¿¡
- °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î, ºê¶ó¿ìÀú´Â °¡´ÉÇÑÇÑ ºÒ¾î·Î, ±×·¯³ª
- ¾ø´Ù¸é ¿µ¾î·Î Á¤º¸¸¦ º¸°í½Í´Ù°í ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ºê¶ó¿ìÀú´Â
- ¿äûÀÇ Çì´õ·Î ±×µéÀÇ ±âÈ£¸¦ ³ªÅ¸³½´Ù. ¿ÀÁ÷ ºÒ¾î·ÎµÈ Ç¥Çö¸¸À»
- ¿äûÇÑ´Ù¸é ºê¶ó¿ìÀú´Â ´ÙÀ½°ú °°ÀÌ º¸³½´Ù.</p>
-
-<example>Accept-Language: fr</example>
-
- <p>ÀÌ·± ±âÈ£´Â Ç¥ÇöÀÌ ¾ð¾îº°·Î ´Ù¸¦ °æ¿ì¿¡¸¸ °í·ÁµÈ´Ù.</p>
-
- <p>´ÙÀ½Àº ´õ º¹ÀâÇÑ ¿äûÀÇ ¿¹·Î ºê¶ó¿ìÀú°¡ ºÒ¾î¿Í ¿µ¾î¸¦
- ¹ÞÀ» ¼ö ÀÖÁö¸¸, ºÒ¾î¸¦ ´õ ¼±È£ÇÏ°í, ¿©·¯ media typeÀ» ¹ÞÀ»
- ¼ö ÀÖÁö¸¸, ÀÏ¹Ý ÅؽºÆ® º¸´Ù´Â HTML, ´Ù¸¥ media type º¸´Ù´Â
- GIF¿Í JPEGÀ» ¼±È£ÇÑ´Ù°í ¾Ë·ÁÁØ´Ù.</p>
-
-<example>
- Accept-Language: fr; q=1.0, en; q=0.5<br />
- Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</example>
-
- <p>¾ÆÆÄÄ¡´Â HTTP/1.1 ±Ô¾à¿¡ Á¤ÀÇµÈ '¼­¹ö ÁÖµµ(server driven)'
- ³»¿ëÇù»óÀ» Áö¿øÇÑ´Ù. ¾ÆÆÄÄ¡´Â <code>Accept</code>,
- <code>Accept-Language</code>, <code>Accept-Charset</code>,
- <code>Accept-Encoding</code> ¿äû Çì´õ¸¦ ¸ðµÎ Áö¿øÇÑ´Ù.
- ¶Ç, ¾ÆÆÄÄ¡´Â RFC 2295¿Í RFC 2296¿¡ Á¤ÀÇµÈ ½ÇÇèÀûÀÎ ³»¿ëÇù»óÀÎ
- 'ÀÚ¿¬½º·¯¿î(transparent)' ¿äû Çì´õµµ Áö¿øÇÑ´Ù. ±×·¯³ª ÀÌ
- RFC¿¡ Á¤ÀÇµÈ '±â´É Çù»ó(feature negotiation)'Àº Áö¿øÇÏÁö
- ¾Ê´Â´Ù.</p>
-
- <p><strong>ÀÚ¿ø(resource)</strong>Àº (RFC 2396) URI·Î ±¸º°ÇÏ´Â
- °³³äÀûÀÎ Á¸Àç´Ù. ¾ÆÆÄÄ¡¿Í °°Àº À¥¼­¹ö´Â ÀÚ¿øÀÇ
- <strong>Ç¥Çö(representations)</strong>À» Á¦°øÇÑ´Ù. Ç¥ÇöÀº
- ÁöÁ¤µÈ media type, ¹®ÀÚÁýÇÕ, ÀÎÄÚµù µîÀ» °¡Áø ¹ÙÀÌÆ®µé·Î
- µÇÀÖ´Ù. ÀÚ¿øÀº ¿©·¯ Ç¥Çö°ú (¶§·Î´Â ¾øÀ» ¼öµµ ÀÖ´Ù) ¿¬°üµÈ´Ù.
- ÀÚ¿ø¿¡ ¿©·¯ Ç¥ÇöÀÌ ÀÖ´Ù¸é ÀÚ¿øÀ»
- <strong>Çù»ó°¡´ÉÇÏ´Ù°í(negotiable)</strong> ºÎ¸£¸ç, À̶§
- °¢ Ç¥ÇöÀ» <strong>º¯Çü(variant)</strong>À̶ó°í ÇÑ´Ù.
- Çù»ó°¡´ÉÇÑ ÀÚ¿øÀÇ º¯Çü Á¾·ù¸¦ Çù»óÀÇ
- <strong>¹üÀ§(dimension)</strong>¶ó°í ÇÑ´Ù.</p>
-</section>
-
-<section id="negotiation"><title>¾ÆÆÄÄ¡ÀÇ Çù»ó</title>
-
- <p>ÀÚ¿øÀ» Çù»óÇϱâÀ§ÇØ ¼­¹ö´Â °¢ º¯Çü¿¡ ´ëÇÑ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù.
- ´ÙÀ½ µÎ°¡Áö ¹æ¹ýÁß Çϳª·Î Á¤º¸¸¦ ¾ò´Â´Ù:</p>
-
- <ul>
- <li>º¯ÇüÀ» ´ãÀº ÆÄÀϵéÀ» Á÷Á¢ ¿­°ÅÇÑ type mapÀ» (<em>¿¹¸¦
- µé¾î</em>, <code>*.var</code> ÆÄÀÏ) »ç¿ëÇϰųª,</li>
-
- <li>Á÷Á¢ ÁöÁ¤ÇÏÁö¾Ê¾Æµµ ¼­¹ö°¡ ÆÄÀÏ¸í¿¡¼­ ±ÔÄ¢À» ã¾Æ¼­
- °á°ú¸¦ ¼±ÅÃÇÏ´Â 'MultiViews'¸¦ »ç¿ëÇÑ´Ù.</li>
- </ul>
-
- <section id="type-map"><title>type-map ÆÄÀÏ »ç¿ëÇϱâ</title>
-
- <p>type mapÀº <code>type-map</code>À̶õ Çڵ鷯¿Í ¿¬°áµÈ
- (ȤÀº ÀÌÀü ¾ÆÆÄÄ¡ ¼³Á¤°ú ȣȯÀ» À§ÇØ MIME typeÀÌ
- <code>application/x-type-map</code>ÀÎ) ¹®¼­´Ù. ÀÌ ±â´ÉÀ»
- »ç¿ëÇÏ·Á¸é ¼³Á¤¿¡¼­ <code>type-map</code> Çڵ鷯¿¡ ´ëÇÑ
- ÆÄÀÏ È®ÀåÀÚ¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ
- ¼³Á¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.</p>
-
-<example>AddHandler type-map .var</example>
-
- <p>Type map ÆÄÀÏÀº ÇØ´çÇÏ´Â ÀÚ¿ø°ú À̸§ÀÌ °°¾Æ¾ß ÇÏ°í,
- °¢ º¯Çü¿¡ ´ëÇÑ Ç׸ñÀÌ ÀÖ¾î¾ß ÇÑ´Ù. Ç׸ñÀº ¿©·¯ HTTPÇü½Ä
- Çì´õ ÁÙ·Î ±¸¼ºµÈ´Ù. º¯Çü¿¡ ´ëÇÑ °¢°¢ÀÇ Ç׸ñµéÀº ºóÁÙ·Î
- ±¸ºÐÇÑ´Ù. Ç׸ñ¾È¿¡¼­ ºóÁÙÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. (ÀÌ·¸°Ô ÇÒ
- ÇÊ¿ä°¡ ¾ø°í, À־ ¹«½ÃÇÏÁö¸¸) ¿©·¯ Ç׸ñÀÌ °øÅëÀ¸·Î °¡Áö°í
- ÀÖ´Â ³»¿ëÀ¸·Î map ÆÄÀÏÀ» ½ÃÀÛÇÏ´Â °ÍÀÌ º¸ÅëÀÌ´Ù. ´ÙÀ½Àº
- map ÆÄÀÏ ¿¹´Ù. ÀÌ ÆÄÀÏÀÇ À̸§Àº <code>foo.var</code>·Î,
- <code>foo</code>¶ó´Â ÀÚ¿øÀ» ¼³¸íÇÑ´Ù.</p>
-
-<example>
- URI: foo<br />
-<br />
- URI: foo.en.html<br />
- Content-type: text/html<br />
- Content-language: en<br />
-<br />
- URI: foo.fr.de.html<br />
- Content-type: text/html;charset=iso-8859-2<br />
- Content-language: fr, de<br />
-</example>
- <p>typemap ÆÄÀÏÀÌ ÆÄÀϸí È®ÀåÀÚ º¸´Ù, ½ÉÁö¾î Multiviews¸¦
- »ç¿ëÇÏ¿©µµ, ¿ì¼±±ÇÀ» °¡ÁüÀ» ÁÖÀÇÇ϶ó. º¯ÇüÀÌ ¼­·Î ´Ù¸¥ Ç°ÁúÀ»
- °¡Áø´Ù¸é, ´ÙÀ½°ú °°ÀÌ (JPEG, GIF, ASCII-art¿¡ ÇØ´çÇÏ´Â)
- media type¿¡ "qs" ÆĶó¹ÌÅÍ·Î Ç°Áú(source quality)À» Ç¥½ÃÇÒ
- ¼ö ÀÖ´Ù:</p>
-
-<example>
- URI: foo<br />
-<br />
- URI: foo.jpeg<br />
- Content-type: image/jpeg; qs=0.8<br />
-<br />
- URI: foo.gif<br />
- Content-type: image/gif; qs=0.5<br />
-<br />
- URI: foo.txt<br />
- Content-type: text/plain; qs=0.01<br />
-</example>
-
- <p>qs °ªÀº 0.000¿¡¼­ 1.000 »çÀÌ´Ù. qs °ªÀÌ 0.000ÀÎ º¯ÇüÀº
- Àý´ë ¼±ÅõÇÁö ¾ÊÀ½À» ÁÖÀÇÇ϶ó. 'qs' °ªÀÌ ¾ø´Â º¯ÇüÀº 1.0À¸·Î
- Ãë±ÞµÈ´Ù. qs °ªÀº Ŭ¶óÀ̾ðÆ®ÀÇ ´É·Â°ú´Â °ü°è¾øÀÌ ´Ù¸¥ º¯Çüµé°ú
- ºñ±³ÇÏ¿© ±× º¯ÇüÀÇ »ó´ëÀûÀÎ 'Ç°Áú'À» ³ªÅ¸³½´Ù. ¿¹¸¦ µé¾î,
- »çÁøÀ» ³ªÅ¸³»·Á´Â °æ¿ì JPEG ÆÄÀÏÀÌ ASCII ÆÄÀϺ¸´Ù´Â Ç×»ó
- ³ôÀº Ç°ÁúÀ» °¡Áø´Ù. ±×·¯³ª ÀÚ¿øÀÌ ¿ø·¡ ASCII art¿´´Ù¸é
- ASCII Ç¥ÇöÀÌ JPEG Ç¥Çöº¸´Ù ´õ ³ôÀº Ç°ÁúÀ» °¡Áú ¼ö ÀÖ´Ù.
- ±×·¯¹Ç·Î ¾î¶² º¯ÇüÀÇ qs °ªÀº Ç¥ÇöÇÏ·Á´Â ÀÚ¿øÀÇ ¼ºÁú¿¡
- µû¶ó ´Ù¸£´Ù.</p>
-
- <p>Áö¿øÇÏ´Â ¸ðµç Çì´õ ¸ñ·ÏÀº <a
- href="mod/mod_negotiation.html#typemaps">mod_negotation
- typemap</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-</section>
-
-<section id="multiviews"><title>Multiviews</title>
-
- <p><code>MultiViews</code>´Â µð·ºÅ丮º° ¿É¼ÇÀ̹ǷÎ,
- <code>httpd.conf</code>ÀÇ
- <directive module="core" type="section">Directory</directive>,
- <directive module="core" type="section">Location</directive>,
- <directive module="core" type="section">Files</directive>
- ¼½¼Ç ȤÀº (<directive module="core">AllowOverride</directive>°¡
- ÀûÀýÈ÷ ¼³Á¤µÇ¾ú´Ù¸é) <code>.htaccess</code> ÆÄÀÏÀÇ
- <directive module="core">Options</directive> Áö½Ã¾î¿¡ ¼³Á¤ÇÒ
- ¼ö ÀÖ´Ù. <code>Options All</code>Àº <code>MultiViews</code>¸¦
- Æ÷ÇÔÇÏÁö¾ÊÀ½À» ÁÖÀÇÇ϶ó. µû·Î Á÷Á¢ ½áÁà¾ß ÇÑ´Ù.</p>
-
- <p><code>MultiViews</code>¸¦ »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀÏÀÌ ÀϾ´Ù:
- ¼­¹ö°¡ <code>/some/dir/foo</code>¿¡ ´ëÇÑ ¿äûÀ» ¹Þ°í
- <code>/some/dir/foo</code>¿¡ <code>MultiViews</code>°¡ µ¿ÀÛÇϸç
- <code>/some/dir/foo</code>°¡ Á¸ÀçÇÏÁö <em>¾ÊÀ»</em> °æ¿ì,
- ¼­¹ö´Â µð·ºÅ丮¿¡¼­ À̸§ÀÌ foo.*ÀÎ ÆÄÀϵéÀ» ¸ðµç Æ÷ÇÔÇÏ´Â
- °¡»óÀÇ type mapÀ» ¸¸µç´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¿äûÇÑ media type°ú
- content-encodingÀ» °¡Áö°í ÀÌÁß¿¡ °¡Àå ÀûÇÕÇÑ °ÍÀ» ¼±ÅÃÇÑ´Ù.</p>
-
- <p><code>MultiViews</code>´Â ¼­¹ö°¡ µð·ºÅ丮¸¦ ÂüÁ¶ÇÒ¶§
- ÆÄÀÏÀ» ã´Â <directive
- module="mod_dir">DirectoryIndex</directive> Áö½Ã¾î¿¡µµ
- Àû¿ëµÈ´Ù. ¼³Á¤ÆÄÀÏÀÌ ´ÙÀ½°ú °°´Ù¸é,</p>
-<example>DirectoryIndex index</example>
- <p><code>index.html</code>°ú <code>index.html3</code>ÀÌ
- ¸ðµÎ ÀÖ´Ù¸é ¼­¹ö´Â ÀÌµÑ Áß¿¡ Çϳª¸¦ °áÁ¤ÇÑ´Ù. µÑ ¸ðµÎ ¾ø°í
- <code>index.cgi</code>°¡ ÀÖ´Ù¸é, ¼­¹ö´Â ±×°ÍÀ» ½ÇÇàÇÑ´Ù.</p>
-
- <p>µð·ºÅ丮¸¦ ÀÐÀ»¶§ ÆÄÀÏÁß Çϳª°¡ Charset, Content-Type,
- Language, Encoding¸¦ ÆÇ´ÜÇÏ´Â <code>mod_mime</code>ÀÌ ¸ð¸£´Â
- È®ÀåÀÚ¸¦ °¡Áø´Ù¸é, °á°ú´Â <directive
- module="mod_mime">MultiViewsMatch</directive> Áö½Ã¾î ¼³Á¤¿¡
- ´Þ·Ç´Ù. ÀÌ Áö½Ã¾î´Â Çڵ鷯, ÇÊÅÍ, ´Ù¸¥ È®ÀåÇüµéÀÌ MultiViews
- Çù»ó¿¡ Âü¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.</p>
-</section>
-</section>
-
-<section id="methods"><title>Çù»ó¹æ¹ý</title>
-
- <p>¾ÆÆÄÄ¡°¡ type-map ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϸíµé·Î
- ÁÖ¾îÁø ÀÚ¿ø¿¡ ´ëÇÑ º¯Çü ¸ñ·ÏÀ» ¾ò°ÔµÇ¸é 'ÃÖÀûÀÇ' º¯ÇüÀ»
- °áÁ¤ÇϱâÀ§ÇØ µÎ ¹æ¹ýÁß Çϳª¸¦ »ç¿ëÇÑ´Ù. ¾ÆÆÄÄ¡ ³»¿ëÇù»ó
- ±â´ÉÀ» »ç¿ëÇϱâÀ§ÇØ Á¤È®È÷ Çù»óÀÌ ¾î¶»°Ô ÀϾ´ÂÁö ÀÚ¼¼È÷
- ¾Ë ÇÊ¿ä´Â ¾ø´Ù. ±×·¯³ª ±Ã±ÝÇÑ »ç¶÷À» À§ÇØ ÀÌ ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>µÎ°¡Áö Çù»ó¹æ¹ýÀÌ ÀÖ´Ù:</p>
-
- <ol>
- <li><strong>¾ÆÆÄÄ¡ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ¼­¹ö°¡ ÁÖµµÇÏ´Â
- Çù»ó</strong>Àº ÀϹÝÀûÀÎ °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ¾ÆÆÄÄ¡ ¾Ë°í¸®ÁòÀº
- ¾Æ·¡¼­ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù. ÀÌ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â
- ´õ ³ªÀº °á°ú¸¦ ¾ò±âÀ§ÇØ Á¾Á¾ ƯÁ¤ ¹üÀ§ÀÇ
- Ç°Áú°è¼ö(quality factor)¸¦ 'Á¶ÀÛÇÑ´Ù'. ¾ÆÆÄÄ¡°¡ Ç°Áú°è¼ö¸¦
- Á¶ÀÛÇÏ´Â ¹æ¹ýÀº ¾Æ·¡¼­ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.</li>
-
- <li><strong>ÀÚ¿¬½º·¯¿î(Transparent) ³»¿ëÇù»ó</strong>Àº
- ºê¶ó¿ìÀú°¡ RFC 2295¿¡ Á¤ÀÇµÈ ¹æ¹ýÀ¸·Î ¿äûÇÒ °æ¿ì¿¡¸¸
- »ç¿ëÇÑ´Ù. ÀÌ Çù»ó¹æ¹ýÀº 'ÃÖÀûÀÇ' º¯ÇüÀ» °áÁ¤ÇÒ ±ÇÇÑÀ»
- ºê¶ó¿ìÀú¿¡°Ô ºÎ¿©ÇÑ´Ù. ±×·¡¼­ °á°ú´Â ºê¶ó¿ìÀúÀÇ ¾Ë°í¸®Áò¿¡
- ´Þ·È´Ù. ÀÚ¿¬½º·¯¿î Çù»ó°úÁ¤Áß¿¡ ºê¶ó¿ìÀú´Â ¾ÆÆÄÄ¡¿¡°Ô
- RFC 2296¿¡ Á¤ÀÇµÈ '¿ø°Ý º¯Çü¼±Åà ¾Ë°í¸®Áò(remote variant
- selection algorithm)'À» ¿äûÇÒ ¼ö ÀÖ´Ù.</li>
- </ol>
-
-<section id="dimensions"><title>Çù»óÀÇ ¹üÀ§</title>
-
- <table>
- <columnspec><column width=".15"/><column width=".85"/></columnspec>
- <tr valign="top">
- <th>¹üÀ§</th>
-
- <th>¼³¸í</th>
- </tr>
-
- <tr valign="top">
- <td>Media Type</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept</code> Çì´õ·Î ¼±È£¸¦ ³ªÅ¸³½´Ù.
- °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù. º¯ÇüÀÇ ¼³¸íµµ Ç°Áú°è¼ö¸¦
- ("qs" ÆĶó¹ÌÅÍ) °¡Áú ¼ö ÀÖ´Ù.</td>
- </tr>
-
- <tr valign="top">
- <td>Language</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept-Language</code> Çì´õ·Î ¼±È£¸¦
- ³ªÅ¸³½´Ù. °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù. º¯ÇüÀº
- ¿©·¯ ¾ð¾î¸¦ °¡Áú (ȤÀº ¾Æ¹« ¾ð¾îµµ ¾øÀ») ¼ö ÀÖ´Ù.</td>
- </tr>
-
- <tr valign="top">
- <td>Encoding</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept-Encoding</code> Çì´õ·Î ¼±È£¸¦
- ³ªÅ¸³½´Ù. °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù.</td>
- </tr>
-
- <tr valign="top">
- <td>Charset</td>
-
- <td>ºê¶ó¿ìÀú´Â <code>Accept-Charset</code> Çì´õ·Î ¼±È£¸¦
- ³ªÅ¸³½´Ù. °¢ Ç׸ñÀº Ç°Áú°è¼ö¸¦ °¡Áú ¼ö ÀÖ´Ù. º¯ÇüÀº
- media typeÀÇ ÆĶó¹ÌÅÍ·Î ¹®ÀÚÁýÇÕÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù.</td>
- </tr>
- </table>
-</section>
-
-<section id="algorithm"><title>¾ÆÆÄÄ¡ Çù»ó ¾Ë°í¸®Áò</title>
-
- <p>¾ÆÆÄÄ¡´Â ºê¶ó¿ìÀú¿¡°Ô º¸³¾ 'ÃÖÀûÀÇ' º¯ÇüÀ» (ÀÖ´Ù¸é)
- ¼±ÅÃÇϱâÀ§ÇØ ¾Æ·¡ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù. ÀÌ ¾Ë°í¸®ÁòÀº º¯°æÇÒ
- ¼ö ¾ø´Ù. ´ÙÀ½¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù:</p>
-
- <ol>
- <li>¸ÕÀú, Çù»óÀÇ °¢ ¹üÀ§¿¡ ´ëÇØ ÇØ´çÇÏ´Â <em>Accept*</em>
- Çì´õ¸¦ °Ë»çÇÏ°í, °¢ º¯Çü¿¡ Ç°Áú°ªÀ» ¸Å±ä´Ù. ¾î¶² ¹üÀ§ÀÇ
- <em>Accept*</em> Çì´õ°¡ ¹Þ¾ÆµéÀÌÁö ¾Ê´Â º¯ÇüÀº Èĺ¸¿¡¼­
- Á¦¿ÜÇÑ´Ù. ¾î¶² º¯Çüµµ ³²Áö¾ÊÀ¸¸é 4 ´Ü°è·Î °£´Ù.</li>
-
- <li>
- Èĺ¸¿¡¼­ Çϳª¾¿ Á¦¿ÜÇÏ¿© 'ÃÖÀûÀÇ' º¯ÇüÀ» ã´Â´Ù. ´ÙÀ½
- °¢ °Ë»ç´Â ¼ø¼­´ë·Î ÀϾ´Ù. °¢ °Ë»ç¿¡¼­ ¼±ÅõÇÁö¾ÊÀº
- º¯ÇüÀº Á¦¿ÜµÈ´Ù. °¢ °Ë»çÈÄ ÇÑ º¯Çü¸¸ ³²À¸¸é À̸¦ ÃÖÀûÀÇ
- º¯ÇüÀ¸·Î ¼±ÅÃÇÏ°í 3 ´Ü°è·Î °£´Ù. ¿©·¯ º¯ÇüÀÌ ³²À¸¸é
- ´ÙÀ½ °Ë»ç¸¦ ÁøÇàÇÑ´Ù.
-
- <ol>
- <li><code>Accept</code> Çì´õÀÇ Ç°Áú°è¼ö¿Í º¯ÇüÀÇ
- media type¿¡ ´ëÇÑ Ç°Áú°ªÀ» °öÇÏ¿© °¡Àå ³ôÀº °ªÀ»
- °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>°¡Àå ³ôÀº ¾ð¾î(language) Ç°Áú°è¼ö¸¦ °¡Áø º¯ÇüÀ»
- ¼±ÅÃÇÑ´Ù.</li>
-
- <li><code>Accept-Language</code> Çì´õ¿¡ (ÀÖ´Ù¸é)
- ³ª¿Â ¾ð¾îÀÇ ¼ø¼­ ȤÀº <code>LanguagePriority</code>
- Áö½Ã¾î¿¡ (ÀÖ´Ù¸é) ³ª¿Â ¾ð¾îÀÇ ¼ø¼­¸¦ °¡Áö°í °¡Àå
- ÀûÇÕÇÑ ¾ð¾î¸¦ °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>°¡Àå ³ôÀº (text/html media typeÀÇ ¹öÀüÀ» ³ªÅ¸³»´Â)
- 'level' media ÆĶó¹ÌÅ͸¦ °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li><code>Accept-Charset</code> Çì´õ¸¦ °¡Áö°í °¡Àå
- ÀûÇÕÇÑ charset media ÆĶó¹ÌÅ͸¦ °¡Áø º¯ÇüÀ» ã´Â´Ù.
- Çì´õ°¡ ¾ø´Ù¸é ISO-8859-1 ¹®ÀÚÁýÇÕÀ» °¡Àå ¼±È£ÇÑ´Ù.
- <code>text/*</code> media typeÀ» °¡ÁöÁö¸¸ ¸í½ÃÀûÀ¸·Î
- ƯÁ¤ ¹®ÀÚÁýÇÕ°ú ¿¬°áµÇÁö¾ÊÀº º¯ÇüÀº ISO-8859-1·Î
- °¡Á¤ÇÑ´Ù.</li>
-
- <li>ISO-8859-1ÀÌ <em>¾Æ´Ñ</em> charset media ÆĶó¹ÌÅ͸¦
- °¡Áø º¯ÇüµéÀ» ¼±ÅÃÇÑ´Ù. ±×·± º¯ÇüÀÌ ¾ø´Ù¸é, ´ë½Å ¸ðµç
- º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>°¡Àå ÀûÇÕÇÑ ÀÎÄÚµùÀ» °¡Áø º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.
- user-agent¿¡ ÀûÇÕÇÑ ÀÎÄÚµùÀ» °¡Áø º¯ÇüÀÌ ÀÖ´Ù¸é ±×
- º¯Çü¸¸À» ¼±ÅÃÇÑ´Ù. ±×·¸Áö¾Ê°í ÀÎÄÚµùµÈ º¯Çü°ú ÀÎÄÚµù¾ÈµÈ
- º¯ÇüÀÌ °°ÀÌ ÀÖ´Ù¸é ÀÎÄÚµù¾ÈµÊ º¯Çü¸¸À» ¼±ÅÃÇÑ´Ù. º¯ÇüÀÌ
- ¸ðµÎ ÀÎÄÚµùµÇ¾ú°Å³ª ¸ðµÎ ÀÎÄÚµù¾ÈµÈ °æ¿ì ¸ðµç º¯ÇüÀ»
- ¼±ÅÃÇÑ´Ù.</li>
-
- <li>content length°¡ °¡Àå ÀûÀº º¯ÇüÀ» ¼±ÅÃÇÑ´Ù.</li>
-
- <li>³²Àº °ÍÁß Ã¹¹øÀç º¯ÇüÀ» ¼±ÅÃÇÑ´Ù. ÀÌ´Â type-map
- ÆÄÀÏÀÇ ¾Õ¿¡ ³ª¿Ô°Å³ª, µð·ºÅ丮¿¡¼­ º¯ÇüÀ» ÀÐÀº °æ¿ì
- ÆÄÀϸíÀ» ASCII ÄÚµå ¼ø¼­·Î ÇÏ¿© ¾Õ¿¡ ³ª¿À´Â °ÍÀÌ´Ù.</li>
- </ol>
- </li>
-
- <li>ÀÌÁ¦ ¾Ë°í¸®ÁòÀÌ 'ÃÖÀûÀÇ' º¯ÇüÀ» ¼±ÅÃÇß´Ù. ÀÌ°ÍÀ» ÀÀ´äÀ¸·Î
- º¸³½´Ù. HTTP ÀÀ´ä Çì´õ <code>Vary</code>´Â Çù»óÀÇ ¹üÀ§¸¦
- ³ªÅ¸³»°Ô µÈ´Ù. (ºê¶ó¿ìÀú¿Í ij½¬´Â ÀÚ¿øÀ» ij½¬ÇÒ¶§ ÀÌ Á¤º¸¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.) ³¡.</li>
-
- <li>ÀÌ ´Ü°è¿¡ µµ´ÞÇß´Ù¸é (¸ðµÎ ºê¶ó¿ìÀú°¡ ¹ÞÁö¸øÇϱ⠶§¹®¿¡)
- ¾î¶² º¯Çüµµ ¼±ÅÃÀÌ ¾ÈµÈ °æ¿ì´Ù. ("No acceptable
- representation"¸¦ ¶æÇÏ´Â) »óÅ 406°ú ³»¿ëÀ¸·Î »ç¿ë°¡´ÉÇÑ
- º¯ÇüÀÇ ¸ñ·ÏÀ» ´ãÀº HTML ¹®¼­¸¦ ÀÀ´äÀ» º¸³½´Ù. ¶Ç, HTML
- <code>Vary</code> Çì´õ´Â º¯ÇüÀÇ ¹üÀ§¸¦ ³ªÅ¸³½´Ù.</li>
- </ol>
-</section>
-</section>
-
-<section id="better"><title>Ç°Áú°è¼ö Á¶ÀÛÇϱâ</title>
-
- <p>¾ÆÆÄÄ¡´Â Á¾Á¾ À§ÀÇ ¾ÆÆÄÄ¡ Çù»ó ¾Ë°í¸®ÁòÀ» ¾ö°ÝÈ÷ ÁöÅ°Áö¾Ê°í
- Ç°Áú°è¼ö¸¦ º¯°æÇÑ´Ù. ÀÌÀ¯´Â ¿ÏÀüÇÏ°í Á¤È®ÇÑ Á¤º¸¸¦ º¸³»Áö¾Ê´Â
- ºê¶ó¿ìÀú¿¡°Ô (¾Ë°í¸®ÁòÀÇ) ´õ ³ªÀº °á°ú¸¦ º¸³»±â À§Çؼ­´Ù.
- ³Î¸® ¾²ÀÌ´Â ºê¶ó¿ìÀúÁß ÀϺδ ÀÚÁÖ À߸øµÈ º¯ÇüÀ» ¼±ÅÃÇϵµ·Ï
- <code>Accept</code> Çì´õ¸¦ º¸³½´Ù. ºê¶ó¿ìÀú°¡ ¿ÏÀüÇÏ°í ¿Ã¹Ù¸¥
- Á¤º¸¸¦ º¸³½´Ù¸é, Á¶ÀÛÀ» ÇÏÁö¾Ê´Â´Ù.</p>
-
-<section id="wildcards"><title>Media Type°ú ¿ÍÀϵåÄ«µå</title>
-
- <p><code>Accept:</code> ¿äû Çì´õ´Â media type¿¡ ´ëÇÑ ¼±È£¸¦
- ³ªÅ¸³½´Ù. ¶Ç, *´Â ¾î¶² ¹®ÀÚ¿­ÀÌ¶óµµ °¡´ÉÇϱ⶧¹®¿¡ "image/*"³ª
- "*/*" °°ÀÌ '¿ÍÀϵåÄ«µå' media typeÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼­
- ´ÙÀ½°ú °°Àº ¿äûÀº:</p>
-
-<example>Accept: image/*, */*</example>
-
- <p>"image/"·Î ½ÃÀÛÇÏ´Â ¾î¶² type°ú ´Ù¸¥ ¾î¶² typeµµ °¡´ÉÇÔÀ»
- ÀǹÌÇÑ´Ù. ¾î¶² ºê¶ó¿ìÀú´Â
- ÀÚ½ÅÀÌ ½ÇÁ¦·Î ´Ù·ê ¼ö ÀÖ´Â type¿¡ Ãß°¡·Î ¿ÍÀϵåÄ«µå¸¦ º¸³½´Ù.
- ¿¹¸¦ µé¸é:</p>
-
-<example>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</example>
- <p>ÀÌÀ¯´Â Á÷Á¢ ¿­°ÅÇÑ typeÀ» ¼±È£ÇÏÁö¸¸ ´Ù¸¥ Ç¥ÇöÀÌ ÀÖ´Ù¸é
- ±×°Íµµ ±¦ÂúÀ½À» ³ªÅ¸³»±â À§Çؼ­´Ù. ºê¶ó¿ìÀú°¡ ½ÇÁ¦·Î ¿øÇÑ
- °ÍÀº ´ÙÀ½°ú °°ÀÌ ¸í½ÃÀûÀ¸·Î Ç°Áú°ªÀ» »ç¿ëÇÑ °ÍÀÌ´Ù.</p>
-<example>
- Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</example>
- <p>Á÷Á¢ ¿­°ÅÇÑ typeÀº Ç°Áú°è¼ö°¡ ¾ø¾î¼­ ±âº»°ªÀÎ (°¡Àå ³ôÀº)
- 1.0À» °¡Áø´Ù. ¿ÍÀϵåÄ«µå */*´Â ³·Àº ¼±È£µµ 0.01À» °¡Áö¹Ç·Î
- Á÷Á¢ ¿­°ÅÇÑ type¿¡ ¸Â´Â º¯ÇüÀÌ ¾ø´Â °æ¿ì¿¡¸¸ ´Ù¸¥ typeµéÀÌ
- »ç¿ëµÈ´Ù.</p>
-
- <p><code>Accept:</code> Çì´õ¿¡ q °è¼ö°¡ ÀüÇô <em>¾ø°í</em>
- "*/*"°¡ ÀÖ´Ù¸é, ¾ÆÆÄÄ¡´Â ¹Ù¶÷Á÷ÇÑ ÇൿÀ» À§ÇØ q °ªÀ¸·Î 0.01À»
- ÁöÁ¤ÇÑ´Ù. ¶Ç, "type/*" ÇüÅÂÀÇ ¿ÍÀϵåÄ«µå¿¡´Â ("*/*"º¸´Ù´Â
- ´õ ¼±È£Çϵµ·Ï) 0.02¸¦ ÁöÁ¤ÇÑ´Ù. <code>Accept:</code> Çì´õ¿¡¼­
- q °è¼ö¸¦ °¡Áö´Â media typeÀÌ ÀÖ´Ù¸é ÀÌ·± Ưº°ÇÑ °ªÀ» Ãß°¡ÇÏÁö
- <em>¾Ê´Â´Ù</em>. ±×·¡¼­ ¸í½ÃÀûÀÎ Á¤º¸¸¦ º¸³»´Â ºê¶ó¿ìÀúÀÇ
- ¿äûÀº ¿äûÇѵ¥·Î ó¸®ÇÑ´Ù.</p>
-</section>
-
-<section id="exceptions"><title>¾ð¾î(language) Çù»óÀÇ ¿¹¿Ü</title>
-
- <p>¾ÆÆÄÄ¡ 2.0Àº ¾ð¾î Çù»óÀÌ ½ÇÆÐÇÑ °æ¿ì ºÎµå·´°Ô º¹±¸ÇϱâÀ§ÇØ
- Çù»ó ¾Ë°í¸®Áò¿¡ »õ·Î ¿¹¿Ü¸¦ ¸î°³ Ãß°¡Çß´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡ ÆäÀÌÁö¸¦ ¿äûÇßÀ»¶§ ¼­¹ö°¡ ºê¶ó¿ìÀú°¡
- º¸³½ <code>Accept-language</code>¿¡ ¸Â´Â ÆäÀÌÁö¸¦ ´Ü ÇÑ°³¸¸
- ãÀ¸¸é ¹®Á¦°¡ ¾øÁö¸¸, ±×·¯Áö ¾ÊÀº °æ¿ì ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô
- "No Acceptable Variant"³ª "Multiple Choices" ÀÀ´äÀ» º¸³½´Ù.
- ÀÌ·± ¿À·ù¹®À» ÇÇÇϱâÀ§ÇØ ÀÌ °æ¿ì <code>Accept-language</code>¸¦
- ¹«½ÃÇÏ°í Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ¸íÈ®È÷ ¸ÂÁö´Â ¾ÊÁö¸¸ ¹®¼­¸¦
- º¸³»µµ·Ï ¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. <directive
- module="mod_negotiation">ForceLanguagePriority</directive>
- Áö½Ã¾î´Â ¼­¹ö°¡ ÀÌ·± ¿À·ù¹®Áß Çϳª ȤÀº µÑ´Ù¸¦ ¹«½ÃÇÏ°í
- <directive module="mod_negotiation">LanguagePriority</directive>
- Áö½Ã¾î·Î ÆÇ´ÜÇϵµ·Ï ÇÑ´Ù.</p>
-
- <p>¶Ç, ¼­¹ö´Â ¸Â´Â ¾ð¾î¸¦ ¸øãÀº °æ¿ì ºÎ¸ð¾ð¾î¸¦ ãÀ» ¼öµµ
- ÀÖ´Ù. ¿¹¸¦ µé¾î Ŭ¶óÀ̾ðÆ®°¡ ¿µ±¹¿µ¾î¸¦ ¶æÇÏ´Â
- <code>en-GB</code> ¾ð¾î·Î ¹®¼­¸¦ ¿äûÇÑ °æ¿ì, HTTP/1.1 Ç¥ÁØ¿¡
- µû¸£¸é ¼­¹ö´Â <code>en</code>À¸·Î¸¸ Ç¥½ÃµÈ ¹®¼­¸¦ ÀϹÝÀûÀ¸·Î
- ¼±ÅÃÇÏÁö ¸øÇÑ´Ù. (±×·¡¼­ ¿µ±¹¿µ¾î¸¦ ÀÌÇØÇÏ´Â µ¶ÀÚ°¡ ÀϹÝÀûÀÎ
- ¿µ¾îµµ ÀÌÇØÇÒ ¼ö ÀÖÀ¸¹Ç·Î <code>Accept-Language</code> Çì´õ¿¡
- <code>en-GB</code>¸¸ Æ÷ÇÔÇÏ°í <code>en</code>À» Æ÷ÇÔÇÏÁö¾ÊÀ¸¸é
- °ÅÀÇ È®½ÇÈ÷ À߸øµÈ ¼³Á¤ÀÓÀ» À¯ÀÇÇ϶ó. ºÒÇàÈ÷µµ ÇöÀç ¸¹Àº
- Ŭ¶óÀ̾ðÆ®µéÀº ÀÌ·± ½ÄÀ¸·Î ±âº»¼³Á¤µÇÀÖ´Ù.) ´Ù¸¥ ¾ð¾î¸¦
- ãÁö ¸øÇÏ¿© ¼­¹ö°¡ "No Acceptable Variants" ¿À·ù¸¦ º¸³»°Å³ª
- <directive module="mod_negotiation">LanguagePriority</directive>·Î
- µ¹¾Æ°¡¾ß ÇÑ´Ù¸é, ¼­¹ö´Â ÇÏÀ§¾ð¾î ±Ô¾àÀ» ¹«½ÃÇÏ°í
- <code>en-GB</code>¸¦ <code>en</code> ¹®¼­¿¡ ´ëÀÀÇÑ´Ù.
- ¾Ï¹¬ÀûÀ¸·Î ¾ÆÆÄÄ¡´Â ºÎ¸ð¾ð¾î¸¦ ¸Å¿ì ³·Àº Ç°Áú°ªÀ¸·Î
- Ŭ¶óÀ̾ðÆ®ÀÇ Çã¿ë¾ð¾î ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù. ±×·¯³ª Ŭ¶óÀ̾ðÆ®°¡
- "en-GB; q=0.9, fr; q=0.8"À» ¿äûÇÏ°í ¼­¹ö¿¡ "en"°ú "fr"
- ¹®¼­°¡ ÀÖ´Ù¸é, "fr" ¹®¼­°¡ ¼±ÅõÊÀ» ÁÖÀÇÇ϶ó. ÀÌ´Â HTTP/1.1
- Ç¥ÁØÀ» ÁöÅ°°í, ¿Ã¹Ù·Î ¼³Á¤µÈ Ŭ¶óÀ̾ðÆ®¿Í È¿À²ÀûÀ¸·Î
- µ¿ÀÛÇϱâÀ§ÇÔÀÌ´Ù.</p>
-
- <p>»ç¿ëÀÚ°¡ ¼±È£ÇÏ´Â ¾ð¾î¸¦ ¾Ë¾Æ³»±âÀ§ÇÑ (ÄíÅ°³ª Ưº°ÇÑ
- URL-°æ·Î °°Àº) °í±Þ ±â¹ýÀ» Áö¿øÇϱâÀ§ÇØ ¾ÆÆÄÄ¡ 2.0.47ºÎÅÍ
- <module>mod_negotiation</module>Àº <code>prefer-language</code>¶ó´Â
- <a href="env.html">ȯ°æº¯¼ö</a>¸¦ ÀνÄÇÑ´Ù. ÀÌ È¯°æº¯¼ö°¡
- Á¸ÀçÇÏ°í ÀûÀýÇÑ ¾ð¾îű׸¦ Æ÷ÇÔÇÑ´Ù¸é,
- <module>mod_negotiation</module>Àº ÇØ´çÇÏ´Â º¯ÇüÀ» ¼±ÅÃÇÏ·Á°í
- ½ÃµµÇÑ´Ù. ±×·± º¯ÇüÀÌ ¾ø´Ù¸é ÀϹÝÀûÀÎ Çù»ó°úÁ¤À» ½ÃÀÛÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1
- </example>
-</section>
-</section>
-
-<section id="extensions"><title>ÀÚ¿¬½º·¯¿î(transparent) ³»¿ëÇù»óÀÇ È®Àå</title>
-
-<p>¾ÆÆÄÄ¡´Â ´ÙÀ½°ú °°ÀÌ ÀÚ¿¬½º·¯¿î ³»¿ëÈ®Àå ÇÁ·ÎÅäÄÝÀ» (RFC 2295)
-È®ÀåÇÑ´Ù. º¯Çü ¸ñ·ÏÀÇ »õ·Î¿î <code>{encoding ..}</code>´Â ƯÁ¤
-content-encodingÀ» °¡Áø º¯Çü¸¸À» ÁöĪÇÑ´Ù. RVSA/1.0 ¾Ë°í¸®ÁòÀº
-(RFC 2296) ¸ñ·Ï¿¡¼­ ÀÎÄÚµùµÈ º¯ÇüÀ» ÀνÄÇÒ ¼ö ÀÖ°í, ÀÎÄÚµùÀÌ
-<code>Accept-Encoding</code> ¿äû Çì´õ¿¡ ¸Â´Â °æ¿ì ÀÎÄÚµùµÈ
-º¯Çüµéµµ È帷Π»ç¿ëÇϵµ·Ï È®ÀåµÇ¾ú´Ù. RVSA/1.0 ±¸ÇöÀº ÃÖÀûÀÇ
-º¯ÇüÀ» ã±â Àü¿¡ °è»êµÈ Ç°Áú°è¼ö¸¦ ¼Ò¼öÁ¡ 5ÀÚ¸®¿¡¼­ ¹Ý¿Ã¸²ÇÏÁö
-¾Ê´Â´Ù.</p>
-</section>
-
-<section id="naming"><title>ÇÏÀÌÆÛ¸µÅ©¿Í À̸§±ÔÄ¢¿¡ ´ëÇÏ¿©</title>
-
- <p>¾ð¾î(language) Çù»óÀ» »ç¿ëÇÑ´Ù¸é ÆÄÀÏÀº ¿©·¯ È®ÀåÀÚ¸¦
- °¡Áö°í È®ÀåÀÚÀÇ ¼ø¼­´Â º¸Åë °ü°è¾øÀ¸¹Ç·Î ÆÄÀÏ¸í¿¡ ¿©·¯ ´Ù¸¥
- À̸§±ÔÄ¢À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. (ÀÚ¼¼ÇÑ ³»¿ëÀº <a
- href="mod/mod_mime.html#multipleext">mod_mime</a> ¹®¼­¸¦
- Âü°íÇ϶ó.)</p>
-
- <p>ÀüÇüÀûÀÎ ÆÄÀÏÀº MIME-type È®ÀåÀÚ (<em>¿¹¸¦ µé¾î</em>,
- <code>html</code>), °æ¿ì¿¡ µû¶ó encoding È®ÀåÀÚ (<em>¿¹¸¦
- µé¾î</em>, <code>gz</code>), ÆÄÀÏ¿¡ ¿©·¯ ¾ð¾î º¯ÇüÀÌ ÀÖ´Â
- °æ¿ì ¹°·Ð ¾ð¾î È®ÀåÀÚ¸¦ (<em>¿¹¸¦ µé¾î</em>, <code>en</code>)
- °¡Áø´Ù.</p>
-
- <p>¿¹Á¦:</p>
-
- <ul>
- <li>foo.en.html</li>
-
- <li>foo.html.en</li>
-
- <li>foo.en.html.gz</li>
- </ul>
-
- <p>´ÙÀ½Àº ¸î¸î ÆÄÀϸí°ú ±× ÆÄÀÏ¿¡ ´ëÇÑ À¯È¿ÇÏ°í À¯È¿ÇÏÁö¾ÊÀº
- ÇÏÀÌÆÛ¸µÅ©¸¦ º¸ÀδÙ:</p>
-
- <table border="1" cellpadding="8" cellspacing="0">
- <columnspec><column width=".2"/><column width=".2"/>
- <column width=".2"/></columnspec>
- <tr>
- <th>ÆÄÀϸí</th>
-
- <th>À¯È¿ÇÑ ÇÏÀÌÆÛ¸µÅ©</th>
-
- <th>À¯È¿ÇÏÁö¾ÊÀº ÇÏÀÌÆÛ¸µÅ©</th>
- </tr>
-
- <tr>
- <td><em>foo.html.en</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>-</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html</em></td>
-
- <td>foo</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.en.gz</em></td>
-
- <td>foo<br />
- foo.html</td>
-
- <td>foo.gz<br />
- foo.html.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.en.html.gz</em></td>
-
- <td>foo</td>
-
- <td>foo.html<br />
- foo.html.gz<br />
- foo.gz</td>
- </tr>
-
- <tr>
- <td><em>foo.gz.html.en</em></td>
-
- <td>foo<br />
- foo.gz<br />
- foo.gz.html</td>
-
- <td>foo.html</td>
- </tr>
-
- <tr>
- <td><em>foo.html.gz.en</em></td>
-
- <td>foo<br />
- foo.html<br />
- foo.html.gz</td>
-
- <td>foo.gz</td>
- </tr>
- </table>
-
- <p>À§ Ç¥¸¦ º¸¸é ÇÏÀÌÆÛ¸µÅ©¿¡ ¾î¶² È®ÀåÀÚµµ ¾ø´Â À̸§À»
- (<em>¿¹¸¦ µé¾î</em>, <code>foo</code>) Ç×»ó »ç¿ëÇÒ ¼ö ÀÖÀ½À»
- ¾Ë ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ÀåÁ¡Àº ¹®¼­ÀÇ ½ÇÁ¦ Á¾·ù¸¦ ¼û±æ ¼ö À־,
- <em>¿¹¸¦ µé¾î</em> ÇÏÀÌ·¯¸µÅ© ÂüÁ¶¸¦ ¼öÁ¤ÇϾʰí
- <code>html</code> ÆÄÀÏÀ» <code>shtml</code>À̳ª
- <code>cgi</code>·Î º¯°æÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.</p>
-
- <p>°è¼Ó ÇÏÀÌÆÛ¸µÅ©¿¡ MIME-typeÀ» (<em>¿¹¸¦ µé¾î</em>,
- <code>foo.html</code>) »ç¿ëÇÏ°í ½Í´Ù¸é (encoding È®ÀåÀÚ°¡
- ÀÖ´Ù¸é À̰͵µ Æ÷ÇÔÇÏ¿©) ¾ð¾î È®ÀåÀÚ¸¦ MIME-type È®ÀåÀÚº¸´Ù
- ¿À¸¥ÂÊ¿¡ (<em>¿¹¸¦ µé¾î</em>, <code>foo.html.en</code>)
- µÎ¾î¾ßÇÑ´Ù.</p>
-</section>
-
-<section id="caching"><title>ij½¬¿¡ ´ëÇÏ¿©</title>
-
- <p>ij½¬°¡ Ç¥ÇöÀ» ÀúÀåÇϸé Ç¥Çö°ú ¿äû URLÀ» ¿¬°ü½ÃŲ´Ù.
- ´ÙÀ½¹ø ±× URLÀ» ¿äûÇϸé ij½¬´Â ÀúÀåµÈ Ç¥ÇöÀ» »ç¿ëÇÑ´Ù.
- ±×·¯³ª ¼­¹ö¿Í Çù»óÀÌ °¡´ÉÇÑ ÀÚ¿øÀÎ °æ¿ì ù¹ø° ¿äûÇÑ º¯Çü¸¸
- ij½¬µÇ¾î ÀÌÈÄ ¿äûÀº ij½¬µÈ À߸øµÈ ÀÀ´äÀ» ¾òÀ» ¼ö ÀÖ´Ù.
- À̸¦ ¸·±âÀ§ÇØ ¾ÆÆÄÄ¡´Â º¸Åë ³»¿ëÇù»óÈÄ ¹ÝȯµÇ´Â ¸ðµç ¿äû¿¡
- HTTP/1.0 Ŭ¶óÀ̾ðÆ®°¡ ij½¬¸¦ ¸øÇϵµ·Ï Ç¥½Ã¸¦ ÇÑ´Ù. ¶Ç, ¾ÆÆÄÄ¡´Â
- Çù»óÇÑ ÀÀ´äÀÇ Ä³½¬¸¦ Çã¿ëÇÏ´Â HTTP/1.1 ÇÁ·ÎÅäÄÝÀÇ ±â´ÉÀ»
- Áö¿øÇÑ´Ù.</p>
-
- <p><directive
- module="mod_negotiation">CacheNegotiatedDocs</directive>
- Áö½Ã¾î´Â HTTP/1.0 ȣȯ Ŭ¶óÀ̾ðÆ®(ºê¶ó¿ìÀú ȤÀº ij½¬)°¡
- º¸³½ ¿äû¿¡ ´ëÇØ Çù»óÇÑ ÀÀ´äÀ» ij½¬ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- ¼­¹ö³ª °¡»óÈ£½ºÆ® ¼³Á¤¿¡ »ç¿ëÇϸç, ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¾Ê´Â´Ù.
- ÀÌ Áö½Ã¾î´Â HTTP/1.1 Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû°ú´Â °ü°è°¡ ¾ø´Ù.</p>
-
- <p>HTTP/1.1 Ŭ¶óÀ̾ðÆ®¿¡°Ô ¾ÆÆÄÄ¡´Â ÀÀ´äÀÇ Çù»ó ¹üÀ§¸¦
- ¾Ë·ÁÁÖ´Â <code>Vary</code> HTTP ÀÀ´äÇì´õ¸¦ º¸³½´Ù. ÀÌ Á¤º¸¸¦
- »ç¿ëÇÏ¿© ´ÙÀ½ ¿äûÀ» ij½¬µÈ º¹»çº»À¸·Î ´ëüÇÒ ¼ö ÀÖ´ÂÁö
- ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. Çé»óÀÇ ¹üÀ§¿Í °ü°è¾øÀÌ Ä³½¬µÈ º¹»çº»À»
- ±ÇÇÑ´Ù¸é <code>force-no-vary</code> <a
- href="env.html#special">ȯ°æº¯¼ö</a>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-</section>
-
-<section id="more"><title>´Ù¸¥ Á¤º¸</title>
-
- <p>³»¿ëÇù»ó¿¡ ´ëÇÑ ´Ù¸¥ Á¤º¸´Â Alan J. Flavell°¡ ¾´ <a
- href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
- Negotiation Notes</a>¸¦ Âü°íÇ϶ó. ±×·¯³ª ÀÌ ¹®¼­´Â ¾ÆÁ÷
- ¾ÆÆÄÄ¡ 2.0ÀÇ º¯È­¸¦ ¹Ý¿µÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/content-negotiation.xml.meta b/docs/manual/content-negotiation.xml.meta
deleted file mode 100644
index 98539b1d01..0000000000
--- a/docs/manual/content-negotiation.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>content-negotiation</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/custom-error.html b/docs/manual/custom-error.html
deleted file mode 100644
index 43f09e493f..0000000000
--- a/docs/manual/custom-error.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: custom-error.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: custom-error.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: custom-error.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/custom-error.html.en b/docs/manual/custom-error.html.en
deleted file mode 100644
index 56a1babea7..0000000000
--- a/docs/manual/custom-error.html.en
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Custom Error Responses - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Custom Error Responses</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/custom-error.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/custom-error.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/custom-error.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Additional functionality allows webmasters to configure the response
- of Apache to some error or problem.</p>
-
- <p>Customizable responses can be defined to be activated in the event of
- a server detected error or problem.</p>
-
- <p>If a script crashes and produces a "500 Server Error" response,
- then this response can be replaced with either some friendlier text or by
- a redirection to another URL (local or external).</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#behavior">Behavior</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configuration">Configuration</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#custom">Custom Error Responses and Redirects</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behavior" id="behavior">Behavior</a></h2>
-
-
- <h3>Old Behavior</h3>
-
-
- <p>NCSA httpd 1.3 would return some boring old error/problem message
- which would often be meaningless to the user, and would provide no
- means of logging the symptoms which caused it.</p>
-
-
- <h3>New Behavior</h3>
-
-
- <p>The server can be asked to:</p>
-
- <ol>
- <li>Display some other text, instead of the NCSA hard coded
- messages, or</li>
-
- <li>redirect to a local URL, or</li>
-
- <li>redirect to an external URL.</li>
- </ol>
-
- <p>Redirecting to another URL can be useful, but only if some
- information can be passed which can then be used to explain and/or log
- the error/problem more clearly.</p>
-
- <p>To achieve this, Apache will define new CGI-like environment
- variables:</p>
-
- <div class="example"><p><code>
- REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
- image/jpeg<br />
- REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
- 9000/712)<br />
- REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
- REDIRECT_QUERY_STRING=<br />
- REDIRECT_REMOTE_ADDR=121.345.78.123<br />
- REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
- REDIRECT_SERVER_NAME=crash.bang.edu<br />
- REDIRECT_SERVER_PORT=80<br />
- REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
- REDIRECT_URL=/cgi-bin/buggy.pl
- </code></p></div>
-
- <p>Note the <code>REDIRECT_</code> prefix.</p>
-
- <p>At least <code>REDIRECT_URL</code> and
- <code>REDIRECT_QUERY_STRING</code> will be passed to the
- new URL (assuming it's a cgi-script or a cgi-include). The
- other variables will exist only if they existed prior to
- the error/problem. <strong>None</strong> of these will be
- set if your <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> is an
- <em>external</em> redirect (anything starting with a
- scheme name like <code>http:</code>, even if it refers to the same host
- as the server).</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuration" id="configuration">Configuration</a></h2>
-
-
- <p>Use of <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> is enabled
- for .htaccess files when the
- <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> is set accordingly.</p>
-
- <p>Here are some examples...</p>
-
- <div class="example"><p><code>
- ErrorDocument 500 /cgi-bin/crash-recover <br />
- ErrorDocument 500 "Sorry, our script crashed. Oh dear" <br />
- ErrorDocument 500 http://xxx/ <br />
- ErrorDocument 404 /Lame_excuses/not_found.html <br />
- ErrorDocument 401 /Subscription/how_to_subscribe.html
- </code></p></div>
-
- <p>The syntax is,</p>
-
- <div class="example"><p><code>
- ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
- </code></p></div>
-
- <p>where the action can be,</p>
-
- <ol>
- <li>Text to be displayed. Prefix the text with a quote
- ("). Whatever follows the quote is displayed. <em>Note:
- the (") prefix isn't displayed.</em></li>
-
- <li>An external URL to redirect to.</li>
-
- <li>A local URL to redirect to.</li>
- </ol>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="custom" id="custom">Custom Error Responses and Redirects</a></h2>
-
-
- <p>Apache's behavior to redirected URLs has been modified so
- that additional environment variables are available to a
- script/server-include.</p>
-
- <h3>Old behavior</h3>
-
-
- <p>Standard CGI vars were made available to a script which
- has been redirected to. No indication of where the
- redirection came from was provided.</p>
-
-
- <h3>New behavior</h3>
-
-
- <p>A new batch of environment variables will be initialized
- for use by a script which has been redirected to. Each new
- variable will have the prefix <code>REDIRECT_</code>.
- <code>REDIRECT_</code> environment variables are created from
- the CGI environment variables which existed prior to the
- redirect, they are renamed with a <code>REDIRECT_</code>
- prefix, <em>i.e.</em>, <code>HTTP_USER_AGENT</code> becomes
- <code>REDIRECT_HTTP_USER_AGENT</code>. In addition to these
- new variables, Apache will define <code>REDIRECT_URL</code>
- and <code>REDIRECT_STATUS</code> to help the script trace its
- origin. Both the original URL and the URL being redirected to
- can be logged in the access log.</p>
-
- <p>If the ErrorDocument specifies a local redirect to a CGI
- script, the script should include a "<code>Status:</code>"
- header field in its output in order to ensure the propagation
- all the way back to the client of the error condition that
- caused it to be invoked. For instance, a Perl ErrorDocument
- script might include the following:</p>
-
- <div class="example"><p><code>
- ... <br />
- print "Content-type: text/html\n"; <br />
- printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"}; <br />
- ...
- </code></p></div>
-
- <p>If the script is dedicated to handling a particular error
- condition, such as <code>404&nbsp;Not&nbsp;Found</code>, it can
- use the specific code and error text instead.</p>
-
- <p>Note that the script <em>must</em> emit an appropriate
- <code>Status:</code> header (such as <code>302&nbsp;Found</code>), if the
- response contains a <code>Location:</code> header (in order to issue a
- client side redirect). Otherwise the <code>Location:</code> header may
- have no effect.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/custom-error.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/custom-error.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/custom-error.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/custom-error.html.ja.euc-jp b/docs/manual/custom-error.html.ja.euc-jp
deleted file mode 100644
index ff838a3c54..0000000000
--- a/docs/manual/custom-error.html.ja.euc-jp
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥«¥¹¥¿¥à¥¨¥é¡¼¥ì¥¹¥Ý¥ó¥¹ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥«¥¹¥¿¥à¥¨¥é¡¼¥ì¥¹¥Ý¥ó¥¹</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/custom-error.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/custom-error.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/custom-error.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¥¦¥§¥Ö¥Þ¥¹¥¿¡¼¤¬²¿¤é¤«¤Î¥¨¥é¡¼¤äÌäÂê¤ËÂФ¹¤ë
- Apache ¤ÎÈ¿±þ¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ëÄɲõ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¤¬¥¨¥é¡¼¤äÌäÂê¤òȯ¸«¤·¤¿¾ì¹ç¤ÎÈ¿±þ¤ò¡¢
- ¥«¥¹¥¿¥Þ¥¤¥º¤·¤ÆÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤¬¼ºÇÔ¤·¤Æ "500 Server Error"
- ¤òȯÀ¸¤µ¤»¤¿¤È¤·¤Þ¤¹¡£¤³¤Î¾ì¹ç¤ÎÈ¿±þ¤ò¡¢¤è¤ê¹¥¤Þ¤·¤¤¥Æ¥­¥¹¥È¤ä¡¢Ê̤Î
- URL (ÆâÉôµÚ¤Ó³°Éô) ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤ËÃÖ¤­´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- </p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#behavior">Æ°ºî</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configuration">ÀßÄê</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#custom">¥«¥¹¥¿¥à¥¨¥é¡¼¥ì¥¹¥Ý¥ó¥¹¤È¥ê¥À¥¤¥ì¥¯¥È</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behavior" id="behavior">Æ°ºî</a></h2>
-
-
- <h3>¸Å¤¤Æ°ºî</h3>
-
-
- <p>NCSA httpd 1.3 ¤Ï¡¢¸Å¤¯¤ÆÂà¶þ¤Ê¥¨¥é¡¼/ÌäÂê¥á¥Ã¥»¡¼¥¸¤ò
- ÊÖ¤·¤Æ¤¤¤Þ¤·¤¿¡£¤½¤ì¤Ï¤·¤Ð¤·¤Ð¥æ¡¼¥¶¤Ë¤Ï̵°ÕÌ£¤Ç¤¢¤ê¡¢
- ¤Þ¤¿¤½¤ì¤òȯÀ¸¤µ¤»¤¿¸¶°ø¤òµ­Ï¿¤¹¤ëÊýË¡¤âÄ󶡤·¤Æ¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£</p>
-
-
- <h3>¿·¤·¤¤Æ°ºî</h3>
-
-
- <ol>
- <li>NCSA ¤Î¥Ï¡¼¥É¥³¡¼¥É¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ÎÂå¤ï¤ê¤Ë
- ¾¤Î¥Æ¥­¥¹¥È¤òɽ¼¨</li>
-
- <li>¥í¡¼¥«¥ë¤Î URL ¤Ë¥ê¥À¥¤¥ì¥¯¥È</li>
-
- <li>³°Éô¤Î URL ¤Ë¥ê¥À¥¤¥ì¥¯¥È</li>
- </ol>
-
- <p>¤¹¤ë¤è¤¦¤Ë¥µ¡¼¥Ð¤òÀßÄê¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Ê̤ΠURL ¤Ë¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤³¤È¤ÏÌò¤ËΩ¤Á¤Þ¤¹¤¬¡¢
- ¤½¤ì¤ÏÀâÌÀ¤ò¤·¤¿¤ê¡¢¤è¤êÌÀ³Î¤Ë¸í¤ê/ÌäÂê¤òµ­Ï¿¤·¤¿¤ê¤¹¤ë¤¿¤á¤Ë
- ²¿¤«¾ðÊó¤òÅÁ¤¨¤é¤ì¤ë¤È¤­¤Ë¸Â¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤ò¼Â¸½¤¹¤ë¤¿¤á¤Ë¡¢ Apache ¤Ï¿·¤·¤¯ CGI ¤Î¤è¤¦¤Ê´Ä¶­ÊÑ¿ô¤ò
- ÄêµÁ¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- REDIRECT_HTTP_ACCEPT=*/*, image/gif,
- image/x-xbitmap, image/jpeg<br />
- REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX
- A.09.05 9000/712)<br />
- REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
- REDIRECT_QUERY_STRING=<br />
- REDIRECT_REMOTE_ADDR=121.345.78.123<br />
- REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
- REDIRECT_SERVER_NAME=crash.bang.edu<br />
- REDIRECT_SERVER_PORT=80<br />
- REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
- REDIRECT_URL=/cgi-bin/buggy.pl
- </code></p></div>
-
- <p>Ƭ¤ËÉÕ¤¯ <code>REDIRECT_</code> ¤ËÃíÌܤ·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¾¯¤Ê¤¯¤È¤â <code>REDIRECT_URL</code> ¤È
- <code>REDIRECT_QUERY_STRING</code> ¤Ï¿·¤·¤¤ URL (CGI ¥¹¥¯¥ê¥×¥È¤«
- CGI ¥¤¥ó¥¯¥ë¡¼¥É¤Ç¤¢¤ë¤È²¾Äꤵ¤ì¤Þ¤¹) ¤ËÅϤµ¤ì¤Þ¤¹¡£
- ¾¤ÎÊÑ¿ô¤Ï¡¢¥¨¥é¡¼¤äÌäÂ꤬µ¯¤­¤ëÁ°¤Ë¸ºß¤·¤¿¾ì¹ç¤Ë¤À¤±Â¸ºß¤·¤Þ¤¹¡£
- ¤â¤·¤¢¤Ê¤¿¤ÎÀßÄꤷ¤¿ <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> ¤¬ <em>³°Éô</em>¥ê¥À¥¤¥ì¥¯¥È
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢<code>http:</code>
- ¤Î¤è¤¦¤ÊÂηÏ̾¤«¤é»Ï¤Þ¤ë¤¹¤Ù¤Æ¤Î¤â¤Î¡£¤¿¤È¤¨Æ±¤¸¥Û¥¹¥È¤ò»Ø¤·¤Æ¤¤¤Æ¤â)
- ¤Ê¤é¤Ð¡¢¤³¤ì¤é¤Ï<strong>¤Þ¤Ã¤¿¤¯</strong>ÀßÄꤵ¤ì¤Þ¤»¤ó¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuration" id="configuration">ÀßÄê</a></h2>
-
-
- <p><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> ¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢
- .htaccess ¥Õ¥¡¥¤¥ë¤Ç <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
- ¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤³¤Ë¡¢¤¤¤¯¤Ä¤«¤ÎÎã¤òµó¤²¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- ErrorDocument 500 /cgi-bin/crash-recover <br />
- ErrorDocument 500 "Sorry, our script crashed. Oh dear" <br />
- ErrorDocument 500 http://xxx/ <br />
- ErrorDocument 404 /Lame_excuses/not_found.html <br />
- ErrorDocument 401 /Subscription/how_to_subscribe.html
- </code></p></div>
-
- <p>¹½Ê¸</p>
-
- <div class="example"><p><code>
- ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
- </code></p></div>
-
- <p>action (Æ°ºî) ¤Ï¡¢</p>
-
- <ol>
- <li>ɽ¼¨¤µ¤ì¤ë¤Ù¤­¥Æ¥­¥¹¥È¡£¥Æ¥­¥¹¥È¤Ë¤Ï°úÍÑÉä (") ¤ò¤Ä¤±¤Þ¤¹¡£
- °úÍÑÉä¤Î¸å¤Ë³¤¯¤â¤Î¤¬²¿¤Ç¤âɽ¼¨¤µ¤ì¤Þ¤¹¡£
- <em>Ãí°Õ : (") ¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó</em></li>
-
- <li>¥ê¥À¥¤¥ì¥¯¥ÈÀè¤Î³°Éô URL </li>
-
- <li>¥ê¥À¥¤¥ì¥¯¥ÈÀè¤Î¥í¡¼¥«¥ë URL </li>
- </ol>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="custom" id="custom">¥«¥¹¥¿¥à¥¨¥é¡¼¥ì¥¹¥Ý¥ó¥¹¤È¥ê¥À¥¤¥ì¥¯¥È</a></h2>
-
-
- <p>¥¹¥¯¥ê¥×¥È/SSI ¤ËÄɲäδĶ­ÊÑ¿ô¤¬ÍøÍѲÄǽ¤Ë¤Ê¤ë¤è¤¦¤Ë¡¢
- ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤¿ URL ¤ËÂФ¹¤ë Apache ¤ÎÆ°ºî¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿¡£</p>
-
- <h3>¸Å¤¤Æ°ºî</h3>
-
-
- <p>¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤¿¥¹¥¯¥ê¥×¥È¤Ïɸ½à¤Î CGI
- ´Ä¶­ÊÑ¿ô¤òÍøÍѲÄǽ¤Ç¤·¤¿¡£¤·¤«¤·¡¢¤É¤³¤«¤é¥ê¥À¥¤¥ì¥¯¥È
- ¤µ¤ì¤¿¤«¤Î¾ðÊó¤ÏÄ󶡤µ¤ì¤Æ¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£</p>
-
-
- <h3>¿·¤·¤¤Æ°ºî</h3>
-
-
- <p>¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤¿Àè¤Î¥¹¥¯¥ê¥×¥È¤¬»ÈÍѲÄǽ¤Ê¤è¤¦¤Ë¡¢
- ¿·¤·¤¤¤¿¤¯¤µ¤ó¤Î´Ä¶­ÊÑ¿ô¤¬½é´ü²½¤µ¤ì¤Þ¤¹¡£¿·¤·¤¤ÊÑ¿ô¤Ï¡¢¤½¤ì¤¾¤ì
- <code>REDIRECT_</code> ¤Ç»Ï¤Þ¤ê¤Þ¤¹¡£
- <code>REDIRECT_</code> ¤Ç»Ï¤Þ¤ë´Ä¶­ÊÑ¿ô¤Ï¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤ëÁ°¤Ë¸ºß¤·¤Æ¤¤¤¿
- CGI ´Ä¶­ÊÑ¿ô¤ÎƬ¤Ë <code>REDIRECT_</code> ¤òÉÕ¤±¤ÆºîÀ®¤µ¤ì¤Þ¤¹¡£
- <em>¤¹¤Ê¤ï¤Á</em>¡¢<code>HTTP_USER_AGENT</code> ¤Ï
- <code>REDIRECT_HTTP_USER_AGENT</code> ¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤é¤Î¿·¤·¤¤ÊÑ¿ô¤Ë²Ã¤¨¤Æ¡¢Apache ¤Ï¡¢
- ¥¹¥¯¥ê¥×¥È¤¬¥ê¥À¥¤¥ì¥¯¥È¸µ¤Î¥È¥ì¡¼¥¹¤ò½õ¤±¤ë¤¿¤á¤Ë
- <code>REDIRECT_URL</code> ¤È <code>REDIRECT_STATUS</code>
- ¤òÄêµÁ¤·¤Þ¤¹¡£¥¢¥¯¥»¥¹¥í¥°¤Ë¤Ï¸µ¤Î URL ¤È¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤¿ URL
- ¤ÎξÊý¤¬µ­Ï¿¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>ErrorDocument ¤¬ CGI ¥¹¥¯¥ê¥×¥È¤Ø¤Î¥í¡¼¥«¥ë¥ê¥À¥¤¥ì¥¯¥È¤ò
- »ØÄꤷ¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤½¤ì¤òµ¯Æ°¤¹¤ë¤³¤È¤Ë¤Ê¤Ã¤¿¥¨¥é¡¼¤Î¾õÂÖ¤ò
- ¥¯¥é¥¤¥¢¥ó¥È¤Þ¤Ç³Î¼Â¤ËÅÁ¤¨¤ë¤¿¤á¤Ë <code>"Status:" </code>
- ¥Ø¥Ã¥À¤ò´Þ¤à¤Ù¤­¤Ç¤¹¡£Î㤨¤Ð¡¢ErrorDocument ÍѤΠPerl
- ¥¹¥¯¥ê¥×¥È¤Ï°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤ò´Þ¤à¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- </p>
-
- <div class="example"><p><code>
- ... <br />
- print "Content-type: text/html\n"; <br />
- printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"}; <br />
- ...
- </code></p></div>
-
- <p>¥¹¥¯¥ê¥×¥È¤¬ <code>404 Not Found</code> ¤Î¤è¤¦¤Ê
- ÆÃÄê¤Î¥¨¥é¡¼¥³¥ó¥Ç¥£¥·¥ç¥ó¤ò°·¤¦¤¿¤á¤À¤±¤Ë»È¤ï¤ì¤ë¾ì¹ç¤Ï¡¢
- Âå¤ï¤ê¤ËÆÃÄê¤Î¥³¡¼¥É¤È¥¨¥é¡¼¥Æ¥­¥¹¥È¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/custom-error.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/custom-error.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/custom-error.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/custom-error.html.ko.euc-kr b/docs/manual/custom-error.html.ko.euc-kr
deleted file mode 100644
index 6254436939..0000000000
--- a/docs/manual/custom-error.html.ko.euc-kr
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/custom-error.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/custom-error.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/custom-error.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>À¥¸¶½ºÅÍ´Â ¿À·ù³ª ¹®Á¦°¡ ¹ß»ýÇßÀ»¶§ ¾ÆÆÄÄ¡ÀÇ ÀÀ´äÀ»
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼­¹ö°¡ ¿À·ù³ª ¹®Á¦¸¦ ¹ß°ßÇßÀ»¶§ º¸³¾ »ç¿ëÀÚÁ¤ÀÇ ÀÀ´äÀ»
- Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>½ºÅ©¸³Æ®°¡ Á×Àº °æ¿ì "500 Server Error" ÀÀ´ä ´ë½Å »ç¿ëÀÚ¿¡°Ô
- ´õ Ä£±ÙÇÑ ¹®±¸¸¦ »ç¿ëÇϰųª ´Ù¸¥ (°°Àº »çÀÌÆ®³ª ¿ÜºÎ »çÀÌÆ®ÀÇ)
- URL·Î ¸®´ÙÀÌ·º¼ÇÀ» ÇÒ ¼ö ÀÖ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#behavior">Çൿ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configuration">¼³Á¤</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#custom">»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä°ú ¸®´ÙÀÌ·º¼Ç</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behavior" id="behavior">Çൿ</a></h2>
-
-
- <h3>ÀÌÀü Çൿ</h3>
-
-
- <p>NCSA httpd 1.3Àº »ç¿ëÀÚ¿¡°Ô ¹«ÀǹÌÇÏ°í Áö·çÇÑ ¿À·ù¹®À»
- º¸³Â´Ù. ¹®Á¦°¡ ¹ß»ýÇÑ ÀÌÀ¯¸¦ ·Î±×¿¡ ³²±æ ¼öµµ ¾ø¾ú´Ù.</p>
-
-
- <h3>»õ·Î¿î Çൿ</h3>
-
-
- <p>¼­¹ö´Â ´ÙÀ½°ú °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ol>
- <li>NCSAÀÇ °íÁ¤µÈ ¹®±¸ ´ë½Å ´Ù¸¥ ¹®±¸¸¦ º¸¿©Áְųª</li>
-
- <li>°°Àº »çÀÌÆ®ÀÇ URL·Î ¸®´ÙÀÌ·º¼ÇÇϰųª</li>
-
- <li>¿ÜºÎ »çÀÌÆ®ÀÇ URL·Î ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.</li>
- </ol>
-
- <p>´Ù¸¥ »çÀÌÆ®ÀÇ URL·Î ¸®´ÙÀÌ·º¼ÇÇÏ´Â °ÍÀÌ À¯¿ëÇÒ ¼ö ÀÖÁö¸¸,
- ÀÌ °æ¿ì ¹®Á¦¸¦ ¼³¸íÇϰųª ·Î±×Çϴµ¥ ÇÊ¿äÇÑ Á¤º¸Áß ÀϺθ¸
- Àü´ÞµÈ´Ù.</p>
-
- <p>¿À·ù¿¡ ´ëÇÑ Á¤º¸¸¦ Àü´ÞÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â CGI½ÄÀÇ »õ·Î¿î
- ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
- image/jpeg<br />
- REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
- 9000/712)<br />
- REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
- REDIRECT_QUERY_STRING=<br />
- REDIRECT_REMOTE_ADDR=121.345.78.123<br />
- REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
- REDIRECT_SERVER_NAME=crash.bang.edu<br />
- REDIRECT_SERVER_PORT=80<br />
- REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
- REDIRECT_URL=/cgi-bin/buggy.pl
- </code></p></div>
-
- <p><code>REDIRECT_</code> Á¢µÎ»ç¿¡ ÁÖ¸ñÇ϶ó.</p>
-
- <p>ÃÖ¼ÒÇÑ <code>REDIRECT_URL</code>°ú
- <code>REDIRECT_QUERY_STRING</code>Àº (cgi-script³ª
- cgi-includeÀÏ) »õ URL·Î ³Ñ°ÜÁø´Ù. ´Ù¸¥ º¯¼ö´Â ¿À·ù°¡
- ¹ß»ýÇϱâ ÀÌÀü¿¡ <span class="transnote">(<em>¿ªÁÖ;</em> À̸§¿¡¼­ <code>REDIRECT_</code>¸¦
- »« ȯ°æº¯¼ö°¡)</span> Á¸ÀçÇÑ °æ¿ì¿¡¸¸ ÀÖ´Ù.
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>°¡
- <em>¿ÜºÎ·Î</em> (°°Àº ¼­¹ö¶óµµ <code>http:</code>¿Í
- °°Àº ½ºÅ´(scheme)À¸·Î ½ÃÀÛÇÑ´Ù¸é) ¸®´ÙÀÌ·º¼ÇÇÑ´Ù¸é
- ÀÌÁß ¾î¶² °Íµµ ¼³Á¤µÇÁö <strong>¾Ê´Â´Ù</strong>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuration" id="configuration">¼³Á¤</a></h2>
-
-
- <p><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>°¡
- ÀûÀýÈ÷ ¼³Á¤µÇ¾ú´Ù¸é .htaccess ÆÄÀÏ¿¡¼­
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>´ÙÀ½Àº ¿¹ÀÌ´Ù...</p>
-
- <div class="example"><p><code>
- ErrorDocument 500 /cgi-bin/crash-recover <br />
- ErrorDocument 500 "Sorry, our script crashed. Oh dear" <br />
- ErrorDocument 500 http://xxx/ <br />
- ErrorDocument 404 /Lame_excuses/not_found.html <br />
- ErrorDocument 401 /Subscription/how_to_subscribe.html
- </code></p></div>
-
- <p>¹®¹ýÀº,</p>
-
- <div class="example"><p><code>
- ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
- </code></p></div>
-
- <p>°¡´ÉÇÑ actionÀº,</p>
-
- <ol>
- <li>Ãâ·ÂÇÒ ¹®±¸. µû¿ÈÇ¥ (")¸¦ ¹®±¸ ¾Õ¿¡ ºÙÀδÙ. µÚ¿¡ ³ª¿À´Â
- µû¿ÈÇ¥´Â Ãâ·ÂµÈ´Ù. <em>ÁÖÀÇ: ¾Õ¿¡ ºÙÀº µû¿ÈÇ¥ (")´Â Ãâ·ÂµÇÁö
- ¾Ê´Â´Ù.</em></li>
-
- <li>¸®´ÙÀÌ·º¼ÇÇÒ ¿ÜºÎ URL.</li>
-
- <li>¸®´ÙÀÌ·º¼ÇÇÒ ³»ºÎ URL.</li>
- </ol>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="custom" id="custom">»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä°ú ¸®´ÙÀÌ·º¼Ç</a></h2>
-
-
- <p>URL·Î ¸®´ÙÀÌ·º¼ÇÇÏ´Â ¾ÆÆÄÄ¡ ÇൿÀº
- ½ºÅ©¸³Æ®/server-include¿¡ ȯ°æº¯¼ö¸¦ ´õ ³Ñ°ÜÁÖµµ·Ï º¯°æµÇ¾ú´Ù.</p>
-
- <h3>ÀÌÀü Çൿ</h3>
-
-
- <p>¸®´ÙÀÌ·º¼ÇµÇ´Â ½ºÅ©¸³Æ®¿¡ Ç¥ÁØ CGI º¯¼öµéÀÌ ³Ñ¾î°£´Ù.
- ¾îµð¿¡¼­ ¸®´ÙÀÌ·º¼ÇÀÌ ÀϾ´ÂÁö ¾Ë ¼ö ¾ø´Ù.</p>
-
-
- <h3>»õ·Î¿î Çൿ</h3>
-
-
- <p>¸®´ÙÀÌ·º¼ÇµÈ ½ºÅ©¸³Æ®´Â »õ·Î¿î ȯ°æº¯¼öµéÀ» »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. ¸ðµÎ ¾Õ¿¡ <code>REDIRECT_</code>°¡ ºÙ¾îÀÖ´Ù.
- <code>REDIRECT_</code> ȯ°æº¯¼ö´Â ¿ø·¡ CGI ȯ°æº¯¼ö¸í
- ¾Õ¿¡ <code>REDIRECT_</code>¸¦ ºÙ¿©¼­ ¸¸µç´Ù. <em>¿¹¸¦
- µé¾î</em>, <code>HTTP_USER_AGENT</code>´Â
- <code>REDIRECT_HTTP_USER_AGENT</code>°¡ µÇ¾ú´Ù. ÀÌ·± º¯¼ö¿¡
- Ãß°¡·Î ½ºÅ©¸³Æ®°¡ ¿ø·¡ URLÀ» ¾Ëµµ·Ï ¾ÆÆÄÄ¡´Â
- <code>REDIRECT_URL</code>°ú <code>REDIRECT_STATUS</code>¸¦
- Á¤ÀÇÇÑ´Ù. ¿ø·¡ URL°ú ¸®´ÙÀÌ·º¼ÇµÈ URL ¸ðµÎ Á¢±Ù ·Î±×¿¡
- ±â·ÏÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ErrorDocument°¡ °°Àº ¼­¹ö¿¡ ÀÖ´Â CGI ½ºÅ©¸³Æ®·Î
- ¸®´ÙÀÌ·º¼ÇÇÑ´Ù¸é, ½ºÅ©¸³Æ®´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¿À·ù »óȲÀ»
- È®½ÇÈ÷ Àü´ÞÇϱâÀ§ÇØ Ãâ·Â¿¡ "<code>Status:</code>" Çì´õ
- Çʵ带 Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î, Perl·Î ÀÛ¼ºÇÑ ErrorDocument
- ½ºÅ©¸³Æ®´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><p><code>
- ... <br />
- print "Content-type: text/html\n"; <br />
- printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"}; <br />
- ...
- </code></p></div>
-
- <p><code>404&nbsp;Not&nbsp;Found</code>¿Í °°Àº ƯÁ¤ ¿À·ù
- »óȲ¿¡ ´ëÇÑ ½ºÅ©¸³Æ®¶ó¸é, ´ë½Å <span class="transnote">(<em>¿ªÁÖ;</em> °íÁ¤µÈ)</span>
- ƯÁ¤ »óÅÂÄÚµå¿Í ¿À·ù¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>(Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀ» ¿äûÇϱâÀ§ÇØ) ÀÀ´ä¿¡
- <code>Location:</code> Çì´õ¸¦ Æ÷ÇÔÇÑ´Ù¸é, ½ºÅ©¸³Æ®´Â
- <em>¹Ýµå½Ã</em> (<code>302&nbsp;Found</code> °°Àº) ÀûÀýÇÑ
- <code>Status:</code> Çì´õ¸¦ Ãâ·ÂÇØ¾ß ÇÔÀ» ÁÖÀÇÇ϶ó. ±×·¸Áö¾ÊÀ¸¸é
- <code>Location:</code> Çì´õ°¡ ¾Æ¹« ¼Ò¿ë¾ø°Ô µÉ ¼ö ÀÖ´Ù.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/custom-error.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/custom-error.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/custom-error.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/custom-error.xml b/docs/manual/custom-error.xml
deleted file mode 100644
index a383e496a7..0000000000
--- a/docs/manual/custom-error.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="custom-error.xml.meta">
-
- <title>Custom Error Responses</title>
-
- <summary>
- <p>Additional functionality allows webmasters to configure the response
- of Apache to some error or problem.</p>
-
- <p>Customizable responses can be defined to be activated in the event of
- a server detected error or problem.</p>
-
- <p>If a script crashes and produces a "500 Server Error" response,
- then this response can be replaced with either some friendlier text or by
- a redirection to another URL (local or external).</p>
- </summary>
-
- <section id="behavior">
- <title>Behavior</title>
-
- <section>
- <title>Old Behavior</title>
-
- <p>NCSA httpd 1.3 would return some boring old error/problem message
- which would often be meaningless to the user, and would provide no
- means of logging the symptoms which caused it.</p>
- </section>
-
- <section>
- <title>New Behavior</title>
-
- <p>The server can be asked to:</p>
-
- <ol>
- <li>Display some other text, instead of the NCSA hard coded
- messages, or</li>
-
- <li>redirect to a local URL, or</li>
-
- <li>redirect to an external URL.</li>
- </ol>
-
- <p>Redirecting to another URL can be useful, but only if some
- information can be passed which can then be used to explain and/or log
- the error/problem more clearly.</p>
-
- <p>To achieve this, Apache will define new CGI-like environment
- variables:</p>
-
- <example>
- REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
- image/jpeg<br />
- REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
- 9000/712)<br />
- REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
- REDIRECT_QUERY_STRING=<br />
- REDIRECT_REMOTE_ADDR=121.345.78.123<br />
- REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
- REDIRECT_SERVER_NAME=crash.bang.edu<br />
- REDIRECT_SERVER_PORT=80<br />
- REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
- REDIRECT_URL=/cgi-bin/buggy.pl
- </example>
-
- <p>Note the <code>REDIRECT_</code> prefix.</p>
-
- <p>At least <code>REDIRECT_URL</code> and
- <code>REDIRECT_QUERY_STRING</code> will be passed to the
- new URL (assuming it's a cgi-script or a cgi-include). The
- other variables will exist only if they existed prior to
- the error/problem. <strong>None</strong> of these will be
- set if your <directive module="core">ErrorDocument</directive> is an
- <em>external</em> redirect (anything starting with a
- scheme name like <code>http:</code>, even if it refers to the same host
- as the server).</p>
- </section>
- </section>
-
- <section id="configuration">
- <title>Configuration</title>
-
- <p>Use of <directive module="core">ErrorDocument</directive> is enabled
- for .htaccess files when the
- <directive module="core">AllowOverride</directive> is set accordingly.</p>
-
- <p>Here are some examples...</p>
-
- <example>
- ErrorDocument 500 /cgi-bin/crash-recover <br />
- ErrorDocument 500 "Sorry, our script crashed. Oh dear" <br />
- ErrorDocument 500 http://xxx/ <br />
- ErrorDocument 404 /Lame_excuses/not_found.html <br />
- ErrorDocument 401 /Subscription/how_to_subscribe.html
- </example>
-
- <p>The syntax is,</p>
-
- <example>
- ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
- </example>
-
- <p>where the action can be,</p>
-
- <ol>
- <li>Text to be displayed. Prefix the text with a quote
- ("). Whatever follows the quote is displayed. <em>Note:
- the (") prefix isn't displayed.</em></li>
-
- <li>An external URL to redirect to.</li>
-
- <li>A local URL to redirect to.</li>
- </ol>
- </section>
-
- <section id="custom">
- <title>Custom Error Responses and Redirects</title>
-
- <p>Apache's behavior to redirected URLs has been modified so
- that additional environment variables are available to a
- script/server-include.</p>
-
- <section>
- <title>Old behavior</title>
-
- <p>Standard CGI vars were made available to a script which
- has been redirected to. No indication of where the
- redirection came from was provided.</p>
- </section>
-
- <section>
- <title>New behavior</title>
-
- <p>A new batch of environment variables will be initialized
- for use by a script which has been redirected to. Each new
- variable will have the prefix <code>REDIRECT_</code>.
- <code>REDIRECT_</code> environment variables are created from
- the CGI environment variables which existed prior to the
- redirect, they are renamed with a <code>REDIRECT_</code>
- prefix, <em>i.e.</em>, <code>HTTP_USER_AGENT</code> becomes
- <code>REDIRECT_HTTP_USER_AGENT</code>. In addition to these
- new variables, Apache will define <code>REDIRECT_URL</code>
- and <code>REDIRECT_STATUS</code> to help the script trace its
- origin. Both the original URL and the URL being redirected to
- can be logged in the access log.</p>
-
- <p>If the ErrorDocument specifies a local redirect to a CGI
- script, the script should include a "<code>Status:</code>"
- header field in its output in order to ensure the propagation
- all the way back to the client of the error condition that
- caused it to be invoked. For instance, a Perl ErrorDocument
- script might include the following:</p>
-
- <example>
- ... <br />
- print "Content-type: text/html\n"; <br />
- printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"}; <br />
- ...
- </example>
-
- <p>If the script is dedicated to handling a particular error
- condition, such as <code>404&nbsp;Not&nbsp;Found</code>, it can
- use the specific code and error text instead.</p>
-
- <p>Note that the script <em>must</em> emit an appropriate
- <code>Status:</code> header (such as <code>302&nbsp;Found</code>), if the
- response contains a <code>Location:</code> header (in order to issue a
- client side redirect). Otherwise the <code>Location:</code> header may
- have no effect.</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/custom-error.xml.ja b/docs/manual/custom-error.xml.ja
deleted file mode 100644
index fafecfa0a3..0000000000
--- a/docs/manual/custom-error.xml.ja
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="custom-error.xml.meta">
-
- <title>$B%+%9%?%`%(%i!<%l%9%]%s%9(B</title>
-
- <summary>
- <p>$B%&%'%V%^%9%?!<$,2?$i$+$N%(%i!<$dLdBj$KBP$9$k(B
- Apache $B$NH?1~$r@_Dj$G$-$k$h$&$K$9$kDI2C5!G=$rDs6!$7$^$9!#(B</p>
-
- <p>$B%5!<%P$,%(%i!<$dLdBj$rH/8+$7$?>l9g$NH?1~$r!"(B
- $B%+%9%?%^%$%:$7$FDj5A$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%9%/%j%W%H$N<B9T$,<:GT$7$F(B "500 Server Error"
- $B$rH/@8$5$;$?$H$7$^$9!#$3$N>l9g$NH?1~$r!"$h$j9%$^$7$$%F%-%9%H$d!"JL$N(B
- URL ($BFbIt5Z$S30It(B) $B$X$N%j%@%$%l%/%7%g%s$KCV$-49$($k$3$H$,$G$-$^$9!#(B
- </p>
- </summary>
-
- <section id="behavior">
- <title>$BF0:n(B</title>
-
- <section>
- <title>$B8E$$F0:n(B</title>
-
- <p>NCSA httpd 1.3 $B$O!"8E$/$FB`6~$J%(%i!<(B/$BLdBj%a%C%;!<%8$r(B
- $BJV$7$F$$$^$7$?!#$=$l$O$7$P$7$P%f!<%6$K$OL50UL#$G$"$j!"(B
- $B$^$?$=$l$rH/@8$5$;$?860x$r5-O?$9$kJ}K!$bDs6!$7$F$$$^$;$s$G$7$?!#(B</p>
- </section>
-
- <section>
- <title>$B?7$7$$F0:n(B</title>
-
- <ol>
- <li>NCSA $B$N%O!<%I%3!<%I$5$l$?%a%C%;!<%8$NBe$o$j$K(B
- $BB>$N%F%-%9%H$rI=<((B</li>
-
- <li>$B%m!<%+%k$N(B URL $B$K%j%@%$%l%/%H(B</li>
-
- <li>$B30It$N(B URL $B$K%j%@%$%l%/%H(B</li>
- </ol>
-
- <p>$B$9$k$h$&$K%5!<%P$r@_Dj$G$-$^$9!#(B</p>
-
- <p>$BJL$N(B URL $B$K%j%@%$%l%/%H$9$k$3$H$OLr$KN)$A$^$9$,!"(B
- $B$=$l$O@bL@$r$7$?$j!"$h$jL@3N$K8m$j(B/$BLdBj$r5-O?$7$?$j$9$k$?$a$K(B
- $B2?$+>pJs$rEA$($i$l$k$H$-$K8B$j$^$9!#(B</p>
-
- <p>$B$3$l$r<B8=$9$k$?$a$K!"(B Apache $B$O?7$7$/(B CGI $B$N$h$&$J4D6-JQ?t$r(B
- $BDj5A$7$^$9(B:</p>
-
- <example>
- REDIRECT_HTTP_ACCEPT=*/*, image/gif,
- image/x-xbitmap, image/jpeg<br />
- REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX
- A.09.05 9000/712)<br />
- REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
- REDIRECT_QUERY_STRING=<br />
- REDIRECT_REMOTE_ADDR=121.345.78.123<br />
- REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
- REDIRECT_SERVER_NAME=crash.bang.edu<br />
- REDIRECT_SERVER_PORT=80<br />
- REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
- REDIRECT_URL=/cgi-bin/buggy.pl
- </example>
-
- <p>$BF,$KIU$/(B <code>REDIRECT_</code> $B$KCmL\$7$F$/$@$5$$!#(B</p>
-
- <p>$B>/$J$/$H$b(B <code>REDIRECT_URL</code> $B$H(B
- <code>REDIRECT_QUERY_STRING</code> $B$O?7$7$$(B URL (CGI $B%9%/%j%W%H$+(B
- CGI $B%$%s%/%k!<%I$G$"$k$H2>Dj$5$l$^$9(B) $B$KEO$5$l$^$9!#(B
- $BB>$NJQ?t$O!"%(%i!<$dLdBj$,5/$-$kA0$KB8:_$7$?>l9g$K$@$1B8:_$7$^$9!#(B
- $B$b$7$"$J$?$N@_Dj$7$?(B <directive
- module="core">ErrorDocument</directive> $B$,(B <em>$B30It(B</em>$B%j%@%$%l%/%H(B
- (<em>$B$9$J$o$A(B</em>$B!"(B<code>http:</code>
- $B$N$h$&$JBN7OL>$+$i;O$^$k$9$Y$F$N$b$N!#$?$H$(F1$8%[%9%H$r;X$7$F$$$F$b(B)
- $B$J$i$P!"$3$l$i$O(B<strong>$B$^$C$?$/(B</strong>$B@_Dj$5$l$^$;$s!#(B</p>
- </section>
- </section>
-
- <section id="configuration">
- <title>$B@_Dj(B</title>
-
- <p><directive module="core">AllowOverride</directive> $B$,E,@Z$K@_Dj$5$l$F$$$l$P!"(B
- .htaccess $B%U%!%$%k$G(B <directive module="core">ErrorDocument</directive>
- $B$r;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$3$3$K!"$$$/$D$+$NNc$r5s$2$^$9!#(B</p>
-
- <example>
- ErrorDocument 500 /cgi-bin/crash-recover <br />
- ErrorDocument 500 "Sorry, our script crashed. Oh dear" <br />
- ErrorDocument 500 http://xxx/ <br />
- ErrorDocument 404 /Lame_excuses/not_found.html <br />
- ErrorDocument 401 /Subscription/how_to_subscribe.html
- </example>
-
- <p>$B9=J8(B</p>
-
- <example>
- ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
- </example>
-
- <p>action ($BF0:n(B) $B$O!"(B</p>
-
- <ol>
- <li>$BI=<($5$l$k$Y$-%F%-%9%H!#%F%-%9%H$K$O0zMQId(B (") $B$r$D$1$^$9!#(B
- $B0zMQId$N8e$KB3$/$b$N$,2?$G$bI=<($5$l$^$9!#(B
- <em>$BCm0U(B : (") $B$OI=<($5$l$^$;$s(B</em></li>
-
- <li>$B%j%@%$%l%/%H@h$N30It(B URL </li>
-
- <li>$B%j%@%$%l%/%H@h$N%m!<%+%k(B URL </li>
- </ol>
- </section>
-
- <section id="custom">
- <title>$B%+%9%?%`%(%i!<%l%9%]%s%9$H%j%@%$%l%/%H(B</title>
-
- <p>$B%9%/%j%W%H(B/SSI $B$KDI2C$N4D6-JQ?t$,MxMQ2DG=$K$J$k$h$&$K!"(B
- $B%j%@%$%l%/%H$5$l$?(B URL $B$KBP$9$k(B Apache $B$NF0:n$,JQ99$5$l$^$7$?!#(B</p>
-
- <section>
- <title>$B8E$$F0:n(B</title>
-
- <p>$B%j%@%$%l%/%H$5$l$?%9%/%j%W%H$OI8=`$N(B CGI
- $B4D6-JQ?t$rMxMQ2DG=$G$7$?!#$7$+$7!"$I$3$+$i%j%@%$%l%/%H(B
- $B$5$l$?$+$N>pJs$ODs6!$5$l$F$$$^$;$s$G$7$?!#(B</p>
- </section>
-
- <section>
- <title>$B?7$7$$F0:n(B</title>
-
- <p>$B%j%@%$%l%/%H$5$l$?@h$N%9%/%j%W%H$,;HMQ2DG=$J$h$&$K!"(B
- $B?7$7$$$?$/$5$s$N4D6-JQ?t$,=i4|2=$5$l$^$9!#?7$7$$JQ?t$O!"$=$l$>$l(B
- <code>REDIRECT_</code> $B$G;O$^$j$^$9!#(B
- <code>REDIRECT_</code> $B$G;O$^$k4D6-JQ?t$O%j%@%$%l%/%H$5$l$kA0$KB8:_$7$F$$$?(B
- CGI $B4D6-JQ?t$NF,$K(B <code>REDIRECT_</code> $B$rIU$1$F:n@.$5$l$^$9!#(B
- <em>$B$9$J$o$A(B</em>$B!"(B<code>HTTP_USER_AGENT</code> $B$O(B
- <code>REDIRECT_HTTP_USER_AGENT</code> $B$K$J$j$^$9!#(B
- $B$3$l$i$N?7$7$$JQ?t$K2C$($F!"(BApache $B$O!"(B
- $B%9%/%j%W%H$,%j%@%$%l%/%H85$N%H%l!<%9$r=u$1$k$?$a$K(B
- <code>REDIRECT_URL</code> $B$H(B <code>REDIRECT_STATUS</code>
- $B$rDj5A$7$^$9!#%"%/%;%9%m%0$K$O85$N(B URL $B$H%j%@%$%l%/%H$5$l$?(B URL
- $B$NN>J}$,5-O?$5$l$^$9!#(B</p>
-
- <p>ErrorDocument $B$,(B CGI $B%9%/%j%W%H$X$N%m!<%+%k%j%@%$%l%/%H$r(B
- $B;XDj$7$F$$$k>l9g$O!"$=$l$r5/F0$9$k$3$H$K$J$C$?%(%i!<$N>uBV$r(B
- $B%/%i%$%"%s%H$^$G3N<B$KEA$($k$?$a$K(B <code>"Status:" </code>
- $B%X%C%@$r4^$`$Y$-$G$9!#Nc$($P!"(BErrorDocument $BMQ$N(B Perl
- $B%9%/%j%W%H$O0J2<$N$h$&$J$b$N$r4^$`$+$b$7$l$^$;$s!#(B
- </p>
-
- <example>
- ... <br />
- print "Content-type: text/html\n"; <br />
- printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"}; <br />
- ...
- </example>
-
- <p>$B%9%/%j%W%H$,(B <code>404 Not Found</code> $B$N$h$&$J(B
- $BFCDj$N%(%i!<%3%s%G%#%7%g%s$r07$&$?$a$@$1$K;H$o$l$k>l9g$O!"(B
- $BBe$o$j$KFCDj$N%3!<%I$H%(%i!<%F%-%9%H$r;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/custom-error.xml.ko b/docs/manual/custom-error.xml.ko
deleted file mode 100644
index 99aca542eb..0000000000
--- a/docs/manual/custom-error.xml.ko
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="custom-error.xml.meta">
-
- <title>»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä</title>
-
- <summary>
- <p>À¥¸¶½ºÅÍ´Â ¿À·ù³ª ¹®Á¦°¡ ¹ß»ýÇßÀ»¶§ ¾ÆÆÄÄ¡ÀÇ ÀÀ´äÀ»
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼­¹ö°¡ ¿À·ù³ª ¹®Á¦¸¦ ¹ß°ßÇßÀ»¶§ º¸³¾ »ç¿ëÀÚÁ¤ÀÇ ÀÀ´äÀ»
- Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>½ºÅ©¸³Æ®°¡ Á×Àº °æ¿ì "500 Server Error" ÀÀ´ä ´ë½Å »ç¿ëÀÚ¿¡°Ô
- ´õ Ä£±ÙÇÑ ¹®±¸¸¦ »ç¿ëÇϰųª ´Ù¸¥ (°°Àº »çÀÌÆ®³ª ¿ÜºÎ »çÀÌÆ®ÀÇ)
- URL·Î ¸®´ÙÀÌ·º¼ÇÀ» ÇÒ ¼ö ÀÖ´Ù.</p>
- </summary>
-
- <section id="behavior">
- <title>Çൿ</title>
-
- <section>
- <title>ÀÌÀü Çൿ</title>
-
- <p>NCSA httpd 1.3Àº »ç¿ëÀÚ¿¡°Ô ¹«ÀǹÌÇÏ°í Áö·çÇÑ ¿À·ù¹®À»
- º¸³Â´Ù. ¹®Á¦°¡ ¹ß»ýÇÑ ÀÌÀ¯¸¦ ·Î±×¿¡ ³²±æ ¼öµµ ¾ø¾ú´Ù.</p>
- </section>
-
- <section>
- <title>»õ·Î¿î Çൿ</title>
-
- <p>¼­¹ö´Â ´ÙÀ½°ú °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ol>
- <li>NCSAÀÇ °íÁ¤µÈ ¹®±¸ ´ë½Å ´Ù¸¥ ¹®±¸¸¦ º¸¿©Áְųª</li>
-
- <li>°°Àº »çÀÌÆ®ÀÇ URL·Î ¸®´ÙÀÌ·º¼ÇÇϰųª</li>
-
- <li>¿ÜºÎ »çÀÌÆ®ÀÇ URL·Î ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.</li>
- </ol>
-
- <p>´Ù¸¥ »çÀÌÆ®ÀÇ URL·Î ¸®´ÙÀÌ·º¼ÇÇÏ´Â °ÍÀÌ À¯¿ëÇÒ ¼ö ÀÖÁö¸¸,
- ÀÌ °æ¿ì ¹®Á¦¸¦ ¼³¸íÇϰųª ·Î±×Çϴµ¥ ÇÊ¿äÇÑ Á¤º¸Áß ÀϺθ¸
- Àü´ÞµÈ´Ù.</p>
-
- <p>¿À·ù¿¡ ´ëÇÑ Á¤º¸¸¦ Àü´ÞÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â CGI½ÄÀÇ »õ·Î¿î
- ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÑ´Ù:</p>
-
- <example>
- REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap,
- image/jpeg<br />
- REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05
- 9000/712)<br />
- REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
- REDIRECT_QUERY_STRING=<br />
- REDIRECT_REMOTE_ADDR=121.345.78.123<br />
- REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
- REDIRECT_SERVER_NAME=crash.bang.edu<br />
- REDIRECT_SERVER_PORT=80<br />
- REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
- REDIRECT_URL=/cgi-bin/buggy.pl
- </example>
-
- <p><code>REDIRECT_</code> Á¢µÎ»ç¿¡ ÁÖ¸ñÇ϶ó.</p>
-
- <p>ÃÖ¼ÒÇÑ <code>REDIRECT_URL</code>°ú
- <code>REDIRECT_QUERY_STRING</code>Àº (cgi-script³ª
- cgi-includeÀÏ) »õ URL·Î ³Ñ°ÜÁø´Ù. ´Ù¸¥ º¯¼ö´Â ¿À·ù°¡
- ¹ß»ýÇϱâ ÀÌÀü¿¡ <transnote>À̸§¿¡¼­ <code>REDIRECT_</code>¸¦
- »« ȯ°æº¯¼ö°¡</transnote> Á¸ÀçÇÑ °æ¿ì¿¡¸¸ ÀÖ´Ù.
- <directive module="core">ErrorDocument</directive>°¡
- <em>¿ÜºÎ·Î</em> (°°Àº ¼­¹ö¶óµµ <code>http:</code>¿Í
- °°Àº ½ºÅ´(scheme)À¸·Î ½ÃÀÛÇÑ´Ù¸é) ¸®´ÙÀÌ·º¼ÇÇÑ´Ù¸é
- ÀÌÁß ¾î¶² °Íµµ ¼³Á¤µÇÁö <strong>¾Ê´Â´Ù</strong>.</p>
- </section>
- </section>
-
- <section id="configuration">
- <title>¼³Á¤</title>
-
- <p><directive module="core">AllowOverride</directive>°¡
- ÀûÀýÈ÷ ¼³Á¤µÇ¾ú´Ù¸é .htaccess ÆÄÀÏ¿¡¼­
- <directive module="core">ErrorDocument</directive>¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>´ÙÀ½Àº ¿¹ÀÌ´Ù...</p>
-
- <example>
- ErrorDocument 500 /cgi-bin/crash-recover <br />
- ErrorDocument 500 "Sorry, our script crashed. Oh dear" <br />
- ErrorDocument 500 http://xxx/ <br />
- ErrorDocument 404 /Lame_excuses/not_found.html <br />
- ErrorDocument 401 /Subscription/how_to_subscribe.html
- </example>
-
- <p>¹®¹ýÀº,</p>
-
- <example>
- ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
- </example>
-
- <p>°¡´ÉÇÑ actionÀº,</p>
-
- <ol>
- <li>Ãâ·ÂÇÒ ¹®±¸. µû¿ÈÇ¥ (")¸¦ ¹®±¸ ¾Õ¿¡ ºÙÀδÙ. µÚ¿¡ ³ª¿À´Â
- µû¿ÈÇ¥´Â Ãâ·ÂµÈ´Ù. <em>ÁÖÀÇ: ¾Õ¿¡ ºÙÀº µû¿ÈÇ¥ (")´Â Ãâ·ÂµÇÁö
- ¾Ê´Â´Ù.</em></li>
-
- <li>¸®´ÙÀÌ·º¼ÇÇÒ ¿ÜºÎ URL.</li>
-
- <li>¸®´ÙÀÌ·º¼ÇÇÒ ³»ºÎ URL.</li>
- </ol>
- </section>
-
- <section id="custom">
- <title>»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä°ú ¸®´ÙÀÌ·º¼Ç</title>
-
- <p>URL·Î ¸®´ÙÀÌ·º¼ÇÇÏ´Â ¾ÆÆÄÄ¡ ÇൿÀº
- ½ºÅ©¸³Æ®/server-include¿¡ ȯ°æº¯¼ö¸¦ ´õ ³Ñ°ÜÁÖµµ·Ï º¯°æµÇ¾ú´Ù.</p>
-
- <section>
- <title>ÀÌÀü Çൿ</title>
-
- <p>¸®´ÙÀÌ·º¼ÇµÇ´Â ½ºÅ©¸³Æ®¿¡ Ç¥ÁØ CGI º¯¼öµéÀÌ ³Ñ¾î°£´Ù.
- ¾îµð¿¡¼­ ¸®´ÙÀÌ·º¼ÇÀÌ ÀϾ´ÂÁö ¾Ë ¼ö ¾ø´Ù.</p>
- </section>
-
- <section>
- <title>»õ·Î¿î Çൿ</title>
-
- <p>¸®´ÙÀÌ·º¼ÇµÈ ½ºÅ©¸³Æ®´Â »õ·Î¿î ȯ°æº¯¼öµéÀ» »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. ¸ðµÎ ¾Õ¿¡ <code>REDIRECT_</code>°¡ ºÙ¾îÀÖ´Ù.
- <code>REDIRECT_</code> ȯ°æº¯¼ö´Â ¿ø·¡ CGI ȯ°æº¯¼ö¸í
- ¾Õ¿¡ <code>REDIRECT_</code>¸¦ ºÙ¿©¼­ ¸¸µç´Ù. <em>¿¹¸¦
- µé¾î</em>, <code>HTTP_USER_AGENT</code>´Â
- <code>REDIRECT_HTTP_USER_AGENT</code>°¡ µÇ¾ú´Ù. ÀÌ·± º¯¼ö¿¡
- Ãß°¡·Î ½ºÅ©¸³Æ®°¡ ¿ø·¡ URLÀ» ¾Ëµµ·Ï ¾ÆÆÄÄ¡´Â
- <code>REDIRECT_URL</code>°ú <code>REDIRECT_STATUS</code>¸¦
- Á¤ÀÇÇÑ´Ù. ¿ø·¡ URL°ú ¸®´ÙÀÌ·º¼ÇµÈ URL ¸ðµÎ Á¢±Ù ·Î±×¿¡
- ±â·ÏÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ErrorDocument°¡ °°Àº ¼­¹ö¿¡ ÀÖ´Â CGI ½ºÅ©¸³Æ®·Î
- ¸®´ÙÀÌ·º¼ÇÇÑ´Ù¸é, ½ºÅ©¸³Æ®´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¿À·ù »óȲÀ»
- È®½ÇÈ÷ Àü´ÞÇϱâÀ§ÇØ Ãâ·Â¿¡ "<code>Status:</code>" Çì´õ
- Çʵ带 Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î, Perl·Î ÀÛ¼ºÇÑ ErrorDocument
- ½ºÅ©¸³Æ®´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <example>
- ... <br />
- print "Content-type: text/html\n"; <br />
- printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"}; <br />
- ...
- </example>
-
- <p><code>404&nbsp;Not&nbsp;Found</code>¿Í °°Àº ƯÁ¤ ¿À·ù
- »óȲ¿¡ ´ëÇÑ ½ºÅ©¸³Æ®¶ó¸é, ´ë½Å <transnote>°íÁ¤µÈ</transnote>
- ƯÁ¤ »óÅÂÄÚµå¿Í ¿À·ù¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>(Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀ» ¿äûÇϱâÀ§ÇØ) ÀÀ´ä¿¡
- <code>Location:</code> Çì´õ¸¦ Æ÷ÇÔÇÑ´Ù¸é, ½ºÅ©¸³Æ®´Â
- <em>¹Ýµå½Ã</em> (<code>302&nbsp;Found</code> °°Àº) ÀûÀýÇÑ
- <code>Status:</code> Çì´õ¸¦ Ãâ·ÂÇØ¾ß ÇÔÀ» ÁÖÀÇÇ϶ó. ±×·¸Áö¾ÊÀ¸¸é
- <code>Location:</code> Çì´õ°¡ ¾Æ¹« ¼Ò¿ë¾ø°Ô µÉ ¼ö ÀÖ´Ù.</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/custom-error.xml.meta b/docs/manual/custom-error.xml.meta
deleted file mode 100644
index 270910c8b5..0000000000
--- a/docs/manual/custom-error.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>custom-error</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/.cvsignore b/docs/manual/developer/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/developer/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/developer/API.html b/docs/manual/developer/API.html
deleted file mode 100644
index a8a3c492a4..0000000000
--- a/docs/manual/developer/API.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: API.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/API.html.en b/docs/manual/developer/API.html.en
deleted file mode 100644
index 6a3186963e..0000000000
--- a/docs/manual/developer/API.html.en
+++ /dev/null
@@ -1,1222 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache 1.3 API notes - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Apache 1.3 API notes</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/API.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <div class="warning"><h3>Warning</h3>
- <p>This document has not been updated to take into account changes made
- in the 2.0 version of the Apache HTTP Server. Some of the information may
- still be relevant, but please use it with care.</p>
- </div>
-
- <p>These are some notes on the Apache API and the data structures you have
- to deal with, <em>etc.</em> They are not yet nearly complete, but hopefully,
- they will help you get your bearings. Keep in mind that the API is still
- subject to change as we gain experience with it. (See the TODO file for
- what <em>might</em> be coming). However, it will be easy to adapt modules
- to any changes that are made. (We have more modules to adapt than you
- do).</p>
-
- <p>A few notes on general pedagogical style here. In the interest of
- conciseness, all structure declarations here are incomplete -- the real
- ones have more slots that I'm not telling you about. For the most part,
- these are reserved to one component of the server core or another, and
- should be altered by modules with caution. However, in some cases, they
- really are things I just haven't gotten around to yet. Welcome to the
- bleeding edge.</p>
-
- <p>Finally, here's an outline, to give you some bare idea of what's coming
- up, and in what order:</p>
-
- <ul>
- <li>
- <a href="#basics">Basic concepts.</a>
-
- <ul>
- <li><a href="#HMR">Handlers, Modules, and
- Requests</a></li>
-
- <li><a href="#moduletour">A brief tour of a
- module</a></li>
- </ul>
- </li>
-
- <li>
- <a href="#handlers">How handlers work</a>
-
- <ul>
- <li><a href="#req_tour">A brief tour of the
- <code>request_rec</code></a></li>
-
- <li><a href="#req_orig">Where request_rec structures come
- from</a></li>
-
- <li><a href="#req_return">Handling requests, declining,
- and returning error codes</a></li>
-
- <li><a href="#resp_handlers">Special considerations for
- response handlers</a></li>
-
- <li><a href="#auth_handlers">Special considerations for
- authentication handlers</a></li>
-
- <li><a href="#log_handlers">Special considerations for
- logging handlers</a></li>
- </ul>
- </li>
-
- <li><a href="#pools">Resource allocation and resource
- pools</a></li>
-
- <li>
- <a href="#config">Configuration, commands and the like</a>
-
- <ul>
- <li><a href="#per-dir">Per-directory configuration
- structures</a></li>
-
- <li><a href="#commands">Command handling</a></li>
-
- <li><a href="#servconf">Side notes --- per-server
- configuration, virtual servers, <em>etc</em>.</a></li>
- </ul>
- </li>
- </ul>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#basics">Basic concepts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#handlers">How handlers work</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pools">Resource allocation and resource pools</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#config">Configuration, commands and the like</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basics" id="basics">Basic concepts</a></h2>
- <p>We begin with an overview of the basic concepts behind the API, and how
- they are manifested in the code.</p>
-
- <h3><a name="HMR" id="HMR">Handlers, Modules, and Requests</a></h3>
- <p>Apache breaks down request handling into a series of steps, more or
- less the same way the Netscape server API does (although this API has a
- few more stages than NetSite does, as hooks for stuff I thought might be
- useful in the future). These are:</p>
-
- <ul>
- <li>URI -&gt; Filename translation</li>
- <li>Auth ID checking [is the user who they say they are?]</li>
- <li>Auth access checking [is the user authorized <em>here</em>?]</li>
- <li>Access checking other than auth</li>
- <li>Determining MIME type of the object requested</li>
- <li>`Fixups' -- there aren't any of these yet, but the phase is intended
- as a hook for possible extensions like <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>, which don't really fit well elsewhere.</li>
- <li>Actually sending a response back to the client.</li>
- <li>Logging the request</li>
- </ul>
-
- <p>These phases are handled by looking at each of a succession of
- <em>modules</em>, looking to see if each of them has a handler for the
- phase, and attempting invoking it if so. The handler can typically do one
- of three things:</p>
-
- <ul>
- <li><em>Handle</em> the request, and indicate that it has done so by
- returning the magic constant <code>OK</code>.</li>
-
- <li><em>Decline</em> to handle the request, by returning the magic integer
- constant <code>DECLINED</code>. In this case, the server behaves in all
- respects as if the handler simply hadn't been there.</li>
-
- <li>Signal an error, by returning one of the HTTP error codes. This
- terminates normal handling of the request, although an ErrorDocument may
- be invoked to try to mop up, and it will be logged in any case.</li>
- </ul>
-
- <p>Most phases are terminated by the first module that handles them;
- however, for logging, `fixups', and non-access authentication checking,
- all handlers always run (barring an error). Also, the response phase is
- unique in that modules may declare multiple handlers for it, via a
- dispatch table keyed on the MIME type of the requested object. Modules may
- declare a response-phase handler which can handle <em>any</em> request,
- by giving it the key <code>*/*</code> (<em>i.e.</em>, a wildcard MIME type
- specification). However, wildcard handlers are only invoked if the server
- has already tried and failed to find a more specific response handler for
- the MIME type of the requested object (either none existed, or they all
- declined).</p>
-
- <p>The handlers themselves are functions of one argument (a
- <code>request_rec</code> structure. vide infra), which returns an integer,
- as above.</p>
-
-
- <h3><a name="moduletour" id="moduletour">A brief tour of a module</a></h3>
- <p>At this point, we need to explain the structure of a module. Our
- candidate will be one of the messier ones, the CGI module -- this handles
- both CGI scripts and the <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> config file command. It's actually a great deal
- more complicated than most modules, but if we're going to have only one
- example, it might as well be the one with its fingers in every place.</p>
-
- <p>Let's begin with handlers. In order to handle the CGI scripts, the
- module declares a response handler for them. Because of <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>, it also has handlers for the
- name translation phase (to recognize <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>ed URIs), the type-checking phase (any
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>ed request is typed
- as a CGI script).</p>
-
- <p>The module needs to maintain some per (virtual) server information,
- namely, the <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>es in
- effect; the module structure therefore contains pointers to a functions
- which builds these structures, and to another which combines two of them
- (in case the main server and a virtual server both have <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>es declared).</p>
-
- <p>Finally, this module contains code to handle the <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> command itself. This particular
- module only declares one command, but there could be more, so modules have
- <em>command tables</em> which declare their commands, and describe where
- they are permitted, and how they are to be invoked.</p>
-
- <p>A final note on the declared types of the arguments of some of these
- commands: a <code>pool</code> is a pointer to a <em>resource pool</em>
- structure; these are used by the server to keep track of the memory which
- has been allocated, files opened, <em>etc.</em>, either to service a
- particular request, or to handle the process of configuring itself. That
- way, when the request is over (or, for the configuration pool, when the
- server is restarting), the memory can be freed, and the files closed,
- <em>en masse</em>, without anyone having to write explicit code to track
- them all down and dispose of them. Also, a <code>cmd_parms</code>
- structure contains various information about the config file being read,
- and other status information, which is sometimes of use to the function
- which processes a config-file command (such as <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>). With no further ado, the
- module itself:</p>
-
- <div class="example"><p><code>
- /* Declarations of handlers. */<br />
- <br />
- int translate_scriptalias (request_rec *);<br />
- int type_scriptalias (request_rec *);<br />
- int cgi_handler (request_rec *);<br />
- <br />
- /* Subsidiary dispatch table for response-phase <br />
- &nbsp;* handlers, by MIME type */<br />
- <br />
- handler_rec cgi_handlers[] = {<br />
- <span class="indent">
- { "application/x-httpd-cgi", cgi_handler },<br />
- { NULL }<br />
- </span>
- };<br />
- <br />
- /* Declarations of routines to manipulate the <br />
- &nbsp;* module's configuration info. Note that these are<br />
- &nbsp;* returned, and passed in, as void *'s; the server<br />
- &nbsp;* core keeps track of them, but it doesn't, and can't,<br />
- &nbsp;* know their internal structure.<br />
- &nbsp;*/<br />
- <br />
- void *make_cgi_server_config (pool *);<br />
- void *merge_cgi_server_config (pool *, void *, void *);<br />
- <br />
- /* Declarations of routines to handle config-file commands */<br />
- <br />
- extern char *script_alias(cmd_parms *, void *per_dir_config, char *fake,
- char *real);<br />
- <br />
- command_rec cgi_cmds[] = {<br />
- <span class="indent">
- { "ScriptAlias", script_alias, NULL, RSRC_CONF, TAKE2,<br />
- <span class="indent">"a fakename and a realname"},<br /></span>
- { NULL }<br />
- </span>
- };<br />
- <br />
- module cgi_module = {
-</code></p><pre> STANDARD_MODULE_STUFF,
- NULL, /* initializer */
- NULL, /* dir config creator */
- NULL, /* dir merger */
- make_cgi_server_config, /* server config */
- merge_cgi_server_config, /* merge server config */
- cgi_cmds, /* command table */
- cgi_handlers, /* handlers */
- translate_scriptalias, /* filename translation */
- NULL, /* check_user_id */
- NULL, /* check auth */
- NULL, /* check access */
- type_scriptalias, /* type_checker */
- NULL, /* fixups */
- NULL, /* logger */
- NULL /* header parser */
-};</pre></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="handlers" id="handlers">How handlers work</a></h2>
- <p>The sole argument to handlers is a <code>request_rec</code> structure.
- This structure describes a particular request which has been made to the
- server, on behalf of a client. In most cases, each connection to the
- client generates only one <code>request_rec</code> structure.</p>
-
- <h3><a name="req_tour" id="req_tour">A brief tour of the request_rec</a></h3>
- <p>The <code>request_rec</code> contains pointers to a resource pool
- which will be cleared when the server is finished handling the request;
- to structures containing per-server and per-connection information, and
- most importantly, information on the request itself.</p>
-
- <p>The most important such information is a small set of character strings
- describing attributes of the object being requested, including its URI,
- filename, content-type and content-encoding (these being filled in by the
- translation and type-check handlers which handle the request,
- respectively).</p>
-
- <p>Other commonly used data items are tables giving the MIME headers on
- the client's original request, MIME headers to be sent back with the
- response (which modules can add to at will), and environment variables for
- any subprocesses which are spawned off in the course of servicing the
- request. These tables are manipulated using the <code>ap_table_get</code>
- and <code>ap_table_set</code> routines.</p>
-
- <div class="note">
- <p>Note that the <code>Content-type</code> header value <em>cannot</em>
- be set by module content-handlers using the <code>ap_table_*()</code>
- routines. Rather, it is set by pointing the <code>content_type</code>
- field in the <code>request_rec</code> structure to an appropriate
- string. <em>e.g.</em>,</p>
- <div class="example"><p><code>
- r-&gt;content_type = "text/html";
- </code></p></div>
- </div>
-
- <p>Finally, there are pointers to two data structures which, in turn,
- point to per-module configuration structures. Specifically, these hold
- pointers to the data structures which the module has built to describe
- the way it has been configured to operate in a given directory (via
- <code>.htaccess</code> files or <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> sections), for private data it has built in the
- course of servicing the request (so modules' handlers for one phase can
- pass `notes' to their handlers for other phases). There is another such
- configuration vector in the <code>server_rec</code> data structure pointed
- to by the <code>request_rec</code>, which contains per (virtual) server
- configuration data.</p>
-
- <p>Here is an abridged declaration, giving the fields most commonly
- used:</p>
-
- <div class="example"><p><code>
- struct request_rec {<br />
- <br />
- pool *pool;<br />
- conn_rec *connection;<br />
- server_rec *server;<br />
- <br />
- /* What object is being requested */<br />
- <br />
- char *uri;<br />
- char *filename;<br />
- char *path_info;
-</code></p><pre>char *args; /* QUERY_ARGS, if any */
-struct stat finfo; /* Set by server core;
- * st_mode set to zero if no such file */</pre><p><code>
- char *content_type;<br />
- char *content_encoding;<br />
- <br />
- /* MIME header environments, in and out. Also, <br />
- &nbsp;* an array containing environment variables to<br />
- &nbsp;* be passed to subprocesses, so people can write<br />
- &nbsp;* modules to add to that environment.<br />
- &nbsp;*<br />
- &nbsp;* The difference between headers_out and <br />
- &nbsp;* err_headers_out is that the latter are printed <br />
- &nbsp;* even on error, and persist across internal<br />
- &nbsp;* redirects (so the headers printed for <br />
- &nbsp;* <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> handlers will have
- them).<br />
- &nbsp;*/<br />
- <br />
- table *headers_in;<br />
- table *headers_out;<br />
- table *err_headers_out;<br />
- table *subprocess_env;<br />
- <br />
- /* Info about the request itself... */<br />
- <br />
-</code></p><pre>int header_only; /* HEAD request, as opposed to GET */
-char *protocol; /* Protocol, as given to us, or HTTP/0.9 */
-char *method; /* GET, HEAD, POST, <em>etc.</em> */
-int method_number; /* M_GET, M_POST, <em>etc.</em> */
-
-</pre><p><code>
- /* Info for logging */<br />
- <br />
- char *the_request;<br />
- int bytes_sent;<br />
- <br />
- /* A flag which modules can set, to indicate that<br />
- &nbsp;* the data being returned is volatile, and clients<br />
- &nbsp;* should be told not to cache it.<br />
- &nbsp;*/<br />
- <br />
- int no_cache;<br />
- <br />
- /* Various other config info which may change<br />
- &nbsp;* with .htaccess files<br />
- &nbsp;* These are config vectors, with one void*<br />
- &nbsp;* pointer for each module (the thing pointed<br />
- &nbsp;* to being the module's business).<br />
- &nbsp;*/<br />
- <br />
-</code></p><pre>void *per_dir_config; /* Options set in config files, <em>etc.</em> */
-void *request_config; /* Notes on *this* request */</pre><p><code>
- <br />
- };
- </code></p></div>
-
-
- <h3><a name="req_orig" id="req_orig">Where request_rec structures come from</a></h3>
- <p>Most <code>request_rec</code> structures are built by reading an HTTP
- request from a client, and filling in the fields. However, there are a
- few exceptions:</p>
-
- <ul>
- <li>If the request is to an imagemap, a type map (<em>i.e.</em>, a
- <code>*.var</code> file), or a CGI script which returned a local
- `Location:', then the resource which the user requested is going to be
- ultimately located by some URI other than what the client originally
- supplied. In this case, the server does an <em>internal redirect</em>,
- constructing a new <code>request_rec</code> for the new URI, and
- processing it almost exactly as if the client had requested the new URI
- directly.</li>
-
- <li>If some handler signaled an error, and an <code>ErrorDocument</code>
- is in scope, the same internal redirect machinery comes into play.</li>
-
- <li><p>Finally, a handler occasionally needs to investigate `what would
- happen if' some other request were run. For instance, the directory
- indexing module needs to know what MIME type would be assigned to a
- request for each directory entry, in order to figure out what icon to
- use.</p>
-
- <p>Such handlers can construct a <em>sub-request</em>, using the
- functions <code>ap_sub_req_lookup_file</code>,
- <code>ap_sub_req_lookup_uri</code>, and <code>ap_sub_req_method_uri</code>;
- these construct a new <code>request_rec</code> structure and processes it
- as you would expect, up to but not including the point of actually sending
- a response. (These functions skip over the access checks if the
- sub-request is for a file in the same directory as the original
- request).</p>
-
- <p>(Server-side includes work by building sub-requests and then actually
- invoking the response handler for them, via the function
- <code>ap_run_sub_req</code>).</p>
- </li>
- </ul>
-
-
- <h3><a name="req_return" id="req_return">Handling requests, declining, and returning
- error codes</a></h3>
- <p>As discussed above, each handler, when invoked to handle a particular
- <code>request_rec</code>, has to return an <code>int</code> to indicate
- what happened. That can either be</p>
-
- <ul>
- <li><code>OK</code> -- the request was handled successfully. This may or
- may not terminate the phase.</li>
-
- <li><code>DECLINED</code> -- no erroneous condition exists, but the module
- declines to handle the phase; the server tries to find another.</li>
-
- <li>an HTTP error code, which aborts handling of the request.</li>
- </ul>
-
- <p>Note that if the error code returned is <code>REDIRECT</code>, then
- the module should put a <code>Location</code> in the request's
- <code>headers_out</code>, to indicate where the client should be
- redirected <em>to</em>.</p>
-
-
- <h3><a name="resp_handlers" id="resp_handlers">Special considerations for response
- handlers</a></h3>
- <p>Handlers for most phases do their work by simply setting a few fields
- in the <code>request_rec</code> structure (or, in the case of access
- checkers, simply by returning the correct error code). However, response
- handlers have to actually send a request back to the client.</p>
-
- <p>They should begin by sending an HTTP response header, using the
- function <code>ap_send_http_header</code>. (You don't have to do anything
- special to skip sending the header for HTTP/0.9 requests; the function
- figures out on its own that it shouldn't do anything). If the request is
- marked <code>header_only</code>, that's all they should do; they should
- return after that, without attempting any further output.</p>
-
- <p>Otherwise, they should produce a request body which responds to the
- client as appropriate. The primitives for this are <code>ap_rputc</code>
- and <code>ap_rprintf</code>, for internally generated output, and
- <code>ap_send_fd</code>, to copy the contents of some <code>FILE *</code>
- straight to the client.</p>
-
- <p>At this point, you should more or less understand the following piece
- of code, which is the handler which handles <code>GET</code> requests
- which have no more specific handler; it also shows how conditional
- <code>GET</code>s can be handled, if it's desirable to do so in a
- particular response handler -- <code>ap_set_last_modified</code> checks
- against the <code>If-modified-since</code> value supplied by the client,
- if any, and returns an appropriate code (which will, if nonzero, be
- USE_LOCAL_COPY). No similar considerations apply for
- <code>ap_set_content_length</code>, but it returns an error code for
- symmetry.</p>
-
- <div class="example"><p><code>
- int default_handler (request_rec *r)<br />
- {<br />
- <span class="indent">
- int errstatus;<br />
- FILE *f;<br />
- <br />
- if (r-&gt;method_number != M_GET) return DECLINED;<br />
- if (r-&gt;finfo.st_mode == 0) return NOT_FOUND;<br />
- <br />
- if ((errstatus = ap_set_content_length (r, r-&gt;finfo.st_size))<br />
- &nbsp;&nbsp;&nbsp;&nbsp;||
- (errstatus = ap_set_last_modified (r, r-&gt;finfo.st_mtime)))<br />
- return errstatus;<br />
- <br />
- f = fopen (r-&gt;filename, "r");<br />
- <br />
- if (f == NULL) {<br />
- <span class="indent">
- log_reason("file permissions deny server access", r-&gt;filename, r);<br />
- return FORBIDDEN;<br />
- </span>
- }<br />
- <br />
- register_timeout ("send", r);<br />
- ap_send_http_header (r);<br />
- <br />
- if (!r-&gt;header_only) send_fd (f, r);<br />
- ap_pfclose (r-&gt;pool, f);<br />
- return OK;<br />
- </span>
- }
- </code></p></div>
-
- <p>Finally, if all of this is too much of a challenge, there are a few
- ways out of it. First off, as shown above, a response handler which has
- not yet produced any output can simply return an error code, in which
- case the server will automatically produce an error response. Secondly,
- it can punt to some other handler by invoking
- <code>ap_internal_redirect</code>, which is how the internal redirection
- machinery discussed above is invoked. A response handler which has
- internally redirected should always return <code>OK</code>.</p>
-
- <p>(Invoking <code>ap_internal_redirect</code> from handlers which are
- <em>not</em> response handlers will lead to serious confusion).</p>
-
-
- <h3><a name="auth_handlers" id="auth_handlers">Special considerations for authentication
- handlers</a></h3>
- <p>Stuff that should be discussed here in detail:</p>
-
- <ul>
- <li>Authentication-phase handlers not invoked unless auth is
- configured for the directory.</li>
-
- <li>Common auth configuration stored in the core per-dir
- configuration; it has accessors <code>ap_auth_type</code>,
- <code>ap_auth_name</code>, and <code>ap_requires</code>.</li>
-
- <li>Common routines, to handle the protocol end of things, at
- least for HTTP basic authentication
- (<code>ap_get_basic_auth_pw</code>, which sets the
- <code>connection-&gt;user</code> structure field
- automatically, and <code>ap_note_basic_auth_failure</code>,
- which arranges for the proper <code>WWW-Authenticate:</code>
- header to be sent back).</li>
- </ul>
-
-
- <h3><a name="log_handlers" id="log_handlers">Special considerations for logging
- handlers</a></h3>
- <p>When a request has internally redirected, there is the question of
- what to log. Apache handles this by bundling the entire chain of redirects
- into a list of <code>request_rec</code> structures which are threaded
- through the <code>r-&gt;prev</code> and <code>r-&gt;next</code> pointers.
- The <code>request_rec</code> which is passed to the logging handlers in
- such cases is the one which was originally built for the initial request
- from the client; note that the <code>bytes_sent</code> field will only be
- correct in the last request in the chain (the one for which a response was
- actually sent).</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pools" id="pools">Resource allocation and resource pools</a></h2>
- <p>One of the problems of writing and designing a server-pool server is
- that of preventing leakage, that is, allocating resources (memory, open
- files, <em>etc.</em>), without subsequently releasing them. The resource
- pool machinery is designed to make it easy to prevent this from happening,
- by allowing resource to be allocated in such a way that they are
- <em>automatically</em> released when the server is done with them.</p>
-
- <p>The way this works is as follows: the memory which is allocated, file
- opened, <em>etc.</em>, to deal with a particular request are tied to a
- <em>resource pool</em> which is allocated for the request. The pool is a
- data structure which itself tracks the resources in question.</p>
-
- <p>When the request has been processed, the pool is <em>cleared</em>. At
- that point, all the memory associated with it is released for reuse, all
- files associated with it are closed, and any other clean-up functions which
- are associated with the pool are run. When this is over, we can be confident
- that all the resource tied to the pool have been released, and that none of
- them have leaked.</p>
-
- <p>Server restarts, and allocation of memory and resources for per-server
- configuration, are handled in a similar way. There is a <em>configuration
- pool</em>, which keeps track of resources which were allocated while reading
- the server configuration files, and handling the commands therein (for
- instance, the memory that was allocated for per-server module configuration,
- log files and other files that were opened, and so forth). When the server
- restarts, and has to reread the configuration files, the configuration pool
- is cleared, and so the memory and file descriptors which were taken up by
- reading them the last time are made available for reuse.</p>
-
- <p>It should be noted that use of the pool machinery isn't generally
- obligatory, except for situations like logging handlers, where you really
- need to register cleanups to make sure that the log file gets closed when
- the server restarts (this is most easily done by using the function <code><a href="#pool-files">ap_pfopen</a></code>, which also arranges for the
- underlying file descriptor to be closed before any child processes, such as
- for CGI scripts, are <code>exec</code>ed), or in case you are using the
- timeout machinery (which isn't yet even documented here). However, there are
- two benefits to using it: resources allocated to a pool never leak (even if
- you allocate a scratch string, and just forget about it); also, for memory
- allocation, <code>ap_palloc</code> is generally faster than
- <code>malloc</code>.</p>
-
- <p>We begin here by describing how memory is allocated to pools, and then
- discuss how other resources are tracked by the resource pool machinery.</p>
-
- <h3>Allocation of memory in pools</h3>
- <p>Memory is allocated to pools by calling the function
- <code>ap_palloc</code>, which takes two arguments, one being a pointer to
- a resource pool structure, and the other being the amount of memory to
- allocate (in <code>char</code>s). Within handlers for handling requests,
- the most common way of getting a resource pool structure is by looking at
- the <code>pool</code> slot of the relevant <code>request_rec</code>; hence
- the repeated appearance of the following idiom in module code:</p>
-
- <div class="example"><p><code>
- int my_handler(request_rec *r)<br />
- {<br />
- <span class="indent">
- struct my_structure *foo;<br />
- ...<br />
- <br />
- foo = (foo *)ap_palloc (r-&gt;pool, sizeof(my_structure));<br />
- </span>
- }
- </code></p></div>
-
- <p>Note that <em>there is no <code>ap_pfree</code></em> --
- <code>ap_palloc</code>ed memory is freed only when the associated resource
- pool is cleared. This means that <code>ap_palloc</code> does not have to
- do as much accounting as <code>malloc()</code>; all it does in the typical
- case is to round up the size, bump a pointer, and do a range check.</p>
-
- <p>(It also raises the possibility that heavy use of
- <code>ap_palloc</code> could cause a server process to grow excessively
- large. There are two ways to deal with this, which are dealt with below;
- briefly, you can use <code>malloc</code>, and try to be sure that all of
- the memory gets explicitly <code>free</code>d, or you can allocate a
- sub-pool of the main pool, allocate your memory in the sub-pool, and clear
- it out periodically. The latter technique is discussed in the section
- on sub-pools below, and is used in the directory-indexing code, in order
- to avoid excessive storage allocation when listing directories with
- thousands of files).</p>
-
-
- <h3>Allocating initialized memory</h3>
- <p>There are functions which allocate initialized memory, and are
- frequently useful. The function <code>ap_pcalloc</code> has the same
- interface as <code>ap_palloc</code>, but clears out the memory it
- allocates before it returns it. The function <code>ap_pstrdup</code>
- takes a resource pool and a <code>char *</code> as arguments, and
- allocates memory for a copy of the string the pointer points to, returning
- a pointer to the copy. Finally <code>ap_pstrcat</code> is a varargs-style
- function, which takes a pointer to a resource pool, and at least two
- <code>char *</code> arguments, the last of which must be
- <code>NULL</code>. It allocates enough memory to fit copies of each of
- the strings, as a unit; for instance:</p>
-
- <div class="example"><p><code>
- ap_pstrcat (r-&gt;pool, "foo", "/", "bar", NULL);
- </code></p></div>
-
- <p>returns a pointer to 8 bytes worth of memory, initialized to
- <code>"foo/bar"</code>.</p>
-
-
- <h3><a name="pools-used" id="pools-used">Commonly-used pools in the Apache Web
- server</a></h3>
- <p>A pool is really defined by its lifetime more than anything else.
- There are some static pools in http_main which are passed to various
- non-http_main functions as arguments at opportune times. Here they
- are:</p>
-
- <dl>
- <dt><code>permanent_pool</code></dt>
- <dd>never passed to anything else, this is the ancestor of all pools</dd>
-
- <dt><code>pconf</code></dt>
- <dd>
- <ul>
- <li>subpool of permanent_pool</li>
-
- <li>created at the beginning of a config "cycle"; exists
- until the server is terminated or restarts; passed to all
- config-time routines, either via cmd-&gt;pool, or as the
- "pool *p" argument on those which don't take pools</li>
-
- <li>passed to the module init() functions</li>
- </ul>
- </dd>
-
- <dt><code>ptemp</code></dt>
- <dd>
- <ul>
- <li>sorry I lie, this pool isn't called this currently in
- 1.3, I renamed it this in my pthreads development. I'm
- referring to the use of ptrans in the parent... contrast
- this with the later definition of ptrans in the
- child.</li>
-
- <li>subpool of permanent_pool</li>
-
- <li>created at the beginning of a config "cycle"; exists
- until the end of config parsing; passed to config-time
- routines <em>via</em> cmd-&gt;temp_pool. Somewhat of a
- "bastard child" because it isn't available everywhere.
- Used for temporary scratch space which may be needed by
- some config routines but which is deleted at the end of
- config.</li>
- </ul>
- </dd>
-
- <dt><code>pchild</code></dt>
- <dd>
- <ul>
- <li>subpool of permanent_pool</li>
-
- <li>created when a child is spawned (or a thread is
- created); lives until that child (thread) is
- destroyed</li>
-
- <li>passed to the module child_init functions</li>
-
- <li>destruction happens right after the child_exit
- functions are called... (which may explain why I think
- child_exit is redundant and unneeded)</li>
- </ul>
- </dd>
-
- <dt><code>ptrans</code></dt>
- <dd>
- <ul>
- <li>should be a subpool of pchild, but currently is a
- subpool of permanent_pool, see above</li>
-
- <li>cleared by the child before going into the accept()
- loop to receive a connection</li>
-
- <li>used as connection-&gt;pool</li>
- </ul>
- </dd>
-
- <dt><code>r-&gt;pool</code></dt>
- <dd>
- <ul>
- <li>for the main request this is a subpool of
- connection-&gt;pool; for subrequests it is a subpool of
- the parent request's pool.</li>
-
- <li>exists until the end of the request (<em>i.e.</em>,
- ap_destroy_sub_req, or in child_main after
- process_request has finished)</li>
-
- <li>note that r itself is allocated from r-&gt;pool;
- <em>i.e.</em>, r-&gt;pool is first created and then r is
- the first thing palloc()d from it</li>
- </ul>
- </dd>
- </dl>
-
- <p>For almost everything folks do, <code>r-&gt;pool</code> is the pool to
- use. But you can see how other lifetimes, such as pchild, are useful to
- some modules... such as modules that need to open a database connection
- once per child, and wish to clean it up when the child dies.</p>
-
- <p>You can also see how some bugs have manifested themself, such as
- setting <code>connection-&gt;user</code> to a value from
- <code>r-&gt;pool</code> -- in this case connection exists for the
- lifetime of <code>ptrans</code>, which is longer than
- <code>r-&gt;pool</code> (especially if <code>r-&gt;pool</code> is a
- subrequest!). So the correct thing to do is to allocate from
- <code>connection-&gt;pool</code>.</p>
-
- <p>And there was another interesting bug in <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- / <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>. You'll see in those that they do this test
- to decide if they should use <code>r-&gt;pool</code> or
- <code>r-&gt;main-&gt;pool</code>. In this case the resource that they are
- registering for cleanup is a child process. If it were registered in
- <code>r-&gt;pool</code>, then the code would <code>wait()</code> for the
- child when the subrequest finishes. With <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> this
- could be any old <code>#include</code>, and the delay can be up to 3
- seconds... and happened quite frequently. Instead the subprocess is
- registered in <code>r-&gt;main-&gt;pool</code> which causes it to be
- cleaned up when the entire request is done -- <em>i.e.</em>, after the
- output has been sent to the client and logging has happened.</p>
-
-
- <h3><a name="pool-files" id="pool-files">Tracking open files, etc.</a></h3>
- <p>As indicated above, resource pools are also used to track other sorts
- of resources besides memory. The most common are open files. The routine
- which is typically used for this is <code>ap_pfopen</code>, which takes a
- resource pool and two strings as arguments; the strings are the same as
- the typical arguments to <code>fopen</code>, <em>e.g.</em>,</p>
-
- <div class="example"><p><code>
- ...<br />
- FILE *f = ap_pfopen (r-&gt;pool, r-&gt;filename, "r");<br />
- <br />
- if (f == NULL) { ... } else { ... }<br />
- </code></p></div>
-
- <p>There is also a <code>ap_popenf</code> routine, which parallels the
- lower-level <code>open</code> system call. Both of these routines arrange
- for the file to be closed when the resource pool in question is
- cleared.</p>
-
- <p>Unlike the case for memory, there <em>are</em> functions to close files
- allocated with <code>ap_pfopen</code>, and <code>ap_popenf</code>, namely
- <code>ap_pfclose</code> and <code>ap_pclosef</code>. (This is because, on
- many systems, the number of files which a single process can have open is
- quite limited). It is important to use these functions to close files
- allocated with <code>ap_pfopen</code> and <code>ap_popenf</code>, since to
- do otherwise could cause fatal errors on systems such as Linux, which
- react badly if the same <code>FILE*</code> is closed more than once.</p>
-
- <p>(Using the <code>close</code> functions is not mandatory, since the
- file will eventually be closed regardless, but you should consider it in
- cases where your module is opening, or could open, a lot of files).</p>
-
-
- <h3>Other sorts of resources -- cleanup functions</h3>
- <p>More text goes here. Describe the the cleanup primitives in terms of
- which the file stuff is implemented; also, <code>spawn_process</code>.</p>
-
- <p>Pool cleanups live until <code>clear_pool()</code> is called:
- <code>clear_pool(a)</code> recursively calls <code>destroy_pool()</code>
- on all subpools of <code>a</code>; then calls all the cleanups for
- <code>a</code>; then releases all the memory for <code>a</code>.
- <code>destroy_pool(a)</code> calls <code>clear_pool(a)</code> and then
- releases the pool structure itself. <em>i.e.</em>,
- <code>clear_pool(a)</code> doesn't delete <code>a</code>, it just frees
- up all the resources and you can start using it again immediately.</p>
-
-
- <h3>Fine control -- creating and dealing with sub-pools, with
- a note on sub-requests</h3>
- <p>On rare occasions, too-free use of <code>ap_palloc()</code> and the
- associated primitives may result in undesirably profligate resource
- allocation. You can deal with such a case by creating a <em>sub-pool</em>,
- allocating within the sub-pool rather than the main pool, and clearing or
- destroying the sub-pool, which releases the resources which were
- associated with it. (This really <em>is</em> a rare situation; the only
- case in which it comes up in the standard module set is in case of listing
- directories, and then only with <em>very</em> large directories.
- Unnecessary use of the primitives discussed here can hair up your code
- quite a bit, with very little gain).</p>
-
- <p>The primitive for creating a sub-pool is <code>ap_make_sub_pool</code>,
- which takes another pool (the parent pool) as an argument. When the main
- pool is cleared, the sub-pool will be destroyed. The sub-pool may also be
- cleared or destroyed at any time, by calling the functions
- <code>ap_clear_pool</code> and <code>ap_destroy_pool</code>, respectively.
- (The difference is that <code>ap_clear_pool</code> frees resources
- associated with the pool, while <code>ap_destroy_pool</code> also
- deallocates the pool itself. In the former case, you can allocate new
- resources within the pool, and clear it again, and so forth; in the
- latter case, it is simply gone).</p>
-
- <p>One final note -- sub-requests have their own resource pools, which are
- sub-pools of the resource pool for the main request. The polite way to
- reclaim the resources associated with a sub request which you have
- allocated (using the <code>ap_sub_req_...</code> functions) is
- <code>ap_destroy_sub_req</code>, which frees the resource pool. Before
- calling this function, be sure to copy anything that you care about which
- might be allocated in the sub-request's resource pool into someplace a
- little less volatile (for instance, the filename in its
- <code>request_rec</code> structure).</p>
-
- <p>(Again, under most circumstances, you shouldn't feel obliged to call
- this function; only 2K of memory or so are allocated for a typical sub
- request, and it will be freed anyway when the main request pool is
- cleared. It is only when you are allocating many, many sub-requests for a
- single main request that you should seriously consider the
- <code>ap_destroy_...</code> functions).</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="config" id="config">Configuration, commands and the like</a></h2>
- <p>One of the design goals for this server was to maintain external
- compatibility with the NCSA 1.3 server --- that is, to read the same
- configuration files, to process all the directives therein correctly, and
- in general to be a drop-in replacement for NCSA. On the other hand, another
- design goal was to move as much of the server's functionality into modules
- which have as little as possible to do with the monolithic server core. The
- only way to reconcile these goals is to move the handling of most commands
- from the central server into the modules.</p>
-
- <p>However, just giving the modules command tables is not enough to divorce
- them completely from the server core. The server has to remember the
- commands in order to act on them later. That involves maintaining data which
- is private to the modules, and which can be either per-server, or
- per-directory. Most things are per-directory, including in particular access
- control and authorization information, but also information on how to
- determine file types from suffixes, which can be modified by
- <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> and <code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code> directives, and so forth. In general,
- the governing philosophy is that anything which <em>can</em> be made
- configurable by directory should be; per-server information is generally
- used in the standard set of modules for information like
- <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>es and <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code>s which come into play before the
- request is tied to a particular place in the underlying file system.</p>
-
- <p>Another requirement for emulating the NCSA server is being able to handle
- the per-directory configuration files, generally called
- <code>.htaccess</code> files, though even in the NCSA server they can
- contain directives which have nothing at all to do with access control.
- Accordingly, after URI -&gt; filename translation, but before performing any
- other phase, the server walks down the directory hierarchy of the underlying
- filesystem, following the translated pathname, to read any
- <code>.htaccess</code> files which might be present. The information which
- is read in then has to be <em>merged</em> with the applicable information
- from the server's own config files (either from the <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> sections in
- <code>access.conf</code>, or from defaults in <code>srm.conf</code>, which
- actually behaves for most purposes almost exactly like <code>&lt;Directory
- /&gt;</code>).</p>
-
- <p>Finally, after having served a request which involved reading
- <code>.htaccess</code> files, we need to discard the storage allocated for
- handling them. That is solved the same way it is solved wherever else
- similar problems come up, by tying those structures to the per-transaction
- resource pool.</p>
-
- <h3><a name="per-dir" id="per-dir">Per-directory configuration structures</a></h3>
- <p>Let's look out how all of this plays out in <code>mod_mime.c</code>,
- which defines the file typing handler which emulates the NCSA server's
- behavior of determining file types from suffixes. What we'll be looking
- at, here, is the code which implements the <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> and <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> commands. These commands can appear in
- <code>.htaccess</code> files, so they must be handled in the module's
- private per-directory data, which in fact, consists of two separate
- tables for MIME types and encoding information, and is declared as
- follows:</p>
-
- <div class="example"><pre>typedef struct {
- table *forced_types; /* Additional AddTyped stuff */
- table *encoding_types; /* Added with AddEncoding... */
-} mime_dir_config;</pre></div>
-
- <p>When the server is reading a configuration file, or <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> section, which includes
- one of the MIME module's commands, it needs to create a
- <code>mime_dir_config</code> structure, so those commands have something
- to act on. It does this by invoking the function it finds in the module's
- `create per-dir config slot', with two arguments: the name of the
- directory to which this configuration information applies (or
- <code>NULL</code> for <code>srm.conf</code>), and a pointer to a
- resource pool in which the allocation should happen.</p>
-
- <p>(If we are reading a <code>.htaccess</code> file, that resource pool
- is the per-request resource pool for the request; otherwise it is a
- resource pool which is used for configuration data, and cleared on
- restarts. Either way, it is important for the structure being created to
- vanish when the pool is cleared, by registering a cleanup on the pool if
- necessary).</p>
-
- <p>For the MIME module, the per-dir config creation function just
- <code>ap_palloc</code>s the structure above, and a creates a couple of
- tables to fill it. That looks like this:</p>
-
- <div class="example"><p><code>
- void *create_mime_dir_config (pool *p, char *dummy)<br />
- {<br />
- <span class="indent">
- mime_dir_config *new =<br />
- <span class="indent">
- (mime_dir_config *) ap_palloc (p, sizeof(mime_dir_config));<br />
- </span>
- <br />
- new-&gt;forced_types = ap_make_table (p, 4);<br />
- new-&gt;encoding_types = ap_make_table (p, 4);<br />
- <br />
- return new;<br />
- </span>
- }
- </code></p></div>
-
- <p>Now, suppose we've just read in a <code>.htaccess</code> file. We
- already have the per-directory configuration structure for the next
- directory up in the hierarchy. If the <code>.htaccess</code> file we just
- read in didn't have any <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>
- or <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> commands, its
- per-directory config structure for the MIME module is still valid, and we
- can just use it. Otherwise, we need to merge the two structures
- somehow.</p>
-
- <p>To do that, the server invokes the module's per-directory config merge
- function, if one is present. That function takes three arguments: the two
- structures being merged, and a resource pool in which to allocate the
- result. For the MIME module, all that needs to be done is overlay the
- tables from the new per-directory config structure with those from the
- parent:</p>
-
- <div class="example"><p><code>
- void *merge_mime_dir_configs (pool *p, void *parent_dirv, void *subdirv)<br />
- {<br />
- <span class="indent">
- mime_dir_config *parent_dir = (mime_dir_config *)parent_dirv;<br />
- mime_dir_config *subdir = (mime_dir_config *)subdirv;<br />
- mime_dir_config *new =<br />
- <span class="indent">
- (mime_dir_config *)ap_palloc (p, sizeof(mime_dir_config));<br />
- </span>
- <br />
- new-&gt;forced_types = ap_overlay_tables (p, subdir-&gt;forced_types,<br />
- <span class="indent">
- parent_dir-&gt;forced_types);<br />
- </span>
- new-&gt;encoding_types = ap_overlay_tables (p, subdir-&gt;encoding_types,<br />
- <span class="indent">
- parent_dir-&gt;encoding_types);<br />
- </span>
- <br />
- return new;<br />
- </span>
- }
- </code></p></div>
-
- <p>As a note -- if there is no per-directory merge function present, the
- server will just use the subdirectory's configuration info, and ignore
- the parent's. For some modules, that works just fine (<em>e.g.</em>, for
- the includes module, whose per-directory configuration information
- consists solely of the state of the <code>XBITHACK</code>), and for those
- modules, you can just not declare one, and leave the corresponding
- structure slot in the module itself <code>NULL</code>.</p>
-
-
- <h3><a name="commands" id="commands">Command handling</a></h3>
- <p>Now that we have these structures, we need to be able to figure out how
- to fill them. That involves processing the actual <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> and <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> commands. To find commands, the server looks in
- the module's command table. That table contains information on how many
- arguments the commands take, and in what formats, where it is permitted,
- and so forth. That information is sufficient to allow the server to invoke
- most command-handling functions with pre-parsed arguments. Without further
- ado, let's look at the <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>
- command handler, which looks like this (the <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> command looks basically the same, and won't be
- shown here):</p>
-
- <div class="example"><p><code>
- char *add_type(cmd_parms *cmd, mime_dir_config *m, char *ct, char *ext)<br />
- {<br />
- <span class="indent">
- if (*ext == '.') ++ext;<br />
- ap_table_set (m-&gt;forced_types, ext, ct);<br />
- return NULL;<br />
- </span>
- }
- </code></p></div>
-
- <p>This command handler is unusually simple. As you can see, it takes
- four arguments, two of which are pre-parsed arguments, the third being the
- per-directory configuration structure for the module in question, and the
- fourth being a pointer to a <code>cmd_parms</code> structure. That
- structure contains a bunch of arguments which are frequently of use to
- some, but not all, commands, including a resource pool (from which memory
- can be allocated, and to which cleanups should be tied), and the (virtual)
- server being configured, from which the module's per-server configuration
- data can be obtained if required.</p>
-
- <p>Another way in which this particular command handler is unusually
- simple is that there are no error conditions which it can encounter. If
- there were, it could return an error message instead of <code>NULL</code>;
- this causes an error to be printed out on the server's
- <code>stderr</code>, followed by a quick exit, if it is in the main config
- files; for a <code>.htaccess</code> file, the syntax error is logged in
- the server error log (along with an indication of where it came from), and
- the request is bounced with a server error response (HTTP error status,
- code 500).</p>
-
- <p>The MIME module's command table has entries for these commands, which
- look like this:</p>
-
- <div class="example"><p><code>
- command_rec mime_cmds[] = {<br />
- <span class="indent">
- { "AddType", add_type, NULL, OR_FILEINFO, TAKE2,<br />
- <span class="indent">"a mime type followed by a file extension" },<br /></span>
- { "AddEncoding", add_encoding, NULL, OR_FILEINFO, TAKE2,<br />
- <span class="indent">
- "an encoding (<em>e.g.</em>, gzip), followed by a file extension" },<br />
- </span>
- { NULL }<br />
- </span>
- };
- </code></p></div>
-
- <p>The entries in these tables are:</p>
- <ul>
- <li>The name of the command</li>
- <li>The function which handles it</li>
- <li>a <code>(void *)</code> pointer, which is passed in the
- <code>cmd_parms</code> structure to the command handler ---
- this is useful in case many similar commands are handled by
- the same function.</li>
-
- <li>A bit mask indicating where the command may appear. There
- are mask bits corresponding to each
- <code>AllowOverride</code> option, and an additional mask
- bit, <code>RSRC_CONF</code>, indicating that the command may
- appear in the server's own config files, but <em>not</em> in
- any <code>.htaccess</code> file.</li>
-
- <li>A flag indicating how many arguments the command handler
- wants pre-parsed, and how they should be passed in.
- <code>TAKE2</code> indicates two pre-parsed arguments. Other
- options are <code>TAKE1</code>, which indicates one
- pre-parsed argument, <code>FLAG</code>, which indicates that
- the argument should be <code>On</code> or <code>Off</code>,
- and is passed in as a boolean flag, <code>RAW_ARGS</code>,
- which causes the server to give the command the raw, unparsed
- arguments (everything but the command name itself). There is
- also <code>ITERATE</code>, which means that the handler looks
- the same as <code>TAKE1</code>, but that if multiple
- arguments are present, it should be called multiple times,
- and finally <code>ITERATE2</code>, which indicates that the
- command handler looks like a <code>TAKE2</code>, but if more
- arguments are present, then it should be called multiple
- times, holding the first argument constant.</li>
-
- <li>Finally, we have a string which describes the arguments
- that should be present. If the arguments in the actual config
- file are not as required, this string will be used to help
- give a more specific error message. (You can safely leave
- this <code>NULL</code>).</li>
- </ul>
-
- <p>Finally, having set this all up, we have to use it. This is ultimately
- done in the module's handlers, specifically for its file-typing handler,
- which looks more or less like this; note that the per-directory
- configuration structure is extracted from the <code>request_rec</code>'s
- per-directory configuration vector by using the
- <code>ap_get_module_config</code> function.</p>
-
- <div class="example"><p><code>
- int find_ct(request_rec *r)<br />
- {<br />
- <span class="indent">
- int i;<br />
- char *fn = ap_pstrdup (r-&gt;pool, r-&gt;filename);<br />
- mime_dir_config *conf = (mime_dir_config *)<br />
- <span class="indent">
- ap_get_module_config(r-&gt;per_dir_config, &amp;mime_module);<br />
- </span>
- char *type;<br />
- <br />
- if (S_ISDIR(r-&gt;finfo.st_mode)) {<br />
- <span class="indent">
- r-&gt;content_type = DIR_MAGIC_TYPE;<br />
- return OK;<br />
- </span>
- }<br />
- <br />
- if((i=ap_rind(fn,'.')) &lt; 0) return DECLINED;<br />
- ++i;<br />
- <br />
- if ((type = ap_table_get (conf-&gt;encoding_types, &amp;fn[i])))<br />
- {<br />
- <span class="indent">
- r-&gt;content_encoding = type;<br />
- <br />
- /* go back to previous extension to try to use it as a type */<br />
- fn[i-1] = '\0';<br />
- if((i=ap_rind(fn,'.')) &lt; 0) return OK;<br />
- ++i;<br />
- </span>
- }<br />
- <br />
- if ((type = ap_table_get (conf-&gt;forced_types, &amp;fn[i])))<br />
- {<br />
- <span class="indent">
- r-&gt;content_type = type;<br />
- </span>
- }<br />
- <br />
- return OK;
- </span>
- }
- </code></p></div>
-
-
- <h3><a name="servconf" id="servconf">Side notes -- per-server configuration,
- virtual servers, <em>etc</em>.</a></h3>
- <p>The basic ideas behind per-server module configuration are basically
- the same as those for per-directory configuration; there is a creation
- function and a merge function, the latter being invoked where a virtual
- server has partially overridden the base server configuration, and a
- combined structure must be computed. (As with per-directory configuration,
- the default if no merge function is specified, and a module is configured
- in some virtual server, is that the base configuration is simply
- ignored).</p>
-
- <p>The only substantial difference is that when a command needs to
- configure the per-server private module data, it needs to go to the
- <code>cmd_parms</code> data to get at it. Here's an example, from the
- alias module, which also indicates how a syntax error can be returned
- (note that the per-directory configuration argument to the command
- handler is declared as a dummy, since the module doesn't actually have
- per-directory config data):</p>
-
- <div class="example"><p><code>
- char *add_redirect(cmd_parms *cmd, void *dummy, char *f, char *url)<br />
- {<br />
- <span class="indent">
- server_rec *s = cmd-&gt;server;<br />
- alias_server_conf *conf = (alias_server_conf *)<br />
- <span class="indent">
- ap_get_module_config(s-&gt;module_config,&amp;alias_module);<br />
- </span>
- alias_entry *new = ap_push_array (conf-&gt;redirects);<br />
- <br />
- if (!ap_is_url (url)) return "Redirect to non-URL";<br />
- <br />
- new-&gt;fake = f; new-&gt;real = url;<br />
- return NULL;<br />
- </span>
- }
- </code></p></div>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/API.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/API.xml b/docs/manual/developer/API.xml
deleted file mode 100644
index 089cda486a..0000000000
--- a/docs/manual/developer/API.xml
+++ /dev/null
@@ -1,1237 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="API.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Apache 1.3 API notes</title>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>This document has not been updated to take into account changes made
- in the 2.0 version of the Apache HTTP Server. Some of the information may
- still be relevant, but please use it with care.</p>
- </note>
-
- <p>These are some notes on the Apache API and the data structures you have
- to deal with, <em>etc.</em> They are not yet nearly complete, but hopefully,
- they will help you get your bearings. Keep in mind that the API is still
- subject to change as we gain experience with it. (See the TODO file for
- what <em>might</em> be coming). However, it will be easy to adapt modules
- to any changes that are made. (We have more modules to adapt than you
- do).</p>
-
- <p>A few notes on general pedagogical style here. In the interest of
- conciseness, all structure declarations here are incomplete -- the real
- ones have more slots that I'm not telling you about. For the most part,
- these are reserved to one component of the server core or another, and
- should be altered by modules with caution. However, in some cases, they
- really are things I just haven't gotten around to yet. Welcome to the
- bleeding edge.</p>
-
- <p>Finally, here's an outline, to give you some bare idea of what's coming
- up, and in what order:</p>
-
- <ul>
- <li>
- <a href="#basics">Basic concepts.</a>
-
- <ul>
- <li><a href="#HMR">Handlers, Modules, and
- Requests</a></li>
-
- <li><a href="#moduletour">A brief tour of a
- module</a></li>
- </ul>
- </li>
-
- <li>
- <a href="#handlers">How handlers work</a>
-
- <ul>
- <li><a href="#req_tour">A brief tour of the
- <code>request_rec</code></a></li>
-
- <li><a href="#req_orig">Where request_rec structures come
- from</a></li>
-
- <li><a href="#req_return">Handling requests, declining,
- and returning error codes</a></li>
-
- <li><a href="#resp_handlers">Special considerations for
- response handlers</a></li>
-
- <li><a href="#auth_handlers">Special considerations for
- authentication handlers</a></li>
-
- <li><a href="#log_handlers">Special considerations for
- logging handlers</a></li>
- </ul>
- </li>
-
- <li><a href="#pools">Resource allocation and resource
- pools</a></li>
-
- <li>
- <a href="#config">Configuration, commands and the like</a>
-
- <ul>
- <li><a href="#per-dir">Per-directory configuration
- structures</a></li>
-
- <li><a href="#commands">Command handling</a></li>
-
- <li><a href="#servconf">Side notes --- per-server
- configuration, virtual servers, <em>etc</em>.</a></li>
- </ul>
- </li>
- </ul>
-</summary>
-
-<section id="basics"><title>Basic concepts</title>
- <p>We begin with an overview of the basic concepts behind the API, and how
- they are manifested in the code.</p>
-
- <section id="HMR"><title>Handlers, Modules, and Requests</title>
- <p>Apache breaks down request handling into a series of steps, more or
- less the same way the Netscape server API does (although this API has a
- few more stages than NetSite does, as hooks for stuff I thought might be
- useful in the future). These are:</p>
-
- <ul>
- <li>URI -&gt; Filename translation</li>
- <li>Auth ID checking [is the user who they say they are?]</li>
- <li>Auth access checking [is the user authorized <em>here</em>?]</li>
- <li>Access checking other than auth</li>
- <li>Determining MIME type of the object requested</li>
- <li>`Fixups' -- there aren't any of these yet, but the phase is intended
- as a hook for possible extensions like <directive module="mod_env"
- >SetEnv</directive>, which don't really fit well elsewhere.</li>
- <li>Actually sending a response back to the client.</li>
- <li>Logging the request</li>
- </ul>
-
- <p>These phases are handled by looking at each of a succession of
- <em>modules</em>, looking to see if each of them has a handler for the
- phase, and attempting invoking it if so. The handler can typically do one
- of three things:</p>
-
- <ul>
- <li><em>Handle</em> the request, and indicate that it has done so by
- returning the magic constant <code>OK</code>.</li>
-
- <li><em>Decline</em> to handle the request, by returning the magic integer
- constant <code>DECLINED</code>. In this case, the server behaves in all
- respects as if the handler simply hadn't been there.</li>
-
- <li>Signal an error, by returning one of the HTTP error codes. This
- terminates normal handling of the request, although an ErrorDocument may
- be invoked to try to mop up, and it will be logged in any case.</li>
- </ul>
-
- <p>Most phases are terminated by the first module that handles them;
- however, for logging, `fixups', and non-access authentication checking,
- all handlers always run (barring an error). Also, the response phase is
- unique in that modules may declare multiple handlers for it, via a
- dispatch table keyed on the MIME type of the requested object. Modules may
- declare a response-phase handler which can handle <em>any</em> request,
- by giving it the key <code>*/*</code> (<em>i.e.</em>, a wildcard MIME type
- specification). However, wildcard handlers are only invoked if the server
- has already tried and failed to find a more specific response handler for
- the MIME type of the requested object (either none existed, or they all
- declined).</p>
-
- <p>The handlers themselves are functions of one argument (a
- <code>request_rec</code> structure. vide infra), which returns an integer,
- as above.</p>
- </section>
-
- <section id="moduletour"><title>A brief tour of a module</title>
- <p>At this point, we need to explain the structure of a module. Our
- candidate will be one of the messier ones, the CGI module -- this handles
- both CGI scripts and the <directive module="mod_alias"
- >ScriptAlias</directive> config file command. It's actually a great deal
- more complicated than most modules, but if we're going to have only one
- example, it might as well be the one with its fingers in every place.</p>
-
- <p>Let's begin with handlers. In order to handle the CGI scripts, the
- module declares a response handler for them. Because of <directive
- module="mod_alias">ScriptAlias</directive>, it also has handlers for the
- name translation phase (to recognize <directive module="mod_alias"
- >ScriptAlias</directive>ed URIs), the type-checking phase (any
- <directive module="mod_alias">ScriptAlias</directive>ed request is typed
- as a CGI script).</p>
-
- <p>The module needs to maintain some per (virtual) server information,
- namely, the <directive module="mod_alias">ScriptAlias</directive>es in
- effect; the module structure therefore contains pointers to a functions
- which builds these structures, and to another which combines two of them
- (in case the main server and a virtual server both have <directive
- module="mod_alias">ScriptAlias</directive>es declared).</p>
-
- <p>Finally, this module contains code to handle the <directive
- module="mod_alias">ScriptAlias</directive> command itself. This particular
- module only declares one command, but there could be more, so modules have
- <em>command tables</em> which declare their commands, and describe where
- they are permitted, and how they are to be invoked.</p>
-
- <p>A final note on the declared types of the arguments of some of these
- commands: a <code>pool</code> is a pointer to a <em>resource pool</em>
- structure; these are used by the server to keep track of the memory which
- has been allocated, files opened, <em>etc.</em>, either to service a
- particular request, or to handle the process of configuring itself. That
- way, when the request is over (or, for the configuration pool, when the
- server is restarting), the memory can be freed, and the files closed,
- <em>en masse</em>, without anyone having to write explicit code to track
- them all down and dispose of them. Also, a <code>cmd_parms</code>
- structure contains various information about the config file being read,
- and other status information, which is sometimes of use to the function
- which processes a config-file command (such as <directive
- module="mod_alias">ScriptAlias</directive>). With no further ado, the
- module itself:</p>
-
- <example>
- /* Declarations of handlers. */<br />
- <br />
- int translate_scriptalias (request_rec *);<br />
- int type_scriptalias (request_rec *);<br />
- int cgi_handler (request_rec *);<br />
- <br />
- /* Subsidiary dispatch table for response-phase <br />
- &nbsp;* handlers, by MIME type */<br />
- <br />
- handler_rec cgi_handlers[] = {<br />
- <indent>
- { "application/x-httpd-cgi", cgi_handler },<br />
- { NULL }<br />
- </indent>
- };<br />
- <br />
- /* Declarations of routines to manipulate the <br />
- &nbsp;* module's configuration info. Note that these are<br />
- &nbsp;* returned, and passed in, as void *'s; the server<br />
- &nbsp;* core keeps track of them, but it doesn't, and can't,<br />
- &nbsp;* know their internal structure.<br />
- &nbsp;*/<br />
- <br />
- void *make_cgi_server_config (pool *);<br />
- void *merge_cgi_server_config (pool *, void *, void *);<br />
- <br />
- /* Declarations of routines to handle config-file commands */<br />
- <br />
- extern char *script_alias(cmd_parms *, void *per_dir_config, char *fake,
- char *real);<br />
- <br />
- command_rec cgi_cmds[] = {<br />
- <indent>
- { "ScriptAlias", script_alias, NULL, RSRC_CONF, TAKE2,<br />
- <indent>"a fakename and a realname"},<br /></indent>
- { NULL }<br />
- </indent>
- };<br />
- <br />
- module cgi_module = {
-<pre> STANDARD_MODULE_STUFF,
- NULL, /* initializer */
- NULL, /* dir config creator */
- NULL, /* dir merger */
- make_cgi_server_config, /* server config */
- merge_cgi_server_config, /* merge server config */
- cgi_cmds, /* command table */
- cgi_handlers, /* handlers */
- translate_scriptalias, /* filename translation */
- NULL, /* check_user_id */
- NULL, /* check auth */
- NULL, /* check access */
- type_scriptalias, /* type_checker */
- NULL, /* fixups */
- NULL, /* logger */
- NULL /* header parser */
-};</pre>
- </example>
- </section>
-</section>
-
-<section id="handlers"><title>How handlers work</title>
- <p>The sole argument to handlers is a <code>request_rec</code> structure.
- This structure describes a particular request which has been made to the
- server, on behalf of a client. In most cases, each connection to the
- client generates only one <code>request_rec</code> structure.</p>
-
- <section id="req_tour"><title>A brief tour of the request_rec</title>
- <p>The <code>request_rec</code> contains pointers to a resource pool
- which will be cleared when the server is finished handling the request;
- to structures containing per-server and per-connection information, and
- most importantly, information on the request itself.</p>
-
- <p>The most important such information is a small set of character strings
- describing attributes of the object being requested, including its URI,
- filename, content-type and content-encoding (these being filled in by the
- translation and type-check handlers which handle the request,
- respectively).</p>
-
- <p>Other commonly used data items are tables giving the MIME headers on
- the client's original request, MIME headers to be sent back with the
- response (which modules can add to at will), and environment variables for
- any subprocesses which are spawned off in the course of servicing the
- request. These tables are manipulated using the <code>ap_table_get</code>
- and <code>ap_table_set</code> routines.</p>
-
- <note>
- <p>Note that the <code>Content-type</code> header value <em>cannot</em>
- be set by module content-handlers using the <code>ap_table_*()</code>
- routines. Rather, it is set by pointing the <code>content_type</code>
- field in the <code>request_rec</code> structure to an appropriate
- string. <em>e.g.</em>,</p>
- <example>
- r-&gt;content_type = "text/html";
- </example>
- </note>
-
- <p>Finally, there are pointers to two data structures which, in turn,
- point to per-module configuration structures. Specifically, these hold
- pointers to the data structures which the module has built to describe
- the way it has been configured to operate in a given directory (via
- <code>.htaccess</code> files or <directive type="section" module="core"
- >Directory</directive> sections), for private data it has built in the
- course of servicing the request (so modules' handlers for one phase can
- pass `notes' to their handlers for other phases). There is another such
- configuration vector in the <code>server_rec</code> data structure pointed
- to by the <code>request_rec</code>, which contains per (virtual) server
- configuration data.</p>
-
- <p>Here is an abridged declaration, giving the fields most commonly
- used:</p>
-
- <example>
- struct request_rec {<br />
- <br />
- pool *pool;<br />
- conn_rec *connection;<br />
- server_rec *server;<br />
- <br />
- /* What object is being requested */<br />
- <br />
- char *uri;<br />
- char *filename;<br />
- char *path_info;
-<pre>char *args; /* QUERY_ARGS, if any */
-struct stat finfo; /* Set by server core;
- * st_mode set to zero if no such file */</pre>
- char *content_type;<br />
- char *content_encoding;<br />
- <br />
- /* MIME header environments, in and out. Also, <br />
- &nbsp;* an array containing environment variables to<br />
- &nbsp;* be passed to subprocesses, so people can write<br />
- &nbsp;* modules to add to that environment.<br />
- &nbsp;*<br />
- &nbsp;* The difference between headers_out and <br />
- &nbsp;* err_headers_out is that the latter are printed <br />
- &nbsp;* even on error, and persist across internal<br />
- &nbsp;* redirects (so the headers printed for <br />
- &nbsp;* <directive module="core">ErrorDocument</directive> handlers will have
- them).<br />
- &nbsp;*/<br />
- <br />
- table *headers_in;<br />
- table *headers_out;<br />
- table *err_headers_out;<br />
- table *subprocess_env;<br />
- <br />
- /* Info about the request itself... */<br />
- <br />
-<pre>int header_only; /* HEAD request, as opposed to GET */
-char *protocol; /* Protocol, as given to us, or HTTP/0.9 */
-char *method; /* GET, HEAD, POST, <em>etc.</em> */
-int method_number; /* M_GET, M_POST, <em>etc.</em> */
-
-</pre>
- /* Info for logging */<br />
- <br />
- char *the_request;<br />
- int bytes_sent;<br />
- <br />
- /* A flag which modules can set, to indicate that<br />
- &nbsp;* the data being returned is volatile, and clients<br />
- &nbsp;* should be told not to cache it.<br />
- &nbsp;*/<br />
- <br />
- int no_cache;<br />
- <br />
- /* Various other config info which may change<br />
- &nbsp;* with .htaccess files<br />
- &nbsp;* These are config vectors, with one void*<br />
- &nbsp;* pointer for each module (the thing pointed<br />
- &nbsp;* to being the module's business).<br />
- &nbsp;*/<br />
- <br />
-<pre>void *per_dir_config; /* Options set in config files, <em>etc.</em> */
-void *request_config; /* Notes on *this* request */</pre>
- <br />
- };
- </example>
- </section>
-
- <section id="req_orig"><title>Where request_rec structures come from</title>
- <p>Most <code>request_rec</code> structures are built by reading an HTTP
- request from a client, and filling in the fields. However, there are a
- few exceptions:</p>
-
- <ul>
- <li>If the request is to an imagemap, a type map (<em>i.e.</em>, a
- <code>*.var</code> file), or a CGI script which returned a local
- `Location:', then the resource which the user requested is going to be
- ultimately located by some URI other than what the client originally
- supplied. In this case, the server does an <em>internal redirect</em>,
- constructing a new <code>request_rec</code> for the new URI, and
- processing it almost exactly as if the client had requested the new URI
- directly.</li>
-
- <li>If some handler signaled an error, and an <code>ErrorDocument</code>
- is in scope, the same internal redirect machinery comes into play.</li>
-
- <li><p>Finally, a handler occasionally needs to investigate `what would
- happen if' some other request were run. For instance, the directory
- indexing module needs to know what MIME type would be assigned to a
- request for each directory entry, in order to figure out what icon to
- use.</p>
-
- <p>Such handlers can construct a <em>sub-request</em>, using the
- functions <code>ap_sub_req_lookup_file</code>,
- <code>ap_sub_req_lookup_uri</code>, and <code>ap_sub_req_method_uri</code>;
- these construct a new <code>request_rec</code> structure and processes it
- as you would expect, up to but not including the point of actually sending
- a response. (These functions skip over the access checks if the
- sub-request is for a file in the same directory as the original
- request).</p>
-
- <p>(Server-side includes work by building sub-requests and then actually
- invoking the response handler for them, via the function
- <code>ap_run_sub_req</code>).</p>
- </li>
- </ul>
- </section>
-
- <section id="req_return"><title>Handling requests, declining, and returning
- error codes</title>
- <p>As discussed above, each handler, when invoked to handle a particular
- <code>request_rec</code>, has to return an <code>int</code> to indicate
- what happened. That can either be</p>
-
- <ul>
- <li><code>OK</code> -- the request was handled successfully. This may or
- may not terminate the phase.</li>
-
- <li><code>DECLINED</code> -- no erroneous condition exists, but the module
- declines to handle the phase; the server tries to find another.</li>
-
- <li>an HTTP error code, which aborts handling of the request.</li>
- </ul>
-
- <p>Note that if the error code returned is <code>REDIRECT</code>, then
- the module should put a <code>Location</code> in the request's
- <code>headers_out</code>, to indicate where the client should be
- redirected <em>to</em>.</p>
- </section>
-
- <section id="resp_handlers"><title>Special considerations for response
- handlers</title>
- <p>Handlers for most phases do their work by simply setting a few fields
- in the <code>request_rec</code> structure (or, in the case of access
- checkers, simply by returning the correct error code). However, response
- handlers have to actually send a request back to the client.</p>
-
- <p>They should begin by sending an HTTP response header, using the
- function <code>ap_send_http_header</code>. (You don't have to do anything
- special to skip sending the header for HTTP/0.9 requests; the function
- figures out on its own that it shouldn't do anything). If the request is
- marked <code>header_only</code>, that's all they should do; they should
- return after that, without attempting any further output.</p>
-
- <p>Otherwise, they should produce a request body which responds to the
- client as appropriate. The primitives for this are <code>ap_rputc</code>
- and <code>ap_rprintf</code>, for internally generated output, and
- <code>ap_send_fd</code>, to copy the contents of some <code>FILE *</code>
- straight to the client.</p>
-
- <p>At this point, you should more or less understand the following piece
- of code, which is the handler which handles <code>GET</code> requests
- which have no more specific handler; it also shows how conditional
- <code>GET</code>s can be handled, if it's desirable to do so in a
- particular response handler -- <code>ap_set_last_modified</code> checks
- against the <code>If-modified-since</code> value supplied by the client,
- if any, and returns an appropriate code (which will, if nonzero, be
- USE_LOCAL_COPY). No similar considerations apply for
- <code>ap_set_content_length</code>, but it returns an error code for
- symmetry.</p>
-
- <example>
- int default_handler (request_rec *r)<br />
- {<br />
- <indent>
- int errstatus;<br />
- FILE *f;<br />
- <br />
- if (r-&gt;method_number != M_GET) return DECLINED;<br />
- if (r-&gt;finfo.st_mode == 0) return NOT_FOUND;<br />
- <br />
- if ((errstatus = ap_set_content_length (r, r-&gt;finfo.st_size))<br />
- &nbsp;&nbsp;&nbsp;&nbsp;||
- (errstatus = ap_set_last_modified (r, r-&gt;finfo.st_mtime)))<br />
- return errstatus;<br />
- <br />
- f = fopen (r-&gt;filename, "r");<br />
- <br />
- if (f == NULL) {<br />
- <indent>
- log_reason("file permissions deny server access", r-&gt;filename, r);<br />
- return FORBIDDEN;<br />
- </indent>
- }<br />
- <br />
- register_timeout ("send", r);<br />
- ap_send_http_header (r);<br />
- <br />
- if (!r-&gt;header_only) send_fd (f, r);<br />
- ap_pfclose (r-&gt;pool, f);<br />
- return OK;<br />
- </indent>
- }
- </example>
-
- <p>Finally, if all of this is too much of a challenge, there are a few
- ways out of it. First off, as shown above, a response handler which has
- not yet produced any output can simply return an error code, in which
- case the server will automatically produce an error response. Secondly,
- it can punt to some other handler by invoking
- <code>ap_internal_redirect</code>, which is how the internal redirection
- machinery discussed above is invoked. A response handler which has
- internally redirected should always return <code>OK</code>.</p>
-
- <p>(Invoking <code>ap_internal_redirect</code> from handlers which are
- <em>not</em> response handlers will lead to serious confusion).</p>
- </section>
-
- <section id="auth_handlers"><title>Special considerations for authentication
- handlers</title>
- <p>Stuff that should be discussed here in detail:</p>
-
- <ul>
- <li>Authentication-phase handlers not invoked unless auth is
- configured for the directory.</li>
-
- <li>Common auth configuration stored in the core per-dir
- configuration; it has accessors <code>ap_auth_type</code>,
- <code>ap_auth_name</code>, and <code>ap_requires</code>.</li>
-
- <li>Common routines, to handle the protocol end of things, at
- least for HTTP basic authentication
- (<code>ap_get_basic_auth_pw</code>, which sets the
- <code>connection-&gt;user</code> structure field
- automatically, and <code>ap_note_basic_auth_failure</code>,
- which arranges for the proper <code>WWW-Authenticate:</code>
- header to be sent back).</li>
- </ul>
- </section>
-
- <section id="log_handlers"><title>Special considerations for logging
- handlers</title>
- <p>When a request has internally redirected, there is the question of
- what to log. Apache handles this by bundling the entire chain of redirects
- into a list of <code>request_rec</code> structures which are threaded
- through the <code>r-&gt;prev</code> and <code>r-&gt;next</code> pointers.
- The <code>request_rec</code> which is passed to the logging handlers in
- such cases is the one which was originally built for the initial request
- from the client; note that the <code>bytes_sent</code> field will only be
- correct in the last request in the chain (the one for which a response was
- actually sent).</p>
- </section>
-</section>
-
-<section id="pools"><title>Resource allocation and resource pools</title>
- <p>One of the problems of writing and designing a server-pool server is
- that of preventing leakage, that is, allocating resources (memory, open
- files, <em>etc.</em>), without subsequently releasing them. The resource
- pool machinery is designed to make it easy to prevent this from happening,
- by allowing resource to be allocated in such a way that they are
- <em>automatically</em> released when the server is done with them.</p>
-
- <p>The way this works is as follows: the memory which is allocated, file
- opened, <em>etc.</em>, to deal with a particular request are tied to a
- <em>resource pool</em> which is allocated for the request. The pool is a
- data structure which itself tracks the resources in question.</p>
-
- <p>When the request has been processed, the pool is <em>cleared</em>. At
- that point, all the memory associated with it is released for reuse, all
- files associated with it are closed, and any other clean-up functions which
- are associated with the pool are run. When this is over, we can be confident
- that all the resource tied to the pool have been released, and that none of
- them have leaked.</p>
-
- <p>Server restarts, and allocation of memory and resources for per-server
- configuration, are handled in a similar way. There is a <em>configuration
- pool</em>, which keeps track of resources which were allocated while reading
- the server configuration files, and handling the commands therein (for
- instance, the memory that was allocated for per-server module configuration,
- log files and other files that were opened, and so forth). When the server
- restarts, and has to reread the configuration files, the configuration pool
- is cleared, and so the memory and file descriptors which were taken up by
- reading them the last time are made available for reuse.</p>
-
- <p>It should be noted that use of the pool machinery isn't generally
- obligatory, except for situations like logging handlers, where you really
- need to register cleanups to make sure that the log file gets closed when
- the server restarts (this is most easily done by using the function <code><a
- href="#pool-files">ap_pfopen</a></code>, which also arranges for the
- underlying file descriptor to be closed before any child processes, such as
- for CGI scripts, are <code>exec</code>ed), or in case you are using the
- timeout machinery (which isn't yet even documented here). However, there are
- two benefits to using it: resources allocated to a pool never leak (even if
- you allocate a scratch string, and just forget about it); also, for memory
- allocation, <code>ap_palloc</code> is generally faster than
- <code>malloc</code>.</p>
-
- <p>We begin here by describing how memory is allocated to pools, and then
- discuss how other resources are tracked by the resource pool machinery.</p>
-
- <section><title>Allocation of memory in pools</title>
- <p>Memory is allocated to pools by calling the function
- <code>ap_palloc</code>, which takes two arguments, one being a pointer to
- a resource pool structure, and the other being the amount of memory to
- allocate (in <code>char</code>s). Within handlers for handling requests,
- the most common way of getting a resource pool structure is by looking at
- the <code>pool</code> slot of the relevant <code>request_rec</code>; hence
- the repeated appearance of the following idiom in module code:</p>
-
- <example>
- int my_handler(request_rec *r)<br />
- {<br />
- <indent>
- struct my_structure *foo;<br />
- ...<br />
- <br />
- foo = (foo *)ap_palloc (r-&gt;pool, sizeof(my_structure));<br />
- </indent>
- }
- </example>
-
- <p>Note that <em>there is no <code>ap_pfree</code></em> --
- <code>ap_palloc</code>ed memory is freed only when the associated resource
- pool is cleared. This means that <code>ap_palloc</code> does not have to
- do as much accounting as <code>malloc()</code>; all it does in the typical
- case is to round up the size, bump a pointer, and do a range check.</p>
-
- <p>(It also raises the possibility that heavy use of
- <code>ap_palloc</code> could cause a server process to grow excessively
- large. There are two ways to deal with this, which are dealt with below;
- briefly, you can use <code>malloc</code>, and try to be sure that all of
- the memory gets explicitly <code>free</code>d, or you can allocate a
- sub-pool of the main pool, allocate your memory in the sub-pool, and clear
- it out periodically. The latter technique is discussed in the section
- on sub-pools below, and is used in the directory-indexing code, in order
- to avoid excessive storage allocation when listing directories with
- thousands of files).</p>
- </section>
-
- <section><title>Allocating initialized memory</title>
- <p>There are functions which allocate initialized memory, and are
- frequently useful. The function <code>ap_pcalloc</code> has the same
- interface as <code>ap_palloc</code>, but clears out the memory it
- allocates before it returns it. The function <code>ap_pstrdup</code>
- takes a resource pool and a <code>char *</code> as arguments, and
- allocates memory for a copy of the string the pointer points to, returning
- a pointer to the copy. Finally <code>ap_pstrcat</code> is a varargs-style
- function, which takes a pointer to a resource pool, and at least two
- <code>char *</code> arguments, the last of which must be
- <code>NULL</code>. It allocates enough memory to fit copies of each of
- the strings, as a unit; for instance:</p>
-
- <example>
- ap_pstrcat (r-&gt;pool, "foo", "/", "bar", NULL);
- </example>
-
- <p>returns a pointer to 8 bytes worth of memory, initialized to
- <code>"foo/bar"</code>.</p>
- </section>
-
- <section id="pools-used"><title>Commonly-used pools in the Apache Web
- server</title>
- <p>A pool is really defined by its lifetime more than anything else.
- There are some static pools in http_main which are passed to various
- non-http_main functions as arguments at opportune times. Here they
- are:</p>
-
- <dl>
- <dt><code>permanent_pool</code></dt>
- <dd>never passed to anything else, this is the ancestor of all pools</dd>
-
- <dt><code>pconf</code></dt>
- <dd>
- <ul>
- <li>subpool of permanent_pool</li>
-
- <li>created at the beginning of a config "cycle"; exists
- until the server is terminated or restarts; passed to all
- config-time routines, either via cmd-&gt;pool, or as the
- "pool *p" argument on those which don't take pools</li>
-
- <li>passed to the module init() functions</li>
- </ul>
- </dd>
-
- <dt><code>ptemp</code></dt>
- <dd>
- <ul>
- <li>sorry I lie, this pool isn't called this currently in
- 1.3, I renamed it this in my pthreads development. I'm
- referring to the use of ptrans in the parent... contrast
- this with the later definition of ptrans in the
- child.</li>
-
- <li>subpool of permanent_pool</li>
-
- <li>created at the beginning of a config "cycle"; exists
- until the end of config parsing; passed to config-time
- routines <em>via</em> cmd-&gt;temp_pool. Somewhat of a
- "bastard child" because it isn't available everywhere.
- Used for temporary scratch space which may be needed by
- some config routines but which is deleted at the end of
- config.</li>
- </ul>
- </dd>
-
- <dt><code>pchild</code></dt>
- <dd>
- <ul>
- <li>subpool of permanent_pool</li>
-
- <li>created when a child is spawned (or a thread is
- created); lives until that child (thread) is
- destroyed</li>
-
- <li>passed to the module child_init functions</li>
-
- <li>destruction happens right after the child_exit
- functions are called... (which may explain why I think
- child_exit is redundant and unneeded)</li>
- </ul>
- </dd>
-
- <dt><code>ptrans</code></dt>
- <dd>
- <ul>
- <li>should be a subpool of pchild, but currently is a
- subpool of permanent_pool, see above</li>
-
- <li>cleared by the child before going into the accept()
- loop to receive a connection</li>
-
- <li>used as connection-&gt;pool</li>
- </ul>
- </dd>
-
- <dt><code>r-&gt;pool</code></dt>
- <dd>
- <ul>
- <li>for the main request this is a subpool of
- connection-&gt;pool; for subrequests it is a subpool of
- the parent request's pool.</li>
-
- <li>exists until the end of the request (<em>i.e.</em>,
- ap_destroy_sub_req, or in child_main after
- process_request has finished)</li>
-
- <li>note that r itself is allocated from r-&gt;pool;
- <em>i.e.</em>, r-&gt;pool is first created and then r is
- the first thing palloc()d from it</li>
- </ul>
- </dd>
- </dl>
-
- <p>For almost everything folks do, <code>r-&gt;pool</code> is the pool to
- use. But you can see how other lifetimes, such as pchild, are useful to
- some modules... such as modules that need to open a database connection
- once per child, and wish to clean it up when the child dies.</p>
-
- <p>You can also see how some bugs have manifested themself, such as
- setting <code>connection-&gt;user</code> to a value from
- <code>r-&gt;pool</code> -- in this case connection exists for the
- lifetime of <code>ptrans</code>, which is longer than
- <code>r-&gt;pool</code> (especially if <code>r-&gt;pool</code> is a
- subrequest!). So the correct thing to do is to allocate from
- <code>connection-&gt;pool</code>.</p>
-
- <p>And there was another interesting bug in <module>mod_include</module>
- / <module>mod_cgi</module>. You'll see in those that they do this test
- to decide if they should use <code>r-&gt;pool</code> or
- <code>r-&gt;main-&gt;pool</code>. In this case the resource that they are
- registering for cleanup is a child process. If it were registered in
- <code>r-&gt;pool</code>, then the code would <code>wait()</code> for the
- child when the subrequest finishes. With <module>mod_include</module> this
- could be any old <code>#include</code>, and the delay can be up to 3
- seconds... and happened quite frequently. Instead the subprocess is
- registered in <code>r-&gt;main-&gt;pool</code> which causes it to be
- cleaned up when the entire request is done -- <em>i.e.</em>, after the
- output has been sent to the client and logging has happened.</p>
- </section>
-
- <section id="pool-files"><title>Tracking open files, etc.</title>
- <p>As indicated above, resource pools are also used to track other sorts
- of resources besides memory. The most common are open files. The routine
- which is typically used for this is <code>ap_pfopen</code>, which takes a
- resource pool and two strings as arguments; the strings are the same as
- the typical arguments to <code>fopen</code>, <em>e.g.</em>,</p>
-
- <example>
- ...<br />
- FILE *f = ap_pfopen (r-&gt;pool, r-&gt;filename, "r");<br />
- <br />
- if (f == NULL) { ... } else { ... }<br />
- </example>
-
- <p>There is also a <code>ap_popenf</code> routine, which parallels the
- lower-level <code>open</code> system call. Both of these routines arrange
- for the file to be closed when the resource pool in question is
- cleared.</p>
-
- <p>Unlike the case for memory, there <em>are</em> functions to close files
- allocated with <code>ap_pfopen</code>, and <code>ap_popenf</code>, namely
- <code>ap_pfclose</code> and <code>ap_pclosef</code>. (This is because, on
- many systems, the number of files which a single process can have open is
- quite limited). It is important to use these functions to close files
- allocated with <code>ap_pfopen</code> and <code>ap_popenf</code>, since to
- do otherwise could cause fatal errors on systems such as Linux, which
- react badly if the same <code>FILE*</code> is closed more than once.</p>
-
- <p>(Using the <code>close</code> functions is not mandatory, since the
- file will eventually be closed regardless, but you should consider it in
- cases where your module is opening, or could open, a lot of files).</p>
- </section>
-
- <section><title>Other sorts of resources -- cleanup functions</title>
- <p>More text goes here. Describe the the cleanup primitives in terms of
- which the file stuff is implemented; also, <code>spawn_process</code>.</p>
-
- <p>Pool cleanups live until <code>clear_pool()</code> is called:
- <code>clear_pool(a)</code> recursively calls <code>destroy_pool()</code>
- on all subpools of <code>a</code>; then calls all the cleanups for
- <code>a</code>; then releases all the memory for <code>a</code>.
- <code>destroy_pool(a)</code> calls <code>clear_pool(a)</code> and then
- releases the pool structure itself. <em>i.e.</em>,
- <code>clear_pool(a)</code> doesn't delete <code>a</code>, it just frees
- up all the resources and you can start using it again immediately.</p>
- </section>
-
- <section><title>Fine control -- creating and dealing with sub-pools, with
- a note on sub-requests</title>
- <p>On rare occasions, too-free use of <code>ap_palloc()</code> and the
- associated primitives may result in undesirably profligate resource
- allocation. You can deal with such a case by creating a <em>sub-pool</em>,
- allocating within the sub-pool rather than the main pool, and clearing or
- destroying the sub-pool, which releases the resources which were
- associated with it. (This really <em>is</em> a rare situation; the only
- case in which it comes up in the standard module set is in case of listing
- directories, and then only with <em>very</em> large directories.
- Unnecessary use of the primitives discussed here can hair up your code
- quite a bit, with very little gain).</p>
-
- <p>The primitive for creating a sub-pool is <code>ap_make_sub_pool</code>,
- which takes another pool (the parent pool) as an argument. When the main
- pool is cleared, the sub-pool will be destroyed. The sub-pool may also be
- cleared or destroyed at any time, by calling the functions
- <code>ap_clear_pool</code> and <code>ap_destroy_pool</code>, respectively.
- (The difference is that <code>ap_clear_pool</code> frees resources
- associated with the pool, while <code>ap_destroy_pool</code> also
- deallocates the pool itself. In the former case, you can allocate new
- resources within the pool, and clear it again, and so forth; in the
- latter case, it is simply gone).</p>
-
- <p>One final note -- sub-requests have their own resource pools, which are
- sub-pools of the resource pool for the main request. The polite way to
- reclaim the resources associated with a sub request which you have
- allocated (using the <code>ap_sub_req_...</code> functions) is
- <code>ap_destroy_sub_req</code>, which frees the resource pool. Before
- calling this function, be sure to copy anything that you care about which
- might be allocated in the sub-request's resource pool into someplace a
- little less volatile (for instance, the filename in its
- <code>request_rec</code> structure).</p>
-
- <p>(Again, under most circumstances, you shouldn't feel obliged to call
- this function; only 2K of memory or so are allocated for a typical sub
- request, and it will be freed anyway when the main request pool is
- cleared. It is only when you are allocating many, many sub-requests for a
- single main request that you should seriously consider the
- <code>ap_destroy_...</code> functions).</p>
- </section>
-</section>
-
-<section id="config"><title>Configuration, commands and the like</title>
- <p>One of the design goals for this server was to maintain external
- compatibility with the NCSA 1.3 server --- that is, to read the same
- configuration files, to process all the directives therein correctly, and
- in general to be a drop-in replacement for NCSA. On the other hand, another
- design goal was to move as much of the server's functionality into modules
- which have as little as possible to do with the monolithic server core. The
- only way to reconcile these goals is to move the handling of most commands
- from the central server into the modules.</p>
-
- <p>However, just giving the modules command tables is not enough to divorce
- them completely from the server core. The server has to remember the
- commands in order to act on them later. That involves maintaining data which
- is private to the modules, and which can be either per-server, or
- per-directory. Most things are per-directory, including in particular access
- control and authorization information, but also information on how to
- determine file types from suffixes, which can be modified by
- <directive module="mod_mime">AddType</directive> and <directive
- module="core">DefaultType</directive> directives, and so forth. In general,
- the governing philosophy is that anything which <em>can</em> be made
- configurable by directory should be; per-server information is generally
- used in the standard set of modules for information like
- <directive module="mod_alias">Alias</directive>es and <directive
- module="mod_alias">Redirect</directive>s which come into play before the
- request is tied to a particular place in the underlying file system.</p>
-
- <p>Another requirement for emulating the NCSA server is being able to handle
- the per-directory configuration files, generally called
- <code>.htaccess</code> files, though even in the NCSA server they can
- contain directives which have nothing at all to do with access control.
- Accordingly, after URI -&gt; filename translation, but before performing any
- other phase, the server walks down the directory hierarchy of the underlying
- filesystem, following the translated pathname, to read any
- <code>.htaccess</code> files which might be present. The information which
- is read in then has to be <em>merged</em> with the applicable information
- from the server's own config files (either from the <directive
- type="section" module="core">Directory</directive> sections in
- <code>access.conf</code>, or from defaults in <code>srm.conf</code>, which
- actually behaves for most purposes almost exactly like <code>&lt;Directory
- /&gt;</code>).</p>
-
- <p>Finally, after having served a request which involved reading
- <code>.htaccess</code> files, we need to discard the storage allocated for
- handling them. That is solved the same way it is solved wherever else
- similar problems come up, by tying those structures to the per-transaction
- resource pool.</p>
-
- <section id="per-dir"><title>Per-directory configuration structures</title>
- <p>Let's look out how all of this plays out in <code>mod_mime.c</code>,
- which defines the file typing handler which emulates the NCSA server's
- behavior of determining file types from suffixes. What we'll be looking
- at, here, is the code which implements the <directive module="mod_mime"
- >AddType</directive> and <directive module="mod_mime"
- >AddEncoding</directive> commands. These commands can appear in
- <code>.htaccess</code> files, so they must be handled in the module's
- private per-directory data, which in fact, consists of two separate
- tables for MIME types and encoding information, and is declared as
- follows:</p>
-
- <example>
-<pre>typedef struct {
- table *forced_types; /* Additional AddTyped stuff */
- table *encoding_types; /* Added with AddEncoding... */
-} mime_dir_config;</pre>
- </example>
-
- <p>When the server is reading a configuration file, or <directive
- type="section" module="core">Directory</directive> section, which includes
- one of the MIME module's commands, it needs to create a
- <code>mime_dir_config</code> structure, so those commands have something
- to act on. It does this by invoking the function it finds in the module's
- `create per-dir config slot', with two arguments: the name of the
- directory to which this configuration information applies (or
- <code>NULL</code> for <code>srm.conf</code>), and a pointer to a
- resource pool in which the allocation should happen.</p>
-
- <p>(If we are reading a <code>.htaccess</code> file, that resource pool
- is the per-request resource pool for the request; otherwise it is a
- resource pool which is used for configuration data, and cleared on
- restarts. Either way, it is important for the structure being created to
- vanish when the pool is cleared, by registering a cleanup on the pool if
- necessary).</p>
-
- <p>For the MIME module, the per-dir config creation function just
- <code>ap_palloc</code>s the structure above, and a creates a couple of
- tables to fill it. That looks like this:</p>
-
- <example>
- void *create_mime_dir_config (pool *p, char *dummy)<br />
- {<br />
- <indent>
- mime_dir_config *new =<br />
- <indent>
- (mime_dir_config *) ap_palloc (p, sizeof(mime_dir_config));<br />
- </indent>
- <br />
- new-&gt;forced_types = ap_make_table (p, 4);<br />
- new-&gt;encoding_types = ap_make_table (p, 4);<br />
- <br />
- return new;<br />
- </indent>
- }
- </example>
-
- <p>Now, suppose we've just read in a <code>.htaccess</code> file. We
- already have the per-directory configuration structure for the next
- directory up in the hierarchy. If the <code>.htaccess</code> file we just
- read in didn't have any <directive module="mod_mime">AddType</directive>
- or <directive module="mod_mime">AddEncoding</directive> commands, its
- per-directory config structure for the MIME module is still valid, and we
- can just use it. Otherwise, we need to merge the two structures
- somehow.</p>
-
- <p>To do that, the server invokes the module's per-directory config merge
- function, if one is present. That function takes three arguments: the two
- structures being merged, and a resource pool in which to allocate the
- result. For the MIME module, all that needs to be done is overlay the
- tables from the new per-directory config structure with those from the
- parent:</p>
-
- <example>
- void *merge_mime_dir_configs (pool *p, void *parent_dirv, void *subdirv)<br />
- {<br />
- <indent>
- mime_dir_config *parent_dir = (mime_dir_config *)parent_dirv;<br />
- mime_dir_config *subdir = (mime_dir_config *)subdirv;<br />
- mime_dir_config *new =<br />
- <indent>
- (mime_dir_config *)ap_palloc (p, sizeof(mime_dir_config));<br />
- </indent>
- <br />
- new-&gt;forced_types = ap_overlay_tables (p, subdir-&gt;forced_types,<br />
- <indent>
- parent_dir-&gt;forced_types);<br />
- </indent>
- new-&gt;encoding_types = ap_overlay_tables (p, subdir-&gt;encoding_types,<br />
- <indent>
- parent_dir-&gt;encoding_types);<br />
- </indent>
- <br />
- return new;<br />
- </indent>
- }
- </example>
-
- <p>As a note -- if there is no per-directory merge function present, the
- server will just use the subdirectory's configuration info, and ignore
- the parent's. For some modules, that works just fine (<em>e.g.</em>, for
- the includes module, whose per-directory configuration information
- consists solely of the state of the <code>XBITHACK</code>), and for those
- modules, you can just not declare one, and leave the corresponding
- structure slot in the module itself <code>NULL</code>.</p>
- </section>
-
- <section id="commands"><title>Command handling</title>
- <p>Now that we have these structures, we need to be able to figure out how
- to fill them. That involves processing the actual <directive
- module="mod_mime">AddType</directive> and <directive module="mod_mime"
- >AddEncoding</directive> commands. To find commands, the server looks in
- the module's command table. That table contains information on how many
- arguments the commands take, and in what formats, where it is permitted,
- and so forth. That information is sufficient to allow the server to invoke
- most command-handling functions with pre-parsed arguments. Without further
- ado, let's look at the <directive module="mod_mime">AddType</directive>
- command handler, which looks like this (the <directive module="mod_mime"
- >AddEncoding</directive> command looks basically the same, and won't be
- shown here):</p>
-
- <example>
- char *add_type(cmd_parms *cmd, mime_dir_config *m, char *ct, char *ext)<br />
- {<br />
- <indent>
- if (*ext == '.') ++ext;<br />
- ap_table_set (m-&gt;forced_types, ext, ct);<br />
- return NULL;<br />
- </indent>
- }
- </example>
-
- <p>This command handler is unusually simple. As you can see, it takes
- four arguments, two of which are pre-parsed arguments, the third being the
- per-directory configuration structure for the module in question, and the
- fourth being a pointer to a <code>cmd_parms</code> structure. That
- structure contains a bunch of arguments which are frequently of use to
- some, but not all, commands, including a resource pool (from which memory
- can be allocated, and to which cleanups should be tied), and the (virtual)
- server being configured, from which the module's per-server configuration
- data can be obtained if required.</p>
-
- <p>Another way in which this particular command handler is unusually
- simple is that there are no error conditions which it can encounter. If
- there were, it could return an error message instead of <code>NULL</code>;
- this causes an error to be printed out on the server's
- <code>stderr</code>, followed by a quick exit, if it is in the main config
- files; for a <code>.htaccess</code> file, the syntax error is logged in
- the server error log (along with an indication of where it came from), and
- the request is bounced with a server error response (HTTP error status,
- code 500).</p>
-
- <p>The MIME module's command table has entries for these commands, which
- look like this:</p>
-
- <example>
- command_rec mime_cmds[] = {<br />
- <indent>
- { "AddType", add_type, NULL, OR_FILEINFO, TAKE2,<br />
- <indent>"a mime type followed by a file extension" },<br /></indent>
- { "AddEncoding", add_encoding, NULL, OR_FILEINFO, TAKE2,<br />
- <indent>
- "an encoding (<em>e.g.</em>, gzip), followed by a file extension" },<br />
- </indent>
- { NULL }<br />
- </indent>
- };
- </example>
-
- <p>The entries in these tables are:</p>
- <ul>
- <li>The name of the command</li>
- <li>The function which handles it</li>
- <li>a <code>(void *)</code> pointer, which is passed in the
- <code>cmd_parms</code> structure to the command handler ---
- this is useful in case many similar commands are handled by
- the same function.</li>
-
- <li>A bit mask indicating where the command may appear. There
- are mask bits corresponding to each
- <code>AllowOverride</code> option, and an additional mask
- bit, <code>RSRC_CONF</code>, indicating that the command may
- appear in the server's own config files, but <em>not</em> in
- any <code>.htaccess</code> file.</li>
-
- <li>A flag indicating how many arguments the command handler
- wants pre-parsed, and how they should be passed in.
- <code>TAKE2</code> indicates two pre-parsed arguments. Other
- options are <code>TAKE1</code>, which indicates one
- pre-parsed argument, <code>FLAG</code>, which indicates that
- the argument should be <code>On</code> or <code>Off</code>,
- and is passed in as a boolean flag, <code>RAW_ARGS</code>,
- which causes the server to give the command the raw, unparsed
- arguments (everything but the command name itself). There is
- also <code>ITERATE</code>, which means that the handler looks
- the same as <code>TAKE1</code>, but that if multiple
- arguments are present, it should be called multiple times,
- and finally <code>ITERATE2</code>, which indicates that the
- command handler looks like a <code>TAKE2</code>, but if more
- arguments are present, then it should be called multiple
- times, holding the first argument constant.</li>
-
- <li>Finally, we have a string which describes the arguments
- that should be present. If the arguments in the actual config
- file are not as required, this string will be used to help
- give a more specific error message. (You can safely leave
- this <code>NULL</code>).</li>
- </ul>
-
- <p>Finally, having set this all up, we have to use it. This is ultimately
- done in the module's handlers, specifically for its file-typing handler,
- which looks more or less like this; note that the per-directory
- configuration structure is extracted from the <code>request_rec</code>'s
- per-directory configuration vector by using the
- <code>ap_get_module_config</code> function.</p>
-
- <example>
- int find_ct(request_rec *r)<br />
- {<br />
- <indent>
- int i;<br />
- char *fn = ap_pstrdup (r-&gt;pool, r-&gt;filename);<br />
- mime_dir_config *conf = (mime_dir_config *)<br />
- <indent>
- ap_get_module_config(r-&gt;per_dir_config, &amp;mime_module);<br />
- </indent>
- char *type;<br />
- <br />
- if (S_ISDIR(r-&gt;finfo.st_mode)) {<br />
- <indent>
- r-&gt;content_type = DIR_MAGIC_TYPE;<br />
- return OK;<br />
- </indent>
- }<br />
- <br />
- if((i=ap_rind(fn,'.')) &lt; 0) return DECLINED;<br />
- ++i;<br />
- <br />
- if ((type = ap_table_get (conf-&gt;encoding_types, &amp;fn[i])))<br />
- {<br />
- <indent>
- r-&gt;content_encoding = type;<br />
- <br />
- /* go back to previous extension to try to use it as a type */<br />
- fn[i-1] = '\0';<br />
- if((i=ap_rind(fn,'.')) &lt; 0) return OK;<br />
- ++i;<br />
- </indent>
- }<br />
- <br />
- if ((type = ap_table_get (conf-&gt;forced_types, &amp;fn[i])))<br />
- {<br />
- <indent>
- r-&gt;content_type = type;<br />
- </indent>
- }<br />
- <br />
- return OK;
- </indent>
- }
- </example>
- </section>
-
- <section id="servconf"><title>Side notes -- per-server configuration,
- virtual servers, <em>etc</em>.</title>
- <p>The basic ideas behind per-server module configuration are basically
- the same as those for per-directory configuration; there is a creation
- function and a merge function, the latter being invoked where a virtual
- server has partially overridden the base server configuration, and a
- combined structure must be computed. (As with per-directory configuration,
- the default if no merge function is specified, and a module is configured
- in some virtual server, is that the base configuration is simply
- ignored).</p>
-
- <p>The only substantial difference is that when a command needs to
- configure the per-server private module data, it needs to go to the
- <code>cmd_parms</code> data to get at it. Here's an example, from the
- alias module, which also indicates how a syntax error can be returned
- (note that the per-directory configuration argument to the command
- handler is declared as a dummy, since the module doesn't actually have
- per-directory config data):</p>
-
- <example>
- char *add_redirect(cmd_parms *cmd, void *dummy, char *f, char *url)<br />
- {<br />
- <indent>
- server_rec *s = cmd-&gt;server;<br />
- alias_server_conf *conf = (alias_server_conf *)<br />
- <indent>
- ap_get_module_config(s-&gt;module_config,&amp;alias_module);<br />
- </indent>
- alias_entry *new = ap_push_array (conf-&gt;redirects);<br />
- <br />
- if (!ap_is_url (url)) return "Redirect to non-URL";<br />
- <br />
- new-&gt;fake = f; new-&gt;real = url;<br />
- return NULL;<br />
- </indent>
- }
- </example>
- </section>
-</section>
-
-</manualpage>
diff --git a/docs/manual/developer/API.xml.meta b/docs/manual/developer/API.xml.meta
deleted file mode 100644
index 6fd15b2013..0000000000
--- a/docs/manual/developer/API.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>API</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/debugging.html b/docs/manual/developer/debugging.html
deleted file mode 100644
index f7977f5ec6..0000000000
--- a/docs/manual/developer/debugging.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: debugging.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/debugging.html.en b/docs/manual/developer/debugging.html.en
deleted file mode 100644
index 0b6a13652e..0000000000
--- a/docs/manual/developer/debugging.html.en
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Debugging Memory Allocation in APR - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Debugging Memory Allocation in APR</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/debugging.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <p>The allocation mechanism's within APR have a number of debugging modes
- that can be used to assist in finding memory problems. This document
- describes the modes available and gives instructions on activating
- them.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#options">Available debugging options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#combo">Allowable Combinations</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#howto">Activating Debugging Options</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Available debugging options</a></h2>
- <h3><a name="alloc_debug" id="alloc_debug">Allocation Debugging - ALLOC_DEBUG</a></h3>
-
-
- <div class="note">Debugging support: Define this to enable code which
- helps detect re-use of <code>free()</code>d memory and other such
- nonsense.</div>
-
- <p>The theory is simple. The <code>FILL_BYTE</code> (<code>0xa5</code>)
- is written over all <code>malloc</code>'d memory as we receive it, and
- is written over everything that we free up during a
- <code>clear_pool</code>. We check that blocks on the free list always
- have the <code>FILL_BYTE</code> in them, and we check during
- <code>palloc()</code> that the bytes still have <code>FILL_BYTE</code>
- in them. If you ever see garbage URLs or whatnot containing lots
- of <code>0xa5</code>s then you know something used data that's been
- freed or uninitialized.</p>
-
-
- <h3><a name="alloc_use_malloc" id="alloc_use_malloc">Malloc Support - ALLOC_USE_MALLOC</a></h3>
-
-
- <div class="note">If defined all allocations will be done with
- <code>malloc()</code> and <code>free()</code>d appropriately at the
- end.</div>
-
- <p>This is intended to be used with something like Electric
- Fence or Purify to help detect memory problems. Note that if
- you're using efence then you should also add in <code>ALLOC_DEBUG</code>.
- But don't add in <code>ALLOC_DEBUG</code> if you're using Purify because
- <code>ALLOC_DEBUG</code> would hide all the uninitialized read errors
- that Purify can diagnose.</p>
-
-
- <h3><a name="pool_debug" id="pool_debug">Pool Debugging - POOL_DEBUG</a></h3>
- <div class="note">This is intended to detect cases where the wrong pool is
- used when assigning data to an object in another pool.</div>
-
- <p>In particular, it causes the <code>table_{set,add,merge}n</code>
- routines to check that their arguments are safe for the
- <code>apr_table_t</code> they're being placed in. It currently only works
- with the unix multiprocess model, but could be extended to others.</p>
-
-
- <h3><a name="make_table_profile" id="make_table_profile">Table Debugging - MAKE_TABLE_PROFILE</a></h3>
-
-
- <div class="note">Provide diagnostic information about make_table() calls
- which are possibly too small.</div>
-
- <p>This requires a recent gcc which supports
- <code>__builtin_return_address()</code>. The error_log output will be a
- message such as:</p>
- <div class="example"><p><code>
- table_push: apr_table_t created by 0x804d874 hit limit of 10
- </code></p></div>
-
- <p>Use <code>l *0x804d874</code> to find the
- source that corresponds to. It indicates that a <code>apr_table_t</code>
- allocated by a call at that address has possibly too small an
- initial <code>apr_table_t</code> size guess.</p>
-
-
- <h3><a name="alloc_stats" id="alloc_stats">Allocation Statistics - ALLOC_STATS</a></h3>
-
-
- <div class="note">Provide some statistics on the cost of allocations.</div>
-
- <p>This requires a bit of an understanding of how alloc.c works.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="combo" id="combo">Allowable Combinations</a></h2>
-
- <p>Not all the options outlined above can be activated at the
- same time. the following table gives more information.</p>
-
- <table class="bordered"><tr class="header"><th />
- <th>ALLOC DEBUG</th>
- <th>ALLOC USE MALLOC</th>
- <th>POOL DEBUG</th>
- <th>MAKE TABLE PROFILE</th>
- <th>ALLOC STATS</th></tr>
-<tr><th>ALLOC DEBUG</th>
- <td>-</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td></tr>
-<tr class="odd"><th>ALLOC USE MALLOC</th>
- <td>No</td><td>-</td><td>No</td><td>No</td><td>No</td></tr>
-<tr><th>POOL DEBUG</th>
- <td>Yes</td><td>No</td><td>-</td><td>Yes</td><td>Yes</td></tr>
-<tr class="odd"><th>MAKE TABLE PROFILE</th>
- <td>Yes</td><td>No</td><td>Yes</td><td>-</td><td>Yes</td></tr>
-<tr><th>ALLOC STATS</th>
- <td>Yes</td><td>No</td><td>Yes</td><td>Yes</td><td>-</td></tr>
-</table>
-
- <p>Additionally the debugging options are not suitable for
- multi-threaded versions of the server. When trying to debug
- with these options the server should be started in single
- process mode.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howto" id="howto">Activating Debugging Options</a></h2>
-
- <p>The various options for debugging memory are now enabled in
- the <code>apr_general.h</code> header file in APR. The various options are
- enabled by uncommenting the define for the option you wish to
- use. The section of the code currently looks like this
- (<em>contained in srclib/apr/include/apr_pools.h</em>)</p>
-
- <div class="example"><p><code>
- /*<br />
- #define ALLOC_DEBUG<br />
- #define POOL_DEBUG<br />
- #define ALLOC_USE_MALLOC<br />
- #define MAKE_TABLE_PROFILE<br />
- #define ALLOC_STATS<br />
- */<br />
- <br />
- typedef struct ap_pool_t {<br />
- <span class="indent">
- union block_hdr *first;<br />
- union block_hdr *last;<br />
- struct cleanup *cleanups;<br />
- struct process_chain *subprocesses;<br />
- struct ap_pool_t *sub_pools;<br />
- struct ap_pool_t *sub_next;<br />
- struct ap_pool_t *sub_prev;<br />
- struct ap_pool_t *parent;<br />
- char *free_first_avail;<br />
- </span>
- #ifdef ALLOC_USE_MALLOC<br />
- <span class="indent">
- void *allocation_list;<br />
- </span>
- #endif<br />
- #ifdef POOL_DEBUG<br />
- <span class="indent">
- struct ap_pool_t *joined;<br />
- </span>
- #endif<br />
- <span class="indent">
- int (*apr_abort)(int retcode);<br />
- struct datastruct *prog_data;<br />
- </span>
- } ap_pool_t;
- </code></p></div>
-
- <p>To enable allocation debugging simply move the <code>#define
- ALLOC_DEBUG</code> above the start of the comments block and rebuild
- the server.</p>
-
- <div class="note"><h3>Note</h3>
- <p>In order to use the various options the server <strong>must</strong>
- be rebuilt after editing the header file.</p>
- </div>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/debugging.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/debugging.xml b/docs/manual/developer/debugging.xml
deleted file mode 100644
index 3af8924f01..0000000000
--- a/docs/manual/developer/debugging.xml
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="debugging.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Debugging Memory Allocation in APR</title>
-
-<summary>
- <p>The allocation mechanism's within APR have a number of debugging modes
- that can be used to assist in finding memory problems. This document
- describes the modes available and gives instructions on activating
- them.</p>
-</summary>
-
-<section id="options"><title>Available debugging options</title>
- <section id="alloc_debug">
- <title>Allocation Debugging - ALLOC_DEBUG</title>
-
- <note>Debugging support: Define this to enable code which
- helps detect re-use of <code>free()</code>d memory and other such
- nonsense.</note>
-
- <p>The theory is simple. The <code>FILL_BYTE</code> (<code>0xa5</code>)
- is written over all <code>malloc</code>'d memory as we receive it, and
- is written over everything that we free up during a
- <code>clear_pool</code>. We check that blocks on the free list always
- have the <code>FILL_BYTE</code> in them, and we check during
- <code>palloc()</code> that the bytes still have <code>FILL_BYTE</code>
- in them. If you ever see garbage URLs or whatnot containing lots
- of <code>0xa5</code>s then you know something used data that's been
- freed or uninitialized.</p>
- </section>
-
- <section id="alloc_use_malloc">
- <title>Malloc Support - ALLOC_USE_MALLOC</title>
-
- <note>If defined all allocations will be done with
- <code>malloc()</code> and <code>free()</code>d appropriately at the
- end.</note>
-
- <p>This is intended to be used with something like Electric
- Fence or Purify to help detect memory problems. Note that if
- you're using efence then you should also add in <code>ALLOC_DEBUG</code>.
- But don't add in <code>ALLOC_DEBUG</code> if you're using Purify because
- <code>ALLOC_DEBUG</code> would hide all the uninitialized read errors
- that Purify can diagnose.</p>
- </section>
-
- <section id="pool_debug"><title>Pool Debugging - POOL_DEBUG</title>
- <note>This is intended to detect cases where the wrong pool is
- used when assigning data to an object in another pool.</note>
-
- <p>In particular, it causes the <code>table_{set,add,merge}n</code>
- routines to check that their arguments are safe for the
- <code>apr_table_t</code> they're being placed in. It currently only works
- with the unix multiprocess model, but could be extended to others.</p>
- </section>
-
- <section id="make_table_profile">
- <title>Table Debugging - MAKE_TABLE_PROFILE</title>
-
- <note>Provide diagnostic information about make_table() calls
- which are possibly too small.</note>
-
- <p>This requires a recent gcc which supports
- <code>__builtin_return_address()</code>. The error_log output will be a
- message such as:</p>
- <example>
- table_push: apr_table_t created by 0x804d874 hit limit of 10
- </example>
-
- <p>Use <code>l *0x804d874</code> to find the
- source that corresponds to. It indicates that a <code>apr_table_t</code>
- allocated by a call at that address has possibly too small an
- initial <code>apr_table_t</code> size guess.</p>
- </section>
-
- <section id="alloc_stats">
- <title>Allocation Statistics - ALLOC_STATS</title>
-
- <note>Provide some statistics on the cost of allocations.</note>
-
- <p>This requires a bit of an understanding of how alloc.c works.</p>
- </section>
-</section>
-
-<section id="combo"><title>Allowable Combinations</title>
-
- <p>Not all the options outlined above can be activated at the
- same time. the following table gives more information.</p>
-
- <table border="1" style="zebra">
- <tr><th></th>
- <th>ALLOC DEBUG</th>
- <th>ALLOC USE MALLOC</th>
- <th>POOL DEBUG</th>
- <th>MAKE TABLE PROFILE</th>
- <th>ALLOC STATS</th></tr>
- <tr><th>ALLOC DEBUG</th>
- <td>-</td><td>No</td><td>Yes</td><td>Yes</td><td>Yes</td></tr>
- <tr><th>ALLOC USE MALLOC</th>
- <td>No</td><td>-</td><td>No</td><td>No</td><td>No</td></tr>
- <tr><th>POOL DEBUG</th>
- <td>Yes</td><td>No</td><td>-</td><td>Yes</td><td>Yes</td></tr>
- <tr><th>MAKE TABLE PROFILE</th>
- <td>Yes</td><td>No</td><td>Yes</td><td>-</td><td>Yes</td></tr>
- <tr><th>ALLOC STATS</th>
- <td>Yes</td><td>No</td><td>Yes</td><td>Yes</td><td>-</td></tr>
- </table>
-
- <p>Additionally the debugging options are not suitable for
- multi-threaded versions of the server. When trying to debug
- with these options the server should be started in single
- process mode.</p>
-</section>
-
-<section id="howto"><title>Activating Debugging Options</title>
-
- <p>The various options for debugging memory are now enabled in
- the <code>apr_general.h</code> header file in APR. The various options are
- enabled by uncommenting the define for the option you wish to
- use. The section of the code currently looks like this
- (<em>contained in srclib/apr/include/apr_pools.h</em>)</p>
-
- <example>
- /*<br />
- #define ALLOC_DEBUG<br />
- #define POOL_DEBUG<br />
- #define ALLOC_USE_MALLOC<br />
- #define MAKE_TABLE_PROFILE<br />
- #define ALLOC_STATS<br />
- */<br />
- <br />
- typedef struct ap_pool_t {<br />
- <indent>
- union block_hdr *first;<br />
- union block_hdr *last;<br />
- struct cleanup *cleanups;<br />
- struct process_chain *subprocesses;<br />
- struct ap_pool_t *sub_pools;<br />
- struct ap_pool_t *sub_next;<br />
- struct ap_pool_t *sub_prev;<br />
- struct ap_pool_t *parent;<br />
- char *free_first_avail;<br />
- </indent>
- #ifdef ALLOC_USE_MALLOC<br />
- <indent>
- void *allocation_list;<br />
- </indent>
- #endif<br />
- #ifdef POOL_DEBUG<br />
- <indent>
- struct ap_pool_t *joined;<br />
- </indent>
- #endif<br />
- <indent>
- int (*apr_abort)(int retcode);<br />
- struct datastruct *prog_data;<br />
- </indent>
- } ap_pool_t;
- </example>
-
- <p>To enable allocation debugging simply move the <code>#define
- ALLOC_DEBUG</code> above the start of the comments block and rebuild
- the server.</p>
-
- <note><title>Note</title>
- <p>In order to use the various options the server <strong>must</strong>
- be rebuilt after editing the header file.</p>
- </note>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/debugging.xml.meta b/docs/manual/developer/debugging.xml.meta
deleted file mode 100644
index 6f1984fe8c..0000000000
--- a/docs/manual/developer/debugging.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>debugging</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/documenting.html b/docs/manual/developer/documenting.html
deleted file mode 100644
index 0731e2d359..0000000000
--- a/docs/manual/developer/documenting.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: documenting.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/documenting.html.en b/docs/manual/developer/documenting.html.en
deleted file mode 100644
index 6bf9e83ede..0000000000
--- a/docs/manual/developer/documenting.html.en
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Documenting Apache 2.0 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Documenting Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/documenting.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <p>Apache 2.0 uses <a href="http://www.doxygen.org/">Doxygen</a> to
- document the APIs and global variables in the the code. This will explain
- the basics of how to document using Doxygen.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="brief" id="brief">Brief Description</a></h2>
- <p>To start a documentation block, use <code>/**</code><br />
- To end a documentation block, use <code>*/</code></p>
-
- <p>In the middle of the block, there are multiple tags we can
- use:</p>
-
- <div class="example"><p><code>
- Description of this functions purpose<br />
- @param parameter_name description<br />
- @return description<br />
- @deffunc signature of the function<br />
- </code></p></div>
-
- <p>The <code>deffunc</code> is not always necessary. DoxyGen does not
- have a full parser in it, so any prototype that use a macro in the
- return type declaration is too complex for scandoc. Those functions
- require a <code>deffunc</code>. An example (using &amp;gt; rather
- than &gt;):</p>
-
- <div class="example"><p><code>
- /**<br />
- &nbsp;* return the final element of the pathname<br />
- &nbsp;* @param pathname The path to get the final element of<br />
- &nbsp;* @return the final element of the path<br />
- &nbsp;* @tip Examples:<br />
- &nbsp;* &lt;pre&gt;<br />
- &nbsp;* "/foo/bar/gum" -&amp;gt; "gum"<br />
- &nbsp;* "/foo/bar/gum/" -&amp;gt; ""<br />
- &nbsp;* "gum" -&amp;gt; "gum"<br />
- &nbsp;* "wi\\n32\\stuff" -&amp;gt; "stuff"<br />
- &nbsp;* &lt;/pre&gt;<br />
- &nbsp;* @deffunc const char * ap_filename_of_pathname(const char *pathname)<br />
- &nbsp;*/
- </code></p></div>
-
- <p>At the top of the header file, always include:</p>
- <div class="example"><p><code>
- /**<br />
- &nbsp;* @package Name of library header<br />
- &nbsp;*/
- </code></p></div>
-
- <p>Doxygen uses a new HTML file for each package. The HTML files are named
- {Name_of_library_header}.html, so try to be concise with your names.</p>
-
- <p>For a further discussion of the possibilities please refer to
- <a href="http://www.doxygen.org/">the Doxygen site</a>.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/documenting.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/documenting.xml b/docs/manual/developer/documenting.xml
deleted file mode 100644
index 065ee19a2c..0000000000
--- a/docs/manual/developer/documenting.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="documenting.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Documenting Apache 2.0</title>
-
-<summary>
- <p>Apache 2.0 uses <a href="http://www.doxygen.org/">Doxygen</a> to
- document the APIs and global variables in the the code. This will explain
- the basics of how to document using Doxygen.</p>
-</summary>
-
-<section id="brief"><title>Brief Description</title>
- <p>To start a documentation block, use <code>/**</code><br />
- To end a documentation block, use <code>*/</code></p>
-
- <p>In the middle of the block, there are multiple tags we can
- use:</p>
-
- <example>
- Description of this functions purpose<br />
- @param parameter_name description<br />
- @return description<br />
- @deffunc signature of the function<br />
- </example>
-
- <p>The <code>deffunc</code> is not always necessary. DoxyGen does not
- have a full parser in it, so any prototype that use a macro in the
- return type declaration is too complex for scandoc. Those functions
- require a <code>deffunc</code>. An example (using &amp;gt; rather
- than &gt;):</p>
-
- <example>
- /**<br />
- &nbsp;* return the final element of the pathname<br />
- &nbsp;* @param pathname The path to get the final element of<br />
- &nbsp;* @return the final element of the path<br />
- &nbsp;* @tip Examples:<br />
- &nbsp;* &lt;pre&gt;<br />
- &nbsp;* "/foo/bar/gum" -&amp;gt; "gum"<br />
- &nbsp;* "/foo/bar/gum/" -&amp;gt; ""<br />
- &nbsp;* "gum" -&amp;gt; "gum"<br />
- &nbsp;* "wi\\n32\\stuff" -&amp;gt; "stuff"<br />
- &nbsp;* &lt;/pre&gt;<br />
- &nbsp;* @deffunc const char * ap_filename_of_pathname(const char *pathname)<br />
- &nbsp;*/
- </example>
-
- <p>At the top of the header file, always include:</p>
- <example>
- /**<br />
- &nbsp;* @package Name of library header<br />
- &nbsp;*/
- </example>
-
- <p>Doxygen uses a new HTML file for each package. The HTML files are named
- {Name_of_library_header}.html, so try to be concise with your names.</p>
-
- <p>For a further discussion of the possibilities please refer to
- <a href="http://www.doxygen.org/">the Doxygen site</a>.</p>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/documenting.xml.meta b/docs/manual/developer/documenting.xml.meta
deleted file mode 100644
index fca30d7e4a..0000000000
--- a/docs/manual/developer/documenting.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>documenting</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/filters.html b/docs/manual/developer/filters.html
deleted file mode 100644
index c65dc946ac..0000000000
--- a/docs/manual/developer/filters.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: filters.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/filters.html.en b/docs/manual/developer/filters.html.en
deleted file mode 100644
index b0b5d8da0e..0000000000
--- a/docs/manual/developer/filters.html.en
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>How filters work in Apache 2.0 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>How filters work in Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/filters.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <div class="warning"><h3>Warning</h3>
- <p>This is a cut 'n paste job from an email
- (&lt;022501c1c529$f63a9550$7f00000a@KOJ&gt;) and only reformatted for
- better readability. It's not up to date but may be a good start for
- further research.</p>
- </div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#types">Filter Types</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#howinserted">How are filters inserted?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#asis">Asis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Explanations</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="types" id="types">Filter Types</a></h2>
- <p>There are three basic filter types (each of these is actually broken
- down into two categories, but that comes later).</p>
-
- <dl>
- <dt><code>CONNECTION</code></dt>
- <dd>Filters of this type are valid for the lifetime of this connection.
- (<code>AP_FTYPE_CONNECTION</code>, <code>AP_FTYPE_NETWORK</code>)</dd>
-
- <dt><code>PROTOCOL</code></dt>
- <dd>Filters of this type are valid for the lifetime of this request from
- the point of view of the client, this means that the request is valid
- from the time that the request is sent until the time that the response
- is received. (<code>AP_FTYPE_PROTOCOL</code>,
- <code>AP_FTYPE_TRANSCODE</code>)</dd>
-
- <dt><code>RESOURCE</code></dt>
- <dd>Filters of this type are valid for the time that this content is used
- to satisfy a request. For simple requests, this is identical to
- <code>PROTOCOL</code>, but internal redirects and sub-requests can change
- the content without ending the request. (<code>AP_FTYPE_RESOURCE</code>,
- <code>AP_FTYPE_CONTENT_SET</code>)</dd>
- </dl>
-
- <p>It is important to make the distinction between a protocol and a
- resource filter. A resource filter is tied to a specific resource, it
- may also be tied to header information, but the main binding is to a
- resource. If you are writing a filter and you want to know if it is
- resource or protocol, the correct question to ask is: "Can this filter
- be removed if the request is redirected to a different resource?" If
- the answer is yes, then it is a resource filter. If it is no, then it
- is most likely a protocol or connection filter. I won't go into
- connection filters, because they seem to be well understood. With this
- definition, a few examples might help:</p>
-
- <dl>
- <dt>Byterange</dt>
- <dd>We have coded it to be inserted for all requests, and it is removed
- if not used. Because this filter is active at the beginning of all
- requests, it can not be removed if it is redirected, so this is a
- protocol filter.</dd>
-
- <dt>http_header</dt>
- <dd>This filter actually writes the headers to the network. This is
- obviously a required filter (except in the asis case which is special
- and will be dealt with below) and so it is a protocol filter.</dd>
-
- <dt>Deflate</dt>
- <dd>The administrator configures this filter based on which file has been
- requested. If we do an internal redirect from an autoindex page to an
- index.html page, the deflate filter may be added or removed based on
- config, so this is a resource filter.</dd>
- </dl>
-
- <p>The further breakdown of each category into two more filter types is
- strictly for ordering. We could remove it, and only allow for one
- filter type, but the order would tend to be wrong, and we would need to
- hack things to make it work. Currently, the <code>RESOURCE</code> filters
- only have one filter type, but that should change.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howinserted" id="howinserted">How are filters inserted?</a></h2>
- <p>This is actually rather simple in theory, but the code is
- complex. First of all, it is important that everybody realize that
- there are three filter lists for each request, but they are all
- concatenated together. So, the first list is
- <code>r-&gt;output_filters</code>, then <code>r-&gt;proto_output_filters</code>,
- and finally <code>r-&gt;connection-&gt;output_filters</code>. These correspond
- to the <code>RESOURCE</code>, <code>PROTOCOL</code>, and
- <code>CONNECTION</code> filters respectively. The problem previously, was
- that we used a singly linked list to create the filter stack, and we
- started from the "correct" location. This means that if I had a
- <code>RESOURCE</code> filter on the stack, and I added a
- <code>CONNECTION</code> filter, the <code>CONNECTION</code> filter would
- be ignored. This should make sense, because we would insert the connection
- filter at the top of the <code>c-&gt;output_filters</code> list, but the end
- of <code>r-&gt;output_filters</code> pointed to the filter that used to be
- at the front of <code>c-&gt;output_filters</code>. This is obviously wrong.
- The new insertion code uses a doubly linked list. This has the advantage
- that we never lose a filter that has been inserted. Unfortunately, it comes
- with a separate set of headaches.</p>
-
- <p>The problem is that we have two different cases were we use subrequests.
- The first is to insert more data into a response. The second is to
- replace the existing response with an internal redirect. These are two
- different cases and need to be treated as such.</p>
-
- <p>In the first case, we are creating the subrequest from within a handler
- or filter. This means that the next filter should be passed to
- <code>make_sub_request</code> function, and the last resource filter in the
- sub-request will point to the next filter in the main request. This
- makes sense, because the sub-request's data needs to flow through the
- same set of filters as the main request. A graphical representation
- might help:</p>
-
-<div class="example"><pre>
-Default_handler --&gt; includes_filter --&gt; byterange --&gt; ...
-</pre></div>
-
- <p>If the includes filter creates a sub request, then we don't want the
- data from that sub-request to go through the includes filter, because it
- might not be SSI data. So, the subrequest adds the following:</p>
-
-<div class="example"><pre>
-Default_handler --&gt; includes_filter -/-&gt; byterange --&gt; ...
- /
-Default_handler --&gt; sub_request_core
-</pre></div>
-
- <p>What happens if the subrequest is SSI data? Well, that's easy, the
- <code>includes_filter</code> is a resource filter, so it will be added to
- the sub request in between the <code>Default_handler</code> and the
- <code>sub_request_core</code> filter.</p>
-
- <p>The second case for sub-requests is when one sub-request is going to
- become the real request. This happens whenever a sub-request is created
- outside of a handler or filter, and NULL is passed as the next filter to
- the <code>make_sub_request</code> function.</p>
-
- <p>In this case, the resource filters no longer make sense for the new
- request, because the resource has changed. So, instead of starting from
- scratch, we simply point the front of the resource filters for the
- sub-request to the front of the protocol filters for the old request.
- This means that we won't lose any of the protocol filters, neither will
- we try to send this data through a filter that shouldn't see it.</p>
-
- <p>The problem is that we are using a doubly-linked list for our filter
- stacks now. But, you should notice that it is possible for two lists to
- intersect in this model. So, you do you handle the previous pointer?
- This is a very difficult question to answer, because there is no "right"
- answer, either method is equally valid. I looked at why we use the
- previous pointer. The only reason for it is to allow for easier
- addition of new servers. With that being said, the solution I chose was
- to make the previous pointer always stay on the original request.</p>
-
- <p>This causes some more complex logic, but it works for all cases. My
- concern in having it move to the sub-request, is that for the more
- common case (where a sub-request is used to add data to a response), the
- main filter chain would be wrong. That didn't seem like a good idea to
- me.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="asis" id="asis">Asis</a></h2>
- <p>The final topic. :-) Mod_Asis is a bit of a hack, but the
- handler needs to remove all filters except for connection filters, and
- send the data. If you are using <code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code>, all other
- bets are off.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="conclusion" id="conclusion">Explanations</a></h2>
- <p>The absolutely last point is that the reason this code was so hard to
- get right, was because we had hacked so much to force it to work. I
- wrote most of the hacks originally, so I am very much to blame.
- However, now that the code is right, I have started to remove some
- hacks. Most people should have seen that the <code>reset_filters</code>
- and <code>add_required_filters</code> functions are gone. Those inserted
- protocol level filters for error conditions, in fact, both functions did
- the same thing, one after the other, it was really strange. Because we
- don't lose protocol filters for error cases any more, those hacks went away.
- The <code>HTTP_HEADER</code>, <code>Content-length</code>, and
- <code>Byterange</code> filters are all added in the
- <code>insert_filters</code> phase, because if they were added earlier, we
- had some interesting interactions. Now, those could all be moved to be
- inserted with the <code>HTTP_IN</code>, <code>CORE</code>, and
- <code>CORE_IN</code> filters. That would make the code easier to
- follow.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/filters.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/filters.xml b/docs/manual/developer/filters.xml
deleted file mode 100644
index ef9b65ad85..0000000000
--- a/docs/manual/developer/filters.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="filters.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>How filters work in Apache 2.0</title>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>This is a cut 'n paste job from an email
- (&lt;022501c1c529$f63a9550$7f00000a@KOJ&gt;) and only reformatted for
- better readability. It's not up to date but may be a good start for
- further research.</p>
- </note>
-</summary>
-
-<section id="types"><title>Filter Types</title>
- <p>There are three basic filter types (each of these is actually broken
- down into two categories, but that comes later).</p>
-
- <dl>
- <dt><code>CONNECTION</code></dt>
- <dd>Filters of this type are valid for the lifetime of this connection.
- (<code>AP_FTYPE_CONNECTION</code>, <code>AP_FTYPE_NETWORK</code>)</dd>
-
- <dt><code>PROTOCOL</code></dt>
- <dd>Filters of this type are valid for the lifetime of this request from
- the point of view of the client, this means that the request is valid
- from the time that the request is sent until the time that the response
- is received. (<code>AP_FTYPE_PROTOCOL</code>,
- <code>AP_FTYPE_TRANSCODE</code>)</dd>
-
- <dt><code>RESOURCE</code></dt>
- <dd>Filters of this type are valid for the time that this content is used
- to satisfy a request. For simple requests, this is identical to
- <code>PROTOCOL</code>, but internal redirects and sub-requests can change
- the content without ending the request. (<code>AP_FTYPE_RESOURCE</code>,
- <code>AP_FTYPE_CONTENT_SET</code>)</dd>
- </dl>
-
- <p>It is important to make the distinction between a protocol and a
- resource filter. A resource filter is tied to a specific resource, it
- may also be tied to header information, but the main binding is to a
- resource. If you are writing a filter and you want to know if it is
- resource or protocol, the correct question to ask is: "Can this filter
- be removed if the request is redirected to a different resource?" If
- the answer is yes, then it is a resource filter. If it is no, then it
- is most likely a protocol or connection filter. I won't go into
- connection filters, because they seem to be well understood. With this
- definition, a few examples might help:</p>
-
- <dl>
- <dt>Byterange</dt>
- <dd>We have coded it to be inserted for all requests, and it is removed
- if not used. Because this filter is active at the beginning of all
- requests, it can not be removed if it is redirected, so this is a
- protocol filter.</dd>
-
- <dt>http_header</dt>
- <dd>This filter actually writes the headers to the network. This is
- obviously a required filter (except in the asis case which is special
- and will be dealt with below) and so it is a protocol filter.</dd>
-
- <dt>Deflate</dt>
- <dd>The administrator configures this filter based on which file has been
- requested. If we do an internal redirect from an autoindex page to an
- index.html page, the deflate filter may be added or removed based on
- config, so this is a resource filter.</dd>
- </dl>
-
- <p>The further breakdown of each category into two more filter types is
- strictly for ordering. We could remove it, and only allow for one
- filter type, but the order would tend to be wrong, and we would need to
- hack things to make it work. Currently, the <code>RESOURCE</code> filters
- only have one filter type, but that should change.</p>
-</section>
-
-<section id="howinserted"><title>How are filters inserted?</title>
- <p>This is actually rather simple in theory, but the code is
- complex. First of all, it is important that everybody realize that
- there are three filter lists for each request, but they are all
- concatenated together. So, the first list is
- <code>r->output_filters</code>, then <code>r->proto_output_filters</code>,
- and finally <code>r->connection->output_filters</code>. These correspond
- to the <code>RESOURCE</code>, <code>PROTOCOL</code>, and
- <code>CONNECTION</code> filters respectively. The problem previously, was
- that we used a singly linked list to create the filter stack, and we
- started from the "correct" location. This means that if I had a
- <code>RESOURCE</code> filter on the stack, and I added a
- <code>CONNECTION</code> filter, the <code>CONNECTION</code> filter would
- be ignored. This should make sense, because we would insert the connection
- filter at the top of the <code>c->output_filters</code> list, but the end
- of <code>r->output_filters</code> pointed to the filter that used to be
- at the front of <code>c->output_filters</code>. This is obviously wrong.
- The new insertion code uses a doubly linked list. This has the advantage
- that we never lose a filter that has been inserted. Unfortunately, it comes
- with a separate set of headaches.</p>
-
- <p>The problem is that we have two different cases were we use subrequests.
- The first is to insert more data into a response. The second is to
- replace the existing response with an internal redirect. These are two
- different cases and need to be treated as such.</p>
-
- <p>In the first case, we are creating the subrequest from within a handler
- or filter. This means that the next filter should be passed to
- <code>make_sub_request</code> function, and the last resource filter in the
- sub-request will point to the next filter in the main request. This
- makes sense, because the sub-request's data needs to flow through the
- same set of filters as the main request. A graphical representation
- might help:</p>
-
-<example>
-<pre>
-Default_handler --> includes_filter --> byterange --> ...
-</pre>
-</example>
-
- <p>If the includes filter creates a sub request, then we don't want the
- data from that sub-request to go through the includes filter, because it
- might not be SSI data. So, the subrequest adds the following:</p>
-
-<example>
-<pre>
-Default_handler --> includes_filter -/-> byterange --> ...
- /
-Default_handler --> sub_request_core
-</pre>
-</example>
-
- <p>What happens if the subrequest is SSI data? Well, that's easy, the
- <code>includes_filter</code> is a resource filter, so it will be added to
- the sub request in between the <code>Default_handler</code> and the
- <code>sub_request_core</code> filter.</p>
-
- <p>The second case for sub-requests is when one sub-request is going to
- become the real request. This happens whenever a sub-request is created
- outside of a handler or filter, and NULL is passed as the next filter to
- the <code>make_sub_request</code> function.</p>
-
- <p>In this case, the resource filters no longer make sense for the new
- request, because the resource has changed. So, instead of starting from
- scratch, we simply point the front of the resource filters for the
- sub-request to the front of the protocol filters for the old request.
- This means that we won't lose any of the protocol filters, neither will
- we try to send this data through a filter that shouldn't see it.</p>
-
- <p>The problem is that we are using a doubly-linked list for our filter
- stacks now. But, you should notice that it is possible for two lists to
- intersect in this model. So, you do you handle the previous pointer?
- This is a very difficult question to answer, because there is no "right"
- answer, either method is equally valid. I looked at why we use the
- previous pointer. The only reason for it is to allow for easier
- addition of new servers. With that being said, the solution I chose was
- to make the previous pointer always stay on the original request.</p>
-
- <p>This causes some more complex logic, but it works for all cases. My
- concern in having it move to the sub-request, is that for the more
- common case (where a sub-request is used to add data to a response), the
- main filter chain would be wrong. That didn't seem like a good idea to
- me.</p>
-</section>
-
-<section id="asis"><title>Asis</title>
- <p>The final topic. :-) Mod_Asis is a bit of a hack, but the
- handler needs to remove all filters except for connection filters, and
- send the data. If you are using <module>mod_asis</module>, all other
- bets are off.</p>
-</section>
-
-<section id="conclusion"><title>Explanations</title>
- <p>The absolutely last point is that the reason this code was so hard to
- get right, was because we had hacked so much to force it to work. I
- wrote most of the hacks originally, so I am very much to blame.
- However, now that the code is right, I have started to remove some
- hacks. Most people should have seen that the <code>reset_filters</code>
- and <code>add_required_filters</code> functions are gone. Those inserted
- protocol level filters for error conditions, in fact, both functions did
- the same thing, one after the other, it was really strange. Because we
- don't lose protocol filters for error cases any more, those hacks went away.
- The <code>HTTP_HEADER</code>, <code>Content-length</code>, and
- <code>Byterange</code> filters are all added in the
- <code>insert_filters</code> phase, because if they were added earlier, we
- had some interesting interactions. Now, those could all be moved to be
- inserted with the <code>HTTP_IN</code>, <code>CORE</code>, and
- <code>CORE_IN</code> filters. That would make the code easier to
- follow.</p>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/filters.xml.meta b/docs/manual/developer/filters.xml.meta
deleted file mode 100644
index a256a27ae1..0000000000
--- a/docs/manual/developer/filters.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>filters</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/hooks.html b/docs/manual/developer/hooks.html
deleted file mode 100644
index 49fe68e8dd..0000000000
--- a/docs/manual/developer/hooks.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: hooks.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/hooks.html.en b/docs/manual/developer/hooks.html.en
deleted file mode 100644
index b18e6f2e16..0000000000
--- a/docs/manual/developer/hooks.html.en
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache 2.0 Hook Functions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Apache 2.0 Hook Functions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/hooks.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <div class="warning"><h3>Warning</h3>
- <p>This document is still in development and may be partially out of
- date.</p>
- </div>
-
- <p>In general, a hook function is one that Apache will call at
- some point during the processing of a request. Modules can
- provide functions that are called, and specify when they get
- called in comparison to other modules.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#create">Creating a hook function</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#hooking">Hooking the hook</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="create" id="create">Creating a hook function</a></h2>
- <p>In order to create a new hook, four things need to be
- done:</p>
-
- <h3><a name="create-declare" id="create-declare">Declare the hook function</a></h3>
- <p>Use the <code>AP_DECLARE_HOOK</code> macro, which needs to be given
- the return type of the hook function, the name of the hook, and the
- arguments. For example, if the hook returns an <code>int</code> and
- takes a <code>request_rec *</code> and an <code>int</code> and is
- called <code>do_something</code>, then declare it like this:</p>
- <div class="example"><p><code>
- AP_DECLARE_HOOK(int, do_something, (request_rec *r, int n))
- </code></p></div>
-
- <p>This should go in a header which modules will include if
- they want to use the hook.</p>
-
-
- <h3><a name="create-create" id="create-create">Create the hook structure</a></h3>
- <p>Each source file that exports a hook has a private structure
- which is used to record the module functions that use the hook.
- This is declared as follows:</p>
-
- <div class="example"><p><code>
- APR_HOOK_STRUCT(<br />
- <span class="indent">
- APR_HOOK_LINK(do_something)<br />
- ...<br />
- </span>
- )
- </code></p></div>
-
-
- <h3><a name="create-implement" id="create-implement">Implement the hook caller</a></h3>
- <p>The source file that exports the hook has to implement a
- function that will call the hook. There are currently three
- possible ways to do this. In all cases, the calling function is
- called <code>ap_run_<var>hookname</var>()</code>.</p>
-
- <h4>Void hooks</h4>
- <p>If the return value of a hook is <code>void</code>, then all the
- hooks are called, and the caller is implemented like this:</p>
-
- <div class="example"><p><code>
- AP_IMPLEMENT_HOOK_VOID(do_something, (request_rec *r, int n), (r, n))
- </code></p></div>
-
- <p>The second and third arguments are the dummy argument
- declaration and the dummy arguments as they will be used when
- calling the hook. In other words, this macro expands to
- something like this:</p>
-
- <div class="example"><p><code>
- void ap_run_do_something(request_rec *r, int n)<br />
- {<br />
- <span class="indent">
- ...<br />
- do_something(r, n);<br />
- </span>
- }
- </code></p></div>
-
-
- <h4>Hooks that return a value</h4>
- <p>If the hook returns a value, then it can either be run until
- the first hook that does something interesting, like so:</p>
-
- <div class="example"><p><code>
- AP_IMPLEMENT_HOOK_RUN_FIRST(int, do_something, (request_rec *r, int n), (r, n), DECLINED)
- </code></p></div>
-
- <p>The first hook that does <em>not</em> return <code>DECLINED</code>
- stops the loop and its return value is returned from the hook
- caller. Note that <code>DECLINED</code> is the tradition Apache
- hook return meaning "I didn't do anything", but it can be
- whatever suits you.</p>
-
- <p>Alternatively, all hooks can be run until an error occurs.
- This boils down to permitting <em>two</em> return values, one of
- which means "I did something, and it was OK" and the other
- meaning "I did nothing". The first function that returns a
- value other than one of those two stops the loop, and its
- return is the return value. Declare these like so:</p>
-
- <div class="example"><p><code>
- AP_IMPLEMENT_HOOK_RUN_ALL(int, do_something, (request_rec *r, int n), (r, n), OK, DECLINED)
- </code></p></div>
-
- <p>Again, <code>OK</code> and <code>DECLINED</code> are the traditional
- values. You can use what you want.</p>
-
-
-
- <h3><a name="create-call" id="create-call">Call the hook callers</a></h3>
- <p>At appropriate moments in the code, call the hook caller,
- like so:</p>
-
- <div class="example"><p><code>
- int n, ret;<br />
- request_rec *r;<br />
- <br />
- ret=ap_run_do_something(r, n);
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hooking" id="hooking">Hooking the hook</a></h2>
- <p>A module that wants a hook to be called needs to do two
- things.</p>
-
- <h3><a name="hooking-implement" id="hooking-implement">Implement the hook function</a></h3>
- <p>Include the appropriate header, and define a static function
- of the correct type:</p>
-
- <div class="example"><p><code>
- static int my_something_doer(request_rec *r, int n)<br />
- {<br />
- <span class="indent">
- ...<br />
- return OK;<br />
- </span>
- }
- </code></p></div>
-
-
- <h3><a name="hooking-add" id="hooking-add">Add a hook registering function</a></h3>
- <p>During initialisation, Apache will call each modules hook
- registering function, which is included in the module
- structure:</p>
-
- <div class="example"><p><code>
- static void my_register_hooks()<br />
- {<br />
- <span class="indent">
- ap_hook_do_something(my_something_doer, NULL, NULL, APR_HOOK_MIDDLE);<br />
- </span>
- }<br />
- <br />
- mode MODULE_VAR_EXPORT my_module =<br />
- {<br />
- <span class="indent">
- ...<br />
- my_register_hooks /* register hooks */<br />
- </span>
- };
- </code></p></div>
-
-
- <h3><a name="hooking-order" id="hooking-order">Controlling hook calling order</a></h3>
- <p>In the example above, we didn't use the three arguments in
- the hook registration function that control calling order.
- There are two mechanisms for doing this. The first, rather
- crude, method, allows us to specify roughly where the hook is
- run relative to other modules. The final argument control this.
- There are three possible values: <code>APR_HOOK_FIRST</code>,
- <code>APR_HOOK_MIDDLE</code> and <code>APR_HOOK_LAST</code>.</p>
-
- <p>All modules using any particular value may be run in any
- order relative to each other, but, of course, all modules using
- <code>APR_HOOK_FIRST</code> will be run before <code>APR_HOOK_MIDDLE</code>
- which are before <code>APR_HOOK_LAST</code>. Modules that don't care
- when they are run should use <code>APR_HOOK_MIDDLE</code>. <em>(I spaced
- these out so people could do stuff like <code>APR_HOOK_FIRST-2</code>
- to get in slightly earlier, but is this wise? - Ben)</em></p>
-
- <p>Note that there are two more values,
- <code>APR_HOOK_REALLY_FIRST</code> and <code>APR_HOOK_REALLY_LAST</code>. These
- should only be used by the hook exporter.</p>
-
- <p>The other method allows finer control. When a module knows
- that it must be run before (or after) some other modules, it
- can specify them by name. The second (third) argument is a
- NULL-terminated array of strings consisting of the names of
- modules that must be run before (after) the current module. For
- example, suppose we want "mod_xyz.c" and "mod_abc.c" to run
- before we do, then we'd hook as follows:</p>
-
- <div class="example"><p><code>
- static void register_hooks()<br />
- {<br />
- <span class="indent">
- static const char * const aszPre[] = { "mod_xyz.c", "mod_abc.c", NULL };<br />
- <br />
- ap_hook_do_something(my_something_doer, aszPre, NULL, APR_HOOK_MIDDLE);<br />
- </span>
- }
- </code></p></div>
-
- <p>Note that the sort used to achieve this is stable, so
- ordering set by <code>APR_HOOK_<var>ORDER</var></code> is preserved, as far
- as is possible.</p>
-
- <p class="cite"><cite>Ben Laurie</cite>, 15th August 1999</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/hooks.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/hooks.xml b/docs/manual/developer/hooks.xml
deleted file mode 100644
index ac6a0cbd12..0000000000
--- a/docs/manual/developer/hooks.xml
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="hooks.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Apache 2.0 Hook Functions</title>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>This document is still in development and may be partially out of
- date.</p>
- </note>
-
- <p>In general, a hook function is one that Apache will call at
- some point during the processing of a request. Modules can
- provide functions that are called, and specify when they get
- called in comparison to other modules.</p>
-</summary>
-
-<section id="create"><title>Creating a hook function</title>
- <p>In order to create a new hook, four things need to be
- done:</p>
-
- <section id="create-declare"><title>Declare the hook function</title>
- <p>Use the <code>AP_DECLARE_HOOK</code> macro, which needs to be given
- the return type of the hook function, the name of the hook, and the
- arguments. For example, if the hook returns an <code>int</code> and
- takes a <code>request_rec *</code> and an <code>int</code> and is
- called <code>do_something</code>, then declare it like this:</p>
- <example>
- AP_DECLARE_HOOK(int, do_something, (request_rec *r, int n))
- </example>
-
- <p>This should go in a header which modules will include if
- they want to use the hook.</p>
- </section>
-
- <section id="create-create"><title>Create the hook structure</title>
- <p>Each source file that exports a hook has a private structure
- which is used to record the module functions that use the hook.
- This is declared as follows:</p>
-
- <example>
- APR_HOOK_STRUCT(<br />
- <indent>
- APR_HOOK_LINK(do_something)<br />
- ...<br />
- </indent>
- )
- </example>
- </section>
-
- <section id="create-implement"><title>Implement the hook caller</title>
- <p>The source file that exports the hook has to implement a
- function that will call the hook. There are currently three
- possible ways to do this. In all cases, the calling function is
- called <code>ap_run_<var>hookname</var>()</code>.</p>
-
- <section><title>Void hooks</title>
- <p>If the return value of a hook is <code>void</code>, then all the
- hooks are called, and the caller is implemented like this:</p>
-
- <example>
- AP_IMPLEMENT_HOOK_VOID(do_something, (request_rec *r, int n), (r, n))
- </example>
-
- <p>The second and third arguments are the dummy argument
- declaration and the dummy arguments as they will be used when
- calling the hook. In other words, this macro expands to
- something like this:</p>
-
- <example>
- void ap_run_do_something(request_rec *r, int n)<br />
- {<br />
- <indent>
- ...<br />
- do_something(r, n);<br />
- </indent>
- }
- </example>
- </section>
-
- <section><title>Hooks that return a value</title>
- <p>If the hook returns a value, then it can either be run until
- the first hook that does something interesting, like so:</p>
-
- <example>
- AP_IMPLEMENT_HOOK_RUN_FIRST(int, do_something, (request_rec *r, int n), (r, n), DECLINED)
- </example>
-
- <p>The first hook that does <em>not</em> return <code>DECLINED</code>
- stops the loop and its return value is returned from the hook
- caller. Note that <code>DECLINED</code> is the tradition Apache
- hook return meaning "I didn't do anything", but it can be
- whatever suits you.</p>
-
- <p>Alternatively, all hooks can be run until an error occurs.
- This boils down to permitting <em>two</em> return values, one of
- which means "I did something, and it was OK" and the other
- meaning "I did nothing". The first function that returns a
- value other than one of those two stops the loop, and its
- return is the return value. Declare these like so:</p>
-
- <example>
- AP_IMPLEMENT_HOOK_RUN_ALL(int, do_something, (request_rec *r, int n), (r, n), OK, DECLINED)
- </example>
-
- <p>Again, <code>OK</code> and <code>DECLINED</code> are the traditional
- values. You can use what you want.</p>
- </section>
- </section>
-
- <section id="create-call"><title>Call the hook callers</title>
- <p>At appropriate moments in the code, call the hook caller,
- like so:</p>
-
- <example>
- int n, ret;<br />
- request_rec *r;<br />
- <br />
- ret=ap_run_do_something(r, n);
- </example>
- </section>
-</section>
-
-<section id="hooking"><title>Hooking the hook</title>
- <p>A module that wants a hook to be called needs to do two
- things.</p>
-
- <section id="hooking-implement"><title>Implement the hook function</title>
- <p>Include the appropriate header, and define a static function
- of the correct type:</p>
-
- <example>
- static int my_something_doer(request_rec *r, int n)<br />
- {<br />
- <indent>
- ...<br />
- return OK;<br />
- </indent>
- }
- </example>
- </section>
-
- <section id="hooking-add"><title>Add a hook registering function</title>
- <p>During initialisation, Apache will call each modules hook
- registering function, which is included in the module
- structure:</p>
-
- <example>
- static void my_register_hooks()<br />
- {<br />
- <indent>
- ap_hook_do_something(my_something_doer, NULL, NULL, APR_HOOK_MIDDLE);<br />
- </indent>
- }<br />
- <br />
- mode MODULE_VAR_EXPORT my_module =<br />
- {<br />
- <indent>
- ...<br />
- my_register_hooks /* register hooks */<br />
- </indent>
- };
- </example>
- </section>
-
- <section id="hooking-order"><title>Controlling hook calling order</title>
- <p>In the example above, we didn't use the three arguments in
- the hook registration function that control calling order.
- There are two mechanisms for doing this. The first, rather
- crude, method, allows us to specify roughly where the hook is
- run relative to other modules. The final argument control this.
- There are three possible values: <code>APR_HOOK_FIRST</code>,
- <code>APR_HOOK_MIDDLE</code> and <code>APR_HOOK_LAST</code>.</p>
-
- <p>All modules using any particular value may be run in any
- order relative to each other, but, of course, all modules using
- <code>APR_HOOK_FIRST</code> will be run before <code>APR_HOOK_MIDDLE</code>
- which are before <code>APR_HOOK_LAST</code>. Modules that don't care
- when they are run should use <code>APR_HOOK_MIDDLE</code>. <em>(I spaced
- these out so people could do stuff like <code>APR_HOOK_FIRST-2</code>
- to get in slightly earlier, but is this wise? - Ben)</em></p>
-
- <p>Note that there are two more values,
- <code>APR_HOOK_REALLY_FIRST</code> and <code>APR_HOOK_REALLY_LAST</code>. These
- should only be used by the hook exporter.</p>
-
- <p>The other method allows finer control. When a module knows
- that it must be run before (or after) some other modules, it
- can specify them by name. The second (third) argument is a
- NULL-terminated array of strings consisting of the names of
- modules that must be run before (after) the current module. For
- example, suppose we want "mod_xyz.c" and "mod_abc.c" to run
- before we do, then we'd hook as follows:</p>
-
- <example>
- static void register_hooks()<br />
- {<br />
- <indent>
- static const char * const aszPre[] = { "mod_xyz.c", "mod_abc.c", NULL };<br />
- <br />
- ap_hook_do_something(my_something_doer, aszPre, NULL, APR_HOOK_MIDDLE);<br />
- </indent>
- }
- </example>
-
- <p>Note that the sort used to achieve this is stable, so
- ordering set by <code>APR_HOOK_<var>ORDER</var></code> is preserved, as far
- as is possible.</p>
-
- <p class="cite"><cite>Ben Laurie</cite>, 15th August 1999</p>
- </section>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/hooks.xml.meta b/docs/manual/developer/hooks.xml.meta
deleted file mode 100644
index 7d0d8d6913..0000000000
--- a/docs/manual/developer/hooks.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>hooks</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/index.html b/docs/manual/developer/index.html
deleted file mode 100644
index 5f97bff8c6..0000000000
--- a/docs/manual/developer/index.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/index.html.en b/docs/manual/developer/index.html.en
deleted file mode 100644
index d656b60c10..0000000000
--- a/docs/manual/developer/index.html.en
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Developer Documentation for Apache 2.0 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Developer Documentation for Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <p>Many of the documents on these Developer pages are lifted
- from Apache 1.3's documentation. While they are all being
- updated to Apache 2.0, they are in different stages of
- progress. Please be patient, and point out any discrepancies or
- errors on the developer/ pages directly to the
- <a href="http://httpd.apache.org/lists.html#http-dev">dev@httpd.apache.org</a> mailing list.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#topics">Topics</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#external">External Resources</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="topics" id="topics">Topics</a></h2>
- <ul>
- <li><a href="API.html">Apache 1.3 API Notes</a></li>
- <li><a href="hooks.html">Apache 2.0 Hook Functions</a></li>
- <li><a href="request.html">Request Processing in Apache 2.0</a></li>
- <li><a href="filters.html">How filters work in Apache 2.0</a></li>
- <li><a href="modules.html">Converting Modules from Apache 1.3 to Apache 2.0</a></li>
- <li><a href="debugging.html">Debugging Memory Allocation in APR</a></li>
- <li><a href="documenting.html">Documenting Apache 2.0</a></li>
- <li><a href="thread_safety.html">Apache 2.0 Thread Safety Issues</a></li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="external" id="external">External Resources</a></h2>
- <ul>
- <li>Tools provided by Ian Holsman:
- <ul>
- <li><a href="http://lxr.webperf.org/">Apache 2 cross reference</a></li>
- <li><a href="http://docx.webperf.org/">Autogenerated Apache 2 code documentation</a></li>
- </ul></li>
-
- <li>Module Development Tutorials by Kevin O'Donnell
- <ul>
- <li><a href="http://threebit.net/tutorials/apache2_modules/tut1/tutorial1.html">Integrating a module into the Apache build system</a></li>
-
- <li><a href="http://threebit.net/tutorials/apache2_modules/tut2/tutorial2.html">Handling configuration directives</a></li>
- </ul></li>
-
- <li><a href="http://www.onlamp.com/pub/ct/38">Some notes on
- Apache module development by Ryan Bloom</a></li>
- </ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/index.xml b/docs/manual/developer/index.xml
deleted file mode 100644
index 82e7e04518..0000000000
--- a/docs/manual/developer/index.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../" />
-
-<title>Developer Documentation for Apache 2.0</title>
-
-<summary>
- <p>Many of the documents on these Developer pages are lifted
- from Apache 1.3's documentation. While they are all being
- updated to Apache 2.0, they are in different stages of
- progress. Please be patient, and point out any discrepancies or
- errors on the developer/ pages directly to the
- <a href="http://httpd.apache.org/lists.html#http-dev"
- >dev@httpd.apache.org</a> mailing list.</p>
-</summary>
-
-<section id="topics"><title>Topics</title>
- <ul>
- <li><a href="API.html">Apache 1.3 API Notes</a></li>
- <li><a href="hooks.html">Apache 2.0 Hook Functions</a></li>
- <li><a href="request.html">Request Processing in Apache 2.0</a></li>
- <li><a href="filters.html">How filters work in Apache 2.0</a></li>
- <li><a href="modules.html">Converting Modules from Apache 1.3 to Apache 2.0</a></li>
- <li><a href="debugging.html">Debugging Memory Allocation in APR</a></li>
- <li><a href="documenting.html">Documenting Apache 2.0</a></li>
- <li><a href="thread_safety.html">Apache 2.0 Thread Safety Issues</a></li>
- </ul>
-</section>
-
-<section id="external"><title>External Resources</title>
- <ul>
- <li>Tools provided by Ian Holsman:
- <ul>
- <li><a href="http://lxr.webperf.org/">Apache 2 cross reference</a></li>
- <li><a href="http://docx.webperf.org/"
- >Autogenerated Apache 2 code documentation</a></li>
- </ul></li>
-
- <li>Module Development Tutorials by Kevin O'Donnell
- <ul>
- <li><a
- href="http://threebit.net/tutorials/apache2_modules/tut1/tutorial1.html"
- >Integrating a module into the Apache build system</a></li>
-
- <li><a
- href="http://threebit.net/tutorials/apache2_modules/tut2/tutorial2.html"
- >Handling configuration directives</a></li>
- </ul></li>
-
- <li><a href="http://www.onlamp.com/pub/ct/38">Some notes on
- Apache module development by Ryan Bloom</a></li>
- </ul>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/index.xml.meta b/docs/manual/developer/index.xml.meta
deleted file mode 100644
index 26f1bf7ac0..0000000000
--- a/docs/manual/developer/index.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/modules.html b/docs/manual/developer/modules.html
deleted file mode 100644
index cb7b1dbfaf..0000000000
--- a/docs/manual/developer/modules.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: modules.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: modules.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/developer/modules.html.en b/docs/manual/developer/modules.html.en
deleted file mode 100644
index 83ac6fb6ac..0000000000
--- a/docs/manual/developer/modules.html.en
+++ /dev/null
@@ -1,273 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Converting Modules from Apache 1.3 to Apache 2.0 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Converting Modules from Apache 1.3 to Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/modules.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/developer/modules.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-
- <p>This is a first attempt at writing the lessons I learned
- when trying to convert the <code>mod_mmap_static</code> module to Apache
- 2.0. It's by no means definitive and probably won't even be
- correct in some ways, but it's a start.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#easy">The easier changes ...</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#messy">The messier changes...</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="easy" id="easy">The easier changes ...</a></h2>
-
- <h3><a name="cleanup" id="cleanup">Cleanup Routines</a></h3>
- <p>These now need to be of type <code>apr_status_t</code> and return a
- value of that type. Normally the return value will be
- <code>APR_SUCCESS</code> unless there is some need to signal an error in
- the cleanup. Be aware that even though you signal an error not all code
- yet checks and acts upon the error.</p>
-
-
- <h3><a name="init" id="init">Initialisation Routines</a></h3>
- <p>These should now be renamed to better signify where they sit
- in the overall process. So the name gets a small change from
- <code>mmap_init</code> to <code>mmap_post_config</code>. The arguments
- passed have undergone a radical change and now look like</p>
-
- <ul>
- <li><code>apr_pool_t *p</code></li>
- <li><code>apr_pool_t *plog</code></li>
- <li><code>apr_pool_t *ptemp</code></li>
- <li><code>server_rec *s</code></li>
- </ul>
-
-
- <h3><a name="datatypes" id="datatypes">Data Types</a></h3>
- <p>A lot of the data types have been moved into the <a href="http://apr.apache.org/">APR</a>. This means that some have had
- a name change, such as the one shown above. The following is a brief
- list of some of the changes that you are likely to have to make.</p>
-
- <ul>
- <li><code>pool</code> becomes <code>apr_pool_t</code></li>
- <li><code>table</code> becomes <code>apr_table_t</code></li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="messy" id="messy">The messier changes...</a></h2>
-
- <h3><a name="register-hooks" id="register-hooks">Register Hooks</a></h3>
- <p>The new architecture uses a series of hooks to provide for
- calling your functions. These you'll need to add to your module
- by way of a new function, <code>static void register_hooks(void)</code>.
- The function is really reasonably straightforward once you
- understand what needs to be done. Each function that needs
- calling at some stage in the processing of a request needs to
- be registered, handlers do not. There are a number of phases
- where functions can be added, and for each you can specify with
- a high degree of control the relative order that the function
- will be called in.</p>
-
- <p>This is the code that was added to <code>mod_mmap_static</code>:</p>
- <div class="example"><pre>
-static void register_hooks(void)
-{
- static const char * const aszPre[]={ "http_core.c",NULL };
- ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
- ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
-};</pre></div>
-
- <p>This registers 2 functions that need to be called, one in
- the <code>post_config</code> stage (virtually every module will need this
- one) and one for the <code>translate_name</code> phase. note that while
- there are different function names the format of each is
- identical. So what is the format?</p>
-
- <div class="example"><p><code>
- ap_hook_<var>phase_name</var>(<var>function_name</var>,
- <var>predecessors</var>, <var>successors</var>, <var>position</var>);
- </code></p></div>
-
- <p>There are 3 hook positions defined...</p>
-
- <ul>
- <li><code>HOOK_FIRST</code></li>
- <li><code>HOOK_MIDDLE</code></li>
- <li><code>HOOK_LAST</code></li>
- </ul>
-
- <p>To define the position you use the position and then modify
- it with the predecessors and successors. Each of the modifiers
- can be a list of functions that should be called, either before
- the function is run (predecessors) or after the function has
- run (successors).</p>
-
- <p>In the <code>mod_mmap_static</code> case I didn't care about the
- <code>post_config</code> stage, but the <code>mmap_static_xlat</code>
- <strong>must</strong> be called after the core module had done it's name
- translation, hence the use of the aszPre to define a modifier to the
- position <code>HOOK_LAST</code>.</p>
-
-
- <h3><a name="moddef" id="moddef">Module Definition</a></h3>
- <p>There are now a lot fewer stages to worry about when
- creating your module definition. The old defintion looked
- like</p>
-
- <div class="example"><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD_MODULE_STUFF,
- /* initializer */
- /* dir config creater */
- /* dir merger --- default is to override */
- /* server config */
- /* merge server config */
- /* command handlers */
- /* handlers */
- /* filename translation */
- /* check_user_id */
- /* check auth */
- /* check access */
- /* type_checker */
- /* fixups */
- /* logger */
- /* header parser */
- /* child_init */
- /* child_exit */
- /* post read-request */
-};</pre></div>
-
- <p>The new structure is a great deal simpler...</p>
- <div class="example"><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD20_MODULE_STUFF,
- /* create per-directory config structures */
- /* merge per-directory config structures */
- /* create per-server config structures */
- /* merge per-server config structures */
- /* command handlers */
- /* handlers */
- /* register hooks */
-};</pre></div>
-
- <p>Some of these read directly across, some don't. I'll try to
- summarise what should be done below.</p>
-
- <p>The stages that read directly across :</p>
-
- <dl>
- <dt><code>/* dir config creater */</code></dt>
- <dd><code>/* create per-directory config structures */</code></dd>
-
- <dt><code>/* server config */</code></dt>
- <dd><code>/* create per-server config structures */</code></dd>
-
- <dt><code>/* dir merger */</code></dt>
- <dd><code>/* merge per-directory config structures */</code></dd>
-
- <dt><code>/* merge server config */</code></dt>
- <dd><code>/* merge per-server config structures */</code></dd>
-
- <dt><code>/* command table */</code></dt>
- <dd><code>/* command apr_table_t */</code></dd>
-
- <dt><code>/* handlers */</code></dt>
- <dd><code>/* handlers */</code></dd>
- </dl>
-
- <p>The remainder of the old functions should be registered as
- hooks. There are the following hook stages defined so
- far...</p>
-
- <dl>
- <dt><code>ap_hook_post_config</code></dt>
- <dd>this is where the old <code>_init</code> routines get
- registered</dd>
-
- <dt><code>ap_hook_http_method</code></dt>
- <dd>retrieve the http method from a request. (legacy)</dd>
-
- <dt><code>ap_hook_open_logs</code></dt>
- <dd>open any specified logs</dd>
-
- <dt><code>ap_hook_auth_checker</code></dt>
- <dd>check if the resource requires authorization</dd>
-
- <dt><code>ap_hook_access_checker</code></dt>
- <dd>check for module-specific restrictions</dd>
-
- <dt><code>ap_hook_check_user_id</code></dt>
- <dd>check the user-id and password</dd>
-
- <dt><code>ap_hook_default_port</code></dt>
- <dd>retrieve the default port for the server</dd>
-
- <dt><code>ap_hook_pre_connection</code></dt>
- <dd>do any setup required just before processing, but after
- accepting</dd>
-
- <dt><code>ap_hook_process_connection</code></dt>
- <dd>run the correct protocol</dd>
-
- <dt><code>ap_hook_child_init</code></dt>
- <dd>call as soon as the child is started</dd>
-
- <dt><code>ap_hook_create_request</code></dt>
- <dd>??</dd>
-
- <dt><code>ap_hook_fixups</code></dt>
- <dd>last chance to modify things before generating content</dd>
-
- <dt><code>ap_hook_handler</code></dt>
- <dd>generate the content</dd>
-
- <dt><code>ap_hook_header_parser</code></dt>
- <dd>lets modules look at the headers, not used by most modules, because
- they use <code>post_read_request</code> for this</dd>
-
- <dt><code>ap_hook_insert_filter</code></dt>
- <dd>to insert filters into the filter chain</dd>
-
- <dt><code>ap_hook_log_transaction</code></dt>
- <dd>log information about the request</dd>
-
- <dt><code>ap_hook_optional_fn_retrieve</code></dt>
- <dd>retrieve any functions registered as optional</dd>
-
- <dt><code>ap_hook_post_read_request</code></dt>
- <dd>called after reading the request, before any other phase</dd>
-
- <dt><code>ap_hook_quick_handler</code></dt>
- <dd>called before any request processing, used by cache modules.</dd>
-
- <dt><code>ap_hook_translate_name</code></dt>
- <dd>translate the URI into a filename</dd>
-
- <dt><code>ap_hook_type_checker</code></dt>
- <dd>determine and/or set the doc type</dd>
- </dl>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/modules.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/developer/modules.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/modules.html.ja.euc-jp b/docs/manual/developer/modules.html.ja.euc-jp
deleted file mode 100644
index 7cea010639..0000000000
--- a/docs/manual/developer/modules.html.ja.euc-jp
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥â¥¸¥å¡¼¥ë¤Î Apache 1.3 ¤«¤é Apache 2.0 ¤Ø¤Î°Ü¿¢ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>¥â¥¸¥å¡¼¥ë¤Î Apache 1.3 ¤«¤é Apache 2.0 ¤Ø¤Î°Ü¿¢</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/modules.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/developer/modules.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ï <code>mod_mmap_static</code> ¥â¥¸¥å¡¼¥ë¤ò Apache 2.0 ÍѤ˰ܿ¢¤·¤¿»þ¤Ë
- ³Ø¤ó¤À·Ð¸³¤ò¤â¤È¤Ë½ñ¤¤¤¿¡¢ºÇ½é¤Î¼ê°ú¤­½ñ¤Ç¤¹¡£¤Þ¤À¤Þ¤À´°Á´¤¸¤ã¤Ê¤¤¤·¡¢
- ¤Ò¤ç¤Ã¤È¤¹¤ë¤È´Ö°ã¤Ã¤Æ¤¤¤ëÉôʬ¤â¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢
- ¼è¤Ã³Ý¤ê¤Ë¤Ï¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#easy">´Êñ¤ÊÊѹ¹ÅÀ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#messy">¤â¤Ã¤ÈÌñ²ð¤ÊÊѹ¹ÅÀ¡Ä</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="easy" id="easy">´Êñ¤ÊÊѹ¹ÅÀ</a></h2>
-
- <h3><a name="cleanup" id="cleanup">¥¯¥ê¡¼¥ó¥Ê¥Ã¥× ¥ë¡¼¥Á¥ó</a></h3>
- <p>¥¯¥ê¡¼¥ó¥Ê¥Ã¥×¥ë¡¼¥Á¥ó¤Ï <code>apr_status_t</code> ·¿¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢apr_status_t ·¿¤ÎÃͤòÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£
- ¥¯¥ê¡¼¥ó¥Ê¥Ã¥×Ãæ¤Î¥¨¥é¡¼¤òÄÌÃΤ¹¤ëɬÍפ¬¤Ê¤±¤ì¤Ð¡¢ÊÖ¤êÃͤÏÉáÄÌ¡¢
- <code>ARP_SUCCESS</code> ¤Ç¤¹¡£¤¿¤È¤¨¥¨¥é¡¼¤òÄÌÃΤ·¤¿¤È¤·¤Æ¤â¡¢
- ¤¹¤Ù¤Æ¤Î¥³¡¼¥É¤¬¤½¤ÎÄÌÃΤò¥Á¥§¥Ã¥¯¤·¤¿¤ê¡¢
- ¥¨¥é¡¼¤Ë±þ¤¸¤¿Æ°ºî¤ò¤¹¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¤³¤È¤Ëµ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-
-
- <h3><a name="init" id="init">½é´ü²½¥ë¡¼¥Á¥ó</a></h3>
-
- <p>½é´ü²½¥ë¡¼¥Á¥ó¤Ï½èÍýÁ´ÂΤ«¤é¸«¤Æ¤·¤Ã¤¯¤ê¤¯¤ë¤è¤¦¤Ê°ÕÌ£¤òɽ¤¹¤è¤¦¤Ë¡¢
- ̾Á°¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿¡£¤Ç¤¹¤«¤é¡¢<code>mmap_init</code> ¤«¤é <code>mmap_post_config</code>
- ¤Î¤è¤¦¤Ë¤Á¤ç¤Ã¤ÈÊѹ¹¤µ¤ì¤Þ¤·¤¿¡£
- ÅϤµ¤ì¤ë°ú¿ô¤ÏÂçÉý¤ËÊѹ¹¤µ¤ì¡¢¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</p>
-
- <ul>
- <li><code>apr_pool_t *p</code></li>
- <li><code>apr_pool_t *plog</code></li>
- <li><code>apr_pool_t *ptemp</code></li>
- <li><code>server_rec *s</code></li>
- </ul>
-
-
- <h3><a name="datatypes" id="datatypes">¥Ç¡¼¥¿·¿</a></h3>
- <p>¥Ç¡¼¥¿·¿¤Î¤Û¤È¤ó¤É¤Ï <a href="http://apr.apache.org/">APR</a> ¤Ë°Ü¤µ¤ì¤Þ¤·¤¿¡£¤Ä¤Þ¤ê¡¢
- ¤¤¤¯¤Ä¤«¤Î̾Á°¤¬Á°½Ò¤Î¤è¤¦¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- »Ü¤¹¤Ù¤­Êѹ¹ÅÀ¤Î´Êñ¤Ê°ìÍ÷¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£</p>
-
- <ul>
- <li><code>pool</code> becomes <code>apr_pool_t</code></li>
- <li><code>table</code> becomes <code>apr_table_t</code></li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="messy" id="messy">¤â¤Ã¤ÈÌñ²ð¤ÊÊѹ¹ÅÀ¡Ä</a></h2>
-
- <h3><a name="register-hooks" id="register-hooks">¥Õ¥Ã¥¯¤ÎÅÐÏ¿</a></h3>
- <p>¿·¤·¤¤¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤ÏºîÀ®¤·¤¿´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¤Î¤Ë
- °ìÏ¢¤Î¥Õ¥Ã¥¯¤ò»ÈÍѤ·¤Þ¤¹¡£¤³¤Î¥Õ¥Ã¥¯¤Ï¡¢¿·¤·¤¤´Ø¿ô
- <code>static void register_hooks(void)</code> ¤ò»È¤Ã¤ÆÅÐÏ¿¤¹¤ë¤è¤¦¡¢
- ¥â¥¸¥å¡¼¥ë¤Ë½ñ¤­Â­¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤Î´Ø¿ô¤Ï¡¢¤Ê¤Ë¤ò¤¹¤Ù¤­¤«°ìöÍý²ò¤·¤Æ¤·¤Þ¤¨¤Ð¡¢
- ½½Ê¬¤Ë¤ï¤«¤ê¤ä¤¹¤¤¤â¤Î¤Ç¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¤Î½èÍý¤Î¤¢¤ë¥¹¥Æ¡¼¥¸¤Ç¸Æ¤Ó½Ð¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤
- ´Ø¿ô¤ÏÅÐÏ¿¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¥Ï¥ó¥É¥é¤ÏÅÐÏ¿¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
- ´Ø¿ô¤òÅÐÏ¿¤Ç¤­¤ë¥Õ¥§¡¼¥º¤Ï¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¡£
- ¤½¤ì¤¾¤ì¤Î¥Õ¥§¡¼¥º¤Ç¡¢´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹ÁêÂÐŪ¤Ê½çÈ֤ϡ¢
- ¤«¤Ê¤ê¤ÎÄøÅÙÀ©¸æ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>°Ê²¼¤Ï¡¢<code>mod_mmap_static</code> ¤ËÄɲä·¤¿¥³¡¼¥É¤Ç¤¹:</p>
-
- <div class="example"><pre>
-static void register_hooks(void)
-{
- static const char * const aszPre[]={ "http_core.c",NULL };
- ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
- ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
-};</pre></div>
-
- <p>¤³¤³¤Ç¤Ï¸Æ¤Ó¤À¤¹¤Ù¤­Æó¤Ä¤Î´Ø¿ô¤òÅÐÏ¿¤·¤Æ¤¤¤Þ¤¹¡£°ì¤Ä¤Ï
- <code>post_config</code> ¥¹¥Æ¡¼¥¸ÍÑ (¤Û¤È¤ó¤É¤¹¤Ù¤Æ¤Î¥â¥¸¥å¡¼¥ë
- ¤Ï¤³¤ì¤¬É¬ÍפǤ¹) ¤Ç¡¢¤â¤¦°ì¤Ä¤Ï <code>translate_name</code> ¥Õ¥§¡¼¥ºÍѤǤ¹¡£
- ¤½¤ì¤¾¤ì¤Î´Ø¿ô¤Ï̾Á°¤Ï°ã¤¦¤±¤ì¤É¤â·Á¼°¤ÏƱ¤¸¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤ì¤Ç¤Ï¡¢·Á¼°¤Ï¤É¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¤«?</p>
-
- <div class="example"><p><code>
- ap_hook_<var>phase_name</var>(<var>function_name</var>,
- <var>predecessors</var>, <var>successors</var>, <var>position</var>);
- </code></p></div>
-
- <p>»°¤Ä¤Î°ÌÃÖ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡Ä</p>
-
- <ul>
- <li><code>HOOK_FIRST</code></li>
- <li><code>HOOK_MIDDLE</code></li>
- <li><code>HOOK_LAST</code></li>
- </ul>
-
- <p>°ÌÃÖ¤òÄêµÁ¤¹¤ë¤Ë¤Ï¡¢¾åµ­¤Î¡Ö°ÌÃ֡פò»ØÄꤷ¡¢
- ½¤¾þ»Ò¤Ç¤¢¤ë¡ÖÀè¹Ô¡×¤È¡Ö¸å¹Ô¡×¤Ç¼ê¤ò²Ã¤¨¤Þ¤¹¡£
- ¡ÖÀè¹Ô¡×¡Ö¸å¹Ô¡×¤Ï¡¢¸Æ¤Ð¤ì¤ë¤Ù¤­´Ø¿ô¤Î¥ê¥¹¥È¤Ç¤¹¡£
- ¡ÖÀè¹Ô¡×¤Ï´Ø¿ô¤Î¼Â¹ÔÁ°¤Ë¸Æ¤Ð¤ì¤ë¤â¤Î¤Ç¡¢
- ¡Ö¸å¹Ô¡×¤Ï¼Â¹Ô¸å¤Ë¸Æ¤Ð¤ì¤ë¤â¤Î¤Ç¤¹¡£</p>
-
- <p><code>mod_mmap_static</code> ¤Î¾ì¹ç¡¢<code>post_config</code>
- ¥¹¥Æ¡¼¥¸¤Ç¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¤¬¡¢
- <code>mmap_static_xlat</code> ¤¬ core ¥â¥¸¥å¡¼¥ë¤¬Ì¾Á°¤ÎÊÑ´¹¤ò¼Â¹Ô¤·¤¿¸å¤Ë
- <strong>¸Æ¤Ð¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó</strong>¡£
- ¤½¤³¤Ç aszPre ¤ò»È¤Ã¤Æ <code>HOOK_LAST</code> ¤Î½¤¾þ»Ò¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
-
- <h3><a name="moddef" id="moddef">¥â¥¸¥å¡¼¥ë¤ÎÄêµÁ</a></h3>
- <p>¥â¥¸¥å¡¼¥ë¤ÎÄêµÁ¤òºîÀ®¤¹¤ëºÝ¤ËÃí°Õ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤
- ¥¹¥Æ¡¼¥¸¤Î¿ô¤Ï·ã¸º¤·¤Æ¤¤¤Þ¤¹¡£¸Å¤¤ÄêµÁ¤Ï¼¡¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤·¤¿¡£</p>
-
- <div class="example"><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD_MODULE_STUFF,
- /* initializer */
- /* dir config creater */
- /* dir merger --- default is to override */
- /* server config */
- /* merge server config */
- /* command handlers */
- /* handlers */
- /* filename translation */
- /* check_user_id */
- /* check auth */
- /* check access */
- /* type_checker */
- /* fixups */
- /* logger */
- /* header parser */
- /* child_init */
- /* child_exit */
- /* post read-request */
-};</pre></div>
-
- <p>¿·¤·¤¤¹½Â¤ÂΤϤȤäƤ⥷¥ó¥×¥ë¤Ç¤¹¡Ä</p>
- <div class="example"><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD20_MODULE_STUFF,
- /* create per-directory config structures */
- /* merge per-directory config structures */
- /* create per-server config structures */
- /* merge per-server config structures */
- /* command handlers */
- /* handlers */
- /* register hooks */
-};</pre></div>
-
- <p>¤³¤Î¤¦¤Á¤Î¤¤¤¯¤Ä¤«¤Ï¸Å¤¤¤â¤Î¤«¤é¿·¤·¤¤¤â¤Î¤ËľÀÜÆɤßÂؤ¨¤é¤ì¤ë¤â¤Î¤Ç¡¢
- ¤¤¤¯¤Ä¤«¤Ï¤½¤¦¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤É¤¦¤¹¤ì¤Ð¤¤¤¤¤Î¤«¤òÍ×Ì󤷤Ƥߤޤ¹¡£</p>
-
- <p>ľÀÜÆɤßÂؤ¨¤é¤ì¤ë¥¹¥Æ¡¼¥¸:</p>
-
- <dl>
- <dt><code>/* ¥Ç¥£¥ì¥¯¥È¥êÀßÄêºîÀ®´Ø¿ô */</code></dt>
- <dd><code>/* ¥Ç¥£¥ì¥¯¥È¥êËèÀßÄ깽¤ÂκîÀ® */</code></dd>
-
- <dt><code>/* ¥µ¡¼¥ÐÀßÄêºîÀ®´Ø¿ô */</code></dt>
- <dd><code>/* ¥µ¡¼¥ÐËèÀßÄ깽¤ÂκîÀ® */</code></dd>
-
- <dt><code>/* ¥Ç¥£¥ì¥¯¥È¥êÀßÄê¥Þ¡¼¥¸´Ø¿ô */</code></dt>
- <dd><code>/* ¥Ç¥£¥ì¥¯¥È¥êËèÀßÄ깽¤ÂÎ¥Þ¡¼¥¸ */</code></dd>
-
- <dt><code>/* ¥µ¡¼¥ÐÀßÄê¥Þ¡¼¥¸´Ø¿ô */</code></dt>
- <dd><code>/* ¥µ¡¼¥ÐËèÀßÄ깽¤ÂκîÀ®¥Þ¡¼¥¸ */</code></dd>
-
- <dt><code>/* ¥³¥Þ¥ó¥É¡¦¥Æ¡¼¥Ö¥ë */</code></dt>
- <dd><code>/* ¥³¥Þ¥ó¥É apr_table_t */</code></dd>
-
- <dt><code>/* ¥Ï¥ó¥É¥é */</code></dt>
- <dd><code>/* ¥Ï¥ó¥É¥é */</code></dd>
- </dl>
-
- <p>¸Å¤¤´Ø¿ô¤Î»Ä¤ê¤Î¤â¤Î¤Ï¥Õ¥Ã¥¯¤È¤·¤ÆÅÐÏ¿¤µ¤ì¤ë¤Ù¤­¤Ç¤¹¡£
- ¸½»þÅÀ¤Ç¼¡¤Î¤è¤¦¤Ê¥Õ¥Ã¥¯¡¦¥¹¥Æ¡¼¥¸¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡Ä</p>
-
- <dl>
- <dt><code>ap_hook_post_config</code></dt>
- <dd>(°ÊÁ°¤Î <code>_init</code> ¥ë¡¼¥Á¥ó¤¬ÅÐÏ¿¤µ¤ì¤ë¤Ù¤­¾ì½ê¤Ç¤¹)</dd>
-
- <dt><code>ap_hook_http_method</code></dt>
- <dd>(¥ê¥¯¥¨¥¹¥È¤«¤é HTTP ¥á¥½¥Ã¥É¤ò¼èÆÀ¤·¤Þ¤¹ (¸ß´¹ÍÑ))</dd>
-
- <dt><code>ap_hook_open_logs</code></dt>
- <dd>(ÆÃÄê¤Î¥í¥°¤Î¥ª¡¼¥×¥ó)</dd>
-
- <dt><code>ap_hook_auth_checker</code></dt>
- <dd>(¥ê¥½¡¼¥¹¤¬¸¢¸Â¤òɬÍפȤ¹¤ë¤«¤É¤¦¤«¤Î³Îǧ)</dd>
-
- <dt><code>ap_hook_access_checker</code></dt>
- <dd>(¥â¥¸¥å¡¼¥ë¸ÇÍ­¤ÎÀ©Ìó¤Î³Îǧ)</dd>
-
- <dt><code>ap_hook_check_user_id</code></dt>
- <dd>(¥æ¡¼¥¶ ID ¤È¥Ñ¥¹¥ï¡¼¥É¤Î³Îǧ)</dd>
-
- <dt><code>ap_hook_default_port</code></dt>
- <dd>(¥µ¡¼¥Ð¤Î¥Ç¥Õ¥©¥ë¥È¡¦¥Ý¡¼¥È¤Î¼èÆÀ)</dd>
-
- <dt><code>ap_hook_pre_connection</code></dt>
- <dd>(½èÍý¤ÎľÁ°¤ËɬÍפʤ³¤È¤ò¼Â¹Ô¡£¤¿¤À¤· accept ľ¸å¤Ë¸Æ¤Ð¤ì¤ë)</dd>
-
- <dt><code>ap_hook_process_connection</code></dt>
- <dd>(¥×¥í¥È¥³¥ë¤Î½èÍý)</dd>
-
- <dt><code>ap_hook_child_init</code></dt>
- <dd>(»Ò¥×¥í¥»¥ëµ¯Æ°Ä¾¸å)</dd>
-
- <dt><code>ap_hook_create_request</code></dt>
- <dd>(??)</dd>
-
- <dt><code>ap_hook_fixups</code></dt>
- <dd>(±þÅúÆâÍƤÎÀ¸À®¤òÊѹ¹¤¹¤ë¥é¥¹¥È¡¦¥Á¥ã¥ó¥¹)</dd>
-
- <dt><code>ap_hook_handler</code></dt>
- <dd>(±þÅúÆâÍƤÎÀ¸À®)</dd>
-
- <dt><code>ap_hook_header_parser</code></dt>
- <dd>(¥â¥¸¥å¡¼¥ë¤Ë¥Ø¥Ã¥À¤Î¾È²ñ¤ò¤µ¤»¤ë¡£¤Û¤È¤ó¤É¤Î¥â¥¸¥å¡¼¥ë¤Ç¤Ï»È¤ï¤ì¤Þ¤»¤ó¡£post_read_request ¤ò»È¤¤¤Þ¤¹)</dd>
-
- <dt><code>ap_hook_insert_filter</code></dt>
- <dd>(¥Õ¥£¥ë¥¿¡¦¥Á¥§¥¤¥ó¤Ë¥Õ¥£¥ë¥¿¤òÁÞÆþ)</dd>
-
- <dt><code>ap_hook_log_transaction</code></dt>
- <dd>(¥ê¥¯¥¨¥¹¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òµ­Ï¿¤¹¤ë)</dd>
-
- <dt><code>ap_hook_optional_fn_retrieve</code></dt>
- <dd>(¥ª¥×¥·¥ç¥ó¤È¤·¤ÆÅÐÏ¿¤µ¤ì¤¿´Ø¿ô¤Î¼èÆÀ)</dd>
-
- <dt><code>ap_hook_post_read_request</code></dt>
- <dd>(¥ê¥¯¥¨¥¹¥È¤òÆɤߤ³¤ó¤À¸å¡¢Â¾¤Î¥Õ¥§¡¼¥º¤ÎÁ°¤Ë¸Æ¤Ð¤ì¤ë)</dd>
-
- <dt><code>ap_hook_quick_handler</code></dt>
- <dd>¥ê¥¯¥¨¥¹¥È¤Î½èÍý¤¬»Ï¤Þ¤ëÁ°¤Ë¸Æ¤Ð¤ì¤ë¡£¥­¥ã¥Ã¥·¥å¥â¥¸¥å¡¼¥ë¤¬
- »ÈÍѤ·¤Æ¤¤¤ë</dd>
-
- <dt><code>ap_hook_translate_name</code></dt>
- <dd>(URI ¤ò¥Õ¥¡¥¤¥ë̾¤ËÊÑ´¹¤¹¤ë)</dd>
-
- <dt><code>ap_hook_type_checker</code></dt>
- <dd>(ʸ½ñ·¿¤Î·èÄê¤ÈÀßÄê¡£¤¢¤ë¤¤¤Ï¤½¤ÎÊÒÊý)</dd>
- </dl>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/modules.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/developer/modules.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/modules.xml b/docs/manual/developer/modules.xml
deleted file mode 100644
index 6d458ebece..0000000000
--- a/docs/manual/developer/modules.xml
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="modules.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Converting Modules from Apache 1.3 to Apache 2.0</title>
-
-<summary>
- <p>This is a first attempt at writing the lessons I learned
- when trying to convert the <code>mod_mmap_static</code> module to Apache
- 2.0. It's by no means definitive and probably won't even be
- correct in some ways, but it's a start.</p>
-</summary>
-
-<section id="easy"><title>The easier changes ...</title>
-
- <section id="cleanup"><title>Cleanup Routines</title>
- <p>These now need to be of type <code>apr_status_t</code> and return a
- value of that type. Normally the return value will be
- <code>APR_SUCCESS</code> unless there is some need to signal an error in
- the cleanup. Be aware that even though you signal an error not all code
- yet checks and acts upon the error.</p>
- </section>
-
- <section id="init"><title>Initialisation Routines</title>
- <p>These should now be renamed to better signify where they sit
- in the overall process. So the name gets a small change from
- <code>mmap_init</code> to <code>mmap_post_config</code>. The arguments
- passed have undergone a radical change and now look like</p>
-
- <ul>
- <li><code>apr_pool_t *p</code></li>
- <li><code>apr_pool_t *plog</code></li>
- <li><code>apr_pool_t *ptemp</code></li>
- <li><code>server_rec *s</code></li>
- </ul>
- </section>
-
- <section id="datatypes"><title>Data Types</title>
- <p>A lot of the data types have been moved into the <a
- href="http://apr.apache.org/">APR</a>. This means that some have had
- a name change, such as the one shown above. The following is a brief
- list of some of the changes that you are likely to have to make.</p>
-
- <ul>
- <li><code>pool</code> becomes <code>apr_pool_t</code></li>
- <li><code>table</code> becomes <code>apr_table_t</code></li>
- </ul>
- </section>
-</section>
-
-<section id="messy"><title>The messier changes...</title>
-
- <section id="register-hooks"><title>Register Hooks</title>
- <p>The new architecture uses a series of hooks to provide for
- calling your functions. These you'll need to add to your module
- by way of a new function, <code>static void register_hooks(void)</code>.
- The function is really reasonably straightforward once you
- understand what needs to be done. Each function that needs
- calling at some stage in the processing of a request needs to
- be registered, handlers do not. There are a number of phases
- where functions can be added, and for each you can specify with
- a high degree of control the relative order that the function
- will be called in.</p>
-
- <p>This is the code that was added to <code>mod_mmap_static</code>:</p>
- <example><pre>
-static void register_hooks(void)
-{
- static const char * const aszPre[]={ "http_core.c",NULL };
- ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
- ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
-};</pre>
- </example>
-
- <p>This registers 2 functions that need to be called, one in
- the <code>post_config</code> stage (virtually every module will need this
- one) and one for the <code>translate_name</code> phase. note that while
- there are different function names the format of each is
- identical. So what is the format?</p>
-
- <example>
- ap_hook_<var>phase_name</var>(<var>function_name</var>,
- <var>predecessors</var>, <var>successors</var>, <var>position</var>);
- </example>
-
- <p>There are 3 hook positions defined...</p>
-
- <ul>
- <li><code>HOOK_FIRST</code></li>
- <li><code>HOOK_MIDDLE</code></li>
- <li><code>HOOK_LAST</code></li>
- </ul>
-
- <p>To define the position you use the position and then modify
- it with the predecessors and successors. Each of the modifiers
- can be a list of functions that should be called, either before
- the function is run (predecessors) or after the function has
- run (successors).</p>
-
- <p>In the <code>mod_mmap_static</code> case I didn't care about the
- <code>post_config</code> stage, but the <code>mmap_static_xlat</code>
- <strong>must</strong> be called after the core module had done it's name
- translation, hence the use of the aszPre to define a modifier to the
- position <code>HOOK_LAST</code>.</p>
- </section>
-
- <section id="moddef"><title>Module Definition</title>
- <p>There are now a lot fewer stages to worry about when
- creating your module definition. The old defintion looked
- like</p>
-
- <example><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD_MODULE_STUFF,
- /* initializer */
- /* dir config creater */
- /* dir merger --- default is to override */
- /* server config */
- /* merge server config */
- /* command handlers */
- /* handlers */
- /* filename translation */
- /* check_user_id */
- /* check auth */
- /* check access */
- /* type_checker */
- /* fixups */
- /* logger */
- /* header parser */
- /* child_init */
- /* child_exit */
- /* post read-request */
-};</pre>
- </example>
-
- <p>The new structure is a great deal simpler...</p>
- <example><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD20_MODULE_STUFF,
- /* create per-directory config structures */
- /* merge per-directory config structures */
- /* create per-server config structures */
- /* merge per-server config structures */
- /* command handlers */
- /* handlers */
- /* register hooks */
-};</pre>
- </example>
-
- <p>Some of these read directly across, some don't. I'll try to
- summarise what should be done below.</p>
-
- <p>The stages that read directly across :</p>
-
- <dl>
- <dt><code>/* dir config creater */</code></dt>
- <dd><code>/* create per-directory config structures */</code></dd>
-
- <dt><code>/* server config */</code></dt>
- <dd><code>/* create per-server config structures */</code></dd>
-
- <dt><code>/* dir merger */</code></dt>
- <dd><code>/* merge per-directory config structures */</code></dd>
-
- <dt><code>/* merge server config */</code></dt>
- <dd><code>/* merge per-server config structures */</code></dd>
-
- <dt><code>/* command table */</code></dt>
- <dd><code>/* command apr_table_t */</code></dd>
-
- <dt><code>/* handlers */</code></dt>
- <dd><code>/* handlers */</code></dd>
- </dl>
-
- <p>The remainder of the old functions should be registered as
- hooks. There are the following hook stages defined so
- far...</p>
-
- <dl>
- <dt><code>ap_hook_post_config</code></dt>
- <dd>this is where the old <code>_init</code> routines get
- registered</dd>
-
- <dt><code>ap_hook_http_method</code></dt>
- <dd>retrieve the http method from a request. (legacy)</dd>
-
- <dt><code>ap_hook_open_logs</code></dt>
- <dd>open any specified logs</dd>
-
- <dt><code>ap_hook_auth_checker</code></dt>
- <dd>check if the resource requires authorization</dd>
-
- <dt><code>ap_hook_access_checker</code></dt>
- <dd>check for module-specific restrictions</dd>
-
- <dt><code>ap_hook_check_user_id</code></dt>
- <dd>check the user-id and password</dd>
-
- <dt><code>ap_hook_default_port</code></dt>
- <dd>retrieve the default port for the server</dd>
-
- <dt><code>ap_hook_pre_connection</code></dt>
- <dd>do any setup required just before processing, but after
- accepting</dd>
-
- <dt><code>ap_hook_process_connection</code></dt>
- <dd>run the correct protocol</dd>
-
- <dt><code>ap_hook_child_init</code></dt>
- <dd>call as soon as the child is started</dd>
-
- <dt><code>ap_hook_create_request</code></dt>
- <dd>??</dd>
-
- <dt><code>ap_hook_fixups</code></dt>
- <dd>last chance to modify things before generating content</dd>
-
- <dt><code>ap_hook_handler</code></dt>
- <dd>generate the content</dd>
-
- <dt><code>ap_hook_header_parser</code></dt>
- <dd>lets modules look at the headers, not used by most modules, because
- they use <code>post_read_request</code> for this</dd>
-
- <dt><code>ap_hook_insert_filter</code></dt>
- <dd>to insert filters into the filter chain</dd>
-
- <dt><code>ap_hook_log_transaction</code></dt>
- <dd>log information about the request</dd>
-
- <dt><code>ap_hook_optional_fn_retrieve</code></dt>
- <dd>retrieve any functions registered as optional</dd>
-
- <dt><code>ap_hook_post_read_request</code></dt>
- <dd>called after reading the request, before any other phase</dd>
-
- <dt><code>ap_hook_quick_handler</code></dt>
- <dd>called before any request processing, used by cache modules.</dd>
-
- <dt><code>ap_hook_translate_name</code></dt>
- <dd>translate the URI into a filename</dd>
-
- <dt><code>ap_hook_type_checker</code></dt>
- <dd>determine and/or set the doc type</dd>
- </dl>
- </section>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/modules.xml.ja b/docs/manual/developer/modules.xml.ja
deleted file mode 100644
index 51bf250390..0000000000
--- a/docs/manual/developer/modules.xml.ja
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="modules.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>$B%b%8%e!<%k$N(B Apache 1.3 $B$+$i(B Apache 2.0 $B$X$N0\?"(B</title>
-
-<summary>
- <p>$B$3$NJ8=q$O(B <code>mod_mmap_static</code> $B%b%8%e!<%k$r(B Apache 2.0 $BMQ$K0\?"$7$?;~$K(B
- $B3X$s$@7P83$r$b$H$K=q$$$?!":G=i$N<j0z$-=q$G$9!#$^$@$^$@40A4$8$c$J$$$7!"(B
- $B$R$g$C$H$9$k$H4V0c$C$F$$$kItJ,$b$"$k$+$b$7$l$^$;$s$,!"(B
- $B<h$C3]$j$K$O$J$k$G$7$g$&!#(B</p>
-</summary>
-
-<section id="easy"><title>$B4JC1$JJQ99E@(B</title>
-
- <section id="cleanup"><title>$B%/%j!<%s%J%C%W(B $B%k!<%A%s(B</title>
- <p>$B%/%j!<%s%J%C%W%k!<%A%s$O(B <code>apr_status_t</code> $B7?$G$"$kI,MW$,$"$j$^$9!#(B
- $B$=$7$F!"(Bapr_status_t $B7?$NCM$rJV$5$J$/$F$O$J$j$^$;$s!#(B
- $B%/%j!<%s%J%C%WCf$N%(%i!<$rDLCN$9$kI,MW$,$J$1$l$P!"JV$jCM$OIaDL!"(B
- <code>ARP_SUCCESS</code> $B$G$9!#$?$H$(%(%i!<$rDLCN$7$?$H$7$F$b!"(B
- $B$9$Y$F$N%3!<%I$,$=$NDLCN$r%A%'%C%/$7$?$j!"(B
- $B%(%i!<$K1~$8$?F0:n$r$9$k$o$1$G$O$J$$$3$H$K5$$r$D$1$F$/$@$5$$!#(B</p>
- </section>
-
-
- <section id="init"><title>$B=i4|2=%k!<%A%s(B</title>
-
- <p>$B=i4|2=%k!<%A%s$O=hM}A4BN$+$i8+$F$7$C$/$j$/$k$h$&$J0UL#$rI=$9$h$&$K!"(B
- $BL>A0$,JQ99$5$l$^$7$?!#$G$9$+$i!"(B<code>mmap_init</code> $B$+$i(B <code>mmap_post_config</code>
- $B$N$h$&$K$A$g$C$HJQ99$5$l$^$7$?!#(B
- $BEO$5$l$k0z?t$OBgI}$KJQ99$5$l!"<!$N$h$&$K$J$j$^$7$?!#(B</p>
-
- <ul>
- <li><code>apr_pool_t *p</code></li>
- <li><code>apr_pool_t *plog</code></li>
- <li><code>apr_pool_t *ptemp</code></li>
- <li><code>server_rec *s</code></li>
- </ul>
- </section>
-
- <section id="datatypes"><title>$B%G!<%?7?(B</title>
- <p>$B%G!<%?7?$N$[$H$s$I$O(B <a
- href="http://apr.apache.org/">APR</a> $B$K0\$5$l$^$7$?!#$D$^$j!"(B
- $B$$$/$D$+$NL>A0$,A0=R$N$h$&$KJQ99$5$l$F$$$^$9!#(B
- $B;\$9$Y$-JQ99E@$N4JC1$J0lMw$r0J2<$K<($7$^$9!#(B</p>
-
- <ul>
- <li><code>pool</code> becomes <code>apr_pool_t</code></li>
- <li><code>table</code> becomes <code>apr_table_t</code></li>
- </ul>
- </section>
-</section>
-
-<section id="messy"><title>$B$b$C$HLq2p$JJQ99E@!D(B</title>
-
- <section id="register-hooks"><title>$B%U%C%/$NEPO?(B</title>
- <p>$B?7$7$$%"!<%-%F%/%A%c$G$O:n@.$7$?4X?t$r8F$S=P$9$N$K(B
- $B0lO"$N%U%C%/$r;HMQ$7$^$9!#$3$N%U%C%/$O!"?7$7$$4X?t(B
- <code>static void register_hooks(void)</code> $B$r;H$C$FEPO?$9$k$h$&!"(B
- $B%b%8%e!<%k$K=q$-B-$5$J$/$F$O$J$j$^$;$s!#(B
- $B$3$N4X?t$O!"$J$K$r$9$Y$-$+0lC6M}2r$7$F$7$^$($P!"(B
- $B==J,$K$o$+$j$d$9$$$b$N$G$9!#(B
- $B%j%/%(%9%H$N=hM}$N$"$k%9%F!<%8$G8F$S=P$5$J$/$F$O$J$i$J$$(B
- $B4X?t$OEPO?$9$kI,MW$,$"$j$^$9!#%O%s%I%i$OEPO?$9$kI,MW$O$"$j$^$;$s!#(B
- $B4X?t$rEPO?$G$-$k%U%'!<%:$O$?$/$5$s$"$j$^$9!#(B
- $B$=$l$>$l$N%U%'!<%:$G!"4X?t$r8F$S=P$9AjBPE*$J=gHV$O!"(B
- $B$+$J$j$NDxEY@)8f$G$-$^$9!#(B</p>
-
- <p>$B0J2<$O!"(B<code>mod_mmap_static</code> $B$KDI2C$7$?%3!<%I$G$9(B:</p>
-
- <example><pre>
-static void register_hooks(void)
-{
- static const char * const aszPre[]={ "http_core.c",NULL };
- ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
- ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
-};</pre>
- </example>
-
- <p>$B$3$3$G$O8F$S$@$9$Y$-Fs$D$N4X?t$rEPO?$7$F$$$^$9!#0l$D$O(B
- <code>post_config</code> $B%9%F!<%8MQ(B ($B$[$H$s$I$9$Y$F$N%b%8%e!<%k(B
- $B$O$3$l$,I,MW$G$9(B) $B$G!"$b$&0l$D$O(B <code>translate_name</code> $B%U%'!<%:MQ$G$9!#(B
- $B$=$l$>$l$N4X?t$OL>A0$O0c$&$1$l$I$b7A<0$OF1$8$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$=$l$G$O!"7A<0$O$I$N$h$&$K$J$C$F$$$k$G$7$g$&$+(B?</p>
-
- <example>
- ap_hook_<var>phase_name</var>(<var>function_name</var>,
- <var>predecessors</var>, <var>successors</var>, <var>position</var>);
- </example>
-
- <p>$B;0$D$N0LCV$,Dj5A$5$l$F$$$^$9!D(B</p>
-
- <ul>
- <li><code>HOOK_FIRST</code></li>
- <li><code>HOOK_MIDDLE</code></li>
- <li><code>HOOK_LAST</code></li>
- </ul>
-
- <p>$B0LCV$rDj5A$9$k$K$O!">e5-$N!V0LCV!W$r;XDj$7!"(B
- $B=$>~;R$G$"$k!V@h9T!W$H!V8e9T!W$G<j$r2C$($^$9!#(B
- $B!V@h9T!W!V8e9T!W$O!"8F$P$l$k$Y$-4X?t$N%j%9%H$G$9!#(B
- $B!V@h9T!W$O4X?t$N<B9TA0$K8F$P$l$k$b$N$G!"(B
- $B!V8e9T!W$O<B9T8e$K8F$P$l$k$b$N$G$9!#(B</p>
-
- <p><code>mod_mmap_static</code> $B$N>l9g!"(B<code>post_config</code>
- $B%9%F!<%8$G$OI,MW$"$j$^$;$s$,!"(B
- <code>mmap_static_xlat</code> $B$,(B core $B%b%8%e!<%k$,L>A0$NJQ49$r<B9T$7$?8e$K(B
- <strong>$B8F$P$l$J$1$l$P$J$j$^$;$s(B</strong>$B!#(B
- $B$=$3$G(B aszPre $B$r;H$C$F(B <code>HOOK_LAST</code> $B$N=$>~;R$rDj5A$7$F$$$^$9!#(B</p>
- </section>
-
- <section id="moddef"><title>$B%b%8%e!<%k$NDj5A(B</title>
- <p>$B%b%8%e!<%k$NDj5A$r:n@.$9$k:]$KCm0U$7$J$1$l$P$J$i$J$$(B
- $B%9%F!<%8$N?t$O7c8:$7$F$$$^$9!#8E$$Dj5A$O<!$N$h$&$K$J$C$F$$$^$7$?!#(B</p>
-
- <example><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD_MODULE_STUFF,
- /* initializer */
- /* dir config creater */
- /* dir merger --- default is to override */
- /* server config */
- /* merge server config */
- /* command handlers */
- /* handlers */
- /* filename translation */
- /* check_user_id */
- /* check auth */
- /* check access */
- /* type_checker */
- /* fixups */
- /* logger */
- /* header parser */
- /* child_init */
- /* child_exit */
- /* post read-request */
-};</pre>
- </example>
-
- <p>$B?7$7$$9=B$BN$O$H$C$F$b%7%s%W%k$G$9!D(B</p>
- <example><pre>
-module MODULE_VAR_EXPORT <var>module_name</var>_module =
-{
- STANDARD20_MODULE_STUFF,
- /* create per-directory config structures */
- /* merge per-directory config structures */
- /* create per-server config structures */
- /* merge per-server config structures */
- /* command handlers */
- /* handlers */
- /* register hooks */
-};</pre>
- </example>
-
- <p>$B$3$N$&$A$N$$$/$D$+$O8E$$$b$N$+$i?7$7$$$b$N$KD>@\FI$_BX$($i$l$k$b$N$G!"(B
- $B$$$/$D$+$O$=$&$G$O$"$j$^$;$s!#$I$&$9$l$P$$$$$N$+$rMWLs$7$F$_$^$9!#(B</p>
-
- <p>$BD>@\FI$_BX$($i$l$k%9%F!<%8(B:</p>
-
- <dl>
- <dt><code>/* $B%G%#%l%/%H%j@_Dj:n@.4X?t(B */</code></dt>
- <dd><code>/* $B%G%#%l%/%H%jKh@_Dj9=B$BN:n@.(B */</code></dd>
-
- <dt><code>/* $B%5!<%P@_Dj:n@.4X?t(B */</code></dt>
- <dd><code>/* $B%5!<%PKh@_Dj9=B$BN:n@.(B */</code></dd>
-
- <dt><code>/* $B%G%#%l%/%H%j@_Dj%^!<%84X?t(B */</code></dt>
- <dd><code>/* $B%G%#%l%/%H%jKh@_Dj9=B$BN%^!<%8(B */</code></dd>
-
- <dt><code>/* $B%5!<%P@_Dj%^!<%84X?t(B */</code></dt>
- <dd><code>/* $B%5!<%PKh@_Dj9=B$BN:n@.%^!<%8(B */</code></dd>
-
- <dt><code>/* $B%3%^%s%I!&%F!<%V%k(B */</code></dt>
- <dd><code>/* $B%3%^%s%I(B apr_table_t */</code></dd>
-
- <dt><code>/* $B%O%s%I%i(B */</code></dt>
- <dd><code>/* $B%O%s%I%i(B */</code></dd>
- </dl>
-
- <p>$B8E$$4X?t$N;D$j$N$b$N$O%U%C%/$H$7$FEPO?$5$l$k$Y$-$G$9!#(B
- $B8=;~E@$G<!$N$h$&$J%U%C%/!&%9%F!<%8$,Dj5A$5$l$F$$$^$9!D(B</p>
-
- <dl>
- <dt><code>ap_hook_post_config</code></dt>
- <dd>($B0JA0$N(B <code>_init</code> $B%k!<%A%s$,EPO?$5$l$k$Y$->l=j$G$9(B)</dd>
-
- <dt><code>ap_hook_http_method</code></dt>
- <dd>($B%j%/%(%9%H$+$i(B HTTP $B%a%=%C%I$r<hF@$7$^$9(B ($B8_49MQ(B))</dd>
-
- <dt><code>ap_hook_open_logs</code></dt>
- <dd>($BFCDj$N%m%0$N%*!<%W%s(B)</dd>
-
- <dt><code>ap_hook_auth_checker</code></dt>
- <dd>($B%j%=!<%9$,8"8B$rI,MW$H$9$k$+$I$&$+$N3NG'(B)</dd>
-
- <dt><code>ap_hook_access_checker</code></dt>
- <dd>($B%b%8%e!<%k8GM-$N@)Ls$N3NG'(B)</dd>
-
- <dt><code>ap_hook_check_user_id</code></dt>
- <dd>($B%f!<%6(B ID $B$H%Q%9%o!<%I$N3NG'(B)</dd>
-
- <dt><code>ap_hook_default_port</code></dt>
- <dd>($B%5!<%P$N%G%U%)%k%H!&%]!<%H$N<hF@(B)</dd>
-
- <dt><code>ap_hook_pre_connection</code></dt>
- <dd>($B=hM}$ND>A0$KI,MW$J$3$H$r<B9T!#$?$@$7(B accept $BD>8e$K8F$P$l$k(B)</dd>
-
- <dt><code>ap_hook_process_connection</code></dt>
- <dd>($B%W%m%H%3%k$N=hM}(B)</dd>
-
- <dt><code>ap_hook_child_init</code></dt>
- <dd>($B;R%W%m%;%k5/F0D>8e(B)</dd>
-
- <dt><code>ap_hook_create_request</code></dt>
- <dd>(??)</dd>
-
- <dt><code>ap_hook_fixups</code></dt>
- <dd>($B1~EzFbMF$N@8@.$rJQ99$9$k%i%9%H!&%A%c%s%9(B)</dd>
-
- <dt><code>ap_hook_handler</code></dt>
- <dd>($B1~EzFbMF$N@8@.(B)</dd>
-
- <dt><code>ap_hook_header_parser</code></dt>
- <dd>($B%b%8%e!<%k$K%X%C%@$N>H2q$r$5$;$k!#$[$H$s$I$N%b%8%e!<%k$G$O;H$o$l$^$;$s!#(Bpost_read_request $B$r;H$$$^$9(B)</dd>
-
- <dt><code>ap_hook_insert_filter</code></dt>
- <dd>($B%U%#%k%?!&%A%'%$%s$K%U%#%k%?$rA^F~(B)</dd>
-
- <dt><code>ap_hook_log_transaction</code></dt>
- <dd>($B%j%/%(%9%H$K$D$$$F$N>pJs$r5-O?$9$k(B)</dd>
-
- <dt><code>ap_hook_optional_fn_retrieve</code></dt>
- <dd>($B%*%W%7%g%s$H$7$FEPO?$5$l$?4X?t$N<hF@(B)</dd>
-
- <dt><code>ap_hook_post_read_request</code></dt>
- <dd>($B%j%/%(%9%H$rFI$_$3$s$@8e!"B>$N%U%'!<%:$NA0$K8F$P$l$k(B)</dd>
-
- <dt><code>ap_hook_quick_handler</code></dt>
- <dd>$B%j%/%(%9%H$N=hM}$,;O$^$kA0$K8F$P$l$k!#%-%c%C%7%e%b%8%e!<%k$,(B
- $B;HMQ$7$F$$$k(B</dd>
-
- <dt><code>ap_hook_translate_name</code></dt>
- <dd>(URI $B$r%U%!%$%kL>$KJQ49$9$k(B)</dd>
-
- <dt><code>ap_hook_type_checker</code></dt>
- <dd>($BJ8=q7?$N7hDj$H@_Dj!#$"$k$$$O$=$NJRJ}(B)</dd>
- </dl>
- </section>
-</section>
-</manualpage>
diff --git a/docs/manual/developer/modules.xml.meta b/docs/manual/developer/modules.xml.meta
deleted file mode 100644
index 850ae5ce82..0000000000
--- a/docs/manual/developer/modules.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>modules</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/request.html b/docs/manual/developer/request.html
deleted file mode 100644
index 547707246a..0000000000
--- a/docs/manual/developer/request.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: request.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/request.html.en b/docs/manual/developer/request.html.en
deleted file mode 100644
index 1fb443588a..0000000000
--- a/docs/manual/developer/request.html.en
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Request Processing in Apache 2.0 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Request Processing in Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/request.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <div class="warning"><h3>Warning</h3>
- <p>Warning - this is a first (fast) draft that needs further
- revision!</p>
- </div>
-
- <p>Several changes in Apache 2.0 affect the internal request
- processing mechanics. Module authors need to be aware of these
- changes so they may take advantage of the optimizations and
- security enhancements.</p>
-
- <p>The first major change is to the subrequest and redirect
- mechanisms. There were a number of different code paths in
- Apache 1.3 to attempt to optimize subrequest or redirect
- behavior. As patches were introduced to 2.0, these
- optimizations (and the server behavior) were quickly broken due
- to this duplication of code. All duplicate code has been folded
- back into <code>ap_process_internal_request()</code> to prevent
- the code from falling out of sync again.</p>
-
- <p>This means that much of the existing code was 'unoptimized'.
- It is the Apache HTTP Project's first goal to create a robust
- and correct implementation of the HTTP server RFC. Additional
- goals include security, scalability and optimization. New
- methods were sought to optimize the server (beyond the
- performance of Apache 1.3) without introducing fragile or
- insecure code.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#processing">The Request Processing Cycle</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#parsing">The Request Parsing Phase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">The Security Phase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#preparation">The Preparation Phase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#handler">The Handler Phase</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="processing" id="processing">The Request Processing Cycle</a></h2>
- <p>All requests pass through <code>ap_process_request_internal()</code>
- in <code>request.c</code>, including subrequests and redirects. If a module
- doesn't pass generated requests through this code, the author is cautioned
- that the module may be broken by future changes to request
- processing.</p>
-
- <p>To streamline requests, the module author can take advantage
- of the hooks offered to drop out of the request cycle early, or
- to bypass core Apache hooks which are irrelevant (and costly in
- terms of CPU.)</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="parsing" id="parsing">The Request Parsing Phase</a></h2>
- <h3><a name="unescape" id="unescape">Unescapes the URL</a></h3>
- <p>The request's <code>parsed_uri</code> path is unescaped, once and only
- once, at the beginning of internal request processing.</p>
-
- <p>This step is bypassed if the proxyreq flag is set, or the
- <code>parsed_uri.path</code> element is unset. The module has no further
- control of this one-time unescape operation, either failing to
- unescape or multiply unescaping the URL leads to security
- reprecussions.</p>
-
-
- <h3><a name="strip" id="strip">Strips Parent and This Elements from the
- URI</a></h3>
- <p>All <code>/../</code> and <code>/./</code> elements are
- removed by <code>ap_getparents()</code>. This helps to ensure
- the path is (nearly) absolute before the request processing
- continues.</p>
-
- <p>This step cannot be bypassed.</p>
-
-
- <h3><a name="inital-location-walk" id="inital-location-walk">Initial URI Location Walk</a></h3>
- <p>Every request is subject to an
- <code>ap_location_walk()</code> call. This ensures that
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> sections
- are consistently enforced for all requests. If the request is an internal
- redirect or a sub-request, it may borrow some or all of the processing
- from the previous or parent request's ap_location_walk, so this step
- is generally very efficient after processing the main request.</p>
-
-
- <h3><a name="translate_name" id="translate_name">translate_name</a></h3>
- <p>Modules can determine the file name, or alter the given URI
- in this step. For example, <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> will
- translate the URI's path into the configured virtual host,
- <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> will translate the path to an alias path,
- and if the request falls back on the core, the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> is prepended to the request resource.</p>
-
- <p>If all modules <code>DECLINE</code> this phase, an error 500 is
- returned to the browser, and a "couldn't translate name" error is logged
- automatically.</p>
-
-
- <h3><a name="map_to_storage" id="map_to_storage">Hook: map_to_storage</a></h3>
- <p>After the file or correct URI was determined, the
- appropriate per-dir configurations are merged together. For
- example, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> compares and merges the appropriate
- <code class="directive"><a href="../mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> sections.
- If the URI is nothing more than a local (non-proxy) <code>TRACE</code>
- request, the core handles the request and returns <code>DONE</code>.
- If no module answers this hook with <code>OK</code> or <code>DONE</code>,
- the core will run the request filename against the <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> and <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code> sections. If the request
- 'filename' isn't an absolute, legal filename, a note is set for
- later termination.</p>
-
-
- <h3><a name="location-walk" id="location-walk">URI Location Walk</a></h3>
- <p>Every request is hardened by a second
- <code>ap_location_walk()</code> call. This reassures that a
- translated request is still subjected to the configured
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> sections.
- The request again borrows some or all of the processing from its previous
- <code>location_walk</code> above, so this step is almost always very
- efficient unless the translated URI mapped to a substantially different
- path or Virtual Host.</p>
-
-
- <h3><a name="header_parser" id="header_parser">Hook: header_parser</a></h3>
- <p>The main request then parses the client's headers. This
- prepares the remaining request processing steps to better serve
- the client's request.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">The Security Phase</a></h2>
- <p>Needs Documentation. Code is:</p>
-
- <div class="example"><pre>
-switch (ap_satisfies(r)) {
-case SATISFY_ALL:
-case SATISFY_NOSPEC:
- if ((access_status = ap_run_access_checker(r)) != 0) {
- return decl_die(access_status, "check access", r);
- }
-
- if (ap_some_auth_required(r)) {
- if (((access_status = ap_run_check_user_id(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check user. No user file?"
- : "perform authentication. AuthType not set!",
- r);
- }
-
- if (((access_status = ap_run_auth_checker(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check access. No groups file?"
- : "perform authentication. AuthType not set!",
- r);
- }
- }
- break;
-
-case SATISFY_ANY:
- if (((access_status = ap_run_access_checker(r)) != 0)) {
- if (!ap_some_auth_required(r)) {
- return decl_die(access_status, "check access", r);
- }
-
- if (((access_status = ap_run_check_user_id(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check user. No user file?"
- : "perform authentication. AuthType not set!",
- r);
- }
-
- if (((access_status = ap_run_auth_checker(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check access. No groups file?"
- : "perform authentication. AuthType not set!",
- r);
- }
- }
- break;
-}</pre></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="preparation" id="preparation">The Preparation Phase</a></h2>
- <h3><a name="type_checker" id="type_checker">Hook: type_checker</a></h3>
- <p>The modules have an opportunity to test the URI or filename
- against the target resource, and set mime information for the
- request. Both <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> and
- <code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code> use this phase to compare the file
- name or contents against the administrator's configuration and set the
- content type, language, character set and request handler. Some modules
- may set up their filters or other request handling parameters at this
- time.</p>
-
- <p>If all modules <code>DECLINE</code> this phase, an error 500 is
- returned to the browser, and a "couldn't find types" error is logged
- automatically.</p>
-
-
- <h3><a name="fixups" id="fixups">Hook: fixups</a></h3>
- <p>Many modules are 'trounced' by some phase above. The fixups
- phase is used by modules to 'reassert' their ownership or force
- the request's fields to their appropriate values. It isn't
- always the cleanest mechanism, but occasionally it's the only
- option.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="handler" id="handler">The Handler Phase</a></h2>
- <p>This phase is <strong>not</strong> part of the processing in
- <code>ap_process_request_internal()</code>. Many
- modules prepare one or more subrequests prior to creating any
- content at all. After the core, or a module calls
- <code>ap_process_request_internal()</code> it then calls
- <code>ap_invoke_handler()</code> to generate the request.</p>
-
- <h3><a name="insert_filter" id="insert_filter">Hook: insert_filter</a></h3>
- <p>Modules that transform the content in some way can insert
- their values and override existing filters, such that if the
- user configured a more advanced filter out-of-order, then the
- module can move its order as need be. There is no result code,
- so actions in this hook better be trusted to always succeed.</p>
-
-
- <h3><a name="hook_handler" id="hook_handler">Hook: handler</a></h3>
- <p>The module finally has a chance to serve the request in its
- handler hook. Note that not every prepared request is sent to
- the handler hook. Many modules, such as <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>,
- will create subrequests for a given URI, and then never serve the
- subrequest, but simply lists it for the user. Remember not to
- put required teardown from the hooks above into this module,
- but register pool cleanups against the request pool to free
- resources as required.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/request.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/request.xml b/docs/manual/developer/request.xml
deleted file mode 100644
index 8484ea6b72..0000000000
--- a/docs/manual/developer/request.xml
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="request.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Request Processing in Apache 2.0</title>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>Warning - this is a first (fast) draft that needs further
- revision!</p>
- </note>
-
- <p>Several changes in Apache 2.0 affect the internal request
- processing mechanics. Module authors need to be aware of these
- changes so they may take advantage of the optimizations and
- security enhancements.</p>
-
- <p>The first major change is to the subrequest and redirect
- mechanisms. There were a number of different code paths in
- Apache 1.3 to attempt to optimize subrequest or redirect
- behavior. As patches were introduced to 2.0, these
- optimizations (and the server behavior) were quickly broken due
- to this duplication of code. All duplicate code has been folded
- back into <code>ap_process_internal_request()</code> to prevent
- the code from falling out of sync again.</p>
-
- <p>This means that much of the existing code was 'unoptimized'.
- It is the Apache HTTP Project's first goal to create a robust
- and correct implementation of the HTTP server RFC. Additional
- goals include security, scalability and optimization. New
- methods were sought to optimize the server (beyond the
- performance of Apache 1.3) without introducing fragile or
- insecure code.</p>
-</summary>
-
-<section id="processing"><title>The Request Processing Cycle</title>
- <p>All requests pass through <code>ap_process_request_internal()</code>
- in <code>request.c</code>, including subrequests and redirects. If a module
- doesn't pass generated requests through this code, the author is cautioned
- that the module may be broken by future changes to request
- processing.</p>
-
- <p>To streamline requests, the module author can take advantage
- of the hooks offered to drop out of the request cycle early, or
- to bypass core Apache hooks which are irrelevant (and costly in
- terms of CPU.)</p>
-</section>
-
-<section id="parsing"><title>The Request Parsing Phase</title>
- <section id="unescape"><title>Unescapes the URL</title>
- <p>The request's <code>parsed_uri</code> path is unescaped, once and only
- once, at the beginning of internal request processing.</p>
-
- <p>This step is bypassed if the proxyreq flag is set, or the
- <code>parsed_uri.path</code> element is unset. The module has no further
- control of this one-time unescape operation, either failing to
- unescape or multiply unescaping the URL leads to security
- reprecussions.</p>
- </section>
-
- <section id="strip"><title>Strips Parent and This Elements from the
- URI</title>
- <p>All <code>/../</code> and <code>/./</code> elements are
- removed by <code>ap_getparents()</code>. This helps to ensure
- the path is (nearly) absolute before the request processing
- continues.</p>
-
- <p>This step cannot be bypassed.</p>
- </section>
-
- <section id="inital-location-walk"><title>Initial URI Location Walk</title>
- <p>Every request is subject to an
- <code>ap_location_walk()</code> call. This ensures that
- <directive type="section" module="core">Location</directive> sections
- are consistently enforced for all requests. If the request is an internal
- redirect or a sub-request, it may borrow some or all of the processing
- from the previous or parent request's ap_location_walk, so this step
- is generally very efficient after processing the main request.</p>
- </section>
-
- <section id="translate_name"><title>translate_name</title>
- <p>Modules can determine the file name, or alter the given URI
- in this step. For example, <module>mod_vhost_alias</module> will
- translate the URI's path into the configured virtual host,
- <module>mod_alias</module> will translate the path to an alias path,
- and if the request falls back on the core, the <directive module="core"
- >DocumentRoot</directive> is prepended to the request resource.</p>
-
- <p>If all modules <code>DECLINE</code> this phase, an error 500 is
- returned to the browser, and a "couldn't translate name" error is logged
- automatically.</p>
- </section>
-
- <section id="map_to_storage"><title>Hook: map_to_storage</title>
- <p>After the file or correct URI was determined, the
- appropriate per-dir configurations are merged together. For
- example, <module>mod_proxy</module> compares and merges the appropriate
- <directive module="mod_proxy" type="section">Proxy</directive> sections.
- If the URI is nothing more than a local (non-proxy) <code>TRACE</code>
- request, the core handles the request and returns <code>DONE</code>.
- If no module answers this hook with <code>OK</code> or <code>DONE</code>,
- the core will run the request filename against the <directive
- module="core" type="section">Directory</directive> and <directive
- module="core" type="section">Files</directive> sections. If the request
- 'filename' isn't an absolute, legal filename, a note is set for
- later termination.</p>
- </section>
-
- <section id="location-walk"><title>URI Location Walk</title>
- <p>Every request is hardened by a second
- <code>ap_location_walk()</code> call. This reassures that a
- translated request is still subjected to the configured
- <directive module="core" type="section">Location</directive> sections.
- The request again borrows some or all of the processing from its previous
- <code>location_walk</code> above, so this step is almost always very
- efficient unless the translated URI mapped to a substantially different
- path or Virtual Host.</p>
- </section>
-
- <section id="header_parser"><title>Hook: header_parser</title>
- <p>The main request then parses the client's headers. This
- prepares the remaining request processing steps to better serve
- the client's request.</p>
- </section>
-</section>
-
-<section id="security"><title>The Security Phase</title>
- <p>Needs Documentation. Code is:</p>
-
- <example><pre>
-switch (ap_satisfies(r)) {
-case SATISFY_ALL:
-case SATISFY_NOSPEC:
- if ((access_status = ap_run_access_checker(r)) != 0) {
- return decl_die(access_status, "check access", r);
- }
-
- if (ap_some_auth_required(r)) {
- if (((access_status = ap_run_check_user_id(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check user. No user file?"
- : "perform authentication. AuthType not set!",
- r);
- }
-
- if (((access_status = ap_run_auth_checker(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check access. No groups file?"
- : "perform authentication. AuthType not set!",
- r);
- }
- }
- break;
-
-case SATISFY_ANY:
- if (((access_status = ap_run_access_checker(r)) != 0)) {
- if (!ap_some_auth_required(r)) {
- return decl_die(access_status, "check access", r);
- }
-
- if (((access_status = ap_run_check_user_id(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check user. No user file?"
- : "perform authentication. AuthType not set!",
- r);
- }
-
- if (((access_status = ap_run_auth_checker(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check access. No groups file?"
- : "perform authentication. AuthType not set!",
- r);
- }
- }
- break;
-}</pre>
- </example>
-</section>
-
-<section id="preparation"><title>The Preparation Phase</title>
- <section id="type_checker"><title>Hook: type_checker</title>
- <p>The modules have an opportunity to test the URI or filename
- against the target resource, and set mime information for the
- request. Both <module>mod_mime</module> and
- <module>mod_mime_magic</module> use this phase to compare the file
- name or contents against the administrator's configuration and set the
- content type, language, character set and request handler. Some modules
- may set up their filters or other request handling parameters at this
- time.</p>
-
- <p>If all modules <code>DECLINE</code> this phase, an error 500 is
- returned to the browser, and a "couldn't find types" error is logged
- automatically.</p>
- </section>
-
- <section id="fixups"><title>Hook: fixups</title>
- <p>Many modules are 'trounced' by some phase above. The fixups
- phase is used by modules to 'reassert' their ownership or force
- the request's fields to their appropriate values. It isn't
- always the cleanest mechanism, but occasionally it's the only
- option.</p>
- </section>
-</section>
-
-<section id="handler"><title>The Handler Phase</title>
- <p>This phase is <strong>not</strong> part of the processing in
- <code>ap_process_request_internal()</code>. Many
- modules prepare one or more subrequests prior to creating any
- content at all. After the core, or a module calls
- <code>ap_process_request_internal()</code> it then calls
- <code>ap_invoke_handler()</code> to generate the request.</p>
-
- <section id="insert_filter"><title>Hook: insert_filter</title>
- <p>Modules that transform the content in some way can insert
- their values and override existing filters, such that if the
- user configured a more advanced filter out-of-order, then the
- module can move its order as need be. There is no result code,
- so actions in this hook better be trusted to always succeed.</p>
- </section>
-
- <section id="hook_handler"><title>Hook: handler</title>
- <p>The module finally has a chance to serve the request in its
- handler hook. Note that not every prepared request is sent to
- the handler hook. Many modules, such as <module>mod_autoindex</module>,
- will create subrequests for a given URI, and then never serve the
- subrequest, but simply lists it for the user. Remember not to
- put required teardown from the hooks above into this module,
- but register pool cleanups against the request pool to free
- resources as required.</p>
- </section>
-</section>
-</manualpage>
-
diff --git a/docs/manual/developer/request.xml.meta b/docs/manual/developer/request.xml.meta
deleted file mode 100644
index 744d10fee5..0000000000
--- a/docs/manual/developer/request.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>request</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/developer/thread_safety.html b/docs/manual/developer/thread_safety.html
deleted file mode 100644
index 02f067e7c3..0000000000
--- a/docs/manual/developer/thread_safety.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: thread_safety.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/developer/thread_safety.html.en b/docs/manual/developer/thread_safety.html.en
deleted file mode 100644
index b5a2033450..0000000000
--- a/docs/manual/developer/thread_safety.html.en
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache 2.0 Thread Safety Issues - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Developer Documentation</a></div><div id="page-content"><div id="preamble"><h1>Apache 2.0 Thread Safety Issues</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/developer/thread_safety.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <p>When using any of the threaded mpms in Apache 2.0 it is important
- that every function called from Apache be thread safe. When linking in 3rd
- party extensions it can be difficult to determine whether the resulting
- server will be thread safe. Casual testing generally won't tell you this
- either as thread safety problems can lead to subtle race conditons that
- may only show up in certain conditions under heavy load.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#variables">Global and static variables</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errno">errno</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#functions">Common standard troublesome functions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#commonlibs">Common 3rd Party Libraries</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#liblist">Library List</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="variables" id="variables">Global and static variables</a></h2>
- <p>When writing your module or when trying to determine if a module or
- 3rd party library is thread safe there are some common things to keep in
- mind.</p>
-
- <p>First, you need to recognize that in a threaded model each individual
- thread has its own program counter, stack and registers. Local variables
- live on the stack, so those are fine. You need to watch out for any
- static or global variables. This doesn't mean that you are absolutely not
- allowed to use static or global variables. There are times when you
- actually want something to affect all threads, but generally you need to
- avoid using them if you want your code to be thread safe.</p>
-
- <p>In the case where you have a global variable that needs to be global and
- accessed by all threads, be very careful when you update it. If, for
- example, it is an incrementing counter, you need to atomically increment
- it to avoid race conditions with other threads. You do this using a mutex
- (mutual exclusion). Lock the mutex, read the current value, increment it
- and write it back and then unlock the mutex. Any other thread that wants
- to modify the value has to first check the mutex and block until it is
- cleared.</p>
-
- <p>If you are using <a href="http://apr.apache.org/">APR</a>, have a look
- at the <code>apr_atomic_<var>*</var></code> functions and the
- <code>apr_thread_mutex_<var>*</var></code> functions.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errno" id="errno">errno</a></h2>
- <p>This is a common global variable that holds the error number of the
- last error that occurred. If one thread calls a low-level function that
- sets errno and then another thread checks it, we are bleeding error
- numbers from one thread into another. To solve this, make sure your
- module or library defines <code>_REENTRANT</code> or is compiled with
- <code>-D_REENTRANT</code>. This will make errno a per-thread variable
- and should hopefully be transparent to the code. It does this by doing
- something like this:</p>
-
- <div class="example"><p><code>
- #define errno (*(__errno_location()))
- </code></p></div>
-
- <p>which means that accessing errno will call
- <code>__errno_location()</code> which is provided by the libc. Setting
- <code>_REENTRANT</code> also forces redefinition of some other functions
- to their <code><var>*</var>_r</code> equivalents and sometimes changes
- the common <code>getc</code>/<code>putc</code> macros into safer function
- calls. Check your libc documentation for specifics. Instead of, or in
- addition to <code>_REENTRANT</code> the symbols that may affect this are
- <code>_POSIX_C_SOURCE</code>, <code>_THREAD_SAFE</code>,
- <code>_SVID_SOURCE</code>, and <code>_BSD_SOURCE</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="functions" id="functions">Common standard troublesome functions</a></h2>
- <p>Not only do things have to be thread safe, but they also have to be
- reentrant. <code>strtok()</code> is an obvious one. You call it the first
- time with your delimiter which it then remembers and on each subsequent
- call it returns the next token. Obviously if multiple threads are
- calling it you will have a problem. Most systems have a reentrant version
- of of the function called <code>strtok_r()</code> where you pass in an
- extra argument which contains an allocated <code>char *</code> which the
- function will use instead of its own static storage for maintaining
- the tokenizing state. If you are using <a href="http://apr.apache.org/">APR</a> you can use <code>apr_strtok()</code>.</p>
-
- <p><code>crypt()</code> is another function that tends to not be reentrant,
- so if you run across calls to that function in a library, watch out. On
- some systems it is reentrant though, so it is not always a problem. If
- your system has <code>crypt_r()</code> chances are you should be using
- that, or if possible simply avoid the whole mess by using md5 instead.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="commonlibs" id="commonlibs">Common 3rd Party Libraries</a></h2>
- <p>The following is a list of common libraries that are used by 3rd party
- Apache modules. You can check to see if your module is using a potentially
- unsafe library by using tools such as <code>ldd(1)</code> and
- <code>nm(1)</code>. For <a href="http://www.php.net/">PHP</a>, for example,
- try this:</p>
-
- <div class="example"><p><code>
- % ldd libphp4.so<br />
- libsablot.so.0 =&gt; /usr/local/lib/libsablot.so.0 (0x401f6000)<br />
- libexpat.so.0 =&gt; /usr/lib/libexpat.so.0 (0x402da000)<br />
- libsnmp.so.0 =&gt; /usr/lib/libsnmp.so.0 (0x402f9000)<br />
- libpdf.so.1 =&gt; /usr/local/lib/libpdf.so.1 (0x40353000)<br />
- libz.so.1 =&gt; /usr/lib/libz.so.1 (0x403e2000)<br />
- libpng.so.2 =&gt; /usr/lib/libpng.so.2 (0x403f0000)<br />
- libmysqlclient.so.11 =&gt; /usr/lib/libmysqlclient.so.11 (0x40411000)<br />
- libming.so =&gt; /usr/lib/libming.so (0x40449000)<br />
- libm.so.6 =&gt; /lib/libm.so.6 (0x40487000)<br />
- libfreetype.so.6 =&gt; /usr/lib/libfreetype.so.6 (0x404a8000)<br />
- libjpeg.so.62 =&gt; /usr/lib/libjpeg.so.62 (0x404e7000)<br />
- libcrypt.so.1 =&gt; /lib/libcrypt.so.1 (0x40505000)<br />
- libssl.so.2 =&gt; /lib/libssl.so.2 (0x40532000)<br />
- libcrypto.so.2 =&gt; /lib/libcrypto.so.2 (0x40560000)<br />
- libresolv.so.2 =&gt; /lib/libresolv.so.2 (0x40624000)<br />
- libdl.so.2 =&gt; /lib/libdl.so.2 (0x40634000)<br />
- libnsl.so.1 =&gt; /lib/libnsl.so.1 (0x40637000)<br />
- libc.so.6 =&gt; /lib/libc.so.6 (0x4064b000)<br />
- /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x80000000)
- </code></p></div>
-
- <p>In addition to these libraries you will need to have a look at any
- libraries linked statically into the module. You can use <code>nm(1)</code>
- to look for individual symbols in the module.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="liblist" id="liblist">Library List</a></h2>
- <p>Please drop a note to <a href="http://httpd.apache.org/lists.html#http-dev">dev@httpd.apache.org</a>
- if you have additions or corrections to this list.</p>
-
- <table class="bordered"><tr class="header"><th>Library</th><th>Version</th><th>Thread Safe?</th><th>Notes</th></tr>
-<tr><td><a href="http://aspell.sourceforge.net/">ASpell/PSpell</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://www.sleepycat.com/">Berkeley DB</a></td>
- <td>3.x, 4.x</td>
- <td>Yes</td>
- <td>Be careful about sharing a connection across threads.</td></tr>
-<tr><td><a href="http://sources.redhat.com/bzip2/index.html">bzip2</a></td>
- <td> </td>
- <td>Yes</td>
- <td>Both low-level and high-level APIs are thread-safe. However,
- high-level API requires thread-safe access to errno.</td></tr>
-<tr class="odd"><td><a href="http://cr.yp.to/cdb.html">cdb</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://www.washington.edu/imap/">C-Client</a></td>
- <td> </td>
- <td>Perhaps</td>
- <td>c-client uses <code>strtok()</code> and
- <code>gethostbyname()</code> which are not thread-safe on most C
- library implementations. c-client's static data is meant to be shared
- across threads. If <code>strtok()</code> and
- <code>gethostbyname()</code> are thread-safe on your OS, c-client
- <em>may</em> be thread-safe.</td></tr>
-<tr class="odd"><td><a href="http://www.fastio.com/">cpdflib</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://www.ijg.org/files/">libcrypt</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://expat.sourceforge.net/">Expat</a></td>
- <td> </td>
- <td>Yes</td>
- <td>Need a separate parser instance per thread</td></tr>
-<tr><td><a href="http://www.freetds.org/">FreeTDS</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://www.freetype.org/">FreeType</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://www.boutell.com/gd/">GD 1.8.x</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://www.boutell.com/gd/">GD 2.0.x</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://www.gnu.org/software/gdbm/gdbm.html">gdbm</a></td>
- <td> </td>
- <td>No</td>
- <td>Errors returned via a static <code>gdbm_error</code>
- variable</td></tr>
-<tr class="odd"><td><a href="http://www.imagemagick.org/">ImageMagick</a></td>
- <td>5.2.2</td>
- <td>Yes</td>
- <td>ImageMagick docs claim it is thread safe since version 5.2.2 (see <a href="http://www.cise.ufl.edu/depot/www/ImageMagick/www/Changelog.html">Change log</a>).
- </td></tr>
-<tr><td><a href="http://www.enlightenment.org/pages/imlib2.html">Imlib2</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://www.ijg.org/files/">libjpeg</a></td>
- <td>v6b</td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://mysql.com">libmysqlclient</a></td>
- <td> </td>
- <td>Yes</td>
- <td>Use mysqlclient_r library variant to ensure thread-safety. For
- more information, please read <a href="http://www.mysql.com/doc/en/Threaded_clients.html">http://www.mysql.com/doc/en/Threaded_clients.html</a>.</td></tr>
-<tr class="odd"><td><a href="http://www.opaque.net/ming/">Ming</a></td>
- <td>0.2a</td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://net-snmp.sourceforge.net/">Net-SNMP</a></td>
- <td>5.0.x</td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://www.openldap.org/">OpenLDAP</a></td>
- <td>2.1.x</td>
- <td>Yes</td>
- <td>Use <code>ldap_r</code> library variant to ensure
- thread-safety.</td></tr>
-<tr><td><a href="http://www.openssl.org/">OpenSSL</a></td>
- <td>0.9.6g</td>
- <td>Yes</td>
- <td>Requires proper usage of <code>CRYPTO_num_locks</code>,
- <code>CRYPTO_set_locking_callback</code>,
- <code>CRYPTO_set_id_callback</code></td></tr>
-<tr class="odd"><td><a href="http://www.oracle.com/">liboci8 (Oracle 8+)</a></td>
- <td>8.x,9.x</td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://pdflib.com/">pdflib</a></td>
- <td>5.0.x</td>
- <td>Yes</td>
- <td>PDFLib docs claim it is thread safe; changes.txt indicates it
- has been partially thread-safe since V1.91: <a href="http://www.pdflib.com/products/pdflib/index.html">http://www.pdflib.com/products/pdflib/index.html</a>.</td></tr>
-<tr class="odd"><td><a href="http://www.libpng.org/pub/png/libpng.html">libpng</a></td>
- <td>1.0.x</td>
- <td>?</td>
- <td> </td></tr>
-<tr><td><a href="http://www.libpng.org/pub/png/libpng.html">libpng</a></td>
- <td>1.2.x</td>
- <td>?</td>
- <td> </td></tr>
-<tr class="odd"><td><a href="http://www.postgresql.org/idocs/index.php?libpq-threading.html">libpq (PostgreSQL)</a></td>
- <td>7.x</td>
- <td>Yes</td>
- <td>Don't share connections across threads and watch out for
- <code>crypt()</code> calls</td></tr>
-<tr><td><a href="http://www.gingerall.com/charlie/ga/xml/p_sab.xml">Sablotron</a></td>
- <td>0.95</td>
- <td>?</td>
- <td /></tr>
-<tr class="odd"><td><a href="http://www.gzip.org/zlib/">zlib</a></td>
- <td>1.1.4</td>
- <td>Yes</td>
- <td>Relies upon thread-safe zalloc and zfree functions Default is to
- use libc's calloc/free which are thread-safe.</td></tr>
-</table>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/developer/thread_safety.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/developer/thread_safety.xml b/docs/manual/developer/thread_safety.xml
deleted file mode 100644
index 24d94c63dc..0000000000
--- a/docs/manual/developer/thread_safety.xml
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="thread_safety.xml.meta">
-<parentdocument href="./">Developer Documentation</parentdocument>
-
-<title>Apache 2.0 Thread Safety Issues</title>
-
-<summary>
- <p>When using any of the threaded mpms in Apache 2.0 it is important
- that every function called from Apache be thread safe. When linking in 3rd
- party extensions it can be difficult to determine whether the resulting
- server will be thread safe. Casual testing generally won't tell you this
- either as thread safety problems can lead to subtle race conditons that
- may only show up in certain conditions under heavy load.</p>
-</summary>
-
-<section id="variables"><title>Global and static variables</title>
- <p>When writing your module or when trying to determine if a module or
- 3rd party library is thread safe there are some common things to keep in
- mind.</p>
-
- <p>First, you need to recognize that in a threaded model each individual
- thread has its own program counter, stack and registers. Local variables
- live on the stack, so those are fine. You need to watch out for any
- static or global variables. This doesn't mean that you are absolutely not
- allowed to use static or global variables. There are times when you
- actually want something to affect all threads, but generally you need to
- avoid using them if you want your code to be thread safe.</p>
-
- <p>In the case where you have a global variable that needs to be global and
- accessed by all threads, be very careful when you update it. If, for
- example, it is an incrementing counter, you need to atomically increment
- it to avoid race conditions with other threads. You do this using a mutex
- (mutual exclusion). Lock the mutex, read the current value, increment it
- and write it back and then unlock the mutex. Any other thread that wants
- to modify the value has to first check the mutex and block until it is
- cleared.</p>
-
- <p>If you are using <a href="http://apr.apache.org/">APR</a>, have a look
- at the <code>apr_atomic_<var>*</var></code> functions and the
- <code>apr_thread_mutex_<var>*</var></code> functions.</p>
- <!-- [would probably be a good idea to add an example here] -->
-</section>
-
-<section id="errno"><title>errno</title>
- <p>This is a common global variable that holds the error number of the
- last error that occurred. If one thread calls a low-level function that
- sets errno and then another thread checks it, we are bleeding error
- numbers from one thread into another. To solve this, make sure your
- module or library defines <code>_REENTRANT</code> or is compiled with
- <code>-D_REENTRANT</code>. This will make errno a per-thread variable
- and should hopefully be transparent to the code. It does this by doing
- something like this:</p>
-
- <example>
- #define errno (*(__errno_location()))
- </example>
-
- <p>which means that accessing errno will call
- <code>__errno_location()</code> which is provided by the libc. Setting
- <code>_REENTRANT</code> also forces redefinition of some other functions
- to their <code><var>*</var>_r</code> equivalents and sometimes changes
- the common <code>getc</code>/<code>putc</code> macros into safer function
- calls. Check your libc documentation for specifics. Instead of, or in
- addition to <code>_REENTRANT</code> the symbols that may affect this are
- <code>_POSIX_C_SOURCE</code>, <code>_THREAD_SAFE</code>,
- <code>_SVID_SOURCE</code>, and <code>_BSD_SOURCE</code>.</p>
-</section>
-
-<section id="functions"><title>Common standard troublesome functions</title>
- <p>Not only do things have to be thread safe, but they also have to be
- reentrant. <code>strtok()</code> is an obvious one. You call it the first
- time with your delimiter which it then remembers and on each subsequent
- call it returns the next token. Obviously if multiple threads are
- calling it you will have a problem. Most systems have a reentrant version
- of of the function called <code>strtok_r()</code> where you pass in an
- extra argument which contains an allocated <code>char *</code> which the
- function will use instead of its own static storage for maintaining
- the tokenizing state. If you are using <a href="http://apr.apache.org/"
- >APR</a> you can use <code>apr_strtok()</code>.</p>
-
- <p><code>crypt()</code> is another function that tends to not be reentrant,
- so if you run across calls to that function in a library, watch out. On
- some systems it is reentrant though, so it is not always a problem. If
- your system has <code>crypt_r()</code> chances are you should be using
- that, or if possible simply avoid the whole mess by using md5 instead.</p>
- <!-- [I don't see an apr_crypt() function.] -->
-</section>
-
-<section id="commonlibs"><title>Common 3rd Party Libraries</title>
- <p>The following is a list of common libraries that are used by 3rd party
- Apache modules. You can check to see if your module is using a potentially
- unsafe library by using tools such as <code>ldd(1)</code> and
- <code>nm(1)</code>. For <a href="http://www.php.net/">PHP</a>, for example,
- try this:</p>
-
- <example>
- % ldd libphp4.so<br />
- libsablot.so.0 => /usr/local/lib/libsablot.so.0 (0x401f6000)<br />
- libexpat.so.0 => /usr/lib/libexpat.so.0 (0x402da000)<br />
- libsnmp.so.0 => /usr/lib/libsnmp.so.0 (0x402f9000)<br />
- libpdf.so.1 => /usr/local/lib/libpdf.so.1 (0x40353000)<br />
- libz.so.1 => /usr/lib/libz.so.1 (0x403e2000)<br />
- libpng.so.2 => /usr/lib/libpng.so.2 (0x403f0000)<br />
- libmysqlclient.so.11 => /usr/lib/libmysqlclient.so.11 (0x40411000)<br />
- libming.so => /usr/lib/libming.so (0x40449000)<br />
- libm.so.6 => /lib/libm.so.6 (0x40487000)<br />
- libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x404a8000)<br />
- libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x404e7000)<br />
- libcrypt.so.1 => /lib/libcrypt.so.1 (0x40505000)<br />
- libssl.so.2 => /lib/libssl.so.2 (0x40532000)<br />
- libcrypto.so.2 => /lib/libcrypto.so.2 (0x40560000)<br />
- libresolv.so.2 => /lib/libresolv.so.2 (0x40624000)<br />
- libdl.so.2 => /lib/libdl.so.2 (0x40634000)<br />
- libnsl.so.1 => /lib/libnsl.so.1 (0x40637000)<br />
- libc.so.6 => /lib/libc.so.6 (0x4064b000)<br />
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
- </example>
-
- <p>In addition to these libraries you will need to have a look at any
- libraries linked statically into the module. You can use <code>nm(1)</code>
- to look for individual symbols in the module.</p>
-</section>
-
-<section id="liblist"><title>Library List</title>
- <p>Please drop a note to <a
- href="http://httpd.apache.org/lists.html#http-dev">dev@httpd.apache.org</a>
- if you have additions or corrections to this list.</p>
-
- <table style="zebra" border="1">
- <tr><th>Library</th><th>Version</th><th>Thread Safe?</th><th>Notes</th></tr>
- <tr><td><a href="http://aspell.sourceforge.net/">ASpell/PSpell</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.sleepycat.com/">Berkeley DB</a></td>
- <td>3.x, 4.x</td>
- <td>Yes</td>
- <td>Be careful about sharing a connection across threads.</td></tr>
- <tr><td><a href="http://sources.redhat.com/bzip2/index.html">bzip2</a></td>
- <td> </td>
- <td>Yes</td>
- <td>Both low-level and high-level APIs are thread-safe. However,
- high-level API requires thread-safe access to errno.</td></tr>
- <tr><td><a href="http://cr.yp.to/cdb.html">cdb</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.washington.edu/imap/">C-Client</a></td>
- <td> </td>
- <td>Perhaps</td>
- <td>c-client uses <code>strtok()</code> and
- <code>gethostbyname()</code> which are not thread-safe on most C
- library implementations. c-client's static data is meant to be shared
- across threads. If <code>strtok()</code> and
- <code>gethostbyname()</code> are thread-safe on your OS, c-client
- <em>may</em> be thread-safe.</td></tr>
- <tr><td><a href="http://www.fastio.com/">cpdflib</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.ijg.org/files/">libcrypt</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://expat.sourceforge.net/">Expat</a></td>
- <td> </td>
- <td>Yes</td>
- <td>Need a separate parser instance per thread</td></tr>
- <tr><td><a href="http://www.freetds.org/">FreeTDS</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.freetype.org/">FreeType</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.boutell.com/gd/">GD 1.8.x</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.boutell.com/gd/">GD 2.0.x</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.gnu.org/software/gdbm/gdbm.html">gdbm</a></td>
- <td> </td>
- <td>No</td>
- <td>Errors returned via a static <code>gdbm_error</code>
- variable</td></tr>
- <tr><td><a href="http://www.imagemagick.org/">ImageMagick</a></td>
- <td>5.2.2</td>
- <td>Yes</td>
- <td>ImageMagick docs claim it is thread safe since version 5.2.2 (see <a
- href="http://www.cise.ufl.edu/depot/www/ImageMagick/www/Changelog.html"
- >Change log</a>).
- </td></tr>
- <tr><td><a href="http://www.enlightenment.org/pages/imlib2.html"
- >Imlib2</a></td>
- <td> </td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.ijg.org/files/">libjpeg</a></td>
- <td>v6b</td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://mysql.com">libmysqlclient</a></td>
- <td> </td>
- <td>Yes</td>
- <td>Use mysqlclient_r library variant to ensure thread-safety. For
- more information, please read <a
- href="http://www.mysql.com/doc/en/Threaded_clients.html"
- >http://www.mysql.com/doc/en/Threaded_clients.html</a>.</td></tr>
- <tr><td><a href="http://www.opaque.net/ming/">Ming</a></td>
- <td>0.2a</td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://net-snmp.sourceforge.net/">Net-SNMP</a></td>
- <td>5.0.x</td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.openldap.org/">OpenLDAP</a></td>
- <td>2.1.x</td>
- <td>Yes</td>
- <td>Use <code>ldap_r</code> library variant to ensure
- thread-safety.</td></tr>
- <tr><td><a href="http://www.openssl.org/">OpenSSL</a></td>
- <td>0.9.6g</td>
- <td>Yes</td>
- <td>Requires proper usage of <code>CRYPTO_num_locks</code>,
- <code>CRYPTO_set_locking_callback</code>,
- <code>CRYPTO_set_id_callback</code></td></tr>
- <tr><td><a href="http://www.oracle.com/">liboci8 (Oracle 8+)</a></td>
- <td>8.x,9.x</td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://pdflib.com/">pdflib</a></td>
- <td>5.0.x</td>
- <td>Yes</td>
- <td>PDFLib docs claim it is thread safe; changes.txt indicates it
- has been partially thread-safe since V1.91: <a
- href="http://www.pdflib.com/products/pdflib/index.html"
- >http://www.pdflib.com/products/pdflib/index.html</a>.</td></tr>
- <tr><td><a href="http://www.libpng.org/pub/png/libpng.html">libpng</a></td>
- <td>1.0.x</td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a href="http://www.libpng.org/pub/png/libpng.html">libpng</a></td>
- <td>1.2.x</td>
- <td>?</td>
- <td> </td></tr>
- <tr><td><a
- href="http://www.postgresql.org/idocs/index.php?libpq-threading.html"
- >libpq (PostgreSQL)</a></td>
- <td>7.x</td>
- <td>Yes</td>
- <td>Don't share connections across threads and watch out for
- <code>crypt()</code> calls</td></tr>
- <tr><td><a href="http://www.gingerall.com/charlie/ga/xml/p_sab.xml"
- >Sablotron</a></td>
- <td>0.95</td>
- <td>?</td>
- <td></td></tr>
- <tr><td><a href="http://www.gzip.org/zlib/">zlib</a></td>
- <td>1.1.4</td>
- <td>Yes</td>
- <td>Relies upon thread-safe zalloc and zfree functions Default is to
- use libc's calloc/free which are thread-safe.</td></tr>
- </table>
-</section>
-</manualpage>
diff --git a/docs/manual/developer/thread_safety.xml.meta b/docs/manual/developer/thread_safety.xml.meta
deleted file mode 100644
index 8f0bb9a3b6..0000000000
--- a/docs/manual/developer/thread_safety.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>thread_safety</basename>
- <path>/developer/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/dns-caveats.html b/docs/manual/dns-caveats.html
deleted file mode 100644
index 9996161f96..0000000000
--- a/docs/manual/dns-caveats.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: dns-caveats.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: dns-caveats.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: dns-caveats.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/dns-caveats.html.en b/docs/manual/dns-caveats.html.en
deleted file mode 100644
index 217e61547f..0000000000
--- a/docs/manual/dns-caveats.html.en
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Issues Regarding DNS and Apache - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Issues Regarding DNS and Apache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/dns-caveats.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dns-caveats.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This page could be summarized with the statement: don't
- configure Apache in such a way that it relies on DNS resolution
- for parsing of the configuration files. If Apache requires DNS
- resolution to parse the configuration files then your server
- may be subject to reliability problems (ie. it might not boot),
- or denial and theft of service attacks (including users able
- to steal hits from other users).</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#example">A Simple Example</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#denial">Denial of Service</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#main">The "main server" Address</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#tips">Tips to Avoid These Problems</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#appendix">Appendix: Future Directions</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">A Simple Example</a></h2>
-
-
- <div class="example"><p><code>
- &lt;VirtualHost www.abc.dom&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>In order for Apache to function properly, it absolutely needs
- to have two pieces of information about each virtual host: the
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> and at least one
- IP address that the server will bind and respond to. The above
- example does not include the IP address, so Apache must use DNS
- to find the address of <code>www.abc.dom</code>. If for some
- reason DNS is not available at the time your server is parsing
- its config file, then this virtual host <strong>will not be
- configured</strong>. It won't be able to respond to any hits
- to this virtual host (prior to Apache version 1.2 the server
- would not even boot).</p>
-
- <p>Suppose that <code>www.abc.dom</code> has address 10.0.0.1.
- Then consider this configuration snippet:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>This time Apache needs to use reverse DNS to find the
- <code>ServerName</code> for this virtualhost. If that reverse
- lookup fails then it will partially disable the virtualhost
- (prior to Apache version 1.2 the server would not even boot).
- If the virtual host is name-based then it will effectively be
- totally disabled, but if it is IP-based then it will mostly
- work. However, if Apache should ever have to generate a full
- URL for the server which includes the server name, then it will
- fail to generate a valid URL.</p>
-
- <p>Here is a snippet that avoids both of these problems:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerName www.abc.dom <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="denial" id="denial">Denial of Service</a></h2>
-
-
- <p>There are (at least) two forms that denial of service
- can come in. If you are running a version of Apache prior to
- version 1.2 then your server will not even boot if one of the
- two DNS lookups mentioned above fails for any of your virtual
- hosts. In some cases this DNS lookup may not even be under your
- control; for example, if <code>abc.dom</code> is one of your
- customers and they control their own DNS, they can force your
- (pre-1.2) server to fail while booting simply by deleting the
- <code>www.abc.dom</code> record.</p>
-
- <p>Another form is far more insidious. Consider this
- configuration snippet:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost www.abc.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webgirl@abc.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt; <br />
- <br />
- &lt;VirtualHost www.def.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webguy@def.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/def <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Suppose that you've assigned 10.0.0.1 to
- <code>www.abc.dom</code> and 10.0.0.2 to
- <code>www.def.dom</code>. Furthermore, suppose that
- <code>def.dom</code> has control of their own DNS. With this
- config you have put <code>def.dom</code> into a position where
- they can steal all traffic destined to <code>abc.dom</code>. To
- do so, all they have to do is set <code>www.def.dom</code> to
- 10.0.0.1. Since they control their own DNS you can't stop them
- from pointing the <code>www.def.dom</code> record wherever they
- wish.</p>
-
- <p>Requests coming in to 10.0.0.1 (including all those where
- users typed in URLs of the form
- <code>http://www.abc.dom/whatever</code>) will all be served by
- the <code>def.dom</code> virtual host. To better understand why
- this happens requires a more in-depth discussion of how Apache
- matches up incoming requests with the virtual host that will
- serve it. A rough document describing this <a href="vhosts/details.html">is available</a>.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="main" id="main">The "main server" Address</a></h2>
-
-
- <p>The addition of <a href="vhosts/name-based.html">name-based
- virtual host support</a> in Apache 1.1 requires Apache to know
- the IP address(es) of the host that httpd is running on. To get
- this address it uses either the global
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- (if present) or calls the C function <code>gethostname</code>
- (which should return the same as typing "hostname" at the
- command prompt). Then it performs a DNS lookup on this address.
- At present there is no way to avoid this lookup.</p>
-
- <p>If you fear that this lookup might fail because your DNS
- server is down then you can insert the hostname in
- <code>/etc/hosts</code> (where you probably already have it so
- that the machine can boot properly). Then ensure that your
- machine is configured to use <code>/etc/hosts</code> in the
- event that DNS fails. Depending on what OS you are using this
- might be accomplished by editing <code>/etc/resolv.conf</code>,
- or maybe <code>/etc/nsswitch.conf</code>.</p>
-
- <p>If your server doesn't have to perform DNS for any other
- reason then you might be able to get away with running Apache
- with the <code>HOSTRESORDER</code> environment variable set to
- "local". This all depends on what OS and resolver libraries you
- are using. It also affects CGIs unless you use
- <code class="module"><a href="./mod/mod_env.html">mod_env</a></code> to control the environment. It's best
- to consult the man pages or FAQs for your OS.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="tips" id="tips">Tips to Avoid These Problems</a></h2>
-
-
- <ul>
- <li>
- use IP addresses in
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code>
- </li>
-
- <li>
- use IP addresses in
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- </li>
-
- <li>
- ensure all virtual hosts have an explicit
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- </li>
-
- <li>create a <code>&lt;VirtualHost _default_:*&gt;</code>
- server that has no pages to serve</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="appendix" id="appendix">Appendix: Future Directions</a></h2>
-
-
- <p>The situation regarding DNS is highly undesirable. For
- Apache 1.2 we've attempted to make the server at least continue
- booting in the event of failed DNS, but it might not be the
- best we can do. In any event, requiring the use of explicit IP
- addresses in configuration files is highly undesirable in
- today's Internet where renumbering is a necessity.</p>
-
- <p>A possible work around to the theft of service attack
- described above would be to perform a reverse DNS lookup on the
- IP address returned by the forward lookup and compare the two
- names -- in the event of a mismatch, the virtualhost would be
- disabled. This would require reverse DNS to be configured
- properly (which is something that most admins are familiar with
- because of the common use of "double-reverse" DNS lookups by
- FTP servers and TCP wrappers).</p>
-
- <p>In any event, it doesn't seem possible to reliably boot a
- virtual-hosted web server when DNS has failed unless IP
- addresses are used. Partial solutions such as disabling
- portions of the configuration might be worse than not booting
- at all depending on what the webserver is supposed to
- accomplish.</p>
-
- <p>As HTTP/1.1 is deployed and browsers and proxies start
- issuing the <code>Host</code> header it will become possible to
- avoid the use of IP-based virtual hosts entirely. In this case,
- a webserver has no requirement to do DNS lookups during
- configuration. But as of March 1997 these features have not
- been deployed widely enough to be put into use on critical
- webservers.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/dns-caveats.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dns-caveats.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/dns-caveats.html.ja.euc-jp b/docs/manual/dns-caveats.html.ja.euc-jp
deleted file mode 100644
index e23ef2103e..0000000000
--- a/docs/manual/dns-caveats.html.ja.euc-jp
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>DNS ¤È Apache ¤Ë¤Þ¤Ä¤ï¤ëÃí°Õ»ö¹à - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>DNS ¤È Apache ¤Ë¤Þ¤Ä¤ï¤ëÃí°Õ»ö¹à</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/dns-caveats.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dns-caveats.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ËÜʸ½ñ¤ÎÆâÍƤϼ¡¤Î°ì¸À¤Ë¿Ô¤­¤Þ¤¹¡£¡ÖApache ¤¬ÀßÄê¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤à¤È¤­¤Ë
- DNS ¤ò»ÈÍѤ¹¤ëɬÍפ¬¤Ê¤¤¤è¤¦¤Ë¤·¤Æ²¼¤µ¤¤¡×¡£Apache ¤¬ÀßÄê¥Õ¥¡¥¤¥ë¤ò
- Æɤ߹þ¤à¤È¤­¤Ë DNS ¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¡¢¿®ÍêÀ­¤ÎÌäÂê
- (µ¯Æ°¤·¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó) ¤ä¥µ¡¼¥Ó¥¹µñÈݤäÅðÍÑ¥¢¥¿¥Ã¥¯
- (¾¤Î¥æ¡¼¥¶¤«¤é¥Ò¥Ã¥È¤òÅð¤à¤³¤È¤ò´Þ¤ß¤Þ¤¹)
- ¤ÎÌäÂê¤ËľÌ̤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#example">´Êñ¤ÊÎã</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#denial">¥µ¡¼¥Ó¥¹µñÈÝ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#main">¡Ö¼ç¥µ¡¼¥Ð¡×¥¢¥É¥ì¥¹</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#tips">°Ê¾å¤ÎÌäÂê¤ò²ò·è¤¹¤ëÊýË¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#appendix">ÉÕÏ¿: ¾­ÍèŪ¤ÊÊý¸þÀ­</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">´Êñ¤ÊÎã</a></h2>
-
-
- <div class="example"><p><code>
- &lt;VirtualHost www.abc.dom&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Apache ¤¬Àµ¾ï¤Ëµ¡Ç½¤¹¤ë¤Ë¤Ï¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈËè¤Ëɬ¤ºÆó¤Ä¤Î
- ¾ðÊó¤¬É¬Íפˤʤê¤Þ¤¹¡£¤½¤ì¤Ï¡¢
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- ¤È¡¢¤½¤Î¥µ¡¼¥Ð¤¬±þÅú¤¹¤ë¤¿¤á¤Î IP (ºÇÄã°ì¤Ä) ¤Ç¤¹¡£
- ¾åµ­Îã¤Ç¤Ï IP ¥¢¥É¥ì¥¹¤ò´Þ¤ó¤Ç¤¤¤Þ¤»¤ó¤Î¤Ç¡¢Apache ¤Ï DNS
- ¤ò»ÈÍѤ·¤Æ <code>www.abc.dom</code> ¤ò¸«¤Ä¤±¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ²¿¤é¤«¤ÎÍýͳ¤ÇÀßÄê¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ó¤Ç¤¤¤ë¤È¤­¤Ë DNS
- ¤¬ÍøÍѤǤ­¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ï<strong>ÀßÄꤵ¤ì¤Þ¤»¤ó</strong>¡£
- ¤½¤·¤Æ¡¢¤½¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ¹¤ë¥Ò¥Ã¥È¤Ë¤Ï±þÅú¤¬¤Ê¤µ¤ì¤Þ¤»¤ó
- (Apache 1.2 °ÊÁ°¤Ç¤Ïµ¯Æ°¤¹¤é¤·¤Þ¤»¤ó)¡£</p>
-
- <p><code>www.abc.dom</code> ¤Î¥¢¥É¥ì¥¹¤¬ 10.0.0.1
- ¤À¤È¤·¤Þ¤¹¡£¤Ç¤Ï¡¢¼¡¤ÎÀßÄê¤Ë¤Ä¤¤¤Æ¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>¸½ºß¤Î¥ê¥ê¡¼¥¹¤Ç¤Ï Apache ¤Ï DNS µÕ°ú¤­¤ò»ÈÍѤ·¤Æ
- ¤³¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- ¤ò¸«¤Ä¤±¤Þ¤¹¡£
- ¤½¤ÎµÕ°ú¤­¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤ÏÉôʬŪ¤Ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò̵¸ú¤Ë¤·¤Þ¤¹
- (Apache 1.2 ¤è¤êÁ°¤Ç¤Ïµ¯Æ°¤¹¤é¤·¤Þ¤»¤ó)¡£
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬Ì¾Á°¥Ù¡¼¥¹¤Ç¤¢¤ì¤Ð´°Á´¤Ë̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢
- IP ¥Ù¡¼¥¹¤Ç¤¢¤ì¤Ð³µ¤ÍÆ°ºî¤·¤Þ¤¹¡£¤·¤«¤·¤Ê¤¬¤é¡¢¥µ¡¼¥Ð̾¤ò
- ´Þ¤à´°Á´¤Ê URL ¤òÀ¸À®¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¾ì¹ç¤Ï¡¢Àµ¤·¤¤ URL
- ¤ÎÀ¸À®¤¬¤Ç¤­¤Þ¤»¤ó¡£</p>
-
- <p>¼¡¤ÎÎã¤Ï¾åµ­¤ÎÌäÂê¤ò²ò·è¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerName www.abc.dom <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="denial" id="denial">¥µ¡¼¥Ó¥¹µñÈÝ</a></h2>
-
-
- <p>¥µ¡¼¥Ó¥¹µñÈݤ¬µ¯¤³¤ë¾ì¹ç¡¢(¾¯¤Ê¤¯¤È¤â) Æó¤Ä¤Î¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
- Apache 1.2 ¤è¤êÁ°¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¾ì¹ç¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¤¿¤á¤Î
- ¾åµ­¤ÎÆó¤Ä¤Î DNS ¸¡º÷¤Î¤¦¤Á°ì¤Ä¼ºÇÔ¤¹¤ì¤Ðµ¯Æ°¤¹¤é¤·¤Þ¤»¤ó¡£
- ¤½¤·¤Æ¤³¤Î DNS ¸¡º÷¤¬¼«Ê¬¤ÎÀ©¸æ²¼¤Ë¤¹¤é¤Ê¤¤¾ì¹ç¤â¤¢¤ê¤¨¤Þ¤¹¡£
- Î㤨¤Ð¡¢<code>abc.dom</code> ¤¬¸ÜµÒ¤Î¥µ¡¼¥Ð¤Î°ì¤Ä¤Ç¡¢
- DNS ¤Ï¸ÜµÒ¼«¿È¤Ç´ÉÍý¤·¤Æ¤¤¤ë¾ì¹ç¡¢Ã±¤Ë
- <code>www.abc.dom</code> ¥ì¥³¡¼¥É¤òºï½ü¤¹¤ë¤À¤±¤Ç¡¢
- (1.2 ¤è¤êÁ°¤Î) ¥µ¡¼¥Ð¤òµ¯Æ°ÉÔǽ¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤â¤¦°ì¤Ä¤Î¥±¡¼¥¹¤Ï¡¢¤è¤êµ¤ÉÕ¤­¤Ë¤¯¤¤¤â¤Î¤Ç¤¹¡£
- ¼¡¤ÎÀßÄê¤Ë¤Ä¤¤¤Æ¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost www.abc.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webgirl@abc.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt; <br />
- <br />
- &lt;VirtualHost www.def.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webguy@def.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/def <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>10.0.0.1 ¤ò <code>www.abc.dom</code> ¤Ë¡¢
- 10.0.0.2 ¤ò <code>www.def.dom</code> ¤Ë³ä¤êÅö¤Æ¤Æ¤¤¤ë¤È¤·¤Þ¤¹¡£
- ¤Þ¤¿¡¢<code>def.dom</code> ¤Ï¸ÜµÒ¼«¿È¤Î DNS
- ¤ÎÀ©¸æ²¼¤Ë¤¢¤ë¤È¤·¤Þ¤¹¡£¤³¤ÎÀßÄê¤Ç¡¢<code>abc.dom</code>
- ¤Ë¸þ¤±¤é¤ì¤¿¥È¥é¥Õ¥£¥Ã¥¯Á´¤Æ¤òÃ¥¤¦¤³¤È¤¬¤Ç¤­¤ë°ÌÃÖ¤Ë
- <code>def.dom</code> ¤òÀßÃ֤Ǥ­¤Æ¤¤¤Þ¤¹¡£¸å¤Ïñ¤Ë
- <code>www.def.dom</code> ¤¬ 10.0.0.1 ¤ò»²¾È¤¹¤ë¤è¤¦¤Ë
- ÀßÄꤹ¤ë¤À¤±¤Ç¤¹¡£DNS ¤Ï¸ÜµÒ¦¤Î DNS ¤Ç¥³¥ó¥È¥í¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢
- <code>www.def.dom</code> ¥ì¥³¡¼¥É¤¬¹¥¤­¤Ê¾ì½ê¤ò»Ø¤¹¤è¤¦¤Ë
- ÀßÄê¤Ç¤­¤Æ¤·¤Þ¤¦¤Î¤ò»ß¤á¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£</p>
-
- <p>10.0.0.1 ¤ËÂФ¹¤ë¥ê¥¯¥¨¥¹¥È
- (<code>http://www.abc.dom/whatever</code> ·Á¼°¤Î URL
- ¤òÆþÎϤ·¤¿¥æ¡¼¥¶¤«¤é¤Î¤â¤ÎÁ´¤Æ¤ò´Þ¤ß¤Þ¤¹)
- ¤Ï¡¢<code>def.dom</code> ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ç±þÅú¤µ¤ì¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Ê¤³¤È¤¬²¿¸Îµ¯¤³¤ë¤«¤â¤Ã¤ÈÎɤ¯ÃΤ뤿¤á¤Ë¤Ï¡¢
- ±þÅú¤ÎɬÍפʥС¼¥Á¥ã¥ë¥Û¥¹¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¡¢
- Apache ¤¬¤É¤Î¤è¤¦¤ËÀ°¹çÀ­¤ò³ÎÊݤ¹¤ë¤«¤Ë¤Ä¤¤¤Æ¡¢
- ¿¼¤¤µÄÏÀ¤¬É¬Íפˤʤê¤Þ¤¹¡£¤ª¤ª¤¶¤Ã¤Ñ¤ÊÀâÌÀ¤Ï<a href="vhosts/details.html">¤³¤Á¤é</a>¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="main" id="main">¡Ö¼ç¥µ¡¼¥Ð¡×¥¢¥É¥ì¥¹</a></h2>
-
-
- <p>Apache 1.1 ¤Ç¤Î <a href="vhost/name-based.html">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥µ¥Ý¡¼¥È</a> Äɲäκݤˡ¢
- Apache ¤Ï httpd ¤Î¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¥Û¥¹¥È¤Î IP
- ¥¢¥É¥ì¥¹¤òÃΤëɬÍפ¬½Ð¤Æ¤­¤Þ¤·¤¿¡£¤³¤Î¥¢¥É¥ì¥¹¤òÆÀ¤ë¤¿¤á¤Ë¡¢
- (¤â¤·¤¢¤ì¤Ð) ¥°¥í¡¼¥Ð¥ë¤Ê
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> ¤ò»ÈÍѤ¹¤ë¤«¡¢
- C ¸À¸ì¤Î´Ø¿ô <code>gethostname</code> (¥³¥Þ¥ó¥É¥×¥í¥ó¥×¥È¤Ç
- <code>hostname</code> ¤È¥¿¥¤¥×¤·¤¿¤È¤­¤ÈƱ¤¸¤â¤Î¤òÊÖ¤·¤Þ¤¹)
- ¤ò¸Æ¤Ó½Ð¤¹¤«¤ò¤·¤Þ¤¹¡£
- ¤½¤Î¸å¡¢ÆÀ¤é¤ì¤¿¥¢¥É¥ì¥¹¤Ç DNS ¸¡º÷¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
- ¸½ºß¤Î¤È¤³¤í¡¢¤³¤Î DNS ¸¡º÷¤ò²óÈò¤¹¤ëÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <p>DNS ¥µ¡¼¥Ð¤¬¥À¥¦¥ó¤·¤Æ¡¢¤³¤Î¸¡º÷¤¬¤Ç¤­¤Ê¤¤»öÂÖ¤¬µ¯¤³¤ë¤³¤È¤ò
- ¶²¤ì¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢<code>/etc/hosts</code>
- ¤Ë¥Û¥¹¥È̾¤òµ­½Ò¤·¤Æ¤ª¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹
- (¥Þ¥·¥ó¤¬Àµ¾ï¤Ëµ¯Æ°¤¹¤ë¤è¤¦¤Ë´û¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó)¡£
- ¤½¤Î¾ì¹ç¡¢DNS »²¾È¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ë¥Þ¥·¥ó¤¬ <code>/etc/hosts</code>
- ¤ò»ÈÍѤ¹¤ë¤è¤¦¤ËÀßÄꤷ¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤ÎÊýË¡¤Ï¡¢¤É¤Î OS ¤ò»ÈÍѤ·¤Æ¤¤¤ë¤«¤Ë°Í¸¤·¤Þ¤¹¤¬¡¢
- <code>/etc/resolv.conf</code> ¤« <code>/etc/nsswitch.conf</code>
- ¤òÊÔ½¸¤¹¤ë¤³¤È¤ÇÀßÄê¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤â¤·Â¾¤ÎÍýͳ¤Ç DNS ¤òÍøÍѤ¹¤ëɬÍפ¬¤Ê¤¤¾ì¹ç¤Ï¡¢
- <code>HOSTRESORDER</code> ´Ä¶­ÊÑ¿ô¤ò¡Ö <code>local</code>
- ¡×¤ËÀßÄꤹ¤ë¤³¤È¤Ç¤½¤Î¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£°Ê¾å¤³¤ì¤é¤Î»öÊÁ¤Ï¡¢¤É¤ó¤Ê
- OS ¡¢¥ì¥¾¥ë¥Ð¥é¥¤¥Ö¥é¥ê¤ò»ÈÍѤ·¤Æ¤¤¤ë¤«¤Ë°Í¸¤·¤Þ¤¹¡£¤Þ¤¿¡¢
- <code class="module"><a href="./mod/mod_env.html">mod_env</a></code> ¤ò»ÈÍѤ·¤Æ´Ä¶­ÊÑ¿ô¤òÀ©¸æ¤·¤Ê¤¤¸Â¤ê¡¢
- CGI ¤Ë¤â±Æ¶Á¤òÍ¿¤¨¤Þ¤¹¡£man ¥Ú¡¼¥¸¤ä»ÈÍѤ·¤Æ¤¤¤ë OS
- ¤Î FAQ ¤ÇÄ´¤Ù¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="tips" id="tips">°Ê¾å¤ÎÌäÂê¤ò²ò·è¤¹¤ëÊýË¡</a></h2>
-
-
- <ul>
- <li>
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code>
- ¤Ç IP ¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ë¡£
- </li>
-
- <li>
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¤Ç IP ¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ë¡£
- </li>
-
- <li>
- Á´¤Æ¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬ÌÀ¼¨Åª¤Ë
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- ¤ò»ý¤Ä¤è¤¦¤Ë¤¹¤ë¡£
- </li>
-
- <li>²¿¤â±þÅú¤·¤Ê¤¤
- <code>&lt;VirtualHost _default_:*&gt;</code>
- ¥µ¡¼¥Ð¤òºî¤ë¡£</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="appendix" id="appendix">ÉÕÏ¿: ¾­ÍèŪ¤ÊÊý¸þÀ­</a></h2>
-
-
- <p>DNS ¤Ë´Ø¤·¤Æ¡¢¸½¾õ¤ÏÁ´¤¯µ¹¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£Apache 1.2 ¤Ç¡¢
- DNS ¤Î¥¤¥Ù¥ó¥È¤¬¼ºÇÔ¤·¤Æ¤â¾¯¤Ê¤¯¤È¤âµ¯Æ°¥×¥í¥»¥¹¤¬Â³¤¯¤è¤¦¤Ë¤·¤Þ¤·¤¿¤¬¡¢
- ¤³¤ì¤¬ºÇ¹â¤Î²ò·èÊýË¡¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£¥¢¥É¥ì¥¹¤ÎºÆ³ä¤êÅö¤Æ¤¬É¬Í×ÉÔ²ÄÈò
- ¤È¤Ê¤Ã¤Æ¤¤¤ëº£Æü¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ë¤ª¤¤¤Æ¤Ï¡¢
- ÀßÄê¥Õ¥¡¥¤¥ë¤ÎÃæ¤ÇÌÀ¼¨Åª¤Ê IP ¥¢¥É¥ì¥¹¤òÍ׵᤹¤ë»ÅÍͤϡ¢
- Á´¤¯µ¹¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <p>ÅðÍѤΥµ¡¼¥Ó¥¹¥¢¥¿¥Ã¥¯¤Ë´Ø¤·¤Æ¹Ô¤Ê¤¦¤Ù¤­»ö¤Ï¡¢
- DNS ½ç°ú¤­¤ò¹Ô¤Ê¤Ã¤ÆÆÀ¤é¤ì¤¿¥¢¥É¥ì¥¹¤ËÂФ¹¤ë DNS
- µÕ°ú¤­¤ò¹Ô¤Ê¤Ã¤Æ¡¢Æó¤Ä¤Î̾Á°¤òÈæ³Ó¤¹¤ë¤³¤È¤Ç¤¹¡£
- ¤³¤ÎÆó¤Ä¤¬°ìÃפ·¤Ê¤±¤ì¤Ð¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ï̵¸ú¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ¤³¤¦¤¹¤ë¤¿¤á¤Ë¤ÏµÕ°ú¤­ DNS ¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹
- (FTP ¥µ¡¼¥Ð¤ä TCP ¥é¥Ã¥Ñ¡¼¤Î¤ª¤«¤²¤Ç¡ÖÆó½ÅµÕ°ú¤­¡×DNS ¤Ï°ìÈÌŪ¤Ë
- ¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢´ÉÍý¼Ô¤Ë¤Ï¤ªÆëÀ÷¤ß¤â¤Î¤Ç¤·¤ç¤¦)¡£</p>
-
- <p>IP ¥¢¥É¥ì¥¹¤¬»ÈÍѤµ¤ì¤Æ¤¤¤Ê¤¯¤Æ DNS ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¡¢
- ¤É¤¦¤·¤Æ¤â¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¿®ÍêÀ­¤ò³ÎÊݤ·¤Æ
- µ¯Æ°¤µ¤»¤ë¤³¤È¤ÏÉÔ²Äǽ¤Î¤è¤¦¤Ç¤¹¡£
- ÀßÄê¤Î°ìÉô¤ò̵¸ú¤Ë¤¹¤ë¤È¤¤¤¦¤è¤¦¤ÊÉôʬŪ¤Ê²ò·è¤Ç¤Ï¡¢
- ¥µ¡¼¥Ð¤¬²¿¤ò¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤«¤Ë¤â¤è¤ê¤Þ¤¹¤¬¡¢
- ¤½¤Î¥µ¡¼¥Ð¤¬µ¯Æ°¤·¤Ê¤¤¤è¤ê³Î¼Â¤Ë°­¤¤¾õ¶·¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>HTTP/1.1 ¤¬³«È¯¤µ¤ì¡¢¥Ö¥é¥¦¥¶¤ä¥×¥í¥­¥·¤¬ <code>Host</code>
- ¥Ø¥Ã¥À¤òȯ¹Ô¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¡¢IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò
- Á´¤¯»ÈÍѤ·¤Ê¤¯¤Æ¤âºÑ¤à¤è¤¦¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤³¤Î¾ì¹ç¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¤ÏÀßÄêÃæ¤Ë DNS »²¾È¤ò¤·¤Ê¤¯¤Æ¤âºÑ¤ß¤Þ¤¹¡£
- ¤·¤«¤· 1997 ǯ 3 ·î»þÅÀ¤Î¾õ¶·¤Ç¤Ï¡¢
- ¾¦ÍÑ¥ì¥Ù¥ë¤Î¥¦¥§¥Ö¥µ¡¼¥Ð¤Ç»ÈÍѤǤ­¤ë¤Û¤É¤Ë¤Ï¡¢
- ¤³¤ì¤é¤Îµ¡Ç½¤Ï¹­¤¯³«È¯¤¬¿Ê¤ó¤Ç¤¤¤Þ¤»¤ó¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/dns-caveats.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dns-caveats.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/dns-caveats.html.ko.euc-kr b/docs/manual/dns-caveats.html.ko.euc-kr
deleted file mode 100644
index dd46f131fe..0000000000
--- a/docs/manual/dns-caveats.html.ko.euc-kr
+++ /dev/null
@@ -1,221 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>DNS¿Í ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ »çÇ× - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>DNS¿Í ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ »çÇ×</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/dns-caveats.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dns-caveats.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dns-caveats.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­¸¦ ÇÑ ¹®ÀåÀ¸·Î ¿ä¾àÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡°¡ ¼³Á¤ÆÄÀÏÀ»
- ÀÐÀ»¶§ DNS¸¦ ÀÇÁ¸ÇÏÁö¾Êµµ·Ï Ç϶ó. ¾ÆÆÄÄ¡°¡ ¼³Á¤ÆÄÀÏÀ» Àдµ¥
- DNS°¡ ÇÊ¿äÇÏ´Ù¸é ¼­¹ö´Â ½Å·Ú¼º ¹®Á¦ (½ÃÀÛÀÌ ¾ÈµÉ ¼öµµ ÀÖ´Ù)
- ȤÀº ¼­ºñ½º°ÅºÎ °ø°Ý°ú (»ç¿ëÀÚ°¡ ´Ù¸¥ »ç¿ëÀÚ¿¡ ´ëÇÑ Á¢±ÙÀ»
- °¡·Îä´Â °ÍÀ» Æ÷ÇÔÇÏ¿©) ¼­ºñ½ºµµµÏ(theft of service) °ø°Ý¿¡
- ½Ã´Þ¸± ¼ö ÀÖ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#example">°£´ÜÇÑ ¿¹Á¦</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#denial">¼­ºñ½º°ÅºÎ (Denial of Service)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#main">"ÁÖ¼­¹ö" ÁÖ¼Ò</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#tips">ÀÌ ¹®Á¦¸¦ ÇÇÇϱâÀ§ÇÑ ÆÁ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#appendix">ºÎ·Ï: ¾ÕÀ¸·Î´Â</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">°£´ÜÇÑ ¿¹Á¦</a></h2>
-
-
- <div class="example"><p><code>
- &lt;VirtualHost www.abc.dom&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡°¡ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâÀ§Çؼ­´Â °¢ °¡»óÈ£½ºÆ®¿¡
- ´ëÇØ µÎ°¡Áö Á¤º¸°¡ Àý´ëÀûÀ¸·Î ÇÊ¿äÇÏ´Ù. ÀÌ Á¤º¸´Â
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>°ú ¼­¹ö°¡
- ±â´Ù¸®°í ÀÀ´äÇÒ ÃÖ¼Ò ÇÑ°³ÀÇ IP ÁÖ¼ÒÀÌ´Ù. ÀÌ ¿¹´Â IP ÁÖ¼Ò°¡
- ¾ø±â¶§¹®¿¡, ¾ÆÆÄÄ¡´Â DNS¸¦ »ç¿ëÇÏ¿© <code>www.abc.dom</code>ÀÇ
- ÁÖ¼Ò¸¦ ã¾Æ¾ß ÇÑ´Ù. ¼­¹ö°¡ ¼³Á¤ÆÄÀÏÀ» ÀÐÀ»¶§ ¾î¶² ÀÌÀ¯¿¡¼­°Ç
- DNS¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù¸é °¡»óÈ£½ºÆ®¸¦ <strong>¸¸µé ¼ö ¾ø´Ù</strong>.
- ÀÌ °¡»óÈ£½ºÆ®´Â ¿äû¿¡ ÀÀ´äÇÒ ¼ö ¾ø´Ù. (¾ÆÆÄÄ¡ 1.2 ÀÌÀü
- ¹öÀü¿¡¼­´Â ½ÉÁö¾î ¼­¹ö°¡ ºÎÆõµ ¾ÈÇÑ´Ù.)</p>
-
- <p><code>www.abc.dom</code>ÀÇ ÁÖ¼Ò°¡ 10.0.0.1À̶ó°í °¡Á¤ÇÏÀÚ.
- ±×¸®°í ´ÙÀ½ ¼³Á¤À» º¸¶ó:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>ÀÌÁ¦ ¾ÆÆÄÄ¡´Â ÀÌ °¡»óÈ£½ºÆ®ÀÇ <code>ServerName</code>À»
- ã±âÀ§ÇØ ¿ªDNS¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¿ªÃ£±â°¡ ½ÇÆÐÇÏ¸é ¾ÆÆÄÄ¡´Â
- °¡»óÈ£½ºÆ®¸¦ ºÎºÐÀûÀ¸·Î ²ö´Ù. (¾ÆÆÄÄ¡ 1.2 ÀÌÀü ¹öÀü¿¡¼­´Â
- ½ÉÁö¾î ¼­¹ö°¡ ºÎÆõµ ¾ÈÇÑ´Ù.) Áï, ÀÌ °æ¿ì À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¶ó¸é °¡»óÈ£½ºÆ®´Â ¿ÏÀüÈ÷ µ¿ÀÛÇÏÁö¾Ê°í, ip±â¹ÝÀ̶ó¸é
- ´ëºÎºÐ µ¿ÀÛÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡°¡ ¼­¹ö¸íÀ» Æ÷ÇÔÇÏ¿© ¼­¹öÀÇ
- Àüü URLÀ» ¸¸µé¾î¾ß ÇÑ´Ù¸é Á¤»óÀûÀÎ URLÀ» ¸¸µéÁö ¸øÇÑ´Ù.</p>
-
- <p>¾Æ·¡ °æ¿ì ÀÌ µÎ°¡Áö ¹®Á¦°¡ ¾ø´Ù.</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerName www.abc.dom <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="denial" id="denial">¼­ºñ½º°ÅºÎ (Denial of Service)</a></h2>
-
-
- <p>(ÃÖ¼ÒÇÑ) µÎ°¡Áö Á¾·ùÀÇ ¼­ºñ½º°ÅºÎ°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
- ¾ÆÆÄÄ¡ 1.2 ÀÌÀü ¹öÀüÀÇ °æ¿ì ¾î¶² °¡»óÈ£½ºÆ®¿¡¼­¶óµµ
- À§¿¡¼­ ¸»ÇÑ µÎ DNS °Ë»öÀÌ ½ÇÆÐÇÏ¸é ¼­¹ö°¡ ÄÑÁöÁöµµ ¾Ê´Â´Ù.
- DNS°¡ ´ç½ÅÀÇ ±ÇÇÑ ¹ÛÀÇ ¹®Á¦ÀÏ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î,
- <code>abc.dom</code>ÀÌ °í°´ »çÀÌÆ®ÀÌ°í °í°´ÀÌ ÀÚ½ÅÀÇ DNS¸¦
- °ü¸®ÇÑ´Ù¸é, <code>www.abc.dom</code> ·¹Äڵ带 Áö¿ì±â¸¸ Çصµ
- (1.2 ÀÌÀü) ¼­¹ö´Â ½ÃÀÛÇÏÁö ¸øÇÑ´Ù.</p>
-
- <p>ÈξÀ ´õ ±³È°ÇÑ ¹æ¹ýµµ ÀÖ´Ù. ´ÙÀ½ ¼³Á¤À» »ìÆ캸ÀÚ:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost www.abc.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webgirl@abc.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt; <br />
- <br />
- &lt;VirtualHost www.def.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webguy@def.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/def <br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>´ç½ÅÀÌ <code>www.abc.dom</code>¿¡ 10.0.0.1,
- <code>www.def.dom</code>¿¡ 10.0.0.2¸¦ ÇÒ´çÇß´Ù°í ÇÏÀÚ.
- ¶Ç, <code>def.dom</code>Àº ÀÚü DNS¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤ÇÏÀÚ.
- ÀÌ ¼³Á¤°ú ÇÔ²² <code>def.dom</code>À» <code>abc.dom</code>À¸·Î
- °¡´Â ¸ðµç Åë½ÅÀ» °¡·Îç ¼ö ÀÖ´Â Àå¼Ò¿¡ µÎ¾ú´Ù. ±×·¸´Ù¸é ±×µéÀº
- <code>www.def.dom</code>À» 10.0.0.1·Î ¼³Á¤Çϱ⸸ ÇÏ¸é µÈ´Ù.
- ±×µéÀÌ ÀÚü DNS¸¦ »ç¿ëÇϱ⶧¹®¿¡ ´ç½ÅÀº ±×µéÀÌ ¿øÇϴµ¥·Î
- <code>www.def.dom</code> ·¹Äڵ带 ¼³Á¤ÇÏ´Â °ÍÀ» ¸·À» ¼ö
- ¾ø´Ù.</p>
-
- <p>(»ç¿ëÀÚ°¡ <code>http://www.abc.dom/whatever</code> Çü½ÄÀÇ
- URLÀ» ÀÔ·ÂÇÏ´Â °æ¿ì¸¦ Æ÷ÇÔÇÏ¿©) 10.0.0.1·Î ¿À´Â ¸ðµç ¿äûÀ»
- <code>def.dom</code> °¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÏ°Ô µÈ´Ù. ¿Ö ÀÌ·±
- ÀÏÀÌ ÀϾ´ÂÁö ÀÌÇØÇÏ·Á¸é ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô °¡»óÈ£½ºÆ®·Î
- ¿À´Â ¿äûÀ» ó¸®ÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀÌ ÇÊ¿äÇÏ´Ù.
- <a href="vhosts/details.html">¿©±â</a>¿¡ ´ë°­ ¼³¸íµÇÀÖ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="main" id="main">"ÁÖ¼­¹ö" ÁÖ¼Ò</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ 1.1¿¡¼­ <a href="vhosts/name-based.html">À̸§±â¹Ý
- °¡»óÈ£½ºÆ® Áö¿ø</a>ÀÌ Æ÷ÇԵǾú±â¶§¹®¿¡ ¾ÆÆÄÄ¡´Â À¥¼­¹ö¸¦
- ½ÇÇàÇϴ ȣ½ºÆ®ÀÇ IP ÁÖ¼Ò(µé)¸¦ ¾Ë ÇÊ¿ä°¡ »ý°å´Ù. ÀÌ ÁÖ¼Ò´Â
- (ÀÖ´Ù¸é) Àü¿ª <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- ȤÀº C ÇÔ¼ö <code>gethostname</code>À¸·Î (¸í·ÉÇÁ·ÒÇÁÆ®¿¡
- "hostname"À» ÀÔ·ÂÇßÀ»¶§¿Í °°Àº °á°ú) ¾ò´Â´Ù. ±×·¯¸é ÀÌ ÁÖ¼Ò·Î
- DNS °Ë»öÀ» ÇÑ´Ù. ÇöÀç ÀÌ °Ë»öÀº ÇÇÇÒ ¼ö ¾ø´Ù.</p>
-
- <p>DNS ¼­¹ö°¡ Á׾ ÀÌ °Ë»öÀÌ ½ÇÆÐÇÒ °Í °°´Ù¸é
- <code>/etc/hosts</code>¿¡ È£½ºÆ®¸íÀ» Áý¾î³ÖÀ» ¼ö ÀÖ´Ù.
- (ÄÄÇ»ÅÍ°¡ Á¤»óÀûÀ¸·Î ºÎÆõǾú´Ù¸é ¾Æ¸¶ ÀÌ¹Ì µé¾îÀÖÀ» °ÍÀÌ´Ù.)
- ±×¸®°í DNS°¡ ½ÇÆÐÇÏ¸é ¼­¹ö°¡ <code>/etc/hosts</code>¸¦
- »ç¿ëÇÏ´ÂÁö È®ÀÎÇ϶ó. »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦¿¡ µû¶ó
- <code>/etc/resolv.conf</code> ȤÀº <code>/etc/nsswitch.conf</code>¸¦
- ¼öÁ¤ÇÏ¸é µÉ °ÍÀÌ´Ù.</p>
-
- <p>¼­¹ö°¡ ¾î¶² ÀÌÀ¯¿¡¼­°Ç DNS¸¦ °Ë»öÇÏ¸é ¾ÈµÈ´Ù¸é
- <code>HOSTRESORDER</code> ȯ°æº¯¼ö¸¦ "local"·Î ¼³Á¤ÇÏ°í
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. <code class="module"><a href="./mod/mod_env.html">mod_env</a></code>¸¦
- »ç¿ëÇÏ¿© ȯ°æÀ» º¯°æÇÏÁö ¾Ê´Â´Ù¸é ÀÌ È¯°æº¯¼ö´Â
- CGI¿¡µµ ¿µÇâÀ» ÁØ´Ù. ¿î¿µÃ¼Á¦ÀÇ manpage³ª FAQ¸¦ Âü°íÇÏ´Â
- °ÍÀÌ ÁÁ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="tips" id="tips">ÀÌ ¹®Á¦¸¦ ÇÇÇϱâÀ§ÇÑ ÆÁ</a></h2>
-
-
- <ul>
- <li>
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code>¿¡ IP
- ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó
- </li>
-
- <li>
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>¿¡
- IP ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó
- </li>
-
- <li>
- ¸ðµç °¡»óÈ£½ºÆ®´Â ¸í½ÃÀûÀ¸·Î
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>À»
- °¡Áö°Ô Ç϶ó
- </li>
-
- <li>¾î¶² ÆäÀÌÁöµµ ¼­ºñ½ºÇÏÁö¾Ê´Â
- <code>&lt;VirtualHost _default_:*&gt;</code> ¼­¹ö¸¦
- ¸¸µé¾î¶ó</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="appendix" id="appendix">ºÎ·Ï: ¾ÕÀ¸·Î´Â</a></h2>
-
-
- <p>DNS¿Í °ü·ÃµÈ »óȲÀº ¸Å¿ì ¹Ù¶÷Á÷ÇÏÁö ¸øÇÏ´Ù. ¾ÆÆÄÄ¡ 1.2¿¡¼­
- ¿ì¸®´Â DNS°¡ ½ÇÆÐÇÑ °æ¿ì¿¡µµ ÃÖ¼ÒÇÑ ¼­¹ö°¡ ÄÑÁöµµ·Ï ³ë·ÂÇßÁö¸¸
- °á°ú´Â ³ª»¦´Ù. ¾î·µç ¼³Á¤ÆÄÀÏ¿¡ Á÷Á¢ IP ÁÖ¼Ò¸¦ ¿ä±¸ÇÏ´Â
- °ÍÀº ¹øÈ£¸¦ ´Ù½Ã ¼³Á¤ÇؾßÇÒ ¿äÁò ÀÎÅͳݿ¡ ¸Å¿ì ¹Ù¶÷Á÷ÇÏÁö
- ¸øÇÏ´Ù.</p>
-
- <p>À§¿¡¼­ ¼³¸íÇÑ ¼­ºñ½ºµµµÏ °ø°ÝÀ» ¸·´Â ÇÑ°¡Áö ¹æ¹ýÀº °Ë»öÇÑ
- IP ÁÖ¼Ò¿¡ ´Ù½Ã ¿ªDNS °Ë»öÀ» ÇÏ¿© µÎ À̸§À» ºñ±³ÇÏ´Â °ÍÀÌ´Ù.
- ¼­·Î ´Ù¸¥ °æ¿ì °¡»óÈ£½ºÆ®¸¦ °¡µ¿ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ÀÌ ¹æ¹ýÀº
- ¿ªDNS°¡ ¿Ã¹Ù·Î ¼³Á¤µÇ¾ß ÇÑ´Ù. (FTP ¼­¹ö³ª TCP wrapper°¡
- "Áߺ¹-¿ª" DNS °Ë»öÀ» ÀÚÁÖ »ç¿ëÇϱ⶧¹®¿¡ ´ëºÎºÐÀÇ °ü¸®ÀÚ¿¡°Ô
- Àͼ÷ÇÒ °ÍÀÌ´Ù.)</p>
-
- <p>¾î·µç IP ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö¾ÊÀ¸¸é DNS°¡ ½ÇÆÐÇÑ °æ¿ì °¡»óÈ£½ºÆ®
- À¥¼­¹ö¸¦ ¹ÏÀ» ¼ö ÀÖ°Ô ½ÃÀÛÇÒ ¼ö ¾ø´Ù. ¼³Á¤ÀÇ ÀϺθ¦ ¹«½ÃÇÏ´Â
- °Í°ú °°Àº ºÎºÐÀûÀÎ ÇØ°áÃ¥Àº À¥¼­¹ö Àüü¸¦ ½ÃÀÛÇÏÁö¾Ê´Â °Íº¸´Ù
- ´õ ³ª»Ü ¼öµµ ÀÖ´Ù.</p>
-
- <p>HTTP/1.1ÀÌ ³ª¿Ô°í ºê¶ó¿ìÀú¿Í ÇÁ·Ï½Ã°¡ <code>Host</code>
- Çì´õ¸¦ º¸³»±â ½ÃÀÛÇßÀ¸¹Ç·Î IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ¿ÏÀüÈ÷
- »ç¿ëÇÏÁö¾Ê´Â °ÍÀÌ °¡´ÉÇØÁú °ÍÀÌ´Ù. ±×·¯¸é À¥¼­¹ö´Â ¼³Á¤Áß¿¡¼­
- DNS °Ë»öÀ» ÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø´Ù. ±×·¯³ª 1997³â 3¿ù¿¡´Â Áß¿äÇÑ
- À¥¼­¹ö¿¡ Æ÷ÇÔÇÒ Á¤µµ·Î À̸§±â¹Ý °¡»óÈ£½ºÆ®°¡ ³Î¸® »ç¿ëµÇÁö
- ¾Ê¾Ò´Ù.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/dns-caveats.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dns-caveats.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dns-caveats.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/dns-caveats.xml b/docs/manual/dns-caveats.xml
deleted file mode 100644
index d989824e2c..0000000000
--- a/docs/manual/dns-caveats.xml
+++ /dev/null
@@ -1,227 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dns-caveats.xml.meta">
-
- <title>Issues Regarding DNS and Apache</title>
-
- <summary>
- <p>This page could be summarized with the statement: don't
- configure Apache in such a way that it relies on DNS resolution
- for parsing of the configuration files. If Apache requires DNS
- resolution to parse the configuration files then your server
- may be subject to reliability problems (ie. it might not boot),
- or denial and theft of service attacks (including users able
- to steal hits from other users).</p>
- </summary>
-
- <section id="example">
- <title>A Simple Example</title>
-
- <example>
- &lt;VirtualHost www.abc.dom&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>In order for Apache to function properly, it absolutely needs
- to have two pieces of information about each virtual host: the
- <directive module="core">ServerName</directive> and at least one
- IP address that the server will bind and respond to. The above
- example does not include the IP address, so Apache must use DNS
- to find the address of <code>www.abc.dom</code>. If for some
- reason DNS is not available at the time your server is parsing
- its config file, then this virtual host <strong>will not be
- configured</strong>. It won't be able to respond to any hits
- to this virtual host (prior to Apache version 1.2 the server
- would not even boot).</p>
-
- <p>Suppose that <code>www.abc.dom</code> has address 10.0.0.1.
- Then consider this configuration snippet:</p>
-
- <example>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>This time Apache needs to use reverse DNS to find the
- <code>ServerName</code> for this virtualhost. If that reverse
- lookup fails then it will partially disable the virtualhost
- (prior to Apache version 1.2 the server would not even boot).
- If the virtual host is name-based then it will effectively be
- totally disabled, but if it is IP-based then it will mostly
- work. However, if Apache should ever have to generate a full
- URL for the server which includes the server name, then it will
- fail to generate a valid URL.</p>
-
- <p>Here is a snippet that avoids both of these problems:</p>
-
- <example>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerName www.abc.dom <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
- </section>
-
- <section id="denial">
- <title>Denial of Service</title>
-
- <p>There are (at least) two forms that denial of service
- can come in. If you are running a version of Apache prior to
- version 1.2 then your server will not even boot if one of the
- two DNS lookups mentioned above fails for any of your virtual
- hosts. In some cases this DNS lookup may not even be under your
- control; for example, if <code>abc.dom</code> is one of your
- customers and they control their own DNS, they can force your
- (pre-1.2) server to fail while booting simply by deleting the
- <code>www.abc.dom</code> record.</p>
-
- <p>Another form is far more insidious. Consider this
- configuration snippet:</p>
-
- <example>
- &lt;VirtualHost www.abc.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webgirl@abc.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt; <br />
- <br />
- &lt;VirtualHost www.def.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webguy@def.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/def <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Suppose that you've assigned 10.0.0.1 to
- <code>www.abc.dom</code> and 10.0.0.2 to
- <code>www.def.dom</code>. Furthermore, suppose that
- <code>def.dom</code> has control of their own DNS. With this
- config you have put <code>def.dom</code> into a position where
- they can steal all traffic destined to <code>abc.dom</code>. To
- do so, all they have to do is set <code>www.def.dom</code> to
- 10.0.0.1. Since they control their own DNS you can't stop them
- from pointing the <code>www.def.dom</code> record wherever they
- wish.</p>
-
- <p>Requests coming in to 10.0.0.1 (including all those where
- users typed in URLs of the form
- <code>http://www.abc.dom/whatever</code>) will all be served by
- the <code>def.dom</code> virtual host. To better understand why
- this happens requires a more in-depth discussion of how Apache
- matches up incoming requests with the virtual host that will
- serve it. A rough document describing this <a
- href="vhosts/details.html">is available</a>.</p>
- </section>
-
- <section id="main">
- <title>The "main server" Address</title>
-
- <p>The addition of <a href="vhosts/name-based.html">name-based
- virtual host support</a> in Apache 1.1 requires Apache to know
- the IP address(es) of the host that httpd is running on. To get
- this address it uses either the global
- <directive module="core">ServerName</directive>
- (if present) or calls the C function <code>gethostname</code>
- (which should return the same as typing "hostname" at the
- command prompt). Then it performs a DNS lookup on this address.
- At present there is no way to avoid this lookup.</p>
-
- <p>If you fear that this lookup might fail because your DNS
- server is down then you can insert the hostname in
- <code>/etc/hosts</code> (where you probably already have it so
- that the machine can boot properly). Then ensure that your
- machine is configured to use <code>/etc/hosts</code> in the
- event that DNS fails. Depending on what OS you are using this
- might be accomplished by editing <code>/etc/resolv.conf</code>,
- or maybe <code>/etc/nsswitch.conf</code>.</p>
-
- <p>If your server doesn't have to perform DNS for any other
- reason then you might be able to get away with running Apache
- with the <code>HOSTRESORDER</code> environment variable set to
- "local". This all depends on what OS and resolver libraries you
- are using. It also affects CGIs unless you use
- <module>mod_env</module> to control the environment. It's best
- to consult the man pages or FAQs for your OS.</p>
- </section>
-
- <section id="tips">
- <title>Tips to Avoid These Problems</title>
-
- <ul>
- <li>
- use IP addresses in
- <directive module="core">VirtualHost</directive>
- </li>
-
- <li>
- use IP addresses in
- <directive module="mpm_common">Listen</directive>
- </li>
-
- <li>
- ensure all virtual hosts have an explicit
- <directive module="core">ServerName</directive>
- </li>
-
- <li>create a <code>&lt;VirtualHost _default_:*&gt;</code>
- server that has no pages to serve</li>
- </ul>
- </section>
-
- <section id="appendix">
- <title>Appendix: Future Directions</title>
-
- <p>The situation regarding DNS is highly undesirable. For
- Apache 1.2 we've attempted to make the server at least continue
- booting in the event of failed DNS, but it might not be the
- best we can do. In any event, requiring the use of explicit IP
- addresses in configuration files is highly undesirable in
- today's Internet where renumbering is a necessity.</p>
-
- <p>A possible work around to the theft of service attack
- described above would be to perform a reverse DNS lookup on the
- IP address returned by the forward lookup and compare the two
- names -- in the event of a mismatch, the virtualhost would be
- disabled. This would require reverse DNS to be configured
- properly (which is something that most admins are familiar with
- because of the common use of "double-reverse" DNS lookups by
- FTP servers and TCP wrappers).</p>
-
- <p>In any event, it doesn't seem possible to reliably boot a
- virtual-hosted web server when DNS has failed unless IP
- addresses are used. Partial solutions such as disabling
- portions of the configuration might be worse than not booting
- at all depending on what the webserver is supposed to
- accomplish.</p>
-
- <p>As HTTP/1.1 is deployed and browsers and proxies start
- issuing the <code>Host</code> header it will become possible to
- avoid the use of IP-based virtual hosts entirely. In this case,
- a webserver has no requirement to do DNS lookups during
- configuration. But as of March 1997 these features have not
- been deployed widely enough to be put into use on critical
- webservers.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/dns-caveats.xml.ja b/docs/manual/dns-caveats.xml.ja
deleted file mode 100644
index eccc8020b3..0000000000
--- a/docs/manual/dns-caveats.xml.ja
+++ /dev/null
@@ -1,230 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dns-caveats.xml.meta">
-
- <title>DNS $B$H(B Apache $B$K$^$D$o$kCm0U;v9`(B</title>
-
- <summary>
- <p>$BK\J8=q$NFbMF$O<!$N0l8@$K?T$-$^$9!#!V(BApache $B$,@_Dj%U%!%$%k$rFI$_9~$`$H$-$K(B
- DNS $B$r;HMQ$9$kI,MW$,$J$$$h$&$K$7$F2<$5$$!W!#(BApache $B$,@_Dj%U%!%$%k$r(B
- $BFI$_9~$`$H$-$K(B DNS $B$r;HMQ$9$kI,MW$,$"$k>l9g!"?.Mj@-$NLdBj(B
- ($B5/F0$7$J$$$+$b$7$l$^$;$s(B) $B$d%5!<%S%95qH]$dEpMQ%"%?%C%/(B
- ($BB>$N%f!<%6$+$i%R%C%H$rEp$`$3$H$r4^$_$^$9(B)
- $B$NLdBj$KD>LL$9$k$+$b$7$l$^$;$s!#(B</p>
- </summary>
-
- <section id="example">
- <title>$B4JC1$JNc(B</title>
-
- <example>
- &lt;VirtualHost www.abc.dom&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Apache $B$,@5>o$K5!G=$9$k$K$O!"%P!<%A%c%k%[%9%HKh$KI,$:Fs$D$N(B
- $B>pJs$,I,MW$K$J$j$^$9!#$=$l$O!"(B
- <directive module="core">ServerName</directive>
- $B$H!"$=$N%5!<%P$,1~Ez$9$k$?$a$N(B IP ($B:GDc0l$D(B) $B$G$9!#(B
- $B>e5-Nc$G$O(B IP $B%"%I%l%9$r4^$s$G$$$^$;$s$N$G!"(BApache $B$O(B DNS
- $B$r;HMQ$7$F(B <code>www.abc.dom</code> $B$r8+$D$1$J$1$l$P$J$j$^$;$s!#(B
- $B2?$i$+$NM}M3$G@_Dj%U%!%$%k$rFI$_9~$s$G$$$k$H$-$K(B DNS
- $B$,MxMQ$G$-$J$+$C$?>l9g!"(B
- $B%P!<%A%c%k%[%9%H$O(B<strong>$B@_Dj$5$l$^$;$s(B</strong>$B!#(B
- $B$=$7$F!"$=$N%P!<%A%c%k%[%9%H$KBP$9$k%R%C%H$K$O1~Ez$,$J$5$l$^$;$s(B
- (Apache 1.2 $B0JA0$G$O5/F0$9$i$7$^$;$s(B)$B!#(B</p>
-
- <p><code>www.abc.dom</code> $B$N%"%I%l%9$,(B 10.0.0.1
- $B$@$H$7$^$9!#$G$O!"<!$N@_Dj$K$D$$$F9M$($F$_$^$7$g$&!#(B</p>
-
- <example>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>$B8=:_$N%j%j!<%9$G$O(B Apache $B$O(B DNS $B5U0z$-$r;HMQ$7$F(B
- $B$3$N%P!<%A%c%k%[%9%H$N(B <directive module="core">ServerName</directive>
- $B$r8+$D$1$^$9!#(B
- $B$=$N5U0z$-$,<:GT$7$?>l9g$OItJ,E*$K%P!<%A%c%k%[%9%H$rL58z$K$7$^$9(B
- (Apache 1.2 $B$h$jA0$G$O5/F0$9$i$7$^$;$s(B)$B!#(B
- $B%P!<%A%c%k%[%9%H$,L>A0%Y!<%9$G$"$l$P40A4$KL58z$K$J$j$^$9$,!"(B
- IP $B%Y!<%9$G$"$l$P35$MF0:n$7$^$9!#$7$+$7$J$,$i!"%5!<%PL>$r(B
- $B4^$`40A4$J(B URL $B$r@8@.$7$J$1$l$P$J$i$J$$>l9g$O!"@5$7$$(B URL
- $B$N@8@.$,$G$-$^$;$s!#(B</p>
-
- <p>$B<!$NNc$O>e5-$NLdBj$r2r7h$7$F$$$^$9!#(B</p>
-
- <example>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerName www.abc.dom <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
- </section>
-
- <section id="denial">
- <title>$B%5!<%S%95qH](B</title>
-
- <p>$B%5!<%S%95qH]$,5/$3$k>l9g!"(B($B>/$J$/$H$b(B) $BFs$D$N%1!<%9$,$"$j$^$9!#(B
- Apache 1.2 $B$h$jA0$r<B9T$7$F$$$k>l9g!"%P!<%A%c%k%[%9%H$N$?$a$N(B
- $B>e5-$NFs$D$N(B DNS $B8!:w$N$&$A0l$D<:GT$9$l$P5/F0$9$i$7$^$;$s!#(B
- $B$=$7$F$3$N(B DNS $B8!:w$,<+J,$N@)8f2<$K$9$i$J$$>l9g$b$"$j$($^$9!#(B
- $BNc$($P!"(B<code>abc.dom</code> $B$,8\5R$N%5!<%P$N0l$D$G!"(B
- DNS $B$O8\5R<+?H$G4IM}$7$F$$$k>l9g!"C1$K(B
- <code>www.abc.dom</code> $B%l%3!<%I$r:o=|$9$k$@$1$G!"(B
- (1.2 $B$h$jA0$N(B) $B%5!<%P$r5/F0ITG=$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$b$&0l$D$N%1!<%9$O!"$h$j5$IU$-$K$/$$$b$N$G$9!#(B
- $B<!$N@_Dj$K$D$$$F9M$($F$_$^$7$g$&!#(B</p>
-
- <example>
- &lt;VirtualHost www.abc.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webgirl@abc.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt; <br />
- <br />
- &lt;VirtualHost www.def.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webguy@def.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/def <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>10.0.0.1 $B$r(B <code>www.abc.dom</code> $B$K!"(B
- 10.0.0.2 $B$r(B <code>www.def.dom</code> $B$K3d$jEv$F$F$$$k$H$7$^$9!#(B
- $B$^$?!"(B<code>def.dom</code> $B$O8\5R<+?H$N(B DNS
- $B$N@)8f2<$K$"$k$H$7$^$9!#$3$N@_Dj$G!"(B<code>abc.dom</code>
- $B$K8~$1$i$l$?%H%i%U%#%C%/A4$F$rC%$&$3$H$,$G$-$k0LCV$K(B
- <code>def.dom</code> $B$r@_CV$G$-$F$$$^$9!#8e$OC1$K(B
- <code>www.def.dom</code> $B$,(B 10.0.0.1 $B$r;2>H$9$k$h$&$K(B
- $B@_Dj$9$k$@$1$G$9!#(BDNS $B$O8\5RB&$N(B DNS $B$G%3%s%H%m!<%k$5$l$F$$$k$N$G!"(B
- <code>www.def.dom</code> $B%l%3!<%I$,9%$-$J>l=j$r;X$9$h$&$K(B
- $B@_Dj$G$-$F$7$^$&$N$r;_$a$5$;$k$3$H$,$G$-$^$;$s!#(B</p>
-
- <p>10.0.0.1 $B$KBP$9$k%j%/%(%9%H(B
- (<code>http://www.abc.dom/whatever</code> $B7A<0$N(B URL
- $B$rF~NO$7$?%f!<%6$+$i$N$b$NA4$F$r4^$_$^$9(B)
- $B$O!"(B<code>def.dom</code> $B%P!<%A%c%k%[%9%H$G1~Ez$5$l$^$9!#(B
- $B$3$N$h$&$J$3$H$,2?8N5/$3$k$+$b$C$HNI$/CN$k$?$a$K$O!"(B
- $B1~Ez$NI,MW$J%P!<%A%c%k%[%9%H$X$N%j%/%(%9%H$KBP$7$F!"(B
- Apache $B$,$I$N$h$&$K@09g@-$r3NJ]$9$k$+$K$D$$$F!"(B
- $B?<$$5DO@$,I,MW$K$J$j$^$9!#$*$*$6$C$Q$J@bL@$O(B<a
- href="vhosts/details.html">$B$3$A$i(B</a>$B$K5-=R$5$l$F$$$^$9!#(B</p>
- </section>
-
- <section id="main">
- <title>$B!V<g%5!<%P!W%"%I%l%9(B</title>
-
- <p>Apache 1.1 $B$G$N(B <a href="vhost/name-based.html"
- >$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$N%5%]!<%H(B</a> $BDI2C$N:]$K!"(B
- Apache $B$O(B httpd $B$N<B9T$5$l$F$$$k%[%9%H$N(B IP
- $B%"%I%l%9$rCN$kI,MW$,=P$F$-$^$7$?!#$3$N%"%I%l%9$rF@$k$?$a$K!"(B
- ($B$b$7$"$l$P(B) $B%0%m!<%P%k$J(B
- <directive module="core">ServerName</directive> $B$r;HMQ$9$k$+!"(B
- C $B8@8l$N4X?t(B <code>gethostname</code> ($B%3%^%s%I%W%m%s%W%H$G(B
- <code>hostname</code> $B$H%?%$%W$7$?$H$-$HF1$8$b$N$rJV$7$^$9(B)
- $B$r8F$S=P$9$+$r$7$^$9!#(B
- $B$=$N8e!"F@$i$l$?%"%I%l%9$G(B DNS $B8!:w$r9T$J$$$^$9!#(B
- $B8=:_$N$H$3$m!"$3$N(B DNS $B8!:w$r2sHr$9$kJ}K!$O$"$j$^$;$s!#(B</p>
-
- <p>DNS $B%5!<%P$,%@%&%s$7$F!"$3$N8!:w$,$G$-$J$$;vBV$,5/$3$k$3$H$r(B
- $B62$l$F$$$k$N$G$"$l$P!"(B<code>/etc/hosts</code>
- $B$K%[%9%HL>$r5-=R$7$F$*$/$3$H$,$G$-$^$9(B
- ($B%^%7%s$,@5>o$K5/F0$9$k$h$&$K4{$K@_Dj$5$l$F$$$k$+$b$7$l$^$;$s(B)$B!#(B
- $B$=$N>l9g!"(BDNS $B;2>H$,<:GT$7$?>l9g$K%^%7%s$,(B <code>/etc/hosts</code>
- $B$r;HMQ$9$k$h$&$K@_Dj$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B
- $B$=$NJ}K!$O!"$I$N(B OS $B$r;HMQ$7$F$$$k$+$K0MB8$7$^$9$,!"(B
- <code>/etc/resolv.conf</code> $B$+(B <code>/etc/nsswitch.conf</code>
- $B$rJT=8$9$k$3$H$G@_Dj$G$-$^$9!#(B</p>
-
- <p>$B$b$7B>$NM}M3$G(B DNS $B$rMxMQ$9$kI,MW$,$J$$>l9g$O!"(B
- <code>HOSTRESORDER</code> $B4D6-JQ?t$r!V(B <code>local</code>
- $B!W$K@_Dj$9$k$3$H$G$=$N$h$&$K$G$-$^$9!#0J>e$3$l$i$N;vJA$O!"$I$s$J(B
- OS $B!"%l%>%k%P%i%$%V%i%j$r;HMQ$7$F$$$k$+$K0MB8$7$^$9!#$^$?!"(B
- <module>mod_env</module> $B$r;HMQ$7$F4D6-JQ?t$r@)8f$7$J$$8B$j!"(B
- CGI $B$K$b1F6A$rM?$($^$9!#(Bman $B%Z!<%8$d;HMQ$7$F$$$k(B OS
- $B$N(B FAQ $B$GD4$Y$k$HNI$$$G$7$g$&!#(B</p>
- </section>
-
- <section id="tips">
- <title>$B0J>e$NLdBj$r2r7h$9$kJ}K!(B</title>
-
- <ul>
- <li>
- <directive module="core">VirtualHost</directive>
- $B$G(B IP $B%"%I%l%9$r;HMQ$9$k!#(B
- </li>
-
- <li>
- <directive module="mpm_common">Listen</directive>
- $B$G(B IP $B%"%I%l%9$r;HMQ$9$k!#(B
- </li>
-
- <li>
- $BA4$F$N%P!<%A%c%k%[%9%H$,L@<(E*$K(B
- <directive module="core">ServerName</directive>
- $B$r;}$D$h$&$K$9$k!#(B
- </li>
-
- <li>$B2?$b1~Ez$7$J$$(B
- <code>&lt;VirtualHost _default_:*&gt;</code>
- $B%5!<%P$r:n$k!#(B</li>
- </ul>
- </section>
-
- <section id="appendix">
- <title>$BIUO?(B: $B>-MhE*$JJ}8~@-(B</title>
-
- <p>DNS $B$K4X$7$F!"8=>u$OA4$/59$7$/$"$j$^$;$s!#(BApache 1.2 $B$G!"(B
- DNS $B$N%$%Y%s%H$,<:GT$7$F$b>/$J$/$H$b5/F0%W%m%;%9$,B3$/$h$&$K$7$^$7$?$,!"(B
- $B$3$l$,:G9b$N2r7hJ}K!$G$O$J$$$G$7$g$&!#%"%I%l%9$N:F3d$jEv$F$,I,MWIT2DHr(B
- $B$H$J$C$F$$$k:#F|$N%$%s%?!<%M%C%H$K$*$$$F$O!"(B
- $B@_Dj%U%!%$%k$NCf$GL@<(E*$J(B IP $B%"%I%l%9$rMW5a$9$k;EMM$O!"(B
- $BA4$/59$7$/$"$j$^$;$s!#(B</p>
-
- <p>$BEpMQ$N%5!<%S%9%"%?%C%/$K4X$7$F9T$J$&$Y$-;v$O!"(B
- DNS $B=g0z$-$r9T$J$C$FF@$i$l$?%"%I%l%9$KBP$9$k(B DNS
- $B5U0z$-$r9T$J$C$F!"Fs$D$NL>A0$rHf3S$9$k$3$H$G$9!#(B
- $B$3$NFs$D$,0lCW$7$J$1$l$P%P!<%A%c%k%[%9%H$OL58z$K$J$k$h$&$K$7$^$9!#(B
- $B$3$&$9$k$?$a$K$O5U0z$-(B DNS $B$,E,@Z$K@_Dj$5$l$F$$$kI,MW$,$"$j$^$9(B
- (FTP $B%5!<%P$d(B TCP $B%i%C%Q!<$N$*$+$2$G!VFs=E5U0z$-!W(BDNS $B$O0lHLE*$K(B
- $B$J$C$F$$$^$9$N$G!"4IM}<T$K$O$*Fk@w$_$b$N$G$7$g$&(B)$B!#(B</p>
-
- <p>IP $B%"%I%l%9$,;HMQ$5$l$F$$$J$/$F(B DNS $B$,<:GT$7$?>l9g$O!"(B
- $B$I$&$7$F$b%P!<%A%c%k%[%9%H%&%'%V%5!<%P$r?.Mj@-$r3NJ]$7$F(B
- $B5/F0$5$;$k$3$H$OIT2DG=$N$h$&$G$9!#(B
- $B@_Dj$N0lIt$rL58z$K$9$k$H$$$&$h$&$JItJ,E*$J2r7h$G$O!"(B
- $B%5!<%P$,2?$r$9$k$h$&$K$9$k$+$K$b$h$j$^$9$,!"(B
- $B$=$N%5!<%P$,5/F0$7$J$$$h$j3N<B$K0-$$>u67$K$J$k$G$7$g$&!#(B</p>
-
- <p>HTTP/1.1 $B$,3+H/$5$l!"%V%i%&%6$d%W%m%-%7$,(B <code>Host</code>
- $B%X%C%@$rH/9T$9$k$h$&$K$J$C$?$N$G!"(BIP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r(B
- $BA4$/;HMQ$7$J$/$F$b:Q$`$h$&$K$J$k$+$b$7$l$^$;$s!#(B
- $B$3$N>l9g!"%&%'%V%5!<%P$O@_DjCf$K(B DNS $B;2>H$r$7$J$/$F$b:Q$_$^$9!#(B
- $B$7$+$7(B 1997 $BG/(B 3 $B7n;~E@$N>u67$G$O!"(B
- $B>&MQ%l%Y%k$N%&%'%V%5!<%P$G;HMQ$G$-$k$[$I$K$O!"(B
- $B$3$l$i$N5!G=$O9-$/3+H/$,?J$s$G$$$^$;$s!#(B</p>
- </section>
-</manualpage>
diff --git a/docs/manual/dns-caveats.xml.ko b/docs/manual/dns-caveats.xml.ko
deleted file mode 100644
index b6a593ad1c..0000000000
--- a/docs/manual/dns-caveats.xml.ko
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dns-caveats.xml.meta">
-
- <title>DNS¿Í ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ »çÇ×</title>
-
- <summary>
- <p>ÀÌ ¹®¼­¸¦ ÇÑ ¹®ÀåÀ¸·Î ¿ä¾àÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡°¡ ¼³Á¤ÆÄÀÏÀ»
- ÀÐÀ»¶§ DNS¸¦ ÀÇÁ¸ÇÏÁö¾Êµµ·Ï Ç϶ó. ¾ÆÆÄÄ¡°¡ ¼³Á¤ÆÄÀÏÀ» Àдµ¥
- DNS°¡ ÇÊ¿äÇÏ´Ù¸é ¼­¹ö´Â ½Å·Ú¼º ¹®Á¦ (½ÃÀÛÀÌ ¾ÈµÉ ¼öµµ ÀÖ´Ù)
- ȤÀº ¼­ºñ½º°ÅºÎ °ø°Ý°ú (»ç¿ëÀÚ°¡ ´Ù¸¥ »ç¿ëÀÚ¿¡ ´ëÇÑ Á¢±ÙÀ»
- °¡·Îä´Â °ÍÀ» Æ÷ÇÔÇÏ¿©) ¼­ºñ½ºµµµÏ(theft of service) °ø°Ý¿¡
- ½Ã´Þ¸± ¼ö ÀÖ´Ù.</p>
- </summary>
-
- <section id="example">
- <title>°£´ÜÇÑ ¿¹Á¦</title>
-
- <example>
- &lt;VirtualHost www.abc.dom&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>¾ÆÆÄÄ¡°¡ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâÀ§Çؼ­´Â °¢ °¡»óÈ£½ºÆ®¿¡
- ´ëÇØ µÎ°¡Áö Á¤º¸°¡ Àý´ëÀûÀ¸·Î ÇÊ¿äÇÏ´Ù. ÀÌ Á¤º¸´Â
- <directive module="core">ServerName</directive>°ú ¼­¹ö°¡
- ±â´Ù¸®°í ÀÀ´äÇÒ ÃÖ¼Ò ÇÑ°³ÀÇ IP ÁÖ¼ÒÀÌ´Ù. ÀÌ ¿¹´Â IP ÁÖ¼Ò°¡
- ¾ø±â¶§¹®¿¡, ¾ÆÆÄÄ¡´Â DNS¸¦ »ç¿ëÇÏ¿© <code>www.abc.dom</code>ÀÇ
- ÁÖ¼Ò¸¦ ã¾Æ¾ß ÇÑ´Ù. ¼­¹ö°¡ ¼³Á¤ÆÄÀÏÀ» ÀÐÀ»¶§ ¾î¶² ÀÌÀ¯¿¡¼­°Ç
- DNS¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù¸é °¡»óÈ£½ºÆ®¸¦ <strong>¸¸µé ¼ö ¾ø´Ù</strong>.
- ÀÌ °¡»óÈ£½ºÆ®´Â ¿äû¿¡ ÀÀ´äÇÒ ¼ö ¾ø´Ù. (¾ÆÆÄÄ¡ 1.2 ÀÌÀü
- ¹öÀü¿¡¼­´Â ½ÉÁö¾î ¼­¹ö°¡ ºÎÆõµ ¾ÈÇÑ´Ù.)</p>
-
- <p><code>www.abc.dom</code>ÀÇ ÁÖ¼Ò°¡ 10.0.0.1À̶ó°í °¡Á¤ÇÏÀÚ.
- ±×¸®°í ´ÙÀ½ ¼³Á¤À» º¸¶ó:</p>
-
- <example>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>ÀÌÁ¦ ¾ÆÆÄÄ¡´Â ÀÌ °¡»óÈ£½ºÆ®ÀÇ <code>ServerName</code>À»
- ã±âÀ§ÇØ ¿ªDNS¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¿ªÃ£±â°¡ ½ÇÆÐÇÏ¸é ¾ÆÆÄÄ¡´Â
- °¡»óÈ£½ºÆ®¸¦ ºÎºÐÀûÀ¸·Î ²ö´Ù. (¾ÆÆÄÄ¡ 1.2 ÀÌÀü ¹öÀü¿¡¼­´Â
- ½ÉÁö¾î ¼­¹ö°¡ ºÎÆõµ ¾ÈÇÑ´Ù.) Áï, ÀÌ °æ¿ì À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¶ó¸é °¡»óÈ£½ºÆ®´Â ¿ÏÀüÈ÷ µ¿ÀÛÇÏÁö¾Ê°í, ip±â¹ÝÀ̶ó¸é
- ´ëºÎºÐ µ¿ÀÛÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡°¡ ¼­¹ö¸íÀ» Æ÷ÇÔÇÏ¿© ¼­¹öÀÇ
- Àüü URLÀ» ¸¸µé¾î¾ß ÇÑ´Ù¸é Á¤»óÀûÀÎ URLÀ» ¸¸µéÁö ¸øÇÑ´Ù.</p>
-
- <p>¾Æ·¡ °æ¿ì ÀÌ µÎ°¡Áö ¹®Á¦°¡ ¾ø´Ù.</p>
-
- <example>
- &lt;VirtualHost 10.0.0.1&gt; <br />
- ServerName www.abc.dom <br />
- ServerAdmin webgirl@abc.dom <br />
- DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt;
- </example>
- </section>
-
- <section id="denial">
- <title>¼­ºñ½º°ÅºÎ (Denial of Service)</title>
-
- <p>(ÃÖ¼ÒÇÑ) µÎ°¡Áö Á¾·ùÀÇ ¼­ºñ½º°ÅºÎ°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
- ¾ÆÆÄÄ¡ 1.2 ÀÌÀü ¹öÀüÀÇ °æ¿ì ¾î¶² °¡»óÈ£½ºÆ®¿¡¼­¶óµµ
- À§¿¡¼­ ¸»ÇÑ µÎ DNS °Ë»öÀÌ ½ÇÆÐÇÏ¸é ¼­¹ö°¡ ÄÑÁöÁöµµ ¾Ê´Â´Ù.
- DNS°¡ ´ç½ÅÀÇ ±ÇÇÑ ¹ÛÀÇ ¹®Á¦ÀÏ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î,
- <code>abc.dom</code>ÀÌ °í°´ »çÀÌÆ®ÀÌ°í °í°´ÀÌ ÀÚ½ÅÀÇ DNS¸¦
- °ü¸®ÇÑ´Ù¸é, <code>www.abc.dom</code> ·¹Äڵ带 Áö¿ì±â¸¸ Çصµ
- (1.2 ÀÌÀü) ¼­¹ö´Â ½ÃÀÛÇÏÁö ¸øÇÑ´Ù.</p>
-
- <p>ÈξÀ ´õ ±³È°ÇÑ ¹æ¹ýµµ ÀÖ´Ù. ´ÙÀ½ ¼³Á¤À» »ìÆ캸ÀÚ:</p>
-
- <example>
- &lt;VirtualHost www.abc.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webgirl@abc.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/abc <br />
- &lt;/VirtualHost&gt; <br />
- <br />
- &lt;VirtualHost www.def.dom&gt; <br />
- &nbsp;&nbsp;ServerAdmin webguy@def.dom <br />
- &nbsp;&nbsp;DocumentRoot /www/def <br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>´ç½ÅÀÌ <code>www.abc.dom</code>¿¡ 10.0.0.1,
- <code>www.def.dom</code>¿¡ 10.0.0.2¸¦ ÇÒ´çÇß´Ù°í ÇÏÀÚ.
- ¶Ç, <code>def.dom</code>Àº ÀÚü DNS¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤ÇÏÀÚ.
- ÀÌ ¼³Á¤°ú ÇÔ²² <code>def.dom</code>À» <code>abc.dom</code>À¸·Î
- °¡´Â ¸ðµç Åë½ÅÀ» °¡·Îç ¼ö ÀÖ´Â Àå¼Ò¿¡ µÎ¾ú´Ù. ±×·¸´Ù¸é ±×µéÀº
- <code>www.def.dom</code>À» 10.0.0.1·Î ¼³Á¤Çϱ⸸ ÇÏ¸é µÈ´Ù.
- ±×µéÀÌ ÀÚü DNS¸¦ »ç¿ëÇϱ⶧¹®¿¡ ´ç½ÅÀº ±×µéÀÌ ¿øÇϴµ¥·Î
- <code>www.def.dom</code> ·¹Äڵ带 ¼³Á¤ÇÏ´Â °ÍÀ» ¸·À» ¼ö
- ¾ø´Ù.</p>
-
- <p>(»ç¿ëÀÚ°¡ <code>http://www.abc.dom/whatever</code> Çü½ÄÀÇ
- URLÀ» ÀÔ·ÂÇÏ´Â °æ¿ì¸¦ Æ÷ÇÔÇÏ¿©) 10.0.0.1·Î ¿À´Â ¸ðµç ¿äûÀ»
- <code>def.dom</code> °¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÏ°Ô µÈ´Ù. ¿Ö ÀÌ·±
- ÀÏÀÌ ÀϾ´ÂÁö ÀÌÇØÇÏ·Á¸é ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô °¡»óÈ£½ºÆ®·Î
- ¿À´Â ¿äûÀ» ó¸®ÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀÌ ÇÊ¿äÇÏ´Ù.
- <a href="vhosts/details.html">¿©±â</a>¿¡ ´ë°­ ¼³¸íµÇÀÖ´Ù.</p>
- </section>
-
- <section id="main">
- <title>"ÁÖ¼­¹ö" ÁÖ¼Ò</title>
-
- <p>¾ÆÆÄÄ¡ 1.1¿¡¼­ <a href="vhosts/name-based.html">À̸§±â¹Ý
- °¡»óÈ£½ºÆ® Áö¿ø</a>ÀÌ Æ÷ÇԵǾú±â¶§¹®¿¡ ¾ÆÆÄÄ¡´Â À¥¼­¹ö¸¦
- ½ÇÇàÇϴ ȣ½ºÆ®ÀÇ IP ÁÖ¼Ò(µé)¸¦ ¾Ë ÇÊ¿ä°¡ »ý°å´Ù. ÀÌ ÁÖ¼Ò´Â
- (ÀÖ´Ù¸é) Àü¿ª <directive module="core">ServerName</directive>
- ȤÀº C ÇÔ¼ö <code>gethostname</code>À¸·Î (¸í·ÉÇÁ·ÒÇÁÆ®¿¡
- "hostname"À» ÀÔ·ÂÇßÀ»¶§¿Í °°Àº °á°ú) ¾ò´Â´Ù. ±×·¯¸é ÀÌ ÁÖ¼Ò·Î
- DNS °Ë»öÀ» ÇÑ´Ù. ÇöÀç ÀÌ °Ë»öÀº ÇÇÇÒ ¼ö ¾ø´Ù.</p>
-
- <p>DNS ¼­¹ö°¡ Á׾ ÀÌ °Ë»öÀÌ ½ÇÆÐÇÒ °Í °°´Ù¸é
- <code>/etc/hosts</code>¿¡ È£½ºÆ®¸íÀ» Áý¾î³ÖÀ» ¼ö ÀÖ´Ù.
- (ÄÄÇ»ÅÍ°¡ Á¤»óÀûÀ¸·Î ºÎÆõǾú´Ù¸é ¾Æ¸¶ ÀÌ¹Ì µé¾îÀÖÀ» °ÍÀÌ´Ù.)
- ±×¸®°í DNS°¡ ½ÇÆÐÇÏ¸é ¼­¹ö°¡ <code>/etc/hosts</code>¸¦
- »ç¿ëÇÏ´ÂÁö È®ÀÎÇ϶ó. »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦¿¡ µû¶ó
- <code>/etc/resolv.conf</code> ȤÀº <code>/etc/nsswitch.conf</code>¸¦
- ¼öÁ¤ÇÏ¸é µÉ °ÍÀÌ´Ù.</p>
-
- <p>¼­¹ö°¡ ¾î¶² ÀÌÀ¯¿¡¼­°Ç DNS¸¦ °Ë»öÇÏ¸é ¾ÈµÈ´Ù¸é
- <code>HOSTRESORDER</code> ȯ°æº¯¼ö¸¦ "local"·Î ¼³Á¤ÇÏ°í
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. <module>mod_env</module>¸¦
- »ç¿ëÇÏ¿© ȯ°æÀ» º¯°æÇÏÁö ¾Ê´Â´Ù¸é ÀÌ È¯°æº¯¼ö´Â
- CGI¿¡µµ ¿µÇâÀ» ÁØ´Ù. ¿î¿µÃ¼Á¦ÀÇ manpage³ª FAQ¸¦ Âü°íÇÏ´Â
- °ÍÀÌ ÁÁ´Ù.</p>
- </section>
-
- <section id="tips">
- <title>ÀÌ ¹®Á¦¸¦ ÇÇÇϱâÀ§ÇÑ ÆÁ</title>
-
- <ul>
- <li>
- <directive module="core">VirtualHost</directive>¿¡ IP
- ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó
- </li>
-
- <li>
- <directive module="mpm_common">Listen</directive>¿¡
- IP ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó
- </li>
-
- <li>
- ¸ðµç °¡»óÈ£½ºÆ®´Â ¸í½ÃÀûÀ¸·Î
- <directive module="core">ServerName</directive>À»
- °¡Áö°Ô Ç϶ó
- </li>
-
- <li>¾î¶² ÆäÀÌÁöµµ ¼­ºñ½ºÇÏÁö¾Ê´Â
- <code>&lt;VirtualHost _default_:*&gt;</code> ¼­¹ö¸¦
- ¸¸µé¾î¶ó</li>
- </ul>
- </section>
-
- <section id="appendix">
- <title>ºÎ·Ï: ¾ÕÀ¸·Î´Â</title>
-
- <p>DNS¿Í °ü·ÃµÈ »óȲÀº ¸Å¿ì ¹Ù¶÷Á÷ÇÏÁö ¸øÇÏ´Ù. ¾ÆÆÄÄ¡ 1.2¿¡¼­
- ¿ì¸®´Â DNS°¡ ½ÇÆÐÇÑ °æ¿ì¿¡µµ ÃÖ¼ÒÇÑ ¼­¹ö°¡ ÄÑÁöµµ·Ï ³ë·ÂÇßÁö¸¸
- °á°ú´Â ³ª»¦´Ù. ¾î·µç ¼³Á¤ÆÄÀÏ¿¡ Á÷Á¢ IP ÁÖ¼Ò¸¦ ¿ä±¸ÇÏ´Â
- °ÍÀº ¹øÈ£¸¦ ´Ù½Ã ¼³Á¤ÇؾßÇÒ ¿äÁò ÀÎÅͳݿ¡ ¸Å¿ì ¹Ù¶÷Á÷ÇÏÁö
- ¸øÇÏ´Ù.</p>
-
- <p>À§¿¡¼­ ¼³¸íÇÑ ¼­ºñ½ºµµµÏ °ø°ÝÀ» ¸·´Â ÇÑ°¡Áö ¹æ¹ýÀº °Ë»öÇÑ
- IP ÁÖ¼Ò¿¡ ´Ù½Ã ¿ªDNS °Ë»öÀ» ÇÏ¿© µÎ À̸§À» ºñ±³ÇÏ´Â °ÍÀÌ´Ù.
- ¼­·Î ´Ù¸¥ °æ¿ì °¡»óÈ£½ºÆ®¸¦ °¡µ¿ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ÀÌ ¹æ¹ýÀº
- ¿ªDNS°¡ ¿Ã¹Ù·Î ¼³Á¤µÇ¾ß ÇÑ´Ù. (FTP ¼­¹ö³ª TCP wrapper°¡
- "Áߺ¹-¿ª" DNS °Ë»öÀ» ÀÚÁÖ »ç¿ëÇϱ⶧¹®¿¡ ´ëºÎºÐÀÇ °ü¸®ÀÚ¿¡°Ô
- Àͼ÷ÇÒ °ÍÀÌ´Ù.)</p>
-
- <p>¾î·µç IP ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö¾ÊÀ¸¸é DNS°¡ ½ÇÆÐÇÑ °æ¿ì °¡»óÈ£½ºÆ®
- À¥¼­¹ö¸¦ ¹ÏÀ» ¼ö ÀÖ°Ô ½ÃÀÛÇÒ ¼ö ¾ø´Ù. ¼³Á¤ÀÇ ÀϺθ¦ ¹«½ÃÇÏ´Â
- °Í°ú °°Àº ºÎºÐÀûÀÎ ÇØ°áÃ¥Àº À¥¼­¹ö Àüü¸¦ ½ÃÀÛÇÏÁö¾Ê´Â °Íº¸´Ù
- ´õ ³ª»Ü ¼öµµ ÀÖ´Ù.</p>
-
- <p>HTTP/1.1ÀÌ ³ª¿Ô°í ºê¶ó¿ìÀú¿Í ÇÁ·Ï½Ã°¡ <code>Host</code>
- Çì´õ¸¦ º¸³»±â ½ÃÀÛÇßÀ¸¹Ç·Î IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ¿ÏÀüÈ÷
- »ç¿ëÇÏÁö¾Ê´Â °ÍÀÌ °¡´ÉÇØÁú °ÍÀÌ´Ù. ±×·¯¸é À¥¼­¹ö´Â ¼³Á¤Áß¿¡¼­
- DNS °Ë»öÀ» ÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø´Ù. ±×·¯³ª 1997³â 3¿ù¿¡´Â Áß¿äÇÑ
- À¥¼­¹ö¿¡ Æ÷ÇÔÇÒ Á¤µµ·Î À̸§±â¹Ý °¡»óÈ£½ºÆ®°¡ ³Î¸® »ç¿ëµÇÁö
- ¾Ê¾Ò´Ù.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/dns-caveats.xml.meta b/docs/manual/dns-caveats.xml.meta
deleted file mode 100644
index 719ba58ac5..0000000000
--- a/docs/manual/dns-caveats.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>dns-caveats</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/dso.html b/docs/manual/dso.html
deleted file mode 100644
index 3d86148e79..0000000000
--- a/docs/manual/dso.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: dso.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: dso.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: dso.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/dso.html.en b/docs/manual/dso.html.en
deleted file mode 100644
index 201c590e41..0000000000
--- a/docs/manual/dso.html.en
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Dynamic Shared Object (DSO) Support - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Dynamic Shared Object (DSO) Support</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/dso.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The Apache HTTP Server is a modular program where the
- administrator can choose the functionality to include in the
- server by selecting a set of modules. The modules can be
- statically compiled into the <code>httpd</code> binary when the
- server is built. Alternatively, modules can be compiled as
- Dynamic Shared Objects (DSOs) that exist separately from the
- main <code>httpd</code> binary file. DSO modules may be
- compiled at the time the server is built, or they may be
- compiled and added at a later time using the Apache Extension
- Tool (<a href="programs/apxs.html">apxs</a>).</p>
-
- <p>This document describes how to use DSO modules as well as
- the theory behind their use.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Implementation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#usage">Usage Summary</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#background">Background</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#advantages">Advantages and Disadvantages</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="implementation" id="implementation">Implementation</a></h2>
-
-<table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
-
- <p>The DSO support for loading individual Apache modules is based
- on a module named <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> which must be statically
- compiled into the Apache core. It is the only module besides
- <code class="module"><a href="./mod/core.html">core</a></code> which cannot be put into a DSO
- itself. Practically all other distributed Apache modules can then
- be placed into a DSO by individually enabling the DSO build for
- them via <code>configure</code>'s
- <code>--enable-<em>module</em>=shared</code> option as discussed
- in the <a href="install.html">install documentation</a>. After a
- module is compiled into a DSO named <code>mod_foo.so</code> you
- can use <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>'s <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> command in your
- <code>httpd.conf</code> file to load this module at server startup
- or restart.</p>
-
- <p>To simplify this creation of DSO files for Apache modules
- (especially for third-party modules) a new support program
- named <a href="programs/apxs.html">apxs</a> (<em>APache
- eXtenSion</em>) is available. It can be used to build DSO based
- modules <em>outside of</em> the Apache source tree. The idea is
- simple: When installing Apache the <code>configure</code>'s
- <code>make install</code> procedure installs the Apache C
- header files and puts the platform-dependent compiler and
- linker flags for building DSO files into the <code>apxs</code>
- program. This way the user can use <code>apxs</code> to compile
- his Apache module sources without the Apache distribution
- source tree and without having to fiddle with the
- platform-dependent compiler and linker flags for DSO
- support.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">Usage Summary</a></h2>
-
- <p>To give you an overview of the DSO features of Apache 2.0,
- here is a short and concise summary:</p>
-
- <ol>
- <li>
- Build and install a <em>distributed</em> Apache module, say
- <code>mod_foo.c</code>, into its own DSO
- <code>mod_foo.so</code>:
-
-<div class="example"><p><code>
-$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- Build and install a <em>third-party</em> Apache module, say
- <code>mod_foo.c</code>, into its own DSO
- <code>mod_foo.so</code>:
-
-<div class="example"><p><code>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- Configure Apache for <em>later installation</em> of shared
- modules:
-
-<div class="example"><p><code>
-$ ./configure --enable-so<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- Build and install a <em>third-party</em> Apache module, say
- <code>mod_foo.c</code>, into its own DSO
- <code>mod_foo.so</code> <em>outside of</em> the Apache
- source tree using <a href="programs/apxs.html">apxs</a>:
-
-<div class="example"><p><code>
-$ cd /path/to/3rdparty<br />
-$ apxs -c mod_foo.c<br />
-$ apxs -i -a -n foo mod_foo.la
-</code></p></div>
- </li>
- </ol>
-
- <p>In all cases, once the shared module is compiled, you must
- use a <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- directive in <code>httpd.conf</code> to tell Apache to activate
- the module.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="background" id="background">Background</a></h2>
-
- <p>On modern Unix derivatives there exists a nifty mechanism
- usually called dynamic linking/loading of <em>Dynamic Shared
- Objects</em> (DSO) which provides a way to build a piece of
- program code in a special format for loading it at run-time
- into the address space of an executable program.</p>
-
- <p>This loading can usually be done in two ways: Automatically
- by a system program called <code>ld.so</code> when an
- executable program is started or manually from within the
- executing program via a programmatic system interface to the
- Unix loader through the system calls
- <code>dlopen()/dlsym()</code>.</p>
-
- <p>In the first way the DSO's are usually called <em>shared
- libraries</em> or <em>DSO libraries</em> and named
- <code>libfoo.so</code> or <code>libfoo.so.1.2</code>. They
- reside in a system directory (usually <code>/usr/lib</code>)
- and the link to the executable program is established at
- build-time by specifying <code>-lfoo</code> to the linker
- command. This hard-codes library references into the executable
- program file so that at start-time the Unix loader is able to
- locate <code>libfoo.so</code> in <code>/usr/lib</code>, in
- paths hard-coded via linker-options like <code>-R</code> or in
- paths configured via the environment variable
- <code>LD_LIBRARY_PATH</code>. It then resolves any (yet
- unresolved) symbols in the executable program which are
- available in the DSO.</p>
-
- <p>Symbols in the executable program are usually not referenced
- by the DSO (because it's a reusable library of general code)
- and hence no further resolving has to be done. The executable
- program has no need to do anything on its own to use the
- symbols from the DSO because the complete resolving is done by
- the Unix loader. (In fact, the code to invoke
- <code>ld.so</code> is part of the run-time startup code which
- is linked into every executable program which has been bound
- non-static). The advantage of dynamic loading of common library
- code is obvious: the library code needs to be stored only once,
- in a system library like <code>libc.so</code>, saving disk
- space for every program.</p>
-
- <p>In the second way the DSO's are usually called <em>shared
- objects</em> or <em>DSO files</em> and can be named with an
- arbitrary extension (although the canonical name is
- <code>foo.so</code>). These files usually stay inside a
- program-specific directory and there is no automatically
- established link to the executable program where they are used.
- Instead the executable program manually loads the DSO at
- run-time into its address space via <code>dlopen()</code>. At
- this time no resolving of symbols from the DSO for the
- executable program is done. But instead the Unix loader
- automatically resolves any (yet unresolved) symbols in the DSO
- from the set of symbols exported by the executable program and
- its already loaded DSO libraries (especially all symbols from
- the ubiquitous <code>libc.so</code>). This way the DSO gets
- knowledge of the executable program's symbol set as if it had
- been statically linked with it in the first place.</p>
-
- <p>Finally, to take advantage of the DSO's API the executable
- program has to resolve particular symbols from the DSO via
- <code>dlsym()</code> for later use inside dispatch tables
- <em>etc.</em> In other words: The executable program has to
- manually resolve every symbol it needs to be able to use it.
- The advantage of such a mechanism is that optional program
- parts need not be loaded (and thus do not spend memory) until
- they are needed by the program in question. When required,
- these program parts can be loaded dynamically to extend the
- base program's functionality.</p>
-
- <p>Although this DSO mechanism sounds straightforward there is
- at least one difficult step here: The resolving of symbols from
- the executable program for the DSO when using a DSO to extend a
- program (the second way). Why? Because "reverse resolving" DSO
- symbols from the executable program's symbol set is against the
- library design (where the library has no knowledge about the
- programs it is used by) and is neither available under all
- platforms nor standardized. In practice the executable
- program's global symbols are often not re-exported and thus not
- available for use in a DSO. Finding a way to force the linker
- to export all global symbols is the main problem one has to
- solve when using DSO for extending a program at run-time.</p>
-
- <p>The shared library approach is the typical one, because it
- is what the DSO mechanism was designed for, hence it is used
- for nearly all types of libraries the operating system
- provides. On the other hand using shared objects for extending
- a program is not used by a lot of programs.</p>
-
- <p>As of 1998 there are only a few software packages available
- which use the DSO mechanism to actually extend their
- functionality at run-time: Perl 5 (via its XS mechanism and the
- DynaLoader module), Netscape Server, <em>etc.</em> Starting
- with version 1.3, Apache joined the crew, because Apache
- already uses a module concept to extend its functionality and
- internally uses a dispatch-list-based approach to link external
- modules into the Apache core functionality. So, Apache is
- really predestined for using DSO to load its modules at
- run-time.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advantages" id="advantages">Advantages and Disadvantages</a></h2>
-
- <p>The above DSO based features have the following
- advantages:</p>
-
- <ul>
- <li>The server package is more flexible at run-time because
- the actual server process can be assembled at run-time via
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- <code>httpd.conf</code> configuration commands instead of
- <code>configure</code> options at build-time. For instance
- this way one is able to run different server instances
- (standard &amp; SSL version, minimalistic &amp; powered up
- version [mod_perl, PHP3], <em>etc.</em>) with only one Apache
- installation.</li>
-
- <li>The server package can be easily extended with
- third-party modules even after installation. This is at least
- a great benefit for vendor package maintainers who can create
- a Apache core package and additional packages containing
- extensions like PHP3, mod_perl, mod_fastcgi,
- <em>etc.</em></li>
-
- <li>Easier Apache module prototyping because with the
- DSO/<code>apxs</code> pair you can both work outside the
- Apache source tree and only need an <code>apxs -i</code>
- command followed by an <code>apachectl restart</code> to
- bring a new version of your currently developed module into
- the running Apache server.</li>
- </ul>
-
- <p>DSO has the following disadvantages:</p>
-
- <ul>
- <li>The DSO mechanism cannot be used on every platform
- because not all operating systems support dynamic loading of
- code into the address space of a program.</li>
-
- <li>The server is approximately 20% slower at startup time
- because of the symbol resolving overhead the Unix loader now
- has to do.</li>
-
- <li>The server is approximately 5% slower at execution time
- under some platforms because position independent code (PIC)
- sometimes needs complicated assembler tricks for relative
- addressing which are not necessarily as fast as absolute
- addressing.</li>
-
- <li>Because DSO modules cannot be linked against other
- DSO-based libraries (<code>ld -lfoo</code>) on all platforms
- (for instance a.out-based platforms usually don't provide
- this functionality while ELF-based platforms do) you cannot
- use the DSO mechanism for all types of modules. Or in other
- words, modules compiled as DSO files are restricted to only
- use symbols from the Apache core, from the C library
- (<code>libc</code>) and all other dynamic or static libraries
- used by the Apache core, or from static library archives
- (<code>libfoo.a</code>) containing position independent code.
- The only chances to use other code is to either make sure the
- Apache core itself already contains a reference to it or
- loading the code yourself via <code>dlopen()</code>.</li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/dso.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/dso.html.ja.euc-jp b/docs/manual/dso.html.ja.euc-jp
deleted file mode 100644
index 271aa7554e..0000000000
--- a/docs/manual/dso.html.ja.euc-jp
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È (DSO) ¥µ¥Ý¡¼¥È - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>ưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È (DSO) ¥µ¥Ý¡¼¥È</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dso.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Apache HTTP ¥µ¡¼¥Ð¤Ï¥â¥¸¥å¡¼¥ë²½¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Ç¡¢
- ´ÉÍý¼Ô¤¬¥â¥¸¥å¡¼¥ë¤òÁªÂò¤¹¤ë¤³¤È¤Ç¥µ¡¼¥Ð¤ËÁȤ߹þ¤àµ¡Ç½¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥â¥¸¥å¡¼¥ë¤Ï¥µ¡¼¥Ð¤¬¥Ó¥ë¥É¤µ¤ì¤ë¤È¤­¤Ë <code>httpd</code> ¥Ð¥¤¥Ê¥ê¤Ë
- ÀÅŪ¤ËÁȤ߹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤â¤·¤¯¤Ï¡¢<code>httpd</code> ¥Ð¥¤¥Ê¥ê¤È¤Ï
- Ê̤˸ºß¤¹¤ëưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È (ÌõÃí: Dynamic Shared Object)
- (DSO) ¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤â
- ¤Ç¤­¤Þ¤¹¡£DSO ¥â¥¸¥å¡¼¥ë¤Ï¥µ¡¼¥Ð¤¬¥Ó¥ë¥É¤µ¤ì¤ë¤È¤­¤Ë¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤ê¡¢
- Apache ³ÈÄ¥¥Ä¡¼¥ë (<a href="programs/apxs.html">apxs</a>) ¤ò
- »È¤Ã¤Æ¸å¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤ÆÄɲä·¤¿¤ê¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Îʸ½ñ¤Ï DSO ¥â¥¸¥å¡¼¥ë¤Î»È¤¤Êý¤È¡¢»ÅÁȤߤˤĤ¤¤Æ
- ÀâÌÀ¤·¤Þ¤¹¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">¼ÂÁõ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#usage">»ÈÍÑË¡¤Î³µÍ×</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#background">ÇØ·Ê</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#advantages">ÍøÅÀ¤È·çÅÀ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="implementation" id="implementation">¼ÂÁõ</a></h2>
-
-<table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
-
- <p>¸Ä¡¹¤Î Apache ¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤¹¤ë¤¿¤á¤Î DSO ¥µ¥Ý¡¼¥È¤Ï
- <code class="module"><a href="./mod/mod_so.c.html">mod_so.c</a></code> ¤È¤¤¤¦¥â¥¸¥å¡¼¥ë¤Îµ¡Ç½¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Î¥â¥¸¥å¡¼¥ë ¤Ï Apache ¤Î¥³¥¢¤ËÀÅŪ¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤½¤ì¤Ï <code class="module"><a href="./mod/core.c.html">core.c</a></code> °Ê³°¤Ç¤Ï DSO ¤Ë¤Ç¤­¤Ê¤¤Í£°ì¤Î
- ¥â¥¸¥å¡¼¥ë¤Ç¤¹¡£»ö¼Â¾å¡¢Â¾¤Î¤¹¤Ù¤Æ¤Î Apache ¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢
- <a href="install.html">¥¤¥ó¥¹¥È¡¼¥ë¤Îʸ½ñ</a>¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢
- <code>configure</code> ¤Î
- <code>--enable-<em>module</em>=shared</code> ¥ª¥×¥·¥ç¥ó¤Ç¤½¤ì¤¾¤ì¤ò
- DSO ¥Ó¥ë¥É¤Ë¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢DSO ¥â¥¸¥å¡¼¥ë¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code>mod_foo.so</code> ¤Î¤è¤¦¤Ê DSO ¤Ë¥â¥¸¥å¡¼¥ë¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ì¤Ð¡¢
- <code>httpd.conf</code> ¥Õ¥¡¥¤¥ëÃæ¤Ç <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> ¤Î
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤³¤È¤Ç¥µ¡¼¥Ð¤Îµ¯Æ°¤äºÆµ¯Æ°»þ¤Ë¤³¤Î¥â¥¸¥å¡¼¥ë¤ò
- ¥í¡¼¥É¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Apache ¥â¥¸¥å¡¼¥ëÍѤΠ(Æä˥µ¡¼¥É¥Ñ¡¼¥Æ¥£¥â¥¸¥å¡¼¥ë¤Î) DSO ¥Õ¥¡¥¤¥ë¤Î
- ºîÀ®¤ò´Êñ¤Ë¤¹¤ë¤¿¤á¤Ë¡¢<a href="programs/apxs.html">apxs</a>
- (<em>APache eXtenSion</em>) ¤È¤¤¤¦¿·¤·¤¤¥µ¥Ý¡¼¥È¥×¥í¥°¥é¥à¤¬¤¢¤ê¤Þ¤¹¡£
- Apache ¤Î¥½¡¼¥¹¥Ä¥ê¡¼¤Î<em>³°¤Ç</em> DSO ¥â¥¸¥å¡¼¥ë¤ò¥Ó¥ë¥É¤¹¤ë¤¿¤á¤Ë
- »È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£È¯ÁÛ¤Ïñ½ã¤Ç¤¹: Apache ¤Î¥¤¥ó¥¹¥È¡¼¥ë»þ¤Î
- <code>configure</code>¡¢<code>make install</code> ¤Î¤È¤­¤Ë Apache ¤Î
- C ¥Ø¥Ã¥À¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¡¢DSO ¥Ó¥ë¥ÉÍѤΥץé¥Ã¥È¥Õ¥©¡¼¥à°Í¸¤Î
- ¥³¥ó¥Ñ¥¤¥é¤È¥ê¥ó¥«¤Î¥Õ¥é¥°¤ò <code>apxs</code> ¥×¥í¥°¥é¥à¤ËÄɲä·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥æ¡¼¥¶¤¬ Apache ¤ÎÇÛÉÛ¥½¡¼¥¹¥Ä¥ê¡¼¤Ê¤·¤Ç¡¢¤µ¤é¤Ë
- DSO ¥µ¥Ý¡¼¥È¤Î¤¿¤á¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à°Í¸¤Î¥³¥ó¥Ñ¥¤¥é¤ä¥ê¥ó¥«¤Î
- ¥Õ¥é¥°¤ò¤¤¤¸¤ë¤³¤È¤Ê¤¯ Apache ¤Î¥â¥¸¥å¡¼¥ë¤Î¥½¡¼¥¹¤ò¥³¥ó¥Ñ¥¤¥ë
- ¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">»ÈÍÑË¡¤Î³µÍ×</a></h2>
-
- <p>Apache 2.0 ¤Î DSO µ¡Ç½¤Î³µÎ¬¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¤¿¤á¤Î¡¢
- û¤¯´Ê·é¤Ê³µÍפǤ¹:</p>
-
- <ol>
- <li>
- <em>ÇÛÉÛ¤µ¤ì¤Æ¤¤¤ë</em> Apache ¥â¥¸¥å¡¼¥ë¡¢²¾¤Ë <code>mod_foo.c</code>
- ¤È¤·¤Æ¡¢¤½¤ì¤ò DSO <code>mod_foo.so</code> ¤Ë¥Ó¥ë¥É¡¢¥¤¥ó¥¹¥È¡¼¥ë:
-
-<div class="example"><p><code>
-$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- <em>¥µ¡¼¥É¥Ñ¡¼¥Æ¥£</em> Apache ¥â¥¸¥å¡¼¥ë¡¢²¾¤Ë <code>mod_foo.c</code>
- ¤È¤·¤Æ¡¢¤½¤ì¤ò DSO <code>mod_foo.so</code> ¤Ë¥Ó¥ë¥É¡¢¥¤¥ó¥¹¥È¡¼¥ë:
-
-<div class="example"><p><code>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- ¶¦Í­¥â¥¸¥å¡¼¥ë¤Î <em>¸å¡¹¤Î¥¤¥ó¥¹¥È¡¼¥ë</em> ¤Î¤¿¤á¤Ë
- Apache ¤òÀßÄê:
-
-<div class="example"><p><code>
-$ ./configure --enable-so<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- <em>¥µ¡¼¥É¥Ñ¡¼¥Æ¥£</em> Apache ¥â¥¸¥å¡¼¥ë¡¢²¾¤Ë <code>mod_foo.c</code>
- ¤È¤·¤Æ¡¢¤½¤ì¤ò <a href="programs/apxs.html">apxs</a> ¤ò»È¤Ã¤Æ
- Apache ¥½¡¼¥¹¥Ä¥ê¡¼¤Î<em>³°¤Ç</em> DSO ¤Ë¥Ó¥ë¥É¡¢¥¤¥ó¥¹¥È¡¼¥ë:
-
-<div class="example"><p><code>
-$ cd /path/to/3rdparty<br />
-$ apxs -c mod_foo.c<br />
-$ apxs -i -a -n foo mod_foo.la
-</code></p></div>
- </li>
- </ol>
-
- <p>¤É¤Î¾ì¹ç¤Ë¤ª¤¤¤Æ¤â¡¢¶¦Í­¥â¥¸¥å¡¼¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¸å¤Ç¡¢
- <code>httpd.conf</code> ¤Ç
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ Apache ¤¬¥â¥¸¥å¡¼¥ë¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë
- ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="background" id="background">ÇØ·Ê</a></h2>
-
- <p>ºÇ¶á¤Î Unix ·Ï¤Î OS ¤Ë¤Ï <em>ưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È</em> (DSO)
- ¤ÎưŪ¥ê¥ó¥¯/¥í¡¼¥É¤È¤¤¤¦µ¤¤Î¤­¤¤¤¿µ¡¹½¤¬
- ¸ºß¤·¤Þ¤¹¡£¤³¤ì¤Ï¡¢¼Â¹Ô»þ¤Ë¥×¥í¥°¥é¥à¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë
- ¥í¡¼¥É¤Ç¤­¤ë¤è¤¦¤ÊÆÃÊ̤ʷÁ¼°¤Ç¥×¥í¥°¥é¥à¤ò¥Ó¥ë¥É¤¹¤ë¤³¤È¤ò
- ²Äǽ¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥í¡¼¥É¤ÏÆó¤Ä¤ÎÊýË¡¤Ç¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹: ¼Â¹Ô¥×¥í¥°¥é¥à¤¬
- µ¯Æ°¤µ¤ì¤¿¤È¤­¤Ë <code>lod.so</code> ¤È¤¤¤¦¥·¥¹¥Æ¥à¥×¥í¥°¥é¥à
- ¤Ë¤è¤ê¼«Æ°Åª¤Ë¹Ô¤Ê¤ï¤ì¤ëÊýË¡¤È¡¢¼Â¹Ô¥×¥í¥°¥é¥àÃ椫¤é¡¢¥·¥¹¥Æ¥à¥³¡¼¥ë
- <code>dlopen()/dlsym()</code> ¤Ë¤è¤ë Unix ¥í¡¼¥À¤Ø¤Î
- ¥×¥í¥°¥é¥à¥·¥¹¥Æ¥à¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»È¤Ã¤Æ¼êÆ°¤Ç¹Ô¤Ê¤¦ÊýË¡¤È¤¬
- ¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>ºÇ½é¤ÎÊýË¡¤Ç¤Ï DSO ¤ÏÉáÄ̤Ï<em>¶¦Í­¥é¥¤¥Ö¥é¥ê</em>¤ä <em>DSO
- ¥é¥¤¥Ö¥é¥ê</em> ¤È¸Æ¤Ð¤ì¤Æ¤¤¤Æ¡¢DSO ¤Î̾Á°¤Ï
- <code>libfoo.so</code> ¤ä <code>libfoo.so.1.2</code> ¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ì¤é¤Ï¥·¥¹¥Æ¥à¥Ç¥£¥ì¥¯¥È¥ê (Ä̾ï <code>/usr/lib</code>) ¤Ë¸ºß¤·¡¢
- ¼Â¹Ô¥×¥í¥°¥é¥à¤Ø¤Î¥ê¥ó¥¯¤Ï¥Ó¥ë¥É»þ¤Ë <code>-lfoo</code> ¤ò¥ê¥ó¥«¤Ë
- »ØÄꤹ¤ë¤³¤È¤Ç³ÎΩ¤µ¤ì¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¥é¥¤¥Ö¥é¥ê¤Ø¤Î»²¾È¤¬¼Â¹Ô¥×¥í¥°¥é¥à¤Î
- ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤Þ¤ì¤Æ¡¢µ¯Æ°»þ¤Ë Unix ¤Î¥í¡¼¥À¤¬ <code>/usr/lib</code> ¤ä¡¢
- ¥ê¥ó¥«¤Î <code>-R</code> ¤Î¤è¤¦¤Ê¥ª¥×¥·¥ç¥ó¤Ë¤è¤ê¥Ï¡¼¥É¥³¡¼¥É¤µ¤ì¤¿¥Ñ¥¹¡¢
- ´Ä¶­ÊÑ¿ô <code>LD_LIBRARY_PATH</code> ¤Ë¤è¤êÀßÄꤵ¤ì¤¿¥Ñ¥¹¡¢¤ÎÃ椫¤é
- <code>libfoo.so</code> ¤Î¾ì½ê¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤ì¤«¤é¡¢
- ¼Â¹Ô¥×¥í¥°¥é¥àÃæ¤Î (¤Þ¤À̤²ò·è¤Î) ¥·¥ó¥Ü¥ë¤ò DSO ¤Ë¤¢¤ë¥·¥ó¥Ü¥ë¤Ç
- ²ò·è¤·¤Þ¤¹¡£</p>
-
- <p>ÉáÄÌ¤Ï¼Â¹Ô¥×¥í¥°¥é¥àÃæ¤Î¥·¥ó¥Ü¥ë¤Ï DSO ¤«¤é¤Ï»²¾È¤µ¤ì¤Þ¤»¤ó
- (DSO ¤Ï°ìÈÌŪ¤Ê¥³¡¼¥É¤Ë¤è¤ëºÆÍøÍѲÄǽ¤Ê¥é¥¤¥Ö¥é¥ê¤Ç¤¹¤Î¤Ç)¡£
- ¤Ç¤¹¤«¤é¡¢¤µ¤é¤Ê¤ë¥·¥ó¥Ü¥ë¤Î²ò·è¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£
- ¥·¥ó¥Ü¥ë¤Ï Unix ¥í¡¼¥À¤Ë¤è¤ê´°Á´¤Ê²ò·è¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¤Î¤Ç¡¢¼Â¹Ô¥Õ¥¡¥¤¥ë¼«¿È¤Ï
- ²¿¤â¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤»¤ó¡£(¼ÂºÝ¤Î¤È¤³¤í¡¢ÀÅŪ¤Ç¤Ê¤¤ÊýË¡¤Ç¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë
- ¤¹¤Ù¤Æ¤Î¼Â¹Ô¥×¥í¥°¥é¥à¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë³«»ÏÍѤΥ³¡¼¥É¤Î°ìÉô¤Ë
- <code>ld.so</code> ¤òµ¯Æ°¤¹¤ë¥³¡¼¥É¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹)¡£¤è¤¯»È¤ï¤ì¤ë
- ¥é¥¤¥Ö¥é¥ê¤ÎưŪ¥í¡¼¥É¤ÎÍøÅÀ¤ÏÌÀ¤é¤«¤Ç¤¹¡£¥é¥¤¥Ö¥é¥ê¤Î¥³¡¼¥É¤Ï
- ¥·¥¹¥Æ¥à¥é¥¤¥Ö¥é¥ê¤Ë <code>libc.so</code> ¤Î¤è¤¦¤Ë¤·¤Æ°ìÅÙÊݸ¤¹¤ë¤À¤±¤Ç¤è¤¯¡¢
- ¥×¥í¥°¥é¥à¤Î¤¿¤á¤ËɬÍפʥǥ£¥¹¥¯¤ÎÎΰè¤òÀáÌ󤹤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Æó¤Ä¤á¤ÎÊýË¡¤Ç¤Ï DSO ¤ÏÉáÄ̤Ï<em>¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È</em>¤ä
- <em>DSO ¥Õ¥¡¥¤¥ë</em>¤È¸Æ¤Ð¤ì¤Æ¤¤¤Æ¡¢Ç¤°Õ¤Î³ÈÄ¥»Ò¤òÉÕ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹
- (¤¿¤À¤·¡¢É¸½àŪ¤Ê̾Á°¤Ï <code>foo.so</code> ¤Ç¤¹)¡£
- ¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤ÏÄ̾ï¤Ï¥×¥í¥°¥é¥àÀìÍѤΥǥ£¥ì¥¯¥È¥ê¤ËÃÖ¤«¤ì¡¢
- ¤³¤ì¤é¤ò»È¤¦¼Â¹Ô¥×¥í¥°¥é¥à¤Ø¤Î¥ê¥ó¥¯¤Ï¼«Æ°Åª¤Ë¤Ï¤µ¤ì¤Þ¤»¤ó¡£
- ¤Ç¤¹¤Î¤Ç¡¢¼Â¹Ô¥×¥í¥°¥é¥à¤Ï <code>dlopen()</code> ¤ò»È¤Ã¤Æ
- ¼Â¹Ô»þ¤Ë¼êÆ°¤Ç DSO ¤ò¥×¥í¥°¥é¥à¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë¥í¡¼¥É¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î»þÅÀ¤Ç¤Ï¼Â¹Ô¥×¥í¥°¥é¥à¤ËÂФ·¤Æ DSO ¤Î¥·¥ó¥Ü¥ë¤Î²ò·è¤Ï¹Ô¤Ê¤ï¤ì¤Þ¤»¤ó¡£
- ¤·¤«¤·¡¢¤½¤ÎÂå¤ï¤ê¤Ë Unix ¤Î¥í¡¼¥À¤¬ DSO ¤Î (¤Þ¤À̤²ò·è¤Î) ¥·¥ó¥Ü¥ë¤ò
- ¼Â¹Ô¥×¥í¥°¥é¥à¤Ë¤è¤ê¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤¿¥·¥ó¥Ü¥ë¤È´û¤Ë¥í¡¼¥É¤µ¤ì¤¿
- DSO ¥é¥¤¥Ö¥é¥ê¤Ë¤è¤ê¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤¿¥·¥ó¥Ü¥ë (Æäˡ¢¤É¤³¤Ë¤Ç¤â¤¢¤ë
- <code>libc.so</code> ¤Î¤¹¤Ù¤Æ¤Î¥·¥ó¥Ü¥ë) ¤Ç¼«Æ°Åª¤Ë²ò·è¤·¤Þ¤¹¡£
- ¤³¤¦¤¹¤ë¤³¤È¤Ç¡¢DSO ¤ÏºÇ½é¤«¤éÀÅŪ¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤¿¤«¤Î¤è¤¦¤Ë¡¢
- ¼Â¹Ô¥×¥í¥°¥é¥à¤Î¥·¥ó¥Ü¥ë¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>ºÇ¸å¤Ë¡¢DSO ¤Î API ¤òÍøÅÀ¤òÀ¸¤«¤¹¤¿¤á¤Ë¡¢¥×¥í¥°¥é¥à¤Ï
- ¸å¤Ç¥Ç¥£¥¹¥Ñ¥Ã¥Á¥Æ¡¼¥Ö¥ë<em>¤Ê¤É</em>¤Ç¥·¥ó¥Ü¥ë¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¢
- <code>dlsym()</code> ¤ò»È¤Ã¤Æ¤¤¤¯¤Ä¤«¤Î¥·¥ó¥Ü¥ë¤ò²ò·è¤·¤Þ¤¹¡£
- ¤¹¤Ê¤ï¤Á: ¼Â¹Ô¥×¥í¥°¥é¥à¤ÏɬÍפʤ¹¤Ù¤Æ¤Î¥·¥ó¥Ü¥ë¤ò¼êÆ°¤Ç²ò·è¤·¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£¤³¤Îµ¡¹½¤ÎÍøÅÀ¤Ï¥×¥í¥°¥é¥à¤Î¥ª¥×¥·¥ç¥Ê¥ë¤ÊÉôʬ¤Ï
- ɬÍפˤʤë¤Þ¤Ç¥í¡¼¥É¤¹¤ëɬÍפ¬¤Ê¤¤ (¤À¤«¤é¥á¥â¥ê¤â¾ÃÈñ¤·¤Ê¤¤)
- ¤³¤È¤Ç¤¹¡£É¬Íפʤé¤Ð¡¢´ðËÜ¥×¥í¥°¥é¥à¤Îµ¡Ç½¤ò³ÈÄ¥¤¹¤ë¤¿¤á¤Ë
- ¤³¤ì¤é¤ÎÉôʬ¤òưŪ¤Ë¥í¡¼¥É¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î DSO µ¡¹½¤Ï´Êñ¤Ê¤è¤¦¤Ë¸«¤¨¤Þ¤¹¤¬¡¢¾¯¤Ê¤¯¤È¤â°ì¤ÄÆñ¤·¤¤ÅÀ¤¬
- ¤¢¤ê¤Þ¤¹: ¥×¥í¥°¥é¥à¤ò³ÈÄ¥¤¹¤ë¤¿¤á¤Ë DSO ¤ò»È¤Ã¤Æ¤¤¤ë¤È¤­¤Ë¡¢
- DSO ¤¬¼Â¹Ô¥×¥í¥°¥é¥à¤«¤é¥·¥ó¥Ü¥ë¤ò²ò·è¤¹¤ëÅÀ¤Ç¤¹ (ÆóÈÖÌܤÎÊýË¡)¡£
- ¤³¤ì¤Ï¤Ê¤¼¤Ç¤·¤ç¤¦¤«¡£¤½¤ì¤Ï¡¢DSO ¤Î¥·¥ó¥Ü¥ë¤ò¼Â¹Ô¥×¥í¥°¥é¥à¤Î
- ¥·¥ó¥Ü¥ë¤«¤é¡ÖµÕ²ò·è¡×¤¹¤ë¤È¤¤¤¦¤Î¤Ï¥é¥¤¥Ö¥é¥ê¤ÎÀß·×
- (¥é¥¤¥Ö¥é¥ê¤Ï¤½¤ì¤ò»ÈÍѤ¹¤ë¥×¥í¥°¥é¥à¤Î¤³¤È¤Ï²¿¤â
- ÃΤé¤Ê¤¤) ¤ËÈ¿¤·¤Æ¤¤¤Æ¡¢¤³¤Îµ¡Ç½¤Ï¤¹¤Ù¤Æ¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë
- ¤¢¤ë¤ï¤±¤Ç¤Ï¤Ê¤¯¡¢É¸½à²½¤â¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤é¤Ç¤¹¡£
- ¼ÂºÝ¤Ë¤Ï¼Â¹Ô¥×¥í¥°¥é¥à¤Î¥°¥í¡¼¥Ð¥ë¤Ê¥·¥ó¥Ü¥ë¤ÏºÆ¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤ë¤³¤È¤Ï
- ¤¢¤Þ¤ê¤Ê¤¯¡¢DSO ¤«¤é»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£¥ê¥ó¥«¤Ë¥°¥í¡¼¥Ð¥ë¥·¥ó¥Ü¥ë¤¹¤Ù¤Æ¤ò
- ¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë¤è¤¦¤Ë¤µ¤»¤ëÊýË¡¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¡¢¼Â¹Ô»þ¤Ë¥×¥í¥°¥é¥à¤ò
- ³ÈÄ¥¤¹¤ë¤¿¤á¤Ë DSO ¤ò»È¤¦¤È¤­¤Î°ìÈÖ¤ÎÌäÂê¤Ç¤¹¡£</p>
-
- <p>¶¦Í­¥é¥¤¥Ö¥é¥ê¤Î¥¢¥×¥í¡¼¥Á¤¬ÉáÄ̤ÎÊýË¡¤Ç¤¹¡£DSO µ¡¹½¤Ï¤½¤Î¤¿¤á¤Ë
- À߷פµ¤ì¤¿¤â¤Î¤Ç¤¹¤«¤é¡£¤·¤¿¤¬¤Ã¤Æ¡¢¤½¤ÎÊýË¡¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤¬
- Ä󶡤¹¤ë¤Û¤È¤ó¤É¤¹¤Ù¤Æ¤Î¼ïÎà¤Î¥é¥¤¥Ö¥é¥ê¤Ç»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£
- °ìÊý¡¢¥×¥í¥°¥é¥à¤Î³ÈÄ¥¤Î¤¿¤á¤Ë¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È¤ò»ÈÍѤ¹¤ë¡¢¤È¤¤¤¦Êý¤Ï
- ¤¢¤Þ¤ê»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>
-
- <p>1998 ǯ¤Î»þÅÀ¤Ç¡¢¼Â¹Ô»þ¤Ë¼ÂºÝ¤Ëµ¡Ç½³ÈÄ¥¤Î¤¿¤á¤Ë DSO µ¡¹½¤ò»È¤Ã¤Æ¤¤¤ë
- ¥½¥Õ¥È¥¦¥§¥¢¥Ñ¥Ã¥±¡¼¥¸¤Ï¾¯¤·¤À¤±¤Ç¤·¤¿: Perl 5 (XS µ¡¹½¤È DnaLoader ¥â¥¸¥å¡¼¥ë
- ¤Ë¤è¤ë¤â¤Î)¡¢Netscape ¥µ¡¼¥Ð<em>¤Ê¤É</em>¤Ç¤¹¡£Apache ¤Ï¤¹¤Ç¤Ë
- ¥â¥¸¥å¡¼¥ë¤Î³µÇ°¤ò»È¤Ã¤Æµ¡Ç½³ÈÄ¥¤ò¤·¤Æ¤¤¤Æ¡¢ÆâÉôŪ¤Ë¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ê¥¹¥È¤Ë
- ´ð¤Å¤¤¤¿³°Éô¥â¥¸¥å¡¼¥ë¤Î Apache ¥³¥¢µ¡Ç½¤Ø¤Î¥ê¥ó¥¯¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç¡¢
- ¥Ð¡¼¥¸¥ç¥ó 1.3 ¤«¤é¡¢Apache ¤â DSO µ¡¹½¤ò»È¤¦Ãç´Ö¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- Apache ¤Ï¼Â¹Ô»þ¤Ë DSO ¤ò»È¤Ã¤Æ¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤¹¤ë¤è¤¦¤Ë¤¹¤Ç¤Ë
- ±¿Ì¿ÉÕ¤±¤é¤ì¤Æ¤¤¤¿¤Î¤Ç¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advantages" id="advantages">ÍøÅÀ¤È·çÅÀ</a></h2>
-
- <p>¾åµ­¤Î DSO ¤Ë´ð¤Å¤¤¤¿µ¡Ç½¤Ï°Ê²¼¤ÎÍøÅÀ¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>¼ÂºÝ¤Î¥µ¡¼¥Ð¥×¥í¥»¥¹¤òÁȤßΩ¤Æ¤ë¤¿¤á¤Ë¡¢
- ¥Ó¥ë¥É»þ¤Ë <code>configure</code> ¤Î¥ª¥×¥·¥ç¥ó¤ò»È¤¦Âå¤ï¤ê¤Ë
- ¼Â¹Ô»þ¤Ë <code>httpd.conf</code> ¤ÎÀßÄêÍÑ¥³¥Þ¥ó¥É
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
- ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢¥µ¡¼¥Ð¥Ñ¥Ã¥±¡¼¥¸¤Î½ÀÆðÀ­¤¬¹â¤Þ¤ê¤Þ¤·¤¿¡£
- ¤¿¤È¤¨¤Ð¡¢°ì¤Ä¤Î Apache ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤«¤é
- °ã¤¦¹½À®¤Î¥µ¡¼¥Ð (ɸ½àÈÇ¤È SSL ÈÇ¡¢ºÇ¾®¹½À®¤È³ÈÄ¥ÈÇ [mod_perl, PHP3]
- <em>¤Ê¤É</em>) ¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</li>
-
- <li>¥¤¥ó¥¹¥È¡¼¥ë¤Î¸å¤Ç¤¢¤Ã¤Æ¤â¡¢¥µ¡¼¥Ð¤Î¥Ñ¥Ã¥±¡¼¥¸¤ò¥µ¡¼¥É¥Ñ¡¼¥Æ¥£
- ¥â¥¸¥å¡¼¥ë¤Ç´Êñ¤Ë³ÈÄ¥¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤ì¤Ï¡¢Apache ¥³¥¢
- ¥Ñ¥Ã¥±¡¼¥¸¤È¡¢PHP3, mod_perl, mod_fastcgi <em>¤Ê¤É</em> ¤ÎÄɲäÎ
- ¥Ñ¥Ã¥±¡¼¥¸¤òºîÀ®¤Ç¤­¤ë¤Î¤Ç¡¢¾¯¤Ê¤¯¤È¤â¥Ù¥ó¥À¤Î¥Ñ¥Ã¥±¡¼¥¸´ÉÍý¼Ô¤Ë¤È¤Ã¤Æ
- Â礭¤ÊÍøÅÀ¤¬¤¢¤ê¤Þ¤¹¡£</li>
-
- <li>Apache ¥â¥¸¥å¡¼¥ë¤Î³«È¯¤¬´Êñ¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï DSO/<code>apxs</code> ¤ÎÁȤ߹ç¤ï¤»¤Ë¤è¤ê¡¢Apache ¥½¡¼¥¹¥Ä¥ê¡¼¤Î
- ³°¤Çºî¶È¤Ç¤­¡¢³«È¯Ãæ¤Î¥â¥¸¥å¡¼¥ë¤Î¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò
- ¼Â¹ÔÃæ¤Î Apache ¥µ¡¼¥Ð¤ËÁȤ߹þ¤à¤¿¤á¤Ë <code>apxs -i</code> ¤È
- <code>apachectl restart</code> ¤ò¹Ô¤Ê¤¦¤À¤±¤ÇÎɤ¯¤Ê¤ë¤«¤é¤Ç¤¹¡£</li>
- </ul>
-
- <p>DSO ¤Ë¤Ï°Ê²¼¤Î·çÅÀ¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>¤¹¤Ù¤Æ¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤¬¥×¥í¥°¥é¥à¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë
- ¥³¡¼¥É¤òưŪ¥í¡¼¥É¤¹¤ë¤³¤È¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤ï¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢
- ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤è¤Ã¤Æ¤Ï DSO µ¡¹½¤Ï»È¤¨¤Þ¤»¤ó¡£</li>
-
- <li>Unix ¤Î¥í¡¼¥À¤¬¥·¥ó¥Ü¥ë¤Î²ò·è¤ò¤¹¤ëɬÍפ¬¤Ç¤­¤¿¤Î¤Ç¡¢
- ¤½¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤Ë¤è¤ê¥µ¡¼¥Ð¤Îµ¯Æ°»þ´Ö¤¬Ìó 20% ÃÙ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</li>
-
- <li>°ÌÃÖÈó°Í¸¥³¡¼¥É (PIC) (ÌõÃí position independent code) ¤Ï
- ÁêÂÐ¥¢¥É¥ì¥¹¤Î¤¿¤á¤ËÊ£»¨¤Ê¥¢¥»¥ó¥Ö¥é¤Î¥È¥ê¥Ã¥¯¤¬É¬Íפʤ³¤È¤¬¤¢¤ê¡¢
- ¤½¤ì¤Ïɬ¤º¤·¤âÀäÂÐ¥¢¥É¥ì¥¹¤ÈƱ¤¸¤¯¤é¤¤¤Î®ÅÙ¤¬¤Ç¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢
- ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤è¤Ã¤Æ¤Ï¥µ¡¼¥Ð¤Î¼Â¹Ô®ÅÙ¤¬Ìó 5% ÃÙ¤¯¤Ê¤ê¤Þ¤¹¡£</li>
-
- <li>DSO ¥â¥¸¥å¡¼¥ë¤Ï¤¹¤Ù¤Æ¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¾¤Î DSO ¤Ë´ð¤Å¤¤¤¿
- ¥é¥¤¥Ö¥é¥ê¤ËÂФ·¤Æ¥ê¥ó¥¯¤Ç¤­¤ë (<code>ld -lfoo</code>)
- ¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç (¤¿¤È¤¨¤Ð¡¢a.out ¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï
- ¤³¤Îµ¡Ç½¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢ELF ¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤Ï¤¢¤ê¤Þ¤¹)¡¢
- ¤¹¤Ù¤Æ¤Î¼ïÎà¤Î¥â¥¸¥å¡¼¥ë¤Ë DSO µ¡¹½¤ò»È¤¨¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¸À¤¤´¹¤¨¤ë¤È¡¢DSO ¥Õ¥¡¥¤¥ë¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¥â¥¸¥å¡¼¥ë¤Î
- »È¤¨¤ë¥·¥ó¥Ü¥ë¤Ï¡¢
- Apache ¤Î¥³¥¢¤Î¥·¥ó¥Ü¥ë¡¢C ¥é¥¤¥Ö¥é¥ê (<code>libc</code>) ¤È
- Apache ¥³¥¢¤¬»È¤Ã¤Æ¤¤¤ë¾¤Î¤¹¤Ù¤Æ¤ÎÀÅŪ¤Ê¥é¥¤¥Ö¥é¥ê¤ÈưŪ¥é¥¤¥Ö¥é¥ê¤Î
- ¥·¥ó¥Ü¥ë¡¢PIC ¤Ë¤è¤ëÀÅŪ¤Ê¥é¥¤¥Ö¥é¥ê (<code>libfoo.a</code>) ¤Î
- ¥·¥ó¥Ü¥ë¤Î¤ß¤ËÀ©¸Â¤µ¤ì¤Þ¤¹¡£¤½¤Î¾¤Î¥³¡¼¥É¤ò»È¤¦ÊýË¡¤Ï¡¢
- Apache ¥³¥¢¼«¿È¤¬¤¹¤Ç¤Ë¤½¤Î¥³¡¼¥É¤Ø¤Î»²¾È¤¬¤¢¤ë¤è¤¦¤Ë¤¹¤ë¤«¡¢
- <code>dlopen ()</code> ¤ò»È¤Ã¤Æ¥³¡¼¥É¤ò¼«Ê¬¼«¿È¤Ç¥í¡¼¥É¤¹¤ë¤«¤Î
- ¤É¤Á¤é¤«¤·¤«¤¢¤ê¤Þ¤»¤ó¡£</li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dso.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/dso.html.ko.euc-kr b/docs/manual/dso.html.ko.euc-kr
deleted file mode 100644
index 3b94dd4882..0000000000
--- a/docs/manual/dso.html.ko.euc-kr
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>µ¿Àû°øÀ¯°´Ã¼ (DSO) Áö¿ø - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>µ¿Àû°øÀ¯°´Ã¼ (DSO) Áö¿ø</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dso.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â °ü¸®ÀÚ°¡ ¸ðµâµéÀ» ¼±ÅÃÇÏ¿© ¼­¹ö¿¡ Æ÷ÇÔÇÒ
- ±â´ÉÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Â ¸ðµâÈ­µÈ ÇÁ·Î±×·¥ÀÌ´Ù. ¼­¹ö¸¦ ÄÄÆÄÇÒ¶§
- <code>httpd</code> ½ÇÇàÆÄÀÏ¿¡ Á¤ÀûÀ¸·Î ¸ðµâÀ» ÄÄÆÄÀÏÇÒ
- ¼ö ÀÖ´Ù. ¾Æ´Ï¸é ¸ðµâÀ» <code>httpd</code> ½ÇÇàÆÄÀÏ°ú
- ºÐ¸®ÇÏ¿© µ¿Àû°øÀ¯°´Ã¼(Dynamic Shared Objects, DSO)·Î ÄÄÆÄÀÏÇÒ
- ¼ö ÀÖ´Ù. DSO ¸ðµâÀº ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§ ÄÄÆÄÀÏÇϰųª, Apache
- Extension Tool (<a href="programs/apxs.html">apxs</a>)À»
- »ç¿ëÇÏ¿© ³ªÁß¿¡ ÄÄÆÄÀÏÇÏ¿© Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ ¹®¼­´Â DSO ¸ðµâ »ç¿ë¹ý°ú ¹è°æ ÀÌ·ÐÀ» ¼³¸íÇÑ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">±¸Çö</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#usage">»ç¿ë¹ý ¿ä¾à</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#background">¹è°æÁö½Ä</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#advantages">Àå´ÜÁ¡</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="implementation" id="implementation">±¸Çö</a></h2>
-
-<table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
-
- <p>¾ÆÆÄÄ¡ Çٽɿ¡ Á¤ÀûÀ¸·Î ÄÄÆÄÀÏÇؾßÇÒ
- <code class="module"><a href="./mod/mod_so.c.html">mod_so.c</a></code>¶ó´Â ¸ðµâÀº ¾ÆÆÄÄ¡ ¸ðµâÀ»
- ÀоîµéÀ̱âÀ§ÇÑ DSO¸¦ Áö¿øÇÑ´Ù.
- ÀÌ ¸ðµâÀº <code class="module"><a href="./mod/core.html">core</a></code>¸¦ Á¦¿ÜÇÏ°í DSO°¡
- µÉ ¼ö ¾ø´Â À¯ÀÏÇÑ ¸ðµâÀÌ´Ù. ½ÇÁ¦·Î ´Ù¸¥ ¸ðµç ¾ÆÆÄÄ¡ ¸ðµâÀº
- <a href="install.html">¼³Ä¡ ¹®¼­</a>¿¡¼­ ¼³¸íÇÑ
- <code>configure</code>ÀÇ <code>--enable-<em>module</em>=shared</code>
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© DSO·Î ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. ¸ðµâÀ»
- <code>mod_foo.so</code>¿Í °°ÀÌ DSO·Î ÄÄÆÄÀÏÇÑÈÄ <code>httpd.conf</code>
- ÆÄÀÏ¿¡ <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>ÀÇ
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> ¸í·É¾î¸¦
- »ç¿ëÇÏ¿© ¼­¹ö ½ÃÀ۽à ȤÀº Àç½ÃÀ۽à ±× ¸ðµâÀ» ÀоîµéÀÏ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ ¸ðµâ(ƯÈ÷ Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ)·Î »ç¿ëÇÒ DSO ÆÄÀÏÀ» ½±°Ô
- ¸¸µé±âÀ§ÇØ <a href="programs/apxs.html">apxs</a> (<em>APache
- eXtenSion</em>)¶ó´Â »õ·Î¿î Áö¿ø ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº
- ¾ÆÆÄÄ¡ ¼Ò½º Æ®¸® <em>¹Û¿¡¼­</em> DSO·Î »ç¿ëÇÒ ¸ðµâÀ»
- ÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇÑ´Ù. °³³äÀº ½±´Ù. ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÒ¶§
- <code>configure</code>¿Í <code>make install</code>ÀÌ
- ¾ÆÆÄÄ¡ C Çì´õÆÄÀÏÀ» ¼³Ä¡ÇÏ°í, DSO ÆÄÀÏÀ» ÄÄÆÄÀÏÇϱâÀ§ÇÑ
- Ç÷¡Æû ƯÀ¯ÀÇ ÄÄÆÄÀÏ·¯ ¿É¼Ç°ú ¸µÄ¿ ¿É¼ÇÀ» <code>apxs</code>
- ÇÁ·Î±×·¥¿¡ ±â·ÏÇÑ´Ù. ±×·¡¼­ <code>apxs</code>¸¦ »ç¿ëÇÏ´Â »ç¿ëÀÚ´Â
- ¾ÆÆÄÄ¡ ¹èÆ÷º» ¼Ò½º Æ®¸®¾øÀÌ, ¶Ç DSO Áö¿øÀ» À§ÇÑ Ç÷¡Æû ƯÀ¯ÀÇ
- ÄÄÆÄÀÏ·¯ ¿É¼Ç¿Í ¸µÄ¿ ¿É¼Ç¿¡ ½Å°æÀ» ¾²Áö¾Ê°í ÀÚ½ÅÀÇ ¾ÆÆÄÄ¡
- ¸ðµâ ¼Ò½º¸¦ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">»ç¿ë¹ý ¿ä¾à</a></h2>
-
- <p>Apache 2.0ÀÇ DSO ±â´É¿¡ ´ëÇÑ Âª°í °£·«ÇÑ ¿ä¾àÀÌ´Ù:</p>
-
- <ol>
- <li>
- <em>¹èÆ÷º»¿¡ ÀÖ´Â</em> ¾ÆÆÄÄ¡ ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â
- °æ¿ì. ¿¹¸¦ µé¾î <code>mod_foo.c</code>¸¦ DSO
- <code>mod_foo.so</code>·Î:
-
-<div class="example"><p><code>
-$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- <em>Á¦»ïÀÚ°¡ ¸¸µç</em> ¾ÆÆÄÄ¡ ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â
- °æ¿ì. ¿¹¸¦ µé¾î <code>mod_foo.c</code>¸¦ DSO
- <code>mod_foo.so</code>·Î:
-
-<div class="example"><p><code>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- °øÀ¯ ¸ðµâÀ» <em>³ªÁß¿¡ »ç¿ëÇϱâÀ§ÇØ</em> ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÏ´Â
- °æ¿ì:
-
-<div class="example"><p><code>
-$ ./configure --enable-so<br />
-$ make install
-</code></p></div>
- </li>
-
- <li>
- <em>Á¦»ïÀÚ°¡ ¸¸µç</em> ¾ÆÆÄÄ¡ ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â
- °æ¿ì. <a href="programs/apxs.html">apxs</a>¸¦ »ç¿ëÇÏ¿©
- ¾ÆÆÄÄ¡ ¼Ò½º Æ®¸® <em>¹Û¿¡¼­</em> <code>mod_foo.c</code>¸¦
- DSO <code>mod_foo.so</code>·Î:
-
-<div class="example"><p><code>
-$ cd /path/to/3rdparty<br />
-$ apxs -c mod_foo.c<br />
-$ apxs -i -a -n foo mod_foo.la
-</code></p></div>
- </li>
- </ol>
-
- <p>¸ðµç °æ¿ì ÀÏ´Ü °øÀ¯ ¸ðµâÀÌ ÄÄÆÄÀϵǸé, <code>httpd.conf</code>¿¡
- <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡°¡ ±× ¸ðµâÀ» ÀоîµéÀÌ°Ô ¸¸µç´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="background" id="background">¹è°æÁö½Ä</a></h2>
-
- <p>Çö´ëÀûÀÎ À¯´Ð½º·ù¿¡´Â <em>µ¿Àû°øÀ¯°´Ã¼</em> (DSO)ÀÇ
- µ¿Àû ¸µÅ·/·Îµù(dynamic linking/loading)À̶ó°í ÇÏ¿©, Ưº°ÇÑ
- Çü½ÄÀÇ ½ÇÇàÄÚµå Á¶°¢À» ¸¸µé¾î ½ÇÇàÁßÀÎ ½ÇÇàÇÁ·Î±×·¥ÀÇ
- ÁÖ¼Ò°ø°£¿¡ ÀоîµéÀÌ´Â ¸ÚÁø ±â´ÉÀÌ ÀÖ´Ù.</p>
-
- <p>º¸Åë µÎ°¡Áö ¹æ¹ýÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Ù. Çϳª´Â ½ÇÇàÇÁ·Î±×·¥ÀÌ
- ½ÃÀÛÇÒ¶§ <code>ld.so</code>¶ó´Â ½Ã½ºÅÛ ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î
- ÀоîµéÀÌ´Â °æ¿ì°í, ´Ù¸¥ Çϳª´Â ½ÇÇàÁßÀÎ ÇÁ·Î±×·¥ÀÌ
- <code>dlopen()/dlsym()</code> ½Ã½ºÅÛÈ£Ãâ·Î À¯´Ð½º ·Î´õ(loader)ÀÇ
- ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽ºÀ» »ç¿ëÇÏ¿© Á÷Á¢ ÀоîµéÀÌ´Â °æ¿ì´Ù.</p>
-
- <p>ù¹ø° °æ¿ì DSO¸¦ º¸Åë <em>°øÀ¯¶óÀ̺귯¸®(shared libraries)</em>
- ȤÀº <em>DSO ¶óÀ̺귯¸®</em>¶ó°í ºÎ¸£¸ç, ÆÄÀÏÀº
- <code>libfoo.so</code>³ª <code>libfoo.so.1.2</code> °°Àº
- À̸§À» °¡Áø´Ù. À̵éÀº ½Ã½ºÅÛ µð·ºÅ丮(º¸Åë <code>/usr/lib</code>)¿¡
- ÀÖ°í, ÄÄÆÄÀϽà ¸µÄ¿ ¸í·É¾î¿¡ <code>-lfoo</code>¸¦ ÁÖ¾î
- ½ÇÇàÆÄÀÏ°ú ¿¬°áÇÑ´Ù. ÀÌ·¸°Ô Á÷Á¢ ½áÁØ ¶óÀ̺귯¸®´Â ½ÇÇàÆÄÀÏ¿¡
- ÂüÁ¶µÇ¿©¼­, ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ¸µÄ¿ ¿É¼Ç <code>-R</code>·Î
- Á÷Á¢ ÁöÁ¤ÇÑ °æ·Î, ȯ°æº¯¼ö <code>LD_LIBRARY_PATH</code>·Î
- ÁöÁ¤ÇÑ °æ·Î ȤÀº <code>/usr/lib</code>¿¡¼­ À¯´Ð½º ·Î´õ°¡
- <code>libfoo.so</code>¸¦ ãÀ» ¼ö ÀÖ´Ù. ±×·¯¸é ½ÇÇàÇÁ·Î±×·¥ÀÇ
- (¾ÆÁ÷ ¸øãÀº(unresolved)) ½Éº¼(symbol)À» DSO¿¡¼­ ã°ÔµÈ´Ù.</p>
-
- <p>DSO´Â º¸Åë ½ÇÇàÇÁ·Î±×·¥ÀÇ ½Éº¼À» ãÁö¾Ê±â ¶§¹®¿¡ (DSO°¡
- Àç»ç¿ë°¡´ÉÇÑ ÀϹÝÀûÀÎ ÄÚµå ¶óÀ̺귯¸®À̹ǷÎ) ã±â´Â ¿©±â¼­
- ³¡³­´Ù. À¯´Ð½º ·Î´õ°¡ ½Éº¼ ã±â¸¦ ¿ÏÀüÈ÷ ´ã´çÇϹǷΠ½ÇÇàÇÁ·Î±×·¥ÀÌ
- Á÷Á¢ DSO¿¡¼­ ½Éº¼À» ãÀ» ÇÊ¿ä°¡ ¾ø´Ù. (»ç½Ç <code>ld.so</code>¸¦
- ºÎ¸£´Â ÄÚµå´Â Á¤ÀûÀÌ ¾Æ´Ñ ¸ðµç ½ÇÇàÇÁ·Î±×·¥¿¡ ¸µÅ©µÇ´Â ½ÇÇà½Ã
- ½ÃÀÛÄÚµåÀÇ ÀϺδÙ.) °øÅëµÈ ¶óÀ̺귯¸® Äڵ带 µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â
- ÀåÁ¡Àº ¸íÈ®ÇÏ´Ù. ¶óÀ̺귯¸® Äڵ尡 ¸ðµç ÇÁ·Î±×·¥¿¡ Áߺ¹Çؼ­
- ÀúÀåµÇ´Â ´ë½Å <code>libc.so</code>¿Í °°Àº ½Ã½ºÅÛ ¶óÀ̺귯¸®¿¡
- Çѹø¸¸ ÀúÀåµÇ±â ¶§¹®¿¡ µð½ºÅ© °ø°£ÀÌ Àý¾àµÈ´Ù.</p>
-
- <p>µÎ¹ø° °æ¿ì DSO¸¦ º¸Åë <em>°øÀ¯°´Ã¼(shared objects)</em>
- ȤÀº <em>DSO ÆÄÀÏ</em>À̶ó°í ºÎ¸£°í, (±ÔÄ¢»ó À̸§Àº
- <code>foo.so</code>ÀÌÁö¸¸) ÆÄÀÏÀÇ È®ÀåÀÚ´Â ÀÚÀ¯·Ó´Ù. ÀÌ
- ÆÄÀϵéÀº º¸Åë ÇÁ·Î±×·¥ ÀÚü µð·ºÅ丮¿¡ À§Ä¡ÇÏ°í ½ÇÇàÇÁ·Î±×·¥¿¡
- ÀÚµ¿À¸·Î ¿¬°áµÇÁö ¾Ê´Â´Ù. ´ë½Å ½ÇÇàÇÁ·Î±×·¥Àº ½ÇÇà½Ã
- <code>dlopen()</code>À» »ç¿ëÇÏ¿© DSO¸¦ ÁÖ¼Ò°ø°£¿¡
- Á÷Á¢ Àоîµé¿©¾ß ÇÑ´Ù. À̶§ ½ÇÇàÇÁ·Î±×·¥Àº DSO¿¡¼­ ½Éº¼À»
- ãÁö ¾Ê´Â´Ù. ´ë½Å ¾Õ¿¡¼­ º» À¯´Ð½º ·Î´õ´Â ÀÚµ¿À¸·Î ½ÇÇàÆÄÀÏ°ú
- ½ÇÇàÆÄÀÏÀÌ ÀÌ¹Ì ÀоîµéÀÎ DSO ¶óÀ̺귯¸®(ƯÈ÷ Ç×»ó Á¸ÀçÇÏ´Â
- <code>libc.so</code>ÀÇ ¸ðµç ½Éº¼)¿¡¼­ DSOÀÇ (¾ÆÁ÷ ¸øãÀº)
- ½Éº¼À» ã´Â´Ù. ±×·¡¼­ DSO´Â ¸¶Ä¡ óÀ½ºÎÅÍ ½ÇÇàÇÁ·Î±×·¥¿¡
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ°Í°ú °°ÀÌ ½ÇÇàÆÄÀÏÀÇ ½Éº¼À» ¾Ë°ÔµÈ´Ù.</p>
-
- <p>DSOÀÇ API¸¦ ÀÌ¿ëÇϱâÀ§Çؼ­ ¸¶Áö¸·À¸·Î ½ÇÇàÇÁ·Î±×·¥Àº
- <code>dlsym()</code>À¸·Î DSO¿¡¼­ ƯÁ¤ ½Éº¼À» ã¾Æ¼­, ¾ÕÀ¸·Î
- »ç¿ëÇϱâÀ§ÇØ µð½ºÆÐÄ¡(dispatch) Ç¥ <em>µî</em>¿¡ ÀúÀåÇÑ´Ù.
- ´Ù¸¥ ¸»·Î ½ÇÇàÇÁ·Î±×·¥Àº »ç¿ëÇÒ ¸ðµç ½Çº¼À» Á÷Á¢ ã¾Æ¾ßÇÑ´Ù.
- ÀÌ·± ±¸Á¶ÀÇ ÀåÁ¡Àº ÇÁ·Î±×·¥ÀÇ ÀϺθ¦ ÇÁ·Î±×·¥ÀÌ
- ÇÊ¿äÇÒ¶§±îÁö ÀоîµéÀÌÁö ¾Ê¾Æµµ (±×·¡¼­ ¸Þ¸ð¸®¸¦ ³¶ºñÇÏÁö
- ¾Ê°Ô) µÈ´Ù´Â Á¡ÀÌ´Ù. ±âº» ÇÁ·Î±×·¥ÀÇ ±â´ÉÀ» È®ÀåÇϱâÀ§ÇØ
- ÇÊ¿äÇÑ °æ¿ì ÀÌ ºÎºÐÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ·± DSO ±¸Á¶°¡ ÀÚ¿¬½º·´°Ô º¸ÀÌÁö¸¸, ÃÖ¼ÒÇÑ ¾î·Á¿î Á¡ÀÌ
- ÇÑ°¡ÁöÀÖ´Ù. ÇÁ·Î±×·¥À» È®ÀåÇϱâÀ§ÇØ DSO¸¦ »ç¿ëÇÒ¶§ DSO°¡
- ½ÇÇàÇÁ·Î±×·¥ÀÇ ½Éº¼À» ã´Â ÀÏÀÌ´Ù. ¿Ö? DSO°¡ ½ÇÇàÇÁ·Î±×·¥ÀÇ
- ½Éº¼À» "¿ªÀ¸·Î ã´Â °Í"Àº (¶óÀ̺귯¸®´Â ÀÚ½ÅÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡
- ´ëÇØ ¸ð¸¥´Ù´Â) ¶óÀ̺귯¸® ¼³°è¿¡ ¹ÝÇϸç, ¸ðµç Ç÷¡Æû¿¡¼­
- Áö¿øµÇÁö¾Ê°í Ç¥ÁØÈ­µÇÁöµµ ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ½ÇÁ¦·Î ½ÇÇàÆÄÀÏÀÇ
- Àü¿ª½Éº¼(global symbol)Àº º¸Åë ÀͽºÆ÷Æ®(export)µÇÁö ¾Ê±â¶§¹®¿¡
- DSO°¡ »ç¿ëÇÒ ¼ö ¾ø´Ù. DSO¸¦ »ç¿ëÇÏ¿© ½ÇÇàÁß ÇÁ·Î±×·¥À» È®ÀåÇÏ·Á¸é
- ¸µÄ¿¿¡°Ô ¸ðµç Àü¿ª½Éº¼À» ÀͽºÆ÷Æ®Çϵµ·Ï °­Á¦ÇÏ´Â °ÍÀÌ ÁÖµÈ
- ÇØ°áÃ¥ÀÌ´Ù.</p>
-
- <p>°øÀ¯¶óÀ̺귯¸®´Â DSO ¹æ½ÄÀÇ ¼³°è¿øÄ¢´ë·Î ÀüÇüÀûÀ̱⶧¹®¿¡
- ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â °ÅÀÇ ¸ðµç Á¾·ùÀÇ ¶óÀ̺귯¸®°¡ »ç¿ëÇÑ´Ù.
- ¹Ý´ë·Î ¸¹Àº ÇÁ·Î±×·¥Àº ÇÁ·Î±×·¥À» È®ÀåÇϱâÀ§ÇØ °øÀ¯°´Ã¼¸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>1998³â ½ÇÇàÁß ½ÇÁ¦·Î ±â´ÉÀ» È®ÀåÇϱâÀ§ÇØ DSO ±¸Á¶¸¦ »ç¿ëÇÑ
- ¼ÒÇÁÆ®¿þ¾î ÆÐÅ°Áö´Â (XS ±¸Á¶¿Í DynaLoader ¸ðµâÀ» »ç¿ëÇÑ)
- Perl 5, Netscape Server <em>µî</em>À¸·Î µå¹°¾ú´Ù. ¾ÆÆÄÄ¡´Â
- ÀÌ¹Ì ±â´ÉÀ» È®ÀåÇϱâÀ§ÇØ ¸ðµâ °³³äÀ» »ç¿ëÇß°í ¿ÜºÎ ¸ðµâÀ»
- ¾ÆÆÄÄ¡ Çٽɱâ´É¿¡ ¿¬°áÇϱâÀ§ÇØ ³»ºÎÀûÀ¸·Î µð½ºÆÐÄ¡¸ñ·ÏÀ»
- ÀÌ¿ëÇÑ Á¢±Ù¹æ¹ýÀ» »ç¿ëÇ߱⶧¹®¿¡ 1.3 ¹öÀüºÎÅÍ ÀÌ ´ë¿­¿¡ ÇÕ·ùÇß´Ù.
- ±×·¡¼­ ¾ÆÆÄÄ¡´Â ½ÇÇàÁß ¸ðµâÀ» ÀоîµéÀ̴µ¥ DSO¸¦ »ç¿ëÇϵµ·Ï
- ¿î¸íÁö¿öÁ³´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advantages" id="advantages">Àå´ÜÁ¡</a></h2>
-
- <p>¾Õ¿¡¼­ ¸»ÇÑ DSO¸¦ »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>½ÇÁ¦ ¼­¹ö ÇÁ·Î¼¼½º°¡ ÄÄÆÄÀϽà <code>configure</code>
- ¿É¼Ç´ë½Å <code>httpd.conf</code>ÀÇ <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>À» »ç¿ëÇÏ¿© ½ÇÇàÁß¿¡
- °áÇյǹǷΠ¼­¹ö ÆÐÅ°Áö ½ÇÇàÀÌ ´õ À¯¿¬ÇÏ´Ù. ¿¹¸¦ µé¾î ÇѹøÀÇ
- ¾ÆÆÄÄ¡ ¼³Ä¡¸¸À¸·Î ´Ù¸¥ ¼­¹ö(Ç¥ÁØ ¹öÀü°ú SSL ¹öÀü, ÃÖ¼ÒÈ­
- ¹öÀü°ú ±â´ÉÃß°¡ ¹öÀü [mod_perl, PHP3] <em>µî</em>)¸¦ ½ÇÇàÇÒ
- ¼ö ÀÖ´Ù.</li>
-
- <li>¼­¹ö´Â ¼³Ä¡ÈÄ¿¡µµ Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» »ç¿ëÇÏ¿© ½±°Ô
- È®ÀåÇÒ ¼ö ÀÖ´Ù. ÃÖ¼ÒÇÑ ±â¾÷ÀÇ ÆÐÅ°Áö Á¦ÀÛÀÚ´Â ¾ÆÆÄÄ¡ ÇÙ½É
- ÆÐÅ°Áö¿Í º°µµ·Î PHP3, mod_perl, mod_fastcgi <em>µî</em>À»
- Ãß°¡ ÆÐÅ°Áö·Î ¸¸µé ¼ö À־ Å« À̵æÀÌ´Ù.</li>
-
- <li>DSO¿Í <code>apxs</code>¸¦ °¡Áö°í ¾ÆÆÄÄ¡ ¼Ò½º Æ®¸® ¹Û¿¡¼­
- ÀÛ¾÷ÇÏ°í <code>apxs -i</code>¿Í <code>apachectl restart</code>
- ¸í·É¾î¸¸À¸·Î ÇöÀç °³¹ßÇÑ ¸ðµâÀÇ »õ ¹öÀüÀ» ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡
- ¼­¹ö¿¡ ¹Ý¿µÇÒ ¼ö À־ ´õ ½±°Ô ¾ÆÆÄÄ¡ ¸ðµâÀ» °³¹ßÇÒ ¼ö
- ÀÖ´Ù.</li>
- </ul>
-
- <p>DSO´Â ´ÙÀ½°ú °°Àº ´ÜÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>ÇÁ·Î±×·¥ÀÇ ÁÖ¼Ò°ø°£¿¡ Äڵ带 µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â ±â´ÉÀ»
- Áö¿øÇÏÁö¾Ê´Â ¿î¿µÃ¼Á¦°¡ Àֱ⠶§¹®¿¡ ¸ðµç Ç÷¡Æû¿¡¼­ DSO¸¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</li>
-
- <li>À¯´Ð½º ·Î´õ°¡ ½Éº¼À» ã¾Æ¾ßÇϱ⠶§¹®¿¡ ¼­¹ö ½ÃÀÛÀÌ
- ¾à 20% Á¤µµ ´Ê¾îÁø´Ù.</li>
-
- <li>¼­¹ö´Â À§Ä¡µ¶¸³ÄÚµå(position independent code, PIC)
- ¶§¹®¿¡ Àý´ëÁÖ¼ÒÁöÁ¤(absolute addressing)º¸´Ù ´À¸°
- »ó´ëÁÖ¼ÒÁöÁ¤(relative addressing)ÀÇ º¹ÀâÇÑ ¾î¼Àºí·¯ ±â¹ýÀÌ
- ÇÊ¿äÇϹǷΠ¾î¶² Ç÷¡Æû¿¡¼­ ½ÇÇà½Ã ¾à 5% Á¤µµ ´Ê´Ù.</li>
-
- <li>DSO ¸ðµâÀ» ´Ù¸¥ DSO±â¹Ý ¶óÀ̺귯¸®(<code>ld -lfoo</code>)¿¡
- ¸µÅ©ÇÒ ¼ö ¾ø´Â Ç÷¡ÆûÀÌ Àֱ⶧¹®¿¡ (¿¹¸¦ µé¾î ELF±â¹Ý
- Ç÷¡ÆûÀº Áö¿øÇÏÁö¸¸ a.out±â¹Ý Ç÷¡ÆûÀº º¸Åë ÀÌ ±â´ÉÀ»
- Áö¿øÇÏÁö ¾Ê´Â´Ù) ¸ðµç Á¾·ùÀÇ ¸ðµâ¿¡ DSO¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
- ´Ù¸¥ ¸»·Î DSO ÆÄÀÏ·Î ÄÄÆÄÀÏÇÏ´Â ¸ðµâÀº ¾ÆÆÄÄ¡ Çٽɰú ¾ÆÆÄÄ¡
- ÇÙ½ÉÀÌ »ç¿ëÇÏ´Â C ¶óÀ̺귯¸®(<code>libc</code>)¿Í ´Ù¸¥
- µ¿Àû/Á¤Àû ¶óÀ̺귯¸®, À§Ä¡µ¶¸³Äڵ带 ´ã°í ÀÖ´Â Á¤Àû ¶óÀ̺귯¸®
- ¾ÆÄ«À̺ê(<code>libfoo.a</code>)ÀÇ ½Éº¼¸¸À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ´Ù¸¥ Äڵ带 »ç¿ëÇÏ·Á¸é ¾ÆÆÄÄ¡ ÇÙ½ÉÀÌ ±×°ÍÀ» ÂüÁ¶ÇÏ´øÁö,
- <code>dlopen()</code>À¸·Î Á÷Á¢ Äڵ带 Àоîµé¿©¾ß ÇÑ´Ù.</li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/dso.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/dso.xml b/docs/manual/dso.xml
deleted file mode 100644
index 7e01859ded..0000000000
--- a/docs/manual/dso.xml
+++ /dev/null
@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dso.xml.meta">
-
- <title>Dynamic Shared Object (DSO) Support</title>
-
- <summary>
- <p>The Apache HTTP Server is a modular program where the
- administrator can choose the functionality to include in the
- server by selecting a set of modules. The modules can be
- statically compiled into the <code>httpd</code> binary when the
- server is built. Alternatively, modules can be compiled as
- Dynamic Shared Objects (DSOs) that exist separately from the
- main <code>httpd</code> binary file. DSO modules may be
- compiled at the time the server is built, or they may be
- compiled and added at a later time using the Apache Extension
- Tool (<a href="programs/apxs.html">apxs</a>).</p>
-
- <p>This document describes how to use DSO modules as well as
- the theory behind their use.</p>
- </summary>
-
-
-<section id="implementation"><title>Implementation</title>
-
-<related>
-<modulelist>
-<module>mod_so</module>
-</modulelist>
-<directivelist>
-<directive module="mod_so">LoadModule</directive>
-</directivelist>
-</related>
-
- <p>The DSO support for loading individual Apache modules is based
- on a module named <module>mod_so</module> which must be statically
- compiled into the Apache core. It is the only module besides
- <module>core</module> which cannot be put into a DSO
- itself. Practically all other distributed Apache modules can then
- be placed into a DSO by individually enabling the DSO build for
- them via <code>configure</code>'s
- <code>--enable-<em>module</em>=shared</code> option as discussed
- in the <a href="install.html">install documentation</a>. After a
- module is compiled into a DSO named <code>mod_foo.so</code> you
- can use <module>mod_so</module>'s <directive
- module="mod_so">LoadModule</directive> command in your
- <code>httpd.conf</code> file to load this module at server startup
- or restart.</p>
-
- <p>To simplify this creation of DSO files for Apache modules
- (especially for third-party modules) a new support program
- named <a href="programs/apxs.html">apxs</a> (<em>APache
- eXtenSion</em>) is available. It can be used to build DSO based
- modules <em>outside of</em> the Apache source tree. The idea is
- simple: When installing Apache the <code>configure</code>'s
- <code>make install</code> procedure installs the Apache C
- header files and puts the platform-dependent compiler and
- linker flags for building DSO files into the <code>apxs</code>
- program. This way the user can use <code>apxs</code> to compile
- his Apache module sources without the Apache distribution
- source tree and without having to fiddle with the
- platform-dependent compiler and linker flags for DSO
- support.</p>
-</section>
-
-<section id="usage"><title>Usage Summary</title>
-
- <p>To give you an overview of the DSO features of Apache 2.0,
- here is a short and concise summary:</p>
-
- <ol>
- <li>
- Build and install a <em>distributed</em> Apache module, say
- <code>mod_foo.c</code>, into its own DSO
- <code>mod_foo.so</code>:
-
-<example>
-$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
-$ make install
-</example>
- </li>
-
- <li>
- Build and install a <em>third-party</em> Apache module, say
- <code>mod_foo.c</code>, into its own DSO
- <code>mod_foo.so</code>:
-
-<example>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br />
-$ make install
-</example>
- </li>
-
- <li>
- Configure Apache for <em>later installation</em> of shared
- modules:
-
-<example>
-$ ./configure --enable-so<br />
-$ make install
-</example>
- </li>
-
- <li>
- Build and install a <em>third-party</em> Apache module, say
- <code>mod_foo.c</code>, into its own DSO
- <code>mod_foo.so</code> <em>outside of</em> the Apache
- source tree using <a href="programs/apxs.html">apxs</a>:
-
-<example>
-$ cd /path/to/3rdparty<br />
-$ apxs -c mod_foo.c<br />
-$ apxs -i -a -n foo mod_foo.la
-</example>
- </li>
- </ol>
-
- <p>In all cases, once the shared module is compiled, you must
- use a <directive module="mod_so">LoadModule</directive>
- directive in <code>httpd.conf</code> to tell Apache to activate
- the module.</p>
-</section>
-
-<section id="background"><title>Background</title>
-
- <p>On modern Unix derivatives there exists a nifty mechanism
- usually called dynamic linking/loading of <em>Dynamic Shared
- Objects</em> (DSO) which provides a way to build a piece of
- program code in a special format for loading it at run-time
- into the address space of an executable program.</p>
-
- <p>This loading can usually be done in two ways: Automatically
- by a system program called <code>ld.so</code> when an
- executable program is started or manually from within the
- executing program via a programmatic system interface to the
- Unix loader through the system calls
- <code>dlopen()/dlsym()</code>.</p>
-
- <p>In the first way the DSO's are usually called <em>shared
- libraries</em> or <em>DSO libraries</em> and named
- <code>libfoo.so</code> or <code>libfoo.so.1.2</code>. They
- reside in a system directory (usually <code>/usr/lib</code>)
- and the link to the executable program is established at
- build-time by specifying <code>-lfoo</code> to the linker
- command. This hard-codes library references into the executable
- program file so that at start-time the Unix loader is able to
- locate <code>libfoo.so</code> in <code>/usr/lib</code>, in
- paths hard-coded via linker-options like <code>-R</code> or in
- paths configured via the environment variable
- <code>LD_LIBRARY_PATH</code>. It then resolves any (yet
- unresolved) symbols in the executable program which are
- available in the DSO.</p>
-
- <p>Symbols in the executable program are usually not referenced
- by the DSO (because it's a reusable library of general code)
- and hence no further resolving has to be done. The executable
- program has no need to do anything on its own to use the
- symbols from the DSO because the complete resolving is done by
- the Unix loader. (In fact, the code to invoke
- <code>ld.so</code> is part of the run-time startup code which
- is linked into every executable program which has been bound
- non-static). The advantage of dynamic loading of common library
- code is obvious: the library code needs to be stored only once,
- in a system library like <code>libc.so</code>, saving disk
- space for every program.</p>
-
- <p>In the second way the DSO's are usually called <em>shared
- objects</em> or <em>DSO files</em> and can be named with an
- arbitrary extension (although the canonical name is
- <code>foo.so</code>). These files usually stay inside a
- program-specific directory and there is no automatically
- established link to the executable program where they are used.
- Instead the executable program manually loads the DSO at
- run-time into its address space via <code>dlopen()</code>. At
- this time no resolving of symbols from the DSO for the
- executable program is done. But instead the Unix loader
- automatically resolves any (yet unresolved) symbols in the DSO
- from the set of symbols exported by the executable program and
- its already loaded DSO libraries (especially all symbols from
- the ubiquitous <code>libc.so</code>). This way the DSO gets
- knowledge of the executable program's symbol set as if it had
- been statically linked with it in the first place.</p>
-
- <p>Finally, to take advantage of the DSO's API the executable
- program has to resolve particular symbols from the DSO via
- <code>dlsym()</code> for later use inside dispatch tables
- <em>etc.</em> In other words: The executable program has to
- manually resolve every symbol it needs to be able to use it.
- The advantage of such a mechanism is that optional program
- parts need not be loaded (and thus do not spend memory) until
- they are needed by the program in question. When required,
- these program parts can be loaded dynamically to extend the
- base program's functionality.</p>
-
- <p>Although this DSO mechanism sounds straightforward there is
- at least one difficult step here: The resolving of symbols from
- the executable program for the DSO when using a DSO to extend a
- program (the second way). Why? Because "reverse resolving" DSO
- symbols from the executable program's symbol set is against the
- library design (where the library has no knowledge about the
- programs it is used by) and is neither available under all
- platforms nor standardized. In practice the executable
- program's global symbols are often not re-exported and thus not
- available for use in a DSO. Finding a way to force the linker
- to export all global symbols is the main problem one has to
- solve when using DSO for extending a program at run-time.</p>
-
- <p>The shared library approach is the typical one, because it
- is what the DSO mechanism was designed for, hence it is used
- for nearly all types of libraries the operating system
- provides. On the other hand using shared objects for extending
- a program is not used by a lot of programs.</p>
-
- <p>As of 1998 there are only a few software packages available
- which use the DSO mechanism to actually extend their
- functionality at run-time: Perl 5 (via its XS mechanism and the
- DynaLoader module), Netscape Server, <em>etc.</em> Starting
- with version 1.3, Apache joined the crew, because Apache
- already uses a module concept to extend its functionality and
- internally uses a dispatch-list-based approach to link external
- modules into the Apache core functionality. So, Apache is
- really predestined for using DSO to load its modules at
- run-time.</p>
-</section>
-
-<section id="advantages"><title>Advantages and Disadvantages</title>
-
- <p>The above DSO based features have the following
- advantages:</p>
-
- <ul>
- <li>The server package is more flexible at run-time because
- the actual server process can be assembled at run-time via
- <directive module="mod_so">LoadModule</directive>
- <code>httpd.conf</code> configuration commands instead of
- <code>configure</code> options at build-time. For instance
- this way one is able to run different server instances
- (standard &amp; SSL version, minimalistic &amp; powered up
- version [mod_perl, PHP3], <em>etc.</em>) with only one Apache
- installation.</li>
-
- <li>The server package can be easily extended with
- third-party modules even after installation. This is at least
- a great benefit for vendor package maintainers who can create
- a Apache core package and additional packages containing
- extensions like PHP3, mod_perl, mod_fastcgi,
- <em>etc.</em></li>
-
- <li>Easier Apache module prototyping because with the
- DSO/<code>apxs</code> pair you can both work outside the
- Apache source tree and only need an <code>apxs -i</code>
- command followed by an <code>apachectl restart</code> to
- bring a new version of your currently developed module into
- the running Apache server.</li>
- </ul>
-
- <p>DSO has the following disadvantages:</p>
-
- <ul>
- <li>The DSO mechanism cannot be used on every platform
- because not all operating systems support dynamic loading of
- code into the address space of a program.</li>
-
- <li>The server is approximately 20% slower at startup time
- because of the symbol resolving overhead the Unix loader now
- has to do.</li>
-
- <li>The server is approximately 5% slower at execution time
- under some platforms because position independent code (PIC)
- sometimes needs complicated assembler tricks for relative
- addressing which are not necessarily as fast as absolute
- addressing.</li>
-
- <li>Because DSO modules cannot be linked against other
- DSO-based libraries (<code>ld -lfoo</code>) on all platforms
- (for instance a.out-based platforms usually don't provide
- this functionality while ELF-based platforms do) you cannot
- use the DSO mechanism for all types of modules. Or in other
- words, modules compiled as DSO files are restricted to only
- use symbols from the Apache core, from the C library
- (<code>libc</code>) and all other dynamic or static libraries
- used by the Apache core, or from static library archives
- (<code>libfoo.a</code>) containing position independent code.
- The only chances to use other code is to either make sure the
- Apache core itself already contains a reference to it or
- loading the code yourself via <code>dlopen()</code>.</li>
- </ul>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/dso.xml.ja b/docs/manual/dso.xml.ja
deleted file mode 100644
index adcb5b34f4..0000000000
--- a/docs/manual/dso.xml.ja
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dso.xml.meta">
-
- <title>$BF0E*6&M-%*%V%8%'%/%H(B (DSO) $B%5%]!<%H(B</title>
-
- <summary>
- <p>Apache HTTP $B%5!<%P$O%b%8%e!<%k2=$5$l$?%W%m%0%i%`$G!"(B
- $B4IM}<T$,%b%8%e!<%k$rA*Br$9$k$3$H$G%5!<%P$KAH$_9~$`5!G=$rA*$V$3$H$,$G$-$^$9!#(B
- $B%b%8%e!<%k$O%5!<%P$,%S%k%I$5$l$k$H$-$K(B <code>httpd</code> $B%P%$%J%j$K(B
- $B@EE*$KAH$_9~$`$3$H$,$G$-$^$9!#$b$7$/$O!"(B<code>httpd</code> $B%P%$%J%j$H$O(B
- $BJL$KB8:_$9$kF0E*6&M-%*%V%8%'%/%H(B ($BLuCm(B: Dynamic Shared Object)
- (DSO) $B$H$7$F%3%s%Q%$%k$9$k$3$H$b(B
- $B$G$-$^$9!#(BDSO $B%b%8%e!<%k$O%5!<%P$,%S%k%I$5$l$k$H$-$K%3%s%Q%$%k$7$?$j!"(B
- Apache $B3HD%%D!<%k(B (<a href="programs/apxs.html">apxs</a>) $B$r(B
- $B;H$C$F8e$G%3%s%Q%$%k$7$FDI2C$7$?$j$G$-$^$9!#(B</p>
-
- <p>$B$3$NJ8=q$O(B DSO $B%b%8%e!<%k$N;H$$J}$H!";EAH$_$K$D$$$F(B
- $B@bL@$7$^$9!#(B</p>
- </summary>
-
-
-<section id="implementation"><title>$B<BAu(B</title>
-
-<related>
-<modulelist>
-<module>mod_so</module>
-</modulelist>
-<directivelist>
-<directive module="mod_so">LoadModule</directive>
-</directivelist>
-</related>
-
- <p>$B8D!9$N(B Apache $B%b%8%e!<%k$r%m!<%I$9$k$?$a$N(B DSO $B%5%]!<%H$O(B
- <module>mod_so.c</module> $B$H$$$&%b%8%e!<%k$N5!G=$K4p$E$$$F$$$^$9!#(B
- $B$3$N%b%8%e!<%k(B $B$O(B Apache $B$N%3%"$K@EE*$KAH$_9~$^$l$F$$$kI,MW$,$"$j$^$9!#(B
- $B$=$l$O(B <module>core.c</module> $B0J30$G$O(B DSO $B$K$G$-$J$$M#0l$N(B
- $B%b%8%e!<%k$G$9!#;v<B>e!"B>$N$9$Y$F$N(B Apache $B$N%b%8%e!<%k$O!"(B
- <a href="install.html">$B%$%s%9%H!<%k$NJ8=q(B</a>$B$G@bL@$5$l$F$$$k$h$&$K!"(B
- <code>configure</code> $B$N(B
- <code>--enable-<em>module</em>=shared</code> $B%*%W%7%g%s$G$=$l$>$l$r(B
- DSO $B%S%k%I$K$9$k$3$H$K$h$j!"(BDSO $B%b%8%e!<%k$K$9$k$3$H$,$G$-$^$9!#(B
- <code>mod_foo.so</code> $B$N$h$&$J(B DSO $B$K%b%8%e!<%k$,%3%s%Q%$%k$5$l$l$P!"(B
- <code>httpd.conf</code> $B%U%!%$%kCf$G(B <module>mod_so</module> $B$N(B
- <directive module="mod_so">LoadModule</directive>
- $B%G%#%l%/%F%#%V$r;H$&$3$H$G%5!<%P$N5/F0$d:F5/F0;~$K$3$N%b%8%e!<%k$r(B
- $B%m!<%I$9$k$h$&$K$G$-$^$9!#(B</p>
-
- <p>Apache $B%b%8%e!<%kMQ$N(B ($BFC$K%5!<%I%Q!<%F%#%b%8%e!<%k$N(B) DSO $B%U%!%$%k$N(B
- $B:n@.$r4JC1$K$9$k$?$a$K!"(B<a href="programs/apxs.html">apxs</a>
- (<em>APache eXtenSion</em>) $B$H$$$&?7$7$$%5%]!<%H%W%m%0%i%`$,$"$j$^$9!#(B
- Apache $B$N%=!<%9%D%j!<$N(B<em>$B30$G(B</em> DSO $B%b%8%e!<%k$r%S%k%I$9$k$?$a$K(B
- $B;H$&$3$H$,$G$-$^$9!#H/A[$OC1=c$G$9(B: Apache $B$N%$%s%9%H!<%k;~$N(B
- <code>configure</code>$B!"(B<code>make install</code> $B$N$H$-$K(B Apache $B$N(B
- C $B%X%C%@$r%$%s%9%H!<%k$7!"(BDSO $B%S%k%IMQ$N%W%i%C%H%U%)!<%`0MB8$N(B
- $B%3%s%Q%$%i$H%j%s%+$N%U%i%0$r(B <code>apxs</code> $B%W%m%0%i%`$KDI2C$7$^$9!#(B
- $B$3$l$K$h$j!"%f!<%6$,(B Apache $B$NG[I[%=!<%9%D%j!<$J$7$G!"$5$i$K(B
- DSO $B%5%]!<%H$N$?$a$N%W%i%C%H%U%)!<%`0MB8$N%3%s%Q%$%i$d%j%s%+$N(B
- $B%U%i%0$r$$$8$k$3$H$J$/(B Apache $B$N%b%8%e!<%k$N%=!<%9$r%3%s%Q%$%k(B
- $B$G$-$k$h$&$K$J$j$^$9!#(B</p>
-</section>
-
-<section id="usage"><title>$B;HMQK!$N35MW(B</title>
-
- <p>Apache 2.0 $B$N(B DSO $B5!G=$N35N,$rCN$k$3$H$,$G$-$k$?$a$N!"(B
- $BC;$/4J7i$J35MW$G$9(B:</p>
-
- <ol>
- <li>
- <em>$BG[I[$5$l$F$$$k(B</em> Apache $B%b%8%e!<%k!"2>$K(B <code>mod_foo.c</code>
- $B$H$7$F!"$=$l$r(B DSO <code>mod_foo.so</code> $B$K%S%k%I!"%$%s%9%H!<%k(B:
-
-<example>
-$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
-$ make install
-</example>
- </li>
-
- <li>
- <em>$B%5!<%I%Q!<%F%#(B</em> Apache $B%b%8%e!<%k!"2>$K(B <code>mod_foo.c</code>
- $B$H$7$F!"$=$l$r(B DSO <code>mod_foo.so</code> $B$K%S%k%I!"%$%s%9%H!<%k(B:
-
-<example>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br />
-$ make install
-</example>
- </li>
-
- <li>
- $B6&M-%b%8%e!<%k$N(B <em>$B8e!9$N%$%s%9%H!<%k(B</em> $B$N$?$a$K(B
- Apache $B$r@_Dj(B:
-
-<example>
-$ ./configure --enable-so<br />
-$ make install
-</example>
- </li>
-
- <li>
- <em>$B%5!<%I%Q!<%F%#(B</em> Apache $B%b%8%e!<%k!"2>$K(B <code>mod_foo.c</code>
- $B$H$7$F!"$=$l$r(B <a href="programs/apxs.html">apxs</a> $B$r;H$C$F(B
- Apache $B%=!<%9%D%j!<$N(B<em>$B30$G(B</em> DSO $B$K%S%k%I!"%$%s%9%H!<%k(B:
-
-<example>
-$ cd /path/to/3rdparty<br />
-$ apxs -c mod_foo.c<br />
-$ apxs -i -a -n foo mod_foo.la
-</example>
- </li>
- </ol>
-
- <p>$B$I$N>l9g$K$*$$$F$b!"6&M-%b%8%e!<%k$r%3%s%Q%$%k$7$?8e$G!"(B
- <code>httpd.conf</code> $B$G(B
- <directive module="mod_so">LoadModule</directive>
- $B%G%#%l%/%F%#%V$r;H$C$F(B Apache $B$,%b%8%e!<%k$r;HMQ$9$k$h$&$K(B
- $B$7$J$1$l$P$J$j$^$;$s!#(B</p>
-</section>
-
-<section id="background"><title>$BGX7J(B</title>
-
- <p>$B:G6a$N(B Unix $B7O$N(B OS $B$K$O(B <em>$BF0E*6&M-%*%V%8%'%/%H(B</em> (DSO)
- $B$NF0E*%j%s%/(B/$B%m!<%I$H$$$&5$$N$-$$$?5!9=$,(B
- $BB8:_$7$^$9!#$3$l$O!"<B9T;~$K%W%m%0%i%`$N%"%I%l%96u4V$K(B
- $B%m!<%I$G$-$k$h$&$JFCJL$J7A<0$G%W%m%0%i%`$r%S%k%I$9$k$3$H$r(B
- $B2DG=$K$7$^$9!#(B</p>
-
- <p>$B$3$N%m!<%I$OFs$D$NJ}K!$G9T$J$&$3$H$,$G$-$^$9(B: $B<B9T%W%m%0%i%`$,(B
- $B5/F0$5$l$?$H$-$K(B <code>lod.so</code> $B$H$$$&%7%9%F%`%W%m%0%i%`(B
- $B$K$h$j<+F0E*$K9T$J$o$l$kJ}K!$H!"<B9T%W%m%0%i%`Cf$+$i!"%7%9%F%`%3!<%k(B
- <code>dlopen()/dlsym()</code> $B$K$h$k(B Unix $B%m!<%@$X$N(B
- $B%W%m%0%i%`%7%9%F%`$N%$%s%?%U%'!<%9$r;H$C$F<jF0$G9T$J$&J}K!$H$,(B
- $B$"$j$^$9!#(B</p>
-
- <p>$B:G=i$NJ}K!$G$O(B DSO $B$OIaDL$O(B<em>$B6&M-%i%$%V%i%j(B</em>$B$d(B <em>DSO
- $B%i%$%V%i%j(B</em> $B$H8F$P$l$F$$$F!"(BDSO $B$NL>A0$O(B
- <code>libfoo.so</code> $B$d(B <code>libfoo.so.1.2</code> $B$N$h$&$K$J$C$F$$$^$9!#(B
- $B$3$l$i$O%7%9%F%`%G%#%l%/%H%j(B ($BDL>o(B <code>/usr/lib</code>) $B$KB8:_$7!"(B
- $B<B9T%W%m%0%i%`$X$N%j%s%/$O%S%k%I;~$K(B <code>-lfoo</code> $B$r%j%s%+$K(B
- $B;XDj$9$k$3$H$G3NN)$5$l$^$9!#$3$l$K$h$j%i%$%V%i%j$X$N;2>H$,<B9T%W%m%0%i%`$N(B
- $B%U%!%$%k$K=q$-9~$^$l$F!"5/F0;~$K(B Unix $B$N%m!<%@$,(B <code>/usr/lib</code> $B$d!"(B
- $B%j%s%+$N(B <code>-R</code> $B$N$h$&$J%*%W%7%g%s$K$h$j%O!<%I%3!<%I$5$l$?%Q%9!"(B
- $B4D6-JQ?t(B <code>LD_LIBRARY_PATH</code> $B$K$h$j@_Dj$5$l$?%Q%9!"$NCf$+$i(B
- <code>libfoo.so</code> $B$N>l=j$r8+$D$1$k$3$H$,$G$-$^$9!#$=$l$+$i!"(B
- $B<B9T%W%m%0%i%`Cf$N(B ($B$^$@L$2r7h$N(B) $B%7%s%\%k$r(B DSO $B$K$"$k%7%s%\%k$G(B
- $B2r7h$7$^$9!#(B</p>
-
- <p>$BIaDL$O<B9T%W%m%0%i%`Cf$N%7%s%\%k$O(B DSO $B$+$i$O;2>H$5$l$^$;$s(B
- (DSO $B$O0lHLE*$J%3!<%I$K$h$k:FMxMQ2DG=$J%i%$%V%i%j$G$9$N$G(B)$B!#(B
- $B$G$9$+$i!"$5$i$J$k%7%s%\%k$N2r7h$OI,MW$"$j$^$;$s!#(B
- $B%7%s%\%k$O(B Unix $B%m!<%@$K$h$j40A4$J2r7h$,9T$J$o$l$^$9$N$G!"<B9T%U%!%$%k<+?H$O(B
- $B2?$b$9$kI,MW$,$"$j$^$;$s!#(B($B<B:]$N$H$3$m!"@EE*$G$J$$J}K!$G%j%s%/$5$l$F$$$k(B
- $B$9$Y$F$N<B9T%W%m%0%i%`$KAH$_9~$^$l$F$$$k3+;OMQ$N%3!<%I$N0lIt$K(B
- <code>ld.so</code> $B$r5/F0$9$k%3!<%I$,4^$^$l$F$$$^$9(B)$B!#$h$/;H$o$l$k(B
- $B%i%$%V%i%j$NF0E*%m!<%I$NMxE@$OL@$i$+$G$9!#%i%$%V%i%j$N%3!<%I$O(B
- $B%7%9%F%`%i%$%V%i%j$K(B <code>libc.so</code> $B$N$h$&$K$7$F0lEYJ]B8$9$k$@$1$G$h$/!"(B
- $B%W%m%0%i%`$N$?$a$KI,MW$J%G%#%9%/$NNN0h$r@aLs$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$BFs$D$a$NJ}K!$G$O(B DSO $B$OIaDL$O(B<em>$B6&M-%*%V%8%'%/%H(B</em>$B$d(B
- <em>DSO $B%U%!%$%k(B</em>$B$H8F$P$l$F$$$F!"G$0U$N3HD%;R$rIU$1$k$3$H$,$G$-$^$9(B
- ($B$?$@$7!"I8=`E*$JL>A0$O(B <code>foo.so</code> $B$G$9(B)$B!#(B
- $B$3$l$i$N%U%!%$%k$ODL>o$O%W%m%0%i%`@lMQ$N%G%#%l%/%H%j$KCV$+$l!"(B
- $B$3$l$i$r;H$&<B9T%W%m%0%i%`$X$N%j%s%/$O<+F0E*$K$O$5$l$^$;$s!#(B
- $B$G$9$N$G!"<B9T%W%m%0%i%`$O(B <code>dlopen()</code> $B$r;H$C$F(B
- $B<B9T;~$K<jF0$G(B DSO $B$r%W%m%0%i%`$N%"%I%l%96u4V$K%m!<%I$9$kI,MW$,$"$j$^$9!#(B
- $B$3$N;~E@$G$O<B9T%W%m%0%i%`$KBP$7$F(B DSO $B$N%7%s%\%k$N2r7h$O9T$J$o$l$^$;$s!#(B
- $B$7$+$7!"$=$NBe$o$j$K(B Unix $B$N%m!<%@$,(B DSO $B$N(B ($B$^$@L$2r7h$N(B) $B%7%s%\%k$r(B
- $B<B9T%W%m%0%i%`$K$h$j%(%/%9%]!<%H$5$l$?%7%s%\%k$H4{$K%m!<%I$5$l$?(B
- DSO $B%i%$%V%i%j$K$h$j%(%/%9%]!<%H$5$l$?%7%s%\%k(B ($BFC$K!"$I$3$K$G$b$"$k(B
- <code>libc.so</code> $B$N$9$Y$F$N%7%s%\%k(B) $B$G<+F0E*$K2r7h$7$^$9!#(B
- $B$3$&$9$k$3$H$G!"(BDSO $B$O:G=i$+$i@EE*$K%j%s%/$5$l$F$$$?$+$N$h$&$K!"(B
- $B<B9T%W%m%0%i%`$N%7%s%\%k$rCN$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B:G8e$K!"(BDSO $B$N(B API $B$rMxE@$r@8$+$9$?$a$K!"%W%m%0%i%`$O(B
- $B8e$G%G%#%9%Q%C%A%F!<%V%k(B<em>$B$J$I(B</em>$B$G%7%s%\%k$r;H$&$3$H$,$G$-$k$h$&$K!"(B
- <code>dlsym()</code> $B$r;H$C$F$$$/$D$+$N%7%s%\%k$r2r7h$7$^$9!#(B
- $B$9$J$o$A(B: $B<B9T%W%m%0%i%`$OI,MW$J$9$Y$F$N%7%s%\%k$r<jF0$G2r7h$7$J$1$l$P(B
- $B$J$j$^$;$s!#$3$N5!9=$NMxE@$O%W%m%0%i%`$N%*%W%7%g%J%k$JItJ,$O(B
- $BI,MW$K$J$k$^$G%m!<%I$9$kI,MW$,$J$$(B ($B$@$+$i%a%b%j$b>CHq$7$J$$(B)
- $B$3$H$G$9!#I,MW$J$i$P!"4pK\%W%m%0%i%`$N5!G=$r3HD%$9$k$?$a$K(B
- $B$3$l$i$NItJ,$rF0E*$K%m!<%I$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$3$N(B DSO $B5!9=$O4JC1$J$h$&$K8+$($^$9$,!">/$J$/$H$b0l$DFq$7$$E@$,(B
- $B$"$j$^$9(B: $B%W%m%0%i%`$r3HD%$9$k$?$a$K(B DSO $B$r;H$C$F$$$k$H$-$K!"(B
- DSO $B$,<B9T%W%m%0%i%`$+$i%7%s%\%k$r2r7h$9$kE@$G$9(B ($BFsHVL\$NJ}K!(B)$B!#(B
- $B$3$l$O$J$<$G$7$g$&$+!#$=$l$O!"(BDSO $B$N%7%s%\%k$r<B9T%W%m%0%i%`$N(B
- $B%7%s%\%k$+$i!V5U2r7h!W$9$k$H$$$&$N$O%i%$%V%i%j$N@_7W(B
- ($B%i%$%V%i%j$O$=$l$r;HMQ$9$k%W%m%0%i%`$N$3$H$O2?$b(B
- $BCN$i$J$$(B) $B$KH?$7$F$$$F!"$3$N5!G=$O$9$Y$F$N%W%i%C%H%U%)!<%`$K(B
- $B$"$k$o$1$G$O$J$/!"I8=`2=$b$5$l$F$$$J$$$+$i$G$9!#(B
- $B<B:]$K$O<B9T%W%m%0%i%`$N%0%m!<%P%k$J%7%s%\%k$O:F%(%/%9%]!<%H$5$l$k$3$H$O(B
- $B$"$^$j$J$/!"(BDSO $B$+$i;H$&$3$H$,$G$-$^$;$s!#%j%s%+$K%0%m!<%P%k%7%s%\%k$9$Y$F$r(B
- $B%(%/%9%]!<%H$9$k$h$&$K$5$;$kJ}K!$r8+$D$1$k$3$H$,!"<B9T;~$K%W%m%0%i%`$r(B
- $B3HD%$9$k$?$a$K(B DSO $B$r;H$&$H$-$N0lHV$NLdBj$G$9!#(B</p>
-
- <p>$B6&M-%i%$%V%i%j$N%"%W%m!<%A$,IaDL$NJ}K!$G$9!#(BDSO $B5!9=$O$=$N$?$a$K(B
- $B@_7W$5$l$?$b$N$G$9$+$i!#$7$?$,$C$F!"$=$NJ}K!$O%*%Z%l!<%F%#%s%0%7%9%F%`$,(B
- $BDs6!$9$k$[$H$s$I$9$Y$F$N<oN`$N%i%$%V%i%j$G;H$o$l$F$$$^$9!#(B
- $B0lJ}!"%W%m%0%i%`$N3HD%$N$?$a$K6&M-%*%V%8%'%/%H$r;HMQ$9$k!"$H$$$&J}$O(B
- $B$"$^$j;H$o$l$F$$$^$;$s!#(B</p>
-
- <p>1998 $BG/$N;~E@$G!"<B9T;~$K<B:]$K5!G=3HD%$N$?$a$K(B DSO $B5!9=$r;H$C$F$$$k(B
- $B%=%U%H%&%'%"%Q%C%1!<%8$O>/$7$@$1$G$7$?(B: Perl 5 (XS $B5!9=$H(B DnaLoader $B%b%8%e!<%k(B
- $B$K$h$k$b$N(B)$B!"(BNetscape $B%5!<%P(B<em>$B$J$I(B</em>$B$G$9!#(BApache $B$O$9$G$K(B
- $B%b%8%e!<%k$N35G0$r;H$C$F5!G=3HD%$r$7$F$$$F!"FbItE*$K%G%#%9%Q%C%A%j%9%H$K(B
- $B4p$E$$$?30It%b%8%e!<%k$N(B Apache $B%3%"5!G=$X$N%j%s%/$r9T$J$C$F$$$^$7$?$N$G!"(B
- $B%P!<%8%g%s(B 1.3 $B$+$i!"(BApache $B$b(B DSO $B5!9=$r;H$&Cg4V$K$J$j$^$7$?!#(B
- Apache $B$O<B9T;~$K(B DSO $B$r;H$C$F%b%8%e!<%k$r%m!<%I$9$k$h$&$K$9$G$K(B
- $B1?L?IU$1$i$l$F$$$?$N$G$9!#(B</p>
-</section>
-
-<section id="advantages"><title>$BMxE@$H7gE@(B</title>
-
- <p>$B>e5-$N(B DSO $B$K4p$E$$$?5!G=$O0J2<$NMxE@$,$"$j$^$9(B:</p>
-
- <ul>
- <li>$B<B:]$N%5!<%P%W%m%;%9$rAH$_N)$F$k$?$a$K!"(B
- $B%S%k%I;~$K(B <code>configure</code> $B$N%*%W%7%g%s$r;H$&Be$o$j$K(B
- $B<B9T;~$K(B <code>httpd.conf</code> $B$N@_DjMQ%3%^%s%I(B
- <directive module="mod_so">LoadModule</directive>
- $B$r;H$&$3$H$,$G$-$^$9$N$G!"%5!<%P%Q%C%1!<%8$N=@Fp@-$,9b$^$j$^$7$?!#(B
- $B$?$H$($P!"0l$D$N(B Apache $B$N%$%s%9%H!<%k$+$i(B
- $B0c$&9=@.$N%5!<%P(B ($BI8=`HG$H(B SSL $BHG!":G>.9=@.$H3HD%HG(B [mod_perl, PHP3]
- <em>$B$J$I(B</em>) $B$r<B9T$9$k$3$H$,$G$-$^$9!#(B</li>
-
- <li>$B%$%s%9%H!<%k$N8e$G$"$C$F$b!"%5!<%P$N%Q%C%1!<%8$r%5!<%I%Q!<%F%#(B
- $B%b%8%e!<%k$G4JC1$K3HD%$G$-$k$h$&$K$J$j$^$7$?!#$3$l$O!"(BApache $B%3%"(B
- $B%Q%C%1!<%8$H!"(BPHP3, mod_perl, mod_fastcgi <em>$B$J$I(B</em> $B$NDI2C$N(B
- $B%Q%C%1!<%8$r:n@.$G$-$k$N$G!">/$J$/$H$b%Y%s%@$N%Q%C%1!<%84IM}<T$K$H$C$F(B
- $BBg$-$JMxE@$,$"$j$^$9!#(B</li>
-
- <li>Apache $B%b%8%e!<%k$N3+H/$,4JC1$K$J$j$^$9!#(B
- $B$3$l$O(B DSO/<code>apxs</code> $B$NAH$_9g$o$;$K$h$j!"(BApache $B%=!<%9%D%j!<$N(B
- $B30$G:n6H$G$-!"3+H/Cf$N%b%8%e!<%k$N?7$7$$%P!<%8%g%s$r(B
- $B<B9TCf$N(B Apache $B%5!<%P$KAH$_9~$`$?$a$K(B <code>apxs -i</code> $B$H(B
- <code>apachectl restart</code> $B$r9T$J$&$@$1$GNI$/$J$k$+$i$G$9!#(B</li>
- </ul>
-
- <p>DSO $B$K$O0J2<$N7gE@$,$"$j$^$9(B:</p>
-
- <ul>
- <li>$B$9$Y$F$N%*%Z%l!<%F%#%s%0%7%9%F%`$,%W%m%0%i%`$N%"%I%l%96u4V$K(B
- $B%3!<%I$rF0E*%m!<%I$9$k$3$H$r%5%]!<%H$7$F$$$k$o$G$O$J$$$N$G!"(B
- $B%W%i%C%H%U%)!<%`$K$h$C$F$O(B DSO $B5!9=$O;H$($^$;$s!#(B</li>
-
- <li>Unix $B$N%m!<%@$,%7%s%\%k$N2r7h$r$9$kI,MW$,$G$-$?$N$G!"(B
- $B$=$N%*!<%P%X%C%I$K$h$j%5!<%P$N5/F0;~4V$,Ls(B 20% $BCY$/$J$C$F$$$^$9!#(B</li>
-
- <li>$B0LCVHs0MB8%3!<%I(B (PIC) ($BLuCm(B position independent code) $B$O(B
- $BAjBP%"%I%l%9$N$?$a$KJ#;($J%"%;%s%V%i$N%H%j%C%/$,I,MW$J$3$H$,$"$j!"(B
- $B$=$l$OI,$:$7$b@dBP%"%I%l%9$HF1$8$/$i$$$NB.EY$,$G$k$o$1$G$O$"$j$^$;$s$N$G!"(B
- $B%W%i%C%H%U%)!<%`$K$h$C$F$O%5!<%P$N<B9TB.EY$,Ls(B 5% $BCY$/$J$j$^$9!#(B</li>
-
- <li>DSO $B%b%8%e!<%k$O$9$Y$F$N%W%i%C%H%U%)!<%`$GB>$N(B DSO $B$K4p$E$$$?(B
- $B%i%$%V%i%j$KBP$7$F%j%s%/$G$-$k(B (<code>ld -lfoo</code>)
- $B$H$$$&$o$1$G$O$"$j$^$;$s$N$G(B ($B$?$H$($P!"(Ba.out $B$N%W%i%C%H%U%)!<%`$G$O(B
- $B$3$N5!G=$O$"$j$^$;$s$,!"(BELF $B$N%W%i%C%H%U%)!<%`$K$O$"$j$^$9(B)$B!"(B
- $B$9$Y$F$N<oN`$N%b%8%e!<%k$K(B DSO $B5!9=$r;H$($k$o$1$G$O$"$j$^$;$s!#(B
- $B8@$$49$($k$H!"(BDSO $B%U%!%$%k$H$7$F%3%s%Q%$%k$5$l$?%b%8%e!<%k$N(B
- $B;H$($k%7%s%\%k$O!"(B
- Apache $B$N%3%"$N%7%s%\%k!"(BC $B%i%$%V%i%j(B (<code>libc</code>) $B$H(B
- Apache $B%3%"$,;H$C$F$$$kB>$N$9$Y$F$N@EE*$J%i%$%V%i%j$HF0E*%i%$%V%i%j$N(B
- $B%7%s%\%k!"(BPIC $B$K$h$k@EE*$J%i%$%V%i%j(B (<code>libfoo.a</code>) $B$N(B
- $B%7%s%\%k$N$_$K@)8B$5$l$^$9!#$=$NB>$N%3!<%I$r;H$&J}K!$O!"(B
- Apache $B%3%"<+?H$,$9$G$K$=$N%3!<%I$X$N;2>H$,$"$k$h$&$K$9$k$+!"(B
- <code>dlopen ()</code> $B$r;H$C$F%3!<%I$r<+J,<+?H$G%m!<%I$9$k$+$N(B
- $B$I$A$i$+$7$+$"$j$^$;$s!#(B</li>
- </ul>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/dso.xml.ko b/docs/manual/dso.xml.ko
deleted file mode 100644
index bb4fa0ae23..0000000000
--- a/docs/manual/dso.xml.ko
+++ /dev/null
@@ -1,272 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dso.xml.meta">
-
- <title>µ¿Àû°øÀ¯°´Ã¼ (DSO) Áö¿ø</title>
-
- <summary>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â °ü¸®ÀÚ°¡ ¸ðµâµéÀ» ¼±ÅÃÇÏ¿© ¼­¹ö¿¡ Æ÷ÇÔÇÒ
- ±â´ÉÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Â ¸ðµâÈ­µÈ ÇÁ·Î±×·¥ÀÌ´Ù. ¼­¹ö¸¦ ÄÄÆÄÇÒ¶§
- <code>httpd</code> ½ÇÇàÆÄÀÏ¿¡ Á¤ÀûÀ¸·Î ¸ðµâÀ» ÄÄÆÄÀÏÇÒ
- ¼ö ÀÖ´Ù. ¾Æ´Ï¸é ¸ðµâÀ» <code>httpd</code> ½ÇÇàÆÄÀÏ°ú
- ºÐ¸®ÇÏ¿© µ¿Àû°øÀ¯°´Ã¼(Dynamic Shared Objects, DSO)·Î ÄÄÆÄÀÏÇÒ
- ¼ö ÀÖ´Ù. DSO ¸ðµâÀº ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§ ÄÄÆÄÀÏÇϰųª, Apache
- Extension Tool (<a href="programs/apxs.html">apxs</a>)À»
- »ç¿ëÇÏ¿© ³ªÁß¿¡ ÄÄÆÄÀÏÇÏ¿© Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ ¹®¼­´Â DSO ¸ðµâ »ç¿ë¹ý°ú ¹è°æ ÀÌ·ÐÀ» ¼³¸íÇÑ´Ù.</p>
- </summary>
-
-
-<section id="implementation"><title>±¸Çö</title>
-
-<related>
-<modulelist>
-<module>mod_so</module>
-</modulelist>
-<directivelist>
-<directive module="mod_so">LoadModule</directive>
-</directivelist>
-</related>
-
- <p>¾ÆÆÄÄ¡ Çٽɿ¡ Á¤ÀûÀ¸·Î ÄÄÆÄÀÏÇؾßÇÒ
- <module>mod_so.c</module>¶ó´Â ¸ðµâÀº ¾ÆÆÄÄ¡ ¸ðµâÀ»
- ÀоîµéÀ̱âÀ§ÇÑ DSO¸¦ Áö¿øÇÑ´Ù.
- ÀÌ ¸ðµâÀº <module>core</module>¸¦ Á¦¿ÜÇÏ°í DSO°¡
- µÉ ¼ö ¾ø´Â À¯ÀÏÇÑ ¸ðµâÀÌ´Ù. ½ÇÁ¦·Î ´Ù¸¥ ¸ðµç ¾ÆÆÄÄ¡ ¸ðµâÀº
- <a href="install.html">¼³Ä¡ ¹®¼­</a>¿¡¼­ ¼³¸íÇÑ
- <code>configure</code>ÀÇ <code>--enable-<em>module</em>=shared</code>
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© DSO·Î ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. ¸ðµâÀ»
- <code>mod_foo.so</code>¿Í °°ÀÌ DSO·Î ÄÄÆÄÀÏÇÑÈÄ <code>httpd.conf</code>
- ÆÄÀÏ¿¡ <module>mod_so</module>ÀÇ
- <directive module="mod_so">LoadModule</directive> ¸í·É¾î¸¦
- »ç¿ëÇÏ¿© ¼­¹ö ½ÃÀ۽à ȤÀº Àç½ÃÀ۽à ±× ¸ðµâÀ» ÀоîµéÀÏ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ ¸ðµâ(ƯÈ÷ Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ)·Î »ç¿ëÇÒ DSO ÆÄÀÏÀ» ½±°Ô
- ¸¸µé±âÀ§ÇØ <a href="programs/apxs.html">apxs</a> (<em>APache
- eXtenSion</em>)¶ó´Â »õ·Î¿î Áö¿ø ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº
- ¾ÆÆÄÄ¡ ¼Ò½º Æ®¸® <em>¹Û¿¡¼­</em> DSO·Î »ç¿ëÇÒ ¸ðµâÀ»
- ÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇÑ´Ù. °³³äÀº ½±´Ù. ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÒ¶§
- <code>configure</code>¿Í <code>make install</code>ÀÌ
- ¾ÆÆÄÄ¡ C Çì´õÆÄÀÏÀ» ¼³Ä¡ÇÏ°í, DSO ÆÄÀÏÀ» ÄÄÆÄÀÏÇϱâÀ§ÇÑ
- Ç÷¡Æû ƯÀ¯ÀÇ ÄÄÆÄÀÏ·¯ ¿É¼Ç°ú ¸µÄ¿ ¿É¼ÇÀ» <code>apxs</code>
- ÇÁ·Î±×·¥¿¡ ±â·ÏÇÑ´Ù. ±×·¡¼­ <code>apxs</code>¸¦ »ç¿ëÇÏ´Â »ç¿ëÀÚ´Â
- ¾ÆÆÄÄ¡ ¹èÆ÷º» ¼Ò½º Æ®¸®¾øÀÌ, ¶Ç DSO Áö¿øÀ» À§ÇÑ Ç÷¡Æû ƯÀ¯ÀÇ
- ÄÄÆÄÀÏ·¯ ¿É¼Ç¿Í ¸µÄ¿ ¿É¼Ç¿¡ ½Å°æÀ» ¾²Áö¾Ê°í ÀÚ½ÅÀÇ ¾ÆÆÄÄ¡
- ¸ðµâ ¼Ò½º¸¦ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù.</p>
-</section>
-
-<section id="usage"><title>»ç¿ë¹ý ¿ä¾à</title>
-
- <p>Apache 2.0ÀÇ DSO ±â´É¿¡ ´ëÇÑ Âª°í °£·«ÇÑ ¿ä¾àÀÌ´Ù:</p>
-
- <ol>
- <li>
- <em>¹èÆ÷º»¿¡ ÀÖ´Â</em> ¾ÆÆÄÄ¡ ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â
- °æ¿ì. ¿¹¸¦ µé¾î <code>mod_foo.c</code>¸¦ DSO
- <code>mod_foo.so</code>·Î:
-
-<example>
-$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
-$ make install
-</example>
- </li>
-
- <li>
- <em>Á¦»ïÀÚ°¡ ¸¸µç</em> ¾ÆÆÄÄ¡ ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â
- °æ¿ì. ¿¹¸¦ µé¾î <code>mod_foo.c</code>¸¦ DSO
- <code>mod_foo.so</code>·Î:
-
-<example>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br />
-$ make install
-</example>
- </li>
-
- <li>
- °øÀ¯ ¸ðµâÀ» <em>³ªÁß¿¡ »ç¿ëÇϱâÀ§ÇØ</em> ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÏ´Â
- °æ¿ì:
-
-<example>
-$ ./configure --enable-so<br />
-$ make install
-</example>
- </li>
-
- <li>
- <em>Á¦»ïÀÚ°¡ ¸¸µç</em> ¾ÆÆÄÄ¡ ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â
- °æ¿ì. <a href="programs/apxs.html">apxs</a>¸¦ »ç¿ëÇÏ¿©
- ¾ÆÆÄÄ¡ ¼Ò½º Æ®¸® <em>¹Û¿¡¼­</em> <code>mod_foo.c</code>¸¦
- DSO <code>mod_foo.so</code>·Î:
-
-<example>
-$ cd /path/to/3rdparty<br />
-$ apxs -c mod_foo.c<br />
-$ apxs -i -a -n foo mod_foo.la
-</example>
- </li>
- </ol>
-
- <p>¸ðµç °æ¿ì ÀÏ´Ü °øÀ¯ ¸ðµâÀÌ ÄÄÆÄÀϵǸé, <code>httpd.conf</code>¿¡
- <directive module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡°¡ ±× ¸ðµâÀ» ÀоîµéÀÌ°Ô ¸¸µç´Ù.</p>
-</section>
-
-<section id="background"><title>¹è°æÁö½Ä</title>
-
- <p>Çö´ëÀûÀÎ À¯´Ð½º·ù¿¡´Â <em>µ¿Àû°øÀ¯°´Ã¼</em> (DSO)ÀÇ
- µ¿Àû ¸µÅ·/·Îµù(dynamic linking/loading)À̶ó°í ÇÏ¿©, Ưº°ÇÑ
- Çü½ÄÀÇ ½ÇÇàÄÚµå Á¶°¢À» ¸¸µé¾î ½ÇÇàÁßÀÎ ½ÇÇàÇÁ·Î±×·¥ÀÇ
- ÁÖ¼Ò°ø°£¿¡ ÀоîµéÀÌ´Â ¸ÚÁø ±â´ÉÀÌ ÀÖ´Ù.</p>
-
- <p>º¸Åë µÎ°¡Áö ¹æ¹ýÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Ù. Çϳª´Â ½ÇÇàÇÁ·Î±×·¥ÀÌ
- ½ÃÀÛÇÒ¶§ <code>ld.so</code>¶ó´Â ½Ã½ºÅÛ ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î
- ÀоîµéÀÌ´Â °æ¿ì°í, ´Ù¸¥ Çϳª´Â ½ÇÇàÁßÀÎ ÇÁ·Î±×·¥ÀÌ
- <code>dlopen()/dlsym()</code> ½Ã½ºÅÛÈ£Ãâ·Î À¯´Ð½º ·Î´õ(loader)ÀÇ
- ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽ºÀ» »ç¿ëÇÏ¿© Á÷Á¢ ÀоîµéÀÌ´Â °æ¿ì´Ù.</p>
-
- <p>ù¹ø° °æ¿ì DSO¸¦ º¸Åë <em>°øÀ¯¶óÀ̺귯¸®(shared libraries)</em>
- ȤÀº <em>DSO ¶óÀ̺귯¸®</em>¶ó°í ºÎ¸£¸ç, ÆÄÀÏÀº
- <code>libfoo.so</code>³ª <code>libfoo.so.1.2</code> °°Àº
- À̸§À» °¡Áø´Ù. À̵éÀº ½Ã½ºÅÛ µð·ºÅ丮(º¸Åë <code>/usr/lib</code>)¿¡
- ÀÖ°í, ÄÄÆÄÀϽà ¸µÄ¿ ¸í·É¾î¿¡ <code>-lfoo</code>¸¦ ÁÖ¾î
- ½ÇÇàÆÄÀÏ°ú ¿¬°áÇÑ´Ù. ÀÌ·¸°Ô Á÷Á¢ ½áÁØ ¶óÀ̺귯¸®´Â ½ÇÇàÆÄÀÏ¿¡
- ÂüÁ¶µÇ¿©¼­, ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ¸µÄ¿ ¿É¼Ç <code>-R</code>·Î
- Á÷Á¢ ÁöÁ¤ÇÑ °æ·Î, ȯ°æº¯¼ö <code>LD_LIBRARY_PATH</code>·Î
- ÁöÁ¤ÇÑ °æ·Î ȤÀº <code>/usr/lib</code>¿¡¼­ À¯´Ð½º ·Î´õ°¡
- <code>libfoo.so</code>¸¦ ãÀ» ¼ö ÀÖ´Ù. ±×·¯¸é ½ÇÇàÇÁ·Î±×·¥ÀÇ
- (¾ÆÁ÷ ¸øãÀº(unresolved)) ½Éº¼(symbol)À» DSO¿¡¼­ ã°ÔµÈ´Ù.</p>
-
- <p>DSO´Â º¸Åë ½ÇÇàÇÁ·Î±×·¥ÀÇ ½Éº¼À» ãÁö¾Ê±â ¶§¹®¿¡ (DSO°¡
- Àç»ç¿ë°¡´ÉÇÑ ÀϹÝÀûÀÎ ÄÚµå ¶óÀ̺귯¸®À̹ǷÎ) ã±â´Â ¿©±â¼­
- ³¡³­´Ù. À¯´Ð½º ·Î´õ°¡ ½Éº¼ ã±â¸¦ ¿ÏÀüÈ÷ ´ã´çÇϹǷΠ½ÇÇàÇÁ·Î±×·¥ÀÌ
- Á÷Á¢ DSO¿¡¼­ ½Éº¼À» ãÀ» ÇÊ¿ä°¡ ¾ø´Ù. (»ç½Ç <code>ld.so</code>¸¦
- ºÎ¸£´Â ÄÚµå´Â Á¤ÀûÀÌ ¾Æ´Ñ ¸ðµç ½ÇÇàÇÁ·Î±×·¥¿¡ ¸µÅ©µÇ´Â ½ÇÇà½Ã
- ½ÃÀÛÄÚµåÀÇ ÀϺδÙ.) °øÅëµÈ ¶óÀ̺귯¸® Äڵ带 µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â
- ÀåÁ¡Àº ¸íÈ®ÇÏ´Ù. ¶óÀ̺귯¸® Äڵ尡 ¸ðµç ÇÁ·Î±×·¥¿¡ Áߺ¹Çؼ­
- ÀúÀåµÇ´Â ´ë½Å <code>libc.so</code>¿Í °°Àº ½Ã½ºÅÛ ¶óÀ̺귯¸®¿¡
- Çѹø¸¸ ÀúÀåµÇ±â ¶§¹®¿¡ µð½ºÅ© °ø°£ÀÌ Àý¾àµÈ´Ù.</p>
-
- <p>µÎ¹ø° °æ¿ì DSO¸¦ º¸Åë <em>°øÀ¯°´Ã¼(shared objects)</em>
- ȤÀº <em>DSO ÆÄÀÏ</em>À̶ó°í ºÎ¸£°í, (±ÔÄ¢»ó À̸§Àº
- <code>foo.so</code>ÀÌÁö¸¸) ÆÄÀÏÀÇ È®ÀåÀÚ´Â ÀÚÀ¯·Ó´Ù. ÀÌ
- ÆÄÀϵéÀº º¸Åë ÇÁ·Î±×·¥ ÀÚü µð·ºÅ丮¿¡ À§Ä¡ÇÏ°í ½ÇÇàÇÁ·Î±×·¥¿¡
- ÀÚµ¿À¸·Î ¿¬°áµÇÁö ¾Ê´Â´Ù. ´ë½Å ½ÇÇàÇÁ·Î±×·¥Àº ½ÇÇà½Ã
- <code>dlopen()</code>À» »ç¿ëÇÏ¿© DSO¸¦ ÁÖ¼Ò°ø°£¿¡
- Á÷Á¢ Àоîµé¿©¾ß ÇÑ´Ù. À̶§ ½ÇÇàÇÁ·Î±×·¥Àº DSO¿¡¼­ ½Éº¼À»
- ãÁö ¾Ê´Â´Ù. ´ë½Å ¾Õ¿¡¼­ º» À¯´Ð½º ·Î´õ´Â ÀÚµ¿À¸·Î ½ÇÇàÆÄÀÏ°ú
- ½ÇÇàÆÄÀÏÀÌ ÀÌ¹Ì ÀоîµéÀÎ DSO ¶óÀ̺귯¸®(ƯÈ÷ Ç×»ó Á¸ÀçÇÏ´Â
- <code>libc.so</code>ÀÇ ¸ðµç ½Éº¼)¿¡¼­ DSOÀÇ (¾ÆÁ÷ ¸øãÀº)
- ½Éº¼À» ã´Â´Ù. ±×·¡¼­ DSO´Â ¸¶Ä¡ óÀ½ºÎÅÍ ½ÇÇàÇÁ·Î±×·¥¿¡
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ°Í°ú °°ÀÌ ½ÇÇàÆÄÀÏÀÇ ½Éº¼À» ¾Ë°ÔµÈ´Ù.</p>
-
- <p>DSOÀÇ API¸¦ ÀÌ¿ëÇϱâÀ§Çؼ­ ¸¶Áö¸·À¸·Î ½ÇÇàÇÁ·Î±×·¥Àº
- <code>dlsym()</code>À¸·Î DSO¿¡¼­ ƯÁ¤ ½Éº¼À» ã¾Æ¼­, ¾ÕÀ¸·Î
- »ç¿ëÇϱâÀ§ÇØ µð½ºÆÐÄ¡(dispatch) Ç¥ <em>µî</em>¿¡ ÀúÀåÇÑ´Ù.
- ´Ù¸¥ ¸»·Î ½ÇÇàÇÁ·Î±×·¥Àº »ç¿ëÇÒ ¸ðµç ½Çº¼À» Á÷Á¢ ã¾Æ¾ßÇÑ´Ù.
- ÀÌ·± ±¸Á¶ÀÇ ÀåÁ¡Àº ÇÁ·Î±×·¥ÀÇ ÀϺθ¦ ÇÁ·Î±×·¥ÀÌ
- ÇÊ¿äÇÒ¶§±îÁö ÀоîµéÀÌÁö ¾Ê¾Æµµ (±×·¡¼­ ¸Þ¸ð¸®¸¦ ³¶ºñÇÏÁö
- ¾Ê°Ô) µÈ´Ù´Â Á¡ÀÌ´Ù. ±âº» ÇÁ·Î±×·¥ÀÇ ±â´ÉÀ» È®ÀåÇϱâÀ§ÇØ
- ÇÊ¿äÇÑ °æ¿ì ÀÌ ºÎºÐÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ·± DSO ±¸Á¶°¡ ÀÚ¿¬½º·´°Ô º¸ÀÌÁö¸¸, ÃÖ¼ÒÇÑ ¾î·Á¿î Á¡ÀÌ
- ÇÑ°¡ÁöÀÖ´Ù. ÇÁ·Î±×·¥À» È®ÀåÇϱâÀ§ÇØ DSO¸¦ »ç¿ëÇÒ¶§ DSO°¡
- ½ÇÇàÇÁ·Î±×·¥ÀÇ ½Éº¼À» ã´Â ÀÏÀÌ´Ù. ¿Ö? DSO°¡ ½ÇÇàÇÁ·Î±×·¥ÀÇ
- ½Éº¼À» "¿ªÀ¸·Î ã´Â °Í"Àº (¶óÀ̺귯¸®´Â ÀÚ½ÅÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡
- ´ëÇØ ¸ð¸¥´Ù´Â) ¶óÀ̺귯¸® ¼³°è¿¡ ¹ÝÇϸç, ¸ðµç Ç÷¡Æû¿¡¼­
- Áö¿øµÇÁö¾Ê°í Ç¥ÁØÈ­µÇÁöµµ ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ½ÇÁ¦·Î ½ÇÇàÆÄÀÏÀÇ
- Àü¿ª½Éº¼(global symbol)Àº º¸Åë ÀͽºÆ÷Æ®(export)µÇÁö ¾Ê±â¶§¹®¿¡
- DSO°¡ »ç¿ëÇÒ ¼ö ¾ø´Ù. DSO¸¦ »ç¿ëÇÏ¿© ½ÇÇàÁß ÇÁ·Î±×·¥À» È®ÀåÇÏ·Á¸é
- ¸µÄ¿¿¡°Ô ¸ðµç Àü¿ª½Éº¼À» ÀͽºÆ÷Æ®Çϵµ·Ï °­Á¦ÇÏ´Â °ÍÀÌ ÁÖµÈ
- ÇØ°áÃ¥ÀÌ´Ù.</p>
-
- <p>°øÀ¯¶óÀ̺귯¸®´Â DSO ¹æ½ÄÀÇ ¼³°è¿øÄ¢´ë·Î ÀüÇüÀûÀ̱⶧¹®¿¡
- ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â °ÅÀÇ ¸ðµç Á¾·ùÀÇ ¶óÀ̺귯¸®°¡ »ç¿ëÇÑ´Ù.
- ¹Ý´ë·Î ¸¹Àº ÇÁ·Î±×·¥Àº ÇÁ·Î±×·¥À» È®ÀåÇϱâÀ§ÇØ °øÀ¯°´Ã¼¸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>1998³â ½ÇÇàÁß ½ÇÁ¦·Î ±â´ÉÀ» È®ÀåÇϱâÀ§ÇØ DSO ±¸Á¶¸¦ »ç¿ëÇÑ
- ¼ÒÇÁÆ®¿þ¾î ÆÐÅ°Áö´Â (XS ±¸Á¶¿Í DynaLoader ¸ðµâÀ» »ç¿ëÇÑ)
- Perl 5, Netscape Server <em>µî</em>À¸·Î µå¹°¾ú´Ù. ¾ÆÆÄÄ¡´Â
- ÀÌ¹Ì ±â´ÉÀ» È®ÀåÇϱâÀ§ÇØ ¸ðµâ °³³äÀ» »ç¿ëÇß°í ¿ÜºÎ ¸ðµâÀ»
- ¾ÆÆÄÄ¡ Çٽɱâ´É¿¡ ¿¬°áÇϱâÀ§ÇØ ³»ºÎÀûÀ¸·Î µð½ºÆÐÄ¡¸ñ·ÏÀ»
- ÀÌ¿ëÇÑ Á¢±Ù¹æ¹ýÀ» »ç¿ëÇ߱⶧¹®¿¡ 1.3 ¹öÀüºÎÅÍ ÀÌ ´ë¿­¿¡ ÇÕ·ùÇß´Ù.
- ±×·¡¼­ ¾ÆÆÄÄ¡´Â ½ÇÇàÁß ¸ðµâÀ» ÀоîµéÀ̴µ¥ DSO¸¦ »ç¿ëÇϵµ·Ï
- ¿î¸íÁö¿öÁ³´Ù.</p>
-</section>
-
-<section id="advantages"><title>Àå´ÜÁ¡</title>
-
- <p>¾Õ¿¡¼­ ¸»ÇÑ DSO¸¦ »ç¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>½ÇÁ¦ ¼­¹ö ÇÁ·Î¼¼½º°¡ ÄÄÆÄÀϽà <code>configure</code>
- ¿É¼Ç´ë½Å <code>httpd.conf</code>ÀÇ <directive
- module="mod_so">LoadModule</directive>À» »ç¿ëÇÏ¿© ½ÇÇàÁß¿¡
- °áÇյǹǷΠ¼­¹ö ÆÐÅ°Áö ½ÇÇàÀÌ ´õ À¯¿¬ÇÏ´Ù. ¿¹¸¦ µé¾î ÇѹøÀÇ
- ¾ÆÆÄÄ¡ ¼³Ä¡¸¸À¸·Î ´Ù¸¥ ¼­¹ö(Ç¥ÁØ ¹öÀü°ú SSL ¹öÀü, ÃÖ¼ÒÈ­
- ¹öÀü°ú ±â´ÉÃß°¡ ¹öÀü [mod_perl, PHP3] <em>µî</em>)¸¦ ½ÇÇàÇÒ
- ¼ö ÀÖ´Ù.</li>
-
- <li>¼­¹ö´Â ¼³Ä¡ÈÄ¿¡µµ Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» »ç¿ëÇÏ¿© ½±°Ô
- È®ÀåÇÒ ¼ö ÀÖ´Ù. ÃÖ¼ÒÇÑ ±â¾÷ÀÇ ÆÐÅ°Áö Á¦ÀÛÀÚ´Â ¾ÆÆÄÄ¡ ÇÙ½É
- ÆÐÅ°Áö¿Í º°µµ·Î PHP3, mod_perl, mod_fastcgi <em>µî</em>À»
- Ãß°¡ ÆÐÅ°Áö·Î ¸¸µé ¼ö À־ Å« À̵æÀÌ´Ù.</li>
-
- <li>DSO¿Í <code>apxs</code>¸¦ °¡Áö°í ¾ÆÆÄÄ¡ ¼Ò½º Æ®¸® ¹Û¿¡¼­
- ÀÛ¾÷ÇÏ°í <code>apxs -i</code>¿Í <code>apachectl restart</code>
- ¸í·É¾î¸¸À¸·Î ÇöÀç °³¹ßÇÑ ¸ðµâÀÇ »õ ¹öÀüÀ» ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡
- ¼­¹ö¿¡ ¹Ý¿µÇÒ ¼ö À־ ´õ ½±°Ô ¾ÆÆÄÄ¡ ¸ðµâÀ» °³¹ßÇÒ ¼ö
- ÀÖ´Ù.</li>
- </ul>
-
- <p>DSO´Â ´ÙÀ½°ú °°Àº ´ÜÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>ÇÁ·Î±×·¥ÀÇ ÁÖ¼Ò°ø°£¿¡ Äڵ带 µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â ±â´ÉÀ»
- Áö¿øÇÏÁö¾Ê´Â ¿î¿µÃ¼Á¦°¡ Àֱ⠶§¹®¿¡ ¸ðµç Ç÷¡Æû¿¡¼­ DSO¸¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</li>
-
- <li>À¯´Ð½º ·Î´õ°¡ ½Éº¼À» ã¾Æ¾ßÇϱ⠶§¹®¿¡ ¼­¹ö ½ÃÀÛÀÌ
- ¾à 20% Á¤µµ ´Ê¾îÁø´Ù.</li>
-
- <li>¼­¹ö´Â À§Ä¡µ¶¸³ÄÚµå(position independent code, PIC)
- ¶§¹®¿¡ Àý´ëÁÖ¼ÒÁöÁ¤(absolute addressing)º¸´Ù ´À¸°
- »ó´ëÁÖ¼ÒÁöÁ¤(relative addressing)ÀÇ º¹ÀâÇÑ ¾î¼Àºí·¯ ±â¹ýÀÌ
- ÇÊ¿äÇϹǷΠ¾î¶² Ç÷¡Æû¿¡¼­ ½ÇÇà½Ã ¾à 5% Á¤µµ ´Ê´Ù.</li>
-
- <li>DSO ¸ðµâÀ» ´Ù¸¥ DSO±â¹Ý ¶óÀ̺귯¸®(<code>ld -lfoo</code>)¿¡
- ¸µÅ©ÇÒ ¼ö ¾ø´Â Ç÷¡ÆûÀÌ Àֱ⶧¹®¿¡ (¿¹¸¦ µé¾î ELF±â¹Ý
- Ç÷¡ÆûÀº Áö¿øÇÏÁö¸¸ a.out±â¹Ý Ç÷¡ÆûÀº º¸Åë ÀÌ ±â´ÉÀ»
- Áö¿øÇÏÁö ¾Ê´Â´Ù) ¸ðµç Á¾·ùÀÇ ¸ðµâ¿¡ DSO¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
- ´Ù¸¥ ¸»·Î DSO ÆÄÀÏ·Î ÄÄÆÄÀÏÇÏ´Â ¸ðµâÀº ¾ÆÆÄÄ¡ Çٽɰú ¾ÆÆÄÄ¡
- ÇÙ½ÉÀÌ »ç¿ëÇÏ´Â C ¶óÀ̺귯¸®(<code>libc</code>)¿Í ´Ù¸¥
- µ¿Àû/Á¤Àû ¶óÀ̺귯¸®, À§Ä¡µ¶¸³Äڵ带 ´ã°í ÀÖ´Â Á¤Àû ¶óÀ̺귯¸®
- ¾ÆÄ«À̺ê(<code>libfoo.a</code>)ÀÇ ½Éº¼¸¸À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ´Ù¸¥ Äڵ带 »ç¿ëÇÏ·Á¸é ¾ÆÆÄÄ¡ ÇÙ½ÉÀÌ ±×°ÍÀ» ÂüÁ¶ÇÏ´øÁö,
- <code>dlopen()</code>À¸·Î Á÷Á¢ Äڵ带 Àоîµé¿©¾ß ÇÑ´Ù.</li>
- </ul>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/dso.xml.meta b/docs/manual/dso.xml.meta
deleted file mode 100644
index 25a5521a8e..0000000000
--- a/docs/manual/dso.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>dso</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/env.html b/docs/manual/env.html
deleted file mode 100644
index 1bc4533824..0000000000
--- a/docs/manual/env.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: env.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: env.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: env.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/env.html.en b/docs/manual/env.html.en
deleted file mode 100644
index 9368d05425..0000000000
--- a/docs/manual/env.html.en
+++ /dev/null
@@ -1,405 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Environment Variables in Apache - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Environment Variables in Apache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/env.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The Apache HTTP Server provides a mechanism for storing
- information in named variables that are called <em>environment
- variables</em>. This information can be used to control various
- operations such as logging or access control. The variables are
- also used as a mechanism to communicate with external programs
- such as CGI scripts. This document discusses different ways to
- manipulate and use these variables.</p>
-
- <p>Although these variables are referred to as <em>environment
- variables</em>, they are not the same as the environment
- variables controlled by the underlying operating system.
- Instead, these variables are stored and manipulated in an
- internal Apache structure. They only become actual operating
- system environment variables when they are provided to CGI
- scripts and Server Side Include scripts. If you wish to
- manipulate the operating system environment under which the
- server itself runs, you must use the standard environment
- manipulation mechanisms provided by your operating system
- shell.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#setting">Setting Environment Variables</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Using Environment Variables</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#special">Special Purpose Environment Variables</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">Examples</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="setting" id="setting">Setting Environment Variables</a></h2>
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>
-
- <h3><a name="basic-manipulation" id="basic-manipulation">Basic Environment Manipulation</a></h3>
-
-
- <p>The most basic way to set an environment variable in Apache
- is using the unconditional <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> directive. Variables may also be passed from
- the environment of the shell which started the server using the
- <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> directive.</p>
-
-
- <h3><a name="conditional" id="conditional">Conditional Per-Request Settings</a></h3>
-
-
- <p>For additional flexibility, the directives provided by
- mod_setenvif allow environment variables to be set on a
- per-request basis, conditional on characteristics of particular
- requests. For example, a variable could be set only when a
- specific browser (User-Agent) is making a request, or only when
- a specific Referer [sic] header is found. Even more flexibility
- is available through the mod_rewrite's <code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> which uses the
- <code>[E=...]</code> option to set environment variables.</p>
-
-
- <h3><a name="unique-identifiers" id="unique-identifiers">Unique Identifiers</a></h3>
-
-
- <p>Finally, mod_unique_id sets the environment variable
- <code>UNIQUE_ID</code> for each request to a value which is
- guaranteed to be unique across "all" requests under very
- specific conditions.</p>
-
-
- <h3><a name="standard-cgi" id="standard-cgi">Standard CGI Variables</a></h3>
-
-
- <p>In addition to all environment variables set within the
- Apache configuration and passed from the shell, CGI scripts and
- SSI pages are provided with a set of environment variables
- containing meta-information about the request as required by
- the <a href="http://cgi-spec.golux.com/">CGI
- specification</a>.</p>
-
-
- <h3><a name="caveats" id="caveats">Some Caveats</a></h3>
-
-
- <ul>
- <li>It is not possible to override or change the standard CGI
- variables using the environment manipulation directives.</li>
-
- <li>When <a href="suexec.html">suexec</a> is used to launch
- CGI scripts, the environment will be cleaned down to a set of
- <em>safe</em> variables before CGI scripts are launched. The
- list of <em>safe</em> variables is defined at compile-time in
- <code>suexec.c</code>.</li>
-
- <li>For portability reasons, the names of environment
- variables may contain only letters, numbers, and the
- underscore character. In addition, the first character may
- not be a number. Characters which do not match this
- restriction will be replaced by an underscore when passed to
- CGI scripts and SSI pages.</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Using Environment Variables</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>
-
- <h3><a name="cgi-scripts" id="cgi-scripts">CGI Scripts</a></h3>
-
-
- <p>One of the primary uses of environment variables is to
- communicate information to CGI scripts. As discussed above, the
- environment passed to CGI scripts includes standard
- meta-information about the request in addition to any variables
- set within the Apache configuration. For more details, see the
- <a href="howto/cgi.html">CGI tutorial</a>.</p>
-
-
- <h3><a name="ssi-pages" id="ssi-pages">SSI Pages</a></h3>
-
-
- <p>Server-parsed (SSI) documents processed by mod_include's
- <code>INCLUDES</code> filter can print environment variables
- using the <code>echo</code> element, and can use environment
- variables in flow control elements to makes parts of a page
- conditional on characteristics of a request. Apache also
- provides SSI pages with the standard CGI environment variables
- as discussed above. For more details, see the <a href="howto/ssi.html">SSI tutorial</a>.</p>
-
-
- <h3><a name="access-control" id="access-control">Access Control</a></h3>
-
-
- <p>Access to the server can be controlled based on the value of
- environment variables using the <code>allow from env=</code>
- and <code>deny from env=</code> directives. In combination with
- <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, this
- allows for flexible control of access to the server based on
- characteristics of the client. For example, you can use these
- directives to deny access to a particular browser (User-Agent).
- </p>
-
-
- <h3><a name="logging" id="logging">Conditional Logging</a></h3>
-
-
- <p>Environment variables can be logged in the access log using
- the <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
- option <code>%e</code>. In addition, the decision on whether
- or not to log requests can be made based on the status of
- environment variables using the conditional form of the
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive. In combination with <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> this allows for flexible control of which
- requests are logged. For example, you can choose not to log
- requests for filenames ending in <code>gif</code>, or you can
- choose to only log requests from clients which are outside your
- subnet.</p>
-
-
- <h3><a name="response-headers" id="response-headers">Conditional Response Headers</a></h3>
-
-
- <p>The <code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>
- directive can use the presence or
- absence of an environment variable to determine whether or not
- a certain HTTP header will be placed in the response to the
- client. This allows, for example, a certain response header to
- be sent only if a corresponding header is received in the
- request from the client.</p>
-
-
-
- <h3><a name="external-filter" id="external-filter">External Filter Activation</a></h3>
-
-
- <p>External filters configured by <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>
- using the <code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code> directive can
- by activated conditional on an environment variable using the
- <code>disableenv=</code> and <code>enableenv=</code> options.</p>
-
-
- <h3><a name="url-rewriting" id="url-rewriting">URL Rewriting</a></h3>
-
-
- <p>The <code>%{ENV:...}</code> form of <em>TestString</em> in
- the <code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
- allows mod_rewrite's rewrite
- engine to make decisions conditional on environment variables.
- Note that the variables accessible in mod_rewrite without the
- <code>ENV:</code> prefix are not actually environment
- variables. Rather, they are variables special to mod_rewrite
- which cannot be accessed from other modules.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="special" id="special">Special Purpose Environment Variables</a></h2>
-
-
- <p>Interoperability problems have led to the introduction of
- mechanisms to modify the way Apache behaves when talking to
- particular clients. To make these mechanisms as flexible as
- possible, they are invoked by defining environment variables,
- typically with <code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>, though <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> and <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> could also be used, for example.</p>
-
- <h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
-
-
- <p>This forces the request to be treated as a HTTP/1.0 request
- even if it was in a later dialect.</p>
-
-
- <h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>
-
- <p>If you have the <code>DEFLATE</code> filter activated, this
- environment variable will ignore the accept-encoding setting of
- your browser and will send compressed output unconditionally.</p>
-
- <h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
-
-
- <p>This causes any <code>Vary</code> fields to be removed from
- the response header before it is sent back to the client. Some
- clients don't interpret this field correctly; setting this
- variable can work around this problem. Setting this variable
- also implies <strong>force-response-1.0</strong>.</p>
-
-
- <h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
-
-
- <p>This forces an HTTP/1.0 response to clients making an HTTP/1.0
- request. It was originally
- implemented as a result of a problem with AOL's proxies. Some
- HTTP/1.0 clients may not behave correctly when given an HTTP/1.1
- response, and this can be used to interoperate with them.</p>
-
-
-
- <h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>
-
-
- <p>When set to a value of "1", this variable disables the DEFLATE
- output filter provided by <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> for
- content-types other than <code>text/html</code>. If you'd rather
- use statically compressed files; <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
- evaluates the variable as well (not only for gzip, but for all
- encodings that differ from "identity").</p>
-
-
- <h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>
-
- <p>When set, the <code>DEFLATE</code> filter of
- <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> will be turned off and
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> will refuse to deliver encoded
- resources.</p>
-
-
-
- <h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
-
-
- <p>This disables <code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code>
- when set.</p>
-
-
-
- <h3><a name="prefer-language" id="prefer-language">prefer-language</a></h3>
-
- <p>This influences <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>'s behaviour. If
- it contains a language tag (such as <code>en</code>, <code>ja</code>
- or <code>x-klingon</code>), <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> tries
- to deliver a variant with that language. If there's no such variant,
- the normal <a href="content-negotiation.html">negotiation</a> process
- applies.</p>
-
-
-
- <h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
-
-
- <p>This forces the server to be more careful when sending a redirect
- to the client. This is typically used when a client has a known
- problem handling redirects. This was originally implemented as a
- result of a problem with Microsoft's WebFolders software which has
- a problem handling redirects on directory resources via DAV
- methods.</p>
-
-
-
- <h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
-
-
- <p><em>Available in versions after 2.0.40</em></p>
-
- <p>When Apache issues a redirect in response to a client request,
- the response includes some actual text to be displayed in case
- the client can't (or doesn't) automatically follow the redirection.
- Apache ordinarily labels this text according to the character set
- which it uses, which is ISO-8859-1.</p>
- <p> However, if the redirection is to a page that uses a different
- character set, some broken browser versions will try to use the
- character set from the redirection text rather than the actual page.
- This can result in Greek, for instance, being incorrectly rendered.</p>
- <p>Setting this environment variable causes Apache to omit the character
- set for the redirection text, and these broken browsers will then correctly
- use that of the destination page.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
-
- <h3><a name="misbehaving" id="misbehaving">Changing protocol behavior with misbehaving clients</a></h3>
-
-
- <p>We recommend that the following lines be included in
- httpd.conf to deal with known client problems.</p>
-<div class="example"><pre>
-#
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0</pre></div>
-
-
- <h3><a name="no-img-log" id="no-img-log">Do not log requests for images in the access log</a></h3>
-
-
- <p>This example keeps requests for images from appearing in the
- access log. It can be easily modified to prevent logging of
- particular directories, or to prevent logging of requests
- coming from particular hosts.</p>
- <div class="example"><pre>
-SetEnvIf Request_URI \.gif image-request
-SetEnvIf Request_URI \.jpg image-request
-SetEnvIf Request_URI \.png image-request
-CustomLog logs/access_log common env=!image-request</pre></div>
-
-
- <h3><a name="image-theft" id="image-theft">Prevent "Image Theft"</a></h3>
-
-
- <p>This example shows how to keep people not on your server
- from using images on your server as inline-images on their
- pages. This is not a recommended configuration, but it can work
- in limited circumstances. We assume that all your images are in
- a directory called /web/images.</p>
- <div class="example"><pre>
-SetEnvIf Referer "^http://www.example.com/" local_referal
-# Allow browsers that do not send Referer info
-SetEnvIf Referer "^$" local_referal
-&lt;Directory /web/images&gt;
- Order Deny,Allow
- Deny from all
- Allow from env=local_referal
-&lt;/Directory&gt;</pre></div>
-
- <p>For more information about this technique, see the
- ApacheToday tutorial " <a href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
- Keeping Your Images from Adorning Other Sites</a>".</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/env.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/env.html.ja.euc-jp b/docs/manual/env.html.ja.euc-jp
deleted file mode 100644
index 3850b42ab9..0000000000
--- a/docs/manual/env.html.ja.euc-jp
+++ /dev/null
@@ -1,393 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¤Î´Ä¶­ÊÑ¿ô - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache ¤Î´Ä¶­ÊÑ¿ô</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/env.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Apache HTTP ¥µ¡¼¥Ð¤Ï<em>´Ä¶­ÊÑ¿ô</em>¤È¸Æ¤Ð¤ì¤ë¡¢Ì¾Á°¤Î¤Ä¤¤¤¿
- ÊÑ¿ô¤Ë¾ðÊó¤òµ­²±¤¹¤ë»ÅÁȤߤòÄ󶡤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¾ðÊó¤Ï¥í¥°¼ý½¸¤ä
- ¥¢¥¯¥»¥¹À©¸æ¤Ê¤É¤Î¤¤¤í¤¤¤í¤ÊÁàºî¤òÀ©¸æ¤¹¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤é¤ÎÊÑ¿ô¤Ï CGI ¥¹¥¯¥ê¥×¥È¤Ê¤É¤Î³°Éô¥×¥í¥°¥é¥à¤ÈÄÌ¿®¤¹¤ë¤¿¤á¤Ë¤â
- »È¤ï¤ì¤Þ¤¹¡£¤³¤Îʸ½ñ¤Ï¤½¤ì¤é¤ÎÊÑ¿ô¤ÎÁàºîÊýË¡¤È»ÈÍÑÊýË¡¤ò¤¤¤¯¤Ä¤«
- ¾Ò²ð¤·¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤é¤ÎÊÑ¿ô¤Ï<em>´Ä¶­ÊÑ¿ô</em>¤È¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°
- ¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤ÆÀ©¸æ¤µ¤ì¤Æ¤¤¤ë´Ä¶­ÊÑ¿ô¤ÈƱ¤¸¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¼ÂºÝ¤Ï¡¢¤³¤ì¤é¤ÎÊÑ¿ô¤Ï Apache ¤ÎÆâÉô¹½Â¤¤ÎÃæ¤Ëµ­²±¤µ¤ì¡¢Áàºî¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤½¤ì¤é¤Ï¡¢CGI ¤ä SSI ¥¹¥¯¥ê¥×¥È¤ËÅϤµ¤ì¤¿¤È¤­¤À¤±¡¢¼ÂºÝ¤Î
- ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î´Ä¶­ÊÑ¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£¥µ¡¼¥Ð¼«¿È¤¬
- ¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î´Ä¶­¤òÁàºî¤·¤¿¤¤¾ì¹ç¤Ï¡¢
- ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î¥·¥§¥ë¤¬Ä󶡤·¤Æ¤¤¤ëɸ½à¤Î´Ä¶­ÊÑ¿ô¤Î
- ÁàºîÊýË¡¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#setting">´Ä¶­ÊÑ¿ô¤ÎÀßÄê</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">´Ä¶­ÊÑ¿ô¤Î»ÈÍÑ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#special">ÆÃÊ̤ÊÌÜŪ¤Î´Ä¶­ÊÑ¿ô</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">Îã</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="setting" id="setting">´Ä¶­ÊÑ¿ô¤ÎÀßÄê</a></h2>
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>
-
- <h3><a name="basic-manipulation" id="basic-manipulation">´ðËÜŪ¤Ê´Ä¶­¤ÎÁàºî</a></h3>
-
-
- <p>Apache ¤Ë¤ª¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë°ìÈÖ´ðËÜŪ¤ÊÊýË¡¤Ï¡¢
- ̵¾ò·ï¤Ë´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¤¹¡£
- <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢Apache ¤¬µ¯Æ°¤µ¤ì¤¿¥·¥§¥ë¤Î
- ´Ä¶­ÊÑ¿ô¤òÅϤ¹¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="conditional" id="conditional">¥ê¥¯¥¨¥¹¥ÈËè¤Ë¾ò·ï¤Ë´ð¤Å¤¤¤ÆÀßÄꤹ¤ë</a></h3>
-
-
- <p>¤è¤ê½ÀÆðÀ­¤ò¹â¤á¤ë¤¿¤á¤Ë¡¢mod_setenvif
- ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢¥ê¥¯¥¨¥¹¥È¤Î
- ÆÃÀ­¤Ë´ð¤Å¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¡¢ÆÃÄê¤Î¥Ö¥é¥¦¥¶
- (User-Agent) ¤Î¥ê¥¯¥¨¥¹¥È¤äÆÃÄê¤Î Referer [°Õ¿ÞŪ¤ÊÄÖ¤ê¤Ç¤¹]
- (ÌõÃí: Àµ¤·¤¤ÄÖ¤ê¤Ï referrer ¤Ç¤¹¤¬¡¢HTTP ¤Î»ÅÍÍ¤Ç¤Ï Referer
- ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹) ¥Ø¥Ã¥À¤¬¸«¤Ä¤«¤Ã¤¿¤È¤­¤Î¤ßÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- mod_rewrite ¤Î <code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤ª¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë <code>[E=...]</code>
- ¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢
- ¤è¤ê½ÀÆð¤ÊÀßÄê¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="unique-identifiers" id="unique-identifiers">°ì°Õ¤Ê¼±ÊÌ»Ò</a></h3>
-
-
- <p>mod_unique_id ¤Ï¡¢Èó¾ï¤Ë¸Â¤é¤ì¤¿¾ò·ï¤Î²¼¤Ç
- ¡Ö¤¹¤Ù¤Æ¡×¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤Ä¤¤¤Æ¡¢°ì°Õ¤Ç¤¢¤ë¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤ëÃͤò´Ä¶­ÊÑ¿ô
- <code>UNIQUE_ID</code> ¤ËÀßÄꤷ¤Þ¤¹¡£</p>
-
-
- <h3><a name="standard-cgi" id="standard-cgi">ɸ½à CGI ÊÑ¿ô</a></h3>
-
-
- <p>Apache ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÇÀßÄꤵ¤ì¤¿´Ä¶­ÊÑ¿ô¤È¥·¥§¥ë¤«¤éÅϤµ¤ì¤ë
- ´Ä¶­ÊÑ¿ô¤Ë²Ã¤¨¤Æ¡¢CGI ¥¹¥¯¥ê¥×¥È¤È SSI ¥Ú¡¼¥¸¤Ë¤Ï <a href="http://cgi-spec.golux.com">CGI ¤Î»ÅÍÍ</a>¤ÇÍ׵ᤵ¤ì¤Æ¤¤¤ë¡¢
- ¥ê¥¯¥¨¥¹¥È¤Î¥á¥¿¾ðÊó¤ò»ý¤Ã¤¿´Ä¶­ÊÑ¿ô¤ÎÁȤ¬Ä󶡤µ¤ì¤Þ¤¹¡£</p>
-
-
- <h3><a name="caveats" id="caveats">¤¤¤¯¤Ä¤«¤ÎÃí°Õ</a></h3>
-
-
- <ul>
- <li>´Ä¶­¤òÁàºî¤¹¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æɸ½à CGI
- ÊÑ¿ô¤ò¾å½ñ¤­¤·¤¿¤êÊѹ¹¤·¤¿¤ê¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</li>
-
- <li>CGI ¥¹¥¯¥ê¥×¥È¤òµ¯Æ°¤¹¤ë¤¿¤á¤Ë <a href="suexec.html">suexec</a>
- ¤¬»ÈÍѤµ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢CGI ¥¹¥¯¥ê¥×¥È¤¬µ¯Æ°¤¹¤ë¤¿¤á¤Ë¡¢´Ä¶­ÊÑ¿ô¤Ï<em>°ÂÁ´</em>¤Ê´Ä¶­ÊÑ¿ô¤ÎÁȤËÀ°Íý¤µ¤ì¤Þ¤¹¡£
- ¤³¤Î°ÂÁ´¤Ê´Ä¶­ÊÑ¿ô¤Î½¸¹ç¤Ï¡¢¥³¥ó¥Ñ¥¤¥ë»þ¤Ë <code>suexec.c</code>
- ¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£</li>
-
- <li>°Ü¿¢À­¤Î¤¿¤á¤Ë¡¢´Ä¶­ÊÑ¿ô¤Î̾Á°¤Ï¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¡¢
- ¿ô»ú¤È¥¢¥ó¥À¡¼¥¹¥³¥¢ (ÌõÃí: '_') ¤À¤±¤«¤éÀ®¤ê¤Þ¤¹¡£
- ¤µ¤é¤Ë¡¢ºÇ½é¤Îʸ»ú¤Ï¿ô»ú¤Ç¤¢¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
- ¤³¤ÎÀ©¸Â¤Ë¹ç¤ï¤Ê¤¤Ê¸»ú¤Ï CGI ¥¹¥¯¥ê¥×¥È¤È SSI
- ¥Ú¡¼¥¸¤ËÅϤµ¤ì¤ë¤È¤­¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤ËÃÖ´¹¤µ¤ì¤Þ¤¹¡£</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">´Ä¶­ÊÑ¿ô¤Î»ÈÍÑ</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>
-
- <h3><a name="cgi-scripts" id="cgi-scripts">CGI ¥¹¥¯¥ê¥×¥È</a></h3>
-
-
- <p>´Ä¶­ÊÑ¿ô¤Î¼ç¤ÊÍøÍÑË¡¤Î°ì¤Ä¤Ï¡¢CGI ¥¹¥¯¥ê¥×¥È¤Ë¾ðÊó¤òÅÁ¤¨¤ë¤³¤È¤Ç¤¹¡£
- ¾å¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢CGI ¥¹¥¯¥ê¥×¥È¤ËÅϤµ¤ì¤ë´Ä¶­ÊÑ¿ô¤Ï Apache
- ¤ÎÀßÄê¤Ë¤è¤êÀßÄꤵ¤ì¤ëÊÑ¿ô¤Ë²Ã¤¨¤Æ¡¢¥ê¥¯¥¨¥¹¥È¤Îɸ½à¤Î¥á¥¿¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£
- ¾ÜºÙ¤Ï <a href="howto/cgi.html">CGI ¥Á¥å¡¼¥È¥ê¥¢¥ë</a>
- ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-
- <h3><a name="ssi-pages" id="ssi-pages">SSI ¥Ú¡¼¥¸</a></h3>
-
-
- <p>mod_include ¤Î <code>INCLUDES</code> ¥Õ¥£¥ë¥¿¤Ç½èÍý¤µ¤ì¤ë
- server-parsed (SSI) ¥É¥­¥å¥á¥ó¥È¤Ç¤Ï¡¢<code>echo</code>
- Í×ÁǤò»ÈÍѤ¹¤ë¤È´Ä¶­ÊÑ¿ô¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£
- ¤Þ¤¿¡¢¥Ú¡¼¥¸¤Î¤¢¤ëÉôʬ¤¬¥ê¥¯¥¨¥¹¥È¤ÎÀ­¼Á¤Ë±þ¤¸¤ÆÊѹ¹¤µ¤ì¤ë¤è¤¦¤Ë¡¢
- ´Ä¶­ÊÑ¿ô¤ò¥Õ¥í¡¼À©¸æÍ×ÁǤǻȤ¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¾ÜºÙ¤Ï
- <a href="howto/ssi.html">SSI ¥Á¥å¡¼¥È¥ê¥¢¥ë</a> ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-
- <h3><a name="access-control" id="access-control">¥¢¥¯¥»¥¹À©¸æ</a></h3>
-
-
- <p><code>allow from env=</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code>deny from env=</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¡¢¥µ¡¼¥Ð¤Ø¤Î¥¢¥¯¥»¥¹¤ò´Ä¶­ÊÑ¿ô¤ÎÃͤÇÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÈÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¡¢¥¯¥é¥¤¥¢¥ó¥È¤ÎÆÃÀ­¤Ë´ð¤Å¤¤¤Æ
- ¥µ¡¼¥Ð¤Ø¤Î¥¢¥¯¥»¥¹À©¸æ¤ò½ÀÆð¤Ë¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¡¢ÆÃÄê¤Î¥Ö¥é¥¦¥¶ (User-Agent)
- ¤«¤é¤Î¥¢¥¯¥»¥¹¤òµñÈݤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="logging" id="logging">¾ò·ïÉÕ¤­¥í¥°µ­Ï¿</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥ª¥×¥·¥ç¥ó <code>%e</code>
- ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢´Ä¶­ÊÑ¿ô¤ò¥¢¥¯¥»¥¹¥í¥°¤Ëµ­Ï¿¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤µ¤é¤Ë¡¢
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¾ò·ïʬ´ô¼°¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢
- ´Ä¶­ÊÑ¿ô¤ÎÃͤˤè¤Ã¤Æ¥ê¥¯¥¨¥¹¥È¤ò¥í¥°¤Ëµ­Ï¿¤¹¤ë¤«¤É¤¦¤«¤ò·è¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÈÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¡¢
- ¤É¤Î¥ê¥¯¥¨¥¹¥È¤ò¥í¥°¤Ëµ­Ï¿¤¹¤ë¤«¤ò½ÀÆð¤ËÀ©¸æ¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢
- <code>gif</code> ¤Ç½ª¤ï¤ë¥Õ¥¡¥¤¥ë̾¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¥í¥°¤Ëµ­Ï¿¤·¤Ê¤¤¡¢
- °ã¤¦¥µ¥Ö¥Í¥Ã¥È¤Î¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤À¤±¤ò¥í¥°¤Ëµ­Ï¿¤¹¤ë¡¢
- ¤È¤¤¤¦ÁªÂò¤¬²Äǽ¤Ç¤¹¡£</p>
-
-
- <h3><a name="response-headers" id="response-headers">¾ò·ïÉÕ¤­±þÅú¥Ø¥Ã¥À</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï´Ä¶­ÊÑ¿ô¤Î¸ºß¤äÉԺߤˤè¤Ã¤Æ¥¯¥é¥¤¥¢¥ó¥È¤Ø¤Î±þÅú¤ËÆÃÄê¤Î
- HTTP ¥Ø¥Ã¥À¤òÉÕ¤±¤ë¤«¤É¤¦¤«¤ò·è¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¤¿¤È¤¨¤Ð¡¢¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È
- ¤Ë¤¢¤ë¥Ø¥Ã¥À¤¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ßÆÃÄê¤Î±þÅú¥Ø¥Ã¥À¤òÁ÷¤ë¡¢¤È¤¤¤¦¤è¤¦¤Ê¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
-
-
- <h3><a name="external-filter" id="external-filter">³°Éô¥Õ¥£¥ë¥¿¤ÎŬÍÑ</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ
- <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> ¤ÇÀßÄꤵ¤ì¤ë³°Éô¥Õ¥£¥ë¥¿¤Ï¡¢
- <code>disableenv=</code> ¤È <code>enableenv=</code>
- ¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¡¢´Ä¶­ÊÑ¿ô¤Ë¤è¤ë¾ò·ïÉÕ¤­Å¬ÍѤ¬¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="url-rewriting" id="url-rewriting">URL ¤Î½ñ¤­´¹¤¨</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç<em>ɾ²Áʸ»úÎó</em>¤È¤·¤Æ
- <code>%{ENV:...}</code> ¼°¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢mod_rewrite
- ¤Î½ñ¤­´¹¤¨¥¨¥ó¥¸¥ó¤¬´Ä¶­ÊÑ¿ô¤Ë´ð¤¤¤Æ¾ò·ïʬ´ô¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- mod_rewrite ¤¬»ÈÍѲÄǽ¤ÊÊÑ¿ô¤Ç <code>ENV:</code> ¤¬Á°¤Ë¤Ä¤¤¤Æ¤¤¤Ê¤¤ÊÑ¿ô¤Ï¡¢
- ¼ÂºÝ¤Ï´Ä¶­ÊÑ¿ô¤Ç¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤ì¤é¤Ï¾¤Î¥â¥¸¥å¡¼¥ë¤«¤é¤Ï»ÈÍѤǤ­¤Ê¤¤ mod_rewrite ÍѤÎÆÃÊ̤ÊÊÑ¿ô¤Ç¤¹¡£
- </p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="special" id="special">ÆÃÊ̤ÊÌÜŪ¤Î´Ä¶­ÊÑ¿ô</a></h2>
-
-
- <p>¸ß´¹À­¤ÎÌäÂê¤ò²ò·è¤¹¤ë¤¿¤á¤Ë¡¢ÆÃÄê¤Î¥¯¥é¥¤¥¢¥ó¥È¤ÈÄÌ¿®¤·¤Æ¤¤¤ë¤È¤­¤Ï
- Apache ¤ÎÆ°ºî¤òÊѹ¹¤Ç¤­¤ëµ¡¹½¤¬Æ³Æþ¤µ¤ì¤Þ¤·¤¿¡£¤Ç¤­¤ë¤À¤±½ÀÆð¤Ë¤¹¤ë¤¿¤á¤Ë¡¢
- ¤³¤ì¤é¤Îµ¡¹½¤Ï´Ä¶­ÊÑ¿ô¤òÄêµÁ¤¹¤ë¤³¤È¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£ÉáÄ̤ϡ¢
- <code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹¤¬¡¢¤¿¤È¤¨¤Ð <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤â»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
-
-
- <p>¤³¤ì¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢¥ê¥¯¥¨¥¹¥È¤¬ HTTP/1.0
- ¤è¤ê¿·¤·¤¤¥×¥í¥È¥³¥ë¤Î¾ì¹ç¤Ç¤â¡¢HTTP/1.0 ¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
-
- <h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>
-
- <p><code>DEFLATE</code> ¥Õ¥£¥ë¥¿¤¬»ÈÍѤ¹¤ë¤è¤¦¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤­¤Ë¡¢
- ¤³¤Î´Ä¶­ÊÑ¿ô¤Ï¥Ö¥é¥¦¥¶¤Î accept-encoding ¤ÎÀßÄê¤ò̵»ë¤·¤Æ¾ï¤Ë
- °µ½Ì¤µ¤ì¤¿½ÐÎϤòÁ÷¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
-
-
- <p>±þÅú¥Ø¥Ã¥À¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤ëÁ°¤Ë <code>Vary</code>
- ¥Õ¥£¡¼¥ë¥É¤ò¼è¤ê½ü¤­¤Þ¤¹¡£
- ¥¯¥é¥¤¥¢¥ó¥È¤ÎÃæ¤Ë¤Ï¤³¤Î¥Õ¥£¡¼¥ë¥É¤òÀµ¤·¤¯²ò¼á¤·¤Ê¤¤¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ÎÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤Ç¤½¤ÎÌäÂê¤ò²óÈò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ÎÊÑ¿ô¤òÀßÄꤹ¤ë¤È¡¢<strong>force-response-1.0</strong>
- ¤¬ÀßÄꤵ¤ì¤¿¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-
- <h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
-
-
- <p>¤³¤ì¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢HTTP/1.0 ¥ê¥¯¥¨¥¹¥È¤òȯ¹Ô¤¹¤ë¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¤Ï
- ¾ï¤Ë HTTP/1.0 ¤Ç±þÅú¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤Îµ¡Ç½¤Ï¡¢
- ¸µ¡¹¤Ï AOL ¤Î¥×¥í¥­¥·¤ÎÌäÂê¤Î¤¿¤á¤Ë¼ÂÁõ¤µ¤ì¤Þ¤·¤¿¡£HTTP/1.0 ¥¯¥é¥¤¥¢¥ó¥È¤ÎÃæ¤Ë¤Ï¡¢
- HTTP/1.1 ¤Î±þÅú¤òÊÖ¤µ¤ì¤ë¤ÈÀµ¤·¤¯Æ°ºî¤·¤Ê¤¤¤â¤Î¤¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤³¤Îµ¡Ç½¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢¤½¤Î¤è¤¦¤Ê¥¯¥é¥¤¥¢¥ó¥È¤È¤Î´Ö¤Î¸ß´¹À­ÌäÂê¤ò²ò·è¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>
-
-
- <p>¤³¤ì¤¬ 1 ¤ËÀßÄꤵ¤ì¤ë¤È¡¢¤³¤ÎÊÑ¿ô¤Ï <code>text/html</code>
- °Ê³°¤Î¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ËÂФ¹¤ë¡¢<code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>
- Ä󶡤Π<code>DEFLATE</code> ½ÐÎÏ¥Õ¥£¥ë¥¿¤ò̵¸ú¤Ë¤·¤Þ¤¹¡£
- ¤Þ¤¿¡¢ÀÅŪ¤Ë¡¢´û¤Ë°µ½Ì¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¡¢
- (gzip ¤À¤±¤Ç¤Ê¤¯¡¢"identity" ¤È°Û¤Ê¤ëÁ´¤Æ¤Î¥¨¥ó¥³¡¼¥É¤ËÂФ·¤Æ)
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> ¤âÊÑ¿ô¤òɾ²Á¤·¤Þ¤¹¡£</p>
-
-
- <h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>
- <p>¥»¥Ã¥È¤µ¤ì¤ë¤È¡¢<code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> ¤Î
- <code>DEFLATE</code> ¥Õ¥£¥ë¥¿¤¬¥ª¥Õ¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤½¤·¤Æ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
- ¤Ï¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥ê¥½¡¼¥¹¤òÁ÷¤é¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
-
- <h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
-
-
- <p>¤³¤ì¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢<code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code> ¤ò»ÈÍѤ·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <h4><a name="prefer-language" id="prefer-language">prefer-language</a></h4>
-
- <p><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> ¤ÎµóÆ°¤Ë±Æ¶Á¤òÍ¿¤¨¤Þ¤¹¡£
- (<code>en</code>, <code>ja</code>, <code>x-klingon</code>¤È¤¤¤Ã¤¿)
- ¸À¸ì¥¿¥°¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢¤½¤Î¸À¸ì¤Î variant ¤òÁ÷¿®¤·¤è¤¦¤È¤·¤Þ¤¹¡£
- ¤½¤Î¤è¤¦¤Ê variant ¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢
- Ä̾ï¤Î<a href="content-negotiation.html">¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>½èÍý¤¬
- ŬÍѤµ¤ì¤Þ¤¹¡£</p>
-
-
-
-
- <h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
-
-
- <p>¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤ÎÁ÷¿®¤ò¥µ¡¼¥Ð¤¬¤è¤êÃí°Õ¿¼¤¯
- ¹Ô¤Ê¤¦¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ¤³¤ì¤ÏÄ̾¥ê¥À¥¤¥ì¥¯¥È¤ËºÝ¤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤Ë
- ÌäÂ꤬¤¢¤ë¤³¤È¤¬Ê¬¤«¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë»È¤ï¤ì¤Þ¤¹¡£¤³¤Îµ¡Ç½¤Ï¸µ¡¹¤Ï
- ¥Þ¥¤¥¯¥í¥½¥Õ¥È¤Î¥¦¥§¥Ö¥Õ¥©¥ë¥À¤Î¥½¥Õ¥È¤¬ DAV
- ¥á¥½¥Ã¥É¤Ë¤è¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î¥ê¥½¡¼¥¹¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤Î°·¤¤¤Ë
- ÌäÂ꤬¤ê¡¢¤½¤ì¤ò²óÈò¤¹¤ë¤¿¤á¤Ë¼ÂÁõ¤µ¤ì¤Þ¤·¤¿¡£</p>
-
-
-
- <h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
-
-
- <p><em>Apache 2.0.40 °Ê¹ß¤ÇÍøÍѲÄǽ</em></p>
-
- <p>¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë±þÅú¤È¤·¤Æ¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¿®¤¹¤ëºÝ¡¢
- ¥ì¥¹¥Ý¥ó¥¹¤Ë¤Ï¥ê¥À¥¤¥ì¥¯¥È¤¬¼«Æ°Åª¤Ë¹Ô¤Ê¤¨¤Ê¤¤ (¹Ô¤Ê¤ï¤ì¤Ê¤¤)
- ¾ì¹ç¤Ëɽ¼¨¤¹¤ë¥Æ¥­¥¹¥È¤¬´Þ¤Þ¤ì¤Þ¤¹¡£
- Ä̾¤³¤Î¥Æ¥­¥¹¥È¤Ë¹çÃפ·¤¿¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¡¢ISO-8859-1
- ¤Ç¥é¥Ù¥ëÉÕ¤±¤ò¤·¤Þ¤¹¡£</p>
- <p>¤·¤«¤·¡¢¥ê¥À¥¤¥ì¥¯¥ÈÀ褬Ê̤Îʸ»ú¥»¥Ã¥È¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢
- ¤¢¤ëÌäÂê¤Î¤¢¤ë¥Ö¥é¥¦¥¶¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢
- ¥ê¥À¥¤¥ì¥¯¥ÈÀè¤Î¼ÂºÝ¤Îʸ»ú¥»¥Ã¥È¤ÎÂå¤ï¤ê¤Ë¡¢
- ¥ê¥À¥¤¥ì¥¯¥È¸µ¤Îʸ»ú¥»¥Ã¥È¤ò»È¤Ã¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¤½¤Î·ë²Ì¡¢Î㤨¤ÐÊѤÊÉÁ²è¤¬¹Ô¤Ê¤ï¤ì¤¿¤ê¤·¤Æ¡¢Æɤá¤Ê¤¯¤Ê¤Ã¤¿¤ê¤·¤Þ¤¹¡£</p>
- <p>¤³¤Î´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤Ç¡¢¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥Æ¥­¥¹¥È¤ËÂФ¹¤ë
- ¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤Î»ØÄê¤ò½üµî¤·¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤éÌäÂê¤Î¤¢¤ë¥Ö¥é¥¦¥¶¤Ç¤â
- ¥ê¥À¥¤¥ì¥¯¥ÈÀè¤Îʸ»ú¥»¥Ã¥È¤òÀµ¤·¤¯»È¤¦¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Îã</a></h2>
-
-
- <h3><a name="misbehaving" id="misbehaving">¤ª¤«¤·¤ÊµóÆ°¤ò¤¹¤ë¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¥×¥í¥È¥³¥ë¤ÎÆ°ºî¤òÊѹ¹¤¹¤ë</a></h3>
-
-
- <p>¥¯¥é¥¤¥¢¥ó¥È¤Ë´Ø¤¹¤ë´ûÃΤÎÌäÂê¤ËÂн褹¤ë¤¿¤á¤Ë¡¢°Ê²¼¤Î¹Ô¤ò
- httpd.conf ¤ËÆþ¤ì¤ë¤³¤È¤ò¿ä¾©¤·¤Æ¤¤¤Þ¤¹¡£</p>
-<div class="example"><pre>
-#
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0</pre></div>
-
-
- <h3><a name="no-img-log" id="no-img-log">²èÁü¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¥¢¥¯¥»¥¹¥í¥°¤Ëµ­Ï¿¤·¤Ê¤¤</a></h3>
-
-
- <p>¤³¤ÎÎã¤Ç¤Ï¡¢²èÁü¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤¬¥¢¥¯¥»¥¹¥í¥°¤Ë¸½¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ¤³¤ì¤òÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î¥í¥°¼ý½¸¤ò¤ä¤á¤¿¤ê¡¢
- ÆÃÄê¤Î¥Û¥¹¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Î¥í¥°¼ý½¸¤ò¤ä¤á¤¿¤ê¤¹¤ë¤³¤È¤¬´Êñ¤Ë¤Ç¤­¤Þ¤¹¡£
- </p>
- <div class="example"><pre>
-SetEnvIf Request_URI \.gif image-request
-SetEnvIf Request_URI \.jpg image-request
-SetEnvIf Request_URI \.png image-request
-CustomLog logs/access_log common env=!image-request</pre></div>
-
-
- <h3><a name="image-theft" id="image-theft">¡Ö²èÁü¤ÎÅðÍѡפòËɤ°</a></h3>
-
-
- <p>¤³¤ÎÎã¤Ï¡¢Ê̤Υµ¡¼¥Ð¤Ë¤¤¤ë¿Í¤¬¡¢¤¢¤Ê¤¿¤Î¥µ¡¼¥Ð¤Ë¤¢¤ë²èÁü¤ò
- inline ²èÁü¤È¤·¤Æ»ÈÍѤ¹¤ë¤³¤È¤òËɤ®¤Þ¤¹¡£
- ¤³¤ì¤Ï¿ä¾©¤µ¤ì¤Æ¤¤¤ëÀßÄê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢¤¢¤ë¸ÂÄꤵ¤ì¤¿¾õ¶·¤Ç¤ÏÍ­¸ú¤Ç¤¹¡£
- ¤³¤³¤Ç¤Ï¡¢¤¹¤Ù¤Æ¤Î²èÁü¤Ï <code>/web/images</code>
- ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¤È²¾Äꤷ¤Þ¤¹¡£</p>
- <div class="example"><pre>
-SetEnvIf Referer "^http://www.example.com/" local_referal
-# Allow browsers that do not send Referer info
-SetEnvIf Referer "^$" local_referal
-&lt;Directory /web/images&gt;
- Order Deny,Allow
- Deny from all
- Allow from env=local_referal
-&lt;/Directory&gt;</pre></div>
-
- <p>¤³¤Î¼êË¡¤Ë´Ø¤¹¤ë¾Ü¤·¤¤¾ðÊó¤Ï ApacheToday ¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¡Ö<a href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-ps">Keeping Your Images from Adorning Other Sites</a>
- ¡×¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/env.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/env.html.ko.euc-kr b/docs/manual/env.html.ko.euc-kr
deleted file mode 100644
index 152a0c65b0..0000000000
--- a/docs/manual/env.html.ko.euc-kr
+++ /dev/null
@@ -1,371 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/env.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â <em>ȯ°æº¯¼ö(environment variable)</em>¶ó´Â
- º¯¼ö¿¡ Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÀÌ Á¤º¸¸¦ »ç¿ëÇÏ¿© ·Î±×³ª
- Á¢±ÙÁ¦¾î µî ¿©·¯ ÀÛ¾÷À» Á¶ÀýÇÑ´Ù. ¶Ç, ȯ°æº¯¼ö´Â CGI ½ºÅ©¸³Æ®¿Í
- °°Àº ¿ÜºÎ ÇÁ·Î±×·¥°ú Åë½ÅÇÏ´Â ¼ö´ÜÀÌ µÈ´Ù. ÀÌ ¹®¼­´Â ȯ°æº¯¼ö¸¦
- ´Ù·ç°í »ç¿ëÇÏ´Â ´Ù¾çÇÑ ¹æ¹ýµéÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>ÀÌ º¯¼öµéÀ» <em>ȯ°æº¯¼ö</em>¶ó°í ºÎ¸£Áö¸¸, ¿î¿µÃ¼Á¦¿¡¼­
- ¸»Çϴ ȯ°æº¯¼ö¿Í ´Ù¸£´Ù. ÀÌ º¯¼ö´Â ¾ÆÆÄÄ¡ ³»ºÎ¿¡ ÀúÀåµÇ°í
- »ç¿ëµÈ´Ù. ȯ°æº¯¼ö´Â CGI ½ºÅ©¸³Æ®³ª Server Side Include
- ½ºÅ©¸³Æ®·Î ³Ñ°ÜÁú¶§¸¸ ½ÇÁ¦ ¿î¿µÃ¼Á¦ ȯ°æº¯¼ö°¡ µÈ´Ù. ¼­¹ö¸¦
- ½ÇÇàÇÏ´Â ¿î¿µÃ¼Á¦ ȯ°æÀ» ¼öÁ¤ÇÏ°í ½Í´Ù¸é ¿î¿µÃ¼Á¦ ½©¿¡¼­
- ȯ°æÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#setting">ȯ°æº¯¼ö ¼³Á¤Çϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">ȯ°æº¯¼ö »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#special">Ưº°ÇÑ ¸ñÀûÀÇ È¯°æº¯¼ö</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">¿¹Á¦</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="setting" id="setting">ȯ°æº¯¼ö ¼³Á¤Çϱâ</a></h2>
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>
-
- <h3><a name="basic-manipulation" id="basic-manipulation">±âº»ÀûÀΠȯ°æ¼³Á¤</a></h3>
-
-
- <p>¾ÆÆÄÄ¡¿¡¼­ ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ´Â °¡Àå ±âº»ÀûÀÎ ¹æ¹ýÀº
- ¹«Á¶°ÇÀûÀÎ <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼­¹ö¸¦ ½ÃÀÛÇÑ ½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Ã ¼öµµ ÀÖ´Ù.</p>
-
-
- <h3><a name="conditional" id="conditional">¿äû¿¡ µû¸¥ Á¶°ÇºÎ ¼³Á¤</a></h3>
-
-
- <p>´õ À¯¿¬ÇÏ°Ô, mod_setenvif°¡ Á¦°øÇÏ´Â Áö½Ã¾î´Â ¿äû¸¶´Ù
- ¿äûÀÇ Æ¯Â¡¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ¿¹¸¦ µé¾î, ƯÁ¤
- ºê¶ó¿ìÀú·Î (User-Agent) ¿äûÇϰųª ƯÁ¤ Referer (¸ÂÃã¹ýÀÌ
- Ʋ¸®Áö ¾Ê¾Ò´Ù) Çì´õ°¡ ÀÖ´Â °æ¿ì¿¡¸¸ º¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö
- ÀÖ´Ù. ½ÉÁö¾î mod_rewrite¿¡ ÀÖ´Â <code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>ÀÇ
- <code>[E=...]</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ´õ À¯¿¬ÇÏ°Ô È¯°æº¯¼ö¸¦
- ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù.</p>
-
-
- <h3><a name="unique-identifiers" id="unique-identifiers">À¯ÀÏÇÑ ½Äº°ÀÚ</a></h3>
-
-
- <p>¸¶Áö¸·À¸·Î mod_unique_id´Â °¢ ¿äû¿¡ ´ëÇØ ¾î¶² °æ¿ì¿¡µµ
- "¸ðµç" ¿äûÁß¿¡ È®½ÇÈ÷ À¯ÀÏÇÑ(°ãÄ¡Áö¾ÊÀº) °ªÀ¸·Î
- <code>UNIQUE_ID</code> ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-
- <h3><a name="standard-cgi" id="standard-cgi">Ç¥ÁØ CGI º¯¼ö</a></h3>
-
-
- <p>CGI ½ºÅ©¸³Æ®¿Í SSI ¹®¼­´Â ¾ÆÆÄÄ¡ ¼³Á¤¿¡¼­ ¼³Á¤ÇÏ¿´°Å³ª
- ½©¿¡¼­ °¡Á®¿Â ȯ°æº¯¼ö ¿Ü¿¡ Ãß°¡·Î <a href="http://cgi-spec.golux.com/">CGI ±Ô¾à</a>ÀÌ ±ÔÁ¤ÇÑ
- ¿äû¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë·ÁÁִ ȯ°æº¯¼öµéÀ» ¹Þ´Â´Ù.</p>
-
-
- <h3><a name="caveats" id="caveats">ÁÖÀÇÇÒ Á¡</a></h3>
-
-
- <ul>
- <li>ȯ°æ¼³Á¤ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Ç¥ÁØ CGI º¯¼ö¸¦ ¹«½ÃÇϰųª
- ¼öÁ¤ÇÒ ¼ö ¾ø´Ù.</li>
-
- <li><a href="suexec.html">suexec</a>°¡ CGI ½ºÅ©¸³Æ®¸¦
- ½ÇÇàÇÏ´Â °æ¿ì, ½ÃÀÛÇϱâÀü¿¡ CGI ½ºÅ©¸³Æ®ÀÇ È¯°æÀº
- <em>¾ÈÀüÇÑ</em> º¯¼öµé¸¸ °¡Áöµµ·Ï û¼ÒµÈ´Ù.
- <em>¾ÈÀüÇÑ</em> º¯¼ö ¸ñ·ÏÀº ÄÄÆÄÀϽÃ
- <code>suexec.c</code>¿¡ Á¤ÀǵȴÙ.</li>
-
- <li>Æ÷ÆÃÀ» À§ÇØ È¯°æº¯¼ö À̸§¿¡´Â ¿ÀÁ÷ ¹®ÀÚ, ¼ýÀÚ,
- ¹ØÁÙ¹®ÀÚ¸¸ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¶Ç, ù¹ø° ¹®ÀÚ·Î
- ¼ýÀÚ¸¦ »ç¿ëÇÏÁö¾Ê´Â °ÍÀÌ ÁÁ´Ù. CGI ½ºÅ©¸³Æ®³ª SSI
- ÆäÀÌÁö¿¡ ³Ñ¾î°¥¶§ ÀÌ¿ÜÀÇ ¹®ÀÚ´Â ¹ØÁÙ·Î ´ëüµÈ´Ù.</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">ȯ°æº¯¼ö »ç¿ëÇϱâ</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>
-
- <h3><a name="cgi-scripts" id="cgi-scripts">CGI ½ºÅ©¸³Æ®</a></h3>
-
-
- <p>ȯ°æº¯¼öÀÇ ÁÖµÈ ¿ëµµÁß Çϳª´Â CGI ½ºÅ©¸³Æ®¿Í Á¤º¸¸¦
- ±³È¯ÇÏ´Â °ÍÀÌ´Ù. ¾Õ¿¡¼­ ¼³¸íÇßµíÀÌ ¾ÆÆÄÄ¡ ¼³Á¤¿¡¼­ ¼³Á¤ÇÑ
- º¯¼ö¿Ü¿¡ ¿äû¿¡ ´ëÇÑ Ç¥ÁØ Á¤º¸¸¦ °¡Áø º¯¼ö°¡ CGI ½ºÅ©¸³Æ®·Î
- ³Ñ¾î°£´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="howto/cgi.html">CGI
- ÅõÅ丮¾ó</a>À» Âü°íÇ϶ó.</p>
-
-
- <h3><a name="ssi-pages" id="ssi-pages">SSI ÆäÀÌÁö</a></h3>
-
-
- <p>mod_includeÀÇ <code>INCLUDES</code> ÇÊÅÍ°¡ ó¸®ÇÏ´Â
- ¼­¹öÆÄ½Ì (SSI) ¹®¼­´Â <code>echo</code> ¿ä¼Ò¸¦ »ç¿ëÇÏ¿©
- ȯ°æº¯¼ö¸¦ Ãâ·ÂÇÒ ¼ö ÀÖ°í, ȯ°æº¯¼ö¸¦ »ç¿ëÇÏ¿© ¿äûÀÇ
- Ư¡¿¡ µû¶ó È帧Á¦¾î ¿ä¼Ò·Î ÆäÀÌÁöÀÇ ÀϺθ¦ º¯°æÇÒ ¼ö
- ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ¶Ç SSI ¹®¼­¿¡°Ô À§¿¡¼­ ¼³¸íÇÑ Ç¥ÁØ CGI
- ȯ°æº¯¼ö¸¦ Á¦°øÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="howto/ssi.html">SSI ÅõÅ丮¾ó</a>À» Âü°íÇ϶ó.</p>
-
-
- <h3><a name="access-control" id="access-control">Á¢±ÙÁ¦¾î</a></h3>
-
-
- <p><code>allow from env=</code>°ú <code>deny from env=</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ȯ°æº¯¼ö °ª¿¡ µû¶ó ¼­¹ö·ÎÀÇ Á¢±ÙÀ»
- Á¶ÀýÇÒ ¼ö ÀÖ´Ù. <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>¿Í °°ÀÌ »ç¿ëÇϸé
- Ŭ¶óÀ̾ðÆ®ÀÇ Æ¯Â¡¿¡ µû¶ó ÀÚÀ¯·Ó°Ô ¼­¹ö·ÎÀÇ Á¢±ÙÀ» Á¦¾îÇÒ
- ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ƯÁ¤ ºê¶ó¿ìÀúÀÇ (User-Agent) Á¢±ÙÀ»
- °ÅºÎÇÒ ¼ö ÀÖ´Ù.</p>
-
-
- <h3><a name="logging" id="logging">Á¶°ÇºÎ ·Î±×</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>ÀÇ
- <code>%e</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ȯ°æº¯¼ö¸¦ Á¢±Ù ·Î±×¿¡
- ±â·ÏÇÒ ¼ö ÀÖ´Ù. ¶Ç, <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> Áö½Ã¾îÀÇ
- Á¶°ÇºÎ Çü½ÄÀ» »ç¿ëÇϸé ȯ°æº¯¼öÀÇ »óȲ¿¡ µû¶ó ¿äûÀ»
- ·Î±×ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>¿Í °°ÀÌ »ç¿ëÇÏ¿©
- ¾î¶² ¿äûÀ» ·Î±×ÇÒÁö ÀÚÀ¯·Ó°Ô °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
- ÆÄÀϸíÀÌ <code>gif</code>·Î ³¡³ª´Â ¿äûÀº ·Î±×ÇÏÁö ¾Ê°Å³ª,
- ¿ÜºÎ ³×Æ®¿÷¿¡ Àִ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¸¸À» ·Î±×ÇÒ ¼ö ÀÖ´Ù.</p>
-
-
- <h3><a name="response-headers" id="response-headers">Á¶°ÇºÎ ÀÀ´ä Çì´õ</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>
- Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÀ´äÀ» º¸³¾¶§ ȯ°æº¯¼öÀÇ À¯¹«¿¡
- µû¶ó ¾î¶² HTTP Çì´õ¸¦ Æ÷ÇÔÇÒÁö °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ƯÁ¤ Çì´õ°¡ ÀÖ´Â °æ¿ì¿¡¸¸
- ¾î¶² ÀÀ´ä Çì´õ¸¦ º¸³¾ ¼ö ÀÖ´Ù.</p>
-
-
-
- <h3><a name="external-filter" id="external-filter">¿ÜºÎ ÇÊÅÍ ½ÇÇàÇϱâ</a></h3>
-
-
- <p><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>ÀÇ <code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code>
- Áö½Ã¾î·Î ¼³Á¤ÇÑ ¿ÜºÎ ÇÊÅ͸¦ <code>disableenv=</code>¿Í
- <code>enableenv=</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ȯ°æº¯¼ö¿¡ µû¶ó
- ¼±ÅÃÀûÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
-
- <h3><a name="url-rewriting" id="url-rewriting">URL ÀçÀÛ¼º(Rewriting)</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>ÀÇ
- <em>TestString</em>¿¡ <code>%{ENV:...}</code> Çü½ÄÀ»
- »ç¿ëÇϸé mod_rewriteÀÇ ÀçÀÛ¼º ¿£ÁøÀÌ È¯°æº¯¼ö¿¡ µû¶ó
- ´Ù¸£°Ô ÇൿÇÑ´Ù. mod_rewrite¿¡¼­ ¾Õ¿¡ <code>ENV:</code>¸¦
- ºÙÀÌÁö¾Ê°í Á¢±ÙÇÏ´Â º¯¼ö´Â ½ÇÁ¦ ȯ°æº¯¼ö°¡ ¾Æ´ÔÀ» ÁÖÀÇÇ϶ó.
- ±×µéÀº ´Ù¸¥ ¸ðµâ¿¡¼­ ÀÐÀ» ¼ö ¾ø´Â mod_rewrite¿¡ ÇÑÁ¤µÈ
- º¯¼ö´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="special" id="special">Ưº°ÇÑ ¸ñÀûÀÇ È¯°æº¯¼ö</a></h2>
-
-
- <p>Ŭ¶óÀ̾ðÆ®¿Í ¿øÈ°ÇÑ µ¿ÀÛÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â Ưº°ÇÑ
- Ŭ¶óÀ̾ðÆ®¿¡ ´ëÇØ ÀÚ½ÅÀÇ ÇൿÀ» ¼öÁ¤ÇÑ´Ù. º¸Åë <code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>¿¡¼­
- ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÏ¿© ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ±×·¯³ª <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code>¿Í <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code>·Îµµ °¡´ÉÇÏ´Ù.</p>
-
- <h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
-
-
- <p>¿äûÀÌ ÀÌÈÄ ¹öÀüÀ» »ç¿ëÇÏ´õ¶óµµ HTTP/1.0 ¿äûÀ¸·Î
- ó¸®ÇÑ´Ù.</p>
-
-
- <h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>
-
- <p><code>DEFLATE</code> ÇÊÅ͸¦ »ç¿ëÇÒ¶§ ÀÌ È¯°æº¯¼ö´Â
- ºê¶ó¿ìÀúÀÇ accept-encoding ¼³Á¤À» ¹«½ÃÇÏ°í ¹«Á¶°Ç
- ¾ÐÃàµÈ °á°ú¸¦ º¸³½´Ù.</p>
-
- <h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
-
-
- <p>ÀÀ´äÀ» Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»±â Àü¿¡ ÀÀ´ä Çì´õ¿¡¼­
- <code>Vary</code> Çʵ带 »«´Ù. ¾î¶² Ŭ¶óÀ̾ðÆ®´Â ÀÌ
- Çʵ带 Á¦´ë·Î Çؼ®ÇÏÁö ¸øÇÑ´Ù. ÀÌ º¯¼ö´Â ÀÌ·± ¹®Á¦¸¦
- ÇØ°áÇÑ´Ù. ¶ÇÇÑ, ÀÌ º¯¼ö´Â
- <strong>force-response-1.0</strong>À» °¡Á¤ÇÑ´Ù.</p>
-
-
- <h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
-
-
- <p>HTTP/1.0 ¿äûÀ» Çϴ Ŭ¶óÀ̾ðÆ®¿¡°Ô HTTP/1.0 ÀÀ´äÀ»
- °­Á¦ÇÑ´Ù. ¿ø·¡ AOL ÇÁ·Ï½Ã¿¡ ¹®Á¦°¡ À־ ¸¸µé¾îÁ³´Ù.
- ¾î¶² HTTP/1.0 Ŭ¶óÀ̾ðÆ®´Â HTTP/1.1 ÀÀ´äÀ» ¹ÞÀ¸¸é Á¦´ë·Î
- µ¿ÀÛÇÏÁö ¾ÊÀ¸¹Ç·Î, ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâÀ§ÇØ »ç¿ëÇÑ´Ù.</p>
-
-
- <h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>
-
-
- <p>°ªÀÌ "1"À̸é <code>text/html</code>ÀÌ ¾Æ´Ñ content-type¿¡
- ´ëÇØ <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>ÀÇ DEFLATE Ãâ·ÂÇÊÅ͸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù. (gzip »Ó¸¸ ¾Æ´Ï¶ó "identity"°¡ ¾Æ´Ñ ¸ðµç
- ÀÎÄÚµùÀÇ) Á¤ÀûÀ¸·Î ¾ÐÃàÇÑ ÆÄÀÏÀÇ °æ¿ì¿¡µµ
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>Àº ÀÌ º¯¼ö¸¦ Âü°íÇÑ´Ù.</p>
-
-
- <h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>
-
- <p>ÀÌ ¿É¼ÇÀ» ¼³Á¤Çϸé <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>ÀÇ
- <code>DEFLATE</code> ÇÊÅ͸¦ »ç¿ëÇÏÁö ¾Ê°í,
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>Àº ÀÎÄÚµùµÈ ÀÚ¿øÀ»
- º¸³»Áö ¾Ê´Â´Ù.</p>
-
-
-
- <h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
-
-
- <p><code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code>¸¦
- ¹«½ÃÇÑ´Ù.</p>
-
-
-
- <h3><a name="prefer-language" id="prefer-language">prefer-language</a></h3>
-
- <p>ÀÌ º¯¼ö´Â <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>ÀÇ Çൿ¿¡
- ¿µÇâÀ» ¹ÌÄ£´Ù. º¯¼ö°¡ (<code>en</code>, <code>ja</code>,
- <code>x-klingon</code> µî) ¾ð¾îű׸¦ ´ã°íÀÖ´Ù¸é,
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>´Â ±× ¾ð¾î·Î µÈ º¯ÇüÀ»
- º¸³»±æ ½ÃµµÇÑ´Ù. ±×·± º¯ÇüÀÌ ¾ø´Ù¸é ÀϹÝÀûÀÎ <a href="content-negotiation.html">Çù»ó</a> °úÁ¤À» ½ÃÀÛÇÑ´Ù.</p>
-
-
-
- <h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
-
-
- <p>¼­¹ö°¡ ´õ Á¶½ÉÈ÷ Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù.
- º¸Åë ¸®´ÙÀÌ·º¼ÇÀ» ó¸®Çϴµ¥ ¹®Á¦°¡ Àִ Ŭ¶óÀ̾ðÆ®À»
- À§ÇØ »ç¿ëÇÑ´Ù. ¿ø·¡ MicrosoftÀÇ WebFolders ¼ÒÇÁÆ®¿þ¾î°¡
- DAV ¸Þ½áµå¸¦ ÅëÇØ µð·ºÅ丮 ÀÚ¿øÀÇ ¸®´ÙÀÌ·º¼ÇÀ» ó¸®Çϴµ¥
- ¹®Á¦°¡ À־ ¸¸µé¾îÁ³´Ù.</p>
-
-
-
- <h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
-
-
- <p><em>2.0.40 ÀÌÈÄ ¹öÀü¿¡ ÀÖ´Ù</em></p>
-
- <p>¾ÆÆÄÄ¡°¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î ¸®´ÙÀÌ·º¼ÇÀ»
- º¸³¾¶§ Ŭ¶óÀ̾ðÆ®°¡ ÀÚµ¿À¸·Î ¸®´ÙÀÌ·º¼ÇÀ» µû¶ó°¡Áö ¸øÇÏ´Â(ȤÀº
- ¾Ê´Â) °æ¿ì¿¡ ´ëºñÇÏ¿© ÀÀ´ä¿¡ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÙ ¹®±¸¸¦ Æ÷ÇÔÇÑ´Ù.
- ¾ÆÆÄÄ¡´Â º¸Åë ÀÌ ±ÛÀ» ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ¹®ÀÚÁýÇÕÀÎ ISO-8859-1·Î
- Ç¥½ÃÇÑ´Ù.</p>
- <p>±×·¯³ª ¸®´ÙÀÌ·º¼ÇµÈ ÆäÀÌÁö°¡ ´Ù¸¥ ¹®ÀÚÁýÇÕÀ» »ç¿ëÇÒ °æ¿ì
- ¾î¶² ÀÌ»óÇÑ ºê¶ó¿ìÀú ¹öÀüÀº ½ÇÁ¦ ÆäÀÌÁö°¡ ¾Æ´Ï¶ó ¸®´ÙÀÌ·º¼Ç
- ÆäÀÌÁöÀÇ ¹®ÀÚÁýÇÕÀ» »ç¿ëÇÏ·Á°í ÇÑ´Ù. ¿¹¸¦ µé¾î, ±×¸®½º¾î°¡
- ÀÌ»óÇÏ°Ô º¸ÀÏ ¼ö ÀÖ´Ù.</p>
- <p>ÀÌ È¯°æº¯¼ö´Â ¾ÆÆÄÄ¡°¡ ¸®´ÙÀÌ·º¼Ç ÆäÀÌÁö¿¡ ¹®ÀÚÁýÇÕÀ»
- ¼³Á¤ÇÏÁö¾Êµµ·Ï ÇÏ¿©, ÀÌ·± ºê¶ó¿ìÀú°¡ ½ÇÁ¦ ÆäÀÌÁöÀÇ ¹®ÀÚÁýÇÕÀ»
- ¿Ã¹Ù·Î »ç¿ëÇÏ°Ô ¸¸µç´Ù.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
-
-
- <h3><a name="misbehaving" id="misbehaving">À߸ø µ¿ÀÛÇϴ Ŭ¶óÀ̾ðÆ®µéÀ» À§ÇØ ÇÁ·ÎÅäÄÝ Çൿ
- º¯°æÇϱâ</a></h3>
-
-
- <p>Ŭ¶óÀ̾ðÆ®µéÀÇ ÀÌ¹Ì ¾Ë·ÁÁø ¹®Á¦¸¦ ÇØ°áÇϱâÀ§ÇØ
- httpd.conf¿¡ ´ÙÀ½ ³»¿ëÀ» Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù.</p>
-<div class="example"><pre>
-#
-# ´ÙÀ½ Áö½Ã¾îµéÀº ÀϹÝÀûÀÎ HTTP ÀÀ´äÀ» º¯°æÇÑ´Ù.
-# ù¹ø° Áö½Ã¾î´Â Netscape 2.x¿Í À̸¦ °¡ÀåÇÑ ºê¶ó¿ìÀú¿¡°Ô
-# keepalive¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌµé ºê¶ó¿ìÀú ±¸Çö¿¡ ¹®Á¦°¡ ÀÖ´Ù.
-# µÎ¹ø° Áö½Ã¾î´Â HTTP/1.1 ±¸ÇöÀÌ À߸øµÇ¾ú°í 301À̳ª 302
-# (¸®´ÙÀÌ·º¼Ç) ÀÀ´ä¿¡ »ç¿ëÇÑ keepalive¸¦ Á¦´ë·Î Áö¿øÇÏÁö
-# ¸øÇÏ´Â Microsoft Internet Explorer 4.0b2¸¦ À§ÇÑ °ÍÀÌ´Ù.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# ´ÙÀ½ Áö½Ã¾î´Â ±âº»ÀûÀÎ HTTP/1.1 ÀÀ´äÀ» ÀÌÇØÇÏÁö ¸øÇÏ¿©
-# HTTP/1.0 ±Ô¾àÀ» ¾î±â´Â ºê¶ó¿ìÀú¿¡°Ô HTTP/1.1 ÀÀ´äÀ» º¸³»Áö ¾Ê´Â´Ù.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0</pre></div>
-
-
- <h3><a name="no-img-log" id="no-img-log">Á¢±Ù ·Î±×¿¡ À̹ÌÁö¿¡ ´ëÇÑ ¿äûÀ» ·Î±×ÇÏÁö ¾Ê±â</a></h3>
-
-
- <p>ÀÌ ¿¹Á¦´Â À̹ÌÁö¿¡ ´ëÇÑ ¿äûÀ» Á¢±Ù ·Î±×¿¡ ±â·ÏÇÏÁö
- ¾Ê´Â´Ù. ƯÁ¤ µð·ºÅ丮¿¡ ´ëÇÑ È¤Àº ƯÁ¤ È£½ºÆ®¿¡¼­ ¿Â
- ¿äûÀ» ·Î±×ÇÏÁö ¾Êµµ·Ï ½±°Ô ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
- <div class="example"><pre>
-SetEnvIf Request_URI \.gif image-request
-SetEnvIf Request_URI \.jpg image-request
-SetEnvIf Request_URI \.png image-request
-CustomLog logs/access_log common env=!image-request</pre></div>
-
-
- <h3><a name="image-theft" id="image-theft">"À̹ÌÁö µµµÏ" ¹æÁö</a></h3>
-
-
- <p>ÀÌ ¿¹´Â ÇöÀç ¼­¹ö¿ÜÀÇ »ç¿ëÀÚ°¡ ÆäÀÌÁö¿¡ ¼­¹ö¿¡ ÀÖ´Â
- À̹ÌÁö¸¦ Æ÷ÇÔÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. ÀÌ
- ¼³Á¤À» ±ÇÀåÇÏÁö´Â ¾ÊÀ¸¸ç, Á¦ÇÑµÈ °æ¿ì¿¡¸¸ µ¿ÀÛÇÑ´Ù.
- ¿ì¸®´Â ¸ðµç À̹ÌÁö°¡ /web/images µð·ºÅ丮 ¾È¿¡ ÀÖ´Ù°í
- °¡Á¤ÇÑ´Ù.</p>
- <div class="example"><pre>
-SetEnvIf Referer "^http://www.example.com/" local_referal
-# Referer Á¤º¸¸¦ º¸³»Áö ¾Ê´Â ºê¶ó¿ìÀú¸¦ Çã¿ëÇÑ´Ù
-SetEnvIf Referer "^$" local_referal
-&lt;Directory /web/images&gt;
- Order Deny,Allow
- Deny from all
- Allow from env=local_referal
-&lt;/Directory&gt;</pre></div>
-
- <p>ÀÌ ±â¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ApacheToday ÅõÅ丮¾ó "<a href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
- Keeping Your Images from Adorning Other Sites</a>"¸¦ Âü°íÇ϶ó.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/env.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/env.xml b/docs/manual/env.xml
deleted file mode 100644
index 526f3755d6..0000000000
--- a/docs/manual/env.xml
+++ /dev/null
@@ -1,438 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.18 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="env.xml.meta">
-
- <title>Environment Variables in Apache</title>
-
- <summary>
- <p>The Apache HTTP Server provides a mechanism for storing
- information in named variables that are called <em>environment
- variables</em>. This information can be used to control various
- operations such as logging or access control. The variables are
- also used as a mechanism to communicate with external programs
- such as CGI scripts. This document discusses different ways to
- manipulate and use these variables.</p>
-
- <p>Although these variables are referred to as <em>environment
- variables</em>, they are not the same as the environment
- variables controlled by the underlying operating system.
- Instead, these variables are stored and manipulated in an
- internal Apache structure. They only become actual operating
- system environment variables when they are provided to CGI
- scripts and Server Side Include scripts. If you wish to
- manipulate the operating system environment under which the
- server itself runs, you must use the standard environment
- manipulation mechanisms provided by your operating system
- shell.</p>
- </summary>
-
- <section id="setting">
- <title>Setting Environment Variables</title>
- <related>
- <modulelist>
- <module>mod_env</module>
- <module>mod_rewrite</module>
- <module>mod_setenvif</module>
- <module>mod_unique_id</module>
- </modulelist>
- <directivelist>
- <directive module="mod_setenvif">BrowserMatch</directive>
- <directive module="mod_setenvif">BrowserMatchNoCase</directive>
- <directive module="mod_env">PassEnv</directive>
- <directive module="mod_rewrite">RewriteRule</directive>
- <directive module="mod_env">SetEnv</directive>
- <directive module="mod_setenvif">SetEnvIf</directive>
- <directive module="mod_setenvif">SetEnvIfNoCase</directive>
- <directive module="mod_env">UnsetEnv</directive>
- </directivelist>
- </related>
-
- <section id="basic-manipulation">
- <title>Basic Environment Manipulation</title>
-
- <p>The most basic way to set an environment variable in Apache
- is using the unconditional <directive module="mod_env"
- >SetEnv</directive> directive. Variables may also be passed from
- the environment of the shell which started the server using the
- <directive module="mod_env">PassEnv</directive> directive.</p>
-
- </section>
- <section id="conditional">
- <title>Conditional Per-Request Settings</title>
-
- <p>For additional flexibility, the directives provided by
- mod_setenvif allow environment variables to be set on a
- per-request basis, conditional on characteristics of particular
- requests. For example, a variable could be set only when a
- specific browser (User-Agent) is making a request, or only when
- a specific Referer [sic] header is found. Even more flexibility
- is available through the mod_rewrite's <directive
- module="mod_rewrite">RewriteRule</directive> which uses the
- <code>[E=...]</code> option to set environment variables.</p>
-
- </section>
- <section id="unique-identifiers">
- <title>Unique Identifiers</title>
-
- <p>Finally, mod_unique_id sets the environment variable
- <code>UNIQUE_ID</code> for each request to a value which is
- guaranteed to be unique across "all" requests under very
- specific conditions.</p>
-
- </section>
- <section id="standard-cgi">
- <title>Standard CGI Variables</title>
-
- <p>In addition to all environment variables set within the
- Apache configuration and passed from the shell, CGI scripts and
- SSI pages are provided with a set of environment variables
- containing meta-information about the request as required by
- the <a href="http://cgi-spec.golux.com/">CGI
- specification</a>.</p>
-
- </section>
- <section id="caveats">
- <title>Some Caveats</title>
-
- <ul>
- <li>It is not possible to override or change the standard CGI
- variables using the environment manipulation directives.</li>
-
- <li>When <a href="suexec.html">suexec</a> is used to launch
- CGI scripts, the environment will be cleaned down to a set of
- <em>safe</em> variables before CGI scripts are launched. The
- list of <em>safe</em> variables is defined at compile-time in
- <code>suexec.c</code>.</li>
-
- <li>For portability reasons, the names of environment
- variables may contain only letters, numbers, and the
- underscore character. In addition, the first character may
- not be a number. Characters which do not match this
- restriction will be replaced by an underscore when passed to
- CGI scripts and SSI pages.</li>
- </ul>
- </section>
- </section>
- <section id="using">
- <title>Using Environment Variables</title>
-
- <related>
- <modulelist>
- <module>mod_authz_host</module>
- <module>mod_cgi</module>
- <module>mod_ext_filter</module>
- <module>mod_headers</module>
- <module>mod_include</module>
- <module>mod_log_config</module>
- <module>mod_rewrite</module>
- </modulelist>
- <directivelist>
- <directive module="mod_authz_host">Allow</directive>
- <directive module="mod_log_config">CustomLog</directive>
- <directive module="mod_authz_host">Deny</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_headers">Header</directive>
- <directive module="mod_log_config">LogFormat</directive>
- <directive module="mod_rewrite">RewriteCond</directive>
- <directive module="mod_rewrite">RewriteRule</directive>
- </directivelist>
- </related>
-
- <section id="cgi-scripts">
- <title>CGI Scripts</title>
-
- <p>One of the primary uses of environment variables is to
- communicate information to CGI scripts. As discussed above, the
- environment passed to CGI scripts includes standard
- meta-information about the request in addition to any variables
- set within the Apache configuration. For more details, see the
- <a href="howto/cgi.html">CGI tutorial</a>.</p>
-
- </section>
- <section id="ssi-pages">
- <title>SSI Pages</title>
-
- <p>Server-parsed (SSI) documents processed by mod_include's
- <code>INCLUDES</code> filter can print environment variables
- using the <code>echo</code> element, and can use environment
- variables in flow control elements to makes parts of a page
- conditional on characteristics of a request. Apache also
- provides SSI pages with the standard CGI environment variables
- as discussed above. For more details, see the <a
- href="howto/ssi.html">SSI tutorial</a>.</p>
-
- </section>
- <section id="access-control">
- <title>Access Control</title>
-
- <p>Access to the server can be controlled based on the value of
- environment variables using the <code>allow from env=</code>
- and <code>deny from env=</code> directives. In combination with
- <directive module="mod_setenvif">SetEnvIf</directive>, this
- allows for flexible control of access to the server based on
- characteristics of the client. For example, you can use these
- directives to deny access to a particular browser (User-Agent).
- </p>
-
- </section>
- <section id="logging">
- <title>Conditional Logging</title>
-
- <p>Environment variables can be logged in the access log using
- the <directive module="mod_log_config">LogFormat</directive>
- option <code>%e</code>. In addition, the decision on whether
- or not to log requests can be made based on the status of
- environment variables using the conditional form of the
- <directive module="mod_log_config">CustomLog</directive>
- directive. In combination with <directive module="mod_setenvif"
- >SetEnvIf</directive> this allows for flexible control of which
- requests are logged. For example, you can choose not to log
- requests for filenames ending in <code>gif</code>, or you can
- choose to only log requests from clients which are outside your
- subnet.</p>
-
- </section>
- <section id="response-headers">
- <title>Conditional Response Headers</title>
-
- <p>The <directive module="mod_headers">Header</directive>
- directive can use the presence or
- absence of an environment variable to determine whether or not
- a certain HTTP header will be placed in the response to the
- client. This allows, for example, a certain response header to
- be sent only if a corresponding header is received in the
- request from the client.</p>
-
- </section>
-
- <section id="external-filter">
- <title>External Filter Activation</title>
-
- <p>External filters configured by <module>mod_ext_filter</module>
- using the <directive
- module="mod_ext_filter">ExtFilterDefine</directive> directive can
- by activated conditional on an environment variable using the
- <code>disableenv=</code> and <code>enableenv=</code> options.</p>
- </section>
-
- <section id="url-rewriting">
- <title>URL Rewriting</title>
-
- <p>The <code>%{ENV:...}</code> form of <em>TestString</em> in
- the <directive module="mod_rewrite">RewriteCond</directive>
- allows mod_rewrite's rewrite
- engine to make decisions conditional on environment variables.
- Note that the variables accessible in mod_rewrite without the
- <code>ENV:</code> prefix are not actually environment
- variables. Rather, they are variables special to mod_rewrite
- which cannot be accessed from other modules.</p>
- </section>
- </section>
-
- <section id="special">
- <title>Special Purpose Environment Variables</title>
-
- <p>Interoperability problems have led to the introduction of
- mechanisms to modify the way Apache behaves when talking to
- particular clients. To make these mechanisms as flexible as
- possible, they are invoked by defining environment variables,
- typically with <directive module="mod_setenvif"
- >BrowserMatch</directive>, though <directive module="mod_env"
- >SetEnv</directive> and <directive module="mod_env"
- >PassEnv</directive> could also be used, for example.</p>
-
- <section id="downgrade">
- <title>downgrade-1.0</title>
-
- <p>This forces the request to be treated as a HTTP/1.0 request
- even if it was in a later dialect.</p>
-
- </section>
- <section id="force-gzip">
- <title>force-gzip</title>
- <p>If you have the <code>DEFLATE</code> filter activated, this
- environment variable will ignore the accept-encoding setting of
- your browser and will send compressed output unconditionally.</p>
- </section>
- <section id="force-no-vary">
- <title>force-no-vary</title>
-
- <p>This causes any <code>Vary</code> fields to be removed from
- the response header before it is sent back to the client. Some
- clients don't interpret this field correctly; setting this
- variable can work around this problem. Setting this variable
- also implies <strong>force-response-1.0</strong>.</p>
-
- </section>
- <section id="force-response">
- <title>force-response-1.0</title>
-
- <p>This forces an HTTP/1.0 response to clients making an HTTP/1.0
- request. It was originally
- implemented as a result of a problem with AOL's proxies. Some
- HTTP/1.0 clients may not behave correctly when given an HTTP/1.1
- response, and this can be used to interoperate with them.</p>
-
- </section>
-
- <section id="gzip-only-text-html">
- <title>gzip-only-text/html</title>
-
- <p>When set to a value of "1", this variable disables the DEFLATE
- output filter provided by <module>mod_deflate</module> for
- content-types other than <code>text/html</code>. If you'd rather
- use statically compressed files; <module>mod_negotiation</module>
- evaluates the variable as well (not only for gzip, but for all
- encodings that differ from "identity").</p>
- </section>
-
- <section id="no-gzip"><title>no-gzip</title>
-
- <p>When set, the <code>DEFLATE</code> filter of
- <module>mod_deflate</module> will be turned off and
- <module>mod_negotiation</module> will refuse to deliver encoded
- resources.</p>
-
- </section>
-
- <section id="nokeepalive">
- <title>nokeepalive</title>
-
- <p>This disables <directive module="core">KeepAlive</directive>
- when set.</p>
-
- </section>
-
- <section id="prefer-language"><title>prefer-language</title>
-
- <p>This influences <module>mod_negotiation</module>'s behaviour. If
- it contains a language tag (such as <code>en</code>, <code>ja</code>
- or <code>x-klingon</code>), <module>mod_negotiation</module> tries
- to deliver a variant with that language. If there's no such variant,
- the normal <a href="content-negotiation.html">negotiation</a> process
- applies.</p>
-
- </section>
-
- <section id="redirect-carefully">
- <title>redirect-carefully</title>
-
- <p>This forces the server to be more careful when sending a redirect
- to the client. This is typically used when a client has a known
- problem handling redirects. This was originally implemented as a
- result of a problem with Microsoft's WebFolders software which has
- a problem handling redirects on directory resources via DAV
- methods.</p>
-
- </section>
-
- <section id="suppress-error-charset">
- <title>suppress-error-charset</title>
-
- <p><em>Available in versions after 2.0.40</em></p>
-
- <p>When Apache issues a redirect in response to a client request,
- the response includes some actual text to be displayed in case
- the client can't (or doesn't) automatically follow the redirection.
- Apache ordinarily labels this text according to the character set
- which it uses, which is ISO-8859-1.</p>
- <p> However, if the redirection is to a page that uses a different
- character set, some broken browser versions will try to use the
- character set from the redirection text rather than the actual page.
- This can result in Greek, for instance, being incorrectly rendered.</p>
- <p>Setting this environment variable causes Apache to omit the character
- set for the redirection text, and these broken browsers will then correctly
- use that of the destination page.</p>
-
- </section>
-
- </section>
-
- <section id="examples">
- <title>Examples</title>
-
- <section id="misbehaving">
- <title>Changing protocol behavior with misbehaving clients</title>
-
- <p>We recommend that the following lines be included in
- httpd.conf to deal with known client problems.</p>
-<example><pre>
-#
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0</pre></example>
-
- </section>
- <section id="no-img-log">
- <title>Do not log requests for images in the access log</title>
-
- <p>This example keeps requests for images from appearing in the
- access log. It can be easily modified to prevent logging of
- particular directories, or to prevent logging of requests
- coming from particular hosts.</p>
- <example><pre>
-SetEnvIf Request_URI \.gif image-request
-SetEnvIf Request_URI \.jpg image-request
-SetEnvIf Request_URI \.png image-request
-CustomLog logs/access_log common env=!image-request</pre></example>
-
- </section>
- <section id="image-theft">
- <title>Prevent "Image Theft"</title>
-
- <p>This example shows how to keep people not on your server
- from using images on your server as inline-images on their
- pages. This is not a recommended configuration, but it can work
- in limited circumstances. We assume that all your images are in
- a directory called /web/images.</p>
- <example><pre>
-SetEnvIf Referer "^http://www.example.com/" local_referal
-# Allow browsers that do not send Referer info
-SetEnvIf Referer "^$" local_referal
-&lt;Directory /web/images&gt;
- Order Deny,Allow
- Deny from all
- Allow from env=local_referal
-&lt;/Directory&gt;</pre></example>
-
- <p>For more information about this technique, see the
- ApacheToday tutorial " <a
- href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
- Keeping Your Images from Adorning Other Sites</a>".</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/env.xml.ja b/docs/manual/env.xml.ja
deleted file mode 100644
index 5f8e5b77f6..0000000000
--- a/docs/manual/env.xml.ja
+++ /dev/null
@@ -1,425 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.18 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="env.xml.meta">
-
- <title>Apache $B$N4D6-JQ?t(B</title>
-
- <summary>
- <p>Apache HTTP $B%5!<%P$O(B<em>$B4D6-JQ?t(B</em>$B$H8F$P$l$k!"L>A0$N$D$$$?(B
- $BJQ?t$K>pJs$r5-21$9$k;EAH$_$rDs6!$7$F$$$^$9!#$3$N>pJs$O%m%0<}=8$d(B
- $B%"%/%;%9@)8f$J$I$N$$$m$$$m$JA`:n$r@)8f$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
- $B$3$l$i$NJQ?t$O(B CGI $B%9%/%j%W%H$J$I$N30It%W%m%0%i%`$HDL?.$9$k$?$a$K$b(B
- $B;H$o$l$^$9!#$3$NJ8=q$O$=$l$i$NJQ?t$NA`:nJ}K!$H;HMQJ}K!$r$$$/$D$+(B
- $B>R2p$7$^$9!#(B</p>
-
- <p>$B$3$l$i$NJQ?t$O(B<em>$B4D6-JQ?t(B</em>$B$H8F$P$l$F$$$^$9$,!"%*%Z%l!<%F%#%s%0(B
- $B%7%9%F%`$K$h$C$F@)8f$5$l$F$$$k4D6-JQ?t$HF1$8$G$O$"$j$^$;$s!#(B
- $B<B:]$O!"$3$l$i$NJQ?t$O(B Apache $B$NFbIt9=B$$NCf$K5-21$5$l!"A`:n$5$l$F$$$^$9!#(B
- $B$=$l$i$O!"(BCGI $B$d(B SSI $B%9%/%j%W%H$KEO$5$l$?$H$-$@$1!"<B:]$N(B
- $B%*%Z%l!<%F%#%s%0%7%9%F%`$N4D6-JQ?t$K$J$j$^$9!#%5!<%P<+?H$,(B
- $B<B9T$5$l$F$$$k%*%Z%l!<%F%#%s%0%7%9%F%`$N4D6-$rA`:n$7$?$$>l9g$O!"(B
- $B%*%Z%l!<%F%#%s%0%7%9%F%`$N%7%'%k$,Ds6!$7$F$$$kI8=`$N4D6-JQ?t$N(B
- $BA`:nJ}K!$r;H$o$J$1$l$P$J$j$^$;$s!#(B</p>
- </summary>
-
- <section id="setting">
- <title>$B4D6-JQ?t$N@_Dj(B</title>
- <related>
- <modulelist>
- <module>mod_env</module>
- <module>mod_rewrite</module>
- <module>mod_setenvif</module>
- <module>mod_unique_id</module>
- </modulelist>
- <directivelist>
- <directive module="mod_setenvif">BrowserMatch</directive>
- <directive module="mod_setenvif">BrowserMatchNoCase</directive>
- <directive module="mod_env">PassEnv</directive>
- <directive module="mod_rewrite">RewriteRule</directive>
- <directive module="mod_env">SetEnv</directive>
- <directive module="mod_setenvif">SetEnvIf</directive>
- <directive module="mod_setenvif">SetEnvIfNoCase</directive>
- <directive module="mod_env">UnsetEnv</directive>
- </directivelist>
- </related>
-
- <section id="basic-manipulation">
- <title>$B4pK\E*$J4D6-$NA`:n(B</title>
-
- <p>Apache $B$K$*$$$F4D6-JQ?t$r@_Dj$9$k0lHV4pK\E*$JJ}K!$O!"(B
- $BL5>r7o$K4D6-JQ?t$r@_Dj$9$k(B <directive module="mod_env"
- >SetEnv</directive> $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G$9!#(B
- <directive module="mod_env">PassEnv</directive>
- $B%G%#%l%/%F%#%V$K$h$j!"(BApache $B$,5/F0$5$l$?%7%'%k$N(B
- $B4D6-JQ?t$rEO$9$3$H$b$G$-$^$9!#(B</p>
-
- </section>
- <section id="conditional">
- <title>$B%j%/%(%9%HKh$K>r7o$K4p$E$$$F@_Dj$9$k(B</title>
-
- <p>$B$h$j=@Fp@-$r9b$a$k$?$a$K!"(Bmod_setenvif
- $B$GDs6!$5$l$F$$$k%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G!"%j%/%(%9%H$N(B
- $BFC@-$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#Nc$($P!"FCDj$N%V%i%&%6(B
- (User-Agent) $B$N%j%/%(%9%H$dFCDj$N(B Referer [$B0U?^E*$JDV$j$G$9(B]
- ($BLuCm(B: $B@5$7$$DV$j$O(B referrer $B$G$9$,!"(BHTTP $B$N;EMM$G$O(B Referer
- $B$H$J$C$F$$$^$9(B) $B%X%C%@$,8+$D$+$C$?$H$-$N$_JQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
- mod_rewrite $B$N(B <directive module="mod_rewrite">RewriteRule</directive>
- $B%G%#%l%/%F%#%V$K$*$$$F4D6-JQ?t$r@_Dj$9$k(B <code>[E=...]</code>
- $B%*%W%7%g%s$r;HMQ$9$k$3$H$G!"(B
- $B$h$j=@Fp$J@_Dj$r9T$J$&$3$H$,$G$-$^$9!#(B</p>
-
- </section>
- <section id="unique-identifiers">
- <title>$B0l0U$J<1JL;R(B</title>
-
- <p>mod_unique_id $B$O!"Hs>o$K8B$i$l$?>r7o$N2<$G(B
- $B!V$9$Y$F!W$N%j%/%(%9%H$K$D$$$F!"0l0U$G$"$k$3$H$,J]>Z$5$l$F$$$kCM$r4D6-JQ?t(B
- <code>UNIQUE_ID</code> $B$K@_Dj$7$^$9!#(B</p>
-
- </section>
- <section id="standard-cgi">
- <title>$BI8=`(B CGI $BJQ?t(B</title>
-
- <p>Apache $B$N@_Dj%U%!%$%k$G@_Dj$5$l$?4D6-JQ?t$H%7%'%k$+$iEO$5$l$k(B
- $B4D6-JQ?t$K2C$($F!"(BCGI $B%9%/%j%W%H$H(B SSI $B%Z!<%8$K$O(B <a
- href="http://cgi-spec.golux.com">CGI $B$N;EMM(B</a>$B$GMW5a$5$l$F$$$k!"(B
- $B%j%/%(%9%H$N%a%?>pJs$r;}$C$?4D6-JQ?t$NAH$,Ds6!$5$l$^$9!#(B</p>
-
- </section>
- <section id="caveats">
- <title>$B$$$/$D$+$NCm0U(B</title>
-
- <ul>
- <li>$B4D6-$rA`:n$9$k%G%#%l%/%F%#%V$r;H$C$FI8=`(B CGI
- $BJQ?t$r>e=q$-$7$?$jJQ99$7$?$j$9$k$3$H$O$G$-$^$;$s!#(B</li>
-
- <li>CGI $B%9%/%j%W%H$r5/F0$9$k$?$a$K(B <a href="suexec.html">suexec</a>
- $B$,;HMQ$5$l$F$$$k>l9g!"(BCGI $B%9%/%j%W%H$,5/F0$9$k$?$a$K!"4D6-JQ?t$O(B<em
- >$B0BA4(B</em>$B$J4D6-JQ?t$NAH$K@0M}$5$l$^$9!#(B
- $B$3$N0BA4$J4D6-JQ?t$N=89g$O!"%3%s%Q%$%k;~$K(B <code>suexec.c</code>
- $B$GDj5A$5$l$^$9!#(B</li>
-
- <li>$B0\?"@-$N$?$a$K!"4D6-JQ?t$NL>A0$O%"%k%U%!%Y%C%H!"(B
- $B?t;z$H%"%s%@!<%9%3%"(B ($BLuCm(B: '_') $B$@$1$+$i@.$j$^$9!#(B
- $B$5$i$K!":G=i$NJ8;z$O?t;z$G$"$C$F$O$$$1$^$;$s!#(B
- $B$3$N@)8B$K9g$o$J$$J8;z$O(B CGI $B%9%/%j%W%H$H(B SSI
- $B%Z!<%8$KEO$5$l$k$H$-$K%"%s%@!<%9%3%"$KCV49$5$l$^$9!#(B</li>
- </ul>
- </section>
- </section>
- <section id="using">
- <title>$B4D6-JQ?t$N;HMQ(B</title>
-
- <related>
- <modulelist>
- <module>mod_authz_host</module>
- <module>mod_cgi</module>
- <module>mod_ext_filter</module>
- <module>mod_headers</module>
- <module>mod_include</module>
- <module>mod_log_config</module>
- <module>mod_rewrite</module>
- </modulelist>
- <directivelist>
- <directive module="mod_authz_host">Allow</directive>
- <directive module="mod_log_config">CustomLog</directive>
- <directive module="mod_authz_host">Deny</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_headers">Header</directive>
- <directive module="mod_log_config">LogFormat</directive>
- <directive module="mod_rewrite">RewriteCond</directive>
- <directive module="mod_rewrite">RewriteRule</directive>
- </directivelist>
- </related>
-
- <section id="cgi-scripts">
- <title>CGI $B%9%/%j%W%H(B</title>
-
- <p>$B4D6-JQ?t$N<g$JMxMQK!$N0l$D$O!"(BCGI $B%9%/%j%W%H$K>pJs$rEA$($k$3$H$G$9!#(B
- $B>e$G@bL@$5$l$F$$$k$h$&$K!"(BCGI $B%9%/%j%W%H$KEO$5$l$k4D6-JQ?t$O(B Apache
- $B$N@_Dj$K$h$j@_Dj$5$l$kJQ?t$K2C$($F!"%j%/%(%9%H$NI8=`$N%a%?>pJs$r4^$s$G$$$^$9!#(B
- $B>\:Y$O(B <a href="howto/cgi.html">CGI $B%A%e!<%H%j%"%k(B</a>
- $B$r;2>H$7$F$/$@$5$$!#(B</p>
-
- </section>
- <section id="ssi-pages">
- <title>SSI $B%Z!<%8(B</title>
-
- <p>mod_include $B$N(B <code>INCLUDES</code> $B%U%#%k%?$G=hM}$5$l$k(B
- server-parsed (SSI) $B%I%-%e%a%s%H$G$O!"(B<code>echo</code>
- $BMWAG$r;HMQ$9$k$H4D6-JQ?t$,=PNO$5$l$^$9!#(B
- $B$^$?!"%Z!<%8$N$"$kItJ,$,%j%/%(%9%H$N@-<A$K1~$8$FJQ99$5$l$k$h$&$K!"(B
- $B4D6-JQ?t$r%U%m!<@)8fMWAG$G;H$&$3$H$,$G$-$^$9!#>\:Y$O(B
- <a href="howto/ssi.html">SSI $B%A%e!<%H%j%"%k(B</a> $B$r;2>H$7$F$/$@$5$$!#(B</p>
-
- </section>
- <section id="access-control">
- <title>$B%"%/%;%9@)8f(B</title>
-
- <p><code>allow from env=</code> $B%G%#%l%/%F%#%V$H(B <code>deny from env=</code>
- $B%G%#%l%/%F%#%V$r;HMQ$7$F!"%5!<%P$X$N%"%/%;%9$r4D6-JQ?t$NCM$G@)8f$9$k$3$H$,$G$-$^$9!#(B
- <directive module="mod_setenvif">SetEnvIf</directive>
- $B%G%#%l%/%F%#%V$HAH$_9g$o$;$k$3$H$G!"%/%i%$%"%s%H$NFC@-$K4p$E$$$F(B
- $B%5!<%P$X$N%"%/%;%9@)8f$r=@Fp$K9T$J$&$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
- $B$?$H$($P!"$3$l$i$N%G%#%l%/%F%#%V$r;HMQ$7$F!"FCDj$N%V%i%&%6(B (User-Agent)
- $B$+$i$N%"%/%;%9$r5qH]$9$k$3$H$,$G$-$^$9!#(B</p>
-
- </section>
- <section id="logging">
- <title>$B>r7oIU$-%m%05-O?(B</title>
-
- <p><directive module="mod_log_config">LogFormat</directive>
- $B%G%#%l%/%F%#%V$N%*%W%7%g%s(B <code>%e</code>
- $B$r;HMQ$9$k$3$H$G!"4D6-JQ?t$r%"%/%;%9%m%0$K5-O?$9$k$3$H$,$G$-$^$9!#$5$i$K!"(B
- <directive module="mod_log_config">CustomLog</directive>
- $B%G%#%l%/%F%#%V$N>r7oJ,4t<0$r;HMQ$9$k$3$H$G!"(B
- $B4D6-JQ?t$NCM$K$h$C$F%j%/%(%9%H$r%m%0$K5-O?$9$k$+$I$&$+$r7h$a$k$3$H$,$G$-$^$9!#(B
- <directive module="mod_setenvif">SetEnvIf</directive>
- $B%G%#%l%/%F%#%V$HAH$_9g$o$;$k$3$H$G!"(B
- $B$I$N%j%/%(%9%H$r%m%0$K5-O?$9$k$+$r=@Fp$K@)8f$9$k$3$H$,2DG=$K$J$j$^$9!#$?$H$($P!"(B
- <code>gif</code> $B$G=*$o$k%U%!%$%kL>$X$N%j%/%(%9%H$O%m%0$K5-O?$7$J$$!"(B
- $B0c$&%5%V%M%C%H$N%/%i%$%"%s%H$+$i$N%j%/%(%9%H$@$1$r%m%0$K5-O?$9$k!"(B
- $B$H$$$&A*Br$,2DG=$G$9!#(B</p>
-
- </section>
- <section id="response-headers">
- <title>$B>r7oIU$-1~Ez%X%C%@(B</title>
-
- <p><directive module="mod_headers">Header</directive>
- $B%G%#%l%/%F%#%V$O4D6-JQ?t$NB8:_$dIT:_$K$h$C$F%/%i%$%"%s%H$X$N1~Ez$KFCDj$N(B
- HTTP $B%X%C%@$rIU$1$k$+$I$&$+$r7h$a$k$3$H$,$G$-$^$9!#(B
- $B$3$l$K$h$j!"$?$H$($P!"%/%i%$%"%s%H$+$i$N%j%/%(%9%H(B
- $B$K$"$k%X%C%@$,$"$k>l9g$K$N$_FCDj$N1~Ez%X%C%@$rAw$k!"$H$$$&$h$&$J$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
- </section>
-
- <section id="external-filter">
- <title>$B30It%U%#%k%?$NE,MQ(B</title>
-
- <p><directive module="mod_ext_filter">ExtFilterDefine</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$F(B
- <module>mod_ext_filter</module> $B$G@_Dj$5$l$k30It%U%#%k%?$O!"(B
- <code>disableenv=</code> $B$H(B <code>enableenv=</code>
- $B%*%W%7%g%s$r;H$C$F!"4D6-JQ?t$K$h$k>r7oIU$-E,MQ$,$G$-$^$9!#(B</p>
- </section>
-
- <section id="url-rewriting">
- <title>URL $B$N=q$-49$((B</title>
-
- <p><directive module="mod_rewrite">RewriteCond</directive>
- $B%G%#%l%/%F%#%V$G(B<em>$BI>2AJ8;zNs(B</em>$B$H$7$F(B
- <code>%{ENV:...}</code> $B<0$r;XDj$9$k$3$H$G!"(Bmod_rewrite
- $B$N=q$-49$(%(%s%8%s$,4D6-JQ?t$K4p$$$F>r7oJ,4t$r9T$J$&$3$H$,$G$-$^$9!#(B
- mod_rewrite $B$,;HMQ2DG=$JJQ?t$G(B <code>ENV:</code> $B$,A0$K$D$$$F$$$J$$JQ?t$O!"(B
- $B<B:]$O4D6-JQ?t$G$O$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$=$l$i$OB>$N%b%8%e!<%k$+$i$O;HMQ$G$-$J$$(B mod_rewrite $BMQ$NFCJL$JJQ?t$G$9!#(B
- </p>
- </section>
- </section>
-
- <section id="special">
- <title>$BFCJL$JL\E*$N4D6-JQ?t(B</title>
-
- <p>$B8_49@-$NLdBj$r2r7h$9$k$?$a$K!"FCDj$N%/%i%$%"%s%H$HDL?.$7$F$$$k$H$-$O(B
- Apache $B$NF0:n$rJQ99$G$-$k5!9=$,F3F~$5$l$^$7$?!#$G$-$k$@$1=@Fp$K$9$k$?$a$K!"(B
- $B$3$l$i$N5!9=$O4D6-JQ?t$rDj5A$9$k$3$H$G8F$S=P$5$l$^$9!#IaDL$O!"(B
- <directive module="mod_setenvif">BrowserMatch</directive>
- $B%G%#%l%/%F%#%V$r;H$$$^$9$,!"$?$H$($P(B <directive module="mod_env"
- >SetEnv</directive> $B%G%#%l%/%F%#%V$d(B <directive module="mod_env"
- >PassEnv</directive> $B%G%#%l%/%F%#%V$b;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <section id="downgrade">
- <title>downgrade-1.0</title>
-
- <p>$B$3$l$r;XDj$9$k$3$H$G!"%j%/%(%9%H$,(B HTTP/1.0
- $B$h$j?7$7$$%W%m%H%3%k$N>l9g$G$b!"(BHTTP/1.0 $B$H$7$F07$o$l$^$9!#(B</p>
-
- </section>
- <section id="force-gzip">
- <title>force-gzip</title>
- <p><code>DEFLATE</code> $B%U%#%k%?$,;HMQ$9$k$h$&$K@_Dj$5$l$F$$$k$H$-$K!"(B
- $B$3$N4D6-JQ?t$O%V%i%&%6$N(B accept-encoding $B$N@_Dj$rL5;k$7$F>o$K(B
- $B05=L$5$l$?=PNO$rAw$k$h$&$K$7$^$9!#(B</p>
- </section>
- <section id="force-no-vary">
- <title>force-no-vary</title>
-
- <p>$B1~Ez%X%C%@$,%/%i%$%"%s%H$KAw$i$l$kA0$K(B <code>Vary</code>
- $B%U%#!<%k%I$r<h$j=|$-$^$9!#(B
- $B%/%i%$%"%s%H$NCf$K$O$3$N%U%#!<%k%I$r@5$7$/2r<a$7$J$$$b$N$,$"$j$^$9!#(B
- $B$3$NJQ?t$r@_Dj$9$k$3$H$G$=$NLdBj$r2sHr$9$k$3$H$,$G$-$^$9!#(B
- $B$3$NJQ?t$r@_Dj$9$k$H!"(B<strong>force-response-1.0</strong>
- $B$,@_Dj$5$l$?$3$H$K$J$j$^$9!#(B</p>
-
- </section>
- <section id="force-response">
- <title>force-response-1.0</title>
-
- <p>$B$3$l$,@_Dj$5$l$F$$$k$H!"(BHTTP/1.0 $B%j%/%(%9%H$rH/9T$9$k%/%i%$%"%s%H$KBP$7$F$O(B
- $B>o$K(B HTTP/1.0 $B$G1~Ez$9$k$h$&$K$J$j$^$9!#$3$N5!G=$O!"(B
- $B85!9$O(B AOL $B$N%W%m%-%7$NLdBj$N$?$a$K<BAu$5$l$^$7$?!#(BHTTP/1.0 $B%/%i%$%"%s%H$NCf$K$O!"(B
- HTTP/1.1 $B$N1~Ez$rJV$5$l$k$H@5$7$/F0:n$7$J$$$b$N$,$"$k$+$b$7$l$^$;$s!#(B
- $B$3$N5!G=$r;HMQ$9$k$3$H$G!"$=$N$h$&$J%/%i%$%"%s%H$H$N4V$N8_49@-LdBj$r2r7h$G$-$^$9!#(B</p>
- </section>
-
- <section id="gzip-only-text-html">
- <title>gzip-only-text/html</title>
-
- <p>$B$3$l$,(B 1 $B$K@_Dj$5$l$k$H!"$3$NJQ?t$O(B <code>text/html</code>
- $B0J30$N%3%s%F%s%H%?%$%W$KBP$9$k!"(B<module>mod_deflate</module>
- $BDs6!$N(B <code>DEFLATE</code> $B=PNO%U%#%k%?$rL58z$K$7$^$9!#(B
- $B$^$?!"@EE*$K!"4{$K05=L$5$l$?%U%!%$%k$r;HMQ$7$?$$>l9g!"(B
- (gzip $B$@$1$G$J$/!"(B"identity" $B$H0[$J$kA4$F$N%(%s%3!<%I$KBP$7$F(B)
- <module>mod_negotiation</module> $B$bJQ?t$rI>2A$7$^$9!#(B</p>
- </section>
-
- <section id="no-gzip"><title>no-gzip</title>
- <p>$B%;%C%H$5$l$k$H!"(B<module>mod_deflate</module> $B$N(B
- <code>DEFLATE</code> $B%U%#%k%?$,%*%U$K$J$j$^$9!#(B
- $B$=$7$F(B <module>mod_negotiation</module>
- $B$O%(%s%3!<%I$5$l$?%j%=!<%9$rAw$i$J$$$h$&$K$7$^$9!#(B</p>
- </section>
-
- <section id="nokeepalive">
- <title>nokeepalive</title>
-
- <p>$B$3$l$,@_Dj$5$l$F$$$k>l9g$O!"(B<directive module="core"
- >KeepAlive</directive> $B$r;HMQ$7$J$$$h$&$K$7$^$9!#(B</p>
-
- <section id="prefer-language"><title>prefer-language</title>
-
- <p><module>mod_negotiation</module> $B$N5sF0$K1F6A$rM?$($^$9!#(B
- (<code>en</code>, <code>ja</code>, <code>x-klingon</code>$B$H$$$C$?(B)
- $B8@8l%?%0$,3JG<$5$l$F$$$l$P!"$=$N8@8l$N(B variant $B$rAw?.$7$h$&$H$7$^$9!#(B
- $B$=$N$h$&$J(B variant $B$,$J$$>l9g$O!"(B
- $BDL>o$N(B<a href="content-negotiation.html">$B%M%4%7%(!<%7%g%s(B</a>$B=hM}$,(B
- $BE,MQ$5$l$^$9!#(B</p>
-
- </section>
-
- </section>
- <section id="redirect-carefully">
- <title>redirect-carefully</title>
-
- <p>$B$3$l$O%/%i%$%"%s%H$X$N%j%@%$%l%/%H$NAw?.$r%5!<%P$,$h$jCm0U?<$/(B
- $B9T$J$&$h$&$K$7$^$9!#(B
- $B$3$l$ODL>o!"%j%@%$%l%/%H$K:]$7$F%/%i%$%"%s%H$K(B
- $BLdBj$,$"$k$3$H$,J,$+$C$F$$$k>l9g$K;H$o$l$^$9!#$3$N5!G=$O85!9$O(B
- $B%^%$%/%m%=%U%H$N%&%'%V%U%)%k%@$N%=%U%H$,(B DAV
- $B%a%=%C%I$K$h$k%G%#%l%/%H%j$N%j%=!<%9$X$N%j%@%$%l%/%H$N07$$$K(B
- $BLdBj$,$j!"$=$l$r2sHr$9$k$?$a$K<BAu$5$l$^$7$?!#(B</p>
-
- </section>
-
- <section id="suppress-error-charset">
- <title>suppress-error-charset</title>
-
- <p><em>Apache 2.0.40 $B0J9_$GMxMQ2DG=(B</em></p>
-
- <p>$B%/%i%$%"%s%H$N%j%/%(%9%H$KBP$9$k1~Ez$H$7$F%j%@%$%l%/%H$rAw?.$9$k:]!"(B
- $B%l%9%]%s%9$K$O%j%@%$%l%/%H$,<+F0E*$K9T$J$($J$$(B ($B9T$J$o$l$J$$(B)
- $B>l9g$KI=<($9$k%F%-%9%H$,4^$^$l$^$9!#(B
- $BDL>o!"$3$N%F%-%9%H$K9gCW$7$?%-%c%i%/%?%;%C%H!"(BISO-8859-1
- $B$G%i%Y%kIU$1$r$7$^$9!#(B</p>
- <p>$B$7$+$7!"%j%@%$%l%/%H@h$,JL$NJ8;z%;%C%H$r;H$C$F$$$k>l9g!"(B
- $B$"$kLdBj$N$"$k%V%i%&%6$N%P!<%8%g%s$G$O!"(B
- $B%j%@%$%l%/%H@h$N<B:]$NJ8;z%;%C%H$NBe$o$j$K!"(B
- $B%j%@%$%l%/%H85$NJ8;z%;%C%H$r;H$C$F$7$^$&$3$H$,$"$j$^$9!#(B
- $B$=$N7k2L!"Nc$($PJQ$JIA2h$,9T$J$o$l$?$j$7$F!"FI$a$J$/$J$C$?$j$7$^$9!#(B</p>
- <p>$B$3$N4D6-JQ?t$r@_Dj$9$k$3$H$G!"%j%@%$%l%/%7%g%s%F%-%9%H$KBP$9$k(B
- $B%-%c%i%/%?%;%C%H$N;XDj$r=|5n$7$^$9$N$G!"$=$l$iLdBj$N$"$k%V%i%&%6$G$b(B
- $B%j%@%$%l%/%H@h$NJ8;z%;%C%H$r@5$7$/;H$&$h$&$K$G$-$^$9!#(B</p>
-
- </section>
-
- </section>
-
- <section id="examples">
- <title>$BNc(B</title>
-
- <section id="misbehaving">
- <title>$B$*$+$7$J5sF0$r$9$k%/%i%$%"%s%H$KBP$7$F%W%m%H%3%k$NF0:n$rJQ99$9$k(B</title>
-
- <p>$B%/%i%$%"%s%H$K4X$9$k4{CN$NLdBj$KBP=h$9$k$?$a$K!"0J2<$N9T$r(B
- httpd.conf $B$KF~$l$k$3$H$r?d>)$7$F$$$^$9!#(B</p>
-<example><pre>
-#
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0</pre></example>
-
- </section>
- <section id="no-img-log">
- <title>$B2hA|$X$N%j%/%(%9%H$r%"%/%;%9%m%0$K5-O?$7$J$$(B</title>
-
- <p>$B$3$NNc$G$O!"2hA|$X$N%j%/%(%9%H$,%"%/%;%9%m%0$K8=$l$J$$$h$&$K$7$^$9!#(B
- $B$3$l$rJQ99$9$k$3$H$G!"FCDj$N%G%#%l%/%H%j$N%m%0<}=8$r$d$a$?$j!"(B
- $BFCDj$N%[%9%H$+$i$N%j%/%(%9%H$N%m%0<}=8$r$d$a$?$j$9$k$3$H$,4JC1$K$G$-$^$9!#(B
- </p>
- <example><pre>
-SetEnvIf Request_URI \.gif image-request
-SetEnvIf Request_URI \.jpg image-request
-SetEnvIf Request_URI \.png image-request
-CustomLog logs/access_log common env=!image-request</pre></example>
-
- </section>
- <section id="image-theft">
- <title>$B!V2hA|$NEpMQ!W$rKI$0(B</title>
-
- <p>$B$3$NNc$O!"JL$N%5!<%P$K$$$k?M$,!"$"$J$?$N%5!<%P$K$"$k2hA|$r(B
- inline $B2hA|$H$7$F;HMQ$9$k$3$H$rKI$.$^$9!#(B
- $B$3$l$O?d>)$5$l$F$$$k@_Dj$G$O$"$j$^$;$s$,!"$"$k8BDj$5$l$?>u67$G$OM-8z$G$9!#(B
- $B$3$3$G$O!"$9$Y$F$N2hA|$O(B <code>/web/images</code>
- $B$H$$$&%G%#%l%/%H%j$K$"$k$H2>Dj$7$^$9!#(B</p>
- <example><pre>
-SetEnvIf Referer "^http://www.example.com/" local_referal
-# Allow browsers that do not send Referer info
-SetEnvIf Referer "^$" local_referal
-&lt;Directory /web/images&gt;
- Order Deny,Allow
- Deny from all
- Allow from env=local_referal
-&lt;/Directory&gt;</pre></example>
-
- <p>$B$3$N<jK!$K4X$9$k>\$7$$>pJs$O(B ApacheToday $B$N%A%e!<%H%j%"%k!V(B<a
- href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-ps"
- >Keeping Your Images from Adorning Other Sites</a>
- $B!W$r;2>H$7$F$/$@$5$$!#(B</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/env.xml.ko b/docs/manual/env.xml.ko
deleted file mode 100644
index 78bf5cf665..0000000000
--- a/docs/manual/env.xml.ko
+++ /dev/null
@@ -1,409 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.18 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="env.xml.meta">
-
- <title>¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</title>
-
- <summary>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â <em>ȯ°æº¯¼ö(environment variable)</em>¶ó´Â
- º¯¼ö¿¡ Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÀÌ Á¤º¸¸¦ »ç¿ëÇÏ¿© ·Î±×³ª
- Á¢±ÙÁ¦¾î µî ¿©·¯ ÀÛ¾÷À» Á¶ÀýÇÑ´Ù. ¶Ç, ȯ°æº¯¼ö´Â CGI ½ºÅ©¸³Æ®¿Í
- °°Àº ¿ÜºÎ ÇÁ·Î±×·¥°ú Åë½ÅÇÏ´Â ¼ö´ÜÀÌ µÈ´Ù. ÀÌ ¹®¼­´Â ȯ°æº¯¼ö¸¦
- ´Ù·ç°í »ç¿ëÇÏ´Â ´Ù¾çÇÑ ¹æ¹ýµéÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>ÀÌ º¯¼öµéÀ» <em>ȯ°æº¯¼ö</em>¶ó°í ºÎ¸£Áö¸¸, ¿î¿µÃ¼Á¦¿¡¼­
- ¸»Çϴ ȯ°æº¯¼ö¿Í ´Ù¸£´Ù. ÀÌ º¯¼ö´Â ¾ÆÆÄÄ¡ ³»ºÎ¿¡ ÀúÀåµÇ°í
- »ç¿ëµÈ´Ù. ȯ°æº¯¼ö´Â CGI ½ºÅ©¸³Æ®³ª Server Side Include
- ½ºÅ©¸³Æ®·Î ³Ñ°ÜÁú¶§¸¸ ½ÇÁ¦ ¿î¿µÃ¼Á¦ ȯ°æº¯¼ö°¡ µÈ´Ù. ¼­¹ö¸¦
- ½ÇÇàÇÏ´Â ¿î¿µÃ¼Á¦ ȯ°æÀ» ¼öÁ¤ÇÏ°í ½Í´Ù¸é ¿î¿µÃ¼Á¦ ½©¿¡¼­
- ȯ°æÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
- </summary>
-
- <section id="setting">
- <title>ȯ°æº¯¼ö ¼³Á¤Çϱâ</title>
- <related>
- <modulelist>
- <module>mod_env</module>
- <module>mod_rewrite</module>
- <module>mod_setenvif</module>
- <module>mod_unique_id</module>
- </modulelist>
- <directivelist>
- <directive module="mod_setenvif">BrowserMatch</directive>
- <directive module="mod_setenvif">BrowserMatchNoCase</directive>
- <directive module="mod_env">PassEnv</directive>
- <directive module="mod_rewrite">RewriteRule</directive>
- <directive module="mod_env">SetEnv</directive>
- <directive module="mod_setenvif">SetEnvIf</directive>
- <directive module="mod_setenvif">SetEnvIfNoCase</directive>
- <directive module="mod_env">UnsetEnv</directive>
- </directivelist>
- </related>
-
- <section id="basic-manipulation">
- <title>±âº»ÀûÀΠȯ°æ¼³Á¤</title>
-
- <p>¾ÆÆÄÄ¡¿¡¼­ ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ´Â °¡Àå ±âº»ÀûÀÎ ¹æ¹ýÀº
- ¹«Á¶°ÇÀûÀÎ <directive module="mod_env"
- >SetEnv</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. <directive
- module="mod_env">PassEnv</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼­¹ö¸¦ ½ÃÀÛÇÑ ½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Ã ¼öµµ ÀÖ´Ù.</p>
-
- </section>
- <section id="conditional">
- <title>¿äû¿¡ µû¸¥ Á¶°ÇºÎ ¼³Á¤</title>
-
- <p>´õ À¯¿¬ÇÏ°Ô, mod_setenvif°¡ Á¦°øÇÏ´Â Áö½Ã¾î´Â ¿äû¸¶´Ù
- ¿äûÀÇ Æ¯Â¡¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ¿¹¸¦ µé¾î, ƯÁ¤
- ºê¶ó¿ìÀú·Î (User-Agent) ¿äûÇϰųª ƯÁ¤ Referer (¸ÂÃã¹ýÀÌ
- Ʋ¸®Áö ¾Ê¾Ò´Ù) Çì´õ°¡ ÀÖ´Â °æ¿ì¿¡¸¸ º¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö
- ÀÖ´Ù. ½ÉÁö¾î mod_rewrite¿¡ ÀÖ´Â <directive
- module="mod_rewrite">RewriteRule</directive>ÀÇ
- <code>[E=...]</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ´õ À¯¿¬ÇÏ°Ô È¯°æº¯¼ö¸¦
- ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- </section>
- <section id="unique-identifiers">
- <title>À¯ÀÏÇÑ ½Äº°ÀÚ</title>
-
- <p>¸¶Áö¸·À¸·Î mod_unique_id´Â °¢ ¿äû¿¡ ´ëÇØ ¾î¶² °æ¿ì¿¡µµ
- "¸ðµç" ¿äûÁß¿¡ È®½ÇÈ÷ À¯ÀÏÇÑ(°ãÄ¡Áö¾ÊÀº) °ªÀ¸·Î
- <code>UNIQUE_ID</code> ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- </section>
- <section id="standard-cgi">
- <title>Ç¥ÁØ CGI º¯¼ö</title>
-
- <p>CGI ½ºÅ©¸³Æ®¿Í SSI ¹®¼­´Â ¾ÆÆÄÄ¡ ¼³Á¤¿¡¼­ ¼³Á¤ÇÏ¿´°Å³ª
- ½©¿¡¼­ °¡Á®¿Â ȯ°æº¯¼ö ¿Ü¿¡ Ãß°¡·Î <a
- href="http://cgi-spec.golux.com/">CGI ±Ô¾à</a>ÀÌ ±ÔÁ¤ÇÑ
- ¿äû¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë·ÁÁִ ȯ°æº¯¼öµéÀ» ¹Þ´Â´Ù.</p>
-
- </section>
- <section id="caveats">
- <title>ÁÖÀÇÇÒ Á¡</title>
-
- <ul>
- <li>ȯ°æ¼³Á¤ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Ç¥ÁØ CGI º¯¼ö¸¦ ¹«½ÃÇϰųª
- ¼öÁ¤ÇÒ ¼ö ¾ø´Ù.</li>
-
- <li><a href="suexec.html">suexec</a>°¡ CGI ½ºÅ©¸³Æ®¸¦
- ½ÇÇàÇÏ´Â °æ¿ì, ½ÃÀÛÇϱâÀü¿¡ CGI ½ºÅ©¸³Æ®ÀÇ È¯°æÀº
- <em>¾ÈÀüÇÑ</em> º¯¼öµé¸¸ °¡Áöµµ·Ï û¼ÒµÈ´Ù.
- <em>¾ÈÀüÇÑ</em> º¯¼ö ¸ñ·ÏÀº ÄÄÆÄÀϽÃ
- <code>suexec.c</code>¿¡ Á¤ÀǵȴÙ.</li>
-
- <li>Æ÷ÆÃÀ» À§ÇØ È¯°æº¯¼ö À̸§¿¡´Â ¿ÀÁ÷ ¹®ÀÚ, ¼ýÀÚ,
- ¹ØÁÙ¹®ÀÚ¸¸ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¶Ç, ù¹ø° ¹®ÀÚ·Î
- ¼ýÀÚ¸¦ »ç¿ëÇÏÁö¾Ê´Â °ÍÀÌ ÁÁ´Ù. CGI ½ºÅ©¸³Æ®³ª SSI
- ÆäÀÌÁö¿¡ ³Ñ¾î°¥¶§ ÀÌ¿ÜÀÇ ¹®ÀÚ´Â ¹ØÁÙ·Î ´ëüµÈ´Ù.</li>
- </ul>
- </section>
- </section>
- <section id="using">
- <title>ȯ°æº¯¼ö »ç¿ëÇϱâ</title>
-
- <related>
- <modulelist>
- <module>mod_authz_host</module>
- <module>mod_cgi</module>
- <module>mod_ext_filter</module>
- <module>mod_headers</module>
- <module>mod_include</module>
- <module>mod_log_config</module>
- <module>mod_rewrite</module>
- </modulelist>
- <directivelist>
- <directive module="mod_authz_host">Allow</directive>
- <directive module="mod_log_config">CustomLog</directive>
- <directive module="mod_authz_host">Deny</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_headers">Header</directive>
- <directive module="mod_log_config">LogFormat</directive>
- <directive module="mod_rewrite">RewriteCond</directive>
- <directive module="mod_rewrite">RewriteRule</directive>
- </directivelist>
- </related>
-
- <section id="cgi-scripts">
- <title>CGI ½ºÅ©¸³Æ®</title>
-
- <p>ȯ°æº¯¼öÀÇ ÁÖµÈ ¿ëµµÁß Çϳª´Â CGI ½ºÅ©¸³Æ®¿Í Á¤º¸¸¦
- ±³È¯ÇÏ´Â °ÍÀÌ´Ù. ¾Õ¿¡¼­ ¼³¸íÇßµíÀÌ ¾ÆÆÄÄ¡ ¼³Á¤¿¡¼­ ¼³Á¤ÇÑ
- º¯¼ö¿Ü¿¡ ¿äû¿¡ ´ëÇÑ Ç¥ÁØ Á¤º¸¸¦ °¡Áø º¯¼ö°¡ CGI ½ºÅ©¸³Æ®·Î
- ³Ñ¾î°£´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="howto/cgi.html">CGI
- ÅõÅ丮¾ó</a>À» Âü°íÇ϶ó.</p>
-
- </section>
- <section id="ssi-pages">
- <title>SSI ÆäÀÌÁö</title>
-
- <p>mod_includeÀÇ <code>INCLUDES</code> ÇÊÅÍ°¡ ó¸®ÇÏ´Â
- ¼­¹öÆÄ½Ì (SSI) ¹®¼­´Â <code>echo</code> ¿ä¼Ò¸¦ »ç¿ëÇÏ¿©
- ȯ°æº¯¼ö¸¦ Ãâ·ÂÇÒ ¼ö ÀÖ°í, ȯ°æº¯¼ö¸¦ »ç¿ëÇÏ¿© ¿äûÀÇ
- Ư¡¿¡ µû¶ó È帧Á¦¾î ¿ä¼Ò·Î ÆäÀÌÁöÀÇ ÀϺθ¦ º¯°æÇÒ ¼ö
- ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ¶Ç SSI ¹®¼­¿¡°Ô À§¿¡¼­ ¼³¸íÇÑ Ç¥ÁØ CGI
- ȯ°æº¯¼ö¸¦ Á¦°øÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº <a
- href="howto/ssi.html">SSI ÅõÅ丮¾ó</a>À» Âü°íÇ϶ó.</p>
-
- </section>
- <section id="access-control">
- <title>Á¢±ÙÁ¦¾î</title>
-
- <p><code>allow from env=</code>°ú <code>deny from env=</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ȯ°æº¯¼ö °ª¿¡ µû¶ó ¼­¹ö·ÎÀÇ Á¢±ÙÀ»
- Á¶ÀýÇÒ ¼ö ÀÖ´Ù. <directive
- module="mod_setenvif">SetEnvIf</directive>¿Í °°ÀÌ »ç¿ëÇϸé
- Ŭ¶óÀ̾ðÆ®ÀÇ Æ¯Â¡¿¡ µû¶ó ÀÚÀ¯·Ó°Ô ¼­¹ö·ÎÀÇ Á¢±ÙÀ» Á¦¾îÇÒ
- ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ƯÁ¤ ºê¶ó¿ìÀúÀÇ (User-Agent) Á¢±ÙÀ»
- °ÅºÎÇÒ ¼ö ÀÖ´Ù.</p>
-
- </section>
- <section id="logging">
- <title>Á¶°ÇºÎ ·Î±×</title>
-
- <p><directive module="mod_log_config">LogFormat</directive>ÀÇ
- <code>%e</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ȯ°æº¯¼ö¸¦ Á¢±Ù ·Î±×¿¡
- ±â·ÏÇÒ ¼ö ÀÖ´Ù. ¶Ç, <directive
- module="mod_log_config">CustomLog</directive> Áö½Ã¾îÀÇ
- Á¶°ÇºÎ Çü½ÄÀ» »ç¿ëÇϸé ȯ°æº¯¼öÀÇ »óȲ¿¡ µû¶ó ¿äûÀ»
- ·Î±×ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. <directive
- module="mod_setenvif">SetEnvIf</directive>¿Í °°ÀÌ »ç¿ëÇÏ¿©
- ¾î¶² ¿äûÀ» ·Î±×ÇÒÁö ÀÚÀ¯·Ó°Ô °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
- ÆÄÀϸíÀÌ <code>gif</code>·Î ³¡³ª´Â ¿äûÀº ·Î±×ÇÏÁö ¾Ê°Å³ª,
- ¿ÜºÎ ³×Æ®¿÷¿¡ Àִ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¸¸À» ·Î±×ÇÒ ¼ö ÀÖ´Ù.</p>
-
- </section>
- <section id="response-headers">
- <title>Á¶°ÇºÎ ÀÀ´ä Çì´õ</title>
-
- <p><directive module="mod_headers">Header</directive>
- Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÀ´äÀ» º¸³¾¶§ ȯ°æº¯¼öÀÇ À¯¹«¿¡
- µû¶ó ¾î¶² HTTP Çì´õ¸¦ Æ÷ÇÔÇÒÁö °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ƯÁ¤ Çì´õ°¡ ÀÖ´Â °æ¿ì¿¡¸¸
- ¾î¶² ÀÀ´ä Çì´õ¸¦ º¸³¾ ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="external-filter">
- <title>¿ÜºÎ ÇÊÅÍ ½ÇÇàÇϱâ</title>
-
- <p><module>mod_ext_filter</module>ÀÇ <directive
- module="mod_ext_filter">ExtFilterDefine</directive>
- Áö½Ã¾î·Î ¼³Á¤ÇÑ ¿ÜºÎ ÇÊÅ͸¦ <code>disableenv=</code>¿Í
- <code>enableenv=</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ȯ°æº¯¼ö¿¡ µû¶ó
- ¼±ÅÃÀûÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
- </section>
-
- <section id="url-rewriting">
- <title>URL ÀçÀÛ¼º(Rewriting)</title>
-
- <p><directive module="mod_rewrite">RewriteCond</directive>ÀÇ
- <em>TestString</em>¿¡ <code>%{ENV:...}</code> Çü½ÄÀ»
- »ç¿ëÇϸé mod_rewriteÀÇ ÀçÀÛ¼º ¿£ÁøÀÌ È¯°æº¯¼ö¿¡ µû¶ó
- ´Ù¸£°Ô ÇൿÇÑ´Ù. mod_rewrite¿¡¼­ ¾Õ¿¡ <code>ENV:</code>¸¦
- ºÙÀÌÁö¾Ê°í Á¢±ÙÇÏ´Â º¯¼ö´Â ½ÇÁ¦ ȯ°æº¯¼ö°¡ ¾Æ´ÔÀ» ÁÖÀÇÇ϶ó.
- ±×µéÀº ´Ù¸¥ ¸ðµâ¿¡¼­ ÀÐÀ» ¼ö ¾ø´Â mod_rewrite¿¡ ÇÑÁ¤µÈ
- º¯¼ö´Ù.</p>
- </section>
- </section>
-
- <section id="special">
- <title>Ưº°ÇÑ ¸ñÀûÀÇ È¯°æº¯¼ö</title>
-
- <p>Ŭ¶óÀ̾ðÆ®¿Í ¿øÈ°ÇÑ µ¿ÀÛÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â Ưº°ÇÑ
- Ŭ¶óÀ̾ðÆ®¿¡ ´ëÇØ ÀÚ½ÅÀÇ ÇൿÀ» ¼öÁ¤ÇÑ´Ù. º¸Åë <directive
- module="mod_setenvif">BrowserMatch</directive>¿¡¼­
- ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÏ¿© ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ±×·¯³ª <directive
- module="mod_env">SetEnv</directive>¿Í <directive
- module="mod_env">PassEnv</directive>·Îµµ °¡´ÉÇÏ´Ù.</p>
-
- <section id="downgrade">
- <title>downgrade-1.0</title>
-
- <p>¿äûÀÌ ÀÌÈÄ ¹öÀüÀ» »ç¿ëÇÏ´õ¶óµµ HTTP/1.0 ¿äûÀ¸·Î
- ó¸®ÇÑ´Ù.</p>
-
- </section>
- <section id="force-gzip">
- <title>force-gzip</title>
- <p><code>DEFLATE</code> ÇÊÅ͸¦ »ç¿ëÇÒ¶§ ÀÌ È¯°æº¯¼ö´Â
- ºê¶ó¿ìÀúÀÇ accept-encoding ¼³Á¤À» ¹«½ÃÇÏ°í ¹«Á¶°Ç
- ¾ÐÃàµÈ °á°ú¸¦ º¸³½´Ù.</p>
- </section>
- <section id="force-no-vary">
- <title>force-no-vary</title>
-
- <p>ÀÀ´äÀ» Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»±â Àü¿¡ ÀÀ´ä Çì´õ¿¡¼­
- <code>Vary</code> Çʵ带 »«´Ù. ¾î¶² Ŭ¶óÀ̾ðÆ®´Â ÀÌ
- Çʵ带 Á¦´ë·Î Çؼ®ÇÏÁö ¸øÇÑ´Ù. ÀÌ º¯¼ö´Â ÀÌ·± ¹®Á¦¸¦
- ÇØ°áÇÑ´Ù. ¶ÇÇÑ, ÀÌ º¯¼ö´Â
- <strong>force-response-1.0</strong>À» °¡Á¤ÇÑ´Ù.</p>
-
- </section>
- <section id="force-response">
- <title>force-response-1.0</title>
-
- <p>HTTP/1.0 ¿äûÀ» Çϴ Ŭ¶óÀ̾ðÆ®¿¡°Ô HTTP/1.0 ÀÀ´äÀ»
- °­Á¦ÇÑ´Ù. ¿ø·¡ AOL ÇÁ·Ï½Ã¿¡ ¹®Á¦°¡ À־ ¸¸µé¾îÁ³´Ù.
- ¾î¶² HTTP/1.0 Ŭ¶óÀ̾ðÆ®´Â HTTP/1.1 ÀÀ´äÀ» ¹ÞÀ¸¸é Á¦´ë·Î
- µ¿ÀÛÇÏÁö ¾ÊÀ¸¹Ç·Î, ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâÀ§ÇØ »ç¿ëÇÑ´Ù.</p>
- </section>
-
- <section id="gzip-only-text-html">
- <title>gzip-only-text/html</title>
-
- <p>°ªÀÌ "1"À̸é <code>text/html</code>ÀÌ ¾Æ´Ñ content-type¿¡
- ´ëÇØ <module>mod_deflate</module>ÀÇ DEFLATE Ãâ·ÂÇÊÅ͸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù. (gzip »Ó¸¸ ¾Æ´Ï¶ó "identity"°¡ ¾Æ´Ñ ¸ðµç
- ÀÎÄÚµùÀÇ) Á¤ÀûÀ¸·Î ¾ÐÃàÇÑ ÆÄÀÏÀÇ °æ¿ì¿¡µµ
- <module>mod_negotiation</module>Àº ÀÌ º¯¼ö¸¦ Âü°íÇÑ´Ù.</p>
- </section>
-
- <section id="no-gzip"><title>no-gzip</title>
-
- <p>ÀÌ ¿É¼ÇÀ» ¼³Á¤Çϸé <module>mod_deflate</module>ÀÇ
- <code>DEFLATE</code> ÇÊÅ͸¦ »ç¿ëÇÏÁö ¾Ê°í,
- <module>mod_negotiation</module>Àº ÀÎÄÚµùµÈ ÀÚ¿øÀ»
- º¸³»Áö ¾Ê´Â´Ù.</p>
-
- </section>
-
- <section id="nokeepalive">
- <title>nokeepalive</title>
-
- <p><directive module="core">KeepAlive</directive>¸¦
- ¹«½ÃÇÑ´Ù.</p>
-
- </section>
-
- <section id="prefer-language"><title>prefer-language</title>
-
- <p>ÀÌ º¯¼ö´Â <module>mod_negotiation</module>ÀÇ Çൿ¿¡
- ¿µÇâÀ» ¹ÌÄ£´Ù. º¯¼ö°¡ (<code>en</code>, <code>ja</code>,
- <code>x-klingon</code> µî) ¾ð¾îű׸¦ ´ã°íÀÖ´Ù¸é,
- <module>mod_negotiation</module>´Â ±× ¾ð¾î·Î µÈ º¯ÇüÀ»
- º¸³»±æ ½ÃµµÇÑ´Ù. ±×·± º¯ÇüÀÌ ¾ø´Ù¸é ÀϹÝÀûÀÎ <a
- href="content-negotiation.html">Çù»ó</a> °úÁ¤À» ½ÃÀÛÇÑ´Ù.</p>
-
- </section>
-
- <section id="redirect-carefully">
- <title>redirect-carefully</title>
-
- <p>¼­¹ö°¡ ´õ Á¶½ÉÈ÷ Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù.
- º¸Åë ¸®´ÙÀÌ·º¼ÇÀ» ó¸®Çϴµ¥ ¹®Á¦°¡ Àִ Ŭ¶óÀ̾ðÆ®À»
- À§ÇØ »ç¿ëÇÑ´Ù. ¿ø·¡ MicrosoftÀÇ WebFolders ¼ÒÇÁÆ®¿þ¾î°¡
- DAV ¸Þ½áµå¸¦ ÅëÇØ µð·ºÅ丮 ÀÚ¿øÀÇ ¸®´ÙÀÌ·º¼ÇÀ» ó¸®Çϴµ¥
- ¹®Á¦°¡ À־ ¸¸µé¾îÁ³´Ù.</p>
-
- </section>
-
- <section id="suppress-error-charset">
- <title>suppress-error-charset</title>
-
- <p><em>2.0.40 ÀÌÈÄ ¹öÀü¿¡ ÀÖ´Ù</em></p>
-
- <p>¾ÆÆÄÄ¡°¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î ¸®´ÙÀÌ·º¼ÇÀ»
- º¸³¾¶§ Ŭ¶óÀ̾ðÆ®°¡ ÀÚµ¿À¸·Î ¸®´ÙÀÌ·º¼ÇÀ» µû¶ó°¡Áö ¸øÇÏ´Â(ȤÀº
- ¾Ê´Â) °æ¿ì¿¡ ´ëºñÇÏ¿© ÀÀ´ä¿¡ »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÙ ¹®±¸¸¦ Æ÷ÇÔÇÑ´Ù.
- ¾ÆÆÄÄ¡´Â º¸Åë ÀÌ ±ÛÀ» ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ¹®ÀÚÁýÇÕÀÎ ISO-8859-1·Î
- Ç¥½ÃÇÑ´Ù.</p>
- <p>±×·¯³ª ¸®´ÙÀÌ·º¼ÇµÈ ÆäÀÌÁö°¡ ´Ù¸¥ ¹®ÀÚÁýÇÕÀ» »ç¿ëÇÒ °æ¿ì
- ¾î¶² ÀÌ»óÇÑ ºê¶ó¿ìÀú ¹öÀüÀº ½ÇÁ¦ ÆäÀÌÁö°¡ ¾Æ´Ï¶ó ¸®´ÙÀÌ·º¼Ç
- ÆäÀÌÁöÀÇ ¹®ÀÚÁýÇÕÀ» »ç¿ëÇÏ·Á°í ÇÑ´Ù. ¿¹¸¦ µé¾î, ±×¸®½º¾î°¡
- ÀÌ»óÇÏ°Ô º¸ÀÏ ¼ö ÀÖ´Ù.</p>
- <p>ÀÌ È¯°æº¯¼ö´Â ¾ÆÆÄÄ¡°¡ ¸®´ÙÀÌ·º¼Ç ÆäÀÌÁö¿¡ ¹®ÀÚÁýÇÕÀ»
- ¼³Á¤ÇÏÁö¾Êµµ·Ï ÇÏ¿©, ÀÌ·± ºê¶ó¿ìÀú°¡ ½ÇÁ¦ ÆäÀÌÁöÀÇ ¹®ÀÚÁýÇÕÀ»
- ¿Ã¹Ù·Î »ç¿ëÇÏ°Ô ¸¸µç´Ù.</p>
-
- </section>
-
- </section>
-
- <section id="examples">
- <title>¿¹Á¦</title>
-
- <section id="misbehaving">
- <title>À߸ø µ¿ÀÛÇϴ Ŭ¶óÀ̾ðÆ®µéÀ» À§ÇØ ÇÁ·ÎÅäÄÝ Çൿ
- º¯°æÇϱâ</title>
-
- <p>Ŭ¶óÀ̾ðÆ®µéÀÇ ÀÌ¹Ì ¾Ë·ÁÁø ¹®Á¦¸¦ ÇØ°áÇϱâÀ§ÇØ
- httpd.conf¿¡ ´ÙÀ½ ³»¿ëÀ» Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù.</p>
-<example><pre>
-#
-# ´ÙÀ½ Áö½Ã¾îµéÀº ÀϹÝÀûÀÎ HTTP ÀÀ´äÀ» º¯°æÇÑ´Ù.
-# ù¹ø° Áö½Ã¾î´Â Netscape 2.x¿Í À̸¦ °¡ÀåÇÑ ºê¶ó¿ìÀú¿¡°Ô
-# keepalive¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌµé ºê¶ó¿ìÀú ±¸Çö¿¡ ¹®Á¦°¡ ÀÖ´Ù.
-# µÎ¹ø° Áö½Ã¾î´Â HTTP/1.1 ±¸ÇöÀÌ À߸øµÇ¾ú°í 301À̳ª 302
-# (¸®´ÙÀÌ·º¼Ç) ÀÀ´ä¿¡ »ç¿ëÇÑ keepalive¸¦ Á¦´ë·Î Áö¿øÇÏÁö
-# ¸øÇÏ´Â Microsoft Internet Explorer 4.0b2¸¦ À§ÇÑ °ÍÀÌ´Ù.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# ´ÙÀ½ Áö½Ã¾î´Â ±âº»ÀûÀÎ HTTP/1.1 ÀÀ´äÀ» ÀÌÇØÇÏÁö ¸øÇÏ¿©
-# HTTP/1.0 ±Ô¾àÀ» ¾î±â´Â ºê¶ó¿ìÀú¿¡°Ô HTTP/1.1 ÀÀ´äÀ» º¸³»Áö ¾Ê´Â´Ù.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0</pre></example>
-
- </section>
- <section id="no-img-log">
- <title>Á¢±Ù ·Î±×¿¡ À̹ÌÁö¿¡ ´ëÇÑ ¿äûÀ» ·Î±×ÇÏÁö ¾Ê±â</title>
-
- <p>ÀÌ ¿¹Á¦´Â À̹ÌÁö¿¡ ´ëÇÑ ¿äûÀ» Á¢±Ù ·Î±×¿¡ ±â·ÏÇÏÁö
- ¾Ê´Â´Ù. ƯÁ¤ µð·ºÅ丮¿¡ ´ëÇÑ È¤Àº ƯÁ¤ È£½ºÆ®¿¡¼­ ¿Â
- ¿äûÀ» ·Î±×ÇÏÁö ¾Êµµ·Ï ½±°Ô ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
- <example><pre>
-SetEnvIf Request_URI \.gif image-request
-SetEnvIf Request_URI \.jpg image-request
-SetEnvIf Request_URI \.png image-request
-CustomLog logs/access_log common env=!image-request</pre></example>
-
- </section>
- <section id="image-theft">
- <title>"À̹ÌÁö µµµÏ" ¹æÁö</title>
-
- <p>ÀÌ ¿¹´Â ÇöÀç ¼­¹ö¿ÜÀÇ »ç¿ëÀÚ°¡ ÆäÀÌÁö¿¡ ¼­¹ö¿¡ ÀÖ´Â
- À̹ÌÁö¸¦ Æ÷ÇÔÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. ÀÌ
- ¼³Á¤À» ±ÇÀåÇÏÁö´Â ¾ÊÀ¸¸ç, Á¦ÇÑµÈ °æ¿ì¿¡¸¸ µ¿ÀÛÇÑ´Ù.
- ¿ì¸®´Â ¸ðµç À̹ÌÁö°¡ /web/images µð·ºÅ丮 ¾È¿¡ ÀÖ´Ù°í
- °¡Á¤ÇÑ´Ù.</p>
- <example><pre>
-SetEnvIf Referer "^http://www.example.com/" local_referal
-# Referer Á¤º¸¸¦ º¸³»Áö ¾Ê´Â ºê¶ó¿ìÀú¸¦ Çã¿ëÇÑ´Ù
-SetEnvIf Referer "^$" local_referal
-&lt;Directory /web/images&gt;
- Order Deny,Allow
- Deny from all
- Allow from env=local_referal
-&lt;/Directory&gt;</pre></example>
-
- <p>ÀÌ ±â¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ApacheToday ÅõÅ丮¾ó "<a
- href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
- Keeping Your Images from Adorning Other Sites</a>"¸¦ Âü°íÇ϶ó.</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/env.xml.meta b/docs/manual/env.xml.meta
deleted file mode 100644
index 321cae6970..0000000000
--- a/docs/manual/env.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>env</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/faq/.cvsignore b/docs/manual/faq/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/faq/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/faq/all_in_one.html b/docs/manual/faq/all_in_one.html
deleted file mode 100644
index 0ddbeeea0f..0000000000
--- a/docs/manual/faq/all_in_one.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: all_in_one.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: all_in_one.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/faq/all_in_one.html.en b/docs/manual/faq/all_in_one.html.en
deleted file mode 100644
index 78082fab33..0000000000
--- a/docs/manual/faq/all_in_one.html.en
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Frequently Asked Questions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div id="preamble"><h1>Frequently Asked Questions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/faq/all_in_one.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/all_in_one.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The latest version of this FAQ is always available from the main Apache
- web site, at &lt;<a href="http://httpd.apache.org/docs-2.1/faq/">http://httpd.apache.org/docs-2.1/faq/</a>&gt;.</p>
-
- <p>Since Apache 2.0 is quite new, we don't yet know what the <em>Frequently
- Asked Questions</em> will be. While this section fills up, you should also
- consult the <a href="http://httpd.apache.org/docs/misc/FAQ.html">Apache 1.3
- FAQ</a> to see if your question is answered there.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#topics">Topics</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#support">Support</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#error">Error Messages</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a id="topics" name="topics">Topics</a></h2>
-<dl><dt><a href="#support">Support</a></dt><dd>What do I do when I have problems?</dd>
-<dt><a href="#error">Error Messages</a></dt><dd>What does this error message mean?</dd>
-</dl></div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">Support</a></h2>
- <ul>
- <li><a href="#support.what2do">"Why can't I ...? Why won't ... work?" What
- to do in case of problems</a></li>
-
- <li><a href="#support.support">Whom do I contact for support?</a></li>
- </ul>
-
- <h3><a name="support.what2do" id="support.what2do">"Why can't I ...? Why won't ... work?" What to do in case of
- problems</a></h3>
-
-
- <p>If you are having trouble with your Apache server software, you should
- take the following steps:</p>
-
- <dl>
- <dt>Check the errorlog!</dt>
- <dd>Apache tries to be helpful when it encounters a problem. In many
- cases, it will provide some details by writing one or messages to the
- server error log. Sometimes this is enough for you to diagnose &amp; fix
- the problem yourself (such as file permissions or the like). The default
- location of the error log is
- <code>/usr/local/apache2/logs/error_log</code>, but see the <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> directive in your config files for the
- location on your server.</dd>
-
- <dt>Check the <a href="http://httpd.apache.org/docs-2.1/faq/">FAQ</a>!</dt>
- <dd>The latest version of the Apache Frequently-Asked Questions list can
- always be found at the main Apache web site.</dd>
-
- <dt>Check the Apache bug database</dt>
- <dd>Most problems that get reported to The Apache Group are recorded in
- the <a href="http://httpd.apache.org/bug_report.html">bug database</a>.
- <strong>Please</strong> check the existing reports, open
- <strong>and</strong> closed, before adding one. If you find that your
- issue has already been reported, please <em>don't</em> add a "me, too"
- report. If the original report isn't closed yet, we suggest that you
- check it periodically. You might also consider contacting the original
- submitter, because there may be an email exchange going on about the
- issue that isn't getting recorded in the database.</dd>
-
- <dt><a id="support.what2do.user-support" name="support.what2do.user-support">Ask in a user support forum</a></dt>
- <dd><p>Apache has an active community of users who are willing to share
- their knowledge. Participating in this community is usually the best and
- fastest way to get answers to your questions and problems.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">Users
- mailing list</a></p>
-
- <p>USENET newsgroups:</p>
-
- <ul>
- <li>comp.infosystems.www.servers.unix
- [<a href="news:comp.infosystems.www.servers.unix">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
- </li>
-
- <li>comp.infosystems.www.servers.ms-windows
- [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
- </li>
-
- <li>comp.infosystems.www.authoring.cgi
- [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
- </li>
- </ul></dd>
-
- <dt>If all else fails, report the problem in the bug database</dt>
- <dd><p>If you've gone through those steps above that are appropriate and
- have obtained no relief, then please <em>do</em> let the httpd developers
- know about the problem by <a href="http://httpd.apache.org/bug_report.html">logging a bug
- report</a>.</p>
-
- <p>If your problem involves the server crashing and generating a core
- dump, please include a backtrace (if possible). As an example,</p>
-
- <div class="example"><p><code>
- # cd <var>ServerRoot</var><br />
- # dbx <var>httpd</var> <var>core</var><br />
- (dbx) where
- </code></p></div>
-
- <p>(Substitute the appropriate locations for your <var>ServerRoot</var>
- and your <var>httpd</var> and <var>core</var> files. You may have to use
- <code>gdb</code> instead of <code>dbx</code>.)</p>
- </dd>
- </dl>
-
-
- <h3><a name="support.support" id="support.support">Whom do I contact for support?</a></h3>
- <p>With several million users and fewer than forty volunteer developers,
- we cannot provide personal support for Apache. For free support, we
- suggest participating in a <a href="#support.what2do.user-support">user forum</a>.</p>
-
- <p>Professional, commercial support for Apache is available from
- <a href="http://www.apache.org/info/support.cgi">a number of
- companies</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="error" id="error">Error Messages</a></h2>
- <ul>
- <li><a href="#error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></li>
- <li><a href="#error.acceptex">AcceptEx failed</a></li>
- <li><a href="#error.scriptheaders">Premature end of script
- headers</a></li>
- </ul>
-
- <h3><a name="error.sendfile" id="error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></h3>
-
- <p>Apache uses the <code>sendfile</code> syscall on platforms
- where it is available in order to speed sending of responses.
- Unfortunately, on some systems, Apache will detect the presence of
- <code>sendfile</code> at compile-time, even when it does not work
- properly. This happens most frequently when using network or
- other non-standard file-system.</p>
-
- <p>Symptoms of this problem include the above message in the error
- log and zero-length responses to non-zero-sized files. The
- problem generally occurs only for static files, since dynamic
- content usually does not make use of <code>sendfile</code>.</p>
-
- <p>To fix this problem, simply use the <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code> directive to disable
- <code>sendfile</code> for all or part of your server. Also see
- the <code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code>, which can
- help with similar problems.</p>
-
-
-
- <h3><a name="error.acceptex" id="error.acceptex">AcceptEx Failed</a></h3>
-
- <p>If you get error messages related to the <code>AcceptEx</code> syscall
- on win32, see the <code class="directive"><a href="../mod/mpm_winnt.html#win32disableacceptex">Win32DisableAcceptEx</a></code>
- directive.</p>
-
-
-
- <h3><a name="error.scriptheaders" id="error.scriptheaders">Premature end of script
- headers</a></h3>
-
- <p>Most problems with CGI scripts result in this message written in the
- error log together with an <code>Internal Server Error</code> delivered
- to the browser. A guide to helping debug this type of problem is
- available in the <a href="../howto/cgi.html#troubleshoot">CGI
- tutorial</a>.</p>
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/faq/all_in_one.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/all_in_one.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/all_in_one.html.ko.euc-kr b/docs/manual/faq/all_in_one.html.ko.euc-kr
deleted file mode 100644
index 4f7eb2648f..0000000000
--- a/docs/manual/faq/all_in_one.html.ko.euc-kr
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ) - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div id="preamble"><h1>ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/all_in_one.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/all_in_one.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>FAQ ÃÖ½ÅÆÇÀº ¾ÆÆÄÄ¡ À¥»çÀÌÆ® &lt;<a href="http://httpd.apache.org/docs-2.1/faq/">http://httpd.apache.org/docs-2.1/faq/</a>&gt;¿¡¼­ º¼ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 2.0ÀÌ ³ª¿ÂÁö ¾ó¸¶ ¾ÈµÇ¼­ ¿ì¸®´Â ¾ÆÁ÷ <em>ÀÚÁÖ
- ¹°¾îº¸´Â Áú¹® (FAQ)</em>ÀÌ ¹«¾ùÀÎÁö ¸ð¸¥´Ù. ³»¿ëÀÌ Ã¤¿öÁú
- ¶§±îÁö ¿©±â¿¡ ÇØ´äÀÌ ¾ø´Ù¸é <a href="http://httpd.apache.org/docs/misc/FAQ.html">¾ÆÆÄÄ¡
- 1.3 FAQ</a>µµ Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#topics">ÁÖÁ¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#support">Áö¿ø</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#error">¿À·ù¹®</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a id="topics" name="topics">ÁÖÁ¦</a></h2>
-<dl><dt><a href="#support">Áö¿ø</a></dt><dd>¹®Á¦°¡ »ý±â¸é ¾î¶»°Ô ÇØ°áÇϳª?</dd>
-<dt><a href="#error">¿À·ù¹®</a></dt><dd>ÀÌ ¿À·ù¹®ÀÌ ¹«½¼ ¶æÀΰ¡?</dd>
-</dl></div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">Áö¿ø</a></h2>
- <ul>
- <li><a href="#support.what2do">"¿Ö ... ¾ÈµÇ³ª? ¿Ö ... µ¿ÀÛÇÏÁö
- ¾Ê´Â°¡?" ¹®Á¦°¡ »ý±â¸é ÇÒÀÏ</a></li>
-
- <li><a href="#support.support">µµ¿òÀ» ¾òÀ¸·Á¸é ´©±¸¿¡°Ô
- ¿¬¶ôÇϳª?</a></li>
- </ul>
-
- <h3><a name="support.what2do" id="support.what2do">"¿Ö ... ¾ÈµÇ³ª? ¿Ö ... µ¿ÀÛÇÏÁö ¾Ê´Â°¡?" ¹®Á¦°¡ »ý±â¸é
- ÇÒÀÏ</a></h3>
-
-
- <p>¾ÆÆÄÄ¡ ¼­¹ö ¼ÒÇÁÆ®¿þ¾î¿¡ ¹®Á¦°¡ »ý±â¸é ´ÙÀ½°ú °°Àº
- ´Ü°è¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt>¿À·ù ·Î±×(errorlog)¸¦ È®ÀÎÇ϶ó!</dt>
- <dd>¾ÆÆÄÄ¡ ¼­¹ö´Â ¹®Á¦°¡ »ý±â¸é µµ¿òÀ» ÁÖ·Á°í ³ë·ÂÇÑ´Ù.
- ¸¹Àº °æ¿ì ¼­¹ö ¿À·ù ·Î±×¿¡ ÀÚ¼¼ÇÑ ³»¿ëÀ» ±â·ÏÇÑ´Ù.
- À̰͸¸À¸·Îµµ Á÷Á¢ (ÆÄÀϱÇÇÑ µî) ¹®Á¦¸¦ ¹ß°ßÇÏ°í °íÄ¥ ¼ö
- ÀÖ´Â °æ¿ì°¡ ¸¹´Ù. ¿À·ù ·Î±×ÀÇ ±âº» À§Ä¡´Â
- <code>/usr/local/apache2/logs/error_log</code>ÀÌÁö¸¸,
- Á¤È®ÇÑ À§Ä¡´Â ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> Áö½Ã¾î¸¦ Âü°íÇ϶ó.</dd>
-
- <dt><a href="http://httpd.apache.org/docs-2.1/faq/">FAQ</a>¸¦
- È®ÀÎÇ϶ó!</dt>
- <dd>¾ÆÆÄÄ¡ À¥»çÀÌÆ®¿¡¼­ Ç×»ó ¾ÆÆÄÄ¡ FAQ ÃÖ½ÅÆÇÀ» º¼ ¼ö
- ÀÖ´Ù.</dd>
-
- <dt>¾ÆÆÄÄ¡ ¹ö±× µ¥ÀÌÅͺ£À̽º¸¦ È®ÀÎÇ϶ó</dt>
- <dd>¾ÆÆÄÄ¡±×·ì(The Apache Group)¿¡ º¸°íµÈ ´ëºÎºÐÀÇ ¹®Á¦´Â
- <a href="http://httpd.apache.org/bug_report.html">¹ö±×
- µ¥ÀÌÅͺ£À̽º</a>¿¡ ±â·ÏµÈ´Ù. »õ·Î ¹ö±×¸¦ Ãß°¡Çϱâ Àü¿¡,
- ÀÌ¹Ì ¾Ë·ÁÁ³°Å³ª(open) ÇØ°áµÈ(closed) ¹ö±×°¡ ÀÖ´ÂÁö È®ÀÎÇϱæ
- <strong>¹Ù¶õ´Ù</strong>. ÀÌ¹Ì ¹®Á¦°¡ º¸°íµÇ¾ú´Ù¸é "³ªµµ
- ÀÌ·± ¹®Á¦°¡ ÀÖ´Ù°í" º¸°íÇÏÁö <em>¾Ê±æ</em> ¹Ù¶õ´Ù. ¾ÆÁ÷
- ÇØ°áµÇÁö ¾Ê¾Ò´Ù¸é ÁÖ±âÀûÀ¸·Î »óȲÀ» È®ÀÎÇÏ±æ ¹Ù¶õ´Ù. ¶Ç,
- µ¥ÀÌÅͺ£À̽º¿¡ ±â·ÏµÇÁö ¾Ê°í À̸ÞÀÏ ±³È¯À¸·Î ÁøÇàµÈ »çÇ×ÀÌ
- ÀÖÀ» ¼ö ÀÖÀ¸´Ï óÀ½ ¹®Á¦¸¦ º¸°íÇÑ »ç¶÷¿¡°Ô ¿¬¶ôÇغ¼ ¼öµµ
- ÀÖ´Ù.</dd>
-
- <dt><a id="support.what2do.user-support" name="support.what2do.user-support">»ç¿ëÀÚ Áö¿ø °ø°£¿¡
- ¹®ÀÇÇÑ´Ù</a></dt>
- <dd><p>¾ÆÆÄÄ¡¿¡ ´ëÇÑ Áö½ÄÀ» °øÀ¯ÇÏ±æ ¿øÇÏ´Â È°¹ßÇÑ »ç¿ëÀÚ
- °øµ¿Ã¼µéÀÌ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ·± °øµ¿Ã¼¿¡ Âü¿©ÇÏ´Â °ÍÀÌ
- ¹®Á¦ÀÇ ´äÀ» ¾ò´Â °¡Àå ÁÁ°í ºü¸¥ ¹æ¹ýÀÌ´Ù.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">»ç¿ëÀÚ
- ¸ÞÀϸµ¸®½ºÆ®</a></p>
-
- <p>USENET ´º½º±×·ì:</p>
-
- <ul>
- <li>comp.infosystems.www.servers.unix
- [<a href="news:comp.infosystems.www.servers.unix">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
- </li>
-
- <li>comp.infosystems.www.servers.ms-windows
- [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
- </li>
-
- <li>comp.infosystems.www.authoring.cgi
- [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
- </li>
- </ul></dd>
-
- <dt>À§ÀÇ ¹æ¹ýÀÌ ¸ðµÎ ½ÇÆÐÇÏ¸é ¹ö±× µ¥ÀÌÅͺ£À̽º¿¡ ¹®Á¦¸¦
- º¸°íÇÑ´Ù</dt>
- <dd><p>À§ÀÇ ´Ü°è¸¦ ¸ðµÎ ½ÃµµÇÏ°íµµ ÇØ°áÃ¥ÀÌ ¾ø´Ù¸é, <a href="http://httpd.apache.org/bug_report.html">¹ö±×¸¦
- º¸°íÇÏ¿©</a> À¥¼­¹ö °³¹ßÀڵ鿡°Ô ¹®Á¦¸¦ <em>¾Ë¸®±æ</em>
- ¹Ù¶õ´Ù.</p>
-
- <p>core dump¸¦ ¸¸µé¸ç ¼­¹ö°¡ Á×´Â °æ¿ì¶ó¸é (°¡´ÉÇϸé)
- backtrace<span class="transnote">(<em>¿ªÁÖ;</em> ¹®Á¦°¡ ½ÇÇàÆÄÀÏÀÇ Á¤È®È÷ ¾î¶² ÁöÁ¡¿¡¼­
- ¹ß»ýÇÏ¿´°í, ÇÁ·Î±×·¥ÀÌ ±× ÁöÁ¡±îÁö ¾î¶² °æ·Î·Î ½ÇÇàµÇ¾ú´ÂÁö¸¦
- ¾Ë·ÁÁÖ´Â Á¤º¸)</span>¸¦ Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <div class="example"><p><code>
- # cd <var>ServerRoot</var><br />
- # dbx <var>httpd</var> <var>core</var><br />
- (dbx) where
- </code></p></div>
-
- <p>(<var>ServerRoot</var>, <var>httpd</var>, <var>core</var>
- ÆÄÀÏÀÇ ½ÇÁ¦ À§Ä¡¸¦ ´ë½Å »ç¿ëÇ϶ó. <code>dbx</code> ´ë½Å
- <code>gdb</code>¸¦ »ç¿ëÇØ¾ß ÇÒ ¼öµµ ÀÖ´Ù.)</p>
- </dd>
- </dl>
-
-
- <h3><a name="support.support" id="support.support">µµ¿òÀ» ¾òÀ¸·Á¸é ´©±¸¿¡°Ô
- ¿¬¶ôÇϳª?</a></h3>
- <p>40¸í °¡·®ÀÇ ÀÚ¹ßÀûÀ¸·Î Âü¿©ÇÑ °³¹ßÀÚ¸¸À¸·Î´Â ¼ö¹é¸¸ÀÇ
- »ç¿ëÀÚ¿¡°Ô ¾ÆÆÄÄ¡¿¡ ´ëÇØ ÀÏÀÏÀÌ Áö¿øÇÒ ¼ö ¾ø´Ù. ¹«·á Áö¿øÀ»
- ¾òÀ¸·Á¸é <a href="#support.what2do.user-support">»ç¿ëÀÚ
- °ø°£</a>¿¡ Âü¿©ÇÏ±æ ±ÇÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡ ´ëÇÑ Á÷¾÷ÀûÀÎ À¯·á Áö¿øÀº <a href="http://www.apache.org/info/support.cgi">¿©·¯
- ȸ»ç</a>¿¡¼­ Á¦°øÇÑ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="error" id="error">¿À·ù¹®</a></h2>
- <ul>
- <li><a href="#error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></li>
- <li><a href="#error.acceptex">AcceptEx failed</a></li>
- <li><a href="#error.scriptheaders">Premature end of script
- headers</a></li>
- </ul>
-
- <h3><a name="error.sendfile" id="error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></h3>
-
- <p>Ç÷¡ÆûÀÌ <code>sendfile</code> ½Ã½ºÅÛÈ£ÃâÀ» Áö¿øÇÑ´Ù¸é,
- ¾ÆÆÄÄ¡´Â ÀÀ´äÀÇ ¼Óµµ¸¦ ºü¸£°ÔÇϱâÀ§ÇØ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù.
- ºÒÇàÈ÷µµ ¾î¶² ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡´Â ÄÄÆÄÀÏÇÒ¶§
- <code>sendfile</code>ÀÌ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Âµ¥µµ Á¤»óÀûÀ¸·Î
- ÀÛµ¿ÇÑ´Ù°í ¿ÀÆÇÇÑ´Ù. ÀÌ ¹®Á¦´Â ³×Æ®¿÷ ÆÄÀϽýºÅÛÀ̳ª ºñÇ¥ÁØ
- ÆÄÀϽýºÅÛÀ» »ç¿ëÇÒ¶§ ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <p>ÀÌ ¹®Á¦ÀÇ Áõ»óÀº ¿À·ù ·Î±×(error log)¿¡ À§ÀÇ ¹®±¸¸¦
- ±â·ÏÇϰųª Å©±â°¡ 0ÀÌ ¾Æ´Ñ ÆÄÀÏ¿¡ ´ëÇØ Å©±â°¡ 0ÀÎ ÀÀ´äÀ»
- ÇÏ´Â °æ¿ìÀÌ´Ù. µ¿ÀûÀ¸·Î ³»¿ëÀ» »ý¼ºÇÒ¶§´Â
- <code>sendfile</code>À» »ç¿ëÇÏÁö ¾Ê±â¶§¹®¿¡ ÀϹÝÀûÀ¸·Î Á¤ÀûÀÎ
- ÆÄÀÏÀ» ¿äûÇÒ¶§¸¸ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.</p>
-
- <p>¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ¼­¹ö°¡ <code>sendfile</code>À» »ç¿ëÇÏÁö
- ¾Êµµ·Ï <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ¶Ç, ÀÌ¿Í À¯»çÇÑ ¹®Á¦¿¡ ´ëÇØ <code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code>À» Âü°íÇ϶ó.</p>
-
-
-
- <h3><a name="error.acceptex" id="error.acceptex">AcceptEx Failed</a></h3>
-
- <p>win32¿¡¼­ <code>AcceptEx</code> ½Ã½ºÅÛÈ£Ãâ¿¡ ´ëÇÑ ¿À·ù¹®À»
- ³ª¿À¸é, <code class="directive"><a href="../mod/mpm_winnt.html#win32disableacceptex">Win32DisableAcceptEx</a></code>
- Áö½Ã¾î¸¦ Âü°íÇ϶ó.</p>
-
-
-
- <h3><a name="error.scriptheaders" id="error.scriptheaders">Premature end of script
- headers</a></h3>
-
- <p>º¸Åë CGI ½ºÅ©¸³Æ®¿¡ ¹®Á¦°¡ ÀÖÀ¸¸é ºê¶ó¿ìÀú¿¡°Ô <code>Internal
- Server Error</code>¸¦ º¸³»°í ¿À·ù·Î±×¿¡ ÀÌ ¹®±¸¸¦ ±â·ÏÇÑ´Ù.
- ÀÌ·± ¹®Á¦¸¦ µð¹ö±ëÇÒ¶§ <a href="../howto/cgi.html#troubleshoot">CGI ÅõÅ丮¾ó</a>ÀÌ
- µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù.</p>
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/all_in_one.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/all_in_one.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/all_in_one.xml b/docs/manual/faq/all_in_one.xml
deleted file mode 100644
index eb9d988c95..0000000000
--- a/docs/manual/faq/all_in_one.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd" [
- <!ENTITY categories SYSTEM "categories.xml">
-]>
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="all_in_one.xml.meta" all-in-one="yes">
-<parentdocument href="./">FAQ</parentdocument>
-
-<title>Frequently Asked Questions</title>
-
-<summary>
- <p>The latest version of this FAQ is always available from the main Apache
- web site, at &lt;<a href="http://httpd.apache.org/docs-2.1/faq/"
- >http://httpd.apache.org/docs-2.1/faq/</a>&gt;.</p>
-
- <p>Since Apache 2.0 is quite new, we don't yet know what the <em>Frequently
- Asked Questions</em> will be. While this section fills up, you should also
- consult the <a href="http://httpd.apache.org/docs/misc/FAQ.html">Apache 1.3
- FAQ</a> to see if your question is answered there.</p>
-</summary>
-
-&categories;
-
-</faq>
-
diff --git a/docs/manual/faq/all_in_one.xml.ko b/docs/manual/faq/all_in_one.xml.ko
deleted file mode 100644
index 1299e0c3ba..0000000000
--- a/docs/manual/faq/all_in_one.xml.ko
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd" [
- <!ENTITY categories SYSTEM "categories.xml.ko">
-]>
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="all_in_one.xml.meta" all-in-one="yes">
-<parentdocument href="./">FAQ</parentdocument>
-
-<title>ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</title>
-
-<summary>
- <p>FAQ ÃÖ½ÅÆÇÀº ¾ÆÆÄÄ¡ À¥»çÀÌÆ® &lt;<a
- href="http://httpd.apache.org/docs-2.1/faq/"
- >http://httpd.apache.org/docs-2.1/faq/</a>&gt;¿¡¼­ º¼ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 2.0ÀÌ ³ª¿ÂÁö ¾ó¸¶ ¾ÈµÇ¼­ ¿ì¸®´Â ¾ÆÁ÷ <em>ÀÚÁÖ
- ¹°¾îº¸´Â Áú¹® (FAQ)</em>ÀÌ ¹«¾ùÀÎÁö ¸ð¸¥´Ù. ³»¿ëÀÌ Ã¤¿öÁú
- ¶§±îÁö ¿©±â¿¡ ÇØ´äÀÌ ¾ø´Ù¸é <a
- href="http://httpd.apache.org/docs/misc/FAQ.html">¾ÆÆÄÄ¡
- 1.3 FAQ</a>µµ Âü°íÇ϶ó.</p>
-</summary>
-
-&categories;
-
-</faq>
-
diff --git a/docs/manual/faq/all_in_one.xml.meta b/docs/manual/faq/all_in_one.xml.meta
deleted file mode 100644
index 5905b7e7b5..0000000000
--- a/docs/manual/faq/all_in_one.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>all_in_one</basename>
- <path>/faq/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/faq/categories.xml b/docs/manual/faq/categories.xml
deleted file mode 100644
index 2250baa1e9..0000000000
--- a/docs/manual/faq/categories.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<categories>
- <categoryfile>support.xml</categoryfile>
- <categoryfile>error.xml</categoryfile>
-</categories>
diff --git a/docs/manual/faq/categories.xml.ko b/docs/manual/faq/categories.xml.ko
deleted file mode 100644
index 9e808ecca6..0000000000
--- a/docs/manual/faq/categories.xml.ko
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<categories>
- <categoryfile>support.xml.ko</categoryfile>
- <categoryfile>error.xml.ko</categoryfile>
-</categories>
diff --git a/docs/manual/faq/error.html b/docs/manual/faq/error.html
deleted file mode 100644
index 79ef035658..0000000000
--- a/docs/manual/faq/error.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: error.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: error.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/faq/error.html.en b/docs/manual/faq/error.html.en
deleted file mode 100644
index a7a23fd7fc..0000000000
--- a/docs/manual/faq/error.html.en
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Error Messages - Frequently Asked Questions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div id="preamble"><h1>Error Messages - Frequently Asked Questions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/faq/error.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/error.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="error" id="error">Error Messages</a></h2>
- <ul>
- <li><a href="#error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></li>
- <li><a href="#error.acceptex">AcceptEx failed</a></li>
- <li><a href="#error.scriptheaders">Premature end of script
- headers</a></li>
- </ul>
-
- <h3><a name="error.sendfile" id="error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></h3>
-
- <p>Apache uses the <code>sendfile</code> syscall on platforms
- where it is available in order to speed sending of responses.
- Unfortunately, on some systems, Apache will detect the presence of
- <code>sendfile</code> at compile-time, even when it does not work
- properly. This happens most frequently when using network or
- other non-standard file-system.</p>
-
- <p>Symptoms of this problem include the above message in the error
- log and zero-length responses to non-zero-sized files. The
- problem generally occurs only for static files, since dynamic
- content usually does not make use of <code>sendfile</code>.</p>
-
- <p>To fix this problem, simply use the <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code> directive to disable
- <code>sendfile</code> for all or part of your server. Also see
- the <code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code>, which can
- help with similar problems.</p>
-
-
-
- <h3><a name="error.acceptex" id="error.acceptex">AcceptEx Failed</a></h3>
-
- <p>If you get error messages related to the <code>AcceptEx</code> syscall
- on win32, see the <code class="directive"><a href="../mod/mpm_winnt.html#win32disableacceptex">Win32DisableAcceptEx</a></code>
- directive.</p>
-
-
-
- <h3><a name="error.scriptheaders" id="error.scriptheaders">Premature end of script
- headers</a></h3>
-
- <p>Most problems with CGI scripts result in this message written in the
- error log together with an <code>Internal Server Error</code> delivered
- to the browser. A guide to helping debug this type of problem is
- available in the <a href="../howto/cgi.html#troubleshoot">CGI
- tutorial</a>.</p>
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/faq/error.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/error.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/error.html.ko.euc-kr b/docs/manual/faq/error.html.ko.euc-kr
deleted file mode 100644
index 4ee0ca375d..0000000000
--- a/docs/manual/faq/error.html.ko.euc-kr
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¿À·ù¹® - ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ) - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div id="preamble"><h1>¿À·ù¹® - ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/error.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/error.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="error" id="error">¿À·ù¹®</a></h2>
- <ul>
- <li><a href="#error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></li>
- <li><a href="#error.acceptex">AcceptEx failed</a></li>
- <li><a href="#error.scriptheaders">Premature end of script
- headers</a></li>
- </ul>
-
- <h3><a name="error.sendfile" id="error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></h3>
-
- <p>Ç÷¡ÆûÀÌ <code>sendfile</code> ½Ã½ºÅÛÈ£ÃâÀ» Áö¿øÇÑ´Ù¸é,
- ¾ÆÆÄÄ¡´Â ÀÀ´äÀÇ ¼Óµµ¸¦ ºü¸£°ÔÇϱâÀ§ÇØ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù.
- ºÒÇàÈ÷µµ ¾î¶² ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡´Â ÄÄÆÄÀÏÇÒ¶§
- <code>sendfile</code>ÀÌ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Âµ¥µµ Á¤»óÀûÀ¸·Î
- ÀÛµ¿ÇÑ´Ù°í ¿ÀÆÇÇÑ´Ù. ÀÌ ¹®Á¦´Â ³×Æ®¿÷ ÆÄÀϽýºÅÛÀ̳ª ºñÇ¥ÁØ
- ÆÄÀϽýºÅÛÀ» »ç¿ëÇÒ¶§ ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <p>ÀÌ ¹®Á¦ÀÇ Áõ»óÀº ¿À·ù ·Î±×(error log)¿¡ À§ÀÇ ¹®±¸¸¦
- ±â·ÏÇϰųª Å©±â°¡ 0ÀÌ ¾Æ´Ñ ÆÄÀÏ¿¡ ´ëÇØ Å©±â°¡ 0ÀÎ ÀÀ´äÀ»
- ÇÏ´Â °æ¿ìÀÌ´Ù. µ¿ÀûÀ¸·Î ³»¿ëÀ» »ý¼ºÇÒ¶§´Â
- <code>sendfile</code>À» »ç¿ëÇÏÁö ¾Ê±â¶§¹®¿¡ ÀϹÝÀûÀ¸·Î Á¤ÀûÀÎ
- ÆÄÀÏÀ» ¿äûÇÒ¶§¸¸ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.</p>
-
- <p>¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ¼­¹ö°¡ <code>sendfile</code>À» »ç¿ëÇÏÁö
- ¾Êµµ·Ï <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ¶Ç, ÀÌ¿Í À¯»çÇÑ ¹®Á¦¿¡ ´ëÇØ <code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code>À» Âü°íÇ϶ó.</p>
-
-
-
- <h3><a name="error.acceptex" id="error.acceptex">AcceptEx Failed</a></h3>
-
- <p>win32¿¡¼­ <code>AcceptEx</code> ½Ã½ºÅÛÈ£Ãâ¿¡ ´ëÇÑ ¿À·ù¹®À»
- ³ª¿À¸é, <code class="directive"><a href="../mod/mpm_winnt.html#win32disableacceptex">Win32DisableAcceptEx</a></code>
- Áö½Ã¾î¸¦ Âü°íÇ϶ó.</p>
-
-
-
- <h3><a name="error.scriptheaders" id="error.scriptheaders">Premature end of script
- headers</a></h3>
-
- <p>º¸Åë CGI ½ºÅ©¸³Æ®¿¡ ¹®Á¦°¡ ÀÖÀ¸¸é ºê¶ó¿ìÀú¿¡°Ô <code>Internal
- Server Error</code>¸¦ º¸³»°í ¿À·ù·Î±×¿¡ ÀÌ ¹®±¸¸¦ ±â·ÏÇÑ´Ù.
- ÀÌ·± ¹®Á¦¸¦ µð¹ö±ëÇÒ¶§ <a href="../howto/cgi.html#troubleshoot">CGI ÅõÅ丮¾ó</a>ÀÌ
- µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù.</p>
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/error.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/error.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/error.xml b/docs/manual/faq/error.xml
deleted file mode 100644
index b20f38785a..0000000000
--- a/docs/manual/faq/error.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="error.xml.meta">
-<parentdocument href="./">FAQ</parentdocument>
-
-<title>Error Messages - Frequently Asked Questions</title>
-<description>What does this error message mean?</description>
-
-
-
-<section id="error"><title>Error Messages</title>
- <ul>
- <li><a href="#error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></li>
- <li><a href="#error.acceptex">AcceptEx failed</a></li>
- <li><a href="#error.scriptheaders">Premature end of script
- headers</a></li>
- </ul>
-
- <section id="error.sendfile"><title>Invalid argument:
- core_output_filter: writing data to the network</title>
-
- <p>Apache uses the <code>sendfile</code> syscall on platforms
- where it is available in order to speed sending of responses.
- Unfortunately, on some systems, Apache will detect the presence of
- <code>sendfile</code> at compile-time, even when it does not work
- properly. This happens most frequently when using network or
- other non-standard file-system.</p>
-
- <p>Symptoms of this problem include the above message in the error
- log and zero-length responses to non-zero-sized files. The
- problem generally occurs only for static files, since dynamic
- content usually does not make use of <code>sendfile</code>.</p>
-
- <p>To fix this problem, simply use the <directive
- module="core">EnableSendfile</directive> directive to disable
- <code>sendfile</code> for all or part of your server. Also see
- the <directive module="core">EnableMMAP</directive>, which can
- help with similar problems.</p>
-
- </section>
-
- <section id="error.acceptex"><title>AcceptEx Failed</title>
-
- <p>If you get error messages related to the <code>AcceptEx</code> syscall
- on win32, see the <directive module="mpm_winnt">Win32DisableAcceptEx</directive>
- directive.</p>
- </section>
-
-
- <section id="error.scriptheaders"><title>Premature end of script
- headers</title>
-
- <p>Most problems with CGI scripts result in this message written in the
- error log together with an <code>Internal Server Error</code> delivered
- to the browser. A guide to helping debug this type of problem is
- available in the <a href="../howto/cgi.html#troubleshoot">CGI
- tutorial</a>.</p>
- </section>
-
-</section>
-
-</faq>
-
diff --git a/docs/manual/faq/error.xml.ko b/docs/manual/faq/error.xml.ko
deleted file mode 100644
index 36560a15dd..0000000000
--- a/docs/manual/faq/error.xml.ko
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="error.xml.meta">
-<parentdocument href="./">FAQ</parentdocument>
-
-<title>¿À·ù¹® - ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</title>
-<description>ÀÌ ¿À·ù¹®ÀÌ ¹«½¼ ¶æÀΰ¡?</description>
-
-
-
-<section id="error"><title>¿À·ù¹®</title>
- <ul>
- <li><a href="#error.sendfile">Invalid argument:
- core_output_filter: writing data to the network</a></li>
- <li><a href="#error.acceptex">AcceptEx failed</a></li>
- <li><a href="#error.scriptheaders">Premature end of script
- headers</a></li>
- </ul>
-
- <section id="error.sendfile"><title>Invalid argument:
- core_output_filter: writing data to the network</title>
-
- <p>Ç÷¡ÆûÀÌ <code>sendfile</code> ½Ã½ºÅÛÈ£ÃâÀ» Áö¿øÇÑ´Ù¸é,
- ¾ÆÆÄÄ¡´Â ÀÀ´äÀÇ ¼Óµµ¸¦ ºü¸£°ÔÇϱâÀ§ÇØ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù.
- ºÒÇàÈ÷µµ ¾î¶² ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡´Â ÄÄÆÄÀÏÇÒ¶§
- <code>sendfile</code>ÀÌ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Âµ¥µµ Á¤»óÀûÀ¸·Î
- ÀÛµ¿ÇÑ´Ù°í ¿ÀÆÇÇÑ´Ù. ÀÌ ¹®Á¦´Â ³×Æ®¿÷ ÆÄÀϽýºÅÛÀ̳ª ºñÇ¥ÁØ
- ÆÄÀϽýºÅÛÀ» »ç¿ëÇÒ¶§ ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <p>ÀÌ ¹®Á¦ÀÇ Áõ»óÀº ¿À·ù ·Î±×(error log)¿¡ À§ÀÇ ¹®±¸¸¦
- ±â·ÏÇϰųª Å©±â°¡ 0ÀÌ ¾Æ´Ñ ÆÄÀÏ¿¡ ´ëÇØ Å©±â°¡ 0ÀÎ ÀÀ´äÀ»
- ÇÏ´Â °æ¿ìÀÌ´Ù. µ¿ÀûÀ¸·Î ³»¿ëÀ» »ý¼ºÇÒ¶§´Â
- <code>sendfile</code>À» »ç¿ëÇÏÁö ¾Ê±â¶§¹®¿¡ ÀϹÝÀûÀ¸·Î Á¤ÀûÀÎ
- ÆÄÀÏÀ» ¿äûÇÒ¶§¸¸ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.</p>
-
- <p>¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é ¼­¹ö°¡ <code>sendfile</code>À» »ç¿ëÇÏÁö
- ¾Êµµ·Ï <directive module="core">EnableSendfile</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù. ¶Ç, ÀÌ¿Í À¯»çÇÑ ¹®Á¦¿¡ ´ëÇØ <directive
- module="core">EnableMMAP</directive>À» Âü°íÇ϶ó.</p>
-
- </section>
-
- <section id="error.acceptex"><title>AcceptEx Failed</title>
-
- <p>win32¿¡¼­ <code>AcceptEx</code> ½Ã½ºÅÛÈ£Ãâ¿¡ ´ëÇÑ ¿À·ù¹®À»
- ³ª¿À¸é, <directive module="mpm_winnt">Win32DisableAcceptEx</directive>
- Áö½Ã¾î¸¦ Âü°íÇ϶ó.</p>
- </section>
-
-
- <section id="error.scriptheaders"><title>Premature end of script
- headers</title>
-
- <p>º¸Åë CGI ½ºÅ©¸³Æ®¿¡ ¹®Á¦°¡ ÀÖÀ¸¸é ºê¶ó¿ìÀú¿¡°Ô <code>Internal
- Server Error</code>¸¦ º¸³»°í ¿À·ù·Î±×¿¡ ÀÌ ¹®±¸¸¦ ±â·ÏÇÑ´Ù.
- ÀÌ·± ¹®Á¦¸¦ µð¹ö±ëÇÒ¶§ <a
- href="../howto/cgi.html#troubleshoot">CGI ÅõÅ丮¾ó</a>ÀÌ
- µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù.</p>
- </section>
-
-</section>
-
-</faq>
-
diff --git a/docs/manual/faq/error.xml.meta b/docs/manual/faq/error.xml.meta
deleted file mode 100644
index 109615c861..0000000000
--- a/docs/manual/faq/error.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>error</basename>
- <path>/faq/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/faq/index.html b/docs/manual/faq/index.html
deleted file mode 100644
index 5b7bb86fb2..0000000000
--- a/docs/manual/faq/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/faq/index.html.en b/docs/manual/faq/index.html.en
deleted file mode 100644
index 82040d3927..0000000000
--- a/docs/manual/faq/index.html.en
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Frequently Asked Questions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Frequently Asked Questions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/faq/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The latest version of this FAQ is always available from the
- main Apache web site, at &lt;<a href="http://httpd.apache.org/docs-2.1/faq/">http://httpd.apache.org/docs-2.1/faq/</a>&gt;. In addition, you can view
- this FAQ <a href="all_in_one.html">all in one page</a> for easy searching
- and printing.</p>
-
- <p>Since Apache 2.0 is quite new, we don't yet know what the
- <em>Frequently Asked Questions</em> will be. While this section fills up,
- you should also consult the <a href="http://httpd.apache.org/docs/misc/FAQ.html">Apache 1.3 FAQ</a> to see
- if your question is answered there.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a id="topics" name="topics">Topics</a></h2>
-<dl><dt><a href="support.html">Support</a></dt><dd>What do I do when I have problems?</dd>
-<dt><a href="error.html">Error Messages</a></dt><dd>What does this error message mean?</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/faq/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/index.html.ko.euc-kr b/docs/manual/faq/index.html.ko.euc-kr
deleted file mode 100644
index c4d86d1d80..0000000000
--- a/docs/manual/faq/index.html.ko.euc-kr
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ) - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>FAQ ÃÖ½ÅÆÇÀº ¾ÆÆÄÄ¡ À¥»çÀÌÆ® &lt;<a href="http://httpd.apache.org/docs-2.1/faq/">http://httpd.apache.org/docs-2.1/faq/</a>&gt;¿¡¼­ º¼ ¼ö
- ÀÖ´Ù. ¶Ç, °Ë»öÇÏ°í Ãâ·ÂÇϱâ ÆíÇÏ°Ô FAQ¸¦ <a href="all_in_one.html">ÇÑ ÆäÀÌÁö·Î</a> º¼ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 2.0ÀÌ ³ª¿ÂÁö ¾ó¸¶ ¾ÈµÇ¼­ ¿ì¸®´Â ¾ÆÁ÷ <em>ÀÚÁÖ
- ¹°¾îº¸´Â Áú¹® (FAQ)</em>ÀÌ ¹«¾ùÀÎÁö ¸ð¸¥´Ù. ³»¿ëÀÌ Ã¤¿öÁú
- ¶§±îÁö ¿©±â¿¡ ÇØ´äÀÌ ¾ø´Ù¸é <a href="http://httpd.apache.org/docs/misc/FAQ.html">¾ÆÆÄÄ¡
- 1.3 FAQ</a>µµ Âü°íÇ϶ó.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a id="topics" name="topics">ÁÖÁ¦</a></h2>
-<dl><dt><a href="support.html">Áö¿ø</a></dt><dd>¹®Á¦°¡ »ý±â¸é ¾î¶»°Ô ÇØ°áÇϳª?</dd>
-<dt><a href="error.html">¿À·ù¹®</a></dt><dd>ÀÌ ¿À·ù¹®ÀÌ ¹«½¼ ¶æÀΰ¡?</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/index.xml b/docs/manual/faq/index.xml
deleted file mode 100644
index 67d8dc29a8..0000000000
--- a/docs/manual/faq/index.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd" [
- <!ENTITY categories SYSTEM "categories.xml">
-]>
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="index.xml.meta">
-<parentdocument href="../" />
-
-<title>Frequently Asked Questions</title>
-
-<summary>
- <p>The latest version of this FAQ is always available from the
- main Apache web site, at &lt;<a href="http://httpd.apache.org/docs-2.1/faq/"
- >http://httpd.apache.org/docs-2.1/faq/</a>&gt;. In addition, you can view
- this FAQ <a href="all_in_one.html">all in one page</a> for easy searching
- and printing.</p>
-
- <p>Since Apache 2.0 is quite new, we don't yet know what the
- <em>Frequently Asked Questions</em> will be. While this section fills up,
- you should also consult the <a
- href="http://httpd.apache.org/docs/misc/FAQ.html">Apache 1.3 FAQ</a> to see
- if your question is answered there.</p>
-</summary>
-
-&categories;
-
-</faq>
-
diff --git a/docs/manual/faq/index.xml.ko b/docs/manual/faq/index.xml.ko
deleted file mode 100644
index af17a1aab7..0000000000
--- a/docs/manual/faq/index.xml.ko
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd" [
- <!ENTITY categories SYSTEM "categories.xml.ko">
-]>
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="index.xml.meta">
-<parentdocument href="../" />
-
-<title>ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</title>
-
-<summary>
- <p>FAQ ÃÖ½ÅÆÇÀº ¾ÆÆÄÄ¡ À¥»çÀÌÆ® &lt;<a
- href="http://httpd.apache.org/docs-2.1/faq/"
- >http://httpd.apache.org/docs-2.1/faq/</a>&gt;¿¡¼­ º¼ ¼ö
- ÀÖ´Ù. ¶Ç, °Ë»öÇÏ°í Ãâ·ÂÇϱâ ÆíÇÏ°Ô FAQ¸¦ <a
- href="all_in_one.html">ÇÑ ÆäÀÌÁö·Î</a> º¼ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 2.0ÀÌ ³ª¿ÂÁö ¾ó¸¶ ¾ÈµÇ¼­ ¿ì¸®´Â ¾ÆÁ÷ <em>ÀÚÁÖ
- ¹°¾îº¸´Â Áú¹® (FAQ)</em>ÀÌ ¹«¾ùÀÎÁö ¸ð¸¥´Ù. ³»¿ëÀÌ Ã¤¿öÁú
- ¶§±îÁö ¿©±â¿¡ ÇØ´äÀÌ ¾ø´Ù¸é <a
- href="http://httpd.apache.org/docs/misc/FAQ.html">¾ÆÆÄÄ¡
- 1.3 FAQ</a>µµ Âü°íÇ϶ó.</p>
-</summary>
-
-&categories;
-
-</faq>
-
diff --git a/docs/manual/faq/index.xml.meta b/docs/manual/faq/index.xml.meta
deleted file mode 100644
index 7f2510a95e..0000000000
--- a/docs/manual/faq/index.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/faq/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/faq/support.html b/docs/manual/faq/support.html
deleted file mode 100644
index f50db7d58e..0000000000
--- a/docs/manual/faq/support.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: support.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: support.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/faq/support.html.en b/docs/manual/faq/support.html.en
deleted file mode 100644
index 548a08db01..0000000000
--- a/docs/manual/faq/support.html.en
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Support - Frequently Asked Questions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div id="preamble"><h1>Support - Frequently Asked Questions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/faq/support.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/support.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">Support</a></h2>
- <ul>
- <li><a href="#support.what2do">"Why can't I ...? Why won't ... work?" What
- to do in case of problems</a></li>
-
- <li><a href="#support.support">Whom do I contact for support?</a></li>
- </ul>
-
- <h3><a name="support.what2do" id="support.what2do">"Why can't I ...? Why won't ... work?" What to do in case of
- problems</a></h3>
-
-
- <p>If you are having trouble with your Apache server software, you should
- take the following steps:</p>
-
- <dl>
- <dt>Check the errorlog!</dt>
- <dd>Apache tries to be helpful when it encounters a problem. In many
- cases, it will provide some details by writing one or messages to the
- server error log. Sometimes this is enough for you to diagnose &amp; fix
- the problem yourself (such as file permissions or the like). The default
- location of the error log is
- <code>/usr/local/apache2/logs/error_log</code>, but see the <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> directive in your config files for the
- location on your server.</dd>
-
- <dt>Check the <a href="http://httpd.apache.org/docs-2.1/faq/">FAQ</a>!</dt>
- <dd>The latest version of the Apache Frequently-Asked Questions list can
- always be found at the main Apache web site.</dd>
-
- <dt>Check the Apache bug database</dt>
- <dd>Most problems that get reported to The Apache Group are recorded in
- the <a href="http://httpd.apache.org/bug_report.html">bug database</a>.
- <strong>Please</strong> check the existing reports, open
- <strong>and</strong> closed, before adding one. If you find that your
- issue has already been reported, please <em>don't</em> add a "me, too"
- report. If the original report isn't closed yet, we suggest that you
- check it periodically. You might also consider contacting the original
- submitter, because there may be an email exchange going on about the
- issue that isn't getting recorded in the database.</dd>
-
- <dt><a id="support.what2do.user-support" name="support.what2do.user-support">Ask in a user support forum</a></dt>
- <dd><p>Apache has an active community of users who are willing to share
- their knowledge. Participating in this community is usually the best and
- fastest way to get answers to your questions and problems.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">Users
- mailing list</a></p>
-
- <p>USENET newsgroups:</p>
-
- <ul>
- <li>comp.infosystems.www.servers.unix
- [<a href="news:comp.infosystems.www.servers.unix">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
- </li>
-
- <li>comp.infosystems.www.servers.ms-windows
- [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
- </li>
-
- <li>comp.infosystems.www.authoring.cgi
- [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
- </li>
- </ul></dd>
-
- <dt>If all else fails, report the problem in the bug database</dt>
- <dd><p>If you've gone through those steps above that are appropriate and
- have obtained no relief, then please <em>do</em> let the httpd developers
- know about the problem by <a href="http://httpd.apache.org/bug_report.html">logging a bug
- report</a>.</p>
-
- <p>If your problem involves the server crashing and generating a core
- dump, please include a backtrace (if possible). As an example,</p>
-
- <div class="example"><p><code>
- # cd <var>ServerRoot</var><br />
- # dbx <var>httpd</var> <var>core</var><br />
- (dbx) where
- </code></p></div>
-
- <p>(Substitute the appropriate locations for your <var>ServerRoot</var>
- and your <var>httpd</var> and <var>core</var> files. You may have to use
- <code>gdb</code> instead of <code>dbx</code>.)</p>
- </dd>
- </dl>
-
-
- <h3><a name="support.support" id="support.support">Whom do I contact for support?</a></h3>
- <p>With several million users and fewer than forty volunteer developers,
- we cannot provide personal support for Apache. For free support, we
- suggest participating in a <a href="#support.what2do.user-support">user forum</a>.</p>
-
- <p>Professional, commercial support for Apache is available from
- <a href="http://www.apache.org/info/support.cgi">a number of
- companies</a>.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/faq/support.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/support.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/support.html.ko.euc-kr b/docs/manual/faq/support.html.ko.euc-kr
deleted file mode 100644
index aafbba1e7a..0000000000
--- a/docs/manual/faq/support.html.ko.euc-kr
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Áö¿ø - ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ) - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div id="preamble"><h1>Áö¿ø - ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/support.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/support.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">Áö¿ø</a></h2>
- <ul>
- <li><a href="#support.what2do">"¿Ö ... ¾ÈµÇ³ª? ¿Ö ... µ¿ÀÛÇÏÁö
- ¾Ê´Â°¡?" ¹®Á¦°¡ »ý±â¸é ÇÒÀÏ</a></li>
-
- <li><a href="#support.support">µµ¿òÀ» ¾òÀ¸·Á¸é ´©±¸¿¡°Ô
- ¿¬¶ôÇϳª?</a></li>
- </ul>
-
- <h3><a name="support.what2do" id="support.what2do">"¿Ö ... ¾ÈµÇ³ª? ¿Ö ... µ¿ÀÛÇÏÁö ¾Ê´Â°¡?" ¹®Á¦°¡ »ý±â¸é
- ÇÒÀÏ</a></h3>
-
-
- <p>¾ÆÆÄÄ¡ ¼­¹ö ¼ÒÇÁÆ®¿þ¾î¿¡ ¹®Á¦°¡ »ý±â¸é ´ÙÀ½°ú °°Àº
- ´Ü°è¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt>¿À·ù ·Î±×(errorlog)¸¦ È®ÀÎÇ϶ó!</dt>
- <dd>¾ÆÆÄÄ¡ ¼­¹ö´Â ¹®Á¦°¡ »ý±â¸é µµ¿òÀ» ÁÖ·Á°í ³ë·ÂÇÑ´Ù.
- ¸¹Àº °æ¿ì ¼­¹ö ¿À·ù ·Î±×¿¡ ÀÚ¼¼ÇÑ ³»¿ëÀ» ±â·ÏÇÑ´Ù.
- À̰͸¸À¸·Îµµ Á÷Á¢ (ÆÄÀϱÇÇÑ µî) ¹®Á¦¸¦ ¹ß°ßÇÏ°í °íÄ¥ ¼ö
- ÀÖ´Â °æ¿ì°¡ ¸¹´Ù. ¿À·ù ·Î±×ÀÇ ±âº» À§Ä¡´Â
- <code>/usr/local/apache2/logs/error_log</code>ÀÌÁö¸¸,
- Á¤È®ÇÑ À§Ä¡´Â ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> Áö½Ã¾î¸¦ Âü°íÇ϶ó.</dd>
-
- <dt><a href="http://httpd.apache.org/docs-2.1/faq/">FAQ</a>¸¦
- È®ÀÎÇ϶ó!</dt>
- <dd>¾ÆÆÄÄ¡ À¥»çÀÌÆ®¿¡¼­ Ç×»ó ¾ÆÆÄÄ¡ FAQ ÃÖ½ÅÆÇÀ» º¼ ¼ö
- ÀÖ´Ù.</dd>
-
- <dt>¾ÆÆÄÄ¡ ¹ö±× µ¥ÀÌÅͺ£À̽º¸¦ È®ÀÎÇ϶ó</dt>
- <dd>¾ÆÆÄÄ¡±×·ì(The Apache Group)¿¡ º¸°íµÈ ´ëºÎºÐÀÇ ¹®Á¦´Â
- <a href="http://httpd.apache.org/bug_report.html">¹ö±×
- µ¥ÀÌÅͺ£À̽º</a>¿¡ ±â·ÏµÈ´Ù. »õ·Î ¹ö±×¸¦ Ãß°¡Çϱâ Àü¿¡,
- ÀÌ¹Ì ¾Ë·ÁÁ³°Å³ª(open) ÇØ°áµÈ(closed) ¹ö±×°¡ ÀÖ´ÂÁö È®ÀÎÇϱæ
- <strong>¹Ù¶õ´Ù</strong>. ÀÌ¹Ì ¹®Á¦°¡ º¸°íµÇ¾ú´Ù¸é "³ªµµ
- ÀÌ·± ¹®Á¦°¡ ÀÖ´Ù°í" º¸°íÇÏÁö <em>¾Ê±æ</em> ¹Ù¶õ´Ù. ¾ÆÁ÷
- ÇØ°áµÇÁö ¾Ê¾Ò´Ù¸é ÁÖ±âÀûÀ¸·Î »óȲÀ» È®ÀÎÇÏ±æ ¹Ù¶õ´Ù. ¶Ç,
- µ¥ÀÌÅͺ£À̽º¿¡ ±â·ÏµÇÁö ¾Ê°í À̸ÞÀÏ ±³È¯À¸·Î ÁøÇàµÈ »çÇ×ÀÌ
- ÀÖÀ» ¼ö ÀÖÀ¸´Ï óÀ½ ¹®Á¦¸¦ º¸°íÇÑ »ç¶÷¿¡°Ô ¿¬¶ôÇغ¼ ¼öµµ
- ÀÖ´Ù.</dd>
-
- <dt><a id="support.what2do.user-support" name="support.what2do.user-support">»ç¿ëÀÚ Áö¿ø °ø°£¿¡
- ¹®ÀÇÇÑ´Ù</a></dt>
- <dd><p>¾ÆÆÄÄ¡¿¡ ´ëÇÑ Áö½ÄÀ» °øÀ¯ÇÏ±æ ¿øÇÏ´Â È°¹ßÇÑ »ç¿ëÀÚ
- °øµ¿Ã¼µéÀÌ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ·± °øµ¿Ã¼¿¡ Âü¿©ÇÏ´Â °ÍÀÌ
- ¹®Á¦ÀÇ ´äÀ» ¾ò´Â °¡Àå ÁÁ°í ºü¸¥ ¹æ¹ýÀÌ´Ù.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">»ç¿ëÀÚ
- ¸ÞÀϸµ¸®½ºÆ®</a></p>
-
- <p>USENET ´º½º±×·ì:</p>
-
- <ul>
- <li>comp.infosystems.www.servers.unix
- [<a href="news:comp.infosystems.www.servers.unix">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
- </li>
-
- <li>comp.infosystems.www.servers.ms-windows
- [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
- </li>
-
- <li>comp.infosystems.www.authoring.cgi
- [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
- </li>
- </ul></dd>
-
- <dt>À§ÀÇ ¹æ¹ýÀÌ ¸ðµÎ ½ÇÆÐÇÏ¸é ¹ö±× µ¥ÀÌÅͺ£À̽º¿¡ ¹®Á¦¸¦
- º¸°íÇÑ´Ù</dt>
- <dd><p>À§ÀÇ ´Ü°è¸¦ ¸ðµÎ ½ÃµµÇÏ°íµµ ÇØ°áÃ¥ÀÌ ¾ø´Ù¸é, <a href="http://httpd.apache.org/bug_report.html">¹ö±×¸¦
- º¸°íÇÏ¿©</a> À¥¼­¹ö °³¹ßÀڵ鿡°Ô ¹®Á¦¸¦ <em>¾Ë¸®±æ</em>
- ¹Ù¶õ´Ù.</p>
-
- <p>core dump¸¦ ¸¸µé¸ç ¼­¹ö°¡ Á×´Â °æ¿ì¶ó¸é (°¡´ÉÇϸé)
- backtrace<span class="transnote">(<em>¿ªÁÖ;</em> ¹®Á¦°¡ ½ÇÇàÆÄÀÏÀÇ Á¤È®È÷ ¾î¶² ÁöÁ¡¿¡¼­
- ¹ß»ýÇÏ¿´°í, ÇÁ·Î±×·¥ÀÌ ±× ÁöÁ¡±îÁö ¾î¶² °æ·Î·Î ½ÇÇàµÇ¾ú´ÂÁö¸¦
- ¾Ë·ÁÁÖ´Â Á¤º¸)</span>¸¦ Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <div class="example"><p><code>
- # cd <var>ServerRoot</var><br />
- # dbx <var>httpd</var> <var>core</var><br />
- (dbx) where
- </code></p></div>
-
- <p>(<var>ServerRoot</var>, <var>httpd</var>, <var>core</var>
- ÆÄÀÏÀÇ ½ÇÁ¦ À§Ä¡¸¦ ´ë½Å »ç¿ëÇ϶ó. <code>dbx</code> ´ë½Å
- <code>gdb</code>¸¦ »ç¿ëÇØ¾ß ÇÒ ¼öµµ ÀÖ´Ù.)</p>
- </dd>
- </dl>
-
-
- <h3><a name="support.support" id="support.support">µµ¿òÀ» ¾òÀ¸·Á¸é ´©±¸¿¡°Ô
- ¿¬¶ôÇϳª?</a></h3>
- <p>40¸í °¡·®ÀÇ ÀÚ¹ßÀûÀ¸·Î Âü¿©ÇÑ °³¹ßÀÚ¸¸À¸·Î´Â ¼ö¹é¸¸ÀÇ
- »ç¿ëÀÚ¿¡°Ô ¾ÆÆÄÄ¡¿¡ ´ëÇØ ÀÏÀÏÀÌ Áö¿øÇÒ ¼ö ¾ø´Ù. ¹«·á Áö¿øÀ»
- ¾òÀ¸·Á¸é <a href="#support.what2do.user-support">»ç¿ëÀÚ
- °ø°£</a>¿¡ Âü¿©ÇÏ±æ ±ÇÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡ ´ëÇÑ Á÷¾÷ÀûÀÎ À¯·á Áö¿øÀº <a href="http://www.apache.org/info/support.cgi">¿©·¯
- ȸ»ç</a>¿¡¼­ Á¦°øÇÑ´Ù.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/faq/support.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/faq/support.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/faq/support.xml b/docs/manual/faq/support.xml
deleted file mode 100644
index a4dbfb4a2b..0000000000
--- a/docs/manual/faq/support.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="support.xml.meta">
-<parentdocument href="./">FAQ</parentdocument>
-
-<title>Support - Frequently Asked Questions</title>
-<description>What do I do when I have problems?</description>
-
-<section id="support"><title>Support</title>
- <ul>
- <li><a href="#support.what2do">"Why can't I ...? Why won't ... work?" What
- to do in case of problems</a></li>
-
- <li><a href="#support.support">Whom do I contact for support?</a></li>
- </ul>
-
- <section id="support.what2do">
- <title>"Why can't I ...? Why won't ... work?" What to do in case of
- problems</title>
-
- <p>If you are having trouble with your Apache server software, you should
- take the following steps:</p>
-
- <dl>
- <dt>Check the errorlog!</dt>
- <dd>Apache tries to be helpful when it encounters a problem. In many
- cases, it will provide some details by writing one or messages to the
- server error log. Sometimes this is enough for you to diagnose &amp; fix
- the problem yourself (such as file permissions or the like). The default
- location of the error log is
- <code>/usr/local/apache2/logs/error_log</code>, but see the <directive
- module="core">ErrorLog</directive> directive in your config files for the
- location on your server.</dd>
-
- <dt>Check the <a
- href="http://httpd.apache.org/docs-2.1/faq/">FAQ</a>!</dt>
- <dd>The latest version of the Apache Frequently-Asked Questions list can
- always be found at the main Apache web site.</dd>
-
- <dt>Check the Apache bug database</dt>
- <dd>Most problems that get reported to The Apache Group are recorded in
- the <a href="http://httpd.apache.org/bug_report.html">bug database</a>.
- <strong>Please</strong> check the existing reports, open
- <strong>and</strong> closed, before adding one. If you find that your
- issue has already been reported, please <em>don't</em> add a "me, too"
- report. If the original report isn't closed yet, we suggest that you
- check it periodically. You might also consider contacting the original
- submitter, because there may be an email exchange going on about the
- issue that isn't getting recorded in the database.</dd>
-
- <dt><a id="support.what2do.user-support"
- name="support.what2do.user-support">Ask in a user support forum</a></dt>
- <dd><p>Apache has an active community of users who are willing to share
- their knowledge. Participating in this community is usually the best and
- fastest way to get answers to your questions and problems.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">Users
- mailing list</a></p>
-
- <p>USENET newsgroups:</p>
-
- <ul>
- <li>comp.infosystems.www.servers.unix
- [<a href="news:comp.infosystems.www.servers.unix">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
- </li>
-
- <li>comp.infosystems.www.servers.ms-windows
- [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
- </li>
-
- <li>comp.infosystems.www.authoring.cgi
- [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
- </li>
- </ul></dd>
-
- <dt>If all else fails, report the problem in the bug database</dt>
- <dd><p>If you've gone through those steps above that are appropriate and
- have obtained no relief, then please <em>do</em> let the httpd developers
- know about the problem by <a
- href="http://httpd.apache.org/bug_report.html">logging a bug
- report</a>.</p>
-
- <p>If your problem involves the server crashing and generating a core
- dump, please include a backtrace (if possible). As an example,</p>
-
- <example>
- # cd <var>ServerRoot</var><br />
- # dbx <var>httpd</var> <var>core</var><br />
- (dbx) where
- </example>
-
- <p>(Substitute the appropriate locations for your <var>ServerRoot</var>
- and your <var>httpd</var> and <var>core</var> files. You may have to use
- <code>gdb</code> instead of <code>dbx</code>.)</p>
- </dd>
- </dl>
- </section>
-
- <section id="support.support"><title>Whom do I contact for support?</title>
- <p>With several million users and fewer than forty volunteer developers,
- we cannot provide personal support for Apache. For free support, we
- suggest participating in a <a href="#support.what2do.user-support"
- >user forum</a>.</p>
-
- <p>Professional, commercial support for Apache is available from
- <a href="http://www.apache.org/info/support.cgi">a number of
- companies</a>.</p>
- </section>
-</section>
-
-</faq>
-
diff --git a/docs/manual/faq/support.xml.ko b/docs/manual/faq/support.xml.ko
deleted file mode 100644
index 6606fb3ee4..0000000000
--- a/docs/manual/faq/support.xml.ko
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE faq SYSTEM "../style/faq.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<faq metafile="support.xml.meta">
-<parentdocument href="./">FAQ</parentdocument>
-
-<title>Áö¿ø - ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</title>
-<description>¹®Á¦°¡ »ý±â¸é ¾î¶»°Ô ÇØ°áÇϳª?</description>
-
-<section id="support"><title>Áö¿ø</title>
- <ul>
- <li><a href="#support.what2do">"¿Ö ... ¾ÈµÇ³ª? ¿Ö ... µ¿ÀÛÇÏÁö
- ¾Ê´Â°¡?" ¹®Á¦°¡ »ý±â¸é ÇÒÀÏ</a></li>
-
- <li><a href="#support.support">µµ¿òÀ» ¾òÀ¸·Á¸é ´©±¸¿¡°Ô
- ¿¬¶ôÇϳª?</a></li>
- </ul>
-
- <section id="support.what2do">
- <title>"¿Ö ... ¾ÈµÇ³ª? ¿Ö ... µ¿ÀÛÇÏÁö ¾Ê´Â°¡?" ¹®Á¦°¡ »ý±â¸é
- ÇÒÀÏ</title>
-
- <p>¾ÆÆÄÄ¡ ¼­¹ö ¼ÒÇÁÆ®¿þ¾î¿¡ ¹®Á¦°¡ »ý±â¸é ´ÙÀ½°ú °°Àº
- ´Ü°è¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt>¿À·ù ·Î±×(errorlog)¸¦ È®ÀÎÇ϶ó!</dt>
- <dd>¾ÆÆÄÄ¡ ¼­¹ö´Â ¹®Á¦°¡ »ý±â¸é µµ¿òÀ» ÁÖ·Á°í ³ë·ÂÇÑ´Ù.
- ¸¹Àº °æ¿ì ¼­¹ö ¿À·ù ·Î±×¿¡ ÀÚ¼¼ÇÑ ³»¿ëÀ» ±â·ÏÇÑ´Ù.
- À̰͸¸À¸·Îµµ Á÷Á¢ (ÆÄÀϱÇÇÑ µî) ¹®Á¦¸¦ ¹ß°ßÇÏ°í °íÄ¥ ¼ö
- ÀÖ´Â °æ¿ì°¡ ¸¹´Ù. ¿À·ù ·Î±×ÀÇ ±âº» À§Ä¡´Â
- <code>/usr/local/apache2/logs/error_log</code>ÀÌÁö¸¸,
- Á¤È®ÇÑ À§Ä¡´Â ¼³Á¤ÆÄÀÏÀÇ <directive
- module="core">ErrorLog</directive> Áö½Ã¾î¸¦ Âü°íÇ϶ó.</dd>
-
- <dt><a
- href="http://httpd.apache.org/docs-2.1/faq/">FAQ</a>¸¦
- È®ÀÎÇ϶ó!</dt>
- <dd>¾ÆÆÄÄ¡ À¥»çÀÌÆ®¿¡¼­ Ç×»ó ¾ÆÆÄÄ¡ FAQ ÃÖ½ÅÆÇÀ» º¼ ¼ö
- ÀÖ´Ù.</dd>
-
- <dt>¾ÆÆÄÄ¡ ¹ö±× µ¥ÀÌÅͺ£À̽º¸¦ È®ÀÎÇ϶ó</dt>
- <dd>¾ÆÆÄÄ¡±×·ì(The Apache Group)¿¡ º¸°íµÈ ´ëºÎºÐÀÇ ¹®Á¦´Â
- <a href="http://httpd.apache.org/bug_report.html">¹ö±×
- µ¥ÀÌÅͺ£À̽º</a>¿¡ ±â·ÏµÈ´Ù. »õ·Î ¹ö±×¸¦ Ãß°¡Çϱâ Àü¿¡,
- ÀÌ¹Ì ¾Ë·ÁÁ³°Å³ª(open) ÇØ°áµÈ(closed) ¹ö±×°¡ ÀÖ´ÂÁö È®ÀÎÇϱæ
- <strong>¹Ù¶õ´Ù</strong>. ÀÌ¹Ì ¹®Á¦°¡ º¸°íµÇ¾ú´Ù¸é "³ªµµ
- ÀÌ·± ¹®Á¦°¡ ÀÖ´Ù°í" º¸°íÇÏÁö <em>¾Ê±æ</em> ¹Ù¶õ´Ù. ¾ÆÁ÷
- ÇØ°áµÇÁö ¾Ê¾Ò´Ù¸é ÁÖ±âÀûÀ¸·Î »óȲÀ» È®ÀÎÇÏ±æ ¹Ù¶õ´Ù. ¶Ç,
- µ¥ÀÌÅͺ£À̽º¿¡ ±â·ÏµÇÁö ¾Ê°í À̸ÞÀÏ ±³È¯À¸·Î ÁøÇàµÈ »çÇ×ÀÌ
- ÀÖÀ» ¼ö ÀÖÀ¸´Ï óÀ½ ¹®Á¦¸¦ º¸°íÇÑ »ç¶÷¿¡°Ô ¿¬¶ôÇغ¼ ¼öµµ
- ÀÖ´Ù.</dd>
-
- <dt><a id="support.what2do.user-support"
- name="support.what2do.user-support">»ç¿ëÀÚ Áö¿ø °ø°£¿¡
- ¹®ÀÇÇÑ´Ù</a></dt>
- <dd><p>¾ÆÆÄÄ¡¿¡ ´ëÇÑ Áö½ÄÀ» °øÀ¯ÇÏ±æ ¿øÇÏ´Â È°¹ßÇÑ »ç¿ëÀÚ
- °øµ¿Ã¼µéÀÌ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ·± °øµ¿Ã¼¿¡ Âü¿©ÇÏ´Â °ÍÀÌ
- ¹®Á¦ÀÇ ´äÀ» ¾ò´Â °¡Àå ÁÁ°í ºü¸¥ ¹æ¹ýÀÌ´Ù.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">»ç¿ëÀÚ
- ¸ÞÀϸµ¸®½ºÆ®</a></p>
-
- <p>USENET ´º½º±×·ì:</p>
-
- <ul>
- <li>comp.infosystems.www.servers.unix
- [<a href="news:comp.infosystems.www.servers.unix">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
- </li>
-
- <li>comp.infosystems.www.servers.ms-windows
- [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
- </li>
-
- <li>comp.infosystems.www.authoring.cgi
- [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
- [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
- </li>
- </ul></dd>
-
- <dt>À§ÀÇ ¹æ¹ýÀÌ ¸ðµÎ ½ÇÆÐÇÏ¸é ¹ö±× µ¥ÀÌÅͺ£À̽º¿¡ ¹®Á¦¸¦
- º¸°íÇÑ´Ù</dt>
- <dd><p>À§ÀÇ ´Ü°è¸¦ ¸ðµÎ ½ÃµµÇÏ°íµµ ÇØ°áÃ¥ÀÌ ¾ø´Ù¸é, <a
- href="http://httpd.apache.org/bug_report.html">¹ö±×¸¦
- º¸°íÇÏ¿©</a> À¥¼­¹ö °³¹ßÀڵ鿡°Ô ¹®Á¦¸¦ <em>¾Ë¸®±æ</em>
- ¹Ù¶õ´Ù.</p>
-
- <p>core dump¸¦ ¸¸µé¸ç ¼­¹ö°¡ Á×´Â °æ¿ì¶ó¸é (°¡´ÉÇϸé)
- backtrace<transnote>¹®Á¦°¡ ½ÇÇàÆÄÀÏÀÇ Á¤È®È÷ ¾î¶² ÁöÁ¡¿¡¼­
- ¹ß»ýÇÏ¿´°í, ÇÁ·Î±×·¥ÀÌ ±× ÁöÁ¡±îÁö ¾î¶² °æ·Î·Î ½ÇÇàµÇ¾ú´ÂÁö¸¦
- ¾Ë·ÁÁÖ´Â Á¤º¸</transnote>¸¦ Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <example>
- # cd <var>ServerRoot</var><br />
- # dbx <var>httpd</var> <var>core</var><br />
- (dbx) where
- </example>
-
- <p>(<var>ServerRoot</var>, <var>httpd</var>, <var>core</var>
- ÆÄÀÏÀÇ ½ÇÁ¦ À§Ä¡¸¦ ´ë½Å »ç¿ëÇ϶ó. <code>dbx</code> ´ë½Å
- <code>gdb</code>¸¦ »ç¿ëÇØ¾ß ÇÒ ¼öµµ ÀÖ´Ù.)</p>
- </dd>
- </dl>
- </section>
-
- <section id="support.support"><title>µµ¿òÀ» ¾òÀ¸·Á¸é ´©±¸¿¡°Ô
- ¿¬¶ôÇϳª?</title>
- <p>40¸í °¡·®ÀÇ ÀÚ¹ßÀûÀ¸·Î Âü¿©ÇÑ °³¹ßÀÚ¸¸À¸·Î´Â ¼ö¹é¸¸ÀÇ
- »ç¿ëÀÚ¿¡°Ô ¾ÆÆÄÄ¡¿¡ ´ëÇØ ÀÏÀÏÀÌ Áö¿øÇÒ ¼ö ¾ø´Ù. ¹«·á Áö¿øÀ»
- ¾òÀ¸·Á¸é <a href="#support.what2do.user-support">»ç¿ëÀÚ
- °ø°£</a>¿¡ Âü¿©ÇÏ±æ ±ÇÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡ ´ëÇÑ Á÷¾÷ÀûÀÎ À¯·á Áö¿øÀº <a
- href="http://www.apache.org/info/support.cgi">¿©·¯
- ȸ»ç</a>¿¡¼­ Á¦°øÇÑ´Ù.</p>
- </section>
-</section>
-
-</faq>
-
diff --git a/docs/manual/faq/support.xml.meta b/docs/manual/faq/support.xml.meta
deleted file mode 100644
index b0e730bf94..0000000000
--- a/docs/manual/faq/support.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>support</basename>
- <path>/faq/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/filter.html b/docs/manual/filter.html
deleted file mode 100644
index 98b9e5c44a..0000000000
--- a/docs/manual/filter.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: filter.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: filter.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: filter.html.fr
-Content-Language: fr
-Content-type: text/html; charset=ISO-8859-1
-
-URI: filter.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: filter.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/filter.html.en b/docs/manual/filter.html.en
deleted file mode 100644
index b28de1c319..0000000000
--- a/docs/manual/filter.html.en
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Filters - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Filters</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/filter.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document describes the use of filters in Apache.</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="filters" id="filters">Filters</a></h2>
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></code></li><li><code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code></li><li><code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code></li></ul></td></tr></table>
-
- <p>A <em>filter</em> is a process that is applied to data that
- is sent or received by the server. Data sent by clients to the
- server is processed by <em>input filters</em> while data sent
- by the server to the client is processed by <em>output
- filters</em>. Multiple filters can be applied to the data, and
- the order of the filters can be explicitly specified.</p>
-
- <p>Filters are used internally by Apache to perform functions such
- as chunking and byte-range request handling. In addition, modules
- can provide filters that are selectable using run-time
- configuration directives. The set of filters that apply to data
- can be manipulated with the
- <code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code>,
- <code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code>, and
- <code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code>
- directives.</p>
-
- <p>The following user-selectable filters are currently provided
- with the Apache HTTP Server distribution.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd>Server-Side Includes processing by <code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dd>
- <dt>DEFLATE</dt>
- <dd>Compress output before sending it to the client using
- <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>
- </dd>
- </dl>
-
- <p>In addition, the module <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> allows
- for external programs to be defined as filters.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/filter.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/filter.html.es b/docs/manual/filter.html.es
deleted file mode 100644
index 0453c13b77..0000000000
--- a/docs/manual/filter.html.es
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Filtros - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Filtros</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Este documento describe cómo usar filtros en Apache.</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="filters" id="filters">Filtros</a></h2>
-
- <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></code></li><li><code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code></li><li><code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code></li></ul></td></tr></table>
-
- <p>Un <em>filtro</em> es un proceso que se aplica a los datos que
- se reciben o se envían por el servidor. Los datos enviados
- por los clientes al servidor son procesados por <em>filtros de
- entrada</em> mientras que los datos enviados por el servidor se
- procesan por los <em>filtros de salida</em>. A los datos se les
- pueden aplicar varios filtros, y el orden en que se aplica cada
- filtro puede especificarse explícitamente.</p>
-
- <p>Los filtros se usan internamente por Apache para llevar a cabo
- funciones tales como chunking y servir peticiones de
- byte-range. Además, los módulos contienen filtros que se
- pueden seleccionar usando directivas de configuración al
- iniciar el servidor. El conjunto de filtros que se aplica a los
- datos puede manipularse con las directivas <code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code>, <code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code>, <code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, <code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, <code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code>, y <code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code>.</p>
-
- <p>Actualmente, vienen con la distribución de Apache los
- siguientes filtros seleccionables por el usuario.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd>Server-Side Includes procesado por
- <code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dd>
- <dt>DEFLATE</dt>
- <dd>Comprime los datos de salida antes de enviarlos al cliente
- usando el módulo
- <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>
- </dd>
- </dl>
-
- <p>Además, el módulo <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>
- permite definir programas externos como filtros.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/filter.html.fr b/docs/manual/filter.html.fr
deleted file mode 100644
index 88bbf9ca1e..0000000000
--- a/docs/manual/filter.html.fr
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Filtres - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Filtres</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Ce document explique le fonctionnement des filtres avec Apache.</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="filters" id="filters">Filtres</a></h2>
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></code></li><li><code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code></li><li><code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code></li></ul></td></tr></table>
-
- <p>On appelle <em>filtre</em> un processus qui s'applique aux données reçues
- ou envoyées par le serveur. Les <em>filtres en entrée ("input filters")</em>
- servent à filtrer les données envoyées par les clients au serveur, tandis
- que les <em>filtres en sortie ("output filters")</em> travaillent sur les
- données envoyées par le serveur à un client. Il est possible d'appliquer
- plusieurs filtres à un flux de données, et l'ordre de ces filtres peux être
- spécifiée de façon explicite.</p>
-
- <p>Apache utilise des filtres en interne pour par exemple gérer les "grosses" requêtes
- (chunked) ou les requêtes partielles (NDT : "byte-range" : requêtes sur seulement une
- partie d'un fichier spécifiée par un pointeur de départ, et de fin).
- Certains modules permettent en plus d'utiliser des filtres
- en utilisant des directives de configuration. Les filtres sont utilisables
- au moyen des directives
- <code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code>,
- <code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code> et
- <code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code>
- .</p>
-
- <p>Les filtres listés ci-dessous sont fournis dans la distribution d'Apache, et
- peuvent être utilisés par tout administrateur.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd>Le module <code class="module"><a href="./mod/mod_include.html">mod_include</a></code> travaille au moyen de
- "Server-Side Includes"</dd>
- <dt>DEFLATE</dt>
- <dd>Le module <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> compresse les données avant leur envoi au
- client (filtre en sortie).</dd>
- </dl>
-
- <p>En outre, le module <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> permet d'utiliser des
- programes externes à Apache en tant que filtres.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/filter.html.ja.euc-jp b/docs/manual/filter.html.ja.euc-jp
deleted file mode 100644
index 3eba3c2556..0000000000
--- a/docs/manual/filter.html.ja.euc-jp
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Õ¥£¥ë¥¿ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥Õ¥£¥ë¥¿</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Apache ¤Ç¤Î¥Õ¥£¥ë¥¿¤Î»È¤¤Êý¤Ë¤Ä¤¤¤Æµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="filters" id="filters">¥Õ¥£¥ë¥¿</a></h2>
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></code></li><li><code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code></li><li><code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code></li></ul></td></tr></table>
-
- <p><em>¥Õ¥£¥ë¥¿</em> ¤È¤Ï¡¢¥µ¡¼¥Ð¤¬Á÷¼õ¿®¤·¤¿¥Ç¡¼¥¿¤Ë
- ŬÍѤµ¤ì¤ë½èÍý¥×¥í¥»¥¹¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£¥¯¥é¥¤¥¢¥ó¥È¤«¤é¥µ¡¼¥Ð¤Ë
- Á÷¤é¤ì¤¿¥Ç¡¼¥¿¤Ï <em>ÆþÎÏ¥Õ¥£¥ë¥¿</em> ¤Ë¤è¤Ã¤Æ¡¢¥µ¡¼¥Ð¤«¤é
- ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤ë¥Ç¡¼¥¿¤Ï<em>½ÐÎÏ¥Õ¥£¥ë¥¿</em>¤Ë¤è¤Ã¤Æ
- ½èÍý¤µ¤ì¤Þ¤¹¡£Ê£¿ô¤Î¥Õ¥£¥ë¥¿¤òŬÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¡¢
- ¤½¤Î½çÈÖ¤ò¸·Ì©¤Ë»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Apache ÆâÉô¤Ç¤Ï¡¢¥Á¥ã¥ó¥¯ (¥Ç¡¼¥¿¤Î¤Ö¤ÄÀÚ¤ê) ¤ò¹Ô¤Ã¤¿¤ê¡¢
- ¥Ð¥¤¥ÈÈϰϤλØÄꤵ¤ì¤¿¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤¿¤ê¤È¤¤¤Ã¤¿µ¡Ç½¤ò
- ¹Ô¤¦ºÝ¤Ë¡¢¥Õ¥£¥ë¥¿¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤Ë²Ã¤¨¤Æ¡¢
- ¼Â¹Ô»þ¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÁªÂò¤¬²Äǽ¤Ê¥Õ¥£¥ë¥¿¤ò
- ¥â¥¸¥å¡¼¥ë¤¬Ä󶡤Ǥ­¤Þ¤¹¡£
- ¥Ç¡¼¥¿¤ËŬ±þ¤µ¤ì¤ë¥Õ¥£¥ë¥¿¤Î¥»¥Ã¥È¤Ï¡¢
- <code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code>,
- <code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code>,
- <code class="directive"><a href="./mod/core.html#addinputfilter">AddInputFilter</a></code>,
- <code class="directive"><a href="./mod/core.html#addoutputfilter">AddOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀ©¸æ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¸½¹Ô¤Î Apache HTTP ¥µ¡¼¥Ð¤ÎÇÛÉۤǤϡ¢
- ¼¡¤Î¥æ¡¼¥¶ÁªÂò²Äǽ¤Ê¥Õ¥£¥ë¥¿¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd><code class="module"><a href="./mod/mod_include.html">mod_include</a></code> ¤Ç Server-Side Include ¤ò¤·¤Þ¤¹¡£</dd>
- <dt>DEFLATE</dt>
- <dd><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>
- ¤ò»È¤Ã¤Æ¡¢¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¿®¤¹¤ëÁ°¤Ë½ÐÎϤò°µ½Ì¤·¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¤Þ¤¿¡¢<code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> ¥â¥¸¥å¡¼¥ë¤Ç
- ³°Éô¥×¥í¥°¥é¥à¤ò¥Õ¥£¥ë¥¿¤È¤·¤Æ»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/filter.html.ko.euc-kr b/docs/manual/filter.html.ko.euc-kr
deleted file mode 100644
index 222f8dabec..0000000000
--- a/docs/manual/filter.html.ko.euc-kr
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÇÊÅÍ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>ÇÊÅÍ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡¿¡¼­ ÇÊÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="filters" id="filters">ÇÊÅÍ</a></h2>
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></code></li><li><code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code></li><li><code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code></li></ul></td></tr></table>
-
- <p><em>ÇÊÅÍ(filter)</em>´Â ¼­¹ö°¡ º¸³»°Å³ª ¹Þ´Â ÀÚ·á¿¡
- Àû¿ëµÇ´Â ÀÛ¾÷ÀÌ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡°Ô º¸³»´Â ÀÚ·á´Â
- <em>ÀÔ·ÂÇÊÅÍ(input filter)</em>°¡ ó¸®ÇÏ°í, ¼­¹ö°¡
- Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â ÀÚ·á´Â <em>Ãâ·ÂÇÊÅÍ(output filter)</em>°¡
- ó¸®ÇÑ´Ù. ÀÚ·á¿¡ ¿©·¯ ÇÊÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ°í, Á÷Á¢ ÇÊÅÍÀÇ
- ¼ø¼­¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â À̾î¹Þ±â(byte-range) ¿äû µîÀ» ó¸®ÇϱâÀ§ÇØ
- ³»ºÎÀûÀ¸·Î ÇÊÅ͸¦ »ç¿ëÇÑ´Ù. ¶Ç, ¼³Á¤ Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ¼±Åð¡´ÉÇÑ ÇÊÅ͸¦ Á¦°øÇÏ´Â ¸ðµâµµ ÀÖ´Ù.
- <code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code>,
- <code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code>,
- <code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code>
- Áö½Ã¾î·Î ÀڷḦ ó¸®ÇÏ´Â ÇÊÅ͸¦ Á¶ÀýÇÑ´Ù.</p>
-
- <p>ÇöÀç ¾ÆÆÄÄ¡ À¥¼­¹ö ¹èÆ÷º»Àº »ç¿ëÀÚ°¡ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ´ÙÀ½°ú
- °°Àº ÇÊÅ͸¦ Á¦°øÇÑ´Ù.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd><code class="module"><a href="./mod/mod_include.html">mod_include</a></code>°¡ ó¸®ÇÏ´Â Server-Side Includes</dd>
- <dt>DEFLATE</dt>
- <dd><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>¸¦ »ç¿ëÇÏ¿© Ãâ·ÂÀ»
- Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ ¾ÐÃà
- </dd>
- </dl>
-
- <p>¶Ç, <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> ¸ðµâÀ» »ç¿ëÇÏ¿©
- ¿ÜºÎ ÇÁ·Î±×·¥À» ÇÊÅÍ·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/filter.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/filter.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/filter.xml b/docs/manual/filter.xml
deleted file mode 100644
index 13b6cfc0bf..0000000000
--- a/docs/manual/filter.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="filter.xml.meta">
-
- <title>Filters</title>
-
- <summary>
- <p>This document describes the use of filters in Apache.</p>
- </summary>
-
- <section id="filters">
- <title>Filters</title>
- <related>
- <modulelist>
- <module>mod_deflate</module>
- <module>mod_ext_filter</module>
- <module>mod_include</module>
- </modulelist>
- <directivelist>
- <directive module="mod_mime">AddInputFilter</directive>
- <directive module="mod_mime">AddOutputFilter</directive>
- <directive module="mod_mime">RemoveInputFilter</directive>
- <directive module="mod_mime">RemoveOutputFilter</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_ext_filter">ExtFilterOptions</directive>
- <directive module="core">SetInputFilter</directive>
- <directive module="core">SetOutputFilter</directive>
- </directivelist>
- </related>
-
- <p>A <em>filter</em> is a process that is applied to data that
- is sent or received by the server. Data sent by clients to the
- server is processed by <em>input filters</em> while data sent
- by the server to the client is processed by <em>output
- filters</em>. Multiple filters can be applied to the data, and
- the order of the filters can be explicitly specified.</p>
-
- <p>Filters are used internally by Apache to perform functions such
- as chunking and byte-range request handling. In addition, modules
- can provide filters that are selectable using run-time
- configuration directives. The set of filters that apply to data
- can be manipulated with the
- <directive module="core">SetInputFilter</directive>,
- <directive module="core">SetOutputFilter</directive>,
- <directive module="mod_mime">AddInputFilter</directive>,
- <directive module="mod_mime">AddOutputFilter</directive>,
- <directive module="mod_mime">RemoveInputFilter</directive>, and
- <directive module="mod_mime">RemoveOutputFilter</directive>
- directives.</p>
-
- <p>The following user-selectable filters are currently provided
- with the Apache HTTP Server distribution.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd>Server-Side Includes processing by <module>mod_include</module></dd>
- <dt>DEFLATE</dt>
- <dd>Compress output before sending it to the client using
- <module>mod_deflate</module>
- </dd>
- </dl>
-
- <p>In addition, the module <module>mod_ext_filter</module> allows
- for external programs to be defined as filters.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/filter.xml.es b/docs/manual/filter.xml.es
deleted file mode 100644
index 92dc1184c1..0000000000
--- a/docs/manual/filter.xml.es
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="filter.xml.meta">
-
- <title>Filtros</title>
-
- <summary>
- <p>Este documento describe c&#243;mo usar filtros en Apache.</p>
- </summary>
-
- <section id="filters">
- <title>Filtros</title>
- <related>
- <modulelist>
- <module>mod_deflate</module>
- <module>mod_ext_filter</module>
- <module>mod_include</module>
- </modulelist>
- <directivelist>
- <directive module="mod_mime">AddInputFilter</directive>
- <directive module="mod_mime">AddOutputFilter</directive>
- <directive module="mod_mime">RemoveInputFilter</directive>
- <directive module="mod_mime">RemoveOutputFilter</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_ext_filter">ExtFilterOptions</directive>
- <directive module="core">SetInputFilter</directive>
- <directive module="core">SetOutputFilter</directive>
- </directivelist>
- </related>
-
- <p>Un <em>filtro</em> es un proceso que se aplica a los datos que
- se reciben o se env&#237;an por el servidor. Los datos enviados
- por los clientes al servidor son procesados por <em>filtros de
- entrada</em> mientras que los datos enviados por el servidor se
- procesan por los <em>filtros de salida</em>. A los datos se les
- pueden aplicar varios filtros, y el orden en que se aplica cada
- filtro puede especificarse explícitamente.</p>
-
- <p>Los filtros se usan internamente por Apache para llevar a cabo
- funciones tales como chunking y servir peticiones de
- byte-range. Además, los m&#243;dulos contienen filtros que se
- pueden seleccionar usando directivas de configuraci&#243;n al
- iniciar el servidor. El conjunto de filtros que se aplica a los
- datos puede manipularse con las directivas <directive
- module="core">SetInputFilter</directive>, <directive
- module="core">SetOutputFilter</directive>, <directive
- module="mod_mime">AddInputFilter</directive>, <directive
- module="mod_mime">AddOutputFilter</directive>, <directive
- module="mod_mime">RemoveInputFilter</directive>, y <directive
- module="mod_mime">RemoveOutputFilter</directive>.</p>
-
- <p>Actualmente, vienen con la distribuci&#243;n de Apache los
- siguientes filtros seleccionables por el usuario.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd>Server-Side Includes procesado por
- <module>mod_include</module></dd>
- <dt>DEFLATE</dt>
- <dd>Comprime los datos de salida antes de enviarlos al cliente
- usando el m&#243;dulo
- <module>mod_deflate</module>
- </dd>
- </dl>
-
- <p>Adem&#225;s, el m&#243;dulo <module>mod_ext_filter</module>
- permite definir programas externos como filtros.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/filter.xml.fr b/docs/manual/filter.xml.fr
deleted file mode 100644
index d591e040c9..0000000000
--- a/docs/manual/filter.xml.fr
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="filter.xml.meta">
-
- <title>Filtres</title>
-
- <summary>
- <p>Ce document explique le fonctionnement des filtres avec Apache.</p>
- </summary>
-
- <section id="filters">
- <title>Filtres</title>
- <related>
- <modulelist>
- <module>mod_deflate</module>
- <module>mod_ext_filter</module>
- <module>mod_include</module>
- </modulelist>
- <directivelist>
- <directive module="mod_mime">AddInputFilter</directive>
- <directive module="mod_mime">AddOutputFilter</directive>
- <directive module="mod_mime">RemoveInputFilter</directive>
- <directive module="mod_mime">RemoveOutputFilter</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_ext_filter">ExtFilterOptions</directive>
- <directive module="core">SetInputFilter</directive>
- <directive module="core">SetOutputFilter</directive>
- </directivelist>
- </related>
-
- <p>On appelle <em>filtre</em> un processus qui s'applique aux donn&#233;es re&#231;ues
- ou envoy&#233;es par le serveur. Les <em>filtres en entr&#233;e ("input filters")</em>
- servent &#224; filtrer les donn&#233;es envoy&#233;es par les clients au serveur, tandis
- que les <em>filtres en sortie ("output filters")</em> travaillent sur les
- donn&#233;es envoy&#233;es par le serveur &#224; un client. Il est possible d'appliquer
- plusieurs filtres &#224; un flux de donn&#233;es, et l'ordre de ces filtres peux &#234;tre
- sp&#233;cifi&#233;e de fa&#231;on explicite.</p>
-
- <p>Apache utilise des filtres en interne pour par exemple g&#233;rer les "grosses" requ&#234;tes
- (chunked) ou les requ&#234;tes partielles (NDT : "byte-range" : requ&#234;tes sur seulement une
- partie d'un fichier sp&#233;cifi&#233;e par un pointeur de d&#233;part, et de fin).
- Certains modules permettent en plus d'utiliser des filtres
- en utilisant des directives de configuration. Les filtres sont utilisables
- au moyen des directives
- <directive module="core">SetInputFilter</directive>,
- <directive module="core">SetOutputFilter</directive>,
- <directive module="mod_mime">AddInputFilter</directive>,
- <directive module="mod_mime">AddOutputFilter</directive>,
- <directive module="mod_mime">RemoveInputFilter</directive> et
- <directive module="mod_mime">RemoveOutputFilter</directive>
- .</p>
-
- <p>Les filtres list&#233;s ci-dessous sont fournis dans la distribution d'Apache, et
- peuvent &#234;tre utilis&#233;s par tout administrateur.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd>Le module <module>mod_include</module> travaille au moyen de
- "Server-Side Includes"</dd>
- <dt>DEFLATE</dt>
- <dd>Le module <module>mod_deflate</module> compresse les donn&#233;es avant leur envoi au
- client (filtre en sortie).</dd>
- </dl>
-
- <p>En outre, le module <module>mod_ext_filter</module> permet d'utiliser des
- programes externes &#224; Apache en tant que filtres.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/filter.xml.ja b/docs/manual/filter.xml.ja
deleted file mode 100644
index 54288b1c53..0000000000
--- a/docs/manual/filter.xml.ja
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="filter.xml.meta">
-
- <title>$B%U%#%k%?(B</title>
-
- <summary>
- <p>Apache $B$G$N%U%#%k%?$N;H$$J}$K$D$$$F5-=R$7$F$$$^$9!#(B</p>
- </summary>
-
- <section id="filters">
- <title>$B%U%#%k%?(B</title>
- <related>
- <modulelist>
- <module>mod_deflate</module>
- <module>mod_ext_filter</module>
- <module>mod_include</module>
- </modulelist>
- <directivelist>
- <directive module="mod_mime">AddInputFilter</directive>
- <directive module="mod_mime">AddOutputFilter</directive>
- <directive module="mod_mime">RemoveInputFilter</directive>
- <directive module="mod_mime">RemoveOutputFilter</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_ext_filter">ExtFilterOptions</directive>
- <directive module="core">SetInputFilter</directive>
- <directive module="core">SetOutputFilter</directive>
- </directivelist>
- </related>
-
- <p><em>$B%U%#%k%?(B</em> $B$H$O!"%5!<%P$,Aw<u?.$7$?%G!<%?$K(B
- $BE,MQ$5$l$k=hM}%W%m%;%9$N$3$H$r$$$$$^$9!#%/%i%$%"%s%H$+$i%5!<%P$K(B
- $BAw$i$l$?%G!<%?$O(B <em>$BF~NO%U%#%k%?(B</em> $B$K$h$C$F!"%5!<%P$+$i(B
- $B%/%i%$%"%s%H$KAw$i$l$k%G!<%?$O(B<em>$B=PNO%U%#%k%?(B</em>$B$K$h$C$F(B
- $B=hM}$5$l$^$9!#J#?t$N%U%#%k%?$rE,MQ$9$k$3$H$,$G$-!"(B
- $B$=$N=gHV$r87L)$K;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
-
- <p>Apache $BFbIt$G$O!"%A%c%s%/(B ($B%G!<%?$N$V$D@Z$j(B) $B$r9T$C$?$j!"(B
- $B%P%$%HHO0O$N;XDj$5$l$?%j%/%(%9%H$r07$C$?$j$H$$$C$?5!G=$r(B
- $B9T$&:]$K!"%U%#%k%?$,;H$o$l$F$$$^$9!#$=$l$K2C$($F!"(B
- $B<B9T;~$N@_Dj%G%#%l%/%F%#%V$GA*Br$,2DG=$J%U%#%k%?$r(B
- $B%b%8%e!<%k$,Ds6!$G$-$^$9!#(B
- $B%G!<%?$KE,1~$5$l$k%U%#%k%?$N%;%C%H$O!"(B
- <directive module="core">SetInputFilter</directive>,
- <directive module="core">SetOutputFilter</directive>,
- <directive module="core">AddInputFilter</directive>,
- <directive module="core">AddOutputFilter</directive>,
- <directive module="mod_mime">RemoveInputFilter</directive>,
- <directive module="mod_mime">RemoveOutputFilter</directive>
- $B%G%#%l%/%F%#%V$G@)8f$G$-$^$9!#(B</p>
-
- <p>$B8=9T$N(B Apache HTTP $B%5!<%P$NG[I[$G$O!"(B
- $B<!$N%f!<%6A*Br2DG=$J%U%#%k%?$,Ds6!$5$l$F$$$^$9!#(B</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd><module>mod_include</module> $B$G(B Server-Side Include $B$r$7$^$9!#(B</dd>
- <dt>DEFLATE</dt>
- <dd><module>mod_deflate</module>
- $B$r;H$C$F!"%/%i%$%"%s%H$KAw?.$9$kA0$K=PNO$r05=L$7$^$9!#(B</dd>
- </dl>
-
- <p>$B$^$?!"(B<module>mod_ext_filter</module> $B%b%8%e!<%k$G(B
- $B30It%W%m%0%i%`$r%U%#%k%?$H$7$F;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
- </section>
-</manualpage>
-
-
-
-
diff --git a/docs/manual/filter.xml.ko b/docs/manual/filter.xml.ko
deleted file mode 100644
index 821e63a552..0000000000
--- a/docs/manual/filter.xml.ko
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="filter.xml.meta">
-
- <title>ÇÊÅÍ</title>
-
- <summary>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡¿¡¼­ ÇÊÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
- </summary>
-
- <section id="filters">
- <title>ÇÊÅÍ</title>
- <related>
- <modulelist>
- <module>mod_deflate</module>
- <module>mod_ext_filter</module>
- <module>mod_include</module>
- </modulelist>
- <directivelist>
- <directive module="mod_mime">AddInputFilter</directive>
- <directive module="mod_mime">AddOutputFilter</directive>
- <directive module="mod_mime">RemoveInputFilter</directive>
- <directive module="mod_mime">RemoveOutputFilter</directive>
- <directive module="mod_ext_filter">ExtFilterDefine</directive>
- <directive module="mod_ext_filter">ExtFilterOptions</directive>
- <directive module="core">SetInputFilter</directive>
- <directive module="core">SetOutputFilter</directive>
- </directivelist>
- </related>
-
- <p><em>ÇÊÅÍ(filter)</em>´Â ¼­¹ö°¡ º¸³»°Å³ª ¹Þ´Â ÀÚ·á¿¡
- Àû¿ëµÇ´Â ÀÛ¾÷ÀÌ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡°Ô º¸³»´Â ÀÚ·á´Â
- <em>ÀÔ·ÂÇÊÅÍ(input filter)</em>°¡ ó¸®ÇÏ°í, ¼­¹ö°¡
- Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â ÀÚ·á´Â <em>Ãâ·ÂÇÊÅÍ(output filter)</em>°¡
- ó¸®ÇÑ´Ù. ÀÚ·á¿¡ ¿©·¯ ÇÊÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ°í, Á÷Á¢ ÇÊÅÍÀÇ
- ¼ø¼­¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â À̾î¹Þ±â(byte-range) ¿äû µîÀ» ó¸®ÇϱâÀ§ÇØ
- ³»ºÎÀûÀ¸·Î ÇÊÅ͸¦ »ç¿ëÇÑ´Ù. ¶Ç, ¼³Á¤ Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ¼±Åð¡´ÉÇÑ ÇÊÅ͸¦ Á¦°øÇÏ´Â ¸ðµâµµ ÀÖ´Ù.
- <directive module="core">SetInputFilter</directive>,
- <directive module="core">SetOutputFilter</directive>,
- <directive module="mod_mime">AddInputFilter</directive>,
- <directive module="mod_mime">AddOutputFilter</directive>,
- <directive module="mod_mime">RemoveInputFilter</directive>,
- <directive module="mod_mime">RemoveOutputFilter</directive>
- Áö½Ã¾î·Î ÀڷḦ ó¸®ÇÏ´Â ÇÊÅ͸¦ Á¶ÀýÇÑ´Ù.</p>
-
- <p>ÇöÀç ¾ÆÆÄÄ¡ À¥¼­¹ö ¹èÆ÷º»Àº »ç¿ëÀÚ°¡ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ´ÙÀ½°ú
- °°Àº ÇÊÅ͸¦ Á¦°øÇÑ´Ù.</p>
-
- <dl>
- <dt>INCLUDES</dt>
- <dd><module>mod_include</module>°¡ ó¸®ÇÏ´Â Server-Side Includes</dd>
- <dt>DEFLATE</dt>
- <dd><module>mod_deflate</module>¸¦ »ç¿ëÇÏ¿© Ãâ·ÂÀ»
- Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ ¾ÐÃà
- </dd>
- </dl>
-
- <p>¶Ç, <module>mod_ext_filter</module> ¸ðµâÀ» »ç¿ëÇÏ¿©
- ¿ÜºÎ ÇÁ·Î±×·¥À» ÇÊÅÍ·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/filter.xml.meta b/docs/manual/filter.xml.meta
deleted file mode 100644
index ac572243f6..0000000000
--- a/docs/manual/filter.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>filter</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>es</variant>
- <variant>fr</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/glossary.html b/docs/manual/glossary.html
deleted file mode 100644
index 0a9fdc8024..0000000000
--- a/docs/manual/glossary.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: glossary.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: glossary.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: glossary.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/glossary.html.en b/docs/manual/glossary.html.en
deleted file mode 100644
index 5b7b3d768c..0000000000
--- a/docs/manual/glossary.html.en
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Glossary - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Glossary</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/glossary.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>This glossary defines some of the common terminology related to
-Apache in particular, and web serving in general. More information
-on each concept is provided in the links.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definitions" id="definitions">Definitions</a></h2>
-
-<dl>
-<dt><a name="authentication">Authentication</a></dt> <dd>The positive
-identification of a network entity such as a server, a client, or a
-user.<br /> See: <a href="howto/auth.html">Authentication, Authorization, and Access
-Control</a></dd>
-
-<dt><a name="accesscontrol">Access Control</a></dt>
-<dd>The restriction of access to network realms. In an Apache context
- usually the restriction of access to certain <em>URLs</em>.<br />
-See: <a href="howto/auth.html">Authentication, Authorization, and Access
-Control</a></dd>
-
-<dt><a name="algorithm">Algorithm</a></dt>
-<dd>An unambiguous formula or set of rules for solving a problem in
-a finite number of steps. Algorithms for encryption are usually called
-<dfn>Ciphers</dfn>.</dd>
-
-<dt><a name="apacheextensiontool">APache eXtension Tool</a> <a name="apxs">(apxs)</a></dt> <dd>A perl script that aids in compiling <a href="#module">module</a> sources into Dynamic Shared Objects (<a href="#dso">DSO</a>s) and helps install them in the Apache Web
-server.<br /> See: <a href="programs/apxs.html">Manual Page: apxs</a></dd>
-
-<dt><a name="certificate">Certificate</a></dt>
-<dd>A data record used for authenticating network entities such
- as a server or a client. A certificate contains X.509 information pieces
- about its owner (called the subject) and the signing <a href="#certificationauthority">Certification Authority</a> (called the
- issuer), plus the owner's <a href="#publickey">public key</a> and the
- signature made by the CA. Network entities verify these signatures
- using CA certificates.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="certificationauthority">Certification Authority</a> <a name="ca">(CA)</a></dt> <dd>A trusted third party whose purpose is to
-sign certificates for network entities it has authenticated using
-secure means. Other network entities can check the signature to verify
-that a CA has authenticated the bearer of a certificate.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="certificatsigningrequest">Certificate Signing Request</a>
-<a name="csr">(CSR)</a></dt> <dd>An unsigned <a href="#certificate">certificate</a> for submission to a <a href="#certificationauthority">Certification Authority</a>, which signs it
-with the <a href="#privatekey">Private Key</a> of their CA
-<em>Certificate</em>. Once the CSR is signed, it becomes a real
-certificate.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-
-<dt><a name="cipher">Cipher</a></dt> <dd>An algorithm or system for
-data encryption. Examples are DES, IDEA, RC4, etc.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="ciphertext">Ciphertext</a></dt> <dd>The result after <a href="#plaintext">Plaintext</a> is passed through a <a href="#cipher">Cipher</a>.<br /> See: <a href="ssl/">SSL/TLS
-Encryption</a></dd>
-
-<dt><a name="commongatewayinterface">Common Gateway Interface</a> <a name="cgi">(CGI)</a></dt> <dd>A standard definition for an interface
-between a web server and an external program that allows the external
-program to service requests. The interface was originally defined by
-<a href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a> but
-there is also an <a href="http://cgi-spec.golux.com/">RFC
-project</a>.<br />
-See: <a href="howto/cgi.html">Dynamic Content with CGI</a></dd>
-
-
-<dt><a name="configurationdirective">Configuration Directive</a></dt>
-<dd>See: <a href="#directive">Directive</a></dd>
-
-<dt><a name="configurationfile">Configuration File</a></dt>
-<dd>A text file containing <a href="#directive">Directives</a>
-that control the configuration of Apache.<br />
-See: <a href="configuring.html">Configuration Files</a></dd>
-
-<dt><a name="connect">CONNECT</a></dt> <dd>An HTTP <a href="#method">method</a> for proxying raw data channels over HTTP. It
-can be used to encapsulate other protocols, such as the SSL
-protocol.</dd>
-
-<dt><a name="context">Context</a></dt> <dd>An area in the <a href="#configurationfile">configuration files</a> where certain types
-of <a href="#directive">directives</a> are allowed.<br /> See: <a href="mod/directive-dict.html#Context">Terms
-Used to Describe Apache Directives</a></dd>
-
-<dt><a name="digitalsignature">Digital Signature</a></dt>
-<dd>An encrypted text block that validates a certificate or other file. A
- <a href="#certificationauthority">Certification Authority</a> creates a
- signature by generating a hash of the <em>Public Key</em> embedded in a
- <em>Certificate</em>, then encrypting the hash with its own <em>Private
- Key</em>. Only the CA's public key can decrypt the signature, verifying
- that the CA has authenticated the network entity that owns the
- <em>Certificate</em>.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="directive">Directive</a></dt> <dd>A configuration command
-that controls one or more aspects of Apache's behavior. Directives
-are placed in the <a href="#configurationfile">Configuration
-File</a><br /> See: <a href="mod/directives.html">Directive
-Index</a></dd>
-
-<dt><a name="dynamicsharedobject">Dynamic Shared Object</a> <a name="dso">(DSO)</a></dt> <dd><a href="#module">Modules</a> compiled
-separately from the Apache httpd binary that can be loaded on-demand.<br />
-See: <a href="dso.html">Dynamic Shared Object Support</a></dd>
-
-<dt><a name="environmentvariable">Environment Variable</a> <a name="env-variable">(env-variable)</a></dt>
-<dd>Named variables managed by the operating system shell
-and used to store information and communicate between programs. Apache also
-contains internal variables that are referred to as environment variables,
-but are stored in internal Apache structures, rather than in the
-shell environment.<br />
-See: <a href="env.html">Environment Variables in Apache</a></dd>
-
-<dt><a name="export-crippled">Export-Crippled</a></dt>
-<dd>Diminished in cryptographic strength (and security) in order to comply
- with the United States' Export Administration Regulations (EAR).
- Export-crippled cryptographic software is limited to a small key size,
- resulting in <em>Ciphertext</em> which usually can be decrypted by brute
- force.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="filter">Filter</a></dt> <dd>A process that is applied to
-data that is sent or received by the server. Input filters process
-data sent by the client to the server, while output filters process
-documents on the server before they are sent to the client. For
-example, the <code>INCLUDES</code> output filter processes documents
-for <a href="#ssi">Server Side Includes</a>.<br /> See: <a href="filter.html">Filters</a></dd>
-
-<dt><a name="fully-qualifieddomain-name">Fully-Qualified
-Domain-Name</a> <a name="fqdn">(FQDN)</a></dt> <dd>The unique name of
-a network entity, consisting of a hostname and a domain name that can
-resolve to an IP address. For example, <code>www</code> is a hostname,
-<code>example.com</code> is a domain name, and
-<code>www.example.com</code> is a fully-qualified domain name.</dd>
-
-<dt><a name="handler">Handler</a></dt> <dd>An internal Apache
-representation of the action to be performed when a file is
-called. Generally, files have implicit handlers, based on the file
-type. Normally, all files are simply served by the server, but certain
-file types are "handled" separately. For example, the
-<code>cgi-script</code> handler designates files to be processed as <a href="#cgi">CGIs</a>.<br />
-See: <a href="handler.html">Apache's Handler Use</a></dd>
-
-<dt><a name="header">Header</a></dt>
-<dd>The part of the <a href="#http">HTTP</a> request and response that
-is sent before the actual content, and that contains meta-information
-describing the content.</dd>
-
-<dt><a name=".htaccess">.htaccess</a></dt> <dd>A <a href="#configurationfile">configuration file</a> that is placed inside
-the web tree and applies configuration <a href="#directive">directives</a> to the directory where it is placed
-and all sub-directories. Despite its name, this file can hold almost
-any type of directive, not just access-control directives.<br />
-See: <a href="configuring.html">Configuration Files</a></dd>
-
-<dt><a name="httpd.conf">httpd.conf</a></dt>
-<dd>The main Apache <a href="#configurationfile">configuration file</a>.
-The default location is <code>/usr/local/apache2/conf/httpd.conf</code>,
-but it may be moved using run-time or compile-time configuration.<br />
-See: <a href="configuring.html">Configuration Files</a></dd>
-
-<dt><a name="hypertexttransferprotocol">HyperText Transfer
-Protocol</a> <a name="http">(HTTP)</a></dt> <dd>The standard
-transmission protocol used on the World Wide Web. Apache implements
-version 1.1 of the protocol, referred to as HTTP/1.1 and defined by <a href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>.</dd>
-
-<dt><a name="https">HTTPS</a></dt>
-<dd>The HyperText Transport Protocol (Secure), the standard encrypted
- communication mechanism on the World Wide Web. This is actually just HTTP
- over <a name="ssl">SSL</a>.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="method">Method</a></dt> <dd>In the context of <a href="#http">HTTP</a>, an action to perform on a resource, specified
-on the request line by the client. Some of the methods available in
-HTTP are <code>GET</code>, <code>POST</code>, and <code>PUT</code>.</dd>
-
-<dt><a name="messagedigest">Message Digest</a></dt>
-<dd>A hash of a message, which can be used to verify that the contents of
- the message have not been altered in transit.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="mime-type">MIME-type</a></dt> <dd>A way to describe the
-kind of document being transmitted. Its name comes from that fact
-that its format is borrowed from the Multipurpose Internet Mail
-Extensions. It consists of a major type and a minor type, separated
-by a slash. Some examples are <code>text/html</code>,
-<code>image/gif</code>, and <code>application/octet-stream</code>. In
-HTTP, the MIME-type is transmitted in the <code>Content-Type</code> <a href="#header">header</a>.<br /> See: <a href="mod/mod_mime.html">mod_mime</a></dd>
-
-<dt><a name="module">Module</a></dt> <dd>An independent part of a
-program. Much of Apache's functionality is contained in modules that
-you can choose to include or exclude. Modules that are compiled into
-the Apache httpd binary are called <em>static modules</em>, while
-modules that are stored separately and can be optionally loaded at
-run-time are called <em>dynamic modules</em> or <a href="#dso">DSOs</a>. Modules that are included by default are called
-<em>base modules</em>. Many modules are available for Apache that are
-not distributed as part of the Apache HTTP Server <a href="#tarball">tarball</a>. These are referred to as <em>third-party
-modules</em>.<br />
-See: <a href="mod/">Module Index</a></dd>
-
-<dt><a name="modulemagicnumber">Module Magic Number</a> (<a name="mmn">MMN</a>)</dt>
-<dd>
-Module Magic Number is a constant defined in the Apache source code
-that is associated with binary compatibility of modules. It is changed
-when internal Apache structures, function calls and other significant
-parts of API change in such a way that binary compatibility cannot be
-guaranteed any more. On MMN change, all third party modules have to be
-at least recompiled, sometimes even slightly changed in order to work
-with the new version of Apache.
-</dd>
-
-<dt><a name="openssl">OpenSSL</a></dt>
-<dd>The Open Source toolkit for SSL/TLS<br />
- see <a href="http://www.openssl.org/">http://www.openssl.org/</a></dd>
-
-<dt><a name="passphrase">Pass Phrase</a></dt> <dd>The word or phrase
-that protects private key files. It prevents unauthorized users from
-encrypting them. Usually it's just the secret encryption/decryption
-key used for <a name="cipher">Ciphers</a>.<br /> See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="plaintext">Plaintext</a></dt>
-<dd>The unencrypted text.</dd>
-
-<dt><a name="privatekey">Private Key</a></dt> <dd>The secret key in a
-<a name="publickeycryptography">Public Key Cryptography</a> system,
-used to decrypt incoming messages and sign outgoing ones.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="proxy">Proxy</a></dt> <dd>An intermediate server that
-sits between the client and the <em>origin server</em>. It accepts
-requests from clients, transmits those requests on to the origin
-server, and then returns the response from the origin server to the
-client. If several clients request the same content, the proxy
-can deliver that content from its cache, rather than requesting it
-from the origin server each time, thereby reducing response time.<br />
-See: <a href="mod/mod_proxy.html">mod_proxy</a></dd>
-
-<dt><a name="publickey">Public Key</a></dt> <dd>The publicly
-available key in a <a name="publickeycryptography">Public Key
-Cryptography</a> system, used to encrypt messages bound for its owner
-and to decrypt signatures made by its owner.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="publickeycryptography">Public Key Cryptography</a></dt>
-<dd>The study and application of asymmetric encryption systems, which
-use one key for encryption and another for decryption. A corresponding
-pair of such keys constitutes a key pair. Also called Asymmetric
-Cryptography.<br /> See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="regularexpresion">Regular Expression</a> <a name="regex">(Regex)</a></dt> <dd>A way of
-describing a pattern in text - for example, "all the words that begin with the
-letter A" or "every 10-digit phone number" or even "Every sentence
-with two commas in it, and no capital letter Q". Regular expressions
-are useful in Apache because they let you apply certain
-attributes against collections of files or resources in very flexible
-ways - for example, all .gif and .jpg files under any "images"
-directory could be written as "<code>/images/.*(jpg|gif)$</code>".
-Apache uses Perl Compatible Regular Expressions provided by the
-<a href="http://www.pcre.org/">PCRE</a> library.</dd>
-
-<dt><a name="reverseproxy">Reverse Proxy</a></dt> <dd>A <a href="#proxy">proxy</a> server that appears to the client as if it is
-an <em>origin server</em>. This is useful to hide the real origin
-server from the client for security reasons, or to load balance.</dd>
-
-<dt><a name="securesocketslayer">Secure Sockets Layer</a> <a name="ssl">(SSL)</a></dt> <dd>A protocol created by Netscape
-Communications Corporation for general communication authentication
-and encryption over TCP/IP networks. The most popular usage is
-<em>HTTPS</em>, i.e. the HyperText Transfer Protocol (HTTP) over SSL.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="serversideincludes">Server Side Includes</a> <a name="ssi">(SSI)</a></dt> <dd>A technique for embedding processing
-directives inside HTML files.<br /> See: <a href="howto/ssi.html">Introduction to Server Side Includes</a></dd>
-
-<dt><a name="session">Session</a></dt>
-<dd>The context information of a communication in general.</dd>
-
-<dt><a name="ssleay">SSLeay</a></dt>
-<dd>The original SSL/TLS implementation library developed by
- Eric A. Young</dd>
-
-<dt><a name="symmetriccryptophraphy">Symmetric Cryptography</a></dt>
-<dd>The study and application of <em>Ciphers</em> that use a single secret key
- for both encryption and decryption operations.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="tarball">Tarball</a></dt>
-<dd>A package of files gathered together using the <code>tar</code>
-utility. Apache distributions are stored in compressed tar archives
-or using pkzip.</dd>
-
-<dt><a name="transportlayersecurity">Transport Layer Security</a> <a name="tls">(TLS)</a></dt> <dd>The successor protocol to SSL, created
-by the Internet Engineering Task Force (IETF) for general
-communication authentication and encryption over TCP/IP networks. TLS
-version 1 and is nearly identical with SSL version 3.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="uniformresourcelocator">Uniform Resource Locator</a> <a name="url">(URL)</a></dt> <dd>The name/address of a resource on the
-Internet. This is the common informal term for what is formally
-called a <a href="#uniformresourceidentifier">Uniform Resource
-Identifier</a>. URLs are usually made up of a scheme, like
-<code>http</code> or <code>https</code>, a hostname, and a path. A
-URL for this page is
-<code>http://httpd.apache.org/docs-2.1/glossary.html</code>.</dd>
-
-<dt><a name="uniformresourceidentifier">Uniform Resource Identifier</a> <a name="URI">(URI)</a></dt> <dd>A compact string of characters for
-identifying an abstract or physical resource. It is formally defined
-by <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
-URIs used on the world-wide web are commonly referred to
-as <a href="#url">URLs</a>.</dd>
-
-<dt><a name="virtualhosting">Virtual Hosting</a></dt> <dd>Serving
-multiple websites using a single instance of Apache. <em>IP virtual
-hosting</em> differentiates between websites based on their IP
-address, while <em>name-based virtual hosting</em> uses only the name
-of the host and can therefore host many sites on the same IP
-address.<br /> See: <a href="vhosts/">Apache Virtual Host
-documentation</a></dd>
-
-<dt><a name="x.509">X.509</a></dt> <dd>An authentication certificate
-scheme recommended by the International Telecommunication Union
-(ITU-T) which is used for SSL/TLS authentication.<br /> See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/glossary.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/glossary.html.es b/docs/manual/glossary.html.es
deleted file mode 100644
index 6eb5bfd609..0000000000
--- a/docs/manual/glossary.html.es
+++ /dev/null
@@ -1,389 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Glosario - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Glosario</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/glossary.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Este glosario define la terminología más común
-relacionada con Apache en particular y con los servidores web en
-general. En los enlaces que hay asociados a cada término se puede
-encontrar información más detallada.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definitions" id="definitions">Definiciones</a></h2>
-
-<dl>
-<dt><a name="authentication">Autentificación</a></dt> <dd>La
-identificación positiva de una entidad de red tal como un
-servidor, un cliente, o un usuario.<br /> Consulte: <a href="howto/auth.html">Autentificación, Autorización, y
-Control de Acceso</a></dd>
-
-<dt><a name="accesscontrol">Control de Acceso</a></dt> <dd>La
-restricción en el acceso al entorno de una red. En el contexto de
-Apache significa normalmente la restricción en el acceso a
-ciertas <em>URLs</em>.<br /> Consulte: <a href="howto/auth.html">Autentificación, Autorización, y
-Control de Acceso</a></dd>
-
-<dt><a name="algorithm">Algoritmo</a></dt> <dd>Un proceso definido sin
-ambiguedades o un conjunto de reglas para solucionar un problema en un
-número finito de pasos. Los algoritmos para encriptar se llaman
-normalmente <dfn>algoritmos de cifrado</dfn>.</dd>
-
-<dt><a name="apacheextensiontool">Herramienta de extensión de
-Apache</a> <a name="apxs">(apxs)</a></dt> <dd>Es un script escrito en
-Perl que ayuda a compilar el código fuente de algunos <a href="#module">módulos</a> para convertirlos en Objetos Dinamicos
-Compartidos (<a href="#dso">DSO</a>s) y ayuda a instalarlos en el
-servidor web Apache.<br /> Consulte: <a href="programs/apxs.html">Paginas de Ayuda: apxs</a></dd>
-
-<dt><a name="certificate">Certificado</a></dt>
-
-<dd>Una información que se almacena para autentificar entidades
- de red tales como un servidor o un cliente. Un certificado
- contiene piezas de información X.509 sobre su poseedor
- (llamado sujeto) y sobre la <a href="#certificationauthority">Autoridad Certificadora</a>
- (llamada el expendedor) que lo firma, más la <a href="#publickey">clave publica</a> del propietario y la firma de
- la AC. Las entidades de red verifican las firmas usando
- certificados de las AC.<br />
-
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="certificationauthority">Autoridad Certificadora</a> <a name="ca">(CA)</a></dt> <dd>Una entidad externa de confianza cuyo fin
-es firmar certificados para las entidades de red que ha autentificado
-usando medios seguros. Otras entidades de red pueden verificar la
-firma para comprobar que una Autoridad Certificadora ha autentificado
-al poseedor del certificado.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="certificatsigningrequest">Petición de firma de
-Certificado</a> <a name="csr">(CSR)</a></dt> <dd>Es la petición a
-una <a href="#certificationauthority">Autoridad Certificadora</a> para
-que firme un <a href="#certificate">certificado</a> aún sin
-firmar. La Autoridad Certificadora firma el <em>Certificado</em> con
-la <a href="#privatekey">Clave Privada</a> de su <a href="#certificate">certificado</a> de Autoridad Certificadora. Una
-vez que el CSR está firmado, se convierte en un auténtico
-certificado.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-
-<dt><a name="cipher">Algoritmo de cifrado</a></dt> <dd>Es un algoritmo
-o sistema de encriptado de información. Ejemplos de estos
-algoritmos son DES, IDEA, RC4, etc.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="ciphertext">Texto cifrado</a></dt> <dd>El resultado de
-haber aplicado a un <a href="#plaintext">texto sin cifrar</a> un <a href="#cipher">algoritmo de cifrado</a>.<br /> Consultar: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="commongatewayinterface">Common Gateway Interface</a> <a name="cgi">(CGI)</a></dt> <dd>Una definición estándar para
-un interfaz entre un servidor web y un programa externo que permite
-hacer peticiones de servicio a los programas externos. Este interfaz
-fue definido originalmente por la <a href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a> pero
-tambien hay un proyecto <a href="http://cgi-spec.golux.com/">RFC</a>.<br /> Consulte: <a href="howto/cgi.html">Contenido Dinámico con CGI</a></dd>
-
-
-<dt><a name="configurationdirective">Directivas de
-configuración</a></dt> <dd>Consulte: <a href="#directive">Directivas</a></dd>
-
-<dt><a name="configurationfile">Fichero de Configuración</a></dt>
-<dd>Un fichero de texto que contiene <a href="#directive">Directivas</a> que controlan la configuración
-de Apache.<br /> Consulte: <a href="configuring.html">Ficheros de
-Configuración</a></dd>
-
-<dt><a name="connect">CONNECT</a></dt> <dd>Un <a href="#method">método</a> de HTTP para hacer proxy a canales de
-datos sin usar HTTP. Puede usarse para encapsular otros protocolos,
-tales como el protocolo SSL.</dd>
-
-<dt><a name="context">Contexto</a></dt> <dd>Un área en los <a href="#configurationfile">ficheros de configuración</a> donde
-están permitidos ciertos tipos de <a href="#directive">directivas</a>.<br /> Consulte: <a href="mod/directive-dict.html#Context">Terminos usados para describir
-las directivas de Apache</a></dd>
-
-<dt><a name="digitalsignature">Firma Digital</a></dt> <dd>Un bloque de
-texto encriptado que verifica la validez de un certificado o de otro
-fichero. Una <a href="#certificationauthority">Autoridad
-Certificadora</a> crea una firma generando un hash a partir de la
-<em>Clave Pública</em> que lleva incorporada en un
-<em>Certificado</em>, después encriptando el hash con su propia
-<em>Clave Privada</em>. Solo las claves públicas de las CAs
-pueden desencriptar la firma, verificando que la CA ha autentificado a
-la entidad de red propietaria del <em>Certificado</em>.<br />
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="directive">Directiva</a></dt> <dd>Un comando de
-configuración que controla uno o más aspectos del
-comportamiento de Apache. Las directivas se ponen en el <a href="#configurationfile">Fichero de Configuración</a><br />
-Consulte: <a href="mod/directives.html">Índice de
-Directivas</a></dd>
-
-<dt><a name="dynamicsharedobject">Objetos Dinámicos
-Compartidos</a> <a name="dso">(DSO)</a></dt> <dd>Los <a href="#module">Módulos</a> compilados de forma separada al
-binario httpd de Apache se pueden cargar según se necesiten.<br /> Consulte: <a href="dso.html">Soporte de Objetos Dinámicos
-Compartidos</a></dd>
-
-<dt><a name="environmentvariable">Variable de Entorno</a> <a name="env-variable">(env-variable)</a></dt> <dd>Variables que
-gestionan el shell del sistema operativo y que se usan para guardar
-información y para la comunicación entre programas. Apache
-también contiene variables internas que son referidas como
-variables de entorno, pero que son almacenadas en las estructuras
-internas de Apache, en lugar de en el entorno del shell.<br />
-Consulte: <a href="env.html">Variables de entorno de Apache</a></dd>
-
-<dt><a name="export-crippled">Export-Crippled</a></dt>
-<dd>Disminución de la fortaleza criptográfica (y seguridad)
-para cumplir con las Regulaciones sobre Exportación de la
-Administracción de los Estados Unidos (EAR). El software
-criptográfico Export-crippled está limitado a una clave de
-pequeño tamaño, de tal manera que el <em>texto cifrado</em>
-que se consigue con él, puede desencriptarse por fuerza bruta.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="filter">Filtro</a></dt> <dd>Un proceso que se aplica a la
-información que es enviada o recibida por el servidor. Los
-ficheros de entrada procesan la información enviada por un
-cliente al servidor, mientras que los filtros de salida procesan la
-información en el servidor antes de enviársela al
-cliente. Por ejemplo, el filtro de salida <code>INCLUDES</code>
-procesa documentos para <a href="#ssi">Server Side Includes</a>.<br />
-Consulte: <a href="filter.html">Filtros</a></dd>
-
-<dt><a name="fully-qualifieddomain-name">Nombre de dominio
-completamente qualificado</a> <a name="fqdn">(FQDN)</a></dt> <dd>El
-nombre único de una entidad de red, que consiste en un nombre de
-host y un nombre de dominio que puede traducirse a una dirección
-IP. Por ejemplo, <code>www</code> es un nombre de host,
-<code>example.com</code> es un nombre de dominio, y
-<code>www.example.com</code> es un nombre de dominio completamente
-qualificado.</dd>
-
-<dt><a name="handler">Handler</a></dt> <dd>Es una representación
-interna de Apache de una acción a ser ejecutada cuando se llama a
-un fichero. Generalmente, los ficheros tienen un handler
-implícito, basado en el tipo de fichero. Normalmente, todos los
-ficheros son simplemente servidos por el servidor, pero sobre algunos
-tipos de ficheros se ejecutan acciones complementarias. Por ejemplo,
-el handler <code>cgi-script</code> designa los ficheros a ser
-procesados como <a href="#cgi">CGIs</a>.<br /> Consulte: <a href="handler.html">Uso de Handlers en Apache</a></dd>
-
-<dt><a name="header">Cabecera</a></dt> <dd>La parte de la
-petición y la respuesta <a href="#http">HTTP</a> que se
-envía antes del contenido propiamente dicho, y que contiene
-meta-información describiendo el contenido.</dd>
-
-<dt><a name=".htaccess">.htaccess</a></dt> <dd>Un <a href="#configurationfile">fichero de configuración</a> que se
-pone dentro de la estructura de directorios del sitio web y aplica <a href="#directive">directivas</a> de configuración al directorio
-en el que está y a sus subdirectorios. A pesar de su nombre, este
-fichero puede contener cualquier tipo de directivas, no solo
-directivas de control de acceso.<br /> Consulte: <a href="configuring.html">Ficheros de Configuración</a></dd>
-
-<dt><a name="httpd.conf">httpd.conf</a></dt> <dd>Es el <a href="#configurationfile">fichero de configuración</a> principal
-de Apache. Su ubicación por defecto es
-<code>/usr/local/apache2/conf/httpd.conf</code>, pero puede moverse
-usando opciones de configuración al compilar o al iniciar
-Apache.<br /> Consulte: <a href="configuring.html">Ficheros de
-Configuración</a></dd>
-
-<dt><a name="hypertexttransferprotocol">Protocolo de Tranferencia de
-Hipertexto</a> <a name="http">(HTTP)</a></dt> <dd>Es el protocolo de
-transmisión estádar usado en la World Wide Web. Apache
-implementa la versión 1.1 de este protocolo, al que se hace
-referencia como HTTP/1.1 y definido por el <a href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>.</dd>
-
-<dt><a name="https">HTTPS</a></dt> <dd>Protocolo de transferencia de
-Hipertext (Seguro), es el mecanismo de comunicación encriptado
-estándar en World Wide Web. En realidad es HTTP sobre <a name="ssl">SSL</a>.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="method">Método</a></dt> <dd>En el contexto de <a href="#http">HTTP</a>, es una acción a ejecutar sobre un recurso,
-especificado en la líneas de petición por el cliente.
-Algunos de los metodos diponibles en HTTP son <code>GET</code>,
-<code>POST</code>, y <code>PUT</code>.</dd>
-
-<dt><a name="messagedigest">Message Digest</a></dt> <dd>Un hash de un
-mensaje, el cual pude ser usado para verificar que el contenido del
-mensaje no ha sido alterado durante la transmisión.<br />
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="mime-type">MIME-type</a></dt> <dd>Una manera de describir
-el tipo de documento a ser transmitido. Su nombre viene del hecho de
-que su formato se toma de las Extensiones del Multipurpose Internet
-Mail. Consiste en dos componentes, uno principal y otro secundario,
-separados por una barra. Algunos ejemplos son <code>text/html</code>,
-<code>image/gif</code>, y <code>application/octet-stream</code>. En
-HTTP, el tipo MIME se transmite en la <a href="#header">cabecera</a>
-del <code>Tipo Contenido</code>.<br /> Consulte: <a href="mod/mod_mime.html">mod_mime</a></dd>
-
-<dt><a name="module">Módulo</a></dt> <dd>Una parte independiente
-de un programa. La mayor parte de la funcionalidad de Apache
-está contenida en módulos que pueden incluirse o excluirse.
-Los módulos que se compilan con el binario httpd de Apache se
-llaman <em>módulos estáticos</em>, mientras que los que se
-almacenan de forma separada y pueden ser cargados de forma opcional,
-se llaman <em>módulos dinamicos</em> o <a href="#dso">DSOs</a>.
-Los módulos que están incluidos por sefecto de llaman
-<em>módulos base</em>. Hay muchos módulos disponibles para
-Apache que no se distribuyen con la <a href="#tarball">tarball</a> del
-Servidor HTTP Apache . Estos módulos son llamados
-<em>módulos de terceros</em>.<br /> Consulte: <a href="mod/">Índice de Módulos</a></dd>
-
-<dt><a name="modulemagicnumber">Número Mágico de
-Módulo</a> (<a name="mmn">MMN</a>)</dt> <dd> El número
-mágico de módulo es una constante definida en el código
-fuente de Apache que está asociado con la compatibilidad binaria
-de los módulos. Ese número cambia cuando cambian las
-estructuras internas de Apache, las llamadas a funciones y otras
-partes significativas de la interfaz de programación de manera
-que la compatibilidad binaria no puede garantizarse sin cambiarlo. Si
-cambia el número mágico de módulo, todos los
-módulos de terceros tienen que ser al menos recompilados, y
-algunas veces, incluso hay que introducir ligeras modificaciones para
-que funcionen con la nueva versión de Apache </dd>
-
-<dt><a name="openssl">OpenSSL</a></dt>
-<dd>El toolkit Open Source para SSL/TLS<br />
- see <a href="http://www.openssl.org/">http://www.openssl.org/</a></dd>
-
-<dt><a name="passphrase">Pass Phrase</a></dt> <dd>La palabra o frase
-que protege los archivos de clave privada. Evita que usuarios no
-autorizados los encripten. Normalmente es solo la clave de
-encriptado/desencriptado usada por los <a name="cipher">Algoritmos de
-Cifrado</a>.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="plaintext">Plaintext</a></dt>
-<dd>Un texto no encriptado.</dd>
-
-<dt><a name="privatekey">Clave Privada</a></dt> <dd>La clave secreta
-de un <a name="publickeycryptography">sistema criptográfico de
-Clave Pública</a>, usada para desencriptar los mensajes entrantes
-y firmar los salientes.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="proxy">Proxy</a></dt> <dd>Un servidor intermedio que se
-pone entre el cliente y el <em>servidor de origen</em>. Acepta las
-peticiones de los clientes, las transmite al servidor de origen, y
-después devuelve la respuesta del servidor de origen al
-cliente. Si varios clientes piden el mismo contenido, el proxy sirve
-el contenido desde su caché, en lugar de pedirlo cada vez que lo
-necesita al servidor de origen, reduciendo con esto el tiempo de
-respuesta.<br /> Consulte: <a href="mod/mod_proxy.html">mod_proxy</a></dd>
-
-<dt><a name="publickey">Clave Publica</a></dt> <dd>La clave disponible
-públicamente en un <a name="publickeycryptography">sistema
-criptográfico de Clave Pública</a>, usado para encriptar
-mensajes destinados a su propietario y para desencriptar firmas hechas
-por su propietario.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="publickeycryptography">Criptográfia de Clave
-Pública</a></dt> <dd>El estudio y aplicación de sistemas de
-encriptado asimétricos, que usa una clave para encriptar y otra
-para desencriptar. Una clave de cada uno de estos tipos constituye un
-par de claves. Tambien se llama Criptografia Asimétrica.<br />
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="regularexpresion">Expresiones Regulares</a> <a name="regex">(Regex)</a></dt> <dd>Una forma de describir un modelo de
-texto - por ejemplo, "todas las palabras que empiezan con la letra "A"
-o "todos los números de teléfono que contienen 10
-dígitos" o incluso "Todas las frases entre comas, y que no
-contengan ninguna letra Q". Las Expresiones Regulares son utiles en
-Apache porque permiten aplicar ciertos atributos a colecciones de
-ficheros o recursos de una forma flexible - por ejemplo, todos los
-archivos .gif y .jpg que estén en un directorio "imágenes"
-podrían ser escritos como "<code>/images/.*(jpg|gif)$</code>".
-Apache usa Expresiones Regulares compatibles con Perl gracias a la
-librería <a href="http://www.pcre.org/">PCRE</a>.</dd>
-
-<dt><a name="reverseproxy">Reverse Proxy</a></dt> <dd>Es un servidor
-<a href="#proxy">proxy</a> que se presenta al cliente como si fuera un
-<em>servidor de origen</em>. Es útil para esconder el
-auténtico servidor de origen a los clientes por cuestiones de
-seguridad, o para equilibrar la carga.</dd>
-
-<dt><a name="securesocketslayer">Secure Sockets Layer</a> <a name="ssl">(SSL)</a></dt> <dd>Un protocolo creado por Netscape
-Communications Corporation para la autentificación en
-comunicaciones en general y encriptado sobre redes TCP/IP. Su
-aplicación más popular es <em>HTTPS</em>, el Protocolo de
-Transferencia de Hipertexto (HTTP) sobre SSL.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="serversideincludes">Server Side Includes</a> <a name="ssi">(SSI)</a></dt> <dd>Una tecnica para incluir directivas de
-proceso en archivos HTML.<br /> Consulte: <a href="howto/ssi.html">Introducción al Server Side
-Includes</a></dd>
-
-<dt><a name="session">Sesion</a></dt> <dd>Información del
-contexto de una comunicación en general.</dd>
-
-<dt><a name="ssleay">SSLeay</a></dt> <dd>La implementación
-original de la librería SSL/TLS desarrollada por Eric
-A. Young</dd>
-
-<dt><a name="symmetriccryptophraphy">Criptografía
-Simétrica</a></dt> <dd>El estudio y aplicación de
-<em>Algoritmos de Cifrado</em> que usan una solo clave secreta tanto
-para encriptar como para desencriptar.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="tarball">Tarball</a></dt> <dd>Un grupo de ficheros
-puestos en un solo paquete usando la utilidad <code>tar</code>. Las
-distribuciones Apache se almacenan en ficheros comprimidos con tar o
-con pkzip.</dd>
-
-<dt><a name="transportlayersecurity">Transport Layer Security</a> <a name="tls">(TLS)</a></dt> <dd>Es el sucesor del protocolo SSL, creado
-por el Internet Engineering Task Force (IETF) para la
-autentificación en comunicaciones en general y encriptado sobre
-redes TCP/IP. La versión 1 de TLS es casi idéntica a la
-versión 3 de SSL.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="uniformresourcelocator">Localizador de Recursos
-Uniforme</a> <a name="url">(URL)</a></dt> <dd>El nombre de un recurso
-en Internet. Es la manera informal de decir lo que formalmente se
-llama un <a href="#uniformresourceidentifier">Identificador de
-Recursos Uniforme</a>. Las URLs están compuestas normalmente por
-un esquema, tal como <code>http</code> o <code>https</code>, un nombre
-de host, y una ruta. Una URL para esta página es
-<code>http://httpd.apache.org/docs-2.1/glossary.html</code>.</dd>
-
-<dt><a name="uniformresourceidentifier">Identificador de Recursos
-Uniforme</a> <a name="URI">(URI)</a></dt> <dd>Una cadena de caracteres
-compacta para identificar un recurso físico o abstracto. Se
-define formalmente en la <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>. Los URIs que
-se usan en world-wide web se refieren normalmente como <a href="#url">URLs</a>.</dd>
-
-<dt><a name="virtualhosting">Hosting Virtual</a></dt> <dd>Se trata de
-servir diferentes sitios web con una sola entidad de Apache. <em>El
-hosting virtual de IPs</em> diferencia los sitios web basandose en sus
-direcciones IP, mientras que el <em>hosting virtual basado en
-nombres</em> usa solo el nombre del host y de esta manera puede alojar
-muchos sitios web con la misma dirección IP.<br /> Consulte: <a href="vhosts/">Documentación sobre Hosting Virtual en
-Apache</a></dd>
-
-<dt><a name="x.509">X.509</a></dt> <dd>Un esquema de certificado de
-autentificación recomendado por la International
-Telecommunication Union (ITU-T) que se usa en la autentificación
-SSL/TLS.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/glossary.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/glossary.html.ko.euc-kr b/docs/manual/glossary.html.ko.euc-kr
deleted file mode 100644
index 3c76cccb9c..0000000000
--- a/docs/manual/glossary.html.ko.euc-kr
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¿ë¾î - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¿ë¾î</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ko/glossary.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>ÀÌ ¹®¼­´Â À¥ ¼­ºñ½º ÀϹݿ¡ ´ëÇÑ, ƯÈ÷ ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ, ¿ë¾îµéÀ»
-Á¤ÀÇÇÑ´Ù. °¢ °³³ä¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ¸µÅ©¸¦ Âü°íÇ϶ó.
-<span class="transnote">(<em>¿ªÁÖ;</em> ÇöÀç ´Ü¾îÀÇ ¼ø¼­´Â ÇÑ±Û ¼ø¼­°¡ ¾Æ´Ï¶ó, ¿µ¹®ÀÚ
-¼ø¼­ÀÔ´Ï´Ù. ¿ë¾î¹ø¿ªÇ¥´Â <a href="http://www.whiterabbitpress.com/osp/apache/">¿©±â</a>¸¦
-Âü°íÇÏ±æ ¹Ù¶ø´Ï´Ù.)</span></p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definitions" id="definitions">Á¤ÀÇ</a></h2>
-
-<dl>
-<dt><a name="authentication">ÀÎÁõ (Authentication)</a></dt>
-<dd>¼­¹ö, Ŭ¶óÀ̾ðÆ®, »ç¿ëÀÚ µî ³×Æ®¿÷ ½Çü¿¡ ´ëÇÑ
-È®ÀÎ.<br /> Âü°í: <a href="howto/auth.html">ÀÎÁõ, ±ÇÇѺο©,
-Á¢±ÙÁ¦¾î</a></dd>
-
-<dt><a name="accesscontrol">Á¢±ÙÁ¦¾î (Access Control)</a></dt>
-<dd>³×Æ®¿÷ ¿µ¿ª¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦ÇÑ. ¾ÆÆÄÄ¡¿¡¼­´Â º¸Åë ƯÁ¤
-<em>URL</em>ÀÇ Á¢±ÙÀ» Á¦ÇÑÇϱâÀ§ÇØ »ç¿ëÇÑ´Ù.<br /> Âü°í: <a href="howto/auth.html">ÀÎÁõ, ±ÇÇѺο©, Á¢±ÙÁ¦¾î</a></dd>
-
-<dt><a name="algorithm">¾Ë°í¸®Áò (Algorithm)</a></dt>
-<dd>À¯ÇÑÇÑ ´Ü°è¸¦ °ÅÃÄ ¹®Á¦¸¦ Ǫ´Â ¸íÈ®ÇÑ °ø½Ä ȤÀº ±ÔÄ¢µé.
-¾Ïȣȭ¸¦ À§ÇÑ ¾Ë°í¸®ÁòÀ» º¸Åë <dfn>¾ÏÈ£±â(Ciphers)</dfn>¶ó°í
-ºÎ¸¥´Ù.</dd>
-
-<dt><a name="apacheextensiontool">APache eXtension Tool</a>
-<a name="apxs">(apxs)</a></dt> <dd><a href="#module">¸ðµâ
-(module)</a> ¼Ò½º¸¦ µ¿Àû°øÀ¯°´Ã¼ (<a href="#dso">DSO</a>)·Î
-ÄÄÆÄÀÏÇÏ°í ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ ¼³Ä¡ÇÏ´Â ÀÛ¾÷À» µ½´Â perl
-½ºÅ©¸³Æ®.<br /> Âü°í: <a href="programs/apxs.html">Manpage:
-apxs</a></dd>
-
-<dt><a name="certificate">ÀÎÁõ¼­ (Certificate)</a></dt>
-<dd>¼­¹ö³ª Ŭ¶óÀ̾ðÆ®¿Í °°Àº ³×Æ®¿÷ ½Çü¸¦ ÀÎÁõÇÏ´Â ÀÚ·á.
- ÀÎÁõ¼­¿¡´Â ¼ÒÀ¯ÀÚ (subject¶ó°í ÇÔ), ¼­¸í <a href="#certificationauthority">ÀÎÁõ±â°ü (Certificate
- Authority)</a> (issuer¶ó°í ÇÔ), ¼ÒÀ¯ÀÚÀÇ <a href="#publickey">°ø°³Å°</a>, CA°¡ ¸¸µç ¼­¸í µî¿¡ ´ëÇÑ
- X.509 Á¤º¸°¡ ÀÖ´Ù. ³×Æ®¿÷ ½Çü´Â CA ÀÎÁõ¼­¸¦ »ç¿ëÇÏ¿©
- ¼­¸íÀ» °Ë»çÇÑ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="certificationauthority">ÀÎÁõ±â°ü (Certification
-Authority</a>, <a name="ca">CA)</a></dt> <dd>¾ÈÀüÇÑ ¹æ¹ýÀ¸·Î
-³×Æ®¿÷ ½Çü¿¡ ´ëÇÑ ÀÎÁõÀ» ¼­¸íÇÏ´Â ½Å·ÚÇÏ´Â Á¦»ïÀÚ. ´Ù¸¥ ³×Æ®¿÷
-½ÇüµéÀº ¼­¸íÀ¸·Î CA°¡ ÀÎÁõ¼­ ¼ÒÀ¯ÀÚ¸¦ ÀÎÁõÇß´ÂÁö È®ÀÎÇÒ ¼ö
-ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="certificatsigningrequest">ÀÎÁõ ¼­¸í ¿äû (Certificate
-Signing Request</a>, <a name="csr">CSR)</a></dt> <dd><a href="#certificationauthority">ÀÎÁõ±â°ü (Certification
-Authority)</a>¿¡ Á¦ÃâÇÏ¿© CA <em>ÀÎÁõ¼­ (Certificate)</em>ÀÇ
-<a href="#privatekey">°³ÀÎÅ° (Private Key)</a>·Î ¼­¸íµÉ ¾ÆÁ÷
-¼­¸íµÇÁö¾ÊÀº <a href="#certificate">ÀÎÁõ¼­</a>. CSRÀÌ ¼­¸íµÇ¸é
-½ÇÁ¦ ÀÎÁõ¼­°¡ µÈ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-
-<dt><a name="cipher">¾ÏÈ£±â (Cipher)</a></dt> <dd>ÀڷḦ
-¾ÏȣȭÇÏ´Â ¾Ë°í¸®ÁòÀ̳ª ½Ã½ºÅÛ. ¿¹¸¦ µé¾î, DES, IDEA, RC4 µîÀÌ ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="ciphertext">¾ÏÈ£¹® (Ciphertext)</a></dt> <dd><a href="#plaintext">Æò¹® (Plaintext)</a>À» <a href="#cipher">¾ÏÈ£±â
-(Cipher)</a>·Î ó¸®ÇÑ °á°ú.<br /> Âü°í: <a href="ssl/">SSL/TLS
-¾Ïȣȭ</a></dd>
-
-<dt><a name="commongatewayinterface">°øÅë °ÔÀÌÆ®¿þÀÌ ÀÎÅÍÆäÀ̽º
-(Common Gateway Interface</a>, <a name="cgi">CGI)</a></dt>
-<dd>¿ÜºÎ ÇÁ·Î±×·¥ÀÌ ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ÀÖµµ·Ï ¸¸µç À¥¼­¹ö¿Í ¿ÜºÎ
-ÇÁ·Î±×·¥ »çÀÌÀÇ ÀÎÅÍÆäÀ̽º Ç¥ÁØ. ÀÎÅÍÆäÀ̽º´Â ¿ø·¡ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a>°¡
-Á¤ÀÇÇßÁö¸¸, <a href="http://cgi-spec.golux.com/">RFC
-ÇÁ·ÎÁ§Æ®</a>À̱⵵ ÇÏ´Ù.<br />
-Âü°í: <a href="howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a></dd>
-
-
-<dt><a name="configurationdirective">¼³Á¤ Áö½Ã¾î (Configuration
-Directive)</a></dt>
-<dd>Âü°í: <a href="#directive">Áö½Ã¾î</a></dd>
-
-<dt><a name="configurationfile">¼³Á¤ÆÄÀÏ (Configuration File)</a></dt>
-<dd>¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇÏ´Â <a href="#directive">Áö½Ã¾î (directive)</a>¸¦
-Àû¾îµÐ ÅؽºÆ®ÆÄÀÏ.<br />
-Âü°í: <a href="configuring.html">¼³Á¤ÆÄÀÏ</a></dd>
-
-<dt><a name="connect">CONNECT</a></dt> <dd>HTTP¸¦ ÅëÇØ
-ÀÚ·áÈ帧À» ÇÁ·Ï½ÃÇÏ´Â HTTP <a href="#method">¸Þ½áµå (method)</a>.
-SSL ÇÁ·ÎÅäÄÝ µî ´Ù¸¥ ÇÁ·ÎÅäÄÝÀ» °¨½Î±âÀ§ÇØ »ç¿ëÇÑ´Ù.</dd>
-
-<dt><a name="context">»ç¿ëÀå¼Ò (Context)</a></dt> <dd><a href="#configurationfile">¼³Á¤ÆÄÀÏ (configuration file)</a>¿¡¼­
-ƯÁ¤ <a href="#directive">Áö½Ã¾î (directive)</a>¸¦ »ç¿ëÇÒ ¼ö
-ÀÖ´Â Àå¼Ò.<br /> Âü°í: <a href="mod/directive-dict.html#Context">¾ÆÆÄÄ¡ Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥
-»ç¿ëÇÑ ¿ë¾îÁ¤ÀÇ</a></dd>
-
-<dt><a name="digitalsignature">ÀüÀÚ¼­¸í (Digital Signature)</a></dt>
-<dd>ÀÎÁõ¼­³ª ´Ù¸¥ ÆÄÀÏÀ» °Ë»çÇÏ´Â ¾ÏȣȭµÈ ¹®ÀÚµé. <a href="#certificationauthority">ÀÎÁõ±â°ü (Certification
- Authority)</a>Àº <em>ÀÎÁõ¼­ (Certificate)</em>¿¡ Æ÷ÇÔµÈ
- <em>°ø°³Å° (Public Key)</em>¸¦ Çؽ¬ÇÑ °á°ú¸¦ ÀÚ½ÅÀÇ
- <em>°³ÀÎÅ° (Private Key)</em>·Î ¾ÏȣȭÇÏ¿© ¼­¸íÀ» ¸¸µç´Ù.
- ¿ÀÁ÷ CAÀÇ °ø°³Å°¸¸ÀÌ ¼­¸íÀ» Ç® ¼ö Àֱ⶧¹®¿¡, CA°¡ <em>ÀÎÁõ¼­
- (Certificate)</em>¸¦ °¡Áø ³×Æ®¿÷ ½Çü¸¦ ÀÎÁõÇßÀ½À» Áõ¸íÇÒ
- ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="directive">Áö½Ã¾î (Directive)</a></dt> <dd>¾ÆÆÄÄ¡ÀÇ
-¿©·¯ ±â´ÉÀ» Á¶ÀýÇÏ´Â ¼³Á¤ ¸í·É¾î. Áö½Ã¾î´Â <a href="#configurationfile">¼³Á¤ÆÄÀÏ (Configuration File)</a>¿¡¼­
-»ç¿ëÇÑ´Ù.<br /> Âü°í: <a href="mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a></dd>
-
-<dt><a name="dynamicsharedobject">µ¿Àû°øÀ¯°´Ã¼ (Dynamic Shared
-Object)</a> <a name="dso">(DSO)</a></dt> <dd> ¾ÆÆÄÄ¡ httpd
-½ÇÇàÆÄÀÏ°ú º°µµ·Î ÄÄÆÄÀÏÇÏ¿© ÇÊ¿äÇÒ¶§ ÀоîµéÀÏ ¼ö ÀÖ´Â <a href="#module">¸ðµâ (Module)</a>.<br />
-Âü°í: <a href="dso.html">µ¿Àû°øÀ¯°´Ã¼ Áö¿ø</a></dd>
-
-<dt><a name="environmentvariable">ȯ°æº¯¼ö (Environment Variable)</a>
-<a name="env-variable">(env-variable)</a></dt>
-<dd>Á¤º¸¸¦ ÀúÀåÇÏ°í ÇÁ·Î±×·¥°£¿¡ Åë½ÅÀ» À§ÇØ ¿î¿µÃ¼Á¦ ½©ÀÌ °ü¸®ÇÏ´Â
-º¯¼ö. ¾ÆÆÄÄ¡¿¡µµ ȯ°æº¯¼ö¶ó´Â ³»ºÎ º¯¼ö°¡ ÀÖÁö¸¸, ½© ȯ°æÀÌ
-¾Æ´Ï¶ó ¾ÆÆÄÄ¡ ³»ºÎ¿¡ ÀúÀåµÈ´Ù.<br />
-Âü°í: <a href="env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a></dd>
-
-<dt><a name="export-crippled">¼öÃâ¿ë (Export-Crippled)</a></dt>
-<dd>¹Ì±¹ ¼öÃâ°ü¸®±ÔÁ¦(Export Administration Regulations, EAR)¸¦
- ÁؼöÇϱâÀ§ÇØ ¾ÏÈ£(¿Í º¸¾È)ÀÇ °­µµ¸¦ ³·Ãã. ¼öÃâ¿ë ¾Ïȣȭ
- ¼ÒÇÁÆ®¿þ¾î´Â Å° Å©±â°¡ ÀÛ°Ô Á¦ÇѵǾî, <em>¾ÏÈ£¹®
- (Ciphertext)</em>À» ¹«½ÄÇÑ ¹æ¹ý(brute force)À¸·Î Ç® ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ (SSL/TLS Encryption)</a></dd>
-
-<dt><a name="filter">ÇÊÅÍ (Filter)</a></dt> <dd>¼­¹ö°¡ º¸³»°Å³ª
-¹Þ´Â ÀڷḦ ó¸®ÇÏ´Â °úÁ¤. ÀÔ·ÂÇÊÅʹ Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö·Î º¸³»´Â
-ÀڷḦ ó¸®ÇÏ°í, Ãâ·ÂÇÊÅÍ´Â ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³¾ ¹®¼­¸¦
-ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î, <code>INCLUDES</code> Ãâ·ÂÇÊÅÍ´Â ¹®¼­ÀÇ
-<a href="#ssi">Server Side Includes</a>¸¦ ó¸®ÇÑ´Ù. <br />
-Âü°í: <a href="filter.html">ÇÊÅÍ</a></dd>
-
-<dt><a name="fully-qualifieddomain-name">¿ÏÀüÇÑ µµ¸ÞÀθí
-(Fully-Qualified Domain-Name)</a> <a name="fqdn">(FQDN)</a></dt>
-<dd>IP ÁÖ¼Ò¿¡ ´ëÀÀÇÏ´Â, È£½ºÆ®¸í°ú µµ¸ÞÀθíÀ¸·Î ±¸¼ºµÈ ³×Æ®¿÷
-½ÇüÀÇ À¯ÀÏÇÑ À̸§. ¿¹¸¦ µé¾î, <code>www</code>°¡ È£½ºÆ®¸íÀÌ°í
-<code>example.com</code>ÀÌ µµ¸ÞÀθíÀ϶§,
-<code>www.example.com</code>Àº ¿ÏÀüÇÑ µµ¸ÞÀθíÀÌ´Ù.</dd>
-
-<dt><a name="handler">Çڵ鷯 (Handler)</a></dt> <dd>ÆÄÀÏÀ»
-¿äûÇÒ¶§ ¼öÇàÇÏ´Â ÀÛ¾÷¿¡ ´ëÇÑ ¾ÆÆÄÄ¡ ³»ºÎ Ç¥Çö. ÀϹÝÀûÀ¸·Î ÆÄÀÏÀº
-ÆÄÀÏ Á¾·ù¿¡ µû¶ó ¾Ï¹¬ÀûÀÎ Çڵ鷯¸¦ °¡Áø´Ù. º¸Åë ¸ðµç ÆÄÀÏÀº
-¼­¹ö°¡ °£´ÜÈ÷ ¼­ºñ½ºÇÏÁö¸¸, ¾î¶² ÆÄÀÏ Á¾·ù´Â µû·Î
-"󸮵ȴÙ(handled)". ¿¹¸¦ µé¾î, <code>cgi-script</code> Çڵ鷯´Â
-<a href="#cgi">CGI</a>·Î ó¸®ÇÒ ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù.<br />
-Âü°í: <a href="handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></dd>
-
-<dt><a name="header">Çì´õ (Header)</a></dt>
-<dd><a href="#http">HTTP</a> ¿äû°ú ÀÀ´ä¿¡¼­ ½ÇÁ¦ ³»¿ë ÀÌÀü¿¡
-º¸³»´Â ºÎºÐÀ¸·Î ³»¿ëÀ» ¼³¸íÇÏ´Â Á¤º¸°¡ ÀÖ´Ù.</dd>
-
-<dt><a name=".htaccess">.htaccess</a></dt> <dd>À¥¹®¼­µé ¾È¿¡ ÀÖ´Â
-<a href="#configurationfile">¼³Á¤ÆÄÀÏ (configuration file)</a>·Î,
-¼³Á¤ <a href="#directive">Áö½Ã¾î (directive)</a>¸¦ ÀÚ½ÅÀÌ À§Ä¡ÇÑ
-µð·ºÅ丮¿Í ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡ Àû¿ëÇÑ´Ù. À̸§°ú ´Þ¸® ÀÌ
-ÆÄÀÏ¿¡¼­´Â ´Ü¼øÇÑ Á¢±ÙÁ¦¾î Áö½Ã¾î¿Ü¿¡ °ÅÀÇ ¸ðµç Á¾·ùÀÇ Áö½Ã¾î¸¦
-»ç¿ëÇÒ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="configuring.html">¼³Á¤ÆÄÀÏ</a></dd>
-
-<dt><a name="httpd.conf">httpd.conf</a></dt>
-<dd>¾ÆÆÄÄ¡ ÁÖ <a href="#configurationfile">¼³Á¤ÆÄÀÏ (configuration
-file)</a>. ±âº»ÀûÀÎ À§Ä¡´Â
-<code>/usr/local/apache2/conf/httpd.conf</code>ÀÌÁö¸¸, ½ÇÇàÇÒ¶§
-ȤÀº ÄÄÆÄÀ϶§ ¼³Á¤À¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="configuring.html">¼³Á¤ÆÄÀÏ</a></dd>
-
-<dt><a name="hypertexttransferprotocol">HyperText Transfer
-Protocol</a> <a name="http">(HTTP)</a></dt> <dd>¿ùµå¿ÍÀ̵åÀ¥¿¡¼­
-»ç¿ëÇϴ ǥÁØ Àü¼Û ÇÁ·ÎÅäÄÝ. ¾ÆÆÄÄ¡´Â
-<a href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>¿¡¼­
-Á¤ÀÇÇÑ HTTP/1.1À̶ó´Â ÇÁ·ÎÅäÄÝÀÇ 1.1 ¹öÀüÀ» ±¸ÇöÇÑ´Ù.</dd>
-
-<dt><a name="https">HTTPS</a></dt>
-<dd>¿ùµåÈ­À̵åÀ¥ÀÇ Ç¥ÁØ ¾ÏÈ£Åë½Å ¹æ¹ý, HyperText Transport
- Protocol (Secure). »ç½Ç ¹Ø´Ü¿¡ <a name="ssl">SSL</a>À»
- »ç¿ëÇÑ HTTPÀÌ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="method">¸Þ½áµå (Method)</a></dt> <dd>Ŭ¶óÀ̾ðÆ®°¡
-º¸³»´Â <a href="#http">HTTP</a> ¿äûÁÙÀÌ
-ÀÚ¿ø¿¡ ¼öÇàÇϵµ·Ï Áö½ÃÇÑ Çൿ. HTTP ¸Þ½áµå¿¡´Â <code>GET</code>,
-<code>POST</code>, <code>PUT</code> µîÀÌ ÀÖ´Ù.</dd>
-
-<dt><a name="messagedigest">¸Þ½ÃÁö ¿ä¾à (Message Digest)</a></dt>
-<dd>¸Þ½ÃÁö ³»¿ëÀÌ Àü¼ÛÁß º¯°æµÇÁö ¾Ê¾ÒÀ½À» Áõ¸íÇϱâÀ§ÇÑ
- ¸Þ½ÃÁöÀÇ Çؽ¬.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="mime-type">MIME-type</a></dt> <dd>Àü¼ÛÇÒ ¹®¼­ÀÇ
-Á¾·ù¸¦ ¼³¸íÇÏ´Â ¹æ½Ä. Multipurpose Internet Mail Extensions
-Çü½ÄÀ» ºô·Á¿Ô±â¶§¹®¿¡ ÀÌ·¸°Ô À̸§À» Áö¾ú´Ù. ½½·¡½¬¸¦ »çÀÌ¿¡
-µÐ major type°ú minor typeÀ¸·Î ÀÌ·ç¾îÁø´Ù. ¿¹¸¦ µé¸é,
-<code>text/html</code>, <code>image/gif</code>,
-<code>application/octet-stream</code> µîÀÌ´Ù. MIME-typeÀº HTTPÀÇ
-<code>Content-Type</code> <a href="#header">Çì´õ (header)</a>·Î
-Àü¼ÛÇÑ´Ù.<br /> Âü°í: <a href="mod/mod_mime.html">mod_mime</a></dd>
-
-<dt><a name="module">¸ðµâ (Module)</a></dt> <dd>ÇÁ·Î±×·¥ÀÇ µ¶¸³µÈ
-ºÎºÐ. ¸¹Àº ¾ÆÆÄÄ¡ ±â´ÉÀº ´ç½ÅÀÌ Æ÷ÇÔ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¸ðµâ¿¡
-µé¾îÀÖ´Ù. ¾ÆÆÄÄ¡ httpd ½ÇÇàÆÄÀÏ°ú °°ÀÌ ÄÄÆÄÀÏÇÑ ¸ðµâÀ» <em>Á¤Àû
-¸ðµâ</em>À̶ó°í Çϸç, µû·Î ºÐ¸®µÇ¾î ½ÇÇà½Ã ¼±ÅÃÀûÀ¸·Î ÀоîµéÀÏ
-¼ö ÀÖ´Â ¸ðµâÀ» <em>µ¿Àû ¸ðµâ</em> ȤÀº <a href="#dso">DSO</a>¶ó°í
-ÇÑ´Ù. ±âº»ÀûÀ¸·Î Æ÷ÇÔÇÏ´Â ¸ðµâÀ» <em>base ¸ðµâ</em>À̶ó°í ÇÑ´Ù.
-¾ÆÆÄÄ¡ À¥¼­¹ö <a href="#tarball">Ÿº¼ (tarball)</a>°ú °°ÀÌ
-¹èÆ÷µÇÁö´Â ¾ÊÁö¸¸ ¾ÆÆÄÄ¡¿¡´Â ¸¹Àº ¸ðµâµéÀÌ ÀÖ´Ù. À̵éÀ»
-<em>Á¦»ïÀÚ°¡ ¸¸µç(third-party) ¸ðµâ</em>À̶ó°í ÇÑ´Ù.<br />
-Âü°í: <a href="mod/">¸ðµâ ¸ñ·Ï</a></dd>
-
-<dt><a name="modulemagicnumber">¸ðµâ ¸¶¹ý¼ö (Module Magic Number)</a>
-(<a name="mmn">MMN</a>)</dt>
-<dd>¸ðµâ ¸¶¹ý¼ö´Â ¾ÆÆÄÄ¡ ¼Ò½ºÄڵ尡 Á¤ÀÇÇÑ »ó¼ö·Î, ¸ðµâÀÇ
-ÀÌÁøȣȯ¼º°ú °ü·ÃÀÌ ÀÖ´Ù. ¸ðµâ ¸¶¹ý¼ö´Â ÀÌÁøȣȯ¼ºÀ» ´õ ÀÌ»ó º¸ÀåÇÒ
-¼ö ¾øµµ·Ï ¾ÆÆÄÄ¡ ³»ºÎ ±¸Á¶³ª ÇÔ¼ö È£Ãâ, ´Ù¸¥ API ÀϺΰ¡ º¯°æµÈ
-°æ¿ì¿¡ ¹Ù²ï´Ù. MMNÀÌ º¯Çϸé Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀº ¸ðµÎ ÃÖ¼ÒÇÑ ´Ù½Ã
-ÄÄÆÄÀÏµÇ¾ß ÇÑ´Ù. »õ ¾ÆÆÄÄ¡ ¹öÀü¿¡ ¸Âµµ·Ï Á¶±Ý ¼öÁ¤ÇؾßÇÒ °æ¿ìµµ
-ÀÖ´Ù.
-</dd>
-
-<dt><a name="openssl">OpenSSL</a></dt>
-<dd>SSL/TLS¸¦ À§ÇÑ ¿ÀǼҽº µµ±¸<br />
- Âü°í <a href="http://www.openssl.org/">http://www.openssl.org/</a></dd>
-
-<dt><a name="passphrase">Pass Phrase</a></dt> <dd>°³ÀÎÅ° ÆÄÀÏÀ»
-º¸È£ÇÏ´Â ¹®±¸. ÀÎÁõÇÏÁö¾ÊÀº »ç¿ëÀÚ°¡ ÀÌ °³ÀÎÅ° ÆÄÀÏÀ»
-»ç¿ëÇÏ¿© ¾ÏȣȭÇÏÁö ¸øÇϵµ·Ï ÇÑ´Ù. º¸Åë <a name="cipher">¾ÏÈ£±â
-(Ciphers)</a>°¡ »ç¿ëÇÏ´Â ºñ¹Ð½º·± ¾ÏÈ£/Çص¶ Å°ÀÌ´Ù.<br /> Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="plaintext">Æò¹® (Plaintext)</a></dt>
-<dd>¾ÏȣȭÇÏÁö ¾ÊÀº ±Û.</dd>
-
-<dt><a name="privatekey">°³ÀÎÅ° (Private Key)</a></dt> <dd>¹ÞÀº
-ÀڷḦ Çص¶ÇÏ°í º¸³»´Â ÀڷḦ ¼­¸íÇϱâÀ§ÇÑ <a name="publickeycryptography">°ø°³Å° ¾Ïȣȭ (Public Key
-Cryptography)</a> ½Ã½ºÅÛÀÇ ¾ÏȣŰ.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="proxy">ÇÁ·Ï½Ã (Proxy)</a></dt> <dd>Ŭ¶óÀ̾ðÆ®¿Í
-<em>½ÇÁ¦ ¼­¹ö</em> »çÀÌ¿¡ ÀÖ´Â Áß°£ ¼­¹ö. Ŭ¶óÀ̾ðÆ®¿¡°Ô ¿äûÀ»
-¹Þ¾Æ ½ÇÁ¦ ¼­¹ö·Î º¸³»°í, ½ÇÁ¦ ¼­¹ö¿¡°Ô¼­ ¹ÞÀº ÀÀ´äÀ» ´Ù½Ã
-Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³½´Ù. ¿©·¯ Ŭ¶óÀ̾ðÆ®°¡ °°Àº ³»¿ëÀ» ¿äûÇϸé
-ÇÁ·Ï½Ã´Â ¸Å¹ø ¼­¹ö¿¡ ¿äûÇÏÁö¾Ê°í ij½¬¿¡ ÀúÀåµÈ ³»¿ëÀ» »ç¿ëÇÏ¿©
-ÀÀ´ä½Ã°£À» ÁÙÀÏ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="mod/mod_proxy.html">mod_proxy</a></dd>
-
-<dt><a name="publickey">°ø°³Å° (Public Key)</a></dt> <dd><a name="publickeycryptography">°ø°³Å° ¾Ïȣȭ (Public Key
-Cryptography)</a> ½Ã½ºÅÛ¿¡¼­ Å°ÀÇ ¼ÒÀ¯ÀÚ¿¡°Ô º¸³»´Â ¹®±¸¸¦ ¾ÏȣȭÇϰųª
-¼ÒÀ¯ÀÚ°¡ ¸¸µç ¼­¸íÀ» Ç®±âÀ§ÇÑ °ø°³µÈ Å°.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="publickeycryptography">°ø°³Å° ¾Ïȣȭ (Public Key
-Cryptography)</a></dt>
-<dd>¾ÏÈ£¿Í Çص¶¿¡ ¼­·Î ´Ù¸¥ Å°¸¦ »ç¿ëÇÏ´Â ºñ´ëĪ(asymmetric)
-¾Ïȣȭ ½Ã½ºÅÛÀÇ ¿¬±¸ ¹× È°¿ë. ¾ÏÈ£¿Í Çص¶¿¡ »ç¿ëÇÏ´Â µÎ°³ÀÇ Å°´Â
-Å°½Ö(key pair)À» ÀÌ·é´Ù. ºñ´ëĪ ¾Ïȣȭ¶ó°íµµ ºÎ¸¥´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="regularexpresion">Á¤±ÔÇ¥Çö½Ä (Regular Expression)</a> <a name="regex">(Regex)</a></dt> <dd>±ÛÀÇ ÆÐÅÏÀ» ±â¼úÇÏ´Â ¹æ½Ä.
-¿¹¸¦ µé¾î, "¹®ÀÚ A·Î ½ÃÀÛÇÏ´Â ¸ðµç ´Ü¾î", "¼ýÀÚ 10°³·ÎµÈ ÀüÈ­¹øÈ£",
-½ÉÁö¾î "½°Ç¥°¡ µÎ°³ÀÖ°í ´ë¹®ÀÚ Q°¡ ¾ø´Â ¹®Àå" µîÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.
-Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¸é ¸Å¿ì À¯¿¬ÇÏ°Ô ÆÄÀÏÀ̳ª ÀÚ¿ø¿¡ ¾î¶² ¼ºÁúÀ» Àû¿ëÇÒ
-¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, "images"¶õ µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â ¸ðµç .gif¿Í
-.jpg ÆÄÀÏÀº "<code>/images/.*(jpg|gif)$</code>"·Î ÁöĪÇÒ ¼ö
-ÀÖ´Ù. ¾ÆÆÄÄ¡´Â <a href="http://www.pcre.org/">PCRE</a> ¶óÀ̺귯¸®¸¦
-»ç¿ëÇÏ¿© Perlȣȯ Á¤±ÔÇ¥Çö½ÄÀ» Áö¿øÇÑ´Ù.</dd>
-
-<dt><a name="reverseproxy">¿ªÇÁ·Ï½Ã (Reverse Proxy)</a></dt>
-<dd>Ŭ¶óÀ̾ðÆ®¿¡°Ô <em>½ÇÁ¦ ¼­¹ö</em>ó·³ º¸ÀÌ´Â <a href="#proxy">ÇÁ·Ï½Ã (proxy)</a> ¼­¹ö. º¸¾È»ó ÀÌÀ¯ ȤÀº ºÎÇϸ¦
-ºÐ»êÇϱâÀ§ÇØ Å¬¶óÀ̾ðÆ®¿¡°Ô ½ÇÁ¦ ¼­¹ö¸¦ ¼û±æ¶§ À¯¿ëÇÏ´Ù.</dd>
-
-<dt><a name="securesocketslayer">Secure Sockets Layer</a> <a name="ssl">(SSL)</a></dt> <dd>Netscape Communications»ç°¡ TCP/IP
-³×Æ®¿÷ÀÇ ÀϹÝÀûÀÎ Åë½Å ÀÎÁõ°ú ¾Ïȣȭ¸¦ À§ÇØ ¸¸µç ÇÁ·ÎÅäÄÝ.
-°¡Àå ÀϹÝÀûÀÎ ¿ëµµ´Â <em>HTTPS</em> (HyperText Transfer Protocol
-(HTTP) over SSL)ÀÌ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="serversideincludes">Server Side Includes</a> <a name="ssi">(SSI)</a></dt> <dd>HTML ÆÄÀÏ ¾È¿¡ ó¸®Áö½Ã¾î¸¦ Æ÷ÇÔÇÏ´Â
-±â¼ú.<br /> Âü°í: <a href="howto/ssi.html">Server Side Includes ¼Ò°³</a></dd>
-
-<dt><a name="session">¼¼¼Ç (Session)</a></dt>
-<dd>ÀϹÝÀûÀ¸·Î Åë½ÅÀÇ »óȲ(context) Á¤º¸.</dd>
-
-<dt><a name="ssleay">SSLeay</a></dt>
-<dd>Eric A. YoungÀÌ °³¹ßÇÑ ¿ø·¡ SSL/TLS ±¸Çö ¶óÀ̺귯¸®</dd>
-
-<dt><a name="symmetriccryptophraphy">´ëĪÀû ¾ÏÈ£¹ý (Symmetric
-Cryptography)</a></dt>
-<dd>¾ÏÈ£¿Í Çص¶ ÀÛ¾÷¿¡ °°Àº ¾Ïȣ۸¦ »ç¿ëÇÏ´Â <em>¾ÏÈ£±â
- (Ciphers)</em>ÀÇ ¿¬±¸ ¹× È°¿ë.<br />
-Âü°í: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="tarball">Ÿº¼ (Tarball)</a></dt>
-<dd><code>tar</code> µµ±¸¸¦ »ç¿ëÇÏ¿© ÆÄÀϵéÀ» ¸ðÀº ¹­À½. ¾ÆÆÄÄ¡´Â
-tar ÆÄÀÏÀ» ¾ÐÃàÇϰųª pkzipÀ¸·Î ¾ÐÃàÇÏ¿© ¹èÆ÷µÈ´Ù.</dd>
-
-<dt><a name="transportlayersecurity">Transport Layer Security</a> <a name="tls">(TLS)</a></dt> <dd>ÀÎÅͳݱâ¼ú °ü·Ã ±¹Á¦Ç¥ÁØÈ­±â±¸(Internet
-Engineering Task Force, IETF)°¡ TCP/IP ³×Æ®¿÷ÀÇ ÀϹÝÀûÀÎ Åë½Å
-ÀÎÁõ°ú ¾Ïȣȭ¸¦ À§ÇØ ¸¸µç SSLÀÇ ÈÄ¼Ó ÇÁ·ÎÅäÄÝ. TLS ¹öÀü 1Àº
-SSL ¹öÀü 3°ú °ÅÀÇ À¯»çÇÏ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="uniformresourcelocator">Uniform Resource Locator</a>
-<a name="url">(URL)</a></dt> <dd>ÀÎÅͳݿ¡ ÀÖ´Â ÀÚ¿øÀÇ À̸§/ÁÖ¼Ò.
-Á¤½ÄÀ¸·Î´Â <a href="#uniformresourceidentifier">Uniform Resource
-Identifier</a>¶ó°í ÇÏ´Â °ÍÀÇ ÀÏ»óÀûÀÎ ºñ°ø½Ä ¿ë¾î´Ù. º¸Åë URLÀº
-<code>http</code>³ª <code>https</code>°°Àº ½ºÅ´(scheme), È£½ºÆ®¸í,
-°æ·Î·Î ±¸¼ºµÈ´Ù. ÀÌ ÆäÀÌÁöÀÇ URLÀº
-<code>http://httpd.apache.org/docs-2.1/glossary.html</code>ÀÌ´Ù.</dd>
-
-<dt><a name="uniformresourceidentifier">Uniform Resource Identifier</a>
-<a name="URI">(URI)</a></dt> <dd>Ãß»óÀûÀÎ ÀÚ¿øÀ̳ª ½ÇÁ¦ ÀÚ¿øÀ»
-ÁöĪÇϱâÀ§ÇÑ °£°áÇÑ ¹®ÀÚ¿­. °ø½ÄÀûÀ¸·Î <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>¿¡¼­ Á¤ÀÇÇÑ´Ù.
-¿ùµå¿ÍÀ̵åÀ¥¿¡¼­ »ç¿ëÇÏ´Â URI¸¦ º¸Åë <a href="#url">URL</a>À̶ó°í
-ºÎ¸¥´Ù.</dd>
-
-<dt><a name="virtualhosting">°¡»óÈ£½ºÆ® (Virtual Hosting)</a></dt>
-<dd>¾ÆÆÄÄ¡ Çϳª·Î ¿©·¯ À¥»çÀÌÆ®¸¦ ¼­ºñ½ºÇϱâ. <em>IP °¡»óÈ£½ºÆ®</em>´Â
-À¥»çÀÌÆ®¸¶´Ù IP ÁÖ¼Ò°¡ ´Ù¸£´Ù. <em>À̸§±â¹Ý(name-based)
-°¡»óÈ£½ºÆ®</em>´Â È£½ºÆ®¸í¸¸À» »ç¿ëÇϹǷΠÇÑ IP ÁÖ¼Ò¿¡¼­ ¿©·¯
-»çÀÌÆ®¸¦ ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="vhosts/">¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</a></dd>
-
-<dt><a name="x.509">X.509</a></dt> <dd>±¹Á¦Àü±âÅë½Å¿¬ÇÕ(International
-Telecommunication Union, ITU-T)ÀÌ ±ÇÀåÇÏ´Â ÀÎÁõ¼­ ¾ç½Ä. SSL/TLS
-ÀÎÁõ¿¡¼­ »ç¿ëÇÑ´Ù.<br /> Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ko/glossary.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/glossary.xml b/docs/manual/glossary.xml
deleted file mode 100644
index 05a4fa670b..0000000000
--- a/docs/manual/glossary.xml
+++ /dev/null
@@ -1,386 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="glossary.xml.meta">
-
- <title>Glossary</title>
-
-<summary>
-<p>This glossary defines some of the common terminology related to
-Apache in particular, and web serving in general. More information
-on each concept is provided in the links.</p>
-</summary>
-
-<section id="definitions"><title>Definitions</title>
-
-<dl>
-<dt><a name="authentication">Authentication</a></dt> <dd>The positive
-identification of a network entity such as a server, a client, or a
-user.<br /> See: <a
-href="howto/auth.html">Authentication, Authorization, and Access
-Control</a></dd>
-
-<dt><a name="accesscontrol">Access Control</a></dt>
-<dd>The restriction of access to network realms. In an Apache context
- usually the restriction of access to certain <em>URLs</em>.<br />
-See: <a
-href="howto/auth.html">Authentication, Authorization, and Access
-Control</a></dd>
-
-<dt><a name="algorithm">Algorithm</a></dt>
-<dd>An unambiguous formula or set of rules for solving a problem in
-a finite number of steps. Algorithms for encryption are usually called
-<dfn>Ciphers</dfn>.</dd>
-
-<dt><a name="apacheextensiontool">APache eXtension Tool</a> <a
-name="apxs">(apxs)</a></dt> <dd>A perl script that aids in compiling <a
-href="#module">module</a> sources into Dynamic Shared Objects (<a
-href="#dso">DSO</a>s) and helps install them in the Apache Web
-server.<br /> See: <a
-href="programs/apxs.html">Manual Page: apxs</a></dd>
-
-<dt><a name="certificate">Certificate</a></dt>
-<dd>A data record used for authenticating network entities such
- as a server or a client. A certificate contains X.509 information pieces
- about its owner (called the subject) and the signing <a
- href="#certificationauthority">Certification Authority</a> (called the
- issuer), plus the owner's <a href="#publickey">public key</a> and the
- signature made by the CA. Network entities verify these signatures
- using CA certificates.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="certificationauthority">Certification Authority</a> <a
-name="ca">(CA)</a></dt> <dd>A trusted third party whose purpose is to
-sign certificates for network entities it has authenticated using
-secure means. Other network entities can check the signature to verify
-that a CA has authenticated the bearer of a certificate.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="certificatsigningrequest">Certificate Signing Request</a>
-<a name="csr">(CSR)</a></dt> <dd>An unsigned <a
-href="#certificate">certificate</a> for submission to a <a
-href="#certificationauthority">Certification Authority</a>, which signs it
-with the <a href="#privatekey">Private Key</a> of their CA
-<em>Certificate</em>. Once the CSR is signed, it becomes a real
-certificate.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-
-<dt><a name="cipher">Cipher</a></dt> <dd>An algorithm or system for
-data encryption. Examples are DES, IDEA, RC4, etc.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="ciphertext">Ciphertext</a></dt> <dd>The result after <a
-href="#plaintext">Plaintext</a> is passed through a <a
-href="#cipher">Cipher</a>.<br /> See: <a href="ssl/">SSL/TLS
-Encryption</a></dd>
-
-<dt><a name="commongatewayinterface">Common Gateway Interface</a> <a
-name="cgi">(CGI)</a></dt> <dd>A standard definition for an interface
-between a web server and an external program that allows the external
-program to service requests. The interface was originally defined by
-<a href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a> but
-there is also an <a href="http://cgi-spec.golux.com/">RFC
-project</a>.<br />
-See: <a href="howto/cgi.html">Dynamic Content with CGI</a></dd>
-
-
-<dt><a name="configurationdirective">Configuration Directive</a></dt>
-<dd>See: <a href="#directive">Directive</a></dd>
-
-<dt><a name="configurationfile">Configuration File</a></dt>
-<dd>A text file containing <a href="#directive">Directives</a>
-that control the configuration of Apache.<br />
-See: <a href="configuring.html">Configuration Files</a></dd>
-
-<dt><a name="connect">CONNECT</a></dt> <dd>An HTTP <a
-href="#method">method</a> for proxying raw data channels over HTTP. It
-can be used to encapsulate other protocols, such as the SSL
-protocol.</dd>
-
-<dt><a name="context">Context</a></dt> <dd>An area in the <a
-href="#configurationfile">configuration files</a> where certain types
-of <a href="#directive">directives</a> are allowed.<br /> See: <a
-href="mod/directive-dict.html#Context">Terms
-Used to Describe Apache Directives</a></dd>
-
-<dt><a name="digitalsignature">Digital Signature</a></dt>
-<dd>An encrypted text block that validates a certificate or other file. A
- <a href="#certificationauthority">Certification Authority</a> creates a
- signature by generating a hash of the <em>Public Key</em> embedded in a
- <em>Certificate</em>, then encrypting the hash with its own <em>Private
- Key</em>. Only the CA's public key can decrypt the signature, verifying
- that the CA has authenticated the network entity that owns the
- <em>Certificate</em>.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="directive">Directive</a></dt> <dd>A configuration command
-that controls one or more aspects of Apache's behavior. Directives
-are placed in the <a href="#configurationfile">Configuration
-File</a><br /> See: <a href="mod/directives.html">Directive
-Index</a></dd>
-
-<dt><a name="dynamicsharedobject">Dynamic Shared Object</a> <a
-name="dso">(DSO)</a></dt> <dd><a href="#module">Modules</a> compiled
-separately from the Apache httpd binary that can be loaded on-demand.<br />
-See: <a href="dso.html">Dynamic Shared Object Support</a></dd>
-
-<dt><a name="environmentvariable">Environment Variable</a> <a
-name="env-variable">(env-variable)</a></dt>
-<dd>Named variables managed by the operating system shell
-and used to store information and communicate between programs. Apache also
-contains internal variables that are referred to as environment variables,
-but are stored in internal Apache structures, rather than in the
-shell environment.<br />
-See: <a href="env.html">Environment Variables in Apache</a></dd>
-
-<dt><a name="export-crippled">Export-Crippled</a></dt>
-<dd>Diminished in cryptographic strength (and security) in order to comply
- with the United States' Export Administration Regulations (EAR).
- Export-crippled cryptographic software is limited to a small key size,
- resulting in <em>Ciphertext</em> which usually can be decrypted by brute
- force.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="filter">Filter</a></dt> <dd>A process that is applied to
-data that is sent or received by the server. Input filters process
-data sent by the client to the server, while output filters process
-documents on the server before they are sent to the client. For
-example, the <code>INCLUDES</code> output filter processes documents
-for <a href="#ssi">Server Side Includes</a>.<br /> See: <a
-href="filter.html">Filters</a></dd>
-
-<dt><a name="fully-qualifieddomain-name">Fully-Qualified
-Domain-Name</a> <a name="fqdn">(FQDN)</a></dt> <dd>The unique name of
-a network entity, consisting of a hostname and a domain name that can
-resolve to an IP address. For example, <code>www</code> is a hostname,
-<code>example.com</code> is a domain name, and
-<code>www.example.com</code> is a fully-qualified domain name.</dd>
-
-<dt><a name="handler">Handler</a></dt> <dd>An internal Apache
-representation of the action to be performed when a file is
-called. Generally, files have implicit handlers, based on the file
-type. Normally, all files are simply served by the server, but certain
-file types are "handled" separately. For example, the
-<code>cgi-script</code> handler designates files to be processed as <a
-href="#cgi">CGIs</a>.<br />
-See: <a href="handler.html">Apache's Handler Use</a></dd>
-
-<dt><a name="header">Header</a></dt>
-<dd>The part of the <a href="#http">HTTP</a> request and response that
-is sent before the actual content, and that contains meta-information
-describing the content.</dd>
-
-<dt><a name=".htaccess">.htaccess</a></dt> <dd>A <a
-href="#configurationfile">configuration file</a> that is placed inside
-the web tree and applies configuration <a
-href="#directive">directives</a> to the directory where it is placed
-and all sub-directories. Despite its name, this file can hold almost
-any type of directive, not just access-control directives.<br />
-See: <a href="configuring.html">Configuration Files</a></dd>
-
-<dt><a name="httpd.conf">httpd.conf</a></dt>
-<dd>The main Apache <a href="#configurationfile">configuration file</a>.
-The default location is <code>/usr/local/apache2/conf/httpd.conf</code>,
-but it may be moved using run-time or compile-time configuration.<br />
-See: <a href="configuring.html">Configuration Files</a></dd>
-
-<dt><a name="hypertexttransferprotocol">HyperText Transfer
-Protocol</a> <a name="http">(HTTP)</a></dt> <dd>The standard
-transmission protocol used on the World Wide Web. Apache implements
-version 1.1 of the protocol, referred to as HTTP/1.1 and defined by <a
-href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>.</dd>
-
-<dt><a name="https">HTTPS</a></dt>
-<dd>The HyperText Transport Protocol (Secure), the standard encrypted
- communication mechanism on the World Wide Web. This is actually just HTTP
- over <a name="ssl">SSL</a>.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="method">Method</a></dt> <dd>In the context of <a
-href="#http">HTTP</a>, an action to perform on a resource, specified
-on the request line by the client. Some of the methods available in
-HTTP are <code>GET</code>, <code>POST</code>, and <code>PUT</code>.</dd>
-
-<dt><a name="messagedigest">Message Digest</a></dt>
-<dd>A hash of a message, which can be used to verify that the contents of
- the message have not been altered in transit.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="mime-type">MIME-type</a></dt> <dd>A way to describe the
-kind of document being transmitted. Its name comes from that fact
-that its format is borrowed from the Multipurpose Internet Mail
-Extensions. It consists of a major type and a minor type, separated
-by a slash. Some examples are <code>text/html</code>,
-<code>image/gif</code>, and <code>application/octet-stream</code>. In
-HTTP, the MIME-type is transmitted in the <code>Content-Type</code> <a
-href="#header">header</a>.<br /> See: <a
-href="mod/mod_mime.html">mod_mime</a></dd>
-
-<dt><a name="module">Module</a></dt> <dd>An independent part of a
-program. Much of Apache's functionality is contained in modules that
-you can choose to include or exclude. Modules that are compiled into
-the Apache httpd binary are called <em>static modules</em>, while
-modules that are stored separately and can be optionally loaded at
-run-time are called <em>dynamic modules</em> or <a
-href="#dso">DSOs</a>. Modules that are included by default are called
-<em>base modules</em>. Many modules are available for Apache that are
-not distributed as part of the Apache HTTP Server <a
-href="#tarball">tarball</a>. These are referred to as <em>third-party
-modules</em>.<br />
-See: <a href="mod/">Module Index</a></dd>
-
-<dt><a name="modulemagicnumber">Module Magic Number</a> (<a
-name="mmn">MMN</a>)</dt>
-<dd>
-Module Magic Number is a constant defined in the Apache source code
-that is associated with binary compatibility of modules. It is changed
-when internal Apache structures, function calls and other significant
-parts of API change in such a way that binary compatibility cannot be
-guaranteed any more. On MMN change, all third party modules have to be
-at least recompiled, sometimes even slightly changed in order to work
-with the new version of Apache.
-</dd>
-
-<dt><a name="openssl">OpenSSL</a></dt>
-<dd>The Open Source toolkit for SSL/TLS<br />
- see <a href="http://www.openssl.org/">http://www.openssl.org/</a></dd>
-
-<dt><a name="passphrase">Pass Phrase</a></dt> <dd>The word or phrase
-that protects private key files. It prevents unauthorized users from
-encrypting them. Usually it's just the secret encryption/decryption
-key used for <a name="cipher">Ciphers</a>.<br /> See: <a
-href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="plaintext">Plaintext</a></dt>
-<dd>The unencrypted text.</dd>
-
-<dt><a name="privatekey">Private Key</a></dt> <dd>The secret key in a
-<a name="publickeycryptography">Public Key Cryptography</a> system,
-used to decrypt incoming messages and sign outgoing ones.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="proxy">Proxy</a></dt> <dd>An intermediate server that
-sits between the client and the <em>origin server</em>. It accepts
-requests from clients, transmits those requests on to the origin
-server, and then returns the response from the origin server to the
-client. If several clients request the same content, the proxy
-can deliver that content from its cache, rather than requesting it
-from the origin server each time, thereby reducing response time.<br />
-See: <a href="mod/mod_proxy.html">mod_proxy</a></dd>
-
-<dt><a name="publickey">Public Key</a></dt> <dd>The publicly
-available key in a <a name="publickeycryptography">Public Key
-Cryptography</a> system, used to encrypt messages bound for its owner
-and to decrypt signatures made by its owner.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="publickeycryptography">Public Key Cryptography</a></dt>
-<dd>The study and application of asymmetric encryption systems, which
-use one key for encryption and another for decryption. A corresponding
-pair of such keys constitutes a key pair. Also called Asymmetric
-Cryptography.<br /> See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="regularexpresion">Regular Expression</a> <a
-name="regex">(Regex)</a></dt> <dd>A way of
-describing a pattern in text - for example, "all the words that begin with the
-letter A" or "every 10-digit phone number" or even "Every sentence
-with two commas in it, and no capital letter Q". Regular expressions
-are useful in Apache because they let you apply certain
-attributes against collections of files or resources in very flexible
-ways - for example, all .gif and .jpg files under any "images"
-directory could be written as "<code>/images/.*(jpg|gif)$</code>".
-Apache uses Perl Compatible Regular Expressions provided by the
-<a href="http://www.pcre.org/">PCRE</a> library.</dd>
-
-<dt><a name="reverseproxy">Reverse Proxy</a></dt> <dd>A <a
-href="#proxy">proxy</a> server that appears to the client as if it is
-an <em>origin server</em>. This is useful to hide the real origin
-server from the client for security reasons, or to load balance.</dd>
-
-<dt><a name="securesocketslayer">Secure Sockets Layer</a> <a
-name="ssl">(SSL)</a></dt> <dd>A protocol created by Netscape
-Communications Corporation for general communication authentication
-and encryption over TCP/IP networks. The most popular usage is
-<em>HTTPS</em>, i.e. the HyperText Transfer Protocol (HTTP) over SSL.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="serversideincludes">Server Side Includes</a> <a
-name="ssi">(SSI)</a></dt> <dd>A technique for embedding processing
-directives inside HTML files.<br /> See: <a
-href="howto/ssi.html">Introduction to Server Side Includes</a></dd>
-
-<dt><a name="session">Session</a></dt>
-<dd>The context information of a communication in general.</dd>
-
-<dt><a name="ssleay">SSLeay</a></dt>
-<dd>The original SSL/TLS implementation library developed by
- Eric A. Young</dd>
-
-<dt><a name="symmetriccryptophraphy">Symmetric Cryptography</a></dt>
-<dd>The study and application of <em>Ciphers</em> that use a single secret key
- for both encryption and decryption operations.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="tarball">Tarball</a></dt>
-<dd>A package of files gathered together using the <code>tar</code>
-utility. Apache distributions are stored in compressed tar archives
-or using pkzip.</dd>
-
-<dt><a name="transportlayersecurity">Transport Layer Security</a> <a
-name="tls">(TLS)</a></dt> <dd>The successor protocol to SSL, created
-by the Internet Engineering Task Force (IETF) for general
-communication authentication and encryption over TCP/IP networks. TLS
-version 1 and is nearly identical with SSL version 3.<br />
-See: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="uniformresourcelocator">Uniform Resource Locator</a> <a
-name="url">(URL)</a></dt> <dd>The name/address of a resource on the
-Internet. This is the common informal term for what is formally
-called a <a href="#uniformresourceidentifier">Uniform Resource
-Identifier</a>. URLs are usually made up of a scheme, like
-<code>http</code> or <code>https</code>, a hostname, and a path. A
-URL for this page is
-<code>http://httpd.apache.org/docs-2.1/glossary.html</code>.</dd>
-
-<dt><a name="uniformresourceidentifier">Uniform Resource Identifier</a> <a
-name="URI">(URI)</a></dt> <dd>A compact string of characters for
-identifying an abstract or physical resource. It is formally defined
-by <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>.
-URIs used on the world-wide web are commonly referred to
-as <a href="#url">URLs</a>.</dd>
-
-<dt><a name="virtualhosting">Virtual Hosting</a></dt> <dd>Serving
-multiple websites using a single instance of Apache. <em>IP virtual
-hosting</em> differentiates between websites based on their IP
-address, while <em>name-based virtual hosting</em> uses only the name
-of the host and can therefore host many sites on the same IP
-address.<br /> See: <a href="vhosts/">Apache Virtual Host
-documentation</a></dd>
-
-<dt><a name="x.509">X.509</a></dt> <dd>An authentication certificate
-scheme recommended by the International Telecommunication Union
-(ITU-T) which is used for SSL/TLS authentication.<br /> See: <a
-href="ssl/">SSL/TLS Encryption</a></dd>
-
-</dl>
-</section>
-</manualpage>
diff --git a/docs/manual/glossary.xml.es b/docs/manual/glossary.xml.es
deleted file mode 100644
index cb6cb75420..0000000000
--- a/docs/manual/glossary.xml.es
+++ /dev/null
@@ -1,430 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="glossary.xml.meta">
-
- <title>Glosario</title>
-
-<summary>
-<p>Este glosario define la terminolog&#237;a m&#225;s com&#250;n
-relacionada con Apache en particular y con los servidores web en
-general. En los enlaces que hay asociados a cada t&#233;rmino se puede
-encontrar informaci&#243;n m&#225;s detallada.</p>
-</summary>
-
-<section id="definitions"><title>Definiciones</title>
-
-<dl>
-<dt><a name="authentication">Autentificaci&#243;n</a></dt> <dd>La
-identificaci&#243;n positiva de una entidad de red tal como un
-servidor, un cliente, o un usuario.<br /> Consulte: <a
-href="howto/auth.html">Autentificaci&#243;n, Autorizaci&#243;n, y
-Control de Acceso</a></dd>
-
-<dt><a name="accesscontrol">Control de Acceso</a></dt> <dd>La
-restricci&#243;n en el acceso al entorno de una red. En el contexto de
-Apache significa normalmente la restricci&#243;n en el acceso a
-ciertas <em>URLs</em>.<br /> Consulte: <a
-href="howto/auth.html">Autentificaci&#243;n, Autorizaci&#243;n, y
-Control de Acceso</a></dd>
-
-<dt><a name="algorithm">Algoritmo</a></dt> <dd>Un proceso definido sin
-ambiguedades o un conjunto de reglas para solucionar un problema en un
-n&#250;mero finito de pasos. Los algoritmos para encriptar se llaman
-normalmente <dfn>algoritmos de cifrado</dfn>.</dd>
-
-<dt><a name="apacheextensiontool">Herramienta de extensi&#243;n de
-Apache</a> <a name="apxs">(apxs)</a></dt> <dd>Es un script escrito en
-Perl que ayuda a compilar el c&#243;digo fuente de algunos <a
-href="#module">m&#243;dulos</a> para convertirlos en Objetos Dinamicos
-Compartidos (<a href="#dso">DSO</a>s) y ayuda a instalarlos en el
-servidor web Apache.<br /> Consulte: <a
-href="programs/apxs.html">Paginas de Ayuda: apxs</a></dd>
-
-<dt><a name="certificate">Certificado</a></dt>
-
-<dd>Una informaci&#243;n que se almacena para autentificar entidades
- de red tales como un servidor o un cliente. Un certificado
- contiene piezas de informaci&#243;n X.509 sobre su poseedor
- (llamado sujeto) y sobre la <a
- href="#certificationauthority">Autoridad Certificadora</a>
- (llamada el expendedor) que lo firma, m&#225;s la <a
- href="#publickey">clave publica</a> del propietario y la firma de
- la AC. Las entidades de red verifican las firmas usando
- certificados de las AC.<br />
-
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="certificationauthority">Autoridad Certificadora</a> <a
-name="ca">(CA)</a></dt> <dd>Una entidad externa de confianza cuyo fin
-es firmar certificados para las entidades de red que ha autentificado
-usando medios seguros. Otras entidades de red pueden verificar la
-firma para comprobar que una Autoridad Certificadora ha autentificado
-al poseedor del certificado.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="certificatsigningrequest">Petici&#243;n de firma de
-Certificado</a> <a name="csr">(CSR)</a></dt> <dd>Es la petici&#243;n a
-una <a href="#certificationauthority">Autoridad Certificadora</a> para
-que firme un <a href="#certificate">certificado</a> a&#250;n sin
-firmar. La Autoridad Certificadora firma el <em>Certificado</em> con
-la <a href="#privatekey">Clave Privada</a> de su <a
-href="#certificate">certificado</a> de Autoridad Certificadora. Una
-vez que el CSR est&#225; firmado, se convierte en un aut&#233;ntico
-certificado.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-
-<dt><a name="cipher">Algoritmo de cifrado</a></dt> <dd>Es un algoritmo
-o sistema de encriptado de informaci&#243;n. Ejemplos de estos
-algoritmos son DES, IDEA, RC4, etc.<br /> Consulte: <a
-href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="ciphertext">Texto cifrado</a></dt> <dd>El resultado de
-haber aplicado a un <a href="#plaintext">texto sin cifrar</a> un <a
-href="#cipher">algoritmo de cifrado</a>.<br /> Consultar: <a
-href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="commongatewayinterface">Common Gateway Interface</a> <a
-name="cgi">(CGI)</a></dt> <dd>Una definici&#243;n est&#225;ndar para
-un interfaz entre un servidor web y un programa externo que permite
-hacer peticiones de servicio a los programas externos. Este interfaz
-fue definido originalmente por la <a
-href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a> pero
-tambien hay un proyecto <a
-href="http://cgi-spec.golux.com/">RFC</a>.<br /> Consulte: <a
-href="howto/cgi.html">Contenido Din&#225;mico con CGI</a></dd>
-
-
-<dt><a name="configurationdirective">Directivas de
-configuraci&#243;n</a></dt> <dd>Consulte: <a
-href="#directive">Directivas</a></dd>
-
-<dt><a name="configurationfile">Fichero de Configuraci&#243;n</a></dt>
-<dd>Un fichero de texto que contiene <a
-href="#directive">Directivas</a> que controlan la configuraci&#243;n
-de Apache.<br /> Consulte: <a href="configuring.html">Ficheros de
-Configuraci&#243;n</a></dd>
-
-<dt><a name="connect">CONNECT</a></dt> <dd>Un <a
-href="#method">m&#233;todo</a> de HTTP para hacer proxy a canales de
-datos sin usar HTTP. Puede usarse para encapsular otros protocolos,
-tales como el protocolo SSL.</dd>
-
-<dt><a name="context">Contexto</a></dt> <dd>Un &#225;rea en los <a
-href="#configurationfile">ficheros de configuraci&#243;n</a> donde
-est&#225;n permitidos ciertos tipos de <a
-href="#directive">directivas</a>.<br /> Consulte: <a
-href="mod/directive-dict.html#Context">Terminos usados para describir
-las directivas de Apache</a></dd>
-
-<dt><a name="digitalsignature">Firma Digital</a></dt> <dd>Un bloque de
-texto encriptado que verifica la validez de un certificado o de otro
-fichero. Una <a href="#certificationauthority">Autoridad
-Certificadora</a> crea una firma generando un hash a partir de la
-<em>Clave P&#250;blica</em> que lleva incorporada en un
-<em>Certificado</em>, despu&#233;s encriptando el hash con su propia
-<em>Clave Privada</em>. Solo las claves p&#250;blicas de las CAs
-pueden desencriptar la firma, verificando que la CA ha autentificado a
-la entidad de red propietaria del <em>Certificado</em>.<br />
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="directive">Directiva</a></dt> <dd>Un comando de
-configuraci&#243;n que controla uno o m&#225;s aspectos del
-comportamiento de Apache. Las directivas se ponen en el <a
-href="#configurationfile">Fichero de Configuraci&#243;n</a><br />
-Consulte: <a href="mod/directives.html">&#205;ndice de
-Directivas</a></dd>
-
-<dt><a name="dynamicsharedobject">Objetos Din&#225;micos
-Compartidos</a> <a name="dso">(DSO)</a></dt> <dd>Los <a
-href="#module">M&#243;dulos</a> compilados de forma separada al
-binario httpd de Apache se pueden cargar seg&#250;n se necesiten.<br
-/> Consulte: <a href="dso.html">Soporte de Objetos Din&#225;micos
-Compartidos</a></dd>
-
-<dt><a name="environmentvariable">Variable de Entorno</a> <a
-name="env-variable">(env-variable)</a></dt> <dd>Variables que
-gestionan el shell del sistema operativo y que se usan para guardar
-informaci&#243;n y para la comunicaci&#243;n entre programas. Apache
-tambi&#233;n contiene variables internas que son referidas como
-variables de entorno, pero que son almacenadas en las estructuras
-internas de Apache, en lugar de en el entorno del shell.<br />
-Consulte: <a href="env.html">Variables de entorno de Apache</a></dd>
-
-<dt><a name="export-crippled">Export-Crippled</a></dt>
-<dd>Disminuci&#243;n de la fortaleza criptogr&#225;fica (y seguridad)
-para cumplir con las Regulaciones sobre Exportaci&#243;n de la
-Administracci&#243;n de los Estados Unidos (EAR). El software
-criptogr&#225;fico Export-crippled est&#225; limitado a una clave de
-peque&#241;o tama&#241;o, de tal manera que el <em>texto cifrado</em>
-que se consigue con &#233;l, puede desencriptarse por fuerza bruta.<br
-/> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="filter">Filtro</a></dt> <dd>Un proceso que se aplica a la
-informaci&#243;n que es enviada o recibida por el servidor. Los
-ficheros de entrada procesan la informaci&#243;n enviada por un
-cliente al servidor, mientras que los filtros de salida procesan la
-informaci&#243;n en el servidor antes de envi&#225;rsela al
-cliente. Por ejemplo, el filtro de salida <code>INCLUDES</code>
-procesa documentos para <a href="#ssi">Server Side Includes</a>.<br />
-Consulte: <a href="filter.html">Filtros</a></dd>
-
-<dt><a name="fully-qualifieddomain-name">Nombre de dominio
-completamente qualificado</a> <a name="fqdn">(FQDN)</a></dt> <dd>El
-nombre &#250;nico de una entidad de red, que consiste en un nombre de
-host y un nombre de dominio que puede traducirse a una direcci&#243;n
-IP. Por ejemplo, <code>www</code> es un nombre de host,
-<code>example.com</code> es un nombre de dominio, y
-<code>www.example.com</code> es un nombre de dominio completamente
-qualificado.</dd>
-
-<dt><a name="handler">Handler</a></dt> <dd>Es una representaci&#243;n
-interna de Apache de una acci&#243;n a ser ejecutada cuando se llama a
-un fichero. Generalmente, los ficheros tienen un handler
-impl&#237;cito, basado en el tipo de fichero. Normalmente, todos los
-ficheros son simplemente servidos por el servidor, pero sobre algunos
-tipos de ficheros se ejecutan acciones complementarias. Por ejemplo,
-el handler <code>cgi-script</code> designa los ficheros a ser
-procesados como <a href="#cgi">CGIs</a>.<br /> Consulte: <a
-href="handler.html">Uso de Handlers en Apache</a></dd>
-
-<dt><a name="header">Cabecera</a></dt> <dd>La parte de la
-petici&#243;n y la respuesta <a href="#http">HTTP</a> que se
-env&#237;a antes del contenido propiamente dicho, y que contiene
-meta-informaci&#243;n describiendo el contenido.</dd>
-
-<dt><a name=".htaccess">.htaccess</a></dt> <dd>Un <a
-href="#configurationfile">fichero de configuraci&#243;n</a> que se
-pone dentro de la estructura de directorios del sitio web y aplica <a
-href="#directive">directivas</a> de configuraci&#243;n al directorio
-en el que est&#225; y a sus subdirectorios. A pesar de su nombre, este
-fichero puede contener cualquier tipo de directivas, no solo
-directivas de control de acceso.<br /> Consulte: <a
-href="configuring.html">Ficheros de Configuraci&#243;n</a></dd>
-
-<dt><a name="httpd.conf">httpd.conf</a></dt> <dd>Es el <a
-href="#configurationfile">fichero de configuraci&#243;n</a> principal
-de Apache. Su ubicaci&#243;n por defecto es
-<code>/usr/local/apache2/conf/httpd.conf</code>, pero puede moverse
-usando opciones de configuraci&#243;n al compilar o al iniciar
-Apache.<br /> Consulte: <a href="configuring.html">Ficheros de
-Configuraci&#243;n</a></dd>
-
-<dt><a name="hypertexttransferprotocol">Protocolo de Tranferencia de
-Hipertexto</a> <a name="http">(HTTP)</a></dt> <dd>Es el protocolo de
-transmisi&#243;n est&#225;dar usado en la World Wide Web. Apache
-implementa la versi&#243;n 1.1 de este protocolo, al que se hace
-referencia como HTTP/1.1 y definido por el <a
-href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>.</dd>
-
-<dt><a name="https">HTTPS</a></dt> <dd>Protocolo de transferencia de
-Hipertext (Seguro), es el mecanismo de comunicaci&#243;n encriptado
-est&#225;ndar en World Wide Web. En realidad es HTTP sobre <a
-name="ssl">SSL</a>.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="method">M&#233;todo</a></dt> <dd>En el contexto de <a
-href="#http">HTTP</a>, es una acci&#243;n a ejecutar sobre un recurso,
-especificado en la l&#237;neas de petici&#243;n por el cliente.
-Algunos de los metodos diponibles en HTTP son <code>GET</code>,
-<code>POST</code>, y <code>PUT</code>.</dd>
-
-<dt><a name="messagedigest">Message Digest</a></dt> <dd>Un hash de un
-mensaje, el cual pude ser usado para verificar que el contenido del
-mensaje no ha sido alterado durante la transmisi&#243;n.<br />
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="mime-type">MIME-type</a></dt> <dd>Una manera de describir
-el tipo de documento a ser transmitido. Su nombre viene del hecho de
-que su formato se toma de las Extensiones del Multipurpose Internet
-Mail. Consiste en dos componentes, uno principal y otro secundario,
-separados por una barra. Algunos ejemplos son <code>text/html</code>,
-<code>image/gif</code>, y <code>application/octet-stream</code>. En
-HTTP, el tipo MIME se transmite en la <a href="#header">cabecera</a>
-del <code>Tipo Contenido</code>.<br /> Consulte: <a
-href="mod/mod_mime.html">mod_mime</a></dd>
-
-<dt><a name="module">M&#243;dulo</a></dt> <dd>Una parte independiente
-de un programa. La mayor parte de la funcionalidad de Apache
-est&#225; contenida en m&#243;dulos que pueden incluirse o excluirse.
-Los m&#243;dulos que se compilan con el binario httpd de Apache se
-llaman <em>m&#243;dulos est&#225;ticos</em>, mientras que los que se
-almacenan de forma separada y pueden ser cargados de forma opcional,
-se llaman <em>m&#243;dulos dinamicos</em> o <a href="#dso">DSOs</a>.
-Los m&#243;dulos que est&#225;n incluidos por sefecto de llaman
-<em>m&#243;dulos base</em>. Hay muchos m&#243;dulos disponibles para
-Apache que no se distribuyen con la <a href="#tarball">tarball</a> del
-Servidor HTTP Apache . Estos m&#243;dulos son llamados
-<em>m&#243;dulos de terceros</em>.<br /> Consulte: <a
-href="mod/">&#205;ndice de M&#243;dulos</a></dd>
-
-<dt><a name="modulemagicnumber">N&#250;mero M&#225;gico de
-M&#243;dulo</a> (<a name="mmn">MMN</a>)</dt> <dd> El n&#250;mero
-m&#225;gico de m&#243;dulo es una constante definida en el c&#243;digo
-fuente de Apache que est&#225; asociado con la compatibilidad binaria
-de los m&#243;dulos. Ese n&#250;mero cambia cuando cambian las
-estructuras internas de Apache, las llamadas a funciones y otras
-partes significativas de la interfaz de programaci&#243;n de manera
-que la compatibilidad binaria no puede garantizarse sin cambiarlo. Si
-cambia el n&#250;mero m&#225;gico de m&#243;dulo, todos los
-m&#243;dulos de terceros tienen que ser al menos recompilados, y
-algunas veces, incluso hay que introducir ligeras modificaciones para
-que funcionen con la nueva versi&#243;n de Apache </dd>
-
-<dt><a name="openssl">OpenSSL</a></dt>
-<dd>El toolkit Open Source para SSL/TLS<br />
- see <a href="http://www.openssl.org/">http://www.openssl.org/</a></dd>
-
-<dt><a name="passphrase">Pass Phrase</a></dt> <dd>La palabra o frase
-que protege los archivos de clave privada. Evita que usuarios no
-autorizados los encripten. Normalmente es solo la clave de
-encriptado/desencriptado usada por los <a name="cipher">Algoritmos de
-Cifrado</a>.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="plaintext">Plaintext</a></dt>
-<dd>Un texto no encriptado.</dd>
-
-<dt><a name="privatekey">Clave Privada</a></dt> <dd>La clave secreta
-de un <a name="publickeycryptography">sistema criptogr&#225;fico de
-Clave P&#250;blica</a>, usada para desencriptar los mensajes entrantes
-y firmar los salientes.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="proxy">Proxy</a></dt> <dd>Un servidor intermedio que se
-pone entre el cliente y el <em>servidor de origen</em>. Acepta las
-peticiones de los clientes, las transmite al servidor de origen, y
-despu&#233;s devuelve la respuesta del servidor de origen al
-cliente. Si varios clientes piden el mismo contenido, el proxy sirve
-el contenido desde su cach&#233;, en lugar de pedirlo cada vez que lo
-necesita al servidor de origen, reduciendo con esto el tiempo de
-respuesta.<br /> Consulte: <a
-href="mod/mod_proxy.html">mod_proxy</a></dd>
-
-<dt><a name="publickey">Clave Publica</a></dt> <dd>La clave disponible
-p&#250;blicamente en un <a name="publickeycryptography">sistema
-criptogr&#225;fico de Clave P&#250;blica</a>, usado para encriptar
-mensajes destinados a su propietario y para desencriptar firmas hechas
-por su propietario.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="publickeycryptography">Criptogr&#225;fia de Clave
-P&#250;blica</a></dt> <dd>El estudio y aplicaci&#243;n de sistemas de
-encriptado asim&#233;tricos, que usa una clave para encriptar y otra
-para desencriptar. Una clave de cada uno de estos tipos constituye un
-par de claves. Tambien se llama Criptografia Asim&#233;trica.<br />
-Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="regularexpresion">Expresiones Regulares</a> <a
-name="regex">(Regex)</a></dt> <dd>Una forma de describir un modelo de
-texto - por ejemplo, "todas las palabras que empiezan con la letra "A"
-o "todos los n&#250;meros de tel&#233;fono que contienen 10
-d&#237;gitos" o incluso "Todas las frases entre comas, y que no
-contengan ninguna letra Q". Las Expresiones Regulares son utiles en
-Apache porque permiten aplicar ciertos atributos a colecciones de
-ficheros o recursos de una forma flexible - por ejemplo, todos los
-archivos .gif y .jpg que est&#233;n en un directorio "im&#225;genes"
-podr&#237;an ser escritos como "<code>/images/.*(jpg|gif)$</code>".
-Apache usa Expresiones Regulares compatibles con Perl gracias a la
-librer&#237;a <a href="http://www.pcre.org/">PCRE</a>.</dd>
-
-<dt><a name="reverseproxy">Reverse Proxy</a></dt> <dd>Es un servidor
-<a href="#proxy">proxy</a> que se presenta al cliente como si fuera un
-<em>servidor de origen</em>. Es &#250;til para esconder el
-aut&#233;ntico servidor de origen a los clientes por cuestiones de
-seguridad, o para equilibrar la carga.</dd>
-
-<dt><a name="securesocketslayer">Secure Sockets Layer</a> <a
-name="ssl">(SSL)</a></dt> <dd>Un protocolo creado por Netscape
-Communications Corporation para la autentificaci&#243;n en
-comunicaciones en general y encriptado sobre redes TCP/IP. Su
-aplicaci&#243;n m&#225;s popular es <em>HTTPS</em>, el Protocolo de
-Transferencia de Hipertexto (HTTP) sobre SSL.<br /> Consulte: <a
-href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="serversideincludes">Server Side Includes</a> <a
-name="ssi">(SSI)</a></dt> <dd>Una tecnica para incluir directivas de
-proceso en archivos HTML.<br /> Consulte: <a
-href="howto/ssi.html">Introducci&#243;n al Server Side
-Includes</a></dd>
-
-<dt><a name="session">Sesion</a></dt> <dd>Informaci&#243;n del
-contexto de una comunicaci&#243;n en general.</dd>
-
-<dt><a name="ssleay">SSLeay</a></dt> <dd>La implementaci&#243;n
-original de la librer&#237;a SSL/TLS desarrollada por Eric
-A. Young</dd>
-
-<dt><a name="symmetriccryptophraphy">Criptograf&#237;a
-Sim&#233;trica</a></dt> <dd>El estudio y aplicaci&#243;n de
-<em>Algoritmos de Cifrado</em> que usan una solo clave secreta tanto
-para encriptar como para desencriptar.<br /> Consulte: <a
-href="ssl/">Encriptado SSL/TLS</a></dd>
-
-<dt><a name="tarball">Tarball</a></dt> <dd>Un grupo de ficheros
-puestos en un solo paquete usando la utilidad <code>tar</code>. Las
-distribuciones Apache se almacenan en ficheros comprimidos con tar o
-con pkzip.</dd>
-
-<dt><a name="transportlayersecurity">Transport Layer Security</a> <a
-name="tls">(TLS)</a></dt> <dd>Es el sucesor del protocolo SSL, creado
-por el Internet Engineering Task Force (IETF) para la
-autentificaci&#243;n en comunicaciones en general y encriptado sobre
-redes TCP/IP. La versi&#243;n 1 de TLS es casi id&#233;ntica a la
-versi&#243;n 3 de SSL.<br /> Consulte: <a href="ssl/">Encriptado
-SSL/TLS</a></dd>
-
-<dt><a name="uniformresourcelocator">Localizador de Recursos
-Uniforme</a> <a name="url">(URL)</a></dt> <dd>El nombre de un recurso
-en Internet. Es la manera informal de decir lo que formalmente se
-llama un <a href="#uniformresourceidentifier">Identificador de
-Recursos Uniforme</a>. Las URLs est&#225;n compuestas normalmente por
-un esquema, tal como <code>http</code> o <code>https</code>, un nombre
-de host, y una ruta. Una URL para esta p&#225;gina es
-<code>http://httpd.apache.org/docs-2.1/glossary.html</code>.</dd>
-
-<dt><a name="uniformresourceidentifier">Identificador de Recursos
-Uniforme</a> <a name="URI">(URI)</a></dt> <dd>Una cadena de caracteres
-compacta para identificar un recurso f&#237;sico o abstracto. Se
-define formalmente en la <a
-href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>. Los URIs que
-se usan en world-wide web se refieren normalmente como <a
-href="#url">URLs</a>.</dd>
-
-<dt><a name="virtualhosting">Hosting Virtual</a></dt> <dd>Se trata de
-servir diferentes sitios web con una sola entidad de Apache. <em>El
-hosting virtual de IPs</em> diferencia los sitios web basandose en sus
-direcciones IP, mientras que el <em>hosting virtual basado en
-nombres</em> usa solo el nombre del host y de esta manera puede alojar
-muchos sitios web con la misma direcci&#243;n IP.<br /> Consulte: <a
-href="vhosts/">Documentaci&#243;n sobre Hosting Virtual en
-Apache</a></dd>
-
-<dt><a name="x.509">X.509</a></dt> <dd>Un esquema de certificado de
-autentificaci&#243;n recomendado por la International
-Telecommunication Union (ITU-T) que se usa en la autentificaci&#243;n
-SSL/TLS.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
-
-</dl>
-</section>
-</manualpage>
-
diff --git a/docs/manual/glossary.xml.ko b/docs/manual/glossary.xml.ko
deleted file mode 100644
index 3879cd21bc..0000000000
--- a/docs/manual/glossary.xml.ko
+++ /dev/null
@@ -1,373 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="glossary.xml.meta">
-
- <title>¿ë¾î</title>
-
-<summary>
-<p>ÀÌ ¹®¼­´Â À¥ ¼­ºñ½º ÀϹݿ¡ ´ëÇÑ, ƯÈ÷ ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ, ¿ë¾îµéÀ»
-Á¤ÀÇÇÑ´Ù. °¢ °³³ä¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ¸µÅ©¸¦ Âü°íÇ϶ó.
-<transnote>ÇöÀç ´Ü¾îÀÇ ¼ø¼­´Â ÇÑ±Û ¼ø¼­°¡ ¾Æ´Ï¶ó, ¿µ¹®ÀÚ
-¼ø¼­ÀÔ´Ï´Ù. ¿ë¾î¹ø¿ªÇ¥´Â <a
-href="http://www.whiterabbitpress.com/osp/apache/">¿©±â</a>¸¦
-Âü°íÇÏ±æ ¹Ù¶ø´Ï´Ù.</transnote></p>
-</summary>
-
-<section id="definitions"><title>Á¤ÀÇ</title>
-
-<dl>
-<dt><a name="authentication">ÀÎÁõ (Authentication)</a></dt>
-<dd>¼­¹ö, Ŭ¶óÀ̾ðÆ®, »ç¿ëÀÚ µî ³×Æ®¿÷ ½Çü¿¡ ´ëÇÑ
-È®ÀÎ.<br /> Âü°í: <a href="howto/auth.html">ÀÎÁõ, ±ÇÇѺο©,
-Á¢±ÙÁ¦¾î</a></dd>
-
-<dt><a name="accesscontrol">Á¢±ÙÁ¦¾î (Access Control)</a></dt>
-<dd>³×Æ®¿÷ ¿µ¿ª¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦ÇÑ. ¾ÆÆÄÄ¡¿¡¼­´Â º¸Åë ƯÁ¤
-<em>URL</em>ÀÇ Á¢±ÙÀ» Á¦ÇÑÇϱâÀ§ÇØ »ç¿ëÇÑ´Ù.<br /> Âü°í: <a
-href="howto/auth.html">ÀÎÁõ, ±ÇÇѺο©, Á¢±ÙÁ¦¾î</a></dd>
-
-<dt><a name="algorithm">¾Ë°í¸®Áò (Algorithm)</a></dt>
-<dd>À¯ÇÑÇÑ ´Ü°è¸¦ °ÅÃÄ ¹®Á¦¸¦ Ǫ´Â ¸íÈ®ÇÑ °ø½Ä ȤÀº ±ÔÄ¢µé.
-¾Ïȣȭ¸¦ À§ÇÑ ¾Ë°í¸®ÁòÀ» º¸Åë <dfn>¾ÏÈ£±â(Ciphers)</dfn>¶ó°í
-ºÎ¸¥´Ù.</dd>
-
-<dt><a name="apacheextensiontool">APache eXtension Tool</a>
-<a name="apxs">(apxs)</a></dt> <dd><a href="#module">¸ðµâ
-(module)</a> ¼Ò½º¸¦ µ¿Àû°øÀ¯°´Ã¼ (<a href="#dso">DSO</a>)·Î
-ÄÄÆÄÀÏÇÏ°í ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ ¼³Ä¡ÇÏ´Â ÀÛ¾÷À» µ½´Â perl
-½ºÅ©¸³Æ®.<br /> Âü°í: <a href="programs/apxs.html">Manpage:
-apxs</a></dd>
-
-<dt><a name="certificate">ÀÎÁõ¼­ (Certificate)</a></dt>
-<dd>¼­¹ö³ª Ŭ¶óÀ̾ðÆ®¿Í °°Àº ³×Æ®¿÷ ½Çü¸¦ ÀÎÁõÇÏ´Â ÀÚ·á.
- ÀÎÁõ¼­¿¡´Â ¼ÒÀ¯ÀÚ (subject¶ó°í ÇÔ), ¼­¸í <a
- href="#certificationauthority">ÀÎÁõ±â°ü (Certificate
- Authority)</a> (issuer¶ó°í ÇÔ), ¼ÒÀ¯ÀÚÀÇ <a
- href="#publickey">°ø°³Å°</a>, CA°¡ ¸¸µç ¼­¸í µî¿¡ ´ëÇÑ
- X.509 Á¤º¸°¡ ÀÖ´Ù. ³×Æ®¿÷ ½Çü´Â CA ÀÎÁõ¼­¸¦ »ç¿ëÇÏ¿©
- ¼­¸íÀ» °Ë»çÇÑ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="certificationauthority">ÀÎÁõ±â°ü (Certification
-Authority</a>, <a name="ca">CA)</a></dt> <dd>¾ÈÀüÇÑ ¹æ¹ýÀ¸·Î
-³×Æ®¿÷ ½Çü¿¡ ´ëÇÑ ÀÎÁõÀ» ¼­¸íÇÏ´Â ½Å·ÚÇÏ´Â Á¦»ïÀÚ. ´Ù¸¥ ³×Æ®¿÷
-½ÇüµéÀº ¼­¸íÀ¸·Î CA°¡ ÀÎÁõ¼­ ¼ÒÀ¯ÀÚ¸¦ ÀÎÁõÇß´ÂÁö È®ÀÎÇÒ ¼ö
-ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="certificatsigningrequest">ÀÎÁõ ¼­¸í ¿äû (Certificate
-Signing Request</a>, <a name="csr">CSR)</a></dt> <dd><a
-href="#certificationauthority">ÀÎÁõ±â°ü (Certification
-Authority)</a>¿¡ Á¦ÃâÇÏ¿© CA <em>ÀÎÁõ¼­ (Certificate)</em>ÀÇ
-<a href="#privatekey">°³ÀÎÅ° (Private Key)</a>·Î ¼­¸íµÉ ¾ÆÁ÷
-¼­¸íµÇÁö¾ÊÀº <a href="#certificate">ÀÎÁõ¼­</a>. CSRÀÌ ¼­¸íµÇ¸é
-½ÇÁ¦ ÀÎÁõ¼­°¡ µÈ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-
-<dt><a name="cipher">¾ÏÈ£±â (Cipher)</a></dt> <dd>ÀڷḦ
-¾ÏȣȭÇÏ´Â ¾Ë°í¸®ÁòÀ̳ª ½Ã½ºÅÛ. ¿¹¸¦ µé¾î, DES, IDEA, RC4 µîÀÌ ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="ciphertext">¾ÏÈ£¹® (Ciphertext)</a></dt> <dd><a
-href="#plaintext">Æò¹® (Plaintext)</a>À» <a href="#cipher">¾ÏÈ£±â
-(Cipher)</a>·Î ó¸®ÇÑ °á°ú.<br /> Âü°í: <a href="ssl/">SSL/TLS
-¾Ïȣȭ</a></dd>
-
-<dt><a name="commongatewayinterface">°øÅë °ÔÀÌÆ®¿þÀÌ ÀÎÅÍÆäÀ̽º
-(Common Gateway Interface</a>, <a name="cgi">CGI)</a></dt>
-<dd>¿ÜºÎ ÇÁ·Î±×·¥ÀÌ ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ÀÖµµ·Ï ¸¸µç À¥¼­¹ö¿Í ¿ÜºÎ
-ÇÁ·Î±×·¥ »çÀÌÀÇ ÀÎÅÍÆäÀ̽º Ç¥ÁØ. ÀÎÅÍÆäÀ̽º´Â ¿ø·¡ <a
-href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a>°¡
-Á¤ÀÇÇßÁö¸¸, <a href="http://cgi-spec.golux.com/">RFC
-ÇÁ·ÎÁ§Æ®</a>À̱⵵ ÇÏ´Ù.<br />
-Âü°í: <a href="howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a></dd>
-
-
-<dt><a name="configurationdirective">¼³Á¤ Áö½Ã¾î (Configuration
-Directive)</a></dt>
-<dd>Âü°í: <a href="#directive">Áö½Ã¾î</a></dd>
-
-<dt><a name="configurationfile">¼³Á¤ÆÄÀÏ (Configuration File)</a></dt>
-<dd>¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇÏ´Â <a href="#directive">Áö½Ã¾î (directive)</a>¸¦
-Àû¾îµÐ ÅؽºÆ®ÆÄÀÏ.<br />
-Âü°í: <a href="configuring.html">¼³Á¤ÆÄÀÏ</a></dd>
-
-<dt><a name="connect">CONNECT</a></dt> <dd>HTTP¸¦ ÅëÇØ
-ÀÚ·áÈ帧À» ÇÁ·Ï½ÃÇÏ´Â HTTP <a href="#method">¸Þ½áµå (method)</a>.
-SSL ÇÁ·ÎÅäÄÝ µî ´Ù¸¥ ÇÁ·ÎÅäÄÝÀ» °¨½Î±âÀ§ÇØ »ç¿ëÇÑ´Ù.</dd>
-
-<dt><a name="context">»ç¿ëÀå¼Ò (Context)</a></dt> <dd><a
-href="#configurationfile">¼³Á¤ÆÄÀÏ (configuration file)</a>¿¡¼­
-ƯÁ¤ <a href="#directive">Áö½Ã¾î (directive)</a>¸¦ »ç¿ëÇÒ ¼ö
-ÀÖ´Â Àå¼Ò.<br /> Âü°í: <a
-href="mod/directive-dict.html#Context">¾ÆÆÄÄ¡ Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥
-»ç¿ëÇÑ ¿ë¾îÁ¤ÀÇ</a></dd>
-
-<dt><a name="digitalsignature">ÀüÀÚ¼­¸í (Digital Signature)</a></dt>
-<dd>ÀÎÁõ¼­³ª ´Ù¸¥ ÆÄÀÏÀ» °Ë»çÇÏ´Â ¾ÏȣȭµÈ ¹®ÀÚµé. <a
- href="#certificationauthority">ÀÎÁõ±â°ü (Certification
- Authority)</a>Àº <em>ÀÎÁõ¼­ (Certificate)</em>¿¡ Æ÷ÇÔµÈ
- <em>°ø°³Å° (Public Key)</em>¸¦ Çؽ¬ÇÑ °á°ú¸¦ ÀÚ½ÅÀÇ
- <em>°³ÀÎÅ° (Private Key)</em>·Î ¾ÏȣȭÇÏ¿© ¼­¸íÀ» ¸¸µç´Ù.
- ¿ÀÁ÷ CAÀÇ °ø°³Å°¸¸ÀÌ ¼­¸íÀ» Ç® ¼ö Àֱ⶧¹®¿¡, CA°¡ <em>ÀÎÁõ¼­
- (Certificate)</em>¸¦ °¡Áø ³×Æ®¿÷ ½Çü¸¦ ÀÎÁõÇßÀ½À» Áõ¸íÇÒ
- ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="directive">Áö½Ã¾î (Directive)</a></dt> <dd>¾ÆÆÄÄ¡ÀÇ
-¿©·¯ ±â´ÉÀ» Á¶ÀýÇÏ´Â ¼³Á¤ ¸í·É¾î. Áö½Ã¾î´Â <a
-href="#configurationfile">¼³Á¤ÆÄÀÏ (Configuration File)</a>¿¡¼­
-»ç¿ëÇÑ´Ù.<br /> Âü°í: <a href="mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a></dd>
-
-<dt><a name="dynamicsharedobject">µ¿Àû°øÀ¯°´Ã¼ (Dynamic Shared
-Object)</a> <a name="dso">(DSO)</a></dt> <dd> ¾ÆÆÄÄ¡ httpd
-½ÇÇàÆÄÀÏ°ú º°µµ·Î ÄÄÆÄÀÏÇÏ¿© ÇÊ¿äÇÒ¶§ ÀоîµéÀÏ ¼ö ÀÖ´Â <a
-href="#module">¸ðµâ (Module)</a>.<br />
-Âü°í: <a href="dso.html">µ¿Àû°øÀ¯°´Ã¼ Áö¿ø</a></dd>
-
-<dt><a name="environmentvariable">ȯ°æº¯¼ö (Environment Variable)</a>
-<a name="env-variable">(env-variable)</a></dt>
-<dd>Á¤º¸¸¦ ÀúÀåÇÏ°í ÇÁ·Î±×·¥°£¿¡ Åë½ÅÀ» À§ÇØ ¿î¿µÃ¼Á¦ ½©ÀÌ °ü¸®ÇÏ´Â
-º¯¼ö. ¾ÆÆÄÄ¡¿¡µµ ȯ°æº¯¼ö¶ó´Â ³»ºÎ º¯¼ö°¡ ÀÖÁö¸¸, ½© ȯ°æÀÌ
-¾Æ´Ï¶ó ¾ÆÆÄÄ¡ ³»ºÎ¿¡ ÀúÀåµÈ´Ù.<br />
-Âü°í: <a href="env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a></dd>
-
-<dt><a name="export-crippled">¼öÃâ¿ë (Export-Crippled)</a></dt>
-<dd>¹Ì±¹ ¼öÃâ°ü¸®±ÔÁ¦(Export Administration Regulations, EAR)¸¦
- ÁؼöÇϱâÀ§ÇØ ¾ÏÈ£(¿Í º¸¾È)ÀÇ °­µµ¸¦ ³·Ãã. ¼öÃâ¿ë ¾Ïȣȭ
- ¼ÒÇÁÆ®¿þ¾î´Â Å° Å©±â°¡ ÀÛ°Ô Á¦ÇѵǾî, <em>¾ÏÈ£¹®
- (Ciphertext)</em>À» ¹«½ÄÇÑ ¹æ¹ý(brute force)À¸·Î Ç® ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ (SSL/TLS Encryption)</a></dd>
-
-<dt><a name="filter">ÇÊÅÍ (Filter)</a></dt> <dd>¼­¹ö°¡ º¸³»°Å³ª
-¹Þ´Â ÀڷḦ ó¸®ÇÏ´Â °úÁ¤. ÀÔ·ÂÇÊÅʹ Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö·Î º¸³»´Â
-ÀڷḦ ó¸®ÇÏ°í, Ãâ·ÂÇÊÅÍ´Â ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³¾ ¹®¼­¸¦
-ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î, <code>INCLUDES</code> Ãâ·ÂÇÊÅÍ´Â ¹®¼­ÀÇ
-<a href="#ssi">Server Side Includes</a>¸¦ ó¸®ÇÑ´Ù. <br />
-Âü°í: <a href="filter.html">ÇÊÅÍ</a></dd>
-
-<dt><a name="fully-qualifieddomain-name">¿ÏÀüÇÑ µµ¸ÞÀθí
-(Fully-Qualified Domain-Name)</a> <a name="fqdn">(FQDN)</a></dt>
-<dd>IP ÁÖ¼Ò¿¡ ´ëÀÀÇÏ´Â, È£½ºÆ®¸í°ú µµ¸ÞÀθíÀ¸·Î ±¸¼ºµÈ ³×Æ®¿÷
-½ÇüÀÇ À¯ÀÏÇÑ À̸§. ¿¹¸¦ µé¾î, <code>www</code>°¡ È£½ºÆ®¸íÀÌ°í
-<code>example.com</code>ÀÌ µµ¸ÞÀθíÀ϶§,
-<code>www.example.com</code>Àº ¿ÏÀüÇÑ µµ¸ÞÀθíÀÌ´Ù.</dd>
-
-<dt><a name="handler">Çڵ鷯 (Handler)</a></dt> <dd>ÆÄÀÏÀ»
-¿äûÇÒ¶§ ¼öÇàÇÏ´Â ÀÛ¾÷¿¡ ´ëÇÑ ¾ÆÆÄÄ¡ ³»ºÎ Ç¥Çö. ÀϹÝÀûÀ¸·Î ÆÄÀÏÀº
-ÆÄÀÏ Á¾·ù¿¡ µû¶ó ¾Ï¹¬ÀûÀÎ Çڵ鷯¸¦ °¡Áø´Ù. º¸Åë ¸ðµç ÆÄÀÏÀº
-¼­¹ö°¡ °£´ÜÈ÷ ¼­ºñ½ºÇÏÁö¸¸, ¾î¶² ÆÄÀÏ Á¾·ù´Â µû·Î
-"󸮵ȴÙ(handled)". ¿¹¸¦ µé¾î, <code>cgi-script</code> Çڵ鷯´Â
-<a href="#cgi">CGI</a>·Î ó¸®ÇÒ ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù.<br />
-Âü°í: <a href="handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></dd>
-
-<dt><a name="header">Çì´õ (Header)</a></dt>
-<dd><a href="#http">HTTP</a> ¿äû°ú ÀÀ´ä¿¡¼­ ½ÇÁ¦ ³»¿ë ÀÌÀü¿¡
-º¸³»´Â ºÎºÐÀ¸·Î ³»¿ëÀ» ¼³¸íÇÏ´Â Á¤º¸°¡ ÀÖ´Ù.</dd>
-
-<dt><a name=".htaccess">.htaccess</a></dt> <dd>À¥¹®¼­µé ¾È¿¡ ÀÖ´Â
-<a href="#configurationfile">¼³Á¤ÆÄÀÏ (configuration file)</a>·Î,
-¼³Á¤ <a href="#directive">Áö½Ã¾î (directive)</a>¸¦ ÀÚ½ÅÀÌ À§Ä¡ÇÑ
-µð·ºÅ丮¿Í ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡ Àû¿ëÇÑ´Ù. À̸§°ú ´Þ¸® ÀÌ
-ÆÄÀÏ¿¡¼­´Â ´Ü¼øÇÑ Á¢±ÙÁ¦¾î Áö½Ã¾î¿Ü¿¡ °ÅÀÇ ¸ðµç Á¾·ùÀÇ Áö½Ã¾î¸¦
-»ç¿ëÇÒ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="configuring.html">¼³Á¤ÆÄÀÏ</a></dd>
-
-<dt><a name="httpd.conf">httpd.conf</a></dt>
-<dd>¾ÆÆÄÄ¡ ÁÖ <a href="#configurationfile">¼³Á¤ÆÄÀÏ (configuration
-file)</a>. ±âº»ÀûÀÎ À§Ä¡´Â
-<code>/usr/local/apache2/conf/httpd.conf</code>ÀÌÁö¸¸, ½ÇÇàÇÒ¶§
-ȤÀº ÄÄÆÄÀ϶§ ¼³Á¤À¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="configuring.html">¼³Á¤ÆÄÀÏ</a></dd>
-
-<dt><a name="hypertexttransferprotocol">HyperText Transfer
-Protocol</a> <a name="http">(HTTP)</a></dt> <dd>¿ùµå¿ÍÀ̵åÀ¥¿¡¼­
-»ç¿ëÇϴ ǥÁØ Àü¼Û ÇÁ·ÎÅäÄÝ. ¾ÆÆÄÄ¡´Â
-<a href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>¿¡¼­
-Á¤ÀÇÇÑ HTTP/1.1À̶ó´Â ÇÁ·ÎÅäÄÝÀÇ 1.1 ¹öÀüÀ» ±¸ÇöÇÑ´Ù.</dd>
-
-<dt><a name="https">HTTPS</a></dt>
-<dd>¿ùµåÈ­À̵åÀ¥ÀÇ Ç¥ÁØ ¾ÏÈ£Åë½Å ¹æ¹ý, HyperText Transport
- Protocol (Secure). »ç½Ç ¹Ø´Ü¿¡ <a name="ssl">SSL</a>À»
- »ç¿ëÇÑ HTTPÀÌ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="method">¸Þ½áµå (Method)</a></dt> <dd>Ŭ¶óÀ̾ðÆ®°¡
-º¸³»´Â <a href="#http">HTTP</a> ¿äûÁÙÀÌ
-ÀÚ¿ø¿¡ ¼öÇàÇϵµ·Ï Áö½ÃÇÑ Çൿ. HTTP ¸Þ½áµå¿¡´Â <code>GET</code>,
-<code>POST</code>, <code>PUT</code> µîÀÌ ÀÖ´Ù.</dd>
-
-<dt><a name="messagedigest">¸Þ½ÃÁö ¿ä¾à (Message Digest)</a></dt>
-<dd>¸Þ½ÃÁö ³»¿ëÀÌ Àü¼ÛÁß º¯°æµÇÁö ¾Ê¾ÒÀ½À» Áõ¸íÇϱâÀ§ÇÑ
- ¸Þ½ÃÁöÀÇ Çؽ¬.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="mime-type">MIME-type</a></dt> <dd>Àü¼ÛÇÒ ¹®¼­ÀÇ
-Á¾·ù¸¦ ¼³¸íÇÏ´Â ¹æ½Ä. Multipurpose Internet Mail Extensions
-Çü½ÄÀ» ºô·Á¿Ô±â¶§¹®¿¡ ÀÌ·¸°Ô À̸§À» Áö¾ú´Ù. ½½·¡½¬¸¦ »çÀÌ¿¡
-µÐ major type°ú minor typeÀ¸·Î ÀÌ·ç¾îÁø´Ù. ¿¹¸¦ µé¸é,
-<code>text/html</code>, <code>image/gif</code>,
-<code>application/octet-stream</code> µîÀÌ´Ù. MIME-typeÀº HTTPÀÇ
-<code>Content-Type</code> <a href="#header">Çì´õ (header)</a>·Î
-Àü¼ÛÇÑ´Ù.<br /> Âü°í: <a href="mod/mod_mime.html">mod_mime</a></dd>
-
-<dt><a name="module">¸ðµâ (Module)</a></dt> <dd>ÇÁ·Î±×·¥ÀÇ µ¶¸³µÈ
-ºÎºÐ. ¸¹Àº ¾ÆÆÄÄ¡ ±â´ÉÀº ´ç½ÅÀÌ Æ÷ÇÔ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¸ðµâ¿¡
-µé¾îÀÖ´Ù. ¾ÆÆÄÄ¡ httpd ½ÇÇàÆÄÀÏ°ú °°ÀÌ ÄÄÆÄÀÏÇÑ ¸ðµâÀ» <em>Á¤Àû
-¸ðµâ</em>À̶ó°í Çϸç, µû·Î ºÐ¸®µÇ¾î ½ÇÇà½Ã ¼±ÅÃÀûÀ¸·Î ÀоîµéÀÏ
-¼ö ÀÖ´Â ¸ðµâÀ» <em>µ¿Àû ¸ðµâ</em> ȤÀº <a href="#dso">DSO</a>¶ó°í
-ÇÑ´Ù. ±âº»ÀûÀ¸·Î Æ÷ÇÔÇÏ´Â ¸ðµâÀ» <em>base ¸ðµâ</em>À̶ó°í ÇÑ´Ù.
-¾ÆÆÄÄ¡ À¥¼­¹ö <a href="#tarball">Ÿº¼ (tarball)</a>°ú °°ÀÌ
-¹èÆ÷µÇÁö´Â ¾ÊÁö¸¸ ¾ÆÆÄÄ¡¿¡´Â ¸¹Àº ¸ðµâµéÀÌ ÀÖ´Ù. À̵éÀ»
-<em>Á¦»ïÀÚ°¡ ¸¸µç(third-party) ¸ðµâ</em>À̶ó°í ÇÑ´Ù.<br />
-Âü°í: <a href="mod/">¸ðµâ ¸ñ·Ï</a></dd>
-
-<dt><a name="modulemagicnumber">¸ðµâ ¸¶¹ý¼ö (Module Magic Number)</a>
-(<a name="mmn">MMN</a>)</dt>
-<dd>¸ðµâ ¸¶¹ý¼ö´Â ¾ÆÆÄÄ¡ ¼Ò½ºÄڵ尡 Á¤ÀÇÇÑ »ó¼ö·Î, ¸ðµâÀÇ
-ÀÌÁøȣȯ¼º°ú °ü·ÃÀÌ ÀÖ´Ù. ¸ðµâ ¸¶¹ý¼ö´Â ÀÌÁøȣȯ¼ºÀ» ´õ ÀÌ»ó º¸ÀåÇÒ
-¼ö ¾øµµ·Ï ¾ÆÆÄÄ¡ ³»ºÎ ±¸Á¶³ª ÇÔ¼ö È£Ãâ, ´Ù¸¥ API ÀϺΰ¡ º¯°æµÈ
-°æ¿ì¿¡ ¹Ù²ï´Ù. MMNÀÌ º¯Çϸé Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀº ¸ðµÎ ÃÖ¼ÒÇÑ ´Ù½Ã
-ÄÄÆÄÀÏµÇ¾ß ÇÑ´Ù. »õ ¾ÆÆÄÄ¡ ¹öÀü¿¡ ¸Âµµ·Ï Á¶±Ý ¼öÁ¤ÇؾßÇÒ °æ¿ìµµ
-ÀÖ´Ù.
-</dd>
-
-<dt><a name="openssl">OpenSSL</a></dt>
-<dd>SSL/TLS¸¦ À§ÇÑ ¿ÀǼҽº µµ±¸<br />
- Âü°í <a href="http://www.openssl.org/">http://www.openssl.org/</a></dd>
-
-<dt><a name="passphrase">Pass Phrase</a></dt> <dd>°³ÀÎÅ° ÆÄÀÏÀ»
-º¸È£ÇÏ´Â ¹®±¸. ÀÎÁõÇÏÁö¾ÊÀº »ç¿ëÀÚ°¡ ÀÌ °³ÀÎÅ° ÆÄÀÏÀ»
-»ç¿ëÇÏ¿© ¾ÏȣȭÇÏÁö ¸øÇϵµ·Ï ÇÑ´Ù. º¸Åë <a name="cipher">¾ÏÈ£±â
-(Ciphers)</a>°¡ »ç¿ëÇÏ´Â ºñ¹Ð½º·± ¾ÏÈ£/Çص¶ Å°ÀÌ´Ù.<br /> Âü°í: <a
-href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="plaintext">Æò¹® (Plaintext)</a></dt>
-<dd>¾ÏȣȭÇÏÁö ¾ÊÀº ±Û.</dd>
-
-<dt><a name="privatekey">°³ÀÎÅ° (Private Key)</a></dt> <dd>¹ÞÀº
-ÀڷḦ Çص¶ÇÏ°í º¸³»´Â ÀڷḦ ¼­¸íÇϱâÀ§ÇÑ <a
-name="publickeycryptography">°ø°³Å° ¾Ïȣȭ (Public Key
-Cryptography)</a> ½Ã½ºÅÛÀÇ ¾ÏȣŰ.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="proxy">ÇÁ·Ï½Ã (Proxy)</a></dt> <dd>Ŭ¶óÀ̾ðÆ®¿Í
-<em>½ÇÁ¦ ¼­¹ö</em> »çÀÌ¿¡ ÀÖ´Â Áß°£ ¼­¹ö. Ŭ¶óÀ̾ðÆ®¿¡°Ô ¿äûÀ»
-¹Þ¾Æ ½ÇÁ¦ ¼­¹ö·Î º¸³»°í, ½ÇÁ¦ ¼­¹ö¿¡°Ô¼­ ¹ÞÀº ÀÀ´äÀ» ´Ù½Ã
-Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³½´Ù. ¿©·¯ Ŭ¶óÀ̾ðÆ®°¡ °°Àº ³»¿ëÀ» ¿äûÇϸé
-ÇÁ·Ï½Ã´Â ¸Å¹ø ¼­¹ö¿¡ ¿äûÇÏÁö¾Ê°í ij½¬¿¡ ÀúÀåµÈ ³»¿ëÀ» »ç¿ëÇÏ¿©
-ÀÀ´ä½Ã°£À» ÁÙÀÏ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="mod/mod_proxy.html">mod_proxy</a></dd>
-
-<dt><a name="publickey">°ø°³Å° (Public Key)</a></dt> <dd><a
-name="publickeycryptography">°ø°³Å° ¾Ïȣȭ (Public Key
-Cryptography)</a> ½Ã½ºÅÛ¿¡¼­ Å°ÀÇ ¼ÒÀ¯ÀÚ¿¡°Ô º¸³»´Â ¹®±¸¸¦ ¾ÏȣȭÇϰųª
-¼ÒÀ¯ÀÚ°¡ ¸¸µç ¼­¸íÀ» Ç®±âÀ§ÇÑ °ø°³µÈ Å°.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="publickeycryptography">°ø°³Å° ¾Ïȣȭ (Public Key
-Cryptography)</a></dt>
-<dd>¾ÏÈ£¿Í Çص¶¿¡ ¼­·Î ´Ù¸¥ Å°¸¦ »ç¿ëÇÏ´Â ºñ´ëĪ(asymmetric)
-¾Ïȣȭ ½Ã½ºÅÛÀÇ ¿¬±¸ ¹× È°¿ë. ¾ÏÈ£¿Í Çص¶¿¡ »ç¿ëÇÏ´Â µÎ°³ÀÇ Å°´Â
-Å°½Ö(key pair)À» ÀÌ·é´Ù. ºñ´ëĪ ¾Ïȣȭ¶ó°íµµ ºÎ¸¥´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="regularexpresion">Á¤±ÔÇ¥Çö½Ä (Regular Expression)</a> <a
-name="regex">(Regex)</a></dt> <dd>±ÛÀÇ ÆÐÅÏÀ» ±â¼úÇÏ´Â ¹æ½Ä.
-¿¹¸¦ µé¾î, "¹®ÀÚ A·Î ½ÃÀÛÇÏ´Â ¸ðµç ´Ü¾î", "¼ýÀÚ 10°³·ÎµÈ ÀüÈ­¹øÈ£",
-½ÉÁö¾î "½°Ç¥°¡ µÎ°³ÀÖ°í ´ë¹®ÀÚ Q°¡ ¾ø´Â ¹®Àå" µîÀ» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.
-Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¸é ¸Å¿ì À¯¿¬ÇÏ°Ô ÆÄÀÏÀ̳ª ÀÚ¿ø¿¡ ¾î¶² ¼ºÁúÀ» Àû¿ëÇÒ
-¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, "images"¶õ µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â ¸ðµç .gif¿Í
-.jpg ÆÄÀÏÀº "<code>/images/.*(jpg|gif)$</code>"·Î ÁöĪÇÒ ¼ö
-ÀÖ´Ù. ¾ÆÆÄÄ¡´Â <a href="http://www.pcre.org/">PCRE</a> ¶óÀ̺귯¸®¸¦
-»ç¿ëÇÏ¿© Perlȣȯ Á¤±ÔÇ¥Çö½ÄÀ» Áö¿øÇÑ´Ù.</dd>
-
-<dt><a name="reverseproxy">¿ªÇÁ·Ï½Ã (Reverse Proxy)</a></dt>
-<dd>Ŭ¶óÀ̾ðÆ®¿¡°Ô <em>½ÇÁ¦ ¼­¹ö</em>ó·³ º¸ÀÌ´Â <a
-href="#proxy">ÇÁ·Ï½Ã (proxy)</a> ¼­¹ö. º¸¾È»ó ÀÌÀ¯ ȤÀº ºÎÇϸ¦
-ºÐ»êÇϱâÀ§ÇØ Å¬¶óÀ̾ðÆ®¿¡°Ô ½ÇÁ¦ ¼­¹ö¸¦ ¼û±æ¶§ À¯¿ëÇÏ´Ù.</dd>
-
-<dt><a name="securesocketslayer">Secure Sockets Layer</a> <a
-name="ssl">(SSL)</a></dt> <dd>Netscape Communications»ç°¡ TCP/IP
-³×Æ®¿÷ÀÇ ÀϹÝÀûÀÎ Åë½Å ÀÎÁõ°ú ¾Ïȣȭ¸¦ À§ÇØ ¸¸µç ÇÁ·ÎÅäÄÝ.
-°¡Àå ÀϹÝÀûÀÎ ¿ëµµ´Â <em>HTTPS</em> (HyperText Transfer Protocol
-(HTTP) over SSL)ÀÌ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="serversideincludes">Server Side Includes</a> <a
-name="ssi">(SSI)</a></dt> <dd>HTML ÆÄÀÏ ¾È¿¡ ó¸®Áö½Ã¾î¸¦ Æ÷ÇÔÇÏ´Â
-±â¼ú.<br /> Âü°í: <a
-href="howto/ssi.html">Server Side Includes ¼Ò°³</a></dd>
-
-<dt><a name="session">¼¼¼Ç (Session)</a></dt>
-<dd>ÀϹÝÀûÀ¸·Î Åë½ÅÀÇ »óȲ(context) Á¤º¸.</dd>
-
-<dt><a name="ssleay">SSLeay</a></dt>
-<dd>Eric A. YoungÀÌ °³¹ßÇÑ ¿ø·¡ SSL/TLS ±¸Çö ¶óÀ̺귯¸®</dd>
-
-<dt><a name="symmetriccryptophraphy">´ëĪÀû ¾ÏÈ£¹ý (Symmetric
-Cryptography)</a></dt>
-<dd>¾ÏÈ£¿Í Çص¶ ÀÛ¾÷¿¡ °°Àº ¾Ïȣ۸¦ »ç¿ëÇÏ´Â <em>¾ÏÈ£±â
- (Ciphers)</em>ÀÇ ¿¬±¸ ¹× È°¿ë.<br />
-Âü°í: <a href="ssl/">SSL/TLS Encryption</a></dd>
-
-<dt><a name="tarball">Ÿº¼ (Tarball)</a></dt>
-<dd><code>tar</code> µµ±¸¸¦ »ç¿ëÇÏ¿© ÆÄÀϵéÀ» ¸ðÀº ¹­À½. ¾ÆÆÄÄ¡´Â
-tar ÆÄÀÏÀ» ¾ÐÃàÇϰųª pkzipÀ¸·Î ¾ÐÃàÇÏ¿© ¹èÆ÷µÈ´Ù.</dd>
-
-<dt><a name="transportlayersecurity">Transport Layer Security</a> <a
-name="tls">(TLS)</a></dt> <dd>ÀÎÅͳݱâ¼ú °ü·Ã ±¹Á¦Ç¥ÁØÈ­±â±¸(Internet
-Engineering Task Force, IETF)°¡ TCP/IP ³×Æ®¿÷ÀÇ ÀϹÝÀûÀÎ Åë½Å
-ÀÎÁõ°ú ¾Ïȣȭ¸¦ À§ÇØ ¸¸µç SSLÀÇ ÈÄ¼Ó ÇÁ·ÎÅäÄÝ. TLS ¹öÀü 1Àº
-SSL ¹öÀü 3°ú °ÅÀÇ À¯»çÇÏ´Ù.<br />
-Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-<dt><a name="uniformresourcelocator">Uniform Resource Locator</a>
-<a name="url">(URL)</a></dt> <dd>ÀÎÅͳݿ¡ ÀÖ´Â ÀÚ¿øÀÇ À̸§/ÁÖ¼Ò.
-Á¤½ÄÀ¸·Î´Â <a href="#uniformresourceidentifier">Uniform Resource
-Identifier</a>¶ó°í ÇÏ´Â °ÍÀÇ ÀÏ»óÀûÀÎ ºñ°ø½Ä ¿ë¾î´Ù. º¸Åë URLÀº
-<code>http</code>³ª <code>https</code>°°Àº ½ºÅ´(scheme), È£½ºÆ®¸í,
-°æ·Î·Î ±¸¼ºµÈ´Ù. ÀÌ ÆäÀÌÁöÀÇ URLÀº
-<code>http://httpd.apache.org/docs-2.1/glossary.html</code>ÀÌ´Ù.</dd>
-
-<dt><a name="uniformresourceidentifier">Uniform Resource Identifier</a>
-<a name="URI">(URI)</a></dt> <dd>Ãß»óÀûÀÎ ÀÚ¿øÀ̳ª ½ÇÁ¦ ÀÚ¿øÀ»
-ÁöĪÇϱâÀ§ÇÑ °£°áÇÑ ¹®ÀÚ¿­. °ø½ÄÀûÀ¸·Î <a
-href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>¿¡¼­ Á¤ÀÇÇÑ´Ù.
-¿ùµå¿ÍÀ̵åÀ¥¿¡¼­ »ç¿ëÇÏ´Â URI¸¦ º¸Åë <a href="#url">URL</a>À̶ó°í
-ºÎ¸¥´Ù.</dd>
-
-<dt><a name="virtualhosting">°¡»óÈ£½ºÆ® (Virtual Hosting)</a></dt>
-<dd>¾ÆÆÄÄ¡ Çϳª·Î ¿©·¯ À¥»çÀÌÆ®¸¦ ¼­ºñ½ºÇϱâ. <em>IP °¡»óÈ£½ºÆ®</em>´Â
-À¥»çÀÌÆ®¸¶´Ù IP ÁÖ¼Ò°¡ ´Ù¸£´Ù. <em>À̸§±â¹Ý(name-based)
-°¡»óÈ£½ºÆ®</em>´Â È£½ºÆ®¸í¸¸À» »ç¿ëÇϹǷΠÇÑ IP ÁÖ¼Ò¿¡¼­ ¿©·¯
-»çÀÌÆ®¸¦ ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.<br />
-Âü°í: <a href="vhosts/">¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</a></dd>
-
-<dt><a name="x.509">X.509</a></dt> <dd>±¹Á¦Àü±âÅë½Å¿¬ÇÕ(International
-Telecommunication Union, ITU-T)ÀÌ ±ÇÀåÇÏ´Â ÀÎÁõ¼­ ¾ç½Ä. SSL/TLS
-ÀÎÁõ¿¡¼­ »ç¿ëÇÑ´Ù.<br /> Âü°í: <a href="ssl/">SSL/TLS ¾Ïȣȭ</a></dd>
-
-</dl>
-</section>
-</manualpage>
diff --git a/docs/manual/glossary.xml.meta b/docs/manual/glossary.xml.meta
deleted file mode 100644
index 7763b4876d..0000000000
--- a/docs/manual/glossary.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>glossary</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/handler.html b/docs/manual/handler.html
deleted file mode 100644
index d791187274..0000000000
--- a/docs/manual/handler.html
+++ /dev/null
@@ -1,15 +0,0 @@
-URI: handler.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: handler.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: handler.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: handler.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/handler.html.en b/docs/manual/handler.html.en
deleted file mode 100644
index 3bf8d07cfa..0000000000
--- a/docs/manual/handler.html.en
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache's Handler Use - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache's Handler Use</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/handler.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document describes the use of Apache's Handlers.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#definition">What is a Handler</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">Examples</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programmer">Programmer's Note</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definition" id="definition">What is a Handler</a></h2>
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_actions.html">mod_actions</a></code></li><li><code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code></li><li><code class="module"><a href="./mod/mod_info.html">mod_info</a></code></li><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li><li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></li><li><code class="module"><a href="./mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removehandler">RemoveHandler</a></code></li><li><code class="directive"><a href="./mod/core.html#sethandler">SetHandler</a></code></li></ul></td></tr></table>
-
-
- <p>A "handler" is an internal Apache representation of the
- action to be performed when a file is called. Generally, files
- have implicit handlers, based on the file type. Normally, all
- files are simply served by the server, but certain file types
- are "handled" separately.</p>
-
- <p>Apache 1.1 adds the ability to use handlers explicitly.
- Based on either filename extensions or on location, handlers
- can be specified without relation to file type. This is
- advantageous both because it is a more elegant solution, and
- because it also allows for both a type <strong>and</strong> a
- handler to be associated with a file. (See also <a href="mod/mod_mime.html#multipleext">Files with Multiple
- Extensions</a>.)</p>
-
- <p>Handlers can either be built into the server or included in
- a module, or they can be added with the <code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code> directive. The
- built-in handlers in the standard distribution are as
- follows:</p>
-
- <ul>
- <li><strong>default-handler</strong>: Send the file using the
- <code>default_handler()</code>, which is the handler used by
- default to handle static content. (core)</li>
-
- <li><strong>send-as-is</strong>: Send file with HTTP headers
- as is. (<code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code>)</li>
-
- <li><strong>cgi-script</strong>: Treat the file as a CGI
- script. (<code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code>)</li>
-
- <li><strong>imap-file</strong>: Parse as an imagemap rule
- file. (<code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code>)</li>
-
- <li><strong>server-info</strong>: Get the server's
- configuration information. (<code class="module"><a href="./mod/mod_info.html">mod_info</a></code>)</li>
-
- <li><strong>server-status</strong>: Get the server's status
- report. (<code class="module"><a href="./mod/mod_status.html">mod_status</a></code>)</li>
-
- <li><strong>type-map</strong>: Parse as a type map file for
- content negotiation. (<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>)</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
-
- <h3><a name="example1" id="example1">Modifying static content using a CGI script</a></h3>
-
-
- <p>The following directives will cause requests for files with
- the <code>html</code> extension to trigger the launch of the
- <code>footer.pl</code> CGI script.</p>
-
- <div class="example"><p><code>
- Action add-footer /cgi-bin/footer.pl<br />
- AddHandler add-footer .html
- </code></p></div>
-
- <p>Then the CGI script is responsible for sending the
- originally requested document (pointed to by the
- <code>PATH_TRANSLATED</code> environment variable) and making
- whatever modifications or additions are desired.</p>
-
-
- <h3><a name="example2" id="example2">Files with HTTP headers</a></h3>
-
-
- <p>The following directives will enable the
- <code>send-as-is</code> handler, which is used for files which
- contain their own HTTP headers. All files in the
- <code>/web/htdocs/asis/</code> directory will be processed by
- the <code>send-as-is</code> handler, regardless of their
- filename extensions.</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/htdocs/asis&gt;<br />
- SetHandler send-as-is<br />
- &lt;/Directory&gt;
- </code></p></div>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="programmer" id="programmer">Programmer's Note</a></h2>
-
-
- <p>In order to implement the handler features, an addition has
- been made to the <a href="developer/API.html">Apache API</a> that
- you may wish to make use of. Specifically, a new record has
- been added to the <code>request_rec</code> structure:</p>
-
- <div class="example"><p><code>
- char *handler
- </code></p></div>
-
- <p>If you wish to have your module engage a handler, you need
- only to set <code>r-&gt;handler</code> to the name of the
- handler at any time prior to the <code>invoke_handler</code>
- stage of the request. Handlers are implemented as they were
- before, albeit using the handler name instead of a content
- type. While it is not necessary, the naming convention for
- handlers is to use a dash-separated word, with no slashes, so
- as to not invade the media type name-space.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/handler.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/handler.html.es b/docs/manual/handler.html.es
deleted file mode 100644
index 2239b8b953..0000000000
--- a/docs/manual/handler.html.es
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Uso de los Handlers en Apache - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Uso de los Handlers en Apache</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./en/handler.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Este documento describe el uso de los Handlers en Apache.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#definition">¿Qué es un Handler?</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">Ejemplos</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programmer">Nota para programadores</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definition" id="definition">¿Qué es un Handler?</a></h2>
-
- <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_actions.html">mod_actions</a></code></li><li><code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code></li><li><code class="module"><a href="./mod/mod_info.html">mod_info</a></code></li><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li><li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></li><li><code class="module"><a href="./mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removehandler">RemoveHandler</a></code></li><li><code class="directive"><a href="./mod/core.html#sethandler">SetHandler</a></code></li></ul></td></tr></table>
-
-
- <p>Un "handler" es una representación interna de Apache de
- una acción que se va a ejecutar cuando hay una llamada a un
- fichero. Generalmente, los ficheros tienen handlers
- implícitos, basados en el tipo de fichero de que se
- trata. Normalmente, todos los ficheros son simplemente servidos
- por el servidor, pero algunos tipos de ficheros se tratan de forma
- diferente.</p>
-
- <p>Apache 1.1 añade la posibilidad de usar handlers
- explicitamente. Basándose en la extension del fichero o en
- la ubicación en la que este, se pueden especificar handlers
- sin tener en cuenta el tipo de fichero de que se trate. Esto es
- una ventaja por dos razones. Primero, es una solución
- más elegante. Segundo, porque a un fichero se le pueden
- asignar tanto un tipo <strong>como</strong> un handler. (Consulte
- también la sección <a href="mod/mod_mime.html#multipleext">Ficheros y extensiones
- múltiples</a>.)</p>
-
- <p>Los Handlers pueden ser tanto ser compilados con el servidor
- como incluidos en un módulo, como añadidos con la
- directiva <code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code>. Los
- handlers compilados con el servidor de la distribución
- estándar de Apache son:</p>
-
- <ul>
- <li><strong>default-handler</strong>: Envía el fichero
- usando el <code>default_handler()</code>, que es el handler
- usado por defecto para tratar contenido
- estático. (core)</li>
-
- <li><strong>send-as-is</strong>: Envía el fichero con
- cabeceras HTTP tal y como es. (<code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code>)</li>
-
- <li><strong>cgi-script</strong>: Trata el fichero como un sript
- CGI. (<code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code>)</li>
-
- <li><strong>imap-file</strong>: Trata el fichero como un mapa de
- imágenes. (<code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code>)</li>
-
- <li><strong>server-info</strong>: Extrae la información de
- configuración del
- servidor. (<code class="module"><a href="./mod/mod_info.html">mod_info</a></code>)</li>
-
- <li><strong>server-status</strong>: Extrae el informe de estado
- del servidor. (<code class="module"><a href="./mod/mod_status.html">mod_status</a></code>)</li>
-
- <li><strong>type-map</strong>: Trata el fichero como una
- correspondencia de tipos para la negociación de contenidos.
- (<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>)</li> </ul> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Ejemplos</a></h2>
-
- <h3><a name="example1" id="example1">Modificar contenido estático usando un script
- CGI</a></h3>
-
-
- <p>Las siguientes directivas hacen que cuando haya una
- petición de ficheros con la extensión
- <code>html</code> se lance el script CGI
- <code>footer.pl</code>.</p>
-
- <div class="example"><p><code>
- Action add-footer /cgi-bin/footer.pl<br />
- AddHandler add-footer .html
- </code></p></div>
-
- <p>En este caso, el script CGI es el responsable de enviar el
- documento originalmente solicitado (contenido en la variable de
- entorno <code>PATH_TRANSLATED</code>) y de hacer cualquier
- modificación o añadido deseado.</p>
-
-
- <h3><a name="example2" id="example2">Archivos con cabaceras HTTP</a></h3>
-
-
- <p>Las siguientes directivas activan el handler
- <code>send-as-is</code>, que se usa para ficheros que contienen
- sus propias cabeceras HTTP. Todos los archivos en el directorio
- <code>/web/htdocs/asis/</code> serán procesados por el
- handler <code>send-as-is</code>, sin tener en cuenta su
- extension.</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/htdocs/asis&gt;<br />
- SetHandler send-as-is<br />
- &lt;/Directory&gt;
- </code></p></div>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="programmer" id="programmer">Nota para programadores</a></h2>
-
-
- <p>Para implementar las funcionalidades de los handlers, se ha
- hecho un añadido a la <a href="developer/API.html">API de
- Apache</a> que puede que quiera usar. Para ser más
- específicos, se ha añadido un nuevo registro a la
- estructura <code>request_rec</code>:</p>
-
- <div class="example"><p><code>
- char *handler
- </code></p></div>
-
- <p>Si quiere que su módulo llame a un handler , solo tiene
- que añadir <code>r-&gt;handler</code> al nombre del handler
- en cualquier momento antes de la fase <code>invoke_handler</code>
- de la petición. Los handlers se implementan siempre como se
- hacía antes, aunque usando el nombre del handler en vez de un
- tipo de contenido. Aunque no es de obligado cumplimiento, la
- convención de nombres para los handlers es que se usen
- palabras separadas por guiones, sin barras, de manera que no se
- invada el media type name-space.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./en/handler.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/handler.html.ja.euc-jp b/docs/manual/handler.html.ja.euc-jp
deleted file mode 100644
index f714fa1a8a..0000000000
--- a/docs/manual/handler.html.ja.euc-jp
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¤Î¥Ï¥ó¥É¥é¤Î»ÈÍÑ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache ¤Î¥Ï¥ó¥É¥é¤Î»ÈÍÑ</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/handler.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Apache ¤Î¥Ï¥ó¥É¥é¤Î»ÈÍѤ˴ؤ·¤Æµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#definition">¥Ï¥ó¥É¥é¤È¤Ï</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">Îã</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programmer">¥×¥í¥°¥é¥Þ¸þ¤±¤Î¥á¥â</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definition" id="definition">¥Ï¥ó¥É¥é¤È¤Ï</a></h2>
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_actions.html">mod_actions</a></code></li><li><code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code></li><li><code class="module"><a href="./mod/mod_info.html">mod_info</a></code></li><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li><li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></li><li><code class="module"><a href="./mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removehandler">RemoveHandler</a></code></li><li><code class="directive"><a href="./mod/core.html#sethandler">SetHandler</a></code></li></ul></td></tr></table>
-
-
- <p>¡Ö¥Ï¥ó¥É¥é¡×¤È¤Ï¡¢¥Õ¥¡¥¤¥ë¤¬¸Æ¤Ð¤ì¤¿¤È¤­¤Ë¼Â¹Ô¤µ¤ì¤ëÆ°ºî¤Î
- Apache ¤Ë¤ª¤±¤ëÆâÉôɽ¸½¤Ç¤¹¡£
- Ä̾¥Õ¥¡¥¤¥ë¤Ï¥Õ¥¡¥¤¥ë·¿¤Ë´ð¤Å¤¤¤¿°ÅÌۤΥϥó¥É¥é¤¬¤¢¤ê¤Þ¤¹¡£
- ÉáÄ̤Ϥ¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤Ïñ¤Ë¥µ¡¼¥Ð¤Ë°·¤ï¤ì¤Þ¤¹¤¬¡¢
- ¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤ÎÃæ¤Ë¤ÏÊ̤ˡ֥ϥó¥É¥ë¡×(ÌõÃí: °·¤¦)
- ¤µ¤ì¤ë¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Apache 1.1 ¤Ç¤Ï¡¢¥Ï¥ó¥É¥é¤òÌÀ¼¨Åª¤Ë»ÈÍѤ¹¤ëµ¡Ç½¤¬Äɲ䵤ì¤Þ¤·¤¿¡£
- ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤äÃÖ¤¤¤Æ¤¤¤ë¾ì½ê¤Ë´ð¤Å¤¤¤Æ¡¢
- ¥Õ¥¡¥¤¥ë·¿¤È´Ø·¸¤Ê¤¯¥Ï¥ó¥É¥é¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï¤è¤êÍ¥²í¤Ê²ò·èË¡¤È¤¤¤¦ÅÀ¤È¡¢¥Õ¥¡¥¤¥ë¤Ë¥¿¥¤¥×<strong>¤È</strong>¥Ï¥ó¥É¥é¤ÎξÊý¤ò´ØÏ¢ÉÕ¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¤È¤¤¤¦ÅÀ¤ÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£
- (<a href="mod/mod_mime.html#multipleext">Ê£¿ô¤Î³ÈÄ¥»Ò¤Î¤¢¤ë¥Õ¥¡¥¤¥ë</a>¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£</p>
-
- <p>¥Ï¥ó¥É¥é¤Ï¥µ¡¼¥Ð¤ËÁȤ߹þ¤ó¤À¤ê¡¢¥â¥¸¥å¡¼¥ë¤È¤·¤Æ´Þ¤á¤¿¤ê¡¢
- <code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤·¤ÆÄɲä·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- °Ê²¼¤Ïɸ½àÇÛÉÛ¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¥Ï¥ó¥É¥é¤Ç¤¹¡£
- </p>
-
- <ul>
- <li><strong>default-handler</strong>:<code>default_handelr()</code>
- ¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¤òÁ÷¤ê¤Þ¤¹¡£
- ÀÅŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤ò°·¤¦¤È¤­¤Ë¥Ç¥Õ¥©¥ë¥È¤Ç»ÈÍѤµ¤ì¤ë¥Ï¥ó¥É¥é¤Ç¤¹¡£
- (<code class="module"><a href="./mod/core.html">core</a></code>)</li>
-
- <li><strong>send-as-is</strong>:
- HTTP ¥Ø¥Ã¥À¤Î¤¢¤ë¥Õ¥¡¥¤¥ë¤ò¤½¤Î¤Þ¤ÞÁ÷¤ê¤Þ¤¹¡£
- (<code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code>)</li>
-
- <li><strong>cgi-script</strong>: ¥Õ¥¡¥¤¥ë¤ò CGI
- ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ°·¤¤¤Þ¤¹¡£
- (<code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code>)</li>
-
- <li><strong>imap-file</strong>:
- ¥¤¥á¡¼¥¸¥Þ¥Ã¥×¤Î¥ë¡¼¥ë¥Õ¥¡¥¤¥ë¤È¤·¤Æ²òÀϤ·¤Þ¤¹¡£
- (<code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code>)</li>
-
- <li><strong>server-info</strong>: ¥µ¡¼¥Ð¤ÎÀßÄê¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹¡£
- (<code class="module"><a href="./mod/mod_info.html">mod_info</a></code>)</li>
-
- <li><strong>server-status</strong>: ¥µ¡¼¥Ð¤Î¾õÂÖÊó¹ð¤ò¼èÆÀ¤·¤Þ¤¹¡£
- (<code class="module"><a href="./mod/mod_status.html">mod_status</a></code>)</li>
-
- <li><strong>type-map</strong>:
- ¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î¤¿¤á¤Î¥¿¥¤¥×¥Þ¥Ã¥×¤È¤·¤Æ²òÀϤ·¤Þ¤¹¡£
- (<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>)</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Îã</a></h2>
-
-
- <h3><a name="example1" id="example1">CGI ¥¹¥¯¥ê¥×¥È¤òÍѤ¤¤ÆÀÅŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤òÊѹ¹¤¹¤ë</a></h3>
-
-
- <p>°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤Æ¡¢³ÈÄ¥»Ò¤¬ <code>html</code>
- ¤Ç¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï <code>footer.pl</code>
- CGI ¥¹¥¯¥ê¥×¥È¤òµ¯Æ°¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Action add-footer /cgi-bin/footer.pl<br />
- AddHandler add-footer .html
- </code></p></div>
-
- <p>CGI ¥¹¥¯¥ê¥×¥È¤Ï´õ˾¤Î½¤Àµ¤äÄɲäò¹Ô¤Ê¤Ã¤Æ¡¢¸µ¡¹Í׵ᤵ¤ì¤¿Ê¸½ñ
- (´Ä¶­ÊÑ¿ô <code>PATH_TRANSLATED</code>
- ¤Ç»Ø¤µ¤ì¤Æ¤¤¤Þ¤¹) ¤òÁ÷¤ëÀÕǤ¤¬¤¢¤ê¤Þ¤¹¡£
- </p>
-
-
- <h3><a name="example2" id="example2">HTTP ¥Ø¥Ã¥À¤Î¤¢¤ë¥Õ¥¡¥¤¥ë</a></h3>
-
-
- <p>°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>send-as-is</code>
- ¥Ï¥ó¥É¥é¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë»Ø¼¨¤·¤Þ¤¹¡£¤³¤Î¥Ï¥ó¥É¥é¤Ï¼«Ê¬¼«¿È¤Î HTTP
- ¥Ø¥Ã¥À¤ò»ý¤Ã¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£¤³¤³¤Ç¤Ï¡¢³ÈÄ¥»Ò¤Ë´Ø¤ï¤é¤º¡¢
- <code>/web/htdocs/asis</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ëÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤Ï
- <code>send-as-is</code> ¥Ï¥ó¥É¥é¤Ë¤è¤Ã¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/htdocs/asis&gt;<br />
- SetHandler send-as-is<br />
- &lt;/Directory&gt;
- </code></p></div>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="programmer" id="programmer">¥×¥í¥°¥é¥Þ¸þ¤±¤Î¥á¥â</a></h2>
-
-
- <p>¥Ï¥ó¥É¥é¤Îµ¡Ç½¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤Ë¡¢ÍøÍѤ¹¤ë¤ÈÊØÍø¤«¤â¤·¤ì¤Ê¤¤¤â¤Î¤¬
- <a href="developer/API.html">Apache API</a>
- ¤ËÄɲ䵤ì¤Þ¤·¤¿¡£¾Ü¤·¤¯¸À¤¦¤È¡¢<code>request_rec</code>
- ¹½Â¤ÂΤ˿·¤·¤¤¥ì¥³¡¼¥É¤¬Äɲ䵤줿¤È¤¤¤¦¤³¤È¤Ç¤¹¡£</p>
-
- <div class="example"><p><code>
- char *handler
- </code></p></div>
-
- <p>¤â¤·¥â¥¸¥å¡¼¥ë¤¬¥Ï¥ó¥É¥é¤Ë´Ø¤ï¤ê¤¿¤¤¾ì¹ç¡¢
- ¤ä¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤¬ <code>invoke_handler</code>
- ¥¹¥Æ¡¼¥¸¤Ë㤹¤ë°ÊÁ°¤Ë <code>r-&gt;handler</code>
- ¤òÀßÄꤹ¤ë¤³¤È¤À¤±¤Ç¤¹¡£¥Ï¥ó¥É¥é¤Ï¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ÎÂå¤ï¤ê¤Ë
- ¥Ï¥ó¥É¥é̾¤ò»È¤¦¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È°Ê³°¤Ï¡¢°ÊÁ°¤ÈƱ¤¸¤è¤¦¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ɬ¤ºÍ׵ᤵ¤ì¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢¥á¥Ç¥£¥¢¥¿¥¤¥×
- ¤Î̾Á°¶õ´Ö¤ò¿¯¤µ¤Ê¤¤¤è¤¦¤Ë¡¢¥Ï¥ó¥É¥é¤Î̾Á°¤Ë¤Ï¥¹¥é¥Ã¥·¥å¤ò´Þ¤Þ¤Ê¤¤¡¢
- ¥À¥Ã¥·¥å (ÌõÃí: "-") ¤ÇʬΥ¤µ¤ì¤¿Ì¾Á°¤òÉÕ¤±¤ë½¬´·¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/handler.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/handler.html.ko.euc-kr b/docs/manual/handler.html.ko.euc-kr
deleted file mode 100644
index 05a84fa825..0000000000
--- a/docs/manual/handler.html.ko.euc-kr
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/handler.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#definition">Çڵ鷯°¡ ¹«¾ùÀΰ¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">¿¹Á¦</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programmer">ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ Á¤º¸</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="definition" id="definition">Çڵ鷯°¡ ¹«¾ùÀΰ¡</a></h2>
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_actions.html">mod_actions</a></code></li><li><code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code></li><li><code class="module"><a href="./mod/mod_info.html">mod_info</a></code></li><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li><li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></li><li><code class="module"><a href="./mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removehandler">RemoveHandler</a></code></li><li><code class="directive"><a href="./mod/core.html#sethandler">SetHandler</a></code></li></ul></td></tr></table>
-
-
- <p>ÆÄÀÏÀ» ¿äûÇÒ¶§ ¾ÆÆÄÄ¡°¡ ³»ºÎÀûÀ¸·Î ¼öÇàÇÒ ÀÛ¾÷À»
- "Çڵ鷯(handler)"¶ó°í ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ÆÄÀÏÀº ÆÄÀÏ Á¾·ù¿¡
- µû¶ó ¾Ï¹¬ÀûÀÎ Çڵ鷯¸¦ °¡Áö°í ÀÖ´Ù. ¸ðµç ÆÄÀÏÀº º¸Åë °£´ÜÈ÷
- ¼­¹ö°¡ ¼­ºñ½ºÇÏÁö¸¸, ¾î¶² ÆÄÀÏ Á¾·ù´Â µû·Î "󸮵ȴÙ(handled)".</p>
-
- <p>Apache 1.1ºÎÅÍ Çڵ鷯¸¦ ¸í½ÃÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
- ÆÄÀÏ Á¾·ù¿Í °ü°è¾øÀÌ Çڵ鷯¸¦ ÆÄÀÏÀÇ È®ÀåÀÚ³ª À§Ä¡¿¡ µû¶ó
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´õ ÈǸ¢ÇÑ ¹æ¹ýÀÌ°í ÆÄÀÏÀ» Á¾·ù¿Í Çڵ鷯
- µÑ ¸ðµÎ¿Í ¿¬°èÇÒ ¼ö Àֱ⶧¹®¿¡ ÁÁ´Ù. (<a href="mod/mod_mime.html#multipleext">¿©·¯ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏ</a>µµ
- Âü°í)</p>
-
- <p>Çڵ鷯´Â ¼­¹ö³ª ¸ðµâ·Î ±¸ÇöÇÏ¿©, <code class="directive"><a href="./mod/mod_actions.html#action">Action</a></code> Áö½Ã¾î·Î Ãß°¡ÇÒ
- ¼ö ÀÖ´Ù. Ç¥ÁØ ¹èÆ÷º»¿¡ ÀÖ´Â ±âº» Çڵ鷯´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <ul>
- <li><strong>default-handler</strong>: Á¤ÀûÀÎ ³»¿ëÀ»
- ó¸®ÇϱâÀ§ÇØ ±âº»ÀûÀ¸·Î »ç¿ëÇÏ´Â Çڵ鷯
- <code>default_handler()</code>¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ» º¸³½´Ù.
- (core)</li>
-
- <li><strong>send-as-is</strong>: HTTP Çì´õ°¡ ÀÖ´Â ÆÄÀÏÀ»
- ±×´ë·Î º¸³½´Ù. (<code class="module"><a href="./mod/mod_asis.html">mod_asis</a></code>)</li>
-
- <li><strong>cgi-script</strong>: ÆÄÀÏÀ» CGI·Î ó¸®ÇÑ´Ù.
- (<code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code>)</li>
-
- <li><strong>imap-file</strong>: imagemap ±ÔÄ¢ ÆÄÀÏ·Î
- ó¸®ÇÑ´Ù. (<code class="module"><a href="./mod/mod_imap.html">mod_imap</a></code>)</li>
-
- <li><strong>server-info</strong>: ¼­¹öÀÇ ¼³Á¤ Á¤º¸¸¦
- ¾Ë·ÁÁØ´Ù. (<code class="module"><a href="./mod/mod_info.html">mod_info</a></code>)</li>
-
- <li><strong>server-status</strong>: ¼­¹öÀÇ »óŸ¦ º¸°íÇÑ´Ù.
- (<code class="module"><a href="./mod/mod_status.html">mod_status</a></code>)</li>
-
- <li><strong>type-map</strong>: ³»¿ëÇù»ó¿¡ »ç¿ëÇÒ
- type mapÀ¸·Î ó¸®ÇÑ´Ù.
- (<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>)</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
-
-
- <h3><a name="example1" id="example1">CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ¿© Á¤ÀûÀÎ ³»¿ë ¼öÁ¤Çϱâ</a></h3>
-
-
- <p>´ÙÀ½ Áö½Ã¾î´Â È®ÀåÀÚ°¡ <code>html</code>ÀÎ ÆÄÀÏÀ»
- ¿äûÇÒ °æ¿ì <code>footer.pl</code> CGI ½ºÅ©¸³Æ®¸¦ ¶ç¿î´Ù.</p>
-
- <div class="example"><p><code>
- Action add-footer /cgi-bin/footer.pl<br />
- AddHandler add-footer .html
- </code></p></div>
-
- <p>CGI ½ºÅ©¸³Æ®´Â
- (<code>PATH_TRANSLATED</code> ȯ°æº¯¼ö°¡ ÁöĪÇÏ´Â) ¿ø·¡
- ¿äûÇÑ ¹®¼­¸¦ ÀûÀýÈ÷ ¼öÁ¤ÇÑ ÈÄ º¸³½´Ù.</p>
-
-
- <h3><a name="example2" id="example2">HTTP Çì´õ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀÏ</a></h3>
-
-
- <p>´ÙÀ½ Áö½Ã¾î´Â HTTP Çì´õ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀÏ¿¡
- <code>send-as-is</code> Çڵ鷯¸¦ Áö½ÃÇÑ´Ù.
- <code>/web/htdocs/asis/</code> µð·ºÅ丮 ¾È¿¡ ÀÖ´Â ¸ðµç
- ÆÄÀÏÀº È®ÀåÀÚ¿Í °ü°è¾øÀÌ <code>send-as-is</code> Çڵ鷯°¡
- ó¸®ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/htdocs/asis&gt;<br />
- SetHandler send-as-is<br />
- &lt;/Directory&gt;
- </code></p></div>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="programmer" id="programmer">ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ Á¤º¸</a></h2>
-
-
- <p>Çڵ鷯 ±â´ÉÀ» ±¸ÇöÇϱâÀ§ÇØ »ç¿ëÇÔÁ÷ÇÑ
- <a href="developer/API.html">Apache API</a>°¡ Ãß°¡µÇ¾ú´Ù.
- ƯÈ÷ <code>request_rec</code> ±¸Á¶Ã¼¿¡ »õ·Î¿î Çʵ尡
- Ãß°¡µÇ¾ú´Ù:</p>
-
- <div class="example"><p><code>
- char *handler
- </code></p></div>
-
- <p>¸ðµâÀÌ Çڵ鷯¸¦ »ç¿ëÇÏ·Á¸é, ¿äûÀÇ
- <code>invoke_handler</code> ´Ü°è ÀÌÀü¿¡
- <code>r-&gt;handler</code>¿¡ Çڵ鷯 À̸§À» ÁöÁ¤ÇØÁֱ⸸
- ÇÏ¸é µÈ´Ù. Çڵ鷯´Â content type ´ë½Å Çڵ鷯 À̸§À» »ç¿ëÇÑ
- °ÍÀ» Á¦¿ÜÇÏ°í´Â Àü°ú °°ÀÌ ±¸ÇöµÇ¾ú´Ù. ²À Áöų ÇÊ¿ä´Â ¾øÁö¸¸
- Çڵ鷯 À̸§¿¡ ½½·¡½¬¸¦ »ç¿ëÇÏÁö ¾Ê°í, ´Ü¾îµé »çÀÌ¿¡ »©±â
- ±âÈ£¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. ±×·¡¼­ Çڵ鷯 À̸§ÀÌ
- media type°ú °ãÄ¡Áö ¾Ê´Â´Ù.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/handler.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/handler.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/handler.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/handler.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/handler.xml b/docs/manual/handler.xml
deleted file mode 100644
index 9e51658d2e..0000000000
--- a/docs/manual/handler.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="handler.xml.meta">
-
- <title>Apache's Handler Use</title>
-
- <summary>
- <p>This document describes the use of Apache's Handlers.</p>
- </summary>
-
- <section id="definition">
- <title>What is a Handler</title>
- <related>
- <modulelist>
- <module>mod_actions</module>
- <module>mod_asis</module>
- <module>mod_cgi</module>
- <module>mod_imap</module>
- <module>mod_info</module>
- <module>mod_mime</module>
- <module>mod_negotiation</module>
- <module>mod_status</module>
- </modulelist>
- <directivelist>
- <directive module="mod_actions">Action</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="mod_mime">RemoveHandler</directive>
- <directive module="core">SetHandler</directive>
- </directivelist>
- </related>
-
-
- <p>A "handler" is an internal Apache representation of the
- action to be performed when a file is called. Generally, files
- have implicit handlers, based on the file type. Normally, all
- files are simply served by the server, but certain file types
- are "handled" separately.</p>
-
- <p>Apache 1.1 adds the ability to use handlers explicitly.
- Based on either filename extensions or on location, handlers
- can be specified without relation to file type. This is
- advantageous both because it is a more elegant solution, and
- because it also allows for both a type <strong>and</strong> a
- handler to be associated with a file. (See also <a
- href="mod/mod_mime.html#multipleext">Files with Multiple
- Extensions</a>.)</p>
-
- <p>Handlers can either be built into the server or included in
- a module, or they can be added with the <directive
- module="mod_actions">Action</directive> directive. The
- built-in handlers in the standard distribution are as
- follows:</p>
-
- <ul>
- <li><strong>default-handler</strong>: Send the file using the
- <code>default_handler()</code>, which is the handler used by
- default to handle static content. (core)</li>
-
- <li><strong>send-as-is</strong>: Send file with HTTP headers
- as is. (<module>mod_asis</module>)</li>
-
- <li><strong>cgi-script</strong>: Treat the file as a CGI
- script. (<module>mod_cgi</module>)</li>
-
- <li><strong>imap-file</strong>: Parse as an imagemap rule
- file. (<module>mod_imap</module>)</li>
-
- <li><strong>server-info</strong>: Get the server's
- configuration information. (<module>mod_info</module>)</li>
-
- <li><strong>server-status</strong>: Get the server's status
- report. (<module>mod_status</module>)</li>
-
- <li><strong>type-map</strong>: Parse as a type map file for
- content negotiation. (<module>mod_negotiation</module>)</li>
- </ul>
- </section>
- <section id="examples">
- <title>Examples</title>
-
- <section id="example1">
- <title>Modifying static content using a CGI script</title>
-
- <p>The following directives will cause requests for files with
- the <code>html</code> extension to trigger the launch of the
- <code>footer.pl</code> CGI script.</p>
-
- <example>
- Action add-footer /cgi-bin/footer.pl<br/>
- AddHandler add-footer .html
- </example>
-
- <p>Then the CGI script is responsible for sending the
- originally requested document (pointed to by the
- <code>PATH_TRANSLATED</code> environment variable) and making
- whatever modifications or additions are desired.</p>
-
- </section>
- <section id="example2">
- <title>Files with HTTP headers</title>
-
- <p>The following directives will enable the
- <code>send-as-is</code> handler, which is used for files which
- contain their own HTTP headers. All files in the
- <code>/web/htdocs/asis/</code> directory will be processed by
- the <code>send-as-is</code> handler, regardless of their
- filename extensions.</p>
-
- <example>
- &lt;Directory /web/htdocs/asis&gt;<br/>
- SetHandler send-as-is<br/>
- &lt;/Directory&gt;
- </example>
-
- </section>
- </section>
- <section id="programmer">
- <title>Programmer's Note</title>
-
- <p>In order to implement the handler features, an addition has
- been made to the <a href="developer/API.html">Apache API</a> that
- you may wish to make use of. Specifically, a new record has
- been added to the <code>request_rec</code> structure:</p>
-
- <example>
- char *handler
- </example>
-
- <p>If you wish to have your module engage a handler, you need
- only to set <code>r-&gt;handler</code> to the name of the
- handler at any time prior to the <code>invoke_handler</code>
- stage of the request. Handlers are implemented as they were
- before, albeit using the handler name instead of a content
- type. While it is not necessary, the naming convention for
- handlers is to use a dash-separated word, with no slashes, so
- as to not invade the media type name-space.</p>
- </section>
-</manualpage>
-
-
-
-
-
diff --git a/docs/manual/handler.xml.es b/docs/manual/handler.xml.es
deleted file mode 100644
index 8d6618e51a..0000000000
--- a/docs/manual/handler.xml.es
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="handler.xml.meta">
-
- <title>Uso de los Handlers en Apache</title>
-
- <summary>
- <p>Este documento describe el uso de los Handlers en Apache.</p>
- </summary>
-
- <section id="definition">
- <title>¿Qu&#233; es un Handler?</title>
- <related>
- <modulelist>
- <module>mod_actions</module>
- <module>mod_asis</module>
- <module>mod_cgi</module>
- <module>mod_imap</module>
- <module>mod_info</module>
- <module>mod_mime</module>
- <module>mod_negotiation</module>
- <module>mod_status</module>
- </modulelist>
- <directivelist>
- <directive module="mod_actions">Action</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="mod_mime">RemoveHandler</directive>
- <directive module="core">SetHandler</directive>
- </directivelist>
- </related>
-
-
- <p>Un "handler" es una representaci&#243;n interna de Apache de
- una acci&#243;n que se va a ejecutar cuando hay una llamada a un
- fichero. Generalmente, los ficheros tienen handlers
- impl&#237;citos, basados en el tipo de fichero de que se
- trata. Normalmente, todos los ficheros son simplemente servidos
- por el servidor, pero algunos tipos de ficheros se tratan de forma
- diferente.</p>
-
- <p>Apache 1.1 a&#241;ade la posibilidad de usar handlers
- explicitamente. Bas&#225;ndose en la extension del fichero o en
- la ubicaci&#243;n en la que este, se pueden especificar handlers
- sin tener en cuenta el tipo de fichero de que se trate. Esto es
- una ventaja por dos razones. Primero, es una soluci&#243;n
- m&#225;s elegante. Segundo, porque a un fichero se le pueden
- asignar tanto un tipo <strong>como</strong> un handler. (Consulte
- tambi&#233;n la secci&#243;n <a
- href="mod/mod_mime.html#multipleext">Ficheros y extensiones
- m&#250;ltiples</a>.)</p>
-
- <p>Los Handlers pueden ser tanto ser compilados con el servidor
- como incluidos en un m&#243;dulo, como a&#241;adidos con la
- directiva <directive module="mod_actions">Action</directive>. Los
- handlers compilados con el servidor de la distribuci&#243;n
- est&#225;ndar de Apache son:</p>
-
- <ul>
- <li><strong>default-handler</strong>: Env&#237;a el fichero
- usando el <code>default_handler()</code>, que es el handler
- usado por defecto para tratar contenido
- est&#225;tico. (core)</li>
-
- <li><strong>send-as-is</strong>: Env&#237;a el fichero con
- cabeceras HTTP tal y como es. (<module>mod_asis</module>)</li>
-
- <li><strong>cgi-script</strong>: Trata el fichero como un sript
- CGI. (<module>mod_cgi</module>)</li>
-
- <li><strong>imap-file</strong>: Trata el fichero como un mapa de
- im&#225;genes. (<module>mod_imap</module>)</li>
-
- <li><strong>server-info</strong>: Extrae la informaci&#243;n de
- configuraci&#243;n del
- servidor. (<module>mod_info</module>)</li>
-
- <li><strong>server-status</strong>: Extrae el informe de estado
- del servidor. (<module>mod_status</module>)</li>
-
- <li><strong>type-map</strong>: Trata el fichero como una
- correspondencia de tipos para la negociaci&#243;n de contenidos.
- (<module>mod_negotiation</module>)</li> </ul> </section>
-
- <section id="examples"> <title>Ejemplos</title>
-
- <section id="example1">
- <title>Modificar contenido est&#225;tico usando un script
- CGI</title>
-
- <p>Las siguientes directivas hacen que cuando haya una
- petici&#243;n de ficheros con la extensi&#243;n
- <code>html</code> se lance el script CGI
- <code>footer.pl</code>.</p>
-
- <example>
- Action add-footer /cgi-bin/footer.pl<br/>
- AddHandler add-footer .html
- </example>
-
- <p>En este caso, el script CGI es el responsable de enviar el
- documento originalmente solicitado (contenido en la variable de
- entorno <code>PATH_TRANSLATED</code>) y de hacer cualquier
- modificaci&#243;n o a&#241;adido deseado.</p>
-
- </section>
- <section id="example2">
- <title>Archivos con cabaceras HTTP</title>
-
- <p>Las siguientes directivas activan el handler
- <code>send-as-is</code>, que se usa para ficheros que contienen
- sus propias cabeceras HTTP. Todos los archivos en el directorio
- <code>/web/htdocs/asis/</code> ser&#225;n procesados por el
- handler <code>send-as-is</code>, sin tener en cuenta su
- extension.</p>
-
- <example>
- &lt;Directory /web/htdocs/asis&gt;<br/>
- SetHandler send-as-is<br/>
- &lt;/Directory&gt;
- </example>
-
- </section>
- </section>
- <section id="programmer">
- <title>Nota para programadores</title>
-
- <p>Para implementar las funcionalidades de los handlers, se ha
- hecho un a&#241;adido a la <a href="developer/API.html">API de
- Apache</a> que puede que quiera usar. Para ser m&#225;s
- espec&#237;ficos, se ha a&#241;adido un nuevo registro a la
- estructura <code>request_rec</code>:</p>
-
- <example>
- char *handler
- </example>
-
- <p>Si quiere que su m&#243;dulo llame a un handler , solo tiene
- que a&#241;adir <code>r-&gt;handler</code> al nombre del handler
- en cualquier momento antes de la fase <code>invoke_handler</code>
- de la petici&#243;n. Los handlers se implementan siempre como se
- hac&#237;a antes, aunque usando el nombre del handler en vez de un
- tipo de contenido. Aunque no es de obligado cumplimiento, la
- convenci&#243;n de nombres para los handlers es que se usen
- palabras separadas por guiones, sin barras, de manera que no se
- invada el media type name-space.</p>
- </section>
-</manualpage>
-
-
-
-
-
-
diff --git a/docs/manual/handler.xml.ja b/docs/manual/handler.xml.ja
deleted file mode 100644
index b65a2141bd..0000000000
--- a/docs/manual/handler.xml.ja
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="handler.xml.meta">
-
- <title>Apache $B$N%O%s%I%i$N;HMQ(B</title>
-
- <summary>
- <p>Apache $B$N%O%s%I%i$N;HMQ$K4X$7$F5-=R$7$F$$$^$9!#(B</p>
- </summary>
-
- <section id="definition">
- <title>$B%O%s%I%i$H$O(B</title>
- <related>
- <modulelist>
- <module>mod_actions</module>
- <module>mod_asis</module>
- <module>mod_cgi</module>
- <module>mod_imap</module>
- <module>mod_info</module>
- <module>mod_mime</module>
- <module>mod_negotiation</module>
- <module>mod_status</module>
- </modulelist>
- <directivelist>
- <directive module="mod_actions">Action</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="mod_mime">RemoveHandler</directive>
- <directive module="core">SetHandler</directive>
- </directivelist>
- </related>
-
-
- <p>$B!V%O%s%I%i!W$H$O!"%U%!%$%k$,8F$P$l$?$H$-$K<B9T$5$l$kF0:n$N(B
- Apache $B$K$*$1$kFbItI=8=$G$9!#(B
- $BDL>o!"%U%!%$%k$O%U%!%$%k7?$K4p$E$$$?0EL[$N%O%s%I%i$,$"$j$^$9!#(B
- $BIaDL$O$9$Y$F$N%U%!%$%k$OC1$K%5!<%P$K07$o$l$^$9$,!"(B
- $B%U%!%$%k%?%$%W$NCf$K$OJL$K!V%O%s%I%k!W(B($BLuCm(B: $B07$&(B)
- $B$5$l$k$b$N$b$"$j$^$9!#(B</p>
-
- <p>Apache 1.1 $B$G$O!"%O%s%I%i$rL@<(E*$K;HMQ$9$k5!G=$,DI2C$5$l$^$7$?!#(B
- $B%U%!%$%k$N3HD%;R$dCV$$$F$$$k>l=j$K4p$E$$$F!"(B
- $B%U%!%$%k7?$H4X78$J$/%O%s%I%i$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B$3$l$O$h$jM%2m$J2r7hK!$H$$$&E@$H!"%U%!%$%k$K%?%$%W(B<strong>$B$H(B</strong
- >$B%O%s%I%i$NN>J}$r4XO"IU$1$k$3$H$,$G$-$k$H$$$&E@$GM%$l$F$$$^$9!#(B
- (<a href="mod/mod_mime.html#multipleext"
- >$BJ#?t$N3HD%;R$N$"$k%U%!%$%k(B</a>$B$b;2>H$7$F$/$@$5$$(B)$B!#(B</p>
-
- <p>$B%O%s%I%i$O%5!<%P$KAH$_9~$s$@$j!"%b%8%e!<%k$H$7$F4^$a$?$j!"(B
- <directive module="mod_actions">Action</directive>
- $B%G%#%l%/%F%#%V$H$7$FDI2C$7$?$j$9$k$3$H$,$G$-$^$9!#(B
- $B0J2<$OI8=`G[I[$KAH$_9~$^$l$F$$$k%O%s%I%i$G$9!#(B
- </p>
-
- <ul>
- <li><strong>default-handler</strong>:<code>default_handelr()</code>
- $B$r;H$C$F%U%!%$%k$rAw$j$^$9!#(B
- $B@EE*$J%3%s%F%s%D$r07$&$H$-$K%G%U%)%k%H$G;HMQ$5$l$k%O%s%I%i$G$9!#(B
- (<module>core</module>)</li>
-
- <li><strong>send-as-is</strong>:
- HTTP $B%X%C%@$N$"$k%U%!%$%k$r$=$N$^$^Aw$j$^$9!#(B
- (<module>mod_asis</module>)</li>
-
- <li><strong>cgi-script</strong>: $B%U%!%$%k$r(B CGI
- $B%9%/%j%W%H$H$7$F07$$$^$9!#(B
- (<module>mod_cgi</module>)</li>
-
- <li><strong>imap-file</strong>:
- $B%$%a!<%8%^%C%W$N%k!<%k%U%!%$%k$H$7$F2r@O$7$^$9!#(B
- (<module>mod_imap</module>)</li>
-
- <li><strong>server-info</strong>: $B%5!<%P$N@_Dj>pJs$r<hF@$7$^$9!#(B
- (<module>mod_info</module>)</li>
-
- <li><strong>server-status</strong>: $B%5!<%P$N>uBVJs9p$r<hF@$7$^$9!#(B
- (<module>mod_status</module>)</li>
-
- <li><strong>type-map</strong>:
- $B%3%s%F%s%H%M%4%7%(!<%7%g%s$N$?$a$N%?%$%W%^%C%W$H$7$F2r@O$7$^$9!#(B
- (<module>mod_negotiation</module>)</li>
- </ul>
- </section>
- <section id="examples">
- <title>$BNc(B</title>
-
- <section id="example1">
- <title>CGI $B%9%/%j%W%H$rMQ$$$F@EE*$J%3%s%F%s%D$rJQ99$9$k(B</title>
-
- <p>$B0J2<$N%G%#%l%/%F%#%V$K$h$C$F!"3HD%;R$,(B <code>html</code>
- $B$G$"$k%U%!%$%k$O(B <code>footer.pl</code>
- CGI $B%9%/%j%W%H$r5/F0$9$k$h$&$K$J$j$^$9!#(B</p>
-
- <example>
- Action add-footer /cgi-bin/footer.pl<br/>
- AddHandler add-footer .html
- </example>
-
- <p>CGI $B%9%/%j%W%H$O4uK>$N=$@5$dDI2C$r9T$J$C$F!"85!9MW5a$5$l$?J8=q(B
- ($B4D6-JQ?t(B <code>PATH_TRANSLATED</code>
- $B$G;X$5$l$F$$$^$9(B) $B$rAw$k@UG$$,$"$j$^$9!#(B
- </p>
-
- </section>
- <section id="example2">
- <title>HTTP $B%X%C%@$N$"$k%U%!%$%k(B</title>
-
- <p>$B0J2<$N%G%#%l%/%F%#%V$O(B <code>send-as-is</code>
- $B%O%s%I%i$r;HMQ$9$k$h$&$K;X<($7$^$9!#$3$N%O%s%I%i$O<+J,<+?H$N(B HTTP
- $B%X%C%@$r;}$C$F$$$k%U%!%$%k$K;HMQ$5$l$^$9!#$3$3$G$O!"3HD%;R$K4X$o$i$:!"(B
- <code>/web/htdocs/asis</code> $B%G%#%l%/%H%j$K$"$kA4$F$N%U%!%$%k$O(B
- <code>send-as-is</code> $B%O%s%I%i$K$h$C$F07$o$l$^$9!#(B</p>
-
- <example>
- &lt;Directory /web/htdocs/asis&gt;<br/>
- SetHandler send-as-is<br/>
- &lt;/Directory&gt;
- </example>
-
- </section>
- </section>
- <section id="programmer">
- <title>$B%W%m%0%i%^8~$1$N%a%b(B</title>
-
- <p>$B%O%s%I%i$N5!G=$r<BAu$9$k$?$a$K!"MxMQ$9$k$HJXMx$+$b$7$l$J$$$b$N$,(B
- <a href="developer/API.html">Apache API</a>
- $B$KDI2C$5$l$^$7$?!#>\$7$/8@$&$H!"(B<code>request_rec</code>
- $B9=B$BN$K?7$7$$%l%3!<%I$,DI2C$5$l$?$H$$$&$3$H$G$9!#(B</p>
-
- <example>
- char *handler
- </example>
-
- <p>$B$b$7%b%8%e!<%k$,%O%s%I%i$K4X$o$j$?$$>l9g!"(B
- $B$d$i$J$1$l$P$J$i$J$$$3$H$O!"%j%/%(%9%H$,(B <code>invoke_handler</code>
- $B%9%F!<%8$KC#$9$k0JA0$K(B <code>r-&gt;handler</code>
- $B$r@_Dj$9$k$3$H$@$1$G$9!#%O%s%I%i$O%3%s%F%s%H%?%$%W$NBe$o$j$K(B
- $B%O%s%I%iL>$r;H$&$h$&$K$J$C$F$$$k$3$H0J30$O!"0JA0$HF1$8$h$&$K<BAu$5$l$F$$$^$9!#(B
- $BI,$:MW5a$5$l$F$$$k$o$1$G$O$"$j$^$;$s$,!"%a%G%#%"%?%$%W(B
- $B$NL>A06u4V$r?/$5$J$$$h$&$K!"%O%s%I%i$NL>A0$K$O%9%i%C%7%e$r4^$^$J$$!"(B
- $B%@%C%7%e(B ($BLuCm(B: "-") $B$GJ,N%$5$l$?L>A0$rIU$1$k=,47$K$J$C$F$$$^$9!#(B</p>
- </section>
-</manualpage>
diff --git a/docs/manual/handler.xml.ko b/docs/manual/handler.xml.ko
deleted file mode 100644
index 1cec8efc5c..0000000000
--- a/docs/manual/handler.xml.ko
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="handler.xml.meta">
-
- <title>¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</title>
-
- <summary>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
- </summary>
-
- <section id="definition">
- <title>Çڵ鷯°¡ ¹«¾ùÀΰ¡</title>
- <related>
- <modulelist>
- <module>mod_actions</module>
- <module>mod_asis</module>
- <module>mod_cgi</module>
- <module>mod_imap</module>
- <module>mod_info</module>
- <module>mod_mime</module>
- <module>mod_negotiation</module>
- <module>mod_status</module>
- </modulelist>
- <directivelist>
- <directive module="mod_actions">Action</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="mod_mime">RemoveHandler</directive>
- <directive module="core">SetHandler</directive>
- </directivelist>
- </related>
-
-
- <p>ÆÄÀÏÀ» ¿äûÇÒ¶§ ¾ÆÆÄÄ¡°¡ ³»ºÎÀûÀ¸·Î ¼öÇàÇÒ ÀÛ¾÷À»
- "Çڵ鷯(handler)"¶ó°í ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ÆÄÀÏÀº ÆÄÀÏ Á¾·ù¿¡
- µû¶ó ¾Ï¹¬ÀûÀÎ Çڵ鷯¸¦ °¡Áö°í ÀÖ´Ù. ¸ðµç ÆÄÀÏÀº º¸Åë °£´ÜÈ÷
- ¼­¹ö°¡ ¼­ºñ½ºÇÏÁö¸¸, ¾î¶² ÆÄÀÏ Á¾·ù´Â µû·Î "󸮵ȴÙ(handled)".</p>
-
- <p>Apache 1.1ºÎÅÍ Çڵ鷯¸¦ ¸í½ÃÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
- ÆÄÀÏ Á¾·ù¿Í °ü°è¾øÀÌ Çڵ鷯¸¦ ÆÄÀÏÀÇ È®ÀåÀÚ³ª À§Ä¡¿¡ µû¶ó
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´õ ÈǸ¢ÇÑ ¹æ¹ýÀÌ°í ÆÄÀÏÀ» Á¾·ù¿Í Çڵ鷯
- µÑ ¸ðµÎ¿Í ¿¬°èÇÒ ¼ö Àֱ⶧¹®¿¡ ÁÁ´Ù. (<a
- href="mod/mod_mime.html#multipleext">¿©·¯ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏ</a>µµ
- Âü°í)</p>
-
- <p>Çڵ鷯´Â ¼­¹ö³ª ¸ðµâ·Î ±¸ÇöÇÏ¿©, <directive
- module="mod_actions">Action</directive> Áö½Ã¾î·Î Ãß°¡ÇÒ
- ¼ö ÀÖ´Ù. Ç¥ÁØ ¹èÆ÷º»¿¡ ÀÖ´Â ±âº» Çڵ鷯´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <ul>
- <li><strong>default-handler</strong>: Á¤ÀûÀÎ ³»¿ëÀ»
- ó¸®ÇϱâÀ§ÇØ ±âº»ÀûÀ¸·Î »ç¿ëÇÏ´Â Çڵ鷯
- <code>default_handler()</code>¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ» º¸³½´Ù.
- (core)</li>
-
- <li><strong>send-as-is</strong>: HTTP Çì´õ°¡ ÀÖ´Â ÆÄÀÏÀ»
- ±×´ë·Î º¸³½´Ù. (<module>mod_asis</module>)</li>
-
- <li><strong>cgi-script</strong>: ÆÄÀÏÀ» CGI·Î ó¸®ÇÑ´Ù.
- (<module>mod_cgi</module>)</li>
-
- <li><strong>imap-file</strong>: imagemap ±ÔÄ¢ ÆÄÀÏ·Î
- ó¸®ÇÑ´Ù. (<module>mod_imap</module>)</li>
-
- <li><strong>server-info</strong>: ¼­¹öÀÇ ¼³Á¤ Á¤º¸¸¦
- ¾Ë·ÁÁØ´Ù. (<module>mod_info</module>)</li>
-
- <li><strong>server-status</strong>: ¼­¹öÀÇ »óŸ¦ º¸°íÇÑ´Ù.
- (<module>mod_status</module>)</li>
-
- <li><strong>type-map</strong>: ³»¿ëÇù»ó¿¡ »ç¿ëÇÒ
- type mapÀ¸·Î ó¸®ÇÑ´Ù.
- (<module>mod_negotiation</module>)</li>
- </ul>
- </section>
- <section id="examples">
- <title>¿¹Á¦</title>
-
- <section id="example1">
- <title>CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ¿© Á¤ÀûÀÎ ³»¿ë ¼öÁ¤Çϱâ</title>
-
- <p>´ÙÀ½ Áö½Ã¾î´Â È®ÀåÀÚ°¡ <code>html</code>ÀÎ ÆÄÀÏÀ»
- ¿äûÇÒ °æ¿ì <code>footer.pl</code> CGI ½ºÅ©¸³Æ®¸¦ ¶ç¿î´Ù.</p>
-
- <example>
- Action add-footer /cgi-bin/footer.pl<br/>
- AddHandler add-footer .html
- </example>
-
- <p>CGI ½ºÅ©¸³Æ®´Â
- (<code>PATH_TRANSLATED</code> ȯ°æº¯¼ö°¡ ÁöĪÇÏ´Â) ¿ø·¡
- ¿äûÇÑ ¹®¼­¸¦ ÀûÀýÈ÷ ¼öÁ¤ÇÑ ÈÄ º¸³½´Ù.</p>
-
- </section>
- <section id="example2">
- <title>HTTP Çì´õ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀÏ</title>
-
- <p>´ÙÀ½ Áö½Ã¾î´Â HTTP Çì´õ¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀÏ¿¡
- <code>send-as-is</code> Çڵ鷯¸¦ Áö½ÃÇÑ´Ù.
- <code>/web/htdocs/asis/</code> µð·ºÅ丮 ¾È¿¡ ÀÖ´Â ¸ðµç
- ÆÄÀÏÀº È®ÀåÀÚ¿Í °ü°è¾øÀÌ <code>send-as-is</code> Çڵ鷯°¡
- ó¸®ÇÑ´Ù.</p>
-
- <example>
- &lt;Directory /web/htdocs/asis&gt;<br/>
- SetHandler send-as-is<br/>
- &lt;/Directory&gt;
- </example>
-
- </section>
- </section>
- <section id="programmer">
- <title>ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ Á¤º¸</title>
-
- <p>Çڵ鷯 ±â´ÉÀ» ±¸ÇöÇϱâÀ§ÇØ »ç¿ëÇÔÁ÷ÇÑ
- <a href="developer/API.html">Apache API</a>°¡ Ãß°¡µÇ¾ú´Ù.
- ƯÈ÷ <code>request_rec</code> ±¸Á¶Ã¼¿¡ »õ·Î¿î Çʵ尡
- Ãß°¡µÇ¾ú´Ù:</p>
-
- <example>
- char *handler
- </example>
-
- <p>¸ðµâÀÌ Çڵ鷯¸¦ »ç¿ëÇÏ·Á¸é, ¿äûÀÇ
- <code>invoke_handler</code> ´Ü°è ÀÌÀü¿¡
- <code>r-&gt;handler</code>¿¡ Çڵ鷯 À̸§À» ÁöÁ¤ÇØÁֱ⸸
- ÇÏ¸é µÈ´Ù. Çڵ鷯´Â content type ´ë½Å Çڵ鷯 À̸§À» »ç¿ëÇÑ
- °ÍÀ» Á¦¿ÜÇÏ°í´Â Àü°ú °°ÀÌ ±¸ÇöµÇ¾ú´Ù. ²À Áöų ÇÊ¿ä´Â ¾øÁö¸¸
- Çڵ鷯 À̸§¿¡ ½½·¡½¬¸¦ »ç¿ëÇÏÁö ¾Ê°í, ´Ü¾îµé »çÀÌ¿¡ »©±â
- ±âÈ£¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. ±×·¡¼­ Çڵ鷯 À̸§ÀÌ
- media type°ú °ãÄ¡Áö ¾Ê´Â´Ù.</p>
- </section>
-</manualpage>
-
-
-
-
-
diff --git a/docs/manual/handler.xml.meta b/docs/manual/handler.xml.meta
deleted file mode 100644
index b4adeefc98..0000000000
--- a/docs/manual/handler.xml.meta
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>handler</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/howto/.cvsignore b/docs/manual/howto/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/howto/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/howto/auth.html b/docs/manual/howto/auth.html
deleted file mode 100644
index fddd99738b..0000000000
--- a/docs/manual/howto/auth.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: auth.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: auth.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: auth.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/howto/auth.html.en b/docs/manual/howto/auth.html.en
deleted file mode 100644
index df322477e4..0000000000
--- a/docs/manual/howto/auth.html.en
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Authentication, Authorization and Access Control - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Authentication, Authorization and Access Control</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/auth.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Authentication is any process by which you verify that
- someone is who they claim they are. Authorization is any
- process by which someone is allowed to be where they want to
- go, or to have information that they want to have.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Related Modules and Directives</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">The Prerequisites</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Getting it working</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Letting more than one
-person in</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Possible problems</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#whatotherneatstuffcanido">What other neat stuff can I
-do?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">More information</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Related Modules and Directives</a></h2>
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Introduction</a></h2>
- <p>If you have information on your web site that is sensitive
- or intended for only a small group of people, the techniques in
- this article will help you make sure that the people that see
- those pages are the people that you wanted to see them.</p>
-
- <p>This article covers the "standard" way of protecting parts
- of your web site that most of you are going to use.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theprerequisites" id="theprerequisites">The Prerequisites</a></h2>
- <p>The directives discussed in this article will need to go
- either in your main server configuration file (typically in a
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> section), or
- in per-directory configuration files (<code>.htaccess</code> files).</p>
-
- <p>If you plan to use <code>.htaccess</code> files, you will
- need to have a server configuration that permits putting
- authentication directives in these files. This is done with the
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive, which
- specifies which directives, if any, may be put in per-directory
- configuration files.</p>
-
- <p>Since we're talking here about authentication, you will need
- an <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive like the
- following:</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig
- </code></p></div>
-
- <p>Or, if you are just going to put the directives directly in
- your main server configuration file, you will of course need to
- have write permission to that file.</p>
-
- <p>And you'll need to know a little bit about the directory
- structure of your server, in order to know where some files are
- kept. This should not be terribly difficult, and I'll try to
- make this clear when we come to that point.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="gettingitworking" id="gettingitworking">Getting it working</a></h2>
- <p>Here's the basics of password protecting a directory on your
- server.</p>
-
- <p>You'll need to create a password file. This file should be
- placed somewhere not accessible from the web. This is so that
- folks cannot download the password file. For example, if your
- documents are served out of <code>/usr/local/apache/htdocs</code> you
- might want to put the password file(s) in
- <code>/usr/local/apache/passwd</code>.</p>
-
- <p>To create the file, use the <a href="../programs/htpasswd.html">htpasswd</a> utility that came
- with Apache. This will be located in the <code>bin</code> directory
- of wherever you installed Apache. To create the file, type:</p>
-
- <div class="example"><p><code>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </code></p></div>
-
- <p><code>htpasswd</code> will ask you for the password, and
- then ask you to type it again to confirm it:</p>
-
- <div class="example"><p><code>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mypassword<br />
- Re-type new password: mypassword<br />
- Adding password for user rbowen
- </code></p></div>
-
- <p>If <code>htpasswd</code> is not in your path, of course
- you'll have to type the full path to the file to get it to run.
- On my server, it's located at
- <code>/usr/local/apache/bin/htpasswd</code></p>
-
- <p>Next, you'll need to configure the server to request a
- password and tell the server which users are allowed access.
- You can do this either by editing the <code>httpd.conf</code>
- file or using an <code>.htaccess</code> file. For example, if
- you wish to protect the directory
- <code>/usr/local/apache/htdocs/secret</code>, you can use the
- following directives, either placed in the file
- <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or
- placed in <code>httpd.conf</code> inside a &lt;Directory
- /usr/local/apache/apache/htdocs/secret&gt; section.</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Restricted Files"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </code></p></div>
-
- <p>Let's examine each of those directives individually. The <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code> directive selects
- that method that is used to authenticate the user. The most
- common method is <code>Basic</code>, and this is the method
- implemented by <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. It is important to be aware,
- however, that Basic authentication sends the password from the client to
- the browser unencrypted. This method should therefore not be used for
- highly sensitive data. Apache supports one other authentication method:
- <code>AuthType Digest</code>. This method is implemented by <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> and is much more secure. Only the most recent
- versions of clients are known to support Digest authentication.</p>
-
- <p>The <code class="directive"><a href="../mod/core.html#authname">AuthName</a></code> directive sets
- the <dfn>Realm</dfn> to be used in the authentication. The realm serves
- two major functions. First, the client often presents this information to
- the user as part of the password dialog box. Second, it is used by the
- client to determine what password to send for a given authenticated
- area.</p>
-
- <p>So, for example, once a client has authenticated in the
- <code>"Restricted Files"</code> area, it will automatically
- retry the same password for any area on the same server that is
- marked with the <code>"Restricted Files"</code> Realm.
- Therefore, you can prevent a user from being prompted more than
- once for a password by letting multiple restricted areas share
- the same realm. Of course, for security reasons, the client
- will always need to ask again for the password whenever the
- hostname of the server changes.</p>
-
- <p>The <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- directive sets the path to the password file that we just
- created with <code>htpasswd</code>. If you have a large number
- of users, it can be quite slow to search through a plain text
- file to authenticate the user on each request. Apache also has
- the ability to store user information in fast database files.
- The <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> module provides the <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> directive. These
- files can be created and manipulated with the <a href="../programs/dbmmanage.html">dbmmanage</a> program. Many
- other types of authentication options are available from third
- party modules in the <a href="http://modules.apache.org/">Apache Modules
- Database</a>.</p>
-
- <p>Finally, the <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- directive provides the authorization part of the process by
- setting the user that is allowed to access this region of the
- server. In the next section, we discuss various ways to use the
- <code class="directive"><a href="../mod/core.html#require">Require</a></code> directive.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Letting more than one
-person in</a></h2>
- <p>The directives above only let one person (specifically
- someone with a username of <code>rbowen</code>) into the
- directory. In most cases, you'll want to let more than one
- person in. This is where the <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> comes in.</p>
-
- <p>If you want to let more than one person in, you'll need to
- create a group file that associates group names with a list of
- users in that group. The format of this file is pretty simple,
- and you can create it with your favorite editor. The contents
- of the file will look like this:</p>
-
- <div class="example"><p><code>
- GroupName: rbowen dpitts sungo rshersey
- </code></p></div>
-
- <p>That's just a list of the members of the group in a long
- line separated by spaces.</p>
-
- <p>To add a user to your already existing password file,
- type:</p>
-
- <div class="example"><p><code>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </code></p></div>
-
- <p>You'll get the same response as before, but it will be
- appended to the existing file, rather than creating a new file.
- (It's the <code>-c</code> that makes it create a new password
- file).</p>
-
- <p>Now, you need to modify your <code>.htaccess</code> file to
- look like the following:</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName
- </code></p></div>
-
- <p>Now, anyone that is listed in the group <code>GroupName</code>,
- and has an entry in the <code>password</code> file, will be let in, if
- they type the correct password.</p>
-
- <p>There's another way to let multiple users in that is less
- specific. Rather than creating a group file, you can just use
- the following directive:</p>
-
- <div class="example"><p><code>
- Require valid-user
- </code></p></div>
-
- <p>Using that rather than the <code>Require user rbowen</code>
- line will allow anyone in that is listed in the password file,
- and who correctly enters their password. You can even emulate
- the group behavior here, by just keeping a separate password
- file for each group. The advantage of this approach is that
- Apache only has to check one file, rather than two. The
- disadvantage is that you have to maintain a bunch of password
- files, and remember to reference the right one in the
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> directive.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="possibleproblems" id="possibleproblems">Possible problems</a></h2>
- <p>Because of the way that Basic authentication is specified,
- your username and password must be verified every time you
- request a document from the server. This is even if you're
- reloading the same page, and for every image on the page (if
- they come from a protected directory). As you can imagine, this
- slows things down a little. The amount that it slows things
- down is proportional to the size of the password file, because
- it has to open up that file, and go down the list of users
- until it gets to your name. And it has to do this every time a
- page is loaded.</p>
-
- <p>A consequence of this is that there's a practical limit to
- how many users you can put in one password file. This limit
- will vary depending on the performance of your particular
- server machine, but you can expect to see slowdowns once you
- get above a few hundred entries, and may wish to consider a
- different authentication method at that time.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="whatotherneatstuffcanido" id="whatotherneatstuffcanido">What other neat stuff can I
-do?</a></h2>
- <p>Authentication by username and password is only part of the
- story. Frequently you want to let people in based on something
- other than who they are. Something such as where they are
- coming from.</p>
-
- <p>The <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> and
- <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> directives let
- you allow and deny access based on the host name, or host
- address, of the machine requesting a document. The
- <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> directive goes
- hand-in-hand with these two, and tells Apache in which order to
- apply the filters.</p>
-
- <p>The usage of these directives is:</p>
-
- <div class="example"><p><code>
- Allow from <var>address</var>
- </code></p></div>
-
- <p>where <var>address</var> is an IP address (or a partial IP
- address) or a fully qualified domain name (or a partial domain
- name); you may provide multiple addresses or domain names, if
- desired.</p>
-
- <p>For example, if you have someone spamming your message
- board, and you want to keep them out, you could do the
- following:</p>
-
- <div class="example"><p><code>
- Deny from 205.252.46.165
- </code></p></div>
-
- <p>Visitors coming from that address will not be able to see
- the content covered by this directive. If, instead, you have a
- machine name, rather than an IP address, you can use that.</p>
-
- <div class="example"><p><code>
- Deny from <var>host.example.com</var>
- </code></p></div>
-
- <p>And, if you'd like to block access from an entire domain,
- you can specify just part of an address or domain name:</p>
-
- <div class="example"><p><code>
- Deny from <var>192.101.205</var><br />
- Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
- Deny from ke
- </code></p></div>
-
- <p>Using <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> will let you
- be sure that you are actually restricting things to the group that you want
- to let in, by combining a <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> and an <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> directive:</p>
-
- <div class="example"><p><code>
- Order deny,allow<br />
- Deny from all<br />
- Allow from <var>dev.example.com</var>
- </code></p></div>
-
- <p>Listing just the <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>
- directive would not do what you want, because it will let folks from that
- host in, in addition to letting everyone in. What you want is to let
- <em>only</em> those folks in.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinformation" id="moreinformation">More information</a></h2>
- <p>You should also read the documentation for
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> and <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> which
- contain some more information about how this all works.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/auth.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/auth.html.ja.euc-jp b/docs/manual/howto/auth.html.ja.euc-jp
deleted file mode 100644
index 213c04ae47..0000000000
--- a/docs/manual/howto/auth.html.ja.euc-jp
+++ /dev/null
@@ -1,384 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ǧ¾Ú¡¢¾µÇ§¡¢¥¢¥¯¥»¥¹À©¸æ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></div><div id="page-content"><div id="preamble"><h1>ǧ¾Ú¡¢¾µÇ§¡¢¥¢¥¯¥»¥¹À©¸æ</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/auth.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¡Öǧ¾Ú¡×¤È¤Ï¡¢Ã¯¤«¤¬¼«Ê¬¤Ïï¤Ç¤¢¤ë¤«¤ò¼çÄ¥¤·¤¿¾ì¹ç¤Ë¡¢
- ¤½¤ì¤ò³Îǧ¤¹¤ë¤¿¤á¤ÎÁ´²áÄø¤ò»Ø¤·¤Þ¤¹¡£¡Ö¾µÇ§¡×¤È¤Ï¡¢
- 狼¤¬¹Ô¤­¤¿¤¤¾ì½ê¤Ë¹Ô¤±¤ë¤è¤¦¤Ë¡¢¤¢¤ë¤¤¤ÏÍߤ·¤¤¾ðÊó¤ò
- ÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤ÎÁ´²áÄø¤ò»Ø¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">´ØÏ¢¤¹¤ë¥â¥¸¥å¡¼¥ë¤È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#introduction">¤Ï¤¸¤á¤Ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">½àÈ÷</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Æ°ºî¤µ¤»¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">
-Ê£¿ô¤Î¿Í¤¬Æþ¤ì¤ë¤è¤¦¤Ë¤¹¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">µ¯¤³¤ê¤¨¤ëÌäÂê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#whatotherneatstuffcanido">¤â¤Ã¤È¹ª¤ß¤ËÀ©¸æ¤Ç¤­¤Ê¤¤
-?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">ÄɲþðÊó</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">´ØÏ¢¤¹¤ë¥â¥¸¥å¡¼¥ë¤È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">¤Ï¤¸¤á¤Ë</a></h2>
- <p>¤â¤·µ¡Ì©¤Î¾ðÊó¤ä¡¢¤´¤¯¤´¤¯¾¯¿ô¥°¥ë¡¼¥×¤Î¿Í¸þ¤±¤Î¾ðÊó¤ò
- ¥¦¥§¥Ö¥µ¥¤¥È¤ËÃÖ¤¯¤Î¤Ç¤¢¤ì¤Ð¡¢¤³¤Îʸ½ñ¤Ë½ñ¤«¤ì¤Æ¤¤¤ë
- ¥Æ¥¯¥Ë¥Ã¥¯¤ò»È¤¦¤³¤È¤Ç¡¢¤½¤Î¥Ú¡¼¥¸¤ò¸«¤Æ¤¤¤ë¿Í¤¿¤Á¤¬
- ˾¤ß¤Î¿Í¤¿¤Á¤Ç¤¢¤ë¤³¤È¤ò³Î¼Â¤Ë¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¤³¤Îʸ½ñ¤Ç¤Ï¡¢Â¿¤¯¤Î¿Í¤¬ºÎÍѤ¹¤ë¤Ç¤¢¤í¤¦¡¢
- ¥¦¥§¥Ö¥µ¥¤¥È¤Î°ìÉôʬ¤òÊݸ¤ë¡Ö°ìÈÌŪ¤Ê¡×
- ÊýË¡¤Ë¤Ä¤¤¤Æ¥«¥Ð¡¼¤·¤Æ¤¤¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theprerequisites" id="theprerequisites">½àÈ÷</a></h2>
- <p>¤³¤Îʸ½ñ¤Ç¼è¤ê°·¤ï¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥á¥¤¥ó¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë (ÉáÄ̤Ï
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¥»¥¯¥·¥ç¥óÃæ) ¤«¡¢¤¢¤ë¤¤¤Ï¥Ç¥£¥ì¥¯¥È¥êËè¤ÎÀßÄê¥Õ¥¡¥¤¥ë
- (<code>.htaccess</code> ¥Õ¥¡¥¤¥ë) ¤«¤ÇÍѤ¤¤Þ¤¹¡£</p>
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤òÍѤ¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Ëǧ¾ÚÍѤΥǥ£¥ì¥¯¥Æ¥£¥Ö¤òÃÖ¤±¤ë¤è¤¦¤Ë
- ¥µ¡¼¥Ð¤ÎÀßÄê¤ò¤·¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤³¤ì¤Ï
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥êËè¤ÎÀßÄê¥Õ¥¡¥¤¥ëÃæ¤ËÃÖ¤¯¤³¤È¤Î¤Ç¤­¤ë
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¡¢¤â¤·¤¢¤ì¤Ð¡¢»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p>ǧ¾Ú¤Ë¤Ä¤¤¤ÆÏäò¿Ê¤á¤Æ¤¤¤ë¤Î¤Ç¡¢¼¡¤Î¤è¤¦¤Ê
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬É¬Íפˤʤë¤Ç¤·¤ç¤¦¡£</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig
- </code></p></div>
-
- <p>¤½¤¦¤Ç¤Ê¤¯¡¢¥á¥¤¥ó¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ë
- ľÀÜÃÖ¤¯¤Î¤Ç¤¢¤ì¤Ð¡¢ÅöÁ³¤Ê¤¬¤é¤½¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤­¹þ¤ß
- ¸¢¸Â¤ò»ý¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¤Þ¤¿¡¢¤É¤Î¥Õ¥¡¥¤¥ë¤¬¤É¤³¤ËÊݸ¤µ¤ì¤Æ¤¤¤ë¤«ÃΤ뤿¤á¤Ë¡¢
- ¥µ¡¼¥Ð¤Î¥Ç¥£¥ì¥¯¥È¥ê¹½Â¤¤Ë¤Ä¤¤¤Æ¾¯¤·ÃΤäƤª¤¯
- ɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
- ¤³¤ì¤Ï¤½¤ó¤Ê¤ËÆñ¤·¤¯¤Ê¤¤¤Î¤Ç¡¢¤³¤Îʸ½ñÃæ¤Ç
- ¥Ç¥£¥ì¥¯¥È¥ê¹½Â¤¤Ë¤Ä¤¤¤ÆÃΤäƤª¤¯É¬Íפ¬¤¢¤ë¾ìÌ̤Ǥϡ¢
- ÌÀ¤é¤«¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="gettingitworking" id="gettingitworking">Æ°ºî¤µ¤»¤ë</a></h2>
- <p>¤Ç¤Ï¡¢¥µ¡¼¥Ð¾å¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò¥Ñ¥¹¥ï¡¼¥É¤ÇÊݸ¤ë
- ´ðËܼê½ç¤ò¼¨¤·¤Þ¤¹¡£</p>
-
- <p>¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤òºî¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¡¢¥¦¥§¥Ö¤«¤é¥¢¥¯¥»¥¹¤Ç¤­¤ë¾ì½ê¤Ë
- ÃÖ¤¯¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£Â¾¤Î¿Í¤¬¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò
- ¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ç¤¹¡£Î㤨¤Ð¡¢
- <code>/usr/local/apache/htdocs</code> ¤Ç¥É¥­¥å¥á¥ó¥È¤ò
- Ä󶡤·¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ï
- <code>/usr/local/apache/passwd</code>
- ¤Ê¤É¤ËÃÖ¤¤¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¥Õ¥¡¥¤¥ë¤òºî¤ë¤¿¤á¤Ë¤Ï¡¢Apache ÉÕ°¤Î <a href="../programs/htpasswd.html">htpasswd</a>
- ¤ò»È¤¤¤Þ¤¹¡£¤³¤Î¥³¥Þ¥ó¥É¤Ï Apache ¤ò¤É¤³¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤·¤è¤¦¤È¤â¡¢
- ¥¤¥ó¥¹¥È¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>bin</code>
- ¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤ËÃÖ¤«¤ì¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¤òºî¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë
- ¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </code></p></div>
-
- <p><code>htpasswd</code> ¤Ï¡¢¥Ñ¥¹¥ï¡¼¥É¤òÍ׵ᤷ¡¢¤½¤Î¸å
- ³Îǧ¤Î¤¿¤á¤Ë¤â¤¦°ìÅÙÆþÎϤ¹¤ë¤è¤¦¤ËÍ׵ᤷ¤Æ¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mypassword<br />
- Re-type new password: mypassword<br />
- Adding password for user rbowen
- </code></p></div>
-
- <p>¤â¤· <code>htpasswd</code> ¤¬¥Ñ¥¹¤ÎÃæ¤ËÆþ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢
- ¤â¤Á¤í¤ó¡¢¼Â¹Ô¤¹¤ë¤¿¤á¤Ë¥×¥í¥°¥é¥à¤Þ¤Ç¤Î¥Õ¥ë¥Ñ¥¹¤ò
- ¥¿¥¤¥×¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£»ä¤Î¥µ¡¼¥Ð¤Ç¤¢¤ì¤Ð¡¢
- <code>/usr/local/apache/bin/htpasswd</code>
- ¤Ë¥×¥í¥°¥é¥à¤¬ÃÖ¤«¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¼¡¤Ë¡¢¥µ¡¼¥Ð¤¬¥Ñ¥¹¥ï¡¼¥É¤òÍ׵᤹¤ë¤è¤¦¤ËÀßÄꤷ¤Æ¡¢
- ¤É¤Î¥æ¡¼¥¶¤¬¥¢¥¯¥»¥¹¤òµö¤µ¤ì¤Æ¤¤¤ë¤«¤ò¥µ¡¼¥Ð¤ËÃΤ餻¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£ <code>httpd.conf</code> ¤òÊÔ½¸¤¹¤ë¤«
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹¤ë¤«¤Ç
- ÀßÄꤷ¤Þ¤¹¡£Î㤨¤Ð¡¢¥Ç¥£¥ì¥¯¥È¥ê
- <code>/usr/local/apache/htdocs/secret</code>
- ¤òÊݸ¤¿¤¤¾ì¹ç¤Ï¡¢
- <code>/usr/local/apache/htdocs/secret/.htaccess</code>
- ¤« httpd.conf Ãæ¤Î &lt;Directory
- /usr/local/apache/apache/htdocs/secret&gt; ¥»¥¯¥·¥ç¥ó¤Ë
- ÇÛÃÖ¤·¤Æ¡¢¼¡¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Restricted Files"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </code></p></div>
-
- <p>¸Ä¡¹¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤Ä¤¤¤Æ¸«¤Æ¤ß¤Þ¤·¤ç¤¦¡£
- <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤É¤¦¤¤¤¦Ç§¾ÚÊýË¡¤Ç¥æ¡¼¥¶¤Îǧ¾Ú¤ò¹Ô¤¦¤«¤ò
- ÁªÂò¤·¤Þ¤¹¡£ºÇ¤â°ìÈÌŪ¤ÊÊýË¡¤Ï <code>Basic</code>
- ¤Ç¡¢¤³¤ì¤Ï <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>
- ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤·¤«¤·¤Ê¤¬¤é¡¢
- ¤³¤ì¤Ïµ¤¤òÉÕ¤±¤ë¤Ù¤­½ÅÍפʥݥ¤¥ó¥È¤Ê¤Î¤Ç¤¹¤¬¡¢
- Basic ǧ¾Ú¤Ï¥¯¥é¥¤¥¢¥ó¥È¤«¤é¥Ö¥é¥¦¥¶¤Ø¡¢
- ¥Ñ¥¹¥ï¡¼¥É¤ò°Å¹æ²½¤»¤º¤ËÁ÷¤ê¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢
- ¤³¤ÎÊýË¡¤ÏÆä˵¡Ì©À­¤Î¹â¤¤¥Ç¡¼¥¿¤ËÂФ·¤Æ¤ÏÍѤ¤¤ë¤Ù¤­¤Ç¤Ï
- ¤¢¤ê¤Þ¤»¤ó¡£ Apache ¤Ç¤Ï¤â¤¦°ì¤ÄÊ̤Îǧ¾ÚÊýË¡:
- <code>AuthType Digest</code> ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ÎÊýË¡¤Ï <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>
- ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Æ¡¢¤â¤Ã¤È°ÂÁ´¤Ç¤¹¡£
- ¤´¤¯¤´¤¯ºÇ¶á¤Î¥¯¥é¥¤¥¢¥ó¥È¤·¤« Digest
- ǧ¾Ú¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤è¤¦¤Ç¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï¡¢Ç§¾Ú¤Ë»È¤¦ <dfn>Realm</dfn> (ÌõÃí: Îΰè)
- ¤òÀßÄꤷ¤Þ¤¹¡£Realm ¤ÏÂ礭¤¯Ê¬¤±¤ÆÆó¤Ä¤Îµ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£
- °ì¤ÄÌܤϡ¢¥¯¥é¥¤¥¢¥ó¥È¤¬¥Ñ¥¹¥ï¡¼¥É¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤Î
- °ìÉô¤È¤·¤Æ¥æ¡¼¥¶¤Ë¤³¤Î¾ðÊó¤ò¤è¤¯Ä󼨤¹¤ë¡¢¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£
- Æó¤ÄÌܤˤϡ¢¥¯¥é¥¤¥¢¥ó¥È¤¬Í¿¤¨¤é¤ì¤¿Ç§¾ÚÎΰè¤ËÂФ·¤Æ¤É¤Î¥Ñ¥¹¥ï¡¼¥É¤ò
- Á÷¿®¤¹¤ì¤ÐÎɤ¤¤Î¤«¤ò·èÄꤹ¤ë¤¿¤á¤Ë»È¤ï¤ì¤ë¡¢¤È¤¤¤¦µ¡Ç½¤Ç¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢<code>"Restricted Files"</code> ÎΰèÃæ¤Ç
- °ìÅÙǧ¾Ú¤µ¤ì¤ì¤Ð¡¢Æ±°ì¥µ¡¼¥Ð¾å¤Ç <code>"Restricted Files"</code>
- Realm ¤È¤·¤Æ¥Þ¡¼¥¯¤µ¤ì¤¿¤É¤ó¤ÊÎΰè¤Ç¤â¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ï
- ¼«Æ°Åª¤ËƱ¤¸¥Ñ¥¹¥ï¡¼¥É¤ò»È¤ª¤¦¤È»î¤ß¤Þ¤¹¡£
- ¤³¤Î¤ª¤«¤²¤Ç¡¢Ê£¿ô¤ÎÀ©¸ÂÎΰè¤ËƱ¤¸ realm ¤ò¶¦Í­¤µ¤»¤Æ¡¢
- ¥æ¡¼¥¶¤¬¥Ñ¥¹¥ï¡¼¥É¤ò²¿ÅÙ¤âÍ׵ᤵ¤ì¤ë»öÂÖ¤ò
- Ëɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤â¤Á¤í¤ó¡¢¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤«¤é¡¢
- ¥µ¡¼¥Ð¤Î¥Û¥¹¥È̾¤¬ÊѤï¤ì¤Ð¤¤¤Ä¤Ç¤âɬ¤º¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤ÏºÆ¤Ó¥Ñ¥¹¥ï¡¼¥É¤ò¿Ò¤Í¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>htpasswd</code> ¤Çºî¤Ã¤¿
- ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹¤òÀßÄꤷ¤Þ¤¹¡£
- ¥æ¡¼¥¶¿ô¤¬Â¿¤¤¾ì¹ç¤Ï¡¢¥ê¥¯¥¨¥¹¥ÈËè¤Î¥æ¡¼¥¶¤Îǧ¾Ú¤Î¤¿¤á¤Î
- ¥×¥ì¡¼¥ó¥Æ¥­¥¹¥È¤Îõº÷¤¬Èó¾ï¤ËÃÙ¤¯¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- Apache ¤Ç¤Ï¥æ¡¼¥¶¾ðÊó¤ò¹â®¤Ê¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Ë
- Êݴɤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- <code class="module"><a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a></code> ¥â¥¸¥å¡¼¥ë¤¬
- <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÄ󶡤·¤Þ¤¹¡£¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Ï <a href="../programs/dbmmanage.html">dbmmanage</a>
- ¥×¥í¥°¥é¥à¤ÇºîÀ®¤·¤¿¤êÁàºî¤·¤¿¤ê¤Ç¤­¤Þ¤¹¡£
- <a href="http://modules.apache.org/">Apache
- ¥â¥¸¥å¡¼¥ë¥Ç¡¼¥¿¥Ù¡¼¥¹</a>Ãæ¤Ë¤¢¤ë¥µ¡¼¥É¥Ñ¡¼¥Æ¥£¡¼À½¤Î
- ¥â¥¸¥å¡¼¥ë¤Ç¡¢¤½¤Î¾¿¤¯¤Î¥¿¥¤¥×¤Îǧ¾Ú¥ª¥×¥·¥ç¥ó¤¬
- ÍøÍѲÄǽ¤Ç¤¹¡£</p>
-
- <p>ºÇ¸å¤Ë¡¢<code class="directive"><a href="../mod/core.html#require">Require</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¡¢¥µ¡¼¥Ð¤Î¤³¤ÎÎΰè¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë¥æ¡¼¥¶¤ò
- »ØÄꤹ¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¥×¥í¥»¥¹¤Î¾µÇ§Éôʬ¤òÄ󶡤·¤Þ¤¹¡£
- ¼¡¤Î¥»¥¯¥·¥ç¥ó¤Ç¤Ï¡¢<code class="directive"><a href="../mod/core.html#require">Require</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍÍ¡¹¤ÊÍÑË¡¤Ë¤Ä¤¤¤Æ½Ò¤Ù¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">
-Ê£¿ô¤Î¿Í¤¬Æþ¤ì¤ë¤è¤¦¤Ë¤¹¤ë</a></h2>
- <p>¾åµ­¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¤¿¤À°ì¿Í (¶ñÂÎŪ¤Ë¤Ï¥æ¡¼¥¶Ì¾
- <code>rbowen</code> ¤Î狼) ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- Æþ¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£Â¿¤¯¤Î¾ì¹ç¤Ï¡¢Ê£¿ô¤Î¿Í¤¬
- Æþ¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¤Ç¤·¤ç¤¦¡£¤³¤³¤Ç
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- ¤ÎÅоì¤Ç¤¹¡£</p>
-
- <p>¤â¤·Ê£¿ô¤Î¿Í¤¬Æþ¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¥°¥ë¡¼¥×¤Ë°¤¹¤ë¥æ¡¼¥¶¤Î°ìÍ÷¤ÎÆþ¤Ã¤Æ¤¤¤ë¡¢¥°¥ë¡¼¥×̾¤Î¤Ä¤¤¤¿
- ¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤òºî¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¥Õ¥¡¥¤¥ë¤Î
- ½ñ¼°¤Ï¤­¤ï¤á¤Æñ½ã¤Ç¡¢¤ª¹¥¤ß¤Î¥¨¥Ç¥£¥¿¤ÇÀ¸À®¤Ç¤­¤Þ¤¹¡£
- ¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤Ï¼¡¤Î¤è¤¦¤Ê¤â¤Î¤Ç¤¹¡£</p>
-
- <div class="example"><p><code>
- GroupName: rbowen dpitts sungo rshersey
- </code></p></div>
-
- <p>°ì¹Ô¤Ë¥¹¥Ú¡¼¥¹¶èÀÚ¤ê¤Ç¡¢¥°¥ë¡¼¥×¤Ë½ê°¤¹¤ë¥á¥ó¥Ð¡¼¤Î
- °ìÍ÷¤ò¤Ê¤é¤Ù¤ë¤À¤±¤Ç¤¹¡£</p>
-
- <p>´û¤Ë¸ºß¤¹¤ë¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ë¥æ¡¼¥¶¤ò²Ã¤¨¤ë¾ì¹ç¤Ï¡¢
- ¼¡¤Î¤è¤¦¤Ë¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </code></p></div>
-
- <p>°ÊÁ°¤ÈƱ¤¸±þÅú¤¬ÊÖ¤µ¤ì¤Þ¤¹¤¬¡¢¿·¤·¤¤¥Õ¥¡¥¤¥ë¤ò
- ºî¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢´û¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤ËÄɲ䵤ì¤Æ¤¤¤Þ¤¹¡£
- (¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤òºî¤ë¤Ë¤Ï <code>-c</code>
- ¤ò»È¤¤¤Þ¤¹¡£)</p>
-
- <p>¤³¤³¤Ç¼¡¤Î¤è¤¦¤Ë¤·¤Æ <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò
- ½¤Àµ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName
- </code></p></div>
-
- <p>¤³¤ì¤Ç¡¢¥°¥ë¡¼¥× <code>GroupName</code> ¤Ë¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤Æ¡¢
- <code>password</code> ¥Õ¥¡¥¤¥ë¤Ë¥¨¥ó¥È¥ê¤¬¤¢¤ë¿Í¤Ï¡¢
- Àµ¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤ò¥¿¥¤¥×¤¹¤ì¤ÐÆþ¤ë¤³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¤â¤Ã¤ÈÆÃÄꤻ¤º¤ËÊ£¿ô¤Î¥æ¡¼¥¶¤¬Æþ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¡¢
- ¤â¤¦°ì¤Ä¤ÎÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤òºî¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢
- ¼¡¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¨¤Ð¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Require valid-user
- </code></p></div>
-
- <p><code>require user rbowen</code> ¹Ô¤Ç¤Ê¤¯¡¢¾åµ­¤ò»È¤¦¤È¡¢
- ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤Ë¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë¿Í¤Ç¤¢¤ì¤Ðï¤Ç¤â
- µö²Ä¤µ¤ì¤Þ¤¹¡£
- ñ¤Ë¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥°¥ë¡¼¥×Ëè¤Ëʬ¤±¤Æ¤ª¤¯¤³¤È¤Ç¡¢
- ¥°¥ë¡¼¥×¤Î¤è¤¦¤Ê¿¶¤ëÉñ¤¤¤ò¤µ¤»¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¥¢¥×¥í¡¼¥Á¤ÎÍøÅÀ¤Ï¡¢Apache ¤ÏÆó¤Ä¤Ç¤Ï¤Ê¤¯¡¢
- ¤¿¤À°ì¤Ä¤Î¥Õ¥¡¥¤¥ë¤À¤±¤ò¸¡ºº¤¹¤ì¤Ð¤è¤¤¤È¤¤¤¦ÅÀ¤Ç¤¹¡£
- ·çÅÀ¤Ï¡¢¤¿¤¯¤µ¤ó¤Î¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò´ÉÍý¤·¤Æ¡¢¤½¤ÎÃ椫¤é
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ËÀµ¤·¤¤¥Õ¥¡¥¤¥ë¤ò»²¾È¤µ¤»¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤ÅÀ¤Ç¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="possibleproblems" id="possibleproblems">µ¯¤³¤ê¤¨¤ëÌäÂê</a></h2>
- <p>Basic ǧ¾Ú¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥µ¡¼¥Ð¤Ë¥É¥­¥å¥á¥ó¥È¤ò¥ê¥¯¥¨¥¹¥È¤¹¤ëÅÙ¤Ë
- ¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ò¸¡ºº¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤ì¤ÏƱ¤¸¥Ú¡¼¥¸¡¢¥Ú¡¼¥¸¤Ë¤¢¤ëÁ´¤Æ¤Î²èÁü¤ò
- ¥ê¥í¡¼¥É¤¹¤ë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â³ºÅö¤·¤Þ¤¹
- (¤â¤·²èÁü¤âÊݸ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤«¤éÍè¤ë¤Î¤Ç¤¢¤ì¤Ð) ¡£
- ͽÁÛ¤µ¤ì¤ëÄ̤ꡢ¤³¤ì¤ÏÆ°ºî¤ò¿¾¯ÃÙ¤¯¤·¤Þ¤¹¡£
- ÃÙ¤¯¤Ê¤ëÄøÅ٤ϥѥ¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ¤ÈÈæÎ㤷¤Þ¤¹¤¬¡¢
- ¤³¤ì¤Ï¡¢¥Õ¥¡¥¤¥ë¤ò³«¤¤¤Æ¤¢¤Ê¤¿¤Î̾Á°¤òȯ¸«¤¹¤ë¤Þ¤Ç
- ¥æ¡¼¥¶Ì¾¤Î¥ê¥¹¥È¤òÆɤޤʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¤«¤é¤Ç¤¹¡£
- ¤½¤·¤Æ¡¢¥Ú¡¼¥¸¤¬¥í¡¼¥É¤µ¤ì¤ëÅ٤ˤ³¤ì¤ò¹Ô¤ï¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>·ëÏÀ¤È¤·¤Æ¤Ï¡¢°ì¤Ä¤Î¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ËÃÖ¤¯¤³¤È¤Î¤Ç¤­¤ë
- ¥æ¡¼¥¶¿ô¤Ë¤Ï¼Â¼ÁŪ¤Ê¸Â³¦¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¸Â³¦¤Ï¥µ¡¼¥Ð¥Þ¥·¥ó¤ÎÀ­Ç½¤Ë°Í¸¤·¤ÆÊѤï¤ê¤Þ¤¹¤¬¡¢
- ¿ôÉ´¤Î¥¨¥ó¥È¥ê¤ò±Û¤¨¤¿¤¢¤¿¤ê¤«¤é®ÅÙÄã²¼¤¬¸«¤é¤ì¤ë¤Èͽ´ü¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤½¤Î»þ¤Ï¾¤Îǧ¾ÚÊýË¡¤ò¹Íθ¤ËÆþ¤ì¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="whatotherneatstuffcanido" id="whatotherneatstuffcanido">¤â¤Ã¤È¹ª¤ß¤ËÀ©¸æ¤Ç¤­¤Ê¤¤
-?</a></h2>
- <p>¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤Ë¤è¤ëǧ¾Ú¤Ïǧ¾Ú¤Î°ì¤Ä¤ÎÊýË¡¤Ë²á¤®¤Þ¤»¤ó¡£
- ¤·¤Ð¤·¤Ðï¤Ç¤¢¤ë¤«¤È¤¤¤¦¤³¤È¤È¤Ï°ã¤¦²¿¤«¤Ë´ð¤Å¤¤¤Æ¡¢
- Æþ¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¯¤Ê¤ë¤³¤È¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£
- Î㤨¤Ð¤½¤Î¿Í¤¬¤É¤³¤«¤éÍè¤Æ¤¤¤ë¤«¤È¤¤¤Ã¤¿¤³¤È¤Ç¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> ¤È
- <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¡¢¥É¥­¥å¥á¥ó¥È¤òÍ׵ᤷ¤Æ¤­¤¿¥Þ¥·¥ó¤Î
- ¥Û¥¹¥È̾¤ä¥Û¥¹¥È¥¢¥É¥ì¥¹¤Ë´ð¤Å¤¤¤Æµö²ÄÉÔµö²Ä¤òÀ©¸æ¤Ç¤­¤Þ¤¹¡£
- <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤³¤ÎÆó¤Ä¤ÈÏ¢·È¤·¤ÆÆ°ºî¤·¡¢Apache
- ¤Ë¤É¤Î½çÈ֤ǥե£¥ë¥¿¤òŬÍѤ¹¤ë¤«¤òÃΤ餻¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»È¤¤Êý¤Ï¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Allow from <var>address</var>
- </code></p></div>
-
- <p>¤³¤³¤Ç¡¢<var>address</var> ¤Ï IP ¥¢¥É¥ì¥¹
- (¤Þ¤¿¤Ï IP ¥¢¥É¥ì¥¹¤Î°ìÉô)¡¢¤¢¤ë¤¤¤Ï´°Á´½¤¾þ¥É¥á¥¤¥ó̾
- (¤Þ¤¿¤Ï¥É¥á¥¤¥ó̾¤Î°ìÉô) ¤Ç¤¹¡£
- ɬÍפǤ¢¤ì¤ÐÊ£¿ô¤Î¥¢¥É¥ì¥¹¤ä¥É¥á¥¤¥ó̾¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢¤â¤·Ã¯¤«¤¬·Ç¼¨ÈĤò¹¶·â¤·¤Æ¤¤¤Æ¡¢
- ¤½¤Î¿Í¤òÊĤá½Ð¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¼¡¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Deny from 205.252.46.165
- </code></p></div>
-
- <p>¤³¤Î¥¢¥É¥ì¥¹¤«¤éÍè¤ë¿Í¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÈÏ°ÏÆâ¤Î
- ¥³¥ó¥Æ¥ó¥Ä¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤Þ¤»¤ó¡£¤â¤· IP
- ¥¢¥É¥ì¥¹¤ÎÂå¤ï¤ê¤Ë¥Þ¥·¥ó̾¤¬¤¢¤ì¤Ð¡¢¤½¤ì¤ò»È¤¨¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Deny from <var>host.example.com</var>
- </code></p></div>
-
- <p>¥É¥á¥¤¥óÁ´ÂΤ«¤é¤Î¥¢¥¯¥»¥¹¤òËɤ®¤¿¤±¤ì¤Ð¡¢
- ñ¤Ë¥¢¥É¥ì¥¹¤ä¥É¥á¥¤¥ó̾¤Î°ìÉô¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Deny from <var>192.101.205</var><br />
- Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
- Deny from ke
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> ¤ò»È¤¦¤³¤È¤Ç¡¢
- <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> ¤È
- <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> ¤ÎÁȤ߹ç¤ï¤»¤Ç
- Æþ¤Ã¤Æ¤âÎɤ¤¥°¥ë¡¼¥×¤¬ËÜÅö¤Ë³Î¼Â¤Ë¸ÂÄê¤Ç¤­¤Æ¤¤¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Order deny,allow<br />
- Deny from all<br />
- Allow from <var>dev.example.com</var>
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òñ½ã¤ËÎóµó¤¹¤ë¤Î¤Ç¤Ï˾¤ß¤ÎÆ°ºî¤ò¤·¤Ê¤¤¤Ç¤·¤ç¤¦¡£
- ¤Ê¤¼¤Ê¤é¡¢Á´¤Æ¤Î¿Í¤¬Æþ¤ì¤ë¤È¤¤¤¦¤³¤È¤Ë²Ã¤¨¤Æ¡¢
- »ØÄꤷ¤¿¥Û¥¹¥È¤«¤é¤Î¿Í¤¬Æþ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤«¤é¤Ç¤¹¡£
- ¤ä¤ê¤¿¤¤¤³¤È¤Ï¡¢»ØÄꤷ¤¿¿Í¤¿¤Á<em>¤À¤±</em>¤¬Æþ¤ì¤ë¤è¤¦¤Ë
- ¤¹¤ë¤³¤È¤Ç¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinformation" id="moreinformation">ÄɲþðÊó</a></h2>
- <p>¤³¤ì¤éÁ´¤Æ¤¬¤É¤Î¤è¤¦¤ËÆ°ºî¤¹¤ë¤«¤Ë¤Ä¤¤¤Æ
- ¤â¤Ã¤È¿¤¯¤Î¾ðÊ󤬽ñ¤«¤ì¤Æ¤¤¤ë <code class="module"><a href="../mod/mod_auth.html">mod_auth</a></code> ¤È
- <code class="module"><a href="../mod/mod_access.html">mod_access</a></code>
- ¤Îʸ½ñ¤âÆɤà¤È¤è¤¤¤Ç¤·¤ç¤¦¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/auth.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/auth.html.ko.euc-kr b/docs/manual/howto/auth.html.ko.euc-kr
deleted file mode 100644
index 46553fd2aa..0000000000
--- a/docs/manual/howto/auth.html.ko.euc-kr
+++ /dev/null
@@ -1,321 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÀÎÁõ(Authentication), ±ÇÇѺο©(Authorization),
-Á¢±ÙÁ¦¾î(Access Control) - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>ÀÎÁõ(Authentication), ±ÇÇѺο©(Authorization),
-Á¢±ÙÁ¦¾î(Access Control)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/auth.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÎÁõ(authentication)Àº ÀÚ½ÅÀÌ ´©±¸¶ó°í ÁÖÀåÇÏ´Â »ç¶÷À»
- È®ÀÎÇÏ´Â ÀýÂ÷ÀÌ´Ù. ±ÇÇѺο©(authorization)´Â °¡°í ½ÍÀº °÷À¸·Î
- °¡µµ·Ï ȤÀº ¿øÇÏ´Â Á¤º¸¸¦ ¾òµµ·Ï Çã¿ëÇÏ´Â °úÁ¤ÀÌ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">°ü·Ã ¸ðµâ°ú Áö½Ã¾î</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#introduction">¼Ò°³</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">±âº» Áö½Ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">±âº»ÀûÀÎ ¼³Á¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">¿©·¯¸íÀ» µé¿©º¸³»±â</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦Á¡</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#whatotherneatstuffcanido">´Ù¸¥ ¹æ¹ýµµ °¡´ÉÇÑ°¡?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">´õ ¸¹Àº Á¤º¸</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">°ü·Ã ¸ðµâ°ú Áö½Ã¾î</a></h2>
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">¼Ò°³</a></h2>
- <p>´ç½ÅÀÇ À¥»çÀÌÆ®¿¡ ÀÖ´Â Á¤º¸°¡ ¼Ò¼öÀÇ »ç¶÷µé¸¸ÀÇ ºñ¹ÐÀ̰ųª
- À̵鸸À» À§ÇÑ Á¤º¸¶ó¸é, ÀÌ ±Û¿¡¼­ ¼³¸íÇÏ´Â ±â¹ýÀ» »ç¿ëÇÏ¿©
- ´ç½ÅÀÌ º¸±æ ¿øÇÏ´Â »ç¶÷¸¸ ÆäÀÌÁö¸¦ º¸µµ·Ï ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ ±ÛÀº À¥»çÀÌÆ®ÀÇ ÀϺθ¦ º¸È£ÇϱâÀ§ÇØ ¸¹Àº »ç¶÷µéÀÌ
- »ç¿ëÇÏ´Â "Ç¥ÁØÀûÀÎ" ¹æ¹ýÀ» ´Ù·é´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theprerequisites" id="theprerequisites">±âº» Áö½Ä</a></h2>
- <p>ÀÌ ±Û¿¡¼­ ´Ù·ç´Â Áö½Ã¾î´Â ¼­¹öÀÇ ÁÖ¼³Á¤ÆÄÀÏ(ÀϹÝÀûÀ¸·Î
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¼½¼Ç)À̳ª µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ(<code>.htaccess</code> ÆÄÀÏ)¿¡¼­
- »ç¿ëÇÑ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ·Á¸é ÀÌ ÆÄÀÏ¿¡ ÀÖ´Â
- ÀÎÁõ Áö½Ã¾î¸¦ Çã¿ëÇϵµ·Ï ¼­¹ö¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. À̸¦ À§ÇØ
- µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¸¦ °áÁ¤ÇÏ´Â
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>¿©±â¼­´Â ÀÎÁõÀ» ´Ù·ç±â ¶§¹®¿¡, ´ÙÀ½°ú °°Àº
- <code>AllowOverride</code> Áö½Ã¾î°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig
- </code></p></div>
-
- <p>ȤÀº Áö½Ã¾î¸¦ Á÷Á¢ ¼­¹ö ÁÖ¼³Á¤ÆÄÀÏ¿¡ Àû´Â´Ù¸é, ±× ÆÄÀÏ¿¡
- ¾²±â ±ÇÇÑÀÌ ¹°·Ð ÀÖ¾î¾ß ÇÑ´Ù.</p>
-
- <p>±×¸®°í º¸È£ÇÒ ÆÄÀÏÀÌ ¾îµðÀÖ´ÂÁö ¾Ë±âÀ§ÇØ ¼­¹öÀÇ µð·ºÅ丮
- ±¸Á¶¿¡ ´ëÇØ Á¶±Ý ¾Ë¾Æ¾ßÇÑ´Ù. ÀÌ ÀÏÀº ¾î·ÆÁö¾Ê°í, Àû´çÇÑ
- ¶§¿¡ ÀÚ¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="gettingitworking" id="gettingitworking">±âº»ÀûÀÎ ¼³Á¤Çϱâ</a></h2>
- <p>ÀÌÁ¦ ¼­¹öÀÇ µð·ºÅ丮¸¦ ¾ÏÈ£·Î º¸È£ÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-
- <p>¸ÕÀú ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ ÆÄÀÏÀº À¥¿¡¼­ Á¢±ÙÇÒ
- ¼ö ¾ø´Â °÷¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ´Ù¸¥»ç¶÷ÀÌ ¾ÏÈ£ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏÁö
- ¸øÇÏ°ÔÇϱâ À§Çؼ­´Ù. ¿¹¸¦ µé¾î, ¹®¼­µéÀÌ
- <code>/usr/local/apache/htdocs</code>¿¡ ÀÖ´Ù¸é ¾ÏÈ£ÆÄÀÏ(µé)Àº
- <code>/usr/local/apache/passwd</code>¿¡ µÐ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡ Æ÷ÇÔµÈ <a href="../programs/htpasswd.html">htpasswd</a> µµ±¸¸¦ »ç¿ëÇÏ¿©
- ¾ÏÈ£ÆÄÀÏÀ» ¸¸µç´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ °÷ÀÇ
- <code>bin</code> µð·ºÅ丮¿¡ ÀÖ´Ù. ÆÄÀÏÀ» ¸¸µé·Á¸é ´ÙÀ½°ú
- °°ÀÌ ÀÔ·ÂÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </code></p></div>
-
- <p><code>htpasswd</code>´Â ¾ÏÈ£¸¦ ¹°¾îº¸°í, È®ÀÎÀ» À§ÇØ
- ¾ÏÈ£¸¦ ´Ù½Ã ÀÔ·ÂÇ϶ó°í ¿äûÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mypassword<br />
- Re-type new password: mypassword<br />
- Adding password for user rbowen
- </code></p></div>
-
- <p>¹°·Ð <code>htpasswd</code>ÀÌ ½ÇÇàÆÄÀÏ °æ·Î¿¡ ¾ø´Ù¸é
- ½ÇÇàÆÄÀÏÀÇ Àüü °æ·Î¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. ³»°¡ »ç¿ëÇÏ´Â ¼­¹ö¿¡¼­´Â
- <code>/usr/local/apache/bin/htpasswd</code>¿¡ ½ÇÇàÆÄÀÏÀÌ
- ÀÖ´Ù.</p>
-
- <p>´ÙÀ½À¸·Î ¼­¹ö°¡ ¾ÏÈ£¸¦ ¿äûÇϵµ·Ï ¼³Á¤ÇÏ°í, ¼­¹ö¿¡°Ô
- ¾î¶² »ç¿ëÀÚÀÇ Á¢±ÙÀ» Çã¿ëÇÒÁö ¾Ë·ÁÁà¾ß ÇÑ´Ù.
- <code>httpd.conf</code>¸¦ ÆíÁýÇϰųª <code>.htaccess</code>
- ÆÄÀÏÀ» »ç¿ëÇÏ¿© ¼³Á¤ÇÑ´Ù. ¿¹¸¦ µé¾î,
- <code>/usr/local/apache/htdocs/secret</code> µð·ºÅ丮¸¦
- º¸È£ÇÏ·Á¸é, ¾Æ·¡ Áö½Ã¾î¸¦
- <code>/usr/local/apache/htdocs/secret/.htaccess</code> ÆÄÀÏÀ̳ª
- <code>httpd.conf</code>ÀÇ &lt;Directory
- /usr/local/apache/apache/htdocs/secret&gt; ¼½¼Ç¿¡ Àû¾î¾ß
- ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Restricted Files"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </code></p></div>
-
- <p>Áö½Ã¾î¸¦ Çϳª¾¿ »ìÆ캸ÀÚ. <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code> Áö½Ã¾î´Â »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ
- ¹æ¹ýÀ» ¼±ÅÃÇÑ´Ù. °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀº <code>Basic</code>À¸·Î,
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>ÀÌ ±¸ÇöÇÑ´Ù. ±×·¯³ª Basic
- ÀÎÁõÀº ºê¶ó¿ìÀú°¡ ¼­¹ö·Î ¾ÏÈ£¸¦ ¾ÏȣȭÇÏÁö ¾Ê°í º¸³½´Ù.
- ±×·¯¹Ç·Î ±â¹Ð ÀڷḦ º¸È£ÇϱâÀ§ÇØ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.
- ¾ÆÆÄÄ¡´Â <code>AuthType Digest</code>¶ó´Â ÀÎÁõ ¹æ¹ýµµ Áö¿øÇÑ´Ù.
- ÀÌ ¹æ¹ýÀº <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>°¡ ±¸ÇöÇϸç, ¸Å¿ì
- ¾ÈÀüÇÏ´Ù. °¡Àå Ãֱ٠Ŭ¶óÀ̾ðÆ®µé¸¸ÀÌ Digest ÀÎÁõÀ» Áö¿øÇÑ´Ù°í
- ÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code> Áö½Ã¾î´Â
- ÀÎÁõ¿¡ »ç¿ëÇÒ <dfn>¿µ¿ª(realm)</dfn>À» ÁöÁ¤ÇÑ´Ù. ¿µ¿ªÀº
- µÎ°¡Áö ¿ªÇÒÀ» ÇÑ´Ù. ù¹ø°´Â Ŭ¶óÀ̾ðÆ®°¡ º¸Åë ÀÌ Á¤º¸¸¦
- ¾ÏÈ£ ´ëȭâ¿¡ º¸¿©ÁØ´Ù. µÎ¹ø°´Â ¿µ¿ª Á¤º¸¸¦ »ç¿ëÇÏ¿©
- Ŭ¶óÀ̾ðÆ®°¡ ƯÁ¤ ÀÎÁõ±¸¿ª¿¡ ¾î¶² ¾ÏÈ£¸¦ º¸³¾Áö °áÁ¤ÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ÀÏ´Ü Å¬¶óÀ̾ðÆ®°¡ <code>"Restricted Files"</code>
- ¿µ¿ª¿¡ ÀÎÁõÀÌ ¼º°øÇÏ¿´´Ù¸é, Ŭ¶óÀ̾ðÆ®´Â ÀÚµ¿À¸·Î °°Àº ¼­¹ö¿¡¼­
- <code>"Restricted Files"</code> ¿µ¿ªÀ¸·Î Ç¥½ÃµÈ ±¸¿ª¿¡ ´ëÇØ
- µ¿ÀÏÇÑ ¾ÏÈ£¸¦ ½ÃµµÇÑ´Ù. ±×·¡¼­ ¿©·¯ Á¦ÇÑ ±¸¿ªÀÌ °°Àº ¿µ¿ªÀ»
- °øÀ¯ÇÏ¸é »ç¿ëÀÚ°¡ ¿©·¯¹ø ¾ÏÈ£¸¦ ÀÔ·ÂÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ¹°·Ð
- º¸¾È»ó ÀÌÀ¯·Î Ŭ¶óÀ̾ðÆ®´Â ¼­¹öÀÇ È£½ºÆ®¸íÀÌ ´Ù¸£¸é Ç×»ó
- »õ·Î ¾ÏÈ£¸¦ ¹°¾îº»´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- Áö½Ã¾î´Â ¿ì¸®°¡ ¹æ±Ý <code>htpasswd</code>·Î ¸¸µç ¾ÏÈ£ÆÄÀÏÀÇ
- °æ·Î¸¦ ¼³Á¤ÇÑ´Ù. »ç¿ëÀÚ°¡ ¸¹´Ù¸é ¿äû¸¶´Ù ¸Å¹ø »ç¿ëÀÚ¸¦
- ÀÎÁõÇϱâÀ§ÇØ ÀÏ¹Ý ¹®¼­ÆÄÀÏÀ» °Ë»öÇϴµ¥ ½Ã°£ÀÌ »ó´çÈ÷ ¸¹ÀÌ
- °É¸± ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ºü¸¥ µ¥ÀÌŸº£À̽º ÆÄÀÏ¿¡ »ç¿ëÀÚ Á¤º¸¸¦
- ÀúÀåÇÒ ¼ö ÀÖ´Ù. <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ¸ðµâÀº <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> Áö½Ã¾î¸¦
- Á¦°øÇÑ´Ù. <a href="../programs/dbmmanage.html">dbmmanage</a>
- ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé°í ´Ù·é´Ù. <a href="http://modules.apache.org/">¾ÆÆÄÄ¡ ¸ðµâ
- µ¥ÀÌŸº£À̽º</a>¿¡´Â ¿©·¯ ´Ù¸¥ ÀÎÁõ ¹æ½ÄÀ» Á¦°øÇÏ´Â Á¦»ïÀÚ°¡
- ¸¸µç ¸ðµâµéÀÌ ÀÖ´Ù.</p>
-
- <p>¸¶Áö¸·À¸·Î <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- Áö½Ã¾î´Â ¼­¹öÀÇ Æ¯Á¤ ¿µ¿ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ ÁöÁ¤ÇÏ¿©
- ±ÇÇѺο©¸¦ ÇÑ´Ù. ´ÙÀ½ ÀýÀº <code>require</code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ´Â ´Ù¾çÇÑ ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">¿©·¯¸íÀ» µé¿©º¸³»±â</a></h2>
- <p>À§ÀÇ Áö½Ã¾î´Â µð·ºÅ丮·Î (»ç¿ëÀÚ¸íÀÌ <code>rbowen</code>ÀÎ)
- ÇÑ »ç¶÷¸¸À» µé¿©º¸³½´Ù. ´ëºÎºÐÀÇ °æ¿ì ¿©·¯ »ç¶÷À» µé¿©º¸³»°í
- ½ÍÀ» °ÍÀÌ´Ù. ÀÌÁ¦ <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>À»
- »ç¿ëÇÒ ¶§´Ù.</p>
-
- <p>¿©·¯ »ç¶÷À» µé¿©º¸³»°í ½Í´Ù¸é ±×·ì¸í°ú ±× ±×·ì¿¡ ¾î¶²
- »ç¿ëÀÚµéÀÌ ÀÖ´ÂÁö ¾Ë·ÁÁÖ´Â ±×·ìÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ÆÄÀÏÀÇ
- Çü½ÄÀº ¸Å¿ì °£´ÜÇÏ¿©, ¾Æ¹« ÆíÁý±â·Î³ª ¸¸µé ¼ö ÀÖ´Ù. ÆÄÀϳ»¿ëÀº
- ´ÙÀ½°ú °°´Ù.</p>
-
- <div class="example"><p><code>
- GroupName: rbowen dpitts sungo rshersey
- </code></p></div>
-
- <p>±×³É °ø¹éÀ¸·Î ±¸ºÐÇÑ ±ä ±×·ì ±¸¼º¿ø ¸ñ·ÏÀÏ »ÓÀÌ´Ù.</p>
-
- <p>±âÁ¸ÀÇ ¾ÏÈ£ÆÄÀÏ¿¡ »ç¿ëÀÚ¸¦ Ãß°¡ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù</p>
-
- <div class="example"><p><code>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </code></p></div>
-
- <p>Àü°ú °°Áö¸¸, »õ·Î ÆÄÀÏÀ» ¸¸µéÁö ¾Ê°í ±âÁ¸ ÆÄÀÏ¿¡ »ç¿ëÀÚ¸¦
- Ãß°¡ÇÑ´Ù. (<code>-c</code> ¿É¼ÇÀº »õ·Î ¾ÏÈ£ÆÄÀÏÀ» ¸¸µç´Ù).</p>
-
- <p>ÀÌÁ¦ <code>.htaccess</code> ÆÄÀÏÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName
- </code></p></div>
-
- <p>±×·¯¸é <code>GroupName</code> ±×·ì¿¡ ¼ÓÇϸç
- <code>password</code> ÆÄÀÏ¿¡ Ç׸ñÀÌ ÀÖ´Â »ç¿ëÀÚ°¡ ¿Ã¹Ù¸¥
- ¾ÏÈ£¸¦ ÀÔ·ÂÇϸé Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</p>
-
- <p>¿©·¯ ÀÏ¹Ý »ç¿ëÀÚ¸¦ µé¿©º¸³»´Â ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ´Ù. ±×·ìÆÄÀÏÀ»
- ¸¸µé ÇÊ¿ä¾øÀÌ ´ÙÀ½ Áö½Ã¾î¸¦ »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù.</p>
-
- <div class="example"><p><code>
- Require valid-user
- </code></p></div>
-
- <p><code>Require user rbowen</code> ´ë½Å ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇϸé
- ¾ÏÈ£ÆÄÀÏ¿¡ ÀÖ´Â ´©±¸¶óµµ ¿Ã¹Ù¸¥ ¾ÏÈ£¸¦ ÀÔ·ÂÇϱ⸸ Çϸé Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ±×·ìº°·Î ´Ù¸¥ ¾ÏÈ£ÆÄÀÏÀ» »ç¿ëÇÏ¿© ±×·ì°ú ºñ½ÁÇÑ
- È¿°ú¸¦ ¾òÀ» ¼öµµ ÀÖ´Ù. ÀÌ °æ¿ì ¾ÆÆÄÄ¡°¡ ÆÄÀÏ µÎ°³(¾ÏÈ£ÆÄÀÏ°ú
- ±×·ìÆÄÀÏ)°¡ ¾Æ´Ñ ÆÄÀÏ ÇÑ°³(¾ÏÈ£ÆÄÀÏ)¸¸ °Ë»çÇÏ¸é µÈ´Ù´Â °ÍÀÌ
- ÀåÁ¡ÀÌ´Ù. ±×·¯³ª ¿©·¯ ¾ÏÈ£ÆÄÀÏÀ» °ü¸®ÇØ¾ß ÇÏ°í, <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> Áö½Ã¾î¿¡
- Á¤È®ÇÑ ¾ÏÈ£ÆÄÀÏÀ» ÁöÁ¤ÇØ¾ß ÇÏ´Â °ÍÀº ´ÜÁ¡ÀÌ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="possibleproblems" id="possibleproblems">¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦Á¡</a></h2>
- <p>Basic ÀÎÁõ ¹æ½ÄÀº ¼­¹ö¿¡¼­ ¹®¼­¸¦ ¿äûÇÒ ¶§¸¶´Ù »ç¿ëÀÚ¸í°ú
- ¾ÏÈ£¸¦ È®ÀÎÇÑ´Ù. ½ÉÁö¾î °°Àº ÆäÀÌÁö¸¦ »õ·Î °íħÇÒ ¶§µµ ÆäÀÌÁö¿Í
- (±×¸²ÀÌ ¾ÏÈ£·Î º¸È£ÇÏ´Â µð·ºÅ丮¿¡ ÀÖ´Â °æ¿ì) ÆäÀÌÁö¿¡ ÀÖ´Â
- ¸ðµç ±×¸²¿¡ ´ëÇØ ´Ù½Ã È®ÀÎÇÑ´Ù. ÁüÀÛÇϵíÀÌ ¼Óµµ°¡ Á¶±Ý ´À·ÁÁø´Ù.
- ¾ÏÈ£ÆÄÀÏÀ» ¿­¾î¼­ »ç¿ëÀÚ¸íÀ» ãÀ» ¶§±îÁö »ç¿ëÀÚ ¸ñ·ÏÀ» »ìÆìºÁ¾ß
- Çϱ⶧¹®¿¡ ¾ÏÈ£ÆÄÀÏ Å©±â°¡ Ä¿Áú ¼ö·Ï ´õ ´À·ÁÁø´Ù. ±×¸®°í
- ÀÌ ÀÛ¾÷À» ÆäÀÌÁö¸¦ ¿äûÇÒ ¶§¸¶´Ù ÁøÇàÇÑ´Ù.</p>
-
- <p>±×·¡¼­ Çö½ÇÀûÀ¸·Î ÇÑ ¾ÏÈ£ÆÄÀÏ¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¼ö¿¡´Â
- ÇÑ°è°¡ ÀÖ´Ù. ÀÌ ÇÑ°è´Â »ç¿ëÇÏ´Â ¼­¹öÀÇ ¼º´É¿¡ µû¶ó ´Ù¸£Áö¸¸,
- Ç׸ñÀÌ ¼ö¹é°³°¡ ³Ñ´Â´Ù¸é ´À·ÁÁø´Ù°í »ý°¢ÇÏ°í ´Ù¸¥ ÀÎÁõ ¹æ¹ýÀ»
- °í·ÁÇØ¾ß ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="whatotherneatstuffcanido" id="whatotherneatstuffcanido">´Ù¸¥ ¹æ¹ýµµ °¡´ÉÇÑ°¡?</a></h2>
- <p>»ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ »ç¿ëÇÑ ÀÎÁõÀÌ ´Ù°¡ ¾Æ´Ï´Ù. Á¾Á¾ Á¢¼ÓÇÑ
- Àå¼Ò¿Í °°Àº ´Ù¸¥ Á¤º¸¸¦ °¡Áö°í »ç¿ëÀÚ¸¦ µé¿©º¸³»°í ½ÍÀ»
- ¶§°¡ ÀÖ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>¿Í
- <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> Áö½Ã¾î´Â
- ¹®¼­¸¦ ¿äûÇÑ ÄÄÇ»ÅÍÀÇ È£½ºÆ®¸í ȤÀº È£½ºÆ® ÁÖ¼Ò¸¦ °¡Áö°í
- Á¢±ÙÀ» Çã¿ëÇϰųª °ÅºÎÇÑ´Ù. <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> Áö½Ã¾î´Â ÀÌ µÎ
- Áö½Ã¾î¿Í °°ÀÌ »ç¿ëÇÏ¿©, ¾ÆÆÄÄ¡¿¡°Ô ¾î¶² ¼ø¼­·Î ±ÔÄ¢À» Àû¿ëÇÒÁö
- ¾Ë¸°´Ù.</p>
-
- <p>À̵é Áö½Ã¾î »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.</p>
-
- <div class="example"><p><code>
- Allow from <var>address</var>
- </code></p></div>
-
- <p>¿©±â¼­ <var>address</var>´Â IP ÁÖ¼Ò(ȤÀº IP ÁÖ¼Ò ÀϺÎ)³ª
- ¿ÏÀüÇÑ µµ¸ÞÀθí(ȤÀº µµ¸ÞÀθí ÀϺÎ)ÀÌ´Ù. ¿øÇÑ´Ù¸é ¿©·¯ ÁÖ¼Ò³ª
- µµ¸ÞÀθíÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ´©±º°¡°¡ °Ô½ÃÆÇ¿¡ ±¤°í¸¦ ¿Ã¸®°í ÀÖ´Ù¸é ´ÙÀ½°ú
- °°ÀÌ Á¢±ÙÀ» ¸·À» ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- Deny from 205.252.46.165
- </code></p></div>
-
- <p>±× ÁÖ¼Ò¿¡¼­ µé¾î¿À´Â ¹æ¹®ÀÚ´Â ÀÌ Áö½Ã¾î°¡ º¸È£ÇÏ´Â ÆäÀÌÁö¸¦
- º¼ ¼ö ¾ø´Ù. IP ÁÖ¼Ò ´ë½Å ´ÙÀ½°ú °°ÀÌ ÄÄÇ»Å͸íÀ» »ç¿ëÇÒ ¼öµµ
- ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- Deny from <var>host.example.com</var>
- </code></p></div>
-
- <p>¶Ç, Àüü µµ¸ÞÀÎÀÇ Á¢±ÙÀ» ¸·À¸·Á¸é ÁÖ¼Ò³ª µµ¸ÞÀθíÀÇ ÀϺθ¦
- »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- Deny from <var>192.101.205</var><br />
- Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
- Deny from ke
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code>¸¦
- <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code>¿Í <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> Áö½Ã¾î¿Í °°ÀÌ
- »ç¿ëÇÏ¿© ½ÇÁ¦·Î ¿øÇÏ´Â ´ë»óÀ» ¸·À» ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- Order deny,allow<br />
- Deny from all<br />
- Allow from <var>dev.example.com</var>
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>
- Áö½Ã¾î¸¸ »ç¿ëÇϸé, ÇØ´ç È£½ºÆ®ÀÇ »ç¿ëÀÚ¸¦ Çã¿ëÇÏ°í °Å±â¿¡
- Ãß°¡·Î ¸ðµç »ç¶÷À» Çã¿ëÇϹǷΠ¿øÇÏ´Â °á°ú¸¦ ¾òÁö ¸øÇÑ´Ù.
- ´ç½ÅÀº ƯÁ¤ »ç¶÷<em>¸¸</em> Çã¿ëÇÏ±æ ¿øÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinformation" id="moreinformation">´õ ¸¹Àº Á¤º¸</a></h2>
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>°ú
- <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> ¹®¼­¿¡ Á¢±ÙÁ¦¾î°¡ µ¿ÀÛÇÏ´Â
- ¹æ¹ý¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸°¡ ÀÖ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/auth.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/auth.xml b/docs/manual/howto/auth.xml
deleted file mode 100644
index e949f7f221..0000000000
--- a/docs/manual/howto/auth.xml
+++ /dev/null
@@ -1,364 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="auth.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
-<title>Authentication, Authorization and Access Control</title>
-
-<summary>
- <p>Authentication is any process by which you verify that
- someone is who they claim they are. Authorization is any
- process by which someone is allowed to be where they want to
- go, or to have information that they want to have.</p>
-</summary>
-
-<section id="related"><title>Related Modules and Directives</title>
- <related>
- <modulelist>
- <module>mod_auth_basic</module>
- <module>mod_authn_file</module>
- <module>mod_authz_groupfile</module>
- <module>mod_authz_host</module>
- </modulelist>
-
- <directivelist>
- <directive module="mod_authz_host">Allow</directive>
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- <directive module="core">AuthName</directive>
- <directive module="core">AuthType</directive>
- <directive module="mod_authn_file">AuthUserFile</directive>
- <directive module="mod_authz_host">Deny</directive>
- <directive module="core">Options</directive>
- <directive module="core">Require</directive>
- </directivelist>
- </related>
-</section>
-
-<section id="introduction"><title>Introduction</title>
- <p>If you have information on your web site that is sensitive
- or intended for only a small group of people, the techniques in
- this article will help you make sure that the people that see
- those pages are the people that you wanted to see them.</p>
-
- <p>This article covers the "standard" way of protecting parts
- of your web site that most of you are going to use.</p>
-</section>
-
-<section id="theprerequisites"><title>The Prerequisites</title>
- <p>The directives discussed in this article will need to go
- either in your main server configuration file (typically in a
- <directive module="core" type="section">Directory</directive> section), or
- in per-directory configuration files (<code>.htaccess</code> files).</p>
-
- <p>If you plan to use <code>.htaccess</code> files, you will
- need to have a server configuration that permits putting
- authentication directives in these files. This is done with the
- <directive module="core">AllowOverride</directive> directive, which
- specifies which directives, if any, may be put in per-directory
- configuration files.</p>
-
- <p>Since we're talking here about authentication, you will need
- an <directive module="core">AllowOverride</directive> directive like the
- following:</p>
-
- <example>
- AllowOverride AuthConfig
- </example>
-
- <p>Or, if you are just going to put the directives directly in
- your main server configuration file, you will of course need to
- have write permission to that file.</p>
-
- <p>And you'll need to know a little bit about the directory
- structure of your server, in order to know where some files are
- kept. This should not be terribly difficult, and I'll try to
- make this clear when we come to that point.</p>
-</section>
-
-<section id="gettingitworking"><title>Getting it working</title>
- <p>Here's the basics of password protecting a directory on your
- server.</p>
-
- <p>You'll need to create a password file. This file should be
- placed somewhere not accessible from the web. This is so that
- folks cannot download the password file. For example, if your
- documents are served out of <code>/usr/local/apache/htdocs</code> you
- might want to put the password file(s) in
- <code>/usr/local/apache/passwd</code>.</p>
-
- <p>To create the file, use the <a
- href="../programs/htpasswd.html">htpasswd</a> utility that came
- with Apache. This will be located in the <code>bin</code> directory
- of wherever you installed Apache. To create the file, type:</p>
-
- <example>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </example>
-
- <p><code>htpasswd</code> will ask you for the password, and
- then ask you to type it again to confirm it:</p>
-
- <example>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mypassword<br />
- Re-type new password: mypassword<br />
- Adding password for user rbowen
- </example>
-
- <p>If <code>htpasswd</code> is not in your path, of course
- you'll have to type the full path to the file to get it to run.
- On my server, it's located at
- <code>/usr/local/apache/bin/htpasswd</code></p>
-
- <p>Next, you'll need to configure the server to request a
- password and tell the server which users are allowed access.
- You can do this either by editing the <code>httpd.conf</code>
- file or using an <code>.htaccess</code> file. For example, if
- you wish to protect the directory
- <code>/usr/local/apache/htdocs/secret</code>, you can use the
- following directives, either placed in the file
- <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or
- placed in <code>httpd.conf</code> inside a &lt;Directory
- /usr/local/apache/apache/htdocs/secret&gt; section.</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Restricted Files"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </example>
-
- <p>Let's examine each of those directives individually. The <directive
- module="core">AuthType</directive> directive selects
- that method that is used to authenticate the user. The most
- common method is <code>Basic</code>, and this is the method
- implemented by <module>mod_auth_basic</module>. It is important to be aware,
- however, that Basic authentication sends the password from the client to
- the browser unencrypted. This method should therefore not be used for
- highly sensitive data. Apache supports one other authentication method:
- <code>AuthType Digest</code>. This method is implemented by <module
- >mod_auth_digest</module> and is much more secure. Only the most recent
- versions of clients are known to support Digest authentication.</p>
-
- <p>The <directive module="core">AuthName</directive> directive sets
- the <dfn>Realm</dfn> to be used in the authentication. The realm serves
- two major functions. First, the client often presents this information to
- the user as part of the password dialog box. Second, it is used by the
- client to determine what password to send for a given authenticated
- area.</p>
-
- <p>So, for example, once a client has authenticated in the
- <code>"Restricted Files"</code> area, it will automatically
- retry the same password for any area on the same server that is
- marked with the <code>"Restricted Files"</code> Realm.
- Therefore, you can prevent a user from being prompted more than
- once for a password by letting multiple restricted areas share
- the same realm. Of course, for security reasons, the client
- will always need to ask again for the password whenever the
- hostname of the server changes.</p>
-
- <p>The <directive module="mod_authn_file">AuthUserFile</directive>
- directive sets the path to the password file that we just
- created with <code>htpasswd</code>. If you have a large number
- of users, it can be quite slow to search through a plain text
- file to authenticate the user on each request. Apache also has
- the ability to store user information in fast database files.
- The <module>mod_authn_dbm</module> module provides the <directive
- module="mod_authn_dbm">AuthDBMUserFile</directive> directive. These
- files can be created and manipulated with the <a
- href="../programs/dbmmanage.html">dbmmanage</a> program. Many
- other types of authentication options are available from third
- party modules in the <a
- href="http://modules.apache.org/">Apache Modules
- Database</a>.</p>
-
- <p>Finally, the <directive module="core">Require</directive>
- directive provides the authorization part of the process by
- setting the user that is allowed to access this region of the
- server. In the next section, we discuss various ways to use the
- <directive module="core">Require</directive> directive.</p>
-</section>
-
-<section id="lettingmorethanonepersonin"><title>Letting more than one
-person in</title>
- <p>The directives above only let one person (specifically
- someone with a username of <code>rbowen</code>) into the
- directory. In most cases, you'll want to let more than one
- person in. This is where the <directive module="mod_authz_groupfile"
- >AuthGroupFile</directive> comes in.</p>
-
- <p>If you want to let more than one person in, you'll need to
- create a group file that associates group names with a list of
- users in that group. The format of this file is pretty simple,
- and you can create it with your favorite editor. The contents
- of the file will look like this:</p>
-
- <example>
- GroupName: rbowen dpitts sungo rshersey
- </example>
-
- <p>That's just a list of the members of the group in a long
- line separated by spaces.</p>
-
- <p>To add a user to your already existing password file,
- type:</p>
-
- <example>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </example>
-
- <p>You'll get the same response as before, but it will be
- appended to the existing file, rather than creating a new file.
- (It's the <code>-c</code> that makes it create a new password
- file).</p>
-
- <p>Now, you need to modify your <code>.htaccess</code> file to
- look like the following:</p>
-
- <example>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName
- </example>
-
- <p>Now, anyone that is listed in the group <code>GroupName</code>,
- and has an entry in the <code>password</code> file, will be let in, if
- they type the correct password.</p>
-
- <p>There's another way to let multiple users in that is less
- specific. Rather than creating a group file, you can just use
- the following directive:</p>
-
- <example>
- Require valid-user
- </example>
-
- <p>Using that rather than the <code>Require user rbowen</code>
- line will allow anyone in that is listed in the password file,
- and who correctly enters their password. You can even emulate
- the group behavior here, by just keeping a separate password
- file for each group. The advantage of this approach is that
- Apache only has to check one file, rather than two. The
- disadvantage is that you have to maintain a bunch of password
- files, and remember to reference the right one in the
- <directive module="mod_authn_file">AuthUserFile</directive> directive.</p>
-</section>
-
-<section id="possibleproblems"><title>Possible problems</title>
- <p>Because of the way that Basic authentication is specified,
- your username and password must be verified every time you
- request a document from the server. This is even if you're
- reloading the same page, and for every image on the page (if
- they come from a protected directory). As you can imagine, this
- slows things down a little. The amount that it slows things
- down is proportional to the size of the password file, because
- it has to open up that file, and go down the list of users
- until it gets to your name. And it has to do this every time a
- page is loaded.</p>
-
- <p>A consequence of this is that there's a practical limit to
- how many users you can put in one password file. This limit
- will vary depending on the performance of your particular
- server machine, but you can expect to see slowdowns once you
- get above a few hundred entries, and may wish to consider a
- different authentication method at that time.</p>
-</section>
-
-<section id="whatotherneatstuffcanido"><title>What other neat stuff can I
-do?</title>
- <p>Authentication by username and password is only part of the
- story. Frequently you want to let people in based on something
- other than who they are. Something such as where they are
- coming from.</p>
-
- <p>The <directive module="mod_authz_host">Allow</directive> and
- <directive module="mod_authz_host">Deny</directive> directives let
- you allow and deny access based on the host name, or host
- address, of the machine requesting a document. The
- <directive module="mod_authz_host">Order</directive> directive goes
- hand-in-hand with these two, and tells Apache in which order to
- apply the filters.</p>
-
- <p>The usage of these directives is:</p>
-
- <example>
- Allow from <var>address</var>
- </example>
-
- <p>where <var>address</var> is an IP address (or a partial IP
- address) or a fully qualified domain name (or a partial domain
- name); you may provide multiple addresses or domain names, if
- desired.</p>
-
- <p>For example, if you have someone spamming your message
- board, and you want to keep them out, you could do the
- following:</p>
-
- <example>
- Deny from 205.252.46.165
- </example>
-
- <p>Visitors coming from that address will not be able to see
- the content covered by this directive. If, instead, you have a
- machine name, rather than an IP address, you can use that.</p>
-
- <example>
- Deny from <var>host.example.com</var>
- </example>
-
- <p>And, if you'd like to block access from an entire domain,
- you can specify just part of an address or domain name:</p>
-
- <example>
- Deny from <var>192.101.205</var><br />
- Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
- Deny from ke
- </example>
-
- <p>Using <directive module="mod_authz_host">Order</directive> will let you
- be sure that you are actually restricting things to the group that you want
- to let in, by combining a <directive
- module="mod_authz_host">Deny</directive> and an <directive
- module="mod_authz_host">Allow</directive> directive:</p>
-
- <example>
- Order deny,allow<br />
- Deny from all<br />
- Allow from <var>dev.example.com</var>
- </example>
-
- <p>Listing just the <directive module="mod_authz_host">Allow</directive>
- directive would not do what you want, because it will let folks from that
- host in, in addition to letting everyone in. What you want is to let
- <em>only</em> those folks in.</p>
-</section>
-
-<section id="moreinformation"><title>More information</title>
- <p>You should also read the documentation for
- <module>mod_auth_basic</module> and <module>mod_authz_host</module> which
- contain some more information about how this all works.</p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/howto/auth.xml.ja b/docs/manual/howto/auth.xml.ja
deleted file mode 100755
index 0fc3eaaf3b..0000000000
--- a/docs/manual/howto/auth.xml.ja
+++ /dev/null
@@ -1,389 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="auth.xml.meta">
-<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
-
-<title>$BG'>Z!">5G'!"%"%/%;%9@)8f(B</title>
-
-<summary>
- <p>$B!VG'>Z!W$H$O!"C/$+$,<+J,$OC/$G$"$k$+$r<gD%$7$?>l9g$K!"(B
- $B$=$l$r3NG'$9$k$?$a$NA42aDx$r;X$7$^$9!#!V>5G'!W$H$O!"(B
- $BC/$+$,9T$-$?$$>l=j$K9T$1$k$h$&$K!"$"$k$$$OM_$7$$>pJs$r(B
- $BF@$k$3$H$,$G$-$k$h$&$K$9$k$?$a$NA42aDx$r;X$7$^$9!#(B</p>
-</summary>
-
-<section id="related"><title>$B4XO"$9$k%b%8%e!<%k$H%G%#%l%/%F%#%V(B</title>
- <related>
- <modulelist>
- <module>mod_auth_basic</module>
- <module>mod_authn_file</module>
- <module>mod_authz_groupfile</module>
- <module>mod_authz_host</module>
- </modulelist>
-
- <directivelist>
- <directive module="mod_authz_host">Allow</directive>
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- <directive module="core">AuthName</directive>
- <directive module="core">AuthType</directive>
- <directive module="mod_authn_file">AuthUserFile</directive>
- <directive module="mod_authz_host">Deny</directive>
- <directive module="core">Options</directive>
- <directive module="core">Require</directive>
- </directivelist>
- </related>
-</section>
-
-<section id="introduction"><title>$B$O$8$a$K(B</title>
- <p>$B$b$75!L)$N>pJs$d!"$4$/$4$/>/?t%0%k!<%W$N?M8~$1$N>pJs$r(B
- $B%&%'%V%5%$%H$KCV$/$N$G$"$l$P!"$3$NJ8=q$K=q$+$l$F$$$k(B
- $B%F%/%K%C%/$r;H$&$3$H$G!"$=$N%Z!<%8$r8+$F$$$k?M$?$A$,(B
- $BK>$_$N?M$?$A$G$"$k$3$H$r3N<B$K$G$-$k$G$7$g$&!#(B</p>
-
- <p>$B$3$NJ8=q$G$O!"B?$/$N?M$,:NMQ$9$k$G$"$m$&!"(B
- $B%&%'%V%5%$%H$N0lItJ,$rJ]8n$9$k!V0lHLE*$J!W(B
- $BJ}K!$K$D$$$F%+%P!<$7$F$$$^$9!#(B</p>
-</section>
-
-<section id="theprerequisites"><title>$B=`Hw(B</title>
- <p>$B$3$NJ8=q$G<h$j07$o$l$k%G%#%l%/%F%#%V$O!"(B
- $B%a%$%s%5!<%P@_Dj%U%!%$%k(B ($BIaDL$O(B
- <directive module="core" type="section">Directory</directive>
- $B%;%/%7%g%sCf(B) $B$+!"$"$k$$$O%G%#%l%/%H%jKh$N@_Dj%U%!%$%k(B
- (<code>.htaccess</code> $B%U%!%$%k(B) $B$+$GMQ$$$^$9!#(B</p>
-
- <p><code>.htaccess</code> $B%U%!%$%k$rMQ$$$k$N$G$"$l$P!"(B
- $B$3$l$i$N%U%!%$%k$KG'>ZMQ$N%G%#%l%/%F%#%V$rCV$1$k$h$&$K(B
- $B%5!<%P$N@_Dj$r$7$J$$$H$$$1$J$$$G$7$g$&!#$3$l$O(B
- <directive module="core">AllowOverride</directive>
- $B%G%#%l%/%F%#%V$G2DG=$K$J$j$^$9!#(B
- <directive module="core">AllowOverride</directive>
- $B%G%#%l%/%F%#%V$G$O!"%G%#%l%/%H%jKh$N@_Dj%U%!%$%kCf$KCV$/$3$H$N$G$-$k(B
- $B%G%#%l%/%F%#%V$r!"$b$7$"$l$P!";XDj$7$^$9!#(B</p>
-
- <p>$BG'>Z$K$D$$$FOC$r?J$a$F$$$k$N$G!"<!$N$h$&$J(B
- <directive module="core">AllowOverride</directive>
- $B%G%#%l%/%F%#%V$,I,MW$K$J$k$G$7$g$&!#(B</p>
-
- <example>
- AllowOverride AuthConfig
- </example>
-
- <p>$B$=$&$G$J$/!"%a%$%s%5!<%P@_Dj%U%!%$%k$NCf$K(B
- $BD>@\CV$/$N$G$"$l$P!"EvA3$J$,$i$=$N%U%!%$%k$X$N=q$-9~$_(B
- $B8"8B$r;}$C$F$$$J$1$l$P$J$i$J$$$G$7$g$&!#(B</p>
-
- <p>$B$^$?!"$I$N%U%!%$%k$,$I$3$KJ]B8$5$l$F$$$k$+CN$k$?$a$K!"(B
- $B%5!<%P$N%G%#%l%/%H%j9=B$$K$D$$$F>/$7CN$C$F$*$/(B
- $BI,MW$,$"$k$G$7$g$&!#(B
- $B$3$l$O$=$s$J$KFq$7$/$J$$$N$G!"$3$NJ8=qCf$G(B
- $B%G%#%l%/%H%j9=B$$K$D$$$FCN$C$F$*$/I,MW$,$"$k>lLL$G$O!"(B
- $BL@$i$+$K$J$k$h$&$K$7$^$9!#(B</p>
-</section>
-
-<section id="gettingitworking"><title>$BF0:n$5$;$k(B</title>
- <p>$B$G$O!"%5!<%P>e$N$"$k%G%#%l%/%H%j$r%Q%9%o!<%I$GJ]8n$9$k(B
- $B4pK\<j=g$r<($7$^$9!#(B</p>
-
- <p>$B%Q%9%o!<%I%U%!%$%k$r:n$kI,MW$,$"$j$^$9!#(B
- $B$3$N%U%!%$%k$O!"%&%'%V$+$i%"%/%;%9$G$-$k>l=j$K(B
- $BCV$/$Y$-$G$O$"$j$^$;$s!#B>$N?M$,%Q%9%o!<%I%U%!%$%k$r(B
- $B%@%&%s%m!<%I$G$-$J$$$h$&$K$9$k$?$a$G$9!#Nc$($P!"(B
- <code>/usr/local/apache/htdocs</code> $B$G%I%-%e%a%s%H$r(B
- $BDs6!$7$F$$$k$N$G$"$l$P!"%Q%9%o!<%I%U%!%$%k$O(B
- <code>/usr/local/apache/passwd</code>
- $B$J$I$KCV$$$?J}$,NI$$$G$7$g$&!#(B</p>
-
- <p>$B%U%!%$%k$r:n$k$?$a$K$O!"(BApache $BIUB0$N(B <a
- href="../programs/htpasswd.html">htpasswd</a>
- $B$r;H$$$^$9!#$3$N%3%^%s%I$O(B Apache $B$r$I$3$K%$%s%9%H!<%k$7$h$&$H$b!"(B
- $B%$%s%9%H!<%k%G%#%l%/%H%j$N(B <code>bin</code>
- $B%G%#%l%/%H%j0J2<$KCV$+$l$^$9!#%U%!%$%k$r:n$k$K$O!"<!$N$h$&$K(B
- $B%?%$%W$7$F$/$@$5$$!#(B</p>
-
- <example>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </example>
-
- <p><code>htpasswd</code> $B$O!"%Q%9%o!<%I$rMW5a$7!"$=$N8e(B
- $B3NG'$N$?$a$K$b$&0lEYF~NO$9$k$h$&$KMW5a$7$F$-$^$9!#(B</p>
-
- <example>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mypassword<br />
- Re-type new password: mypassword<br />
- Adding password for user rbowen
- </example>
-
- <p>$B$b$7(B <code>htpasswd</code> $B$,%Q%9$NCf$KF~$C$F$$$J$$>l9g$O!"(B
- $B$b$A$m$s!"<B9T$9$k$?$a$K%W%m%0%i%`$^$G$N%U%k%Q%9$r(B
- $B%?%$%W$9$kI,MW$,$"$j$^$9!#;d$N%5!<%P$G$"$l$P!"(B
- <code>/usr/local/apache/bin/htpasswd</code>
- $B$K%W%m%0%i%`$,CV$+$l$F$$$^$9!#(B</p>
-
- <p>$B<!$K!"%5!<%P$,%Q%9%o!<%I$rMW5a$9$k$h$&$K@_Dj$7$F!"(B
- $B$I$N%f!<%6$,%"%/%;%9$r5v$5$l$F$$$k$+$r%5!<%P$KCN$i$;$J$1$l$P(B
- $B$J$j$^$;$s!#(B <code>httpd.conf</code> $B$rJT=8$9$k$+(B
- <code>.htaccess</code> $B%U%!%$%k$r;HMQ$9$k$+$G(B
- $B@_Dj$7$^$9!#Nc$($P!"%G%#%l%/%H%j(B
- <code>/usr/local/apache/htdocs/secret</code>
- $B$rJ]8n$7$?$$>l9g$O!"(B
- <code>/usr/local/apache/htdocs/secret/.htaccess</code>
- $B$+(B httpd.conf $BCf$N(B &lt;Directory
- /usr/local/apache/apache/htdocs/secret&gt; $B%;%/%7%g%s$K(B
- $BG[CV$7$F!"<!$N%G%#%l%/%F%#%V$r;H$&$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Restricted Files"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </example>
-
- <p>$B8D!9$N%G%#%l%/%F%#%V$K$D$$$F8+$F$_$^$7$g$&!#(B
- <directive module="core">AuthType</directive>
- $B%G%#%l%/%F%#%V$O$I$&$$$&G'>ZJ}K!$G%f!<%6$NG'>Z$r9T$&$+$r(B
- $BA*Br$7$^$9!#:G$b0lHLE*$JJ}K!$O(B <code>Basic</code>
- $B$G!"$3$l$O(B <module>mod_auth_basic</module>
- $B$G<BAu$5$l$F$$$^$9!#$7$+$7$J$,$i!"(B
- $B$3$l$O5$$rIU$1$k$Y$-=EMW$J%]%$%s%H$J$N$G$9$,!"(B
- Basic $BG'>Z$O%/%i%$%"%s%H$+$i%V%i%&%6$X!"(B
- $B%Q%9%o!<%I$r0E9f2=$;$:$KAw$j$^$9!#$G$9$+$i!"(B
- $B$3$NJ}K!$OFC$K5!L)@-$N9b$$%G!<%?$KBP$7$F$OMQ$$$k$Y$-$G$O(B
- $B$"$j$^$;$s!#(B Apache $B$G$O$b$&0l$DJL$NG'>ZJ}K!(B:
- <code>AuthType Digest</code> $B$r%5%]!<%H$7$F$$$^$9!#(B
- $B$3$NJ}K!$O(B <module>mod_auth_digest</module>
- $B$G<BAu$5$l$F$$$F!"$b$C$H0BA4$G$9!#(B
- $B$4$/$4$/:G6a$N%/%i%$%"%s%H$7$+(B Digest
- $BG'>Z$r%5%]!<%H$7$F$$$J$$$h$&$G$9!#(B</p>
-
- <p><directive module="core">AuthName</directive>
- $B%G%#%l%/%F%#%V$G$O!"G'>Z$K;H$&(B <dfn>Realm</dfn> ($BLuCm(B: $BNN0h(B)
- $B$r@_Dj$7$^$9!#(BRealm $B$OBg$-$/J,$1$FFs$D$N5!G=$rDs6!$7$^$9!#(B
- $B0l$DL\$O!"%/%i%$%"%s%H$,%Q%9%o!<%I%@%$%"%m%0%\%C%/%9$N(B
- $B0lIt$H$7$F%f!<%6$K$3$N>pJs$r$h$/Ds<($9$k!"$H$$$&$b$N$G$9!#(B
- $BFs$DL\$K$O!"%/%i%$%"%s%H$,M?$($i$l$?G'>ZNN0h$KBP$7$F$I$N%Q%9%o!<%I$r(B
- $BAw?.$9$l$PNI$$$N$+$r7hDj$9$k$?$a$K;H$o$l$k!"$H$$$&5!G=$G$9!#(B</p>
-
- <p>$BNc$($P!"(B<code>"Restricted Files"</code> $BNN0hCf$G(B
- $B0lEYG'>Z$5$l$l$P!"F10l%5!<%P>e$G(B <code>"Restricted Files"</code>
- Realm $B$H$7$F%^!<%/$5$l$?$I$s$JNN0h$G$b!"%/%i%$%"%s%H$O(B
- $B<+F0E*$KF1$8%Q%9%o!<%I$r;H$*$&$H;n$_$^$9!#(B
- $B$3$N$*$+$2$G!"J#?t$N@)8BNN0h$KF1$8(B realm $B$r6&M-$5$;$F!"(B
- $B%f!<%6$,%Q%9%o!<%I$r2?EY$bMW5a$5$l$k;vBV$r(B
- $BKI$0$3$H$,$G$-$^$9!#$b$A$m$s!"%;%-%e%j%F%#>e$NM}M3$+$i!"(B
- $B%5!<%P$N%[%9%HL>$,JQ$o$l$P$$$D$G$bI,$:!"(B
- $B%/%i%$%"%s%H$O:F$S%Q%9%o!<%I$r?R$M$kI,MW$,$"$j$^$9!#(B</p>
-
- <p><directive module="mod_authn_file">AuthUserFile</directive>
- $B%G%#%l%/%F%#%V$O(B <code>htpasswd</code> $B$G:n$C$?(B
- $B%Q%9%o!<%I%U%!%$%k$X$N%Q%9$r@_Dj$7$^$9!#(B
- $B%f!<%6?t$,B?$$>l9g$O!"%j%/%(%9%HKh$N%f!<%6$NG'>Z$N$?$a$N(B
- $B%W%l!<%s%F%-%9%H$NC5:w$,Hs>o$KCY$/$J$k$3$H$,$"$j$^$9!#(B
- Apache $B$G$O%f!<%6>pJs$r9bB.$J%G!<%?%Y!<%9%U%!%$%k$K(B
- $BJ]4I$9$k$3$H$b$G$-$^$9!#(B
- <module>mod_auth_dbm</module> $B%b%8%e!<%k$,(B
- <directive module="mod_authn_dbm">AuthDBMUserFile</directive>
- $B%G%#%l%/%F%#%V$rDs6!$7$^$9!#$3$l$i$N%U%!%$%k$O(B <a
- href="../programs/dbmmanage.html">dbmmanage</a>
- $B%W%m%0%i%`$G:n@.$7$?$jA`:n$7$?$j$G$-$^$9!#(B
- <a href="http://modules.apache.org/">Apache
- $B%b%8%e!<%k%G!<%?%Y!<%9(B</a>$BCf$K$"$k%5!<%I%Q!<%F%#!<@=$N(B
- $B%b%8%e!<%k$G!"$=$NB>B?$/$N%?%$%W$NG'>Z%*%W%7%g%s$,(B
- $BMxMQ2DG=$G$9!#(B</p>
-
- <p>$B:G8e$K!"(B<directive module="core">Require</directive>
- $B%G%#%l%/%F%#%V$,!"%5!<%P$N$3$NNN0h$K%"%/%;%9$G$-$k%f!<%6$r(B
- $B;XDj$9$k$3$H$K$h$C$F!"%W%m%;%9$N>5G'ItJ,$rDs6!$7$^$9!#(B
- $B<!$N%;%/%7%g%s$G$O!"(B<directive module="core">Require</directive>
- $B%G%#%l%/%F%#%V$NMM!9$JMQK!$K$D$$$F=R$Y$^$9!#(B</p>
-</section>
-
-<section id="lettingmorethanonepersonin"><title>
-$BJ#?t$N?M$,F~$l$k$h$&$K$9$k(B</title>
- <p>$B>e5-$N%G%#%l%/%F%#%V$O!"$?$@0l?M(B ($B6qBNE*$K$O%f!<%6L>(B
- <code>rbowen</code> $B$NC/$+(B) $B$,%G%#%l%/%H%j$K(B
- $BF~$l$k$h$&$K$7$^$9!#B?$/$N>l9g$O!"J#?t$N?M$,(B
- $BF~$l$k$h$&$K$7$?$$$G$7$g$&!#$3$3$G(B
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- $B$NEP>l$G$9!#(B</p>
-
- <p>$B$b$7J#?t$N?M$,F~$l$k$h$&$K$7$?$$$N$G$"$l$P!"(B
- $B%0%k!<%W$KB0$9$k%f!<%6$N0lMw$NF~$C$F$$$k!"%0%k!<%WL>$N$D$$$?(B
- $B%0%k!<%W%U%!%$%k$r:n$kI,MW$,$"$j$^$9!#$3$N%U%!%$%k$N(B
- $B=q<0$O$-$o$a$FC1=c$G!"$*9%$_$N%(%G%#%?$G@8@.$G$-$^$9!#(B
- $B%U%!%$%k$NCf?H$O<!$N$h$&$J$b$N$G$9!#(B</p>
-
- <example>
- GroupName: rbowen dpitts sungo rshersey
- </example>
-
- <p>$B0l9T$K%9%Z!<%96h@Z$j$G!"%0%k!<%W$K=jB0$9$k%a%s%P!<$N(B
- $B0lMw$r$J$i$Y$k$@$1$G$9!#(B</p>
-
- <p>$B4{$KB8:_$9$k%Q%9%o!<%I%U%!%$%k$K%f!<%6$r2C$($k>l9g$O!"(B
- $B<!$N$h$&$K%?%$%W$7$F$/$@$5$$!#(B</p>
-
- <example>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </example>
-
- <p>$B0JA0$HF1$81~Ez$,JV$5$l$^$9$,!"?7$7$$%U%!%$%k$r(B
- $B:n$k$N$G$O$J$/!"4{$K$"$k%U%!%$%k$KDI2C$5$l$F$$$^$9!#(B
- ($B?7$7$$%Q%9%o!<%I%U%!%$%k$r:n$k$K$O(B <code>-c</code>
- $B$r;H$$$^$9!#(B)</p>
-
- <p>$B$3$3$G<!$N$h$&$K$7$F(B <code>.htaccess</code> $B%U%!%$%k$r(B
- $B=$@5$9$kI,MW$,$"$j$^$9!#(B</p>
-
- <example>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName
- </example>
-
- <p>$B$3$l$G!"%0%k!<%W(B <code>GroupName</code> $B$K%j%9%H$5$l$F$$$F!"(B
- <code>password</code> $B%U%!%$%k$K%(%s%H%j$,$"$k?M$O!"(B
- $B@5$7$$%Q%9%o!<%I$r%?%$%W$9$l$PF~$k$3$H$,$G$-$k$G$7$g$&!#(B</p>
-
- <p>$B$b$C$HFCDj$;$:$KJ#?t$N%f!<%6$,F~$l$k$h$&$K$9$k!"(B
- $B$b$&0l$D$NJ}K!$,$"$j$^$9!#%0%k!<%W%U%!%$%k$r:n$k$N$G$O$J$/!"(B
- $B<!$N%G%#%l%/%F%#%V$r;H$($P$G$-$^$9!#(B</p>
-
- <example>
- Require valid-user
- </example>
-
- <p><code>require user rbowen</code> $B9T$G$J$/!">e5-$r;H$&$H!"(B
- $B%Q%9%o!<%I%U%!%$%k$K%j%9%H$5$l$F$$$k?M$G$"$l$PC/$G$b(B
- $B5v2D$5$l$^$9!#(B
- $BC1$K%Q%9%o!<%I%U%!%$%k$r%0%k!<%WKh$KJ,$1$F$*$/$3$H$G!"(B
- $B%0%k!<%W$N$h$&$J?6$kIq$$$r$5$;$k$3$H$b$G$-$^$9!#(B
- $B$3$N%"%W%m!<%A$NMxE@$O!"(BApache $B$OFs$D$G$O$J$/!"(B
- $B$?$@0l$D$N%U%!%$%k$@$1$r8!::$9$l$P$h$$$H$$$&E@$G$9!#(B
- $B7gE@$O!"$?$/$5$s$N%Q%9%o!<%I%U%!%$%k$r4IM}$7$F!"$=$NCf$+$i(B
- <directive module="mod_authn_file">AuthUserFile</directive>
- $B%G%#%l%/%F%#%V$K@5$7$$%U%!%$%k$r;2>H$5$;$J$1$l$P$J$i$J$$E@$G$9!#(B</p>
-</section>
-
-<section id="possibleproblems"><title>$B5/$3$j$($kLdBj(B</title>
- <p>Basic $BG'>Z$,;XDj$5$l$F$$$k>l9g$O!"(B
- $B%5!<%P$K%I%-%e%a%s%H$r%j%/%(%9%H$9$kEY$K(B
- $B%f!<%6L>$H%Q%9%o!<%I$r8!::$7$J$1$l$P$J$j$^$;$s!#(B
- $B$3$l$OF1$8%Z!<%8!"%Z!<%8$K$"$kA4$F$N2hA|$r(B
- $B%j%m!<%I$9$k>l9g$G$"$C$F$b3:Ev$7$^$9(B
- ($B$b$72hA|$bJ]8n$5$l$?%G%#%l%/%H%j$+$iMh$k$N$G$"$l$P(B) $B!#(B
- $BM=A[$5$l$kDL$j!"$3$l$OF0:n$rB?>/CY$/$7$^$9!#(B
- $BCY$/$J$kDxEY$O%Q%9%o!<%I%U%!%$%k$NBg$-$5$HHfNc$7$^$9$,!"(B
- $B$3$l$O!"%U%!%$%k$r3+$$$F$"$J$?$NL>A0$rH/8+$9$k$^$G(B
- $B%f!<%6L>$N%j%9%H$rFI$^$J$1$l$P$J$i$J$$$+$i$G$9!#(B
- $B$=$7$F!"%Z!<%8$,%m!<%I$5$l$kEY$K$3$l$r9T$o$J$1$l$P(B
- $B$J$j$^$;$s!#(B</p>
-
- <p>$B7kO@$H$7$F$O!"0l$D$N%Q%9%o!<%I%U%!%$%k$KCV$/$3$H$N$G$-$k(B
- $B%f!<%6?t$K$O<B<AE*$J8B3&$,$"$j$^$9!#(B
- $B$3$N8B3&$O%5!<%P%^%7%s$N@-G=$K0MB8$7$FJQ$o$j$^$9$,!"(B
- $B?tI4$N%(%s%H%j$r1[$($?$"$?$j$+$iB.EYDc2<$,8+$i$l$k$HM=4|$5$l$F$$$^$9!#(B
- $B$=$N;~$OB>$NG'>ZJ}K!$r9MN8$KF~$l$?J}$,NI$$$G$7$g$&!#(B</p>
-</section>
-
-<section id="whatotherneatstuffcanido"><title>$B$b$C$H9*$_$K@)8f$G$-$J$$(B
-?</title>
- <p>$B%f!<%6L>$H%Q%9%o!<%I$K$h$kG'>Z$OG'>Z$N0l$D$NJ}K!$K2a$.$^$;$s!#(B
- $B$7$P$7$PC/$G$"$k$+$H$$$&$3$H$H$O0c$&2?$+$K4p$E$$$F!"(B
- $BF~$l$k$h$&$K$7$?$/$J$k$3$H$b$"$k$G$7$g$&!#(B
- $BNc$($P$=$N?M$,$I$3$+$iMh$F$$$k$+$H$$$C$?$3$H$G$9!#(B</p>
-
- <p><directive module="mod_authz_host">Allow</directive> $B$H(B
- <directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$r;H$C$F!"%I%-%e%a%s%H$rMW5a$7$F$-$?%^%7%s$N(B
- $B%[%9%HL>$d%[%9%H%"%I%l%9$K4p$E$$$F5v2DIT5v2D$r@)8f$G$-$^$9!#(B
- <directive module="mod_authz_host">Order</directive>
- $B%G%#%l%/%F%#%V$O$3$NFs$D$HO"7H$7$FF0:n$7!"(BApache
- $B$K$I$N=gHV$G%U%#%k%?$rE,MQ$9$k$+$rCN$i$;$^$9!#(B</p>
-
- <p>$B$3$l$i$N%G%#%l%/%F%#%V$N;H$$J}$O<!$N$h$&$K$J$j$^$9!#(B</p>
-
- <example>
- Allow from <var>address</var>
- </example>
-
- <p>$B$3$3$G!"(B<var>address</var> $B$O(B IP $B%"%I%l%9(B
- ($B$^$?$O(B IP $B%"%I%l%9$N0lIt(B)$B!"$"$k$$$O40A4=$>~%I%a%$%sL>(B
- ($B$^$?$O%I%a%$%sL>$N0lIt(B) $B$G$9!#(B
- $BI,MW$G$"$l$PJ#?t$N%"%I%l%9$d%I%a%$%sL>$r;XDj$G$-$^$9!#(B</p>
-
- <p>$BNc$($P!"$b$7C/$+$,7G<(HD$r967b$7$F$$$F!"(B
- $B$=$N?M$rJD$a=P$7$?$$$N$G$"$l$P!"(B
- $B<!$N$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- Deny from 205.252.46.165
- </example>
-
- <p>$B$3$N%"%I%l%9$+$iMh$k?M$O!"$3$N%G%#%l%/%F%#%V$NHO0OFb$N(B
- $B%3%s%F%s%D$r8+$k$3$H$,$G$-$J$$$^$;$s!#$b$7(B IP
- $B%"%I%l%9$NBe$o$j$K%^%7%sL>$,$"$l$P!"$=$l$r;H$($^$9!#(B</p>
-
- <example>
- Deny from <var>host.example.com</var>
- </example>
-
- <p>$B%I%a%$%sA4BN$+$i$N%"%/%;%9$rKI$.$?$1$l$P!"(B
- $BC1$K%"%I%l%9$d%I%a%$%sL>$N0lIt$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- Deny from <var>192.101.205</var><br />
- Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
- Deny from ke
- </example>
-
- <p><directive module="mod_authz_host">Order</directive> $B$r;H$&$3$H$G!"(B
- <directive module="mod_authz_host">Deny</directive> $B$H(B
- <directive module="mod_authz_host">Allow</directive> $B$NAH$_9g$o$;$G(B
- $BF~$C$F$bNI$$%0%k!<%W$,K\Ev$K3N<B$K8BDj$G$-$F$$$k$h$&$K$G$-$^$9!#(B</p>
-
- <example>
- Order deny,allow<br />
- Deny from all<br />
- Allow from <var>dev.example.com</var>
- </example>
-
- <p><directive module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$rC1=c$KNs5s$9$k$N$G$OK>$_$NF0:n$r$7$J$$$G$7$g$&!#(B
- $B$J$<$J$i!"A4$F$N?M$,F~$l$k$H$$$&$3$H$K2C$($F!"(B
- $B;XDj$7$?%[%9%H$+$i$N?M$,F~$l$k$h$&$K$9$k$+$i$G$9!#(B
- $B$d$j$?$$$3$H$O!";XDj$7$??M$?$A(B<em>$B$@$1(B</em>$B$,F~$l$k$h$&$K(B
- $B$9$k$3$H$G$9!#(B</p>
-</section>
-
-<section id="moreinformation"><title>$BDI2C>pJs(B</title>
- <p>$B$3$l$iA4$F$,$I$N$h$&$KF0:n$9$k$+$K$D$$$F(B
- $B$b$C$HB?$/$N>pJs$,=q$+$l$F$$$k(B <module>mod_auth</module> $B$H(B
- <module>mod_access</module>
- $B$NJ8=q$bFI$`$H$h$$$G$7$g$&!#(B</p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/howto/auth.xml.ko b/docs/manual/howto/auth.xml.ko
deleted file mode 100644
index 66d85f591c..0000000000
--- a/docs/manual/howto/auth.xml.ko
+++ /dev/null
@@ -1,333 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="auth.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
-<title>ÀÎÁõ(Authentication), ±ÇÇѺο©(Authorization),
-Á¢±ÙÁ¦¾î(Access Control)</title>
-
-<summary>
- <p>ÀÎÁõ(authentication)Àº ÀÚ½ÅÀÌ ´©±¸¶ó°í ÁÖÀåÇÏ´Â »ç¶÷À»
- È®ÀÎÇÏ´Â ÀýÂ÷ÀÌ´Ù. ±ÇÇѺο©(authorization)´Â °¡°í ½ÍÀº °÷À¸·Î
- °¡µµ·Ï ȤÀº ¿øÇÏ´Â Á¤º¸¸¦ ¾òµµ·Ï Çã¿ëÇÏ´Â °úÁ¤ÀÌ´Ù.</p>
-</summary>
-
-<section id="related"><title>°ü·Ã ¸ðµâ°ú Áö½Ã¾î</title>
- <related>
- <modulelist>
- <module>mod_auth_basic</module>
- <module>mod_authn_file</module>
- <module>mod_authz_groupfile</module>
- <module>mod_authz_host</module>
- </modulelist>
-
- <directivelist>
- <directive module="mod_authz_host">Allow</directive>
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- <directive module="core">AuthName</directive>
- <directive module="core">AuthType</directive>
- <directive module="mod_authn_file">AuthUserFile</directive>
- <directive module="mod_authz_host">Deny</directive>
- <directive module="core">Options</directive>
- <directive module="core">Require</directive>
- </directivelist>
- </related>
-</section>
-
-<section id="introduction"><title>¼Ò°³</title>
- <p>´ç½ÅÀÇ À¥»çÀÌÆ®¿¡ ÀÖ´Â Á¤º¸°¡ ¼Ò¼öÀÇ »ç¶÷µé¸¸ÀÇ ºñ¹ÐÀ̰ųª
- À̵鸸À» À§ÇÑ Á¤º¸¶ó¸é, ÀÌ ±Û¿¡¼­ ¼³¸íÇÏ´Â ±â¹ýÀ» »ç¿ëÇÏ¿©
- ´ç½ÅÀÌ º¸±æ ¿øÇÏ´Â »ç¶÷¸¸ ÆäÀÌÁö¸¦ º¸µµ·Ï ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ ±ÛÀº À¥»çÀÌÆ®ÀÇ ÀϺθ¦ º¸È£ÇϱâÀ§ÇØ ¸¹Àº »ç¶÷µéÀÌ
- »ç¿ëÇÏ´Â "Ç¥ÁØÀûÀÎ" ¹æ¹ýÀ» ´Ù·é´Ù.</p>
-</section>
-
-<section id="theprerequisites"><title>±âº» Áö½Ä</title>
- <p>ÀÌ ±Û¿¡¼­ ´Ù·ç´Â Áö½Ã¾î´Â ¼­¹öÀÇ ÁÖ¼³Á¤ÆÄÀÏ(ÀϹÝÀûÀ¸·Î
- <directive module="core" type="section">Directory</directive>
- ¼½¼Ç)À̳ª µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ(<code>.htaccess</code> ÆÄÀÏ)¿¡¼­
- »ç¿ëÇÑ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ·Á¸é ÀÌ ÆÄÀÏ¿¡ ÀÖ´Â
- ÀÎÁõ Áö½Ã¾î¸¦ Çã¿ëÇϵµ·Ï ¼­¹ö¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. À̸¦ À§ÇØ
- µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¸¦ °áÁ¤ÇÏ´Â
- <directive module="core">AllowOverride</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>¿©±â¼­´Â ÀÎÁõÀ» ´Ù·ç±â ¶§¹®¿¡, ´ÙÀ½°ú °°Àº
- <code>AllowOverride</code> Áö½Ã¾î°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <example>
- AllowOverride AuthConfig
- </example>
-
- <p>ȤÀº Áö½Ã¾î¸¦ Á÷Á¢ ¼­¹ö ÁÖ¼³Á¤ÆÄÀÏ¿¡ Àû´Â´Ù¸é, ±× ÆÄÀÏ¿¡
- ¾²±â ±ÇÇÑÀÌ ¹°·Ð ÀÖ¾î¾ß ÇÑ´Ù.</p>
-
- <p>±×¸®°í º¸È£ÇÒ ÆÄÀÏÀÌ ¾îµðÀÖ´ÂÁö ¾Ë±âÀ§ÇØ ¼­¹öÀÇ µð·ºÅ丮
- ±¸Á¶¿¡ ´ëÇØ Á¶±Ý ¾Ë¾Æ¾ßÇÑ´Ù. ÀÌ ÀÏÀº ¾î·ÆÁö¾Ê°í, Àû´çÇÑ
- ¶§¿¡ ÀÚ¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù.</p>
-</section>
-
-<section id="gettingitworking"><title>±âº»ÀûÀÎ ¼³Á¤Çϱâ</title>
- <p>ÀÌÁ¦ ¼­¹öÀÇ µð·ºÅ丮¸¦ ¾ÏÈ£·Î º¸È£ÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-
- <p>¸ÕÀú ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ ÆÄÀÏÀº À¥¿¡¼­ Á¢±ÙÇÒ
- ¼ö ¾ø´Â °÷¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ´Ù¸¥»ç¶÷ÀÌ ¾ÏÈ£ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏÁö
- ¸øÇÏ°ÔÇϱâ À§Çؼ­´Ù. ¿¹¸¦ µé¾î, ¹®¼­µéÀÌ
- <code>/usr/local/apache/htdocs</code>¿¡ ÀÖ´Ù¸é ¾ÏÈ£ÆÄÀÏ(µé)Àº
- <code>/usr/local/apache/passwd</code>¿¡ µÐ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡ Æ÷ÇÔµÈ <a
- href="../programs/htpasswd.html">htpasswd</a> µµ±¸¸¦ »ç¿ëÇÏ¿©
- ¾ÏÈ£ÆÄÀÏÀ» ¸¸µç´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ °÷ÀÇ
- <code>bin</code> µð·ºÅ丮¿¡ ÀÖ´Ù. ÆÄÀÏÀ» ¸¸µé·Á¸é ´ÙÀ½°ú
- °°ÀÌ ÀÔ·ÂÇÑ´Ù.</p>
-
- <example>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </example>
-
- <p><code>htpasswd</code>´Â ¾ÏÈ£¸¦ ¹°¾îº¸°í, È®ÀÎÀ» À§ÇØ
- ¾ÏÈ£¸¦ ´Ù½Ã ÀÔ·ÂÇ϶ó°í ¿äûÇÑ´Ù.</p>
-
- <example>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mypassword<br />
- Re-type new password: mypassword<br />
- Adding password for user rbowen
- </example>
-
- <p>¹°·Ð <code>htpasswd</code>ÀÌ ½ÇÇàÆÄÀÏ °æ·Î¿¡ ¾ø´Ù¸é
- ½ÇÇàÆÄÀÏÀÇ Àüü °æ·Î¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. ³»°¡ »ç¿ëÇÏ´Â ¼­¹ö¿¡¼­´Â
- <code>/usr/local/apache/bin/htpasswd</code>¿¡ ½ÇÇàÆÄÀÏÀÌ
- ÀÖ´Ù.</p>
-
- <p>´ÙÀ½À¸·Î ¼­¹ö°¡ ¾ÏÈ£¸¦ ¿äûÇϵµ·Ï ¼³Á¤ÇÏ°í, ¼­¹ö¿¡°Ô
- ¾î¶² »ç¿ëÀÚÀÇ Á¢±ÙÀ» Çã¿ëÇÒÁö ¾Ë·ÁÁà¾ß ÇÑ´Ù.
- <code>httpd.conf</code>¸¦ ÆíÁýÇϰųª <code>.htaccess</code>
- ÆÄÀÏÀ» »ç¿ëÇÏ¿© ¼³Á¤ÇÑ´Ù. ¿¹¸¦ µé¾î,
- <code>/usr/local/apache/htdocs/secret</code> µð·ºÅ丮¸¦
- º¸È£ÇÏ·Á¸é, ¾Æ·¡ Áö½Ã¾î¸¦
- <code>/usr/local/apache/htdocs/secret/.htaccess</code> ÆÄÀÏÀ̳ª
- <code>httpd.conf</code>ÀÇ &lt;Directory
- /usr/local/apache/apache/htdocs/secret&gt; ¼½¼Ç¿¡ Àû¾î¾ß
- ÇÑ´Ù.</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Restricted Files"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </example>
-
- <p>Áö½Ã¾î¸¦ Çϳª¾¿ »ìÆ캸ÀÚ. <directive
- module="core">AuthType</directive> Áö½Ã¾î´Â »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ
- ¹æ¹ýÀ» ¼±ÅÃÇÑ´Ù. °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀº <code>Basic</code>À¸·Î,
- <module>mod_auth_basic</module>ÀÌ ±¸ÇöÇÑ´Ù. ±×·¯³ª Basic
- ÀÎÁõÀº ºê¶ó¿ìÀú°¡ ¼­¹ö·Î ¾ÏÈ£¸¦ ¾ÏȣȭÇÏÁö ¾Ê°í º¸³½´Ù.
- ±×·¯¹Ç·Î ±â¹Ð ÀڷḦ º¸È£ÇϱâÀ§ÇØ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.
- ¾ÆÆÄÄ¡´Â <code>AuthType Digest</code>¶ó´Â ÀÎÁõ ¹æ¹ýµµ Áö¿øÇÑ´Ù.
- ÀÌ ¹æ¹ýÀº <module>mod_auth_digest</module>°¡ ±¸ÇöÇϸç, ¸Å¿ì
- ¾ÈÀüÇÏ´Ù. °¡Àå Ãֱ٠Ŭ¶óÀ̾ðÆ®µé¸¸ÀÌ Digest ÀÎÁõÀ» Áö¿øÇÑ´Ù°í
- ÇÑ´Ù.</p>
-
- <p><directive module="core">AuthName</directive> Áö½Ã¾î´Â
- ÀÎÁõ¿¡ »ç¿ëÇÒ <dfn>¿µ¿ª(realm)</dfn>À» ÁöÁ¤ÇÑ´Ù. ¿µ¿ªÀº
- µÎ°¡Áö ¿ªÇÒÀ» ÇÑ´Ù. ù¹ø°´Â Ŭ¶óÀ̾ðÆ®°¡ º¸Åë ÀÌ Á¤º¸¸¦
- ¾ÏÈ£ ´ëȭâ¿¡ º¸¿©ÁØ´Ù. µÎ¹ø°´Â ¿µ¿ª Á¤º¸¸¦ »ç¿ëÇÏ¿©
- Ŭ¶óÀ̾ðÆ®°¡ ƯÁ¤ ÀÎÁõ±¸¿ª¿¡ ¾î¶² ¾ÏÈ£¸¦ º¸³¾Áö °áÁ¤ÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ÀÏ´Ü Å¬¶óÀ̾ðÆ®°¡ <code>"Restricted Files"</code>
- ¿µ¿ª¿¡ ÀÎÁõÀÌ ¼º°øÇÏ¿´´Ù¸é, Ŭ¶óÀ̾ðÆ®´Â ÀÚµ¿À¸·Î °°Àº ¼­¹ö¿¡¼­
- <code>"Restricted Files"</code> ¿µ¿ªÀ¸·Î Ç¥½ÃµÈ ±¸¿ª¿¡ ´ëÇØ
- µ¿ÀÏÇÑ ¾ÏÈ£¸¦ ½ÃµµÇÑ´Ù. ±×·¡¼­ ¿©·¯ Á¦ÇÑ ±¸¿ªÀÌ °°Àº ¿µ¿ªÀ»
- °øÀ¯ÇÏ¸é »ç¿ëÀÚ°¡ ¿©·¯¹ø ¾ÏÈ£¸¦ ÀÔ·ÂÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ¹°·Ð
- º¸¾È»ó ÀÌÀ¯·Î Ŭ¶óÀ̾ðÆ®´Â ¼­¹öÀÇ È£½ºÆ®¸íÀÌ ´Ù¸£¸é Ç×»ó
- »õ·Î ¾ÏÈ£¸¦ ¹°¾îº»´Ù.</p>
-
- <p><directive module="mod_authn_file">AuthUserFile</directive>
- Áö½Ã¾î´Â ¿ì¸®°¡ ¹æ±Ý <code>htpasswd</code>·Î ¸¸µç ¾ÏÈ£ÆÄÀÏÀÇ
- °æ·Î¸¦ ¼³Á¤ÇÑ´Ù. »ç¿ëÀÚ°¡ ¸¹´Ù¸é ¿äû¸¶´Ù ¸Å¹ø »ç¿ëÀÚ¸¦
- ÀÎÁõÇϱâÀ§ÇØ ÀÏ¹Ý ¹®¼­ÆÄÀÏÀ» °Ë»öÇϴµ¥ ½Ã°£ÀÌ »ó´çÈ÷ ¸¹ÀÌ
- °É¸± ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ºü¸¥ µ¥ÀÌŸº£À̽º ÆÄÀÏ¿¡ »ç¿ëÀÚ Á¤º¸¸¦
- ÀúÀåÇÒ ¼ö ÀÖ´Ù. <module>mod_authn_dbm</module> ¸ðµâÀº <directive
- module="mod_authn_dbm">AuthDBMUserFile</directive> Áö½Ã¾î¸¦
- Á¦°øÇÑ´Ù. <a href="../programs/dbmmanage.html">dbmmanage</a>
- ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé°í ´Ù·é´Ù. <a
- href="http://modules.apache.org/">¾ÆÆÄÄ¡ ¸ðµâ
- µ¥ÀÌŸº£À̽º</a>¿¡´Â ¿©·¯ ´Ù¸¥ ÀÎÁõ ¹æ½ÄÀ» Á¦°øÇÏ´Â Á¦»ïÀÚ°¡
- ¸¸µç ¸ðµâµéÀÌ ÀÖ´Ù.</p>
-
- <p>¸¶Áö¸·À¸·Î <directive module="core">Require</directive>
- Áö½Ã¾î´Â ¼­¹öÀÇ Æ¯Á¤ ¿µ¿ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ ÁöÁ¤ÇÏ¿©
- ±ÇÇѺο©¸¦ ÇÑ´Ù. ´ÙÀ½ ÀýÀº <code>require</code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ´Â ´Ù¾çÇÑ ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-</section>
-
-<section id="lettingmorethanonepersonin"><title>¿©·¯¸íÀ» µé¿©º¸³»±â</title>
- <p>À§ÀÇ Áö½Ã¾î´Â µð·ºÅ丮·Î (»ç¿ëÀÚ¸íÀÌ <code>rbowen</code>ÀÎ)
- ÇÑ »ç¶÷¸¸À» µé¿©º¸³½´Ù. ´ëºÎºÐÀÇ °æ¿ì ¿©·¯ »ç¶÷À» µé¿©º¸³»°í
- ½ÍÀ» °ÍÀÌ´Ù. ÀÌÁ¦ <directive
- module="mod_authz_groupfile">AuthGroupFile</directive>À»
- »ç¿ëÇÒ ¶§´Ù.</p>
-
- <p>¿©·¯ »ç¶÷À» µé¿©º¸³»°í ½Í´Ù¸é ±×·ì¸í°ú ±× ±×·ì¿¡ ¾î¶²
- »ç¿ëÀÚµéÀÌ ÀÖ´ÂÁö ¾Ë·ÁÁÖ´Â ±×·ìÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ÆÄÀÏÀÇ
- Çü½ÄÀº ¸Å¿ì °£´ÜÇÏ¿©, ¾Æ¹« ÆíÁý±â·Î³ª ¸¸µé ¼ö ÀÖ´Ù. ÆÄÀϳ»¿ëÀº
- ´ÙÀ½°ú °°´Ù.</p>
-
- <example>
- GroupName: rbowen dpitts sungo rshersey
- </example>
-
- <p>±×³É °ø¹éÀ¸·Î ±¸ºÐÇÑ ±ä ±×·ì ±¸¼º¿ø ¸ñ·ÏÀÏ »ÓÀÌ´Ù.</p>
-
- <p>±âÁ¸ÀÇ ¾ÏÈ£ÆÄÀÏ¿¡ »ç¿ëÀÚ¸¦ Ãß°¡ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù</p>
-
- <example>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </example>
-
- <p>Àü°ú °°Áö¸¸, »õ·Î ÆÄÀÏÀ» ¸¸µéÁö ¾Ê°í ±âÁ¸ ÆÄÀÏ¿¡ »ç¿ëÀÚ¸¦
- Ãß°¡ÇÑ´Ù. (<code>-c</code> ¿É¼ÇÀº »õ·Î ¾ÏÈ£ÆÄÀÏÀ» ¸¸µç´Ù).</p>
-
- <p>ÀÌÁ¦ <code>.htaccess</code> ÆÄÀÏÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.</p>
-
- <example>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName
- </example>
-
- <p>±×·¯¸é <code>GroupName</code> ±×·ì¿¡ ¼ÓÇϸç
- <code>password</code> ÆÄÀÏ¿¡ Ç׸ñÀÌ ÀÖ´Â »ç¿ëÀÚ°¡ ¿Ã¹Ù¸¥
- ¾ÏÈ£¸¦ ÀÔ·ÂÇϸé Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</p>
-
- <p>¿©·¯ ÀÏ¹Ý »ç¿ëÀÚ¸¦ µé¿©º¸³»´Â ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ´Ù. ±×·ìÆÄÀÏÀ»
- ¸¸µé ÇÊ¿ä¾øÀÌ ´ÙÀ½ Áö½Ã¾î¸¦ »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù.</p>
-
- <example>
- Require valid-user
- </example>
-
- <p><code>Require user rbowen</code> ´ë½Å ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇϸé
- ¾ÏÈ£ÆÄÀÏ¿¡ ÀÖ´Â ´©±¸¶óµµ ¿Ã¹Ù¸¥ ¾ÏÈ£¸¦ ÀÔ·ÂÇϱ⸸ Çϸé Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ±×·ìº°·Î ´Ù¸¥ ¾ÏÈ£ÆÄÀÏÀ» »ç¿ëÇÏ¿© ±×·ì°ú ºñ½ÁÇÑ
- È¿°ú¸¦ ¾òÀ» ¼öµµ ÀÖ´Ù. ÀÌ °æ¿ì ¾ÆÆÄÄ¡°¡ ÆÄÀÏ µÎ°³(¾ÏÈ£ÆÄÀÏ°ú
- ±×·ìÆÄÀÏ)°¡ ¾Æ´Ñ ÆÄÀÏ ÇÑ°³(¾ÏÈ£ÆÄÀÏ)¸¸ °Ë»çÇÏ¸é µÈ´Ù´Â °ÍÀÌ
- ÀåÁ¡ÀÌ´Ù. ±×·¯³ª ¿©·¯ ¾ÏÈ£ÆÄÀÏÀ» °ü¸®ÇØ¾ß ÇÏ°í, <directive
- module="mod_authn_file">AuthUserFile</directive> Áö½Ã¾î¿¡
- Á¤È®ÇÑ ¾ÏÈ£ÆÄÀÏÀ» ÁöÁ¤ÇØ¾ß ÇÏ´Â °ÍÀº ´ÜÁ¡ÀÌ´Ù.</p>
-</section>
-
-<section id="possibleproblems"><title>¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦Á¡</title>
- <p>Basic ÀÎÁõ ¹æ½ÄÀº ¼­¹ö¿¡¼­ ¹®¼­¸¦ ¿äûÇÒ ¶§¸¶´Ù »ç¿ëÀÚ¸í°ú
- ¾ÏÈ£¸¦ È®ÀÎÇÑ´Ù. ½ÉÁö¾î °°Àº ÆäÀÌÁö¸¦ »õ·Î °íħÇÒ ¶§µµ ÆäÀÌÁö¿Í
- (±×¸²ÀÌ ¾ÏÈ£·Î º¸È£ÇÏ´Â µð·ºÅ丮¿¡ ÀÖ´Â °æ¿ì) ÆäÀÌÁö¿¡ ÀÖ´Â
- ¸ðµç ±×¸²¿¡ ´ëÇØ ´Ù½Ã È®ÀÎÇÑ´Ù. ÁüÀÛÇϵíÀÌ ¼Óµµ°¡ Á¶±Ý ´À·ÁÁø´Ù.
- ¾ÏÈ£ÆÄÀÏÀ» ¿­¾î¼­ »ç¿ëÀÚ¸íÀ» ãÀ» ¶§±îÁö »ç¿ëÀÚ ¸ñ·ÏÀ» »ìÆìºÁ¾ß
- Çϱ⶧¹®¿¡ ¾ÏÈ£ÆÄÀÏ Å©±â°¡ Ä¿Áú ¼ö·Ï ´õ ´À·ÁÁø´Ù. ±×¸®°í
- ÀÌ ÀÛ¾÷À» ÆäÀÌÁö¸¦ ¿äûÇÒ ¶§¸¶´Ù ÁøÇàÇÑ´Ù.</p>
-
- <p>±×·¡¼­ Çö½ÇÀûÀ¸·Î ÇÑ ¾ÏÈ£ÆÄÀÏ¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¼ö¿¡´Â
- ÇÑ°è°¡ ÀÖ´Ù. ÀÌ ÇÑ°è´Â »ç¿ëÇÏ´Â ¼­¹öÀÇ ¼º´É¿¡ µû¶ó ´Ù¸£Áö¸¸,
- Ç׸ñÀÌ ¼ö¹é°³°¡ ³Ñ´Â´Ù¸é ´À·ÁÁø´Ù°í »ý°¢ÇÏ°í ´Ù¸¥ ÀÎÁõ ¹æ¹ýÀ»
- °í·ÁÇØ¾ß ÇÑ´Ù.</p>
-</section>
-
-<section id="whatotherneatstuffcanido"><title>´Ù¸¥ ¹æ¹ýµµ °¡´ÉÇÑ°¡?</title>
- <p>»ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ »ç¿ëÇÑ ÀÎÁõÀÌ ´Ù°¡ ¾Æ´Ï´Ù. Á¾Á¾ Á¢¼ÓÇÑ
- Àå¼Ò¿Í °°Àº ´Ù¸¥ Á¤º¸¸¦ °¡Áö°í »ç¿ëÀÚ¸¦ µé¿©º¸³»°í ½ÍÀ»
- ¶§°¡ ÀÖ´Ù.</p>
-
- <p><directive module="mod_authz_host">Allow</directive>¿Í
- <directive module="mod_authz_host">Deny</directive> Áö½Ã¾î´Â
- ¹®¼­¸¦ ¿äûÇÑ ÄÄÇ»ÅÍÀÇ È£½ºÆ®¸í ȤÀº È£½ºÆ® ÁÖ¼Ò¸¦ °¡Áö°í
- Á¢±ÙÀ» Çã¿ëÇϰųª °ÅºÎÇÑ´Ù. <directive
- module="mod_authz_host">Order</directive> Áö½Ã¾î´Â ÀÌ µÎ
- Áö½Ã¾î¿Í °°ÀÌ »ç¿ëÇÏ¿©, ¾ÆÆÄÄ¡¿¡°Ô ¾î¶² ¼ø¼­·Î ±ÔÄ¢À» Àû¿ëÇÒÁö
- ¾Ë¸°´Ù.</p>
-
- <p>À̵é Áö½Ã¾î »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.</p>
-
- <example>
- Allow from <var>address</var>
- </example>
-
- <p>¿©±â¼­ <var>address</var>´Â IP ÁÖ¼Ò(ȤÀº IP ÁÖ¼Ò ÀϺÎ)³ª
- ¿ÏÀüÇÑ µµ¸ÞÀθí(ȤÀº µµ¸ÞÀθí ÀϺÎ)ÀÌ´Ù. ¿øÇÑ´Ù¸é ¿©·¯ ÁÖ¼Ò³ª
- µµ¸ÞÀθíÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ´©±º°¡°¡ °Ô½ÃÆÇ¿¡ ±¤°í¸¦ ¿Ã¸®°í ÀÖ´Ù¸é ´ÙÀ½°ú
- °°ÀÌ Á¢±ÙÀ» ¸·À» ¼ö ÀÖ´Ù.</p>
-
- <example>
- Deny from 205.252.46.165
- </example>
-
- <p>±× ÁÖ¼Ò¿¡¼­ µé¾î¿À´Â ¹æ¹®ÀÚ´Â ÀÌ Áö½Ã¾î°¡ º¸È£ÇÏ´Â ÆäÀÌÁö¸¦
- º¼ ¼ö ¾ø´Ù. IP ÁÖ¼Ò ´ë½Å ´ÙÀ½°ú °°ÀÌ ÄÄÇ»Å͸íÀ» »ç¿ëÇÒ ¼öµµ
- ÀÖ´Ù.</p>
-
- <example>
- Deny from <var>host.example.com</var>
- </example>
-
- <p>¶Ç, Àüü µµ¸ÞÀÎÀÇ Á¢±ÙÀ» ¸·À¸·Á¸é ÁÖ¼Ò³ª µµ¸ÞÀθíÀÇ ÀϺθ¦
- »ç¿ëÇÑ´Ù.</p>
-
- <example>
- Deny from <var>192.101.205</var><br />
- Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
- Deny from ke
- </example>
-
- <p><directive module="mod_authz_host">Order</directive>¸¦
- <directive module="mod_authz_host">Deny</directive>¿Í <directive
- module="mod_authz_host">Allow</directive> Áö½Ã¾î¿Í °°ÀÌ
- »ç¿ëÇÏ¿© ½ÇÁ¦·Î ¿øÇÏ´Â ´ë»óÀ» ¸·À» ¼ö ÀÖ´Ù.</p>
-
- <example>
- Order deny,allow<br />
- Deny from all<br />
- Allow from <var>dev.example.com</var>
- </example>
-
- <p><directive module="mod_authz_host">Allow</directive>
- Áö½Ã¾î¸¸ »ç¿ëÇϸé, ÇØ´ç È£½ºÆ®ÀÇ »ç¿ëÀÚ¸¦ Çã¿ëÇÏ°í °Å±â¿¡
- Ãß°¡·Î ¸ðµç »ç¶÷À» Çã¿ëÇϹǷΠ¿øÇÏ´Â °á°ú¸¦ ¾òÁö ¸øÇÑ´Ù.
- ´ç½ÅÀº ƯÁ¤ »ç¶÷<em>¸¸</em> Çã¿ëÇÏ±æ ¿øÇÑ´Ù.</p>
-</section>
-
-<section id="moreinformation"><title>´õ ¸¹Àº Á¤º¸</title>
- <p><module>mod_auth_basic</module>°ú
- <module>mod_authz_host</module> ¹®¼­¿¡ Á¢±ÙÁ¦¾î°¡ µ¿ÀÛÇÏ´Â
- ¹æ¹ý¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸°¡ ÀÖ´Ù.</p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/howto/auth.xml.meta b/docs/manual/howto/auth.xml.meta
deleted file mode 100644
index 1a72cfb969..0000000000
--- a/docs/manual/howto/auth.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>auth</basename>
- <path>/howto/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/howto/cgi.html b/docs/manual/howto/cgi.html
deleted file mode 100644
index 8d3dbcba19..0000000000
--- a/docs/manual/howto/cgi.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: cgi.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: cgi.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: cgi.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/howto/cgi.html.en b/docs/manual/howto/cgi.html.en
deleted file mode 100644
index 4575092faa..0000000000
--- a/docs/manual/howto/cgi.html.en
+++ /dev/null
@@ -1,555 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Tutorial: Dynamic Content with CGI - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: Dynamic Content with CGI</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configuring Apache to permit CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#writing">Writing a CGI program</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">But it's still not working!</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">What's going on behind the scenes?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI modules/libraries</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">For more information</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intro" id="intro">Introduction</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>
-
- <p>The CGI (Common Gateway Interface) defines a way for a web
- server to interact with external content-generating programs,
- which are often referred to as CGI programs or CGI scripts. It
- is the simplest, and most common, way to put dynamic content on
- your web site. This document will be an introduction to setting
- up CGI on your Apache web server, and getting started writing
- CGI programs.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">Configuring Apache to permit CGI</a></h2>
-
-
- <p>In order to get your CGI programs to work properly, you'll
- need to have Apache configured to permit CGI execution. There
- are several ways to do this.</p>
-
- <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
-
-
- <p>The
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
-
- directive tells Apache that a particular directory is set
- aside for CGI programs. Apache will assume that every file in
- this directory is a CGI program, and will attempt to execute
- it, when that particular resource is requested by a
- client.</p>
-
- <p>The <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- directive looks like:</p>
-
- <div class="example"><p><code>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </code></p></div>
-
- <p>The example shown is from your default <code>httpd.conf</code>
- configuration file, if you installed Apache in the default
- location. The <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- directive is much like the <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> directive, which defines a URL prefix that
- is to mapped to a particular directory. <code class="directive">Alias</code>
- and <code class="directive">ScriptAlias</code> are usually used for
- directories that are outside of the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directory. The difference between
- <code class="directive">Alias</code> and <code class="directive">ScriptAlias</code>
- is that <code class="directive">ScriptAlias</code> has the added meaning
- that everything under that URL prefix will be considered a CGI
- program. So, the example above tells Apache that any request for a
- resource beginning with <code>/cgi-bin/</code> should be served from
- the directory <code>/usr/local/apache2/cgi-bin/</code>, and should be
- treated as a CGI program.</p>
-
- <p>For example, if the URL
- <code>http://www.example.com/cgi-bin/test.pl</code>
- is requested, Apache will attempt to execute the file
- <code>/usr/local/apache2/cgi-bin/test.pl</code>
- and return the output. Of course, the file will have to
- exist, and be executable, and return output in a particular
- way, or Apache will return an error message.</p>
-
-
- <h3><a name="nonscriptalias" id="nonscriptalias">CGI outside of ScriptAlias directories</a></h3>
-
-
- <p>CGI programs are often restricted to <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>'ed directories for security reasons.
- In this way, administrators can tightly control who is allowed to
- use CGI programs. However, if the proper security precautions are
- taken, there is no reason why CGI programs cannot be run from
- arbitrary directories. For example, you may wish to let users
- have web content in their home directories with the
- <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive.
- If they want to have their own CGI programs, but don't have access to
- the main <code>cgi-bin</code> directory, they will need to be able to
- run CGI programs elsewhere.</p>
-
- <p>There are two steps to allowing CGI execution in an arbitrary
- directory. First, the <code>cgi-script</code> handler must be
- activated using the <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> or <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> directive. Second,
- <code>ExecCGI</code> must be specified in the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive.</p>
-
-
- <h3><a name="options" id="options">Explicitly using Options to permit CGI execution</a></h3>
-
-
- <p>You could explicitly use the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive, inside your main server configuration
- file, to specify that CGI execution was permitted in a particular
- directory:</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
- <span class="indent">
- Options +ExecCGI<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>The above directive tells Apache to permit the execution
- of CGI files. You will also need to tell the server what
- files are CGI files. The following <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> directive tells the server to treat all
- files with the <code>cgi</code> or <code>pl</code> extension as CGI
- programs:</p>
-
- <div class="example"><p><code>
- AddHandler cgi-script .cgi .pl
- </code></p></div>
-
-
- <h3><a name="htaccess" id="htaccess">.htaccess files</a></h3>
-
-
- <p>The <a href="htaccess.html"><code>.htaccess</code> tutorial</a>
- shows how to activate CGI programs if you do not have
- access to <code>httpd.conf</code>.</p>
-
-
- <h3><a name="userdir" id="userdir">User Directories</a></h3>
-
-
- <p>To allow CGI program execution for any file ending in
- <code>.cgi</code> in users' directories, you can use the
- following configuration.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html&gt;<br />
- <span class="indent">
- Options +ExecCGI<br />
- AddHandler cgi-script .cgi<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>If you wish designate a <code>cgi-bin</code> subdirectory of
- a user's directory where everything will be treated as a CGI
- program, you can use the following.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
- <span class="indent">
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writing" id="writing">Writing a CGI program</a></h2>
-
-
- <p>There are two main differences between ``regular''
- programming, and CGI programming.</p>
-
- <p>First, all output from your CGI program must be preceded by
- a MIME-type header. This is HTTP header that tells the client
- what sort of content it is receiving. Most of the time, this
- will look like:</p>
-
- <div class="example"><p><code>
- Content-type: text/html
- </code></p></div>
-
- <p>Secondly, your output needs to be in HTML, or some other
- format that a browser will be able to display. Most of the
- time, this will be HTML, but occasionally you might write a CGI
- program that outputs a gif image, or other non-HTML
- content.</p>
-
- <p>Apart from those two things, writing a CGI program will look
- a lot like any other program that you might write.</p>
-
- <h3><a name="firstcgi" id="firstcgi">Your first CGI program</a></h3>
-
-
- <p>The following is an example CGI program that prints one
- line to your browser. Type in the following, save it to a
- file called <code>first.pl</code>, and put it in your
- <code>cgi-bin</code> directory.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
- </code></p></div>
-
- <p>Even if you are not familiar with Perl, you should be able
- to see what is happening here. The first line tells Apache
- (or whatever shell you happen to be running under) that this
- program can be executed by feeding the file to the
- interpreter found at the location <code>/usr/bin/perl</code>.
- The second line prints the content-type declaration we
- talked about, followed by two carriage-return newline pairs.
- This puts a blank line after the header, to indicate the end
- of the HTTP headers, and the beginning of the body. The third
- line prints the string "Hello, World.". And that's the end
- of it.</p>
-
- <p>If you open your favorite browser and tell it to get the
- address</p>
-
- <div class="example"><p><code>
- http://www.example.com/cgi-bin/first.pl
- </code></p></div>
-
- <p>or wherever you put your file, you will see the one line
- <code>Hello, World.</code> appear in your browser window.
- It's not very exciting, but once you get that working, you'll
- have a good chance of getting just about anything working.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">But it's still not working!</a></h2>
-
-
- <p>There are four basic things that you may see in your browser
- when you try to access your CGI program from the web:</p>
-
- <dl>
- <dt>The output of your CGI program</dt>
- <dd>Great! That means everything worked fine. If the output is correct,
- but the browser is not processing it correctly, make sure you have the
- correct <code>Content-Type</code> set in your CGI program.</dd>
-
- <dt>The source code of your CGI program or a "POST Method Not
- Allowed" message</dt>
- <dd>That means that you have not properly configured Apache
- to process your CGI program. Reread the section on
- <a href="#configuring">configuring
- Apache</a> and try to find what you missed.</dd>
-
- <dt>A message starting with "Forbidden"</dt>
- <dd>That means that there is a permissions problem. Check the
- <a href="#errorlogs">Apache error log</a> and the section below on
- <a href="#permissions">file permissions</a>.</dd>
-
- <dt>A message saying "Internal Server Error"</dt>
- <dd>If you check the
- <a href="#errorlogs">Apache error log</a>, you will probably
- find that it says "Premature end of
- script headers", possibly along with an error message
- generated by your CGI program. In this case, you will want to
- check each of the below sections to see what might be
- preventing your CGI program from emitting the proper HTTP
- headers.</dd>
- </dl>
-
- <h3><a name="permissions" id="permissions">File permissions</a></h3>
-
-
- <p>Remember that the server does not run as you. That is,
- when the server starts up, it is running with the permissions
- of an unprivileged user - usually <code>nobody</code>, or
- <code>www</code> - and so it will need extra permissions to
- execute files that are owned by you. Usually, the way to give
- a file sufficient permissions to be executed by <code>nobody</code>
- is to give everyone execute permission on the file:</p>
-
- <div class="example"><p><code>
- chmod a+x first.pl
- </code></p></div>
-
- <p>Also, if your program reads from, or writes to, any other
- files, those files will need to have the correct permissions
- to permit this.</p>
-
-
-
- <h3><a name="pathinformation" id="pathinformation">Path information and environment</a></h3>
-
-
- <p>When you run a program from your command line, you have
- certain information that is passed to the shell without you
- thinking about it. For example, you have a <code>PATH</code>,
- which tells the shell where it can look for files that you
- reference.</p>
-
- <p>When a program runs through the web server as a CGI program,
- it may not have the same <code>PATH</code>. Any programs that you
- invoke in your CGI program (like <code>sendmail</code>, for
- example) will need to be specified by a full path, so that the
- shell can find them when it attempts to execute your CGI
- program.</p>
-
- <p>A common manifestation of this is the path to the script
- interpreter (often <code>perl</code>) indicated in the first
- line of your CGI program, which will look something like:</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl
- </code></p></div>
-
- <p>Make sure that this is in fact the path to the
- interpreter.</p>
-
- <p>In addition, if your CGI program depends on other <a href="#env">environment variables</a>, you will need to
- assure that those variables are passed by Apache.</p>
-
-
-
- <h3><a name="syntaxerrors" id="syntaxerrors">Program errors</a></h3>
-
-
- <p>Most of the time when a CGI program fails, it's because of
- a problem with the program itself. This is particularly true
- once you get the hang of this CGI stuff, and no longer make
- the above two mistakes. The first thing to do is to make
- sure that your program runs from the command line before
- testing it via the web server. For example, try:</p>
-
- <div class="example"><p><code>
- cd /usr/local/apache2/cgi-bin<br />
- ./first.pl
- </code></p></div>
-
- <p>(Do not call the <code>perl</code> interpreter. The shell
- and Apache should find the interpreter using the <a href="#pathinformation">path information</a> on the first line of
- the script.)</p>
-
- <p>The first thing you see written by your program should be
- a set of HTTP headers, including the <code>Content-Type</code>,
- followed by a blank line. If you see anything else, Apache will
- return the <code>Premature end of script headers</code> error if
- you try to run it through the server. See <a href="#writing">Writing a CGI program</a> above for more
- details.</p>
-
-
- <h3><a name="errorlogs" id="errorlogs">Error logs</a></h3>
-
-
- <p>The error logs are your friend. Anything that goes wrong
- generates message in the error log. You should always look
- there first. If the place where you are hosting your web site
- does not permit you access to the error log, you should
- probably host your site somewhere else. Learn to read the
- error logs, and you'll find that almost all of your problems
- are quickly identified, and quickly solved.</p>
-
-
- <h3><a name="suexec" id="suexec">Suexec</a></h3>
-
-
- <p>The <a href="../suexec.html">suexec</a> support program
- allows CGI programs to be run under different user permissions,
- depending on which virtual host or user home directory they are
- located in. Suexec has very strict permission checking, and any
- failure in that checking will result in your CGI programs
- failing with <code>Premature end of script headers</code>.</p>
-
- <p>To check if you are using suexec, run <code>apachectl
- -V</code> and check for the location of <code>SUEXEC_BIN</code>.
- If Apache finds an suexec binary there on startup, suexec will
- be activated.</p>
-
- <p>Unless you fully understand suexec, you should not be using it.
- To disable suexec, simply remove (or rename) the <code>suexec</code>
- binary pointed to by <code>SUEXEC_BIN</code> and then restart the
- server. If, after reading about <a href="../suexec.html">suexec</a>,
- you still wish to use it, then run <code>suexec -V</code> to find
- the location of the suexec log file, and use that log file to
- find what policy you are violating.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behindscenes" id="behindscenes">What's going on behind the scenes?</a></h2>
-
-
- <p>As you become more advanced in CGI programming, it will
- become useful to understand more about what's happening behind
- the scenes. Specifically, how the browser and server
- communicate with one another. Because although it's all very
- well to write a program that prints "Hello, World.", it's not
- particularly useful.</p>
-
- <h3><a name="env" id="env">Environment variables</a></h3>
-
-
- <p>Environment variables are values that float around you as
- you use your computer. They are useful things like your path
- (where the computer searches for the actual file
- implementing a command when you type it), your username, your
- terminal type, and so on. For a full list of your normal,
- every day environment variables, type
- <code>env</code> at a command prompt.</p>
-
- <p>During the CGI transaction, the server and the browser
- also set environment variables, so that they can communicate
- with one another. These are things like the browser type
- (Netscape, IE, Lynx), the server type (Apache, IIS, WebSite),
- the name of the CGI program that is being run, and so on.</p>
-
- <p>These variables are available to the CGI programmer, and
- are half of the story of the client-server communication. The
- complete list of required variables is at
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
-
- <p>This simple Perl CGI program will display all of the
- environment variables that are being passed around. Two
- similar programs are included in the
- <code>cgi-bin</code>
-
- directory of the Apache distribution. Note that some
- variables are required, while others are optional, so you may
- see some variables listed that were not in the official list.
- In addition, Apache provides many different ways for you to
- <a href="../env.html">add your own environment variables</a>
- to the basic ones provided by default.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <span class="indent">
- print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
- </span>
- }
- </code></p></div>
-
-
- <h3><a name="stdin" id="stdin">STDIN and STDOUT</a></h3>
-
-
- <p>Other communication between the server and the client
- happens over standard input (<code>STDIN</code>) and standard
- output (<code>STDOUT</code>). In normal everyday context,
- <code>STDIN</code> means the keyboard, or a file that a
- program is given to act on, and <code>STDOUT</code>
- usually means the console or screen.</p>
-
- <p>When you <code>POST</code> a web form to a CGI program,
- the data in that form is bundled up into a special format
- and gets delivered to your CGI program over <code>STDIN</code>.
- The program then can process that data as though it was
- coming in from the keyboard, or from a file</p>
-
- <p>The "special format" is very simple. A field name and
- its value are joined together with an equals (=) sign, and
- pairs of values are joined together with an ampersand
- (&amp;). Inconvenient characters like spaces, ampersands, and
- equals signs, are converted into their hex equivalent so that
- they don't gum up the works. The whole data string might look
- something like:</p>
-
- <div class="example"><p><code>
- name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
- </code></p></div>
-
- <p>You'll sometimes also see this type of string appended to
- a URL. When that is done, the server puts that string
- into the environment variable called
- <code>QUERY_STRING</code>. That's called a <code>GET</code>
- request. Your HTML form specifies whether a <code>GET</code>
- or a <code>POST</code> is used to deliver the data, by setting the
- <code>METHOD</code> attribute in the <code>FORM</code> tag.</p>
-
- <p>Your program is then responsible for splitting that string
- up into useful information. Fortunately, there are libraries
- and modules available to help you process this data, as well
- as handle other of the aspects of your CGI program.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="libraries" id="libraries">CGI modules/libraries</a></h2>
-
-
- <p>When you write CGI programs, you should consider using a
- code library, or module, to do most of the grunt work for you.
- This leads to fewer errors, and faster development.</p>
-
- <p>If you're writing CGI programs in Perl, modules are
- available on <a href="http://www.cpan.org/">CPAN</a>. The most
- popular module for this purpose is <code>CGI.pm</code>. You might
- also consider <code>CGI::Lite</code>, which implements a minimal
- set of functionality, which is all you need in most programs.</p>
-
- <p>If you're writing CGI programs in C, there are a variety of
- options. One of these is the <code>CGIC</code> library, from
- <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinfo" id="moreinfo">For more information</a></h2>
-
-
- <p>There are a large number of CGI resources on the web. You
- can discuss CGI problems with other users on the Usenet group
- <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a>. And the -servers mailing
- list from the HTML Writers Guild is a great source of answers
- to your questions. You can find out more at
- <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>.</p>
-
- <p>And, of course, you should probably read the CGI
- specification, which has all the details on the operation of
- CGI programs. You can find the original version at the
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> and there is an updated draft at the
- <a href="http://web.golux.com/coar/cgi/">Common Gateway
- Interface RFC project</a>.</p>
-
- <p>When you post a question about a CGI problem that you're
- having, whether to a mailing list, or to a newsgroup, make sure
- you provide enough information about what happened, what you
- expected to happen, and how what actually happened was
- different, what server you're running, what language your CGI
- program was in, and, if possible, the offending code. This will
- make finding your problem much simpler.</p>
-
- <p>Note that questions about CGI problems should <strong>never</strong>
- be posted to the Apache bug database unless you are sure you
- have found a problem in the Apache source code.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/cgi.html.ja.euc-jp b/docs/manual/howto/cgi.html.ja.euc-jp
deleted file mode 100644
index 7e90d40eb4..0000000000
--- a/docs/manual/howto/cgi.html.ja.euc-jp
+++ /dev/null
@@ -1,544 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Tutorial: CGI ¤Ë¤è¤ëưŪ¥³¥ó¥Æ¥ó¥Ä - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: CGI ¤Ë¤è¤ëưŪ¥³¥ó¥Æ¥ó¥Ä</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">¤Ï¤¸¤á¤Ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI ¤òµö²Ä¤¹¤ë¤è¤¦¤Ë Apache ¤òÀßÄꤹ¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¯</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">¤·¤«¤·¡¢¤Þ¤ÀÆ°¤«¤Ê¤¤ !</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">΢¤Ç²¿¤¬µ¯¤³¤Ã¤Æ¤¤¤ë¤Î¤«?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI ¥â¥¸¥å¡¼¥ë/¥é¥¤¥Ö¥é¥ê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">¹¹¤Ê¤ë¾ðÊó</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intro" id="intro">¤Ï¤¸¤á¤Ë</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>
-
- <p>CGI (Common Gateway Interface) ¤Ï¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¤¬
- ¥³¥ó¥Æ¥ó¥ÄÀ¸À®¤ò¤¹¤ë³°Éô¥×¥í¥°¥é¥à¤È¶¨Ä´¤·¤ÆÆ°ºî¤¹¤ë¤¿¤á¤ÎÊýË¡¤ò
- ÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£¤½¤Î¥×¥í¥°¥é¥à¤Ï¤·¤Ð¤·¤Ð CGI ¥×¥í¥°¥é¥à¤ä
- CGI ¥¹¥¯¥ê¥×¥È¤È¸Æ¤Ð¤ì¤Þ¤¹¡£CGI ¤Ï¡¢¥¦¥§¥Ö¥µ¥¤¥È¤ËưŪ¤Ê
- ¥³¥ó¥Æ¥ó¥Ä¤òÃÖ¤¯¤¿¤á¤ÎºÇ¤â´Êñ¤Ç°ìÈÌŪ¤ÊÊýË¡¤Ç¤¹¡£¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ï¡¢
- Apache ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ç CGI ¤òÀßÄꤷ¡¢
- CGI ¥×¥í¥°¥é¥à¤ò½ñ¤­»Ï¤á¤ë¤¿¤á¤ÎÆþÌç½ñ¤È¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">CGI ¤òµö²Ä¤¹¤ë¤è¤¦¤Ë Apache ¤òÀßÄꤹ¤ë</a></h2>
-
-
- <p>CGI ¥×¥í¥°¥é¥à¤òÀµ¤·¤¯Æ°ºî¤µ¤»¤ë¤Ë¤Ï¡¢CGI ¤òµö²Ä¤¹¤ë¤è¤¦¤Ë
- Apache ¤ÎÀßÄê¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤ò¹Ô¤Ê¤¦¤¿¤á¤ÎÊýË¡¤¬¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£</p>
-
- <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
-
-
- <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¡¢
- CGI ¥×¥í¥°¥é¥àÍѤÎÆÃÊ̤ÊÊ̥ǥ£¥ì¥¯¥È¥ê¤ò Apache ¤ËÀßÄꤷ¤Þ¤¹¡£
- Apache ¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥È¥êÃæ¤ÎÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò CGI
- ¥×¥í¥°¥é¥à¤Ç¤¢¤ë¤È²¾Äꤷ¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¤³¤ÎÆÃÊ̤ʥ꥽¡¼¥¹¤¬¥¯¥é¥¤¥¢¥ó¥È¤«¤éÍ׵ᤵ¤ì¤ë¤È¡¢
- ¤½¤Î¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤ò»î¤ß¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï°Ê²¼¤Î¤è¤¦¤Ë»ÈÍѤ·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </code></p></div>
-
- <p>¥Ç¥Õ¥©¥ë¥È°ÌÃÖ¤Ë Apache ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¤Ê¤é¤Ð¡¢
- ¤³¤ÎÎã¤Ï¥Ç¥Õ¥©¥ë¥È¾õÂ֤Π<code>httpd.conf</code>
- ÀßÄê¥Õ¥¡¥¤¥ë¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢URL ¤ÎÁ°¤ËÉղ乤ë¥Ç¥£¥ì¥¯¥È¥ê¤òÄêµÁ¤¹¤ë
- <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤«¤Ê¤ê»÷¤Æ¤¤¤Þ¤¹¡£
- <code class="directive">Alias</code> ¤È <code class="directive">ScriptAlias</code>
- ¤ÏÄ̾<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¥Ç¥£¥ì¥¯¥È¥ê³°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
- <code class="directive">Alias</code> ¤È <code class="directive">ScriptAlias</code>
- ¤È¤Îº¹¤Ï¡¢<code class="directive">ScriptAlias</code> ¤¬ÀÜƬ¼­¤Ç»Ï¤Þ¤ë¤¹¤Ù¤Æ¤Î
- URL ¤Ï CGI ¥×¥í¥°¥é¥à¤È¤ß¤Ê¤µ¤ì¤ë¤È¤¤¤¦ÄɲäΰÕÌ£¤ò´Þ¤ó¤Ç¤¤¤ë¤³¤È¤Ç¤¹¡£
- ½¾¤Ã¤Æ¡¢¾åµ­¤ÎÎã¤Ç¤Ï¡¢<code>/cgi-bin/</code>
- ¤Ç»Ï¤Þ¤ë¥ê¥½¡¼¥¹¤Ø¤Î¤¢¤é¤æ¤ë¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¡¢¥Ç¥£¥ì¥¯¥È¥ê
- <code>/usr/local/apache2/cgi-bin/</code> ¤«¤éÄ󶡤·¡¢¤½¤ì¤é¤ò
- CGI ¥×¥í¥°¥é¥à¤È¤·¤Æ°·¤¦¤è¤¦ Apache ¤Ë¼¨¤·¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢URL <code>http://dev.rcbowen.com/cgi-bin/test.pl</code>
- ¤¬Í׵ᤵ¤ì¤¿¾ì¹ç¡¢Apache ¤Ï ¥Õ¥¡¥¤¥ë
- <code>/usr/local/apache2/cgi-bin/test.pl</code>
- ¤ò¼Â¹Ô¤·¡¢¤½¤Î½ÐÎϤòÊÖ¤¹¤³¤È¤ò»î¤ß¤Þ¤¹¡£
- ¤â¤Á¤í¤ó¡¢¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¡¢¼Â¹Ô²Äǽ¤Ç¤¢¤ê¡¢·è¤á¤é¤ì¤¿ÊýË¡¤Ç½ÐÎϤòÊÖ¤·¤Þ¤¹¡£
- ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢Apache ¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òÊÖ¤·¤Þ¤¹¡£</p>
-
-
- <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias ¥Ç¥£¥ì¥¯¥È¥ê³°¤Î CGI</a></h3>
-
-
- <p>CGI ¥×¥í¥°¥é¥à¤Ï¡¢¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤«¤é
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- ¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ËÀ©¸Â¤µ¤ì¤ë¤³¤È¤¬¤·¤Ð¤·¤Ð¤¢¤ê¤Þ¤¹¡£¤³¤ÎÊýË¡¤Ë¤è¤ê¡¢
- CGI ¥×¥í¥°¥é¥à¤ò»ÈÍѤǤ­¤ë¥æ¡¼¥¶¤ò´ÉÍý¼Ô¤¬¸·¤·¤¯À©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢Å¬Àڤʥ»¥­¥å¥ê¥Æ¥£»öÁ°Âкö¤¬¤È¤é¤ì¤ë¤Ê¤é¤Ð¡¢CGI
- ¥×¥í¥°¥é¥à¤òǤ°Õ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç¼Â¹Ô¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤¹¤ëÍýͳ¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- Î㤨¤Ð¡¢¥æ¡¼¥¶¤Ë <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÈà¤é¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥êÇÛ²¼¤Ë¥¦¥§¥Ö¥³¥ó¥Æ¥ó¥Ä¤ò»ý¤¿¤»¤¿¤¤¤È¤·¤Þ¤¹¡£
- ¤â¤·¡¢Èà¤é¤¬ CGI ¥×¥í¥°¥é¥à¤ò»ý¤Ä¤³¤È¤ò˾¤ó¤Ç¤¤¤Æ¤â¡¢¥á¥¤¥ó¤Î
- <code>cgi-bin</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¢¥¯¥»¥¹¤¬¤Ç¤­¤Ê¤¤¾ì¹ç¡¢
- CGI ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¾¤Î¾ì½ê¤¬É¬Íפˤʤê¤Þ¤¹¡£</p>
-
- <p>Ǥ°Õ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç CGI ¤Î¼Â¹Ô¤òµö²Ä¤¹¤ë¤Ë¤ÏÆóÃʳ¬¤ÎÀßÄ꤬ɬÍפǤ¹¡£
- ¤Þ¤º¡¢<code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ¤ä <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤Æ
- <code>cgi-script</code> ¥Ï¥ó¥É¥é¤¬²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¼¡¤Ë¡¢<code class="directive"><a href="../mod/core.html#options">Options</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- <code>ExecCGI</code> ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
-
- <h3><a name="options" id="options">CGI ¤Î¼Â¹Ô¤ò²Äǽ¤Ë¤¹¤ë¤¿¤á¤Ë Options ¤òÌÀ¼¨Åª¤Ë»ÈÍѤ¹¤ë</a></h3>
-
-
- <p>¥µ¡¼¥Ð¤Î¥á¥¤¥ó¤ÎÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÌÀ¼¨Åª¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥êÇÛ²¼¤Ç
- CGI ¤Î¼Â¹Ô¤òµö²Ä¤¹¤ë¤è¤¦¤Ë»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
- <span class="indent">
- Options +ExecCGI<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¾åµ­¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢CGI ¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô¤ò²Äǽ¤Ë¤¹¤ë¤è¤¦
- Apache ¤ËÅÁ¤¨¤Þ¤¹¡£¤Þ¤¿¡¢¤É¤Î¥Õ¥¡¥¤¥ë¤¬ CGI ¥Õ¥¡¥¤¥ë¤«¤ò
- ¥µ¡¼¥Ð¤ËÅÁ¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¼¡¤Î
- <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÎã¤Ç¤Ï¡¢<code>cgi</code> ¤Þ¤¿¤Ï <code>pl</code>
- ¤ò³ÈÄ¥»Ò¤Ë»ý¤Ä¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò CGI
- ¥×¥í¥°¥é¥à¤È¤·¤Æ¤ß¤Ê¤¹¤³¤È¤ò¥µ¡¼¥Ð¤ËÅÁ¤¨¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- AddHandler cgi-script .cgi .pl
- </code></p></div>
-
-
- <h3><a name="htaccess" id="htaccess">.htaccess files</a></h3>
-
-
- <p><a href="htaccess.html"><code>.htaccess</code> ¥Á¥å¡¼¥È¥ê¥¢¥ë</a>
- ¤Ï <code>httpd.conf</code> ¤òÊѹ¹¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë¤É¤¦¤ä¤Ã¤Æ CGI ¥×¥í¥°¥é¥à¤ò
- »È¤¨¤ë¤è¤¦¤Ë¤¹¤ë¤«¤òÀâÌÀ¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
-
- <h3><a name="userdir" id="userdir">User ¥Ç¥£¥ì¥¯¥È¥ê</a></h3>
-
-
- <p><code>.cgi</code> ¤Ç½ª¤ï¤ë¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ CGI ¥×¥í¥°¥é¥à¤Î
- ¼Â¹Ô¤òµö²Ä¤¹¤ë¤Ë¤Ï¡¢°Ê²¼¤ÎÀßÄê¤ò»ÈÍѤǤ­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html&gt;<br />
- <span class="indent">
- Options +ExecCGI<br />
- AddHandler cgi-script .cgi<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>cgi-bin</code> ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Î
- ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò CGI ¥×¥í¥°¥é¥à¤È¤·¤Æ»ØÄꤷ¤¿¤¤¾ì¹ç¤Ë¤Ï
- °Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤ò»È¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
- <span class="indent">
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writing" id="writing">CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¯</a></h2>
-
-
- <p>¡ÖÄ̾ï¤Î¡×¥×¥í¥°¥é¥ß¥ó¥°¤È CGI
- ¥×¥í¥°¥é¥ß¥ó¥°¤Î´Ö¤Ë¤Ï¼ç¤ËÆó¤Ä¤Î°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>°ì¤Ä¤Ï¡¢CGI ¥×¥í¥°¥é¥à¤Î¤¹¤Ù¤Æ¤Î½ÐÎÏ¤Ë¤Ï MIME-type
- ¥Ø¥Ã¥À¤òÉÕ¤±¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤ì¤Ï¤É¤Î¤è¤¦¤Ê¼ïÎà¤Î¥³¥ó¥Æ¥ó¥Ä¤ò¼õ¤±¼è¤Ã¤Æ¤¤¤ë¤«¤ò¥¯¥é¥¤¥¢¥ó¥È¤Ë¼¨¤¹
- HTTP ¥Ø¥Ã¥À¤Ç¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤Ç¤Ï¡¢¼¡¤Î¤è¤¦¤Ë½ÐÎϤ·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Content-type: text/html
- </code></p></div>
-
- <p>¤â¤¦°ì¤Ä¤Ï¡¢½ÐÎϤò HTML
- ¤«¡¢¥Ö¥é¥¦¥¶¤¬É½¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë²¿¤«Â¾¤Î·Á¼°¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ÂçÄñ¤Î¾ì¹ç¤Ï HTML ¤Ç¤·¤ç¤¦¤¬¡¢GIF ¥¤¥á¡¼¥¸¤ä¾¤ÎÈó HTML
- ¥³¥ó¥Æ¥ó¥Ä¤ò½ÐÎϤ¹¤ë CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¯¤³¤È¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¤³¤ì¤éÆóÅÀ°Ê³°¤Ç¤Ï¡¢CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¯¤³¤È¤Ï¡¢
- ¤¢¤Ê¤¿¤¬½ñ¤¤¤Æ¤¤¤ë¾¤Î¥×¥í¥°¥é¥à¤È¤è¤¯»÷¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <h3><a name="firstcgi" id="firstcgi">ºÇ½é¤Î CGI ¥×¥í¥°¥é¥à</a></h3>
-
-
- <p>¼¡¤Ë¼¨¤¹¤Î¤Ï¡¢¥Ö¥é¥¦¥¶¤Ë 1 ¹Ô°õ»ú¤¹¤ë CGI
- ¥×¥í¥°¥é¥à¤ÎÎã¤Ç¤¹¡£°Ê²¼¤òÆþÎϤ·¡¢<code>first.pl</code>
- ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¡¢¤½¤ì¤ò <code>cgi-bin</code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
- </code></p></div>
-
- <p>Perl ¤ËÀºÄ̤·¤Æ¤¤¤Ê¤¯¤Æ¤â¡¢
- ²¿¤¬µ¯¤³¤ë¤«¤òÍý²ò¤¹¤ë¤³¤È¤Ï¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£1 ¹ÔÌܤϡ¢
- <code>/usr/bin/perl</code> ¤Ç¸«¤Ä¤±¤é¤ì¤ë¥¤¥ó¥¿¥×¥ê¥¿¤Ë
- ¤³¤Î¥Õ¥¡¥¤¥ë¤ò¶¡µë¤¹¤ë¤³¤È¤Ç¤³¤Î¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤µ¤ì¤ë¤³¤È¤ò
- Apache ¤Ë (¥·¥§¥ë¾å¤Ç¼Â¹Ô¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤Ê¤é¤Ð¡¢¤½¤Î¥·¥§¥ë¤Ë )
- ¼¨¤·¤Þ¤¹¡£2 ¹ÔÌܤϡ¢Á°½Ò¤·¤¿¤È¤ª¤ê content-type ¤ÎÄêµÁ¤ò°õ»ú¤·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤ÏÉüµ¢²þ¹Ô¤ÎÆó¤Ä¤ÎÁȤò¸å¤ËÉղä·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥Ø¥Ã¥À¤Î½ª¤ê¤Ë¶õ¹Ô¤¬ÃÖ¤«¤ì¡¢HTTP
- ¥Ø¥Ã¥À¤Î½ª¤ê¤È¥Ü¥Ç¥£¤Î»Ï¤Þ¤ê¤ò¼¨¤·¤Þ¤¹¡£3 ¹ÔÌܤϡ¢"Hello, World."
- ¤È¤¤¤¦Ê¸»úÎó¤ò°õ»ú¤·¡¢¤³¤ì¤Ç½ª¤ê¤È¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¹¥¤ß¤Î¥Ö¥é¥¦¥¶¤ò³«¤­¡¢¥¢¥É¥ì¥¹</p>
-
- <div class="example"><p><code>
- http://www.example.com/cgi-bin/first.pl
- </code></p></div>
-
- <p>¤¢¤ë¤¤¤Ï¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤¿¥í¥±¡¼¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¡¢
- <code>Hello, World.</code>
- ¤È¤¤¤¦ 1 ¹Ô¤¬¥Ö¥é¥¦¥¶¥¦¥£¥ó¥É¤Ë¸½¤ì¤ë¤Ç¤·¤ç¤¦¡£
- ¤½¤ì¤Ï¤¢¤Þ¤ê¥¨¥­¥µ¥¤¥Æ¥£¥ó¥°¤Ê¤³¤È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤·¤«¤·¡¢¤³¤ì¤¬¤¦¤Þ¤¯Æ°¤±¤Ð¡¢
- ¾¤Î¤É¤Î¤è¤¦¤Ê¤â¤Î¤Ç¤âÆ°¤«¤¹¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">¤·¤«¤·¡¢¤Þ¤ÀÆ°¤«¤Ê¤¤ !</a></h2>
-
-
- <p>¥¦¥§¥Ö¤«¤é CGI ¥×¥í¥°¥é¥à¤Ø¤Î¥¢¥¯¥»¥¹¤ò¹Ô¤Ê¤Ã¤¿¤È¤­¡¢
- ¥Ö¥é¥¦¥¶¤Ç¸«¤ë²ÄǽÀ­¤¬¤¢¤ë»Í¤Ä¤Î´ðËÜŪ¤Ê¤³¤È¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <dl>
- <dt>CGI ¥×¥í¥°¥é¥à¤Î½ÐÎÏ</dt>
- <dd>ÁÇÀ²¤é¤·¤¤ ! ¤½¤ì¤Ï¤¹¤Ù¤Æ¤¬¤¦¤Þ¤¯Æ°¤¤¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- ½ÐÎϤ¬Àµ¾ï¤À¤±¤ì¤É¤â¡¢¥Ö¥é¥¦¥¶¤¬Àµ¾ï¤Ë½èÍý¤·¤Æ¤¯¤ì¤Ê¤¤¾ì¹ç¤Ï¡¢
- Àµ¤·¤¤ <code>Content-Type</code> ¤ò CGI ¥×¥í¥°¥é¥àÆâ¤Ç
- ¥»¥Ã¥È¤·¤¿¤«¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£</dd>
-
- <dt>CGI ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹¥³¡¼¥É¡¢¤Þ¤¿¤Ï "POST Method Not Allowed"
- ¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸</dt>
- <dd>¤³¤ì¤Ï¡¢CGI ¥×¥í¥°¥é¥à¤ò½èÍý¤Ç¤­¤ë¤è¤¦ Apache
- ¤òŬÀÚ¤ËÀßÄꤷ¤Æ¤¤¤Ê¤«¤Ã¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£<a href="#configuring">¡ÖCGI ¤òµö²Ä¤¹¤ë¤è¤¦¤Ë
- Apache ¤òÀßÄꤹ¤ë¡×</a>¤Î¾Ï¤òÆɤßľ¤·¡¢
- ¤¢¤Ê¤¿¤¬²¿¤ò´Ö°ã¤¨¤¿¤«¤òõ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
- </dd>
-
- <dt>¥á¥Ã¥»¡¼¥¸¤¬ "Forbidden" ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤ë</dt>
- <dd>¤³¤ì¤Ï¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ÎÌäÂê¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- <a href="#errorlogs">Apache ¤Î¥¨¥é¡¼¥í¥°</a>¤È¡¢¸å½Ò¤Î<a href="#filepermissions">¡Ö¥Õ¥¡¥¤¥ë¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¡×</a>
- ¤Î¾Ï¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
- </dd>
-
- <dt>"Internal Server Error" ¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸</dt>
- <dd><a href="#errorlogs">Apache
- ¤Î¥¨¥é¡¼¥í¥°</a>¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤È¡¢"Premature end of script headers"
- ¤È¤¤¤¦¥í¥°¤¬µ­Ï¿¤µ¤ì¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¡£¤½¤·¤Æ¡¢¤ª¤½¤é¤¯ CGI
- ¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤¿¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤âµ­Ï¿¤µ¤ì¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£
- ¤³¤Î¾ì¹ç¡¢CGI ¥×¥í¥°¥é¥à¤¬Å¬ÀÚ¤Ê
- HTTP ¥Ø¥Ã¥À¤ò½ÐÎϤǤ­¤Ê¤¤¸¶°ø¤òÃΤ뤿¤á¤Ë¡¢
- °Ê²¼¤Î³Æ¾Ï¤Ç¥Á¥§¥Ã¥¯¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£</dd>
- </dl>
-
- <h3><a name="permissions" id="permissions">¥Õ¥¡¥¤¥ë¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó</a></h3>
-
-
- <p>¥µ¡¼¥Ð¤Ï¤¢¤Ê¤¿¤Î¸¢¸Â¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤ò˺¤ì¤Ê¤¤¤è¤¦¤Ë¡£
- ¤Ä¤Þ¤ê¡¢µ¯Æ°¤¹¤ë¤È¤­¡¢¥µ¡¼¥Ð¤ÏÆø¢¤ò¤â¤¿¤Ê¤¤¥æ¡¼¥¶ - Ä̾ï <code>nobody</code>
- ¤ä <code>www</code> ¤Î¸¢¸Â¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£¤·¤¿¤¬¤Ã¤Æ¡¢¤¢¤Ê¤¿¤¬½êÍ­¤¹¤ë
- ¥Õ¥¡¥¤¥ë¤ò¼Â¹Ô¤¹¤ë¤Ë¤ÏÊ̤Υѡ¼¥ß¥Ã¥·¥ç¥ó¤¬É¬ÍפȤʤê¤Þ¤¹¡£
- Ä̾<code>nobody</code> ¤¬¼Â¹Ô¤¹¤ë¤Î¤Ë½½Ê¬¤Ê¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÍ¿¤¨¤ëÊýË¡¤Ï¡¢
- ¥Õ¥¡¥¤¥ë¤Ëï¤Ç¤â¼Â¹Ô²Äǽ¤È¤¹¤ë¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÍ¿¤¨¤ë¤³¤È¤Ç¤¹:</p>
-
- <div class="example"><p><code>
- chmod a+x first.pl
- </code></p></div>
-
- <p>¤Þ¤¿¡¢¤â¤·¤¢¤Ê¤¿¤Î¥×¥í¥°¥é¥à¤¬Â¾¤Î¥Õ¥¡¥¤¥ë¤òÆɤ߽ñ¤­¤¹¤ë¤Ê¤é¤Ð¡¢
- ¤½¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Ï¡¢¤³¤ì¤¬²Äǽ¤È¤Ê¤ëÀµ¤·¤¤¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó
- ¤ò»ý¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-
-
- <h3><a name="pathinformation" id="pathinformation">¥Ñ¥¹¾ðÊó¤È´Ä¶­</a></h3>
-
-
- <p>¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤È¤­¡¢
- °Õ¼±¤·¤Ê¤¯¤Æ¤â¥·¥§¥ë¤ËÅϤµ¤ì¤ë¾ðÊ󤬤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð¡¢»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Ë¤É¤³¤ò¸¡º÷¤·¤¿¤é¤è¤¤¤«¤ò
- ¥·¥§¥ë¤ËÅÁ¤¨¤ë <code>PATH</code> ¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥×¥í¥°¥é¥à¤¬ CGI ¥×¥í¥°¥é¥à¤È¤·¤Æ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ¼Â¹Ô¤µ¤ì¤ë¤È¤­¡¢
- ¤½¤ì¤ÏƱ¤¸ <code>PATH</code> ¤Ç¤Ï¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- CGI ¥×¥í¥°¥é¥àÆâ¤Ç¸Æ¤Ó½Ð¤¹¤¢¤é¤æ¤ë¥×¥í¥°¥é¥à
- (Î㤨¤Ð¡¢<code>sendmail</code> ¤Î¤è¤¦¤Ê¤â¤Î) ¤Ï¡¢
- ¥Õ¥ë¥Ñ¥¹¤Ç»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£¤½¤ì¤Ë¤è¤ê¡¢CGI
- ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¤È¤­¡¢
- ¥·¥§¥ë¤Ï¤½¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥à¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>ƱÍͤʤ³¤È¤Ï¡¢¥¹¥¯¥ê¥×¥È¤Î¥¤¥ó¥¿¥×¥ê¥¿ (¤·¤Ð¤·¤Ð <code>perl</code>)
- ¤Ø¤Î¥Ñ¥¹¤Ç¡¢CGI ¥×¥í¥°¥é¥à¤Î 1 ¹ÔÌܤ˼¡¤Î¤è¤¦¤Ë¼¨¤µ¤ì¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl
- </code></p></div>
-
- <p>¤³¤ì¤¬¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ø¤Î¼ÂºÝ¤Î¥Ñ¥¹¤Ç¤¢¤ë¤³¤È¤ò³Î¼Â¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="syntaxerrors" id="syntaxerrors">¥×¥í¥°¥é¥à¥¨¥é¡¼</a></h3>
-
-
- <p>CGI
- ¥×¥í¥°¥é¥à¤¬¼ºÇÔ¤¹¤ë¤Î¤ÏÂçÄñ¡¢¥×¥í¥°¥é¥à¼«¿È¤ËÌäÂ꤬¤¢¤ë¾ì¹ç¤Ç¤¹¡£
- °ìÅÙ CGI ¤Î»È¤¤Êý¤òÍý²ò¤·¡¢Á°½Ò¤ÎÆó¤Ä¤Î¸í¤ê¤òÈȤ·¤Æ¤¤¤Ê¤¤¤Ê¤é¤Ð¡¢
- ¤Þ¤º´Ö°ã¤¤¤Ê¤¯¤½¤¦¤Ç¤·¤ç¤¦¡£¥Ö¥é¥¦¥¶¤ò»È¤Ã¤Æ¥Æ¥¹¥È¤¹¤ëÁ°¤Ë
- ¤Þ¤º³Îǧ¤¹¤ë¤³¤È¤Ï¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤Ç¤­¤ë¤³¤È¤Ç¤¹¡£
- Î㤨¤Ð¡¢°Ê²¼¤ò¼Â¹Ô¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤:</p>
-
- <div class="example"><p><code>
- cd /usr/local/apache2/cgi-bin<br />
- ./first.pl
- </code></p></div>
-
- <p>(<code>perl</code> ¥¤¥ó¥¿¥×¥ê¥¿¤Ï¸Æ¤Ð¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- ¥·¥§¥ë¤È Apache ¤¬¥¹¥¯¥ê¥×¥È¤ÎºÇ½é¤Î¹Ô¤Î <a href="#pathinformation">¥Ñ¥¹¾ðÊó</a> ¤ò»È¤Ã¤Æ¸«¤Ä¤±¤Þ¤¹¡£)</p>
-
- <p>ºÇ½é¤Ë¥×¥í¥°¥é¥à¤«¤é½ÐÎϤµ¤ì¤ë¤Î¤Ï <code>Content-Type</code> ¤ò´Þ¤ß¡¢
- ¸å¤Ë¶õ¹Ô¤Î³¤¯ HTTP ¥Ø¥Ã¥À¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Â¾¤Î¤â¤Î¤¬½ÐÎϤµ¤ì¤Æ¤¤¤ë
- ¾ì¹ç¤Ï¡¢Apache ¤Ï¤³¤Î¥×¥í¥°¥é¥à¤ò¥µ¡¼¥Ð·Ðͳ¤Ç¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ë¤Ï
- <code>Premature end of script headers</code> ¥¨¥é¡¼¤ò½ÐÎϤ·¤Þ¤¹¡£¾ÜºÙ¤Ï
- ¾åµ­¤Î <a href="#writing">CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¯</a> ¤òÆɤó¤Ç¤¯¤À¤µ¤¤¡£</p>
-
-
- <h3><a name="errorlogs" id="errorlogs">¥¨¥é¡¼¥í¥°</a></h3>
-
-
- <p>¥¨¥é¡¼¥í¥°¤Ïͧã¤Ç¤¹¡£
- Á´¤Æ¤Î¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¤³¤È¤Ï¡¢¥¨¥é¡¼¥í¥°¤Ë¥á¥Ã¥»¡¼¥¸¤òÀ¸À®¤·¤Þ¤¹¡£
- ɬ¤º¤½¤ì¤òºÇ½é¤Ë¸«¤ë¤Ù¤­¤Ç¤¹¡£
- ¤â¤·¡¢¤¢¤Ê¤¿¤¬¥¦¥§¥Ö¥µ¥¤¥È¤ò¼çºÅ¤·¤Æ¤¤¤ë¾ì½ê¤¬
- ¥¨¥é¡¼¥í¥°¤Î»²¾È¤òµö¤·¤Æ¤¤¤Ê¤¤¤Ê¤é¤Ð¡¢¤­¤Ã¤È¾¤Î¥µ¥¤¥È¤Ç¼çºÅ¤¹¤ë¤Ù¤­¤Ç¤¹¡£
- ¥¨¥é¡¼¥í¥°¤ÎÆɤßÊý¤ò³Ø¤Ö¤³¤È¤Ç¡¢¤Û¤È¤ó¤ÉÁ´¤Æ¤ÎÌäÂ꤬¿×®¤Ë³Îǧ¤µ¤ì¡¢
- ¿×®¤Ë²ò·è¤µ¤ì¤ë¤È¤¤¤¦¤³¤È¤¬Ê¬¤«¤ë¤Ç¤·¤ç¤¦¡£</p>
-
-
- <h3><a name="suexec" id="suexec">Suexec</a></h3>
-
-
- <p><a href="../suexec.html">suexec</a> ¥µ¥Ý¡¼¥È¥×¥í¥°¥é¥à¤Ï
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ä¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î¾ì½ê¤Ë°Í¤Ã¤Æ
- CGI ¥×¥í¥°¥é¥à¤ò°ã¤¦¥æ¡¼¥¶¸¢¸Â¤Î²¼¤ÇÁö¤é¤»¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£
- Suexec ¤Î¸¢¸Â¤Î¥Á¥§¥Ã¥¯¤ÏÈó¾ï¤Ë¸·¤·¤¯¡¢¤½¤ì¤òËþ¤¿¤µ¤Ê¤¤¾ì¹ç¤Ï
- CGI ¥×¥í¥°¥é¥à¤¬ <code>Premature end of script headers</code> ¥¨¥é¡¼¤Ç
- ¼Â¹Ô¤µ¤ì¤Þ¤»¤ó¡£</p>
-
- <p>suexec ¤ò»È¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤¿¤á¤Ë¤Ï <code>apachectl
- -V</code> ¤ò¼Â¹Ô¤·¤Æ¡¢<code>SUEXEC_BIN</code> ¤Î¾ì½ê¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£
- Apache ¤¬¤½¤³¤Ë suexec ¤Î¥Ð¥¤¥Ê¥ê¤òȯ¸«¤·¤¿¾ì¹ç¤Ï¡¢suexec ¤¬
- »ÈÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <p>suexec ¤ò´°Á´¤ËÍý²ò¤·¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢»È¤¦¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- suexec ¤ò̵¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢<code>SUEXEC_BIN</code> ¤«¤é»Ø¤µ¤ì¤Æ¤¤¤ë
- <code>suexec</code> ¥Ð¥¤¥Ê¥ê¤òºï½ü (¤«Ì¾Á°¤òÊѹ¹) ¤¹¤ë¤À¤±¤Ç¤¹¡£
- <a href="../suexec.html">suexec</a> ¤òÆɤó¤À¸å¤Ç¡¢¤Þ¤À¤½¤ì¤ò
- »È¤¤¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢<code>suexec -V</code> ¤ò¼Â¹Ô¤·¤Æ suexec ¤Î
- ¥í¥°¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤òÄ´¤Ù¡¢¤½¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¥Ý¥ê¥·¡¼°ãÈ¿¤ò
- ¸«¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behindscenes" id="behindscenes">΢¤Ç²¿¤¬µ¯¤³¤Ã¤Æ¤¤¤ë¤Î¤«?</a></h2>
-
-
- <p>CGI ¥×¥í¥°¥é¥ß¥ó¥°¤Ë½¬½Ï¤¹¤ë¤È¡¢
- ΢¤Çµ¯¤³¤Ã¤Æ¤¤¤ë¤³¤È¤Ë¤Ä¤¤¤Æ¹¹¤ËÍý²ò¤¹¤ë¤³¤ÈÌò¤ËΩ¤Á¤Þ¤¹¡£
- ¥Ö¥é¥¦¥¶¤È¥µ¡¼¥Ð¤¬¤É¤Î¤è¤¦¤ËÁê¸ßÄÌ¿®¤¹¤ë¤«¤Ë¤Ä¤¤¤Æ¤ÏÆäˤ½¤¦¤Ç¤¹¡£
- ¤Ê¤¼¤Ê¤é¡¢"Hello, World."
- ¤ò°õ»ú¤¹¤ë¥×¥í¥°¥é¥à¤ò½ñ¤¯¤³¤È¤Ï¤ª¤ª¤¤¤Ë·ë¹½¤Ç¤¹¤¬¡¢
- ¤½¤ì¤ÏÆäËÍ­±×¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <h3><a name="env" id="env">´Ä¶­ÊÑ¿ô</a></h3>
-
-
- <p>´Ä¶­ÊÑ¿ô¤Ï¡¢
- ¤¢¤Ê¤¿¤¬¥³¥ó¥Ô¥å¡¼¥¿¤ò»È¤¦¤È¤­¤ËÊÕ¤ê¤Ë¸ºß¤·¤Æ¤¤¤ëÃͤǤ¹¡£
- ¤½¤ì¤é¤Ï¡¢¥Ñ¥¹
- (¥³¥Þ¥ó¥É¤ò¥¿¥¤¥×¤·¤¿¤È¤­¤Ë¼Â¹Ô¤¹¤ë¼ÂºÝ¤Î¥Õ¥¡¥¤¥ë¤òõ¤·½Ð¤¹¤È¤³¤í)¡¢
- ¥æ¡¼¥¶Ì¾¡¢Ã¼Ëö·¿¤Ê¤É¤Î¤è¤¦¤ÊÊØÍø¤Ê¤â¤Î¤Ç¤¹¡£
- Ä̾ÉáÃÊ»ÈÍѤ·¤Æ¤¤¤ë´Ä¶­ÊÑ¿ô¤Î´°Á´¤Ê¥ê¥¹¥È¤òÄ´¤Ù¤ë¤Ë¤Ï¡¢
- ¥³¥Þ¥ó¥É¥×¥í¥ó¥×¥È¤Ç <code>env</code> ¤òÆþÎϤ·¤Þ¤¹¡£</p>
-
- <p>CGI ¤Î½èÍýÃæ¡¢¥µ¡¼¥Ð¤È¥Ö¥é¥¦¥¶¤â´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¡¢
- ¤½¤ì¤Ë¤è¤êÁê¸ß¤ËÄÌ¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤½¤Î´Ä¶­ÊÑ¿ô¤Ï¡¢¥Ö¥é¥¦¥¶¥¿¥¤¥× (Netscape, IE, Lynx)¡¢¥µ¡¼¥Ð¥¿¥¤¥×
- (Apache, IIS, WebSite)¡¢¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë CGI
- ¥×¥í¥°¥é¥à¤Î̾Á°¤Ê¤É¤Ç¤¹¡£</p>
-
- <p>¤³¤ì¤é¤ÎÊÑ¿ô¤Ï CGI ¥×¥í¥°¥é¥Þ¤¬»ÈÍѤǤ­¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¤½¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤ÎÄÌ¿®¤ÎÏäÎȾʬ¤Ç¤¹¡£
- ɬÍפÊÊÑ¿ô¤Î´°Á´¤Ê¥ê¥¹¥È¤Ï <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> ¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>°Ê²¼¤Îñ½ã¤Ê Perl CGI
- ¥×¥í¥°¥é¥à¤Ï¡¢ÅϤµ¤ì¤ëÁ´¤Æ¤Î´Ä¶­ÊÑ¿ô¤òɽ¼¨¤·¤Þ¤¹¡£Æ±ÍÍ¤Î¥×¥í¥°¥é¥à¤Ï¡¢
- Apache ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Î <code>cgi-bin</code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤ËÆó¤Ä´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤¤¤¯¤Ä¤«¤ÎÊÑ¿ô¤¬É¬¿Ü¤Ç¤¢¤ê¡¢¤¤¤¯¤Ä¤«¤ÏǤ°Õ¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤·¤Æ¡¢¸ø¼°¤Î¥ê¥¹¥È¤Ë¤Ï¤Ê¤¤¤¤¤¯¤Ä¤«¤ÎÊÑ¿ô¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤µ¤é¤Ë¡¢Apache ¤Ï¥Ç¥Õ¥©¥ë¥È¤ÇÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë´ðËÜŪ¤Ê¤â¤Î¤Ë
- <a href="../env.html">¤¢¤Ê¤¿¼«¿È¤Î´Ä¶­ÊÑ¿ô¤ò²Ã¤¨¤ë</a>¤¿¤á¤Î¡¢
- ¿¤¯¤Î°Û¤Ê¤ëÊýË¡¤òÍÑ°Õ¤·¤Æ¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <span class="indent">
- print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
- </span>
- }
- </code></p></div>
-
-
- <h3><a name="stdin" id="stdin">STDIN ¤È STDOUT</a></h3>
-
-
- <p>¥µ¡¼¥Ð¤È¥¯¥é¥¤¥¢¥ó¥È´Ö¤Î¤â¤¦°ì¤Ä¤ÎÄÌ¿®¤Ï¡¢É¸½àÆþÎÏ
- (<code>STDIN</code>)¤Èɸ½à½ÐÎÏ (<code>STDOUT</code>)
- ¤òÄ̤¸¤Æ¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£Ä̾ï¤Îʸ̮¤Ë¤ª¤¤¤Æ¡¢<code>STDIN</code>
- ¤Ï¥­¡¼¥Ü¡¼¥É¤ä¥×¥í¥°¥é¥à¤¬Æ°ºî¤¹¤ë¤¿¤á¤ËÍ¿¤¨¤é¤ì¤ë¥Õ¥¡¥¤¥ë¤ò°ÕÌ£¤·¡¢
- <code>STDOUT</code> ¤ÏÄ̾拾¥ó¥½¡¼¥ë¤Þ¤¿¤Ï¥¹¥¯¥ê¡¼¥ó¤ò°ÕÌ£¤·¤Þ¤¹¡£</p>
-
- <p>¥¦¥§¥Ö¥Õ¥©¡¼¥à¤«¤é CGI ¥×¥í¥°¥é¥à¤Ø<code>POST</code>
- ¤·¤¿¤È¤­¡¢¥Õ¥©¡¼¥à¤Î¥Ç¡¼¥¿¤ÏÆÃÊ̤ʥե©¡¼¥Þ¥Ã¥È¤Ç«¤Í¤é¤ì¡¢
- <code>STDIN</code> ¤òÄ̤·¤Æ¡¢CGI ¥×¥í¥°¥é¥à¤Ë°ú¤­ÅϤµ¤ì¤Þ¤¹¡£
- ¥×¥í¥°¥é¥à¤Ï¥Ç¡¼¥¿¤¬¥­¡¼¥Ü¡¼¥É
- ¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¤«¤éÍè¤Æ¤¤¤¿¤«¤Î¤è¤¦¤Ë½èÍý¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¡ÖÆÃÊ̤ʥե©¡¼¥Þ¥Ã¥È¡×¤Ï¤È¤Æ¤âñ½ã¤Ç¤¹¡£¥Õ¥£¡¼¥ë¥É̾¤ÈÃͤϥ¤¥³¡¼¥ë
- (=) ¤Ç·ë¤Ð¤ì¤Þ¤¹¡£¤½¤·¤ÆÃͤÎÁȤϥ¢¥ó¥Ñ¥µ¥ó¥É (&amp;) ¤Ç·ë¤Ð¤ì¤Þ¤¹¡£
- ¥¹¥Ú¡¼¥¹¡¢¥¢¥ó¥Ñ¥µ¥ó¥É¡¢¥¤¥³¡¼¥ë¤Î¤è¤¦¤ÊÌÌÅݤÊʸ»ú¤Ï¡¢
- ¤½¤ì¤é¤¬Æ°ºî¤òÂÌÌܤˤ·¤Ê¤¤¤è¤¦¤Ë¤½¤Îʸ»ú¤ËÁêÅö¤¹¤ë 16 ¿Ê¤ËÊÑ´¹¤µ¤ì¤Þ¤¹¡£
- Á´¥Ç¡¼¥¿Ê¸»úÎó¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹:
- </p>
-
- <div class="example"><p><code>
- name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
- </code></p></div>
-
- <p>»þ¡¹¡¢¤³¤Î¤è¤¦¤Êʸ»úÎó¤¬ URL
- ¤ËÉղ䵤ì¤ë¤Î¤ò¸«¤ë¤Ç¤·¤ç¤¦¡£¤½¤Î¾ì¹ç¡¢¥µ¡¼¥Ð¤Ï
- <code>QUERY_STRING</code> ¤È¤¤¤¦´Ä¶­ÊÑ¿ô¤Ë¤½¤Îʸ»úÎó¤òÆþ¤ì¤Þ¤¹¡£¤½¤ì¤Ï
- <code>GET</code> ¥ê¥¯¥¨¥¹¥È¤È¸Æ¤Ð¤ì¤Þ¤¹¡£
- HTML ¥Õ¥©¡¼¥à¤Ç¤Ï¡¢¥Ç¡¼¥¿¤òÅϤ¹¤¿¤á¤Ë <code>GET</code> ¤È
- <code>POST</code> ¤Î¤É¤Á¤é¤ò»ÈÍѤ¹¤ë¤«¤ò¡¢<code>FORM</code> ¥¿¥°¤Î
- <code>METHOD</code> °À­¤ÎÀßÄê¤Ç»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p>CGI ¥×¥í¥°¥é¥à¤Ï¡¢¤½¤Îʸ»úÎó¤òÌò¤ËΩ¤Ä¾ðÊó¤Ëʬ³ä¤¹¤ëÀÕǤ¤¬¤¢¤ê¤Þ¤¹¡£
- ¹¬¤¤¤Ë¤â¡¢¤½¤Î¥Ç¡¼¥¿½èÍý¤ò½õ¤±¤ë¥é¥¤¥Ö¥é¥ê¤ä¥â¥¸¥å¡¼¥ë¤¬Â¸ºß¤·¤Þ¤¹¡£
- ¤³¤ì¤é¤Ï¡¢CGI ¥×¥í¥°¥é¥à¤Î¾¤ÎÌ̤ǤâƱÍͤËÌò¤ËΩ¤Á¤Þ¤¹¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="libraries" id="libraries">CGI ¥â¥¸¥å¡¼¥ë/¥é¥¤¥Ö¥é¥ê</a></h2>
-
-
- <p>CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¯¤È¤­¡¢ÌÌÅݤʻŻö¤ÎÂçÉôʬ¤ò¤·¤Æ¤¯¤ì¤ë
- ¥³¡¼¥É¥é¥¤¥Ö¥é¥ê¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë¤ò»È¤¦¤³¤È¤ò¸¡Æ¤¤¹¤Ù¤­¤Ç¤¹¡£
- ¤³¤ì¤Ï¥¨¥é¡¼¤ò¸º¤é¤·¡¢Áᤤ³«È¯¤Ë¤Ä¤Ê¤¬¤ê¤Þ¤¹¡£</p>
-
- <p>Perl ¤Ç CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¤¤Æ¤¤¤ë¤Ê¤é¡¢¥â¥¸¥å¡¼¥ë¤Ï <a href="http://www.cpan.org/">CPAN</a> ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ÎÌÜŪ¤Î¤¿¤á¤ÎºÇ¤âÉáµÚ¤·¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Ï <code>CGI.pm</code> ¤Ç¤¹¡£
- <code>CGI::Lite</code> ¤â¸¡Æ¤¤·¤Þ¤·¤ç¤¦¡£¤³¤ì¤Ï¡¢¤Û¤È¤ó¤É¤Î¥×¥í¥°¥é¥à
- ¤Ë¤ª¤¤¤ÆɬÍפȤ¹¤ë¤¹¤Ù¤Æ¤Îµ¡Ç½¤ÎºÇ¾®¥»¥Ã¥È¤Î¼ÂÁõ¤Ç¤¹¡£</p>
-
- <p>C ¤Ç CGI ¥×¥í¥°¥é¥à¤ò½ñ¤¤¤Æ¤¤¤ë¤Ê¤é¡¢¤¤¤í¤¤¤í¤Ê
- ¥ª¥×¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤é¤ÎÆâ¤Î°ì¤Ä¤Ï <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
- ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë <code>CGIC</code> ¥é¥¤¥Ö¥é¥ê¤Ç¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinfo" id="moreinfo">¹¹¤Ê¤ë¾ðÊó</a></h2>
-
-
- <p>CGI ¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¥¦¥§¥Ö¤Ç¿ô¿¤¯Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£CGI
- ¤ÎÌäÂê¤Ë¤Ä¤¤¤Æ¤Ï Usenet ¤Î <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> ¤Ç¡¢
- ¾¤Î¥æ¡¼¥¶¤ÈÏÀµÄ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£HTML Writers Guide ¤Î
- -servers ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ï¡¢¤¢¤Ê¤¿¤Î¼ÁÌä¤Ë²óÅú¤·¤Æ¤¯¤ì¤ë°ÎÂç¤Ê¥ê¥½¡¼¥¹¤Ç¤¹¡£
- <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>
- ¤Ç¹¹¤Ë¿¤¯¤òõ¤·½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤½¤·¤Æ¤â¤Á¤í¤ó¡¢¤ª¤½¤é¤¯ CGI
- ¥×¥í¥°¥é¥à¤ÎÆ°ºî¤Ë´Ø¤¹¤ë¾ÜºÙ¤ÎÁ´¤Æ¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤ë
- CGI ¤Î»ÅÍͤòÆɤà¤Ù¤­¤Ç¤¹¡£¥ª¥ê¥¸¥Ê¥ë¥Ð¡¼¥¸¥ç¥ó¤ò
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>
- ¤Ç¡¢¥¢¥Ã¥×¥Ç¡¼¥È¤µ¤ì¤¿¥É¥é¥Õ¥È¤ò
- <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
- ¥×¥í¥¸¥§¥¯¥È</a>¤Ç»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>CGI ¤ÎÌäÂê¤Ë¤Ä¤¤¤Æ¡¢²Ã¤ï¤Ã¤Æ¤¤¤ë¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Þ¤¿¤Ï¥Ë¥å¡¼¥¹
- ¥°¥ë¡¼¥×¤Ë¼ÁÌä¤òÁ÷¤ë¤È¤­¡¢µ¯¤³¤Ã¤¿¤â¤Î¡¢µ¯¤³¤Ã¤Æ¤Û¤·¤¤¤³¤È¡¢
- ¼ÂºÝ¤Ëµ¯¤³¤Ã¤¿¤³¤È¤¬¤É¤¦°ã¤¦¤«¡¢»ÈÍѤ·¤Æ¤¤¤ë¥µ¡¼¥Ð¡¢
- CGI ¥×¥í¥°¥é¥à¤òµ­½Ò¤·¤Æ¤¤¤ë¸À¸ì¤Ë´Ø¤¹¤ë½½Ê¬¤Ê¾ðÊó¤È¡¢
- ²Äǽ¤Ç¤¢¤ì¤ÐÌäÂê¤Î¥³¡¼¥É¤òÄ󶡤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢ÌäÂ꤬¤è¤ê´Öñ¤Ë¸«¤Ä¤«¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>Apache ¤Î¥½¡¼¥¹¥³¡¼¥É¤Ë¤ª¤¤¤ÆÌäÂê¤òȯ¸«¤·¤¿¤³¤È¤ò³Î¿®¤·¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢
- CGI ¤ÎÌäÂê¤Ë´Ø¤¹¤ë¼ÁÌä¤ò Apache
- ¥Ð¥°¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë<strong>Á÷¤ë¤Ù¤­¤Ç¤Ê¤¤</strong>
- ¤³¤È¤ËÃíÌܤ·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/cgi.html.ko.euc-kr b/docs/manual/howto/cgi.html.ko.euc-kr
deleted file mode 100644
index 0b54a79c6d..0000000000
--- a/docs/manual/howto/cgi.html.ko.euc-kr
+++ /dev/null
@@ -1,501 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: CGI¸¦ »ç¿ëÇÑ µ¿Àû ÆäÀÌÁö »ý¼º - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: CGI¸¦ »ç¿ëÇÑ µ¿Àû ÆäÀÌÁö »ý¼º</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/cgi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">¼Ò°³</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI¸¦ Çã¿ëÇϵµ·Ï ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI ÇÁ·Î±×·¥ ÀÛ¼ºÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">±×·¯³ª ¾ÆÁ÷ µ¿ÀÛÇÏÁö ¾Ê¾Æ¿ä!</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">µÚ¿¡¼­´Â ¹«½¼ ÀÏÀÌ ¹ú¾îÁö´Â°¡?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI ¸ðµâ/¶óÀ̺귯¸®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">´õ ¸¹Àº Á¤º¸...</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intro" id="intro">¼Ò°³</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>
-
- <p>CGI (Common Gateway Interface)´Â À¥¼­¹ö°¡ º¸Åë CGI ÇÁ·Î±×·¥
- ȤÀº CGI ½ºÅ©¸³Æ®¶ó°í ºÎ¸£´Â, (À¥ÆäÀÌÁö ³»¿ëÀ» ¸¸µå´Â) ¿ÜºÎ
- ÇÁ·Î±×·¥°ú Åë½ÅÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇÇÑ´Ù. À¥»çÀÌÆ®¿¡¼­ µ¿ÀûÀÎ
- ÆäÀÌÁö¸¦ ¸¸µå´Â °¡Àå ÈçÇÏ°í °£´ÜÇÑ ¹æ¹ýÀÌ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡
- À¥¼­¹ö¿¡ CGI¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÏ°í, CGI ÇÁ·Î±×·¥À»
- ÀÛ¼ºÇغ»´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">CGI¸¦ Çã¿ëÇϵµ·Ï ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a></h2>
-
-
- <p>CGI ÇÁ·Î±×·¥ÀÌ ¿Ã¹Ù·Î µ¿ÀÛÇÏ·Á¸é CGI ½ÇÇàÀÌ °¡´ÉÇϵµ·Ï
- ¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. ¼³Á¤ÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡Áö´Ù.</p>
-
- <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
-
-
- <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â ƯÁ¤ µð·ºÅ丮¸¦ CGI ÇÁ·Î±×·¥¿ëÀ¸·Î
- µÐ´Ù. ¾ÆÆÄÄ¡´Â ÀÌ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀÌ CGI
- ÇÁ·Î±×·¥À̶ó°í °¡Á¤ÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ ÀÚ¿øÀ» ¿äûÇϸé ÀÚ¿øÀ»
- ½ÇÇàÇÏ·Á°í ½ÃµµÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- Áö½Ã¾î´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </code></p></div>
-
- <p>À§ ¿¹Á¦´Â ¾ÆÆÄÄ¡¸¦ ±âº» Àå¼Ò¿¡ ¼³Ä¡ÇÑ °æ¿ì
- <code>httpd.conf</code> ¼³Á¤ÆÄÀÏ¿¡ ÀÖ´Â ³»¿ëÀÌ´Ù. <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> Áö½Ã¾î´Â <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> Áö½Ã¾î¿Í °°ÀÌ URL
- ¾ÕºÎºÐÀ» ƯÁ¤ µð·ºÅ丮·Î ´ëÀÀÇÑ´Ù.
- <code class="directive">Alias</code>¿Í
- <code class="directive">ScriptAlias</code>´Â º¸Åë <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> µð·ºÅ丮 ¹Û¿¡ ÀÖ´Â
- µð·ºÅ丮¿¡ »ç¿ëÇÑ´Ù. <code class="directive">Alias</code>¿Í
- <code class="directive">ScriptAlias</code>ÀÇ Â÷ÀÌÁ¡Àº
- <code class="directive">ScriptAlias</code>°¡ Ãß°¡·Î URL ¾ÕºÎºÐÀ¸·Î
- ½ÃÀÛÇÏ´Â ¸ðµç ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î Ãë±ÞÇÏ´Â Á¡ÀÌ´Ù.
- ±×·¡¼­ À§ÀÇ ¼³Á¤Àº ¾ÆÆÄÄ¡¿¡°Ô <code>/cgi-bin/</code>À¸·Î
- ½ÃÀÛÇÏ´Â ÀÚ¿øÀ» ¿äûÇϸé
- <code>/usr/local/apache2/cgi-bin/</code> µð·ºÅ丮¿¡¼­
- ã¾Æ¼­ CGI ÇÁ·Î±×·¥À¸·Î ó¸®Ç϶ó°í ¾Ë¸°´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, URL
- <code>http://www.example.com/cgi-bin/test.pl</code>À»
- ¿äûÇÏ¸é ¾ÆÆÄÄ¡´Â
- <code>/usr/local/apache2/cgi-bin/test.pl</code> ÆÄÀÏÀ»
- ½ÇÇàÇÏ¿© °á°ú¸¦ ¹ÝȯÇÑ´Ù. ¹°·Ð ÆÄÀÏÀÌ Á¸ÀçÇÏ°í ½ÇÇà°¡´ÉÇϸç
- ¾î¶² ¹æ¹ýÀ¸·Îµç Ãâ·ÂÀ» ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¾ÆÆÄÄ¡´Â
- ¿À·ù¹®À» º¸³½´Ù.</p>
-
-
- <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias µð·ºÅ丮 ¹Û¿¡ ÀÖ´Â CGI</a></h3>
-
-
- <p>º¸Åë º¸¾È»ó ÀÌÀ¯¶§¹®¿¡ CGI ÇÁ·Î±×·¥Àº <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>ÇÑ µð·ºÅ丮¿¡
- ÇÑÁ¤ÇÑ´Ù. ±×·¡¼­ °ü¸®ÀÚ´Â ´©°¡ CGI ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö
- ÀÖ´ÂÁö ¾ö°ÝÈ÷ °¨µ¶ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Àû´çÇÑ º¸¾ÈÁ¶Ä¡¸¦
- ÃëÇß´Ù¸é ¾Æ¹« µð·ºÅ丮¿¡¼­³ª CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏÁö ¾ÊÀ»
- ÀÌÀ¯°¡ ¾ø´Ù. ¿¹¸¦ µé¾î, <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ È¨µð·ºÅ丮¿¡ À¥ÆäÀÌÁö¸¦ °¡Áö´Â °æ¿ì¸¦
- °¡Á¤ÇÏÀÚ. »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ CGI ÇÁ·Î±×·¥À» »ç¿ëÇÏ°í ½ÍÀºµ¥
- <code>cgi-bin</code> µð·ºÅ丮¿¡ Á¢±Ù±ÇÇÑÀÌ ¾ø´Ù¸é, ´Ù¸¥
- °÷¿¡¼­¶óµµ CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í ½ÍÀ» °ÍÀÌ´Ù.</p>
-
- <p>¾Æ¹« µð·ºÅ丮¿¡¼­³ª CGI ½ÇÇàÀ» Çã¿ëÇÏ·Á¸é µÎ °úÁ¤ÀÌ
- ÇÊ¿äÇÏ´Ù. ¸ÕÀú, <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>³ª <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- <code>cgi-script</code> Çڵ鷯¸¦ ÀÛµ¿ÇØ¾ß ÇÑ´Ù. µÎ¹ø°·Î,
- <code class="directive"><a href="../mod/core.html#options">Options</a></code> Áö½Ã¾î¿¡
- <code>ExecCGI</code>¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
-
- <h3><a name="options" id="options">Options¸¦ »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î CGI ½ÇÇàÀ» Çã¿ëÇϱâ</a></h3>
-
-
- <p>¼­¹öÀÇ ÁÖ¼³Á¤ÆÄÀÏ¿¡ Á÷Á¢ <code class="directive"><a href="../mod/core.html#options">Options</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ƯÁ¤
- µð·ºÅ丮¿¡¼­ CGI ½ÇÇàÀ» Çã¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
- <span class="indent">
- Options +ExecCGI<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>À§ Áö½Ã¾î·Î ¾ÆÆÄÄ¡´Â CGI ÆÄÀÏÀÇ ½ÇÇàÀ» Çã¿ëÇÑ´Ù. ¾î¶²
- ÆÄÀÏÀÌ CGI ÆÄÀÏÀÎÁöµµ ¼­¹ö¿¡°Ô ¾Ë·Á¾ß ÇÑ´Ù. ´ÙÀ½ <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> Áö½Ã¾î´Â ¼­¹ö¿¡°Ô
- È®ÀåÀÚ°¡ <code>cgi</code>³ª <code>pl</code>ÀÎ ÆÄÀÏÀº ¸ðµÎ
- CGI ÇÁ·Î±×·¥À̶ó°í ¾Ë¸°´Ù.</p>
-
- <div class="example"><p><code>
- AddHandler cgi-script .cgi .pl
- </code></p></div>
-
-
- <h3><a name="htaccess" id="htaccess">.htaccess ÆÄÀÏ</a></h3>
-
-
- <p><a href="htaccess.html"><code>.htaccess</code> ÅõÅ丮¾ó</a>Àº
- <code>httpd.conf</code>¿¡ Á¢±Ù±ÇÇÑÀÌ ¾ø´Â °æ¿ì¿¡ CGI ÇÁ·Î±×·¥À»
- »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¾Ë·ÁÁØ´Ù.</p>
-
-
- <h3><a name="userdir" id="userdir">»ç¿ëÀÚ µð·ºÅ丮</a></h3>
-
-
- <p>¾Æ·¡ ¼³Á¤À» »ç¿ëÇÏ¸é »ç¿ëÀÚ µð·ºÅ丮¿¡¼­ <code>.cgi</code>·Î
- ³¡³ª´Â ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html&gt;<br />
- <span class="indent">
- Options +ExecCGI<br />
- AddHandler cgi-script .cgi<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>´ÙÀ½À» »ç¿ëÇÏ¸é »ç¿ëÀÚ µð·ºÅ丮ÀÇ <code>cgi-bin</code>
- ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î ÀνÄÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
- <span class="indent">
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writing" id="writing">CGI ÇÁ·Î±×·¥ ÀÛ¼ºÇϱâ</a></h2>
-
-
- <p>``ÀϹÝÀûÀÎ'' ÇÁ·Î±×·¡¹Ö°ú CGI ÇÁ·Î±×·¡¹Ö »çÀÌ¿¡´Â µÎ°¡Áö
- ÁÖµÈ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù.</p>
-
- <p>ù¹ø° Â÷ÀÌ´Â CGI ÇÁ·Î±×·¥Àº ´Ù¸¥ Ãâ·ÂÀ» ÇϱâÀü¿¡ ¸ÕÀú
- MIME-type Çì´õ¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. HTTP Çì´õ´Â
- Ŭ¶óÀ̾ðÆ®¿¡°Ô Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ³»¿ëÀ» ¹Þ°ÔµÉÁö ¹Ì¸® ¾Ë¸°´Ù.
- º¸Åë ´ÙÀ½°ú °°´Ù.</p>
-
- <div class="example"><p><code>
- Content-type: text/html
- </code></p></div>
-
- <p>µÎ¹ø° Â÷ÀÌ´Â HTML ȤÀº ºê¶ó¿ìÀú°¡ º¸¿©ÁÙ ¼ö ÀÖ´Â Çü½ÄÀ¸·Î
- Ãâ·ÂÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ´ëºÎºÐÀÇ °æ¿ì HTMLÀ» Ãâ·ÂÇÏÁö¸¸,
- ¶§¶§·Î gif ±×¸²°ú °°ÀÌ HTMLÀÌ ¾Æ´Ñ ³»¿ëÀ» Ãâ·ÂÇÏ´Â CGI
- ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °æ¿ìµµ ÀÖ´Ù.</p>
-
- <p>µÎ°¡Áö¸¦ Á¦¿ÜÇÏ°í´Â CGI ÇÁ·Î±×·¥ ÀÛ¼ºÀº ÀÌ¹Ì ¸¸µé¾î º¸¾ÒÀ»
- ´Ù¸¥ ÇÁ·Î±×·¥µé°ú ¸Å¿ì ºñ½ÁÇÏ´Ù.</p>
-
- <h3><a name="firstcgi" id="firstcgi">óÀ½À¸·Î ¸¸µç CGI ÇÁ·Î±×·¥</a></h3>
-
-
- <p>´ÙÀ½Àº ºê¶ó¿ìÀú¿¡ ÇÑ ÁÙÀ» Âï´Â CGI ÇÁ·Î±×·¥ ¿¹Á¦´Ù.
- ±×´ë·Î <code>first.pl</code>À̶ó´Â ÆÄÀÏ¿¡ ÀúÀåÇÏ°í,
- <code>cgi-bin</code> µð·ºÅ丮¿¡ º¹»çÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
- </code></p></div>
-
- <p>Perl¿¡ Àͼ÷ÇÏÁö ¾Ê´õ¶óµµ ¹«½¼ ÀÏÀÌ ÀϾ´ÂÁö ¾Ë ¼ö
- ÀÖ´Ù. ù¹ø° ÁÙÀº ¾ÆÆÄÄ¡(ȤÀº »ç¿ëÇÏ´Â ½©)¿¡°Ô
- <code>/usr/bin/perl</code> À§Ä¡¿¡ ÀÖ´Â ÀÎÅÍÇÁ¸®ÅÍÀ» »ç¿ëÇÏ¿©
- ÀÌ ÇÁ·Î±×·¥ ÆÄÀÏÀ» ½ÇÇàÇ϶ó°í ¾Ë¸°´Ù. µÎ¹ø° ÁÙÀº ¹æ±Ý
- ¸»ÇÑ content-type ¼±¾ðÀ» Ãâ·ÂÇÏ°í carriage-return ÁٹٲÞÀ»
- µÎ¹ø Ãâ·ÂÇÑ´Ù. ±×·¯¸é Çì´õ µÚ¿¡ HTTP Çì´õÀÇ ³¡À» ¶æÇÏ´Â
- ºóÁÙÀÌ »ý±â°í, º»¹®ÀÌ ½ÃÀÛÇÑ´Ù. ¼¼¹ø° ÁÙÀº "Hello, World."
- ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. ÀÌ°ÍÀ¸·Î ³¡ÀÌ´Ù.</p>
-
- <p>ºê¶ó¿ìÀú¸¦ ½ÇÇàÇÏ°í ÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ´Ù</p>
-
- <div class="example"><p><code>
- http://www.example.com/cgi-bin/first.pl
- </code></p></div>
-
- <p>ÆÄÀÏ Àå¼Ò¸¦ ÀÔ·ÂÇϸé, ºê¶ó¿ìÀúâ¿¡ <code>Hello, World.</code>
- ÇÑ ÁÙÀÌ º¸ÀδÙ. ÈïºÐµÇÁö´Â ¾ÊÁö¸¸, Çѹø µ¿ÀÛÇÏ´Â °ÍÀ»
- º¸¾ÒÀ¸´Ï ÀÌÁ¦ ´Ù¸¥ °ÍÀ» ½ÃµµÇØ º¼ ¼ö ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">±×·¯³ª ¾ÆÁ÷ µ¿ÀÛÇÏÁö ¾Ê¾Æ¿ä!</a></h2>
-
-
- <p>À¥¿¡¼­ CGI ÇÁ·Î±×·¥¿¡ Á¢±ÙÇÒ¶§ ºê¶ó¿ìÀú¿¡ ³ª¿Ã ¼ö ÀÖ´Â
- ³»¿ëÀº ±âº»ÀûÀ¸·Î ³×°¡Áö´Ù.</p>
-
- <dl>
- <dt>CGI ÇÁ·Î±×·¥ÀÇ Ãâ·Â</dt>
- <dd>ÁÁ´Ù! ¸ðµç °ÍÀÌ Àß µ¿ÀÛÇÑ´Ù´Â ¶æÀÌ´Ù. Ãâ·ÂÀº Á¤È®ÇÏÁö¸¸
- ºê¶ó¿ìÀú°¡ ¿Ã¹Ù·Î ó¸®ÇÏÁö ¸øÇÑ´Ù¸é, CGI ÇÁ·Î±×·¥¿¡¼­
- ¿Ã¹Ù¸¥ <code>Content-Type</code>À» ¼³Á¤ÇÏ¿´´ÂÁö È®ÀÎÇÑ´Ù.</dd>
-
- <dt>CGI ÇÁ·Î±×·¥ ¼Ò½ºÄÚµå ȤÀº "POST Method Not Allowed"
- ¹®±¸</dt>
- <dd>CGI ÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ¾ÆÆÄÄ¡¸¦ ÀûÀýÈ÷ ¼³Á¤ÇÏÁö
- ¾Ê¾Ò´Ù´Â ¶æÀÌ´Ù. <a href="#configuring">¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a>
- ÀýÀ» ´Ù½Ã ÀÐ°í »©¸ÔÀº ºÎºÐÀÌ ÀÖ´ÂÁö ã¾ÆºÁ¶ó.</dd>
-
- <dt>"Forbidden"À¸·Î ½ÃÀÛÇÏ´Â ¹®±¸</dt>
- <dd>±ÇÇÑ ¹®Á¦°¡ ÀÖ´Ù´Â ¶æÀÌ´Ù. <a href="#errorlogs">¾ÆÆÄÄ¡
- ¿À·ù ·Î±×</a>¿Í ¾Æ·¡ <a href="#permissions">ÆÄÀϱÇÇÑ</a>
- ÀýÀ» È®ÀÎÇ϶ó.</dd>
-
- <dt>"Internal Server Error"¶ó´Â ¹®±¸</dt>
- <dd><a href="#errorlogs">¾ÆÆÄÄ¡ ¿À·ù ·Î±×</a>¸¦ º¸¸é ¾Æ¸¶µµ
- CGI ÇÁ·Î±×·¥ÀÌ Ãâ·ÂÇÑ ¿À·ù¹®°ú ÇÔ²² "Premature end of
- script headers"°¡ º¸ÀÏ °ÍÀÌ´Ù. ÀÌ °æ¿ì ¾Æ·¡ ³»¿ëµéÀ» Çϳª¾¿
- È®ÀÎÇÏ¿© ¾î¶² ÀÌÀ¯·Î CGI ÇÁ·Î±×·¥ÀÌ ÀûÀýÇÑ HTTP Çì´õ¸¦
- Ãâ·ÂÇÏÁö ¸øÇß´ÂÁö ¾Ë¾Æº»´Ù.</dd>
- </dl>
-
- <h3><a name="permissions" id="permissions">ÆÄÀϱÇÇÑ</a></h3>
-
-
- <p>¼­¹ö´Â ´ç½Å°ú µ¿ÀÏÇÑ °èÁ¤À¸·Î µ¿ÀÛÇÏÁö ¾ÊÀ½À» ¸í½ÉÇ϶ó.
- Áï, ¼­¹ö°¡ ½ÃÀÛÇÏ¸é ¼­¹ö´Â ºñƯ±Ç »ç¿ëÀÚ ±ÇÇÑ(º¸Åë
- <code>nobody</code>³ª <code>www</code>)À¸·Î µ¿ÀÛÇÑ´Ù.
- ±×·¡¼­ ´ç½ÅÀÌ ¼ÒÀ¯ÇÑ ÆÄÀÏÀ» ½ÇÇàÇÏ·Á¸é ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù.
- ÆÄÀÏ¿¡ <code>nobody</code>°¡ ½ÇÇàÇϱ⿡ ÃæºÐÇÑ ±ÇÇÑÀ»
- ÁÖ±âÀ§ÇØ º¸Åë ¸ðµÎ¿¡°Ô ÆÄÀÏÀÇ ½ÇÇà ±ÇÇÑÀ» ÁØ´Ù.</p>
-
- <div class="example"><p><code>
- chmod a+x first.pl
- </code></p></div>
-
- <p>¶Ç, ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ÆÄÀÏÀ» Àаųª ¾´´Ù¸é ÀÌ ÆÄÀÏ¿¡µµ
- ÀûÀýÇÑ ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù.</p>
-
-
-
- <h3><a name="pathinformation" id="pathinformation">°æ·Î Á¤º¸¿Í ȯ°æ</a></h3>
-
-
- <p>¸í·ÉÇà¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé ÀÚµ¿À¸·Î ¾î¶² Á¤º¸°¡
- ½©·Î Àü´ÞµÈ´Ù. ¿¹¸¦ µé¾î, <code>PATH</code>´Â ½©¿¡°Ô ´ç½ÅÀÌ
- ¸»ÇÑ ÆÄÀÏÀ» ãÀ» Àå¼Ò¸¦ ¾Ë·ÁÁØ´Ù.</p>
-
- <p>À¥¼­¹ö°¡ ÇÁ·Î±×·¥À» CGI ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇÒ¶§´Â
- <code>PATH</code>°¡ ´Ù¸¦ ¼ö ÀÖ´Ù. (¿¹¸¦ µé¾î,
- <code>sendmail</code> °°ÀÌ) CGI ÇÁ·Î±×·¥ ¾È¿¡¼­ ½ÇÇàÇÏ´Â
- ¸í·É¾î´Â ¿ÏÀüÇÑ °æ·Î·Î ¸í½ÃÇØ¾ß ½©ÀÌ ¸í·É¾î¸¦ ãÀ» ¼ö
- ÀÖ´Ù.</p>
-
- <p>°æ·Î ¹®Á¦´Â ´ÙÀ½°ú °°ÀÌ CGI ÇÁ·Î±×·¥ ù¹ø° ÁÙ¿¡ ³ª¿À´Â
- ½ºÅ©¸³Æ® ÀÎÅÍÇÁ¸®ÅÍ (º¸Åë <code>perl</code>) °æ·Î¿¡¼­
- ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl
- </code></p></div>
-
- <p>½ÇÁ¦·Î ÀÎÅÍÇÁ¸®ÅÍÀÇ °æ·ÎÀÎÁö È®ÀÎÇÑ´Ù.</p>
-
- <p>¶Ç, CGI ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ <a href="#env">ȯ°æº¯¼ö</a>¸¦
- »ç¿ëÇÑ´Ù¸é ¾ÆÆÄÄ¡°¡ ÀÌ º¯¼öµéÀ» ÇÁ·Î±×·¥¿¡°Ô Àü´ÞÇؾß
- ÇÑ´Ù.</p>
-
-
-
- <h3><a name="syntaxerrors" id="syntaxerrors">ÇÁ·Î±×·¥ ¿À·ù</a></h3>
-
-
- <p>CGI ÇÁ·Î±×·¥ÀÌ ½ÇÆÐÇÏ´Â °æ¿ì ´ëºÎºÐ ÇÁ·Î±×·¥ ÀÚü
- ¹®Á¦¶§¹®ÀÌ´Ù. ƯÈ÷ À§ÀÇ µÎ°¡Áö ½Ç¼ö¸¦ ÇÏÁö ¾Ê¾Ò°í ÀÌ ±ÛÀ»
- °è¼Ó º¸°í ÀÖ´Ù¸é ´õ´õ¿í ±×·¸´Ù. ¸ÕÀú À¥¼­¹ö¿¡¼­ ½ÇÇàÇϱâ
- Àü¿¡ ¸í·ÉÇà¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇغ»´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú
- °°ÀÌ ½ÇÇàÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- cd /usr/local/apache2/cgi-bin<br />
- ./first.pl
- </code></p></div>
-
- <p>(<code>perl</code> ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇàÇÏÁö ¸¶¶ó. ½©°ú
- ¾ÆÆÄÄ¡´Â ½ºÅ©¸³Æ® ù¹ø° ÁÙ¿¡ ÀÖ´Â <a href="#pathinformation">°æ·Î Á¤º¸</a>¸¦ »ç¿ëÇÏ¿© ÀÎÅÍÇÁ¸®Å͸¦
- ã¾Æ¾ß ÇÑ´Ù.)</p>
-
- <p>ÇÁ·Î±×·¥Àº Á¦ÀÏ ¸ÕÀú <code>Content-Type</code>À» Æ÷ÇÔÇÑ
- HTTP Çì´õµéÀ» Ãâ·ÂÇÏ°í ºó ÁÙÀ» Ãâ·ÂÇØ¾ß ÇÑ´Ù. ´Ù¸¥ °ÍÀ»
- Ãâ·ÂÇÑ´Ù¸é À¥¼­¹ö¿¡¼­ ½ÇÇàÇÒ °æ¿ì ¾ÆÆÄÄ¡´Â <code>Premature
- end of script headers</code>¸¦ ¹ÝȯÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº
- À§ÀÇ <a href="#writing">CGI ÇÁ·Î±×·¥ ÀÛ¼ºÇϱâ</a>¸¦ Âü°íÇ϶ó.</p>
-
-
- <h3><a name="errorlogs" id="errorlogs">¿À·ù ·Î±×</a></h3>
-
-
- <p>¿À·ù ·Î±×´Â ´ç½Å ÆíÀÌ´Ù. ¹«¾ð°¡ À߸øµÇ¸é ¿À·ù ·Î±×¿¡
- ¹®±¸°¡ »ý±ä´Ù. ¿À·ù ·Î±×¸¦ Á¦ÀÏ ¸ÕÀú »ìÆìºÁ¾ß ÇÑ´Ù. À¥»çÀÌÆ®¸¦
- È£½ºÆÃÇÏ´Â °÷¿¡¼­ ¿À·ù ·Î±×¸¦ º¸Áö ¸øÇÏ°Ô ÇÑ´Ù¸é, ¾Æ¸¶µµ
- ´Ù¸¥ ¾÷ü¸¦ ¾Ë¾ÆºÁ¾ß ÇÑ´Ù. ¿À·ù ·Î±×¸¦ º¸´Â ¹æ¹ýÀ» ÀÍÈ÷¸é,
- ´ëºÎºÐÀÇ ¹®Á¦¸¦ »¡¸® ÆľÇÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù.</p>
-
-
- <h3><a name="suexec" id="suexec">Suexec</a></h3>
-
-
- <p><a href="../suexec.html">suexec</a> Áö¿ø ÇÁ·Î±×·¥À»
- »ç¿ëÇÏ¸é ¾î¶² °¡»óÈ£½ºÆ® ȤÀº ¾î¶² »ç¿ëÀÚ µð·ºÅ丮¿¡ ÀÖ´ÂÁö¿¡
- µû¶ó CGI ÇÁ·Î±×·¥À» ´Ù¸¥ »ç¿ëÀÚ ±ÇÇÑÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- Suexec´Â ¸Å¿ì ¾ö°ÝÇÏ°Ô ±ÇÇÑÀ» °Ë»çÇϸç, °Ë»ç¸¦ Çϳª¶óµµ
- Åë°úÇÏÁö ¸øÇϸé CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏÁö ¾Ê°í <code>Premature
- end of script headers</code>¸¦ ¹ÝȯÇÑ´Ù.</p>
-
- <p>suexec¸¦ »ç¿ëÇÏ°í ÀÖ´ÂÁö ¾Ë·Á¸é <code>apachectl -V</code>¸¦
- ½ÇÇàÇÏ¿© <code>SUEXEC_BIN</code> À§Ä¡¸¦ È®ÀÎÇÑ´Ù. ¾ÆÆÄÄ¡°¡
- ½ÃÀÛÇÒ¶§ ±× Àå¼Ò¿¡¼­ suexec ½ÇÇàÆÄÀÏÀ» ¹ß°ßÇϸé, suexec¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>suexec¸¦ ¿ÏÀüÈ÷ ÀÌÇØÇÏÁö ¸øÇß´Ù¸é »ç¿ëÇؼ­´Â ¾ÈµÈ´Ù.
- suexec¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é <code>SUEXEC_BIN</code> À§Ä¡¿¡
- ÀÖ´Â <code>suexec</code> ½ÇÇàÆÄÀÏÀ» Áö¿ì°í (ȤÀº ÆÄÀϸíÀ»
- ¹Ù²Ù°í) ¼­¹ö¸¦ Àç½ÃÀÛÇÏ¸é µÈ´Ù. <a href="../suexec.html">suexec</a>¿¡ ´ëÇØ ÀÐÀº ´ÙÀ½ ±×·¡µµ
- »ç¿ëÇÏ°í ½Í´Ù¸é, <code>suexec -V</code>¸¦ ½ÇÇàÇÏ¿© suexec
- ·Î±×ÆÄÀÏ À§Ä¡¸¦ ¾Ë¾Æ³»°í ·Î±×ÆÄÀÏ¿¡¼­ ´ç½ÅÀÌ ¾î¶² ±ÔÄ¢À»
- ¾î±â°í ÀÖ´ÂÁö ã´Â´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behindscenes" id="behindscenes">µÚ¿¡¼­´Â ¹«½¼ ÀÏÀÌ ¹ú¾îÁö´Â°¡?</a></h2>
-
-
- <p>CGI ÇÁ·Î±×·¡¹Ö¿¡ Àͼ÷ÇØÁú¼ö·Ï µÚ¿¡¼­ ¹ú¾îÁö´Â ÀÏÀ» ÀÌÇØÇϸé
- µµ¿òÀÌ µÈ´Ù. ±¸Ã¼ÀûÀ¸·Î ºê¶ó¿ìÀú¿Í ¼­¹ö°¡ ¼­·Î Åë½ÅÇÏ´Â
- ¹æ¹ýÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. ¸ô¶óµµ "Hello, World."¸¦ Ãâ·ÂÇÏ´Â
- ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·± ÇÁ·Î±×·¥Àº º°·Î ¾µ¸ð°¡
- ¾ø±â¶§¹®ÀÌ´Ù.</p>
-
- <h3><a name="env" id="env">ȯ°æº¯¼ö</a></h3>
-
-
- <p>ȯ°æº¯¼ö´Â ´ç½ÅÀÌ ÄÄÇ»Å͸¦ »ç¿ëÇÏ´Â µ¿¾È ´ç½Å ÁÖÀ§¸¦
- ¶°´Ù´Ï´Â °ªÀÌ´Ù. ȯ°æº¯¼ö´Â path (ÄÄÇ»ÅÍ°¡ ´ç½ÅÀÌ ÀÔ·ÂÇÑ
- ¸í·É¾î¿¡ ÇØ´çÇÏ´Â ½ÇÁ¦ ÆÄÀÏÀ» ã´Â Àå¼Ò), »ç¿ëÀÚ¸í, Å͹̳Î
- Á¾·ù¿Í °°ÀÌ À¯¿ëÇÑ Á¤º¸´Ù. ÀϹÝÀûÀΠȯ°æº¯¼ö¸¦ ¸ðµÎ º¸·Á¸é
- ¸í·ÉÇà ÇÁ·ÒÇÁÆ®¿¡¼­ <code>env</code>¸¦ ÀÔ·ÂÇÑ´Ù.</p>
-
- <p>CGI¸¦ ½ÇÇàÇÒ¶§µµ ¼­¹ö¿Í ºê¶ó¿ìÀú´Â °¢ÀÚÀÇ È¯°æº¯¼ö¸¦
- ¼­·Î ±³È¯ÇÑ´Ù. ÀÌ Á¤º¸¿¡´Â ºê¶ó¿ìÀú Á¾·ù (Netscape, IE,
- Lynx), ¼­¹ö Á¾·ù (¾ÆÆÄÄ¡, IIS, WebSite), ½ÇÇàÇÏ´Â CGI
- ÇÁ·Î±×·¥¸í µîÀÌ ÀÖ´Ù.</p>
-
- <p>CGI ÇÁ·Î±×·¡¸Ó´Â ÀÌ·± º¯¼öµéÀ» »ç¿ëÇÒ ¼ö ÀÖ°í,
- ȯ°æº¯¼ö´Â Ŭ¶óÀ̾ðÆ®-¼­¹ö Åë½Å¿¡´Â ÀϺκÐÀ» Â÷ÁöÇÑ´Ù.
- Àüü Çʼö º¯¼ö ¸ñ·ÏÀº <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>¿¡ ÀÖ´Ù.</p>
-
- <p>¾Æ·¡ °£´ÜÇÑ Perl CGI ÇÁ·Î±×·¥Àº Àڽſ¡°Ô Àü´ÞµÈ ¸ðµç
- ȯ°æº¯¼ö¸¦ º¸¿©ÁØ´Ù. ¾ÆÆÄÄ¡ ¹èÆ÷º»ÀÇ <code>cgi-bin</code>
- µð·ºÅ丮¿¡ ÀÌ¿Í ºñ½ÁÇÑ ÇÁ·Î±×·¥ÀÌ µÎ°³ ÀÖ´Ù. ¸î¸î º¯¼ö´Â
- ÇʼöÀÌ°í ³ª¸ÓÁö´Â ¼±ÅÃÀûÀÌ´Ù. ±×·¡¼­ °ø½Ä ¸ñ·Ï¿¡ ¾ø´Â
- º¯¼öµµ º¸ÀδÙ. ¶Ç, ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î Á¦°øÇϴ ȯ°æº¯¼ö
- ¿Ü¿¡ ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î <a href="../env.html">Á÷Á¢ ȯ°æº¯¼ö¸¦
- Ãß°¡ÇÒ ¼ö ÀÖ´Ù</a>.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <span class="indent">
- print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
- </span>
- }
- </code></p></div>
-
-
- <h3><a name="stdin" id="stdin">STDIN°ú STDOUT</a></h3>
-
-
- <p>¶Ç, ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®´Â Ç¥ÁØÀÔ·Â(<code>STDIN</code>)°ú
- Ç¥ÁØÃâ·Â(<code>STDOUT</code>)À¸·Î Åë½ÅÇÑ´Ù. ÀÏ»óÀûÀÎ °æ¿ì
- <code>STDIN</code>Àº Å°º¸µå³ª ÇÁ·Î±×·¥ÀÌ Ã³¸®ÇÏ´Â ÆÄÀÏÀ»
- ³ªÅ¸³»°í, <code>STDOUT</code>Àº º¸Åë ÄܼÖÀ̳ª È­¸éÀ» ¶æÇÑ´Ù.</p>
-
- <p>CGI ÇÁ·Î±×·¥¿¡°Ô À¥ ¾ç½Ä(form)À» <code>POST</code>Çϸé
- ¾ç½Ä¿¡ ÀÔ·ÂÇÑ ÀڷḦ Ưº°ÇÑ Çü½ÄÀ¸·Î ¹­¾î¼­ CGI ÇÁ·Î±×·¥ÀÇ
- <code>STDIN</code>À¸·Î Àü´ÞÇÑ´Ù. ±×·¯¸é ÇÁ·Î±×·¥Àº Å°º¸µå³ª
- ÆÄÀÏ¿¡¼­ ¾òÀº ÀڷḦ ó¸®ÇϵíÀÌ ÀڷḦ ó¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>"Ưº°ÇÑ Çü½Ä"Àº ¸Å¿ì °£´ÜÇÏ´Ù. Ç׸ñ À̸§°ú °ªÀ» µîÈ£(=)·Î
- ¿¬°áÇÏ°í, Ç׸ñ À̸§°ú °ªÀÇ ½ÖµéÀ» ¼­·Î ¾ØÆÛ»÷µå(&amp;)·Î
- ¿¬°áÇÑ´Ù. °ø¹é, ¾ÚÆÛ»÷µå, µîÈ£ °°Àº ºÎÀÚ¿¬½º·¯¿î ¹®ÀÚ´Â
- È¥µ¿ÇÏÁö ¾Êµµ·Ï 16Áø¼ö·Î º¯È¯ÇÑ´Ù. ¿ÏÀüÇÑ ÀÚ·á ¹®ÀÚ¿­Àº
- ´ÙÀ½°ú °°ÀÌ »ý°å´Ù.</p>
-
- <div class="example"><p><code>
- name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
- </code></p></div>
-
- <p>Á¾Á¾ URL µÚ¿¡¼­ ÀÌ·± ¹®ÀÚ¿­À» º¸°Ô µÈ´Ù. ÀÌ °æ¿ì ¼­¹ö´Â
- ¹®ÀÚ¿­À» <code>QUERY_STRING</code>À̶ó´Â ȯ°æº¯¼ö¿¡ ÀúÀåÇÑ´Ù.
- À̸¦ <code>GET</code> ¿äûÀ̶ó°í ÇÑ´Ù. <code>FORM</code>
- ű×ÀÇ <code>METHOD</code> ¼Ó¼ºÀ» ÁöÁ¤ÇÏ¿© HTML ¾ç½Ä(form)ÀÌ
- ÀڷḦ <code>GET</code>ÇÒÁö <code>POST</code>ÇÒÁö °áÁ¤ÇÑ´Ù.</p>
-
- <p>ÀÌÁ¦ ÇÁ·Î±×·¥Àº ÀÌ·± ¹®ÀÚ¿­À» À¯¿ëÇÑ Á¤º¸·Î ÂÉ°³¾ß
- ÇÑ´Ù. ´ÙÇàÈ÷µµ ÀÌ·± ÀÚ·á 󸮸¦ µ½°í CGI ÇÁ·Î±×·¥ÀÇ ´Ù¸¥
- ¿©·¯ ¸éÀ» »ìÇÇ´Â ¶óÀ̺귯¸®¿Í ¸ðµâµéÀÌ ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="libraries" id="libraries">CGI ¸ðµâ/¶óÀ̺귯¸®</a></h2>
-
-
- <p>CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§ Áö·çÇÑ ÀÛ¾÷À» ´ë½ÅÇØÁÖ´Â ÄÚµå
- ¶óÀ̺귯¸® ȤÀº ¸ðµâÀ» »ç¿ëÇÒÁö °í·ÁÇغÁ¾ß ÇÑ´Ù. ÀÌ·± °ÍÀ»
- »ç¿ëÇÏ¸é ¹ö±×°¡ ÁÙ°í ´õ »¡¸® ÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Perl·Î CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é <a href="http://www.cpan.org/">CPAN</a>¿¡¼­ °ü·Ã ¸ðµâµéÀ» ãÀ»
- ¼ö ÀÖ´Ù. CGI °³¹ß¿¡ °¡Àå ³Î¸® »ç¿ëµÇ´Â ¸ðµâÀº
- <code>CGI.pm</code>ÀÌ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥¿¡ ÃæºÐÇÑ ÃÖ¼Ò
- ±â´ÉÀ» ±¸ÇöÇÑ <code>CGI::Lite</code>µµ °í·ÁÇØ º¼ ¼ö ÀÖ´Ù.</p>
-
- <p>C·Î CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é ¼±ÅÃÀÇ ¿©Áö°¡ ¸¹´Ù. ÀÌÁß
- Çϳª°¡ <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>¿¡
- ÀÖ´Â <code>CGIC</code> ¶óÀ̺귯¸®´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinfo" id="moreinfo">´õ ¸¹Àº Á¤º¸...</a></h2>
-
-
- <p>À¥¿¡ ¸Å¿ì ¸¹Àº CGI Á¤º¸°¡ ÀÖ´Ù. ´º½º±×·ì <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a>¿¡¼­ ¿©·¯ »ç¶÷µé°ú
- CGI ¹®Á¦¸¦ ³íÀÇÇÒ ¼ö ÀÖ´Ù. HTML Writers GuildÀÇ -servers
- ¸ÞÀϸµ¸®½ºÆ®´Â Áú¹®¿¡ ´ëÇÑ ´äÀ» ã±â¿¡ ÈǸ¢ÇÑ Àå¼Ò´Ù. <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>¿¡¼­ ´õ ¸¹Àº °ÍÀ»
- ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <p>±×¸®°í ¹°·Ð CGI ÇÁ·Î±×·¥ µ¿ÀÛ¿¡ ´ëÇÑ ¸ðµç ³»¿ëÀ» ¼³¸íÇÑ
- CGI ±Ô¾àÀ» Àоî¾ß ÇÒÁöµµ ¸ð¸¥´Ù. <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>¿¡
- ¿øº» ¹®¼­°¡ ÀÖ°í, ¼öÁ¤ÇÑ ÃʾÈÀº <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface
- RFC ÇÁ·ÎÁ§Æ®</a>¿¡ ÀÖ´Ù.</p>
-
- <p>¸ÞÀϸµ¸®½ºÆ®³ª ´º½º±×·ì¿¡ ÇöÀç °Ý°í ÀÖ´Â CGI ¹®Á¦¿¡ ´ëÇØ
- Áú¹®ÇÒ¶§´Â ¹ß»ýÇÑ Çö»ó°ú ¿ø·¡ ±â´ëÇÑ °á°ú, ½ÇÁ¦·Î ¹ß»ýÇÑ
- Çö»óÀÌ ¾î¶»°Ô ´Ù¸¥Áö, »ç¿ëÇÏ´Â ¼­¹ö, CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ
- ¾ð¾î, °¡´ÉÇϸé ÇØ´ç Äڵ带 ÀÚ¼¼È÷ Àû¾î¶ó. ±×·¯¸é ÇØ°áÃ¥À»
- ã±â ½¬¿öÁø´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ ¼Ò½ºÄڵ尡 À߸øµÇ¾ú´Ù°í È®½ÅÇÏÁö ¾Ê´Â ÇÑ CGI Áú¹®À»
- ¾ÆÆÄÄ¡ ¹ö±× µ¥ÀÌÅͺ£À̽º¿¡ ¿Ã¸®¸é <strong>Àý´ë·Î</strong>
- ¾ÈµÈ´Ù.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/cgi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/cgi.xml b/docs/manual/howto/cgi.xml
deleted file mode 100644
index b8623cf39d..0000000000
--- a/docs/manual/howto/cgi.xml
+++ /dev/null
@@ -1,567 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="cgi.xml.meta">
- <parentdocument href="./">How-To / Tutorials</parentdocument>
-
- <title>Apache Tutorial: Dynamic Content with CGI</title>
-
- <section id="intro">
- <title>Introduction</title>
-
- <related>
- <modulelist>
- <module>mod_alias</module>
- <module>mod_cgi</module>
- </modulelist>
-
- <directivelist>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="core">Options</directive>
- <directive module="mod_alias">ScriptAlias</directive>
- </directivelist>
- </related>
-
- <p>The CGI (Common Gateway Interface) defines a way for a web
- server to interact with external content-generating programs,
- which are often referred to as CGI programs or CGI scripts. It
- is the simplest, and most common, way to put dynamic content on
- your web site. This document will be an introduction to setting
- up CGI on your Apache web server, and getting started writing
- CGI programs.</p>
- </section>
-
- <section id="configuring">
- <title>Configuring Apache to permit CGI</title>
-
- <p>In order to get your CGI programs to work properly, you'll
- need to have Apache configured to permit CGI execution. There
- are several ways to do this.</p>
-
- <section id="scriptalias">
- <title>ScriptAlias</title>
-
- <p>The
- <directive module="mod_alias">ScriptAlias</directive>
-
- directive tells Apache that a particular directory is set
- aside for CGI programs. Apache will assume that every file in
- this directory is a CGI program, and will attempt to execute
- it, when that particular resource is requested by a
- client.</p>
-
- <p>The <directive module="mod_alias">ScriptAlias</directive>
- directive looks like:</p>
-
- <example>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </example>
-
- <p>The example shown is from your default <code>httpd.conf</code>
- configuration file, if you installed Apache in the default
- location. The <directive module="mod_alias">ScriptAlias</directive>
- directive is much like the <directive module="mod_alias"
- >Alias</directive> directive, which defines a URL prefix that
- is to mapped to a particular directory. <directive>Alias</directive>
- and <directive>ScriptAlias</directive> are usually used for
- directories that are outside of the <directive module="core"
- >DocumentRoot</directive> directory. The difference between
- <directive>Alias</directive> and <directive>ScriptAlias</directive>
- is that <directive>ScriptAlias</directive> has the added meaning
- that everything under that URL prefix will be considered a CGI
- program. So, the example above tells Apache that any request for a
- resource beginning with <code>/cgi-bin/</code> should be served from
- the directory <code>/usr/local/apache2/cgi-bin/</code>, and should be
- treated as a CGI program.</p>
-
- <p>For example, if the URL
- <code>http://www.example.com/cgi-bin/test.pl</code>
- is requested, Apache will attempt to execute the file
- <code>/usr/local/apache2/cgi-bin/test.pl</code>
- and return the output. Of course, the file will have to
- exist, and be executable, and return output in a particular
- way, or Apache will return an error message.</p>
- </section>
-
- <section id="nonscriptalias">
- <title>CGI outside of ScriptAlias directories</title>
-
- <p>CGI programs are often restricted to <directive module="mod_alias"
- >ScriptAlias</directive>'ed directories for security reasons.
- In this way, administrators can tightly control who is allowed to
- use CGI programs. However, if the proper security precautions are
- taken, there is no reason why CGI programs cannot be run from
- arbitrary directories. For example, you may wish to let users
- have web content in their home directories with the
- <directive module="mod_userdir">UserDir</directive> directive.
- If they want to have their own CGI programs, but don't have access to
- the main <code>cgi-bin</code> directory, they will need to be able to
- run CGI programs elsewhere.</p>
-
- <p>There are two steps to allowing CGI execution in an arbitrary
- directory. First, the <code>cgi-script</code> handler must be
- activated using the <directive
- module="mod_mime">AddHandler</directive> or <directive
- module="core">SetHandler</directive> directive. Second,
- <code>ExecCGI</code> must be specified in the <directive
- module="core">Options</directive> directive.</p>
- </section>
-
- <section id="options">
- <title>Explicitly using Options to permit CGI execution</title>
-
- <p>You could explicitly use the <directive module="core"
- >Options</directive> directive, inside your main server configuration
- file, to specify that CGI execution was permitted in a particular
- directory:</p>
-
- <example>
- &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
- <indent>
- Options +ExecCGI<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>The above directive tells Apache to permit the execution
- of CGI files. You will also need to tell the server what
- files are CGI files. The following <directive module="mod_mime"
- >AddHandler</directive> directive tells the server to treat all
- files with the <code>cgi</code> or <code>pl</code> extension as CGI
- programs:</p>
-
- <example>
- AddHandler cgi-script .cgi .pl
- </example>
- </section>
-
- <section id="htaccess">
- <title>.htaccess files</title>
-
- <p>The <a href="htaccess.html"><code>.htaccess</code> tutorial</a>
- shows how to activate CGI programs if you do not have
- access to <code>httpd.conf</code>.</p>
- </section>
-
- <section id="userdir">
- <title>User Directories</title>
-
- <p>To allow CGI program execution for any file ending in
- <code>.cgi</code> in users' directories, you can use the
- following configuration.</p>
-
- <example>
- &lt;Directory /home/*/public_html&gt;<br/>
- <indent>
- Options +ExecCGI<br/>
- AddHandler cgi-script .cgi<br/>
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>If you wish designate a <code>cgi-bin</code> subdirectory of
- a user's directory where everything will be treated as a CGI
- program, you can use the following.</p>
-
- <example>
- &lt;Directory /home/*/public_html/cgi-bin&gt;<br/>
- <indent>
- Options ExecCGI<br/>
- SetHandler cgi-script<br/>
- </indent>
- &lt;/Directory&gt;
- </example>
-
- </section>
-
- </section>
-
- <section id="writing">
- <title>Writing a CGI program</title>
-
- <p>There are two main differences between ``regular''
- programming, and CGI programming.</p>
-
- <p>First, all output from your CGI program must be preceded by
- a MIME-type header. This is HTTP header that tells the client
- what sort of content it is receiving. Most of the time, this
- will look like:</p>
-
- <example>
- Content-type: text/html
- </example>
-
- <p>Secondly, your output needs to be in HTML, or some other
- format that a browser will be able to display. Most of the
- time, this will be HTML, but occasionally you might write a CGI
- program that outputs a gif image, or other non-HTML
- content.</p>
-
- <p>Apart from those two things, writing a CGI program will look
- a lot like any other program that you might write.</p>
-
- <section id="firstcgi">
- <title>Your first CGI program</title>
-
- <p>The following is an example CGI program that prints one
- line to your browser. Type in the following, save it to a
- file called <code>first.pl</code>, and put it in your
- <code>cgi-bin</code> directory.</p>
-
- <example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
- </example>
-
- <p>Even if you are not familiar with Perl, you should be able
- to see what is happening here. The first line tells Apache
- (or whatever shell you happen to be running under) that this
- program can be executed by feeding the file to the
- interpreter found at the location <code>/usr/bin/perl</code>.
- The second line prints the content-type declaration we
- talked about, followed by two carriage-return newline pairs.
- This puts a blank line after the header, to indicate the end
- of the HTTP headers, and the beginning of the body. The third
- line prints the string "Hello, World.". And that's the end
- of it.</p>
-
- <p>If you open your favorite browser and tell it to get the
- address</p>
-
- <example>
- http://www.example.com/cgi-bin/first.pl
- </example>
-
- <p>or wherever you put your file, you will see the one line
- <code>Hello, World.</code> appear in your browser window.
- It's not very exciting, but once you get that working, you'll
- have a good chance of getting just about anything working.</p>
- </section>
- </section>
-
- <section id="troubleshoot">
- <title>But it's still not working!</title>
-
- <p>There are four basic things that you may see in your browser
- when you try to access your CGI program from the web:</p>
-
- <dl>
- <dt>The output of your CGI program</dt>
- <dd>Great! That means everything worked fine. If the output is correct,
- but the browser is not processing it correctly, make sure you have the
- correct <code>Content-Type</code> set in your CGI program.</dd>
-
- <dt>The source code of your CGI program or a "POST Method Not
- Allowed" message</dt>
- <dd>That means that you have not properly configured Apache
- to process your CGI program. Reread the section on
- <a href="#configuring">configuring
- Apache</a> and try to find what you missed.</dd>
-
- <dt>A message starting with "Forbidden"</dt>
- <dd>That means that there is a permissions problem. Check the
- <a href="#errorlogs">Apache error log</a> and the section below on
- <a href="#permissions">file permissions</a>.</dd>
-
- <dt>A message saying "Internal Server Error"</dt>
- <dd>If you check the
- <a href="#errorlogs">Apache error log</a>, you will probably
- find that it says "Premature end of
- script headers", possibly along with an error message
- generated by your CGI program. In this case, you will want to
- check each of the below sections to see what might be
- preventing your CGI program from emitting the proper HTTP
- headers.</dd>
- </dl>
-
- <section id="permissions">
- <title>File permissions</title>
-
- <p>Remember that the server does not run as you. That is,
- when the server starts up, it is running with the permissions
- of an unprivileged user - usually <code>nobody</code>, or
- <code>www</code> - and so it will need extra permissions to
- execute files that are owned by you. Usually, the way to give
- a file sufficient permissions to be executed by <code>nobody</code>
- is to give everyone execute permission on the file:</p>
-
- <example>
- chmod a+x first.pl
- </example>
-
- <p>Also, if your program reads from, or writes to, any other
- files, those files will need to have the correct permissions
- to permit this.</p>
-
- </section>
-
- <section id="pathinformation">
- <title>Path information and environment</title>
-
- <p>When you run a program from your command line, you have
- certain information that is passed to the shell without you
- thinking about it. For example, you have a <code>PATH</code>,
- which tells the shell where it can look for files that you
- reference.</p>
-
- <p>When a program runs through the web server as a CGI program,
- it may not have the same <code>PATH</code>. Any programs that you
- invoke in your CGI program (like <code>sendmail</code>, for
- example) will need to be specified by a full path, so that the
- shell can find them when it attempts to execute your CGI
- program.</p>
-
- <p>A common manifestation of this is the path to the script
- interpreter (often <code>perl</code>) indicated in the first
- line of your CGI program, which will look something like:</p>
-
- <example>
- #!/usr/bin/perl
- </example>
-
- <p>Make sure that this is in fact the path to the
- interpreter.</p>
-
- <p>In addition, if your CGI program depends on other <a
- href="#env">environment variables</a>, you will need to
- assure that those variables are passed by Apache.</p>
-
- </section>
-
- <section id="syntaxerrors">
- <title>Program errors</title>
-
- <p>Most of the time when a CGI program fails, it's because of
- a problem with the program itself. This is particularly true
- once you get the hang of this CGI stuff, and no longer make
- the above two mistakes. The first thing to do is to make
- sure that your program runs from the command line before
- testing it via the web server. For example, try:</p>
-
- <example>
- cd /usr/local/apache2/cgi-bin<br/>
- ./first.pl
- </example>
-
- <p>(Do not call the <code>perl</code> interpreter. The shell
- and Apache should find the interpreter using the <a
- href="#pathinformation">path information</a> on the first line of
- the script.)</p>
-
- <p>The first thing you see written by your program should be
- a set of HTTP headers, including the <code>Content-Type</code>,
- followed by a blank line. If you see anything else, Apache will
- return the <code>Premature end of script headers</code> error if
- you try to run it through the server. See <a
- href="#writing">Writing a CGI program</a> above for more
- details.</p>
- </section>
-
- <section id="errorlogs">
- <title>Error logs</title>
-
- <p>The error logs are your friend. Anything that goes wrong
- generates message in the error log. You should always look
- there first. If the place where you are hosting your web site
- does not permit you access to the error log, you should
- probably host your site somewhere else. Learn to read the
- error logs, and you'll find that almost all of your problems
- are quickly identified, and quickly solved.</p>
- </section>
-
- <section id="suexec">
- <title>Suexec</title>
-
- <p>The <a href="../suexec.html">suexec</a> support program
- allows CGI programs to be run under different user permissions,
- depending on which virtual host or user home directory they are
- located in. Suexec has very strict permission checking, and any
- failure in that checking will result in your CGI programs
- failing with <code>Premature end of script headers</code>.</p>
-
- <p>To check if you are using suexec, run <code>apachectl
- -V</code> and check for the location of <code>SUEXEC_BIN</code>.
- If Apache finds an suexec binary there on startup, suexec will
- be activated.</p>
-
- <p>Unless you fully understand suexec, you should not be using it.
- To disable suexec, simply remove (or rename) the <code>suexec</code>
- binary pointed to by <code>SUEXEC_BIN</code> and then restart the
- server. If, after reading about <a href="../suexec.html">suexec</a>,
- you still wish to use it, then run <code>suexec -V</code> to find
- the location of the suexec log file, and use that log file to
- find what policy you are violating.</p>
- </section>
- </section>
-
- <section id="behindscenes">
- <title>What's going on behind the scenes?</title>
-
- <p>As you become more advanced in CGI programming, it will
- become useful to understand more about what's happening behind
- the scenes. Specifically, how the browser and server
- communicate with one another. Because although it's all very
- well to write a program that prints "Hello, World.", it's not
- particularly useful.</p>
-
- <section id="env">
- <title>Environment variables</title>
-
- <p>Environment variables are values that float around you as
- you use your computer. They are useful things like your path
- (where the computer searches for the actual file
- implementing a command when you type it), your username, your
- terminal type, and so on. For a full list of your normal,
- every day environment variables, type
- <code>env</code> at a command prompt.</p>
-
- <p>During the CGI transaction, the server and the browser
- also set environment variables, so that they can communicate
- with one another. These are things like the browser type
- (Netscape, IE, Lynx), the server type (Apache, IIS, WebSite),
- the name of the CGI program that is being run, and so on.</p>
-
- <p>These variables are available to the CGI programmer, and
- are half of the story of the client-server communication. The
- complete list of required variables is at
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
- >http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
-
- <p>This simple Perl CGI program will display all of the
- environment variables that are being passed around. Two
- similar programs are included in the
- <code>cgi-bin</code>
-
- directory of the Apache distribution. Note that some
- variables are required, while others are optional, so you may
- see some variables listed that were not in the official list.
- In addition, Apache provides many different ways for you to
- <a href="../env.html">add your own environment variables</a>
- to the basic ones provided by default.</p>
-
- <example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <indent>
- print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
- </indent>
- }
- </example>
- </section>
-
- <section id="stdin">
- <title>STDIN and STDOUT</title>
-
- <p>Other communication between the server and the client
- happens over standard input (<code>STDIN</code>) and standard
- output (<code>STDOUT</code>). In normal everyday context,
- <code>STDIN</code> means the keyboard, or a file that a
- program is given to act on, and <code>STDOUT</code>
- usually means the console or screen.</p>
-
- <p>When you <code>POST</code> a web form to a CGI program,
- the data in that form is bundled up into a special format
- and gets delivered to your CGI program over <code>STDIN</code>.
- The program then can process that data as though it was
- coming in from the keyboard, or from a file</p>
-
- <p>The "special format" is very simple. A field name and
- its value are joined together with an equals (=) sign, and
- pairs of values are joined together with an ampersand
- (&amp;). Inconvenient characters like spaces, ampersands, and
- equals signs, are converted into their hex equivalent so that
- they don't gum up the works. The whole data string might look
- something like:</p>
-
- <example>
- name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
- </example>
-
- <p>You'll sometimes also see this type of string appended to
- a URL. When that is done, the server puts that string
- into the environment variable called
- <code>QUERY_STRING</code>. That's called a <code>GET</code>
- request. Your HTML form specifies whether a <code>GET</code>
- or a <code>POST</code> is used to deliver the data, by setting the
- <code>METHOD</code> attribute in the <code>FORM</code> tag.</p>
-
- <p>Your program is then responsible for splitting that string
- up into useful information. Fortunately, there are libraries
- and modules available to help you process this data, as well
- as handle other of the aspects of your CGI program.</p>
- </section>
- </section>
-
- <section id="libraries">
- <title>CGI modules/libraries</title>
-
- <p>When you write CGI programs, you should consider using a
- code library, or module, to do most of the grunt work for you.
- This leads to fewer errors, and faster development.</p>
-
- <p>If you're writing CGI programs in Perl, modules are
- available on <a href="http://www.cpan.org/">CPAN</a>. The most
- popular module for this purpose is <code>CGI.pm</code>. You might
- also consider <code>CGI::Lite</code>, which implements a minimal
- set of functionality, which is all you need in most programs.</p>
-
- <p>If you're writing CGI programs in C, there are a variety of
- options. One of these is the <code>CGIC</code> library, from
- <a href="http://www.boutell.com/cgic/"
- >http://www.boutell.com/cgic/</a>.</p>
- </section>
-
- <section id="moreinfo">
- <title>For more information</title>
-
- <p>There are a large number of CGI resources on the web. You
- can discuss CGI problems with other users on the Usenet group
- <a href="news:comp.infosystems.www.authoring.cgi"
- >comp.infosystems.www.authoring.cgi</a>. And the -servers mailing
- list from the HTML Writers Guild is a great source of answers
- to your questions. You can find out more at
- <a href="http://www.hwg.org/lists/hwg-servers/"
- >http://www.hwg.org/lists/hwg-servers/</a>.</p>
-
- <p>And, of course, you should probably read the CGI
- specification, which has all the details on the operation of
- CGI programs. You can find the original version at the
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html"
- >NCSA</a> and there is an updated draft at the
- <a href="http://web.golux.com/coar/cgi/">Common Gateway
- Interface RFC project</a>.</p>
-
- <p>When you post a question about a CGI problem that you're
- having, whether to a mailing list, or to a newsgroup, make sure
- you provide enough information about what happened, what you
- expected to happen, and how what actually happened was
- different, what server you're running, what language your CGI
- program was in, and, if possible, the offending code. This will
- make finding your problem much simpler.</p>
-
- <p>Note that questions about CGI problems should <strong>never</strong>
- be posted to the Apache bug database unless you are sure you
- have found a problem in the Apache source code.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/howto/cgi.xml.ja b/docs/manual/howto/cgi.xml.ja
deleted file mode 100644
index f6b15f1926..0000000000
--- a/docs/manual/howto/cgi.xml.ja
+++ /dev/null
@@ -1,552 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="cgi.xml.meta">
- <parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
-
- <title>Apache Tutorial: CGI $B$K$h$kF0E*%3%s%F%s%D(B</title>
-
- <section id="intro">
- <title>$B$O$8$a$K(B</title>
-
- <related>
- <modulelist>
- <module>mod_alias</module>
- <module>mod_cgi</module>
- </modulelist>
-
- <directivelist>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="core">Options</directive>
- <directive module="mod_alias">ScriptAlias</directive>
- </directivelist>
- </related>
-
- <p>CGI (Common Gateway Interface) $B$O!"%&%'%V%5!<%P$,(B
- $B%3%s%F%s%D@8@.$r$9$k30It%W%m%0%i%`$H6(D4$7$FF0:n$9$k$?$a$NJ}K!$r(B
- $BDj5A$7$F$$$^$9!#$=$N%W%m%0%i%`$O$7$P$7$P(B CGI $B%W%m%0%i%`$d(B
- CGI $B%9%/%j%W%H$H8F$P$l$^$9!#(BCGI $B$O!"%&%'%V%5%$%H$KF0E*$J(B
- $B%3%s%F%s%D$rCV$/$?$a$N:G$b4JC1$G0lHLE*$JJ}K!$G$9!#$3$N%I%-%e%a%s%H$O!"(B
- Apache $B%&%'%V%5!<%P$G(B CGI $B$r@_Dj$7!"(B
- CGI $B%W%m%0%i%`$r=q$-;O$a$k$?$a$NF~Lg=q$H$J$k$G$7$g$&!#(B</p>
- </section>
-
- <section id="configuring">
- <title>CGI $B$r5v2D$9$k$h$&$K(B Apache $B$r@_Dj$9$k(B</title>
-
- <p>CGI $B%W%m%0%i%`$r@5$7$/F0:n$5$;$k$K$O!"(BCGI $B$r5v2D$9$k$h$&$K(B
- Apache $B$N@_Dj$r9T$&I,MW$,$"$j$^$9!#(B
- $B$3$l$r9T$J$&$?$a$NJ}K!$,$$$/$D$+$"$j$^$9!#(B</p>
-
- <section id="scriptalias">
- <title>ScriptAlias</title>
-
- <p><directive module="mod_alias">ScriptAlias</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
- CGI $B%W%m%0%i%`MQ$NFCJL$JJL%G%#%l%/%H%j$r(B Apache $B$K@_Dj$7$^$9!#(B
- Apache $B$O!"$3$N%G%#%l%/%H%jCf$NA4$F$N%U%!%$%k$r(B CGI
- $B%W%m%0%i%`$G$"$k$H2>Dj$7$^$9!#(B
- $B$=$7$F!"$3$NFCJL$J%j%=!<%9$,%/%i%$%"%s%H$+$iMW5a$5$l$k$H!"(B
- $B$=$N%W%m%0%i%`$N<B9T$r;n$_$^$9!#(B</p>
-
- <p><directive module="mod_alias">ScriptAlias</directive>
- $B%G%#%l%/%F%#%V$O0J2<$N$h$&$K;HMQ$7$^$9(B:</p>
-
- <example>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </example>
-
- <p>$B%G%U%)%k%H0LCV$K(B Apache $B$r%$%s%9%H!<%k$7$?$J$i$P!"(B
- $B$3$NNc$O%G%U%)%k%H>uBV$N(B <code>httpd.conf</code>
- $B@_Dj%U%!%$%k$K4^$^$l$F$$$^$9!#(B
- <directive module="mod_alias">ScriptAlias</directive>
- $B%G%#%l%/%F%#%V$O!"(BURL $B$NA0$KIU2C$9$k%G%#%l%/%H%j$rDj5A$9$k(B
- <directive module="mod_alias">Alias</directive>
- $B%G%#%l%/%F%#%V$H$+$J$j;w$F$$$^$9!#(B
- <directive>Alias</directive> $B$H(B <directive>ScriptAlias</directive>
- $B$ODL>o!"(B<directive module="core">DocumentRoot</directive>
- $B%G%#%l%/%H%j30$N%G%#%l%/%H%j$N$?$a$K;HMQ$5$l$^$9!#(B
- <directive>Alias</directive> $B$H(B <directive>ScriptAlias</directive>
- $B$H$N:9$O!"(B<directive>ScriptAlias</directive> $B$,@\F,<-$G;O$^$k$9$Y$F$N(B
- URL $B$O(B CGI $B%W%m%0%i%`$H$_$J$5$l$k$H$$$&DI2C$N0UL#$r4^$s$G$$$k$3$H$G$9!#(B
- $B=>$C$F!">e5-$NNc$G$O!"(B<code>/cgi-bin/</code>
- $B$G;O$^$k%j%=!<%9$X$N$"$i$f$k%j%/%(%9%H$KBP$7$F!"%G%#%l%/%H%j(B
- <code>/usr/local/apache2/cgi-bin/</code> $B$+$iDs6!$7!"$=$l$i$r(B
- CGI $B%W%m%0%i%`$H$7$F07$&$h$&(B Apache $B$K<($7$^$9!#(B</p>
-
- <p>$BNc$($P!"(BURL <code>http://dev.rcbowen.com/cgi-bin/test.pl</code>
- $B$,MW5a$5$l$?>l9g!"(BApache $B$O(B $B%U%!%$%k(B
- <code>/usr/local/apache2/cgi-bin/test.pl</code>
- $B$r<B9T$7!"$=$N=PNO$rJV$9$3$H$r;n$_$^$9!#(B
- $B$b$A$m$s!"%U%!%$%k$,B8:_$7!"<B9T2DG=$G$"$j!"7h$a$i$l$?J}K!$G=PNO$rJV$7$^$9!#(B
- $B$=$&$G$J$1$l$P!"(BApache $B$O%(%i!<%a%C%;!<%8$rJV$7$^$9!#(B</p>
- </section>
-
- <section id="nonscriptalias">
- <title>ScriptAlias $B%G%#%l%/%H%j30$N(B CGI</title>
-
- <p>CGI $B%W%m%0%i%`$O!"%;%-%e%j%F%#>e$NM}M3$+$i(B
- <directive module="mod_alias">ScriptAlias</directive>
- $B$5$l$?%G%#%l%/%H%j$K@)8B$5$l$k$3$H$,$7$P$7$P$"$j$^$9!#$3$NJ}K!$K$h$j!"(B
- CGI $B%W%m%0%i%`$r;HMQ$G$-$k%f!<%6$r4IM}<T$,87$7$/@)8f$9$k$3$H$,$G$-$^$9!#(B
- $B$7$+$7$J$,$i!"E,@Z$J%;%-%e%j%F%#;vA0BP:v$,$H$i$l$k$J$i$P!"(BCGI
- $B%W%m%0%i%`$rG$0U$N%G%#%l%/%H%j$G<B9T$G$-$J$$$h$&$K$9$kM}M3$O$"$j$^$;$s!#(B
- $BNc$($P!"%f!<%6$K(B <directive module="mod_userdir">UserDir</directive>
- $B%G%#%l%/%F%#%V$GH`$i$N%[!<%`%G%#%l%/%H%jG[2<$K%&%'%V%3%s%F%s%D$r;}$?$;$?$$$H$7$^$9!#(B
- $B$b$7!"H`$i$,(B CGI $B%W%m%0%i%`$r;}$D$3$H$rK>$s$G$$$F$b!"%a%$%s$N(B
- <code>cgi-bin</code> $B%G%#%l%/%H%j$X$N%"%/%;%9$,$G$-$J$$>l9g!"(B
- CGI $B%W%m%0%i%`$r<B9T$9$k$3$H$,$G$-$kB>$N>l=j$,I,MW$K$J$j$^$9!#(B</p>
-
- <p>$BG$0U$N%G%#%l%/%H%j$G(B CGI $B$N<B9T$r5v2D$9$k$K$OFsCJ3,$N@_Dj$,I,MW$G$9!#(B
- $B$^$:!"(B<directive
- module="mod_mime">AddHandler</directive> $B$d(B <directive
- module="core">SetHandler</directive> $B%G%#%l%/%F%#%V$K$h$C$F(B
- <code>cgi-script</code> $B%O%s%I%i$,2DG=$K$J$C$F$$$kI,MW$,$"$j$^$9!#(B
- $B<!$K!"(B<directive module="core">Options</directive> $B%G%#%l%/%F%#%V$G(B
- <code>ExecCGI</code> $B$,;XDj$5$l$F$$$J$1$l$P$J$j$^$;$s!#(B</p>
- </section>
-
- <section id="options">
- <title>CGI $B$N<B9T$r2DG=$K$9$k$?$a$K(B Options $B$rL@<(E*$K;HMQ$9$k(B</title>
-
- <p>$B%5!<%P$N%a%$%s$N@_Dj%U%!%$%kCf$G(B <directive module="core">Options</directive>
- $B%G%#%l%/%F%#%V$rL@<(E*$K;HMQ$9$k$3$H$G!"FCDj$N%G%#%l%/%H%jG[2<$G(B
- CGI $B$N<B9T$r5v2D$9$k$h$&$K;XDj$9$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
- <indent>
- Options +ExecCGI<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B>e5-%G%#%l%/%F%#%V$O!"(BCGI $B%U%!%$%k$N<B9T$r2DG=$K$9$k$h$&(B
- Apache $B$KEA$($^$9!#$^$?!"$I$N%U%!%$%k$,(B CGI $B%U%!%$%k$+$r(B
- $B%5!<%P$KEA$($kI,MW$,$"$j$^$9!#<!$N(B
- <directive module="mod_mime">AddHandler</directive>
- $B%G%#%l%/%F%#%V$NNc$G$O!"(B<code>cgi</code> $B$^$?$O(B <code>pl</code>
- $B$r3HD%;R$K;}$D$9$Y$F$N%U%!%$%k$r(B CGI
- $B%W%m%0%i%`$H$7$F$_$J$9$3$H$r%5!<%P$KEA$($^$9(B:</p>
-
- <example>
- AddHandler cgi-script .cgi .pl
- </example>
- </section>
-
- <section id="htaccess">
- <title>.htaccess files</title>
-
- <p><a href="htaccess.html"><code>.htaccess</code> $B%A%e!<%H%j%"%k(B</a>
- $B$O(B <code>httpd.conf</code> $B$rJQ99$G$-$J$$>l9g$K$I$&$d$C$F(B CGI $B%W%m%0%i%`$r(B
- $B;H$($k$h$&$K$9$k$+$r@bL@$7$F$$$^$9!#(B</p>
- </section>
-
- <section id="userdir">
- <title>User $B%G%#%l%/%H%j(B</title>
-
- <p><code>.cgi</code> $B$G=*$o$k$9$Y$F$N%U%!%$%k$KBP$7$F(B CGI $B%W%m%0%i%`$N(B
- $B<B9T$r5v2D$9$k$K$O!"0J2<$N@_Dj$r;HMQ$G$-$^$9!#(B</p>
-
- <example>
- &lt;Directory /home/*/public_html&gt;<br/>
- <indent>
- Options +ExecCGI<br/>
- AddHandler cgi-script .cgi<br/>
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B%f!<%6%G%#%l%/%H%j$N(B <code>cgi-bin</code> $B%5%V%G%#%l%/%H%j$N(B
- $B$9$Y$F$N%U%!%$%k$r(B CGI $B%W%m%0%i%`$H$7$F;XDj$7$?$$>l9g$K$O(B
- $B0J2<$N$h$&$J$b$N$r;H$$$^$9!#(B</p>
-
- <example>
- &lt;Directory /home/*/public_html/cgi-bin&gt;<br/>
- <indent>
- Options ExecCGI<br/>
- SetHandler cgi-script<br/>
- </indent>
- &lt;/Directory&gt;
- </example>
-
- </section>
- </section>
-
- <section id="writing">
- <title>CGI $B%W%m%0%i%`$r=q$/(B</title>
-
- <p>$B!VDL>o$N!W%W%m%0%i%_%s%0$H(B CGI
- $B%W%m%0%i%_%s%0$N4V$K$O<g$KFs$D$N0c$$$,$"$j$^$9!#(B</p>
-
- <p>$B0l$D$O!"(BCGI $B%W%m%0%i%`$N$9$Y$F$N=PNO$K$O(B MIME-type
- $B%X%C%@$rIU$1$J$1$l$P$J$j$^$;$s!#(B
- $B$3$l$O$I$N$h$&$J<oN`$N%3%s%F%s%D$r<u$1<h$C$F$$$k$+$r%/%i%$%"%s%H$K<($9(B
- HTTP $B%X%C%@$G$9!#$[$H$s$I$N>l9g$G$O!"<!$N$h$&$K=PNO$7$^$9(B:</p>
-
- <example>
- Content-type: text/html
- </example>
-
- <p>$B$b$&0l$D$O!"=PNO$r(B HTML
- $B$+!"%V%i%&%6$,I=<($9$k$3$H$,$G$-$k2?$+B>$N7A<0$K$9$kI,MW$,$"$j$^$9!#(B
- $BBgDq$N>l9g$O(B HTML $B$G$7$g$&$,!"(BGIF $B%$%a!<%8$dB>$NHs(B HTML
- $B%3%s%F%s%D$r=PNO$9$k(B CGI $B%W%m%0%i%`$r=q$/$3$H$b$"$k$G$7$g$&!#(B</p>
-
- <p>$B$3$l$iFsE@0J30$G$O!"(BCGI $B%W%m%0%i%`$r=q$/$3$H$O!"(B
- $B$"$J$?$,=q$$$F$$$kB>$N%W%m%0%i%`$H$h$/;w$F$$$k$G$7$g$&!#(B</p>
-
- <section id="firstcgi">
- <title>$B:G=i$N(B CGI $B%W%m%0%i%`(B</title>
-
- <p>$B<!$K<($9$N$O!"%V%i%&%6$K(B 1 $B9T0u;z$9$k(B CGI
- $B%W%m%0%i%`$NNc$G$9!#0J2<$rF~NO$7!"(B<code>first.pl</code>
- $B$H$$$&%U%!%$%k$KJ]B8$7!"$=$l$r(B <code>cgi-bin</code>
- $B%G%#%l%/%H%j$KCV$$$F$/$@$5$$!#(B</p>
-
- <example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
- </example>
-
- <p>Perl $B$K@:DL$7$F$$$J$/$F$b!"(B
- $B2?$,5/$3$k$+$rM}2r$9$k$3$H$O$G$-$k$G$7$g$&!#(B1 $B9TL\$O!"(B
- <code>/usr/bin/perl</code> $B$G8+$D$1$i$l$k%$%s%?%W%j%?$K(B
- $B$3$N%U%!%$%k$r6!5k$9$k$3$H$G$3$N%W%m%0%i%`$,<B9T$5$l$k$3$H$r(B
- Apache $B$K(B ($B%7%'%k>e$G<B9T$7$h$&$H$7$F$$$k$J$i$P!"$=$N%7%'%k$K(B )
- $B<($7$^$9!#(B2 $B9TL\$O!"A0=R$7$?$H$*$j(B content-type $B$NDj5A$r0u;z$7$^$9!#(B
- $B$3$l$K$OI|5"2~9T$NFs$D$NAH$r8e$KIU2C$7$^$9!#(B
- $B$3$l$K$h$j!"%X%C%@$N=*$j$K6u9T$,CV$+$l!"(BHTTP
- $B%X%C%@$N=*$j$H%\%G%#$N;O$^$j$r<($7$^$9!#(B3 $B9TL\$O!"(B"Hello, World."
- $B$H$$$&J8;zNs$r0u;z$7!"$3$l$G=*$j$H$J$j$^$9!#(B</p>
-
- <p>$B9%$_$N%V%i%&%6$r3+$-!"%"%I%l%9(B</p>
-
- <example>
- http://www.example.com/cgi-bin/first.pl
- </example>
-
- <p>$B$"$k$$$O%U%!%$%k$rCV$$$?%m%1!<%7%g%s$r;XDj$9$k$H!"(B
- <code>Hello, World.</code>
- $B$H$$$&(B 1 $B9T$,%V%i%&%6%&%#%s%I$K8=$l$k$G$7$g$&!#(B
- $B$=$l$O$"$^$j%(%-%5%$%F%#%s%0$J$3$H$G$O$"$j$^$;$s!#(B
- $B$7$+$7!"$3$l$,$&$^$/F0$1$P!"(B
- $BB>$N$I$N$h$&$J$b$N$G$bF0$+$9$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
- </section>
- </section>
-
- <section id="troubleshoot">
- <title>$B$7$+$7!"$^$@F0$+$J$$(B !</title>
-
- <p>$B%&%'%V$+$i(B CGI $B%W%m%0%i%`$X$N%"%/%;%9$r9T$J$C$?$H$-!"(B
- $B%V%i%&%6$G8+$k2DG=@-$,$"$k;M$D$N4pK\E*$J$3$H$,$"$j$^$9(B:</p>
-
- <dl>
- <dt>CGI $B%W%m%0%i%`$N=PNO(B</dt>
- <dd>$BAG@2$i$7$$(B ! $B$=$l$O$9$Y$F$,$&$^$/F0$$$?$3$H$r0UL#$7$^$9!#(B
- $B=PNO$,@5>o$@$1$l$I$b!"%V%i%&%6$,@5>o$K=hM}$7$F$/$l$J$$>l9g$O!"(B
- $B@5$7$$(B <code>Content-Type</code> $B$r(B CGI $B%W%m%0%i%`Fb$G(B
- $B%;%C%H$7$?$+$r3NG'$7$F$/$@$5$$!#(B</dd>
-
- <dt>CGI $B%W%m%0%i%`$N%=!<%9%3!<%I!"$^$?$O(B "POST Method Not Allowed"
- $B$H$$$&%a%C%;!<%8(B</dt>
- <dd>$B$3$l$O!"(BCGI $B%W%m%0%i%`$r=hM}$G$-$k$h$&(B Apache
- $B$rE,@Z$K@_Dj$7$F$$$J$+$C$?$3$H$r0UL#$7$^$9!#(B<a
- href="#configuring">$B!V(BCGI $B$r5v2D$9$k$h$&$K(B
- Apache $B$r@_Dj$9$k!W(B</a>$B$N>O$rFI$_D>$7!"(B
- $B$"$J$?$,2?$r4V0c$($?$+$rC5$7$F$_$F$/$@$5$$!#(B
- </dd>
-
- <dt>$B%a%C%;!<%8$,(B "Forbidden" $B$G;O$^$C$F$$$k(B</dt>
- <dd>$B$3$l$O%Q!<%_%C%7%g%s$NLdBj$H$$$&$3$H$r0UL#$7$^$9!#(B
- <a href="#errorlogs">Apache $B$N%(%i!<%m%0(B</a>$B$H!"8e=R$N(B<a
- href="#filepermissions">$B!V%U%!%$%k$N%Q!<%_%C%7%g%s!W(B</a>
- $B$N>O$r%A%'%C%/$7$F$/$@$5$$!#(B
- </dd>
-
- <dt>"Internal Server Error" $B$H$$$&%a%C%;!<%8(B</dt>
- <dd><a href="#errorlogs">Apache
- $B$N%(%i!<%m%0(B</a>$B$r%A%'%C%/$9$k$H!"(B"Premature end of script headers"
- $B$H$$$&%m%0$,5-O?$5$l$F$$$k$H;W$$$^$9!#$=$7$F!"$*$=$i$/(B CGI
- $B%W%m%0%i%`$K$h$C$F@8@.$5$l$?%(%i!<%a%C%;!<%8$b5-O?$5$l$F$$$k$G$7$g$&!#(B
- $B$3$N>l9g!"(BCGI $B%W%m%0%i%`$,E,@Z$J(B
- HTTP $B%X%C%@$r=PNO$G$-$J$$860x$rCN$k$?$a$K!"(B
- $B0J2<$N3F>O$G%A%'%C%/$7$F$_$F$/$@$5$$!#(B</dd>
- </dl>
-
- <section id="permissions">
- <title>$B%U%!%$%k$N%Q!<%_%C%7%g%s(B</title>
-
- <p>$B%5!<%P$O$"$J$?$N8"8B$G<B9T$5$l$F$$$J$$$N$rK:$l$J$$$h$&$K!#(B
- $B$D$^$j!"5/F0$9$k$H$-!"%5!<%P$OFC8"$r$b$?$J$$%f!<%6(B - $BDL>o(B <code>nobody</code>
- $B$d(B <code>www</code> $B$N8"8B$G<B9T$5$l$^$9!#$7$?$,$C$F!"$"$J$?$,=jM-$9$k(B
- $B%U%!%$%k$r<B9T$9$k$K$OJL$N%Q!<%_%C%7%g%s$,I,MW$H$J$j$^$9!#(B
- $BDL>o!"(B<code>nobody</code> $B$,<B9T$9$k$N$K==J,$J%Q!<%_%C%7%g%s$rM?$($kJ}K!$O!"(B
- $B%U%!%$%k$KC/$G$b<B9T2DG=$H$9$k%Q!<%_%C%7%g%s$rM?$($k$3$H$G$9(B:</p>
-
- <example>
- chmod a+x first.pl
- </example>
-
- <p>$B$^$?!"$b$7$"$J$?$N%W%m%0%i%`$,B>$N%U%!%$%k$rFI$_=q$-$9$k$J$i$P!"(B
- $B$=$l$i$N%U%!%$%k$O!"$3$l$,2DG=$H$J$k@5$7$$%Q!<%_%C%7%g%s(B
- $B$r;}$C$F$$$kI,MW$,$"$j$^$9!#(B</p>
-
- </section>
-
- <section id="pathinformation">
- <title>$B%Q%9>pJs$H4D6-(B</title>
-
- <p>$B%3%^%s%I%i%$%s$+$i%W%m%0%i%`$r<B9T$9$k$H$-!"(B
- $B0U<1$7$J$/$F$b%7%'%k$KEO$5$l$k>pJs$,$"$j$^$9!#(B
- $BNc$($P!";2>H$9$k%U%!%$%k$N$?$a$K$I$3$r8!:w$7$?$i$h$$$+$r(B
- $B%7%'%k$KEA$($k(B <code>PATH</code> $B$,$"$j$^$9!#(B</p>
-
- <p>$B%W%m%0%i%`$,(B CGI $B%W%m%0%i%`$H$7$F%&%'%V%5!<%P$K$h$C$F<B9T$5$l$k$H$-!"(B
- $B$=$l$OF1$8(B <code>PATH</code> $B$G$O$J$$$+$b$7$l$^$;$s!#(B
- CGI $B%W%m%0%i%`Fb$G8F$S=P$9$"$i$f$k%W%m%0%i%`(B
- ($BNc$($P!"(B<code>sendmail</code> $B$N$h$&$J$b$N(B) $B$O!"(B
- $B%U%k%Q%9$G;XDj$9$kI,MW$,$"$k$G$7$g$&!#$=$l$K$h$j!"(BCGI
- $B%W%m%0%i%`$r<B9T$7$h$&$H$7$?$H$-!"(B
- $B%7%'%k$O$=$N$h$&$J%W%m%0%i%`$r8+$D$1$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$BF1MM$J$3$H$O!"%9%/%j%W%H$N%$%s%?%W%j%?(B ($B$7$P$7$P(B <code>perl</code>)
- $B$X$N%Q%9$G!"(BCGI $B%W%m%0%i%`$N(B 1 $B9TL\$K<!$N$h$&$K<($5$l$^$9(B:</p>
-
- <example>
- #!/usr/bin/perl
- </example>
-
- <p>$B$3$l$,%$%s%?!<%W%j%?$X$N<B:]$N%Q%9$G$"$k$3$H$r3N<B$K$7$F$*$-$^$9!#(B</p>
- </section>
-
- <section id="syntaxerrors">
- <title>$B%W%m%0%i%`%(%i!<(B</title>
-
- <p>CGI
- $B%W%m%0%i%`$,<:GT$9$k$N$OBgDq!"%W%m%0%i%`<+?H$KLdBj$,$"$k>l9g$G$9!#(B
- $B0lEY(B CGI $B$N;H$$J}$rM}2r$7!"A0=R$NFs$D$N8m$j$rHH$7$F$$$J$$$J$i$P!"(B
- $B$^$:4V0c$$$J$/$=$&$G$7$g$&!#%V%i%&%6$r;H$C$F%F%9%H$9$kA0$K(B
- $B$^$:3NG'$9$k$3$H$O!"%3%^%s%I%i%$%s$+$i%W%m%0%i%`$,<B9T$G$-$k$3$H$G$9!#(B
- $BNc$($P!"0J2<$r<B9T$7$F$_$F$/$@$5$$(B:</p>
-
- <example>
- cd /usr/local/apache2/cgi-bin<br/>
- ./first.pl
- </example>
-
- <p>(<code>perl</code> $B%$%s%?%W%j%?$O8F$P$J$$$G$/$@$5$$!#(B
- $B%7%'%k$H(B Apache $B$,%9%/%j%W%H$N:G=i$N9T$N(B <a
- href="#pathinformation">$B%Q%9>pJs(B</a> $B$r;H$C$F8+$D$1$^$9!#(B)</p>
-
- <p>$B:G=i$K%W%m%0%i%`$+$i=PNO$5$l$k$N$O(B <code>Content-Type</code> $B$r4^$_!"(B
- $B8e$K6u9T$NB3$/(B HTTP $B%X%C%@$G$J$1$l$P$J$j$^$;$s!#B>$N$b$N$,=PNO$5$l$F$$$k(B
- $B>l9g$O!"(BApache $B$O$3$N%W%m%0%i%`$r%5!<%P7PM3$G<B9T$7$h$&$H$7$?$H$-$K$O(B
- <code>Premature end of script headers</code> $B%(%i!<$r=PNO$7$^$9!#>\:Y$O(B
- $B>e5-$N(B <a
- href="#writing">CGI $B%W%m%0%i%`$r=q$/(B</a> $B$rFI$s$G$/$@$5$$!#(B</p>
- </section>
-
- <section id="errorlogs">
- <title>$B%(%i!<%m%0(B</title>
-
- <p>$B%(%i!<%m%0$OM'C#$G$9!#(B
- $BA4$F$N$&$^$/$$$+$J$$$3$H$O!"%(%i!<%m%0$K%a%C%;!<%8$r@8@.$7$^$9!#(B
- $BI,$:$=$l$r:G=i$K8+$k$Y$-$G$9!#(B
- $B$b$7!"$"$J$?$,%&%'%V%5%$%H$r<g:E$7$F$$$k>l=j$,(B
- $B%(%i!<%m%0$N;2>H$r5v$7$F$$$J$$$J$i$P!"$-$C$HB>$N%5%$%H$G<g:E$9$k$Y$-$G$9!#(B
- $B%(%i!<%m%0$NFI$_J}$r3X$V$3$H$G!"$[$H$s$IA4$F$NLdBj$,?WB.$K3NG'$5$l!"(B
- $B?WB.$K2r7h$5$l$k$H$$$&$3$H$,J,$+$k$G$7$g$&!#(B</p>
- </section>
-
- <section id="suexec">
- <title>Suexec</title>
-
- <p><a href="../suexec.html">suexec</a> $B%5%]!<%H%W%m%0%i%`$O(B
- $B%P!<%A%c%k%[%9%H$d%f!<%6$N%[!<%`%G%#%l%/%H%j$N>l=j$K0M$C$F(B
- CGI $B%W%m%0%i%`$r0c$&%f!<%68"8B$N2<$GAv$i$;$k$3$H$r2DG=$K$7$^$9!#(B
- Suexec $B$N8"8B$N%A%'%C%/$OHs>o$K87$7$/!"$=$l$rK~$?$5$J$$>l9g$O(B
- CGI $B%W%m%0%i%`$,(B <code>Premature end of script headers</code> $B%(%i!<$G(B
- $B<B9T$5$l$^$;$s!#(B</p>
-
- <p>suexec $B$r;H$C$F$$$k$+$I$&$+$rD4$Y$?$a$K$O(B <code>apachectl
- -V</code> $B$r<B9T$7$F!"(B<code>SUEXEC_BIN</code> $B$N>l=j$rD4$Y$F$/$@$5$$!#(B
- Apache $B$,$=$3$K(B suexec $B$N%P%$%J%j$rH/8+$7$?>l9g$O!"(Bsuexec $B$,(B
- $B;HMQ$5$l$^$9!#(B</p>
-
- <p>suexec $B$r40A4$KM}2r$7$F$$$J$$8B$j!";H$&$Y$-$G$O$"$j$^$;$s!#(B
- suexec $B$rL58z$K$9$k$K$O!"(B<code>SUEXEC_BIN</code> $B$+$i;X$5$l$F$$$k(B
- <code>suexec</code> $B%P%$%J%j$r:o=|(B ($B$+L>A0$rJQ99(B) $B$9$k$@$1$G$9!#(B
- <a href="../suexec.html">suexec</a> $B$rFI$s$@8e$G!"$^$@$=$l$r(B
- $B;H$$$?$$$N$G$"$l$P!"(B<code>suexec -V</code> $B$r<B9T$7$F(B suexec $B$N(B
- $B%m%0%U%!%$%k$N0LCV$rD4$Y!"$=$N%m%0%U%!%$%k$r;H$C$F%]%j%7!<0cH?$r(B
- $B8+$D$1$F$/$@$5$$!#(B</p>
- </section>
- </section>
-
- <section id="behindscenes">
- <title>$BN"$G2?$,5/$3$C$F$$$k$N$+(B?</title>
-
- <p>CGI $B%W%m%0%i%_%s%0$K=,=O$9$k$H!"(B
- $BN"$G5/$3$C$F$$$k$3$H$K$D$$$F99$KM}2r$9$k$3$HLr$KN)$A$^$9!#(B
- $B%V%i%&%6$H%5!<%P$,$I$N$h$&$KAj8_DL?.$9$k$+$K$D$$$F$OFC$K$=$&$G$9!#(B
- $B$J$<$J$i!"(B"Hello, World."
- $B$r0u;z$9$k%W%m%0%i%`$r=q$/$3$H$O$*$*$$$K7k9=$G$9$,!"(B
- $B$=$l$OFC$KM-1W$G$O$"$j$^$;$s!#(B</p>
-
- <section id="env">
- <title>$B4D6-JQ?t(B</title>
-
- <p>$B4D6-JQ?t$O!"(B
- $B$"$J$?$,%3%s%T%e!<%?$r;H$&$H$-$KJU$j$KB8:_$7$F$$$kCM$G$9!#(B
- $B$=$l$i$O!"%Q%9(B
- ($B%3%^%s%I$r%?%$%W$7$?$H$-$K<B9T$9$k<B:]$N%U%!%$%k$rC5$7=P$9$H$3$m(B)$B!"(B
- $B%f!<%6L>!"C<Kv7?$J$I$N$h$&$JJXMx$J$b$N$G$9!#(B
- $BDL>o!"IaCJ;HMQ$7$F$$$k4D6-JQ?t$N40A4$J%j%9%H$rD4$Y$k$K$O!"(B
- $B%3%^%s%I%W%m%s%W%H$G(B <code>env</code> $B$rF~NO$7$^$9!#(B</p>
-
- <p>CGI $B$N=hM}Cf!"%5!<%P$H%V%i%&%6$b4D6-JQ?t$r@_Dj$7!"(B
- $B$=$l$K$h$jAj8_$KDL?.$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
- $B$=$N4D6-JQ?t$O!"%V%i%&%6%?%$%W(B (Netscape, IE, Lynx)$B!"%5!<%P%?%$%W(B
- (Apache, IIS, WebSite)$B!"<B9T$5$l$F$$$k(B CGI
- $B%W%m%0%i%`$NL>A0$J$I$G$9!#(B</p>
-
- <p>$B$3$l$i$NJQ?t$O(B CGI $B%W%m%0%i%^$,;HMQ$G$-$^$9!#(B
- $B$=$7$F!"$=$l$O%/%i%$%"%s%H$H%5!<%P$NDL?.$NOC$NH>J,$G$9!#(B
- $BI,MW$JJQ?t$N40A4$J%j%9%H$O(B <a
- href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
- >http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> $B$K$"$j$^$9!#(B</p>
-
- <p>$B0J2<$NC1=c$J(B Perl CGI
- $B%W%m%0%i%`$O!"EO$5$l$kA4$F$N4D6-JQ?t$rI=<($7$^$9!#F1MM$N%W%m%0%i%`$O!"(B
- Apache $B%G%#%9%H%j%S%e!<%7%g%s$N(B <code>cgi-bin</code>
- $B%G%#%l%/%H%j$KFs$D4^$^$l$F$$$^$9!#(B
- $B$$$/$D$+$NJQ?t$,I,?\$G$"$j!"$$$/$D$+$OG$0U$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$=$7$F!"8x<0$N%j%9%H$K$O$J$$$$$/$D$+$NJQ?t$,I=<($5$l$F$$$k$+$b$7$l$^$;$s!#(B
- $B$5$i$K!"(BApache $B$O%G%U%)%k%H$GMQ0U$5$l$F$$$k4pK\E*$J$b$N$K(B
- <a href="../env.html">$B$"$J$?<+?H$N4D6-JQ?t$r2C$($k(B</a>$B$?$a$N!"(B
- $BB?$/$N0[$J$kJ}K!$rMQ0U$7$F$7$^$9!#(B</p>
-
- <example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <indent>
- print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
- </indent>
- }
- </example>
- </section>
-
- <section id="stdin">
- <title>STDIN $B$H(B STDOUT</title>
-
- <p>$B%5!<%P$H%/%i%$%"%s%H4V$N$b$&0l$D$NDL?.$O!"I8=`F~NO(B
- (<code>STDIN</code>)$B$HI8=`=PNO(B (<code>STDOUT</code>)
- $B$rDL$8$F9T$J$o$l$^$9!#DL>o$NJ8L.$K$*$$$F!"(B<code>STDIN</code>
- $B$O%-!<%\!<%I$d%W%m%0%i%`$,F0:n$9$k$?$a$KM?$($i$l$k%U%!%$%k$r0UL#$7!"(B
- <code>STDOUT</code> $B$ODL>o%3%s%=!<%k$^$?$O%9%/%j!<%s$r0UL#$7$^$9!#(B</p>
-
- <p>$B%&%'%V%U%)!<%`$+$i(B CGI $B%W%m%0%i%`$X(B<code>POST</code>
- $B$7$?$H$-!"%U%)!<%`$N%G!<%?$OFCJL$J%U%)!<%^%C%H$GB+$M$i$l!"(B
- <code>STDIN</code> $B$rDL$7$F!"(BCGI $B%W%m%0%i%`$K0z$-EO$5$l$^$9!#(B
- $B%W%m%0%i%`$O%G!<%?$,%-!<%\!<%I(B
- $B$b$7$/$O%U%!%$%k$+$iMh$F$$$?$+$N$h$&$K=hM}$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B!VFCJL$J%U%)!<%^%C%H!W$O$H$F$bC1=c$G$9!#%U%#!<%k%IL>$HCM$O%$%3!<%k(B
- (=) $B$G7k$P$l$^$9!#$=$7$FCM$NAH$O%"%s%Q%5%s%I(B (&amp;) $B$G7k$P$l$^$9!#(B
- $B%9%Z!<%9!"%"%s%Q%5%s%I!"%$%3!<%k$N$h$&$JLLE]$JJ8;z$O!"(B
- $B$=$l$i$,F0:n$rBLL\$K$7$J$$$h$&$K$=$NJ8;z$KAjEv$9$k(B 16 $B?J$KJQ49$5$l$^$9!#(B
- $BA4%G!<%?J8;zNs$O!"0J2<$N$h$&$K$J$j$^$9(B:
- </p>
-
- <example>
- name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
- </example>
-
- <p>$B;~!9!"$3$N$h$&$JJ8;zNs$,(B URL
- $B$KIU2C$5$l$k$N$r8+$k$G$7$g$&!#$=$N>l9g!"%5!<%P$O(B
- <code>QUERY_STRING</code> $B$H$$$&4D6-JQ?t$K$=$NJ8;zNs$rF~$l$^$9!#$=$l$O(B
- <code>GET</code> $B%j%/%(%9%H$H8F$P$l$^$9!#(B
- HTML $B%U%)!<%`$G$O!"%G!<%?$rEO$9$?$a$K(B <code>GET</code> $B$H(B
- <code>POST</code> $B$N$I$A$i$r;HMQ$9$k$+$r!"(B<code>FORM</code> $B%?%0$N(B
- <code>METHOD</code> $BB0@-$N@_Dj$G;XDj$7$^$9!#(B</p>
-
- <p>CGI $B%W%m%0%i%`$O!"$=$NJ8;zNs$rLr$KN)$D>pJs$KJ,3d$9$k@UG$$,$"$j$^$9!#(B
- $B9,$$$K$b!"$=$N%G!<%?=hM}$r=u$1$k%i%$%V%i%j$d%b%8%e!<%k$,B8:_$7$^$9!#(B
- $B$3$l$i$O!"(BCGI $B%W%m%0%i%`$NB>$NLL$G$bF1MM$KLr$KN)$A$^$9!#(B</p>
- </section>
- </section>
-
- <section id="libraries">
- <title>CGI $B%b%8%e!<%k(B/$B%i%$%V%i%j(B</title>
-
- <p>CGI $B%W%m%0%i%`$r=q$/$H$-!"LLE]$J;E;v$NBgItJ,$r$7$F$/$l$k(B
- $B%3!<%I%i%$%V%i%j$^$?$O%b%8%e!<%k$r;H$&$3$H$r8!F$$9$Y$-$G$9!#(B
- $B$3$l$O%(%i!<$r8:$i$7!"Aa$$3+H/$K$D$J$,$j$^$9!#(B</p>
-
- <p>Perl $B$G(B CGI $B%W%m%0%i%`$r=q$$$F$$$k$J$i!"%b%8%e!<%k$O(B <a
- href="http://www.cpan.org/">CPAN</a> $B$GDs6!$5$l$F$$$^$9!#(B
- $B$3$NL\E*$N$?$a$N:G$bIa5Z$7$F$$$k%b%8%e!<%k$O(B <code>CGI.pm</code> $B$G$9!#(B
- <code>CGI::Lite</code> $B$b8!F$$7$^$7$g$&!#$3$l$O!"$[$H$s$I$N%W%m%0%i%`(B
- $B$K$*$$$FI,MW$H$9$k$9$Y$F$N5!G=$N:G>.%;%C%H$N<BAu$G$9!#(B</p>
-
- <p>C $B$G(B CGI $B%W%m%0%i%`$r=q$$$F$$$k$J$i!"$$$m$$$m$J(B
- $B%*%W%7%g%s$,$"$j$^$9!#$3$l$i$NFb$N0l$D$O(B <a
- href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
- $B$GDs6!$5$l$F$$$k(B <code>CGIC</code> $B%i%$%V%i%j$G$9!#(B</p>
- </section>
-
- <section id="moreinfo">
- <title>$B99$J$k>pJs(B</title>
-
- <p>CGI $B$K4X$9$k>pJs$O%&%'%V$G?tB?$/Ds6!$5$l$F$$$^$9!#(BCGI
- $B$NLdBj$K$D$$$F$O(B Usenet $B$N(B <a href="news:comp.infosystems.www.authoring.cgi"
- >comp.infosystems.www.authoring.cgi</a> $B$G!"(B
- $BB>$N%f!<%6$HO@5D$9$k$3$H$,$G$-$^$9!#(BHTML Writers Guide $B$N(B
- -servers $B%a!<%j%s%0%j%9%H$O!"$"$J$?$N<ALd$K2sEz$7$F$/$l$k0NBg$J%j%=!<%9$G$9!#(B
- <a href="http://www.hwg.org/lists/hwg-servers/"
- >http://www.hwg.org/lists/hwg-servers/</a>
- $B$G99$KB?$/$rC5$7=P$9$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$=$7$F$b$A$m$s!"$*$=$i$/(B CGI
- $B%W%m%0%i%`$NF0:n$K4X$9$k>\:Y$NA4$F$,5-=R$5$l$F$$$k(B
- CGI $B$N;EMM$rFI$`$Y$-$G$9!#%*%j%8%J%k%P!<%8%g%s$r(B
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>
- $B$G!"%"%C%W%G!<%H$5$l$?%I%i%U%H$r(B
- <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
- $B%W%m%8%'%/%H(B</a>$B$G;2>H$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>CGI $B$NLdBj$K$D$$$F!"2C$o$C$F$$$k%a!<%j%s%0%j%9%H$^$?$O%K%e!<%9(B
- $B%0%k!<%W$K<ALd$rAw$k$H$-!"5/$3$C$?$b$N!"5/$3$C$F$[$7$$$3$H!"(B
- $B<B:]$K5/$3$C$?$3$H$,$I$&0c$&$+!";HMQ$7$F$$$k%5!<%P!"(B
- CGI $B%W%m%0%i%`$r5-=R$7$F$$$k8@8l$K4X$9$k==J,$J>pJs$H!"(B
- $B2DG=$G$"$l$PLdBj$N%3!<%I$rDs6!$9$k$h$&$K$7$F$/$@$5$$!#(B
- $B$=$&$9$k$3$H$G!"LdBj$,$h$j4VC1$K8+$D$+$k$h$&$K$J$j$^$9!#(B</p>
-
- <p>Apache $B$N%=!<%9%3!<%I$K$*$$$FLdBj$rH/8+$7$?$3$H$r3N?.$7$F$$$J$$8B$j!"(B
- CGI $B$NLdBj$K4X$9$k<ALd$r(B Apache
- $B%P%0%G!<%?%Y!<%9$K(B<strong>$BAw$k$Y$-$G$J$$(B</strong>
- $B$3$H$KCmL\$7$F$/$@$5$$!#(B</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/howto/cgi.xml.ko b/docs/manual/howto/cgi.xml.ko
deleted file mode 100644
index 07b1fed16d..0000000000
--- a/docs/manual/howto/cgi.xml.ko
+++ /dev/null
@@ -1,518 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="cgi.xml.meta">
- <parentdocument href="./">How-To / Tutorials</parentdocument>
-
- <title>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: CGI¸¦ »ç¿ëÇÑ µ¿Àû ÆäÀÌÁö »ý¼º</title>
-
- <section id="intro">
- <title>¼Ò°³</title>
-
- <related>
- <modulelist>
- <module>mod_alias</module>
- <module>mod_cgi</module>
- </modulelist>
-
- <directivelist>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="core">Options</directive>
- <directive module="mod_alias">ScriptAlias</directive>
- </directivelist>
- </related>
-
- <p>CGI (Common Gateway Interface)´Â À¥¼­¹ö°¡ º¸Åë CGI ÇÁ·Î±×·¥
- ȤÀº CGI ½ºÅ©¸³Æ®¶ó°í ºÎ¸£´Â, (À¥ÆäÀÌÁö ³»¿ëÀ» ¸¸µå´Â) ¿ÜºÎ
- ÇÁ·Î±×·¥°ú Åë½ÅÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇÇÑ´Ù. À¥»çÀÌÆ®¿¡¼­ µ¿ÀûÀÎ
- ÆäÀÌÁö¸¦ ¸¸µå´Â °¡Àå ÈçÇÏ°í °£´ÜÇÑ ¹æ¹ýÀÌ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡
- À¥¼­¹ö¿¡ CGI¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÏ°í, CGI ÇÁ·Î±×·¥À»
- ÀÛ¼ºÇغ»´Ù.</p>
- </section>
-
- <section id="configuring">
- <title>CGI¸¦ Çã¿ëÇϵµ·Ï ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</title>
-
- <p>CGI ÇÁ·Î±×·¥ÀÌ ¿Ã¹Ù·Î µ¿ÀÛÇÏ·Á¸é CGI ½ÇÇàÀÌ °¡´ÉÇϵµ·Ï
- ¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. ¼³Á¤ÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡Áö´Ù.</p>
-
- <section id="scriptalias">
- <title>ScriptAlias</title>
-
- <p><directive module="mod_alias">ScriptAlias</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â ƯÁ¤ µð·ºÅ丮¸¦ CGI ÇÁ·Î±×·¥¿ëÀ¸·Î
- µÐ´Ù. ¾ÆÆÄÄ¡´Â ÀÌ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀÌ CGI
- ÇÁ·Î±×·¥À̶ó°í °¡Á¤ÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ ÀÚ¿øÀ» ¿äûÇϸé ÀÚ¿øÀ»
- ½ÇÇàÇÏ·Á°í ½ÃµµÇÑ´Ù.</p>
-
- <p><directive module="mod_alias">ScriptAlias</directive>
- Áö½Ã¾î´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <example>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </example>
-
- <p>À§ ¿¹Á¦´Â ¾ÆÆÄÄ¡¸¦ ±âº» Àå¼Ò¿¡ ¼³Ä¡ÇÑ °æ¿ì
- <code>httpd.conf</code> ¼³Á¤ÆÄÀÏ¿¡ ÀÖ´Â ³»¿ëÀÌ´Ù. <directive
- module="mod_alias">ScriptAlias</directive> Áö½Ã¾î´Â <directive
- module="mod_alias">Alias</directive> Áö½Ã¾î¿Í °°ÀÌ URL
- ¾ÕºÎºÐÀ» ƯÁ¤ µð·ºÅ丮·Î ´ëÀÀÇÑ´Ù.
- <directive>Alias</directive>¿Í
- <directive>ScriptAlias</directive>´Â º¸Åë <directive
- module="core">DocumentRoot</directive> µð·ºÅ丮 ¹Û¿¡ ÀÖ´Â
- µð·ºÅ丮¿¡ »ç¿ëÇÑ´Ù. <directive>Alias</directive>¿Í
- <directive>ScriptAlias</directive>ÀÇ Â÷ÀÌÁ¡Àº
- <directive>ScriptAlias</directive>°¡ Ãß°¡·Î URL ¾ÕºÎºÐÀ¸·Î
- ½ÃÀÛÇÏ´Â ¸ðµç ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î Ãë±ÞÇÏ´Â Á¡ÀÌ´Ù.
- ±×·¡¼­ À§ÀÇ ¼³Á¤Àº ¾ÆÆÄÄ¡¿¡°Ô <code>/cgi-bin/</code>À¸·Î
- ½ÃÀÛÇÏ´Â ÀÚ¿øÀ» ¿äûÇϸé
- <code>/usr/local/apache2/cgi-bin/</code> µð·ºÅ丮¿¡¼­
- ã¾Æ¼­ CGI ÇÁ·Î±×·¥À¸·Î ó¸®Ç϶ó°í ¾Ë¸°´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, URL
- <code>http://www.example.com/cgi-bin/test.pl</code>À»
- ¿äûÇÏ¸é ¾ÆÆÄÄ¡´Â
- <code>/usr/local/apache2/cgi-bin/test.pl</code> ÆÄÀÏÀ»
- ½ÇÇàÇÏ¿© °á°ú¸¦ ¹ÝȯÇÑ´Ù. ¹°·Ð ÆÄÀÏÀÌ Á¸ÀçÇÏ°í ½ÇÇà°¡´ÉÇϸç
- ¾î¶² ¹æ¹ýÀ¸·Îµç Ãâ·ÂÀ» ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¾ÆÆÄÄ¡´Â
- ¿À·ù¹®À» º¸³½´Ù.</p>
- </section>
-
- <section id="nonscriptalias">
- <title>ScriptAlias µð·ºÅ丮 ¹Û¿¡ ÀÖ´Â CGI</title>
-
- <p>º¸Åë º¸¾È»ó ÀÌÀ¯¶§¹®¿¡ CGI ÇÁ·Î±×·¥Àº <directive
- module="mod_alias">ScriptAlias</directive>ÇÑ µð·ºÅ丮¿¡
- ÇÑÁ¤ÇÑ´Ù. ±×·¡¼­ °ü¸®ÀÚ´Â ´©°¡ CGI ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö
- ÀÖ´ÂÁö ¾ö°ÝÈ÷ °¨µ¶ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Àû´çÇÑ º¸¾ÈÁ¶Ä¡¸¦
- ÃëÇß´Ù¸é ¾Æ¹« µð·ºÅ丮¿¡¼­³ª CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏÁö ¾ÊÀ»
- ÀÌÀ¯°¡ ¾ø´Ù. ¿¹¸¦ µé¾î, <directive
- module="mod_userdir">UserDir</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ È¨µð·ºÅ丮¿¡ À¥ÆäÀÌÁö¸¦ °¡Áö´Â °æ¿ì¸¦
- °¡Á¤ÇÏÀÚ. »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ CGI ÇÁ·Î±×·¥À» »ç¿ëÇÏ°í ½ÍÀºµ¥
- <code>cgi-bin</code> µð·ºÅ丮¿¡ Á¢±Ù±ÇÇÑÀÌ ¾ø´Ù¸é, ´Ù¸¥
- °÷¿¡¼­¶óµµ CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í ½ÍÀ» °ÍÀÌ´Ù.</p>
-
- <p>¾Æ¹« µð·ºÅ丮¿¡¼­³ª CGI ½ÇÇàÀ» Çã¿ëÇÏ·Á¸é µÎ °úÁ¤ÀÌ
- ÇÊ¿äÇÏ´Ù. ¸ÕÀú, <directive
- module="mod_mime">AddHandler</directive>³ª <directive
- module="core">SetHandler</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- <code>cgi-script</code> Çڵ鷯¸¦ ÀÛµ¿ÇØ¾ß ÇÑ´Ù. µÎ¹ø°·Î,
- <directive module="core">Options</directive> Áö½Ã¾î¿¡
- <code>ExecCGI</code>¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
- </section>
-
- <section id="options">
- <title>Options¸¦ »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î CGI ½ÇÇàÀ» Çã¿ëÇϱâ</title>
-
- <p>¼­¹öÀÇ ÁÖ¼³Á¤ÆÄÀÏ¿¡ Á÷Á¢ <directive
- module="core">Options</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ƯÁ¤
- µð·ºÅ丮¿¡¼­ CGI ½ÇÇàÀ» Çã¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example>
- &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
- <indent>
- Options +ExecCGI<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>À§ Áö½Ã¾î·Î ¾ÆÆÄÄ¡´Â CGI ÆÄÀÏÀÇ ½ÇÇàÀ» Çã¿ëÇÑ´Ù. ¾î¶²
- ÆÄÀÏÀÌ CGI ÆÄÀÏÀÎÁöµµ ¼­¹ö¿¡°Ô ¾Ë·Á¾ß ÇÑ´Ù. ´ÙÀ½ <directive
- module="mod_mime">AddHandler</directive> Áö½Ã¾î´Â ¼­¹ö¿¡°Ô
- È®ÀåÀÚ°¡ <code>cgi</code>³ª <code>pl</code>ÀÎ ÆÄÀÏÀº ¸ðµÎ
- CGI ÇÁ·Î±×·¥À̶ó°í ¾Ë¸°´Ù.</p>
-
- <example>
- AddHandler cgi-script .cgi .pl
- </example>
- </section>
-
- <section id="htaccess">
- <title>.htaccess ÆÄÀÏ</title>
-
- <p><a href="htaccess.html"><code>.htaccess</code> ÅõÅ丮¾ó</a>Àº
- <code>httpd.conf</code>¿¡ Á¢±Ù±ÇÇÑÀÌ ¾ø´Â °æ¿ì¿¡ CGI ÇÁ·Î±×·¥À»
- »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¾Ë·ÁÁØ´Ù.</p>
- </section>
-
- <section id="userdir">
- <title>»ç¿ëÀÚ µð·ºÅ丮</title>
-
- <p>¾Æ·¡ ¼³Á¤À» »ç¿ëÇÏ¸é »ç¿ëÀÚ µð·ºÅ丮¿¡¼­ <code>.cgi</code>·Î
- ³¡³ª´Â ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇÑ´Ù.</p>
-
- <example>
- &lt;Directory /home/*/public_html&gt;<br/>
- <indent>
- Options +ExecCGI<br/>
- AddHandler cgi-script .cgi<br/>
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>´ÙÀ½À» »ç¿ëÇÏ¸é »ç¿ëÀÚ µð·ºÅ丮ÀÇ <code>cgi-bin</code>
- ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î ÀνÄÇÑ´Ù.</p>
-
- <example>
- &lt;Directory /home/*/public_html/cgi-bin&gt;<br/>
- <indent>
- Options ExecCGI<br/>
- SetHandler cgi-script<br/>
- </indent>
- &lt;/Directory&gt;
- </example>
-
- </section>
-
- </section>
-
- <section id="writing">
- <title>CGI ÇÁ·Î±×·¥ ÀÛ¼ºÇϱâ</title>
-
- <p>``ÀϹÝÀûÀÎ'' ÇÁ·Î±×·¡¹Ö°ú CGI ÇÁ·Î±×·¡¹Ö »çÀÌ¿¡´Â µÎ°¡Áö
- ÁÖµÈ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù.</p>
-
- <p>ù¹ø° Â÷ÀÌ´Â CGI ÇÁ·Î±×·¥Àº ´Ù¸¥ Ãâ·ÂÀ» ÇϱâÀü¿¡ ¸ÕÀú
- MIME-type Çì´õ¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. HTTP Çì´õ´Â
- Ŭ¶óÀ̾ðÆ®¿¡°Ô Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ³»¿ëÀ» ¹Þ°ÔµÉÁö ¹Ì¸® ¾Ë¸°´Ù.
- º¸Åë ´ÙÀ½°ú °°´Ù.</p>
-
- <example>
- Content-type: text/html
- </example>
-
- <p>µÎ¹ø° Â÷ÀÌ´Â HTML ȤÀº ºê¶ó¿ìÀú°¡ º¸¿©ÁÙ ¼ö ÀÖ´Â Çü½ÄÀ¸·Î
- Ãâ·ÂÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ´ëºÎºÐÀÇ °æ¿ì HTMLÀ» Ãâ·ÂÇÏÁö¸¸,
- ¶§¶§·Î gif ±×¸²°ú °°ÀÌ HTMLÀÌ ¾Æ´Ñ ³»¿ëÀ» Ãâ·ÂÇÏ´Â CGI
- ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °æ¿ìµµ ÀÖ´Ù.</p>
-
- <p>µÎ°¡Áö¸¦ Á¦¿ÜÇÏ°í´Â CGI ÇÁ·Î±×·¥ ÀÛ¼ºÀº ÀÌ¹Ì ¸¸µé¾î º¸¾ÒÀ»
- ´Ù¸¥ ÇÁ·Î±×·¥µé°ú ¸Å¿ì ºñ½ÁÇÏ´Ù.</p>
-
- <section id="firstcgi">
- <title>óÀ½À¸·Î ¸¸µç CGI ÇÁ·Î±×·¥</title>
-
- <p>´ÙÀ½Àº ºê¶ó¿ìÀú¿¡ ÇÑ ÁÙÀ» Âï´Â CGI ÇÁ·Î±×·¥ ¿¹Á¦´Ù.
- ±×´ë·Î <code>first.pl</code>À̶ó´Â ÆÄÀÏ¿¡ ÀúÀåÇÏ°í,
- <code>cgi-bin</code> µð·ºÅ丮¿¡ º¹»çÇÑ´Ù.</p>
-
- <example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
- </example>
-
- <p>Perl¿¡ Àͼ÷ÇÏÁö ¾Ê´õ¶óµµ ¹«½¼ ÀÏÀÌ ÀϾ´ÂÁö ¾Ë ¼ö
- ÀÖ´Ù. ù¹ø° ÁÙÀº ¾ÆÆÄÄ¡(ȤÀº »ç¿ëÇÏ´Â ½©)¿¡°Ô
- <code>/usr/bin/perl</code> À§Ä¡¿¡ ÀÖ´Â ÀÎÅÍÇÁ¸®ÅÍÀ» »ç¿ëÇÏ¿©
- ÀÌ ÇÁ·Î±×·¥ ÆÄÀÏÀ» ½ÇÇàÇ϶ó°í ¾Ë¸°´Ù. µÎ¹ø° ÁÙÀº ¹æ±Ý
- ¸»ÇÑ content-type ¼±¾ðÀ» Ãâ·ÂÇÏ°í carriage-return ÁٹٲÞÀ»
- µÎ¹ø Ãâ·ÂÇÑ´Ù. ±×·¯¸é Çì´õ µÚ¿¡ HTTP Çì´õÀÇ ³¡À» ¶æÇÏ´Â
- ºóÁÙÀÌ »ý±â°í, º»¹®ÀÌ ½ÃÀÛÇÑ´Ù. ¼¼¹ø° ÁÙÀº "Hello, World."
- ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. ÀÌ°ÍÀ¸·Î ³¡ÀÌ´Ù.</p>
-
- <p>ºê¶ó¿ìÀú¸¦ ½ÇÇàÇÏ°í ÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ´Ù</p>
-
- <example>
- http://www.example.com/cgi-bin/first.pl
- </example>
-
- <p>ÆÄÀÏ Àå¼Ò¸¦ ÀÔ·ÂÇϸé, ºê¶ó¿ìÀúâ¿¡ <code>Hello, World.</code>
- ÇÑ ÁÙÀÌ º¸ÀδÙ. ÈïºÐµÇÁö´Â ¾ÊÁö¸¸, Çѹø µ¿ÀÛÇÏ´Â °ÍÀ»
- º¸¾ÒÀ¸´Ï ÀÌÁ¦ ´Ù¸¥ °ÍÀ» ½ÃµµÇØ º¼ ¼ö ÀÖ´Ù.</p>
- </section>
- </section>
-
- <section id="troubleshoot">
- <title>±×·¯³ª ¾ÆÁ÷ µ¿ÀÛÇÏÁö ¾Ê¾Æ¿ä!</title>
-
- <p>À¥¿¡¼­ CGI ÇÁ·Î±×·¥¿¡ Á¢±ÙÇÒ¶§ ºê¶ó¿ìÀú¿¡ ³ª¿Ã ¼ö ÀÖ´Â
- ³»¿ëÀº ±âº»ÀûÀ¸·Î ³×°¡Áö´Ù.</p>
-
- <dl>
- <dt>CGI ÇÁ·Î±×·¥ÀÇ Ãâ·Â</dt>
- <dd>ÁÁ´Ù! ¸ðµç °ÍÀÌ Àß µ¿ÀÛÇÑ´Ù´Â ¶æÀÌ´Ù. Ãâ·ÂÀº Á¤È®ÇÏÁö¸¸
- ºê¶ó¿ìÀú°¡ ¿Ã¹Ù·Î ó¸®ÇÏÁö ¸øÇÑ´Ù¸é, CGI ÇÁ·Î±×·¥¿¡¼­
- ¿Ã¹Ù¸¥ <code>Content-Type</code>À» ¼³Á¤ÇÏ¿´´ÂÁö È®ÀÎÇÑ´Ù.</dd>
-
- <dt>CGI ÇÁ·Î±×·¥ ¼Ò½ºÄÚµå ȤÀº "POST Method Not Allowed"
- ¹®±¸</dt>
- <dd>CGI ÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ¾ÆÆÄÄ¡¸¦ ÀûÀýÈ÷ ¼³Á¤ÇÏÁö
- ¾Ê¾Ò´Ù´Â ¶æÀÌ´Ù. <a href="#configuring">¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a>
- ÀýÀ» ´Ù½Ã ÀÐ°í »©¸ÔÀº ºÎºÐÀÌ ÀÖ´ÂÁö ã¾ÆºÁ¶ó.</dd>
-
- <dt>"Forbidden"À¸·Î ½ÃÀÛÇÏ´Â ¹®±¸</dt>
- <dd>±ÇÇÑ ¹®Á¦°¡ ÀÖ´Ù´Â ¶æÀÌ´Ù. <a href="#errorlogs">¾ÆÆÄÄ¡
- ¿À·ù ·Î±×</a>¿Í ¾Æ·¡ <a href="#permissions">ÆÄÀϱÇÇÑ</a>
- ÀýÀ» È®ÀÎÇ϶ó.</dd>
-
- <dt>"Internal Server Error"¶ó´Â ¹®±¸</dt>
- <dd><a href="#errorlogs">¾ÆÆÄÄ¡ ¿À·ù ·Î±×</a>¸¦ º¸¸é ¾Æ¸¶µµ
- CGI ÇÁ·Î±×·¥ÀÌ Ãâ·ÂÇÑ ¿À·ù¹®°ú ÇÔ²² "Premature end of
- script headers"°¡ º¸ÀÏ °ÍÀÌ´Ù. ÀÌ °æ¿ì ¾Æ·¡ ³»¿ëµéÀ» Çϳª¾¿
- È®ÀÎÇÏ¿© ¾î¶² ÀÌÀ¯·Î CGI ÇÁ·Î±×·¥ÀÌ ÀûÀýÇÑ HTTP Çì´õ¸¦
- Ãâ·ÂÇÏÁö ¸øÇß´ÂÁö ¾Ë¾Æº»´Ù.</dd>
- </dl>
-
- <section id="permissions">
- <title>ÆÄÀϱÇÇÑ</title>
-
- <p>¼­¹ö´Â ´ç½Å°ú µ¿ÀÏÇÑ °èÁ¤À¸·Î µ¿ÀÛÇÏÁö ¾ÊÀ½À» ¸í½ÉÇ϶ó.
- Áï, ¼­¹ö°¡ ½ÃÀÛÇÏ¸é ¼­¹ö´Â ºñƯ±Ç »ç¿ëÀÚ ±ÇÇÑ(º¸Åë
- <code>nobody</code>³ª <code>www</code>)À¸·Î µ¿ÀÛÇÑ´Ù.
- ±×·¡¼­ ´ç½ÅÀÌ ¼ÒÀ¯ÇÑ ÆÄÀÏÀ» ½ÇÇàÇÏ·Á¸é ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù.
- ÆÄÀÏ¿¡ <code>nobody</code>°¡ ½ÇÇàÇϱ⿡ ÃæºÐÇÑ ±ÇÇÑÀ»
- ÁÖ±âÀ§ÇØ º¸Åë ¸ðµÎ¿¡°Ô ÆÄÀÏÀÇ ½ÇÇà ±ÇÇÑÀ» ÁØ´Ù.</p>
-
- <example>
- chmod a+x first.pl
- </example>
-
- <p>¶Ç, ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ÆÄÀÏÀ» Àаųª ¾´´Ù¸é ÀÌ ÆÄÀÏ¿¡µµ
- ÀûÀýÇÑ ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù.</p>
-
- </section>
-
- <section id="pathinformation">
- <title>°æ·Î Á¤º¸¿Í ȯ°æ</title>
-
- <p>¸í·ÉÇà¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé ÀÚµ¿À¸·Î ¾î¶² Á¤º¸°¡
- ½©·Î Àü´ÞµÈ´Ù. ¿¹¸¦ µé¾î, <code>PATH</code>´Â ½©¿¡°Ô ´ç½ÅÀÌ
- ¸»ÇÑ ÆÄÀÏÀ» ãÀ» Àå¼Ò¸¦ ¾Ë·ÁÁØ´Ù.</p>
-
- <p>À¥¼­¹ö°¡ ÇÁ·Î±×·¥À» CGI ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇÒ¶§´Â
- <code>PATH</code>°¡ ´Ù¸¦ ¼ö ÀÖ´Ù. (¿¹¸¦ µé¾î,
- <code>sendmail</code> °°ÀÌ) CGI ÇÁ·Î±×·¥ ¾È¿¡¼­ ½ÇÇàÇÏ´Â
- ¸í·É¾î´Â ¿ÏÀüÇÑ °æ·Î·Î ¸í½ÃÇØ¾ß ½©ÀÌ ¸í·É¾î¸¦ ãÀ» ¼ö
- ÀÖ´Ù.</p>
-
- <p>°æ·Î ¹®Á¦´Â ´ÙÀ½°ú °°ÀÌ CGI ÇÁ·Î±×·¥ ù¹ø° ÁÙ¿¡ ³ª¿À´Â
- ½ºÅ©¸³Æ® ÀÎÅÍÇÁ¸®ÅÍ (º¸Åë <code>perl</code>) °æ·Î¿¡¼­
- ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <example>
- #!/usr/bin/perl
- </example>
-
- <p>½ÇÁ¦·Î ÀÎÅÍÇÁ¸®ÅÍÀÇ °æ·ÎÀÎÁö È®ÀÎÇÑ´Ù.</p>
-
- <p>¶Ç, CGI ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ <a href="#env">ȯ°æº¯¼ö</a>¸¦
- »ç¿ëÇÑ´Ù¸é ¾ÆÆÄÄ¡°¡ ÀÌ º¯¼öµéÀ» ÇÁ·Î±×·¥¿¡°Ô Àü´ÞÇؾß
- ÇÑ´Ù.</p>
-
- </section>
-
- <section id="syntaxerrors">
- <title>ÇÁ·Î±×·¥ ¿À·ù</title>
-
- <p>CGI ÇÁ·Î±×·¥ÀÌ ½ÇÆÐÇÏ´Â °æ¿ì ´ëºÎºÐ ÇÁ·Î±×·¥ ÀÚü
- ¹®Á¦¶§¹®ÀÌ´Ù. ƯÈ÷ À§ÀÇ µÎ°¡Áö ½Ç¼ö¸¦ ÇÏÁö ¾Ê¾Ò°í ÀÌ ±ÛÀ»
- °è¼Ó º¸°í ÀÖ´Ù¸é ´õ´õ¿í ±×·¸´Ù. ¸ÕÀú À¥¼­¹ö¿¡¼­ ½ÇÇàÇϱâ
- Àü¿¡ ¸í·ÉÇà¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇغ»´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú
- °°ÀÌ ½ÇÇàÇÑ´Ù.</p>
-
- <example>
- cd /usr/local/apache2/cgi-bin<br/>
- ./first.pl
- </example>
-
- <p>(<code>perl</code> ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇàÇÏÁö ¸¶¶ó. ½©°ú
- ¾ÆÆÄÄ¡´Â ½ºÅ©¸³Æ® ù¹ø° ÁÙ¿¡ ÀÖ´Â <a
- href="#pathinformation">°æ·Î Á¤º¸</a>¸¦ »ç¿ëÇÏ¿© ÀÎÅÍÇÁ¸®Å͸¦
- ã¾Æ¾ß ÇÑ´Ù.)</p>
-
- <p>ÇÁ·Î±×·¥Àº Á¦ÀÏ ¸ÕÀú <code>Content-Type</code>À» Æ÷ÇÔÇÑ
- HTTP Çì´õµéÀ» Ãâ·ÂÇÏ°í ºó ÁÙÀ» Ãâ·ÂÇØ¾ß ÇÑ´Ù. ´Ù¸¥ °ÍÀ»
- Ãâ·ÂÇÑ´Ù¸é À¥¼­¹ö¿¡¼­ ½ÇÇàÇÒ °æ¿ì ¾ÆÆÄÄ¡´Â <code>Premature
- end of script headers</code>¸¦ ¹ÝȯÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº
- À§ÀÇ <a href="#writing">CGI ÇÁ·Î±×·¥ ÀÛ¼ºÇϱâ</a>¸¦ Âü°íÇ϶ó.</p>
- </section>
-
- <section id="errorlogs">
- <title>¿À·ù ·Î±×</title>
-
- <p>¿À·ù ·Î±×´Â ´ç½Å ÆíÀÌ´Ù. ¹«¾ð°¡ À߸øµÇ¸é ¿À·ù ·Î±×¿¡
- ¹®±¸°¡ »ý±ä´Ù. ¿À·ù ·Î±×¸¦ Á¦ÀÏ ¸ÕÀú »ìÆìºÁ¾ß ÇÑ´Ù. À¥»çÀÌÆ®¸¦
- È£½ºÆÃÇÏ´Â °÷¿¡¼­ ¿À·ù ·Î±×¸¦ º¸Áö ¸øÇÏ°Ô ÇÑ´Ù¸é, ¾Æ¸¶µµ
- ´Ù¸¥ ¾÷ü¸¦ ¾Ë¾ÆºÁ¾ß ÇÑ´Ù. ¿À·ù ·Î±×¸¦ º¸´Â ¹æ¹ýÀ» ÀÍÈ÷¸é,
- ´ëºÎºÐÀÇ ¹®Á¦¸¦ »¡¸® ÆľÇÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù.</p>
- </section>
-
- <section id="suexec">
- <title>Suexec</title>
-
- <p><a href="../suexec.html">suexec</a> Áö¿ø ÇÁ·Î±×·¥À»
- »ç¿ëÇÏ¸é ¾î¶² °¡»óÈ£½ºÆ® ȤÀº ¾î¶² »ç¿ëÀÚ µð·ºÅ丮¿¡ ÀÖ´ÂÁö¿¡
- µû¶ó CGI ÇÁ·Î±×·¥À» ´Ù¸¥ »ç¿ëÀÚ ±ÇÇÑÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- Suexec´Â ¸Å¿ì ¾ö°ÝÇÏ°Ô ±ÇÇÑÀ» °Ë»çÇϸç, °Ë»ç¸¦ Çϳª¶óµµ
- Åë°úÇÏÁö ¸øÇϸé CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÏÁö ¾Ê°í <code>Premature
- end of script headers</code>¸¦ ¹ÝȯÇÑ´Ù.</p>
-
- <p>suexec¸¦ »ç¿ëÇÏ°í ÀÖ´ÂÁö ¾Ë·Á¸é <code>apachectl -V</code>¸¦
- ½ÇÇàÇÏ¿© <code>SUEXEC_BIN</code> À§Ä¡¸¦ È®ÀÎÇÑ´Ù. ¾ÆÆÄÄ¡°¡
- ½ÃÀÛÇÒ¶§ ±× Àå¼Ò¿¡¼­ suexec ½ÇÇàÆÄÀÏÀ» ¹ß°ßÇϸé, suexec¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>suexec¸¦ ¿ÏÀüÈ÷ ÀÌÇØÇÏÁö ¸øÇß´Ù¸é »ç¿ëÇؼ­´Â ¾ÈµÈ´Ù.
- suexec¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é <code>SUEXEC_BIN</code> À§Ä¡¿¡
- ÀÖ´Â <code>suexec</code> ½ÇÇàÆÄÀÏÀ» Áö¿ì°í (ȤÀº ÆÄÀϸíÀ»
- ¹Ù²Ù°í) ¼­¹ö¸¦ Àç½ÃÀÛÇÏ¸é µÈ´Ù. <a
- href="../suexec.html">suexec</a>¿¡ ´ëÇØ ÀÐÀº ´ÙÀ½ ±×·¡µµ
- »ç¿ëÇÏ°í ½Í´Ù¸é, <code>suexec -V</code>¸¦ ½ÇÇàÇÏ¿© suexec
- ·Î±×ÆÄÀÏ À§Ä¡¸¦ ¾Ë¾Æ³»°í ·Î±×ÆÄÀÏ¿¡¼­ ´ç½ÅÀÌ ¾î¶² ±ÔÄ¢À»
- ¾î±â°í ÀÖ´ÂÁö ã´Â´Ù.</p>
- </section>
- </section>
-
- <section id="behindscenes">
- <title>µÚ¿¡¼­´Â ¹«½¼ ÀÏÀÌ ¹ú¾îÁö´Â°¡?</title>
-
- <p>CGI ÇÁ·Î±×·¡¹Ö¿¡ Àͼ÷ÇØÁú¼ö·Ï µÚ¿¡¼­ ¹ú¾îÁö´Â ÀÏÀ» ÀÌÇØÇϸé
- µµ¿òÀÌ µÈ´Ù. ±¸Ã¼ÀûÀ¸·Î ºê¶ó¿ìÀú¿Í ¼­¹ö°¡ ¼­·Î Åë½ÅÇÏ´Â
- ¹æ¹ýÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. ¸ô¶óµµ "Hello, World."¸¦ Ãâ·ÂÇÏ´Â
- ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·± ÇÁ·Î±×·¥Àº º°·Î ¾µ¸ð°¡
- ¾ø±â¶§¹®ÀÌ´Ù.</p>
-
- <section id="env">
- <title>ȯ°æº¯¼ö</title>
-
- <p>ȯ°æº¯¼ö´Â ´ç½ÅÀÌ ÄÄÇ»Å͸¦ »ç¿ëÇÏ´Â µ¿¾È ´ç½Å ÁÖÀ§¸¦
- ¶°´Ù´Ï´Â °ªÀÌ´Ù. ȯ°æº¯¼ö´Â path (ÄÄÇ»ÅÍ°¡ ´ç½ÅÀÌ ÀÔ·ÂÇÑ
- ¸í·É¾î¿¡ ÇØ´çÇÏ´Â ½ÇÁ¦ ÆÄÀÏÀ» ã´Â Àå¼Ò), »ç¿ëÀÚ¸í, Å͹̳Î
- Á¾·ù¿Í °°ÀÌ À¯¿ëÇÑ Á¤º¸´Ù. ÀϹÝÀûÀΠȯ°æº¯¼ö¸¦ ¸ðµÎ º¸·Á¸é
- ¸í·ÉÇà ÇÁ·ÒÇÁÆ®¿¡¼­ <code>env</code>¸¦ ÀÔ·ÂÇÑ´Ù.</p>
-
- <p>CGI¸¦ ½ÇÇàÇÒ¶§µµ ¼­¹ö¿Í ºê¶ó¿ìÀú´Â °¢ÀÚÀÇ È¯°æº¯¼ö¸¦
- ¼­·Î ±³È¯ÇÑ´Ù. ÀÌ Á¤º¸¿¡´Â ºê¶ó¿ìÀú Á¾·ù (Netscape, IE,
- Lynx), ¼­¹ö Á¾·ù (¾ÆÆÄÄ¡, IIS, WebSite), ½ÇÇàÇÏ´Â CGI
- ÇÁ·Î±×·¥¸í µîÀÌ ÀÖ´Ù.</p>
-
- <p>CGI ÇÁ·Î±×·¡¸Ó´Â ÀÌ·± º¯¼öµéÀ» »ç¿ëÇÒ ¼ö ÀÖ°í,
- ȯ°æº¯¼ö´Â Ŭ¶óÀ̾ðÆ®-¼­¹ö Åë½Å¿¡´Â ÀϺκÐÀ» Â÷ÁöÇÑ´Ù.
- Àüü Çʼö º¯¼ö ¸ñ·ÏÀº <a
- href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
- >http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>¿¡ ÀÖ´Ù.</p>
-
- <p>¾Æ·¡ °£´ÜÇÑ Perl CGI ÇÁ·Î±×·¥Àº Àڽſ¡°Ô Àü´ÞµÈ ¸ðµç
- ȯ°æº¯¼ö¸¦ º¸¿©ÁØ´Ù. ¾ÆÆÄÄ¡ ¹èÆ÷º»ÀÇ <code>cgi-bin</code>
- µð·ºÅ丮¿¡ ÀÌ¿Í ºñ½ÁÇÑ ÇÁ·Î±×·¥ÀÌ µÎ°³ ÀÖ´Ù. ¸î¸î º¯¼ö´Â
- ÇʼöÀÌ°í ³ª¸ÓÁö´Â ¼±ÅÃÀûÀÌ´Ù. ±×·¡¼­ °ø½Ä ¸ñ·Ï¿¡ ¾ø´Â
- º¯¼öµµ º¸ÀδÙ. ¶Ç, ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î Á¦°øÇϴ ȯ°æº¯¼ö
- ¿Ü¿¡ ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î <a href="../env.html">Á÷Á¢ ȯ°æº¯¼ö¸¦
- Ãß°¡ÇÒ ¼ö ÀÖ´Ù</a>.</p>
-
- <example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <indent>
- print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
- </indent>
- }
- </example>
- </section>
-
- <section id="stdin">
- <title>STDIN°ú STDOUT</title>
-
- <p>¶Ç, ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®´Â Ç¥ÁØÀÔ·Â(<code>STDIN</code>)°ú
- Ç¥ÁØÃâ·Â(<code>STDOUT</code>)À¸·Î Åë½ÅÇÑ´Ù. ÀÏ»óÀûÀÎ °æ¿ì
- <code>STDIN</code>Àº Å°º¸µå³ª ÇÁ·Î±×·¥ÀÌ Ã³¸®ÇÏ´Â ÆÄÀÏÀ»
- ³ªÅ¸³»°í, <code>STDOUT</code>Àº º¸Åë ÄܼÖÀ̳ª È­¸éÀ» ¶æÇÑ´Ù.</p>
-
- <p>CGI ÇÁ·Î±×·¥¿¡°Ô À¥ ¾ç½Ä(form)À» <code>POST</code>Çϸé
- ¾ç½Ä¿¡ ÀÔ·ÂÇÑ ÀڷḦ Ưº°ÇÑ Çü½ÄÀ¸·Î ¹­¾î¼­ CGI ÇÁ·Î±×·¥ÀÇ
- <code>STDIN</code>À¸·Î Àü´ÞÇÑ´Ù. ±×·¯¸é ÇÁ·Î±×·¥Àº Å°º¸µå³ª
- ÆÄÀÏ¿¡¼­ ¾òÀº ÀڷḦ ó¸®ÇϵíÀÌ ÀڷḦ ó¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>"Ưº°ÇÑ Çü½Ä"Àº ¸Å¿ì °£´ÜÇÏ´Ù. Ç׸ñ À̸§°ú °ªÀ» µîÈ£(=)·Î
- ¿¬°áÇÏ°í, Ç׸ñ À̸§°ú °ªÀÇ ½ÖµéÀ» ¼­·Î ¾ØÆÛ»÷µå(&amp;)·Î
- ¿¬°áÇÑ´Ù. °ø¹é, ¾ÚÆÛ»÷µå, µîÈ£ °°Àº ºÎÀÚ¿¬½º·¯¿î ¹®ÀÚ´Â
- È¥µ¿ÇÏÁö ¾Êµµ·Ï 16Áø¼ö·Î º¯È¯ÇÑ´Ù. ¿ÏÀüÇÑ ÀÚ·á ¹®ÀÚ¿­Àº
- ´ÙÀ½°ú °°ÀÌ »ý°å´Ù.</p>
-
- <example>
- name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
- </example>
-
- <p>Á¾Á¾ URL µÚ¿¡¼­ ÀÌ·± ¹®ÀÚ¿­À» º¸°Ô µÈ´Ù. ÀÌ °æ¿ì ¼­¹ö´Â
- ¹®ÀÚ¿­À» <code>QUERY_STRING</code>À̶ó´Â ȯ°æº¯¼ö¿¡ ÀúÀåÇÑ´Ù.
- À̸¦ <code>GET</code> ¿äûÀ̶ó°í ÇÑ´Ù. <code>FORM</code>
- ű×ÀÇ <code>METHOD</code> ¼Ó¼ºÀ» ÁöÁ¤ÇÏ¿© HTML ¾ç½Ä(form)ÀÌ
- ÀڷḦ <code>GET</code>ÇÒÁö <code>POST</code>ÇÒÁö °áÁ¤ÇÑ´Ù.</p>
-
- <p>ÀÌÁ¦ ÇÁ·Î±×·¥Àº ÀÌ·± ¹®ÀÚ¿­À» À¯¿ëÇÑ Á¤º¸·Î ÂÉ°³¾ß
- ÇÑ´Ù. ´ÙÇàÈ÷µµ ÀÌ·± ÀÚ·á 󸮸¦ µ½°í CGI ÇÁ·Î±×·¥ÀÇ ´Ù¸¥
- ¿©·¯ ¸éÀ» »ìÇÇ´Â ¶óÀ̺귯¸®¿Í ¸ðµâµéÀÌ ÀÖ´Ù.</p>
- </section>
- </section>
-
- <section id="libraries">
- <title>CGI ¸ðµâ/¶óÀ̺귯¸®</title>
-
- <p>CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§ Áö·çÇÑ ÀÛ¾÷À» ´ë½ÅÇØÁÖ´Â ÄÚµå
- ¶óÀ̺귯¸® ȤÀº ¸ðµâÀ» »ç¿ëÇÒÁö °í·ÁÇغÁ¾ß ÇÑ´Ù. ÀÌ·± °ÍÀ»
- »ç¿ëÇÏ¸é ¹ö±×°¡ ÁÙ°í ´õ »¡¸® ÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Perl·Î CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é <a
- href="http://www.cpan.org/">CPAN</a>¿¡¼­ °ü·Ã ¸ðµâµéÀ» ãÀ»
- ¼ö ÀÖ´Ù. CGI °³¹ß¿¡ °¡Àå ³Î¸® »ç¿ëµÇ´Â ¸ðµâÀº
- <code>CGI.pm</code>ÀÌ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥¿¡ ÃæºÐÇÑ ÃÖ¼Ò
- ±â´ÉÀ» ±¸ÇöÇÑ <code>CGI::Lite</code>µµ °í·ÁÇØ º¼ ¼ö ÀÖ´Ù.</p>
-
- <p>C·Î CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é ¼±ÅÃÀÇ ¿©Áö°¡ ¸¹´Ù. ÀÌÁß
- Çϳª°¡ <a
- href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>¿¡
- ÀÖ´Â <code>CGIC</code> ¶óÀ̺귯¸®´Ù.</p>
- </section>
-
- <section id="moreinfo">
- <title>´õ ¸¹Àº Á¤º¸...</title>
-
- <p>À¥¿¡ ¸Å¿ì ¸¹Àº CGI Á¤º¸°¡ ÀÖ´Ù. ´º½º±×·ì <a
- href="news:comp.infosystems.www.authoring.cgi"
- >comp.infosystems.www.authoring.cgi</a>¿¡¼­ ¿©·¯ »ç¶÷µé°ú
- CGI ¹®Á¦¸¦ ³íÀÇÇÒ ¼ö ÀÖ´Ù. HTML Writers GuildÀÇ -servers
- ¸ÞÀϸµ¸®½ºÆ®´Â Áú¹®¿¡ ´ëÇÑ ´äÀ» ã±â¿¡ ÈǸ¢ÇÑ Àå¼Ò´Ù. <a
- href="http://www.hwg.org/lists/hwg-servers/"
- >http://www.hwg.org/lists/hwg-servers/</a>¿¡¼­ ´õ ¸¹Àº °ÍÀ»
- ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <p>±×¸®°í ¹°·Ð CGI ÇÁ·Î±×·¥ µ¿ÀÛ¿¡ ´ëÇÑ ¸ðµç ³»¿ëÀ» ¼³¸íÇÑ
- CGI ±Ô¾àÀ» Àоî¾ß ÇÒÁöµµ ¸ð¸¥´Ù. <a
- href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>¿¡
- ¿øº» ¹®¼­°¡ ÀÖ°í, ¼öÁ¤ÇÑ ÃʾÈÀº <a
- href="http://web.golux.com/coar/cgi/">Common Gateway Interface
- RFC ÇÁ·ÎÁ§Æ®</a>¿¡ ÀÖ´Ù.</p>
-
- <p>¸ÞÀϸµ¸®½ºÆ®³ª ´º½º±×·ì¿¡ ÇöÀç °Ý°í ÀÖ´Â CGI ¹®Á¦¿¡ ´ëÇØ
- Áú¹®ÇÒ¶§´Â ¹ß»ýÇÑ Çö»ó°ú ¿ø·¡ ±â´ëÇÑ °á°ú, ½ÇÁ¦·Î ¹ß»ýÇÑ
- Çö»óÀÌ ¾î¶»°Ô ´Ù¸¥Áö, »ç¿ëÇÏ´Â ¼­¹ö, CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ
- ¾ð¾î, °¡´ÉÇϸé ÇØ´ç Äڵ带 ÀÚ¼¼È÷ Àû¾î¶ó. ±×·¯¸é ÇØ°áÃ¥À»
- ã±â ½¬¿öÁø´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ ¼Ò½ºÄڵ尡 À߸øµÇ¾ú´Ù°í È®½ÅÇÏÁö ¾Ê´Â ÇÑ CGI Áú¹®À»
- ¾ÆÆÄÄ¡ ¹ö±× µ¥ÀÌÅͺ£À̽º¿¡ ¿Ã¸®¸é <strong>Àý´ë·Î</strong>
- ¾ÈµÈ´Ù.</p>
- </section>
-</manualpage>
-
diff --git a/docs/manual/howto/cgi.xml.meta b/docs/manual/howto/cgi.xml.meta
deleted file mode 100644
index b941092d76..0000000000
--- a/docs/manual/howto/cgi.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>cgi</basename>
- <path>/howto/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/howto/htaccess.html b/docs/manual/howto/htaccess.html
deleted file mode 100755
index adc6caa6a6..0000000000
--- a/docs/manual/howto/htaccess.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: htaccess.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: htaccess.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: htaccess.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/howto/htaccess.html.en b/docs/manual/howto/htaccess.html.en
deleted file mode 100644
index c56c1eb09e..0000000000
--- a/docs/manual/howto/htaccess.html.en
+++ /dev/null
@@ -1,355 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Tutorial: .htaccess files - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: .htaccess files</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/htaccess.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p><code>.htaccess</code> files provide a way to make configuration
-changes on a per-directory basis.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess files</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">What they are/How to use them</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#when">When (not) to use .htaccess files</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#how">How directives are applied</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#auth">Authentication example</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Server Side Includes example</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI example</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Troubleshooting</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">.htaccess files</a></h2>
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">What they are/How to use them</a></h2>
-
-
- <p><code>.htaccess</code> files (or "distributed configuration files")
- provide a way to make configuration changes on a per-directory basis. A
- file, containing one or more configuration directives, is placed in a
- particular document directory, and the directives apply to that
- directory, and all subdirectories thereof.</p>
-
- <div class="note"><h3>Note:</h3>
- <p>If you want to call your <code>.htaccess</code> file something
- else, you can change the name of the file using the <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> directive. For example,
- if you would rather call the file <code>.config</code> then you
- can put the following in your server configuration file:</p>
-
- <div class="example"><p><code>
- AccessFileName .config
- </code></p></div>
- </div>
-
- <p>In general, <code>.htaccess</code> files use the same syntax as
- the <a href="../configuring.html#syntax">main configuration
- files</a>. What you can put in these files is determined by the
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive. This
- directive specifies, in categories, what directives will be
- honored if they are found in a <code>.htaccess</code> file. If a
- directive is permitted in a <code>.htaccess</code> file, the
- documentation for that directive will contain an Override section,
- specifying what value must be in <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> in order for that
- directive to be permitted.</p>
-
- <p>For example, if you look at the documentation for the <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>
- directive, you will find that it is permitted in <code>.htaccess</code>
- files. (See the Context line in the directive summary.) The <a href="../mod/directive-dict.html#Context">Override</a> line reads
- <code>FileInfo</code>. Thus, you must have at least
- <code>AllowOverride FileInfo</code> in order for this directive to be
- honored in <code>.htaccess</code> files.</p>
-
- <div class="example"><h3>Example:</h3><table>
- <tr>
- <td><a href="../mod/directive-dict.html#Context">Context:</a></td>
- <td>server config, virtual host, directory, .htaccess</td>
- </tr>
-
- <tr>
- <td><a href="../mod/directive-dict.html#Override">Override:</a></td>
- <td>FileInfo</td>
- </tr>
- </table></div>
-
- <p>If you are unsure whether a particular directive is permitted in a
- <code>.htaccess</code> file, look at the documentation for that
- directive, and check the Context line for ".htaccess".</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="when" id="when">When (not) to use .htaccess files</a></h2>
-
- <p>In general, you should never use <code>.htaccess</code> files unless
- you don't have access to the main server configuration file. There is,
- for example, a prevailing misconception that user authentication should
- always be done in <code>.htaccess</code> files. This is simply not the
- case. You can put user authentication configurations in the main server
- configuration, and this is, in fact, the preferred way to do
- things.</p>
-
- <p><code>.htaccess</code> files should be used in a case where the
- content providers need to make configuration changes to the server on a
- per-directory basis, but do not have root access on the server system.
- In the event that the server administrator is not willing to make
- frequent configuration changes, it might be desirable to permit
- individual users to make these changes in <code>.htaccess</code> files
- for themselves. This is particularly true, for example, in cases where
- ISPs are hosting multiple user sites on a single machine, and want
- their users to be able to alter their configuration.</p>
-
- <p>However, in general, use of <code>.htaccess</code> files should be
- avoided when possible. Any configuration that you would consider
- putting in a <code>.htaccess</code> file, can just as effectively be
- made in a <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> section in your main server
- configuration file.</p>
-
- <p>There are two main reasons to avoid the use of
- <code>.htaccess</code> files.</p>
-
- <p>The first of these is performance. When <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- is set to allow the use of <code>.htaccess</code> files, Apache will
- look in every directory for <code>.htaccess</code> files. Thus,
- permitting <code>.htaccess</code> files causes a performance hit,
- whether or not you actually even use them! Also, the
- <code>.htaccess</code> file is loaded every time a document is
- requested.</p>
-
- <p>Further note that Apache must look for <code>.htaccess</code> files
- in all higher-level directories, in order to have a full complement of
- directives that it must apply. (See section on <a href="#how">how
- directives are applied</a>.) Thus, if a file is requested out of a
- directory <code>/www/htdocs/example</code>, Apache must look for the
- following files:</p>
-
- <div class="example"><p><code>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/example/.htaccess
- </code></p></div>
-
- <p>And so, for each file access out of that directory, there are 4
- additional file-system accesses, even if none of those files are
- present. (Note that this would only be the case if
- <code>.htaccess</code> files were enabled for <code>/</code>, which
- is not usually the case.)</p>
-
- <p>The second consideration is one of security. You are permitting
- users to modify server configuration, which may result in changes over
- which you have no control. Carefully consider whether you want to give
- your users this privilege. Note also that giving users less
- privileges than they need will lead to additional technical support
- requests. Make sure you clearly tell your users what level of
- privileges you have given them. Specifying exactly what you have set
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> to, and pointing them
- to the relevant documentation, will save yourself a lot of confusion
- later.</p>
-
- <p>Note that it is completely equivalent to put a <code>.htaccess</code>
- file in a directory <code>/www/htdocs/example</code> containing a
- directive, and to put that same directive in a Directory section
- <code>&lt;Directory /www/htdocs/example&gt;</code> in your main server
- configuration:</p>
-
- <p><code>.htaccess</code> file in <code>/www/htdocs/example</code>:</p>
-
- <div class="example"><h3>Contents of .htaccess file in
- <code>/www/htdocs/example</code></h3><p><code>
- AddType text/example .exm
- </code></p></div>
-
- <div class="example"><h3>Section from your <code>httpd.conf</code>
- file</h3><p><code>
- &lt;Directory /www/htdocs/example&gt;<br />
- <span class="indent">
- AddType text/example .exm<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>However, putting this configuration in your server configuration
- file will result in less of a performance hit, as the configuration is
- loaded once when Apache starts, rather than every time a file is
- requested.</p>
-
- <p>The use of <code>.htaccess</code> files can be disabled completely
- by setting the <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- directive to <code>none</code>:</p>
-
- <div class="example"><p><code>
- AllowOverride None
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how" id="how">How directives are applied</a></h2>
-
- <p>The configuration directives found in a <code>.htaccess</code> file
- are applied to the directory in which the <code>.htaccess</code> file
- is found, and to all subdirectories thereof. However, it is important
- to also remember that there may have been <code>.htaccess</code> files
- in directories higher up. Directives are applied in the order that they
- are found. Therefore, a <code>.htaccess</code> file in a particular
- directory may override directives found in <code>.htaccess</code> files
- found higher up in the directory tree. And those, in turn, may have
- overridden directives found yet higher up, or in the main server
- configuration file itself.</p>
-
- <p>Example:</p>
-
- <p>In the directory <code>/www/htdocs/example1</code> we have a
- <code>.htaccess</code> file containing the following:</p>
-
- <div class="example"><p><code>
- Options +ExecCGI
- </code></p></div>
-
- <p>(Note: you must have "<code>AllowOverride Options</code>" in effect
- to permit the use of the "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" directive in
- <code>.htaccess</code> files.)</p>
-
- <p>In the directory <code>/www/htdocs/example1/example2</code> we have
- a <code>.htaccess</code> file containing:</p>
-
- <div class="example"><p><code>
- Options Includes
- </code></p></div>
-
- <p>Because of this second <code>.htaccess</code> file, in the directory
- <code>/www/htdocs/example1/example2</code>, CGI execution is not
- permitted, as only <code>Options Includes</code> is in effect, which
- completely overrides any earlier setting that may have been in
- place.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="auth" id="auth">Authentication example</a></h2>
-
- <p>If you jumped directly to this part of the document to find out how
- to do authentication, it is important to note one thing. There is a
- common misconception that you are required to use
- <code>.htaccess</code> files in order to implement password
- authentication. This is not the case. Putting authentication directives
- in a <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- section, in your main server configuration file, is the preferred way
- to implement this, and <code>.htaccess</code> files should be used only
- if you don't have access to the main server configuration file. See <a href="#when">above</a> for a discussion of when you should and should
- not use <code>.htaccess</code> files.</p>
-
- <p>Having said that, if you still think you need to use a
- <code>.htaccess</code> file, you may find that a configuration such as
- what follows may work for you.</p>
-
- <p><code>.htaccess</code> file contents:</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </code></p></div>
-
- <p>Note that <code>AllowOverride AuthConfig</code> must be in effect
- for these directives to have any effect.</p>
-
- <p>Please see the <a href="auth.html">authentication tutorial</a> for a
- more complete discussion of authentication and authorization.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">Server Side Includes example</a></h2>
-
- <p>Another common use of <code>.htaccess</code> files is to enable
- Server Side Includes for a particular directory. This may be done with
- the following configuration directives, placed in a
- <code>.htaccess</code> file in the desired directory:</p>
-
- <div class="example"><p><code>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </code></p></div>
-
- <p>Note that <code>AllowOverride Options</code> and <code>AllowOverride
- FileInfo</code> must both be in effect for these directives to have any
- effect.</p>
-
- <p>Please see the <a href="ssi.html">SSI tutorial</a> for a more
- complete discussion of server-side includes.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">CGI example</a></h2>
-
- <p>Finally, you may wish to use a <code>.htaccess</code> file to permit
- the execution of CGI programs in a particular directory. This may be
- implemented with the following configuration:</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </code></p></div>
-
- <p>Alternately, if you wish to have all files in the given directory be
- considered to be CGI programs, this may be done with the following
- configuration:</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </code></p></div>
-
- <p>Note that <code>AllowOverride Options</code> and <code>AllowOverride
- FileInfo</code> must both be in effect for these directives to have any
- effect.</p>
-
- <p>Please see the <a href="cgi.html">CGI tutorial</a> for a more
- complete discussion of CGI programming and configuration.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">Troubleshooting</a></h2>
-
- <p>When you put configuration directives in a <code>.htaccess</code>
- file, and you don't get the desired effect, there are a number of
- things that may be going wrong.</p>
-
- <p>Most commonly, the problem is that <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> is not
- set such that your configuration directives are being honored. Make
- sure that you don't have a <code>AllowOverride None</code> in effect
- for the file scope in question. A good test for this is to put garbage
- in your <code>.htaccess</code> file and reload. If a server error is
- not generated, then you almost certainly have <code>AllowOverride
- None</code> in effect.</p>
-
- <p>If, on the other hand, you are getting server errors when trying to
- access documents, check your Apache error log. It will likely tell you
- that the directive used in your <code>.htaccess</code> file is not
- permitted. Alternately, it may tell you that you had a syntax error,
- which you will then need to fix.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/htaccess.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/htaccess.html.ja.euc-jp b/docs/manual/howto/htaccess.html.ja.euc-jp
deleted file mode 100644
index 50b079521e..0000000000
--- a/docs/manual/howto/htaccess.html.ja.euc-jp
+++ /dev/null
@@ -1,341 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¥Á¥å¡¼¥È¥ê¥¢¥ë: .htaccess ¥Õ¥¡¥¤¥ë - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></div><div id="page-content"><div id="preamble"><h1>Apache ¥Á¥å¡¼¥È¥ê¥¢¥ë: .htaccess ¥Õ¥¡¥¤¥ë</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/htaccess.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ï¥Ç¥£¥ì¥¯¥È¥êËè¤ËÀßÄê¤òÊѹ¹¤¹¤ëÊýË¡¤ò
-Ä󶡤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess ¥Õ¥¡¥¤¥ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">.htaccess ¥Õ¥¡¥¤¥ë¤È¤Ï²¿¤«/¤½¤Î»È¤¤Êý</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#when">¤¤¤Ä .htaccess ¥Õ¥¡¥¤¥ë¤ò»È¤¦(»È¤ï¤Ê¤¤)¤«¡£</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#how">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍѤΤµ¤ìÊý</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#auth">ǧ¾Ú¤ÎÎã</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">SSI ¤ÎÎã</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI ¤ÎÎã</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">ÌäÂê²ò·è</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">.htaccess ¥Õ¥¡¥¤¥ë</a></h2>
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">.htaccess ¥Õ¥¡¥¤¥ë¤È¤Ï²¿¤«/¤½¤Î»È¤¤Êý</a></h2>
-
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë (¡Öʬ»¶ÀßÄê¥Õ¥¡¥¤¥ë¡×) ¤Ï
- ¥Ç¥£¥ì¥¯¥È¥êËè¤ËÀßÄê¤òÊѹ¹¤¹¤ëÊýË¡¤òÄ󶡤·¤Þ¤¹¡£¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- ½ñ¤«¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤¯¤³¤È¤Ç¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È¤½¤Î
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤¹¤Ù¤Æ¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òŬÍѤµ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí:</h3>
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤òÊ̤Î̾Á°¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- »È¤Ã¤ÆÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ò <code>.config</code>
- ¤È¤¤¤¦Ì¾Á°¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢°Ê²¼¤ÎÀßÄê¤ò¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤ËÆþ¤ì¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- AccessFileName .config
- </code></p></div>
- </div>
-
- <p>°ìÈ̤ˡ¢<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î¹½Ê¸¤Ï
- <a href="../configuring.html#syntax">¼çÀßÄê¥Õ¥¡¥¤¥ë</a>
- ¤ÈƱ¤¸¤Ç¤¹¡£¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Ë½ñ¤¯¤³¤È¤Î¤Ç¤­¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê·è¤Þ¤ê¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë
- ½ñ¤«¤ì¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃæ¤Ç¡¢¡¢
- ¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Å¬ÍѤµ¤ì¤ë¤«¤ò¥«¥Æ¥´¥ê¡¼Ã±°Ì¤Ç»ØÄꤷ¤Þ¤¹¡£
- <code>.htaccess</code> ¤Ë½ñ¤¯¤³¤È¤Î¤Ç¤­¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¢¤ì¤Ð¡¢
- ÀâÌÀʸ½ñ¤Ë¤Ï¡Ö¾å½ñ¤­¡×¤È¤¤¤¦¹àÌܤ¬¤¢¤ê¡¢.htaccess ¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë
- ¤Ê¤ë¤¿¤á¤Î <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¤ÎÃͤ¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢<code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀâÌÀ¤ò
- ¸«¤ë¤È¡¢<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¤Î»ÈÍѤ¬µö²Ä¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬
- ¤ï¤«¤ê¤Þ¤¹¡£ (¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î³µÍפνê¤Ë¤¢¤ë¡Ö¥³¥ó¥Æ¥­¥¹¥È¡×¤È½ñ¤«¤ì¤Æ¤¤¤ë
- ¹Ô¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£) <a href="../mod/directive-dict.html#Context">¾å½ñ¤­</a>¤È½ñ¤«¤ì¤Æ¤¤¤ë¹Ô¤Ë¤Ï
- <code>FileInfo</code> ¤È¤¢¤ê¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢<code>.htaccess</code> Ãæ¤Î
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ë¤Ê¤ë¤¿¤á¤Ë¤Ï¡¢¾¯¤Ê¤¯¤È¤â
- <code>AllowOverride FileInfo</code> ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã:</h3><table>
- <tr>
- <td><a href="../mod/directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></td>
- <td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë,¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È,¥Ç¥£¥ì¥¯¥È¥ê,.htaccess</td>
- </tr>
-
- <tr>
- <td><a href="../mod/directive-dict.html#Override">¾å½ñ¤­:</a></td>
- <td>FileInfo</td>
- </tr>
- </table></div>
-
- <p>¤¢¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¤ë¤«
- ¤É¤¦¤«¤ï¤«¤é¤Ê¤¤¤È¤­¤Ï¡¢¤½¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀâÌÀ¤òõ¤·¤Æ¡¢".htaccess"
- ¤Î¤¿¤á¤Î¡Ö¥³¥ó¥Æ¥­¥¹¥È¡×¤Î¹Ô¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="when" id="when">¤¤¤Ä .htaccess ¥Õ¥¡¥¤¥ë¤ò»È¤¦(»È¤ï¤Ê¤¤)¤«¡£</a></h2>
-
- <p>°ìÈÌŪ¤Ë¡¢¥µ¡¼¥Ð¤Î¼çÀßÄê¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¾ì¹ç¤ò½ü¤¤¤Æ¡¢
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î»ÈÍѤ϶ËÎÏÈò¤±¤Æ¤¯¤À¤µ¤¤¡£
- À¤¤ÎÃæ¤Ë¤Ï¡¢Î㤨¤Ð¡¢¥æ¡¼¥¶Ç§¾Ú¤Ï¾ï¤Ë <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç
- ¹Ô¤Ê¤ï¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡¢¤È¤¤¤¦¸í²ò¤¬¹­¤Þ¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢¤Þ¤Ã¤¿¤¯¤½¤ó¤Ê¤³¤È¤Ï
- ¤¢¤ê¤Þ¤»¤ó¡£¥æ¡¼¥¶Ç§¾Ú¤ÎÀßÄê¤Ï¥µ¡¼¥Ð¼çÀßÄê¥Õ¥¡¥¤¥ë¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¡¢
- ¼ÂºÝ¡¢¤½¤ÎÊý¤¬¤è¤êÎɤ¤ÀßÄêÊýË¡¤Ç¤¹¡£</p>
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ï¥³¥ó¥Æ¥ó¥ÄÄ󶡼Ԥ¬¥Ç¥£¥ì¥¯¥È¥êËè¤Î
- ÀßÄê¤ò¹Ô¤Ê¤¤¤¿¤¤¤±¤ì¤É¡¢¥µ¡¼¥Ð¥·¥¹¥Æ¥à¤Î root ¥¢¥¯¥»¥¹¸¢¸Â¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤
- ¤È¤¤¤¦¾ì¹ç¤Ë¤Î¤ß»È¤¦¤Ù¤­¤â¤Î¤Ç¤¹¡£¥µ¡¼¥Ð´ÉÍý¼Ô¤¬ÉÑÈˤËÀßÄêÊѹ¹¤ò¹Ô¤Ê¤¤¤¿¤¯¤Ï
- ¤Ê¤¤¡¢¤È¤¤¤¦¤È¤­¤Ë¤Ï¸Ä¡¹¤Î¥æ¡¼¥¶¤¬ <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ
- ¼«Ê¬¤ÇÀßÄê¤ÎÊѹ¹¤ò¹Ô¤Ê¤¦¤³¤È¤òµö²Ä¤·¤¿Êý¤¬Îɤ¤¤È¤­¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£
- ¤³¤ì¤ÏÆäˡ¢ISP ¤¬Ê£¿ô¤Î¥æ¡¼¥¶¤Î¥µ¥¤¥È¤ò°ì¤Ä¤Î¥Þ¥·¥ó¤Ç¥Û¥¹¥È¤·¤Æ¤¤¤Æ¡¢
- ³Æ¥æ¡¼¥¶¤¬ÀßÄê¤ÎÊѹ¹¤ò¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¤¤¤è¤¦¤Ê¤È¤­¤Ë¤¢¤Æ¤Ï¤Þ¤ê¤Þ¤¹¡£</p>
-
- <p>¤·¤«¤·¡¢ÉáÄ̤ϲÄǽ¤Ç¤¢¤ì¤Ð <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î»ÈÍѤÏ
- Èò¤±¤Æ¤¯¤À¤µ¤¤¡£<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë½ñ¤³¤¦¤È¹Í¤¨¤ë¤è¤¦¤Ê
- ¤¹¤Ù¤Æ¤ÎÀßÄê¤Ï¡¢¥µ¡¼¥Ð¤Î¼çÀßÄê¥Õ¥¡¥¤¥ë¤Î <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ÇƱ¤¸¤è¤¦¤Ë¹Ô¤Ê¤¦¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î»ÈÍѤòÈò¤±¤ëÍýͳ¤Ï¼ç¤ËÆó¤Ä¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>°ì¤ÄÌܤϥµ¡¼¥Ð¤ÎÀ­Ç½¤ÎÌäÂê¤Ç¤¹¡£<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ÎÀßÄê¤òµö²Ä¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Apache ¤Ï
- ³Æ¥Ç¥£¥ì¥¯¥È¥ê¤Ç <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤òõ¤·¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤òµö²Ä¤¹¤ë¤È¡¢¼ÂºÝ¤Ë»ÈÍѤ·¤Æ¤¤¤ë¤«
- ¤É¤¦¤«¤Ë´Ø¤ï¤é¤º¡¢À­Ç½¤ÎÄã²¼¤ò¾·¤¯¤³¤È¤Ë¤Ê¤ê¤Þ¤¹! ¤Þ¤¿¡¢<code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ïʸ½ñ¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¤ëÅÙ¤ËÆɤ߹þ¤Þ¤ì¤Þ¤¹¡£</p>
-
- <p>¤µ¤é¤Ë¡¢Apache ¤ÏŬÍѤ¹¤Ù¤­¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½¸¤á¤ë¤¿¤á¤Ë¡¢¤¹¤Ù¤Æ¤Î
- ¾å°Ì¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤òõ¤¹É¬Íפ¬¤¢¤ë¤³¤È¤Ë¤â
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£(<a href="#how">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Å¬ÍѤµ¤ì¤ëÊýË¡</a>¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)¤Ç¤¹¤«¤é¡¢<code>/www/htdocs/example</code> ¤Ë¤¢¤ë
- ¥Õ¥¡¥¤¥ë¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¤È¤­¤Ï¡¢Apache ¤Ï°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤òÄ´¤Ù¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/example/.htaccess
- </code></p></div>
-
- <p>¤Ç¤¹¤«¤é¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î¤½¤ì¤¾¤ì¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î¥¢¥¯¥»¥¹¤ËÂФ·¤Æ¡¢
- ¾å¤ÎÎã¤Î¥Õ¥¡¥¤¥ë¤¬¤Þ¤Ã¤¿¤¯Â¸ºß¤·¤Ê¤¤¤È¤­¤Ç¤â¡¢ÄɲäΥե¡¥¤¥ë¥·¥¹¥Æ¥à¤Î
- ¥¢¥¯¥»¥¹¤¬¹Ô¤Ê¤ï¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£(¤³¤ì¤Ï¡¢<code>.htaccess</code> ¤¬
- <code>/</code> ¤ËÂФ·¤ÆÍ­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤­¤Î¾ì¹ç¤Ç¡¢ÉáÄ̤Ϥ½¤¦¤Ê¤Ã¤Æ
- ¤¤¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£)</p>
-
- <p>Æó¤ÄÌܤϥ»¥­¥å¥ê¥Æ¥£¤Ç¤¹¡£¥æ¡¼¥¶¤Ë¥µ¡¼¥Ð¤ÎÀßÄê¤òÊѹ¹¤¹¤ë¤³¤È¤ò
- µö²Ä¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢¤¢¤Ê¤¿¼«¿È¤¬´ÉÍý¤Ç¤­¤Ê¤¤Êѹ¹¤ò¤µ¤ì¤ë
- ¶²¤ì¤¬¤¢¤ê¤Þ¤¹¡£¥æ¡¼¥¶¤Ë¤³¤ÎÆø¢¤òÍ¿¤¨¤ë¤Î¤¬Îɤ¤¤Î¤«¤É¤¦¤«¡¢½½Ê¬
- ¸¡Æ¤¤·¤Æ¤¯¤À¤µ¤¤¡£¤Þ¤¿¡¢¥æ¡¼¥¶¤ËÍ¿¤¨¤ë¸¢¸Â¤¬É¬Íפʤâ¤Î¤è¤ê¤â¾¯¤Ê¤¹¤®¤ë¤È¡¢
- ;ʬ¤Êµ»½Ñ¥µ¥Ý¡¼¥ÈÊó¹ð¤ò¼õ¤±¼è¤ë¤è¤¦¤Ë¤Ê¤ë²ÄǽÀ­¤¬¹â¤¤¤³¤È¤Ë¤â
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£³Î¼Â¤Ë¡¢¥æ¡¼¥¶¤Ë¤É¤ÎÄøÅ٤θ¢¸Â¤òÍ¿¤¨¤¿¤«ÌÀ³Î¤Ë¹ð¤²¤ë¤è¤¦¤Ë
- ¤·¤Æ¤¯¤À¤µ¤¤¡£<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¤Ë
- ²¿¤òÀßÄꤷ¤¿¤«¤È¤¤¤¦¤³¤È¤È¡¢´ØÏ¢¤¹¤ëʸ½ñ¤ò¼¨¤¹¤³¤È¤Ç¡¢
- ¸å¡¹¤Îº®Íð¤ò¤°¤Ã¤È¸º¤é¤¹¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤È¤³¤í¤Ç¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ñ¤«¤ì¤¿ <code>.htaccess</code> ¤ò
- <code>/www/htdocs/example</code> ¤ËÃÖ¤¯¤³¤È¤È¡¢Æ±¤¸¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ¼ç¥µ¡¼¥ÐÀßÄê¤Î Directory ¥»¥¯¥·¥ç¥ó
- <code>&lt;Directory /www/htdocs/example&gt;</code> ¤Ë½ñ¤¯¤³¤È¤Ï
- ´°Á´¤ËÅù²Á¤Ç¤¹:</p>
-
- <p><code>/www/htdocs/example</code> ¤Î <code>.htaccess</code> ¥Õ¥¡¥¤¥ë:</p>
-
- <div class="example"><h3><code>/www/htdocs/example</code> ¤Î .htaccess ¥Õ¥¡¥¤¥ë¤Î
- ÆâÍÆ</h3><p><code>
- AddType text/example .exm
- </code></p></div>
-
- <div class="example"><h3><code>httpd.conf ¤Î¥»¥¯¥·¥ç¥ó</code>
- file</h3><p><code>
- &lt;Directory /www/htdocs/example&gt;<br />
- <span class="indent">
- AddType text/example .exm<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¤·¤«¤·¡¢¤³¤ÎÀßÄê¤Ï¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤Ë½ñ¤¤¤¿Êý¤¬¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Î
- Äã²¼¤¬¾¯¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¤ëÅÙ¤Ë
- Æɤ߹þ¤Þ¤ì¤ëÂå¤ï¤ê¤Ë¡¢Apache ¤Îµ¯Æ°»þ¤Ë 1 ²ó¤À¤±Æɤ߹þ¤á¤Ð
- ¤è¤¯¤Ê¤ë¤«¤é¤Ç¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- Ãͤò <code>none</code> ¤ËÀßÄꤹ¤ë¤³¤È¤Ç <code>.htaccess</code> ¥Õ¥¡¥¤¥ë
- ¤Î»ÈÍѤò´°Á´¤Ë̵¸ú¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- AllowOverride None
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how" id="how">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍѤΤµ¤ìÊý</a></h2>
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Î¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤È¡¢¤½¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤¹¤Ù¤Æ¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- ¤·¤«¤·¡¢¾å¤Î³¬ÁؤΥǥ£¥ì¥¯¥È¥ê¤Ë¤â <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤¬
- ¸ºß¤¹¤ë¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ò³Ð¤¨¤Æ¤ª¤¯¤³¤È¤ÏÂçÀڤǤ¹¡£¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¸½¤ì¤ë
- ½çÈÖ¤ËŬÍѤµ¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>.htaccess</code> ¤Ï
- ¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤Î¤è¤ê¾å¤Î³¬ÁؤΠ<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î
- ÀßÄê¤ò¾å½ñ¤­¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤½¤·¤Æ¡¢¤½¤Î <code>.htaccess</code> ¤â
- ¤è¤ê¾å¤Î³¬Áؤǽñ¤«¤ì¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¾å½ñ¤­¤·¤¿¤ê¡¢¼ç¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë
- ¤½¤Î¤â¤Î¤ÎÀßÄê¤ò¾å½ñ¤­¤·¤¿¤ê¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <p>Îã:</p>
-
- <p>¥Ç¥£¥ì¥¯¥È¥ê <code>/www/htdocs/example1</code> ¤Ë°Ê²¼¤ÎÆâÍƤÎ
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Options +ExecCGI
- </code></p></div>
-
- <p>(Ãí: <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ç "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ë¤Ê¤ë¤¿¤á¤Ë¤Ï¡¢
- "<code>AllowOverride Options</code>" ¤òÍ­¸ú¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£)</p>
-
- <p>¥Ç¥£¥ì¥¯¥È¥ê <code>/www/htdocs/example1/example2</code> ¤Ë¤Ï
- °Ê²¼¤Î¤è¤¦¤Ê <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Options Includes
- </code></p></div>
-
- <p>Æó¤Ä¤á¤Î <code>.htaccess</code> ¤Ë¤è¤ê¡¢¥Ç¥£¥ì¥¯¥È¥ê
- <code>/www/htdocs/example1/example2</code> ¤Ç¤Ï CGI ¤Î¼Â¹Ô¤Ï
- µö²Ä¤µ¤ì¤Þ¤»¤ó¡£¤³¤ì¤Ï¡¢<code>Options Includes</code> ¤Î¤ß¤¬
- ¸úÎϤò»ý¤Á¡¢¤½¤ì¤¬¤¹¤Ù¤Æ¤Î°ÊÁ°¤ÎÀßÄê¤ò¾å½ñ¤­¤¹¤ë¤«¤é¤Ç¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="auth" id="auth">ǧ¾Ú¤ÎÎã</a></h2>
-
- <p>¤â¤·Ç§¾Ú¤ÎÊýË¡¤òÃΤ뤿¤á¤Ë¤³¤ÎÉôʬ¤ËľÀÜÍ褿¤Î¤Ç¤¢¤ì¤Ð¡¢¼¡¤Î¤³¤È¤ò
- ÃΤäƤª¤¯¤³¤È¤¬½ÅÍפǤ¹¡£¤è¤¯¤¢¤ë¸í²ò¤Ë¡¢¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë¤Ï
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò»È¤¦É¬Íפ¬¤¢¤ë¡¢¤È¤¤¤¦¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£¼ç¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤Î <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Ë
- ǧ¾ÚÍѤΥǥ£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¯Êý¤¬¿ä¾©¤µ¤ì¤ëÊýË¡¤Ç¡¢<code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ï¼ç¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤òÊѹ¹¤Ç¤­¤Ê¤¤¤È¤­¤Ë¤Î¤ß»ÈÍѤ¹¤Ù¤­¤Ç¤¹¡£
- ¤¤¤Ä <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò»È¤¦¤Ù¤­¤Ç¡¢¤¤¤Ä»È¤¦¤Ù¤­¤Ç¤Ï¤Ê¤¤¤«¤Ë
- ¤Ä¤¤¤Æ¤Ï <a href="#when">¾å</a>¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>°Ê¾å¤Î¤³¤È¤ò¤Õ¤Þ¤¨¤¿¾å¤Ç¡¢¤â¤· <code>.htaccess</code> ¤Î»ÈÍѤ¬
- ¤Þ¤ÀɬÍפÀ¤È»×¤¦¾ì¹ç¤Ï¡¢¼¡¤Î¤è¤¦¤Ê¤â¤Î¤¬Ë¾¤ß¤Î¤³¤È¤ò¤·¤Æ¤¯¤ì¤ë¤«¤â
- ¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ:</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </code></p></div>
-
- <p>¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ë¤Ê¤ë¤¿¤á¤Ë¤Ï¡¢
- <code>AllowOverride AuthConfig</code> ¤¬Í­¸ú¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>ǧ¾Ú¤È¾µÇ§¤Ë¤Ä¤¤¤Æ¤Ï <a href="auth.html">ǧ¾Ú¥Á¥å¡¼¥È¥ê¥¢¥ë</a>¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">SSI ¤ÎÎã</a></h2>
-
- <p>¤â¤¦°ì¤Ä¤Î <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î¤è¤¯¤¢¤ëÍøÍÑË¡¤Ï
- ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç SSI ¤òÍ­¸ú¤Ë¤¹¤ë¤³¤È¤Ç¤¹¡£¤³¤ì¤Ï¡¢Ë¾¤ß¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë°Ê²¼¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¯¤³¤È¤Ç
- ãÀ®¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </code></p></div>
-
- <p>¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ë¤Ê¤ë¤¿¤á¤Ë¤Ï¡¢
- <code>AllowOverride Options</code> ¤È <code>AllowOverride
- FileInfo</code> ¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¤è¤ê¤Þ¤È¤Þ¤Ã¤¿ SSI ¤ÎÀâÌÀ¤Ï <a href="ssi.html">SSI ¥Á¥å¡¼¥È¥ê¥¢¥ë</a>¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">CGI ¤ÎÎã</a></h2>
-
- <p>ºÇ¸å¤Ë¡¢ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç CGI ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤òµö²Ä¤·¤¿¤¤¤³¤È¤¬
- ¤¢¤ë¤Ç¤·¤ç¤¦¡£¤³¤ì¤Ï°Ê²¼¤ÎÀßÄê¤Ç¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </code></p></div>
-
- <p>¤â¤·¤¯¤Ï¡¢¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤¬ CGI ¥×¥í¥°¥é¥à¤È
- ¤ß¤Ê¤µ¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¤Ê¤é¡¢°Ê²¼¤ÎÀßÄê¤Ç¼Â¸½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </code></p></div>
-
- <p>¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ë¤Ê¤ë¤¿¤á¤Ë¤Ï¡¢
- <code>AllowOverride Options</code> ¤È <code>AllowOverride
- FileInfo</code> ¤¬Í­¸ú¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>CGI ¥×¥í¥°¥é¥à¤ÈÀßÄê¤Î¤è¤ê¤Þ¤È¤Þ¤Ã¤¿ÀâÌÀ¤Ï <a href="cgi.html">CGI ¥Á¥å¡¼¥È¥ê¥¢¥ë</a>¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">ÌäÂê²ò·è</a></h2>
-
- <p>ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¤¤¿¤±¤ì¤É¤â¡¢
- ´üÂÔ¤·¤¿¸ú²Ì¤¬ÆÀ¤é¤ì¤Ê¤¤¤È¤­¤Ë¤Ï¡¢¤¤¤¯¤Ä¤«¤Î¸¶°ø¤¬¹Í¤¨¤é¤ì¤Þ¤¹¡£</p>
-
- <p>°ìÈ֤褯¤¢¤ë¤³¤È¤Ï¡¢ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¹Í褵¤ì¤ë¤è¤¦¤Ë¤Ï
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤
- ¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£³ºÅö¤Î¥Õ¥¡¥¤¥ë¤Î¥¹¥³¡¼¥×¤Ë <code>AllowOverride None</code>
- ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤ì¤òÄ´¤Ù¤ë¤¿¤á¤ÎÎɤ¤ÊýË¡¤Ï¡¢
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë¤´¤ß¤ò½ñ¤¤¤Æ¡¢¥ê¥í¡¼¥É¤¹¤ë¤³¤È¤Ç¤¹¡£
- ¥µ¡¼¥Ð¤Î¥¨¥é¡¼¤¬À¸À®¤µ¤ì¤Ê¤¤¤È¤­¤Ï¡¢¤Û¤Ü³Î¼Â¤Ë <code>AllowOverride
- None</code> ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾õÂ֤ˤʤäƤ¤¤Þ¤¹¡£</p>
-
- <p>¤½¤¦¤Ç¤Ï¤Ê¤¯¡¢Ê¸½ñ¤ò¥¢¥¯¥»¥¹¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤¤¤ë
- ¤È¤­¤Ï¡¢Apache ¤Î¥¨¥é¡¼¥í¥°¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç
- »ÈÍѤµ¤ì¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬µö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¡¢¤È¤¤¤¦¤³¤È¤òÃΤ餻¤Æ¤¤¤ë
- ²ÄǽÀ­¤¬¹â¤¤¤Ç¤¹¡£¤Þ¤¿¤Ï¡¢¹½Ê¸¤Î´Ö°ã¤¤¤¬¤¢¤ë¤³¤È¤ò½Ò¤Ù¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤½¤Î¾ì¹ç¤Ë¤Ï¤Þ¤º¤½¤ì¤ò½¤Àµ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/htaccess.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/htaccess.html.ko.euc-kr b/docs/manual/howto/htaccess.html.ko.euc-kr
deleted file mode 100644
index 0f440634fe..0000000000
--- a/docs/manual/howto/htaccess.html.ko.euc-kr
+++ /dev/null
@@ -1,329 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: .htaccess ÆÄÀÏ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: .htaccess ÆÄÀÏ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/htaccess.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p><code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© µð·ºÅ丮º°·Î ¼³Á¤À»
-º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess ÆÄÀÏ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">¹«¾ùÀ̸ç/¾î¶»°Ô »ç¿ëÇϴ°¡</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#when">¾ðÁ¦ .htaccess ÆÄÀÏÀ» »ç¿ëÇϳª
- (ȤÀº »ç¿ëÇÏÁö ¾Ê³ª)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#how">¾î¶»°Ô Áö½Ã¾î¸¦ Àû¿ëÇϳª</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#auth">ÀÎÁõ ¿¹Á¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Server Side Includes ¿¹Á¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI ¿¹Á¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">¹®Á¦ÇØ°á</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">.htaccess ÆÄÀÏ</a></h2>
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">¹«¾ùÀ̸ç/¾î¶»°Ô »ç¿ëÇϴ°¡</a></h2>
-
-
- <p><code>.htaccess</code> ÆÄÀÏ(ȤÀº "ºÐ»ê ¼³Á¤ÆÄÀÏ")À»
- »ç¿ëÇÏ¸é µð·ºÅ丮º°·Î ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖ´Ù. ¿©·¯ ¼³Á¤ Áö½Ã¾î°¡
- ÀÖ´Â ÆÄÀÏÀ» ƯÁ¤ ¹®¼­ µð·ºÅ丮¿¡ µÎ¸é, ±× µð·ºÅ丮¿Í ¸ðµç
- ÇÏÀ§µð·ºÅ丮¿¡ Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù.</p>
-
- <div class="note"><h3>ÁÖÀÇ:</h3>
- <p><code>.htaccess</code> ÆÄÀϸíÀ» ´Ù¸£°Ô »ç¿ëÇÏ°í ½Í´Ù¸é,
- <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, <code>.config</code>
- ÆÄÀϸíÀ» »ç¿ëÇÏ·Á¸é ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- AccessFileName .config
- </code></p></div>
- </div>
-
- <p>ÀϹÝÀûÀ¸·Î <code>.htaccess</code> ÆÄÀÏÀº <a href="../configuring.html#syntax">ÁÖ¼³Á¤ÆÄÀÏ</a>°ú ¹®¹ýÀÌ
- °°´Ù. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- Áö½Ã¾î°¡ ÀÌ ÆÄÀÏ¿¡ ³ª¿Ã ¼ö ÀÖ´Â ³»¿ëÀ» °áÁ¤ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ Çã¿ëÇÏ´Â Áö½Ã¾î ºÐ·ù¸¦ ÁöÁ¤ÇÑ´Ù.
- Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é,
- ÇØ´ç Áö½Ã¾î ¹®¼­ÀÇ Override Ç׸ñÀº Áö½Ã¾î¸¦ Çã¿ëÇϱâÀ§ÇØ
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>¿¡ »ç¿ëÇÒ
- °ªÀ» ¾Ë·ÁÁØ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>
- Áö½Ã¾î ¹®¼­¸¦ º¸¸é ÀÌ Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. (Áö½Ã¾î ¿ä¾à¿¡¼­ »ç¿ëÀå¼Ò Ç׸ñÀ» º¸¶ó.)
- <a href="../mod/directive-dict.html#Context">Override</a>
- ÁÙ¿¡ <code>FileInfo</code>°¡ ÀÖ´Ù. ±×·¡¼­ ÀÌ Áö½Ã¾î¸¦
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇϱâÀ§Çؼ­´Â ÃÖ¼ÒÇÑ
- <code>AllowOverride FileInfo</code>°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><table>
- <tr>
- <td><a href="../mod/directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></td>
- <td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td>
- </tr>
-
- <tr>
- <td><a href="../mod/directive-dict.html#Override">Override:</a></td>
- <td>FileInfo</td>
- </tr>
- </table></div>
-
- <p>ƯÁ¤ Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ
- ¼ö ÀÖ´ÂÁö ±Ã±ÝÇϸé Áö½Ã¾î ¹®¼­ÀÇ »ç¿ëÀå¼Ò Ç׸ñ¿¡ ".htaccess"°¡
- ÀÖ´ÂÁö È®ÀÎÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="when" id="when">¾ðÁ¦ .htaccess ÆÄÀÏÀ» »ç¿ëÇϳª
- (ȤÀº »ç¿ëÇÏÁö ¾Ê³ª)</a></h2>
-
- <p>ÀϹÝÀûÀ¸·Î ÁÖ¼­¹öÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ¾Æ´Ï¶ó¸é
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ¿¹¸¦ µé¾î,
- »ç¿ëÀÚ ÀÎÁõÀÌ Ç×»ó <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ¾î¾ß
- ÇÑ´Ù´Â °ÍÀº À߸ø ¾Ë·ÁÁø ¿ÀÇØ´Ù. ÀÌ´Â »ç½ÇÀÌ ¾Æ´Ï´Ù. ÁÖ¼­¹ö¼³Á¤¿¡
- »ç¿ëÀÚ ÀÎÁõ ¼³Á¤À» ÀûÀ» ¼ö ÀÖ°í, »ç½Ç ÀÌ·¯±æ ±ÇÇÑ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏÀº ÄÁÅÙÃ÷ Á¦°øÀÚ°¡ µð·ºÅ丮º°·Î
- ¼­¹ö ¼³Á¤À» ´Ù¸£°ÔÇÏ°í ½ÍÁö¸¸ ¼­¹ö ½Ã½ºÅÛ¿¡ root ±ÇÇÑÀÌ
- ¾ø´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ¼­¹ö °ü¸®ÀÚ°¡ ¼³Á¤À» ÀÚÁÖ º¯°æÇÏ°í
- ½ÍÁö ¾ÊÀº °æ¿ì ÀÏ¹Ý »ç¿ëÀÚ°¡ Á÷Á¢ <code>.htaccess</code>
- ÆÄÀÏÀ» ¼öÁ¤Çϵµ·Ï Çã¿ëÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¿¹¸¦ µé¾î, ÇÑ
- ÄÄÇ»ÅÍ¿¡ ¿©·¯ »ç¿ëÀÚ »çÀÌÆ®¸¦ ¼­ºñ½ºÇÏ´Â ISP¿¡¼­ »ç¿ëÀÚ°¡
- ÀÚ½ÅÀÇ ¼³Á¤À» º¯°æÇÏ°í ½ÍÀº °æ¿ì°¡ ±×·¯ÇÏ´Ù.</p>
-
- <p>±×·¯³ª ÀϹÝÀûÀ¸·Î <code>.htaccess</code> ÆÄÀÏÀº °¡±ÞÀû
- ÇÇÇØ¾ß ÇÑ´Ù. <code>.htaccess</code> ÆÄÀÏ¿¡¼­ Çã¿ëÇÏ´Â Áö½Ã¾î´Â
- ÁÖ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼Ç°ú °°Àº È¿°ú°¡
- ÀÖ´Ù.</p>
-
- <p>´ÙÀ½ µÎ°¡Áö Å« ÀÌÀ¯¶§¹®¿¡ <code>.htaccess</code> ÆÄÀÏ
- »ç¿ëÀ» ÇÇÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ù¹ø°´Â ¼º´ÉÀÌ´Ù. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>°¡ <code>.htaccess</code>
- ÆÄÀÏÀ» »ç¿ëÇϵµ·Ï Çã¿ëÇϸé, ¾ÆÆÄÄ¡´Â µð·ºÅ丮¸¶´Ù
- <code>.htaccess</code> ÆÄÀÏÀ» ã´Â´Ù. ±×·¡¼­
- <code>.htaccess</code> ÆÄÀÏÀ» Çã¿ëÇÏ¸é ½ÇÁ¦·Î ÆÄÀÏÀ» »ç¿ëÇÏÁö
- ¾Ê´Â °æ¿ì¿¡µµ ¼º´ÉÀÌ ¶³¾îÁø´Ù! ¶Ç, <code>.htaccess</code>
- ÆÄÀÏÀº ¹®¼­¸¦ ¿äûÇÒ¶§¸¶´Ù ÀоîµéÀδÙ.</p>
-
- <p>°Ô´Ù°¡ Àû¿ëÇØ¾ß ÇÏ´Â Àüü Áö½Ã¾î¸¦ ¸ðÀ¸±âÀ§ÇØ ¾ÆÆÄÄ¡´Â
- ¸ðµç »óÀ§ µð·ºÅ丮¿¡¼­ <code>.htaccess</code> ÆÄÀÏÀ» ã´Â´Ù.
- (<a href="#how">¾î¶»°Ô Áö½Ã¾î¸¦ Àû¿ëÇϳª</a> ÀýÀ» Âü°í.)
- ±×·¡¼­ <code>/www/htdocs/example</code> µð·ºÅ丮¿¡ ÀÖ´Â
- ÆÄÀÏÀ» ¿äûÇϸé, ¾ÆÆÄÄ¡´Â ´ÙÀ½ ÆÄÀϵéÀ» ã¾Æ¾ß ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/example/.htaccess
- </code></p></div>
-
- <p>±×·¡¼­ ±× µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» Á¢±ÙÇÒ ¶§¸¶´Ù ¼³Á¤ÆÄÀÏÀÌ
- ÀüÇô ¾ø¾îµµ ÆÄÀϽýºÅÛÀ» 4¹ø ´õ Á¢±ÙÇØ¾ß ÇÑ´Ù.
- (<code>/</code>¿¡¼­µµ <code>.htaccess</code> ÆÄÀÏÀ» Çã¿ëÇÑ
- °æ¿ì¸¦ ¸»ÇÑ´Ù. º¸ÅëÀº Çã¿ëÇÏÁö ¾Ê´Â´Ù.)</p>
-
- <p>µÎ¹ø° ÀÌÀ¯´Â º¸¾ÈÀÌ´Ù. »ç¿ëÀÚ¿¡°Ô ¼­¹ö¼³Á¤ º¯°æ ±ÇÇÑÀ»
- ÁÖ¸é ´ç½ÅÀÌ °¨´çÇÒ ¼ö ¾ø´Â º¯È­°¡ ÀϾ ¼ö ÀÖ´Ù. »ç¿ëÀÚ¿¡°Ô
- ÀÌ·± ±ÇÇÑÀ» ÁÙÁö °õ°õÀÌ »ý°¢Ç϶ó. ¶Ç, »ç¿ëÀÚ°¡ ¿øÇÏ´Â °Íº¸´Ù
- ÀûÀº ±ÇÇÑÀ» ÁÖ¸é ±â¼úÁö¿ø¿äûÀÌ µé¾î¿Â´Ù. »ç¿ëÀÚ¿¡°Ô °¡´ÉÇÑ
- ±ÇÇÑ ¼öÁØÀ» ¸íÈ®È÷ ¾Ë·Á¶ó. »ç¿ëÀÚ¿¡°Ô <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>¸¦ ¾î¶»°Ô ¼³Á¤ÇÏ¿´´ÂÁö
- Á¤È®È÷ ¾Ë¸®°í °ü·Ã ¹®¼­¸¦ Á¦°øÇÏ¸é ¾ÕÀ¸·Î È¥¶õÀ» ÇÇÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>Áö½Ã¾î¸¦ <code>/www/htdocs/example</code> µð·ºÅ丮ÀÇ
- <code>.htaccess</code> ÆÄÀÏÀ» µÎ´Â °Í°ú ÁÖ¼­¹ö¼³Á¤ÀÇ
- <code>&lt;Directory /www/htdocs/example&gt;</code> Directory
- ¼³Á¤¿¡ µÎ´Â °ÍÀº ¿ÏÀüÈ÷ °°´Ù.</p>
-
- <p><code>/www/htdocs/example</code>¿¡ ÀÖ´Â
- <code>.htaccess</code> ¼½¼Ç:</p>
-
- <div class="example"><h3><code>/www/htdocs/example</code>¿¡ ÀÖ´Â
- .htaccess ÆÄÀÏ ³»¿ë</h3><p><code>
- AddType text/example .exm
- </code></p></div>
-
- <div class="example"><h3><code>httpd.conf</code> ÆÄÀÏ¿¡ ÀÖ´Â ¼½¼Ç</h3><p><code>
- &lt;Directory /www/htdocs/example&gt;<br />
- <span class="indent">
- AddType text/example .exm<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>±×·¯³ª ÆÄÀÏÀ» ¿äûÇÒ ¶§¸¶´Ù ¼³Á¤À» ÀÐÁö¾Ê°í ¾ÆÆÄÄ¡°¡
- ½ÃÀÛÇÒ¶§ Çѹø¸¸ ¼³Á¤À» Àб⶧¹®¿¡ °°Àº ¼³Á¤À» ¼­¹ö¼³Á¤ÆÄÀÏ¿¡
- »ç¿ëÇÏ¸é ¼º´ÉÀÌ ´õ ºü¸£´Ù.</p>
-
- <p><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> Áö½Ã¾î¸¦
- <code>none</code>À¸·Î ¼³Á¤Çϸé <code>.htaccess</code> ÆÄÀÏÀ»
- ¿ÏÀüÈ÷ »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <div class="example"><p><code>
- AllowOverride None
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how" id="how">¾î¶»°Ô Áö½Ã¾î¸¦ Àû¿ëÇϳª</a></h2>
-
- <p><code>.htaccess</code> ÆÄÀÏÀ» ¹ß°ßÇÑ µð·ºÅ丮¿Í ±× µð·ºÅ丮ÀÇ
- ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡ <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â ¼³Á¤
- Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ±×·¡¼­ »óÀ§µð·ºÅ丮ÀÇ <code>.htaccess</code>
- ÆÄÀÏÀ» ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¹ß°ßÇÑ ¼ø¼­·Î Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ƯÁ¤
- µð·ºÅ丮¿¡ ÀÖ´Â <code>.htaccess</code> ÆÄÀÏÀº »óÀ§µð·ºÅ丮¿¡
- ÀÖ´Â <code>.htaccess</code> ÆÄÀÏÀÇ Áö½Ã¾î¸¦ ¹«È¿·Î ¸¸µé
- ¼ö ÀÖ°í, »óÀ§µð·ºÅ丮¿¡ ÀÖ´Â Áö½Ã¾î´Â ´õ »óÀ§µð·ºÅ丮 ȤÀº
- ÁÖ¼³Á¤ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î¸¦ ¹«È¿·Î ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹Á¦:</p>
-
- <p><code>/www/htdocs/example1</code> µð·ºÅ丮¿¡ ´ÙÀ½°ú °°Àº
- <code>.htaccess</code> ÆÄÀÏÀÌ ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- Options +ExecCGI
- </code></p></div>
-
- <p>(ÁÖÀÇ: <code>.htaccess</code> ÆÄÀÏ¿¡ "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" Áö½Ã¾î¸¦ »ç¿ëÇÏ·Á¸é
- "<code>AllowOverride Options</code>"°¡ ÇÊ¿äÇÏ´Ù.)</p>
-
- <p><code>/www/htdocs/example1/example2</code> µð·ºÅ丮¿¡´Â
- ´ÙÀ½°ú °°Àº <code>.htaccess</code> ÆÄÀÏÀÌ ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- Options Includes
- </code></p></div>
-
- <p>ÀÌ µÎ¹ø° <code>.htaccess</code> ÆÄÀÏÀÇ
- <code>Options Includes</code>°¡ ÀÌÀü ¼³Á¤À» ¿ÏÀüÈ÷ ¹«È¿·Î
- ¸¸µé±â¶§¹®¿¡ <code>/www/htdocs/example1/example2</code>
- µð·ºÅ丮´Â CGI ½ÇÇàÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="auth" id="auth">ÀÎÁõ ¿¹Á¦</a></h2>
-
- <p>ÀÎÁõ ¹æ¹ýÀ» ¾Ë±âÀ§ÇØ ¹Ù·Î ÀÌ°÷ºÎÅÍ Àд´ٸé ÁÖÀÇÇÒ °ÍÀÌ
- ÀÖ´Ù. ¾ÏÈ£ ÀÎÁõÀ» ÇÏ·Á¸é <code>.htaccess</code> ÆÄÀÏÀÌ
- ÇÊ¿äÇÏ´Ù´Â ¿ÀÇØ°¡ ³Î¸® ÆÛÁ®ÀÖ´Ù. ÀÌ´Â »ç½ÇÀÌ ¾Æ´Ï´Ù.
- ÁÖ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼Ç¿¡ ÀÎÁõ Áö½Ã¾î¸¦
- µÎ´Â °ÍÀÌ ´õ ±ÇÀåÇÏ´Â ¹æ¹ýÀÌ°í, ¼­¹öÀÇ ÁÖ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇÒ
- ¼ö ¾ø´Â °æ¿ì¿¡¸¸ <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇؾß
- ÇÑ´Ù. ¾ðÁ¦ <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö¿Í
- »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÏ´ÂÁö´Â <a href="#when">À§¿¡¼­</a>
- ¼³¸íÇÏ¿´´Ù.</p>
-
- <p>¾Õ¿¡¼­ ¸»ÇßÁö¸¸ ¾ÆÁ÷µµ <code>.htaccess</code> ÆÄÀÏÀÌ
- ÇÊ¿äÇÏ´Ù°í »ý°¢µÇ¸é ¾Æ·¡ ¼³Á¤ÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏ ³»¿ë.</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </code></p></div>
-
- <p>ÀÌ Áö½Ã¾î°¡ µ¿ÀÛÇϱâÀ§Çؼ­´Â
- <code>AllowOverride AuthConfig</code> Áö½Ã¾î°¡ ÇÊ¿äÇÔÀ»
- ¸í½ÉÇ϶ó.</p>
-
- <p>ÀÎÁõ°ú ±ÇÇѺο©¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a href="auth.html">ÀÎÁõ
- ÅõÅ丮¾ó</a>À» º¸±æ ¹Ù¶õ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">Server Side Includes ¿¹Á¦</a></h2>
-
- <p>¶Ç´Ù¸¥ ÀϹÝÀûÀÎ <code>.htaccess</code> ÆÄÀÏÀÇ ¿ëµµ´Â
- ƯÁ¤ µð·ºÅ丮¿¡¼­ Server Side Includes¸¦ °¡´ÉÇÏ°Ô ¸¸µå´Â
- °ÍÀÌ´Ù. ¿øÇÏ´Â µð·ºÅ丮ÀÇ <code>.htaccess</code> ÆÄÀÏ¿¡
- ´ÙÀ½°ú °°Àº ¼³Á¤ Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é µÈ´Ù.</p>
-
- <div class="example"><p><code>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </code></p></div>
-
- <p>ÀÌ Áö½Ã¾î°¡ µ¿ÀÛÇÏ·Á¸é <code>AllowOverride Options</code>¿Í
- <code>AllowOverride FileInfo</code>°¡ ¸ðµÎ ÇÊ¿äÇÔÀ» ¸í½ÉÇ϶ó.</p>
-
- <p>server-side includes¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a href="ssi.html">SSI ÅõÅ丮¾ó</a>À» º¸±æ ¹Ù¶õ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">CGI ¿¹Á¦</a></h2>
-
- <p>¸¶Áö¸·À¸·Î <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© ƯÁ¤
- µð·ºÅ丮¿¡¼­ CGI ÇÁ·Î±×·¥ ½ÇÇàÀ» Çã¿ëÇÏ°í ½Í´Ù¸é, ´ÙÀ½°ú
- °°Àº ¼³Á¤À» »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </code></p></div>
-
- <p>ȤÀº ÀÌ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î
- ó¸®ÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°Àº ¼³Á¤µµ °¡´ÉÇÏ´Ù.</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </code></p></div>
-
- <p>ÀÌ Áö½Ã¾î°¡ µ¿ÀÛÇÏ·Á¸é <code>AllowOverride Options</code>¿Í
- <code>AllowOverride FileInfo</code>°¡ ¸ðµÎ ÇÊ¿äÇÔÀ» ¸í½ÉÇ϶ó.</p>
-
- <p>CGI ÇÁ·Î±×·¡¹Ö°ú ¼³Á¤¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a href="cgi.html">CGI ÅõÅ丮¾ó</a>À» º¸±æ ¹Ù¶õ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">¹®Á¦ÇØ°á</a></h2>
-
- <p><code>.htaccess</code> ÆÄÀÏ¿¡ µÐ ¼³Á¤ Áö½Ã¾î°¡ ¿øÇÏ´Â
- ±â´ÉÀ» ÇÏÁö ¾Ê´Â °æ¿ì ¿©·¯°¡Áö ÀÌÀ¯°¡ ÀÖÀ» ¼ö ÀÖ´Ù.</p>
-
- <p>°¡Àå ÀϹÝÀûÀÎ ¹®Á¦´Â ¼³Á¤ Áö½Ã¾î¸¦ °¡´ÉÇÏ°Ô ¸¸µå´Â <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>¸¦ ¼³Á¤ÇÏÁö ¾ÊÀº
- °æ¿ì´Ù. ¹®Á¦°¡ µÇ´Â ÆÄÀÏ ¿µ¿ª¿¡ <code>AllowOverride None</code>ÀÌ
- ¾ø´ÂÁö È®ÀÎÇÑ´Ù. <code>.htaccess</code> ÆÄÀÏÀ» ¾Æ¹«·¸°Ô³ª
- ÀûÀº ´ÙÀ½ ÆäÀÌÁö¸¦ ´Ù½Ã Á¢±ÙÇÏ¿© ½±°Ô °Ë»çÇغ¼ ¼ö ÀÖ´Ù.
- ¼­¹ö ¿À·ù°¡ ³ª¿ÀÁö ¾ÊÀ¸¸é °ÅÀÇ È®½ÇÈ÷
- <code>AllowOverride None</code>À» »ç¿ëÇÑ °æ¿ì´Ù.</p>
-
- <p>¹Ý´ë·Î ¹®¼­¿¡ Á¢±ÙÇÒ¶§ ¼­¹ö ¿À·ù°¡ ¹ß»ýÇÏ¸é ¾ÆÆÄÄ¡ ¿À·ù·Î±×¸¦
- »ìÆìºÁ¶ó. ¾Æ¸¶µµ <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î¸¦
- Çã¿ëÇÏÁö ¾Ê´Â´Ù°í ÇÒ °ÍÀÌ´Ù. ¾Æ´Ï°í ¹®¹ý ¿À·ù°¡ ÀÖ´Ù¸é ¿À·ù¸¦
- °íÄ£´Ù.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/htaccess.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/htaccess.xml b/docs/manual/howto/htaccess.xml
deleted file mode 100755
index e93d80f2b0..0000000000
--- a/docs/manual/howto/htaccess.xml
+++ /dev/null
@@ -1,377 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htaccess.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
-<title>Apache Tutorial: .htaccess files</title>
-
-<summary>
-<p><code>.htaccess</code> files provide a way to make configuration
-changes on a per-directory basis.</p>
-</summary>
-
-<section id="related"><title>.htaccess files</title>
- <related>
- <modulelist>
- <module>core</module>
- <module>mod_authn_file</module>
- <module>mod_authz_groupfile</module>
- <module>mod_cgi</module>
- <module>mod_include</module>
- <module>mod_mime</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">AccessFileName</directive>
- <directive module="core">AllowOverride</directive>
- <directive module="core">Options</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="core">SetHandler</directive>
- <directive module="core">AuthType</directive>
- <directive module="core">AuthName</directive>
- <directive module="mod_authn_file">AuthUserFile</directive>
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- <directive module="core">Require</directive>
- </directivelist>
-
- </related>
-</section>
-
-<section id="what">
-<title>What they are/How to use them</title>
-
- <p><code>.htaccess</code> files (or "distributed configuration files")
- provide a way to make configuration changes on a per-directory basis. A
- file, containing one or more configuration directives, is placed in a
- particular document directory, and the directives apply to that
- directory, and all subdirectories thereof.</p>
-
- <note><title>Note:</title>
- <p>If you want to call your <code>.htaccess</code> file something
- else, you can change the name of the file using the <directive
- module="core">AccessFileName</directive> directive. For example,
- if you would rather call the file <code>.config</code> then you
- can put the following in your server configuration file:</p>
-
- <example>
- AccessFileName .config
- </example>
- </note>
-
- <p>In general, <code>.htaccess</code> files use the same syntax as
- the <a href="../configuring.html#syntax">main configuration
- files</a>. What you can put in these files is determined by the
- <directive module="core">AllowOverride</directive> directive. This
- directive specifies, in categories, what directives will be
- honored if they are found in a <code>.htaccess</code> file. If a
- directive is permitted in a <code>.htaccess</code> file, the
- documentation for that directive will contain an Override section,
- specifying what value must be in <directive
- module="core">AllowOverride</directive> in order for that
- directive to be permitted.</p>
-
- <p>For example, if you look at the documentation for the <directive
- module="core">AddDefaultCharset</directive>
- directive, you will find that it is permitted in <code>.htaccess</code>
- files. (See the Context line in the directive summary.) The <a
- href="../mod/directive-dict.html#Context">Override</a> line reads
- <code>FileInfo</code>. Thus, you must have at least
- <code>AllowOverride FileInfo</code> in order for this directive to be
- honored in <code>.htaccess</code> files.</p>
-
- <example><title>Example:</title>
- <table>
- <tr>
- <td><a
- href="../mod/directive-dict.html#Context">Context:</a></td>
- <td>server config, virtual host, directory, .htaccess</td>
- </tr>
-
- <tr>
- <td><a
- href="../mod/directive-dict.html#Override">Override:</a></td>
- <td>FileInfo</td>
- </tr>
- </table>
- </example>
-
- <p>If you are unsure whether a particular directive is permitted in a
- <code>.htaccess</code> file, look at the documentation for that
- directive, and check the Context line for ".htaccess".</p>
- </section>
-
- <section id="when"><title>When (not) to use .htaccess files</title>
-
- <p>In general, you should never use <code>.htaccess</code> files unless
- you don't have access to the main server configuration file. There is,
- for example, a prevailing misconception that user authentication should
- always be done in <code>.htaccess</code> files. This is simply not the
- case. You can put user authentication configurations in the main server
- configuration, and this is, in fact, the preferred way to do
- things.</p>
-
- <p><code>.htaccess</code> files should be used in a case where the
- content providers need to make configuration changes to the server on a
- per-directory basis, but do not have root access on the server system.
- In the event that the server administrator is not willing to make
- frequent configuration changes, it might be desirable to permit
- individual users to make these changes in <code>.htaccess</code> files
- for themselves. This is particularly true, for example, in cases where
- ISPs are hosting multiple user sites on a single machine, and want
- their users to be able to alter their configuration.</p>
-
- <p>However, in general, use of <code>.htaccess</code> files should be
- avoided when possible. Any configuration that you would consider
- putting in a <code>.htaccess</code> file, can just as effectively be
- made in a <directive module="core"
- type="section">Directory</directive> section in your main server
- configuration file.</p>
-
- <p>There are two main reasons to avoid the use of
- <code>.htaccess</code> files.</p>
-
- <p>The first of these is performance. When <directive
- module="core">AllowOverride</directive>
- is set to allow the use of <code>.htaccess</code> files, Apache will
- look in every directory for <code>.htaccess</code> files. Thus,
- permitting <code>.htaccess</code> files causes a performance hit,
- whether or not you actually even use them! Also, the
- <code>.htaccess</code> file is loaded every time a document is
- requested.</p>
-
- <p>Further note that Apache must look for <code>.htaccess</code> files
- in all higher-level directories, in order to have a full complement of
- directives that it must apply. (See section on <a href="#how">how
- directives are applied</a>.) Thus, if a file is requested out of a
- directory <code>/www/htdocs/example</code>, Apache must look for the
- following files:</p>
-
- <example>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/example/.htaccess
- </example>
-
- <p>And so, for each file access out of that directory, there are 4
- additional file-system accesses, even if none of those files are
- present. (Note that this would only be the case if
- <code>.htaccess</code> files were enabled for <code>/</code>, which
- is not usually the case.)</p>
-
- <p>The second consideration is one of security. You are permitting
- users to modify server configuration, which may result in changes over
- which you have no control. Carefully consider whether you want to give
- your users this privilege. Note also that giving users less
- privileges than they need will lead to additional technical support
- requests. Make sure you clearly tell your users what level of
- privileges you have given them. Specifying exactly what you have set
- <directive module="core">AllowOverride</directive> to, and pointing them
- to the relevant documentation, will save yourself a lot of confusion
- later.</p>
-
- <p>Note that it is completely equivalent to put a <code>.htaccess</code>
- file in a directory <code>/www/htdocs/example</code> containing a
- directive, and to put that same directive in a Directory section
- <code>&lt;Directory /www/htdocs/example&gt;</code> in your main server
- configuration:</p>
-
- <p><code>.htaccess</code> file in <code>/www/htdocs/example</code>:</p>
-
- <example><title>Contents of .htaccess file in
- <code>/www/htdocs/example</code></title>
- AddType text/example .exm
- </example>
-
- <example><title>Section from your <code>httpd.conf</code>
- file</title>
- &lt;Directory /www/htdocs/example&gt;<br />
- <indent>
- AddType text/example .exm<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>However, putting this configuration in your server configuration
- file will result in less of a performance hit, as the configuration is
- loaded once when Apache starts, rather than every time a file is
- requested.</p>
-
- <p>The use of <code>.htaccess</code> files can be disabled completely
- by setting the <directive module="core">AllowOverride</directive>
- directive to <code>none</code>:</p>
-
- <example>
- AllowOverride None
- </example>
-</section>
-
-<section id="how"><title>How directives are applied</title>
-
- <p>The configuration directives found in a <code>.htaccess</code> file
- are applied to the directory in which the <code>.htaccess</code> file
- is found, and to all subdirectories thereof. However, it is important
- to also remember that there may have been <code>.htaccess</code> files
- in directories higher up. Directives are applied in the order that they
- are found. Therefore, a <code>.htaccess</code> file in a particular
- directory may override directives found in <code>.htaccess</code> files
- found higher up in the directory tree. And those, in turn, may have
- overridden directives found yet higher up, or in the main server
- configuration file itself.</p>
-
- <p>Example:</p>
-
- <p>In the directory <code>/www/htdocs/example1</code> we have a
- <code>.htaccess</code> file containing the following:</p>
-
- <example>
- Options +ExecCGI
- </example>
-
- <p>(Note: you must have "<code>AllowOverride Options</code>" in effect
- to permit the use of the "<directive
- module="core">Options</directive>" directive in
- <code>.htaccess</code> files.)</p>
-
- <p>In the directory <code>/www/htdocs/example1/example2</code> we have
- a <code>.htaccess</code> file containing:</p>
-
- <example>
- Options Includes
- </example>
-
- <p>Because of this second <code>.htaccess</code> file, in the directory
- <code>/www/htdocs/example1/example2</code>, CGI execution is not
- permitted, as only <code>Options Includes</code> is in effect, which
- completely overrides any earlier setting that may have been in
- place.</p>
-</section>
-
-<section id="auth"><title>Authentication example</title>
-
- <p>If you jumped directly to this part of the document to find out how
- to do authentication, it is important to note one thing. There is a
- common misconception that you are required to use
- <code>.htaccess</code> files in order to implement password
- authentication. This is not the case. Putting authentication directives
- in a <directive module="core" type="section">Directory</directive>
- section, in your main server configuration file, is the preferred way
- to implement this, and <code>.htaccess</code> files should be used only
- if you don't have access to the main server configuration file. See <a
- href="#when">above</a> for a discussion of when you should and should
- not use <code>.htaccess</code> files.</p>
-
- <p>Having said that, if you still think you need to use a
- <code>.htaccess</code> file, you may find that a configuration such as
- what follows may work for you.</p>
-
- <p><code>.htaccess</code> file contents:</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </example>
-
- <p>Note that <code>AllowOverride AuthConfig</code> must be in effect
- for these directives to have any effect.</p>
-
- <p>Please see the <a href="auth.html">authentication tutorial</a> for a
- more complete discussion of authentication and authorization.</p>
-</section>
-
-<section id="ssi"><title>Server Side Includes example</title>
-
- <p>Another common use of <code>.htaccess</code> files is to enable
- Server Side Includes for a particular directory. This may be done with
- the following configuration directives, placed in a
- <code>.htaccess</code> file in the desired directory:</p>
-
- <example>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </example>
-
- <p>Note that <code>AllowOverride Options</code> and <code>AllowOverride
- FileInfo</code> must both be in effect for these directives to have any
- effect.</p>
-
- <p>Please see the <a href="ssi.html">SSI tutorial</a> for a more
- complete discussion of server-side includes.</p>
-</section>
-
-<section id="cgi"><title>CGI example</title>
-
- <p>Finally, you may wish to use a <code>.htaccess</code> file to permit
- the execution of CGI programs in a particular directory. This may be
- implemented with the following configuration:</p>
-
- <example>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </example>
-
- <p>Alternately, if you wish to have all files in the given directory be
- considered to be CGI programs, this may be done with the following
- configuration:</p>
-
- <example>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </example>
-
- <p>Note that <code>AllowOverride Options</code> and <code>AllowOverride
- FileInfo</code> must both be in effect for these directives to have any
- effect.</p>
-
- <p>Please see the <a href="cgi.html">CGI tutorial</a> for a more
- complete discussion of CGI programming and configuration.</p>
-
-</section>
-
-<section id="troubleshoot"><title>Troubleshooting</title>
-
- <p>When you put configuration directives in a <code>.htaccess</code>
- file, and you don't get the desired effect, there are a number of
- things that may be going wrong.</p>
-
- <p>Most commonly, the problem is that <directive
- module="core">AllowOverride</directive> is not
- set such that your configuration directives are being honored. Make
- sure that you don't have a <code>AllowOverride None</code> in effect
- for the file scope in question. A good test for this is to put garbage
- in your <code>.htaccess</code> file and reload. If a server error is
- not generated, then you almost certainly have <code>AllowOverride
- None</code> in effect.</p>
-
- <p>If, on the other hand, you are getting server errors when trying to
- access documents, check your Apache error log. It will likely tell you
- that the directive used in your <code>.htaccess</code> file is not
- permitted. Alternately, it may tell you that you had a syntax error,
- which you will then need to fix.</p>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/howto/htaccess.xml.ja b/docs/manual/howto/htaccess.xml.ja
deleted file mode 100644
index 620aad19f5..0000000000
--- a/docs/manual/howto/htaccess.xml.ja
+++ /dev/null
@@ -1,364 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htaccess.xml.meta">
-<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
-
-<title>Apache $B%A%e!<%H%j%"%k(B: .htaccess $B%U%!%$%k(B</title>
-
-<summary>
-<p><code>.htaccess</code> $B%U%!%$%k$O%G%#%l%/%H%jKh$K@_Dj$rJQ99$9$kJ}K!$r(B
-$BDs6!$7$^$9!#(B</p>
-</summary>
-
-<section id="related"><title>.htaccess $B%U%!%$%k(B</title>
- <related>
- <modulelist>
- <module>core</module>
- <module>mod_authn_file</module>
- <module>mod_authz_groupfile</module>
- <module>mod_cgi</module>
- <module>mod_include</module>
- <module>mod_mime</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">AccessFileName</directive>
- <directive module="core">AllowOverride</directive>
- <directive module="core">Options</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="core">SetHandler</directive>
- <directive module="core">AuthType</directive>
- <directive module="core">AuthName</directive>
- <directive module="mod_authn_file">AuthUserFile</directive>
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- <directive module="core">Require</directive>
- </directivelist>
-
- </related>
-</section>
-
-<section id="what">
-<title>.htaccess $B%U%!%$%k$H$O2?$+(B/$B$=$N;H$$J}(B</title>
-
- <p><code>.htaccess</code> $B%U%!%$%k(B ($B!VJ,;6@_Dj%U%!%$%k!W(B) $B$O(B
- $B%G%#%l%/%H%jKh$K@_Dj$rJQ99$9$kJ}K!$rDs6!$7$^$9!#%G%#%l%/%F%#%V$N(B
- $B=q$+$l$?%U%!%$%k$r%G%#%l%/%H%j$KCV$/$3$H$G!"$=$N%G%#%l%/%H%j$H$=$N(B
- $B%5%V%G%#%l%/%H%j$9$Y$F$K%G%#%l%/%F%#%V$rE,MQ$5$;$k$3$H$,$G$-$^$9!#(B</p>
-
- <note><title>$BCm(B:</title>
- <p><code>.htaccess</code> $B%U%!%$%k$rJL$NL>A0$K$7$?$$>l9g$O!"(B
- <directive module="core">AccessFileName</directive> $B%G%#%l%/%F%#%V$r(B
- $B;H$C$FJQ99$9$k$3$H$,$G$-$^$9!#Nc$($P!"$=$N%U%!%$%k$r(B <code>.config</code>
- $B$H$$$&L>A0$K$7$?$$>l9g$O!"0J2<$N@_Dj$r%5!<%P@_Dj%U%!%$%k$KF~$l$k$3$H$,(B
- $B$G$-$^$9(B:</p>
-
- <example>
- AccessFileName .config
- </example>
- </note>
-
- <p>$B0lHL$K!"(B<code>.htaccess</code> $B%U%!%$%k$N9=J8$O(B
- <a href="../configuring.html#syntax">$B<g@_Dj%U%!%$%k(B</a>
- $B$HF1$8$G$9!#$3$l$i$N%U%!%$%k$K=q$/$3$H$N$G$-$k%G%#%l%/%F%#%V$O(B <directive
- module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$K$h$j7h$^$j$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$O!"(B<code>.htaccess</code> $B%U%!%$%k$K(B
- $B=q$+$l$?%G%#%l%/%F%#%V$NCf$G!"!"(B
- $B$I$N%G%#%l%/%F%#%V$,E,MQ$5$l$k$+$r%+%F%4%j!<C10L$G;XDj$7$^$9!#(B
- <code>.htaccess</code> $B$K=q$/$3$H$N$G$-$k%G%#%l%/%F%#%V$G$"$l$P!"(B
- $B@bL@J8=q$K$O!V>e=q$-!W$H$$$&9`L\$,$"$j!"(B.htaccess $B$K=q$/$3$H$,$G$-$k$h$&$K(B
- $B$J$k$?$a$N(B <directive
- module="core">AllowOverride</directive> $B$NCM$,;XDj$5$l$F$$$^$9!#(B</p>
-
- <p>$BNc$($P!"(B<directive
- module="core">AddDefaultCharset</directive> $B%G%#%l%/%F%#%V$N@bL@$r(B
- $B8+$k$H!"(B<code>.htaccess</code> $B%U%!%$%k$G$N;HMQ$,5v2D$5$l$F$$$k$3$H$,(B
- $B$o$+$j$^$9!#(B ($B%G%#%l%/%F%#%V$N35MW$N=j$K$"$k!V%3%s%F%-%9%H!W$H=q$+$l$F$$$k(B
- $B9T$r8+$F$/$@$5$$!#(B) <a
- href="../mod/directive-dict.html#Context">$B>e=q$-(B</a>$B$H=q$+$l$F$$$k9T$K$O(B
- <code>FileInfo</code> $B$H$"$j$^$9!#$G$9$+$i!"(B<code>.htaccess</code> $BCf$N(B
- $B$3$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!">/$J$/$H$b(B
- <code>AllowOverride FileInfo</code> $B$,@_Dj$5$l$F$$$kI,MW$,$"$j$^$9!#(B</p>
-
- <example><title>$BNc(B:</title>
- <table>
- <tr>
- <td><a
- href="../mod/directive-dict.html#Context">$B%3%s%F%-%9%H(B:</a></td>
- <td>$B%5!<%P@_Dj%U%!%$%k(B,$B%P!<%A%c%k%[%9%H(B,$B%G%#%l%/%H%j(B,.htaccess</td>
- </tr>
-
- <tr>
- <td><a
- href="../mod/directive-dict.html#Override">$B>e=q$-(B:</a></td>
- <td>FileInfo</td>
- </tr>
- </table>
- </example>
-
- <p>$B$"$k%G%#%l%/%F%#%V$r(B <code>.htaccess</code> $B%U%!%$%k$K=q$/$3$H$,$G$-$k$+(B
- $B$I$&$+$o$+$i$J$$$H$-$O!"$=$N%G%#%l%/%F%#%V$N@bL@$rC5$7$F!"(B".htaccess"
- $B$N$?$a$N!V%3%s%F%-%9%H!W$N9T$rD4$Y$F$/$@$5$$!#(B</p>
- </section>
-
- <section id="when"><title>$B$$$D(B .htaccess $B%U%!%$%k$r;H$&(B($B;H$o$J$$(B)$B$+!#(B</title>
-
- <p>$B0lHLE*$K!"%5!<%P$N<g@_Dj%U%!%$%k$K%"%/%;%9$G$-$J$$>l9g$r=|$$$F!"(B
- <code>.htaccess</code> $B%U%!%$%k$N;HMQ$O6KNOHr$1$F$/$@$5$$!#(B
- $B@$$NCf$K$O!"Nc$($P!"%f!<%6G'>Z$O>o$K(B <code>.htaccess</code> $B%U%!%$%k$G(B
- $B9T$J$o$J$1$l$P$J$i$J$$!"$H$$$&8m2r$,9-$^$C$F$$$^$9$,!"$^$C$?$/$=$s$J$3$H$O(B
- $B$"$j$^$;$s!#%f!<%6G'>Z$N@_Dj$O%5!<%P<g@_Dj%U%!%$%k$K=q$/$3$H$,$G$-!"(B
- $B<B:]!"$=$NJ}$,$h$jNI$$@_DjJ}K!$G$9!#(B</p>
-
- <p><code>.htaccess</code> $B%U%!%$%k$O%3%s%F%s%DDs6!<T$,%G%#%l%/%H%jKh$N(B
- $B@_Dj$r9T$J$$$?$$$1$l$I!"%5!<%P%7%9%F%`$N(B root $B%"%/%;%98"8B$r;}$C$F$$$J$$(B
- $B$H$$$&>l9g$K$N$_;H$&$Y$-$b$N$G$9!#%5!<%P4IM}<T$,IQHK$K@_DjJQ99$r9T$J$$$?$/$O(B
- $B$J$$!"$H$$$&$H$-$K$O8D!9$N%f!<%6$,(B <code>.htaccess</code> $B%U%!%$%k$r;H$C$F(B
- $B<+J,$G@_Dj$NJQ99$r9T$J$&$3$H$r5v2D$7$?J}$,NI$$$H$-$b$"$k$G$7$g$&!#(B
- $B$3$l$OFC$K!"(BISP $B$,J#?t$N%f!<%6$N%5%$%H$r0l$D$N%^%7%s$G%[%9%H$7$F$$$F!"(B
- $B3F%f!<%6$,@_Dj$NJQ99$r$G$-$k$h$&$K$7$?$$$h$&$J$H$-$K$"$F$O$^$j$^$9!#(B</p>
-
- <p>$B$7$+$7!"IaDL$O2DG=$G$"$l$P(B <code>.htaccess</code> $B%U%!%$%k$N;HMQ$O(B
- $BHr$1$F$/$@$5$$!#(B<code>.htaccess</code> $B%U%!%$%k$K=q$3$&$H9M$($k$h$&$J(B
- $B$9$Y$F$N@_Dj$O!"%5!<%P$N<g@_Dj%U%!%$%k$N(B <directive module="core"
- type="section">Directory</directive> $B%;%/%7%g%s$GF1$8$h$&$K9T$J$&$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
- <p><code>.htaccess</code> $B%U%!%$%k$N;HMQ$rHr$1$kM}M3$O<g$KFs$D$"$j$^$9!#(B</p>
-
- <p>$B0l$DL\$O%5!<%P$N@-G=$NLdBj$G$9!#(B<directive
- module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$,(B
- <code>.htaccess</code> $B%U%!%$%k$N@_Dj$r5v2D$7$F$$$k>l9g$O!"(BApache $B$O(B
- $B3F%G%#%l%/%H%j$G(B <code>.htaccess</code> $B%U%!%$%k$rC5$7$^$9!#(B
- $B$G$9$+$i!"(B<code>.htaccess</code> $B%U%!%$%k$r5v2D$9$k$H!"<B:]$K;HMQ$7$F$$$k$+(B
- $B$I$&$+$K4X$o$i$:!"@-G=$NDc2<$r>7$/$3$H$K$J$j$^$9(B! $B$^$?!"(B<code>.htaccess</code>
- $B%U%!%$%k$OJ8=q$,%j%/%(%9%H$5$l$kEY$KFI$_9~$^$l$^$9!#(B</p>
-
- <p>$B$5$i$K!"(BApache $B$OE,MQ$9$Y$-%G%#%l%/%F%#%V$r=8$a$k$?$a$K!"$9$Y$F$N(B
- $B>e0L$N%G%#%l%/%H%j$N(B <code>.htaccess</code> $B%U%!%$%k$rC5$9I,MW$,$"$k$3$H$K$b(B
- $BCm0U$7$F$/$@$5$$!#(B(<a href="#how">$B%G%#%l%/%F%#%V$,E,MQ$5$l$kJ}K!(B</a>$B$r(B
- $B;2>H$7$F$/$@$5$$!#(B)$B$G$9$+$i!"(B<code>/www/htdocs/example</code> $B$K$"$k(B
- $B%U%!%$%k$,%j%/%(%9%H$5$l$?$H$-$O!"(BApache $B$O0J2<$N%U%!%$%k$rD4$Y$^$9!#(B</p>
-
- <example>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/example/.htaccess
- </example>
-
- <p>$B$G$9$+$i!"$=$N%G%#%l%/%H%j$N$=$l$>$l$N%U%!%$%k$X$N%"%/%;%9$KBP$7$F!"(B
- $B>e$NNc$N%U%!%$%k$,$^$C$?$/B8:_$7$J$$$H$-$G$b!"DI2C$N%U%!%$%k%7%9%F%`$N(B
- $B%"%/%;%9$,9T$J$o$l$k$3$H$K$J$j$^$9!#(B($B$3$l$O!"(B<code>.htaccess</code> $B$,(B
- <code>/</code> $B$KBP$7$FM-8z$K$J$C$F$$$k$H$-$N>l9g$G!"IaDL$O$=$&$J$C$F(B
- $B$$$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B)</p>
-
- <p>$BFs$DL\$O%;%-%e%j%F%#$G$9!#%f!<%6$K%5!<%P$N@_Dj$rJQ99$9$k$3$H$r(B
- $B5v2D$9$k$3$H$K$J$j$^$9$N$G!"$"$J$?<+?H$,4IM}$G$-$J$$JQ99$r$5$l$k(B
- $B62$l$,$"$j$^$9!#%f!<%6$K$3$NFC8"$rM?$($k$N$,NI$$$N$+$I$&$+!"==J,(B
- $B8!F$$7$F$/$@$5$$!#$^$?!"%f!<%6$KM?$($k8"8B$,I,MW$J$b$N$h$j$b>/$J$9$.$k$H!"(B
- $BM>J,$J5;=Q%5%]!<%HJs9p$r<u$1<h$k$h$&$K$J$k2DG=@-$,9b$$$3$H$K$b(B
- $BCm0U$7$F$/$@$5$$!#3N<B$K!"%f!<%6$K$I$NDxEY$N8"8B$rM?$($?$+L@3N$K9p$2$k$h$&$K(B
- $B$7$F$/$@$5$$!#(B<directive module="core">AllowOverride</directive> $B$K(B
- $B2?$r@_Dj$7$?$+$H$$$&$3$H$H!"4XO"$9$kJ8=q$r<($9$3$H$G!"(B
- $B8e!9$N:.Mp$r$0$C$H8:$i$9$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
- <p>$B$H$3$m$G!"%G%#%l%/%F%#%V$N=q$+$l$?(B <code>.htaccess</code> $B$r(B
- <code>/www/htdocs/example</code> $B$KCV$/$3$H$H!"F1$8%G%#%l%/%F%#%V$r(B
- $B<g%5!<%P@_Dj$N(B Directory $B%;%/%7%g%s(B
- <code>&lt;Directory /www/htdocs/example&gt;</code> $B$K=q$/$3$H$O(B
- $B40A4$KEy2A$G$9(B:</p>
-
- <p><code>/www/htdocs/example</code> $B$N(B <code>.htaccess</code> $B%U%!%$%k(B:</p>
-
- <example><title><code>/www/htdocs/example</code> $B$N(B .htaccess $B%U%!%$%k$N(B
- $BFbMF(B</title>
- AddType text/example .exm
- </example>
-
- <example><title><code>httpd.conf $B$N%;%/%7%g%s(B</code>
- file</title>
- &lt;Directory /www/htdocs/example&gt;<br />
- <indent>
- AddType text/example .exm<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B$7$+$7!"$3$N@_Dj$O%5!<%P@_Dj%U%!%$%k$K=q$$$?J}$,%Q%U%)!<%^%s%9$N(B
- $BDc2<$,>/$J$/$J$j$^$9!#%U%!%$%k$,%j%/%(%9%H$5$l$kEY$K(B
- $BFI$_9~$^$l$kBe$o$j$K!"(BApache $B$N5/F0;~$K(B 1 $B2s$@$1FI$_9~$a$P(B
- $B$h$/$J$k$+$i$G$9!#(B</p>
-
- <p><directive module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$N(B
- $BCM$r(B <code>none</code> $B$K@_Dj$9$k$3$H$G(B <code>.htaccess</code> $B%U%!%$%k(B
- $B$N;HMQ$r40A4$KL58z$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- AllowOverride None
- </example>
-</section>
-
-<section id="how"><title>$B%G%#%l%/%F%#%V$NE,MQ$N$5$lJ}(B</title>
-
- <p><code>.htaccess</code> $B%U%!%$%k$N@_Dj%G%#%l%/%F%#%V$O(B <code>.htaccess</code>
- $B%U%!%$%k$NB8:_$9$k%G%#%l%/%H%j$H!"$=$N%5%V%G%#%l%/%H%j$9$Y$F$KE,MQ$5$l$^$9!#(B
- $B$7$+$7!">e$N3,AX$N%G%#%l%/%H%j$K$b(B <code>.htaccess</code> $B%U%!%$%k$,(B
- $BB8:_$9$k$+$b$7$l$J$$$3$H$r3P$($F$*$/$3$H$OBg@Z$G$9!#%G%#%l%/%F%#%V$O8=$l$k(B
- $B=gHV$KE,MQ$5$l$^$9!#$G$9$+$i!"$"$k%G%#%l%/%H%j$N(B <code>.htaccess</code> $B$O(B
- $B%G%#%l%/%H%j%D%j!<$N$h$j>e$N3,AX$N(B <code>.htaccess</code> $B%U%!%$%k$N(B
- $B@_Dj$r>e=q$-$9$k$+$b$7$l$^$;$s!#$=$7$F!"$=$N(B <code>.htaccess</code> $B$b(B
- $B$h$j>e$N3,AX$G=q$+$l$?%G%#%l%/%F%#%V$r>e=q$-$7$?$j!"<g%5!<%P@_Dj%U%!%$%k(B
- $B$=$N$b$N$N@_Dj$r>e=q$-$7$?$j$7$F$$$k$+$b$7$l$^$;$s!#(B</p>
-
- <p>$BNc(B:</p>
-
- <p>$B%G%#%l%/%H%j(B <code>/www/htdocs/example1</code> $B$K0J2<$NFbMF$N(B
- <code>.htaccess</code> $B%U%!%$%k$,$"$j$^$9(B:</p>
-
- <example>
- Options +ExecCGI
- </example>
-
- <p>($BCm(B: <code>.htaccess</code>
- $B%U%!%$%k$G(B "<directive
- module="core">Options</directive>" $B%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
- "<code>AllowOverride Options</code>" $B$rM-8z$K$9$kI,MW$,$"$j$^$9!#(B)</p>
-
- <p>$B%G%#%l%/%H%j(B <code>/www/htdocs/example1/example2</code> $B$K$O(B
- $B0J2<$N$h$&$J(B <code>.htaccess</code> $B%U%!%$%k$,$"$j$^$9(B:</p>
-
- <example>
- Options Includes
- </example>
-
- <p>$BFs$D$a$N(B <code>.htaccess</code> $B$K$h$j!"%G%#%l%/%H%j(B
- <code>/www/htdocs/example1/example2</code> $B$G$O(B CGI $B$N<B9T$O(B
- $B5v2D$5$l$^$;$s!#$3$l$O!"(B<code>Options Includes</code> $B$N$_$,(B
- $B8zNO$r;}$A!"$=$l$,$9$Y$F$N0JA0$N@_Dj$r>e=q$-$9$k$+$i$G$9!#(B</p>
-</section>
-
-<section id="auth"><title>$BG'>Z$NNc(B</title>
-
- <p>$B$b$7G'>Z$NJ}K!$rCN$k$?$a$K$3$NItJ,$KD>@\Mh$?$N$G$"$l$P!"<!$N$3$H$r(B
- $BCN$C$F$*$/$3$H$,=EMW$G$9!#$h$/$"$k8m2r$K!"%Q%9%o!<%IG'>Z$r9T$J$&$?$a$K$O(B
- <code>.htaccess</code> $B%U%!%$%k$r;H$&I,MW$,$"$k!"$H$$$&$b$N$,$"$j$^$9!#(B
- $B$3$l$O@5$7$/$"$j$^$;$s!#<g%5!<%P@_Dj%U%!%$%k$N(B <directive
- module="core" type="section">Directory</directive> $B%;%/%7%g%s$K(B
- $BG'>ZMQ$N%G%#%l%/%F%#%V$r=q$/J}$,?d>)$5$l$kJ}K!$G!"(B<code>.htaccess</code>
- $B%U%!%$%k$O<g%5!<%P@_Dj%U%!%$%k$rJQ99$G$-$J$$$H$-$K$N$_;HMQ$9$Y$-$G$9!#(B
- $B$$$D(B <code>.htaccess</code> $B%U%!%$%k$r;H$&$Y$-$G!"$$$D;H$&$Y$-$G$O$J$$$+$K(B
- $B$D$$$F$O(B <a
- href="#when">$B>e(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</p>
-
- <p>$B0J>e$N$3$H$r$U$^$($?>e$G!"$b$7(B <code>.htaccess</code> $B$N;HMQ$,(B
- $B$^$@I,MW$@$H;W$&>l9g$O!"<!$N$h$&$J$b$N$,K>$_$N$3$H$r$7$F$/$l$k$+$b(B
- $B$7$l$^$;$s!#(B</p>
-
- <p><code>.htaccess</code> $B%U%!%$%k$NFbMF(B:</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </example>
-
- <p>$B$3$l$i$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
- <code>AllowOverride AuthConfig</code> $B$,M-8z$G$J$/$F$O$J$i$J$$$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#(B</p>
-
- <p>$BG'>Z$H>5G'$K$D$$$F$O(B <a href="auth.html">$BG'>Z%A%e!<%H%j%"%k(B</a>$B$r(B
- $B;2>H$7$F$/$@$5$$!#(B</p>
-</section>
-
-<section id="ssi"><title>SSI $B$NNc(B</title>
-
- <p>$B$b$&0l$D$N(B <code>.htaccess</code> $B%U%!%$%k$N$h$/$"$kMxMQK!$O(B
- $BFCDj$N%G%#%l%/%H%j$G(B SSI $B$rM-8z$K$9$k$3$H$G$9!#$3$l$O!"K>$_$N%G%#%l%/%H%j$N(B
- <code>.htaccess</code> $B%U%!%$%k$K0J2<$N@_Dj%G%#%l%/%F%#%V$r=q$/$3$H$G(B
- $BC#@.$G$-$^$9(B:</p>
-
- <example>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </example>
-
- <p>$B$3$l$i$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
- <code>AllowOverride Options</code> $B$H(B <code>AllowOverride
- FileInfo</code> $B$,M-8z$K$J$C$F$$$kI,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <p>$B$h$j$^$H$^$C$?(B SSI $B$N@bL@$O(B <a href="ssi.html">SSI $B%A%e!<%H%j%"%k(B</a>$B$r(B
- $B;2>H$7$F$/$@$5$$!#(B</p>
-</section>
-
-<section id="cgi"><title>CGI $B$NNc(B</title>
-
- <p>$B:G8e$K!"FCDj$N%G%#%l%/%H%j$G(B CGI $B%W%m%0%i%`$N<B9T$r5v2D$7$?$$$3$H$,(B
- $B$"$k$G$7$g$&!#$3$l$O0J2<$N@_Dj$G9T$J$&$3$H$,$G$-$^$9(B:</p>
-
- <example>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </example>
-
- <p>$B$b$7$/$O!"$"$k%G%#%l%/%H%j$N$9$Y$F$N%U%!%$%k$,(B CGI $B%W%m%0%i%`$H(B
- $B$_$J$5$l$k$h$&$K$7$?$$$J$i!"0J2<$N@_Dj$G<B8=$9$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </example>
-
- <p>$B$3$l$i$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
- <code>AllowOverride Options</code> $B$H(B <code>AllowOverride
- FileInfo</code> $B$,M-8z$G$"$kI,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <p>CGI $B%W%m%0%i%`$H@_Dj$N$h$j$^$H$^$C$?@bL@$O(B <a
- href="cgi.html">CGI $B%A%e!<%H%j%"%k(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</p>
-
-</section>
-
-<section id="troubleshoot"><title>$BLdBj2r7h(B</title>
-
- <p>$B@_Dj%G%#%l%/%F%#%V$r(B <code>.htaccess</code> $B%U%!%$%k$K=q$$$?$1$l$I$b!"(B
- $B4|BT$7$?8z2L$,F@$i$l$J$$$H$-$K$O!"$$$/$D$+$N860x$,9M$($i$l$^$9!#(B</p>
-
- <p>$B0lHV$h$/$"$k$3$H$O!"@_Dj%G%#%l%/%F%#%V$,9MN8$5$l$k$h$&$K$O(B
- <directive module="core">AllowOverride</directive> $B$,@_Dj$5$l$F$$$J$$(B
- $B$H$$$&$b$N$G$9!#3:Ev$N%U%!%$%k$N%9%3!<%W$K(B <code>AllowOverride None</code>
- $B$,@_Dj$5$l$F$$$J$$$3$H$r3NG'$7$F$/$@$5$$!#$3$l$rD4$Y$k$?$a$NNI$$J}K!$O!"(B
- <code>.htaccess</code> $B%U%!%$%k$K$4$_$r=q$$$F!"%j%m!<%I$9$k$3$H$G$9!#(B
- $B%5!<%P$N%(%i!<$,@8@.$5$l$J$$$H$-$O!"$[$\3N<B$K(B <code>AllowOverride
- None</code> $B$,@_Dj$5$l$F$$$k>uBV$K$J$C$F$$$^$9!#(B</p>
-
- <p>$B$=$&$G$O$J$/!"J8=q$r%"%/%;%9$7$h$&$H$7$?$H$-$K%(%i!<$,H/@8$7$F$$$k(B
- $B$H$-$O!"(BApache $B$N%(%i!<%m%0$rD4$Y$F$/$@$5$$!#(B<code>.htaccess</code> $B%U%!%$%k$G(B
- $B;HMQ$5$l$?%G%#%l%/%F%#%V$,5v2D$5$l$F$$$J$$!"$H$$$&$3$H$rCN$i$;$F$$$k(B
- $B2DG=@-$,9b$$$G$9!#$^$?$O!"9=J8$N4V0c$$$,$"$k$3$H$r=R$Y$F$$$k$+$b$7$l$^$;$s!#(B
- $B$=$N>l9g$K$O$^$:$=$l$r=$@5$9$kI,MW$,$"$j$^$9!#(B</p>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/howto/htaccess.xml.ko b/docs/manual/howto/htaccess.xml.ko
deleted file mode 100644
index 5f7cf370ed..0000000000
--- a/docs/manual/howto/htaccess.xml.ko
+++ /dev/null
@@ -1,350 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htaccess.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
-<title>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: .htaccess ÆÄÀÏ</title>
-
-<summary>
-<p><code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© µð·ºÅ丮º°·Î ¼³Á¤À»
-º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<section id="related"><title>.htaccess ÆÄÀÏ</title>
- <related>
- <modulelist>
- <module>core</module>
- <module>mod_authn_file</module>
- <module>mod_authz_groupfile</module>
- <module>mod_cgi</module>
- <module>mod_include</module>
- <module>mod_mime</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">AccessFileName</directive>
- <directive module="core">AllowOverride</directive>
- <directive module="core">Options</directive>
- <directive module="mod_mime">AddHandler</directive>
- <directive module="core">SetHandler</directive>
- <directive module="core">AuthType</directive>
- <directive module="core">AuthName</directive>
- <directive module="mod_authn_file">AuthUserFile</directive>
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- <directive module="core">Require</directive>
- </directivelist>
-
- </related>
-</section>
-
-<section id="what">
-<title>¹«¾ùÀ̸ç/¾î¶»°Ô »ç¿ëÇϴ°¡</title>
-
- <p><code>.htaccess</code> ÆÄÀÏ(ȤÀº "ºÐ»ê ¼³Á¤ÆÄÀÏ")À»
- »ç¿ëÇÏ¸é µð·ºÅ丮º°·Î ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖ´Ù. ¿©·¯ ¼³Á¤ Áö½Ã¾î°¡
- ÀÖ´Â ÆÄÀÏÀ» ƯÁ¤ ¹®¼­ µð·ºÅ丮¿¡ µÎ¸é, ±× µð·ºÅ丮¿Í ¸ðµç
- ÇÏÀ§µð·ºÅ丮¿¡ Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù.</p>
-
- <note><title>ÁÖÀÇ:</title>
- <p><code>.htaccess</code> ÆÄÀϸíÀ» ´Ù¸£°Ô »ç¿ëÇÏ°í ½Í´Ù¸é,
- <directive module="core">AccessFileName</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, <code>.config</code>
- ÆÄÀϸíÀ» »ç¿ëÇÏ·Á¸é ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù.</p>
-
- <example>
- AccessFileName .config
- </example>
- </note>
-
- <p>ÀϹÝÀûÀ¸·Î <code>.htaccess</code> ÆÄÀÏÀº <a
- href="../configuring.html#syntax">ÁÖ¼³Á¤ÆÄÀÏ</a>°ú ¹®¹ýÀÌ
- °°´Ù. <directive module="core">AllowOverride</directive>
- Áö½Ã¾î°¡ ÀÌ ÆÄÀÏ¿¡ ³ª¿Ã ¼ö ÀÖ´Â ³»¿ëÀ» °áÁ¤ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ Çã¿ëÇÏ´Â Áö½Ã¾î ºÐ·ù¸¦ ÁöÁ¤ÇÑ´Ù.
- Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é,
- ÇØ´ç Áö½Ã¾î ¹®¼­ÀÇ Override Ç׸ñÀº Áö½Ã¾î¸¦ Çã¿ëÇϱâÀ§ÇØ
- <directive module="core">AllowOverride</directive>¿¡ »ç¿ëÇÒ
- °ªÀ» ¾Ë·ÁÁØ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, <directive module="core">AddDefaultCharset</directive>
- Áö½Ã¾î ¹®¼­¸¦ º¸¸é ÀÌ Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. (Áö½Ã¾î ¿ä¾à¿¡¼­ »ç¿ëÀå¼Ò Ç׸ñÀ» º¸¶ó.)
- <a href="../mod/directive-dict.html#Context">Override</a>
- ÁÙ¿¡ <code>FileInfo</code>°¡ ÀÖ´Ù. ±×·¡¼­ ÀÌ Áö½Ã¾î¸¦
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇϱâÀ§Çؼ­´Â ÃÖ¼ÒÇÑ
- <code>AllowOverride FileInfo</code>°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- <table>
- <tr>
- <td><a
- href="../mod/directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></td>
- <td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td>
- </tr>
-
- <tr>
- <td><a
- href="../mod/directive-dict.html#Override">Override:</a></td>
- <td>FileInfo</td>
- </tr>
- </table>
- </example>
-
- <p>ƯÁ¤ Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ
- ¼ö ÀÖ´ÂÁö ±Ã±ÝÇϸé Áö½Ã¾î ¹®¼­ÀÇ »ç¿ëÀå¼Ò Ç׸ñ¿¡ ".htaccess"°¡
- ÀÖ´ÂÁö È®ÀÎÇÑ´Ù.</p>
- </section>
-
- <section id="when"><title>¾ðÁ¦ .htaccess ÆÄÀÏÀ» »ç¿ëÇϳª
- (ȤÀº »ç¿ëÇÏÁö ¾Ê³ª)</title>
-
- <p>ÀϹÝÀûÀ¸·Î ÁÖ¼­¹öÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ¾Æ´Ï¶ó¸é
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ¿¹¸¦ µé¾î,
- »ç¿ëÀÚ ÀÎÁõÀÌ Ç×»ó <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ¾î¾ß
- ÇÑ´Ù´Â °ÍÀº À߸ø ¾Ë·ÁÁø ¿ÀÇØ´Ù. ÀÌ´Â »ç½ÇÀÌ ¾Æ´Ï´Ù. ÁÖ¼­¹ö¼³Á¤¿¡
- »ç¿ëÀÚ ÀÎÁõ ¼³Á¤À» ÀûÀ» ¼ö ÀÖ°í, »ç½Ç ÀÌ·¯±æ ±ÇÇÑ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏÀº ÄÁÅÙÃ÷ Á¦°øÀÚ°¡ µð·ºÅ丮º°·Î
- ¼­¹ö ¼³Á¤À» ´Ù¸£°ÔÇÏ°í ½ÍÁö¸¸ ¼­¹ö ½Ã½ºÅÛ¿¡ root ±ÇÇÑÀÌ
- ¾ø´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ¼­¹ö °ü¸®ÀÚ°¡ ¼³Á¤À» ÀÚÁÖ º¯°æÇÏ°í
- ½ÍÁö ¾ÊÀº °æ¿ì ÀÏ¹Ý »ç¿ëÀÚ°¡ Á÷Á¢ <code>.htaccess</code>
- ÆÄÀÏÀ» ¼öÁ¤Çϵµ·Ï Çã¿ëÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¿¹¸¦ µé¾î, ÇÑ
- ÄÄÇ»ÅÍ¿¡ ¿©·¯ »ç¿ëÀÚ »çÀÌÆ®¸¦ ¼­ºñ½ºÇÏ´Â ISP¿¡¼­ »ç¿ëÀÚ°¡
- ÀÚ½ÅÀÇ ¼³Á¤À» º¯°æÇÏ°í ½ÍÀº °æ¿ì°¡ ±×·¯ÇÏ´Ù.</p>
-
- <p>±×·¯³ª ÀϹÝÀûÀ¸·Î <code>.htaccess</code> ÆÄÀÏÀº °¡±ÞÀû
- ÇÇÇØ¾ß ÇÑ´Ù. <code>.htaccess</code> ÆÄÀÏ¿¡¼­ Çã¿ëÇÏ´Â Áö½Ã¾î´Â
- ÁÖ¼³Á¤ÆÄÀÏÀÇ <directive module="core"
- type="section">Directory</directive> ¼½¼Ç°ú °°Àº È¿°ú°¡
- ÀÖ´Ù.</p>
-
- <p>´ÙÀ½ µÎ°¡Áö Å« ÀÌÀ¯¶§¹®¿¡ <code>.htaccess</code> ÆÄÀÏ
- »ç¿ëÀ» ÇÇÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ù¹ø°´Â ¼º´ÉÀÌ´Ù. <directive
- module="core">AllowOverride</directive>°¡ <code>.htaccess</code>
- ÆÄÀÏÀ» »ç¿ëÇϵµ·Ï Çã¿ëÇϸé, ¾ÆÆÄÄ¡´Â µð·ºÅ丮¸¶´Ù
- <code>.htaccess</code> ÆÄÀÏÀ» ã´Â´Ù. ±×·¡¼­
- <code>.htaccess</code> ÆÄÀÏÀ» Çã¿ëÇÏ¸é ½ÇÁ¦·Î ÆÄÀÏÀ» »ç¿ëÇÏÁö
- ¾Ê´Â °æ¿ì¿¡µµ ¼º´ÉÀÌ ¶³¾îÁø´Ù! ¶Ç, <code>.htaccess</code>
- ÆÄÀÏÀº ¹®¼­¸¦ ¿äûÇÒ¶§¸¶´Ù ÀоîµéÀδÙ.</p>
-
- <p>°Ô´Ù°¡ Àû¿ëÇØ¾ß ÇÏ´Â Àüü Áö½Ã¾î¸¦ ¸ðÀ¸±âÀ§ÇØ ¾ÆÆÄÄ¡´Â
- ¸ðµç »óÀ§ µð·ºÅ丮¿¡¼­ <code>.htaccess</code> ÆÄÀÏÀ» ã´Â´Ù.
- (<a href="#how">¾î¶»°Ô Áö½Ã¾î¸¦ Àû¿ëÇϳª</a> ÀýÀ» Âü°í.)
- ±×·¡¼­ <code>/www/htdocs/example</code> µð·ºÅ丮¿¡ ÀÖ´Â
- ÆÄÀÏÀ» ¿äûÇϸé, ¾ÆÆÄÄ¡´Â ´ÙÀ½ ÆÄÀϵéÀ» ã¾Æ¾ß ÇÑ´Ù.</p>
-
- <example>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/example/.htaccess
- </example>
-
- <p>±×·¡¼­ ±× µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» Á¢±ÙÇÒ ¶§¸¶´Ù ¼³Á¤ÆÄÀÏÀÌ
- ÀüÇô ¾ø¾îµµ ÆÄÀϽýºÅÛÀ» 4¹ø ´õ Á¢±ÙÇØ¾ß ÇÑ´Ù.
- (<code>/</code>¿¡¼­µµ <code>.htaccess</code> ÆÄÀÏÀ» Çã¿ëÇÑ
- °æ¿ì¸¦ ¸»ÇÑ´Ù. º¸ÅëÀº Çã¿ëÇÏÁö ¾Ê´Â´Ù.)</p>
-
- <p>µÎ¹ø° ÀÌÀ¯´Â º¸¾ÈÀÌ´Ù. »ç¿ëÀÚ¿¡°Ô ¼­¹ö¼³Á¤ º¯°æ ±ÇÇÑÀ»
- ÁÖ¸é ´ç½ÅÀÌ °¨´çÇÒ ¼ö ¾ø´Â º¯È­°¡ ÀϾ ¼ö ÀÖ´Ù. »ç¿ëÀÚ¿¡°Ô
- ÀÌ·± ±ÇÇÑÀ» ÁÙÁö °õ°õÀÌ »ý°¢Ç϶ó. ¶Ç, »ç¿ëÀÚ°¡ ¿øÇÏ´Â °Íº¸´Ù
- ÀûÀº ±ÇÇÑÀ» ÁÖ¸é ±â¼úÁö¿ø¿äûÀÌ µé¾î¿Â´Ù. »ç¿ëÀÚ¿¡°Ô °¡´ÉÇÑ
- ±ÇÇÑ ¼öÁØÀ» ¸íÈ®È÷ ¾Ë·Á¶ó. »ç¿ëÀÚ¿¡°Ô <directive
- module="core">AllowOverride</directive>¸¦ ¾î¶»°Ô ¼³Á¤ÇÏ¿´´ÂÁö
- Á¤È®È÷ ¾Ë¸®°í °ü·Ã ¹®¼­¸¦ Á¦°øÇÏ¸é ¾ÕÀ¸·Î È¥¶õÀ» ÇÇÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>Áö½Ã¾î¸¦ <code>/www/htdocs/example</code> µð·ºÅ丮ÀÇ
- <code>.htaccess</code> ÆÄÀÏÀ» µÎ´Â °Í°ú ÁÖ¼­¹ö¼³Á¤ÀÇ
- <code>&lt;Directory /www/htdocs/example&gt;</code> Directory
- ¼³Á¤¿¡ µÎ´Â °ÍÀº ¿ÏÀüÈ÷ °°´Ù.</p>
-
- <p><code>/www/htdocs/example</code>¿¡ ÀÖ´Â
- <code>.htaccess</code> ¼½¼Ç:</p>
-
- <example><title><code>/www/htdocs/example</code>¿¡ ÀÖ´Â
- .htaccess ÆÄÀÏ ³»¿ë</title>
- AddType text/example .exm
- </example>
-
- <example><title><code>httpd.conf</code> ÆÄÀÏ¿¡ ÀÖ´Â ¼½¼Ç</title>
- &lt;Directory /www/htdocs/example&gt;<br />
- <indent>
- AddType text/example .exm<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>±×·¯³ª ÆÄÀÏÀ» ¿äûÇÒ ¶§¸¶´Ù ¼³Á¤À» ÀÐÁö¾Ê°í ¾ÆÆÄÄ¡°¡
- ½ÃÀÛÇÒ¶§ Çѹø¸¸ ¼³Á¤À» Àб⶧¹®¿¡ °°Àº ¼³Á¤À» ¼­¹ö¼³Á¤ÆÄÀÏ¿¡
- »ç¿ëÇÏ¸é ¼º´ÉÀÌ ´õ ºü¸£´Ù.</p>
-
- <p><directive module="core">AllowOverride</directive> Áö½Ã¾î¸¦
- <code>none</code>À¸·Î ¼³Á¤Çϸé <code>.htaccess</code> ÆÄÀÏÀ»
- ¿ÏÀüÈ÷ »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <example>
- AllowOverride None
- </example>
-</section>
-
-<section id="how"><title>¾î¶»°Ô Áö½Ã¾î¸¦ Àû¿ëÇϳª</title>
-
- <p><code>.htaccess</code> ÆÄÀÏÀ» ¹ß°ßÇÑ µð·ºÅ丮¿Í ±× µð·ºÅ丮ÀÇ
- ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡ <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â ¼³Á¤
- Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ±×·¡¼­ »óÀ§µð·ºÅ丮ÀÇ <code>.htaccess</code>
- ÆÄÀÏÀ» ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¹ß°ßÇÑ ¼ø¼­·Î Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ƯÁ¤
- µð·ºÅ丮¿¡ ÀÖ´Â <code>.htaccess</code> ÆÄÀÏÀº »óÀ§µð·ºÅ丮¿¡
- ÀÖ´Â <code>.htaccess</code> ÆÄÀÏÀÇ Áö½Ã¾î¸¦ ¹«È¿·Î ¸¸µé
- ¼ö ÀÖ°í, »óÀ§µð·ºÅ丮¿¡ ÀÖ´Â Áö½Ã¾î´Â ´õ »óÀ§µð·ºÅ丮 ȤÀº
- ÁÖ¼³Á¤ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î¸¦ ¹«È¿·Î ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹Á¦:</p>
-
- <p><code>/www/htdocs/example1</code> µð·ºÅ丮¿¡ ´ÙÀ½°ú °°Àº
- <code>.htaccess</code> ÆÄÀÏÀÌ ÀÖ´Ù.</p>
-
- <example>
- Options +ExecCGI
- </example>
-
- <p>(ÁÖÀÇ: <code>.htaccess</code> ÆÄÀÏ¿¡ "<directive
- module="core">Options</directive>" Áö½Ã¾î¸¦ »ç¿ëÇÏ·Á¸é
- "<code>AllowOverride Options</code>"°¡ ÇÊ¿äÇÏ´Ù.)</p>
-
- <p><code>/www/htdocs/example1/example2</code> µð·ºÅ丮¿¡´Â
- ´ÙÀ½°ú °°Àº <code>.htaccess</code> ÆÄÀÏÀÌ ÀÖ´Ù.</p>
-
- <example>
- Options Includes
- </example>
-
- <p>ÀÌ µÎ¹ø° <code>.htaccess</code> ÆÄÀÏÀÇ
- <code>Options Includes</code>°¡ ÀÌÀü ¼³Á¤À» ¿ÏÀüÈ÷ ¹«È¿·Î
- ¸¸µé±â¶§¹®¿¡ <code>/www/htdocs/example1/example2</code>
- µð·ºÅ丮´Â CGI ½ÇÇàÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-</section>
-
-<section id="auth"><title>ÀÎÁõ ¿¹Á¦</title>
-
- <p>ÀÎÁõ ¹æ¹ýÀ» ¾Ë±âÀ§ÇØ ¹Ù·Î ÀÌ°÷ºÎÅÍ Àд´ٸé ÁÖÀÇÇÒ °ÍÀÌ
- ÀÖ´Ù. ¾ÏÈ£ ÀÎÁõÀ» ÇÏ·Á¸é <code>.htaccess</code> ÆÄÀÏÀÌ
- ÇÊ¿äÇÏ´Ù´Â ¿ÀÇØ°¡ ³Î¸® ÆÛÁ®ÀÖ´Ù. ÀÌ´Â »ç½ÇÀÌ ¾Æ´Ï´Ù.
- ÁÖ¼³Á¤ÆÄÀÏÀÇ <directive module="core"
- type="section">Directory</directive> ¼½¼Ç¿¡ ÀÎÁõ Áö½Ã¾î¸¦
- µÎ´Â °ÍÀÌ ´õ ±ÇÀåÇÏ´Â ¹æ¹ýÀÌ°í, ¼­¹öÀÇ ÁÖ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇÒ
- ¼ö ¾ø´Â °æ¿ì¿¡¸¸ <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇؾß
- ÇÑ´Ù. ¾ðÁ¦ <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö¿Í
- »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÏ´ÂÁö´Â <a href="#when">À§¿¡¼­</a>
- ¼³¸íÇÏ¿´´Ù.</p>
-
- <p>¾Õ¿¡¼­ ¸»ÇßÁö¸¸ ¾ÆÁ÷µµ <code>.htaccess</code> ÆÄÀÏÀÌ
- ÇÊ¿äÇÏ´Ù°í »ý°¢µÇ¸é ¾Æ·¡ ¼³Á¤ÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.</p>
-
- <p><code>.htaccess</code> ÆÄÀÏ ³»¿ë.</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </example>
-
- <p>ÀÌ Áö½Ã¾î°¡ µ¿ÀÛÇϱâÀ§Çؼ­´Â
- <code>AllowOverride AuthConfig</code> Áö½Ã¾î°¡ ÇÊ¿äÇÔÀ»
- ¸í½ÉÇ϶ó.</p>
-
- <p>ÀÎÁõ°ú ±ÇÇѺο©¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a href="auth.html">ÀÎÁõ
- ÅõÅ丮¾ó</a>À» º¸±æ ¹Ù¶õ´Ù.</p>
-</section>
-
-<section id="ssi"><title>Server Side Includes ¿¹Á¦</title>
-
- <p>¶Ç´Ù¸¥ ÀϹÝÀûÀÎ <code>.htaccess</code> ÆÄÀÏÀÇ ¿ëµµ´Â
- ƯÁ¤ µð·ºÅ丮¿¡¼­ Server Side Includes¸¦ °¡´ÉÇÏ°Ô ¸¸µå´Â
- °ÍÀÌ´Ù. ¿øÇÏ´Â µð·ºÅ丮ÀÇ <code>.htaccess</code> ÆÄÀÏ¿¡
- ´ÙÀ½°ú °°Àº ¼³Á¤ Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é µÈ´Ù.</p>
-
- <example>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </example>
-
- <p>ÀÌ Áö½Ã¾î°¡ µ¿ÀÛÇÏ·Á¸é <code>AllowOverride Options</code>¿Í
- <code>AllowOverride FileInfo</code>°¡ ¸ðµÎ ÇÊ¿äÇÔÀ» ¸í½ÉÇ϶ó.</p>
-
- <p>server-side includes¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a
- href="ssi.html">SSI ÅõÅ丮¾ó</a>À» º¸±æ ¹Ù¶õ´Ù.</p>
-</section>
-
-<section id="cgi"><title>CGI ¿¹Á¦</title>
-
- <p>¸¶Áö¸·À¸·Î <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© ƯÁ¤
- µð·ºÅ丮¿¡¼­ CGI ÇÁ·Î±×·¥ ½ÇÇàÀ» Çã¿ëÇÏ°í ½Í´Ù¸é, ´ÙÀ½°ú
- °°Àº ¼³Á¤À» »ç¿ëÇÑ´Ù.</p>
-
- <example>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </example>
-
- <p>ȤÀº ÀÌ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀ» CGI ÇÁ·Î±×·¥À¸·Î
- ó¸®ÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°Àº ¼³Á¤µµ °¡´ÉÇÏ´Ù.</p>
-
- <example>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </example>
-
- <p>ÀÌ Áö½Ã¾î°¡ µ¿ÀÛÇÏ·Á¸é <code>AllowOverride Options</code>¿Í
- <code>AllowOverride FileInfo</code>°¡ ¸ðµÎ ÇÊ¿äÇÔÀ» ¸í½ÉÇ϶ó.</p>
-
- <p>CGI ÇÁ·Î±×·¡¹Ö°ú ¼³Á¤¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a
- href="cgi.html">CGI ÅõÅ丮¾ó</a>À» º¸±æ ¹Ù¶õ´Ù.</p>
-
-</section>
-
-<section id="troubleshoot"><title>¹®Á¦ÇØ°á</title>
-
- <p><code>.htaccess</code> ÆÄÀÏ¿¡ µÐ ¼³Á¤ Áö½Ã¾î°¡ ¿øÇÏ´Â
- ±â´ÉÀ» ÇÏÁö ¾Ê´Â °æ¿ì ¿©·¯°¡Áö ÀÌÀ¯°¡ ÀÖÀ» ¼ö ÀÖ´Ù.</p>
-
- <p>°¡Àå ÀϹÝÀûÀÎ ¹®Á¦´Â ¼³Á¤ Áö½Ã¾î¸¦ °¡´ÉÇÏ°Ô ¸¸µå´Â <directive
- module="core">AllowOverride</directive>¸¦ ¼³Á¤ÇÏÁö ¾ÊÀº
- °æ¿ì´Ù. ¹®Á¦°¡ µÇ´Â ÆÄÀÏ ¿µ¿ª¿¡ <code>AllowOverride None</code>ÀÌ
- ¾ø´ÂÁö È®ÀÎÇÑ´Ù. <code>.htaccess</code> ÆÄÀÏÀ» ¾Æ¹«·¸°Ô³ª
- ÀûÀº ´ÙÀ½ ÆäÀÌÁö¸¦ ´Ù½Ã Á¢±ÙÇÏ¿© ½±°Ô °Ë»çÇغ¼ ¼ö ÀÖ´Ù.
- ¼­¹ö ¿À·ù°¡ ³ª¿ÀÁö ¾ÊÀ¸¸é °ÅÀÇ È®½ÇÈ÷
- <code>AllowOverride None</code>À» »ç¿ëÇÑ °æ¿ì´Ù.</p>
-
- <p>¹Ý´ë·Î ¹®¼­¿¡ Á¢±ÙÇÒ¶§ ¼­¹ö ¿À·ù°¡ ¹ß»ýÇÏ¸é ¾ÆÆÄÄ¡ ¿À·ù·Î±×¸¦
- »ìÆìºÁ¶ó. ¾Æ¸¶µµ <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î¸¦
- Çã¿ëÇÏÁö ¾Ê´Â´Ù°í ÇÒ °ÍÀÌ´Ù. ¾Æ´Ï°í ¹®¹ý ¿À·ù°¡ ÀÖ´Ù¸é ¿À·ù¸¦
- °íÄ£´Ù.</p>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/howto/htaccess.xml.meta b/docs/manual/howto/htaccess.xml.meta
deleted file mode 100644
index 55704b009b..0000000000
--- a/docs/manual/howto/htaccess.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>htaccess</basename>
- <path>/howto/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/howto/index.html b/docs/manual/howto/index.html
deleted file mode 100644
index 9ee330865b..0000000000
--- a/docs/manual/howto/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/howto/index.html.en b/docs/manual/howto/index.html.en
deleted file mode 100644
index e33f43d132..0000000000
--- a/docs/manual/howto/index.html.en
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>How-To / Tutorials - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>How-To / Tutorials</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howto" id="howto">How-To / Tutorials</a></h2>
-
-
-
- <dl>
- <dt>Authentication</dt>
- <dd>
- <p>Authentication is any process by which you verify that
- someone is who they claim they are. Authorization is any
- process by which someone is allowed to be where they want to
- go, or to have information that they want to have.</p>
-
- <p>See: <a href="auth.html">Authentication, Authorization, and Access Control</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Dynamic Content with CGI</dt>
- <dd>
- <p>The CGI (Common Gateway Interface) defines a way for a web
- server to interact with external content-generating programs,
- which are often referred to as CGI programs or CGI scripts. It
- is the simplest, and most common, way to put dynamic content on
- your web site. This document will be an introduction to setting
- up CGI on your Apache web server, and getting started writing
- CGI programs.</p>
-
- <p>See: <a href="cgi.html">CGI: Dynamic Content</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt><code>.htaccess</code> files</dt>
- <dd>
- <p><code>.htaccess</code> files provide a way to make configuration
- changes on a per-directory basis. A file, containing one or more
- configuration directives, is placed in a particular document directory,
- and the directives apply to that directory, and all subdirectories thereof.</p>
-
- <p>See: <a href="htaccess.html"><code>.htaccess</code> files</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Introduction to Server Side Includes</dt>
- <dd>
- <p>SSI (Server Side Includes) are directives that are placed in
- HTML pages, and evaluated on the server while the pages are
- being served. They let you add dynamically generated content to
- an existing HTML page, without having to serve the entire page
- via a CGI program, or other dynamic technology.</p>
-
- <p>See: <a href="ssi.html">Server Side Includes (SSI)</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Per-user web directories</dt>
- <dd>
- <p>On systems with multiple users, each user can be permitted to have a
- web site in their home directory using the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive. Visitors
- to a URL <code>http://example.com/~username/</code> will get content
- out of the home directory of the user "<code>username</code>", out of
- the subdirectory specified by the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive.</p>
-
- <p>See: <a href="public_html.html">User web directories (<code>public_html</code>)</a></p>
- </dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/index.html.ja.euc-jp b/docs/manual/howto/index.html.ja.euc-jp
deleted file mode 100644
index c78a311f23..0000000000
--- a/docs/manual/howto/index.html.ja.euc-jp
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howto" id="howto">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></h2>
-
-
-
- <dl>
- <dt>ǧ¾Ú</dt>
- <dd>
- <p>ǧ¾Ú¤È¤Ï¡¢Ã¯¤«¤¬¼«Ê¬¤Ïï¤Ç¤¢¤ë¤«¤ò̾¾è¤Ã¤Æ¤¤¤ë¤â¤Î¤ò¸¡¾Ú¤¹¤ë
- ½èÍý¤Î¤³¤È¤Ç¤¹¡£¾µÇ§¤È¤Ï¡¢Ã¯¤«¤¬Ë¾¤ß¤Î¾ì½ê¤Ëé¤êÃ失¤¿¤ê¡¢
- ˾¤ß¤Î¾ðÊó¤ò¼ê¤ËÆþ¤ì¤¿¤ê¤¹¤ë¤³¤È¤òµö²Ä¤¹¤ë½èÍý¤Î¤³¤È¤Ç¤¹¡£</p>
-
- <p>»²¾È: <a href="auth.html">ǧ¾Ú¡¢¾µÇ§¡¢¥¢¥¯¥»¥¹À©¸æ</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>CGI ¤Ë¤è¤ëưŪ¥³¥ó¥Æ¥ó¥Ä</dt>
- <dd>
- <p>CGI (Common Gateway Interface) ¤Ï¥¦¥§¥Ö¥µ¡¼¥Ð¤¬³°Éô¤Î¥³¥ó¥Æ¥ó¥Ä
- À¸À®¥×¥í¥°¥é¥à¤È¤É¤Î¤è¤¦¤ËÁê¸ßÆ°ºî¤ò¤¹¤ë¤«¤òÄêµÁ¤·¤Þ¤¹¡£
- ¤½¤Î³°Éô¥×¥í¥°¥é¥à¤ÏÄ̾ï CGI ¥×¥í¥°¥é¥à¤ä CGI ¥¹¥¯¥ê¥×¥È¤È¸Æ¤Ð¤ì¤Þ¤¹¡£
- CGI ¤Ï¥¦¥§¥Ö¥µ¥¤¥È¤ËưŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤òÄɲ乤뤿¤á¤Î¡¢
- °ìÈÖñ½ã¤Ç¤è¤¯»È¤ï¤ì¤Æ¤¤¤ëÊýË¡¤Ç¤¹¡£¤³¤Îʸ½ñ¤Ï Apache ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ë
- CGI ¤òÀßÄꤷ¡¢CGI ¥×¥í¥°¥é¥à¤ò½ñ¤­»Ï¤á¤ë¤¿¤á¤Î¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó¤Ç¤¹¡£</p>
-
- <p>»²¾È: <a href="cgi.html">CGI: ưŪ¥³¥ó¥Æ¥ó¥Ä</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt><code>.htaccess</code> ¥Õ¥¡¥¤¥ë</dt>
- <dd>
- <p><code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ï¥Ç¥£¥ì¥¯¥È¥êËè¤ËÀßÄê¤òÊѹ¹¤¹¤ë¤¿¤á¤Î
- ÊýË¡¤òÄ󶡤·¤Þ¤¹¡£ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬½ñ¤«¤ì¤¿¥Õ¥¡¥¤¥ë¤¬¡¢¤¢¤ë¥É¥­¥å¥á¥ó¥È
- ¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤«¤ì¤ë¤È¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È
- ¤¹¤Ù¤Æ¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ËŬÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <p>»²¾È: <a href="htaccess.html"><code>.htaccess</code> ¥Õ¥¡¥¤¥ë</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Server Side Includes ¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó</dt>
- <dd>
- <p>SSI (Server Side Includes) ¤Ï HTML ¥Ú¡¼¥¸Ãæ¤Ë½ñ¤«¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢
- ¥Ú¡¼¥¸¤¬Á÷¤é¤ì¤ë»þ¤Ë¥µ¡¼¥Ð¤Ë¤è¤êɾ²Á¤µ¤ì¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢¥Ú¡¼¥¸Á´ÂΤò
- CGI ¥×¥í¥°¥é¥à¤ÇÀ¸À®¤·¤¿¤ê¡¢Â¾¤ÎưŪ¤Êµ»½Ñ¤ò»È¤¦¤³¤È¤Ê¤¯¡¢´û¸¤Î HTML
- ¥Ú¡¼¥¸¤ËưŪ¤ËÀ¸À®¤µ¤ì¤¿ÆâÍƤòÉղ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>»²¾È: <a href="ssi.html">Server Side Includes (SSI)</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>¥æ¡¼¥¶Ëè¤Î¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê</dt>
- <dd>
- <p>Ê£¿ô¥æ¡¼¥¶¤Î¸ºß¤¹¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¤½¤ì¤¾¤ì¤Î¥æ¡¼¥¶¤Ï <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤³¤È¤Ë¤è¤Ã¤Æ
- ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¾å¤Ë¥¦¥§¥Ö¥µ¥¤¥È¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- URL <code>http://example.com/~username/</code> ¤òˬ¤ì¤¿¿Í¤Ï
- ¥æ¡¼¥¶ "<code>username</code>" ¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î¡¢<code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¥³¥ó¥Æ¥ó¥Ä¤òÆÀ¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>»²¾È: <a href="public_html.html">¥æ¡¼¥¶¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê (<code>public_html</code>)</a></p>
- </dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/index.html.ko.euc-kr b/docs/manual/howto/index.html.ko.euc-kr
deleted file mode 100644
index 2a850020f5..0000000000
--- a/docs/manual/howto/index.html.ko.euc-kr
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>How-To / ÅõÅ丮¾ó - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>How-To / ÅõÅ丮¾ó</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howto" id="howto">How-To / ÅõÅ丮¾ó</a></h2>
-
-
-
- <dl>
- <dt>ÀÎÁõ</dt>
- <dd>
- <p>ÀÎÁõ(authentication)Àº ÀÚ½ÅÀÌ ´©±¸¶ó°í ÁÖÀåÇÏ´Â »ç¶÷À»
- È®ÀÎÇÏ´Â ÀýÂ÷ÀÌ´Ù. ±ÇÇѺο©(authorization)´Â °¡°í ½ÍÀº
- °÷À¸·Î °¡µµ·Ï ȤÀº ¿øÇÏ´Â Á¤º¸¸¦ ¾òµµ·Ï Çã¿ëÇÏ´Â °úÁ¤ÀÌ´Ù.</p>
-
- <p>Âü°í: <a href="auth.html">ÀÎÁõ, ±ÇÇѺο©, Á¢±ÙÁ¦¾î</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>CGI¸¦ »ç¿ëÇÑ µ¿Àû ÆäÀÌÁö »ý¼º</dt>
- <dd>
- <p>CGI (Common Gateway Interface)´Â À¥¼­¹ö°¡ º¸Åë CGI
- ÇÁ·Î±×·¥ ȤÀº CGI ½ºÅ©¸³Æ®ÇÏ°í ºÎ¸£´Â, (À¥ÆäÀÌÁö ³»¿ëÀ»
- ¸¸µå´Â) ¿ÜºÎ ÇÁ·Î±×·¥°ú »óÈ£ÀÛ¿ëÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇÇÑ´Ù.
- À¥»çÀÌÆ®¿¡¼­ µ¿ÀûÀÎ ÆäÀÌÁö¸¦ ¸¸µå´Â °¡Àå ÈçÇÏ°í °£´ÜÇÑ
- ¹æ¹ýÀÌ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ CGI¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýÀ»
- ¼Ò°³ÇÏ°í, CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ»´Ù.</p>
-
- <p>Âü°í: <a href="cgi.html">CGI: µ¿Àû ÆäÀÌÁö »ý¼º</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt><code>.htaccess</code> ÆÄÀÏ</dt>
- <dd>
- <p><code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© µð·ºÅ丮º°·Î
- ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖ´Ù. ¿©·¯ ¼³Á¤ Áö½Ã¾î°¡ ÀÖ´Â ÆÄÀÏÀ»
- ƯÁ¤ ¹®¼­ µð·ºÅ丮¿¡ µÎ¸é, ±× µð·ºÅ丮¿Í ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡
- Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù.</p>
-
- <p>Âü°í: <a href="htaccess.html"><code>.htaccess</code>
- ÆÄÀÏ</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Server Side Includes ¼Ò°³</dt>
- <dd>
- <p>SSI (Server Side Includes)´Â HTML ÆäÀÌÁö¿¡ »ç¿ëÇÏ´Â
- Áö½Ã¾î·Î, ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÒ¶§ ¼­¹ö°¡ ó¸®ÇÑ´Ù. SSI¸¦
- »ç¿ëÇϸé CGI ÇÁ·Î±×·¥À̳ª ´Ù¸¥ µ¿ÀûÀÎ ±â¼ú·Î ÆäÀÌÁö
- Àüü¸¦ ¸¸µé¾î¼­ ¼­ºñ½ºÇÏÁö ¾Ê°íµµ HTML ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î
- »ý¼ºÇÑ ³»¿ëÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Âü°í: <a href="ssi.html">Server Side Includes (SSI)</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>»ç¿ëÀÚº° À¥µð·ºÅ丮</dt>
- <dd>
- <p>¿©·¯ »ç¿ëÀÚ°¡ ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- °¢ »ç¿ëÀÚ´Â ÀÚ½ÅÀÇ È¨µð·ºÅ丮 ¾È¿¡ À¥»çÀÌÆ®¸¦ ¸¸µé ¼ö
- ÀÖ´Ù. URL <code>http://example.com/~username/</code>¿¡
- Á¢±ÙÇÏ¸é »ç¿ëÀÚ "<code>username</code>"ÀÇ È¨µð·ºÅ丮¿¡¼­
- <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- Áö½Ã¾î·Î ÁöÁ¤ÇÑ ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ÆäÀÌÁö¸¦ °¡Á®¿À°Ô
- µÈ´Ù.</p>
-
- <p>Âü°í: <a href="public_html.html">»ç¿ëÀÚ À¥µð·ºÅ丮
- (<code>public_html</code>)</a></p>
- </dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/index.xml b/docs/manual/howto/index.xml
deleted file mode 100644
index f565bd0f9c..0000000000
--- a/docs/manual/howto/index.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>How-To / Tutorials</title>
-
- <section id="howto">
-
- <title>How-To / Tutorials</title>
-
- <dl>
- <dt>Authentication</dt>
- <dd>
- <p>Authentication is any process by which you verify that
- someone is who they claim they are. Authorization is any
- process by which someone is allowed to be where they want to
- go, or to have information that they want to have.</p>
-
- <p>See: <a href="auth.html">Authentication, Authorization, and Access Control</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Dynamic Content with CGI</dt>
- <dd>
- <p>The CGI (Common Gateway Interface) defines a way for a web
- server to interact with external content-generating programs,
- which are often referred to as CGI programs or CGI scripts. It
- is the simplest, and most common, way to put dynamic content on
- your web site. This document will be an introduction to setting
- up CGI on your Apache web server, and getting started writing
- CGI programs.</p>
-
- <p>See: <a href="cgi.html">CGI: Dynamic Content</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt><code>.htaccess</code> files</dt>
- <dd>
- <p><code>.htaccess</code> files provide a way to make configuration
- changes on a per-directory basis. A file, containing one or more
- configuration directives, is placed in a particular document directory,
- and the directives apply to that directory, and all subdirectories thereof.</p>
-
- <p>See: <a href="htaccess.html"><code>.htaccess</code> files</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Introduction to Server Side Includes</dt>
- <dd>
- <p>SSI (Server Side Includes) are directives that are placed in
- HTML pages, and evaluated on the server while the pages are
- being served. They let you add dynamically generated content to
- an existing HTML page, without having to serve the entire page
- via a CGI program, or other dynamic technology.</p>
-
- <p>See: <a href="ssi.html">Server Side Includes (SSI)</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Per-user web directories</dt>
- <dd>
- <p>On systems with multiple users, each user can be permitted to have a
- web site in their home directory using the <directive
- module="mod_userdir">UserDir</directive> directive. Visitors
- to a URL <code>http://example.com/~username/</code> will get content
- out of the home directory of the user "<code>username</code>", out of
- the subdirectory specified by the <directive
- module="mod_userdir">UserDir</directive> directive.</p>
-
- <p>See: <a href="public_html.html"
- >User web directories (<code>public_html</code>)</a></p>
- </dd>
- </dl>
-
- </section>
-
-</manualpage>
-
-
diff --git a/docs/manual/howto/index.xml.ja b/docs/manual/howto/index.xml.ja
deleted file mode 100644
index 279d5d17c3..0000000000
--- a/docs/manual/howto/index.xml.ja
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>How-To / $B%A%e!<%H%j%"%k(B</title>
-
- <section id="howto">
-
- <title>How-To / $B%A%e!<%H%j%"%k(B</title>
-
- <dl>
- <dt>$BG'>Z(B</dt>
- <dd>
- <p>$BG'>Z$H$O!"C/$+$,<+J,$OC/$G$"$k$+$rL>>h$C$F$$$k$b$N$r8!>Z$9$k(B
- $B=hM}$N$3$H$G$9!#>5G'$H$O!"C/$+$,K>$_$N>l=j$KC)$jCe$1$?$j!"(B
- $BK>$_$N>pJs$r<j$KF~$l$?$j$9$k$3$H$r5v2D$9$k=hM}$N$3$H$G$9!#(B</p>
-
- <p>$B;2>H(B: <a href="auth.html">$BG'>Z!">5G'!"%"%/%;%9@)8f(B</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>CGI $B$K$h$kF0E*%3%s%F%s%D(B</dt>
- <dd>
- <p>CGI (Common Gateway Interface) $B$O%&%'%V%5!<%P$,30It$N%3%s%F%s%D(B
- $B@8@.%W%m%0%i%`$H$I$N$h$&$KAj8_F0:n$r$9$k$+$rDj5A$7$^$9!#(B
- $B$=$N30It%W%m%0%i%`$ODL>o(B CGI $B%W%m%0%i%`$d(B CGI $B%9%/%j%W%H$H8F$P$l$^$9!#(B
- CGI $B$O%&%'%V%5%$%H$KF0E*$J%3%s%F%s%D$rDI2C$9$k$?$a$N!"(B
- $B0lHVC1=c$G$h$/;H$o$l$F$$$kJ}K!$G$9!#$3$NJ8=q$O(B Apache $B%&%'%V%5!<%P$K(B
- CGI $B$r@_Dj$7!"(BCGI $B%W%m%0%i%`$r=q$-;O$a$k$?$a$N%$%s%H%m%@%/%7%g%s$G$9!#(B</p>
-
- <p>$B;2>H(B: <a href="cgi.html">CGI: $BF0E*%3%s%F%s%D(B</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt><code>.htaccess</code> $B%U%!%$%k(B</dt>
- <dd>
- <p><code>.htaccess</code> $B%U%!%$%k$O%G%#%l%/%H%jKh$K@_Dj$rJQ99$9$k$?$a$N(B
- $BJ}K!$rDs6!$7$^$9!#@_Dj%G%#%l%/%F%#%V$,=q$+$l$?%U%!%$%k$,!"$"$k%I%-%e%a%s%H(B
- $B%G%#%l%/%H%j$KCV$+$l$k$H!"%G%#%l%/%F%#%V$O$=$N%G%#%l%/%H%j$H(B
- $B$9$Y$F$N%5%V%G%#%l%/%H%j$KE,MQ$5$l$^$9!#(B</p>
-
- <p>$B;2>H(B: <a href="htaccess.html"><code>.htaccess</code> $B%U%!%$%k(B</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Server Side Includes $B%$%s%H%m%@%/%7%g%s(B</dt>
- <dd>
- <p>SSI (Server Side Includes) $B$O(B HTML $B%Z!<%8Cf$K=q$+$l$k%G%#%l%/%F%#%V$G!"(B
- $B%Z!<%8$,Aw$i$l$k;~$K%5!<%P$K$h$jI>2A$5$l$^$9!#$3$l$K$h$j!"%Z!<%8A4BN$r(B
- CGI $B%W%m%0%i%`$G@8@.$7$?$j!"B>$NF0E*$J5;=Q$r;H$&$3$H$J$/!"4{B8$N(B HTML
- $B%Z!<%8$KF0E*$K@8@.$5$l$?FbMF$rIU2C$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B;2>H(B: <a href="ssi.html">Server Side Includes (SSI)</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</dt>
- <dd>
- <p>$BJ#?t%f!<%6$NB8:_$9$k%7%9%F%`$G$O!"$=$l$>$l$N%f!<%6$O(B <directive
- module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$r;H$&$3$H$K$h$C$F(B
- $B%[!<%`%G%#%l%/%H%j>e$K%&%'%V%5%$%H$r:n@.$9$k$3$H$,$G$-$^$9!#(B
- URL <code>http://example.com/~username/</code> $B$rK,$l$??M$O(B
- $B%f!<%6(B "<code>username</code>" $B$N%[!<%`%G%#%l%/%H%j$N!"(B<directive
- module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$G;XDj$5$l$?(B
- $B%5%V%G%#%l%/%H%j$+$i%3%s%F%s%D$rF@$k$3$H$K$J$j$^$9!#(B</p>
-
- <p>$B;2>H(B: <a href="public_html.html"
- >$B%f!<%6%&%'%V%G%#%l%/%H%j(B (<code>public_html</code>)</a></p>
- </dd>
- </dl>
-
- </section>
-
-</manualpage>
-
-
diff --git a/docs/manual/howto/index.xml.ko b/docs/manual/howto/index.xml.ko
deleted file mode 100644
index 1013712adc..0000000000
--- a/docs/manual/howto/index.xml.ko
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>How-To / ÅõÅ丮¾ó</title>
-
- <section id="howto">
-
- <title>How-To / ÅõÅ丮¾ó</title>
-
- <dl>
- <dt>ÀÎÁõ</dt>
- <dd>
- <p>ÀÎÁõ(authentication)Àº ÀÚ½ÅÀÌ ´©±¸¶ó°í ÁÖÀåÇÏ´Â »ç¶÷À»
- È®ÀÎÇÏ´Â ÀýÂ÷ÀÌ´Ù. ±ÇÇѺο©(authorization)´Â °¡°í ½ÍÀº
- °÷À¸·Î °¡µµ·Ï ȤÀº ¿øÇÏ´Â Á¤º¸¸¦ ¾òµµ·Ï Çã¿ëÇÏ´Â °úÁ¤ÀÌ´Ù.</p>
-
- <p>Âü°í: <a href="auth.html">ÀÎÁõ, ±ÇÇѺο©, Á¢±ÙÁ¦¾î</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>CGI¸¦ »ç¿ëÇÑ µ¿Àû ÆäÀÌÁö »ý¼º</dt>
- <dd>
- <p>CGI (Common Gateway Interface)´Â À¥¼­¹ö°¡ º¸Åë CGI
- ÇÁ·Î±×·¥ ȤÀº CGI ½ºÅ©¸³Æ®ÇÏ°í ºÎ¸£´Â, (À¥ÆäÀÌÁö ³»¿ëÀ»
- ¸¸µå´Â) ¿ÜºÎ ÇÁ·Î±×·¥°ú »óÈ£ÀÛ¿ëÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇÇÑ´Ù.
- À¥»çÀÌÆ®¿¡¼­ µ¿ÀûÀÎ ÆäÀÌÁö¸¦ ¸¸µå´Â °¡Àå ÈçÇÏ°í °£´ÜÇÑ
- ¹æ¹ýÀÌ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ CGI¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýÀ»
- ¼Ò°³ÇÏ°í, CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ»´Ù.</p>
-
- <p>Âü°í: <a href="cgi.html">CGI: µ¿Àû ÆäÀÌÁö »ý¼º</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt><code>.htaccess</code> ÆÄÀÏ</dt>
- <dd>
- <p><code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© µð·ºÅ丮º°·Î
- ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖ´Ù. ¿©·¯ ¼³Á¤ Áö½Ã¾î°¡ ÀÖ´Â ÆÄÀÏÀ»
- ƯÁ¤ ¹®¼­ µð·ºÅ丮¿¡ µÎ¸é, ±× µð·ºÅ丮¿Í ¸ðµç ÇÏÀ§µð·ºÅ丮¿¡
- Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù.</p>
-
- <p>Âü°í: <a href="htaccess.html"><code>.htaccess</code>
- ÆÄÀÏ</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Server Side Includes ¼Ò°³</dt>
- <dd>
- <p>SSI (Server Side Includes)´Â HTML ÆäÀÌÁö¿¡ »ç¿ëÇÏ´Â
- Áö½Ã¾î·Î, ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÒ¶§ ¼­¹ö°¡ ó¸®ÇÑ´Ù. SSI¸¦
- »ç¿ëÇϸé CGI ÇÁ·Î±×·¥À̳ª ´Ù¸¥ µ¿ÀûÀÎ ±â¼ú·Î ÆäÀÌÁö
- Àüü¸¦ ¸¸µé¾î¼­ ¼­ºñ½ºÇÏÁö ¾Ê°íµµ HTML ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î
- »ý¼ºÇÑ ³»¿ëÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Âü°í: <a href="ssi.html">Server Side Includes (SSI)</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>»ç¿ëÀÚº° À¥µð·ºÅ丮</dt>
- <dd>
- <p>¿©·¯ »ç¿ëÀÚ°¡ ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ <directive
- module="mod_userdir">UserDir</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- °¢ »ç¿ëÀÚ´Â ÀÚ½ÅÀÇ È¨µð·ºÅ丮 ¾È¿¡ À¥»çÀÌÆ®¸¦ ¸¸µé ¼ö
- ÀÖ´Ù. URL <code>http://example.com/~username/</code>¿¡
- Á¢±ÙÇÏ¸é »ç¿ëÀÚ "<code>username</code>"ÀÇ È¨µð·ºÅ丮¿¡¼­
- <directive module="mod_userdir">UserDir</directive>
- Áö½Ã¾î·Î ÁöÁ¤ÇÑ ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ÆäÀÌÁö¸¦ °¡Á®¿À°Ô
- µÈ´Ù.</p>
-
- <p>Âü°í: <a href="public_html.html">»ç¿ëÀÚ À¥µð·ºÅ丮
- (<code>public_html</code>)</a></p>
- </dd>
- </dl>
-
- </section>
-
-</manualpage>
-
-
diff --git a/docs/manual/howto/index.xml.meta b/docs/manual/howto/index.xml.meta
deleted file mode 100644
index c91f4a8999..0000000000
--- a/docs/manual/howto/index.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/howto/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/howto/public_html.html b/docs/manual/howto/public_html.html
deleted file mode 100644
index 690c35b259..0000000000
--- a/docs/manual/howto/public_html.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: public_html.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: public_html.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: public_html.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/howto/public_html.html.en b/docs/manual/howto/public_html.html.en
deleted file mode 100644
index 109d2dceb6..0000000000
--- a/docs/manual/howto/public_html.html.en
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Per-user web directories - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Per-user web directories</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/public_html.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>On systems with multiple users, each user can be permitted to have a
- web site in their home directory using the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive. Visitors
- to a URL <code>http://example.com/~username/</code> will get content
- out of the home directory of the user "<code>username</code>", out of
- the subdirectory specified by the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Per-user web directories</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">Setting the file path with UserDir</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">Restricting what users are permitted to use this
- feature</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Enabling a cgi directory for each user</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Allowing users to alter configuration</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="../urlmapping.html">Mapping URLs to the Filesystem</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Per-user web directories</a></h2>
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="userdir" id="userdir">Setting the file path with UserDir</a></h2>
-
-
- <p>The <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- directive specifies a directory out of which per-user
- content is loaded. This directive may take several different forms.</p>
-
- <p>If a path is given which does not start with a leading slash, it is
- assumed to be a directory path relative to the home directory of the
- specified user. Given this configuration:</p>
-
- <div class="example"><p><code>
- UserDir public_html
- </code></p></div>
-
- <p>the URL <code>http://example.com/~rbowen/file.html</code> will be
- translated to the file path
- <code>/home/rbowen/public_html/file.html</code></p>
-
- <p>If a path is given starting with a slash, a directory path will be
- constructed using that path, plus the username specified. Given this
- configuration:</p>
-
- <div class="example"><p><code>
- UserDir /var/html
- </code></p></div>
-
- <p>the URL <code>http://example.com/~rbowen/file.html</code> will be
- translated to the file path <code>/var/html/rbowen/file.html</code></p>
-
- <p>If a path is provided which contains an asterisk (*), a path is used
- in which the asterisk is replaced with the username. Given this
- configuration:</p>
-
- <div class="example"><p><code>
- UserDir /var/www/*/docs
- </code></p></div>
-
- <p>the URL <code>http://example.com/~rbowen/file.html</code> will be
- translated to the file path
- <code>/var/www/rbowen/docs/file.html</code></p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Restricting what users are permitted to use this
- feature</a></h2>
-
-
- <p>Using the syntax shown in the UserDir documentation, you can restrict
- what users are permitted to use this functionality:</p>
-
- <div class="example"><p><code>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </code></p></div>
-
- <p>The configuration above will enable the feature for all users
- except for those listed in the <code>disabled</code> statement.
- You can, likewise, disable the feature for all but a few users by
- using a configuration like the following:</p>
-
- <div class="example"><p><code>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </code></p></div>
-
- <p>See <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- documentation for additional examples.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">Enabling a cgi directory for each user</a></h2>
-
-
- <p>In order to give each user their own cgi-bin directory, you can use
- a <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- directive to make a particular subdirectory of a user's home directory
- cgi-enabled.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Then, presuming that <code>UserDir</code> is set to
- <code>public_html</code>, a cgi program <code>example.cgi</code>
- could be loaded from that directory as:</p>
-
- <div class="example"><p><code>
- http://example.com/~rbowen/cgi-bin/example.cgi
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">Allowing users to alter configuration</a></h2>
-
-
- <p>If you want to allows users to modify the server configuration in
- their web space, they will need to use <code>.htaccess</code> files to
- make these changed. Ensure that you have set <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> to a
- value sufficient for the directives that you want to permit the users
- to modify. See the <a href="htaccess.html">.htaccess tutorial</a> for
- additional details on how this works.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/public_html.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/public_html.html.ja.euc-jp b/docs/manual/howto/public_html.html.ja.euc-jp
deleted file mode 100644
index 9984ee8666..0000000000
--- a/docs/manual/howto/public_html.html.ja.euc-jp
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥æ¡¼¥¶Ëè¤Î¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></div><div id="page-content"><div id="preamble"><h1>¥æ¡¼¥¶Ëè¤Î¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/public_html.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Ê£¿ô¤Î¥æ¡¼¥¶¤Î¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢<code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ
- ³Æ¥æ¡¼¥¶¤¬¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¦¥§¥Ö¥µ¥¤¥È¤ò¹½ÃۤǤ­¤ë¤è¤¦¤ËÀßÄꤹ¤ë¤³¤È¤¬
- ²Äǽ¤Ç¤¹¡£URL <code>http://example.com/~username/</code> ¤òˬ¤ì¤¿¿Í¤Ï
- "<code>username</code>" ¤È¤¤¤¦¥æ¡¼¥¶¤Î <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¥³¥ó¥Æ¥ó¥Ä¤òÆÀ¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">¥æ¡¼¥¶Ëè¤Î¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir ¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤òÀßÄꤹ¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">¤³¤Îµ¡Ç½¤ò»ÈÍѤǤ­¤ë¥æ¡¼¥¶¤òÀ©¸Â¤¹¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">¥æ¡¼¥¶Ëè¤Î CGI ¥Ç¥£¥ì¥¯¥È¥ê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">¥æ¡¼¥¶¤Ë¤è¤ëÀßÄêÊѹ¹¤òµö²Ä</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="../urlmapping.html">URL ¤«¤é¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ø¤Î¥Þ¥Ã¥Ô¥ó¥°</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">¥æ¡¼¥¶Ëè¤Î¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê</a></h2>
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="userdir" id="userdir">UserDir ¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤òÀßÄꤹ¤ë</a></h2>
-
-
- <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥æ¡¼¥¶Ëè¤Î¥³¥ó¥Æ¥ó¥Ä¤¬Æɤ߹þ¤Þ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤷ¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¤¤í¤¤¤í°ã¤Ã¤¿·Á¼°¤ò¼è¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤é¤Ê¤¤¥Ñ¥¹¤¬Í¿¤¨¤é¤ì¤¿¤È¤­¤Ï¡¢¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£¼¡¤ÎÀßÄ꤬¤¢¤Ã¤¿¤È¤­¤Ë:</p>
-
- <div class="example"><p><code>
- UserDir public_html
- </code></p></div>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code> ¤Ï
- ¥Ñ¥¹ <code>/home/rbowen/public_html/file.html</code> ¤Ø
- ÊÑ´¹¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¥Ñ¥¹¤¬¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤ë¤È¤­¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¥Ñ¥¹¤Ï¤½¤Î¥Ñ¥¹¤Ë
- ¥æ¡¼¥¶Ì¾¤ò²Ã¤¨¤¿¤â¤Î¤«¤é¤Ê¤ê¤Þ¤¹¡£¼¡¤ÎÀßÄê¤Î¤È¤­:</p>
-
- <div class="example"><p><code>
- UserDir /var/html
- </code></p></div>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code> ¤Ï
- ¥Ñ¥¹ <code>/var/html/rbowen/file.html</code> ¤ØÊÑ´¹¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¥¢¥¹¥¿¥ê¥¹¥¯ (*) ¤ò´Þ¤à¥Ñ¥¹¤¬»ØÄꤵ¤ì¤¿¤È¤­¤Ï¡¢¥¢¥¹¥¿¥ê¥¹¥¯¤ò
- ¥æ¡¼¥¶Ì¾¤ÇÃÖ´¹¤·¤¿¤â¤Î¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£¤³¤Î¤è¤¦¤ÊÀßÄê¤À¤È:</p>
-
- <div class="example"><p><code>
- UserDir /var/www/*/docs
- </code></p></div>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code> ¤Ï
- ¥Ñ¥¹ <code>/var/www/rbowen/docs/file.html</code> ¤ØÊÑ´¹¤µ¤ì¤Þ¤¹¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">¤³¤Îµ¡Ç½¤ò»ÈÍѤǤ­¤ë¥æ¡¼¥¶¤òÀ©¸Â¤¹¤ë</a></h2>
-
-
- <p>UserDir ¤Î¥É¥­¥å¥á¥ó¥È¤Ë¼¨¤µ¤ì¤Æ¤¤¤ë¹½Ê¸¤ò»È¤¦¤³¤È¤Ç¡¢
- ¤É¤Î¥æ¡¼¥¶¤¬¤³¤Îµ¡Ç½¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¤«¤òÀ©¸Â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </code></p></div>
-
- <p>¾å¤ÎÀßÄê¤Ï <code>dissabled</code> ʸ¤Î¥æ¡¼¥¶°Ê³°¤Î¤¹¤Ù¤Æ¤Î¥æ¡¼¥¶¤Ë
- ÂФ·¤Æ UserDir ¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£Æ±Íͤˤ·¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë
- ¿ô̾¤Î¥æ¡¼¥¶°Ê³°¤ËÂФ·¤Æ¤³¤Îµ¡Ç½¤ò̵¸ú¤Ë¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </code></p></div>
-
- <p>¾¤ÎÎã¤Ï <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- ¤ÎÀâÌÀ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">¥æ¡¼¥¶Ëè¤Î CGI ¥Ç¥£¥ì¥¯¥È¥ê</a></h2>
-
-
- <p>¤½¤ì¤¾¤ì¤Î¥æ¡¼¥¶¤ËÀìÍѤΠcgi-bin ¥Ç¥£¥ì¥¯¥È¥ê¤òÍ¿¤¨¤ë¤¿¤á¤Ë¡¢
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¤ò»È¤Ã¤Æ¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î»ØÄꤵ¤ì¤¿Îΰè¤ËÂФ·¤Æ CGI ¤òÍ­¸ú¤Ë
- ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¤½¤·¤Æ¡¢<code>UserDir</code> ¤¬
- <code>public_html</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È²¾Äꤹ¤ë¤È¡¢
- ¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î CGI ¥×¥í¥°¥é¥à <code>example.cgi</code>
- ¤Ï°Ê²¼¤ÎÍͤ˸ƤӽФµ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- http://example.com/~rbowen/cgi-bin/example.cgi
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">¥æ¡¼¥¶¤Ë¤è¤ëÀßÄêÊѹ¹¤òµö²Ä</a></h2>
-
-
- <p>¥æ¡¼¥¶¤ËÈà¤é¤Î¥¦¥§¥Ö¶õ´Ö¤Ç¤Î¥µ¡¼¥Ð¤ÎÀßÄê¤ÎÊѹ¹¤òµö²Ä¤¹¤ë¾ì¹ç¡¢
- ¥æ¡¼¥¶¤Ï <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤ÆÀßÄê¤òÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ¤ÎÃͤò
- ¥æ¡¼¥¶¤¬Êѹ¹¤¹¤ë¤³¤È¤òµö²Ä¤·¤¿¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ËÂФ·¤Æ½½Ê¬¤Ê¤â¤Î¤Ë
- ÀßÄꤷ¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤Îµ¡Ç½¤¬¤É¤Î¤è¤¦¤Ë¤·¤ÆÆ°ºî¤·¤Æ¤¤¤ë¤«
- ¤Î¾ÜºÙ¤Ï <a href="htaccess.html">.htaccess ¥Á¥å¡¼¥È¥ê¥¢¥ë</a> ¤òÆɤó¤Ç
- ¤¯¤À¤µ¤¤¡£</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/public_html.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/public_html.html.ko.euc-kr b/docs/manual/howto/public_html.html.ko.euc-kr
deleted file mode 100644
index c059272fbc..0000000000
--- a/docs/manual/howto/public_html.html.ko.euc-kr
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>»ç¿ëÀÚº° À¥µð·ºÅ丮 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>»ç¿ëÀÚº° À¥µð·ºÅ丮</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/public_html.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>¿©·¯ »ç¿ëÀÚ°¡ ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- °¢ »ç¿ëÀÚ´Â ÀÚ½ÅÀÇ È¨µð·ºÅ丮 ¾È¿¡ À¥»çÀÌÆ®¸¦ ¸¸µé ¼ö ÀÖ´Ù.
- URL <code>http://example.com/~username/</code>¿¡ Á¢±ÙÇϸé
- »ç¿ëÀÚ "<code>username</code>"ÀÇ È¨µð·ºÅ丮¿¡¼­ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> Áö½Ã¾î·Î ÁöÁ¤ÇÑ
- ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ÆäÀÌÁö¸¦ °¡Á®¿À°Ô µÈ´Ù.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">»ç¿ëÀÚº° À¥µð·ºÅ丮</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir·Î ÆÄÀÏ°æ·Î ÁöÁ¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">±â´ÉÀ» ÀÌ¿ëÇÒ »ç¿ëÀÚ Á¦ÇÑÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">°¢ »ç¿ëÀÚº° cgi µð·ºÅ丮 ÁöÁ¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">»ç¿ëÀÚ°¡ ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖµµ·Ï ¸¸µé±â</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">»ç¿ëÀÚº° À¥µð·ºÅ丮</a></h2>
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="userdir" id="userdir">UserDir·Î ÆÄÀÏ°æ·Î ÁöÁ¤Çϱâ</a></h2>
-
-
- <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- Áö½Ã¾î´Â »ç¿ëÀÚº° ÆäÀÌÁö¸¦ °¡Á®¿Ã µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ
- Áö½Ã¾îÀÇ »ç¿ë¹ýÀº ¿©·¯°¡Áö´Ù.</p>
-
- <p>½½·¡½¬·Î ½ÃÀÛÇÏÁö¾Ê´Â °æ·Î¸¦ ÁöÁ¤ÇÏ¸é °¢ »ç¿ëÀÚÀÇ
- Ȩµð·ºÅ丮¿¡ »ó´ëÀûÀÎ µð·ºÅ丮 °æ·Î·Î ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î,
- ¾Æ·¡ ¼³Á¤ÀÇ °æ¿ì:</p>
-
- <div class="example"><p><code>
- UserDir public_html
- </code></p></div>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code>˼
- ÆÄÀÏ °æ·Î <code>/home/rbowen/public_html/file.html</code>À»
- ¶æÇÑ´Ù.</p>
-
- <p>½½·¡½¬·Î ½ÃÀÛÇÏ´Â °æ·Î¸¦ ÁöÁ¤Çϸé ÁöÁ¤ÇÑ µð·ºÅ丮¿¡
- »ç¿ëÀÚ¸íÀ» ´õÇÑ µð·ºÅ丮 °æ·Î¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ¾Æ·¡
- ¼³Á¤ÀÇ °æ¿ì:</p>
-
- <div class="example"><p><code>
- UserDir /var/html
- </code></p></div>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code>˼
- ÆÄÀÏ °æ·Î <code>/var/html/rbowen/file.html</code>À» ¶æÇÑ´Ù.</p>
-
- <p>º°Ç¥ (*)¸¦ Æ÷ÇÔÇÑ °æ·Î¸¦ ÁöÁ¤ÇÏ¸é º°Ç¥¸¦ »ç¿ëÀÚ¸íÀ¸·Î
- ´ëüÇÑ °æ·Î¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ¾Æ·¡ ¼³Á¤ÀÇ °æ¿ì:</p>
-
- <div class="example"><p><code>
- UserDir /var/www/*/docs
- </code></p></div>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code>˼
- ÆÄÀÏ °æ·Î <code>/var/www/rbowen/docs/file.html</code>À»
- ¶æÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">±â´ÉÀ» ÀÌ¿ëÇÒ »ç¿ëÀÚ Á¦ÇÑÇϱâ</a></h2>
-
-
- <p>UserDir ¹®¼­¿¡ ÀÖ´Â ¹®¹ýÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚº° À¥µð·ºÅ丮
- ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ Á¦ÇÑÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </code></p></div>
-
- <p>À§ ¼³Á¤Àº <code>disabled</code> ¹®Àå¿¡ ¿­°ÅÇÑ »ç¶÷À»
- Á¦¿ÜÇÏ°í ¸ðµç »ç¿ëÀÚ¿¡°Ô À¥µð·ºÅ丮 ±â´ÉÀ» Çã¶ôÇÑ´Ù. ¶Ç,
- ´ÙÀ½°ú °°ÀÌ ¸î¸î »ç¿ëÀÚ¸¦ Á¦¿ÜÇÏ°í ±â´ÉÀ» Çã¶ôÇÏÁö ¾ÊÀ»
- ¼öµµ ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- ¹®¼­¿¡ ÀÖ´Â ´Ù¸¥ ¿¹µéµµ Âü°íÇ϶ó.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">°¢ »ç¿ëÀÚº° cgi µð·ºÅ丮 ÁöÁ¤Çϱâ</a></h2>
-
-
- <p>»ç¿ëÀÚ¸¶´Ù cgi-bin µð·ºÅ丮¸¦ ºÎ¿©ÇÏ·Á¸é <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© »ç¿ëÀÚ È¨µð·ºÅ丮ÀÇ Æ¯Á¤ ÇÏÀ§µð·ºÅ丮¸¦ cgi °¡´ÉÇÏ°Ô
- ¸¸µç´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><code>UserDir</code>ÀÌ <code>public_html</code>À̶ó°í
- °¡Á¤Çϸé, ´ÙÀ½°ú °°ÀÌ ±× ¾È¿¡ ÀÖ´Â cgi ÇÁ·Î±×·¥
- <code>example.cgi</code>¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- http://example.com/~rbowen/cgi-bin/example.cgi
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">»ç¿ëÀÚ°¡ ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖµµ·Ï ¸¸µé±â</a></h2>
-
-
- <p>»ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ À¥°ø°£¿¡ ´ëÇÑ À¥¼­¹ö ¼³Á¤À» ¼öÁ¤ÇÏ·Á¸é,
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>¸¦ »ç¿ëÀÚ°¡ ¼öÁ¤ÇÒ
- ¼ö ÀÖ´Â Áö½Ã¾î¿¡ ÀûÇÕÇÑ °ªÀ¸·Î ¼³Á¤Ç϶ó. ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¿¡
- ´ëÇÑ ÀÚ¼¼ÇÑ Á´º¸´Â <a href="htaccess.html">.htaccess
- ÅõÅ丮¾ó</a>À» Âü°íÇ϶ó.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/public_html.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/public_html.xml b/docs/manual/howto/public_html.xml
deleted file mode 100644
index 63f74e7abb..0000000000
--- a/docs/manual/howto/public_html.xml
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="public_html.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
- <title>Per-user web directories</title>
-
-<summary>
-<p>On systems with multiple users, each user can be permitted to have a
- web site in their home directory using the <directive
- module="mod_userdir">UserDir</directive> directive. Visitors
- to a URL <code>http://example.com/~username/</code> will get content
- out of the home directory of the user "<code>username</code>", out of
- the subdirectory specified by the <directive
- module="mod_userdir">UserDir</directive> directive.</p>
-
-</summary>
-
-<seealso><a href="../urlmapping.html">Mapping URLs to the Filesystem</a></seealso>
-
- <section id="related">
- <title>Per-user web directories</title>
- <related>
- <modulelist>
- <module>mod_userdir</module>
- </modulelist>
- <directivelist>
- <directive module="mod_userdir">UserDir</directive>
- <directive module="core">DirectoryMatch</directive>
- <directive module="core">AllowOverride</directive>
- </directivelist>
- </related>
- </section>
-
- <section id="userdir">
- <title>Setting the file path with UserDir</title>
-
- <p>The <directive module="mod_userdir">UserDir</directive>
- directive specifies a directory out of which per-user
- content is loaded. This directive may take several different forms.</p>
-
- <p>If a path is given which does not start with a leading slash, it is
- assumed to be a directory path relative to the home directory of the
- specified user. Given this configuration:</p>
-
- <example>
- UserDir public_html
- </example>
-
- <p>the URL <code>http://example.com/~rbowen/file.html</code> will be
- translated to the file path
- <code>/home/rbowen/public_html/file.html</code></p>
-
- <p>If a path is given starting with a slash, a directory path will be
- constructed using that path, plus the username specified. Given this
- configuration:</p>
-
- <example>
- UserDir /var/html
- </example>
-
- <p>the URL <code>http://example.com/~rbowen/file.html</code> will be
- translated to the file path <code>/var/html/rbowen/file.html</code></p>
-
- <p>If a path is provided which contains an asterisk (*), a path is used
- in which the asterisk is replaced with the username. Given this
- configuration:</p>
-
- <example>
- UserDir /var/www/*/docs
- </example>
-
- <p>the URL <code>http://example.com/~rbowen/file.html</code> will be
- translated to the file path
- <code>/var/www/rbowen/docs/file.html</code></p>
-
- </section>
-
- <section id="enable">
- <title>Restricting what users are permitted to use this
- feature</title>
-
- <p>Using the syntax shown in the UserDir documentation, you can restrict
- what users are permitted to use this functionality:</p>
-
- <example>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </example>
-
- <p>The configuration above will enable the feature for all users
- except for those listed in the <code>disabled</code> statement.
- You can, likewise, disable the feature for all but a few users by
- using a configuration like the following:</p>
-
- <example>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </example>
-
- <p>See <directive module="mod_userdir">UserDir</directive>
- documentation for additional examples.</p>
-
- </section>
-
- <section id="cgi">
- <title>Enabling a cgi directory for each user</title>
-
- <p>In order to give each user their own cgi-bin directory, you can use
- a <directive module="core" type="section">Directory</directive>
- directive to make a particular subdirectory of a user's home directory
- cgi-enabled.</p>
-
- <example>
- &lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- &lt;/Directory&gt;
- </example>
-
- <p>Then, presuming that <code>UserDir</code> is set to
- <code>public_html</code>, a cgi program <code>example.cgi</code>
- could be loaded from that directory as:</p>
-
- <example>
- http://example.com/~rbowen/cgi-bin/example.cgi
- </example>
-
- </section>
-
- <section id="htaccess">
- <title>Allowing users to alter configuration</title>
-
- <p>If you want to allows users to modify the server configuration in
- their web space, they will need to use <code>.htaccess</code> files to
- make these changed. Ensure that you have set <directive
- module="core">AllowOverride</directive> to a
- value sufficient for the directives that you want to permit the users
- to modify. See the <a href="htaccess.html">.htaccess tutorial</a> for
- additional details on how this works.</p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/howto/public_html.xml.ja b/docs/manual/howto/public_html.xml.ja
deleted file mode 100644
index 0cfb2e8d5a..0000000000
--- a/docs/manual/howto/public_html.xml.ja
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="public_html.xml.meta">
-<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
-
- <title>$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</title>
-
-<summary>
-<p>$BJ#?t$N%f!<%6$N$$$k%7%9%F%`$G$O!"(B<directive
- module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$r;H$C$F(B
- $B3F%f!<%6$,%[!<%`%G%#%l%/%H%j$K%&%'%V%5%$%H$r9=C[$G$-$k$h$&$K@_Dj$9$k$3$H$,(B
- $B2DG=$G$9!#(BURL <code>http://example.com/~username/</code> $B$rK,$l$??M$O(B
- "<code>username</code>" $B$H$$$&%f!<%6$N(B <directive
- module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$G;XDj$5$l$?(B
- $B%5%V%G%#%l%/%H%j$+$i%3%s%F%s%D$rF@$k$3$H$K$J$j$^$9!#(B</p>
-</summary>
-
-<seealso><a href="../urlmapping.html">URL $B$+$i%U%!%$%k%7%9%F%`$X$N%^%C%T%s%0(B</a></seealso>
-
- <section id="related">
- <title>$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</title>
- <related>
- <modulelist>
- <module>mod_userdir</module>
- </modulelist>
- <directivelist>
- <directive module="mod_userdir">UserDir</directive>
- <directive module="core">DirectoryMatch</directive>
- <directive module="core">AllowOverride</directive>
- </directivelist>
- </related>
- </section>
-
- <section id="userdir">
- <title>UserDir $B$r;H$C$F%U%!%$%k$N%Q%9$r@_Dj$9$k(B</title>
-
- <p><directive module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$O(B
- $B%f!<%6Kh$N%3%s%F%s%D$,FI$_9~$^$l$k%G%#%l%/%H%j$r;XDj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$O$$$m$$$m0c$C$?7A<0$r<h$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%9%i%C%7%e$G;O$^$i$J$$%Q%9$,M?$($i$l$?$H$-$O!"%f!<%6$N%[!<%`%G%#%l%/%H%j(B
- $B$+$i$NAjBP%Q%9$H$_$J$5$l$^$9!#<!$N@_Dj$,$"$C$?$H$-$K(B:</p>
-
- <example>
- UserDir public_html
- </example>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code> $B$O(B
- $B%Q%9(B <code>/home/rbowen/public_html/file.html</code> $B$X(B
- $BJQ49$5$l$^$9!#(B</p>
-
- <p>$B%Q%9$,%9%i%C%7%e$G;O$^$k$H$-$O!"%G%#%l%/%H%j%Q%9$O$=$N%Q%9$K(B
- $B%f!<%6L>$r2C$($?$b$N$+$i$J$j$^$9!#<!$N@_Dj$N$H$-(B:</p>
-
- <example>
- UserDir /var/html
- </example>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code> $B$O(B
- $B%Q%9(B <code>/var/html/rbowen/file.html</code> $B$XJQ49$5$l$^$9!#(B</p>
-
- <p>$B%"%9%?%j%9%/(B (*) $B$r4^$`%Q%9$,;XDj$5$l$?$H$-$O!"%"%9%?%j%9%/$r(B
- $B%f!<%6L>$GCV49$7$?$b$N$,;HMQ$5$l$^$9!#$3$N$h$&$J@_Dj$@$H(B:</p>
-
- <example>
- UserDir /var/www/*/docs
- </example>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code> $B$O(B
- $B%Q%9(B <code>/var/www/rbowen/docs/file.html</code> $B$XJQ49$5$l$^$9!#(B</p>
-
- </section>
-
- <section id="enable">
- <title>$B$3$N5!G=$r;HMQ$G$-$k%f!<%6$r@)8B$9$k(B</title>
-
- <p>UserDir $B$N%I%-%e%a%s%H$K<($5$l$F$$$k9=J8$r;H$&$3$H$G!"(B
- $B$I$N%f!<%6$,$3$N5!G=$r;H$&$3$H$,$G$-$k$+$r@)8B$9$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </example>
-
- <p>$B>e$N@_Dj$O(B <code>dissabled</code> $BJ8$N%f!<%60J30$N$9$Y$F$N%f!<%6$K(B
- $BBP$7$F(B UserDir $B$N5!G=$rM-8z$K$7$^$9!#F1MM$K$7$F!"0J2<$N$h$&$K(B
- $B?tL>$N%f!<%60J30$KBP$7$F$3$N5!G=$rL58z$K$9$k$3$H$b$G$-$^$9(B:</p>
-
- <example>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </example>
-
- <p>$BB>$NNc$O(B <directive module="mod_userdir">UserDir</directive>
- $B$N@bL@$r;2>H$7$F$/$@$5$$!#(B</p>
-
- </section>
-
- <section id="cgi">
- <title>$B%f!<%6Kh$N(B CGI $B%G%#%l%/%H%j(B</title>
-
- <p>$B$=$l$>$l$N%f!<%6$K@lMQ$N(B cgi-bin $B%G%#%l%/%H%j$rM?$($k$?$a$K!"(B
- <directive module="core" type="section">Directory</directive>
- $B$r;H$C$F%f!<%6$N%[!<%`%G%#%l%/%H%j$N;XDj$5$l$?NN0h$KBP$7$F(B CGI $B$rM-8z$K(B
- $B$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- &lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- &lt;/Directory&gt;
- </example>
-
- <p>$B$=$7$F!"(B<code>UserDir</code> $B$,(B
- <code>public_html</code> $B$K@_Dj$5$l$F$$$k$H2>Dj$9$k$H!"(B
- $B$=$N%G%#%l%/%H%j$N(B CGI $B%W%m%0%i%`(B <code>example.cgi</code>
- $B$O0J2<$NMM$K8F$S=P$5$l$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- http://example.com/~rbowen/cgi-bin/example.cgi
- </example>
-
- </section>
-
- <section id="htaccess">
- <title>$B%f!<%6$K$h$k@_DjJQ99$r5v2D(B</title>
-
- <p>$B%f!<%6$KH`$i$N%&%'%V6u4V$G$N%5!<%P$N@_Dj$NJQ99$r5v2D$9$k>l9g!"(B
- $B%f!<%6$O(B <code>.htaccess</code> $B%U%!%$%k$r;H$C$F@_Dj$rJQ99$9$kI,MW$,$"$j$^$9!#(B
- <directive module="core">AllowOverride</directive> $B$NCM$r(B
- $B%f!<%6$,JQ99$9$k$3$H$r5v2D$7$?$$%G%#%l%/%F%#%V$KBP$7$F==J,$J$b$N$K(B
- $B@_Dj$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#$3$N5!G=$,$I$N$h$&$K$7$FF0:n$7$F$$$k$+(B
- $B$N>\:Y$O(B <a href="htaccess.html">.htaccess $B%A%e!<%H%j%"%k(B</a> $B$rFI$s$G(B
- $B$/$@$5$$!#(B</p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/howto/public_html.xml.ko b/docs/manual/howto/public_html.xml.ko
deleted file mode 100644
index 4c2e6ffee7..0000000000
--- a/docs/manual/howto/public_html.xml.ko
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="public_html.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
- <title>»ç¿ëÀÚº° À¥µð·ºÅ丮</title>
-
-<summary>
-<p>¿©·¯ »ç¿ëÀÚ°¡ ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ <directive
- module="mod_userdir">UserDir</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- °¢ »ç¿ëÀÚ´Â ÀÚ½ÅÀÇ È¨µð·ºÅ丮 ¾È¿¡ À¥»çÀÌÆ®¸¦ ¸¸µé ¼ö ÀÖ´Ù.
- URL <code>http://example.com/~username/</code>¿¡ Á¢±ÙÇϸé
- »ç¿ëÀÚ "<code>username</code>"ÀÇ È¨µð·ºÅ丮¿¡¼­ <directive
- module="mod_userdir">UserDir</directive> Áö½Ã¾î·Î ÁöÁ¤ÇÑ
- ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ÆäÀÌÁö¸¦ °¡Á®¿À°Ô µÈ´Ù.</p>
-
-</summary>
-
-<seealso><a href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></seealso>
-
- <section id="related">
- <title>»ç¿ëÀÚº° À¥µð·ºÅ丮</title>
- <related>
- <modulelist>
- <module>mod_userdir</module>
- </modulelist>
- <directivelist>
- <directive module="mod_userdir">UserDir</directive>
- <directive module="core">DirectoryMatch</directive>
- <directive module="core">AllowOverride</directive>
- </directivelist>
- </related>
- </section>
-
- <section id="userdir">
- <title>UserDir·Î ÆÄÀÏ°æ·Î ÁöÁ¤Çϱâ</title>
-
- <p><directive module="mod_userdir">UserDir</directive>
- Áö½Ã¾î´Â »ç¿ëÀÚº° ÆäÀÌÁö¸¦ °¡Á®¿Ã µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ
- Áö½Ã¾îÀÇ »ç¿ë¹ýÀº ¿©·¯°¡Áö´Ù.</p>
-
- <p>½½·¡½¬·Î ½ÃÀÛÇÏÁö¾Ê´Â °æ·Î¸¦ ÁöÁ¤ÇÏ¸é °¢ »ç¿ëÀÚÀÇ
- Ȩµð·ºÅ丮¿¡ »ó´ëÀûÀÎ µð·ºÅ丮 °æ·Î·Î ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î,
- ¾Æ·¡ ¼³Á¤ÀÇ °æ¿ì:</p>
-
- <example>
- UserDir public_html
- </example>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code>˼
- ÆÄÀÏ °æ·Î <code>/home/rbowen/public_html/file.html</code>À»
- ¶æÇÑ´Ù.</p>
-
- <p>½½·¡½¬·Î ½ÃÀÛÇÏ´Â °æ·Î¸¦ ÁöÁ¤Çϸé ÁöÁ¤ÇÑ µð·ºÅ丮¿¡
- »ç¿ëÀÚ¸íÀ» ´õÇÑ µð·ºÅ丮 °æ·Î¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ¾Æ·¡
- ¼³Á¤ÀÇ °æ¿ì:</p>
-
- <example>
- UserDir /var/html
- </example>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code>˼
- ÆÄÀÏ °æ·Î <code>/var/html/rbowen/file.html</code>À» ¶æÇÑ´Ù.</p>
-
- <p>º°Ç¥ (*)¸¦ Æ÷ÇÔÇÑ °æ·Î¸¦ ÁöÁ¤ÇÏ¸é º°Ç¥¸¦ »ç¿ëÀÚ¸íÀ¸·Î
- ´ëüÇÑ °æ·Î¸¦ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ¾Æ·¡ ¼³Á¤ÀÇ °æ¿ì:</p>
-
- <example>
- UserDir /var/www/*/docs
- </example>
-
- <p>URL <code>http://example.com/~rbowen/file.html</code>˼
- ÆÄÀÏ °æ·Î <code>/var/www/rbowen/docs/file.html</code>À»
- ¶æÇÑ´Ù.</p>
-
- </section>
-
- <section id="enable">
- <title>±â´ÉÀ» ÀÌ¿ëÇÒ »ç¿ëÀÚ Á¦ÇÑÇϱâ</title>
-
- <p>UserDir ¹®¼­¿¡ ÀÖ´Â ¹®¹ýÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚº° À¥µð·ºÅ丮
- ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ Á¦ÇÑÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </example>
-
- <p>À§ ¼³Á¤Àº <code>disabled</code> ¹®Àå¿¡ ¿­°ÅÇÑ »ç¶÷À»
- Á¦¿ÜÇÏ°í ¸ðµç »ç¿ëÀÚ¿¡°Ô À¥µð·ºÅ丮 ±â´ÉÀ» Çã¶ôÇÑ´Ù. ¶Ç,
- ´ÙÀ½°ú °°ÀÌ ¸î¸î »ç¿ëÀÚ¸¦ Á¦¿ÜÇÏ°í ±â´ÉÀ» Çã¶ôÇÏÁö ¾ÊÀ»
- ¼öµµ ÀÖ´Ù:</p>
-
- <example>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </example>
-
- <p><directive module="mod_userdir">UserDir</directive>
- ¹®¼­¿¡ ÀÖ´Â ´Ù¸¥ ¿¹µéµµ Âü°íÇ϶ó.</p>
-
- </section>
-
- <section id="cgi">
- <title>°¢ »ç¿ëÀÚº° cgi µð·ºÅ丮 ÁöÁ¤Çϱâ</title>
-
- <p>»ç¿ëÀÚ¸¶´Ù cgi-bin µð·ºÅ丮¸¦ ºÎ¿©ÇÏ·Á¸é <directive
- module="core" type="section">Directory</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© »ç¿ëÀÚ È¨µð·ºÅ丮ÀÇ Æ¯Á¤ ÇÏÀ§µð·ºÅ丮¸¦ cgi °¡´ÉÇÏ°Ô
- ¸¸µç´Ù.</p>
-
- <example>
- &lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- &lt;/Directory&gt;
- </example>
-
- <p><code>UserDir</code>ÀÌ <code>public_html</code>À̶ó°í
- °¡Á¤Çϸé, ´ÙÀ½°ú °°ÀÌ ±× ¾È¿¡ ÀÖ´Â cgi ÇÁ·Î±×·¥
- <code>example.cgi</code>¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example>
- http://example.com/~rbowen/cgi-bin/example.cgi
- </example>
-
- </section>
-
- <section id="htaccess">
- <title>»ç¿ëÀÚ°¡ ¼³Á¤À» º¯°æÇÒ ¼ö ÀÖµµ·Ï ¸¸µé±â</title>
-
- <p>»ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ À¥°ø°£¿¡ ´ëÇÑ À¥¼­¹ö ¼³Á¤À» ¼öÁ¤ÇÏ·Á¸é,
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. <directive
- module="core">AllowOverride</directive>¸¦ »ç¿ëÀÚ°¡ ¼öÁ¤ÇÒ
- ¼ö ÀÖ´Â Áö½Ã¾î¿¡ ÀûÇÕÇÑ °ªÀ¸·Î ¼³Á¤Ç϶ó. ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¿¡
- ´ëÇÑ ÀÚ¼¼ÇÑ Á´º¸´Â <a href="htaccess.html">.htaccess
- ÅõÅ丮¾ó</a>À» Âü°íÇ϶ó.</p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/howto/public_html.xml.meta b/docs/manual/howto/public_html.xml.meta
deleted file mode 100644
index 96559002a1..0000000000
--- a/docs/manual/howto/public_html.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>public_html</basename>
- <path>/howto/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/howto/ssi.html b/docs/manual/howto/ssi.html
deleted file mode 100644
index 6142aec8e8..0000000000
--- a/docs/manual/howto/ssi.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: ssi.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: ssi.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: ssi.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/howto/ssi.html.en b/docs/manual/howto/ssi.html.en
deleted file mode 100644
index 096f601ffa..0000000000
--- a/docs/manual/howto/ssi.html.en
+++ /dev/null
@@ -1,486 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Tutorial: Introduction to Server Side Includes - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: Introduction to Server Side Includes</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/ssi.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Server-side includes provide a means to add dynamic content to
-existing HTML documents.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Introduction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">What are SSI?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configuring your server to permit SSI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#basic">Basic SSI directives</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Additional examples</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#config">What else can I config?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#exec">Executing commands</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#advanced">Advanced SSI techniques</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Conclusion</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Introduction</a></h2>
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>
-
- <p>This article deals with Server Side Includes, usually called
- simply SSI. In this article, I'll talk about configuring your
- server to permit SSI, and introduce some basic SSI techniques
- for adding dynamic content to your existing HTML pages.</p>
-
- <p>In the latter part of the article, we'll talk about some of
- the somewhat more advanced things that can be done with SSI,
- such as conditional statements in your SSI directives.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">What are SSI?</a></h2>
-
- <p>SSI (Server Side Includes) are directives that are placed in
- HTML pages, and evaluated on the server while the pages are
- being served. They let you add dynamically generated content to
- an existing HTML page, without having to serve the entire page
- via a CGI program, or other dynamic technology.</p>
-
- <p>The decision of when to use SSI, and when to have your page
- entirely generated by some program, is usually a matter of how
- much of the page is static, and how much needs to be
- recalculated every time the page is served. SSI is a great way
- to add small pieces of information, such as the current time.
- But if a majority of your page is being generated at the time
- that it is served, you need to look for some other
- solution.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">Configuring your server to permit SSI</a></h2>
-
-
- <p>To permit SSI on your server, you must have the following
- directive either in your <code>httpd.conf</code> file, or in a
- <code>.htaccess</code> file:</p>
-<div class="example"><p><code>
- Options +Includes
-</code></p></div>
-
- <p>This tells Apache that you want to permit files to be parsed
- for SSI directives. Note that most configurations contain
- multiple <code class="directive"><a href="../mod/core.html#options">Options</a></code> directives
- that can override each other. You will probably need to apply the
- <code>Options</code> to the specific directory where you want SSI
- enabled in order to assure that it gets evaluated last.</p>
-
- <p>Not just any file is parsed for SSI directives. You have to
- tell Apache which files should be parsed. There are two ways to
- do this. You can tell Apache to parse any file with a
- particular file extension, such as <code>.shtml</code>, with
- the following directives:</p>
-<div class="example"><p><code>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</code></p></div>
-
- <p>One disadvantage to this approach is that if you wanted to
- add SSI directives to an existing page, you would have to
- change the name of that page, and all links to that page, in
- order to give it a <code>.shtml</code> extension, so that those
- directives would be executed.</p>
-
- <p>The other method is to use the <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> directive:</p>
-<div class="example"><p><code>
- XBitHack on
-</code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
- tells Apache to parse files for SSI
- directives if they have the execute bit set. So, to add SSI
- directives to an existing page, rather than having to change
- the file name, you would just need to make the file executable
- using <code>chmod</code>.</p>
-<div class="example"><p><code>
- chmod +x pagename.html
-</code></p></div>
-
- <p>A brief comment about what not to do. You'll occasionally
- see people recommending that you just tell Apache to parse all
- <code>.html</code> files for SSI, so that you don't have to
- mess with <code>.shtml</code> file names. These folks have
- perhaps not heard about <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>. The thing to
- keep in mind is that, by doing this, you're requiring that
- Apache read through every single file that it sends out to
- clients, even if they don't contain any SSI directives. This
- can slow things down quite a bit, and is not a good idea.</p>
-
- <p>Of course, on Windows, there is no such thing as an execute
- bit to set, so that limits your options a little.</p>
-
- <p>In its default configuration, Apache does not send the last
- modified date or content length HTTP headers on SSI pages,
- because these values are difficult to calculate for dynamic
- content. This can prevent your document from being cached, and
- result in slower perceived client performance. There are two
- ways to solve this:</p>
-
- <ol>
- <li>Use the <code>XBitHack Full</code> configuration. This
- tells Apache to determine the last modified date by looking
- only at the date of the originally requested file, ignoring
- the modification date of any included files.</li>
-
- <li>Use the directives provided by
- <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> to set an explicit expiration
- time on your files, thereby letting browsers and proxies
- know that it is acceptable to cache them.</li>
- </ol>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basic" id="basic">Basic SSI directives</a></h2>
-
- <p>SSI directives have the following syntax:</p>
-<div class="example"><p><code>
- &lt;!--#element attribute=value attribute=value ... --&gt;
-</code></p></div>
-
- <p>It is formatted like an HTML comment, so if you don't have
- SSI correctly enabled, the browser will ignore it, but it will
- still be visible in the HTML source. If you have SSI correctly
- configured, the directive will be replaced with its
- results.</p>
-
- <p>The element can be one of a number of things, and we'll talk
- some more about most of these in the next installment of this
- series. For now, here are some examples of what you can do with
- SSI</p>
-
-<h3><a name="todaysdate" id="todaysdate">Today's date</a></h3>
-
-<div class="example"><p><code>
- &lt;!--#echo var="DATE_LOCAL" --&gt;
-</code></p></div>
-
- <p>The <code>echo</code> element just spits out the value of a
- variable. There are a number of standard variables, which
- include the whole set of environment variables that are
- available to CGI programs. Also, you can define your own
- variables with the <code>set</code> element.</p>
-
- <p>If you don't like the format in which the date gets printed,
- you can use the <code>config</code> element, with a
- <code>timefmt</code> attribute, to modify that formatting.</p>
-
-<div class="example"><p><code>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</code></p></div>
-
-
-<h3><a name="lastmodified" id="lastmodified">Modification date of the file</a></h3>
-
-<div class="example"><p><code>
- This document last modified &lt;!--#flastmod file="index.html" --&gt;
-</code></p></div>
-
- <p>This element is also subject to <code>timefmt</code> format
- configurations.</p>
-
-
-<h3><a name="cgi" id="cgi">Including the results of a CGI program</a></h3>
-
- <p>This is one of the more common uses of SSI - to output the
- results of a CGI program, such as everybody's favorite, a ``hit
- counter.''</p>
-
-<div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</code></p></div>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="additionalexamples" id="additionalexamples">Additional examples</a></h2>
-
-
- <p>Following are some specific examples of things you can do in
- your HTML documents with SSI.</p>
-
-<h3><a name="docmodified" id="docmodified">When was this document
-modified?</a></h3>
-
- <p>Earlier, we mentioned that you could use SSI to inform the
- user when the document was most recently modified. However, the
- actual method for doing that was left somewhat in question. The
- following code, placed in your HTML document, will put such a
- time stamp on your page. Of course, you will have to have SSI
- correctly enabled, as discussed above.</p>
-<div class="example"><p><code>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
-</code></p></div>
-
- <p>Of course, you will need to replace the
- <code>ssi.shtml</code> with the actual name of the file that
- you're referring to. This can be inconvenient if you're just
- looking for a generic piece of code that you can paste into any
- file, so you probably want to use the
- <code>LAST_MODIFIED</code> variable instead:</p>
-<div class="example"><p><code>
- &lt;!--#config timefmt="%D" --&gt;<br />
- This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</code></p></div>
-
- <p>For more details on the <code>timefmt</code> format, go to
- your favorite search site and look for <code>strftime</code>. The
- syntax is the same.</p>
-
-
-<h3><a name="standard-footer" id="standard-footer">Including a standard footer</a></h3>
-
-
- <p>If you are managing any site that is more than a few pages,
- you may find that making changes to all those pages can be a
- real pain, particularly if you are trying to maintain some kind
- of standard look across all those pages.</p>
-
- <p>Using an include file for a header and/or a footer can
- reduce the burden of these updates. You just have to make one
- footer file, and then include it into each page with the
- <code>include</code> SSI command. The <code>include</code>
- element can determine what file to include with either the
- <code>file</code> attribute, or the <code>virtual</code>
- attribute. The <code>file</code> attribute is a file path,
- <em>relative to the current directory</em>. That means that it
- cannot be an absolute file path (starting with /), nor can it
- contain ../ as part of that path. The <code>virtual</code>
- attribute is probably more useful, and should specify a URL
- relative to the document being served. It can start with a /,
- but must be on the same server as the file being served.</p>
-<div class="example"><p><code>
- &lt;!--#include virtual="/footer.html" --&gt;
-</code></p></div>
-
- <p>I'll frequently combine the last two things, putting a
- <code>LAST_MODIFIED</code> directive inside a footer file to be
- included. SSI directives can be contained in the included file,
- and includes can be nested - that is, the included file can
- include another file, and so on.</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="config" id="config">What else can I config?</a></h2>
-
-
- <p>In addition to being able to <code>config</code> the time
- format, you can also <code>config</code> two other things.</p>
-
- <p>Usually, when something goes wrong with your SSI directive,
- you get the message</p>
-<div class="example"><p><code>
- [an error occurred while processing this directive]
-</code></p></div>
-
- <p>If you want to change that message to something else, you
- can do so with the <code>errmsg</code> attribute to the
- <code>config</code> element:</p>
-<div class="example"><p><code>
- &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</code></p></div>
-
- <p>Hopefully, end users will never see this message, because
- you will have resolved all the problems with your SSI
- directives before your site goes live. (Right?)</p>
-
- <p>And you can <code>config</code> the format in which file
- sizes are returned with the <code>sizefmt</code> attribute. You
- can specify <code>bytes</code> for a full count in bytes, or
- <code>abbrev</code> for an abbreviated number in Kb or Mb, as
- appropriate.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exec" id="exec">Executing commands</a></h2>
-
-
- <p>I expect that I'll have an article some time in the coming
- months about using SSI with small CGI programs. For now, here's
- something else that you can do with the <code>exec</code>
- element. You can actually have SSI execute a command using the
- shell (<code>/bin/sh</code>, to be precise - or the DOS shell,
- if you're on Win32). The following, for example, will give you
- a directory listing.</p>
-<div class="example"><p><code>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="ls" --&gt;<br />
- &lt;/pre&gt;
-</code></p></div>
-
- <p>or, on Windows</p>
-<div class="example"><p><code>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="dir" --&gt;<br />
- &lt;/pre&gt;
-</code></p></div>
-
- <p>You might notice some strange formatting with this directive
- on Windows, because the output from <code>dir</code> contains
- the string ``&lt;<code>dir</code>&gt;'' in it, which confuses
- browsers.</p>
-
- <p>Note that this feature is exceedingly dangerous, as it will
- execute whatever code happens to be embedded in the
- <code>exec</code> tag. If you have any situation where users
- can edit content on your web pages, such as with a
- ``guestbook'', for example, make sure that you have this
- feature disabled. You can allow SSI, but not the
- <code>exec</code> feature, with the <code>IncludesNOEXEC</code>
- argument to the <code>Options</code> directive.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advanced" id="advanced">Advanced SSI techniques</a></h2>
-
-
- <p>In addition to spitting out content, Apache SSI gives you
- the option of setting variables, and using those variables in
- comparisons and conditionals.</p>
-
-<h3><a name="caveat" id="caveat">Caveat</a></h3>
-
- <p>Most of the features discussed in this article are only
- available to you if you are running Apache 1.2 or later. Of
- course, if you are not running Apache 1.2 or later, you need to
- upgrade immediately, if not sooner. Go on. Do it now. We'll
- wait.</p>
-
-
-<h3><a name="variables" id="variables">Setting variables</a></h3>
-
- <p>Using the <code>set</code> directive, you can set variables
- for later use. We'll need this later in the discussion, so
- we'll talk about it here. The syntax of this is as follows:</p>
-<div class="example"><p><code>
- &lt;!--#set var="name" value="Rich" --&gt;
-</code></p></div>
-
- <p>In addition to merely setting values literally like that, you
- can use any other variable, including <a href="../env.html">environment variables</a> or the variables
- discussed above (like <code>LAST_MODIFIED</code>, for example) to
- give values to your variables. You will specify that something is
- a variable, rather than a literal string, by using the dollar sign
- ($) before the name of the variable.</p>
-
- <div class="example"><p><code> &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
- </code></p></div>
-
- <p>To put a literal dollar sign into the value of your
- variable, you need to escape the dollar sign with a
- backslash.</p>
-<div class="example"><p><code>
- &lt;!--#set var="cost" value="\$100" --&gt;
-</code></p></div>
-
- <p>Finally, if you want to put a variable in the midst of a
- longer string, and there's a chance that the name of the
- variable will run up against some other characters, and thus be
- confused with those characters, you can place the name of the
- variable in braces, to remove this confusion. (It's hard to
- come up with a really good example of this, but hopefully
- you'll get the point.)</p>
-<div class="example"><p><code>
- &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</code></p></div>
-
-
-<h3><a name="conditional" id="conditional">Conditional expressions</a></h3>
-
-
- <p>Now that we have variables, and are able to set and compare
- their values, we can use them to express conditionals. This
- lets SSI be a tiny programming language of sorts.
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> provides an <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code>
- structure for building conditional statements. This allows you
- to effectively generate multiple logical pages out of one
- actual page.</p>
-
- <p>The structure of this conditional construct is:</p>
-<div class="example"><p><code>
- &lt;!--#if expr="test_condition" --&gt;<br />
- &lt;!--#elif expr="test_condition" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
-</code></p></div>
-
- <p>A <em>test_condition</em> can be any sort of logical
- comparison - either comparing values to one another, or testing
- the ``truth'' of a particular value. (A given string is true if
- it is nonempty.) For a full list of the comparison operators
- available to you, see the <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- documentation. Here are some examples of how one might use this
- construct.</p>
-
- <p>In your configuration file, you could put the following
- line:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</code></p></div>
-
- <p>This will set environment variables ``Mac'' and
- ``InternetExplorer'' to true, if the client is running Internet
- Explorer on a Macintosh.</p>
-
- <p>Then, in your SSI-enabled document, you might do the
- following:</p>
-<div class="example"><p><code>
- &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
- Apologetic text goes here<br />
- &lt;!--#else --&gt;<br />
- Cool JavaScript code goes here<br />
- &lt;!--#endif --&gt;
-</code></p></div>
-
- <p>Not that I have anything against IE on Macs - I just
- struggled for a few hours last week trying to get some
- JavaScript working on IE on a Mac, when it was working
- everywhere else. The above was the interim workaround.</p>
-
- <p>Any other variable (either ones that you define, or normal
- environment variables) can be used in conditional statements.
- With Apache's ability to set environment variables with the
- <code>SetEnvIf</code> directives, and other related directives,
- this functionality can let you do some pretty involved dynamic
- stuff without ever resorting to CGI.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="conclusion" id="conclusion">Conclusion</a></h2>
-
- <p>SSI is certainly not a replacement for CGI, or other
- technologies used for generating dynamic web pages. But it is a
- great way to add small amounts of dynamic content to pages,
- without doing a lot of extra work.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/ssi.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/ssi.html.ja.euc-jp b/docs/manual/howto/ssi.html.ja.euc-jp
deleted file mode 100644
index 45b0e72fb9..0000000000
--- a/docs/manual/howto/ssi.html.ja.euc-jp
+++ /dev/null
@@ -1,481 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¥Á¥å¡¼¥È¥ê¥¢¥ë: Server Side Includes ÆþÌç - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></div><div id="page-content"><div id="preamble"><h1>Apache ¥Á¥å¡¼¥È¥ê¥¢¥ë: Server Side Includes ÆþÌç</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/ssi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>¥µ¡¼¥Ð¥µ¥¤¥É¥¤¥ó¥¯¥ë¡¼¥É¤Ë¤è¤Ã¤Æ¡¢´û¸¤Î HTML
-¥É¥­¥å¥á¥ó¥È¤ËưŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤òÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">¤Ï¤¸¤á¤Ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">SSI ¤È¤Ï ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">SSI ¤òµö²Ä¤¹¤ë¤¿¤á¤Î¥µ¡¼¥Ð¤ÎÀßÄê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#basic">´ðËÜŪ¤Ê SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">ÄɲäÎÎã</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#config">¾¤Ë²¿¤¬ÀßÄê¤Ç¤­¤ë¤Î¤« ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#exec">¥³¥Þ¥ó¥É¤Î¼Â¹Ô</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#advanced">¹âÅÙ¤Ê SSI ¥Æ¥¯¥Ë¥Ã¥¯</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">½ª¤ï¤ê¤Ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">¤Ï¤¸¤á¤Ë</a></h2>
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>
-
- <p>¤³¤Îµ­»ö¤Ï¡¢Ä̾ï¤Ïñ¤Ë SSI ¤È¸Æ¤Ð¤ì¤ë Server Side Includes
- ¤ò°·¤¤¤Þ¤¹¡£¤³¤Îµ­»ö¤Ë¤ª¤¤¤Æ¤Ï¡¢¥µ¡¼¥Ð¤Ç¤Î SSI ¤òµö²Ä¤¹¤ë¤¿¤á¤ÎÀßÄê¤È¡¢
- ¸½ºß¤Î HTML ¥Ú¡¼¥¸¤ËưŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤ò²Ã¤¨¤ë¤¿¤á¤Î¤¤¤¯¤Ä¤«¤Î´ðËÜŪ¤Ê
- SSI µ»½Ñ¤ò¾Ò²ð¤·¤Þ¤¹¡£</p>
-
- <p>µ­»ö¤Î¸åȾ¤Ç¤Ï¡¢SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç SSI
- ¤È¶¦¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¾ò·ïʸ¤Î¤è¤¦¤Ê
- ´öʬ¹âÅ٤ʻöÊÁ¤Ë¤Ä¤¤¤Æ½Ò¤Ù¤Æ¤¤¤Þ¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">SSI ¤È¤Ï ?</a></h2>
-
- <p>SSI (Server Side Includes) ¤Ï¡¢HTML
- ¥Ú¡¼¥¸Ãæ¤ËÇÛÃÖ¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¢¤ê¡¢
- ¥µ¡¼¥Ð¤Ç¥Ú¡¼¥¸¤òÄ󶡤¹¤ë»þ¤Ëɾ²Á¤µ¤ì¤Þ¤¹¡£SSI ¤Ï¡¢CGI
- ¥×¥í¥°¥é¥à¤ä¤½¤Î¾¤ÎưŪ¤Êµ»½Ñ¤ÇÁ´¤Æ¤Î¥Ú¡¼¥¸¤òÄ󶡤»¤º¤Ë¡¢
- ưŪ¤ËÀ¸À®¤µ¤ì¤¿¥³¥ó¥Æ¥ó¥Ä¤ò¸½ºß¤Î HTML ¥Ú¡¼¥¸¤Ë²Ã¤¨¤Þ¤¹¡£</p>
-
- <p>¤É¤¦¤¤¤¦¾ì¹ç¤Ë SSI ¤ò»È¤¤¡¢¤É¤¦¤¤¤¦¾ì¹ç¤Ë¥×¥í¥°¥é¥à¤Ç
- ¥Ú¡¼¥¸¤ò´°Á´¤ËÀ¸À®¤¹¤ë¤«¤Ï¡¢¥Ú¡¼¥¸¤Î¤¦¤Á¤É¤ÎÄøÅÙ¤¬ÀÅŪ¤Ç¤¢¤ê¡¢
- ¥Ú¡¼¥¸¤¬Ä󶡤µ¤ì¤ë¤¿¤Ó¤ËºÆ·×»»¤¹¤ëɬÍפ¬¤É¤ÎÄøÅÙ¤¢¤ë¤«¤ÇÄ̾ï¤Ï·èÄꤷ¤Þ¤¹¡£
- SSI ¤Ï¸½ºß»þ¹ï¤Î¤è¤¦¤Ê¾®¤µ¤¤¾ðÊó¤ò²Ã¤¨¤ë¤Ë¤Ï¤¦¤Ã¤Æ¤Ä¤±¤ÎÊýË¡¤Ç¤¹¡£
- ¤·¤«¤·¡¢¤½¤Î¥Ú¡¼¥¸¤Î¤Û¤È¤ó¤É¤ÎÉôʬ¤¬Ä󶡻þ¤ËÀ¸À®¤µ¤ì¤ë¾ì¹ç¤Ï¡¢
- ¾¤ÎÊýË¡¤òõ¤¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">SSI ¤òµö²Ä¤¹¤ë¤¿¤á¤Î¥µ¡¼¥Ð¤ÎÀßÄê</a></h2>
-
-
- <p>¥µ¡¼¥Ð¤Ç SSI ¤òµö²Ä¤¹¤ë¤Ë¤Ï¡¢<code>httpd.conf</code>
- ¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ë¼¡¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹:</p>
-<div class="example"><p><code>
- Options +Includes
-</code></p></div>
-
- <p>¤³¤Î»ØÄê¤Ï¡¢¥Õ¥¡¥¤¥ë¤ò SSI
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç²òÀϤµ¤»¤ë¤³¤È¤òµö²Ä¤¹¤ë¤È¤¤¤¦¤³¤È¤ò Apache
- ¤ËÅÁ¤¨¤Þ¤¹¡£¤Û¤È¤ó¤É¤ÎÀßÄê¤Ç¤Ï¤ª¸ß¤¤¤ò¾å½ñ¤­¤Ç¤­¤ë¡¢Ê£¿ô¤Î
- <code class="directive"><a href="../mod/core.html#options">Options</a></code> ¤¬¤¢¤ë¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤ª¤½¤é¤¯¡¢ÀßÄ꤬ºÇ¸å¤Ëɾ²Á¤µ¤ì¤ë¤³¤È¤ò
- Êݾڤµ¤ì¤ë¤¿¤á¤Ë¡¢SSI ¤ò»ÈÍѤ·¤¿¤¤¥Ç¥£¥ì¥¯¥È¥ê¤Ë <code>Options</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òŬÍѤ¹¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>Á´¤Æ¤Î¥Õ¥¡¥¤¥ë¤¬ SSI
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç²òÀϤµ¤ì¤ë¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤É¤Î¥Õ¥¡¥¤¥ë¤¬²òÀϤµ¤ì¤ë¤«¤ò Apache ¤ËÅÁ¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤ò¹Ô¤Ê¤¦¤Ë¤ÏÆó¤ÄÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£
- ¼¡¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤³¤È¤Ç¡¢Î㤨¤Ð <code>.shtml</code>
- ¤Î¤è¤¦¤ÊÆÃÊ̤ʥե¡¥¤¥ë³ÈÄ¥»Ò¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤ò²òÀϤ¹¤ë¤è¤¦
- Apache ¤ËÅÁ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-<div class="example"><p><code>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</code></p></div>
-
- <p>¤³¤ÎÊýË¡¤Î·çÅÀ¤Ï¡¢¤â¤·¸½ºß¤Î¥Ú¡¼¥¸¤Ë SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò²Ã¤¨¤¿¤¤¾ì¹ç¡¢
- ¤½¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë
- <code>.shtml</code> ³ÈÄ¥»Ò¤Ë¤¹¤ë¤¿¤á¡¢¤½¤Î¥Ú¡¼¥¸¤Î̾Á°¤È¡¢
- ¤½¤Î¥Ú¡¼¥¸¤Ø¤ÎÁ´¤Æ¤Î¥ê¥ó¥¯¤òÊѹ¹¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤Ç¤¹¡£</p>
-
- <p>¤â¤¦°ì¤Ä¤ÎÊýË¡¤Ï¡¢<code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¤¹:</p>
-<div class="example"><p><code>
- XBitHack on
-</code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
- ¤Ï¡¢¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô¥Ó¥Ã¥È¤¬Î©¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢
- SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê²òÀϤ¹¤ë¤³¤È¤ò Apache ¤ËÅÁ¤¨¤Þ¤¹¡£
- ½¾¤Ã¤Æ¡¢SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¸½ºß¤Î¥Ú¡¼¥¸¤Ë²Ã¤¨¤ë¤¿¤á¤Ë¤Ï¡¢
- ¥Õ¥¡¥¤¥ë̾¤òÊѹ¹¤·¤Ê¤¯¤Æ¤â¤è¤¯¡¢Ã±¤Ë <code>chmod</code>
- ¤ò»ÈÍѤ·¤Æ¥Õ¥¡¥¤¥ë¤ò¼Â¹Ô²Äǽ¤Ë¤¹¤ë¤À¤±¤ÇºÑ¤ß¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- chmod +x pagename.html
-</code></p></div>
-
- <p>¹Ô¤Ê¤¦¤Ù¤­¤Ç¤Ï¤Ê¤¤¤³¤È¤Ë´Ø¤¹¤ëû¤¤¥³¥á¥ó¥È¡£»þ¡¹Ã¯¤«¤¬¡¢Á´¤Æ¤Î
- <code>.html</code> ¥Õ¥¡¥¤¥ë¤ò SSI ¤Ç²òÀϤ¹¤ë¤è¤¦ Apache ¤ËÅÁ¤¨¤ì¤Ð¡¢
- ¤ï¤¶¤ï¤¶ <code>.shtml</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë̾¤Ë¤¹¤ëɬÍפ¬¤Ê¤¤¤È¤¤¤Ã¤Æ
- Á¦¤á¤ë¤Î¤ò¸«¤ë¤³¤È¤Ç¤·¤ç¤¦¡£¤³¤¦¤¤¤¦¿Í¤¿¤Á¤Ï¡¢¤ª¤½¤é¤¯
- <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
- ¤Ë¤Ä¤¤¤Æʹ¤¤¤¿¤³¤È¤¬¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¡£
- ¤³¤ÎÊýË¡¤Ë¤Ä¤¤¤ÆÃí°Õ¤¹¤ë¤³¤È¤Ï¡¢¤¿¤È¤¨ SSI
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÁ´¤¯´Þ¤Þ¤Ê¤¤¾ì¹ç¤Ç¤â¡¢Apache ¤¬¥¯¥é¥¤¥¢¥ó¥È¤Ë
- Á÷¤ëÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤òºÇ¸å¤Þ¤ÇÆɤ߹þ¤Þ¤»¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ÎÊýË¡¤Ï¤«¤Ê¤ê½èÍý¤òÃÙ¤¯¤¹¤ë¤â¤Î¤Ç¤¢¤ê¡¢Îɤ¯¤Ê¤¤¥¢¥¤¥Ç¥¢¤Ç¤¹¡£</p>
-
- <p>¤â¤Á¤í¤ó¡¢Windows ¤Ç¤Ï¤½¤Î¤è¤¦¤Ê¼Â¹Ô¥Ó¥Ã¥È¤ò¥»¥Ã¥È
- ¤¹¤ë¤è¤¦¤Ê¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¥ª¥×¥·¥ç¥ó¤¬¾¯¤·À©¸Â¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¤Ç¤Ï¡¢Apache ¤Ï SSI ¥Ú¡¼¥¸¤Ë¤Ä¤¤¤ÆºÇ½ªÊѹ¹»þ¹ï¤ä
- ¥³¥ó¥Æ¥ó¥Ä¤ÎŤµ¤ò HTTP ¥Ø¥Ã¥À¤ËÁ÷¤ê¤Þ¤»¤ó¡£
- ưŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤Ç¤¢¤ë¤¿¤á¡¢¤½¤ì¤é¤ÎÃͤò·×»»¤¹¤ë¤Î¤¬Æñ¤·¤¤¤«¤é¤Ç¤¹¡£
- ¤³¤Î¤¿¤á¥É¥­¥å¥á¥ó¥È¤¬¥­¥ã¥Ã¥·¥å¤µ¤ì¤Ê¤¯¤Ê¤ê¡¢
- ·ë²Ì¤È¤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤ÎÀ­Ç½¤¬ÃÙ¤¯¤Ê¤Ã¤¿¤è¤¦¤Ë´¶¤¸¤µ¤»¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤ò²ò·è¤¹¤ëÊýË¡¤¬Æó¤Ä¤¢¤ê¤Þ¤¹:</p>
-
- <ol>
- <li><code>XBitHack Full</code> ÀßÄê¤ò»ÈÍѤ¹¤ë¡£
- ¤³¤ÎÀßÄê¤Ë¤è¤ê¡¢¤â¤È¤â¤ÈÍ׵ᤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î»þ¹ï¤ò»²¾È¤·¡¢
- Æɤ߹þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¤ÎÊѹ¹»þ¹ï¤ò̵»ë¤·¤ÆºÇ½ªÊѹ¹»þ¹ï¤ò·èÄꤹ¤ë¤è¤¦
- Apache ¤ËÅÁ¤¨¤Þ¤¹¡£</li>
-
- <li><a href="../mod/mod_expires.html">mod_expires</a>
- ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¡¢
- ¥Õ¥¡¥¤¥ë¤¬Ìµ¸ú¤Ë¤Ê¤ë»þ¹ï¤òÌÀ¼¨¤·¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢
- ¥Ö¥é¥¦¥¶¤È¥×¥í¥­¥·¤Ë¥­¥ã¥Ã¥·¥å¤¬Í­¸ú¤Ç¤¢¤ë¤³¤È¤òÄÌÃΤ·¤Þ¤¹¡£</li>
- </ol>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basic" id="basic">´ðËÜŪ¤Ê SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-
- <p>SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï°Ê²¼¤Îʸˡ¤Çµ­½Ò¤·¤Þ¤¹:</p>
-<div class="example"><p><code>
- &lt;!--#element attribute=value attribute=value ... --&gt;
-</code></p></div>
-
- <p>HTML ¤Î¥³¥á¥ó¥È¤Î¤è¤¦¤Ê½ñ¼°¤ò¤·¤Æ¤¤¤ë¤Î¤Ç¡¢¤â¤· SSI
- ¤òÀµ¤·¤¯Æ°ºî²Äǽ¤Ë¤·¤Ê¤±¤ì¤Ð¡¢¥Ö¥é¥¦¥¶¤Ï¤½¤ì¤ò̵»ë¤¹¤ë¤Ç¤·¤ç¤¦¡£
- ¤·¤«¤·¡¢HTML ¥½¡¼¥¹Ãæ¤Ç¤Ï¸«¤¨¤Þ¤¹¡£¤â¤· SSI ¤òÀµ¤·¤¯ÀßÄꤷ¤¿¤Ê¤é¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤Î·ë²Ì¤ÈÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£</p>
-
- <p>element ¤Ï¤¿¤¯¤µ¤ó¤¢¤ë¤â¤Î¤«¤é°ì¤Ä»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- »ØÄê¤Ç¤­¤ë¤â¤Î¤ÎÂç¿¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¼¡²ó¤â¤¦¾¯¤·¾Ü¤·¤¯ÀâÌÀ¤·¤Þ¤¹¡£
- ¤³¤³¤Ç¤Ï¡¢SSI ¤Ç¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤ëÎã¤ò¤¤¤¯¤Ä¤«¼¨¤·¤Þ¤¹¡£</p>
-
-<h3><a name="todaysdate" id="todaysdate">º£Æü¤ÎÆüÉÕ</a></h3>
-
-<div class="example"><p><code>
- &lt;!--#echo var="DATE_LOCAL" --&gt;
-</code></p></div>
-
- <p><code>echo</code> Í×ÁǤÏñ¤ËÊÑ¿ô¤ÎÃͤò½ÐÎϤ·¤Þ¤¹¡£
- CGI ¥×¥í¥°¥é¥à¤ËÍøÍѲÄǽ¤Ê´Ä¶­ÊÑ¿ô¤ÎÁ´¤Æ¤Î
- ¥»¥Ã¥È¤ò´Þ¤à¿¤¯¤Îɸ½àÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢<code>set</code>
- Í×ÁǤòÍѤ¤¤ë¤³¤È¤Ç¡¢Æȼ«¤ÎÊÑ¿ô¤òÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- </p>
-
- <p>½ÐÎϤµ¤ì¤ëÆüÉդνñ¼°¤¬¹¥¤­¤Ç¤Ï¤Ê¤¤¾ì¹ç¡¢¤½¤Î½ñ¼°¤ò½¤Àµ¤¹¤ë¤¿¤á¤Ë¡¢
- <code>config</code> Í×ÁÇ¤Ë <code>timefmt</code>
- °À­¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</code></p></div>
-
-
-<h3><a name="lastmodified" id="lastmodified">¥Õ¥¡¥¤¥ë¤ÎÊѹ¹Æü</a></h3>
-
-<div class="example"><p><code>
- This document last modified &lt;!--#flastmod file="index.html" --&gt;
-</code></p></div>
-
- <p>¤³¤ÎÍ×ÁǤâ <code>timefmt</code>
- ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÀßÄê¤Ë½¾¤¤¤Þ¤¹¡£</p>
-
-
-<h3><a name="cgi" id="cgi">CGI ¥×¥í¥°¥é¥à¤Î·ë²Ì¤ò¼è¤ê¹þ¤à</a></h3>
-
- <p>¤³¤ì¤Ï¡¢Á´¤Æ¤Î¿Í¤Î¤ªµ¤¤ËÆþ¤ê¤Ç¤¢¤ë ``¥Ò¥Ã¥È¥«¥¦¥ó¥¿'' ¤Î¤è¤¦¤Ê
- CGI ¥×¥í¥°¥é¥à¤Î·ë²Ì¤ò½ÐÎϤ¹¤ë SSI
- ¤Î¤è¤ê°ìÈÌŪ¤Ê»ÈÍѤΤ¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£</p>
-
-<div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</code></p></div>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="additionalexamples" id="additionalexamples">ÄɲäÎÎã</a></h2>
-
-
- <p>°Ê²¼¤Ï¡¢SSI ¤ò»ÈÍѤ·¤Æ HTML
- ¥É¥­¥å¥á¥ó¥È¤Ë¤ª¤¤¤Æ¤Ç¤­¤ë¤³¤È¤Î¤¤¤¯¤Ä¤«¤ÎÆÃÊ̤ÊÎã¤Ç¤¹¡£</p>
-
-<h3><a name="docmodified" id="docmodified">¤¤¤Ä¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ï½¤Àµ¤µ¤ì¤¿¤Î¤«
-?</a></h3>
-
- <p>Àè¤Ë¡¢¥É¥­¥å¥á¥ó¥È¤¬ºÇ¸å¤ËÊѹ¹¤µ¤ì¤¿¤Î¤Ï¤¤¤Ä¤«¤ò
- ¥æ¡¼¥¶¤ËÄÌÃΤ¹¤ë¤¿¤á¤Ë SSI ¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤ò½Ò¤Ù¤Þ¤·¤¿¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢¼ÂºÝ¤ÎÊýË¡¤Ï¡¢¤¤¤¯¤Ö¤óÌäÂê¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤­¤Þ¤·¤¿¡£
- HTML ¥É¥­¥å¥á¥ó¥È¤ËÇÛÃÖ¤µ¤ì¤¿¼¡¤Î¥³¡¼¥É¤Ï¡¢¥Ú¡¼¥¸¤Ë¤½¤Î¤è¤¦¤Ê
- ¥¿¥¤¥à¥¹¥¿¥ó¥×¤òÆþ¤ì¤ë¤Ç¤·¤ç¤¦¡£¤â¤Á¤í¤ó¡¢¾å½Ò¤Î¤è¤¦¤Ë¡¢
- SSI ¤òÀµ¤·¤¯Æ°ºî²Äǽ¤Ë¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
-</code></p></div>
-
- <p>¤â¤Á¤í¤ó¡¢<code>ssi.shtml</code>
- ¤ÎÉôʬ¤ò¼ÂºÝ¤ÎÅö³º¥Õ¥¡¥¤¥ë̾¤ÈÃÖ¤­´¹¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤â¤·¡¢¤¢¤é¤æ¤ë¥Õ¥¡¥¤¥ë¤ËÄ¥¤ë¤³¤È¤¬¤Ç¤­¤ë°ìÈÌŪ¤Ê¥³¡¼¥É¤òõ¤·¤Æ¤¤¤ë¤Ê¤é¡¢
- ¤³¤ì¤ÏÉÔÊؤǤ¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤ª¤½¤é¤¯¤½¤Î¾ì¹ç¤Ï¡¢
- ¤½¤¦¤¹¤ëÂå¤ï¤ê¤ËÊÑ¿ô <code>LAST_MODIFIED</code>
- ¤ò»ÈÍѤ·¤¿¤¤¤È¹Í¤¨¤ë¤Ç¤·¤ç¤¦:</p>
-<div class="example"><p><code>
- &lt;!--#config timefmt="%D" --&gt;<br />
- This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</code></p></div>
-
- <p><code>timefmt</code>
- ½ñ¼°¤Ë¤Ä¤¤¤Æ¤Î¤è¤ê¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤ª¹¥¤ß¤Î¸¡º÷¥µ¥¤¥È¤Ë¹Ô¤­¡¢
- <code>strftime</code> ¤Ç¸¡º÷¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£Ê¸Ë¡¤ÏƱ¤¸¤Ç¤¹¡£</p>
-
-
-<h3><a name="standard-footer" id="standard-footer">ɸ½à¤Î¥Õ¥Ã¥¿¤òÁÞÆþ¤¹¤ë</a></h3>
-
-
- <p>¤â¤·¿ô¥Ú¡¼¥¸¤òĶ¤¨¤ë¥Ú¡¼¥¸¤ò»ý¤Ä¥µ¥¤¥È¤ò´ÉÍý¤·¤Æ¤¤¤ë¤Ê¤é¤Ð¡¢
- Á´¥Ú¡¼¥¸¤ËÂФ·¤ÆÊѹà¤ò¹Ô¤Ê¤¦¤³¤È¤¬ËÜÅö¤Ë¶ìÄˤȤʤêÆÀ¤ë¤³¤È¤¬
- ʬ¤«¤ë¤Ç¤·¤ç¤¦¡£Á´¤Æ¤Î¥Ú¡¼¥¸¤ËÅϤäƤ¢¤ë¼ï¤Îɸ½àŪ¤Ê³°´Ñ¤ò
- °Ý»ý¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤Ê¤é¤ÐÆäˤ½¤¦¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¥Ø¥Ã¥À¤ä¥Õ¥Ã¥¿ÍѤÎÁÞÆþÍÑ¥Õ¥¡¥¤¥ë¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢
- ¤³¤Î¤è¤¦¤Ê¹¹¿·¤Ë¤«¤«¤ëÉéô¤ò¸º¤é¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- °ì¤Ä¤Î¥Õ¥Ã¥¿¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¡¢¤½¤ì¤ò <code>include</code>
- SSI ¥³¥Þ¥ó¥É¤Ç³Æ¥Ú¡¼¥¸¤ËÆþ¤ì¤ë¤À¤±¤ÇºÑ¤ß¤Þ¤¹¡£<code>include</code>
- Í×ÁǤϡ¢<code>file</code> °À­¤Þ¤¿¤Ï <code>virtual</code>
- °À­¤Î¤¤¤º¤ì¤«¤ò»ÈÍѤ·¤Æ¤É¤Î¥Õ¥¡¥¤¥ë¤òÁÞÆþ¤¹¤ë¤«¤ò·è¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code>file</code> °À­¤Ï¡¢<em>¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤ÎÁêÂХѥ¹¤Ç¼¨¤µ¤ì¤¿
- </em>¥Õ¥¡¥¤¥ë¥Ñ¥¹¤Ç¤¹¡£
- ¤½¤ì¤Ï / ¤Ç»Ï¤Þ¤ëÀäÂÐ¥Õ¥¡¥¤¥ë¥Ñ¥¹¤Ë¤Ï¤Ç¤­¤º¡¢¤Þ¤¿¡¢¤½¤Î¥Ñ¥¹¤Î°ìÉô¤Ë ../
- ¤ò´Þ¤à¤³¤È¤¬¤Ç¤­¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£<code>virtual</code>
- °À­¤Ï¡¢¤ª¤½¤é¤¯¤è¤êÊØÍø¤À¤È»×¤¤¤Þ¤¹¤¬¡¢Ä󶡤¹¤ë¥É¥­¥å¥á¥ó¥È¤«¤é¤ÎÁêÂÐ
- URL ¤Ç»ØÄꤹ¤Ù¤­¤Ç¤¹¡£¤½¤ì¤Ï / ¤Ç»Ï¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢
- Ä󶡤¹¤ë¥Õ¥¡¥¤¥ë¤ÈƱ¤¸¥µ¡¼¥Ð¾å¤Ë¸ºß¤·¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£</p>
-<div class="example"><p><code>
- &lt;!--#include virtual="/footer.html" --&gt;
-</code></p></div>
-
- <p>»ä¤ÏºÇ¸å¤ÎÆó¤Ä¤òÁȤ߹ç¤ï¤»¤Æ¡¢<code>LAST_MODIFIED</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥Õ¥Ã¥¿¥Õ¥¡¥¤¥ë¤ÎÃæ¤ËÃÖ¤¯¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£
- SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢ÁÞÆþÍѤΥե¡¥¤¥ë¤Ë´Þ¤Þ¤»¤¿¤ê¡¢
- ÁÞÆþ¥Õ¥¡¥¤¥ë¤Î¥Í¥¹¥È¤ò¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¹¤Ê¤ï¤Á¡¢
- ÁÞÆþÍѤΥե¡¥¤¥ë¤Ï¾¤Î¥Õ¥¡¥¤¥ë¤òºÆµ¢Åª¤ËÁÞÆþ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="config" id="config">¾¤Ë²¿¤¬ÀßÄê¤Ç¤­¤ë¤Î¤« ?</a></h2>
-
-
- <p>»þ¹ï½ñ¼°¤ò <code>config</code> ¤ÇÀßÄê¤Ç¤­¤ë¤³¤È¤Ë²Ã¤¨¤Æ¡¢
- ¹¹¤ËÆó¤Ä <code>config</code> ¤ÇÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Ä̾SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç²¿¤«¤¬¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¤È¤­¤Ï¡¢
- ¼¡¤Î¥á¥Ã¥»¡¼¥¸¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- [an error occurred while processing this directive]
-</code></p></div>
-
- <p>¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò¾¤Î¤â¤Î¤Ë¤·¤¿¤¤¾ì¹ç¡¢<code>config</code>
- Í×ÁǤΠ<code>errmsg</code> °À­¤ÇÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-<div class="example"><p><code>
- &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</code></p></div>
-
- <p>¤ª¤½¤é¤¯¡¢¥¨¥ó¥É¥æ¡¼¥¶¤Ï¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò·è¤·¤Æ¸«¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤Ê¤¼¤Ê¤é¡¢¤½¤Î¥µ¥¤¥È¤¬À¸¤­¤¿¾õÂ֤ˤʤëÁ°¤Ë SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë´Ø¤¹¤ë
- Á´¤Æ¤ÎÌäÂê¤ò²ò·è¤·¤Æ¤¤¤ë¤Ï¤º¤À¤«¤é¤Ç¤¹¡£(¤½¤¦¤Ç¤¹¤è¤Í?)</p>
-
- <p>¤½¤·¤Æ¡¢<code>config</code> ¤Ë¤ª¤¤¤Æ <code>sizefmt</code>
- °À­¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢
- ÊÖ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤Î½ñ¼°¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥Ð¥¤¥È¿ô¤Ë¤Ï <code>bytes</code> ¤ò¡¢Å¬Åö¤Ë Kb ¤ä Mb
- ¤Ëû½Ì¤µ¤»¤ë¤Ë¤Ï <code>abbrev</code> ¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exec" id="exec">¥³¥Þ¥ó¥É¤Î¼Â¹Ô</a></h2>
-
-
- <p>º£¸å¿ô¥ö·î¤Î¤¦¤Á¤Ë¡¢¾®¤µ¤Ê CGI ¥×¥í¥°¥é¥à¤È SSI
- ¤ò»ÈÍѤ¹¤ëµ­»ö¤ò½Ð¤·¤¿¤¤¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¤½¤ì¤È¤ÏÊ̤ˡ¢
- <code>exec</code> Í×ÁǤˤè¤Ã¤Æ¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- SSI ¤Ë¥·¥§¥ë (Àµ³Î¤Ë¤Ï <code>/bin/sh</code>¡£Win32 ¤Ê¤é¤Ð DOS ¥·¥§¥ë)
- ¤ò»ÈÍѤ·¤Æ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ²¼µ­¤ÎÎã¤Ç¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È½ÐÎϤò¹Ô¤Ê¤¤¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="ls" --&gt;<br />
- &lt;/pre&gt;
-</code></p></div>
-
- <p>Windows ¾å¤Ç¤Ï¡¢</p>
-<div class="example"><p><code>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="dir" --&gt;<br />
- &lt;/pre&gt;
-</code></p></div>
-
- <p>Windows ¾å¤Ç¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤Æ¤¤¤¯¤Ä¤«¤Î´ñ̯¤Ê
- ½ñ¼°¤Ëµ¤¤Å¤¯¤Ç¤·¤ç¤¦¡£¤Ê¤¼¤Ê¤é <code>dir</code> ¤Î½ÐÎϤ¬Ê¸»úÎó
- ``&lt;<code>dir</code>&gt;'' ¤ò´Þ¤ß¡¢¥Ö¥é¥¦¥¶¤òº®Í𤵤»¤ë¤«¤é¤Ç¤¹¡£</p>
-
- <p>¤³¤Îµ¡Ç½¤ÏÈó¾ï¤Ë´í¸±¤Ç¤¢¤ê¡¢¤É¤ó¤Ê¥³¡¼¥É¤Ç¤â <code>exec</code>
- ¥¿¥°¤ËËä¤á¹þ¤Þ¤ì¤Æ¤·¤Þ¤¨¤Ð¼Â¹Ô¤¹¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£Î㤨¤Ð
- `` ¥²¥¹¥È¥Ö¥Ã¥¯ '' ¤Î¤è¤¦¤Ë¡¢¤â¤·¡¢
- ¥æ¡¼¥¶¤¬¥Ú¡¼¥¸¤ÎÆâÍƤòÊÔ½¸¤Ç¤­¤ë¾õ¶·¤Ë¤¢¤ë¤Ê¤é¤Ð¡¢
- ¤³¤Îµ¡Ç½¤ò³Î¼Â¤ËÍÞÀ©¤·¤Æ¤¯¤À¤µ¤¤¡£<code>Options</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î <code>IncludesNOEXEC</code> °ú¿ô¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢
- SSI ¤Ïµö²Ä¤¹¤ë¤±¤ì¤É <code>exec</code>
- µ¡Ç½¤Ïµö²Ä¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advanced" id="advanced">¹âÅÙ¤Ê SSI ¥Æ¥¯¥Ë¥Ã¥¯</a></h2>
-
-
- <p>¥³¥ó¥Æ¥ó¥Ä¤ò½ÐÎϤ¹¤ë¤³¤È¤Ë²Ã¤¨¡¢Apache SSI ¤ÏÊÑ¿ô¤òÀßÄꤷ¡¢
- ¤½¤·¤ÆÈæ³Ó¤È¾ò·ïʬ´ô¤Ë¤½¤ÎÊÑ¿ô¤ò»ÈÍѤǤ­¤ëµ¡Ç½¤òÄ󶡤·¤Æ¤¤¤Þ¤¹¡£
- </p>
-
-<h3><a name="caveat" id="caveat">·Ù¹ð</a></h3>
-
- <p>¤³¤Îµ­»ö¤Ç½Ò¤Ù¤¿ÂçÉôʬ¤Îµ¡Ç½¤Ï¡¢Apache 1.2
- °Ê¹ß¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ßÍøÍѲÄǽ¤Ç¤¹¡£¤â¤Á¤í¤ó¡¢¤â¤· Apache 1.2
- °Ê¹ß¤ò»ÈÍѤ·¤Æ¤Ê¤¤¾ì¹ç¡¢Ä¾¤Á¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤µ¤¡¡¢º£¤½¤ì¤ò¹Ô¤Ê¤¤¤Ê¤µ¤¤¡£¤½¤ì¤Þ¤ÇÂԤäƤ¤¤Þ¤¹¡£</p>
-
-
-<h3><a name="variables" id="variables">ÊÑ¿ô¤òÀßÄꤹ¤ë</a></h3>
-
- <p><code>set</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¡¢
- ¸å¤Ç»ÈÍѤ¹¤ë¤¿¤á¤ËÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï¸å¤ÎÀâÌÀ¤ÇɬÍפˤʤë¤Î¤Ç¡¢¤³¤³¤Ç¤½¤ì¤Ë¤Ä¤¤¤Æ½Ò¤Ù¤Æ¤¤¤Þ¤¹¡£
- ʸˡ¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹:</p>
-<div class="example"><p><code>
- &lt;!--#set var="name" value="Rich" --&gt;
-</code></p></div>
-
- <p>¤³¤Î¤è¤¦¤Ëñ½ã¤Ëʸ»ú¤É¤ª¤ê¤ËÀßÄꤹ¤ë¤³¤È¤Ë²Ã¤¨¡¢
- <a href="../env.html">´Ä¶­ÊÑ¿ô</a>¤ä¾åµ­¤ÎÊÑ¿ô
- (Î㤨¤Ð <code>LAST_MODIFIED</code> ¤Î¤è¤¦¤Ê)
- ¤ò´Þ¤à¾¤Î¤¢¤é¤æ¤ëÊÑ¿ô¤òÃͤòÀßÄꤹ¤ë¤Î¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ÊÑ¿ô̾¤ÎÁ°¤Ë¥É¥ëµ­¹æ ($) ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢
- ¤½¤ì¤¬¥ê¥Æ¥é¥ëʸ»úÎó¤Ç¤Ï¤Ê¤¯¤ÆÊÑ¿ô¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
-</code></p></div>
-
- <p>¥É¥ëµ­¹æ ($) ¤òʸ»ú¤È¤·¤ÆÊÑ¿ô¤ÎÃͤËÆþ¤ì¤ë¤Ë¤Ï¡¢
- ¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ë¤è¤Ã¤Æ¥É¥ëµ­¹æ¤ò¥¨¥¹¥±¡¼¥×¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- &lt;!--#set var="cost" value="\$100" --&gt;
-</code></p></div>
-
- <p>ºÇ¸å¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢Ä¹¤¤Ê¸»úÎó¤ÎÃæ¤ËÊÑ¿ô¤òÃÖ¤­¤¿¤¤¾ì¹ç¤Ç¡¢
- ÊÑ¿ô̾¤¬Â¾¤Îʸ»ú¤È¤Ö¤Ä¤«¤ë²ÄǽÀ­¤¬¤¢¤ê¡¢
- ¤½¤ì¤é¤Îʸ»ú¤Ë¤Ä¤¤¤Æº®Í𤷤Ƥ·¤Þ¤¦¾ì¹ç¡¢¤³¤Îº®Íð¤ò¼è¤ê½ü¤¯¤¿¤á¡¢
- ÊÑ¿ô̾¤òÃæ³ç¸Ì¤Ç°Ï¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹
- (¤³¤ì¤Ë¤Ä¤¤¤Æ¤ÎÎɤ¤Îã¤ò¼¨¤¹¤Î¤ÏÆñ¤·¤¤¤Î¤Ç¤¹¤¬¡¢
- ¤ª¤½¤é¤¯Ê¬¤«¤Ã¤Æ¤¤¤¿¤À¤±¤ë¤Ç¤·¤ç¤¦)¡£
- </p>
-<div class="example"><p><code>
- &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</code></p></div>
-
-
-<h3><a name="conditional" id="conditional">¾ò·ï¼°</a></h3>
-
-
- <p>¤µ¤Æ¡¢ÊÑ¿ô¤ò»ý¤Ã¤Æ¤¤¤Æ¡¢
- ¤½¤ì¤é¤ÎÃͤòÀßÄꤷ¤ÆÈæ³Ó¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¤¹¤«¤é¡¢
- ¾ò·ï¤òɽ¤¹¤¿¤á¤Ë¤½¤ì¤é¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê
- SSI ¤Ï¤¢¤ë¼ï¤Î¾®¤µ¤Ê¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤Ï¾ò·ï¤òɽ¸½¤¹¤ë¤¿¤á¤Ë <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code>
- ¹½Â¤¤òÄ󶡤·¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ë¤è¤Ã¤Æ¡¢
- °ì¤Ä¤Î¼ÂºÝ¤Î¥Ú¡¼¥¸¤«¤éÊ£¿ô¤ÎÏÀÍý¥Ú¡¼¥¸¤ò¸ú²ÌŪ¤ËÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¾ò·ï¹½Â¤¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹:</p>
-<div class="example"><p><code>
- &lt;!--#if expr="test_condition" --&gt;<br />
- &lt;!--#elif expr="test_condition" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
-</code></p></div>
-
- <p><em>test_condition</em>
- ¤Ï¤¢¤é¤æ¤ë¼ïÎà¤ÎÏÀÍýŪÈæ³Ó¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ÃͤòÈæ³Ó¤·¤¿¤ê¡¢¤½¤ÎÃͤ¬ ``¿¿'' ¤«¤É¤¦¤«¤òɾ²Á¤·¤Þ¤¹
- (¶õ¤Ç¤Ê¤¤¤Ê¤éÍ¿¤¨¤é¤ì¤¿Ê¸»úÎó¤Ï¿¿¤Ç¤¹)¡£
- ÍøÍѲÄǽ¤ÊÈæ³Ó±é»»»Ò¤ÎÁ´¤Æ¤Î¥ê¥¹¥È¤Ë¤Ä¤¤¤Æ¤Ï¡¢
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤³¤Ç¤Ï¡¢¤³¤Î¹½Â¤¤ò¤É¤¦»ÈÍѤ¹¤ë¤«¤ÎÎã¤ò¤¤¤¯¤Ä¤«¼¨¤·¤Þ¤¹¡£</p>
-
- <p>ÀßÄê¥Õ¥¡¥¤¥ë¤Ç¼¡¤Î¹Ô¤òµ­½Ò¤·¤Þ¤¹:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</code></p></div>
-
- <p>¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤¬ Macintosh
- ¾å¤Ç¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥¨¥¯¥¹¥×¥í¡¼¥é¤¬Æ°¤¤¤Æ¤¤¤ë¾ì¹ç¡¢´Ä¶­ÊÑ¿ô
- ``Mac'' ¤È ``InternetExplorer'' ¤ò¿¿¤ÈÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p>¼¡¤Ë¡¢SSI ¤¬²Äǽ¤Ë¤Ê¤Ã¤¿¥É¥­¥å¥á¥ó¥È¤Ç°Ê²¼¤ò¹Ô¤Ê¤¤¤Þ¤¹:
- </p>
-<div class="example"><p><code>
- &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
- Apologetic text goes here<br />
- &lt;!--#else --&gt;<br />
- Cool JavaScript code goes here<br />
- &lt;!--#endif --&gt;
-</code></p></div>
-
- <p>Mac ¾å¤Î IE ¤ËÂФ·¤Æ²¿¤«»×¤¦¤È¤³¤í¤¬¤¢¤ë¤ï¤±¤Ç¤¢¤ê¤Þ¤»¤ó¡£
- ¾¤Ç¤Ï¼Â¹Ô¤Ç¤­¤Æ¤¤¤ë¤¤¤¯¤Ä¤«¤Î JavaScript ¤ò Mac ¾å¤Î IE
- ¤Ç¼Â¹Ô¤µ¤»¤ë¤Î¤Ë¡¢Àè½µ¿ô»þ´Ö¶ìÏ«¤·¤¿¤È¤¤¤¦¤À¤±¤Î¤³¤È¤Ç¤¹¡£
- ¾å¤ÎÎã¤Ï¤½¤Î»ÃÄêŪ¤ÊÂнèÊýË¡¤Ç¤¹¡£</p>
-
- <p>¾¤Î¤É¤ó¤ÊÊÑ¿ô (¤¢¤Ê¤¿¤¬ÄêµÁ¤¹¤ë¤â¤Î¡¢
- ¤Þ¤¿¤ÏÉáÄ̤δĶ­ÊÑ¿ô¤Î¤¤¤º¤ì¤«) ¤â¡¢¾ò·ïʸ¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Apache ¤Ï <code>SetEnvIf</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä¾¤Î´ØÏ¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Îµ¡Ç½¤Ë¤è¤ê¡¢CGI
- ¤ËÍê¤ë¤³¤È¤Ê¤¯¤«¤Ê¤êÊ£»¨¤ÊưŪ¤Ê¤³¤È¤ò¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="conclusion" id="conclusion">½ª¤ï¤ê¤Ë</a></h2>
-
- <p>SSI ¤Ï³Î¤«¤Ë CGI
- ¤äưŪ¤Ê¥¦¥§¥Ö¥Ú¡¼¥¸¤òÀ¸À®¤¹¤ë¾¤Îµ»½Ñ¤ËÂå¤ï¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤·¤«¤·¡¢¤¿¤¯¤µ¤ó¤Î;ʬ¤Êºî¶È¤ò¤»¤º¤Ë¡¢
- ¾¯Î̤ÎưŪ¤Ê¥³¥ó¥Æ¥ó¥Ä¤ò²Ã¤¨¤ë¤Ë¤Ï¤¹¤°¤ì¤¿ÊýË¡¤Ç¤¹¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/ssi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/ssi.html.ko.euc-kr b/docs/manual/howto/ssi.html.ko.euc-kr
deleted file mode 100644
index 201cd10084..0000000000
--- a/docs/manual/howto/ssi.html.ko.euc-kr
+++ /dev/null
@@ -1,426 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: Server Side Includes ¼Ò°³ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: Server Side Includes ¼Ò°³</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/ssi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Server-side includes¸¦ »ç¿ëÇÏ¿© HTML ¹®¼­¿¡ µ¿ÀûÀÎ ³»¿ëÀ»
-Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">¼Ò°³</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">SSI°¡ ¹«¾ùÀΰ¡?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">SSI°¡ °¡´ÉÇϵµ·Ï ¼­¹ö ¼³Á¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#basic">±âº» SSI Áö½Ã¾î</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Ãß°¡ ¿¹Á¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#config">ÀÌ¿Ü¿¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â °ÍÀº?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#exec">¸í·É¾î ½ÇÇàÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#advanced">°í±Þ SSI ±â¹ý</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">°á·Ð</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">¼Ò°³</a></h2>
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>
-
- <p>ÀÌ ±ÛÀº º¸Åë SSI¶ó°í ºÎ¸£´Â Server Side Includes¸¦ ¼³¸íÇÑ´Ù.
- SSI°¡ °¡´ÉÇϵµ·Ï ¼­¹ö¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ý°ú HTML ÆäÀÌÁö¿¡ µ¿ÀûÀÎ
- ³»¿ëÀ» Ãß°¡ÇÏ´Â ±âº»ÀûÀÎ SSI »ç¿ë¹ýÀ» ¼Ò°³ÇÑ´Ù.</p>
-
- <p>ÀÌ ±ÛÀÇ µÞºÎºÐÀº SSI Áö½Ã¾î Á¶°Ç¹®°ú °°Àº °í±Þ±â¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">SSI°¡ ¹«¾ùÀΰ¡?</a></h2>
-
- <p>SSI (Server Side Includes)´Â HTML ÆäÀÌÁö¿¡ »ç¿ëÇÏ´Â Áö½Ã¾î·Î,
- ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÒ¶§ ¼­¹ö°¡ ó¸®ÇÑ´Ù. SSI¸¦ »ç¿ëÇϸé CGI
- ÇÁ·Î±×·¥À̳ª ´Ù¸¥ µ¿ÀûÀÎ ±â¼ú·Î ÆäÀÌÁö Àüü¸¦ ¸¸µé¾î¼­
- ¼­ºñ½ºÇÏÁö ¾Ê°íµµ HTML ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î »ý¼ºÇÑ ³»¿ëÀ» Ãß°¡ÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>SSI¸¦ »ç¿ëÇÒÁö ¾Æ´Ï¸é ÇÁ·Î±×·¥À¸·Î ÆäÀÌÁö Àüü¸¦ »ý¼ºÇÒÁö
- °áÁ¤Àº ÆäÀÌÁö¿¡¼­ Á¤ÀûÀÎ ºÎºÐÀÌ ¸¹ÀºÁö¿Í ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÒ
- ¶§¸¶´Ù ¾î´ÀÁ¤µµ¸¦ ´Ù½Ã °è»êÇؾßÇÒÁö¿¡ ´Þ·È´Ù. SSI´Â ÇöÀç
- ½Ã°£°ú °°ÀÌ ÀûÀº Á¤º¸¸¦ Ãß°¡Çϴµ¥ ÁÁ´Ù. ±×·¯³ª ÆäÀÌÁö¸¦
- ¼­ºñ½ºÇÒ¶§ ÆäÀÌÁöÀÇ ´ëºÎºÐÀ» »ý¼ºÇØ¾ß ÇÑ´Ù¸é ´Ù¸¥ ¹æ¹ýÀ»
- ã¾ÆºÁ¾ß ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">SSI°¡ °¡´ÉÇϵµ·Ï ¼­¹ö ¼³Á¤Çϱâ</a></h2>
-
-
- <p>¼­¹ö°¡ SSI¸¦ ó¸®ÇÏ·Á¸é <code>httpd.conf</code> ÆÄÀÏÀ̳ª
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ ´ÙÀ½ Áö½Ã¾î¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-<div class="example"><p><code>
- Options +Includes
-</code></p></div>
-
- <p>±×·¯¸é ¾ÆÆÄÄ¡´Â ÆÄÀÏ¿¡¼­ SSI Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù. ¼³Á¤¿¡´Â
- º¸Åë ¿©·¯ <code class="directive"><a href="../mod/core.html#options">Options</a></code> Áö½Ã¾î°¡
- ÀÖ°í, ÀÌ Áö½Ã¾îµéÀº ¼­·Î µ¤¾î½á¼­ ¹«È¿·Î ¸¸µé´Ù. ±×·¡¼­
- Áö½Ã¾î¸¦ ¸Ç¸¶Áö¸·¿¡ ó¸®ÇϱâÀ§ÇØ º¸Åë SSI¸¦ ¿øÇϴ ƯÁ¤
- µð·ºÅ丮¿¡¼­ <code>Options</code>¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <p>¸ðµç ÆÄÀÏ¿¡¼­ SSI Áö½Ã¾î¸¦ ó¸®ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ¾ÆÆÄÄ¡¿¡°Ô
- ¾î¶² ÆÄÀÏÀ» ó¸®ÇÒÁö ¾Ë·ÁÁà¾ß ÇÑ´Ù. µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.
- Çϳª´Â ´ÙÀ½°ú °°Àº Áö½Ã¾î·Î <code>.shtml</code>°ú °°Àº ƯÁ¤
- ÆÄÀÏ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ó¸®ÇÏ´Â ¹æ¹ýÀÌ´Ù.</p>
-<div class="example"><p><code>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</code></p></div>
-
- <p>ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº ÀÌ¹Ì ÀÖ´Â ÆäÀÌÁö¿¡ SSI Áö½Ã¾î¸¦ Ãß°¡ÇÏ´Â
- °æ¿ì SSI Áö½Ã¾î¸¦ ó¸®ÇϱâÀ§ÇØ <code>.shtml</code> È®ÀåÀÚ¸¦
- ºÎ¿©Çϱ⶧¹®¿¡ ÆÄÀϸí°ú ÀÌ ÆäÀÌÁöÀÇ ¸ðµç ¸µÅ©¸¦ º¯°æÇؾß
- ÇÏ´Â Á¡ÀÌ´Ù.</p>
-
- <p>´Ù¸¥ ¹æ¹ýÀº <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù.</p>
-<div class="example"><p><code>
- XBitHack on
-</code></p></div>
-
- <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>´Â
- ½ÇÇà±ÇÇÑÀÌ ÀÖ´Â ÆÄÀÏ¿¡¼­ SSI Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù. ±×·¡¼­ À̹Ì
- ÀÖ´Â ÆäÀÌÁö¿¡ SSI Áö½Ã¾î¸¦ Ãß°¡ÇÑ´Ù¸é ÆÄÀϸíÀ» º¯°æÇÏÁö
- ¾Ê°í <code>chmod</code>·Î ÆÄÀÏ¿¡ ½ÇÇà±ÇÇÑÀ» ÁÖ¸é µÈ´Ù.</p>
-<div class="example"><p><code>
- chmod +x pagename.html
-</code></p></div>
-
- <p>ÇÏÁö ¸»¾Æ¾ß ÇÒ °Í Çϳª. °¡²û <code>.shtml</code> ÆÄÀÏ¸í¿¡
- °ñÄ¡¸¦ ¾ÎÁö¸»°í ¸ðµç <code>.html</code> ÆÄÀÏÀ» SSI ó¸®Ç϶ó°í
- Ãæ°íÇÏ´Â »ç¶÷ÀÌ ÀÖ´Ù. ÀÌ »ç¶÷µéÀº ¾Æ¸¶µµ <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>¿¡ ´ëÇØ ¸ð¸£´Â
- °Í °°´Ù. ¸í½ÉÇÒ Á¡Àº ÀÌ·¸°Ô ÇÏ¸é ¾ÆÆÄÄ¡´Â ÆÄÀÏ¿¡ SSI Áö½Ã¾î°¡
- ¾ø´õ¶óµµ Ŭ¶óÀ̾ðÆ®·Î º¸³»´Â ¸ðµç ÆÄÀÏÀ» »ìÆìºÁ¾ß ÇÑ´Ù´Â
- °ÍÀÌ´Ù. ¼º´ÉÀÌ ¸Å¿ì ´À·ÁÁú ¼ö ÀÖÀ¸¸ç, ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï´Ù.</p>
-
- <p>¹°·Ð À©µµ¿ìÁî¿¡¼­´Â ½ÇÇà±ÇÇÑÀ̶õ °ÍÀÌ ¾ø±â¶§¹®¿¡ ÈÄÀÚ¸¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <p>³»¿ëÀÌ µ¿ÀûÀÌ¿©¼­ °è»êÇϱ⠾î·Æ±â¶§¹®¿¡ ¾ÆÆÄÄ¡ ±âº» ¼³Á¤Àº
- SSI ÆäÀÌÁöÀÇ ÃÖ±Ù¼öÁ¤ÀÏ°ú content length HTTP Çì´õ¸¦ º¸³»Áö
- ¾Ê´Â´Ù. ±×·¡¼­ ¹®¼­¸¦ ij½¬ÇÏÁö ¸øÇÏ°í Ŭ¶óÀ̾ðÆ®°¡ ´À³¢´Â
- ¼º´ÉÀÌ ¶³¾îÁø´Ù. µÎ°¡Áö ÇØ°á¹æ¹ýÀÌ ÀÖ´Ù.</p>
-
- <ol>
- <li><code>XBitHack Full</code> ¼³Á¤Àº »ç¿ëÇÑ´Ù. ±×·¯¸é
- ¾ÆÆÄÄ¡´Â Æ÷ÇÔÇÏ´Â(include) ÆÄÀϵéÀÇ ¼öÁ¤ÀÏÀº ¹«½ÃÇÑü
- ¿ø·¡ ¿äûÇÑ ÆÄÀÏÀÇ ³¯Â¥¸¸ º¸°í ÃÖ±Ù¼öÁ¤ÀÏÀ» ¾Ë¾Æ³½´Ù.</li>
-
- <li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code>¿¡ ÀÖ´Â Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ÆÄÀÏ¿¡ Á÷Á¢ ¸¸±âÀÏÀ» ¼³Á¤ÇÏ¸é ºê¶ó¿ìÀú¿Í ÇÁ·Ï½Ã°¡ ¹®¼­¸¦
- ij½¬ÇÒ ¼ö ÀÖ´Ù.</li>
- </ol>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basic" id="basic">±âº» SSI Áö½Ã¾î</a></h2>
-
- <p>SSI Áö½Ã¾îÀÇ »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#element attribute=value attribute=value ... --&gt;
-</code></p></div>
-
- <p>HTML ÁÖ¼®°°ÀÌ »ý°å±â¶§¹®¿¡ SSI ±â´ÉÀ» °¡µ¿ÇÏÁö ¾Ê¾Æµµ
- HTML ¼Ò½º¿¡´Â ³ª¿ÀÁö¸¸ ºê¶ó¿ìÀú´Â ¹«½ÃÇÑ´Ù. SSI¸¦ ¿Ã¹Ù·Î
- ¼³Á¤Çϸé Áö½Ã¾î¸¦ °á°ú°ªÀ¸·Î ¹Ù²Û´Ù.</p>
-
- <p>element´Â ´ÙÀ½Áß Çϳª´Ù. ´ÙÀ½ ȸ¿¡ ´õ ÀÚ¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù.
- Áö±ÝÀº SSI·Î ÇÒ ¼ö ÀÖ´Â ¸î°¡Áö ¿¹¸¦ º¸ÀδÙ</p>
-
-<h3><a name="todaysdate" id="todaysdate">¿À´Ã ³¯Â¥</a></h3>
-
-<div class="example"><p><code>
- &lt;!--#echo var="DATE_LOCAL" --&gt;
-</code></p></div>
-
- <p><code>echo</code> element´Â º¯¼ö°ªÀ» ±×´ë·Î Ãâ·ÂÇÑ´Ù.
- CGI ÇÁ·Î±×·¥¿¡ Á¦°øÇϴ ȯ°æº¯¼öµé ¿Ü¿¡µµ ¿©·¯ Ç¥ÁØ º¯¼ö°¡
- ÀÖ´Ù. ¶Ç, <code>set</code> element¸¦ »ç¿ëÇÏ¿© Á÷Á¢ º¯¼ö¸¦
- Á¤ÀÇÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p>³¯Â¥ Ãâ·Â Çü½ÄÀÌ ¸¶À½¿¡ µéÁö ¾Ê´Â´Ù¸é, ´ÙÀ½°ú °°ÀÌ
- <code>config</code> elementÀÇ <code>timefmt</code> attribute¸¦
- »ç¿ëÇÑ´Ù.</p>
-
-<div class="example"><p><code>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</code></p></div>
-
-
-<h3><a name="lastmodified" id="lastmodified">ÆÄÀÏÀÇ ¼öÁ¤ÀÏ</a></h3>
-
-<div class="example"><p><code>
- ÀÌ ¹®¼­´Â &lt;!--#flastmod file="index.html" --&gt;¿¡ ¸¶Áö¸·À¸·Î ¼öÁ¤µÇ¾ú´Ù
-</code></p></div>
-
- <p>ÀÌ elementµµ <code>timefmt</code> Çü½Ä ¼³Á¤¿¡ ´Þ·È´Ù.</p>
-
-
-<h3><a name="cgi" id="cgi">CGI ÇÁ·Î±×·¥ °á°ú¸¦ Æ÷ÇÔÇϱâ</a></h3>
-
- <p>ÀϹÝÀûÀÎ SSI »ç¿ë¹ýÁß Çϳª·Î, ¸¹ÀÌµé ¾Ö¿ëÇÏ´Â ``¹æ¹®¼ö
- Ä«¿îÅÍ'' °°Àº CGI ÇÁ·Î±×·¥ °á°ú¸¦ Ãâ·ÂÇÑ´Ù.</p>
-
-<div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</code></p></div>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="additionalexamples" id="additionalexamples">Ãß°¡ ¿¹Á¦</a></h2>
-
-
- <p>´ÙÀ½Àº HTML ¹®¼­¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸î°¡Áö SSI ¿¹Á¦´Ù.</p>
-
-<h3><a name="docmodified" id="docmodified">ÀÌ ¹®¼­°¡ ¾ðÁ¦ ¸¶Áö¸·À¸·Î
-¼öÁ¤µÇ¾ú³ª?</a></h3>
-
- <p>¾Õ¿¡¼­ SSI¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ¿¡°Ô ¹®¼­ÀÇ ÃÖ±Ù¼öÁ¤ÀÏÀ»
- ¾Ë¸± ¼ö ÀÖ´Ù°í ¸»Çß´Ù. ±×·¯³ª ½ÇÁ¦ ¹æ¹ýÀº ¾Ë·ÁÁÖÁö ¾Ê¾Ò´Ù.
- ´ÙÀ½ Äڵ带 HTML ¹®¼­¿¡ »ç¿ëÇϸé ÆäÀÌÁö¿¡ ½Ã°£ ±â·ÏÀ» ³²±ä´Ù.
- ¹°·Ð À§¿¡¼­ ¼³¸íÇÑ´ë·Î SSI°¡ ¿Ã¹Ù·Î ÀÛµ¿ÇØ¾ß ÇÑ´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- ÀÌ ¹®¼­´Â &lt;!--#flastmod file="ssi.shtml" --&gt;¿¡ ¸¶Áö¸·À¸·Î ¼öÁ¤µÇ¾ú´Ù;
-</code></p></div>
-
- <p>¹°·Ð <code>ssi.shtml</code>´ë½Å ¿øÇÏ´Â ½ÇÁ¦ ÆÄÀϸíÀ»
- »ç¿ëÇÑ´Ù. ¾Æ¹« ÆäÀÌÁö¿¡¶óµµ ºÙ¿©³ÖÀ» ¼ö ÀÖ´Â ¹ü¿ëÄڵ带
- ¿øÇÑ´Ù¸é, ÆÄÀÏ¸í ´ë½Å <code>LAST_MODIFIED</code> º¯¼ö¸¦
- »ç¿ëÇÑ´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#config timefmt="%D" --&gt;<br />
- This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</code></p></div>
-
- <p><code>timefmt</code> Çü½Ä¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â °Ë»ö¿£Áø¿¡¼­
- <code>strftime</code>À» ã¾ÆºÁ¶ó. ¹®¹ýÀº °°´Ù.</p>
-
-
-<h3><a name="standard-footer" id="standard-footer">Ç¥ÁØ ÆäÀÌÁö ÇÏ´ÜÀ» Æ÷ÇÔÇϱâ</a></h3>
-
-
- <p>¿©·¯ ÆäÀÌÁö°¡ ÀÖ´Â »çÀÌÆ®¸¦ °ü¸®ÇÑ´Ù¸é ÆäÀÌÁö Àüü¸¦
- ¼öÁ¤ÇÏ´Â °ÍÀº, ƯÈ÷ ÆäÀÌÁöµéÀÌ Ç¥ÁØ ¿Ü°üÀ» °¡Áöµµ·Ï ¼öÁ¤ÇÏ´Â
- °ÍÀº Á¤¸»·Î ±«·Ó´Ù.</p>
-
- <p>ÆäÀÌÁö »ó´Ü(header)°ú ÇÏ´Ü(footer)À» ÆÄÀÏ·Î Æ÷ÇÔÇÏ¿©
- ÀÌ·± ¼öÁ¤ÀÇ ºÎ´ãÀ» ´ú ¼ö ÀÖ´Ù. ¸ðµç ÆäÀÌÁö¿¡¼­
- <code>include</code> SSI ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ÆäÀÌÁö ÇÏ´Ü ÆÄÀÏ
- Çϳª¸¦ Æ÷ÇÔÇÏ¸é µÈ´Ù. <code>include</code> elementÀÇ
- <code>file</code> attribute³ª <code>virtual</code> attribute·Î
- Æ÷ÇÔÇÒ ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. <code>file</code> attribute´Â <em>ÇöÀç
- µð·ºÅ丮¿¡ »ó´ëÀûÀÎ</em> ÆÄÀÏ°æ·Î´Ù. Áï, (/·Î ½ÃÀÛÇÏ´Â)
- Àý´ëÆÄÀÏ°æ·Î³ª °æ·Î ¾È¿¡ ../¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¾Æ¸¶µµ ¼­ºñ½ºÇÏ´Â
- ¹®¼­ÀÇ »ó´ë URLÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â <code>virtual</code> attribute°¡
- ´õ À¯¿ëÇÒ °ÍÀÌ´Ù. °æ·Î¸¦ /·Î ½ÃÀÛÇÒ ¼ö ÀÖÁö¸¸, Æ÷ÇÔÇÏ·Á´Â
- ÆÄÀÏÀÌ ¼­ºñ½ºÇÏ´Â ÆÄÀÏ°ú °°Àº ¼­¹ö¿¡ ÀÖ¾î¾ß ÇÑ´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#include virtual="/footer.html" --&gt;
-</code></p></div>
-
- <p>³ª´Â º¸Åë ÀÌ µÎ°¡Áö¸¦ ÇÕÃļ­ Æ÷ÇÔÇÒ ÆäÀÌÁö ÇÏ´Ü ÆÄÀÏ¿¡
- <code>LAST_MODIFIED</code> Áö½Ã¾î¸¦ ³Ö´Â´Ù. Æ÷ÇÔÇÏ·Á´Â ÆÄÀÏ¿¡µµ
- SSI Áö½Ã¾î°¡ ³ª¿Ã ¼ö ÀÖÀ¸¸ç, ÀÌ·¸°Ô Æ÷ÇÔÇÑ ÆÄÀÏÀÌ ´Ù¸¥ ÆÄÀÏÀ»
- Æ÷ÇÔÇÏ´Â ½ÄÀ¸·Î ¿©·¯¹ø °è¼Ó Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù.</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="config" id="config">ÀÌ¿Ü¿¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â °ÍÀº?</a></h2>
-
-
- <p>½Ã°£ Çü½Ä <code>config</code>(¼³Á¤) ¿Ü¿¡ µÎ°¡Áö¸¦ ´õ
- <code>config</code>(¼³Á¤)ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>º¸Åë SSI Áö½Ã¾î°¡ À߸øµÇ¸é ´ÙÀ½°ú °°Àº ¹®±¸°¡ ³ª¿Â´Ù</p>
-<div class="example"><p><code>
- [an error occurred while processing this directive]
-</code></p></div>
-
- <p>ÀÌ ¹®±¸¸¦ º¯°æÇÏ°í ½Í´Ù¸é <code>config</code> elementÀÇ
- <code>errmsg</code> attribute¸¦ »ç¿ëÇÏ¿© º¯°æÇÑ´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</code></p></div>
-
- <p>»çÀÌÆ®¸¦ ¼­ºñ½ºÇϱâ Àü¿¡ ¸ðµç SSI Áö½Ã¾î ¹®Á¦¸¦ ÇØ°áÇÏ¿©
- »ç¿ëÀÚ°¡ ÀÌ·± ¹®±¸¸¦ º¸Áö ¾Ê±æ ¹Ù¶õ´Ù. (±×·¸Áö?)</p>
-
- <p>±×¸®°í <code>sizefmt</code> attribute°¡ ¹ÝȯÇÏ´Â ÆÄÀÏÅ©±â
- Çü½ÄÀ» <code>config</code>(¼³Á¤)ÇÒ ¼ö ÀÖ´Ù. ¹ÙÀÌÆ®·Î Å©±â¸¦
- º¸¿©ÁÖ·Á¸é <code>bytes</code>, ÀûÀýÈ÷ Kb³ª Mb·Î Å©±â¸¦
- º¸¿©ÁÖ·Á¸é <code>abbrev</code>¸¦ »ç¿ëÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exec" id="exec">¸í·É¾î ½ÇÇàÇϱâ</a></h2>
-
-
- <p>³ª´Â ´ÙÀ½ ´Þ¿¡ ÀÛÀº CGI ÇÁ·Î±×·¥°ú SSI¸¦ °°ÀÌ »ç¿ëÇÏ´Â
- ±ÛÀ» ¾µ ¿¹Á¤ÀÌ´Ù. Áö±ÝÀº <code>exec</code> element·Î ÇÒ
- ¼ö ÀÖ´Â ´Ù¸¥ °ÍµéÀ» ¼³¸íÇÒ °ÍÀÌ´Ù. SSI´Â ½ÇÁ¦ ½©À» (Á¤È®È÷´Â
- <code>/bin/sh</code>³ª Win32¸¦ »ç¿ëÇÑ´Ù¸é DOS ½©) »ç¿ëÇÏ¿©
- ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½Àº µð·ºÅ丮 ¸ñ·ÏÀ» º¸¿©ÁØ´Ù.</p>
-<div class="example"><p><code>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="ls" --&gt;<br />
- &lt;/pre&gt;
-</code></p></div>
-
- <p>or, on Windows</p>
-<div class="example"><p><code>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="dir" --&gt;<br />
- &lt;/pre&gt;
-</code></p></div>
-
- <p><code>dir</code> Ãâ·Â¿¡ ºê¶ó¿ìÀú°¡ È¥µ¿ÇÒ
- ``&lt;<code>dir</code>&gt;'' ¹®ÀÚ¿­ÀÌ Æ÷ÇÔµÇÀֱ⶧¹®¿¡,
- À©µµ¿ìÁî¿¡¼­ ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é °á°ú°¡ Á¶±Ý ÀÌ»óÇÒ °ÍÀÌ´Ù.</p>
-
- <p>ÀÌ ±â´ÉÀº <code>exec</code> ű׿¡ »ç¿ëÇÑ ¾î¶² ¸í·É¾î¶óµµ
- ½ÇÇàÇÒ ¼ö Àֱ⶧¹®¿¡ ¸Å¿ì À§ÇèÇÏ´Ù. ``¹æ¸í·Ï''°ú °°ÀÌ »ç¿ëÀÚ°¡
- À¥ÆäÀÌÁö ³»¿ëÀ» ¼öÁ¤ÇÒ ¼ö Àִ ȯ°æÀ̶ó¸é, ÀÌ ±â´ÉÀ» Àý´ë·Î
- »ç¿ëÇؼ± ¾ÈµÈ´Ù. <code>Options</code> Áö½Ã¾î¿¡
- <code>IncludesNOEXEC</code> ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇÏ¿© SSI¸¦ Çã¿ëÇÏÁö¸¸
- <code>exec</code> ±â´ÉÀ» ¸·À» ¼ö ÀÖ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advanced" id="advanced">°í±Þ SSI ±â¹ý</a></h2>
-
-
- <p>³»¿ëÀ» Ãâ·ÂÇÏ´Â ±â´É ¿Ü¿¡ ¾ÆÆÄÄ¡ SSI´Â º¯¼ö ¼³Á¤ÀÌ °¡´ÉÇÏ°í,
- ºñ±³¹®°ú Á¶°Ç¹®¿¡ ÀÌ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
-<h3><a name="caveat" id="caveat">°æ°í</a></h3>
-
- <p>ÀÌ ±Û¿¡¼­ ¼³¸íÇÏ´Â ´ëºÎºÐÀÇ ±â´ÉÀº ¾ÆÆÄÄ¡ 1.2 ÀÌÈĺÎÅÍ
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð, ¾ÆÆÄÄ¡ 1.2 ÀÌ»óÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é
- ¾Æ¸¶µµ »¡¸® ¾÷±×·¹À̵åÇØ¾ß ÇÑ´Ù. Çضó. Áö±Ý Çضó. ±â´Ù¸±
- °ÍÀÌ´Ù.</p>
-
-
-<h3><a name="variables" id="variables">º¯¼ö ¼³Á¤</a></h3>
-
- <p><code>set</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ³ªÁß¿¡ »ç¿ëÇÒ º¯¼ö¸¦
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î º¯¼ö°¡ ÇÊ¿äÇϱ⶧¹®¿¡ ¸ÕÀú ¼³¸íÇÑ´Ù.
- ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#set var="name" value="Rich" --&gt;
-</code></p></div>
-
- <p>´ÙÀ½°ú °°ÀÌ °ªÀ» ¹®ÀÚ±×´ë·Î ¼³Á¤ÇÏÁö ¾Ê°í <a href="../env.html">ȯ°æº¯¼ö</a>³ª À§¿¡¼­ ¼³¸íÇÑ º¯¼ö(¿¹¸¦
- µé¾î, <code>LAST_MODIFIED</code>)¿Í °°ÀÌ ´Ù¸¥ º¯¼ö¸¦ »ç¿ëÇÏ¿©
- º¯¼ö°ªÀ» ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. À̶§ º¯¼ö¸í ¾Õ¿¡ ´Þ·¯ Ç¥½Ã($)¸¦
- ºÙ¿©¼­ ¹®ÀÚ¿­ÀÌ ¾Æ´Ñ º¯¼öÀÓÀ» Ç¥½ÃÇÑ´Ù.</p>
-
- <div class="example"><p><code> &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
- </code></p></div>
-
- <p>º¯¼ö°ª¿¡ ´Þ·¯ ¹®ÀÚ¸¦ ±×´ë·Î ÀÔ·ÂÇÏ·Á¸é ´Þ·¯ Ç¥½Ã ¾Õ¿¡
- ¹é½½·¡½¬¸¦ »ç¿ëÇÑ´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#set var="cost" value="\$100" --&gt;
-</code></p></div>
-
- <p>¸¶Áö¸·À¸·Î ±ä ¹®ÀÚ¿­ Áß°£¿¡ º¯¼ö¸¦ »ç¿ëÇϴµ¥ µÚ¿¡ ÀÖ´Â
- ¹®ÀÚµµ º¯¼ö¸íÀ¸·Î ¿ÀÀÎÇÏ¿© È¥µ¿µÇ´Â °æ¿ì, º¯¼ö¸íÀ» ´ë°ýÈ£·Î
- ¹­¾î¼­ È®½ÇÈ÷ ÇÑ´Ù. (ÁÁÀº ¿¹¸¦ ã±â ÈûµéÁö¸¸, ¹«½¼ ¸»ÀÎÁö
- ÀÌÇØÇÏ±æ ¹Ù¶õ´Ù.)</p>
-<div class="example"><p><code>
- &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</code></p></div>
-
-
-<h3><a name="conditional" id="conditional">Á¶°Ç Ç¥Çö½Ä</a></h3>
-
-
- <p>º¯¼ö¸¦ ¼³Á¤ÇÏ°í ºñ±³ÇÒ ¼ö ÀÖÀ¸´Ï Á¶°Ç¹®ÀÌ °¡´ÉÇÏ´Ù. ÀÌÁ¦
- SSI°¡ ÀÏÁ¾ÀÇ °£´ÜÇÑ ÇÁ·Î±×·¡¹Ö¾ð¾î°¡ µÈ´Ù.
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>´Â Á¶°Ç¹®À» ¸¸µå´Â <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code>
- ±¸Á¶¸¦ Á¦°øÇÑ´Ù. ½ÇÁ¦ ÇÑ ÆäÀÌÁö·Î ¿©·¯ ³í¸®ÀûÀÎ ÆäÀÌÁö¸¦
- ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <p>Á¶°Ç¹® ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#if expr="test_condition" --&gt;<br />
- &lt;!--#elif expr="test_condition" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
-</code></p></div>
-
- <p><em>test_condition</em>¿¡´Â ¾î¶² ³í¸®ºñ±³¶óµµ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. °ªÀ» ´Ù¸¥ °ª°ú ºñ±³Çϰųª, ƯÁ¤ °ªÀÌ ``Âü''ÀÎÁö
- °Ë»çÇÑ´Ù. (¹®ÀÚ¿­ÀÌ ºñ¾îÀÖÁö ¾ÊÀ¸¸é ÂüÀÌ´Ù.) »ç¿ë°¡´ÉÇÑ
- ºñ±³ ¿¬»êÀÚ¸¦ ¸ðµÎ º¸·Á¸é, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- ¹®¼­¸¦ Âü°íÇ϶ó. ´ÙÀ½Àº Á¶°Ç¹®À» »ç¿ëÇÑ ¸î°¡Áö ¿¹Á¦´Ù.</p>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½ ÁÙÀ» Ãß°¡ÇÑ´Ù.</p>
-<div class="example"><p><code>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</code></p></div>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ ¸ÆŲÅä½Ã¿¡¼­ ½ÇÇàÇÏ´Â Internet Explorer¶ó¸é
- ȯ°æº¯¼ö ``Mac''°ú ``InternetExplorer'' ¸ðµÎ ÂüÀ¸·Î ¼³Á¤ÇÑ´Ù.</p>
-
- <p>±×¸®°í SSI ¹®¼­¿¡ ´ÙÀ½°ú °°ÀÌ Àû´Â´Ù.</p>
-<div class="example"><p><code>
- &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
- ¿©±â¿¡ »ç°ú¹®°¡ ³ª¿Â´Ù<br />
- &lt;!--#else --&gt;<br />
- ¿©±â¿¡ ¸ÚÁø JavaScript Äڵ尡 ³ª¿Â´Ù<br />
- &lt;!--#endif --&gt;
-</code></p></div>
-
- <p>³»°¡ ¸ÅŲÅä½Ã IE¿¡ ¹Ý°¨ÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ³ª´Â ´ÜÁö
- Àú¹øÁÖ¿¡ ´Ù¸¥ °÷¿¡¼­´Â ¹®Á¦°¡ ¾ø´Â JavaScript Äڵ尡 ¸ÅŲÅä½Ã
- IE¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê¾Æ¼­ ¸î½Ã°£À» °í»ýÇß´Ù. À§´Â ÀÓ½Ã
- ÇØ°áÃ¥ÀÌ´Ù.</p>
-
- <p>(Á÷Á¢ Á¤ÀÇÇÏ¿´°Ç ÀÏ¹Ý È¯°æº¯¼öÀÌ°Ç) ¾î¶² º¯¼ö¶óµµ Á¶°Ç¹®¿¡
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾Æ¶óÄ¡´Â <code>SetEnvIf</code>³ª ´Ù¸¥ °ü·Ã
- Áö½Ã¾î·Î ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö Àֱ⶧¹®¿¡ CGI ¾øÀ̵µ ¸ÚÁö°Ô
- µ¿ÀûÀÎ ³»¿ëÀ» ¸¸µé ¼ö ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="conclusion" id="conclusion">°á·Ð</a></h2>
-
- <p>SSI´Â È®½ÇÈ÷ CGI³ª µ¿ÀûÀÎ À¥ÆäÀÌÁö¸¦ »ý¼ºÇÏ´Â ´Ù¸¥ ±â¼úÀ»
- ´ëüÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ¸¹Àº Ãß°¡ ÀÛ¾÷¾øÀÌ ÆäÀÌÁö¿¡ µ¿ÀûÀÎ
- ³»¿ëÀ» Á¶±Ý Ãß°¡Çϱ⿡´Â ÈǸ¢ÇÑ ¹æ¹ýÀÌ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/howto/ssi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/howto/ssi.xml b/docs/manual/howto/ssi.xml
deleted file mode 100644
index bcb788fbfd..0000000000
--- a/docs/manual/howto/ssi.xml
+++ /dev/null
@@ -1,488 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssi.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
-<title>Apache Tutorial: Introduction to Server Side Includes</title>
-
-<summary>
-<p>Server-side includes provide a means to add dynamic content to
-existing HTML documents.</p>
-</summary>
-
-<section id="related"><title>Introduction</title>
- <related>
- <modulelist>
- <module>mod_include</module>
- <module>mod_cgi</module>
- <module>mod_expires</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">Options</directive>
- <directive module="mod_include">XBitHack</directive>
- <directive module="mod_mime">AddType</directive>
- <directive module="core">SetOutputFilter</directive>
- <directive module="mod_setenvif">BrowserMatchNoCase</directive>
- </directivelist>
-</related>
-
- <p>This article deals with Server Side Includes, usually called
- simply SSI. In this article, I'll talk about configuring your
- server to permit SSI, and introduce some basic SSI techniques
- for adding dynamic content to your existing HTML pages.</p>
-
- <p>In the latter part of the article, we'll talk about some of
- the somewhat more advanced things that can be done with SSI,
- such as conditional statements in your SSI directives.</p>
-
-</section>
-
-<section id="what"><title>What are SSI?</title>
-
- <p>SSI (Server Side Includes) are directives that are placed in
- HTML pages, and evaluated on the server while the pages are
- being served. They let you add dynamically generated content to
- an existing HTML page, without having to serve the entire page
- via a CGI program, or other dynamic technology.</p>
-
- <p>The decision of when to use SSI, and when to have your page
- entirely generated by some program, is usually a matter of how
- much of the page is static, and how much needs to be
- recalculated every time the page is served. SSI is a great way
- to add small pieces of information, such as the current time.
- But if a majority of your page is being generated at the time
- that it is served, you need to look for some other
- solution.</p>
-</section>
-
-<section id="configuring">
-<title>Configuring your server to permit SSI</title>
-
- <p>To permit SSI on your server, you must have the following
- directive either in your <code>httpd.conf</code> file, or in a
- <code>.htaccess</code> file:</p>
-<example>
- Options +Includes
-</example>
-
- <p>This tells Apache that you want to permit files to be parsed
- for SSI directives. Note that most configurations contain
- multiple <directive module="core">Options</directive> directives
- that can override each other. You will probably need to apply the
- <code>Options</code> to the specific directory where you want SSI
- enabled in order to assure that it gets evaluated last.</p>
-
- <p>Not just any file is parsed for SSI directives. You have to
- tell Apache which files should be parsed. There are two ways to
- do this. You can tell Apache to parse any file with a
- particular file extension, such as <code>.shtml</code>, with
- the following directives:</p>
-<example>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</example>
-
- <p>One disadvantage to this approach is that if you wanted to
- add SSI directives to an existing page, you would have to
- change the name of that page, and all links to that page, in
- order to give it a <code>.shtml</code> extension, so that those
- directives would be executed.</p>
-
- <p>The other method is to use the <directive
- module="mod_include">XBitHack</directive> directive:</p>
-<example>
- XBitHack on
-</example>
-
- <p><directive module="mod_include">XBitHack</directive>
- tells Apache to parse files for SSI
- directives if they have the execute bit set. So, to add SSI
- directives to an existing page, rather than having to change
- the file name, you would just need to make the file executable
- using <code>chmod</code>.</p>
-<example>
- chmod +x pagename.html
-</example>
-
- <p>A brief comment about what not to do. You'll occasionally
- see people recommending that you just tell Apache to parse all
- <code>.html</code> files for SSI, so that you don't have to
- mess with <code>.shtml</code> file names. These folks have
- perhaps not heard about <directive
- module="mod_include">XBitHack</directive>. The thing to
- keep in mind is that, by doing this, you're requiring that
- Apache read through every single file that it sends out to
- clients, even if they don't contain any SSI directives. This
- can slow things down quite a bit, and is not a good idea.</p>
-
- <p>Of course, on Windows, there is no such thing as an execute
- bit to set, so that limits your options a little.</p>
-
- <p>In its default configuration, Apache does not send the last
- modified date or content length HTTP headers on SSI pages,
- because these values are difficult to calculate for dynamic
- content. This can prevent your document from being cached, and
- result in slower perceived client performance. There are two
- ways to solve this:</p>
-
- <ol>
- <li>Use the <code>XBitHack Full</code> configuration. This
- tells Apache to determine the last modified date by looking
- only at the date of the originally requested file, ignoring
- the modification date of any included files.</li>
-
- <li>Use the directives provided by
- <module>mod_expires</module> to set an explicit expiration
- time on your files, thereby letting browsers and proxies
- know that it is acceptable to cache them.</li>
- </ol>
-</section>
-
-<section id="basic"><title>Basic SSI directives</title>
-
- <p>SSI directives have the following syntax:</p>
-<example>
- &lt;!--#element attribute=value attribute=value ... --&gt;
-</example>
-
- <p>It is formatted like an HTML comment, so if you don't have
- SSI correctly enabled, the browser will ignore it, but it will
- still be visible in the HTML source. If you have SSI correctly
- configured, the directive will be replaced with its
- results.</p>
-
- <p>The element can be one of a number of things, and we'll talk
- some more about most of these in the next installment of this
- series. For now, here are some examples of what you can do with
- SSI</p>
-
-<section id="todaysdate"><title>Today's date</title>
-
-<example>
- &lt;!--#echo var="DATE_LOCAL" --&gt;
-</example>
-
- <p>The <code>echo</code> element just spits out the value of a
- variable. There are a number of standard variables, which
- include the whole set of environment variables that are
- available to CGI programs. Also, you can define your own
- variables with the <code>set</code> element.</p>
-
- <p>If you don't like the format in which the date gets printed,
- you can use the <code>config</code> element, with a
- <code>timefmt</code> attribute, to modify that formatting.</p>
-
-<example>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</example>
-</section>
-
-<section id="lastmodified"><title>Modification date of the file</title>
-
-<example>
- This document last modified &lt;!--#flastmod file="index.html" --&gt;
-</example>
-
- <p>This element is also subject to <code>timefmt</code> format
- configurations.</p>
-</section>
-
-<section id="cgi"><title>Including the results of a CGI program</title>
-
- <p>This is one of the more common uses of SSI - to output the
- results of a CGI program, such as everybody's favorite, a ``hit
- counter.''</p>
-
-<example>
- &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</example>
-
-</section>
-</section>
-
-<section id="additionalexamples">
-<title>Additional examples</title>
-
- <p>Following are some specific examples of things you can do in
- your HTML documents with SSI.</p>
-
-<section id="docmodified"><title>When was this document
-modified?</title>
-
- <p>Earlier, we mentioned that you could use SSI to inform the
- user when the document was most recently modified. However, the
- actual method for doing that was left somewhat in question. The
- following code, placed in your HTML document, will put such a
- time stamp on your page. Of course, you will have to have SSI
- correctly enabled, as discussed above.</p>
-<example>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
-</example>
-
- <p>Of course, you will need to replace the
- <code>ssi.shtml</code> with the actual name of the file that
- you're referring to. This can be inconvenient if you're just
- looking for a generic piece of code that you can paste into any
- file, so you probably want to use the
- <code>LAST_MODIFIED</code> variable instead:</p>
-<example>
- &lt;!--#config timefmt="%D" --&gt;<br />
- This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</example>
-
- <p>For more details on the <code>timefmt</code> format, go to
- your favorite search site and look for <code>strftime</code>. The
- syntax is the same.</p>
-</section>
-
-<section id="standard-footer">
-<title>Including a standard footer</title>
-
- <p>If you are managing any site that is more than a few pages,
- you may find that making changes to all those pages can be a
- real pain, particularly if you are trying to maintain some kind
- of standard look across all those pages.</p>
-
- <p>Using an include file for a header and/or a footer can
- reduce the burden of these updates. You just have to make one
- footer file, and then include it into each page with the
- <code>include</code> SSI command. The <code>include</code>
- element can determine what file to include with either the
- <code>file</code> attribute, or the <code>virtual</code>
- attribute. The <code>file</code> attribute is a file path,
- <em>relative to the current directory</em>. That means that it
- cannot be an absolute file path (starting with /), nor can it
- contain ../ as part of that path. The <code>virtual</code>
- attribute is probably more useful, and should specify a URL
- relative to the document being served. It can start with a /,
- but must be on the same server as the file being served.</p>
-<example>
- &lt;!--#include virtual="/footer.html" --&gt;
-</example>
-
- <p>I'll frequently combine the last two things, putting a
- <code>LAST_MODIFIED</code> directive inside a footer file to be
- included. SSI directives can be contained in the included file,
- and includes can be nested - that is, the included file can
- include another file, and so on.</p>
-</section>
-
-</section>
-
-<section id="config">
-<title>What else can I config?</title>
-
- <p>In addition to being able to <code>config</code> the time
- format, you can also <code>config</code> two other things.</p>
-
- <p>Usually, when something goes wrong with your SSI directive,
- you get the message</p>
-<example>
- [an error occurred while processing this directive]
-</example>
-
- <p>If you want to change that message to something else, you
- can do so with the <code>errmsg</code> attribute to the
- <code>config</code> element:</p>
-<example>
- &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</example>
-
- <p>Hopefully, end users will never see this message, because
- you will have resolved all the problems with your SSI
- directives before your site goes live. (Right?)</p>
-
- <p>And you can <code>config</code> the format in which file
- sizes are returned with the <code>sizefmt</code> attribute. You
- can specify <code>bytes</code> for a full count in bytes, or
- <code>abbrev</code> for an abbreviated number in Kb or Mb, as
- appropriate.</p>
- </section>
-
-<section id="exec">
- <title>Executing commands</title>
-
- <p>I expect that I'll have an article some time in the coming
- months about using SSI with small CGI programs. For now, here's
- something else that you can do with the <code>exec</code>
- element. You can actually have SSI execute a command using the
- shell (<code>/bin/sh</code>, to be precise - or the DOS shell,
- if you're on Win32). The following, for example, will give you
- a directory listing.</p>
-<example>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="ls" --&gt;<br />
- &lt;/pre&gt;
-</example>
-
- <p>or, on Windows</p>
-<example>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="dir" --&gt;<br />
- &lt;/pre&gt;
-</example>
-
- <p>You might notice some strange formatting with this directive
- on Windows, because the output from <code>dir</code> contains
- the string ``&lt;<code>dir</code>&gt;'' in it, which confuses
- browsers.</p>
-
- <p>Note that this feature is exceedingly dangerous, as it will
- execute whatever code happens to be embedded in the
- <code>exec</code> tag. If you have any situation where users
- can edit content on your web pages, such as with a
- ``guestbook'', for example, make sure that you have this
- feature disabled. You can allow SSI, but not the
- <code>exec</code> feature, with the <code>IncludesNOEXEC</code>
- argument to the <code>Options</code> directive.</p>
- </section>
-
-<section id="advanced">
-<title>Advanced SSI techniques</title>
-
- <p>In addition to spitting out content, Apache SSI gives you
- the option of setting variables, and using those variables in
- comparisons and conditionals.</p>
-
-<section id="caveat"><title>Caveat</title>
-
- <p>Most of the features discussed in this article are only
- available to you if you are running Apache 1.2 or later. Of
- course, if you are not running Apache 1.2 or later, you need to
- upgrade immediately, if not sooner. Go on. Do it now. We'll
- wait.</p>
-</section>
-
-<section id="variables"><title>Setting variables</title>
-
- <p>Using the <code>set</code> directive, you can set variables
- for later use. We'll need this later in the discussion, so
- we'll talk about it here. The syntax of this is as follows:</p>
-<example>
- &lt;!--#set var="name" value="Rich" --&gt;
-</example>
-
- <p>In addition to merely setting values literally like that, you
- can use any other variable, including <a
- href="../env.html">environment variables</a> or the variables
- discussed above (like <code>LAST_MODIFIED</code>, for example) to
- give values to your variables. You will specify that something is
- a variable, rather than a literal string, by using the dollar sign
- ($) before the name of the variable.</p>
-
- <example> &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
- </example>
-
- <p>To put a literal dollar sign into the value of your
- variable, you need to escape the dollar sign with a
- backslash.</p>
-<example>
- &lt;!--#set var="cost" value="\$100" --&gt;
-</example>
-
- <p>Finally, if you want to put a variable in the midst of a
- longer string, and there's a chance that the name of the
- variable will run up against some other characters, and thus be
- confused with those characters, you can place the name of the
- variable in braces, to remove this confusion. (It's hard to
- come up with a really good example of this, but hopefully
- you'll get the point.)</p>
-<example>
- &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</example>
-</section>
-
-<section id="conditional">
-<title>Conditional expressions</title>
-
- <p>Now that we have variables, and are able to set and compare
- their values, we can use them to express conditionals. This
- lets SSI be a tiny programming language of sorts.
- <module>mod_include</module> provides an <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code>
- structure for building conditional statements. This allows you
- to effectively generate multiple logical pages out of one
- actual page.</p>
-
- <p>The structure of this conditional construct is:</p>
-<example>
- &lt;!--#if expr="test_condition" --&gt;<br />
- &lt;!--#elif expr="test_condition" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
-</example>
-
- <p>A <em>test_condition</em> can be any sort of logical
- comparison - either comparing values to one another, or testing
- the ``truth'' of a particular value. (A given string is true if
- it is nonempty.) For a full list of the comparison operators
- available to you, see the <module>mod_include</module>
- documentation. Here are some examples of how one might use this
- construct.</p>
-
- <p>In your configuration file, you could put the following
- line:</p>
-<example>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</example>
-
- <p>This will set environment variables ``Mac'' and
- ``InternetExplorer'' to true, if the client is running Internet
- Explorer on a Macintosh.</p>
-
- <p>Then, in your SSI-enabled document, you might do the
- following:</p>
-<example>
- &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
- Apologetic text goes here<br />
- &lt;!--#else --&gt;<br />
- Cool JavaScript code goes here<br />
- &lt;!--#endif --&gt;
-</example>
-
- <p>Not that I have anything against IE on Macs - I just
- struggled for a few hours last week trying to get some
- JavaScript working on IE on a Mac, when it was working
- everywhere else. The above was the interim workaround.</p>
-
- <p>Any other variable (either ones that you define, or normal
- environment variables) can be used in conditional statements.
- With Apache's ability to set environment variables with the
- <code>SetEnvIf</code> directives, and other related directives,
- this functionality can let you do some pretty involved dynamic
- stuff without ever resorting to CGI.</p>
-</section>
-</section>
-
-<section id="conclusion"><title>Conclusion</title>
-
- <p>SSI is certainly not a replacement for CGI, or other
- technologies used for generating dynamic web pages. But it is a
- great way to add small amounts of dynamic content to pages,
- without doing a lot of extra work.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/howto/ssi.xml.ja b/docs/manual/howto/ssi.xml.ja
deleted file mode 100644
index d74da4afae..0000000000
--- a/docs/manual/howto/ssi.xml.ja
+++ /dev/null
@@ -1,480 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssi.xml.meta">
-<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
-
-<title>Apache $B%A%e!<%H%j%"%k(B: Server Side Includes $BF~Lg(B</title>
-
-<summary>
-<p>$B%5!<%P%5%$%I%$%s%/%k!<%I$K$h$C$F!"4{B8$N(B HTML
-$B%I%-%e%a%s%H$KF0E*$J%3%s%F%s%D$rDI2C$9$k$3$H$,$G$-$^$9!#(B</p>
-</summary>
-
-<section id="related"><title>$B$O$8$a$K(B</title>
- <related>
- <modulelist>
- <module>mod_include</module>
- <module>mod_cgi</module>
- <module>mod_expires</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">Options</directive>
- <directive module="mod_include">XBitHack</directive>
- <directive module="mod_mime">AddType</directive>
- <directive module="core">SetOutputFilter</directive>
- <directive module="mod_setenvif">BrowserMatchNoCase</directive>
- </directivelist>
-</related>
-
- <p>$B$3$N5-;v$O!"DL>o$OC1$K(B SSI $B$H8F$P$l$k(B Server Side Includes
- $B$r07$$$^$9!#$3$N5-;v$K$*$$$F$O!"%5!<%P$G$N(B SSI $B$r5v2D$9$k$?$a$N@_Dj$H!"(B
- $B8=:_$N(B HTML $B%Z!<%8$KF0E*$J%3%s%F%s%D$r2C$($k$?$a$N$$$/$D$+$N4pK\E*$J(B
- SSI $B5;=Q$r>R2p$7$^$9!#(B</p>
-
- <p>$B5-;v$N8eH>$G$O!"(BSSI $B%G%#%l%/%F%#%V$G(B SSI
- $B$H6&$K<B9T$9$k$3$H$,$G$-$k>r7oJ8$N$h$&$J(B
- $B4vJ,9bEY$J;vJA$K$D$$$F=R$Y$F$$$^$9!#(B</p>
-
-</section>
-
-<section id="what"><title>SSI $B$H$O(B ?</title>
-
- <p>SSI (Server Side Includes) $B$O!"(BHTML
- $B%Z!<%8Cf$KG[CV$5$l$k%G%#%l%/%F%#%V$G$"$j!"(B
- $B%5!<%P$G%Z!<%8$rDs6!$9$k;~$KI>2A$5$l$^$9!#(BSSI $B$O!"(BCGI
- $B%W%m%0%i%`$d$=$NB>$NF0E*$J5;=Q$GA4$F$N%Z!<%8$rDs6!$;$:$K!"(B
- $BF0E*$K@8@.$5$l$?%3%s%F%s%D$r8=:_$N(B HTML $B%Z!<%8$K2C$($^$9!#(B</p>
-
- <p>$B$I$&$$$&>l9g$K(B SSI $B$r;H$$!"$I$&$$$&>l9g$K%W%m%0%i%`$G(B
- $B%Z!<%8$r40A4$K@8@.$9$k$+$O!"%Z!<%8$N$&$A$I$NDxEY$,@EE*$G$"$j!"(B
- $B%Z!<%8$,Ds6!$5$l$k$?$S$K:F7W;;$9$kI,MW$,$I$NDxEY$"$k$+$GDL>o$O7hDj$7$^$9!#(B
- SSI $B$O8=:_;~9o$N$h$&$J>.$5$$>pJs$r2C$($k$K$O$&$C$F$D$1$NJ}K!$G$9!#(B
- $B$7$+$7!"$=$N%Z!<%8$N$[$H$s$I$NItJ,$,Ds6!;~$K@8@.$5$l$k>l9g$O!"(B
- $BB>$NJ}K!$rC5$9I,MW$,$"$j$^$9!#(B</p>
-</section>
-
-<section id="configuring">
-<title>SSI $B$r5v2D$9$k$?$a$N%5!<%P$N@_Dj(B</title>
-
- <p>$B%5!<%P$G(B SSI $B$r5v2D$9$k$K$O!"(B<code>httpd.conf</code>
- $B%U%!%$%k$^$?$O(B <code>.htaccess</code>
- $B%U%!%$%k$K<!$N%G%#%l%/%F%#%V$r;XDj$9$kI,MW$,$"$j$^$9(B:</p>
-<example>
- Options +Includes
-</example>
-
- <p>$B$3$N;XDj$O!"%U%!%$%k$r(B SSI
- $B%G%#%l%/%F%#%V$G2r@O$5$;$k$3$H$r5v2D$9$k$H$$$&$3$H$r(B Apache
- $B$KEA$($^$9!#$[$H$s$I$N@_Dj$G$O$*8_$$$r>e=q$-$G$-$k!"J#?t$N(B
- <directive module="core">Options</directive> $B$,$"$k$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#$*$=$i$/!"@_Dj$,:G8e$KI>2A$5$l$k$3$H$r(B
- $BJ]>Z$5$l$k$?$a$K!"(BSSI $B$r;HMQ$7$?$$%G%#%l%/%H%j$K(B <code>Options</code>
- $B%G%#%l%/%F%#%V$rE,MQ$9$kI,MW$,$"$k$G$7$g$&!#(B</p>
-
- <p>$BA4$F$N%U%!%$%k$,(B SSI
- $B%G%#%l%/%F%#%V$G2r@O$5$l$k$H$$$&$o$1$G$O$"$j$^$;$s!#(B
- $B$I$N%U%!%$%k$,2r@O$5$l$k$+$r(B Apache $B$KEA$($kI,MW$,$"$j$^$9!#(B
- $B$3$l$r9T$J$&$K$OFs$DJ}K!$,$"$j$^$9!#(B
- $B<!$N%G%#%l%/%F%#%V$r;H$&$3$H$G!"Nc$($P(B <code>.shtml</code>
- $B$N$h$&$JFCJL$J%U%!%$%k3HD%;R$r;}$D%U%!%$%k$r2r@O$9$k$h$&(B
- Apache $B$KEA$($k$3$H$,$G$-$^$9(B:</p>
-<example>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</example>
-
- <p>$B$3$NJ}K!$N7gE@$O!"$b$78=:_$N%Z!<%8$K(B SSI $B%G%#%l%/%F%#%V$r2C$($?$$>l9g!"(B
- $B$=$l$i$N%G%#%l%/%F%#%V$,<B9T$5$l$k$h$&$K(B
- <code>.shtml</code> $B3HD%;R$K$9$k$?$a!"$=$N%Z!<%8$NL>A0$H!"(B
- $B$=$N%Z!<%8$X$NA4$F$N%j%s%/$rJQ99$7$J$1$l$P$J$i$J$$$3$H$G$9!#(B</p>
-
- <p>$B$b$&0l$D$NJ}K!$O!"(B<directive module="mod_include">XBitHack</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G$9(B:</p>
-<example>
- XBitHack on
-</example>
-
- <p><directive module="mod_include">XBitHack</directive>
- $B$O!"%U%!%$%k$N<B9T%S%C%H$,N)$C$F$$$k>l9g!"(B
- SSI $B%G%#%l%/%F%#%V$K$h$j2r@O$9$k$3$H$r(B Apache $B$KEA$($^$9!#(B
- $B=>$C$F!"(BSSI $B%G%#%l%/%F%#%V$r8=:_$N%Z!<%8$K2C$($k$?$a$K$O!"(B
- $B%U%!%$%kL>$rJQ99$7$J$/$F$b$h$/!"C1$K(B <code>chmod</code>
- $B$r;HMQ$7$F%U%!%$%k$r<B9T2DG=$K$9$k$@$1$G:Q$_$^$9!#(B</p>
-<example>
- chmod +x pagename.html
-</example>
-
- <p>$B9T$J$&$Y$-$G$O$J$$$3$H$K4X$9$kC;$$%3%a%s%H!#;~!9C/$+$,!"A4$F$N(B
- <code>.html</code> $B%U%!%$%k$r(B SSI $B$G2r@O$9$k$h$&(B Apache $B$KEA$($l$P!"(B
- $B$o$6$o$6(B <code>.shtml</code> $B$H$$$&%U%!%$%kL>$K$9$kI,MW$,$J$$$H$$$C$F(B
- $BA&$a$k$N$r8+$k$3$H$G$7$g$&!#$3$&$$$&?M$?$A$O!"$*$=$i$/(B
- <directive module="mod_include">XBitHack</directive>
- $B$K$D$$$FJ9$$$?$3$H$,$J$$$N$G$7$g$&!#(B
- $B$3$NJ}K!$K$D$$$FCm0U$9$k$3$H$O!"$?$H$((B SSI
- $B%G%#%l%/%F%#%V$rA4$/4^$^$J$$>l9g$G$b!"(BApache $B$,%/%i%$%"%s%H$K(B
- $BAw$kA4$F$N%U%!%$%k$r:G8e$^$GFI$_9~$^$;$k$3$H$K$J$j$^$9!#(B
- $B$3$NJ}K!$O$+$J$j=hM}$rCY$/$9$k$b$N$G$"$j!"NI$/$J$$%"%$%G%"$G$9!#(B</p>
-
- <p>$B$b$A$m$s!"(BWindows $B$G$O$=$N$h$&$J<B9T%S%C%H$r%;%C%H(B
- $B$9$k$h$&$J$b$N$O$"$j$^$;$s$N$G%*%W%7%g%s$,>/$7@)8B$5$l$F$$$^$9!#(B</p>
-
- <p>$B%G%U%)%k%H$N@_Dj$G$O!"(BApache $B$O(B SSI $B%Z!<%8$K$D$$$F:G=*JQ99;~9o$d(B
- $B%3%s%F%s%D$ND9$5$r(B HTTP $B%X%C%@$KAw$j$^$;$s!#(B
- $BF0E*$J%3%s%F%s%D$G$"$k$?$a!"$=$l$i$NCM$r7W;;$9$k$N$,Fq$7$$$+$i$G$9!#(B
- $B$3$N$?$a%I%-%e%a%s%H$,%-%c%C%7%e$5$l$J$/$J$j!"(B
- $B7k2L$H$7$F%/%i%$%"%s%H$N@-G=$,CY$/$J$C$?$h$&$K46$8$5$;$k$3$H$K$J$j$^$9!#(B
- $B$3$l$r2r7h$9$kJ}K!$,Fs$D$"$j$^$9(B:</p>
-
- <ol>
- <li><code>XBitHack Full</code> $B@_Dj$r;HMQ$9$k!#(B
- $B$3$N@_Dj$K$h$j!"$b$H$b$HMW5a$5$l$?%U%!%$%k$N;~9o$r;2>H$7!"(B
- $BFI$_9~$^$l$k%U%!%$%k$NJQ99;~9o$rL5;k$7$F:G=*JQ99;~9o$r7hDj$9$k$h$&(B
- Apache $B$KEA$($^$9!#(B</li>
-
- <li><a href="../mod/mod_expires.html">mod_expires</a>
- $B$GDs6!$5$l$F$$$k%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
- $B%U%!%$%k$,L58z$K$J$k;~9o$rL@<($7$^$9!#$3$l$K$h$j!"(B
- $B%V%i%&%6$H%W%m%-%7$K%-%c%C%7%e$,M-8z$G$"$k$3$H$rDLCN$7$^$9!#(B</li>
- </ol>
-</section>
-
-<section id="basic"><title>$B4pK\E*$J(B SSI $B%G%#%l%/%F%#%V(B</title>
-
- <p>SSI $B%G%#%l%/%F%#%V$O0J2<$NJ8K!$G5-=R$7$^$9(B:</p>
-<example>
- &lt;!--#element attribute=value attribute=value ... --&gt;
-</example>
-
- <p>HTML $B$N%3%a%s%H$N$h$&$J=q<0$r$7$F$$$k$N$G!"$b$7(B SSI
- $B$r@5$7$/F0:n2DG=$K$7$J$1$l$P!"%V%i%&%6$O$=$l$rL5;k$9$k$G$7$g$&!#(B
- $B$7$+$7!"(BHTML $B%=!<%9Cf$G$O8+$($^$9!#$b$7(B SSI $B$r@5$7$/@_Dj$7$?$J$i!"(B
- $B%G%#%l%/%F%#%V$O$=$N7k2L$HCV$-49$($i$l$^$9!#(B</p>
-
- <p>element $B$O$?$/$5$s$"$k$b$N$+$i0l$D;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B;XDj$G$-$k$b$N$NBgB??t$K$D$$$F$O!"<!2s$b$&>/$7>\$7$/@bL@$7$^$9!#(B
- $B$3$3$G$O!"(BSSI $B$G9T$J$&$3$H$,$G$-$kNc$r$$$/$D$+<($7$^$9!#(B</p>
-
-<section id="todaysdate"><title>$B:#F|$NF|IU(B</title>
-
-<example>
- &lt;!--#echo var="DATE_LOCAL" --&gt;
-</example>
-
- <p><code>echo</code> $BMWAG$OC1$KJQ?t$NCM$r=PNO$7$^$9!#(B
- CGI $B%W%m%0%i%`$KMxMQ2DG=$J4D6-JQ?t$NA4$F$N(B
- $B%;%C%H$r4^$`B?$/$NI8=`JQ?t$,$"$j$^$9!#$^$?!"(B<code>set</code>
- $BMWAG$rMQ$$$k$3$H$G!"FH<+$NJQ?t$rDj5A$9$k$3$H$,$G$-$^$9!#(B
- </p>
-
- <p>$B=PNO$5$l$kF|IU$N=q<0$,9%$-$G$O$J$$>l9g!"$=$N=q<0$r=$@5$9$k$?$a$K!"(B
- <code>config</code> $BMWAG$K(B <code>timefmt</code>
- $BB0@-$r;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<example>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</example>
-</section>
-
-<section id="lastmodified"><title>$B%U%!%$%k$NJQ99F|(B</title>
-
-<example>
- This document last modified &lt;!--#flastmod file="index.html" --&gt;
-</example>
-
- <p>$B$3$NMWAG$b(B <code>timefmt</code>
- $B%U%)!<%^%C%H$N@_Dj$K=>$$$^$9!#(B</p>
-</section>
-
-<section id="cgi"><title>CGI $B%W%m%0%i%`$N7k2L$r<h$j9~$`(B</title>
-
- <p>$B$3$l$O!"A4$F$N?M$N$*5$$KF~$j$G$"$k(B ``$B%R%C%H%+%&%s%?(B'' $B$N$h$&$J(B
- CGI $B%W%m%0%i%`$N7k2L$r=PNO$9$k(B SSI
- $B$N$h$j0lHLE*$J;HMQ$N$&$A$N0l$D$G$9!#(B</p>
-
-<example>
- &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</example>
-
-</section>
-</section>
-
-<section id="additionalexamples">
-<title>$BDI2C$NNc(B</title>
-
- <p>$B0J2<$O!"(BSSI $B$r;HMQ$7$F(B HTML
- $B%I%-%e%a%s%H$K$*$$$F$G$-$k$3$H$N$$$/$D$+$NFCJL$JNc$G$9!#(B</p>
-
-<section id="docmodified"><title>$B$$$D$3$N%I%-%e%a%s%H$O=$@5$5$l$?$N$+(B
-?</title>
-
- <p>$B@h$K!"%I%-%e%a%s%H$,:G8e$KJQ99$5$l$?$N$O$$$D$+$r(B
- $B%f!<%6$KDLCN$9$k$?$a$K(B SSI $B$r;HMQ$9$k$3$H$,$G$-$k$3$H$r=R$Y$^$7$?!#(B
- $B$7$+$7$J$,$i!"<B:]$NJ}K!$O!"$$$/$V$sLdBj$N$^$^$K$7$F$*$-$^$7$?!#(B
- HTML $B%I%-%e%a%s%H$KG[CV$5$l$?<!$N%3!<%I$O!"%Z!<%8$K$=$N$h$&$J(B
- $B%?%$%`%9%?%s%W$rF~$l$k$G$7$g$&!#$b$A$m$s!">e=R$N$h$&$K!"(B
- SSI $B$r@5$7$/F0:n2DG=$K$7$F$*$/I,MW$,$"$j$^$9!#(B</p>
-<example>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
-</example>
-
- <p>$B$b$A$m$s!"(B<code>ssi.shtml</code>
- $B$NItJ,$r<B:]$NEv3:%U%!%$%kL>$HCV$-49$($kI,MW$,$"$j$^$9!#(B
- $B$b$7!"$"$i$f$k%U%!%$%k$KD%$k$3$H$,$G$-$k0lHLE*$J%3!<%I$rC5$7$F$$$k$J$i!"(B
- $B$3$l$OITJX$G$"$k$+$b$7$l$^$;$s!#$*$=$i$/$=$N>l9g$O!"(B
- $B$=$&$9$kBe$o$j$KJQ?t(B <code>LAST_MODIFIED</code>
- $B$r;HMQ$7$?$$$H9M$($k$G$7$g$&(B:</p>
-<example>
- &lt;!--#config timefmt="%D" --&gt;<br />
- This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</example>
-
- <p><code>timefmt</code>
- $B=q<0$K$D$$$F$N$h$j>\:Y$K$D$$$F$O!"$*9%$_$N8!:w%5%$%H$K9T$-!"(B
- <code>strftime</code> $B$G8!:w$7$F$_$F$/$@$5$$!#J8K!$OF1$8$G$9!#(B</p>
-</section>
-
-<section id="standard-footer">
-<title>$BI8=`$N%U%C%?$rA^F~$9$k(B</title>
-
- <p>$B$b$7?t%Z!<%8$rD6$($k%Z!<%8$r;}$D%5%$%H$r4IM}$7$F$$$k$J$i$P!"(B
- $BA4%Z!<%8$KBP$7$FJQ9`$r9T$J$&$3$H$,K\Ev$K6lDK$H$J$jF@$k$3$H$,(B
- $BJ,$+$k$G$7$g$&!#A4$F$N%Z!<%8$KEO$C$F$"$k<o$NI8=`E*$J304Q$r(B
- $B0];}$7$h$&$H$7$F$$$k$J$i$PFC$K$=$&$G$7$g$&!#(B</p>
-
- <p>$B%X%C%@$d%U%C%?MQ$NA^F~MQ%U%!%$%k$r;HMQ$9$k$3$H$G!"(B
- $B$3$N$h$&$J99?7$K$+$+$kIiC4$r8:$i$9$3$H$,$G$-$^$9!#(B
- $B0l$D$N%U%C%?%U%!%$%k$r:n@.$7!"$=$l$r(B <code>include</code>
- SSI $B%3%^%s%I$G3F%Z!<%8$KF~$l$k$@$1$G:Q$_$^$9!#(B<code>include</code>
- $BMWAG$O!"(B<code>file</code> $BB0@-$^$?$O(B <code>virtual</code>
- $BB0@-$N$$$:$l$+$r;HMQ$7$F$I$N%U%!%$%k$rA^F~$9$k$+$r7h$a$k$3$H$,$G$-$^$9!#(B
- <code>file</code> $BB0@-$O!"(B<em>$B%+%l%s%H%G%#%l%/%H%j$+$i$NAjBP%Q%9$G<($5$l$?(B
- </em>$B%U%!%$%k%Q%9$G$9!#(B
- $B$=$l$O(B / $B$G;O$^$k@dBP%U%!%$%k%Q%9$K$O$G$-$:!"$^$?!"$=$N%Q%9$N0lIt$K(B ../
- $B$r4^$`$3$H$,$G$-$J$$$3$H$r0UL#$7$^$9!#(B<code>virtual</code>
- $BB0@-$O!"$*$=$i$/$h$jJXMx$@$H;W$$$^$9$,!"Ds6!$9$k%I%-%e%a%s%H$+$i$NAjBP(B
- URL $B$G;XDj$9$Y$-$G$9!#$=$l$O(B / $B$G;O$a$k$3$H$,$G$-$^$9$,!"(B
- $BDs6!$9$k%U%!%$%k$HF1$8%5!<%P>e$KB8:_$7$J$/$F$O$J$j$^$;$s!#(B</p>
-<example>
- &lt;!--#include virtual="/footer.html" --&gt;
-</example>
-
- <p>$B;d$O:G8e$NFs$D$rAH$_9g$o$;$F!"(B<code>LAST_MODIFIED</code>
- $B%G%#%l%/%F%#%V$r%U%C%?%U%!%$%k$NCf$KCV$/$3$H$,$h$/$"$j$^$9!#(B
- SSI $B%G%#%l%/%F%#%V$O!"A^F~MQ$N%U%!%$%k$K4^$^$;$?$j!"(B
- $BA^F~%U%!%$%k$N%M%9%H$r$7$?$j$9$k$3$H$,$G$-$^$9!#$9$J$o$A!"(B
- $BA^F~MQ$N%U%!%$%k$OB>$N%U%!%$%k$r:F5"E*$KA^F~$9$k$3$H$,$G$-$^$9!#(B</p>
-</section>
-
-</section>
-
-<section id="config">
-<title>$BB>$K2?$,@_Dj$G$-$k$N$+(B ?</title>
-
- <p>$B;~9o=q<0$r(B <code>config</code> $B$G@_Dj$G$-$k$3$H$K2C$($F!"(B
- $B99$KFs$D(B <code>config</code> $B$G@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$BDL>o!"(BSSI $B%G%#%l%/%F%#%V$G2?$+$,$&$^$/$$$+$J$$$H$-$O!"(B
- $B<!$N%a%C%;!<%8$,=PNO$5$l$^$9!#(B</p>
-<example>
- [an error occurred while processing this directive]
-</example>
-
- <p>$B$3$N%a%C%;!<%8$rB>$N$b$N$K$7$?$$>l9g!"(B<code>config</code>
- $BMWAG$N(B <code>errmsg</code> $BB0@-$GJQ99$9$k$3$H$,$G$-$^$9(B:</p>
-<example>
- &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</example>
-
- <p>$B$*$=$i$/!"%(%s%I%f!<%6$O$3$N%a%C%;!<%8$r7h$7$F8+$k$3$H$O$"$j$^$;$s!#(B
- $B$J$<$J$i!"$=$N%5%$%H$,@8$-$?>uBV$K$J$kA0$K(B SSI $B%G%#%l%/%F%#%V$K4X$9$k(B
- $BA4$F$NLdBj$r2r7h$7$F$$$k$O$:$@$+$i$G$9!#(B($B$=$&$G$9$h$M(B?)</p>
-
- <p>$B$=$7$F!"(B<code>config</code> $B$K$*$$$F(B <code>sizefmt</code>
- $BB0@-$r;HMQ$9$k$3$H$G!"(B
- $BJV$5$l$k%U%!%$%k%5%$%:$N=q<0$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
- $B%P%$%H?t$K$O(B <code>bytes</code> $B$r!"E,Ev$K(B Kb $B$d(B Mb
- $B$KC;=L$5$;$k$K$O(B <code>abbrev</code> $B$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
- </section>
-
-<section id="exec">
- <title>$B%3%^%s%I$N<B9T(B</title>
-
- <p>$B:#8e?t%v7n$N$&$A$K!">.$5$J(B CGI $B%W%m%0%i%`$H(B SSI
- $B$r;HMQ$9$k5-;v$r=P$7$?$$$H9M$($F$$$^$9!#$3$3$G$O$=$l$H$OJL$K!"(B
- <code>exec</code> $BMWAG$K$h$C$F9T$J$&$3$H$,$G$-$k$3$H$r<($7$^$9!#(B
- SSI $B$K%7%'%k(B ($B@53N$K$O(B <code>/bin/sh</code>$B!#(BWin32 $B$J$i$P(B DOS $B%7%'%k(B)
- $B$r;HMQ$7$F%3%^%s%I$r<B9T$5$;$k$3$H$,$G$-$^$9!#(B
- $B2<5-$NNc$G$O!"%G%#%l%/%H%j%j%9%H=PNO$r9T$J$$$^$9!#(B</p>
-<example>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="ls" --&gt;<br />
- &lt;/pre&gt;
-</example>
-
- <p>Windows $B>e$G$O!"(B</p>
-<example>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="dir" --&gt;<br />
- &lt;/pre&gt;
-</example>
-
- <p>Windows $B>e$G$O!"$3$N%G%#%l%/%F%#%V$K$h$C$F$$$/$D$+$N4qL/$J(B
- $B=q<0$K5$$E$/$G$7$g$&!#$J$<$J$i(B <code>dir</code> $B$N=PNO$,J8;zNs(B
- ``&lt;<code>dir</code>&gt;'' $B$r4^$_!"%V%i%&%6$r:.Mp$5$;$k$+$i$G$9!#(B</p>
-
- <p>$B$3$N5!G=$OHs>o$K4m81$G$"$j!"$I$s$J%3!<%I$G$b(B <code>exec</code>
- $B%?%0$KKd$a9~$^$l$F$7$^$($P<B9T$9$k$3$H$KCm0U$7$F$/$@$5$$!#Nc$($P(B
- `` $B%2%9%H%V%C%/(B '' $B$N$h$&$K!"$b$7!"(B
- $B%f!<%6$,%Z!<%8$NFbMF$rJT=8$G$-$k>u67$K$"$k$J$i$P!"(B
- $B$3$N5!G=$r3N<B$KM^@)$7$F$/$@$5$$!#(B<code>Options</code>
- $B%G%#%l%/%F%#%V$N(B <code>IncludesNOEXEC</code> $B0z?t$r;XDj$9$k$3$H$G!"(B
- SSI $B$O5v2D$9$k$1$l$I(B <code>exec</code>
- $B5!G=$O5v2D$7$J$$$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
- </section>
-
-<section id="advanced">
-<title>$B9bEY$J(B SSI $B%F%/%K%C%/(B</title>
-
- <p>$B%3%s%F%s%D$r=PNO$9$k$3$H$K2C$(!"(BApache SSI $B$OJQ?t$r@_Dj$7!"(B
- $B$=$7$FHf3S$H>r7oJ,4t$K$=$NJQ?t$r;HMQ$G$-$k5!G=$rDs6!$7$F$$$^$9!#(B
- </p>
-
-<section id="caveat"><title>$B7Y9p(B</title>
-
- <p>$B$3$N5-;v$G=R$Y$?BgItJ,$N5!G=$O!"(BApache 1.2
- $B0J9_$r;HMQ$7$F$$$k>l9g$N$_MxMQ2DG=$G$9!#$b$A$m$s!"$b$7(B Apache 1.2
- $B0J9_$r;HMQ$7$F$J$$>l9g!"D>$A$K%"%C%W%0%l!<%I$9$kI,MW$,$"$j$^$9!#(B
- $B$5$!!":#$=$l$r9T$J$$$J$5$$!#$=$l$^$GBT$C$F$$$^$9!#(B</p>
-</section>
-
-<section id="variables"><title>$BJQ?t$r@_Dj$9$k(B</title>
-
- <p><code>set</code> $B%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
- $B8e$G;HMQ$9$k$?$a$KJQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
- $B$3$l$O8e$N@bL@$GI,MW$K$J$k$N$G!"$3$3$G$=$l$K$D$$$F=R$Y$F$$$^$9!#(B
- $BJ8K!$O0J2<$N$H$*$j$G$9(B:</p>
-<example>
- &lt;!--#set var="name" value="Rich" --&gt;
-</example>
-
- <p>$B$3$N$h$&$KC1=c$KJ8;z$I$*$j$K@_Dj$9$k$3$H$K2C$(!"(B
- <a href="../env.html">$B4D6-JQ?t(B</a>$B$d>e5-$NJQ?t(B
- ($BNc$($P(B <code>LAST_MODIFIED</code> $B$N$h$&$J(B)
- $B$r4^$`B>$N$"$i$f$kJQ?t$rCM$r@_Dj$9$k$N$K;HMQ$9$k$3$H$,$G$-$^$9!#(B
- $BJQ?tL>$NA0$K%I%k5-9f(B ($) $B$r;HMQ$9$k$3$H$G!"(B
- $B$=$l$,%j%F%i%kJ8;zNs$G$O$J$/$FJQ?t$G$"$k$3$H$r<($7$^$9!#(B</p>
-<example>
- &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
-</example>
-
- <p>$B%I%k5-9f(B ($) $B$rJ8;z$H$7$FJQ?t$NCM$KF~$l$k$K$O!"(B
- $B%P%C%/%9%i%C%7%e$K$h$C$F%I%k5-9f$r%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B</p>
-<example>
- &lt;!--#set var="cost" value="\$100" --&gt;
-</example>
-
- <p>$B:G8e$K$J$j$^$9$,!"D9$$J8;zNs$NCf$KJQ?t$rCV$-$?$$>l9g$G!"(B
- $BJQ?tL>$,B>$NJ8;z$H$V$D$+$k2DG=@-$,$"$j!"(B
- $B$=$l$i$NJ8;z$K$D$$$F:.Mp$7$F$7$^$&>l9g!"$3$N:.Mp$r<h$j=|$/$?$a!"(B
- $BJQ?tL>$rCf3g8L$G0O$`$3$H$,$G$-$^$9(B
- ($B$3$l$K$D$$$F$NNI$$Nc$r<($9$N$OFq$7$$$N$G$9$,!"(B
- $B$*$=$i$/J,$+$C$F$$$?$@$1$k$G$7$g$&(B)$B!#(B
- </p>
-<example>
- &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</example>
-</section>
-
-<section id="conditional">
-<title>$B>r7o<0(B</title>
-
- <p>$B$5$F!"JQ?t$r;}$C$F$$$F!"(B
- $B$=$l$i$NCM$r@_Dj$7$FHf3S$9$k$3$H$,$G$-$k$N$G$9$+$i!"(B
- $B>r7o$rI=$9$?$a$K$=$l$i$r;HMQ$9$k$3$H$,$G$-$^$9!#$3$l$K$h$j(B
- SSI $B$O$"$k<o$N>.$5$J%W%m%0%i%_%s%08@8l$K$J$C$F$$$^$9!#(B
- <module>mod_include</module> $B$O>r7o$rI=8=$9$k$?$a$K(B <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code>
- $B9=B$$rDs6!$7$F$$$^$9!#$3$l$K$h$C$F!"(B
- $B0l$D$N<B:]$N%Z!<%8$+$iJ#?t$NO@M}%Z!<%8$r8z2LE*$K@8@.$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B>r7o9=B$$O0J2<$N$H$*$j$G$9(B:</p>
-<example>
- &lt;!--#if expr="test_condition" --&gt;<br />
- &lt;!--#elif expr="test_condition" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
-</example>
-
- <p><em>test_condition</em>
- $B$O$"$i$f$k<oN`$NO@M}E*Hf3S$r$9$k$3$H$,$G$-$^$9!#(B
- $BCM$rHf3S$7$?$j!"$=$NCM$,(B ``$B??(B'' $B$+$I$&$+$rI>2A$7$^$9(B
- ($B6u$G$J$$$J$iM?$($i$l$?J8;zNs$O??$G$9(B)$B!#(B
- $BMxMQ2DG=$JHf3S1i;;;R$NA4$F$N%j%9%H$K$D$$$F$O!"(B
- <module>mod_include</module> $B%I%-%e%a%s%F!<%7%g%s$r;2>H$7$F$/$@$5$$!#(B
- $B$3$3$G$O!"$3$N9=B$$r$I$&;HMQ$9$k$+$NNc$r$$$/$D$+<($7$^$9!#(B</p>
-
- <p>$B@_Dj%U%!%$%k$G<!$N9T$r5-=R$7$^$9(B:</p>
-<example>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</example>
-
- <p>$B$3$l$O%/%i%$%"%s%H$,(B Macintosh
- $B>e$G%$%s%?!<%M%C%H%(%/%9%W%m!<%i$,F0$$$F$$$k>l9g!"4D6-JQ?t(B
- ``Mac'' $B$H(B ``InternetExplorer'' $B$r??$H@_Dj$7$^$9!#(B</p>
-
- <p>$B<!$K!"(BSSI $B$,2DG=$K$J$C$?%I%-%e%a%s%H$G0J2<$r9T$J$$$^$9(B:
- </p>
-<example>
- &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
- Apologetic text goes here<br />
- &lt;!--#else --&gt;<br />
- Cool JavaScript code goes here<br />
- &lt;!--#endif --&gt;
-</example>
-
- <p>Mac $B>e$N(B IE $B$KBP$7$F2?$+;W$&$H$3$m$,$"$k$o$1$G$"$j$^$;$s!#(B
- $BB>$G$O<B9T$G$-$F$$$k$$$/$D$+$N(B JavaScript $B$r(B Mac $B>e$N(B IE
- $B$G<B9T$5$;$k$N$K!"@h=5?t;~4V6lO+$7$?$H$$$&$@$1$N$3$H$G$9!#(B
- $B>e$NNc$O$=$N;CDjE*$JBP=hJ}K!$G$9!#(B</p>
-
- <p>$BB>$N$I$s$JJQ?t(B ($B$"$J$?$,Dj5A$9$k$b$N!"(B
- $B$^$?$OIaDL$N4D6-JQ?t$N$$$:$l$+(B) $B$b!">r7oJ8$K;HMQ$9$k$3$H$,$G$-$^$9!#(B
- Apache $B$O(B <code>SetEnvIf</code> $B%G%#%l%/%F%#%V$dB>$N4XO"(B
- $B%G%#%l%/%F%#%V$r;HMQ$7$F4D6-JQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
- $B$3$N5!G=$K$h$j!"(BCGI
- $B$KMj$k$3$H$J$/$+$J$jJ#;($JF0E*$J$3$H$r$5$;$k$3$H$,$G$-$^$9!#(B</p>
-</section>
-</section>
-
-<section id="conclusion"><title>$B=*$o$j$K(B</title>
-
- <p>SSI $B$O3N$+$K(B CGI
- $B$dF0E*$J%&%'%V%Z!<%8$r@8@.$9$kB>$N5;=Q$KBe$o$k$b$N$G$O$"$j$^$;$s!#(B
- $B$7$+$7!"$?$/$5$s$NM>J,$J:n6H$r$;$:$K!"(B
- $B>/NL$NF0E*$J%3%s%F%s%D$r2C$($k$K$O$9$0$l$?J}K!$G$9!#(B</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/howto/ssi.xml.ko b/docs/manual/howto/ssi.xml.ko
deleted file mode 100644
index d32998f545..0000000000
--- a/docs/manual/howto/ssi.xml.ko
+++ /dev/null
@@ -1,427 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssi.xml.meta">
-<parentdocument href="./">How-To / Tutorials</parentdocument>
-
-<title>¾ÆÆÄÄ¡ ÅõÅ丮¾ó: Server Side Includes ¼Ò°³</title>
-
-<summary>
-<p>Server-side includes¸¦ »ç¿ëÇÏ¿© HTML ¹®¼­¿¡ µ¿ÀûÀÎ ³»¿ëÀ»
-Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<section id="related"><title>¼Ò°³</title>
- <related>
- <modulelist>
- <module>mod_include</module>
- <module>mod_cgi</module>
- <module>mod_expires</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">Options</directive>
- <directive module="mod_include">XBitHack</directive>
- <directive module="mod_mime">AddType</directive>
- <directive module="core">SetOutputFilter</directive>
- <directive module="mod_setenvif">BrowserMatchNoCase</directive>
- </directivelist>
-</related>
-
- <p>ÀÌ ±ÛÀº º¸Åë SSI¶ó°í ºÎ¸£´Â Server Side Includes¸¦ ¼³¸íÇÑ´Ù.
- SSI°¡ °¡´ÉÇϵµ·Ï ¼­¹ö¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ý°ú HTML ÆäÀÌÁö¿¡ µ¿ÀûÀÎ
- ³»¿ëÀ» Ãß°¡ÇÏ´Â ±âº»ÀûÀÎ SSI »ç¿ë¹ýÀ» ¼Ò°³ÇÑ´Ù.</p>
-
- <p>ÀÌ ±ÛÀÇ µÞºÎºÐÀº SSI Áö½Ã¾î Á¶°Ç¹®°ú °°Àº °í±Þ±â¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-
-</section>
-
-<section id="what"><title>SSI°¡ ¹«¾ùÀΰ¡?</title>
-
- <p>SSI (Server Side Includes)´Â HTML ÆäÀÌÁö¿¡ »ç¿ëÇÏ´Â Áö½Ã¾î·Î,
- ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÒ¶§ ¼­¹ö°¡ ó¸®ÇÑ´Ù. SSI¸¦ »ç¿ëÇϸé CGI
- ÇÁ·Î±×·¥À̳ª ´Ù¸¥ µ¿ÀûÀÎ ±â¼ú·Î ÆäÀÌÁö Àüü¸¦ ¸¸µé¾î¼­
- ¼­ºñ½ºÇÏÁö ¾Ê°íµµ HTML ÆäÀÌÁö¿¡ µ¿ÀûÀ¸·Î »ý¼ºÇÑ ³»¿ëÀ» Ãß°¡ÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>SSI¸¦ »ç¿ëÇÒÁö ¾Æ´Ï¸é ÇÁ·Î±×·¥À¸·Î ÆäÀÌÁö Àüü¸¦ »ý¼ºÇÒÁö
- °áÁ¤Àº ÆäÀÌÁö¿¡¼­ Á¤ÀûÀÎ ºÎºÐÀÌ ¸¹ÀºÁö¿Í ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÒ
- ¶§¸¶´Ù ¾î´ÀÁ¤µµ¸¦ ´Ù½Ã °è»êÇؾßÇÒÁö¿¡ ´Þ·È´Ù. SSI´Â ÇöÀç
- ½Ã°£°ú °°ÀÌ ÀûÀº Á¤º¸¸¦ Ãß°¡Çϴµ¥ ÁÁ´Ù. ±×·¯³ª ÆäÀÌÁö¸¦
- ¼­ºñ½ºÇÒ¶§ ÆäÀÌÁöÀÇ ´ëºÎºÐÀ» »ý¼ºÇØ¾ß ÇÑ´Ù¸é ´Ù¸¥ ¹æ¹ýÀ»
- ã¾ÆºÁ¾ß ÇÑ´Ù.</p>
-</section>
-
-<section id="configuring">
-<title>SSI°¡ °¡´ÉÇϵµ·Ï ¼­¹ö ¼³Á¤Çϱâ</title>
-
- <p>¼­¹ö°¡ SSI¸¦ ó¸®ÇÏ·Á¸é <code>httpd.conf</code> ÆÄÀÏÀ̳ª
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ ´ÙÀ½ Áö½Ã¾î¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-<example>
- Options +Includes
-</example>
-
- <p>±×·¯¸é ¾ÆÆÄÄ¡´Â ÆÄÀÏ¿¡¼­ SSI Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù. ¼³Á¤¿¡´Â
- º¸Åë ¿©·¯ <directive module="core">Options</directive> Áö½Ã¾î°¡
- ÀÖ°í, ÀÌ Áö½Ã¾îµéÀº ¼­·Î µ¤¾î½á¼­ ¹«È¿·Î ¸¸µé´Ù. ±×·¡¼­
- Áö½Ã¾î¸¦ ¸Ç¸¶Áö¸·¿¡ ó¸®ÇϱâÀ§ÇØ º¸Åë SSI¸¦ ¿øÇϴ ƯÁ¤
- µð·ºÅ丮¿¡¼­ <code>Options</code>¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <p>¸ðµç ÆÄÀÏ¿¡¼­ SSI Áö½Ã¾î¸¦ ó¸®ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ¾ÆÆÄÄ¡¿¡°Ô
- ¾î¶² ÆÄÀÏÀ» ó¸®ÇÒÁö ¾Ë·ÁÁà¾ß ÇÑ´Ù. µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.
- Çϳª´Â ´ÙÀ½°ú °°Àº Áö½Ã¾î·Î <code>.shtml</code>°ú °°Àº ƯÁ¤
- ÆÄÀÏ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ó¸®ÇÏ´Â ¹æ¹ýÀÌ´Ù.</p>
-<example>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</example>
-
- <p>ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº ÀÌ¹Ì ÀÖ´Â ÆäÀÌÁö¿¡ SSI Áö½Ã¾î¸¦ Ãß°¡ÇÏ´Â
- °æ¿ì SSI Áö½Ã¾î¸¦ ó¸®ÇϱâÀ§ÇØ <code>.shtml</code> È®ÀåÀÚ¸¦
- ºÎ¿©Çϱ⶧¹®¿¡ ÆÄÀϸí°ú ÀÌ ÆäÀÌÁöÀÇ ¸ðµç ¸µÅ©¸¦ º¯°æÇؾß
- ÇÏ´Â Á¡ÀÌ´Ù.</p>
-
- <p>´Ù¸¥ ¹æ¹ýÀº <directive module="mod_include">XBitHack</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù.</p>
-<example>
- XBitHack on
-</example>
-
- <p><directive module="mod_include">XBitHack</directive>´Â
- ½ÇÇà±ÇÇÑÀÌ ÀÖ´Â ÆÄÀÏ¿¡¼­ SSI Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù. ±×·¡¼­ À̹Ì
- ÀÖ´Â ÆäÀÌÁö¿¡ SSI Áö½Ã¾î¸¦ Ãß°¡ÇÑ´Ù¸é ÆÄÀϸíÀ» º¯°æÇÏÁö
- ¾Ê°í <code>chmod</code>·Î ÆÄÀÏ¿¡ ½ÇÇà±ÇÇÑÀ» ÁÖ¸é µÈ´Ù.</p>
-<example>
- chmod +x pagename.html
-</example>
-
- <p>ÇÏÁö ¸»¾Æ¾ß ÇÒ °Í Çϳª. °¡²û <code>.shtml</code> ÆÄÀÏ¸í¿¡
- °ñÄ¡¸¦ ¾ÎÁö¸»°í ¸ðµç <code>.html</code> ÆÄÀÏÀ» SSI ó¸®Ç϶ó°í
- Ãæ°íÇÏ´Â »ç¶÷ÀÌ ÀÖ´Ù. ÀÌ »ç¶÷µéÀº ¾Æ¸¶µµ <directive
- module="mod_include">XBitHack</directive>¿¡ ´ëÇØ ¸ð¸£´Â
- °Í °°´Ù. ¸í½ÉÇÒ Á¡Àº ÀÌ·¸°Ô ÇÏ¸é ¾ÆÆÄÄ¡´Â ÆÄÀÏ¿¡ SSI Áö½Ã¾î°¡
- ¾ø´õ¶óµµ Ŭ¶óÀ̾ðÆ®·Î º¸³»´Â ¸ðµç ÆÄÀÏÀ» »ìÆìºÁ¾ß ÇÑ´Ù´Â
- °ÍÀÌ´Ù. ¼º´ÉÀÌ ¸Å¿ì ´À·ÁÁú ¼ö ÀÖÀ¸¸ç, ÁÁÀº »ý°¢ÀÌ ¾Æ´Ï´Ù.</p>
-
- <p>¹°·Ð À©µµ¿ìÁî¿¡¼­´Â ½ÇÇà±ÇÇÑÀ̶õ °ÍÀÌ ¾ø±â¶§¹®¿¡ ÈÄÀÚ¸¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <p>³»¿ëÀÌ µ¿ÀûÀÌ¿©¼­ °è»êÇϱ⠾î·Æ±â¶§¹®¿¡ ¾ÆÆÄÄ¡ ±âº» ¼³Á¤Àº
- SSI ÆäÀÌÁöÀÇ ÃÖ±Ù¼öÁ¤ÀÏ°ú content length HTTP Çì´õ¸¦ º¸³»Áö
- ¾Ê´Â´Ù. ±×·¡¼­ ¹®¼­¸¦ ij½¬ÇÏÁö ¸øÇÏ°í Ŭ¶óÀ̾ðÆ®°¡ ´À³¢´Â
- ¼º´ÉÀÌ ¶³¾îÁø´Ù. µÎ°¡Áö ÇØ°á¹æ¹ýÀÌ ÀÖ´Ù.</p>
-
- <ol>
- <li><code>XBitHack Full</code> ¼³Á¤Àº »ç¿ëÇÑ´Ù. ±×·¯¸é
- ¾ÆÆÄÄ¡´Â Æ÷ÇÔÇÏ´Â(include) ÆÄÀϵéÀÇ ¼öÁ¤ÀÏÀº ¹«½ÃÇÑü
- ¿ø·¡ ¿äûÇÑ ÆÄÀÏÀÇ ³¯Â¥¸¸ º¸°í ÃÖ±Ù¼öÁ¤ÀÏÀ» ¾Ë¾Æ³½´Ù.</li>
-
- <li><module>mod_expires</module>¿¡ ÀÖ´Â Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ÆÄÀÏ¿¡ Á÷Á¢ ¸¸±âÀÏÀ» ¼³Á¤ÇÏ¸é ºê¶ó¿ìÀú¿Í ÇÁ·Ï½Ã°¡ ¹®¼­¸¦
- ij½¬ÇÒ ¼ö ÀÖ´Ù.</li>
- </ol>
-</section>
-
-<section id="basic"><title>±âº» SSI Áö½Ã¾î</title>
-
- <p>SSI Áö½Ã¾îÀÇ »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.</p>
-<example>
- &lt;!--#element attribute=value attribute=value ... --&gt;
-</example>
-
- <p>HTML ÁÖ¼®°°ÀÌ »ý°å±â¶§¹®¿¡ SSI ±â´ÉÀ» °¡µ¿ÇÏÁö ¾Ê¾Æµµ
- HTML ¼Ò½º¿¡´Â ³ª¿ÀÁö¸¸ ºê¶ó¿ìÀú´Â ¹«½ÃÇÑ´Ù. SSI¸¦ ¿Ã¹Ù·Î
- ¼³Á¤Çϸé Áö½Ã¾î¸¦ °á°ú°ªÀ¸·Î ¹Ù²Û´Ù.</p>
-
- <p>element´Â ´ÙÀ½Áß Çϳª´Ù. ´ÙÀ½ ȸ¿¡ ´õ ÀÚ¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù.
- Áö±ÝÀº SSI·Î ÇÒ ¼ö ÀÖ´Â ¸î°¡Áö ¿¹¸¦ º¸ÀδÙ</p>
-
-<section id="todaysdate"><title>¿À´Ã ³¯Â¥</title>
-
-<example>
- &lt;!--#echo var="DATE_LOCAL" --&gt;
-</example>
-
- <p><code>echo</code> element´Â º¯¼ö°ªÀ» ±×´ë·Î Ãâ·ÂÇÑ´Ù.
- CGI ÇÁ·Î±×·¥¿¡ Á¦°øÇϴ ȯ°æº¯¼öµé ¿Ü¿¡µµ ¿©·¯ Ç¥ÁØ º¯¼ö°¡
- ÀÖ´Ù. ¶Ç, <code>set</code> element¸¦ »ç¿ëÇÏ¿© Á÷Á¢ º¯¼ö¸¦
- Á¤ÀÇÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p>³¯Â¥ Ãâ·Â Çü½ÄÀÌ ¸¶À½¿¡ µéÁö ¾Ê´Â´Ù¸é, ´ÙÀ½°ú °°ÀÌ
- <code>config</code> elementÀÇ <code>timefmt</code> attribute¸¦
- »ç¿ëÇÑ´Ù.</p>
-
-<example>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</example>
-</section>
-
-<section id="lastmodified"><title>ÆÄÀÏÀÇ ¼öÁ¤ÀÏ</title>
-
-<example>
- ÀÌ ¹®¼­´Â &lt;!--#flastmod file="index.html" --&gt;¿¡ ¸¶Áö¸·À¸·Î ¼öÁ¤µÇ¾ú´Ù
-</example>
-
- <p>ÀÌ elementµµ <code>timefmt</code> Çü½Ä ¼³Á¤¿¡ ´Þ·È´Ù.</p>
-</section>
-
-<section id="cgi"><title>CGI ÇÁ·Î±×·¥ °á°ú¸¦ Æ÷ÇÔÇϱâ</title>
-
- <p>ÀϹÝÀûÀÎ SSI »ç¿ë¹ýÁß Çϳª·Î, ¸¹ÀÌµé ¾Ö¿ëÇÏ´Â ``¹æ¹®¼ö
- Ä«¿îÅÍ'' °°Àº CGI ÇÁ·Î±×·¥ °á°ú¸¦ Ãâ·ÂÇÑ´Ù.</p>
-
-<example>
- &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</example>
-
-</section>
-</section>
-
-<section id="additionalexamples">
-<title>Ãß°¡ ¿¹Á¦</title>
-
- <p>´ÙÀ½Àº HTML ¹®¼­¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸î°¡Áö SSI ¿¹Á¦´Ù.</p>
-
-<section id="docmodified"><title>ÀÌ ¹®¼­°¡ ¾ðÁ¦ ¸¶Áö¸·À¸·Î
-¼öÁ¤µÇ¾ú³ª?</title>
-
- <p>¾Õ¿¡¼­ SSI¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ¿¡°Ô ¹®¼­ÀÇ ÃÖ±Ù¼öÁ¤ÀÏÀ»
- ¾Ë¸± ¼ö ÀÖ´Ù°í ¸»Çß´Ù. ±×·¯³ª ½ÇÁ¦ ¹æ¹ýÀº ¾Ë·ÁÁÖÁö ¾Ê¾Ò´Ù.
- ´ÙÀ½ Äڵ带 HTML ¹®¼­¿¡ »ç¿ëÇϸé ÆäÀÌÁö¿¡ ½Ã°£ ±â·ÏÀ» ³²±ä´Ù.
- ¹°·Ð À§¿¡¼­ ¼³¸íÇÑ´ë·Î SSI°¡ ¿Ã¹Ù·Î ÀÛµ¿ÇØ¾ß ÇÑ´Ù.</p>
-<example>
- &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
- ÀÌ ¹®¼­´Â &lt;!--#flastmod file="ssi.shtml" --&gt;¿¡ ¸¶Áö¸·À¸·Î ¼öÁ¤µÇ¾ú´Ù;
-</example>
-
- <p>¹°·Ð <code>ssi.shtml</code>´ë½Å ¿øÇÏ´Â ½ÇÁ¦ ÆÄÀϸíÀ»
- »ç¿ëÇÑ´Ù. ¾Æ¹« ÆäÀÌÁö¿¡¶óµµ ºÙ¿©³ÖÀ» ¼ö ÀÖ´Â ¹ü¿ëÄڵ带
- ¿øÇÑ´Ù¸é, ÆÄÀÏ¸í ´ë½Å <code>LAST_MODIFIED</code> º¯¼ö¸¦
- »ç¿ëÇÑ´Ù.</p>
-<example>
- &lt;!--#config timefmt="%D" --&gt;<br />
- This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</example>
-
- <p><code>timefmt</code> Çü½Ä¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â °Ë»ö¿£Áø¿¡¼­
- <code>strftime</code>À» ã¾ÆºÁ¶ó. ¹®¹ýÀº °°´Ù.</p>
-</section>
-
-<section id="standard-footer">
-<title>Ç¥ÁØ ÆäÀÌÁö ÇÏ´ÜÀ» Æ÷ÇÔÇϱâ</title>
-
- <p>¿©·¯ ÆäÀÌÁö°¡ ÀÖ´Â »çÀÌÆ®¸¦ °ü¸®ÇÑ´Ù¸é ÆäÀÌÁö Àüü¸¦
- ¼öÁ¤ÇÏ´Â °ÍÀº, ƯÈ÷ ÆäÀÌÁöµéÀÌ Ç¥ÁØ ¿Ü°üÀ» °¡Áöµµ·Ï ¼öÁ¤ÇÏ´Â
- °ÍÀº Á¤¸»·Î ±«·Ó´Ù.</p>
-
- <p>ÆäÀÌÁö »ó´Ü(header)°ú ÇÏ´Ü(footer)À» ÆÄÀÏ·Î Æ÷ÇÔÇÏ¿©
- ÀÌ·± ¼öÁ¤ÀÇ ºÎ´ãÀ» ´ú ¼ö ÀÖ´Ù. ¸ðµç ÆäÀÌÁö¿¡¼­
- <code>include</code> SSI ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ÆäÀÌÁö ÇÏ´Ü ÆÄÀÏ
- Çϳª¸¦ Æ÷ÇÔÇÏ¸é µÈ´Ù. <code>include</code> elementÀÇ
- <code>file</code> attribute³ª <code>virtual</code> attribute·Î
- Æ÷ÇÔÇÒ ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. <code>file</code> attribute´Â <em>ÇöÀç
- µð·ºÅ丮¿¡ »ó´ëÀûÀÎ</em> ÆÄÀÏ°æ·Î´Ù. Áï, (/·Î ½ÃÀÛÇÏ´Â)
- Àý´ëÆÄÀÏ°æ·Î³ª °æ·Î ¾È¿¡ ../¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¾Æ¸¶µµ ¼­ºñ½ºÇÏ´Â
- ¹®¼­ÀÇ »ó´ë URLÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â <code>virtual</code> attribute°¡
- ´õ À¯¿ëÇÒ °ÍÀÌ´Ù. °æ·Î¸¦ /·Î ½ÃÀÛÇÒ ¼ö ÀÖÁö¸¸, Æ÷ÇÔÇÏ·Á´Â
- ÆÄÀÏÀÌ ¼­ºñ½ºÇÏ´Â ÆÄÀÏ°ú °°Àº ¼­¹ö¿¡ ÀÖ¾î¾ß ÇÑ´Ù.</p>
-<example>
- &lt;!--#include virtual="/footer.html" --&gt;
-</example>
-
- <p>³ª´Â º¸Åë ÀÌ µÎ°¡Áö¸¦ ÇÕÃļ­ Æ÷ÇÔÇÒ ÆäÀÌÁö ÇÏ´Ü ÆÄÀÏ¿¡
- <code>LAST_MODIFIED</code> Áö½Ã¾î¸¦ ³Ö´Â´Ù. Æ÷ÇÔÇÏ·Á´Â ÆÄÀÏ¿¡µµ
- SSI Áö½Ã¾î°¡ ³ª¿Ã ¼ö ÀÖÀ¸¸ç, ÀÌ·¸°Ô Æ÷ÇÔÇÑ ÆÄÀÏÀÌ ´Ù¸¥ ÆÄÀÏÀ»
- Æ÷ÇÔÇÏ´Â ½ÄÀ¸·Î ¿©·¯¹ø °è¼Ó Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù.</p>
-</section>
-
-</section>
-
-<section id="config">
-<title>ÀÌ¿Ü¿¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â °ÍÀº?</title>
-
- <p>½Ã°£ Çü½Ä <code>config</code>(¼³Á¤) ¿Ü¿¡ µÎ°¡Áö¸¦ ´õ
- <code>config</code>(¼³Á¤)ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>º¸Åë SSI Áö½Ã¾î°¡ À߸øµÇ¸é ´ÙÀ½°ú °°Àº ¹®±¸°¡ ³ª¿Â´Ù</p>
-<example>
- [an error occurred while processing this directive]
-</example>
-
- <p>ÀÌ ¹®±¸¸¦ º¯°æÇÏ°í ½Í´Ù¸é <code>config</code> elementÀÇ
- <code>errmsg</code> attribute¸¦ »ç¿ëÇÏ¿© º¯°æÇÑ´Ù.</p>
-<example>
- &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</example>
-
- <p>»çÀÌÆ®¸¦ ¼­ºñ½ºÇϱâ Àü¿¡ ¸ðµç SSI Áö½Ã¾î ¹®Á¦¸¦ ÇØ°áÇÏ¿©
- »ç¿ëÀÚ°¡ ÀÌ·± ¹®±¸¸¦ º¸Áö ¾Ê±æ ¹Ù¶õ´Ù. (±×·¸Áö?)</p>
-
- <p>±×¸®°í <code>sizefmt</code> attribute°¡ ¹ÝȯÇÏ´Â ÆÄÀÏÅ©±â
- Çü½ÄÀ» <code>config</code>(¼³Á¤)ÇÒ ¼ö ÀÖ´Ù. ¹ÙÀÌÆ®·Î Å©±â¸¦
- º¸¿©ÁÖ·Á¸é <code>bytes</code>, ÀûÀýÈ÷ Kb³ª Mb·Î Å©±â¸¦
- º¸¿©ÁÖ·Á¸é <code>abbrev</code>¸¦ »ç¿ëÇÑ´Ù.</p>
- </section>
-
-<section id="exec">
- <title>¸í·É¾î ½ÇÇàÇϱâ</title>
-
- <p>³ª´Â ´ÙÀ½ ´Þ¿¡ ÀÛÀº CGI ÇÁ·Î±×·¥°ú SSI¸¦ °°ÀÌ »ç¿ëÇÏ´Â
- ±ÛÀ» ¾µ ¿¹Á¤ÀÌ´Ù. Áö±ÝÀº <code>exec</code> element·Î ÇÒ
- ¼ö ÀÖ´Â ´Ù¸¥ °ÍµéÀ» ¼³¸íÇÒ °ÍÀÌ´Ù. SSI´Â ½ÇÁ¦ ½©À» (Á¤È®È÷´Â
- <code>/bin/sh</code>³ª Win32¸¦ »ç¿ëÇÑ´Ù¸é DOS ½©) »ç¿ëÇÏ¿©
- ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½Àº µð·ºÅ丮 ¸ñ·ÏÀ» º¸¿©ÁØ´Ù.</p>
-<example>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="ls" --&gt;<br />
- &lt;/pre&gt;
-</example>
-
- <p>or, on Windows</p>
-<example>
- &lt;pre&gt;<br />
- &lt;!--#exec cmd="dir" --&gt;<br />
- &lt;/pre&gt;
-</example>
-
- <p><code>dir</code> Ãâ·Â¿¡ ºê¶ó¿ìÀú°¡ È¥µ¿ÇÒ
- ``&lt;<code>dir</code>&gt;'' ¹®ÀÚ¿­ÀÌ Æ÷ÇÔµÇÀֱ⶧¹®¿¡,
- À©µµ¿ìÁî¿¡¼­ ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é °á°ú°¡ Á¶±Ý ÀÌ»óÇÒ °ÍÀÌ´Ù.</p>
-
- <p>ÀÌ ±â´ÉÀº <code>exec</code> ű׿¡ »ç¿ëÇÑ ¾î¶² ¸í·É¾î¶óµµ
- ½ÇÇàÇÒ ¼ö Àֱ⶧¹®¿¡ ¸Å¿ì À§ÇèÇÏ´Ù. ``¹æ¸í·Ï''°ú °°ÀÌ »ç¿ëÀÚ°¡
- À¥ÆäÀÌÁö ³»¿ëÀ» ¼öÁ¤ÇÒ ¼ö Àִ ȯ°æÀ̶ó¸é, ÀÌ ±â´ÉÀ» Àý´ë·Î
- »ç¿ëÇؼ± ¾ÈµÈ´Ù. <code>Options</code> Áö½Ã¾î¿¡
- <code>IncludesNOEXEC</code> ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇÏ¿© SSI¸¦ Çã¿ëÇÏÁö¸¸
- <code>exec</code> ±â´ÉÀ» ¸·À» ¼ö ÀÖ´Ù.</p>
- </section>
-
-<section id="advanced">
-<title>°í±Þ SSI ±â¹ý</title>
-
- <p>³»¿ëÀ» Ãâ·ÂÇÏ´Â ±â´É ¿Ü¿¡ ¾ÆÆÄÄ¡ SSI´Â º¯¼ö ¼³Á¤ÀÌ °¡´ÉÇÏ°í,
- ºñ±³¹®°ú Á¶°Ç¹®¿¡ ÀÌ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
-<section id="caveat"><title>°æ°í</title>
-
- <p>ÀÌ ±Û¿¡¼­ ¼³¸íÇÏ´Â ´ëºÎºÐÀÇ ±â´ÉÀº ¾ÆÆÄÄ¡ 1.2 ÀÌÈĺÎÅÍ
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð, ¾ÆÆÄÄ¡ 1.2 ÀÌ»óÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é
- ¾Æ¸¶µµ »¡¸® ¾÷±×·¹À̵åÇØ¾ß ÇÑ´Ù. Çضó. Áö±Ý Çضó. ±â´Ù¸±
- °ÍÀÌ´Ù.</p>
-</section>
-
-<section id="variables"><title>º¯¼ö ¼³Á¤</title>
-
- <p><code>set</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ³ªÁß¿¡ »ç¿ëÇÒ º¯¼ö¸¦
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î º¯¼ö°¡ ÇÊ¿äÇϱ⶧¹®¿¡ ¸ÕÀú ¼³¸íÇÑ´Ù.
- ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.</p>
-<example>
- &lt;!--#set var="name" value="Rich" --&gt;
-</example>
-
- <p>´ÙÀ½°ú °°ÀÌ °ªÀ» ¹®ÀÚ±×´ë·Î ¼³Á¤ÇÏÁö ¾Ê°í <a
- href="../env.html">ȯ°æº¯¼ö</a>³ª À§¿¡¼­ ¼³¸íÇÑ º¯¼ö(¿¹¸¦
- µé¾î, <code>LAST_MODIFIED</code>)¿Í °°ÀÌ ´Ù¸¥ º¯¼ö¸¦ »ç¿ëÇÏ¿©
- º¯¼ö°ªÀ» ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. À̶§ º¯¼ö¸í ¾Õ¿¡ ´Þ·¯ Ç¥½Ã($)¸¦
- ºÙ¿©¼­ ¹®ÀÚ¿­ÀÌ ¾Æ´Ñ º¯¼öÀÓÀ» Ç¥½ÃÇÑ´Ù.</p>
-
- <example> &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
- </example>
-
- <p>º¯¼ö°ª¿¡ ´Þ·¯ ¹®ÀÚ¸¦ ±×´ë·Î ÀÔ·ÂÇÏ·Á¸é ´Þ·¯ Ç¥½Ã ¾Õ¿¡
- ¹é½½·¡½¬¸¦ »ç¿ëÇÑ´Ù.</p>
-<example>
- &lt;!--#set var="cost" value="\$100" --&gt;
-</example>
-
- <p>¸¶Áö¸·À¸·Î ±ä ¹®ÀÚ¿­ Áß°£¿¡ º¯¼ö¸¦ »ç¿ëÇϴµ¥ µÚ¿¡ ÀÖ´Â
- ¹®ÀÚµµ º¯¼ö¸íÀ¸·Î ¿ÀÀÎÇÏ¿© È¥µ¿µÇ´Â °æ¿ì, º¯¼ö¸íÀ» ´ë°ýÈ£·Î
- ¹­¾î¼­ È®½ÇÈ÷ ÇÑ´Ù. (ÁÁÀº ¿¹¸¦ ã±â ÈûµéÁö¸¸, ¹«½¼ ¸»ÀÎÁö
- ÀÌÇØÇÏ±æ ¹Ù¶õ´Ù.)</p>
-<example>
- &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</example>
-</section>
-
-<section id="conditional">
-<title>Á¶°Ç Ç¥Çö½Ä</title>
-
- <p>º¯¼ö¸¦ ¼³Á¤ÇÏ°í ºñ±³ÇÒ ¼ö ÀÖÀ¸´Ï Á¶°Ç¹®ÀÌ °¡´ÉÇÏ´Ù. ÀÌÁ¦
- SSI°¡ ÀÏÁ¾ÀÇ °£´ÜÇÑ ÇÁ·Î±×·¡¹Ö¾ð¾î°¡ µÈ´Ù.
- <module>mod_include</module>´Â Á¶°Ç¹®À» ¸¸µå´Â <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code>
- ±¸Á¶¸¦ Á¦°øÇÑ´Ù. ½ÇÁ¦ ÇÑ ÆäÀÌÁö·Î ¿©·¯ ³í¸®ÀûÀÎ ÆäÀÌÁö¸¦
- ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <p>Á¶°Ç¹® ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.</p>
-<example>
- &lt;!--#if expr="test_condition" --&gt;<br />
- &lt;!--#elif expr="test_condition" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
-</example>
-
- <p><em>test_condition</em>¿¡´Â ¾î¶² ³í¸®ºñ±³¶óµµ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. °ªÀ» ´Ù¸¥ °ª°ú ºñ±³Çϰųª, ƯÁ¤ °ªÀÌ ``Âü''ÀÎÁö
- °Ë»çÇÑ´Ù. (¹®ÀÚ¿­ÀÌ ºñ¾îÀÖÁö ¾ÊÀ¸¸é ÂüÀÌ´Ù.) »ç¿ë°¡´ÉÇÑ
- ºñ±³ ¿¬»êÀÚ¸¦ ¸ðµÎ º¸·Á¸é, <module>mod_include</module>
- ¹®¼­¸¦ Âü°íÇ϶ó. ´ÙÀ½Àº Á¶°Ç¹®À» »ç¿ëÇÑ ¸î°¡Áö ¿¹Á¦´Ù.</p>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½ ÁÙÀ» Ãß°¡ÇÑ´Ù.</p>
-<example>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</example>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ ¸ÆŲÅä½Ã¿¡¼­ ½ÇÇàÇÏ´Â Internet Explorer¶ó¸é
- ȯ°æº¯¼ö ``Mac''°ú ``InternetExplorer'' ¸ðµÎ ÂüÀ¸·Î ¼³Á¤ÇÑ´Ù.</p>
-
- <p>±×¸®°í SSI ¹®¼­¿¡ ´ÙÀ½°ú °°ÀÌ Àû´Â´Ù.</p>
-<example>
- &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
- ¿©±â¿¡ »ç°ú¹®°¡ ³ª¿Â´Ù<br />
- &lt;!--#else --&gt;<br />
- ¿©±â¿¡ ¸ÚÁø JavaScript Äڵ尡 ³ª¿Â´Ù<br />
- &lt;!--#endif --&gt;
-</example>
-
- <p>³»°¡ ¸ÅŲÅä½Ã IE¿¡ ¹Ý°¨ÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ³ª´Â ´ÜÁö
- Àú¹øÁÖ¿¡ ´Ù¸¥ °÷¿¡¼­´Â ¹®Á¦°¡ ¾ø´Â JavaScript Äڵ尡 ¸ÅŲÅä½Ã
- IE¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê¾Æ¼­ ¸î½Ã°£À» °í»ýÇß´Ù. À§´Â ÀÓ½Ã
- ÇØ°áÃ¥ÀÌ´Ù.</p>
-
- <p>(Á÷Á¢ Á¤ÀÇÇÏ¿´°Ç ÀÏ¹Ý È¯°æº¯¼öÀÌ°Ç) ¾î¶² º¯¼ö¶óµµ Á¶°Ç¹®¿¡
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾Æ¶óÄ¡´Â <code>SetEnvIf</code>³ª ´Ù¸¥ °ü·Ã
- Áö½Ã¾î·Î ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö Àֱ⶧¹®¿¡ CGI ¾øÀ̵µ ¸ÚÁö°Ô
- µ¿ÀûÀÎ ³»¿ëÀ» ¸¸µé ¼ö ÀÖ´Ù.</p>
-</section>
-</section>
-
-<section id="conclusion"><title>°á·Ð</title>
-
- <p>SSI´Â È®½ÇÈ÷ CGI³ª µ¿ÀûÀÎ À¥ÆäÀÌÁö¸¦ »ý¼ºÇÏ´Â ´Ù¸¥ ±â¼úÀ»
- ´ëüÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ¸¹Àº Ãß°¡ ÀÛ¾÷¾øÀÌ ÆäÀÌÁö¿¡ µ¿ÀûÀÎ
- ³»¿ëÀ» Á¶±Ý Ãß°¡Çϱ⿡´Â ÈǸ¢ÇÑ ¹æ¹ýÀÌ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/howto/ssi.xml.meta b/docs/manual/howto/ssi.xml.meta
deleted file mode 100644
index 0427d2dcd3..0000000000
--- a/docs/manual/howto/ssi.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ssi</basename>
- <path>/howto/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/images/apache_header.gif b/docs/manual/images/apache_header.gif
deleted file mode 100644
index 260e421bf4..0000000000
--- a/docs/manual/images/apache_header.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/custom_errordocs.png b/docs/manual/images/custom_errordocs.png
deleted file mode 100644
index f2b94907ce..0000000000
--- a/docs/manual/images/custom_errordocs.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/down.gif b/docs/manual/images/down.gif
deleted file mode 100755
index 2194532b45..0000000000
--- a/docs/manual/images/down.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/favicon.ico b/docs/manual/images/favicon.ico
deleted file mode 100755
index bfb4f63ab6..0000000000
--- a/docs/manual/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/feather.gif b/docs/manual/images/feather.gif
deleted file mode 100755
index 441e3dd1a1..0000000000
--- a/docs/manual/images/feather.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/feather.png b/docs/manual/images/feather.png
deleted file mode 100644
index 5dd0dd1057..0000000000
--- a/docs/manual/images/feather.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/home.gif b/docs/manual/images/home.gif
deleted file mode 100644
index 11299c1cb7..0000000000
--- a/docs/manual/images/home.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/index.gif b/docs/manual/images/index.gif
deleted file mode 100644
index 741c8939d7..0000000000
--- a/docs/manual/images/index.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/left.gif b/docs/manual/images/left.gif
deleted file mode 100755
index 2be39310bd..0000000000
--- a/docs/manual/images/left.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig1.gif b/docs/manual/images/mod_rewrite_fig1.gif
deleted file mode 100644
index 664ac1e7bb..0000000000
--- a/docs/manual/images/mod_rewrite_fig1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig1.png b/docs/manual/images/mod_rewrite_fig1.png
deleted file mode 100644
index f914f681ad..0000000000
--- a/docs/manual/images/mod_rewrite_fig1.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig2.gif b/docs/manual/images/mod_rewrite_fig2.gif
deleted file mode 100644
index 3ea8cb65a3..0000000000
--- a/docs/manual/images/mod_rewrite_fig2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig2.png b/docs/manual/images/mod_rewrite_fig2.png
deleted file mode 100644
index 90dbf544d0..0000000000
--- a/docs/manual/images/mod_rewrite_fig2.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/pixel.gif b/docs/manual/images/pixel.gif
deleted file mode 100644
index c0801475d2..0000000000
--- a/docs/manual/images/pixel.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/right.gif b/docs/manual/images/right.gif
deleted file mode 100755
index f27eb9701a..0000000000
--- a/docs/manual/images/right.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/sub.gif b/docs/manual/images/sub.gif
deleted file mode 100644
index 93061c5ad7..0000000000
--- a/docs/manual/images/sub.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/up.gif b/docs/manual/images/up.gif
deleted file mode 100755
index 5afcbe2dbb..0000000000
--- a/docs/manual/images/up.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/index.html b/docs/manual/index.html
deleted file mode 100644
index 0ade248703..0000000000
--- a/docs/manual/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-URI: index.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.fr
-Content-Language: fr
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/index.html.de b/docs/manual/index.html.de
deleted file mode 100644
index 1a147d2aa1..0000000000
--- a/docs/manual/index.html.de
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Dokumentation zum Apache HTTP Server Version 2.1 - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="index-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a></div>
-<div id="page-content"><h1>Dokumentation zum Apache HTTP Server Version 2.1</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Google-Suche" type="submit" /><input value="10" name="num" type="hidden" /><input value="de" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Apache 2.1" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Hinweise zur Version</a></h2>
-<ul><li><a href="new_features_2_0.html">Neue Funktionen in Version 2.0</a></li>
-<li><a href="upgrading.html">Upgrade auf Version 2.0</a></li>
-<li><a href="license.html">Apache-Lizenz</a></li>
-</ul>
-</div><div class="category"><h2><a name="manual" id="manual">Bedienungsanleitung</a></h2>
-<ul><li><a href="install.html">Kompilieren und Installieren</a></li>
-<li><a href="invoking.html">Starten</a></li>
-<li><a href="stopping.html">Stoppen und Neustarten</a></li>
-<li><a href="mod/directives.html">Konfigurationsanweisungen</a></li>
-<li><a href="mod/quickreference.html">Kurzreferenz der Direktiven</a></li>
-<li><a href="mod/">Module</a></li>
-<li><a href="mpm.html">Multi-Processing-Module (MPMs)</a></li>
-<li><a href="filter.html">Filter</a></li>
-<li><a href="handler.html">Handler</a></li>
-<li><a href="programs/">Server und Hilfsprogramme</a></li>
-<li><a href="glossary.html">Glossar</a></li>
-</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">Benutzerhandbuch</a></h2>
-<ul><li><a href="bind.html">Bindung</a></li>
-<li><a href="configuring.html">Konfigurationsdateien</a></li>
-<li><a href="sections.html">Konfigurationsabschnitte</a></li>
-<li><a href="content-negotiation.html">Content Negotiation</a></li>
-<li><a href="dso.html">Dynamic Shared Objects (DSO)</a></li>
-<li><a href="env.html">Umgebungsvariablen</a></li>
-<li><a href="logs.html">Log-Dateien</a></li>
-<li><a href="urlmapping.html">URLs auf das Dateisystem abbilden</a></li>
-<li><a href="misc/perf-tuning.html">Performance-Hinweise</a></li>
-<li><a href="misc/security_tips.html">Tipps zur Sicherheit</a></li>
-<li><a href="server-wide.html">Serverweite Konfiguration</a></li>
-<li><a href="ssl/">SSL/TLS-Verschlüsselung</a></li>
-<li><a href="suexec.html">Suexec für CGI</a></li>
-<li><a href="misc/rewriteguide.html">Einführung in die
- URL-Manipulation</a></li>
-<li><a href="vhosts/">Virtual-Hosts</a></li>
-</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">Praxis / Anleitungen</a></h2>
-<ul><li><a href="howto/auth.html">Authentisierung, Autorisierung und
- Zugriffskontrolle</a></li>
-<li><a href="howto/cgi.html">CGI: Dynamische Inhalte</a></li>
-<li><a href="howto/htaccess.html">.htaccess-Dateien</a></li>
-<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">Web-Verzeichnisse für Benutzer
- (public_html)</a></li>
-</ul>
-</div><div class="category"><h2><a name="platform" id="platform">Plattform-spezifische Anmerkungen</a></h2>
-<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">EBCDIC-Portierung</a></li>
-</ul>
-</div><div class="category"><h2><a name="other" id="other">Weitere Themen</a></h2>
-<ul><li><a href="faq/">Häufig gestellte Fragen (FAQ)</a></li>
-<li><a href="sitemap.html">Seitenindex</a></li>
-<li><a href="developer/">Dokumentation für Entwickler</a></li>
-<li><a href="misc/">Sonstiges</a></li>
-</ul>
-</div></td></tr></table></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/index.html.en b/docs/manual/index.html.en
deleted file mode 100644
index c32e04f666..0000000000
--- a/docs/manual/index.html.en
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache HTTP Server Version 2.1 Documentation - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="index-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a></div>
-<div id="page-content"><h1>Apache HTTP Server Version 2.1 Documentation</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Google Search" type="submit" /><input value="10" name="num" type="hidden" /><input value="en" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Apache 2.1" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Release Notes</a></h2>
-<ul><li><a href="new_features_2_0.html">New features with Apache 2.0</a></li>
-<li><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></li>
-<li><a href="license.html">Apache License</a></li>
-</ul>
-</div><div class="category"><h2><a name="manual" id="manual">Reference Manual</a></h2>
-<ul><li><a href="install.html">Compiling and Installing</a></li>
-<li><a href="invoking.html">Starting</a></li>
-<li><a href="stopping.html">Stopping or Restarting</a></li>
-<li><a href="mod/directives.html">Run-time Configuration Directives</a></li>
-<li><a href="mod/quickreference.html">Directive Quick-Reference</a></li>
-<li><a href="mod/">Modules</a></li>
-<li><a href="mpm.html">Multi-Processing Modules (MPMs)</a></li>
-<li><a href="filter.html">Filters</a></li>
-<li><a href="handler.html">Handlers</a></li>
-<li><a href="programs/">Server and Supporting Programs</a></li>
-<li><a href="glossary.html">Glossary</a></li>
-</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">Users' Guide</a></h2>
-<ul><li><a href="bind.html">Binding</a></li>
-<li><a href="configuring.html">Configuration Files</a></li>
-<li><a href="sections.html">Configuration Sections</a></li>
-<li><a href="content-negotiation.html">Content Negotiation</a></li>
-<li><a href="dso.html">Dynamic Shared Objects (DSO)</a></li>
-<li><a href="env.html">Environment Variables</a></li>
-<li><a href="logs.html">Log Files</a></li>
-<li><a href="urlmapping.html">Mapping URLs to the Filesystem</a></li>
-<li><a href="misc/perf-tuning.html">Performance Tuning</a></li>
-<li><a href="misc/security_tips.html">Security Tips</a></li>
-<li><a href="server-wide.html">Server-Wide Configuration</a></li>
-<li><a href="ssl/">SSL/TLS Encryption</a></li>
-<li><a href="suexec.html">Suexec Execution for CGI</a></li>
-<li><a href="misc/rewriteguide.html">URL Rewriting Guide</a></li>
-<li><a href="vhosts/">Virtual Hosts</a></li>
-</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">How-To / Tutorials</a></h2>
-<ul><li><a href="howto/auth.html">Authentication, Authorization, and Access
- Control</a></li>
-<li><a href="howto/cgi.html">CGI: Dynamic Content</a></li>
-<li><a href="howto/htaccess.html">.htaccess files</a></li>
-<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">Per-user Web Directories
- (public_html)</a></li>
-</ul>
-</div><div class="category"><h2><a name="platform" id="platform">Platform Specific Notes</a></h2>
-<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">EBCDIC Port</a></li>
-</ul>
-</div><div class="category"><h2><a name="other" id="other">Other Topics</a></h2>
-<ul><li><a href="faq/">Frequently Asked Questions</a></li>
-<li><a href="sitemap.html">Sitemap</a></li>
-<li><a href="developer/">Documentation for Developers</a></li>
-<li><a href="misc/">Other Notes</a></li>
-</ul>
-</div></td></tr></table></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/index.html.es b/docs/manual/index.html.es
deleted file mode 100644
index b4603e811b..0000000000
--- a/docs/manual/index.html.es
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Versión 2.1 de la documentación del Servidor de HTTP Apache - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="index-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a></div>
-<div id="page-content"><h1>Versión 2.1 de la documentación del Servidor de HTTP Apache</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Buscar en Google" type="submit" /><input value="10" name="num" type="hidden" /><input value="es" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Apache 2.1" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Notas de la Versión</a></h2>
-<ul><li><a href="new_features_2_0.html">Nuevas funcionalidades en
- Apache 2.0</a></li>
-<li><a href="upgrading.html">Actualizarse a la versión 2.0 desde la 1.3</a></li>
-<li><a href="license.html">Licencia Apache</a></li>
-</ul>
-</div><div class="category"><h2><a name="manual" id="manual">Manual de Referencia</a></h2>
-<ul><li><a href="install.html">Compilación e Instalación</a></li>
-<li><a href="invoking.html">Iniciar Apache</a></li>
-<li><a href="stopping.html">Parar y reiniciar Apache</a></li>
-<li><a href="mod/directives.html">Directivas para configurar la
-ejecución</a></li>
-<li><a href="mod/quickreference.html">Guía rápida de
- Referencia de Directivas</a></li>
-<li><a href="mod/">Módulos</a></li>
-<li><a href="mpm.html">Módulos de MultiProcesamiento (MPMs)</a></li>
-<li><a href="filter.html">Filtros</a></li>
-<li><a href="handler.html">Handlers</a></li>
-<li><a href="programs/">El Servidor Apache y Programas de Soporte</a></li>
-<li><a href="glossary.html">Glosario</a></li>
-</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">Guía del Usuario</a></h2>
-<ul><li><a href="bind.html">Puertos de escucha</a></li>
-<li><a href="configuring.html">Ficheros de Configuración</a></li>
-<li><a href="sections.html">Secciones de Configuración</a></li>
-<li><a href="content-negotiation.html">Negociación de Contenidos</a></li>
-<li><a href="dso.html">Objetos Dinámicos Compartidos (DSO)</a></li>
-<li><a href="env.html">Variables de Entorno</a></li>
-<li><a href="logs.html">Archivos Log</a></li>
-<li><a href="urlmapping.html">Mapear URLs a ubicaciones de un
- sistema de ficheros</a></li>
-<li><a href="misc/perf-tuning.html">Ajustes para conseguir un mejor rendimiento</a></li>
-<li><a href="misc/security_tips.html">Consejos de Seguridad</a></li>
-<li><a href="server-wide.html">Configuración Básica de Apache</a></li>
-<li><a href="ssl/">Encriptado SSL/TLS</a></li>
-<li><a href="suexec.html">Ejecución de Suexec para CGIs</a></li>
-<li><a href="misc/rewriteguide.html">Documentación adicional
- sobre mod_rewrite</a></li>
-<li><a href="vhosts/">Hosting Virtual</a></li>
-</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">How-To / Tutoriales</a></h2>
-<ul><li><a href="howto/auth.html">Autentificación,
- Autorización, y Control de Acceso</a></li>
-<li><a href="howto/cgi.html">CGI: Contenido Dinámico</a></li>
-<li><a href="howto/htaccess.html">Archivos .htaccess</a></li>
-<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">Directorios web para cada
- usuario (public_html)</a></li>
-</ul>
-</div><div class="category"><h2><a name="platform" id="platform">Notas específicas sobre plataformas</a></h2>
-<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">EBCDIC Port</a></li>
-</ul>
-</div><div class="category"><h2><a name="other" id="other">Documentación adicional</a></h2>
-<ul><li><a href="faq/">Preguntas Más Frecuentes</a></li>
-<li><a href="sitemap.html">Mapa de este sitio web</a></li>
-<li><a href="developer/">Documentación para desarrolladores</a></li>
-<li><a href="misc/">Otros documentos</a></li>
-</ul>
-</div></td></tr></table></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/index.html.fr b/docs/manual/index.html.fr
deleted file mode 100644
index cc77afac10..0000000000
--- a/docs/manual/index.html.fr
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Documentation du Serveur HTTP Apache Version 2.1 - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="index-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a></div>
-<div id="page-content"><h1>Documentation du Serveur HTTP Apache Version 2.1</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Recherche Google" type="submit" /><input value="10" name="num" type="hidden" /><input value="fr" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Apache 2.1" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Notes sur cette version</a></h2>
-<ul><li><a href="new_features_2_0.html">Nouvelles Fonctionnalités de la version 2.0</a></li>
-<li><a href="upgrading.html">Migrer à 2.0 depuis la version 1.3</a></li>
-<li><a href="license.html">Licence Apache</a></li>
-</ul>
-</div><div class="category"><h2><a name="manual" id="manual">Manuel de Référence</a></h2>
-<ul><li><a href="install.html">Compilation et Installation</a></li>
-<li><a href="invoking.html">Démarrage</a></li>
-<li><a href="stopping.html">Arrêt ou Redémarrage</a></li>
-<li><a href="mod/directives.html">Directives de Configuration à l'exécution</a></li>
-<li><a href="mod/quickreference.html">Résumé des Directives</a></li>
-<li><a href="mod/">Modules</a></li>
-<li><a href="mpm.html">Modules Multi-Processus (MPMs)</a></li>
-<li><a href="filter.html">Filtres</a></li>
-<li><a href="handler.html">Handlers</a></li>
-<li><a href="programs/">Serveur et Autres Programmes</a></li>
-<li><a href="glossary.html">Glossaire</a></li>
-</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">Guide de l'Utilisateur</a></h2>
-<ul><li><a href="bind.html">Liaison</a></li>
-<li><a href="configuring.html">Fichiers de Configuration</a></li>
-<li><a href="sections.html">Configuration de Sections</a></li>
-<li><a href="content-negotiation.html">Négociation de Contenu</a></li>
-<li><a href="dso.html">Dynamic Shared Objects (DSO)</a></li>
-<li><a href="env.html">Variables d'Environnement</a></li>
-<li><a href="logs.html">Fichiers Journaux</a></li>
-<li><a href="urlmapping.html">Correspondances entre URLS et Système de Fichiers</a></li>
-<li><a href="misc/perf-tuning.html">Réglage de la Performance</a></li>
-<li><a href="misc/security_tips.html">Conseils sur la Sécurité</a></li>
-<li><a href="server-wide.html">Configuration à l'échelle du Serveur</a></li>
-<li><a href="ssl/">Chiffrement SSL/TLS</a></li>
-<li><a href="suexec.html">Execution Suexec des CGIs</a></li>
-<li><a href="misc/rewriteguide.html">Guide de réécriture d'URLs</a></li>
-<li><a href="vhosts/">Serveurs Virtuels</a></li>
-</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">Marche-à-Suivre / Tutoriels</a></h2>
-<ul><li><a href="howto/auth.html">Authentification, Autorisation, et Contrôles
- d'accès</a></li>
-<li><a href="howto/cgi.html">CGI: Contenu Dynamique</a></li>
-<li><a href="howto/htaccess.html">Fichiers .htaccess </a></li>
-<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">Répertoires Web par Utilisateur
- (public_html)</a></li>
-</ul>
-</div><div class="category"><h2><a name="platform" id="platform">Notes Spécifiques aux Différentes Plate-formes</a></h2>
-<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">Port EBCDIC</a></li>
-</ul>
-</div><div class="category"><h2><a name="other" id="other">Autres Sujets</a></h2>
-<ul><li><a href="faq/">Foire Aux Questions</a></li>
-<li><a href="sitemap.html">Plan du Site</a></li>
-<li><a href="developer/">Documentation du Developpeur</a></li>
-<li><a href="misc/">Autres Notes</a></li>
-</ul>
-</div></td></tr></table></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/index.html.ja.euc-jp b/docs/manual/index.html.ja.euc-jp
deleted file mode 100644
index 7608b513f4..0000000000
--- a/docs/manual/index.html.ja.euc-jp
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1 ¥É¥­¥å¥á¥ó¥È - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="index-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a></div>
-<div id="page-content"><h1>Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1 ¥É¥­¥å¥á¥ó¥È</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Google Search" type="submit" /><input value="10" name="num" type="hidden" /><input value="ja" name="hl" type="hidden" /><input value="EUC-JP" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Apache 2.1" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">¥ê¥ê¡¼¥¹¥Î¡¼¥È</a></h2>
-<ul><li><a href="new_features_2_0.html">Apache 2.0 ¤Î¿·µ¡Ç½</a></li>
-<li><a href="upgrading.html">1.3 ¤«¤é 2.0 ¤Ø¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É</a></li>
-<li><a href="license.html">Apache ¥é¥¤¥»¥ó¥¹</a></li>
-</ul>
-</div><div class="category"><h2><a name="manual" id="manual">¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë</a></h2>
-<ul><li><a href="install.html">¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë</a></li>
-<li><a href="invoking.html">µ¯Æ°</a></li>
-<li><a href="stopping.html">½ªÎ»¤ÈºÆµ¯Æ°</a></li>
-<li><a href="mod/directives.html">¼Â¹Ô¤ÎÀßÄêÍѥǥ£¥ì¥¯¥Æ¥£¥Ö</a></li>
-<li><a href="mod/quickreference.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö ¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹</a></li>
-<li><a href="mod/">¥â¥¸¥å¡¼¥ë</a></li>
-<li><a href="mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)</a></li>
-<li><a href="filter.html">¥Õ¥£¥ë¥¿</a></li>
-<li><a href="handler.html">¥Ï¥ó¥É¥é</a></li>
-<li><a href="programs/">¥µ¡¼¥Ð¤È¥µ¥Ý¡¼¥È¥×¥í¥°¥é¥à</a></li>
-<li><a href="glossary.html">ÍѸ콸</a></li>
-</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">¥æ¡¼¥¶¤Î¼ê°ú</a></h2>
-<ul><li><a href="bind.html">¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤Î¥Ð¥¤¥ó¥É</a></li>
-<li><a href="configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="sections.html">¥»¥¯¥·¥ç¥ó¤ÎÀßÄê</a></li>
-<li><a href="content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a></li>
-<li><a href="dso.html">ưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È (DSO)</a></li>
-<li><a href="env.html">´Ä¶­ÊÑ¿ô</a></li>
-<li><a href="logs.html">¥í¥°¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="urlmapping.html">URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¥Þ¥Ã¥×¤¹¤ë</a></li>
-<li><a href="misc/perf-tuning.html">À­Ç½¤Ë´Ø¤¹¤ëÄ´À°</a></li>
-<li><a href="misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£¾ðÊó</a></li>
-<li><a href="server-wide.html">¥µ¡¼¥ÐÁ´ÂΤÎÀßÄê</a></li>
-<li><a href="ssl/">SSL/TLS ¤Ë¤è¤ë°Å¹æ²½</a></li>
-<li><a href="suexec.html">CGI ¤Î Suexec ¼Â¹Ô</a></li>
-<li><a href="misc/rewriteguide.html">URL Rewriting ¤Î¼ê°ú¤­</a></li>
-<li><a href="vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li>
-</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">How-To / ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></h2>
-<ul><li><a href="howto/auth.html">ǧ¾Ú¡¢¾µÇ§¡¢¥¢¥¯¥»¥¹À©¸æ
- </a></li>
-<li><a href="howto/cgi.html">CGI: ưŪ¥³¥ó¥Æ¥ó¥Ä</a></li>
-<li><a href="howto/htaccess.html">.htaccess ¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">¥æ¡¼¥¶ÀìÍѥǥ£¥ì¥¯¥È¥ê
- (public_html)</a></li>
-</ul>
-</div><div class="category"><h2><a name="platform" id="platform">¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¸ÇÍ­¤Î¾ðÊó</a></h2>
-<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">EBCDIC ÈÇ</a></li>
-</ul>
-</div><div class="category"><h2><a name="other" id="other">¤½¤Î¾</a></h2>
-<ul><li><a href="faq/">¤è¤¯¤¢¤ë¼ÁÌä (FAQ)</a></li>
-<li><a href="sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></li>
-<li><a href="developer/">³«È¯¼Ô¤Î¤¿¤á¤Î¥É¥­¥å¥á¥ó¥È</a></li>
-<li><a href="misc/">¤½¤Î¾</a></li>
-</ul>
-</div></td></tr></table></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/index.html.ko.euc-kr b/docs/manual/index.html.ko.euc-kr
deleted file mode 100644
index 565cfe4b20..0000000000
--- a/docs/manual/index.html.ko.euc-kr
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache HTTP Server Version 2.1 ¹®¼­ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="index-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a></div>
-<div id="page-content"><h1>Apache HTTP Server Version 2.1 ¹®¼­</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Google °Ë»ö" type="submit" /><input value="10" name="num" type="hidden" /><input value="ko" name="hl" type="hidden" /><input value="EUC-KR" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Apache 2.1" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">¹ßÇ¥¹®</a></h2>
-<ul><li><a href="new_features_2_0.html">¹öÀü 2.0ÀÇ »õ·Î¿î ±â´É</a></li>
-<li><a href="upgrading.html">1.3¿¡¼­ 2.0 ¹öÀüÀ¸·Î ¾÷±×·¹À̵å</a></li>
-<li><a href="license.html">¾ÆÆÄÄ¡ ¶óÀ̼±½º</a></li>
-</ul>
-</div><div class="category"><h2><a name="manual" id="manual">ÂüÁ¶ ¼³¸í¼­</a></h2>
-<ul><li><a href="install.html">ÄÄÆÄÀÏ°ú ¼³Ä¡</a></li>
-<li><a href="invoking.html">½ÃÀÛ</a></li>
-<li><a href="stopping.html">Áß´Ü°ú Àç½ÃÀÛ</a></li>
-<li><a href="mod/directives.html">¼³Á¤ Áö½Ã¾î</a></li>
-<li><a href="mod/quickreference.html">Áö½Ã¾î ºü¸¥ÂüÁ¶</a></li>
-<li><a href="mod/">¸ðµâ</a></li>
-<li><a href="mpm.html">´ÙÁß󸮸ðµâ (MPM)</a></li>
-<li><a href="filter.html">ÇÊÅÍ</a></li>
-<li><a href="handler.html">Çڵ鷯</a></li>
-<li><a href="programs/">¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</a></li>
-<li><a href="glossary.html">¿ë¾î</a></li>
-</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">»ç¿ëÀÚ Áöħ¼­</a></h2>
-<ul><li><a href="bind.html">ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤</a></li>
-<li><a href="configuring.html">¼³Á¤ÆÄÀÏ</a></li>
-<li><a href="sections.html">¼½¼Ç ¼³Á¤</a></li>
-<li><a href="content-negotiation.html">³»¿ëÇù»ó (content negotiation)</a></li>
-<li><a href="dso.html">µ¿Àû°øÀ¯°´Ã¼ (DSO)</a></li>
-<li><a href="env.html">ȯ°æº¯¼ö</a></li>
-<li><a href="logs.html">·Î±×ÆÄÀÏ</a></li>
-<li><a href="urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></li>
-<li><a href="misc/perf-tuning.html">¼º´ÉÇâ»ó</a></li>
-<li><a href="misc/security_tips.html">º¸¾È ÆÁ</a></li>
-<li><a href="server-wide.html">¼­¹ö Àü¿ª ¼³Á¤</a></li>
-<li><a href="ssl/">SSL/TLS ¾Ïȣȭ</a></li>
-<li><a href="suexec.html">CGIÀÇ Suexec ½ÇÇà</a></li>
-<li><a href="misc/rewriteguide.html">URL ÀçÀÛ¼º(rewriting) Áöħ¼­</a></li>
-<li><a href="vhosts/">°¡»óÈ£½ºÆ®</a></li>
-</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">How-To / ÅõÅ丮¾ó</a></h2>
-<ul><li><a href="howto/auth.html">ÀÎÁõ, ±ÇÇѺο©,
- Á¢±ÙÁ¦¾î</a></li>
-<li><a href="howto/cgi.html">CGI: µ¿Àû ÆäÀÌÁö »ý¼º</a></li>
-<li><a href="howto/htaccess.html">.htaccess ÆÄÀÏ</a></li>
-<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">»ç¿ëÀÚº° À¥µð·ºÅ丮
- (public_html)</a></li>
-</ul>
-</div><div class="category"><h2><a name="platform" id="platform">Ç÷¡Æûº° ¼³¸í</a></h2>
-<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">EBCDIC Æ÷ÆÃ</a></li>
-</ul>
-</div><div class="category"><h2><a name="other" id="other">´Ù¸¥ ÁÖÁ¦</a></h2>
-<ul><li><a href="faq/">ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</a></li>
-<li><a href="sitemap.html">»çÀÌÆ®¸Ê</a></li>
-<li><a href="developer/">°³¹ßÀÚ¸¦ À§ÇÑ ¹®¼­</a></li>
-<li><a href="misc/">±âŸ</a></li>
-</ul>
-</div></td></tr></table></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./fr/" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/index.xml b/docs/manual/index.xml
deleted file mode 100644
index 37769c5a3c..0000000000
--- a/docs/manual/index.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<indexpage metafile="index.xml.meta">
-<parentdocument href="http://httpd.apache.org/docs-project/" />
-
-<title>Apache HTTP Server Version 2.1 Documentation</title>
-
-<category id="release"><title>Release Notes</title>
- <page href="new_features_2_0.html">New features with Apache 2.0</page>
- <page href="upgrading.html">Upgrading to 2.0 from 1.3</page>
- <page href="license.html">Apache License</page>
-</category>
-
-<category id="manual"><title>Reference Manual</title>
- <page href="install.html">Compiling and Installing</page>
- <page href="invoking.html">Starting</page>
- <page href="stopping.html">Stopping or Restarting</page>
- <page href="mod/directives.html">Run-time Configuration Directives</page>
- <page href="mod/quickreference.html">Directive Quick-Reference</page>
- <page href="mod/">Modules</page>
- <page href="mpm.html">Multi-Processing Modules (MPMs)</page>
- <page href="filter.html">Filters</page>
- <page href="handler.html">Handlers</page>
- <page href="programs/">Server and Supporting Programs</page>
- <page href="glossary.html">Glossary</page>
-</category>
-
-<category id="usersguide"><title>Users' Guide</title>
- <page href="bind.html">Binding</page>
- <page href="configuring.html">Configuration Files</page>
- <page href="sections.html">Configuration Sections</page>
- <page href="content-negotiation.html">Content Negotiation</page>
- <page href="dso.html">Dynamic Shared Objects (DSO)</page>
- <page href="env.html">Environment Variables</page>
- <page href="logs.html">Log Files</page>
- <page href="urlmapping.html">Mapping URLs to the Filesystem</page>
- <page href="misc/perf-tuning.html">Performance Tuning</page>
- <page href="misc/security_tips.html">Security Tips</page>
- <page href="server-wide.html">Server-Wide Configuration</page>
- <page href="ssl/">SSL/TLS Encryption</page>
- <page href="suexec.html">Suexec Execution for CGI</page>
- <page href="misc/rewriteguide.html">URL Rewriting Guide</page>
- <page href="vhosts/">Virtual Hosts</page>
-</category>
-
-<category id="howto"><title>How-To / Tutorials</title>
- <page href="howto/auth.html">Authentication, Authorization, and Access
- Control</page>
- <page href="howto/cgi.html">CGI: Dynamic Content</page>
- <page href="howto/htaccess.html">.htaccess files</page>
- <page href="howto/ssi.html">Server Side Includes (SSI)</page>
- <page href="howto/public_html.html">Per-user Web Directories
- (public_html)</page>
-</category>
-
-<category id="platform"><title>Platform Specific Notes</title>
- <page href="platform/windows.html">Microsoft Windows</page>
- <page href="platform/netware.html">Novell NetWare</page>
- <page href="platform/ebcdic.html">EBCDIC Port</page>
-</category>
-
-<category id="other"><title>Other Topics</title>
- <page href="faq/">Frequently Asked Questions</page>
- <page href="sitemap.html">Sitemap</page>
- <page href="developer/">Documentation for Developers</page>
- <page href="misc/">Other Notes</page>
-</category>
-
-</indexpage>
-
diff --git a/docs/manual/index.xml.de b/docs/manual/index.xml.de
deleted file mode 100644
index 3d39c6090f..0000000000
--- a/docs/manual/index.xml.de
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<indexpage metafile="index.xml.meta">
-<parentdocument href="http://httpd.apache.org/docs-project/" />
-
-<title>Dokumentation zum Apache HTTP Server Version 2.1</title>
-
-<category id="release"><title>Hinweise zur Version</title>
- <page href="new_features_2_0.html">Neue Funktionen in Version 2.0</page>
- <page href="upgrading.html">Upgrade auf Version 2.0</page>
- <page href="license.html">Apache-Lizenz</page>
-</category>
-
-<category id="manual"><title>Bedienungsanleitung</title>
- <page href="install.html">Kompilieren und Installieren</page>
- <page href="invoking.html">Starten</page>
- <page href="stopping.html">Stoppen und Neustarten</page>
- <page href="mod/directives.html">Konfigurationsanweisungen</page>
- <page href="mod/quickreference.html">Kurzreferenz der Direktiven</page>
- <page href="mod/">Module</page>
- <page href="mpm.html">Multi-Processing-Module (MPMs)</page>
- <page href="filter.html">Filter</page>
- <page href="handler.html">Handler</page>
- <page href="programs/">Server und Hilfsprogramme</page>
- <page href="glossary.html">Glossar</page>
-</category>
-
-<category id="usersguide"><title>Benutzerhandbuch</title>
- <page href="bind.html">Bindung</page>
- <page href="configuring.html">Konfigurationsdateien</page>
- <page href="sections.html">Konfigurationsabschnitte</page>
- <page href="content-negotiation.html">Content Negotiation</page>
- <page href="dso.html">Dynamic Shared Objects (DSO)</page>
- <page href="env.html">Umgebungsvariablen</page>
- <page href="logs.html">Log-Dateien</page>
- <page href="urlmapping.html">URLs auf das Dateisystem abbilden</page>
- <page href="misc/perf-tuning.html">Performance-Hinweise</page>
- <page href="misc/security_tips.html">Tipps zur Sicherheit</page>
- <page href="server-wide.html">Serverweite Konfiguration</page>
- <page href="ssl/">SSL/TLS-Verschl&uuml;sselung</page>
- <page href="suexec.html">Suexec f&uuml;r CGI</page>
- <page href="misc/rewriteguide.html">Einf&uuml;hrung in die
- URL-Manipulation</page>
- <page href="vhosts/">Virtual-Hosts</page>
-</category>
-
-<category id="howto"><title>Praxis / Anleitungen</title>
- <page href="howto/auth.html">Authentisierung, Autorisierung und
- Zugriffskontrolle</page>
- <page href="howto/cgi.html">CGI: Dynamische Inhalte</page>
- <page href="howto/htaccess.html">.htaccess-Dateien</page>
- <page href="howto/ssi.html">Server Side Includes (SSI)</page>
- <page href="howto/public_html.html">Web-Verzeichnisse f&uuml;r Benutzer
- (public_html)</page>
-</category>
-
-<category id="platform"><title>Plattform-spezifische Anmerkungen</title>
- <page href="platform/windows.html">Microsoft Windows</page>
- <page href="platform/netware.html">Novell NetWare</page>
- <page href="platform/ebcdic.html">EBCDIC-Portierung</page>
-</category>
-
-<category id="other"><title>Weitere Themen</title>
- <page href="faq/">H&auml;ufig gestellte Fragen (FAQ)</page>
- <page href="sitemap.html">Seitenindex</page>
- <page href="developer/">Dokumentation f&uuml;r Entwickler</page>
- <page href="misc/">Sonstiges</page>
-</category>
-
-</indexpage>
-
diff --git a/docs/manual/index.xml.es b/docs/manual/index.xml.es
deleted file mode 100644
index 12ba6aa1da..0000000000
--- a/docs/manual/index.xml.es
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<indexpage metafile="index.xml.meta">
-<parentdocument href="http://httpd.apache.org/docs-project/" />
-
-<title>Versi&#243;n 2.1 de la documentaci&#243;n del Servidor de HTTP Apache</title>
-
-<category id="release"><title>Notas de la Versi&#243;n</title>
- <page href="new_features_2_0.html">Nuevas funcionalidades en
- Apache 2.0</page>
- <page href="upgrading.html">Actualizarse a la versión 2.0 desde la 1.3</page>
- <page href="license.html">Licencia Apache</page>
-</category>
-
-<category id="manual"><title>Manual de Referencia</title>
- <page href="install.html">Compilaci&#243;n e Instalaci&#243;n</page>
- <page href="invoking.html">Iniciar Apache</page>
- <page href="stopping.html">Parar y reiniciar Apache</page>
- <page href="mod/directives.html">Directivas para configurar la
-ejecuci&#243;n</page>
- <page href="mod/quickreference.html">Gu&#237;a r&#225;pida de
- Referencia de Directivas</page>
- <page href="mod/">M&#243;dulos</page>
- <page href="mpm.html">M&#243;dulos de MultiProcesamiento (MPMs)</page>
- <page href="filter.html">Filtros</page>
- <page href="handler.html">Handlers</page>
- <page href="programs/">El Servidor Apache y Programas de Soporte</page>
- <page href="glossary.html">Glosario</page>
-</category>
-
-<category id="usersguide"><title>Gu&#237;a del Usuario</title>
- <page href="bind.html">Puertos de escucha</page>
- <page href="configuring.html">Ficheros de Configuraci&#243;n</page>
- <page href="sections.html">Secciones de Configuraci&#243;n</page>
- <page href="content-negotiation.html">Negociaci&#243;n de Contenidos</page>
- <page href="dso.html">Objetos Din&#225;micos Compartidos (DSO)</page>
- <page href="env.html">Variables de Entorno</page>
- <page href="logs.html">Archivos Log</page>
- <page href="urlmapping.html">Mapear URLs a ubicaciones de un
- sistema de ficheros</page>
- <page href="misc/perf-tuning.html">Ajustes para conseguir un mejor rendimiento</page>
- <page href="misc/security_tips.html">Consejos de Seguridad</page>
- <page href="server-wide.html">Configuraci&#243;n B&#225;sica de Apache</page>
- <page href="ssl/">Encriptado SSL/TLS</page>
- <page href="suexec.html">Ejecuci&#243;n de Suexec para CGIs</page>
- <page href="misc/rewriteguide.html">Documentaci&#243;n adicional
- sobre mod_rewrite</page>
- <page href="vhosts/">Hosting Virtual</page>
-</category>
-
-<category id="howto"><title>How-To / Tutoriales</title>
- <page href="howto/auth.html">Autentificaci&#243;n,
- Autorizaci&#243;n, y Control de Acceso</page>
- <page href="howto/cgi.html">CGI: Contenido Din&#225;mico</page>
- <page href="howto/htaccess.html">Archivos .htaccess</page>
- <page href="howto/ssi.html">Server Side Includes (SSI)</page>
- <page href="howto/public_html.html">Directorios web para cada
- usuario (public_html)</page>
-</category>
-
-<category id="platform"><title>Notas espec&#237;ficas sobre plataformas</title>
- <page href="platform/windows.html">Microsoft Windows</page>
- <page href="platform/netware.html">Novell NetWare</page>
- <page href="platform/ebcdic.html">EBCDIC Port</page>
-</category>
-
-<category id="other"><title>Documentaci&#243;n adicional</title>
- <page href="faq/">Preguntas M&#225;s Frecuentes</page>
- <page href="sitemap.html">Mapa de este sitio web</page>
- <page href="developer/">Documentaci&#243;n para desarrolladores</page>
- <page href="misc/">Otros documentos</page>
-</category>
-
-</indexpage>
-
-
diff --git a/docs/manual/index.xml.fr b/docs/manual/index.xml.fr
deleted file mode 100644
index de82670871..0000000000
--- a/docs/manual/index.xml.fr
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<indexpage metafile="index.xml.meta">
-<parentdocument href="http://httpd.apache.org/docs-project/" />
-
-<title>Documentation du Serveur HTTP Apache Version 2.1</title>
-
-<category id="release"><title>Notes sur cette version</title>
- <page href="new_features_2_0.html">Nouvelles Fonctionnalit&#233;s de la version 2.0</page>
- <page href="upgrading.html">Migrer &#224; 2.0 depuis la version 1.3</page>
- <page href="license.html">Licence Apache</page>
-</category>
-
-<category id="manual"><title>Manuel de R&#233;f&#233;rence</title>
- <page href="install.html">Compilation et Installation</page>
- <page href="invoking.html">D&#233;marrage</page>
- <page href="stopping.html">Arr&#234;t ou Red&#233;marrage</page>
- <page href="mod/directives.html">Directives de Configuration &#224; l'ex&#233;cution</page>
- <page href="mod/quickreference.html">R&#233;sum&#233; des Directives</page>
- <page href="mod/">Modules</page>
- <page href="mpm.html">Modules Multi-Processus (MPMs)</page>
- <page href="filter.html">Filtres</page>
- <page href="handler.html">Handlers</page>
- <page href="programs/">Serveur et Autres Programmes</page>
- <page href="glossary.html">Glossaire</page>
-</category>
-
-<category id="usersguide"><title>Guide de l'Utilisateur</title>
- <page href="bind.html">Liaison</page>
- <page href="configuring.html">Fichiers de Configuration</page>
- <page href="sections.html">Configuration de Sections</page>
- <page href="content-negotiation.html">N&#233;gociation de Contenu</page>
- <page href="dso.html">Dynamic Shared Objects (DSO)</page>
- <page href="env.html">Variables d'Environnement</page>
- <page href="logs.html">Fichiers Journaux</page>
- <page href="urlmapping.html">Correspondances entre URLS et Syst&#232;me de Fichiers</page>
- <page href="misc/perf-tuning.html">R&#233;glage de la Performance</page>
- <page href="misc/security_tips.html">Conseils sur la S&#233;curit&#233;</page>
- <page href="server-wide.html">Configuration &#224; l'&#233;chelle du Serveur</page>
- <page href="ssl/">Chiffrement SSL/TLS</page>
- <page href="suexec.html">Execution Suexec des CGIs</page>
- <page href="misc/rewriteguide.html">Guide de r&#233;&#233;criture d'URLs</page>
- <page href="vhosts/">Serveurs Virtuels</page>
-</category>
-
-<category id="howto"><title>Marche-&#224;-Suivre / Tutoriels</title>
- <page href="howto/auth.html">Authentification, Autorisation, et Contr&#244;les
- d'acc&#232;s</page>
- <page href="howto/cgi.html">CGI: Contenu Dynamique</page>
- <page href="howto/htaccess.html">Fichiers .htaccess </page>
- <page href="howto/ssi.html">Server Side Includes (SSI)</page>
- <page href="howto/public_html.html">R&#233;pertoires Web par Utilisateur
- (public_html)</page>
-</category>
-
-<category id="platform"><title>Notes Sp&#233;cifiques aux Diff&#233;rentes Plate-formes</title>
- <page href="platform/windows.html">Microsoft Windows</page>
- <page href="platform/netware.html">Novell NetWare</page>
- <page href="platform/ebcdic.html">Port EBCDIC</page>
-</category>
-
-<category id="other"><title>Autres Sujets</title>
- <page href="faq/">Foire Aux Questions</page>
- <page href="sitemap.html">Plan du Site</page>
- <page href="developer/">Documentation du Developpeur</page>
- <page href="misc/">Autres Notes</page>
-</category>
-
-</indexpage>
-
diff --git a/docs/manual/index.xml.ja b/docs/manual/index.xml.ja
deleted file mode 100644
index cbce1bc429..0000000000
--- a/docs/manual/index.xml.ja
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<indexpage metafile="index.xml.meta">
-<parentdocument href="http://httpd.apache.org/docs-project/" />
-
-<title>Apache HTTP $B%5!<%P(B $B%P!<%8%g%s(B 2.1 $B%I%-%e%a%s%H(B</title>
-
-<category id="release"><title>$B%j%j!<%9%N!<%H(B</title>
- <page href="new_features_2_0.html">Apache 2.0 $B$N?75!G=(B</page>
- <page href="upgrading.html">1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B</page>
- <page href="license.html">Apache $B%i%$%;%s%9(B</page>
-</category>
-
-<category id="manual"><title>$B%j%U%!%l%s%9%^%K%e%"%k(B</title>
- <page href="install.html">$B%3%s%Q%$%k$H%$%s%9%H!<%k(B</page>
- <page href="invoking.html">$B5/F0(B</page>
- <page href="stopping.html">$B=*N;$H:F5/F0(B</page>
- <page href="mod/directives.html">$B<B9T$N@_DjMQ%G%#%l%/%F%#%V(B</page>
- <page href="mod/quickreference.html">$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</page>
- <page href="mod/">$B%b%8%e!<%k(B</page>
- <page href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)</page>
- <page href="filter.html">$B%U%#%k%?(B</page>
- <page href="handler.html">$B%O%s%I%i(B</page>
- <page href="programs/">$B%5!<%P$H%5%]!<%H%W%m%0%i%`(B</page>
- <page href="glossary.html">$BMQ8l=8(B</page>
-</category>
-
-<category id="usersguide"><title>$B%f!<%6$N<j0z(B</title>
- <page href="bind.html">$B%"%I%l%9$H%]!<%H$N%P%$%s%I(B</page>
- <page href="configuring.html">$B@_Dj%U%!%$%k(B</page>
- <page href="sections.html">$B%;%/%7%g%s$N@_Dj(B</page>
- <page href="content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</page>
- <page href="dso.html">$BF0E*6&M-%*%V%8%'%/%H(B (DSO)</page>
- <page href="env.html">$B4D6-JQ?t(B</page>
- <page href="logs.html">$B%m%0%U%!%$%k(B</page>
- <page href="urlmapping.html">URL $B$r%U%!%$%k%7%9%F%`$K%^%C%W$9$k(B</page>
- <page href="misc/perf-tuning.html">$B@-G=$K4X$9$kD4@0(B</page>
- <page href="misc/security_tips.html">$B%;%-%e%j%F%#>pJs(B</page>
- <page href="server-wide.html">$B%5!<%PA4BN$N@_Dj(B</page>
- <page href="ssl/">SSL/TLS $B$K$h$k0E9f2=(B</page>
- <page href="suexec.html">CGI $B$N(B Suexec $B<B9T(B</page>
- <page href="misc/rewriteguide.html">URL Rewriting $B$N<j0z$-(B</page>
- <page href="vhosts/">$B%P!<%A%c%k%[%9%H(B</page>
-</category>
-
-<category id="howto"><title>How-To / $B%A%e!<%H%j%"%k(B</title>
- <page href="howto/auth.html">$BG'>Z!">5G'!"%"%/%;%9@)8f(B
- </page>
- <page href="howto/cgi.html">CGI: $BF0E*%3%s%F%s%D(B</page>
- <page href="howto/htaccess.html">.htaccess $B%U%!%$%k(B</page>
- <page href="howto/ssi.html">Server Side Includes (SSI)</page>
- <page href="howto/public_html.html">$B%f!<%6@lMQ%G%#%l%/%H%j(B
- (public_html)</page>
-</category>
-
-<category id="platform"><title>$B%W%i%C%H%U%)!<%`8GM-$N>pJs(B</title>
- <page href="platform/windows.html">Microsoft Windows</page>
- <page href="platform/netware.html">Novell NetWare</page>
- <page href="platform/ebcdic.html">EBCDIC $BHG(B</page>
-</category>
-
-<category id="other"><title>$B$=$NB>(B</title>
- <page href="faq/">$B$h$/$"$k<ALd(B (FAQ)</page>
- <page href="sitemap.html">$B%5%$%H%^%C%W(B</page>
- <page href="developer/">$B3+H/<T$N$?$a$N%I%-%e%a%s%H(B</page>
- <page href="misc/">$B$=$NB>(B</page>
-</category>
-
-</indexpage>
-
diff --git a/docs/manual/index.xml.ko b/docs/manual/index.xml.ko
deleted file mode 100644
index 78a9d45e09..0000000000
--- a/docs/manual/index.xml.ko
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<indexpage metafile="index.xml.meta">
-<parentdocument href="http://httpd.apache.org/docs-project/" />
-
-<title>Apache HTTP Server Version 2.1 ¹®¼­</title>
-
-<category id="release"><title>¹ßÇ¥¹®</title>
- <page href="new_features_2_0.html">¹öÀü 2.0ÀÇ »õ·Î¿î ±â´É</page>
- <page href="upgrading.html">1.3¿¡¼­ 2.0 ¹öÀüÀ¸·Î ¾÷±×·¹À̵å</page>
- <page href="license.html">¾ÆÆÄÄ¡ ¶óÀ̼±½º</page>
-</category>
-
-<category id="manual"><title>ÂüÁ¶ ¼³¸í¼­</title>
- <page href="install.html">ÄÄÆÄÀÏ°ú ¼³Ä¡</page>
- <page href="invoking.html">½ÃÀÛ</page>
- <page href="stopping.html">Áß´Ü°ú Àç½ÃÀÛ</page>
- <page href="mod/directives.html">¼³Á¤ Áö½Ã¾î</page>
- <page href="mod/quickreference.html">Áö½Ã¾î ºü¸¥ÂüÁ¶</page>
- <page href="mod/">¸ðµâ</page>
- <page href="mpm.html">´ÙÁß󸮸ðµâ (MPM)</page>
- <page href="filter.html">ÇÊÅÍ</page>
- <page href="handler.html">Çڵ鷯</page>
- <page href="programs/">¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</page>
- <page href="glossary.html">¿ë¾î</page>
-</category>
-
-<category id="usersguide"><title>»ç¿ëÀÚ Áöħ¼­</title>
- <page href="bind.html">ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤</page>
- <page href="configuring.html">¼³Á¤ÆÄÀÏ</page>
- <page href="sections.html">¼½¼Ç ¼³Á¤</page>
- <page href="content-negotiation.html">³»¿ëÇù»ó (content negotiation)</page>
- <page href="dso.html">µ¿Àû°øÀ¯°´Ã¼ (DSO)</page>
- <page href="env.html">ȯ°æº¯¼ö</page>
- <page href="logs.html">·Î±×ÆÄÀÏ</page>
- <page href="urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</page>
- <page href="misc/perf-tuning.html">¼º´ÉÇâ»ó</page>
- <page href="misc/security_tips.html">º¸¾È ÆÁ</page>
- <page href="server-wide.html">¼­¹ö Àü¿ª ¼³Á¤</page>
- <page href="ssl/">SSL/TLS ¾Ïȣȭ</page>
- <page href="suexec.html">CGIÀÇ Suexec ½ÇÇà</page>
- <page href="misc/rewriteguide.html">URL ÀçÀÛ¼º(rewriting) Áöħ¼­</page>
- <page href="vhosts/">°¡»óÈ£½ºÆ®</page>
-</category>
-
-<category id="howto"><title>How-To / ÅõÅ丮¾ó</title>
- <page href="howto/auth.html">ÀÎÁõ, ±ÇÇѺο©,
- Á¢±ÙÁ¦¾î</page>
- <page href="howto/cgi.html">CGI: µ¿Àû ÆäÀÌÁö »ý¼º</page>
- <page href="howto/htaccess.html">.htaccess ÆÄÀÏ</page>
- <page href="howto/ssi.html">Server Side Includes (SSI)</page>
- <page href="howto/public_html.html">»ç¿ëÀÚº° À¥µð·ºÅ丮
- (public_html)</page>
-</category>
-
-<category id="platform"><title>Ç÷¡Æûº° ¼³¸í</title>
- <page href="platform/windows.html">Microsoft Windows</page>
- <page href="platform/netware.html">Novell NetWare</page>
- <page href="platform/ebcdic.html">EBCDIC Æ÷ÆÃ</page>
-</category>
-
-<category id="other"><title>´Ù¸¥ ÁÖÁ¦</title>
- <page href="faq/">ÀÚÁÖ ¹°¾îº¸´Â Áú¹® (FAQ)</page>
- <page href="sitemap.html">»çÀÌÆ®¸Ê</page>
- <page href="developer/">°³¹ßÀÚ¸¦ À§ÇÑ ¹®¼­</page>
- <page href="misc/">±âŸ</page>
-</category>
-
-</indexpage>
-
diff --git a/docs/manual/index.xml.meta b/docs/manual/index.xml.meta
deleted file mode 100644
index 36dc21337a..0000000000
--- a/docs/manual/index.xml.meta
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>fr</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/install.html b/docs/manual/install.html
deleted file mode 100644
index 53619faf71..0000000000
--- a/docs/manual/install.html
+++ /dev/null
@@ -1,23 +0,0 @@
-URI: install.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: install.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: install.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: install.html.fr
-Content-Language: fr
-Content-type: text/html; charset=ISO-8859-1
-
-URI: install.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: install.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/install.html.de b/docs/manual/install.html.de
deleted file mode 100644
index bf7ccaf56e..0000000000
--- a/docs/manual/install.html.de
+++ /dev/null
@@ -1,407 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Kompilieren und Installieren - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Kompilieren und Installieren</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/install.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Dieses Dokument umfaßt nur die Kompilierung und Installation des
- Apache auf Unix und Unix-ähnlichen Systemen. Für die
- Kompilierung und Installation unter Windows lesen Sie bitte <a href="platform/windows.html">Den Apache unter Microsoft Windows
- betreiben</a>. Für andere Plattformen lesen Sie bitte die
- Dokumentation <a href="platform/">Plattformen</a>.</p>
-
- <p>Die Konfigurations- und Installationsumgebung des Apache 2.0 hat sich
- seit dem Apache 1.3 komplett verändert. Der Apache 1.3 benutzt einen
- speziellen Satz von Skripten, um eine einfache Installation zu
- ermöglichen. Der Apache 2.0 dagegen verwendet nun
- <code>libtool</code> und <code>autoconf</code>, um eine Umgebung zu
- schaffen, die der vieler anderer Open Source Projekte ähnlich
- sieht.</p>
-
- <p>Wenn Sie von einer Unterversion auf die nächste aktualisieren (z.B.
- von 2.0.50 auf 2.0.51), springen Sie bitte zum Abschnitt <a href="#upgrading">Upgrade</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Überblick für die Ungeduldigen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#requirements">Anforderungen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#download">Download</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extract">Auspacken</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configure">Den Codebaum konfigurieren</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compile">Erstellen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">Installieren</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#customize">Anpassen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#test">Testen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">Upgrade</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="programs/configure.html">Den Quellcode konfigurieren</a></li><li><a href="invoking.html">Apache starten</a></li><li><a href="stopping.html">Beenden und Neustarten</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Überblick für die Ungeduldigen</a></h2>
-
- <table>
-
- <tr>
- <td><a href="#download">Download</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Auspacken</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Konfigurieren</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Kompilieren</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Installieren</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Anpassen</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Testen</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> muss durch die Nummer der Unterversion ersetzt werden,
- und <em>PREFIX</em> durch den Verzeichnispfad,
- in dem der Server installiert werden soll. Wenn <em>PREFIX</em> nicht
- angegeben ist, wird die Voreinstellung <code>/usr/local/apache2</code>
- verwendet.</p>
-
- <p>Beginnend mit den Anforderungen
- für die Kompilierung und Installation des Apache HTTPD ist
- weiter unten jeder Abschnitt des Kompilierungs- und
- Installationsvorganges genauer beschrieben.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">Anforderungen</a></h2>
-
- <p>Folgende Anforderungen gelten für die Erstellung des
- Apache:</p>
-
- <dl>
- <dt>Plattenplatz</dt>
- <dd>Stellen Sie sicher, dass Sie kurzzeitig wenigstens 50 MB freien
- Festplattenplatz zur Verfügung haben. Nach der Installation
- belegt der Apache ungefähr 10 MB Plattenplatz. Der
- tatsächliche Platzbedarf variiert in Abhängigkeit von den
- gewählten Konfigurationseinstellungen und
- Modulen von Drittanbietern.</dd>
-
- <dt>ANSI-C-Compiler und Generierungswerkzeuge</dt>
- <dd>Stellen Sie sicher, dass Sie einen ANSI-C Compiler installiert
- haben. Der <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- Compiler (GCC)</a> der <a href="http://www.gnu.org/">Free Software
- Foundation (FSF)</a> ist empfehlenswert (Version 2.7.2 ist gut). Wenn
- Sie den GCC nicht besitzen, stellen Sie zumindest sicher, dass der
- Compiler Ihres Anbieters ANSI-kompatibel ist. Außerdem muss Ihr
- <code>PATH</code> wesentliche Generierungswerkzeuge wie
- <code>make</code> enthalten.</dd>
-
- <dt>Zeitgenauigkeit bewahren</dt>
- <dd>Elemente des HTTP-Protokolls werden in Form einer Tageszeit
- ausgedrückt. Darum sollten Sie jetzt prüfen, ob Ihr System
- die Fähigkeit zur Zeitsynchronisation besitzt, und diese
- gegebenenfalls installieren. Üblicherweise werden hierfür
- die Programme <code>ntpdate</code> oder <code>xntpd</code> verwendet,
- die auf dem Network Time Protocol (NTP) basieren. Nähere
- Informationen über NTP Software und öffentliche Zeitserver
- finden Sie in der Usenet Newsgroup <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
- und auf der <a href="http://www.ntp.org">NTP
- Homepage</a>.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [OPTIONAL]</dt>
- <dd>Für einige Pflegeprogramme wie <a href="programs/apxs.html">apxs</a>
- oder <a href="programs/dbmmanage.html">dbmmanage</a> (die in Perl
- geschrieben sind) wird der Perl 5 Interpreter benötigt (die
- Versionen ab 5.003 sind ausreichend). Wenn kein derartiger Interpreter
- vom '<code>configure</code>'-Skript gefunden werden kann, macht das
- jedoch nichts. Selbstverständlich können Sie den Apache 2.0
- auch so generieren und installieren. Lediglich diese Pflegeskripte
- können dann nicht verwendet werden. Wenn Sie mehrere Perl
- Interpreter installiert haben (vielleicht Perl 4 durch Ihren
- Händler und Perl 5 durch Sie selbst), dann ist die Verwendung der
- <code>--with-perl</code> Option (siehe unten) empfehlenswert, um
- sicherzustellen, dass der richtige Interpreter von
- <code>./configure</code> ausgewählt wird.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="download" id="download">Download</a></h2>
-
- <p>Der Apache kann von der <a href="http://httpd.apache.org/download.cgi">Apache HTTP Server
- Downloadseite</a> heruntergeladen werden, auf der verschiedene Spiegelserver
- angegeben sind. Für die meisten Benutzer des Apache ist es auf
- Unix-ähnlichen Systemen am Besten, die Quellcodeversion herunterzuladen
- und zu kompilieren. Der Erstellungsprozess (weiter unten beschrieben) ist
- einfach und erlaubt es Ihnen, den Server Ihren Bedürfnissen anzupassen.
- Dazu kommt, dass Binärdistributionen gegenüber der aktuellen
- Quellcodeversion oft veraltet sind. Wenn Sie tatsächlich ein
- Binärpaket herunterladen, folgen Sie bitte den Anweisungen in der Datei
- <code>INSTALL.bindist</code>, die der Distribution beiliegt.</p>
-
- <p>Es ist wichtig, dass Sie nach dem Herunterladen überprüfen,
- dass es sich um einer vollständige und unveränderte Version des
- Apache HTTP Servers handelt. Das können Sie erreichen, indem Sie das
- heruntergeladene Paket gegen die PGP-Signatur prüfen. Einzelheiten dazu
- erfahren Sie auf der <a href="http://httpd.apache.org/download.cgi#verify">Download-Seite</a>. Es
- ist auch ein erweitertes Beispiel verfügbar, dass die <a href="http://httpd.apache.org/dev/verification.html">Anwendung von PGP</a>
- beschreibt.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extract" id="extract">Auspacken</a></h2>
-
- <p>Das Auspacken des Quellcodes aus dem Apache HTTPD Tarball besteht
- aus einem simplen Dekomprimieren und danach "Ent-tarren":</p>
-
- <div class="example"><p><code>
- $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar
- </code></p></div>
-
- <p>Dies erstellt unterhalb des aktuellen Verzeichnisses ein neues
- Verzeichnis, das den Quellcode für die Distribution enthält.
- Sie sollten mit <code>cd</code> in dieses Verzeichnis wechseln,
- bevor Sie mit der Kompilierung des Servers weitermachen. </p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configure" id="configure">Den Codebaum konfigurieren</a></h2>
-
- <p>Der nächste Schritt ist die Konfiguration des
- Apache-Codebaumes für Ihre spezielle Plattform und Ihre
- persönlichen Bedürfnisse. Dies wird mit dem Skript
- <code><a href="programs/configure.html">configure</a></code>
- durchgeführt, das im Wurzelverzeichnis
- der Distribution enthalten ist. (Entwickler, welche die CVS Version
- des Apache-Codebaumes herunterladen, müssen <code>autoconf</code>
- und <code>libtool</code> installiert haben und müssen
- <code>buildconf</code> ausführen, bevor sie mit den
- nächsten Schritten fortfahren können. Dies wird bei
- offiziellen Releases nicht notwendig sein.)</p>
-
- <p>Um den Codebaum mit den Standardeinstellungen zu konfigurieren,
- geben Sie einfach <code>./configure</code> ein. Zur Änderung
- dieser Voreinstellungen akzeptiert <code>configure</code> eine
- Reihe von Variablen und Kommandozeilenoptionen.</p>
-
- <p>Die wichtigste Option ist <code>--prefix</code>, der Ablageort, an dem
- der Apache später installiert wird, da er für diesen Ort
- konfiguriert werden muss, um korrekt zu arbeiten. Eine feinere Einstellung
- der Dateiablagen ist mit weiteren <a href="programs/configure.html#installationdirectories">configure-Optionen</a>
- möglich.</p>
-
- <p>Weiterhin können Sie zu diesem Zeitpunkt festlegen, welche <a href="programs/configure.html#optionalfeatures">Funktionalität</a> Sie
- in den Apache aufnehmen möchten, indem Sie <a href="mod/">Module</a>
- aktivieren oder deaktivieren. Der Apache bindet standardmäßig
- einen Satz von <a href="mod/module-dict.html#Status">Basismodulen</a> ein.
- Andere Module werden mit Hilfe der Option
- <code>--enable-<var>module</var></code> aktiviert, wobei <var>module</var>
- den Namen des Moduls ohne das Präfix <code>mod_</code> darstellt.
- Ausserdem sind alle Unterstriche durch Bindestriche zu ersetzen. Sie
- können sich auch entscheiden, Module als "<a href="dso.html">Shared
- Objects (DSOs)</a>" zu kompilieren, welche zur Laufzeit ge- und entladen
- werden können. Dazu verwenden Sie die Option
- <code>--enable-<var>module</var>=shared</code>. Entsprechend können Sie
- Basismodule mit der Option <code>--disable-<var>module</var></code>
- deaktivieren. Lassen Sie Vorsicht walten. wenn Sie diese Optionen verwenden,
- da <code>configure</code> Sie nicht warnen kann, wenn die von Ihnen
- angegebenen Module nicht existieren; die Option wird dann einfach
- ignoriert.</p>
-
- <p>Zusätzlich ist es zuweilen notwendig, das
- <code>configure</code>-Skript mit Extrainformationen zum Ablageort
- Ihres Compilers, Ihrer Bibliotheken oder Header-Dateien zu versorgen. Das
- tun Sie, indem Sie entweder Umgebungsvariablen oder Kommandozeilenoptionen
- an <code>configure</code> übergeben. Für mehr Informationen
- lesen Sie bitte die <a href="programs/configure.html">Hilfeseite zu
- configure</a>.</p>
-
- <p>Um einen kurzen Eindruck zu gewinnen, welche Möglichkeiten Sie
- haben, folgt hier ein typisches Beispiel, das den Apache mit einem
- speziellen Compiler und Compilerflags für das
- Installationsverzeichnis <code>/sk/pkg/apache</code> kompiliert, sowie
- die beiden zusätzlichen Module <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> und
- <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> für späteres Laden durch den
- DSO-Mechanismus:</p>
-
- <div class="example"><p><code>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
- </code></p></div>
-
- <p>Wenn <code>configure</code> startet, benötigt es mehrere Minuten,
- um die Verfügbarkeit von Features auf Ihrem System zu prüfen
- und ein Makefile zu generieren, das später zur Kompilierung des
- Servers verwendet wird.</p>
-
- <p>Einzelheiten zu den vielen verschiedenen Konfigurationsoptionen finden
- Sie auf der <a href="programs/configure.html">Hilfeseite zu
- configure</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile" id="compile">Erstellen</a></h2>
-
- <p>Nun können Sie die verschiedenen Teile, die das Apache-Paket
- bilden, einfach durch Ausführen des folgenden Befehls erstellen:</p>
-
- <div class="example"><p><code>$ make</code></p></div>
-
- <p>Seien Sie hierbei bitte geduldig, denn eine Basiskonfiguration
- benötigt ungefähr 3 Minuten auf einem Pentium III/Linux 2.2.
- System. Dies kann aber abhängig von Ihrer Hardware und der Anzahl
- der Module, die Sie aktiviert haben, sehr stark variieren.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">Installieren</a></h2>
-
- <p>Nun endlich installieren Sie das Package unter dem konfigurierten
- Installations-<em>PREFIX</em> (siehe oben: Option <code>--prefix</code>
- durch Aufrufen von:</p>
-
- <div class="example"><p><code>$ make install</code></p></div>
-
- <p>Wenn Sie upgraden, wird die Installation Ihre Konfigurationsdateien
- oder Dokumente nicht überschrieben.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customize" id="customize">Anpassen</a></h2>
-
- <p>Als nächstes können Sie Ihren Apache HTTP Server anpassen,
- indem Sie die <a href="configuring.html">Konfigurationsdateien</a>
- unterhalb von <code><em>PREFIX</em>/conf/</code> editieren.</p>
-
- <div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>
-
- <p>Werfen Sie auch einen Blick in das Apache-Handbuch unter <a href="./">docs/manual/</a>. Die aktuellste Version dieses Handbuchs
- sowie eine komplette Referenz der verfügbaren <a href="mod/directives.html">Konfigurationsanweisungen</a> finden
- Sie unter <a href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">Testen</a></h2>
-
- <p>Sie können nun Ihren Apache HTTP Server <a href="invoking.html">starten</a>, indem Sie einfach</p>
-
- <div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl start</code></p></div>
-
- <p>ausführen.</p>
-
- <p>Danach sollten Sie Ihr erstes Dokument unter dem URL
- <code>http://localhost/</code> anfordern können. Die Webseite,
- die Sie sehen, ist im <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- abgelegt, welches üblicherweise <code><em>PREFIX</em>/htdocs/</code>
- ist. Den Server <a href="stopping.html">stoppen</a> Sie wieder durch
- Ausführen von:</p>
-
- <div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrading" id="upgrading">Upgrade</a></h2>
-
- <p>Der erste Schritt beim Aktualisieren besteht darin, die
- Versionsankündigung sowie die <code>CHANGES</code>-Datei in der
- Quelltextdistribution zu lesen, um Änderungen zu finden, die Ihr
- System möglicherweise betreffen. Wenn Sie einen größeren
- Versionssprung durchführen (z.B. vom 1.3 auf 2.0 oder von 2.0 auf
- 2.2), wird es wahrscheinlich auch größere Unterschiede in der
- Kompilier- und Laufzeitkonfiguration geben, die manuelle Nacharbeiten
- erfordern. Außerdem müssen alle Module aktualisiert
- werden, um den Änderungen der Modul-API gerecht zu werden.</p>
-
- <p>Die Aktualisierung einer Unterversion auf eine andere (z.B. von 2.0.55
- auf 2.0.57) ist einfacher. <code>make install</code> überschreibt
- keine der bereits existierenden Dokumente, Log- und Konfigurationsdateien.
- Ausserdem bemühen sich die Entwickler, inkompatible Änderungen
- der <code>configure</code>-Optionen, der Laufzeitkonfiguration sowie der
- Modul-API zu vermeiden. In den meisten Fällen sollten Sie in der
- Lage sein, den gleichen <code>configure</code>-Befehl, die gleiche
- Konfiguration und die gleichen Module wieder zu verwenden. (Das gilt erst
- seit Version 2.0.41 -- frühere Versionen enthielten noch inkompatible
- Änderungen).</p>
-
- <p>Wenn Sie den Quellcode von Ihrer letzten Installation aufgehoben haben,
- ist ein Upgrade sogar noch einfacher. Die Datei <code>config.nice</code> im
- Wurzelverzeichnis des alten Quelltextbaums enthält den genauen
- <code>configure</code>-Befehl, der verwendet wurde, um den Quellcode
- zu konfigurieren. Um jetzt von einer Version auf die nächste zu
- aktualisieren, kopieren Sie einfach die <code>config.nice</code> in das
- Verzeichnis der neuen Version, passen sie bei Bedarf an, und
- führen Sie sie aus:</p>
-
- <div class="example"><p><code>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <var>PREFIX</var>/bin/apachectl stop<br />
- $ <var>PREFIX</var>/bin/apachectl start<br />
- </code></p></div>
-
- <div class="warning">Sie sollten jede neue Version immer in Ihrer Umgebung
- testen, bevor Sie sie produktiv schalten. Beispielsweise können Sie
- die neue Version neben der alten installieren, indem Sie ein anderes
- <code>--prefix</code> und einen anderen Port wählen (durch Anpassen der
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Direktive). So
- können Sie auf eventuelle Inkompatibilitäten testen, bevor Sie
- endgültig die neue Version verwenden.</div>
-</div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/install.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/install.html.en b/docs/manual/install.html.en
deleted file mode 100644
index 736216ce54..0000000000
--- a/docs/manual/install.html.en
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Compiling and Installing - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Compiling and Installing</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>This document covers compilation and installation of Apache
- on Unix and Unix-like systems only. For compiling and
- installation on Windows, see <a href="platform/windows.html">Using Apache with Microsoft
- Windows</a>. For other platforms, see the <a href="platform/">platform</a> documentation.</p>
-
- <p>Apache 2.0's configuration and installation environment has
- changed completely from Apache 1.3. Apache 1.3 used a custom
- set of scripts to achieve easy installation. Apache 2.0 now
- uses <code>libtool</code> and <code>autoconf</code>
- to create an environment that looks like many other Open Source
- projects.</p>
-
- <p>If you are upgrading from one minor version to the next (for
- example, 2.0.50 to 2.0.51), please skip down to the <a href="#upgrading">upgrading</a> section.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Overview for the
- impatient</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#requirements">Requirements</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#download">Download</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extract">Extract</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configure">Configuring the source tree</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compile">Build</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">Install</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#customize">Customize</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#test">Test</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">Upgrading</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="programs/configure.html">Configure the source tree</a></li><li><a href="invoking.html">Starting Apache</a></li><li><a href="stopping.html">Stopping and Restarting</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Overview for the
- impatient</a></h2>
-
- <table>
-
- <tr>
- <td><a href="#download">Download</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Extract</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Configure</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Compile</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Install</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Customize</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Test</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> must be replaced with the current minor version
- number, and <em>PREFIX</em> must be replaced with the
- filesystem path under which the server should be installed. If
- <em>PREFIX</em> is not specified, it defaults to
- <code>/usr/local/apache2</code>.</p>
-
- <p>Each section of the compilation and installation process is
- described in more detail below, beginning with the requirements
- for compiling and installing Apache HTTPD.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">Requirements</a></h2>
-
- <p>The following requirements exist for building Apache:</p>
-
- <dl>
- <dt>Disk Space</dt>
- <dd>Make sure you have at least 50 MB of temporary free disk
- space available. After installation Apache occupies
- approximately 10 MB of disk space. The actual disk space
- requirements will vary considerably based on your chosen
- configuration options and any third-party modules.</dd>
-
- <dt>ANSI-C Compiler and Build System</dt>
- <dd>Make sure you have an ANSI-C compiler installed. The <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- compiler (GCC)</a> from the <a href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
- is recommended (version 2.7.2 is fine). If you don't have GCC
- then at least make sure your vendor's compiler is ANSI
- compliant. In addition, your <code>PATH</code> must contain
- basic build tools such as <code>make</code>.</dd>
-
- <dt>Accurate time keeping</dt>
- <dd>Elements of the HTTP protocol are expressed as the time of
- day. So, it's time to investigate setting some time
- synchronization facility on your system. Usually the
- <code>ntpdate</code> or <code>xntpd</code> programs are used for
- this purpose which are based on the Network Time Protocol (NTP).
- See the Usenet newsgroup <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
- and the <a href="http://www.ntp.org">NTP
- homepage</a> for more details about NTP software and public
- time servers.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [OPTIONAL]</dt>
- <dd>For some of the support scripts like <a href="programs/apxs.html">apxs</a> or <a href="programs/dbmmanage.html">dbmmanage</a> (which are
- written in Perl) the Perl 5 interpreter is required (versions
- 5.003 or newer are sufficient). If no such interpreter is found by
- the `<code>configure</code>' script there is no harm. Of course, you
- still can build and install Apache 2.0. Only those support scripts
- cannot be used. If you have multiple Perl interpreters
- installed (perhaps a Perl 4 from the vendor and a Perl 5 from
- your own), then it is recommended to use the <code>--with-perl</code>
- option (see below) to make sure the correct one is selected
- by <code>./configure</code>.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="download" id="download">Download</a></h2>
-
- <p>Apache can be downloaded from the <a href="http://httpd.apache.org/download.cgi">Apache HTTP Server
- download site</a> which lists several mirrors. Most users of
- Apache on unix-like systems will be better off downloading and
- compiling a source version. The build process (described below) is
- easy, and it allows you to customize your server to suit your needs.
- In addition, binary releases are often not up to date with the latest
- source releases. If you do download a binary, follow the instructions
- in the <code>INSTALL.bindist</code> file inside the distribution.</p>
-
- <p>After downloading, it is important to verify that you have a
- complete and unmodified version of the Apache HTTP Server. This
- can be accomplished by testing the downloaded tarball against the
- PGP signature. Details on how to do this are available on the <a href="http://httpd.apache.org/download.cgi#verify">download
- page</a> and an extended example is available describing the <a href="http://httpd.apache.org/dev/verification.html">use of
- PGP</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extract" id="extract">Extract</a></h2>
-
- <p>Extracting the source from the Apache HTTPD tarball is a
- simple matter of uncompressing, and then untarring:</p>
-
-<div class="example"><p><code>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</code></p></div>
-
- <p>This will create a new directory under the current directory
- containing the source code for the distribution. You should
- <code>cd</code> into that directory before proceeding with
- compiling the server.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configure" id="configure">Configuring the source tree</a></h2>
-
- <p>The next step is to configure the Apache source tree for your
- particular platform and personal requirements. This is done using
- the script <code><a href="programs/configure.html">configure</a></code> included in
- the root directory of the distribution. (Developers downloading
- the CVS version of the Apache source tree will need to have
- <code>autoconf</code> and <code>libtool</code> installed and will
- need to run <code>buildconf</code> before proceeding with the next
- steps. This is not necessary for official releases.)</p>
-
- <p>To configure the source tree using all the default options,
- simply type <code>./configure</code>. To change the default
- options, <code>configure</code> accepts a variety of variables
- and command line options.</p>
-
- <p>The most important option is the location <code>--prefix</code>
- where Apache is to be installed later, because Apache has to be
- configured for this location to work correctly. More fine-tuned
- control of the location of files is possible with additional <a href="programs/configure.html#installationdirectories">configure
- options</a>.</p>
-
- <p>Also at this point, you can specify which <a href="programs/configure.html#optionalfeatures">features</a> you
- want included in Apache by enabling and disabling <a href="mod/">modules</a>. Apache comes with a <a href="mod/module-dict.html#Status">Base</a> set of modules included by
- default. Other modules are enabled using the
- <code>--enable-<var>module</var></code> option, where
- <var>module</var> is the name of the module with the
- <code>mod_</code> string removed and with any underscore converted
- to a dash. You can also choose to compile modules as <a href="dso.html">shared objects (DSOs)</a> -- which can be loaded
- or unloaded at runtime -- by using the option
- <code>--enable-<var>module</var>=shared</code>. Similarly, you can
- disable Base modules with the
- <code>--disable-<var>module</var></code> option. Be careful when
- using these options, since <code>configure</code> cannot warn you
- if the module you specify does not exist; it will simply ignore the
- option.</p>
-
- <p>In addition, it is sometimes necessary to provide the
- <code>configure</code> script with extra information about the
- location of your compiler, libraries, or header files. This is
- done by passing either environment variables or command line
- options to <code>configure</code>. For more information, see the
- <a href="programs/configure.html">configure manual page</a>.</p>
-
- <p>For a short impression of what possibilities you have, here
- is a typical example which compiles Apache for the installation
- tree <code>/sw/pkg/apache</code> with a particular compiler and flags
- plus the two additional modules <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> and
- <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> for
- later loading through the DSO mechanism:</p>
-
-<div class="example"><p><code>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</code></p></div>
-
- <p>When <code>configure</code> is run it will take several minutes to
- test for the availability of features on your system and build
- Makefiles which will later be used to compile the server.</p>
-
- <p>Details on all the different <code>configure</code> options are
- available on the <a href="programs/configure.html">configure
- manual page</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile" id="compile">Build</a></h2>
-
- <p>Now you can build the various parts which form the Apache
- package by simply running the command:</p>
-
-<div class="example"><p><code>$ make</code></p></div>
-
- <p>Please be patient here, since a base configuration takes
- approximately 3 minutes to compile under a Pentium III/Linux
- 2.2 system, but this will vary widely depending on your
- hardware and the number of modules which you have enabled.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">Install</a></h2>
-
- <p>Now it's time to install the package under the configured
- installation <em>PREFIX</em> (see <code>--prefix</code> option
- above) by running:</p>
-
-<div class="example"><p><code>$ make install</code></p></div>
-
- <p>If you are upgrading, the installation will not overwrite
- your configuration files or documents.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customize" id="customize">Customize</a></h2>
-
- <p>Next, you can customize your Apache HTTP server by editing
- the <a href="configuring.html">configuration files</a> under
- <code><em>PREFIX</em>/conf/</code>.</p>
-
-<div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>
-
- <p>Have a look at the Apache manual under <a href="./">docs/manual/</a> or consult <a href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a> for the most recent version of
- this manual and a complete reference of available <a href="mod/directives.html">configuration directives</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">Test</a></h2>
-
- <p>Now you can <a href="invoking.html">start</a> your Apache
- HTTP server by immediately running:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl start</code></p></div>
-
- <p>and then you should be able to request your first document
- via URL <code>http://localhost/</code>. The web page you see is located
- under the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- which will usually be <code><em>PREFIX</em>/htdocs/</code>.
- Then <a href="stopping.html">stop</a> the server again by
- running:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrading" id="upgrading">Upgrading</a></h2>
-
- <p>The first step in upgrading is to read the release announcement
- and the file <code>CHANGES</code> in the source distribution to
- find any changes that may affect your site. When changing between
- major releases (for example, from 1.3 to 2.0 or from 2.0 to 2.2),
- there will likely be major differences in the compile-time and
- run-time configuration that will require manual adjustments. All
- modules will also need to be upgraded to accomodate changes in the
- module API.</p>
-
- <p>Upgrading from one minor version to the next (for example, from
- 2.0.55 to 2.0.57) is easier. The <code>make install</code>
- process will not overwrite any of your existing documents, log
- files, or configuration files. In addition, the developers make
- every effort to avoid incompatible changes in the
- <code>configure</code> options, run-time configuration, or the
- module API between minor versions. In most cases you should be able to
- use an identical <code>configure</code> command line, an identical
- configuration file, and all of your modules should continue to
- work. (This is only valid for versions after 2.0.41; earlier
- versions have incompatible changes.)</p>
-
- <p>If you kept the source tree from your last installation,
- upgrading is even easier. The file <code>config.nice</code> in
- the root of the old source tree contains the exact
- <code>configure</code> command line that you used to configure the
- source tree. Then to upgrade from one version to the next, you
- need only copy the <code>config.nice</code> file to the source
- tree of the new version, edit it to make any desired changes, and
- then run:</p>
-
- <div class="example"><p><code>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </code></p></div>
-
- <div class="warning">You should always test any new version in your
- environment before putting it into production. For example, you
- can install and run the new version along side the old one by
- using a different <code>--prefix</code> and a
- different port (by adjusting the <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> directive) to test for any
- incompatibilities before doing the final upgrade.</div>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/install.html.es b/docs/manual/install.html.es
deleted file mode 100644
index 2117e5e2bd..0000000000
--- a/docs/manual/install.html.es
+++ /dev/null
@@ -1,434 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Compilación e Instalación - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Compilación e Instalación</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>Este documento explica cómo compilar e instalar Apache en
- sistemas Unix y tipo Unix. Para obtener información sobre
- cómo compilar e instalar en Windows, consulte la sección
- <a href="platform/windows.html">Usar Apache en Microsoft
- Windows</a>. Para otras plataformas, consulte la
- documentación sobre <a href="platform/">plataformas</a>.</p>
-
- <p>El entorno de configuración e instalación de Apache
- 2.0 ha cambiado completamente respecto al de Apache 1.3. Apache
- 1.3 usaba un conjunto de scripts a medida para conseguir una
- instalación fácil. Apache 2.0 usa <code>libtool</code> y
- <code>autoconf</code> para crear un entorno más parecido al
- de muchos otros proyectos Open Source.</p>
-
- <p>Si lo que quiere hacer es actualizar su servidor Apache desde
- una versión menor (por ejemplo, desde la 2.0.50 a la 2.0.51),
- pase directamente a la sección de <a href="#upgrading">actualización</a>.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Visión general del proceso para
- impacientes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#requirements">Requisitos</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#download">Descargar</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extract">Descomprimir</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configure">Configuración de la estructura de
-directorios</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compile">Compilar</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">Instalar</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#customize">Personalizar</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#test">Comprobar que la instalación
-funciona</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">Actualizar una instalación
-prrevia</a></li>
-</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="programs/configure.html">Configuración de la
-estructura de directorios</a></li><li><a href="invoking.html">Iniciar Apache</a></li><li><a href="stopping.html">Parar y reiniciar Apache</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Visión general del proceso para
- impacientes</a></h2>
-
- <table>
-
- <tr>
- <td><a href="#download">Descargar</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Descomprimir</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Ejecutar el script configure</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Compilar</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Instalar</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Personalizar</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Comprobar que la instalación
- funciona</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> hay que reemplazarlo por el número de la
- versión menor, y <em>PREFIX</em> hay que reemplazarlo por la
- ruta en la que se va a instalar Apache. Si no especifica
- ningún valor en <em>PREFIX</em>, el valor por defecto que se
- toma es <code>/usr/local/apache2</code>.</p>
-
- <p>Cada parte del proceso de configuración e instalación
- se describe detalladamente más abajo, empezando por los
- requisitos para compilar e instalar Apache.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">Requisitos</a></h2>
-
- <p>Estos son los requisitos necesarios para compilar Apache:</p>
-
- <dl>
- <dt>Espacio en disco</dt> <dd>Compruebe que tiene disponibles al
- menos 50 MB de espacio libre en disco. Después de la
- instalación, Apache ocupa aproximadamente 10 MB. No
- obstante, la necesidad real de espacio en disco varía
- considerablemente en función de las opciones de
- configuración que elija y de los módulos externos que
- use.</dd>
-
- <dt>Compilador ANSI-C y Build System</dt> <dd>Compruebe que
- tiene instalado un compilador de ANSI-C. Se recomienda el <a href="http://www.gnu.org/software/gcc/gcc.html">Compilador GNU C
- (GCC)</a> de la <a href="http://www.gnu.org/">Free Software
- Foundation (FSF)</a> (con la versión 2.7.2 es
- suficiente). Si no tiene instaldo el GCC, entonces compruebe que
- el compilador que va a utilizar cumple con los estándares
- ANSI. Además, su <code>PATH</code> debe contener la
- ubicación donde de encuentran las herramientas básicas
- para compilar tales como <code>make</code>.</dd>
-
- <dt>Ajuste exacto del reloj del sistema</dt> <dd>Los elementos
- del protocolo HTTP están expresados según la hora del
- dia. Por eso, si quiere puede investigar como instalar alguna
- utilidad para sincronizar la hora de su sistema. Para esto,
- normalmente, se usan los programas <code>ntpdate</code> o
- <code>xntpd</code>, que están basados en el protocolo
- Network Time Protocol (NTP). Consulte el grupo de noticias <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
- y el <a href="http://www.eecis.udel.edu/~ntp/">sitio web de NTP
- </a> para obtener más información sobre NTP y los
- servidores públicos de tiempo.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a> [OPCIONAL]</dt>
- <dd>Para algunos de los scripts de soporte como <a href="programs/apxs.html">apxs</a> o <a href="programs/dbmmanage.html">dbmmanage</a> (que están
- escritos en Perl) es necesario el intérprete de Perl 5 (las
- versiones 5.003 o posteriores son suficientes). Si el script
- `<code>configure</code>' no encuentra ese intérprete
- tampoco pasa nada. Aún puede compilar e instalar Apache
- 2.0. Lo único que ocurrirá es que esos scripts de
- soporte no podrán ser usados. Si usted tiene varios
- interpretes de Perl instalados (quizás Perl 4 porque estaba
- ya incluido en su distribución de Linux y Perl 5 porque lo
- ha instalado usted), entonces se recomienda usar la opción
- <code>--with-perl</code> para asegurarse de que
- <code>./configure</code> usa el intérprete correcto.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="download" id="download">Descargar</a></h2>
-
- <p>Puede descargar Apache desde <a href="http://httpd.apache.org/download.cgi">la sección de
- descargas del sitio web de Apache</a> el cual tiene varios
- mirrors. Para la mayoría de los usuarios de Apache que tienen
- sistemas tipo Unix, se recomienda que se descarguen y compilen el
- código fuente. El proceso de compilación (descrito
- más abajo) es fácil, y permite adaptar el servidor
- Apache a sus necesidades. Además, las versiones de
- disponibles en archivos binarios no están siempre actulizadas
- con las últimas modificaciones en el codigo fuente. Si se
- descarga un binario, siga las instrucciones contenidas en el
- archivo <code>INSTALL.bindist</code> incluido en la
- distribución</p>
-
- <p>Después de la descarga, es importante que verifique que el
- archivo descargado del servidor HTTP Apache está completo y
- sin modificaciones. Esto puede hacerlo comparando el archivo
- descargado (.tgz) con su firma PGP. Instrucciones detalladas de
- cómo hacer esto están disponibles en <a href="http://httpd.apache.org/download.cgi#verify"> la
- sección de descargas</a> junto con un ejemplo de cómo <a href="http://httpd.apache.org/dev/verification.html">usar
- PGP</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extract" id="extract">Descomprimir</a></h2>
-
- <p>Extraer el código fuente del archivo .tgz que acabada de
- descargar es muy fácil. Ejecute los siguientes comandos:</p>
-
-<div class="example"><p><code>
- $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar
-</code></p></div>
-
- <p>Estos comandos crearán un nuevo directorio dentro del
- directorio en el que se encuentra y que contendrá el
- código fuente de la distribución. Debe cambiarse a ese
- directorio con <code>cd</code> para proceder a compilar el
- servidor Apache.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configure" id="configure">Configuración de la estructura de
-directorios</a></h2>
-
- <p>El siguiente paso es configurar la estructura de directorios
- para su plataforma y sus necesidades personales. Esto se hace
- usando el script <code>configure</code> incluido en el directorio
- raiz de la distribución que acaba de descargar. (Los
- desarrolladores que se descarguen la versión del CVS de la
- estructura de directorios necesitarán tener instalados
- <code>autoconf</code> y <code>libtool</code>, y necesitarán
- ejecutar <code>buildconf</code> antes de continuar con los
- siguientes pasos. Esto no es preciso para las versiones
- oficiales.)</p>
-
- <p>Para configurar la estructura de directorios a partir del
- código fuente usando las opciones por defecto, solo tiene que
- ejecutar <code>./configure</code>. Para cambiar las opciones por
- defecto, <code>configure</code> acepta una serie de variables y
- opciones por la línea de comandos.</p>
-
- <p>La opción más importante es <code>--prefix</code> que
- es el directorio en el que Apache va a ser instalado después,
- porque Apache tiene que ser configurado para el directorio que se
- especifique para que funcione correctamente. Es posible lograr un
- mayor control del lugar donde se van a instalar los ficheros de
- Apache con otras <a href="programs/configure.html#installationdirectories">opciones de
- configuración</a>.</p>
-
- <p>En este momento, puede especificar que <a href="programs/configure.html#optionalfeatures">características
- o funcionalidades</a> quiere incluir en Apache activando o
- desactivando <a href="mod/">módulos</a>. Apache viene con
- una <a href="mod/module-dict.html#Status">selección
- básica</a> de módulos incluidos por defecto. Se pueden
- activar otros módulos usando la opción
- <code>--enable-<var>module</var></code>, donde <var>module</var>
- es el nombre del módulo sin el <code>mod_</code> y
- convirtiendo los guiones bajos que tenga en guiones normales.
- También puede optar por compilar módulos como <a href="dso.html">objetos dinámicos compartidos (DSOs)</a> --
- que pueden ser activados o desactivados al ejecutar -- usando la
- opción <code>--enable-<var>module</var>=shared</code>. De
- igual manera, puede desactivar alguno de los módulos que
- vienen por defecto en la selección basica con la opción
- <code>--disable-<var>module</var></code>. Tenga cuidado cuando
- use estas opciones, porque <code>configure</code> no le
- avisará si el módulo que especifica no existe;
- simplemente ignorará esa opción.</p>
-
- <p>Además, a veces es necesario pasarle al script
- <code>configure</code> información adicional sobre donde esta
- su compilador, librerias o ficheros de cabecera. Esto se puede
- hacer, tanto pasando variables de entorno, como pasandole opciones
- a <code>configure</code> a través de la línea de
- comandos. Para más información, consulte el <a href="programs/configure.html">Manual del script
- configure</a>.</p>
-
- <p>Para que se haga una idea sobre las posibilidades que tiene,
- aquí tiene un ejemplo típico que configura Apache para
- la ruta <code>/sw/pkg/apache</code> con un compilador y unos flags
- determinados, y además, con dos módulos adicionales
- <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> y <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> para
- cargarlos después a través del mecanismo DSO:</p>
-
-<div class="example"><p><code>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</code></p></div>
-
- <p>Cuando se ejecuta <code>configure</code> se comprueban que
- características o funcionalidades están disponibles en
- su sistema y se crean los Makefiles que serán usados luego
- para compilar el servidor. Esto tardará algunos minutos.</p>
-
- <p>La información sobre todas las opciones de
- <code>configure</code> está disponible en el <a href="programs/configure.html">Manual del script
- configure</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile" id="compile">Compilar</a></h2>
-
- <p>Ahora puede compilar las diferentes partes que forman Apache
- simplemente ejecutando el siguiente comando:</p>
-
-<div class="example"><p><code>$ make</code></p></div>
-
- <p>Por favor, tanga un poco de paciencia ahora, porque una
- configuración básica tarda aproximadamente 3 minutos en
- compilar en un Pentium III con un sistema Linux 2.2, pero este
- tiempo puede variar considerablemente en función de su
- hardware y del número de módulos que haya
- seleccionado.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">Instalar</a></h2>
-
- <p>Ahora es el momento de instalar el paquete en el diretorio
- elegido en <em>PREFIX</em> (consulte la opción
- <code>--prefix</code> más arriba) ejecutando:</p>
-
-<div class="example"><p><code>$ make install</code></p></div>
-
- <p>Si usted está solo actualizando una instalación
- anterior, la nueva instalación no sobreescribirá sus
- ficheros de configuración ni otros documentos.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customize" id="customize">Personalizar</a></h2>
-
- <p>El paso siguiente, es personalizar su servidor Apache editando
- los <a href="configuring.html">ficheros de configuración</a>
- que están en <code><em>PREFIX</em>/conf/</code>.</p>
-
-<div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>
-
- <p>échele un vistazo al Manual de Apache que está en <a href="./">docs/manual/</a> o consulte en <a href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a> la versión más
- reciente de este manual y la Guia de Referencia de todas las <a href="mod/directives.html">directivas de configuración</a>
- disponibles.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">Comprobar que la instalación
-funciona</a></h2>
-
- <p>Ahora puede <a href="invoking.html">iniciar</a> su servidor
- Apache cuando quiera ejecutando:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl start</code></p></div>
-
- <p>y entonces debe poder acceder al documento que tenga
- especificado por defecto usando el siguiente URL:
- <code>http://localhost/</code>. El documento que verá
- estará en <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> y
- casi siempre estará en <code><em>PREFIX</em>/htdocs/</code>.
- Si quiere <a href="stopping.html">parar</a> el servidor, puede
- hacerlo ejecutando:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrading" id="upgrading">Actualizar una instalación
-prrevia</a></h2>
-
- <p>El primer paso para actualizar una instalación anterior es
- leer las especificaciones de la versión y el fichero
- <code>CHANGES</code> en la distribución de código fuente
- que ha descargado para encontrar los cambios que puedan afectar a
- su instalación actual. Cuando el cambio sea entre versiones
- mayores (por ejemplo, de la 1.3 a la 2.0 o de la 2.0 a la 2.2),
- entonces es más probable que haya diferencias importantes en
- la compilación y en la ejecución que necesitarán
- ajustes manuales. Todos los módulos necesitarán
- también ser actualizados para adaptarse a los cambios en el
- interfaz de programación (API) de módulos.</p>
-
- <p>La actualización cuando el cambio es entre versiones
- menores (por ejemplo, de la 2.0.55 a la 2.0.57) es más
- fácil. El proceso <code>make install</code> no
- sobreescribirá ninguno de los documentos existentes, archivos
- log, o archivos de configuración. Además, los
- desarrolladores hacen todos los esfuerzos posibles para evitar
- cambios que generen incompatibilidades en las opciones de
- <code>configure</code>, en la configuración de la
- ejecución o en la interfaz de programación de
- módulos. En la mayor parte de los casos debe poder usar un
- comando <code>configure</code> idéntico, un fichero de
- configuracién idéntico, y todos sus módulos deben
- seguir funcionando. (Esto es válido solo para versiones
- posteriores a la 2.0.41; las versiones anteriores contienen
- cambios incompatibles.)</p>
-
- <p>Si va a conservar la estructura de directorios de su anterior
- instalación, la actualización es más fácil
- incluso. El fichero <code>config.nice</code> que está en el
- directorio raiz de la estructura de directorios antigua contiene
- exactamente el comando <code>configure</code> que usted usó
- para configurar la estructura de directorios de Apache. Entonces,
- para actualizar su instalación de una versóon a la
- siguinete, solo tiene que copiar el archivo
- <code>config.nice</code> a la estructura de directorios del
- código fuente de la nueva versión, editarlo, hacer
- cualquier cambio que desee, y ejecutarlo :</p>
-
- <div class="example"><p><code>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </code></p></div>
-
- <div class="warning">Tenga en cuenta que antes de poner una nueva
- versión de Apache en producción, debe siempre probarla
- antes en su entorno. Por ejemplo, puede instalar y ejecutar la
- nueva versión junto con la antigua usando un
- <code>--prefix</code> diferente y un puerto diferente (modificando
- la directiva <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>)
- para comprobar que no existe ninguna incompatibilidad antes de
- hacer la actualización definitiva.</div>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/install.html.fr b/docs/manual/install.html.fr
deleted file mode 100644
index 481b9e313d..0000000000
--- a/docs/manual/install.html.fr
+++ /dev/null
@@ -1,427 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Compilation et Installation - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Compilation et Installation</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>Ce document couvre la compilation et l'installation d'Apache sur les
- systèmes Unix et clones d'Unix. Pour la compilation et l'installation sous
- Windows, voir <a href="platform/windows.html">Utiliser Apache sous Windows
- </a>. Pour les autres plates-formes, voir la documentation des <a href="platform/">plates-formes</a>.</p>
-
- <p>L'environnement de configuration et d'installation d'Apache 2.0 a été
- complétement revu par rapport à celui d'Apache 1.3. Apache 1.3 utilisait un
- ensemble de scripts pour permettre une installation facile. Apache 2.0
- utilise à présent <code>libtool</code> et <code>autoconf</code> afin de
- créer un environnement le plus proche possible d'autres projets
- Logiciel Libre.</p>
-
- <p>Si vous faite une mise à niveau d'une version mineure à la suivante (par
- exemple, de 2.0.50 à 2.0.51), veuillez s'il vous plaît passer directement à
- la section <a href="#upgrading">Mise à niveau</a>.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Survol Rapide pour les
- impatients</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#requirements">Pré-requis</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#download">Télécharger</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extract">Extraire</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configure">Configurer l'arborescence source</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compile">Compiler</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">Installer</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#customize">Personnaliser la Configuration</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#test">Tester</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">Mise à niveau</a></li>
-</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="programs/configure.html">Configurer l'arborescence source</a></li><li><a href="invoking.html">Démarrage d'Apache</a></li><li><a href="stopping.html">Arrêt et Redémarrage</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Survol Rapide pour les
- impatients</a></h2>
-
- <table>
-
- <tr>
- <td><a href="#download">Télécharger</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Extraire</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Configurer</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Compiler</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Installer</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Personnaliser</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Tester</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> doit être remplacé par le numéro de version mineure actuel, et
- <em>PREFIX</em> par le chemin où le serveur doit être installé. Si
- <em>PREFIX</em> n'est pas spécifié, l'installation se fait dans
- <code>/usr/local/apache2</code>.</p>
-
- <p>Chacune des sections du processus de compilation et d'installation est
- décrite ci-après, en commençant par les pré-requis à la compilation et à
- l'installation d'Apache HTTPD.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">Pré-requis</a></h2>
-
- <p>Les pré-requis suivants sont nécessaire pour l'installation d'Apache:</p>
-
- <dl>
- <dt>Espace Disque</dt>
- <dd>Au moins 50 Mo d'espace disque temporaire sont nécessaires. Après
- installation, Apache occupe environ 10 Mo sur le disque. L'espace disque
- occupé par une installation complète dépend beaucoup de la configuration
- du serveur, ainsi que de la présence éventuelle de modules tiers.</dd>
-
- <dt>Compilateur C ANSI et Build</dt>
- <dd>Un compilateur C ANSI doit être utilisé. Le <a href="http://www.gnu.org/software/gcc/gcc.html">compilateur C GNU
- (GCC)</a> de la <a href="http://www.gnu.org/">Free Software Foundation
- (FSF)</a> est recommandé (la version 2.7.2 convient). En cas
- d'absence de GCC, vérifiez que le compilateur fourni avec l'architecture
- utilisée est conforme aux normes ANSI. De plus, les outils de constructions
- de base, tel <code>make</code>, doivent être présents dans votre
- <code>PATH</code>.</dd>
-
- <dt>S'assurer que la machine est et reste à l'heure</dt>
- <dd>Certains éléments du protocole HTTP sont exprimés en tant qu'heure de
- la journée. Aussi est-il important de s'assurer que le système où Apache
- doit tourner dispose de mécanismes de synchronisation temporelle. En
- général, les programmes <code>ntpdate</code> ou <code>xntpd</code> sont
- utilisés; ces programmes implémentent le Network Time Protocol (NTP).
- Voir le groupe Usenet <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a> et la <a href="http://www.eecis.udel.edu/~ntp/">page NTP</a> pour plus de détails
- sur les logiciels NTP et les serveurs de temps publics.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [FACULTATIF]</dt>
- <dd>Certains des scripts fournis avec Apache, tel <a href="programs/apxs.html">apxs</a> ou <a href="programs/dbmmanage.html">dbmmanage</a> (qui sont écrits en
- Perl) nécessitent l'interpréteur Perl 5 (version 5.003 ou supérieure).
- Au cas où le script <code>configure</code> ne trouve pas d'interpréteur
- Perl, la compilation sera quand même réalisée sans souci. Seuls ces
- scripts ne seront pas utilisables. Si plusieurs interpréteurs Perl sont
- installés (par exemple, Perl 4 fourni avec l'OS, et Perl 5 installé par
- l'administrateur), il est conseillé de passer l'option
- <code>--with-perl</code> afin de garantir que le bon interpréteur est
- utilisé par <code>./configure</code>.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="download" id="download">Télécharger</a></h2>
-
- <p>Apache est téléchargeable depuis le <a href="http://httpd.apache.org/download.cgi">site de téléchargement
- d'Apache</a> qui fournit la liste de plusieurs miroirs. Là sont disponibles
- les dernières versions. La plupart des
- utilisateurs d'Apache sur des systèmes de type Unix devraient
- probablement télécharger et compiler une version à partir du code source.
- Le processus de construction (décrit ci-dessous) est facile et
- vous permet d'adapter votre serveur pour convenir à vos besoins.
- En outre, les versions binaires ne sont souvent pas à jour avec
- les dernières versions du code source. Si vous téléchargez une
- version binaire, suivez les instructions dans le dossier
- <code>INSTALL.bindist</code> à l'intérieur de la distribution.</p>
-
- <p>Après le téléchargement, il est important de vérifier que les sources
- téléchargées sont bien complètes et non modifiées, et ce surtout si un
- miroir a été utilisé pour le téléchargement. Ceci peut être fait en
- testant l'archive tar téléchargée avec la signature PGP. Cette procédure
- s'effectue en 2 étapes. D'abord, il faut récupérer le fichier <a href="http://www.apache.org/dist/httpd/KEYS"><code>KEYS</code></a> du site
- de distribution d'Apache. (Pour vérifier que ce fichier <code>KEYS</code>
- n'a pas été modifié, une bonne idée peut être d'utiliser un fichier d'une
- distribution précédente d'Apache ou d'importer les clés d'un serveur de
- clés public.) Les clés peuvent être importées dans le keyring de
- l'utilisateur au moyen d'une des commandes (selon la version de PGP):</p>
-
-<div class="example"><p><code>$ pgp &lt; KEYS</code></p></div>
-
- <p>ou </p>
-
-<div class="example"><p><code>$ gpg --import KEYS</code></p></div>
-
- <p>La prochaine étape est de tester l'archive tar au moyen de la signature
- PGP, qui devrait toujours être disponible sur le <a href="http://httpd.apache.org/download.cgi">site principal d'Apache</a>.
- Un lien vers cette signature est placé derrière le lien de téléchargement
- correspondant ou peut être trouvé dans le répertoire correspondant sur <a href="http://www.apache.org/dist/httpd/">le site de distribution
- d'Apache</a>. Le nom de ce fichier est le même que celui de l'archive
- source, avec en plus l'extension <code>.asc</code>. La distribution
- téléchargée peut alors être vérifiée au moyen de la commande (à nouveau,
- selon la version de PGP):</p>
-
-<div class="example"><p><code>$ pgp httpd-2_1_<em>NN</em>.tar.gz.asc</code></p></div>
-
- <p>ou</p>
-
-<div class="example"><p><code>$ gpg --verify httpd-2_1_<em>NN</em>.tar.gz.asc</code></p></div>
-
- <p>Un message comme celui-ci devrait s'afficher</p>
-
-<div class="example"><p><code>Good signature from user "Martin Kraemer
- &lt;martin@apache.org&gt;".</code></p></div>
-
- <p>Selon les relations de confiances contenues dans le keyring de
- l'utilisateur, un message peut s'afficher, spécifiant que la relation entre
- la clé et le signataire ne peut être vérifiée. Ceci n'est pas un problème si
- vous ne mettez pas en doute l'authenticité du fichier <code>KEYS</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extract" id="extract">Extraire</a></h2>
-
- <p>Extraire les sources à partir de l'archive tar est une simple affaire de
- décompression et d'extraction tar:</p>
-
-<div class="example"><p><code>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</code></p></div>
-
- <p>Un nouveau répertoire est créé dans le répertoire courant, il contient le
- code source de la distribution. Il faut aller dans ce répertoire au moyen
- de la commande <code>cd</code> avant de commencer la compilation du
- serveur.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configure" id="configure">Configurer l'arborescence source</a></h2>
-
- <p>L'étape suivante est la configuration de l'arborescence source d'Apache,
- pour votre plate-forme et selon les nécessités du site. Cette configuration est
- réalisée au moyen du script <code>configure</code> fourni dans le
- répertoire racine de la distribution. (Les développeurs qui téléchargent
- Apache via CVS devront utiliser les outils <code>autoconf</code> et
- <code>libtool</code> avant de passer à la suite. Ceci n'est pas nécessaire
- pour les versions officielles.)</p>
-
- <p>Pour configurer l'arborescence source en utilisant les options par
- défaut, tapez <code>./configure</code>. Pour modifier les valeurs des
- options par défaut, <code>configure</code> accepte un grand nombre de
- variables et d'options de ligne de commande. </p>
-
- <p>La plus importante de ces options est le chemin du répertoire où
- Apache sera installé,
- car Apache doit être configuré pour que cet emplacement fonctionne
- correctement. Plusieurs autres options sont disponibles pour
- le contrôle fin de l'emplacement des fichiers résultants avec <a href="programs/configure.html#installationdirectories">options de
- configuration</a>.</p>
-
- <p>En outre, à ce moment, vous pouvez indiquer quels <a href="programs/configure.html#optionalfeatures">fonctionnalités</a>
- vous voulez inclure dans Apache en ajoutant et/ou en retranchant
- des <a href="mod/">modules</a>. Apache vient avec un ensemble
- de modules de <a href="mod/module-dict.html#Status">Base</a>
- inclus par défaut. D'autres modules peuvent être ajoutés en utilisant
- l'option <code>--enable-<var>module</var></code>, où
- <var>module</var> est le nom du module avec la chaîne
- <code>mod_</code> coupée et avec les caractères de soulignement
- convertis en tirets. Vous pouvez également choisir de compiler
- des modules en tant qu'<a href="dso.html">objets partagés (DSOs)</a>,
- qui peuvent être chargés ou déchargé à l'exécution -- en employant
- l'option <code>--enable-<var>module</var>=shared</code>.
- De même, vous pouvez retrancher les modules de Base avec l'option
- <code>--disable-<var>module</var></code>. Prenez garde lorsque
- vous employez ces options, puisque <code>configure</code> ne peut
- vous informer si le module cible n'existe pas; <code>configure</code>
- ignorera simplement l'option.</p>
-
- <p>Il est parfois nécessaire de fournir des
- informations supplémentaires au script
- <code>configure</code> sur l'emplacement de vos
- compilateur, bibliothèques ou dossiers d'en-tête. Ceci se fait en
- passant les variables d'environnement ou des options incluses sur la ligne
- de commande à <code>configure</code>. Pour plus d'information
- sur ce sujet, consultez la page de documentation
- <a href="programs/configure.html">configurer</a>.</p>
-
- <p>L'exemple suivant compile Apache pour être installé
- dans <code>/sw/pkg/apache</code> avec un
- compilateur et des options de compilation particulières, ainsi que les deux
- modules <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> et <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code>, qui
- pourront être chargés plus tard au moyen des mécanismes DSO:</p>
-
-<div class="example"><p><code>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</code></p></div>
-
- <p>Une fois lancé, <code>configure</code> peut prendre quelques minutes
- pour tester les possibilités du système et produire les fichiers
- <code>Makefile</code> qui seront utilisés pour construire le serveur.</p>
-
- <p>Les détails de toutes les options <code>configure</code> sont
- disponibles sur la page de documentation <a href="programs/configure.html">configurer</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile" id="compile">Compiler</a></h2>
-
- <p>Les différents composants d'Apache sont à présent prêts à
- être compilés, en tapant simplement la commande:</p>
-
-<div class="example"><p><code>$ make</code></p></div>
-
- <p>Un peu de patience est requise, une configuration standard met environ 3
- minutes à compiler sur un Pentium III sous Linux 2.2. Ce temps peut
- varier largement suivant le matériel utilisé et les modules
- selectionnés.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">Installer</a></h2>
-
- <p>Il est temps d'installer le 'package' dans le répertoire d'installation
- <em>PREFIX</em> configuré auparavant (voir l'option <code>--prefix</code>
- ci-dessus) en tapant:</p>
-
-<div class="example"><p><code>$ make install</code></p></div>
-
- <p>En cas de mise à jour, l'installation n'écrasera ni les fichiers de
- configuration du serveur, ni ses documents.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customize" id="customize">Personnaliser la Configuration</a></h2>
-
- <p>Il reste à présent à configurer le serveur HTTP Apache, en éditant les
- <a href="configuring.html">fichiers de configuration</a> placés dans
- <code><em>PREFIX</em>/conf/</code>.</p>
-
-<div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>
-
- <p>A consulter : le manuel d'Apache dans
- <a href="./">docs/manual/</a> ou bien <a href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a> pour la dernière version de ce
- manuel, ainsi qu'une référence complète de toutes les
- <a href="mod/directives.html">directives de configuration</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">Tester</a></h2>
-
- <p>Une fois configuré, le serveur HTTP Apache peut être
- <a href="invoking.html">démarré</a> en tapant:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl start</code></p></div>
-
- <p>Vous devriez alors pouvoir tester l'URL <code>http://localhost/</code>.
- La page affichée se trouve dans le répertoire
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>, habituellement configuré
- en tant que <code><em>PREFIX</em>/htdocs/</code>.
- Le serveur peut être <a href="stopping.html">arrêté</a> en tapant:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrading" id="upgrading">Mise à niveau</a></h2>
-
- <p>La première étape pour une mise à niveau est de lire
- l'annonce de la nouvelle version et le fichier <code>CHANGES</code>
- dans la distribution afin de trouver tous les changements qui
- peuvent affecter votre site. Si la mise à jour est effectuée
- entre deux versions principales (par exemple, de 1.3 à 2.0 ou
- de 2.0 à 2.2), attendez-vous à des différences majeures
- au moment de la compilation et de l'exécution, exigeant probablement
- des ajustements manuels. Tous les modules devront également
- être mis à niveau pour tenir compte des changements de l'API.</p>
-
- <p>La mise à niveau d'une version mineure à une plus récente
- (par exemple, de 2.0.55 à 2.0.57) est plus facile. Le processus
- <code>make install</code> n'écrasera aucun de vos documents,
- fichiers journaux, ou fichiers de configuration existants.
- En outre, les développeurs font tous les efforts possibles
- pour éviter les changements incompatibles des options
- <code>configure</code>, de la configuration d'exécution,
- ou de l'API entre les versions mineures. Dans la plupart
- des cas vous devriez pouvoir employer une ligne de commande
- <code>configure</code> et un fichier de configuration
- identiques. De plus, tous vos modules devraient continuer à fonctionner.
- (Ceci ne vaut que pour les versions postérieures à 2.0.41;
- les versions antérieures ont des changements incompatibles.)</p>
-
- <p>Si vous avez gardé l'arborescence source de votre dernière
- installation, la mise à niveau est encore plus facile.
- Le dossier <code>config.nice</code> dans la racine de l'ancienne
- arborescence contient la ligne de commande <code>configure</code>
- exacte que vous avez utilisée pour configurer l'arborescence des
- sources. Pour faire la mise à niveau d'une version à la suivante,
- vous devez copier le dossier <code>config.nice</code> dans
- l'arborescence des sources de la nouvelle version, l'éditer
- pour faire les changements désirés, puis exécuter:</p>
-
- <div class="example"><p><code>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </code></p></div>
-
- <div class="warning">Vous devriez toujours essayer une
- nouvelle version dans un environnement de test avant de la
- mettre dans un environnement de production. Par exemple, vous pouvez
- installer et exécuter la nouvelle version côte à côte avec l'ancienne
- en employant un <code>--prefix</code> et un port différents
- (ce qui est possible en ajustant la directive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>)
- dans le but de tester toutes les incompatibilités possibles avant de
- faire la mise à niveau finale.</div>
-</div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/install.html.ja.euc-jp b/docs/manual/install.html.ja.euc-jp
deleted file mode 100644
index 98ec0b14a4..0000000000
--- a/docs/manual/install.html.ja.euc-jp
+++ /dev/null
@@ -1,392 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>¤³¤Îʸ½ñ¤Ç°·¤¦ÈϰϤϡ¢Unix ¤ä Unix ¤ËÎà»÷¤·¤¿¥·¥¹¥Æ¥à¤Ç¤Î
- Apache ¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤¹¡£ Windows ¤Ë¤ª¤±¤ë
- ¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë¤Ë´Ø¤·¤Æ¤Ï¡Ö<a href="platform/windows.html">Microsoft
- Windows ¤Ç Apache ¤ò»È¤¦</a>¡×¤ò¤´Í÷²¼¤µ¤¤¡£
- ¤½¤Î¾¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ë´Ø¤·¤Æ¤Ï¡Ö<a href="platform/">¥×¥é¥Ã¥È¥Û¡¼¥à</a>¡×¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p> Apache 2.0 ¤ÎÀßÄê¤È¥¤¥ó¥¹¥È¡¼¥ë¤Î´Ä¶­¤Ï¡¢Apache 1.3 ¤È¤Ï
- ´°Á´¤Ë°Û¤Ê¤ë¤â¤Î¤Ë¤Ê¤ê¤Þ¤·¤¿¡£´Êñ¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤ë¤è¤¦¤Ë¡¢
- Apache 1.3 ¤Ç¤ÏÆÃÀ½¥¹¥¯¥ê¥×¥È¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¡£
- Apache 2.0 ¤Ç¤Ï¾¤Î Open Source ¥×¥í¥¸¥§¥¯¥È¤ÈƱÍͤδĶ­¤Ë
- ¤¹¤ë¤¿¤á¤Ë <code>libtool</code> ¤È <code>autoconf</code>
- ¤ò»È¤¦¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥ó¤«¤é¤½¤Î¼¡¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ë
- (2.0.50 ¤«¤é 2.0.51 ¤ØÅù) ¾ì¹ç¤Ï¡¢¤Þ¤º <a href="#upgrading">
- ¥¢¥Ã¥×¥°¥ì¡¼¥É</a>¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">³µÍ× (¤»¤Ã¤«¤Á¤Ê¿Í¸þ¤±)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#requirements">ɬÍפʤâ¤Î</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#download">¥À¥¦¥ó¥í¡¼¥É</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extract">Ÿ³«</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configure">¥½¡¼¥¹¥Ä¥ê¡¼¤òÀßÄꤹ¤ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compile">¥Ó¥ë¥É</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">¥¤¥ó¥¹¥È¡¼¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#customize">¥«¥¹¥¿¥Þ¥¤¥º</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#test">¥Æ¥¹¥È</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">¥¢¥Ã¥×¥°¥ì¡¼¥É</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="programs/configure.html">¥½¡¼¥¹¥Ä¥ê¡¼¤ÎÀßÄê</a></li><li><a href="invoking.html">Apache¤Îµ¯Æ°</a></li><li><a href="stopping.html">Apache¤ÎÄä»ß¤ÈºÆµ¯Æ°</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">³µÍ× (¤»¤Ã¤«¤Á¤Ê¿Í¸þ¤±)</a></h2>
-
- <table>
-
- <tr>
- <td><a href="#download">¥À¥¦¥ó¥í¡¼¥É</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Ÿ³«</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">ÀßÄê</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">¥³¥ó¥Ñ¥¤¥ë</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">¥¤¥ó¥¹¥È¡¼¥ë</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">¥«¥¹¥¿¥Þ¥¤¥º</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">¥Æ¥¹¥È</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> ¤ÏºÇ¿·¤Î¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥ó¥Ê¥ó¥Ð¡¼¤Ë¡¢
- <em>PREFIX</em> ¤Ï¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¥µ¡¼¥Ð¤Ç¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ñ¥¹¤Ë¡¢
- ÃÖ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£<em>PREFIX</em> ¤ò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Î <code>/usr/local/apache2</code> ¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>Apache HTTPD ¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë¤ËɬÍפʤâ¤Î¤ò¤Ï¤¸¤á¤È¤·¤Æ¡¢
- ÊÔ½¸¤È¥¤¥ó¥¹¥È¡¼¥ë¥×¥í¥»¥¹¤Ç¤Î¤½¤ì¤¾¤ì¤Î¹à¤Ï
- ¼¡¤Ë¾Ü¤·¤¯µ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">ɬÍפʤâ¤Î</a></h2>
-
- <p>Apache ¤Î¥Ó¥ë¥É¤Ë¤Ï¼¡¤Î¤â¤Î¤¬É¬ÍפǤ¹:</p>
-
- <dl>
- <dt>¥Ç¥£¥¹¥¯¥¹¥Ú¡¼¥¹</dt>
- <dd>¥Ç¥£¥¹¥¯¤Ë¾¯¤Ê¤¯¤È¤â 50 MB ¤Î°ì»þŪ¤Ê¶õ¤­ÍÆÎ̤¬¤¢¤ë¤è¤¦¤Ë
- µ¤¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤¡£¥¤¥ó¥¹¥È¡¼¥ë¸å¤Ï Apache ¤Ï 10 MB ÄøÅÙ¤Î
- ¥Ç¥£¥¹¥¯¥¹¥Ú¡¼¥¹¤òÀê¤á¤Þ¤¹¡£¼ÂºÝ¤ËɬÍפˤʤë¥Ç¥£¥¹¥¯¥¹¥Ú¡¼¥¹¤Ï¡¢
- ÀßÄꥪ¥×¥·¥ç¥ó¤ä¥µ¡¼¥É¥Ñ¡¼¥Æ¥£¡¼À½¥â¥¸¥å¡¼¥ë¤ò¤É¤¦ÁªÂò¤¹¤ë¤«¤Ë¤è¤Ã¤Æ
- Â礭¤¯ÊѤï¤ë¤Ç¤·¤ç¤¦¡£</dd>
-
- <dt>ANSI-C ¥³¥ó¥Ñ¥¤¥é¤È¥Ó¥ë¥É¥·¥¹¥Æ¥à</dt>
- <dd>ANSI-C ¥³¥ó¥Ñ¥¤¥é¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤ª¤¤¤Æ²¼¤µ¤¤¡£¤ªÁ¦¤á¤Ï <a href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
- ¤Ë¤è¤ë <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- compiler (GCC)</a> ¤Ç¤¹ (¥Ð¡¼¥¸¥ç¥ó 2.7.2 ¤ÇÂç¾æÉפǤ¹)¡£GCC ¤¬¤Ê¤¤¾ì¹ç¤Ï¡¢
- ¾¯¤Ê¤¯¤È¤âÄ󶡤µ¤ì¤Æ¤¤¤ë¥³¥ó¥Ñ¥¤¥é¤¬ ANSI ½àµò¤Ç¤¢¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤ª¤¤¤Æ²¼¤µ¤¤¡£
- ¤½¤ì¤«¤é¡¢ÊÑ¿ô <code>PATH</code> ¤Ë¤Ï <code>make</code>
- ¤È¤¤¤Ã¤¿´ðËÜŪ¤Ê¥Ó¥ë¥É¥Ä¡¼¥ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</dd>
-
- <dt>»þ¹ï¤òÀµ³Î¤Ë¤¹¤ë</dt>
- <dd>HTTP ¥×¥í¥È¥³¥ë¤ÎÍ×ÁǤÏÆü»þ¤Î»þ¹ï¤Çɽ¸½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢
- Àµ³Î¤Ê»þ¹ï¤Ë¥·¥ó¥¯¥í¤µ¤»¤ëµ¡Ç½¤ò¥·¥¹¥Æ¥à¤ËÀßÄꤹ¤ë¤³¤È¤ò¶ãÌ£¤·¤Æ¤ß¤Æ²¼¤µ¤¤¡£
- Network Time Protocol (NTP) ¤ò¥Ù¡¼¥¹¤È¤·¤¿ ntpdate ¤ä xntpd ¥×¥í¥°¥é¥à¤¬
- ¤³¤ÎÌÜŪ¤Ë¤è¤¯ÍѤ¤¤é¤ì¤Þ¤¹¡£NTP ¥½¥Õ¥È¥¦¥§¥¢¤ä¸ø³« NTP
- ¥µ¡¼¥Ð¤Ë´Ø¤¹¤ë¾ÜºÙ¤Ï¡¢Usenet ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥× <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a> ¤ä <a href="http://www.ntp.org">NTP ¥Û¡¼¥à¥Ú¡¼¥¸</a> ¤ò¤´Í÷²¼¤µ¤¤¡£</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [¥ª¥×¥·¥ç¥ó]</dt>
- <dd>Ä󶡤µ¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È´ö¤Ä¤«¡¢Î㤨¤Ð <a href="programs/apxs.html">apxs</a> ¤ä <a href="programs/dbmmanage.html">dbmmanage</a> ¤Ï
- Perl ¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢Perl
- 5 ¥¤¥ó¥¿¥×¥ê¥¿¤¬É¬Íפˤʤê¤Þ¤¹ (5.003 °Ê¹ß)¡£
- "configure"¥¹¥¯¥ê¥×¥È¤Ç¤³¤Î¤è¤¦¤Ê¥¤¥ó¥¿¥×¥ê¥¿¤¬¸«¤Ä¤«¤é¤Ê¤¯¤Æ¤â¡¢
- Ê̤ËÉÔ¶ñ¹ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤â¤Á¤í¤ó¡¢Apache
- 2.0 ¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë¤Ï¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤é¤Î¥µ¥Ý¡¼¥È¥¹¥¯¥ê¥×¥È¤¬»È¤¨¤Ê¤¯¤Ê¤ë¤À¤±¤Ç¤¹¡£
- Perl ¥¤¥ó¥¿¥×¥ê¥¿¤òÊ£¿ô¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤ë¾ì¹ç (¥Ù¥ó¥À¡¼¤Î Perl
- 4 ¤È¼«Ê¬¤ÇÆþ¤ì¤¿ Perl 5 ¤¬¤¢¤ë¾ì¹ç¤Ê¤É) ¤Ï¡¢
- --with-perl ¥ª¥×¥·¥ç¥ó (²¼µ­»²¾È) ¤ò»È¤Ã¤Æ ./configure
- ¤¬Å¬Àڤʤâ¤Î¤ò³Î¼Â¤ËÁª¤Ö¤è¤¦¤Ë¤¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="download" id="download">¥À¥¦¥ó¥í¡¼¥É</a></h2>
-
- <p>Apache ¤Ï <a href="http://httpd.apache.org/download.cgi">Apache HTTP
- ¥µ¡¼¥Ð¥À¥¦¥ó¥í¡¼¥É¥µ¥¤¥È</a>¤«¤é¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤¹¤·¡¢
- Ʊ¤¸¾ì½ê¤Ë´ö¤Ä¤«¤Î¥ß¥é¡¼¥µ¥¤¥È¤â¥ê¥¹¥È¤·¤Æ¤¤¤Þ¤¹¡£
- UNIX ¤ËÎà»÷¤¹¤ë¥·¥¹¥Æ¥à¤Ç Apache ¤ò»È¤¦¥æ¡¼¥¶¤Ï¡¢¥½¡¼¥¹¤ò
- ¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥Ó¥ë¥É¤·¤¿¤Û¤¦¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
- ¥Ó¥ë¥É¤Î¼ê½ç¡Ê²¼µ­¡Ë¤Ï´Êñ¤Ç¤¹¤·¡¢¤½¤Î¤ª¤«¤²¤Ç¥Ë¡¼¥º¤Ë
- ¸«¹ç¤Ã¤¿¥«¥¹¥¿¥Þ¥¤¥º¤ò´Êñ¤Ë¤Ç¤­¤Þ¤¹¡£
- ¤µ¤é¤Ë¡¢¥Ð¥¤¥Ê¥ê¤Î¥ê¥ê¡¼¥¹¤Ï¥½¡¼¥¹¥ê¥ê¡¼¥¹¤è¤ê¤â
- ÃÙ¤ì¤Æ¤¤¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£
- ¤½¤ì¤Ç¤â¥Ð¥¤¥Ê¥ê¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤ÎÃæ¤Ë¤¢¤ë <code>INSSTALL.bindist</code>
- ¥Õ¥¡¥¤¥ë¤ÎÀâÌÀ¤Ë½¾¤Ã¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¥À¥¦¥ó¥í¡¼¥É¸å¡¢¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤â¤Î¤¬ Apache HTTP
- ¥µ¡¼¥Ð¤Î´°Á´¤Ç²þã⤵¤ì¤Æ¤¤¤Ê¤¤¥Ð¡¼¥¸¥ç¥ó¤Ç¤¢¤ë¤³¤È¤ò
- ¸¡¾Ú¤¹¤ë¤³¤È¤¬½ÅÍפǤ¹¡£¤³¤ì¤Ï¥À¥¦¥ó¥í¡¼¥É¤·¤¿ tarball ¤Î PGP ½ð̾¤ò
- ¥Æ¥¹¥È¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¸¡¾Ú¤·¤Þ¤¹¡£
- ¤³¤Î¼ê½ç¤Î¾ÜºÙ¤Ï <a href="http://httpd.apache.org/download.cgi#verify">¥À¥¦¥ó¥í¡¼¥É
- ¥Ú¡¼¥¸</a> ¤Ë¤¢¤ê¡¢¤µ¤é¤Ë¾Ü¤·¤¤Îã¤Ï <a href="http://httpd.apache.org/dev/verification.html">PGP ¤Î»ÈÍÑ
- </a> ¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extract" id="extract">Ÿ³«</a></h2>
-
- <p>Apache HTTPD ¤Î tarball
- ¤«¤é¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤òŸ³«¤·¤Æ¼è¤ê½Ð¤¹¤È¤Ï¡¢
- ñ¤Ê¤ë°µ½Ì¤Î²ò½ü¤È tar ¤ÎŸ³«¤Ç¤¹:</p>
-
-<div class="example"><p><code>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</code></p></div>
-
- <p>ÇÛÉÛÍѤΥ½¡¼¥¹¥³¡¼¥É¤¬¤¢¤ë¸½ºß¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë¡¢
- ¿·¤·¤¤¥Ç¥£¥ì¥¯¥È¥ê¤¬ºî¤é¤ì¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ëÃʳ¬¤Ë¿Ê¤àÁ°¤Ë¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- <code>cd</code> ¤Ç°ÜÆ°¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configure" id="configure">¥½¡¼¥¹¥Ä¥ê¡¼¤òÀßÄꤹ¤ë</a></h2>
-
- <p>¼¡¤Î¥¹¥Æ¥Ã¥×¤Ï¡¢¤¢¤Ê¤¿¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤È
- ¸Ä¿ÍŪ¤ÊÍ×µá¤Ë¹ç¤¦¤è¤¦¤Ë Apache
- ¥½¡¼¥¹¥Ä¥ê¡¼¤òÀßÄꤹ¤ë¤³¤È¤Ç¤¹¡£
- ¤³¤ì¤ÏÇÛÉۥǥ£¥ì¥¯¥È¥ê¤Î¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¡¢
- <code><a href="programs/configure.html">configure</a></code>
- ¥¹¥¯¥ê¥×¥È¤Ç¹Ô¤Ê¤¤¤Þ¤¹¡£
- (Apache ¥½¡¼¥¹¥Ä¥ê¡¼¤Î CVS
- ÈǤò¥À¥¦¥ó¥í¡¼¥É¤·¤¿³«È¯¼Ô¤Ï¡¢¼¡¤Î¥¹¥Æ¥Ã¥×¤Ë¿Ê¤àÁ°¤Ë
- <code>autoconf</code> ¤È<code>libtool</code>
- ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ <code>buildconf</code>
- ¤ò¼Â¹Ô¤¹¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
- ¸ø¼°¥ê¥ê¡¼¥¹¤Ç¤Ï¤³¤Îºî¶È¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£) </p>
-
- <p>¥Ç¥Õ¥©¥ë¥È¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¥½¡¼¥¹¥Ä¥ê¡¼¤òÁ´¤ÆÀßÄꤹ¤ë
- ¤Î¤Ç¤¢¤ì¤Ð¡¢Ã±½ã¤Ë <code>./configure</code> ¤È¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¥Ç¥Õ¥©¥ë¥È¥ª¥×¥·¥ç¥ó¤òÊѹ¹¤Ç¤­¤ë¤è¤¦¤Ë¡¢<code>configure</code>
- ¤Ë¤ÏÍÍ¡¹¤ÊÊÑ¿ô¤ä¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>ºÇ¤â½ÅÍפʥª¥×¥·¥ç¥ó¤Ï¡¢Apache ¤¬¤³¤Î¸å¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë°ÌÃÖ
- <code>--prefix</code> ¤Ç¤¹¡£Apache ¤Ï¡¢¤³¤Î¥¤¥ó¥¹¥È¡¼¥ë°ÌÃÖ¤Ë
- ¤ª¤¤¤ÆÀµ¾ï¤ËÆ°ºî¤¹¤ë¤è¤¦¤ËÀßÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤«¤é¤Ç¤¹¡£
- ¤µ¤é¤Ë¾ÜºÙ¤Ê¥Õ¥¡¥¤¥ë°ÌÃÖ¤ÎÀ©¸æ¤ÏÄɲäΠ<a href="programs/configure.html#installationdirectories">ÀßÄꥪ¥×¥·¥ç¥ó
- </a> ¤Ç¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î»þÅÀ¤Ç¡¢<a href="mod/">¥â¥¸¥å¡¼¥ë</a> ¤òÍ­¸ú¤Ë¤·¤¿¤ê
- ̵¸ú¤Ë¤·¤¿¤ê¤¹¤ë¤³¤È¤Ç Apache ËÜÂΤ˴ޤޤì¤ë <a href="programs/configure.html#optionalfeatures">µ¡Ç½</a>
- ¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£Apache ËÜÂΤˤϥǥե©¥ë¥È¤Ç¡¢¥â¥¸¥å¡¼¥ë¤Î <a href="mod/module-dict.html#Status">Base</a> ¥»¥Ã¥È¤¬
- ´Þ¤Þ¤ì¤Þ¤¹¡£¤½¤Î¾¤Î¥â¥¸¥å¡¼¥ë¤Ï
- <code>--enable-<var>module</var></code> ¥ª¥×¥·¥ç¥ó¤Ç
- Í­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤³¤Ç <var>module</var> ¤Ï¥â¥¸¥å¡¼¥ë¤Î̾Á°¤Ç¡¢
- ¤Ä¤Þ¤ê¤½¤ì¤Ï¥â¥¸¥å¡¼¥ë¤Î̾Á°¤«¤é <code>mod_</code> ʸ»úÎó¤ò¼è¤ê½ü¤¤¤¿¸å¤Ë
- ¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò¥À¥Ã¥·¥å¤ÇÃÖ´¹¤·¤¿Ê¸»úÎó¤Ç¤¹¡£
- ¤³¤ì¤È¤ÏÊ̤ÎÊýË¡¤Ç <code>--enable-<var>module</var>=shared</code>
- ¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¡¢¥â¥¸¥å¡¼¥ë¤ò<a href="dso.html">
- ¥·¥§¥¢¡¼¥É¥ª¥Ö¥¸¥§¥¯¥È (DSO)</a> -- ¼Â¹Ô»þ¤Ë¥í¡¼¥É¤·¤¿¤ê
- ¥¢¥ó¥í¡¼¥É¤·¤¿¤ê¤Ç¤­¤ë·Á¼° -- ¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ƱÍͤˡ¢<code>--disable-<var>module</var></code> ¥ª¥×¥·¥ç¥ó¤Ç
- Base ¥â¥¸¥å¡¼¥ë¤ò̵¸ú²½¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤é¤Î¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¤¤ë¤È¤­¤Ë¡¢¤â¤·»ØÄꤷ¤¿¥â¥¸¥å¡¼¥ë¤¬Â¸ºß¤·¤Ê¤¯¤Æ¤â
- <code>configure</code> ¤Ï·Ù¹ð¤ò¾å¤²¤ë¤³¤È¤Ê¤¯¡¢Ã±½ã¤Ë¥ª¥×¥·¥ç¥ó¤ò
- ̵»ë¤¹¤ë¤³¤È¤Ëµ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¾åµ­¤Ë²Ã¤¨¤Æ¡¢<code>configure</code> ¥¹¥¯¥ê¥×¥È¤Ë¡¢
- ¥³¥ó¥Ñ¥¤¥é¡¢¥é¥¤¥Ö¥é¥ê¡¢¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤òÄɲþðÊó¤È¤·¤ÆÅϤ¹
- ɬÍפ¬¤¢¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢´Ä¶­ÊÑ¿ô¤¢¤ë¤¤¤Ï
- ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ç <code>configure</code> ¤ËÅϤ·¤Þ¤¹¡£
- ¾ÜºÙ¤Ë´Ø¤·¤Æ¤Ï <a href="programs/configure.html">configure ¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸</a>
- ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£</p>
-
- <p>¤Á¤ç¤Ã¤È¤É¤ó¤Ê¤³¤È¤¬¤Ç¤­¤ë¤«¤ò¸«¤»¤Þ¤·¤ç¤¦¡£
- ¤³¤³¤Çŵ·¿Åª¤ÊÎã¤È¤·¤Æ¡¢<code>/sw/pkg/apache</code>
- ¤È¤¤¤¦¥¤¥ó¥¹¥È¡¼¥ë¥Ä¥ê¡¼¤Ç¥³¥ó¥Ñ¥¤¥é¤È¥Õ¥é¥°¤ò»ØÄꤷ¤Æ¡¢
- ¤µ¤é¤ËÆó¤Ä¤ÎÄɲå⥸¥å¡¼¥ë <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> ¤È
- <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> ¤ò¸å¤Ç DSO
- ¥á¥«¥Ë¥º¥à¤Ç¥í¡¼¥É¤¹¤ë¤è¤¦¤Ë¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤ß¤Þ¤¹:</p>
-
-<div class="example"><p><code>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</code></p></div>
-
- <p><code>configure</code> ¤ò¼Â¹Ô¤·¤¿¤é¡¢¥·¥¹¥Æ¥à¤Îµ¡Ç½¤ò
- ¥Æ¥¹¥È¤·¤¿¤ê¡¢¸å¤Ç¥µ¡¼¥Ð¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤¿¤á¤ËɬÍ×¤Ê Makefile
- ¤òÀ¸À®¤·¤¿¤ê¤¹¤ë¤Î¤Ë¿ôʬ´Ö¤«¤«¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¸Ä¡¹¤Î <code>configure</code> ¥ª¥×¥·¥ç¥ó¤Î¾ÜºÙ¤Ë´Ø¤·¤Æ¤Ï
- <a href="programs/configure.html">configure ¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸</a>
- ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile" id="compile">¥Ó¥ë¥É</a></h2>
-
- <p>¤³¤ì¤Ç Apache ¤ÎÍÍ¡¹¤Ê¥Ñ¡¼¥Ä¤ò¥Ó¥ë¥É¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¼¡¤Î¥³¥Þ¥ó¥É¤òñ½ã¤Ë¼Â¹Ô¤¹¤ë¤À¤±¤Ç¤¹:</p>
-
-<div class="example"><p><code>$ make</code></p></div>
-
- <p>´ðËÜŪ¤ÊÀßÄê¤ò¤¹¤ë¤Î¤Ë¡¢Pentium III/Linux 2.2
- ¤Î¥·¥¹¥Æ¥à¤Ç¤ª¤ª¤è¤½ 3 ʬÄøÅÙ¤«¤«¤ê¤Þ¤¹¤¬¡¢
- ¤¢¤é¤«¤¸¤á¤´Î»¾µ²¼¤µ¤¤¡£
- ¤Þ¤¿¡¢»þ´Ö¤Ï¥Ï¡¼¥É¥¦¥§¥¢¤äÍ­¸ú¤Ë¤·¤¿¥â¥¸¥å¡¼¥ë¤Î¿ô¤Ë
- Â礭¤¯°Í¸¤¹¤ë¤Ç¤·¤ç¤¦¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">¥¤¥ó¥¹¥È¡¼¥ë</a></h2>
-
- <p>¤µ¤Æ¡¢ÀßÄꤷ¤¿¥¤¥ó¥¹¥È¡¼¥ë <em>PREFIX</em>
- (Á°½Ò¤Î <code>--prefix</code> ¥ª¥×¥·¥ç¥ó¤ò»²¾È)
- °Ê²¼¤Ë¥Ñ¥Ã¥±¡¼¥¸¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëÃʳ¬¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¼¡¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤:</p>
-
-<div class="example"><p><code>$ make install</code></p></div>
-
- <p>¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ë¾ì¹ç¤Ï¡¢¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤ÏÀßÄê¥Õ¥¡¥¤¥ë¤ä
- ¥É¥­¥å¥á¥ó¥È¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­¤Ï¹Ô¤¤¤Þ¤»¤ó¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customize" id="customize">¥«¥¹¥¿¥Þ¥¤¥º</a></h2>
-
- <p>¼¡¤Ë <code><em>PREFIX</em>/conf/</code> °Ê²¼¤Ë¤¢¤ë <a href="configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a>¤òÊÔ½¸¤·¤Æ¡¢
- Apache HTTP ¥µ¡¼¥Ð¤ò¥«¥¹¥¿¥Þ¥¤¥º¤·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>
-
- <p><a href="./">docs/manual/</a> ¤Î Apache ¥Þ¥Ë¥å¥¢¥ë¤ò¤¶¤Ã¤È¸«¤Æ¤¯¤À¤µ¤¤¡£
- ¤Þ¤¿¤Ï¡¢<a href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a>
- ¤Ë¤¢¤ë¥Þ¥Ë¥å¥¢¥ëºÇ¿·ÈÇ¡¢<a href="mod/directives.html">ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a>¤ËÅö¤¿¤Ã¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">¥Æ¥¹¥È</a></h2>
-
- <p>¼¡¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Æ Apache HTTP ¥µ¡¼¥Ð¤ò<a href="invoking.html">³«»Ï</a>¤Ç¤­¤Þ¤¹:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl start</code></p></div>
-
- <p>URL <code>http://localhost/</code> ¤òÄ̤·¤ÆºÇ½é¤Î¥É¥­¥å¥á¥ó¥È¤ËÂФ¹¤ë
- ¥ê¥¯¥¨¥¹¥È¤òȯ¹Ô¤¹¤ë»ö¤¬¤Ç¤­¤ë¤Ï¤º¤Ç¤¹¡£¤³¤ì¤Ç¸«¤¨¤ë
- ¥¦¥§¥Ö¥Ú¡¼¥¸¤Ï <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- °Ê²¼¤ËÃÖ¤«¤ì¤¿¤â¤Î¤Ç¡¢Ä̾ï¤Ï
- <code><em>PREFIX</em>/htdocs/</code> ¤Ç¤·¤ç¤¦¡£
- ¥µ¡¼¥Ð¤òºÆ¤Ó<a href="stopping.html">Ää»ß</a>¤¹¤ë¤Ë¤Ï¡¢
- ¼¡¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤¹:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrading" id="upgrading">¥¢¥Ã¥×¥°¥ì¡¼¥É</a></h2>
-
- <p>¥¢¥Ã¥×¥°¥ì¡¼¥É¤Ç¤Þ¤º¹Ô¤Ê¤¦¤Ù¤­¤³¤È¤Ï¡¢¥ê¥ê¡¼¥¹¥¢¥Ê¥¦¥ó¥¹¤È
- ¥½¡¼¥¹¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤ËÆþ¤Ã¤Æ¤¤¤ë <code>CHANGES</code> ¤òÆɤó¤Ç¡¢
- ¼«¿È¤Î¥µ¥¤¥È¤ËÂФ·¤Æ±Æ¶Á¤òµÚ¤Ü¤¹Êѹ¹ÅÀ¤òõ¤¹¤³¤È¤Ç¤¹¡£
- ¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹´Ö¤ÎÊѹ¹¤ò¤¹¤ë¾ì¹ç (Î㤨¤Ð 1.3 ¤«¤é 2.0 ¤Ø¡¢2.0 ¤«¤é 2.2 ¤Ø)
- ¤Ï¡¢¥³¥ó¥Ñ¥¤¥ë»þ¤ä¼Â¹Ô»þ¤ÎÀßÄê¤ËÂ礭¤Êº¹°Û¤¬¤¢¤ë¤Ç¤·¤ç¤¦¤«¤é¡¢
- ¼êÆ°¤ÎÄ´À°¤¬É¬Íפˤʤë¤Ç¤·¤ç¤¦¡£¥â¥¸¥å¡¼¥ë¤âÁ´¤Æ¡¢API
- ¤ÎÊѹ¹¤Ë¹ç¤ï¤»¤ë¤¿¤á¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¬É¬Íפˤʤë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥ó¤«¤é¼¡¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ë¾ì¹ç
- (Î㤨¤Ð 2.0.55 ¤«¤é 2.0.57 ¤Ø) ¤Ï¡¢¤â¤Ã¤È´Êñ¤Ç¤¹¡£
- <code>make install</code> ¤ò¼Â¹Ô¤·¤Æ¤âº£¤¢¤ë¥É¥­¥å¥á¥ó¥È¡¢
- ¥í¥°¥Õ¥¡¥¤¥ë¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤Ï¾å½ñ¤­¤µ¤ì¤Þ¤»¤ó¡£
- ¤µ¤é¤Ë¡¢¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥ó´Ö¤Ç¤Ï <code>configure</code> ¥ª¥×¥·¥ç¥ó¡¢
- ¼Â¹Ô»þ¤ÎÀßÄê¡¢¥â¥¸¥å¡¼¥ë API ¤ËÉÔÀ°¹ç¤¬µ¯¤³¤é¤Ê¤¤¤è¤¦¤Ë¡¢
- ³«È¯¼Ô¤ÏºÇÂç¸Â¤ÎÅØÎϤò¤·¤Æ¤¤¤Þ¤¹¡£
- ÂçÄñ¤Î¾ì¹ç¡¢Æ±°ì¤Î <code>configure</code> ¥³¥Þ¥ó¥É¥é¥¤¥ó¡¢
- Ʊ°ì¤ÎÀßÄê¥Õ¥¡¥¤¥ë¡¢¥â¥¸¥å¡¼¥ëÁ´¤Æ¤¬Àµ¾ï¤ËÆ°ºî¤¹¤ë¤Ï¤º¤Ç¤¹¡£
- (2.0.41 °Ê¹ß¤Ç¤Ï¤½¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤½¤ì°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤Ï
- ÉÔÀ°¹ç¤¬Â¸ºß¤·¤Þ¤¹¡£)</p>
-
- <p>Á°²ó¤Î¥¤¥ó¥¹¥È¡¼¥ë»þ¤Î¥½¡¼¥¹¥Ä¥ê¡¼¤¬»Ä¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¥¢¥Ã¥×¥°¥ì¡¼¥É¤Ï¤µ¤é¤Ë´Êñ¤Ç¤¹¡£¸Å¤¤¥½¡¼¥¹¥Ä¥ê¡¼¤Î¥ë¡¼¥È¤Ë¸ºß¤¹¤ë
- <code>config.nice</code> ¥Õ¥¡¥¤¥ë¤Ë¤Ï¡¢Á°²ó¥½¡¼¥¹¥Ä¥ê¡¼¤òÀßÄꤷ¤¿»þ¤Î
- <code>configure</code> ¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¼¡¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ë¾ì¹ç¤Ï¡¢<code>config.nice</code>
- ¥Õ¥¡¥¤¥ë¤ò¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¥½¡¼¥¹¥Ä¥ê¡¼¤Ë¥³¥Ô¡¼¤·¡¢
- ¤½¤ì¤òÊÔ½¸¤·É¬ÍפÊÊѹ¹¤ò¹Ô¤Ê¤Ã¤Æ¡¢¼¡¤Î¤è¤¦¤Ë¼Â¹Ô¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </code></p></div>
-
- <div class="warning">¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢
- ¼ÂºÝ¤Ë±¿ÍѤò»Ï¤á¤ëÁ°¤Ë¡¢É¬¤º¼«Ê¬ÍѤδĶ­¤Ç¥Æ¥¹¥È¤¹¤Ù¤­¤Ç¤¹¡£
- ºÇ½ªÅª¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ëÁ°¤Ë¡¢Èó¸ß´¹À­¤¬¤Ê¤¤¤«¤ò¥Æ¥¹¥È¤¹¤ë¤¿¤á¤Ë¡¢
- Î㤨¤Ð¡¢°Û¤Ê¤ë <code>--prefix</code> ¤È°Û¤Ê¤ë¥Ý¡¼¥È (<code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤Þ¤¹)
- ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Ë±Æ¶Á¤òÍ¿¤¨¤º¤Ë¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò
- ¥¤¥ó¥¹¥È¡¼¥ë¤·¡¢¼Â¹Ô¤Ç¤­¤Þ¤¹¡£</div>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/install.html.ko.euc-kr b/docs/manual/install.html.ko.euc-kr
deleted file mode 100644
index e7d5957c09..0000000000
--- a/docs/manual/install.html.ko.euc-kr
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÄÄÆÄÀÏ°ú ¼³Ä¡ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>ÄÄÆÄÀÏ°ú ¼³Ä¡</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>ÀÌ ¹®¼­´Â À¯´Ð½º¿Í À¯´Ð½º·ù ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ°í
- ¼³Ä¡ÇÏ´Â °Í¸¸À» ´Ù·é´Ù. À©µµ¿ìÁî¿¡¼­ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â ¹æ¹ýÀº
- <a href="platform/windows.html">¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ìÁî¿¡¼­
- ¾ÆÆÄÄ¡ »ç¿ë</a>À» Âü°íÇ϶ó. ´Ù¸¥ Ç÷¡Æû¿¡ ´ëÇؼ­´Â <a href="platform/">Ç÷¡Æû</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- <p>¾ÆÆÄÄ¡ 2.0ÀÇ ±¸¼º°ú ¼³Ä¡ ȯ°æÀº 1.3°ú ¸Å¿ì ´Ù¸£´Ù.
- ¾ÆÆÄÄ¡ 1.3Àº ½¬¿î ¼³Ä¡¸¦ À§ÇØ ÀÚü ½ºÅ©¸³Æ®¸¦ »ç¿ëÇß´Ù.
- ¾ÆÆÄÄ¡ 2.0Àº ÀÌÁ¦ ´Ù¸¥ ¿©·¯ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿Í ºñ½ÁÇÑ È¯°æÀ»
- ¸¸µé±âÀ§ÇØ <code>libtool</code>°ú <code>autoconf</code>¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>¸¸¾à ÀÛÀº ¹öÀüÀ» ÇÑ´Ü°è ¾÷±×·¹À̵åÇÑ´Ù¸é (¿¹¸¦ µé¾î,
- 2.0.50¿¡¼­ 2.0.51), <a href="#upgrading">¾÷±×·¹À̵å</a>
- ÀåÀ¸·Î ¹Ù·Î °¡±æ ¹Ù¶õ´Ù.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">¼º¹Ì ±ÞÇÑ »ç¶÷À» À§ÇÑ °³¿ä</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#requirements">¿ä±¸»çÇ×</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#download">´Ù¿î·Îµå</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#extract">¾ÐÃà Ç®±â</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#configure">¼Ò½º Æ®¸® ±¸¼ºÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#compile">ÄÄÆÄÀÏ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">¼³Ä¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#customize">¼³Á¤</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#test">°Ë»ç</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">¾÷±×·¹À̵å</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="programs/configure.html">¼Ò½º Æ®¸® ±¸¼º</a></li><li><a href="invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></li><li><a href="stopping.html">¾ÆÆÄÄ¡ Áß´Ü°ú Àç½ÃÀÛ</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">¼º¹Ì ±ÞÇÑ »ç¶÷À» À§ÇÑ °³¿ä</a></h2>
-
- <table>
-
- <tr>
- <td><a href="#download">´Ù¿î·Îµå</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">¾ÐÃà Ç®±â</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">±¸¼º</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">ÄÄÆÄÀÏ</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">¼³Ä¡</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">¼³Á¤</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">°Ë»ç</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em>Àº ÇöÀç ÀÛÀº ¹öÀü ¼ýÀÚ·Î, <em>PREFIX</em>´Â
- ¼­¹ö°¡ ¼³Ä¡µÉ ÆÄÀϽýºÅÛ °æ·Î·Î ´ëüÇØ¾ß ÇÑ´Ù. <em>PREFIX</em>¸¦
- ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ±âº»°ªÀ¸·Î <code>/usr/local/apache2</code>¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>¾Æ·¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇϱâÀ§ÇÑ ¿ä±¸»çÇ׺ÎÅÍ
- ÄÄÆÄÀÏ°ú ¼³Ä¡ °úÁ¤À» °¢°¢ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">¿ä±¸»çÇ×</a></h2>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϱâÀ§ÇØ ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÇÊ¿äÇÏ´Ù:</p>
-
- <dl>
- <dt>µð½ºÅ© °ø°£</dt>
- <dd>µð½ºÅ© ¿©À¯°ø°£ÀÌ ÃÖ¼Ò 50 MB ÀÌ»óÀÎÁö È®ÀÎÇ϶ó.
- ¼³Ä¡ÈÄ ¾ÆÆÄÄ¡´Â ¾à 10 MBÀÇ µð½ºÅ© °ø°£À» Â÷ÁöÇÑ´Ù.
- ½ÇÁ¦ ÇÊ¿äÇÑ µð½ºÅ© °ø°£Àº ¼±ÅÃÇÑ ±¸¼º ¿É¼Ç°ú Ãß°¡ ¸ðµâ¿¡
- µû¶ó »ó´çÈ÷ Â÷ÀÌ°¡ ³­´Ù.</dd>
-
- <dt>ANSI-C ÄÄÆÄÀÏ·¯¿Í ÄÄÆÄÀÏ ½Ã½ºÅÛ</dt>
- <dd>ANSI-C ÄÄÆÄÀÏ·¯°¡ ¼³Ä¡µÇÀÖ´ÂÁö È®ÀÎÇ϶ó. <a href="http://www.gnu.org/">Free Software Foundation (FSF)</a>ÀÇ
- <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- compiler (GCC)</a>¸¦ ÃßõÇÑ´Ù. (¹öÀü 2.7.2¸é µÈ´Ù.) GCC°¡
- ¾ø´Ù¸é ÃÖ¼ÒÇÑ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯°¡ ANSI ȣȯÀÎÁö È®ÀÎÇ϶ó.
- Ãß°¡·Î <code>PATH</code> ȯ°æº¯¼ö´Â <code>make</code>¿Í
- °°Àº ±âº»ÀûÀÎ ÄÄÆÄÀÏ µµ±¸¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt>Á¤È®ÇÑ ½Ã°£</dt>
- <dd>HTTP ÇÁ·ÎÅäÄÝ¿¡´Â ÇÏ·çÁß ½Ã°£À» Ç¥ÇöÇÏ´Â ºÎºÐÀÌ ÀÖ´Ù. ±×·¡¼­
- ÀÌÁ¦ ½Ã½ºÅÛÀÇ ½Ã°£ µ¿±âÈ­ ±â´ÉÀ» »ìÆ캼 ½Ã°£ÀÌ´Ù. º¸Åë
- À̸¦ À§ÇØ Network Time Protocol (NTP)¿¡ ±â¹ÝÇÑ
- <code>ntpdate</code>³ª <code>xntpd</code>¸¦ »ç¿ëÇÑ´Ù.
- NTP ¼ÒÇÁÆ®¿þ¾î¿Í °ø°³ ½Ã°£ ¼­¹ö¿¡ ´ëÇÑ Á¤º¸´Â ´º½º±×·ì
- <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>¿Í
- <a href="http://www.ntp.org">NTP ȨÆäÀÌÁö</a>¸¦
- Âü°íÇ϶ó.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [¼±ÅûçÇ×]</dt>
- <dd>(Perl·Î ¾²¿©Áø) <a href="programs/apxs.html">apxs</a>³ª
- <a href="programs/dbmmanage.html">dbmmanage</a>¿Í °°Àº
- Áö¿ø ½ºÅ©¸³Æ®¸¦ À§ÇØ Perl 5 ÀÎÅÍÇÁ¸®ÅÍ°¡ ÇÊ¿äÇÏ´Ù. (¹öÀü
- 5.003 ÀÌ»óÀÌ¸é µÈ´Ù.) `<code>configure</code>' ½ºÅ©¸³Æ®°¡
- ÀÌ ÀÎÅÍÇÁ¸®Å͸¦ ãÁö ¸øÇصµ ¹®Á¦¾øÀÌ ¾ÆÆÄÄ¡ 2.0À»
- ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ´Ù¸¸ Áö¿ø ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏÁö
- ¸øÇÒ »ÓÀÌ´Ù. ¿©·¯ Perl ÀÎÅÍÇÁ¸®ÅÍ°¡ ¼³Ä¡µÇÀÖ´Ù¸é (¾Æ¸¶µµ
- »ì¶§ Æ÷ÇÔµÈ Perl 4¿Í Á÷Á¢ ÄÄÆÄÀÏÇÑ Perl 5)
- <code>./configure</code>°¡ ¿Ã¹Ù¸¥ °ÍÀ» ã±âÀ§ÇØ
- <code>--with-perl</code> ¿É¼ÇÀ» (¾Æ·¡ Âü°í) »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="download" id="download">´Ù¿î·Îµå</a></h2>
-
- <p>¾ÆÆÄÄ¡´Â ¿©·¯ ¹Ì·¯ ¸ñ·ÏÀÌ ÀÖ´Â <a href="http://httpd.apache.org/download.cgi">¾ÆÆÄÄ¡ À¥¼­¹ö
- ´Ù¿î·Îµå »çÀÌÆ®</a>¿¡¼­ ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º·ù ½Ã½ºÅÛÀ»
- »ç¿ëÇÑ´Ù¸é ¼Ò½ºÄڵ带 ´Ù¿î¹Þ¾Æ¼­ ÄÄÆÄÀÏÇÏ´Â ÆíÀÌ ³´´Ù. ½±°Ô
- (¾Æ·¡¿¡¼­ ¼³¸í) ÄÄÆÄÀÏÇÒ ¼ö ÀÖ°í, ÀÚ½ÅÀÇ ¿ëµµ¿¡ ¾Ë¸Â°Ô ¼­¹ö¸¦
- ¸ÂÃâ ¼ö ÀÖ´Ù. ¶Ç, ÃֽŠ¹öÀü ¹ÙÀ̳ʸ® ¹èÆ÷º»ÀÌ ¾ø´Â °æ¿ìµµ
- ¸¹´Ù. ¹ÙÀ̳ʸ®¸¦ ´Ù¿î¹Þ´Â´Ù¸é ¹èÆ÷º»¿¡ ÀÖ´Â
- <code>INSTALL.bindist</code> ÆÄÀÏÀÇ Áö½Ã¸¦ µû¸£¶ó.</p>
-
- <p>´Ù¿î·ÎµåÈÄ ´Ù¿î¹ÞÀº ÆÄÀÏÀÌ ¿ÏÀüÇÏ°í
- º¯°æµÇÁö¾ÊÀº ¾ÆÆÄÄ¡ À¥¼­¹öÀÓÀ» È®ÀÎÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.
- PGP ¼­¸íÀ» °¡Áö°í ´Ù¿î·ÎµåÇÑ Å¸º¼(tarball)À» °Ë»çÇÏ¿© È®ÀÎÇÑ´Ù.
- ÀÚ¼¼ÇÑ ¹æ¹ýÀº <a href="http://httpd.apache.org/download.cgi#verify">´Ù¿î·Îµå
- ÆäÀÌÁö</a>¿¡ ÀÖ°í, <a href="http://httpd.apache.org/dev/verification.html">PGP
- »ç¿ë¹ý</a>À» ¼³¸íÇÏ´Â »ó¼¼ÇÑ ¿¹µµ ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="extract" id="extract">¾ÐÃà Ç®±â</a></h2>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö Ÿº¼¿¡¼­ ¼Ò½º¸¦ Ǫ´Â ÀÛ¾÷Àº ´Ü¼øÈ÷ ¾ÐÃà°ú
- tar¸¦ Ǫ´Â °ÍÀÌ´Ù:</p>
-
-<div class="example"><p><code>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</code></p></div>
-
- <p>±×·¯¸é ÇöÀç µð·ºÅ丮 ¾Æ·¡¿¡ ¹èÆ÷º»ÀÇ ¼Ò½ºÄڵ带 ´ãÀº
- »õ·Î¿î µð·ºÅ丮°¡ »ý±ä´Ù. ¼­¹ö¸¦ ÄÄÆÄÀÏÇϱâ Àü¿¡ ±×
- µð·ºÅ丮·Î <code>cd</code>ÇØ¾ß ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configure" id="configure">¼Ò½º Æ®¸® ±¸¼ºÇϱâ</a></h2>
-
- <p>´ÙÀ½ °úÁ¤Àº ƯÁ¤ Ç÷¡Æû°ú °³ÀÎÀûÀÎ ÇÊ¿ä¿¡ µû¶ó ¾ÆÆÄÄ¡
- ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÏ´Â ÀÏÀÌ´Ù. À̸¦ À§ÇØ ¹èÆ÷º»ÀÇ ÃÖ»óÀ§ µð·ºÅ丮¿¡
- ÀÖ´Â <code><a href="programs/configure.html">configure</a></code>
- ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ´Ù. (¾ÆÆÄÄ¡
- ¼Ò½º Æ®¸®ÀÇ CVS ¹öÀüÀ» ´Ù¿î·ÎµåÇÑ °³¹ßÀÚ´Â À̹Ì
- <code>autoconf</code>¿Í <code>libtool</code>°¡ ¼³Ä¡µÇÀÖ°í,
- ´ÙÀ½ °úÁ¤À¸·Î ³Ñ¾î°¡±â Àü¿¡ <code>buildconf</code>¸¦ ½ÇÇàÇؾß
- ÇÑ´Ù. ÀÌ´Â Á¤½Ä ¹öÀü¿¡¼­´Â ÇÊ¿ä¾ø´Ù.)</p>
-
- <p>¸ðµÎ ±âº» ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÏ·Á¸é °£´ÜÈ÷
- <code>./configure</code>¸¦ ÀÔ·ÂÇϸéµÈ´Ù. ±âº» ¿É¼ÇÀ» ¼öÁ¤ÇÏ·Á¸é
- <code>./configure</code>¿¡ ¿©·¯ º¯¼ö¿Í ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.</p>
-
- <p>°¡Àå Áß¿äÇÑ ¿É¼ÇÀº ¾ÆÆÄÄ¡°¡ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇϱâÀ§ÇØ ¾ÆÆÄÄ¡¸¦
- ±¸¼ºÇÏ°í ¼³Ä¡ÇÒ Àå¼ÒÀÎ <code>--prefix</code>´Ù. ´Ù¸¥ <a href="programs/configure.html#installationdirectories">configure
- ¿É¼Çµé</a>À» »ç¿ëÇÏ¿© ÆÄÀÏÀÇ À§Ä¡¸¦ ´õ ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼öµµ
- ÀÖ´Ù.</p>
-
- <p><a href="mod/">¸ðµâ</a>À» Æ÷ÇÔÇϰųª »©¼­ ¾ÆÆÄÄ¡¿¡ Æ÷ÇÔÇÒ
- <a href="programs/configure.html#optionalfeatures">±â´É</a>À»
- ¼±ÅÃÇÑ´Ù. <a href="mod/module-dict.html#Status">Base</a>
- »óÅÂÀÎ ¸ðµâÀº ±âº»ÀûÀ¸·Î ¾ÆÆÄÄ¡¿¡ Æ÷ÇԵȴÙ. ´Ù¸¥ »óÅÂÀÇ
- ¸ðµâÀº <code>--enable-<var>module</var></code> ¿É¼ÇÀ» »ç¿ëÇÏ¿©
- Æ÷ÇÔÇÑ´Ù. ¿©±â¼­ <em>module</em>Àº ¸ðµâ À̸§¿¡¼­
- <code>mod_</code>¸¦ »©°í ¹ØÁÙÀ» »©±â±âÈ£·Î º¯°æÇÑ °á°ú´Ù.
- <code>--enable-<var>module</var>=shared</code> ¿É¼ÇÀ» »ç¿ëÇϸé
- ¸ðµâÀ» ½ÇÇàÁß¿¡ Æ÷ÇÔÇϰųª »¬ ¼ö ÀÖ´Â <a href="dso.html">°øÀ¯°´Ã¼(shared object, DSO)</a>·Î ÄÄÆÄÀÏÇÑ´Ù.
- ¶Ç, <code>--disable-<var>module</var></code> ¿É¼ÇÀ» »ç¿ëÇÏ¿©
- Base ¸ðµâÀ» »¬ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÑ ¸ðµâÀÌ ¾ø¾îµµ
- <code>configure</code>°¡ °æ°íÇÏÁö¾Ê°í ±×³É ¹«½ÃÇϱ⶧¹®¿¡
- ¸ðµâ À̸§À» Á¤È®È÷ ÀÔ·ÂÇ϶ó.</p>
-
- <p>°¡²û <code>configure</code> ½ºÅ©¸³Æ®¿¡°Ô ÄÄÆÄÀÏ·¯,
- ¶óÀ̺귯¸®, Çì´õÆÄÀÏ µîÀÇ À§Ä¡¸¦ ¾Ë·ÁÁà¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù.
- ÀÌ Á¤º¸´Â ȯ°æº¯¼ö³ª <code>configure</code>ÀÇ ¸í·ÉÇà ¿É¼ÇÀ»
- »ç¿ëÇÏ¿© Àü´ÞÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="programs/configure.html">configure manpage</a>¸¦
- Âü°íÇ϶ó.</p>
-
- <p>¿©·¯ºÐÀÌ ¼±ÅÃÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀ» º¸¿©ÁÖ±âÀ§ÇØ ´ÙÀ½Àº
- ƯÁ¤ ÄÄÆÄÀÏ·¯¿Í Ç÷¡±×¸¦ »ç¿ëÇÏ°í ³ªÁß¿¡ DSO·Î ÀоîµéÀÏ
- µÎ ¸ðµâ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>¿Í
- <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code>À» Ãß°¡ÇÏ¿©
- <code>/sw/pkg/apache</code>¿¡ ¼³Ä¡ÇÒ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ´Â
- ÀüÇüÀûÀÎ ¿¹ÀÌ´Ù:</p>
-
-<div class="example"><p><code>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</code></p></div>
-
- <p><code>configure</code>¸¦ ½ÇÇàÇÏ¸é ¸îºÐ°£ ½Ã½ºÅÛÀÇ ±â´ÉÀ»
- °Ë»çÇÏ¿© ³ªÁß¿¡ ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇÒ MakefileµéÀ»
- ¸¸µç´Ù.</p>
-
- <p><code>configure</code> ¿É¼Çµé¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a href="programs/configure.html">configure manpage</a>¿¡ ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile" id="compile">ÄÄÆÄÀÏ</a></h2>
-
- <p>ÀÌÁ¦ ´ÙÀ½ ¸í·É¾î Çϳª·Î ¾ÆÆÄÄ¡ÀÇ ¿©·¯ ºÎºÐÀ» ÄÄÆÄÀÏÇÒ
- ¼ö ÀÖ´Ù:</p>
-
-<div class="example"><p><code>$ make</code></p></div>
-
- <p>¿©±â¼­ Á» ±â´Ù·Á¶ó. ÆæƼ¾ö III/¸®´ª½º 2.2 ½Ã½ºÅÛ¿¡¼­
- ±âº» ±¸¼ºÀ» ÄÄÆÄÀÏÇϴµ¥ ¾à 3ºÐ Á¤µµ °É¸°´Ù. ÀÌ ½Ã°£Àº
- Çϵå¿þ¾î¿Í Æ÷ÇÔÇÑ ¸ðµâ¼ö¿¡ µû¶ó Å©°Ô º¯ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">¼³Ä¡</a></h2>
-
- <p>ÀÌÁ¦ ´ÙÀ½ ¸í·É¾î·Î ÆÐÅ°Áö¸¦ (À§ÀÇ <code>--prefix</code>
- ¿É¼Ç Âü°í) ÁöÁ¤ÇÑ ¼³Ä¡ À§Ä¡ <em>PREFIX</em>¿¡ ¼³Ä¡ÇÑ´Ù:</p>
-
-<div class="example"><p><code>$ make install</code></p></div>
-
- <p>¾÷±×·¹À̵åÇÑ´Ù¸é ÀÌ ¼³Ä¡ °úÁ¤ÀÌ ±âÁ¸ ¼³Á¤ÆÄÀÏÀ̳ª ¹®¼­¸¦
- µ¤¾î¾²Áö ¾Ê´Â´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customize" id="customize">¼³Á¤</a></h2>
-
- <p>´ÙÀ½À¸·Î <code><em>PREFIX</em>/conf/</code>¿¡ ÀÖ´Â
- <a href="configuring.html">¼³Á¤ÆÄÀÏ</a>À» ÆíÁýÇÏ¿© ¾ÆÆÄÄ¡
- À¥¼­¹ö¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-<div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>
-
- <p>»ç¿ë°¡´ÉÇÑ <a href="mod/directives.html">¼³Á¤ Áö½Ã¾î</a>¿¡
- ´ëÇÑ ¿ÏÀüÇÑ ¼³¸í°ú ÀÌ ¹®¼­ÀÇ °¡Àå ÃÖ±Ù ÆÇÀº <a href="./">docs/manual/</a>À̳ª <a href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a>¿¡ ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦
- Âü°íÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">°Ë»ç</a></h2>
-
- <p>ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ <a href="invoking.html">½ÃÀÛ</a>ÇÒ ¼ö ÀÖ´Ù:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl start</code></p></div>
-
- <p>±×¸®°í URL <code>http://localhost/</code>·Î ù ¹®¼­¸¦
- ¿äûÇÑ´Ù. º¸°ÔµÉ À¥ÆäÀÌÁö´Â ¾Æ¸¶µµ
- <code><em>PREFIX</em>/htdocs/</code>ÀÏ <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> ¾Æ·¡¿¡ ÀÖ´Ù. ±×¸®°í
- ´ÙÀ½ ¸í·É¾î·Î ´Ù½Ã ¼­¹ö¸¦ <a href="stopping.html">Áß´Ü</a>ÇÑ´Ù:</p>
-
-<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="upgrading" id="upgrading">¾÷±×·¹À̵å</a></h2>
-
- <p>¾÷±×·¹À̵åÇÑ´Ù¸é ¸ÕÀú »çÀÌÆ®¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â º¯È­°¡
- ÀÖ´ÂÁö ¾Ë¾Æº¸±âÀ§ÇØ ¹ßÇ¥¹®°ú ¼Ò½º ¹èÆ÷º»ÀÇ <code>CHANGES</code>
- ÆÄÀÏÀ» Àд´Ù. (¿¹¸¦ µé¾î, 1.3¿¡¼­ 2.0À̳ª 2.0¿¡¼­ 2.2¿Í
- °°Àº) Å« ¹öÀüÀÌ º¯ÇÑ °æ¿ì ÄÄÆÄÀÏ ¿É¼Ç°ú ¼³Á¤À» Á÷Á¢ ¼öÁ¤ÇؾßÇÒ
- Á¤µµÀÇ Å« º¯È­°¡ ÀÖÀ» °ÍÀÌ´Ù. ¸ðµç ¸ðµâµµ ¸ðµâ APIÀÇ º¯È­¿¡
- ¾Ë¸Â°Ô ¾÷±×·¹À̵åÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ÀÛÀº ¹öÀüÀ» ÇÑ´Ü°è ¾÷±×·¹À̵åÇÏ´Â °ÍÀº (¿¹¸¦ µé¾î,
- 2.0.55¿¡¼­ 2.0.57) ½±´Ù. <code>make install</code> ÀÛ¾÷Àº
- ±âÁ¸ÀÇ ¹®¼­, ·Î±×ÆÄÀÏ, ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇÏÁö ¾Ê´Â´Ù. ¶Ç,
- °³¹ßÀÚ´Â ÀÛÀº ¹öÀü°£¿¡ <code>configure</code> ¿É¼Ç, ¼³Á¤,
- ¸ðµâ APIÀÇ È£È¯¼º¾ø´Â º¯È­¸¦ ÃÖ´ëÇÑ ¸·´Â´Ù. ´ëºÎºÐÀÇ °æ¿ì
- µ¿ÀÏÇÑ <code>configure</code> ¸í·ÉÇà, µ¿ÀÏÇÑ ¼³Á¤ÆÄÀÏÀ»
- »ç¿ëÇÒ ¼ö ÀÖ°í, ¸ðµâµéµµ ¸ðµÎ °è¼Ó µ¿ÀÛÇÒ °ÍÀÌ´Ù. (ÀÌ ¸»Àº
- 2.0.41ÀÌÈÄ ¹öÀü¿¡¸¸ ÇØ´çÇÑ´Ù. ÀÌÀü ¹öÀüµé¿¡´Â ȣȯ¼º¾ø´Â
- º¯È­°¡ ÀÖ´Ù.)</p>
-
- <p>ÀÌÀü¿¡ ¼³Ä¡Çß´ø ¼Ò½º¸¦ °¡Áö°í ÀÖ´Ù¸é, ¾÷±×·¹À̵尡 ´õ
- ½¬¿öÁø´Ù. ÀÌÀü ¼Ò½º ÃÖ»óÀ§¿¡ ÀÖ´Â <code>config.nice</code>
- ÆÄÀÏ¿¡´Â ¼Ò½º¸¦ ±¸¼ºÇÒ ¶§ »ç¿ëÇß´ø <code>configure</code>
- ¸í·ÉÇà ¿É¼ÇÀÌ ±×´ë·Î ÀÖ´Ù. ±×·¡¼­ ´ÙÀ½ ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇÑ´Ù¸é
- »õ·Î¿î ¹öÀü ¼Ò½º·Î <code>config.nice</code> ÆÄÀÏÀ» º¹»çÇÏ°í,
- ¿øÇÑ´Ù¸é Á¶±Ý ¼öÁ¤À» ÇÑ ÈÄ, ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </code></p></div>
-
- <div class="warning">»õ·Î¿î ¹öÀüÀ» »ç¿ëÇϱâ Àü¿¡ Ç×»ó °Ë»çÇغÁ¾ß
- ÇÑ´Ù. ¿¹¸¦ µé¾î, ¾÷±×·¹À̵带 ¸¶Ä¡±â Àü¿¡ ȣȯ¼º ¹®Á¦°¡
- ÀÖ´ÂÁö ¾Ë¾Æº¸±âÀ§ÇØ ´Ù¸¥ <code>--prefix</code>¿Í (<code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î·Î) ´Ù¸¥ Æ÷Æ®¸¦
- »ç¿ëÇÏ¿© »õ·Î¿î ¹öÀüÀ» ¼³Ä¡ÇÑÈÄ ÀÌÀü ¹öÀü°ú °°ÀÌ ½ÇÇàÇغ¼
- ¼ö ÀÖ´Ù.</div>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/install.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/install.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/install.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./fr/install.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/install.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/install.xml b/docs/manual/install.xml
deleted file mode 100644
index dc74cd5e7d..0000000000
--- a/docs/manual/install.xml
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.30 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="install.xml.meta">
-
- <title>Compiling and Installing</title>
-
-<summary>
-
- <p>This document covers compilation and installation of Apache
- on Unix and Unix-like systems only. For compiling and
- installation on Windows, see <a
- href="platform/windows.html">Using Apache with Microsoft
- Windows</a>. For other platforms, see the <a
- href="platform/">platform</a> documentation.</p>
-
- <p>Apache 2.0's configuration and installation environment has
- changed completely from Apache 1.3. Apache 1.3 used a custom
- set of scripts to achieve easy installation. Apache 2.0 now
- uses <code>libtool</code> and <code>autoconf</code>
- to create an environment that looks like many other Open Source
- projects.</p>
-
- <p>If you are upgrading from one minor version to the next (for
- example, 2.0.50 to 2.0.51), please skip down to the <a
- href="#upgrading">upgrading</a> section.</p>
-
-</summary>
-
-<seealso><a href="programs/configure.html">Configure the source tree</a></seealso>
-<seealso><a href="invoking.html">Starting Apache</a></seealso>
-<seealso><a href="stopping.html">Stopping and Restarting</a></seealso>
-
-<section id="overview"><title>Overview for the
- impatient</title>
-
- <table>
- <columnspec><column width=".13"/><column width=".80"/></columnspec>
- <tr>
- <td><a href="#download">Download</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Extract</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Configure</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Compile</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Install</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Customize</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Test</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> must be replaced with the current minor version
- number, and <em>PREFIX</em> must be replaced with the
- filesystem path under which the server should be installed. If
- <em>PREFIX</em> is not specified, it defaults to
- <code>/usr/local/apache2</code>.</p>
-
- <p>Each section of the compilation and installation process is
- described in more detail below, beginning with the requirements
- for compiling and installing Apache HTTPD.</p>
-</section>
-
-<section id="requirements"><title>Requirements</title>
-
- <p>The following requirements exist for building Apache:</p>
-
- <dl>
- <dt>Disk Space</dt>
- <dd>Make sure you have at least 50 MB of temporary free disk
- space available. After installation Apache occupies
- approximately 10 MB of disk space. The actual disk space
- requirements will vary considerably based on your chosen
- configuration options and any third-party modules.</dd>
-
- <dt>ANSI-C Compiler and Build System</dt>
- <dd>Make sure you have an ANSI-C compiler installed. The <a
- href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- compiler (GCC)</a> from the <a
- href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
- is recommended (version 2.7.2 is fine). If you don't have GCC
- then at least make sure your vendor's compiler is ANSI
- compliant. In addition, your <code>PATH</code> must contain
- basic build tools such as <code>make</code>.</dd>
-
- <dt>Accurate time keeping</dt>
- <dd>Elements of the HTTP protocol are expressed as the time of
- day. So, it's time to investigate setting some time
- synchronization facility on your system. Usually the
- <code>ntpdate</code> or <code>xntpd</code> programs are used for
- this purpose which are based on the Network Time Protocol (NTP).
- See the Usenet newsgroup <a
- href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
- and the <a href="http://www.ntp.org">NTP
- homepage</a> for more details about NTP software and public
- time servers.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [OPTIONAL]</dt>
- <dd>For some of the support scripts like <a
- href="programs/apxs.html">apxs</a> or <a
- href="programs/dbmmanage.html">dbmmanage</a> (which are
- written in Perl) the Perl 5 interpreter is required (versions
- 5.003 or newer are sufficient). If no such interpreter is found by
- the `<code>configure</code>' script there is no harm. Of course, you
- still can build and install Apache 2.0. Only those support scripts
- cannot be used. If you have multiple Perl interpreters
- installed (perhaps a Perl 4 from the vendor and a Perl 5 from
- your own), then it is recommended to use the <code>--with-perl</code>
- option (see below) to make sure the correct one is selected
- by <code>./configure</code>.</dd>
- </dl>
-</section>
-
-<section id="download"><title>Download</title>
-
- <p>Apache can be downloaded from the <a
- href="http://httpd.apache.org/download.cgi">Apache HTTP Server
- download site</a> which lists several mirrors. Most users of
- Apache on unix-like systems will be better off downloading and
- compiling a source version. The build process (described below) is
- easy, and it allows you to customize your server to suit your needs.
- In addition, binary releases are often not up to date with the latest
- source releases. If you do download a binary, follow the instructions
- in the <code>INSTALL.bindist</code> file inside the distribution.</p>
-
- <p>After downloading, it is important to verify that you have a
- complete and unmodified version of the Apache HTTP Server. This
- can be accomplished by testing the downloaded tarball against the
- PGP signature. Details on how to do this are available on the <a
- href="http://httpd.apache.org/download.cgi#verify">download
- page</a> and an extended example is available describing the <a
- href="http://httpd.apache.org/dev/verification.html">use of
- PGP</a>.</p>
-
-</section>
-
-<section id="extract"><title>Extract</title>
-
- <p>Extracting the source from the Apache HTTPD tarball is a
- simple matter of uncompressing, and then untarring:</p>
-
-<example>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</example>
-
- <p>This will create a new directory under the current directory
- containing the source code for the distribution. You should
- <code>cd</code> into that directory before proceeding with
- compiling the server.</p>
-</section>
-
-<section id="configure"><title>Configuring the source tree</title>
-
- <p>The next step is to configure the Apache source tree for your
- particular platform and personal requirements. This is done using
- the script <code><a
- href="programs/configure.html">configure</a></code> included in
- the root directory of the distribution. (Developers downloading
- the CVS version of the Apache source tree will need to have
- <code>autoconf</code> and <code>libtool</code> installed and will
- need to run <code>buildconf</code> before proceeding with the next
- steps. This is not necessary for official releases.)</p>
-
- <p>To configure the source tree using all the default options,
- simply type <code>./configure</code>. To change the default
- options, <code>configure</code> accepts a variety of variables
- and command line options.</p>
-
- <p>The most important option is the location <code>--prefix</code>
- where Apache is to be installed later, because Apache has to be
- configured for this location to work correctly. More fine-tuned
- control of the location of files is possible with additional <a
- href="programs/configure.html#installationdirectories">configure
- options</a>.</p>
-
- <p>Also at this point, you can specify which <a
- href="programs/configure.html#optionalfeatures">features</a> you
- want included in Apache by enabling and disabling <a
- href="mod/">modules</a>. Apache comes with a <a
- href="mod/module-dict.html#Status">Base</a> set of modules included by
- default. Other modules are enabled using the
- <code>--enable-<var>module</var></code> option, where
- <var>module</var> is the name of the module with the
- <code>mod_</code> string removed and with any underscore converted
- to a dash. You can also choose to compile modules as <a
- href="dso.html">shared objects (DSOs)</a> -- which can be loaded
- or unloaded at runtime -- by using the option
- <code>--enable-<var>module</var>=shared</code>. Similarly, you can
- disable Base modules with the
- <code>--disable-<var>module</var></code> option. Be careful when
- using these options, since <code>configure</code> cannot warn you
- if the module you specify does not exist; it will simply ignore the
- option.</p>
-
- <p>In addition, it is sometimes necessary to provide the
- <code>configure</code> script with extra information about the
- location of your compiler, libraries, or header files. This is
- done by passing either environment variables or command line
- options to <code>configure</code>. For more information, see the
- <a href="programs/configure.html">configure manual page</a>.</p>
-
- <p>For a short impression of what possibilities you have, here
- is a typical example which compiles Apache for the installation
- tree <code>/sw/pkg/apache</code> with a particular compiler and flags
- plus the two additional modules <module>mod_rewrite</module> and
- <module>mod_speling</module> for
- later loading through the DSO mechanism:</p>
-
-<example>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</example>
-
- <p>When <code>configure</code> is run it will take several minutes to
- test for the availability of features on your system and build
- Makefiles which will later be used to compile the server.</p>
-
- <p>Details on all the different <code>configure</code> options are
- available on the <a href="programs/configure.html">configure
- manual page</a>.</p>
-</section>
-
-<section id="compile"><title>Build</title>
-
- <p>Now you can build the various parts which form the Apache
- package by simply running the command:</p>
-
-<example>$ make</example>
-
- <p>Please be patient here, since a base configuration takes
- approximately 3 minutes to compile under a Pentium III/Linux
- 2.2 system, but this will vary widely depending on your
- hardware and the number of modules which you have enabled.</p>
-</section>
-
-<section id="install"><title>Install</title>
-
- <p>Now it's time to install the package under the configured
- installation <em>PREFIX</em> (see <code>--prefix</code> option
- above) by running:</p>
-
-<example>$ make install</example>
-
- <p>If you are upgrading, the installation will not overwrite
- your configuration files or documents.</p>
-</section>
-
-<section id="customize"><title>Customize</title>
-
- <p>Next, you can customize your Apache HTTP server by editing
- the <a href="configuring.html">configuration files</a> under
- <code><em>PREFIX</em>/conf/</code>.</p>
-
-<example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
-
- <p>Have a look at the Apache manual under <a
- href="./">docs/manual/</a> or consult <a
- href="http://httpd.apache.org/docs-2.1/"
- >http://httpd.apache.org/docs-2.1/</a> for the most recent version of
- this manual and a complete reference of available <a
- href="mod/directives.html">configuration directives</a>.</p>
-</section>
-
-<section id="test"><title>Test</title>
-
- <p>Now you can <a href="invoking.html">start</a> your Apache
- HTTP server by immediately running:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl start</example>
-
- <p>and then you should be able to request your first document
- via URL <code>http://localhost/</code>. The web page you see is located
- under the <directive module="core">DocumentRoot</directive>
- which will usually be <code><em>PREFIX</em>/htdocs/</code>.
- Then <a href="stopping.html">stop</a> the server again by
- running:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl stop</example>
-</section>
-<section id="upgrading"><title>Upgrading</title>
-
- <p>The first step in upgrading is to read the release announcement
- and the file <code>CHANGES</code> in the source distribution to
- find any changes that may affect your site. When changing between
- major releases (for example, from 1.3 to 2.0 or from 2.0 to 2.2),
- there will likely be major differences in the compile-time and
- run-time configuration that will require manual adjustments. All
- modules will also need to be upgraded to accomodate changes in the
- module API.</p>
-
- <p>Upgrading from one minor version to the next (for example, from
- 2.0.55 to 2.0.57) is easier. The <code>make install</code>
- process will not overwrite any of your existing documents, log
- files, or configuration files. In addition, the developers make
- every effort to avoid incompatible changes in the
- <code>configure</code> options, run-time configuration, or the
- module API between minor versions. In most cases you should be able to
- use an identical <code>configure</code> command line, an identical
- configuration file, and all of your modules should continue to
- work. (This is only valid for versions after 2.0.41; earlier
- versions have incompatible changes.)</p>
-
- <p>If you kept the source tree from your last installation,
- upgrading is even easier. The file <code>config.nice</code> in
- the root of the old source tree contains the exact
- <code>configure</code> command line that you used to configure the
- source tree. Then to upgrade from one version to the next, you
- need only copy the <code>config.nice</code> file to the source
- tree of the new version, edit it to make any desired changes, and
- then run:</p>
-
- <example>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </example>
-
- <note type="warning">You should always test any new version in your
- environment before putting it into production. For example, you
- can install and run the new version along side the old one by
- using a different <code>--prefix</code> and a
- different port (by adjusting the <directive
- module="mpm_common">Listen</directive> directive) to test for any
- incompatibilities before doing the final upgrade.</note>
-</section>
-</manualpage>
diff --git a/docs/manual/install.xml.de b/docs/manual/install.xml.de
deleted file mode 100644
index 11f20a3ea2..0000000000
--- a/docs/manual/install.xml.de
+++ /dev/null
@@ -1,401 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.30 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="install.xml.meta">
-
- <title>Kompilieren und Installieren</title>
-
-<summary>
- <p>Dieses Dokument umfa&#223;t nur die Kompilierung und Installation des
- Apache auf Unix und Unix-&#228;hnlichen Systemen. F&#252;r die
- Kompilierung und Installation unter Windows lesen Sie bitte <a
- href="platform/windows.html">Den Apache unter Microsoft Windows
- betreiben</a>. F&#252;r andere Plattformen lesen Sie bitte die
- Dokumentation <a href="platform/">Plattformen</a>.</p>
-
- <p>Die Konfigurations- und Installationsumgebung des Apache 2.0 hat sich
- seit dem Apache 1.3 komplett ver&#228;ndert. Der Apache 1.3 benutzt einen
- speziellen Satz von Skripten, um eine einfache Installation zu
- erm&#246;glichen. Der Apache 2.0 dagegen verwendet nun
- <code>libtool</code> und <code>autoconf</code>, um eine Umgebung zu
- schaffen, die der vieler anderer Open Source Projekte &#228;hnlich
- sieht.</p>
-
- <p>Wenn Sie von einer Unterversion auf die n&auml;chste aktualisieren (z.B.
- von 2.0.50 auf 2.0.51), springen Sie bitte zum Abschnitt <a
- href="#upgrading">Upgrade</a>.</p>
-</summary>
-
-<seealso><a href="programs/configure.html">Den Quellcode konfigurieren</a></seealso>
-<seealso><a href="invoking.html">Apache starten</a></seealso>
-<seealso><a href="stopping.html">Beenden und Neustarten</a></seealso>
-
-<section id="overview"><title>&#220;berblick f&#252;r die Ungeduldigen</title>
-
- <table>
- <columnspec><column width=".13"/><column width=".80"/></columnspec>
- <tr>
- <td><a href="#download">Download</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Auspacken</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Konfigurieren</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Kompilieren</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Installieren</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Anpassen</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Testen</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> muss durch die Nummer der Unterversion ersetzt werden,
- und <em>PREFIX</em> durch den Verzeichnispfad,
- in dem der Server installiert werden soll. Wenn <em>PREFIX</em> nicht
- angegeben ist, wird die Voreinstellung <code>/usr/local/apache2</code>
- verwendet.</p>
-
- <p>Beginnend mit den Anforderungen
- f&#252;r die Kompilierung und Installation des Apache HTTPD ist
- weiter unten jeder Abschnitt des Kompilierungs- und
- Installationsvorganges genauer beschrieben.</p>
-</section>
-
-<section id="requirements"><title>Anforderungen</title>
-
- <p>Folgende Anforderungen gelten f&#252;r die Erstellung des
- Apache:</p>
-
- <dl>
- <dt>Plattenplatz</dt>
- <dd>Stellen Sie sicher, dass Sie kurzzeitig wenigstens 50 MB freien
- Festplattenplatz zur Verf&#252;gung haben. Nach der Installation
- belegt der Apache ungef&#228;hr 10 MB Plattenplatz. Der
- tats&#228;chliche Platzbedarf variiert in Abh&#228;ngigkeit von den
- gew&#228;hlten Konfigurationseinstellungen und
- Modulen von Drittanbietern.</dd>
-
- <dt>ANSI-C-Compiler und Generierungswerkzeuge</dt>
- <dd>Stellen Sie sicher, dass Sie einen ANSI-C Compiler installiert
- haben. Der <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- Compiler (GCC)</a> der <a href="http://www.gnu.org/">Free Software
- Foundation (FSF)</a> ist empfehlenswert (Version 2.7.2 ist gut). Wenn
- Sie den GCC nicht besitzen, stellen Sie zumindest sicher, dass der
- Compiler Ihres Anbieters ANSI-kompatibel ist. Au&#223;erdem muss Ihr
- <code>PATH</code> wesentliche Generierungswerkzeuge wie
- <code>make</code> enthalten.</dd>
-
- <dt>Zeitgenauigkeit bewahren</dt>
- <dd>Elemente des HTTP-Protokolls werden in Form einer Tageszeit
- ausgedr&#252;ckt. Darum sollten Sie jetzt pr&#252;fen, ob Ihr System
- die F&#228;higkeit zur Zeitsynchronisation besitzt, und diese
- gegebenenfalls installieren. &#220;blicherweise werden hierf&#252;r
- die Programme <code>ntpdate</code> oder <code>xntpd</code> verwendet,
- die auf dem Network Time Protocol (NTP) basieren. N&#228;here
- Informationen &#252;ber NTP Software und &#246;ffentliche Zeitserver
- finden Sie in der Usenet Newsgroup <a
- href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
- und auf der <a href="http://www.ntp.org">NTP
- Homepage</a>.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [OPTIONAL]</dt>
- <dd>F&#252;r einige Pflegeprogramme wie <a
- href="programs/apxs.html">apxs</a>
- oder <a href="programs/dbmmanage.html">dbmmanage</a> (die in Perl
- geschrieben sind) wird der Perl 5 Interpreter ben&#246;tigt (die
- Versionen ab 5.003 sind ausreichend). Wenn kein derartiger Interpreter
- vom '<code>configure</code>'-Skript gefunden werden kann, macht das
- jedoch nichts. Selbstverst&#228;ndlich k&#246;nnen Sie den Apache 2.0
- auch so generieren und installieren. Lediglich diese Pflegeskripte
- k&#246;nnen dann nicht verwendet werden. Wenn Sie mehrere Perl
- Interpreter installiert haben (vielleicht Perl 4 durch Ihren
- H&#228;ndler und Perl 5 durch Sie selbst), dann ist die Verwendung der
- <code>--with-perl</code> Option (siehe unten) empfehlenswert, um
- sicherzustellen, dass der richtige Interpreter von
- <code>./configure</code> ausgew&#228;hlt wird.</dd>
- </dl>
-</section>
-
-<section id="download"><title>Download</title>
-
- <p>Der Apache kann von der <a
- href="http://httpd.apache.org/download.cgi">Apache HTTP Server
- Downloadseite</a> heruntergeladen werden, auf der verschiedene Spiegelserver
- angegeben sind. F&uuml;r die meisten Benutzer des Apache ist es auf
- Unix-&auml;hnlichen Systemen am Besten, die Quellcodeversion herunterzuladen
- und zu kompilieren. Der Erstellungsprozess (weiter unten beschrieben) ist
- einfach und erlaubt es Ihnen, den Server Ihren Bed&uuml;rfnissen anzupassen.
- Dazu kommt, dass Bin&auml;rdistributionen gegen&uuml;ber der aktuellen
- Quellcodeversion oft veraltet sind. Wenn Sie tats&auml;chlich ein
- Bin&auml;rpaket herunterladen, folgen Sie bitte den Anweisungen in der Datei
- <code>INSTALL.bindist</code>, die der Distribution beiliegt.</p>
-
- <p>Es ist wichtig, dass Sie nach dem Herunterladen &uuml;berpr&uuml;fen,
- dass es sich um einer vollst&auml;ndige und unver&auml;nderte Version des
- Apache HTTP Servers handelt. Das k&ouml;nnen Sie erreichen, indem Sie das
- heruntergeladene Paket gegen die PGP-Signatur pr&uuml;fen. Einzelheiten dazu
- erfahren Sie auf der <a
- href="http://httpd.apache.org/download.cgi#verify">Download-Seite</a>. Es
- ist auch ein erweitertes Beispiel verf&uuml;gbar, dass die <a
- href="http://httpd.apache.org/dev/verification.html">Anwendung von PGP</a>
- beschreibt.</p>
-
-</section>
-
-<section id="extract"><title>Auspacken</title>
-
- <p>Das Auspacken des Quellcodes aus dem Apache HTTPD Tarball besteht
- aus einem simplen Dekomprimieren und danach "Ent-tarren":</p>
-
- <example>
- $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar
- </example>
-
- <p>Dies erstellt unterhalb des aktuellen Verzeichnisses ein neues
- Verzeichnis, das den Quellcode f&#252;r die Distribution enth&#228;lt.
- Sie sollten mit <code>cd</code> in dieses Verzeichnis wechseln,
- bevor Sie mit der Kompilierung des Servers weitermachen. </p>
-
-</section>
-
-<section id="configure"><title>Den Codebaum konfigurieren</title>
-
- <p>Der n&#228;chste Schritt ist die Konfiguration des
- Apache-Codebaumes f&#252;r Ihre spezielle Plattform und Ihre
- pers&#246;nlichen Bed&#252;rfnisse. Dies wird mit dem Skript
- <code><a href="programs/configure.html">configure</a></code>
- durchgef&#252;hrt, das im Wurzelverzeichnis
- der Distribution enthalten ist. (Entwickler, welche die CVS Version
- des Apache-Codebaumes herunterladen, m&#252;ssen <code>autoconf</code>
- und <code>libtool</code> installiert haben und m&#252;ssen
- <code>buildconf</code> ausf&#252;hren, bevor sie mit den
- n&#228;chsten Schritten fortfahren k&#246;nnen. Dies wird bei
- offiziellen Releases nicht notwendig sein.)</p>
-
- <p>Um den Codebaum mit den Standardeinstellungen zu konfigurieren,
- geben Sie einfach <code>./configure</code> ein. Zur &#196;nderung
- dieser Voreinstellungen akzeptiert <code>configure</code> eine
- Reihe von Variablen und Kommandozeilenoptionen.</p>
-
- <p>Die wichtigste Option ist <code>--prefix</code>, der Ablageort, an dem
- der Apache sp&auml;ter installiert wird, da er f&uuml;r diesen Ort
- konfiguriert werden muss, um korrekt zu arbeiten. Eine feinere Einstellung
- der Dateiablagen ist mit weiteren <a
- href="programs/configure.html#installationdirectories">configure-Optionen</a>
- m&ouml;glich.</p>
-
- <p>Weiterhin k&ouml;nnen Sie zu diesem Zeitpunkt festlegen, welche <a
- href="programs/configure.html#optionalfeatures">Funktionalit&auml;t</a> Sie
- in den Apache aufnehmen m&ouml;chten, indem Sie <a href="mod/">Module</a>
- aktivieren oder deaktivieren. Der Apache bindet standardm&auml;&szlig;ig
- einen Satz von <a href="mod/module-dict.html#Status">Basismodulen</a> ein.
- Andere Module werden mit Hilfe der Option
- <code>--enable-<var>module</var></code> aktiviert, wobei <var>module</var>
- den Namen des Moduls ohne das Pr&auml;fix <code>mod_</code> darstellt.
- Ausserdem sind alle Unterstriche durch Bindestriche zu ersetzen. Sie
- k&ouml;nnen sich auch entscheiden, Module als "<a href="dso.html">Shared
- Objects (DSOs)</a>" zu kompilieren, welche zur Laufzeit ge- und entladen
- werden k&ouml;nnen. Dazu verwenden Sie die Option
- <code>--enable-<var>module</var>=shared</code>. Entsprechend k&ouml;nnen Sie
- Basismodule mit der Option <code>--disable-<var>module</var></code>
- deaktivieren. Lassen Sie Vorsicht walten. wenn Sie diese Optionen verwenden,
- da <code>configure</code> Sie nicht warnen kann, wenn die von Ihnen
- angegebenen Module nicht existieren; die Option wird dann einfach
- ignoriert.</p>
-
- <p>Zus&auml;tzlich ist es zuweilen notwendig, das
- <code>configure</code>-Skript mit Extrainformationen zum Ablageort
- Ihres Compilers, Ihrer Bibliotheken oder Header-Dateien zu versorgen. Das
- tun Sie, indem Sie entweder Umgebungsvariablen oder Kommandozeilenoptionen
- an <code>configure</code> &uuml;bergeben. F&uuml;r mehr Informationen
- lesen Sie bitte die <a href="programs/configure.html">Hilfeseite zu
- configure</a>.</p>
-
- <p>Um einen kurzen Eindruck zu gewinnen, welche M&#246;glichkeiten Sie
- haben, folgt hier ein typisches Beispiel, das den Apache mit einem
- speziellen Compiler und Compilerflags f&#252;r das
- Installationsverzeichnis <code>/sk/pkg/apache</code> kompiliert, sowie
- die beiden zus&#228;tzlichen Module <module>mod_rewrite</module> und
- <module>mod_speling</module> f&#252;r sp&#228;teres Laden durch den
- DSO-Mechanismus:</p>
-
- <example>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
- </example>
-
- <p>Wenn <code>configure</code> startet, ben&#246;tigt es mehrere Minuten,
- um die Verf&#252;gbarkeit von Features auf Ihrem System zu pr&#252;fen
- und ein Makefile zu generieren, das sp&#228;ter zur Kompilierung des
- Servers verwendet wird.</p>
-
- <p>Einzelheiten zu den vielen verschiedenen Konfigurationsoptionen finden
- Sie auf der <a href="programs/configure.html">Hilfeseite zu
- configure</a>.</p>
-
-</section>
-
-<section id="compile"><title>Erstellen</title>
-
- <p>Nun k&#246;nnen Sie die verschiedenen Teile, die das Apache-Paket
- bilden, einfach durch Ausf&#252;hren des folgenden Befehls erstellen:</p>
-
- <example>$ make</example>
-
- <p>Seien Sie hierbei bitte geduldig, denn eine Basiskonfiguration
- ben&#246;tigt ungef&#228;hr 3 Minuten auf einem Pentium III/Linux 2.2.
- System. Dies kann aber abh&#228;ngig von Ihrer Hardware und der Anzahl
- der Module, die Sie aktiviert haben, sehr stark variieren.</p>
-</section>
-
-<section id="install"><title>Installieren</title>
-
- <p>Nun endlich installieren Sie das Package unter dem konfigurierten
- Installations-<em>PREFIX</em> (siehe oben: Option <code>--prefix</code>
- durch Aufrufen von:</p>
-
- <example>$ make install</example>
-
- <p>Wenn Sie upgraden, wird die Installation Ihre Konfigurationsdateien
- oder Dokumente nicht &#252;berschrieben.</p>
-</section>
-
-<section id="customize"><title>Anpassen</title>
-
- <p>Als n&#228;chstes k&#246;nnen Sie Ihren Apache HTTP Server anpassen,
- indem Sie die <a href="configuring.html">Konfigurationsdateien</a>
- unterhalb von <code><em>PREFIX</em>/conf/</code> editieren.</p>
-
- <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
-
- <p>Werfen Sie auch einen Blick in das Apache-Handbuch unter <a
- href="./">docs/manual/</a>. Die aktuellste Version dieses Handbuchs
- sowie eine komplette Referenz der verf&#252;gbaren <a
- href="mod/directives.html">Konfigurationsanweisungen</a> finden
- Sie unter <a href="http://httpd.apache.org/docs-2.1/"
- >http://httpd.apache.org/docs-2.1/</a>.</p>
-</section>
-
-<section id="test"><title>Testen</title>
-
- <p>Sie k&#246;nnen nun Ihren Apache HTTP Server <a
- href="invoking.html">starten</a>, indem Sie einfach</p>
-
- <example>$ <em>PREFIX</em>/bin/apachectl start</example>
-
- <p>ausf&#252;hren.</p>
-
- <p>Danach sollten Sie Ihr erstes Dokument unter dem URL
- <code>http://localhost/</code> anfordern k&#246;nnen. Die Webseite,
- die Sie sehen, ist im <directive module="core">DocumentRoot</directive>
- abgelegt, welches &#252;blicherweise <code><em>PREFIX</em>/htdocs/</code>
- ist. Den Server <a href="stopping.html">stoppen</a> Sie wieder durch
- Ausf&#252;hren von:</p>
-
- <example>$ <em>PREFIX</em>/bin/apachectl stop</example>
-</section>
-
-<section id="upgrading"><title>Upgrade</title>
-
- <p>Der erste Schritt beim Aktualisieren besteht darin, die
- Versionsank&uuml;ndigung sowie die <code>CHANGES</code>-Datei in der
- Quelltextdistribution zu lesen, um &Auml;nderungen zu finden, die Ihr
- System m&ouml;glicherweise betreffen. Wenn Sie einen gr&ouml;&szlig;eren
- Versionssprung durchf&uuml;hren (z.B. vom 1.3 auf 2.0 oder von 2.0 auf
- 2.2), wird es wahrscheinlich auch gr&ouml;&szlig;ere Unterschiede in der
- Kompilier- und Laufzeitkonfiguration geben, die manuelle Nacharbeiten
- erfordern. Au&szlig;erdem m&uuml;ssen alle Module aktualisiert
- werden, um den &Auml;nderungen der Modul-API gerecht zu werden.</p>
-
- <p>Die Aktualisierung einer Unterversion auf eine andere (z.B. von 2.0.55
- auf 2.0.57) ist einfacher. <code>make install</code> &uuml;berschreibt
- keine der bereits existierenden Dokumente, Log- und Konfigurationsdateien.
- Ausserdem bem&uuml;hen sich die Entwickler, inkompatible &Auml;nderungen
- der <code>configure</code>-Optionen, der Laufzeitkonfiguration sowie der
- Modul-API zu vermeiden. In den meisten F&auml;llen sollten Sie in der
- Lage sein, den gleichen <code>configure</code>-Befehl, die gleiche
- Konfiguration und die gleichen Module wieder zu verwenden. (Das gilt erst
- seit Version 2.0.41 -- fr&uuml;here Versionen enthielten noch inkompatible
- &Auml;nderungen).</p>
-
- <p>Wenn Sie den Quellcode von Ihrer letzten Installation aufgehoben haben,
- ist ein Upgrade sogar noch einfacher. Die Datei <code>config.nice</code> im
- Wurzelverzeichnis des alten Quelltextbaums enth&auml;lt den genauen
- <code>configure</code>-Befehl, der verwendet wurde, um den Quellcode
- zu konfigurieren. Um jetzt von einer Version auf die n&auml;chste zu
- aktualisieren, kopieren Sie einfach die <code>config.nice</code> in das
- Verzeichnis der neuen Version, passen sie bei Bedarf an, und
- f&uuml;hren Sie sie aus:</p>
-
- <example>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <var>PREFIX</var>/bin/apachectl stop<br />
- $ <var>PREFIX</var>/bin/apachectl start<br />
- </example>
-
- <note type="warning">Sie sollten jede neue Version immer in Ihrer Umgebung
- testen, bevor Sie sie produktiv schalten. Beispielsweise k&ouml;nnen Sie
- die neue Version neben der alten installieren, indem Sie ein anderes
- <code>--prefix</code> und einen anderen Port w&auml;hlen (durch Anpassen der
- <directive module="mpm_common">Listen</directive>-Direktive). So
- k&ouml;nnen Sie auf eventuelle Inkompatibilit&auml;ten testen, bevor Sie
- endg&uuml;ltig die neue Version verwenden.</note>
-</section>
-
-</manualpage>
diff --git a/docs/manual/install.xml.es b/docs/manual/install.xml.es
deleted file mode 100644
index e37456bb9d..0000000000
--- a/docs/manual/install.xml.es
+++ /dev/null
@@ -1,428 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.30 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="install.xml.meta">
-
- <title>Compilaci&#243;n e Instalaci&#243;n</title>
-
-<summary>
-
- <p>Este documento explica c&#243;mo compilar e instalar Apache en
- sistemas Unix y tipo Unix. Para obtener informaci&#243;n sobre
- c&#243;mo compilar e instalar en Windows, consulte la secci&#243;n
- <a href="platform/windows.html">Usar Apache en Microsoft
- Windows</a>. Para otras plataformas, consulte la
- documentaci&#243;n sobre <a href="platform/">plataformas</a>.</p>
-
- <p>El entorno de configuraci&#243;n e instalaci&#243;n de Apache
- 2.0 ha cambiado completamente respecto al de Apache 1.3. Apache
- 1.3 usaba un conjunto de scripts a medida para conseguir una
- instalaci&#243;n f&#225;cil. Apache 2.0 usa <code>libtool</code> y
- <code>autoconf</code> para crear un entorno m&#225;s parecido al
- de muchos otros proyectos Open Source.</p>
-
- <p>Si lo que quiere hacer es actualizar su servidor Apache desde
- una versi&#243;n menor (por ejemplo, desde la 2.0.50 a la 2.0.51),
- pase directamente a la secci&#243;n de <a
- href="#upgrading">actualizaci&#243;n</a>.</p>
-
-</summary>
-
-<seealso><a href="programs/configure.html">Configuraci&#243;n de la
-estructura de directorios</a></seealso> <seealso><a
-href="invoking.html">Iniciar Apache</a></seealso> <seealso><a
-href="stopping.html">Parar y reiniciar Apache</a></seealso>
-
-<section id="overview"><title>Visi&#243;n general del proceso para
- impacientes</title>
-
- <table>
- <columnspec><column width=".13"/><column
- width=".80"/></columnspec>
- <tr>
- <td><a href="#download">Descargar</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Descomprimir</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Ejecutar el script configure</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Compilar</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Instalar</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Personalizar</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Comprobar que la instalaci&#243;n
- funciona</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> hay que reemplazarlo por el n&#250;mero de la
- versi&#243;n menor, y <em>PREFIX</em> hay que reemplazarlo por la
- ruta en la que se va a instalar Apache. Si no especifica
- ning&#250;n valor en <em>PREFIX</em>, el valor por defecto que se
- toma es <code>/usr/local/apache2</code>.</p>
-
- <p>Cada parte del proceso de configuraci&#243;n e instalaci&#243;n
- se describe detalladamente m&#225;s abajo, empezando por los
- requisitos para compilar e instalar Apache.</p>
-</section>
-
-<section id="requirements"><title>Requisitos</title>
-
- <p>Estos son los requisitos necesarios para compilar Apache:</p>
-
- <dl>
- <dt>Espacio en disco</dt> <dd>Compruebe que tiene disponibles al
- menos 50 MB de espacio libre en disco. Despu&#233;s de la
- instalaci&#243;n, Apache ocupa aproximadamente 10 MB. No
- obstante, la necesidad real de espacio en disco var&#237;a
- considerablemente en funci&#243;n de las opciones de
- configuraci&#243;n que elija y de los m&#243;dulos externos que
- use.</dd>
-
- <dt>Compilador ANSI-C y Build System</dt> <dd>Compruebe que
- tiene instalado un compilador de ANSI-C. Se recomienda el <a
- href="http://www.gnu.org/software/gcc/gcc.html">Compilador GNU C
- (GCC)</a> de la <a href="http://www.gnu.org/">Free Software
- Foundation (FSF)</a> (con la versi&#243;n 2.7.2 es
- suficiente). Si no tiene instaldo el GCC, entonces compruebe que
- el compilador que va a utilizar cumple con los est&#225;ndares
- ANSI. Adem&#225;s, su <code>PATH</code> debe contener la
- ubicaci&#243;n donde de encuentran las herramientas b&#225;sicas
- para compilar tales como <code>make</code>.</dd>
-
- <dt>Ajuste exacto del reloj del sistema</dt> <dd>Los elementos
- del protocolo HTTP est&#225;n expresados seg&#250;n la hora del
- dia. Por eso, si quiere puede investigar como instalar alguna
- utilidad para sincronizar la hora de su sistema. Para esto,
- normalmente, se usan los programas <code>ntpdate</code> o
- <code>xntpd</code>, que est&#225;n basados en el protocolo
- Network Time Protocol (NTP). Consulte el grupo de noticias <a
- href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
- y el <a href="http://www.eecis.udel.edu/~ntp/">sitio web de NTP
- </a> para obtener m&#225;s informaci&#243;n sobre NTP y los
- servidores p&#250;blicos de tiempo.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a> [OPCIONAL]</dt>
- <dd>Para algunos de los scripts de soporte como <a
- href="programs/apxs.html">apxs</a> o <a
- href="programs/dbmmanage.html">dbmmanage</a> (que est&#225;n
- escritos en Perl) es necesario el int&#233;rprete de Perl 5 (las
- versiones 5.003 o posteriores son suficientes). Si el script
- `<code>configure</code>' no encuentra ese int&#233;rprete
- tampoco pasa nada. A&#250;n puede compilar e instalar Apache
- 2.0. Lo &#250;nico que ocurrir&#225; es que esos scripts de
- soporte no podr&#225;n ser usados. Si usted tiene varios
- interpretes de Perl instalados (quiz&#225;s Perl 4 porque estaba
- ya incluido en su distribuci&#243;n de Linux y Perl 5 porque lo
- ha instalado usted), entonces se recomienda usar la opci&#243;n
- <code>--with-perl</code> para asegurarse de que
- <code>./configure</code> usa el int&#233;rprete correcto.</dd>
- </dl>
-</section>
-
-<section id="download"><title>Descargar</title>
-
- <p>Puede descargar Apache desde <a
- href="http://httpd.apache.org/download.cgi">la secci&#243;n de
- descargas del sitio web de Apache</a> el cual tiene varios
- mirrors. Para la mayor&#237;a de los usuarios de Apache que tienen
- sistemas tipo Unix, se recomienda que se descarguen y compilen el
- c&#243;digo fuente. El proceso de compilaci&#243;n (descrito
- m&#225;s abajo) es f&#225;cil, y permite adaptar el servidor
- Apache a sus necesidades. Adem&#225;s, las versiones de
- disponibles en archivos binarios no est&#225;n siempre actulizadas
- con las &#250;ltimas modificaciones en el codigo fuente. Si se
- descarga un binario, siga las instrucciones contenidas en el
- archivo <code>INSTALL.bindist</code> incluido en la
- distribuci&#243;n</p>
-
- <p>Despu&#233;s de la descarga, es importante que verifique que el
- archivo descargado del servidor HTTP Apache est&#225; completo y
- sin modificaciones. Esto puede hacerlo comparando el archivo
- descargado (.tgz) con su firma PGP. Instrucciones detalladas de
- c&#243;mo hacer esto est&#225;n disponibles en <a
- href="http://httpd.apache.org/download.cgi#verify"> la
- secci&#243;n de descargas</a> junto con un ejemplo de c&#243;mo <a
- href="http://httpd.apache.org/dev/verification.html">usar
- PGP</a>.</p>
-
-</section>
-
-<section id="extract"><title>Descomprimir</title>
-
- <p>Extraer el c&#243;digo fuente del archivo .tgz que acabada de
- descargar es muy f&#225;cil. Ejecute los siguientes comandos:</p>
-
-<example>
- $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar
-</example>
-
- <p>Estos comandos crear&#225;n un nuevo directorio dentro del
- directorio en el que se encuentra y que contendr&#225; el
- c&#243;digo fuente de la distribuci&#243;n. Debe cambiarse a ese
- directorio con <code>cd</code> para proceder a compilar el
- servidor Apache.</p>
-
-</section>
-
-<section id="configure"><title>Configuraci&#243;n de la estructura de
-directorios</title>
-
- <p>El siguiente paso es configurar la estructura de directorios
- para su plataforma y sus necesidades personales. Esto se hace
- usando el script <code>configure</code> incluido en el directorio
- raiz de la distribuci&#243;n que acaba de descargar. (Los
- desarrolladores que se descarguen la versi&#243;n del CVS de la
- estructura de directorios necesitar&#225;n tener instalados
- <code>autoconf</code> y <code>libtool</code>, y necesitar&#225;n
- ejecutar <code>buildconf</code> antes de continuar con los
- siguientes pasos. Esto no es preciso para las versiones
- oficiales.)</p>
-
- <p>Para configurar la estructura de directorios a partir del
- c&#243;digo fuente usando las opciones por defecto, solo tiene que
- ejecutar <code>./configure</code>. Para cambiar las opciones por
- defecto, <code>configure</code> acepta una serie de variables y
- opciones por la l&#237;nea de comandos.</p>
-
- <p>La opci&#243;n m&#225;s importante es <code>--prefix</code> que
- es el directorio en el que Apache va a ser instalado despu&#233;s,
- porque Apache tiene que ser configurado para el directorio que se
- especifique para que funcione correctamente. Es posible lograr un
- mayor control del lugar donde se van a instalar los ficheros de
- Apache con otras <a
- href="programs/configure.html#installationdirectories">opciones de
- configuraci&#243;n</a>.</p>
-
- <p>En este momento, puede especificar que <a
- href="programs/configure.html#optionalfeatures">caracter&#237;sticas
- o funcionalidades</a> quiere incluir en Apache activando o
- desactivando <a href="mod/">m&#243;dulos</a>. Apache viene con
- una <a href="mod/module-dict.html#Status">selecci&#243;n
- b&#225;sica</a> de m&#243;dulos incluidos por defecto. Se pueden
- activar otros m&#243;dulos usando la opci&#243;n
- <code>--enable-<var>module</var></code>, donde <var>module</var>
- es el nombre del m&#243;dulo sin el <code>mod_</code> y
- convirtiendo los guiones bajos que tenga en guiones normales.
- Tambi&#233;n puede optar por compilar m&#243;dulos como <a
- href="dso.html">objetos din&#225;micos compartidos (DSOs)</a> --
- que pueden ser activados o desactivados al ejecutar -- usando la
- opci&#243;n <code>--enable-<var>module</var>=shared</code>. De
- igual manera, puede desactivar alguno de los m&#243;dulos que
- vienen por defecto en la selecci&#243;n basica con la opci&#243;n
- <code>--disable-<var>module</var></code>. Tenga cuidado cuando
- use estas opciones, porque <code>configure</code> no le
- avisar&#225; si el m&#243;dulo que especifica no existe;
- simplemente ignorar&#225; esa opci&#243;n.</p>
-
- <p>Adem&#225;s, a veces es necesario pasarle al script
- <code>configure</code> informaci&#243;n adicional sobre donde esta
- su compilador, librerias o ficheros de cabecera. Esto se puede
- hacer, tanto pasando variables de entorno, como pasandole opciones
- a <code>configure</code> a trav&#233;s de la l&#237;nea de
- comandos. Para m&#225;s informaci&#243;n, consulte el <a
- href="programs/configure.html">Manual del script
- configure</a>.</p>
-
- <p>Para que se haga una idea sobre las posibilidades que tiene,
- aqu&#237; tiene un ejemplo t&#237;pico que configura Apache para
- la ruta <code>/sw/pkg/apache</code> con un compilador y unos flags
- determinados, y adem&#225;s, con dos m&#243;dulos adicionales
- <module>mod_rewrite</module> y <module>mod_speling</module> para
- cargarlos despu&#233;s a trav&#233;s del mecanismo DSO:</p>
-
-<example>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</example>
-
- <p>Cuando se ejecuta <code>configure</code> se comprueban que
- caracter&#237;sticas o funcionalidades est&#225;n disponibles en
- su sistema y se crean los Makefiles que ser&#225;n usados luego
- para compilar el servidor. Esto tardar&#225; algunos minutos.</p>
-
- <p>La informaci&#243;n sobre todas las opciones de
- <code>configure</code> est&#225; disponible en el <a
- href="programs/configure.html">Manual del script
- configure</a>.</p>
-
-</section>
-
-<section id="compile"><title>Compilar</title>
-
- <p>Ahora puede compilar las diferentes partes que forman Apache
- simplemente ejecutando el siguiente comando:</p>
-
-<example>$ make</example>
-
- <p>Por favor, tanga un poco de paciencia ahora, porque una
- configuraci&#243;n b&#225;sica tarda aproximadamente 3 minutos en
- compilar en un Pentium III con un sistema Linux 2.2, pero este
- tiempo puede variar considerablemente en funci&#243;n de su
- hardware y del n&#250;mero de m&#243;dulos que haya
- seleccionado.</p>
-</section>
-
-<section id="install"><title>Instalar</title>
-
- <p>Ahora es el momento de instalar el paquete en el diretorio
- elegido en <em>PREFIX</em> (consulte la opci&#243;n
- <code>--prefix</code> m&#225;s arriba) ejecutando:</p>
-
-<example>$ make install</example>
-
- <p>Si usted est&#225; solo actualizando una instalaci&#243;n
- anterior, la nueva instalaci&#243;n no sobreescribir&#225; sus
- ficheros de configuraci&#243;n ni otros documentos.</p>
-</section>
-
-<section id="customize"><title>Personalizar</title>
-
- <p>El paso siguiente, es personalizar su servidor Apache editando
- los <a href="configuring.html">ficheros de configuraci&#243;n</a>
- que est&#225;n en <code><em>PREFIX</em>/conf/</code>.</p>
-
-<example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
-
- <p>&#233;chele un vistazo al Manual de Apache que est&#225; en <a
- href="./">docs/manual/</a> o consulte en <a
- href="http://httpd.apache.org/docs-2.1/"
- >http://httpd.apache.org/docs-2.1/</a> la versi&#243;n m&#225;s
- reciente de este manual y la Guia de Referencia de todas las <a
- href="mod/directives.html">directivas de configuraci&#243;n</a>
- disponibles.</p>
-</section>
-
-<section id="test"><title>Comprobar que la instalaci&#243;n
-funciona</title>
-
- <p>Ahora puede <a href="invoking.html">iniciar</a> su servidor
- Apache cuando quiera ejecutando:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl start</example>
-
- <p>y entonces debe poder acceder al documento que tenga
- especificado por defecto usando el siguiente URL:
- <code>http://localhost/</code>. El documento que ver&#225;
- estar&#225; en <directive module="core">DocumentRoot</directive> y
- casi siempre estar&#225; en <code><em>PREFIX</em>/htdocs/</code>.
- Si quiere <a href="stopping.html">parar</a> el servidor, puede
- hacerlo ejecutando:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl stop</example>
-</section>
-<section id="upgrading"><title>Actualizar una instalaci&#243;n
-prrevia</title>
-
- <p>El primer paso para actualizar una instalaci&#243;n anterior es
- leer las especificaciones de la versi&#243;n y el fichero
- <code>CHANGES</code> en la distribuci&#243;n de c&#243;digo fuente
- que ha descargado para encontrar los cambios que puedan afectar a
- su instalaci&#243;n actual. Cuando el cambio sea entre versiones
- mayores (por ejemplo, de la 1.3 a la 2.0 o de la 2.0 a la 2.2),
- entonces es m&#225;s probable que haya diferencias importantes en
- la compilaci&#243;n y en la ejecuci&#243;n que necesitar&#225;n
- ajustes manuales. Todos los m&#243;dulos necesitar&#225;n
- tambi&#233;n ser actualizados para adaptarse a los cambios en el
- interfaz de programaci&#243;n (API) de m&#243;dulos.</p>
-
- <p>La actualizaci&#243;n cuando el cambio es entre versiones
- menores (por ejemplo, de la 2.0.55 a la 2.0.57) es m&#225;s
- f&#225;cil. El proceso <code>make install</code> no
- sobreescribir&#225; ninguno de los documentos existentes, archivos
- log, o archivos de configuraci&#243;n. Adem&#225;s, los
- desarrolladores hacen todos los esfuerzos posibles para evitar
- cambios que generen incompatibilidades en las opciones de
- <code>configure</code>, en la configuraci&#243;n de la
- ejecuci&#243;n o en la interfaz de programaci&#243;n de
- m&#243;dulos. En la mayor parte de los casos debe poder usar un
- comando <code>configure</code> id&#233;ntico, un fichero de
- configuraci&#233;n id&#233;ntico, y todos sus m&#243;dulos deben
- seguir funcionando. (Esto es v&#225;lido solo para versiones
- posteriores a la 2.0.41; las versiones anteriores contienen
- cambios incompatibles.)</p>
-
- <p>Si va a conservar la estructura de directorios de su anterior
- instalaci&#243;n, la actualizaci&#243;n es m&#225;s f&#225;cil
- incluso. El fichero <code>config.nice</code> que est&#225; en el
- directorio raiz de la estructura de directorios antigua contiene
- exactamente el comando <code>configure</code> que usted us&#243;
- para configurar la estructura de directorios de Apache. Entonces,
- para actualizar su instalaci&#243;n de una vers&#243;on a la
- siguinete, solo tiene que copiar el archivo
- <code>config.nice</code> a la estructura de directorios del
- c&#243;digo fuente de la nueva versi&#243;n, editarlo, hacer
- cualquier cambio que desee, y ejecutarlo :</p>
-
- <example>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </example>
-
- <note type="warning">Tenga en cuenta que antes de poner una nueva
- versi&#243;n de Apache en producci&#243;n, debe siempre probarla
- antes en su entorno. Por ejemplo, puede instalar y ejecutar la
- nueva versi&#243;n junto con la antigua usando un
- <code>--prefix</code> diferente y un puerto diferente (modificando
- la directiva <directive module="mpm_common">Listen</directive>)
- para comprobar que no existe ninguna incompatibilidad antes de
- hacer la actualizaci&#243;n definitiva.</note>
-</section>
-</manualpage>
-
diff --git a/docs/manual/install.xml.fr b/docs/manual/install.xml.fr
deleted file mode 100644
index 5913706162..0000000000
--- a/docs/manual/install.xml.fr
+++ /dev/null
@@ -1,420 +0,0 @@
-<?xml version='1.0' encoding='ISO-8859-1' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1.30 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="install.xml.meta">
-
- <title>Compilation et Installation</title>
-
-<summary>
-
- <p>Ce document couvre la compilation et l'installation d'Apache sur les
- syst&#232;mes Unix et clones d'Unix. Pour la compilation et l'installation sous
- Windows, voir <a href="platform/windows.html">Utiliser Apache sous Windows
- </a>. Pour les autres plates-formes, voir la documentation des <a
- href="platform/">plates-formes</a>.</p>
-
- <p>L'environnement de configuration et d'installation d'Apache 2.0 a &#233;t&#233;
- compl&#233;tement revu par rapport &#224; celui d'Apache 1.3. Apache 1.3 utilisait un
- ensemble de scripts pour permettre une installation facile. Apache 2.0
- utilise &#224; pr&#233;sent <code>libtool</code> et <code>autoconf</code> afin de
- cr&#233;er un environnement le plus proche possible d'autres projets
- Logiciel Libre.</p>
-
- <p>Si vous faite une mise &#224; niveau d'une version mineure &#224; la suivante (par
- exemple, de 2.0.50 &#224; 2.0.51), veuillez s'il vous pla&#238;t passer directement &#224;
- la section <a href="#upgrading">Mise &#224; niveau</a>.</p>
-
-</summary>
-
-<seealso><a href="programs/configure.html">Configurer l'arborescence source</a></seealso>
-<seealso><a href="invoking.html">D&#233;marrage d'Apache</a></seealso>
-<seealso><a href="stopping.html">Arr&#234;t et Red&#233;marrage</a></seealso>
-
-<section id="overview"><title>Survol Rapide pour les
- impatients</title>
-
- <table>
- <columnspec><column width=".13"/><column width=".80"/></columnspec>
- <tr>
- <td><a href="#download">T&#233;l&#233;charger</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">Extraire</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">Configurer</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">Compiler</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">Installer</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">Personnaliser</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">Tester</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> doit &#234;tre remplac&#233; par le num&#233;ro de version mineure actuel, et
- <em>PREFIX</em> par le chemin o&#249; le serveur doit &#234;tre install&#233;. Si
- <em>PREFIX</em> n'est pas sp&#233;cifi&#233;, l'installation se fait dans
- <code>/usr/local/apache2</code>.</p>
-
- <p>Chacune des sections du processus de compilation et d'installation est
- d&#233;crite ci-apr&#232;s, en commen&#231;ant par les pr&#233;-requis &#224; la compilation et &#224;
- l'installation d'Apache HTTPD.</p>
-</section>
-
-<section id="requirements"><title>Pr&#233;-requis</title>
-
- <p>Les pr&#233;-requis suivants sont n&#233;cessaire pour l'installation d'Apache:</p>
-
- <dl>
- <dt>Espace Disque</dt>
- <dd>Au moins 50 Mo d'espace disque temporaire sont n&#233;cessaires. Apr&#232;s
- installation, Apache occupe environ 10 Mo sur le disque. L'espace disque
- occup&#233; par une installation compl&#232;te d&#233;pend beaucoup de la configuration
- du serveur, ainsi que de la pr&#233;sence &#233;ventuelle de modules tiers.</dd>
-
- <dt>Compilateur C ANSI et Build</dt>
- <dd>Un compilateur C ANSI doit &#234;tre utilis&#233;. Le <a
- href="http://www.gnu.org/software/gcc/gcc.html">compilateur C GNU
- (GCC)</a> de la <a href="http://www.gnu.org/">Free Software Foundation
- (FSF)</a> est recommand&#233; (la version 2.7.2 convient). En cas
- d'absence de GCC, v&#233;rifiez que le compilateur fourni avec l'architecture
- utilis&#233;e est conforme aux normes ANSI. De plus, les outils de constructions
- de base, tel <code>make</code>, doivent &#234;tre pr&#233;sents dans votre
- <code>PATH</code>.</dd>
-
- <dt>S'assurer que la machine est et reste &#224; l'heure</dt>
- <dd>Certains &#233;l&#233;ments du protocole HTTP sont exprim&#233;s en tant qu'heure de
- la journ&#233;e. Aussi est-il important de s'assurer que le syst&#232;me o&#249; Apache
- doit tourner dispose de m&#233;canismes de synchronisation temporelle. En
- g&#233;n&#233;ral, les programmes <code>ntpdate</code> ou <code>xntpd</code> sont
- utilis&#233;s; ces programmes impl&#233;mentent le Network Time Protocol (NTP).
- Voir le groupe Usenet <a
- href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a> et la <a
- href="http://www.eecis.udel.edu/~ntp/">page NTP</a> pour plus de d&#233;tails
- sur les logiciels NTP et les serveurs de temps publics.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [FACULTATIF]</dt>
- <dd>Certains des scripts fournis avec Apache, tel <a
- href="programs/apxs.html">apxs</a> ou <a
- href="programs/dbmmanage.html">dbmmanage</a> (qui sont &#233;crits en
- Perl) n&#233;cessitent l'interpr&#233;teur Perl 5 (version 5.003 ou sup&#233;rieure).
- Au cas o&#249; le script <code>configure</code> ne trouve pas d'interpr&#233;teur
- Perl, la compilation sera quand m&#234;me r&#233;alis&#233;e sans souci. Seuls ces
- scripts ne seront pas utilisables. Si plusieurs interpr&#233;teurs Perl sont
- install&#233;s (par exemple, Perl 4 fourni avec l'OS, et Perl 5 install&#233; par
- l'administrateur), il est conseill&#233; de passer l'option
- <code>--with-perl</code> afin de garantir que le bon interpr&#233;teur est
- utilis&#233; par <code>./configure</code>.</dd>
- </dl>
-</section>
-
-<section id="download"><title>T&#233;l&#233;charger</title>
-
- <p>Apache est t&#233;l&#233;chargeable depuis le <a
- href="http://httpd.apache.org/download.cgi">site de t&#233;l&#233;chargement
- d'Apache</a> qui fournit la liste de plusieurs miroirs. L&#224; sont disponibles
- les derni&#232;res versions. La plupart des
- utilisateurs d'Apache sur des syst&#232;mes de type Unix devraient
- probablement t&#233;l&#233;charger et compiler une version &#224; partir du code source.
- Le processus de construction (d&#233;crit ci-dessous) est facile et
- vous permet d'adapter votre serveur pour convenir &#224; vos besoins.
- En outre, les versions binaires ne sont souvent pas &#224; jour avec
- les derni&#232;res versions du code source. Si vous t&#233;l&#233;chargez une
- version binaire, suivez les instructions dans le dossier
- <code>INSTALL.bindist</code> &#224; l'int&#233;rieur de la distribution.</p>
-
- <p>Apr&#232;s le t&#233;l&#233;chargement, il est important de v&#233;rifier que les sources
- t&#233;l&#233;charg&#233;es sont bien compl&#232;tes et non modifi&#233;es, et ce surtout si un
- miroir a &#233;t&#233; utilis&#233; pour le t&#233;l&#233;chargement. Ceci peut &#234;tre fait en
- testant l'archive tar t&#233;l&#233;charg&#233;e avec la signature PGP. Cette proc&#233;dure
- s'effectue en 2 &#233;tapes. D'abord, il faut r&#233;cup&#233;rer le fichier <a
- href="http://www.apache.org/dist/httpd/KEYS"><code>KEYS</code></a> du site
- de distribution d'Apache. (Pour v&#233;rifier que ce fichier <code>KEYS</code>
- n'a pas &#233;t&#233; modifi&#233;, une bonne id&#233;e peut &#234;tre d'utiliser un fichier d'une
- distribution pr&#233;c&#233;dente d'Apache ou d'importer les cl&#233;s d'un serveur de
- cl&#233;s public.) Les cl&#233;s peuvent &#234;tre import&#233;es dans le keyring de
- l'utilisateur au moyen d'une des commandes (selon la version de PGP):</p>
-
-<example>$ pgp &lt; KEYS</example>
-
- <p>ou </p>
-
-<example>$ gpg --import KEYS</example>
-
- <p>La prochaine &#233;tape est de tester l'archive tar au moyen de la signature
- PGP, qui devrait toujours &#234;tre disponible sur le <a
- href="http://httpd.apache.org/download.cgi">site principal d'Apache</a>.
- Un lien vers cette signature est plac&#233; derri&#232;re le lien de t&#233;l&#233;chargement
- correspondant ou peut &#234;tre trouv&#233; dans le r&#233;pertoire correspondant sur <a
- href="http://www.apache.org/dist/httpd/">le site de distribution
- d'Apache</a>. Le nom de ce fichier est le m&#234;me que celui de l'archive
- source, avec en plus l'extension <code>.asc</code>. La distribution
- t&#233;l&#233;charg&#233;e peut alors &#234;tre v&#233;rifi&#233;e au moyen de la commande (&#224; nouveau,
- selon la version de PGP):</p>
-
-<example>$ pgp httpd-2_1_<em>NN</em>.tar.gz.asc</example>
-
- <p>ou</p>
-
-<example>$ gpg --verify httpd-2_1_<em>NN</em>.tar.gz.asc</example>
-
- <p>Un message comme celui-ci devrait s'afficher</p>
-
-<example>Good signature from user "Martin Kraemer
- &lt;martin@apache.org&gt;".</example>
-
- <p>Selon les relations de confiances contenues dans le keyring de
- l'utilisateur, un message peut s'afficher, sp&#233;cifiant que la relation entre
- la cl&#233; et le signataire ne peut &#234;tre v&#233;rifi&#233;e. Ceci n'est pas un probl&#232;me si
- vous ne mettez pas en doute l'authenticit&#233; du fichier <code>KEYS</code>.</p>
-</section>
-
-<section id="extract"><title>Extraire</title>
-
- <p>Extraire les sources &#224; partir de l'archive tar est une simple affaire de
- d&#233;compression et d'extraction tar:</p>
-
-<example>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</example>
-
- <p>Un nouveau r&#233;pertoire est cr&#233;&#233; dans le r&#233;pertoire courant, il contient le
- code source de la distribution. Il faut aller dans ce r&#233;pertoire au moyen
- de la commande <code>cd</code> avant de commencer la compilation du
- serveur.</p>
-</section>
-
-<section id="configure"><title>Configurer l'arborescence source</title>
-
- <p>L'&#233;tape suivante est la configuration de l'arborescence source d'Apache,
- pour votre plate-forme et selon les n&#233;cessit&#233;s du site. Cette configuration est
- r&#233;alis&#233;e au moyen du script <code>configure</code> fourni dans le
- r&#233;pertoire racine de la distribution. (Les d&#233;veloppeurs qui t&#233;l&#233;chargent
- Apache via CVS devront utiliser les outils <code>autoconf</code> et
- <code>libtool</code> avant de passer &#224; la suite. Ceci n'est pas n&#233;cessaire
- pour les versions officielles.)</p>
-
- <p>Pour configurer l'arborescence source en utilisant les options par
- d&#233;faut, tapez <code>./configure</code>. Pour modifier les valeurs des
- options par d&#233;faut, <code>configure</code> accepte un grand nombre de
- variables et d'options de ligne de commande. </p>
-
- <p>La plus importante de ces options est le chemin du r&#233;pertoire o&#249;
- Apache sera install&#233;,
- car Apache doit &#234;tre configur&#233; pour que cet emplacement fonctionne
- correctement. Plusieurs autres options sont disponibles pour
- le contr&#244;le fin de l'emplacement des fichiers r&#233;sultants avec <a
- href="programs/configure.html#installationdirectories">options de
- configuration</a>.</p>
-
- <p>En outre, &#224; ce moment, vous pouvez indiquer quels <a
- href="programs/configure.html#optionalfeatures">fonctionnalit&#233;s</a>
- vous voulez inclure dans Apache en ajoutant et/ou en retranchant
- des <a href="mod/">modules</a>. Apache vient avec un ensemble
- de modules de <a href="mod/module-dict.html#Status">Base</a>
- inclus par d&#233;faut. D'autres modules peuvent &#234;tre ajout&#233;s en utilisant
- l'option <code>--enable-<var>module</var></code>, o&#249;
- <var>module</var> est le nom du module avec la cha&#238;ne
- <code>mod_</code> coup&#233;e et avec les caract&#232;res de soulignement
- convertis en tirets. Vous pouvez &#233;galement choisir de compiler
- des modules en tant qu'<a href="dso.html">objets partag&#233;s (DSOs)</a>,
- qui peuvent &#234;tre charg&#233;s ou d&#233;charg&#233; &#224; l'ex&#233;cution -- en employant
- l'option <code>--enable-<var>module</var>=shared</code>.
- De m&#234;me, vous pouvez retrancher les modules de Base avec l'option
- <code>--disable-<var>module</var></code>. Prenez garde lorsque
- vous employez ces options, puisque <code>configure</code> ne peut
- vous informer si le module cible n'existe pas; <code>configure</code>
- ignorera simplement l'option.</p>
-
- <p>Il est parfois n&#233;cessaire de fournir des
- informations suppl&#233;mentaires au script
- <code>configure</code> sur l'emplacement de vos
- compilateur, biblioth&#232;ques ou dossiers d'en-t&#234;te. Ceci se fait en
- passant les variables d'environnement ou des options incluses sur la ligne
- de commande &#224; <code>configure</code>. Pour plus d'information
- sur ce sujet, consultez la page de documentation
- <a href="programs/configure.html">configurer</a>.</p>
-
- <p>L'exemple suivant compile Apache pour &#234;tre install&#233;
- dans <code>/sw/pkg/apache</code> avec un
- compilateur et des options de compilation particuli&#232;res, ainsi que les deux
- modules <module>mod_rewrite</module> et <module>mod_speling</module>, qui
- pourront &#234;tre charg&#233;s plus tard au moyen des m&#233;canismes DSO:</p>
-
-<example>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</example>
-
- <p>Une fois lanc&#233;, <code>configure</code> peut prendre quelques minutes
- pour tester les possibilit&#233;s du syst&#232;me et produire les fichiers
- <code>Makefile</code> qui seront utilis&#233;s pour construire le serveur.</p>
-
- <p>Les d&#233;tails de toutes les options <code>configure</code> sont
- disponibles sur la page de documentation <a href="programs/configure.html">configurer</a>.</p>
-</section>
-
-<section id="compile"><title>Compiler</title>
-
- <p>Les diff&#233;rents composants d'Apache sont &#224; pr&#233;sent pr&#234;ts &#224;
- &#234;tre compil&#233;s, en tapant simplement la commande:</p>
-
-<example>$ make</example>
-
- <p>Un peu de patience est requise, une configuration standard met environ 3
- minutes &#224; compiler sur un Pentium III sous Linux 2.2. Ce temps peut
- varier largement suivant le mat&#233;riel utilis&#233; et les modules
- selectionn&#233;s.</p>
-</section>
-
-<section id="install"><title>Installer</title>
-
- <p>Il est temps d'installer le 'package' dans le r&#233;pertoire d'installation
- <em>PREFIX</em> configur&#233; auparavant (voir l'option <code>--prefix</code>
- ci-dessus) en tapant:</p>
-
-<example>$ make install</example>
-
- <p>En cas de mise &#224; jour, l'installation n'&#233;crasera ni les fichiers de
- configuration du serveur, ni ses documents.</p>
-</section>
-
-<section id="customize"><title>Personnaliser la Configuration</title>
-
- <p>Il reste &#224; pr&#233;sent &#224; configurer le serveur HTTP Apache, en &#233;ditant les
- <a href="configuring.html">fichiers de configuration</a> plac&#233;s dans
- <code><em>PREFIX</em>/conf/</code>.</p>
-
-<example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
-
- <p>A consulter : le manuel d'Apache dans
- <a href="./">docs/manual/</a> ou bien <a
- href="http://httpd.apache.org/docs-2.1/"
- >http://httpd.apache.org/docs-2.1/</a> pour la derni&#232;re version de ce
- manuel, ainsi qu'une r&#233;f&#233;rence compl&#232;te de toutes les
- <a href="mod/directives.html">directives de configuration</a>.</p>
-</section>
-
-<section id="test"><title>Tester</title>
-
- <p>Une fois configur&#233;, le serveur HTTP Apache peut &#234;tre
- <a href="invoking.html">d&#233;marr&#233;</a> en tapant:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl start</example>
-
- <p>Vous devriez alors pouvoir tester l'URL <code>http://localhost/</code>.
- La page affich&#233;e se trouve dans le r&#233;pertoire
- <directive module="core">DocumentRoot</directive>, habituellement configur&#233;
- en tant que <code><em>PREFIX</em>/htdocs/</code>.
- Le serveur peut &#234;tre <a href="stopping.html">arr&#234;t&#233;</a> en tapant:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl stop</example>
-</section>
-
-<section id="upgrading"><title>Mise &#224; niveau</title>
-
- <p>La premi&#232;re &#233;tape pour une mise &#224; niveau est de lire
- l'annonce de la nouvelle version et le fichier <code>CHANGES</code>
- dans la distribution afin de trouver tous les changements qui
- peuvent affecter votre site. Si la mise &#224; jour est effectu&#233;e
- entre deux versions principales (par exemple, de 1.3 &#224; 2.0 ou
- de 2.0 &#224; 2.2), attendez-vous &#224; des diff&#233;rences majeures
- au moment de la compilation et de l'ex&#233;cution, exigeant probablement
- des ajustements manuels. Tous les modules devront &#233;galement
- &#234;tre mis &#224; niveau pour tenir compte des changements de l'API.</p>
-
- <p>La mise &#224; niveau d'une version mineure &#224; une plus r&#233;cente
- (par exemple, de 2.0.55 &#224; 2.0.57) est plus facile. Le processus
- <code>make install</code> n'&#233;crasera aucun de vos documents,
- fichiers journaux, ou fichiers de configuration existants.
- En outre, les d&#233;veloppeurs font tous les efforts possibles
- pour &#233;viter les changements incompatibles des options
- <code>configure</code>, de la configuration d'ex&#233;cution,
- ou de l'API entre les versions mineures. Dans la plupart
- des cas vous devriez pouvoir employer une ligne de commande
- <code>configure</code> et un fichier de configuration
- identiques. De plus, tous vos modules devraient continuer &#224; fonctionner.
- (Ceci ne vaut que pour les versions post&#233;rieures &#224; 2.0.41;
- les versions ant&#233;rieures ont des changements incompatibles.)</p>
-
- <p>Si vous avez gard&#233; l'arborescence source de votre derni&#232;re
- installation, la mise &#224; niveau est encore plus facile.
- Le dossier <code>config.nice</code> dans la racine de l'ancienne
- arborescence contient la ligne de commande <code>configure</code>
- exacte que vous avez utilis&#233;e pour configurer l'arborescence des
- sources. Pour faire la mise &#224; niveau d'une version &#224; la suivante,
- vous devez copier le dossier <code>config.nice</code> dans
- l'arborescence des sources de la nouvelle version, l'&#233;diter
- pour faire les changements d&#233;sir&#233;s, puis ex&#233;cuter:</p>
-
- <example>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </example>
-
- <note type="warning">Vous devriez toujours essayer une
- nouvelle version dans un environnement de test avant de la
- mettre dans un environnement de production. Par exemple, vous pouvez
- installer et ex&#233;cuter la nouvelle version c&#244;te &#224; c&#244;te avec l'ancienne
- en employant un <code>--prefix</code> et un port diff&#233;rents
- (ce qui est possible en ajustant la directive <directive module="mpm_common">Listen</directive>)
- dans le but de tester toutes les incompatibilit&#233;s possibles avant de
- faire la mise &#224; niveau finale.</note>
-</section>
-</manualpage>
diff --git a/docs/manual/install.xml.ja b/docs/manual/install.xml.ja
deleted file mode 100644
index 712c9c1f26..0000000000
--- a/docs/manual/install.xml.ja
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.30 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="install.xml.meta">
-
- <title>$B%3%s%Q%$%k$H%$%s%9%H!<%k(B</title>
-
-<summary>
-
- <p>$B$3$NJ8=q$G07$&HO0O$O!"(BUnix $B$d(B Unix $B$KN`;w$7$?%7%9%F%`$G$N(B
- Apache $B$N%3%s%Q%$%k$H%$%s%9%H!<%k$G$9!#(B Windows $B$K$*$1$k(B
- $B%3%s%Q%$%k$H%$%s%9%H!<%k$K4X$7$F$O!V(B<a
- href="platform/windows.html">Microsoft
- Windows $B$G(B Apache $B$r;H$&(B</a>$B!W$r$4Mw2<$5$$!#(B
- $B$=$NB>$N%W%i%C%H%[!<%`$K4X$7$F$O!V(B<a
- href="platform/">$B%W%i%C%H%[!<%`(B</a>$B!W$r$4Mw2<$5$$!#(B</p>
-
- <p> Apache 2.0 $B$N@_Dj$H%$%s%9%H!<%k$N4D6-$O!"(BApache 1.3 $B$H$O(B
- $B40A4$K0[$J$k$b$N$K$J$j$^$7$?!#4JC1$K%$%s%9%H!<%k$G$-$k$h$&$K!"(B
- Apache 1.3 $B$G$OFC@=%9%/%j%W%H$r;H$C$F$$$^$7$?!#(B
- Apache 2.0 $B$G$OB>$N(B Open Source $B%W%m%8%'%/%H$HF1MM$N4D6-$K(B
- $B$9$k$?$a$K(B <code>libtool</code> $B$H(B <code>autoconf</code>
- $B$r;H$&$h$&$K$J$C$F$$$^$9!#(B</p>
-
- <p>$B%^%$%J!<%P!<%8%g%s$+$i$=$N<!$N%P!<%8%g%s$K%"%C%W%0%l!<%I$9$k(B
- (2.0.50 $B$+$i(B 2.0.51 $B$XEy(B) $B>l9g$O!"$^$:(B <a href="#upgrading">
- $B%"%C%W%0%l!<%I(B</a>$B$r$4Mw2<$5$$!#(B</p>
-
-</summary>
-
-<seealso><a href="programs/configure.html">$B%=!<%9%D%j!<$N@_Dj(B</a></seealso>
-<seealso><a href="invoking.html">Apache$B$N5/F0(B</a></seealso>
-<seealso><a href="stopping.html">Apache$B$NDd;_$H:F5/F0(B</a></seealso>
-
-<section id="overview"><title>$B35MW(B ($B$;$C$+$A$J?M8~$1(B)</title>
-
- <table>
- <columnspec><column width=".13"/><column width=".80"/></columnspec>
- <tr>
- <td><a href="#download">$B%@%&%s%m!<%I(B</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">$BE83+(B</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">$B@_Dj(B</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">$B%3%s%Q%$%k(B</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">$B%$%s%9%H!<%k(B</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">$B%+%9%?%^%$%:(B</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">$B%F%9%H(B</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em> $B$O:G?7$N%^%$%J!<%P!<%8%g%s%J%s%P!<$K!"(B
- <em>PREFIX</em> $B$O%$%s%9%H!<%k$9$k%5!<%P$G$N%U%!%$%k%7%9%F%`$N%Q%9$K!"(B
- $BCV$-49$($F$/$@$5$$!#(B<em>PREFIX</em> $B$r;XDj$7$J$+$C$?>l9g$O!"(B
- $B%G%U%)%k%H$N(B <code>/usr/local/apache2</code> $B$K$J$j$^$9!#(B</p>
-
- <p>Apache HTTPD $B$N%3%s%Q%$%k$H%$%s%9%H!<%k$KI,MW$J$b$N$r$O$8$a$H$7$F!"(B
- $BJT=8$H%$%s%9%H!<%k%W%m%;%9$G$N$=$l$>$l$N9`$O(B
- $B<!$K>\$7$/5-=R$5$l$F$$$^$9!#(B</p>
-</section>
-
-<section id="requirements"><title>$BI,MW$J$b$N(B</title>
-
- <p>Apache $B$N%S%k%I$K$O<!$N$b$N$,I,MW$G$9(B:</p>
-
- <dl>
- <dt>$B%G%#%9%/%9%Z!<%9(B</dt>
- <dd>$B%G%#%9%/$K>/$J$/$H$b(B 50 MB $B$N0l;~E*$J6u$-MFNL$,$"$k$h$&$K(B
- $B5$$rIU$1$F$/$@$5$$!#%$%s%9%H!<%k8e$O(B Apache $B$O(B 10 MB $BDxEY$N(B
- $B%G%#%9%/%9%Z!<%9$r@j$a$^$9!#<B:]$KI,MW$K$J$k%G%#%9%/%9%Z!<%9$O!"(B
- $B@_Dj%*%W%7%g%s$d%5!<%I%Q!<%F%#!<@=%b%8%e!<%k$r$I$&A*Br$9$k$+$K$h$C$F(B
- $BBg$-$/JQ$o$k$G$7$g$&!#(B</dd>
-
- <dt>ANSI-C $B%3%s%Q%$%i$H%S%k%I%7%9%F%`(B</dt>
- <dd>ANSI-C $B%3%s%Q%$%i$r%$%s%9%H!<%k$7$F$*$$$F2<$5$$!#$*A&$a$O(B <a
- href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
- $B$K$h$k(B <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- compiler (GCC)</a> $B$G$9(B ($B%P!<%8%g%s(B 2.7.2 $B$GBg>fIW$G$9(B)$B!#(BGCC $B$,$J$$>l9g$O!"(B
- $B>/$J$/$H$bDs6!$5$l$F$$$k%3%s%Q%$%i$,(B ANSI $B=`5r$G$"$k$3$H$r3NG'$7$F$*$$$F2<$5$$!#(B
- $B$=$l$+$i!"JQ?t(B <code>PATH</code> $B$K$O(B <code>make</code>
- $B$H$$$C$?4pK\E*$J%S%k%I%D!<%k$,4^$^$l$F$$$kI,MW$,$"$j$^$9!#(B</dd>
-
- <dt>$B;~9o$r@53N$K$9$k(B</dt>
- <dd>HTTP $B%W%m%H%3%k$NMWAG$OF|;~$N;~9o$GI=8=$5$l$F$$$^$9!#$G$9$+$i!"(B
- $B@53N$J;~9o$K%7%s%/%m$5$;$k5!G=$r%7%9%F%`$K@_Dj$9$k$3$H$r6cL#$7$F$_$F2<$5$$!#(B
- Network Time Protocol (NTP) $B$r%Y!<%9$H$7$?(B ntpdate $B$d(B xntpd $B%W%m%0%i%`$,(B
- $B$3$NL\E*$K$h$/MQ$$$i$l$^$9!#(BNTP $B%=%U%H%&%'%"$d8x3+(B NTP
- $B%5!<%P$K4X$9$k>\:Y$O!"(BUsenet $B%K%e!<%9%0%k!<%W(B <a
- href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a> $B$d(B <a
- href="http://www.ntp.org">NTP $B%[!<%`%Z!<%8(B</a> $B$r$4Mw2<$5$$!#(B</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [$B%*%W%7%g%s(B]</dt>
- <dd>$BDs6!$5$l$F$$$k%9%/%j%W%H4v$D$+!"Nc$($P(B <a
- href="programs/apxs.html">apxs</a> $B$d(B <a
- href="programs/dbmmanage.html">dbmmanage</a> $B$O(B
- Perl $B$G=q$+$l$F$$$k$N$G!"(BPerl
- 5 $B%$%s%?%W%j%?$,I,MW$K$J$j$^$9(B (5.003 $B0J9_(B)$B!#(B
- "configure"$B%9%/%j%W%H$G$3$N$h$&$J%$%s%?%W%j%?$,8+$D$+$i$J$/$F$b!"(B
- $BJL$KIT6q9g$O$"$j$^$;$s!#$b$A$m$s!"(BApache
- 2.0 $B$N%3%s%Q%$%k$H%$%s%9%H!<%k$O$G$-$^$9!#(B
- $B$3$l$i$N%5%]!<%H%9%/%j%W%H$,;H$($J$/$J$k$@$1$G$9!#(B
- Perl $B%$%s%?%W%j%?$rJ#?t%$%s%9%H!<%k$7$F$$$k>l9g(B ($B%Y%s%@!<$N(B Perl
- 4 $B$H<+J,$GF~$l$?(B Perl 5 $B$,$"$k>l9g$J$I(B) $B$O!"(B
- --with-perl $B%*%W%7%g%s(B ($B2<5-;2>H(B) $B$r;H$C$F(B ./configure
- $B$,E,@Z$J$b$N$r3N<B$KA*$V$h$&$K$9$k$HNI$$$G$7$g$&!#(B</dd>
- </dl>
-</section>
-
-<section id="download"><title>$B%@%&%s%m!<%I(B</title>
-
- <p>Apache $B$O(B <a
- href="http://httpd.apache.org/download.cgi">Apache HTTP
- $B%5!<%P%@%&%s%m!<%I%5%$%H(B</a>$B$+$i%@%&%s%m!<%I$G$-$^$9$7!"(B
- $BF1$8>l=j$K4v$D$+$N%_%i!<%5%$%H$b%j%9%H$7$F$$$^$9!#(B
- UNIX $B$KN`;w$9$k%7%9%F%`$G(B Apache $B$r;H$&%f!<%6$O!"%=!<%9$r(B
- $B%@%&%s%m!<%I$7$F%S%k%I$7$?$[$&$,NI$$$G$7$g$&!#(B
- $B%S%k%I$N<j=g!J2<5-!K$O4JC1$G$9$7!"$=$N$*$+$2$G%K!<%:$K(B
- $B8+9g$C$?%+%9%?%^%$%:$r4JC1$K$G$-$^$9!#(B
- $B$5$i$K!"%P%$%J%j$N%j%j!<%9$O%=!<%9%j%j!<%9$h$j$b(B
- $BCY$l$F$$$k$3$H$,$h$/$"$j$^$9!#(B
- $B$=$l$G$b%P%$%J%j$r%@%&%s%m!<%I$7$?$N$G$"$l$P!"(B
- $B%G%#%9%H%j%S%e!<%7%g%s$NCf$K$"$k(B <code>INSSTALL.bindist</code>
- $B%U%!%$%k$N@bL@$K=>$C$F$/$@$5$$!#(B</p>
-
- <p>$B%@%&%s%m!<%I8e!"%@%&%s%m!<%I$7$?$b$N$,(B Apache HTTP
- $B%5!<%P$N40A4$G2~cb$5$l$F$$$J$$%P!<%8%g%s$G$"$k$3$H$r(B
- $B8!>Z$9$k$3$H$,=EMW$G$9!#$3$l$O%@%&%s%m!<%I$7$?(B tarball $B$N(B PGP $B=pL>$r(B
- $B%F%9%H$9$k$3$H$K$h$C$F8!>Z$7$^$9!#(B
- $B$3$N<j=g$N>\:Y$O(B <a
- href="http://httpd.apache.org/download.cgi#verify">$B%@%&%s%m!<%I(B
- $B%Z!<%8(B</a> $B$K$"$j!"$5$i$K>\$7$$Nc$O(B <a
- href="http://httpd.apache.org/dev/verification.html">PGP $B$N;HMQ(B
- </a> $B$K5-:\$5$l$F$$$^$9!#(B</p>
-
-</section>
-
-<section id="extract"><title>$BE83+(B</title>
-
- <p>Apache HTTPD $B$N(B tarball
- $B$+$i%=!<%9%U%!%$%k$rE83+$7$F<h$j=P$9$H$O!"(B
- $BC1$J$k05=L$N2r=|$H(B tar $B$NE83+$G$9(B:</p>
-
-<example>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</example>
-
- <p>$BG[I[MQ$N%=!<%9%3!<%I$,$"$k8=:_$$$k%G%#%l%/%H%j$N2<$K!"(B
- $B?7$7$$%G%#%l%/%H%j$,:n$i$l$^$9!#(B
- $B%5!<%P$r%3%s%Q%$%k$9$kCJ3,$K?J$`A0$K!"$=$N%G%#%l%/%H%j$K(B
- <code>cd</code> $B$G0\F0$7$F$/$@$5$$!#(B</p>
-</section>
-
-<section id="configure"><title>$B%=!<%9%D%j!<$r@_Dj$9$k(B</title>
-
- <p>$B<!$N%9%F%C%W$O!"$"$J$?$N%W%i%C%H%[!<%`$H(B
- $B8D?ME*$JMW5a$K9g$&$h$&$K(B Apache
- $B%=!<%9%D%j!<$r@_Dj$9$k$3$H$G$9!#(B
- $B$3$l$OG[I[%G%#%l%/%H%j$N%k!<%H%G%#%l%/%H%j$K$"$k!"(B
- <code><a href="programs/configure.html">configure</a></code>
- $B%9%/%j%W%H$G9T$J$$$^$9!#(B
- (Apache $B%=!<%9%D%j!<$N(B CVS
- $BHG$r%@%&%s%m!<%I$7$?3+H/<T$O!"<!$N%9%F%C%W$K?J$`A0$K(B
- <code>autoconf</code> $B$H(B<code>libtool</code>
- $B$r%$%s%9%H!<%k$7$F(B <code>buildconf</code>
- $B$r<B9T$9$kI,MW$,$"$k$G$7$g$&!#(B
- $B8x<0%j%j!<%9$G$O$3$N:n6H$OI,MW$"$j$^$;$s!#(B) </p>
-
- <p>$B%G%U%)%k%H%*%W%7%g%s$r;H$C$F%=!<%9%D%j!<$rA4$F@_Dj$9$k(B
- $B$N$G$"$l$P!"C1=c$K(B <code>./configure</code> $B$H%?%$%W$7$F$/$@$5$$!#(B
- $B%G%U%)%k%H%*%W%7%g%s$rJQ99$G$-$k$h$&$K!"(B<code>configure</code>
- $B$K$OMM!9$JJQ?t$d%3%^%s%I%i%$%s%*%W%7%g%s$,MQ0U$5$l$F$$$^$9!#(B</p>
-
- <p>$B:G$b=EMW$J%*%W%7%g%s$O!"(BApache $B$,$3$N8e$G%$%s%9%H!<%k$5$l$k0LCV(B
- <code>--prefix</code> $B$G$9!#(BApache $B$O!"$3$N%$%s%9%H!<%k0LCV$K(B
- $B$*$$$F@5>o$KF0:n$9$k$h$&$K@_Dj$7$J$1$l$P$J$i$J$$$+$i$G$9!#(B
- $B$5$i$K>\:Y$J%U%!%$%k0LCV$N@)8f$ODI2C$N(B <a
- href="programs/configure.html#installationdirectories">$B@_Dj%*%W%7%g%s(B
- </a> $B$G$G$-$^$9!#(B</p>
-
- <p>$B$3$N;~E@$G!"(B<a href="mod/">$B%b%8%e!<%k(B</a> $B$rM-8z$K$7$?$j(B
- $BL58z$K$7$?$j$9$k$3$H$G(B Apache $BK\BN$K4^$^$l$k(B <a
- href="programs/configure.html#optionalfeatures">$B5!G=(B</a>
- $B$r;XDj$G$-$^$9!#(BApache $BK\BN$K$O%G%U%)%k%H$G!"%b%8%e!<%k$N(B <a
- href="mod/module-dict.html#Status">Base</a> $B%;%C%H$,(B
- $B4^$^$l$^$9!#$=$NB>$N%b%8%e!<%k$O(B
- <code>--enable-<var>module</var></code> $B%*%W%7%g%s$G(B
- $BM-8z$K$J$j$^$9!#$3$3$G(B <var>module</var> $B$O%b%8%e!<%k$NL>A0$G!"(B
- $B$D$^$j$=$l$O%b%8%e!<%k$NL>A0$+$i(B <code>mod_</code> $BJ8;zNs$r<h$j=|$$$?8e$K(B
- $B%"%s%@!<%9%3%"$r%@%C%7%e$GCV49$7$?J8;zNs$G$9!#(B
- $B$3$l$H$OJL$NJ}K!$G(B <code>--enable-<var>module</var>=shared</code>
- $B%*%W%7%g%s$r;H$C$F!"%b%8%e!<%k$r(B<a href="dso.html">
- $B%7%'%"!<%I%*%V%8%'%/%H(B (DSO)</a> -- $B<B9T;~$K%m!<%I$7$?$j(B
- $B%"%s%m!<%I$7$?$j$G$-$k7A<0(B -- $B$H$7$F%3%s%Q%$%k$9$k$3$H$b$G$-$^$9!#(B
- $BF1MM$K!"(B<code>--disable-<var>module</var></code> $B%*%W%7%g%s$G(B
- Base $B%b%8%e!<%k$rL58z2=$9$k$3$H$b$G$-$^$9!#(B
- $B$3$l$i$N%*%W%7%g%s$r;H$C$F$$$k$H$-$K!"$b$7;XDj$7$?%b%8%e!<%k$,B8:_$7$J$/$F$b(B
- <code>configure</code> $B$O7Y9p$r>e$2$k$3$H$J$/!"C1=c$K%*%W%7%g%s$r(B
- $BL5;k$9$k$3$H$K5$$r$D$1$F$/$@$5$$!#(B</p>
-
- <p>$B>e5-$K2C$($F!"(B<code>configure</code> $B%9%/%j%W%H$K!"(B
- $B%3%s%Q%$%i!"%i%$%V%i%j!"%X%C%@%U%!%$%k$N0LCV$rDI2C>pJs$H$7$FEO$9(B
- $BI,MW$,$"$k>l9g$,$"$j$^$9!#$3$N$h$&$J>l9g$K$O!"4D6-JQ?t$"$k$$$O(B
- $B%3%^%s%I%i%$%s%*%W%7%g%s$G(B <code>configure</code> $B$KEO$7$^$9!#(B
- $B>\:Y$K4X$7$F$O(B <a
- href="programs/configure.html">configure $B%^%K%e%"%k%Z!<%8(B</a>
- $B$r$4Mw$/$@$5$$!#(B</p>
-
- <p>$B$A$g$C$H$I$s$J$3$H$,$G$-$k$+$r8+$;$^$7$g$&!#(B
- $B$3$3$GE57?E*$JNc$H$7$F!"(B<code>/sw/pkg/apache</code>
- $B$H$$$&%$%s%9%H!<%k%D%j!<$G%3%s%Q%$%i$H%U%i%0$r;XDj$7$F!"(B
- $B$5$i$KFs$D$NDI2C%b%8%e!<%k(B <module>mod_rewrite</module> $B$H(B
- <module>mod_speling</module> $B$r8e$G(B DSO
- $B%a%+%K%:%`$G%m!<%I$9$k$h$&$K%3%s%Q%$%k$7$F$_$^$9(B:</p>
-
-<example>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</example>
-
- <p><code>configure</code> $B$r<B9T$7$?$i!"%7%9%F%`$N5!G=$r(B
- $B%F%9%H$7$?$j!"8e$G%5!<%P$r%3%s%Q%$%k$9$k$?$a$KI,MW$J(B Makefile
- $B$r@8@.$7$?$j$9$k$N$K?tJ,4V$+$+$k$G$7$g$&!#(B</p>
-
- <p>$B8D!9$N(B <code>configure</code> $B%*%W%7%g%s$N>\:Y$K4X$7$F$O(B
- <a href="programs/configure.html">configure $B%^%K%e%"%k%Z!<%8(B</a>
- $B$r$4Mw$/$@$5$$!#(B</p>
-</section>
-
-<section id="compile"><title>$B%S%k%I(B</title>
-
- <p>$B$3$l$G(B Apache $B$NMM!9$J%Q!<%D$r%S%k%I$9$k$3$H$,$G$-$^$9!#(B
- $B<!$N%3%^%s%I$rC1=c$K<B9T$9$k$@$1$G$9(B:</p>
-
-<example>$ make</example>
-
- <p>$B4pK\E*$J@_Dj$r$9$k$N$K!"(BPentium III/Linux 2.2
- $B$N%7%9%F%`$G$*$*$h$=(B 3 $BJ,DxEY$+$+$j$^$9$,!"(B
- $B$"$i$+$8$a$4N;>52<$5$$!#(B
- $B$^$?!";~4V$O%O!<%I%&%'%"$dM-8z$K$7$?%b%8%e!<%k$N?t$K(B
- $BBg$-$/0MB8$9$k$G$7$g$&!#(B</p>
-</section>
-
-<section id="install"><title>$B%$%s%9%H!<%k(B</title>
-
- <p>$B$5$F!"@_Dj$7$?%$%s%9%H!<%k(B <em>PREFIX</em>
- ($BA0=R$N(B <code>--prefix</code> $B%*%W%7%g%s$r;2>H(B)
- $B0J2<$K%Q%C%1!<%8$r%$%s%9%H!<%k$9$kCJ3,$K$J$j$^$7$?!#(B
- $B<!$N%3%^%s%I$r<B9T$7$F$/$@$5$$(B:</p>
-
-<example>$ make install</example>
-
- <p>$B%"%C%W%0%l!<%I$9$k>l9g$O!"%$%s%9%H!<%k$G$O@_Dj%U%!%$%k$d(B
- $B%I%-%e%a%s%H%U%!%$%k$N>e=q$-$O9T$$$^$;$s!#(B</p>
-</section>
-
-<section id="customize"><title>$B%+%9%?%^%$%:(B</title>
-
- <p>$B<!$K(B <code><em>PREFIX</em>/conf/</code> $B0J2<$K$"$k(B <a
- href="configuring.html">$B@_Dj%U%!%$%k(B</a>$B$rJT=8$7$F!"(B
- Apache HTTP $B%5!<%P$r%+%9%?%^%$%:$7$^$9!#(B</p>
-
-<example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
-
- <p><a href="./">docs/manual/</a> $B$N(B Apache $B%^%K%e%"%k$r$6$C$H8+$F$/$@$5$$!#(B
- $B$^$?$O!"(B<a
- href="http://httpd.apache.org/docs-2.1/">http://httpd.apache.org/docs-2.1/</a>
- $B$K$"$k%^%K%e%"%k:G?7HG!"(B<a
- href="mod/directives.html">$B@_Dj%G%#%l%/%F%#%V(B</a>$B$KEv$?$C$F$_$F$/$@$5$$!#(B</p>
-</section>
-
-<section id="test"><title>$B%F%9%H(B</title>
-
- <p>$B<!$N%3%^%s%I$r<B9T$7$F(B Apache HTTP $B%5!<%P$r(B<a
- href="invoking.html">$B3+;O(B</a>$B$G$-$^$9(B:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl start</example>
-
- <p>URL <code>http://localhost/</code> $B$rDL$7$F:G=i$N%I%-%e%a%s%H$KBP$9$k(B
- $B%j%/%(%9%H$rH/9T$9$k;v$,$G$-$k$O$:$G$9!#$3$l$G8+$($k(B
- $B%&%'%V%Z!<%8$O(B <directive module="core">DocumentRoot</directive>
- $B0J2<$KCV$+$l$?$b$N$G!"DL>o$O(B
- <code><em>PREFIX</em>/htdocs/</code> $B$G$7$g$&!#(B
- $B%5!<%P$r:F$S(B<a href="stopping.html">$BDd;_(B</a>$B$9$k$K$O!"(B
- $B<!$N%3%^%s%I$r<B9T$7$^$9(B:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl stop</example>
-</section>
-<section id="upgrading"><title>$B%"%C%W%0%l!<%I(B</title>
-
- <p>$B%"%C%W%0%l!<%I$G$^$:9T$J$&$Y$-$3$H$O!"%j%j!<%9%"%J%&%s%9$H(B
- $B%=!<%9%G%#%9%H%j%S%e!<%7%g%s$KF~$C$F$$$k(B <code>CHANGES</code> $B$rFI$s$G!"(B
- $B<+?H$N%5%$%H$KBP$7$F1F6A$r5Z$\$9JQ99E@$rC5$9$3$H$G$9!#(B
- $B%a%8%c!<%j%j!<%94V$NJQ99$r$9$k>l9g(B ($BNc$($P(B 1.3 $B$+$i(B 2.0 $B$X!"(B2.0 $B$+$i(B 2.2 $B$X(B)
- $B$O!"%3%s%Q%$%k;~$d<B9T;~$N@_Dj$KBg$-$J:90[$,$"$k$G$7$g$&$+$i!"(B
- $B<jF0$ND4@0$,I,MW$K$J$k$G$7$g$&!#%b%8%e!<%k$bA4$F!"(BAPI
- $B$NJQ99$K9g$o$;$k$?$a$K%"%C%W%0%l!<%I$,I,MW$K$J$k$G$7$g$&!#(B</p>
-
- <p>$B%^%$%J!<%P!<%8%g%s$+$i<!$N%P!<%8%g%s$K%"%C%W%0%l!<%I$9$k>l9g(B
- ($BNc$($P(B 2.0.55 $B$+$i(B 2.0.57 $B$X(B) $B$O!"$b$C$H4JC1$G$9!#(B
- <code>make install</code> $B$r<B9T$7$F$b:#$"$k%I%-%e%a%s%H!"(B
- $B%m%0%U%!%$%k!"@_Dj%U%!%$%k$O>e=q$-$5$l$^$;$s!#(B
- $B$5$i$K!"%^%$%J!<%P!<%8%g%s4V$G$O(B <code>configure</code> $B%*%W%7%g%s!"(B
- $B<B9T;~$N@_Dj!"%b%8%e!<%k(B API $B$KIT@09g$,5/$3$i$J$$$h$&$K!"(B
- $B3+H/<T$O:GBg8B$NEXNO$r$7$F$$$^$9!#(B
- $BBgDq$N>l9g!"F10l$N(B <code>configure</code> $B%3%^%s%I%i%$%s!"(B
- $BF10l$N@_Dj%U%!%$%k!"%b%8%e!<%kA4$F$,@5>o$KF0:n$9$k$O$:$G$9!#(B
- (2.0.41 $B0J9_$G$O$=$N$h$&$K$J$C$F$$$^$9!#$=$l0JA0$N%P!<%8%g%s$K$O(B
- $BIT@09g$,B8:_$7$^$9!#(B)</p>
-
- <p>$BA02s$N%$%s%9%H!<%k;~$N%=!<%9%D%j!<$,;D$5$l$F$$$k$N$G$"$l$P!"(B
- $B%"%C%W%0%l!<%I$O$5$i$K4JC1$G$9!#8E$$%=!<%9%D%j!<$N%k!<%H$KB8:_$9$k(B
- <code>config.nice</code> $B%U%!%$%k$K$O!"A02s%=!<%9%D%j!<$r@_Dj$7$?;~$N(B
- <code>configure</code> $B%3%^%s%I%i%$%s$,F~$C$F$$$^$9!#(B
- $B<!$N%P!<%8%g%s$K%"%C%W%0%l!<%I$9$k>l9g$O!"(B<code>config.nice</code>
- $B%U%!%$%k$r?7$7$$%P!<%8%g%s$N%=!<%9%D%j!<$K%3%T!<$7!"(B
- $B$=$l$rJT=8$7I,MW$JJQ99$r9T$J$C$F!"<!$N$h$&$K<B9T$7$^$9!#(B</p>
-
- <example>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </example>
-
- <note type="warning">$B?7$7$$%P!<%8%g%s$r;HMQ$9$k>l9g$O!"(B
- $B<B:]$K1?MQ$r;O$a$kA0$K!"I,$:<+J,MQ$N4D6-$G%F%9%H$9$Y$-$G$9!#(B
- $B:G=*E*$K%"%C%W%0%l!<%I$9$kA0$K!"Hs8_49@-$,$J$$$+$r%F%9%H$9$k$?$a$K!"(B
- $BNc$($P!"0[$J$k(B <code>--prefix</code> $B$H0[$J$k%]!<%H(B (<directive
- module="mpm_common">Listen</directive> $B%G%#%l%/%F%#%V$G@_Dj$7$^$9(B)
- $B$r;HMQ$9$k$3$H$G!"8E$$%P!<%8%g%s$K1F6A$rM?$($:$K?7$7$$%P!<%8%g%s$r(B
- $B%$%s%9%H!<%k$7!"<B9T$G$-$^$9!#(B</note>
-</section>
-</manualpage>
diff --git a/docs/manual/install.xml.ko b/docs/manual/install.xml.ko
deleted file mode 100644
index fb1cdce49d..0000000000
--- a/docs/manual/install.xml.ko
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.30 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="install.xml.meta">
-
- <title>ÄÄÆÄÀÏ°ú ¼³Ä¡</title>
-
-<summary>
-
- <p>ÀÌ ¹®¼­´Â À¯´Ð½º¿Í À¯´Ð½º·ù ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ°í
- ¼³Ä¡ÇÏ´Â °Í¸¸À» ´Ù·é´Ù. À©µµ¿ìÁî¿¡¼­ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â ¹æ¹ýÀº
- <a href="platform/windows.html">¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ìÁî¿¡¼­
- ¾ÆÆÄÄ¡ »ç¿ë</a>À» Âü°íÇ϶ó. ´Ù¸¥ Ç÷¡Æû¿¡ ´ëÇؼ­´Â <a
- href="platform/">Ç÷¡Æû</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- <p>¾ÆÆÄÄ¡ 2.0ÀÇ ±¸¼º°ú ¼³Ä¡ ȯ°æÀº 1.3°ú ¸Å¿ì ´Ù¸£´Ù.
- ¾ÆÆÄÄ¡ 1.3Àº ½¬¿î ¼³Ä¡¸¦ À§ÇØ ÀÚü ½ºÅ©¸³Æ®¸¦ »ç¿ëÇß´Ù.
- ¾ÆÆÄÄ¡ 2.0Àº ÀÌÁ¦ ´Ù¸¥ ¿©·¯ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿Í ºñ½ÁÇÑ È¯°æÀ»
- ¸¸µé±âÀ§ÇØ <code>libtool</code>°ú <code>autoconf</code>¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>¸¸¾à ÀÛÀº ¹öÀüÀ» ÇÑ´Ü°è ¾÷±×·¹À̵åÇÑ´Ù¸é (¿¹¸¦ µé¾î,
- 2.0.50¿¡¼­ 2.0.51), <a href="#upgrading">¾÷±×·¹À̵å</a>
- ÀåÀ¸·Î ¹Ù·Î °¡±æ ¹Ù¶õ´Ù.</p>
-
-</summary>
-
-<seealso><a href="programs/configure.html">¼Ò½º Æ®¸® ±¸¼º</a></seealso>
-<seealso><a href="invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></seealso>
-<seealso><a href="stopping.html">¾ÆÆÄÄ¡ Áß´Ü°ú Àç½ÃÀÛ</a></seealso>
-
-<section id="overview"><title>¼º¹Ì ±ÞÇÑ »ç¶÷À» À§ÇÑ °³¿ä</title>
-
- <table>
- <columnspec><column width=".13"/><column width=".80"/></columnspec>
- <tr>
- <td><a href="#download">´Ù¿î·Îµå</a></td>
-
- <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#extract">¾ÐÃà Ç®±â</a></td>
-
- <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
- $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
- </tr>
-
- <tr>
- <td><a href="#configure">±¸¼º</a></td>
-
- <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
- </td>
- </tr>
-
- <tr>
- <td><a href="#compile">ÄÄÆÄÀÏ</a></td>
-
- <td><code>$ make</code> </td>
- </tr>
-
- <tr>
- <td><a href="#install">¼³Ä¡</a></td>
-
- <td><code>$ make install</code> </td>
- </tr>
-
- <tr>
- <td><a href="#customize">¼³Á¤</a></td>
-
- <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
- </tr>
-
- <tr>
- <td><a href="#test">°Ë»ç</a></td>
-
- <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
- </td>
- </tr>
- </table>
-
- <p><em>NN</em>Àº ÇöÀç ÀÛÀº ¹öÀü ¼ýÀÚ·Î, <em>PREFIX</em>´Â
- ¼­¹ö°¡ ¼³Ä¡µÉ ÆÄÀϽýºÅÛ °æ·Î·Î ´ëüÇØ¾ß ÇÑ´Ù. <em>PREFIX</em>¸¦
- ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ±âº»°ªÀ¸·Î <code>/usr/local/apache2</code>¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>¾Æ·¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇϱâÀ§ÇÑ ¿ä±¸»çÇ׺ÎÅÍ
- ÄÄÆÄÀÏ°ú ¼³Ä¡ °úÁ¤À» °¢°¢ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.</p>
-</section>
-
-<section id="requirements"><title>¿ä±¸»çÇ×</title>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϱâÀ§ÇØ ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÇÊ¿äÇÏ´Ù:</p>
-
- <dl>
- <dt>µð½ºÅ© °ø°£</dt>
- <dd>µð½ºÅ© ¿©À¯°ø°£ÀÌ ÃÖ¼Ò 50 MB ÀÌ»óÀÎÁö È®ÀÎÇ϶ó.
- ¼³Ä¡ÈÄ ¾ÆÆÄÄ¡´Â ¾à 10 MBÀÇ µð½ºÅ© °ø°£À» Â÷ÁöÇÑ´Ù.
- ½ÇÁ¦ ÇÊ¿äÇÑ µð½ºÅ© °ø°£Àº ¼±ÅÃÇÑ ±¸¼º ¿É¼Ç°ú Ãß°¡ ¸ðµâ¿¡
- µû¶ó »ó´çÈ÷ Â÷ÀÌ°¡ ³­´Ù.</dd>
-
- <dt>ANSI-C ÄÄÆÄÀÏ·¯¿Í ÄÄÆÄÀÏ ½Ã½ºÅÛ</dt>
- <dd>ANSI-C ÄÄÆÄÀÏ·¯°¡ ¼³Ä¡µÇÀÖ´ÂÁö È®ÀÎÇ϶ó. <a
- href="http://www.gnu.org/">Free Software Foundation (FSF)</a>ÀÇ
- <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
- compiler (GCC)</a>¸¦ ÃßõÇÑ´Ù. (¹öÀü 2.7.2¸é µÈ´Ù.) GCC°¡
- ¾ø´Ù¸é ÃÖ¼ÒÇÑ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯°¡ ANSI ȣȯÀÎÁö È®ÀÎÇ϶ó.
- Ãß°¡·Î <code>PATH</code> ȯ°æº¯¼ö´Â <code>make</code>¿Í
- °°Àº ±âº»ÀûÀÎ ÄÄÆÄÀÏ µµ±¸¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt>Á¤È®ÇÑ ½Ã°£</dt>
- <dd>HTTP ÇÁ·ÎÅäÄÝ¿¡´Â ÇÏ·çÁß ½Ã°£À» Ç¥ÇöÇÏ´Â ºÎºÐÀÌ ÀÖ´Ù. ±×·¡¼­
- ÀÌÁ¦ ½Ã½ºÅÛÀÇ ½Ã°£ µ¿±âÈ­ ±â´ÉÀ» »ìÆ캼 ½Ã°£ÀÌ´Ù. º¸Åë
- À̸¦ À§ÇØ Network Time Protocol (NTP)¿¡ ±â¹ÝÇÑ
- <code>ntpdate</code>³ª <code>xntpd</code>¸¦ »ç¿ëÇÑ´Ù.
- NTP ¼ÒÇÁÆ®¿þ¾î¿Í °ø°³ ½Ã°£ ¼­¹ö¿¡ ´ëÇÑ Á¤º¸´Â ´º½º±×·ì
- <a href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>¿Í
- <a href="http://www.ntp.org">NTP ȨÆäÀÌÁö</a>¸¦
- Âü°íÇ϶ó.</dd>
-
- <dt><a href="http://www.perl.org/">Perl 5</a>
- [¼±ÅûçÇ×]</dt>
- <dd>(Perl·Î ¾²¿©Áø) <a href="programs/apxs.html">apxs</a>³ª
- <a href="programs/dbmmanage.html">dbmmanage</a>¿Í °°Àº
- Áö¿ø ½ºÅ©¸³Æ®¸¦ À§ÇØ Perl 5 ÀÎÅÍÇÁ¸®ÅÍ°¡ ÇÊ¿äÇÏ´Ù. (¹öÀü
- 5.003 ÀÌ»óÀÌ¸é µÈ´Ù.) `<code>configure</code>' ½ºÅ©¸³Æ®°¡
- ÀÌ ÀÎÅÍÇÁ¸®Å͸¦ ãÁö ¸øÇصµ ¹®Á¦¾øÀÌ ¾ÆÆÄÄ¡ 2.0À»
- ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ´Ù¸¸ Áö¿ø ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏÁö
- ¸øÇÒ »ÓÀÌ´Ù. ¿©·¯ Perl ÀÎÅÍÇÁ¸®ÅÍ°¡ ¼³Ä¡µÇÀÖ´Ù¸é (¾Æ¸¶µµ
- »ì¶§ Æ÷ÇÔµÈ Perl 4¿Í Á÷Á¢ ÄÄÆÄÀÏÇÑ Perl 5)
- <code>./configure</code>°¡ ¿Ã¹Ù¸¥ °ÍÀ» ã±âÀ§ÇØ
- <code>--with-perl</code> ¿É¼ÇÀ» (¾Æ·¡ Âü°í) »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</dd>
- </dl>
-</section>
-
-<section id="download"><title>´Ù¿î·Îµå</title>
-
- <p>¾ÆÆÄÄ¡´Â ¿©·¯ ¹Ì·¯ ¸ñ·ÏÀÌ ÀÖ´Â <a
- href="http://httpd.apache.org/download.cgi">¾ÆÆÄÄ¡ À¥¼­¹ö
- ´Ù¿î·Îµå »çÀÌÆ®</a>¿¡¼­ ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º·ù ½Ã½ºÅÛÀ»
- »ç¿ëÇÑ´Ù¸é ¼Ò½ºÄڵ带 ´Ù¿î¹Þ¾Æ¼­ ÄÄÆÄÀÏÇÏ´Â ÆíÀÌ ³´´Ù. ½±°Ô
- (¾Æ·¡¿¡¼­ ¼³¸í) ÄÄÆÄÀÏÇÒ ¼ö ÀÖ°í, ÀÚ½ÅÀÇ ¿ëµµ¿¡ ¾Ë¸Â°Ô ¼­¹ö¸¦
- ¸ÂÃâ ¼ö ÀÖ´Ù. ¶Ç, ÃֽŠ¹öÀü ¹ÙÀ̳ʸ® ¹èÆ÷º»ÀÌ ¾ø´Â °æ¿ìµµ
- ¸¹´Ù. ¹ÙÀ̳ʸ®¸¦ ´Ù¿î¹Þ´Â´Ù¸é ¹èÆ÷º»¿¡ ÀÖ´Â
- <code>INSTALL.bindist</code> ÆÄÀÏÀÇ Áö½Ã¸¦ µû¸£¶ó.</p>
-
- <p>´Ù¿î·ÎµåÈÄ ´Ù¿î¹ÞÀº ÆÄÀÏÀÌ ¿ÏÀüÇÏ°í
- º¯°æµÇÁö¾ÊÀº ¾ÆÆÄÄ¡ À¥¼­¹öÀÓÀ» È®ÀÎÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.
- PGP ¼­¸íÀ» °¡Áö°í ´Ù¿î·ÎµåÇÑ Å¸º¼(tarball)À» °Ë»çÇÏ¿© È®ÀÎÇÑ´Ù.
- ÀÚ¼¼ÇÑ ¹æ¹ýÀº <a
- href="http://httpd.apache.org/download.cgi#verify">´Ù¿î·Îµå
- ÆäÀÌÁö</a>¿¡ ÀÖ°í, <a
- href="http://httpd.apache.org/dev/verification.html">PGP
- »ç¿ë¹ý</a>À» ¼³¸íÇÏ´Â »ó¼¼ÇÑ ¿¹µµ ÀÖ´Ù.</p>
-
-</section>
-
-<section id="extract"><title>¾ÐÃà Ç®±â</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö Ÿº¼¿¡¼­ ¼Ò½º¸¦ Ǫ´Â ÀÛ¾÷Àº ´Ü¼øÈ÷ ¾ÐÃà°ú
- tar¸¦ Ǫ´Â °ÍÀÌ´Ù:</p>
-
-<example>
-$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
-$ tar xvf httpd-2_1_<em>NN</em>.tar
-</example>
-
- <p>±×·¯¸é ÇöÀç µð·ºÅ丮 ¾Æ·¡¿¡ ¹èÆ÷º»ÀÇ ¼Ò½ºÄڵ带 ´ãÀº
- »õ·Î¿î µð·ºÅ丮°¡ »ý±ä´Ù. ¼­¹ö¸¦ ÄÄÆÄÀÏÇϱâ Àü¿¡ ±×
- µð·ºÅ丮·Î <code>cd</code>ÇØ¾ß ÇÑ´Ù.</p>
-</section>
-
-<section id="configure"><title>¼Ò½º Æ®¸® ±¸¼ºÇϱâ</title>
-
- <p>´ÙÀ½ °úÁ¤Àº ƯÁ¤ Ç÷¡Æû°ú °³ÀÎÀûÀÎ ÇÊ¿ä¿¡ µû¶ó ¾ÆÆÄÄ¡
- ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÏ´Â ÀÏÀÌ´Ù. À̸¦ À§ÇØ ¹èÆ÷º»ÀÇ ÃÖ»óÀ§ µð·ºÅ丮¿¡
- ÀÖ´Â <code><a href="programs/configure.html">configure</a></code>
- ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ´Ù. (¾ÆÆÄÄ¡
- ¼Ò½º Æ®¸®ÀÇ CVS ¹öÀüÀ» ´Ù¿î·ÎµåÇÑ °³¹ßÀÚ´Â À̹Ì
- <code>autoconf</code>¿Í <code>libtool</code>°¡ ¼³Ä¡µÇÀÖ°í,
- ´ÙÀ½ °úÁ¤À¸·Î ³Ñ¾î°¡±â Àü¿¡ <code>buildconf</code>¸¦ ½ÇÇàÇؾß
- ÇÑ´Ù. ÀÌ´Â Á¤½Ä ¹öÀü¿¡¼­´Â ÇÊ¿ä¾ø´Ù.)</p>
-
- <p>¸ðµÎ ±âº» ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÏ·Á¸é °£´ÜÈ÷
- <code>./configure</code>¸¦ ÀÔ·ÂÇϸéµÈ´Ù. ±âº» ¿É¼ÇÀ» ¼öÁ¤ÇÏ·Á¸é
- <code>./configure</code>¿¡ ¿©·¯ º¯¼ö¿Í ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.</p>
-
- <p>°¡Àå Áß¿äÇÑ ¿É¼ÇÀº ¾ÆÆÄÄ¡°¡ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇϱâÀ§ÇØ ¾ÆÆÄÄ¡¸¦
- ±¸¼ºÇÏ°í ¼³Ä¡ÇÒ Àå¼ÒÀÎ <code>--prefix</code>´Ù. ´Ù¸¥ <a
- href="programs/configure.html#installationdirectories">configure
- ¿É¼Çµé</a>À» »ç¿ëÇÏ¿© ÆÄÀÏÀÇ À§Ä¡¸¦ ´õ ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼öµµ
- ÀÖ´Ù.</p>
-
- <p><a href="mod/">¸ðµâ</a>À» Æ÷ÇÔÇϰųª »©¼­ ¾ÆÆÄÄ¡¿¡ Æ÷ÇÔÇÒ
- <a href="programs/configure.html#optionalfeatures">±â´É</a>À»
- ¼±ÅÃÇÑ´Ù. <a href="mod/module-dict.html#Status">Base</a>
- »óÅÂÀÎ ¸ðµâÀº ±âº»ÀûÀ¸·Î ¾ÆÆÄÄ¡¿¡ Æ÷ÇԵȴÙ. ´Ù¸¥ »óÅÂÀÇ
- ¸ðµâÀº <code>--enable-<var>module</var></code> ¿É¼ÇÀ» »ç¿ëÇÏ¿©
- Æ÷ÇÔÇÑ´Ù. ¿©±â¼­ <em>module</em>Àº ¸ðµâ À̸§¿¡¼­
- <code>mod_</code>¸¦ »©°í ¹ØÁÙÀ» »©±â±âÈ£·Î º¯°æÇÑ °á°ú´Ù.
- <code>--enable-<var>module</var>=shared</code> ¿É¼ÇÀ» »ç¿ëÇϸé
- ¸ðµâÀ» ½ÇÇàÁß¿¡ Æ÷ÇÔÇϰųª »¬ ¼ö ÀÖ´Â <a
- href="dso.html">°øÀ¯°´Ã¼(shared object, DSO)</a>·Î ÄÄÆÄÀÏÇÑ´Ù.
- ¶Ç, <code>--disable-<var>module</var></code> ¿É¼ÇÀ» »ç¿ëÇÏ¿©
- Base ¸ðµâÀ» »¬ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÑ ¸ðµâÀÌ ¾ø¾îµµ
- <code>configure</code>°¡ °æ°íÇÏÁö¾Ê°í ±×³É ¹«½ÃÇϱ⶧¹®¿¡
- ¸ðµâ À̸§À» Á¤È®È÷ ÀÔ·ÂÇ϶ó.</p>
-
- <p>°¡²û <code>configure</code> ½ºÅ©¸³Æ®¿¡°Ô ÄÄÆÄÀÏ·¯,
- ¶óÀ̺귯¸®, Çì´õÆÄÀÏ µîÀÇ À§Ä¡¸¦ ¾Ë·ÁÁà¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù.
- ÀÌ Á¤º¸´Â ȯ°æº¯¼ö³ª <code>configure</code>ÀÇ ¸í·ÉÇà ¿É¼ÇÀ»
- »ç¿ëÇÏ¿© Àü´ÞÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº <a
- href="programs/configure.html">configure manpage</a>¸¦
- Âü°íÇ϶ó.</p>
-
- <p>¿©·¯ºÐÀÌ ¼±ÅÃÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀ» º¸¿©ÁÖ±âÀ§ÇØ ´ÙÀ½Àº
- ƯÁ¤ ÄÄÆÄÀÏ·¯¿Í Ç÷¡±×¸¦ »ç¿ëÇÏ°í ³ªÁß¿¡ DSO·Î ÀоîµéÀÏ
- µÎ ¸ðµâ <module>mod_rewrite</module>¿Í
- <module>mod_speling</module>À» Ãß°¡ÇÏ¿©
- <code>/sw/pkg/apache</code>¿¡ ¼³Ä¡ÇÒ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ´Â
- ÀüÇüÀûÀÎ ¿¹ÀÌ´Ù:</p>
-
-<example>
- $ CC="pgcc" CFLAGS="-O2" \<br />
- ./configure --prefix=/sw/pkg/apache \<br />
- --enable-rewrite=shared \<br />
- --enable-speling=shared
-</example>
-
- <p><code>configure</code>¸¦ ½ÇÇàÇÏ¸é ¸îºÐ°£ ½Ã½ºÅÛÀÇ ±â´ÉÀ»
- °Ë»çÇÏ¿© ³ªÁß¿¡ ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇÒ MakefileµéÀ»
- ¸¸µç´Ù.</p>
-
- <p><code>configure</code> ¿É¼Çµé¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº <a
- href="programs/configure.html">configure manpage</a>¿¡ ÀÖ´Ù.</p>
-</section>
-
-<section id="compile"><title>ÄÄÆÄÀÏ</title>
-
- <p>ÀÌÁ¦ ´ÙÀ½ ¸í·É¾î Çϳª·Î ¾ÆÆÄÄ¡ÀÇ ¿©·¯ ºÎºÐÀ» ÄÄÆÄÀÏÇÒ
- ¼ö ÀÖ´Ù:</p>
-
-<example>$ make</example>
-
- <p>¿©±â¼­ Á» ±â´Ù·Á¶ó. ÆæƼ¾ö III/¸®´ª½º 2.2 ½Ã½ºÅÛ¿¡¼­
- ±âº» ±¸¼ºÀ» ÄÄÆÄÀÏÇϴµ¥ ¾à 3ºÐ Á¤µµ °É¸°´Ù. ÀÌ ½Ã°£Àº
- Çϵå¿þ¾î¿Í Æ÷ÇÔÇÑ ¸ðµâ¼ö¿¡ µû¶ó Å©°Ô º¯ÇÑ´Ù.</p>
-</section>
-
-<section id="install"><title>¼³Ä¡</title>
-
- <p>ÀÌÁ¦ ´ÙÀ½ ¸í·É¾î·Î ÆÐÅ°Áö¸¦ (À§ÀÇ <code>--prefix</code>
- ¿É¼Ç Âü°í) ÁöÁ¤ÇÑ ¼³Ä¡ À§Ä¡ <em>PREFIX</em>¿¡ ¼³Ä¡ÇÑ´Ù:</p>
-
-<example>$ make install</example>
-
- <p>¾÷±×·¹À̵åÇÑ´Ù¸é ÀÌ ¼³Ä¡ °úÁ¤ÀÌ ±âÁ¸ ¼³Á¤ÆÄÀÏÀ̳ª ¹®¼­¸¦
- µ¤¾î¾²Áö ¾Ê´Â´Ù.</p>
-</section>
-
-<section id="customize"><title>¼³Á¤</title>
-
- <p>´ÙÀ½À¸·Î <code><em>PREFIX</em>/conf/</code>¿¡ ÀÖ´Â
- <a href="configuring.html">¼³Á¤ÆÄÀÏ</a>À» ÆíÁýÇÏ¿© ¾ÆÆÄÄ¡
- À¥¼­¹ö¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-<example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
-
- <p>»ç¿ë°¡´ÉÇÑ <a href="mod/directives.html">¼³Á¤ Áö½Ã¾î</a>¿¡
- ´ëÇÑ ¿ÏÀüÇÑ ¼³¸í°ú ÀÌ ¹®¼­ÀÇ °¡Àå ÃÖ±Ù ÆÇÀº <a
- href="./">docs/manual/</a>À̳ª <a
- href="http://httpd.apache.org/docs-2.1/"
- >http://httpd.apache.org/docs-2.1/</a>¿¡ ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦
- Âü°íÇ϶ó.</p>
-</section>
-
-<section id="test"><title>°Ë»ç</title>
-
- <p>ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ <a
- href="invoking.html">½ÃÀÛ</a>ÇÒ ¼ö ÀÖ´Ù:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl start</example>
-
- <p>±×¸®°í URL <code>http://localhost/</code>·Î ù ¹®¼­¸¦
- ¿äûÇÑ´Ù. º¸°ÔµÉ À¥ÆäÀÌÁö´Â ¾Æ¸¶µµ
- <code><em>PREFIX</em>/htdocs/</code>ÀÏ <directive
- module="core">DocumentRoot</directive> ¾Æ·¡¿¡ ÀÖ´Ù. ±×¸®°í
- ´ÙÀ½ ¸í·É¾î·Î ´Ù½Ã ¼­¹ö¸¦ <a href="stopping.html">Áß´Ü</a>ÇÑ´Ù:</p>
-
-<example>$ <em>PREFIX</em>/bin/apachectl stop</example>
-</section>
-<section id="upgrading"><title>¾÷±×·¹À̵å</title>
-
- <p>¾÷±×·¹À̵åÇÑ´Ù¸é ¸ÕÀú »çÀÌÆ®¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â º¯È­°¡
- ÀÖ´ÂÁö ¾Ë¾Æº¸±âÀ§ÇØ ¹ßÇ¥¹®°ú ¼Ò½º ¹èÆ÷º»ÀÇ <code>CHANGES</code>
- ÆÄÀÏÀ» Àд´Ù. (¿¹¸¦ µé¾î, 1.3¿¡¼­ 2.0À̳ª 2.0¿¡¼­ 2.2¿Í
- °°Àº) Å« ¹öÀüÀÌ º¯ÇÑ °æ¿ì ÄÄÆÄÀÏ ¿É¼Ç°ú ¼³Á¤À» Á÷Á¢ ¼öÁ¤ÇؾßÇÒ
- Á¤µµÀÇ Å« º¯È­°¡ ÀÖÀ» °ÍÀÌ´Ù. ¸ðµç ¸ðµâµµ ¸ðµâ APIÀÇ º¯È­¿¡
- ¾Ë¸Â°Ô ¾÷±×·¹À̵åÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ÀÛÀº ¹öÀüÀ» ÇÑ´Ü°è ¾÷±×·¹À̵åÇÏ´Â °ÍÀº (¿¹¸¦ µé¾î,
- 2.0.55¿¡¼­ 2.0.57) ½±´Ù. <code>make install</code> ÀÛ¾÷Àº
- ±âÁ¸ÀÇ ¹®¼­, ·Î±×ÆÄÀÏ, ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇÏÁö ¾Ê´Â´Ù. ¶Ç,
- °³¹ßÀÚ´Â ÀÛÀº ¹öÀü°£¿¡ <code>configure</code> ¿É¼Ç, ¼³Á¤,
- ¸ðµâ APIÀÇ È£È¯¼º¾ø´Â º¯È­¸¦ ÃÖ´ëÇÑ ¸·´Â´Ù. ´ëºÎºÐÀÇ °æ¿ì
- µ¿ÀÏÇÑ <code>configure</code> ¸í·ÉÇà, µ¿ÀÏÇÑ ¼³Á¤ÆÄÀÏÀ»
- »ç¿ëÇÒ ¼ö ÀÖ°í, ¸ðµâµéµµ ¸ðµÎ °è¼Ó µ¿ÀÛÇÒ °ÍÀÌ´Ù. (ÀÌ ¸»Àº
- 2.0.41ÀÌÈÄ ¹öÀü¿¡¸¸ ÇØ´çÇÑ´Ù. ÀÌÀü ¹öÀüµé¿¡´Â ȣȯ¼º¾ø´Â
- º¯È­°¡ ÀÖ´Ù.)</p>
-
- <p>ÀÌÀü¿¡ ¼³Ä¡Çß´ø ¼Ò½º¸¦ °¡Áö°í ÀÖ´Ù¸é, ¾÷±×·¹À̵尡 ´õ
- ½¬¿öÁø´Ù. ÀÌÀü ¼Ò½º ÃÖ»óÀ§¿¡ ÀÖ´Â <code>config.nice</code>
- ÆÄÀÏ¿¡´Â ¼Ò½º¸¦ ±¸¼ºÇÒ ¶§ »ç¿ëÇß´ø <code>configure</code>
- ¸í·ÉÇà ¿É¼ÇÀÌ ±×´ë·Î ÀÖ´Ù. ±×·¡¼­ ´ÙÀ½ ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇÑ´Ù¸é
- »õ·Î¿î ¹öÀü ¼Ò½º·Î <code>config.nice</code> ÆÄÀÏÀ» º¹»çÇÏ°í,
- ¿øÇÑ´Ù¸é Á¶±Ý ¼öÁ¤À» ÇÑ ÈÄ, ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù:</p>
-
- <example>
- $ ./config.nice<br />
- $ make<br />
- $ make install<br />
- $ <em>PREFIX</em>/bin/apachectl stop<br />
- $ <em>PREFIX</em>/bin/apachectl start<br />
- </example>
-
- <note type="warning">»õ·Î¿î ¹öÀüÀ» »ç¿ëÇϱâ Àü¿¡ Ç×»ó °Ë»çÇغÁ¾ß
- ÇÑ´Ù. ¿¹¸¦ µé¾î, ¾÷±×·¹À̵带 ¸¶Ä¡±â Àü¿¡ ȣȯ¼º ¹®Á¦°¡
- ÀÖ´ÂÁö ¾Ë¾Æº¸±âÀ§ÇØ ´Ù¸¥ <code>--prefix</code>¿Í (<directive
- module="mpm_common">Listen</directive> Áö½Ã¾î·Î) ´Ù¸¥ Æ÷Æ®¸¦
- »ç¿ëÇÏ¿© »õ·Î¿î ¹öÀüÀ» ¼³Ä¡ÇÑÈÄ ÀÌÀü ¹öÀü°ú °°ÀÌ ½ÇÇàÇغ¼
- ¼ö ÀÖ´Ù.</note>
-</section>
-</manualpage>
diff --git a/docs/manual/install.xml.meta b/docs/manual/install.xml.meta
deleted file mode 100644
index c036147d6b..0000000000
--- a/docs/manual/install.xml.meta
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>install</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>fr</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/invoking.html b/docs/manual/invoking.html
deleted file mode 100644
index eb9ed56683..0000000000
--- a/docs/manual/invoking.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: invoking.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: invoking.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: invoking.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: invoking.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: invoking.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/invoking.html.de b/docs/manual/invoking.html.de
deleted file mode 100644
index c2d99b306f..0000000000
--- a/docs/manual/invoking.html.de
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache starten - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache starten</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/invoking.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Unter Windows läuft der Apache üblicherweise als Dienst
- (Windows NT, 2000 und XP) oder als Konsolenanwendung (Windows 9x und
- ME). Für Einzelheiten lesen Sie bitte <a href="platform/windows.html#winsvc">Apache als Dienst betreiben</a>
- und <a href="platform/windows.html#wincons">Apache als Konsolenanwendung betreiben</a>.</p>
-
- <p>Unter Unix wird das <a href="programs/httpd.html">httpd</a>-Programm als Daemon ausgeführt,
- der im Hintergrund fortlaufend aktiv ist, um Anfragen zu bearbeiten.
- Dieses Dokument beschreibt, wie <code>httpd</code> aufgerufen wird.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#startup">Wie der Apache startet</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errors">Fehler während des Hochfahrens</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#boot">Beim Bootvorgang starten</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#info">Weitere Informationen</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="stopping.html">Beenden und Neustarten</a></li><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">Wie der Apache startet</a></h2>
-
- <p>Wenn die in der Konfigurationsdatei angegebene <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Anweisung auf die Voreinstellung
- von 80 gesetzt ist (oder einen anderen Port unterhalb von 1024), dann
- müssen Sie root-Berechtigung besitzen, um den Apache starten
- zu können. Nur dann kann er sich an diesen privilegierten
- Port binden. Sobald der Server gestartet ist und einige vorbereitende
- Aktionen wie das Öffnen seiner Log-Dateien ausgeführt hat,
- startet er mehrere <em>Kind</em>-Prozesse, welche die Arbeit erledigen:
- das Lauschen auf und Beantworten von Anfragen von Clients. Der
- Haupt-<code>httpd</code>-Prozess läuft unter dem Benutzer root
- weiter, die Kind-Prozesse jedoch werden unter weniger privilegierten
- Benutzerkennungen ausgeführt. Dies wird von dem ausgewählten
- <a href="mpm.html">Multi-Processing-Modul</a> gesteuert.</p>
-
- <p>Die Verwendung des Steuerskripts <a href="programs/apachectl.html">apachectl</a> ist die empfohlene Methode,
- das <code>httpd</code>-Programm zu starten. Dieses Skript setzt
- verschiedene Umgebungsvariablen, die für die korrekte Funktion von
- <code>httpd</code> unter einigen Betriebssystemen notwendig sind, und
- startet dann das <code>httpd</code>-Programm. <code>apachectl</code>
- reicht alle Kommandozeilenargumente durch, so dass alle
- <code>httpd</code>-Optionen auch mit <code>apachectl</code>
- verwendet werden können. Um den korrekten Ablageort des
- <code>httpd</code>-Programms sowie einige Kommandozeilenargumente
- anzugeben, die Sie <em>immer</em> verwenden möchten, können
- Sie auch das Skript <code>apachectl</code> direkt editieren und die
- Variable <code>HTTPD</code> am Anfang ändern.</p>
-
- <p>Das Erste was <code>httpd</code> macht, wenn es startet, ist das
- Suchen und Einlesen der <a href="configuring.html">Konfigurationsdatei</a> <code>httpd.conf</code>.
- Der Ablageort dieser Datei wird zur Kompilierungszeit festgelegt. Es ist
- aber möglich, den Ablageort zur Laufzeit anzugeben, indem die
- Kommandozeilenoption <code>-f</code> wie folgt verwendet wird:</p>
-
- <div class="example"><p><code>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</code></p></div>
-
- <p>Wenn während des Starts alles gutgeht, trennt sich der Server
- vom Terminal ab und die Eingabeaufforderung erscheint gleich darauf
- wieder. Dies zeigt an, dass der Server hochgefahren ist und läuft.
- Sie können nun Ihren Browser benutzen, um Verbindung zum Server
- aufzunehmen und sich die Testseite im <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>-Verzeichnis anzusehen wie auch
- die lokale Kopie der Dokumentation, die von dieser Seite aus verlinkt
- ist.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errors" id="errors">Fehler während des Hochfahrens</a></h2>
-
- <p>Wenn der Apache während des Hochfahrens einen schweren Fehler
- feststellt, schreibt er entweder eine Nachricht, die das Problem
- näher schildert, auf die Konsole oder ins <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>, bevor er sich selbst beendet.
- Eine der häufigsten Fehlermeldungen ist "<code>Unable
- to bind to Port ...</code>" <span class="transnote">(<em>Anm.d.Ü.:</em> "Kann nicht an Port ...
- binden")</span>. Diese Meldung wird üblicherweise verursacht:</p>
-
- <ul>
- <li>entweder durch den Versuch, den Server an einem privilegierten
- Port zu starten, während man nicht als Benutzer root angemeldet
- ist,</li>
-
- <li>oder durch den Versuch, den Server zu starten, wenn bereits eine
- andere Instanz des Apache oder ein anderer Webserver an den gleichen
- Port gebunden ist.</li>
- </ul>
-
- <p>Für weitere Anleitungen zur Fehlerbehebung lesen Sie bitte die
- Apache-<a href="faq/">FAQ</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="boot" id="boot">Beim Bootvorgang starten</a></h2>
-
- <p>Wenn Sie möchten, dass Ihr Server direkt nach einem
- System-Neustart weiterläuft, sollten Sie einen Aufruf von
- <code>apachectl</code> zu den Startdateien Ihres Systems hinzufügen
- (üblicherweise <code>rc.local</code> oder eine Datei in einem
- <code>rc.N</code>-Verzeichnis). Dies startet den Apache als root.
- Stellen Sie zuvor jedoch sicher, dass Ihr Server hinsichtlich
- Sicherheit und Zugriffsbeschränkungen richtig konfiguriert ist.</p>
-
- <p>Das <code>apachectl</code>-Skript ist dafür ausgelegt, wie ein
- Standard-SysV-init-Skript zu arbeiten. Es akzeptiert die Argumente
- <code>start</code>, <code>restart</code> und <code>stop</code>
- und übersetzt sie in die entsprechenden Signale für
- <code>httpd</code>. Daher können Sie oftmals
- einfach <code>apachectl</code> in das entsprechende init-Verzeichnis
- linken. Überprüfen Sie bitte auf jeden Fall die genauen
- Anforderungen Ihres Systems.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="info" id="info">Weitere Informationen</a></h2>
-
- <p>Weitere Informationen über Kommandozeilenoptionen von <a href="programs/httpd.html">httpd</a> und <a href="programs/apachectl.html">apachectl</a> sowie anderen
- Hilfsprogrammen, die dem Server beigefügt sind, sind auf der
- Seite <a href="programs/">Server und Hilfsprogramme</a>
- verfügbar. Es existiert außerdem eine Dokumentation
- aller in der Apache-Distribution enthaltenen <a href="mod/">Module</a> und der von ihnen bereitgestellten
- <a href="mod/directives.html">Direktiven</a>.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/invoking.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/invoking.html.en b/docs/manual/invoking.html.en
deleted file mode 100644
index 87903a6fa0..0000000000
--- a/docs/manual/invoking.html.en
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Starting Apache - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Starting Apache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>On Windows, Apache is normally run as a service on Windows
- NT, 2000 and XP, or as a console application on Windows 9x and
- ME. For details, see <a href="platform/windows.html#winsvc">Running Apache as a Service</a>
- and <a href="platform/windows.html#wincons">Running Apache as a
- Console Application</a>.</p>
-
- <p>On Unix, the <a href="programs/httpd.html">httpd</a> program
- is run as a daemon that executes continuously in the
- background to handle requests. This document describes how
- to invoke <code>httpd</code>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#startup">How Apache Starts</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errors">Errors During Start-up</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#boot">Starting at Boot-Time</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#info">Additional Information</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="stopping.html">Stopping and Restarting</a></li><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">How Apache Starts</a></h2>
-
- <p>If the <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- specified in the configuration file is default of 80 (or any other
- port below 1024), then it is necessary to have root privileges in
- order to start apache, so that it can bind to this privileged
- port. Once the server has started and performed a few preliminary
- activities such as opening its log files, it will launch several
- <em>child</em> processes which do the work of listening for and
- answering requests from clients. The main <code>httpd</code>
- process continues to run as the root user, but the child processes
- run as a less privileged user. This is controlled by the selected
- <a href="mpm.html">Multi-Processing Module</a>.</p>
-
- <p>The recommended method of invoking the <code>httpd</code>
- executable is to use the <a href="programs/apachectl.html">apachectl</a> control script. This
- script sets certain environment variables that are necessary for
- <code>httpd</code> to function correctly under some operating
- systems, and then invokes the <code>httpd</code> binary.
- <code>apachectl</code> will pass through any command line
- arguments, so any <code>httpd</code> options may also be used with
- <code>apachectl</code>. You may also directly edit the
- <code>apachectl</code> script by changing the <code>HTTPD</code>
- variable near the top to specify the correct location of the
- <code>httpd</code> binary and any command-line arguments that you
- wish to be <em>always</em> present.</p>
-
- <p>The first thing that <code>httpd</code> does when it is
- invoked is to locate and read the <a href="configuring.html">configuration file</a>
- <code>httpd.conf</code>. The location of this file is set at
- compile-time, but it is possible to specify its location at run
- time using the <code>-f</code> command-line option as in</p>
-
-<div class="example"><p><code>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</code></p></div>
-
- <p>If all goes well during startup, the server will detach from
- the terminal and the command prompt will return almost
- immediately. This indicates that the server is up and running.
- You can then use your browser to connect to the server and view
- the test page in the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> directory
- and the local copy of the documentation linked from that
- page.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errors" id="errors">Errors During Start-up</a></h2>
-
- <p>If Apache suffers a fatal problem during startup, it will
- write a message describing the problem either to the console or
- to the <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> before
- exiting. One of the most common error messages is "<code>Unable
- to bind to Port ...</code>". This message is usually caused by
- either:</p>
-
- <ul>
- <li>Trying to start the server on a privileged port when not
- logged in as the root user; or</li>
-
- <li>Trying to start the server when there is another instance
- of Apache or some other web server already bound to the same
- Port.</li>
- </ul>
-
- <p>For further trouble-shooting instructions, consult the
- Apache <a href="faq/">FAQ</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="boot" id="boot">Starting at Boot-Time</a></h2>
-
- <p>If you want your server to continue running after a system
- reboot, you should add a call to <code>apachectl</code> to your
- system startup files (typically <code>rc.local</code> or a file in
- an <code>rc.N</code> directory). This will start Apache as
- root. Before doing this ensure that your server is properly
- configured for security and access restrictions.</p>
-
- <p>The <code>apachectl</code> script is designed to act like a
- standard SysV init script; it can take the arguments
- <code>start</code>, <code>restart</code>, and <code>stop</code>
- and translate them into the appropriate signals to
- <code>httpd</code>. So you can often simply link
- <code>apachectl</code> into the appropriate init directory. But be
- sure to check the exact requirements of your system.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="info" id="info">Additional Information</a></h2>
-
- <p>Additional information about the command-line options of <a href="programs/httpd.html">httpd</a> and <a href="programs/apachectl.html">apachectl</a> as well as other
- support programs included with the server is available on the
- <a href="programs/">Server and Supporting Programs</a> page.
- There is also documentation on all the <a href="mod/">modules</a> included with the Apache distribution
- and the <a href="mod/directives.html">directives</a> that they
- provide.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/invoking.html.es b/docs/manual/invoking.html.es
deleted file mode 100644
index d92e5eb0c2..0000000000
--- a/docs/manual/invoking.html.es
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>iniciar Apache - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>iniciar Apache</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>En Windows, Apache se ejecuta normalmente como un servicio en
- Windows NT, 2000 and XP, y como una aplicacion de consola en
- Windows 9x y ME. Para obtener más información, consulte
- <a href="platform/windows.html#winsvc">Ejecutar Apache como un
- servicio</a> y <a href="platform/windows.html#wincons">Ejecutar
- Apache como una aplicación de consola</a>.</p>
-
- <p>En Unix, el programa <a href="programs/httpd.html">httpd</a> se
- ejecuta como un demonio (daemon) de forma silenciosa y atiende las
- peticiones que le lleguen. Este documento describe cómo
- invocar el programa <code>httpd</code>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#startup">Cómo iniciar Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errors">Errores Durante el Arranque</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#boot">Iniciar Apache al Iniciar el Sistema</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#info">Información Adicional</a></li>
-</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="stopping.html">Parar y reiniciar Apache</a></li><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">Cómo iniciar Apache</a></h2>
-
- <p>Si el puerto especificado en la directiva <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> del fichero de
- configuración es el que viene por defecto, es decir, el
- puerto 80 (o cualquier otro puerto por debajo del 1024), entonces
- es necesario tener privilegios de usuario root (superusuario) para
- iniciar Apache, de modo que pueda establecerse una conexión a
- través de esos puertos privilegiados. Una vez que el servidor
- Apache se ha iniciado y ha completado algunas tareas preliminares,
- tales como abrir sus ficheros log, lanzará varios procesos,
- procesos <em>hijo</em>, que hacen el trabajo de escuchar y atender
- las peticiones de los clientes. El proceso principal,
- <code>httpd</code> continúa ejecutandose como root, pero los
- procesos hijo se ejecutan con menores privilegios de usuario.
- Esto lo controla el <a href="mpm.html">Módulo de
- MultiProcesamiento (MPM)</a> seleccionado.</p>
-
- <p>La forma recomendada para invocar el ejecutable
- <code>httpd</code> es usando el script de control <a href="programs/apachectl.html">apachectl</a>. Este script fija
- determinadas variables de entorno que son necesarias para que
- <code>httpd</code> funcione correctamente en el sistema operativo,
- y después invoca el binario <code>httpd</code>.
- <code>apachectl</code> pasa a httpd cualquier argumento que se le
- pase a través de la línea de comandos, de forma que
- cualquier opción de <code>httpd</code> puede ser usada
- también con <code>apachectl</code>. Puede editar
- directamente el script <code>apachectl</code> y cambiar la
- variable <code>HTTPD</code> variable que está al principio y
- que especifica la ubicación exacta en la que está el
- binario <code>httpd</code> y cualquier argumento de línea de
- comandos que quiera que esté <em>siempre</em> presente.</p>
-
- <p>La primera cosa que hace <code>httpd</code> cuando es invocado
- es localizar y leer el <a href="configuring.html">fichero de
- configuración</a> <code>httpd.conf</code>. El lugar en el que
- está ese fichero se determina al compilar, pero también
- es posible especificar la ubicación en la que se encuentra al
- iniciar el servidor Apache usando la opción de línea de
- comandos <code>-f</code></p>
-
-<div class="example"><p><code>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</code></p></div>
-
- <p>Si todo va bien durante el arranque, la sesión de terminal
- se suspenderá un momento y volverá a estar activa casi
- inmediatamente. Esto quiere decir que el servidor está activo
- y funcionando. Puede usar su navegador para conectarse al
- servidor y ver la pagina de prueba que hay en el directorio
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> y la copia local
- de esta documentación a la que se puede acceder desde esa
- página.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errors" id="errors">Errores Durante el Arranque</a></h2>
-
- <p>Si Apache encuentra una error irrecuperable durante el
- arranque, escribirá un mensaje describiendo el problema en la
- consola o en el archivo <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> antes de abortar la
- ejecución. Uno de los mensajes de error más comunes es
- "<code>Unable to bind to Port ...</code>". Cuando se recibe este
- mensaje es normalmente por alguna de las siguientes razones:</p>
-
- <ul>
- <li>Está intentando iniciar el servidor Apache en un puerto
- privilegiado (del 0 al 1024) sin haber hecho login como usuario
- root; ó</li>
-
- <li>Está intentando iniciar el servidor Apache mientras
- está ya ejecutando Apache o algún otro servidor web en
- el mismo puerto.</li>
- </ul>
-
- <p>Puede encontrar más información sobre cómo
- solucionar problemas, en la sección de <a href="faq/">Preguntas Frecuentes</a> de Apache.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="boot" id="boot">Iniciar Apache al Iniciar el Sistema</a></h2>
-
- <p>Si quiere que el servidor Apache continú su ejecución
- después de reiniciar el sistema, debe añadir una llamada
- a <code>apachectl</code> en sus archivos de arranque (normalmente
- <code>rc.local</code> o un fichero en ese directorio del tipo
- <code>rc.N</code>). Esto iniciará Apache como usuario
- root. Antes de hacer esto, asegúrese de que la
- configuración de seguridad y las restricciones de acceso de
- su servidor Apache están correctamente configuradas.</p>
-
- <p>El script <code>apachectl</code> está diseñado para
- actuar como un script estandar de tipo SysV init; puede tomar los
- argumentos <code>start</code>, <code>restart</code>, y
- <code>stop</code> y traducirlos en las señales apropiadas
- para <code>httpd</code>. De esta manera, casi siempre puede
- simplemente enlazar <code>apachectl</code> con el directorio init
- adecuado. Pero asegúrese de comprobar los requisitos exactos
- de su sistema.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="info" id="info">Información Adicional</a></h2>
-
- <p>En la sección <a href="programs/">El Servidor y Programas
- de Soporte </a> puede encontrar más información sobre
- las opciones de línea de comandos que puede pasar a <a href="programs/httpd.html">httpd</a> y <a href="programs/apachectl.html">apachectl</a> asi como sobre otros
- programas de soporte incluidos con el servidor Apache.
- También hay documentación sobre todos los <a href="mod/">módulos</a> incluidos con la distribucion de
- Apache y sus correspondientes <a href="mod/directives.html">directivas</a> asociadas.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/invoking.html.ja.euc-jp b/docs/manual/invoking.html.ja.euc-jp
deleted file mode 100644
index 9e10fab39f..0000000000
--- a/docs/manual/invoking.html.ja.euc-jp
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¤Îµ¯Æ° - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache ¤Îµ¯Æ°</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Windows ¾å¤Ç¤Ï¡¢Apache ¤ÏÄ̾ï¤Ï
- Windows NT, 2000, XP ¤Ç¤Ï¥µ¡¼¥Ó¥¹¤È¤·¤Æ¡¢Windows 9x, ME
- ¤Ç¤Ï¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
- ¾ÜºÙ¤Ë´Ø¤·¤Æ¤Ï¡¢¡Ö<a href="platform/windows.html#winsvc">
- ¥µ¡¼¥Ó¥¹¤È¤·¤Æ¼Â¹Ô¤¹¤ë</a>¡×¤È¡Ö<a href="platform/windows.html#wincons">
- ¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤È¤·¤Æ¼Â¹Ô¤¹¤ë</a>¡×¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>Unix¤Ç¤Ï¡¢<a href="programs/httpd.html">httpd</a>
- ¥×¥í¥°¥é¥à¤¬¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¾ï¤Ë¥ê¥¯¥¨¥¹¥È½èÍý¤ò¹Ô¤¦
- ¥Ç¡¼¥â¥ó¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤Þ¤¹¡£¤³¤Îʸ½ñ¤Ç¤Ï¤É¤Î¤è¤¦¤Ë
- <code>httpd</code> ¤òµ¯Æ°¤¹¤ë¤«¤Ë¤Ä¤¤¤Æµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#startup">Apache ¤Îµ¯Æ°ÊýË¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errors">µ¯Æ°»þ¤Î¥¨¥é¡¼</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#boot">¥Ö¡¼¥È»þ¤Îµ¯Æ°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#info">ÄɲþðÊó</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="stopping.html">Ää»ß¤ÈºÆµ¯Æ°</a></li><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">Apache ¤Îµ¯Æ°ÊýË¡</a></h2>
-
- <p>¤â¤·¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¤¬¥Ç¥Õ¥©¥ë¥È¤Î 80 (¤â¤·¤¯¤Ï 1024 °Ê²¼¤Î¾¤Î¥Ý¡¼¥È)
- ¤Ç¤¢¤ë¾ì¹ç¤Ï¡¢Apache ¤òµ¯Æ°¤¹¤ë¤¿¤á¤Ë¤Ï root
- ¸¢¸Â¤¬É¬Íפˤʤê¤Þ¤¹¤¬¡¢
- ¤³¤ì¤Ï¤³¤ÎÆø¢¥Ý¡¼¥È¤Ë¥Ð¥¤¥ó¥É¤¹¤ë¤¿¤á¤Ç¤¹¡£
- µ¯Æ°¤·¤Æ¡¢°ìÅÙ¥í¥°¥Õ¥¡¥¤¥ë¤ò³«¤¯¤È¤¤¤Ã¤¿½àÈ÷¤Î¤¿¤á¤Î
- Æ°ºî¤ò´ö¤Ä¤«¼Â¹Ô¤·¤¿¸å¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë
- listen ¤È±þÅú¤ò¼ÂºÝ¤Ë¹Ô¤¦<em>»Ò</em>¥×¥í¥»¥¹¤òµ¯Æ°¤·¤Þ¤¹¡£
- ¥á¥¤¥ó¤Î <code>httpd</code> ¥×¥í¥»¥¹¤Ï root ¸¢¸Â¤ÇÁö¤ê³¤±¤Þ¤¹¤¬¡¢
- »Ò¥×¥í¥»¥¹¤Ï¤â¤Ã¤ÈÄ㤤¸¢¸Â¤ÇÁö¤ê¤Þ¤¹¡£
- ¤³¤ì¤ÏÁªÂò¤·¤¿<a href="mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</a>¤ÇÀ©¸æ¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¿ä¾©¤Î <code>httpd</code> ¼Â¹Ô¥×¥í¥°¥é¥à¤Îµ¯Æ°ÊýË¡¤Ï¡¢
- <a href="programs/apachectl.html">apachectl</a>
- À©¸æ¥¹¥¯¥ê¥×¥È¤ò»ÈÍѤ¹¤ëÊýË¡¤Ç¤¹¡£¤³¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¢<code>httpd</code>
- ¤¬¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¾å¤ÇÀµ¾ï¤ËÆ°ºî¤¹¤ë¤è¤¦¤ËɬÍפʴĶ­ÊÑ¿ô¤ò
- ŬÀÚ¤ËÀßÄꤷ¤Æ¡¢<code>httpd</code> ¥Ð¥¤¥Ê¥ê¤òµ¯Æ°¤·¤Þ¤¹¡£
- <code>apachectl</code> ¤Ï¤É¤ó¤Ê¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤âÄ̲ᤵ¤»¤Þ¤¹¤Î¤Ç¡¢
- <code>httpd</code> ¤Î¤É¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤â
- <code>apchectl</code> ¤Î¥ª¥×¥·¥ç¥ó¤È¤·¤Æ»ÈÍѤǤ­¤Þ¤¹¡£
- ¤Þ¤¿¡¢<code>apchectl</code> ¥¹¥¯¥ê¥×¥È¤òľÀÜÊÔ½¸¤·¡¢
- ¥¹¥¯¥ê¥×¥ÈÀèƬÉÕ¶á¤Î <code>HTTPD</code> ÊÑ¿ô¤òÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢
- <code>httpd</code> ¥Ð¥¤¥Ê¥ê¤ÎÀµ¤·¤¤°ÌÃÖ¤ò»ØÄꤷ¤¿¤ê¡¢<em>¾ï¤Ë</em>
- Éղ䵤»¤ë¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤ò»ØÄꤷ¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code>httpd</code> ¤¬µ¯Æ°¤µ¤ì¤Æ¤Þ¤ººÇ½é¤Ë¤¹¤ë¤³¤È¤Ï¡¢
- <a href="configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a>
- <code>httpd.conf</code> ¤Î°ÌÃÖ¤òÆÃÄꤷ¤ÆÆɤ߹þ¤à¤³¤È¤Ç¤¹¡£
- ¤³¤Î¥Õ¥¡¥¤¥ë¤Î°ÌÃ֤ϥ³¥ó¥Ñ¥¤¥ë»þ¤ËÀßÄꤵ¤ì¤Þ¤¹¤¬¡¢¼Â¹Ô»þ¤Ë
- <code>-f</code> ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ
- °ÌÃÖ¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¼¡¤Î¤è¤¦¤Ë¤Ç¤¹¡£</p>
-
-<div class="example"><p><code>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</code></p></div>
-
- <p>¥¹¥¿¡¼¥È¥¢¥Ã¥×¤¬Ëü»ö¾å¼ê¤¯¤¤¤Ã¤¿¤é¡¢¥µ¡¼¥Ð¤Ï¥¿¡¼¥ß¥Ê¥ë¤«¤é
- ÀÚ¤êÎ¥¤µ¤ì¤Æ¡¢¥³¥Þ¥ó¥É¥×¥í¥ó¥×¥È¤¬Â¨ºÂ¤ËÌá¤Ã¤Æ¤¯¤ë¤Ç¤·¤ç¤¦¡£
- ¤³¤ì¤Ï¥µ¡¼¥Ð¤¬µ¯Æ°¤·¤Æ¤¤¤ë¾õÂÖ¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£
- ¤½¤Î¸å¤Ï¥Ö¥é¥¦¥¶¤Ç¥µ¡¼¥Ð¤ËÀܳ¤·¤Æ¡¢
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Æ¥¹¥È¥Ú¡¼¥¸¤ä¤½¤³¤«¤é¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë
- ¥í¡¼¥«¥ë¤Î¥É¥­¥å¥á¥ó¥È¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errors" id="errors">µ¯Æ°»þ¤Î¥¨¥é¡¼</a></h2>
-
- <p>Apache ¤Ï¡¢µ¯Æ°»þ¤ËÃ×̿Ū¤ÊÌäÂê¤ËÁø¶ø¤¹¤ë¤È¡¢
- ½ªÎ»¤¹¤ëÁ°¤Ë¡¢¥³¥ó¥½¡¼¥ë¤«
- <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>
- ¤Î¤É¤Á¤é¤«¤ËÌäÂê¤òµ­½Ò¤·¤¿¥á¥Ã¥»¡¼¥¸¤ò½ÐÎϤ·¤Þ¤¹¡£
- ºÇ¤â¤è¤¯¤¢¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ï
- ¡Ö<code>Unable to bind to Port ...</code>¡×
- ¤Ç¤¹¡£¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏÉáÄ̤ϼ¡¤Î¤É¤Á¤é¤«¤¬¸¶°ø¤Ç¤¹¡£</p>
-
- <ul>
- <li>root ¤Ç¥í¥°¥¤¥ó¤·¤Æ¤¤¤Ê¤¤»þ¤Ë¡¢
- Æø¢¥Ý¡¼¥È¤Ç¥µ¡¼¥Ð¤òµ¯Æ°¤·¤è¤¦¤È¤·¤¿¡£</li>
-
- <li>Ʊ¤¸¥Ý¡¼¥È¤Ë´û¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤ë Apache
- ¤¬¤â¤¦°ì¤Ä¤¢¤ë¤È¤­¤ä¾¤Î¥¦¥§¥Ö¥µ¡¼¥Ð¤¬Â¸ºß¤·¤Æ¤¤¤ë»þ¤Ë¡¢
- ¥µ¡¼¥Ð¤ò³«»Ï¤·¤è¤¦¤È¤·¤¿¡£</li>
- </ul>
-
- <p>¤è¤ê¿¤¯¤ÎÌäÂê²ò·è¤ÎÊýºö¤ÎÀâÌÀ¤Ï¡¢
- Apache <a href="faq/">FAQ</a> ¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="boot" id="boot">¥Ö¡¼¥È»þ¤Îµ¯Æ°</a></h2>
-
- <p>¥·¥¹¥Æ¥à¤¬¥ê¥Ö¡¼¥È¤·¤¿¸å¤Ç¤â
- ¥µ¡¼¥Ð¤¬¼Â¹Ô¤µ¤ì³¤±¤ë¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢
- <code>apachectl</code>
- ¤ò¸Æ¤Ó½Ð¤¹¤â¤Î¤ò¥·¥¹¥Æ¥à¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë
- (Ä̾ï <code>rc.local</code> ¤ä <code>rc.N</code>
- Æâ¤Î¥Õ¥¡¥¤¥ë) ¤ËÄɲ䷤ʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤ÎÊýË¡¤Ç¤Ï Apache ¤ò root ¸¢¸Â¤Çµ¯Æ°¤·¤Þ¤¹¡£
- ¤³¤ì¤ò¤¹¤ëÁ°¤Ë¡¢¥»¥­¥å¥ê¥Æ¥£¤ä¥¢¥¯¥»¥¹À©¸Â¤¬
- ŬÀÚ¤ËÀßÄꤵ¤ì¤Æ¤¤¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code>apachectl</code> ¥¹¥¯¥ê¥×¥È¤ÏÄ̾ï¤Ï¡¢É¸½àŪ¤Ê SysV init
- ¥¹¥¯¥ê¥×¥È¤È¤·¤ÆÆ°ºî¤¹¤ë¤è¤¦¤ËÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£
- <code>start</code>, <code>restart</code>, <code>stop</code>
- ¤È¤¤¤Ã¤¿°ú¿ô¤ò¤È¤Ã¤Æ¡¢<code>httpd</code>
- ¤Ø¤ÎŬÀڤʥ·¥°¥Ê¥ë¤ËÊÑ´¹¤·¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢Ä̾ï¤Ïñ¤ËŬÀÚ¤Ê init ¥Ç¥£¥ì¥¯¥È¥êÆ⤫¤é
- <code>apachectl</code> ¤Ø¥ê¥ó¥¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢
- Ç°¤Î¤¿¤á¥·¥¹¥Æ¥à¤ÎÍ×µá¤Ë¹çÃפ·¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="info" id="info">ÄɲþðÊó</a></h2>
-
- <p><a href="programs/httpd.html">httpd</a> ¤ä
- <a href="programs/apachectl.html">apachectl</a>
- ¡¢¥µ¡¼¥Ð¤Ë´Þ¤Þ¤ì¤Æ¤¤¤¿¤½¤Î¾Êä½õ¥×¥í¥°¥é¥à¤Î¡¢
- ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ë´Ø¤¹¤ëÄɲþðÊó¤Ï¡¢
- <a href="programs/">¥µ¡¼¥Ð¤ÈÊä½õ¥×¥í¥°¥é¥à</a>¥Ú¡¼¥¸¤Ë
- µ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- Apache ÇÛÉۤ˴ޤޤì¤Æ¤¤¤ëÁ´<a href="mod/">¥â¥¸¥å¡¼¥ë</a>¡¢
- ¤½¤ì¤Ë¤è¤Ã¤ÆÄ󶡤µ¤ì¤ë<a href="mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a>
- ¤Î¥É¥­¥å¥á¥ó¥È¤â¤¢¤ê¤Þ¤¹¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/invoking.html.ko.euc-kr b/docs/manual/invoking.html.ko.euc-kr
deleted file mode 100644
index 993904118a..0000000000
--- a/docs/manual/invoking.html.ko.euc-kr
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ ½ÃÀÛ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ ½ÃÀÛ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>º¸Åë ¾ÆÆÄÄ¡´Â Windows NT, 2000, XP¿¡¼­´Â ¼­ºñ½º·Î,
- Windows 95°ú ME¿¡¼­´Â ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàµÈ´Ù. ÀÚ¼¼ÇÑ
- ³»¿ëÀº <a href="platform/windows.html#winsvc">¼­ºñ½º·Î
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϱâ</a>¿Í <a href="platform/windows.html#wincons">ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϱâ</a>.</p>
-
- <p>À¯´Ð½º¿¡¼­ <a href="programs/httpd.html">httpd</a>
- ÇÁ·Î±×·¥Àº ¹é±×¶ó¿îµå¿¡¼­ °è¼Ó ¿äûÀ» ó¸®ÇÏ´Â µ¥¸óÀ¸·Î
- ½ÇÇàµÈ´Ù. ÀÌ ¹®¼­´Â <code>httpd</code>¸¦ ½ÃÀÛÇÏ´Â ¹æ¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#startup">¾î¶»°Ô ¾ÆÆÄÄ¡°¡ ½ÃÀÛÇϳª</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errors">½ÃÀÛÁß ¿À·ù</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#boot">ºÎÆÃÇÒ¶§ ½ÃÀÛÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#info">Ãß°¡ Á¤º¸</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="stopping.html">¾ÆÆÄÄ¡ Áß´Ü°ú Àç½ÃÀÛ</a></li><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">¾î¶»°Ô ¾ÆÆÄÄ¡°¡ ½ÃÀÛÇϳª</a></h2>
-
- <p>¼³Á¤ÆÄÀÏ¿¡¼­ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>ÀÌ ±âº»°ªÀÎ 80(ȤÀº
- 1024ÀÌÇÏÀÇ ´Ù¸¥ Æ÷Æ®)À̶ó¸é ÀÌ Æ¯±Ç Æ÷Æ®¿¡ ¿¬°áÇϱâÀ§ÇØ
- root ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù. ¼­¹ö´Â ½ÃÀÛÇÏ¿© ·Î±×ÆÄÀÏÀ» ¿©´Â µîÀÇ
- ¸î¸î ±âÃÊÀûÀÎ ÀÛ¾÷À» ¸¶Ä£ÈÄ, Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ±â´Ù¸®°í
- ÀÀ´äÇÏ´Â <em>ÀÚ½Ä(child)</em> ÇÁ·Î¼¼½º¸¦ ¿©·¯°³ ¶ç¿î´Ù.
- ÁÖ <code>httpd</code> ÇÁ·Î¼¼½º´Â °è¼Ó root »ç¿ëÀÚ·Î ½ÇÇàµÇÁö¸¸,
- ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº ´õ ±ÇÇÑÀÌ ÀÛÀº »ç¿ëÀÚ·Î ½ÇÇàµÈ´Ù. ÀÌ´Â
- ¼±ÅÃÇÑ <a href="mpm.html">´ÙÁßó¸® ¸ðµâ</a>·Î Á¶Á¤ÇÑ´Ù.</p>
-
- <p><a href="programs/apachectl.html">apachectl</a>
- ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ¿© <code>httpd</code> ½ÇÇàÆÄÀÏÀ» ½ÃÀÛÇϱæ
- ±ÇÀåÇÑ´Ù. ÀÌ ½ºÅ©¸³Æ®´Â <code>httpd</code>°¡ ¸î¸î
- ¿î¿µÃ¼Á¦¿¡¼­ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ È¯°æº¯¼öµéÀ»
- ¼³Á¤ÇÏ°í <code>httpd</code> ½ÇÇàÆÄÀÏÀ» ½ÃÀÛÇÑ´Ù.
- <code>apachectl</code>Àº ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®¸¦ ±×´ë·Î ³Ñ±â±â¶§¹®¿¡,
- <code>httpd</code>ÀÇ ¾î¶² ¿É¼ÇÀÌ¶óµµ <code>apachectl</code>¿¡
- »ç¿ë°¡´ÉÇÏ´Ù. ¶Ç, <code>apachectl</code> ½ºÅ©¸³Æ®ÀÇ ¾ÕºÎºÐ¿¡
- ³ª¿À´Â <code>HTTPD</code> º¯¼ö¸¦ <code>httpd</code> ½ÇÇàÆÄÀÏÀÌ
- ÀÖ´Â À§Ä¡¿Í <em>Ç×»ó</em> »ç¿ëÇÒ ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®·Î Á÷Á¢
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>httpd</code>¸¦ ½ÇÇàÇÏ¸é ¸ÕÀú <a href="configuring.html">¼³Á¤ÆÄÀÏ</a> <code>httpd.conf</code>¸¦
- ã¾Æ¼­ Àд´Ù. ÀÌ ÆÄÀÏÀÇ À§Ä¡´Â ÄÄÆÄÀÏ Áß¿¡ ÁöÁ¤Çϳª, ½ÇÇà½Ã
- ´ÙÀ½°ú °°ÀÌ <code>-f</code> ¸í·ÉÇà ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.</p>
-
-<div class="example"><p><code>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</code></p></div>
-
- <p>½ÃÀÛÇÏ´Â °úÁ¤¿¡¼­ ¹®Á¦°¡ ¾ø´Ù¸é, ¼­¹ö´Â Å͹̳ο¡¼­
- ¶³¾îÁö°í ¸í·É ÇÁ·ÒÇÁÆ®°¡ °ÅÀÇ Áï½Ã ³ª¿À°ÔµÈ´Ù. ÀÌ´Â ¼­¹ö°¡
- ½ÇÇàµÊÀ» ÀǹÌÇÑ´Ù. ºê¶ó¿ìÀú·Î ¼­¹ö¿¡ ¿¬°áÇÏ¿© <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> µð·ºÅ丮¿¡ ÀÖ´Â
- Å×½ºÆ® ÆäÀÌÁö¿Í ±× ÆäÀÌÁö¿¡ ¸µÅ©µÈ (·ÎÄÃÄ«ÇÇ) ¼³¸í¼­¸¦ º¼
- ¼ö ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errors" id="errors">½ÃÀÛÁß ¿À·ù</a></h2>
-
- <p>¾ÆÆÄÄ¡°¡ ½ÃÀÛÇÏ´Â °úÁ¤Áß¿¡ ½É°¢ÇÑ ¹®Á¦°¡ ¹ß»ýÇϸé,
- Á¾·áÇϱâ Àü¿¡ ¹®Á¦¸¦ ¾Ë¸®´Â ¹®±¸¸¦ ÄܼÖÀ̳ª <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>¿¡ ¾´´Ù. °¡Àå ÈçÇÑ ¿À·ù¹® Áß
- Çϳª´Â "<code>Unable to bind to Port ...</code>"ÀÌ´Ù.
- ÀÌ ¸Þ¼¼Áö´Â º¸Åë ´ÙÀ½ µÎ °æ¿ì¿¡ ¹ß»ýÇÑ´Ù:</p>
-
- <ul>
- <li>root »ç¿ëÀÚ·Î ·Î±×ÀÎÇÏÁö ¾Ê°í Ư±Ç Æ÷Æ®¿¡ ¼­¹ö¸¦
- ½ÃÀÛÇÏ·Á ÇÑ °æ¿ì. ȤÀº</li>
-
- <li>ÀÌ¹Ì ¾ÆÆÄÄ¡³ª ´Ù¸¥ À¥¼­¹ö°¡ »ç¿ëÁßÀÎ Æ÷Æ®¿¡
- ¼­¹ö¸¦ ½ÃÀÛÇÏ·Á ÇÑ °æ¿ì.</li>
- </ul>
-
- <p>±âŸ ¹®Á¦ÇØ°á ¹æ¹ýÀº ¾ÆÆÄÄ¡ <a href="faq/">FAQ</a>¸¦
- Âü°íÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="boot" id="boot">ºÎÆÃÇÒ¶§ ½ÃÀÛÇϱâ</a></h2>
-
- <p>½Ã½ºÅÛÀÌ Àç½ÃÀÛÇÑ ÈÄ¿¡µµ ¼­¹ö°¡ °è¼Ó ½ÇÇàµÇ±æ ¹Ù¶õ´Ù¸é,
- ½Ã½ºÅÛ ½ÃÀÛÆÄÀÏ(º¸Åë <code>rc.local</code>À̳ª <code>rc.N</code>
- µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ)¿¡ <code>apachectl</code>À» Ãß°¡Çؾß
- ÇÑ´Ù. ÀÌ °æ¿ì ¾ÆÆÄÄ¡´Â root·Î ½ÃÀ۵ȴÙ. ÀÌÀü¿¡ ¼­¹öÀÇ º¸¾ÈÀ̳ª
- Á¢±Ù Á¦ÇÑ(ÆÄÀϱÇÇÑ)ÀÌ ¿Ã¹Ù·Î ¼³Á¤µÇ¾ú´ÂÁö È®ÀÎÇ϶ó.</p>
-
- <p><code>apachectl</code>Àº Ç¥ÁØ SysV init ½ºÅ©¸³Æ®¿Í ºñ½ÁÇÏ°Ô
- µ¿ÀÛÇϵµ·Ï ¸¸µé¾îÁ³´Ù. ½ºÅ©¸³Æ®´Â ¾Æ±Ô¸ÕÆ®·Î <code>start</code>,
- <code>restart</code>, <code>stop</code>À» ¹ÞÀ¸¸é °¢°¢ ÀûÀýÇÑ
- ½Ã±×³ÎÀ» <code>httpd</code>¿¡ º¸³½´Ù. ±×·¡¼­ º¸ÅëÀº
- <code>apachectl</code>À» ÀûÀýÇÑ init µð·ºÅ丮·Î ¸µÅ©¸¦ °É¸éµÈ´Ù.
- ±×·¯³ª »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ Á¤È®ÇÑ ¿ä±¸»çÇ×À» È®ÀÎÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="info" id="info">Ãß°¡ Á¤º¸</a></h2>
-
- <p><a href="programs/httpd.html">httpd</a>¿Í <a href="programs/apachectl.html">apachectl</a>, ±âŸ ¼­¹ö¿¡
- Æ÷ÇÔµÈ Áö¿ø ÇÁ·Î±×·¥µéÀÇ ¸í·ÉÇà ¿É¼ÇÀº
- <a href="programs/">¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</a> ÆäÀÌÁö¸¦
- Âü°íÇ϶ó. ¶Ç ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡´Â ¸ðµç <a href="mod/">¸ðµâ</a>°ú
- ±×µéÀÌ Á¦°øÇÏ´Â <a href="mod/directives.html">Áö½Ã¾î</a>¿¡
- ´ëÇÑ ¹®¼­°¡ ÀÖ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/invoking.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/invoking.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/invoking.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/invoking.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/invoking.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/invoking.xml b/docs/manual/invoking.xml
deleted file mode 100644
index 7b32b75c6f..0000000000
--- a/docs/manual/invoking.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="invoking.xml.meta">
-
- <title>Starting Apache</title>
-
-<summary>
- <p>On Windows, Apache is normally run as a service on Windows
- NT, 2000 and XP, or as a console application on Windows 9x and
- ME. For details, see <a
- href="platform/windows.html#winsvc">Running Apache as a Service</a>
- and <a href="platform/windows.html#wincons">Running Apache as a
- Console Application</a>.</p>
-
- <p>On Unix, the <a href="programs/httpd.html">httpd</a> program
- is run as a daemon that executes continuously in the
- background to handle requests. This document describes how
- to invoke <code>httpd</code>.</p>
-</summary>
-
-<seealso><a href="stopping.html">Stopping and Restarting</a></seealso>
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="startup"><title>How Apache Starts</title>
-
- <p>If the <directive module="mpm_common">Listen</directive>
- specified in the configuration file is default of 80 (or any other
- port below 1024), then it is necessary to have root privileges in
- order to start apache, so that it can bind to this privileged
- port. Once the server has started and performed a few preliminary
- activities such as opening its log files, it will launch several
- <em>child</em> processes which do the work of listening for and
- answering requests from clients. The main <code>httpd</code>
- process continues to run as the root user, but the child processes
- run as a less privileged user. This is controlled by the selected
- <a href="mpm.html">Multi-Processing Module</a>.</p>
-
- <p>The recommended method of invoking the <code>httpd</code>
- executable is to use the <a
- href="programs/apachectl.html">apachectl</a> control script. This
- script sets certain environment variables that are necessary for
- <code>httpd</code> to function correctly under some operating
- systems, and then invokes the <code>httpd</code> binary.
- <code>apachectl</code> will pass through any command line
- arguments, so any <code>httpd</code> options may also be used with
- <code>apachectl</code>. You may also directly edit the
- <code>apachectl</code> script by changing the <code>HTTPD</code>
- variable near the top to specify the correct location of the
- <code>httpd</code> binary and any command-line arguments that you
- wish to be <em>always</em> present.</p>
-
- <p>The first thing that <code>httpd</code> does when it is
- invoked is to locate and read the <a
- href="configuring.html">configuration file</a>
- <code>httpd.conf</code>. The location of this file is set at
- compile-time, but it is possible to specify its location at run
- time using the <code>-f</code> command-line option as in</p>
-
-<example>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</example>
-
- <p>If all goes well during startup, the server will detach from
- the terminal and the command prompt will return almost
- immediately. This indicates that the server is up and running.
- You can then use your browser to connect to the server and view
- the test page in the <directive
- module="core">DocumentRoot</directive> directory
- and the local copy of the documentation linked from that
- page.</p>
-</section>
-
-<section id="errors"><title>Errors During Start-up</title>
-
- <p>If Apache suffers a fatal problem during startup, it will
- write a message describing the problem either to the console or
- to the <directive module="core">ErrorLog</directive> before
- exiting. One of the most common error messages is "<code>Unable
- to bind to Port ...</code>". This message is usually caused by
- either:</p>
-
- <ul>
- <li>Trying to start the server on a privileged port when not
- logged in as the root user; or</li>
-
- <li>Trying to start the server when there is another instance
- of Apache or some other web server already bound to the same
- Port.</li>
- </ul>
-
- <p>For further trouble-shooting instructions, consult the
- Apache <a href="faq/">FAQ</a>.</p>
-</section>
-
-<section id="boot"><title>Starting at Boot-Time</title>
-
- <p>If you want your server to continue running after a system
- reboot, you should add a call to <code>apachectl</code> to your
- system startup files (typically <code>rc.local</code> or a file in
- an <code>rc.N</code> directory). This will start Apache as
- root. Before doing this ensure that your server is properly
- configured for security and access restrictions.</p>
-
- <p>The <code>apachectl</code> script is designed to act like a
- standard SysV init script; it can take the arguments
- <code>start</code>, <code>restart</code>, and <code>stop</code>
- and translate them into the appropriate signals to
- <code>httpd</code>. So you can often simply link
- <code>apachectl</code> into the appropriate init directory. But be
- sure to check the exact requirements of your system.</p>
-</section>
-
-<section id="info"><title>Additional Information</title>
-
- <p>Additional information about the command-line options of <a
- href="programs/httpd.html">httpd</a> and <a
- href="programs/apachectl.html">apachectl</a> as well as other
- support programs included with the server is available on the
- <a href="programs/">Server and Supporting Programs</a> page.
- There is also documentation on all the <a
- href="mod/">modules</a> included with the Apache distribution
- and the <a href="mod/directives.html">directives</a> that they
- provide.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/invoking.xml.de b/docs/manual/invoking.xml.de
deleted file mode 100644
index 86a8b0e492..0000000000
--- a/docs/manual/invoking.xml.de
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="invoking.xml.meta">
-
- <title>Apache starten</title>
-
-<summary>
- <p>Unter Windows l&#228;uft der Apache &#252;blicherweise als Dienst
- (Windows NT, 2000 und XP) oder als Konsolenanwendung (Windows 9x und
- ME). F&#252;r Einzelheiten lesen Sie bitte <a
- href="platform/windows.html#winsvc">Apache als Dienst betreiben</a>
- und <a href="platform/windows.html#wincons"
- >Apache als Konsolenanwendung betreiben</a>.</p>
-
- <p>Unter Unix wird das <a
- href="programs/httpd.html">httpd</a>-Programm als Daemon ausgef&#252;hrt,
- der im Hintergrund fortlaufend aktiv ist, um Anfragen zu bearbeiten.
- Dieses Dokument beschreibt, wie <code>httpd</code> aufgerufen wird.</p>
-</summary>
-
-<seealso><a href="stopping.html">Beenden und Neustarten</a></seealso>
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="startup"><title>Wie der Apache startet</title>
-
- <p>Wenn die in der Konfigurationsdatei angegebene <directive
- module="mpm_common">Listen</directive>-Anweisung auf die Voreinstellung
- von 80 gesetzt ist (oder einen anderen Port unterhalb von 1024), dann
- m&#252;ssen Sie root-Berechtigung besitzen, um den Apache starten
- zu k&#246;nnen. Nur dann kann er sich an diesen privilegierten
- Port binden. Sobald der Server gestartet ist und einige vorbereitende
- Aktionen wie das &#214;ffnen seiner Log-Dateien ausgef&#252;hrt hat,
- startet er mehrere <em>Kind</em>-Prozesse, welche die Arbeit erledigen:
- das Lauschen auf und Beantworten von Anfragen von Clients. Der
- Haupt-<code>httpd</code>-Prozess l&#228;uft unter dem Benutzer root
- weiter, die Kind-Prozesse jedoch werden unter weniger privilegierten
- Benutzerkennungen ausgef&#252;hrt. Dies wird von dem ausgew&#228;hlten
- <a href="mpm.html">Multi-Processing-Modul</a> gesteuert.</p>
-
- <p>Die Verwendung des Steuerskripts <a
- href="programs/apachectl.html">apachectl</a> ist die empfohlene Methode,
- das <code>httpd</code>-Programm zu starten. Dieses Skript setzt
- verschiedene Umgebungsvariablen, die f&#252;r die korrekte Funktion von
- <code>httpd</code> unter einigen Betriebssystemen notwendig sind, und
- startet dann das <code>httpd</code>-Programm. <code>apachectl</code>
- reicht alle Kommandozeilenargumente durch, so dass alle
- <code>httpd</code>-Optionen auch mit <code>apachectl</code>
- verwendet werden k&#246;nnen. Um den korrekten Ablageort des
- <code>httpd</code>-Programms sowie einige Kommandozeilenargumente
- anzugeben, die Sie <em>immer</em> verwenden m&#246;chten, k&#246;nnen
- Sie auch das Skript <code>apachectl</code> direkt editieren und die
- Variable <code>HTTPD</code> am Anfang &#228;ndern.</p>
-
- <p>Das Erste was <code>httpd</code> macht, wenn es startet, ist das
- Suchen und Einlesen der <a
- href="configuring.html">Konfigurationsdatei</a> <code>httpd.conf</code>.
- Der Ablageort dieser Datei wird zur Kompilierungszeit festgelegt. Es ist
- aber m&#246;glich, den Ablageort zur Laufzeit anzugeben, indem die
- Kommandozeilenoption <code>-f</code> wie folgt verwendet wird:</p>
-
- <example>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</example>
-
- <p>Wenn w&#228;hrend des Starts alles gutgeht, trennt sich der Server
- vom Terminal ab und die Eingabeaufforderung erscheint gleich darauf
- wieder. Dies zeigt an, dass der Server hochgefahren ist und l&#228;uft.
- Sie k&#246;nnen nun Ihren Browser benutzen, um Verbindung zum Server
- aufzunehmen und sich die Testseite im <directive
- module="core">DocumentRoot</directive>-Verzeichnis anzusehen wie auch
- die lokale Kopie der Dokumentation, die von dieser Seite aus verlinkt
- ist.</p>
-</section>
-
-<section id="errors"><title>Fehler w&#228;hrend des Hochfahrens</title>
-
- <p>Wenn der Apache w&#228;hrend des Hochfahrens einen schweren Fehler
- feststellt, schreibt er entweder eine Nachricht, die das Problem
- n&#228;her schildert, auf die Konsole oder ins <directive
- module="core">ErrorLog</directive>, bevor er sich selbst beendet.
- Eine der h&#228;ufigsten Fehlermeldungen ist "<code>Unable
- to bind to Port ...</code>" <transnote>"Kann nicht an Port ...
- binden"</transnote>. Diese Meldung wird &#252;blicherweise verursacht:</p>
-
- <ul>
- <li>entweder durch den Versuch, den Server an einem privilegierten
- Port zu starten, w&#228;hrend man nicht als Benutzer root angemeldet
- ist,</li>
-
- <li>oder durch den Versuch, den Server zu starten, wenn bereits eine
- andere Instanz des Apache oder ein anderer Webserver an den gleichen
- Port gebunden ist.</li>
- </ul>
-
- <p>F&#252;r weitere Anleitungen zur Fehlerbehebung lesen Sie bitte die
- Apache-<a href="faq/">FAQ</a>.</p>
-</section>
-
-<section id="boot"><title>Beim Bootvorgang starten</title>
-
- <p>Wenn Sie m&#246;chten, dass Ihr Server direkt nach einem
- System-Neustart weiterl&#228;uft, sollten Sie einen Aufruf von
- <code>apachectl</code> zu den Startdateien Ihres Systems hinzuf&#252;gen
- (&#252;blicherweise <code>rc.local</code> oder eine Datei in einem
- <code>rc.N</code>-Verzeichnis). Dies startet den Apache als root.
- Stellen Sie zuvor jedoch sicher, dass Ihr Server hinsichtlich
- Sicherheit und Zugriffsbeschr&#228;nkungen richtig konfiguriert ist.</p>
-
- <p>Das <code>apachectl</code>-Skript ist daf&#252;r ausgelegt, wie ein
- Standard-SysV-init-Skript zu arbeiten. Es akzeptiert die Argumente
- <code>start</code>, <code>restart</code> und <code>stop</code>
- und &#252;bersetzt sie in die entsprechenden Signale f&#252;r
- <code>httpd</code>. Daher k&#246;nnen Sie oftmals
- einfach <code>apachectl</code> in das entsprechende init-Verzeichnis
- linken. &#220;berpr&#252;fen Sie bitte auf jeden Fall die genauen
- Anforderungen Ihres Systems.</p>
-</section>
-
-<section id="info"><title>Weitere Informationen</title>
-
- <p>Weitere Informationen &#252;ber Kommandozeilenoptionen von <a
- href="programs/httpd.html">httpd</a> und <a
- href="programs/apachectl.html">apachectl</a> sowie anderen
- Hilfsprogrammen, die dem Server beigef&#252;gt sind, sind auf der
- Seite <a href="programs/">Server und Hilfsprogramme</a>
- verf&#252;gbar. Es existiert au&#223;erdem eine Dokumentation
- aller in der Apache-Distribution enthaltenen <a
- href="mod/">Module</a> und der von ihnen bereitgestellten
- <a href="mod/directives.html">Direktiven</a>.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/invoking.xml.es b/docs/manual/invoking.xml.es
deleted file mode 100644
index 61ab30788e..0000000000
--- a/docs/manual/invoking.xml.es
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="invoking.xml.meta">
-
- <title>iniciar Apache</title>
-
-<summary>
- <p>En Windows, Apache se ejecuta normalmente como un servicio en
- Windows NT, 2000 and XP, y como una aplicacion de consola en
- Windows 9x y ME. Para obtener m&#225;s informaci&#243;n, consulte
- <a href="platform/windows.html#winsvc">Ejecutar Apache como un
- servicio</a> y <a href="platform/windows.html#wincons">Ejecutar
- Apache como una aplicaci&#243;n de consola</a>.</p>
-
- <p>En Unix, el programa <a href="programs/httpd.html">httpd</a> se
- ejecuta como un demonio (daemon) de forma silenciosa y atiende las
- peticiones que le lleguen. Este documento describe c&#243;mo
- invocar el programa <code>httpd</code>.</p>
-</summary>
-
-<seealso><a href="stopping.html">Parar y reiniciar Apache</a></seealso>
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="startup"><title>C&#243;mo iniciar Apache</title>
-
- <p>Si el puerto especificado en la directiva <directive
- module="mpm_common">Listen</directive> del fichero de
- configuraci&#243;n es el que viene por defecto, es decir, el
- puerto 80 (o cualquier otro puerto por debajo del 1024), entonces
- es necesario tener privilegios de usuario root (superusuario) para
- iniciar Apache, de modo que pueda establecerse una conexi&#243;n a
- trav&#233;s de esos puertos privilegiados. Una vez que el servidor
- Apache se ha iniciado y ha completado algunas tareas preliminares,
- tales como abrir sus ficheros log, lanzar&#225; varios procesos,
- procesos <em>hijo</em>, que hacen el trabajo de escuchar y atender
- las peticiones de los clientes. El proceso principal,
- <code>httpd</code> contin&#250;a ejecutandose como root, pero los
- procesos hijo se ejecutan con menores privilegios de usuario.
- Esto lo controla el <a href="mpm.html">M&#243;dulo de
- MultiProcesamiento (MPM)</a> seleccionado.</p>
-
- <p>La forma recomendada para invocar el ejecutable
- <code>httpd</code> es usando el script de control <a
- href="programs/apachectl.html">apachectl</a>. Este script fija
- determinadas variables de entorno que son necesarias para que
- <code>httpd</code> funcione correctamente en el sistema operativo,
- y despu&#233;s invoca el binario <code>httpd</code>.
- <code>apachectl</code> pasa a httpd cualquier argumento que se le
- pase a trav&#233;s de la l&#237;nea de comandos, de forma que
- cualquier opci&#243;n de <code>httpd</code> puede ser usada
- tambi&#233;n con <code>apachectl</code>. Puede editar
- directamente el script <code>apachectl</code> y cambiar la
- variable <code>HTTPD</code> variable que est&#225; al principio y
- que especifica la ubicaci&#243;n exacta en la que est&#225; el
- binario <code>httpd</code> y cualquier argumento de l&#237;nea de
- comandos que quiera que est&#233; <em>siempre</em> presente.</p>
-
- <p>La primera cosa que hace <code>httpd</code> cuando es invocado
- es localizar y leer el <a href="configuring.html">fichero de
- configuraci&#243;n</a> <code>httpd.conf</code>. El lugar en el que
- est&#225; ese fichero se determina al compilar, pero tambi&#233;n
- es posible especificar la ubicaci&#243;n en la que se encuentra al
- iniciar el servidor Apache usando la opci&#243;n de l&#237;nea de
- comandos <code>-f</code></p>
-
-<example>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</example>
-
- <p>Si todo va bien durante el arranque, la sesi&#243;n de terminal
- se suspender&#225; un momento y volver&#225; a estar activa casi
- inmediatamente. Esto quiere decir que el servidor est&#225; activo
- y funcionando. Puede usar su navegador para conectarse al
- servidor y ver la pagina de prueba que hay en el directorio
- <directive module="core">DocumentRoot</directive> y la copia local
- de esta documentaci&#243;n a la que se puede acceder desde esa
- p&#225;gina.</p>
-</section>
-
-<section id="errors"><title>Errores Durante el Arranque</title>
-
- <p>Si Apache encuentra una error irrecuperable durante el
- arranque, escribir&#225; un mensaje describiendo el problema en la
- consola o en el archivo <directive
- module="core">ErrorLog</directive> antes de abortar la
- ejecuci&#243;n. Uno de los mensajes de error m&#225;s comunes es
- "<code>Unable to bind to Port ...</code>". Cuando se recibe este
- mensaje es normalmente por alguna de las siguientes razones:</p>
-
- <ul>
- <li>Est&#225; intentando iniciar el servidor Apache en un puerto
- privilegiado (del 0 al 1024) sin haber hecho login como usuario
- root; &#243;</li>
-
- <li>Est&#225; intentando iniciar el servidor Apache mientras
- est&#225; ya ejecutando Apache o alg&#250;n otro servidor web en
- el mismo puerto.</li>
- </ul>
-
- <p>Puede encontrar m&#225;s informaci&#243;n sobre c&#243;mo
- solucionar problemas, en la secci&#243;n de <a
- href="faq/">Preguntas Frecuentes</a> de Apache.</p>
-</section>
-
-<section id="boot"><title>Iniciar Apache al Iniciar el Sistema</title>
-
- <p>Si quiere que el servidor Apache contin&#250; su ejecuci&#243;n
- despu&#233;s de reiniciar el sistema, debe a&#241;adir una llamada
- a <code>apachectl</code> en sus archivos de arranque (normalmente
- <code>rc.local</code> o un fichero en ese directorio del tipo
- <code>rc.N</code>). Esto iniciar&#225; Apache como usuario
- root. Antes de hacer esto, aseg&#250;rese de que la
- configuraci&#243;n de seguridad y las restricciones de acceso de
- su servidor Apache est&#225;n correctamente configuradas.</p>
-
- <p>El script <code>apachectl</code> est&#225; dise&#241;ado para
- actuar como un script estandar de tipo SysV init; puede tomar los
- argumentos <code>start</code>, <code>restart</code>, y
- <code>stop</code> y traducirlos en las se&#241;ales apropiadas
- para <code>httpd</code>. De esta manera, casi siempre puede
- simplemente enlazar <code>apachectl</code> con el directorio init
- adecuado. Pero aseg&#250;rese de comprobar los requisitos exactos
- de su sistema.</p>
-</section>
-
-<section id="info"><title>Informaci&#243;n Adicional</title>
-
- <p>En la secci&#243;n <a href="programs/">El Servidor y Programas
- de Soporte </a> puede encontrar m&#225;s informaci&#243;n sobre
- las opciones de l&#237;nea de comandos que puede pasar a <a
- href="programs/httpd.html">httpd</a> y <a
- href="programs/apachectl.html">apachectl</a> asi como sobre otros
- programas de soporte incluidos con el servidor Apache.
- Tambi&#233;n hay documentaci&#243;n sobre todos los <a
- href="mod/">m&#243;dulos</a> incluidos con la distribucion de
- Apache y sus correspondientes <a
- href="mod/directives.html">directivas</a> asociadas.</p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/invoking.xml.ja b/docs/manual/invoking.xml.ja
deleted file mode 100644
index cca986734a..0000000000
--- a/docs/manual/invoking.xml.ja
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="invoking.xml.meta">
-
- <title>Apache $B$N5/F0(B</title>
-
-<summary>
- <p>Windows $B>e$G$O!"(BApache $B$ODL>o$O(B
- Windows NT, 2000, XP $B$G$O%5!<%S%9$H$7$F!"(BWindows 9x, ME
- $B$G$O%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F<B9T$5$l$^$9!#(B
- $B>\:Y$K4X$7$F$O!"!V(B<a href="platform/windows.html#winsvc">
- $B%5!<%S%9$H$7$F<B9T$9$k(B</a>$B!W$H!V(B<a
- href="platform/windows.html#wincons">
- $B%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F<B9T$9$k(B</a>$B!W$r$4Mw2<$5$$!#(B</p>
-
- <p>Unix$B$G$O!"(B<a href="programs/httpd.html">httpd</a>
- $B%W%m%0%i%`$,!"%P%C%/%0%i%&%s%I$G>o$K%j%/%(%9%H=hM}$r9T$&(B
- $B%G!<%b%s$H$7$F<B9T$5$l$^$9!#$3$NJ8=q$G$O$I$N$h$&$K(B
- <code>httpd</code> $B$r5/F0$9$k$+$K$D$$$F5-=R$7$F$$$^$9!#(B</p>
-</summary>
-
-<seealso><a href="stopping.html">$BDd;_$H:F5/F0(B</a></seealso>
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="startup"><title>Apache $B$N5/F0J}K!(B</title>
-
- <p>$B$b$7!"@_Dj%U%!%$%kCf$G;XDj$5$l$F$$$k(B
- <directive module="mpm_common">Listen</directive>
- $B$,%G%U%)%k%H$N(B 80 ($B$b$7$/$O(B 1024 $B0J2<$NB>$N%]!<%H(B)
- $B$G$"$k>l9g$O!"(BApache $B$r5/F0$9$k$?$a$K$O(B root
- $B8"8B$,I,MW$K$J$j$^$9$,!"(B
- $B$3$l$O$3$NFC8"%]!<%H$K%P%$%s%I$9$k$?$a$G$9!#(B
- $B5/F0$7$F!"0lEY%m%0%U%!%$%k$r3+$/$H$$$C$?=`Hw$N$?$a$N(B
- $BF0:n$r4v$D$+<B9T$7$?8e$O!"%/%i%$%"%s%H$+$i$N%j%/%(%9%H$KBP$9$k(B
- listen $B$H1~Ez$r<B:]$K9T$&(B<em>$B;R(B</em>$B%W%m%;%9$r5/F0$7$^$9!#(B
- $B%a%$%s$N(B <code>httpd</code> $B%W%m%;%9$O(B root $B8"8B$GAv$jB3$1$^$9$,!"(B
- $B;R%W%m%;%9$O$b$C$HDc$$8"8B$GAv$j$^$9!#(B
- $B$3$l$OA*Br$7$?(B<a
- href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a>$B$G@)8f$5$l$^$9!#(B</p>
-
- <p>$B?d>)$N(B <code>httpd</code> $B<B9T%W%m%0%i%`$N5/F0J}K!$O!"(B
- <a href="programs/apachectl.html">apachectl</a>
- $B@)8f%9%/%j%W%H$r;HMQ$9$kJ}K!$G$9!#$3$N%9%/%j%W%H$O!"(B<code>httpd</code>
- $B$,%*%Z%l!<%F%#%s%0%7%9%F%`>e$G@5>o$KF0:n$9$k$h$&$KI,MW$J4D6-JQ?t$r(B
- $BE,@Z$K@_Dj$7$F!"(B<code>httpd</code> $B%P%$%J%j$r5/F0$7$^$9!#(B
- <code>apachectl</code> $B$O$I$s$J%3%^%s%I%i%$%s0z?t$bDL2a$5$;$^$9$N$G!"(B
- <code>httpd</code> $B$N$I$N%3%^%s%I%i%$%s%*%W%7%g%s$b(B
- <code>apchectl</code> $B$N%*%W%7%g%s$H$7$F;HMQ$G$-$^$9!#(B
- $B$^$?!"(B<code>apchectl</code> $B%9%/%j%W%H$rD>@\JT=8$7!"(B
- $B%9%/%j%W%H@hF,IU6a$N(B <code>HTTPD</code> $BJQ?t$rJQ99$9$k$3$H$G!"(B
- <code>httpd</code> $B%P%$%J%j$N@5$7$$0LCV$r;XDj$7$?$j!"(B<em>$B>o$K(B</em>
- $BIU2C$5$;$k%3%^%s%I%i%$%s0z?t$r;XDj$7$?$j$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><code>httpd</code> $B$,5/F0$5$l$F$^$::G=i$K$9$k$3$H$O!"(B
- <a href="configuring.html">$B@_Dj%U%!%$%k(B</a>
- <code>httpd.conf</code> $B$N0LCV$rFCDj$7$FFI$_9~$`$3$H$G$9!#(B
- $B$3$N%U%!%$%k$N0LCV$O%3%s%Q%$%k;~$K@_Dj$5$l$^$9$,!"<B9T;~$K(B
- <code>-f</code> $B%3%^%s%I%i%$%s%*%W%7%g%s$r;H$C$F(B
- $B0LCV$r;XDj$9$k$3$H$b$G$-$^$9!#Nc$($P<!$N$h$&$K$G$9!#(B</p>
-
-<example>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</example>
-
- <p>$B%9%?!<%H%"%C%W$,K|;v>e<j$/$$$C$?$i!"%5!<%P$O%?!<%_%J%k$+$i(B
- $B@Z$jN%$5$l$F!"%3%^%s%I%W%m%s%W%H$,B(:B$KLa$C$F$/$k$G$7$g$&!#(B
- $B$3$l$O%5!<%P$,5/F0$7$F$$$k>uBV$r<($7$F$$$^$9!#(B
- $B$=$N8e$O%V%i%&%6$G%5!<%P$K@\B3$7$F!"(B
- <directive module="core">DocumentRoot</directive>
- $B%G%#%l%/%H%j$N%F%9%H%Z!<%8$d$=$3$+$i%j%s%/$5$l$F$$$k(B
- $B%m!<%+%k$N%I%-%e%a%s%H$r8+$k$3$H$,$G$-$k$G$7$g$&!#(B</p>
-</section>
-
-<section id="errors"><title>$B5/F0;~$N%(%i!<(B</title>
-
- <p>Apache $B$O!"5/F0;~$KCWL?E*$JLdBj$KAx6x$9$k$H!"(B
- $B=*N;$9$kA0$K!"%3%s%=!<%k$+(B
- <directive module="core">ErrorLog</directive>
- $B$N$I$A$i$+$KLdBj$r5-=R$7$?%a%C%;!<%8$r=PNO$7$^$9!#(B
- $B:G$b$h$/$"$k%(%i!<%a%C%;!<%8$O(B
- $B!V(B<code>Unable to bind to Port ...</code>$B!W(B
- $B$G$9!#$3$N%a%C%;!<%8$OIaDL$O<!$N$I$A$i$+$,860x$G$9!#(B</p>
-
- <ul>
- <li>root $B$G%m%0%$%s$7$F$$$J$$;~$K!"(B
- $BFC8"%]!<%H$G%5!<%P$r5/F0$7$h$&$H$7$?!#(B</li>
-
- <li>$BF1$8%]!<%H$K4{$K%P%$%s%I$5$l$F$$$k(B Apache
- $B$,$b$&0l$D$"$k$H$-$dB>$N%&%'%V%5!<%P$,B8:_$7$F$$$k;~$K!"(B
- $B%5!<%P$r3+;O$7$h$&$H$7$?!#(B</li>
- </ul>
-
- <p>$B$h$jB?$/$NLdBj2r7h$NJ}:v$N@bL@$O!"(B
- Apache <a href="faq/">FAQ</a> $B$r$4Mw2<$5$$!#(B</p>
-</section>
-
-<section id="boot"><title>$B%V!<%H;~$N5/F0(B</title>
-
- <p>$B%7%9%F%`$,%j%V!<%H$7$?8e$G$b(B
- $B%5!<%P$,<B9T$5$lB3$1$k$h$&$K$7$?$$>l9g$O!"(B
- <code>apachectl</code>
- $B$r8F$S=P$9$b$N$r%7%9%F%`%9%?!<%H%"%C%W%U%!%$%k(B
- ($BDL>o(B <code>rc.local</code> $B$d(B <code>rc.N</code>
- $BFb$N%U%!%$%k(B) $B$KDI2C$7$J$1$l$P$J$j$^$;$s!#(B
- $B$3$NJ}K!$G$O(B Apache $B$r(B root $B8"8B$G5/F0$7$^$9!#(B
- $B$3$l$r$9$kA0$K!"%;%-%e%j%F%#$d%"%/%;%9@)8B$,(B
- $BE,@Z$K@_Dj$5$l$F$$$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B</p>
-
- <p><code>apachectl</code> $B%9%/%j%W%H$ODL>o$O!"I8=`E*$J(B SysV init
- $B%9%/%j%W%H$H$7$FF0:n$9$k$h$&$K@_7W$5$l$F$$$^$9!#(B
- <code>start</code>, <code>restart</code>, <code>stop</code>
- $B$H$$$C$?0z?t$r$H$C$F!"(B<code>httpd</code>
- $B$X$NE,@Z$J%7%0%J%k$KJQ49$7$^$9!#(B
- $B$G$9$+$i!"DL>o$OC1$KE,@Z$J(B init $B%G%#%l%/%H%jFb$+$i(B
- <code>apachectl</code> $B$X%j%s%/$9$k$3$H$,$G$-$^$9!#$7$+$7!"(B
- $BG0$N$?$a%7%9%F%`$NMW5a$K9gCW$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B</p>
-</section>
-
-<section id="info"><title>$BDI2C>pJs(B</title>
-
- <p><a href="programs/httpd.html">httpd</a> $B$d(B
- <a href="programs/apachectl.html">apachectl</a>
- $B!"%5!<%P$K4^$^$l$F$$$?$=$NB>Jd=u%W%m%0%i%`$N!"(B
- $B%3%^%s%I%i%$%s%*%W%7%g%s$K4X$9$kDI2C>pJs$O!"(B
- <a href="programs/">$B%5!<%P$HJd=u%W%m%0%i%`(B</a>$B%Z!<%8$K(B
- $B5-:\$5$l$F$$$^$9!#(B
- Apache $BG[I[$K4^$^$l$F$$$kA4(B<a href="mod/">$B%b%8%e!<%k(B</a>$B!"(B
- $B$=$l$K$h$C$FDs6!$5$l$k(B<a href="mod/directives.html">$B%G%#%l%/%F%#%V(B</a>
- $B$N%I%-%e%a%s%H$b$"$j$^$9!#(B</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/invoking.xml.ko b/docs/manual/invoking.xml.ko
deleted file mode 100644
index d687cf9b0e..0000000000
--- a/docs/manual/invoking.xml.ko
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="invoking.xml.meta">
-
- <title>¾ÆÆÄÄ¡ ½ÃÀÛ</title>
-
-<summary>
- <p>º¸Åë ¾ÆÆÄÄ¡´Â Windows NT, 2000, XP¿¡¼­´Â ¼­ºñ½º·Î,
- Windows 95°ú ME¿¡¼­´Â ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàµÈ´Ù. ÀÚ¼¼ÇÑ
- ³»¿ëÀº <a href="platform/windows.html#winsvc">¼­ºñ½º·Î
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϱâ</a>¿Í <a
- href="platform/windows.html#wincons">ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϱâ</a>.</p>
-
- <p>À¯´Ð½º¿¡¼­ <a href="programs/httpd.html">httpd</a>
- ÇÁ·Î±×·¥Àº ¹é±×¶ó¿îµå¿¡¼­ °è¼Ó ¿äûÀ» ó¸®ÇÏ´Â µ¥¸óÀ¸·Î
- ½ÇÇàµÈ´Ù. ÀÌ ¹®¼­´Â <code>httpd</code>¸¦ ½ÃÀÛÇÏ´Â ¹æ¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-</summary>
-
-<seealso><a href="stopping.html">¾ÆÆÄÄ¡ Áß´Ü°ú Àç½ÃÀÛ</a></seealso>
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="startup"><title>¾î¶»°Ô ¾ÆÆÄÄ¡°¡ ½ÃÀÛÇϳª</title>
-
- <p>¼³Á¤ÆÄÀÏ¿¡¼­ <directive
- module="mpm_common">Listen</directive>ÀÌ ±âº»°ªÀÎ 80(ȤÀº
- 1024ÀÌÇÏÀÇ ´Ù¸¥ Æ÷Æ®)À̶ó¸é ÀÌ Æ¯±Ç Æ÷Æ®¿¡ ¿¬°áÇϱâÀ§ÇØ
- root ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù. ¼­¹ö´Â ½ÃÀÛÇÏ¿© ·Î±×ÆÄÀÏÀ» ¿©´Â µîÀÇ
- ¸î¸î ±âÃÊÀûÀÎ ÀÛ¾÷À» ¸¶Ä£ÈÄ, Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ±â´Ù¸®°í
- ÀÀ´äÇÏ´Â <em>ÀÚ½Ä(child)</em> ÇÁ·Î¼¼½º¸¦ ¿©·¯°³ ¶ç¿î´Ù.
- ÁÖ <code>httpd</code> ÇÁ·Î¼¼½º´Â °è¼Ó root »ç¿ëÀÚ·Î ½ÇÇàµÇÁö¸¸,
- ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº ´õ ±ÇÇÑÀÌ ÀÛÀº »ç¿ëÀÚ·Î ½ÇÇàµÈ´Ù. ÀÌ´Â
- ¼±ÅÃÇÑ <a href="mpm.html">´ÙÁßó¸® ¸ðµâ</a>·Î Á¶Á¤ÇÑ´Ù.</p>
-
- <p><a href="programs/apachectl.html">apachectl</a>
- ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ¿© <code>httpd</code> ½ÇÇàÆÄÀÏÀ» ½ÃÀÛÇϱæ
- ±ÇÀåÇÑ´Ù. ÀÌ ½ºÅ©¸³Æ®´Â <code>httpd</code>°¡ ¸î¸î
- ¿î¿µÃ¼Á¦¿¡¼­ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ È¯°æº¯¼öµéÀ»
- ¼³Á¤ÇÏ°í <code>httpd</code> ½ÇÇàÆÄÀÏÀ» ½ÃÀÛÇÑ´Ù.
- <code>apachectl</code>Àº ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®¸¦ ±×´ë·Î ³Ñ±â±â¶§¹®¿¡,
- <code>httpd</code>ÀÇ ¾î¶² ¿É¼ÇÀÌ¶óµµ <code>apachectl</code>¿¡
- »ç¿ë°¡´ÉÇÏ´Ù. ¶Ç, <code>apachectl</code> ½ºÅ©¸³Æ®ÀÇ ¾ÕºÎºÐ¿¡
- ³ª¿À´Â <code>HTTPD</code> º¯¼ö¸¦ <code>httpd</code> ½ÇÇàÆÄÀÏÀÌ
- ÀÖ´Â À§Ä¡¿Í <em>Ç×»ó</em> »ç¿ëÇÒ ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®·Î Á÷Á¢
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>httpd</code>¸¦ ½ÇÇàÇÏ¸é ¸ÕÀú <a
- href="configuring.html">¼³Á¤ÆÄÀÏ</a> <code>httpd.conf</code>¸¦
- ã¾Æ¼­ Àд´Ù. ÀÌ ÆÄÀÏÀÇ À§Ä¡´Â ÄÄÆÄÀÏ Áß¿¡ ÁöÁ¤Çϳª, ½ÇÇà½Ã
- ´ÙÀ½°ú °°ÀÌ <code>-f</code> ¸í·ÉÇà ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.</p>
-
-<example>/usr/local/apache2/bin/apachectl -f
- /usr/local/apache2/conf/httpd.conf</example>
-
- <p>½ÃÀÛÇÏ´Â °úÁ¤¿¡¼­ ¹®Á¦°¡ ¾ø´Ù¸é, ¼­¹ö´Â Å͹̳ο¡¼­
- ¶³¾îÁö°í ¸í·É ÇÁ·ÒÇÁÆ®°¡ °ÅÀÇ Áï½Ã ³ª¿À°ÔµÈ´Ù. ÀÌ´Â ¼­¹ö°¡
- ½ÇÇàµÊÀ» ÀǹÌÇÑ´Ù. ºê¶ó¿ìÀú·Î ¼­¹ö¿¡ ¿¬°áÇÏ¿© <directive
- module="core">DocumentRoot</directive> µð·ºÅ丮¿¡ ÀÖ´Â
- Å×½ºÆ® ÆäÀÌÁö¿Í ±× ÆäÀÌÁö¿¡ ¸µÅ©µÈ (·ÎÄÃÄ«ÇÇ) ¼³¸í¼­¸¦ º¼
- ¼ö ÀÖ´Ù.</p>
-</section>
-
-<section id="errors"><title>½ÃÀÛÁß ¿À·ù</title>
-
- <p>¾ÆÆÄÄ¡°¡ ½ÃÀÛÇÏ´Â °úÁ¤Áß¿¡ ½É°¢ÇÑ ¹®Á¦°¡ ¹ß»ýÇϸé,
- Á¾·áÇϱâ Àü¿¡ ¹®Á¦¸¦ ¾Ë¸®´Â ¹®±¸¸¦ ÄܼÖÀ̳ª <directive
- module="core">ErrorLog</directive>¿¡ ¾´´Ù. °¡Àå ÈçÇÑ ¿À·ù¹® Áß
- Çϳª´Â "<code>Unable to bind to Port ...</code>"ÀÌ´Ù.
- ÀÌ ¸Þ¼¼Áö´Â º¸Åë ´ÙÀ½ µÎ °æ¿ì¿¡ ¹ß»ýÇÑ´Ù:</p>
-
- <ul>
- <li>root »ç¿ëÀÚ·Î ·Î±×ÀÎÇÏÁö ¾Ê°í Ư±Ç Æ÷Æ®¿¡ ¼­¹ö¸¦
- ½ÃÀÛÇÏ·Á ÇÑ °æ¿ì. ȤÀº</li>
-
- <li>ÀÌ¹Ì ¾ÆÆÄÄ¡³ª ´Ù¸¥ À¥¼­¹ö°¡ »ç¿ëÁßÀÎ Æ÷Æ®¿¡
- ¼­¹ö¸¦ ½ÃÀÛÇÏ·Á ÇÑ °æ¿ì.</li>
- </ul>
-
- <p>±âŸ ¹®Á¦ÇØ°á ¹æ¹ýÀº ¾ÆÆÄÄ¡ <a href="faq/">FAQ</a>¸¦
- Âü°íÇ϶ó.</p>
-</section>
-
-<section id="boot"><title>ºÎÆÃÇÒ¶§ ½ÃÀÛÇϱâ</title>
-
- <p>½Ã½ºÅÛÀÌ Àç½ÃÀÛÇÑ ÈÄ¿¡µµ ¼­¹ö°¡ °è¼Ó ½ÇÇàµÇ±æ ¹Ù¶õ´Ù¸é,
- ½Ã½ºÅÛ ½ÃÀÛÆÄÀÏ(º¸Åë <code>rc.local</code>À̳ª <code>rc.N</code>
- µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ)¿¡ <code>apachectl</code>À» Ãß°¡Çؾß
- ÇÑ´Ù. ÀÌ °æ¿ì ¾ÆÆÄÄ¡´Â root·Î ½ÃÀ۵ȴÙ. ÀÌÀü¿¡ ¼­¹öÀÇ º¸¾ÈÀ̳ª
- Á¢±Ù Á¦ÇÑ(ÆÄÀϱÇÇÑ)ÀÌ ¿Ã¹Ù·Î ¼³Á¤µÇ¾ú´ÂÁö È®ÀÎÇ϶ó.</p>
-
- <p><code>apachectl</code>Àº Ç¥ÁØ SysV init ½ºÅ©¸³Æ®¿Í ºñ½ÁÇÏ°Ô
- µ¿ÀÛÇϵµ·Ï ¸¸µé¾îÁ³´Ù. ½ºÅ©¸³Æ®´Â ¾Æ±Ô¸ÕÆ®·Î <code>start</code>,
- <code>restart</code>, <code>stop</code>À» ¹ÞÀ¸¸é °¢°¢ ÀûÀýÇÑ
- ½Ã±×³ÎÀ» <code>httpd</code>¿¡ º¸³½´Ù. ±×·¡¼­ º¸ÅëÀº
- <code>apachectl</code>À» ÀûÀýÇÑ init µð·ºÅ丮·Î ¸µÅ©¸¦ °É¸éµÈ´Ù.
- ±×·¯³ª »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ Á¤È®ÇÑ ¿ä±¸»çÇ×À» È®ÀÎÇ϶ó.</p>
-</section>
-
-<section id="info"><title>Ãß°¡ Á¤º¸</title>
-
- <p><a href="programs/httpd.html">httpd</a>¿Í <a
- href="programs/apachectl.html">apachectl</a>, ±âŸ ¼­¹ö¿¡
- Æ÷ÇÔµÈ Áö¿ø ÇÁ·Î±×·¥µéÀÇ ¸í·ÉÇà ¿É¼ÇÀº
- <a href="programs/">¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</a> ÆäÀÌÁö¸¦
- Âü°íÇ϶ó. ¶Ç ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡´Â ¸ðµç <a href="mod/">¸ðµâ</a>°ú
- ±×µéÀÌ Á¦°øÇÏ´Â <a href="mod/directives.html">Áö½Ã¾î</a>¿¡
- ´ëÇÑ ¹®¼­°¡ ÀÖ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/invoking.xml.meta b/docs/manual/invoking.xml.meta
deleted file mode 100644
index 46c96fbb2a..0000000000
--- a/docs/manual/invoking.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>invoking</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/license.html b/docs/manual/license.html
deleted file mode 100644
index 11472e452b..0000000000
--- a/docs/manual/license.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: license.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/license.html.en b/docs/manual/license.html.en
deleted file mode 100644
index 7ede900bb1..0000000000
--- a/docs/manual/license.html.en
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>The Apache License, Version 2.0 - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>The Apache License, Version 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/license.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
- <p class="centered">Apache License<br />
- Version 2.0, January 2004<br />
- <a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a><br /><br />
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
-
- <ol>
- <li><strong>Definitions</strong><br />
-
- <p>"License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.</p>
-
- <p>"Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.</p>
-
- <p>"Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.</p>
-
- <p>"You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.</p>
-
- <p>"Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.</p>
-
- <p>"Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.</p>
-
- <p>"Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).</p>
-
- <p>"Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.</p>
-
- <p>"Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."</p>
-
- <p>"Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.</p></li>
-
- <li><strong>Grant of Copyright License.</strong> Subject to the terms
- and conditions of this License, each Contributor hereby grants to You
- a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
- irrevocable copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.</li>
-
- <li><strong>Grant of Patent License.</strong> Subject to the terms
- and conditions of this License, each Contributor hereby grants to You a
- perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.</li>
-
- <li><strong>Redistribution.</strong> You may reproduce and distribute
- copies of the Work or Derivative Works thereof in any medium, with or
- without modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- <ol class="lo-A">
- <li>You must give any other recipients of the Work or
- Derivative Works a copy of this License; and</li>
-
- <li>You must cause any modified files to carry prominent notices
- stating that You changed the files; and</li>
-
- <li>You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and</li>
-
- <li>If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.</li>
- </ol>
-
- <p>You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.</p></li>
-
- <li><strong>Submission of Contributions.</strong> Unless You explicitly
- state otherwise, any Contribution intentionally submitted for inclusion
- in the Work by You to the Licensor shall be under the terms and
- conditions of this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.</li>
-
- <li><strong>Trademarks.</strong> This License does not grant permission
- to use the trade names, trademarks, service marks, or product names of
- the Licensor, except as required for reasonable and customary use in
- describing the origin of the Work and reproducing the content of the
- NOTICE file.</li>
-
- <li><strong>Disclaimer of Warranty.</strong> Unless required by
- applicable law or agreed to in writing, Licensor provides the Work (and
- each Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.</li>
-
- <li><strong>Limitation of Liability.</strong> In no event and under no
- legal theory, whether in tort (including negligence), contract, or
- otherwise, unless required by applicable law (such as deliberate and
- grossly negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.</li>
-
- <li><strong>Accepting Warranty or Additional Liability.</strong> While
- redistributing the Work or Derivative Works thereof, You may choose to
- offer, and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.</li>
- </ol>
-
- <p class="centered">END OF TERMS AND CONDITIONS</p>
-
- <p class="centered">APPENDIX: How to apply the Apache License to your
- work.</p>
-
- <p>To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.</p>
-
- <div class="example"><pre>Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.</pre></div>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/license.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/license.xml b/docs/manual/license.xml
deleted file mode 100644
index 7b6d6f7fc2..0000000000
--- a/docs/manual/license.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="license.xml.meta">
-
-<title>The Apache License, Version 2.0</title>
-
-<summary>
- <p class="centered">Apache License<br />
- Version 2.0, January 2004<br />
- <a href="http://www.apache.org/licenses/"
- >http://www.apache.org/licenses/</a><br /><br />
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
-
- <ol>
- <li><strong>Definitions</strong><br />
-
- <p>"License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.</p>
-
- <p>"Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.</p>
-
- <p>"Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.</p>
-
- <p>"You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.</p>
-
- <p>"Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.</p>
-
- <p>"Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.</p>
-
- <p>"Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).</p>
-
- <p>"Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.</p>
-
- <p>"Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."</p>
-
- <p>"Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.</p></li>
-
- <li><strong>Grant of Copyright License.</strong> Subject to the terms
- and conditions of this License, each Contributor hereby grants to You
- a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
- irrevocable copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.</li>
-
- <li><strong>Grant of Patent License.</strong> Subject to the terms
- and conditions of this License, each Contributor hereby grants to You a
- perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.</li>
-
- <li><strong>Redistribution.</strong> You may reproduce and distribute
- copies of the Work or Derivative Works thereof in any medium, with or
- without modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- <ol type="a">
- <li>You must give any other recipients of the Work or
- Derivative Works a copy of this License; and</li>
-
- <li>You must cause any modified files to carry prominent notices
- stating that You changed the files; and</li>
-
- <li>You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and</li>
-
- <li>If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.</li>
- </ol>
-
- <p>You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.</p></li>
-
- <li><strong>Submission of Contributions.</strong> Unless You explicitly
- state otherwise, any Contribution intentionally submitted for inclusion
- in the Work by You to the Licensor shall be under the terms and
- conditions of this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.</li>
-
- <li><strong>Trademarks.</strong> This License does not grant permission
- to use the trade names, trademarks, service marks, or product names of
- the Licensor, except as required for reasonable and customary use in
- describing the origin of the Work and reproducing the content of the
- NOTICE file.</li>
-
- <li><strong>Disclaimer of Warranty.</strong> Unless required by
- applicable law or agreed to in writing, Licensor provides the Work (and
- each Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.</li>
-
- <li><strong>Limitation of Liability.</strong> In no event and under no
- legal theory, whether in tort (including negligence), contract, or
- otherwise, unless required by applicable law (such as deliberate and
- grossly negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.</li>
-
- <li><strong>Accepting Warranty or Additional Liability.</strong> While
- redistributing the Work or Derivative Works thereof, You may choose to
- offer, and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.</li>
- </ol>
-
- <p class="centered">END OF TERMS AND CONDITIONS</p>
-
- <p class="centered">APPENDIX: How to apply the Apache License to your
- work.</p>
-
- <p>To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.</p>
-
- <example>
- <pre>Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.</pre>
- </example>
-</summary>
-</manualpage>
-
diff --git a/docs/manual/license.xml.meta b/docs/manual/license.xml.meta
deleted file mode 100644
index 326f784edb..0000000000
--- a/docs/manual/license.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>license</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/logs.html b/docs/manual/logs.html
deleted file mode 100644
index 0ab020d445..0000000000
--- a/docs/manual/logs.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: logs.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: logs.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: logs.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/logs.html.en b/docs/manual/logs.html.en
deleted file mode 100644
index 242d92afad..0000000000
--- a/docs/manual/logs.html.en
+++ /dev/null
@@ -1,583 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Log Files - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Log Files</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/logs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>In order to effectively manage a web server, it is necessary
- to get feedback about the activity and performance of the
- server as well as any problems that may be occurring. The Apache
- HTTP Server provides very comprehensive and flexible logging
- capabilities. This document describes how to configure its
- logging capabilities, and how to understand what the logs
- contain.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#security">Security Warning</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errorlog">Error Log</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#accesslog">Access Log</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rotation">Log Rotation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#piped">Piped Logs</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Virtual Hosts</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#other">Other Log Files</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Security Warning</a></h2>
-
-
- <p>Anyone who can write to the directory where Apache is
- writing a log file can almost certainly gain access to the uid
- that the server is started as, which is normally root. Do
- <em>NOT</em> give people write access to the directory the logs
- are stored in without being aware of the consequences; see the
- <a href="misc/security_tips.html">security tips</a> document
- for details.</p>
-
- <p>In addition, log files may contain information supplied
- directly by the client, without escaping. Therefore, it is
- possible for malicious clients to insert control-characters in
- the log files, so care must be taken in dealing with raw
- logs.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errorlog" id="errorlog">Error Log</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code></li></ul></td></tr></table>
-
- <p>The server error log, whose name and location is set by the
- <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> directive, is the
- most important log file. This is the place where Apache httpd
- will send diagnostic information and record any errors that it
- encounters in processing requests. It is the first place to
- look when a problem occurs with starting the server or with the
- operation of the server, since it will often contain details of
- what went wrong and how to fix it.</p>
-
- <p>The error log is usually written to a file (typically
- <code>error_log</code> on unix systems and
- <code>error.log</code> on Windows and OS/2). On unix systems it
- is also possible to have the server send errors to
- <code>syslog</code> or <a href="#piped">pipe them to a
- program</a>.</p>
-
- <p>The format of the error log is relatively free-form and
- descriptive. But there is certain information that is contained
- in most error log entries. For example, here is a typical
- message.</p>
-
- <div class="example"><p><code>
- [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
- client denied by server configuration:
- /export/home/live/ap/htdocs/test
- </code></p></div>
-
- <p>The first item in the log entry is the date and time of the
- message. The second entry lists the severity of the error being
- reported. The <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code>
- directive is used to control the types of errors that are sent
- to the error log by restricting the severity level. The third
- entry gives the IP address of the client that generated the
- error. Beyond that is the message itself, which in this case
- indicates that the server has been configured to deny the
- client access. The server reports the file-system path (as
- opposed to the web path) of the requested document.</p>
-
- <p>A very wide variety of different messages can appear in the
- error log. Most look similar to the example above. The error
- log will also contain debugging output from CGI scripts. Any
- information written to <code>stderr</code> by a CGI script will
- be copied directly to the error log.</p>
-
- <p>It is not possible to customize the error log by adding or
- removing information. However, error log entries dealing with
- particular requests have corresponding entries in the <a href="#accesslog">access log</a>. For example, the above example
- entry corresponds to an access log entry with status code 403.
- Since it is possible to customize the access log, you can
- obtain more information about error conditions using that log
- file.</p>
-
- <p>During testing, it is often useful to continuously monitor
- the error log for any problems. On unix systems, you can
- accomplish this using:</p>
-
- <div class="example"><p><code>
- tail -f error_log
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="accesslog" id="accesslog">Access Log</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li></ul></td></tr></table>
-
- <p>The server access log records all requests processed by the
- server. The location and content of the access log are
- controlled by the <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive. The <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
- directive can be used to simplify the selection of
- the contents of the logs. This section describes how to configure the server
- to record information in the access log.</p>
-
- <p>Of course, storing the information in the access log is only
- the start of log management. The next step is to analyze this
- information to produce useful statistics. Log analysis in
- general is beyond the scope of this document, and not really
- part of the job of the web server itself. For more information
- about this topic, and for applications which perform log
- analysis, check the <a href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
- Open Directory</a> or <a href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
- Yahoo</a>.</p>
-
- <p>Various versions of Apache httpd have used other modules and
- directives to control access logging, including
- mod_log_referer, mod_log_agent, and the
- <code>TransferLog</code> directive. The <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> directive now subsumes
- the functionality of all the older directives.</p>
-
- <p>The format of the access log is highly configurable. The format
- is specified using a format string that looks much like a C-style
- printf(1) format string. Some examples are presented in the next
- sections. For a complete list of the possible contents of the
- format string, see the <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code> <a href="mod/mod_log_config.html#formats">format strings</a>.</p>
-
- <h3><a name="common" id="common">Common Log Format</a></h3>
-
-
- <p>A typical configuration for the access log might look as
- follows.</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common
- </code></p></div>
-
- <p>This defines the <em>nickname</em> <code>common</code> and
- associates it with a particular log format string. The format
- string consists of percent directives, each of which tell the
- server to log a particular piece of information. Literal
- characters may also be placed in the format string and will be
- copied directly into the log output. The quote character
- (<code>"</code>) must be escaped by placing a back-slash before
- it to prevent it from being interpreted as the end of the
- format string. The format string may also contain the special
- control characters "<code>\n</code>" for new-line and
- "<code>\t</code>" for tab.</p>
-
- <p>The <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive sets up a new log file using the defined
- <em>nickname</em>. The filename for the access log is relative to
- the <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code> unless it
- begins with a slash.</p>
-
- <p>The above configuration will write log entries in a format
- known as the Common Log Format (CLF). This standard format can
- be produced by many different web servers and read by many log
- analysis programs. The log file entries produced in CLF will
- look something like this:</p>
-
- <div class="example"><p><code>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- </code></p></div>
-
- <p>Each part of this log entry is described below.</p>
-
- <dl>
- <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
- <dd>This is the IP address of the client (remote host) which
- made the request to the server. If <code class="directive"><a href="./mod/core.html#hostnamelookups">HostnameLookups</a></code> is
- set to <code>On</code>, then the server will try to determine
- the hostname and log it in place of the IP address. However,
- this configuration is not recommended since it can
- significantly slow the server. Instead, it is best to use a
- log post-processor such as <a href="programs/logresolve.html">logresolve</a> to determine
- the hostnames. The IP address reported here is not
- necessarily the address of the machine at which the user is
- sitting. If a proxy server exists between the user and the
- server, this address will be the address of the proxy, rather
- than the originating machine.</dd>
-
- <dt><code>-</code> (<code>%l</code>)</dt>
-
- <dd>The "hyphen" in the output indicates that the requested
- piece of information is not available. In this case, the
- information that is not available is the RFC 1413 identity of
- the client determined by <code>identd</code> on the clients
- machine. This information is highly unreliable and should
- almost never be used except on tightly controlled internal
- networks. Apache httpd will not even attempt to determine
- this information unless <code class="directive"><a href="./mod/core.html#identitycheck">IdentityCheck</a></code> is set
- to <code>On</code>.</dd>
-
- <dt><code>frank</code> (<code>%u</code>)</dt>
-
- <dd>This is the userid of the person requesting the document
- as determined by HTTP authentication. The same value is
- typically provided to CGI scripts in the
- <code>REMOTE_USER</code> environment variable. If the status
- code for the request (see below) is 401, then this value
- should not be trusted because the user is not yet
- authenticated. If the document is not password protected,
- this entry will be "<code>-</code>" just like the previous
- one.</dd>
-
- <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
- (<code>%t</code>)</dt>
-
- <dd>
- The time that the server finished processing the request.
- The format is:
-
- <p class="indent">
- <code>[day/month/year:hour:minute:second zone]<br />
- day = 2*digit<br />
- month = 3*letter<br />
- year = 4*digit<br />
- hour = 2*digit<br />
- minute = 2*digit<br />
- second = 2*digit<br />
- zone = (`+' | `-') 4*digit</code>
- </p>
- It is possible to have the time displayed in another format
- by specifying <code>%{format}t</code> in the log format
- string, where <code>format</code> is as in
- <code>strftime(3)</code> from the C standard library.
- </dd>
-
- <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
- (<code>\"%r\"</code>)</dt>
-
- <dd>The request line from the client is given in double
- quotes. The request line contains a great deal of useful
- information. First, the method used by the client is
- <code>GET</code>. Second, the client requested the resource
- <code>/apache_pb.gif</code>, and third, the client used the
- protocol <code>HTTP/1.0</code>. It is also possible to log
- one or more parts of the request line independently. For
- example, the format string "<code>%m %U%q %H</code>" will log
- the method, path, query-string, and protocol, resulting in
- exactly the same output as "<code>%r</code>".</dd>
-
- <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
- <dd>This is the status code that the server sends back to the
- client. This information is very valuable, because it reveals
- whether the request resulted in a successful response (codes
- beginning in 2), a redirection (codes beginning in 3), an
- error caused by the client (codes beginning in 4), or an
- error in the server (codes beginning in 5). The full list of
- possible status codes can be found in the <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
- specification</a> (RFC2616 section 10).</dd>
-
- <dt><code>2326</code> (<code>%b</code>)</dt>
-
- <dd>The last entry indicates the size of the object returned
- to the client, not including the response headers. If no
- content was returned to the client, this value will be
- "<code>-</code>". To log "<code>0</code>" for no content, use
- <code>%B</code> instead.</dd>
- </dl>
-
-
- <h3><a name="combined" id="combined">Combined Log Format</a></h3>
-
-
- <p>Another commonly used format string is called the Combined
- Log Format. It can be used as follows.</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </code></p></div>
-
- <p>This format is exactly the same as the Common Log Format,
- with the addition of two more fields. Each of the additional
- fields uses the percent-directive
- <code>%{<em>header</em>}i</code>, where <em>header</em> can be
- any HTTP request header. The access log under this format will
- look like:</p>
-
- <div class="example"><p><code>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- "http://www.example.com/start.html" "Mozilla/4.08 [en]
- (Win98; I ;Nav)"
- </code></p></div>
-
- <p>The additional fields are:</p>
-
- <dl>
- <dt><code>"http://www.example.com/start.html"</code>
- (<code>\"%{Referer}i\"</code>)</dt>
-
- <dd>The "Referer" (sic) HTTP request header. This gives the
- site that the client reports having been referred from. (This
- should be the page that links to or includes
- <code>/apache_pb.gif</code>).</dd>
-
- <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
- (<code>\"%{User-agent}i\"</code>)</dt>
-
- <dd>The User-Agent HTTP request header. This is the
- identifying information that the client browser reports about
- itself.</dd>
- </dl>
-
-
- <h3><a name="multiple" id="multiple">Multiple Access Logs</a></h3>
-
-
- <p>Multiple access logs can be created simply by specifying
- multiple <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- directives in the configuration
- file. For example, the following directives will create three
- access logs. The first contains the basic CLF information,
- while the second and third contain referer and browser
- information. The last two <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> lines show how
- to mimic the effects of the <code>ReferLog</code> and <code>AgentLog</code> directives.</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </code></p></div>
-
- <p>This example also shows that it is not necessary to define a
- nickname with the <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> directive. Instead,
- the log format can be specified directly in the <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> directive.</p>
-
-
- <h3><a name="conditional" id="conditional">Conditional Logs</a></h3>
-
-
- <p>There are times when it is convenient to exclude certain
- entries from the access logs based on characteristics of the
- client request. This is easily accomplished with the help of <a href="env.html">environment variables</a>. First, an
- environment variable must be set to indicate that the request
- meets certain conditions. This is usually accomplished with
- <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>. Then the
- <code>env=</code> clause of the <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> directive is used to
- include or exclude requests where the environment variable is
- set. Some examples:</p>
-
- <div class="example"><p><code>
- # Mark requests from the loop-back interface<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # Mark requests for the robots.txt file<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # Log what remains<br />
- CustomLog logs/access_log common env=!dontlog
- </code></p></div>
-
- <p>As another example, consider logging requests from
- english-speakers to one log file, and non-english speakers to a
- different log file.</p>
-
- <div class="example"><p><code>
- SetEnvIf Accept-Language "en" english<br />
- CustomLog logs/english_log common env=english<br />
- CustomLog logs/non_english_log common env=!english
- </code></p></div>
-
- <p>Although we have just shown that conditional logging is very
- powerful and flexibly, it is not the only way to control the
- contents of the logs. Log files are more useful when they
- contain a complete record of server activity. It is often
- easier to simply post-process the log files to remove requests
- that you do not want to consider.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="rotation" id="rotation">Log Rotation</a></h2>
-
-
- <p>On even a moderately busy server, the quantity of
- information stored in the log files is very large. The access
- log file typically grows 1 MB or more per 10,000 requests. It
- will consequently be necessary to periodically rotate the log
- files by moving or deleting the existing logs. This cannot be
- done while the server is running, because Apache will continue
- writing to the old log file as long as it holds the file open.
- Instead, the server must be <a href="stopping.html">restarted</a> after the log files are
- moved or deleted so that it will open new log files.</p>
-
- <p>By using a <em>graceful</em> restart, the server can be
- instructed to open new log files without losing any existing or
- pending connections from clients. However, in order to
- accomplish this, the server must continue to write to the old
- log files while it finishes serving old requests. It is
- therefore necessary to wait for some time after the restart
- before doing any processing on the log files. A typical
- scenario that simply rotates the logs and compresses the old
- logs to save space is:</p>
-
- <div class="example"><p><code>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </code></p></div>
-
- <p>Another way to perform log rotation is using <a href="#piped">piped logs</a> as discussed in the next
- section.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="piped" id="piped">Piped Logs</a></h2>
-
-
- <p>Apache httpd is capable of writing error and access log
- files through a pipe to another process, rather than directly
- to a file. This capability dramatically increases the
- flexibility of logging, without adding code to the main server.
- In order to write logs to a pipe, simply replace the filename
- with the pipe character "<code>|</code>", followed by the name
- of the executable which should accept log entries on its
- standard input. Apache will start the piped-log process when
- the server starts, and will restart it if it crashes while the
- server is running. (This last feature is why we can refer to
- this technique as "reliable piped logging".)</p>
-
- <p>Piped log processes are spawned by the parent Apache httpd
- process, and inherit the userid of that process. This means
- that piped log programs usually run as root. It is therefore
- very important to keep the programs simple and secure.</p>
-
- <p>One important use of piped logs is to allow log rotation
- without having to restart the server. The Apache HTTP Server
- includes a simple program called <a href="programs/rotatelogs.html">rotatelogs</a> for this
- purpose. For example, to rotate the logs every 24 hours, you
- can use:</p>
-
- <div class="example"><p><code>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </code></p></div>
-
- <p>Notice that quotes are used to enclose the entire command
- that will be called for the pipe. Although these examples are
- for the access log, the same technique can be used for the
- error log.</p>
-
- <p>A similar but much more flexible log rotation program
- called <a href="http://www.cronolog.org/">cronolog</a>
- is available at an external site.</p>
-
- <p>As with conditional logging, piped logs are a very powerful
- tool, but they should not be used where a simpler solution like
- off-line post-processing is available.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">Virtual Hosts</a></h2>
-
-
- <p>When running a server with many <a href="vhosts/">virtual
- hosts</a>, there are several options for dealing with log
- files. First, it is possible to use logs exactly as in a
- single-host server. Simply by placing the logging directives
- outside the <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> sections in the
- main server context, it is possible to log all requests in the
- same access log and error log. This technique does not allow
- for easy collection of statistics on individual virtual
- hosts.</p>
-
- <p>If <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- or <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>
- directives are placed inside a
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- section, all requests or errors for that virtual host will be
- logged only to the specified file. Any virtual host which does
- not have logging directives will still have its requests sent
- to the main server logs. This technique is very useful for a
- small number of virtual hosts, but if the number of hosts is
- very large, it can be complicated to manage. In addition, it
- can often create problems with <a href="vhosts/fd-limits.html">insufficient file
- descriptors</a>.</p>
-
- <p>For the access log, there is a very good compromise. By
- adding information on the virtual host to the log format
- string, it is possible to log all hosts to the same log, and
- later split the log into individual files. For example,
- consider the following directives.</p>
-
- <div class="example"><p><code>
- LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </code></p></div>
-
- <p>The <code>%v</code> is used to log the name of the virtual
- host that is serving the request. Then a program like <a href="programs/other.html">split-logfile</a> can be used to
- post-process the access log in order to split it into one file
- per virtual host.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">Other Log Files</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table>
-
- <h3><a name="pidfile" id="pidfile">PID File</a></h3>
-
-
- <p>On startup, Apache httpd saves the process id of the parent
- httpd process to the file <code>logs/httpd.pid</code>. This
- filename can be changed with the <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> directive. The
- process-id is for use by the administrator in restarting and
- terminating the daemon by sending signals to the parent
- process; on Windows, use the -k command line option instead.
- For more information see the <a href="stopping.html">Stopping
- and Restarting</a> page.</p>
-
-
- <h3><a name="scriptlog" id="scriptlog">Script Log</a></h3>
-
-
- <p>In order to aid in debugging, the
- <code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code> directive
- allows you to record the input to and output from CGI scripts.
- This should only be used in testing - not for live servers.
- More information is available in the <a href="mod/mod_cgi.html">mod_cgi</a> documentation.</p>
-
-
- <h3><a name="rewritelog" id="rewritelog">Rewrite Log</a></h3>
-
-
- <p>When using the powerful and complex features of <a href="mod/mod_rewrite.html">mod_rewrite</a>, it is almost
- always necessary to use the <code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code> to help
- in debugging. This log file produces a detailed analysis of how
- the rewriting engine transforms requests. The level of detail
- is controlled by the <code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code> directive.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/logs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/logs.html.ja.euc-jp b/docs/manual/logs.html.ja.euc-jp
deleted file mode 100644
index f614127944..0000000000
--- a/docs/manual/logs.html.ja.euc-jp
+++ /dev/null
@@ -1,551 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥í¥°¥Õ¥¡¥¤¥ë - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥í¥°¥Õ¥¡¥¤¥ë</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/logs.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¸ú²ÌŪ¤Ë´ÉÍý¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¥µ¡¼¥Ð¤Î³èÆ°¤ä¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¡¢
- º£È¯À¸¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤ÌäÂê¤Ë´Ø¤¹¤ë¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤òÆÀ¤ë¤³¤È¤¬É¬ÍפǤ¹¡£
- Apache HTTP ¥µ¡¼¥Ð¤Ë¤ÏÈó¾ï¤ËÊñ³çŪ¤Ç½ÀÆð¤Ê¥í¥®¥ó¥°µ¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Îʸ½ñ¤Ï¥í¥®¥ó¥°µ¡Ç½¤ÎÀßÄê¤Î»ÅÊý¤È¡¢¥í¥°¤Ë²¿¤¬½ñ¤«¤ì¤Æ¤¤¤ë¤«¤ò
- Íý²ò¤¹¤ë¤¿¤á¤ÎÊýË¡¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#security">
- ¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë·Ù¹ð</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errorlog">¥¨¥é¡¼¥í¥°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#accesslog">¥¢¥¯¥»¥¹¥í¥°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rotation">¥í¥°¤Î¸òÂØ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#piped">¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhosts">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#other">¾¤Î¥í¥°¥Õ¥¡¥¤¥ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">
- ¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë·Ù¹ð</a></h2>
-
- <p>Apache ¤¬¥í¥°¥Õ¥¡¥¤¥ë¤ò½ñ¤¤¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë½ñ¤­¹þ¤á¤ë¿Í¤Ï¡¢
- ¤Û¤Ü³Î¼Â¤Ë¥µ¡¼¥Ð¤¬µ¯Æ°¤µ¤ì¤¿ uid ¤Ø¤Î¥¢¥¯¥»¥¹¤ò¼ê¤ËÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¤½¤ì¤ÏÄ̾ï¤Ï root ¥æ¡¼¥¶¤Ç¤¹¡£
- ¤Á¤ã¤ó¤È·ë²Ì¤ò¹Í¤¨¤ë¤³¤È¤Ê¤¯¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î
- ½ñ¤­¹þ¤ß¸¢¸Â¤òÍ¿¤¨<em>¤Ê¤¤</em>¤Ç¤¯¤À¤µ¤¤¡£¾Ü¤·¤¯¤Ï
- <a href="misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£¤Î¤³¤Ä</a>¤Îʸ½ñ¤ò
- Æɤó¤Ç¤¯¤À¤µ¤¤¡£</p>
-
- <p>²Ã¤¨¤Æ¡¢¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤Ï¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¾ðÊ󤬤½¤Î¤Þ¤Þ¡¢
- ¥¨¥¹¥±¡¼¥×¤µ¤ì¤ë¤³¤È¤Ê¤¯½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢°­°Õ¤Î¤¢¤ë
- ¥¯¥é¥¤¥¢¥ó¥È¤¬¥í¥°¥Õ¥¡¥¤¥ë¤ËÀ©¸æʸ»ú¤òÁÞÆþ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- À¸¤Î¥í¥°¤ò°·¤¦¤È¤­¤ÏÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errorlog" id="errorlog">¥¨¥é¡¼¥í¥°</a></h2>
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code></li></ul></td></tr></table>
-
- <p><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê
- ̾Á°¤È¾ì½ê¤¬·è¤Þ¤ë¥µ¡¼¥Ð¤Î¥¨¥é¡¼¥í¥°¤Ï¡¢°ìÈÖ½ÅÍ×¤Ê¥í¥°¥Õ¥¡¥¤¥ë¤Ç¤¹¡£
- Apache ¤Î¿ÇÃǾðÊó¤Ï¤³¤³¤ËÁ÷¤é¤ì¡¢¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤·¤Æ¤¤¤ë¤È¤­¤Ë
- ȯÀ¸¤·¤¿¥¨¥é¡¼¤Ï¤¹¤Ù¤Æ¤³¤³¤Ëµ­Ï¿¤µ¤ì¤Þ¤¹¡£¥µ¡¼¥Ð¤òµ¯Æ°¤·¤¿¤È¤­¤ä¡¢
- ¥µ¡¼¥Ð¤ÎÆ°ºî¤ËÌäÂ꤬µ¯¤³¤Ã¤¿¤È¤­¤Ï¡¢°ìÈֺǽé¤ËÄ´¤Ù¤ë¤Ù¤­
- ¤È¤³¤í¤Ç¤¹¡£´Ö°ã¤¤¤Î¾ÜºÙ¤ä½¤ÀµÊýË¡¤¬¤½¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¤³¤È¤¬
- ¤è¤¯¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥¨¥é¡¼¥í¥°¤ÏÉáÄ̤ϥե¡¥¤¥ë¤Ë½ñ¤«¤ì¤Þ¤¹ (Ä̾ï unix ¥·¥¹¥Æ¥à¤Ç¤Ï
- <code>error_log</code>¡¢Windows ¤È OS/2 ¤Ç¤Ï <code>error.log</code>)¡£
- Unix ¥·¥¹¥Æ¥à¤Ç¤Ï¥¨¥é¡¼¤ò <code>syslog</code> ¤ä
- <a href="#piped">¥Ñ¥¤¥×¤Ç¥×¥í¥°¥é¥à¤ËÁ÷¤ë</a> ¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥¨¥é¡¼¥í¥°¤Î½ñ¼°¤ÏÈæ³ÓŪ¼«Í³Å٤ι⤤¤â¤Î¤Ç¡¢ÀâÌÀŪ¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤¿¤À¤·¡¢¤¤¤¯¤Ä¤«¤Î¾ðÊó¤Ï¤Û¤È¤ó¤É¤Î¥¨¥é¡¼¥í¥°¤Î¥¨¥ó¥È¥ê¤Ë¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð¡¢ÂåɽŪ¤Ê¤â¤Î¤Ë¼¡¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
- client denied by server configuration:
- /export/home/live/ap/htdocs/test
- </code></p></div>
-
- <p>¥í¥°¥¨¥ó¥È¥ê¤ÎºÇ½é¤Î¹àÌܤϥá¥Ã¥»¡¼¥¸¤ÎÆüÉդȻþ¹ï¤Ç¤¹¡£
- Æó¤Ä¤á¤Î¹àÌܤÏÊó¹ð¤µ¤ì¤Æ¤¤¤ë¥¨¥é¡¼¤Î½ÅÍ×Å٤Ǥ¹¡£
- <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> ¤Ç½ÅÍ×Å٤Υì¥Ù¥ë¤ò
- À©¸Â¤¹¤ë¤³¤È¤Ë¤è¤ê¥¨¥é¡¼¥í¥°¤ËÁ÷¤é¤ì¤ë¥¨¥é¡¼¤Î¼ïÎà¤òÀ©¸æ¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£»°¤ÄÌܤιàÌܤϥ¨¥é¡¼¤òȯÀ¸¤µ¤»¤¿¥¯¥é¥¤¥¢¥ó¥È¤Î IP ¥¢¥É¥ì¥¹
- ¤Ç¤¹¡£»Ä¤ê¤Ï¥á¥Ã¥»¡¼¥¸¤Ç¡¢¤³¤Î¾ì¹ç¤Ï¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤Î¥¢¥¯¥»¥¹¤ò
- µñÈݤ¹¤ë¤è¤¦¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¡¢¤È¤¤¤¦¤³¤È¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ï¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿Ê¸½ñ¤Î (¥¦¥§¥Ö¤Î¥Ñ¥¹¤Ç¤Ï¤Ê¤¯) ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î
- ¥Ñ¥¹¤òÊó¹ð¤·¤Þ¤¹¡£</p>
-
- <p>Èó¾ï¤Ë¹­ÈϰϤΥá¥Ã¥»¡¼¥¸¤¬¥¨¥é¡¼¥í¥°¤Ë¸½¤ì¤Þ¤¹¡£¤¿¤¤¤Æ¤¤¤Î¤â¤Î¤Ï
- ¾å¤ÎÎã¤Î¤è¤¦¤Ê´¶¤¸¤Ç¤¹¡£¥¨¥é¡¼¥í¥°¤Ë¤Ï CGI ¥¹¥¯¥ê¥×¥È¤Î¥Ç¥Ð¥Ã¥°
- ½ÐÎϤâ½ñ¤«¤ì¤Þ¤¹¡£CGI ¥¹¥¯¥ê¥×¥È¤¬ <code>stderr</code> ¤Ë½ñ¤¤¤¿
- ¤¹¤Ù¤Æ¤Î¾ðÊó¤ÏľÀÜ¥¨¥é¡¼¥í¥°¤Ë¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¾ðÊó¤òÄɲä·¤¿¤êºï½ü¤·¤¿¤ê¤·¤Æ¥¨¥é¡¼¥í¥°¤ò¥«¥¹¥¿¥Þ¥¤¥º¤¹¤ë¤³¤È¤Ï
- ¤Ç¤­¤Þ¤»¤ó¡£¤·¤«¤·¡¢¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë¥¨¥é¡¼¥í¥°¤Î¥¨¥ó¥È¥ê¤Ï¡¢
- Âбþ¤¹¤ë¥¨¥ó¥È¥ê¤¬<a href="#accesslog">¥¢¥¯¥»¥¹¥í¥°</a>¤Ë¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð¡¢¾å¤ÎÎã¤Î¥¨¥ó¥È¥ê¤Ï¥¢¥¯¥»¥¹¥í¥°¤Î¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É 403 ¤Î
- ¥¨¥ó¥È¥ê¤ËÂбþ¤·¤Þ¤¹¡£¥¢¥¯¥»¥¹¥í¥°¤Ï¥«¥¹¥¿¥Þ¥¤¥º²Äǽ¤Ç¤¹¤Î¤Ç¡¢
- ¤½¤Á¤é¤ò»È¤¦¤³¤È¤Ë¤è¤ê¥¨¥é¡¼¤Î¾õ¶·¤Ë´Ø¤¹¤ë¾ðÊó¤ò¤è¤ê¿¤¯
- ¼ê¤ËÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥Æ¥¹¥È¤ÎºÇÃæ¤Ï¡¢ÌäÂ꤬ȯÀ¸¤·¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¸«¤ë¤¿¤á¤Ë¡¢
- ¾ï¤Ë¥¨¥é¡¼¥í¥°¤ò´Æ»ë¤¹¤ë¤Î¤¬Ìò¤ËΩ¤Ä¾ì¹ç¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£
- Unix ¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¼¡¤Î¤â¤Î¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- tail -f error_log
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="accesslog" id="accesslog">¥¢¥¯¥»¥¹¥í¥°</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li></ul></td></tr></table>
-
- <p>¥µ¡¼¥Ð¥¢¥¯¥»¥¹¥í¥°¤Ï¥µ¡¼¥Ð¤¬½èÍý¤ò¤·¤¿¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤ò
- µ­Ï¿¤·¤Þ¤¹¡£¥¢¥¯¥»¥¹¥í¥°¤Î¾ì½ê¤ÈÆâÍÆ¤Ï <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê·è¤Þ¤ê¤Þ¤¹¡£¥í¥°¤ÎÆâÍƤÎÁªÂò¤ò´Ê·é¤Ë¤¹¤ë¤¿¤á¤Ë
- <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤Î¥»¥¯¥·¥ç¥ó¤Ï¥¢¥¯¥»¥¹¥í¥°¤Ë
- ¾ðÊó¤òµ­Ï¿¤¹¤ë¤¿¤á¤Î¥µ¡¼¥Ð¤ÎÀßÄêÊýË¡¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-
- <p>¤â¤Á¤í¤ó¡¢¥¢¥¯¥»¥¹¥í¥°¤Ë¾ðÊó¤òÃßÀѤ¹¤ë¤³¤È¤Ï¥í¥°´ÉÍý¤Î
- »Ï¤Þ¤ê¤Ë²á¤®¤Þ¤»¤ó¡£¼¡¤ÎÃʳ¬¤ÏÍ­ÍѤÊÅý·×¤ò¼è¤ë¤¿¤á¤Ë¤³¤Î¾ðÊó¤ò
- ²òÀϤ¹¤ë¤³¤È¤Ç¤¹¡£°ìÈÌŪ¤Ê¥í¥°²òÀϤϤ³¤Îʸ½ñ¤ÎÈϰϳ°¤Ç¡¢
- ¥¦¥§¥Ö¥µ¡¼¥Ð¼«¿È¤Î»Å»ö¤È¤¤¤¦¤ï¤±¤Ç¤â¤¢¤ê¤Þ¤»¤ó¡£¤³¤ÎÏä䡢
- ¥í¥°²òÀϤò¹Ô¤Ê¤¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¾ðÊó¤òÆÀ¤ë¤Ë¤Ï¡¢<a href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
- Open Directory</a> ¤ä <a href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
- Yahoo</a> ¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¤¤¤í¤ó¤Ê¥Ð¡¼¥¸¥ç¥ó¤Î Apache httpd ¤¬ mod_log_config,
- mod_log_agent, <code>TransferLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤¤¤Ã¤¿¡¢
- ¾¤Î¥â¥¸¥å¡¼¥ë¤ä¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¥¢¥¯¥»¥¹¤Î¥í¥®¥ó¥°¤ò
- À©¸æ¤·¤Æ¤­¤Þ¤·¤¿¡£º£¤Ç¤Ï¡¢<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ¤¬¤¹¤Ù¤Æ¤Î¸Å¤¤
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Îµ¡Ç½¤ò´Þ¤à¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¥¢¥¯¥»¥¹¥í¥°¤Î½ñ¼°¤ÏÈó¾ï¤Ë½ÀÆð¤ÊÀßÄ꤬²Äǽ¤Ç¤¹¡£
- ½ñ¼°¤Ï C ¤Î printf(1) ¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ËÈó¾ï¤Ë»÷¤¿
- <code class="directive"><a href="./mod/mod_log_config.html#¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó">¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó</a></code>
- ¤Ë¤è¤ê»ØÄꤵ¤ì¤Þ¤¹¡£¤¤¤¯¤Ä¤«¼¡¤ÎÀá¤ÇÎã¤ò¼¨¤·¤Þ¤¹¡£
- ¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ë»ÈÍѤǤ­¤ëÆâÍƤΰìÍ÷¤Ï <a href="mod/mod_log_config.html">mod_log_config ¤Îʸ½ñ</a>
- ¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <h3><a name="common" id="common">Common Log Format</a></h3>
-
-
- <p>¥¢¥¯¥»¥¹¥í¥°¤Î¤è¤¯¤¢¤ëÀßÄê¤Ë°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common
- </code></p></div>
-
- <p>¤³¤ì¤Ï¡¢<em>¥Ë¥Ã¥¯¥Í¡¼¥à</em> <code>common</code> ¤òÄêµÁ¤·¡¢
- ¥í¥°¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Î°ì¤Ä¤È´ØÏ¢ÉÕ¤±¤Þ¤¹¡£¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ï
- ¥Ñ¡¼¥»¥ó¥È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤«¤é¤Ê¤ê¡¢¤½¤ì¤¾¤ì¤Î¥Ñ¡¼¥»¥ó¥È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥µ¡¼¥Ð¤Ë¤É¤Î¾ðÊó¤ò¥í¥®¥ó¥°¤¹¤ë¤«¤ò»Ø¼¨¤·¤Þ¤¹¡£¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ë
- ʸ»ú¤ò¤½¤Î¤Þ¤ÞÆþ¤ì¤ë¤³¤È¤â¤Ç¤­¡¢¤½¤ì¤é¤Ï¥í¥°¤Î½ÐÎϤËľÀÜ¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡£
- ¤½¤³¤Ë°úÍÑʸ»ú (<code>"</code>) ¤ò½ñ¤¯¤È¤­¤Ï¡¢
- ¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ÎºÇ¸å¤È¤·¤Æ²ò¼á
- ¤µ¤ì¤ë¤³¤È¤òËɤ°¤¿¤á¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ç¥¨¥¹¥±¡¼¥×¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ë¤Ï²þ¹ÔÍѤΠ"<code>\n</code>"¡¢¥¿¥ÖÍѤÎ
- "<code>\t</code>" ¤È¤¤¤¦ÆÃÊ̤ÊÀ©¸æʸ»ú¤â´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ´û¤ËÄêµÁ¤µ¤ì¤¿
- <em>¥Ë¥Ã¥¯¥Í¡¼¥à</em> ¤ò»È¤Ã¤Æ¿·¤·¤¤¥í¥°¥Õ¥¡¥¤¥ë¤òÀßÄꤷ¤Þ¤¹¡£
- ¥¢¥¯¥»¥¹¥í¥°¤Î¥Õ¥¡¥¤¥ë̾¤Ï¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤é¤Ê¤¤¸Â¤ê¡¢
- <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code> ¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ
- °·¤ï¤ì¤Þ¤¹¡£</p>
-
- <p>¾å¤ÎÀßÄê¤Ï Common Log Format (CLF) ¤È¸Æ¤Ð¤ì¤ë·Á¼°¤Ç
- ¥í¥°¥¨¥ó¥È¥ê¤ò½ñ¤­¤Þ¤¹¡£¤³¤Îɸ½à¤Î·Á¼°¤Ï°Û¤Ê¤ë¥¦¥§¥Ö¥µ¡¼¥Ð¤Î¿¤¯¤¬
- À¸À®¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢Â¿¤¯¤Î¥í¥°²òÀÏ¥×¥í¥°¥é¥à¤¬Æɤߤ³¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- CLF ¤Ë¤è¤êÀ¸À®¤µ¤ì¤¿¥í¥°¥Õ¥¡¥¤¥ë¤Î¥¨¥ó¥È¥ê¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- </code></p></div>
-
- <p>¤³¤Î¥í¥°¥¨¥ó¥È¥ê¤Î¤½¤ì¤¾¤ì¤ÎÉôʬ¤Î°ÕÌ£¤Ï°Ê²¼¤ÇÀâÌÀ¤·¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
- <dd>¤³¤ì¤Ï¥µ¡¼¥Ð¤Ø¥ê¥¯¥¨¥¹¥È¤ò¤·¤¿¥¯¥é¥¤¥¢¥ó¥È (¥ê¥â¡¼¥È¥Û¥¹¥È)
- ¤Î IP ¥¢¥É¥ì¥¹¤Ç¤¹¡£<code class="directive"><a href="./mod/core.html#hostnamelookups">HostnameLookups</a></code> ¤¬
- <code>On</code> ¤Î¾ì¹ç¤Ï¡¢¥µ¡¼¥Ð¤Ï¥Û¥¹¥È̾¤òÄ´¤Ù¤Æ¡¢
- IP ¥¢¥É¥ì¥¹¤¬½ñ¤«¤ì¤Æ¤¤¤ë¤È¤³¤í¤Ëµ­Ï¿¤·¤Þ¤¹¡£¤·¤«¤·¡¢¤³¤ÎÀßÄê¤Ï
- ¥µ¡¼¥Ð¤ò¤«¤Ê¤êÃÙ¤¯¤¹¤ë¤Î¤Ç¡¢¤¢¤Þ¤ê¤ª´«¤á¤Ç¤­¤Þ¤»¤ó¡£
- ¤½¤¦¤Ç¤Ï¤Ê¤¯¡¢<a href="programs/logresolve.html">logresolve</a> ¤Î
- ¤è¤¦¤Ê¥í¥°¤Î¸å½èÍý¤ò¹Ô¤Ê¤¦¥×¥í¥°¥é¥à¤Ç¥Û¥¹¥È̾¤òÄ´¤Ù¤ë¤Î¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
- ¤³¤³¤ËÊó¹ð¤µ¤ì¤ë IP ¥¢¥É¥ì¥¹¤Ïɬ¤º¤·¤â¥æ¡¼¥¶¤¬»È¤Ã¤Æ¤¤¤ë¥Þ¥·¥ó¤Î
- ¤â¤Î¤Ç¤¢¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£¥æ¡¼¥¶¤È¥µ¡¼¥Ð¤Î´Ö¤Ë¥×¥í¥­¥·¥µ¡¼¥Ð¤¬
- ¤¢¤ì¤Ð¡¢¤³¤Î¥¢¥É¥ì¥¹¤Ï¸µ¤Î¥Þ¥·¥ó¤Î¤â¤Î¤Ç¤Ï¤Ê¤¯¡¢¥×¥í¥­¥·¤Î
- ¥¢¥É¥ì¥¹¤Ë¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>-</code> (<code>%l</code>)</dt>
-
- <dd>½ÐÎÏÃæ¤Î¡Ö¥Ï¥¤¥Õ¥ó¡×¤ÏÍ׵ᤵ¤ì¤¿¾ðÊ󤬼ê¤ËÆþ¤é¤Ê¤«¤Ã¤¿¤È¤¤¤¦¤³¤È¤ò
- °ÕÌ£¤·¤Þ¤¹¡£¤³¤Î¾ì¹ç¡¢¼èÆÀ¤Ç¤­¤Ê¤«¤Ã¤¿¾ðÊó¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î¥Þ¥·¥ó¤Î
- <code>identd</code> ¤Ë¤è¤ê·è¤Þ¤ë RFC 1413 ¤Î¥¯¥é¥¤¥¢¥ó¥È¤Î
- ¥¢¥¤¥Ç¥ó¥Æ¥£¥Æ¥£¤Ç¤¹¡£¤³¤Î¾ðÊó¤Ï¤¢¤Þ¤ê¿®ÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤º¡¢
- ¤·¤Ã¤«¤ê¤È´ÉÍý¤µ¤ì¤¿ÆâÉô¥Í¥Ã¥È¥ï¡¼¥¯¤ò½ü¤¤¤Æ¤Ï»È¤¦¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- Apache ¤Ï <code class="directive"><a href="./mod/core.html#identitycheck">IdentityCheck</a></code> ¤¬
- <code>On</code> ¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢¤³¤Î¾ðÊó¤òÆÀ¤è¤¦¤È¤¹¤é¤·¤Þ¤»¤ó¡£</dd>
-
- <dt><code>frank</code> (<code>%u</code>)</dt>
-
- <dd>¤³¤ì¤Ï HTTP ǧ¾Ú¤Ë¤è¤ë¡¢¥É¥­¥å¥á¥ó¥È¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¿Í¤Î
- ¥æ¡¼¥¶ ID ¤Ç¤¹¡£CGI ¥¹¥¯¥ê¥×¥È¤Ë¤ÏÄ̾ïƱ¤¸Ãͤ¬ <code>REMOTE_USER</code>
- ´Ä¶­ÊÑ¿ô¤È¤·¤ÆÍ¿¤¨¤é¤ì¤Þ¤¹¡£¥ê¥¯¥¨¥¹¥È¤Î¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É
- (°Ê²¼¤ò»²¾È) ¤¬ 401 ¤Ç¤¢¤Ã¤¿¾ì¹ç¤Ï¡¢¥æ¡¼¥¶¤Ïǧ¾Ú¤Ë¼ºÇÔ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢
- ¤³¤ÎÃͤϿ®ÍѤǤ­¤Þ¤»¤ó¡£¥É¥­¥å¥á¥ó¥È¤¬¥Ñ¥¹¥ï¡¼¥É¤ÇÊݸ¤ì¤Æ¤¤¤Ê¤¤
- ¾ì¹ç¤Ï¡¢¤³¤Î¥¨¥ó¥È¥ê¤ÏÁ°¤Î¤â¤Î¤ÈƱ¤¸¤è¤¦¤Ë "<code>-</code>" ¤Ë
- ¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
- (<code>%t</code>)</dt>
-
- <dd>
- ¥µ¡¼¥Ð¤¬¥ê¥¯¥¨¥¹¥È¤Î½èÍý¤ò½ª¤¨¤¿»þ¹ï¤Ç¤¹¡£½ñ¼°¤Ï:
-
- <p class="indent">
- <code>[day/month/year:hour:minute:second zone]<br />
- day = 2*digit<br />
- month = 3*letter<br />
- year = 4*digit<br />
- hour = 2*digit<br />
- minute = 2*digit<br />
- second = 2*digit<br />
- zone = (`+' | `-') 4*digit</code>
- </p>
- ¥í¥°¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ë <code>%{format}t</code> ¤ò
- »ØÄꤹ¤ë¤³¤È¤Ç¡¢Ê̤ηÁ¼°¤Ç»þ¹ï¤òɽ¼¨¤µ¤»¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¤È¤­¡¢<code>format</code> ¤Ï C ¤Îɸ½à¥é¥¤¥Ö¥é¥ê¤Î
- <code>strftime(3)</code> ¤Î·Á¼°¤Ë¤Ê¤ê¤Þ¤¹¡£
- </dd>
-
- <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
- (<code>\"%r\"</code>)</dt>
-
- <dd>¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤¬Æó½Å°úÍÑÉä¤ÎÃæ¤Ë¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¤Ë¤Ï¿¤¯¤ÎÍ­ÍѤʾðÊ󤬤¢¤ê¤Þ¤¹¡£¤Þ¤º¡¢¤³¤Î¾ì¹ç¥¯¥é¥¤¥¢¥ó¥È¤¬
- »È¤Ã¤¿¥á¥½¥Ã¥É¤Ï <code>GET</code> ¤Ç¤¹¡£¼¡¤Ë¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ï
- ¥ê¥½¡¼¥¹ <code>/apache_pb.gif</code> ¤òÍ׵ᤷ¤Þ¤·¤¿¡£¤½¤·¤Æ¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤Ï¥×¥í¥È¥³¥ë <code>HTTP/1.0</code> ¤ò»ÈÍѤ·¤Þ¤·¤¿¡£
- ¥ê¥¯¥¨¥¹¥È¤Î³ÆÉôʬ¤òÆÈΩ¤Ë¥í¥°¼ý½¸¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¡¢
- ¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó "<code>%m %U%q %H</code>" ¤Ï
- ¥á¥½¥Ã¥É¡¢¥Ñ¥¹¡¢¥¯¥¨¥êʸ»úÎó¡¢¥×¥í¥È¥³¥ë¤ò¥í¥°¼ý½¸¤·¡¢
- ·ë¶É "<code>%r</code>" ¤È¤Þ¤Ã¤¿¤¯Æ±¤¸½ÐÎϤˤʤê¤Þ¤¹¡£</dd>
-
- <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
- <dd>¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤êÊÖ¤¹¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤Ç¤¹¡£
- ¤³¤Î¾ðÊó¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤¬À®¸ù±þÅú (2 ¤Ç»Ï¤Þ¤ë¥³¡¼¥É) ¤Ç¤¢¤Ã¤¿¤«¡¢
- ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó (3 ¤Ç»Ï¤Þ¤ë¥³¡¼¥É) ¤Ç¤¢¤Ã¤¿¤«¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤ë
- ¥¨¥é¡¼ (4 ¤Ç»Ï¤Þ¤ë¥³¡¼¥É) ¤Ç¤¢¤Ã¤¿¤«¡¢¥µ¡¼¥Ð¤Î¥¨¥é¡¼ (5 ¤Ç»Ï¤Þ¤ë¥³¡¼¥É)
- ¤Ç¤¢¤Ã¤¿¤«¡¢¤ò¸½¤¹¤Î¤Ç¡¢Èó¾ï¤ËÂçÀڤǤ¹¡£¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤Î
- ´°Á´¤Ê¥ê¥¹¥È¤Ï <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
- µ¬³Ê</a> (RFC2616 Âè 10 Àá) ¤Ë¤¢¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>2326</code> (<code>%b</code>)</dt>
-
- <dd>¤³¤ÎºÇ¸å¤Î¥¨¥ó¥È¥ê¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¿®¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î¡¢
- ±þÅú¥Ø¥Ã¥À¤ò½ü¤¤¤¿¥µ¥¤¥º¤ò¸½¤·¤Þ¤¹¡£¥³¥ó¥Æ¥ó¥È¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤Ê¤«¤Ã¤¿
- ¾ì¹ç¤Ï¡¢¤³¤ÎÃÍ¤Ï "<code>-</code>" ¤Ë¤Ê¤ê¤Þ¤¹¡£¥³¥ó¥Æ¥ó¥È¤¬Ìµ¤¤¾ì¹ç¤Ë
- "<code>0</code>" ¤ò¥í¥°¼ý½¸¤¹¤ë¤Ë¤Ï¡¢<code>%b</code> ¤Ç¤Ï¤Ê¤¯
- <code>%B</code> ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£</dd>
-
- </dl>
-
-
- <h3><a name="combined" id="combined">Combined Log Format</a></h3>
-
-
- <p>¤â¤¦°ì¤Ä¤Î¤è¤¯»È¤ï¤ì¤ë½ñ¼°¤Ï Combined Log Format ¤È¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¡£
- °Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </code></p></div>
-
- <p>¤³¤Î½ñ¼°¤ÎºÇ½é¤ÎÊý¤Ï Common Log Format ¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¡¢ºÇ¸å¤Ë
- Æó¤ÄÄɲäΥ¨¥ó¥È¥ê¤¬¤¢¤ê¤Þ¤¹¡£ÄɲäΥ¨¥ó¥È¥ê¤Ï¥Ñ¡¼¥»¥ó¥È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- <code>%{<em>header</em>}i</code> ¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤³¤Ç
- <em>header</em> ¤Ï HTTP ¤Î¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Î¤É¤ì¤«¤Ç¤¹¡£¤³¤Î½ñ¼°¤Ë¤è¤ë
- ¥¢¥¯¥»¥¹¥í¥°¤Ï°Ê²¼¤Î¤è¤¦¤Ê´¶¤¸¤Ë¤Ê¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- "http://www.example.com/start.html" "Mozilla/4.08 [en]
- (Win98; I ;Nav)"
- </code></p></div>
-
- <p>ÄɲäΥ¨¥ó¥È¥ê¤Ï:</p>
-
- <dl>
- <dt><code>"http://www.example.com/start.html"</code>
- (<code>\"%{Referer}i\"</code>)</dt>
-
- <dd>"Referer" (°Õ¿ÞŪ¤ÊÄÖ¤ê´Ö°ã¤¤) HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ç¤¹¡£
- ¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤¬Êó¹ð¤·¤Æ¤¯¤ë»²¾È¸µ¤Î¥µ¥¤¥È¤òɽ¤·¤Þ¤¹¡£
- (¤³¤Î¾ì¹ç¤Ï¡¢<code>/apache_pb.gif</code> ¤Ë¥ê¥ó¥¯¤·¤Æ¤¤¤ë¤«¡¢
- ¤½¤ì¤ò´Þ¤ó¤Ç¤¤¤ë¥Ú¡¼¥¸¤Ç¤¹)¡£</dd>
-
- <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
- (<code>\"%{User-agent}i\"</code>)</dt>
-
- <dd>User-Agent HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ç¤¹¡£¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î¥Ö¥é¥¦¥¶¤¬
- ¼«Ê¬¼«¿È¤Î¤³¤È¤òÊó¹ð¤·¤Æ¤¯¤ë¾ðÊó¤Ç¤¹¡£</dd>
- </dl>
-
-
- <h3><a name="multiple" id="multiple">Ê£¿ô¤Î¥¢¥¯¥»¥¹¥í¥°</a></h3>
-
-
- <p>Ê£¿ô¤Î¥¢¥¯¥»¥¹¥í¥°¤Ïñ¤ËÀßÄê¥Õ¥¡¥¤¥ë¤ËÊ£¿ô¤Î <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¯¤³¤È¤ÇºîÀ®¤µ¤ì¤Þ¤¹¡£Î㤨¤Ð¡¢°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- »°¤Ä¤Î¥¢¥¯¥»¥¹¥í¥°¤òºî¤ê¤Þ¤¹¡£ºÇ½é¤Î¤â¤Î¤Ï´ðËÜŪ¤Ê CLF ¤Î¾ðÊó¤Ç¡¢
- Æó¤ÄÌܤȻ°¤ÄÌÜ¤Ï referer ¤È¥Ö¥é¥¦¥¶¤Î¾ðÊó¤Ç¤¹¡£ºÇ¸åÆó¤Ä¤Î
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ¤Ï
- <code>ReferLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code>AgentLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¸ú²Ì¤ò¤Þ¤Í¤ëÊýË¡¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </code></p></div>
-
- <p>¤³¤ÎÎã¤Ï <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> ¤Ç
- ¥Ë¥Ã¥¯¥Í¡¼¥à¤òÄêµÁ¤¹¤ëɬÍפ¬¤Ê¤¤¡¢
- ¤È¤¤¤¦¤³¤È¤â¼¨¤·¤Æ¤¤¤Þ¤¹¡£¥Ë¥Ã¥¯¥Í¡¼¥à¤ÎÂå¤ï¤ê¤Ë¡¢
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë
- ľÀÜ¥í¥°¤Î½ñ¼°¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h3><a name="conditional" id="conditional">¾ò·ïÉÕ¤­¥í¥°</a></h3>
-
-
- <p>¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ÎÆÃħ¤Ë´ð¤Å¤¤¤Æ¥¢¥¯¥»¥¹¥í¥°¤Ë¥¨¥ó¥È¥ê¤Î
- °ìÉô¤ò¥í¥®¥ó¥°¤·¤Ê¤¤Êý¤¬ÊØÍø¤Ê¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤Ï <a href="env.html">´Ä¶­ÊÑ¿ô</a> ¤ÎÊä½õ¤Ë¤è¤ê´Êñ¤Ë¼Â¸½¤Ç¤­¤Þ¤¹¡£¤Þ¤º¡¢
- ¥ê¥¯¥¨¥¹¥È¤¬²¿¤é¤«¤Î¾ò·ï¤Ë¹ç¤¦¤È¤¤¤¦¤³¤È¤ò¸½¤¹¤¿¤á¤Ë´Ä¶­ÊÑ¿ô¤¬
- ÀßÄꤵ¤ì¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ÏÄ̾ï¤Ï <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> ¤Ë¤è¤ê
- ¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£¤½¤·¤Æ¡¢<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- <code>env=</code> Àá¤ò»È¤Ã¤Æ´Ä¶­ÊÑ¿ô¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¥ê¥¯¥¨¥¹¥È¤ò
- ´Þ¤á¤¿¤êÇÓ½ü¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¤¤¯¤Ä¤«Îã¤òµó¤²¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- # Mark requests from the loop-back interface<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # Mark requests for the robots.txt file<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # Log what remains<br />
- CustomLog logs/access_log common env=!dontlog
- </code></p></div>
-
- <p>¾¤ÎÎã¤È¤·¤Æ¡¢±Ñ¸ì¤òÏ乿ͤ«¤é¤Î¥ê¥¯¥¨¥¹¥È¤È¤½¤ì°Ê³°¤Î¿Í¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤ò
- ʬ¤±¤¿¤¤¡¢¤È¤¤¤¦¾ì¹ç¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- SetEnvIf Accept-Language "en" english<br />
- CustomLog logs/english_log common env=english<br />
- CustomLog logs/non_english_log common env=!english
- </code></p></div>
-
- <p>¤³¤³¤Þ¤Ç¤Ç¤Ï¾ò·ïÉÕ¤­¥í¥®¥ó¥°¤¬Èó¾ï¤Ë¶¯ÎϤǽÀÆð¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Æ¤­¤Þ¤·¤¿¤¬¡¢
- ¤½¤ì¤¬¥í¥°¤ÎÆâÍƤòÀ©¸æ¤¹¤ëÍ£°ì¤ÎÊýË¡¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¥í¥°¥Õ¥¡¥¤¥ë¤Ï
- ¥µ¡¼¥Ð¤Î³èÆ°¤Î´°Á´¤Êµ­Ï¿¤Ç¤¢¤ëÊý¤¬¤è¤êÌò¤ËΩ¤Á¤Þ¤¹¡£Ã±½ã¤Ë¥í¥°¥Õ¥¡¥¤¥ë¤ò
- ¸å½èÍý¤·¤Æ¡¢¹Íθ¤·¤¿¤¯¤Ê¤¤¥í¥°¤òºï½ü¤¹¤ëÊý¤¬´Êñ¤Ç¤¢¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="rotation" id="rotation">¥í¥°¤Î¸òÂØ</a></h2>
-
-
- <p>ÉáÄ̤ÎÉé²Ù¤Î¥µ¡¼¥Ð¤Ç¤µ¤¨¡¢¥í¥°¥Õ¥¡¥¤¥ë¤ËÊݸ¤µ¤ì¤ë¾ðÊó¤ÎÎ̤Ï
- ËÄÂç¤Ë¤Ê¤ê¤Þ¤¹¡£¥¢¥¯¥»¥¹¥í¥°¤Î¥Õ¥¡¥¤¥ë¤ÏÉáÄÌ 10,000 ¥ê¥¯¥¨¥¹¥ÈËè¤Ë
- 1 MB °Ê¾åÁý¤¨¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢´û¸¤Î¥í¥°¤ò°ÜÆ°¤·¤¿¤ê¡¢ºï½ü¤·¤¿¤ê¤·¤Æ¡¢
- Äê´üŪ¤Ë¥í¥°¤ò¸òÂؤµ¤»¤ë¤³¤È¤¬É¬Íפˤʤê¤Þ¤¹¡£¤³¤ì¤Ï¥µ¡¼¥Ð¤Î¼Â¹ÔÃæ¤Ë¤Ï
- ¹Ô¤Ê¤¨¤Þ¤»¤ó¡£¤È¤¤¤¦¤Î¤Ï¡¢Apache ¤Ï¥Õ¥¡¥¤¥ë¤¬ open ¤µ¤ì¤Æ¤¤¤ë´Ö¤Ï
- ¤º¤Ã¤È¸Å¤¤¥í¥°¥Õ¥¡¥¤¥ë¤Ë½ñ¤­Â³¤±¤ë¤«¤é¤Ç¤¹¡£
- ¿·¤·¤¤¥í¥°¥Õ¥¡¥¤¥ë¤ò open ¤Ç¤­¤ë¤è¤¦¤Ë¡¢¥í¥°¥Õ¥¡¥¤¥ë¤¬°ÜÆ°¤µ¤ì¤¿¤ê
- ºï½ü¤µ¤ì¤¿¸å¤Ë¡¢¥µ¡¼¥Ð¤ò<a href="stopping.html">ºÆµ¯Æ°</a>¤¹¤ë
- ɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p><em>Í¥²í¤Ê</em> ºÆµ¯Æ°¤ò¹Ô¤Ê¤¦¤³¤È¤Ç¡¢¥µ¡¼¥Ð¤Ï´û¸¤Î¥³¥Í¥¯¥·¥ç¥ó¤ä
- ½èÍýÂÔ¤Á¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò¼º¤¦¤³¤È¤Ê¤¯¿·¤·¤¤¥í¥°¥Õ¥¡¥¤¥ë¤ò open ¤µ¤»¤ë
- ¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢¤³¤ì¤ò¼Â¸½¤¹¤ë¤¿¤á¤Ë¡¢¥µ¡¼¥Ð¤Ï¸Å¤¤¥ê¥¯¥¨¥¹¥È¤ò
- °·¤Ã¤Æ¤¤¤ë´Ö¤Ï¸Å¤¤¥í¥°¥Õ¥¡¥¤¥ë¤Ë½ñ¤­Â³¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢ºÆµ¯Æ°¤Î¸å¤Ç¤Ï¥í¥°¥Õ¥¡¥¤¥ë¤Î½èÍý¤ò»Ï¤á¤ëÁ°¤Ë¡¢¤·¤Ð¤é¤¯ÂÔ¤¿¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£Ã±¤Ë¥í¥°¤ò¸òÂؤµ¤»¤Æ¡¢¥Ç¥£¥¹¥¯¤ÎÀáÌó¤Î¤¿¤á¤Ë¸Å¤¤¥í¥°¤ò
- °µ½Ì¤¹¤ëÉáÄ̤Υ·¥Ê¥ê¥ª¤Ï:</p>
-
- <div class="example"><p><code>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </code></p></div>
-
- <p>¥í¥°¤Î¸òÂؤò¤¹¤ë¤â¤¦°ì¤Ä¤ÎÊýË¡¤Ï<a href="#piped">¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°</a>¤ò»È¤¦¤â¤Î¤Ç¡¢¼¡¤ÎÀá¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="piped" id="piped">¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°</a></h2>
-
-
- <p>Apache httpd ¤Ï¥¨¥é¡¼¥í¥°¤È¥¢¥¯¥»¥¹¥í¥°¤ò¥Õ¥¡¥¤¥ë¤ËľÀܽñ¤¯Âå¤ï¤ê¤Ë¡¢
- ¥Ñ¥¤¥×¤òÄ̤·¤ÆÊÌ¤Î¥×¥í¥°¥é¥à¤Ë½ñ¤­½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Îµ¡Ç½¤Ë¤è¤ê¡¢¼ç¥µ¡¼¥Ð¤Ë¥³¡¼¥É¤òÄɲ乤뤳¤È¤Ê¤¯
- ¥í¥®¥ó¥°¤Î½ÀÆðÀ­¤¬Èó¾ï¤Ë¹â¤Þ¤Ã¤Æ¤¤¤Þ¤¹¡£¥Ñ¥¤¥×¤Ë¥í¥°¤ò½ñ¤¯¤¿¤á¤Ë¤Ï¡¢
- ñ¤Ë¥Õ¥¡¥¤¥ë̾¤ò¥Ñ¥¤¥×ʸ»ú "<code>|</code>" ¤ËÃÖ¤­´¹¤¨¡¢¤½¤Î³¤­¤Ë
- ɸ½àÆþÎϤ«¤é¥í¥°¤Î¥¨¥ó¥È¥ê¤ò¼õ¤±¤È¤ë¼Â¹Ô¥×¥í¥°¥é¥à¤Î̾Á°¤ò½ñ¤¯¤À¤±¤Ç¤¹¡£
- Apache ¤Ï¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°ÍÑ¤Î¥×¥í¥»¥¹¤ò¥µ¡¼¥Ð¤Îµ¯Æ°»þ¤Ë¼Â¹Ô¤·¡¢
- ¥µ¡¼¥Ð¤Î¼Â¹ÔÃæ¤Ë¤½¤Î¥×¥í¥°¥é¥à¤¬¥¯¥é¥Ã¥·¥å¤·¤¿¤È¤­¤Ï¤½¤ì¤òºÆ¤Ó
- ¼Â¹Ô¤·¤Þ¤¹¡£(¤³¤ÎºÇ¸å¤Îµ¡Ç½¤¬¤³¤Îµ»½Ñ¤¬¡Ö¿®ÍêÀ­¤Î¤¢¤ë¥Ñ¥¤¥×·Ðͳ¤Î¥í¥®¥ó¥°¡×
- ¤È¸Æ¤Ð¤ì¤Æ¤¤¤ëÍýͳ¤Ç¤¹¡£)</p>
-
- <p>¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°ÍÑ¤Î¥×¥í¥»¥¹¤Ï Apache httpd ¤Î¿Æ¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¡¢
- ¤½¤Î¥×¥í¥»¥¹¤Î¥æ¡¼¥¶ ID ¤ò·Ñ¾µ¤·¤Þ¤¹¡£¤³¤ì¤Ï¡¢¤³¤ì¤Ï¡¢¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°ÍѤÎ
- ¥×¥í¥°¥é¥à¤ÏÉáÄÌ root ¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¥×¥í¥°¥é¥à¤ò´Êñ¤Ç°ÂÁ´¤ËÊݤĤ³¤È¤¬Èó¾ï¤Ë½ÅÍפǤ¹¡£</p>
-
- <p>¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°¤Î½ÅÍפÊÍøÍÑË¡¤Ï¡¢¥µ¡¼¥Ð¤ÎºÆµ¯Æ°¤Ê¤·¤Ç¥í¥°¤Î¸òÂؤò
- ¤¹¤ë¤³¤È¤Ç¤¹¡£Apache HTTP ¥µ¡¼¥Ð¤Ë¤Ï¤³¤Î¤¿¤á¤Î <a href="programs/rotatelogs.html">rotatelogs</a> ¤È¸Æ¤Ð¤ì¤ë´Êñ¤Ê
- ¥×¥í¥°¥é¥à¤¬ÉÕ°¤·¤Æ¤¤¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢24 »þ´ÖËè¤Ë¥í¥°¤ò¸òÂؤµ¤»¤ë¤Ë¤Ï¡¢
- °Ê²¼¤Î¤â¤Î¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </code></p></div>
-
- <p>¥Ñ¥¤¥×¤ÎÀè¤Ç¸Æ¤Ð¤ì¤ë¥³¥Þ¥ó¥ÉÁ´ÂΤ¬°úÍÑÉä¤Ç°Ï¤Þ¤ì¤Æ¤¤¤ë¤³¤È¤ËÃíÌܤ·¤Æ
- ¤¯¤À¤µ¤¤¡£¤³¤ÎÎã¤Ï¥¢¥¯¥»¥¹¥í¥°¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢¥¨¥é¡¼¥í¥°¤Ë¤âƱ¤¸µ»½Ñ¤ò
- »È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>»÷¤Æ¤¤¤ë¤±¤ì¤É¡¢¤è¤ê¤º¤Ã¤È½ÀÆð¤Ê
- <a href="http://www.cronolog.org/">cronolog</a> ¤È¤¤¤¦¥í¥°¸òÂØÍѤÎ
- ¥×¥í¥°¥é¥à¤¬³°Éô¤Î¥µ¥¤¥È¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¾ò·ïÉÕ¤­¥í¥®¥ó¥°¤ÈƱÍÍ¡¢¥Ñ¥¤¥×·Ðͳ¤Î¥í¥°¤ÏÈó¾ï¤Ë¶¯ÎϤÊ
- Æ»¶ñ¤Ç¤¹¤¬¡¢¥ª¥Õ¥é¥¤¥ó¤Î¸å½èÍý¤Î¤è¤¦¤Ê¡¢¤è¤ê´Êñ¤Ê²ò·èÊýË¡¤¬¤¢¤ë¤È¤­¤Ï
- »È¤ï¤Ê¤¤Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhosts" id="virtualhosts">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></h2>
-
-
- <p>¿¤¯¤Î <a href="vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a> ¤Î¤¢¤ë¥µ¡¼¥Ð¤ò¼Â¹Ô¤·¤Æ¤¤¤ë
- ¤È¤­¤Ï¡¢¥í¥°¥Õ¥¡¥¤¥ë¤Î°·¤¤Êý¤Ë¤¤¤¯¤Ä¤«¤ÎÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£
- ¤Þ¤º¡¢Ã±ÆȤΥۥ¹¥È¤Î¤ß¤Î¥µ¡¼¥Ð¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤è¤¦¤Ë¥í¥°¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥í¥®¥ó¥°¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¼ç¥µ¡¼¥Ð¤Î¥³¥ó¥Æ¥­¥¹¥È¤Î
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Î³°¤ËÃÖ¤¯¤³¤È¤Ç¡¢
- ¤¹¤Ù¤Æ¤Î¥í¥°¤òƱ¤¸¥¢¥¯¥»¥¹¥í¥°¤È¥¨¥é¡¼¥í¥°¤Ë¥í¥°¼ý½¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¼êË¡¤Ç¤Ï¸Ä¡¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÅý·×¤ò´Êñ¤Ë¤È¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</p>
-
- <p><code class="directive"><a href="./mod/mod_log_config.html#&gt;customlog">&gt;CustomLog</a></code> ¤ä
- <code class="directive"><a href="./mod/mod_log_config.html#errorlog">ErrorLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¤ÎÃæ¤Ë
- ÃÖ¤«¤ì¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ð¡¼¥Á¥ã¥ë
- ¥Û¥¹¥È¤Ø¤Î¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤ä¥¨¥é¡¼¤¬¤½¤³¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¤Î¤ß
- ¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹¡£¥í¥®¥ó¥°¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¤Ê¤¤¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ï
- °ÍÁ³¤È¤·¤Æ¥ê¥¯¥¨¥¹¥È¤¬¼ç¥µ¡¼¥Ð¤Î¥í¥°¤ËÁ÷¤é¤ì¤Þ¤¹¡£¤³¤Î¼êË¡¤Ï¾¯¤Ê¤¤
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ·¤Æ¤ÏÈó¾ï¤ËÍ­ÍѤǤ¹¤¬¡¢¥Û¥¹¥È¤Î¿ô¤¬Èó¾ï¤Ë¿¤¯¤Ê¤ë¤È
- ´ÉÍý¤¬ÂçÊѤˤʤê¤Þ¤¹¡£¤µ¤é¤Ë¡¢<a href="vhosts/fd-limits.html">¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¸Â³¦</a>¤ÎÌäÂê¤òµ¯¤³¤¹¤³¤È¤¬
- ¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥¢¥¯¥»¥¹¥í¥°¤Ë¤Ï¡¢Èó¾ï¤ËÎɤ¤ÂŶ¨°Æ¤¬¤¢¤ê¤Þ¤¹¡£¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î
- ¾ðÊó¤ò¥í¥°¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ë²Ã¤¨¤ë¤³¤È¤Ç¡¢¤¹¤Ù¤Æ¤Î¥Û¥¹¥È¤Ø¤Î
- ¥ê¥¯¥¨¥¹¥È¤òƱ¤¸¥í¥°¤Ë¥í¥°¼ý½¸¤·¤Æ¡¢¸å¤Ç¥í¥°¤ò¸Ä¡¹¤Î¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </code></p></div>
-
- <p><code>%v</code> ¤¬¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î̾Á°¤ò
- ¥í¥°¼ý½¸¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤·¤Æ¡¢<a href="programs/other.html">split-logfile</a> ¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥à¤ò
- »È¤Ã¤Æ¥¢¥¯¥»¥¹¥í¥°¤ò¸å½èÍý¤¹¤ë¤³¤È¤Ç¡¢
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈËè¤Î¥Õ¥¡¥¤¥ë¤Ë¥í¥°¤òʬ³ä¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>»ÄÇ°¤Ê¤¬¤é¡¢¥¨¥é¡¼¥í¥°¤Ë¤ÏƱÍͤμêË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤Ç¤¹¤«¤é¡¢
- ¤¹¤Ù¤Æ¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤òƱ¤¸¥¨¥é¡¼¥í¥°¤ÎÃæ¤Ëº®¤¼¤ë¤«¡¢
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈËè¤Ë¥¨¥é¡¼¥í¥°¤ò»È¤¦¤«¤òÁª¤Ð¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">¾¤Î¥í¥°¥Õ¥¡¥¤¥ë</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table>
-
- <h3><a name="pidfile" id="pidfile">PID ¥Õ¥¡¥¤¥ë</a></h3>
-
-
- <p>µ¯Æ°»þ¤Ë¡¢Apache ¤Ï¿Æ httpd ¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ ID ¤ò
- <code>logs/httpd.pid</code> ¤ËÊݸ¤·¤Þ¤¹¡£¤³¤Î
- ¥Õ¥¡¥¤¥ë̾¤Ï <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ
- Êѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥×¥í¥»¥¹ ID ¤Ï´ÉÍý¼Ô¤¬¿Æ¥×¥í¥»¥¹¤Ë
- ¥·¥°¥Ê¥ë¤òÁ÷¤ë¤³¤È¤Ç¥Ç¡¼¥â¥ó¤òºÆµ¯Æ°¤·¤¿¤ê½ªÎ»¤µ¤»¤¿¤ê¤¹¤ë¤È¤­¤Ë
- »ÈÍѤ·¤Þ¤¹¡£Windows ¤Ç¤Ï¡¢Âå¤ï¤ê¤Ë -k ¥³¥Þ¥ó¥É¥ª¥×¥·¥ç¥ó¤ò
- »È¤Ã¤Æ¤¯¤À¤µ¤¤¡£¾Ü¤·¤¤¾ðÊó¤Ï <a href="stopping.html">½ªÎ»¤È
- ºÆµ¯Æ°</a> ¤Î¥Ú¡¼¥¸¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-
- <h3><a name="scriptlog" id="scriptlog">¥¹¥¯¥ê¥×¥È¥í¥°</a></h3>
-
-
- <p>¥Ç¥Ð¥Ã¥°¤ÎÊä½õ¤Î¤¿¤á¤Ë¡¢<code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- CGI ¥¹¥¯¥ê¥×¥È¤ÎÆþÎϤȽÐÎϤòµ­Ï¿¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï¥Æ¥¹¥ÈÍѤˤΤ߻ÈÍѤ·¤Æ¡¢Ä̾ï¤Î¥µ¡¼¥Ð¤Ç¤Ï»ÈÍѤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- ¾Ü¤·¤¤¾ðÊó¤Ï <a href="mod/mod_cgi.html">mod_cgi ¤Îʸ½ñ</a> ¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
-
- <h3><a name="rewritelog" id="rewritelog">¥ê¥é¥¤¥È¥í¥°</a></h3>
-
-
- <p><code class="directive"><a href="./mod/mod_rewrite.html#mod_rewrite">mod_rewrite</a></code> ¤Î¶¯ÎϤÇ
- Ê£»¨¤Êµ¡Ç½¤ò
- »È¤Ã¤Æ¤¤¤ë¤È¤­¤Ï¡¢¤Û¤Ü¤¤¤Ä¤â¥Ç¥Ð¥Ã¥°¤ò´Êñ¤Ë¤¹¤ë¤¿¤á¤Ë
- <code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code> ¤Î»ÈÍѤ¬
- ɬÍפǤ·¤ç¤¦¡£¤³¤Î¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤Ï¥ê¥é¥¤¥È¥¨¥ó¥¸¥ó¤¬¥ê¥¯¥¨¥¹¥È¤ò
- ½ñ¤­´¹¤¨¤ëÊýË¡¤Î¾ÜºÙ¤Ê²òÀϤ¬½ÐÎϤµ¤ì¤Þ¤¹¡£¾Ü¤·¤µ¤ÎÅÙ¹ç¤Ï <code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code>
- ¤ÇÀ©¸æ¤Ç¤­¤Þ¤¹¡£</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/logs.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/logs.html.ko.euc-kr b/docs/manual/logs.html.ko.euc-kr
deleted file mode 100644
index 7d2ef4feae..0000000000
--- a/docs/manual/logs.html.ko.euc-kr
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>·Î±×ÆÄÀÏ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>·Î±×ÆÄÀÏ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/logs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>È¿À²ÀûÀ¸·Î À¥¼­¹ö¸¦ °ü¸®ÇÏ·Á¸é ¹ß»ýÇÏ´Â ¹®Á¦¿Í ÇÔ²² ¼­¹öÀÇ
- È°µ¿°ú ¼º´É¿¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ¸Å¿ì Á¾ÇÕÀûÀÌ°í
- À¯¿¬ÇÑ ·Î±× ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÌ ¹®¼­´Â ·Î±× ±â´ÉÀ» ¼³Á¤ÇÏ´Â
- ¹æ¹ý°ú ·Î±×¿¡ µé¾î°¥ ³»¿ëÀ» ¼³¸íÇÑ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#security">º¸¾È °æ°í</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#errorlog">¿À·ù ·Î±× (Error Log)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#accesslog">Á¢±Ù ·Î±× (Access Log)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rotation">·Î±× ¼øȯ (Log Rotation)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#piped">·Î±×¸¦ ÆÄÀÌÇÁ·Î º¸³»±â</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">°¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#other">´Ù¸¥ ·Î±×ÆÄÀÏ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">º¸¾È °æ°í</a></h2>
-
-
- <p>´©±º°¡¿¡°Ô ¾ÆÆÄÄ¡ÀÇ ·Î±×ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ
- ÀÖ´Ù¸é (º¸Åë root) ¼­¹ö¸¦ ½ÇÇàÇÏ´Â uid¸¦ °ÅÀÇ È®½ÇÈ÷ ¾òÀ»
- ¼ö ÀÖ´Ù. À̸¦ °í·ÁÇÏÁö¾Ê°í ·Î±×°¡ ÀúÀåµÈ µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀ»
- ÁÖÁö <em>¸¶¶ó</em>. ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="misc/security_tips.html">º¸¾È ÆÁ</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- <p>¶Ç, Ŭ¶óÀ̾ðÆ®°¡ Á¦°øÇÑ Á¤º¸´Â ·Î±×ÆÄÀÏ¿¡ °ÅÀÇ ±×´ë·Î
- ±â·ÏµÈ´Ù. ±×·¡¼­ ¾ÇÀÇ°¡ Àִ Ŭ¶óÀ̾ðÆ®°¡ ·Î±×ÆÄÀÏ¿¡ Á¦¾î¹®ÀÚ¸¦
- ³ÖÀ» ¼ö ÀÖÀ¸¹Ç·Î, ·Î±×¸¦ ´Ù·ê¶§´Â ÁÖÀÇÇØ¾ß ÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="errorlog" id="errorlog">¿À·ù ·Î±× (Error Log)</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code></li></ul></td></tr></table>
-
- <p><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> Áö½Ã¾î´Â
- °¡Àå Áß¿äÇÑ ·Î±×ÆÄÀÏÀÎ ¼­¹ö ¿À·ù ·Î±×ÀÇ À̸§°ú À§Ä¡¸¦ ÁöÁ¤ÇÑ´Ù.
- ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌ ÆÄÀÏ¿¡ Áø´ÜÁ¤º¸¿Í ¿äûÀ» ó¸®ÇÏ´Â µµÁß
- ¹ß»ýÇÑ ¿À·ù¸¦ ±â·ÏÇÑ´Ù. ¼­¹ö°¡ ½ÃÀÛÇϰųª µ¿ÀÛÇϴµ¥ ¹®Á¦°¡
- ÀÖ´Ù¸é ¹«¾ùÀÌ À߸øµÇ¾ú°í ¶§¶§·Î ¾î¶»°Ô °íÄ¡´ÂÁö¸¦ ¾Ë·ÁÁÖ´Â
- ÀÌ°÷À» °¡Àå ¸ÕÀú »ìÆìºÁ¾ß ÇÑ´Ù.</p>
-
- <p>¿À·ù ·Î±×´Â º¸Åë (ÀüÇüÀûÀ¸·Î À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â
- <code>error_log</code>, À©µµ¿ìÁî¿Í OS/2¿¡¼­´Â
- <code>error.log</code>) ÆÄÀÏ¿¡ ±â·ÏµÈ´Ù. À¯´Ð½º ½Ã½ºÅÛ¿¡¼­
- ¼­¹ö´Â ¿À·ù¸¦ <code>syslog</code>³ª <a href="#piped">ÆÄÀÌÇÁ¸¦
- »ç¿ëÇÏ¿© ´Ù¸¥ ÇÁ·Î±×·¥</a>À¸·Î º¸³¾ ¼öµµ ÀÖ´Ù.</p>
-
- <p>¿À·ù ·Î±×ÀÇ Çü½ÄÀº »ó´ëÀûÀ¸·Î ÀÚÀ¯·Ó°í ÀÚ¼¼ÇÏ´Ù. ±×·¯³ª
- ´ëºÎºÐÀÇ ¿À·ù ·Î±× Ç׸ñ¿¡ °øÅëÀûÀ¸·Î ³ª¿À´Â Á¤º¸°¡ ÀÖ´Ù.
- ¿¹¸¦ µé¾î, Ç׸ñÀº º¸Åë ´ÙÀ½°ú °°´Ù.</p>
-
- <div class="example"><p><code>
- [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
- client denied by server configuration:
- /export/home/live/ap/htdocs/test
- </code></p></div>
-
- <p>·Î±× Ç׸ñ¿¡¼­ ù¹ø° Ç׸ñÀº ³¯Â¥¿Í ½Ã°£ÀÌ´Ù. µÎ¹ø°
- Ç׸ñÀº º¸°íÇÏ´Â ¿À·ùÀÇ ½É°¢¼ºÀ» ³ªÅ¸³½´Ù. <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code> Áö½Ã¾î·Î ¿À·ù ·Î±×¿¡
- ±â·ÏµÇ´Â ¿À·ùÀÇ ½É°¢¼ºÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ¼¼¹ø° Ç׸ñÀº
- ¿À·ù¸¦ ¹ß»ýÇÑ Å¬¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼ÒÀÌ´Ù. ÀÌ ´ÙÀ½ºÎÅÍ ¿À·ù¹®ÀÌ
- ³ª¿À¸ç, ÀÌ °æ¿ì ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±ÙÀ» °ÅºÎÇϵµ·Ï
- ¼³Á¤µÇ¾ú´Ù°í ³ª¿ÍÀÖ´Ù. ¿äûÇÑ ¹®¼­ÀÇ (À¥ °æ·Î°¡ ¾Æ´Ñ)
- ÆÄÀϽýºÅÛ °æ·Îµµ º¸ÀδÙ.</p>
-
- <p>¿À·ù ·Î±×¿¡´Â ¸Å¿ì ´Ù¾çÇÑ Á¾·ùÀÇ ¹®±¸°¡ ³ª¿Ã ¼ö ÀÖ´Ù.
- ´ëºÎºÐÀº À§¿Í ºñ½ÁÇÏ´Ù. CGI ½ºÅ©¸³Æ®ÀÇ µð¹ö±ë Ãâ·Âµµ ¿À·ù
- ·Î±×¿¡ ±â·ÏµÈ´Ù. CGI ½ºÅ©¸³Æ®°¡ <code>stderr</code>¿¡ ¾´
- Á¤º¸´Â ±×´ë·Î ¿À·ù ·Î±×·Î º¹»çµÈ´Ù.</p>
-
- <p>¿À·ù ·Î±×¿¡ Á¤º¸¸¦ Ãß°¡ÇÏ°¡³ª »ý·«ÇÒ ¼ö ¾ø´Ù. ±×·¯³ª
- ¿äû¿¡ ´ëÇÑ ¿À·ù ·Î±×ÀÇ °æ¿ì <a href="#accesslog">Á¢±Ù
- ·Î±×</a>¿¡µµ ´ëÀÀÇÏ´Â Ç׸ñÀÌ »ý±ä´Ù. ¿¹¸¦ µé¾î, À§ÀÇ °æ¿ì
- »óÅÂÄڵ尡 403ÀÎ Á¢±Ù ·Î±× Ç׸ñÀÌ »ý±ä´Ù. Á¢±Ù ·Î±×´Â
- »ç¿ëÀÚÁ¤ÀÇÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ÆÄÀÏÀ» Âü°íÇÏ¿© ¿À·ù »óȲ¿¡
- ´ëÇÑ Ãß°¡Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.</p>
-
- <p>°Ë»çÇÒ¶§ ¾î¶² ¹®Á¦°¡ »ý±â´ÂÁö ¿À·ù ·Î±×¸¦ °è¼Ó »ìÆ캸´Â
- °ÍÀÌ ÁÁ´Ù. À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- tail -f error_log
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="accesslog" id="accesslog">Á¢±Ù ·Î±× (Access Log)</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li></ul></td></tr></table>
-
- <p>¼­¹ö Á¢±Ù ·Î±×´Â ¼­¹ö°¡ ó¸®ÇÏ´Â ¸ðµç ¿äûÀ» ±â·ÏÇÑ´Ù.
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- Áö½Ã¾î´Â Á¢±Ù ·Î±×ÀÇ À§Ä¡¿Í ³»¿ëÀ» ÁöÁ¤ÇÑ´Ù. <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ·Î±×¿¡ Æ÷ÇÔÇÒ ³»¿ëÀ» ½±°Ô ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ÀýÀº
- ¼­¹ö°¡ Á¢±Ù ·Î±×¿¡ ¾µ ³»¿ëÀ» ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹°·Ð Á¢±Ù ·Î±×¿¡ Á¤º¸¸¦ ±â·ÏÇÏ´Â °ÍÀº ·Î±× °ü¸®ÀÇ ½ÃÀÛÀÏ
- »ÓÀÌ´Ù. ´ÙÀ½ ´Ü°è´Â ÀÌ Á¤º¸¸¦ ºÐ¼®ÇÏ¿© À¯¿ëÇÑ Åë°è¸¦ ¸¸µå´Â
- °ÍÀÌ´Ù. ÀÌ ¹®¼­´Â ÀϹÝÀûÀÎ ·Î±× ºÐ¼®¿¡ ´ëÇؼ­ ´Ù·çÁö ¾ÊÀ¸¸ç,
- ·Î±× ºÐ¼®Àº ½ÇÁ¦ À¥¼­¹ö°¡ ÇÒ ÀÏÀÌ ¾Æ´Ï´Ù. ·Î±× ºÐ¼®¿¡ ´ëÇÑ
- Á¤º¸¿Í ·Î±×¸¦ ºÐ¼®ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇؼ­´Â <a href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">Open Directory</a>³ª
- <a href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>¸¦
- Âü°íÇ϶ó.</p>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌÀüºÎÅÍ mod_log_referer, mod_log_agent,
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- °°Àº ¸ðµâ°ú Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Á¢±Ù ·Î±×¸¦ ´Ù·ç¾ú´Ù. Áö±ÝÀº
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- Áö½Ã¾î°¡ ¿À·¡µÈ Áö½Ã¾îµéÀÇ ¸ðµç ±â´ÉÀ» À̾î¹Þ¾Ò´Ù.</p>
-
- <p>Á¢±Ù ·Î±×ÀÇ Çü½ÄÀº ¸Å¿ì »ç¿ëÀÚÁ¤ÀÇ °¡´ÉÇÏ´Ù. Çü½ÄÀº CÀÇ
- printf(1) Çü½Ä¹®ÀÚ¿­°ú ¸Å¿ì À¯»çÇÑ Çü½Ä¹®ÀÚ¿­À» »ç¿ëÇÏ¿©
- ÁöÁ¤ÇÑ´Ù. ´ÙÀ½ Àý¿¡ ¿¹¸¦ µé¾ú´Ù. Çü½Ä¹®ÀÚ¿­¿¡ »ç¿ë°¡´ÉÇÑ
- ¸ðµç ³»¿ëÀ» ¾Ë·Á¸é <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code> <a href="mod/mod_log_config.html#formats">Çü½Ä¹®ÀÚ¿­</a>À»
- Âü°íÇ϶ó.</p>
-
- <h3><a name="common" id="common">Common ·Î±× Çü½Ä</a></h3>
-
-
- <p>Á¢±Ù ·Î±×ÀÇ ÀüÇüÀûÀÎ ¼³Á¤Àº ´ÙÀ½°ú °°´Ù.</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common
- </code></p></div>
-
- <p>±×·¯¸é ÁöÁ¤ÇÑ ·Î±× Çü½Ä¹®ÀÚ¿­À» <em>º°¸í</em>
- <code>common</code>À¸·Î Á¤ÀÇÇÑ´Ù. Çü½Ä¹®ÀÚ¿­Àº ÆÛ¼¾Æ®
- Áö½Ã¾îµé·Î ±¸¼ºµÇ¸ç, °¢°¢Àº ¾î¶² Á¤º¸¸¦ ±â·ÏÇÒÁö ¾Ë¸°´Ù.
- Çü½Ä¹®ÀÚ¿­¿¡ ÀÏ¹Ý ¹®ÀÚ¸¦ ÀûÀ¸¸é ±×´ë·Î ·Î±×¿¡ Ãâ·ÂµÈ´Ù.
- µû¿ÈÇ¥ ¹®ÀÚ(<code>"</code>)¸¦ Ãâ·ÂÇÏ°í ½Í´Ù¸é ¹é½½·¡½¬¸¦
- ¾Õ¿¡ ºÙ¿©¼­ Çü½Ä¹®ÀÚ¿­ÀÇ ³¡ÀÌ ¾Æ´ÔÀ» Ç¥½ÃÇÑ´Ù. Çü½Ä¹®ÀÚ¿­¿¡
- ÁÙ¹Ù²Þ "<code>\n</code>", ÅÇ "<code>\t</code>"¿Í °°Àº
- Ư¼ö Á¶Àý¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- Áö½Ã¾î´Â Á¤ÀÇÇÑ <em>º°¸í</em>À» »ç¿ëÇÏ´Â »õ·Î¿î ·Î±×ÆÄÀÏÀ»
- ¸¸µç´Ù. Á¢±Ù ·Î±×ÀÇ ÆÄÀϸíÀÌ ½½·¡½¬·Î ½ÃÀÛÇÏÁö¾ÊÀ¸¸é
- <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>ÀÇ »ó´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>¾ÕÀÇ ¼³Á¤Àº °øÅë·Î±×Çü½Ä(Common Log Format, CLF)À̶ó´Â
- Çü½ÄÀ¸·Î ·Î±× Ç׸ñÀ» ±â·ÏÇÑ´Ù. ¿©·¯ ´Ù¸¥ À¥¼­¹öµéµµ ÀÌ·±
- Ç¥ÁØ Çü½ÄÀ¸·Î ·Î±×¸¦ ¸¸µé¸ç, ¿©·¯ ·Î±× ºÐ¼® ÇÁ·Î±×·¥¿¡¼­
- ÀÐÀ» ¼ö ÀÖ´Ù. CLF·Î ¸¸µç ·Î±×ÆÄÀÏ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><p><code>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- </code></p></div>
-
- <p>ÀÌÁ¦ ·Î±× Ç׸ñÀÇ °¢ ºÎºÐÀ» ¼³¸íÇÑ´Ù.</p>
-
- <dl>
- <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
- <dd>¼­¹ö¿¡ ¿äûÀ» ÇÑ Å¬¶óÀ̾ðÆ®(¿ø°Ý È£½ºÆ®)ÀÇ IP
- ÁÖ¼ÒÀÌ´Ù. <code class="directive"><a href="./mod/core.html#hostnamelookups">HostnameLookups</a></code>°¡
- <code>On</code>À̶ó¸é È£½ºÆ®¸íÀ» ã¾Æ¼­ IP ÁÖ¼Ò ÀÚ¸®¿¡
- ´ë½Å ¾´´Ù. ±×·¯³ª ÀÌ ¼³Á¤Àº ¼­¹ö¸¦ ¸Å¿ì ´À¸®°Ô ÇÒ ¼ö
- ÀÖÀ¸¹Ç·Î ÃßõÇÏÁö ¾Ê´Â´Ù. È£½ºÆ®¸íÀ» ¾Ë·Á¸é ´ë½Å ³ªÁß¿¡
- <a href="programs/logresolve.html">logresolve</a>¿Í
- °°Àº ·Î±×¸¦ ó¸®ÇÏ´Â ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.
- ¿©±â¿¡ ³ª¿Â IP ÁÖ¼Ò´Â »ç¿ëÀÚ°¡ »ç¿ëÇÏ´Â ÄÄÇ»ÅÍ ÁÖ¼Ò°¡
- ¾Æ´Ò ¼ö ÀÖ´Ù. ÇÁ·Ï½Ã ¼­¹ö°¡ »ç¿ëÀÚ¿Í ¼­¹ö»çÀÌ¿¡ Á¸ÀçÇÑ´Ù¸é,
- ¿ø·¡ ÄÄÇ»ÅÍ ÁÖ¼Ò°¡ ¾Æ´Ï¶ó ÇÁ·Ï½ÃÀÇ ÁÖ¼Ò°¡ ±â·ÏµÉ °ÍÀÌ´Ù.</dd>
-
- <dt><code>-</code> (<code>%l</code>)</dt>
-
- <dd>Ãâ·Â¿¡¼­ "»©±â±âÈ£"´Â ¿äûÇÑ Á¤º¸°¡ ¾øÀ½À» ³ªÅ¸³½´Ù.
- ÀÌ °æ¿ì ¿©±â¿¡ ³ª¿Ã Á¤º¸´Â Ŭ¶óÀ̾ðÆ® ÄÄÇ»ÅÍÀÇ
- <code>identd</code>°¡ Á¦°øÇÒ Å¬¶óÀ̾ðÆ®ÀÇ RFC 1413
- ½Å¿øÀÌ´Ù. ÀÌ Á¤º¸´Â ¸Å¿ì ¹ÏÀ» ¼ö ¾ø±â¶§¹®¿¡, ±ä¹ÐÈ÷
- °ü¸®µÇ´Â ³»ºÎ ³×Æ®¿÷ÀÌ ¾Æ´Ï¶ó¸é Àý´ë·Î ÀÌ Á¤º¸¸¦ »ç¿ëÇϸé
- ¾ÈµÈ´Ù. <code class="directive"><a href="./mod/core.html#identitycheck">IdentityCheck</a></code>°¡
- <code>On</code>ÀÌ ¾Æ´Ï¶ó¸é ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌ Á¤º¸¸¦
- ¾Ë¾Æº¸·Á°í ½ÃµµÇÏÁöµµ ¾Ê´Â´Ù.</dd>
-
- <dt><code>frank</code> (<code>%u</code>)</dt>
-
- <dd>ÀÌ´Â HTTP ÀÎÁõÀ¸·Î ¾Ë¾Æ³½ ¹®¼­¸¦ ¿äûÇÑ »ç¿ëÀÚÀÇ
- useridÀÌ´Ù. º¸Åë ÀÌ °ªÀº CGI ½ºÅ©¸³Æ®¿¡°Ô
- <code>REMOTE_USER</code> ȯ°æº¯¼ö·Î ³Ñ°ÜÁø´Ù. ¿äûÀÇ
- »óÅÂÄڵ尡 401À̶ó¸é (¾Æ·¡ Âü°í) »ç¿ëÀÚ°¡ ¾ÆÁ÷ ÀÎÁõÀ»
- °ÅÄ¡Áö ¾Ê¾ÒÀ¸¹Ç·Î ÀÌ °ªÀ» ¹ÏÀ¸¸é ¾ÈµÈ´Ù. ¹®¼­¸¦ ¾ÏÈ£·Î
- º¸È£ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ Ç׸ñÀº ÀÌÀü Ç׸ñ°ú °°ÀÌ
- "<code>-</code>"ÀÌ´Ù.</dd>
-
- <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
- (<code>%t</code>)</dt>
-
- <dd>
- ¼­¹ö°¡ ¿äû󸮸¦ ¸¶Ä£ ½Ã°£.
- Çü½ÄÀº:
-
- <p class="indent">
- <code>[day/month/year:hour:minute:second zone]<br />
- day = ¼ýÀÚ 2°³<br />
- month = ¼ýÀÚ 3°³<br />
- year = ¼ýÀÚ 4°³<br />
- hour = ¼ýÀÚ 2°³<br />
- minute = ¼ýÀÚ 2°³<br />
- second = ¼ýÀÚ 2°³<br />
- zone = (`+' | `-') ¼ýÀÚ 4°³</code>
- </p>
- ·Î±× Çü½Ä¹®ÀÚ¿­¿¡ <code>%{format}t</code>¸¦ »ç¿ëÇÏ¿©
- ´Ù¸¥ Çü½ÄÀ¸·Î ½Ã°£À» Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. <code>format</code>Àº
- C Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ <code>strftime(3)</code>°ú °°´Ù.
- </dd>
-
- <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
- (<code>\"%r\"</code>)</dt>
-
- <dd>Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÁÙÀÌ ½Öµû¿ÈÇ¥·Î ¹­¿©ÀÖ´Ù. ¿äûÁÙÀº
- ¸Å¿ì À¯¿ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ù°, Ŭ¶óÀ̾ðÆ®°¡ »ç¿ëÇÑ
- ¸Þ½áµå´Â <code>GET</code>ÀÌ´Ù. µÑ°, Ŭ¶óÀ̾ðÆ®´Â ÀÚ¿ø
- <code>/apache_pb.gif</code>¸¦ ¿äûÇÑ´Ù. ¼¼¹ø°, Ŭ¶óÀ̾ðÆ®´Â
- <code>HTTP/1.0</code> ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù. ¿äûÁÙÀÇ
- ¿©·¯ ºÎºÐÀ» µû·Î ·Î±×ÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, Çü½Ä¹®ÀÚ¿­
- "<code>%m %U%q %H</code>"Àº "<code>%r</code>"°ú ¶È°°ÀÌ
- ¸Þ½áµå, °æ·Î, ÁúÀǹ®ÀÚ¿­, ÇÁ·ÎÅäÄÝÀ» ·Î±×ÇÑ´Ù.</dd>
-
- <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
- <dd>ÀÌ´Â ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â »óÅÂÄÚµåÀÌ´Ù. ÀÌ
- Á¤º¸´Â (2·Î ½ÃÀÛÇÏ´Â ÄÚµå) ¿äûÀÌ ¼º°øÇÏ¿´´ÂÁö, (4·Î
- ½ÃÀÛÇÏ´Â ÄÚµå) Ŭ¶óÀ̾ðÆ®¿¡ ¿À·ù°¡ ÀÖ´ÂÁö, (5·Î ½ÃÀÛÇÏ´Â
- ÄÚµå) ¼­¹ö¿¡ ¿À·ù°¡ ÀÖ´ÂÁö ¾Ë·ÁÁֹǷΠ¸Å¿ì Áß¿äÇÏ´Ù.
- »óÅÂÄÚµåÀÇ Àüü ¸ñ·ÏÀº <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
- ±Ô¾à</a> (RFC2616 section 10)¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.</dd>
-
- <dt><code>2326</code> (<code>%b</code>)</dt>
-
- <dd>¸¶Áö¸· Ç׸ñÀº ÀÀ´ä Çì´õ¸¦ Á¦¿ÜÇÏ°í Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³»´Â ³»¿ëÀÇ Å©±â¸¦ ³ªÅ¸³½´Ù. Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â
- ³»¿ëÀÌ ¾ø´Ù¸é ÀÌ °ªÀº "<code>-</code>"ÀÌ´Ù. ³»¿ëÀÌ
- ¾ø´Â °æ¿ì "<code>0</code>"À» ·Î±×ÇÏ·Á¸é ´ë½Å
- <code>%B</code>¸¦ »ç¿ëÇÑ´Ù.</dd>
- </dl>
-
-
- <h3><a name="combined" id="combined">Combined ·Î±× Çü½Ä</a></h3>
-
-
- <p>ÀÚÁÖ »ç¿ëµÇ´Â ´Ù¸¥ Çü½Ä¹®ÀÚ¿­Àº °áÇյȷα×Çü½Ä(Combined
- Log Format)ÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </code></p></div>
-
- <p>ÀÌ Çü½ÄÀº µÎ Ç׸ñÀ» ´õ Ãß°¡ÇÑ °ÍÀ» Á¦¿ÜÇÏ°í´Â Common
- ·Î±× Çü½Ä°ú ¿ÏÀüÈ÷ °°´Ù. Ãß°¡µÈ Ç׸ñµéÀº ÆÛ¼¾Æ® Áö½Ã¾î
- <code>%{<em>header</em>}i</code>¸¦ »ç¿ëÇÑ´Ù. ¿©±â¼­
- <em>header</em> ÀÚ¸®¿¡ HTTP ¿äû Çì´õ À̸§ÀÌ ³ª¿Ã ¼ö
- ÀÖ´Ù. ÀÌ Çü½ÄÀÇ Á¢±Ù ·Î±×´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><p><code>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- "http://www.example.com/start.html" "Mozilla/4.08 [en]
- (Win98; I ;Nav)"
- </code></p></div>
-
- <p>Ãß°¡µÈ Ç׸ñÀº:</p>
-
- <dl>
- <dt><code>"http://www.example.com/start.html"</code>
- (<code>\"%{Referer}i\"</code>)</dt>
-
- <dd>"Referer" (¸ÂÃã¹ý Ʋ¸®Áö¾Ê¾ÒÀ½) HTTP ¿äû Çì´õ.
- Ŭ¶óÀ̾ðÆ®°¡ ÂüÁ¶Çß´Ù°í ¼­¹ö¿¡°Ô ¾Ë¸° »çÀÌÆ®ÀÌ´Ù.
- (Áï, <code>/apache_pb.gif</code>¸¦ ¸µÅ©ÇÏ¿´°Å³ª Æ÷ÇÔÇÑ
- »çÀÌÆ®ÀÌ´Ù.)</dd>
-
- <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
- (<code>\"%{User-agent}i\"</code>)</dt>
-
- <dd>User-Agent HTTP ¿äû Çì´õ. Ŭ¶óÀ̾ðÆ® ºê¶ó¿ìÀú°¡
- Àڽſ¡ ´ëÇØ ¾Ë¸®´Â ½Äº°Á¤º¸ÀÌ´Ù.</dd>
- </dl>
-
-
- <h3><a name="multiple" id="multiple">¿©·¯ Á¢±Ù ·Î±×</a></h3>
-
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ¿©·¯ <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇϸé Á¢±Ù ·Î±×°¡ ¿©·¯°³ ¸¸µé¾îÁø´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½
- ¼³Á¤Àº ¼¼°¡Áö Á¢±Ù ·Î±×¸¦ ¸¸µç´Ù. ù¹ø°´Â ±âº» CLF Á¤º¸¸¦
- ±â·ÏÇÏ°í, µÎ¹ø°¿Í ¼¼¹ø°´Â referer¿Í ºê¶ó¿ìÀú Á¤º¸¸¦
- ±â·ÏÇÑ´Ù. ¸¶Áö¸· µÎ <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ÁÙÀº ¾î¶»°Ô
- ÀÌÀü <code>ReferLog</code>¿Í <code>AgentLog</code> Áö½Ã¾îÀÇ
- ±â´ÉÀ» Èä³»³¾ ¼ö ÀÖ´ÂÁö º¸¿©ÁØ´Ù.</p>
-
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </code></p></div>
-
- <p>¶Ç, ÀÌ ¿¹´Â <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>À¸·Î ¹Ýµå½Ã
- º°¸íÀ» Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾øÀ½À» º¸¿©ÁØ´Ù. ´ë½Å <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> Áö½Ã¾î¿¡
- Á÷Á¢ ·Î±× Çü½ÄÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
-
- <h3><a name="conditional" id="conditional">Á¶°ÇºÎ ·Î±×</a></h3>
-
-
- <p>Ŭ¶óÀ̾ðÆ® ¿äûÀÇ ¼º°Ý¿¡ µû¶ó ÇØ´ç Ç׸ñÀ» Á¢±Ù ·Î±×¿¡
- ±â·ÏÇÏÁö¾Ê°í ½ÍÀ» ¶§°¡ ÀÖ´Ù. <a href="env.html">ȯ°æº¯¼ö</a>¸¦
- »ç¿ëÇÏ¸é ½±°Ô ÇØ°áµÈ´Ù. ¸ÕÀú, Ŭ¶óÀ̾ðÆ®°¡ ƯÁ¤ Á¶°ÇÀ»
- ¸¸Á·Çϸé ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ ÀÛ¾÷¿¡´Â º¸Åë <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>¸¦ »ç¿ëÇÑ´Ù.
- ±×¸®°í <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- Áö½Ã¾î¿¡ <code>env=</code>À» »ç¿ëÇÏ¿© ȯ°æº¯¼ö À¯¹«¿¡
- µû¶ó ¿äûÀ» Áý¾î³Ö°Å³ª »«´Ù. ¿¹¸¦ µé¸é:</p>
-
- <div class="example"><p><code>
- # loop-back ÀÎÅÍÆäÀ̽º¿¡¼­ ¿äûÀ» Ç¥½ÃÇÑ´Ù<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # robots.txt ÆÄÀÏ¿¡ ´ëÇÑ ¿äûÀ» Ç¥½ÃÇÑ´Ù<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # ³ª¸ÓÁö¸¦ ·Î±×¿¡ ³²±ä´Ù<br />
- CustomLog logs/access_log common env=!dontlog
- </code></p></div>
-
- <p>´Ù¸¥ ¿¹·Î ¿µ¾î±Ç »ç¿ëÀÚÀÇ ¿äû¸¸À» ÇÑ ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÏ°í,
- ºñ¿µ¾î±Ç »ç¿ëÀÚÀÇ ¿äûÀº ´Ù¸¥ ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÏ´Â °æ¿ì¸¦
- »ý°¢Çغ¸ÀÚ.</p>
-
- <div class="example"><p><code>
- SetEnvIf Accept-Language "en" english<br />
- CustomLog logs/english_log common env=english<br />
- CustomLog logs/non_english_log common env=!english
- </code></p></div>
-
- <p>Á¶°ÇºÎ ·Î±×´Â ¸Å¿ì °­·ÂÇÏ°í À¯¿¬ÇÏÁö¸¸, ÀÌ°ÍÀÌ ·Î±×
- ³»¿ëÀ» Á¶ÀýÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ¾Æ´Ï´Ù. ·Î±×ÆÄÀÏÀº ¼­¹öÀÇ
- ¸ðµç ÇൿÀ» ±â·ÏÇÒ¶§ ´õ À¯¿ëÇÏ´Ù. ³ªÁß¿¡ ¿øÇÏÁö¾Ê´Â ¿äûÀ»
- Á¦¿ÜÇÏ°í ·Î±×ÆÄÀÏÀ» ºÐ¼®ÇÏ´Â °ÍÀÌ ´õ ½±´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="rotation" id="rotation">·Î±× ¼øȯ (Log Rotation)</a></h2>
-
-
- <p>Á¶±Ý ¹Ù»Û ¼­¹öÁ¶Â÷µµ ·Î±×ÆÄÀÏ¿¡ ÀúÀåµÇ´Â Á¤º¸·®Àº ¸Å¿ì
- ¸¹´Ù. Á¢¼Ó ·Î±×´Â º¸Åë ¸¸¹ø ¿äû´ç 1MB ÀÌ»ó Áõ°¡ÇÑ´Ù. °á°úÀûÀ¸·Î
- ±âÁ¸ÀÇ ·Î±×¸¦ ¿Å±â°Å³ª Áö¿ì´Â ¹æ¹ýÀ¸·Î ·Î±×¸¦ ÁÖ±âÀûÀ¸·Î
- ¼øÈ°ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ÆÄÀÏÀ» ¿­°íÀÖ´Â µ¿¾È¿¡´Â °è¼Ó
- ÀÌÀü ·Î±×ÆÄÀÏ¿¡ ¾²±â¶§¹®¿¡ ¼­¹ö°¡ ½ÇÇàÁßÀ϶§ ·Î±×¸¦ ¼øȯÇÒ
- ¼ö ¾ø´Ù. ´ë½Å ·Î±×ÆÄÀÏÀ» ¿Å±â°Å³ª Áö¿îÈÄ ¼­¹ö¸¦ <a href="stopping.html">Àç½ÃÀÛ</a>ÇÏ¿©, ·Î±×ÆÄÀÏÀ» »õ·Î ¿­¾î¾ß
- ÇÑ´Ù.</p>
-
- <p><em>Á¡ÀÝÀº</em> Àç½ÃÀÛÀ» »ç¿ëÇÏ¸é ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®¿Í
- ±âÁ¸ÀÇ È¤Àº ´ë±âµÈ ¿¬°áÀ» ÀÒÁö¾Ê°í »õ ·Î±×ÆÄÀÏÀ» ¿­ ¼ö ÀÖ´Ù.
- ±×·¯³ª À̸¦ À§ÇØ ¼­¹ö´Â ¿À·¡µÈ ¿äûÀÇ ¼­ºñ½º¸¦ ³¡³»´Â µ¿¾È
- ÀÌÀü ·Î±×ÆÄÀÏÀ» °è¼Ó »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î Àç½ÃÀÛÇÑÈÄ
- ·Î±×ÆÄÀÏÀ» ó¸®Çϱâ Àü¿¡ ¾ó¸¶°£ ±â´Ù¸± ÇÊ¿ä°¡ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î
- ´ÙÀ½°ú °°ÀÌ ·Î±×¸¦ ¼øȯÇÏ°í, µð½ºÅ©°ø°£À» Àý¾àÇϱâÀ§ÇØ ÀÌÀü
- ·Î±×¸¦ ¾ÐÃàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </code></p></div>
-
- <p>·Î±×¸¦ ¼øȯÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº ´ÙÀ½ Àý¿¡¼­ ¼³¸íÇÒ <a href="#piped">ÆÄÀÌÇÁ ·Î±×</a>¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="piped" id="piped">·Î±×¸¦ ÆÄÀÌÇÁ·Î º¸³»±â</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ¿À·ù ·Î±×¿Í Á¢±Ù ·Î±×¸¦ ÆÄÀÏ¿¡ Á÷Á¢
- ¾²Áö¾Ê°í ÆÄÀÌÇÁ¸¦ ÅëÇØ ´Ù¸¥ ÇÁ·Î¼¼½º·Î º¸³¾ ¼ö ÀÖ´Ù. ÀÌ
- ±â´ÉÀ» »ç¿ëÇÏ¸é ¼­¹ö¿¡ Äڵ带 Ãß°¡ÇÏÁö¾Ê°íµµ ¸Å¿ì À¯¿¬ÇÏ°Ô
- ·Î±×¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. ·Î±×¸¦ ÆÄÀÌÇÁ¿¡ ¾²±âÀ§ÇØ ÆÄÀϸí
- ÀÚ¸®¿¡ ÆÄÀÌÇÁ¹®ÀÚ "<code>|</code>"¿Í µÚ¿¡ Ç¥ÁØÀÔ·ÂÀ¸·Î
- ·Î±× Ç׸ñÀ» ÀÐÀ» ½ÇÇàÆÄÀϸíÀ» ÀûÀ¸¸é µÈ´Ù. ¾ÆÆÄÄ¡´Â ¼­¹ö°¡
- ½ÃÀÛÇÒ¶§ ÆÄÀÌÇÁ·Î ¿¬°áÇÒ ·Î±× ÇÁ·Î¼¼½º¸¦ ½ÃÀÛÇÏ°í, ¼­¹ö°¡
- ½ÇÇàµÇ´Â µ¿¾È ÇÁ·Î¼¼½º°¡ Á×À¸¸é ´Ù½Ã ½ÃÀÛÇÑ´Ù. (ÀÌ ¸¶Áö¸·
- ±â´É¶§¹®¿¡ ¿ì¸®´Â ÀÌ ¹æ¹ýÀ» "¹ÏÀ» ¼ö ÀÖ´Â ÆÄÀÌÇÁ ·Î±×"¶ó°í
- ºÎ¸¥´Ù.)</p>
-
- <p>ÆÄÀÌÇÁ·Î ¿¬°áµÈ ·Î±× ÇÁ·Î¼¼½º´Â ºÎ¸ð ¾ÆÆÄÄ¡ httpd ÇÁ·Î¼¼½º°¡
- ¶ç¿ì°í, ÇÁ·Î¼¼½ºÀÇ useridµµ °°´Ù. Áï, ÆÄÀÌÇÁ·Î ¿¬°áµÈ ·Î±×
- ÇÁ·Î±×·¥Àº º¸Åë root·Î ½ÇÇàµÈ´Ù. ±×·¯¹Ç·Î ÇÁ·Î±×·¥À» °£´ÜÇÏ°í
- ¾ÈÀüÇÏ°Ô ¸¸µå´Â °ÍÀÌ ¸Å¿ì Áß¿äÇÏ´Ù.</p>
-
- <p>ÆÄÀÌÇÁ·Î ºÎ¸£´Â Àüü ¸í·É¾î¸¦ µû¿ÈÇ¥·Î ¹­À½À» ¸í½ÉÇ϶ó.
- ÀÌ ¿¹´Â Á¢±Ù ·Î±×¿¡ ´ëÇÑ °ÍÀÌÁö¸¸, ¿À·ù ·Î±×µµ ¸¶Âù°¡Áö´Ù.</p>
-
- <p>¼­¹ö¸¦ Àç½ÃÀÛÇÏÁö¾Ê°í ·Î±×¸¦ ¼øȯÇÒ ¼ö ÀÖ´Â °ÍÀÌ ÆÄÀÌÇÁ
- ·Î±×¸¦ »ç¿ëÇÏ´Â Áß¿äÇÑ ÀÌÀ¯´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â À̸¦ À§ÇØ
- <a href="programs/rotatelogs.html">rotatelogs</a>¶ó´Â °£´ÜÇÑ
- ÇÁ·Î±×·¥À» Æ÷ÇÔÇÑ´Ù. ¿¹¸¦ µé¾î 24½Ã°£¸¶´Ù ·Î±×¸¦ ¼øȯÇÑ´Ù¸é:</p>
-
- <div class="example"><p><code>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </code></p></div>
-
- <p>´Ù¸¥ »çÀÌÆ®¿¡ <a href="http://www.cronolog.org/">cronolog</a>¶ó´Â ºñ½ÁÇÏÁö¸¸
- ÈξÀ ´õ À¯¿¬ÇÑ ·Î±× ¼øȯ ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù.</p>
-
- <p>Á¶°ÇºÎ ·Î±×¿Í °°ÀÌ ÆÄÀÌÇÁ ·Î±×´Â ¸Å¿ì °­·ÂÇÑ µµ±¸Áö¸¸,
- ³ªÁß¿¡ ó¸®ÇÏ´Â µîÀÇ ´õ °£´ÜÇÑ ¹æ¹ýÀÌ °¡´ÉÇÑ °æ¿ì »ç¿ëÇؼ­´Â
- ¾ÈµÈ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">°¡»óÈ£½ºÆ®</a></h2>
-
-
- <p>¸¹Àº <a href="vhosts/">°¡»óÈ£½ºÆ®</a>°¡ ÀÖ´Â ¼­¹ö¸¦
- ¿î¿µÇÒ¶§ ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î ·Î±×ÆÄÀÏÀ» ´Ù·ê ¼ö ÀÖ´Ù. ¸ÕÀú,
- È£½ºÆ®°¡ ÇÑ°³ÀÎ ¼­¹ö¿Í °°ÀÌ ·Î±×¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¼½¼ÇÀÌ
- ¾Æ´Ñ ÁÖ¼­¹ö ¼³Á¤¿¡ ·Î±× Áö½Ã¾î¸¦ µÎ¸é ¸ðµç ¿äûÀÌ °°Àº Á¢±Ù
- ·Î±×¿Í ¿À·ù ·Î±×·Î ±â·ÏµÈ´Ù. ÀÌ ¹æ¹ýÀº °¡»óÈ£½ºÆ®º°·Î ½±°Ô
- Åë°è󸮸¦ ÇÒ ¼ö ¾ø´Ù.</p>
-
- <p><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¼½¼Ç ¾È¿¡ <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>³ª
- <code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇϸé ÇØ´ç °¡»óÈ£½ºÆ®¿¡ ´ëÇÑ ¿äû°ú ¿À·ù¸¸ÀÌ ÁöÁ¤µÈ
- ÆÄÀÏ¿¡ ±â·ÏµÈ´Ù. ·Î±× Áö½Ã¾î°¡ ¾ø´Â ´Ù¸¥ °¡»óÈ£½ºÆ®´Â °è¼Ó
- ÁÖ¼­¹ö ·Î±×¿¡ ·Î±×¸¦ ±â·ÏÇÑ´Ù. ÀÌ ¹æ¹ýÀº °¡»óÈ£½ºÆ® °³¼ö°¡
- ÀûÀ» °æ¿ì ¸Å¿ì À¯¿ëÇÏÁö¸¸, È£½ºÆ® ¼ö°¡ ¸¹´Ù¸é °ü¸®Çϱâ
- Èûµé¾îÁø´Ù. ¶Ç, <a href="vhosts/fd-limits.html">ÆÄÀϱâ¼úÀÚ°¡
- ºÎÁ·ÇÑ</a> ¹®Á¦°¡ ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <p>Á¢±Ù ·Î±×ÀÇ °æ¿ì ¸Å¿ì ÁÁÀº ÇØ°áÃ¥ÀÌ ÀÖ´Ù. ·Î±× Çü½Ä¹®ÀÚ¿­¿¡
- °¡»óÈ£½ºÆ®¿¡ ´ëÇÑ Á¤º¸¸¦ Ãß°¡ÇÏ¸é ¸ðµç È£½ºÆ®°¡ °°Àº ·Î±×¸¦
- »ç¿ëÇÏ°í, ³ªÁß¿¡ ·Î±×¸¦ °¡»óÈ£½ºÆ®º°·Î ³ª´­ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, ´ÙÀ½ Áö½Ã¾î¸¦ ºÁ¶ó.</p>
-
- <div class="example"><p><code>
- LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </code></p></div>
-
- <p><code>%v</code>´Â ¿äûÀ» ¼­ºñ½ºÇÏ´Â °¡»óÈ£½ºÆ® À̸§À»
- ±â·ÏÇÑ´Ù. ³ªÁß¿¡ <a href="programs/other.html">split-logfile</a>
- °°Àº ÇÁ·Î±×·¥À¸·Î Á¢±Ù ·Î±×¸¦ °¡»óÈ£½ºº°·Î ³ª´­ ¼ö ÀÖ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">´Ù¸¥ ·Î±×ÆÄÀÏ</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table>
-
- <h3><a name="pidfile" id="pidfile">PID ÆÄÀÏ</a></h3>
-
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ½ÃÀÛÇÒ¶§ <code>logs/httpd.pid</code>
- ÆÄÀÏ¿¡ ºÎ¸ð httpd ÇÁ·Î¼¼½ºÀÇ process id¸¦ ÀúÀåÇÑ´Ù. ÀÌ
- ÆÄÀϸíÀº <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>
- Áö½Ã¾î·Î º¯°æÇÒ ¼ö ÀÖ´Ù. process-id´Â °ü¸®ÀÚ°¡ ºÎ¸ð ÇÁ·Î¼¼½º¿¡
- ½Ã±×³ÎÀ» º¸³» ¼­¹ö¸¦ Àç½ÃÀÛÇϰųª Á×À϶§ »ç¿ëÇÑ´Ù.
- À©µµ¿ìÁî¿¡¼­´Â ´ë½Å -k ¸í·ÉÇà¿É¼ÇÀ» »ç¿ëÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ
- Á¤º¸´Â <a href="stopping.html">Áß´Ü°ú Àç½ÃÀÛ</a> ÆäÀÌÁö¸¦
- Âü°íÇ϶ó.</p>
-
-
- <h3><a name="scriptlog" id="scriptlog">½ºÅ©¸³Æ® ·Î±×</a></h3>
-
-
- <p>µð¹ö±ëÀ» µ½±âÀ§ÇØ <code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- CGI ½ºÅ©¸³Æ®ÀÇ ÀԷ°ú Ãâ·ÂÀ» ±â·ÏÇÒ ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾î´Â
- ¿ÀÁ÷ Å×½ºÆ®¿ëÀ¸·Î¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù. ½ÇÁ¦ »ç¿ëÇÏ´Â ¼­¹ö¿¡¼­
- »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="mod/mod_cgi.html">mod_cgi</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
-
- <h3><a name="rewritelog" id="rewritelog">ÀçÀÛ¼º ·Î±×</a></h3>
-
-
- <p><a href="mod/mod_rewrite.html">mod_rewrite</a>ÀÇ °­·ÂÇÏ°í
- º¹ÀâÇÑ ±â´ÉÀ» »ç¿ëÇÑ´Ù¸é µð¹ö±ëÀ» À§ÇØ °ÅÀÇ Ç×»ó <code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code>¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡
- ÀÖ´Ù. ÀÌ ·Î±×ÆÄÀÏÀº ÀçÀÛ¼º ¿£ÁøÀÌ ¾î¶»°Ô ¿äûÀ» º¯È¯ÇÏ´ÂÁö¿¡
- ´ëÇØ ÀÚ¼¼È÷ ¾Ë·ÁÁØ´Ù. ÀÚ¼¼ÇÑ Á¤µµ´Â <code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code> Áö½Ã¾î·Î
- Á¶ÀýÇÑ´Ù.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/logs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/logs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/logs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/logs.xml b/docs/manual/logs.xml
deleted file mode 100644
index 1fc075ff1c..0000000000
--- a/docs/manual/logs.xml
+++ /dev/null
@@ -1,626 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.14 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="logs.xml.meta">
-
- <title>Log Files</title>
-
- <summary>
- <p>In order to effectively manage a web server, it is necessary
- to get feedback about the activity and performance of the
- server as well as any problems that may be occurring. The Apache
- HTTP Server provides very comprehensive and flexible logging
- capabilities. This document describes how to configure its
- logging capabilities, and how to understand what the logs
- contain.</p>
- </summary>
-
- <section id="security">
- <title>Security Warning</title>
-
- <p>Anyone who can write to the directory where Apache is
- writing a log file can almost certainly gain access to the uid
- that the server is started as, which is normally root. Do
- <em>NOT</em> give people write access to the directory the logs
- are stored in without being aware of the consequences; see the
- <a href="misc/security_tips.html">security tips</a> document
- for details.</p>
-
- <p>In addition, log files may contain information supplied
- directly by the client, without escaping. Therefore, it is
- possible for malicious clients to insert control-characters in
- the log files, so care must be taken in dealing with raw
- logs.</p>
- </section>
-
- <section id="errorlog">
- <title>Error Log</title>
-
- <related>
- <directivelist>
- <directive module="core">ErrorLog</directive>
- <directive module="core">LogLevel</directive>
- </directivelist>
- </related>
-
- <p>The server error log, whose name and location is set by the
- <directive module="core">ErrorLog</directive> directive, is the
- most important log file. This is the place where Apache httpd
- will send diagnostic information and record any errors that it
- encounters in processing requests. It is the first place to
- look when a problem occurs with starting the server or with the
- operation of the server, since it will often contain details of
- what went wrong and how to fix it.</p>
-
- <p>The error log is usually written to a file (typically
- <code>error_log</code> on unix systems and
- <code>error.log</code> on Windows and OS/2). On unix systems it
- is also possible to have the server send errors to
- <code>syslog</code> or <a href="#piped">pipe them to a
- program</a>.</p>
-
- <p>The format of the error log is relatively free-form and
- descriptive. But there is certain information that is contained
- in most error log entries. For example, here is a typical
- message.</p>
-
- <example>
- [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
- client denied by server configuration:
- /export/home/live/ap/htdocs/test
- </example>
-
- <p>The first item in the log entry is the date and time of the
- message. The second entry lists the severity of the error being
- reported. The <directive module="core">LogLevel</directive>
- directive is used to control the types of errors that are sent
- to the error log by restricting the severity level. The third
- entry gives the IP address of the client that generated the
- error. Beyond that is the message itself, which in this case
- indicates that the server has been configured to deny the
- client access. The server reports the file-system path (as
- opposed to the web path) of the requested document.</p>
-
- <p>A very wide variety of different messages can appear in the
- error log. Most look similar to the example above. The error
- log will also contain debugging output from CGI scripts. Any
- information written to <code>stderr</code> by a CGI script will
- be copied directly to the error log.</p>
-
- <p>It is not possible to customize the error log by adding or
- removing information. However, error log entries dealing with
- particular requests have corresponding entries in the <a
- href="#accesslog">access log</a>. For example, the above example
- entry corresponds to an access log entry with status code 403.
- Since it is possible to customize the access log, you can
- obtain more information about error conditions using that log
- file.</p>
-
- <p>During testing, it is often useful to continuously monitor
- the error log for any problems. On unix systems, you can
- accomplish this using:</p>
-
- <example>
- tail -f error_log
- </example>
- </section>
-
- <section id="accesslog">
- <title>Access Log</title>
-
- <related>
- <modulelist>
- <module>mod_log_config</module>
- <module>mod_setenvif</module>
- </modulelist>
- <directivelist>
- <directive module="mod_log_config">CustomLog</directive>
- <directive module="mod_log_config">LogFormat</directive>
- <directive module="mod_setenvif">SetEnvIf</directive>
- </directivelist>
- </related>
-
- <p>The server access log records all requests processed by the
- server. The location and content of the access log are
- controlled by the <directive module="mod_log_config">CustomLog</directive>
- directive. The <directive module="mod_log_config">LogFormat</directive>
- directive can be used to simplify the selection of
- the contents of the logs. This section describes how to configure the server
- to record information in the access log.</p>
-
- <p>Of course, storing the information in the access log is only
- the start of log management. The next step is to analyze this
- information to produce useful statistics. Log analysis in
- general is beyond the scope of this document, and not really
- part of the job of the web server itself. For more information
- about this topic, and for applications which perform log
- analysis, check the <a
- href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
- Open Directory</a> or <a
- href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
- Yahoo</a>.</p>
-
- <p>Various versions of Apache httpd have used other modules and
- directives to control access logging, including
- mod_log_referer, mod_log_agent, and the
- <code>TransferLog</code> directive. The <directive
- module="mod_log_config">CustomLog</directive> directive now subsumes
- the functionality of all the older directives.</p>
-
- <p>The format of the access log is highly configurable. The format
- is specified using a format string that looks much like a C-style
- printf(1) format string. Some examples are presented in the next
- sections. For a complete list of the possible contents of the
- format string, see the <module>mod_log_config</module> <a
- href="mod/mod_log_config.html#formats">format strings</a>.</p>
-
- <section id="common">
- <title>Common Log Format</title>
-
- <p>A typical configuration for the access log might look as
- follows.</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common
- </example>
-
- <p>This defines the <em>nickname</em> <code>common</code> and
- associates it with a particular log format string. The format
- string consists of percent directives, each of which tell the
- server to log a particular piece of information. Literal
- characters may also be placed in the format string and will be
- copied directly into the log output. The quote character
- (<code>"</code>) must be escaped by placing a back-slash before
- it to prevent it from being interpreted as the end of the
- format string. The format string may also contain the special
- control characters "<code>\n</code>" for new-line and
- "<code>\t</code>" for tab.</p>
-
- <p>The <directive module="mod_log_config">CustomLog</directive>
- directive sets up a new log file using the defined
- <em>nickname</em>. The filename for the access log is relative to
- the <directive module="core">ServerRoot</directive> unless it
- begins with a slash.</p>
-
- <p>The above configuration will write log entries in a format
- known as the Common Log Format (CLF). This standard format can
- be produced by many different web servers and read by many log
- analysis programs. The log file entries produced in CLF will
- look something like this:</p>
-
- <example>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- </example>
-
- <p>Each part of this log entry is described below.</p>
-
- <dl>
- <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
- <dd>This is the IP address of the client (remote host) which
- made the request to the server. If <directive
- module="core">HostnameLookups</directive> is
- set to <code>On</code>, then the server will try to determine
- the hostname and log it in place of the IP address. However,
- this configuration is not recommended since it can
- significantly slow the server. Instead, it is best to use a
- log post-processor such as <a
- href="programs/logresolve.html">logresolve</a> to determine
- the hostnames. The IP address reported here is not
- necessarily the address of the machine at which the user is
- sitting. If a proxy server exists between the user and the
- server, this address will be the address of the proxy, rather
- than the originating machine.</dd>
-
- <dt><code>-</code> (<code>%l</code>)</dt>
-
- <dd>The "hyphen" in the output indicates that the requested
- piece of information is not available. In this case, the
- information that is not available is the RFC 1413 identity of
- the client determined by <code>identd</code> on the clients
- machine. This information is highly unreliable and should
- almost never be used except on tightly controlled internal
- networks. Apache httpd will not even attempt to determine
- this information unless <directive
- module="core">IdentityCheck</directive> is set
- to <code>On</code>.</dd>
-
- <dt><code>frank</code> (<code>%u</code>)</dt>
-
- <dd>This is the userid of the person requesting the document
- as determined by HTTP authentication. The same value is
- typically provided to CGI scripts in the
- <code>REMOTE_USER</code> environment variable. If the status
- code for the request (see below) is 401, then this value
- should not be trusted because the user is not yet
- authenticated. If the document is not password protected,
- this entry will be "<code>-</code>" just like the previous
- one.</dd>
-
- <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
- (<code>%t</code>)</dt>
-
- <dd>
- The time that the server finished processing the request.
- The format is:
-
- <p class="indent">
- <code>[day/month/year:hour:minute:second zone]<br />
- day = 2*digit<br />
- month = 3*letter<br />
- year = 4*digit<br />
- hour = 2*digit<br />
- minute = 2*digit<br />
- second = 2*digit<br />
- zone = (`+' | `-') 4*digit</code>
- </p>
- It is possible to have the time displayed in another format
- by specifying <code>%{format}t</code> in the log format
- string, where <code>format</code> is as in
- <code>strftime(3)</code> from the C standard library.
- </dd>
-
- <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
- (<code>\"%r\"</code>)</dt>
-
- <dd>The request line from the client is given in double
- quotes. The request line contains a great deal of useful
- information. First, the method used by the client is
- <code>GET</code>. Second, the client requested the resource
- <code>/apache_pb.gif</code>, and third, the client used the
- protocol <code>HTTP/1.0</code>. It is also possible to log
- one or more parts of the request line independently. For
- example, the format string "<code>%m %U%q %H</code>" will log
- the method, path, query-string, and protocol, resulting in
- exactly the same output as "<code>%r</code>".</dd>
-
- <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
- <dd>This is the status code that the server sends back to the
- client. This information is very valuable, because it reveals
- whether the request resulted in a successful response (codes
- beginning in 2), a redirection (codes beginning in 3), an
- error caused by the client (codes beginning in 4), or an
- error in the server (codes beginning in 5). The full list of
- possible status codes can be found in the <a
- href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
- specification</a> (RFC2616 section 10).</dd>
-
- <dt><code>2326</code> (<code>%b</code>)</dt>
-
- <dd>The last entry indicates the size of the object returned
- to the client, not including the response headers. If no
- content was returned to the client, this value will be
- "<code>-</code>". To log "<code>0</code>" for no content, use
- <code>%B</code> instead.</dd>
- </dl>
- </section>
-
- <section id="combined">
- <title>Combined Log Format</title>
-
- <p>Another commonly used format string is called the Combined
- Log Format. It can be used as follows.</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </example>
-
- <p>This format is exactly the same as the Common Log Format,
- with the addition of two more fields. Each of the additional
- fields uses the percent-directive
- <code>%{<em>header</em>}i</code>, where <em>header</em> can be
- any HTTP request header. The access log under this format will
- look like:</p>
-
- <example>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- "http://www.example.com/start.html" "Mozilla/4.08 [en]
- (Win98; I ;Nav)"
- </example>
-
- <p>The additional fields are:</p>
-
- <dl>
- <dt><code>"http://www.example.com/start.html"</code>
- (<code>\"%{Referer}i\"</code>)</dt>
-
- <dd>The "Referer" (sic) HTTP request header. This gives the
- site that the client reports having been referred from. (This
- should be the page that links to or includes
- <code>/apache_pb.gif</code>).</dd>
-
- <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
- (<code>\"%{User-agent}i\"</code>)</dt>
-
- <dd>The User-Agent HTTP request header. This is the
- identifying information that the client browser reports about
- itself.</dd>
- </dl>
- </section>
-
- <section id="multiple">
- <title>Multiple Access Logs</title>
-
- <p>Multiple access logs can be created simply by specifying
- multiple <directive module="mod_log_config">CustomLog</directive>
- directives in the configuration
- file. For example, the following directives will create three
- access logs. The first contains the basic CLF information,
- while the second and third contain referer and browser
- information. The last two <directive
- module="mod_log_config">CustomLog</directive> lines show how
- to mimic the effects of the <code>ReferLog</code> and <code
- >AgentLog</code> directives.</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </example>
-
- <p>This example also shows that it is not necessary to define a
- nickname with the <directive
- module="mod_log_config">LogFormat</directive> directive. Instead,
- the log format can be specified directly in the <directive
- module="mod_log_config">CustomLog</directive> directive.</p>
- </section>
-
- <section id="conditional">
- <title>Conditional Logs</title>
-
- <p>There are times when it is convenient to exclude certain
- entries from the access logs based on characteristics of the
- client request. This is easily accomplished with the help of <a
- href="env.html">environment variables</a>. First, an
- environment variable must be set to indicate that the request
- meets certain conditions. This is usually accomplished with
- <directive module="mod_setenvif">SetEnvIf</directive>. Then the
- <code>env=</code> clause of the <directive
- module="mod_log_config">CustomLog</directive> directive is used to
- include or exclude requests where the environment variable is
- set. Some examples:</p>
-
- <example>
- # Mark requests from the loop-back interface<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # Mark requests for the robots.txt file<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # Log what remains<br />
- CustomLog logs/access_log common env=!dontlog
- </example>
-
- <p>As another example, consider logging requests from
- english-speakers to one log file, and non-english speakers to a
- different log file.</p>
-
- <example>
- SetEnvIf Accept-Language "en" english<br />
- CustomLog logs/english_log common env=english<br />
- CustomLog logs/non_english_log common env=!english
- </example>
-
- <p>Although we have just shown that conditional logging is very
- powerful and flexibly, it is not the only way to control the
- contents of the logs. Log files are more useful when they
- contain a complete record of server activity. It is often
- easier to simply post-process the log files to remove requests
- that you do not want to consider.</p>
- </section>
- </section>
-
- <section id="rotation">
- <title>Log Rotation</title>
-
- <p>On even a moderately busy server, the quantity of
- information stored in the log files is very large. The access
- log file typically grows 1 MB or more per 10,000 requests. It
- will consequently be necessary to periodically rotate the log
- files by moving or deleting the existing logs. This cannot be
- done while the server is running, because Apache will continue
- writing to the old log file as long as it holds the file open.
- Instead, the server must be <a
- href="stopping.html">restarted</a> after the log files are
- moved or deleted so that it will open new log files.</p>
-
- <p>By using a <em>graceful</em> restart, the server can be
- instructed to open new log files without losing any existing or
- pending connections from clients. However, in order to
- accomplish this, the server must continue to write to the old
- log files while it finishes serving old requests. It is
- therefore necessary to wait for some time after the restart
- before doing any processing on the log files. A typical
- scenario that simply rotates the logs and compresses the old
- logs to save space is:</p>
-
- <example>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </example>
-
- <p>Another way to perform log rotation is using <a
- href="#piped">piped logs</a> as discussed in the next
- section.</p>
- </section>
-
- <section id="piped">
- <title>Piped Logs</title>
-
- <p>Apache httpd is capable of writing error and access log
- files through a pipe to another process, rather than directly
- to a file. This capability dramatically increases the
- flexibility of logging, without adding code to the main server.
- In order to write logs to a pipe, simply replace the filename
- with the pipe character "<code>|</code>", followed by the name
- of the executable which should accept log entries on its
- standard input. Apache will start the piped-log process when
- the server starts, and will restart it if it crashes while the
- server is running. (This last feature is why we can refer to
- this technique as "reliable piped logging".)</p>
-
- <p>Piped log processes are spawned by the parent Apache httpd
- process, and inherit the userid of that process. This means
- that piped log programs usually run as root. It is therefore
- very important to keep the programs simple and secure.</p>
-
- <p>One important use of piped logs is to allow log rotation
- without having to restart the server. The Apache HTTP Server
- includes a simple program called <a
- href="programs/rotatelogs.html">rotatelogs</a> for this
- purpose. For example, to rotate the logs every 24 hours, you
- can use:</p>
-
- <example>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </example>
-
- <p>Notice that quotes are used to enclose the entire command
- that will be called for the pipe. Although these examples are
- for the access log, the same technique can be used for the
- error log.</p>
-
- <p>A similar but much more flexible log rotation program
- called <a href="http://www.cronolog.org/">cronolog</a>
- is available at an external site.</p>
-
- <p>As with conditional logging, piped logs are a very powerful
- tool, but they should not be used where a simpler solution like
- off-line post-processing is available.</p>
- </section>
-
- <section id="virtualhost">
- <title>Virtual Hosts</title>
-
- <p>When running a server with many <a href="vhosts/">virtual
- hosts</a>, there are several options for dealing with log
- files. First, it is possible to use logs exactly as in a
- single-host server. Simply by placing the logging directives
- outside the <directive module="core"
- type="section">VirtualHost</directive> sections in the
- main server context, it is possible to log all requests in the
- same access log and error log. This technique does not allow
- for easy collection of statistics on individual virtual
- hosts.</p>
-
- <p>If <directive module="mod_log_config">CustomLog</directive>
- or <directive module="core">ErrorLog</directive>
- directives are placed inside a
- <directive module="core" type="section">VirtualHost</directive>
- section, all requests or errors for that virtual host will be
- logged only to the specified file. Any virtual host which does
- not have logging directives will still have its requests sent
- to the main server logs. This technique is very useful for a
- small number of virtual hosts, but if the number of hosts is
- very large, it can be complicated to manage. In addition, it
- can often create problems with <a
- href="vhosts/fd-limits.html">insufficient file
- descriptors</a>.</p>
-
- <p>For the access log, there is a very good compromise. By
- adding information on the virtual host to the log format
- string, it is possible to log all hosts to the same log, and
- later split the log into individual files. For example,
- consider the following directives.</p>
-
- <example>
- LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </example>
-
- <p>The <code>%v</code> is used to log the name of the virtual
- host that is serving the request. Then a program like <a
- href="programs/other.html">split-logfile</a> can be used to
- post-process the access log in order to split it into one file
- per virtual host.</p>
- </section>
-
- <section id="other">
- <title>Other Log Files</title>
-
- <related>
- <modulelist>
- <module>mod_cgi</module>
- <module>mod_rewrite</module>
- </modulelist>
- <directivelist>
- <directive module="mpm_common">PidFile</directive>
- <directive module="mod_rewrite">RewriteLog</directive>
- <directive module="mod_rewrite">RewriteLogLevel</directive>
- <directive module="mod_cgi">ScriptLog</directive>
- <directive module="mod_cgi">ScriptLogBuffer</directive>
- <directive module="mod_cgi">ScriptLogLength</directive>
- </directivelist>
- </related>
-
- <section id="pidfile">
- <title>PID File</title>
-
- <p>On startup, Apache httpd saves the process id of the parent
- httpd process to the file <code>logs/httpd.pid</code>. This
- filename can be changed with the <directive
- module="mpm_common">PidFile</directive> directive. The
- process-id is for use by the administrator in restarting and
- terminating the daemon by sending signals to the parent
- process; on Windows, use the -k command line option instead.
- For more information see the <a href="stopping.html">Stopping
- and Restarting</a> page.</p>
- </section>
-
- <section id="scriptlog">
- <title>Script Log</title>
-
- <p>In order to aid in debugging, the
- <directive module="mod_cgi">ScriptLog</directive> directive
- allows you to record the input to and output from CGI scripts.
- This should only be used in testing - not for live servers.
- More information is available in the <a
- href="mod/mod_cgi.html">mod_cgi</a> documentation.</p>
- </section>
-
- <section id="rewritelog">
- <title>Rewrite Log</title>
-
- <p>When using the powerful and complex features of <a
- href="mod/mod_rewrite.html">mod_rewrite</a>, it is almost
- always necessary to use the <directive
- module="mod_rewrite">RewriteLog</directive> to help
- in debugging. This log file produces a detailed analysis of how
- the rewriting engine transforms requests. The level of detail
- is controlled by the <directive
- module="mod_rewrite">RewriteLogLevel</directive> directive.</p>
- </section>
- </section>
-</manualpage>
-
-
-
-
diff --git a/docs/manual/logs.xml.ja b/docs/manual/logs.xml.ja
deleted file mode 100644
index 420deb3b17..0000000000
--- a/docs/manual/logs.xml.ja
+++ /dev/null
@@ -1,584 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="logs.xml.meta">
-
- <title>$B%m%0%U%!%$%k(B</title>
-
- <summary>
- <p>$B%&%'%V%5!<%P$r8z2LE*$K4IM}$9$k$?$a$K$O!"%5!<%P$N3hF0$d%Q%U%)!<%^%s%9!"(B
- $B:#H/@8$7$F$$$k$+$b$7$l$J$$LdBj$K4X$9$k%U%#!<%I%P%C%/$rF@$k$3$H$,I,MW$G$9!#(B
- Apache HTTP $B%5!<%P$K$OHs>o$KJq3gE*$G=@Fp$J%m%.%s%05!G=$,$"$j$^$9!#(B
- $B$3$NJ8=q$O%m%.%s%05!G=$N@_Dj$N;EJ}$H!"%m%0$K2?$,=q$+$l$F$$$k$+$r(B
- $BM}2r$9$k$?$a$NJ}K!$r@bL@$7$^$9!#(B</p>
- </summary>
-
- <section id="security"><title>
- $B%;%-%e%j%F%#$K4X$9$k7Y9p(B</title>
-
- <p>Apache $B$,%m%0%U%!%$%k$r=q$$$F$$$k%G%#%l%/%H%j$K=q$-9~$a$k?M$O!"(B
- $B$[$\3N<B$K%5!<%P$,5/F0$5$l$?(B uid $B$X$N%"%/%;%9$r<j$KF~$l$k$3$H$,$G$-$^$9!#(B
- $B$=$7$F!"$=$l$ODL>o$O(B root $B%f!<%6$G$9!#(B
- $B$A$c$s$H7k2L$r9M$($k$3$H$J$/!"$=$N%G%#%l%/%H%j$X$N(B
- $B=q$-9~$_8"8B$rM?$((B<em>$B$J$$(B</em>$B$G$/$@$5$$!#>\$7$/$O(B
- <a href="misc/security_tips.html">$B%;%-%e%j%F%#$N$3$D(B</a>$B$NJ8=q$r(B
- $BFI$s$G$/$@$5$$!#(B</p>
-
- <p>$B2C$($F!"%m%0%U%!%$%k$K$O%/%i%$%"%s%H$+$i$N>pJs$,$=$N$^$^!"(B
- $B%(%9%1!<%W$5$l$k$3$H$J$/=q$+$l$F$$$^$9!#$G$9$+$i!"0-0U$N$"$k(B
- $B%/%i%$%"%s%H$,%m%0%U%!%$%k$K@)8fJ8;z$rA^F~$9$k$3$H$,$G$-$^$9!#(B
- $B@8$N%m%0$r07$&$H$-$OCm0U$7$F$/$@$5$$!#(B</p>
- </section>
-
- <section id="errorlog">
- <title>$B%(%i!<%m%0(B</title>
- <related>
- <directivelist>
- <directive module="core">ErrorLog</directive>
- <directive module="core">LogLevel</directive>
- </directivelist>
- </related>
-
- <p><directive module="core">ErrorLog</directive> $B%G%#%l%/%F%#%V$K$h$j(B
- $BL>A0$H>l=j$,7h$^$k%5!<%P$N%(%i!<%m%0$O!"0lHV=EMW$J%m%0%U%!%$%k$G$9!#(B
- Apache $B$N?GCG>pJs$O$3$3$KAw$i$l!"%j%/%(%9%H$r=hM}$7$F$$$k$H$-$K(B
- $BH/@8$7$?%(%i!<$O$9$Y$F$3$3$K5-O?$5$l$^$9!#%5!<%P$r5/F0$7$?$H$-$d!"(B
- $B%5!<%P$NF0:n$KLdBj$,5/$3$C$?$H$-$O!"0lHV:G=i$KD4$Y$k$Y$-(B
- $B$H$3$m$G$9!#4V0c$$$N>\:Y$d=$@5J}K!$,$=$3$K=q$+$l$F$$$k$3$H$,(B
- $B$h$/$"$j$^$9!#(B</p>
-
- <p>$B%(%i!<%m%0$OIaDL$O%U%!%$%k$K=q$+$l$^$9(B ($BDL>o(B unix $B%7%9%F%`$G$O(B
- <code>error_log</code>$B!"(BWindows $B$H(B OS/2 $B$G$O(B <code>error.log</code>)$B!#(B
- Unix $B%7%9%F%`$G$O%(%i!<$r(B <code>syslog</code> $B$d(B
- <a href="#piped">$B%Q%$%W$G%W%m%0%i%`$KAw$k(B</a> $B$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%(%i!<%m%0$N=q<0$OHf3SE*<+M3EY$N9b$$$b$N$G!"@bL@E*$K=q$+$l$F$$$^$9!#(B
- $B$?$@$7!"$$$/$D$+$N>pJs$O$[$H$s$I$N%(%i!<%m%0$N%(%s%H%j$K$"$j$^$9!#(B
- $BNc$($P!"BeI=E*$J$b$N$K<!$N$h$&$J%a%C%;!<%8$,$"$j$^$9!#(B</p>
-
- <example>
- [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
- client denied by server configuration:
- /export/home/live/ap/htdocs/test
- </example>
-
- <p>$B%m%0%(%s%H%j$N:G=i$N9`L\$O%a%C%;!<%8$NF|IU$H;~9o$G$9!#(B
- $BFs$D$a$N9`L\$OJs9p$5$l$F$$$k%(%i!<$N=EMWEY$G$9!#(B
- <directive module="core">LogLevel</directive> $B$G=EMWEY$N%l%Y%k$r(B
- $B@)8B$9$k$3$H$K$h$j%(%i!<%m%0$KAw$i$l$k%(%i!<$N<oN`$r@)8f$9$k$3$H$,(B
- $B$G$-$^$9!#;0$DL\$N9`L\$O%(%i!<$rH/@8$5$;$?%/%i%$%"%s%H$N(B IP $B%"%I%l%9(B
- $B$G$9!#;D$j$O%a%C%;!<%8$G!"$3$N>l9g$O%5!<%P$,%/%i%$%"%s%H$N%"%/%;%9$r(B
- $B5qH]$9$k$h$&$K@_Dj$5$l$F$$$k!"$H$$$&$3$H$r<($7$F$$$^$9!#(B
- $B%5!<%P$O%j%/%(%9%H$5$l$?J8=q$N(B ($B%&%'%V$N%Q%9$G$O$J$/(B) $B%U%!%$%k%7%9%F%`$N(B
- $B%Q%9$rJs9p$7$^$9!#(B</p>
-
- <p>$BHs>o$K9-HO0O$N%a%C%;!<%8$,%(%i!<%m%0$K8=$l$^$9!#$?$$$F$$$N$b$N$O(B
- $B>e$NNc$N$h$&$J46$8$G$9!#%(%i!<%m%0$K$O(B CGI $B%9%/%j%W%H$N%G%P%C%0(B
- $B=PNO$b=q$+$l$^$9!#(BCGI $B%9%/%j%W%H$,(B <code>stderr</code> $B$K=q$$$?(B
- $B$9$Y$F$N>pJs$OD>@\%(%i!<%m%0$K%3%T!<$5$l$^$9!#(B</p>
-
- <p>$B>pJs$rDI2C$7$?$j:o=|$7$?$j$7$F%(%i!<%m%0$r%+%9%?%^%$%:$9$k$3$H$O(B
- $B$G$-$^$;$s!#$7$+$7!"%j%/%(%9%H$KBP$9$k%(%i!<%m%0$N%(%s%H%j$O!"(B
- $BBP1~$9$k%(%s%H%j$,(B<a href="#accesslog">$B%"%/%;%9%m%0(B</a>$B$K$"$j$^$9!#(B
- $BNc$($P!">e$NNc$N%(%s%H%j$O%"%/%;%9%m%0$N%9%F!<%?%9%3!<%I(B 403 $B$N(B
- $B%(%s%H%j$KBP1~$7$^$9!#%"%/%;%9%m%0$O%+%9%?%^%$%:2DG=$G$9$N$G!"(B
- $B$=$A$i$r;H$&$3$H$K$h$j%(%i!<$N>u67$K4X$9$k>pJs$r$h$jB?$/(B
- $B<j$KF~$l$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%F%9%H$N:GCf$O!"LdBj$,H/@8$7$F$$$k$+$I$&$+$r8+$k$?$a$K!"(B
- $B>o$K%(%i!<%m%0$r4F;k$9$k$N$,Lr$KN)$D>l9g$,$h$/$"$j$^$9!#(B
- Unix $B%7%9%F%`$G$O!"<!$N$b$N$r;H$&$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- tail -f error_log
- </example>
- </section>
-
- <section id="accesslog">
- <title>$B%"%/%;%9%m%0(B</title>
-
- <related>
- <modulelist>
- <module>mod_log_config</module>
- <module>mod_setenvif</module>
- </modulelist>
- <directivelist>
- <directive module="mod_log_config">CustomLog</directive>
- <directive module="mod_log_config">LogFormat</directive>
- <directive module="mod_setenvif">SetEnvIf</directive>
- </directivelist>
- </related>
-
- <p>$B%5!<%P%"%/%;%9%m%0$O%5!<%P$,=hM}$r$7$?$9$Y$F$N%j%/%(%9%H$r(B
- $B5-O?$7$^$9!#%"%/%;%9%m%0$N>l=j$HFbMF$O(B <directive
- module="mod_log_config">CustomLog</directive>
- $B%G%#%l%/%F%#%V$K$h$j7h$^$j$^$9!#%m%0$NFbMF$NA*Br$r4J7i$K$9$k$?$a$K(B
- <directive module="mod_log_config">LogFormat</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$,$G$-$^$9!#$3$N%;%/%7%g%s$O%"%/%;%9%m%0$K(B
- $B>pJs$r5-O?$9$k$?$a$N%5!<%P$N@_DjJ}K!$r@bL@$7$^$9!#(B</p>
-
- <p>$B$b$A$m$s!"%"%/%;%9%m%0$K>pJs$rC_@Q$9$k$3$H$O%m%04IM}$N(B
- $B;O$^$j$K2a$.$^$;$s!#<!$NCJ3,$OM-MQ$JE}7W$r<h$k$?$a$K$3$N>pJs$r(B
- $B2r@O$9$k$3$H$G$9!#0lHLE*$J%m%02r@O$O$3$NJ8=q$NHO0O30$G!"(B
- $B%&%'%V%5!<%P<+?H$N;E;v$H$$$&$o$1$G$b$"$j$^$;$s!#$3$NOC$d!"(B
- $B%m%02r@O$r9T$J$&%"%W%j%1!<%7%g%s$N>pJs$rF@$k$K$O!"(B<a
- href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
- Open Directory</a> $B$d(B <a
- href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
- Yahoo</a> $B$rD4$Y$F$/$@$5$$!#(B</p>
-
- <p>$B$$$m$s$J%P!<%8%g%s$N(B Apache httpd $B$,(B mod_log_config,
- mod_log_agent, <code>TransferLog</code> $B%G%#%l%/%F%#%V$H$$$C$?!"(B
- $BB>$N%b%8%e!<%k$d%G%#%l%/%F%#%V$r;H$C$F%"%/%;%9$N%m%.%s%0$r(B
- $B@)8f$7$F$-$^$7$?!#:#$G$O!"(B<directive
- module="mod_log_config">CustomLog</directive> $B$,$9$Y$F$N8E$$(B
- $B%G%#%l%/%F%#%V$N5!G=$r4^$`$h$&$K$J$C$F$$$^$9!#(B</p>
-
- <p>$B%"%/%;%9%m%0$N=q<0$OHs>o$K=@Fp$J@_Dj$,2DG=$G$9!#(B
- $B=q<0$O(B C $B$N(B printf(1) $B%U%)!<%^%C%HJ8;zNs$KHs>o$K;w$?(B
- <directive module="mod_log_config">$B%U%)!<%^%C%HJ8;zNs(B</directive>
- $B$K$h$j;XDj$5$l$^$9!#$$$/$D$+<!$N@a$GNc$r<($7$^$9!#(B
- $B%U%)!<%^%C%HJ8;zNs$K;HMQ$G$-$kFbMF$N0lMw$O(B <a
- href="mod/mod_log_config.html">mod_log_config $B$NJ8=q(B</a>
- $B$r8+$F$/$@$5$$!#(B</p>
-
- <section id="common">
- <title>Common Log Format</title>
-
- <p>$B%"%/%;%9%m%0$N$h$/$"$k@_Dj$K0J2<$N$b$N$,$"$j$^$9!#(B</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common
- </example>
-
- <p>$B$3$l$O!"(B<em>$B%K%C%/%M!<%`(B</em> <code>common</code> $B$rDj5A$7!"(B
- $B%m%0$N%U%)!<%^%C%HJ8;zNs$N0l$D$H4XO"IU$1$^$9!#%U%)!<%^%C%HJ8;zNs$O(B
- $B%Q!<%;%s%H%G%#%l%/%F%#%V$+$i$J$j!"$=$l$>$l$N%Q!<%;%s%H%G%#%l%/%F%#%V$O(B
- $B%5!<%P$K$I$N>pJs$r%m%.%s%0$9$k$+$r;X<($7$^$9!#%U%)!<%^%C%HJ8;zNs$K(B
- $BJ8;z$r$=$N$^$^F~$l$k$3$H$b$G$-!"$=$l$i$O%m%0$N=PNO$KD>@\%3%T!<$5$l$^$9!#(B
- $B$=$3$K0zMQJ8;z(B (<code>"</code>) $B$r=q$/$H$-$O!"(B
- $B%U%)!<%^%C%HJ8;zNs$N:G8e$H$7$F2r<a(B
- $B$5$l$k$3$H$rKI$0$?$a$K%P%C%/%9%i%C%7%e$G%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B
- $B%U%)!<%^%C%HJ8;zNs$K$O2~9TMQ$N(B "<code>\n</code>"$B!"%?%VMQ$N(B
- "<code>\t</code>" $B$H$$$&FCJL$J@)8fJ8;z$b4^$a$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><directive module="mod_log_config">CustomLog</directive> $B%G%#%l%/%F%#%V$O(B
- $B4{$KDj5A$5$l$?(B
- <em>$B%K%C%/%M!<%`(B</em> $B$r;H$C$F?7$7$$%m%0%U%!%$%k$r@_Dj$7$^$9!#(B
- $B%"%/%;%9%m%0$N%U%!%$%kL>$O%9%i%C%7%e$G;O$^$i$J$$8B$j!"(B
- <directive module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$7$F(B
- $B07$o$l$^$9!#(B</p>
-
- <p>$B>e$N@_Dj$O(B Common Log Format (CLF) $B$H8F$P$l$k7A<0$G(B
- $B%m%0%(%s%H%j$r=q$-$^$9!#$3$NI8=`$N7A<0$O0[$J$k%&%'%V%5!<%P$NB?$/$,(B
- $B@8@.$9$k$3$H$,$G$-!"B?$/$N%m%02r@O%W%m%0%i%`$,FI$_$3$`$3$H$,$G$-$^$9!#(B
- CLF $B$K$h$j@8@.$5$l$?%m%0%U%!%$%k$N%(%s%H%j$O0J2<$N$h$&$K$J$j$^$9(B:</p>
-
- <example>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- </example>
-
- <p>$B$3$N%m%0%(%s%H%j$N$=$l$>$l$NItJ,$N0UL#$O0J2<$G@bL@$7$^$9!#(B</p>
-
- <dl>
- <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
- <dd>$B$3$l$O%5!<%P$X%j%/%(%9%H$r$7$?%/%i%$%"%s%H(B ($B%j%b!<%H%[%9%H(B)
- $B$N(B IP $B%"%I%l%9$G$9!#(B<directive
- module="core">HostnameLookups</directive> $B$,(B
- <code>On</code> $B$N>l9g$O!"%5!<%P$O%[%9%HL>$rD4$Y$F!"(B
- IP $B%"%I%l%9$,=q$+$l$F$$$k$H$3$m$K5-O?$7$^$9!#$7$+$7!"$3$N@_Dj$O(B
- $B%5!<%P$r$+$J$jCY$/$9$k$N$G!"$"$^$j$*4+$a$G$-$^$;$s!#(B
- $B$=$&$G$O$J$/!"(B<a href="programs/logresolve.html">logresolve</a> $B$N(B
- $B$h$&$J%m%0$N8e=hM}$r9T$J$&%W%m%0%i%`$G%[%9%HL>$rD4$Y$k$N$,NI$$$G$7$g$&!#(B
- $B$3$3$KJs9p$5$l$k(B IP $B%"%I%l%9$OI,$:$7$b%f!<%6$,;H$C$F$$$k%^%7%s$N(B
- $B$b$N$G$"$k$H$O8B$j$^$;$s!#%f!<%6$H%5!<%P$N4V$K%W%m%-%7%5!<%P$,(B
- $B$"$l$P!"$3$N%"%I%l%9$O85$N%^%7%s$N$b$N$G$O$J$/!"%W%m%-%7$N(B
- $B%"%I%l%9$K$J$j$^$9!#(B</dd>
-
- <dt><code>-</code> (<code>%l</code>)</dt>
-
- <dd>$B=PNOCf$N!V%O%$%U%s!W$OMW5a$5$l$?>pJs$,<j$KF~$i$J$+$C$?$H$$$&$3$H$r(B
- $B0UL#$7$^$9!#$3$N>l9g!"<hF@$G$-$J$+$C$?>pJs$O%/%i%$%"%s%H$N%^%7%s$N(B
- <code>identd</code> $B$K$h$j7h$^$k(B RFC 1413 $B$N%/%i%$%"%s%H$N(B
- $B%"%$%G%s%F%#%F%#$G$9!#$3$N>pJs$O$"$^$j?.MQ$9$k$3$H$,$G$-$:!"(B
- $B$7$C$+$j$H4IM}$5$l$?FbIt%M%C%H%o!<%/$r=|$$$F$O;H$&$Y$-$G$O$"$j$^$;$s!#(B
- Apache $B$O(B <directive
- module="core">IdentityCheck</directive> $B$,(B
- <code>On</code> $B$K$J$C$F$$$J$$8B$j!"$3$N>pJs$rF@$h$&$H$9$i$7$^$;$s!#(B</dd>
-
- <dt><code>frank</code> (<code>%u</code>)</dt>
-
- <dd>$B$3$l$O(B HTTP $BG'>Z$K$h$k!"%I%-%e%a%s%H$r%j%/%(%9%H$7$??M$N(B
- $B%f!<%6(B ID $B$G$9!#(BCGI $B%9%/%j%W%H$K$ODL>oF1$8CM$,(B <code>REMOTE_USER</code>
- $B4D6-JQ?t$H$7$FM?$($i$l$^$9!#%j%/%(%9%H$N%9%F!<%?%9%3!<%I(B
- ($B0J2<$r;2>H(B) $B$,(B 401 $B$G$"$C$?>l9g$O!"%f!<%6$OG'>Z$K<:GT$7$F$$$k$N$G!"(B
- $B$3$NCM$O?.MQ$G$-$^$;$s!#%I%-%e%a%s%H$,%Q%9%o!<%I$GJ]8n$5$l$F$$$J$$(B
- $B>l9g$O!"$3$N%(%s%H%j$OA0$N$b$N$HF1$8$h$&$K(B "<code>-</code>" $B$K(B
- $B$J$j$^$9!#(B</dd>
-
- <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
- (<code>%t</code>)</dt>
-
- <dd>
- $B%5!<%P$,%j%/%(%9%H$N=hM}$r=*$($?;~9o$G$9!#=q<0$O(B:
-
- <p class="indent">
- <code>[day/month/year:hour:minute:second zone]<br />
- day = 2*digit<br />
- month = 3*letter<br />
- year = 4*digit<br />
- hour = 2*digit<br />
- minute = 2*digit<br />
- second = 2*digit<br />
- zone = (`+' | `-') 4*digit</code>
- </p>
- $B%m%0$N%U%)!<%^%C%HJ8;zNs$K(B <code>%{format}t</code> $B$r(B
- $B;XDj$9$k$3$H$G!"JL$N7A<0$G;~9o$rI=<($5$;$k$3$H$b$G$-$^$9!#(B
- $B$3$N$H$-!"(B<code>format</code> $B$O(B C $B$NI8=`%i%$%V%i%j$N(B
- <code>strftime(3)</code> $B$N7A<0$K$J$j$^$9!#(B
- </dd>
-
- <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
- (<code>\"%r\"</code>)</dt>
-
- <dd>$B%/%i%$%"%s%H$+$i$N%j%/%(%9%H$,Fs=E0zMQId$NCf$K<($5$l$F$$$^$9!#(B
- $B%j%/%(%9%H$K$OB?$/$NM-MQ$J>pJs$,$"$j$^$9!#$^$:!"$3$N>l9g%/%i%$%"%s%H$,(B
- $B;H$C$?%a%=%C%I$O(B <code>GET</code> $B$G$9!#<!$K!"%/%i%$%"%s%H$O(B
- $B%j%=!<%9(B <code>/apache_pb.gif</code> $B$rMW5a$7$^$7$?!#$=$7$F!"(B
- $B%/%i%$%"%s%H$O%W%m%H%3%k(B <code>HTTP/1.0</code> $B$r;HMQ$7$^$7$?!#(B
- $B%j%/%(%9%H$N3FItJ,$rFHN)$K%m%0<}=8$9$k$3$H$b$G$-$^$9!#Nc$($P!"(B
- $B%U%)!<%^%C%HJ8;zNs(B "<code>%m %U%q %H</code>" $B$O(B
- $B%a%=%C%I!"%Q%9!"%/%(%jJ8;zNs!"%W%m%H%3%k$r%m%0<}=8$7!"(B
- $B7k6I(B "<code>%r</code>" $B$H$^$C$?$/F1$8=PNO$K$J$j$^$9!#(B</dd>
-
- <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
- <dd>$B%5!<%P$,%/%i%$%"%s%H$KAw$jJV$9%9%F!<%?%9%3!<%I$G$9!#(B
- $B$3$N>pJs$O!"%j%/%(%9%H$,@.8y1~Ez(B (2 $B$G;O$^$k%3!<%I(B) $B$G$"$C$?$+!"(B
- $B%j%@%$%l%/%7%g%s(B (3 $B$G;O$^$k%3!<%I(B) $B$G$"$C$?$+!"%/%i%$%"%s%H$K$h$k(B
- $B%(%i!<(B (4 $B$G;O$^$k%3!<%I(B) $B$G$"$C$?$+!"%5!<%P$N%(%i!<(B (5 $B$G;O$^$k%3!<%I(B)
- $B$G$"$C$?$+!"$r8=$9$N$G!"Hs>o$KBg@Z$G$9!#%9%F!<%?%9%3!<%I$N(B
- $B40A4$J%j%9%H$O(B <a
- href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
- $B5,3J(B</a> (RFC2616 $BBh(B 10 $B@a(B) $B$K$"$j$^$9!#(B</dd>
-
- <dt><code>2326</code> (<code>%b</code>)</dt>
-
- <dd>$B$3$N:G8e$N%(%s%H%j$O%/%i%$%"%s%H$KAw?.$5$l$?%*%V%8%'%/%H$N!"(B
- $B1~Ez%X%C%@$r=|$$$?%5%$%:$r8=$7$^$9!#%3%s%F%s%H$,%/%i%$%"%s%H$KAw$i$l$J$+$C$?(B
- $B>l9g$O!"$3$NCM$O(B "<code>-</code>" $B$K$J$j$^$9!#%3%s%F%s%H$,L5$$>l9g$K(B
- "<code>0</code>" $B$r%m%0<}=8$9$k$K$O!"(B<code>%b</code> $B$G$O$J$/(B
- <code>%B</code> $B$r;H$C$F$/$@$5$$!#(B</dd>
-
- </dl>
- </section>
-
- <section id="combined">
- <title>Combined Log Format</title>
-
- <p>$B$b$&0l$D$N$h$/;H$o$l$k=q<0$O(B Combined Log Format $B$H8F$P$l$F$$$^$9!#(B
- $B0J2<$N$h$&$K$7$F;H$&$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </example>
-
- <p>$B$3$N=q<0$N:G=i$NJ}$O(B Common Log Format $B$H$^$C$?$/F1$8$G!":G8e$K(B
- $BFs$DDI2C$N%(%s%H%j$,$"$j$^$9!#DI2C$N%(%s%H%j$O%Q!<%;%s%H%G%#%l%/%F%#%V(B
- <code>%{<em>header</em>}i</code> $B$r;H$C$F$$$^$9!#$3$3$G(B
- <em>header</em> $B$O(B HTTP $B$N%j%/%(%9%H%X%C%@$N$I$l$+$G$9!#$3$N=q<0$K$h$k(B
- $B%"%/%;%9%m%0$O0J2<$N$h$&$J46$8$K$J$j$^$9(B:</p>
-
- <example>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- "http://www.example.com/start.html" "Mozilla/4.08 [en]
- (Win98; I ;Nav)"
- </example>
-
- <p>$BDI2C$N%(%s%H%j$O(B:</p>
-
- <dl>
- <dt><code>"http://www.example.com/start.html"</code>
- (<code>\"%{Referer}i\"</code>)</dt>
-
- <dd>"Referer" ($B0U?^E*$JDV$j4V0c$$(B) HTTP $B%j%/%(%9%H%X%C%@$G$9!#(B
- $B$3$l$O%/%i%$%"%s%H$,Js9p$7$F$/$k;2>H85$N%5%$%H$rI=$7$^$9!#(B
- ($B$3$N>l9g$O!"(B<code>/apache_pb.gif</code> $B$K%j%s%/$7$F$$$k$+!"(B
- $B$=$l$r4^$s$G$$$k%Z!<%8$G$9(B)$B!#(B</dd>
-
- <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
- (<code>\"%{User-agent}i\"</code>)</dt>
-
- <dd>User-Agent HTTP $B%j%/%(%9%H%X%C%@$G$9!#$3$l$O%/%i%$%"%s%H$N%V%i%&%6$,(B
- $B<+J,<+?H$N$3$H$rJs9p$7$F$/$k>pJs$G$9!#(B</dd>
- </dl>
- </section>
-
- <section id="multiple">
- <title>$BJ#?t$N%"%/%;%9%m%0(B</title>
-
- <p>$BJ#?t$N%"%/%;%9%m%0$OC1$K@_Dj%U%!%$%k$KJ#?t$N(B <directive
- module="mod_log_config">CustomLog</directive>
- $B%G%#%l%/%F%#%V$r=q$/$3$H$G:n@.$5$l$^$9!#Nc$($P!"0J2<$N%G%#%l%/%F%#%V$O(B
- $B;0$D$N%"%/%;%9%m%0$r:n$j$^$9!#:G=i$N$b$N$O4pK\E*$J(B CLF $B$N>pJs$G!"(B
- $BFs$DL\$H;0$DL\$O(B referer $B$H%V%i%&%6$N>pJs$G$9!#:G8eFs$D$N(B
- <directive module="mod_log_config">CustomLog</directive> $B$O(B
- <code>ReferLog</code> $B%G%#%l%/%F%#%V$H(B
- <code>AgentLog</code> $B%G%#%l%/%F%#%V$N8z2L$r$^$M$kJ}K!$r<($7$F$$$^$9!#(B</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </example>
-
- <p>$B$3$NNc$O(B <directive module="mod_log_config">LogFormat</directive> $B$G(B
- $B%K%C%/%M!<%`$rDj5A$9$kI,MW$,$J$$!"(B
- $B$H$$$&$3$H$b<($7$F$$$^$9!#%K%C%/%M!<%`$NBe$o$j$K!"(B
- <directive module="mod_log_config">CustomLog</directive> $B%G%#%l%/%F%#%V$K(B
- $BD>@\%m%0$N=q<0$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
- </section>
-
- <section id="conditional">
- <title>$B>r7oIU$-%m%0(B</title>
-
- <p>$B%/%i%$%"%s%H$N%j%/%(%9%H$NFCD'$K4p$E$$$F%"%/%;%9%m%0$K%(%s%H%j$N(B
- $B0lIt$r%m%.%s%0$7$J$$J}$,JXMx$J$3$H$,$"$j$^$9!#$3$l$O(B <a
- href="env.html">$B4D6-JQ?t(B</a> $B$NJd=u$K$h$j4JC1$K<B8=$G$-$^$9!#$^$:!"(B
- $B%j%/%(%9%H$,2?$i$+$N>r7o$K9g$&$H$$$&$3$H$r8=$9$?$a$K4D6-JQ?t$,(B
- $B@_Dj$5$l$kI,MW$,$"$j$^$9!#$3$l$ODL>o$O(B <directive
- module="mod_setenvif">SetEnvIf</directive> $B$K$h$j(B
- $B9T$J$o$l$^$9!#$=$7$F!"(B<directive
- module="mod_log_config">CustomLog</directive> $B%G%#%l%/%F%#%V$N(B
- <code>env=</code> $B@a$r;H$C$F4D6-JQ?t$,@_Dj$5$l$F$$$k%j%/%(%9%H$r(B
- $B4^$a$?$jGS=|$7$?$j$9$k$3$H$,$G$-$^$9!#$$$/$D$+Nc$r5s$2$^$9(B:</p>
-
- <example>
- # Mark requests from the loop-back interface<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # Mark requests for the robots.txt file<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # Log what remains<br />
- CustomLog logs/access_log common env=!dontlog
- </example>
-
- <p>$BB>$NNc$H$7$F!"1Q8l$rOC$9?M$+$i$N%j%/%(%9%H$H$=$l0J30$N?M$+$i$N%j%/%(%9%H$r(B
- $BJ,$1$?$$!"$H$$$&>l9g$r9M$($F$_$F$/$@$5$$!#(B</p>
-
- <example>
- SetEnvIf Accept-Language "en" english<br />
- CustomLog logs/english_log common env=english<br />
- CustomLog logs/non_english_log common env=!english
- </example>
-
- <p>$B$3$3$^$G$G$O>r7oIU$-%m%.%s%0$,Hs>o$K6/NO$G=@Fp$G$"$k$3$H$r<($7$F$-$^$7$?$,!"(B
- $B$=$l$,%m%0$NFbMF$r@)8f$9$kM#0l$NJ}K!$H$$$&$o$1$G$O$"$j$^$;$s!#%m%0%U%!%$%k$O(B
- $B%5!<%P$N3hF0$N40A4$J5-O?$G$"$kJ}$,$h$jLr$KN)$A$^$9!#C1=c$K%m%0%U%!%$%k$r(B
- $B8e=hM}$7$F!"9MN8$7$?$/$J$$%m%0$r:o=|$9$kJ}$,4JC1$G$"$k$3$H$,$h$/$"$j$^$9!#(B</p>
- </section>
- </section>
-
- <section id="rotation">
- <title>$B%m%0$N8rBX(B</title>
-
- <p>$BIaDL$NIi2Y$N%5!<%P$G$5$(!"%m%0%U%!%$%k$KJ]B8$5$l$k>pJs$NNL$O(B
- $BKDBg$K$J$j$^$9!#%"%/%;%9%m%0$N%U%!%$%k$OIaDL(B 10,000 $B%j%/%(%9%HKh$K(B
- 1 MB $B0J>eA}$($^$9!#$G$9$+$i!"4{B8$N%m%0$r0\F0$7$?$j!":o=|$7$?$j$7$F!"(B
- $BDj4|E*$K%m%0$r8rBX$5$;$k$3$H$,I,MW$K$J$j$^$9!#$3$l$O%5!<%P$N<B9TCf$K$O(B
- $B9T$J$($^$;$s!#$H$$$&$N$O!"(BApache $B$O%U%!%$%k$,(B open $B$5$l$F$$$k4V$O(B
- $B$:$C$H8E$$%m%0%U%!%$%k$K=q$-B3$1$k$+$i$G$9!#(B
- $B?7$7$$%m%0%U%!%$%k$r(B open $B$G$-$k$h$&$K!"%m%0%U%!%$%k$,0\F0$5$l$?$j(B
- $B:o=|$5$l$?8e$K!"%5!<%P$r(B<a href="stopping.html">$B:F5/F0(B</a>$B$9$k(B
- $BI,MW$,$"$j$^$9!#(B</p>
-
- <p><em>$BM%2m$J(B</em> $B:F5/F0$r9T$J$&$3$H$G!"%5!<%P$O4{B8$N%3%M%/%7%g%s$d(B
- $B=hM}BT$A$N%3%M%/%7%g%s$r<:$&$3$H$J$/?7$7$$%m%0%U%!%$%k$r(B open $B$5$;$k(B
- $B$3$H$,$G$-$^$9!#$7$+$7!"$3$l$r<B8=$9$k$?$a$K!"%5!<%P$O8E$$%j%/%(%9%H$r(B
- $B07$C$F$$$k4V$O8E$$%m%0%U%!%$%k$K=q$-B3$1$kI,MW$,$"$j$^$9!#(B
- $B$G$9$+$i!":F5/F0$N8e$G$O%m%0%U%!%$%k$N=hM}$r;O$a$kA0$K!"$7$P$i$/BT$?$J$1$l$P(B
- $B$J$j$^$;$s!#C1$K%m%0$r8rBX$5$;$F!"%G%#%9%/$N@aLs$N$?$a$K8E$$%m%0$r(B
- $B05=L$9$kIaDL$N%7%J%j%*$O(B:</p>
-
- <example>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </example>
-
- <p>$B%m%0$N8rBX$r$9$k$b$&0l$D$NJ}K!$O(B<a
- href="#piped">$B%Q%$%W7PM3$N%m%0(B</a>$B$r;H$&$b$N$G!"<!$N@a$G@bL@$5$l$F$$$^$9!#(B</p>
- </section>
-
- <section id="piped">
- <title>$B%Q%$%W7PM3$N%m%0(B</title>
-
- <p>Apache httpd $B$O%(%i!<%m%0$H%"%/%;%9%m%0$r%U%!%$%k$KD>@\=q$/Be$o$j$K!"(B
- $B%Q%$%W$rDL$7$FJL$N%W%m%0%i%`$K=q$-=P$9$3$H$,$G$-$^$9!#(B
- $B$3$N5!G=$K$h$j!"<g%5!<%P$K%3!<%I$rDI2C$9$k$3$H$J$/(B
- $B%m%.%s%0$N=@Fp@-$,Hs>o$K9b$^$C$F$$$^$9!#%Q%$%W$K%m%0$r=q$/$?$a$K$O!"(B
- $BC1$K%U%!%$%kL>$r%Q%$%WJ8;z(B "<code>|</code>" $B$KCV$-49$(!"$=$NB3$-$K(B
- $BI8=`F~NO$+$i%m%0$N%(%s%H%j$r<u$1$H$k<B9T%W%m%0%i%`$NL>A0$r=q$/$@$1$G$9!#(B
- Apache $B$O%Q%$%W7PM3$N%m%0MQ$N%W%m%;%9$r%5!<%P$N5/F0;~$K<B9T$7!"(B
- $B%5!<%P$N<B9TCf$K$=$N%W%m%0%i%`$,%/%i%C%7%e$7$?$H$-$O$=$l$r:F$S(B
- $B<B9T$7$^$9!#(B($B$3$N:G8e$N5!G=$,$3$N5;=Q$,!V?.Mj@-$N$"$k%Q%$%W7PM3$N%m%.%s%0!W(B
- $B$H8F$P$l$F$$$kM}M3$G$9!#(B)</p>
-
- <p>$B%Q%$%W7PM3$N%m%0MQ$N%W%m%;%9$O(B Apache httpd $B$N?F%W%m%;%9$+$i5/F0$5$l!"(B
- $B$=$N%W%m%;%9$N%f!<%6(B ID $B$r7Q>5$7$^$9!#$3$l$O!"$3$l$O!"%Q%$%W7PM3$N%m%0MQ$N(B
- $B%W%m%0%i%`$OIaDL(B root $B$H$7$F<B9T$5$l$k$3$H$r0UL#$7$^$9!#(B
- $B$G$9$+$i!"%W%m%0%i%`$r4JC1$G0BA4$KJ]$D$3$H$,Hs>o$K=EMW$G$9!#(B</p>
-
- <p>$B%Q%$%W7PM3$N%m%0$N=EMW$JMxMQK!$O!"%5!<%P$N:F5/F0$J$7$G%m%0$N8rBX$r(B
- $B$9$k$3$H$G$9!#(BApache HTTP $B%5!<%P$K$O$3$N$?$a$N(B <a
- href="programs/rotatelogs.html">rotatelogs</a> $B$H8F$P$l$k4JC1$J(B
- $B%W%m%0%i%`$,IUB0$7$F$$$^$9!#$?$H$($P!"(B24 $B;~4VKh$K%m%0$r8rBX$5$;$k$K$O!"(B
- $B0J2<$N$b$N$r;H$&$3$H$,$G$-$^$9(B:</p>
-
- <example>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </example>
-
- <p>$B%Q%$%W$N@h$G8F$P$l$k%3%^%s%IA4BN$,0zMQId$G0O$^$l$F$$$k$3$H$KCmL\$7$F(B
- $B$/$@$5$$!#$3$NNc$O%"%/%;%9%m%0$r;H$C$F$$$^$9$,!"%(%i!<%m%0$K$bF1$85;=Q$r(B
- $B;H$&$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B;w$F$$$k$1$l$I!"$h$j$:$C$H=@Fp$J(B
- <a href="http://www.cronolog.org/">cronolog</a> $B$H$$$&%m%08rBXMQ$N(B
- $B%W%m%0%i%`$,30It$N%5%$%H$K$"$j$^$9!#(B</p>
-
- <p>$B>r7oIU$-%m%.%s%0$HF1MM!"%Q%$%W7PM3$N%m%0$OHs>o$K6/NO$J(B
- $BF;6q$G$9$,!"%*%U%i%$%s$N8e=hM}$N$h$&$J!"$h$j4JC1$J2r7hJ}K!$,$"$k$H$-$O(B
- $B;H$o$J$$J}$,NI$$$G$7$g$&!#(B</p>
- </section>
-
- <section id="virtualhosts">
- <title>$B%P!<%A%c%k%[%9%H(B</title>
-
- <p>$BB?$/$N(B <a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $B$N$"$k%5!<%P$r<B9T$7$F$$$k(B
- $B$H$-$O!"%m%0%U%!%$%k$N07$$J}$K$$$/$D$+$NJ}K!$,$"$j$^$9!#(B
- $B$^$:!"C1FH$N%[%9%H$N$_$N%5!<%P$H$^$C$?$/F1$8$h$&$K%m%0$r;H$&$3$H$,$G$-$^$9!#(B
- $B%m%.%s%0%G%#%l%/%F%#%V$r<g%5!<%P$N%3%s%F%-%9%H$N(B
- <directive module="core"
- type="section">VirtualHost</directive> $B%;%/%7%g%s$N30$KCV$/$3$H$G!"(B
- $B$9$Y$F$N%m%0$rF1$8%"%/%;%9%m%0$H%(%i!<%m%0$K%m%0<}=8$9$k$3$H$,$G$-$^$9!#(B
- $B$3$N<jK!$G$O8D!9$N%P!<%A%c%k%[%9%H$NE}7W$r4JC1$K$H$k$3$H$O$G$-$^$;$s!#(B</p>
-
- <p><directive module="mod_log_config">>CustomLog</directive> $B$d(B
- <directive module="mod_log_config">ErrorLog</directive> $B%G%#%l%/%F%#%V$,(B
- <directive module="core" type="section">VirtualHost</directive> $B$NCf$K(B
- $BCV$+$l$?>l9g$O!"$=$N%P!<%A%c%k(B
- $B%[%9%H$X$N$9$Y$F$N%j%/%(%9%H$d%(%i!<$,$=$3$G;XDj$5$l$?%U%!%$%k$K$N$_(B
- $B%m%0<}=8$5$l$^$9!#%m%.%s%0%G%#%l%/%F%#%V$N$J$$%P!<%A%c%k%[%9%H$O(B
- $B0MA3$H$7$F%j%/%(%9%H$,<g%5!<%P$N%m%0$KAw$i$l$^$9!#$3$N<jK!$O>/$J$$(B
- $B%P!<%A%c%k%[%9%H$KBP$7$F$OHs>o$KM-MQ$G$9$,!"%[%9%H$N?t$,Hs>o$KB?$/$J$k$H(B
- $B4IM}$,BgJQ$K$J$j$^$9!#$5$i$K!"(B<a
- href="vhosts/fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</a>$B$NLdBj$r5/$3$9$3$H$,(B
- $B$"$j$^$9!#(B</p>
-
- <p>$B%"%/%;%9%m%0$K$O!"Hs>o$KNI$$BE6(0F$,$"$j$^$9!#%P!<%A%c%k%[%9%H$N(B
- $B>pJs$r%m%0$N%U%)!<%^%C%HJ8;zNs$K2C$($k$3$H$G!"$9$Y$F$N%[%9%H$X$N(B
- $B%j%/%(%9%H$rF1$8%m%0$K%m%0<}=8$7$F!"8e$G%m%0$r8D!9$N%U%!%$%k$KJ,3d$9$k$3$H$,(B
- $B$G$-$^$9!#$?$H$($P!"0J2<$N%G%#%l%/%F%#%V$r8+$F$/$@$5$$!#(B</p>
-
- <example>
- LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </example>
-
- <p><code>%v</code> $B$,%j%/%(%9%H$r07$C$F$$$k%P!<%A%c%k%[%9%H$NL>A0$r(B
- $B%m%0<}=8$9$k$?$a$K;H$o$l$F$$$^$9!#$=$7$F!"(B<a
- href="programs/other.html">split-logfile</a> $B$N$h$&$J%W%m%0%i%`$r(B
- $B;H$C$F%"%/%;%9%m%0$r8e=hM}$9$k$3$H$G!"(B
- $B%P!<%A%c%k%[%9%HKh$N%U%!%$%k$K%m%0$rJ,3d$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B;DG0$J$,$i!"%(%i!<%m%0$K$OF1MM$N<jK!$O$"$j$^$;$s!#$G$9$+$i!"(B
- $B$9$Y$F$N%P!<%A%c%k%[%9%H$rF1$8%(%i!<%m%0$NCf$K:.$<$k$+!"(B
- $B%P!<%A%c%k%[%9%HKh$K%(%i!<%m%0$r;H$&$+$rA*$P$J$1$l$P$J$j$^$;$s!#(B</p>
- </section>
-
- <section id="other">
- <title>$BB>$N%m%0%U%!%$%k(B</title>
-
- <related>
- <modulelist>
- <module>mod_cgi</module>
- <module>mod_rewrite</module>
- </modulelist>
- <directivelist>
- <directive module="mpm_common">PidFile</directive>
- <directive module="mod_rewrite">RewriteLog</directive>
- <directive module="mod_rewrite">RewriteLogLevel</directive>
- <directive module="mod_cgi">ScriptLog</directive>
- <directive module="mod_cgi">ScriptLogBuffer</directive>
- <directive module="mod_cgi">ScriptLogLength</directive>
- </directivelist>
- </related>
-
- <section id="pidfile">
- <title>PID $B%U%!%$%k(B</title>
-
- <p>$B5/F0;~$K!"(BApache $B$O?F(B httpd $B%W%m%;%9$N%W%m%;%9(B ID $B$r(B
- <code>logs/httpd.pid</code> $B$KJ]B8$7$^$9!#$3$N(B
- $B%U%!%$%kL>$O(B <directive
- module="mpm_common">PidFile</directive> $B%G%#%l%/%F%#%V$r;H$C$F(B
- $BJQ99$9$k$3$H$,$G$-$^$9!#%W%m%;%9(B ID $B$O4IM}<T$,?F%W%m%;%9$K(B
- $B%7%0%J%k$rAw$k$3$H$G%G!<%b%s$r:F5/F0$7$?$j=*N;$5$;$?$j$9$k$H$-$K(B
- $B;HMQ$7$^$9!#(BWindows $B$G$O!"Be$o$j$K(B -k $B%3%^%s%I%*%W%7%g%s$r(B
- $B;H$C$F$/$@$5$$!#>\$7$$>pJs$O(B <a href="stopping.html">$B=*N;$H(B
- $B:F5/F0(B</a> $B$N%Z!<%8$r8+$F$/$@$5$$!#(B</p>
- </section>
-
- <section id="scriptlog">
- <title>$B%9%/%j%W%H%m%0(B</title>
-
- <p>$B%G%P%C%0$NJd=u$N$?$a$K!"(B<directive
- module="mod_cgi">ScriptLog</directive> $B%G%#%l%/%F%#%V$O(B
- CGI $B%9%/%j%W%H$NF~NO$H=PNO$r5-O?$9$k$h$&$K$G$-$^$9!#(B
- $B$3$l$O%F%9%HMQ$K$N$_;HMQ$7$F!"DL>o$N%5!<%P$G$O;HMQ$7$J$$$G$/$@$5$$!#(B
- $B>\$7$$>pJs$O(B <a
- href="mod/mod_cgi.html">mod_cgi $B$NJ8=q(B</a> $B$K$"$j$^$9!#(B</p>
- </section>
-
- <section id="rewritelog">
- <title>$B%j%i%$%H%m%0(B</title>
-
- <p><directive module="mod_rewrite">mod_rewrite</directive> $B$N6/NO$G(B
- $BJ#;($J5!G=$r(B
- $B;H$C$F$$$k$H$-$O!"$[$\$$$D$b%G%P%C%0$r4JC1$K$9$k$?$a$K(B
- <directive module="mod_rewrite">RewriteLog</directive> $B$N;HMQ$,(B
- $BI,MW$G$7$g$&!#$3$N%m%0%U%!%$%k$K$O%j%i%$%H%(%s%8%s$,%j%/%(%9%H$r(B
- $B=q$-49$($kJ}K!$N>\:Y$J2r@O$,=PNO$5$l$^$9!#>\$7$5$NEY9g$O(B <directive
- module="mod_rewrite">RewriteLogLevel</directive>
- $B$G@)8f$G$-$^$9!#(B</p>
- </section>
- </section>
-</manualpage>
diff --git a/docs/manual/logs.xml.ko b/docs/manual/logs.xml.ko
deleted file mode 100644
index ae4146fea9..0000000000
--- a/docs/manual/logs.xml.ko
+++ /dev/null
@@ -1,556 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="logs.xml.meta">
-
- <title>·Î±×ÆÄÀÏ</title>
-
- <summary>
- <p>È¿À²ÀûÀ¸·Î À¥¼­¹ö¸¦ °ü¸®ÇÏ·Á¸é ¹ß»ýÇÏ´Â ¹®Á¦¿Í ÇÔ²² ¼­¹öÀÇ
- È°µ¿°ú ¼º´É¿¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ¸Å¿ì Á¾ÇÕÀûÀÌ°í
- À¯¿¬ÇÑ ·Î±× ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÌ ¹®¼­´Â ·Î±× ±â´ÉÀ» ¼³Á¤ÇÏ´Â
- ¹æ¹ý°ú ·Î±×¿¡ µé¾î°¥ ³»¿ëÀ» ¼³¸íÇÑ´Ù.</p>
- </summary>
-
- <section id="security">
- <title>º¸¾È °æ°í</title>
-
- <p>´©±º°¡¿¡°Ô ¾ÆÆÄÄ¡ÀÇ ·Î±×ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ
- ÀÖ´Ù¸é (º¸Åë root) ¼­¹ö¸¦ ½ÇÇàÇÏ´Â uid¸¦ °ÅÀÇ È®½ÇÈ÷ ¾òÀ»
- ¼ö ÀÖ´Ù. À̸¦ °í·ÁÇÏÁö¾Ê°í ·Î±×°¡ ÀúÀåµÈ µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀ»
- ÁÖÁö <em>¸¶¶ó</em>. ÀÚ¼¼ÇÑ ³»¿ëÀº <a
- href="misc/security_tips.html">º¸¾È ÆÁ</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- <p>¶Ç, Ŭ¶óÀ̾ðÆ®°¡ Á¦°øÇÑ Á¤º¸´Â ·Î±×ÆÄÀÏ¿¡ °ÅÀÇ ±×´ë·Î
- ±â·ÏµÈ´Ù. ±×·¡¼­ ¾ÇÀÇ°¡ Àִ Ŭ¶óÀ̾ðÆ®°¡ ·Î±×ÆÄÀÏ¿¡ Á¦¾î¹®ÀÚ¸¦
- ³ÖÀ» ¼ö ÀÖÀ¸¹Ç·Î, ·Î±×¸¦ ´Ù·ê¶§´Â ÁÖÀÇÇØ¾ß ÇÑ´Ù.</p>
- </section>
-
- <section id="errorlog">
- <title>¿À·ù ·Î±× (Error Log)</title>
-
- <related>
- <directivelist>
- <directive module="core">ErrorLog</directive>
- <directive module="core">LogLevel</directive>
- </directivelist>
- </related>
-
- <p><directive module="core">ErrorLog</directive> Áö½Ã¾î´Â
- °¡Àå Áß¿äÇÑ ·Î±×ÆÄÀÏÀÎ ¼­¹ö ¿À·ù ·Î±×ÀÇ À̸§°ú À§Ä¡¸¦ ÁöÁ¤ÇÑ´Ù.
- ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌ ÆÄÀÏ¿¡ Áø´ÜÁ¤º¸¿Í ¿äûÀ» ó¸®ÇÏ´Â µµÁß
- ¹ß»ýÇÑ ¿À·ù¸¦ ±â·ÏÇÑ´Ù. ¼­¹ö°¡ ½ÃÀÛÇϰųª µ¿ÀÛÇϴµ¥ ¹®Á¦°¡
- ÀÖ´Ù¸é ¹«¾ùÀÌ À߸øµÇ¾ú°í ¶§¶§·Î ¾î¶»°Ô °íÄ¡´ÂÁö¸¦ ¾Ë·ÁÁÖ´Â
- ÀÌ°÷À» °¡Àå ¸ÕÀú »ìÆìºÁ¾ß ÇÑ´Ù.</p>
-
- <p>¿À·ù ·Î±×´Â º¸Åë (ÀüÇüÀûÀ¸·Î À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â
- <code>error_log</code>, À©µµ¿ìÁî¿Í OS/2¿¡¼­´Â
- <code>error.log</code>) ÆÄÀÏ¿¡ ±â·ÏµÈ´Ù. À¯´Ð½º ½Ã½ºÅÛ¿¡¼­
- ¼­¹ö´Â ¿À·ù¸¦ <code>syslog</code>³ª <a href="#piped">ÆÄÀÌÇÁ¸¦
- »ç¿ëÇÏ¿© ´Ù¸¥ ÇÁ·Î±×·¥</a>À¸·Î º¸³¾ ¼öµµ ÀÖ´Ù.</p>
-
- <p>¿À·ù ·Î±×ÀÇ Çü½ÄÀº »ó´ëÀûÀ¸·Î ÀÚÀ¯·Ó°í ÀÚ¼¼ÇÏ´Ù. ±×·¯³ª
- ´ëºÎºÐÀÇ ¿À·ù ·Î±× Ç׸ñ¿¡ °øÅëÀûÀ¸·Î ³ª¿À´Â Á¤º¸°¡ ÀÖ´Ù.
- ¿¹¸¦ µé¾î, Ç׸ñÀº º¸Åë ´ÙÀ½°ú °°´Ù.</p>
-
- <example>
- [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
- client denied by server configuration:
- /export/home/live/ap/htdocs/test
- </example>
-
- <p>·Î±× Ç׸ñ¿¡¼­ ù¹ø° Ç׸ñÀº ³¯Â¥¿Í ½Ã°£ÀÌ´Ù. µÎ¹ø°
- Ç׸ñÀº º¸°íÇÏ´Â ¿À·ùÀÇ ½É°¢¼ºÀ» ³ªÅ¸³½´Ù. <directive
- module="core">LogLevel</directive> Áö½Ã¾î·Î ¿À·ù ·Î±×¿¡
- ±â·ÏµÇ´Â ¿À·ùÀÇ ½É°¢¼ºÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ¼¼¹ø° Ç׸ñÀº
- ¿À·ù¸¦ ¹ß»ýÇÑ Å¬¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼ÒÀÌ´Ù. ÀÌ ´ÙÀ½ºÎÅÍ ¿À·ù¹®ÀÌ
- ³ª¿À¸ç, ÀÌ °æ¿ì ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±ÙÀ» °ÅºÎÇϵµ·Ï
- ¼³Á¤µÇ¾ú´Ù°í ³ª¿ÍÀÖ´Ù. ¿äûÇÑ ¹®¼­ÀÇ (À¥ °æ·Î°¡ ¾Æ´Ñ)
- ÆÄÀϽýºÅÛ °æ·Îµµ º¸ÀδÙ.</p>
-
- <p>¿À·ù ·Î±×¿¡´Â ¸Å¿ì ´Ù¾çÇÑ Á¾·ùÀÇ ¹®±¸°¡ ³ª¿Ã ¼ö ÀÖ´Ù.
- ´ëºÎºÐÀº À§¿Í ºñ½ÁÇÏ´Ù. CGI ½ºÅ©¸³Æ®ÀÇ µð¹ö±ë Ãâ·Âµµ ¿À·ù
- ·Î±×¿¡ ±â·ÏµÈ´Ù. CGI ½ºÅ©¸³Æ®°¡ <code>stderr</code>¿¡ ¾´
- Á¤º¸´Â ±×´ë·Î ¿À·ù ·Î±×·Î º¹»çµÈ´Ù.</p>
-
- <p>¿À·ù ·Î±×¿¡ Á¤º¸¸¦ Ãß°¡ÇÏ°¡³ª »ý·«ÇÒ ¼ö ¾ø´Ù. ±×·¯³ª
- ¿äû¿¡ ´ëÇÑ ¿À·ù ·Î±×ÀÇ °æ¿ì <a href="#accesslog">Á¢±Ù
- ·Î±×</a>¿¡µµ ´ëÀÀÇÏ´Â Ç׸ñÀÌ »ý±ä´Ù. ¿¹¸¦ µé¾î, À§ÀÇ °æ¿ì
- »óÅÂÄڵ尡 403ÀÎ Á¢±Ù ·Î±× Ç׸ñÀÌ »ý±ä´Ù. Á¢±Ù ·Î±×´Â
- »ç¿ëÀÚÁ¤ÀÇÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ÆÄÀÏÀ» Âü°íÇÏ¿© ¿À·ù »óȲ¿¡
- ´ëÇÑ Ãß°¡Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.</p>
-
- <p>°Ë»çÇÒ¶§ ¾î¶² ¹®Á¦°¡ »ý±â´ÂÁö ¿À·ù ·Î±×¸¦ °è¼Ó »ìÆ캸´Â
- °ÍÀÌ ÁÁ´Ù. À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù:</p>
-
- <example>
- tail -f error_log
- </example>
- </section>
-
- <section id="accesslog">
- <title>Á¢±Ù ·Î±× (Access Log)</title>
-
- <related>
- <modulelist>
- <module>mod_log_config</module>
- <module>mod_setenvif</module>
- </modulelist>
- <directivelist>
- <directive module="mod_log_config">CustomLog</directive>
- <directive module="mod_log_config">LogFormat</directive>
- <directive module="mod_setenvif">SetEnvIf</directive>
- </directivelist>
- </related>
-
- <p>¼­¹ö Á¢±Ù ·Î±×´Â ¼­¹ö°¡ ó¸®ÇÏ´Â ¸ðµç ¿äûÀ» ±â·ÏÇÑ´Ù.
- <directive module="mod_log_config">CustomLog</directive>
- Áö½Ã¾î´Â Á¢±Ù ·Î±×ÀÇ À§Ä¡¿Í ³»¿ëÀ» ÁöÁ¤ÇÑ´Ù. <directive
- module="mod_log_config">LogFormat</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ·Î±×¿¡ Æ÷ÇÔÇÒ ³»¿ëÀ» ½±°Ô ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ÀýÀº
- ¼­¹ö°¡ Á¢±Ù ·Î±×¿¡ ¾µ ³»¿ëÀ» ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹°·Ð Á¢±Ù ·Î±×¿¡ Á¤º¸¸¦ ±â·ÏÇÏ´Â °ÍÀº ·Î±× °ü¸®ÀÇ ½ÃÀÛÀÏ
- »ÓÀÌ´Ù. ´ÙÀ½ ´Ü°è´Â ÀÌ Á¤º¸¸¦ ºÐ¼®ÇÏ¿© À¯¿ëÇÑ Åë°è¸¦ ¸¸µå´Â
- °ÍÀÌ´Ù. ÀÌ ¹®¼­´Â ÀϹÝÀûÀÎ ·Î±× ºÐ¼®¿¡ ´ëÇؼ­ ´Ù·çÁö ¾ÊÀ¸¸ç,
- ·Î±× ºÐ¼®Àº ½ÇÁ¦ À¥¼­¹ö°¡ ÇÒ ÀÏÀÌ ¾Æ´Ï´Ù. ·Î±× ºÐ¼®¿¡ ´ëÇÑ
- Á¤º¸¿Í ·Î±×¸¦ ºÐ¼®ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇؼ­´Â <a
- href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">Open Directory</a>³ª
- <a href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>¸¦
- Âü°íÇ϶ó.</p>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌÀüºÎÅÍ mod_log_referer, mod_log_agent,
- <directive module="mod_log_config">CustomLog</directive>
- °°Àº ¸ðµâ°ú Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Á¢±Ù ·Î±×¸¦ ´Ù·ç¾ú´Ù. Áö±ÝÀº
- <directive module="mod_log_config">CustomLog</directive>
- Áö½Ã¾î°¡ ¿À·¡µÈ Áö½Ã¾îµéÀÇ ¸ðµç ±â´ÉÀ» À̾î¹Þ¾Ò´Ù.</p>
-
- <p>Á¢±Ù ·Î±×ÀÇ Çü½ÄÀº ¸Å¿ì »ç¿ëÀÚÁ¤ÀÇ °¡´ÉÇÏ´Ù. Çü½ÄÀº CÀÇ
- printf(1) Çü½Ä¹®ÀÚ¿­°ú ¸Å¿ì À¯»çÇÑ Çü½Ä¹®ÀÚ¿­À» »ç¿ëÇÏ¿©
- ÁöÁ¤ÇÑ´Ù. ´ÙÀ½ Àý¿¡ ¿¹¸¦ µé¾ú´Ù. Çü½Ä¹®ÀÚ¿­¿¡ »ç¿ë°¡´ÉÇÑ
- ¸ðµç ³»¿ëÀ» ¾Ë·Á¸é <module>mod_log_config</module> <a
- href="mod/mod_log_config.html#formats">Çü½Ä¹®ÀÚ¿­</a>À»
- Âü°íÇ϶ó.</p>
-
- <section id="common">
- <title>Common ·Î±× Çü½Ä</title>
-
- <p>Á¢±Ù ·Î±×ÀÇ ÀüÇüÀûÀÎ ¼³Á¤Àº ´ÙÀ½°ú °°´Ù.</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common
- </example>
-
- <p>±×·¯¸é ÁöÁ¤ÇÑ ·Î±× Çü½Ä¹®ÀÚ¿­À» <em>º°¸í</em>
- <code>common</code>À¸·Î Á¤ÀÇÇÑ´Ù. Çü½Ä¹®ÀÚ¿­Àº ÆÛ¼¾Æ®
- Áö½Ã¾îµé·Î ±¸¼ºµÇ¸ç, °¢°¢Àº ¾î¶² Á¤º¸¸¦ ±â·ÏÇÒÁö ¾Ë¸°´Ù.
- Çü½Ä¹®ÀÚ¿­¿¡ ÀÏ¹Ý ¹®ÀÚ¸¦ ÀûÀ¸¸é ±×´ë·Î ·Î±×¿¡ Ãâ·ÂµÈ´Ù.
- µû¿ÈÇ¥ ¹®ÀÚ(<code>"</code>)¸¦ Ãâ·ÂÇÏ°í ½Í´Ù¸é ¹é½½·¡½¬¸¦
- ¾Õ¿¡ ºÙ¿©¼­ Çü½Ä¹®ÀÚ¿­ÀÇ ³¡ÀÌ ¾Æ´ÔÀ» Ç¥½ÃÇÑ´Ù. Çü½Ä¹®ÀÚ¿­¿¡
- ÁÙ¹Ù²Þ "<code>\n</code>", ÅÇ "<code>\t</code>"¿Í °°Àº
- Ư¼ö Á¶Àý¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><directive module="mod_log_config">CustomLog</directive>
- Áö½Ã¾î´Â Á¤ÀÇÇÑ <em>º°¸í</em>À» »ç¿ëÇÏ´Â »õ·Î¿î ·Î±×ÆÄÀÏÀ»
- ¸¸µç´Ù. Á¢±Ù ·Î±×ÀÇ ÆÄÀϸíÀÌ ½½·¡½¬·Î ½ÃÀÛÇÏÁö¾ÊÀ¸¸é
- <directive module="core">ServerRoot</directive>ÀÇ »ó´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>¾ÕÀÇ ¼³Á¤Àº °øÅë·Î±×Çü½Ä(Common Log Format, CLF)À̶ó´Â
- Çü½ÄÀ¸·Î ·Î±× Ç׸ñÀ» ±â·ÏÇÑ´Ù. ¿©·¯ ´Ù¸¥ À¥¼­¹öµéµµ ÀÌ·±
- Ç¥ÁØ Çü½ÄÀ¸·Î ·Î±×¸¦ ¸¸µé¸ç, ¿©·¯ ·Î±× ºÐ¼® ÇÁ·Î±×·¥¿¡¼­
- ÀÐÀ» ¼ö ÀÖ´Ù. CLF·Î ¸¸µç ·Î±×ÆÄÀÏ Ç׸ñÀº ´ÙÀ½°ú °°´Ù:</p>
-
- <example>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- </example>
-
- <p>ÀÌÁ¦ ·Î±× Ç׸ñÀÇ °¢ ºÎºÐÀ» ¼³¸íÇÑ´Ù.</p>
-
- <dl>
- <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
- <dd>¼­¹ö¿¡ ¿äûÀ» ÇÑ Å¬¶óÀ̾ðÆ®(¿ø°Ý È£½ºÆ®)ÀÇ IP
- ÁÖ¼ÒÀÌ´Ù. <directive
- module="core">HostnameLookups</directive>°¡
- <code>On</code>À̶ó¸é È£½ºÆ®¸íÀ» ã¾Æ¼­ IP ÁÖ¼Ò ÀÚ¸®¿¡
- ´ë½Å ¾´´Ù. ±×·¯³ª ÀÌ ¼³Á¤Àº ¼­¹ö¸¦ ¸Å¿ì ´À¸®°Ô ÇÒ ¼ö
- ÀÖÀ¸¹Ç·Î ÃßõÇÏÁö ¾Ê´Â´Ù. È£½ºÆ®¸íÀ» ¾Ë·Á¸é ´ë½Å ³ªÁß¿¡
- <a href="programs/logresolve.html">logresolve</a>¿Í
- °°Àº ·Î±×¸¦ ó¸®ÇÏ´Â ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.
- ¿©±â¿¡ ³ª¿Â IP ÁÖ¼Ò´Â »ç¿ëÀÚ°¡ »ç¿ëÇÏ´Â ÄÄÇ»ÅÍ ÁÖ¼Ò°¡
- ¾Æ´Ò ¼ö ÀÖ´Ù. ÇÁ·Ï½Ã ¼­¹ö°¡ »ç¿ëÀÚ¿Í ¼­¹ö»çÀÌ¿¡ Á¸ÀçÇÑ´Ù¸é,
- ¿ø·¡ ÄÄÇ»ÅÍ ÁÖ¼Ò°¡ ¾Æ´Ï¶ó ÇÁ·Ï½ÃÀÇ ÁÖ¼Ò°¡ ±â·ÏµÉ °ÍÀÌ´Ù.</dd>
-
- <dt><code>-</code> (<code>%l</code>)</dt>
-
- <dd>Ãâ·Â¿¡¼­ "»©±â±âÈ£"´Â ¿äûÇÑ Á¤º¸°¡ ¾øÀ½À» ³ªÅ¸³½´Ù.
- ÀÌ °æ¿ì ¿©±â¿¡ ³ª¿Ã Á¤º¸´Â Ŭ¶óÀ̾ðÆ® ÄÄÇ»ÅÍÀÇ
- <code>identd</code>°¡ Á¦°øÇÒ Å¬¶óÀ̾ðÆ®ÀÇ RFC 1413
- ½Å¿øÀÌ´Ù. ÀÌ Á¤º¸´Â ¸Å¿ì ¹ÏÀ» ¼ö ¾ø±â¶§¹®¿¡, ±ä¹ÐÈ÷
- °ü¸®µÇ´Â ³»ºÎ ³×Æ®¿÷ÀÌ ¾Æ´Ï¶ó¸é Àý´ë·Î ÀÌ Á¤º¸¸¦ »ç¿ëÇϸé
- ¾ÈµÈ´Ù. <directive module="core">IdentityCheck</directive>°¡
- <code>On</code>ÀÌ ¾Æ´Ï¶ó¸é ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌ Á¤º¸¸¦
- ¾Ë¾Æº¸·Á°í ½ÃµµÇÏÁöµµ ¾Ê´Â´Ù.</dd>
-
- <dt><code>frank</code> (<code>%u</code>)</dt>
-
- <dd>ÀÌ´Â HTTP ÀÎÁõÀ¸·Î ¾Ë¾Æ³½ ¹®¼­¸¦ ¿äûÇÑ »ç¿ëÀÚÀÇ
- useridÀÌ´Ù. º¸Åë ÀÌ °ªÀº CGI ½ºÅ©¸³Æ®¿¡°Ô
- <code>REMOTE_USER</code> ȯ°æº¯¼ö·Î ³Ñ°ÜÁø´Ù. ¿äûÀÇ
- »óÅÂÄڵ尡 401À̶ó¸é (¾Æ·¡ Âü°í) »ç¿ëÀÚ°¡ ¾ÆÁ÷ ÀÎÁõÀ»
- °ÅÄ¡Áö ¾Ê¾ÒÀ¸¹Ç·Î ÀÌ °ªÀ» ¹ÏÀ¸¸é ¾ÈµÈ´Ù. ¹®¼­¸¦ ¾ÏÈ£·Î
- º¸È£ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ Ç׸ñÀº ÀÌÀü Ç׸ñ°ú °°ÀÌ
- "<code>-</code>"ÀÌ´Ù.</dd>
-
- <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
- (<code>%t</code>)</dt>
-
- <dd>
- ¼­¹ö°¡ ¿äû󸮸¦ ¸¶Ä£ ½Ã°£.
- Çü½ÄÀº:
-
- <p class="indent">
- <code>[day/month/year:hour:minute:second zone]<br />
- day = ¼ýÀÚ 2°³<br />
- month = ¼ýÀÚ 3°³<br />
- year = ¼ýÀÚ 4°³<br />
- hour = ¼ýÀÚ 2°³<br />
- minute = ¼ýÀÚ 2°³<br />
- second = ¼ýÀÚ 2°³<br />
- zone = (`+' | `-') ¼ýÀÚ 4°³</code>
- </p>
- ·Î±× Çü½Ä¹®ÀÚ¿­¿¡ <code>%{format}t</code>¸¦ »ç¿ëÇÏ¿©
- ´Ù¸¥ Çü½ÄÀ¸·Î ½Ã°£À» Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. <code>format</code>Àº
- C Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ <code>strftime(3)</code>°ú °°´Ù.
- </dd>
-
- <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
- (<code>\"%r\"</code>)</dt>
-
- <dd>Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÁÙÀÌ ½Öµû¿ÈÇ¥·Î ¹­¿©ÀÖ´Ù. ¿äûÁÙÀº
- ¸Å¿ì À¯¿ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ù°, Ŭ¶óÀ̾ðÆ®°¡ »ç¿ëÇÑ
- ¸Þ½áµå´Â <code>GET</code>ÀÌ´Ù. µÑ°, Ŭ¶óÀ̾ðÆ®´Â ÀÚ¿ø
- <code>/apache_pb.gif</code>¸¦ ¿äûÇÑ´Ù. ¼¼¹ø°, Ŭ¶óÀ̾ðÆ®´Â
- <code>HTTP/1.0</code> ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù. ¿äûÁÙÀÇ
- ¿©·¯ ºÎºÐÀ» µû·Î ·Î±×ÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, Çü½Ä¹®ÀÚ¿­
- "<code>%m %U%q %H</code>"Àº "<code>%r</code>"°ú ¶È°°ÀÌ
- ¸Þ½áµå, °æ·Î, ÁúÀǹ®ÀÚ¿­, ÇÁ·ÎÅäÄÝÀ» ·Î±×ÇÑ´Ù.</dd>
-
- <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
- <dd>ÀÌ´Â ¼­¹ö°¡ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â »óÅÂÄÚµåÀÌ´Ù. ÀÌ
- Á¤º¸´Â (2·Î ½ÃÀÛÇÏ´Â ÄÚµå) ¿äûÀÌ ¼º°øÇÏ¿´´ÂÁö, (4·Î
- ½ÃÀÛÇÏ´Â ÄÚµå) Ŭ¶óÀ̾ðÆ®¿¡ ¿À·ù°¡ ÀÖ´ÂÁö, (5·Î ½ÃÀÛÇÏ´Â
- ÄÚµå) ¼­¹ö¿¡ ¿À·ù°¡ ÀÖ´ÂÁö ¾Ë·ÁÁֹǷΠ¸Å¿ì Áß¿äÇÏ´Ù.
- »óÅÂÄÚµåÀÇ Àüü ¸ñ·ÏÀº <a
- href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
- ±Ô¾à</a> (RFC2616 section 10)¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.</dd>
-
- <dt><code>2326</code> (<code>%b</code>)</dt>
-
- <dd>¸¶Áö¸· Ç׸ñÀº ÀÀ´ä Çì´õ¸¦ Á¦¿ÜÇÏ°í Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³»´Â ³»¿ëÀÇ Å©±â¸¦ ³ªÅ¸³½´Ù. Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â
- ³»¿ëÀÌ ¾ø´Ù¸é ÀÌ °ªÀº "<code>-</code>"ÀÌ´Ù. ³»¿ëÀÌ
- ¾ø´Â °æ¿ì "<code>0</code>"À» ·Î±×ÇÏ·Á¸é ´ë½Å
- <code>%B</code>¸¦ »ç¿ëÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="combined">
- <title>Combined ·Î±× Çü½Ä</title>
-
- <p>ÀÚÁÖ »ç¿ëµÇ´Â ´Ù¸¥ Çü½Ä¹®ÀÚ¿­Àº °áÇյȷα×Çü½Ä(Combined
- Log Format)ÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </example>
-
- <p>ÀÌ Çü½ÄÀº µÎ Ç׸ñÀ» ´õ Ãß°¡ÇÑ °ÍÀ» Á¦¿ÜÇÏ°í´Â Common
- ·Î±× Çü½Ä°ú ¿ÏÀüÈ÷ °°´Ù. Ãß°¡µÈ Ç׸ñµéÀº ÆÛ¼¾Æ® Áö½Ã¾î
- <code>%{<em>header</em>}i</code>¸¦ »ç¿ëÇÑ´Ù. ¿©±â¼­
- <em>header</em> ÀÚ¸®¿¡ HTTP ¿äû Çì´õ À̸§ÀÌ ³ª¿Ã ¼ö
- ÀÖ´Ù. ÀÌ Çü½ÄÀÇ Á¢±Ù ·Î±×´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <example>
- 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
- /apache_pb.gif HTTP/1.0" 200 2326
- "http://www.example.com/start.html" "Mozilla/4.08 [en]
- (Win98; I ;Nav)"
- </example>
-
- <p>Ãß°¡µÈ Ç׸ñÀº:</p>
-
- <dl>
- <dt><code>"http://www.example.com/start.html"</code>
- (<code>\"%{Referer}i\"</code>)</dt>
-
- <dd>"Referer" (¸ÂÃã¹ý Ʋ¸®Áö¾Ê¾ÒÀ½) HTTP ¿äû Çì´õ.
- Ŭ¶óÀ̾ðÆ®°¡ ÂüÁ¶Çß´Ù°í ¼­¹ö¿¡°Ô ¾Ë¸° »çÀÌÆ®ÀÌ´Ù.
- (Áï, <code>/apache_pb.gif</code>¸¦ ¸µÅ©ÇÏ¿´°Å³ª Æ÷ÇÔÇÑ
- »çÀÌÆ®ÀÌ´Ù.)</dd>
-
- <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
- (<code>\"%{User-agent}i\"</code>)</dt>
-
- <dd>User-Agent HTTP ¿äû Çì´õ. Ŭ¶óÀ̾ðÆ® ºê¶ó¿ìÀú°¡
- Àڽſ¡ ´ëÇØ ¾Ë¸®´Â ½Äº°Á¤º¸ÀÌ´Ù.</dd>
- </dl>
- </section>
-
- <section id="multiple">
- <title>¿©·¯ Á¢±Ù ·Î±×</title>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ¿©·¯ <directive
- module="mod_log_config">CustomLog</directive> Áö½Ã¾î¸¦
- »ç¿ëÇϸé Á¢±Ù ·Î±×°¡ ¿©·¯°³ ¸¸µé¾îÁø´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½
- ¼³Á¤Àº ¼¼°¡Áö Á¢±Ù ·Î±×¸¦ ¸¸µç´Ù. ù¹ø°´Â ±âº» CLF Á¤º¸¸¦
- ±â·ÏÇÏ°í, µÎ¹ø°¿Í ¼¼¹ø°´Â referer¿Í ºê¶ó¿ìÀú Á¤º¸¸¦
- ±â·ÏÇÑ´Ù. ¸¶Áö¸· µÎ <directive
- module="mod_log_config">CustomLog</directive> ÁÙÀº ¾î¶»°Ô
- ÀÌÀü <code>ReferLog</code>¿Í <code>AgentLog</code> Áö½Ã¾îÀÇ
- ±â´ÉÀ» Èä³»³¾ ¼ö ÀÖ´ÂÁö º¸¿©ÁØ´Ù.</p>
-
- <example>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </example>
-
- <p>¶Ç, ÀÌ ¿¹´Â <directive
- module="mod_log_config">LogFormat</directive>À¸·Î ¹Ýµå½Ã
- º°¸íÀ» Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾øÀ½À» º¸¿©ÁØ´Ù. ´ë½Å <directive
- module="mod_log_config">CustomLog</directive> Áö½Ã¾î¿¡
- Á÷Á¢ ·Î±× Çü½ÄÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
- </section>
-
- <section id="conditional">
- <title>Á¶°ÇºÎ ·Î±×</title>
-
- <p>Ŭ¶óÀ̾ðÆ® ¿äûÀÇ ¼º°Ý¿¡ µû¶ó ÇØ´ç Ç׸ñÀ» Á¢±Ù ·Î±×¿¡
- ±â·ÏÇÏÁö¾Ê°í ½ÍÀ» ¶§°¡ ÀÖ´Ù. <a href="env.html">ȯ°æº¯¼ö</a>¸¦
- »ç¿ëÇÏ¸é ½±°Ô ÇØ°áµÈ´Ù. ¸ÕÀú, Ŭ¶óÀ̾ðÆ®°¡ ƯÁ¤ Á¶°ÇÀ»
- ¸¸Á·Çϸé ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ ÀÛ¾÷¿¡´Â º¸Åë <directive
- module="mod_setenvif">SetEnvIf</directive>¸¦ »ç¿ëÇÑ´Ù.
- ±×¸®°í <directive module="mod_log_config">CustomLog</directive>
- Áö½Ã¾î¿¡ <code>env=</code>À» »ç¿ëÇÏ¿© ȯ°æº¯¼ö À¯¹«¿¡
- µû¶ó ¿äûÀ» Áý¾î³Ö°Å³ª »«´Ù. ¿¹¸¦ µé¸é:</p>
-
- <example>
- # loop-back ÀÎÅÍÆäÀ̽º¿¡¼­ ¿äûÀ» Ç¥½ÃÇÑ´Ù<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # robots.txt ÆÄÀÏ¿¡ ´ëÇÑ ¿äûÀ» Ç¥½ÃÇÑ´Ù<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # ³ª¸ÓÁö¸¦ ·Î±×¿¡ ³²±ä´Ù<br />
- CustomLog logs/access_log common env=!dontlog
- </example>
-
- <p>´Ù¸¥ ¿¹·Î ¿µ¾î±Ç »ç¿ëÀÚÀÇ ¿äû¸¸À» ÇÑ ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÏ°í,
- ºñ¿µ¾î±Ç »ç¿ëÀÚÀÇ ¿äûÀº ´Ù¸¥ ·Î±×ÆÄÀÏ¿¡ ±â·ÏÇÏ´Â °æ¿ì¸¦
- »ý°¢Çغ¸ÀÚ.</p>
-
- <example>
- SetEnvIf Accept-Language "en" english<br />
- CustomLog logs/english_log common env=english<br />
- CustomLog logs/non_english_log common env=!english
- </example>
-
- <p>Á¶°ÇºÎ ·Î±×´Â ¸Å¿ì °­·ÂÇÏ°í À¯¿¬ÇÏÁö¸¸, ÀÌ°ÍÀÌ ·Î±×
- ³»¿ëÀ» Á¶ÀýÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ¾Æ´Ï´Ù. ·Î±×ÆÄÀÏÀº ¼­¹öÀÇ
- ¸ðµç ÇൿÀ» ±â·ÏÇÒ¶§ ´õ À¯¿ëÇÏ´Ù. ³ªÁß¿¡ ¿øÇÏÁö¾Ê´Â ¿äûÀ»
- Á¦¿ÜÇÏ°í ·Î±×ÆÄÀÏÀ» ºÐ¼®ÇÏ´Â °ÍÀÌ ´õ ½±´Ù.</p>
- </section>
- </section>
-
- <section id="rotation">
- <title>·Î±× ¼øȯ (Log Rotation)</title>
-
- <p>Á¶±Ý ¹Ù»Û ¼­¹öÁ¶Â÷µµ ·Î±×ÆÄÀÏ¿¡ ÀúÀåµÇ´Â Á¤º¸·®Àº ¸Å¿ì
- ¸¹´Ù. Á¢¼Ó ·Î±×´Â º¸Åë ¸¸¹ø ¿äû´ç 1MB ÀÌ»ó Áõ°¡ÇÑ´Ù. °á°úÀûÀ¸·Î
- ±âÁ¸ÀÇ ·Î±×¸¦ ¿Å±â°Å³ª Áö¿ì´Â ¹æ¹ýÀ¸·Î ·Î±×¸¦ ÁÖ±âÀûÀ¸·Î
- ¼øÈ°ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ÆÄÀÏÀ» ¿­°íÀÖ´Â µ¿¾È¿¡´Â °è¼Ó
- ÀÌÀü ·Î±×ÆÄÀÏ¿¡ ¾²±â¶§¹®¿¡ ¼­¹ö°¡ ½ÇÇàÁßÀ϶§ ·Î±×¸¦ ¼øȯÇÒ
- ¼ö ¾ø´Ù. ´ë½Å ·Î±×ÆÄÀÏÀ» ¿Å±â°Å³ª Áö¿îÈÄ ¼­¹ö¸¦ <a
- href="stopping.html">Àç½ÃÀÛ</a>ÇÏ¿©, ·Î±×ÆÄÀÏÀ» »õ·Î ¿­¾î¾ß
- ÇÑ´Ù.</p>
-
- <p><em>Á¡ÀÝÀº</em> Àç½ÃÀÛÀ» »ç¿ëÇÏ¸é ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®¿Í
- ±âÁ¸ÀÇ È¤Àº ´ë±âµÈ ¿¬°áÀ» ÀÒÁö¾Ê°í »õ ·Î±×ÆÄÀÏÀ» ¿­ ¼ö ÀÖ´Ù.
- ±×·¯³ª À̸¦ À§ÇØ ¼­¹ö´Â ¿À·¡µÈ ¿äûÀÇ ¼­ºñ½º¸¦ ³¡³»´Â µ¿¾È
- ÀÌÀü ·Î±×ÆÄÀÏÀ» °è¼Ó »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î Àç½ÃÀÛÇÑÈÄ
- ·Î±×ÆÄÀÏÀ» ó¸®Çϱâ Àü¿¡ ¾ó¸¶°£ ±â´Ù¸± ÇÊ¿ä°¡ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î
- ´ÙÀ½°ú °°ÀÌ ·Î±×¸¦ ¼øȯÇÏ°í, µð½ºÅ©°ø°£À» Àý¾àÇϱâÀ§ÇØ ÀÌÀü
- ·Î±×¸¦ ¾ÐÃàÇÑ´Ù:</p>
-
- <example>
- mv access_log access_log.old<br />
- mv error_log error_log.old<br />
- apachectl graceful<br />
- sleep 600<br />
- gzip access_log.old error_log.old
- </example>
-
- <p>·Î±×¸¦ ¼øȯÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº ´ÙÀ½ Àý¿¡¼­ ¼³¸íÇÒ <a
- href="#piped">ÆÄÀÌÇÁ ·Î±×</a>¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.</p>
- </section>
-
- <section id="piped">
- <title>·Î±×¸¦ ÆÄÀÌÇÁ·Î º¸³»±â</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ¿À·ù ·Î±×¿Í Á¢±Ù ·Î±×¸¦ ÆÄÀÏ¿¡ Á÷Á¢
- ¾²Áö¾Ê°í ÆÄÀÌÇÁ¸¦ ÅëÇØ ´Ù¸¥ ÇÁ·Î¼¼½º·Î º¸³¾ ¼ö ÀÖ´Ù. ÀÌ
- ±â´ÉÀ» »ç¿ëÇÏ¸é ¼­¹ö¿¡ Äڵ带 Ãß°¡ÇÏÁö¾Ê°íµµ ¸Å¿ì À¯¿¬ÇÏ°Ô
- ·Î±×¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. ·Î±×¸¦ ÆÄÀÌÇÁ¿¡ ¾²±âÀ§ÇØ ÆÄÀϸí
- ÀÚ¸®¿¡ ÆÄÀÌÇÁ¹®ÀÚ "<code>|</code>"¿Í µÚ¿¡ Ç¥ÁØÀÔ·ÂÀ¸·Î
- ·Î±× Ç׸ñÀ» ÀÐÀ» ½ÇÇàÆÄÀϸíÀ» ÀûÀ¸¸é µÈ´Ù. ¾ÆÆÄÄ¡´Â ¼­¹ö°¡
- ½ÃÀÛÇÒ¶§ ÆÄÀÌÇÁ·Î ¿¬°áÇÒ ·Î±× ÇÁ·Î¼¼½º¸¦ ½ÃÀÛÇÏ°í, ¼­¹ö°¡
- ½ÇÇàµÇ´Â µ¿¾È ÇÁ·Î¼¼½º°¡ Á×À¸¸é ´Ù½Ã ½ÃÀÛÇÑ´Ù. (ÀÌ ¸¶Áö¸·
- ±â´É¶§¹®¿¡ ¿ì¸®´Â ÀÌ ¹æ¹ýÀ» "¹ÏÀ» ¼ö ÀÖ´Â ÆÄÀÌÇÁ ·Î±×"¶ó°í
- ºÎ¸¥´Ù.)</p>
-
- <p>ÆÄÀÌÇÁ·Î ¿¬°áµÈ ·Î±× ÇÁ·Î¼¼½º´Â ºÎ¸ð ¾ÆÆÄÄ¡ httpd ÇÁ·Î¼¼½º°¡
- ¶ç¿ì°í, ÇÁ·Î¼¼½ºÀÇ useridµµ °°´Ù. Áï, ÆÄÀÌÇÁ·Î ¿¬°áµÈ ·Î±×
- ÇÁ·Î±×·¥Àº º¸Åë root·Î ½ÇÇàµÈ´Ù. ±×·¯¹Ç·Î ÇÁ·Î±×·¥À» °£´ÜÇÏ°í
- ¾ÈÀüÇÏ°Ô ¸¸µå´Â °ÍÀÌ ¸Å¿ì Áß¿äÇÏ´Ù.</p>
-
- <p>ÆÄÀÌÇÁ·Î ºÎ¸£´Â Àüü ¸í·É¾î¸¦ µû¿ÈÇ¥·Î ¹­À½À» ¸í½ÉÇ϶ó.
- ÀÌ ¿¹´Â Á¢±Ù ·Î±×¿¡ ´ëÇÑ °ÍÀÌÁö¸¸, ¿À·ù ·Î±×µµ ¸¶Âù°¡Áö´Ù.</p>
-
- <p>¼­¹ö¸¦ Àç½ÃÀÛÇÏÁö¾Ê°í ·Î±×¸¦ ¼øȯÇÒ ¼ö ÀÖ´Â °ÍÀÌ ÆÄÀÌÇÁ
- ·Î±×¸¦ »ç¿ëÇÏ´Â Áß¿äÇÑ ÀÌÀ¯´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â À̸¦ À§ÇØ
- <a href="programs/rotatelogs.html">rotatelogs</a>¶ó´Â °£´ÜÇÑ
- ÇÁ·Î±×·¥À» Æ÷ÇÔÇÑ´Ù. ¿¹¸¦ µé¾î 24½Ã°£¸¶´Ù ·Î±×¸¦ ¼øȯÇÑ´Ù¸é:</p>
-
- <example>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </example>
-
- <p>´Ù¸¥ »çÀÌÆ®¿¡ <a
- href="http://www.cronolog.org/">cronolog</a>¶ó´Â ºñ½ÁÇÏÁö¸¸
- ÈξÀ ´õ À¯¿¬ÇÑ ·Î±× ¼øȯ ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù.</p>
-
- <p>Á¶°ÇºÎ ·Î±×¿Í °°ÀÌ ÆÄÀÌÇÁ ·Î±×´Â ¸Å¿ì °­·ÂÇÑ µµ±¸Áö¸¸,
- ³ªÁß¿¡ ó¸®ÇÏ´Â µîÀÇ ´õ °£´ÜÇÑ ¹æ¹ýÀÌ °¡´ÉÇÑ °æ¿ì »ç¿ëÇؼ­´Â
- ¾ÈµÈ´Ù.</p>
- </section>
-
- <section id="virtualhost">
- <title>°¡»óÈ£½ºÆ®</title>
-
- <p>¸¹Àº <a href="vhosts/">°¡»óÈ£½ºÆ®</a>°¡ ÀÖ´Â ¼­¹ö¸¦
- ¿î¿µÇÒ¶§ ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î ·Î±×ÆÄÀÏÀ» ´Ù·ê ¼ö ÀÖ´Ù. ¸ÕÀú,
- È£½ºÆ®°¡ ÇÑ°³ÀÎ ¼­¹ö¿Í °°ÀÌ ·Î±×¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <directive
- module="core" type="section">VirtualHost</directive> ¼½¼ÇÀÌ
- ¾Æ´Ñ ÁÖ¼­¹ö ¼³Á¤¿¡ ·Î±× Áö½Ã¾î¸¦ µÎ¸é ¸ðµç ¿äûÀÌ °°Àº Á¢±Ù
- ·Î±×¿Í ¿À·ù ·Î±×·Î ±â·ÏµÈ´Ù. ÀÌ ¹æ¹ýÀº °¡»óÈ£½ºÆ®º°·Î ½±°Ô
- Åë°è󸮸¦ ÇÒ ¼ö ¾ø´Ù.</p>
-
- <p><directive module="core" type="section">VirtualHost</directive>
- ¼½¼Ç ¾È¿¡ <directive module="mod_log_config">CustomLog</directive>³ª
- <directive module="core">ErrorLog</directive> Áö½Ã¾î¸¦
- »ç¿ëÇϸé ÇØ´ç °¡»óÈ£½ºÆ®¿¡ ´ëÇÑ ¿äû°ú ¿À·ù¸¸ÀÌ ÁöÁ¤µÈ
- ÆÄÀÏ¿¡ ±â·ÏµÈ´Ù. ·Î±× Áö½Ã¾î°¡ ¾ø´Â ´Ù¸¥ °¡»óÈ£½ºÆ®´Â °è¼Ó
- ÁÖ¼­¹ö ·Î±×¿¡ ·Î±×¸¦ ±â·ÏÇÑ´Ù. ÀÌ ¹æ¹ýÀº °¡»óÈ£½ºÆ® °³¼ö°¡
- ÀûÀ» °æ¿ì ¸Å¿ì À¯¿ëÇÏÁö¸¸, È£½ºÆ® ¼ö°¡ ¸¹´Ù¸é °ü¸®Çϱâ
- Èûµé¾îÁø´Ù. ¶Ç, <a href="vhosts/fd-limits.html">ÆÄÀϱâ¼úÀÚ°¡
- ºÎÁ·ÇÑ</a> ¹®Á¦°¡ ÀÚÁÖ ¹ß»ýÇÑ´Ù.</p>
-
- <p>Á¢±Ù ·Î±×ÀÇ °æ¿ì ¸Å¿ì ÁÁÀº ÇØ°áÃ¥ÀÌ ÀÖ´Ù. ·Î±× Çü½Ä¹®ÀÚ¿­¿¡
- °¡»óÈ£½ºÆ®¿¡ ´ëÇÑ Á¤º¸¸¦ Ãß°¡ÇÏ¸é ¸ðµç È£½ºÆ®°¡ °°Àº ·Î±×¸¦
- »ç¿ëÇÏ°í, ³ªÁß¿¡ ·Î±×¸¦ °¡»óÈ£½ºÆ®º°·Î ³ª´­ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, ´ÙÀ½ Áö½Ã¾î¸¦ ºÁ¶ó.</p>
-
- <example>
- LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </example>
-
- <p><code>%v</code>´Â ¿äûÀ» ¼­ºñ½ºÇÏ´Â °¡»óÈ£½ºÆ® À̸§À»
- ±â·ÏÇÑ´Ù. ³ªÁß¿¡ <a href="programs/other.html">split-logfile</a>
- °°Àº ÇÁ·Î±×·¥À¸·Î Á¢±Ù ·Î±×¸¦ °¡»óÈ£½ºº°·Î ³ª´­ ¼ö ÀÖ´Ù.</p>
- </section>
-
- <section id="other">
- <title>´Ù¸¥ ·Î±×ÆÄÀÏ</title>
-
- <related>
- <modulelist>
- <module>mod_cgi</module>
- <module>mod_rewrite</module>
- </modulelist>
- <directivelist>
- <directive module="mpm_common">PidFile</directive>
- <directive module="mod_rewrite">RewriteLog</directive>
- <directive module="mod_rewrite">RewriteLogLevel</directive>
- <directive module="mod_cgi">ScriptLog</directive>
- <directive module="mod_cgi">ScriptLogBuffer</directive>
- <directive module="mod_cgi">ScriptLogLength</directive>
- </directivelist>
- </related>
-
- <section id="pidfile">
- <title>PID ÆÄÀÏ</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ½ÃÀÛÇÒ¶§ <code>logs/httpd.pid</code>
- ÆÄÀÏ¿¡ ºÎ¸ð httpd ÇÁ·Î¼¼½ºÀÇ process id¸¦ ÀúÀåÇÑ´Ù. ÀÌ
- ÆÄÀϸíÀº <directive module="mpm_common">PidFile</directive>
- Áö½Ã¾î·Î º¯°æÇÒ ¼ö ÀÖ´Ù. process-id´Â °ü¸®ÀÚ°¡ ºÎ¸ð ÇÁ·Î¼¼½º¿¡
- ½Ã±×³ÎÀ» º¸³» ¼­¹ö¸¦ Àç½ÃÀÛÇϰųª Á×À϶§ »ç¿ëÇÑ´Ù.
- À©µµ¿ìÁî¿¡¼­´Â ´ë½Å -k ¸í·ÉÇà¿É¼ÇÀ» »ç¿ëÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ
- Á¤º¸´Â <a href="stopping.html">Áß´Ü°ú Àç½ÃÀÛ</a> ÆäÀÌÁö¸¦
- Âü°íÇ϶ó.</p>
- </section>
-
- <section id="scriptlog">
- <title>½ºÅ©¸³Æ® ·Î±×</title>
-
- <p>µð¹ö±ëÀ» µ½±âÀ§ÇØ <directive
- module="mod_cgi">ScriptLog</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- CGI ½ºÅ©¸³Æ®ÀÇ ÀԷ°ú Ãâ·ÂÀ» ±â·ÏÇÒ ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾î´Â
- ¿ÀÁ÷ Å×½ºÆ®¿ëÀ¸·Î¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù. ½ÇÁ¦ »ç¿ëÇÏ´Â ¼­¹ö¿¡¼­
- »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a
- href="mod/mod_cgi.html">mod_cgi</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
- </section>
-
- <section id="rewritelog">
- <title>ÀçÀÛ¼º ·Î±×</title>
-
- <p><a href="mod/mod_rewrite.html">mod_rewrite</a>ÀÇ °­·ÂÇÏ°í
- º¹ÀâÇÑ ±â´ÉÀ» »ç¿ëÇÑ´Ù¸é µð¹ö±ëÀ» À§ÇØ °ÅÀÇ Ç×»ó <directive
- module="mod_rewrite">RewriteLog</directive>¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡
- ÀÖ´Ù. ÀÌ ·Î±×ÆÄÀÏÀº ÀçÀÛ¼º ¿£ÁøÀÌ ¾î¶»°Ô ¿äûÀ» º¯È¯ÇÏ´ÂÁö¿¡
- ´ëÇØ ÀÚ¼¼È÷ ¾Ë·ÁÁØ´Ù. ÀÚ¼¼ÇÑ Á¤µµ´Â <directive
- module="mod_rewrite">RewriteLogLevel</directive> Áö½Ã¾î·Î
- Á¶ÀýÇÑ´Ù.</p>
- </section>
- </section>
-</manualpage>
-
-
-
-
diff --git a/docs/manual/logs.xml.meta b/docs/manual/logs.xml.meta
deleted file mode 100644
index 43b958bff9..0000000000
--- a/docs/manual/logs.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>logs</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/misc/.cvsignore b/docs/manual/misc/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/misc/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/misc/index.html b/docs/manual/misc/index.html
deleted file mode 100644
index 5b7bb86fb2..0000000000
--- a/docs/manual/misc/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/misc/index.html.en b/docs/manual/misc/index.html.en
deleted file mode 100644
index 3ef158b807..0000000000
--- a/docs/manual/misc/index.html.en
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Miscellaneous Documentation - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache Miscellaneous Documentation</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/misc/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>Below is a list of additional documentation pages that apply
- to the Apache web server development project.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>The documents below have not been fully updated
- to take into account changes made in the 2.1 version of the
- Apache HTTP Server. Some of the information may still be
- relevant, but please use it with care.</p>
- </div>
-
- <dl>
- <dt><a href="perf-tuning.html">Performance Notes - Apache
- Tuning</a></dt>
-
- <dd>
- <p>Notes about how to (run-time and compile-time) configure
- Apache for highest performance. Notes explaining why Apache
- does some things, and why it doesn't do other things (which
- make it slower/faster).</p>
- </dd>
-
- <dt><a href="security_tips.html">Security Tips</a></dt>
-
- <dd>
- <p>Some "do"s - and "don't"s - for keeping your Apache web
- site secure.</p>
- </dd>
-
- <dt><a href="rewriteguide.html">URL Rewriting Guide</a></dt>
-
- <dd>
- <p>This document supplements the <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- <a href="../mod/mod_rewrite.html">reference documentation</a>.
- It describes how one can use Apache's <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- to solve typical URL-based problems webmasters are usually confronted
- with in practice.</p>
- </dd>
-
- <dt><a href="relevant_standards.html">Relevant Standards</a></dt>
-
- <dd>
- <p>This document acts as a reference page for most of the relevant
- standards that Apache follows.</p>
- </dd>
- </dl>
-
- </div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/misc/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/index.html.ko.euc-kr b/docs/manual/misc/index.html.ko.euc-kr
deleted file mode 100644
index 88d2a97ab7..0000000000
--- a/docs/manual/misc/index.html.ko.euc-kr
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>±âŸ ¾ÆÆÄÄ¡ ¹®¼­ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>±âŸ ¾ÆÆÄÄ¡ ¹®¼­</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>¾Æ·¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö °³¹ß ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Ãß°¡ ¹®¼­
- ¸ñ·ÏÀÌ´Ù.</p>
-
- <div class="warning"><h3>ÁÖÀÇ</h3>
- <p> ¾Æ·¡ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.1 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ»
- ´ã°í ÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­
- »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
- </div>
-
- <dl>
- <dt><a href="perf-tuning.html">¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó</a></dt>
-
- <dd>
- <p>ÃÖ°íÀÇ ¼º´ÉÀ» ³»±âÀ§ÇØ ¾ÆÆÄÄ¡¸¦ (½ÇÇà½Ã, ÄÄÆÄÀϽÃ)
- ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ´Ù·é´Ù. ¾ÆÆÄÄ¡°¡ ¿Ö ¾î¶² ÀÛ¾÷À» ÇÏ°í
- (¾ÆÆÄÄ¡¸¦ ´À¸®°Å³ª ºü¸£°Ô ¸¸µå´Â) ¾î¶² ÀÛ¾÷À» ÇÏÁö ¾Ê´ÂÁö
- ¼³¸íÇÑ´Ù.</p>
- </dd>
-
- <dt><a href="security_tips.html">º¸¾È ÆÁ</a></dt>
-
- <dd>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¾ÈÀüÇÏ°Ô À¯ÁöÇϱâÀ§ÇØ "ÇÒ ÀÏ"°ú "ÇÏÁö
- ¸»¾Æ¾ß ÇÒ ÀÏ".</p>
- </dd>
-
- <dt><a href="rewriteguide.html">URL ÀçÀÛ¼º Áöħ¼­</a></dt>
-
- <dd>
- <p>ÀÌ ¹®¼­´Â <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> <a href="../mod/mod_rewrite.html">ÂüÁ¶ ¹®¼­</a>¸¦ º¸ÃæÇÑ´Ù.
- ÀÌ ¹®¼­´Â À¥°ü¸®ÀÚ°¡ ½ÇÁ¦ ÀÛ¾÷¿¡¼­ ºÎµúÄ¡°ÔµÇ´Â ÀüÇüÀûÀÎ
- URL°ü·Ã ¹®Á¦¸¦ ÇØ°áÇϱâÀ§Çؼ­ ¾î¶»°Ô ¾ÆÆÄÄ¡
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇÏ´ÂÁö ¼³¸íÇÑ´Ù.</p>
- </dd>
-
- <dt><a href="relevant_standards.html">°ü·Ã Ç¥ÁØ</a></dt>
-
- <dd>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡°¡ µû¸£´Â °ü·Ã Ç¥ÁصéÀ» ¿­°ÅÇÑ´Ù.</p>
- </dd>
- </dl>
-
- </div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/index.xml b/docs/manual/misc/index.xml
deleted file mode 100644
index 0d39bbe5d6..0000000000
--- a/docs/manual/misc/index.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>Apache Miscellaneous Documentation</title>
-
- <summary>
-
- <p>Below is a list of additional documentation pages that apply
- to the Apache web server development project.</p>
-
- <note type="warning"><title>Warning</title>
- <p>The documents below have not been fully updated
- to take into account changes made in the 2.1 version of the
- Apache HTTP Server. Some of the information may still be
- relevant, but please use it with care.</p>
- </note>
-
- <dl>
- <dt><a href="perf-tuning.html">Performance Notes - Apache
- Tuning</a></dt>
-
- <dd>
- <p>Notes about how to (run-time and compile-time) configure
- Apache for highest performance. Notes explaining why Apache
- does some things, and why it doesn't do other things (which
- make it slower/faster).</p>
- </dd>
-
- <dt><a href="security_tips.html">Security Tips</a></dt>
-
- <dd>
- <p>Some "do"s - and "don't"s - for keeping your Apache web
- site secure.</p>
- </dd>
-
- <dt><a href="rewriteguide.html">URL Rewriting Guide</a></dt>
-
- <dd>
- <p>This document supplements the <module>mod_rewrite</module>
- <a href="../mod/mod_rewrite.html">reference documentation</a>.
- It describes how one can use Apache's <module>mod_rewrite</module>
- to solve typical URL-based problems webmasters are usually confronted
- with in practice.</p>
- </dd>
-
- <dt><a href="relevant_standards.html">Relevant Standards</a></dt>
-
- <dd>
- <p>This document acts as a reference page for most of the relevant
- standards that Apache follows.</p>
- </dd>
- </dl>
-
- </summary>
-
-</manualpage>
diff --git a/docs/manual/misc/index.xml.ko b/docs/manual/misc/index.xml.ko
deleted file mode 100644
index c7c95cd639..0000000000
--- a/docs/manual/misc/index.xml.ko
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>±âŸ ¾ÆÆÄÄ¡ ¹®¼­</title>
-
- <summary>
-
- <p>¾Æ·¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö °³¹ß ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Ãß°¡ ¹®¼­
- ¸ñ·ÏÀÌ´Ù.</p>
-
- <note type="warning"><title>ÁÖÀÇ</title>
- <p> ¾Æ·¡ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.1 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ»
- ´ã°í ÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­
- »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
- </note>
-
- <dl>
- <dt><a href="perf-tuning.html">¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó</a></dt>
-
- <dd>
- <p>ÃÖ°íÀÇ ¼º´ÉÀ» ³»±âÀ§ÇØ ¾ÆÆÄÄ¡¸¦ (½ÇÇà½Ã, ÄÄÆÄÀϽÃ)
- ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ´Ù·é´Ù. ¾ÆÆÄÄ¡°¡ ¿Ö ¾î¶² ÀÛ¾÷À» ÇÏ°í
- (¾ÆÆÄÄ¡¸¦ ´À¸®°Å³ª ºü¸£°Ô ¸¸µå´Â) ¾î¶² ÀÛ¾÷À» ÇÏÁö ¾Ê´ÂÁö
- ¼³¸íÇÑ´Ù.</p>
- </dd>
-
- <dt><a href="security_tips.html">º¸¾È ÆÁ</a></dt>
-
- <dd>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¾ÈÀüÇÏ°Ô À¯ÁöÇϱâÀ§ÇØ "ÇÒ ÀÏ"°ú "ÇÏÁö
- ¸»¾Æ¾ß ÇÒ ÀÏ".</p>
- </dd>
-
- <dt><a href="rewriteguide.html">URL ÀçÀÛ¼º Áöħ¼­</a></dt>
-
- <dd>
- <p>ÀÌ ¹®¼­´Â <module>mod_rewrite</module> <a
- href="../mod/mod_rewrite.html">ÂüÁ¶ ¹®¼­</a>¸¦ º¸ÃæÇÑ´Ù.
- ÀÌ ¹®¼­´Â À¥°ü¸®ÀÚ°¡ ½ÇÁ¦ ÀÛ¾÷¿¡¼­ ºÎµúÄ¡°ÔµÇ´Â ÀüÇüÀûÀÎ
- URL°ü·Ã ¹®Á¦¸¦ ÇØ°áÇϱâÀ§Çؼ­ ¾î¶»°Ô ¾ÆÆÄÄ¡
- <module>mod_rewrite</module>¸¦ »ç¿ëÇÏ´ÂÁö ¼³¸íÇÑ´Ù.</p>
- </dd>
-
- <dt><a href="relevant_standards.html">°ü·Ã Ç¥ÁØ</a></dt>
-
- <dd>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡°¡ µû¸£´Â °ü·Ã Ç¥ÁصéÀ» ¿­°ÅÇÑ´Ù.</p>
- </dd>
- </dl>
-
- </summary>
-
-</manualpage>
diff --git a/docs/manual/misc/index.xml.meta b/docs/manual/misc/index.xml.meta
deleted file mode 100644
index 47616bdf61..0000000000
--- a/docs/manual/misc/index.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/misc/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/misc/perf-tuning.html b/docs/manual/misc/perf-tuning.html
deleted file mode 100644
index 5eaaf7158e..0000000000
--- a/docs/manual/misc/perf-tuning.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: perf-tuning.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: perf-tuning.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/misc/perf-tuning.html.en b/docs/manual/misc/perf-tuning.html.en
deleted file mode 100644
index 166d43c35f..0000000000
--- a/docs/manual/misc/perf-tuning.html.en
+++ /dev/null
@@ -1,1056 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Performance Tuning - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>Apache Performance Tuning</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/misc/perf-tuning.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>Apache 2.0 is a general-purpose webserver, designed to
- provide a balance of flexibility, portability, and performance.
- Although it has not been designed specifically to set benchmark
- records, Apache 2.0 is capable of high performance in many
- real-world situations.</p>
-
- <p>Compared to Apache 1.3, release 2.0 contains many additional
- optimizations to increase throughput and scalability. Most of
- these improvements are enabled by default. However, there are
- compile-time and run-time configuration choices that can
- significantly affect performance. This document describes the
- options that a server administrator can configure to tune the
- performance of an Apache 2.0 installation. Some of these
- configuration options enable the httpd to better take advantage
- of the capabilities of the hardware and OS, while others allow
- the administrator to trade functionality for speed.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#hardware">Hardware and Operating System Issues</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#runtime">Run-Time Configuration Issues</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compiletime">Compile-Time Configuration Issues</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#trace">Appendix: Detailed Analysis of a Trace</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hardware" id="hardware">Hardware and Operating System Issues</a></h2>
-
-
-
- <p>The single biggest hardware issue affecting webserver
- performance is RAM. A webserver should never ever have to swap,
- as swapping increases the latency of each request beyond a point
- that users consider "fast enough". This causes users to hit
- stop and reload, further increasing the load. You can, and
- should, control the <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> setting so that your server
- does not spawn so many children it starts swapping. This procedure
- for doing this is simple: determine the size of your average Apache
- process, by looking at your process list via a tool such as
- <code>top</code>, and divide this into your total available memory,
- leaving some room for other processes.</p>
-
- <p>Beyond that the rest is mundane: get a fast enough CPU, a
- fast enough network card, and fast enough disks, where "fast
- enough" is something that needs to be determined by
- experimentation.</p>
-
- <p>Operating system choice is largely a matter of local
- concerns. But some guidelines that have proven generally
- useful are:</p>
-
- <ul>
- <li>
- <p>Run the latest stable release and patchlevel of the
- operating system that you choose. Many OS suppliers have
- introduced significant performance improvements to their
- TCP stacks and thread libraries in recent years.</p>
- </li>
-
- <li>
- <p>If your OS supports a <code>sendfile(2)</code> system
- call, make sure you install the release and/or patches
- needed to enable it. (With Linux, for example, this means
- using Linux 2.4 or later. For early releases of Solaris 8,
- you may need to apply a patch.) On systems where it is
- available, <code>sendfile</code> enables Apache 2 to deliver
- static content faster and with lower CPU utilization.</p>
- </li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="runtime" id="runtime">Run-Time Configuration Issues</a></h2>
-
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></li><li><code class="module"><a href="../mod/mpm_common.html">mpm_common</a></code></li><li><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code></li><li><code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code></li><li><code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code></li><li><code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code></li><li><code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code></li><li><code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code></li><li><code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li></ul></td></tr></table>
-
- <h3><a name="dns" id="dns">HostnameLookups and other DNS considerations</a></h3>
-
-
-
- <p>Prior to Apache 1.3, <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code> defaulted to <code>On</code>.
- This adds latency to every request because it requires a
- DNS lookup to complete before the request is finished. In
- Apache 1.3 this setting defaults to <code>Off</code>. If you need
- to have addresses in your log files resolved to hostnames, use the
- <a href="../programs/logresolve.html"><code>logresolve</code></a>
- program that comes with Apache, on one of the numerous log
- reporting packages which are available.</p>
-
- <p>It is recommended that you do this sort of postprocessing of
- your log files on some machine other than the production web
- server machine, in order that this activity not adversely affect
- server performance.</p>
-
- <p>If you use any <code><code class="directive"><a href="../mod/mod_access.html#allow">Allow</a></code>
- from domain</code> or <code><code class="directive"><a href="../mod/mod_access.html#deny">Deny</a></code> from domain</code>
- directives (i.e., using a hostname, or a domain name, rather than
- an IP address) then you will pay for
- a double reverse DNS lookup (a reverse, followed by a forward
- to make sure that the reverse is not being spoofed). For best
- performance, therefore, use IP addresses, rather than names, when
- using these directives, if possible.</p>
-
- <p>Note that it's possible to scope the directives, such as
- within a <code>&lt;Location /server-status&gt;</code> section.
- In this case the DNS lookups are only performed on requests
- matching the criteria. Here's an example which disables lookups
- except for <code>.html</code> and <code>.cgi</code> files:</p>
-
- <div class="example"><p><code>
- HostnameLookups off<br />
- &lt;Files ~ "\.(html|cgi)$"&gt;<br />
- <span class="indent">
- HostnameLookups on<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
- <p>But even still, if you just need DNS names in some CGIs you
- could consider doing the <code>gethostbyname</code> call in the
- specific CGIs that need it.</p>
-
-
-
- <h3><a name="symlinks" id="symlinks">FollowSymLinks and SymLinksIfOwnerMatch</a></h3>
-
-
-
- <p>Wherever in your URL-space you do not have an <code>Options
- FollowSymLinks</code>, or you do have an <code>Options
- SymLinksIfOwnerMatch</code> Apache will have to issue extra
- system calls to check up on symlinks. One extra call per
- filename component. For example, if you had:</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <span class="indent">
- Options SymLinksIfOwnerMatch<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>and a request is made for the URI <code>/index.html</code>.
- Then Apache will perform <code>lstat(2)</code> on
- <code>/www</code>, <code>/www/htdocs</code>, and
- <code>/www/htdocs/index.html</code>. The results of these
- <code>lstats</code> are never cached, so they will occur on
- every single request. If you really desire the symlinks
- security checking you can do something like this:</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <span class="indent">
- Options FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /www/htdocs&gt;<br />
- <span class="indent">
- Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>This at least avoids the extra checks for the
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> path.
- Note that you'll need to add similar sections if you
- have any <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> or
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> paths
- outside of your document root. For highest performance,
- and no symlink protection, set <code>FollowSymLinks</code>
- everywhere, and never set <code>SymLinksIfOwnerMatch</code>.</p>
-
-
-
- <h3><a name="htacess" id="htacess">AllowOverride</a></h3>
-
-
-
- <p>Wherever in your URL-space you allow overrides (typically
- <code>.htaccess</code> files) Apache will attempt to open
- <code>.htaccess</code> for each filename component. For
- example,</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride all<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>and a request is made for the URI <code>/index.html</code>.
- Then Apache will attempt to open <code>/.htaccess</code>,
- <code>/www/.htaccess</code>, and
- <code>/www/htdocs/.htaccess</code>. The solutions are similar
- to the previous case of <code>Options FollowSymLinks</code>.
- For highest performance use <code>AllowOverride None</code>
- everywhere in your filesystem.</p>
-
-
-
- <h3><a name="negotiation" id="negotiation">Negotiation</a></h3>
-
-
-
- <p>If at all possible, avoid content-negotiation if you're
- really interested in every last ounce of performance. In
- practice the benefits of negotiation outweigh the performance
- penalties. There's one case where you can speed up the server.
- Instead of using a wildcard such as:</p>
-
- <div class="example"><p><code>
- DirectoryIndex index
- </code></p></div>
-
- <p>Use a complete list of options:</p>
-
- <div class="example"><p><code>
- DirectoryIndex index.cgi index.pl index.shtml index.html
- </code></p></div>
-
- <p>where you list the most common choice first.</p>
-
- <p>Also note that explicitly creating a <code>type-map</code>
- file provides better performance than using
- <code>MultiViews</code>, as the necessary information can be
- determined by reading this single file, rather than having to
- scan the directory for files.</p>
-
- <p>If your site needs content negotiation consider using
- <code>type-map</code> files, rather than the <code>Options
- MultiViews</code> directive to accomplish the negotiation. See the
- <a href="../content-negotiation.html">Content Negotiation</a>
- documentation for a full discussion of the methods of negotiation,
- and instructions for creating <code>type-map</code> files.</p>
-
-
-
- <h3>Memory-mapping</h3>
-
-
-
- <p>In situations where Apache 2.0 needs to look at the contents
- of a file being delivered--for example, when doing server-side-include
- processing--it normally memory-maps the file if the OS supports
- some form of <code>mmap(2)</code>.</p>
-
- <p>On some platforms, this memory-mapping improves performance.
- However, there are cases where memory-mapping can hurt the performance
- or even the stability of the httpd:</p>
-
- <ul>
- <li>
- <p>On some operating systems, <code>mmap</code> does not scale
- as well as <code>read(2)</code> when the number of CPUs increases.
- On multiprocessor Solaris servers, for example, Apache 2.0 sometimes
- delivers server-parsed files faster when <code>mmap</code> is disabled.</p>
- </li>
-
- <li>
- <p>If you memory-map a file located on an NFS-mounted filesystem
- and a process on another NFS client machine deletes or truncates
- the file, your process may get a bus error the next time it tries
- to access the mapped file content.</p>
- </li>
- </ul>
-
- <p>For installations where either of these factors applies, you
- should use <code>EnableMMAP off</code> to disable the memory-mapping
- of delivered files. (Note: This directive can be overridden on
- a per-directory basis.)</p>
-
-
-
- <h3>Sendfile</h3>
-
-
-
- <p>In situations where Apache 2.0 can ignore the contents of the file
- to be delivered -- for example, when serving static file content --
- it normally uses the kernel sendfile support the file if the OS
- supports the <code>sendfile(2)</code> operation.</p>
-
- <p>On most platforms, using sendfile improves performance by eliminating
- separate read and send mechanics. However, there are cases where using
- sendfile can harm the stability of the httpd:</p>
-
- <ul>
- <li>
- <p>Some platforms may have broken sendfile support that the build
- system did not detect, especially if the binaries were built on
- another box and moved to such a machine with broken sendfile support.</p>
- </li>
- <li>
- <p>With an NFS-mounted files, the kernel may be unable
- to reliably serve the network file through it's own cache.</p>
- </li>
- </ul>
-
- <p>For installations where either of these factors applies, you
- should use <code>EnableSendfile off</code> to disable sendfile
- delivery of file contents. (Note: This directive can be overridden
- on a per-directory basis.)</p>
-
-
-
- <h3><a name="process" id="process">Process Creation</a></h3>
-
-
-
- <p>Prior to Apache 1.3 the <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, and <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> settings all had drastic effects on
- benchmark results. In particular, Apache required a "ramp-up"
- period in order to reach a number of children sufficient to serve
- the load being applied. After the initial spawning of
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> children,
- only one child per second would be created to satisfy the
- <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>
- setting. So a server being accessed by 100 simultaneous
- clients, using the default <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> of <code>5</code> would take on
- the order 95 seconds to spawn enough children to handle
- the load. This works fine in practice on real-life servers,
- because they aren't restarted frequently. But does really
- poorly on benchmarks which might only run for ten minutes.</p>
-
- <p>The one-per-second rule was implemented in an effort to
- avoid swamping the machine with the startup of new children. If
- the machine is busy spawning children it can't service
- requests. But it has such a drastic effect on the perceived
- performance of Apache that it had to be replaced. As of Apache
- 1.3, the code will relax the one-per-second rule. It will spawn
- one, wait a second, then spawn two, wait a second, then spawn
- four, and it will continue exponentially until it is spawning
- 32 children per second. It will stop whenever it satisfies the
- <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>
- setting.</p>
-
- <p>This appears to be responsive enough that it's almost
- unnecessary to twiddle the <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code> and <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> knobs. When more than 4 children are
- spawned per second, a message will be emitted to the
- <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>. If you
- see a lot of these errors then consider tuning these settings.
- Use the <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> output as a guide.</p>
-
- <p>Related to process creation is process death induced by the
- <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- setting. By default this is <code>0</code>,
- which means that there is no limit to the number of requests
- handled per child. If your configuration currently has this set
- to some very low number, such as <code>30</code>, you may want to bump this
- up significantly. If you are running SunOS or an old version of
- Solaris, limit this to <code>10000</code> or so because of memory leaks.</p>
-
- <p>When keep-alives are in use, children will be kept busy
- doing nothing waiting for more requests on the already open
- connection. The default <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> of <code>15</code>
- seconds attempts to minimize this effect. The tradeoff here is
- between network bandwidth and server resources. In no event
- should you raise this above about <code>60</code> seconds, as <a href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
- most of the benefits are lost</a>.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compiletime" id="compiletime">Compile-Time Configuration Issues</a></h2>
-
-
-
- <h3>Choosing an MPM</h3>
-
-
-
- <p>Apache 2.x supports pluggable concurrency models, called
- <a href="../mpm.html">Multi-Processing Modules</a> (MPMs).
- When building Apache, you must choose an MPM to use. There
- are platform-specific MPMs for some platforms:
- <code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>,
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, and <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>. For
- general Unix-type systems, there are several MPMs from which
- to choose. The choice of MPM can affect the speed and scalability
- of the httpd:</p>
-
- <ul>
-
- <li>The <code class="module"><a href="../mod/worker.html">worker</a></code> MPM uses multiple child
- processes with many threads each. Each thread handles
- one connection at a time. Worker generally is a good
- choice for high-traffic servers because it has a smaller
- memory footprint than the prefork MPM.</li>
-
- <li>The <code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM uses multiple child
- processes with one thread each. Each process handles
- one connection at a time. On many systems, prefork is
- comparable in speed to worker, but it uses more memory.
- Prefork's threadless design has advantages over worker
- in some situations: it can be used with non-thread-safe
- third-party modules, and it is easier to debug on platforms
- with poor thread debugging support.</li>
-
- </ul>
-
- <p>For more information on these and other MPMs, please
- see the MPM <a href="../mpm.html">documentation</a>.</p>
-
-
-
- <h3><a name="modules" id="modules">Modules</a></h3>
-
-
-
- <p>Since memory usage is such an important consideration in
- performance, you should attempt to eliminate modules that youare
- not actually using. If you have built the modules as <a href="../dso.html">DSOs</a>, eliminating modules is a simple
- matter of commenting out the associated <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive for that module.
- This allows you to experiment with removing modules, and seeing
- if your site still functions in their absense.</p>
-
- <p>If, on the other hand, you have modules statically linked
- into your Apache binary, you will need to recompile Apache in
- order to remove unwanted modules.</p>
-
- <p>An associated question that arises here is, of course, what
- modules you need, and which ones you don't. The answer here
- will, of course, vary from one web site to another. However, the
- <em>minimal</em> list of modules which you can get by with tends
- to include <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>,
- and <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. <code>mod_log_config</code> is,
- of course, optional, as you can run a web site without log
- files. This is, however, not recommended.</p>
-
-
-
- <h3>Atomic Operations</h3>
-
-
-
- <p>Some modules, such as <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> and
- recent development builds of the worker MPM, use APR's
- atomic API. This API provides atomic operations that can
- be used for lightweight thread synchronization.</p>
-
- <p>By default, APR implements these operations using the
- most efficient mechanism available on each target
- OS/CPU platform. Many modern CPUs, for example, have
- an instruction that does an atomic compare-and-swap (CAS)
- operation in hardware. On some platforms, however, APR
- defaults to a slower, mutex-based implementation of the
- atomic API in order to ensure compatibility with older
- CPU models that lack such instructions. If you are
- building Apache for one of these platforms, and you plan
- to run only on newer CPUs, you can select a faster atomic
- implementation at build time by configuring Apache with
- the <code>--enable-nonportable-atomics</code> option:</p>
-
- <div class="example"><p><code>
- ./buildconf<br />
- ./configure --with-mpm=worker --enable-nonportable-atomics=yes
- </code></p></div>
-
- <p>The <code>--enable-nonportable-atomics</code> option is
- relevant for the following platforms:</p>
-
- <ul>
-
- <li>Solaris on SPARC<br />
- By default, APR uses mutex-based atomics on Solaris/SPARC.
- If you configure with <code>--enable-nonportable-atomics</code>,
- however, APR generates code that uses a SPARC v8plus opcode for
- fast hardware compare-and-swap. If you configure Apache with
- this option, the atomic operations will be more efficient
- (allowing for lower CPU utilization and higher concurrency),
- but the resulting executable will run only on UltraSPARC
- chips.
- </li>
-
- <li>Linux on x86<br />
- By default, APR uses mutex-based atomics on Linux. If you
- configure with <code>--enable-nonportable-atomics</code>,
- however, APR generates code that uses a 486 opcode for fast
- hardware compare-and-swap. This will result in more efficient
- atomic operations, but the resulting executable will run only
- on 486 and later chips (and not on 386).
- </li>
-
- </ul>
-
-
-
- <h3>mod_status and ExtendedStatus On</h3>
-
-
-
- <p>If you include <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> and you also set
- <code>ExtendedStatus On</code> when building and running
- Apache, then on every request Apache will perform two calls to
- <code>gettimeofday(2)</code> (or <code>times(2)</code>
- depending on your operating system), and (pre-1.3) several
- extra calls to <code>time(2)</code>. This is all done so that
- the status report contains timing indications. For highest
- performance, set <code>ExtendedStatus off</code> (which is the
- default).</p>
-
-
-
- <h3>accept Serialization - multiple sockets</h3>
-
-
-
- <div class="warning"><h3>Warning:</h3>
- <p>This section has not been fully updated
- to take into account changes made in the 2.0 version of the
- Apache HTTP Server. Some of the information may still be
- relevant, but please use it with care.</p>
- </div>
-
- <p>This discusses a shortcoming in the Unix socket API. Suppose
- your web server uses multiple <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> statements to listen on either multiple
- ports or multiple addresses. In order to test each socket
- to see if a connection is ready Apache uses
- <code>select(2)</code>. <code>select(2)</code> indicates that a
- socket has <em>zero</em> or <em>at least one</em> connection
- waiting on it. Apache's model includes multiple children, and
- all the idle ones test for new connections at the same time. A
- naive implementation looks something like this (these examples
- do not match the code, they're contrived for pedagogical
- purposes):</p>
-
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &amp;accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- process the new_connection;<br />
- </span>
- }
- </code></p></div>
-
- <p>But this naive implementation has a serious starvation problem.
- Recall that multiple children execute this loop at the same
- time, and so multiple children will block at
- <code>select</code> when they are in between requests. All
- those blocked children will awaken and return from
- <code>select</code> when a single request appears on any socket
- (the number of children which awaken varies depending on the
- operating system and timing issues). They will all then fall
- down into the loop and try to <code>accept</code> the
- connection. But only one will succeed (assuming there's still
- only one connection ready), the rest will be <em>blocked</em>
- in <code>accept</code>. This effectively locks those children
- into serving requests from that one socket and no other
- sockets, and they'll be stuck there until enough new requests
- appear on that socket to wake them all up. This starvation
- problem was first documented in <a href="http://bugs.apache.org/index/full/467">PR#467</a>. There
- are at least two solutions.</p>
-
- <p>One solution is to make the sockets non-blocking. In this
- case the <code>accept</code> won't block the children, and they
- will be allowed to continue immediately. But this wastes CPU
- time. Suppose you have ten idle children in
- <code>select</code>, and one connection arrives. Then nine of
- those children will wake up, try to <code>accept</code> the
- connection, fail, and loop back into <code>select</code>,
- accomplishing nothing. Meanwhile none of those children are
- servicing requests that occurred on other sockets until they
- get back up to the <code>select</code> again. Overall this
- solution does not seem very fruitful unless you have as many
- idle CPUs (in a multiprocessor box) as you have idle children,
- not a very likely situation.</p>
-
- <p>Another solution, the one used by Apache, is to serialize
- entry into the inner loop. The loop looks like this
- (differences highlighted):</p>
-
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- <strong>accept_mutex_on ();</strong><br />
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &amp;accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- <strong>accept_mutex_off ();</strong><br />
- process the new_connection;<br />
- </span>
- }
- </code></p></div>
-
- <p><a id="serialize" name="serialize">The functions</a>
- <code>accept_mutex_on</code> and <code>accept_mutex_off</code>
- implement a mutual exclusion semaphore. Only one child can have
- the mutex at any time. There are several choices for
- implementing these mutexes. The choice is defined in
- <code>src/conf.h</code> (pre-1.3) or
- <code>src/include/ap_config.h</code> (1.3 or later). Some
- architectures do not have any locking choice made, on these
- architectures it is unsafe to use multiple
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- directives.</p>
-
- <p>The directive <code class="directive"><a href="../mod/mpm_common.html#acceptmutex">AcceptMutex</a></code> can be used to
- change the selected mutex implementation at run-time.</p>
-
- <dl>
- <dt><code>AcceptMutex flock</code></dt>
-
- <dd>
- <p>This method uses the <code>flock(2)</code> system call to
- lock a lock file (located by the <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code> directive).</p>
- </dd>
-
- <dt><code>AcceptMutex fcntl</code></dt>
-
- <dd>
- <p>This method uses the <code>fcntl(2)</code> system call to
- lock a lock file (located by the <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code> directive).</p>
- </dd>
-
- <dt><code>AcceptMutex sysvsem</code></dt>
-
- <dd>
- <p>(1.3 or later) This method uses SysV-style semaphores to
- implement the mutex. Unfortunately SysV-style semaphores have
- some bad side-effects. One is that it's possible Apache will
- die without cleaning up the semaphore (see the
- <code>ipcs(8)</code> man page). The other is that the
- semaphore API allows for a denial of service attack by any
- CGIs running under the same uid as the webserver
- (<em>i.e.</em>, all CGIs, unless you use something like
- <code>suexec</code> or <code>cgiwrapper</code>). For these
- reasons this method is not used on any architecture except
- IRIX (where the previous two are prohibitively expensive
- on most IRIX boxes).</p>
- </dd>
-
- <dt><code>AcceptMutex pthread</code></dt>
-
- <dd>
- <p>(1.3 or later) This method uses POSIX mutexes and should
- work on any architecture implementing the full POSIX threads
- specification, however appears to only work on Solaris (2.5
- or later), and even then only in certain configurations. If
- you experiment with this you should watch out for your server
- hanging and not responding. Static content only servers may
- work just fine.</p>
- </dd>
-
- <dt><code>AcceptMutex posixsem</code></dt>
-
- <dd>
- <p>(2.0 or later) This method uses POSIX semaphores. The
- semaphore ownership is not recovered if a thread in the process
- holding the mutex segfaults, resulting in a hang of the web
- server.</p>
- </dd>
-
- </dl>
-
- <p>If your system has another method of serialization which
- isn't in the above list then it may be worthwhile adding code
- for it to APR.</p>
-
- <p>Another solution that has been considered but never
- implemented is to partially serialize the loop -- that is, let
- in a certain number of processes. This would only be of
- interest on multiprocessor boxes where it's possible multiple
- children could run simultaneously, and the serialization
- actually doesn't take advantage of the full bandwidth. This is
- a possible area of future investigation, but priority remains
- low because highly parallel web servers are not the norm.</p>
-
- <p>Ideally you should run servers without multiple
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- statements if you want the highest performance.
- But read on.</p>
-
-
-
- <h3>accept Serialization - single socket</h3>
-
-
-
- <p>The above is fine and dandy for multiple socket servers, but
- what about single socket servers? In theory they shouldn't
- experience any of these same problems because all children can
- just block in <code>accept(2)</code> until a connection
- arrives, and no starvation results. In practice this hides
- almost the same "spinning" behaviour discussed above in the
- non-blocking solution. The way that most TCP stacks are
- implemented, the kernel actually wakes up all processes blocked
- in <code>accept</code> when a single connection arrives. One of
- those processes gets the connection and returns to user-space,
- the rest spin in the kernel and go back to sleep when they
- discover there's no connection for them. This spinning is
- hidden from the user-land code, but it's there nonetheless.
- This can result in the same load-spiking wasteful behaviour
- that a non-blocking solution to the multiple sockets case
- can.</p>
-
- <p>For this reason we have found that many architectures behave
- more "nicely" if we serialize even the single socket case. So
- this is actually the default in almost all cases. Crude
- experiments under Linux (2.0.30 on a dual Pentium pro 166
- w/128Mb RAM) have shown that the serialization of the single
- socket case causes less than a 3% decrease in requests per
- second over unserialized single-socket. But unserialized
- single-socket showed an extra 100ms latency on each request.
- This latency is probably a wash on long haul lines, and only an
- issue on LANs. If you want to override the single socket
- serialization you can define
- <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code> and then
- single-socket servers will not serialize at all.</p>
-
-
-
- <h3>Lingering Close</h3>
-
-
-
- <p>As discussed in <a href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
- draft-ietf-http-connection-00.txt</a> section 8, in order for
- an HTTP server to <strong>reliably</strong> implement the
- protocol it needs to shutdown each direction of the
- communication independently (recall that a TCP connection is
- bi-directional, each half is independent of the other). This
- fact is often overlooked by other servers, but is correctly
- implemented in Apache as of 1.2.</p>
-
- <p>When this feature was added to Apache it caused a flurry of
- problems on various versions of Unix because of a
- shortsightedness. The TCP specification does not state that the
- <code>FIN_WAIT_2</code> state has a timeout, but it doesn't prohibit it.
- On systems without the timeout, Apache 1.2 induces many sockets
- stuck forever in the <code>FIN_WAIT_2</code> state. In many cases this
- can be avoided by simply upgrading to the latest TCP/IP patches
- supplied by the vendor. In cases where the vendor has never
- released patches (<em>i.e.</em>, SunOS4 -- although folks with
- a source license can patch it themselves) we have decided to
- disable this feature.</p>
-
- <p>There are two ways of accomplishing this. One is the socket
- option <code>SO_LINGER</code>. But as fate would have it, this
- has never been implemented properly in most TCP/IP stacks. Even
- on those stacks with a proper implementation (<em>i.e.</em>,
- Linux 2.0.31) this method proves to be more expensive (cputime)
- than the next solution.</p>
-
- <p>For the most part, Apache implements this in a function
- called <code>lingering_close</code> (in
- <code>http_main.c</code>). The function looks roughly like
- this:</p>
-
- <div class="example"><p><code>
- void lingering_close (int s)<br />
- {<br />
- <span class="indent">
- char junk_buffer[2048];<br />
- <br />
- /* shutdown the sending side */<br />
- shutdown (s, 1);<br />
- <br />
- signal (SIGALRM, lingering_death);<br />
- alarm (30);<br />
- <br />
- for (;;) {<br />
- <span class="indent">
- select (s for reading, 2 second timeout);<br />
- if (error) break;<br />
- if (s is ready for reading) {<br />
- <span class="indent">
- if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {<br />
- <span class="indent">
- break;<br />
- </span>
- }<br />
- /* just toss away whatever is here */<br />
- </span>
- }<br />
- </span>
- }<br />
- <br />
- close (s);<br />
- </span>
- }
- </code></p></div>
-
- <p>This naturally adds some expense at the end of a connection,
- but it is required for a reliable implementation. As HTTP/1.1
- becomes more prevalent, and all connections are persistent,
- this expense will be amortized over more requests. If you want
- to play with fire and disable this feature you can define
- <code>NO_LINGCLOSE</code>, but this is not recommended at all.
- In particular, as HTTP/1.1 pipelined persistent connections
- come into use <code>lingering_close</code> is an absolute
- necessity (and <a href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
- pipelined connections are faster</a>, so you want to support
- them).</p>
-
-
-
- <h3>Scoreboard File</h3>
-
-
-
- <p>Apache's parent and children communicate with each other
- through something called the scoreboard. Ideally this should be
- implemented in shared memory. For those operating systems that
- we either have access to, or have been given detailed ports
- for, it typically is implemented using shared memory. The rest
- default to using an on-disk file. The on-disk file is not only
- slow, but it is unreliable (and less featured). Peruse the
- <code>src/main/conf.h</code> file for your architecture and
- look for either <code>USE_MMAP_SCOREBOARD</code> or
- <code>USE_SHMGET_SCOREBOARD</code>. Defining one of those two
- (as well as their companions <code>HAVE_MMAP</code> and
- <code>HAVE_SHMGET</code> respectively) enables the supplied
- shared memory code. If your system has another type of shared
- memory, edit the file <code>src/main/http_main.c</code> and add
- the hooks necessary to use it in Apache. (Send us back a patch
- too please.)</p>
-
- <div class="note">Historical note: The Linux port of Apache didn't start to
- use shared memory until version 1.2 of Apache. This oversight
- resulted in really poor and unreliable behaviour of earlier
- versions of Apache on Linux.</div>
-
-
-
- <h3>DYNAMIC_MODULE_LIMIT</h3>
-
-
-
- <p>If you have no intention of using dynamically loaded modules
- (you probably don't if you're reading this and tuning your
- server for every last ounce of performance) then you should add
- <code>-DDYNAMIC_MODULE_LIMIT=0</code> when building your
- server. This will save RAM that's allocated only for supporting
- dynamically loaded modules.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="trace" id="trace">Appendix: Detailed Analysis of a Trace</a></h2>
-
-
-
- <p>Here is a system call trace of Apache 2.0.38 with the worker MPM
- on Solaris 8. This trace was collected using:</p>
-
- <div class="example"><p><code>
- truss -l -p <var>httpd_child_pid</var>.
- </code></p></div>
-
- <p>The <code>-l</code> option tells truss to log the ID of the
- LWP (lightweight process--Solaris's form of kernel-level thread)
- that invokes each system call.</p>
-
- <p>Other systems may have different system call tracing utilities
- such as <code>strace</code>, <code>ktrace</code>, or <code>par</code>.
- They all produce similar output.</p>
-
- <p>In this trace, a client has requested a 10KB static file
- from the httpd. Traces of non-static requests or requests
- with content negotiation look wildly different (and quite ugly
- in some cases).</p>
-
- <div class="example"><pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
-/67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre></div>
-
- <p>In this trace, the listener thread is running within LWP #67.</p>
-
- <div class="note">Note the lack of <code>accept(2)</code> serialization. On this
- particular platform, the worker MPM uses an unserialized accept by
- default unless it is listening on multiple ports.</div>
-
- <div class="example"><pre>/65: lwp_park(0x00000000, 0) = 0
-/67: lwp_unpark(65, 1) = 0</pre></div>
-
- <p>Upon accepting the connection, the listener thread wakes up
- a worker thread to do the request processing. In this trace,
- the worker thread that handles the request is mapped to LWP #65.</p>
-
- <div class="example"><pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre></div>
-
- <p>In order to implement virtual hosts, Apache needs to know
- the local socket address used to accept the connection. It
- is possible to eliminate this call in many situations (such
- as when there are no virtual hosts, or when
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> directives
- are used which do not have wildcard addresses). But
- no effort has yet been made to do these optimizations. </p>
-
- <div class="example"><pre>/65: brk(0x002170E8) = 0
-/65: brk(0x002190E8) = 0</pre></div>
-
- <p>The <code>brk(2)</code> calls allocate memory from the heap.
- It is rare to see these in a system call trace, because the httpd
- uses custom memory allocators (<code>apr_pool</code> and
- <code>apr_bucket_alloc</code>) for most request processing.
- In this trace, the httpd has just been started, so it must
- call <code>malloc(3)</code> to get the blocks of raw memory
- with which to create the custom memory allocators.</p>
-
- <div class="example"><pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
-/65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
-/65: fcntl(9, F_SETFL, 0x00000082) = 0</pre></div>
-
- <p>Next, the worker thread puts the connection to the client (file
- descriptor 9) in non-blocking mode. The <code>setsockopt(2)</code>
- and <code>getsockopt(2)</code> calls are a side-effect of how
- Solaris's libc handles <code>fcntl(2)</code> on sockets.</p>
-
- <div class="example"><pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre></div>
-
- <p>The worker thread reads the request from the client.</p>
-
- <div class="example"><pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
-/65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre></div>
-
- <p>This httpd has been configured with <code>Options FollowSymLinks</code>
- and <code>AllowOverride None</code>. Thus it doesn't need to
- <code>lstat(2)</code> each directory in the path leading up to the
- requested file, nor check for <code>.htaccess</code> files.
- It simply calls <code>stat(2)</code> to verify that the file:
- 1) exists, and 2) is a regular file, not a directory.</p>
-
- <div class="example"><pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre></div>
-
- <p>In this example, the httpd is able to send the HTTP response
- header and the requested file with a single <code>sendfilev(2)</code>
- system call. Sendfile semantics vary among operating systems. On some other
- systems, it is necessary to do a <code>write(2)</code> or
- <code>writev(2)</code> call to send the headers before calling
- <code>sendfile(2)</code>.</p>
-
- <div class="example"><pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre></div>
-
- <p>This <code>write(2)</code> call records the request in the
- access log. Note that one thing missing from this trace is a
- <code>time(2)</code> call. Unlike Apache 1.3, Apache 2.0 uses
- <code>gettimeofday(3)</code> to look up the time. On some operating
- systems, like Linux or Solaris, <code>gettimeofday</code> has an
- optimized implementation that doesn't require as much overhead
- as a typical system call.</p>
-
- <div class="example"><pre>/65: shutdown(9, 1, 1) = 0
-/65: poll(0xFAF7B980, 1, 2000) = 1
-/65: read(9, 0xFAF7BC20, 512) = 0
-/65: close(9) = 0</pre></div>
-
- <p>The worker thread does a lingering close of the connection.</p>
-
- <div class="example"><pre>/65: close(10) = 0
-/65: lwp_park(0x00000000, 0) (sleeping...)</pre></div>
-
- <p>Finally the worker thread closes the file that it has just delivered
- and blocks until the listener assigns it another connection.</p>
-
- <div class="example"><pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre></div>
-
- <p>Meanwhile, the listener thread is able to accept another connection
- as soon as it has dispatched this connection to a worker thread (subject
- to some flow-control logic in the worker MPM that throttles the listener
- if all the available workers are busy). Though it isn't apparent from
- this trace, the next <code>accept(2)</code> can (and usually does, under
- high load conditions) occur in parallel with the worker thread's handling
- of the just-accepted connection.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/misc/perf-tuning.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/perf-tuning.html.ko.euc-kr b/docs/manual/misc/perf-tuning.html.ko.euc-kr
deleted file mode 100644
index 617edc5fc6..0000000000
--- a/docs/manual/misc/perf-tuning.html.ko.euc-kr
+++ /dev/null
@@ -1,974 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/perf-tuning.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>¾ÆÆÄÄ¡ 2.0Àº ±â´É°ú Æ÷Æð¡´É¼º°ú ¼º´ÉÀÇ ±ÕÇüÀÌ ¸Âµµ·Ï
- ¼³°èÇÑ ¹ü¿ë À¥¼­¹öÀÌ´Ù. º¥Ä¡¸¶Å© ±â·ÏÀ» ¼¼¿ì±âÀ§ÇØ ¼³°èÇÏÁö
- ¾Ê¾ÒÁö¸¸ ¾ÆÆÄÄ¡ 2.0Àº ½ÇÁ¦ ¸¹Àº °æ¿ì ³ôÀº ¼º´ÉÀ» ³½´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 1.3°ú ºñ±³Çؼ­ 2.0 ¹öÀüÀº 󸮷®°ú È®À强(scalability)À»
- ³ôÀ̱âÀ§ÇØ ¸¹Àº ÃÖÀûÈ­¸¦ Çß´Ù. ±âº»°ªÀ¸·Î ´ëºÎºÐ ÃÖÀûÈ­ÇÑ
- °ªÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª ÄÄÆÄÀϽà ȤÀº ½ÇÇà½Ã ¼³Á¤ÀÌ ¼º´É¿¡
- Å« ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ 2.0ÀÇ ¼º´ÉÀ» Çâ»óÇϱâÀ§ÇØ
- ¼­¹ö °ü¸®ÀÚ°¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀ» ¼³¸íÇÑ´Ù. ¾î¶² ¼³Á¤
- ¿É¼ÇÀº À¥¼­¹ö°¡ Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦ÀÇ ±â´ÉÀ» ´õ Àß È°¿ëÇϵµ·Ï
- ÇÏ´Â ¹Ý¸é, ¾î¶² ¿É¼ÇÀº ¼Óµµ¸¦ À§ÇØ ±â´ÉÀ» Èñ»ýÇÑ´Ù.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#hardware">Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦¿¡ ´ëÇؼ­</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#runtime">½ÇÇà½Ã ¼³Á¤¿¡ ´ëÇؼ­</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compiletime">ÄÄÆÄÀϽà ¼³Á¤¿¡ ´ëÇؼ­</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#trace">ºÎ·Ï: ½Ã½ºÅÛÈ£Ãâ ±â·ÏÀ» ÀÚ¼¼È÷ ºÐ¼®Çϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hardware" id="hardware">Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦¿¡ ´ëÇؼ­</a></h2>
-
-
-
- <p>À¥¼­¹ö ¼º´É¿¡ °¡Àå Å« ¿µÇâÀ» ÁÖ´Â °ÍÀº ¸Þ¸ð¸®´Ù. ½º¿ÒÀº
- ¿äû´ç Áö¿¬½Ã°£À» »ç¿ëÀÚ°¡ "ÃæºÐÈ÷ ºü¸£´Ù°í" »ý°¢ÇÏÁö ¸øÇÏ°Ô
- ´Ã¸®±â¶§¹®¿¡ À¥¼­¹ö´Â ½º¿ÒÀ» ÇÏ¸é ¾ÈµÈ´Ù. ´À·ÁÁö¸é »ç¿ëÀÚ´Â
- Á¤ÁöÇÏ°í ´Ù½Ã Á¢¼ÓÇÏ¿© ºÎÇÏ°¡ °è¼Ó Áõ°¡ÇÑ´Ù. <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> Áö½Ã¾î¸¦ Á¶ÀýÇÏ¿©
- À¥¼­¹ö°¡ ½º¿ÒÀ» ÇÒ Á¤µµ·Î ¸¹Àº ÀÚ½ÄÀ» ¸¸µéÁö¾Êµµ·Ï Çؾß
- ÇÑ´Ù. ¹æ¹ýÀº °£´ÜÇÏ´Ù: <code>top</code>°ú °°Àº µµ±¸¿¡¼­
- ÇÁ·Î¼¼½º ¸ñ·ÏÀ» º¸°í ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½ºÀÇ Æò±Õ ¸Þ¸ð¸® »ç¿ë·®À»
- ¾Ë¾Æ³½ÈÄ, Àüü »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ »ç¿ëÇÒ
- °ø°£À» »« °ª¿¡¼­ ³ª´«´Ù.</p>
-
- <p>³ª¸ÓÁö´Â Æò¹üÇÏ´Ù: ÃæºÐÈ÷ ºü¸¥ CPU, ÃæºÐÈ÷ ºü¸¥ ³×Æ®¿÷Ä«µå,
- ÃæºÐÈ÷ ºü¸¥ µð½ºÅ©, ¿©±â¼­ "ÃæºÐÈ÷ ºü¸¥"Àº ½ÇÇèÀ» Çؼ­ °áÁ¤Çؾß
- ÇÑ´Ù.</p>
-
- <p>¿î¿µÃ¼Á¦´Â º¸Åë °¢ÀÚ ¾Ë¾Æ¼­ ¼±ÅÃÇÒ ÀÏÀÌ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î
- À¯¿ëÇÏ´Ù°í ÆǸíµÈ ¸î°¡Áö ÁöħÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>
- <p>¼±ÅÃÇÑ ¿î¿µÃ¼Á¦ÀÇ ÃֽŠ¾ÈÁ¤ ¹öÀü°ú ÆÐÄ¡¸¦ ½ÇÇàÇÑ´Ù.
- ¸¹Àº ¿î¿µÃ¼Á¦ Á¦ÀÛ»ç´Â ÃÖ±Ù TCP ½ºÅðú ¾²·¹µå ¶óÀ̺귯¸®¿¡
- ¸¹Àº ¼ÓµµÇâ»óÀ» Çß´Ù.</p>
- </li>
-
- <li>
- <p>¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code> ½Ã½ºÅÛÈ£ÃâÀ»
- Áö¿øÇÑ´Ù¸é, À̸¦ »ç¿ëÇϱâÀ§ÇÑ ¹öÀüÀ̳ª ÆÐÄ¡¸¦ ¼³Ä¡ÇÏ¿´´ÂÁö
- È®ÀÎÇÑ´Ù. (¿¹¸¦ µé¾î, ¸®´ª½º¶ó¸é 2.4 ÀÌ»ó ¹öÀüÀ» ¶æÇÑ´Ù.
- Solaris 8 Ãʱ⠹öÀüÀº ÆÐÄ¡°¡ ÇÊ¿äÇÏ´Ù.) Áö¿øÇÏ´Â ½Ã½ºÅÛÀ̶ó¸é
- ¾ÆÆÄÄ¡ 2´Â <code>sendfile</code>À» »ç¿ëÇÏ¿© CPU¸¦ ´ú
- »ç¿ëÇϸç Á¤Àû ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÒ ¼ö ÀÕ´Ù.</p>
- </li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="runtime" id="runtime">½ÇÇà½Ã ¼³Á¤¿¡ ´ëÇؼ­</a></h2>
-
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></li><li><code class="module"><a href="../mod/mpm_common.html">mpm_common</a></code></li><li><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code></li><li><code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code></li><li><code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code></li><li><code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code></li><li><code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code></li><li><code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code></li><li><code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li></ul></td></tr></table>
-
- <h3><a name="dns" id="dns">HostnameLookups¿Í DNS¿¡ ´ëÇØ °í·ÁÇÒ Á¡µé</a></h3>
-
-
-
- <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡ <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code>ÀÇ ±âº»°ªÀº
- <code>On</code>ÀÌ¿´´Ù. ¿äûÀ» ¸¶Ä¡±âÀü¿¡ DNS °Ë»öÀÌ ³¡³ª¾ß
- ÇϹǷΠ¿äû¸¶´Ù Áö¿¬ÀÌ »ý°å´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÀÌ ¼³Á¤ÀÇ
- ±âº»°ªÀÌ <code>Off</code>·Î º¯°æµÇ¾ú´Ù. ·Î±×ÆÄÀÏÀÇ ÁÖ¼Ò¸¦
- È£½ºÆ®¸íÀ¸·Î º¯È¯ÇÏ·Á¸é ¿©·¯ ·Î±×ó¸® ÇÁ·Î±×·¥Áß ÇϳªÀÎ,
- ¾ÆÆÄÄ¡¿¡ Æ÷ÇÔµÈ <a href="../programs/logresolve.html"><code>logresolve</code></a>
- ÇÁ·Î±×·¥À» »ç¿ëÇ϶ó.</p>
-
- <p>·Î±×ó¸® ÀÛ¾÷ÀÌ ¼­¹ö ¼º´É¿¡ ¾Ç¿µÇâÀ» ¹ÌÄ¡¹Ç·Î ½ÇÁ¦
- »ç¿ëÇÏ´Â À¥¼­¹ö°¡ ¾Æ´Ñ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ·Î±×ÆÄÀÏÀ» ÈÄó¸®Çϱæ
- ¹Ù¶õ´Ù.</p>
-
- <p><code><code class="directive"><a href="../mod/mod_access.html#allow">Allow</a></code>
- from domain</code>À̳ª <code><code class="directive"><a href="../mod/mod_access.html#deny">Deny</a></code> from domain</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù¸é (Áï, IP ÁÖ¼Ò°¡ ¾Æ´Ñ È£½ºÆ®¸íÀ̳ª µµ¸ÞÀθíÀ»
- »ç¿ëÇÑ´Ù¸é) ºÎµæÀÌ Áߺ¹-¿ª DNS °Ë»öÀ» (¿ª°Ë»öÀ» ÇÑÈÄ ¾ÇÀÇ·Î
- º¯°æµÇ¾ú´ÂÁö È®ÀÎÇϱâÀ§ÇØ ´Ù½Ã °Ë»ö) ÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î
- ¼º´ÉÀ» ³ôÀ̱âÀ§ÇØ ÀÌ·± Áö½Ã¾î¿¡´Â °¡´ÉÇϸé À̸§´ë½Å IP
- ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <p><code>&lt;Location /server-status&gt;</code> ¼½¼Ç µîÀ¸·Î
- Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦ Á¦ÇÑÇÒ ¼ö ÀÖÀ½À» ±â¾ïÇ϶ó. ÀÌ °æ¿ì
- Á¶°Ç¿¡ ¸Â´Â ¿äû¿¡¸¸ DNS Á¶È¸¸¦ ÇÑ´Ù. ´ÙÀ½Àº
- <code>.html</code>°ú <code>.cgi</code> ÆÄÀϸ¸ DNS °Ë»öÀ»
- ÇÏ´Â ¿¹Á¦´Ù:</p>
-
- <div class="example"><p><code>
- HostnameLookups off<br />
- &lt;Files ~ "\.(html|cgi)$"&gt;<br />
- <span class="indent">
- HostnameLookups on<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
- <p>±×·¯³ª CGI¿¡¼­ DNS¸íÀÌ ÇÊ¿äÇÒ »ÓÀ̶ó¸é, ÇÊ¿äÇÑ Æ¯Á¤
- CGI¿¡¼­¸¸ <code>gethostbyname</code> È£ÃâÀ» Çϵµ·Ï °í·ÁÇغ¼
- ¼ö ÀÖ´Ù.</p>
-
-
-
- <h3><a name="symlinks" id="symlinks">FollowSymLinks¿Í SymLinksIfOwnerMatch</a></h3>
-
-
-
- <p>URL °ø°£¿¡¼­ <code>Options FollowSymLinks</code>¸¦
- »ç¿ëÇÏÁö¾Ê°í <code>Options SymLinksIfOwnerMatch</code>¸¦
- »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â ½Éº¼¸µÅ©¸¦ °Ë»çÇϱâÀ§ÇØ ½Ã½ºÅÛÈ£ÃâÀ»
- Çѹø ´õ ÇØ¾ß ÇÑ´Ù. ÆÄÀϸíÀÇ °¢ ºÎºÐ¸¶´Ù Çѹø¾¿ ´õ È£ÃâÀ»
- ÇÑ´Ù. ¿¹¸¦ µé¾î, ¼³Á¤ÀÌ ´ÙÀ½°ú °°°í:</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <span class="indent">
- Options SymLinksIfOwnerMatch<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äûÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
- ±×·¯¸é ¾ÆÆÄÄ¡´Â <code>/www</code>, <code>/www/htdocs</code>,
- <code>/www/htdocs/index.html</code> °¢°¢¿¡ ´ëÇØ
- <code>lstat(2)</code>¸¦ È£ÃâÇÑ´Ù. <code>lstats</code>
- °á°ú¸¦ ij½ÌÇÏÁö ¾Ê±â¶§¹®¿¡ ¿äûÀÌ µé¾î¿Ã ¶§¸¶´Ù ¸Å¹ø °°Àº
- ÀÛ¾÷À» ÇÑ´Ù. ÁøÂ¥ ½Éº¼¸µÅ© º¸¾È °Ë»ç¸¦ ¿øÇÑ´Ù¸é ´ÙÀ½°ú
- °°ÀÌ ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <span class="indent">
- Options FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /www/htdocs&gt;<br />
- <span class="indent">
- Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>ÀÌ °æ¿ì ÃÖ¼ÒÇÑ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> °æ·Î´Â °Ë»çÇÏÁö
- ¾Ê´Â´Ù. DocumentRoot ¹Û¿¡ ÀÖ´Â °æ·Î·Î <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>³ª <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>À» »ç¿ëÇÑ
- °æ¿ì¿¡µµ À§¿Í ºñ½ÁÇÑ ¼½¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ½Éº¼¸µÅ© º¸¾ÈÀ»
- °í·ÁÇÏÁö ¾Ê°í ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é,
- <code>FollowSymLinks</code>¸¦ ¼³Á¤ÇÏ°í,
- <code>SymLinksIfOwnerMatch</code>´Â Àý´ë·Î ¾ÈµÈ´Ù.</p>
-
-
-
- <h3><a name="htacess" id="htacess">AllowOverride</a></h3>
-
-
-
- <p>URL °ø°£¿¡¼­ overrides¸¦ Çã¿ëÇÑ´Ù¸é (º¸Åë
- <code>.htaccess</code> ÆÄÀÏ) ¾ÆÆÄÄ¡´Â ÆÄÀϸíÀÇ °¢ ºÎºÐ¸¶´Ù
- <code>.htaccess</code>¸¦ ¿­±æ ½ÃµµÇÑ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride all<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äûÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
- ¾ÆÆÄÄ¡´Â <code>/.htaccess</code>, <code>/www/.htaccess</code>,
- <code>/www/htdocs/.htaccess</code>¸¦ ¿­·Á°í ½ÃµµÇÑ´Ù.
- ÇØ°áÃ¥Àº ¾ÕÀÇ <code>Options FollowSymLinks</code> °æ¿ì¿Í
- ºñ½ÁÇÏ´Ù. ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é ÆÄÀϽýºÅÛ¿¡ ´ëÇؼ­ Ç×»ó
- <code>AllowOverride None</code>À» »ç¿ëÇÑ´Ù.</p>
-
-
-
- <h3><a name="negotiation" id="negotiation">³»¿ëÇù»ó</a></h3>
-
-
-
- <p>°¡´ÉÇÏ°í ÁøÂ¥ Á¶±ÝÀÇ ¼º´ÉÇâ»ó¿¡µµ °ü½ÉÀÌ ÀÖ´Ù¸é ³»¿ëÇù»óÀ»
- ¸·´Â´Ù. ½ÇÁ¦·Î Çù»óÀÇ À̵æÀº ¼º´ÉÀúÇϺ¸´Ù ÀÛ´Ù. ¼­¹ö¸¦
- ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÏ´Â ´ë½Å:</p>
-
- <div class="example"><p><code>
- DirectoryIndex index
- </code></p></div>
-
- <p>¿ÏÀüÇÑ ¸ñ·ÏÀ» »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- DirectoryIndex index.cgi index.pl index.shtml index.html
- </code></p></div>
-
- <p>°¡Àå ÈçÇÑ °ÍÀ» ¾Õ¿¡ µÐ´Ù.</p>
-
- <p>¶Ç, µð·ºÅ丮¿¡¼­ ÆÄÀϵéÀ» ã´Â <code>MultiViews</code>
- º¸´Ù´Â, ÇÑ ÆÄÀϸ¸ ÀÐÀ¸¸é ÇÊ¿äÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â
- <code>type-map</code> ÆÄÀÏÀ» Á÷Á¢ ¸¸µå´Â °ÍÀÌ ´õ ºü¸§À»
- ¸í½ÉÇ϶ó.</p>
-
- <p>»çÀÌÆ®¿¡ ³»¿ëÇù»óÀÌ ÇÊ¿äÇÏ´Ù¸é Çù»óÀ» À§ÇØ <code>Options
- MultiViews</code> Áö½Ã¾î¸¦ »ç¿ëÇϱ⺸´Ù <code>type-map</code>
- ÆÄÀÏÀ» °í·ÁÇ϶ó. Çù»ó¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú
- <code>type-map</code> ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº <a href="../content-negotiation.html">³»¿ëÇù»ó</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
-
-
- <h3>¸Þ¸ð¸®´ëÀÀ (memory-mapping)</h3>
-
-
-
- <p>¿¹¸¦ µé¾î, server-side-include¸¦ ó¸®ÇÏ´Â µî ¾ÆÆÄÄ¡
- 2.0ÀÌ Àü¼ÛÇÒ ÆÄÀÏÀ» ÀÐÀ»¶§ ¿î¿µÃ¼Á¦°¡ <code>mmap(2)</code>
- µîÀ» Áö¿øÇÑ´Ù¸é ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÑ´Ù.</p>
-
- <p>¿©·¯ Ç÷¡Æû¿¡¼­ ¸Þ¸ð¸®´ëÀÀÀ» ¼º´ÉÀ» Çâ»óÇÑ´Ù. ±×·¯³ª
- ¸Þ¸ð¸®´ëÀÀÀÌ ¼­¹öÀÇ ¼º´ÉÀ» ¶³¾îÆ®¸®°í ½ÉÁö¾î ¾ÈÁ¤¼ºÀ»
- ÇØÄ¡´Â °æ¿ì°¡ ÀÖ´Ù:</p>
-
- <ul>
- <li>
- <p>¾î¶² ¿î¿µÃ¼Á¦¿¡¼­ <code>mmap</code>Àº CPU °³¼ö°¡
- ¸¹¾ÆÁú¶§ <code>read(2)</code> ¸¸Å­ È®À强ÀÌ ÁÁÁö ¾Ê´Ù.
- ¿¹¸¦ µé¾î, ´ÙÁßÇÁ·Î¼¼¼­ Solaris ¼­¹ö¿¡¼­ ¾ÆÆÄÄ¡ 2.0Àº
- Á¾Á¾ <code>mmap</code>À» »ç¿ëÇÏÁö ¾ÊÀ»¶§ ¼­¹ö°¡ ó¸®ÇÑ
- ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>NFS ¸¶¿îÆ®ÇÑ ÆÄÀϽýºÅÛ¿¡ ÀÖ´Â ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏ´Â
- µµÁß¿¡ ´Ù¸¥ NFS Ŭ¶óÀ̾ðÆ®¿¡ ÀÖ´Â ÇÁ·Î¼¼½º°¡ ÆÄÀÏÀ»
- Áö¿ì°Å³ª ÆÄÀÏÅ©±â¸¦ ÁÙÀ̸é, À¥¼­¹ö ÇÁ·Î¼¼½º°¡ ´ÙÀ½
- ¹ø¿¡ ¸Þ¸ð¸®´ëÀÀÇÑ ÆÄÀϳ»¿ëÀ» ÀÐÀ»¶§ bus error°¡ ¹ß»ýÇÒ
- ¼ö ÀÖ´Ù.</p>
- </li>
- </ul>
-
- <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇϸé Àü¼ÛÇÏ´Â ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏÁö
- ¾Êµµ·Ï <code>EnableMMAP off</code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. (ÁÖÀÇ:
- ÀÌ Áö½Ã¾î´Â µð·ºÅ丮º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>
-
-
-
- <h3>Sendfile</h3>
-
-
-
- <p>¾ÆÆÄÄ¡´Â ¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code>À» Áö¿øÇϸé
- Ä¿³Î sendfileÀ» »ç¿ëÇÏ¿© -- ¿¹¸¦ µé¾î, Á¤Àû ÆÄÀÏÀ» ¼­ºñ½ºÇÒ¶§
- -- Àü¼ÛÇÒ ÆÄÀÏÀ» Á÷Á¢ ÀÐÁö¾ÊÀ» ¼ö ÀÖ´Ù.</p>
-
- <p>¿©·¯ Ç÷¡Æû¿¡¼­ sendfileÀ» »ç¿ëÇϸé read¿Í send¸¦ µû·Î
- ÇÒ ÇÊ¿ä°¡ ¾ø¾î¼­ »¡¶óÁø´Ù. ±×·¯³ª sendfileÀ» »ç¿ëÇϸé
- À¥¼­¹öÀÇ ¾ÈÁ¤¼ºÀ» ÇØÄ¡°ÔµÇ´Â °æ¿ì°¡ ÀÖ´Ù:</p>
-
- <ul>
- <li>
- <p>sendfile Áö¿øÀÌ À߸øµÇ¾ú°í ÄÄÆÄÀÏ ½Ã½ºÅÛÀÌ ÀÌÁ¡À»
- ¹ß°ßÇÏÁö ¸øÇÏ´Â Ç÷¡ÆûÀÌ ÀÖ´Ù. ƯÈ÷ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­
- ½ÇÇàÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© sendfile Áö¿øÀÌ À߸øµÈ ÄÄÇ»ÅÍ·Î
- °¡Á®¿Â °æ¿ì¿¡ °¡´ÉÇÏ´Ù.</p>
- </li>
- <li>
- <p>Ä¿³ÎÀº ÀÚ½ÅÀÇ Ä³½¬¸¦ »ç¿ëÇÏ¿© NFS·Î ¸¶¿îÆ®ÇÑ ÆÄÀÏÀ»
- ¾ÈÁ¤ÀûÀ¸·Î ¼­ºñ½ºÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù.</p>
- </li>
- </ul>
-
- <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇϸé ÆÄÀÏÀ» sendfile Àü¼ÛÇÏÁö ¾Êµµ·Ï
- <code>EnableSendfile off</code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. (ÁÖÀÇ:
- ÀÌ Áö½Ã¾î´Â µð·ºÅ丮º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>
-
-
-
- <h3><a name="process" id="process">ÇÁ·Î¼¼½º »ý¼º</a></h3>
-
-
-
- <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡´Â <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> ¼³Á¤ÀÌ ¸ðµÎ
- º¥Ä¡¸¶Å© °á°ú¿¡ Å« ¿µÇâÀ» ¹ÌÃÆ´Ù. ƯÈ÷ ¾ÆÆÄÄ¡´Â ÀÛ¾÷À»
- ¼­ºñ½ºÇϱâÀ§ÇØ ÃæºÐÇÑ Àڽļö¿¡ ´Ù´Ù¸¦ ¶§±îÁö "µµ´Þ" ±â°£ÀÌ
- ÇÊ¿äÇß´Ù. óÀ½ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>°³ ÀÚ½ÄÀ»
- ¸¸µçÈÄ, <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>
- ¼³Á¤°ª±îÁö ÃÊ´ç ÀÚ½ÄÀ» Çϳª¾¿ ¸¸µé¾ú´Ù. ±×·¡¼­ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> ±âº»°ªÀÌ
- <code>5</code>ÀÎ ¼­¹ö¿¡ Ŭ¶óÀ̾ðÆ® 100°³°¡ µ¿½Ã¿¡ Á¢¼ÓÇϸé
- ºÎÇϸ¦ ó¸®Çϱ⿡ ÃæºÐÇÑ ÀÚ½ÄÀ» ¸¸µé±â±îÁö 95ÃÊ°¡ °É·È´Ù.
- ÀÚÁÖ Àç½ÃÀÛÇÏÁö ¾Ê´Â ½ÇÁ¦ ¼­¹ö¿¡¼­´Â Àß µ¿ÀÛÇÏÁö¸¸, 10ºÐ°£¸¸
- ½ÇÇàÇÏ´Â º¥Ä¡¸¶Å© °á°ú´Â ¸Å¿ì ³ª»Ú°Ô ³ª¿Â´Ù.</p>
-
- <p>ÃÊ´ç ÇÑ°³ ±ÔÄ¢Àº ÀÚ½ÄÀ» »õ·Î ½ÃÀÛÇϸ鼭 ¼­¹ö¿¡ ¹«¸®¸¦
- ÁÖÁö ¾ÊÀ¸·Á°í Á¤Çß´Ù. ÄÄÇ»ÅÍ°¡ ÀÚ½ÄÀ» ½ÃÀÛÇÏ´À¶ó ¹Ù»Ú¸é
- ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÀÌ ±ÔÄ¢ÀÌ ¾ÆÆÄÄ¡ÀÇ Ã¼°¨
- ¼º´É¿¡ ¾Ç¿µÇâÀ» ÁÖ¾î º¯°æÇÏ¿´´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÃÊ´ç ÇÑ°³
- ±ÔÄ¢Àº ¿ÏÈ­µÇ¾ú´Ù. ÄÚµå´Â ÀÚ½Ä ÇÑ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í,
- µÎ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í, ³×°³¸¦ ¸¸µé°í, ÀÌ·± ½ÄÀ¸·Î ÃÊ´ç
- ÀÚ½ÄÀ» 32°³ ¸¸µé¶§±îÁö Áö¼ö·Î Áõ°¡ÇÑ´Ù. Àڽļö°¡ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code> ¼³Á¤¿¡ ´Ù´Ù¸£¸é
- Áõ°¡¸¦ Áß´ÜÇÑ´Ù.</p>
-
- <p>ÀÌ °æ¿ì ¹ÝÀÀ¼Óµµ°¡ »¡¶óÁ®¼­ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>, <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>¸¦ °ÅÀÇ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÏÃÊ¿¡
- ÀÚ½ÄÀ» 4°³ ÀÌ»ó »ý¼ºÇϸé <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>¿¡ ±â·ÏÇÑ´Ù. ÀÌ·± ¿À·ù¹®ÀÌ
- ¸¹ÀÌ º¸À̸é ÀÌ ¼³Á¤µéÀ» Á¶ÀýÇÏ±æ ¹Ù¶õ´Ù.
- <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> °á°ú°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.</p>
-
- <p>ÇÁ·Î¼¼½º »ý¼º°ú °ü·ÃÇÏ¿© <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> ¼³Á¤Àº
- ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. ±âº»°ªÀº ÀڽĴç ó¸®ÇÒ ¿äû¼ö¿¡ Á¦ÇÑÀÌ
- ¾ø´Ù´Â <code>0</code>ÀÌ´Ù. ÇöÀç ¼³Á¤ÀÌ <code>30</code>°ú
- °°ÀÌ ¸Å¿ì ÀÛÀº °ªÀ¸·Î ¼³Á¤µÇÀÖ´Ù¸é, °ªÀ» »ó´çÈ÷ ³ôÈú ÇÊ¿ä°¡
- ÀÖ´Ù. SunOS³ª ¿À·¡µÈ Solaris ¹öÀüÀ» »ç¿ëÇÑ´Ù¸é, ¸Þ¸ð¸®À¯Ã⶧¹®¿¡
- ÀÌ °ªÀ» <code>10000</code> Á¤µµ·Î ¼³Á¤Ç϶ó.</p>
-
- <p>¿¬°áÀ¯Áö(keep-alive)¸¦ »ç¿ëÇÑ´Ù¸é ÀڽĵéÀº ÀÌ¹Ì ¿­¸°
- ¿¬°á¿¡¼­ Ãß°¡ ¿äûÀ» ±â´Ù¸®¸ç ¾Æ¹«°Íµµ ÇÏÁö¾Ê±â¶§¹®¿¡ °è¼Ó
- ¹Ù»Ú´Ù. <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code>ÀÇ
- ±âº»°ª <code>15</code> ÃÊ´Â ÀÌ·± Çö»óÀ» ÃÖ¼ÒÈ­ÇÑ´Ù. ³×Æ®¿÷
- ´ë¿ªÆø°ú ¼­¹ö ÀÚ¿ø °£ÀÇ ±ÕÇüÀÌ ¸Â°Ô ¼³Á¤ÇÑ´Ù. <a href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
- ¿¬°áÀ¯ÁöÀÇ ´ëºÎºÐÀÇ ÀÌÁ¡ÀÌ »ç¶óÁö±â¶§¹®¿¡</a> ¾î¶² °æ¿ì¿¡µµ
- ÀÌ °ªÀ» <code>60</code> ÃÊ ÀÌ»óÀ¸·Î ¿Ã¸®Áö ¸¶¶ó.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compiletime" id="compiletime">ÄÄÆÄÀϽà ¼³Á¤¿¡ ´ëÇؼ­</a></h2>
-
-
-
- <h3>MPM ¼±ÅÃ</h3>
-
-
-
- <p>¾ÆÆÄÄ¡ 2.x´Â <a href="../mpm.html">´ÙÁß󸮸ðµâ</a>
- (MPMs)À̶ó´Â ±³Ã¼ÇÒ ¼ö ÀÖ´Â µ¿±âÈ­ ¸ðµ¨À» Áö¿øÇÑ´Ù. ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÒ¶§ MPMÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. <code class="module"><a href="../mod/beos.html">beos</a></code>,
- <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>,
- <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>¿Í °°ÀÌ Æ¯Á¤ Ç÷¡Æû¿¡¼­¸¸ »ç¿ëÇÒ
- ¼ö ÀÖ´Â MPMµµ ÀÖ´Ù. ÀϹÝÀûÀÎ À¯´Ð½º·ù ½Ã½ºÅÛÀº ¿©·¯ MPM
- Áß¿¡ Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. À¥¼­¹öÀÇ ¼Óµµ¿Í
- È®À强(scalability)Àº ¾î¶² MPMÀ» ¼±ÅÃÇ߳Ŀ¡ ´Þ·È´Ù:</p>
-
- <ul>
-
- <li><code class="module"><a href="../mod/worker.html">worker</a></code> MPMÀº ¿©·¯ ÀÚ½Ä ÇÁ·Î¼¼½º°¡
- °¢°¢ ¿©·¯ ¾²·¹µå¸¦ »ç¿ëÇÑ´Ù. °¢ ¾²·¹µå´Â Çѹø¿¡ ÇÑ ¿¬°áÀ»
- ´ã´çÇÑ´Ù. ÀϹÝÀûÀ¸·Î worker´Â prefork MPM º¸´Ù ÀûÀº
- ¸Þ¸ð¸®¸¦ »ç¿ëÇϹǷΠÅë½Å·®ÀÌ ¸¹Àº ¼­¹ö¿¡ ÀûÀýÇÏ´Ù.</li>
-
- <li><code class="module"><a href="../mod/prefork.html">prefork</a></code> MPMÀº ¾²·¹µå°¡ ÇÑ°³ÀÎ ÀÚ½Ä
- ÇÁ·Î¼¼½º¸¦ ¿©·¯°³ »ç¿ëÇÑ´Ù. °¢ ÇÁ·Î¼¼½º´Â Çѹø¿¡ ÇÑ
- ¿¬°áÀ» ´ã´çÇÑ´Ù. ¿©·¯ ½Ã½ºÅÛ¿¡¼­ preforkÀÇ ¼Óµµ´Â worker¿Í
- ºñ½ÁÇÏÁö¸¸, ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°Àº »óȲ¿¡¼­
- ¾²·¹µå¸¦ »ç¿ëÇÏÁö ¾Ê´Â prefork ¹æ½ÄÀÌ worker¿¡ ºñÇØ
- ÀÌÁ¡À» °¡Áø´Ù: ¾²·¹µå¿¡ ¾ÈÀüÇÏÁö (thread-safe) ¾ÊÀº
- Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» »ç¿ëÇÒ ¼ö ÀÖ°í, ¾²·¹µå µð¹ö±ë Áö¿øÀÌ
- ºó¾àÇÑ Ç÷¡Æû¿¡¼­ ½±°Ô µð¹ö±ëÇÒ ¼ö ÀÖ´Ù.</li>
-
- </ul>
-
- <p>ÀÌ MPMµé°ú ´Ù¸¥ MPM¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â MPM <a href="../mpm.html">¹®¼­</a>¸¦ Âü°íÇÏ±æ ¹Ù¶õ´Ù.</p>
-
-
-
- <h3><a name="modules" id="modules">¸ðµâ</a></h3>
-
-
-
- <p>¸Þ¸ð¸® »ç¿ë·®ÀÌ ¼º´É¿¡¼­ °¡Àå Áß¿äÇÑ ¿äÀÎÀ̱⶧¹®¿¡
- ½ÇÁ¦·Î »ç¿ëÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇغ¸ÀÚ. ¸ðµâÀ» <a href="../dso.html">DSO</a>·Î ÄÄÆÄÀÏÇß´Ù¸é °£´ÜÈ÷ ±×
- ¸ðµâ¿¡ ´ëÇÑ <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦ ÁÖ¼®Ã³¸®Çϸé
- µÈ´Ù. ±×·¡¼­ ¸ðµâÀ» Á¦°ÅÇÏ°í ½ÇÇàÇÏ¿© »çÀÌÆ®°¡ ¸ðµâ¾øÀ̵µ
- Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´ÂÁö »ìÆ캼 ¼ö ÀÖ´Ù.</p>
-
- <p>¹Ý´ë·Î ¸ðµâÀÌ ¾ÆÆÄÄ¡ ½ÇÇàÆÄÀÏ¿¡ Á¤ÀûÀ¸·Î ¸µÅ©µÇÀÖ´Ù¸é
- ¿øÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇϱâÀ§ÇØ ¾ÆÆÄÄ¡¸¦ ÀçÄÄÆÄÀÏÇؾß
- ÇÑ´Ù.</p>
-
- <p>¿©±â¼­ ´ç¿¬È÷ ¾î¶² ¸ðµâÀ» »ç¿ëÇÏ°í »ç¿ëÇÏÁö ¸»Áö
- Àǹ®ÀÌ »ý±ä´Ù. Á¤´äÀº À¥»çÀÌÆ®¸¶´Ù ´Ù¸£´Ù. ±×·¯³ª ¾Æ¸¶µµ
- <em>ÃÖ¼ÒÇÑ</em> <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>,
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>, <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>
- ¸ðµâÀº »ç¿ëÇÒ °ÍÀÌ´Ù. ¹°·Ð À¥»çÀÌÆ®¿¡ ·Î±×ÆÄÀÏÀÌ ÇÊ¿ä¾ø´Ù¸é
- <code>mod_log_config</code>´Â ¾ø¾îµµ µÈ´Ù. ±×·¯³ª ÃßõÇÏÁö
- ¾Ê´Â´Ù.</p>
-
-
-
- <h3>Atomic ¸í·É</h3>
-
-
-
- <p><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> °°Àº ¸ðµâ°ú ÃÖ±Ù °³¹ßÁßÀÎ
- worker MPMÀº APRÀÇ atomic API¸¦ »ç¿ëÇÑ´Ù. ÀÌ API´Â °æ·®±Þ
- ¾²·¹µå µ¿±âÈ­¸¦ À§ÇÒ atomic ¸í·ÉÀ» Á¦°øÇÑ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î APRÀº °¢ ¿î¿µÃ¼Á¦/CPU Ç÷¡Æû¿¡¼­ °¡Àå È¿À²ÀûÀÎ
- ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÀÌ ¸í·ÉÀ» ±¸ÇöÇÑ´Ù. ¿¹¸¦ µé¾î, ¿©·¯ ÃÖ½Å
- CPU¿¡´Â Çϵå¿þ¾î·Î atomic compare-and-swap (CAS) ¿¬»êÀ»
- ÇÏ´Â ¸í·É¾î°¡ ÀÖ´Ù. ±×·¯³ª ¾î¶² Ç÷¡Æû¿¡¼­ APRÀº ÀÌ·±
- ¸í·É¾î°¡ ¾ø´Â ¿À·¡µÈ CPU¿Í ȣȯ¼ºÀ» À§ÇØ ´õ ´À¸° mutex±â¹Ý
- ±¸ÇöÀ» ±âº»ÀûÀ¸·Î »ç¿ëÇÑ´Ù. ÀÌ·± Ç÷¡Æû¿¡¼­ ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÒ¶§ ¾ÆÆÄÄ¡¸¦ ÃֽŠCPU¿¡¼­¸¸ ½ÇÇàÇÒ °èȹÀ̶ó¸é,
- ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÒ¶§ <code>--enable-nonportable-atomics</code>
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ´õ ºü¸¥ atomic ±¸ÇöÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ./buildconf<br />
- ./configure --with-mpm=worker --enable-nonportable-atomics=yes
- </code></p></div>
-
- <p><code>--enable-nonportable-atomics</code> ¿É¼ÇÀº ´ÙÀ½°ú
- °°Àº Ç÷¡Æû¿¡ ¿µÇâÀÌ ÀÖ´Ù:</p>
-
- <ul>
-
- <li>SPARC¿¡¼­ Solaris<br />
- ±âº»ÀûÀ¸·Î APRÀº Solaris/SPARC¿¡¼­ mutex±â¹Ý atomicÀ»
- »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
- <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇϸé
- APRÀº ºü¸¥ Çϵå¿þ¾î compare-and-swapÀ» À§ÇÑ SPARC
- v8plus ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé atomic
- ¸í·ÉÀÌ ´õ È¿À²ÀûÀÌÁö¸¸ (CPU¸¦ ´ú »ç¿ëÇÏ°í ´õ ³ôÀº
- µ¿±âÈ­°¡ °¡´ÉÇÏ´Ù), ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº UltraSPARC
- Ĩ¿¡¼­¸¸ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- </li>
-
- <li>Linux on x86<br />
- ±âº»ÀûÀ¸·Î APRÀº ¸®´ª½º¿¡¼­ mutex±â¹Ý atomicÀ»
- »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
- <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇϸé
- APRÀº ºü¸¥ Çϵå¿þ¾î compare-and-swapÀ» À§ÇÑ 486
- ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ´õ È¿À²ÀûÀÎ atomic ¸í·ÉÀÌ °¡´ÉÇÏÁö¸¸,
- ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº 486 ÀÌ»ó Ĩ¿¡¼­¸¸ (386Àº ¾ÈµÈ´Ù)
- ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- </li>
-
- </ul>
-
-
-
- <h3>mod_status¿Í ExtendedStatus On</h3>
-
-
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ¶§ <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>¸¦ Æ÷ÇÔÇÏ°í
- ½ÇÇàÇÒ¶§ <code>ExtendedStatus On</code>À» ¼³Á¤ÇÏ¸é ¾ÆÆÄÄ¡´Â
- ¿äûÀ» ¹ÞÀ»¶§¸¶´Ù <code>gettimeofday(2)</code>(ȤÀº ¿î¿µÃ¼Á¦¿¡
- µû¶ó <code>times(2)</code>)¸¦ µÎ¹ø È£ÃâÇÏ°í (1.3 ÀÌÀü¿¡´Â)
- <code>time(2)</code>µµ Ãß°¡·Î ¿©·¯¹ø È£ÃâÇÑ´Ù. »óÅ º¸°í¼­¿¡
- µ¿À۽ð£ÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. ÃÖ»óÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é
- (±âº»°ªÀÎ) <code>ExtendedStatus off</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-
-
- <h3>accept Á÷·ÄÈ­ - ¿©·¯ ¼ÒÄÏ</h3>
-
-
-
- <div class="warning"><h3>ÁÖÀÇ:</h3>
- <p> ¾Æ·¡ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ»
- ´ã°í ÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­
- »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
- </div>
-
- <p>À¯´Ð½º ¼ÒÄÏ APIÀÇ ´ÜÁ¡À» ¼³¸íÇÑ´Ù. À¥¼­¹ö°¡ ¿©·¯ Æ÷Æ®
- ȤÀº ¿©·¯ ÁÖ¼Ò¸¦ ±â´Ù¸®±âÀ§ÇØ ¿©·¯ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>À» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÏÀÚ.
- ¿¬°áÀÌ °¡´ÉÇÑÁö °¢ ¼ÒÄÏÀ» °Ë»çÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â
- <code>select(2)</code>¸¦ »ç¿ëÇÑ´Ù. <code>select(2)</code>´Â
- ¼ÒÄÏ¿¡ ±â´Ù¸®°í ÀÖ´Â ¿¬°áÀÌ <em>¾ø´ÂÁö</em> ȤÀº <em>ÃÖ¼ÒÇÑ
- ÇÑ°³</em> ÀÖ´ÂÁö ¾Ë·ÁÁØ´Ù. ¾ÆÆÄÄ¡¿¡´Â ¿©·¯ ÀÚ½ÄÀÌ ÀÖ°í,
- ½¬°í ÀÖ´Â ¸ðµç ÀÚ½ÄÀº µ¿½Ã¿¡ »õ·Î¿î ¿¬°áÀ» °Ë»çÇÑ´Ù. ¿ø·¡
- ±¸ÇöÀº ´ÙÀ½°ú ºñ½ÁÇÏ´Ù (ÀÌ ¿¹´Â Äڵ忡¼­ °¡Á®¿ÀÁö ¾Ê¾Ò´Ù.
- ´ÜÁö ¼³¸íÇϱâÀ§ÇÑ ¿ëµµ·Î ¸¸µé¾ú´Ù.):</p>
-
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &amp;accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- process the new_connection;<br />
- </span>
- }
- </code></p></div>
-
- <p>±×·¯³ª À§ÀÇ ´Ü¼øÇÑ ±¸Çö¿¡´Â ½É°¢ÇÑ °í°¥(starvation)
- ¹®Á¦°¡ ÀÖ´Ù. ¿©·¯ ÀÚ½ÄÀÌ µ¿½Ã¿¡ ÀÌ ¹Ýº¹¹®À» ½ÇÇàÇϸé,
- ¿äûÀ» ±â´Ù¸®¸ç ¸ðµÎ <code>select</code>¿¡¼­ ¸ØÃá´Ù. À̶§
- ¾î¶² ¼ÒÄÏ¿¡ ¿äûÀÌ Çϳª¶óµµ µé¾î¿À¸é ¸ðµç ÀÚ½ÄÀÌ ±ú¾î³­´Ù
- (±ú¾î³ª´Â ÀÚ½ÄÀÇ °³¼ö´Â ¿î¿µÃ¼Á¦¿Í ŸÀֿ̹¡ µû¶ó ´Ù¸£´Ù).
- À̵éÀº ¸ðµÎ ¿¬°áÀ» <code>accept</code>ÇÏ±æ ½ÃµµÇÑ´Ù. ±×·¯³ª
- (¾ÆÁ÷µµ ÇÑ ¿¬°á¸¸ ´ë±âÁßÀ̶ó¸é) ÇÑ Àڽĸ¸ ¼º°øÇÏ°í, ³ª¸ÓÁö´Â
- <code>accept</code>¿¡¼­ <em>¸ØÃá´Ù.</em> ±×·¯¸é ÀÌ ÀڽĵéÀº
- ÇÑ ¼ÒÄÏÀÇ ¿äû¸¸À» ¼­ºñ½ºÇϵµ·Ï ¹­¿©¼­, ±× ¼ÒÄÏÀ¸·Î »õ·Î¿î
- ¿äûÀÌ ÃæºÐÈ÷ µé¾î¿Í¼­ ¸ðµç ÀÚ½ÄÀ» ±ú¿ï¶§±îÁö Á¤ÁöÇØÀÖ´Ù.
- ÀÌ·± °í°¥ ¹®Á¦´Â <a href="http://bugs.apache.org/index/full/467">PR#467</a>¿¡
- óÀ½ º¸°íµÇ¾ú´Ù. ÃÖ¼ÒÇÑ µÎ°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù.</p>
-
- <p>ÇÑ°¡Áö´Â ¼ÒÄÏÀ» ´ë±âÇÏÁö ¾Êµµ·Ï (non-blocking) ¸¸µå´Â
- ¹æ¹ýÀÌ´Ù. ÀÌ °æ¿ì ÀÚ½ÄÀÌ <code>accept</code>¸¦ Çصµ ¸ØÃßÁö
- ¾Ê°í, Áï½Ã ÁøÇàÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª CPU ½Ã°£À» ³¶ºñÇÑ´Ù.
- <code>select</code>¿¡¼­ ½¬´Â ÀÚ½ÄÀÌ 10°³ ÀÖ°í, »õ·Î ¿¬°áÀÌ
- ÇÑ°³ µé¾î¿Ô´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯¸é ÀÌ ÀÚ½ÄÁß 9°³´Â ±ú¾î³ª¼­
- ¿¬°áÀ» <code>accept</code>ÇÏ±æ ½ÃµµÇÏ°í ½ÇÆÐÇÏ¸é ¾Æ¹«
- Àϵµ ÇÏÁö ¾Ê°í ´Ù½Ã <code>select</code>¸¦ ¹Ýº¹ÇÑ´Ù. ´Ù½Ã
- <code>select</code>·Î µ¹¾Æ¿Ã ¶§±îÁö ¾î¶² Àڽĵµ ´Ù¸¥ ¼ÒÄÏ¿¡
- µé¾î¿Â ¿äûÀ» ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. (´ÙÁßÇÁ·Î¼¼¼­ ÄÄÇ»ÅÍ¿¡¼­)
- ½¬´Â ÀÚ½Ä °³¼ö¸¸Å­ CPU °³¼ö°¡ ÀÖ´Â µå¹® °æ¿ì°¡ ¾Æ´Ï¶ó¸é
- ÀÌ ÇØ°áÃ¥Àº º°·Î ÁÁ¾Æº¸ÀÌÁö ¾Ê´Â´Ù.</p>
-
- <p>´Ù¸¥ ¹æ¹ýÀº ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ¹æ¹ýÀ¸·Î ³»ºÎ ¹Ýº¹¹®¿¡
- ÇÑ Àڽĸ¸À» µé¿©º¸³½´Ù. ¹Ýº¹¹®Àº ´ÙÀ½°ú °°´Ù (Â÷À̸¦
- °­Á¶ÇßÀ½):</p>
-
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- <strong>accept_mutex_on ();</strong><br />
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &amp;accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- <strong>accept_mutex_off ();</strong><br />
- process the new_connection;<br />
- </span>
- }
- </code></p></div>
-
- <p><code>accept_mutex_on</code>°ú <code>accept_mutex_off</code>
- <a id="serialize" name="serialize">ÇÔ¼ö</a>´Â mutex ¼¼¸¶Æ÷¾î¸¦
- ±¸ÇöÇÑ´Ù. Çѹø¿¡ ¿ÀÁ÷ ÇÑ Àڽĸ¸ÀÌ mutex¸¦ °¡Áú ¼ö ÀÖ´Ù.
- mutex¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡ÁöÀÌ´Ù. ±¸Çö ¹æ¹ýÀº (1.3
- ÀÌÀü) <code>src/conf.h</code>³ª (1.3°ú ±× ÀÌÈÄ)
- <code>src/include/ap_config.h</code>¿¡ Á¤ÀǵÇÀÖ´Ù. ¾î¶²
- ¾ÆÅ°ÅØÃÄ´Â Àá±Ý(locking) ¹æ¹ýÀ» ¼±ÅÃÇÏÁö ¾Ê±â¶§¹®¿¡, ÀÌ·±
- ¾ÆÅ°ÅØÃÄ¿¡¼­ ¿©·¯ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- À§ÇèÇÏ´Ù.</p>
-
- <p>½ÇÇà½Ã <code class="directive"><a href="../mod/mpm_common.html#acceptmutex">AcceptMutex</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- mutex ±¸ÇöÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
-
- <dl>
- <dt><code>AcceptMutex flock</code></dt>
-
- <dd>
- <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>flock(2)</code>
- ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code> Áö½Ã¾î·Î ÁöÁ¤).</p>
- </dd>
-
- <dt><code>AcceptMutex fcntl</code></dt>
-
- <dd>
- <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>fcntl(2)</code>
- ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code> Áö½Ã¾î·Î ÁöÁ¤).</p>
- </dd>
-
- <dt><code>AcceptMutex sysvsem</code></dt>
-
- <dd>
- <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀ» SysV½Ä ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÏ¿©
- mutex¸¦ ±¸ÇöÇÑ´Ù. ºÒÇàÈ÷µµ SysV½Ä ¼¼¸¶Æ÷¾î´Â ³ª»Û
- ºÎÀÛ¿ëÀÌ ÀÖ´Ù. Çϳª´Â ¾ÆÆÄÄ¡°¡ ¼¼¸¶Æ÷¾î¸¦ Á¤¸®ÇÏÁö
- ¾Ê°í Á×À» ¼ö ÀÖ´Â Á¡ÀÌ´Ù (<code>ipcs(8)</code> manpage
- Âü°í). ´Ù¸¥ Çϳª´Â À¥¼­¹ö¿Í µ¿ÀÏÇÑ uid·Î ½ÇÇàÇÏ´Â
- CGI°¡ (<em>Áï,</em> <code>suexec</code>³ª
- <code>cgiwrapper</code>¸¦ »ç¿ëÇÏÁö¾Ê´Â ÇÑ ¸ðµç CGI)
- ¼¼¸¶Æ÷¾î API¸¦ »ç¿ëÇÏ¿© ¼­ºñ½º°ÅºÎ°ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â
- Á¡ÀÌ´Ù. ÀÌ·± ÀÌÀ¯¶§¹®¿¡ IRIX¸¦ Á¦¿ÜÇÑ ¾ÆÅ°ÅØÃÄ¿¡¼­
- ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù (´ëºÎºÐÀÇ IRIX ÄÄÇ»ÅÍ¿¡¼­
- ¾ÕÀÇ µÎ ¹æ¹ýÀº Áö³ªÄ¡°Ô ¹ö°Ì´Ù).</p>
- </dd>
-
- <dt><code>AcceptMutex pthread</code></dt>
-
- <dd>
- <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX mutex¸¦ »ç¿ëÇϱ⶧¹®¿¡
- POSIX ¾²·¹µå ±Ô¾àÀ» ¿ÏÀüÈ÷ ±¸ÇöÇÑ ¾ÆÅ°ÅØÃĶó¸é ¸ðµÎ
- »ç¿ë°¡´ÉÇÏÁö¸¸, (2.5 ÀÌÈÄ) Solaris¿¡¼­¸¸ ±×°Íµµ ƯÁ¤
- ±¸¼º¿¡¼­¸¸ µ¿ÀÛÇÏ´Â µíÇÏ´Ù. ÀÌ ¹æ¹ýÀ» ½ÃµµÇغ»´Ù¸é
- ¼­¹ö°¡ ¸ØÃç¼­ ÀÀ´äÀ» ¾ÈÇÏ´ÂÁö »ìÆìºÁ¾ß ÇÑ´Ù. Á¤Àû
- ³»¿ë¸¸ ¼­ºñ½ºÇÏ´Â ¼­¹ö´Â Àß µ¿ÀÛÇÏ´Â °Í °°´Ù.</p>
- </dd>
-
- <dt><code>AcceptMutex posixsem</code></dt>
-
- <dd>
- <p>(2.0°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÑ´Ù.
- mutex¸¦ °¡Áø ÇÁ·Î¼¼½ºÀÇ ¾²·¹µå°¡ Á״´ٸé(segfault)
- ¼¼¸¶Æ÷¾î ¼ÒÀ¯±ÇÀÌ È¸º¹µÇÁö ¾Ê¾Æ¼­ À¥¼­¹ö°¡ ¸ØÃá´Ù.</p>
- </dd>
-
- </dl>
-
- <p>½Ã½ºÅÛ¿¡ À§ ¸ñ·Ï¿¡ ¾ø´Â Á÷·ÄÈ­(serialization) ¹æ¹ýÀÌ
- ÀÖ´Ù¸é ±× ¹æ¹ýÀ» »ç¿ëÇÏ´Â Äڵ带 APR¿¡ Ãß°¡ÇÒ °¡Ä¡°¡ ÀÖ´Ù.</p>
-
- <p>°í·Á´Â ÇغÃÁö¸¸ ±¸ÇöÇÏÁö¾ÊÀº ´Ù¸¥ ¹æ¹ýÀº ºÎºÐÀûÀ¸·Î
- ¹Ýº¹¹®À» Á÷·ÄÈ­ÇÏ´Â ¹æ¹ýÀÌ´Ù. Áï, ÇÁ·Î¼¼¼­¸¦ ¸î°³¸¸ µé¿©º¸³»´Â
- °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¿©·¯ ÀÚ½ÄÀ» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö À־
- Á÷·ÄÈ­¶§¹®¿¡ Àüü ´ë¿ªÆøÀ» È°¿ëÇÏÁö ¸øÇÏ´Â ´ÙÁßÇÁ·Î¼¼¼­
- ÄÄÇ»ÅÍ¿¡¼­¸¸ °ü½ÉÀ» °¡Á®º¼ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î »ìÆ캼 ºÎºÐÀÌÁö¸¸,
- ¸Å¿ì º´·ÄÈ­µÈ À¥¼­¹ö°¡ ÈçÇÏÁö ¾Ê¾Æ¼­ ¿ì¼±¼øÀ§°¡ ³·´Ù.</p>
-
- <p>ÃÖ»óÀÇ ¼º´ÉÀ» ¾ò±âÀ§Çؼ­´Â ¿©·¯ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ¹®À» »ç¿ëÇÏÁö ¾Ê´Â
- °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. ±×·¯³ª °è¼Ó ¼³¸íÇÑ´Ù.</p>
-
-
-
- <h3>accept Á÷·ÄÈ­ - ¼ÒÄÏ ÇÑ°³</h3>
-
-
-
- <p>¾ÕÀÇ ¼³¸íÀº ´ÙÁß¼ÒÄÏ ¼­¹ö¿¡´Â ÁÁÁö¸¸, ¼ÒÄÏÀÌ ÇÑ°³ÀÎ
- ¼­¹ö´Â ¾î¶²°¡? ¿¬°áÀÌ µµÂøÇÒ¶§±îÁö ¸ðµç ÀÚ½ÄÀÌ
- <code>accept(2)</code>¿¡¼­ ¸ØÃçÀֱ⶧¹®¿¡ ÀÌ·Ð»ó °°Àº
- ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê°í, °í°¥ ¹®Á¦µµ ¾ø´Ù. ±×·¯³ª ½ÇÁ¦·Î´Â
- ¾Õ¿¡¼­ ¸»ÇÑ ´ë±âÇÏÁö ¾Ê´Â (non-blocking) ¹æ¹ý¿¡¼­ ¹ß»ýÇÏ´Â
- "°øȸÀü(spinning)" Çö»óÀ» °¨Ãß°í ÀÖ´Ù. ´ëºÎºÐÀÇ TCP ½ºÅÃÀº
- ¿¬°áÀÌ µµÂøÇϸé Ä¿³ÎÀÌ <code>accept</code>¿¡¼­ ¸ØÃçÀÖ´Â
- ¸ðµç ÀÚ½ÄÀ» ±ú¿ìµµ·Ï ±¸ÇöµÇÀÖ´Ù. ÇÁ·Î¼¼½ºÁß ÇÑ°³°¡ ¿¬°áÀ»
- ¾ò°í »ç¿ëÀÚ¿µ¿ªÀ¸·Î µ¹¾Æ°¡°í, ³ª¸ÓÁö´Â Ä¿³Î¿¡¼­ °øȸÀüÇÏ¿©
- ¿¬°áÀÌ ¾øÀ½À» ¹ß°ßÇÏ¸é ´Ù½Ã ÀáÀ» ÀÜ´Ù. »ç¿ëÀÚ¿µ¿ª Äڵ忡¼­´Â
- ÀÌ·± °øȸÀüÀ» ¾Ë ¼ö ¾øÁö¸¸, ºÐ¸íÈ÷ Á¸ÀçÇÑ´Ù. ±×·¡¼­ ´ÙÁß¼ÒÄÏÀÇ
- ´ë±âÇÏÁö ¾Ê´Â ¹æ¹ý°ú µ¿ÀÏÇÏ°Ô ºÎÇϸ¦ ³ôÀÌ´Â ºÒÇÊ¿äÇÑ ÇൿÀÌ
- ÀϾ´Ù.</p>
-
- <p>±×·¡¼­ ¿ì¸®´Â ¿©·¯ ¾ÆÅ°ÅØÃÄ¿¡¼­ ¼ÒÄÏÀÌ ÇÑ°³ÀÎ °æ¿ì¿¡µµ
- Á÷·ÄÈ­ÇÏ¸é ´õ "Àß" µ¿ÀÛÇÔÀ» ¹ß°ßÇß´Ù. ±×·¡¼­ °ÅÀÇ ´ëºÎºÐÀÇ
- °æ¿ì ±âº»ÀûÀ¸·Î Á÷·ÄÈ­¸¦ »ç¿ëÇÑ´Ù. ¸®´ª½º¿¡¼­ (Ä¿³Î 2.0.30,
- 128Mb ¸Þ¸ð¸®¿¡ µà¾ó Pentium pro) ½ÇÇèÇÑ °á°ú ¼ÒÄÏ ÇÑ°³¸¦
- Á÷·ÄÈ­Çϸé ÇÏÁö ¾ÊÀº °æ¿ì¿¡ ºñÇØ ÃÊ´ç ¿äûÀÌ 3% ¹Ì¸¸
- ÁÙ¾îµé¾ú´Ù. ±×·¯³ª Á÷·ÄÈ­¸¦ ÇÏÁö ¾ÊÀº °æ¿ì ¿äû´ç 100ms
- Áö¿¬ÀÌ ¹ß»ýÇß´Ù. ÀÌ Áö¿¬Àº ¾Æ¸¶µµ LAN¿¡¼­ ¹ß»ýÇÏ´Â ±ä
- ¿¬°á¼±¶§¹®ÀÏ °ÍÀÌ´Ù. ¼ÒÄÏÀÌ ÇÑ°³ÀÎ °æ¿ì Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸·Á¸é <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code>¸¦
- Á¤ÀÇÇÑ´Ù.</p>
-
-
-
- <h3>Close Áö¿¬(lingering)</h3>
-
-
-
- <p><a href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
- draft-ietf-http-connection-00.txt</a> 8Àý¿¡¼­ ¼³¸íÇϵíÀÌ
- <strong>¾ÈÁ¤ÀûÀÎ</strong> À¥¼­¹ö°¡ µÇ·Á¸é, Åë½ÅÀÇ ¾ç ¹æÇâÀ»
- µ¶¸³ÀûÀ¸·Î ´ÝÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù (TCP ¿¬°áÀº ½Ö¹æÇâÀÌ°í,
- ¹æÇâÀº ¼­·Î µ¶¸³ÀûÀÌ´Ù). ÀÌÁ¡À» ´Ù¸¥ ¼­¹ö¿¡¼­´Â ÀÚÁÖ
- °£°úÇÏÁö¸¸, ¾ÆÆÄÄ¡´Â 1.2ºÎÅÍ Á¤È®È÷ ±¸ÇöÇØ¿Ô´Ù.</p>
-
- <p>ÀÌ ±â´ÉÀ» ºÎÁÖÀÇÇÏ°Ô ¾ÆÆÄÄ¡¿¡ Ãß°¡ÇßÀ»¶§ ¿©·¯ À¯´Ð½º
- ¹öÀü¿¡¼­ ¸¹Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù. TCP ±Ô¾àÀº
- <code>FIN_WAIT_2</code>¿¡ ŸÀӾƿôÀÌ ÀÖ´Ù°í Á¤ÇÏÁö ¾Ê¾ÒÁö¸¸,
- ±ÝÁöÇÏÁöµµ ¾Ê¾Ò´Ù. ŸÀӾƿôÀÌ ¾ø´Â ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡ 1.2´Â
- ¸¹Àº ¼ÒÄÏÀ» ¿µ¿øÈ÷ <code>FIN_WAIT_2</code> »óÅ·Π¸¸µé¾ú´Ù.
- ¸¹Àº °æ¿ì ÀÌ ¹®Á¦´Â Á¦Àۻ簡 Á¦°øÇÏ´Â ÃֽŠTCP/IP ÆÐÄ¡¸¦
- Àû¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Á¦Àۻ簡 ÆÐÄ¡¸¦ ¹ßÇ¥ÇÏÁö
- ¾Ê´Â °æ¿ì°¡ (<em>Áï,</em> SunOS4 -- ¼Ò½º ¶óÀ̼±½º°¡ ÀÖ´Â
- »ç¶÷Àº Á÷Á¢ ÆÐÄ¡ÇÒ ¼ö ÀÖÁö¸¸) Àֱ⶧¹®¿¡ ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
- ¾Ê±â·Î °áÁ¤Çß´Ù.</p>
-
- <p>¹æ¹ýÀº µÎ°¡Áö´Ù. Çϳª´Â ¼ÒÄÏ ¿É¼Ç <code>SO_LINGER</code>¸¦
- »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ±×·¯³ª ºÒÇàÈ÷µµ ´ëºÎºÐÀÇ TCP/IP ½ºÅÃÀº
- ÀÌ ¿É¼ÇÀ» ¿Ã¹Ù·Î ±¸ÇöÇÏÁö ¾Ê¾Ò´Ù. ¿Ã¹Ù·Î ±¸ÇöÇÑ ½ºÅÿ¡¼­
- Á¶Â÷µµ (<em>Áï,</em> ¸®´ª½º 2.0.31) ÀÌ ¹æ¹ýÀº ´ÙÀ½ ¹æ¹ýº¸´Ù
- ´õ cpu¸¦ Àâ¾Æ¸Ô´Â´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â º¸Åë (<code>http_main.c</code>¿¡ ÀÖ´Â)
- <code>lingering_close</code>¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â
- ´ëÃæ ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><p><code>
- void lingering_close (int s)<br />
- {<br />
- <span class="indent">
- char junk_buffer[2048];<br />
- <br />
- /* shutdown the sending side */<br />
- shutdown (s, 1);<br />
- <br />
- signal (SIGALRM, lingering_death);<br />
- alarm (30);<br />
- <br />
- for (;;) {<br />
- <span class="indent">
- select (s for reading, 2 second timeout);<br />
- if (error) break;<br />
- if (s is ready for reading) {<br />
- <span class="indent">
- if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {<br />
- <span class="indent">
- break;<br />
- </span>
- }<br />
- /* just toss away whatever is here */<br />
- </span>
- }<br />
- </span>
- }<br />
- <br />
- close (s);<br />
- </span>
- }
- </code></p></div>
-
- <p>ÀÌ ÄÚµå´Â ¿¬°áÀ» ´ÝÀ»¶§ ´õ CPU¸¦ »ç¿ëÇÏÁö¸¸, ¾ÈÁ¤ÀûÀÎ
- ±¸ÇöÀ» À§ÇØ ÇÊ¿äÇÏ´Ù. HTTP/1.1ÀÌ ´õ ³Î¸® ÆÛÁö°í ¸ðµç ¿¬°áÀ»
- À¯ÁöÇÑ´Ù¸é(persistent), ¿¬°áÀ» ¹Þ´Â ºñ¿ëÀº ¿©·¯ ¿äûÀ»
- ó¸®Çϸ鼭 »ó¼âµÉ °ÍÀÌ´Ù. À§ÇèÇÏ°Ôµµ
- <code>NO_LINGCLOSE</code>¸¦ Á¤ÀÇÇÏ¿© ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
- ¾ÊÀ» ¼ö ÀÖÁö¸¸, Àý´ë·Î ±ÇÇÏÁö ¾Ê´Â´Ù. ƯÈ÷ HTTP/1.1
- ÆÄÀÌÇÁ¶óÀÎ <span class="transnote">(<em>¿ªÁÖ;</em> ¿¬°áÀ¯Áö »óÅ¿¡¼­ ÀÀ´äÀ» ±â´Ù¸®Áö
- ¾Ê°í ¿©·¯ ¿äûÀ» º¸³»´Â ±â¼ú)</span> ¿¬°áÀ¯Áö¿¡´Â
- <code>lingering_close</code>°¡ ÇʼöÀûÀÌ´Ù (±×¸®°í <a href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
- ÆÄÀÌÇÁ¶óÀÎ ¿¬°áÀÌ ´õ ºü¸£±â¶§¹®¿¡</a> »ç¿ëÇÏ±æ ¹Ù¶ö °ÍÀÌ´Ù).</p>
-
-
-
- <h3>Scoreboard ÆÄÀÏ</h3>
-
-
-
- <p>¾ÆÆÄÄ¡ÀÇ ºÎ¸ð¿Í ÀÚ½ÄÀº scoreboard¶ó´Â °ÍÀ» ÅëÇØ ¼­·Î
- Åë½ÅÇÑ´Ù. ÀÌ»óÀûÀ¸·Î´Â scoreboard¸¦ °øÀ¯¸Þ¸ð¸®·Î ±¸ÇöÇؾß
- ÇÑ´Ù. ¿ì¸® °³¹ßÀÚ°¡ ÇØ´ç ¿î¿µÃ¼Á¦¿¡ Á¢±ÙÇÒ ¼ö Àְųª »ó¼¼ÇÑ
- Æ÷Æà °á°ú¸¦ ¹ÞÀº °æ¿ì º¸Åë °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù.
- ³ª¸ÓÁö´Â µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏÀ» »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù. µð½ºÅ©¿¡
- ÀÖ´Â ÆÄÀÏÀº ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁø´Ù (±â´Éµµ ´õ Àû´Ù).
- <code>src/main/conf.h</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃĸ¦
- ã¾Æ¼­ <code>USE_MMAP_SCOREBOARD</code> ȤÀº
- <code>USE_SHMGET_SCOREBOARD</code>ÀÎÁö È®ÀÎÇÑ´Ù. µÑÁß
- Çϳª¸¦ (°¢°¢ ÇÔ²² »ç¿ëÇÒ <code>HAVE_MMAP</code>À̳ª
- <code>HAVE_SHMGET</code>µµ °°ÀÌ) Á¤ÀÇÇÏ¸é °øÀ¯¸Þ¸ð¸® Äڵ带
- »ç¿ëÇÑ´Ù. ½Ã½ºÅÛÀÌ ´Ù¸¥ Á¾·ùÀÇ °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù¸é
- <code>src/main/http_main.c</code> ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© ¾ÆÆÄÄ¡¿¡¼­
- °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÈÅ(hook)À» Ãß°¡Ç϶ó. (¶ÇÇÑ
- ÆÐÄ¡¸¦ ¿ì¸®¿¡°Ô º¸³»ÁÖ±æ ¹Ù¶õ´Ù.)</p>
-
- <div class="note">¿ª»çÀû ¼³¸í: ¾ÆÆÄÄ¡ÀÇ ¸®´ª½º ¹öÀüÀº ¾ÆÆÄÄ¡ 1.2 ¹öÀüºÎÅÍ
- °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇϱ⠽ÃÀÛÇß´Ù. ¸®´ª½º¿¡¼­ Ãʱ⠾ÆÆÄÄ¡
- ¹öÀüÀÌ ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁ³±â ¶§¹®ÀÌ´Ù.</div>
-
-
-
- <h3>DYNAMIC_MODULE_LIMIT</h3>
-
-
-
- <p>¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÌÁö ¾Ê´Â´Ù¸é (°¡´ÉÇÑ Á¶±ÝÀ̶óµµ
- ¼º´ÉÀ» ³ôÀ̱âÀ§ÇØ ÀÌ ±ÛÀ» ÀÐ´Â´Ù¸é ¾Æ¸¶µµ ¸ðµâÀ» µ¿ÀûÀ¸·Î
- ÀоîµéÀÌÁö ¾ÊÀ» °ÍÀÌ´Ù), ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§
- <code>-DDYNAMIC_MODULE_LIMIT=0</code>À» Ãß°¡ÇÑ´Ù. ±×·¯¸é
- ¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀ̱âÀ§ÇØ ÇÒ´çÇÏ´Â ¸Þ¸ð¸®¸¦ Àý¾àÇÑ´Ù.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="trace" id="trace">ºÎ·Ï: ½Ã½ºÅÛÈ£Ãâ ±â·ÏÀ» ÀÚ¼¼È÷ ºÐ¼®Çϱâ</a></h2>
-
-
-
- <p>´ÙÀ½Àº Solaris 8¿¡¼­ worker MPMÀ» »ç¿ëÇÑ ¾ÆÆÄÄ¡ 2.0.38ÀÇ
- ½Ã½ºÅÛÈ£Ãâ ±â·Ï(trace)ÀÌ´Ù. ¾Æ·¡ ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ±â·ÏÀ»
- ¾ò¾ú´Ù:</p>
-
- <div class="example"><p><code>
- truss -l -p <var>httpd_child_pid</var>.
- </code></p></div>
-
- <p><code>-l</code> ¿É¼ÇÀ» »ç¿ëÇϸé truss´Â ½Ã½ºÅÛÈ£ÃâÀ»
- ÇÏ´Â LWP (lightweight process, °æ·®±Þ ÇÁ·Î¼¼½º--SolarisÀÇ
- Ä¿³Î¼öÁØ ¾²·¹µå) ID¸¦ °°ÀÌ ±â·ÏÇÑ´Ù.</p>
-
- <p>´Ù¸¥ ½Ã½ºÅÛ¿¡´Â <code>strace</code>, <code>ktrace</code>,
- <code>par</code> °°Àº ½Ã½ºÅÛÈ£Ãâ ÃßÀû µµ±¸°¡ ÀÖ´Ù. °á°ú´Â
- ºñ½ÁÇÏ´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®´Â À¥¼­¹ö¿¡°Ô Å©±â°¡ 10KBÀÎ Á¤Àû ÆÄÀÏÀ» ¿äûÇÑ´Ù.
- Á¤ÀûÀÎ ÆÄÀÏÀ» ¿äûÇÏÁö ¾Ê°Å³ª ³»¿ëÇù»óÇÏ´Â ¿äûÀ» ÇÑ °æ¿ì
- ±â·ÏÀÌ ¸Å¿ì ´Ù¸£´Ù (¶§·Î´Â ¸Å¿ì ¾Ë¾Æº¸±â Èûµé´Ù).</p>
-
- <div class="example"><pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
-/67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre></div>
-
- <p>À§¿¡¼­ ¿¬°á´ë±â(listener) ¾²·¹µå°¡ LWP #67¿¡¼­ ½ÇÇàµÊÀ»
- ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <div class="note"><code>accept(2)</code> Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇ϶ó.
- ¿©·¯ Æ÷Æ®¸¦ ±â´Ù¸®Áö¾Ê´Â °æ¿ì ÀÌ Ç÷¡ÆûÀÇ worker MPMÀº
- ±âº»ÀûÀ¸·Î Á÷·ÄÈ­ÇÏÁö ¾ÊÀº accept¸¦ »ç¿ëÇÑ´Ù.</div>
-
- <div class="example"><pre>/65: lwp_park(0x00000000, 0) = 0
-/67: lwp_unpark(65, 1) = 0</pre></div>
-
- <p>¿¬°áÀº ¹Þ¾ÆµéÀÌ°í(accept) ¿¬°á´ë±â ¾²·¹µå´Â
- worker ¾²·¹µå¸¦ ±ú¿ö¼­ ¿äûÀ» ó¸®ÇÏ°Ô ÇÑ´Ù. ¾Æ·¡ ±â·Ï¿¡¼­
- ¿äûÀ» ó¸®ÇÏ´Â worker ¾²·¹µå°¡ LWP #65ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre></div>
-
- <p>°¡»óÈ£½ºÆ®¸¦ ±¸ÇöÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â ¿¬°áÀ» ¹Þ¾ÆµéÀÎ
- Áö¿ª(local) ¼ÒÄÏ ÁÖ¼Ò¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. (°¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏÁö
- ¾Ê°Å³ª <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- Áö½Ã¾î¿¡ ¿ÍÀϵåÄ«µå ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì µî) ¸¹Àº °æ¿ì
- ÀÌ È£ÃâÀ» ¾ø¾Ù ¼ö ÀÖ´Ù. ±×·¯³ª ¾ÆÁ÷ ÀÌ·± ÃÖÀûÈ­ ÀÛ¾÷ÀÌ
- ¾ÈµÇÀÖ´Ù. </p>
-
- <div class="example"><pre>/65: brk(0x002170E8) = 0
-/65: brk(0x002190E8) = 0</pre></div>
-
- <p><code>brk(2)</code> È£ÃâÀº Èü(heap)¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù.
- À¥¼­¹ö´Â ´ëºÎºÐÀÇ ¿äû 󸮽à ÀÚü ¸Þ¸ð¸®
- ÇÒ´çÀÚ(<code>apr_pool</code>°ú <code>apr_bucket_alloc</code>)¸¦
- »ç¿ëÇϱ⶧¹®¿¡ ½Ã½ºÅÛÈ£Ãâ ±â·Ï¿¡¼­ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» º¸±â°¡
- µå¹°´Ù. ÀÌ ±â·Ï¿¡¼­ À¥¼­¹ö´Â ½ÃÀÛÇÏÀÚ¸¶ÀÚ ÀÚü ¸Þ¸ð¸® ÇÒ´çÀÚ°¡
- »ç¿ëÇÒ ¸Þ¸ð¸®ºí·ÏÀ» ¾ò±âÀ§ÇØ <code>malloc(3)</code>À» È£ÃâÇÑ´Ù.</p>
-
- <div class="example"><pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
-/65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
-/65: fcntl(9, F_SETFL, 0x00000082) = 0</pre></div>
-
- <p>´ÙÀ½ worker ¾²·¹µå´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á(ÆÄÀϱâ¼úÀÚ 9)À»
- ´ë±â¾ÈÇÔ(non-blocking) »óÅ·Π¹Ù²Û´Ù. <code>setsockopt(2)</code>¿Í
- <code>getsockopt(2)</code> È£ÃâÀº SolarisÀÇ libc°¡ ¼ÒÄÏ¿¡
- ´ëÇÑ <code>fcntl(2)</code>À» ¾î¶»°Ô ó¸®ÇÏ´ÂÁö º¸¿©ÁØ´Ù.</p>
-
- <div class="example"><pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre></div>
-
- <p>worker ¾²·¹µå´Â Ŭ¶óÀ̾ðÆ®·Î ºÎÅÍ ¿äûÀ» Àд´Ù.</p>
-
- <div class="example"><pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
-/65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre></div>
-
- <p>À¥¼­¹ö ¼³Á¤Àº <code>Options FollowSymLinks</code>¿Í
- <code>AllowOverride None</code>ÀÌ´Ù. ±×·¡¼­ ¿äûÇÑ ÆÄÀÏ°æ·ÎÀÇ
- °¢ µð·ºÅ丮¿¡ ´ëÇØ <code>lstat(2)</code>Çϰųª
- <code>.htaccess</code> ÆÄÀÏÀ» °Ë»çÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÆÄÀÏÀ»
- °Ë»çÇϱâÀ§ÇØ, 1) ÆÄÀÏÀÌ ÀÖ´ÂÁö, 2) µð·ºÅ丮°¡ ¾Æ´Ñ ÀϹÝÆÄÀÏÀÎÁö,
- <code>stat(2)</code> È£Ã⸸ ÇÏ¸é µÈ´Ù.</p>
-
- <div class="example"><pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre></div>
-
- <p>ÀÌ °æ¿ì À¥¼­¹ö´Â ÇѹøÀÇ <code>sendfilev(2)</code> ½Ã½ºÅÛÈ£Ãâ·Î
- HTTP ÀÀ´äÇì´õ¿Í ¿äûÇÑ ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Ù. Sendfile Áö¿ø¿©ºÎ´Â
- ¿î¿µÃ¼Á¦¸¶´Ù ´Ù¸£´Ù. ´Ù¸¥ ½Ã½ºÅÛÀ̶ó¸é <code>sendfile(2)</code>À»
- È£ÃâÇϱâ Àü¿¡ Çì´õ¸¦ º¸³»±âÀ§ÇØ <code>write(2)</code>³ª
- <code>writev(2)</code> È£ÃâÀ» ÇÑ´Ù.</p>
-
- <div class="example"><pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre></div>
-
- <p><code>write(2)</code> È£ÃâÀº Á¢±Ù·Î±×(access log)¿¡ ¿äûÀ»
- ±â·ÏÇÑ´Ù. ÀÌ ±â·Ï¿¡ <code>time(2)</code> È£ÃâÀÌ ¾øÀ½À» ÁÖ¸ñÇ϶ó.
- ¾ÆÆÄÄ¡ 1.3°ú ´Þ¸® ¾ÆÆÄÄ¡ 2.0Àº ½Ã°£À» ¾Ë±âÀ§ÇØ
- <code>gettimeofday(3)</code>¸¦ »ç¿ëÇÑ´Ù.
- <code>gettimeofday</code>¸¦ ÃÖÀûÈ­ÇÑ ¸®´ª½º¿Í Solaris °°Àº
- ¸î¸î ¿î¿µÃ¼Á¦¿¡¼­´Â ÀϹÝÀûÀÎ ½Ã½ºÅÛÈ£Ã⠺δãÀÌ ¾ø´Ù.</p>
-
- <div class="example"><pre>/65: shutdown(9, 1, 1) = 0
-/65: poll(0xFAF7B980, 1, 2000) = 1
-/65: read(9, 0xFAF7BC20, 512) = 0
-/65: close(9) = 0</pre></div>
-
- <p>worker ¾²·¹µå´Â ¿¬°áÀ» Áö¿¬´Ý±â(lingering close)ÇÑ´Ù.</p>
-
- <div class="example"><pre>/65: close(10) = 0
-/65: lwp_park(0x00000000, 0) (sleeping...)</pre></div>
-
- <p>¸¶Áö¸·À¸·Î worker ¾²·¹µå´Â ¹æ±Ý Àü¼ÛÇÑ ÆÄÀÏÀ» ´Ý°í,
- ¿¬°á´ë±â(listener) ¾²·¹µå°¡ ´Ù¸¥ ¿¬°áÀ» ÇÒ´çÇÒ ¶§±îÁö
- Á¤ÁöÇÑ´Ù.</p>
-
- <div class="example"><pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre></div>
-
- <p>±×µ¿¾È ¿¬°á´ë±â ¾²·¹µå´Â ¿¬°áÀ» (¸ðµç worker°¡ ÀÛ¾÷ÁßÀ̸é
- ¿¬°á´ë±â ¾²·¹µå¸¦ ¸ØÃß´Â worker MPMÀÇ È帧Á¦¾î ±â´É¿¡ µû¶ó)
- worker ¾²·¹µå¿¡ ÇÒ´çÇÏÀÚ¸¶ÀÚ ´Ù¸¥ ¿¬°áÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù.
- ÀÌ ±â·Ï¿¡´Â ³ª¿ÀÁö ¾ÊÁö¸¸, worker ¾²·¹µå°¡ ¹æ±Ý ¹ÞÀº ¿¬°áÀ»
- ó¸®ÇÏ´Â µ¿¾È ´ÙÀ½ <code>accept(2)</code>°¡ (¿äûÀÌ ¸Å¿ì
- ¸¹Àº °æ¿ì Ç×»ó) ÀϾ ¼ö ÀÖ´Ù.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/perf-tuning.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/perf-tuning.xml b/docs/manual/misc/perf-tuning.xml
deleted file mode 100644
index f3dd5b1961..0000000000
--- a/docs/manual/misc/perf-tuning.xml
+++ /dev/null
@@ -1,1112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.17 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="perf-tuning.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>Apache Performance Tuning</title>
-
- <summary>
-
- <p>Apache 2.0 is a general-purpose webserver, designed to
- provide a balance of flexibility, portability, and performance.
- Although it has not been designed specifically to set benchmark
- records, Apache 2.0 is capable of high performance in many
- real-world situations.</p>
-
- <p>Compared to Apache 1.3, release 2.0 contains many additional
- optimizations to increase throughput and scalability. Most of
- these improvements are enabled by default. However, there are
- compile-time and run-time configuration choices that can
- significantly affect performance. This document describes the
- options that a server administrator can configure to tune the
- performance of an Apache 2.0 installation. Some of these
- configuration options enable the httpd to better take advantage
- of the capabilities of the hardware and OS, while others allow
- the administrator to trade functionality for speed.</p>
-
- </summary>
-
- <section id="hardware">
-
- <title>Hardware and Operating System Issues</title>
-
- <p>The single biggest hardware issue affecting webserver
- performance is RAM. A webserver should never ever have to swap,
- as swapping increases the latency of each request beyond a point
- that users consider "fast enough". This causes users to hit
- stop and reload, further increasing the load. You can, and
- should, control the <directive module="mpm_common"
- >MaxClients</directive> setting so that your server
- does not spawn so many children it starts swapping. This procedure
- for doing this is simple: determine the size of your average Apache
- process, by looking at your process list via a tool such as
- <code>top</code>, and divide this into your total available memory,
- leaving some room for other processes.</p>
-
- <p>Beyond that the rest is mundane: get a fast enough CPU, a
- fast enough network card, and fast enough disks, where "fast
- enough" is something that needs to be determined by
- experimentation.</p>
-
- <p>Operating system choice is largely a matter of local
- concerns. But some guidelines that have proven generally
- useful are:</p>
-
- <ul>
- <li>
- <p>Run the latest stable release and patchlevel of the
- operating system that you choose. Many OS suppliers have
- introduced significant performance improvements to their
- TCP stacks and thread libraries in recent years.</p>
- </li>
-
- <li>
- <p>If your OS supports a <code>sendfile(2)</code> system
- call, make sure you install the release and/or patches
- needed to enable it. (With Linux, for example, this means
- using Linux 2.4 or later. For early releases of Solaris 8,
- you may need to apply a patch.) On systems where it is
- available, <code>sendfile</code> enables Apache 2 to deliver
- static content faster and with lower CPU utilization.</p>
- </li>
- </ul>
-
- </section>
-
- <section id="runtime">
-
- <title>Run-Time Configuration Issues</title>
-
- <related>
- <modulelist>
- <module>mod_dir</module>
- <module>mpm_common</module>
- <module>mod_status</module>
- </modulelist>
- <directivelist>
- <directive module="core">AllowOverride</directive>
- <directive module="mod_dir">DirectoryIndex</directive>
- <directive module="core">HostnameLookups</directive>
- <directive module="core">EnableMMAP</directive>
- <directive module="core">EnableSendfile</directive>
- <directive module="core">KeepAliveTimeout</directive>
- <directive module="prefork">MaxSpareServers</directive>
- <directive module="prefork">MinSpareServers</directive>
- <directive module="core">Options</directive>
- <directive module="mpm_common">StartServers</directive>
- </directivelist>
- </related>
-
- <section id="dns">
-
- <title>HostnameLookups and other DNS considerations</title>
-
- <p>Prior to Apache 1.3, <directive module="core"
- >HostnameLookups</directive> defaulted to <code>On</code>.
- This adds latency to every request because it requires a
- DNS lookup to complete before the request is finished. In
- Apache 1.3 this setting defaults to <code>Off</code>. If you need
- to have addresses in your log files resolved to hostnames, use the
- <a href="../programs/logresolve.html"><code>logresolve</code></a>
- program that comes with Apache, on one of the numerous log
- reporting packages which are available.</p>
-
- <p>It is recommended that you do this sort of postprocessing of
- your log files on some machine other than the production web
- server machine, in order that this activity not adversely affect
- server performance.</p>
-
- <p>If you use any <code><directive module="mod_access">Allow</directive>
- from domain</code> or <code><directive
- module="mod_access">Deny</directive> from domain</code>
- directives (i.e., using a hostname, or a domain name, rather than
- an IP address) then you will pay for
- a double reverse DNS lookup (a reverse, followed by a forward
- to make sure that the reverse is not being spoofed). For best
- performance, therefore, use IP addresses, rather than names, when
- using these directives, if possible.</p>
-
- <p>Note that it's possible to scope the directives, such as
- within a <code>&lt;Location /server-status&gt;</code> section.
- In this case the DNS lookups are only performed on requests
- matching the criteria. Here's an example which disables lookups
- except for <code>.html</code> and <code>.cgi</code> files:</p>
-
- <example>
- HostnameLookups off<br />
- &lt;Files ~ "\.(html|cgi)$"&gt;<br />
- <indent>
- HostnameLookups on<br />
- </indent>
- &lt;/Files&gt;
- </example>
-
- <p>But even still, if you just need DNS names in some CGIs you
- could consider doing the <code>gethostbyname</code> call in the
- specific CGIs that need it.</p>
-
- </section>
-
- <section id="symlinks">
-
- <title>FollowSymLinks and SymLinksIfOwnerMatch</title>
-
- <p>Wherever in your URL-space you do not have an <code>Options
- FollowSymLinks</code>, or you do have an <code>Options
- SymLinksIfOwnerMatch</code> Apache will have to issue extra
- system calls to check up on symlinks. One extra call per
- filename component. For example, if you had:</p>
-
- <example>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <indent>
- Options SymLinksIfOwnerMatch<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>and a request is made for the URI <code>/index.html</code>.
- Then Apache will perform <code>lstat(2)</code> on
- <code>/www</code>, <code>/www/htdocs</code>, and
- <code>/www/htdocs/index.html</code>. The results of these
- <code>lstats</code> are never cached, so they will occur on
- every single request. If you really desire the symlinks
- security checking you can do something like this:</p>
-
- <example>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <indent>
- Options FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /www/htdocs&gt;<br />
- <indent>
- Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>This at least avoids the extra checks for the
- <directive module="core">DocumentRoot</directive> path.
- Note that you'll need to add similar sections if you
- have any <directive module="mod_alias">Alias</directive> or
- <directive module="mod_rewrite">RewriteRule</directive> paths
- outside of your document root. For highest performance,
- and no symlink protection, set <code>FollowSymLinks</code>
- everywhere, and never set <code>SymLinksIfOwnerMatch</code>.</p>
-
- </section>
-
- <section id="htacess">
-
- <title>AllowOverride</title>
-
- <p>Wherever in your URL-space you allow overrides (typically
- <code>.htaccess</code> files) Apache will attempt to open
- <code>.htaccess</code> for each filename component. For
- example,</p>
-
- <example>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride all<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>and a request is made for the URI <code>/index.html</code>.
- Then Apache will attempt to open <code>/.htaccess</code>,
- <code>/www/.htaccess</code>, and
- <code>/www/htdocs/.htaccess</code>. The solutions are similar
- to the previous case of <code>Options FollowSymLinks</code>.
- For highest performance use <code>AllowOverride None</code>
- everywhere in your filesystem.</p>
-
- </section>
-
- <section id="negotiation">
-
- <title>Negotiation</title>
-
- <p>If at all possible, avoid content-negotiation if you're
- really interested in every last ounce of performance. In
- practice the benefits of negotiation outweigh the performance
- penalties. There's one case where you can speed up the server.
- Instead of using a wildcard such as:</p>
-
- <example>
- DirectoryIndex index
- </example>
-
- <p>Use a complete list of options:</p>
-
- <example>
- DirectoryIndex index.cgi index.pl index.shtml index.html
- </example>
-
- <p>where you list the most common choice first.</p>
-
- <p>Also note that explicitly creating a <code>type-map</code>
- file provides better performance than using
- <code>MultiViews</code>, as the necessary information can be
- determined by reading this single file, rather than having to
- scan the directory for files.</p>
-
- <p>If your site needs content negotiation consider using
- <code>type-map</code> files, rather than the <code>Options
- MultiViews</code> directive to accomplish the negotiation. See the
- <a href="../content-negotiation.html">Content Negotiation</a>
- documentation for a full discussion of the methods of negotiation,
- and instructions for creating <code>type-map</code> files.</p>
-
- </section>
-
- <section>
-
- <title>Memory-mapping</title>
-
- <p>In situations where Apache 2.0 needs to look at the contents
- of a file being delivered--for example, when doing server-side-include
- processing--it normally memory-maps the file if the OS supports
- some form of <code>mmap(2)</code>.</p>
-
- <p>On some platforms, this memory-mapping improves performance.
- However, there are cases where memory-mapping can hurt the performance
- or even the stability of the httpd:</p>
-
- <ul>
- <li>
- <p>On some operating systems, <code>mmap</code> does not scale
- as well as <code>read(2)</code> when the number of CPUs increases.
- On multiprocessor Solaris servers, for example, Apache 2.0 sometimes
- delivers server-parsed files faster when <code>mmap</code> is disabled.</p>
- </li>
-
- <li>
- <p>If you memory-map a file located on an NFS-mounted filesystem
- and a process on another NFS client machine deletes or truncates
- the file, your process may get a bus error the next time it tries
- to access the mapped file content.</p>
- </li>
- </ul>
-
- <p>For installations where either of these factors applies, you
- should use <code>EnableMMAP off</code> to disable the memory-mapping
- of delivered files. (Note: This directive can be overridden on
- a per-directory basis.)</p>
-
- </section>
-
- <section>
-
- <title>Sendfile</title>
-
- <p>In situations where Apache 2.0 can ignore the contents of the file
- to be delivered -- for example, when serving static file content --
- it normally uses the kernel sendfile support the file if the OS
- supports the <code>sendfile(2)</code> operation.</p>
-
- <p>On most platforms, using sendfile improves performance by eliminating
- separate read and send mechanics. However, there are cases where using
- sendfile can harm the stability of the httpd:</p>
-
- <ul>
- <li>
- <p>Some platforms may have broken sendfile support that the build
- system did not detect, especially if the binaries were built on
- another box and moved to such a machine with broken sendfile support.</p>
- </li>
- <li>
- <p>With an NFS-mounted files, the kernel may be unable
- to reliably serve the network file through it's own cache.</p>
- </li>
- </ul>
-
- <p>For installations where either of these factors applies, you
- should use <code>EnableSendfile off</code> to disable sendfile
- delivery of file contents. (Note: This directive can be overridden
- on a per-directory basis.)</p>
-
- </section>
-
- <section id="process">
-
- <title>Process Creation</title>
-
- <p>Prior to Apache 1.3 the <directive module="prefork"
- >MinSpareServers</directive>, <directive module="prefork"
- >MaxSpareServers</directive>, and <directive module="mpm_common"
- >StartServers</directive> settings all had drastic effects on
- benchmark results. In particular, Apache required a "ramp-up"
- period in order to reach a number of children sufficient to serve
- the load being applied. After the initial spawning of
- <directive module="mpm_common">StartServers</directive> children,
- only one child per second would be created to satisfy the
- <directive module="prefork">MinSpareServers</directive>
- setting. So a server being accessed by 100 simultaneous
- clients, using the default <directive module="mpm_common"
- >StartServers</directive> of <code>5</code> would take on
- the order 95 seconds to spawn enough children to handle
- the load. This works fine in practice on real-life servers,
- because they aren't restarted frequently. But does really
- poorly on benchmarks which might only run for ten minutes.</p>
-
- <p>The one-per-second rule was implemented in an effort to
- avoid swamping the machine with the startup of new children. If
- the machine is busy spawning children it can't service
- requests. But it has such a drastic effect on the perceived
- performance of Apache that it had to be replaced. As of Apache
- 1.3, the code will relax the one-per-second rule. It will spawn
- one, wait a second, then spawn two, wait a second, then spawn
- four, and it will continue exponentially until it is spawning
- 32 children per second. It will stop whenever it satisfies the
- <directive module="prefork">MinSpareServers</directive>
- setting.</p>
-
- <p>This appears to be responsive enough that it's almost
- unnecessary to twiddle the <directive module="prefork"
- >MinSpareServers</directive>, <directive module="prefork"
- >MaxSpareServers</directive> and <directive module="mpm_common"
- >StartServers</directive> knobs. When more than 4 children are
- spawned per second, a message will be emitted to the
- <directive module="core">ErrorLog</directive>. If you
- see a lot of these errors then consider tuning these settings.
- Use the <module>mod_status</module> output as a guide.</p>
-
- <p>Related to process creation is process death induced by the
- <directive module="mpm_common">MaxRequestsPerChild</directive>
- setting. By default this is <code>0</code>,
- which means that there is no limit to the number of requests
- handled per child. If your configuration currently has this set
- to some very low number, such as <code>30</code>, you may want to bump this
- up significantly. If you are running SunOS or an old version of
- Solaris, limit this to <code>10000</code> or so because of memory leaks.</p>
-
- <p>When keep-alives are in use, children will be kept busy
- doing nothing waiting for more requests on the already open
- connection. The default <directive module="core"
- >KeepAliveTimeout</directive> of <code>15</code>
- seconds attempts to minimize this effect. The tradeoff here is
- between network bandwidth and server resources. In no event
- should you raise this above about <code>60</code> seconds, as <a
- href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
- most of the benefits are lost</a>.</p>
-
- </section>
-
- </section>
-
- <section id="compiletime">
-
- <title>Compile-Time Configuration Issues</title>
-
- <section>
-
- <title>Choosing an MPM</title>
-
- <p>Apache 2.x supports pluggable concurrency models, called
- <a href="../mpm.html">Multi-Processing Modules</a> (MPMs).
- When building Apache, you must choose an MPM to use. There
- are platform-specific MPMs for some platforms:
- <module>beos</module>, <module>mpm_netware</module>,
- <module>mpmt_os2</module>, and <module>mpm_winnt</module>. For
- general Unix-type systems, there are several MPMs from which
- to choose. The choice of MPM can affect the speed and scalability
- of the httpd:</p>
-
- <ul>
-
- <li>The <module>worker</module> MPM uses multiple child
- processes with many threads each. Each thread handles
- one connection at a time. Worker generally is a good
- choice for high-traffic servers because it has a smaller
- memory footprint than the prefork MPM.</li>
-
- <li>The <module>prefork</module> MPM uses multiple child
- processes with one thread each. Each process handles
- one connection at a time. On many systems, prefork is
- comparable in speed to worker, but it uses more memory.
- Prefork's threadless design has advantages over worker
- in some situations: it can be used with non-thread-safe
- third-party modules, and it is easier to debug on platforms
- with poor thread debugging support.</li>
-
- </ul>
-
- <p>For more information on these and other MPMs, please
- see the MPM <a href="../mpm.html">documentation</a>.</p>
-
- </section>
-
- <section id="modules">
-
- <title>Modules</title>
-
- <p>Since memory usage is such an important consideration in
- performance, you should attempt to eliminate modules that youare
- not actually using. If you have built the modules as <a
- href="../dso.html">DSOs</a>, eliminating modules is a simple
- matter of commenting out the associated <directive
- module="mod_so">LoadModule</directive> directive for that module.
- This allows you to experiment with removing modules, and seeing
- if your site still functions in their absense.</p>
-
- <p>If, on the other hand, you have modules statically linked
- into your Apache binary, you will need to recompile Apache in
- order to remove unwanted modules.</p>
-
- <p>An associated question that arises here is, of course, what
- modules you need, and which ones you don't. The answer here
- will, of course, vary from one web site to another. However, the
- <em>minimal</em> list of modules which you can get by with tends
- to include <module>mod_mime</module>, <module>mod_dir</module>,
- and <module>mod_log_config</module>. <code>mod_log_config</code> is,
- of course, optional, as you can run a web site without log
- files. This is, however, not recommended.</p>
-
- </section>
-
- <section>
-
- <title>Atomic Operations</title>
-
- <p>Some modules, such as <module>mod_cache</module> and
- recent development builds of the worker MPM, use APR's
- atomic API. This API provides atomic operations that can
- be used for lightweight thread synchronization.</p>
-
- <p>By default, APR implements these operations using the
- most efficient mechanism available on each target
- OS/CPU platform. Many modern CPUs, for example, have
- an instruction that does an atomic compare-and-swap (CAS)
- operation in hardware. On some platforms, however, APR
- defaults to a slower, mutex-based implementation of the
- atomic API in order to ensure compatibility with older
- CPU models that lack such instructions. If you are
- building Apache for one of these platforms, and you plan
- to run only on newer CPUs, you can select a faster atomic
- implementation at build time by configuring Apache with
- the <code>--enable-nonportable-atomics</code> option:</p>
-
- <example>
- ./buildconf<br />
- ./configure --with-mpm=worker --enable-nonportable-atomics=yes
- </example>
-
- <p>The <code>--enable-nonportable-atomics</code> option is
- relevant for the following platforms:</p>
-
- <ul>
-
- <li>Solaris on SPARC<br />
- By default, APR uses mutex-based atomics on Solaris/SPARC.
- If you configure with <code>--enable-nonportable-atomics</code>,
- however, APR generates code that uses a SPARC v8plus opcode for
- fast hardware compare-and-swap. If you configure Apache with
- this option, the atomic operations will be more efficient
- (allowing for lower CPU utilization and higher concurrency),
- but the resulting executable will run only on UltraSPARC
- chips.
- </li>
-
- <li>Linux on x86<br />
- By default, APR uses mutex-based atomics on Linux. If you
- configure with <code>--enable-nonportable-atomics</code>,
- however, APR generates code that uses a 486 opcode for fast
- hardware compare-and-swap. This will result in more efficient
- atomic operations, but the resulting executable will run only
- on 486 and later chips (and not on 386).
- </li>
-
- </ul>
-
- </section>
-
- <section>
-
- <title>mod_status and ExtendedStatus On</title>
-
- <p>If you include <module>mod_status</module> and you also set
- <code>ExtendedStatus On</code> when building and running
- Apache, then on every request Apache will perform two calls to
- <code>gettimeofday(2)</code> (or <code>times(2)</code>
- depending on your operating system), and (pre-1.3) several
- extra calls to <code>time(2)</code>. This is all done so that
- the status report contains timing indications. For highest
- performance, set <code>ExtendedStatus off</code> (which is the
- default).</p>
-
- </section>
-
- <section>
-
- <title>accept Serialization - multiple sockets</title>
-
- <note type="warning"><title>Warning:</title>
- <p>This section has not been fully updated
- to take into account changes made in the 2.0 version of the
- Apache HTTP Server. Some of the information may still be
- relevant, but please use it with care.</p>
- </note>
-
- <p>This discusses a shortcoming in the Unix socket API. Suppose
- your web server uses multiple <directive module="mpm_common"
- >Listen</directive> statements to listen on either multiple
- ports or multiple addresses. In order to test each socket
- to see if a connection is ready Apache uses
- <code>select(2)</code>. <code>select(2)</code> indicates that a
- socket has <em>zero</em> or <em>at least one</em> connection
- waiting on it. Apache's model includes multiple children, and
- all the idle ones test for new connections at the same time. A
- naive implementation looks something like this (these examples
- do not match the code, they're contrived for pedagogical
- purposes):</p>
-
- <example>
- for (;;) {<br />
- <indent>
- for (;;) {<br />
- <indent>
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- FD_SET (i, &amp;accept_fds);<br />
- </indent>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <indent>
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- </indent>
- }<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- process the new_connection;<br />
- </indent>
- }
- </example>
-
- <p>But this naive implementation has a serious starvation problem.
- Recall that multiple children execute this loop at the same
- time, and so multiple children will block at
- <code>select</code> when they are in between requests. All
- those blocked children will awaken and return from
- <code>select</code> when a single request appears on any socket
- (the number of children which awaken varies depending on the
- operating system and timing issues). They will all then fall
- down into the loop and try to <code>accept</code> the
- connection. But only one will succeed (assuming there's still
- only one connection ready), the rest will be <em>blocked</em>
- in <code>accept</code>. This effectively locks those children
- into serving requests from that one socket and no other
- sockets, and they'll be stuck there until enough new requests
- appear on that socket to wake them all up. This starvation
- problem was first documented in <a
- href="http://bugs.apache.org/index/full/467">PR#467</a>. There
- are at least two solutions.</p>
-
- <p>One solution is to make the sockets non-blocking. In this
- case the <code>accept</code> won't block the children, and they
- will be allowed to continue immediately. But this wastes CPU
- time. Suppose you have ten idle children in
- <code>select</code>, and one connection arrives. Then nine of
- those children will wake up, try to <code>accept</code> the
- connection, fail, and loop back into <code>select</code>,
- accomplishing nothing. Meanwhile none of those children are
- servicing requests that occurred on other sockets until they
- get back up to the <code>select</code> again. Overall this
- solution does not seem very fruitful unless you have as many
- idle CPUs (in a multiprocessor box) as you have idle children,
- not a very likely situation.</p>
-
- <p>Another solution, the one used by Apache, is to serialize
- entry into the inner loop. The loop looks like this
- (differences highlighted):</p>
-
- <example>
- for (;;) {<br />
- <indent>
- <strong>accept_mutex_on ();</strong><br />
- for (;;) {<br />
- <indent>
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- FD_SET (i, &amp;accept_fds);<br />
- </indent>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <indent>
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- </indent>
- }<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- <strong>accept_mutex_off ();</strong><br />
- process the new_connection;<br />
- </indent>
- }
- </example>
-
- <p><a id="serialize" name="serialize">The functions</a>
- <code>accept_mutex_on</code> and <code>accept_mutex_off</code>
- implement a mutual exclusion semaphore. Only one child can have
- the mutex at any time. There are several choices for
- implementing these mutexes. The choice is defined in
- <code>src/conf.h</code> (pre-1.3) or
- <code>src/include/ap_config.h</code> (1.3 or later). Some
- architectures do not have any locking choice made, on these
- architectures it is unsafe to use multiple
- <directive module="mpm_common">Listen</directive>
- directives.</p>
-
- <p>The directive <directive
- module="mpm_common">AcceptMutex</directive> can be used to
- change the selected mutex implementation at run-time.</p>
-
- <dl>
- <dt><code>AcceptMutex flock</code></dt>
-
- <dd>
- <p>This method uses the <code>flock(2)</code> system call to
- lock a lock file (located by the <directive module="mpm_common"
- >LockFile</directive> directive).</p>
- </dd>
-
- <dt><code>AcceptMutex fcntl</code></dt>
-
- <dd>
- <p>This method uses the <code>fcntl(2)</code> system call to
- lock a lock file (located by the <directive module="mpm_common"
- >LockFile</directive> directive).</p>
- </dd>
-
- <dt><code>AcceptMutex sysvsem</code></dt>
-
- <dd>
- <p>(1.3 or later) This method uses SysV-style semaphores to
- implement the mutex. Unfortunately SysV-style semaphores have
- some bad side-effects. One is that it's possible Apache will
- die without cleaning up the semaphore (see the
- <code>ipcs(8)</code> man page). The other is that the
- semaphore API allows for a denial of service attack by any
- CGIs running under the same uid as the webserver
- (<em>i.e.</em>, all CGIs, unless you use something like
- <code>suexec</code> or <code>cgiwrapper</code>). For these
- reasons this method is not used on any architecture except
- IRIX (where the previous two are prohibitively expensive
- on most IRIX boxes).</p>
- </dd>
-
- <dt><code>AcceptMutex pthread</code></dt>
-
- <dd>
- <p>(1.3 or later) This method uses POSIX mutexes and should
- work on any architecture implementing the full POSIX threads
- specification, however appears to only work on Solaris (2.5
- or later), and even then only in certain configurations. If
- you experiment with this you should watch out for your server
- hanging and not responding. Static content only servers may
- work just fine.</p>
- </dd>
-
- <dt><code>AcceptMutex posixsem</code></dt>
-
- <dd>
- <p>(2.0 or later) This method uses POSIX semaphores. The
- semaphore ownership is not recovered if a thread in the process
- holding the mutex segfaults, resulting in a hang of the web
- server.</p>
- </dd>
-
- </dl>
-
- <p>If your system has another method of serialization which
- isn't in the above list then it may be worthwhile adding code
- for it to APR.</p>
-
- <p>Another solution that has been considered but never
- implemented is to partially serialize the loop -- that is, let
- in a certain number of processes. This would only be of
- interest on multiprocessor boxes where it's possible multiple
- children could run simultaneously, and the serialization
- actually doesn't take advantage of the full bandwidth. This is
- a possible area of future investigation, but priority remains
- low because highly parallel web servers are not the norm.</p>
-
- <p>Ideally you should run servers without multiple
- <directive module="mpm_common">Listen</directive>
- statements if you want the highest performance.
- But read on.</p>
-
- </section>
-
- <section>
-
- <title>accept Serialization - single socket</title>
-
- <p>The above is fine and dandy for multiple socket servers, but
- what about single socket servers? In theory they shouldn't
- experience any of these same problems because all children can
- just block in <code>accept(2)</code> until a connection
- arrives, and no starvation results. In practice this hides
- almost the same "spinning" behaviour discussed above in the
- non-blocking solution. The way that most TCP stacks are
- implemented, the kernel actually wakes up all processes blocked
- in <code>accept</code> when a single connection arrives. One of
- those processes gets the connection and returns to user-space,
- the rest spin in the kernel and go back to sleep when they
- discover there's no connection for them. This spinning is
- hidden from the user-land code, but it's there nonetheless.
- This can result in the same load-spiking wasteful behaviour
- that a non-blocking solution to the multiple sockets case
- can.</p>
-
- <p>For this reason we have found that many architectures behave
- more "nicely" if we serialize even the single socket case. So
- this is actually the default in almost all cases. Crude
- experiments under Linux (2.0.30 on a dual Pentium pro 166
- w/128Mb RAM) have shown that the serialization of the single
- socket case causes less than a 3% decrease in requests per
- second over unserialized single-socket. But unserialized
- single-socket showed an extra 100ms latency on each request.
- This latency is probably a wash on long haul lines, and only an
- issue on LANs. If you want to override the single socket
- serialization you can define
- <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code> and then
- single-socket servers will not serialize at all.</p>
-
- </section>
-
- <section>
-
- <title>Lingering Close</title>
-
- <p>As discussed in <a
- href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
- draft-ietf-http-connection-00.txt</a> section 8, in order for
- an HTTP server to <strong>reliably</strong> implement the
- protocol it needs to shutdown each direction of the
- communication independently (recall that a TCP connection is
- bi-directional, each half is independent of the other). This
- fact is often overlooked by other servers, but is correctly
- implemented in Apache as of 1.2.</p>
-
- <p>When this feature was added to Apache it caused a flurry of
- problems on various versions of Unix because of a
- shortsightedness. The TCP specification does not state that the
- <code>FIN_WAIT_2</code> state has a timeout, but it doesn't prohibit it.
- On systems without the timeout, Apache 1.2 induces many sockets
- stuck forever in the <code>FIN_WAIT_2</code> state. In many cases this
- can be avoided by simply upgrading to the latest TCP/IP patches
- supplied by the vendor. In cases where the vendor has never
- released patches (<em>i.e.</em>, SunOS4 -- although folks with
- a source license can patch it themselves) we have decided to
- disable this feature.</p>
-
- <p>There are two ways of accomplishing this. One is the socket
- option <code>SO_LINGER</code>. But as fate would have it, this
- has never been implemented properly in most TCP/IP stacks. Even
- on those stacks with a proper implementation (<em>i.e.</em>,
- Linux 2.0.31) this method proves to be more expensive (cputime)
- than the next solution.</p>
-
- <p>For the most part, Apache implements this in a function
- called <code>lingering_close</code> (in
- <code>http_main.c</code>). The function looks roughly like
- this:</p>
-
- <example>
- void lingering_close (int s)<br />
- {<br />
- <indent>
- char junk_buffer[2048];<br />
- <br />
- /* shutdown the sending side */<br />
- shutdown (s, 1);<br />
- <br />
- signal (SIGALRM, lingering_death);<br />
- alarm (30);<br />
- <br />
- for (;;) {<br />
- <indent>
- select (s for reading, 2 second timeout);<br />
- if (error) break;<br />
- if (s is ready for reading) {<br />
- <indent>
- if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {<br />
- <indent>
- break;<br />
- </indent>
- }<br />
- /* just toss away whatever is here */<br />
- </indent>
- }<br />
- </indent>
- }<br />
- <br />
- close (s);<br />
- </indent>
- }
- </example>
-
- <p>This naturally adds some expense at the end of a connection,
- but it is required for a reliable implementation. As HTTP/1.1
- becomes more prevalent, and all connections are persistent,
- this expense will be amortized over more requests. If you want
- to play with fire and disable this feature you can define
- <code>NO_LINGCLOSE</code>, but this is not recommended at all.
- In particular, as HTTP/1.1 pipelined persistent connections
- come into use <code>lingering_close</code> is an absolute
- necessity (and <a
- href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
- pipelined connections are faster</a>, so you want to support
- them).</p>
-
- </section>
-
- <section>
-
- <title>Scoreboard File</title>
-
- <p>Apache's parent and children communicate with each other
- through something called the scoreboard. Ideally this should be
- implemented in shared memory. For those operating systems that
- we either have access to, or have been given detailed ports
- for, it typically is implemented using shared memory. The rest
- default to using an on-disk file. The on-disk file is not only
- slow, but it is unreliable (and less featured). Peruse the
- <code>src/main/conf.h</code> file for your architecture and
- look for either <code>USE_MMAP_SCOREBOARD</code> or
- <code>USE_SHMGET_SCOREBOARD</code>. Defining one of those two
- (as well as their companions <code>HAVE_MMAP</code> and
- <code>HAVE_SHMGET</code> respectively) enables the supplied
- shared memory code. If your system has another type of shared
- memory, edit the file <code>src/main/http_main.c</code> and add
- the hooks necessary to use it in Apache. (Send us back a patch
- too please.)</p>
-
- <note>Historical note: The Linux port of Apache didn't start to
- use shared memory until version 1.2 of Apache. This oversight
- resulted in really poor and unreliable behaviour of earlier
- versions of Apache on Linux.</note>
-
- </section>
-
- <section>
-
- <title>DYNAMIC_MODULE_LIMIT</title>
-
- <p>If you have no intention of using dynamically loaded modules
- (you probably don't if you're reading this and tuning your
- server for every last ounce of performance) then you should add
- <code>-DDYNAMIC_MODULE_LIMIT=0</code> when building your
- server. This will save RAM that's allocated only for supporting
- dynamically loaded modules.</p>
-
- </section>
-
- </section>
-
- <section id="trace">
-
- <title>Appendix: Detailed Analysis of a Trace</title>
-
- <p>Here is a system call trace of Apache 2.0.38 with the worker MPM
- on Solaris 8. This trace was collected using:</p>
-
- <example>
- truss -l -p <var>httpd_child_pid</var>.
- </example>
-
- <p>The <code>-l</code> option tells truss to log the ID of the
- LWP (lightweight process--Solaris's form of kernel-level thread)
- that invokes each system call.</p>
-
- <p>Other systems may have different system call tracing utilities
- such as <code>strace</code>, <code>ktrace</code>, or <code>par</code>.
- They all produce similar output.</p>
-
- <p>In this trace, a client has requested a 10KB static file
- from the httpd. Traces of non-static requests or requests
- with content negotiation look wildly different (and quite ugly
- in some cases).</p>
-
- <example>
-<pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
-/67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre>
- </example>
-
- <p>In this trace, the listener thread is running within LWP #67.</p>
-
- <note>Note the lack of <code>accept(2)</code> serialization. On this
- particular platform, the worker MPM uses an unserialized accept by
- default unless it is listening on multiple ports.</note>
-
- <example>
-<pre>/65: lwp_park(0x00000000, 0) = 0
-/67: lwp_unpark(65, 1) = 0</pre>
- </example>
-
- <p>Upon accepting the connection, the listener thread wakes up
- a worker thread to do the request processing. In this trace,
- the worker thread that handles the request is mapped to LWP #65.</p>
-
- <example>
-<pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre>
- </example>
-
- <p>In order to implement virtual hosts, Apache needs to know
- the local socket address used to accept the connection. It
- is possible to eliminate this call in many situations (such
- as when there are no virtual hosts, or when
- <directive module="mpm_common">Listen</directive> directives
- are used which do not have wildcard addresses). But
- no effort has yet been made to do these optimizations. </p>
-
- <example>
-<pre>/65: brk(0x002170E8) = 0
-/65: brk(0x002190E8) = 0</pre>
- </example>
-
- <p>The <code>brk(2)</code> calls allocate memory from the heap.
- It is rare to see these in a system call trace, because the httpd
- uses custom memory allocators (<code>apr_pool</code> and
- <code>apr_bucket_alloc</code>) for most request processing.
- In this trace, the httpd has just been started, so it must
- call <code>malloc(3)</code> to get the blocks of raw memory
- with which to create the custom memory allocators.</p>
-
- <example>
-<pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
-/65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
-/65: fcntl(9, F_SETFL, 0x00000082) = 0</pre>
- </example>
-
- <p>Next, the worker thread puts the connection to the client (file
- descriptor 9) in non-blocking mode. The <code>setsockopt(2)</code>
- and <code>getsockopt(2)</code> calls are a side-effect of how
- Solaris's libc handles <code>fcntl(2)</code> on sockets.</p>
-
- <example>
-<pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre>
- </example>
-
- <p>The worker thread reads the request from the client.</p>
-
- <example>
-<pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
-/65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre>
- </example>
-
- <p>This httpd has been configured with <code>Options FollowSymLinks</code>
- and <code>AllowOverride None</code>. Thus it doesn't need to
- <code>lstat(2)</code> each directory in the path leading up to the
- requested file, nor check for <code>.htaccess</code> files.
- It simply calls <code>stat(2)</code> to verify that the file:
- 1) exists, and 2) is a regular file, not a directory.</p>
-
- <example>
-<pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre>
- </example>
-
- <p>In this example, the httpd is able to send the HTTP response
- header and the requested file with a single <code>sendfilev(2)</code>
- system call. Sendfile semantics vary among operating systems. On some other
- systems, it is necessary to do a <code>write(2)</code> or
- <code>writev(2)</code> call to send the headers before calling
- <code>sendfile(2)</code>.</p>
-
- <example>
-<pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre>
- </example>
-
- <p>This <code>write(2)</code> call records the request in the
- access log. Note that one thing missing from this trace is a
- <code>time(2)</code> call. Unlike Apache 1.3, Apache 2.0 uses
- <code>gettimeofday(3)</code> to look up the time. On some operating
- systems, like Linux or Solaris, <code>gettimeofday</code> has an
- optimized implementation that doesn't require as much overhead
- as a typical system call.</p>
-
- <example>
-<pre>/65: shutdown(9, 1, 1) = 0
-/65: poll(0xFAF7B980, 1, 2000) = 1
-/65: read(9, 0xFAF7BC20, 512) = 0
-/65: close(9) = 0</pre>
- </example>
-
- <p>The worker thread does a lingering close of the connection.</p>
-
- <example>
-<pre>/65: close(10) = 0
-/65: lwp_park(0x00000000, 0) (sleeping...)</pre>
- </example>
-
- <p>Finally the worker thread closes the file that it has just delivered
- and blocks until the listener assigns it another connection.</p>
-
- <example>
-<pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre>
- </example>
-
- <p>Meanwhile, the listener thread is able to accept another connection
- as soon as it has dispatched this connection to a worker thread (subject
- to some flow-control logic in the worker MPM that throttles the listener
- if all the available workers are busy). Though it isn't apparent from
- this trace, the next <code>accept(2)</code> can (and usually does, under
- high load conditions) occur in parallel with the worker thread's handling
- of the just-accepted connection.</p>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/misc/perf-tuning.xml.ko b/docs/manual/misc/perf-tuning.xml.ko
deleted file mode 100644
index 0a05318957..0000000000
--- a/docs/manual/misc/perf-tuning.xml.ko
+++ /dev/null
@@ -1,1041 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="perf-tuning.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó</title>
-
- <summary>
-
- <p>¾ÆÆÄÄ¡ 2.0Àº ±â´É°ú Æ÷Æð¡´É¼º°ú ¼º´ÉÀÇ ±ÕÇüÀÌ ¸Âµµ·Ï
- ¼³°èÇÑ ¹ü¿ë À¥¼­¹öÀÌ´Ù. º¥Ä¡¸¶Å© ±â·ÏÀ» ¼¼¿ì±âÀ§ÇØ ¼³°èÇÏÁö
- ¾Ê¾ÒÁö¸¸ ¾ÆÆÄÄ¡ 2.0Àº ½ÇÁ¦ ¸¹Àº °æ¿ì ³ôÀº ¼º´ÉÀ» ³½´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 1.3°ú ºñ±³Çؼ­ 2.0 ¹öÀüÀº 󸮷®°ú È®À强(scalability)À»
- ³ôÀ̱âÀ§ÇØ ¸¹Àº ÃÖÀûÈ­¸¦ Çß´Ù. ±âº»°ªÀ¸·Î ´ëºÎºÐ ÃÖÀûÈ­ÇÑ
- °ªÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª ÄÄÆÄÀϽà ȤÀº ½ÇÇà½Ã ¼³Á¤ÀÌ ¼º´É¿¡
- Å« ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ 2.0ÀÇ ¼º´ÉÀ» Çâ»óÇϱâÀ§ÇØ
- ¼­¹ö °ü¸®ÀÚ°¡ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀ» ¼³¸íÇÑ´Ù. ¾î¶² ¼³Á¤
- ¿É¼ÇÀº À¥¼­¹ö°¡ Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦ÀÇ ±â´ÉÀ» ´õ Àß È°¿ëÇϵµ·Ï
- ÇÏ´Â ¹Ý¸é, ¾î¶² ¿É¼ÇÀº ¼Óµµ¸¦ À§ÇØ ±â´ÉÀ» Èñ»ýÇÑ´Ù.</p>
-
- </summary>
-
- <section id="hardware">
-
- <title>Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦¿¡ ´ëÇؼ­</title>
-
- <p>À¥¼­¹ö ¼º´É¿¡ °¡Àå Å« ¿µÇâÀ» ÁÖ´Â °ÍÀº ¸Þ¸ð¸®´Ù. ½º¿ÒÀº
- ¿äû´ç Áö¿¬½Ã°£À» »ç¿ëÀÚ°¡ "ÃæºÐÈ÷ ºü¸£´Ù°í" »ý°¢ÇÏÁö ¸øÇÏ°Ô
- ´Ã¸®±â¶§¹®¿¡ À¥¼­¹ö´Â ½º¿ÒÀ» ÇÏ¸é ¾ÈµÈ´Ù. ´À·ÁÁö¸é »ç¿ëÀÚ´Â
- Á¤ÁöÇÏ°í ´Ù½Ã Á¢¼ÓÇÏ¿© ºÎÇÏ°¡ °è¼Ó Áõ°¡ÇÑ´Ù. <directive
- module="mpm_common">MaxClients</directive> Áö½Ã¾î¸¦ Á¶ÀýÇÏ¿©
- À¥¼­¹ö°¡ ½º¿ÒÀ» ÇÒ Á¤µµ·Î ¸¹Àº ÀÚ½ÄÀ» ¸¸µéÁö¾Êµµ·Ï Çؾß
- ÇÑ´Ù. ¹æ¹ýÀº °£´ÜÇÏ´Ù: <code>top</code>°ú °°Àº µµ±¸¿¡¼­
- ÇÁ·Î¼¼½º ¸ñ·ÏÀ» º¸°í ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½ºÀÇ Æò±Õ ¸Þ¸ð¸® »ç¿ë·®À»
- ¾Ë¾Æ³½ÈÄ, Àüü »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ »ç¿ëÇÒ
- °ø°£À» »« °ª¿¡¼­ ³ª´«´Ù.</p>
-
- <p>³ª¸ÓÁö´Â Æò¹üÇÏ´Ù: ÃæºÐÈ÷ ºü¸¥ CPU, ÃæºÐÈ÷ ºü¸¥ ³×Æ®¿÷Ä«µå,
- ÃæºÐÈ÷ ºü¸¥ µð½ºÅ©, ¿©±â¼­ "ÃæºÐÈ÷ ºü¸¥"Àº ½ÇÇèÀ» Çؼ­ °áÁ¤Çؾß
- ÇÑ´Ù.</p>
-
- <p>¿î¿µÃ¼Á¦´Â º¸Åë °¢ÀÚ ¾Ë¾Æ¼­ ¼±ÅÃÇÒ ÀÏÀÌ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î
- À¯¿ëÇÏ´Ù°í ÆǸíµÈ ¸î°¡Áö ÁöħÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>
- <p>¼±ÅÃÇÑ ¿î¿µÃ¼Á¦ÀÇ ÃֽŠ¾ÈÁ¤ ¹öÀü°ú ÆÐÄ¡¸¦ ½ÇÇàÇÑ´Ù.
- ¸¹Àº ¿î¿µÃ¼Á¦ Á¦ÀÛ»ç´Â ÃÖ±Ù TCP ½ºÅðú ¾²·¹µå ¶óÀ̺귯¸®¿¡
- ¸¹Àº ¼ÓµµÇâ»óÀ» Çß´Ù.</p>
- </li>
-
- <li>
- <p>¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code> ½Ã½ºÅÛÈ£ÃâÀ»
- Áö¿øÇÑ´Ù¸é, À̸¦ »ç¿ëÇϱâÀ§ÇÑ ¹öÀüÀ̳ª ÆÐÄ¡¸¦ ¼³Ä¡ÇÏ¿´´ÂÁö
- È®ÀÎÇÑ´Ù. (¿¹¸¦ µé¾î, ¸®´ª½º¶ó¸é 2.4 ÀÌ»ó ¹öÀüÀ» ¶æÇÑ´Ù.
- Solaris 8 Ãʱ⠹öÀüÀº ÆÐÄ¡°¡ ÇÊ¿äÇÏ´Ù.) Áö¿øÇÏ´Â ½Ã½ºÅÛÀ̶ó¸é
- ¾ÆÆÄÄ¡ 2´Â <code>sendfile</code>À» »ç¿ëÇÏ¿© CPU¸¦ ´ú
- »ç¿ëÇϸç Á¤Àû ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÒ ¼ö ÀÕ´Ù.</p>
- </li>
- </ul>
-
- </section>
-
- <section id="runtime">
-
- <title>½ÇÇà½Ã ¼³Á¤¿¡ ´ëÇؼ­</title>
-
- <related>
- <modulelist>
- <module>mod_dir</module>
- <module>mpm_common</module>
- <module>mod_status</module>
- </modulelist>
- <directivelist>
- <directive module="core">AllowOverride</directive>
- <directive module="mod_dir">DirectoryIndex</directive>
- <directive module="core">HostnameLookups</directive>
- <directive module="core">EnableMMAP</directive>
- <directive module="core">EnableSendfile</directive>
- <directive module="core">KeepAliveTimeout</directive>
- <directive module="prefork">MaxSpareServers</directive>
- <directive module="prefork">MinSpareServers</directive>
- <directive module="core">Options</directive>
- <directive module="mpm_common">StartServers</directive>
- </directivelist>
- </related>
-
- <section id="dns">
-
- <title>HostnameLookups¿Í DNS¿¡ ´ëÇØ °í·ÁÇÒ Á¡µé</title>
-
- <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡ <directive
- module="core">HostnameLookups</directive>ÀÇ ±âº»°ªÀº
- <code>On</code>ÀÌ¿´´Ù. ¿äûÀ» ¸¶Ä¡±âÀü¿¡ DNS °Ë»öÀÌ ³¡³ª¾ß
- ÇϹǷΠ¿äû¸¶´Ù Áö¿¬ÀÌ »ý°å´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÀÌ ¼³Á¤ÀÇ
- ±âº»°ªÀÌ <code>Off</code>·Î º¯°æµÇ¾ú´Ù. ·Î±×ÆÄÀÏÀÇ ÁÖ¼Ò¸¦
- È£½ºÆ®¸íÀ¸·Î º¯È¯ÇÏ·Á¸é ¿©·¯ ·Î±×ó¸® ÇÁ·Î±×·¥Áß ÇϳªÀÎ,
- ¾ÆÆÄÄ¡¿¡ Æ÷ÇÔµÈ <a
- href="../programs/logresolve.html"><code>logresolve</code></a>
- ÇÁ·Î±×·¥À» »ç¿ëÇ϶ó.</p>
-
- <p>·Î±×ó¸® ÀÛ¾÷ÀÌ ¼­¹ö ¼º´É¿¡ ¾Ç¿µÇâÀ» ¹ÌÄ¡¹Ç·Î ½ÇÁ¦
- »ç¿ëÇÏ´Â À¥¼­¹ö°¡ ¾Æ´Ñ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ·Î±×ÆÄÀÏÀ» ÈÄó¸®Çϱæ
- ¹Ù¶õ´Ù.</p>
-
- <p><code><directive module="mod_access">Allow</directive>
- from domain</code>À̳ª <code><directive
- module="mod_access">Deny</directive> from domain</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù¸é (Áï, IP ÁÖ¼Ò°¡ ¾Æ´Ñ È£½ºÆ®¸íÀ̳ª µµ¸ÞÀθíÀ»
- »ç¿ëÇÑ´Ù¸é) ºÎµæÀÌ Áߺ¹-¿ª DNS °Ë»öÀ» (¿ª°Ë»öÀ» ÇÑÈÄ ¾ÇÀÇ·Î
- º¯°æµÇ¾ú´ÂÁö È®ÀÎÇϱâÀ§ÇØ ´Ù½Ã °Ë»ö) ÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î
- ¼º´ÉÀ» ³ôÀ̱âÀ§ÇØ ÀÌ·± Áö½Ã¾î¿¡´Â °¡´ÉÇϸé À̸§´ë½Å IP
- ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <p><code>&lt;Location /server-status&gt;</code> ¼½¼Ç µîÀ¸·Î
- Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦ Á¦ÇÑÇÒ ¼ö ÀÖÀ½À» ±â¾ïÇ϶ó. ÀÌ °æ¿ì
- Á¶°Ç¿¡ ¸Â´Â ¿äû¿¡¸¸ DNS Á¶È¸¸¦ ÇÑ´Ù. ´ÙÀ½Àº
- <code>.html</code>°ú <code>.cgi</code> ÆÄÀϸ¸ DNS °Ë»öÀ»
- ÇÏ´Â ¿¹Á¦´Ù:</p>
-
- <example>
- HostnameLookups off<br />
- &lt;Files ~ "\.(html|cgi)$"&gt;<br />
- <indent>
- HostnameLookups on<br />
- </indent>
- &lt;/Files&gt;
- </example>
-
- <p>±×·¯³ª CGI¿¡¼­ DNS¸íÀÌ ÇÊ¿äÇÒ »ÓÀ̶ó¸é, ÇÊ¿äÇÑ Æ¯Á¤
- CGI¿¡¼­¸¸ <code>gethostbyname</code> È£ÃâÀ» Çϵµ·Ï °í·ÁÇغ¼
- ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="symlinks">
-
- <title>FollowSymLinks¿Í SymLinksIfOwnerMatch</title>
-
- <p>URL °ø°£¿¡¼­ <code>Options FollowSymLinks</code>¸¦
- »ç¿ëÇÏÁö¾Ê°í <code>Options SymLinksIfOwnerMatch</code>¸¦
- »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â ½Éº¼¸µÅ©¸¦ °Ë»çÇϱâÀ§ÇØ ½Ã½ºÅÛÈ£ÃâÀ»
- Çѹø ´õ ÇØ¾ß ÇÑ´Ù. ÆÄÀϸíÀÇ °¢ ºÎºÐ¸¶´Ù Çѹø¾¿ ´õ È£ÃâÀ»
- ÇÑ´Ù. ¿¹¸¦ µé¾î, ¼³Á¤ÀÌ ´ÙÀ½°ú °°°í:</p>
-
- <example>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <indent>
- Options SymLinksIfOwnerMatch<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äûÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
- ±×·¯¸é ¾ÆÆÄÄ¡´Â <code>/www</code>, <code>/www/htdocs</code>,
- <code>/www/htdocs/index.html</code> °¢°¢¿¡ ´ëÇØ
- <code>lstat(2)</code>¸¦ È£ÃâÇÑ´Ù. <code>lstats</code>
- °á°ú¸¦ ij½ÌÇÏÁö ¾Ê±â¶§¹®¿¡ ¿äûÀÌ µé¾î¿Ã ¶§¸¶´Ù ¸Å¹ø °°Àº
- ÀÛ¾÷À» ÇÑ´Ù. ÁøÂ¥ ½Éº¼¸µÅ© º¸¾È °Ë»ç¸¦ ¿øÇÑ´Ù¸é ´ÙÀ½°ú
- °°ÀÌ ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <indent>
- Options FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /www/htdocs&gt;<br />
- <indent>
- Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>ÀÌ °æ¿ì ÃÖ¼ÒÇÑ <directive
- module="core">DocumentRoot</directive> °æ·Î´Â °Ë»çÇÏÁö
- ¾Ê´Â´Ù. DocumentRoot ¹Û¿¡ ÀÖ´Â °æ·Î·Î <directive
- module="mod_alias">Alias</directive>³ª <directive
- module="mod_rewrite">RewriteRule</directive>À» »ç¿ëÇÑ
- °æ¿ì¿¡µµ À§¿Í ºñ½ÁÇÑ ¼½¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ½Éº¼¸µÅ© º¸¾ÈÀ»
- °í·ÁÇÏÁö ¾Ê°í ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é,
- <code>FollowSymLinks</code>¸¦ ¼³Á¤ÇÏ°í,
- <code>SymLinksIfOwnerMatch</code>´Â Àý´ë·Î ¾ÈµÈ´Ù.</p>
-
- </section>
-
- <section id="htacess">
-
- <title>AllowOverride</title>
-
- <p>URL °ø°£¿¡¼­ overrides¸¦ Çã¿ëÇÑ´Ù¸é (º¸Åë
- <code>.htaccess</code> ÆÄÀÏ) ¾ÆÆÄÄ¡´Â ÆÄÀϸíÀÇ °¢ ºÎºÐ¸¶´Ù
- <code>.htaccess</code>¸¦ ¿­±æ ½ÃµµÇÑ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <example>
- DocumentRoot /www/htdocs<br />
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride all<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äûÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
- ¾ÆÆÄÄ¡´Â <code>/.htaccess</code>, <code>/www/.htaccess</code>,
- <code>/www/htdocs/.htaccess</code>¸¦ ¿­·Á°í ½ÃµµÇÑ´Ù.
- ÇØ°áÃ¥Àº ¾ÕÀÇ <code>Options FollowSymLinks</code> °æ¿ì¿Í
- ºñ½ÁÇÏ´Ù. ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é ÆÄÀϽýºÅÛ¿¡ ´ëÇؼ­ Ç×»ó
- <code>AllowOverride None</code>À» »ç¿ëÇÑ´Ù.</p>
-
- </section>
-
- <section id="negotiation">
-
- <title>³»¿ëÇù»ó</title>
-
- <p>°¡´ÉÇÏ°í ÁøÂ¥ Á¶±ÝÀÇ ¼º´ÉÇâ»ó¿¡µµ °ü½ÉÀÌ ÀÖ´Ù¸é ³»¿ëÇù»óÀ»
- ¸·´Â´Ù. ½ÇÁ¦·Î Çù»óÀÇ À̵æÀº ¼º´ÉÀúÇϺ¸´Ù ÀÛ´Ù. ¼­¹ö¸¦
- ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÏ´Â ´ë½Å:</p>
-
- <example>
- DirectoryIndex index
- </example>
-
- <p>¿ÏÀüÇÑ ¸ñ·ÏÀ» »ç¿ëÇÑ´Ù:</p>
-
- <example>
- DirectoryIndex index.cgi index.pl index.shtml index.html
- </example>
-
- <p>°¡Àå ÈçÇÑ °ÍÀ» ¾Õ¿¡ µÐ´Ù.</p>
-
- <p>¶Ç, µð·ºÅ丮¿¡¼­ ÆÄÀϵéÀ» ã´Â <code>MultiViews</code>
- º¸´Ù´Â, ÇÑ ÆÄÀϸ¸ ÀÐÀ¸¸é ÇÊ¿äÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â
- <code>type-map</code> ÆÄÀÏÀ» Á÷Á¢ ¸¸µå´Â °ÍÀÌ ´õ ºü¸§À»
- ¸í½ÉÇ϶ó.</p>
-
- <p>»çÀÌÆ®¿¡ ³»¿ëÇù»óÀÌ ÇÊ¿äÇÏ´Ù¸é Çù»óÀ» À§ÇØ <code>Options
- MultiViews</code> Áö½Ã¾î¸¦ »ç¿ëÇϱ⺸´Ù <code>type-map</code>
- ÆÄÀÏÀ» °í·ÁÇ϶ó. Çù»ó¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú
- <code>type-map</code> ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº <a
- href="../content-negotiation.html">³»¿ëÇù»ó</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- </section>
-
- <section>
-
- <title>¸Þ¸ð¸®´ëÀÀ (memory-mapping)</title>
-
- <p>¿¹¸¦ µé¾î, server-side-include¸¦ ó¸®ÇÏ´Â µî ¾ÆÆÄÄ¡
- 2.0ÀÌ Àü¼ÛÇÒ ÆÄÀÏÀ» ÀÐÀ»¶§ ¿î¿µÃ¼Á¦°¡ <code>mmap(2)</code>
- µîÀ» Áö¿øÇÑ´Ù¸é ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÑ´Ù.</p>
-
- <p>¿©·¯ Ç÷¡Æû¿¡¼­ ¸Þ¸ð¸®´ëÀÀÀ» ¼º´ÉÀ» Çâ»óÇÑ´Ù. ±×·¯³ª
- ¸Þ¸ð¸®´ëÀÀÀÌ ¼­¹öÀÇ ¼º´ÉÀ» ¶³¾îÆ®¸®°í ½ÉÁö¾î ¾ÈÁ¤¼ºÀ»
- ÇØÄ¡´Â °æ¿ì°¡ ÀÖ´Ù:</p>
-
- <ul>
- <li>
- <p>¾î¶² ¿î¿µÃ¼Á¦¿¡¼­ <code>mmap</code>Àº CPU °³¼ö°¡
- ¸¹¾ÆÁú¶§ <code>read(2)</code> ¸¸Å­ È®À强ÀÌ ÁÁÁö ¾Ê´Ù.
- ¿¹¸¦ µé¾î, ´ÙÁßÇÁ·Î¼¼¼­ Solaris ¼­¹ö¿¡¼­ ¾ÆÆÄÄ¡ 2.0Àº
- Á¾Á¾ <code>mmap</code>À» »ç¿ëÇÏÁö ¾ÊÀ»¶§ ¼­¹ö°¡ ó¸®ÇÑ
- ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>NFS ¸¶¿îÆ®ÇÑ ÆÄÀϽýºÅÛ¿¡ ÀÖ´Â ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏ´Â
- µµÁß¿¡ ´Ù¸¥ NFS Ŭ¶óÀ̾ðÆ®¿¡ ÀÖ´Â ÇÁ·Î¼¼½º°¡ ÆÄÀÏÀ»
- Áö¿ì°Å³ª ÆÄÀÏÅ©±â¸¦ ÁÙÀ̸é, À¥¼­¹ö ÇÁ·Î¼¼½º°¡ ´ÙÀ½
- ¹ø¿¡ ¸Þ¸ð¸®´ëÀÀÇÑ ÆÄÀϳ»¿ëÀ» ÀÐÀ»¶§ bus error°¡ ¹ß»ýÇÒ
- ¼ö ÀÖ´Ù.</p>
- </li>
- </ul>
-
- <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇϸé Àü¼ÛÇÏ´Â ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏÁö
- ¾Êµµ·Ï <code>EnableMMAP off</code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. (ÁÖÀÇ:
- ÀÌ Áö½Ã¾î´Â µð·ºÅ丮º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>
-
- </section>
-
- <section>
-
- <title>Sendfile</title>
-
- <p>¾ÆÆÄÄ¡´Â ¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code>À» Áö¿øÇϸé
- Ä¿³Î sendfileÀ» »ç¿ëÇÏ¿© -- ¿¹¸¦ µé¾î, Á¤Àû ÆÄÀÏÀ» ¼­ºñ½ºÇÒ¶§
- -- Àü¼ÛÇÒ ÆÄÀÏÀ» Á÷Á¢ ÀÐÁö¾ÊÀ» ¼ö ÀÖ´Ù.</p>
-
- <p>¿©·¯ Ç÷¡Æû¿¡¼­ sendfileÀ» »ç¿ëÇϸé read¿Í send¸¦ µû·Î
- ÇÒ ÇÊ¿ä°¡ ¾ø¾î¼­ »¡¶óÁø´Ù. ±×·¯³ª sendfileÀ» »ç¿ëÇϸé
- À¥¼­¹öÀÇ ¾ÈÁ¤¼ºÀ» ÇØÄ¡°ÔµÇ´Â °æ¿ì°¡ ÀÖ´Ù:</p>
-
- <ul>
- <li>
- <p>sendfile Áö¿øÀÌ À߸øµÇ¾ú°í ÄÄÆÄÀÏ ½Ã½ºÅÛÀÌ ÀÌÁ¡À»
- ¹ß°ßÇÏÁö ¸øÇÏ´Â Ç÷¡ÆûÀÌ ÀÖ´Ù. ƯÈ÷ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­
- ½ÇÇàÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© sendfile Áö¿øÀÌ À߸øµÈ ÄÄÇ»ÅÍ·Î
- °¡Á®¿Â °æ¿ì¿¡ °¡´ÉÇÏ´Ù.</p>
- </li>
- <li>
- <p>Ä¿³ÎÀº ÀÚ½ÅÀÇ Ä³½¬¸¦ »ç¿ëÇÏ¿© NFS·Î ¸¶¿îÆ®ÇÑ ÆÄÀÏÀ»
- ¾ÈÁ¤ÀûÀ¸·Î ¼­ºñ½ºÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù.</p>
- </li>
- </ul>
-
- <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇϸé ÆÄÀÏÀ» sendfile Àü¼ÛÇÏÁö ¾Êµµ·Ï
- <code>EnableSendfile off</code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. (ÁÖÀÇ:
- ÀÌ Áö½Ã¾î´Â µð·ºÅ丮º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>
-
- </section>
-
- <section id="process">
-
- <title>ÇÁ·Î¼¼½º »ý¼º</title>
-
- <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡´Â <directive
- module="prefork">MinSpareServers</directive>, <directive
- module="prefork">MaxSpareServers</directive>, <directive
- module="mpm_common">StartServers</directive> ¼³Á¤ÀÌ ¸ðµÎ
- º¥Ä¡¸¶Å© °á°ú¿¡ Å« ¿µÇâÀ» ¹ÌÃÆ´Ù. ƯÈ÷ ¾ÆÆÄÄ¡´Â ÀÛ¾÷À»
- ¼­ºñ½ºÇϱâÀ§ÇØ ÃæºÐÇÑ Àڽļö¿¡ ´Ù´Ù¸¦ ¶§±îÁö "µµ´Þ" ±â°£ÀÌ
- ÇÊ¿äÇß´Ù. óÀ½ <directive
- module="mpm_common">StartServers</directive>°³ ÀÚ½ÄÀ»
- ¸¸µçÈÄ, <directive module="prefork">MinSpareServers</directive>
- ¼³Á¤°ª±îÁö ÃÊ´ç ÀÚ½ÄÀ» Çϳª¾¿ ¸¸µé¾ú´Ù. ±×·¡¼­ <directive
- module="mpm_common">StartServers</directive> ±âº»°ªÀÌ
- <code>5</code>ÀÎ ¼­¹ö¿¡ Ŭ¶óÀ̾ðÆ® 100°³°¡ µ¿½Ã¿¡ Á¢¼ÓÇϸé
- ºÎÇϸ¦ ó¸®Çϱ⿡ ÃæºÐÇÑ ÀÚ½ÄÀ» ¸¸µé±â±îÁö 95ÃÊ°¡ °É·È´Ù.
- ÀÚÁÖ Àç½ÃÀÛÇÏÁö ¾Ê´Â ½ÇÁ¦ ¼­¹ö¿¡¼­´Â Àß µ¿ÀÛÇÏÁö¸¸, 10ºÐ°£¸¸
- ½ÇÇàÇÏ´Â º¥Ä¡¸¶Å© °á°ú´Â ¸Å¿ì ³ª»Ú°Ô ³ª¿Â´Ù.</p>
-
- <p>ÃÊ´ç ÇÑ°³ ±ÔÄ¢Àº ÀÚ½ÄÀ» »õ·Î ½ÃÀÛÇϸ鼭 ¼­¹ö¿¡ ¹«¸®¸¦
- ÁÖÁö ¾ÊÀ¸·Á°í Á¤Çß´Ù. ÄÄÇ»ÅÍ°¡ ÀÚ½ÄÀ» ½ÃÀÛÇÏ´À¶ó ¹Ù»Ú¸é
- ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÀÌ ±ÔÄ¢ÀÌ ¾ÆÆÄÄ¡ÀÇ Ã¼°¨
- ¼º´É¿¡ ¾Ç¿µÇâÀ» ÁÖ¾î º¯°æÇÏ¿´´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÃÊ´ç ÇÑ°³
- ±ÔÄ¢Àº ¿ÏÈ­µÇ¾ú´Ù. ÄÚµå´Â ÀÚ½Ä ÇÑ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í,
- µÎ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í, ³×°³¸¦ ¸¸µé°í, ÀÌ·± ½ÄÀ¸·Î ÃÊ´ç
- ÀÚ½ÄÀ» 32°³ ¸¸µé¶§±îÁö Áö¼ö·Î Áõ°¡ÇÑ´Ù. Àڽļö°¡ <directive
- module="prefork">MinSpareServers</directive> ¼³Á¤¿¡ ´Ù´Ù¸£¸é
- Áõ°¡¸¦ Áß´ÜÇÑ´Ù.</p>
-
- <p>ÀÌ °æ¿ì ¹ÝÀÀ¼Óµµ°¡ »¡¶óÁ®¼­ <directive module="prefork"
- >MinSpareServers</directive>, <directive module="prefork"
- >MaxSpareServers</directive>, <directive module="mpm_common"
- >StartServers</directive>¸¦ °ÅÀÇ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÏÃÊ¿¡
- ÀÚ½ÄÀ» 4°³ ÀÌ»ó »ý¼ºÇϸé <directive
- module="core">ErrorLog</directive>¿¡ ±â·ÏÇÑ´Ù. ÀÌ·± ¿À·ù¹®ÀÌ
- ¸¹ÀÌ º¸À̸é ÀÌ ¼³Á¤µéÀ» Á¶ÀýÇÏ±æ ¹Ù¶õ´Ù.
- <module>mod_status</module> °á°ú°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.</p>
-
- <p>ÇÁ·Î¼¼½º »ý¼º°ú °ü·ÃÇÏ¿© <directive
- module="mpm_common">MaxRequestsPerChild</directive> ¼³Á¤Àº
- ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. ±âº»°ªÀº ÀڽĴç ó¸®ÇÒ ¿äû¼ö¿¡ Á¦ÇÑÀÌ
- ¾ø´Ù´Â <code>0</code>ÀÌ´Ù. ÇöÀç ¼³Á¤ÀÌ <code>30</code>°ú
- °°ÀÌ ¸Å¿ì ÀÛÀº °ªÀ¸·Î ¼³Á¤µÇÀÖ´Ù¸é, °ªÀ» »ó´çÈ÷ ³ôÈú ÇÊ¿ä°¡
- ÀÖ´Ù. SunOS³ª ¿À·¡µÈ Solaris ¹öÀüÀ» »ç¿ëÇÑ´Ù¸é, ¸Þ¸ð¸®À¯Ã⶧¹®¿¡
- ÀÌ °ªÀ» <code>10000</code> Á¤µµ·Î ¼³Á¤Ç϶ó.</p>
-
- <p>¿¬°áÀ¯Áö(keep-alive)¸¦ »ç¿ëÇÑ´Ù¸é ÀڽĵéÀº ÀÌ¹Ì ¿­¸°
- ¿¬°á¿¡¼­ Ãß°¡ ¿äûÀ» ±â´Ù¸®¸ç ¾Æ¹«°Íµµ ÇÏÁö¾Ê±â¶§¹®¿¡ °è¼Ó
- ¹Ù»Ú´Ù. <directive module="core">KeepAliveTimeout</directive>ÀÇ
- ±âº»°ª <code>15</code> ÃÊ´Â ÀÌ·± Çö»óÀ» ÃÖ¼ÒÈ­ÇÑ´Ù. ³×Æ®¿÷
- ´ë¿ªÆø°ú ¼­¹ö ÀÚ¿ø °£ÀÇ ±ÕÇüÀÌ ¸Â°Ô ¼³Á¤ÇÑ´Ù. <a
- href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
- ¿¬°áÀ¯ÁöÀÇ ´ëºÎºÐÀÇ ÀÌÁ¡ÀÌ »ç¶óÁö±â¶§¹®¿¡</a> ¾î¶² °æ¿ì¿¡µµ
- ÀÌ °ªÀ» <code>60</code> ÃÊ ÀÌ»óÀ¸·Î ¿Ã¸®Áö ¸¶¶ó.</p>
-
- </section>
-
- </section>
-
- <section id="compiletime">
-
- <title>ÄÄÆÄÀϽà ¼³Á¤¿¡ ´ëÇؼ­</title>
-
- <section>
-
- <title>MPM ¼±ÅÃ</title>
-
- <p>¾ÆÆÄÄ¡ 2.x´Â <a href="../mpm.html">´ÙÁß󸮸ðµâ</a>
- (MPMs)À̶ó´Â ±³Ã¼ÇÒ ¼ö ÀÖ´Â µ¿±âÈ­ ¸ðµ¨À» Áö¿øÇÑ´Ù. ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÒ¶§ MPMÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. <module>beos</module>,
- <module>mpm_netware</module>, <module>mpmt_os2</module>,
- <module>mpm_winnt</module>¿Í °°ÀÌ Æ¯Á¤ Ç÷¡Æû¿¡¼­¸¸ »ç¿ëÇÒ
- ¼ö ÀÖ´Â MPMµµ ÀÖ´Ù. ÀϹÝÀûÀÎ À¯´Ð½º·ù ½Ã½ºÅÛÀº ¿©·¯ MPM
- Áß¿¡ Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. À¥¼­¹öÀÇ ¼Óµµ¿Í
- È®À强(scalability)Àº ¾î¶² MPMÀ» ¼±ÅÃÇ߳Ŀ¡ ´Þ·È´Ù:</p>
-
- <ul>
-
- <li><module>worker</module> MPMÀº ¿©·¯ ÀÚ½Ä ÇÁ·Î¼¼½º°¡
- °¢°¢ ¿©·¯ ¾²·¹µå¸¦ »ç¿ëÇÑ´Ù. °¢ ¾²·¹µå´Â Çѹø¿¡ ÇÑ ¿¬°áÀ»
- ´ã´çÇÑ´Ù. ÀϹÝÀûÀ¸·Î worker´Â prefork MPM º¸´Ù ÀûÀº
- ¸Þ¸ð¸®¸¦ »ç¿ëÇϹǷΠÅë½Å·®ÀÌ ¸¹Àº ¼­¹ö¿¡ ÀûÀýÇÏ´Ù.</li>
-
- <li><module>prefork</module> MPMÀº ¾²·¹µå°¡ ÇÑ°³ÀÎ ÀÚ½Ä
- ÇÁ·Î¼¼½º¸¦ ¿©·¯°³ »ç¿ëÇÑ´Ù. °¢ ÇÁ·Î¼¼½º´Â Çѹø¿¡ ÇÑ
- ¿¬°áÀ» ´ã´çÇÑ´Ù. ¿©·¯ ½Ã½ºÅÛ¿¡¼­ preforkÀÇ ¼Óµµ´Â worker¿Í
- ºñ½ÁÇÏÁö¸¸, ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°Àº »óȲ¿¡¼­
- ¾²·¹µå¸¦ »ç¿ëÇÏÁö ¾Ê´Â prefork ¹æ½ÄÀÌ worker¿¡ ºñÇØ
- ÀÌÁ¡À» °¡Áø´Ù: ¾²·¹µå¿¡ ¾ÈÀüÇÏÁö (thread-safe) ¾ÊÀº
- Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» »ç¿ëÇÒ ¼ö ÀÖ°í, ¾²·¹µå µð¹ö±ë Áö¿øÀÌ
- ºó¾àÇÑ Ç÷¡Æû¿¡¼­ ½±°Ô µð¹ö±ëÇÒ ¼ö ÀÖ´Ù.</li>
-
- </ul>
-
- <p>ÀÌ MPMµé°ú ´Ù¸¥ MPM¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â MPM <a
- href="../mpm.html">¹®¼­</a>¸¦ Âü°íÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- </section>
-
- <section id="modules">
-
- <title>¸ðµâ</title>
-
- <p>¸Þ¸ð¸® »ç¿ë·®ÀÌ ¼º´É¿¡¼­ °¡Àå Áß¿äÇÑ ¿äÀÎÀ̱⶧¹®¿¡
- ½ÇÁ¦·Î »ç¿ëÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇغ¸ÀÚ. ¸ðµâÀ» <a
- href="../dso.html">DSO</a>·Î ÄÄÆÄÀÏÇß´Ù¸é °£´ÜÈ÷ ±×
- ¸ðµâ¿¡ ´ëÇÑ <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ ÁÖ¼®Ã³¸®Çϸé
- µÈ´Ù. ±×·¡¼­ ¸ðµâÀ» Á¦°ÅÇÏ°í ½ÇÇàÇÏ¿© »çÀÌÆ®°¡ ¸ðµâ¾øÀ̵µ
- Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´ÂÁö »ìÆ캼 ¼ö ÀÖ´Ù.</p>
-
- <p>¹Ý´ë·Î ¸ðµâÀÌ ¾ÆÆÄÄ¡ ½ÇÇàÆÄÀÏ¿¡ Á¤ÀûÀ¸·Î ¸µÅ©µÇÀÖ´Ù¸é
- ¿øÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇϱâÀ§ÇØ ¾ÆÆÄÄ¡¸¦ ÀçÄÄÆÄÀÏÇؾß
- ÇÑ´Ù.</p>
-
- <p>¿©±â¼­ ´ç¿¬È÷ ¾î¶² ¸ðµâÀ» »ç¿ëÇÏ°í »ç¿ëÇÏÁö ¸»Áö
- Àǹ®ÀÌ »ý±ä´Ù. Á¤´äÀº À¥»çÀÌÆ®¸¶´Ù ´Ù¸£´Ù. ±×·¯³ª ¾Æ¸¶µµ
- <em>ÃÖ¼ÒÇÑ</em> <module>mod_mime</module>,
- <module>mod_dir</module>, <module>mod_log_config</module>
- ¸ðµâÀº »ç¿ëÇÒ °ÍÀÌ´Ù. ¹°·Ð À¥»çÀÌÆ®¿¡ ·Î±×ÆÄÀÏÀÌ ÇÊ¿ä¾ø´Ù¸é
- <code>mod_log_config</code>´Â ¾ø¾îµµ µÈ´Ù. ±×·¯³ª ÃßõÇÏÁö
- ¾Ê´Â´Ù.</p>
-
- </section>
-
- <section>
-
- <title>Atomic ¸í·É</title>
-
- <p><module>mod_cache</module> °°Àº ¸ðµâ°ú ÃÖ±Ù °³¹ßÁßÀÎ
- worker MPMÀº APRÀÇ atomic API¸¦ »ç¿ëÇÑ´Ù. ÀÌ API´Â °æ·®±Þ
- ¾²·¹µå µ¿±âÈ­¸¦ À§ÇÒ atomic ¸í·ÉÀ» Á¦°øÇÑ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î APRÀº °¢ ¿î¿µÃ¼Á¦/CPU Ç÷¡Æû¿¡¼­ °¡Àå È¿À²ÀûÀÎ
- ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÀÌ ¸í·ÉÀ» ±¸ÇöÇÑ´Ù. ¿¹¸¦ µé¾î, ¿©·¯ ÃÖ½Å
- CPU¿¡´Â Çϵå¿þ¾î·Î atomic compare-and-swap (CAS) ¿¬»êÀ»
- ÇÏ´Â ¸í·É¾î°¡ ÀÖ´Ù. ±×·¯³ª ¾î¶² Ç÷¡Æû¿¡¼­ APRÀº ÀÌ·±
- ¸í·É¾î°¡ ¾ø´Â ¿À·¡µÈ CPU¿Í ȣȯ¼ºÀ» À§ÇØ ´õ ´À¸° mutex±â¹Ý
- ±¸ÇöÀ» ±âº»ÀûÀ¸·Î »ç¿ëÇÑ´Ù. ÀÌ·± Ç÷¡Æû¿¡¼­ ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÒ¶§ ¾ÆÆÄÄ¡¸¦ ÃֽŠCPU¿¡¼­¸¸ ½ÇÇàÇÒ °èȹÀ̶ó¸é,
- ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÒ¶§ <code>--enable-nonportable-atomics</code>
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ´õ ºü¸¥ atomic ±¸ÇöÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- ./buildconf<br />
- ./configure --with-mpm=worker --enable-nonportable-atomics=yes
- </example>
-
- <p><code>--enable-nonportable-atomics</code> ¿É¼ÇÀº ´ÙÀ½°ú
- °°Àº Ç÷¡Æû¿¡ ¿µÇâÀÌ ÀÖ´Ù:</p>
-
- <ul>
-
- <li>SPARC¿¡¼­ Solaris<br />
- ±âº»ÀûÀ¸·Î APRÀº Solaris/SPARC¿¡¼­ mutex±â¹Ý atomicÀ»
- »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
- <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇϸé
- APRÀº ºü¸¥ Çϵå¿þ¾î compare-and-swapÀ» À§ÇÑ SPARC
- v8plus ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé atomic
- ¸í·ÉÀÌ ´õ È¿À²ÀûÀÌÁö¸¸ (CPU¸¦ ´ú »ç¿ëÇÏ°í ´õ ³ôÀº
- µ¿±âÈ­°¡ °¡´ÉÇÏ´Ù), ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº UltraSPARC
- Ĩ¿¡¼­¸¸ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- </li>
-
- <li>Linux on x86<br />
- ±âº»ÀûÀ¸·Î APRÀº ¸®´ª½º¿¡¼­ mutex±â¹Ý atomicÀ»
- »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
- <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇϸé
- APRÀº ºü¸¥ Çϵå¿þ¾î compare-and-swapÀ» À§ÇÑ 486
- ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ´õ È¿À²ÀûÀÎ atomic ¸í·ÉÀÌ °¡´ÉÇÏÁö¸¸,
- ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº 486 ÀÌ»ó Ĩ¿¡¼­¸¸ (386Àº ¾ÈµÈ´Ù)
- ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- </li>
-
- </ul>
-
- </section>
-
- <section>
-
- <title>mod_status¿Í ExtendedStatus On</title>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ¶§ <module>mod_status</module>¸¦ Æ÷ÇÔÇÏ°í
- ½ÇÇàÇÒ¶§ <code>ExtendedStatus On</code>À» ¼³Á¤ÇÏ¸é ¾ÆÆÄÄ¡´Â
- ¿äûÀ» ¹ÞÀ»¶§¸¶´Ù <code>gettimeofday(2)</code>(ȤÀº ¿î¿µÃ¼Á¦¿¡
- µû¶ó <code>times(2)</code>)¸¦ µÎ¹ø È£ÃâÇÏ°í (1.3 ÀÌÀü¿¡´Â)
- <code>time(2)</code>µµ Ãß°¡·Î ¿©·¯¹ø È£ÃâÇÑ´Ù. »óÅ º¸°í¼­¿¡
- µ¿À۽ð£ÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. ÃÖ»óÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é
- (±âº»°ªÀÎ) <code>ExtendedStatus off</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- </section>
-
- <section>
-
- <title>accept Á÷·ÄÈ­ - ¿©·¯ ¼ÒÄÏ</title>
-
- <note type="warning"><title>ÁÖÀÇ:</title>
- <p> ¾Æ·¡ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ»
- ´ã°í ÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­
- »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
- </note>
-
- <p>À¯´Ð½º ¼ÒÄÏ APIÀÇ ´ÜÁ¡À» ¼³¸íÇÑ´Ù. À¥¼­¹ö°¡ ¿©·¯ Æ÷Æ®
- ȤÀº ¿©·¯ ÁÖ¼Ò¸¦ ±â´Ù¸®±âÀ§ÇØ ¿©·¯ <directive
- module="mpm_common">Listen</directive>À» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÏÀÚ.
- ¿¬°áÀÌ °¡´ÉÇÑÁö °¢ ¼ÒÄÏÀ» °Ë»çÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â
- <code>select(2)</code>¸¦ »ç¿ëÇÑ´Ù. <code>select(2)</code>´Â
- ¼ÒÄÏ¿¡ ±â´Ù¸®°í ÀÖ´Â ¿¬°áÀÌ <em>¾ø´ÂÁö</em> ȤÀº <em>ÃÖ¼ÒÇÑ
- ÇÑ°³</em> ÀÖ´ÂÁö ¾Ë·ÁÁØ´Ù. ¾ÆÆÄÄ¡¿¡´Â ¿©·¯ ÀÚ½ÄÀÌ ÀÖ°í,
- ½¬°í ÀÖ´Â ¸ðµç ÀÚ½ÄÀº µ¿½Ã¿¡ »õ·Î¿î ¿¬°áÀ» °Ë»çÇÑ´Ù. ¿ø·¡
- ±¸ÇöÀº ´ÙÀ½°ú ºñ½ÁÇÏ´Ù (ÀÌ ¿¹´Â Äڵ忡¼­ °¡Á®¿ÀÁö ¾Ê¾Ò´Ù.
- ´ÜÁö ¼³¸íÇϱâÀ§ÇÑ ¿ëµµ·Î ¸¸µé¾ú´Ù.):</p>
-
- <example>
- for (;;) {<br />
- <indent>
- for (;;) {<br />
- <indent>
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- FD_SET (i, &amp;accept_fds);<br />
- </indent>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <indent>
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- </indent>
- }<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- process the new_connection;<br />
- </indent>
- }
- </example>
-
- <p>±×·¯³ª À§ÀÇ ´Ü¼øÇÑ ±¸Çö¿¡´Â ½É°¢ÇÑ °í°¥(starvation)
- ¹®Á¦°¡ ÀÖ´Ù. ¿©·¯ ÀÚ½ÄÀÌ µ¿½Ã¿¡ ÀÌ ¹Ýº¹¹®À» ½ÇÇàÇϸé,
- ¿äûÀ» ±â´Ù¸®¸ç ¸ðµÎ <code>select</code>¿¡¼­ ¸ØÃá´Ù. À̶§
- ¾î¶² ¼ÒÄÏ¿¡ ¿äûÀÌ Çϳª¶óµµ µé¾î¿À¸é ¸ðµç ÀÚ½ÄÀÌ ±ú¾î³­´Ù
- (±ú¾î³ª´Â ÀÚ½ÄÀÇ °³¼ö´Â ¿î¿µÃ¼Á¦¿Í ŸÀֿ̹¡ µû¶ó ´Ù¸£´Ù).
- À̵éÀº ¸ðµÎ ¿¬°áÀ» <code>accept</code>ÇÏ±æ ½ÃµµÇÑ´Ù. ±×·¯³ª
- (¾ÆÁ÷µµ ÇÑ ¿¬°á¸¸ ´ë±âÁßÀ̶ó¸é) ÇÑ Àڽĸ¸ ¼º°øÇÏ°í, ³ª¸ÓÁö´Â
- <code>accept</code>¿¡¼­ <em>¸ØÃá´Ù.</em> ±×·¯¸é ÀÌ ÀڽĵéÀº
- ÇÑ ¼ÒÄÏÀÇ ¿äû¸¸À» ¼­ºñ½ºÇϵµ·Ï ¹­¿©¼­, ±× ¼ÒÄÏÀ¸·Î »õ·Î¿î
- ¿äûÀÌ ÃæºÐÈ÷ µé¾î¿Í¼­ ¸ðµç ÀÚ½ÄÀ» ±ú¿ï¶§±îÁö Á¤ÁöÇØÀÖ´Ù.
- ÀÌ·± °í°¥ ¹®Á¦´Â <a
- href="http://bugs.apache.org/index/full/467">PR#467</a>¿¡
- óÀ½ º¸°íµÇ¾ú´Ù. ÃÖ¼ÒÇÑ µÎ°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù.</p>
-
- <p>ÇÑ°¡Áö´Â ¼ÒÄÏÀ» ´ë±âÇÏÁö ¾Êµµ·Ï (non-blocking) ¸¸µå´Â
- ¹æ¹ýÀÌ´Ù. ÀÌ °æ¿ì ÀÚ½ÄÀÌ <code>accept</code>¸¦ Çصµ ¸ØÃßÁö
- ¾Ê°í, Áï½Ã ÁøÇàÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª CPU ½Ã°£À» ³¶ºñÇÑ´Ù.
- <code>select</code>¿¡¼­ ½¬´Â ÀÚ½ÄÀÌ 10°³ ÀÖ°í, »õ·Î ¿¬°áÀÌ
- ÇÑ°³ µé¾î¿Ô´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯¸é ÀÌ ÀÚ½ÄÁß 9°³´Â ±ú¾î³ª¼­
- ¿¬°áÀ» <code>accept</code>ÇÏ±æ ½ÃµµÇÏ°í ½ÇÆÐÇÏ¸é ¾Æ¹«
- Àϵµ ÇÏÁö ¾Ê°í ´Ù½Ã <code>select</code>¸¦ ¹Ýº¹ÇÑ´Ù. ´Ù½Ã
- <code>select</code>·Î µ¹¾Æ¿Ã ¶§±îÁö ¾î¶² Àڽĵµ ´Ù¸¥ ¼ÒÄÏ¿¡
- µé¾î¿Â ¿äûÀ» ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. (´ÙÁßÇÁ·Î¼¼¼­ ÄÄÇ»ÅÍ¿¡¼­)
- ½¬´Â ÀÚ½Ä °³¼ö¸¸Å­ CPU °³¼ö°¡ ÀÖ´Â µå¹® °æ¿ì°¡ ¾Æ´Ï¶ó¸é
- ÀÌ ÇØ°áÃ¥Àº º°·Î ÁÁ¾Æº¸ÀÌÁö ¾Ê´Â´Ù.</p>
-
- <p>´Ù¸¥ ¹æ¹ýÀº ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ¹æ¹ýÀ¸·Î ³»ºÎ ¹Ýº¹¹®¿¡
- ÇÑ Àڽĸ¸À» µé¿©º¸³½´Ù. ¹Ýº¹¹®Àº ´ÙÀ½°ú °°´Ù (Â÷À̸¦
- °­Á¶ÇßÀ½):</p>
-
- <example>
- for (;;) {<br />
- <indent>
- <strong>accept_mutex_on ();</strong><br />
- for (;;) {<br />
- <indent>
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&amp;accept_fds);<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- FD_SET (i, &amp;accept_fds);<br />
- </indent>
- }<br />
- rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
- if (rc &lt; 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i &lt;= last_socket; ++i) {<br />
- <indent>
- if (FD_ISSET (i, &amp;accept_fds)) {<br />
- <indent>
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- </indent>
- }<br />
- if (new_connection != -1) break;<br />
- </indent>
- }<br />
- <strong>accept_mutex_off ();</strong><br />
- process the new_connection;<br />
- </indent>
- }
- </example>
-
- <p><code>accept_mutex_on</code>°ú <code>accept_mutex_off</code>
- <a id="serialize" name="serialize">ÇÔ¼ö</a>´Â mutex ¼¼¸¶Æ÷¾î¸¦
- ±¸ÇöÇÑ´Ù. Çѹø¿¡ ¿ÀÁ÷ ÇÑ Àڽĸ¸ÀÌ mutex¸¦ °¡Áú ¼ö ÀÖ´Ù.
- mutex¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡ÁöÀÌ´Ù. ±¸Çö ¹æ¹ýÀº (1.3
- ÀÌÀü) <code>src/conf.h</code>³ª (1.3°ú ±× ÀÌÈÄ)
- <code>src/include/ap_config.h</code>¿¡ Á¤ÀǵÇÀÖ´Ù. ¾î¶²
- ¾ÆÅ°ÅØÃÄ´Â Àá±Ý(locking) ¹æ¹ýÀ» ¼±ÅÃÇÏÁö ¾Ê±â¶§¹®¿¡, ÀÌ·±
- ¾ÆÅ°ÅØÃÄ¿¡¼­ ¿©·¯ <directive
- module="mpm_common">Listen</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- À§ÇèÇÏ´Ù.</p>
-
- <p>½ÇÇà½Ã <directive
- module="mpm_common">AcceptMutex</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- mutex ±¸ÇöÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
-
- <dl>
- <dt><code>AcceptMutex flock</code></dt>
-
- <dd>
- <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>flock(2)</code>
- ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <directive
- module="mpm_common">LockFile</directive> Áö½Ã¾î·Î ÁöÁ¤).</p>
- </dd>
-
- <dt><code>AcceptMutex fcntl</code></dt>
-
- <dd>
- <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>fcntl(2)</code>
- ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <directive
- module="mpm_common">LockFile</directive> Áö½Ã¾î·Î ÁöÁ¤).</p>
- </dd>
-
- <dt><code>AcceptMutex sysvsem</code></dt>
-
- <dd>
- <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀ» SysV½Ä ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÏ¿©
- mutex¸¦ ±¸ÇöÇÑ´Ù. ºÒÇàÈ÷µµ SysV½Ä ¼¼¸¶Æ÷¾î´Â ³ª»Û
- ºÎÀÛ¿ëÀÌ ÀÖ´Ù. Çϳª´Â ¾ÆÆÄÄ¡°¡ ¼¼¸¶Æ÷¾î¸¦ Á¤¸®ÇÏÁö
- ¾Ê°í Á×À» ¼ö ÀÖ´Â Á¡ÀÌ´Ù (<code>ipcs(8)</code> manpage
- Âü°í). ´Ù¸¥ Çϳª´Â À¥¼­¹ö¿Í µ¿ÀÏÇÑ uid·Î ½ÇÇàÇÏ´Â
- CGI°¡ (<em>Áï,</em> <code>suexec</code>³ª
- <code>cgiwrapper</code>¸¦ »ç¿ëÇÏÁö¾Ê´Â ÇÑ ¸ðµç CGI)
- ¼¼¸¶Æ÷¾î API¸¦ »ç¿ëÇÏ¿© ¼­ºñ½º°ÅºÎ°ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â
- Á¡ÀÌ´Ù. ÀÌ·± ÀÌÀ¯¶§¹®¿¡ IRIX¸¦ Á¦¿ÜÇÑ ¾ÆÅ°ÅØÃÄ¿¡¼­
- ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù (´ëºÎºÐÀÇ IRIX ÄÄÇ»ÅÍ¿¡¼­
- ¾ÕÀÇ µÎ ¹æ¹ýÀº Áö³ªÄ¡°Ô ¹ö°Ì´Ù).</p>
- </dd>
-
- <dt><code>AcceptMutex pthread</code></dt>
-
- <dd>
- <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX mutex¸¦ »ç¿ëÇϱ⶧¹®¿¡
- POSIX ¾²·¹µå ±Ô¾àÀ» ¿ÏÀüÈ÷ ±¸ÇöÇÑ ¾ÆÅ°ÅØÃĶó¸é ¸ðµÎ
- »ç¿ë°¡´ÉÇÏÁö¸¸, (2.5 ÀÌÈÄ) Solaris¿¡¼­¸¸ ±×°Íµµ ƯÁ¤
- ±¸¼º¿¡¼­¸¸ µ¿ÀÛÇÏ´Â µíÇÏ´Ù. ÀÌ ¹æ¹ýÀ» ½ÃµµÇغ»´Ù¸é
- ¼­¹ö°¡ ¸ØÃç¼­ ÀÀ´äÀ» ¾ÈÇÏ´ÂÁö »ìÆìºÁ¾ß ÇÑ´Ù. Á¤Àû
- ³»¿ë¸¸ ¼­ºñ½ºÇÏ´Â ¼­¹ö´Â Àß µ¿ÀÛÇÏ´Â °Í °°´Ù.</p>
- </dd>
-
- <dt><code>AcceptMutex posixsem</code></dt>
-
- <dd>
- <p>(2.0°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÑ´Ù.
- mutex¸¦ °¡Áø ÇÁ·Î¼¼½ºÀÇ ¾²·¹µå°¡ Á״´ٸé(segfault)
- ¼¼¸¶Æ÷¾î ¼ÒÀ¯±ÇÀÌ È¸º¹µÇÁö ¾Ê¾Æ¼­ À¥¼­¹ö°¡ ¸ØÃá´Ù.</p>
- </dd>
-
- </dl>
-
- <p>½Ã½ºÅÛ¿¡ À§ ¸ñ·Ï¿¡ ¾ø´Â Á÷·ÄÈ­(serialization) ¹æ¹ýÀÌ
- ÀÖ´Ù¸é ±× ¹æ¹ýÀ» »ç¿ëÇÏ´Â Äڵ带 APR¿¡ Ãß°¡ÇÒ °¡Ä¡°¡ ÀÖ´Ù.</p>
-
- <p>°í·Á´Â ÇغÃÁö¸¸ ±¸ÇöÇÏÁö¾ÊÀº ´Ù¸¥ ¹æ¹ýÀº ºÎºÐÀûÀ¸·Î
- ¹Ýº¹¹®À» Á÷·ÄÈ­ÇÏ´Â ¹æ¹ýÀÌ´Ù. Áï, ÇÁ·Î¼¼¼­¸¦ ¸î°³¸¸ µé¿©º¸³»´Â
- °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¿©·¯ ÀÚ½ÄÀ» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö À־
- Á÷·ÄÈ­¶§¹®¿¡ Àüü ´ë¿ªÆøÀ» È°¿ëÇÏÁö ¸øÇÏ´Â ´ÙÁßÇÁ·Î¼¼¼­
- ÄÄÇ»ÅÍ¿¡¼­¸¸ °ü½ÉÀ» °¡Á®º¼ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î »ìÆ캼 ºÎºÐÀÌÁö¸¸,
- ¸Å¿ì º´·ÄÈ­µÈ À¥¼­¹ö°¡ ÈçÇÏÁö ¾Ê¾Æ¼­ ¿ì¼±¼øÀ§°¡ ³·´Ù.</p>
-
- <p>ÃÖ»óÀÇ ¼º´ÉÀ» ¾ò±âÀ§Çؼ­´Â ¿©·¯ <directive
- module="mpm_common">Listen</directive> ¹®À» »ç¿ëÇÏÁö ¾Ê´Â
- °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. ±×·¯³ª °è¼Ó ¼³¸íÇÑ´Ù.</p>
-
- </section>
-
- <section>
-
- <title>accept Á÷·ÄÈ­ - ¼ÒÄÏ ÇÑ°³</title>
-
- <p>¾ÕÀÇ ¼³¸íÀº ´ÙÁß¼ÒÄÏ ¼­¹ö¿¡´Â ÁÁÁö¸¸, ¼ÒÄÏÀÌ ÇÑ°³ÀÎ
- ¼­¹ö´Â ¾î¶²°¡? ¿¬°áÀÌ µµÂøÇÒ¶§±îÁö ¸ðµç ÀÚ½ÄÀÌ
- <code>accept(2)</code>¿¡¼­ ¸ØÃçÀֱ⶧¹®¿¡ ÀÌ·Ð»ó °°Àº
- ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê°í, °í°¥ ¹®Á¦µµ ¾ø´Ù. ±×·¯³ª ½ÇÁ¦·Î´Â
- ¾Õ¿¡¼­ ¸»ÇÑ ´ë±âÇÏÁö ¾Ê´Â (non-blocking) ¹æ¹ý¿¡¼­ ¹ß»ýÇÏ´Â
- "°øȸÀü(spinning)" Çö»óÀ» °¨Ãß°í ÀÖ´Ù. ´ëºÎºÐÀÇ TCP ½ºÅÃÀº
- ¿¬°áÀÌ µµÂøÇϸé Ä¿³ÎÀÌ <code>accept</code>¿¡¼­ ¸ØÃçÀÖ´Â
- ¸ðµç ÀÚ½ÄÀ» ±ú¿ìµµ·Ï ±¸ÇöµÇÀÖ´Ù. ÇÁ·Î¼¼½ºÁß ÇÑ°³°¡ ¿¬°áÀ»
- ¾ò°í »ç¿ëÀÚ¿µ¿ªÀ¸·Î µ¹¾Æ°¡°í, ³ª¸ÓÁö´Â Ä¿³Î¿¡¼­ °øȸÀüÇÏ¿©
- ¿¬°áÀÌ ¾øÀ½À» ¹ß°ßÇÏ¸é ´Ù½Ã ÀáÀ» ÀÜ´Ù. »ç¿ëÀÚ¿µ¿ª Äڵ忡¼­´Â
- ÀÌ·± °øȸÀüÀ» ¾Ë ¼ö ¾øÁö¸¸, ºÐ¸íÈ÷ Á¸ÀçÇÑ´Ù. ±×·¡¼­ ´ÙÁß¼ÒÄÏÀÇ
- ´ë±âÇÏÁö ¾Ê´Â ¹æ¹ý°ú µ¿ÀÏÇÏ°Ô ºÎÇϸ¦ ³ôÀÌ´Â ºÒÇÊ¿äÇÑ ÇൿÀÌ
- ÀϾ´Ù.</p>
-
- <p>±×·¡¼­ ¿ì¸®´Â ¿©·¯ ¾ÆÅ°ÅØÃÄ¿¡¼­ ¼ÒÄÏÀÌ ÇÑ°³ÀÎ °æ¿ì¿¡µµ
- Á÷·ÄÈ­ÇÏ¸é ´õ "Àß" µ¿ÀÛÇÔÀ» ¹ß°ßÇß´Ù. ±×·¡¼­ °ÅÀÇ ´ëºÎºÐÀÇ
- °æ¿ì ±âº»ÀûÀ¸·Î Á÷·ÄÈ­¸¦ »ç¿ëÇÑ´Ù. ¸®´ª½º¿¡¼­ (Ä¿³Î 2.0.30,
- 128Mb ¸Þ¸ð¸®¿¡ µà¾ó Pentium pro) ½ÇÇèÇÑ °á°ú ¼ÒÄÏ ÇÑ°³¸¦
- Á÷·ÄÈ­Çϸé ÇÏÁö ¾ÊÀº °æ¿ì¿¡ ºñÇØ ÃÊ´ç ¿äûÀÌ 3% ¹Ì¸¸
- ÁÙ¾îµé¾ú´Ù. ±×·¯³ª Á÷·ÄÈ­¸¦ ÇÏÁö ¾ÊÀº °æ¿ì ¿äû´ç 100ms
- Áö¿¬ÀÌ ¹ß»ýÇß´Ù. ÀÌ Áö¿¬Àº ¾Æ¸¶µµ LAN¿¡¼­ ¹ß»ýÇÏ´Â ±ä
- ¿¬°á¼±¶§¹®ÀÏ °ÍÀÌ´Ù. ¼ÒÄÏÀÌ ÇÑ°³ÀÎ °æ¿ì Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸·Á¸é <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code>¸¦
- Á¤ÀÇÇÑ´Ù.</p>
-
- </section>
-
- <section>
-
- <title>Close Áö¿¬(lingering)</title>
-
- <p><a
- href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
- draft-ietf-http-connection-00.txt</a> 8Àý¿¡¼­ ¼³¸íÇϵíÀÌ
- <strong>¾ÈÁ¤ÀûÀÎ</strong> À¥¼­¹ö°¡ µÇ·Á¸é, Åë½ÅÀÇ ¾ç ¹æÇâÀ»
- µ¶¸³ÀûÀ¸·Î ´ÝÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù (TCP ¿¬°áÀº ½Ö¹æÇâÀÌ°í,
- ¹æÇâÀº ¼­·Î µ¶¸³ÀûÀÌ´Ù). ÀÌÁ¡À» ´Ù¸¥ ¼­¹ö¿¡¼­´Â ÀÚÁÖ
- °£°úÇÏÁö¸¸, ¾ÆÆÄÄ¡´Â 1.2ºÎÅÍ Á¤È®È÷ ±¸ÇöÇØ¿Ô´Ù.</p>
-
- <p>ÀÌ ±â´ÉÀ» ºÎÁÖÀÇÇÏ°Ô ¾ÆÆÄÄ¡¿¡ Ãß°¡ÇßÀ»¶§ ¿©·¯ À¯´Ð½º
- ¹öÀü¿¡¼­ ¸¹Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù. TCP ±Ô¾àÀº
- <code>FIN_WAIT_2</code>¿¡ ŸÀӾƿôÀÌ ÀÖ´Ù°í Á¤ÇÏÁö ¾Ê¾ÒÁö¸¸,
- ±ÝÁöÇÏÁöµµ ¾Ê¾Ò´Ù. ŸÀӾƿôÀÌ ¾ø´Â ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡ 1.2´Â
- ¸¹Àº ¼ÒÄÏÀ» ¿µ¿øÈ÷ <code>FIN_WAIT_2</code> »óÅ·Π¸¸µé¾ú´Ù.
- ¸¹Àº °æ¿ì ÀÌ ¹®Á¦´Â Á¦Àۻ簡 Á¦°øÇÏ´Â ÃֽŠTCP/IP ÆÐÄ¡¸¦
- Àû¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Á¦Àۻ簡 ÆÐÄ¡¸¦ ¹ßÇ¥ÇÏÁö
- ¾Ê´Â °æ¿ì°¡ (<em>Áï,</em> SunOS4 -- ¼Ò½º ¶óÀ̼±½º°¡ ÀÖ´Â
- »ç¶÷Àº Á÷Á¢ ÆÐÄ¡ÇÒ ¼ö ÀÖÁö¸¸) Àֱ⶧¹®¿¡ ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
- ¾Ê±â·Î °áÁ¤Çß´Ù.</p>
-
- <p>¹æ¹ýÀº µÎ°¡Áö´Ù. Çϳª´Â ¼ÒÄÏ ¿É¼Ç <code>SO_LINGER</code>¸¦
- »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ±×·¯³ª ºÒÇàÈ÷µµ ´ëºÎºÐÀÇ TCP/IP ½ºÅÃÀº
- ÀÌ ¿É¼ÇÀ» ¿Ã¹Ù·Î ±¸ÇöÇÏÁö ¾Ê¾Ò´Ù. ¿Ã¹Ù·Î ±¸ÇöÇÑ ½ºÅÿ¡¼­
- Á¶Â÷µµ (<em>Áï,</em> ¸®´ª½º 2.0.31) ÀÌ ¹æ¹ýÀº ´ÙÀ½ ¹æ¹ýº¸´Ù
- ´õ cpu¸¦ Àâ¾Æ¸Ô´Â´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â º¸Åë (<code>http_main.c</code>¿¡ ÀÖ´Â)
- <code>lingering_close</code>¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â
- ´ëÃæ ´ÙÀ½°ú °°´Ù:</p>
-
- <example>
- void lingering_close (int s)<br />
- {<br />
- <indent>
- char junk_buffer[2048];<br />
- <br />
- /* shutdown the sending side */<br />
- shutdown (s, 1);<br />
- <br />
- signal (SIGALRM, lingering_death);<br />
- alarm (30);<br />
- <br />
- for (;;) {<br />
- <indent>
- select (s for reading, 2 second timeout);<br />
- if (error) break;<br />
- if (s is ready for reading) {<br />
- <indent>
- if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {<br />
- <indent>
- break;<br />
- </indent>
- }<br />
- /* just toss away whatever is here */<br />
- </indent>
- }<br />
- </indent>
- }<br />
- <br />
- close (s);<br />
- </indent>
- }
- </example>
-
- <p>ÀÌ ÄÚµå´Â ¿¬°áÀ» ´ÝÀ»¶§ ´õ CPU¸¦ »ç¿ëÇÏÁö¸¸, ¾ÈÁ¤ÀûÀÎ
- ±¸ÇöÀ» À§ÇØ ÇÊ¿äÇÏ´Ù. HTTP/1.1ÀÌ ´õ ³Î¸® ÆÛÁö°í ¸ðµç ¿¬°áÀ»
- À¯ÁöÇÑ´Ù¸é(persistent), ¿¬°áÀ» ¹Þ´Â ºñ¿ëÀº ¿©·¯ ¿äûÀ»
- ó¸®Çϸ鼭 »ó¼âµÉ °ÍÀÌ´Ù. À§ÇèÇÏ°Ôµµ
- <code>NO_LINGCLOSE</code>¸¦ Á¤ÀÇÇÏ¿© ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
- ¾ÊÀ» ¼ö ÀÖÁö¸¸, Àý´ë·Î ±ÇÇÏÁö ¾Ê´Â´Ù. ƯÈ÷ HTTP/1.1
- ÆÄÀÌÇÁ¶óÀÎ <transnote>¿¬°áÀ¯Áö »óÅ¿¡¼­ ÀÀ´äÀ» ±â´Ù¸®Áö
- ¾Ê°í ¿©·¯ ¿äûÀ» º¸³»´Â ±â¼ú</transnote> ¿¬°áÀ¯Áö¿¡´Â
- <code>lingering_close</code>°¡ ÇʼöÀûÀÌ´Ù (±×¸®°í <a
- href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
- ÆÄÀÌÇÁ¶óÀÎ ¿¬°áÀÌ ´õ ºü¸£±â¶§¹®¿¡</a> »ç¿ëÇÏ±æ ¹Ù¶ö °ÍÀÌ´Ù).</p>
-
- </section>
-
- <section>
-
- <title>Scoreboard ÆÄÀÏ</title>
-
- <p>¾ÆÆÄÄ¡ÀÇ ºÎ¸ð¿Í ÀÚ½ÄÀº scoreboard¶ó´Â °ÍÀ» ÅëÇØ ¼­·Î
- Åë½ÅÇÑ´Ù. ÀÌ»óÀûÀ¸·Î´Â scoreboard¸¦ °øÀ¯¸Þ¸ð¸®·Î ±¸ÇöÇؾß
- ÇÑ´Ù. ¿ì¸® °³¹ßÀÚ°¡ ÇØ´ç ¿î¿µÃ¼Á¦¿¡ Á¢±ÙÇÒ ¼ö Àְųª »ó¼¼ÇÑ
- Æ÷Æà °á°ú¸¦ ¹ÞÀº °æ¿ì º¸Åë °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù.
- ³ª¸ÓÁö´Â µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏÀ» »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù. µð½ºÅ©¿¡
- ÀÖ´Â ÆÄÀÏÀº ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁø´Ù (±â´Éµµ ´õ Àû´Ù).
- <code>src/main/conf.h</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃĸ¦
- ã¾Æ¼­ <code>USE_MMAP_SCOREBOARD</code> ȤÀº
- <code>USE_SHMGET_SCOREBOARD</code>ÀÎÁö È®ÀÎÇÑ´Ù. µÑÁß
- Çϳª¸¦ (°¢°¢ ÇÔ²² »ç¿ëÇÒ <code>HAVE_MMAP</code>À̳ª
- <code>HAVE_SHMGET</code>µµ °°ÀÌ) Á¤ÀÇÇÏ¸é °øÀ¯¸Þ¸ð¸® Äڵ带
- »ç¿ëÇÑ´Ù. ½Ã½ºÅÛÀÌ ´Ù¸¥ Á¾·ùÀÇ °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù¸é
- <code>src/main/http_main.c</code> ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© ¾ÆÆÄÄ¡¿¡¼­
- °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÈÅ(hook)À» Ãß°¡Ç϶ó. (¶ÇÇÑ
- ÆÐÄ¡¸¦ ¿ì¸®¿¡°Ô º¸³»ÁÖ±æ ¹Ù¶õ´Ù.)</p>
-
- <note>¿ª»çÀû ¼³¸í: ¾ÆÆÄÄ¡ÀÇ ¸®´ª½º ¹öÀüÀº ¾ÆÆÄÄ¡ 1.2 ¹öÀüºÎÅÍ
- °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇϱ⠽ÃÀÛÇß´Ù. ¸®´ª½º¿¡¼­ Ãʱ⠾ÆÆÄÄ¡
- ¹öÀüÀÌ ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁ³±â ¶§¹®ÀÌ´Ù.</note>
-
- </section>
-
- <section>
-
- <title>DYNAMIC_MODULE_LIMIT</title>
-
- <p>¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÌÁö ¾Ê´Â´Ù¸é (°¡´ÉÇÑ Á¶±ÝÀ̶óµµ
- ¼º´ÉÀ» ³ôÀ̱âÀ§ÇØ ÀÌ ±ÛÀ» ÀÐ´Â´Ù¸é ¾Æ¸¶µµ ¸ðµâÀ» µ¿ÀûÀ¸·Î
- ÀоîµéÀÌÁö ¾ÊÀ» °ÍÀÌ´Ù), ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§
- <code>-DDYNAMIC_MODULE_LIMIT=0</code>À» Ãß°¡ÇÑ´Ù. ±×·¯¸é
- ¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀ̱âÀ§ÇØ ÇÒ´çÇÏ´Â ¸Þ¸ð¸®¸¦ Àý¾àÇÑ´Ù.</p>
-
- </section>
-
- </section>
-
- <section id="trace">
-
- <title>ºÎ·Ï: ½Ã½ºÅÛÈ£Ãâ ±â·ÏÀ» ÀÚ¼¼È÷ ºÐ¼®Çϱâ</title>
-
- <p>´ÙÀ½Àº Solaris 8¿¡¼­ worker MPMÀ» »ç¿ëÇÑ ¾ÆÆÄÄ¡ 2.0.38ÀÇ
- ½Ã½ºÅÛÈ£Ãâ ±â·Ï(trace)ÀÌ´Ù. ¾Æ·¡ ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ±â·ÏÀ»
- ¾ò¾ú´Ù:</p>
-
- <example>
- truss -l -p <var>httpd_child_pid</var>.
- </example>
-
- <p><code>-l</code> ¿É¼ÇÀ» »ç¿ëÇϸé truss´Â ½Ã½ºÅÛÈ£ÃâÀ»
- ÇÏ´Â LWP (lightweight process, °æ·®±Þ ÇÁ·Î¼¼½º--SolarisÀÇ
- Ä¿³Î¼öÁØ ¾²·¹µå) ID¸¦ °°ÀÌ ±â·ÏÇÑ´Ù.</p>
-
- <p>´Ù¸¥ ½Ã½ºÅÛ¿¡´Â <code>strace</code>, <code>ktrace</code>,
- <code>par</code> °°Àº ½Ã½ºÅÛÈ£Ãâ ÃßÀû µµ±¸°¡ ÀÖ´Ù. °á°ú´Â
- ºñ½ÁÇÏ´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®´Â À¥¼­¹ö¿¡°Ô Å©±â°¡ 10KBÀÎ Á¤Àû ÆÄÀÏÀ» ¿äûÇÑ´Ù.
- Á¤ÀûÀÎ ÆÄÀÏÀ» ¿äûÇÏÁö ¾Ê°Å³ª ³»¿ëÇù»óÇÏ´Â ¿äûÀ» ÇÑ °æ¿ì
- ±â·ÏÀÌ ¸Å¿ì ´Ù¸£´Ù (¶§·Î´Â ¸Å¿ì ¾Ë¾Æº¸±â Èûµé´Ù).</p>
-
- <example>
-<pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
-/67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre>
- </example>
-
- <p>À§¿¡¼­ ¿¬°á´ë±â(listener) ¾²·¹µå°¡ LWP #67¿¡¼­ ½ÇÇàµÊÀ»
- ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <note><code>accept(2)</code> Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇ϶ó.
- ¿©·¯ Æ÷Æ®¸¦ ±â´Ù¸®Áö¾Ê´Â °æ¿ì ÀÌ Ç÷¡ÆûÀÇ worker MPMÀº
- ±âº»ÀûÀ¸·Î Á÷·ÄÈ­ÇÏÁö ¾ÊÀº accept¸¦ »ç¿ëÇÑ´Ù.</note>
-
- <example>
-<pre>/65: lwp_park(0x00000000, 0) = 0
-/67: lwp_unpark(65, 1) = 0</pre>
- </example>
-
- <p>¿¬°áÀº ¹Þ¾ÆµéÀÌ°í(accept) ¿¬°á´ë±â ¾²·¹µå´Â
- worker ¾²·¹µå¸¦ ±ú¿ö¼­ ¿äûÀ» ó¸®ÇÏ°Ô ÇÑ´Ù. ¾Æ·¡ ±â·Ï¿¡¼­
- ¿äûÀ» ó¸®ÇÏ´Â worker ¾²·¹µå°¡ LWP #65ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <example>
-<pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre>
- </example>
-
- <p>°¡»óÈ£½ºÆ®¸¦ ±¸ÇöÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â ¿¬°áÀ» ¹Þ¾ÆµéÀÎ
- Áö¿ª(local) ¼ÒÄÏ ÁÖ¼Ò¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. (°¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏÁö
- ¾Ê°Å³ª <directive module="mpm_common">Listen</directive>
- Áö½Ã¾î¿¡ ¿ÍÀϵåÄ«µå ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì µî) ¸¹Àº °æ¿ì
- ÀÌ È£ÃâÀ» ¾ø¾Ù ¼ö ÀÖ´Ù. ±×·¯³ª ¾ÆÁ÷ ÀÌ·± ÃÖÀûÈ­ ÀÛ¾÷ÀÌ
- ¾ÈµÇÀÖ´Ù. </p>
-
- <example>
-<pre>/65: brk(0x002170E8) = 0
-/65: brk(0x002190E8) = 0</pre>
- </example>
-
- <p><code>brk(2)</code> È£ÃâÀº Èü(heap)¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù.
- À¥¼­¹ö´Â ´ëºÎºÐÀÇ ¿äû 󸮽à ÀÚü ¸Þ¸ð¸®
- ÇÒ´çÀÚ(<code>apr_pool</code>°ú <code>apr_bucket_alloc</code>)¸¦
- »ç¿ëÇϱ⶧¹®¿¡ ½Ã½ºÅÛÈ£Ãâ ±â·Ï¿¡¼­ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» º¸±â°¡
- µå¹°´Ù. ÀÌ ±â·Ï¿¡¼­ À¥¼­¹ö´Â ½ÃÀÛÇÏÀÚ¸¶ÀÚ ÀÚü ¸Þ¸ð¸® ÇÒ´çÀÚ°¡
- »ç¿ëÇÒ ¸Þ¸ð¸®ºí·ÏÀ» ¾ò±âÀ§ÇØ <code>malloc(3)</code>À» È£ÃâÇÑ´Ù.</p>
-
- <example>
-<pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
-/65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
-/65: fcntl(9, F_SETFL, 0x00000082) = 0</pre>
- </example>
-
- <p>´ÙÀ½ worker ¾²·¹µå´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á(ÆÄÀϱâ¼úÀÚ 9)À»
- ´ë±â¾ÈÇÔ(non-blocking) »óÅ·Π¹Ù²Û´Ù. <code>setsockopt(2)</code>¿Í
- <code>getsockopt(2)</code> È£ÃâÀº SolarisÀÇ libc°¡ ¼ÒÄÏ¿¡
- ´ëÇÑ <code>fcntl(2)</code>À» ¾î¶»°Ô ó¸®ÇÏ´ÂÁö º¸¿©ÁØ´Ù.</p>
-
- <example>
-<pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre>
- </example>
-
- <p>worker ¾²·¹µå´Â Ŭ¶óÀ̾ðÆ®·Î ºÎÅÍ ¿äûÀ» Àд´Ù.</p>
-
- <example>
-<pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
-/65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre>
- </example>
-
- <p>À¥¼­¹ö ¼³Á¤Àº <code>Options FollowSymLinks</code>¿Í
- <code>AllowOverride None</code>ÀÌ´Ù. ±×·¡¼­ ¿äûÇÑ ÆÄÀÏ°æ·ÎÀÇ
- °¢ µð·ºÅ丮¿¡ ´ëÇØ <code>lstat(2)</code>Çϰųª
- <code>.htaccess</code> ÆÄÀÏÀ» °Ë»çÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÆÄÀÏÀ»
- °Ë»çÇϱâÀ§ÇØ, 1) ÆÄÀÏÀÌ ÀÖ´ÂÁö, 2) µð·ºÅ丮°¡ ¾Æ´Ñ ÀϹÝÆÄÀÏÀÎÁö,
- <code>stat(2)</code> È£Ã⸸ ÇÏ¸é µÈ´Ù.</p>
-
- <example>
-<pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre>
- </example>
-
- <p>ÀÌ °æ¿ì À¥¼­¹ö´Â ÇѹøÀÇ <code>sendfilev(2)</code> ½Ã½ºÅÛÈ£Ãâ·Î
- HTTP ÀÀ´äÇì´õ¿Í ¿äûÇÑ ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Ù. Sendfile Áö¿ø¿©ºÎ´Â
- ¿î¿µÃ¼Á¦¸¶´Ù ´Ù¸£´Ù. ´Ù¸¥ ½Ã½ºÅÛÀ̶ó¸é <code>sendfile(2)</code>À»
- È£ÃâÇϱâ Àü¿¡ Çì´õ¸¦ º¸³»±âÀ§ÇØ <code>write(2)</code>³ª
- <code>writev(2)</code> È£ÃâÀ» ÇÑ´Ù.</p>
-
- <example>
-<pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre>
- </example>
-
- <p><code>write(2)</code> È£ÃâÀº Á¢±Ù·Î±×(access log)¿¡ ¿äûÀ»
- ±â·ÏÇÑ´Ù. ÀÌ ±â·Ï¿¡ <code>time(2)</code> È£ÃâÀÌ ¾øÀ½À» ÁÖ¸ñÇ϶ó.
- ¾ÆÆÄÄ¡ 1.3°ú ´Þ¸® ¾ÆÆÄÄ¡ 2.0Àº ½Ã°£À» ¾Ë±âÀ§ÇØ
- <code>gettimeofday(3)</code>¸¦ »ç¿ëÇÑ´Ù.
- <code>gettimeofday</code>¸¦ ÃÖÀûÈ­ÇÑ ¸®´ª½º¿Í Solaris °°Àº
- ¸î¸î ¿î¿µÃ¼Á¦¿¡¼­´Â ÀϹÝÀûÀÎ ½Ã½ºÅÛÈ£Ã⠺δãÀÌ ¾ø´Ù.</p>
-
- <example>
-<pre>/65: shutdown(9, 1, 1) = 0
-/65: poll(0xFAF7B980, 1, 2000) = 1
-/65: read(9, 0xFAF7BC20, 512) = 0
-/65: close(9) = 0</pre>
- </example>
-
- <p>worker ¾²·¹µå´Â ¿¬°áÀ» Áö¿¬´Ý±â(lingering close)ÇÑ´Ù.</p>
-
- <example>
-<pre>/65: close(10) = 0
-/65: lwp_park(0x00000000, 0) (sleeping...)</pre>
- </example>
-
- <p>¸¶Áö¸·À¸·Î worker ¾²·¹µå´Â ¹æ±Ý Àü¼ÛÇÑ ÆÄÀÏÀ» ´Ý°í,
- ¿¬°á´ë±â(listener) ¾²·¹µå°¡ ´Ù¸¥ ¿¬°áÀ» ÇÒ´çÇÒ ¶§±îÁö
- Á¤ÁöÇÑ´Ù.</p>
-
- <example>
-<pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre>
- </example>
-
- <p>±×µ¿¾È ¿¬°á´ë±â ¾²·¹µå´Â ¿¬°áÀ» (¸ðµç worker°¡ ÀÛ¾÷ÁßÀ̸é
- ¿¬°á´ë±â ¾²·¹µå¸¦ ¸ØÃß´Â worker MPMÀÇ È帧Á¦¾î ±â´É¿¡ µû¶ó)
- worker ¾²·¹µå¿¡ ÇÒ´çÇÏÀÚ¸¶ÀÚ ´Ù¸¥ ¿¬°áÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù.
- ÀÌ ±â·Ï¿¡´Â ³ª¿ÀÁö ¾ÊÁö¸¸, worker ¾²·¹µå°¡ ¹æ±Ý ¹ÞÀº ¿¬°áÀ»
- ó¸®ÇÏ´Â µ¿¾È ´ÙÀ½ <code>accept(2)</code>°¡ (¿äûÀÌ ¸Å¿ì
- ¸¹Àº °æ¿ì Ç×»ó) ÀϾ ¼ö ÀÖ´Ù.</p>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/misc/perf-tuning.xml.meta b/docs/manual/misc/perf-tuning.xml.meta
deleted file mode 100644
index 190912da28..0000000000
--- a/docs/manual/misc/perf-tuning.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>perf-tuning</basename>
- <path>/misc/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/misc/relevant_standards.html b/docs/manual/misc/relevant_standards.html
deleted file mode 100644
index ca9e9006c3..0000000000
--- a/docs/manual/misc/relevant_standards.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: relevant_standards.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: relevant_standards.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/misc/relevant_standards.html.en b/docs/manual/misc/relevant_standards.html.en
deleted file mode 100644
index 4405e7cf4e..0000000000
--- a/docs/manual/misc/relevant_standards.html.en
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Relevant Standards - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>Relevant Standards</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/misc/relevant_standards.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/relevant_standards.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This page documents all the relevant standards that the
- Apache HTTP Server follows, along with brief descriptions.</p>
-
- <p>In addition to the information listed below, the following resources
- should be consulted:</p>
-
- <ul>
- <li>
- <a href="http://purl.org/NET/http-errata">
- http://purl.org/NET/http-errata</a> - HTTP/1.1 Specification Errata
- </li>
- <li>
- <a href="http://www.rfc-editor.org/errata.html">
- http://www.rfc-editor.org/errata.html</a> - RFC Errata
- </li>
- <li>
- <a href="http://ftp.ics.uci.edu/pub/ietf/http/#RFC">
- http://ftp.ics.uci.edu/pub/ietf/http/#RFC</a> - A pre-compiled list
- of HTTP related RFCs
- </li>
- </ul>
-
- <div class="warning"><h3>Notice</h3>
- <p>This document is not yet complete.</p>
- </div>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#http_recommendations">HTTP Recommendations</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#html_recommendations">HTML Recommendations</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authentication">Authentication</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#language_country_codes">Language/Country Codes</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="http_recommendations" id="http_recommendations">HTTP Recommendations</a></h2>
-
- <p>Regardless of what modules are compiled and used, Apache as a
- basic web server complies with the following IETF recommendations:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc1945.txt">RFC 1945</a>
- (Informational)</dt>
-
- <dd>The Hypertext Transfer Protocol (HTTP) is an application-level
- protocol with the lightness and speed necessary for distributed,
- collaborative, hypermedia information systems. This documents
- HTTP/1.0.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a>
- (Standards Track)</dt>
-
- <dd>The Hypertext Transfer Protocol (HTTP) is an
- application-level protocol for distributed, collaborative,
- hypermedia information systems. This documents HTTP/1.1.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2396.txt">RFC 2396</a>
- (Standards Track)</dt>
-
- <dd>A Uniform Resource Identifier (URI) is a compact string of
- characters for identifying an abstract or physical resource.</dd>
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="html_recommendations" id="html_recommendations">HTML Recommendations</a></h2>
-
- <p>Regarding the Hypertext Markup Language, Apache complies with
- the following IETF and W3C recommendations:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2854.txt">RFC 2854</a>
- (Informational)</dt>
-
- <dd>This document summarizes the history of HTML development,
- and defines the "text/html" MIME type by pointing to the relevant
- W3C recommendations.</dd>
-
- <dt><a href="http://www.w3.org/TR/html401">HTML 4.01 Specification</a>
- (<a href="http://www.w3.org/MarkUp/html4-updates/errata">Errata</a>)
- </dt>
-
- <dd>This specification defines the HyperText Markup Language (HTML),
- the publishing language of the World Wide Web. This specification
- defines HTML 4.01, which is a subversion of HTML 4.</dd>
-
- <dt><a href="http://www.w3.org/TR/REC-html32">HTML 3.2 Reference
- Specification</a></dt>
-
- <dd>The HyperText Markup Language (HTML) is a simple markup language
- used to create hypertext documents that are portable from one
- platform to another. HTML documents are SGML documents.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml11/">XHTML 1.1 -
- Module-based XHTML</a>
- (<a href="http://www.w3.org/2001/04/REC-xhtml-modularization-20010410-errata">Errata</a>)
- </dt>
-
- <dd>This Recommendation defines a new XHTML document type
- that is based upon the module framework and modules defined in
- Modularization of XHTML.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml1">XHTML 1.0 The
- Extensible HyperText Markup Language (Second Edition)</a>
- (<a href="http://www.w3.org/2002/08/REC-xhtml1-20020801-errata">Errata</a>)
- </dt>
-
- <dd>This specification defines the Second Edition of XHTML 1.0,
- a reformulation of HTML 4 as an XML 1.0 application, and three
- DTDs corresponding to the ones defined by HTML 4.</dd>
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authentication" id="authentication">Authentication</a></h2>
-
- <p>Concerning the different methods of authentication, Apache
- follows the following IETF recommendations:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2617.txt">RFC 2617</a>
- (Draft standard)</dt>
-
- <dd>"HTTP/1.0", includes the specification for a Basic
- Access Authentication scheme.</dd>
-
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="language_country_codes" id="language_country_codes">Language/Country Codes</a></h2>
-
- <p>The following links document ISO and other language and country
- code information:</p>
-
- <dl>
- <dt><a href="http://www.loc.gov/standards/iso639-2/">ISO 639-2</a></dt>
-
- <dd>ISO 639 provides two sets of language codes, one as a two-letter
- code set (639-1) and another as a three-letter code set (this part
- of ISO 639) for the representation of names of languages.</dd>
-
- <dt><a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html">
- ISO 3166-1</a></dt>
-
- <dd>These pages document the country names (official short names
- in English) in alphabetical order as given in ISO 3166-1 and the
- corresponding ISO 3166-1-alpha-2 code elements.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">BCP 47</a>
- (Best Current Practice),
- <a href="http://www.rfc-editor.org/rfc/rfc3066.txt">RFC 3066</a></dt>
-
- <dd>This document describes a language tag for use in cases where
- it is desired to indicate the language used in an information
- object, how to register values for use in this language tag,
- and a construct for matching such language tags.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc3282.txt">RFC 3282</a>
- (Standards Track)</dt>
-
- <dd>This document defines a "Content-language:" header, for use in
- cases where one desires to indicate the language of something that
- has RFC 822-like headers, like MIME body parts or Web documents,
- and an "Accept-Language:" header for use in cases where one wishes
- to indicate one's preferences with regard to language.</dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/misc/relevant_standards.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/relevant_standards.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/relevant_standards.html.ko.euc-kr b/docs/manual/misc/relevant_standards.html.ko.euc-kr
deleted file mode 100644
index cf06d559b9..0000000000
--- a/docs/manual/misc/relevant_standards.html.ko.euc-kr
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>°ü·Ã Ç¥ÁØ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>°ü·Ã Ç¥ÁØ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/relevant_standards.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/relevant_standards.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­¿¡´Â °£´ÜÇÑ ¼³¸í°ú ÇÔ²² ¾ÆÆÄÄ¡ À¥¼­¹ö°¡ µû¸£´Â
- ¸ðµç °ü·Ã Ç¥ÁØÀ» ¿­°ÅÇÑ´Ù.</p>
-
- <p>¾Æ·¡ Á¤º¸¿¡ ´õÇÏ¿© ´ÙÀ½ ÀÚ·áµµ »ìÆìºÁ¾ß ÇÑ´Ù:</p>
-
- <ul>
- <li>
- <a href="http://purl.org/NET/http-errata">
- http://purl.org/NET/http-errata</a> - HTTP/1.1 ±Ô¾à
- Á¤¿ÀÇ¥
- </li>
- <li>
- <a href="http://www.rfc-editor.org/errata.html">
- http://www.rfc-editor.org/errata.html</a> - RFC Á¤¿ÀÇ¥
- </li>
- <li>
- <a href="http://ftp.ics.uci.edu/pub/ietf/http/#RFC">
- http://ftp.ics.uci.edu/pub/ietf/http/#RFC</a> - HTTP
- °ü·Ã RFC ¸ñ·Ï
- </li>
- </ul>
-
- <div class="warning"><h3>ÁÖÀÇ</h3>
- <p>ÀÌ ¹®¼­´Â ¾ÆÁ÷ ¿ÏÀüÇÏÁö ¾Ê´Ù.</p>
- </div>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#http_recommendations">HTTP ±Ç°í</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#html_recommendations">HTML ±Ç°í</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authentication">ÀÎÁõ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#language_country_codes">¾ð¾î/±¹°¡ ÄÚµå</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="http_recommendations" id="http_recommendations">HTTP ±Ç°í</a></h2>
-
- <p>¾î¶² ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í »ç¿ëÇÏ´ÂÁö¿Í °ü°è¾øÀÌ ±âº»ÀûÀ¸·Î
- À¥¼­¹öÀÎ ¾ÆÆÄÄ¡´Â ´ÙÀ½ IETF ±Ç°í(recommendation)¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc1945.txt">RFC 1945</a>
- (Informational)</dt>
-
- <dd>ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ (Hypertext Transfer Protocol,
- HTTP)Àº ºÐ»ê, Çùµ¿, ÇÏÀÌÆÛ¸Åü Á¤º¸ ½Ã½ºÅÛ¿¡ ÇÊ¿äÇÑ ºü¸£°í
- °¡º­¿î ¾îÇø®ÄÉÀÌ¼Ç ¼öÁØ(application-level) ÇÁ·ÎÅäÄÝÀÌ´Ù.
- ÀÌ ¹®¼­´Â HTTP/1.0À» ¼³¸íÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a>
- (Standards Track)</dt>
-
- <dd>ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ (Hypertext Transfer Protocol,
- HTTP)Àº ºÐ»ê, Çùµ¿, ÇÏÀÌÆÛ¸Åü Á¤º¸ ½Ã½ºÅÛÀ» À§ÇÑ ¾îÇø®ÄÉÀ̼Ç
- ¼öÁØ ÇÁ·ÎÅäÄÝÀÌ´Ù. ÀÌ ¹®¼­´Â HTTP/1.1À» ¼³¸íÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2396.txt">RFC 2396</a>
- (Standards Track)</dt>
-
- <dd>Ç¥ÁØ ÀÚ¿ø ½Äº°ÀÚ (Uniform Resource Identifier, URI)´Â
- Ãß»óÀû ȤÀº ¹°¸®Àû ÀÚ¿øÀ» ½Äº°ÇϱâÀ§ÇÑ ÂªÀº ¹®ÀÚ¿­ÀÌ´Ù.</dd>
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="html_recommendations" id="html_recommendations">HTML ±Ç°í</a></h2>
-
- <p>ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷ ¾ð¾î (Hypertext Markup Language,
- HTML)¿Í °ü·ÃÇÏ¿© ¾ÆÆÄÄ¡´Â ´ÙÀ½ IETF ±Ç°í¿Í W3C ±Ç°í¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2854.txt">RFC 2854</a>
- (Informational)</dt>
-
- <dd>ÀÌ ¹®¼­´Â HTML °³¹ß°úÁ¤À» ¿ä¾àÇÏ°í, °ü·Ã W3C ±Ç°í¸¦
- ±â¹ÝÀ¸·Î "text/html" MIME typeÀ» Á¤ÀÇÇÑ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/html401">HTML 4.01 ±Ô¾à</a>
- (<a href="http://www.w3.org/MarkUp/html4-updates/errata">Errata</a>)
- </dt>
-
- <dd>ÀÌ ±Ô¾àÀº ¿ùµå¿ÍÀ̵åÀ¥ÀÇ ÃâÆǾð¾îÀÎ ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷
- ¾ð¾î (Hypertext Markup Language, HTML)¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ
- ±Ô¾àÀº HTML 4ÀÇ ÇÏÀ§¹öÀüÀÎ HTML 4.01À» Á¤ÀÇÇÑ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/REC-html32">HTML 3.2 Âü°í ±Ô¾à</a></dt>
-
- <dd>ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷ ¾ð¾î (Hypertext Markup Language,
- HTML)´Â Ç÷¡Æû°ú ¹«°üÇÑ ÇÏÀÌÆÛÅؽºÆ® ¹®¼­¸¦ À§ÇÑ °£´ÜÇÑ
- ¸¶Å©¾÷ ¾ð¾îÀÌ´Ù. HTML ¹®¼­´Â SGML ¹®¼­À̱⵵ ÇÏ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml11/">XHTML 1.1 -
- ¸ðµâ±â¹Ý XHTML</a>
- (<a href="http://www.w3.org/2001/04/REC-xhtml-modularization-20010410-errata">Á¤¿ÀÇ¥</a>)
- </dt>
-
- <dd>ÀÌ ±Ç°í´Â Modularization of XHTML¿¡¼­ Á¤ÀÇÇÑ ¸ðµâ
- Ç÷¹ÀÓ¿öÅ©¿Í ¸ðµâµéÀ» ±â¹ÝÀ¸·Î »õ·Î¿î XHTML document typeÀ»
- Á¤ÀÇÇÑ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml1">XHTML 1.0
- È®Àå ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷ ¾ð¾î (Extensible HyperText Markup
- Language) (Second Edition)</a>
- (<a href="http://www.w3.org/2002/08/REC-xhtml1-20020801-errata">Á¤¿ÀÇ¥</a>)
- </dt>
-
- <dd>ÀÌ ¹®¼­´Â HTML 4¸¦ XML 1.0À¸·Î À籸¼ºÇÑ XHTML 1.0ÀÇ
- µÎ¹ø° ¹öÀü°ú HTML 4¿¡ ÇØ´çÇÏ´Â ¼¼°¡Áö DTD¸¦ Á¤ÀÇÇÑ´Ù.</dd>
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="authentication" id="authentication">ÀÎÁõ</a></h2>
-
- <p>ÀÎÁõ¹æ¹ý¿¡ ´ëÇØ ¾ÆÆÄÄ¡´Â ´ÙÀ½ IETF ±Ç°í¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2617.txt">RFC 2617</a>
- (Draft standard)</dt>
-
- <dd>Basic Access Authentication ±Ô¾àÀ» Æ÷ÇÔÇÑ "HTTP/1.0".</dd>
-
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="language_country_codes" id="language_country_codes">¾ð¾î/±¹°¡ ÄÚµå</a></h2>
-
- <p>¾Æ·¡ ¸µÅ©¿¡ ISO¿Í ´Ù¸¥ ¾ð¾î/±¹°¡ ÄÚµå Á¤º¸°¡ ÀÖ´Ù:</p>
-
- <dl>
- <dt><a href="http://www.loc.gov/standards/iso639-2/">ISO 639-2</a></dt>
-
- <dd>ISO 639´Â ¾ð¾îÀÇ À̸§À» ³ªÅ¸³»´Â µÎ°¡Áö ¾ð¾î Äڵ带
- Á¦°øÇÑ´Ù. Çϳª´Â (639-1) µÎ ±ÛÀÚ ÄÚµåÀÌ°í ´Ù¸¥ Çϳª´Â
- (ÀÌ ¹®¼­) ¼¼ ±ÛÀÚ ÄÚµåÀÌ´Ù.</dd>
-
- <dt><a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html">
- ISO 3166-1</a></dt>
-
- <dd>ÀÌ ¹®¼­´Â ISO 3166-1°ú ISO 3166-1-alpha-2 Äڵ忡 µû¶ó
- ¾ËÆĺª ¼ø¼­·Î (¿µ¾î·Î ªÀº °ø½ÄÀ̸§) ±¹°¡¸íÀ» ¿­°ÅÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">BCP 47</a>
- (Best Current Practice),
- <a href="http://www.rfc-editor.org/rfc/rfc3066.txt">RFC 3066</a></dt>
-
- <dd>ÀÌ ¹®¼­´Â Á¤º¸ °´Ã¼¿¡ »ç¿ëÇÑ ¾ð¾î¸¦ ¾Ë¸®±âÀ§ÇØ »ç¿ëÇÒ
- ¾ð¾î ÅÂ±×¿Í ¾ð¾î ű׿¡ »ç¿ëÇÒ °ªÀ» µî·ÏÇÏ´Â ¹æ¹ý, ¾ð¾î
- ű׸¦ ã´Â ¹æ½ÄÀ» ¼³¸íÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc3282.txt">RFC 3282</a>
- (Standards Track)</dt>
-
- <dd>ÀÌ ¹®¼­´Â MIME ³»¿ë ºÎºÐ°ú À¥ ¹®¼­¿Í °°Àº RFC 822½Ä
- Çì´õ°¡ ÀÖ´Â Á¤º¸ÀÇ ¾ð¾î¸¦ ¾Ë¸®±âÀ§ÇÑ "Content-language:"
- Çì´õ¿Í, ¼±È£ÇÏ´Â ¾ð¾î¸¦ ³ªÅ¸³»´Â "Accept-Language:" Çì´õ¸¦
- Á¤ÀÇÇÑ´Ù.</dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/relevant_standards.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/relevant_standards.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/relevant_standards.xml b/docs/manual/misc/relevant_standards.xml
deleted file mode 100644
index e828a04384..0000000000
--- a/docs/manual/misc/relevant_standards.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="relevant_standards.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>Relevant Standards</title>
-
- <summary>
- <p>This page documents all the relevant standards that the
- Apache HTTP Server follows, along with brief descriptions.</p>
-
- <p>In addition to the information listed below, the following resources
- should be consulted:</p>
-
- <ul>
- <li>
- <a href="http://purl.org/NET/http-errata">
- http://purl.org/NET/http-errata</a> - HTTP/1.1 Specification Errata
- </li>
- <li>
- <a href="http://www.rfc-editor.org/errata.html">
- http://www.rfc-editor.org/errata.html</a> - RFC Errata
- </li>
- <li>
- <a href="http://ftp.ics.uci.edu/pub/ietf/http/#RFC">
- http://ftp.ics.uci.edu/pub/ietf/http/#RFC</a> - A pre-compiled list
- of HTTP related RFCs
- </li>
- </ul>
-
- <note type="warning"><title>Notice</title>
- <p>This document is not yet complete.</p>
- </note>
-
- </summary>
-
- <section id="http_recommendations"><title>HTTP Recommendations</title>
-
- <p>Regardless of what modules are compiled and used, Apache as a
- basic web server complies with the following IETF recommendations:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc1945.txt">RFC 1945</a>
- (Informational)</dt>
-
- <dd>The Hypertext Transfer Protocol (HTTP) is an application-level
- protocol with the lightness and speed necessary for distributed,
- collaborative, hypermedia information systems. This documents
- HTTP/1.0.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a>
- (Standards Track)</dt>
-
- <dd>The Hypertext Transfer Protocol (HTTP) is an
- application-level protocol for distributed, collaborative,
- hypermedia information systems. This documents HTTP/1.1.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2396.txt">RFC 2396</a>
- (Standards Track)</dt>
-
- <dd>A Uniform Resource Identifier (URI) is a compact string of
- characters for identifying an abstract or physical resource.</dd>
- </dl>
-
- </section>
-
- <section id="html_recommendations"><title>HTML Recommendations</title>
-
- <p>Regarding the Hypertext Markup Language, Apache complies with
- the following IETF and W3C recommendations:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2854.txt">RFC 2854</a>
- (Informational)</dt>
-
- <dd>This document summarizes the history of HTML development,
- and defines the "text/html" MIME type by pointing to the relevant
- W3C recommendations.</dd>
-
- <dt><a href="http://www.w3.org/TR/html401">HTML 4.01 Specification</a>
- (<a href="http://www.w3.org/MarkUp/html4-updates/errata">Errata</a>)
- </dt>
-
- <dd>This specification defines the HyperText Markup Language (HTML),
- the publishing language of the World Wide Web. This specification
- defines HTML 4.01, which is a subversion of HTML 4.</dd>
-
- <dt><a href="http://www.w3.org/TR/REC-html32">HTML 3.2 Reference
- Specification</a></dt>
-
- <dd>The HyperText Markup Language (HTML) is a simple markup language
- used to create hypertext documents that are portable from one
- platform to another. HTML documents are SGML documents.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml11/">XHTML 1.1 -
- Module-based XHTML</a>
- (<a href="http://www.w3.org/2001/04/REC-xhtml-modularization-20010410-errata">Errata</a>)
- </dt>
-
- <dd>This Recommendation defines a new XHTML document type
- that is based upon the module framework and modules defined in
- Modularization of XHTML.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml1">XHTML 1.0 The
- Extensible HyperText Markup Language (Second Edition)</a>
- (<a href="http://www.w3.org/2002/08/REC-xhtml1-20020801-errata">Errata</a>)
- </dt>
-
- <dd>This specification defines the Second Edition of XHTML 1.0,
- a reformulation of HTML 4 as an XML 1.0 application, and three
- DTDs corresponding to the ones defined by HTML 4.</dd>
- </dl>
-
- </section>
-
- <section id="authentication"><title>Authentication</title>
-
- <p>Concerning the different methods of authentication, Apache
- follows the following IETF recommendations:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2617.txt">RFC 2617</a>
- (Draft standard)</dt>
-
- <dd>"HTTP/1.0", includes the specification for a Basic
- Access Authentication scheme.</dd>
-
- </dl>
-
- </section>
-
- <section id="language_country_codes"><title>Language/Country Codes</title>
-
- <p>The following links document ISO and other language and country
- code information:</p>
-
- <dl>
- <dt><a href="http://www.loc.gov/standards/iso639-2/">ISO 639-2</a></dt>
-
- <dd>ISO 639 provides two sets of language codes, one as a two-letter
- code set (639-1) and another as a three-letter code set (this part
- of ISO 639) for the representation of names of languages.</dd>
-
- <dt><a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html">
- ISO 3166-1</a></dt>
-
- <dd>These pages document the country names (official short names
- in English) in alphabetical order as given in ISO 3166-1 and the
- corresponding ISO 3166-1-alpha-2 code elements.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">BCP 47</a>
- (Best Current Practice),
- <a href="http://www.rfc-editor.org/rfc/rfc3066.txt">RFC 3066</a></dt>
-
- <dd>This document describes a language tag for use in cases where
- it is desired to indicate the language used in an information
- object, how to register values for use in this language tag,
- and a construct for matching such language tags.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc3282.txt">RFC 3282</a>
- (Standards Track)</dt>
-
- <dd>This document defines a "Content-language:" header, for use in
- cases where one desires to indicate the language of something that
- has RFC 822-like headers, like MIME body parts or Web documents,
- and an "Accept-Language:" header for use in cases where one wishes
- to indicate one's preferences with regard to language.</dd>
- </dl>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/misc/relevant_standards.xml.ko b/docs/manual/misc/relevant_standards.xml.ko
deleted file mode 100644
index d76f912434..0000000000
--- a/docs/manual/misc/relevant_standards.xml.ko
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="relevant_standards.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>°ü·Ã Ç¥ÁØ</title>
-
- <summary>
- <p>ÀÌ ¹®¼­¿¡´Â °£´ÜÇÑ ¼³¸í°ú ÇÔ²² ¾ÆÆÄÄ¡ À¥¼­¹ö°¡ µû¸£´Â
- ¸ðµç °ü·Ã Ç¥ÁØÀ» ¿­°ÅÇÑ´Ù.</p>
-
- <p>¾Æ·¡ Á¤º¸¿¡ ´õÇÏ¿© ´ÙÀ½ ÀÚ·áµµ »ìÆìºÁ¾ß ÇÑ´Ù:</p>
-
- <ul>
- <li>
- <a href="http://purl.org/NET/http-errata">
- http://purl.org/NET/http-errata</a> - HTTP/1.1 ±Ô¾à
- Á¤¿ÀÇ¥
- </li>
- <li>
- <a href="http://www.rfc-editor.org/errata.html">
- http://www.rfc-editor.org/errata.html</a> - RFC Á¤¿ÀÇ¥
- </li>
- <li>
- <a href="http://ftp.ics.uci.edu/pub/ietf/http/#RFC">
- http://ftp.ics.uci.edu/pub/ietf/http/#RFC</a> - HTTP
- °ü·Ã RFC ¸ñ·Ï
- </li>
- </ul>
-
- <note type="warning"><title>ÁÖÀÇ</title>
- <p>ÀÌ ¹®¼­´Â ¾ÆÁ÷ ¿ÏÀüÇÏÁö ¾Ê´Ù.</p>
- </note>
-
- </summary>
-
- <section id="http_recommendations"><title>HTTP ±Ç°í</title>
-
- <p>¾î¶² ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í »ç¿ëÇÏ´ÂÁö¿Í °ü°è¾øÀÌ ±âº»ÀûÀ¸·Î
- À¥¼­¹öÀÎ ¾ÆÆÄÄ¡´Â ´ÙÀ½ IETF ±Ç°í(recommendation)¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc1945.txt">RFC 1945</a>
- (Informational)</dt>
-
- <dd>ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ (Hypertext Transfer Protocol,
- HTTP)Àº ºÐ»ê, Çùµ¿, ÇÏÀÌÆÛ¸Åü Á¤º¸ ½Ã½ºÅÛ¿¡ ÇÊ¿äÇÑ ºü¸£°í
- °¡º­¿î ¾îÇø®ÄÉÀÌ¼Ç ¼öÁØ(application-level) ÇÁ·ÎÅäÄÝÀÌ´Ù.
- ÀÌ ¹®¼­´Â HTTP/1.0À» ¼³¸íÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a>
- (Standards Track)</dt>
-
- <dd>ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ (Hypertext Transfer Protocol,
- HTTP)Àº ºÐ»ê, Çùµ¿, ÇÏÀÌÆÛ¸Åü Á¤º¸ ½Ã½ºÅÛÀ» À§ÇÑ ¾îÇø®ÄÉÀ̼Ç
- ¼öÁØ ÇÁ·ÎÅäÄÝÀÌ´Ù. ÀÌ ¹®¼­´Â HTTP/1.1À» ¼³¸íÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2396.txt">RFC 2396</a>
- (Standards Track)</dt>
-
- <dd>Ç¥ÁØ ÀÚ¿ø ½Äº°ÀÚ (Uniform Resource Identifier, URI)´Â
- Ãß»óÀû ȤÀº ¹°¸®Àû ÀÚ¿øÀ» ½Äº°ÇϱâÀ§ÇÑ ÂªÀº ¹®ÀÚ¿­ÀÌ´Ù.</dd>
- </dl>
-
- </section>
-
- <section id="html_recommendations"><title>HTML ±Ç°í</title>
-
- <p>ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷ ¾ð¾î (Hypertext Markup Language,
- HTML)¿Í °ü·ÃÇÏ¿© ¾ÆÆÄÄ¡´Â ´ÙÀ½ IETF ±Ç°í¿Í W3C ±Ç°í¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2854.txt">RFC 2854</a>
- (Informational)</dt>
-
- <dd>ÀÌ ¹®¼­´Â HTML °³¹ß°úÁ¤À» ¿ä¾àÇÏ°í, °ü·Ã W3C ±Ç°í¸¦
- ±â¹ÝÀ¸·Î "text/html" MIME typeÀ» Á¤ÀÇÇÑ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/html401">HTML 4.01 ±Ô¾à</a>
- (<a href="http://www.w3.org/MarkUp/html4-updates/errata">Errata</a>)
- </dt>
-
- <dd>ÀÌ ±Ô¾àÀº ¿ùµå¿ÍÀ̵åÀ¥ÀÇ ÃâÆǾð¾îÀÎ ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷
- ¾ð¾î (Hypertext Markup Language, HTML)¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ
- ±Ô¾àÀº HTML 4ÀÇ ÇÏÀ§¹öÀüÀÎ HTML 4.01À» Á¤ÀÇÇÑ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/REC-html32">HTML 3.2 Âü°í ±Ô¾à</a></dt>
-
- <dd>ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷ ¾ð¾î (Hypertext Markup Language,
- HTML)´Â Ç÷¡Æû°ú ¹«°üÇÑ ÇÏÀÌÆÛÅؽºÆ® ¹®¼­¸¦ À§ÇÑ °£´ÜÇÑ
- ¸¶Å©¾÷ ¾ð¾îÀÌ´Ù. HTML ¹®¼­´Â SGML ¹®¼­À̱⵵ ÇÏ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml11/">XHTML 1.1 -
- ¸ðµâ±â¹Ý XHTML</a>
- (<a href="http://www.w3.org/2001/04/REC-xhtml-modularization-20010410-errata">Á¤¿ÀÇ¥</a>)
- </dt>
-
- <dd>ÀÌ ±Ç°í´Â Modularization of XHTML¿¡¼­ Á¤ÀÇÇÑ ¸ðµâ
- Ç÷¹ÀÓ¿öÅ©¿Í ¸ðµâµéÀ» ±â¹ÝÀ¸·Î »õ·Î¿î XHTML document typeÀ»
- Á¤ÀÇÇÑ´Ù.</dd>
-
- <dt><a href="http://www.w3.org/TR/xhtml1">XHTML 1.0
- È®Àå ÇÏÀÌÆÛÅؽºÆ® ¸¶Å©¾÷ ¾ð¾î (Extensible HyperText Markup
- Language) (Second Edition)</a>
- (<a href="http://www.w3.org/2002/08/REC-xhtml1-20020801-errata">Á¤¿ÀÇ¥</a>)
- </dt>
-
- <dd>ÀÌ ¹®¼­´Â HTML 4¸¦ XML 1.0À¸·Î À籸¼ºÇÑ XHTML 1.0ÀÇ
- µÎ¹ø° ¹öÀü°ú HTML 4¿¡ ÇØ´çÇÏ´Â ¼¼°¡Áö DTD¸¦ Á¤ÀÇÇÑ´Ù.</dd>
- </dl>
-
- </section>
-
- <section id="authentication"><title>ÀÎÁõ</title>
-
- <p>ÀÎÁõ¹æ¹ý¿¡ ´ëÇØ ¾ÆÆÄÄ¡´Â ´ÙÀ½ IETF ±Ç°í¸¦ µû¸¥´Ù:</p>
-
- <dl>
- <dt><a href="http://www.rfc-editor.org/rfc/rfc2617.txt">RFC 2617</a>
- (Draft standard)</dt>
-
- <dd>Basic Access Authentication ±Ô¾àÀ» Æ÷ÇÔÇÑ "HTTP/1.0".</dd>
-
- </dl>
-
- </section>
-
- <section id="language_country_codes"><title>¾ð¾î/±¹°¡ ÄÚµå</title>
-
- <p>¾Æ·¡ ¸µÅ©¿¡ ISO¿Í ´Ù¸¥ ¾ð¾î/±¹°¡ ÄÚµå Á¤º¸°¡ ÀÖ´Ù:</p>
-
- <dl>
- <dt><a href="http://www.loc.gov/standards/iso639-2/">ISO 639-2</a></dt>
-
- <dd>ISO 639´Â ¾ð¾îÀÇ À̸§À» ³ªÅ¸³»´Â µÎ°¡Áö ¾ð¾î Äڵ带
- Á¦°øÇÑ´Ù. Çϳª´Â (639-1) µÎ ±ÛÀÚ ÄÚµåÀÌ°í ´Ù¸¥ Çϳª´Â
- (ÀÌ ¹®¼­) ¼¼ ±ÛÀÚ ÄÚµåÀÌ´Ù.</dd>
-
- <dt><a href="http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html">
- ISO 3166-1</a></dt>
-
- <dd>ÀÌ ¹®¼­´Â ISO 3166-1°ú ISO 3166-1-alpha-2 Äڵ忡 µû¶ó
- ¾ËÆĺª ¼ø¼­·Î (¿µ¾î·Î ªÀº °ø½ÄÀ̸§) ±¹°¡¸íÀ» ¿­°ÅÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">BCP 47</a>
- (Best Current Practice),
- <a href="http://www.rfc-editor.org/rfc/rfc3066.txt">RFC 3066</a></dt>
-
- <dd>ÀÌ ¹®¼­´Â Á¤º¸ °´Ã¼¿¡ »ç¿ëÇÑ ¾ð¾î¸¦ ¾Ë¸®±âÀ§ÇØ »ç¿ëÇÒ
- ¾ð¾î ÅÂ±×¿Í ¾ð¾î ű׿¡ »ç¿ëÇÒ °ªÀ» µî·ÏÇÏ´Â ¹æ¹ý, ¾ð¾î
- ű׸¦ ã´Â ¹æ½ÄÀ» ¼³¸íÇÑ´Ù.</dd>
-
- <dt><a href="http://www.rfc-editor.org/rfc/rfc3282.txt">RFC 3282</a>
- (Standards Track)</dt>
-
- <dd>ÀÌ ¹®¼­´Â MIME ³»¿ë ºÎºÐ°ú À¥ ¹®¼­¿Í °°Àº RFC 822½Ä
- Çì´õ°¡ ÀÖ´Â Á¤º¸ÀÇ ¾ð¾î¸¦ ¾Ë¸®±âÀ§ÇÑ "Content-language:"
- Çì´õ¿Í, ¼±È£ÇÏ´Â ¾ð¾î¸¦ ³ªÅ¸³»´Â "Accept-Language:" Çì´õ¸¦
- Á¤ÀÇÇÑ´Ù.</dd>
- </dl>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/misc/relevant_standards.xml.meta b/docs/manual/misc/relevant_standards.xml.meta
deleted file mode 100644
index 063e5b05bc..0000000000
--- a/docs/manual/misc/relevant_standards.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>relevant_standards</basename>
- <path>/misc/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/misc/rewriteguide.html b/docs/manual/misc/rewriteguide.html
deleted file mode 100644
index 01caef1379..0000000000
--- a/docs/manual/misc/rewriteguide.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: rewriteguide.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: rewriteguide.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/misc/rewriteguide.html.en b/docs/manual/misc/rewriteguide.html.en
deleted file mode 100644
index 118223e9ad..0000000000
--- a/docs/manual/misc/rewriteguide.html.en
+++ /dev/null
@@ -1,2101 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>URL Rewriting Guide - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>URL Rewriting Guide</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/misc/rewriteguide.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/rewriteguide.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <div class="note">
- <p>Originally written by<br />
- <cite>Ralf S. Engelschall &lt;rse@apache.org&gt;</cite><br />
- December 1997</p>
- </div>
-
- <p>This document supplements the <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- <a href="../mod/mod_rewrite.html">reference documentation</a>.
- It describes how one can use Apache's <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- to solve typical URL-based problems webmasters are usually confronted
- with in practice. I give detailed descriptions on how to
- solve each problem by configuring URL rewriting rulesets.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#ToC1">Introduction to <code>mod_rewrite</code></a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ToC2">Practical Solutions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#url">URL Layout</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#content">Content Handling</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#access">Access Restriction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#other">Other</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ToC1" id="ToC1">Introduction to <code>mod_rewrite</code></a></h2>
-
-
-
- <p>The Apache module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> is a killer
- one, i.e. it is a really sophisticated module which provides
- a powerful way to do URL manipulations. With it you can nearly
- do all types of URL manipulations you ever dreamed about.
- The price you have to pay is to accept complexity, because
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>'s major drawback is that it is
- not easy to understand and use for the beginner. And even
- Apache experts sometimes discover new aspects where
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> can help.</p>
-
- <p>In other words: With <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> you either
- shoot yourself in the foot the first time and never use it again
- or love it for the rest of your life because of its power.
- This paper tries to give you a few initial success events to
- avoid the first case by presenting already invented solutions
- to you.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ToC2" id="ToC2">Practical Solutions</a></h2>
-
-
-
- <p>Here come a lot of practical solutions I've either invented
- myself or collected from other peoples solutions in the past.
- Feel free to learn the black magic of URL rewriting from
- these examples.</p>
-
- <div class="warning">ATTENTION: Depending on your server-configuration
- it can be necessary to slightly change the examples for your
- situation, e.g. adding the <code>[PT]</code> flag when
- additionally using <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> and
- <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>, etc. Or rewriting a ruleset
- to fit in <code>.htaccess</code> context instead
- of per-server context. Always try to understand what a
- particular ruleset really does before you use it. It
- avoid problems.</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="url" id="url">URL Layout</a></h2>
-
-
-
- <h3>Canonical URLs</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>On some webservers there are more than one URL for a
- resource. Usually there are canonical URLs (which should be
- actually used and distributed) and those which are just
- shortcuts, internal ones, etc. Independent of which URL the
- user supplied with the request he should finally see the
- canonical one only.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We do an external HTTP redirect for all non-canonical
- URLs to fix them in the location view of the Browser and
- for all subsequent requests. In the example ruleset below
- we replace <code>/~user</code> by the canonical
- <code>/u/user</code> and fix a missing trailing slash for
- <code>/u/user</code>.</p>
-
-<div class="example"><pre>
-RewriteRule ^/<strong>~</strong>([^/]+)/?(.*) /<strong>u</strong>/$1/$2 [<strong>R</strong>]
-RewriteRule ^/([uge])/(<strong>[^/]+</strong>)$ /$1/$2<strong>/</strong> [<strong>R</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Canonical Hostnames</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>...</dd>
-
- <dt>Solution:</dt>
-
- <dd>
-<div class="example"><pre>
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteCond %{SERVER_PORT} !^80$
-RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Moved <code>DocumentRoot</code></h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Usually the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- of the webserver directly relates to the URL "<code>/</code>".
- But often this data is not really of top-level priority, it is
- perhaps just one entity of a lot of data pools. For instance at
- our Intranet sites there are <code>/e/www/</code>
- (the homepage for WWW), <code>/e/sww/</code> (the homepage for
- the Intranet) etc. Now because the data of the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> stays at <code>/e/www/</code> we had
- to make sure that all inlined images and other stuff inside this
- data pool work for subsequent requests.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We just redirect the URL <code>/</code> to
- <code>/e/www/</code>. While is seems trivial it is
- actually trivial with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, only.
- Because the typical old mechanisms of URL <em>Aliases</em>
- (as provides by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> and friends)
- only used <em>prefix</em> matching. With this you cannot
- do such a redirection because the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> is a prefix of all URLs. With
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> it is really trivial:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule <strong>^/$</strong> /e/www/ [<strong>R</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Trailing Slash Problem</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Every webmaster can sing a song about the problem of
- the trailing slash on URLs referencing directories. If they
- are missing, the server dumps an error, because if you say
- <code>/~quux/foo</code> instead of <code>/~quux/foo/</code>
- then the server searches for a <em>file</em> named
- <code>foo</code>. And because this file is a directory it
- complains. Actually it tries to fix it itself in most of
- the cases, but sometimes this mechanism need to be emulated
- by you. For instance after you have done a lot of
- complicated URL rewritings to CGI scripts etc.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution to this subtle problem is to let the server
- add the trailing slash automatically. To do this
- correctly we have to use an external redirect, so the
- browser correctly requests subsequent images etc. If we
- only did a internal rewrite, this would only work for the
- directory page, but would go wrong when any images are
- included into this page with relative URLs, because the
- browser would request an in-lined object. For instance, a
- request for <code>image.gif</code> in
- <code>/~quux/foo/index.html</code> would become
- <code>/~quux/image.gif</code> without the external
- redirect!</p>
-
- <p>So, to do this trick we write:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo<strong>$</strong> foo<strong>/</strong> [<strong>R</strong>]
-</pre></div>
-
- <p>The crazy and lazy can even do the following in the
- top-level <code>.htaccess</code> file of their homedir.
- But notice that this creates some processing
- overhead.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteCond %{REQUEST_FILENAME} <strong>-d</strong>
-RewriteRule ^(.+<strong>[^/]</strong>)$ $1<strong>/</strong> [R]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Webcluster through Homogeneous URL Layout</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>We want to create a homogeneous and consistent URL
- layout over all WWW servers on a Intranet webcluster, i.e.
- all URLs (per definition server local and thus server
- dependent!) become actually server <em>independent</em>!
- What we want is to give the WWW namespace a consistent
- server-independent layout: no URL should have to include
- any physically correct target server. The cluster itself
- should drive us automatically to the physical target
- host.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>First, the knowledge of the target servers come from
- (distributed) external maps which contain information
- where our users, groups and entities stay. The have the
- form</p>
-
-<div class="example"><pre>
-user1 server_of_user1
-user2 server_of_user2
-: :
-</pre></div>
-
- <p>We put them into files <code>map.xxx-to-host</code>.
- Second we need to instruct all servers to redirect URLs
- of the forms</p>
-
-<div class="example"><pre>
-/u/user/anypath
-/g/group/anypath
-/e/entity/anypath
-</pre></div>
-
- <p>to</p>
-
-<div class="example"><pre>
-http://physical-host/u/user/anypath
-http://physical-host/g/group/anypath
-http://physical-host/e/entity/anypath
-</pre></div>
-
- <p>when the URL is not locally valid to a server. The
- following ruleset does this for us by the help of the map
- files (assuming that server0 is a default server which
- will be used if a user has no entry in the map):</p>
-
-<div class="example"><pre>
-RewriteEngine on
-
-RewriteMap user-to-host txt:/path/to/map.user-to-host
-RewriteMap group-to-host txt:/path/to/map.group-to-host
-RewriteMap entity-to-host txt:/path/to/map.entity-to-host
-
-RewriteRule ^/u/<strong>([^/]+)</strong>/?(.*) http://<strong>${user-to-host:$1|server0}</strong>/u/$1/$2
-RewriteRule ^/g/<strong>([^/]+)</strong>/?(.*) http://<strong>${group-to-host:$1|server0}</strong>/g/$1/$2
-RewriteRule ^/e/<strong>([^/]+)</strong>/?(.*) http://<strong>${entity-to-host:$1|server0}</strong>/e/$1/$2
-
-RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
-RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Move Homedirs to Different Webserver</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Many webmasters have asked for a solution to the
- following situation: They wanted to redirect just all
- homedirs on a webserver to another webserver. They usually
- need such things when establishing a newer webserver which
- will replace the old one over time.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution is trivial with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
- On the old webserver we just redirect all
- <code>/~user/anypath</code> URLs to
- <code>http://newserver/~user/anypath</code>.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^/~(.+) http://<strong>newserver</strong>/~$1 [R,L]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Structured Homedirs</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Some sites with thousands of users usually use a
- structured homedir layout, i.e. each homedir is in a
- subdirectory which begins for instance with the first
- character of the username. So, <code>/~foo/anypath</code>
- is <code>/home/<strong>f</strong>/foo/.www/anypath</code>
- while <code>/~bar/anypath</code> is
- <code>/home/<strong>b</strong>/bar/.www/anypath</code>.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use the following ruleset to expand the tilde URLs
- into exactly the above layout.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/.www$3
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Filesystem Reorganization</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>This really is a hardcore example: a killer application
- which heavily uses per-directory
- <code>RewriteRules</code> to get a smooth look and feel
- on the Web while its data structure is never touched or
- adjusted. Background: <strong><em>net.sw</em></strong> is
- my archive of freely available Unix software packages,
- which I started to collect in 1992. It is both my hobby
- and job to to this, because while I'm studying computer
- science I have also worked for many years as a system and
- network administrator in my spare time. Every week I need
- some sort of software so I created a deep hierarchy of
- directories where I stored the packages:</p>
-
-<div class="example"><pre>
-drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
-drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
-drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
-drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
-drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
-drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
-drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
-drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
-drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
-drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
-drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
-drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
-drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
-drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/
-</pre></div>
-
- <p>In July 1996 I decided to make this archive public to
- the world via a nice Web interface. "Nice" means that I
- wanted to offer an interface where you can browse
- directly through the archive hierarchy. And "nice" means
- that I didn't wanted to change anything inside this
- hierarchy - not even by putting some CGI scripts at the
- top of it. Why? Because the above structure should be
- later accessible via FTP as well, and I didn't want any
- Web or CGI stuff to be there.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution has two parts: The first is a set of CGI
- scripts which create all the pages at all directory
- levels on-the-fly. I put them under
- <code>/e/netsw/.www/</code> as follows:</p>
-
-<div class="example"><pre>
--rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
-drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
--rw-rw-rw- 1 netsw users 372982 Aug 5 16:35 LOGFILE
--rw-r--r-- 1 netsw users 659 Aug 4 09:27 TODO
--rw-r--r-- 1 netsw users 5697 Aug 1 18:01 netsw-about.html
--rwxr-xr-x 1 netsw users 579 Aug 2 10:33 netsw-access.pl
--rwxr-xr-x 1 netsw users 1532 Aug 1 17:35 netsw-changes.cgi
--rwxr-xr-x 1 netsw users 2866 Aug 5 14:49 netsw-home.cgi
-drwxr-xr-x 2 netsw users 512 Jul 8 23:47 netsw-img/
--rwxr-xr-x 1 netsw users 24050 Aug 5 15:49 netsw-lsdir.cgi
--rwxr-xr-x 1 netsw users 1589 Aug 3 18:43 netsw-search.cgi
--rwxr-xr-x 1 netsw users 1885 Aug 1 17:41 netsw-tree.cgi
--rw-r--r-- 1 netsw users 234 Jul 30 16:35 netsw-unlimit.lst
-</pre></div>
-
- <p>The <code>DATA/</code> subdirectory holds the above
- directory structure, i.e. the real
- <strong><em>net.sw</em></strong> stuff and gets
- automatically updated via <code>rdist</code> from time to
- time. The second part of the problem remains: how to link
- these two structures together into one smooth-looking URL
- tree? We want to hide the <code>DATA/</code> directory
- from the user while running the appropriate CGI scripts
- for the various URLs. Here is the solution: first I put
- the following into the per-directory configuration file
- in the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- of the server to rewrite the announced URL
- <code>/net.sw/</code> to the internal path
- <code>/e/netsw</code>:</p>
-
-<div class="example"><pre>
-RewriteRule ^net.sw$ net.sw/ [R]
-RewriteRule ^net.sw/(.*)$ e/netsw/$1
-</pre></div>
-
- <p>The first rule is for requests which miss the trailing
- slash! The second rule does the real thing. And then
- comes the killer configuration which stays in the
- per-directory config file
- <code>/e/netsw/.www/.wwwacl</code>:</p>
-
-<div class="example"><pre>
-Options ExecCGI FollowSymLinks Includes MultiViews
-
-RewriteEngine on
-
-# we are reached via /net.sw/ prefix
-RewriteBase /net.sw/
-
-# first we rewrite the root dir to
-# the handling cgi script
-RewriteRule ^$ netsw-home.cgi [L]
-RewriteRule ^index\.html$ netsw-home.cgi [L]
-
-# strip out the subdirs when
-# the browser requests us from perdir pages
-RewriteRule ^.+/(netsw-[^/]+/.+)$ $1 [L]
-
-# and now break the rewriting for local files
-RewriteRule ^netsw-home\.cgi.* - [L]
-RewriteRule ^netsw-changes\.cgi.* - [L]
-RewriteRule ^netsw-search\.cgi.* - [L]
-RewriteRule ^netsw-tree\.cgi$ - [L]
-RewriteRule ^netsw-about\.html$ - [L]
-RewriteRule ^netsw-img/.*$ - [L]
-
-# anything else is a subdir which gets handled
-# by another cgi script
-RewriteRule !^netsw-lsdir\.cgi.* - [C]
-RewriteRule (.*) netsw-lsdir.cgi/$1
-</pre></div>
-
- <p>Some hints for interpretation:</p>
-
- <ol>
- <li>Notice the <code>L</code> (last) flag and no
- substitution field ('<code>-</code>') in the forth part</li>
-
- <li>Notice the <code>!</code> (not) character and
- the <code>C</code> (chain) flag at the first rule
- in the last part</li>
-
- <li>Notice the catch-all pattern in the last rule</li>
- </ol>
- </dd>
- </dl>
-
-
-
- <h3>NCSA imagemap to Apache <code>mod_imap</code></h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>When switching from the NCSA webserver to the more
- modern Apache webserver a lot of people want a smooth
- transition. So they want pages which use their old NCSA
- <code>imagemap</code> program to work under Apache with the
- modern <code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code>. The problem is that there
- are a lot of hyperlinks around which reference the
- <code>imagemap</code> program via
- <code>/cgi-bin/imagemap/path/to/page.map</code>. Under
- Apache this has to read just
- <code>/path/to/page.map</code>.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a global rule to remove the prefix on-the-fly for
- all requests:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Search pages in more than one directory</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Sometimes it is necessary to let the webserver search
- for pages in more than one directory. Here MultiViews or
- other techniques cannot help.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We program a explicit ruleset which searches for the
- files in the directories.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-
-# first try to find it in custom/...
-# ...and if found stop and be happy:
-RewriteCond /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir1</strong>/$1 [L]
-
-# second try to find it in pub/...
-# ...and if found stop and be happy:
-RewriteCond /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir2</strong>/$1 [L]
-
-# else go on for other Alias or ScriptAlias directives,
-# etc.
-RewriteRule ^(.+) - [PT]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Set Environment Variables According To URL Parts</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Perhaps you want to keep status information between
- requests and use the URL to encode it. But you don't want
- to use a CGI wrapper for all pages just to strip out this
- information.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a rewrite rule to strip out the status information
- and remember it via an environment variable which can be
- later dereferenced from within XSSI or CGI. This way a
- URL <code>/foo/S=java/bar/</code> gets translated to
- <code>/foo/bar/</code> and the environment variable named
- <code>STATUS</code> is set to the value "java".</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^(.*)/<strong>S=([^/]+)</strong>/(.*) $1/$3 [E=<strong>STATUS:$2</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Virtual User Hosts</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume that you want to provide
- <code>www.<strong>username</strong>.host.domain.com</code>
- for the homepage of username via just DNS A records to the
- same machine and without any virtualhosts on this
- machine.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>For HTTP/1.0 requests there is no solution, but for
- HTTP/1.1 requests which contain a Host: HTTP header we
- can use the following ruleset to rewrite
- <code>http://www.username.host.com/anypath</code>
- internally to <code>/home/username/anypath</code>:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{<strong>HTTP_HOST</strong>} ^www\.<strong>[^.]+</strong>\.host\.com$
-RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
-RewriteRule ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Redirect Homedirs For Foreigners</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>We want to redirect homedir URLs to another webserver
- <code>www.somewhere.com</code> when the requesting user
- does not stay in the local domain
- <code>ourdomain.com</code>. This is sometimes used in
- virtual host contexts.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>Just a rewrite condition:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{REMOTE_HOST} <strong>!^.+\.ourdomain\.com$</strong>
-RewriteRule ^(/~.+) http://www.somewhere.com/$1 [R,L]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Redirect Failing URLs To Other Webserver</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>A typical FAQ about URL rewriting is how to redirect
- failing requests on webserver A to webserver B. Usually
- this is done via <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> CGI-scripts in Perl, but
- there is also a <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> solution.
- But notice that this performs more poorly than using an
- <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code>
- CGI-script!</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The first solution has the best performance but less
- flexibility, and is less error safe:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond /your/docroot/%{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></div>
-
- <p>The problem here is that this will only work for pages
- inside the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. While you can add more
- Conditions (for instance to also handle homedirs, etc.)
- there is better variant:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{REQUEST_URI} <strong>!-U</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></div>
-
- <p>This uses the URL look-ahead feature of <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
- The result is that this will work for all types of URLs
- and is a safe way. But it does a performance impact on
- the webserver, because for every request there is one
- more internal subrequest. So, if your webserver runs on a
- powerful CPU, use this one. If it is a slow machine, use
- the first approach or better a <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> CGI-script.</p>
- </dd>
- </dl>
-
-
-
- <h3>Extended Redirection</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Sometimes we need more control (concerning the
- character escaping mechanism) of URLs on redirects.
- Usually the Apache kernels URL escape function also
- escapes anchors, i.e. URLs like "<code>url#anchor</code>".
- You cannot use this directly on redirects with
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> because the
- <code>uri_escape()</code> function of Apache
- would also escape the hash character.
- How can we redirect to such a URL?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We have to use a kludge by the use of a NPH-CGI script
- which does the redirect itself. Because here no escaping
- is done (NPH=non-parseable headers). First we introduce a
- new URL scheme <code>xredirect:</code> by the following
- per-server config-line (should be one of the last rewrite
- rules):</p>
-
-<div class="example"><pre>
-RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
- [T=application/x-httpd-cgi,L]
-</pre></div>
-
- <p>This forces all URLs prefixed with
- <code>xredirect:</code> to be piped through the
- <code>nph-xredirect.cgi</code> program. And this program
- just looks like:</p>
-
-<div class="example"><pre>
-#!/path/to/perl
-##
-## nph-xredirect.cgi -- NPH/CGI script for extended redirects
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-
-$| = 1;
-$url = $ENV{'PATH_INFO'};
-
-print "HTTP/1.0 302 Moved Temporarily\n";
-print "Server: $ENV{'SERVER_SOFTWARE'}\n";
-print "Location: $url\n";
-print "Content-type: text/html\n";
-print "\n";
-print "&lt;html&gt;\n";
-print "&lt;head&gt;\n";
-print "&lt;title&gt;302 Moved Temporarily (EXTENDED)&lt;/title&gt;\n";
-print "&lt;/head&gt;\n";
-print "&lt;body&gt;\n";
-print "&lt;h1&gt;Moved Temporarily (EXTENDED)&lt;/h1&gt;\n";
-print "The document has moved &lt;a HREF=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
-print "&lt;/body&gt;\n";
-print "&lt;/html&gt;\n";
-
-##EOF##
-</pre></div>
-
- <p>This provides you with the functionality to do
- redirects to all URL schemes, i.e. including the one
- which are not directly accepted by <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
- For instance you can now also redirect to
- <code>news:newsgroup</code> via</p>
-
-<div class="example"><pre>
-RewriteRule ^anyurl xredirect:news:newsgroup
-</pre></div>
-
- <div class="note">Notice: You have not to put <code>[R]</code> or
- <code>[R,L]</code> to the above rule because the
- <code>xredirect:</code> need to be expanded later
- by our special "pipe through" rule above.</div>
- </dd>
- </dl>
-
-
-
- <h3>Archive Access Multiplexer</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Do you know the great CPAN (Comprehensive Perl Archive
- Network) under <a href="http://www.perl.com/CPAN">http://www.perl.com/CPAN</a>?
- This does a redirect to one of several FTP servers around
- the world which carry a CPAN mirror and is approximately
- near the location of the requesting client. Actually this
- can be called an FTP access multiplexing service. While
- CPAN runs via CGI scripts, how can a similar approach
- implemented via <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>First we notice that from version 3.0.0
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> can
- also use the "<code>ftp:</code>" scheme on redirects.
- And second, the location approximation can be done by a
- <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
- over the top-level domain of the client.
- With a tricky chained ruleset we can use this top-level
- domain as a key to our multiplexing map.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap multiplex txt:/path/to/map.cxan
-RewriteRule ^/CxAN/(.*) %{REMOTE_HOST}::$1 [C]
-RewriteRule ^.+\.<strong>([a-zA-Z]+)</strong>::(.*)$ ${multiplex:<strong>$1</strong>|ftp.default.dom}$2 [R,L]
-</pre></div>
-
-<div class="example"><pre>
-##
-## map.cxan -- Multiplexing Map for CxAN
-##
-
-de ftp://ftp.cxan.de/CxAN/
-uk ftp://ftp.cxan.uk/CxAN/
-com ftp://ftp.cxan.com/CxAN/
- :
-##EOF##
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Time-Dependent Rewriting</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>When tricks like time-dependent content should happen a
- lot of webmasters still use CGI scripts which do for
- instance redirects to specialized pages. How can it be done
- via <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>There are a lot of variables named <code>TIME_xxx</code>
- for rewrite conditions. In conjunction with the special
- lexicographic comparison patterns <code>&lt;STRING</code>,
- <code>&gt;STRING</code> and <code>=STRING</code> we can
- do time-dependent redirects:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &gt;0700
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &lt;1900
-RewriteRule ^foo\.html$ foo.day.html
-RewriteRule ^foo\.html$ foo.night.html
-</pre></div>
-
- <p>This provides the content of <code>foo.day.html</code>
- under the URL <code>foo.html</code> from
- <code>07:00-19:00</code> and at the remaining time the
- contents of <code>foo.night.html</code>. Just a nice
- feature for a homepage...</p>
- </dd>
- </dl>
-
-
-
- <h3>Backward Compatibility for YYYY to XXXX migration</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we make URLs backward compatible (still
- existing virtually) after migrating <code>document.YYYY</code>
- to <code>document.XXXX</code>, e.g. after translating a
- bunch of <code>.html</code> files to <code>.phtml</code>?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We just rewrite the name to its basename and test for
- existence of the new extension. If it exists, we take
- that name, else we rewrite the URL to its original state.</p>
-
-
-<div class="example"><pre>
-# backward compatibility ruleset for
-# rewriting document.html to document.phtml
-# when and only when document.phtml exists
-# but no longer document.html
-RewriteEngine on
-RewriteBase /~quux/
-# parse out basename, but remember the fact
-RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
-# rewrite to document.phtml if exists
-RewriteCond %{REQUEST_FILENAME}.phtml -f
-RewriteRule ^(.*)$ $1.phtml [S=1]
-# else reverse the previous basename cutout
-RewriteCond %{ENV:WasHTML} ^yes$
-RewriteRule ^(.*)$ $1.html
-</pre></div>
- </dd>
- </dl>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="content" id="content">Content Handling</a></h2>
-
-
-
- <h3>From Old to New (intern)</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume we have recently renamed the page
- <code>foo.html</code> to <code>bar.html</code> and now want
- to provide the old URL for backward compatibility. Actually
- we want that users of the old URL even not recognize that
- the pages was renamed.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We rewrite the old URL to the new one internally via the
- following rule:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>From Old to New (extern)</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume again that we have recently renamed the page
- <code>foo.html</code> to <code>bar.html</code> and now want
- to provide the old URL for backward compatibility. But this
- time we want that the users of the old URL get hinted to
- the new one, i.e. their browsers Location field should
- change, too.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We force a HTTP redirect to the new URL which leads to a
- change of the browsers and thus the users view:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html [<strong>R</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Browser Dependent Content</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>At least for important top-level pages it is sometimes
- necessary to provide the optimum of browser dependent
- content, i.e. one has to provide a maximum version for the
- latest Netscape variants, a minimum version for the Lynx
- browsers and a average feature version for all others.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We cannot use content negotiation because the browsers do
- not provide their type in that form. Instead we have to
- act on the HTTP header "User-Agent". The following condig
- does the following: If the HTTP header "User-Agent"
- begins with "Mozilla/3", the page <code>foo.html</code>
- is rewritten to <code>foo.NS.html</code> and and the
- rewriting stops. If the browser is "Lynx" or "Mozilla" of
- version 1 or 2 the URL becomes <code>foo.20.html</code>.
- All other browsers receive page <code>foo.32.html</code>.
- This is done by the following ruleset:</p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/3</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>NS</strong>.html [<strong>L</strong>]
-
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Lynx/</strong>.* [OR]
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/[12]</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>20</strong>.html [<strong>L</strong>]
-
-RewriteRule ^foo\.html$ foo.<strong>32</strong>.html [<strong>L</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Dynamic Mirror</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume there are nice webpages on remote hosts we want
- to bring into our namespace. For FTP servers we would use
- the <code>mirror</code> program which actually maintains an
- explicit up-to-date copy of the remote data on the local
- machine. For a webserver we could use the program
- <code>webcopy</code> which acts similar via HTTP. But both
- techniques have one major drawback: The local copy is
- always just as up-to-date as often we run the program. It
- would be much better if the mirror is not a static one we
- have to establish explicitly. Instead we want a dynamic
- mirror with data which gets updated automatically when
- there is need (updated data on the remote host).</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>To provide this feature we map the remote webpage or even
- the complete remote webarea to our namespace by the use
- of the <dfn>Proxy Throughput</dfn> feature
- (flag <code>[P]</code>):</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>hotsheet/</strong>(.*)$ <strong>http://www.tstimpreso.com/hotsheet/</strong>$1 [<strong>P</strong>]
-</pre></div>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>usa-news\.html</strong>$ <strong>http://www.quux-corp.com/news/index.html</strong> [<strong>P</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Reverse Dynamic Mirror</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>...</dd>
-
- <dt>Solution:</dt>
-
- <dd>
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond /mirror/of/remotesite/$1 -U
-RewriteRule ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Retrieve Missing Data from Intranet</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>This is a tricky way of virtually running a corporate
- (external) Internet webserver
- (<code>www.quux-corp.dom</code>), while actually keeping
- and maintaining its data on a (internal) Intranet webserver
- (<code>www2.quux-corp.dom</code>) which is protected by a
- firewall. The trick is that on the external webserver we
- retrieve the requested data on-the-fly from the internal
- one.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>First, we have to make sure that our firewall still
- protects the internal webserver and that only the
- external webserver is allowed to retrieve data from it.
- For a packet-filtering firewall we could for instance
- configure a firewall ruleset like the following:</p>
-
-<div class="example"><pre>
-<strong>ALLOW</strong> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-<strong>DENY</strong> Host * Port * --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-</pre></div>
-
- <p>Just adjust it to your actual configuration syntax.
- Now we can establish the <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- rules which request the missing data in the background
- through the proxy throughput feature:</p>
-
-<div class="example"><pre>
-RewriteRule ^/~([^/]+)/?(.*) /home/$1/.www/$2
-RewriteCond %{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteCond %{REQUEST_FILENAME} <strong>!-d</strong>
-RewriteRule ^/home/([^/]+)/.www/?(.*) http://<strong>www2</strong>.quux-corp.dom/~$1/pub/$2 [<strong>P</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Load Balancing</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Suppose we want to load balance the traffic to
- <code>www.foo.com</code> over <code>www[0-5].foo.com</code>
- (a total of 6 servers). How can this be done?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>There are a lot of possible solutions for this problem.
- We will discuss first a commonly known DNS-based variant
- and then the special one with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>:</p>
-
- <ol>
- <li>
- <strong>DNS Round-Robin</strong>
-
- <p>The simplest method for load-balancing is to use
- the DNS round-robin feature of <code>BIND</code>.
- Here you just configure <code>www[0-9].foo.com</code>
- as usual in your DNS with A(address) records, e.g.</p>
-
-<div class="example"><pre>
-www0 IN A 1.2.3.1
-www1 IN A 1.2.3.2
-www2 IN A 1.2.3.3
-www3 IN A 1.2.3.4
-www4 IN A 1.2.3.5
-www5 IN A 1.2.3.6
-</pre></div>
-
- <p>Then you additionally add the following entry:</p>
-
-<div class="example"><pre>
-www IN CNAME www0.foo.com.
- IN CNAME www1.foo.com.
- IN CNAME www2.foo.com.
- IN CNAME www3.foo.com.
- IN CNAME www4.foo.com.
- IN CNAME www5.foo.com.
- IN CNAME www6.foo.com.
-</pre></div>
-
- <p>Notice that this seems wrong, but is actually an
- intended feature of <code>BIND</code> and can be used
- in this way. However, now when <code>www.foo.com</code> gets
- resolved, <code>BIND</code> gives out <code>www0-www6</code>
- - but in a slightly permutated/rotated order every time.
- This way the clients are spread over the various
- servers. But notice that this not a perfect load
- balancing scheme, because DNS resolve information
- gets cached by the other nameservers on the net, so
- once a client has resolved <code>www.foo.com</code>
- to a particular <code>wwwN.foo.com</code>, all
- subsequent requests also go to this particular name
- <code>wwwN.foo.com</code>. But the final result is
- ok, because the total sum of the requests are really
- spread over the various webservers.</p>
- </li>
-
- <li>
- <strong>DNS Load-Balancing</strong>
-
- <p>A sophisticated DNS-based method for
- load-balancing is to use the program
- <code>lbnamed</code> which can be found at <a href="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">
- http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</a>.
- It is a Perl 5 program in conjunction with auxilliary
- tools which provides a real load-balancing for
- DNS.</p>
- </li>
-
- <li>
- <strong>Proxy Throughput Round-Robin</strong>
-
- <p>In this variant we use <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- and its proxy throughput feature. First we dedicate
- <code>www0.foo.com</code> to be actually
- <code>www.foo.com</code> by using a single</p>
-
-<div class="example"><pre>
-www IN CNAME www0.foo.com.
-</pre></div>
-
- <p>entry in the DNS. Then we convert
- <code>www0.foo.com</code> to a proxy-only server,
- i.e. we configure this machine so all arriving URLs
- are just pushed through the internal proxy to one of
- the 5 other servers (<code>www1-www5</code>). To
- accomplish this we first establish a ruleset which
- contacts a load balancing script <code>lb.pl</code>
- for all URLs.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap lb prg:/path/to/lb.pl
-RewriteRule ^/(.+)$ ${lb:$1} [P,L]
-</pre></div>
-
- <p>Then we write <code>lb.pl</code>:</p>
-
-<div class="example"><pre>
-#!/path/to/perl
-##
-## lb.pl -- load balancing script
-##
-
-$| = 1;
-
-$name = "www"; # the hostname base
-$first = 1; # the first server (not 0 here, because 0 is myself)
-$last = 5; # the last server in the round-robin
-$domain = "foo.dom"; # the domainname
-
-$cnt = 0;
-while (&lt;STDIN&gt;) {
- $cnt = (($cnt+1) % ($last+1-$first));
- $server = sprintf("%s%d.%s", $name, $cnt+$first, $domain);
- print "http://$server/$_";
-}
-
-##EOF##
-</pre></div>
-
- <div class="note">A last notice: Why is this useful? Seems like
- <code>www0.foo.com</code> still is overloaded? The
- answer is yes, it is overloaded, but with plain proxy
- throughput requests, only! All SSI, CGI, ePerl, etc.
- processing is completely done on the other machines.
- This is the essential point.</div>
- </li>
-
- <li>
- <strong>Hardware/TCP Round-Robin</strong>
-
- <p>There is a hardware solution available, too. Cisco
- has a beast called LocalDirector which does a load
- balancing at the TCP/IP level. Actually this is some
- sort of a circuit level gateway in front of a
- webcluster. If you have enough money and really need
- a solution with high performance, use this one.</p>
- </li>
- </ol>
- </dd>
- </dl>
-
-
-
- <h3>New MIME-type, New Service</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>On the net there are a lot of nifty CGI programs. But
- their usage is usually boring, so a lot of webmaster
- don't use them. Even Apache's Action handler feature for
- MIME-types is only appropriate when the CGI programs
- don't need special URLs (actually <code>PATH_INFO</code>
- and <code>QUERY_STRINGS</code>) as their input. First,
- let us configure a new file type with extension
- <code>.scgi</code> (for secure CGI) which will be processed
- by the popular <code>cgiwrap</code> program. The problem
- here is that for instance we use a Homogeneous URL Layout
- (see above) a file inside the user homedirs has the URL
- <code>/u/user/foo/bar.scgi</code>. But
- <code>cgiwrap</code> needs the URL in the form
- <code>/~user/foo/bar.scgi/</code>. The following rule
- solves the problem:</p>
-
-<div class="example"><pre>
-RewriteRule ^/[uge]/<strong>([^/]+)</strong>/\.www/(.+)\.scgi(.*) ...
-... /internal/cgi/user/cgiwrap/~<strong>$1</strong>/$2.scgi$3 [NS,<strong>T=application/x-http-cgi</strong>]
-</pre></div>
-
- <p>Or assume we have some more nifty programs:
- <code>wwwlog</code> (which displays the
- <code>access.log</code> for a URL subtree and
- <code>wwwidx</code> (which runs Glimpse on a URL
- subtree). We have to provide the URL area to these
- programs so they know on which area they have to act on.
- But usually this ugly, because they are all the times
- still requested from that areas, i.e. typically we would
- run the <code>swwidx</code> program from within
- <code>/u/user/foo/</code> via hyperlink to</p>
-
-<div class="example"><pre>
-/internal/cgi/user/swwidx?i=/u/user/foo/
-</pre></div>
-
- <p>which is ugly. Because we have to hard-code
- <strong>both</strong> the location of the area
- <strong>and</strong> the location of the CGI inside the
- hyperlink. When we have to reorganize the area, we spend a
- lot of time changing the various hyperlinks.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution here is to provide a special new URL format
- which automatically leads to the proper CGI invocation.
- We configure the following:</p>
-
-<div class="example"><pre>
-RewriteRule ^/([uge])/([^/]+)(/?.*)/\* /internal/cgi/user/wwwidx?i=/$1/$2$3/
-RewriteRule ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3
-</pre></div>
-
- <p>Now the hyperlink to search at
- <code>/u/user/foo/</code> reads only</p>
-
-<div class="example"><pre>
-HREF="*"
-</pre></div>
-
- <p>which internally gets automatically transformed to</p>
-
-<div class="example"><pre>
-/internal/cgi/user/wwwidx?i=/u/user/foo/
-</pre></div>
-
- <p>The same approach leads to an invocation for the
- access log CGI program when the hyperlink
- <code>:log</code> gets used.</p>
- </dd>
- </dl>
-
-
-
- <h3>From Static to Dynamic</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we transform a static page
- <code>foo.html</code> into a dynamic variant
- <code>foo.cgi</code> in a seamless way, i.e. without notice
- by the browser/user.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We just rewrite the URL to the CGI-script and force the
- correct MIME-type so it gets really run as a CGI-script.
- This way a request to <code>/~quux/foo.html</code>
- internally leads to the invocation of
- <code>/~quux/foo.cgi</code>.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo\.<strong>html</strong>$ foo.<strong>cgi</strong> [T=<strong>application/x-httpd-cgi</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>On-the-fly Content-Regeneration</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Here comes a really esoteric feature: Dynamically
- generated but statically served pages, i.e. pages should be
- delivered as pure static pages (read from the filesystem
- and just passed through), but they have to be generated
- dynamically by the webserver if missing. This way you can
- have CGI-generated pages which are statically served unless
- one (or a cronjob) removes the static contents. Then the
- contents gets refreshed.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- This is done via the following ruleset:
-
-<div class="example"><pre>
-RewriteCond %{REQUEST_FILENAME} <strong>!-s</strong>
-RewriteRule ^page\.<strong>html</strong>$ page.<strong>cgi</strong> [T=application/x-httpd-cgi,L]
-</pre></div>
-
- <p>Here a request to <code>page.html</code> leads to a
- internal run of a corresponding <code>page.cgi</code> if
- <code>page.html</code> is still missing or has filesize
- null. The trick here is that <code>page.cgi</code> is a
- usual CGI script which (additionally to its <code>STDOUT</code>)
- writes its output to the file <code>page.html</code>.
- Once it was run, the server sends out the data of
- <code>page.html</code>. When the webmaster wants to force
- a refresh the contents, he just removes
- <code>page.html</code> (usually done by a cronjob).</p>
- </dd>
- </dl>
-
-
-
- <h3>Document With Autorefresh</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Wouldn't it be nice while creating a complex webpage if
- the webbrowser would automatically refresh the page every
- time we write a new version from within our editor?
- Impossible?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>No! We just combine the MIME multipart feature, the
- webserver NPH feature and the URL manipulation power of
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. First, we establish a new
- URL feature: Adding just <code>:refresh</code> to any
- URL causes this to be refreshed every time it gets
- updated on the filesystem.</p>
-
-<div class="example"><pre>
-RewriteRule ^(/[uge]/[^/]+/?.*):refresh /internal/cgi/apache/nph-refresh?f=$1
-</pre></div>
-
- <p>Now when we reference the URL</p>
-
-<div class="example"><pre>
-/u/foo/bar/page.html:refresh
-</pre></div>
-
- <p>this leads to the internal invocation of the URL</p>
-
-<div class="example"><pre>
-/internal/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
-</pre></div>
-
- <p>The only missing part is the NPH-CGI script. Although
- one would usually say "left as an exercise to the reader"
- ;-) I will provide this, too.</p>
-
-<div class="example"><pre>
-#!/sw/bin/perl
-##
-## nph-refresh -- NPH/CGI script for auto refreshing pages
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-$| = 1;
-
-# split the QUERY_STRING variable
-@pairs = split(/&amp;/, $ENV{'QUERY_STRING'});
-foreach $pair (@pairs) {
- ($name, $value) = split(/=/, $pair);
- $name =~ tr/A-Z/a-z/;
- $name = 'QS_' . $name;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- eval "\$$name = \"$value\"";
-}
-$QS_s = 1 if ($QS_s eq '');
-$QS_n = 3600 if ($QS_n eq '');
-if ($QS_f eq '') {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: No file given\n";
- exit(0);
-}
-if (! -f $QS_f) {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: File $QS_f not found\n";
- exit(0);
-}
-
-sub print_http_headers_multipart_begin {
- print "HTTP/1.0 200 OK\n";
- $bound = "ThisRandomString12345";
- print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
- &amp;print_http_headers_multipart_next;
-}
-
-sub print_http_headers_multipart_next {
- print "\n--$bound\n";
-}
-
-sub print_http_headers_multipart_end {
- print "\n--$bound--\n";
-}
-
-sub displayhtml {
- local($buffer) = @_;
- $len = length($buffer);
- print "Content-type: text/html\n";
- print "Content-length: $len\n\n";
- print $buffer;
-}
-
-sub readfile {
- local($file) = @_;
- local(*FP, $size, $buffer, $bytes);
- ($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
- $size = sprintf("%d", $size);
- open(FP, "&amp;lt;$file");
- $bytes = sysread(FP, $buffer, $size);
- close(FP);
- return $buffer;
-}
-
-$buffer = &amp;readfile($QS_f);
-&amp;print_http_headers_multipart_begin;
-&amp;displayhtml($buffer);
-
-sub mystat {
- local($file) = $_[0];
- local($time);
-
- ($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
- return $mtime;
-}
-
-$mtimeL = &amp;mystat($QS_f);
-$mtime = $mtime;
-for ($n = 0; $n &amp;lt; $QS_n; $n++) {
- while (1) {
- $mtime = &amp;mystat($QS_f);
- if ($mtime ne $mtimeL) {
- $mtimeL = $mtime;
- sleep(2);
- $buffer = &amp;readfile($QS_f);
- &amp;print_http_headers_multipart_next;
- &amp;displayhtml($buffer);
- sleep(5);
- $mtimeL = &amp;mystat($QS_f);
- last;
- }
- sleep($QS_s);
- }
-}
-
-&amp;print_http_headers_multipart_end;
-
-exit(0);
-
-##EOF##
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Mass Virtual Hosting</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>The <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> feature of Apache is nice
- and works great when you just have a few dozens
- virtual hosts. But when you are an ISP and have hundreds of
- virtual hosts to provide this feature is not the best
- choice.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>To provide this feature we map the remote webpage or even
- the complete remote webarea to our namespace by the use
- of the <dfn>Proxy Throughput</dfn> feature (flag <code>[P]</code>):</p>
-
-<div class="example"><pre>
-##
-## vhost.map
-##
-www.vhost1.dom:80 /path/to/docroot/vhost1
-www.vhost2.dom:80 /path/to/docroot/vhost2
- :
-www.vhostN.dom:80 /path/to/docroot/vhostN
-</pre></div>
-
-<div class="example"><pre>
-##
-## httpd.conf
-##
- :
-# use the canonical hostname on redirects, etc.
-UseCanonicalName on
-
- :
-# add the virtual host in front of the CLF-format
-CustomLog /path/to/access_log "%{VHOST}e %h %l %u %t \"%r\" %&gt;s %b"
- :
-
-# enable the rewriting engine in the main server
-RewriteEngine on
-
-# define two maps: one for fixing the URL and one which defines
-# the available virtual hosts with their corresponding
-# DocumentRoot.
-RewriteMap lowercase int:tolower
-RewriteMap vhost txt:/path/to/vhost.map
-
-# Now do the actual virtual host mapping
-# via a huge and complicated single rule:
-#
-# 1. make sure we don't map for common locations
-RewriteCond %{REQUEST_URL} !^/commonurl1/.*
-RewriteCond %{REQUEST_URL} !^/commonurl2/.*
- :
-RewriteCond %{REQUEST_URL} !^/commonurlN/.*
-#
-# 2. make sure we have a Host header, because
-# currently our approach only supports
-# virtual hosting through this header
-RewriteCond %{HTTP_HOST} !^$
-#
-# 3. lowercase the hostname
-RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
-#
-# 4. lookup this hostname in vhost.map and
-# remember it only when it is a path
-# (and not "NONE" from above)
-RewriteCond ${vhost:%1} ^(/.*)$
-#
-# 5. finally we can map the URL to its docroot location
-# and remember the virtual host for logging puposes
-RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
- :
-</pre></div>
- </dd>
- </dl>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="access" id="access">Access Restriction</a></h2>
-
-
-
- <h3>Blocking of Robots</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we block a really annoying robot from
- retrieving pages of a specific webarea? A
- <code>/robots.txt</code> file containing entries of the
- "Robot Exclusion Protocol" is typically not enough to get
- rid of such a robot.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a ruleset which forbids the URLs of the webarea
- <code>/~quux/foo/arc/</code> (perhaps a very deep
- directory indexed area where the robot traversal would
- create big server load). We have to make sure that we
- forbid access only to the particular robot, i.e. just
- forbidding the host where the robot runs is not enough.
- This would block users from this host, too. We accomplish
- this by also matching the User-Agent HTTP header
- information.</p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>NameOfBadRobot</strong>.*
-RewriteCond %{REMOTE_ADDR} ^<strong>123\.45\.67\.[8-9]</strong>$
-RewriteRule ^<strong>/~quux/foo/arc/</strong>.+ - [<strong>F</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Blocked Inline-Images</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume we have under <code>http://www.quux-corp.de/~quux/</code>
- some pages with inlined GIF graphics. These graphics are
- nice, so others directly incorporate them via hyperlinks to
- their pages. We don't like this practice because it adds
- useless traffic to our server.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>While we cannot 100% protect the images from inclusion,
- we can at least restrict the cases where the browser
- sends a HTTP Referer header.</p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong>
-RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
-RewriteRule <strong>.*\.gif$</strong> - [F]
-</pre></div>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
-RewriteRule <strong>^inlined-in-foo\.gif$</strong> - [F]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Host Deny</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we forbid a list of externally configured hosts
- from using our server?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>For Apache &gt;= 1.3b6:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
-RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^/.* - [F]
-</pre></div>
-
- <p>For Apache &lt;= 1.3b6:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteRule ^/(.*)$ ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ /$1
-</pre></div>
-
-<div class="example"><pre>
-##
-## hosts.deny
-##
-## ATTENTION! This is a map, not a list, even when we treat it as such.
-## mod_rewrite parses it for key/value pairs, so at least a
-## dummy value "-" must be present for each entry.
-##
-
-193.102.180.41 -
-bsdti1.sdm.de -
-192.76.162.40 -
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Proxy Deny</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we forbid a certain host or even a user of a
- special host from using the Apache proxy?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We first have to make sure <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- is below(!) <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> in the Configuration
- file when compiling the Apache webserver. This way it gets
- called <em>before</em> <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. Then we
- configure the following for a host-dependent deny...</p>
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_HOST} <strong>^badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></div>
-
- <p>...and this one for a user@host-dependent deny:</p>
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>^badguy@badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Special Authentication Variant</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Sometimes a very special authentication is needed, for
- instance a authentication which checks for a set of
- explicitly configured users. Only these should receive
- access and without explicit prompting (which would occur
- when using the Basic Auth via <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>).</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a list of rewrite conditions to exclude all except
- our friends:</p>
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend1@client1.quux-corp\.com$</strong>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend2</strong>@client2.quux-corp\.com$
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend3</strong>@client3.quux-corp\.com$
-RewriteRule ^/~quux/only-for-friends/ - [F]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Referer-based Deflector</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we program a flexible URL Deflector which acts
- on the "Referer" HTTP header and can be configured with as
- many referring pages as we like?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>Use the following really tricky ruleset...</p>
-
-<div class="example"><pre>
-RewriteMap deflector txt:/path/to/deflector.map
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}} ^-$
-RewriteRule ^.* %{HTTP_REFERER} [R,L]
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^.* ${deflector:%{HTTP_REFERER}} [R,L]
-</pre></div>
-
- <p>... in conjunction with a corresponding rewrite
- map:</p>
-
-<div class="example"><pre>
-##
-## deflector.map
-##
-
-http://www.badguys.com/bad/index.html -
-http://www.badguys.com/bad/index2.html -
-http://www.badguys.com/bad/index3.html http://somewhere.com/
-</pre></div>
-
- <p>This automatically redirects the request back to the
- referring page (when "<code>-</code>" is used as the value
- in the map) or to a specific URL (when an URL is specified
- in the map as the second argument).</p>
- </dd>
- </dl>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">Other</a></h2>
-
-
-
- <h3>External Rewriting Engine</h3>
-
-
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>A FAQ: How can we solve the FOO/BAR/QUUX/etc.
- problem? There seems no solution by the use of
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>...</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>Use an external <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>, i.e. a program which acts
- like a <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>. It is run once on startup of Apache
- receives the requested URLs on <code>STDIN</code> and has
- to put the resulting (usually rewritten) URL on
- <code>STDOUT</code> (same order!).</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap quux-map <strong>prg:</strong>/path/to/map.quux.pl
-RewriteRule ^/~quux/(.*)$ /~quux/<strong>${quux-map:$1}</strong>
-</pre></div>
-
-<div class="example"><pre>
-#!/path/to/perl
-
-# disable buffered I/O which would lead
-# to deadloops for the Apache server
-$| = 1;
-
-# read URLs one per line from stdin and
-# generate substitution URL on stdout
-while (&lt;&gt;) {
- s|^foo/|bar/|;
- print $_;
-}
-</pre></div>
-
- <p>This is a demonstration-only example and just rewrites
- all URLs <code>/~quux/foo/...</code> to
- <code>/~quux/bar/...</code>. Actually you can program
- whatever you like. But notice that while such maps can be
- <strong>used</strong> also by an average user, only the
- system administrator can <strong>define</strong> it.</p>
- </dd>
- </dl>
-
-
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/misc/rewriteguide.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/rewriteguide.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/rewriteguide.html.ko.euc-kr b/docs/manual/misc/rewriteguide.html.ko.euc-kr
deleted file mode 100644
index 8f9c341288..0000000000
--- a/docs/manual/misc/rewriteguide.html.ko.euc-kr
+++ /dev/null
@@ -1,2004 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>URL ÀçÀÛ¼º Áöħ¼­ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>URL ÀçÀÛ¼º Áöħ¼­</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/rewriteguide.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/rewriteguide.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <div class="note">
- <p>¿øÀúÀÚ<br />
- <cite>Ralf S. Engelschall &lt;rse@apache.org&gt;</cite><br />
- 1997³â 12¿ù</p>
- </div>
-
- <p>ÀÌ ¹®¼­´Â <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> <a href="../mod/mod_rewrite.html">ÂüÁ¶ ¹®¼­</a>¸¦ º¸ÃæÇÑ´Ù.
- ÀÌ ¹®¼­´Â À¥°ü¸®ÀÚ°¡ ½ÇÁ¦ ÀÛ¾÷¿¡¼­ ºÎµúÄ¡°ÔµÇ´Â ÀüÇüÀûÀÎ
- URL°ü·Ã ¹®Á¦¸¦ ÇØ°áÇϱâÀ§Çؼ­ ¾î¶»°Ô ¾ÆÆÄÄ¡
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇÏ´ÂÁö ¼³¸íÇÑ´Ù. URL
- ÀçÀÛ¼º ±ÔÄ¢À» ¼³Á¤ÇÏ¿© ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀ» ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#ToC1"><code>mod_rewrite</code> ¼Ò°³</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ToC2">½Ç¿ëÀûÀÎ ÇØ°áÃ¥</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#url">URL ±¸Á¶</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#content">ÄÁÅÙÃ÷ ´Ù·ç±â</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#access">Á¢±Ù Á¦ÇÑ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#other">±âŸ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ToC1" id="ToC1"><code>mod_rewrite</code> ¼Ò°³</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ¸ðµâÀº ±²ÀåÇÏ´Ù.
- Áï, URLÀ» Á¶ÀÛÇÒ ¼ö ÀÖ´Â °­·ÂÇÏ°í ½Ç·Î Á¤±³ÇÑ ¸ðµâÀÌ´Ù.
- »ó»óÇØ¿Ô´ø °ÅÀÇ ¸ðµç Á¾·ùÀÇ URL Á¶ÀÛÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª
- ±× ´ë°¡·Î »ç¿ëÇϱ⠺¹ÀâÇÏ´Ù. <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>ÀÇ
- ÃÖ´ë ´ÜÁ¡Àº Ãʺ¸ÀÚ°¡ ÀÌÇØÇÏ°í »ç¿ëÇϱ⠽±Áö ¾Ê´Ù´Â Á¡ÀÌ´Ù.
- ½ÉÁö¾î ¾ÆÆÄÄ¡ Àü¹®°¡µµ Á¾Á¾ <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>ÀÇ
- »õ·Î¿î ¿ëµµ¸¦ ¹ß°ßÇÑ´Ù.</p>
-
- <p>´Ù¸¥ ¸»·Î: <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¿¡ ´ëÇØ ´ç½ÅÀº
- óÀ½¿¡ °ÌÀ» ¸Ô°í Àý´ë·Î ´Ù½Ã »ç¿ëÇÏÁö ¾Ê°Å³ª, °­·ÂÇÔ¿¡ ¸Å·áµÇ¾î
- ¾ÕÀ¸·Î »î µ¿¾È »ç¶û¿¡ ºüÁú °ÍÀÌ´Ù. ÀÌ ±ÛÀº ù¹ø° °æ¿ì¸¦
- ¸·±âÀ§ÇØ ÀÌ¹Ì ¾Ë·ÁÁø ¸î°¡Áö ¼º°ø»ç·Ê¸¦ ¼Ò°³ÇÏ·Á°í ÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ToC2" id="ToC2">½Ç¿ëÀûÀÎ ÇØ°áÃ¥</a></h2>
-
-
-
- <p>ÀÌÁ¦ ³»°¡ Á÷Á¢ ¸¸µé¾ú°Å³ª ´Ù¸¥ »ç¶÷µéÀÌ ¸¸µç ¸¹Àº ½Ç¿ëÀûÀÎ
- ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù. ¿¹Á¦¿¡¼­ URL ÀçÀÛ¼ºÀÇ È渶¼úÀ» ¸¶À½²¯ ¹è¿ì±æ
- ¹Ù¶õ´Ù.</p>
-
- <div class="warning">ÁÖÀÇ: ¼­¹ö ¼³Á¤¿¡ µû¶ó »óȲ¿¡ ¸Â°Ô
- ¿¹Á¦¸¦ Á¶±Ý ¼öÁ¤ÇØ¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, Ãß°¡·Î
- <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>, <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>
- µîÀ» »ç¿ëÇÑ´Ù¸é <code>[PT]</code> Ç÷¡±×¸¦ Ãß°¡ÇÑ´Ù. ȤÀº
- ÁÖ¼­¹ö¼³Á¤/°¡»óÈ£½ºÆ® »ç¿ëÀå¼Ò°¡ ¾Æ´Ñ <code>.htaccess</code>
- »ç¿ëÀå¼Ò¿¡ ¾Ë¸Â°Ô ±ÔÄ¢À» ¼öÁ¤ÇÒ ¼öµµ ÀÖ´Ù. »ç¿ëÇϱâ Àü¿¡
- Ç×»ó ±ÔÄ¢ÀÌ ¾î¶² ±â´ÉÀ» ÇÏ´ÂÁö ÀÌÇØÇϵµ·Ï Çضó. ±×·¯¸é ¹®Á¦¸¦
- ÇÇÇÒ ¼ö ÀÖ´Ù.</div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="url" id="url">URL ±¸Á¶</a></h2>
-
-
-
- <h3>±âÁØÀÌ µÇ´Â URL</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÇÑ ¸®¼Ò½º¿¡ ´ëÇØ ¿©·¯ URLÀ» °¡Áö´Â À¥¼­¹ö°¡ ÀÖ´Ù.
- º¸Åë (½ÇÁ¦ »ç¿ëÇÏ°í ¾Ë·ÁÁ®¾ß ÇÒ) ±âÁØÀÌ µÇ´Â URL°ú,
- ´ÜÃà ȤÀº ³»ºÎ ¿ëµµÀÇ URLÀÌ ÀÖ´Ù. »ç¿ëÀÚ°¡ ¿äû¿¡
- ¾î¶² URLÀ» »ç¿ëÇÏ´øÁö ±âÁØÀÌ µÇ´Â URL¸¸À» º¸¿©Áà¾ß
- ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>±âÁØÀÌ µÇÁö¾Ê´Â ¸ðµç URLÀ» ºê¶ó¿ìÀú°¡ ¾Ëµµ·Ï °íÄ¡±âÀ§ÇØ
- ¿ÜºÎ HTTP ¸®´ÙÀÌ·º¼ÇÇÑ´Ù. ¿¹¸¦ µé¾î ¾Æ·¡ ±ÔÄ¢Àº
- <code>/~user</code>¸¦ ±âÁØÀÌ µÇ´Â <code>/u/user</code>·Î
- ´ëüÇÏ°í, <code>/u/user</code> ¸¶Áö¸·¿¡ ½½·¡½¬°¡ ¾ø´Ù¸é
- Ãß°¡ÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteRule ^/<strong>~</strong>([^/]+)/?(.*) /<strong>u</strong>/$1/$2 [<strong>R</strong>]
-RewriteRule ^/([uge])/(<strong>[^/]+</strong>)$ /$1/$2<strong>/</strong> [<strong>R</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>±âÁØÀÌ µÇ´Â È£½ºÆ®¸í</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>...</dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
-<div class="example"><pre>
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteCond %{SERVER_PORT} !^80$
-RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3><code>DocumentRoot</code>¸¦ ¿Å±ä °æ¿ì</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>À¥¼­¹öÀÇ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>´Â º¸Åë URL
- "<code>/</code>"°ú Á÷Á¢ °ü·ÃÀÖ´Ù. ±×·¯³ª ÀÌ°÷¿¡ ¸ðµç
- ÀÚ·á°¡ ÀÖÁö ¾Ê°í, ÀÚ·á°¡ ´Ù¸¥ ¿©·¯ °÷¿¡ Èð¾îÁ®ÀÖ´Â
- °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ÀÎÆ®¶ó³Ý »çÀÌÆ®¿¡ (¿ÜºÎ¸¦ À§ÇÑ
- ȨÆäÀÌÁö) <code>/e/www/</code>¿Í (ÀÎÆ®¶ó³ÝÀ» À§ÇÑ
- ȨÆäÀÌÁö) <code>/e/sww/</code>°¡ ÀÖ´Ù°í ÇÏÀÚ. ÀÌÁ¦
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>°¡
- <code>/e/www/</code>À̱⶧¹®¿¡, ¿äû¿¡¼­ ÆäÀÌÁö¿¡
- Æ÷ÇÔµÈ ±×¸² µîÀ» ÀÌ°÷¿¡¼­ °¡Á®¿Í¾ß ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¿ì¸®´Â URL <code>/</code>¸¦ <code>/e/www/</code>·Î
- ¸®´ÙÀÌ·º¼Ç¸¸ ÇÏ¸é µÈ´Ù. »ç¼ÒÇØ º¸ÀÌÁö¸¸ ½ÇÁ¦·Î
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇؼ­¸¸ °¡´ÉÇÏ´Ù.
- (<code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> µîÀÌ Á¦°øÇÏ´Â) URL
- <em>Alias</em> °°Àº ÀüÇüÀûÀÎ ¹æ¹ýÀº <em>¾ÕºÎºÐ</em>¸¸
- ã´Â´Ù. <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>°¡
- ¸ðµç URLÀÇ ¾ÕºÎºÐÀ̱⶧¹®¿¡ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¿© ¸®´ÙÀÌ·º¼ÇÀ»
- ÇÒ ¼ö ¾ø´Ù. <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇϸé
- ÁøÂ¥ °£´ÜÇÏ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule <strong>^/$</strong> /e/www/ [<strong>R</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>¸¶Áö¸· ½½·¡½¬ ¹®Á¦</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>µð·ºÅ丮¸¦ ÁöĪÇÏ´Â URLÀÇ ¸¶Áö¸· ½½·¡½¬ ¹®Á¦°¡
- ¾ø´Ù¸é ¸ðµç À¥°ü¸®Àڴ ȯȣÇÒ °ÍÀÌ´Ù. ½½·¡½¬°¡ ¾ø´Ù¸é,
- Áï <code>/~quux/foo/</code> ´ë½Å <code>/~quux/foo</code>¸¦
- »ç¿ëÇÏ¸é ¼­¹ö°¡ <code>foo</code>¶ó´Â <em>ÆÄÀÏ</em>À»
- ã±â¶§¹®¿¡ ¿À·ù°¡ ¹ß»ýÇÑ´Ù. ÆÄÀÏÀÌ µð·ºÅ丮À̱⶧¹®¿¡
- ¹Þ¾ÆµéÀÌÁö ¾Ê´Â´Ù. ´ëºÎºÐÀÇ °æ¿ì º¸Åë ¼­¹ö°¡ ÀÚµ¿À¸·Î
- URLÀ» °íÄ¡Áö¸¸, °¡²û Á÷Á¢ ÇØÁà¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦
- µé¾î, CGI ½ºÅ©¸³Æ® µîÀ¸·Î º¹ÀâÇÑ URL ÀçÀÛ¼ºÀ» ÇÑ ÈÄ¿¡
- ±×·¯ÇÏ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀÌ ¹Ì¹¦ÇÑ ¹®Á¦ÀÇ ÇØ°á¹æ¹ýÀº ¼­¹ö°¡ ÀÚµ¿À¸·Î ¸¶Áö¸·
- ½½·¡½¬¸¦ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. ºê¶ó¿ìÀú°¡ ³ª¸ÓÁö ±×¸² µîÀ»
- ¿Ã¹Ù·Î ¿äûÇÒ ¼ö ÀÖµµ·Ï, ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ» ÇØ¾ß ÇÑ´Ù.
- ³»ºÎ ¸®´ÙÀÌ·º¼ÇÀ» ÇÑ´Ù¸é µð·ºÅ丮 ÆäÀÌÁö¿¡¸¸ µ¿ÀÛÇÏ¿©
- ÀÌ ÆäÀÌÁö°¡ »ó´ë URL·Î Æ÷ÇÔÇÏ´Â ±×¸²À» ºê¶ó¿ìÀú°¡
- ¿äûÇÒ¶§ ãÀ» ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î, ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
- »ç¿ëÇÏÁö ¾ÊÀ»¶§ <code>/~quux/foo/index.html</code>¿¡¼­
- <code>image.gif</code>¸¦ ¿äûÇϸé
- <code>/~quux/image.gif</code>¸¦ ¿äûÇÏ°Ô µÈ´Ù!</p>
-
- <p>±×·¡¼­ À̸¦ ÇØ°áÇϱâÀ§ÇØ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo<strong>$</strong> foo<strong>/</strong> [<strong>R</strong>]
-</pre></div>
-
- <p>Ȩµð·ºÅ丮ÀÇ ÃÖ»óÀ§ <code>.htaccess</code> ÆÄÀÏ¿¡
- ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ó¸®Çϴµ¥ ºÎ´ãÀÌ
- µÈ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteCond %{REQUEST_FILENAME} <strong>-d</strong>
-RewriteRule ^(.+<strong>[^/]</strong>)$ $1<strong>/</strong> [R]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>ÀÏ°üµÈ URL ±¸Á¶·Î ¸¸µç À¥Å¬·¯½ºÅÍ</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÀÎÆ®¶ó³Ý À¥¼­¹ö±ºÀÇ ¸ðµç À¥¼­¹ö¿¡ µ¿ÀÏÇÏ°í ÀÏ°üµÈ
- URL ±¸Á¶¸¦ ¸¸µé°í ½Í´Ù. Áï, ¸ðµç (Á¤ÀÇ»ó ¼­¹ö¿¡ ¼ÓÇÏ¿©
- ¼­¹ö¿¡ ÀÇÁ¸ÀûÀÎ!) URLÀ» ¼­¹ö <em>µ¶¸³ÀûÀ¸·Î</em> ¸¸µç´Ù!
- À¥ À̸§°ø°£¿¡ ¼­¹öµ¶¸³ÀûÀÎ µ¿ÀÏÇÑ ±¸Á¶¸¦ ºÎ¿©ÇØ¾ß ÇÑ´Ù:
- URLÀº ½ÇÁ¦ ¼­¹ö¸¦ ÁöĪÇÏ¸é ¾ÈµÈ´Ù. ¼­¹ö±ºÀÌ ÀÚµ¿À¸·Î
- ½ÇÁ¦ ¼­¹ö·Î À¯µµÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú »ç¿ëÀÚ, ±×·ì, µ¶¸³Ã¼ÀÇ À§Ä¡ Á¤º¸¸¦ ÀúÀåÇÑ
- (ºÐ»êµÈ) ¿ÜºÎ¸Ê¿¡ ½ÇÁ¦ ¼­¹ö Á¤º¸¸¦ ¾ò¾î¿Â´Ù. ¿ÜºÎ¸ÊÀº
- ´ÙÀ½°ú °°Àº Çü½ÄÀÌ´Ù</p>
-
-<div class="example"><pre>
-user1 server_of_user1
-user2 server_of_user2
-: :
-</pre></div>
-
- <p>¿ì¸®´Â ÀÌ Á¤º¸¸¦ °¢°¢ <code>map.xxx-to-host</code>
- ÆÄÀÏ¿¡ ÀúÀåÇß´Ù. ´ÙÀ½À¸·Î ¸ðµç ¼­¹ö¿¡¼­ URLÀÌ ¼­¹ö¿¡
- ¾ø´Ù¸é ´ÙÀ½°ú °°Àº URLÀ»,</p>
-
-<div class="example"><pre>
-/u/user/anypath
-/g/group/anypath
-/e/entity/anypath
-</pre></div>
-
- <p>´ÙÀ½°ú °°ÀÌ ¸®´ÙÀÌ·º¼ÇÇÑ´Ù</p>
-
-<div class="example"><pre>
-http://physical-host/u/user/anypath
-http://physical-host/g/group/anypath
-http://physical-host/e/entity/anypath
-</pre></div>
-
- <p>¾Æ·¡ ±ÔÄ¢Àº ¸ÊÆÄÀÏÀ» »ç¿ëÇÏ¿© ÀÌ ÀÛ¾÷À» ÇÑ´Ù (server0Àº
- ¸Ê¿¡ Ç׸ñÀÌ ¾ø´Â °æ¿ì »ç¿ëÇÒ ±âº»¼­¹ö¶ó°í °¡Á¤ÇÑ´Ù):</p>
-
-<div class="example"><pre>
-RewriteEngine on
-
-RewriteMap user-to-host txt:/path/to/map.user-to-host
-RewriteMap group-to-host txt:/path/to/map.group-to-host
-RewriteMap entity-to-host txt:/path/to/map.entity-to-host
-
-RewriteRule ^/u/<strong>([^/]+)</strong>/?(.*) http://<strong>${user-to-host:$1|server0}</strong>/u/$1/$2
-RewriteRule ^/g/<strong>([^/]+)</strong>/?(.*) http://<strong>${group-to-host:$1|server0}</strong>/g/$1/$2
-RewriteRule ^/e/<strong>([^/]+)</strong>/?(.*) http://<strong>${entity-to-host:$1|server0}</strong>/e/$1/$2
-
-RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
-RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Ȩµð·ºÅ丮¸¦ ´Ù¸¥ À¥¼­¹ö·Î ÀÌÀü</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¸¹Àº À¥°ü¸®ÀÚ´Â À¥¼­¹öÀÇ ¸ðµç Ȩµð·ºÅ丮¸¦ ´Ù¸¥
- À¥¼­¹ö·Î ÀÌÀüÇÑ °æ¿ì ÇØ°áÃ¥À» ¹°¾îº»´Ù. ÀÌ ¹æ¹ýÀº
- ÀÌÀü ¼­¹ö¸¦ ´ëüÇÒ »õ·Î¿î ¼­¹ö¸¦ ±¸¼ºÇϴµ¥ ½Ã°£ÀÌ
- °É¸®´Â °æ¿ì¿¡ ÇÊ¿äÇÏ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇÏ¸é °£´ÜÇÏ´Ù.
- ÀÌÀü À¥¼­¹ö´Â ¸ðµç <code>/~user/anypath</code> URLÀ»
- <code>http://newserver/~user/anypath</code>·Î
- ¸®´ÙÀÌ·º¼ÇÇÏ¸é µÈ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^/~(.+) http://<strong>newserver</strong>/~$1 [R,L]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Ȩµð·ºÅ丮 ±¸Á¶ ¸¸µé±â</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>»ç¿ëÀÚ°¡ ¼öõ¸íÀÎ »çÀÌÆ®´Â º¸Åë Ȩµð·ºÅ丮 ±¸Á¶¸¦
- ¸¸µç´Ù. Áï, ¿¹¸¦ µé¾î À̸§ÀÌ »ç¿ëÀÚ¸íÀÇ Ã¹¹ø° ¹®ÀÚÀÎ
- ÇÏÀ§µð·ºÅ丮¿¡ Ȩµð·ºÅ丮¸¦ µÐ´Ù. ±×·¡¼­,
- <code>/~foo/anypath</code>´Â
- <code>/home/<strong>f</strong>/foo/.www/anypath</code>ÀÌ°í,
- <code>/~bar/anypath</code>´Â
- <code>/home/<strong>b</strong>/bar/.www/anypath</code>ÀÌ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¹°°áÇ¥½Ã°¡ ÀÖ´Â URLÀ» À§¿Í °°Àº ±¸Á¶·Î º¯È¯ÇϱâÀ§ÇØ
- ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/.www$3
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>ÆÄÀϽýºÅÛ À籸¼º</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÀÌ ¿¹´Â ½Ç·Î ÇϵåÄÚ¾îÀûÀÌ´Ù: µð·ºÅ丮º°
- <code>RewriteRules</code>¸¦ ¸Å¿ì ¸¹ÀÌ »ç¿ëÇÏ¿© ÀÚ·á
- ÀÚü´Â ±×´ë·Î µÐü·Î À¥¿¡ ÀڷḦ ÀÚ¿¬½º·´°Ô ºê¶ó¿ì¡Çϵµ·Ï
- ÇÑ´Ù. ¹è°æ: ³ª´Â 1992³â ºÎÅÍ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â
- À¯´Ð½º ¼ÒÇÁÆ®¿þ¾îµéÀ» <strong><em>net.sw</em></strong>¿¡
- ¸ð¾ÆµÎ°í ÀÖ¾ú´Ù. ÀÌ´Â ³»°¡ ÄÄÇ»ÅÍ°úÇÐÀ» °øºÎÇϸ鼭
- ¿©·¯Çص¿¾È ¿©°¡½Ã°£¿¡ ½Ã½ºÅÛ °ü¸®ÀÚ¿Í ³×Æ®¿÷ °ü¸®ÀÚ¸¦
- ÇؿԱ⶧¹®¿¡ ³» Ãë¹ÌÀÌÀÚ ÀÏÀÌ´Ù. ¸ÅÁÖ¸¶´Ù »õ·Î ¼ÒÇÁÆ®¿þ¾î°¡
- Ãß°¡µÉ ¶§¸¶´Ù µð·ºÅ丮¸¦ ±í°Ô ¸¸µé¾î¿Ô´Ù:</p>
-
-<div class="example"><pre>
-drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
-drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
-drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
-drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
-drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
-drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
-drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
-drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
-drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
-drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
-drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
-drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
-drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
-drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/
-</pre></div>
-
- <p>1996³â 7¿ù ÀÌ ÀúÀå¼Ò¸¦ ¸ÚÀÖ´Â À¥ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ
- ¼¼»ó¿¡ °ø°³Çϱâ·Î °áÁ¤ÇÞ´Ù. "¸ÚÀÖ´Ù"´Â ¸»Àº, ÃÖ»óÀ§
- µð·ºÅ丮¿¡ CGI ½ºÅ©¸³Æ®¸¦ µÎÁö ¾Ê°íµµ, ÀúÀå¼Ò °èÃþ±¸Á¶¸¦
- Á÷Á¢ ºê¶ó¿ìÁúÇÏ±æ ¹Ù¶õ´Ù´Â ¶æÀÌ´Ù. ¿Ö? ÀúÀå¼Ò¸¦ ³ªÁß¿¡
- FTP·Îµµ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ¸¸µé ¿¹Á¤ÀÌ¿´±â¶§¹®¿¡ À¥À̳ª
- CGI¿Í °ü·ÃµÈ ³»¿ëÀ» °°ÀÌ µÎ±â ½È¾ú´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÇØ°áÃ¥Àº µÎ ºÎºÐÀ¸·Î ³ª´¶´Ù: ¸ÕÀú µð·ºÅ丮 ¼öÁØ¿¡¼­
- ÇÊ¿äÇÑ ¸ðµç ÆäÀÌÁö¸¦ µ¿ÀûÀ¸·Î ¸¸µå´Â CGI ½ºÅ©¸³Æ®°¡
- ÇÊ¿äÇÏ´Ù. ³ª´Â ÀÌ ½ºÅ©¸³Æ®µéÀ» ´ÙÀ½°ú °°ÀÌ
- <code>/e/netsw/.www/</code>¿¡ µÎ¾ú´Ù:</p>
-
-<div class="example"><pre>
--rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
-drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
--rw-rw-rw- 1 netsw users 372982 Aug 5 16:35 LOGFILE
--rw-r--r-- 1 netsw users 659 Aug 4 09:27 TODO
--rw-r--r-- 1 netsw users 5697 Aug 1 18:01 netsw-about.html
--rwxr-xr-x 1 netsw users 579 Aug 2 10:33 netsw-access.pl
--rwxr-xr-x 1 netsw users 1532 Aug 1 17:35 netsw-changes.cgi
--rwxr-xr-x 1 netsw users 2866 Aug 5 14:49 netsw-home.cgi
-drwxr-xr-x 2 netsw users 512 Jul 8 23:47 netsw-img/
--rwxr-xr-x 1 netsw users 24050 Aug 5 15:49 netsw-lsdir.cgi
--rwxr-xr-x 1 netsw users 1589 Aug 3 18:43 netsw-search.cgi
--rwxr-xr-x 1 netsw users 1885 Aug 1 17:41 netsw-tree.cgi
--rw-r--r-- 1 netsw users 234 Jul 30 16:35 netsw-unlimit.lst
-</pre></div>
-
- <p><code>DATA/</code> ÇÏÀ§µð·ºÅ丮¿¡ À§¿¡¼­ ¸»ÇÑ ÀúÀå¼Ò°¡
- ÀÖ´Ù. ½ÇÁ¦ <strong><em>net.sw</em></strong>ÀÇ ³»¿ëÀº º¸Åë
- <code>rdist</code>¸¦ »ç¿ëÇÏ¿© ÀÚµ¿À¸·Î °¡Á®¿Â´Ù. µÎ¹ø°
- ºÎºÐÀÌ ³²¾Ò´Ù: ¾î¶»°Ô ÀÌ µÎ ±¸Á¶¸¦ ÇϳªÀÇ ÀÚ¿¬½º·¯¿î
- URL ±¸Á¶·Î ¿¬°áÇϴ°¡? »ç¿ëÀÚ¿¡°Ô <code>DATA/</code>
- µð·ºÅ丮¸¦ °¨Ãß°í, URL¸¶´Ù ÀûÀýÇÑ CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í
- ½Í´Ù. ÇØ°áÃ¥Àº ´ÙÀ½°ú °°´Ù: ¸ÕÀú ¼­¹öÀÇ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>¿¡¼­ °ø°³µÈ
- URL <code>/net.sw/</code>¸¦ ³»ºÎ °æ·Î <code>/e/netsw</code>·Î
- ÀçÀÛ¼ºÇϱâÀ§ÇØ µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteRule ^net.sw$ net.sw/ [R]
-RewriteRule ^net.sw/(.*)$ e/netsw/$1
-</pre></div>
-
- <p>ù¹ø° ±ÔÄ¢Àº ¸¶Áö¸·¿¡ ½½·¡½¬°¡ ¾ø´Â ¿äûÀ» À§Çؼ­
- »ç¿ëÇß´Ù! µÎ¹ø° ±ÔÄ¢ÀÌ ½ÇÁ¦ ÀÛ¾÷À» ÇÑ´Ù. ±×¸®°í µð·ºÅ丮º°
- ¼³Á¤ÆÄÀÏ <code>/e/netsw/.www/.wwwacl</code>¿¡ °áÁ¤ÀûÀÎ
- ¼³Á¤ÀÌ ³ª¿Â´Ù:</p>
-
-<div class="example"><pre>
-Options ExecCGI FollowSymLinks Includes MultiViews
-
-RewriteEngine on
-
-# ¾Õ ºÎºÐÀÌ /net.sw/ ·Î Á¢±ÙÇÑ´Ù
-RewriteBase /net.sw/
-
-# ¸ÕÀú ÃÖ»óÀ§ µð·ºÅ丮¸¦
-# cgi ½ºÅ©¸³Æ®·Î ÀçÀÛ¼ºÇÑ´Ù
-RewriteRule ^$ netsw-home.cgi [L]
-RewriteRule ^index\.html$ netsw-home.cgi [L]
-
-# ºê¶ó¿ìÀú°¡ µð·ºÅ丮º° ÆäÀÌÁö¸¦ ¿äûÇÑ °æ¿ì
-# ÇÏÀ§µð·ºÅ丮¸¦ ÃßÃâÇÑ´Ù
-RewriteRule ^.+/(netsw-[^/]+/.+)$ $1 [L]
-
-# ÀÌÁ¦ ÀçÀÛ¼ºÀ» ¸¶Ä£´Ù
-RewriteRule ^netsw-home\.cgi.* - [L]
-RewriteRule ^netsw-changes\.cgi.* - [L]
-RewriteRule ^netsw-search\.cgi.* - [L]
-RewriteRule ^netsw-tree\.cgi$ - [L]
-RewriteRule ^netsw-about\.html$ - [L]
-RewriteRule ^netsw-img/.*$ - [L]
-
-# ´Ù¸¥ cgi ½ºÅ©¸³Æ®°¡ ó¸®ÇÒ
-# ÇÏÀ§µð·ºÅ丮°¡ ³²¾Ò´Ù
-RewriteRule !^netsw-lsdir\.cgi.* - [C]
-RewriteRule (.*) netsw-lsdir.cgi/$1
-</pre></div>
-
- <p>Çؼ®À» À§ÇÑ ÈùÆ®:</p>
-
- <ol>
- <li>³×¹ø° ºÎºÐ¿¡¼­ ´ëü Çʵå('<code>-</code>')°¡
- ¾ø°í <code>L</code> (last) Ç÷¡±×°¡ ÀÖÀ½À» ÁÖ¸ñÇ϶ó</li>
-
- <li>¸¶Áö¸· ºÎºÐ¿¡¼­ ù¹ø° ±ÔÄ¢¿¡ <code>!</code>
- (not) ¹®ÀÚ¿Í <code>C</code> (chain) Ç÷¡±×¸¦ ÁÖ¸ñÇ϶ó</li>
-
- <li>¸¶Áö¸· ±ÔÄ¢¿¡¼­ ±âŸ ÇØ´çÇÏÁö ¾Ê´Â ¸ðµç °æ¿ì¸¦
- Àâ¾Æ³»´Â ÆÐÅÏÀ» ÁÖ¸ñÇ϶ó</li>
- </ol>
- </dd>
- </dl>
-
-
-
- <h3>NCSA imagemapÀ» ¾ÆÆÄÄ¡ <code>mod_imap</code>À¸·Î</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>»ç¶÷µéÀº NCSA À¥¼­¹ö¿¡¼­ Çö´ëÀûÀÎ ¾ÆÆÄÄ¡ À¥¼­¹ö·Î
- ÀÚ¿¬½º·´°Ô ¿Å°Ü°¡±æ ¹Ù¶õ´Ù. ±×·¡¼­ ¿À·¡µÈ NCSA
- <code>imagemap</code> ÇÁ·Î±×·¥À» »ç¿ëÇÑ ÆäÀÌÁö¸¦ Çö´ëÀûÀÎ
- ¾ÆÆÄÄ¡ <code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code>·Î ó¸®ÇÏ±æ ¹Ù¶õ´Ù.
- ¹®Á¦´Â <code>imagemap</code> ÇÁ·Î±×·¥À»
- <code>/cgi-bin/imagemap/path/to/page.map</code>°ú
- °°ÀÌ ÂüÁ¶ÇÏ´Â ÇÏÀÌÆÛ¸µÅ©°¡ ¸¹´Ù´Â °ÍÀÌ´Ù. ¾ÆÆÄÄ¡´Â
- <code>/path/to/page.map</code>°ú °°Àº ¿äûÀ» ¹Þ¾Æ¾ß
- ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ðµç ¿äû¿¡¼­ ¾ÕºÎºÐÀ» µ¿ÀûÀ¸·Î Á¦°ÅÇÏ´Â Àü¿ª ±ÔÄ¢À»
- »ç¿ëÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>¿©·¯ µð·ºÅ丮¿¡¼­ ÆäÀÌÁö °Ë»ö</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡²û À¥¼­¹ö°¡ ¿©·¯ µð·ºÅ丮¿¡¼­ ÆÄÀÏÀ» ã¾Æ¾ß ÇÒ
- ¶§°¡ ÀÖ´Ù. ÀÌ °æ¿ì MultiViews³ª ´Ù¸¥ ¹æ¹ýÀº µµ¿òÀÌ
- ¾ÈµÈ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¿©·¯ µð·ºÅ丮¿¡¼­ ÆÄÀÏÀ» ã´Â ±ÔÄ¢À» Á÷Á¢ ÇÁ·Î±×·¥ÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-
-# ¸ÕÀú custom/¿¡¼­ ã±æ ½ÃµµÇÏ°í...
-# ...ãÀ¸¸é ³¡!
-RewriteCond /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir1</strong>/$1 [L]
-
-# µÎ¹ø°·Î pub/¿¡¼­ ã±æ ½ÃµµÇÑ´Ù...
-# ...ãÀ¸¸é ³¡!
-RewriteCond /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir2</strong>/$1 [L]
-
-# ¸øãÀ¸¸é ´Ù¸¥ Alias³ª ScriptAlias Áö½Ã¾î µîÀ¸·Î ÁøÇàÇÑ´Ù.
-RewriteRule ^(.+) - [PT]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>URL¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¿äûµé°£¿¡ »óÅÂÁ¤º¸¸¦ À¯ÁöÇϱâÀ§ÇØ URL¿¡ Á¤º¸¸¦
- ÀÎÄÚµùÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. ±×·¯³ª ´ÜÁö ÀÌ Á¤º¸¸¦ Á¦°ÅÇϱâÀ§ÇØ
- ¸ðµç ÆäÀÌÁö¿¡ CGI wrapper¸¦ »ç¿ëÇÏ°í ½ÍÁö ¾Ê´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀçÀÛ¼º ±ÔÄ¢À» »ç¿ëÇÏ¿© »óÅÂÁ¤º¸¸¦ ÃßÃâÇÏ°í, ÃßÃâÇÑ
- Á¤º¸¸¦ ³ªÁß¿¡ XSSI³ª CGI¿¡¼­ »ç¿ëÇϱâÀ§ÇØ È¯°æº¯¼ö¿¡
- ÀúÀåÇÑ´Ù. ±×·¡¼­ URL <code>/foo/S=java/bar/</code>´Â
- <code>/foo/bar/</code>·Î º¯È¯µÇ°í <code>STATUS</code>¶ó´Â
- ȯ°æº¯¼ö °ªÀ» "java"·Î ¼³Á¤ÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteRule ^(.*)/<strong>S=([^/]+)</strong>/(.*) $1/$3 [E=<strong>STATUS:$2</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>°¡»ó »ç¿ëÀÚ È£½ºÆ®</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏÁö ¾Ê°í °°Àº ÄÄÇ»ÅÍ·Î DNS A
- ·¹Äڵ带 ¼³Á¤ÇÏ¿©
- <code>www.<strong>username</strong>.host.domain.com</code>À»
- »ç¿ëÀÚÀÇ È¨ÆäÀÌÁö·Î Á¦°øÇÏ°í ½Í´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>HTTP/1.0 ¿äûÀÇ °æ¿ì ¹æ¹ýÀÌ ¾øÁö¸¸, Host: HTTP
- Çì´õ¸¦ Æ÷ÇÔÇÑ HTTP/1.1 ¿äûÀº ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÏ¿©
- ³»ºÎÀûÀ¸·Î <code>http://www.username.host.com/anypath</code>¸¦
- <code>/home/username/anypath</code>·Î ÀçÀÛ¼ºÇÒ ¼ö
- ÀÖ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{<strong>HTTP_HOST</strong>} ^www\.<strong>[^.]+</strong>\.host\.com$
-RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
-RewriteRule ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Ȩµð·ºÅ丮¸¦ ¿ÜºÎ ¼­¹ö·Î ¸®´ÙÀÌ·º¼Ç</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>Áö¿ª µµ¸ÞÀÎ <code>ourdomain.com</code> ¹Û¿¡¼­ ¿äûÀÌ
- µé¾î¿À¸é Ȩµð·ºÅ丮 URLÀ» ´Ù¸¥ À¥¼­¹ö
- <code>www.somewhere.com</code>À¸·Î ¸®´Ù¸®·º¼ÇÇϱæ
- ¹Ù¶õ´Ù. Á¾Á¾ °¡»óÈ£½ºÆ® »ç¿ëÀå¼Ò¿¡¼­ »ç¿ëÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀçÀÛ¼º Á¶°ÇÀ» »ç¿ëÇÏ¸é µÈ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{REMOTE_HOST} <strong>!^.+\.ourdomain\.com$</strong>
-RewriteRule ^(/~.+) http://www.somewhere.com/$1 [R,L]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>½ÇÆÐÇÑ URLÀ» ´Ù¸¥ À¥¼­¹ö·Î ¸®´ÙÀÌ·º¼Ç</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>URL ÀçÀÛ¼º¿¡ ´ëÇؼ­ À¥¼­¹ö A¿¡ ÇØ´ç ÆÄÀÏÀÌ ¾ø´Â
- °æ¿ì À¥¼­¹ö B·Î ¿äûÀ» ¸®´ÙÀÌ·º¼ÇÇÏ´Â ¹æ¹ýÀ» ÀÚÁÖ
- ¹°¾îº»´Ù. º¸Åë Perl·Î ÀÛ¼ºÇÑ <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> CGI ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÏÁö¸¸, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇÏ´Â
- ¹æ¹ýµµ ÀÖ´Ù. ±×·¯³ª ¼º´ÉÀº <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> CGI ½ºÅ©¸³Æ®º¸´Ù
- ¶³¾îÁüÀ» ¸í½ÉÇ϶ó!</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ù¹ø° ¹æ¹ýÀº ºü¸£Áö¸¸ À¯¿¬¼ºÀÌ ¶³¾îÁö°í ¿ÏÀüÇÏÁö
- ¾Ê´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond /your/docroot/%{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></div>
-
- <p>ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> ¾È¿¡ ÀÖ´Â ÆäÀÌÁö¸¸
- °¡´ÉÇÏ´Ù´Â Á¡ÀÌ´Ù. (¿¹¸¦ µé¾î Ȩµð·ºÅ丮 µîÀ» À§ÇØ)
- Á¶°ÇÀ» Ãß°¡ÇÒ ¼ö ÀÖÁö¸¸, ´õ ÁÁÀº ¹æ¹ýÀÌ ÀÖ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{REQUEST_URI} <strong>!-U</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></div>
-
- <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>ÀÇ URL Àü¹æÂüÁ¶(look-ahead)¸¦
- »ç¿ëÇÑ´Ù. ±×·¡¼­ ¸ðµç URL¿¡ µ¿ÀÛÇÏ°í ¾ÈÀüÇÏ´Ù. ±×·¯³ª
- ¸ðµç ¿äû¸¶´Ù ³»ºÎ ÇÏÀ§¿äûÀ» Çѹø ´õ Çϱ⶧¹®¿¡ À¥¼­¹ö
- ¼º´É¿¡ ¾Ç¿µÇâÀ» ÁØ´Ù. ±×·¡¼­ °­·ÂÇÑ CPU¿¡¼­ À¥¼­¹ö¸¦
- ½ÇÇàÇÑ´Ù¸é »ç¿ëÇ϶ó. ÄÄÇ»ÅÍ°¡ ´À¸®´Ù¸é ù¹ø° ¹æ¹ýÀ̳ª
- ´õ ³ªÀº <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code>
- CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇ϶ó.</p>
- </dd>
- </dl>
-
-
-
- <h3>È®Àå ¸®´ÙÀÌ·º¼Ç</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡²û ¸®´ÙÀÌ·º¼ÇÇÏ´Â URLÀ» ´õ Á¶ÀýÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
- ¾ÆÆÄÄ¡ ³»ºÎ URL escape ÇÔ¼ö´Â "<code>url#anchor</code>"
- °°Àº URLÀÇ anchorµµ escapeÇÑ´Ù. ¾ÆÆÄÄ¡ÀÇ
- <code>uri_escape()</code> ÇÔ¼ö´Â ¿ì¹°Á¤ÀÚ(#)µµ °°ÀÌ
- escapeÇϹǷΠ»ç¿ëÇÒ ¼ö ¾ø´Ù. ±×·¯¸é ¾î¶»°Ô ÀÌ·± URL·Î
- ¸®´ÙÀÌ·º¼ÇÇÒ ¼ö ÀÖ³ª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>Á÷Á¢ ¸®´ÙÀÌ·º¼ÇÇÏ´Â NPH-CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ ÇØ°áÃ¥ÀÌ
- ÇÊ¿äÇÏ´Ù. escape¸¦ ÇÏÁö ¾Ê±â¶§¹®ÀÌ´Ù (NPH=non-parseable
- headers). ¸ÕÀú ´ÙÀ½ ¼­¹ö¼³Á¤À» ÇÏ¿© (ÀçÀÛ¼º ±ÔÄ¢ÀÇ
- ³¡ºÎºÐ¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù) »õ·Î¿î URL scheme
- <code>xredirect:</code>¸¦ µµÀÔÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
- [T=application/x-httpd-cgi,L]
-</pre></div>
-
- <p>±×·¯¸é <code>xredirect:</code>·Î ½ÃÀÛÇÏ´Â ¸ðµç URLÀº
- <code>nph-xredirect.cgi</code> ÇÁ·Î±×·¥À» ÅëÇÏ°Ô µÈ´Ù.
- ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°´Ù:</p>
-
-<div class="example"><pre>
-#!/path/to/perl
-##
-## nph-xredirect.cgi -- NPH/CGI script for extended redirects
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-
-$| = 1;
-$url = $ENV{'PATH_INFO'};
-
-print "HTTP/1.0 302 Moved Temporarily\n";
-print "Server: $ENV{'SERVER_SOFTWARE'}\n";
-print "Location: $url\n";
-print "Content-type: text/html\n";
-print "\n";
-print "&lt;html&gt;\n";
-print "&lt;head&gt;\n";
-print "&lt;title&gt;302 Moved Temporarily (EXTENDED)&lt;/title&gt;\n";
-print "&lt;/head&gt;\n";
-print "&lt;body&gt;\n";
-print "&lt;h1&gt;Moved Temporarily (EXTENDED)&lt;/h1&gt;\n";
-print "The document has moved &lt;a HREF=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
-print "&lt;/body&gt;\n";
-print "&lt;/html&gt;\n";
-
-##EOF##
-</pre></div>
-
- <p>±×·¯¸é <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>°¡ Á÷Á¢ ¹ÞÁö¸øÇÏ´Â
- ¸ðµç URL schemeÀ¸·Î ¸®´ÙÀÌ·º¼ÇÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
- ´ÙÀ½°ú °°ÀÌ <code>news:newsgroup</code>À¸·Î ¸®´ÙÀÌ·º¼ÇÇÒ
- ¼ö ÀÖ´Ù</p>
-
-<div class="example"><pre>
-RewriteRule ^anyurl xredirect:news:newsgroup
-</pre></div>
-
- <div class="note">ÁÖÀÇ: À§ÀÇ Æ¯º°ÇÑ "Åë°ú" ±ÔÄ¢À» »ç¿ëÇÏ¿©
- <code>xredirect:</code>¸¦ ¸¶Áö¸·¿¡ È®ÀåÇØ¾ß Çϱ⶧¹®¿¡
- ±ÔÄ¢¿¡ <code>[R]</code>À̳ª <code>[R,L]</code>À» »ç¿ëÇϸé
- ¾ÈµÈ´Ù.</div>
- </dd>
- </dl>
-
-
-
- <h3>ÀúÀå¼Ò Á¢±Ù Áß°è(multiplexer)</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p><a href="http://www.perl.com/CPAN">http://www.perl.com/CPAN</a>¿¡
- ÀÖ´Â ´ë´ÜÇÑ CPAN (Comprehensive Perl Archive Network)À»
- ¾Æ´Â°¡? ÀÌ ÁÖ¼Ò´Â ¼¼°è¿¡ Èð¾îÁø ¿©·¯ CPAN ¹Ì·¯ FTP
- ¼­¹öÁß Å¬¶óÀ̾ðÆ®¿¡ °¡±îÀÌ ÀÖ´Â ¼­¹ö·Î ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.
- À̸¦ FTP Á¢±Ù Áß°è ¼­ºñ½º¶ó°í ÇÑ´Ù. CPANÀº CGI ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÏÁö¸¸, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇÏ¿©
- ºñ½ÁÇÏ°Ô ¸¸µé ¼ö ÀÖÀ»±î?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> 3.0.0 ¹öÀüºÎÅÍ
- ¸®´ÙÀÌ·º¼Ç¿¡ "<code>ftp:</code>" schemeÀ» »ç¿ëÇÒ ¼ö
- ÀÖ´Ù. ´ÙÀ½À¸·Î Ŭ¶óÀ̾ðÆ®ÀÇ ÃÖ»óÀ§ µµ¸ÞÀÎÀ» <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>°ú °°ÀÌ
- »ç¿ëÇÏ¿© À§Ä¡¸¦ ÃßÁ¤ÇÒ ¼ö ÀÖ´Ù. º¹ÀâÈ÷ ¿«ÀÎ ±ÔÄ¢¿¡¼­
- ÃÖ»óÀ§ µµ¸ÞÀÎÀ» Áß°è¸ÊÀÇ Å°·Î »ç¿ëÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap multiplex txt:/path/to/map.cxan
-RewriteRule ^/CxAN/(.*) %{REMOTE_HOST}::$1 [C]
-RewriteRule ^.+\.<strong>([a-zA-Z]+)</strong>::(.*)$ ${multiplex:<strong>$1</strong>|ftp.default.dom}$2 [R,L]
-</pre></div>
-
-<div class="example"><pre>
-##
-## map.cxan -- Multiplexing Map for CxAN
-##
-
-de ftp://ftp.cxan.de/CxAN/
-uk ftp://ftp.cxan.uk/CxAN/
-com ftp://ftp.cxan.com/CxAN/
- :
-##EOF##
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>½Ã°£¿¡ µû¸¥ ÀçÀÛ¼º</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>½Ã°£¿¡ µû¶ó ´Ù¸¥ ³»¿ëÀ» ¼­ºñ½ºÇÏ´Â °æ¿ì ¸¹Àº À¥°ü¸®ÀÚ´Â
- Àá½Ã Ưº°ÇÑ ÆäÀÌÁö·Î ¸®´ÙÀÌ·º¼ÇÇϱâÀ§ÇØ CGI ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÑ´Ù. <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î´Â ¾î¶»°Ô
- ÇÒ ¼ö Àִ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀçÀÛ¼º Á¶°Ç¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿©·¯ <code>TIME_xxx</code>
- º¯¼ö°¡ ÀÖ´Ù. º¯¼ö¿Í Ưº°ÇÑ »çÀü¼ø¼­ ºñ±³
- <code>&lt;STRING</code>, <code>&gt;STRING</code>,
- <code>=STRING</code>À» »ç¿ëÇÏ¿© ½Ã°£¿¡ µû¶ó ¸®´ÙÀÌ·º¼ÇÇÒ
- ¼ö ÀÖ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &gt;0700
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &lt;1900
-RewriteRule ^foo\.html$ foo.day.html
-RewriteRule ^foo\.html$ foo.night.html
-</pre></div>
-
- <p>URL <code>foo.html</code>À» ¿äûÇϸé
- <code>07:00-19:00</code> µ¿¾È <code>foo.day.html</code>
- ³»¿ëÀ» ¼­ºñ½ºÇÏ°í, ³ª¸ÓÁö ½Ã°£ µ¿¾È
- <code>foo.night.html</code> ³»¿ëÀ» ¼­ºñ½ºÇÑ´Ù. ȨÆäÀÌÁö¿¡¼­
- »ç¿ëÇϱâ ÁÁÀº ±â´ÉÀÌ´Ù...</p>
- </dd>
- </dl>
-
-
-
- <h3>YYYY¸¦ XXXX·Î ÀÌÀüÇÑ °æ¿ì ¿ªÈ£È¯</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¿©·¯ <code>.html</code> ÆÄÀÏÀ» <code>.phtml</code>·Î
- º¯È¯ÇÏ´Â µî <code>document.YYYY</code>¸¦
- <code>document.XXXX</code>·Î ÀÌÀüÇÑÈÄ ¿ªÈ£È¯(backward
- compatibility) URLÀ» (°¡»óÀûÀ¸·Î Á¸ÀçÇÏ°Ô) ¸¸µé ¼ö
- ÀÖ³ª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>À̸§À» ±âº»À̸§À¸·Î ÀçÀÛ¼ºÇÑÈÄ »õ·Î¿î È®ÀåÀÚ¸¦
- °¡Áø ÆÄÀÏÀÌ ÀÖ´ÂÁö °Ë»çÇÑ´Ù. ÀÖ´Ù¸é ±× ÆÄÀϸíÀ» »ç¿ëÇÏ°í,
- ¾øÀ¸¸é URLÀ» ¿ø·¡ »óÅ·ΠÀçÀÛ¼ºÇÑ´Ù.</p>
-
-
-<div class="example"><pre>
-# ¹®¼­.html ÀÌ ¾ø°í
-# ¹®¼­.phtml ¸¸ ÀÖ´Â °æ¿ì
-# ¹®¼­.html À» ¹®¼­.phtml ·Î
-# ÀçÀÛ¼ºÇÏ´Â ¿ªÈ£È¯ ±ÔÄ¢
-RewriteEngine on
-RewriteBase /~quux/
-# ±âº»À̸§À» ã°í, ã¾Ò´Ù´Â »ç½ÇÀ» ±â¾ïÇÑ´Ù
-RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
-# ÆÄÀÏÀÌ ÀÖ´Ù¸é ¹®¼­.phtml ·Î ÀçÀÛ¼ºÇÑ´Ù
-RewriteCond %{REQUEST_FILENAME}.phtml -f
-RewriteRule ^(.*)$ $1.phtml [S=1]
-# ¾Æ´Ï¸é ¾Õ¿¡¼­ ãÀº ±âº»À̸§À» µÇµ¹¸°´Ù
-RewriteCond %{ENV:WasHTML} ^yes$
-RewriteRule ^(.*)$ $1.html
-</pre></div>
- </dd>
- </dl>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="content" id="content">ÄÁÅÙÃ÷ ´Ù·ç±â</a></h2>
-
-
-
- <h3>»õ·Î ÀÌÀü (°¨Ãß±â)</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÃÖ±Ù <code>foo.html</code>À» <code>bar.html</code>·Î
- º¯°æÇÏ°í ¿ªÈ£È¯¼ºÀ» À§ÇØ ÀÌÀü URLÀ» °è¼Ó Á¦°øÇÏ°í
- ½Í´Ù°í °¡Á¤ÇÏÀÚ. »ç¿ëÀÚ´Â ÀÌÀü URLÀÌ º¯°æµÇ¾ú´Ù´Â
- »ç½ÇÀ» ´«Ä¡Ã¤Áö ¸øÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>´ÙÀ½ ±ÔÄ¢À¸·Î ÀÌÀü URLÀ» ³»ºÎÀûÀ¸·Î »õ·Î¿î URL·Î
- ÀçÀÛ¼ºÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>»õ·Î ÀÌÀü (¾Ë¸®±â)</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>´Ù½Ã <code>foo.html</code>À» <code>bar.html</code>·Î
- º¯°æÇÏ°í ¿ªÈ£È¯¼ºÀ» À§ÇØ ÀÌÀü URLÀ» °è¼Ó Á¦°øÇÏ°í
- ½Í´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯³ª ÀÌÁ¦´Â ÀÌÀü URLÀ» »ç¿ëÇϸé
- »ç¿ëÀÚ¿¡°Ô »õ·Î¿î URLÀ» ÈùÆ®·Î ¾Ë·ÁÁØ´Ù. Áï, ºê¶ó¿ìÀú
- ÁÖ¼ÒâÀÌ º¯ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>»õ·Î¿î URL·Î HTTP ¸®´ÙÀÌ·º¼ÇÇÏ´Ù. ±×·¯¸é ºê¶ó¿ìÀú°¡
- »õ·Î¿î URL¸¦ º¸ÀÌ°í º¯°æ»ç½ÇÀ» »ç¿ëÀÚ°¡ ¾Ë°ÔµÈ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html [<strong>R</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>ºê¶ó¿ìÀú¿¡ µû¸¥ ³»¿ë</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÃÖ¼ÒÇÑ Áß¿äÇÑ ÃÖ»óÀ§ ÆäÀÌÁö´Â ºê¶ó¿ìÀú¿¡ ÃÖÀûÈ­µÈ
- ³»¿ëÀ¸·Î ¼­ºñ½ºÇؾßÇÒ °æ¿ì°¡ ÀÖ´Ù. Áï, ÃֽŠNetscape
- ºê¶ó¿ìÀú¿¡°Ô´Â ÃÖ»óÀÇ ¹öÀüÀ», Lynx ºê¶ó¿ìÀú¿¡°Ô´Â
- ÃÖÀú ¹öÀüÀ», ³ª¸ÓÁö ºê¶ó¿ìÀú¿¡´Â Æò±ÕÀûÀÎ ¹öÀüÀ»
- Á¦°øÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ºê¶ó¿ìÀú°¡ ³»¿ëÇù»óÀ» À§ÇØ ÀÚ½ÅÀÇ Á¾·ù¿¡ ´ëÇÑ Á¤º¸¸¦
- Á¦°øÇÏÁö ¾Ê±â¶§¹®¿¡ ³»¿ëÇù»óÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ´ë½Å
- HTTP "User-Agent" Çì´õ¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½ ±ÔÄ¢Àº HTTP
- "User-Agent" Çì´õ°¡ "Mozilla/3"À¸·Î ½ÃÀÛÇϸé
- <code>foo.html</code> ÆäÀÌÁö¸¦ <code>foo.NS.html</code>·Î
- ÀçÀÛ¼ºÇÏ°í ÀçÀÛ¼ºÀ» Áß´ÜÇÑ´Ù. ºê¶ó¿ìÀú°¡ "Lynx"³ª
- "Mozilla" ¹öÀü 1 ȤÀº 2¶ó¸é URLÀº
- <code>foo.20.html</code>ÀÌ µÈ´Ù. ³ª¸ÓÁö ºê¶ó¿ìÀú´Â
- <code>foo.32.html</code> ÆäÀÌÁö¸¦ ¹Þ´Â´Ù. ¾Æ·¡ ±ÔÄ¢ÀÌ
- ÀÌ ÀÛ¾÷À» ÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/3</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>NS</strong>.html [<strong>L</strong>]
-
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Lynx/</strong>.* [OR]
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/[12]</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>20</strong>.html [<strong>L</strong>]
-
-RewriteRule ^foo\.html$ foo.<strong>32</strong>.html [<strong>L</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>µ¿Àû ¹Ì·¯</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¿ÜºÎ È£½ºÆ®¿¡ ¿ì¸® »çÀÌÆ®·Î °¡Á®¿À°í ½ÍÀº ÁÁÀº
- À¥ÆäÀÌÁö°¡ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. FTP ¼­¹öÀÇ °æ¿ì Á÷Á¢ ¿ÜºÎ
- ÀÚ·áÀÇ Ãֽź¹»çº»À» À¯ÁöÇÏ´Â <code>mirror</code> ÇÁ·Î±×·¥À»
- »ç¿ëÇÒ ¼ö ÀÖ°í, À¥¼­¹ö¶ó¸é HTTP·Î ºñ½ÁÇÑ ÀÛ¾÷À» ÇÏ´Â
- <code>webcopy</code> ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª
- µÎ ¹æ¹ý ¸ðµÎ ´ÜÁ¡ÀÌ ÀÖ´Ù: º¹»çº»Àº °¡²û¾¿ ÇÁ·Î±×·¥À»
- ½ÇÇàÇØÁÙ ¶§¸¸ ÃÖ½ÅÆÇÀ¸·Î À¯ÁöµÈ´Ù. Á÷Á¢ ±¸¼ºÇؾßÇÏ´Â
- Á¤ÀûÀÎ ¹Ì·¯°¡ ¾Æ´Ï¶ó¸é ÁÁ°Ú´Ù. ´ë½Å (¿ÜºÎ È£½ºÆ®¿¡¼­
- ÀÚ·á°¡ °»½ÅµÇ¸é) ÇÊ¿äÇÒ¶§ ÀÚµ¿À¸·Î ÀڷḦ °»½ÅÇÏ´Â
- µ¿Àû ¹Ì·¯°¡ ÇÊ¿äÇÏ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>À̸¦ À§ÇØ <dfn>Proxy Throughput</dfn> ±â´ÉÀ» (Ç÷¡±×
- <code>[P]</code>) »ç¿ëÇÏ¿© ¿ÜºÎ À¥ÆäÀÌÁö ȤÀº ¿ÜºÎ
- À¥°ø°£ Àüü¸¦ ¿ì¸® À̸§°ø°£À¸·Î ´ëÀÀÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>hotsheet/</strong>(.*)$ <strong>http://www.tstimpreso.com/hotsheet/</strong>$1 [<strong>P</strong>]
-</pre></div>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>usa-news\.html</strong>$ <strong>http://www.quux-corp.com/news/index.html</strong> [<strong>P</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>µ¿Àû ¿ª¹Ì·¯</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>...</dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
-<div class="example"><pre>
-RewriteEngine on
-RewriteCond /mirror/of/remotesite/$1 -U
-RewriteRule ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>¾ø´Â ÀڷḦ ÀÎÆ®¶ó³Ý¿¡¼­ °¡Á®¿À±â</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>½ÇÁ¦ ÀڷḦ ¹æÈ­º®ÀÌ º¸È£ÇÏ´Â (³»ºÎ) ÀÎÆ®¶ó³Ý À¥¼­¹ö¿¡
- (<code>www2.quux-corp.dom</code>) ÀúÀåÇϸ鼭, ±â¾÷ÀÇ
- (¿ÜºÎ) ÀÎÅÍ³Ý À¥¼­¹ö¸¦ (<code>www.quux-corp.dom</code>)
- ½ÇÇàÇÏ´Â °Íó·³ º¸ÀÌ°Ô ÇÑ´Ù. ¿ÜºÎ À¥¼­¹ö´Â ¿äûÇÑ
- ÀڷḦ ³»ºÎ À¥¼­¹ö¿¡¼­ °¡Á®¿Â´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú ¹æÈ­º®ÀÌ ³»ºÎ À¥¼­¹ö¸¦ º¸È£ÇÏ°í ¿ÜºÎ À¥¼­¹ö¸¸ÀÌ
- ³»ºÎ À¥¼­¹ö¿¡¼­ ÀڷḦ ¾òÀ» ¼ö ÀÖ°Ô ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ
- ÆÐŶÇÊÅ͸µ ¹æÈ­º®À» ¼³Á¤ÇÑ´Ù:</p>
-
-<div class="example"><pre>
-<strong>ALLOW</strong> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-<strong>DENY</strong> Host * Port * --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-</pre></div>
-
- <p>½ÇÁ¦ ¼³Á¤¹®¹ý¿¡ ¾Ë¸Â°Ô °íÃĶó. ¾ø´Â ÀڷḦ ³»ºÎÀûÀ¸·Î
- proxy throughput ±â´ÉÀ» ÅëÇØ ¿äûÇÏ´Â
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ±ÔÄ¢À» ÀÛ¼ºÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteRule ^/~([^/]+)/?(.*) /home/$1/.www/$2
-RewriteCond %{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteCond %{REQUEST_FILENAME} <strong>!-d</strong>
-RewriteRule ^/home/([^/]+)/.www/?(.*) http://<strong>www2</strong>.quux-corp.dom/~$1/pub/$2 [<strong>P</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>·Îµå¹ë·±½Ì (ºÎÇÏ ºÐ»êÇϱâ)</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p><code>www.foo.com</code>ÀÇ Åë½Å·®À»
- <code>www[0-5].foo.com</code> (ÃÑ ¼­¹ö 6´ë)À¸·Î ºÐ»êÇÏ°í
- ½Í´Ù. ¾î¶»°Ô Çϴ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸Å¿ì ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
- ¸ÕÀú DNS¸¦ »ç¿ëÇÑ Àß ¾Ë·ÁÁø ¹æ¹ýÀ» ¼³¸íÇÏ°í,
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇÏ´Â °æ¿ì¸¦ »ìÆ캸ÀÚ:</p>
-
- <ol>
- <li>
- <strong>DNS Round-Robin</strong>
-
- <p>°¡Àå °£´ÜÇÑ ·Îµå¹ë·±½Ì ¹æ¹ýÀº <code>BIND</code>ÀÇ
- DNS round-robin ¹æ½ÄÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½°ú
- °°ÀÌ DNS A(address) ·¹Äڵ忡
- <code>www[0-9].foo.com</code>À» ¼³Á¤ÇÑ´Ù.</p>
-
-<div class="example"><pre>
-www0 IN A 1.2.3.1
-www1 IN A 1.2.3.2
-www2 IN A 1.2.3.3
-www3 IN A 1.2.3.4
-www4 IN A 1.2.3.5
-www5 IN A 1.2.3.6
-</pre></div>
-
- <p>±×¸®°í ´ÙÀ½ Ç׸ñÀ» Ãß°¡ÇÑ´Ù:</p>
-
-<div class="example"><pre>
-www IN CNAME www0.foo.com.
- IN CNAME www1.foo.com.
- IN CNAME www2.foo.com.
- IN CNAME www3.foo.com.
- IN CNAME www4.foo.com.
- IN CNAME www5.foo.com.
- IN CNAME www6.foo.com.
-</pre></div>
-
- <p>À߸øµÈ °Íó·³ º¸ÀÌÁö¸¸, ½ÇÁ¦·Î <code>BIND</code>ÀÇ
- ÀǵµµÈ ±â´ÉÀÌ´Ù. ÀÌÁ¦ <code>www.foo.com</code>À»
- ãÀ¸¸é, <code>BIND</code>´Â ¸Å¹ø ¼ø¼­¸¦ Á¶±Ý¾¿
- ¹Ù²ã°¡¸ç <code>www0-www6</code>À» ¹ÝȯÇÑ´Ù. ±×·¡¼­
- Ŭ¶óÀ̾ðÆ®µéÀ» ¿©·¯ ¼­¹ö·Î ºÐ»êÇÑ´Ù. ±×·¯³ª DNS
- °Ë»ö °á°ú°¡ ³×Æ®¿÷ÀÇ ´Ù¸¥ ³×ÀÓ¼­¹ö¿¡ ij½¬µÇ¿©
- <code>www.foo.com</code>À» ãÀº °á°ú°¡ ƯÁ¤
- <code>wwwN.foo.com</code>À̸é Ŭ¶óÀ̾ðÆ®ÀÇ ´ÙÀ½
- ¿äûµéµµ °°Àº <code>wwwN.foo.com</code>À¸·Î
- º¸³»Áö±â¶§¹®¿¡ ¿Ïº®ÇÑ ·Îµå¹ë·±½Ì ±â¹ýÀÌ ¾Æ´ÔÀ»
- ÁÖÀÇÇ϶ó. ±×·¯³ª Å©°Ô º¸¸é ¿äûÀÌ ¿©·¯ À¥¼­¹ö¿¡
- ºÐ»êµÇ¹Ç·Î È¿°ú°¡ ÁÁ´Ù.</p>
- </li>
-
- <li>
- <strong>DNS ·Îµå¹ë·±½Ì</strong>
-
- <p><a href="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</a>¿¡
- ÀÖ´Â <code>lbnamed</code> ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿©
- Á¤±³ÇÑ DNS±â¹Ý ·Îµå¹ë·±½ÌÀ» ÇÒ ¼ö ÀÖ´Ù. DNS°¡
- ½ÇÁ¦ ·Îµå¹ë·±½ÌÀ» Çϵµ·Ï ¸¸µå´Â ¿©·¯ µµ±¸¿Í Perl
- 5 ÇÁ·Î±×·¥ÀÌ´Ù.</p>
- </li>
-
- <li>
- <strong>Proxy Throughput Round-Robin</strong>
-
- <p>ÀÌ ¹æ¹ýÀº <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¿Í proxy
- throughput ±â´ÉÀ» »ç¿ëÇÑ´Ù. ¸ÕÀú DNS¿¡ ´ÙÀ½ Ç׸ñÀ»
- »ç¿ëÇÏ¿© <code>www0.foo.com</code>ÀÌ ½ÇÁ¦
- <code>www.foo.com</code>À» Àü´ãÇÏ°Ô ÇÑ´Ù</p>
-
-<div class="example"><pre>
-www IN CNAME www0.foo.com.
-</pre></div>
-
- <p>±×¸®°í <code>www0.foo.com</code>À» ÇÁ·Ï½ÃÀü¿ë
- ¼­¹ö·Î º¯°æÇÑ´Ù. Áï, URLÀ» ¹ÞÀ¸¸é ¼­¹ö´Â ³»ºÎ
- ÇÁ·Ï½Ã¸¦ ÅëÇØ ´Ù¸¥ 5´ë ¼­¹öÁß (<code>www1-www5</code>)
- ÇÑ´ë·Î º¸³»±â¸¸ ÇÑ´Ù. À̸¦ À§ÇØ ¸ÕÀú ¸ðµç URLÀ»
- ·Îµå¹ë·±½Ì ½ºÅ©¸³Æ® <code>lb.pl</code>·Î º¸³»´Â
- ±ÔÄ¢À» ¸¸µç´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap lb prg:/path/to/lb.pl
-RewriteRule ^/(.+)$ ${lb:$1} [P,L]
-</pre></div>
-
- <p><code>lb.pl</code>À» ÀÛ¼ºÇÑ´Ù:</p>
-
-<div class="example"><pre>
-#!/path/to/perl
-##
-## lb.pl -- ·Îµå¹ë·±½Ì ½ºÅ©¸³Æ®
-##
-
-$| = 1;
-
-$name = "www"; # ±âº» È£½ºÆ®¸í
-$first = 1; # ù¹ø° ¼­¹ö (ÀÚ½ÅÀÌ 0À̱⠶§¹®¿¡, 0À» »ç¿ëÇÏÁö ¾Ê´Â´Ù)
-$last = 5; # round-robin¿¡¼­ ¸¶Áö¸· ¼­¹ö
-$domain = "foo.dom"; # µµ¸ÞÀθí
-
-$cnt = 0;
-while (&lt;STDIN&gt;) {
- $cnt = (($cnt+1) % ($last+1-$first));
- $server = sprintf("%s%d.%s", $name, $cnt+$first, $domain);
- print "http://$server/$_";
-}
-
-##EOF##
-</pre></div>
-
- <div class="note">¸¶Áö¸· ÁÖÀÇ: ¿Ö ÀÌ ¹æ¹ýÀÌ À¯¿ëÇÑ°¡?
- <code>www0.foo.com</code>¿¡ ºÎ´ãÀÌ °¡Áö¾Ê´Â°¡?
- ¹°·Ð, ºÎ´ãÀÌ µÈ´Ù. ±×·¯³ª ´Ü¼øÇÑ proxy throughput
- ¿äû¸¸ Çϱ⶧¹®¿¡ ±¦Âú´Ù! ¸ðµç SSI, CGI, ePerl
- µîÀº ÀüÀûÀ¸·Î ´Ù¸¥ ¼­¹ö°¡ ó¸®ÇÑ´Ù. ÀÌ°ÍÀÌ ÇÙ½ÉÀÌ´Ù.</div>
- </li>
-
- <li>
- <strong>Çϵå¿þ¾î/TCP Round-Robin</strong>
-
- <p>Çϵå¿þ¾î¸¦ »ç¿ëÇÑ ÇØ°áÃ¥µµ ÀÖ´Ù. Cisco´Â TCP/IP
- ¼öÁØ¿¡¼­ ·Îµå¹ë·±½ÌÀ» ÇÏ´Â LocalDirector¶ó´Â ±«¹°À»
- ÆÇ´Ù. ½ÇÁ¦·Î´Â À¥¼­¹ö±º ¾Õ´Ü¿¡ À§Ä¡ÇÏ´Â ÀÏÁ¾ÀÇ
- ȸ·Î¼öÁØ °ÔÀÌÆ®¿þÀÌ´Ù. ÀÚ±ÝÀÌ ÃæºÐÇÏ°í °í¼º´É
- ÇØ°áÃ¥ÀÌ ÇÊ¿äÇÏ´Ù¸é ÀÌ°ÍÀ» »ç¿ëÇ϶ó.</p>
- </li>
- </ol>
- </dd>
- </dl>
-
-
-
- <h3>»õ·Î¿î MIME-type, »õ·Î¿î ¼­ºñ½º</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>³×Æ®¿÷¿¡´Â ¸ÚÁø CGI ÇÁ·Î±×·¥µéÀÌ ¸¹´Ù. ±×·¯³ª »ç¿ëÇϱâ
- ¹ø°Å·¯¿ö¼­ ¸¹Àº À¥°ü¸®ÀÚ°¡ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ¾ÆÆÄÄ¡ÀÇ
- MIME-type¿¡ µû¸¥ Action Çڵ鷯 ±â´Éµµ CGI ÇÁ·Î±×·¥ÀÌ
- Ưº°ÇÑ URLÀ» (Á¤È®È÷ <code>PATH_INFO</code>¿Í
- <code>QUERY_STRINGS</code>) ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÏÁö
- ¾ÊÀ» ¶§¸¸ ÀûÀýÇÏ´Ù. ¸ÕÀú, È®ÀåÀÚ°¡ (secure CGI¸¦ ÁÙ¿©)
- <code>.scgi</code>ÀÎ ÆÄÀÏÀ» À¯¸íÇÑ <code>cgiwrap</code>
- ÇÁ·Î±×·¥À¸·Î ó¸®ÇϱâÀ§ÇØ »õ·Î¿î typeÀ» ¼³Á¤ÇÑ´Ù.
- ¹®Á¦´Â (À§¿¡¼­ º») ÀÏ°üµÈ URL ±¸Á¶¸¦ »ç¿ëÇÏ´Â °æ¿ì
- »ç¿ëÀÚ È¨µð·ºÅ丮°¡ <code>/u/user/foo/bar.scgi</code>°°Àº
- URLÀÎ Á¡ÀÌ´Ù. <code>cgiwrap</code>´Â
- <code>/~user/foo/bar.scgi/</code> Çü½ÄÀÇ URLÀ»
- ¿øÇϱ⶧¹®ÀÌ´Ù. ´ÙÀ½ ±ÔÄ¢ÀÌ ¹®Á¦¸¦ ÇØ°áÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteRule ^/[uge]/<strong>([^/]+)</strong>/\.www/(.+)\.scgi(.*) ...
-... /internal/cgi/user/cgiwrap/~<strong>$1</strong>/$2.scgi$3 [NS,<strong>T=application/x-http-cgi</strong>]
-</pre></div>
-
- <p>ÀÌÁ¦ ´Ù¸¥ ¸ÚÁø ÇÁ·Î±×·¥, (URL ÇÏÀ§Æ®¸®¿¡ ´ëÇÑ
- <code>access.log</code>¸¦ Ãâ·ÂÇÏ´Â) <code>wwwlog</code>¿Í
- (URL ÇÏÀ§Æ®¸®¿¡ Glimpse¸¦ ½ÇÇàÇÏ´Â) <code>wwwidx</code>°¡
- ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. ¿ì¸®´Â ÇÁ·Î±×·¥¿¡°Ô ÀÛ¾÷ÇÒ ´ë»óÀÎ
- URL ¿µ¿ªÀ» ¾Ë·ÁÁà¾ß ÇÑ´Ù. ±×·¯³ª ¿äûÇÒ¶§¸¶´Ù Ç×»ó
- Àû¾îÁà¾ß Çϱ⶧¹®¿¡ ±ò²ûÇÏÁö ¾Ê´Ù. Áï, º¸Åë
- <code>/u/user/foo/</code>¿¡ ´ëÇØ <code>swwidx</code>
- ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù¸é ´ÙÀ½°ú °°Àº ¸µÅ©¸¦ »ç¿ëÇÑ´Ù</p>
-
-<div class="example"><pre>
-/internal/cgi/user/swwidx?i=/u/user/foo/
-</pre></div>
-
- <p>±ò²ûÇÏÁö ¾Ê´Ù. ¸µÅ©¿¡ ¿µ¿ªÀÇ À§Ä¡<strong>¿Í</strong>
- CGI À§Ä¡¸¦ <strong>¸ðµÎ</strong> Àû¾î¾ß Çϱ⶧¹®ÀÌ´Ù.
- ¿µ¿ªÀ» À籸¼ºÇÑ´Ù¸é ¿©·¯ ÇÏÀÌÆÛ¸µÅ©¸¦ ¼öÁ¤Çϴµ¥ ¸¹Àº
- ½Ã°£ÀÌ °É¸± °ÍÀÌ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÇØ°áÃ¥Àº ÀÚµ¿À¸·Î ÀûÀýÇÑ CGI¸¦ ½ÇÇàÇÏ´Â »õ·Î¿î
- Ưº°ÇÑ URL Çü½ÄÀ» ¸¸µå´Â °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteRule ^/([uge])/([^/]+)(/?.*)/\* /internal/cgi/user/wwwidx?i=/$1/$2$3/
-RewriteRule ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3
-</pre></div>
-
- <p>ÀÌÁ¦ <code>/u/user/foo/</code>À» °Ë»öÇÏ´Â ¸µÅ©´Â
- ´ÙÀ½°ú °°´Ù</p>
-
-<div class="example"><pre>
-HREF="*"
-/u/user/foo/* (???)
-</pre></div>
-
- <p>³»ºÎÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÀÚµ¿º¯È¯µÈ´Ù</p>
-
-<div class="example"><pre>
-/internal/cgi/user/wwwidx?i=/u/user/foo/
-</pre></div>
-
- <p>°°Àº ¹æ¹ýÀ¸·Î ¸µÅ© µÚ¿¡ <code>:log</code>¸¦ »ç¿ëÇÏ¿©
- Á¢±Ù ·Î±× CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
- </dd>
- </dl>
-
-
-
- <h3>Á¤Àû¿¡¼­ µ¿ÀûÀ¸·Î</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô ºê¶ó¿ìÀú¿Í »ç¿ëÀÚ°¡ ¸ð¸£°Ô ÀÚ¿¬½º·´°Ô Á¤Àû
- ÆäÀÌÁö <code>foo.html</code>À» µ¿ÀûÀÎ <code>foo.cgi</code>·Î
- º¯°æÇÒ ¼ö ÀÖ³ª.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>URLÀ» CGI ½ºÅ©¸³Æ®·Î ÀçÀÛ¼ºÇÏ°í, MIME-typeÀ» ¼öÁ¤ÇÏ¿©
- CGI ½ºÅ©¸³Æ®·Î ½ÇÇàÇÏ°Ô ÇÑ´Ù. ±×·¡¼­
- <code>/~quux/foo.html</code>¸¦ ¿äûÇÏ¸é ³»ºÎÀûÀ¸·Î
- <code>/~quux/foo.cgi</code>¸¦ ½ÇÇàÇÏ°Ô µÈ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo\.<strong>html</strong>$ foo.<strong>cgi</strong> [T=<strong>application/x-httpd-cgi</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Áï¼® ÄÁÅÙÃ÷ Àç»ý¼º</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÀÌ ¹æ¹ýÀº ½Ç·Î ºñ±âÀÌ´Ù: µ¿ÀûÀ¸·Î ÆäÀÌÁö¸¦ »ý¼ºÇÏÁö¸¸,
- Á¤ÀûÀ¸·Î ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÑ´Ù. Áï, ÆäÀÌÁö´Â ¼ø¼öÇÏ°Ô
- (ÆÄÀϽýºÅÛ¿¡¼­ ÀÐÀº ³»¿ëÀ» ±×´ë·Î) Á¤Àû ÆäÀÌÁö·Î
- Àü´ÞµÇÁö¸¸, ¾øÀ» °æ¿ì À¥¼­¹ö°¡ µ¿ÀûÀ¸·Î »ý¼ºÇÑ´Ù.
- ±×·¯¸é ´©°¡ (ȤÀº cron ÀÛ¾÷ÀÌ) Á¤Àû ÄÁÅÙÃ÷¸¦ Áö¿ìÁö¾Ê´Â
- ÇÑ CGI°¡ »ý¼ºÇÑ ÆäÀÌÁö¸¦ Á¤ÀûÀ¸·Î ¼­ºñ½ºÇÑ´Ù. ÄÁÅÙÃ÷¸¦
- Áö¿ì¸é ³»¿ëÀ» °»½ÅÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÑ´Ù:
-
-<div class="example"><pre>
-RewriteCond %{REQUEST_FILENAME} <strong>!-s</strong>
-RewriteRule ^page\.<strong>html</strong>$ page.<strong>cgi</strong> [T=application/x-httpd-cgi,L]
-</pre></div>
-
- <p>¿©±â¼­ <code>page.html</code>¸¦ ¿äûÇÒ¶§
- <code>page.html</code>ÀÌ ¾ø°Å³ª ÆÄÀÏÅ©±â°¡ 0ÀÎ °æ¿ì
- ³»ºÎÀûÀ¸·Î <code>page.cgi</code>¸¦ ½ÇÇàÇÑ´Ù. ¿©±â¼­
- ºñ°áÀº <code>page.cgi</code>°¡ ÀϹÝÀûÀÎ CGI ½ºÅ©¸³Æ®¿Í
- °°ÀÌ <code>STDOUT</code>¿¡ Ãâ·ÂÇÏ°í, Ãß°¡·Î Ãâ·ÂÀ»
- <code>page.html</code> ÆÄÀÏ¿¡ Àû´Â´Ù. Çѹø ½ÇÇàÇÑÈÄ
- ¼­¹ö´Â <code>page.html</code>ÀÇ Á¤º¸¸¦ º¸³½´Ù. À¥°ü¸®ÀÚ°¡
- °­Àç·Î ³»¿ëÀ» °»½ÅÇÏ°í ½Í´Ù¸é, (º¸Åë cron ÀÛ¾÷ÀÌ)
- <code>page.html</code>À» Áö¿ì±â¸¸ ÇÏ¸é µÈ´Ù.</p>
- </dd>
- </dl>
-
-
-
- <h3>ÀÚµ¿À¸·Î »õ·Î °íħÇÏ´Â ¹®¼­</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>º¹ÀâÇÑ À¥ÆäÀÌÁö¸¦ ¸¸µé¶§ ÆíÁýÀÚ°¡ ³»¿ëÀ» ¼öÁ¤ÇÒ
- ¶§¸¶´Ù ÀÚµ¿À¸·Î ÆäÀÌÁö¸¦ »õ·Î °íħÇÏ´Â À¥ºê¶ó¿ìÀú°¡
- ÀÖÀ¸¸é ¾ó¸¶³ª ÁÁÀ»±î? ºÒ°¡´ÉÇÑ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>°¡´ÉÇÏ´Ù! MIME multipart ±â´É°ú À¥¼­¹ö NPH ±â´É,
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>ÀÇ URL Á¶ÀÛ ´É·ÂÀ» °áÇÕÇϸé
- µÈ´Ù. ¸ÕÀú, »õ·Î¿î URL ±â´ÉÀ» ¸¸µç´Ù: URL¿¡
- <code>:refresh</code>¸¦ Ãß°¡Çϱ⸸ Çϸé ÆÄÀϽýºÅÛ¿¡¼­
- ¼öÁ¤µÉ ¶§¸¶´Ù »õ·Î °íħÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteRule ^(/[uge]/[^/]+/?.*):refresh /internal/cgi/apache/nph-refresh?f=$1
-</pre></div>
-
- <p>ÀÌÁ¦ ´ÙÀ½ URL¿¡ Á¢±ÙÇϸé</p>
-
-<div class="example"><pre>
-/u/foo/bar/page.html:refresh
-</pre></div>
-
- <p>´ÙÀ½ URLÀ» ³»ºÎÀûÀ¸·Î ºÎ¸¥´Ù</p>
-
-<div class="example"><pre>
-/internal/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
-</pre></div>
-
- <p>ÀÌÁ¦ NPH-CGI ½ºÅ©¸³Æ®¸¸ ³²¾Ò´Ù. º¸Åë "µ¶ÀÚ¿¡°Ô
- ¿¬½ÀÀ¸·Î ³²°ÜµÒ"À̶ó°í ¸»ÇÏÁö¸¸ ;-) ³ª´Â À̰͵µ Á¦°øÇÑ´Ù.</p>
-
-<div class="example"><pre>
-#!/sw/bin/perl
-##
-## nph-refresh -- NPH/CGI script for auto refreshing pages
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-$| = 1;
-
-# split the QUERY_STRING variable
-@pairs = split(/&amp;/, $ENV{'QUERY_STRING'});
-foreach $pair (@pairs) {
- ($name, $value) = split(/=/, $pair);
- $name =~ tr/A-Z/a-z/;
- $name = 'QS_' . $name;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- eval "\$$name = \"$value\"";
-}
-$QS_s = 1 if ($QS_s eq '');
-$QS_n = 3600 if ($QS_n eq '');
-if ($QS_f eq '') {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: No file given\n";
- exit(0);
-}
-if (! -f $QS_f) {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: File $QS_f not found\n";
- exit(0);
-}
-
-sub print_http_headers_multipart_begin {
- print "HTTP/1.0 200 OK\n";
- $bound = "ThisRandomString12345";
- print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
- &amp;print_http_headers_multipart_next;
-}
-
-sub print_http_headers_multipart_next {
- print "\n--$bound\n";
-}
-
-sub print_http_headers_multipart_end {
- print "\n--$bound--\n";
-}
-
-sub displayhtml {
- local($buffer) = @_;
- $len = length($buffer);
- print "Content-type: text/html\n";
- print "Content-length: $len\n\n";
- print $buffer;
-}
-
-sub readfile {
- local($file) = @_;
- local(*FP, $size, $buffer, $bytes);
- ($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
- $size = sprintf("%d", $size);
- open(FP, "&amp;lt;$file");
- $bytes = sysread(FP, $buffer, $size);
- close(FP);
- return $buffer;
-}
-
-$buffer = &amp;readfile($QS_f);
-&amp;print_http_headers_multipart_begin;
-&amp;displayhtml($buffer);
-
-sub mystat {
- local($file) = $_[0];
- local($time);
-
- ($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
- return $mtime;
-}
-
-$mtimeL = &amp;mystat($QS_f);
-$mtime = $mtime;
-for ($n = 0; $n &amp;lt; $QS_n; $n++) {
- while (1) {
- $mtime = &amp;mystat($QS_f);
- if ($mtime ne $mtimeL) {
- $mtimeL = $mtime;
- sleep(2);
- $buffer = &amp;readfile($QS_f);
- &amp;print_http_headers_multipart_next;
- &amp;displayhtml($buffer);
- sleep(5);
- $mtimeL = &amp;mystat($QS_f);
- last;
- }
- sleep($QS_s);
- }
-}
-
-&amp;print_http_headers_multipart_end;
-
-exit(0);
-
-##EOF##
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>´ë·®ÀÇ °¡»óÈ£½ºÆ®</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡»óÈ£½ºÆ®°¡ ¸î°³¸¸ ÀÖ´Ù¸é ¾ÆÆÄÄ¡ÀÇ <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ±â´ÉÀÌ Àß µ¿ÀÛÇÑ´Ù. ±×·¯³ª °¡»óÈ£½ºÆ®°¡ ¼ö¹é°³ ÀÖ´Â
- ISP¶ó¸é ÀÌ ±â´ÉÀÌ ÃÖ¼±Àº ¾Æ´Ï´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀÌ ±â´ÉÀ» Á¦°øÇÏ·Á¸é <dfn>Proxy Throughput</dfn>
- ±â´ÉÀ» (Ç÷¡±× <code>[P]</code>) »ç¿ëÇÏ¿© ¿ÜºÎ À¥ÆäÀÌÁö
- ȤÀº Àüü ¿ÜºÎ À¥¿µ¿ªÀ» ¿ì¸®ÀÇ À̸§°ø°£¿¡ ´ëÀÀÇÑ´Ù:</p>
-
-<div class="example"><pre>
-##
-## vhost.map
-##
-www.vhost1.dom:80 /path/to/docroot/vhost1
-www.vhost2.dom:80 /path/to/docroot/vhost2
- :
-www.vhostN.dom:80 /path/to/docroot/vhostN
-</pre></div>
-
-<div class="example"><pre>
-##
-## httpd.conf
-##
- :
-# ¸®´ÙÀÌ·ºÆ®ÇÒ¶§ Á¤±Ô È£½ºÆ®¸íÀ» »ç¿ëÇÑ´Ù.
-UseCanonicalName on
-
- :
-# °¡»óÈ£½ºÆ®¸¦ CLF Çü½Ä ¾Õ¿¡ Ãß°¡ÇÑ´Ù
-CustomLog /path/to/access_log "%{VHOST}e %h %l %u %t \"%r\" %&gt;s %b"
- :
-
-# ÁÖ¼­¹ö¿¡¼­ ÀçÀÛ¼º ¿£ÁøÀ» »ç¿ëÇÑ´Ù
-RewriteEngine on
-
-# µÎ ¸ÊÀ» Á¤ÀÇÇÑ´Ù: Çϳª´Â URLÀ» °íÄ¡°í,
-# ´Ù¸¥ Çϳª´Â °¡»óÈ£½ºÆ®º° DocumentRoot¸¦
-# Á¤ÀÇÇÑ´Ù.
-RewriteMap lowercase int:tolower
-RewriteMap vhost txt:/path/to/vhost.map
-
-# ÀÌÁ¦ Å©°í º¹ÀâÇÑ ±ÔÄ¢ ÇÑ°³¸¦ »ç¿ëÇÏ¿©
-# °¡»óÈ£½ºÆ®·Î ´ëÀÀÇÑ´Ù.
-#
-# 1. °¡»óÈ£½ºÆ®µéÀÌ °°ÀÌ »ç¿ëÇÏ´Â À§Ä¡´Â ´ëÀÀÇÏÁö ¾Ê´Â´Ù
-RewriteCond %{REQUEST_URL} !^/commonurl1/.*
-RewriteCond %{REQUEST_URL} !^/commonurl2/.*
- :
-RewriteCond %{REQUEST_URL} !^/commonurlN/.*
-#
-# 2. ¿ì¸®°¡ ÇöÀç »ç¿ëÇÏ´Â ¹æ¹ýÀÌ Host Çì´õ¸¦
-# °¡»óÈ£½ºÆ®¸¦ Áö¿øÇϹǷÎ
-# Host Çì´õ°¡ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù
-RewriteCond %{HTTP_HOST} !^$
-#
-# 3. È£½ºÆ®¸íÀ» ¼Ò¹®ÀÚ·Î ¸¸µç´Ù
-RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
-#
-# 4. vhost.map¿¡¼­ È£½ºÆ®¸íÀ» ã°í
-# °æ·ÎÀ϶§¸¸ ±â¾ïÇÑ´Ù
-# (À§¿¡¼­ "NONE"Àº ¾Æ´Ï´Ù)
-RewriteCond ${vhost:%1} ^(/.*)$
-#
-# 5. ¸¶Áö¸·À¸·Î URLÀ» ¹®¼­ À§Ä¡·Î ´ëÀÀÇÏ°í
-# ·Î±×¿¡ ³²±â±âÀ§ÇØ °¡»óÈ£½ºÆ®¸¦ ±â¾ïÇØ µÐ´Ù
-RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
- :
-</pre></div>
- </dd>
- </dl>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="access" id="access">Á¢±Ù Á¦ÇÑ</a></h2>
-
-
-
- <h3>·Îº¿ ¸·±â</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô Çϸé ƯÁ¤ À¥°ø°£ÀÇ ÆäÀÌÁö¸¦ ±Ü¾î¸ðÀ¸´Â ±ÍÂúÀº
- ·Îº¿À» ¸·À» ¼ö ÀÖ³ª? "Robot Exclusion Protocol" Ç׸ñÀ»
- ÀúÀåÇÑ <code>/robots.txt</code> ÆÄÀÏÀº º¸Åë ÀÌ·± ·Îº¿À»
- ¸·´Âµ¥ ÃæºÐÇÏÁö ¾Ê´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>(¾Æ¸¶µµ µð·ºÅ丮°¡ ±í¾î¼­ ·Îº¿ÀÌ µ¹¾Æ´Ù´Ï¸é ¼­¹ö¿¡
- ºÎ´ãÀÌ Å« °æ¿ì) À¥°ø°£ <code>/~quux/foo/arc/</code>¿¡
- ÀÖ´Â URLµéÀ» °ÅºÎÇÏ´Â ±ÔÄ¢À» »ç¿ëÇÑ´Ù. ¿ì¸®´Â ƯÁ¤
- ·Îº¿ÀÇ Á¢±ÙÀ» ¸·¾Æ¾ß ÇÑ´Ù. Áï, ·Îº¿À» ½ÇÇàÇϴ ȣ½ºÆ®¸¦
- ¸·´Â °ÍÀ¸·Î´Â ºÒÃæºÐÇϸç, ±× È£½ºÆ®ÀÇ »ç¿ëÀÚµµ ¸·¾Æ¹ö¸®°Ô
- µÈ´Ù. User-Agent HTTP Çì´õ Á¤º¸µµ ºñ±³ÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>NameOfBadRobot</strong>.*
-RewriteCond %{REMOTE_ADDR} ^<strong>123\.45\.67\.[8-9]</strong>$
-RewriteRule ^<strong>/~quux/foo/arc/</strong>.+ - [<strong>F</strong>]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>±×¸² ÆÛ°¡±â ¹æÁö</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p><code>http://www.quux-corp.de/~quux/</code>¿¡ ÀÖ´Â
- ÆäÀÌÁöµéÀÌ GIF ±×¸²À» Æ÷ÇÔÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ ±×¸²ÀÌ
- ¸ÚÀ־, ´Ù¸¥ »ç¶÷µéÀÌ ÀÚ½ÅÀÇ ÆäÀÌÁö¿¡ Á÷Á¢ ¸µÅ©¸¦
- °Ç´Ù. ¼­¹ö¿¡ ºÒÇÊ¿äÇÑ ºÎ´ãÀÌ µÇ¹Ç·Î ¸·°í ½Í´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>±×¸²À» 100% º¸È£ÇÒ ¼ö´Â ¾øÁö¸¸, ÃÖ¼ÒÇÑ ºê¶ó¿ìÀú°¡
- HTTP Referer Çì´õ¸¦ º¸³»´Â °æ¿ì Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.</p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong>
-RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
-RewriteRule <strong>.*\.gif$</strong> - [F]
-</pre></div>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
-RewriteRule <strong>^inlined-in-foo\.gif$</strong> - [F]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>È£½ºÆ® °ÅºÎ</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô ¿ÜºÎ¿¡¼­ ¼­¹ö¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Â È£½ºÆ® ¸ñ·ÏÀ»
- ¼³Á¤ÇÒ ¼ö ÀÖ³ª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¾ÆÆÄÄ¡ &gt;= 1.3b6¿¡¼­:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
-RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^/.* - [F]
-</pre></div>
-
- <p>¾ÆÆÄÄ¡ &lt;= 1.3b6¿¡¼­:</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteRule ^/(.*)$ ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ /$1
-</pre></div>
-
-<div class="example"><pre>
-##
-## hosts.deny
-##
-## ÁÖÀÇ! ÀÌ°ÍÀº ¸ñ·Ïó·³ º¸ÀÌÁö¸¸ ¸ñ·ÏÀÌ ¾Æ´Ï¶ó ¸ÊÀÌ´Ù.
-## mod_rewrite´Â ÀÌ Á¤º¸¸¦ Å°/°ª ½ÖÀ¸·Î Çؼ®Çϱ⶧¹®¿¡,
-## °¢ Ç׸ñÀÇ °ª ÀÚ¸®¿¡ ÃÖ¼ÒÇÑ "-"°¡ ÇÊ¿äÇÏ´Ù.
-##
-
-193.102.180.41 -
-bsdti1.sdm.de -
-192.76.162.40 -
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>ÇÁ·Ï½Ã °ÅºÎ</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô ƯÁ¤ È£½ºÆ® ȤÀº ƯÁ¤ È£½ºÆ®ÀÇ »ç¿ëÀÚ°¡
- ¾ÆÆÄÄ¡ ÇÁ·Ï½Ã¸¦ »ç¿ëÇÒ ¼ö ¾øµµ·Ï Çϳª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§ ±¸¼ºÆÄÀÏ¿¡¼­
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>°¡ <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>
- ¾Æ·¡¿¡(!) ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯¸é <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>´Â
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> <em>ÀÌÀü¿¡</em> ºÒ¸°´Ù.
- ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ Æ¯Á¤ È£½ºÆ®¸¦ °ÅºÎÇϵµ·Ï ¼³Á¤ÇÑ´Ù...</p>
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_HOST} <strong>^badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></div>
-
- <p>...±×¸®°í ´ÙÀ½Àº user@host¿¡ µû¶ó °ÅºÎÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>^badguy@badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Ưº°ÇÑ ÀÎÁõ ¹æ½Ä</h3>
-
-
-
- <dl>
- <dt>»óÈ°¼³¸í:</dt>
-
- <dd>
- <p>°¡²û ¸Å¿ì Ưº°ÇÑ ÀÎÁõÀÌ ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Ù. ¿¹¸¦
- µé¾î, ¹Ì¸® ¼³Á¤ÇصР»ç¿ëÀÚÀÎÁö °Ë»çÇÑ´Ù. À̵鿡°Ô¸¸
- (<code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>ÀÇ Basic Auth¸¦ »ç¿ëÇÑ
- °æ¿ì¿Í ´Þ¸®) º°´Ù¸¥ ¹°À½¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>Ä£±¸¸¸ Á¢±ÙÀÌ °¡´ÉÇϵµ·Ï ÀçÀÛ¼º ±ÔÄ¢µéÀ» »ç¿ëÇÑ´Ù:</p>
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend1@client1.quux-corp\.com$</strong>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend2</strong>@client2.quux-corp\.com$
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend3</strong>@client3.quux-corp\.com$
-RewriteRule ^/~quux/only-for-friends/ - [F]
-</pre></div>
- </dd>
- </dl>
-
-
-
- <h3>Referer±â¹Ý º¯È¯±â(deflector)</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>"Referer" HTTP Çì´õ¿¡ µû¶ó ¿øÇϴ´ë·Î ÂüÁ¶ÆäÀÌÁö¸¦
- ¼³Á¤ÇÒ ¼ö ÀÖ´Â À¯¿¬ÇÑ URL º¯È¯±â¸¦ ¸¸µé ¼ö Àִ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>´ÙÀ½°ú °°ÀÌ º¹ÀâÇÑ ±ÔÄ¢À»...</p>
-
-<div class="example"><pre>
-RewriteMap deflector txt:/path/to/deflector.map
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}} ^-$
-RewriteRule ^.* %{HTTP_REFERER} [R,L]
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^.* ${deflector:%{HTTP_REFERER}} [R,L]
-</pre></div>
-
- <p>... ÀçÀÛ¼º ¸Ê°ú °°ÀÌ »ç¿ëÇÑ´Ù:</p>
-
-<div class="example"><pre>
-##
-## deflector.map
-##
-
-http://www.badguys.com/bad/index.html -
-http://www.badguys.com/bad/index2.html -
-http://www.badguys.com/bad/index3.html http://somewhere.com/
-</pre></div>
-
- <p>±×·¯¸é ¿äûÀ» ÀÚµ¿À¸·Î (¸Ê¿¡¼­ °ªÀ¸·Î "<code>-</code>"¸¦
- »ç¿ëÇÑ °æ¿ì) ÂüÁ¶ÆäÀÌÁö³ª (URLÀÌ ¸Ê¿¡ ÀÖ´Â °æ¿ì µÎ¹ø°
- ¾Æ±Ô¸ÕÆ®·Î) ƯÁ¤ URL·Î ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.</p>
- </dd>
- </dl>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">±âŸ</a></h2>
-
-
-
- <h3>¿ÜºÎ ÀçÀÛ¼º ¿£Áø</h3>
-
-
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>FAQ: ¾î¶»°Ô ÀÌ·±Àú·± Àâ´ÙÇÑ ¹®Á¦¸¦ Ç® ¼ö Àִ°¡?
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î´Â ÇØ°áÃ¥ÀÌ ¾Èº¸ÀδÙ...</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¿ÜºÎ <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>À» »ç¿ëÇ϶ó.
- Áï, ÇÁ·Î±×·¥ÀÌ <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> ¿ªÇÒÀ»
- ÇÑ´Ù. ÇÁ·Î±×·¥Àº ¾ÆÆÄÄ¡°¡ ½ÃÀÛÇÒ¶§ ½ÃÀÛÇÏ¿©
- <code>STDIN</code>¿¡¼­ ¿äûÇÑ URLÀ» ¹Þ°í, (°°Àº ¼ø¼­·Î!)
- °á°ú (º¸Åë ÀçÀÛ¼ºµÈ) URLÀ» <code>STDOUT</code>¿¡ Ãâ·ÂÇÑ´Ù.</p>
-
-<div class="example"><pre>
-RewriteEngine on
-RewriteMap quux-map <strong>prg:</strong>/path/to/map.quux.pl
-RewriteRule ^/~quux/(.*)$ /~quux/<strong>${quux-map:$1}</strong>
-</pre></div>
-
-<div class="example"><pre>
-#!/path/to/perl
-
-# ¾ÆÆÄÄ¡ ¼­¹ö°¡ ¸ØÃßÁö ¾Êµµ·Ï
-# ÀÔÃâ·Â ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù
-$| = 1;
-
-# stdin¿¡¼­ ÇÑÁÙ¾¿ URLÀ» Àаí
-# stdout¿¡ º¯È¯ÇÑ URLÀ» Ãâ·ÂÇÑ´Ù
-while (&lt;&gt;) {
- s|^foo/|bar/|;
- print $_;
-}
-</pre></div>
-
- <p>¼³¸íÇϱâÀ§ÇØ ¸ðµç <code>/~quux/foo/...</code> URLÀ»
- <code>/~quux/bar/...</code>·Î ÀçÀÛ¼ºÇÏ´Â ½ºÅ©¸³Æ®¸¦
- ¿¹·Î µé¾ú´Ù. ½ÇÁ¦·Î ¸¶À½´ë·Î ÇÁ·Î±×·¡¹ÖÇÒ ¼ö ÀÖ´Ù.
- ±×·¯³ª ÀÏ¹Ý »ç¿ëÀÚ°¡ ÀÌ·± ¸ÊÀ» <strong>»ç¿ëÇÒ</strong>
- ¼ö ÀÖ´Ù°í ÇÏ´õ¶ó°í, ¿ÀÁ÷ ½Ã½ºÅÛ °ü¸®ÀÚ¸¸ÀÌ ¸ÊÀ»
- <strong>Á¤ÀÇÇؾß</strong> ÇÔÀ» ÁÖÀÇÇ϶ó.</p>
- </dd>
- </dl>
-
-
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/rewriteguide.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/rewriteguide.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/rewriteguide.xml b/docs/manual/misc/rewriteguide.xml
deleted file mode 100644
index 1ae7d2d5f8..0000000000
--- a/docs/manual/misc/rewriteguide.xml
+++ /dev/null
@@ -1,2101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="rewriteguide.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>URL Rewriting Guide</title>
-
- <summary>
- <note>
- <p>Originally written by<br />
- <cite>Ralf S. Engelschall &lt;rse@apache.org&gt;</cite><br />
- December 1997</p>
- </note>
-
- <p>This document supplements the <module>mod_rewrite</module>
- <a href="../mod/mod_rewrite.html">reference documentation</a>.
- It describes how one can use Apache's <module>mod_rewrite</module>
- to solve typical URL-based problems with which webmasters are
- commonony confronted. We give detailed descriptions on how to
- solve each problem by configuring URL rewriting rulesets.</p>
-
- </summary>
-
- <section id="ToC1">
-
- <title>Introduction to <code>mod_rewrite</code></title>
-
- <p>The Apache module <module>mod_rewrite</module> is a killer
- one, i.e. it is a really sophisticated module which provides
- a powerful way to do URL manipulations. With it you can do nearly
- all types of URL manipulations you ever dreamed about.
- The price you have to pay is to accept complexity, because
- <module>mod_rewrite</module>'s major drawback is that it is
- not easy to understand and use for the beginner. And even
- Apache experts sometimes discover new aspects where
- <module>mod_rewrite</module> can help.</p>
-
- <p>In other words: With <module>mod_rewrite</module> you either
- shoot yourself in the foot the first time and never use it again
- or love it for the rest of your life because of its power.
- This paper tries to give you a few initial success events to
- avoid the first case by presenting already invented solutions
- to you.</p>
-
- </section>
-
- <section id="ToC2">
-
- <title>Practical Solutions</title>
-
- <p>Here come a lot of practical solutions I've either invented
- myself or collected from other people's solutions in the past.
- Feel free to learn the black magic of URL rewriting from
- these examples.</p>
-
- <note type="warning">ATTENTION: Depending on your server-configuration
- it can be necessary to slightly change the examples for your
- situation, e.g. adding the <code>[PT]</code> flag when
- additionally using <module>mod_alias</module> and
- <module>mod_userdir</module>, etc. Or rewriting a ruleset
- to fit in <code>.htaccess</code> context instead
- of per-server context. Always try to understand what a
- particular ruleset really does before you use it. It
- avoid problems.</note>
-
- </section>
-
- <section id="url">
-
- <title>URL Layout</title>
-
- <section>
-
- <title>Canonical URLs</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>On some webservers there are more than one URL for a
- resource. Usually there are canonical URLs (which should be
- actually used and distributed) and those which are just
- shortcuts, internal ones, etc. Independent of which URL the
- user supplied with the request he should finally see the
- canonical one only.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We do an external HTTP redirect for all non-canonical
- URLs to fix them in the location view of the Browser and
- for all subsequent requests. In the example ruleset below
- we replace <code>/~user</code> by the canonical
- <code>/u/user</code> and fix a missing trailing slash for
- <code>/u/user</code>.</p>
-
-<example><pre>
-RewriteRule ^/<strong>~</strong>([^/]+)/?(.*) /<strong>u</strong>/$1/$2 [<strong>R</strong>]
-RewriteRule ^/([uge])/(<strong>[^/]+</strong>)$ /$1/$2<strong>/</strong> [<strong>R</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Canonical Hostnames</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>...</dd>
-
- <dt>Solution:</dt>
-
- <dd>
-<example><pre>
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteCond %{SERVER_PORT} !^80$
-RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Moved <code>DocumentRoot</code></title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Usually the <directive module="core">DocumentRoot</directive>
- of the webserver directly relates to the URL "<code>/</code>".
- But often this data is not really of top-level priority, it is
- perhaps just one entity of a lot of data pools. For instance at
- our Intranet sites there are <code>/e/www/</code>
- (the homepage for WWW), <code>/e/sww/</code> (the homepage for
- the Intranet) etc. Now because the data of the <directive module="core"
- >DocumentRoot</directive> stays at <code>/e/www/</code> we had
- to make sure that all inlined images and other stuff inside this
- data pool work for subsequent requests.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We just redirect the URL <code>/</code> to
- <code>/e/www/</code>. While is seems trivial it is
- actually trivial with <module>mod_rewrite</module>, only.
- Because the typical old mechanisms of URL <em>Aliases</em>
- (as provides by <module>mod_alias</module> and friends)
- only used <em>prefix</em> matching. With this you cannot
- do such a redirection because the <directive module="core"
- >DocumentRoot</directive> is a prefix of all URLs. With
- <module>mod_rewrite</module> it is really trivial:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule <strong>^/$</strong> /e/www/ [<strong>R</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Trailing Slash Problem</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Every webmaster can sing a song about the problem of
- the trailing slash on URLs referencing directories. If they
- are missing, the server dumps an error, because if you say
- <code>/~quux/foo</code> instead of <code>/~quux/foo/</code>
- then the server searches for a <em>file</em> named
- <code>foo</code>. And because this file is a directory it
- complains. Actually it tries to fix it itself in most of
- the cases, but sometimes this mechanism need to be emulated
- by you. For instance after you have done a lot of
- complicated URL rewritings to CGI scripts etc.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution to this subtle problem is to let the server
- add the trailing slash automatically. To do this
- correctly we have to use an external redirect, so the
- browser correctly requests subsequent images etc. If we
- only did a internal rewrite, this would only work for the
- directory page, but would go wrong when any images are
- included into this page with relative URLs, because the
- browser would request an in-lined object. For instance, a
- request for <code>image.gif</code> in
- <code>/~quux/foo/index.html</code> would become
- <code>/~quux/image.gif</code> without the external
- redirect!</p>
-
- <p>So, to do this trick we write:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo<strong>$</strong> foo<strong>/</strong> [<strong>R</strong>]
-</pre></example>
-
- <p>The crazy and lazy can even do the following in the
- top-level <code>.htaccess</code> file of their homedir.
- But notice that this creates some processing
- overhead.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteCond %{REQUEST_FILENAME} <strong>-d</strong>
-RewriteRule ^(.+<strong>[^/]</strong>)$ $1<strong>/</strong> [R]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Webcluster through Homogeneous URL Layout</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>We want to create a homogeneous and consistent URL
- layout over all WWW servers on a Intranet webcluster, i.e.
- all URLs (per definition server local and thus server
- dependent!) become actually server <em>independent</em>!
- What we want is to give the WWW namespace a consistent
- server-independent layout: no URL should have to include
- any physically correct target server. The cluster itself
- should drive us automatically to the physical target
- host.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>First, the knowledge of the target servers come from
- (distributed) external maps which contain information
- where our users, groups and entities stay. The have the
- form</p>
-
-<example><pre>
-user1 server_of_user1
-user2 server_of_user2
-: :
-</pre></example>
-
- <p>We put them into files <code>map.xxx-to-host</code>.
- Second we need to instruct all servers to redirect URLs
- of the forms</p>
-
-<example><pre>
-/u/user/anypath
-/g/group/anypath
-/e/entity/anypath
-</pre></example>
-
- <p>to</p>
-
-<example><pre>
-http://physical-host/u/user/anypath
-http://physical-host/g/group/anypath
-http://physical-host/e/entity/anypath
-</pre></example>
-
- <p>when the URL is not locally valid to a server. The
- following ruleset does this for us by the help of the map
- files (assuming that server0 is a default server which
- will be used if a user has no entry in the map):</p>
-
-<example><pre>
-RewriteEngine on
-
-RewriteMap user-to-host txt:/path/to/map.user-to-host
-RewriteMap group-to-host txt:/path/to/map.group-to-host
-RewriteMap entity-to-host txt:/path/to/map.entity-to-host
-
-RewriteRule ^/u/<strong>([^/]+)</strong>/?(.*) http://<strong>${user-to-host:$1|server0}</strong>/u/$1/$2
-RewriteRule ^/g/<strong>([^/]+)</strong>/?(.*) http://<strong>${group-to-host:$1|server0}</strong>/g/$1/$2
-RewriteRule ^/e/<strong>([^/]+)</strong>/?(.*) http://<strong>${entity-to-host:$1|server0}</strong>/e/$1/$2
-
-RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
-RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Move Homedirs to Different Webserver</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Many webmasters have asked for a solution to the
- following situation: They wanted to redirect just all
- homedirs on a webserver to another webserver. They usually
- need such things when establishing a newer webserver which
- will replace the old one over time.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution is trivial with <module>mod_rewrite</module>.
- On the old webserver we just redirect all
- <code>/~user/anypath</code> URLs to
- <code>http://newserver/~user/anypath</code>.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^/~(.+) http://<strong>newserver</strong>/~$1 [R,L]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Structured Homedirs</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Some sites with thousands of users usually use a
- structured homedir layout, i.e. each homedir is in a
- subdirectory which begins for instance with the first
- character of the username. So, <code>/~foo/anypath</code>
- is <code>/home/<strong>f</strong>/foo/.www/anypath</code>
- while <code>/~bar/anypath</code> is
- <code>/home/<strong>b</strong>/bar/.www/anypath</code>.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use the following ruleset to expand the tilde URLs
- into exactly the above layout.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/.www$3
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Filesystem Reorganization</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>This really is a hardcore example: a killer application
- which heavily uses per-directory
- <code>RewriteRules</code> to get a smooth look and feel
- on the Web while its data structure is never touched or
- adjusted. Background: <strong><em>net.sw</em></strong> is
- my archive of freely available Unix software packages,
- which I started to collect in 1992. It is both my hobby
- and job to to this, because while I'm studying computer
- science I have also worked for many years as a system and
- network administrator in my spare time. Every week I need
- some sort of software so I created a deep hierarchy of
- directories where I stored the packages:</p>
-
-<example><pre>
-drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
-drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
-drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
-drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
-drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
-drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
-drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
-drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
-drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
-drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
-drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
-drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
-drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
-drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/
-</pre></example>
-
- <p>In July 1996 I decided to make this archive public to
- the world via a nice Web interface. "Nice" means that I
- wanted to offer an interface where you can browse
- directly through the archive hierarchy. And "nice" means
- that I didn't wanted to change anything inside this
- hierarchy - not even by putting some CGI scripts at the
- top of it. Why? Because the above structure should be
- later accessible via FTP as well, and I didn't want any
- Web or CGI stuff to be there.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution has two parts: The first is a set of CGI
- scripts which create all the pages at all directory
- levels on-the-fly. I put them under
- <code>/e/netsw/.www/</code> as follows:</p>
-
-<example><pre>
--rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
-drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
--rw-rw-rw- 1 netsw users 372982 Aug 5 16:35 LOGFILE
--rw-r--r-- 1 netsw users 659 Aug 4 09:27 TODO
--rw-r--r-- 1 netsw users 5697 Aug 1 18:01 netsw-about.html
--rwxr-xr-x 1 netsw users 579 Aug 2 10:33 netsw-access.pl
--rwxr-xr-x 1 netsw users 1532 Aug 1 17:35 netsw-changes.cgi
--rwxr-xr-x 1 netsw users 2866 Aug 5 14:49 netsw-home.cgi
-drwxr-xr-x 2 netsw users 512 Jul 8 23:47 netsw-img/
--rwxr-xr-x 1 netsw users 24050 Aug 5 15:49 netsw-lsdir.cgi
--rwxr-xr-x 1 netsw users 1589 Aug 3 18:43 netsw-search.cgi
--rwxr-xr-x 1 netsw users 1885 Aug 1 17:41 netsw-tree.cgi
--rw-r--r-- 1 netsw users 234 Jul 30 16:35 netsw-unlimit.lst
-</pre></example>
-
- <p>The <code>DATA/</code> subdirectory holds the above
- directory structure, i.e. the real
- <strong><em>net.sw</em></strong> stuff and gets
- automatically updated via <code>rdist</code> from time to
- time. The second part of the problem remains: how to link
- these two structures together into one smooth-looking URL
- tree? We want to hide the <code>DATA/</code> directory
- from the user while running the appropriate CGI scripts
- for the various URLs. Here is the solution: first I put
- the following into the per-directory configuration file
- in the <directive module="core">DocumentRoot</directive>
- of the server to rewrite the announced URL
- <code>/net.sw/</code> to the internal path
- <code>/e/netsw</code>:</p>
-
-<example><pre>
-RewriteRule ^net.sw$ net.sw/ [R]
-RewriteRule ^net.sw/(.*)$ e/netsw/$1
-</pre></example>
-
- <p>The first rule is for requests which miss the trailing
- slash! The second rule does the real thing. And then
- comes the killer configuration which stays in the
- per-directory config file
- <code>/e/netsw/.www/.wwwacl</code>:</p>
-
-<example><pre>
-Options ExecCGI FollowSymLinks Includes MultiViews
-
-RewriteEngine on
-
-# we are reached via /net.sw/ prefix
-RewriteBase /net.sw/
-
-# first we rewrite the root dir to
-# the handling cgi script
-RewriteRule ^$ netsw-home.cgi [L]
-RewriteRule ^index\.html$ netsw-home.cgi [L]
-
-# strip out the subdirs when
-# the browser requests us from perdir pages
-RewriteRule ^.+/(netsw-[^/]+/.+)$ $1 [L]
-
-# and now break the rewriting for local files
-RewriteRule ^netsw-home\.cgi.* - [L]
-RewriteRule ^netsw-changes\.cgi.* - [L]
-RewriteRule ^netsw-search\.cgi.* - [L]
-RewriteRule ^netsw-tree\.cgi$ - [L]
-RewriteRule ^netsw-about\.html$ - [L]
-RewriteRule ^netsw-img/.*$ - [L]
-
-# anything else is a subdir which gets handled
-# by another cgi script
-RewriteRule !^netsw-lsdir\.cgi.* - [C]
-RewriteRule (.*) netsw-lsdir.cgi/$1
-</pre></example>
-
- <p>Some hints for interpretation:</p>
-
- <ol>
- <li>Notice the <code>L</code> (last) flag and no
- substitution field ('<code>-</code>') in the forth part</li>
-
- <li>Notice the <code>!</code> (not) character and
- the <code>C</code> (chain) flag at the first rule
- in the last part</li>
-
- <li>Notice the catch-all pattern in the last rule</li>
- </ol>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>NCSA imagemap to Apache <code>mod_imap</code></title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>When switching from the NCSA webserver to the more
- modern Apache webserver a lot of people want a smooth
- transition. So they want pages which use their old NCSA
- <code>imagemap</code> program to work under Apache with the
- modern <module>mod_imap</module>. The problem is that there
- are a lot of hyperlinks around which reference the
- <code>imagemap</code> program via
- <code>/cgi-bin/imagemap/path/to/page.map</code>. Under
- Apache this has to read just
- <code>/path/to/page.map</code>.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a global rule to remove the prefix on-the-fly for
- all requests:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Search pages in more than one directory</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Sometimes it is necessary to let the webserver search
- for pages in more than one directory. Here MultiViews or
- other techniques cannot help.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We program a explicit ruleset which searches for the
- files in the directories.</p>
-
-<example><pre>
-RewriteEngine on
-
-# first try to find it in custom/...
-# ...and if found stop and be happy:
-RewriteCond /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir1</strong>/$1 [L]
-
-# second try to find it in pub/...
-# ...and if found stop and be happy:
-RewriteCond /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir2</strong>/$1 [L]
-
-# else go on for other Alias or ScriptAlias directives,
-# etc.
-RewriteRule ^(.+) - [PT]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Set Environment Variables According To URL Parts</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Perhaps you want to keep status information between
- requests and use the URL to encode it. But you don't want
- to use a CGI wrapper for all pages just to strip out this
- information.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a rewrite rule to strip out the status information
- and remember it via an environment variable which can be
- later dereferenced from within XSSI or CGI. This way a
- URL <code>/foo/S=java/bar/</code> gets translated to
- <code>/foo/bar/</code> and the environment variable named
- <code>STATUS</code> is set to the value "java".</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^(.*)/<strong>S=([^/]+)</strong>/(.*) $1/$3 [E=<strong>STATUS:$2</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Virtual User Hosts</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume that you want to provide
- <code>www.<strong>username</strong>.host.domain.com</code>
- for the homepage of username via just DNS A records to the
- same machine and without any virtualhosts on this
- machine.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>For HTTP/1.0 requests there is no solution, but for
- HTTP/1.1 requests which contain a Host: HTTP header we
- can use the following ruleset to rewrite
- <code>http://www.username.host.com/anypath</code>
- internally to <code>/home/username/anypath</code>:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{<strong>HTTP_HOST</strong>} ^www\.<strong>[^.]+</strong>\.host\.com$
-RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
-RewriteRule ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Redirect Homedirs For Foreigners</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>We want to redirect homedir URLs to another webserver
- <code>www.somewhere.com</code> when the requesting user
- does not stay in the local domain
- <code>ourdomain.com</code>. This is sometimes used in
- virtual host contexts.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>Just a rewrite condition:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{REMOTE_HOST} <strong>!^.+\.ourdomain\.com$</strong>
-RewriteRule ^(/~.+) http://www.somewhere.com/$1 [R,L]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Redirect Failing URLs To Other Webserver</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>A typical FAQ about URL rewriting is how to redirect
- failing requests on webserver A to webserver B. Usually
- this is done via <directive module="core"
- >ErrorDocument</directive> CGI-scripts in Perl, but
- there is also a <module>mod_rewrite</module> solution.
- But notice that this performs more poorly than using an
- <directive module="core">ErrorDocument</directive>
- CGI-script!</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The first solution has the best performance but less
- flexibility, and is less error safe:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond /your/docroot/%{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></example>
-
- <p>The problem here is that this will only work for pages
- inside the <directive module="core">DocumentRoot</directive>. While you can add more
- Conditions (for instance to also handle homedirs, etc.)
- there is better variant:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{REQUEST_URI} <strong>!-U</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></example>
-
- <p>This uses the URL look-ahead feature of <module>mod_rewrite</module>.
- The result is that this will work for all types of URLs
- and is a safe way. But it does a performance impact on
- the webserver, because for every request there is one
- more internal subrequest. So, if your webserver runs on a
- powerful CPU, use this one. If it is a slow machine, use
- the first approach or better a <directive module="core"
- >ErrorDocument</directive> CGI-script.</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Extended Redirection</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Sometimes we need more control (concerning the
- character escaping mechanism) of URLs on redirects.
- Usually the Apache kernels URL escape function also
- escapes anchors, i.e. URLs like "<code>url#anchor</code>".
- You cannot use this directly on redirects with
- <module>mod_rewrite</module> because the
- <code>uri_escape()</code> function of Apache
- would also escape the hash character.
- How can we redirect to such a URL?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We have to use a kludge by the use of a NPH-CGI script
- which does the redirect itself. Because here no escaping
- is done (NPH=non-parseable headers). First we introduce a
- new URL scheme <code>xredirect:</code> by the following
- per-server config-line (should be one of the last rewrite
- rules):</p>
-
-<example><pre>
-RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
- [T=application/x-httpd-cgi,L]
-</pre></example>
-
- <p>This forces all URLs prefixed with
- <code>xredirect:</code> to be piped through the
- <code>nph-xredirect.cgi</code> program. And this program
- just looks like:</p>
-
-<example><pre>
-#!/path/to/perl
-##
-## nph-xredirect.cgi -- NPH/CGI script for extended redirects
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-
-$| = 1;
-$url = $ENV{'PATH_INFO'};
-
-print "HTTP/1.0 302 Moved Temporarily\n";
-print "Server: $ENV{'SERVER_SOFTWARE'}\n";
-print "Location: $url\n";
-print "Content-type: text/html\n";
-print "\n";
-print "&lt;html&gt;\n";
-print "&lt;head&gt;\n";
-print "&lt;title&gt;302 Moved Temporarily (EXTENDED)&lt;/title&gt;\n";
-print "&lt;/head&gt;\n";
-print "&lt;body&gt;\n";
-print "&lt;h1&gt;Moved Temporarily (EXTENDED)&lt;/h1&gt;\n";
-print "The document has moved &lt;a HREF=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
-print "&lt;/body&gt;\n";
-print "&lt;/html&gt;\n";
-
-##EOF##
-</pre></example>
-
- <p>This provides you with the functionality to do
- redirects to all URL schemes, i.e. including the one
- which are not directly accepted by <module>mod_rewrite</module>.
- For instance you can now also redirect to
- <code>news:newsgroup</code> via</p>
-
-<example><pre>
-RewriteRule ^anyurl xredirect:news:newsgroup
-</pre></example>
-
- <note>Notice: You have not to put <code>[R]</code> or
- <code>[R,L]</code> to the above rule because the
- <code>xredirect:</code> need to be expanded later
- by our special "pipe through" rule above.</note>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Archive Access Multiplexer</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Do you know the great CPAN (Comprehensive Perl Archive
- Network) under <a href="http://www.perl.com/CPAN"
- >http://www.perl.com/CPAN</a>?
- This does a redirect to one of several FTP servers around
- the world which carry a CPAN mirror and is approximately
- near the location of the requesting client. Actually this
- can be called an FTP access multiplexing service. While
- CPAN runs via CGI scripts, how can a similar approach
- implemented via <module>mod_rewrite</module>?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>First we notice that from version 3.0.0
- <module>mod_rewrite</module> can
- also use the "<code>ftp:</code>" scheme on redirects.
- And second, the location approximation can be done by a
- <directive module="mod_rewrite">RewriteMap</directive>
- over the top-level domain of the client.
- With a tricky chained ruleset we can use this top-level
- domain as a key to our multiplexing map.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap multiplex txt:/path/to/map.cxan
-RewriteRule ^/CxAN/(.*) %{REMOTE_HOST}::$1 [C]
-RewriteRule ^.+\.<strong>([a-zA-Z]+)</strong>::(.*)$ ${multiplex:<strong>$1</strong>|ftp.default.dom}$2 [R,L]
-</pre></example>
-
-<example><pre>
-##
-## map.cxan -- Multiplexing Map for CxAN
-##
-
-de ftp://ftp.cxan.de/CxAN/
-uk ftp://ftp.cxan.uk/CxAN/
-com ftp://ftp.cxan.com/CxAN/
- :
-##EOF##
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Time-Dependent Rewriting</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>When tricks like time-dependent content should happen a
- lot of webmasters still use CGI scripts which do for
- instance redirects to specialized pages. How can it be done
- via <module>mod_rewrite</module>?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>There are a lot of variables named <code>TIME_xxx</code>
- for rewrite conditions. In conjunction with the special
- lexicographic comparison patterns <code>&lt;STRING</code>,
- <code>&gt;STRING</code> and <code>=STRING</code> we can
- do time-dependent redirects:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &gt;0700
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &lt;1900
-RewriteRule ^foo\.html$ foo.day.html
-RewriteRule ^foo\.html$ foo.night.html
-</pre></example>
-
- <p>This provides the content of <code>foo.day.html</code>
- under the URL <code>foo.html</code> from
- <code>07:00-19:00</code> and at the remaining time the
- contents of <code>foo.night.html</code>. Just a nice
- feature for a homepage...</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Backward Compatibility for YYYY to XXXX migration</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we make URLs backward compatible (still
- existing virtually) after migrating <code>document.YYYY</code>
- to <code>document.XXXX</code>, e.g. after translating a
- bunch of <code>.html</code> files to <code>.phtml</code>?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We just rewrite the name to its basename and test for
- existence of the new extension. If it exists, we take
- that name, else we rewrite the URL to its original state.</p>
-
-
-<example><pre>
-# backward compatibility ruleset for
-# rewriting document.html to document.phtml
-# when and only when document.phtml exists
-# but no longer document.html
-RewriteEngine on
-RewriteBase /~quux/
-# parse out basename, but remember the fact
-RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
-# rewrite to document.phtml if exists
-RewriteCond %{REQUEST_FILENAME}.phtml -f
-RewriteRule ^(.*)$ $1.phtml [S=1]
-# else reverse the previous basename cutout
-RewriteCond %{ENV:WasHTML} ^yes$
-RewriteRule ^(.*)$ $1.html
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
- <section id="content">
-
- <title>Content Handling</title>
-
- <section>
-
- <title>From Old to New (intern)</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume we have recently renamed the page
- <code>foo.html</code> to <code>bar.html</code> and now want
- to provide the old URL for backward compatibility. Actually
- we want that users of the old URL even not recognize that
- the pages was renamed.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We rewrite the old URL to the new one internally via the
- following rule:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>From Old to New (extern)</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume again that we have recently renamed the page
- <code>foo.html</code> to <code>bar.html</code> and now want
- to provide the old URL for backward compatibility. But this
- time we want that the users of the old URL get hinted to
- the new one, i.e. their browsers Location field should
- change, too.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We force a HTTP redirect to the new URL which leads to a
- change of the browsers and thus the users view:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html [<strong>R</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Browser Dependent Content</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>At least for important top-level pages it is sometimes
- necessary to provide the optimum of browser dependent
- content, i.e. one has to provide a maximum version for the
- latest Netscape variants, a minimum version for the Lynx
- browsers and a average feature version for all others.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We cannot use content negotiation because the browsers do
- not provide their type in that form. Instead we have to
- act on the HTTP header "User-Agent". The following condig
- does the following: If the HTTP header "User-Agent"
- begins with "Mozilla/3", the page <code>foo.html</code>
- is rewritten to <code>foo.NS.html</code> and and the
- rewriting stops. If the browser is "Lynx" or "Mozilla" of
- version 1 or 2 the URL becomes <code>foo.20.html</code>.
- All other browsers receive page <code>foo.32.html</code>.
- This is done by the following ruleset:</p>
-
-<example><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/3</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>NS</strong>.html [<strong>L</strong>]
-
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Lynx/</strong>.* [OR]
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/[12]</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>20</strong>.html [<strong>L</strong>]
-
-RewriteRule ^foo\.html$ foo.<strong>32</strong>.html [<strong>L</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Dynamic Mirror</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume there are nice webpages on remote hosts we want
- to bring into our namespace. For FTP servers we would use
- the <code>mirror</code> program which actually maintains an
- explicit up-to-date copy of the remote data on the local
- machine. For a webserver we could use the program
- <code>webcopy</code> which acts similar via HTTP. But both
- techniques have one major drawback: The local copy is
- always just as up-to-date as often we run the program. It
- would be much better if the mirror is not a static one we
- have to establish explicitly. Instead we want a dynamic
- mirror with data which gets updated automatically when
- there is need (updated data on the remote host).</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>To provide this feature we map the remote webpage or even
- the complete remote webarea to our namespace by the use
- of the <dfn>Proxy Throughput</dfn> feature
- (flag <code>[P]</code>):</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>hotsheet/</strong>(.*)$ <strong>http://www.tstimpreso.com/hotsheet/</strong>$1 [<strong>P</strong>]
-</pre></example>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>usa-news\.html</strong>$ <strong>http://www.quux-corp.com/news/index.html</strong> [<strong>P</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Reverse Dynamic Mirror</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>...</dd>
-
- <dt>Solution:</dt>
-
- <dd>
-<example><pre>
-RewriteEngine on
-RewriteCond /mirror/of/remotesite/$1 -U
-RewriteRule ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Retrieve Missing Data from Intranet</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>This is a tricky way of virtually running a corporate
- (external) Internet webserver
- (<code>www.quux-corp.dom</code>), while actually keeping
- and maintaining its data on a (internal) Intranet webserver
- (<code>www2.quux-corp.dom</code>) which is protected by a
- firewall. The trick is that on the external webserver we
- retrieve the requested data on-the-fly from the internal
- one.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>First, we have to make sure that our firewall still
- protects the internal webserver and that only the
- external webserver is allowed to retrieve data from it.
- For a packet-filtering firewall we could for instance
- configure a firewall ruleset like the following:</p>
-
-<example><pre>
-<strong>ALLOW</strong> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-<strong>DENY</strong> Host * Port * --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-</pre></example>
-
- <p>Just adjust it to your actual configuration syntax.
- Now we can establish the <module>mod_rewrite</module>
- rules which request the missing data in the background
- through the proxy throughput feature:</p>
-
-<example><pre>
-RewriteRule ^/~([^/]+)/?(.*) /home/$1/.www/$2
-RewriteCond %{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteCond %{REQUEST_FILENAME} <strong>!-d</strong>
-RewriteRule ^/home/([^/]+)/.www/?(.*) http://<strong>www2</strong>.quux-corp.dom/~$1/pub/$2 [<strong>P</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Load Balancing</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Suppose we want to load balance the traffic to
- <code>www.foo.com</code> over <code>www[0-5].foo.com</code>
- (a total of 6 servers). How can this be done?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>There are a lot of possible solutions for this problem.
- We will discuss first a commonly known DNS-based variant
- and then the special one with <module>mod_rewrite</module>:</p>
-
- <ol>
- <li>
- <strong>DNS Round-Robin</strong>
-
- <p>The simplest method for load-balancing is to use
- the DNS round-robin feature of <code>BIND</code>.
- Here you just configure <code>www[0-9].foo.com</code>
- as usual in your DNS with A(address) records, e.g.</p>
-
-<example><pre>
-www0 IN A 1.2.3.1
-www1 IN A 1.2.3.2
-www2 IN A 1.2.3.3
-www3 IN A 1.2.3.4
-www4 IN A 1.2.3.5
-www5 IN A 1.2.3.6
-</pre></example>
-
- <p>Then you additionally add the following entry:</p>
-
-<example><pre>
-www IN CNAME www0.foo.com.
- IN CNAME www1.foo.com.
- IN CNAME www2.foo.com.
- IN CNAME www3.foo.com.
- IN CNAME www4.foo.com.
- IN CNAME www5.foo.com.
- IN CNAME www6.foo.com.
-</pre></example>
-
- <p>Notice that this seems wrong, but is actually an
- intended feature of <code>BIND</code> and can be used
- in this way. However, now when <code>www.foo.com</code> gets
- resolved, <code>BIND</code> gives out <code>www0-www6</code>
- - but in a slightly permutated/rotated order every time.
- This way the clients are spread over the various
- servers. But notice that this not a perfect load
- balancing scheme, because DNS resolve information
- gets cached by the other nameservers on the net, so
- once a client has resolved <code>www.foo.com</code>
- to a particular <code>wwwN.foo.com</code>, all
- subsequent requests also go to this particular name
- <code>wwwN.foo.com</code>. But the final result is
- ok, because the total sum of the requests are really
- spread over the various webservers.</p>
- </li>
-
- <li>
- <strong>DNS Load-Balancing</strong>
-
- <p>A sophisticated DNS-based method for
- load-balancing is to use the program
- <code>lbnamed</code> which can be found at <a
- href="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">
- http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</a>.
- It is a Perl 5 program in conjunction with auxilliary
- tools which provides a real load-balancing for
- DNS.</p>
- </li>
-
- <li>
- <strong>Proxy Throughput Round-Robin</strong>
-
- <p>In this variant we use <module>mod_rewrite</module>
- and its proxy throughput feature. First we dedicate
- <code>www0.foo.com</code> to be actually
- <code>www.foo.com</code> by using a single</p>
-
-<example><pre>
-www IN CNAME www0.foo.com.
-</pre></example>
-
- <p>entry in the DNS. Then we convert
- <code>www0.foo.com</code> to a proxy-only server,
- i.e. we configure this machine so all arriving URLs
- are just pushed through the internal proxy to one of
- the 5 other servers (<code>www1-www5</code>). To
- accomplish this we first establish a ruleset which
- contacts a load balancing script <code>lb.pl</code>
- for all URLs.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap lb prg:/path/to/lb.pl
-RewriteRule ^/(.+)$ ${lb:$1} [P,L]
-</pre></example>
-
- <p>Then we write <code>lb.pl</code>:</p>
-
-<example><pre>
-#!/path/to/perl
-##
-## lb.pl -- load balancing script
-##
-
-$| = 1;
-
-$name = "www"; # the hostname base
-$first = 1; # the first server (not 0 here, because 0 is myself)
-$last = 5; # the last server in the round-robin
-$domain = "foo.dom"; # the domainname
-
-$cnt = 0;
-while (&lt;STDIN&gt;) {
- $cnt = (($cnt+1) % ($last+1-$first));
- $server = sprintf("%s%d.%s", $name, $cnt+$first, $domain);
- print "http://$server/$_";
-}
-
-##EOF##
-</pre></example>
-
- <note>A last notice: Why is this useful? Seems like
- <code>www0.foo.com</code> still is overloaded? The
- answer is yes, it is overloaded, but with plain proxy
- throughput requests, only! All SSI, CGI, ePerl, etc.
- processing is completely done on the other machines.
- This is the essential point.</note>
- </li>
-
- <li>
- <strong>Hardware/TCP Round-Robin</strong>
-
- <p>There is a hardware solution available, too. Cisco
- has a beast called LocalDirector which does a load
- balancing at the TCP/IP level. Actually this is some
- sort of a circuit level gateway in front of a
- webcluster. If you have enough money and really need
- a solution with high performance, use this one.</p>
- </li>
- </ol>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>New MIME-type, New Service</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>On the net there are a lot of nifty CGI programs. But
- their usage is usually boring, so a lot of webmaster
- don't use them. Even Apache's Action handler feature for
- MIME-types is only appropriate when the CGI programs
- don't need special URLs (actually <code>PATH_INFO</code>
- and <code>QUERY_STRINGS</code>) as their input. First,
- let us configure a new file type with extension
- <code>.scgi</code> (for secure CGI) which will be processed
- by the popular <code>cgiwrap</code> program. The problem
- here is that for instance we use a Homogeneous URL Layout
- (see above) a file inside the user homedirs has the URL
- <code>/u/user/foo/bar.scgi</code>. But
- <code>cgiwrap</code> needs the URL in the form
- <code>/~user/foo/bar.scgi/</code>. The following rule
- solves the problem:</p>
-
-<example><pre>
-RewriteRule ^/[uge]/<strong>([^/]+)</strong>/\.www/(.+)\.scgi(.*) ...
-... /internal/cgi/user/cgiwrap/~<strong>$1</strong>/$2.scgi$3 [NS,<strong>T=application/x-http-cgi</strong>]
-</pre></example>
-
- <p>Or assume we have some more nifty programs:
- <code>wwwlog</code> (which displays the
- <code>access.log</code> for a URL subtree and
- <code>wwwidx</code> (which runs Glimpse on a URL
- subtree). We have to provide the URL area to these
- programs so they know on which area they have to act on.
- But usually this ugly, because they are all the times
- still requested from that areas, i.e. typically we would
- run the <code>swwidx</code> program from within
- <code>/u/user/foo/</code> via hyperlink to</p>
-
-<example><pre>
-/internal/cgi/user/swwidx?i=/u/user/foo/
-</pre></example>
-
- <p>which is ugly. Because we have to hard-code
- <strong>both</strong> the location of the area
- <strong>and</strong> the location of the CGI inside the
- hyperlink. When we have to reorganize the area, we spend a
- lot of time changing the various hyperlinks.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>The solution here is to provide a special new URL format
- which automatically leads to the proper CGI invocation.
- We configure the following:</p>
-
-<example><pre>
-RewriteRule ^/([uge])/([^/]+)(/?.*)/\* /internal/cgi/user/wwwidx?i=/$1/$2$3/
-RewriteRule ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3
-</pre></example>
-
- <p>Now the hyperlink to search at
- <code>/u/user/foo/</code> reads only</p>
-
-<example><pre>
-HREF="*"
-</pre></example>
-
- <p>which internally gets automatically transformed to</p>
-
-<example><pre>
-/internal/cgi/user/wwwidx?i=/u/user/foo/
-</pre></example>
-
- <p>The same approach leads to an invocation for the
- access log CGI program when the hyperlink
- <code>:log</code> gets used.</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>From Static to Dynamic</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we transform a static page
- <code>foo.html</code> into a dynamic variant
- <code>foo.cgi</code> in a seamless way, i.e. without notice
- by the browser/user.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We just rewrite the URL to the CGI-script and force the
- correct MIME-type so it gets really run as a CGI-script.
- This way a request to <code>/~quux/foo.html</code>
- internally leads to the invocation of
- <code>/~quux/foo.cgi</code>.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo\.<strong>html</strong>$ foo.<strong>cgi</strong> [T=<strong>application/x-httpd-cgi</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>On-the-fly Content-Regeneration</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Here comes a really esoteric feature: Dynamically
- generated but statically served pages, i.e. pages should be
- delivered as pure static pages (read from the filesystem
- and just passed through), but they have to be generated
- dynamically by the webserver if missing. This way you can
- have CGI-generated pages which are statically served unless
- one (or a cronjob) removes the static contents. Then the
- contents gets refreshed.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- This is done via the following ruleset:
-
-<example><pre>
-RewriteCond %{REQUEST_FILENAME} <strong>!-s</strong>
-RewriteRule ^page\.<strong>html</strong>$ page.<strong>cgi</strong> [T=application/x-httpd-cgi,L]
-</pre></example>
-
- <p>Here a request to <code>page.html</code> leads to a
- internal run of a corresponding <code>page.cgi</code> if
- <code>page.html</code> is still missing or has filesize
- null. The trick here is that <code>page.cgi</code> is a
- usual CGI script which (additionally to its <code>STDOUT</code>)
- writes its output to the file <code>page.html</code>.
- Once it was run, the server sends out the data of
- <code>page.html</code>. When the webmaster wants to force
- a refresh the contents, he just removes
- <code>page.html</code> (usually done by a cronjob).</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Document With Autorefresh</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Wouldn't it be nice while creating a complex webpage if
- the webbrowser would automatically refresh the page every
- time we write a new version from within our editor?
- Impossible?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>No! We just combine the MIME multipart feature, the
- webserver NPH feature and the URL manipulation power of
- <module>mod_rewrite</module>. First, we establish a new
- URL feature: Adding just <code>:refresh</code> to any
- URL causes this to be refreshed every time it gets
- updated on the filesystem.</p>
-
-<example><pre>
-RewriteRule ^(/[uge]/[^/]+/?.*):refresh /internal/cgi/apache/nph-refresh?f=$1
-</pre></example>
-
- <p>Now when we reference the URL</p>
-
-<example><pre>
-/u/foo/bar/page.html:refresh
-</pre></example>
-
- <p>this leads to the internal invocation of the URL</p>
-
-<example><pre>
-/internal/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
-</pre></example>
-
- <p>The only missing part is the NPH-CGI script. Although
- one would usually say "left as an exercise to the reader"
- ;-) I will provide this, too.</p>
-
-<example><pre>
-#!/sw/bin/perl
-##
-## nph-refresh -- NPH/CGI script for auto refreshing pages
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-$| = 1;
-
-# split the QUERY_STRING variable
-@pairs = split(/&amp;/, $ENV{'QUERY_STRING'});
-foreach $pair (@pairs) {
- ($name, $value) = split(/=/, $pair);
- $name =~ tr/A-Z/a-z/;
- $name = 'QS_' . $name;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- eval "\$$name = \"$value\"";
-}
-$QS_s = 1 if ($QS_s eq '');
-$QS_n = 3600 if ($QS_n eq '');
-if ($QS_f eq '') {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: No file given\n";
- exit(0);
-}
-if (! -f $QS_f) {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: File $QS_f not found\n";
- exit(0);
-}
-
-sub print_http_headers_multipart_begin {
- print "HTTP/1.0 200 OK\n";
- $bound = "ThisRandomString12345";
- print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
- &amp;print_http_headers_multipart_next;
-}
-
-sub print_http_headers_multipart_next {
- print "\n--$bound\n";
-}
-
-sub print_http_headers_multipart_end {
- print "\n--$bound--\n";
-}
-
-sub displayhtml {
- local($buffer) = @_;
- $len = length($buffer);
- print "Content-type: text/html\n";
- print "Content-length: $len\n\n";
- print $buffer;
-}
-
-sub readfile {
- local($file) = @_;
- local(*FP, $size, $buffer, $bytes);
- ($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
- $size = sprintf("%d", $size);
- open(FP, "&amp;lt;$file");
- $bytes = sysread(FP, $buffer, $size);
- close(FP);
- return $buffer;
-}
-
-$buffer = &amp;readfile($QS_f);
-&amp;print_http_headers_multipart_begin;
-&amp;displayhtml($buffer);
-
-sub mystat {
- local($file) = $_[0];
- local($time);
-
- ($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
- return $mtime;
-}
-
-$mtimeL = &amp;mystat($QS_f);
-$mtime = $mtime;
-for ($n = 0; $n &amp;lt; $QS_n; $n++) {
- while (1) {
- $mtime = &amp;mystat($QS_f);
- if ($mtime ne $mtimeL) {
- $mtimeL = $mtime;
- sleep(2);
- $buffer = &amp;readfile($QS_f);
- &amp;print_http_headers_multipart_next;
- &amp;displayhtml($buffer);
- sleep(5);
- $mtimeL = &amp;mystat($QS_f);
- last;
- }
- sleep($QS_s);
- }
-}
-
-&amp;print_http_headers_multipart_end;
-
-exit(0);
-
-##EOF##
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Mass Virtual Hosting</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>The <directive type="section" module="core"
- >VirtualHost</directive> feature of Apache is nice
- and works great when you just have a few dozens
- virtual hosts. But when you are an ISP and have hundreds of
- virtual hosts to provide this feature is not the best
- choice.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>To provide this feature we map the remote webpage or even
- the complete remote webarea to our namespace by the use
- of the <dfn>Proxy Throughput</dfn> feature (flag <code>[P]</code>):</p>
-
-<example><pre>
-##
-## vhost.map
-##
-www.vhost1.dom:80 /path/to/docroot/vhost1
-www.vhost2.dom:80 /path/to/docroot/vhost2
- :
-www.vhostN.dom:80 /path/to/docroot/vhostN
-</pre></example>
-
-<example><pre>
-##
-## httpd.conf
-##
- :
-# use the canonical hostname on redirects, etc.
-UseCanonicalName on
-
- :
-# add the virtual host in front of the CLF-format
-CustomLog /path/to/access_log "%{VHOST}e %h %l %u %t \"%r\" %&gt;s %b"
- :
-
-# enable the rewriting engine in the main server
-RewriteEngine on
-
-# define two maps: one for fixing the URL and one which defines
-# the available virtual hosts with their corresponding
-# DocumentRoot.
-RewriteMap lowercase int:tolower
-RewriteMap vhost txt:/path/to/vhost.map
-
-# Now do the actual virtual host mapping
-# via a huge and complicated single rule:
-#
-# 1. make sure we don't map for common locations
-RewriteCond %{REQUEST_URL} !^/commonurl1/.*
-RewriteCond %{REQUEST_URL} !^/commonurl2/.*
- :
-RewriteCond %{REQUEST_URL} !^/commonurlN/.*
-#
-# 2. make sure we have a Host header, because
-# currently our approach only supports
-# virtual hosting through this header
-RewriteCond %{HTTP_HOST} !^$
-#
-# 3. lowercase the hostname
-RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
-#
-# 4. lookup this hostname in vhost.map and
-# remember it only when it is a path
-# (and not "NONE" from above)
-RewriteCond ${vhost:%1} ^(/.*)$
-#
-# 5. finally we can map the URL to its docroot location
-# and remember the virtual host for logging puposes
-RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
- :
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
- <section id="access">
-
- <title>Access Restriction</title>
-
- <section>
-
- <title>Blocking of Robots</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we block a really annoying robot from
- retrieving pages of a specific webarea? A
- <code>/robots.txt</code> file containing entries of the
- "Robot Exclusion Protocol" is typically not enough to get
- rid of such a robot.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a ruleset which forbids the URLs of the webarea
- <code>/~quux/foo/arc/</code> (perhaps a very deep
- directory indexed area where the robot traversal would
- create big server load). We have to make sure that we
- forbid access only to the particular robot, i.e. just
- forbidding the host where the robot runs is not enough.
- This would block users from this host, too. We accomplish
- this by also matching the User-Agent HTTP header
- information.</p>
-
-<example><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>NameOfBadRobot</strong>.*
-RewriteCond %{REMOTE_ADDR} ^<strong>123\.45\.67\.[8-9]</strong>$
-RewriteRule ^<strong>/~quux/foo/arc/</strong>.+ - [<strong>F</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Blocked Inline-Images</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Assume we have under <code>http://www.quux-corp.de/~quux/</code>
- some pages with inlined GIF graphics. These graphics are
- nice, so others directly incorporate them via hyperlinks to
- their pages. We don't like this practice because it adds
- useless traffic to our server.</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>While we cannot 100% protect the images from inclusion,
- we can at least restrict the cases where the browser
- sends a HTTP Referer header.</p>
-
-<example><pre>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong>
-RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
-RewriteRule <strong>.*\.gif$</strong> - [F]
-</pre></example>
-
-<example><pre>
-RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
-RewriteRule <strong>^inlined-in-foo\.gif$</strong> - [F]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Host Deny</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we forbid a list of externally configured hosts
- from using our server?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>For Apache &gt;= 1.3b6:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
-RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^/.* - [F]
-</pre></example>
-
- <p>For Apache &lt;= 1.3b6:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteRule ^/(.*)$ ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ /$1
-</pre></example>
-
-<example><pre>
-##
-## hosts.deny
-##
-## ATTENTION! This is a map, not a list, even when we treat it as such.
-## mod_rewrite parses it for key/value pairs, so at least a
-## dummy value "-" must be present for each entry.
-##
-
-193.102.180.41 -
-bsdti1.sdm.de -
-192.76.162.40 -
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Proxy Deny</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we forbid a certain host or even a user of a
- special host from using the Apache proxy?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We first have to make sure <module>mod_rewrite</module>
- is below(!) <module>mod_proxy</module> in the Configuration
- file when compiling the Apache webserver. This way it gets
- called <em>before</em> <module>mod_proxy</module>. Then we
- configure the following for a host-dependent deny...</p>
-
-<example><pre>
-RewriteCond %{REMOTE_HOST} <strong>^badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></example>
-
- <p>...and this one for a user@host-dependent deny:</p>
-
-<example><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>^badguy@badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Special Authentication Variant</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>Sometimes a very special authentication is needed, for
- instance a authentication which checks for a set of
- explicitly configured users. Only these should receive
- access and without explicit prompting (which would occur
- when using the Basic Auth via <module>mod_auth_basic</module>).</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>We use a list of rewrite conditions to exclude all except
- our friends:</p>
-
-<example><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend1@client1.quux-corp\.com$</strong>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend2</strong>@client2.quux-corp\.com$
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend3</strong>@client3.quux-corp\.com$
-RewriteRule ^/~quux/only-for-friends/ - [F]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Referer-based Deflector</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>How can we program a flexible URL Deflector which acts
- on the "Referer" HTTP header and can be configured with as
- many referring pages as we like?</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>Use the following really tricky ruleset...</p>
-
-<example><pre>
-RewriteMap deflector txt:/path/to/deflector.map
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}} ^-$
-RewriteRule ^.* %{HTTP_REFERER} [R,L]
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^.* ${deflector:%{HTTP_REFERER}} [R,L]
-</pre></example>
-
- <p>... in conjunction with a corresponding rewrite
- map:</p>
-
-<example><pre>
-##
-## deflector.map
-##
-
-http://www.badguys.com/bad/index.html -
-http://www.badguys.com/bad/index2.html -
-http://www.badguys.com/bad/index3.html http://somewhere.com/
-</pre></example>
-
- <p>This automatically redirects the request back to the
- referring page (when "<code>-</code>" is used as the value
- in the map) or to a specific URL (when an URL is specified
- in the map as the second argument).</p>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
- <section id="other">
-
- <title>Other</title>
-
- <section>
-
- <title>External Rewriting Engine</title>
-
- <dl>
- <dt>Description:</dt>
-
- <dd>
- <p>A FAQ: How can we solve the FOO/BAR/QUUX/etc.
- problem? There seems no solution by the use of
- <module>mod_rewrite</module>...</p>
- </dd>
-
- <dt>Solution:</dt>
-
- <dd>
- <p>Use an external <directive module="mod_rewrite"
- >RewriteMap</directive>, i.e. a program which acts
- like a <directive module="mod_rewrite"
- >RewriteMap</directive>. It is run once on startup of Apache
- receives the requested URLs on <code>STDIN</code> and has
- to put the resulting (usually rewritten) URL on
- <code>STDOUT</code> (same order!).</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap quux-map <strong>prg:</strong>/path/to/map.quux.pl
-RewriteRule ^/~quux/(.*)$ /~quux/<strong>${quux-map:$1}</strong>
-</pre></example>
-
-<example><pre>
-#!/path/to/perl
-
-# disable buffered I/O which would lead
-# to deadloops for the Apache server
-$| = 1;
-
-# read URLs one per line from stdin and
-# generate substitution URL on stdout
-while (&lt;&gt;) {
- s|^foo/|bar/|;
- print $_;
-}
-</pre></example>
-
- <p>This is a demonstration-only example and just rewrites
- all URLs <code>/~quux/foo/...</code> to
- <code>/~quux/bar/...</code>. Actually you can program
- whatever you like. But notice that while such maps can be
- <strong>used</strong> also by an average user, only the
- system administrator can <strong>define</strong> it.</p>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/misc/rewriteguide.xml.ko b/docs/manual/misc/rewriteguide.xml.ko
deleted file mode 100644
index a145f65641..0000000000
--- a/docs/manual/misc/rewriteguide.xml.ko
+++ /dev/null
@@ -1,2005 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="rewriteguide.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>URL ÀçÀÛ¼º Áöħ¼­</title>
-
- <summary>
- <note>
- <p>¿øÀúÀÚ<br />
- <cite>Ralf S. Engelschall &lt;rse@apache.org&gt;</cite><br />
- 1997³â 12¿ù</p>
- </note>
-
- <p>ÀÌ ¹®¼­´Â <module>mod_rewrite</module> <a
- href="../mod/mod_rewrite.html">ÂüÁ¶ ¹®¼­</a>¸¦ º¸ÃæÇÑ´Ù.
- ÀÌ ¹®¼­´Â À¥°ü¸®ÀÚ°¡ ½ÇÁ¦ ÀÛ¾÷¿¡¼­ ºÎµúÄ¡°ÔµÇ´Â ÀüÇüÀûÀÎ
- URL°ü·Ã ¹®Á¦¸¦ ÇØ°áÇϱâÀ§Çؼ­ ¾î¶»°Ô ¾ÆÆÄÄ¡
- <module>mod_rewrite</module>¸¦ »ç¿ëÇÏ´ÂÁö ¼³¸íÇÑ´Ù. URL
- ÀçÀÛ¼º ±ÔÄ¢À» ¼³Á¤ÇÏ¿© ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀ» ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.</p>
-
- </summary>
-
- <section id="ToC1">
-
- <title><code>mod_rewrite</code> ¼Ò°³</title>
-
- <p>¾ÆÆÄÄ¡ <module>mod_rewrite</module> ¸ðµâÀº ±²ÀåÇÏ´Ù.
- Áï, URLÀ» Á¶ÀÛÇÒ ¼ö ÀÖ´Â °­·ÂÇÏ°í ½Ç·Î Á¤±³ÇÑ ¸ðµâÀÌ´Ù.
- »ó»óÇØ¿Ô´ø °ÅÀÇ ¸ðµç Á¾·ùÀÇ URL Á¶ÀÛÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª
- ±× ´ë°¡·Î »ç¿ëÇϱ⠺¹ÀâÇÏ´Ù. <module>mod_rewrite</module>ÀÇ
- ÃÖ´ë ´ÜÁ¡Àº Ãʺ¸ÀÚ°¡ ÀÌÇØÇÏ°í »ç¿ëÇϱ⠽±Áö ¾Ê´Ù´Â Á¡ÀÌ´Ù.
- ½ÉÁö¾î ¾ÆÆÄÄ¡ Àü¹®°¡µµ Á¾Á¾ <module>mod_rewrite</module>ÀÇ
- »õ·Î¿î ¿ëµµ¸¦ ¹ß°ßÇÑ´Ù.</p>
-
- <p>´Ù¸¥ ¸»·Î: <module>mod_rewrite</module>¿¡ ´ëÇØ ´ç½ÅÀº
- óÀ½¿¡ °ÌÀ» ¸Ô°í Àý´ë·Î ´Ù½Ã »ç¿ëÇÏÁö ¾Ê°Å³ª, °­·ÂÇÔ¿¡ ¸Å·áµÇ¾î
- ¾ÕÀ¸·Î »î µ¿¾È »ç¶û¿¡ ºüÁú °ÍÀÌ´Ù. ÀÌ ±ÛÀº ù¹ø° °æ¿ì¸¦
- ¸·±âÀ§ÇØ ÀÌ¹Ì ¾Ë·ÁÁø ¸î°¡Áö ¼º°ø»ç·Ê¸¦ ¼Ò°³ÇÏ·Á°í ÇÑ´Ù.</p>
-
- </section>
-
- <section id="ToC2">
-
- <title>½Ç¿ëÀûÀÎ ÇØ°áÃ¥</title>
-
- <p>ÀÌÁ¦ ³»°¡ Á÷Á¢ ¸¸µé¾ú°Å³ª ´Ù¸¥ »ç¶÷µéÀÌ ¸¸µç ¸¹Àº ½Ç¿ëÀûÀÎ
- ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù. ¿¹Á¦¿¡¼­ URL ÀçÀÛ¼ºÀÇ È渶¼úÀ» ¸¶À½²¯ ¹è¿ì±æ
- ¹Ù¶õ´Ù.</p>
-
- <note type="warning">ÁÖÀÇ: ¼­¹ö ¼³Á¤¿¡ µû¶ó »óȲ¿¡ ¸Â°Ô
- ¿¹Á¦¸¦ Á¶±Ý ¼öÁ¤ÇØ¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, Ãß°¡·Î
- <module>mod_alias</module>, <module>mod_userdir</module>
- µîÀ» »ç¿ëÇÑ´Ù¸é <code>[PT]</code> Ç÷¡±×¸¦ Ãß°¡ÇÑ´Ù. ȤÀº
- ÁÖ¼­¹ö¼³Á¤/°¡»óÈ£½ºÆ® »ç¿ëÀå¼Ò°¡ ¾Æ´Ñ <code>.htaccess</code>
- »ç¿ëÀå¼Ò¿¡ ¾Ë¸Â°Ô ±ÔÄ¢À» ¼öÁ¤ÇÒ ¼öµµ ÀÖ´Ù. »ç¿ëÇϱâ Àü¿¡
- Ç×»ó ±ÔÄ¢ÀÌ ¾î¶² ±â´ÉÀ» ÇÏ´ÂÁö ÀÌÇØÇϵµ·Ï Çضó. ±×·¯¸é ¹®Á¦¸¦
- ÇÇÇÒ ¼ö ÀÖ´Ù.</note>
-
- </section>
-
- <section id="url">
-
- <title>URL ±¸Á¶</title>
-
- <section>
-
- <title>±âÁØÀÌ µÇ´Â URL</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÇÑ ¸®¼Ò½º¿¡ ´ëÇØ ¿©·¯ URLÀ» °¡Áö´Â À¥¼­¹ö°¡ ÀÖ´Ù.
- º¸Åë (½ÇÁ¦ »ç¿ëÇÏ°í ¾Ë·ÁÁ®¾ß ÇÒ) ±âÁØÀÌ µÇ´Â URL°ú,
- ´ÜÃà ȤÀº ³»ºÎ ¿ëµµÀÇ URLÀÌ ÀÖ´Ù. »ç¿ëÀÚ°¡ ¿äû¿¡
- ¾î¶² URLÀ» »ç¿ëÇÏ´øÁö ±âÁØÀÌ µÇ´Â URL¸¸À» º¸¿©Áà¾ß
- ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>±âÁØÀÌ µÇÁö¾Ê´Â ¸ðµç URLÀ» ºê¶ó¿ìÀú°¡ ¾Ëµµ·Ï °íÄ¡±âÀ§ÇØ
- ¿ÜºÎ HTTP ¸®´ÙÀÌ·º¼ÇÇÑ´Ù. ¿¹¸¦ µé¾î ¾Æ·¡ ±ÔÄ¢Àº
- <code>/~user</code>¸¦ ±âÁØÀÌ µÇ´Â <code>/u/user</code>·Î
- ´ëüÇÏ°í, <code>/u/user</code> ¸¶Áö¸·¿¡ ½½·¡½¬°¡ ¾ø´Ù¸é
- Ãß°¡ÇÑ´Ù.</p>
-
-<example><pre>
-RewriteRule ^/<strong>~</strong>([^/]+)/?(.*) /<strong>u</strong>/$1/$2 [<strong>R</strong>]
-RewriteRule ^/([uge])/(<strong>[^/]+</strong>)$ /$1/$2<strong>/</strong> [<strong>R</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>±âÁØÀÌ µÇ´Â È£½ºÆ®¸í</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>...</dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
-<example><pre>
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteCond %{SERVER_PORT} !^80$
-RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title><code>DocumentRoot</code>¸¦ ¿Å±ä °æ¿ì</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>À¥¼­¹öÀÇ <directive
- module="core">DocumentRoot</directive>´Â º¸Åë URL
- "<code>/</code>"°ú Á÷Á¢ °ü·ÃÀÖ´Ù. ±×·¯³ª ÀÌ°÷¿¡ ¸ðµç
- ÀÚ·á°¡ ÀÖÁö ¾Ê°í, ÀÚ·á°¡ ´Ù¸¥ ¿©·¯ °÷¿¡ Èð¾îÁ®ÀÖ´Â
- °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ÀÎÆ®¶ó³Ý »çÀÌÆ®¿¡ (¿ÜºÎ¸¦ À§ÇÑ
- ȨÆäÀÌÁö) <code>/e/www/</code>¿Í (ÀÎÆ®¶ó³ÝÀ» À§ÇÑ
- ȨÆäÀÌÁö) <code>/e/sww/</code>°¡ ÀÖ´Ù°í ÇÏÀÚ. ÀÌÁ¦
- <directive module="core">DocumentRoot</directive>°¡
- <code>/e/www/</code>À̱⶧¹®¿¡, ¿äû¿¡¼­ ÆäÀÌÁö¿¡
- Æ÷ÇÔµÈ ±×¸² µîÀ» ÀÌ°÷¿¡¼­ °¡Á®¿Í¾ß ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¿ì¸®´Â URL <code>/</code>¸¦ <code>/e/www/</code>·Î
- ¸®´ÙÀÌ·º¼Ç¸¸ ÇÏ¸é µÈ´Ù. »ç¼ÒÇØ º¸ÀÌÁö¸¸ ½ÇÁ¦·Î
- <module>mod_rewrite</module>¸¦ »ç¿ëÇؼ­¸¸ °¡´ÉÇÏ´Ù.
- (<module>mod_alias</module> µîÀÌ Á¦°øÇÏ´Â) URL
- <em>Alias</em> °°Àº ÀüÇüÀûÀÎ ¹æ¹ýÀº <em>¾ÕºÎºÐ</em>¸¸
- ã´Â´Ù. <directive module="core">DocumentRoot</directive>°¡
- ¸ðµç URLÀÇ ¾ÕºÎºÐÀ̱⶧¹®¿¡ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¿© ¸®´ÙÀÌ·º¼ÇÀ»
- ÇÒ ¼ö ¾ø´Ù. <module>mod_rewrite</module>¸¦ »ç¿ëÇϸé
- ÁøÂ¥ °£´ÜÇÏ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule <strong>^/$</strong> /e/www/ [<strong>R</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>¸¶Áö¸· ½½·¡½¬ ¹®Á¦</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>µð·ºÅ丮¸¦ ÁöĪÇÏ´Â URLÀÇ ¸¶Áö¸· ½½·¡½¬ ¹®Á¦°¡
- ¾ø´Ù¸é ¸ðµç À¥°ü¸®Àڴ ȯȣÇÒ °ÍÀÌ´Ù. ½½·¡½¬°¡ ¾ø´Ù¸é,
- Áï <code>/~quux/foo/</code> ´ë½Å <code>/~quux/foo</code>¸¦
- »ç¿ëÇÏ¸é ¼­¹ö°¡ <code>foo</code>¶ó´Â <em>ÆÄÀÏ</em>À»
- ã±â¶§¹®¿¡ ¿À·ù°¡ ¹ß»ýÇÑ´Ù. ÆÄÀÏÀÌ µð·ºÅ丮À̱⶧¹®¿¡
- ¹Þ¾ÆµéÀÌÁö ¾Ê´Â´Ù. ´ëºÎºÐÀÇ °æ¿ì º¸Åë ¼­¹ö°¡ ÀÚµ¿À¸·Î
- URLÀ» °íÄ¡Áö¸¸, °¡²û Á÷Á¢ ÇØÁà¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ¿¹¸¦
- µé¾î, CGI ½ºÅ©¸³Æ® µîÀ¸·Î º¹ÀâÇÑ URL ÀçÀÛ¼ºÀ» ÇÑ ÈÄ¿¡
- ±×·¯ÇÏ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀÌ ¹Ì¹¦ÇÑ ¹®Á¦ÀÇ ÇØ°á¹æ¹ýÀº ¼­¹ö°¡ ÀÚµ¿À¸·Î ¸¶Áö¸·
- ½½·¡½¬¸¦ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. ºê¶ó¿ìÀú°¡ ³ª¸ÓÁö ±×¸² µîÀ»
- ¿Ã¹Ù·Î ¿äûÇÒ ¼ö ÀÖµµ·Ï, ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ» ÇØ¾ß ÇÑ´Ù.
- ³»ºÎ ¸®´ÙÀÌ·º¼ÇÀ» ÇÑ´Ù¸é µð·ºÅ丮 ÆäÀÌÁö¿¡¸¸ µ¿ÀÛÇÏ¿©
- ÀÌ ÆäÀÌÁö°¡ »ó´ë URL·Î Æ÷ÇÔÇÏ´Â ±×¸²À» ºê¶ó¿ìÀú°¡
- ¿äûÇÒ¶§ ãÀ» ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î, ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
- »ç¿ëÇÏÁö ¾ÊÀ»¶§ <code>/~quux/foo/index.html</code>¿¡¼­
- <code>image.gif</code>¸¦ ¿äûÇϸé
- <code>/~quux/image.gif</code>¸¦ ¿äûÇÏ°Ô µÈ´Ù!</p>
-
- <p>±×·¡¼­ À̸¦ ÇØ°áÇϱâÀ§ÇØ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo<strong>$</strong> foo<strong>/</strong> [<strong>R</strong>]
-</pre></example>
-
- <p>Ȩµð·ºÅ丮ÀÇ ÃÖ»óÀ§ <code>.htaccess</code> ÆÄÀÏ¿¡
- ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ó¸®Çϴµ¥ ºÎ´ãÀÌ
- µÈ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteCond %{REQUEST_FILENAME} <strong>-d</strong>
-RewriteRule ^(.+<strong>[^/]</strong>)$ $1<strong>/</strong> [R]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>ÀÏ°üµÈ URL ±¸Á¶·Î ¸¸µç À¥Å¬·¯½ºÅÍ</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÀÎÆ®¶ó³Ý À¥¼­¹ö±ºÀÇ ¸ðµç À¥¼­¹ö¿¡ µ¿ÀÏÇÏ°í ÀÏ°üµÈ
- URL ±¸Á¶¸¦ ¸¸µé°í ½Í´Ù. Áï, ¸ðµç (Á¤ÀÇ»ó ¼­¹ö¿¡ ¼ÓÇÏ¿©
- ¼­¹ö¿¡ ÀÇÁ¸ÀûÀÎ!) URLÀ» ¼­¹ö <em>µ¶¸³ÀûÀ¸·Î</em> ¸¸µç´Ù!
- À¥ À̸§°ø°£¿¡ ¼­¹öµ¶¸³ÀûÀÎ µ¿ÀÏÇÑ ±¸Á¶¸¦ ºÎ¿©ÇØ¾ß ÇÑ´Ù:
- URLÀº ½ÇÁ¦ ¼­¹ö¸¦ ÁöĪÇÏ¸é ¾ÈµÈ´Ù. ¼­¹ö±ºÀÌ ÀÚµ¿À¸·Î
- ½ÇÁ¦ ¼­¹ö·Î À¯µµÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú »ç¿ëÀÚ, ±×·ì, µ¶¸³Ã¼ÀÇ À§Ä¡ Á¤º¸¸¦ ÀúÀåÇÑ
- (ºÐ»êµÈ) ¿ÜºÎ¸Ê¿¡ ½ÇÁ¦ ¼­¹ö Á¤º¸¸¦ ¾ò¾î¿Â´Ù. ¿ÜºÎ¸ÊÀº
- ´ÙÀ½°ú °°Àº Çü½ÄÀÌ´Ù</p>
-
-<example><pre>
-user1 server_of_user1
-user2 server_of_user2
-: :
-</pre></example>
-
- <p>¿ì¸®´Â ÀÌ Á¤º¸¸¦ °¢°¢ <code>map.xxx-to-host</code>
- ÆÄÀÏ¿¡ ÀúÀåÇß´Ù. ´ÙÀ½À¸·Î ¸ðµç ¼­¹ö¿¡¼­ URLÀÌ ¼­¹ö¿¡
- ¾ø´Ù¸é ´ÙÀ½°ú °°Àº URLÀ»,</p>
-
-<example><pre>
-/u/user/anypath
-/g/group/anypath
-/e/entity/anypath
-</pre></example>
-
- <p>´ÙÀ½°ú °°ÀÌ ¸®´ÙÀÌ·º¼ÇÇÑ´Ù</p>
-
-<example><pre>
-http://physical-host/u/user/anypath
-http://physical-host/g/group/anypath
-http://physical-host/e/entity/anypath
-</pre></example>
-
- <p>¾Æ·¡ ±ÔÄ¢Àº ¸ÊÆÄÀÏÀ» »ç¿ëÇÏ¿© ÀÌ ÀÛ¾÷À» ÇÑ´Ù (server0Àº
- ¸Ê¿¡ Ç׸ñÀÌ ¾ø´Â °æ¿ì »ç¿ëÇÒ ±âº»¼­¹ö¶ó°í °¡Á¤ÇÑ´Ù):</p>
-
-<example><pre>
-RewriteEngine on
-
-RewriteMap user-to-host txt:/path/to/map.user-to-host
-RewriteMap group-to-host txt:/path/to/map.group-to-host
-RewriteMap entity-to-host txt:/path/to/map.entity-to-host
-
-RewriteRule ^/u/<strong>([^/]+)</strong>/?(.*) http://<strong>${user-to-host:$1|server0}</strong>/u/$1/$2
-RewriteRule ^/g/<strong>([^/]+)</strong>/?(.*) http://<strong>${group-to-host:$1|server0}</strong>/g/$1/$2
-RewriteRule ^/e/<strong>([^/]+)</strong>/?(.*) http://<strong>${entity-to-host:$1|server0}</strong>/e/$1/$2
-
-RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
-RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Ȩµð·ºÅ丮¸¦ ´Ù¸¥ À¥¼­¹ö·Î ÀÌÀü</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¸¹Àº À¥°ü¸®ÀÚ´Â À¥¼­¹öÀÇ ¸ðµç Ȩµð·ºÅ丮¸¦ ´Ù¸¥
- À¥¼­¹ö·Î ÀÌÀüÇÑ °æ¿ì ÇØ°áÃ¥À» ¹°¾îº»´Ù. ÀÌ ¹æ¹ýÀº
- ÀÌÀü ¼­¹ö¸¦ ´ëüÇÒ »õ·Î¿î ¼­¹ö¸¦ ±¸¼ºÇϴµ¥ ½Ã°£ÀÌ
- °É¸®´Â °æ¿ì¿¡ ÇÊ¿äÇÏ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p><module>mod_rewrite</module>¸¦ »ç¿ëÇÏ¸é °£´ÜÇÏ´Ù.
- ÀÌÀü À¥¼­¹ö´Â ¸ðµç <code>/~user/anypath</code> URLÀ»
- <code>http://newserver/~user/anypath</code>·Î
- ¸®´ÙÀÌ·º¼ÇÇÏ¸é µÈ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^/~(.+) http://<strong>newserver</strong>/~$1 [R,L]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Ȩµð·ºÅ丮 ±¸Á¶ ¸¸µé±â</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>»ç¿ëÀÚ°¡ ¼öõ¸íÀÎ »çÀÌÆ®´Â º¸Åë Ȩµð·ºÅ丮 ±¸Á¶¸¦
- ¸¸µç´Ù. Áï, ¿¹¸¦ µé¾î À̸§ÀÌ »ç¿ëÀÚ¸íÀÇ Ã¹¹ø° ¹®ÀÚÀÎ
- ÇÏÀ§µð·ºÅ丮¿¡ Ȩµð·ºÅ丮¸¦ µÐ´Ù. ±×·¡¼­,
- <code>/~foo/anypath</code>´Â
- <code>/home/<strong>f</strong>/foo/.www/anypath</code>ÀÌ°í,
- <code>/~bar/anypath</code>´Â
- <code>/home/<strong>b</strong>/bar/.www/anypath</code>ÀÌ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¹°°áÇ¥½Ã°¡ ÀÖ´Â URLÀ» À§¿Í °°Àº ±¸Á¶·Î º¯È¯ÇϱâÀ§ÇØ
- ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÑ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/.www$3
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>ÆÄÀϽýºÅÛ À籸¼º</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÀÌ ¿¹´Â ½Ç·Î ÇϵåÄÚ¾îÀûÀÌ´Ù: µð·ºÅ丮º°
- <code>RewriteRules</code>¸¦ ¸Å¿ì ¸¹ÀÌ »ç¿ëÇÏ¿© ÀÚ·á
- ÀÚü´Â ±×´ë·Î µÐü·Î À¥¿¡ ÀڷḦ ÀÚ¿¬½º·´°Ô ºê¶ó¿ì¡Çϵµ·Ï
- ÇÑ´Ù. ¹è°æ: ³ª´Â 1992³â ºÎÅÍ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â
- À¯´Ð½º ¼ÒÇÁÆ®¿þ¾îµéÀ» <strong><em>net.sw</em></strong>¿¡
- ¸ð¾ÆµÎ°í ÀÖ¾ú´Ù. ÀÌ´Â ³»°¡ ÄÄÇ»ÅÍ°úÇÐÀ» °øºÎÇϸ鼭
- ¿©·¯Çص¿¾È ¿©°¡½Ã°£¿¡ ½Ã½ºÅÛ °ü¸®ÀÚ¿Í ³×Æ®¿÷ °ü¸®ÀÚ¸¦
- ÇؿԱ⶧¹®¿¡ ³» Ãë¹ÌÀÌÀÚ ÀÏÀÌ´Ù. ¸ÅÁÖ¸¶´Ù »õ·Î ¼ÒÇÁÆ®¿þ¾î°¡
- Ãß°¡µÉ ¶§¸¶´Ù µð·ºÅ丮¸¦ ±í°Ô ¸¸µé¾î¿Ô´Ù:</p>
-
-<example><pre>
-drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
-drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
-drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
-drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
-drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
-drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
-drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
-drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
-drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
-drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
-drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
-drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
-drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
-drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
-drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/
-</pre></example>
-
- <p>1996³â 7¿ù ÀÌ ÀúÀå¼Ò¸¦ ¸ÚÀÖ´Â À¥ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ
- ¼¼»ó¿¡ °ø°³Çϱâ·Î °áÁ¤ÇÞ´Ù. "¸ÚÀÖ´Ù"´Â ¸»Àº, ÃÖ»óÀ§
- µð·ºÅ丮¿¡ CGI ½ºÅ©¸³Æ®¸¦ µÎÁö ¾Ê°íµµ, ÀúÀå¼Ò °èÃþ±¸Á¶¸¦
- Á÷Á¢ ºê¶ó¿ìÁúÇÏ±æ ¹Ù¶õ´Ù´Â ¶æÀÌ´Ù. ¿Ö? ÀúÀå¼Ò¸¦ ³ªÁß¿¡
- FTP·Îµµ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ¸¸µé ¿¹Á¤ÀÌ¿´±â¶§¹®¿¡ À¥À̳ª
- CGI¿Í °ü·ÃµÈ ³»¿ëÀ» °°ÀÌ µÎ±â ½È¾ú´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÇØ°áÃ¥Àº µÎ ºÎºÐÀ¸·Î ³ª´¶´Ù: ¸ÕÀú µð·ºÅ丮 ¼öÁØ¿¡¼­
- ÇÊ¿äÇÑ ¸ðµç ÆäÀÌÁö¸¦ µ¿ÀûÀ¸·Î ¸¸µå´Â CGI ½ºÅ©¸³Æ®°¡
- ÇÊ¿äÇÏ´Ù. ³ª´Â ÀÌ ½ºÅ©¸³Æ®µéÀ» ´ÙÀ½°ú °°ÀÌ
- <code>/e/netsw/.www/</code>¿¡ µÎ¾ú´Ù:</p>
-
-<example><pre>
--rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
-drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
--rw-rw-rw- 1 netsw users 372982 Aug 5 16:35 LOGFILE
--rw-r--r-- 1 netsw users 659 Aug 4 09:27 TODO
--rw-r--r-- 1 netsw users 5697 Aug 1 18:01 netsw-about.html
--rwxr-xr-x 1 netsw users 579 Aug 2 10:33 netsw-access.pl
--rwxr-xr-x 1 netsw users 1532 Aug 1 17:35 netsw-changes.cgi
--rwxr-xr-x 1 netsw users 2866 Aug 5 14:49 netsw-home.cgi
-drwxr-xr-x 2 netsw users 512 Jul 8 23:47 netsw-img/
--rwxr-xr-x 1 netsw users 24050 Aug 5 15:49 netsw-lsdir.cgi
--rwxr-xr-x 1 netsw users 1589 Aug 3 18:43 netsw-search.cgi
--rwxr-xr-x 1 netsw users 1885 Aug 1 17:41 netsw-tree.cgi
--rw-r--r-- 1 netsw users 234 Jul 30 16:35 netsw-unlimit.lst
-</pre></example>
-
- <p><code>DATA/</code> ÇÏÀ§µð·ºÅ丮¿¡ À§¿¡¼­ ¸»ÇÑ ÀúÀå¼Ò°¡
- ÀÖ´Ù. ½ÇÁ¦ <strong><em>net.sw</em></strong>ÀÇ ³»¿ëÀº º¸Åë
- <code>rdist</code>¸¦ »ç¿ëÇÏ¿© ÀÚµ¿À¸·Î °¡Á®¿Â´Ù. µÎ¹ø°
- ºÎºÐÀÌ ³²¾Ò´Ù: ¾î¶»°Ô ÀÌ µÎ ±¸Á¶¸¦ ÇϳªÀÇ ÀÚ¿¬½º·¯¿î
- URL ±¸Á¶·Î ¿¬°áÇϴ°¡? »ç¿ëÀÚ¿¡°Ô <code>DATA/</code>
- µð·ºÅ丮¸¦ °¨Ãß°í, URL¸¶´Ù ÀûÀýÇÑ CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í
- ½Í´Ù. ÇØ°áÃ¥Àº ´ÙÀ½°ú °°´Ù: ¸ÕÀú ¼­¹öÀÇ <directive
- module="core">DocumentRoot</directive>¿¡¼­ °ø°³µÈ
- URL <code>/net.sw/</code>¸¦ ³»ºÎ °æ·Î <code>/e/netsw</code>·Î
- ÀçÀÛ¼ºÇϱâÀ§ÇØ µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
-<example><pre>
-RewriteRule ^net.sw$ net.sw/ [R]
-RewriteRule ^net.sw/(.*)$ e/netsw/$1
-</pre></example>
-
- <p>ù¹ø° ±ÔÄ¢Àº ¸¶Áö¸·¿¡ ½½·¡½¬°¡ ¾ø´Â ¿äûÀ» À§Çؼ­
- »ç¿ëÇß´Ù! µÎ¹ø° ±ÔÄ¢ÀÌ ½ÇÁ¦ ÀÛ¾÷À» ÇÑ´Ù. ±×¸®°í µð·ºÅ丮º°
- ¼³Á¤ÆÄÀÏ <code>/e/netsw/.www/.wwwacl</code>¿¡ °áÁ¤ÀûÀÎ
- ¼³Á¤ÀÌ ³ª¿Â´Ù:</p>
-
-<example><pre>
-Options ExecCGI FollowSymLinks Includes MultiViews
-
-RewriteEngine on
-
-# ¾Õ ºÎºÐÀÌ /net.sw/ ·Î Á¢±ÙÇÑ´Ù
-RewriteBase /net.sw/
-
-# ¸ÕÀú ÃÖ»óÀ§ µð·ºÅ丮¸¦
-# cgi ½ºÅ©¸³Æ®·Î ÀçÀÛ¼ºÇÑ´Ù
-RewriteRule ^$ netsw-home.cgi [L]
-RewriteRule ^index\.html$ netsw-home.cgi [L]
-
-# ºê¶ó¿ìÀú°¡ µð·ºÅ丮º° ÆäÀÌÁö¸¦ ¿äûÇÑ °æ¿ì
-# ÇÏÀ§µð·ºÅ丮¸¦ ÃßÃâÇÑ´Ù
-RewriteRule ^.+/(netsw-[^/]+/.+)$ $1 [L]
-
-# ÀÌÁ¦ ÀçÀÛ¼ºÀ» ¸¶Ä£´Ù
-RewriteRule ^netsw-home\.cgi.* - [L]
-RewriteRule ^netsw-changes\.cgi.* - [L]
-RewriteRule ^netsw-search\.cgi.* - [L]
-RewriteRule ^netsw-tree\.cgi$ - [L]
-RewriteRule ^netsw-about\.html$ - [L]
-RewriteRule ^netsw-img/.*$ - [L]
-
-# ´Ù¸¥ cgi ½ºÅ©¸³Æ®°¡ ó¸®ÇÒ
-# ÇÏÀ§µð·ºÅ丮°¡ ³²¾Ò´Ù
-RewriteRule !^netsw-lsdir\.cgi.* - [C]
-RewriteRule (.*) netsw-lsdir.cgi/$1
-</pre></example>
-
- <p>Çؼ®À» À§ÇÑ ÈùÆ®:</p>
-
- <ol>
- <li>³×¹ø° ºÎºÐ¿¡¼­ ´ëü Çʵå('<code>-</code>')°¡
- ¾ø°í <code>L</code> (last) Ç÷¡±×°¡ ÀÖÀ½À» ÁÖ¸ñÇ϶ó</li>
-
- <li>¸¶Áö¸· ºÎºÐ¿¡¼­ ù¹ø° ±ÔÄ¢¿¡ <code>!</code>
- (not) ¹®ÀÚ¿Í <code>C</code> (chain) Ç÷¡±×¸¦ ÁÖ¸ñÇ϶ó</li>
-
- <li>¸¶Áö¸· ±ÔÄ¢¿¡¼­ ±âŸ ÇØ´çÇÏÁö ¾Ê´Â ¸ðµç °æ¿ì¸¦
- Àâ¾Æ³»´Â ÆÐÅÏÀ» ÁÖ¸ñÇ϶ó</li>
- </ol>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>NCSA imagemapÀ» ¾ÆÆÄÄ¡ <code>mod_imap</code>À¸·Î</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>»ç¶÷µéÀº NCSA À¥¼­¹ö¿¡¼­ Çö´ëÀûÀÎ ¾ÆÆÄÄ¡ À¥¼­¹ö·Î
- ÀÚ¿¬½º·´°Ô ¿Å°Ü°¡±æ ¹Ù¶õ´Ù. ±×·¡¼­ ¿À·¡µÈ NCSA
- <code>imagemap</code> ÇÁ·Î±×·¥À» »ç¿ëÇÑ ÆäÀÌÁö¸¦ Çö´ëÀûÀÎ
- ¾ÆÆÄÄ¡ <module>mod_imap</module>·Î ó¸®ÇÏ±æ ¹Ù¶õ´Ù.
- ¹®Á¦´Â <code>imagemap</code> ÇÁ·Î±×·¥À»
- <code>/cgi-bin/imagemap/path/to/page.map</code>°ú
- °°ÀÌ ÂüÁ¶ÇÏ´Â ÇÏÀÌÆÛ¸µÅ©°¡ ¸¹´Ù´Â °ÍÀÌ´Ù. ¾ÆÆÄÄ¡´Â
- <code>/path/to/page.map</code>°ú °°Àº ¿äûÀ» ¹Þ¾Æ¾ß
- ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ðµç ¿äû¿¡¼­ ¾ÕºÎºÐÀ» µ¿ÀûÀ¸·Î Á¦°ÅÇÏ´Â Àü¿ª ±ÔÄ¢À»
- »ç¿ëÇÑ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>¿©·¯ µð·ºÅ丮¿¡¼­ ÆäÀÌÁö °Ë»ö</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡²û À¥¼­¹ö°¡ ¿©·¯ µð·ºÅ丮¿¡¼­ ÆÄÀÏÀ» ã¾Æ¾ß ÇÒ
- ¶§°¡ ÀÖ´Ù. ÀÌ °æ¿ì MultiViews³ª ´Ù¸¥ ¹æ¹ýÀº µµ¿òÀÌ
- ¾ÈµÈ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¿©·¯ µð·ºÅ丮¿¡¼­ ÆÄÀÏÀ» ã´Â ±ÔÄ¢À» Á÷Á¢ ÇÁ·Î±×·¥ÇÑ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-
-# ¸ÕÀú custom/¿¡¼­ ã±æ ½ÃµµÇÏ°í...
-# ...ãÀ¸¸é ³¡!
-RewriteCond /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir1</strong>/$1 [L]
-
-# µÎ¹ø°·Î pub/¿¡¼­ ã±æ ½ÃµµÇÑ´Ù...
-# ...ãÀ¸¸é ³¡!
-RewriteCond /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME} -f
-RewriteRule ^(.+) /your/docroot/<strong>dir2</strong>/$1 [L]
-
-# ¸øãÀ¸¸é ´Ù¸¥ Alias³ª ScriptAlias Áö½Ã¾î µîÀ¸·Î ÁøÇàÇÑ´Ù.
-RewriteRule ^(.+) - [PT]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>URL¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¿äûµé°£¿¡ »óÅÂÁ¤º¸¸¦ À¯ÁöÇϱâÀ§ÇØ URL¿¡ Á¤º¸¸¦
- ÀÎÄÚµùÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. ±×·¯³ª ´ÜÁö ÀÌ Á¤º¸¸¦ Á¦°ÅÇϱâÀ§ÇØ
- ¸ðµç ÆäÀÌÁö¿¡ CGI wrapper¸¦ »ç¿ëÇÏ°í ½ÍÁö ¾Ê´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀçÀÛ¼º ±ÔÄ¢À» »ç¿ëÇÏ¿© »óÅÂÁ¤º¸¸¦ ÃßÃâÇÏ°í, ÃßÃâÇÑ
- Á¤º¸¸¦ ³ªÁß¿¡ XSSI³ª CGI¿¡¼­ »ç¿ëÇϱâÀ§ÇØ È¯°æº¯¼ö¿¡
- ÀúÀåÇÑ´Ù. ±×·¡¼­ URL <code>/foo/S=java/bar/</code>´Â
- <code>/foo/bar/</code>·Î º¯È¯µÇ°í <code>STATUS</code>¶ó´Â
- ȯ°æº¯¼ö °ªÀ» "java"·Î ¼³Á¤ÇÑ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteRule ^(.*)/<strong>S=([^/]+)</strong>/(.*) $1/$3 [E=<strong>STATUS:$2</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>°¡»ó »ç¿ëÀÚ È£½ºÆ®</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏÁö ¾Ê°í °°Àº ÄÄÇ»ÅÍ·Î DNS A
- ·¹Äڵ带 ¼³Á¤ÇÏ¿©
- <code>www.<strong>username</strong>.host.domain.com</code>À»
- »ç¿ëÀÚÀÇ È¨ÆäÀÌÁö·Î Á¦°øÇÏ°í ½Í´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>HTTP/1.0 ¿äûÀÇ °æ¿ì ¹æ¹ýÀÌ ¾øÁö¸¸, Host: HTTP
- Çì´õ¸¦ Æ÷ÇÔÇÑ HTTP/1.1 ¿äûÀº ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÏ¿©
- ³»ºÎÀûÀ¸·Î <code>http://www.username.host.com/anypath</code>¸¦
- <code>/home/username/anypath</code>·Î ÀçÀÛ¼ºÇÒ ¼ö
- ÀÖ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{<strong>HTTP_HOST</strong>} ^www\.<strong>[^.]+</strong>\.host\.com$
-RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
-RewriteRule ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Ȩµð·ºÅ丮¸¦ ¿ÜºÎ ¼­¹ö·Î ¸®´ÙÀÌ·º¼Ç</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>Áö¿ª µµ¸ÞÀÎ <code>ourdomain.com</code> ¹Û¿¡¼­ ¿äûÀÌ
- µé¾î¿À¸é Ȩµð·ºÅ丮 URLÀ» ´Ù¸¥ À¥¼­¹ö
- <code>www.somewhere.com</code>À¸·Î ¸®´Ù¸®·º¼ÇÇϱæ
- ¹Ù¶õ´Ù. Á¾Á¾ °¡»óÈ£½ºÆ® »ç¿ëÀå¼Ò¿¡¼­ »ç¿ëÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀçÀÛ¼º Á¶°ÇÀ» »ç¿ëÇÏ¸é µÈ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{REMOTE_HOST} <strong>!^.+\.ourdomain\.com$</strong>
-RewriteRule ^(/~.+) http://www.somewhere.com/$1 [R,L]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>½ÇÆÐÇÑ URLÀ» ´Ù¸¥ À¥¼­¹ö·Î ¸®´ÙÀÌ·º¼Ç</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>URL ÀçÀÛ¼º¿¡ ´ëÇؼ­ À¥¼­¹ö A¿¡ ÇØ´ç ÆÄÀÏÀÌ ¾ø´Â
- °æ¿ì À¥¼­¹ö B·Î ¿äûÀ» ¸®´ÙÀÌ·º¼ÇÇÏ´Â ¹æ¹ýÀ» ÀÚÁÖ
- ¹°¾îº»´Ù. º¸Åë Perl·Î ÀÛ¼ºÇÑ <directive
- module="core">ErrorDocument</directive> CGI ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÏÁö¸¸, <module>mod_rewrite</module>¸¦ »ç¿ëÇÏ´Â
- ¹æ¹ýµµ ÀÖ´Ù. ±×·¯³ª ¼º´ÉÀº <directive
- module="core">ErrorDocument</directive> CGI ½ºÅ©¸³Æ®º¸´Ù
- ¶³¾îÁüÀ» ¸í½ÉÇ϶ó!</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ù¹ø° ¹æ¹ýÀº ºü¸£Áö¸¸ À¯¿¬¼ºÀÌ ¶³¾îÁö°í ¿ÏÀüÇÏÁö
- ¾Ê´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond /your/docroot/%{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></example>
-
- <p>ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº <directive
- module="core">DocumentRoot</directive> ¾È¿¡ ÀÖ´Â ÆäÀÌÁö¸¸
- °¡´ÉÇÏ´Ù´Â Á¡ÀÌ´Ù. (¿¹¸¦ µé¾î Ȩµð·ºÅ丮 µîÀ» À§ÇØ)
- Á¶°ÇÀ» Ãß°¡ÇÒ ¼ö ÀÖÁö¸¸, ´õ ÁÁÀº ¹æ¹ýÀÌ ÀÖ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{REQUEST_URI} <strong>!-U</strong>
-RewriteRule ^(.+) http://<strong>webserverB</strong>.dom/$1
-</pre></example>
-
- <p><module>mod_rewrite</module>ÀÇ URL Àü¹æÂüÁ¶(look-ahead)¸¦
- »ç¿ëÇÑ´Ù. ±×·¡¼­ ¸ðµç URL¿¡ µ¿ÀÛÇÏ°í ¾ÈÀüÇÏ´Ù. ±×·¯³ª
- ¸ðµç ¿äû¸¶´Ù ³»ºÎ ÇÏÀ§¿äûÀ» Çѹø ´õ Çϱ⶧¹®¿¡ À¥¼­¹ö
- ¼º´É¿¡ ¾Ç¿µÇâÀ» ÁØ´Ù. ±×·¡¼­ °­·ÂÇÑ CPU¿¡¼­ À¥¼­¹ö¸¦
- ½ÇÇàÇÑ´Ù¸é »ç¿ëÇ϶ó. ÄÄÇ»ÅÍ°¡ ´À¸®´Ù¸é ù¹ø° ¹æ¹ýÀ̳ª
- ´õ ³ªÀº <directive module="core">ErrorDocument</directive>
- CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇ϶ó.</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>È®Àå ¸®´ÙÀÌ·º¼Ç</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡²û ¸®´ÙÀÌ·º¼ÇÇÏ´Â URLÀ» ´õ Á¶ÀýÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
- ¾ÆÆÄÄ¡ ³»ºÎ URL escape ÇÔ¼ö´Â "<code>url#anchor</code>"
- °°Àº URLÀÇ anchorµµ escapeÇÑ´Ù. ¾ÆÆÄÄ¡ÀÇ
- <code>uri_escape()</code> ÇÔ¼ö´Â ¿ì¹°Á¤ÀÚ(#)µµ °°ÀÌ
- escapeÇϹǷΠ»ç¿ëÇÒ ¼ö ¾ø´Ù. ±×·¯¸é ¾î¶»°Ô ÀÌ·± URL·Î
- ¸®´ÙÀÌ·º¼ÇÇÒ ¼ö ÀÖ³ª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>Á÷Á¢ ¸®´ÙÀÌ·º¼ÇÇÏ´Â NPH-CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ ÇØ°áÃ¥ÀÌ
- ÇÊ¿äÇÏ´Ù. escape¸¦ ÇÏÁö ¾Ê±â¶§¹®ÀÌ´Ù (NPH=non-parseable
- headers). ¸ÕÀú ´ÙÀ½ ¼­¹ö¼³Á¤À» ÇÏ¿© (ÀçÀÛ¼º ±ÔÄ¢ÀÇ
- ³¡ºÎºÐ¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù) »õ·Î¿î URL scheme
- <code>xredirect:</code>¸¦ µµÀÔÇÑ´Ù:</p>
-
-<example><pre>
-RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
- [T=application/x-httpd-cgi,L]
-</pre></example>
-
- <p>±×·¯¸é <code>xredirect:</code>·Î ½ÃÀÛÇÏ´Â ¸ðµç URLÀº
- <code>nph-xredirect.cgi</code> ÇÁ·Î±×·¥À» ÅëÇÏ°Ô µÈ´Ù.
- ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°´Ù:</p>
-
-<example><pre>
-#!/path/to/perl
-##
-## nph-xredirect.cgi -- NPH/CGI script for extended redirects
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-
-$| = 1;
-$url = $ENV{'PATH_INFO'};
-
-print "HTTP/1.0 302 Moved Temporarily\n";
-print "Server: $ENV{'SERVER_SOFTWARE'}\n";
-print "Location: $url\n";
-print "Content-type: text/html\n";
-print "\n";
-print "&lt;html&gt;\n";
-print "&lt;head&gt;\n";
-print "&lt;title&gt;302 Moved Temporarily (EXTENDED)&lt;/title&gt;\n";
-print "&lt;/head&gt;\n";
-print "&lt;body&gt;\n";
-print "&lt;h1&gt;Moved Temporarily (EXTENDED)&lt;/h1&gt;\n";
-print "The document has moved &lt;a HREF=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
-print "&lt;/body&gt;\n";
-print "&lt;/html&gt;\n";
-
-##EOF##
-</pre></example>
-
- <p>±×·¯¸é <module>mod_rewrite</module>°¡ Á÷Á¢ ¹ÞÁö¸øÇÏ´Â
- ¸ðµç URL schemeÀ¸·Î ¸®´ÙÀÌ·º¼ÇÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,
- ´ÙÀ½°ú °°ÀÌ <code>news:newsgroup</code>À¸·Î ¸®´ÙÀÌ·º¼ÇÇÒ
- ¼ö ÀÖ´Ù</p>
-
-<example><pre>
-RewriteRule ^anyurl xredirect:news:newsgroup
-</pre></example>
-
- <note>ÁÖÀÇ: À§ÀÇ Æ¯º°ÇÑ "Åë°ú" ±ÔÄ¢À» »ç¿ëÇÏ¿©
- <code>xredirect:</code>¸¦ ¸¶Áö¸·¿¡ È®ÀåÇØ¾ß Çϱ⶧¹®¿¡
- ±ÔÄ¢¿¡ <code>[R]</code>À̳ª <code>[R,L]</code>À» »ç¿ëÇϸé
- ¾ÈµÈ´Ù.</note>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>ÀúÀå¼Ò Á¢±Ù Áß°è(multiplexer)</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p><a href="http://www.perl.com/CPAN">http://www.perl.com/CPAN</a>¿¡
- ÀÖ´Â ´ë´ÜÇÑ CPAN (Comprehensive Perl Archive Network)À»
- ¾Æ´Â°¡? ÀÌ ÁÖ¼Ò´Â ¼¼°è¿¡ Èð¾îÁø ¿©·¯ CPAN ¹Ì·¯ FTP
- ¼­¹öÁß Å¬¶óÀ̾ðÆ®¿¡ °¡±îÀÌ ÀÖ´Â ¼­¹ö·Î ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.
- À̸¦ FTP Á¢±Ù Áß°è ¼­ºñ½º¶ó°í ÇÑ´Ù. CPANÀº CGI ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÏÁö¸¸, <module>mod_rewrite</module>¸¦ »ç¿ëÇÏ¿©
- ºñ½ÁÇÏ°Ô ¸¸µé ¼ö ÀÖÀ»±î?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú <module>mod_rewrite</module> 3.0.0 ¹öÀüºÎÅÍ
- ¸®´ÙÀÌ·º¼Ç¿¡ "<code>ftp:</code>" schemeÀ» »ç¿ëÇÒ ¼ö
- ÀÖ´Ù. ´ÙÀ½À¸·Î Ŭ¶óÀ̾ðÆ®ÀÇ ÃÖ»óÀ§ µµ¸ÞÀÎÀ» <directive
- module="mod_rewrite">RewriteMap</directive>°ú °°ÀÌ
- »ç¿ëÇÏ¿© À§Ä¡¸¦ ÃßÁ¤ÇÒ ¼ö ÀÖ´Ù. º¹ÀâÈ÷ ¿«ÀÎ ±ÔÄ¢¿¡¼­
- ÃÖ»óÀ§ µµ¸ÞÀÎÀ» Áß°è¸ÊÀÇ Å°·Î »ç¿ëÇÑ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap multiplex txt:/path/to/map.cxan
-RewriteRule ^/CxAN/(.*) %{REMOTE_HOST}::$1 [C]
-RewriteRule ^.+\.<strong>([a-zA-Z]+)</strong>::(.*)$ ${multiplex:<strong>$1</strong>|ftp.default.dom}$2 [R,L]
-</pre></example>
-
-<example><pre>
-##
-## map.cxan -- Multiplexing Map for CxAN
-##
-
-de ftp://ftp.cxan.de/CxAN/
-uk ftp://ftp.cxan.uk/CxAN/
-com ftp://ftp.cxan.com/CxAN/
- :
-##EOF##
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>½Ã°£¿¡ µû¸¥ ÀçÀÛ¼º</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>½Ã°£¿¡ µû¶ó ´Ù¸¥ ³»¿ëÀ» ¼­ºñ½ºÇÏ´Â °æ¿ì ¸¹Àº À¥°ü¸®ÀÚ´Â
- Àá½Ã Ưº°ÇÑ ÆäÀÌÁö·Î ¸®´ÙÀÌ·º¼ÇÇϱâÀ§ÇØ CGI ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÑ´Ù. <module>mod_rewrite</module>·Î´Â ¾î¶»°Ô
- ÇÒ ¼ö Àִ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀçÀÛ¼º Á¶°Ç¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿©·¯ <code>TIME_xxx</code>
- º¯¼ö°¡ ÀÖ´Ù. º¯¼ö¿Í Ưº°ÇÑ »çÀü¼ø¼­ ºñ±³
- <code>&lt;STRING</code>, <code>&gt;STRING</code>,
- <code>=STRING</code>À» »ç¿ëÇÏ¿© ½Ã°£¿¡ µû¶ó ¸®´ÙÀÌ·º¼ÇÇÒ
- ¼ö ÀÖ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &gt;0700
-RewriteCond %{TIME_HOUR}%{TIME_MIN} &lt;1900
-RewriteRule ^foo\.html$ foo.day.html
-RewriteRule ^foo\.html$ foo.night.html
-</pre></example>
-
- <p>URL <code>foo.html</code>À» ¿äûÇϸé
- <code>07:00-19:00</code> µ¿¾È <code>foo.day.html</code>
- ³»¿ëÀ» ¼­ºñ½ºÇÏ°í, ³ª¸ÓÁö ½Ã°£ µ¿¾È
- <code>foo.night.html</code> ³»¿ëÀ» ¼­ºñ½ºÇÑ´Ù. ȨÆäÀÌÁö¿¡¼­
- »ç¿ëÇϱâ ÁÁÀº ±â´ÉÀÌ´Ù...</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>YYYY¸¦ XXXX·Î ÀÌÀüÇÑ °æ¿ì ¿ªÈ£È¯</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¿©·¯ <code>.html</code> ÆÄÀÏÀ» <code>.phtml</code>·Î
- º¯È¯ÇÏ´Â µî <code>document.YYYY</code>¸¦
- <code>document.XXXX</code>·Î ÀÌÀüÇÑÈÄ ¿ªÈ£È¯(backward
- compatibility) URLÀ» (°¡»óÀûÀ¸·Î Á¸ÀçÇÏ°Ô) ¸¸µé ¼ö
- ÀÖ³ª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>À̸§À» ±âº»À̸§À¸·Î ÀçÀÛ¼ºÇÑÈÄ »õ·Î¿î È®ÀåÀÚ¸¦
- °¡Áø ÆÄÀÏÀÌ ÀÖ´ÂÁö °Ë»çÇÑ´Ù. ÀÖ´Ù¸é ±× ÆÄÀϸíÀ» »ç¿ëÇÏ°í,
- ¾øÀ¸¸é URLÀ» ¿ø·¡ »óÅ·ΠÀçÀÛ¼ºÇÑ´Ù.</p>
-
-
-<example><pre>
-# ¹®¼­.html ÀÌ ¾ø°í
-# ¹®¼­.phtml ¸¸ ÀÖ´Â °æ¿ì
-# ¹®¼­.html À» ¹®¼­.phtml ·Î
-# ÀçÀÛ¼ºÇÏ´Â ¿ªÈ£È¯ ±ÔÄ¢
-RewriteEngine on
-RewriteBase /~quux/
-# ±âº»À̸§À» ã°í, ã¾Ò´Ù´Â »ç½ÇÀ» ±â¾ïÇÑ´Ù
-RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
-# ÆÄÀÏÀÌ ÀÖ´Ù¸é ¹®¼­.phtml ·Î ÀçÀÛ¼ºÇÑ´Ù
-RewriteCond %{REQUEST_FILENAME}.phtml -f
-RewriteRule ^(.*)$ $1.phtml [S=1]
-# ¾Æ´Ï¸é ¾Õ¿¡¼­ ãÀº ±âº»À̸§À» µÇµ¹¸°´Ù
-RewriteCond %{ENV:WasHTML} ^yes$
-RewriteRule ^(.*)$ $1.html
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
- <section id="content">
-
- <title>ÄÁÅÙÃ÷ ´Ù·ç±â</title>
-
- <section>
-
- <title>»õ·Î ÀÌÀü (°¨Ãß±â)</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÃÖ±Ù <code>foo.html</code>À» <code>bar.html</code>·Î
- º¯°æÇÏ°í ¿ªÈ£È¯¼ºÀ» À§ÇØ ÀÌÀü URLÀ» °è¼Ó Á¦°øÇÏ°í
- ½Í´Ù°í °¡Á¤ÇÏÀÚ. »ç¿ëÀÚ´Â ÀÌÀü URLÀÌ º¯°æµÇ¾ú´Ù´Â
- »ç½ÇÀ» ´«Ä¡Ã¤Áö ¸øÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>´ÙÀ½ ±ÔÄ¢À¸·Î ÀÌÀü URLÀ» ³»ºÎÀûÀ¸·Î »õ·Î¿î URL·Î
- ÀçÀÛ¼ºÇÑ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>»õ·Î ÀÌÀü (¾Ë¸®±â)</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>´Ù½Ã <code>foo.html</code>À» <code>bar.html</code>·Î
- º¯°æÇÏ°í ¿ªÈ£È¯¼ºÀ» À§ÇØ ÀÌÀü URLÀ» °è¼Ó Á¦°øÇÏ°í
- ½Í´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯³ª ÀÌÁ¦´Â ÀÌÀü URLÀ» »ç¿ëÇϸé
- »ç¿ëÀÚ¿¡°Ô »õ·Î¿î URLÀ» ÈùÆ®·Î ¾Ë·ÁÁØ´Ù. Áï, ºê¶ó¿ìÀú
- ÁÖ¼ÒâÀÌ º¯ÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>»õ·Î¿î URL·Î HTTP ¸®´ÙÀÌ·º¼ÇÇÏ´Ù. ±×·¯¸é ºê¶ó¿ìÀú°¡
- »õ·Î¿î URL¸¦ º¸ÀÌ°í º¯°æ»ç½ÇÀ» »ç¿ëÀÚ°¡ ¾Ë°ÔµÈ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html [<strong>R</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>ºê¶ó¿ìÀú¿¡ µû¸¥ ³»¿ë</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÃÖ¼ÒÇÑ Áß¿äÇÑ ÃÖ»óÀ§ ÆäÀÌÁö´Â ºê¶ó¿ìÀú¿¡ ÃÖÀûÈ­µÈ
- ³»¿ëÀ¸·Î ¼­ºñ½ºÇؾßÇÒ °æ¿ì°¡ ÀÖ´Ù. Áï, ÃֽŠNetscape
- ºê¶ó¿ìÀú¿¡°Ô´Â ÃÖ»óÀÇ ¹öÀüÀ», Lynx ºê¶ó¿ìÀú¿¡°Ô´Â
- ÃÖÀú ¹öÀüÀ», ³ª¸ÓÁö ºê¶ó¿ìÀú¿¡´Â Æò±ÕÀûÀÎ ¹öÀüÀ»
- Á¦°øÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ºê¶ó¿ìÀú°¡ ³»¿ëÇù»óÀ» À§ÇØ ÀÚ½ÅÀÇ Á¾·ù¿¡ ´ëÇÑ Á¤º¸¸¦
- Á¦°øÇÏÁö ¾Ê±â¶§¹®¿¡ ³»¿ëÇù»óÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ´ë½Å
- HTTP "User-Agent" Çì´õ¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½ ±ÔÄ¢Àº HTTP
- "User-Agent" Çì´õ°¡ "Mozilla/3"À¸·Î ½ÃÀÛÇϸé
- <code>foo.html</code> ÆäÀÌÁö¸¦ <code>foo.NS.html</code>·Î
- ÀçÀÛ¼ºÇÏ°í ÀçÀÛ¼ºÀ» Áß´ÜÇÑ´Ù. ºê¶ó¿ìÀú°¡ "Lynx"³ª
- "Mozilla" ¹öÀü 1 ȤÀº 2¶ó¸é URLÀº
- <code>foo.20.html</code>ÀÌ µÈ´Ù. ³ª¸ÓÁö ºê¶ó¿ìÀú´Â
- <code>foo.32.html</code> ÆäÀÌÁö¸¦ ¹Þ´Â´Ù. ¾Æ·¡ ±ÔÄ¢ÀÌ
- ÀÌ ÀÛ¾÷À» ÇÑ´Ù:</p>
-
-<example><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/3</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>NS</strong>.html [<strong>L</strong>]
-
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Lynx/</strong>.* [OR]
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/[12]</strong>.*
-RewriteRule ^foo\.html$ foo.<strong>20</strong>.html [<strong>L</strong>]
-
-RewriteRule ^foo\.html$ foo.<strong>32</strong>.html [<strong>L</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>µ¿Àû ¹Ì·¯</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¿ÜºÎ È£½ºÆ®¿¡ ¿ì¸® »çÀÌÆ®·Î °¡Á®¿À°í ½ÍÀº ÁÁÀº
- À¥ÆäÀÌÁö°¡ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. FTP ¼­¹öÀÇ °æ¿ì Á÷Á¢ ¿ÜºÎ
- ÀÚ·áÀÇ Ãֽź¹»çº»À» À¯ÁöÇÏ´Â <code>mirror</code> ÇÁ·Î±×·¥À»
- »ç¿ëÇÒ ¼ö ÀÖ°í, À¥¼­¹ö¶ó¸é HTTP·Î ºñ½ÁÇÑ ÀÛ¾÷À» ÇÏ´Â
- <code>webcopy</code> ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª
- µÎ ¹æ¹ý ¸ðµÎ ´ÜÁ¡ÀÌ ÀÖ´Ù: º¹»çº»Àº °¡²û¾¿ ÇÁ·Î±×·¥À»
- ½ÇÇàÇØÁÙ ¶§¸¸ ÃÖ½ÅÆÇÀ¸·Î À¯ÁöµÈ´Ù. Á÷Á¢ ±¸¼ºÇؾßÇÏ´Â
- Á¤ÀûÀÎ ¹Ì·¯°¡ ¾Æ´Ï¶ó¸é ÁÁ°Ú´Ù. ´ë½Å (¿ÜºÎ È£½ºÆ®¿¡¼­
- ÀÚ·á°¡ °»½ÅµÇ¸é) ÇÊ¿äÇÒ¶§ ÀÚµ¿À¸·Î ÀڷḦ °»½ÅÇÏ´Â
- µ¿Àû ¹Ì·¯°¡ ÇÊ¿äÇÏ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>À̸¦ À§ÇØ <dfn>Proxy Throughput</dfn> ±â´ÉÀ» (Ç÷¡±×
- <code>[P]</code>) »ç¿ëÇÏ¿© ¿ÜºÎ À¥ÆäÀÌÁö ȤÀº ¿ÜºÎ
- À¥°ø°£ Àüü¸¦ ¿ì¸® À̸§°ø°£À¸·Î ´ëÀÀÇÑ´Ù:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>hotsheet/</strong>(.*)$ <strong>http://www.tstimpreso.com/hotsheet/</strong>$1 [<strong>P</strong>]
-</pre></example>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^<strong>usa-news\.html</strong>$ <strong>http://www.quux-corp.com/news/index.html</strong> [<strong>P</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>µ¿Àû ¿ª¹Ì·¯</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>...</dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
-<example><pre>
-RewriteEngine on
-RewriteCond /mirror/of/remotesite/$1 -U
-RewriteRule ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>¾ø´Â ÀڷḦ ÀÎÆ®¶ó³Ý¿¡¼­ °¡Á®¿À±â</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>½ÇÁ¦ ÀڷḦ ¹æÈ­º®ÀÌ º¸È£ÇÏ´Â (³»ºÎ) ÀÎÆ®¶ó³Ý À¥¼­¹ö¿¡
- (<code>www2.quux-corp.dom</code>) ÀúÀåÇϸ鼭, ±â¾÷ÀÇ
- (¿ÜºÎ) ÀÎÅÍ³Ý À¥¼­¹ö¸¦ (<code>www.quux-corp.dom</code>)
- ½ÇÇàÇÏ´Â °Íó·³ º¸ÀÌ°Ô ÇÑ´Ù. ¿ÜºÎ À¥¼­¹ö´Â ¿äûÇÑ
- ÀڷḦ ³»ºÎ À¥¼­¹ö¿¡¼­ °¡Á®¿Â´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú ¹æÈ­º®ÀÌ ³»ºÎ À¥¼­¹ö¸¦ º¸È£ÇÏ°í ¿ÜºÎ À¥¼­¹ö¸¸ÀÌ
- ³»ºÎ À¥¼­¹ö¿¡¼­ ÀڷḦ ¾òÀ» ¼ö ÀÖ°Ô ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ
- ÆÐŶÇÊÅ͸µ ¹æÈ­º®À» ¼³Á¤ÇÑ´Ù:</p>
-
-<example><pre>
-<strong>ALLOW</strong> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-<strong>DENY</strong> Host * Port * --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-</pre></example>
-
- <p>½ÇÁ¦ ¼³Á¤¹®¹ý¿¡ ¾Ë¸Â°Ô °íÃĶó. ¾ø´Â ÀڷḦ ³»ºÎÀûÀ¸·Î
- proxy throughput ±â´ÉÀ» ÅëÇØ ¿äûÇÏ´Â
- <module>mod_rewrite</module> ±ÔÄ¢À» ÀÛ¼ºÇÑ´Ù:</p>
-
-<example><pre>
-RewriteRule ^/~([^/]+)/?(.*) /home/$1/.www/$2
-RewriteCond %{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteCond %{REQUEST_FILENAME} <strong>!-d</strong>
-RewriteRule ^/home/([^/]+)/.www/?(.*) http://<strong>www2</strong>.quux-corp.dom/~$1/pub/$2 [<strong>P</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>·Îµå¹ë·±½Ì (ºÎÇÏ ºÐ»êÇϱâ)</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p><code>www.foo.com</code>ÀÇ Åë½Å·®À»
- <code>www[0-5].foo.com</code> (ÃÑ ¼­¹ö 6´ë)À¸·Î ºÐ»êÇÏ°í
- ½Í´Ù. ¾î¶»°Ô Çϴ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸Å¿ì ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
- ¸ÕÀú DNS¸¦ »ç¿ëÇÑ Àß ¾Ë·ÁÁø ¹æ¹ýÀ» ¼³¸íÇÏ°í,
- <module>mod_rewrite</module>¸¦ »ç¿ëÇÏ´Â °æ¿ì¸¦ »ìÆ캸ÀÚ:</p>
-
- <ol>
- <li>
- <strong>DNS Round-Robin</strong>
-
- <p>°¡Àå °£´ÜÇÑ ·Îµå¹ë·±½Ì ¹æ¹ýÀº <code>BIND</code>ÀÇ
- DNS round-robin ¹æ½ÄÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½°ú
- °°ÀÌ DNS A(address) ·¹Äڵ忡
- <code>www[0-9].foo.com</code>À» ¼³Á¤ÇÑ´Ù.</p>
-
-<example><pre>
-www0 IN A 1.2.3.1
-www1 IN A 1.2.3.2
-www2 IN A 1.2.3.3
-www3 IN A 1.2.3.4
-www4 IN A 1.2.3.5
-www5 IN A 1.2.3.6
-</pre></example>
-
- <p>±×¸®°í ´ÙÀ½ Ç׸ñÀ» Ãß°¡ÇÑ´Ù:</p>
-
-<example><pre>
-www IN CNAME www0.foo.com.
- IN CNAME www1.foo.com.
- IN CNAME www2.foo.com.
- IN CNAME www3.foo.com.
- IN CNAME www4.foo.com.
- IN CNAME www5.foo.com.
- IN CNAME www6.foo.com.
-</pre></example>
-
- <p>À߸øµÈ °Íó·³ º¸ÀÌÁö¸¸, ½ÇÁ¦·Î <code>BIND</code>ÀÇ
- ÀǵµµÈ ±â´ÉÀÌ´Ù. ÀÌÁ¦ <code>www.foo.com</code>À»
- ãÀ¸¸é, <code>BIND</code>´Â ¸Å¹ø ¼ø¼­¸¦ Á¶±Ý¾¿
- ¹Ù²ã°¡¸ç <code>www0-www6</code>À» ¹ÝȯÇÑ´Ù. ±×·¡¼­
- Ŭ¶óÀ̾ðÆ®µéÀ» ¿©·¯ ¼­¹ö·Î ºÐ»êÇÑ´Ù. ±×·¯³ª DNS
- °Ë»ö °á°ú°¡ ³×Æ®¿÷ÀÇ ´Ù¸¥ ³×ÀÓ¼­¹ö¿¡ ij½¬µÇ¿©
- <code>www.foo.com</code>À» ãÀº °á°ú°¡ ƯÁ¤
- <code>wwwN.foo.com</code>À̸é Ŭ¶óÀ̾ðÆ®ÀÇ ´ÙÀ½
- ¿äûµéµµ °°Àº <code>wwwN.foo.com</code>À¸·Î
- º¸³»Áö±â¶§¹®¿¡ ¿Ïº®ÇÑ ·Îµå¹ë·±½Ì ±â¹ýÀÌ ¾Æ´ÔÀ»
- ÁÖÀÇÇ϶ó. ±×·¯³ª Å©°Ô º¸¸é ¿äûÀÌ ¿©·¯ À¥¼­¹ö¿¡
- ºÐ»êµÇ¹Ç·Î È¿°ú°¡ ÁÁ´Ù.</p>
- </li>
-
- <li>
- <strong>DNS ·Îµå¹ë·±½Ì</strong>
-
- <p><a href="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</a>¿¡
- ÀÖ´Â <code>lbnamed</code> ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿©
- Á¤±³ÇÑ DNS±â¹Ý ·Îµå¹ë·±½ÌÀ» ÇÒ ¼ö ÀÖ´Ù. DNS°¡
- ½ÇÁ¦ ·Îµå¹ë·±½ÌÀ» Çϵµ·Ï ¸¸µå´Â ¿©·¯ µµ±¸¿Í Perl
- 5 ÇÁ·Î±×·¥ÀÌ´Ù.</p>
- </li>
-
- <li>
- <strong>Proxy Throughput Round-Robin</strong>
-
- <p>ÀÌ ¹æ¹ýÀº <module>mod_rewrite</module>¿Í proxy
- throughput ±â´ÉÀ» »ç¿ëÇÑ´Ù. ¸ÕÀú DNS¿¡ ´ÙÀ½ Ç׸ñÀ»
- »ç¿ëÇÏ¿© <code>www0.foo.com</code>ÀÌ ½ÇÁ¦
- <code>www.foo.com</code>À» Àü´ãÇÏ°Ô ÇÑ´Ù</p>
-
-<example><pre>
-www IN CNAME www0.foo.com.
-</pre></example>
-
- <p>±×¸®°í <code>www0.foo.com</code>À» ÇÁ·Ï½ÃÀü¿ë
- ¼­¹ö·Î º¯°æÇÑ´Ù. Áï, URLÀ» ¹ÞÀ¸¸é ¼­¹ö´Â ³»ºÎ
- ÇÁ·Ï½Ã¸¦ ÅëÇØ ´Ù¸¥ 5´ë ¼­¹öÁß (<code>www1-www5</code>)
- ÇÑ´ë·Î º¸³»±â¸¸ ÇÑ´Ù. À̸¦ À§ÇØ ¸ÕÀú ¸ðµç URLÀ»
- ·Îµå¹ë·±½Ì ½ºÅ©¸³Æ® <code>lb.pl</code>·Î º¸³»´Â
- ±ÔÄ¢À» ¸¸µç´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap lb prg:/path/to/lb.pl
-RewriteRule ^/(.+)$ ${lb:$1} [P,L]
-</pre></example>
-
- <p><code>lb.pl</code>À» ÀÛ¼ºÇÑ´Ù:</p>
-
-<example><pre>
-#!/path/to/perl
-##
-## lb.pl -- ·Îµå¹ë·±½Ì ½ºÅ©¸³Æ®
-##
-
-$| = 1;
-
-$name = "www"; # ±âº» È£½ºÆ®¸í
-$first = 1; # ù¹ø° ¼­¹ö (ÀÚ½ÅÀÌ 0À̱⠶§¹®¿¡, 0À» »ç¿ëÇÏÁö ¾Ê´Â´Ù)
-$last = 5; # round-robin¿¡¼­ ¸¶Áö¸· ¼­¹ö
-$domain = "foo.dom"; # µµ¸ÞÀθí
-
-$cnt = 0;
-while (&lt;STDIN&gt;) {
- $cnt = (($cnt+1) % ($last+1-$first));
- $server = sprintf("%s%d.%s", $name, $cnt+$first, $domain);
- print "http://$server/$_";
-}
-
-##EOF##
-</pre></example>
-
- <note>¸¶Áö¸· ÁÖÀÇ: ¿Ö ÀÌ ¹æ¹ýÀÌ À¯¿ëÇÑ°¡?
- <code>www0.foo.com</code>¿¡ ºÎ´ãÀÌ °¡Áö¾Ê´Â°¡?
- ¹°·Ð, ºÎ´ãÀÌ µÈ´Ù. ±×·¯³ª ´Ü¼øÇÑ proxy throughput
- ¿äû¸¸ Çϱ⶧¹®¿¡ ±¦Âú´Ù! ¸ðµç SSI, CGI, ePerl
- µîÀº ÀüÀûÀ¸·Î ´Ù¸¥ ¼­¹ö°¡ ó¸®ÇÑ´Ù. ÀÌ°ÍÀÌ ÇÙ½ÉÀÌ´Ù.</note>
- </li>
-
- <li>
- <strong>Çϵå¿þ¾î/TCP Round-Robin</strong>
-
- <p>Çϵå¿þ¾î¸¦ »ç¿ëÇÑ ÇØ°áÃ¥µµ ÀÖ´Ù. Cisco´Â TCP/IP
- ¼öÁØ¿¡¼­ ·Îµå¹ë·±½ÌÀ» ÇÏ´Â LocalDirector¶ó´Â ±«¹°À»
- ÆÇ´Ù. ½ÇÁ¦·Î´Â À¥¼­¹ö±º ¾Õ´Ü¿¡ À§Ä¡ÇÏ´Â ÀÏÁ¾ÀÇ
- ȸ·Î¼öÁØ °ÔÀÌÆ®¿þÀÌ´Ù. ÀÚ±ÝÀÌ ÃæºÐÇÏ°í °í¼º´É
- ÇØ°áÃ¥ÀÌ ÇÊ¿äÇÏ´Ù¸é ÀÌ°ÍÀ» »ç¿ëÇ϶ó.</p>
- </li>
- </ol>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>»õ·Î¿î MIME-type, »õ·Î¿î ¼­ºñ½º</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>³×Æ®¿÷¿¡´Â ¸ÚÁø CGI ÇÁ·Î±×·¥µéÀÌ ¸¹´Ù. ±×·¯³ª »ç¿ëÇϱâ
- ¹ø°Å·¯¿ö¼­ ¸¹Àº À¥°ü¸®ÀÚ°¡ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ¾ÆÆÄÄ¡ÀÇ
- MIME-type¿¡ µû¸¥ Action Çڵ鷯 ±â´Éµµ CGI ÇÁ·Î±×·¥ÀÌ
- Ưº°ÇÑ URLÀ» (Á¤È®È÷ <code>PATH_INFO</code>¿Í
- <code>QUERY_STRINGS</code>) ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÏÁö
- ¾ÊÀ» ¶§¸¸ ÀûÀýÇÏ´Ù. ¸ÕÀú, È®ÀåÀÚ°¡ (secure CGI¸¦ ÁÙ¿©)
- <code>.scgi</code>ÀÎ ÆÄÀÏÀ» À¯¸íÇÑ <code>cgiwrap</code>
- ÇÁ·Î±×·¥À¸·Î ó¸®ÇϱâÀ§ÇØ »õ·Î¿î typeÀ» ¼³Á¤ÇÑ´Ù.
- ¹®Á¦´Â (À§¿¡¼­ º») ÀÏ°üµÈ URL ±¸Á¶¸¦ »ç¿ëÇÏ´Â °æ¿ì
- »ç¿ëÀÚ È¨µð·ºÅ丮°¡ <code>/u/user/foo/bar.scgi</code>°°Àº
- URLÀÎ Á¡ÀÌ´Ù. <code>cgiwrap</code>´Â
- <code>/~user/foo/bar.scgi/</code> Çü½ÄÀÇ URLÀ»
- ¿øÇϱ⶧¹®ÀÌ´Ù. ´ÙÀ½ ±ÔÄ¢ÀÌ ¹®Á¦¸¦ ÇØ°áÇÑ´Ù:</p>
-
-<example><pre>
-RewriteRule ^/[uge]/<strong>([^/]+)</strong>/\.www/(.+)\.scgi(.*) ...
-... /internal/cgi/user/cgiwrap/~<strong>$1</strong>/$2.scgi$3 [NS,<strong>T=application/x-http-cgi</strong>]
-</pre></example>
-
- <p>ÀÌÁ¦ ´Ù¸¥ ¸ÚÁø ÇÁ·Î±×·¥, (URL ÇÏÀ§Æ®¸®¿¡ ´ëÇÑ
- <code>access.log</code>¸¦ Ãâ·ÂÇÏ´Â) <code>wwwlog</code>¿Í
- (URL ÇÏÀ§Æ®¸®¿¡ Glimpse¸¦ ½ÇÇàÇÏ´Â) <code>wwwidx</code>°¡
- ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. ¿ì¸®´Â ÇÁ·Î±×·¥¿¡°Ô ÀÛ¾÷ÇÒ ´ë»óÀÎ
- URL ¿µ¿ªÀ» ¾Ë·ÁÁà¾ß ÇÑ´Ù. ±×·¯³ª ¿äûÇÒ¶§¸¶´Ù Ç×»ó
- Àû¾îÁà¾ß Çϱ⶧¹®¿¡ ±ò²ûÇÏÁö ¾Ê´Ù. Áï, º¸Åë
- <code>/u/user/foo/</code>¿¡ ´ëÇØ <code>swwidx</code>
- ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù¸é ´ÙÀ½°ú °°Àº ¸µÅ©¸¦ »ç¿ëÇÑ´Ù</p>
-
-<example><pre>
-/internal/cgi/user/swwidx?i=/u/user/foo/
-</pre></example>
-
- <p>±ò²ûÇÏÁö ¾Ê´Ù. ¸µÅ©¿¡ ¿µ¿ªÀÇ À§Ä¡<strong>¿Í</strong>
- CGI À§Ä¡¸¦ <strong>¸ðµÎ</strong> Àû¾î¾ß Çϱ⶧¹®ÀÌ´Ù.
- ¿µ¿ªÀ» À籸¼ºÇÑ´Ù¸é ¿©·¯ ÇÏÀÌÆÛ¸µÅ©¸¦ ¼öÁ¤Çϴµ¥ ¸¹Àº
- ½Ã°£ÀÌ °É¸± °ÍÀÌ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÇØ°áÃ¥Àº ÀÚµ¿À¸·Î ÀûÀýÇÑ CGI¸¦ ½ÇÇàÇÏ´Â »õ·Î¿î
- Ưº°ÇÑ URL Çü½ÄÀ» ¸¸µå´Â °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
-<example><pre>
-RewriteRule ^/([uge])/([^/]+)(/?.*)/\* /internal/cgi/user/wwwidx?i=/$1/$2$3/
-RewriteRule ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3
-</pre></example>
-
- <p>ÀÌÁ¦ <code>/u/user/foo/</code>À» °Ë»öÇÏ´Â ¸µÅ©´Â
- ´ÙÀ½°ú °°´Ù</p>
-
-<example><pre>
-HREF="*"
-/u/user/foo/* (???)
-</pre></example>
-
- <p>³»ºÎÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÀÚµ¿º¯È¯µÈ´Ù</p>
-
-<example><pre>
-/internal/cgi/user/wwwidx?i=/u/user/foo/
-</pre></example>
-
- <p>°°Àº ¹æ¹ýÀ¸·Î ¸µÅ© µÚ¿¡ <code>:log</code>¸¦ »ç¿ëÇÏ¿©
- Á¢±Ù ·Î±× CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Á¤Àû¿¡¼­ µ¿ÀûÀ¸·Î</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô ºê¶ó¿ìÀú¿Í »ç¿ëÀÚ°¡ ¸ð¸£°Ô ÀÚ¿¬½º·´°Ô Á¤Àû
- ÆäÀÌÁö <code>foo.html</code>À» µ¿ÀûÀÎ <code>foo.cgi</code>·Î
- º¯°æÇÒ ¼ö ÀÖ³ª.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>URLÀ» CGI ½ºÅ©¸³Æ®·Î ÀçÀÛ¼ºÇÏ°í, MIME-typeÀ» ¼öÁ¤ÇÏ¿©
- CGI ½ºÅ©¸³Æ®·Î ½ÇÇàÇÏ°Ô ÇÑ´Ù. ±×·¡¼­
- <code>/~quux/foo.html</code>¸¦ ¿äûÇÏ¸é ³»ºÎÀûÀ¸·Î
- <code>/~quux/foo.cgi</code>¸¦ ½ÇÇàÇÏ°Ô µÈ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteBase /~quux/
-RewriteRule ^foo\.<strong>html</strong>$ foo.<strong>cgi</strong> [T=<strong>application/x-httpd-cgi</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Áï¼® ÄÁÅÙÃ÷ Àç»ý¼º</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>ÀÌ ¹æ¹ýÀº ½Ç·Î ºñ±âÀÌ´Ù: µ¿ÀûÀ¸·Î ÆäÀÌÁö¸¦ »ý¼ºÇÏÁö¸¸,
- Á¤ÀûÀ¸·Î ÆäÀÌÁö¸¦ ¼­ºñ½ºÇÑ´Ù. Áï, ÆäÀÌÁö´Â ¼ø¼öÇÏ°Ô
- (ÆÄÀϽýºÅÛ¿¡¼­ ÀÐÀº ³»¿ëÀ» ±×´ë·Î) Á¤Àû ÆäÀÌÁö·Î
- Àü´ÞµÇÁö¸¸, ¾øÀ» °æ¿ì À¥¼­¹ö°¡ µ¿ÀûÀ¸·Î »ý¼ºÇÑ´Ù.
- ±×·¯¸é ´©°¡ (ȤÀº cron ÀÛ¾÷ÀÌ) Á¤Àû ÄÁÅÙÃ÷¸¦ Áö¿ìÁö¾Ê´Â
- ÇÑ CGI°¡ »ý¼ºÇÑ ÆäÀÌÁö¸¦ Á¤ÀûÀ¸·Î ¼­ºñ½ºÇÑ´Ù. ÄÁÅÙÃ÷¸¦
- Áö¿ì¸é ³»¿ëÀ» °»½ÅÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÑ´Ù:
-
-<example><pre>
-RewriteCond %{REQUEST_FILENAME} <strong>!-s</strong>
-RewriteRule ^page\.<strong>html</strong>$ page.<strong>cgi</strong> [T=application/x-httpd-cgi,L]
-</pre></example>
-
- <p>¿©±â¼­ <code>page.html</code>¸¦ ¿äûÇÒ¶§
- <code>page.html</code>ÀÌ ¾ø°Å³ª ÆÄÀÏÅ©±â°¡ 0ÀÎ °æ¿ì
- ³»ºÎÀûÀ¸·Î <code>page.cgi</code>¸¦ ½ÇÇàÇÑ´Ù. ¿©±â¼­
- ºñ°áÀº <code>page.cgi</code>°¡ ÀϹÝÀûÀÎ CGI ½ºÅ©¸³Æ®¿Í
- °°ÀÌ <code>STDOUT</code>¿¡ Ãâ·ÂÇÏ°í, Ãß°¡·Î Ãâ·ÂÀ»
- <code>page.html</code> ÆÄÀÏ¿¡ Àû´Â´Ù. Çѹø ½ÇÇàÇÑÈÄ
- ¼­¹ö´Â <code>page.html</code>ÀÇ Á¤º¸¸¦ º¸³½´Ù. À¥°ü¸®ÀÚ°¡
- °­Àç·Î ³»¿ëÀ» °»½ÅÇÏ°í ½Í´Ù¸é, (º¸Åë cron ÀÛ¾÷ÀÌ)
- <code>page.html</code>À» Áö¿ì±â¸¸ ÇÏ¸é µÈ´Ù.</p>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>ÀÚµ¿À¸·Î »õ·Î °íħÇÏ´Â ¹®¼­</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>º¹ÀâÇÑ À¥ÆäÀÌÁö¸¦ ¸¸µé¶§ ÆíÁýÀÚ°¡ ³»¿ëÀ» ¼öÁ¤ÇÒ
- ¶§¸¶´Ù ÀÚµ¿À¸·Î ÆäÀÌÁö¸¦ »õ·Î °íħÇÏ´Â À¥ºê¶ó¿ìÀú°¡
- ÀÖÀ¸¸é ¾ó¸¶³ª ÁÁÀ»±î? ºÒ°¡´ÉÇÑ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>°¡´ÉÇÏ´Ù! MIME multipart ±â´É°ú À¥¼­¹ö NPH ±â´É,
- <module>mod_rewrite</module>ÀÇ URL Á¶ÀÛ ´É·ÂÀ» °áÇÕÇϸé
- µÈ´Ù. ¸ÕÀú, »õ·Î¿î URL ±â´ÉÀ» ¸¸µç´Ù: URL¿¡
- <code>:refresh</code>¸¦ Ãß°¡Çϱ⸸ Çϸé ÆÄÀϽýºÅÛ¿¡¼­
- ¼öÁ¤µÉ ¶§¸¶´Ù »õ·Î °íħÇÑ´Ù.</p>
-
-<example><pre>
-RewriteRule ^(/[uge]/[^/]+/?.*):refresh /internal/cgi/apache/nph-refresh?f=$1
-</pre></example>
-
- <p>ÀÌÁ¦ ´ÙÀ½ URL¿¡ Á¢±ÙÇϸé</p>
-
-<example><pre>
-/u/foo/bar/page.html:refresh
-</pre></example>
-
- <p>´ÙÀ½ URLÀ» ³»ºÎÀûÀ¸·Î ºÎ¸¥´Ù</p>
-
-<example><pre>
-/internal/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
-</pre></example>
-
- <p>ÀÌÁ¦ NPH-CGI ½ºÅ©¸³Æ®¸¸ ³²¾Ò´Ù. º¸Åë "µ¶ÀÚ¿¡°Ô
- ¿¬½ÀÀ¸·Î ³²°ÜµÒ"À̶ó°í ¸»ÇÏÁö¸¸ ;-) ³ª´Â À̰͵µ Á¦°øÇÑ´Ù.</p>
-
-<example><pre>
-#!/sw/bin/perl
-##
-## nph-refresh -- NPH/CGI script for auto refreshing pages
-## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
-##
-$| = 1;
-
-# split the QUERY_STRING variable
-@pairs = split(/&amp;/, $ENV{'QUERY_STRING'});
-foreach $pair (@pairs) {
- ($name, $value) = split(/=/, $pair);
- $name =~ tr/A-Z/a-z/;
- $name = 'QS_' . $name;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- eval "\$$name = \"$value\"";
-}
-$QS_s = 1 if ($QS_s eq '');
-$QS_n = 3600 if ($QS_n eq '');
-if ($QS_f eq '') {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: No file given\n";
- exit(0);
-}
-if (! -f $QS_f) {
- print "HTTP/1.0 200 OK\n";
- print "Content-type: text/html\n\n";
- print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: File $QS_f not found\n";
- exit(0);
-}
-
-sub print_http_headers_multipart_begin {
- print "HTTP/1.0 200 OK\n";
- $bound = "ThisRandomString12345";
- print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
- &amp;print_http_headers_multipart_next;
-}
-
-sub print_http_headers_multipart_next {
- print "\n--$bound\n";
-}
-
-sub print_http_headers_multipart_end {
- print "\n--$bound--\n";
-}
-
-sub displayhtml {
- local($buffer) = @_;
- $len = length($buffer);
- print "Content-type: text/html\n";
- print "Content-length: $len\n\n";
- print $buffer;
-}
-
-sub readfile {
- local($file) = @_;
- local(*FP, $size, $buffer, $bytes);
- ($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
- $size = sprintf("%d", $size);
- open(FP, "&amp;lt;$file");
- $bytes = sysread(FP, $buffer, $size);
- close(FP);
- return $buffer;
-}
-
-$buffer = &amp;readfile($QS_f);
-&amp;print_http_headers_multipart_begin;
-&amp;displayhtml($buffer);
-
-sub mystat {
- local($file) = $_[0];
- local($time);
-
- ($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
- return $mtime;
-}
-
-$mtimeL = &amp;mystat($QS_f);
-$mtime = $mtime;
-for ($n = 0; $n &amp;lt; $QS_n; $n++) {
- while (1) {
- $mtime = &amp;mystat($QS_f);
- if ($mtime ne $mtimeL) {
- $mtimeL = $mtime;
- sleep(2);
- $buffer = &amp;readfile($QS_f);
- &amp;print_http_headers_multipart_next;
- &amp;displayhtml($buffer);
- sleep(5);
- $mtimeL = &amp;mystat($QS_f);
- last;
- }
- sleep($QS_s);
- }
-}
-
-&amp;print_http_headers_multipart_end;
-
-exit(0);
-
-##EOF##
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>´ë·®ÀÇ °¡»óÈ£½ºÆ®</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>°¡»óÈ£½ºÆ®°¡ ¸î°³¸¸ ÀÖ´Ù¸é ¾ÆÆÄÄ¡ÀÇ <directive
- type="section" module="core">VirtualHost</directive>
- ±â´ÉÀÌ Àß µ¿ÀÛÇÑ´Ù. ±×·¯³ª °¡»óÈ£½ºÆ®°¡ ¼ö¹é°³ ÀÖ´Â
- ISP¶ó¸é ÀÌ ±â´ÉÀÌ ÃÖ¼±Àº ¾Æ´Ï´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>ÀÌ ±â´ÉÀ» Á¦°øÇÏ·Á¸é <dfn>Proxy Throughput</dfn>
- ±â´ÉÀ» (Ç÷¡±× <code>[P]</code>) »ç¿ëÇÏ¿© ¿ÜºÎ À¥ÆäÀÌÁö
- ȤÀº Àüü ¿ÜºÎ À¥¿µ¿ªÀ» ¿ì¸®ÀÇ À̸§°ø°£¿¡ ´ëÀÀÇÑ´Ù:</p>
-
-<example><pre>
-##
-## vhost.map
-##
-www.vhost1.dom:80 /path/to/docroot/vhost1
-www.vhost2.dom:80 /path/to/docroot/vhost2
- :
-www.vhostN.dom:80 /path/to/docroot/vhostN
-</pre></example>
-
-<example><pre>
-##
-## httpd.conf
-##
- :
-# ¸®´ÙÀÌ·ºÆ®ÇÒ¶§ Á¤±Ô È£½ºÆ®¸íÀ» »ç¿ëÇÑ´Ù.
-UseCanonicalName on
-
- :
-# °¡»óÈ£½ºÆ®¸¦ CLF Çü½Ä ¾Õ¿¡ Ãß°¡ÇÑ´Ù
-CustomLog /path/to/access_log "%{VHOST}e %h %l %u %t \"%r\" %&gt;s %b"
- :
-
-# ÁÖ¼­¹ö¿¡¼­ ÀçÀÛ¼º ¿£ÁøÀ» »ç¿ëÇÑ´Ù
-RewriteEngine on
-
-# µÎ ¸ÊÀ» Á¤ÀÇÇÑ´Ù: Çϳª´Â URLÀ» °íÄ¡°í,
-# ´Ù¸¥ Çϳª´Â °¡»óÈ£½ºÆ®º° DocumentRoot¸¦
-# Á¤ÀÇÇÑ´Ù.
-RewriteMap lowercase int:tolower
-RewriteMap vhost txt:/path/to/vhost.map
-
-# ÀÌÁ¦ Å©°í º¹ÀâÇÑ ±ÔÄ¢ ÇÑ°³¸¦ »ç¿ëÇÏ¿©
-# °¡»óÈ£½ºÆ®·Î ´ëÀÀÇÑ´Ù.
-#
-# 1. °¡»óÈ£½ºÆ®µéÀÌ °°ÀÌ »ç¿ëÇÏ´Â À§Ä¡´Â ´ëÀÀÇÏÁö ¾Ê´Â´Ù
-RewriteCond %{REQUEST_URL} !^/commonurl1/.*
-RewriteCond %{REQUEST_URL} !^/commonurl2/.*
- :
-RewriteCond %{REQUEST_URL} !^/commonurlN/.*
-#
-# 2. ¿ì¸®°¡ ÇöÀç »ç¿ëÇÏ´Â ¹æ¹ýÀÌ Host Çì´õ¸¦
-# °¡»óÈ£½ºÆ®¸¦ Áö¿øÇϹǷÎ
-# Host Çì´õ°¡ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù
-RewriteCond %{HTTP_HOST} !^$
-#
-# 3. È£½ºÆ®¸íÀ» ¼Ò¹®ÀÚ·Î ¸¸µç´Ù
-RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
-#
-# 4. vhost.map¿¡¼­ È£½ºÆ®¸íÀ» ã°í
-# °æ·ÎÀ϶§¸¸ ±â¾ïÇÑ´Ù
-# (À§¿¡¼­ "NONE"Àº ¾Æ´Ï´Ù)
-RewriteCond ${vhost:%1} ^(/.*)$
-#
-# 5. ¸¶Áö¸·À¸·Î URLÀ» ¹®¼­ À§Ä¡·Î ´ëÀÀÇÏ°í
-# ·Î±×¿¡ ³²±â±âÀ§ÇØ °¡»óÈ£½ºÆ®¸¦ ±â¾ïÇØ µÐ´Ù
-RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
- :
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
- <section id="access">
-
- <title>Á¢±Ù Á¦ÇÑ</title>
-
- <section>
-
- <title>·Îº¿ ¸·±â</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô Çϸé ƯÁ¤ À¥°ø°£ÀÇ ÆäÀÌÁö¸¦ ±Ü¾î¸ðÀ¸´Â ±ÍÂúÀº
- ·Îº¿À» ¸·À» ¼ö ÀÖ³ª? "Robot Exclusion Protocol" Ç׸ñÀ»
- ÀúÀåÇÑ <code>/robots.txt</code> ÆÄÀÏÀº º¸Åë ÀÌ·± ·Îº¿À»
- ¸·´Âµ¥ ÃæºÐÇÏÁö ¾Ê´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>(¾Æ¸¶µµ µð·ºÅ丮°¡ ±í¾î¼­ ·Îº¿ÀÌ µ¹¾Æ´Ù´Ï¸é ¼­¹ö¿¡
- ºÎ´ãÀÌ Å« °æ¿ì) À¥°ø°£ <code>/~quux/foo/arc/</code>¿¡
- ÀÖ´Â URLµéÀ» °ÅºÎÇÏ´Â ±ÔÄ¢À» »ç¿ëÇÑ´Ù. ¿ì¸®´Â ƯÁ¤
- ·Îº¿ÀÇ Á¢±ÙÀ» ¸·¾Æ¾ß ÇÑ´Ù. Áï, ·Îº¿À» ½ÇÇàÇϴ ȣ½ºÆ®¸¦
- ¸·´Â °ÍÀ¸·Î´Â ºÒÃæºÐÇϸç, ±× È£½ºÆ®ÀÇ »ç¿ëÀÚµµ ¸·¾Æ¹ö¸®°Ô
- µÈ´Ù. User-Agent HTTP Çì´õ Á¤º¸µµ ºñ±³ÇÑ´Ù.</p>
-
-<example><pre>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>NameOfBadRobot</strong>.*
-RewriteCond %{REMOTE_ADDR} ^<strong>123\.45\.67\.[8-9]</strong>$
-RewriteRule ^<strong>/~quux/foo/arc/</strong>.+ - [<strong>F</strong>]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>±×¸² ÆÛ°¡±â ¹æÁö</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p><code>http://www.quux-corp.de/~quux/</code>¿¡ ÀÖ´Â
- ÆäÀÌÁöµéÀÌ GIF ±×¸²À» Æ÷ÇÔÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ ±×¸²ÀÌ
- ¸ÚÀ־, ´Ù¸¥ »ç¶÷µéÀÌ ÀÚ½ÅÀÇ ÆäÀÌÁö¿¡ Á÷Á¢ ¸µÅ©¸¦
- °Ç´Ù. ¼­¹ö¿¡ ºÒÇÊ¿äÇÑ ºÎ´ãÀÌ µÇ¹Ç·Î ¸·°í ½Í´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>±×¸²À» 100% º¸È£ÇÒ ¼ö´Â ¾øÁö¸¸, ÃÖ¼ÒÇÑ ºê¶ó¿ìÀú°¡
- HTTP Referer Çì´õ¸¦ º¸³»´Â °æ¿ì Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.</p>
-
-<example><pre>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong>
-RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
-RewriteRule <strong>.*\.gif$</strong> - [F]
-</pre></example>
-
-<example><pre>
-RewriteCond %{HTTP_REFERER} !^$
-RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
-RewriteRule <strong>^inlined-in-foo\.gif$</strong> - [F]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>È£½ºÆ® °ÅºÎ</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô ¿ÜºÎ¿¡¼­ ¼­¹ö¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Â È£½ºÆ® ¸ñ·ÏÀ»
- ¼³Á¤ÇÒ ¼ö ÀÖ³ª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¾ÆÆÄÄ¡ &gt;= 1.3b6¿¡¼­:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
-RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^/.* - [F]
-</pre></example>
-
- <p>¾ÆÆÄÄ¡ &lt;= 1.3b6¿¡¼­:</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap hosts-deny txt:/path/to/hosts.deny
-RewriteRule ^/(.*)$ ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}/$1
-RewriteRule !^NOT-FOUND/.* - [F]
-RewriteRule ^NOT-FOUND/(.*)$ /$1
-</pre></example>
-
-<example><pre>
-##
-## hosts.deny
-##
-## ÁÖÀÇ! ÀÌ°ÍÀº ¸ñ·Ïó·³ º¸ÀÌÁö¸¸ ¸ñ·ÏÀÌ ¾Æ´Ï¶ó ¸ÊÀÌ´Ù.
-## mod_rewrite´Â ÀÌ Á¤º¸¸¦ Å°/°ª ½ÖÀ¸·Î Çؼ®Çϱ⶧¹®¿¡,
-## °¢ Ç׸ñÀÇ °ª ÀÚ¸®¿¡ ÃÖ¼ÒÇÑ "-"°¡ ÇÊ¿äÇÏ´Ù.
-##
-
-193.102.180.41 -
-bsdti1.sdm.de -
-192.76.162.40 -
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>ÇÁ·Ï½Ã °ÅºÎ</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>¾î¶»°Ô ƯÁ¤ È£½ºÆ® ȤÀº ƯÁ¤ È£½ºÆ®ÀÇ »ç¿ëÀÚ°¡
- ¾ÆÆÄÄ¡ ÇÁ·Ï½Ã¸¦ »ç¿ëÇÒ ¼ö ¾øµµ·Ï Çϳª?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¸ÕÀú ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§ ±¸¼ºÆÄÀÏ¿¡¼­
- <module>mod_rewrite</module>°¡ <module>mod_proxy</module>
- ¾Æ·¡¿¡(!) ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯¸é <module>mod_rewrite</module>´Â
- <module>mod_proxy</module> <em>ÀÌÀü¿¡</em> ºÒ¸°´Ù.
- ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ Æ¯Á¤ È£½ºÆ®¸¦ °ÅºÎÇϵµ·Ï ¼³Á¤ÇÑ´Ù...</p>
-
-<example><pre>
-RewriteCond %{REMOTE_HOST} <strong>^badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></example>
-
- <p>...±×¸®°í ´ÙÀ½Àº user@host¿¡ µû¶ó °ÅºÎÇÑ´Ù:</p>
-
-<example><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>^badguy@badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.* - [F]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Ưº°ÇÑ ÀÎÁõ ¹æ½Ä</title>
-
- <dl>
- <dt>»óÈ°¼³¸í:</dt>
-
- <dd>
- <p>°¡²û ¸Å¿ì Ưº°ÇÑ ÀÎÁõÀÌ ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Ù. ¿¹¸¦
- µé¾î, ¹Ì¸® ¼³Á¤ÇصР»ç¿ëÀÚÀÎÁö °Ë»çÇÑ´Ù. À̵鿡°Ô¸¸
- (<module>mod_auth_basic</module>ÀÇ Basic Auth¸¦ »ç¿ëÇÑ
- °æ¿ì¿Í ´Þ¸®) º°´Ù¸¥ ¹°À½¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>Ä£±¸¸¸ Á¢±ÙÀÌ °¡´ÉÇϵµ·Ï ÀçÀÛ¼º ±ÔÄ¢µéÀ» »ç¿ëÇÑ´Ù:</p>
-
-<example><pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend1@client1.quux-corp\.com$</strong>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend2</strong>@client2.quux-corp\.com$
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend3</strong>@client3.quux-corp\.com$
-RewriteRule ^/~quux/only-for-friends/ - [F]
-</pre></example>
- </dd>
- </dl>
-
- </section>
-
- <section>
-
- <title>Referer±â¹Ý º¯È¯±â(deflector)</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>"Referer" HTTP Çì´õ¿¡ µû¶ó ¿øÇϴ´ë·Î ÂüÁ¶ÆäÀÌÁö¸¦
- ¼³Á¤ÇÒ ¼ö ÀÖ´Â À¯¿¬ÇÑ URL º¯È¯±â¸¦ ¸¸µé ¼ö Àִ°¡?</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>´ÙÀ½°ú °°ÀÌ º¹ÀâÇÑ ±ÔÄ¢À»...</p>
-
-<example><pre>
-RewriteMap deflector txt:/path/to/deflector.map
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}} ^-$
-RewriteRule ^.* %{HTTP_REFERER} [R,L]
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^.* ${deflector:%{HTTP_REFERER}} [R,L]
-</pre></example>
-
- <p>... ÀçÀÛ¼º ¸Ê°ú °°ÀÌ »ç¿ëÇÑ´Ù:</p>
-
-<example><pre>
-##
-## deflector.map
-##
-
-http://www.badguys.com/bad/index.html -
-http://www.badguys.com/bad/index2.html -
-http://www.badguys.com/bad/index3.html http://somewhere.com/
-</pre></example>
-
- <p>±×·¯¸é ¿äûÀ» ÀÚµ¿À¸·Î (¸Ê¿¡¼­ °ªÀ¸·Î "<code>-</code>"¸¦
- »ç¿ëÇÑ °æ¿ì) ÂüÁ¶ÆäÀÌÁö³ª (URLÀÌ ¸Ê¿¡ ÀÖ´Â °æ¿ì µÎ¹ø°
- ¾Æ±Ô¸ÕÆ®·Î) ƯÁ¤ URL·Î ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.</p>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
- <section id="other">
-
- <title>±âŸ</title>
-
- <section>
-
- <title>¿ÜºÎ ÀçÀÛ¼º ¿£Áø</title>
-
- <dl>
- <dt>»óȲ¼³¸í:</dt>
-
- <dd>
- <p>FAQ: ¾î¶»°Ô ÀÌ·±Àú·± Àâ´ÙÇÑ ¹®Á¦¸¦ Ç® ¼ö Àִ°¡?
- <module>mod_rewrite</module>·Î´Â ÇØ°áÃ¥ÀÌ ¾Èº¸ÀδÙ...</p>
- </dd>
-
- <dt>ÇØ°áÃ¥:</dt>
-
- <dd>
- <p>¿ÜºÎ <directive
- module="mod_rewrite">RewriteMap</directive>À» »ç¿ëÇ϶ó.
- Áï, ÇÁ·Î±×·¥ÀÌ <directive
- module="mod_rewrite">RewriteMap</directive> ¿ªÇÒÀ»
- ÇÑ´Ù. ÇÁ·Î±×·¥Àº ¾ÆÆÄÄ¡°¡ ½ÃÀÛÇÒ¶§ ½ÃÀÛÇÏ¿©
- <code>STDIN</code>¿¡¼­ ¿äûÇÑ URLÀ» ¹Þ°í, (°°Àº ¼ø¼­·Î!)
- °á°ú (º¸Åë ÀçÀÛ¼ºµÈ) URLÀ» <code>STDOUT</code>¿¡ Ãâ·ÂÇÑ´Ù.</p>
-
-<example><pre>
-RewriteEngine on
-RewriteMap quux-map <strong>prg:</strong>/path/to/map.quux.pl
-RewriteRule ^/~quux/(.*)$ /~quux/<strong>${quux-map:$1}</strong>
-</pre></example>
-
-<example><pre>
-#!/path/to/perl
-
-# ¾ÆÆÄÄ¡ ¼­¹ö°¡ ¸ØÃßÁö ¾Êµµ·Ï
-# ÀÔÃâ·Â ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù
-$| = 1;
-
-# stdin¿¡¼­ ÇÑÁÙ¾¿ URLÀ» Àаí
-# stdout¿¡ º¯È¯ÇÑ URLÀ» Ãâ·ÂÇÑ´Ù
-while (&lt;&gt;) {
- s|^foo/|bar/|;
- print $_;
-}
-</pre></example>
-
- <p>¼³¸íÇϱâÀ§ÇØ ¸ðµç <code>/~quux/foo/...</code> URLÀ»
- <code>/~quux/bar/...</code>·Î ÀçÀÛ¼ºÇÏ´Â ½ºÅ©¸³Æ®¸¦
- ¿¹·Î µé¾ú´Ù. ½ÇÁ¦·Î ¸¶À½´ë·Î ÇÁ·Î±×·¡¹ÖÇÒ ¼ö ÀÖ´Ù.
- ±×·¯³ª ÀÏ¹Ý »ç¿ëÀÚ°¡ ÀÌ·± ¸ÊÀ» <strong>»ç¿ëÇÒ</strong>
- ¼ö ÀÖ´Ù°í ÇÏ´õ¶ó°í, ¿ÀÁ÷ ½Ã½ºÅÛ °ü¸®ÀÚ¸¸ÀÌ ¸ÊÀ»
- <strong>Á¤ÀÇÇؾß</strong> ÇÔÀ» ÁÖÀÇÇ϶ó.</p>
- </dd>
- </dl>
-
- </section>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/misc/rewriteguide.xml.meta b/docs/manual/misc/rewriteguide.xml.meta
deleted file mode 100644
index fdc8e22705..0000000000
--- a/docs/manual/misc/rewriteguide.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>rewriteguide</basename>
- <path>/misc/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/misc/security_tips.html b/docs/manual/misc/security_tips.html
deleted file mode 100644
index 3746e186a7..0000000000
--- a/docs/manual/misc/security_tips.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: security_tips.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: security_tips.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/misc/security_tips.html.en b/docs/manual/misc/security_tips.html.en
deleted file mode 100644
index 909fa511c4..0000000000
--- a/docs/manual/misc/security_tips.html.en
+++ /dev/null
@@ -1,350 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Security Tips - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>Security Tips</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/misc/security_tips.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Some hints and tips on security issues in setting up a web server.
- Some of the suggestions will be general, others specific to Apache.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#uptodate">Keep up to Date</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">Permissions on ServerRoot Directories</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Server Side Includes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI in General</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#nsaliasedcgi">Non Script Aliased CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#saliasedcgi">Script Aliased CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#dynamic">Other sources of dynamic content</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#systemsettings">Protecting System Settings</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#protectserverfiles">Protect Server Files by Default</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#watchyourlogs">Watching Your Logs</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="uptodate" id="uptodate">Keep up to Date</a></h2>
-
- <p>The Apache HTTP Server has a good record for security and a
- developer community highly concerned about security issues. But
- it is inevitable that some problems -- small or large -- will be
- discovered in software after it is released. For this reason, it
- is crucial to keep aware of updates to the software. If you have
- obtained your version of the HTTP Server directly from Apache, we
- highly recommend you subscribe to the <a href="http://httpd.apache.org/lists.html#http-announce">Apache
- HTTP Server Announcements List</a> where you can keep informed of
- new releases and security updates. Similar services are available
- from most third-party distributors of Apache software.</p>
-
- <p>Of course, most times that a web server is compromised, it is
- not because of problems in the HTTP Server code. Rather, it comes
- from problems in add-on code, CGI scripts, or the underlying
- Operating System. You must therefore stay aware of problems and
- updates with all the software on your system.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="serverroot" id="serverroot">Permissions on ServerRoot Directories</a></h2>
-
-
-
- <p>In typical operation, Apache is started by the root user, and it
- switches to the user defined by the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> directive to serve hits. As is the
- case with any command that root executes, you must take care that it is
- protected from modification by non-root users. Not only must the files
- themselves be writeable only by root, but so must the directories, and
- parents of all directories. For example, if you choose to place
- ServerRoot in /usr/local/apache then it is suggested that you create
- that directory as root, with commands like these:</p>
-
- <div class="example"><p><code>
- mkdir /usr/local/apache <br />
- cd /usr/local/apache <br />
- mkdir bin conf logs <br />
- chown 0 . bin conf logs <br />
- chgrp 0 . bin conf logs <br />
- chmod 755 . bin conf logs
- </code></p></div>
-
- <p>It is assumed that /, /usr, and /usr/local are only modifiable by
- root. When you install the httpd executable, you should ensure that
- it is similarly protected:</p>
-
- <div class="example"><p><code>
- cp httpd /usr/local/apache/bin <br />
- chown 0 /usr/local/apache/bin/httpd <br />
- chgrp 0 /usr/local/apache/bin/httpd <br />
- chmod 511 /usr/local/apache/bin/httpd
- </code></p></div>
-
- <p>You can create an htdocs subdirectory which is modifiable by other
- users -- since root never executes any files out of there, and shouldn't
- be creating files in there.</p>
-
- <p>If you allow non-root users to modify any files that root either
- executes or writes on then you open your system to root compromises.
- For example, someone could replace the httpd binary so that the next
- time you start it, it will execute some arbitrary code. If the logs
- directory is writeable (by a non-root user), someone could replace
- a log file with a symlink to some other system file, and then root
- might overwrite that file with arbitrary data. If the log files
- themselves are writeable (by a non-root user), then someone may be
- able to overwrite the log itself with bogus data.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">Server Side Includes</a></h2>
-
-
-
- <p>Server Side Includes (SSI) present a server administrator with
- several potential security risks.</p>
-
- <p>The first risk is the increased load on the server. All
- SSI-enabled files have to be parsed by Apache, whether or not
- there are any SSI directives included within the files. While this
- load increase is minor, in a shared server environment it can become
- significant.</p>
-
- <p>SSI files also pose the same risks that are associated with CGI
- scripts in general. Using the "exec cmd" element, SSI-enabled files
- can execute any CGI script or program under the permissions of the
- user and group Apache runs as, as configured in httpd.conf.</p>
-
- <p>There are ways to enhance the security of SSI files while still
- taking advantage of the benefits they provide.</p>
-
- <p>To isolate the damage a wayward SSI file can cause, a server
- administrator can enable <a href="../suexec.html">suexec</a> as
- described in the <a href="#cgi">CGI in General</a> section</p>
-
- <p>Enabling SSI for files with .html or .htm extensions can be
- dangerous. This is especially true in a shared, or high traffic,
- server environment. SSI-enabled files should have a separate extension,
- such as the conventional .shtml. This helps keep server load at a
- minimum and allows for easier management of risk.</p>
-
- <p>Another solution is to disable the ability to run scripts and
- programs from SSI pages. To do this replace <code>Includes</code>
- with <code>IncludesNOEXEC</code> in the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive. Note that users may
- still use &lt;--#include virtual="..." --&gt; to execute CGI scripts if
- these scripts are in directories desginated by a <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> directive.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">CGI in General</a></h2>
-
-
-
- <p>First of all, you always have to remember that you must trust the
- writers of the CGI scripts/programs or your ability to spot potential
- security holes in CGI, whether they were deliberate or accidental. CGI
- scripts can run essentially arbitrary commands on your system with the
- permissions of the web server user and can therefore be extremely
- dangerous if they are not carefully checked.</p>
-
- <p>All the CGI scripts will run as the same user, so they have potential
- to conflict (accidentally or deliberately) with other scripts e.g. User
- A hates User B, so he writes a script to trash User B's CGI database. One
- program which can be used to allow scripts to run as different users is
- <a href="../suexec.html">suEXEC</a> which is included with Apache as of
- 1.2 and is called from special hooks in the Apache server code. Another
- popular way of doing this is with
- <a href="http://cgiwrap.unixtools.org/">CGIWrap</a>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="nsaliasedcgi" id="nsaliasedcgi">Non Script Aliased CGI</a></h2>
-
-
-
- <p>Allowing users to execute CGI scripts in any directory should only be
- considered if:</p>
-
- <ul>
- <li>You trust your users not to write scripts which will deliberately
- or accidentally expose your system to an attack.</li>
- <li>You consider security at your site to be so feeble in other areas,
- as to make one more potential hole irrelevant.</li>
- <li>You have no users, and nobody ever visits your server.</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="saliasedcgi" id="saliasedcgi">Script Aliased CGI</a></h2>
-
-
-
- <p>Limiting CGI to special directories gives the admin control over what
- goes into those directories. This is inevitably more secure than non
- script aliased CGI, but only if users with write access to the
- directories are trusted or the admin is willing to test each
- new CGI script/program for potential security holes.</p>
-
- <p>Most sites choose this option over the non script aliased CGI
- approach.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dynamic" id="dynamic">Other sources of dynamic content</a></h2>
-
-
-
- <p>
- Embedded scripting options which run as part of the server itself,
- such as mod_php, mod_perl, mod_tcl, and mod_python, run under the
- identity of the server itself (see the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> directive), and therefore
- scripts executed by these engines potentially can access anything the
- server user can. Some scripting engines may provide restrictions, but
- it is better to be safe and assume not.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="systemsettings" id="systemsettings">Protecting System Settings</a></h2>
-
-
-
- <p>To run a really tight ship, you'll want to stop users from setting
- up <code>.htaccess</code> files which can override security features
- you've configured. Here's one way to do it.</p>
-
- <p>In the server configuration file, put</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt; <br />
- AllowOverride None <br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>This prevents the use of <code>.htaccess</code> files in all
- directories apart from those specifically enabled.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="protectserverfiles" id="protectserverfiles">Protect Server Files by Default</a></h2>
-
-
-
- <p>One aspect of Apache which is occasionally misunderstood is the
- feature of default access. That is, unless you take steps to change it,
- if the server can find its way to a file through normal URL mapping
- rules, it can serve it to clients.</p>
-
- <p>For instance, consider the following example:</p>
-
- <div class="example"><p><code>
- # cd /; ln -s / public_html <br />
- Accessing <code>http://localhost/~root/</code>
- </code></p></div>
-
- <p>This would allow clients to walk through the entire filesystem. To
- work around this, add the following block to your server's
- configuration:</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt; <br />
- Order Deny,Allow <br />
- Deny from all <br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>This will forbid default access to filesystem locations. Add
- appropriate <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> blocks to
- allow access only in those areas you wish. For example,</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/users/*/public_html&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt; <br />
- &lt;Directory /usr/local/httpd&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Pay particular attention to the interactions of <code class="directive"><a href="../mod/core.html#location">Location</a></code> and <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> directives; for instance, even
- if <code>&lt;Directory /&gt;</code> denies access, a <code>
- &lt;Location /&gt;</code> directive might overturn it</p>
-
- <p>Also be wary of playing games with the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive; setting it to
- something like "./" would have the same effect, for root, as the first
- example above. If you are using Apache 1.3 or above, we strongly
- recommend that you include the following line in your server
- configuration files:</p>
-
- <div class="example"><p><code>
- UserDir disabled root
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="watchyourlogs" id="watchyourlogs">Watching Your Logs</a></h2>
-
-
-
- <p>To keep up-to-date with what is actually going on against your server
- you have to check the <a href="../logs.html">Log Files</a>. Even though
- the log files only reports what has already happened, they will give you
- some understanding of what attacks is thrown against the server and
- allows you to check if the necessary level of security is present.</p>
-
- <p>A couple of examples:</p>
-
- <div class="example"><p><code>
- grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
- grep "client denied" error_log | tail -n 10
- </code></p></div>
-
- <p>The first example will list the number of attacks trying to exploit the
- <a href="http://online.securityfocus.com/bid/4876/info/">Apache Tomcat
- Source.JSP Malformed Request Information Disclosure Vulnerability</a>,
- the second example will list the ten last denied clients, for example:</p>
-
- <div class="example"><p><code>
- [Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied
- by server configuration: /usr/local/apache/htdocs/.htpasswd
- </code></p></div>
-
- <p>As you can see, the log files only report what already has happened, so
- if the client had been able to access the <code>.htpasswd</code> file you
- would have seen something similar to:</p>
-
- <div class="example"><p><code>
- foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
- </code></p></div>
-
- <p>in your <a href="../logs.html#accesslog">Access Log</a>. This means
- you probably commented out the following in your server configuration
- file:</p>
-
- <div class="example"><p><code>
- &lt;Files ~ "^\.ht"&gt; <br />
- Order allow,deny <br />
- Deny from all <br />
- &lt;Files&gt;
- </code></p></div>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/misc/security_tips.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/security_tips.html.ko.euc-kr b/docs/manual/misc/security_tips.html.ko.euc-kr
deleted file mode 100644
index 6f894188b1..0000000000
--- a/docs/manual/misc/security_tips.html.ko.euc-kr
+++ /dev/null
@@ -1,341 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>º¸¾È ÆÁ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>º¸¾È ÆÁ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/security_tips.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>À¥¼­¹ö¸¦ ¿î¿µÇÒ¶§ µµ¿òÀÌ µÉ º¸¾È °ü·Ã ÈùÆ®¿Í ÆÁÀÌ´Ù.
- ¾î¶² °ÍÀº ÀϹÝÀûÀÌ°í, ¾î¶² °ÍÀº ¾ÆÆÄÄ¡¿¡¸¸ ÇØ´çÇÏ´Â °ÍÀÌ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#uptodate">ÃÖ½ÅÆÇÀ¸·Î À¯ÁöÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">ServerRoot µð·ºÅ丮 ±ÇÇÑ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Server Side Includes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">ÀϹÝÀûÀÎ CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#nsaliasedcgi">ScriptAliasÇÏÁö ¾ÊÀº CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#saliasedcgi">ScriptAliasÇÑ CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#dynamic">µ¿Àû ³»¿ëÀ» »ý¼ºÇÏ´Â ´Ù¸¥ ¹æ¹ý</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#systemsettings">½Ã½ºÅÛ ¼³Á¤ º¸È£Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#protectserverfiles">±âº»ÀûÀ¸·Î ¼­¹ö¿¡ ÀÖ´Â ÆÄÀÏ º¸È£Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#watchyourlogs">·Î±× »ìÆ캸±â</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="uptodate" id="uptodate">ÃÖ½ÅÆÇÀ¸·Î À¯ÁöÇϱâ</a></h2>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ¾ÈÀü°ú º¸¾È ¹®Á¦¿¡ °ü½ÉÀÌ ¸¹Àº °³¹ßÀÚ
- °øµ¿Ã¼·Î À¯¸íÇÏ´Ù. ±×·¯³ª Å©°Ç ÀÛ°Ç ¹ßÇ¥ÈÄ ¹ß°ßµÇ´Â ¹®Á¦µéÀ»
- ÇÇÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ ¼ÒÇÁÆ®¿þ¾î¸¦ ÃֽŹöÀüÀ¸·Î À¯ÁöÇÏ´Â
- °ÍÀÌ Áß¿äÇÏ´Ù. ¾ÆÆÄÄ¡¿¡¼­ Á÷Á¢ À¥¼­¹ö¸¦ ´Ù¿î·ÎµåÇß´Ù¸é,
- »õ·Î¿î ¹öÀü°ú º¸¾È ¾÷µ¥ÀÌÆ®¸¦ ¾Ë·ÁÁÖ´Â <a href="http://httpd.apache.org/lists.html#http-announce">¾ÆÆÄÄ¡
- À¥¼­¹ö ¹ßÇ¥ ¸ÞÀϸµ¸®½ºÆ®</a>¸¦ ±¸µ¶ÇÏ±æ °­·ÂÈ÷ ±ÇÇÑ´Ù.
- ¾ÆÆÄÄ¡ ¼ÒÇÁÆ®¿þ¾î¸¦ ¹èÆ÷ÇÏ´Â ¸¹Àº Á¦»ïÀڵ鵵 ºñ½ÁÇÑ ¼­ºñ½º¸¦
- Á¦°øÇÑ´Ù.</p>
-
- <p>¹°·Ð À¥¼­¹ö Äڵ嶧¹®¿¡ À¥¼­¹ö°¡ °ø°ÝÀ» ´çÇÏ´Â °æ¿ì´Â
- ¸¹Áö ¾Ê´Ù. ±×º¸´Ù Ãß°¡ ÄÚµå, CGI ½ºÅ©¸³Æ®, ÇÏÀ§ ¿î¿µÃ¼Á¦ÀÇ
- ¹®Á¦·Î °ø°ÝÀ» ´çÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ±×·¯¹Ç·Î Ç×»ó ÁÖÀÇÇϸç
- ½Ã½ºÅÛÀÇ ¸ðµç ¼ÒÇÁÆ®¿þ¾î¸¦ ¾÷µ¥ÀÌÆ®ÇØ¾ß ÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="serverroot" id="serverroot">ServerRoot µð·ºÅ丮 ±ÇÇÑ</a></h2>
-
-
-
- <p>º¸Åë root »ç¿ëÀÚ°¡ ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÑ ÈÄ, ¿äûÀ» ¼­ºñ½ºÇϱâÀ§ÇØ
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ »ç¿ëÀÚ·Î º¯È¯ÇÑ´Ù. root°¡ ½ÇÇàÇÏ´Â ¸í·É¾î°¡ ÀÖ´Ù¸é,
- root ÀÌ¿ÜÀÇ »ç¿ëÀÚ°¡ ¼öÁ¤ÇÏÁö ¸øÇϵµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ÀÌ
- ÆÄÀϵéÀ» root¸¸ ¾µ ¼ö ÀÖ¾î¾ß ÇÏ°í, µð·ºÅ丮¿Í ¸ðµç »óÀ§µð·ºÅ丮µµ
- ¸¶Âù°¡Áö´Ù. ¿¹¸¦ µé¾î, ServerRoot·Î /usr/local/apache¸¦
- »ç¿ëÇÑ´Ù¸é root »ç¿ëÀÚ°¡ ´ÙÀ½°ú °°ÀÌ µð·ºÅ丮¸¦ ¸¸µé±æ
- Á¦¾ÈÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- mkdir /usr/local/apache <br />
- cd /usr/local/apache <br />
- mkdir bin conf logs <br />
- chown 0 . bin conf logs <br />
- chgrp 0 . bin conf logs <br />
- chmod 755 . bin conf logs
- </code></p></div>
-
- <p>±×·¯¸é /, /usr, /usr/local Àº root¸¸ÀÌ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.
- httpd ½ÇÇàÆÄÀÏÀ» ¼³Ä¡ÇÒ¶§ ´ÙÀ½°ú °°ÀÌ º¸È£ÇØ¾ß ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- cp httpd /usr/local/apache/bin <br />
- chown 0 /usr/local/apache/bin/httpd <br />
- chgrp 0 /usr/local/apache/bin/httpd <br />
- chmod 511 /usr/local/apache/bin/httpd
- </code></p></div>
-
- <p>htdocs ÇÏÀ§µð·ºÅ丮´Â ´Ù¸¥ »ç¿ëÀÚµéÀÌ ¼öÁ¤ÇÒ ¼ö ÀÖµµ·Ï
- ¸¸µé ¼ö ÀÖ´Ù -- root´Â ±×°÷¿¡ ÀÖ´Â ÆÄÀÏÀ» ½ÇÇàÇÏÁöµµ, ¸¸µéÁöµµ
- ¾Ê¾Æ¾ß ÇÑ´Ù.</p>
-
- <p>root°¡ ¾Æ´Ñ »ç¿ëÀÚ°¡ root°¡ ½ÇÇàÇϰųª ¾²±â°¡´ÉÇÑ ÆÄÀÏÀ»
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù¸é ½Ã½ºÅÛÀÇ root ±ÇÇÑÀ» ÈÉÄ¥ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, ´©±º°¡ httpd ½ÇÇàÆÄÀÏÀ» º¯°æÇÏ¿´´Ù¸é ´ÙÀ½¹ø ½ÃÀÛÇÒ¶§
- ÀÓÀÇÀÇ Äڵ带 ½ÇÇàÇÏ°Ô µÈ´Ù. logs µð·ºÅ丮°¡ (root°¡ ¾Æ´Ñ
- »ç¿ëÀÚ¿¡°Ô) ¾²±â°¡´ÉÇÏ´Ù¸é ´©±º°¡ ·Î±×ÆÄÀÏÀ» ´Ù¸¥ ½Ã½ºÅÛÆÄÀÏ·Î
- ½Éº¼¸µÅ©¸¦ °É¾î¼­ root°¡ ÆÄÀÏ¿¡ ÀÓÀÇÀÇ ÀڷḦ µ¤¾î¾µ ¼ö
- ÀÖ´Ù. ·Î±×ÆÄÀÏÀÌ (root°¡ ¾Æ´Ñ »ç¿ëÀÚ¿¡°Ô) ¾²±â°¡´ÉÇÏ´Ù¸é
- ´©±º°¡ ·Î±×¿¡ ÀÌ»óÇÑ ÀڷḦ ±â·ÏÇÒ ¼ö ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">Server Side Includes</a></h2>
-
-
-
- <p>Server Side Includes (SSI)´Â ¼­¹ö °ü¸®ÀÚ¿¡°Ô º¸¾È»ó ¸î°¡Áö
- ÀáÀçÀûÀÎ À§ÇèÀÌ´Ù.</p>
-
- <p>ù¹ø° À§ÇèÀº ¼­¹öÀÇ ºÎÇϸ¦ ´Ã¸®´Â Á¡ÀÌ´Ù. ¾ÆÆÄÄ¡´Â ÆÄÀÏ¿¡
- SSI Áö½Ã¾î°¡ ÀÖ´ÂÁö ¿©ºÎ¿Í °ü°è¾øÀÌ ¸ðµç SSI ÆÄÀÏÀ» ºÐ¼®Çؾß
- ÇÑ´Ù. Á¶±Ý ºÎÇÏ°¡ ´ÃÁö¸¸, ¼­¹ö¸¦ ¿©·¯ »ç¶÷ÀÌ °°ÀÌ »ç¿ëÇÏ´Â
- ȯ°æ¿¡¼­´Â ½É°¢ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¶Ç, SSI ÆÄÀÏÀº ÀϹÝÀûÀÎ CGI ½ºÅ©¸³Æ®¿Í µ¿ÀÏÇÑ À§ÇèÀ»
- °¡Áø´Ù. SSI ÆÄÀÏ¿¡¼­ "exec cmd"¸¦ »ç¿ëÇϸé httpd.conf¿¡¼­
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϵµ·Ï ¼³Á¤ÇÑ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑÀ¸·Î CGI
- ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀåÁ¡À» È°¿ëÇϸ鼭 SSI ÆÄÀÏÀÇ º¸¾ÈÀ» Çâ»ó½ÃÅ°´Â ¹æ¹ýÀÌ
- ÀÖ´Ù.</p>
-
- <p>SSI ÆÄÀÏÀÌ °¡Á®¿Ã ¼ö ÀÖ´Â ÇÇÇظ¦ °Ý¸®ÇϱâÀ§ÇØ ¼­¹ö°ü¸®ÀÚ´Â
- <a href="#cgi">ÀϹÝÀûÀÎ CGI</a> Àý¿¡¼­ ¼³¸íÇÏ´Â ¹æ¹ýÀ¸·Î
- <a href="../suexec.html">suexec</a>¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù</p>
-
- <p>.htmlÀ̳ª .htm È®ÀåÀÚ¸¦ SSI ÆÄÀÏ·Î »ç¿ëÇÏ´Â °ÍÀº À§ÇèÇÏ´Ù.
- ƯÈ÷ ¿©·¯ »ç¶÷ÀÌ °øÀ¯Çϰųª Åë½Å·®ÀÌ ¸¹Àº ¼­¹ö ȯ°æ¿¡¼­
- À§ÇèÇÏ´Ù. SSI ÆÄÀÏÀº ÀϹÝÀûÀ¸·Î ¸¹ÀÌ »ç¿ëÇÏ´Â .shtml °°Àº
- º°µµÀÇ È®ÀåÀÚ¸¦ °¡Á®¾ß ÇÑ´Ù. ±×·¯¸é ¼­¹ö ºÎÇϸ¦ ÃÖ¼ÒÈ­ÇÏ°í
- À§Çè¿ä¼Ò¸¦ ½±°Ô °ü¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>´Ù¸¥ ¹æ¹ýÀº SSI ÆäÀÌÁö°¡ ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥À» ½ÇÇàÇÏÁö
- ¸øÇϵµ·Ï ¸¸µå´Â °ÍÀÌ´Ù. <code class="directive"><a href="../mod/core.html#options">Options</a></code> Áö½Ã¾î¿¡¼­ <code>Includes</code>
- ´ë½Å <code>IncludesNOEXEC</code>¸¦ »ç¿ëÇÑ´Ù. ±×·¡µµ ½ºÅ©¸³Æ®°¡
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ ÀÖ´Ù¸é &lt;--#include virtual="..." --&gt;¸¦
- »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">ÀϹÝÀûÀÎ CGI</a></h2>
-
-
-
- <p>°á±¹ ´ç½ÅÀº Ç×»ó CGI ½ºÅ©¸³Æ®/ÇÁ·Î±×·¥ÀÇ ÀúÀÚ¸¦ ½Å·ÚÇؾß
- ÇÏ°í, °íÀÇ°Ç ½Ç¼öÀÌ°Ç CGIÀÇ ÀáÀçÀûÀÎ º¸¾È»ó ÇãÁ¡À» ¹ß°ßÇÒ
- ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±âº»ÀûÀ¸·Î CGI ½ºÅ©¸³Æ®´Â À¥¼­¹ö »ç¿ëÀÚ
- ±ÇÇÑÀ¸·Î ½Ã½ºÅÛ¿¡¼­ ¾î¶² ¸í·É¾î¶óµµ ½ÇÇàÇÒ ¼ö Àֱ⶧¹®¿¡
- ÁÖÀÇÀÖ°Ô È®ÀÎÇÏÁö ¾ÊÀ¸¸é ¸Å¿ì À§ÇèÇÏ´Ù.</p>
-
- <p>¸ðµç CGI ½ºÅ©¸³Æ®°¡ °°Àº »ç¿ëÀÚ·Î ½ÇÇàµÇ±â¶§¹®¿¡ ´Ù¸¥
- ½ºÅ©¸³Æ®¿Í (°íÀÇ°Ç ½Ç¼öÀÌ°Ç) Ãæµ¹ÇÒ °¡´É¼ºÀÌ ÀÖ´Ù. ¿¹¸¦
- µé¾î, »ç¿ëÀÚ A´Â »ç¿ëÀÚ B¸¦ ¸Å¿ì ½È¾îÇÏ¿©, »ç¿ëÀÚ BÀÇ CGI
- µ¥ÀÌÅͺ£À̽º¸¦ Áö¿ö¹ö¸®´Â ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡
- 1.2 ¹öÀüºÎÅÍ Æ÷ÇԵǾú°í ¾ÆÆÄÄ¡ ¼­¹ö¿¡¼­ Ưº°ÇÑ ÈÅ(hook)À¸·Î
- µ¿ÀÛÇÏ´Â <a href="../suexec.html">suEXEC</a>´Â ½ºÅ©¸³Æ®¸¦
- ´Ù¸¥ »ç¿ëÀÚ·Î ½ÇÇàÇÏ´Â ¹æ¹ýÁß Çϳª´Ù. ´Ù¸¥ ´ëÁßÀûÀÎ ¹æ¹ý¿¡´Â
- <a href="http://cgiwrap.unixtools.org/">CGIWrap</a>ÀÌ ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="nsaliasedcgi" id="nsaliasedcgi">ScriptAliasÇÏÁö ¾ÊÀº CGI</a></h2>
-
-
-
- <p>´ÙÀ½ Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ »ç¿ëÀÚ°¡ ¾î¶² µð·ºÅ丮¿¡¼­¶óµµ
- CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>´ç½ÅÀº °íÀÇ°Ç ½Ç¼öÀÌ°Ç »ç¿ëÀÚ°¡ ½Ã½ºÅÛÀ» °ø°Ý¿¡ ³ëÃâ½ÃÅ°´Â
- ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏÁö ¾Ê´Â´Ù°í ¹Ï´Â´Ù.</li>
- <li>½Ã½ºÅÛÀÇ ´Ù¸¥ ºÎºÐÀÇ º¸¾ÈÀÌ ¾àÇؼ­, ÀáÀçÀûÀÎ ÇãÁ¡À»
- Çϳª ´õ ¸¸µé¾îµµ ³ªºüÁú °ÍÀÌ ¾ø´Ù°í »ý°¢ÇÏ´Â °æ¿ì.</li>
- <li>»ç¿ëÀÚ°¡ ¾ø°í, ¾Æ¸¶ ¾Æ¹«µµ ¼­¹ö¸¦ ¹æ¹®ÇÏÁö¾Ê´Â °æ¿ì.</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="saliasedcgi" id="saliasedcgi">ScriptAliasÇÑ CGI</a></h2>
-
-
-
- <p>ƯÁ¤ µð·ºÅ丮¿¡¼­¸¸ CGI¸¦ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Á¦ÇÑÇÏ¸é °ü¸®ÀÚ´Â
- ÀÌµé µð·ºÅ丮¸¦ ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì´Â scriptaliasÇÏÁö
- ¾ÊÀº CGIº¸´Ù È®½ÇÈ÷ ¾ÈÀüÇÏ´Ù. ´Ü, ½Å·ÚÇÏ´Â »ç¿ëÀÚ¸¸ µð·ºÅ丮¿¡
- Á¢±ÙÇÒ ¼ö ÀÖ°í, °ü¸®ÀÚ°¡ »õ·Î¿î CGI ½ºÅ©¸³Æ®/ÇÁ·Î±×·¥ÀÇ
- ÀáÀçÀûÀÎ º¸¾È»ó ÇãÁ¡À» °Ë»çÇÒ ¿ëÀÌ°¡ ÀÖ´Ù¸é.</p>
-
- <p>´ëºÎºÐÀÇ »çÀÌÆ®´Â scriptaliasÇÏÁö ¾ÊÀº CGI ¹æ½Ä ´ë½Å
- ÀÌ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dynamic" id="dynamic">µ¿Àû ³»¿ëÀ» »ý¼ºÇÏ´Â ´Ù¸¥ ¹æ¹ý</a></h2>
-
-
-
- <p>
- mod_php, mod_perl, mod_tcl, mod_python °°ÀÌ ¼­¹öÀÇ ÀϺηÎ
- µ¿ÀÛÇÏ´Â ÀÓº£µðµå ½ºÅ©¸³Æ®´Â ¼­¹ö¿Í °°Àº »ç¿ëÀÚ·Î (<code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> Áö½Ã¾î Âü°í) ½ÇÇàµÇ±â¶§¹®¿¡,
- ½ºÅ©¸³Æ® ¿£ÁøÀÌ ½ÇÇàÇÏ´Â ½ºÅ©¸³Æ®´Â ÀáÀçÀûÀ¸·Î ¼­¹ö »ç¿ëÀÚ°¡
- Á¢±ÙÇÒ ¼ö ÀÖ´Â ¸ðµç °Í¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ¾î¶² ½ºÅ©¸³Æ® ¿£ÁøÀº
- ¾î´ÀÁ¤µµ Á¦ÇÑÀ» ÇÏÁö¸¸, ¾ÈÀüÇÏ´Ù°í °¡Á¤ÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="systemsettings" id="systemsettings">½Ã½ºÅÛ ¼³Á¤ º¸È£Çϱâ</a></h2>
-
-
-
- <p>Á¤¸»·Î ¾ÈÀüÇÑ ¼­¹ö¸¦ ¿î¿µÇÏ·Á¸é »ç¿ëÀÚ°¡
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© ´ç½ÅÀÌ ¼³Á¤ÇÑ º¸¾È±â´ÉÀ»
- º¯°æÇÏ±æ ¹Ù¶óÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯±âÀ§ÇØ ´ÙÀ½°ú °°Àº ¹æ¹ýÀÌ
- ÀÖ´Ù.</p>
-
- <p>¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt; <br />
- AllowOverride None <br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>±×·¯¸é »ç¿ë°¡´ÉÇϵµ·Ï ¸í½ÃÀûÀ¸·Î Çã¿ëÇÑ µð·ºÅ丮¸¦ Á¦¿ÜÇÏ°í´Â
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="protectserverfiles" id="protectserverfiles">±âº»ÀûÀ¸·Î ¼­¹ö¿¡ ÀÖ´Â ÆÄÀÏ º¸È£Çϱâ</a></h2>
-
-
-
- <p>»ç¶÷µéÀº Á¾Á¾ ¾ÆÆÄÄ¡ÀÇ ±âº» Á¢±Ù¿¡ ´ëÇØ À߸ø ¾Ë°íÀÖ´Ù.
- Áï, ¼­¹ö°¡ ÀϹÝÀûÀÎ URL ´ëÀÀ ±ÔÄ¢À» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ãÀ»
- ¼ö ÀÖ´Ù¸é, Ưº°È÷ Á¶Ä¡¸¦ ÇÏÁö ¾Ê´ÂÇÑ Å¬¶óÀ̾ðÆ®¿¡°Ô ÆÄÀÏÀÌ
- ¼­ºñ½ºµÉ ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ¾Æ·¡¿Í °°Àº °æ¿ì:</p>
-
- <div class="example"><p><code>
- # cd /; ln -s / public_html <br />
- <code>http://localhost/~root/</code> ¿¡ Á¢±ÙÇÑ´Ù
- </code></p></div>
-
- <p>±×·¯¸é Ŭ¶óÀ̾ðÆ®´Â Àüü ÆÄÀϽýºÅÛÀ» µ¹¾Æ´Ù´Ò ¼ö ÀÖ´Ù.
- À̸¦ ¸·±âÀ§ÇØ ¼­¹ö¼³Á¤¿¡¼­ ´ÙÀ½°ú °°Àº Á¶Ä¡¸¦ ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt; <br />
- Order Deny,Allow <br />
- Deny from all <br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>±×·¯¸é ÆÄÀϽýºÅÛ À§Ä¡¿¡ ´ëÇØ ±âº» Á¢±ÙÀÌ °ÅºÎµÈ´Ù.
- ¿øÇÏ´Â ¿µ¿ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ´ÙÀ½°ú °°Àº <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> ºí·ÏÀ» Ãß°¡ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/users/*/public_html&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt; <br />
- &lt;Directory /usr/local/httpd&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/core.html#location">Location</a></code>°ú <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> Áö½Ã¾î¸¦ °°ÀÌ »ç¿ëÇÏ´Â
- °æ¿ì Ưº°È÷ ÁÖÀǸ¦ ±â¿ï¿©¶ó. ¿¹¸¦ µé¾î, <code>&lt;Directory
- /&gt;</code>°¡ Á¢±ÙÀ» °ÅºÎÇÏ´õ¶óµµ <code>&lt;Location
- /&gt;</code> Áö½Ã¾î°¡ À̸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù</p>
-
- <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ´Â °æ¿ì¿¡µµ ÁÖÀÇÇ϶ó. Áö½Ã¾î¸¦ "./" °°ÀÌ ¼³Á¤Çϸé
- root »ç¿ëÀÚ¿¡ ´ëÇØ ¹Ù·Î À§ÀÇ °æ¿ì¿Í °°Àº ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.
- ¾ÆÆÄÄ¡ 1.3 ÀÌ»óÀ» »ç¿ëÇÑ´Ù¸é ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ¾Æ·¡ ÁÙÀ» Ãß°¡Çϱæ
- °­·ÂÈ÷ ±ÇÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- UserDir disabled root
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="watchyourlogs" id="watchyourlogs">·Î±× »ìÆ캸±â</a></h2>
-
-
-
- <p>½ÇÁ¦·Î ¼­¹ö¿¡¼­ ¹«½¼ ÀÏÀÌ À־°í ÀÖ´ÂÁö ¾Ë·Á¸é <a href="../logs.html">·Î±×ÆÄÀÏ</a>À» »ìÆìºÁ¾ß ÇÑ´Ù. ·Î±×ÆÄÀÏÀº
- ÀÌ¹Ì ÀϾ Àϸ¸À» º¸°íÇÏÁö¸¸, ¼­¹ö¿¡ ¾î¶² °ø°ÝÀÌ ÀÖ¾ú´ÂÁö
- ¾Ë·ÁÁÖ°í ÇöÀç ÇÊ¿äÇÑ ¸¸Å­ ¾ÈÀüÇÑÁö È®ÀÎÇÏ°Ô ÇØÁØ´Ù.</p>
-
- <p>¿©·¯°¡Áö ¿¹:</p>
-
- <div class="example"><p><code>
- grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
- grep "client denied" error_log | tail -n 10
- </code></p></div>
-
- <p>ù¹ø° ¿¹´Â <a href="http://online.securityfocus.com/bid/4876/info/">À߸øµÈ
- Source.JSP ¿äûÀ¸·Î ¼­¹öÁ¤º¸¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Â TomcatÀÇ
- Ãë¾àÁ¡</a>¸¦ ÀÌ¿ëÇÏ·Á´Â °ø°Ý Ƚ¼ö¸¦ ¾Ë·ÁÁÖ°í, µÎ¹ø° ¿¹´Â
- Á¢±ÙÀÌ °ÅºÎµÈ Ãֱ٠Ŭ¶óÀ̾ðÆ® 10°³¸¦ ´ÙÀ½°ú °°ÀÌ º¸¿©ÁØ´Ù:</p>
-
- <div class="example"><p><code>
- [Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied
- by server configuration: /usr/local/apache/htdocs/.htpasswd
- </code></p></div>
-
- <p>Àß ¾Ë µíÀÌ ·Î±×ÆÄÀÏÀº ÀÌ¹Ì ¹ß»ýÇÑ »ç°Ç¸¸À» º¸°íÇÑ´Ù.
- ±×·¡¼­ Ŭ¶óÀ̾ðÆ®°¡ <code>.htpasswd</code> ÆÄÀÏ¿¡ Á¢±ÙÇÒ
- ¼ö ÀÖ¾ú´Ù¸é <a href="../logs.html#accesslog">Á¢±Ù ·Î±×</a>¿¡
- ´ÙÀ½°ú °°Àº ±â·ÏÀÌ ³²À» °ÍÀÌ´Ù:</p>
-
- <div class="example"><p><code>
- foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
- </code></p></div>
-
- <p>Áï, ´ç½ÅÀº ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡¼­ ´ÙÀ½ ºÎºÐÀ» ÁÖ¼®Ã³¸®ÇßÀ»
- °ÍÀÌ´Ù:</p>
-
- <div class="example"><p><code>
- &lt;Files ~ "^\.ht"&gt; <br />
- Order allow,deny <br />
- Deny from all <br />
- &lt;Files&gt;
- </code></p></div>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/misc/security_tips.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/security_tips.xml b/docs/manual/misc/security_tips.xml
deleted file mode 100644
index d404887b90..0000000000
--- a/docs/manual/misc/security_tips.xml
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="security_tips.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>Security Tips</title>
-
- <summary>
- <p>Some hints and tips on security issues in setting up a web server.
- Some of the suggestions will be general, others specific to Apache.</p>
- </summary>
-
- <section id="uptodate"><title>Keep up to Date</title>
-
- <p>The Apache HTTP Server has a good record for security and a
- developer community highly concerned about security issues. But
- it is inevitable that some problems -- small or large -- will be
- discovered in software after it is released. For this reason, it
- is crucial to keep aware of updates to the software. If you have
- obtained your version of the HTTP Server directly from Apache, we
- highly recommend you subscribe to the <a
- href="http://httpd.apache.org/lists.html#http-announce">Apache
- HTTP Server Announcements List</a> where you can keep informed of
- new releases and security updates. Similar services are available
- from most third-party distributors of Apache software.</p>
-
- <p>Of course, most times that a web server is compromised, it is
- not because of problems in the HTTP Server code. Rather, it comes
- from problems in add-on code, CGI scripts, or the underlying
- Operating System. You must therefore stay aware of problems and
- updates with all the software on your system.</p>
-
- </section>
-
- <section id="serverroot">
-
- <title>Permissions on ServerRoot Directories</title>
-
- <p>In typical operation, Apache is started by the root user, and it
- switches to the user defined by the <directive
- module="mpm_common">User</directive> directive to serve hits. As is the
- case with any command that root executes, you must take care that it is
- protected from modification by non-root users. Not only must the files
- themselves be writeable only by root, but so must the directories, and
- parents of all directories. For example, if you choose to place
- ServerRoot in /usr/local/apache then it is suggested that you create
- that directory as root, with commands like these:</p>
-
- <example>
- mkdir /usr/local/apache <br />
- cd /usr/local/apache <br />
- mkdir bin conf logs <br />
- chown 0 . bin conf logs <br />
- chgrp 0 . bin conf logs <br />
- chmod 755 . bin conf logs
- </example>
-
- <p>It is assumed that /, /usr, and /usr/local are only modifiable by
- root. When you install the httpd executable, you should ensure that
- it is similarly protected:</p>
-
- <example>
- cp httpd /usr/local/apache/bin <br />
- chown 0 /usr/local/apache/bin/httpd <br />
- chgrp 0 /usr/local/apache/bin/httpd <br />
- chmod 511 /usr/local/apache/bin/httpd
- </example>
-
- <p>You can create an htdocs subdirectory which is modifiable by other
- users -- since root never executes any files out of there, and shouldn't
- be creating files in there.</p>
-
- <p>If you allow non-root users to modify any files that root either
- executes or writes on then you open your system to root compromises.
- For example, someone could replace the httpd binary so that the next
- time you start it, it will execute some arbitrary code. If the logs
- directory is writeable (by a non-root user), someone could replace
- a log file with a symlink to some other system file, and then root
- might overwrite that file with arbitrary data. If the log files
- themselves are writeable (by a non-root user), then someone may be
- able to overwrite the log itself with bogus data.</p>
-
- </section>
-
- <section id="ssi">
-
- <title>Server Side Includes</title>
-
- <p>Server Side Includes (SSI) present a server administrator with
- several potential security risks.</p>
-
- <p>The first risk is the increased load on the server. All
- SSI-enabled files have to be parsed by Apache, whether or not
- there are any SSI directives included within the files. While this
- load increase is minor, in a shared server environment it can become
- significant.</p>
-
- <p>SSI files also pose the same risks that are associated with CGI
- scripts in general. Using the "exec cmd" element, SSI-enabled files
- can execute any CGI script or program under the permissions of the
- user and group Apache runs as, as configured in httpd.conf.</p>
-
- <p>There are ways to enhance the security of SSI files while still
- taking advantage of the benefits they provide.</p>
-
- <p>To isolate the damage a wayward SSI file can cause, a server
- administrator can enable <a href="../suexec.html">suexec</a> as
- described in the <a href="#cgi">CGI in General</a> section</p>
-
- <p>Enabling SSI for files with .html or .htm extensions can be
- dangerous. This is especially true in a shared, or high traffic,
- server environment. SSI-enabled files should have a separate extension,
- such as the conventional .shtml. This helps keep server load at a
- minimum and allows for easier management of risk.</p>
-
- <p>Another solution is to disable the ability to run scripts and
- programs from SSI pages. To do this replace <code>Includes</code>
- with <code>IncludesNOEXEC</code> in the <directive
- module="core">Options</directive> directive. Note that users may
- still use &lt;--#include virtual="..." --&gt; to execute CGI scripts if
- these scripts are in directories desginated by a <directive
- module="mod_alias">ScriptAlias</directive> directive.</p>
-
- </section>
-
- <section id="cgi">
-
- <title>CGI in General</title>
-
- <p>First of all, you always have to remember that you must trust the
- writers of the CGI scripts/programs or your ability to spot potential
- security holes in CGI, whether they were deliberate or accidental. CGI
- scripts can run essentially arbitrary commands on your system with the
- permissions of the web server user and can therefore be extremely
- dangerous if they are not carefully checked.</p>
-
- <p>All the CGI scripts will run as the same user, so they have potential
- to conflict (accidentally or deliberately) with other scripts e.g. User
- A hates User B, so he writes a script to trash User B's CGI database. One
- program which can be used to allow scripts to run as different users is
- <a href="../suexec.html">suEXEC</a> which is included with Apache as of
- 1.2 and is called from special hooks in the Apache server code. Another
- popular way of doing this is with
- <a href="http://cgiwrap.unixtools.org/">CGIWrap</a>.</p>
-
- </section>
-
- <section id="nsaliasedcgi">
-
- <title>Non Script Aliased CGI</title>
-
- <p>Allowing users to execute CGI scripts in any directory should only be
- considered if:</p>
-
- <ul>
- <li>You trust your users not to write scripts which will deliberately
- or accidentally expose your system to an attack.</li>
- <li>You consider security at your site to be so feeble in other areas,
- as to make one more potential hole irrelevant.</li>
- <li>You have no users, and nobody ever visits your server.</li>
- </ul>
-
- </section>
-
- <section id="saliasedcgi">
-
- <title>Script Aliased CGI</title>
-
- <p>Limiting CGI to special directories gives the admin control over what
- goes into those directories. This is inevitably more secure than non
- script aliased CGI, but only if users with write access to the
- directories are trusted or the admin is willing to test each
- new CGI script/program for potential security holes.</p>
-
- <p>Most sites choose this option over the non script aliased CGI
- approach.</p>
-
- </section>
-
- <section id="dynamic">
-
- <title>Other sources of dynamic content</title>
-
- <p>
- Embedded scripting options which run as part of the server itself,
- such as mod_php, mod_perl, mod_tcl, and mod_python, run under the
- identity of the server itself (see the <directive
- module="mpm_common">User</directive> directive), and therefore
- scripts executed by these engines potentially can access anything the
- server user can. Some scripting engines may provide restrictions, but
- it is better to be safe and assume not.</p>
-
- </section>
-
- <section id="systemsettings">
-
- <title>Protecting System Settings</title>
-
- <p>To run a really tight ship, you'll want to stop users from setting
- up <code>.htaccess</code> files which can override security features
- you've configured. Here's one way to do it.</p>
-
- <p>In the server configuration file, put</p>
-
- <example>
- &lt;Directory /&gt; <br />
- AllowOverride None <br />
- &lt;/Directory&gt;
- </example>
-
- <p>This prevents the use of <code>.htaccess</code> files in all
- directories apart from those specifically enabled.</p>
-
- </section>
-
- <section id="protectserverfiles">
-
- <title>Protect Server Files by Default</title>
-
- <p>One aspect of Apache which is occasionally misunderstood is the
- feature of default access. That is, unless you take steps to change it,
- if the server can find its way to a file through normal URL mapping
- rules, it can serve it to clients.</p>
-
- <p>For instance, consider the following example:</p>
-
- <example>
- # cd /; ln -s / public_html <br />
- Accessing <code>http://localhost/~root/</code>
- </example>
-
- <p>This would allow clients to walk through the entire filesystem. To
- work around this, add the following block to your server's
- configuration:</p>
-
- <example>
- &lt;Directory /&gt; <br />
- Order Deny,Allow <br />
- Deny from all <br />
- &lt;/Directory&gt;
- </example>
-
- <p>This will forbid default access to filesystem locations. Add
- appropriate <directive module="core">Directory</directive> blocks to
- allow access only in those areas you wish. For example,</p>
-
- <example>
- &lt;Directory /usr/users/*/public_html&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt; <br />
- &lt;Directory /usr/local/httpd&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt;
- </example>
-
- <p>Pay particular attention to the interactions of <directive
- module="core">Location</directive> and <directive
- module="core">Directory</directive> directives; for instance, even
- if <code>&lt;Directory /&gt;</code> denies access, a <code>
- &lt;Location /&gt;</code> directive might overturn it</p>
-
- <p>Also be wary of playing games with the <directive
- module="mod_userdir">UserDir</directive> directive; setting it to
- something like "./" would have the same effect, for root, as the first
- example above. If you are using Apache 1.3 or above, we strongly
- recommend that you include the following line in your server
- configuration files:</p>
-
- <example>
- UserDir disabled root
- </example>
-
- </section>
-
- <section id="watchyourlogs">
-
- <title>Watching Your Logs</title>
-
- <p>To keep up-to-date with what is actually going on against your server
- you have to check the <a href="../logs.html">Log Files</a>. Even though
- the log files only reports what has already happened, they will give you
- some understanding of what attacks is thrown against the server and
- allows you to check if the necessary level of security is present.</p>
-
- <p>A couple of examples:</p>
-
- <example>
- grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
- grep "client denied" error_log | tail -n 10
- </example>
-
- <p>The first example will list the number of attacks trying to exploit the
- <a href="http://online.securityfocus.com/bid/4876/info/">Apache Tomcat
- Source.JSP Malformed Request Information Disclosure Vulnerability</a>,
- the second example will list the ten last denied clients, for example:</p>
-
- <example>
- [Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied
- by server configuration: /usr/local/apache/htdocs/.htpasswd
- </example>
-
- <p>As you can see, the log files only report what already has happened, so
- if the client had been able to access the <code>.htpasswd</code> file you
- would have seen something similar to:</p>
-
- <example>
- foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
- </example>
-
- <p>in your <a href="../logs.html#accesslog">Access Log</a>. This means
- you probably commented out the following in your server configuration
- file:</p>
-
- <example>
- &lt;Files ~ "^\.ht"&gt; <br />
- Order allow,deny <br />
- Deny from all <br />
- &lt;Files&gt;
- </example>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/misc/security_tips.xml.ko b/docs/manual/misc/security_tips.xml.ko
deleted file mode 100644
index 9d312b5ec1..0000000000
--- a/docs/manual/misc/security_tips.xml.ko
+++ /dev/null
@@ -1,334 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="security_tips.xml.meta">
- <parentdocument href="./">Miscellaneous Documentation</parentdocument>
-
- <title>º¸¾È ÆÁ</title>
-
- <summary>
- <p>À¥¼­¹ö¸¦ ¿î¿µÇÒ¶§ µµ¿òÀÌ µÉ º¸¾È °ü·Ã ÈùÆ®¿Í ÆÁÀÌ´Ù.
- ¾î¶² °ÍÀº ÀϹÝÀûÀÌ°í, ¾î¶² °ÍÀº ¾ÆÆÄÄ¡¿¡¸¸ ÇØ´çÇÏ´Â °ÍÀÌ´Ù.</p>
- </summary>
-
- <section id="uptodate"><title>ÃÖ½ÅÆÇÀ¸·Î À¯ÁöÇϱâ</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ¾ÈÀü°ú º¸¾È ¹®Á¦¿¡ °ü½ÉÀÌ ¸¹Àº °³¹ßÀÚ
- °øµ¿Ã¼·Î À¯¸íÇÏ´Ù. ±×·¯³ª Å©°Ç ÀÛ°Ç ¹ßÇ¥ÈÄ ¹ß°ßµÇ´Â ¹®Á¦µéÀ»
- ÇÇÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ ¼ÒÇÁÆ®¿þ¾î¸¦ ÃֽŹöÀüÀ¸·Î À¯ÁöÇÏ´Â
- °ÍÀÌ Áß¿äÇÏ´Ù. ¾ÆÆÄÄ¡¿¡¼­ Á÷Á¢ À¥¼­¹ö¸¦ ´Ù¿î·ÎµåÇß´Ù¸é,
- »õ·Î¿î ¹öÀü°ú º¸¾È ¾÷µ¥ÀÌÆ®¸¦ ¾Ë·ÁÁÖ´Â <a
- href="http://httpd.apache.org/lists.html#http-announce">¾ÆÆÄÄ¡
- À¥¼­¹ö ¹ßÇ¥ ¸ÞÀϸµ¸®½ºÆ®</a>¸¦ ±¸µ¶ÇÏ±æ °­·ÂÈ÷ ±ÇÇÑ´Ù.
- ¾ÆÆÄÄ¡ ¼ÒÇÁÆ®¿þ¾î¸¦ ¹èÆ÷ÇÏ´Â ¸¹Àº Á¦»ïÀڵ鵵 ºñ½ÁÇÑ ¼­ºñ½º¸¦
- Á¦°øÇÑ´Ù.</p>
-
- <p>¹°·Ð À¥¼­¹ö Äڵ嶧¹®¿¡ À¥¼­¹ö°¡ °ø°ÝÀ» ´çÇÏ´Â °æ¿ì´Â
- ¸¹Áö ¾Ê´Ù. ±×º¸´Ù Ãß°¡ ÄÚµå, CGI ½ºÅ©¸³Æ®, ÇÏÀ§ ¿î¿µÃ¼Á¦ÀÇ
- ¹®Á¦·Î °ø°ÝÀ» ´çÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ±×·¯¹Ç·Î Ç×»ó ÁÖÀÇÇϸç
- ½Ã½ºÅÛÀÇ ¸ðµç ¼ÒÇÁÆ®¿þ¾î¸¦ ¾÷µ¥ÀÌÆ®ÇØ¾ß ÇÑ´Ù.</p>
-
- </section>
-
- <section id="serverroot">
-
- <title>ServerRoot µð·ºÅ丮 ±ÇÇÑ</title>
-
- <p>º¸Åë root »ç¿ëÀÚ°¡ ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÑ ÈÄ, ¿äûÀ» ¼­ºñ½ºÇϱâÀ§ÇØ
- <directive module="mpm_common">User</directive> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ »ç¿ëÀÚ·Î º¯È¯ÇÑ´Ù. root°¡ ½ÇÇàÇÏ´Â ¸í·É¾î°¡ ÀÖ´Ù¸é,
- root ÀÌ¿ÜÀÇ »ç¿ëÀÚ°¡ ¼öÁ¤ÇÏÁö ¸øÇϵµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ÀÌ
- ÆÄÀϵéÀ» root¸¸ ¾µ ¼ö ÀÖ¾î¾ß ÇÏ°í, µð·ºÅ丮¿Í ¸ðµç »óÀ§µð·ºÅ丮µµ
- ¸¶Âù°¡Áö´Ù. ¿¹¸¦ µé¾î, ServerRoot·Î /usr/local/apache¸¦
- »ç¿ëÇÑ´Ù¸é root »ç¿ëÀÚ°¡ ´ÙÀ½°ú °°ÀÌ µð·ºÅ丮¸¦ ¸¸µé±æ
- Á¦¾ÈÇÑ´Ù:</p>
-
- <example>
- mkdir /usr/local/apache <br />
- cd /usr/local/apache <br />
- mkdir bin conf logs <br />
- chown 0 . bin conf logs <br />
- chgrp 0 . bin conf logs <br />
- chmod 755 . bin conf logs
- </example>
-
- <p>±×·¯¸é /, /usr, /usr/local Àº root¸¸ÀÌ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.
- httpd ½ÇÇàÆÄÀÏÀ» ¼³Ä¡ÇÒ¶§ ´ÙÀ½°ú °°ÀÌ º¸È£ÇØ¾ß ÇÑ´Ù:</p>
-
- <example>
- cp httpd /usr/local/apache/bin <br />
- chown 0 /usr/local/apache/bin/httpd <br />
- chgrp 0 /usr/local/apache/bin/httpd <br />
- chmod 511 /usr/local/apache/bin/httpd
- </example>
-
- <p>htdocs ÇÏÀ§µð·ºÅ丮´Â ´Ù¸¥ »ç¿ëÀÚµéÀÌ ¼öÁ¤ÇÒ ¼ö ÀÖµµ·Ï
- ¸¸µé ¼ö ÀÖ´Ù -- root´Â ±×°÷¿¡ ÀÖ´Â ÆÄÀÏÀ» ½ÇÇàÇÏÁöµµ, ¸¸µéÁöµµ
- ¾Ê¾Æ¾ß ÇÑ´Ù.</p>
-
- <p>root°¡ ¾Æ´Ñ »ç¿ëÀÚ°¡ root°¡ ½ÇÇàÇϰųª ¾²±â°¡´ÉÇÑ ÆÄÀÏÀ»
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù¸é ½Ã½ºÅÛÀÇ root ±ÇÇÑÀ» ÈÉÄ¥ ¼ö ÀÖ´Ù. ¿¹¸¦
- µé¾î, ´©±º°¡ httpd ½ÇÇàÆÄÀÏÀ» º¯°æÇÏ¿´´Ù¸é ´ÙÀ½¹ø ½ÃÀÛÇÒ¶§
- ÀÓÀÇÀÇ Äڵ带 ½ÇÇàÇÏ°Ô µÈ´Ù. logs µð·ºÅ丮°¡ (root°¡ ¾Æ´Ñ
- »ç¿ëÀÚ¿¡°Ô) ¾²±â°¡´ÉÇÏ´Ù¸é ´©±º°¡ ·Î±×ÆÄÀÏÀ» ´Ù¸¥ ½Ã½ºÅÛÆÄÀÏ·Î
- ½Éº¼¸µÅ©¸¦ °É¾î¼­ root°¡ ÆÄÀÏ¿¡ ÀÓÀÇÀÇ ÀڷḦ µ¤¾î¾µ ¼ö
- ÀÖ´Ù. ·Î±×ÆÄÀÏÀÌ (root°¡ ¾Æ´Ñ »ç¿ëÀÚ¿¡°Ô) ¾²±â°¡´ÉÇÏ´Ù¸é
- ´©±º°¡ ·Î±×¿¡ ÀÌ»óÇÑ ÀڷḦ ±â·ÏÇÒ ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="ssi">
-
- <title>Server Side Includes</title>
-
- <p>Server Side Includes (SSI)´Â ¼­¹ö °ü¸®ÀÚ¿¡°Ô º¸¾È»ó ¸î°¡Áö
- ÀáÀçÀûÀÎ À§ÇèÀÌ´Ù.</p>
-
- <p>ù¹ø° À§ÇèÀº ¼­¹öÀÇ ºÎÇϸ¦ ´Ã¸®´Â Á¡ÀÌ´Ù. ¾ÆÆÄÄ¡´Â ÆÄÀÏ¿¡
- SSI Áö½Ã¾î°¡ ÀÖ´ÂÁö ¿©ºÎ¿Í °ü°è¾øÀÌ ¸ðµç SSI ÆÄÀÏÀ» ºÐ¼®Çؾß
- ÇÑ´Ù. Á¶±Ý ºÎÇÏ°¡ ´ÃÁö¸¸, ¼­¹ö¸¦ ¿©·¯ »ç¶÷ÀÌ °°ÀÌ »ç¿ëÇÏ´Â
- ȯ°æ¿¡¼­´Â ½É°¢ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¶Ç, SSI ÆÄÀÏÀº ÀϹÝÀûÀÎ CGI ½ºÅ©¸³Æ®¿Í µ¿ÀÏÇÑ À§ÇèÀ»
- °¡Áø´Ù. SSI ÆÄÀÏ¿¡¼­ "exec cmd"¸¦ »ç¿ëÇϸé httpd.conf¿¡¼­
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϵµ·Ï ¼³Á¤ÇÑ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑÀ¸·Î CGI
- ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀåÁ¡À» È°¿ëÇϸ鼭 SSI ÆÄÀÏÀÇ º¸¾ÈÀ» Çâ»ó½ÃÅ°´Â ¹æ¹ýÀÌ
- ÀÖ´Ù.</p>
-
- <p>SSI ÆÄÀÏÀÌ °¡Á®¿Ã ¼ö ÀÖ´Â ÇÇÇظ¦ °Ý¸®ÇϱâÀ§ÇØ ¼­¹ö°ü¸®ÀÚ´Â
- <a href="#cgi">ÀϹÝÀûÀÎ CGI</a> Àý¿¡¼­ ¼³¸íÇÏ´Â ¹æ¹ýÀ¸·Î
- <a href="../suexec.html">suexec</a>¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù</p>
-
- <p>.htmlÀ̳ª .htm È®ÀåÀÚ¸¦ SSI ÆÄÀÏ·Î »ç¿ëÇÏ´Â °ÍÀº À§ÇèÇÏ´Ù.
- ƯÈ÷ ¿©·¯ »ç¶÷ÀÌ °øÀ¯Çϰųª Åë½Å·®ÀÌ ¸¹Àº ¼­¹ö ȯ°æ¿¡¼­
- À§ÇèÇÏ´Ù. SSI ÆÄÀÏÀº ÀϹÝÀûÀ¸·Î ¸¹ÀÌ »ç¿ëÇÏ´Â .shtml °°Àº
- º°µµÀÇ È®ÀåÀÚ¸¦ °¡Á®¾ß ÇÑ´Ù. ±×·¯¸é ¼­¹ö ºÎÇϸ¦ ÃÖ¼ÒÈ­ÇÏ°í
- À§Çè¿ä¼Ò¸¦ ½±°Ô °ü¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>´Ù¸¥ ¹æ¹ýÀº SSI ÆäÀÌÁö°¡ ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥À» ½ÇÇàÇÏÁö
- ¸øÇϵµ·Ï ¸¸µå´Â °ÍÀÌ´Ù. <directive
- module="core">Options</directive> Áö½Ã¾î¿¡¼­ <code>Includes</code>
- ´ë½Å <code>IncludesNOEXEC</code>¸¦ »ç¿ëÇÑ´Ù. ±×·¡µµ ½ºÅ©¸³Æ®°¡
- <directive module="mod_alias">ScriptAlias</directive> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ ÀÖ´Ù¸é &lt;--#include virtual="..." --&gt;¸¦
- »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- </section>
-
- <section id="cgi">
-
- <title>ÀϹÝÀûÀÎ CGI</title>
-
- <p>°á±¹ ´ç½ÅÀº Ç×»ó CGI ½ºÅ©¸³Æ®/ÇÁ·Î±×·¥ÀÇ ÀúÀÚ¸¦ ½Å·ÚÇؾß
- ÇÏ°í, °íÀÇ°Ç ½Ç¼öÀÌ°Ç CGIÀÇ ÀáÀçÀûÀÎ º¸¾È»ó ÇãÁ¡À» ¹ß°ßÇÒ
- ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±âº»ÀûÀ¸·Î CGI ½ºÅ©¸³Æ®´Â À¥¼­¹ö »ç¿ëÀÚ
- ±ÇÇÑÀ¸·Î ½Ã½ºÅÛ¿¡¼­ ¾î¶² ¸í·É¾î¶óµµ ½ÇÇàÇÒ ¼ö Àֱ⶧¹®¿¡
- ÁÖÀÇÀÖ°Ô È®ÀÎÇÏÁö ¾ÊÀ¸¸é ¸Å¿ì À§ÇèÇÏ´Ù.</p>
-
- <p>¸ðµç CGI ½ºÅ©¸³Æ®°¡ °°Àº »ç¿ëÀÚ·Î ½ÇÇàµÇ±â¶§¹®¿¡ ´Ù¸¥
- ½ºÅ©¸³Æ®¿Í (°íÀÇ°Ç ½Ç¼öÀÌ°Ç) Ãæµ¹ÇÒ °¡´É¼ºÀÌ ÀÖ´Ù. ¿¹¸¦
- µé¾î, »ç¿ëÀÚ A´Â »ç¿ëÀÚ B¸¦ ¸Å¿ì ½È¾îÇÏ¿©, »ç¿ëÀÚ BÀÇ CGI
- µ¥ÀÌÅͺ£À̽º¸¦ Áö¿ö¹ö¸®´Â ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡
- 1.2 ¹öÀüºÎÅÍ Æ÷ÇԵǾú°í ¾ÆÆÄÄ¡ ¼­¹ö¿¡¼­ Ưº°ÇÑ ÈÅ(hook)À¸·Î
- µ¿ÀÛÇÏ´Â <a href="../suexec.html">suEXEC</a>´Â ½ºÅ©¸³Æ®¸¦
- ´Ù¸¥ »ç¿ëÀÚ·Î ½ÇÇàÇÏ´Â ¹æ¹ýÁß Çϳª´Ù. ´Ù¸¥ ´ëÁßÀûÀÎ ¹æ¹ý¿¡´Â
- <a href="http://cgiwrap.unixtools.org/">CGIWrap</a>ÀÌ ÀÖ´Ù.</p>
-
- </section>
-
- <section id="nsaliasedcgi">
-
- <title>ScriptAliasÇÏÁö ¾ÊÀº CGI</title>
-
- <p>´ÙÀ½ Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ »ç¿ëÀÚ°¡ ¾î¶² µð·ºÅ丮¿¡¼­¶óµµ
- CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>´ç½ÅÀº °íÀÇ°Ç ½Ç¼öÀÌ°Ç »ç¿ëÀÚ°¡ ½Ã½ºÅÛÀ» °ø°Ý¿¡ ³ëÃâ½ÃÅ°´Â
- ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏÁö ¾Ê´Â´Ù°í ¹Ï´Â´Ù.</li>
- <li>½Ã½ºÅÛÀÇ ´Ù¸¥ ºÎºÐÀÇ º¸¾ÈÀÌ ¾àÇؼ­, ÀáÀçÀûÀÎ ÇãÁ¡À»
- Çϳª ´õ ¸¸µé¾îµµ ³ªºüÁú °ÍÀÌ ¾ø´Ù°í »ý°¢ÇÏ´Â °æ¿ì.</li>
- <li>»ç¿ëÀÚ°¡ ¾ø°í, ¾Æ¸¶ ¾Æ¹«µµ ¼­¹ö¸¦ ¹æ¹®ÇÏÁö¾Ê´Â °æ¿ì.</li>
- </ul>
-
- </section>
-
- <section id="saliasedcgi">
-
- <title>ScriptAliasÇÑ CGI</title>
-
- <p>ƯÁ¤ µð·ºÅ丮¿¡¼­¸¸ CGI¸¦ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Á¦ÇÑÇÏ¸é °ü¸®ÀÚ´Â
- ÀÌµé µð·ºÅ丮¸¦ ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì´Â scriptaliasÇÏÁö
- ¾ÊÀº CGIº¸´Ù È®½ÇÈ÷ ¾ÈÀüÇÏ´Ù. ´Ü, ½Å·ÚÇÏ´Â »ç¿ëÀÚ¸¸ µð·ºÅ丮¿¡
- Á¢±ÙÇÒ ¼ö ÀÖ°í, °ü¸®ÀÚ°¡ »õ·Î¿î CGI ½ºÅ©¸³Æ®/ÇÁ·Î±×·¥ÀÇ
- ÀáÀçÀûÀÎ º¸¾È»ó ÇãÁ¡À» °Ë»çÇÒ ¿ëÀÌ°¡ ÀÖ´Ù¸é.</p>
-
- <p>´ëºÎºÐÀÇ »çÀÌÆ®´Â scriptaliasÇÏÁö ¾ÊÀº CGI ¹æ½Ä ´ë½Å
- ÀÌ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.</p>
-
- </section>
-
- <section id="dynamic">
-
- <title>µ¿Àû ³»¿ëÀ» »ý¼ºÇÏ´Â ´Ù¸¥ ¹æ¹ý</title>
-
- <p>
- mod_php, mod_perl, mod_tcl, mod_python °°ÀÌ ¼­¹öÀÇ ÀϺηÎ
- µ¿ÀÛÇÏ´Â ÀÓº£µðµå ½ºÅ©¸³Æ®´Â ¼­¹ö¿Í °°Àº »ç¿ëÀÚ·Î (<directive
- module="mpm_common">User</directive> Áö½Ã¾î Âü°í) ½ÇÇàµÇ±â¶§¹®¿¡,
- ½ºÅ©¸³Æ® ¿£ÁøÀÌ ½ÇÇàÇÏ´Â ½ºÅ©¸³Æ®´Â ÀáÀçÀûÀ¸·Î ¼­¹ö »ç¿ëÀÚ°¡
- Á¢±ÙÇÒ ¼ö ÀÖ´Â ¸ðµç °Í¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ¾î¶² ½ºÅ©¸³Æ® ¿£ÁøÀº
- ¾î´ÀÁ¤µµ Á¦ÇÑÀ» ÇÏÁö¸¸, ¾ÈÀüÇÏ´Ù°í °¡Á¤ÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.</p>
-
- </section>
-
- <section id="systemsettings">
-
- <title>½Ã½ºÅÛ ¼³Á¤ º¸È£Çϱâ</title>
-
- <p>Á¤¸»·Î ¾ÈÀüÇÑ ¼­¹ö¸¦ ¿î¿µÇÏ·Á¸é »ç¿ëÀÚ°¡
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÏ¿© ´ç½ÅÀÌ ¼³Á¤ÇÑ º¸¾È±â´ÉÀ»
- º¯°æÇÏ±æ ¹Ù¶óÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯±âÀ§ÇØ ´ÙÀ½°ú °°Àº ¹æ¹ýÀÌ
- ÀÖ´Ù.</p>
-
- <p>¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù</p>
-
- <example>
- &lt;Directory /&gt; <br />
- AllowOverride None <br />
- &lt;/Directory&gt;
- </example>
-
- <p>±×·¯¸é »ç¿ë°¡´ÉÇϵµ·Ï ¸í½ÃÀûÀ¸·Î Çã¿ëÇÑ µð·ºÅ丮¸¦ Á¦¿ÜÇÏ°í´Â
- <code>.htaccess</code> ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- </section>
-
- <section id="protectserverfiles">
-
- <title>±âº»ÀûÀ¸·Î ¼­¹ö¿¡ ÀÖ´Â ÆÄÀÏ º¸È£Çϱâ</title>
-
- <p>»ç¶÷µéÀº Á¾Á¾ ¾ÆÆÄÄ¡ÀÇ ±âº» Á¢±Ù¿¡ ´ëÇØ À߸ø ¾Ë°íÀÖ´Ù.
- Áï, ¼­¹ö°¡ ÀϹÝÀûÀÎ URL ´ëÀÀ ±ÔÄ¢À» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ãÀ»
- ¼ö ÀÖ´Ù¸é, Ưº°È÷ Á¶Ä¡¸¦ ÇÏÁö ¾Ê´ÂÇÑ Å¬¶óÀ̾ðÆ®¿¡°Ô ÆÄÀÏÀÌ
- ¼­ºñ½ºµÉ ¼ö ÀÖ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, ¾Æ·¡¿Í °°Àº °æ¿ì:</p>
-
- <example>
- # cd /; ln -s / public_html <br />
- <code>http://localhost/~root/</code> ¿¡ Á¢±ÙÇÑ´Ù
- </example>
-
- <p>±×·¯¸é Ŭ¶óÀ̾ðÆ®´Â Àüü ÆÄÀϽýºÅÛÀ» µ¹¾Æ´Ù´Ò ¼ö ÀÖ´Ù.
- À̸¦ ¸·±âÀ§ÇØ ¼­¹ö¼³Á¤¿¡¼­ ´ÙÀ½°ú °°Àº Á¶Ä¡¸¦ ÇÑ´Ù:</p>
-
- <example>
- &lt;Directory /&gt; <br />
- Order Deny,Allow <br />
- Deny from all <br />
- &lt;/Directory&gt;
- </example>
-
- <p>±×·¯¸é ÆÄÀϽýºÅÛ À§Ä¡¿¡ ´ëÇØ ±âº» Á¢±ÙÀÌ °ÅºÎµÈ´Ù.
- ¿øÇÏ´Â ¿µ¿ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ´ÙÀ½°ú °°Àº <directive
- module="core">Directory</directive> ºí·ÏÀ» Ãß°¡ÇÑ´Ù.</p>
-
- <example>
- &lt;Directory /usr/users/*/public_html&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt; <br />
- &lt;Directory /usr/local/httpd&gt; <br />
- Order Deny,Allow <br />
- Allow from all <br />
- &lt;/Directory&gt;
- </example>
-
- <p><directive module="core">Location</directive>°ú <directive
- module="core">Directory</directive> Áö½Ã¾î¸¦ °°ÀÌ »ç¿ëÇÏ´Â
- °æ¿ì Ưº°È÷ ÁÖÀǸ¦ ±â¿ï¿©¶ó. ¿¹¸¦ µé¾î, <code>&lt;Directory
- /&gt;</code>°¡ Á¢±ÙÀ» °ÅºÎÇÏ´õ¶óµµ <code>&lt;Location
- /&gt;</code> Áö½Ã¾î°¡ À̸¦ ¹«½ÃÇÒ ¼ö ÀÖ´Ù</p>
-
- <p><directive module="mod_userdir">UserDir</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ´Â °æ¿ì¿¡µµ ÁÖÀÇÇ϶ó. Áö½Ã¾î¸¦ "./" °°ÀÌ ¼³Á¤Çϸé
- root »ç¿ëÀÚ¿¡ ´ëÇØ ¹Ù·Î À§ÀÇ °æ¿ì¿Í °°Àº ¹®Á¦°¡ ¹ß»ýÇÑ´Ù.
- ¾ÆÆÄÄ¡ 1.3 ÀÌ»óÀ» »ç¿ëÇÑ´Ù¸é ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡ ¾Æ·¡ ÁÙÀ» Ãß°¡Çϱæ
- °­·ÂÈ÷ ±ÇÇÑ´Ù:</p>
-
- <example>
- UserDir disabled root
- </example>
-
- </section>
-
- <section id="watchyourlogs">
-
- <title>·Î±× »ìÆ캸±â</title>
-
- <p>½ÇÁ¦·Î ¼­¹ö¿¡¼­ ¹«½¼ ÀÏÀÌ À־°í ÀÖ´ÂÁö ¾Ë·Á¸é <a
- href="../logs.html">·Î±×ÆÄÀÏ</a>À» »ìÆìºÁ¾ß ÇÑ´Ù. ·Î±×ÆÄÀÏÀº
- ÀÌ¹Ì ÀϾ Àϸ¸À» º¸°íÇÏÁö¸¸, ¼­¹ö¿¡ ¾î¶² °ø°ÝÀÌ ÀÖ¾ú´ÂÁö
- ¾Ë·ÁÁÖ°í ÇöÀç ÇÊ¿äÇÑ ¸¸Å­ ¾ÈÀüÇÑÁö È®ÀÎÇÏ°Ô ÇØÁØ´Ù.</p>
-
- <p>¿©·¯°¡Áö ¿¹:</p>
-
- <example>
- grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
- grep "client denied" error_log | tail -n 10
- </example>
-
- <p>ù¹ø° ¿¹´Â <a
- href="http://online.securityfocus.com/bid/4876/info/">À߸øµÈ
- Source.JSP ¿äûÀ¸·Î ¼­¹öÁ¤º¸¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Â TomcatÀÇ
- Ãë¾àÁ¡</a>¸¦ ÀÌ¿ëÇÏ·Á´Â °ø°Ý Ƚ¼ö¸¦ ¾Ë·ÁÁÖ°í, µÎ¹ø° ¿¹´Â
- Á¢±ÙÀÌ °ÅºÎµÈ Ãֱ٠Ŭ¶óÀ̾ðÆ® 10°³¸¦ ´ÙÀ½°ú °°ÀÌ º¸¿©ÁØ´Ù:</p>
-
- <example>
- [Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied
- by server configuration: /usr/local/apache/htdocs/.htpasswd
- </example>
-
- <p>Àß ¾Ë µíÀÌ ·Î±×ÆÄÀÏÀº ÀÌ¹Ì ¹ß»ýÇÑ »ç°Ç¸¸À» º¸°íÇÑ´Ù.
- ±×·¡¼­ Ŭ¶óÀ̾ðÆ®°¡ <code>.htpasswd</code> ÆÄÀÏ¿¡ Á¢±ÙÇÒ
- ¼ö ÀÖ¾ú´Ù¸é <a href="../logs.html#accesslog">Á¢±Ù ·Î±×</a>¿¡
- ´ÙÀ½°ú °°Àº ±â·ÏÀÌ ³²À» °ÍÀÌ´Ù:</p>
-
- <example>
- foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
- </example>
-
- <p>Áï, ´ç½ÅÀº ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡¼­ ´ÙÀ½ ºÎºÐÀ» ÁÖ¼®Ã³¸®ÇßÀ»
- °ÍÀÌ´Ù:</p>
-
- <example>
- &lt;Files ~ "^\.ht"&gt; <br />
- Order allow,deny <br />
- Deny from all <br />
- &lt;Files&gt;
- </example>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/misc/security_tips.xml.meta b/docs/manual/misc/security_tips.xml.meta
deleted file mode 100644
index e1184d8431..0000000000
--- a/docs/manual/misc/security_tips.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>security_tips</basename>
- <path>/misc/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/.cvsignore b/docs/manual/mod/.cvsignore
deleted file mode 100644
index aabd904ad8..0000000000
--- a/docs/manual/mod/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.tex
-*.aux
-.translated.*
diff --git a/docs/manual/mod/allmodules.xml b/docs/manual/mod/allmodules.xml
deleted file mode 100644
index ea78f5413f..0000000000
--- a/docs/manual/mod/allmodules.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<modulefilelist>
- <modulefile>core.xml</modulefile>
- <modulefile>mod_actions.xml</modulefile>
- <modulefile>mod_alias.xml</modulefile>
- <modulefile>mod_asis.xml</modulefile>
- <modulefile>mod_auth_basic.xml</modulefile>
- <modulefile>mod_auth_digest.xml</modulefile>
- <modulefile>mod_auth_ldap.xml</modulefile>
- <modulefile>mod_authn_anon.xml</modulefile>
- <modulefile>mod_authn_dbm.xml</modulefile>
- <modulefile>mod_authn_default.xml</modulefile>
- <modulefile>mod_authn_file.xml</modulefile>
- <modulefile>mod_authz_dbm.xml</modulefile>
- <modulefile>mod_authz_default.xml</modulefile>
- <modulefile>mod_authz_groupfile.xml</modulefile>
- <modulefile>mod_authz_host.xml</modulefile>
- <modulefile>mod_authz_owner.xml</modulefile>
- <modulefile>mod_authz_user.xml</modulefile>
- <modulefile>mod_autoindex.xml</modulefile>
- <modulefile>mod_cache.xml</modulefile>
- <modulefile>mod_cern_meta.xml</modulefile>
- <modulefile>mod_cgi.xml</modulefile>
- <modulefile>mod_cgid.xml</modulefile>
- <modulefile>mod_charset_lite.xml</modulefile>
- <modulefile>mod_dav.xml</modulefile>
- <modulefile>mod_dav_fs.xml</modulefile>
- <modulefile>mod_dav_lock.xml</modulefile>
- <modulefile>mod_deflate.xml</modulefile>
- <modulefile>mod_dir.xml</modulefile>
- <modulefile>mod_disk_cache.xml</modulefile>
- <modulefile>mod_echo.xml</modulefile>
- <modulefile>mod_env.xml</modulefile>
- <modulefile>mod_example.xml</modulefile>
- <modulefile>mod_expires.xml</modulefile>
- <modulefile>mod_ext_filter.xml</modulefile>
- <modulefile>mod_file_cache.xml</modulefile>
- <modulefile>mod_headers.xml</modulefile>
- <modulefile>mod_ident.xml</modulefile>
- <modulefile>mod_imap.xml</modulefile>
- <modulefile>mod_include.xml</modulefile>
- <modulefile>mod_info.xml</modulefile>
- <modulefile>mod_isapi.xml</modulefile>
- <modulefile>mod_ldap.xml</modulefile>
- <modulefile>mod_log_config.xml</modulefile>
- <modulefile>mod_log_forensic.xml</modulefile>
- <modulefile>mod_logio.xml</modulefile>
- <modulefile>mod_mem_cache.xml</modulefile>
- <modulefile>mod_mime.xml</modulefile>
- <modulefile>mod_mime_magic.xml</modulefile>
- <modulefile>mod_negotiation.xml</modulefile>
- <modulefile>mod_nw_ssl.xml</modulefile>
- <modulefile>mod_proxy.xml</modulefile>
- <modulefile>mod_proxy_connect.xml</modulefile>
- <modulefile>mod_proxy_ftp.xml</modulefile>
- <modulefile>mod_proxy_http.xml</modulefile>
- <modulefile>mod_rewrite.xml</modulefile>
- <modulefile>mod_setenvif.xml</modulefile>
- <modulefile>mod_so.xml</modulefile>
- <modulefile>mod_speling.xml</modulefile>
- <modulefile>mod_ssl.xml</modulefile>
- <modulefile>mod_status.xml</modulefile>
- <modulefile>mod_suexec.xml</modulefile>
- <modulefile>mod_unique_id.xml</modulefile>
- <modulefile>mod_userdir.xml</modulefile>
- <modulefile>mod_usertrack.xml</modulefile>
- <modulefile>mod_version.xml</modulefile>
- <modulefile>mod_vhost_alias.xml</modulefile>
- <modulefile>beos.xml</modulefile>
- <modulefile>mpm_common.xml</modulefile>
- <modulefile>leader.xml</modulefile>
- <modulefile>mpm_netware.xml</modulefile>
- <modulefile>mpmt_os2.xml</modulefile>
- <modulefile>perchild.xml</modulefile>
- <modulefile>prefork.xml</modulefile>
- <modulefile>threadpool.xml</modulefile>
- <modulefile>mpm_winnt.xml</modulefile>
- <modulefile>worker.xml</modulefile>
-</modulefilelist>
diff --git a/docs/manual/mod/allmodules.xml.de b/docs/manual/mod/allmodules.xml.de
deleted file mode 100644
index 32bcccc084..0000000000
--- a/docs/manual/mod/allmodules.xml.de
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<modulefilelist>
- <modulefile>core.xml.de</modulefile>
- <modulefile>mod_actions.xml.de</modulefile>
- <modulefile>mod_alias.xml</modulefile>
- <modulefile>mod_asis.xml</modulefile>
- <modulefile>mod_auth_basic.xml</modulefile>
- <modulefile>mod_auth_digest.xml</modulefile>
- <modulefile>mod_auth_ldap.xml</modulefile>
- <modulefile>mod_authn_anon.xml</modulefile>
- <modulefile>mod_authn_dbm.xml</modulefile>
- <modulefile>mod_authn_default.xml</modulefile>
- <modulefile>mod_authn_file.xml</modulefile>
- <modulefile>mod_authz_dbm.xml</modulefile>
- <modulefile>mod_authz_default.xml</modulefile>
- <modulefile>mod_authz_groupfile.xml</modulefile>
- <modulefile>mod_authz_host.xml</modulefile>
- <modulefile>mod_authz_owner.xml</modulefile>
- <modulefile>mod_authz_user.xml</modulefile>
- <modulefile>mod_autoindex.xml</modulefile>
- <modulefile>mod_cache.xml</modulefile>
- <modulefile>mod_cern_meta.xml</modulefile>
- <modulefile>mod_cgi.xml</modulefile>
- <modulefile>mod_cgid.xml</modulefile>
- <modulefile>mod_charset_lite.xml</modulefile>
- <modulefile>mod_dav.xml</modulefile>
- <modulefile>mod_dav_fs.xml</modulefile>
- <modulefile>mod_dav_lock.xml</modulefile>
- <modulefile>mod_deflate.xml</modulefile>
- <modulefile>mod_dir.xml</modulefile>
- <modulefile>mod_disk_cache.xml</modulefile>
- <modulefile>mod_echo.xml</modulefile>
- <modulefile>mod_env.xml</modulefile>
- <modulefile>mod_example.xml</modulefile>
- <modulefile>mod_expires.xml</modulefile>
- <modulefile>mod_ext_filter.xml</modulefile>
- <modulefile>mod_file_cache.xml</modulefile>
- <modulefile>mod_headers.xml</modulefile>
- <modulefile>mod_ident.xml</modulefile>
- <modulefile>mod_imap.xml</modulefile>
- <modulefile>mod_include.xml</modulefile>
- <modulefile>mod_info.xml</modulefile>
- <modulefile>mod_isapi.xml</modulefile>
- <modulefile>mod_ldap.xml</modulefile>
- <modulefile>mod_log_config.xml</modulefile>
- <modulefile>mod_log_forensic.xml</modulefile>
- <modulefile>mod_logio.xml</modulefile>
- <modulefile>mod_mem_cache.xml</modulefile>
- <modulefile>mod_mime.xml</modulefile>
- <modulefile>mod_mime_magic.xml</modulefile>
- <modulefile>mod_negotiation.xml</modulefile>
- <modulefile>mod_nw_ssl.xml</modulefile>
- <modulefile>mod_proxy.xml</modulefile>
- <modulefile>mod_proxy_connect.xml</modulefile>
- <modulefile>mod_proxy_ftp.xml</modulefile>
- <modulefile>mod_proxy_http.xml</modulefile>
- <modulefile>mod_rewrite.xml</modulefile>
- <modulefile>mod_setenvif.xml</modulefile>
- <modulefile>mod_so.xml</modulefile>
- <modulefile>mod_speling.xml</modulefile>
- <modulefile>mod_ssl.xml</modulefile>
- <modulefile>mod_status.xml</modulefile>
- <modulefile>mod_suexec.xml</modulefile>
- <modulefile>mod_unique_id.xml</modulefile>
- <modulefile>mod_userdir.xml</modulefile>
- <modulefile>mod_usertrack.xml</modulefile>
- <modulefile>mod_version.xml</modulefile>
- <modulefile>mod_vhost_alias.xml</modulefile>
- <modulefile>beos.xml.de</modulefile>
- <modulefile>mpm_common.xml.de</modulefile>
- <modulefile>leader.xml.de</modulefile>
- <modulefile>mpm_netware.xml</modulefile>
- <modulefile>mpmt_os2.xml</modulefile>
- <modulefile>perchild.xml</modulefile>
- <modulefile>prefork.xml.de</modulefile>
- <modulefile>threadpool.xml</modulefile>
- <modulefile>mpm_winnt.xml.de</modulefile>
- <modulefile>worker.xml.de</modulefile>
-</modulefilelist>
diff --git a/docs/manual/mod/allmodules.xml.es b/docs/manual/mod/allmodules.xml.es
deleted file mode 100644
index 8f859fc092..0000000000
--- a/docs/manual/mod/allmodules.xml.es
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<modulefilelist>
- <modulefile>core.xml</modulefile>
- <modulefile>mod_actions.xml</modulefile>
- <modulefile>mod_alias.xml</modulefile>
- <modulefile>mod_asis.xml</modulefile>
- <modulefile>mod_auth_basic.xml</modulefile>
- <modulefile>mod_auth_digest.xml</modulefile>
- <modulefile>mod_auth_ldap.xml</modulefile>
- <modulefile>mod_authn_anon.xml</modulefile>
- <modulefile>mod_authn_dbm.xml</modulefile>
- <modulefile>mod_authn_default.xml</modulefile>
- <modulefile>mod_authn_file.xml</modulefile>
- <modulefile>mod_authz_dbm.xml</modulefile>
- <modulefile>mod_authz_default.xml</modulefile>
- <modulefile>mod_authz_groupfile.xml</modulefile>
- <modulefile>mod_authz_host.xml</modulefile>
- <modulefile>mod_authz_owner.xml</modulefile>
- <modulefile>mod_authz_user.xml</modulefile>
- <modulefile>mod_autoindex.xml</modulefile>
- <modulefile>mod_cache.xml</modulefile>
- <modulefile>mod_cern_meta.xml</modulefile>
- <modulefile>mod_cgi.xml</modulefile>
- <modulefile>mod_cgid.xml</modulefile>
- <modulefile>mod_charset_lite.xml</modulefile>
- <modulefile>mod_dav.xml</modulefile>
- <modulefile>mod_dav_fs.xml</modulefile>
- <modulefile>mod_dav_lock.xml</modulefile>
- <modulefile>mod_deflate.xml</modulefile>
- <modulefile>mod_dir.xml</modulefile>
- <modulefile>mod_disk_cache.xml</modulefile>
- <modulefile>mod_echo.xml</modulefile>
- <modulefile>mod_env.xml</modulefile>
- <modulefile>mod_example.xml</modulefile>
- <modulefile>mod_expires.xml</modulefile>
- <modulefile>mod_ext_filter.xml</modulefile>
- <modulefile>mod_file_cache.xml</modulefile>
- <modulefile>mod_headers.xml</modulefile>
- <modulefile>mod_ident.xml</modulefile>
- <modulefile>mod_imap.xml</modulefile>
- <modulefile>mod_include.xml</modulefile>
- <modulefile>mod_info.xml</modulefile>
- <modulefile>mod_isapi.xml</modulefile>
- <modulefile>mod_ldap.xml</modulefile>
- <modulefile>mod_log_config.xml</modulefile>
- <modulefile>mod_log_forensic.xml</modulefile>
- <modulefile>mod_logio.xml</modulefile>
- <modulefile>mod_mem_cache.xml</modulefile>
- <modulefile>mod_mime.xml</modulefile>
- <modulefile>mod_mime_magic.xml</modulefile>
- <modulefile>mod_negotiation.xml</modulefile>
- <modulefile>mod_nw_ssl.xml</modulefile>
- <modulefile>mod_proxy.xml</modulefile>
- <modulefile>mod_proxy_connect.xml</modulefile>
- <modulefile>mod_proxy_ftp.xml</modulefile>
- <modulefile>mod_proxy_http.xml</modulefile>
- <modulefile>mod_rewrite.xml</modulefile>
- <modulefile>mod_setenvif.xml</modulefile>
- <modulefile>mod_so.xml</modulefile>
- <modulefile>mod_speling.xml</modulefile>
- <modulefile>mod_ssl.xml</modulefile>
- <modulefile>mod_status.xml</modulefile>
- <modulefile>mod_suexec.xml</modulefile>
- <modulefile>mod_unique_id.xml</modulefile>
- <modulefile>mod_userdir.xml</modulefile>
- <modulefile>mod_usertrack.xml</modulefile>
- <modulefile>mod_version.xml</modulefile>
- <modulefile>mod_vhost_alias.xml</modulefile>
- <modulefile>beos.xml.es</modulefile>
- <modulefile>mpm_common.xml</modulefile>
- <modulefile>leader.xml</modulefile>
- <modulefile>mpm_netware.xml</modulefile>
- <modulefile>mpmt_os2.xml</modulefile>
- <modulefile>perchild.xml</modulefile>
- <modulefile>prefork.xml</modulefile>
- <modulefile>threadpool.xml</modulefile>
- <modulefile>mpm_winnt.xml</modulefile>
- <modulefile>worker.xml</modulefile>
-</modulefilelist>
diff --git a/docs/manual/mod/allmodules.xml.ja b/docs/manual/mod/allmodules.xml.ja
deleted file mode 100644
index 5433097490..0000000000
--- a/docs/manual/mod/allmodules.xml.ja
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<modulefilelist>
- <modulefile>core.xml.ja</modulefile>
- <modulefile>mod_actions.xml.ja</modulefile>
- <modulefile>mod_alias.xml.ja</modulefile>
- <modulefile>mod_asis.xml.ja</modulefile>
- <modulefile>mod_auth_basic.xml.ja</modulefile>
- <modulefile>mod_auth_digest.xml</modulefile>
- <modulefile>mod_auth_ldap.xml</modulefile>
- <modulefile>mod_authn_anon.xml.ja</modulefile>
- <modulefile>mod_authn_dbm.xml.ja</modulefile>
- <modulefile>mod_authn_default.xml.ja</modulefile>
- <modulefile>mod_authn_file.xml.ja</modulefile>
- <modulefile>mod_authz_dbm.xml</modulefile>
- <modulefile>mod_authz_default.xml.ja</modulefile>
- <modulefile>mod_authz_groupfile.xml.ja</modulefile>
- <modulefile>mod_authz_host.xml.ja</modulefile>
- <modulefile>mod_authz_owner.xml</modulefile>
- <modulefile>mod_authz_user.xml</modulefile>
- <modulefile>mod_autoindex.xml.ja</modulefile>
- <modulefile>mod_cache.xml</modulefile>
- <modulefile>mod_cern_meta.xml</modulefile>
- <modulefile>mod_cgi.xml.ja</modulefile>
- <modulefile>mod_cgid.xml.ja</modulefile>
- <modulefile>mod_charset_lite.xml</modulefile>
- <modulefile>mod_dav.xml.ja</modulefile>
- <modulefile>mod_dav_fs.xml.ja</modulefile>
- <modulefile>mod_dav_lock.xml</modulefile>
- <modulefile>mod_deflate.xml.ja</modulefile>
- <modulefile>mod_dir.xml.ja</modulefile>
- <modulefile>mod_disk_cache.xml</modulefile>
- <modulefile>mod_echo.xml.ja</modulefile>
- <modulefile>mod_env.xml.ja</modulefile>
- <modulefile>mod_example.xml</modulefile>
- <modulefile>mod_expires.xml.ja</modulefile>
- <modulefile>mod_ext_filter.xml</modulefile>
- <modulefile>mod_file_cache.xml</modulefile>
- <modulefile>mod_headers.xml.ja</modulefile>
- <modulefile>mod_ident.xml</modulefile>
- <modulefile>mod_imap.xml</modulefile>
- <modulefile>mod_include.xml.ja</modulefile>
- <modulefile>mod_info.xml.ja</modulefile>
- <modulefile>mod_isapi.xml</modulefile>
- <modulefile>mod_ldap.xml</modulefile>
- <modulefile>mod_log_config.xml.ja</modulefile>
- <modulefile>mod_log_forensic.xml</modulefile>
- <modulefile>mod_logio.xml.ja</modulefile>
- <modulefile>mod_mem_cache.xml</modulefile>
- <modulefile>mod_mime.xml.ja</modulefile>
- <modulefile>mod_mime_magic.xml</modulefile>
- <modulefile>mod_negotiation.xml.ja</modulefile>
- <modulefile>mod_nw_ssl.xml</modulefile>
- <modulefile>mod_proxy.xml</modulefile>
- <modulefile>mod_proxy_connect.xml</modulefile>
- <modulefile>mod_proxy_ftp.xml</modulefile>
- <modulefile>mod_proxy_http.xml</modulefile>
- <modulefile>mod_rewrite.xml</modulefile>
- <modulefile>mod_setenvif.xml.ja</modulefile>
- <modulefile>mod_so.xml.ja</modulefile>
- <modulefile>mod_speling.xml.ja</modulefile>
- <modulefile>mod_ssl.xml</modulefile>
- <modulefile>mod_status.xml.ja</modulefile>
- <modulefile>mod_suexec.xml.ja</modulefile>
- <modulefile>mod_unique_id.xml.ja</modulefile>
- <modulefile>mod_userdir.xml.ja</modulefile>
- <modulefile>mod_usertrack.xml</modulefile>
- <modulefile>mod_version.xml</modulefile>
- <modulefile>mod_vhost_alias.xml</modulefile>
- <modulefile>beos.xml</modulefile>
- <modulefile>mpm_common.xml.ja</modulefile>
- <modulefile>leader.xml</modulefile>
- <modulefile>mpm_netware.xml</modulefile>
- <modulefile>mpmt_os2.xml</modulefile>
- <modulefile>perchild.xml</modulefile>
- <modulefile>prefork.xml.ja</modulefile>
- <modulefile>threadpool.xml</modulefile>
- <modulefile>mpm_winnt.xml.ja</modulefile>
- <modulefile>worker.xml.ja</modulefile>
-</modulefilelist>
diff --git a/docs/manual/mod/allmodules.xml.ko b/docs/manual/mod/allmodules.xml.ko
deleted file mode 100644
index b220ac8587..0000000000
--- a/docs/manual/mod/allmodules.xml.ko
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<modulefilelist>
- <modulefile>core.xml</modulefile>
- <modulefile>mod_actions.xml.ko</modulefile>
- <modulefile>mod_alias.xml.ko</modulefile>
- <modulefile>mod_asis.xml.ko</modulefile>
- <modulefile>mod_auth_basic.xml.ko</modulefile>
- <modulefile>mod_auth_digest.xml.ko</modulefile>
- <modulefile>mod_auth_ldap.xml</modulefile>
- <modulefile>mod_authn_anon.xml.ko</modulefile>
- <modulefile>mod_authn_dbm.xml.ko</modulefile>
- <modulefile>mod_authn_default.xml.ko</modulefile>
- <modulefile>mod_authn_file.xml.ko</modulefile>
- <modulefile>mod_authz_dbm.xml.ko</modulefile>
- <modulefile>mod_authz_default.xml.ko</modulefile>
- <modulefile>mod_authz_groupfile.xml.ko</modulefile>
- <modulefile>mod_authz_host.xml.ko</modulefile>
- <modulefile>mod_authz_owner.xml.ko</modulefile>
- <modulefile>mod_authz_user.xml.ko</modulefile>
- <modulefile>mod_autoindex.xml.ko</modulefile>
- <modulefile>mod_cache.xml.ko</modulefile>
- <modulefile>mod_cern_meta.xml.ko</modulefile>
- <modulefile>mod_cgi.xml.ko</modulefile>
- <modulefile>mod_cgid.xml.ko</modulefile>
- <modulefile>mod_charset_lite.xml.ko</modulefile>
- <modulefile>mod_dav.xml.ko</modulefile>
- <modulefile>mod_dav_fs.xml.ko</modulefile>
- <modulefile>mod_dav_lock.xml</modulefile>
- <modulefile>mod_deflate.xml.ko</modulefile>
- <modulefile>mod_dir.xml.ko</modulefile>
- <modulefile>mod_disk_cache.xml.ko</modulefile>
- <modulefile>mod_echo.xml.ko</modulefile>
- <modulefile>mod_env.xml.ko</modulefile>
- <modulefile>mod_example.xml.ko</modulefile>
- <modulefile>mod_expires.xml.ko</modulefile>
- <modulefile>mod_ext_filter.xml.ko</modulefile>
- <modulefile>mod_file_cache.xml.ko</modulefile>
- <modulefile>mod_headers.xml</modulefile>
- <modulefile>mod_ident.xml</modulefile>
- <modulefile>mod_imap.xml</modulefile>
- <modulefile>mod_include.xml</modulefile>
- <modulefile>mod_info.xml</modulefile>
- <modulefile>mod_isapi.xml</modulefile>
- <modulefile>mod_ldap.xml</modulefile>
- <modulefile>mod_log_config.xml</modulefile>
- <modulefile>mod_log_forensic.xml</modulefile>
- <modulefile>mod_logio.xml.ko</modulefile>
- <modulefile>mod_mem_cache.xml</modulefile>
- <modulefile>mod_mime.xml</modulefile>
- <modulefile>mod_mime_magic.xml</modulefile>
- <modulefile>mod_negotiation.xml</modulefile>
- <modulefile>mod_nw_ssl.xml</modulefile>
- <modulefile>mod_proxy.xml</modulefile>
- <modulefile>mod_proxy_connect.xml</modulefile>
- <modulefile>mod_proxy_ftp.xml</modulefile>
- <modulefile>mod_proxy_http.xml</modulefile>
- <modulefile>mod_rewrite.xml</modulefile>
- <modulefile>mod_setenvif.xml.ko</modulefile>
- <modulefile>mod_so.xml.ko</modulefile>
- <modulefile>mod_speling.xml.ko</modulefile>
- <modulefile>mod_ssl.xml</modulefile>
- <modulefile>mod_status.xml.ko</modulefile>
- <modulefile>mod_suexec.xml.ko</modulefile>
- <modulefile>mod_unique_id.xml.ko</modulefile>
- <modulefile>mod_userdir.xml.ko</modulefile>
- <modulefile>mod_usertrack.xml</modulefile>
- <modulefile>mod_version.xml.ko</modulefile>
- <modulefile>mod_vhost_alias.xml</modulefile>
- <modulefile>beos.xml.ko</modulefile>
- <modulefile>mpm_common.xml</modulefile>
- <modulefile>leader.xml.ko</modulefile>
- <modulefile>mpm_netware.xml</modulefile>
- <modulefile>mpmt_os2.xml</modulefile>
- <modulefile>perchild.xml</modulefile>
- <modulefile>prefork.xml</modulefile>
- <modulefile>threadpool.xml</modulefile>
- <modulefile>mpm_winnt.xml</modulefile>
- <modulefile>worker.xml</modulefile>
-</modulefilelist>
diff --git a/docs/manual/mod/beos.html b/docs/manual/mod/beos.html
deleted file mode 100644
index 3d72b3f9fe..0000000000
--- a/docs/manual/mod/beos.html
+++ /dev/null
@@ -1,15 +0,0 @@
-URI: beos.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: beos.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: beos.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: beos.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/beos.html.de b/docs/manual/mod/beos.html.de
deleted file mode 100644
index 621bfa9dd1..0000000000
--- a/docs/manual/mod/beos.html.de
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>beos - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-MPM beos</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/beos.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Dieses Multi-Processing-Modul ist für BeOS
- optimiert.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Modulbezeichner:</a></th><td>mpm_beos_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Quelltext-Datei:</a></th><td>beos.c</td></tr></table>
-<h3>Zusammenfassung</h3>
-
- <p>Dieses Multi-Processing-Modul (MPM) ist das Standardmodul für BeOS.
- Es benutzt einen einzelnen Steuerprozess welcher Threads für die
- Bedienung der Anfragen erzeugt.</p>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Siehe auch</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Adress- und Port-Einstellungen</a>
-</li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerThread" id="MaxRequestsPerThread">MaxRequestsPerThread</a>-<a name="maxrequestsperthread" id="maxrequestsperthread">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Die maximale Anzahl von Anfragen, die ein einzelner Thread
- während seiner Lebensdauer bedient.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxRequestsPerThread <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>MaxRequestsPerThread 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>beos</td></tr>
-</table>
- <p>Die Direktive <code class="directive">MaxRequestsPerThread</code> legt die
- Anzahl der Anfragen fest, die ein einzelner Server-Thread bedient. Nach
- Erreichen der angegebenen Anzahl von Anfragen wird der Thread beendet.
- Wird für <code class="directive">MaxRequestsPerThread</code> der Wert
- <code>0</code> angegeben, wird der Thread niemals beendet.</p>
-
- <p>Das Setzen von <code class="directive">MaxRequestsPerThread</code> auf einen
- Wert ungleich null hat zwei Vorteile:</p>
-
- <ul>
- <li>Die Menge des von einem Thread benötigten Speicherplatzes
- bei (unvorhergesehenen) Speicherproblemen kann begrenzt werden;</li>
-
- <li>Threads mit begrenzter Lebensdauer reduzieren die Anzahl
- der Threads bei reduzierter Serverlast.</li>
- </ul>
-
- <div class="note"><h3>Hinweis:</h3>
- <p>Bei <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>-Anfragen wird nur die
- erste Anfrage auf das Maximum angerechnet. Das führt dazu, dass
- die Anzahl der <em>Verbindungen</em>
- pro Thread reduziert wird.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/beos.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/beos.html.en b/docs/manual/mod/beos.html.en
deleted file mode 100644
index aa08bd7af4..0000000000
--- a/docs/manual/mod/beos.html.en
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>beos - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM beos</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/beos.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>This Multi-Processing Module is optimized for BeOS.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_beos_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>beos.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This Multi-Processing Module (MPM) is the default for BeOS. It uses
- a single control process which creates threads to handle requests.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerThread" id="MaxRequestsPerThread">MaxRequestsPerThread</a> <a name="maxrequestsperthread" id="maxrequestsperthread">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit on the number of requests that an individual thread
-will handle during its life</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxRequestsPerThread <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxRequestsPerThread 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>beos</td></tr>
-</table>
- <p>The <code class="directive">MaxRequestsPerThread</code> directive sets
- the limit on the number of requests that an individual server thread
- will handle. After <code class="directive">MaxRequestsPerThread</code>
- requests, the thread will die. If <code class="directive">MaxRequestsPerThread</code> is <code>0</code>, then the thread
- will never expire.</p>
-
- <p>Setting <code class="directive">MaxRequestsPerThread</code> to a
- non-zero limit has two beneficial effects:</p>
-
- <ul>
- <li>it limits the amount of memory that a thread can consume
- by (accidental) memory leakage;</li>
-
- <li>by giving threads a finite lifetime, it helps reduce
- the number of threads when the server load reduces.</li>
- </ul>
-
- <div class="note"><h3>Note:</h3>
- <p>For <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code> requests, only
- the first request is counted towards this limit. In effect, it
- changes the behavior to limit the number of <em>connections</em>
- per thread.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/beos.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/beos.html.es b/docs/manual/mod/beos.html.es
deleted file mode 100644
index 831c29735b..0000000000
--- a/docs/manual/mod/beos.html.es
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>beos - Servidor HTTP Apache</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="../">Versión 2.1</a> &gt; <a href="./">Módulos</a></div>
-<div id="page-content">
-<div id="preamble"><h1>MPM de Apache beos</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/beos.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Este módulo de muiltiprocesamiento está
-optimizado para BeOS.</td></tr>
-<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>mpm_beos_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>beos.c</td></tr></table>
-<h3>Resumen de contenidos</h3>
-
- <p>Este módulo de muiltiprocesamiento (MMP)
- es el que usa por defecto para BeOS. Usa un
- único proceso de control que crea hebras para atender las
- peticiones.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directivas</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Consulte también</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Configurar las direcciones y los
-puertos que usa Apache</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerThread" id="MaxRequestsPerThread">MaxRequestsPerThread</a> <a name="maxrequestsperthread" id="maxrequestsperthread">Directiva</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Limita el número de peticiones que una hebra (thread) puede
-atender durante su vida</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>MaxRequestsPerThread <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Valor por defecto:</a></th><td><code>MaxRequestsPerThread 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>beos</td></tr>
-</table>
- <p>La directiva <code class="directive">MaxRequestsPerThread</code> fija
- el número máximo de peticiones que una hebra del
- servidor puede atender durante su vida. Despues de atender
- <code class="directive">MaxRequestsPerThread</code> peticiones, la hebra
- termina. Si el límite fijado en <code class="directive">MaxRequestsPerThread</code> es <code>0</code>, entonces la
- hebra puede atender peticiones indefinidamente.</p>
-
- <p>Fijar la directiva <code class="directive">MaxRequestsPerThread</code>
- a un límite distinto de cero ofrece dos benefcios
- fundamentales:</p>
-
- <ul>
- <li>limita la cantidad de memoria que puede consumir una hebra
- si hay una filtración (accidental) de memoria;</li>
-
- <li>poniendo un límite a la vida de las hebras, se ayuda a
- reducir el número de hebras cuando se reduce la carga de
- trabajo en el servidor.</li>
- </ul>
-
- <div class="note"><h3>Nota:</h3> <p>Para peticiones <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>, solo la primera
- petición se tiene en cuenta para este límite. De hecho, en este
- caso el límite se impone sobre el número máximo
- de <em>conexiones</em> por hebra.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/beos.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/beos.html.ko.euc-kr b/docs/manual/mod/beos.html.ko.euc-kr
deleted file mode 100644
index b46b095aed..0000000000
--- a/docs/manual/mod/beos.html.ko.euc-kr
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>beos - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ MPM beos</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/beos.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>BeOS¿¡ ÃÖÀûÈ­µÈ ´ÙÁßó¸® ¸ðµâ.</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>mpm_beos_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>beos.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ´ÙÁßó¸® ¸ðµâ(MPM)Àº BeOS¿¡¼­ ±âº»ÀûÀ¸·Î »ç¿ëÇÑ´Ù.
- ÇÑ Á¶Àý ÇÁ·Î¼¼½º°¡ ¿äûÀ» ó¸®ÇÒ ¾²·¹µåµéÀ» ¸¸µç´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../bind.html">¾ÆÆÄÄ¡°¡ »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerThread" id="MaxRequestsPerThread">MaxRequestsPerThread</a> <a name="maxrequestsperthread" id="maxrequestsperthread">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÇÑ ¾²·¹µå°¡ ½ÇÇàÇÏ´Â µ¿¾È ó¸®ÇÒ ¿äû°³¼ö ÇÑ°è</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MaxRequestsPerThread <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>MaxRequestsPerThread 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>beos</td></tr>
-</table>
- <p><code class="directive">MaxRequestsPerThread</code> Áö½Ã¾î´Â
- ÇÑ ¼­¹ö ¾²·¹µå°¡ ó¸®ÇÒ ¿äû°³¼ö¸¦ Á¦ÇÑÇÑ´Ù.
- <code class="directive">MaxRequestsPerThread</code>°³ ¿äûÀ» ó¸®ÇÑÈÄ
- ¾²·¹µå´Â Á״´Ù. <code class="directive">MaxRequestsPerThread</code>°¡
- <code>0</code>À̸é Àý´ë·Î ¾²·¹µå¸¦ Á×ÀÌÁö ¾Ê´Â´Ù.</p>
-
- <p><code class="directive">MaxRequestsPerThread</code>¸¦ 0ÀÌ ¾Æ´Ñ
- °ªÀ¸·Î ¼³Á¤ÇÏ¸é µÎ°¡Áö ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>(¿ì¿¬È÷ ¹ß»ýÇÑ) ¸Þ¸ð¸® À¯Ãâ(memory leakage)¶§¹®¿¡
- ¾²·¹µå°¡ ³¶ºñÇÒ ¸Þ¸ð¸®·®À» Á¦ÇÑÇÑ´Ù;</li>
-
- <li>¾²·¹µåÀÇ ¼ö¸íÀ» Á¦ÇÑÇÏ¿© ¼­¹ö ºÎÇÏ°¡ °¨¼ÒÇÒ¶§
- ¾²·¹µå ¼ö¸¦ ÁÙÀδÙ.</li>
- </ul>
-
- <div class="note"><h3>ÁÖÀÇ:</h3>
- <p><code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code> ¿äûÀÇ
- °æ¿ì ¿ÀÁ÷ ù¹ø° ¿äû¸¸À» ¼¾´Ù. ±×·¡¼­ ÀÌ Áö½Ã¾î´Â ¾²·¹µå´ç
- <em>¿¬°á</em> °³¼ö¸¦ Á¦ÇÑÇÏ°Ô µÈ´Ù.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/beos.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/beos.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/beos.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ko/mod/beos.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/beos.xml b/docs/manual/mod/beos.xml
deleted file mode 100644
index 93ce377f06..0000000000
--- a/docs/manual/mod/beos.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="beos.xml.meta">
-
-<name>beos</name>
-<description>This Multi-Processing Module is optimized for BeOS.</description>
-<status>MPM</status>
-<sourcefile>beos.c</sourcefile>
-<identifier>mpm_beos_module</identifier>
-
-<summary>
- <p>This Multi-Processing Module (MPM) is the default for BeOS. It uses
- a single control process which creates threads to handle requests.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></seealso>
-
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerThread</name>
-<description>Limit on the number of requests that an individual thread
-will handle during its life</description>
-<syntax>MaxRequestsPerThread <var>number</var></syntax>
-<default>MaxRequestsPerThread 0</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MaxRequestsPerThread</directive> directive sets
- the limit on the number of requests that an individual server thread
- will handle. After <directive>MaxRequestsPerThread</directive>
- requests, the thread will die. If <directive
- >MaxRequestsPerThread</directive> is <code>0</code>, then the thread
- will never expire.</p>
-
- <p>Setting <directive>MaxRequestsPerThread</directive> to a
- non-zero limit has two beneficial effects:</p>
-
- <ul>
- <li>it limits the amount of memory that a thread can consume
- by (accidental) memory leakage;</li>
-
- <li>by giving threads a finite lifetime, it helps reduce
- the number of threads when the server load reduces.</li>
- </ul>
-
- <note><title>Note:</title>
- <p>For <directive module="core">KeepAlive</directive> requests, only
- the first request is counted towards this limit. In effect, it
- changes the behavior to limit the number of <em>connections</em>
- per thread.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/beos.xml.de b/docs/manual/mod/beos.xml.de
deleted file mode 100644
index e1e957eada..0000000000
--- a/docs/manual/mod/beos.xml.de
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="beos.xml.meta">
-<name>beos</name>
-<description>Dieses Multi-Processing-Modul ist f&uuml;r BeOS
- optimiert.</description>
-<status>MPM</status>
-<sourcefile>beos.c</sourcefile>
-<identifier>mpm_beos_module</identifier>
-
-<summary>
- <p>Dieses Multi-Processing-Modul (MPM) ist das Standardmodul f&uuml;r BeOS.
- Es benutzt einen einzelnen Steuerprozess welcher Threads f&uuml;r die
- Bedienung der Anfragen erzeugt.</p>
-</summary>
-<seealso><a href="../bind.html">Adress- und Port-Einstellungen</a>
-</seealso>
-
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerThread</name>
-<description>Die maximale Anzahl von Anfragen, die ein einzelner Thread
- w&auml;hrend seiner Lebensdauer bedient.</description>
-<syntax>MaxRequestsPerThread <var>Anzahl</var></syntax>
-<default>MaxRequestsPerThread 0</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>MaxRequestsPerThread</directive> legt die
- Anzahl der Anfragen fest, die ein einzelner Server-Thread bedient. Nach
- Erreichen der angegebenen Anzahl von Anfragen wird der Thread beendet.
- Wird f&uuml;r <directive>MaxRequestsPerThread</directive> der Wert
- <code>0</code> angegeben, wird der Thread niemals beendet.</p>
-
- <p>Das Setzen von <directive>MaxRequestsPerThread</directive> auf einen
- Wert ungleich null hat zwei Vorteile:</p>
-
- <ul>
- <li>Die Menge des von einem Thread ben&ouml;tigten Speicherplatzes
- bei (unvorhergesehenen) Speicherproblemen kann begrenzt werden;</li>
-
- <li>Threads mit begrenzter Lebensdauer reduzieren die Anzahl
- der Threads bei reduzierter Serverlast.</li>
- </ul>
-
- <note><title>Hinweis:</title>
- <p>Bei <directive module="core">KeepAlive</directive>-Anfragen wird nur die
- erste Anfrage auf das Maximum angerechnet. Das f&uuml;hrt dazu, dass
- die Anzahl der <em>Verbindungen</em>
- pro Thread reduziert wird.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/beos.xml.es b/docs/manual/mod/beos.xml.es
deleted file mode 100644
index e7c7134e96..0000000000
--- a/docs/manual/mod/beos.xml.es
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="beos.xml.meta">
-
-<name>beos</name>
-<description>Este m&#243;dulo de muiltiprocesamiento est&#225;
-optimizado para BeOS.</description>
-<status>MPM</status>
-<sourcefile>beos.c</sourcefile>
-<identifier>mpm_beos_module</identifier>
-
-<summary>
- <p>Este m&#243;dulo de muiltiprocesamiento (MMP)
- es el que usa por defecto para BeOS. Usa un
- &#250;nico proceso de control que crea hebras para atender las
- peticiones.</p>
-</summary>
-<seealso><a href="../bind.html">Configurar las direcciones y los
-puertos que usa Apache</a></seealso>
-
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerThread</name>
-<description>Limita el n&#250;mero de peticiones que una hebra (thread) puede
-atender durante su vida</description>
-<syntax>MaxRequestsPerThread <var>number</var></syntax>
-<default>MaxRequestsPerThread 0</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>La directiva <directive>MaxRequestsPerThread</directive> fija
- el n&#250;mero m&#225;ximo de peticiones que una hebra del
- servidor puede atender durante su vida. Despues de atender
- <directive>MaxRequestsPerThread</directive> peticiones, la hebra
- termina. Si el l&#237;mite fijado en <directive
- >MaxRequestsPerThread</directive> es <code>0</code>, entonces la
- hebra puede atender peticiones indefinidamente.</p>
-
- <p>Fijar la directiva <directive>MaxRequestsPerThread</directive>
- a un l&#237;mite distinto de cero ofrece dos benefcios
- fundamentales:</p>
-
- <ul>
- <li>limita la cantidad de memoria que puede consumir una hebra
- si hay una filtraci&#243;n (accidental) de memoria;</li>
-
- <li>poniendo un l&#237;mite a la vida de las hebras, se ayuda a
- reducir el n&#250;mero de hebras cuando se reduce la carga de
- trabajo en el servidor.</li>
- </ul>
-
- <note><title>Nota:</title> <p>Para peticiones <directive
- module="core">KeepAlive</directive>, solo la primera
- petici&#243;n se tiene en cuenta para este l&#237;mite. De hecho, en este
- caso el l&#237;mite se impone sobre el n&#250;mero m&#225;ximo
- de <em>conexiones</em> por hebra.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/beos.xml.ko b/docs/manual/mod/beos.xml.ko
deleted file mode 100644
index 9a2d5c099c..0000000000
--- a/docs/manual/mod/beos.xml.ko
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="beos.xml.meta">
-
-<name>beos</name>
-<description>BeOS¿¡ ÃÖÀûÈ­µÈ ´ÙÁßó¸® ¸ðµâ.</description>
-<status>MPM</status>
-<sourcefile>beos.c</sourcefile>
-<identifier>mpm_beos_module</identifier>
-
-<summary>
- <p>ÀÌ ´ÙÁßó¸® ¸ðµâ(MPM)Àº BeOS¿¡¼­ ±âº»ÀûÀ¸·Î »ç¿ëÇÑ´Ù.
- ÇÑ Á¶Àý ÇÁ·Î¼¼½º°¡ ¿äûÀ» ó¸®ÇÒ ¾²·¹µåµéÀ» ¸¸µç´Ù.</p>
-</summary>
-<seealso><a href="../bind.html">¾ÆÆÄÄ¡°¡ »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤</a></seealso>
-
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerThread</name>
-<description>ÇÑ ¾²·¹µå°¡ ½ÇÇàÇÏ´Â µ¿¾È ó¸®ÇÒ ¿äû°³¼ö ÇÑ°è</description>
-<syntax>MaxRequestsPerThread <var>number</var></syntax>
-<default>MaxRequestsPerThread 0</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>MaxRequestsPerThread</directive> Áö½Ã¾î´Â
- ÇÑ ¼­¹ö ¾²·¹µå°¡ ó¸®ÇÒ ¿äû°³¼ö¸¦ Á¦ÇÑÇÑ´Ù.
- <directive>MaxRequestsPerThread</directive>°³ ¿äûÀ» ó¸®ÇÑÈÄ
- ¾²·¹µå´Â Á״´Ù. <directive>MaxRequestsPerThread</directive>°¡
- <code>0</code>À̸é Àý´ë·Î ¾²·¹µå¸¦ Á×ÀÌÁö ¾Ê´Â´Ù.</p>
-
- <p><directive>MaxRequestsPerThread</directive>¸¦ 0ÀÌ ¾Æ´Ñ
- °ªÀ¸·Î ¼³Á¤ÇÏ¸é µÎ°¡Áö ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>(¿ì¿¬È÷ ¹ß»ýÇÑ) ¸Þ¸ð¸® À¯Ãâ(memory leakage)¶§¹®¿¡
- ¾²·¹µå°¡ ³¶ºñÇÒ ¸Þ¸ð¸®·®À» Á¦ÇÑÇÑ´Ù;</li>
-
- <li>¾²·¹µåÀÇ ¼ö¸íÀ» Á¦ÇÑÇÏ¿© ¼­¹ö ºÎÇÏ°¡ °¨¼ÒÇÒ¶§
- ¾²·¹µå ¼ö¸¦ ÁÙÀδÙ.</li>
- </ul>
-
- <note><title>ÁÖÀÇ:</title>
- <p><directive module="core">KeepAlive</directive> ¿äûÀÇ
- °æ¿ì ¿ÀÁ÷ ù¹ø° ¿äû¸¸À» ¼¾´Ù. ±×·¡¼­ ÀÌ Áö½Ã¾î´Â ¾²·¹µå´ç
- <em>¿¬°á</em> °³¼ö¸¦ Á¦ÇÑÇÏ°Ô µÈ´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/beos.xml.meta b/docs/manual/mod/beos.xml.meta
deleted file mode 100644
index 331026e779..0000000000
--- a/docs/manual/mod/beos.xml.meta
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>beos</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/core.html b/docs/manual/mod/core.html
deleted file mode 100644
index 424afedab8..0000000000
--- a/docs/manual/mod/core.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: core.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: core.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: core.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/core.html.de b/docs/manual/mod/core.html.de
deleted file mode 100644
index b88b385773..0000000000
--- a/docs/manual/mod/core.html.de
+++ /dev/null
@@ -1,3325 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>core - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-Kernfunktionen</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/core.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/core.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<div class="outofdate">Diese Übersetzung ist möglicherweise
- nicht mehr aktuell. Bitte prüfen Sie die englische Version auf
- die neuesten Änderungen.</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Ständig verfügbare Kernfunktionen des Apache HTTP
-Servers</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Core</td></tr></table>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#acceptpathinfo">AcceptPathInfo</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#accessfilename">AccessFileName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#adddefaultcharset">AddDefaultCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#allowoverride">AllowOverride</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authname">AuthName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authtype">AuthType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgimapextension">CGIMapExtension</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#contentdigest">ContentDigest</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaulttype">DefaultType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directory">&lt;Directory&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enablemmap">EnableMMAP</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enablesendfile">EnableSendfile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errordocument">ErrorDocument</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errorlog">ErrorLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#fileetag">FileETag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#files">&lt;Files&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#forcetype">ForceType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#hostnamelookups">HostnameLookups</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ifmodule">&lt;IfModule&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#include">Include</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#keepalive">KeepAlive</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limit">&lt;Limit&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestbody">LimitRequestBody</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestfields">LimitRequestFields</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestline">LimitRequestLine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#location">&lt;Location&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#loglevel">LogLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#namevirtualhost">NameVirtualHost</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#require">Require</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitcpu">RLimitCPU</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitmem">RLimitMEM</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitnproc">RLimitNPROC</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#satisfy">Satisfy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serveradmin">ServerAdmin</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serveralias">ServerAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#servername">ServerName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverpath">ServerPath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">ServerRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serversignature">ServerSignature</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#servertokens">ServerTokens</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sethandler">SetHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setinputfilter">SetInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setoutputfilter">SetOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#timeout">TimeOut</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#usecanonicalname">UseCanonicalName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualhost">&lt;VirtualHost&gt;</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AcceptPathInfo" id="AcceptPathInfo">AcceptPathInfo</a>-<a name="acceptpathinfo" id="acceptpathinfo">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Ressourcen lassen angehängte Pfadangaben zu</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AcceptPathInfo On|Off|Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AcceptPathInfo Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar ab Apache 2.0.30</td></tr>
-</table>
- <p>Die Direktive steuert, ob Anfragen akzeptiert oder
- abgewiesen werden, bei denen nach der tatsächlichen
- Datei (oder einer nicht existierenden Datei in einem existierenden
- Verzeichnis) zusätzliche Pfadangaben folgen. Die angehängte
- Pfadangabe kann Skripten in der Umgebungsvariable <code>PATH_INFO</code>
- verfügbar gemacht werden.</p>
-
- <p>Nehmen wir beispielsweise an, dass <code>/test/</code> auf ein
- Verzeichnis zeigt, welches lediglich eine Datei <code>here.html</code>
- enthält. Dann wird bei Anfragen nach
- <code>/test/here.html/more</code> und
- <code>/test/nothere.html/more</code> beides Mal <code>/more</code>
- als <code>PATH_INFO</code> ermittelt.</p>
-
- <p>Die drei möglichen Argumente für die Direktive
- <code class="directive">AcceptPathInfo</code> sind:</p>
-
- <dl>
- <dt><code>Off</code></dt><dd>Eine Anfrage wird nur dann akzeptiert,
- wenn sie exakt auf ein existierendes Verzeichnis (oder eine Datei)
- abgebildet werden kann. Daher würde eine Anfrage mit einer nach dem
- tatsächlichen Dateinamen angehängten Pfadangabe, wie
- <code>/test/here.html/more</code> im obigen Beispiel, den Fehler
- 404 NOT FOUND <span class="transnote">(<em>Anm.d.Ü.:</em> nicht gefunden)</span>
- zurückgeben.</dd>
-
- <dt><code>On</code></dt>
- <dd>Eine Anfrage wird akzeptiert, wenn eine vorangestellte Pfadangabe
- auf ein existierendes Verzeichnis abgebildet werden kann. Das
- obige Beispiel <code>/test/here.html/more</code> wird akzeptiert,
- wenn <code>/test/here.html</code> auf eine gültige Datei
- zeigt.</dd>
-
- <dt><code>Default</code></dt>
- <dd>Die Behandlung von Anfragen mit angehängten Pfadangaben
- wird von dem für die Anfrage verantwortlichen <a href="../handler.html">Handler</a> bestimmt. Der Core-Handler
- für gewöhnliche Dateien weist <code>PATH_INFO</code>-Zugriffe
- standardmäßig zurück. Handler, die Skripte bedienen,
- wie z.B. <a href="mod_cgi.html">cgi-script</a> und
- <a href="mod_isapi.html">isapi-isa</a>, sind im Allgemeinen darauf
- voreingestellt, <code>PATH_INFO</code> zu akzeptieren.</dd>
- </dl>
-
- <p>Das eigentliche Ziel von <code>AcceptPathInfo</code> ist es, Ihnen
- das Überschreiben der Voreinstellung der Handler bezüglich
- der Akzeptanz oder Ablehnung von <code>PATH_INFO</code> zu erlauben.
- Eine solche Änderung ist zum Beispiel notwendig, wenn Sie einen
- <a href="../filter.html">Filter</a> wie <a href="mod_include.html">INCLUDES</a> verwenden, um Inhalte
- abhängig von <code>PATH_INFO</code> zu generieren. Der
- Core-Handler würde die Anfrage normalerweise abweisen. Verwenden
- Sie die folgende Konfiguration, um dennoch solch ein Skript zu
- ermöglichen.</p>
-
- <div class="example"><p><code>
- &lt;Files "mypaths.shtml"&gt;<br />
- <span class="indent">
- Options +Includes<br />
- SetOutputFilter INCLUDES<br />
- AcceptPathInfo On<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AccessFileName" id="AccessFileName">AccessFileName</a>-<a name="accessfilename" id="accessfilename">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Name der dezentralen Konfigurationsdateien</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AccessFileName <var>Dateiname</var> [<var>Dateiname</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AccessFileName .htaccess</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Aus dieser Namensliste sucht der Server während der
- Bearbeitung einer Anfrage in jedem Verzeichnis nach der ersten
- existierenden Datei, sofern im betreffenden Verzeichnis dezentrale
- Konfigurationsdateien <a href="#allowoverride">erlaubt sind</a>.
- Beispiel:</p>
-
- <div class="example"><p><code>
- AccessFileName .acl
- </code></p></div>
-
- <p>Vor der Rücksendung des Dokuments
- <code>/usr/local/web/index.html</code> wird der Server
- <code>/.acl</code>, <code>/usr/.acl</code>,
- <code>/usr/local/.acl</code> und <code>/usr/local/web/.acl</code>
- einlesen, solange diese nicht mit</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride None<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>deaktiviert wurden.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#allowoverride">AllowOverride</a></code></li>
-<li><a href="../configuring.html">Konfigurationsdateien</a></li>
-<li><a href="../howto/htaccess.html">.htaccess-Dateien</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddDefaultCharset" id="AddDefaultCharset">AddDefaultCharset</a>-<a name="adddefaultcharset" id="adddefaultcharset">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Standard-Zeichenkodierung für Antworten ohne
-explizit angegebene Zeichenkodierung
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddDefaultCharset On|Off|<var>Zeichenkodierung</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AddDefaultCharset Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive gibt den Namen der Zeichenkodierung an, die
- jeder Antwort hinzugefügt wird, welche in den HTTP-Headern
- keinen Parameter zum Content-Type enthält. Dies überschreibt
- jede Zeichenkodierung, die mittels <code>META</code>-Tag im Dokument
- angegeben ist. Die Angabe von <code>AddDefaultCharset Off</code>
- deaktiviert die Funktion. <code>AddDefaultCharset On</code>
- ermöglicht es, mit der Direktive die Apache-interne
- Standard-Zeichenkodierung <code>iso-8859-1</code> vorzuschreiben.
- Sie können auch angeben, dass eine andere
- <var>Zeichenkodierung</var> verwendet werden soll. Zum Beispiel:</p>
-
- <div class="example"><p><code>
- AddDefaultCharset utf-8
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddOutputFilterByType" id="AddOutputFilterByType">AddOutputFilterByType</a>-<a name="addoutputfilterbytype" id="addoutputfilterbytype">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>einen Ausgabefilter einem bestimmten MIME-Type
-zuordnen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddOutputFilterByType <var>Filter</var>[;<var>Filter</var>...]
-<var>MIME-Type</var> [<var>MIME-Type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar ab Apache 2.0.33</td></tr>
-</table>
- <p>Die Direktive aktiviert für eine Anfrage abhängig vom
- MIME-Type der Antwort einen bestimmten Ausgabe-<a href="../filter.html">Filter</a>.</p>
-
- <p>Das folgende Beispiel verwendet den Filter <code>DEFLATE</code>,
- der von <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> angeboten wird. Er komprimiert
- jede Ausgabe, die als <code>text/html</code> oder <code>text/plain</code>
- gekennzeichnet ist, (gleichgültig, ob statisch oder dynamisch)
- bevor sie an den Client gesendet wird.</p>
-
- <div class="example"><p><code>
- AddOutputFilterByType DEFLATE text/html text/plain
- </code></p></div>
-
- <p>Wenn Sie den Inhalt von mehr als einem Filter verarbeiten lassen
- wollen, dann müssen deren Namen durch Semikolons voneinander
- getrennt werden. Es ist ebenfalls möglich, eine
- <code class="directive">AddOutputFilterByType</code>-Direktive für
- jeden von diesen Filtern zu verwenden.</p>
-
- <p>Die folgende Konfiguration sorgt dafür, dass alle
- Skriptausgaben, die als <code>text/html</code> gekennzeichnet
- sind, zuerst vom <code>INCLUDES</code>-Filter und dann vom
- <code>DEFLATE</code>-Filter verarbeitet werden.</p>
-
- <div class="example"><p><code>
- &lt;Location /cgi-bin/&gt;<br />
- <span class="indent">
- Options Includes<br />
- AddOutputFilterByType INCLUDES;DEFLATE text/html<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="warning"><h3>Hinweis:</h3>
- <p>Die Aktivierung von Filtern mittels
- <code class="directive">AddOutputFilterByType</code> kann in einigen
- Fällen ganz oder teilweise fehlschlagen. Beispielsweise
- werden keine Filter angewendet, wenn der MIME-Type nicht bestimmt
- werden kann und auf die Einstellung der <code class="directive"><a href="#defaulttype">DefaultType</a></code>-Anweisung zurückfällt,
- selbst wenn die <code class="directive"><a href="#defaulttype">DefaultType</a></code>-Einstellung die gleiche ist.</p>
-
- <p>Wenn Sie jedoch sicherstellen wollen, dass der Filter
- angewendet wird, sollten Sie den Content-Type z.B. mit
- <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> oder
- <code class="directive"><a href="#forcetype">ForceType</a></code> der Ressource
- explizit zuordnen. Das Setzen des Content-Types innerhalb
- eines (nicht-nph) CGI-Skriptes funktioniert ebenfalls
- zuverlässig.</p>
-
- <p>Die Typ-gebundenen Ausgabefilter werden niemals auf
- Proxy-Anfragen angewendet.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li>
-<li><code class="directive"><a href="#setoutputfilter">SetOutputFilter</a></code></li>
-<li><a href="../filter.html">Filter</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowEncodedSlashes" id="AllowEncodedSlashes">AllowEncodedSlashes</a>-<a name="allowencodedslashes" id="allowencodedslashes">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Legt fest, ob kodierte Pfadtrennzeichen in URLs durchgereicht
-werden dürfen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AllowEncodedSlashes On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AllowEncodedSlashes Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar ab Apache 2.0.46</td></tr>
-</table>
- <p>Die <code class="directive">AllowEncodedSlashes</code>-Direktive erlaubt die
- Verwendung von URLs, welche kodierte Pfadtrennzeichen (<code>%2F</code>
- für <code>/</code> und auf entsprechenden Systemen zusätzlich
- <code>%5C</code> für <code>\</code>) enthalten. Normalerweise werden
- derartige URLs mit einem 404-Fehler (Nicht gefunden) abgewiesen.</p>
-
- <p><code class="directive">AllowEncodedSlashes</code> <code>On</code> ist
- vor allem in Verbindung mit <code>PATH_INFO</code> hilfreich.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Das Erlauben von Schrägstrichen impliziert <em>nicht</em> deren
- <em>Dekodierung</em>. Vorkommen von <code>%2F</code> oder <code>%5C</code>
- (<em>nur</em> auf entsprechenden Systemen) werden unverändert in der
- ansonsten dekodierten URL belassen.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#acceptpathinfo">AcceptPathInfo</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowOverride" id="AllowOverride">AllowOverride</a>-<a name="allowoverride" id="allowoverride">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Direktiven-Typen, die in .htaccess-Dateien
-erlaubt sind.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AllowOverride All|None|<var>Direktiven-Typ</var>
-[<var>Direktiven-Typ</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AllowOverride All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Wenn der Server eine <code>.htaccess</code>-Datei (wie durch
- <code class="directive"><a href="#accessfilename">AccessFileName</a></code> definiert)
- findet, muss er wissen, welche in der Datei angegebenen Direktiven
- frühere Konfigurationsanweisungen überschreiben
- dürfen.</p>
-
- <div class="note"><h3>Nur in &lt;Directory&gt;-Abschnitten verfügbar</h3>
- <code class="directive">AllowOverride</code> ist nur in <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>-Abschnitten
- gültig, die ohne reguläre Ausdrüke definiert wurden, nicht
- in <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-,
- <code class="directive"><a href="#directorymatch">&lt;DirectoryMatch&gt;</a></code>- oder
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code>-Abschnitten.
- </div>
-
- <p>Wenn diese Anweisung auf <code>None</code> gesetzt wird, dann
- werden <a href="#accessfilename">.htaccess</a>-Dateien komplett
- ignoriert. In diesem Fall wird der Server nicht einmal versuchen,
- die <code>.htaccess</code>-Dateien im Dateisystem zu lesen.</p>
-
- <p>Wenn diese Anweisung auf <code>All</code> gesetzt wird, dann
- ist jede Direktive in den <code>.htaccess</code>-Dateien erlaubt,
- die den <a href="directive-dict.html#Context">Kontext</a>
- .htaccess besitzt.</p>
-
- <p>Der <var>Direktiven-Typ</var> kann eine der folgenden
- Anweisungsgruppen sein.</p>
-
- <dl>
- <dt>AuthConfig</dt>
-
- <dd>
- Erlaubt die Verwendung von Autorisierungs-Anweisungen (<code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code>,
- <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>,
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>,
- <code class="directive"><a href="#authname">AuthName</a></code>,
- <code class="directive"><a href="#authtype">AuthType</a></code>, <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>, <code class="directive"><a href="#require">Require</a></code> <em>usw.</em>).</dd>
-
- <dt>FileInfo</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung der
- Dokumenttypen (<code class="directive"><a href="#defaulttype">DefaultType</a></code>, <code class="directive"><a href="#errordocument">ErrorDocument</a></code>, <code class="directive"><a href="#forcetype">ForceType</a></code>, <code class="directive"><a href="../mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>,
- <code class="directive"><a href="#sethandler">SetHandler</a></code>, <code class="directive"><a href="#setinputfilter">SetInputFilter</a></code>, <code class="directive"><a href="#setoutputfilter">SetOutputFilter</a></code>, und
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>-Direktiven Add* und Remove*
- <em>usw.</em>).</dd>
-
- <dt>Indexes</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung von
- Verzeichnisindizes (<code class="directive"><a href="../mod/mod_autoindex.html#adddescription">AddDescription</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#addicon">AddIcon</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#addiconbytype">AddIconByType</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#defaulticon">DefaultIcon</a></code>, <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#fancyindexing">FancyIndexing</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#headername">HeaderName</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#indexignore">IndexIgnore</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#readmename">ReadmeName</a></code>
- <em>usw.</em>).</dd>
-
- <dt>Limit</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung des
- Zugriffs von Hosts (<code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> und <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code>).</dd>
-
- <dt>Options</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung spezieller
- Verzeichniseigenschaften (<code class="directive"><a href="#options">Options</a></code>
- und <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>).</dd>
- </dl>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig Indexes
- </code></p></div>
-
- <p>Im obigen Beispiel erzeugen alle Direktiven einen internal server
- error <span class="transnote">(<em>Anm.d.Ü.:</em> Server-interner Fehler)</span>, die weder der
- Gruppe <code>AuthConfig</code> noch der Gruppe <code>Indexes</code>
- angehören.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#accessfilename">AccessFileName</a></code></li>
-<li><a href="../configuring.html">Konfigurationsdateien</a></li>
-<li><a href="../howto/htaccess.html">.htaccess-Dateien</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthName" id="AuthName">AuthName</a>-<a name="authname" id="authname">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Autorisierungsbereich zur Verwendung in der
-HTTP-Authentisierung</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthName <var>auth-Bereich</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive legt den Namen des Autorisierungsbereiches
- <span class="transnote">(<em>Anm.d.Ü.:</em> Der Autorisierungsbereich wird auch Realm genannt.)</span>
- für ein Verzeichnis fest. Dieser Realm wird dem Client mitgeteilt,
- damit der Anwender weiß, welchen Benutzernamen und welches Passwort
- er zu übermitteln hat. <code class="directive">AuthName</code> akzeptiert ein
- Argument. Falls der Name des Realm Leerzeichen enthält, muss er in
- Anführungszeichen eingeschlossen werden. Um zu funktionieren, muss
- die Anweisung von den Direktiven <code class="directive"><a href="#authtype">AuthType</a></code> und <code class="directive"><a href="#require">Require</a></code> sowie von
- Direktiven wie <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- und <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- begleitet werden.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- AuthName "Top Secret"
- </code></p></div>
-
- <p>Die <code>AuthName</code> übergebene Zeichenkette ist das,
- was in dem von den meisten Browsern angebotenen Passwort-Dialog
- angezeigt wird.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../howto/auth.html">Authentisierung, Autorisierung und
- Zugriffskontrolle</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthType" id="AuthType">AuthType</a>-<a name="authtype" id="authtype">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Art der Authentisierung</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthType Basic|Digest</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive wählt die Art der Benutzer-Authentisierung
- für ein Verzeichnis aus. Derzeit sind lediglich <code>Basic</code>
- und <code>Digest</code> implementiert.
- Um zu funktionieren, muss die Anweisung von den Direktiven <code class="directive"><a href="#authname">AuthName</a></code> und <code class="directive"><a href="#require">Require</a></code> sowie von
- Direktiven wie <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- und <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- begleitet werden.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../howto/auth.html">Authentisierung, Autorisierung und
- Zugriffskontrolle</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CGIMapExtension" id="CGIMapExtension">CGIMapExtension</a>-<a name="cgimapextension" id="cgimapextension">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Technik zur Bestimmung des Interpreters für
-CGI-Skripte</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CGIMapExtension <var>CGI-Pfad</var> <var>.Endung</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>ausschließlich NetWare</td></tr>
-</table>
- <p>Die Direktive wird zur Steuerung verwendet, wie Apache
- den Interpreter ermittelt, der zur Ausführung von
- CGI-Skripten verwendet wird. Beispielsweise bestimmt die Angabe
- von <code>CGIMapExtension sys:\foo.nlm .foo</code>, dass
- alle CGI-Scripte mit der Endung <code>.foo</code> an den
- FOO-Interpreter übergeben werden.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ContentDigest" id="ContentDigest">ContentDigest</a>-<a name="contentdigest" id="contentdigest">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Aktiviert die Generierung von Content-MD5
-HTTP-Response-Headern</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ContentDigest On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ContentDigest Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive aktiviert die Generierung von
- <code>Content-MD5</code>-Headern, wie sie in RFC1864 bzw. RFC2068
- definiert sind.</p>
-
- <p>MD5 ist ein Algorithmus zur Berechnung eines "Datenextrakts"
- (zuweilen "Fingerabdruck" genannt) <span class="transnote">(<em>Anm.d.Ü.:</em> Der "Datenextrakt" wird im
- Englischen als "message digest" oder "fingerprint" bezeichnet.)</span>
- aus beliebig langen Daten. Es gilt als zuverlässig, dass
- Veränderungen an den Daten sich in Veränderungen des
- Extrakts wiederspiegeln.</p>
-
- <p>Der <code>Content-MD5</code>-Header bietet eine
- End-to-End-Integritätsprüfung (MIC) <span class="transnote">(<em>Anm.d.Ü.:</em> MIC steht für
- "message integrity check".)</span> des Daten-Inhalts. Ein Proxy oder
- Client kann diesen Header prüfen, um zufällige Veränderungen
- des Entity-Inhalts bei der Übertragung festzustellen.
- Beispielheader:</p>
-
- <div class="example"><p><code>
- Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
- </code></p></div>
-
- <p>Beachten Sie bitte, dass dies Performanceprobleme auf Ihrem
- System verursachen kann, da der Extrakt bei jeder Anfrage
- berechnet wird (der Wert wird nicht zwischengespeichert).</p>
-
- <p><code>Content-MD5</code> wird nur für Dokumente gesendet,
- die von <code class="module"><a href="../mod/core.html">core</a></code> bedient werden, nicht jedoch bei
- Modulen. SSI-Dokumente, CGI-Skript-Ausgaben und Byte-Range-Antworten
- besitzen diesen Header beispielsweise nicht.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultType" id="DefaultType">DefaultType</a>-<a name="defaulttype" id="defaulttype">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>MIME-Content-Type, der gesendet wird, wenn der Server den Typ
-nicht auf andere Weise ermitteln kann.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultType <var>MIME-Type</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>DefaultType text/plain</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Es kann vorkommen, dass der Server ein Dokument ausliefern muss,
- dessen Typ er nicht mit Hilfe seiner MIME-Type-Zuordnungen bestimmen
- kann.</p>
-
- <p>Der Server muss den Client über den Content-Type des
- Dokumentes informieren. Daher verwendet er im Falle eines
- unbekannten Typs die <code>DefaultType</code>-Einstellung.
- Zum Beispiel:</p>
-
- <div class="example"><p><code>
- DefaultType image/gif
- </code></p></div>
-
- <p>wäre angemessen für ein Verzeichnis, das viele GIF-Bilder
- enthält, deren Dateinamen nicht Endung <code>.gif</code>
- besitzen.</p>
-
- <p>Beachten Sie bitte, dass die Direktive anders als <code class="directive"><a href="#forcetype">ForceType</a></code> lediglich den Standard-MIME-Type
- bestimmt. Alle anderen MIME-Type-Definitionen, einschließlich
- Dateierweiterungen, die den Medien-Typ anzeigen können,
- überschreiben diese Voreinstellung.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Directory" id="Directory">&lt;Directory&gt;</a>-<a name="directory" id="directory">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Umschließt eine Gruppe von Direktiven, die nur auf
-das genannte Verzeichnis des Dateisystems und Unterverzeichnisse angewendet
-werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Directory <var>Verzeichnispfad</var>&gt;
-... &lt;/Directory&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;Directory&gt;</code> und
- <code>&lt;/Directory&gt;</code> werden dazu verwendet, eine Gruppe
- von Direktiven zusammenzufassen, die nur für das genannte
- Verzeichnis und dessen Unterverzeichnisse gelten. Jede Direktive,
- die im Verzeichnis-Kontext erlaubt ist, kann verwendet werden.
- <var>Verzeichnispfad</var> ist entweder der vollständige Pfad zu
- einem Verzeichnis oder eine Zeichenkette mit Platzhaltern wie sie von der
- Unix-Shell zum Abgleich verwendet werden. In einer Zeichenkette
- mit Platzhaltern <span class="transnote">(<em>Anm.d.Ü.:</em> sogenannte wild-cards)</span> entspricht
- <code>?</code> einem einzelnen Zeichen und <code>*</code> einer
- Zeichenkette beliebiger Länge. Sie können auch auch
- <code>[]</code>-Zeichenbereiche verwenden. Keiner der Platzhalter
- entspricht dem Zeichen "/". Daher passt <code>&lt;Directory
- /*/public_html&gt;</code> nicht auf <code>/home/user/public_html</code>,
- <code>&lt;Directory /home/*/public_html&gt;</code> jedoch tut es.
- Beispiel:</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/local/httpd/htdocs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <div class="note">
- <p>Seien Sie vorsichtig mit den <var>Verzeichnispfad</var>-Argumenten.
- Sie müssen buchstäblich mit dem Dateisystempfad
- übereinstimmen, den der Apache für den Zugriff auf die
- Dateien verwendet. Direktiven, die für ein bestimmtes
- Verzeichnis gelten, gelten nicht für Dateien in dem Verzeichnis,
- auf die über einen anderen Pfad zugegriffen wird, wie z.B.
- über verschiedene symbolische Links.</p>
- </div>
-
- <p>Erweiterte reguläre Ausdrücke können ebenfalls
- verwendet werden, indem das Zeichen <code>~</code> hinzugefügt
- wird. Beispielsweise würde</p>
-
- <div class="example"><p><code>
- &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
- </code></p></div>
-
- <p>auf Verzeichnisse in <code>/www/</code> passen, die aus drei
- Zahlen bestehen.</p>
-
- <p>Wenn mehrere <code class="directive">&lt;Directory&gt;</code>-Abschnitte
- (ohne reguläre Ausdrücke) auf ein Verzeichnis (oder
- ein ihm übergeordnetes Verzeichnis) passen, welches ein Dokument
- enthält, dann werden die Direktiven der Reihe nach, angefangen
- beim kürzesten passenden Muster, vermischt mit den Direktiven
- aus den <a href="#accessfilename">.htaccess</a>-Dateien, angewendet.
- Beispiel:</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride None<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /home/&gt;<br />
- <span class="indent">
- AllowOverride FileInfo<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Beim Zugriff auf das Dokument <code>/home/web/dir/doc.html</code>
- sind die einzelnen Schritte:</p>
-
- <ul>
- <li>Wende die Direktive <code>AllowOverride None</code> an
- (deaktiviere <code>.htaccess</code>-Dateien).</li>
-
- <li>Wende die Direktive <code>AllowOverride FileInfo</code>
- (auf das Verzeichnis <code>/home</code>) an.</li>
-
- <li>Wende jede <code>FileInfo</code>-Direktive aus
- <code>/home/.htaccess</code>, <code>/home/web/.htaccess</code> und
- <code>/home/web/dir/.htaccess</code> der Reihe nach an.</li>
- </ul>
-
- <p>Reguläre Ausdrücke werden solange nicht berücksichtigt,
- bis alle normalen Abschnitte angewendet wurden. Anschließend
- werden alle regulären Ausdrücke in der Reihenfolge
- geprüft, in der sie in der Konfigurationsdatei auftauchen.
- Beispielsweise wird bei</p>
-
- <div class="example"><p><code>
- &lt;Directory ~ abc$&gt;<br />
- <span class="indent">
- # ... hier die Direktiven ...<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>der Abschnitt mit dem regulären Ausdruck nicht
- berücksichtigt, bis alle normalen
- <code class="directive">&lt;Directory&gt;</code>-Abschnitte und
- <code>.htaccess</code>-Dateien angewendet wurden. Dann erst wird
- der reguläre Ausdruck mit <code>/home/abc/public_html/abc</code>
- abgeglichen und der entsprechende <code class="directive">&lt;Directory&gt;</code>-Abschnitt angewendet.</p>
-
- <p><strong>Beachten Sie bitte, dass der vom Apache voreingestellte
- Zugriff für <code>&lt;Directory /&gt;</code>
- <code>Allow from All</code> ist. Das bedeutet, dass der Apache
- jede Datei ausliefert, die durch eine URL abgebildet wird. Es wird
- empfohlen, dass Sie dies durch einen Block wie</strong></p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from All<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><strong>ändern und anschließend für
- Verzeichnisse überschreiben, die Sie verfügbar machen
- <em>wollen</em>. Für weitere Einzelheiten lesen Sie bitte
- die Seite zu den <a href="../misc/security_tips.html">Sicherheitshinweisen</a>.</strong></p>
-
- <p>Die Verzeichnisabschnitte erscheinen in der Datei
- <code>httpd.conf</code>. <code class="directive">&lt;Directory&gt;</code>-Direktiven dürfen nicht
- ineinander verschachtelt werden oder innerhalb von <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>- oder <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code>-Abschnitten auftauchen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectoryMatch" id="DirectoryMatch">&lt;DirectoryMatch&gt;</a>-<a name="directorymatch" id="directorymatch">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Umschließt eine Gruppe von Direktiven, die auf
- Verzeichnisse des Dateisystems und ihre Unterverzeichnisse abgebildet
- werden, welche auf einen regulären Ausdruck passen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;DirectoryMatch&gt;</code> und
- <code>&lt;/DirectoryMatch&gt;</code> werden dazu verwendet, eine
- Gruppe von Direktiven zusammenzufassen, die nur für das
- genannte Verzeichnis und dessen Unterverzeichnisse gelten, genauso
- wie bei <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>.
- Als Argument dient jedoch ein regulärer Ausdruck.
- Beispielsweise würde</p>
-
- <div class="example"><p><code>
- &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
- </code></p></div>
-
- <p>auf Verzeichnisse in <code>/www/</code> passen, die aus drei
- Zeichen bestehen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- für eine Beschreibung, wie reguläre Ausdrücke mit
- normalen <code class="directive">&lt;Directory&gt;</code>-Anweisungen
- vermischt werden.</li>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DocumentRoot" id="DocumentRoot">DocumentRoot</a>-<a name="documentroot" id="documentroot">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Verzeichnis, welches den Haupt-Dokumentenbaum bildet, der im
-Web sichtbar ist.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DocumentRoot <var>Verzeichnis</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>DocumentRoot /usr/local/apache/htdocs</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive setzt das Verzeichnis, von dem aus
- <code>httpd</code> Dateien ausliefert. Sofern nicht eine Direktive
- wie <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> greift, hängt
- der Server Pfade aus der angeforderten URL an das Wurzelverzeichnis
- an, um den Pfad zum Dokument zu bilden. Beispiel:</p>
-
- <div class="example"><p><code>
- DocumentRoot /usr/web
- </code></p></div>
-
- <p>Damit bezieht sich ein Zugriff auf
- <code>http://www.my.host.com/index.html</code> auf
- <code>/usr/web/index.html</code>. Wenn das <var>Verzeichnis</var> nicht
- absolut angegeben ist, wird es relativ zu <code class="directive"><a href="#serverroot">ServerRoot</a></code> betrachtet.</p>
-
- <p><code class="directive">DocumentRoot</code> sollte ohne einen
- Schrägstrich am Ende angegeben werden.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../urlmapping.html">URLs auf das Dateisystem
-abbilden</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableMMAP" id="EnableMMAP">EnableMMAP</a>-<a name="enablemmap" id="enablemmap">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Verwende Memory-Mapping, um Dateien während der
-Auslieferung zu lesen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>EnableMMAP On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>EnableMMAP On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive steuert, ob <code>httpd</code> Memory-Mapping verwenden
- darf, wenn er während der Auslieferung den Inhalt einer
- Datei lesen muss. Wenn die Bearbeitung einer Anfrage es erfordert,
- auf die Daten in einer Datei zuzugreifen -- zum Beispiel bei der
- Auslieferung einer mittels <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> serverseitig
- analysierten Datei --, dann verwendet der Apache standardmäßig
- Memory-Mapping für diese Datei, sofern das Betriebssystem es
- unterstützt.</p>
-
- <p>Memory-Mapping bedeutet zuweilen eine Performanceverbesserung.
- In einigen Umgebungen ist es jedoch besser, Memory-Mapping zu
- deaktivieren, um Problemen während des Betriebs vorzubeugen:</p>
-
- <ul>
- <li>Bei einigen Multiprozessorsystemen kann Memory-Mapping die
- Performance von <code>httpd</code> reduzieren.</li>
- <li>Bei einem per NFS eingebundenen <code class="directive"><a href="#documentroot">DocumentRoot</a></code> kann <code>httpd</code> mit einem
- Segmentierungsfehler <span class="transnote">(<em>Anm.d.Ü.:</em> ein sogenannter "segmentation
- fault")</span> abstürzen, wenn eine Datei gelöscht oder
- gekürzt wird, während <code>httpd</code> sie im Speicher
- abbildet.</li>
- </ul>
-
- <p>Bei Serverkonfigurationen, die für dieses Problem
- anfällig sind, sollten Sie das Memory-Mapping für
- auszuliefernde Dateien deaktivieren, indem Sie schreiben:</p>
-
- <div class="example"><p><code>
- EnableMMAP Off
- </code></p></div>
-
- <p>Bei per NFS eingebundenen Dateien kann diese Funktion
- explizit für die störenden Dateien deaktiviert werden,
- indem Sie angeben:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/pfad-zu-den-nfs-dateien"&gt;
- <span class="indent">
- EnableMMAP Off
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableSendfile" id="EnableSendfile">EnableSendfile</a>-<a name="enablesendfile" id="enablesendfile">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Verwende die sendfile-Unterstützung des Kernels, um
-Dateien an den Client auszuliefern</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>EnableSendfile On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>EnableSendfile On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar ab Apache Version 2.0.44</td></tr>
-</table>
- <p>Die Direktive steuert, ob <code>httpd</code> die
- sendfile-Unterstützung des Kernels verwenden kann, um
- Dateiinhalte an den Client zu übermitteln. Wenn die Bearbeitung
- einer Anfrage keinen Zugriff auf die Daten in der Datei erfordert --
- zum Beispiel bei der Auslieferung einer statischen Datei -- und das
- Betriebssystem es unterstützt, verwendet der Apache
- standardmäßig sendfile, um den Dateiinhalt zu
- übertragen, ohne die Datei jemals zu lesen.</p>
-
- <p>Der sendfile-Mechanismus vermeidet getrennte Lese- und
- Sendeoperationen sowie Puffer-Zuweisungen. Bei einigen Plattformen bzw.
- Dateisystemen deaktivieren Sie diese Funktion jedoch besser, um Probleme
- während des Betriebs zu vermeiden:</p>
-
- <ul>
- <li>Einige Plattformen besitzen u.U. eine fehlerhafte
- sendfile-Unterstützung, die das Erstellungssystem nicht erkennt,
- insbesondere wenn die Binärdateien auf einem anderen Rechner erstellt
- und auf eine solche Maschine mit fehlerhafter sendfile-Unterstützung
- übertragen wurden.</li>
- <li>Bei einem über das Netzwerk eingebundenen <code class="directive"><a href="#documentroot">DocumentRoot</a></code> (z.B. NFS oder SMB) ist der
- Kernel möglicherweise nicht in der Lage, die Netzwerkdatei
- über seinen eigenen Cache zu bedienen.</li>
- <li>Unter Linux löst die Verwendung von <code>sendfile</code>
- in Verbindung mit bestimmten Netzwerkkarten und IPv6
- TCP-Checksummenfehler aus.</li>
- </ul>
-
- <p>Bei Serverkonfigurationen, die für dieses Problam
- anfällig sind, sollten die diese Funktion deaktivieren, indem
- Sie schreiben:</p>
-
- <div class="example"><p><code>
- EnableSendfile Off
- </code></p></div>
-
- <p>Bei per NFS oder SMB eingebundenen Dateien kann diese Funktion
- explizit für die störenden Dateien deaktiviert werden, indem
- Sie angeben:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/pfad-zu-den-nfs-dateien"&gt;
- <span class="indent">
- EnableSendfile Off
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ErrorDocument" id="ErrorDocument">ErrorDocument</a>-<a name="errordocument" id="errordocument">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Das, was der Server im Fehlerfall an den Client
-zurückgibt</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ErrorDocument <var>Fehlercode</var> <var>Dokument</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Die Syntax der Anführungszeichen bei Textnachrichten hat
-sich im Apache 2.0 geändert</td></tr>
-</table>
- <p>Im Falle eines Problems oder Fehlers kann der Apache
- konfiguriert werden, eine der vier Aktionen auszuführen:</p>
-
- <ol>
- <li>Ausgabe einer einfachen, hartkodierten Fehlermeldung</li>
-
- <li>Ausgabe einer angepassten Meldung</li>
-
- <li>Umleitung zu einem lokalen <var>URL-Pfad</var> der das
- Problem bzw. den Fehler behandelt</li>
-
- <li>Umleitung zu einer externen <var>URL</var>, die das Problem
- bzw. den Fehler behandelt</li>
- </ol>
-
- <p>Die erste Option ist Voreinstellung, während die Optionen
- 2 bis 4 über die Direktive <code class="directive">ErrorDocument</code>
- eingestellt werden, welcher der HTTP-Statuscode und eine
- URL oder Nachricht folgen. Abhängig vom Problem bzw. Fehler bietet
- der Apache manchmal zusätzliche Informationen an.</p>
-
- <p>URLs können bei lokalen Adressen mit einem Schrägstrich
- (/) beginnen oder eine komplette URL bilden, die der Client
- auflösen kann. Alternativ kann eine Nachricht für die
- Anzeige im Browser angeboten werden. Beispiel:</p>
-
- <div class="example"><p><code>
- ErrorDocument 500 http://foo.example.com/cgi-bin/tester<br />
- ErrorDocument 404 /cgi-bin/falsche_urls.pl<br />
- ErrorDocument 401 /info_zur_anmeldung.html<br />
- ErrorDocument 403 "Der Zugriff ist nicht erlaubt."
- </code></p></div>
-
- <p>Außerdem kann der spezielle Wert <code>default</code> angegeben
- werden, um die schlichte, hartkodierte Nachricht des Apache zu verwenden.
- Es wird normalerweise nicht benötigt, doch <code>default</code>
- stellt die einfach, im Apache hartkodierte Meldung in Konfigurationen
- wieder her, die ansonsten von einem existierenden <span class="transnote">(<em>Anm.d.Ü.:</em> zuvor
- konfigurierten)</span> <code class="directive">ErrorDocument</code> erben
- würden.</p>
-
- <div class="example"><p><code>
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br /><br />
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- ErrorDocument 404 default<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Wenn Sie eine <code class="directive">ErrorDocument</code>-Anweisung
- angeben, die auf eine entfernte URL weist (d.h. irgendetwas mit der
- Methode <code>http</code> davor), beachten Sie bitte, dass der Apache
- eine Umleitung zum Client sendet, um diesem mitzuteilen, wo das
- Dokument zu finden ist, auch wenn das Dokument letztlich wieder zum
- gleichen Server führt. Das hat mehrere Auswirkungen. Die
- wichtigste ist, dass der Client nicht den Original-Statuscode
- erhält sondern statt dessen einen Umleitungs-Statuscode. Dies
- wiederum kann Web-Robots und andere Clients verwirren, die den
- Statuscode dazu verwenden, herauszufinden ob eine URL gültig ist.
- Wenn Sie eine entfernte URL in einer Anweisung
- <code>ErrorDocument 401</code> verwenden, wird der Client
- darüber hinaus nicht wissen, dass er den Benutzer zur Eingabe
- eines Passwortes auffordern muss, da er den Statuscode 401 nicht
- erhält. <strong>Deshalb müssen Sie sich auf ein lokales
- Dokument beziehen, wenn Sie eine Anweisung <code>ErrorDocument
- 401</code> verwenden.</strong></p>
-
- <p>Der Microsoft Internet Explorer (MSIE) ignoriert
- standardmäßig serverseitig generierte Fehlermeldungen, wenn
- sie "zu kurz" sind und ersetzt sie durch eigene "freundliche"
- Fehlermeldungen. Die Größe variiert abhängig von der
- Art des Fehlers, im Allgemeinen zeigt der MSIE jedoch den
- serverseitig generierten Fehler, anstatt ihn zu verstecken, wenn Ihr
- Fehlerdokument größer als 512 Bytes ist. Weitere Informationen
- sind im Artikel <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807">Q294807</a> in der Microsoft Knowledgebase article verfügbar.</p>
-
- <p>In Versionen vor 2.0 wurden Meldungen durch ein einzelnes
- vorangestelltes Anführungszeichen (") erkannt.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../custom-error.html">Dokumentation zu individuellen
-Fehlermeldungen</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ErrorLog" id="ErrorLog">ErrorLog</a>-<a name="errorlog" id="errorlog">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Ablageort, an dem der Server Fehler protokolliert</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> ErrorLog <var>Dateiname</var>|syslog[:<var>facility</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and
- OS/2)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ErrorLog</code> bestimmt den Namen
- der Datei, in welcher der Server alle auftretenden Fehler protokolliert.
- Wenn <var>Dateiname</var> nicht absolut ist, wird er relativ zu <code class="directive"><a href="#serverroot">ServerRoot</a></code> betrachtet.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- ErrorLog /var/log/httpd/error_log
- </code></p></div>
-
- <p>Wenn der <var>Dateiname</var> mit einem senkrechten Strich (|,
- engl.: Pipe) beginnt, wird angenommen, dass es sich um einen Befehl
- handelt, der ausgeführt wird, um das Fehlerprotokolls zu
- verarbeiten.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- ErrorLog "|/usr/local/bin/httpd_errors"
- </code></p></div>
-
- <p>Die Verwendung von <code>syslog</code> anstelle eines Dateinamens
- aktiviert die Protokollierung mittels syslogd(8), sofern das System
- es unterstützt. Als Voreinstellung wird der syslog-Typ (syslog
- facility) <code>local7</code> verwendet, Sie können dies jedoch
- auch überschreiben, indem Sie die Syntax
- <code>syslog:<var>facility</var></code> verwenden, wobei
- <var>facility</var> einer der Namen sein kann, die üblicherweise
- in syslog(1) dokumentiert sind.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- ErrorLog syslog:user
- </code></p></div>
-
- <p>SICHERHEITSHINWEIS: Lesen Sie das Dokument <a href="../misc/security_tips.html#serverroot">Sicherheitshinweise</a>
- zu Einzelheiten darüber, warum Ihre Sicherheit gefährdet
- sein kann, wenn das Verzeichnis, in dem die Log-Dateien gespeichert
- werden, für jemand anderen, als den Benutzer, der den Server
- gestartet hat, beschreibbar ist.</p>
-
- <div class="warning"><h3>Anmerkung</h3>
- <p>Bei der Eingabe eines Dateipfads auf nicht-Unix-Plattformen sollte
- darauf geachtet werden, nur (Vorwärts-)Schrägstriche zu
- verwenden, auch wenn die Plattform rückwärts gerichtete
- Schrägstriche (Backslashes) erlaubt. Im Allgemeinen ist es eine gute
- Idee, innerhalb der Konfigurationsdateien immer
- Vorwärts-Schrägstriche zu verwenden.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#loglevel">LogLevel</a></code></li>
-<li><a href="../logs.html">Apache-Log-Dateien</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="FileETag" id="FileETag">FileETag</a>-<a name="fileetag" id="fileetag">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Dateiattribute, die zur Erstellung des HTTP-Response-Headers
-ETag verwendet werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>FileETag <var>Komponente</var> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>FileETag INode MTime Size</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Wenn dem Dokument eine Datei zugrundeliegt, bestimmt die Direktive
- <code class="directive">FileETag</code> die Dateiattribute, die zur Erstellung
- des HTTP-Response-Headers <code>ETag</code> (Entity-Tag) verwendet
- werden. (Der Wert von <code>ETag</code> wird bei der Cache-Verwaltung
- zur Einsparung von Netzwerk-Bandbreite benutzt.) Im Apache 1.3.22 und
- früher wurde der <code>ETag</code>-Wert <em>stets</em> aus
- der I-Node, der Größe und dem Datum der letzten
- Änderung (mtime) der Datei gebildet. Die Direktive
- <code class="directive">FileETag</code> erlaubt es Ihnen, zu bestimmen,
- welche dieser Eigenschaften -- falls überhaupt -- verwendet
- werden sollen. Die gültigen Schlüsselworte lauten:</p>
-
- <dl>
- <dt><strong>INode</strong></dt>
- <dd>Die I-Node-Nummer wird in die Berechnung mit einbezogen</dd>
- <dt><strong>MTime</strong></dt>
- <dd>Datum und Uhrzeit der letzten Änderung werden mit einbezogen</dd>
- <dt><strong>Size</strong></dt>
- <dd>Die Anzahl der Bytes in der Datei wird mit einbezogen</dd>
- <dt><strong>All</strong></dt>
- <dd>Alle verfügbaren Angaben werden verwendet. Die ist
- gleichbedeutend mit:
- <div class="example"><p><code>FileETag INode MTime Size</code></p></div></dd>
- <dt><strong>None</strong></dt>
- <dd>Es wird keine <code>ETag</code>-Angabe in die Antwort eingefügt,
- wenn dem Dokument eine Datei zugrundeliegt.</dd>
- </dl>
-
- <p>Den Schlüsselwörtern <code>INode</code>, <code>MTime</code>
- und <code>Size</code> kann entweder ein <code>+</code> oder ein
- <code>-</code> vorangestellt werden, was die Änderung einer
- Vorgabe erlaubt, die von einem größeren Umfeld
- geerbt wurde. Jedes Schlüselwort ohne ein solches Prefix
- hebt die ererbte Einstellung sofort und vollständig auf.</p>
-
- <p>Wenn die Konfiguration für ein Verzeichnis
- <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code> enthält
- und die eines Unterverzeichnisses <code>FileETag&nbsp;-INode</code>,
- dann ist die Einstellung für das Unterverzeichnis (die an
- jedes Unter-Unterverzeichnis weitervererbt wird, welches dies nicht
- überschreibt) äquivalent mit
- <code>FileETag&nbsp;MTime&nbsp;Size</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Files" id="Files">&lt;Files&gt;</a>-<a name="files" id="files">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Enthält Direktiven, die sich nur auf passende Dateinamen
-beziehen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Files <var>Dateiname</var>&gt; ... &lt;/Files&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">&lt;Files&gt;</code>
- begrenzt die Reichweite der enthaltenen Anweisungen auf Dateinamen.
- Sie ist vergleichbar mit den Direktiven <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> und <code class="directive"><a href="#location">&lt;Location&gt;</a></code>. Sie muss eine
- passende <code>&lt;/Files&gt;</code>-Anweisung besitzen.
- Die innerhalb dieses Abschnittes angegebenen Direktiven werden auf
- jedes Objekt mit einem Basisnamen (letzte Komponente des Dateinamens)
- angewendet, der auf die angegebenen Dateinamen passt. <code class="directive">&lt;Files&gt;</code>-Container werden, nachdem die
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>-Container
- und <code>.htaccess</code>-Dateien gelesen sind, jedoch vor den
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-Containern,
- in der Reihenfolge ihres Auftretens ausgeführt. Beachten Sie, dass
- <code class="directive">&lt;Files&gt;</code>-Anweisungen innerhalb von
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>-Containern
- auftreten können, um den Teil des Dateisystems einzuschränken,
- den sie betreffen.</p>
-
- <p>Das Argument <var>Dateiname</var> kann einen Dateinamen oder eine
- Zeichenkette mit Platzhaltern enthalten, wobei <code>?</code> auf ein
- einzelnes Zeichen passt und <code>*</code> auf eine beliebige Folge von
- Zeichen. Erweiterte reguläre Ausdrücke können ebenfalls
- verwendet werden, indem das Zeichen <code>~</code> hinzugefügt wird.
- Beispielsweise würde</p>
-
- <div class="example"><p><code>
- &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
- </code></p></div>
-
- <p>auf die gebräuchlichsten Grafikformate im Internet passen.
- <code class="directive"><a href="#filesmatch">&lt;FilesMatch&gt;</a></code> wird
- jedoch bevorzugt.</p>
-
- <p>Beachten Sie bitte, dass die <code class="directive">&lt;Files&gt;</code>-Container anders als <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>- und <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-Container innerhalb
- von <code>.htaccess</code>-Dateien verwendet werden können.
- Dies erlaubt den Anwendern auf Dateiebene die Kontrolle über ihre
- eigenen Dateien.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="FilesMatch" id="FilesMatch">&lt;FilesMatch&gt;</a>-<a name="filesmatch" id="filesmatch">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Enthält Direktiven, die für Dateinamen gelten, die
- auf einen regulären Ausdruck passen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">&lt;FilesMatch&gt;</code>
- begrenzt wie die Direktive <code class="directive"><a href="#files">&lt;Files&gt;</a></code> die enthaltenen Anweisungen auf
- Dateinamen. Sie akzeptiert jedoch reguläre Ausdrücke.
- Beispielsweise würde</p>
-
- <div class="example"><p><code>
- &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
- </code></p></div>
-
- <p>auf die gebräuchlichsten Grafikformate im Internet passen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForceType" id="ForceType">ForceType</a>-<a name="forcetype" id="forcetype">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Erzwingt die Auslieferung aller passendenden Dateien mit dem
-angegebenen MIME-Content-Type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForceType <var>MIME-Type</var>|None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Wurde im Apache 2.0 in den Core verschoben</td></tr>
-</table>
- <p>Wenn sie innerhalb einer <code>.htaccess</code>-Datei, eines
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>-,
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code>-Containers
- angegeben wird, erzwingt die Direktive die Auslieferung aller
- entsprechenden Dateien mit dem Content-Type, der durch
- <var>MIME-Type</var> definiert wurde. Wenn Sie zum Beispiel ein
- Verzeichnis voller GIF-Dateien haben, die Sie nicht alle durch
- <code>.gif</code> kennzeichnen wollen, können Sie angeben:</p>
-
- <div class="example"><p><code>
- ForceType image/gif
- </code></p></div>
-
- <p>Beachten Sie bitte, dass die Direktive anders als <code class="directive"><a href="#defaulttype">DefaultType</a></code> alle MIME-Type-Zuordnungen
- überschreibt, einschließlich Dateiendungen, die einen
- Medientyp bezeichnen könnten.</p>
-
- <p>Sie können jede <code class="directive">ForceType</code>-Angabe
- durch die Verwendung des Wertes <code>None</code> überschreiben:</p>
-
- <div class="example"><p><code>
- # erzwinge image/gif für alle Dateien:<br />
- &lt;Location /images&gt;<br />
- <span class="indent">
- ForceType image/gif<br />
- </span>
- &lt;/Location&gt;<br />
- <br />
- # hier jedoch normale MIME-Type-Zuordnungen:<br />
- &lt;Location /images/mixed&gt;<br />
- <span class="indent">
- ForceType None<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HostnameLookups" id="HostnameLookups">HostnameLookups</a>-<a name="hostnamelookups" id="hostnamelookups">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Aktiviert DNS-Lookups auf Client-IP-Adressen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>HostnameLookups On|Off|Double</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>HostnameLookups Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Diese Direktive aktiviert die DNS-Abfrage <span class="transnote">(<em>Anm.d.Ü.:</em> ein sogenannter
- DNS-Lookup)</span>, so dass Hostnamen protokolliert (und in
- <code>REMOTE_HOST</code> an CGIs/SSIs übergeben) werden könnnen.
- Der Wert <code>Double</code> bezieht sich auf ein
- Double-Reverse-DNS-Lookup. D.h. nachdem ein Reverse-Lookup
- durchgeführt wurde, wird dann auf dem Ergebnis ein
- Forward-Lookup ausgeführt. Wenigstens eine der IP-Adressen
- aus dem Forward-Lookup muss der Originaladresse entsprechen.
- (In der "tcpwrappers"-Terminologie wird dies <code>PARANOID</code>
- genannt.)</p>
-
- <p>Unabhängig von der Einstellung wird ein Double-Reverse-Lookup
- durchgeführt, wenn <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> zur
- Zugriffskontrolle per Hostnamen eingesetzt wird. Dies ist aus
- Sicherheitsgründen notwendig. Beachten Sie, dass das Ergebnis dieses
- Double-Reverse-Lookups nicht generell verfügbar ist, solange Sie
- nicht <code>HostnameLookups Double</code> setzen. Wenn beispielsweise
- nur <code>HostnameLookups On</code> angegeben ist und eine Anfrage
- für ein Objekt erfolgt, welches durch Hostnamen-Beschränkungen
- geschützt ist, dann wird CGIs nur das Ergebnis des
- Singel-Reverse-Lookups in <code>REMOTE_HOST</code> übergeben,
- egal ob das Doble-Reverse-Lookup fehlschlug oder nicht.</p>
-
- <p>Die Voreinstellung ist <code>Off</code>, um Netzwerktraffic bei den
- Angeboten einzusparen, die nicht tatsächlich Reverse-Lookups
- benötigen. Es ist auch für die Endanwender besser, da sie nicht
- die zusätzliche Wartezeit ertragen müssen, die ein Lookup mit
- sich bringt. Hoch frequentierte Angebote sollten diese Direktive auf
- <code>Off</code>lassen. Das Hilfsprogramm <a href="../programs/logresolve.html">logresolve</a>, das
- standardmäßig in das Unterverzeichnis <code>bin</code>
- Ihres Installationsverzeichnisses kompiliert wird, kann dazu verwendet
- werden, um offline Hostnamen zu protokollierten IP-Adressen
- nachzuschlagen.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfDefine" id="IfDefine">&lt;IfDefine&gt;</a>-<a name="ifdefine" id="ifdefine">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Schließt Direktiven ein, die nur ausgeführt werden,
-wenn eine Testbedingung beim Start wahr ist</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;IfDefine [!]<var>Parametername</var>&gt; ...
- &lt;/IfDefine&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Der Container <code>&lt;IfDefine <var>Test</var>&gt;...&lt;/IfDefine&gt;
- </code> wird dazu verwendet, Direktiven als bedingt zu kennzeichnen.
- Die Direktiven innerhalb eines <code class="directive">&lt;IfDefine&gt;</code>-Abschnittes werden nur ausgeführt,
- wenn <var>Test</var> wahr ist. Ist <var>Test</var> falsch, wird alles
- zwischen der Start- und Endemarkierung ignoriert.</p>
-
- <p>In der <code class="directive">&lt;IfDefine&gt;</code>-Anweisung kann
- <var>Test</var> eine von zwei Formen annehmen:</p>
-
- <ul>
- <li><var>Parametername</var></li>
-
- <li><code>!</code><var>Parametername</var></li>
- </ul>
-
- <p>Im ersten Fall werden die Direktiven zwischen der Start- und
- Endemarkierung nur ausgeführt, wenn der Parameter namens
- <var>Parametername</var> definiert ist. Die zweite Form kehrt den
- Test um und führt die Direktiven nur dann aus, wenn
- <var>Parametername</var> <strong>nicht</strong> definiert ist.</p>
-
- <p>Das Argument <var>Parametername</var> ist ein sogenanntes
- "Define", das beim beim Start des Servers in der
- <code>httpd</code>-Befehlszeile durch <code>-D<var>Parameter</var></code>
- angegeben wird.</p>
-
- <p><code class="directive">&lt;IfDefine&gt;</code>-Container können
- ineinander verschachtelt werden, um einfache Multi-Parameter-Tests
- zu implementieren. Beispiel:</p>
-
- <div class="example"><p><code>
- httpd -DReverseProxy ...<br />
- <br />
- # httpd.conf<br />
- &lt;IfDefine ReverseProxy&gt;<br />
- <span class="indent">
- LoadModule rewrite_module modules/mod_rewrite.so<br />
- LoadModule proxy_module modules/libproxy.so<br />
- </span>
- &lt;/IfDefine&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfModule" id="IfModule">&lt;IfModule&gt;</a>-<a name="ifmodule" id="ifmodule">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Schließt Direktiven ein, die abhängig vom
-Vorhandensein oder Fehlen eines speziellen Moduls ausgeführt
-werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;IfModule [!]<var>Modulname</var>|<var>Modulbezeichner</var>&gt;
- ... &lt;/IfModule&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Modulbezeichner sind ab Version 2.1
- verfügbar.</td></tr>
-</table>
- <p>Der Container <code>&lt;IfModule
- <var>Test</var>&gt;...&lt;/IfModule&gt;</code> wird dazu verwendet,
- Direktiven als abhängig von dem Vorhandensein eines speziellen
- Moduls zu kennzeichnen. Die Direktiven innerhalb eines <code class="directive">&lt;IfModule&gt;</code>-Abschnitts werden nur
- ausgeführt, wenn <var>Test</var> wahr ist. Ist <var>Test</var>
- falsch, wird alles zwischen der Start- und Endemarkierung ignoriert.</p>
-
- <p>In der <code class="directive">&lt;IfModule&gt;</code>-Anweisung
- kann <var>Test</var> eine von zwei Formen annehmen:</p>
-
- <ul>
- <li><var>Modul</var></li>
-
- <li><code>!</code><var>Modul</var></li>
- </ul>
-
- <p>Im ersten Fall werden die Direktiven zwischen der Start- und
- Endemarkierung nur ausgeführt, das Modul namens
- <var>Modul</var> im Apache enthalten ist -- entweder einkompiliert
- oder mittels <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
- dynamisch geladen. Die zweite Form dreht den Test um und führt die
- Direktiven nur aus, wenn <var>Modul</var> <strong>nicht</strong>
- enthalten ist.</p>
-
- <p>Das Argument <var>Modul</var> kann entweder der Modulbezeichner oder
- der Dateiname des Moduls zum Zeitpunkt seiner Kompilierung sein.
- <code>rewrite_module</code> beispielsweise ist der Bezeichner und
- <code>mod_rewrite.c</code> ist der Dateiname. Wenn ein Modul aus mehreren
- Quelltext-Dateien besteht, verwenden Sie den Namen der Datei, welche die
- Zeichenfolge <code>STANDARD20_MODULE_STUFF</code> enthält.</p>
-
- <p><code class="directive">&lt;IfModule&gt;</code>-Container können
- inneinander verschachtelt werden, um einfache Multi-Modul-Tests
- durchzuführen.</p>
-
- <p>Dieser Container sollte verwendet werden, wenn Sie eine
- Konfigurationsdatei benötigen, die unabhängig davon funktioniert,
- ob ein bestimmtes Modul verfügbar ist oder nicht. Normalerweise
- ist es nicht notwendig, Direktiven in <code class="directive">&lt;IfModule&gt;</code>-Containern unterzubringen.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Include" id="Include">Include</a>-<a name="include" id="include">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Fügt andere Konfigurationsdateien innerhalb der
-Server-Konfigurationsdatei ein</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Include <var>Dateiname</var>|<var>Verzeichnis</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Die Platzhalter-Suche ist verfügbar seit
-2.0.41</td></tr>
-</table>
- <p>Die Direktive erlaubt das Einfügen anderer Konfigurationsdateien
- in die Konfigurationsdatei des Servers.</p>
-
- <p>Shell-typische (<code>fnmatch()</code>) Platzhlaterzeichen können
- dazu verwendet werden, mehrere Dateien auf einmal in alphabetischer
- Reihenfolge einzufügen. Wenn <code class="directive">Include</code>
- darüber hinaus auf ein Verzeichnis anstatt auf eine Datei zeigt,
- liest der Apache alle Dateien in diesem Verzeichnis und allen
- Unterverzeichnissen ein. Das Einfügen ganzer Verzeichnisse ist
- jedoch nicht empfehlenswert, da temporäre Dateien sehr leicht
- versehentlich in einem Verzeichnis zurückgelassen werden, was
- <code>httpd</code> scheitern lassen kann.</p>
-
- <p>Der angegebene Dateiname kann ein absoluter Pfad sein oder relativ zum
- <code class="directive"><a href="#serverroot">ServerRoot</a></code>-Verzeichnis angegeben
- werden.</p>
-
- <p>Beispiele:</p>
-
- <div class="example"><p><code>
- Include /usr/local/apache2/conf/ssl.conf<br />
- Include /usr/local/apache2/conf/vhosts/*.conf
- </code></p></div>
-
- <p>Oder Sie geben Pfade relativ zu Ihrem <code class="directive"><a href="#serverroot">ServerRoot</a></code>-Verzeichnis an:</p>
-
- <div class="example"><p><code>
- Include conf/ssl.conf<br />
- Include conf/vhosts/*.conf
- </code></p></div>
-
- <p>Der Aufruf von <code>apachectl configtest</code> liefert eine Liste
- der Dateien, die während des Konfigurations-Tests verarbeitet
- werden:</p>
-
- <div class="example"><p><code>
- root@host# apachectl configtest<br />
- Processing config file: /usr/local/apache2/conf/ssl.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf<br />
- Syntax OK
- </code></p></div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../programs/apachectl.html">apachectl</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="KeepAlive" id="KeepAlive">KeepAlive</a>-<a name="keepalive" id="keepalive">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Aktiviert persistente HTTP-Verbindungen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>KeepAlive On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>KeepAlive On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Keep-Alive-Erweiterung von HTTP/1.0 und die
- HTTP/1.1-Funktionalität persistenter Verbindungen unterstützt
- langlebige HTTP-Sitzungen, die es erlauben, mehrere Anfragen über
- die gleich TCP-Verbindung zu senden. In einigen Fällen wurde eine
- Beschleunigung der Wartezeiten von beinahe 50% für HTML-Dokumente
- mit vielen Bildern festgestellt. Um Keep-Alive-Verbindungen zu aktivieren,
- setzen Sie <code>KeepAlive On</code>.</p>
-
- <p>Bei HTTP/1.0-Clients werden Keep-Alive-Verbindungen nur dann verwendet,
- wenn sie vom Client eigens angefordert werden. Desweiteren können
- Keep-Alive-Verbindungen bei einem HTTP/1.0-Client nur dann verwendet
- werden, wenn die Länge des Inhalts im Voraus bekannt ist. Dies
- impliziert, dass dynamische Inhalte wie CGI-Ausgaben, SSI-Seiten und
- servergenerierte Verzeichnisauflistungen im Allgemeinen keine
- Keep-Alive-Verbindungen mit HTTP/1.0-Clients verwenden. Bei
- HTTP/1.1-Clients sind Keep-Alive-Verbindungen Voreinstellung, solange
- nichts anderes angegeben ist. Wenn der Client es anfordert, wird
- Chunked-Encoding verwendet, um Inhalte mit unbekannter Länge
- über persistente Verbindungen zu senden.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="KeepAliveTimeout" id="KeepAliveTimeout">KeepAliveTimeout</a>-<a name="keepalivetimeout" id="keepalivetimeout">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Zeitspanne, die der Server während persistenter Verbindungen
-auf nachfolgende Anfragen wartet</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>KeepAliveTimeout <var>Sekunden</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>KeepAliveTimeout 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Dies legt die Anzahl der Sekunden fest, die der Apache auf weitere
- Anfragen wartet, bevor er die Verbindung schließt. Nachdem einmal
- eine Anfrage entgegen genommen wurde, wird die durch die Direktive
- <code class="directive"><a href="#timeout">Timeout</a></code> festgelegte Auszeit
- angewendet.</p>
-
- <p>Auf stark belasteten Servern kann ein hoher
- <code class="directive">KeepAliveTimeout</code>-Wert zu Durchsatzminderungen
- führen. Je höher die Auszeit angegeben ist, desto länger
- ist der Apache damit beschäftigt, auf untätige Clients zu
- warten.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Limit" id="Limit">&lt;Limit&gt;</a>-<a name="limit" id="limit">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Beschränkt die eingeschlossenen Zugriffskontrollen auf
-bestimmte HTTP-Methoden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Limit <var>Methode</var> [<var>Methode</var>] ... &gt; ...
- &lt;/Limit&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Zugriffskontrollen gelten normalerweise für <strong>alle</strong>
- Zugriffsmethoden, was normalerweise auch das gewünschte Verhalten ist.
- <strong>Im Allgemeinen sollten Zugriffskontrollen nicht in einen
- <code class="directive">&lt;Limit&gt;</code>-Container gepackt
- werden.</strong></p>
-
- <p>Der Sinn der Direktive <code class="directive">&lt;Limit&gt;</code>
- ist es, den Effekt der Zugriffskontrollen auf die angegebenen
- HTTP-Methoden zu beschränken. Bei allen anderen Methoden haben
- die in der <code class="directive">&lt;Limit&gt;</code>-Gruppe
- enthaltenen Zugriffsbeschränkungen <strong>keine Wirkung</strong>.
- Im folgenden Beispiel gilt die Zugriffskontrolle nur für die
- Methoden <code>POST</code>, <code>PUT</code> und <code>DELETE</code>.
- Alle anderen Methoden bleiben ungeschützt:</p>
-
- <div class="example"><p><code>
- &lt;Limit POST PUT DELETE&gt;<br />
- <span class="indent">
- Require valid-user<br />
- </span>
- &lt;/Limit&gt;
- </code></p></div>
-
- <p>Sie können eine oder mehrere der folgenden Methoden angeben:
- <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
- <code>CONNECT</code>, <code>OPTIONS</code>,
- <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
- <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
- <code>LOCK</code> und <code>UNLOCK</code>. <strong>Die Methodennamen
- unterscheiden zwischen Groß- und Kleinschreibung.</strong> Wenn
- <code>GET</code> verwendet wird, sind <code>HEAD</code>-Anfragen
- ebenfalls eingeschränkt. Die <code>TRACE</code>-Methode kann nicht
- limitiert werden.</p>
-
- <div class="warning">
- Wenn es um Zugriffsbeschränkungen geht, sollte
- ein <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code>-Container sollte immmer einem <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>-Container vorgezogen
- werden, da <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code>
- einen Schutz gegen beliebige Methoden bietet.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitExcept" id="LimitExcept">&lt;LimitExcept&gt;</a>-<a name="limitexcept" id="limitexcept">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Beschränkt Zugriffskontrollen auf alle HTTP-Methoden
-außer den genannten</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;LimitExcept <var>Methode</var> [<var>Methode</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;LimitExcept&gt;</code> und
- <code>&lt;/LimitExcept&gt;</code> werden dazu verwendet, eine Gruppe
- von Anweisungen zur Zugriffskontrolle zusammenzufassen, die dann auf
- jede HTTP-Methode angewendet werden, die <strong>nicht</strong>
- als Argument angegeben ist. D.h. dies ist das Gegenteil des
- <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>-Containers
- und kann zur Steuerung von Standard- und nicht-Standard-/unbekannten
- Methoden verwendet werden. Für weitere Einzelheiten lesen Sie bitte
- die Beschreibung zu <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- &lt;LimitExcept POST GET&gt;<br />
- <span class="indent">
- Require valid-user<br />
- </span>
- &lt;/LimitExcept&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitInternalRecursion" id="LimitInternalRecursion">LimitInternalRecursion</a>-<a name="limitinternalrecursion" id="limitinternalrecursion">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Bestimmt die maximale Anzahl interner Umleitungen und
- verschachtelter Unteranfragen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitInternalRecursion <var>Zahl</var> [<var>Zahl</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LimitInternalRecursion 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar ab Apache 2.0.47</td></tr>
-</table>
- <p>Eine interne Umleitung erfolgt beispielsweise, wenn die Direktive
- <code class="directive"><a href="../mod/mod_actions.html#action">Action</a></code> verwendet wird, welche
- die Originalanfrage intern zu einem CGI-Skript weiterleitet. Eine
- Unteranfrage <span class="transnote">(<em>Anm.d.Ü.:</em> engl. Subrequest)</span> ist ein Mechanismus des
- Apache, um herauszufinden, was bei einer URI geschehen würde, wäre
- sie angefordert worden. <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> z.B. verwendet
- Unteranfragen, um nach den Dateien zu suchen, die in der <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>-Anweisung aufgeführt
- sind.</p>
-
- <p><code class="directive">LimitInternalRecursion</code> bewahrt den Server vor
- einem Absturz, wenn er in eine Endlosschleife aus internen Umleitungen
- oder Unteranfragen hineinläuft. Derartige Schleifen werden
- gewöhnlich durch Fehlkonfiguration verursacht.</p>
-
- <p>Die Direktive setzt zwei verschiedene Begrenzungen, welche je Anfrage
- ausgewertet werden. Die erste <var>Zahl</var> bestimmt die maximale
- Anzahl der Umleitungen, die aufeinander folgen dürfen. Die zweite
- <var>Zahl</var> legt fest, wie tief Unteranfragen ineinander
- verschachtelt werden dürfen. Wenn Sie lediglich eine <var>Zahl</var>
- angeben, wird sie beiden Begrenzungen zugewiesen.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- LimitInternalRecursion 5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestBody" id="LimitRequestBody">LimitRequestBody</a>-<a name="limitrequestbody" id="limitrequestbody">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt die Gesamtgröße des vom Client gesendeten
-HTTP-Request-Body</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestBody <var>Bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LimitRequestBody 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive gibt die Anzahl der <var>Bytes</var> zwischen 0
- (unbegrenzt) und 2147483647 (2GB) an, die im Request-Body (Datenteil der
- Anfrage) erlaubt sind.</p>
-
- <p>Die Direktive <code class="directive">LimitRequestBody</code> erlaubt es dem
- Benutzer, die Größe des HTTP-Request-Bodys in dem Kontext zu
- begrenzen, in dem die Anweisung angegeben ist (Server, pro Verzeichnis,
- pro Datei oder pro Adresse). Wenn die Anfrage des Clients dieses Limit
- überschreitet, gibt der Server einen Fehler zurück anstatt die
- Anfrage zu bearbeiten. Die Größe des Datenteils einer Anfrage
- kann sehr stark variieren, abhängig von der Art der Ressource und
- den für diese Ressource erlaubten Methoden. CGI-Skripte verwenden
- den Datenteil üblicherweise zum Empfang von Formulardaten. Wird
- die <code>PUT</code>-Methode angewendet, dann muss der Wert mindestens
- so groß sein wie irgendeine Darstellungsform, die der Server
- für diese Ressource akzeptieren soll.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine größere
- Kontrolle gegenüber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann.</p>
-
- <p>Wenn Sie beispielsweise das Hochladen von Dateien zu einer bestimmten
- Adresse erlauben, aber die Größe der hochgeladenen Dateien
- auf 100K beschränken wollen, können Sie die folgende Anweisung
- verwenden:</p>
-
- <div class="example"><p><code>
- LimitRequestBody 102400
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestFields" id="LimitRequestFields">LimitRequestFields</a>-<a name="limitrequestfields" id="limitrequestfields">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt die Anzahl der HTTP-Request-Header, die vom Client
-entgegengenommen werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestFields <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LimitRequestFields 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><var>Anzahl</var> ist ein Integer-Wert (eine positive Ganzzahl)
- zwischen 0 (unbegrenzt) und 32767. Die Voreinstellung wird durch die
- Konstante <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (<code>100</code>
- bei der Auslieferung) zur Kompilierungszeit gesetzt.</p>
-
- <p>Die Direktive <code class="directive">LimitRequestFields</code> erlaubt es
- dem Serveradministrator, die maximale Anzahl der in einem HTTP-Request
- erlaubten HTTP-Request-Header zu verändern. Für den Server
- muss dieser Wert größer sein als die Anzahl der Headerzeilen,
- die ein normaler Client senden könnte. Die Anzahl der Request-Header,
- die ein gewöhnlicher Client verwendet, überschreitet selten 20
- Zeilen. Allerdings kann dies zwischen den verschiedenen
- Client-Ausführungen variieren, oft abhängig vom Ausmaß,
- mit dem der Anwender die genaue Content-Negotiation-Unterstützung
- seines Browsers konfiguriert hat. Optionale HTTP-Erweiterungen
- äußern sich oft in Form von HTTP-Headern.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine größere
- Kontrolle gegenüber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann. Der Wert sollte erhöht werden, wenn normale Clients
- eine Fehlermeldung vom Server erhalten, die besagt, dass mit der Anfrage
- zu viele Headerzeilen gesendet wurden.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- LimitRequestFields 50
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestFieldSize" id="LimitRequestFieldSize">LimitRequestFieldSize</a>-<a name="limitrequestfieldsize" id="limitrequestfieldsize">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt die Länge des vom Client gesendeten
-HTTP-Request-Headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestFieldsize <var>Bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LimitRequestFieldsize 8190</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive gibt die Anzahl der <var>Bytes</var> zwischen 0
- und dem Wert der zur Kompilierungszeit definierten Konstante
- <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (<code>8190</code> bei
- der Auslieferung) an, die in einem HTTP-Header erlaubt sind.</p>
-
- <p>Die Direktive <code class="directive">LimitRequestFieldsize</code> erlaubt es
- dem Serveradministrator, die maximale Größe eines
- HTTP-Request-Headers auf einen Wert unterhalb der normalen, im Server
- einkompilierten Größe des Eingabepuffers zu verringern.
- Für den Server muss der Wert groß genug sein, um eine beliebige
- Headerzeile einer normalen Client-Anfrage vorzuhalten. Die
- Größe variiert stark zwischen den verschiedenen
- Client-Ausführungen, oft abhängig vom Ausmaß, mit dem
- der Anwender die genaue Content-Negotiation-Unterstützung seines
- Browsers konfiguriert hat.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine größere
- Kontrolle gegenüber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- LimitRequestFieldSize 4094
- </code></p></div>
-
- <div class="note">Unter normalen Umständen sollte die Voreinstellung nicht
- verändert werden.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestLine" id="LimitRequestLine">LimitRequestLine</a>-<a name="limitrequestline" id="limitrequestline">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt die Länge der vom Client entgegengenommenen
-HTTP-Anfragezeile</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestLine <var>Bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LimitRequestLine 8190</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive legt die Anzahl der <var>Bytes</var> zwischen 0 und
- dem Wert der zur Kompilierungszeit definierten Konstante
- <code>DEFAULT_LIMIT_REQUEST_LINE</code> (<code>8190</code> bei der
- Auslieferung) fest, die in der HTTP-Anfragezeile erlaubt sind.</p>
-
- <p>Die Direktive <code class="directive">LimitRequestLine</code> erlaubt es dem
- Serveradministrator, die maximale Größe der
- HTTP-Anfragezeile auf einen Wert unterhalb der normalen, im Server
- einkompilierten Größe des Eingabepuffers zu verringern. Da
- die Anfragezeile aus der HTTP-Methode, der URI und der Protokollversion
- besteht, bedeutet die <code class="directive">LimitRequestLine</code>-Direktive
- eine Beschränkung der Länge der für eine Anfrage an den
- Server erlaubten Anfrage-URI. Für den Server muss der Wert groß
- genug sein, um jeden seiner Ressourcennamen vorzuhalten,
- einschließlich aller Informationen, die im Query-String einer
- <code>GET</code>-Anfrage übergeben werden können.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine größere
- Kontrolle gegenüber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- LimitRequestLine 4094
- </code></p></div>
-
- <div class="note">Unter normalen Umständen sollte die Voreinstellung nicht
- verändert werden.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitXMLRequestBody" id="LimitXMLRequestBody">LimitXMLRequestBody</a>-<a name="limitxmlrequestbody" id="limitxmlrequestbody">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt die Größe eines XML-basierten
-Request-Bodys</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitXMLRequestBody <var>Bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LimitXMLRequestBody 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Dies gibt die Grenze für die maximale Größe (in Bytes)
- des XML-basierten Request-Bodys an. Der Wert <code>0</code> deaktiviert
- diese Prüfung.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- LimitXMLRequestBody 0
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Location" id="Location">&lt;Location&gt;</a>-<a name="location" id="location">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Wendet die enthaltenen Direktiven nur auf die entsprechenden
-URLs an</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Location
- <var>URL-Pfad</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">&lt;Location&gt;</code>
- begrenzt die Reichweite der enthaltenen Anweisungen auf URLs.
- Sie ist der Direktive <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ähnlich und startet einen
- Abschnitt, der mit der Anweisung <code>&lt;/Location&gt;</code>
- abgeschlossen wird. <code class="directive">&lt;Location&gt;</code>-Container werden, nachdem die
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>-Container
- und <code>.htaccess</code>-Dateien gelesen wurden, und nach den
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code>-Containern, in
- der Reihenfolge ausgeführt, in der sie in der Konfigurationsdatei
- erscheinen.</p>
-
- <p><code class="directive">&lt;Location&gt;</code>-Abschnitte operieren
- vollständig außerhalb des Dateisystems. Dies hat mehrere
- Konsequenzen. An Wichtigsten, <code class="directive">&lt;Location&gt;</code>-Anweisungen sollten nicht dafür
- verwendet werden, den Zugriff zu Teilen des Dateisystems zu steuern. Da
- mehrere unterschiedliche URLs auf die gleiche Stelle des Dateisystems
- zeigen können, könnte eine solche Zugriffskontrolle u.U.
- umgangen werden.</p>
-
- <div class="note"><h3>Wann sollte<code class="directive">&lt;Location&gt;</code> verwendet werden</h3>
-
- <p>Verwenden Sie <code class="directive">&lt;Location&gt;</code>, um
- Anweisungen auf Inhalte anzuwenden, die außerhalb des Dateisystems
- abgelegt sind. Benutzen Sie <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> und <code class="directive"><a href="#files">&lt;Files&gt;</a></code> für Inhalte, die
- innerhalb des Dateisystems abgelegt sind. Eine Ausnahme bildet
- <code>&lt;Location /&gt;</code>, welches ein einfacher Weg ist, um eine
- Konfiguration auf den gesamten Server anzuwenden.</p>
- </div>
-
- <p>Für alle nicht-Proxy-Anfragen ist die entsprechende URL
- ein URL-Pfad in der Form <code>/path/</code>. Es dürfen weder ein
- Schema, noch ein Hostname, noch ein Port, noch ein Query-String einbezogen
- werden. Für Proxy-Anfragen hat die Vergleichs-URL die Form
- <code>schema://servername/path</code>. Das Präfix muss angegeben
- werden.</p>
-
- <p>Die URL kann Platzhalter verwenden. In einer Zeichenfolge mit
- Platzhaltern entspricht <code>?</code> einem einzelnen Zeichen und
- <code>*</code>einer beliebigen Zeichenfolge.</p>
-
- <p>Erweiterte reguläre Ausdrücke können ebenfalls
- verwendet werden, indem das Zeichen <code>~</code> hinzugefügt
- wird. Beispielsweise würde</p>
-
- <div class="example"><p><code>
- &lt;Location ~ "/(extra|special)/data"&gt;
- </code></p></div>
-
- <p>auf URLs passen, welche die Zeichenfolge <code>/extra/data</code>
- oder <code>/special/data</code> enthalten. Die Direktive <code class="directive"><a href="#locationmatch">&lt;LocationMatch&gt;</a></code> verhält sich
- genauso wie <code class="directive">&lt;Location&gt;</code> mit
- regulären Ausdrücken.</p>
-
- <p>Die Funktionalität von <code class="directive">&lt;Location&gt;</code> ist insbesondere dann nützlich,
- wenn sie mit der <code class="directive"><a href="#sethandler">SetHandler</a></code>-Direktive
- kombiniert wird. Um zum Beispiel Statusabfragen zu aktivieren, sie aber
- nur von Browsern aus <code>foo.com</code> zuzulassen, könnten Sie
- schreiben:</p>
-
- <div class="example"><p><code>
- &lt;Location /status&gt;<br />
- <span class="indent">
- SetHandler server-status<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="note"><h3>Anmerkung zu / (Schrägstrich, Slash)</h3>
- <p>Das Slash-Zeichen hat eine besondere Bedeutung, je nachdem, wo es
- in der URL erscheint. Manche werden sein Verhalten vom Dateisystem
- gewohnt sein, wo mehrere aufeinanderfolgende Schrägstriche
- häufig zu einem Schrägstrich zusammengefaßt werden
- (<em>d.h.</em> <code>/home///foo</code> ist das gleiche wie
- <code>/home/foo</code>). Im URL-Raum ist dies nicht notwendigerweise
- genauso. Bei der Direktive <code class="directive"><a href="#locationmatch">&lt;LocationMatch&gt;</a></code> und der <code class="directive">&lt;Location&gt;</code>-Version mit regulären Ausdrücken
- müssen Sie explizit mehrere Schrägstriche angeben, wenn Sie
- genau dies beabsichtigen.</p>
-
- <p>Beispielsweise würde <code>&lt;LocationMatch ^/abc&gt;</code>
- auf die angeforderte URL <code>/abc</code> passen, nicht aber auf
- <code>//abc</code>. Die Direktive <code class="directive">&lt;Location&gt;</code> (ohne reguläre Ausdrücke) verhält
- sich ähnlich, wenn sie für Proxy-Anfragen verwendet wird.
- Wenn <code class="directive">&lt;Location&gt;</code> (ohne
- reguläre Ausdrücke) jedoch für nicht-Proxy-Anfragen
- verwendet wird, werden stillscheigend mehrere Schrächstriche mit
- mit einem einzigen Schrägstrich gleichgesetzt. Geben Sie
- beispielsweise <code>&lt;Location /abc/def&gt;</code> an und die
- Anfrage lautet auf <code>/abc//def</code>, dann greift die Anweisung.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LocationMatch" id="LocationMatch">&lt;LocationMatch&gt;</a>-<a name="locationmatch" id="locationmatch">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Wendet die enthaltenen Direktiven nur auf URLs an, die auf
-reguläre Ausdrücke passen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">&lt;LocationMatch&gt;</code>
- begrenzt die Reichweite der enthaltenen Anweisungen in der gleichen Weise
- wie <code class="directive"><a href="#location">&lt;Location&gt;</a></code> auf URLs.
- Sie verwendet jedoch reguläre Ausdrücke als Argument anstelle
- einer einfachen Zeichenkette. Beispielsweise würde</p>
-
- <div class="example"><p><code>
- &lt;LocationMatch "/(extra|special)/data"&gt;
- </code></p></div>
-
- <p>auf URLs passen, welche die Zeichenfolge <code>/extra/data</code>
- oder <code>/special/data</code> enthalten.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogLevel" id="LogLevel">LogLevel</a>-<a name="loglevel" id="loglevel">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Steuert die Ausführlichkeit des Fehlerprotokolls</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogLevel <var>Level</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LogLevel warn</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">LogLevel</code> stellt die Ausführlichkeit
- der Nachrichten ein, die im Fehlerprotokoll aufgezeichnet werden (siehe
- Direktive <code class="directive"><a href="#errorlog">ErrorLog</a></code>). Die folgenden,
- nach absteigender Aussagekraft sortierten <var>Level</var> sind
- verfügbar:</p>
-
- <table class="bordered">
-
- <tr>
- <th><strong>Level</strong> </th>
-
- <th><strong>Beschreibung</strong> </th>
-
- <th><strong>Beispiel</strong> </th>
- </tr>
-
- <tr>
- <td><code>emerg</code> </td>
-
- <td>Notfall - das System ist unbenutzbar.</td>
-
- <td>"Child cannot open lock file. Exiting"
- <span class="transnote">(<em>Anm.d.Ü.:</em> "Kindprozess kann die Lock-Datei nicht öffnen.
- Beende Programm")</span></td>
- </tr>
-
- <tr>
- <td><code>alert</code> </td>
-
- <td>Maßnahmen müssen unverzüglich ergriffen
- werden.</td>
-
- <td>"getpwuid: couldn't determine user name from uid"
- <span class="transnote">(<em>Anm.d.Ü.:</em> "getpwuid: kann keinen Benutzernamen aus der UID
- ermitteln")</span></td>
- </tr>
-
- <tr>
- <td><code>crit</code> </td>
-
- <td>Kritischer Zustand.</td>
-
- <td>"socket: Failed to get a socket, exiting child"
- <span class="transnote">(<em>Anm.d.Ü.:</em> "socket: Socket-Zuweisung fehlgeschlagen, beende
- Kindprozess")</span></td>
- </tr>
-
- <tr>
- <td><code>error</code> </td>
-
- <td>Fehlerbedingung.</td>
-
- <td>"Premature end of script headers"
- <span class="transnote">(<em>Anm.d.Ü.:</em> "Vorzeitiges Ende der Skript-Header")</span></td>
- </tr>
-
- <tr>
- <td><code>warn</code> </td>
-
- <td>Warnung.</td>
-
- <td>"child process 1234 did not exit, sending another SIGHUP"
- <span class="transnote">(<em>Anm.d.Ü.:</em> "Kindprozess 1234 nicht beendet, sende ein weiteres
- SIGHUP")</span></td>
- </tr>
-
- <tr>
- <td><code>notice</code> </td>
-
- <td>Normaler, aber signifikanter Zustand.</td>
-
- <td>"httpd: caught SIGBUS, attempting to dump core in ..."
- <span class="transnote">(<em>Anm.d.Ü.:</em> "httpd: SIGBUS empfangen, versuche Speicherabbild nach ...
- zu schreiben")</span></td>
- </tr>
-
- <tr>
- <td><code>info</code> </td>
-
- <td>Information.</td>
-
- <td>"Server seems busy, (you may need to increase
- StartServers, or Min/MaxSpareServers)..."
- <span class="transnote">(<em>Anm.d.Ü.:</em> "Server scheint beschäftigt zu sein,
- (möglicherweise müssen Sie StartServers oder
- Min/MaxSpareServers erhöhen)")</span></td>
- </tr>
-
- <tr>
- <td><code>debug</code> </td>
-
- <td>Debug-Level-Nachrichten</td>
-
- <td>"Opening config file ..."
- <span class="transnote">(<em>Anm.d.Ü.:</em> "Öffne Konfigurationsdatei ...")</span></td>
- </tr>
- </table>
-
- <p>Geben Sie einen bestimmten Level an, denn werden Nachrichten von
- allen höheren Leveln ebenso angezeigt. <em>Z.B.:</em> Wenn
- <code>LogLevel info</code> eingestellt ist, dann werden Nachrichten der
- Log-Level <code>notice</code> und <code>warn</code> ebenso eingetragen.</p>
-
- <p>Es wird empfohlen, mindestens den Level <code>crit</code> zu
- verwenden.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- LogLevel notice
- </code></p></div>
-
- <div class="note"><h3>Hinweis</h3>
- <p>Beim Protokollieren in eine reguläre Datei können
- Nachrichten des Levels <code>notice</code> nicht unterdrückt
- werden und werden daher immer protokolliert. Dies trifft allerdings
- nicht zu, wenn mittels <code>syslog</code> protokolliert wird.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxKeepAliveRequests" id="MaxKeepAliveRequests">MaxKeepAliveRequests</a>-<a name="maxkeepaliverequests" id="maxkeepaliverequests">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Anzahl der Anfragen, die bei einer persistenten Verbindung
-zulässig sind</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxKeepAliveRequests <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>MaxKeepAliveRequests 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">MaxKeepAliveRequests</code>
- begrenzt die Anzahl der Anfragen, die pro Verbindung zulässig sind,
- wenn <code class="directive"><a href="#keepalive">KeepAlive</a></code> eingeschaltet ist.
- Bei der Einstellung <code>0</code> sind unbegrenzt viele Anfragen
- erlaubt. Wir empfehlen für diese Einstellung einen hohen Wert
- für eine maximale Serverleistung.</p>
-
- <p>Beispiel:</p>
-
- <div class="example"><p><code>
- MaxKeepAliveRequests 500
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NameVirtualHost" id="NameVirtualHost">NameVirtualHost</a>-<a name="namevirtualhost" id="namevirtualhost">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Bestimmt eine IP-Adresse für den Betrieb namensbasierter
-virtueller Hosts</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NameVirtualHost <var>Adresse</var>[:<var>Port</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">NameVirtualHost</code> ist erforderlich,
- wenn Sie <a href="../vhosts/">namensbasierte virtuelle Hosts</a>
- konfigurieren möchten.</p>
-
- <p>Obwohl <var>Adresse</var> eine Hostname sein kann, wird empfohlen,
- dass Sie stets eine IP-Adresse verwenden, z.B.:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44
- </code></p></div>
-
- <p>Mit der <code class="directive">NameVirtualHost</code>-Anweisung geben Sie
- die IP-Adresse an, unter der der Server Anfragen für
- namensbasierte virtuelle Hosts entgegennimmt. Das ist üblicherweise
- die Adresse, zu der die Namen Ihrer namensbasierten virtuellen Hosts
- aufgelöst werden. Falls eine Firewall oder ein anderer Proxy die
- Anfrage in Empfang nimmt und Sie zu einer weiteren IP-Adresse des Servers
- weiterleitet, müssen Sie die IP-Adresse der physikalischen
- Schnittstelle der Maschine angeben, welche die Anfragen bedient.
- Wenn Sie mehrere namensbasierte Hosts an verschiedenen Adressen
- betreiben, wiederholen Sie einfach die Anweisung für jede
- Adresse.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Beachten Sie, dass der "Hauptserver" und jeder
- <code>_default_</code>-Server <strong>niemals</strong> bei einer
- Anfrage an einer <code class="directive">NameVirtualHost</code>-IP-Adresse
- bedient wird (es sei denn, Sie geben aus irgendwelchen Gründen
- <code class="directive">NameVirtualHost</code> an, definieren dann aber keine
- <code class="directive">VirtualHost</code>s für diese Adresse).</p>
- </div>
-
- <p>Optional können Sie die Nummer eines Ports angeben, an dem
- namensbasierte virtuelle Hosts verwendet werden sollen. Beispiel:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44:8080
- </code></p></div>
-
- <p>IPv6-Adressen müssen, wie im folgenden Beispiel angegeben, in
- eckige Klammern eingeschlossen werden:</p>
-
- <div class="example"><p><code>
- NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
- </code></p></div>
-
- <p>Um an allen Schnittstellen Anfragen zu empfangen, können Sie
- <code>*</code> als Argument verwenden.</p>
-
- <div class="example"><p><code>
- NameVirtualHost *
- </code></p></div>
-
- <div class="note"><h3>Argument der Direktive <code class="directive">&lt;VirtualHost&gt;</code></h3>
- <p>Beachten Sie, dass das Argument der <code class="directive">&lt;VirtualHost&gt;</code>-Anweisung exakt auf das Argument
- der <code class="directive">NameVirtualHost</code>-Anweisung passen muss.</p>
-
- <div class="example"><p><code>
- NameVirtualHost 1.2.3.4<br />
- &lt;VirtualHost 1.2.3.4&gt;<br />
- # ...<br />
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../vhosts/">Dokumentation zu virtuellen Hosts</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Options" id="Options">Options</a>-<a name="options" id="options">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Definiert, welche Eigenschaften oder Funktionen in einem
-bestimmten Verzeichnis verfügbar sind</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Options
- [+|-]<var>Option</var> [[+|-]<var>Option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Options All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">Options</code> steuert, welche
- Eigenschaften bzw. Funktionen in einem bestimmten Verzeichnis
- verfügbar sind.</p>
-
- <p><var>Option</var> kann auf <code>None</code> gesetzt werden, wobei
- keine der besonderen Eigenschaften verfügbar sind, oder auf eines
- oder mehrere der folgenden:</p>
-
- <dl>
- <dt><code>All</code></dt>
-
- <dd>Alle Optionen außer <code>MultiViews</code>. Dies ist
- die Voreinstellung.</dd>
-
- <dt><code>ExecCGI</code></dt>
-
- <dd>Die Ausführung von CGI-Skripten, welche <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>
- verwenden, ist erlaubt.</dd>
-
- <dt><code>FollowSymLinks</code></dt>
-
- <dd>Der Server folgt symbolischen Links in diesem Verzeichnis.
- <div class="note">
- <p>Auch wenn der Server symbolischen Links folgt, bedeutet dies
- <em>nicht</em>, dass der zum Abgleich gegen <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>-Abschnitte verwendete Pfadname
- wechselt.</p>
- <p>Beachten Sie auch, dass diese Option innerhalb eines
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-Abschnitts
- <strong>ignoriert wird</strong>.</p>
- </div></dd>
-
- <dt><code>Includes</code></dt>
-
- <dd>
- Server Side Includes, die von <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> bereitgestellt
- werden, sind erlaubt.</dd>
-
- <dt><code>IncludesNOEXEC</code></dt>
-
- <dd>Server Side Includes sind erlaubt, <code>#exec cmd</code>
- und <code>#exec cgi</code> sind jedoch deaktiviert. Es ist aber noch
- möglich, CGI-Skripte aus
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>-Verzeichnissen mittels
- <code>#include virtual</code> einzubinden.</dd>
-
- <dt><code>Indexes</code></dt>
-
- <dd>Wenn eine URL, die auf ein Verzeichnis zeigt, in dem sich keine durch
- <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> definierte
- Indexdatei (<em>z.B.</em> <code>index.html</code>) befindet, dann liefert
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> eine formatierte Auflistung des
- Verzeichnisses zurück.</dd>
-
- <dt><code>MultiViews</code></dt>
-
- <dd>"MultiViews" sind bei der Verwendung von
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> erlaubt (siehe <a href="../content-negotiation.html">Content-Negotiation</a>).</dd>
-
- <dt><code>SymLinksIfOwnerMatch</code></dt>
-
- <dd>Der Server folgt nur symbolischen Links, bei denen die Zieldatei
- bzw. das Zielverzeichnis der gleichen Benutzerkennung gehört, wie
- der Link.
- <div class="note"><h3>Anmerkung</h3> Diese Option wird innerhalb eines
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-Abschnitts
- ignoriert.</div></dd>
- </dl>
-
- <p>Wenn mehrere <code class="directive">Options</code> auf ein Verzeichnis
- angewandt werden können, dann wird normalerweise die
- spezifischste <span class="transnote">(<em>Anm.d.Ü.:</em> Gemeint ist die zuletzt
- ausgeführte Option.)</span> verwendet und alle anderen werden
- ignoriert; die Optionen werden nicht vermischt. (Siehe auch <a href="../sections.html#mergin">Wie Abschnitte zusammengeführt
- werden.</a>.) Wenn jedoch <em>allen</em> Optionen der
- <code class="directive">Options</code>-Anweisung eines der Zeichen
- <code>+</code> oder <code>-</code> vorangestellt wird, werden die Optionen
- zusammengemischt. Jede Option mit vorangestelltem <code>+</code> wird
- zu den momentan gültigen Optionen hinzugefügt und jede Option
- mit vorangestelltem <code>-</code> wird aus den derzeit gültigen
- Optionen entfernt.</p>
-
- <p>So wird zum Beispiel ohne die Zeichen <code>+</code> und
- <code>-</code></p>
-
- <div class="example"><p><code>
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <span class="indent">
- Options Includes<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>für das Verzeichnis <code>/web/docs/spec</code> wird jetzt
- lediglich <code>Includes</code> gesetzt. Wenn die zweite
- <code class="directive">Options</code>-Anweisung jedoch <code>+</code>-
- und <code>-</code>-Zeichen verwenden würde,</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <span class="indent">
- Options +Includes -Indexes<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>dann würden die Optionen <code>FollowSymLinks</code> und
- <code>Includes</code> für das Verzeichnis <code>/web/docs/spec</code>
- gesetzt.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Die Verwendung von <code>-IncludesNOEXEC</code> oder
- <code>-Includes</code> deaktiviert Server Side Includes unabhängig
- von der vorigen Einstellung vollständig.</p>
- </div>
-
- <p>Die Voreinstellung ist <code>All</code>, sofern keine anderen Angaben
- gemacht wurden.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Require" id="Require">Require</a>-<a name="require" id="require">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Wählt die authentisierten Benutzer aus, die auf eine
-Ressource zugreifen können</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Require <var>Name</var> [<var>Name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive wählt aus, welche authentisierten Benutzer auf ein
- Verzeichnis zugreifen dürfen. Folgende Syntax ist erlaubt:</p>
-
- <dl>
- <dt><code>Require user <var>User-ID</var> [<var>User-ID</var>]
- ...</code></dt>
- <dd>Nur die genannten Benutzer dürfen auf die Ressource
- zugreifen.</dd>
-
- <dt><code>Require group <var>Gruppenname</var> [<var>Gruppenname</var>]
- ...</code></dt>
- <dd>Nur Benutzer der genannten Gruppen dürfen auf die
- Ressource zugreifen.</dd>
-
- <dt><code>Require valid-user</code></dt>
- <dd>Alle gültigen Benutzer dürfen auf die Ressource
- zugreifen.</dd>
- </dl>
-
- <p><code class="directive">Require</code> muss von den Direktiven
- <code class="directive"><a href="#authname">AuthName</a></code> und <code class="directive"><a href="#authtype">AuthType</a></code> sowie Direktiven wie
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- und <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- (zur Definition von Benutzern und Gruppen) begleitet werden, um
- korrekt zu funktionieren. Beispiel:</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "geschütztes Verzeichnis"<br />
- AuthUserFile /web/users<br />
- AuthGroupFile /web/groups<br />
- Require group admin
- </code></p></div>
-
- <p>Zugriffskontrollen, die in dieser Form angewandt werden, gelten
- für <strong>alle</strong> Methoden. <strong>Dies ist normalerweise
- gewünscht.</strong> Wenn Sie Zugriffskontrollen nur auf bestimmte
- Methoden anwenden möchten, während andere Methoden
- ungeschützt bleiben, dann müssen Sie die
- <code class="directive">Require</code>-Anweisung innerhalb eines
- <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>-Abschnitts
- platzieren.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#satisfy">Satisfy</a></code></li>
-<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitCPU" id="RLimitCPU">RLimitCPU</a>-<a name="rlimitcpu" id="rlimitcpu">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt den CPU-Verbrauch von Prozessen, die von
-Apache-Kindprozessen gestartet wurden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RLimitCPU <var>Sekunden</var>|max [<var>Sekunden</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>unbestimmt; verwendet die Voreinstellung des Systems</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Akzeptiert einen oder zwei Parameter. Der erste Paramater setzt eine
- weiche Ressourcenbegrenzung für alle Prozesse, der zweite Parameter
- setzt die Maximalgrenze für die Ressourcennutzung. Jeder der
- Parameter kann eine Zahl oder <code>max</code> sein. <code>max</code>
- zeigt dem Server an, dass das vom Betriebssystem erlaubte Maximum
- verwendet werden soll. Das Anheben der maximal erlaubten Ressourcennutzung
- erfordert, dass der Server als <code>root</code> läuft, zumindest in
- der anfänglichen Startphase.</p>
-
- <p>Dies wird auf Prozesse angewendet, die von Anfragen bearbeitenden
- Apache-Kindprozessen abgespalten werden, nicht auf die
- Apache-Kindprozesse selbst. Das beinhaltet CGI-Skripte und
- SSI-exec-Befehle, nicht jedoch Prozesse, die vom Apache-Elternprozess
- abgespalten werden, wie z.B. Protokollierung.</p>
-
- <p>CPU-Ressourcenbegrenzung wird in Sekunden pro Prozess
- ausgedrückt.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitmem">RLimitMEM</a></code></li>
-<li><code class="directive"><a href="#rlimitnproc">RLimitNPROC</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitMEM" id="RLimitMEM">RLimitMEM</a>-<a name="rlimitmem" id="rlimitmem">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt den Speicherverbrauch von Prozessen, die von
-Apache-Kindprozessen gestartet wurden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RLimitMEM <var>Bytes</var>|max [<var>Bytes</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>unbestimmt; verwendet die Voreinstellung des Systems</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Akzeptiert einen oder zwei Parameter. Der erste Paramater setzt eine
- weiche Ressourcenbegrenzung für alle Prozesse, der zweite Parameter
- setzt die Maximalgrenze für die Ressourcennutzung. Jeder der
- Parameter kann eine Zahl oder <code>max</code> sein. <code>max</code>
- zeigt dem Server an, dass das vom Betriebssystem erlaubte Maximum
- verwendet werden soll. Das Anheben der maximal erlaubten Ressourcennutzung
- erfordert, dass der Server als <code>root</code> läuft, zumindest in
- der anfänglichen Startphase.</p>
-
- <p>Dies wird auf Prozesse angewendet, die von Anfragen bearbeitenden
- Apache-Kindprozessen abgespalten werden, nicht auf die
- Apache-Kindprozesse selbst. Das beinhaltet CGI-Skripte und
- SSI-exec-Befehle, nicht jedoch Prozesse, die vom Apache-Elternprozess
- abgespalten werden, wie z.B. Protokollierung.</p>
-
- <p>Die Begrenzung des Speicherverbrauchs wird in Bytes pro Prozess
- ausgedrückt.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitcpu">RLimitCPU</a></code></li>
-<li><code class="directive"><a href="#rlimitnproc">RLimitNPROC</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitNPROC" id="RLimitNPROC">RLimitNPROC</a>-<a name="rlimitnproc" id="rlimitnproc">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Begrenzt die Anzahl der Prozesse, die von Prozessen gestartet
-werden können, der ihrerseits von Apache-Kinprozessen gestartet
-wurden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RLimitNPROC <var>Zahl</var>|max [<var>Zahl</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>unbestimmt; verwendet die Voreinstellung des Systems</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Akzeptiert einen oder zwei Parameter. Der erste Paramater setzt eine
- weiche Ressourcenbegrenzung für alle Prozesse, der zweite Parameter
- setzt die Maximalgrenze für die Ressourcennutzung. Jeder der
- Parameter kann eine Zahl oder <code>max</code> sein. <code>max</code>
- zeigt dem Server an, dass das vom Betriebssystem erlaubte Maximum
- verwendet werden soll. Das Anheben der maximal erlaubten Ressourcennutzung
- erfordert, dass der Server als <code>root</code> läuft, zumindest in
- der anfänglichen Startphase.</p>
-
- <p>Dies wird auf Prozesse angewendet, die von Anfragen bearbeitenden
- Apache-Kindprozessen abgespalten werden, nicht auf die
- Apache-Kindprozesse selbst. Dies beinhaltet CGI-Skripte und
- SSI-exec-Befehle, nicht jedoch Prozesse, die vom Apache-Elternprozess
- abgespalten werden, wie z.B. Protokollierung.</p>
-
- <p>Prozessbegrenzungen steuern die Anzahl der Prozesse pro Benutzer.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Wenn CGI-Prozesse nicht unter anderen Benutzerkennungen als der
- User-ID des Webservers laufen, dann beschränkt diese Direktive
- die Anzahl der Prozesse, die der Server selbst erstellen kann.
- Kennzeichen einer solchen Situation sind
- <strong><code>cannot fork</code></strong>-Meldungen
- <span class="transnote">(<em>Anm.d.Ü.:</em> <code>kann nicht abspalten</code>)</span> in der
- Datei <code>error_log</code>.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitmem">RLimitMEM</a></code></li>
-<li><code class="directive"><a href="#rlimitcpu">RLimitCPU</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Satisfy" id="Satisfy">Satisfy</a>-<a name="satisfy" id="satisfy">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Zusammenspiel von rechnerbasierter Zugriffskontrolle und
-Benutzerauthentisierung</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Satisfy Any|All</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Satisfy All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Verfahrensweise für den Zugriff, falls sowohl <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> als auch <code class="directive"><a href="#require">Require</a></code> verwendet werden. Der Parameter kann
- entweder <code>All</code> oder <code>Any</code> sein. Die Direktive ist
- nur dann nützlich, wenn der Zugriff zu einem bestimmten Bereich
- durch Benutzername/Passwort <em>und</em> Clientrechner-Adressen
- eingeschränkt ist. In diesem Fall verlangt die Voreinstellung
- (<code>All</code>), dass der Client die Adressbeschränkung passiert
- <em>und</em> eine gültige Benutzerkennung und ein gültiges
- Passwort übermittelt. Mit der Auswahl <code>Any</code> wird dem
- Client der Zugriff erlaubt, wenn er entweder die Rechner-Beschänkung
- passiert oder einen gültigen Benutzernamen und ein gültiges
- Passwort übermittelt. Dies kann verwendet werden, um einen Bereich
- mit einem Passwort zu schützen, jedoch Clients von bestimmten
- Adressen ohne Abfrage des Passwortes zuzulassen.</p>
-
- <p>Wenn Sie beispielsweise möchten, dass Personen aus Ihrem
- privaten Netzwerk unbechänkten Zugriff zu Teilen Ihres
- Webangebots haben, jedoch verlangen, dass Personen außerhalb
- Ihres privaten Netzwerks ein Passwort übergeben müssen,
- können Sie eine Konfiguration ähnlich der folgenden
- verwenden:</p>
-
- <div class="example"><p><code>
- Require valid-user<br />
- Allow from 192.168.1<br />
- Satisfy Any
- </code></p></div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li>
-<li><code class="directive"><a href="#require">Require</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptInterpreterSource" id="ScriptInterpreterSource">ScriptInterpreterSource</a>-<a name="scriptinterpretersource" id="scriptinterpretersource">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Methode zur Ermittlung des Interpreters von
-CGI-Skripten</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptInterpreterSource Registry|Registry-Strict|Script</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ScriptInterpreterSource Script</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>ausschließlich Win32;
-Die Option <code>Registry-Strict</code> ist verfügbar seit Apache
-2.0.</td></tr>
-</table>
- <p>Die Direktive steuert, wie der Apache den Interpreter zur Ausführung
- von CGI-Skripten bestimmt. Die Voreinstellung ist <code>Script</code>. Dies
- veranlaßt den Apache, den Interpreter zu verwenden, auf den die
- Shebang-Zeile (erste Zeile, beginnt mit <code>#!</code>) im Skript zeigt.
- Auf Win32-Systemen sieht diese Zeile üblicherweise so aus:</p>
-
- <div class="example"><p><code>
- #!C:/Perl/bin/perl.exe
- </code></p></div>
-
- <p>oder, wenn perl im Pfad (Umgebungsvariable <code>PATH</code>) liegt,
- einfach:</p>
-
- <div class="example"><p><code>
- #!perl
- </code></p></div>
-
- <p>Die Einstellung <code>ScriptInterpreterSource Registry</code>
- veranlaßt eine Suche in <code>HKEY_CLASSES_ROOT</code> der
- Windows-Registrierungsdatenbank und verwendet die Endung der Skript-Datei
- (z.B. <code>.pl</code>) als Suchargument. Der durch den Unterschlüssel
- <code>Shell\ExecCGI\Command</code> oder, falls dieser nicht existiert,
- <code>Shell\Open\Command</code> definierte Befehl wird zum Öffnen der
- Skript-Datei verwendet. Wenn der Schlüssel zur Dateiendung oder
- beide Unterschlüssel fehlen, dann verwendet der Apache die Option
- <code>Script</code>.</p>
-
- <div class="warning"><h3>Sicherheit</h3>
- <p>Seien Sie vorsichtig, <code>ScriptInterpreterSource Registry</code> bei
- Verzeichnissen zu verwenden, auf die eine <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>-Anweisung zeigt, denn der
- Apache versucht <strong>jede</strong> Datei innerhalb des Verzeichnisses
- auszuführen. Die Einstellung <code>Registry</code> kann
- unerwünschte Programmaufrufe bei Dateien verursachen, die
- üblicherweise nicht ausgeführt werden. Auf den meisten
- Windows-Systemen beispielsweise startet der voreingestellte
- Öffnen-Befehl für <code>.htm</code>-Dateien den Microsoft
- Internet Explorer, so dass jede HTTP-Anfrage nach einer existierenden
- <code>.htm</code>-Datei im Skript-Verzeichnis den Browser im Hintergrund
- starten würde. Dies ist eine wirksame Methode, Ihr System binnen
- etwa einer Minute zum Absturz zu bringen.</p>
- </div>
-
- <p>Die seit Apache 2.0 neue Option <code>Registry-Strict</code>
- macht das gleiche wie <code>Registry</code>, verwendet jedoch nur den
- Unterschlüssel <code>Shell\ExecCGI\Command</code>. Der Schlüssel
- <code>ExecCGI</code> ist gewöhnlich nicht voreingestellt. Er muss
- manuell eingerichtet werden und schützt Ihr System so for
- versehentlichen Programmaufrufen.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerAdmin" id="ServerAdmin">ServerAdmin</a>-<a name="serveradmin" id="serveradmin">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>E-Mail-Adresse, die der Server in Fehlermeldungen einfügt,
-welche an den Client gesendet werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerAdmin <var>E-Mail-Adresse</var>|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ServerAdmin</code> legt die Kontaktadresse fest,
- die der Server in jede Fehlermeldung einfügt, die er an den
- Client zurückschickt. Wenn <code>httpd</code> das übergebene
- Argument nicht als URL erkennt, nimmt er an, dess es sich um eine
- <var>E-Mail-Adresse</var> handelt und stellt in Hyperlinks
- <code>mailto:</code> voran. Es ist jedoch sogar sinnvoll, eine
- E-Mail-Adresse zu verwenden, da viele CGI-Skripte davon ausgehen. Wenn Sie
- eine URL verwenden möchten, sollten Sie auf einem anderen unter Ihrer
- Kontrolle stehenden Server verweisen. Andernfalls können Besucher Sie
- im Fehlerfall möglicherweise nicht kontaktieren.</p>
-
- <p>Es kann sich lohnen, hierfür eine reservierte Adresse
- anzugeben, z.B.</p>
-
- <div class="example"><p><code>
- ServerAdmin www-admin@foo.example.com
- </code></p></div>
-
- <p>da Anwender nicht unbedingt erwähnen, dass sie vom Server
- sprechen!</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerAlias" id="ServerAlias">ServerAlias</a>-<a name="serveralias" id="serveralias">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Alternativer Name für einen Host, der verwendet wird, wenn
-Anfragen einem namensbasierten virtuellen Host zugeordnet werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerAlias <var>Hostname</var> [<var>Hostname</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ServerAlias</code> bestimmt die
- alternativen Namen eines Hosts zur Verwendung mit <a href="../vhosts/name-based.html">namensbasierten virtuellen Hosts</a>.</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost *&gt;<br />
- ServerName server.domain.com<br />
- ServerAlias server server2.domain.com server2<br />
- # ...<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerName" id="ServerName">ServerName</a>-<a name="servername" id="servername">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Rechnername und Port, die der Server dazu verwendet, sich
-selbst zu identifizieren</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerName
-<var>voll-qualifizierter-Domainname</var>[:<var>port</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Diese Direktive löst in Version 2.0 die
- Funktionalität der Direktive <code class="directive">Port</code> aus
- Version 1.3 ab.</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ServerName</code> bestimmt den
- Rechnernamen und Port, den der Server dazu verwendet, sich selbst
- zu identifizieren. Diese werden bei der Erstellung von Umleitungs-URLs
- benötigt. Wenn beispielsweise der Name der Maschine, die den Webserver
- beherbergt, <code>simple.example.com</code> lautet, die Maschine jedoch
- auch einen DNS-Alias <code>www.example.com</code> besitzt und Sie den
- Webserver so identifizieren möchten, sollten Sie die folgende
- Anweisung verwenden:</p>
-
- <div class="example"><p><code>
- ServerName www.example.com:80
- </code></p></div>
-
- <p>Wenn kein <code class="directive">ServerName</code> angegeben wurde,
- dann versucht der Server den Rechnernamen mittels eines Reverse-Lookup
- herzuleiten. Wenn kein Port in der
- <code class="directive">ServerName</code>-Anweisung angegeben wurde, dann
- verwendet der Server den Port der eingegangenen Anfrage. Für eine
- optimale Zuverlässigkeit und Berechenbarkeit sollten Sie einen
- eindeutigen Rechnernamen und Port angeben, in dem Sie die Direktive
- <code class="directive">ServerName</code> verwenden.</p>
-
- <p>Wenn Sie <a href="../vhosts/name-based.html">namensbasierte
- virtuelle Hosts</a> verwenden, gibt <code class="directive">ServerName</code>
- innerhalb eines <code class="directive"><a href="#virtualhost">&lt;VirtualHost&gt;</a></code>-Abschnitts an, welcher
- Hostname im <code>Host:</code>-Header der Anfrage auftauchen muss,
- damit sie diesem virtuellen Host zugeordnet wird.</p>
-
- <p>Lesen Sie bitte die Beschreibung der Direktive <code class="directive"><a href="#usecanonicalname">UseCanonicalName</a></code> für Einstellungen, die
- bestimmen, ob selbstreferenzierende URLs (z.B. vom Modul
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>) auf den angegebenen Port zeigen oder auf die
- Portnummern die in der Anfrage des Clients angegeben ist.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../dns-caveats.html">Probleme bezüglich DNS und
-Apache</a></li>
-<li><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></li>
-<li><code class="directive"><a href="#usecanonicalname">UseCanonicalName</a></code></li>
-<li><code class="directive"><a href="#namevirtualhost">NameVirtualHost</a></code></li>
-<li><code class="directive"><a href="#serveralias">ServerAlias</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerPath" id="ServerPath">ServerPath</a>-<a name="serverpath" id="serverpath">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Veralteter URL-Pfad für einen namensbasierten
-virtuellen Host, auf den von einem inkompatiblen Browser zugegriffen
-wird</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerPath <var>URL-Pfad</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Virtual Host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ServerPath</code> legt den
- veralteten <span class="transnote">(<em>Anm.d.Ü.:</em> Gemeint ist eigentlich "Altlast" aufgrund
- antiquierter Clients.)</span> URL-Pfad eines Hosts zur Verwendung mit
- <a href="../vhosts/">namensbasierten virtuellen Hosts</a> fest.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerRoot" id="ServerRoot">ServerRoot</a>-<a name="serverroot" id="serverroot">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Basisverzeichnis der Serverinstallation</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerRoot <var>Verzeichnis</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ServerRoot /usr/local/apache</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ServerRoot</code> bestimmt das
- Verzeichnis, in dem der Server installiert ist. Üblicherweise
- enthält es die Unterverzeichnisse <code>conf/</code> und
- <code>logs/</code>. Relative Pfadangaben für andere
- Konfigurationsdateien werden relativ zu diesem Verzeichnis betrachtet.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- ServerRoot /home/httpd
- </code></p></div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../invoking.html">Die <code>httpd</code>-Option
- <code>-d</code></a></li>
-<li><a href="../misc/security_tips.html#serverroot">Sicherheitshinweise</a>
- für Informationen, wie die Rechte auf das <code class="directive">ServerRoot</code>-Verzeichnis richtig gesetzt werden</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerSignature" id="ServerSignature">ServerSignature</a>-<a name="serversignature" id="serversignature">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Konfiguriert die Fußzeile von servergenerierten
-Dokumenten</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerSignature On|Off|EMail</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ServerSignature Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ServerSignature</code> ermöglicht
- die Gestaltung einer unter servergenerierten Dokumenten (z.B.
- Fehlerdokumente, FTP-Verzeichnislisten von <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>,
- <code class="module"><a href="../mod/mod_info.html">mod_info</a></code>-Ausgaben, ...) angefügten
- Fußzeile. Ein möglicher Grund für die Aktivierung einer
- solchen Fußzeile ist, dass der Anwender bei einer Kette von
- Proxy-Servern oft keine Möglichkeit hat, zu erkennen, welcher der
- verketteten Server gegenwärtig die zurückgegebene Fehlermeldung
- produziert hat.</p>
-
- <p>Die (Vor-)Einstellung <code>Off</code> unterdrückt die
- Fußzeile (und ist damit kompatibel zum Verhalten des Apache 1.2 und
- früher). Die Einstellung <code>On</code> fügt schlicht eine
- Zeile mit der Versionsnummer des Servers und dem Servernamen (<code class="directive"><a href="#servername">ServerName</a></code>) des bedienenden virtuellen Hosts an.
- Die Einstellung <code>EMail</code> erstellt zusätzlich einen
- "mailto:"-Verweis zum Serveradministrator (<code class="directive"><a href="#serveradmin">ServerAdmin</a></code>) des referenzierten Dokuments.</p>
-
- <p>Ab Version 2.0.44 werden die Details der angegebenen Versionsnummer des
- Servers von der Direktive <code class="directive"><a href="#servertokens">ServerTokens</a></code> kontrolliert.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#servertokens">ServerTokens</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerTokens" id="ServerTokens">ServerTokens</a>-<a name="servertokens" id="servertokens">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Konfiguriert den HTTP-Response-Header
-Server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ServerTokens Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>die Direktive steuert, ob der Response-Header <code>Server</code>,
- der an den Client zurückgesendet wird, eine Beschreibung des
- allgemeinen Betriesbsystemtyps des Servers wie auch Informationen
- über einkompilierte Module enthält.</p>
-
- <dl>
- <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache</code></dd>
-
- <dt><code>ServerTokens Major</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache/2</code></dd>
-
- <dt><code>ServerTokens Minor</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache/2.0</code></dd>
-
- <dt><code>ServerTokens Min[imal]</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache/2.0.41</code></dd>
-
- <dt><code>ServerTokens OS</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server: Apache/2.0.41
- (Unix)</code></dd>
-
- <dt><code>ServerTokens Full</code> (oder nicht angegeben)</dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server: Apache/2.0.41
- (Unix) PHP/4.2.2 MyMod/1.2</code></dd>
- </dl>
-
- <p>Diese Einstellung gilt für den gesamten Server und kann nicht
- auf Virtual-Host-Basis aktiviert oder deaktiviert werden.</p>
-
- <p>Ab Version 2.0.44 steuert diese Direktive auch die Informationen, die
- durch die Direktive <code class="directive"><a href="#serversignature">ServerSignature</a></code>
- angeboten werden.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#serversignature">ServerSignature</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetHandler" id="SetHandler">SetHandler</a>-<a name="sethandler" id="sethandler">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Erzwingt die Verarbeitung aller passenden Dateien durch
-einen Handler</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetHandler <var>Handlername</var>|None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Seit Apache 2.0 im Core</td></tr>
-</table>
- <p>Wenn die Direktive innerhalb einer <code>.htaccess</code>-Datei
- oder in einem <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>- oder
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code>-Abschnitt
- angegeben wird, erzwingt sie, dass alle entsprechenden Dateien von dem
- durch <var>Handlername</var> angegebenen <a href="../handler.html">Handler</a> analysiert werden. Wenn Sie
- beispielsweise ein Verzeichnis haben, dessen Dateien unabhängig von
- der Endung gänzlich als Image-Maps interpretiert werden sollen,
- können Sie folgendes in eine <code>.htaccess</code>-Datei in
- dem Verzeichnis schreiben:</p>
-
- <div class="example"><p><code>
- SetHandler imap-file
- </code></p></div>
-
- <p>Noch ein Beispiel: wenn Sie den Server immer, wenn die URL
- <code>http://servername/status</code> aufgerufen wird, einen
- Statusbericht anzeigen lassen möchten, dann können
- Sie folgendes in die <code>httpd.conf</code> schreiben:</p>
-
- <div class="example"><p><code>
- &lt;Location /status&gt;<br />
- <span class="indent">
- SetHandler server-status<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
- <p>Sie können eine zuvor definierte
- <code class="directive">SetHandler</code>-Anweisung aufheben, indem Sie den Wert
- <code>None</code> verwenden.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetInputFilter" id="SetInputFilter">SetInputFilter</a>-<a name="setinputfilter" id="setinputfilter">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Bestimmt die Filter, die Client-Anfragen und POST-Eingaben
-verarbeiten</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetInputFilter <var>Filter</var>[;<var>Filter</var>...]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">SetInputFilter</code> bestimmt den oder
- die Filter, die Client-Anfragen und POST-Eingaben verarbeiten, wenn
- sie vom Server empfangen werden. Diese gelten zusätzlich zu
- anderweitig definierten Filtern, einschließlich denen der Direktive
- <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>.</p>
-
- <p>Wenn mehr als ein Filter angegeben wird, dann müssen diese
- durch Semikolon voneinander getrennt in der Reihenfolge angegeben werden,
- in der sie die Daten verarbeiten sollen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../filter.html">Filter</a>-Dokumentation</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetOutputFilter" id="SetOutputFilter">SetOutputFilter</a>-<a name="setoutputfilter" id="setoutputfilter">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Bestimmt die Filter, die Antworten des Servers verarbeiten</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetOutputFilter <var>Filter</var>[;<var>Filter</var>...]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">SetOutputFilter</code> bestimmt
- die Filter, die Antworten des Servers verarbeiten, bevor sie an den
- Client gesendet werden. Diese gelten zusätzlich zu anderweitig
- definierten Filtern, einschließlich denen der Direktive
- <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>.</p>
-
- <p>Die folgende Konfiguration verarbeitet zum Beispiel alle Dateien
- im Verzeichnis <code>/www/data</code> als Server Side Includes.</p>
-
- <div class="example"><p><code>
- &lt;Directory /www/data/&gt;<br />
- <span class="indent">
- SetOutputFilter INCLUDES<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Wenn mehr als ein Filter angegeben wird, dann müssen diese
- durch Semikolon voneinander getrennt in der Reihenfolge angegeben werden,
- in der sie die Daten verarbeiten sollen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../filter.html">Filter</a>-Dokumentation</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TimeOut" id="TimeOut">TimeOut</a>-<a name="timeout" id="timeout">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Zeitspanne, die der Server auf verschiedene Ereignisse wartet,
-bevor er die Anfrage abbricht</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TimeOut <var>Sekunden</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>TimeOut 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>Die Direktive <code class="directive">TimeOut</code> definiert derzeit die
- Zeitspanne, die der Apache auf drei Dinge wartet:</p>
-
- <ol>
- <li>Die gesamte Zeispanne, die benötigt wird, um eine GET-Anfrage
- zu empfangen.</li>
-
- <li>Die Zeitspanne zwischen dem Empfang von TCP-Paketen einer
- POST- oder PUT-Anfrage.</li>
-
- <li>Die Zeitspanne zwischen ACKs bei der Übermittlung der
- TCP-Pakete der Antwort.</li>
- </ol>
-
- <p>Wir haben vor, diese Zeitspannen in Zukunft separat konfigurierbar zu
- machen. Vor Version 1.2 war der Zeitgeber auf 1200 voreingestellt, wurde
- dann aber auf 300 herabgesetzt, was immer noch weit mehr ist, als in den
- meisten Situationen benötigt wird. Die Voreinstellung wurde nicht
- weiter herabgesetzt, da gelegentlich noch Stellen im Code existieren
- können, wo der Zeitgeber nicht zurückgesetzt wird, wenn ein
- Paket verschickt wird.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UseCanonicalName" id="UseCanonicalName">UseCanonicalName</a>-<a name="usecanonicalname" id="usecanonicalname">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Bestimmt, wie der Server seinen eigenen Namen und Port
-ermittelt</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UseCanonicalName On|Off|DNS</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>UseCanonicalName On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p>In vielen Situationen muss der Apache eine
- <em>selbstreferenzierende</em> URL -- d.h. eine URL, die auf den selben
- Server zurück verweist -- zusammenbauen. Bei <code>UseCanonicalName
- On</code> verwendet der Apache den Hostnamen und Port, der in der
- <code class="directive"><a href="#servername">ServerName</a></code>-Anweisung angegeben ist,
- um den kanonischen Namen des Servers zu erstellen. Dieser Name wird in
- allen selbstreferenzierenden URLs sowie in CGI-Skripten für die
- Werte von <code>SERVER_NAME</code> und <code>SERVER_PORT</code>
- verwendet.</p>
-
- <p>Bei <code>UseCanonicalName Off</code> bildet der Apache
- selbstreferenzierende URLs, indem er den vom Client übermittelten
- Hostnamen und Port verwendet, sofern diese vorhanden sind (andernfalls
- wird der kanonische Name, wie oben beschrieben, benutzt). Die Werte
- sind die gleichen, die zur Anwendung von <a href="../vhosts/name-based.html">namensbasierten virtuellen Hosts</a>
- verwendet werden, und sie sind mit den gleichen Clients verfügbar
- <span class="transnote">(<em>Anm.d.Ü.:</em> , die auch in der Lage sind, auf namensbasierte virtuelle Hosts
- zuzugreifen, d.h. einen <code>Host</code>-Header mitschicken)</span>.
- Die CGI-Variablen <code>SERVER_NAME</code> und <code>SERVER_PORT</code>
- werden ebenfalls aus den vom Client angeboten Werten erstellt.</p>
-
- <p>Ein Intranet-Server, auf den Anwender mit kurzen Namen wie
- <code>www</code> zugreifen, ist ein Beispiel, wo dies sinnvoll sein kann.
- Sie werden bemerken, dass der Apache den Benutzer auf
- <code>http://www.domain.com/splat/</code> umleitet, wenn dieser einen
- Kurznamen und eine URL, die einem Verzeichnis entspricht, ohne
- abschließenden Schrägstrich eingibt, wie z.B.
- <code>http://www/splat</code>. Wenn Sie Authentisierung aktiviert haben,
- bewirkt dies, dass der Benutzer sich zweimal identifizieren muss
- (einmal für <code>www</code> und noch einmal für
- <code>www.domain.com</code> -- lesen Sie für weitere Informationen <a href="http://httpd.apache.org/docs/misc/FAQ.html#prompted-twice">die
- FAQ zu diesem Thema</a>). Wenn <code class="directive">UseCanonicalName</code>
- jedoch auf <code>Off</code> gesetzt ist, denn wird der Apache zu
- <code>http://www/splat/</code> umleiten.</p>
-
- <p>Es existiert noch eine dritte Option, <code>UseCanonicalName DNS</code>,
- die für den Betrieb von IP-basierten Massen-Virtual-Hosts gedacht ist,
- um antiquierte Clients zu unterstützen, die keinen
- <code>Host:</code>-Header bereit stellen. Um selbstreferenzierende
- URLs zu ermitteln, führt der Apache bei dieser Option ein
- Reverse-DNS-Lookup auf die IP-Adresse des Servers aus, zu der der Client
- Verbindung aufgenommen hat.</p>
-
- <div class="warning"><h3>Warnung</h3>
- <p>Wenn CGI-Skripte Vermutungen aufgrund des Wertes von
- <code>SERVER_NAME</code> anstellen, können sie durch diese
- Option fehlschlagen. Clients steht es im Wesentlichen frei, einen Wert
- für den Hostnamen anzugeben, wie er will. Wenn das
- CGI-Skript <code>SERVER_NAME</code> jedoch lediglich dazu verwendet,
- selbstreferenzierende URLs zu erstellen, sollte das gerade noch
- in Ordnung sein.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#servername">ServerName</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualHost" id="VirtualHost">&lt;VirtualHost&gt;</a>-<a name="virtualhost" id="virtualhost">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Enthält Direktiven, die nur auf bestimmte Hostnamen oder
-IP-Adressen angewendet werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;VirtualHost
- <var>Adresse</var>[:<var>Port</var>] [<var>Adresse</var>[:<var>Port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;VirtualHost&gt;</code> und
- <code>&lt;/VirtualHost&gt;</code> werden dazu verwendet, eine Gruppe
- von Direktiven zusammenzufassen, die nur auf einen bestimmten virtuellen
- Host angewendet werden. Jede Direktive, die im Virtual-Host-Kontext
- zulässig ist, kann verwendet werden. Wenn der Server eine Anfrage
- für ein bestimmtes Dokument eines bestimmten virtuellen Hosts
- empfängt, dann benutzt er die im
- <code class="directive">&lt;VirtualHost&gt;</code>-Container enthaltenen
- Konfigurationsanweisungen. <var>Adresse</var> kann sein:</p>
-
- <ul>
- <li>Die IP-Adresse des virtuellen Hosts.</li>
-
- <li>Ein voll qualifizierter Domainname für die IP-Adresse des
- virtuellen Hosts.</li>
-
- <li>Das Zeichen <code>*</code>, welches nur in Kombination mit
- <code>NameVirtualHost *</code> verwendet wird, um allen IP-Adressen
- zu entsprechen.</li>
-
- <li>Die Zeichenkette <code>_default_</code>, die nur mit IP-basierten
- virtuellen Hosts verwendet wird, um nicht zugewiesene IP-Adressen
- aufzufangen.</li>
- </ul>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- &lt;VirtualHost 10.1.2.3&gt;<br />
- <span class="indent">
- ServerAdmin webmaster@host.foo.com<br />
- DocumentRoot /www/docs/host.foo.com<br />
- ServerName host.foo.com<br />
- ErrorLog logs/host.foo.com-error_log<br />
- TransferLog logs/host.foo.com-access_log<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>IPv6-Adressen müssen in eckigen Klammern angegeben werden, da die
- optionale Portnummer sonst nicht erkannt werden kann. Hier ein
- IPv6-Beispiel:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
- <span class="indent">
- ServerAdmin webmaster@host.example.com<br />
- DocumentRoot /www/docs/host.example.com<br />
- ServerName host.example.com<br />
- ErrorLog logs/host.example.com-error_log<br />
- TransferLog logs/host.example.com-access_log<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Jeder virtuelle Host muss einer anderen IP-Adresse, einem anderen Port
- oder einem anderen Hostnamen für den Server entsprechen. Im ersten
- Fall muss die Servermaschine so eingerichtet sein, dass sie IP-Pakete
- für mehrere Adressen akzeptiert. (Wenn der Rechner nicht mehrere
- Netzwerkkarten besitzt, kann dies mit dem Befehl <code>ifconfig
- alias</code> durchgeführt werden -- sofern Ihr Betriebssystem das
- unterstützt).</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Die Verwendung von <code class="directive">&lt;VirtualHost&gt;</code>
- beeinflusst <strong>nicht</strong>, an welchen Adressen der Apache
- lauscht. Sie müssen mit <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> sicherstellen, dass der Apache
- an der richtigen Adresse lauscht.</p>
- </div>
-
- <p>Bei der Verwendung IP-basierter virtuellen Hosts kann der spezielle
- Name <code>_default_</code> benutzt werden. In diesem Fall weist
- der Apache jede IP-Adresse diesem virtuellen Host zu, die nicht explizit in
- einem anderen virtuellen Host angegeben ist. Falls kein virtueller Host
- <code>_default_</code> angegeben ist, wird die "Hauptserver"-Konfiguration,
- die aus allen Definitionen außerhalb der Virtual-Host-Abschnitte
- besteht, für nicht passende IPs verwendet. (Beachten Sie jedoch,
- dass eine IP-Adressen die zu einer <code class="directive"><a href="#namevirtualhost">NameVirtualHost</a></code>-Anweisung passt, weder den
- "Hauptserver" noch den virtuellen Host <code>_default_</code> verwendet.
- Lesen Sie für weitere Details die Dokumentation zu <a href="../vhosts/name-based.html">namensbasierten virtuell Hosts</a>.)</p>
-
- <p>Sie können einen speziellen <code>:Port</code> angeben,
- um den entsprechenden Port zu wechseln. Falls nicht angegeben, wird
- er auf den gleichen Port voreingestellt, wie die letzte
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>-Anweisung des
- Hauptservers. Sie können auch <code>:*</code> angeben, um alle
- Ports dieser Adresse zu akzeptieren. (Dies wird zusammen mit
- <code>_default_</code> empfohlen.)</p>
-
- <div class="warning"><h3>Sicherheit</h3>
- <p>Lesen Sie das Dokument <a href="../misc/security_tips.html">Sicherheitshinweise</a> für
- Details, warum Ihre Sicherheit gefährdet sein kann, wenn das
- Verzeichnis, in dem Protokolldateien gespeichert werden, für
- jemanden anderes als den Benutzer beschreibbar ist, der den Server
- gestartet hat.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></li>
-<li><a href="../dns-caveats.html">Probleme bezüglich DNS und
- Apache</a></li>
-<li><a href="../bind.html">Bestimmen, welche Adressen und Ports
- der Apache verwendet</a></li>
-<li><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> für eine
- Erläuterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/core.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/core.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/core.html.en b/docs/manual/mod/core.html.en
deleted file mode 100644
index 21955ac318..0000000000
--- a/docs/manual/mod/core.html.en
+++ /dev/null
@@ -1,3165 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>core - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Core Features</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/core.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Core Apache HTTP Server features that are always
-available</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Core</td></tr></table>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#acceptpathinfo">AcceptPathInfo</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#accessfilename">AccessFileName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#adddefaultcharset">AddDefaultCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#allowoverride">AllowOverride</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authname">AuthName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authtype">AuthType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgimapextension">CGIMapExtension</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#contentdigest">ContentDigest</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaulttype">DefaultType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directory">&lt;Directory&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enablemmap">EnableMMAP</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enablesendfile">EnableSendfile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errordocument">ErrorDocument</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errorlog">ErrorLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#fileetag">FileETag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#files">&lt;Files&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#forcetype">ForceType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#hostnamelookups">HostnameLookups</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ifmodule">&lt;IfModule&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#include">Include</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#keepalive">KeepAlive</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limit">&lt;Limit&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestbody">LimitRequestBody</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestfields">LimitRequestFields</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestline">LimitRequestLine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#location">&lt;Location&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#loglevel">LogLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#namevirtualhost">NameVirtualHost</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#require">Require</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitcpu">RLimitCPU</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitmem">RLimitMEM</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitnproc">RLimitNPROC</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#satisfy">Satisfy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serveradmin">ServerAdmin</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serveralias">ServerAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#servername">ServerName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverpath">ServerPath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">ServerRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serversignature">ServerSignature</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#servertokens">ServerTokens</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sethandler">SetHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setinputfilter">SetInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setoutputfilter">SetOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#timeout">TimeOut</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#usecanonicalname">UseCanonicalName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualhost">&lt;VirtualHost&gt;</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AcceptPathInfo" id="AcceptPathInfo">AcceptPathInfo</a> <a name="acceptpathinfo" id="acceptpathinfo">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Resources accept trailing pathname information</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AcceptPathInfo On|Off|Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AcceptPathInfo Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.30 and later</td></tr>
-</table>
-
- <p>This directive controls whether requests that contain trailing
- pathname information that follows an actual filename (or
- non-existent file in an existing directory) will be accepted or
- rejected. The trailing pathname information can be made
- available to scripts in the <code>PATH_INFO</code> environment
- variable.</p>
-
- <p>For example, assume the location <code>/test/</code> points to
- a directory that contains only the single file
- <code>here.html</code>. Then requests for
- <code>/test/here.html/more</code> and
- <code>/test/nothere.html/more</code> both collect
- <code>/more</code> as <code>PATH_INFO</code>.</p>
-
- <p>The three possible arguments for the
- <code class="directive">AcceptPathInfo</code> directive are:</p>
- <dl>
- <dt><code>Off</code></dt><dd>A request will only be accepted if it
- maps to a literal path that exists. Therefore a request with
- trailing pathname information after the true filename such as
- <code>/test/here.html/more</code> in the above example will return
- a 404 NOT FOUND error.</dd>
-
- <dt><code>On</code></dt><dd>A request will be accepted if a
- leading path component maps to a file that exists. The above
- example <code>/test/here.html/more</code> will be accepted if
- <code>/test/here.html</code> maps to a valid file.</dd>
-
- <dt><code>Default</code></dt><dd>The treatment of requests with
- trailing pathname information is determined by the <a href="../handler.html">handler</a> responsible for the request.
- The core handler for normal files defaults to rejecting
- <code>PATH_INFO</code> requests. Handlers that serve scripts, such as <a href="mod_cgi.html">cgi-script</a> and <a href="mod_isapi.html">isapi-isa</a>, generally accept
- <code>PATH_INFO</code> by default.</dd>
- </dl>
-
- <p>The primary purpose of the <code>AcceptPathInfo</code>
- directive is to allow you to override the handler's choice of
- accepting or rejecting <code>PATH_INFO</code>. This override is required,
- for example, when you use a <a href="../filter.html">filter</a>, such
- as <a href="mod_include.html">INCLUDES</a>, to generate content
- based on <code>PATH_INFO</code>. The core handler would usually reject
- the request, so you can use the following configuration to enable
- such a script:</p>
-
- <div class="example"><p><code>
- &lt;Files "mypaths.shtml"&gt;<br />
- <span class="indent">
- Options +Includes<br />
- SetOutputFilter INCLUDES<br />
- AcceptPathInfo On<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AccessFileName" id="AccessFileName">AccessFileName</a> <a name="accessfilename" id="accessfilename">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the distributed configuration file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AccessFileName <var>filename</var> [<var>filename</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AccessFileName .htaccess</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>While processing a request the server looks for
- the first existing configuration file from this list of names in
- every directory of the path to the document, if distributed
- configuration files are <a href="#allowoverride">enabled for that
- directory</a>. For example:</p>
-
- <div class="example"><p><code>
- AccessFileName .acl
- </code></p></div>
-
- <p>before returning the document
- <code>/usr/local/web/index.html</code>, the server will read
- <code>/.acl</code>, <code>/usr/.acl</code>,
- <code>/usr/local/.acl</code> and <code>/usr/local/web/.acl</code>
- for directives, unless they have been disabled with</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride None<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#allowoverride">AllowOverride</a></code></li>
-<li><a href="../configuring.html">Configuration Files</a></li>
-<li><a href="../howto/htaccess.html">.htaccess Files</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddDefaultCharset" id="AddDefaultCharset">AddDefaultCharset</a> <a name="adddefaultcharset" id="adddefaultcharset">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default character set to be added for a
-response without an explicit character set</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddDefaultCharset On|Off|<var>charset</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AddDefaultCharset Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive specifies the name of the character set that
- will be added to any response that does not have any parameter on
- the content type in the HTTP headers. This will override any
- character set specified in the body of the document via a
- <code>META</code> tag. A setting of <code>AddDefaultCharset
- Off</code> disables this
- functionality. <code>AddDefaultCharset On</code> enables
- Apache's internal default charset of <code>iso-8859-1</code> as
- required by the directive. You can also specify an alternate
- <var>charset</var> to be used. For example:</p>
-
- <div class="example"><p><code>
- AddDefaultCharset utf-8
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddOutputFilterByType" id="AddOutputFilterByType">AddOutputFilterByType</a> <a name="addoutputfilterbytype" id="addoutputfilterbytype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>assigns an output filter to a particular MIME-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddOutputFilterByType <var>filter</var>[;<var>filter</var>...]
-<var>MIME-type</var> [<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.33 and later</td></tr>
-</table>
- <p>This directive activates a particular output <a href="../filter.html">filter</a> for a request depending on the
- response MIME-type.</p>
-
- <p>The following example uses the <code>DEFLATE</code> filter, which
- is provided by <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>. It will compress all
- output (either static or dynamic) which is labeled as
- <code>text/html</code> or <code>text/plain</code> before it is sent
- to the client.</p>
-
- <div class="example"><p><code>
- AddOutputFilterByType DEFLATE text/html text/plain
- </code></p></div>
-
- <p>If you want the content to be processed by more than one filter, their
- names have to be separated by semicolons. It's also possible to use one
- <code class="directive">AddOutputFilterByType</code> directive for each of
- these filters.</p>
-
- <p>The configuration below causes all script output labeled as
- <code>text/html</code> to be processed at first by the
- <code>INCLUDES</code> filter and then by the <code>DEFLATE</code>
- filter.</p>
-
- <div class="example"><p><code>
- &lt;Location /cgi-bin/&gt;<br />
- <span class="indent">
- Options Includes<br />
- AddOutputFilterByType INCLUDES;DEFLATE text/html<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="warning"><h3>Note</h3>
- <p>Enabling filters with <code class="directive">AddOutputFilterByType</code>
- may fail partially or completely in some cases. For example, no
- filters are applied if the MIME-type could not be determined and falls
- back to the <code class="directive"><a href="#defaulttype">DefaultType</a></code> setting,
- even if the <code class="directive"><a href="#defaulttype">DefaultType</a></code> is the
- same.</p>
-
- <p>However, if you want to make sure, that the filters will be
- applied, assign the content type to a resource explicitly, for
- example with <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> or
- <code class="directive"><a href="#forcetype">ForceType</a></code>. Setting the
- content type within a (non-nph) CGI script is also safe.</p>
-
- <p>The by-type output filters are never applied on proxy requests.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li>
-<li><code class="directive"><a href="#setoutputfilter">SetOutputFilter</a></code></li>
-<li><a href="../filter.html">filters</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowEncodedSlashes" id="AllowEncodedSlashes">AllowEncodedSlashes</a> <a name="allowencodedslashes" id="allowencodedslashes">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines whether encoded path separators in URLs are allowed to
-be passed through</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AllowEncodedSlashes On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AllowEncodedSlashes Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.46 and later</td></tr>
-</table>
- <p>The <code class="directive">AllowEncodedSlashes</code> directive allows URLs
- which contain encoded path separators (<code>%2F</code> for <code>/</code>
- and additionally <code>%5C</code> for <code>\</code> on according systems)
- to be used. Normally such URLs are refused with a 404 (Not found) error.</p>
-
- <p>Turning <code class="directive">AllowEncodedSlashes</code> <code>On</code> is
- mostly useful when used in conjunction with <code>PATH_INFO</code>.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Allowing encoded slashes does <em>not</em> imply <em>decoding</em>.
- Occurrences of <code>%2F</code> or <code>%5C</code> (<em>only</em> on
- according systems) will be left as such in the otherwise decoded URL
- string.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#acceptpathinfo">AcceptPathInfo</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowOverride" id="AllowOverride">AllowOverride</a> <a name="allowoverride" id="allowoverride">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Types of directives that are allowed in
-.htaccess files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AllowOverride All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>When the server finds an <code>.htaccess</code> file (as
- specified by <code class="directive"><a href="#accessfilename">AccessFileName</a></code>)
- it needs to know which directives declared in that file can override
- earlier configuration directives.</p>
-
- <div class="note"><h3>Only available in &lt;Directory&gt; sections</h3>
- <code class="directive">AllowOverride</code> is valid only in
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- sections specified without regular expressions, not in <code class="directive"><a href="#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="#directorymatch">&lt;DirectoryMatch&gt;</a></code> or
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code> sections.
- </div>
-
- <p>When this directive is set to <code>None</code>, then
- <a href="#accessfilename">.htaccess</a> files are completely ignored.
- In this case, the server will not even attempt to read
- <code>.htaccess</code> files in the filesystem.</p>
-
- <p>When this directive is set to <code>All</code>, then any
- directive which has the .htaccess <a href="directive-dict.html#Context">Context</a> is allowed in
- <code>.htaccess</code> files.</p>
-
- <p>The <var>directive-type</var> can be one of the following
- groupings of directives.</p>
-
- <dl>
- <dt>AuthConfig</dt>
-
- <dd>
-
- Allow use of the authorization directives (<code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code>,
- <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>,
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>,
- <code class="directive"><a href="#authname">AuthName</a></code>,
- <code class="directive"><a href="#authtype">AuthType</a></code>, <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>, <code class="directive"><a href="#require">Require</a></code>, <em>etc.</em>).</dd>
-
- <dt>FileInfo</dt>
-
- <dd>
- Allow use of the directives controlling document types (<code class="directive"><a href="#defaulttype">DefaultType</a></code>, <code class="directive"><a href="#errordocument">ErrorDocument</a></code>, <code class="directive"><a href="#forcetype">ForceType</a></code>, <code class="directive"><a href="../mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>,
- <code class="directive"><a href="#sethandler">SetHandler</a></code>, <code class="directive"><a href="#setinputfilter">SetInputFilter</a></code>, <code class="directive"><a href="#setoutputfilter">SetOutputFilter</a></code>, and
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> Add* and Remove*
- directives, <em>etc.</em>).</dd>
-
- <dt>Indexes</dt>
-
- <dd>
- Allow use of the directives controlling directory indexing
- (<code class="directive"><a href="../mod/mod_autoindex.html#adddescription">AddDescription</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#addicon">AddIcon</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#addiconbytype">AddIconByType</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#defaulticon">DefaultIcon</a></code>, <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#fancyindexing">FancyIndexing</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#headername">HeaderName</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#indexignore">IndexIgnore</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#readmename">ReadmeName</a></code>,
- <em>etc.</em>).</dd>
-
- <dt>Limit</dt>
-
- <dd>
- Allow use of the directives controlling host access (<code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> and <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code>).</dd>
-
- <dt>Options[=<var>Option</var>,...]</dt>
-
- <dd>
- Allow use of the directives controlling specific directory
- features (<code class="directive"><a href="#options">Options</a></code> and
- <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>).
- An equal sign may be given followed by a comma (but no spaces)
- separated lists of options that may be set using the Options
- command.</dd>
- </dl>
-
- <p>Example:</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig Indexes
- </code></p></div>
-
- <p>In the example above all directives that are neither in the group
- <code>AuthConfig</code> nor <code>Indexes</code> cause an internal
- server error.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#accessfilename">AccessFileName</a></code></li>
-<li><a href="../configuring.html">Configuration Files</a></li>
-<li><a href="../howto/htaccess.html">.htaccess Files</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthName" id="AuthName">AuthName</a> <a name="authname" id="authname">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Authorization realm for use in HTTP
-authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthName <var>auth-domain</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive sets the name of the authorization realm for a
- directory. This realm is given to the client so that the user
- knows which username and password to send.
- <code class="directive">AuthName</code> takes a single argument; if the
- realm name contains spaces, it must be enclosed in quotation
- marks. It must be accompanied by <code class="directive"><a href="#authtype">AuthType</a></code> and <code class="directive"><a href="#require">Require</a></code> directives, and directives such
- as <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> and
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> to
- work.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- AuthName "Top Secret"
- </code></p></div>
-
- <p>The string provided for the <code>AuthName</code> is what will
- appear in the password dialog provided by most browsers.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../howto/auth.html">Authentication, Authorization, and
- Access Control</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthType" id="AuthType">AuthType</a> <a name="authtype" id="authtype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Type of user authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthType Basic|Digest</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive selects the type of user authentication for a
- directory. Only <code>Basic</code> and <code>Digest</code> are
- currently implemented.
-
- It must be accompanied by <code class="directive"><a href="#authname">AuthName</a></code> and <code class="directive"><a href="#require">Require</a></code> directives, and directives such
- as <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> and
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> to
- work.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../howto/auth.html">Authentication, Authorization,
-and Access Control</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CGIMapExtension" id="CGIMapExtension">CGIMapExtension</a> <a name="cgimapextension" id="cgimapextension">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CGIMapExtension <var>cgi-path</var> <var>.extension</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>NetWare only</td></tr>
-</table>
- <p>This directive is used to control how Apache finds the
- interpreter used to run CGI scripts. For example, setting
- <code>CGIMapExtension sys:\foo.nlm .foo</code> will
- cause all CGI script files with a <code>.foo</code> extension to
- be passed to the FOO interpreter.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ContentDigest" id="ContentDigest">ContentDigest</a> <a name="contentdigest" id="contentdigest">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables the generation of Content-MD5 HTTP Response
-headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ContentDigest On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ContentDigest Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive enables the generation of
- <code>Content-MD5</code> headers as defined in RFC1864
- respectively RFC2068.</p>
-
- <p>MD5 is an algorithm for computing a "message digest"
- (sometimes called "fingerprint") of arbitrary-length data, with
- a high degree of confidence that any alterations in the data
- will be reflected in alterations in the message digest.</p>
-
- <p>The <code>Content-MD5</code> header provides an end-to-end
- message integrity check (MIC) of the entity-body. A proxy or
- client may check this header for detecting accidental
- modification of the entity-body in transit. Example header:</p>
-
- <div class="example"><p><code>
- Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
- </code></p></div>
-
- <p>Note that this can cause performance problems on your server
- since the message digest is computed on every request (the
- values are not cached).</p>
-
- <p><code>Content-MD5</code> is only sent for documents served
- by the <code class="module"><a href="../mod/core.html">core</a></code>, and not by any module. For example,
- SSI documents, output from CGI scripts, and byte range responses
- do not have this header.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultType" id="DefaultType">DefaultType</a> <a name="defaulttype" id="defaulttype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>MIME content-type that will be sent if the
-server cannot determine a type in any other way</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultType <var>MIME-type</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DefaultType text/plain</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>There will be times when the server is asked to provide a
- document whose type cannot be determined by its MIME types
- mappings.</p>
-
- <p>The server must inform the client of the content-type of the
- document, so in the event of an unknown type it uses the
- <code>DefaultType</code>. For example:</p>
-
- <div class="example"><p><code>
- DefaultType image/gif
- </code></p></div>
-
- <p>would be appropriate for a directory which contained many GIF
- images with filenames missing the <code>.gif</code> extension.</p>
-
- <p>Note that unlike <code class="directive"><a href="#forcetype">ForceType</a></code>, this directive only
- provides the default mime-type. All other mime-type definitions,
- including filename extensions, that might identify the media type
- will override this default.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Directory" id="Directory">&lt;Directory&gt;</a> <a name="directory" id="directory">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;Directory&gt;</code> and
- <code>&lt;/Directory&gt;</code> are used to enclose a group of
- directives that will apply only to the named directory and
- sub-directories of that directory. Any directive that is allowed
- in a directory context may be used. <var>Directory-path</var> is
- either the full path to a directory, or a wild-card string using
- Unix shell-style matching. In a wild-card string, <code>?</code> matches
- any single character, and <code>*</code> matches any sequences of
- characters. You may also use <code>[]</code> character ranges. None
- of the wildcards match a `/' character, so <code>&lt;Directory
- /*/public_html&gt;</code> will not match
- <code>/home/user/public_html</code>, but <code>&lt;Directory
- /home/*/public_html&gt;</code> will match. Example:</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/local/httpd/htdocs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <div class="note">
- <p>Be careful with the <var>directory-path</var> arguments:
- They have to literally match the filesystem path which Apache uses
- to access the files. Directives applied to a particular
- <code>&lt;Directory&gt;</code> will not apply to files accessed from
- that same directory via a different path, such as via different symbolic
- links.</p>
- </div>
-
- <p>Extended regular
- expressions can also be used, with the addition of the
- <code>~</code> character. For example:</p>
-
- <div class="example"><p><code>
- &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
- </code></p></div>
-
- <p>would match directories in <code>/www/</code> that consisted of
- three numbers.</p>
-
- <p>If multiple (non-regular expression) <code class="directive">&lt;Directory&gt;</code> sections
- match the directory (or one of its parents) containing a document,
- then the directives are applied in the order of shortest match
- first, interspersed with the directives from the <a href="#accessfilename">.htaccess</a> files. For example,
- with</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride None<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /home/&gt;<br />
- <span class="indent">
- AllowOverride FileInfo<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>for access to the document <code>/home/web/dir/doc.html</code>
- the steps are:</p>
-
- <ul>
- <li>Apply directive <code>AllowOverride None</code>
- (disabling <code>.htaccess</code> files).</li>
-
- <li>Apply directive <code>AllowOverride FileInfo</code> (for
- directory <code>/home</code>).</li>
-
- <li>Apply any <code>FileInfo</code> directives in
- <code>/home/.htaccess</code>, <code>/home/web/.htaccess</code> and
- <code>/home/web/dir/.htaccess</code> in that order.</li>
- </ul>
-
- <p>Regular expressions are not considered until after all of the
- normal sections have been applied. Then all of the regular
- expressions are tested in the order they appeared in the
- configuration file. For example, with</p>
-
- <div class="example"><p><code>
- &lt;Directory ~ abc$&gt;<br />
- <span class="indent">
- # ... directives here ...<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>the regular expression section won't be considered until after
- all normal <code class="directive">&lt;Directory&gt;</code>s and
- <code>.htaccess</code> files have been applied. Then the regular
- expression will match on <code>/home/abc/public_html/abc</code> and
- the corresponding <code class="directive">&lt;Directory&gt;</code> will
- be applied.</p>
-
- <p><strong>Note that the default Apache access for
- <code>&lt;Directory /&gt;</code> is <code>Allow from All</code>.
- This means that Apache will serve any file mapped from an URL. It is
- recommended that you change this with a block such
- as</strong></p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from All<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><strong>and then override this for directories you
- <em>want</em> accessible. See the <a href="../misc/security_tips.html">Security Tips</a> page for more
- details.</strong></p>
-
- <p>The directory sections occur in the <code>httpd.conf</code> file.
- <code class="directive">&lt;Directory&gt;</code> directives
- cannot nest, and cannot appear in a <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> or <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code> section.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../sections.html">How &lt;Directory&gt;,
- &lt;Location&gt; and &lt;Files&gt; sections work</a> for an
- explanation of how these different sections are combined when a
- request is received</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectoryMatch" id="DirectoryMatch">&lt;DirectoryMatch&gt;</a> <a name="directorymatch" id="directorymatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enclose directives that apply to
-file-system directories matching a regular expression and their
-subdirectories</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;DirectoryMatch&gt;</code> and
- <code>&lt;/DirectoryMatch&gt;</code> are used to enclose a group
- of directives which will apply only to the named directory and
- sub-directories of that directory, the same as <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>. However, it
- takes as an argument a regular expression. For example:</p>
-
- <div class="example"><p><code>
- &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
- </code></p></div>
-
- <p>would match directories in <code>/www/</code> that consisted of three
- numbers.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> for
-a description of how regular expressions are mixed in with normal
-<code class="directive">&lt;Directory&gt;</code>s</li>
-<li><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt; and
-&lt;Files&gt; sections work</a> for an explanation of how these different
-sections are combined when a request is received</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DocumentRoot" id="DocumentRoot">DocumentRoot</a> <a name="documentroot" id="documentroot">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory that forms the main document tree visible
-from the web</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DocumentRoot <var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DocumentRoot /usr/local/apache/htdocs</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive sets the directory from which <code>httpd</code>
- will serve files. Unless matched by a directive like <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, the server appends the
- path from the requested URL to the document root to make the
- path to the document. Example:</p>
-
- <div class="example"><p><code>
- DocumentRoot /usr/web
- </code></p></div>
-
- <p>then an access to
- <code>http://www.my.host.com/index.html</code> refers to
- <code>/usr/web/index.html</code>. If the <var>directory-path</var> is
- not absolute then it is assumed to be relative to the <code class="directive"><a href="#serverroot">ServerRoot</a></code>.</p>
-
- <p>The <code class="directive">DocumentRoot</code> should be specified without
- a trailing slash.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../urlmapping.html">Mapping URLs to Filesystem
-Location</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableMMAP" id="EnableMMAP">EnableMMAP</a> <a name="enablemmap" id="enablemmap">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use memory-mapping to read files during delivery</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>EnableMMAP On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>EnableMMAP On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive controls whether the <code>httpd</code> may use
- memory-mapping if it needs to read the contents of a file during
- delivery. By default, when the handling of a request requires
- access to the data within a file -- for example, when delivering a
- server-parsed file using <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> -- Apache
- memory-maps the file if the OS supports it.</p>
-
- <p>This memory-mapping sometimes yields a performance improvement.
- But in some environments, it is better to disable the memory-mapping
- to prevent operational problems:</p>
-
- <ul>
- <li>On some multiprocessor systems, memory-mapping can reduce the
- performance of the <code>httpd</code>.</li>
- <li>With an NFS-mounted <code class="directive"><a href="#documentroot">DocumentRoot</a></code>,
- the <code>httpd</code> may crash due to a segmentation fault if a file
- is deleted or truncated while the <code>httpd</code> has it
- memory-mapped.</li>
- </ul>
-
- <p>For server configurations that are vulnerable to these problems,
- you should disable memory-mapping of delivered files by specifying:</p>
-
- <div class="example"><p><code>
- EnableMMAP Off
- </code></p></div>
-
- <p>For NFS mounted files, this feature may be disabled explicitly for
- the offending files by specifying:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/path-to-nfs-files"&gt;
- <span class="indent">
- EnableMMAP Off
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableSendfile" id="EnableSendfile">EnableSendfile</a> <a name="enablesendfile" id="enablesendfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the kernel sendfile support to deliver files to the client</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>EnableSendfile On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>EnableSendfile On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.44 and later</td></tr>
-</table>
- <p>This directive controls whether <code>httpd</code> may use the sendfile
- support from the kernel to transmit file contents to the client.
- By default, when the handling of a request requires no access
- to the data within a file -- for example, when delivering a
- static file -- Apache uses sendfile to deliver the file contents
- without ever reading the file if the OS supports it.</p>
-
- <p>This sendfile mechanism avoids separate read and send operations,
- and buffer allocations. But on some platforms or within some
- filesystems, it is better to disable this feature to avoid
- operational problems:</p>
-
- <ul>
- <li>Some platforms may have broken sendfile support that the build
- system did not detect, especially if the binaries were built on
- another box and moved to such a machine with broken sendfile
- support.</li>
- <li>On Linux the use of sendfile triggers TCP-checksum
- offloading bugs on certain networking cards when using IPv6.</li>
- <li>With a network-mounted <code class="directive"><a href="#documentroot">DocumentRoot</a></code> (e.g., NFS or SMB),
- the kernel may be unable to serve the network file through
- its own cache.</li>
- </ul>
-
- <p>For server configurations that are vulnerable to these problems,
- you should disable this feature by specifying:</p>
-
- <div class="example"><p><code>
- EnableSendfile Off
- </code></p></div>
-
- <p>For NFS or SMB mounted files, this feature may be disabled explicitly
- for the offending files by specifying:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/path-to-nfs-files"&gt;
- <span class="indent">
- EnableSendfile Off
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ErrorDocument" id="ErrorDocument">ErrorDocument</a> <a name="errordocument" id="errordocument">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>What the server will return to the client
-in case of an error</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ErrorDocument <var>error-code</var> <var>document</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Quoting syntax for text messages is different in Apache
-2.0</td></tr>
-</table>
- <p>In the event of a problem or error, Apache can be configured
- to do one of four things,</p>
-
- <ol>
- <li>output a simple hardcoded error message</li>
-
- <li>output a customized message</li>
-
- <li>redirect to a local <var>URL-path</var> to handle the
- problem/error</li>
-
- <li>redirect to an external <var>URL</var> to handle the
- problem/error</li>
- </ol>
-
- <p>The first option is the default, while options 2-4 are
- configured using the <code class="directive">ErrorDocument</code>
- directive, which is followed by the HTTP response code and a URL
- or a message. Apache will sometimes offer additional information
- regarding the problem/error.</p>
-
- <p>URLs can begin with a slash (/) for local URLs, or be a full
- URL which the client can resolve. Alternatively, a message can
- be provided to be displayed by the browser. Examples:</p>
-
- <div class="example"><p><code>
- ErrorDocument 500 http://foo.example.com/cgi-bin/tester<br />
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br />
- ErrorDocument 401 /subscription_info.html<br />
- ErrorDocument 403 "Sorry can't allow you access today"
- </code></p></div>
-
- <p>Additionally, the special value <code>default</code> can be used
- to specify Apache's simple hardcoded message. While not required
- under normal circumstances, <code>default</code> will restore
- Apache's simple hardcoded message for configurations that would
- otherwise inherit an existing <code class="directive">ErrorDocument</code>.</p>
-
- <div class="example"><p><code>
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br /><br />
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- ErrorDocument 404 default<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Note that when you specify an <code class="directive">ErrorDocument</code>
- that points to a remote URL (ie. anything with a method such as
- <code>http</code> in front of it), Apache will send a redirect to the
- client to tell it where to find the document, even if the
- document ends up being on the same server. This has several
- implications, the most important being that the client will not
- receive the original error status code, but instead will
- receive a redirect status code. This in turn can confuse web
- robots and other clients which try to determine if a URL is
- valid using the status code. In addition, if you use a remote
- URL in an <code>ErrorDocument 401</code>, the client will not
- know to prompt the user for a password since it will not
- receive the 401 status code. Therefore, <strong>if you use an
- <code>ErrorDocument 401</code> directive then it must refer to a local
- document.</strong></p>
-
- <p>Microsoft Internet Explorer (MSIE) will by default ignore
- server-generated error messages when they are "too small" and substitute
- its own "friendly" error messages. The size threshold varies depending on
- the type of error, but in general, if you make your error document
- greater than 512 bytes, then MSIE will show the server-generated
- error rather than masking it. More information is available in
- Microsoft Knowledge Base article <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807">Q294807</a>.</p>
-
- <p>Prior to version 2.0, messages were indicated by prefixing
- them with a single unmatched double quote character.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../custom-error.html">documentation of
- customizable responses</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ErrorLog" id="ErrorLog">ErrorLog</a> <a name="errorlog" id="errorlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location where the server will log errors</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">ErrorLog</code> directive sets the name of
- the file to which the server will log any errors it encounters. If
- the <var>file-path</var> is not absolute then it is assumed to be
- relative to the <code class="directive"><a href="#serverroot">ServerRoot</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ErrorLog /var/log/httpd/error_log
- </code></p></div>
-
- <p>If the <var>file-path</var>
- begins with a pipe (|) then it is assumed to be a command to spawn
- to handle the error log.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ErrorLog "|/usr/local/bin/httpd_errors"
- </code></p></div>
-
- <p>Using <code>syslog</code> instead of a filename enables logging
- via syslogd(8) if the system supports it. The default is to use
- syslog facility <code>local7</code>, but you can override this by
- using the <code>syslog:<var>facility</var></code> syntax where
- <var>facility</var> can be one of the names usually documented in
- syslog(1).</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ErrorLog syslog:user
- </code></p></div>
-
- <p>SECURITY: See the <a href="../misc/security_tips.html#serverroot">security tips</a>
- document for details on why your security could be compromised
- if the directory where log files are stored is writable by
- anyone other than the user that starts the server.</p>
- <div class="warning"><h3>Note</h3>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#loglevel">LogLevel</a></code></li>
-<li><a href="../logs.html">Apache Log Files</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="FileETag" id="FileETag">FileETag</a> <a name="fileetag" id="fileetag">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File attributes used to create the ETag
-HTTP response header</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>FileETag <var>component</var> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>FileETag INode MTime Size</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>
- The <code class="directive">FileETag</code> directive configures the file
- attributes that are used to create the <code>ETag</code> (entity
- tag) response header field when the document is based on a file.
- (The <code>ETag</code> value is used in cache management to save
- network bandwidth.) In Apache 1.3.22 and earlier, the
- <code>ETag</code> value was <em>always</em> formed
- from the file's inode, size, and last-modified time (mtime). The
- <code class="directive">FileETag</code> directive allows you to choose
- which of these -- if any -- should be used. The recognized keywords are:
- </p>
-
- <dl>
- <dt><strong>INode</strong></dt>
- <dd>The file's i-node number will be included in the calculation</dd>
- <dt><strong>MTime</strong></dt>
- <dd>The date and time the file was last modified will be included</dd>
- <dt><strong>Size</strong></dt>
- <dd>The number of bytes in the file will be included</dd>
- <dt><strong>All</strong></dt>
- <dd>All available fields will be used. This is equivalent to:
- <div class="example"><p><code>FileETag INode MTime Size</code></p></div></dd>
- <dt><strong>None</strong></dt>
- <dd>If a document is file-based, no <code>ETag</code> field will be
- included in the response</dd>
- </dl>
-
- <p>The <code>INode</code>, <code>MTime</code>, and <code>Size</code>
- keywords may be prefixed with either <code>+</code> or <code>-</code>,
- which allow changes to be made to the default setting inherited
- from a broader scope. Any keyword appearing without such a prefix
- immediately and completely cancels the inherited setting.</p>
-
- <p>If a directory's configuration includes
- <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>, and a
- subdirectory's includes <code>FileETag&nbsp;-INode</code>,
- the setting for that subdirectory (which will be inherited by
- any sub-subdirectories that don't override it) will be equivalent to
- <code>FileETag&nbsp;MTime&nbsp;Size</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Files" id="Files">&lt;Files&gt;</a> <a name="files" id="files">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contains directives that apply to matched
-filenames</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">&lt;Files&gt;</code> directive
- limits the scope of the enclosed directives by filename. It is comparable
- to the <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- and <code class="directive"><a href="#location">&lt;Location&gt;</a></code>
- directives. It should be matched with a <code>&lt;/Files&gt;</code>
- directive. The directives given within this section will be applied to
- any object with a basename (last component of filename) matching the
- specified filename. <code class="directive">&lt;Files&gt;</code>
- sections are processed in the order they appear in the
- configuration file, after the <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> sections and
- <code>.htaccess</code> files are read, but before <code class="directive"><a href="#location">&lt;Location&gt;</a></code> sections. Note
- that <code class="directive">&lt;Files&gt;</code> can be nested
- inside <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> sections to restrict the
- portion of the filesystem they apply to.</p>
-
- <p>The <var>filename</var> argument should include a filename, or
- a wild-card string, where <code>?</code> matches any single character,
- and <code>*</code> matches any sequences of characters. Extended regular
- expressions can also be used, with the addition of the
- <code>~</code> character. For example:</p>
-
- <div class="example"><p><code>
- &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
- </code></p></div>
-
- <p>would match most common Internet graphics formats. <code class="directive"><a href="#filesmatch">&lt;FilesMatch&gt;</a></code> is preferred,
- however.</p>
-
- <p>Note that unlike <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> and <code class="directive"><a href="#location">&lt;Location&gt;</a></code> sections, <code class="directive">&lt;Files&gt;</code> sections can be used inside
- <code>.htaccess</code> files. This allows users to control access to
- their own files, at a file-by-file level.</p>
-
-
-<h3>See also</h3>
-<ul>
-<li><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="FilesMatch" id="FilesMatch">&lt;FilesMatch&gt;</a> <a name="filesmatch" id="filesmatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contains directives that apply to regular-expression matched
-filenames</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">&lt;FilesMatch&gt;</code> directive
- limits the scope of the enclosed directives by filename, just as the
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code> directive
- does. However, it accepts a regular expression. For example:</p>
-
- <div class="example"><p><code>
- &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
- </code></p></div>
-
- <p>would match most common Internet graphics formats.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForceType" id="ForceType">ForceType</a> <a name="forcetype" id="forcetype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Forces all matching files to be served with the specified
-MIME content-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForceType <var>MIME-type</var>|None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Moved to the core in Apache 2.0</td></tr>
-</table>
- <p>When placed into an <code>.htaccess</code> file or a
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>, or
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code> or
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code>
- section, this directive forces all matching files to be served
- with the content type identification given by
- <var>MIME-type</var>. For example, if you had a directory full of
- GIF files, but did not want to label them all with <code>.gif</code>,
- you might want to use:</p>
-
- <div class="example"><p><code>
- ForceType image/gif
- </code></p></div>
-
- <p>Note that unlike <code class="directive"><a href="#defaulttype">DefaultType</a></code>,
- this directive overrides all mime-type associations, including
- filename extensions, that might identify the media type.</p>
-
- <p>You can override any <code class="directive">ForceType</code> setting
- by using the value of <code>None</code>:</p>
-
- <div class="example"><p><code>
- # force all files to be image/gif:<br />
- &lt;Location /images&gt;<br />
- <span class="indent">
- ForceType image/gif<br />
- </span>
- &lt;/Location&gt;<br />
- <br />
- # but normal mime-type associations here:<br />
- &lt;Location /images/mixed&gt;<br />
- <span class="indent">
- ForceType None<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HostnameLookups" id="HostnameLookups">HostnameLookups</a> <a name="hostnamelookups" id="hostnamelookups">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables DNS lookups on client IP addresses</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>HostnameLookups On|Off|Double</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>HostnameLookups Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive enables DNS lookups so that host names can be
- logged (and passed to CGIs/SSIs in <code>REMOTE_HOST</code>).
- The value <code>Double</code> refers to doing double-reverse
- DNS lookup. That is, after a reverse lookup is performed, a forward
- lookup is then performed on that result. At least one of the IP
- addresses in the forward lookup must match the original
- address. (In "tcpwrappers" terminology this is called
- <code>PARANOID</code>.)</p>
-
- <p>Regardless of the setting, when <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> is
- used for controlling access by hostname, a double reverse lookup
- will be performed. This is necessary for security. Note that the
- result of this double-reverse isn't generally available unless you
- set <code>HostnameLookups Double</code>. For example, if only
- <code>HostnameLookups On</code> and a request is made to an object
- that is protected by hostname restrictions, regardless of whether
- the double-reverse fails or not, CGIs will still be passed the
- single-reverse result in <code>REMOTE_HOST</code>.</p>
-
- <p>The default is <code>Off</code> in order to save the network
- traffic for those sites that don't truly need the reverse
- lookups done. It is also better for the end users because they
- don't have to suffer the extra latency that a lookup entails.
- Heavily loaded sites should leave this directive
- <code>Off</code>, since DNS lookups can take considerable
- amounts of time. The utility <a href="../programs/logresolve.html">logresolve</a>, compiled by default
- to the <code>bin</code> subdirectory of your installation directory, can
- be used to look up host names from logged IP addresses offline.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfDefine" id="IfDefine">&lt;IfDefine&gt;</a> <a name="ifdefine" id="ifdefine">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Encloses directives that will be processed only
-if a test is true at startup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code>&lt;IfDefine <var>test</var>&gt;...&lt;/IfDefine&gt;
- </code> section is used to mark directives that are conditional. The
- directives within an <code class="directive">&lt;IfDefine&gt;</code>
- section are only processed if the <var>test</var> is true. If <var>
- test</var> is false, everything between the start and end markers is
- ignored.</p>
-
- <p>The <var>test</var> in the <code class="directive">&lt;IfDefine&gt;</code> section directive can be one of two forms:</p>
-
- <ul>
- <li><var>parameter-name</var></li>
-
- <li><code>!</code><var>parameter-name</var></li>
- </ul>
-
- <p>In the former case, the directives between the start and end
- markers are only processed if the parameter named
- <var>parameter-name</var> is defined. The second format reverses
- the test, and only processes the directives if
- <var>parameter-name</var> is <strong>not</strong> defined.</p>
-
- <p>The <var>parameter-name</var> argument is a define as given on
- the <code>httpd</code> command line via <code>-D<var>parameter-</var>
- </code>, at the time the server was started.</p>
-
- <p><code class="directive">&lt;IfDefine&gt;</code> sections are
- nest-able, which can be used to implement simple
- multiple-parameter tests. Example:</p>
-
- <div class="example"><p><code>
- httpd -DReverseProxy ...<br />
- <br />
- # httpd.conf<br />
- &lt;IfDefine ReverseProxy&gt;<br />
- <span class="indent">
- LoadModule rewrite_module modules/mod_rewrite.so<br />
- LoadModule proxy_module modules/libproxy.so<br />
- </span>
- &lt;/IfDefine&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfModule" id="IfModule">&lt;IfModule&gt;</a> <a name="ifmodule" id="ifmodule">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Encloses directives that are processed conditional on the
-presence or absence of a specific module</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Module identifiers are available in version 2.1 and
-later.</td></tr>
-</table>
- <p>The <code>&lt;IfModule <var>test</var>&gt;...&lt;/IfModule&gt;</code>
- section is used to mark directives that are conditional on the presence of
- a specific module. The directives within an <code class="directive">&lt;IfModule&gt;</code> section are only processed if the <var>test</var>
- is true. If <var>test</var> is false, everything between the start and
- end markers is ignored.</p>
-
- <p>The <var>test</var> in the <code class="directive">&lt;IfModule&gt;</code> section directive can be one of two forms:</p>
-
- <ul>
- <li><var>module</var></li>
-
- <li>!<var>module</var></li>
- </ul>
-
- <p>In the former case, the directives between the start and end
- markers are only processed if the module named <var>module</var>
- is included in Apache -- either compiled in or
- dynamically loaded using <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>. The second format reverses the test,
- and only processes the directives if <var>module</var> is
- <strong>not</strong> included.</p>
-
- <p>The <var>module</var> argument can be either the module identifier or
- the file name of the module, at the time it was compiled. For example,
- <code>rewrite_module</code> is the identifier and
- <code>mod_rewrite.c</code> is the file name. If a module consists of
- several source files, use the name of the file containing the string
- <code>STANDARD20_MODULE_STUFF</code>.</p>
-
- <p><code class="directive">&lt;IfModule&gt;</code> sections are
- nest-able, which can be used to implement simple multiple-module
- tests.</p>
-
- <div class="note">This section should only be used if you need to have one
- configuration file that works whether or not a specific module
- is available. In normal operation, directives need not be
- placed in <code class="directive">&lt;IfModule&gt;</code>
- sections.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Include" id="Include">Include</a> <a name="include" id="include">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Includes other configuration files from within
-the server configuration files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Include <var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Wildcard matching available in 2.0.41 and later</td></tr>
-</table>
- <p>This directive allows inclusion of other configuration files
- from within the server configuration files.</p>
-
- <p>Shell-style (<code>fnmatch()</code>) wildcard characters can be used to
- include several files at once, in alphabetical order. In
- addition, if <code class="directive">Include</code> points to a directory,
- rather than a file, Apache will read all files in that directory
- and any subdirectory. But including entire directories is not
- recommended, because it is easy to accidentally leave temporary
- files in a directory that can cause <code>httpd</code> to
- fail.</p>
-
- <p>The file path specified may be an absolute path, or may be relative
- to the <code class="directive"><a href="#serverroot">ServerRoot</a></code> directory.</p>
-
- <p>Examples:</p>
-
- <div class="example"><p><code>
- Include /usr/local/apache2/conf/ssl.conf<br />
- Include /usr/local/apache2/conf/vhosts/*.conf
- </code></p></div>
-
- <p>Or, providing paths relative to your <code class="directive"><a href="#serverroot">ServerRoot</a></code> directory:</p>
-
- <div class="example"><p><code>
- Include conf/ssl.conf<br />
- Include conf/vhosts/*.conf
- </code></p></div>
-
- <p>Running <code>apachectl configtest</code> will give you a list
- of the files that are being processed during the configuration
- check:</p>
-
- <div class="example"><p><code>
- root@host# apachectl configtest<br />
- Processing config file: /usr/local/apache2/conf/ssl.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf<br />
- Syntax OK
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../programs/apachectl.html">apachectl</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="KeepAlive" id="KeepAlive">KeepAlive</a> <a name="keepalive" id="keepalive">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables HTTP persistent connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>KeepAlive On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>KeepAlive On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The Keep-Alive extension to HTTP/1.0 and the persistent
- connection feature of HTTP/1.1 provide long-lived HTTP sessions
- which allow multiple requests to be sent over the same TCP
- connection. In some cases this has been shown to result in an
- almost 50% speedup in latency times for HTML documents with
- many images. To enable Keep-Alive connections, set
- <code>KeepAlive On</code>.</p>
-
- <p>For HTTP/1.0 clients, Keep-Alive connections will only be
- used if they are specifically requested by a client. In
- addition, a Keep-Alive connection with an HTTP/1.0 client can
- only be used when the length of the content is known in
- advance. This implies that dynamic content such as CGI output,
- SSI pages, and server-generated directory listings will
- generally not use Keep-Alive connections to HTTP/1.0 clients.
- For HTTP/1.1 clients, persistent connections are the default
- unless otherwise specified. If the client requests it, chunked
- encoding will be used in order to send content of unknown
- length over persistent connections.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="KeepAliveTimeout" id="KeepAliveTimeout">KeepAliveTimeout</a> <a name="keepalivetimeout" id="keepalivetimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Amount of time the server will wait for subsequent
-requests on a persistent connection</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>KeepAliveTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>KeepAliveTimeout 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The number of seconds Apache will wait for a subsequent
- request before closing the connection. Once a request has been
- received, the timeout value specified by the
- <code class="directive"><a href="#timeout">Timeout</a></code> directive applies.</p>
-
- <p>Setting <code class="directive">KeepAliveTimeout</code> to a high value
- may cause performance problems in heavily loaded servers. The
- higher the timeout, the more server processes will be kept
- occupied waiting on connections with idle clients.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Limit" id="Limit">&lt;Limit&gt;</a> <a name="limit" id="limit">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Restrict enclosed access controls to only certain HTTP
-methods</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>Access controls are normally effective for
- <strong>all</strong> access methods, and this is the usual
- desired behavior. <strong>In the general case, access control
- directives should not be placed within a
- <code class="directive">&lt;Limit&gt;</code> section.</strong></p>
-
- <p>The purpose of the <code class="directive">&lt;Limit&gt;</code>
- directive is to restrict the effect of the access controls to the
- nominated HTTP methods. For all other methods, the access
- restrictions that are enclosed in the <code class="directive">&lt;Limit&gt;</code> bracket <strong>will have no
- effect</strong>. The following example applies the access control
- only to the methods <code>POST</code>, <code>PUT</code>, and
- <code>DELETE</code>, leaving all other methods unprotected:</p>
-
- <div class="example"><p><code>
- &lt;Limit POST PUT DELETE&gt;<br />
- <span class="indent">
- Require valid-user<br />
- </span>
- &lt;/Limit&gt;
- </code></p></div>
-
- <p>The method names listed can be one or more of: <code>GET</code>,
- <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
- <code>CONNECT</code>, <code>OPTIONS</code>,
- <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
- <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
- <code>LOCK</code>, and <code>UNLOCK</code>. <strong>The method name is
- case-sensitive.</strong> If <code>GET</code> is used it will also
- restrict <code>HEAD</code> requests. The <code>TRACE</code> method
- cannot be limited.</p>
-
- <div class="warning">A <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code> section should always be
- used in preference to a <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> section when restricting access,
- since a <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code> section provides protection
- against arbitrary methods.</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitExcept" id="LimitExcept">&lt;LimitExcept&gt;</a> <a name="limitexcept" id="limitexcept">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Restrict access controls to all HTTP methods
-except the named ones</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;LimitExcept&gt;</code> and
- <code>&lt;/LimitExcept&gt;</code> are used to enclose
- a group of access control directives which will then apply to any
- HTTP access method <strong>not</strong> listed in the arguments;
- i.e., it is the opposite of a <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> section and can be used to control
- both standard and nonstandard/unrecognized methods. See the
- documentation for <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> for more details.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- &lt;LimitExcept POST GET&gt;<br />
- <span class="indent">
- Require valid-user<br />
- </span>
- &lt;/LimitExcept&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitInternalRecursion" id="LimitInternalRecursion">LimitInternalRecursion</a> <a name="limitinternalrecursion" id="limitinternalrecursion">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine maximum number of internal redirects and nested
-subrequests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitInternalRecursion <var>number</var> [<var>number</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LimitInternalRecursion 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.47 and later</td></tr>
-</table>
- <p>An internal redirect happens, for example, when using the <code class="directive"><a href="../mod/mod_actions.html#action">Action</a></code> directive, which internally
- redirects the original request to a CGI script. A subrequest is Apache's
- mechanism to find out what would happen for some URI if it were requested.
- For example, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> uses subrequests to look for the
- files listed in the <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
- directive.</p>
-
- <p><code class="directive">LimitInternalRecursion</code> prevents the server
- from crashing when entering an infinite loop of internal redirects or
- subrequests. Such loops are usually caused by misconfigurations.</p>
-
- <p>The directive stores two different limits, which are evaluated on
- per-request basis. The first <var>number</var> is the maximum number of
- internal redirects, that may follow each other. The second <var>number</var>
- determines, how deep subrequests may be nested. If you specify only one
- <var>number</var>, it will be assigned to both limits.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- LimitInternalRecursion 5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestBody" id="LimitRequestBody">LimitRequestBody</a> <a name="limitrequestbody" id="limitrequestbody">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Restricts the total size of the HTTP request body sent
-from the client</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestBody <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LimitRequestBody 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive specifies the number of <var>bytes</var> from 0
- (meaning unlimited) to 2147483647 (2GB) that are allowed in a
- request body.</p>
-
- <p>The <code class="directive">LimitRequestBody</code> directive allows
- the user to set a limit on the allowed size of an HTTP request
- message body within the context in which the directive is given
- (server, per-directory, per-file or per-location). If the client
- request exceeds that limit, the server will return an error
- response instead of servicing the request. The size of a normal
- request message body will vary greatly depending on the nature of
- the resource and the methods allowed on that resource. CGI scripts
- typically use the message body for retrieving form information.
- Implementations of the <code>PUT</code> method will require
- a value at least as large as any representation that the server
- wishes to accept for that resource.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service
- attacks.</p>
-
- <p>If, for example, you are permitting file upload to a particular
- location, and wish to limit the size of the uploaded file to 100K,
- you might use the following directive:</p>
-
- <div class="example"><p><code>
- LimitRequestBody 102400
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestFields" id="LimitRequestFields">LimitRequestFields</a> <a name="limitrequestfields" id="limitrequestfields">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limits the number of HTTP request header fields that
-will be accepted from the client</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestFields <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LimitRequestFields 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p><var>Number</var> is an integer from 0 (meaning unlimited) to
- 32767. The default value is defined by the compile-time
- constant <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (100 as
- distributed).</p>
-
- <p>The <code class="directive">LimitRequestFields</code> directive allows
- the server administrator to modify the limit on the number of
- request header fields allowed in an HTTP request. A server needs
- this value to be larger than the number of fields that a normal
- client request might include. The number of request header fields
- used by a client rarely exceeds 20, but this may vary among
- different client implementations, often depending upon the extent
- to which a user has configured their browser to support detailed
- content negotiation. Optional HTTP extensions are often expressed
- using request header fields.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service attacks.
- The value should be increased if normal clients see an error
- response from the server that indicates too many fields were
- sent in the request.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- LimitRequestFields 50
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestFieldSize" id="LimitRequestFieldSize">LimitRequestFieldSize</a> <a name="limitrequestfieldsize" id="limitrequestfieldsize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limits the size of the HTTP request header allowed from the
-client</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestFieldsize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LimitRequestFieldsize 8190</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive specifies the number of <var>bytes</var> from 0
- to the value of the compile-time constant
- <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (8190 as
- distributed) that will be allowed in an HTTP request
- header.</p>
-
- <p>The <code class="directive">LimitRequestFieldSize</code> directive
- allows the server administrator to reduce the limit on the allowed
- size of an HTTP request header field below the normal input buffer
- size compiled with the server. A server needs this value to be
- large enough to hold any one header field from a normal client
- request. The size of a normal request header field will vary
- greatly among different client implementations, often depending
- upon the extent to which a user has configured their browser to
- support detailed content negotiation.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service attacks.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- LimitRequestFieldSize 4094
- </code></p></div>
-
- <div class="note">Under normal conditions, the value should not be changed from
- the default.</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestLine" id="LimitRequestLine">LimitRequestLine</a> <a name="limitrequestline" id="limitrequestline">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit the size of the HTTP request line that will be accepted
-from the client</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitRequestLine <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LimitRequestLine 8190</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive sets the number of <var>bytes</var> from 0 to
- the value of the compile-time constant
- <code>DEFAULT_LIMIT_REQUEST_LINE</code> (8190 as distributed)
- that will be allowed on the HTTP request-line.</p>
-
- <p>The <code class="directive">LimitRequestLine</code> directive allows
- the server administrator to reduce the limit on the allowed size
- of a client's HTTP request-line below the normal input buffer size
- compiled with the server. Since the request-line consists of the
- HTTP method, URI, and protocol version, the
- <code class="directive">LimitRequestLine</code> directive places a
- restriction on the length of a request-URI allowed for a request
- on the server. A server needs this value to be large enough to
- hold any of its resource names, including any information that
- might be passed in the query part of a <code>GET</code> request.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service attacks.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- LimitRequestLine 4094
- </code></p></div>
-
- <div class="note">Under normal conditions, the value should not be changed from
- the default.</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitXMLRequestBody" id="LimitXMLRequestBody">LimitXMLRequestBody</a> <a name="limitxmlrequestbody" id="limitxmlrequestbody">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limits the size of an XML-based request body</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LimitXMLRequestBody <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LimitXMLRequestBody 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>Limit (in bytes) on maximum size of an XML-based request
- body. A value of <code>0</code> will disable any checking.</p>
-
- <p>Example:</p>
-
- <div class="example"><p><code>
- LimitXMLRequestBody 0
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Location" id="Location">&lt;Location&gt;</a> <a name="location" id="location">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Applies the enclosed directives only to matching
-URLs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">&lt;Location&gt;</code> directive
- limits the scope of the enclosed directives by URL. It is similar to the
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- directive, and starts a subsection which is terminated with a
- <code>&lt;/Location&gt;</code> directive. <code class="directive">&lt;Location&gt;</code> sections are processed in the
- order they appear in the configuration file, after the <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> sections and
- <code>.htaccess</code> files are read, and after the <code class="directive"><a href="#files">&lt;Files&gt;</a></code> sections.</p>
-
- <p><code class="directive">&lt;Location&gt;</code> sections operate
- completely outside the filesystem. This has several consequences.
- Most importantly, <code class="directive">&lt;Location&gt;</code>
- directives should not be used to control access to filesystem
- locations. Since several different URLs may map to the same
- filesystem location, such access controls may by circumvented.</p>
-
- <div class="note"><h3>When to use <code class="directive">&lt;Location&gt;</code></h3>
-
- <p>Use <code class="directive">&lt;Location&gt;</code> to apply
- directives to content that lives outside the filesystem. For
- content that lives in the filesystem, use <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> and <code class="directive"><a href="#files">&lt;Files&gt;</a></code>. An exception is
- <code>&lt;Location /&gt;</code>, which is an easy way to
- apply a configuration to the entire server.</p>
- </div>
-
- <p>For all origin (non-proxy) requests, the URL to be matched is a
- URL-path of the form <code>/path/</code>. No scheme, hostname,
- port, or query string may be included. For proxy requests, the
- URL to be matched is of the form
- <code>scheme://servername/path</code>, and you must include the
- prefix.</p>
-
- <p>The URL may use wildcards. In a wild-card string, <code>?</code> matches
- any single character, and <code>*</code> matches any sequences of
- characters.</p>
-
- <p>Extended regular
- expressions can also be used, with the addition of the
- <code>~</code> character. For example:</p>
-
- <div class="example"><p><code>
- &lt;Location ~ "/(extra|special)/data"&gt;
- </code></p></div>
-
- <p>would match URLs that contained the substring <code>/extra/data</code>
- or <code>/special/data</code>. The directive <code class="directive"><a href="#locationmatch">&lt;LocationMatch&gt;</a></code> behaves
- identical to the regex version of <code class="directive">&lt;Location&gt;</code>.</p>
-
- <p>The <code class="directive">&lt;Location&gt;</code>
- functionality is especially useful when combined with the
- <code class="directive"><a href="#sethandler">SetHandler</a></code>
- directive. For example, to enable status requests, but allow them
- only from browsers at <code>foo.com</code>, you might use:</p>
-
- <div class="example"><p><code>
- &lt;Location /status&gt;<br />
- <span class="indent">
- SetHandler server-status<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="note"><h3>Note about / (slash)</h3>
- <p>The slash character has special meaning depending on where in a
- URL it appears. People may be used to its behavior in the filesystem
- where multiple adjacent slashes are frequently collapsed to a single
- slash (<em>i.e.</em>, <code>/home///foo</code> is the same as
- <code>/home/foo</code>). In URL-space this is not necessarily true.
- The <code class="directive"><a href="#locationmatch">&lt;LocationMatch&gt;</a></code>
- directive and the regex version of <code class="directive">&lt;Location&gt;</code> require you to explicitly specify multiple
- slashes if that is your intention.</p>
-
- <p>For example, <code>&lt;LocationMatch ^/abc&gt;</code> would match
- the request URL <code>/abc</code> but not the request URL <code>
- //abc</code>. The (non-regex) <code class="directive">&lt;Location&gt;</code> directive behaves similarly when used for
- proxy requests. But when (non-regex) <code class="directive">&lt;Location&gt;</code> is used for non-proxy requests it will
- implicitly match multiple slashes with a single slash. For example,
- if you specify <code>&lt;Location /abc/def&gt;</code> and the
- request is to <code>/abc//def</code> then it will match.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LocationMatch" id="LocationMatch">&lt;LocationMatch&gt;</a> <a name="locationmatch" id="locationmatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Applies the enclosed directives only to regular-expression
-matching URLs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">&lt;LocationMatch&gt;</code> directive
- limits the scope of the enclosed directives by URL, in an identical manner
- to <code class="directive"><a href="#location">&lt;Location&gt;</a></code>. However,
- it takes a regular expression as an argument instead of a simple
- string. For example:</p>
-
- <div class="example"><p><code>
- &lt;LocationMatch "/(extra|special)/data"&gt;
- </code></p></div>
-
- <p>would match URLs that contained the substring <code>/extra/data</code>
- or <code>/special/data</code>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogLevel" id="LogLevel">LogLevel</a> <a name="loglevel" id="loglevel">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls the verbosity of the ErrorLog</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogLevel <var>level</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LogLevel warn</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">LogLevel</code> adjusts the verbosity of the
- messages recorded in the error logs (see <code class="directive"><a href="#errorlog">ErrorLog</a></code> directive). The following
- <var>level</var>s are available, in order of decreasing
- significance:</p>
-
- <table class="bordered">
-
- <tr>
- <th><strong>Level</strong> </th>
-
- <th><strong>Description</strong> </th>
-
- <th><strong>Example</strong> </th>
- </tr>
-
- <tr>
- <td><code>emerg</code> </td>
-
- <td>Emergencies - system is unusable.</td>
-
- <td>"Child cannot open lock file. Exiting"</td>
- </tr>
-
- <tr>
- <td><code>alert</code> </td>
-
- <td>Action must be taken immediately.</td>
-
- <td>"getpwuid: couldn't determine user name from uid"</td>
- </tr>
-
- <tr>
- <td><code>crit</code> </td>
-
- <td>Critical Conditions.</td>
-
- <td>"socket: Failed to get a socket, exiting child"</td>
- </tr>
-
- <tr>
- <td><code>error</code> </td>
-
- <td>Error conditions.</td>
-
- <td>"Premature end of script headers"</td>
- </tr>
-
- <tr>
- <td><code>warn</code> </td>
-
- <td>Warning conditions.</td>
-
- <td>"child process 1234 did not exit, sending another
- SIGHUP"</td>
- </tr>
-
- <tr>
- <td><code>notice</code> </td>
-
- <td>Normal but significant condition.</td>
-
- <td>"httpd: caught SIGBUS, attempting to dump core in
- ..."</td>
- </tr>
-
- <tr>
- <td><code>info</code> </td>
-
- <td>Informational.</td>
-
- <td>"Server seems busy, (you may need to increase
- StartServers, or Min/MaxSpareServers)..."</td>
- </tr>
-
- <tr>
- <td><code>debug</code> </td>
-
- <td>Debug-level messages</td>
-
- <td>"Opening config file ..."</td>
- </tr>
- </table>
-
- <p>When a particular level is specified, messages from all
- other levels of higher significance will be reported as well.
- <em>E.g.</em>, when <code>LogLevel info</code> is specified,
- then messages with log levels of <code>notice</code> and
- <code>warn</code> will also be posted.</p>
-
- <p>Using a level of at least <code>crit</code> is
- recommended.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- LogLevel notice
- </code></p></div>
-
- <div class="note"><h3>Note</h3>
- <p>When logging to a regular file messages of the level
- <code>notice</code> cannot be suppressed and thus are always
- logged. However, this doesn't apply when logging is done
- using <code>syslog</code>.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxKeepAliveRequests" id="MaxKeepAliveRequests">MaxKeepAliveRequests</a> <a name="maxkeepaliverequests" id="maxkeepaliverequests">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of requests allowed on a persistent
-connection</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxKeepAliveRequests <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxKeepAliveRequests 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">MaxKeepAliveRequests</code> directive
- limits the number of requests allowed per connection when
- <code class="directive"><a href="#keepalive">KeepAlive</a></code> is on. If it is
- set to <code>0</code>, unlimited requests will be allowed. We
- recommend that this setting be kept to a high value for maximum
- server performance.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>
- MaxKeepAliveRequests 500
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NameVirtualHost" id="NameVirtualHost">NameVirtualHost</a> <a name="namevirtualhost" id="namevirtualhost">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Designates an IP address for name-virtual
-hosting</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NameVirtualHost <var>addr</var>[:<var>port</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">NameVirtualHost</code> directive is a
- required directive if you want to configure <a href="../vhosts/">name-based virtual hosts</a>.</p>
-
- <p>Although <var>addr</var> can be hostname it is recommended
- that you always use an IP address, e.g.</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44
- </code></p></div>
-
- <p>With the <code class="directive">NameVirtualHost</code> directive you
- specify the IP address on which the server will receive requests
- for the name-based virtual hosts. This will usually be the address
- to which your name-based virtual host names resolve. In cases
- where a firewall or other proxy receives the requests and forwards
- them on a different IP address to the server, you must specify the
- IP address of the physical interface on the machine which will be
- servicing the requests. If you have multiple name-based hosts on
- multiple addresses, repeat the directive for each address.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Note, that the "main server" and any <code>_default_</code> servers
- will <strong>never</strong> be served for a request to a
- <code class="directive">NameVirtualHost</code> IP address (unless for some
- reason you specify <code class="directive">NameVirtualHost</code> but then
- don't define any <code class="directive">VirtualHost</code>s for that
- address).</p>
- </div>
-
- <p>Optionally you can specify a port number on which the
- name-based virtual hosts should be used, e.g.</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44:8080
- </code></p></div>
-
- <p>IPv6 addresses must be enclosed in square brackets, as shown
- in the following example:</p>
-
- <div class="example"><p><code>
- NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
- </code></p></div>
-
- <p>To receive requests on all interfaces, you can use an argument of
- <code>*</code></p>
-
- <div class="example"><p><code>
- NameVirtualHost *
- </code></p></div>
-
- <div class="note"><h3>Argument to <code class="directive">&lt;VirtualHost&gt;</code>
- directive</h3>
- <p>Note that the argument to the <code class="directive">&lt;VirtualHost&gt;</code> directive must
- exactly match the argument to the <code class="directive">NameVirtualHost</code> directive.</p>
-
- <div class="example"><p><code>
- NameVirtualHost 1.2.3.4<br />
- &lt;VirtualHost 1.2.3.4&gt;<br />
- # ...<br />
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../vhosts/">Virtual Hosts
-documentation</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Options" id="Options">Options</a> <a name="options" id="options">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures what features are available in a particular
-directory</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Options All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">Options</code> directive controls which
- server features are available in a particular directory.</p>
-
- <p><var>option</var> can be set to <code>None</code>, in which
- case none of the extra features are enabled, or one or more of
- the following:</p>
-
- <dl>
- <dt><code>All</code></dt>
-
- <dd>All options except for <code>MultiViews</code>. This is the default
- setting.</dd>
-
- <dt><code>ExecCGI</code></dt>
-
- <dd>
- Execution of CGI scripts using <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>
- is permitted.</dd>
-
- <dt><code>FollowSymLinks</code></dt>
-
- <dd>
-
- The server will follow symbolic links in this directory.
- <div class="note">
- <p>Even though the server follows the symlink it does <em>not</em>
- change the pathname used to match against <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> sections.</p>
- <p>Note also, that this option <strong>gets ignored</strong> if set
- inside a <code class="directive"><a href="#location">&lt;Location&gt;</a></code>
- section.</p>
- </div></dd>
-
- <dt><code>Includes</code></dt>
-
- <dd>
- Server-side includes provided by <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- are permitted.</dd>
-
- <dt><code>IncludesNOEXEC</code></dt>
-
- <dd>
-
- Server-side includes are permitted, but the <code>#exec
- cmd</code> and <code>#exec cgi</code> are disabled. It is still
- possible to <code>#include virtual</code> CGI scripts from
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>ed
- directories.</dd>
-
- <dt><code>Indexes</code></dt>
-
- <dd>
- If a URL which maps to a directory is requested, and there
- is no <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
- (<em>e.g.</em>, <code>index.html</code>) in that directory, then
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> will return a formatted listing
- of the directory.</dd>
-
- <dt><code>MultiViews</code></dt>
-
- <dd>
- <a href="../content-negotiation.html">Content negotiated</a>
- "MultiViews" are allowed using
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>.</dd>
-
- <dt><code>SymLinksIfOwnerMatch</code></dt>
-
- <dd>The server will only follow symbolic links for which the
- target file or directory is owned by the same user id as the
- link.
-
- <div class="note"><h3>Note</h3> This option gets ignored if
- set inside a <code class="directive"><a href="#location">&lt;Location&gt;</a></code> section.</div>
- </dd>
- </dl>
-
- <p>Normally, if multiple <code class="directive">Options</code> could
- apply to a directory, then the most specific one is used and
- others are ignored; the options are not merged. (See <a href="../sections.html#mergin">how sections are merged</a>.)
- However if <em>all</em> the options on the
- <code class="directive">Options</code> directive are preceded by a
- <code>+</code> or <code>-</code> symbol, the options are
- merged. Any options preceded by a <code>+</code> are added to the
- options currently in force, and any options preceded by a
- <code>-</code> are removed from the options currently in
- force. </p>
-
- <p>For example, without any <code>+</code> and <code>-</code> symbols:</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <span class="indent">
- Options Includes<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>then only <code>Includes</code> will be set for the
- <code>/web/docs/spec</code> directory. However if the second
- <code class="directive">Options</code> directive uses the <code>+</code> and
- <code>-</code> symbols:</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <span class="indent">
- Options +Includes -Indexes<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>then the options <code>FollowSymLinks</code> and
- <code>Includes</code> are set for the <code>/web/docs/spec</code>
- directory.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Using <code>-IncludesNOEXEC</code> or
- <code>-Includes</code> disables server-side includes completely
- regardless of the previous setting.</p>
- </div>
-
- <p>The default in the absence of any other settings is
- <code>All</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Require" id="Require">Require</a> <a name="require" id="require">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Selects which authenticated users can access
-a resource</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Require <var>entity-name</var> [<var>entity-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive selects which authenticated users can access
- a directory. The allowed syntaxes are:</p>
-
- <dl>
- <dt><code>Require user <var>userid</var> [<var>userid</var>]
- ...</code></dt>
- <dd>Only the named users can access the resource.</dd>
-
- <dt><code>Require group <var>group-name</var> [<var>group-name</var>]
- ...</code></dt>
- <dd>Only users in the named groups can access the resource.</dd>
-
- <dt><code>Require valid-user</code></dt>
- <dd>All valid users can access the resource.</dd>
- </dl>
-
- <p><code class="directive">Require</code> must be accompanied by
- <code class="directive"><a href="#authname">AuthName</a></code> and <code class="directive"><a href="#authtype">AuthType</a></code> directives, and directives such
- as <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- and <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> (to
- define users and groups) in order to work correctly. Example:</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Restricted Directory"<br />
- AuthUserFile /web/users<br />
- AuthGroupFile /web/groups<br />
- Require group admin
- </code></p></div>
-
- <p>Access controls which are applied in this way are effective for
- <strong>all</strong> methods. <strong>This is what is normally
- desired.</strong> If you wish to apply access controls only to
- specific methods, while leaving other methods unprotected, then
- place the <code class="directive">Require</code> statement into a
- <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>
- section.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#satisfy">Satisfy</a></code></li>
-<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitCPU" id="RLimitCPU">RLimitCPU</a> <a name="rlimitcpu" id="rlimitcpu">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limits the CPU consumption of processes launched
-by Apache children</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Unset; uses operating system defaults</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>Takes 1 or 2 parameters. The first parameter sets the soft
- resource limit for all processes and the second parameter sets
- the maximum resource limit. Either parameter can be a number,
- or <code>max</code> to indicate to the server that the limit should
- be set to the maximum allowed by the operating system
- configuration. Raising the maximum resource limit requires that
- the server is running as <code>root</code>, or in the initial startup
- phase.</p>
-
- <p>This applies to processes forked off from Apache children
- servicing requests, not the Apache children themselves. This
- includes CGI scripts and SSI exec commands, but not any
- processes forked off from the Apache parent such as piped
- logs.</p>
-
- <p>CPU resource limits are expressed in seconds per
- process.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitmem">RLimitMEM</a></code></li>
-<li><code class="directive"><a href="#rlimitnproc">RLimitNPROC</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitMEM" id="RLimitMEM">RLimitMEM</a> <a name="rlimitmem" id="rlimitmem">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limits the memory consumption of processes launched
-by Apache children</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Unset; uses operating system defaults</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>Takes 1 or 2 parameters. The first parameter sets the soft
- resource limit for all processes and the second parameter sets
- the maximum resource limit. Either parameter can be a number,
- or <code>max</code> to indicate to the server that the limit should
- be set to the maximum allowed by the operating system
- configuration. Raising the maximum resource limit requires that
- the server is running as <code>root</code>, or in the initial startup
- phase.</p>
-
- <p>This applies to processes forked off from Apache children
- servicing requests, not the Apache children themselves. This
- includes CGI scripts and SSI exec commands, but not any
- processes forked off from the Apache parent such as piped
- logs.</p>
-
- <p>Memory resource limits are expressed in bytes per
- process.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitcpu">RLimitCPU</a></code></li>
-<li><code class="directive"><a href="#rlimitnproc">RLimitNPROC</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitNPROC" id="RLimitNPROC">RLimitNPROC</a> <a name="rlimitnproc" id="rlimitnproc">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limits the number of processes that can be launched by
-processes launched by Apache children</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RLimitNPROC <var>number</var>|max [<var>number</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Unset; uses operating system defaults</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>Takes 1 or 2 parameters. The first parameter sets the soft
- resource limit for all processes and the second parameter sets
- the maximum resource limit. Either parameter can be a number,
- or <code>max</code> to indicate to the server that the limit
- should be set to the maximum allowed by the operating system
- configuration. Raising the maximum resource limit requires that
- the server is running as <code>root</code>, or in the initial startup
- phase.</p>
-
- <p>This applies to processes forked off from Apache children
- servicing requests, not the Apache children themselves. This
- includes CGI scripts and SSI exec commands, but not any
- processes forked off from the Apache parent such as piped
- logs.</p>
-
- <p>Process limits control the number of processes per user.</p>
-
- <div class="note"><h3>Note</h3>
- <p>If CGI processes are <strong>not</strong> running
- under user ids other than the web server user id, this directive
- will limit the number of processes that the server itself can
- create. Evidence of this situation will be indicated by
- <strong><code>cannot fork</code></strong> messages in the
- <code>error_log</code>.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitmem">RLimitMEM</a></code></li>
-<li><code class="directive"><a href="#rlimitcpu">RLimitCPU</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Satisfy" id="Satisfy">Satisfy</a> <a name="satisfy" id="satisfy">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Interaction between host-level access control and
-user authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Satisfy Any|All</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Satisfy All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>Access policy if both <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> and <code class="directive"><a href="#require">Require</a></code> used. The parameter can be
- either <code>All</code> or <code>Any</code>. This directive is only
- useful if access to a particular area is being restricted by both
- username/password <em>and</em> client host address. In this case
- the default behavior (<code>All</code>) is to require that the client
- passes the address access restriction <em>and</em> enters a valid
- username and password. With the <code>Any</code> option the client will be
- granted access if they either pass the host restriction or enter a
- valid username and password. This can be used to password restrict
- an area, but to let clients from particular addresses in without
- prompting for a password.</p>
-
- <p>For example, if you wanted to let people on your network have
- unrestricted access to a portion of your website, but require that
- people outside of your network provide a password, you could use a
- configuration similar to the following:</p>
-
- <div class="example"><p><code>
- Require valid-user<br />
- Allow from 192.168.1<br />
- Satisfy Any
- </code></p></div>
-
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li>
-<li><code class="directive"><a href="#require">Require</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptInterpreterSource" id="ScriptInterpreterSource">ScriptInterpreterSource</a> <a name="scriptinterpretersource" id="scriptinterpretersource">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptInterpreterSource Registry|Registry-Strict|Script</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptInterpreterSource Script</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Win32 only;
-option <code>Registry-Strict</code> is available in Apache 2.0 and
-later</td></tr>
-</table>
- <p>This directive is used to control how Apache finds the
- interpreter used to run CGI scripts. The default setting is
- <code>Script</code>. This causes Apache to use the interpreter pointed to
- by the shebang line (first line, starting with <code>#!</code>) in the
- script. On Win32 systems this line usually looks like:</p>
-
- <div class="example"><p><code>
- #!C:/Perl/bin/perl.exe
- </code></p></div>
-
- <p>or, if perl is in the <code>PATH</code>, simply:</p>
-
- <div class="example"><p><code>
- #!perl
- </code></p></div>
-
- <p>Setting <code>ScriptInterpreterSource Registry</code> will
- cause the Windows Registry tree <code>HKEY_CLASSES_ROOT</code> to be
- searched using the script file extension (e.g., <code>.pl</code>) as a
- search key. The command defined by the registry subkey
- <code>Shell\ExecCGI\Command</code> or, if it does not exist, by the subkey
- <code>Shell\Open\Command</code> is used to open the script file. If the
- registry keys cannot be found, Apache falls back to the behavior of the
- <code>Script</code> option.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Be careful when using <code>ScriptInterpreterSource
- Registry</code> with <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>'ed directories, because
- Apache will try to execute <strong>every</strong> file within this
- directory. The <code>Registry</code> setting may cause undesired
- program calls on files which are typically not executed. For
- example, the default open command on <code>.htm</code> files on
- most Windows systems will execute Microsoft Internet Explorer, so
- any HTTP request for an <code>.htm</code> file existing within the
- script directory would start the browser in the background on the
- server. This is a good way to crash your system within a minute or
- so.</p>
- </div>
-
- <p>The option <code>Registry-Strict</code> which is new in Apache
- 2.0 does the same thing as <code>Registry</code> but uses only the
- subkey <code>Shell\ExecCGI\Command</code>. The
- <code>ExecCGI</code> key is not a common one. It must be
- configured manually in the windows registry and hence prevents
- accidental program calls on your system.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerAdmin" id="ServerAdmin">ServerAdmin</a> <a name="serveradmin" id="serveradmin">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Email address that the server includes in error
-messages sent to the client</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerAdmin <var>email-address</var>|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">ServerAdmin</code> sets the contact address
- that the server includes in any error messages it returns to the
- client. If the <code>httpd</code> doesn't recognize the supplied argument
- as an URL, it
- assumes, that it's an <var>email-address</var> and prepends it with
- <code>mailto:</code> in hyperlink targets. However, it's recommended to
- actually use an email address, since there are a lot of CGI scripts that
- make that assumption. If you want to use an URL, it should point to another
- server under your control. Otherwise users may not be able to contact you in
- case of errors.</p>
-
- <p>It may be worth setting up a dedicated address for this, e.g.</p>
-
- <div class="example"><p><code>
- ServerAdmin www-admin@foo.example.com
- </code></p></div>
- <p>as users do not always mention that they are talking about the
- server!</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerAlias" id="ServerAlias">ServerAlias</a> <a name="serveralias" id="serveralias">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate names for a host used when matching requests
-to name-virtual hosts</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerAlias <var>hostname</var> [<var>hostname</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">ServerAlias</code> directive sets the
- alternate names for a host, for use with <a href="../vhosts/name-based.html">name-based virtual hosts</a>.</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost *&gt;<br />
- ServerName server.domain.com<br />
- ServerAlias server server2.domain.com server2<br />
- # ...<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../vhosts/">Apache Virtual Host documentation</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerName" id="ServerName">ServerName</a> <a name="servername" id="servername">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Hostname and port that the server uses to identify
-itself</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>In version 2.0, this
- directive supersedes the functionality of the <code class="directive">Port</code>
- directive from version 1.3.</td></tr>
-</table>
- <p>The <code class="directive">ServerName</code> directive sets the hostname and
- port that the server uses to identify itself. This is used when
- creating redirection URLs. For example, if the name of the
- machine hosting the web server is <code>simple.example.com</code>,
- but the machine also has the DNS alias <code>www.example.com</code>
- and you wish the web server to be so identified, the following
- directive should be used:</p>
-
- <div class="example"><p><code>
- ServerName www.example.com:80
- </code></p></div>
-
- <p>If no <code class="directive">ServerName</code> is specified, then the
- server attempts to deduce the hostname by performing a reverse
- lookup on the IP address. If no port is specified in the
- <code class="directive">ServerName</code>, then the server will use the port
- from the incoming
- request. For optimal reliability and predictability, you should
- specify an explicit hostname and port using the
- <code class="directive">ServerName</code> directive.</p>
-
- <p>If you are using <a href="../vhosts/name-based.html">name-based virtual hosts</a>,
- the <code class="directive">ServerName</code> inside a
- <code class="directive"><a href="#virtualhost">&lt;VirtualHost&gt;</a></code>
- section specifies what hostname must appear in the request's
- <code>Host:</code> header to match this virtual host.</p>
-
- <p>See the description of the
- <code class="directive"><a href="#usecanonicalname">UseCanonicalName</a></code> directive for
- settings which determine whether self-referential URL's (e.g., by the
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> module) will refer to the
- specified port, or to the port number given in the client's request.
- </p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../dns-caveats.html">Issues Regarding DNS and
- Apache</a></li>
-<li><a href="../vhosts/">Apache virtual host
- documentation</a></li>
-<li><code class="directive"><a href="#usecanonicalname">UseCanonicalName</a></code></li>
-<li><code class="directive"><a href="#namevirtualhost">NameVirtualHost</a></code></li>
-<li><code class="directive"><a href="#serveralias">ServerAlias</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerPath" id="ServerPath">ServerPath</a> <a name="serverpath" id="serverpath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Legacy URL pathname for a name-based virtual host that
-is accessed by an incompatible browser</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerPath <var>URL-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">ServerPath</code> directive sets the legacy
- URL pathname for a host, for use with <a href="../vhosts/">name-based virtual hosts</a>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../vhosts/">Apache Virtual Host documentation</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerRoot" id="ServerRoot">ServerRoot</a> <a name="serverroot" id="serverroot">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Base directory for the server installation</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerRoot <var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ServerRoot /usr/local/apache</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">ServerRoot</code> directive sets the
- directory in which the server lives. Typically it will contain the
- subdirectories <code>conf/</code> and <code>logs/</code>. Relative
- paths for other configuration files are taken as relative to this
- directory.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ServerRoot /home/httpd
- </code></p></div>
-
-
-<h3>See also</h3>
-<ul>
-<li><a href="../invoking.html">the <code>-d</code>
- option to <code>httpd</code></a></li>
-<li><a href="../misc/security_tips.html#serverroot">the
- security tips</a> for information on how to properly set
- permissions on the <code class="directive">ServerRoot</code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerSignature" id="ServerSignature">ServerSignature</a> <a name="serversignature" id="serversignature">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the footer on server-generated documents</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerSignature On|Off|EMail</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ServerSignature Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">ServerSignature</code> directive allows the
- configuration of a trailing footer line under server-generated
- documents (error messages, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> ftp directory
- listings, <code class="module"><a href="../mod/mod_info.html">mod_info</a></code> output, ...). The reason why you
- would want to enable such a footer line is that in a chain of proxies,
- the user often has no possibility to tell which of the chained servers
- actually produced a returned error message.</p>
-
- <p>The <code>Off</code>
- setting, which is the default, suppresses the footer line (and is
- therefore compatible with the behavior of Apache-1.2 and
- below). The <code>On</code> setting simply adds a line with the
- server version number and <code class="directive"><a href="#servername">ServerName</a></code> of the serving virtual host,
- and the <code>EMail</code> setting additionally creates a
- "mailto:" reference to the <code class="directive"><a href="#serveradmin">ServerAdmin</a></code> of the referenced
- document.</p>
-
- <p>After version 2.0.44, the details of the server version number
- presented are controlled by the <code class="directive"><a href="#servertokens">ServerTokens</a></code> directive.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#servertokens">ServerTokens</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerTokens" id="ServerTokens">ServerTokens</a> <a name="servertokens" id="servertokens">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the Server HTTP response
-header</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ServerTokens Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>This directive controls whether <code>Server</code> response
- header field which is sent back to clients includes a
- description of the generic OS-type of the server as well as
- information about compiled-in modules.</p>
-
- <dl>
- <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache</code></dd>
-
- <dt><code>ServerTokens Major</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2</code></dd>
-
- <dt><code>ServerTokens Minor</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2.0</code></dd>
-
- <dt><code>ServerTokens Min[imal]</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2.0.41</code></dd>
-
- <dt><code>ServerTokens OS</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.0.41
- (Unix)</code></dd>
-
- <dt><code>ServerTokens Full</code> (or not specified)</dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.0.41
- (Unix) PHP/4.2.2 MyMod/1.2</code></dd>
- </dl>
-
- <p>This setting applies to the entire server, and cannot be
- enabled or disabled on a virtualhost-by-virtualhost basis.</p>
-
- <p>After version 2.0.44, this directive also controls the
- information presented by the <code class="directive"><a href="#serversignature">ServerSignature</a></code> directive.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#serversignature">ServerSignature</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetHandler" id="SetHandler">SetHandler</a> <a name="sethandler" id="sethandler">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Forces all matching files to be processed by a
-handler</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetHandler <var>handler-name</var>|None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Moved into the core in Apache 2.0</td></tr>
-</table>
- <p>When placed into an <code>.htaccess</code> file or a
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> or
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code>
- section, this directive forces all matching files to be parsed
- through the <a href="../handler.html">handler</a> given by
- <var>handler-name</var>. For example, if you had a directory you
- wanted to be parsed entirely as imagemap rule files, regardless
- of extension, you might put the following into an
- <code>.htaccess</code> file in that directory:</p>
-
- <div class="example"><p><code>
- SetHandler imap-file
- </code></p></div>
-
- <p>Another example: if you wanted to have the server display a
- status report whenever a URL of
- <code>http://servername/status</code> was called, you might put
- the following into <code>httpd.conf</code>:</p>
-
- <div class="example"><p><code>
- &lt;Location /status&gt;<br />
- <span class="indent">
- SetHandler server-status<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>You can override an earlier defined <code class="directive">SetHandler</code>
- directive by using the value <code>None</code>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetInputFilter" id="SetInputFilter">SetInputFilter</a> <a name="setinputfilter" id="setinputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the filters that will process client requests and POST
-input</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetInputFilter <var>filter</var>[;<var>filter</var>...]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">SetInputFilter</code> directive sets the
- filter or filters which will process client requests and POST
- input when they are received by the server. This is in addition to
- any filters defined elsewhere, including the
- <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>
- directive.</p>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../filter.html">Filters</a> documentation</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetOutputFilter" id="SetOutputFilter">SetOutputFilter</a> <a name="setoutputfilter" id="setoutputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the filters that will process responses from the
-server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetOutputFilter <var>filter</var>[;<var>filter</var>...]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">SetOutputFilter</code> directive sets the filters
- which will process responses from the server before they are
- sent to the client. This is in addition to any filters defined
- elsewhere, including the
- <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>
- directive.</p>
-
- <p>For example, the following configuration will process all files
- in the <code>/www/data/</code> directory for server-side
- includes.</p>
-
- <div class="example"><p><code>
- &lt;Directory /www/data/&gt;<br />
- <span class="indent">
- SetOutputFilter INCLUDES<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../filter.html">Filters</a> documentation</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TimeOut" id="TimeOut">TimeOut</a> <a name="timeout" id="timeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Amount of time the server will wait for
-certain events before failing a request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TimeOut <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>TimeOut 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>The <code class="directive">TimeOut</code> directive currently defines
- the amount of time Apache will wait for three things:</p>
-
- <ol>
- <li>The total amount of time it takes to receive a GET
- request.</li>
-
- <li>The amount of time between receipt of TCP packets on a
- POST or PUT request.</li>
-
- <li>The amount of time between ACKs on transmissions of TCP
- packets in responses.</li>
- </ol>
-
- <p>We plan on making these separately configurable at some point
- down the road. The timer used to default to 1200 before 1.2,
- but has been lowered to 300 which is still far more than
- necessary in most situations. It is not set any lower by
- default because there may still be odd places in the code where
- the timer is not reset when a packet is sent. </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UseCanonicalName" id="UseCanonicalName">UseCanonicalName</a> <a name="usecanonicalname" id="usecanonicalname">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures how the server determines its own name and
-port</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UseCanonicalName On|Off|DNS</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>UseCanonicalName On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p>In many situations Apache must construct a <em>self-referential</em>
- URL -- that is, a URL that refers back to the same server. With
- <code>UseCanonicalName On</code> Apache will use the hostname and port
- specified in the <code class="directive"><a href="#servername">ServerName</a></code>
- directive to construct the canonical name for the server. This name
- is used in all self-referential URLs, and for the values of
- <code>SERVER_NAME</code> and <code>SERVER_PORT</code> in CGIs.</p>
-
- <p>With <code>UseCanonicalName Off</code> Apache will form
- self-referential URLs using the hostname and port supplied by
- the client if any are supplied (otherwise it will use the
- canonical name, as defined above). These values are the same
- that are used to implement <a href="../vhosts/name-based.html">name based virtual hosts</a>,
- and are available with the same clients. The CGI variables
- <code>SERVER_NAME</code> and <code>SERVER_PORT</code> will be
- constructed from the client supplied values as well.</p>
-
- <p>An example where this may be useful is on an intranet server
- where you have users connecting to the machine using short
- names such as <code>www</code>. You'll notice that if the users
- type a shortname, and a URL which is a directory, such as
- <code>http://www/splat</code>, <em>without the trailing
- slash</em> then Apache will redirect them to
- <code>http://www.domain.com/splat/</code>. If you have
- authentication enabled, this will cause the user to have to
- authenticate twice (once for <code>www</code> and once again
- for <code>www.domain.com</code> -- see <a href="http://httpd.apache.org/docs/misc/FAQ.html#prompted-twice">the
- FAQ on this subject for more information</a>). But if
- <code class="directive">UseCanonicalName</code> is set <code>Off</code>, then
- Apache will redirect to <code>http://www/splat/</code>.</p>
-
- <p>There is a third option, <code>UseCanonicalName DNS</code>,
- which is intended for use with mass IP-based virtual hosting to
- support ancient clients that do not provide a
- <code>Host:</code> header. With this option Apache does a
- reverse DNS lookup on the server IP address that the client
- connected to in order to work out self-referential URLs.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>If CGIs make assumptions about the values of <code>SERVER_NAME</code>
- they may be broken by this option. The client is essentially free
- to give whatever value they want as a hostname. But if the CGI is
- only using <code>SERVER_NAME</code> to construct self-referential URLs
- then it should be just fine.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#servername">ServerName</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualHost" id="VirtualHost">&lt;VirtualHost&gt;</a> <a name="virtualhost" id="virtualhost">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contains directives that apply only to a specific
-hostname or IP address</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;VirtualHost&gt;</code> and
- <code>&lt;/VirtualHost&gt;</code> are used to enclose a group of
- directives that will apply only to a particular virtual host. Any
- directive that is allowed in a virtual host context may be
- used. When the server receives a request for a document on a
- particular virtual host, it uses the configuration directives
- enclosed in the <code class="directive">&lt;VirtualHost&gt;</code>
- section. <var>Addr</var> can be:</p>
-
- <ul>
- <li>The IP address of the virtual host;</li>
-
- <li>A fully qualified domain name for the IP address of the
- virtual host;</li>
-
- <li>The character <code>*</code>, which is used only in combination with
- <code>NameVirtualHost *</code> to match all IP addresses; or</li>
-
- <li>The string <code>_default_</code>, which is used only
- with IP virtual hosting to catch unmatched IP addresses.</li>
- </ul>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;VirtualHost 10.1.2.3&gt;<br />
- <span class="indent">
- ServerAdmin webmaster@host.foo.com<br />
- DocumentRoot /www/docs/host.foo.com<br />
- ServerName host.foo.com<br />
- ErrorLog logs/host.foo.com-error_log<br />
- TransferLog logs/host.foo.com-access_log<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
-
- <p>IPv6 addresses must be specified in square brackets because
- the optional port number could not be determined otherwise. An
- IPv6 example is shown below:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
- <span class="indent">
- ServerAdmin webmaster@host.example.com<br />
- DocumentRoot /www/docs/host.example.com<br />
- ServerName host.example.com<br />
- ErrorLog logs/host.example.com-error_log<br />
- TransferLog logs/host.example.com-access_log<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Each Virtual Host must correspond to a different IP address,
- different port number or a different host name for the server,
- in the former case the server machine must be configured to
- accept IP packets for multiple addresses. (If the machine does
- not have multiple network interfaces, then this can be
- accomplished with the <code>ifconfig alias</code> command -- if
- your OS supports it).</p>
-
- <div class="note"><h3>Note</h3>
- <p>The use of <code class="directive">&lt;VirtualHost&gt;</code> does
- <strong>not</strong> affect what addresses Apache listens on. You
- may need to ensure that Apache is listening on the correct addresses
- using <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>.</p>
- </div>
-
- <p>When using IP-based virtual hosting, the special name
- <code>_default_</code> can be specified in
- which case this virtual host will match any IP address that is
- not explicitly listed in another virtual host. In the absence
- of any <code>_default_</code> virtual host the "main" server config,
- consisting of all those definitions outside any VirtualHost
- section, is used when no IP-match occurs. (But note that any IP
- address that matches a <code class="directive"><a href="#namevirtualhost">NameVirtualHost</a></code> directive will use neither
- the "main" server config nor the <code>_default_</code> virtual host.
- See the <a href="../vhosts/name-based.html">name-based virtual hosting</a>
- documentation for further details.)</p>
-
- <p>You can specify a <code>:port</code> to change the port that is
- matched. If unspecified then it defaults to the same port as the
- most recent <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- statement of the main server. You may also specify <code>:*</code>
- to match all ports on that address. (This is recommended when used
- with <code>_default_</code>.)</p>
-
- <div class="warning"><h3>Security</h3>
- <p>See the <a href="../misc/security_tips.html">security tips</a>
- document for details on why your security could be compromised if the
- directory where log files are stored is writable by anyone other
- than the user that starts the server.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../vhosts/">Apache Virtual Host documentation</a></li>
-<li><a href="../dns-caveats.html">Issues Regarding DNS and
- Apache</a></li>
-<li><a href="../bind.html">Setting
- which addresses and ports Apache uses</a></li>
-<li><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/core.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/core.html.ja.euc-jp b/docs/manual/mod/core.html.ja.euc-jp
deleted file mode 100644
index 782037781e..0000000000
--- a/docs/manual/mod/core.html.ja.euc-jp
+++ /dev/null
@@ -1,3173 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>core - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥³¥¢µ¡Ç½</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/core.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/core.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¾ï¤Ë»ÈÍѲÄǽ¤Ê Apache HTTP ¥µ¡¼¥Ð¤Î¥³¥¢µ¡Ç½</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr></table>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#acceptpathinfo">AcceptPathInfo</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#accessfilename">AccessFileName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#adddefaultcharset">AddDefaultCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#allowoverride">AllowOverride</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authname">AuthName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authtype">AuthType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgimapextension">CGIMapExtension</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#contentdigest">ContentDigest</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaulttype">DefaultType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directory">&lt;Directory&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enablemmap">EnableMMAP</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enablesendfile">EnableSendfile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errordocument">ErrorDocument</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#errorlog">ErrorLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#fileetag">FileETag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#files">&lt;Files&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#forcetype">ForceType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#hostnamelookups">HostnameLookups</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ifmodule">&lt;IfModule&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#include">Include</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#keepalive">KeepAlive</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limit">&lt;Limit&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestbody">LimitRequestBody</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestfields">LimitRequestFields</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitrequestline">LimitRequestLine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#location">&lt;Location&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#loglevel">LogLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#namevirtualhost">NameVirtualHost</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#require">Require</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitcpu">RLimitCPU</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitmem">RLimitMEM</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rlimitnproc">RLimitNPROC</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#satisfy">Satisfy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serveradmin">ServerAdmin</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serveralias">ServerAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#servername">ServerName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverpath">ServerPath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">ServerRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serversignature">ServerSignature</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#servertokens">ServerTokens</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sethandler">SetHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setinputfilter">SetInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setoutputfilter">SetOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#timeout">TimeOut</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#usecanonicalname">UseCanonicalName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualhost">&lt;VirtualHost&gt;</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AcceptPathInfo" id="AcceptPathInfo">AcceptPathInfo</a> <a name="acceptpathinfo" id="acceptpathinfo">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¸å¤Ë³¤¯¥Ñ¥¹Ì¾¾ðÊó¤ò¼õ¤±ÉÕ¤±¤ë¥ê¥½¡¼¥¹¤Î»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AcceptPathInfo On|Off|Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AcceptPathInfo Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0.30 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¼ÂºÝ¤Î¥Õ¥¡¥¤¥ë̾ (¤â¤·¤¯¤Ï¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î
- ¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë) ¤Î¸å¤Ë³¤¯¥Ñ¥¹Ì¾¾ðÊ󤬤¢¤ë¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤ë¤«
- µñÈݤ¹¤ë¤«¤òÀ©¸æ¤·¤Þ¤¹¡£Â³¤­¤Î¥Ñ¥¹Ì¾¾ðÊó¤Ï¥¹¥¯¥ê¥×¥È¤Ë¤Ï <code>PATH_INFO</code>
- ´Ä¶­ÊÑ¿ô¤È¤·¤ÆÍøÍѲÄǽ¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢<code>/test/</code> ¤¬¡¢<code>here.html</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë
- °ì¤Ä¤Î¤ß¤¬¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò»Ø¤·¤Æ¤¤¤ë¤È¤·¤Þ¤¹¡£¤½¤¦¤¹¤ë¤È¡¢
- <code>/test/here.html/more</code> ¤È <code>/test/nothere.html/more</code>
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ÏξÊý¤È¤â <code>/more</code> ¤ò <code>PATH_INFO</code> ¤È¤·¤Þ¤¹¡£</p>
-
- <p><code class="directive">AcceptPathInfo</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë»ØÄê²Äǽ¤Ê
- »°¤Ä¤Î°ú¿ô¤Ï:</p>
-
- <dl>
- <dt><code>Off</code></dt><dd>¥ê¥¯¥¨¥¹¥È¤Ï¸ºß¤¹¤ë¥Ñ¥¹¤Ë¤½¤Î¤Þ¤Þ
- ¥Þ¥Ã¥×¤µ¤ì¤ë¾ì¹ç¤Ë¤Î¤ß¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¾å¤ÎÎã¤Î
- <code>/test/here.html/more</code> ¤Î¤è¤¦¤Ë¡¢ËÜÅö¤Î¥Õ¥¡¥¤¥ë̾¤Î
- ¸å¤Ë¥Ñ¥¹Ì¾¾ðÊó¤¬Â³¤¯¥ê¥¯¥¨¥¹¥È¤Ë¤Ï 404 NOT FOUND ¥¨¥é¡¼¤¬ÊÖ¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>On</code></dt><dd>Á°¤ÎÊý¤Î¥Ñ¥¹¤¬Â¸ºß¤¹¤ë¥Õ¥¡¥¤¥ë¤Ë¥Þ¥Ã¥×¤¹¤ë¾ì¹ç¤Ï
- ¥ê¥¯¥¨¥¹¥È¤¬¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤¹¡£¾å¤ÎÎã¤Î <code>/test/here.html/more</code>
- ¤Ï <code>/test/here.html</code> ¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¤Ë¥Þ¥Ã¥×¤¹¤ì¤Ð
- ¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>Default</code></dt><dd>³¤­¤Î¥Ñ¥¹Ì¾¾ðÊó¤Î°·¤¤¤Ï¥ê¥¯¥¨¥¹¥È¤Î
- <a href="../handler.html">¥Ï¥ó¥É¥é</a>¤Ç·è¤Þ¤ê¤Þ¤¹¡£
- ÉáÄ̤Υե¡¥¤¥ë¤Î¤¿¤á¤Î¥³¥¢¥Ï¥ó¥É¥é¤Î¥Ç¥Õ¥©¥ë¥È¤Ï <code>PATH_INFO</code> ¤òµñÈݤ·¤Þ¤¹¡£
- <a href="mod_cgi.html">cgi-script</a> ¤ä <a href="mod_isapi.html">isapi-isa</a> ¤Î¤è¤¦¤Ë¥¹¥¯¥ê¥×¥È¤ò°·¤¦¥Ï¥ó¥É¥é¤Ï
- °ìÈÌŪ¤Ë¥Ç¥Õ¥©¥ë¥È¤Ç <code>PATH_INFO</code> ¤ò¼õ¤±ÉÕ¤±¤Þ¤¹¡£</dd>
- </dl>
-
- <p><code>AcceptPathInfo</code> ¤Î¼ç¤ÊÌÜŪ¤Ï¥Ï¥ó¥É¥é¤Î <code>PATH_INFO</code> ¤ò
- ¼õ¤±ÉÕ¤±¤ë¤«µñÈݤ¹¤ë¤«¤ÎÁªÂò¤ò¾å½ñ¤­¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¤¹¡£
- Î㤨¤Ð¡¢¤³¤ì¤ÏÎ㤨¤Ð <a href="mod_include.html">INCLUDES</a> ¤Î¤è¤¦¤Ê
- <a href="../filter.html">¥Õ¥£¥ë¥¿</a>¤ò»È¤Ã¤Æ <code>PATH_INFO</code> ¤Ë
- ´ð¤Å¤¤¤Æ¥³¥ó¥Æ¥ó¥Ä¤òÀ¸À®¤·¤Æ¤¤¤ë¤È¤­¤ËɬÍפˤʤê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Files "mypaths.shtml"&gt;<br />
- <span class="indent">
- Options +Includes<br />
- SetOutputFilter INCLUDES<br />
- AcceptPathInfo On<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AccessFileName" id="AccessFileName">AccessFileName</a> <a name="accessfilename" id="accessfilename">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ʬ»¶ÀßÄê¥Õ¥¡¥¤¥ë¤Î̾Á°</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AccessFileName <var>filename</var> [<var>filename</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AccessFileName .htaccess</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤¹¤ë¤È¤­¡¢¥µ¡¼¥Ð¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ÂФ·¤Æʬ»¶ÀßÄê¥Õ¥¡¥¤¥ë¤¬<a href="#allowoverride">Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ì¤Ð</a>¡¢
- ¤½¤Î¥É¥­¥å¥á¥ó¥È¤Ø¤Î
- ¥Ñ¥¹¾å¤Ë¤¢¤ëÁ´¤Æ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¡¢¤³¤³¤Ç»ØÄꤵ¤ì¤¿Ì¾Á°¤Î°ìÍ÷¤ÎÃæ¤Ç
- ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¥Õ¥¡¥¤¥ë¤ò¤½¤ì¤¾¤ìÀßÄê¥Õ¥¡¥¤¥ë¤È¤·¤ÆÆɤ߹þ¤ß¤Þ¤¹¡£Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- AccessFileName .acl
- </code></p></div>
-
- <p>¤È¤¤¤¦ÀßÄ꤬¤¢¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢
- ¥É¥­¥å¥á¥ó¥È <code>/usr/local/web/index.html</code>
- ¤òÊÖ¤¹Á°¤Ë¡¢¥µ¡¼¥Ð¤Ï <code>/.acl</code>, <code>/usr/.acl</code>,
- <code>/usr/local/.acl</code>, <code>/usr/local/web/.acl</code> ¤«¤é
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÆɤ߹þ¤ß¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride None<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#allowoverride">AllowOverride</a></code></li>
-<li><a href="../configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="../howto/htaccess.html">.htaccess ¥Õ¥¡¥¤¥ë</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddDefaultCharset" id="AddDefaultCharset">AddDefaultCharset</a> <a name="adddefaultcharset" id="adddefaultcharset">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÌÀ¼¨Åª¤Ëʸ»ú¥»¥Ã¥È¤ò»ØÄꤷ¤Æ¤¤¤Ê¤¤±þÅú¤ËÄɲ䵤ì¤ë
-¥Ç¥Õ¥©¥ë¥È¤Îʸ»ú¥»¥Ã¥È</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddDefaultCharset On|Off|<var>charset</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AddDefaultCharset Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢HTTP ¥Ø¥Ã¥À¤Ë¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¥Ñ¥é¥á¡¼¥¿¤ò
- »ý¤¿¤Ê¤¤±þÅú¤ËÄɲ䵤ì¤ëʸ»ú¥»¥Ã¥È¤Î̾Á°¤ò»ØÄꤷ¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥É¥­¥å¥á¥ó¥ÈÆâ¤Î META ¥¿¥°¤Ç»ØÄꤵ¤ì¤¿¤É¤Î¤è¤¦¤Êʸ»ú¥»¥Ã¥È
- ¤â̵¸ú¤Ë¤·¤Þ¤¹¡£
- <code>AddDefaultCharset Off</code> ¤È¤¤¤¦ÀßÄê¤Ë¤è¤ê¡¢¤³¤Îµ¡Ç½¤Ï̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
- <code>AddDefaultCharset On</code> ¤Ë¤¹¤ì¤Ð¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍ×µáÄ̤ê
- Apache ÆâÉô¤Î¥Ç¥Õ¥©¥ë¥Èʸ»ú¥»¥Ã¥È <code>iso-8859-1</code> ¤ËÀßÄꤷ¤Þ¤¹¡£
- ¤Þ¤¿¡¢Â¾¤Î <var>charset</var> ¤â»ØÄê¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- AddDefaultCharset utf-8
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddOutputFilterByType" id="AddOutputFilterByType">AddOutputFilterByType</a> <a name="addoutputfilterbytype" id="addoutputfilterbytype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>MIME-type ¤Ë½ÐÎÏ¥Õ¥£¥ë¥¿¤ò³ä¤êÅö¤Æ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddOutputFilterByType <var>filter</var>[;<var>filter</var>...] <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0.33 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï±þÅú¤Î MIME-type ¤Ë±þ¤¸¤Æ½ÐÎÏ<a href="../filter.html">¥Õ¥£¥ë¥¿</a>¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>¼¡¤ÎÎã¤Ï <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¤Î <code>DEFLATE</code> ¥Õ¥£¥ë¥¿¤ò
- »È¤Ã¤Æ¤¤¤Þ¤¹¡£<code>text/html</code> ¤È <code>text/plain</code> ¤Î
- ¤¹¤Ù¤Æ¤Î½ÐÎÏ (ÀÅŪ¤Ê¤â¤Î¤âưŪ¤Ê¤â¤Î¤â) ¤ò¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤ëÁ°¤Ë
- °µ½Ì¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- AddOutputFilterByType DEFLATE text/html text/plain
- </code></p></div>
-
- <p>Ê£¿ô¤Î¥Õ¥£¥ë¥¿¤Ç¥³¥ó¥Æ¥ó¥Ä¤ò½èÍý¤µ¤»¤¿¤¤¤È¤­¤Ï¡¢¤½¤ì¤¾¤ì¤Î̾Á°¤ò¥»¥ß¥³¥í¥ó¤Ç
- ʬ¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£³Æ¥Õ¥£¥ë¥¿¤ËÂФ·¤Æ
- <code class="directive">AddOutputFilterByType</code> ¤ò°ì¤Ä¤º¤Ä½ñ¤¯¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¼¡¤ÎÎã¤Ï <code>text/html</code> ¤Î¥¹¥¯¥ê¥×¥È¤Î¤¹¤Ù¤Æ¤Î½ÐÎϤò
- ¤Þ¤º <code>INCLUDES</code> ¥Õ¥£¥ë¥¿¤Ç½èÍý¤·¡¢¤µ¤é¤Ë <code>DEFLATE</code> ¥Õ¥£¥ë¥¿¤Ë¤«¤±¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Location /cgi-bin/&gt;<br />
- <span class="indent">
- Options Includes<br />
- AddOutputFilterByType INCLUDES;DEFLATE text/html<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="warning"><h3>Ãí:</h3>
- <p><code class="directive">AddOutputFilterByType</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê
- Í­¸ú¤Ë¤·¤¿¥Õ¥£¥ë¥¿¤Ï¾ì¹ç¤Ë¤è¤Ã¤Æ¤Ï¡¢ÉôʬŪ¤â¤·¤¯¤Ï´°Á´¤ËŬÍѤµ¤ì¤Ê¤¤¤³¤È¤¬
- ¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢MIME ¥¿¥¤¥×¤¬¤¬·èÄê¤Ç¤­¤Ê¤¤¤È¤­¤Ë¤Ï
- <code class="directive"><a href="#defaulttype">DefaultType</a></code> ¤ÎÀßÄ꤬Ʊ¤¸¤À¤Ã¤¿¤È¤·¤Æ¤â¡¢
- <code class="directive"><a href="#defaulttype">DefaultType</a></code> ÀßÄê¤ò»È¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
- <p>¤·¤«¤·¡¢³Î¼Â¤Ë¥Õ¥£¥ë¥¿¤¬Å¬ÍѤµ¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¤È¤­¤Ï¡¢¥ê¥½¡¼¥¹¤Ë
- ÌÀ¼¨Åª¤Ë¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ë¤ÏÎ㤨¤Ð
- <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <code class="directive"><a href="#forcetype">ForceType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹¡£
- (nph¤Ç¤Ê¤¤) CGI ¥¹¥¯¥ê¥×¥È¤Ç¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤òÀßÄꤹ¤ë¤È¤¤¤¦¤â¤Î¤Ç¤â
- Âç¾æÉפǤ¹¡£</p>
-
- <p>¥¿¥¤¥×Ëè¤Î½ÐÎÏ¥Õ¥£¥ë¥¿¤Ï¥×¥í¥­¥·¥ê¥¯¥¨¥¹¥È¤Ë¤Ï·è¤·¤ÆŬÍѤµ¤ì¤Þ¤»¤ó¡£</p>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li>
-<li><code class="directive"><a href="#setoutputfilter">SetOutputFilter</a></code></li>
-<li><a href="../filter.html">¥Õ¥£¥ë¥¿</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowEncodedSlashes" id="AllowEncodedSlashes">AllowEncodedSlashes</a> <a name="allowencodedslashes" id="allowencodedslashes">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>URL Ãæ¤ÎÉä¹æ²½¤µ¤ì¤¿¥Ñ¥¹Ê¬Î¥Ê¸»ú¤¬Àè¤ËÅÁ¤¨¤é¤ì¤ë¤Î¤òµö²Ä¤¹¤ë¤«¤É¤¦¤«¤ò
-·èÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AllowEncodedSlashes On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AllowEncodedSlashes Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0.46 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">AllowEncodedSlashes</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÉä¹æ²½¤µ¤ì¤¿
- ¥Ñ¥¹Ê¬Î¥Ê¸»ú (<code>/</code> ¤Ï <code>%2F</code>¡¢¤µ¤é¤Ë¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤Ï
- <code>\</code> ¤ËÂбþ¤¹¤ë <code>%5C</code>) ¤¬Â¸ºß¤¹¤ë URL ¤Î»ÈÍѤò
- µö²Ä¤¹¤ë¤«¤É¤¦¤«¤ò·èÄꤷ¤Þ¤¹¡£Ä̾ï¤Ï¤½¤Î¤è¤¦¤Ê URL ¤Ï 404 (Not found) ¥¨¥é¡¼
- ¤ÇµñÈݤµ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive">AllowEncodedSlashes</code> <code>On</code> ¤Ë¤è¤ë
- ¥Ñ¥¹Ê¬Î¥Ê¸»ú¤Î»ÈÍѤϡ¢<code>PATH_INFO</code> ¤È¹ç¤ï¤»¤Æ
- »È¤¦¤È¤­¤Ë°ìÈÖÌò¤ËΩ¤Á¤Þ¤¹¡£</p>
- <p>Turning <code class="directive">AllowEncodedSlashes</code> <code>On</code> is
- mostly useful when used in conjunction with <code>PATH_INFO</code>.</p>
-
- <div class="note"><h3>Ãí</h3>
- <p>Éä¹æ²½¤µ¤ì¤¿¥¹¥é¥Ã¥·¥å¤òµö²Ä¤¹¤ë¤³¤È¤Ï¡¢<em>Éü¹æ</em>¤ò¤¹¤ë¤³¤È¤ò
- °ÕÌ£<em>¤·¤Þ¤»¤ó</em>¡£<code>%2F</code> ¤ä (´Ø·¸¤¹¤ë¥·¥¹¥Æ¥à¤Ç¤Î)
- <code>%5C</code> ¤Ï¡¢Â¾¤ÎÉôʬ¤¬Éü¹æ¤µ¤ì¤¿ URL ¤ÎÃæ¤Ç¤â¤½¤Î¤Þ¤Þ¤Î·Á¼°¤Ç
- »Ä¤µ¤ì¤Þ¤¹¡£</p>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#acceptpathinfo">AcceptPathInfo</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowOverride" id="AllowOverride">AllowOverride</a> <a name="allowoverride" id="allowoverride">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>.htaccess ¤Çµö²Ä¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¼ïÎà</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AllowOverride All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¥µ¡¼¥Ð¤¬ (<code class="directive"><a href="#accessfilename">AccessFileName</a></code> ¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿)
- .htaccess ¥Õ¥¡¥¤¥ë¤ò¸«¤Ä¤±¤¿»þ¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ç
- Àë¸À¤µ¤ì¤¿¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¤è¤êÁ°¤ËÄêµÁ¤µ¤ì¤¿ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ¾å½ñ¤­¤Ç¤­¤ë¤«¤òÃΤëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="note"><h3>&lt;Directory&gt; ¥»¥¯¥·¥ç¥ó¤Ç¤Î¤ß»ÈÍѲÄǽ</h3>
- <code class="directive">AllowOverride</code> ¤ÏÀµµ¬É½¸½Ìµ¤·¤Î<code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤Ç¤Î¤ßÍ­¸ú¤Ç¡¢<code class="directive"><a href="#location">&lt;Location&gt;</a></code> ¤ä <code class="directive"><a href="#directorymatch">&lt;DirectoryMatch&gt;</a></code>
- ¤ä <code class="directive"><a href="#files">&lt;Files&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Ç¤Ï̵¸ú¤Ç¤¹¡£
- </div>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò None ¤ËÀßÄꤹ¤ë¤È¡¢<a href="#accessfilename">.htaccess</a> ¥Õ¥¡¥¤¥ë¤Ï´°Á´¤Ë
- ̵»ë¤µ¤ì¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¡¢¥µ¡¼¥Ð¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤òÆɤळ¤È¤ò
- »î¤ß¤µ¤¨¤·¤Þ¤»¤ó¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ <code>All</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ï¡¢
- <code>.htaccess</code> ¤È¤¤¤¦ <a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È</a> ¤ò»ý¤Ä
- Á´¤Æ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ÍøÍѤǤ­¤Þ¤¹¡£</p>
-
- <p><var>directive-type</var> ¤Ë¤Ï¡¢°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö·²¤Î
- ¥­¡¼¥ï¡¼¥É¤Î¤É¤ì¤«¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <dl>
- <dt>AuthConfig</dt>
-
- <dd>
-
- ǧ¾Ú¤Ë´Ø¤¹¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»ÈÍѤòµö²Ä¤¹¤ë (<code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code>,
- <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>,
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>,
- <code class="directive"><a href="#authname">AuthName</a></code>,
- <code class="directive"><a href="#authtype">AuthType</a></code>, <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>, <code class="directive"><a href="#require">Require</a></code> <em>¤Ê¤É¡£</em>)¡£</dd>
-
- <dt>FileInfo</dt>
-
- <dd>
- ¥É¥­¥å¥á¥ó¥È¥¿¥¤¥×¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»ÈÍѤòµö²Ä¤¹¤ë (<code class="directive"><a href="#defaulttype">DefaultType</a></code>, <code class="directive"><a href="#errordocument">ErrorDocument</a></code>, <code class="directive"><a href="#forcetype">ForceType</a></code>, <code class="directive"><a href="../mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>,
- <code class="directive"><a href="#sethandler">SetHandler</a></code>, <code class="directive"><a href="#setinputfilter">SetInputFilter</a></code>, <code class="directive"><a href="#setoutputfilter">SetOutputFilter</a></code>,
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤Î Add* ¤È Remove*
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö<em>¤Ê¤É¡£</em>)¡£</dd>
-
- <dt>Indexes</dt>
-
- <dd>
- ¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»ÈÍѤòµö²Ä¤¹¤ë
- (<code class="directive"><a href="../mod/mod_autoindex.html#adddescription">AddDescription</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#addicon">AddIcon</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#addiconbytype">AddIconByType</a></code>,
- <code class="directive"><a href="../mod/mod_autoindex.html#defaulticon">DefaultIcon</a></code>, <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#fancyindexing">FancyIndexing</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#headername">HeaderName</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#indexignore">IndexIgnore</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>, <code class="directive"><a href="../mod/mod_autoindex.html#readmename">ReadmeName</a></code>
- <em>¤Ê¤É¡£</em>)¡£</dd>
-
- <dt>Limit</dt>
-
- <dd>
- ¥Û¥¹¥È¤Ø¤Î¥¢¥¯¥»¥¹À©¸æ¤ò¹Ô¤¦¤¿¤á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»ÈÍѤòµö²Ä¤¹¤ë (<code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code>).</dd>
-
- <dt>Options[=<var>Option</var>,...]</dt>
-
- <dd>
- ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤ª¤±¤ëµ¡Ç½¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»ÈÍѤòµö²Ä¤¹¤ë
- (<code class="directive"><a href="#options">Options</a></code> ¤È
- <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>)¡£
- Åù¹æ¤Î¸å¤Ë¡¢¥³¥ó¥Þ¤Çʬ³ä¤µ¤ì¤¿(¶õÇò¤ÎÆþ¤Ã¤Æ¤¤¤Ê¤¤)¥ª¥×¥·¥ç¥ó¤Î¥ê¥¹¥È¤ò
- ³¤±¤ë¤³¤È¤Ç¥ª¥×¥·¥ç¥ó¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</dd>
- </dl>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig Indexes
- </code></p></div>
-
- <p>¾å¤ÎÎã¤Ç¤Ï <code>AuthConfig</code> ¤È <code>Indexes</code> ¤Î¤É¤Á¤é¤Ë¤â
- °¤µ¤Ê¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¹¤Ù¤ÆÆâÉô¥µ¡¼¥Ð¥¨¥é¡¼¤ò°ú¤­µ¯¤³¤·¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#accessfilename">AccessFileName</a></code></li>
-<li><a href="../configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="../howto/htaccess.html">.htaccess ¥Õ¥¡¥¤¥ë</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthName" id="AuthName">AuthName</a> <a name="authname" id="authname">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP ǧ¾Ú¤Îǧ²ÄÎΰè (ÌõÃí: realm)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthName <var>auth-domain</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ¹¤ëǧ²ÄÎΰè (ÌõÃí: realm)
- ¤Î̾Á°¤ò»ØÄꤷ¤Þ¤¹¡£
- ǧ²ÄÎΰè¤Ï¡¢ÍøÍѼԤ¬¤É¤Î¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤òÁ÷¿®¤¹¤ì¤Ð¤è¤¤¤Î¤«¤ò
- ¥¯¥é¥¤¥¢¥ó¥È¤Ë¶µ¤¨¤ë¤¿¤á¤ËÍøÍѤ·¤Þ¤¹¡£
- <code class="directive">AuthName</code> ¤Ï°ì¤Ä¤Î°ú¿ô¤ò¤È¤ê¡¢
- ¥¹¥Ú¡¼¥¹¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¤Ë¤Ï¡¢
- °úÍÑÉä¤Ç³ç¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="directive"><a href="#authtype">AuthType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <code class="directive"><a href="#require">Require</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¡¢
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> ¤ä
- <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> ¤Ê¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- °ì½ï¤ËÍøÍѤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- AuthName "Top Secret"
- </code></p></div>
-
- <p>¤³¤³¤Ç <code>AuthName</code> ¤Ë»ØÄꤷ¤¿Ê¸»úÎ󤬡¢
- ÂçÉôʬ¤Î¥Ö¥é¥¦¥¶¤Î¥Ñ¥¹¥ï¡¼¥É¥À¥¤¥¢¥í¥°¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../howto/auth.html">ǧ¾Ú¡¢¾µÇ§¡¢¥¢¥¯¥»¥¹À©¸æ</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthType" id="AuthType">AuthType</a> <a name="authtype" id="authtype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥æ¡¼¥¶Ç§¾Ú¤Î¼ïÎà</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthType Basic|Digest</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÂоݥǥ£¥ì¥¯¥È¥ê¤ÇÍøÍѤ¹¤ë¥æ¡¼¥¶¡¼Ç§¾Ú¤Î¼ïÎà¤òÁª¤Ó¤Þ¤¹¡£
- ¤¿¤À¡¢¸½ºß¤Î¤È¤³¤í¤Ï <code>Basic</code> ¤È <code>Digest</code> ¤·¤«
- ¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
-
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="#authname">AuthName</a></code>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <code class="directive"><a href="#require">Require</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¡¢
- <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> ¤ä <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> ¤Ê¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- °ì½ï¤ËÍøÍѤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../howto/auth.html">ǧ¾Ú¡¢¾µÇ§¡¢¥¢¥¯¥»¥¹À©¸æ</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CGIMapExtension" id="CGIMapExtension">CGIMapExtension</a> <a name="cgimapextension" id="cgimapextension">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥¹¥¯¥ê¥×¥È¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î°ÌÃÖ¤òÄ´¤Ù¤ë¤¿¤á¤Î¼êË¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>CGIMapExtension <var>cgi-path</var> <var>.extension</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>NetWare ¤Î¤ß</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache ¤¬ CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Î
- ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤òõ¤¹ÊýË¡¤òÀ©¸æ¤·¤Þ¤¹¡£
- Î㤨¤Ð¡¢<code>CGIMapExtension sys:\foo.nlm .foo</code> ¤ÈÀßÄꤹ¤ë¤È
- <code>.foo</code> ¤È¤¤¤¦³ÈÄ¥»Ò¤Î¤¹¤Ù¤Æ¤Î CGI ¥¹¥¯¥ê¥×¥È¤Ï FOO ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ë
- ÅϤµ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ContentDigest" id="ContentDigest">ContentDigest</a> <a name="contentdigest" id="contentdigest">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Content-MD5 HTTP ±þÅú¥Ø¥Ã¥À¤ÎÀ¸À®¤òÍ­¸ú¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ContentDigest On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ContentDigest Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢RFC1864 µÚ¤Ó RFC2068 ¤Ë¤ª¤¤¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë
- <code>Content-MD5</code> ¥Ø¥Ã¥À¡¼¤ÎÀ¸À®¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>MD5 ¤Ï¡¢Ç¤°ÕĹ¤Î¥Ç¡¼¥¿¤Î¡Ö¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È¡×(¡Ö»ØÌæ¡×
- ¤Èɽ¸½¤µ¤ì¤ë¤³¤È¤â¤¢¤ë) ¤ò·×»»¤¹¤ë¥¢¥ë¥´¥ê¥º¥à¤Ç¡¢
- ¥Ç¡¼¥¿¤ÎÊѹ¹¤¬¤¢¤Ã¤¿¾ì¹ç¤Ë¤ÏÈó¾ï¤Ë¹â¤¤¿®ÍêÅ٤ǥá¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È¤ËÊѹ¹¤¬
- È¿±Ç¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code>Content-MD5</code> ¥Ø¥Ã¥À¤Ï¡¢¥¨¥ó¥É¥Ä¡¼¥¨¥ó¥É¤Ç
- ¥¨¥ó¥Æ¥£¥Æ¥£¥Ü¥Ç¥£¡¼¤Ë´Þ¤Þ¤ì¤ë¥á¥Ã¥»¡¼¥¸¤Î´°Á´À­¥Á¥§¥Ã¥¯
- (Message Integrity Check - MIC)¤òÄ󶡤·¤Þ¤¹¡£
- ¤³¤Î¥Ø¥Ã¥À¤òÄ´¤Ù¤ë¤³¤È¤Ç¡¢¥×¥í¥­¥·¤ä¥¯¥é¥¤¥¢¥ó¥È¤Ï¡¢
- ÅÓÃæ·ÐÏ©¤Ë¤ª¤±¤ë¥¨¥ó¥Æ¥£¥Æ¥£¥Ü¥Ç¥£¤Îͽ´ü¤»¤ÌÊѹ¹¤Ê¤É¤ò
- ¸¡½Ð¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥Ø¥Ã¥À¤ÎÎã:</p>
-
- <div class="example"><p><code>
- Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
- </code></p></div>
-
- <p>¥ê¥¯¥¨¥¹¥ÈËè¤Ë¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È¤ò·×»»¤¹¤ë (Ãͤϥ­¥ã¥Ã¥·¥å¤µ¤ì¤Þ¤»¤ó)
- ¤³¤È¤«¤é¡¢
- ¥µ¡¼¥Ð¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬Äã²¼¤¹¤ë¤³¤È¤Ë¤Ä¤¤¤ÆÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code>Content-MD5</code>¤Ï¡¢<code class="module"><a href="../mod/core.html">core</a></code> µ¡Ç½¤Ë¤è¤ê½èÍý¤µ¤ì¤¿
- ¥É¥­¥å¥á¥ó¥È¤òÁ÷¤ë¤È¤­¤Î¤ßÍ­¸ú¤Ç¤¢¤ê¡¢
- SSI ¥É¥­¥å¥á¥ó¥È¤ä CGI ¥¹¥¯¥ê¥×¥È¤Î½ÐÎÏ¡¢¥Ð¥¤¥È¥ì¥ó¥¸¤ò»ØÄꤷ¤¿
- ±þÅú¤Î¾ì¹ç¤Ë¤Ï¤³¤Î¥Ø¥Ã¥À¤ÏÉÕÍ¿¤µ¤ì¤Þ¤»¤ó¡£
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultType" id="DefaultType">DefaultType</a> <a name="defaulttype" id="defaulttype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò·èÄê¤Ç¤­¤Ê¤¤¤È¤­¤Ë
-Á÷¤é¤ì¤ë MIME ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DefaultType <var>MIME-type</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DefaultType text/plain</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¥µ¡¼¥Ð¤Ï¡¢MIME ¤Î¥¿¥¤¥×¥Þ¥Ã¥×¤«¤é¤Ï·èÄê¤Ç¤­¤Ê¤¤
- ¥É¥­¥å¥á¥ó¥È¤ÎÁ÷¿®¤òÍ׵ᤵ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤Î¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò¥¯¥é¥¤¥¢¥ó¥È¤ËÄÌÃΤ¹¤ëɬÍפ¬
- ¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤³¤Î¤è¤¦¤Ë¥¿¥¤¥×¤¬Ì¤ÃΤξì¹ç¤Ï
- <code>DefaultType</code> ¤Ç»ØÄꤵ¤ì¤¿¥¿¥¤¥×¤òÍøÍѤ·¤Þ¤¹¡£
- Îã:</p>
-
- <div class="example"><p><code>
- DefaultType image/gif
- </code></p></div>
-
- <p>¤³¤ì¤Ï <code>.gif</code> ¤È¤¤¤¦³ÈÄ¥»Ò¤¬¥Õ¥¡¥¤¥ë̾¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤
- ¿¤¯¤Î GIF ²èÁü¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ËŬ¤·¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p><code class="directive"><a href="#forcetype">ForceType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- °ã¤Ã¤Æ¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ç¥Õ¥©¥ë¥È¤Î MIME ¥¿¥¤¥×¤òÄ󶡤¹¤ë¤À¤±¤Ç
- ¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò´Þ¤á¡¢
- ¥á¥Ç¥£¥¢¥¿¥¤¥×¤ò·èÄê¤Ç¤­¤ë¾¤Î MIME ¥¿¥¤¥×¤ÎÄêµÁ¤¬¤¢¤ì¤Ð
- ¤³¤Î¥Ç¥Õ¥©¥ë¥È¤Ï¾å½ñ¤­¤µ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Directory" id="Directory">&lt;Directory&gt;</a> <a name="directory" id="directory">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»ØÄê¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤È¤Î¤ß¤Ë
-ŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤È¤½¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Î¤ß
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òŬÍѤµ¤»¤ë¤¿¤á¤Ë¤Ï¡¢
- <code class="directive">&lt;Directory&gt;</code> ¤È
- <code>&lt;/Directory&gt;</code> ¤òÂФȤ·¤Æ¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö·²¤ò°Ï¤¤¤Þ¤¹¡£
- ¤½¤ÎÃæ¤Ë¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¥³¥ó¥Æ¥­¥¹¥È¤Çµö²Ä¤µ¤ì¤¿Á´¤Æ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ÍøÍѤǤ­¤Þ¤¹¡£
- <var>directive-path</var> ¤Ï¡¢¥Õ¥ë¥Ñ¥¹¤â¤·¤¯¤Ï Unix ¤Î¥·¥§¥ë·Á¼°¤Î
- ¥ï¥¤¥ë¥É¥«¡¼¥É¤ò»ØÄꤷ¤Þ¤¹¡£
- <code>?</code> ¤ÏǤ°Õ¤Î 1 ʸ»ú¡¢<code>*</code> ¤ÏǤ°Õ¤Îʸ»úÎó¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- ¥·¥§¥ë¤Ë¤ª¤±¤ë»ØÄêƱÍÍ¡¢Ê¸»ú¤ÎÈϰϤò <code>[]</code> ¤Ç»ØÄê¤Ç¤­¤Þ¤¹¡£
- ¥ï¥¤¥ë¥É¥«¡¼¥É¤Ï `/' ʸ»ú¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Þ¤»¤ó¤Î¤Ç¡¢
- <code>/home/user/public_html</code> ¤Ë¤Ï
- <code>&lt;Directory /*/public_html&gt;</code> ¤Ï¥Þ¥Ã¥Á¤·¤Þ¤»¤ó¤¬¡¢
- <code>&lt;Directory /home/*/public_html&gt;</code> ¤Ï¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- Îã:</p>
-
- <div class="example"><p><code>
- &lt;Directory /usr/local/httpd/htdocs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-<div class="note">
-<p><var>directory-path</var> °ú¿ô¤Ë¤ÏÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤: ¤½¤Î°ú¿ô¤Ï
-Apache ¤¬¥Õ¥¡¥¤¥ë¤ò¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë»È¤¦¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ñ¥¹¤Ë
-¤½¤Î¤Þ¤Þ¥Þ¥Ã¥Á¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤¢¤ë <code>&lt;Directory&gt;</code> ¤Ë
-ŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Ê̤Υ·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò¤¿¤É¤Ã¤¿¤ê¤·¤Æ
-Ʊ¤¸¥Ç¥£¥ì¥¯¥È¥ê¤ò°ã¤¦¥Ñ¥¹¤Ç¥¢¥¯¥»¥¹¤·¤¿¾ì¹ç¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£</p>
-</div>
-
- <p><code>~</code> ¤È¤¤¤¦Ê¸»ú¤ò
- Éղ乤뤳¤È¤Ç³ÈÄ¥Àµµ¬É½¸½¤òÍøÍѤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð:</p>
-
-<div class="example"><p><code>
- &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
-</code></p></div>
-
- <p>¤È¤¤¤Ã¤¿»ØÄê¤Î¾ì¹ç¡¢<code>/www/</code> °Ê²¼¤Ë¤¢¤ë¿ô»ú
- 3 ʸ»ú¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£</p>
-
- <p>¤â¤·Ê£¿ô¤Î (Àµµ¬É½¸½°Ê³°¤Î) <code class="directive">&lt;Directory&gt;</code>¥»¥¯¥·¥ç¥ó¤¬
- ¥É¥­¥å¥á¥ó¥È¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê (¤ä¤½¤Î¾å°Ì¥Ç¥£¥ì¥¯¥È¥ê¤Î¤É¤ì¤«) ¤È¥Þ¥Ã¥Á¤·¤¿¤Ê¤é¤Ð¡¢
- <a href="#accessfilename">.htaccess</a> ¥Õ¥¡¥¤¥ë¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤âÆɤ߹þ¤ß¤Ä¤Ä¡¢
- û¤¤¥Ñ¥¹¤«¤é½ç¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- Î㤨¤Ð¡¢</p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- AllowOverride None<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /home/&gt;<br />
- <span class="indent">
- AllowOverride FileInfo<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¤ÈÀßÄꤷ¡¢¥É¥­¥å¥á¥ó¥È <code>/home/web/dir/doc.html</code> ¤Ø¤Î
- ¥¢¥¯¥»¥¹¤¬¤¢¤Ã¤¿¾ì¹ç¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤ËÆ°ºî¤·¤Þ¤¹:</p>
-
- <ul>
- <li><code>AllowOverride None</code> ¤¬Å¬ÍѤµ¤ì¤ë¡£
- (<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ï̵¸ú¤Ë¤Ê¤ë)</li>
-
- <li><code>AllowOverride FileInfo</code> ¤¬Å¬ÍѤµ¤ì¤ë
- (<code>/home</code> ¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ)¡£</li>
-
- <li><code>/home/.htaccess</code>, <code>/home/web/.htaccess</code>,
- <code>/home/web/.htaccess</code> ¤Î½ç¤Ë¤½¤ì¤é¤Î¥Õ¥¡¥¤¥ëÃæ¤Î
- FileInfo ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Å¬ÍѤµ¤ì¤ë¡£</li>
- </ul>
-
- <p>Àµµ¬É½¸½¤Ï¡¢Ä̾ï¤Î¥»¥¯¥·¥ç¥ó¤¬¤¹¤Ù¤ÆŬÍѤµ¤ì¤ë¤Þ¤Ç
- ¹Í褵¤ì¤Þ¤»¤ó¡£
- ¤½¤Î¸å¡¢Á´¤Æ¤ÎÀµµ¬É½¸½¤¬ÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸½¤ì¤¿½ç¤Ç»î¤µ¤ì¤Þ¤¹¡£
- Î㤨¤Ð¡¢°Ê²¼¤Î¤è¤¦¤Ê¾ì¹ç¤Ë</p>
-
- <div class="example"><p><code>
- &lt;Directory ~ abc$&gt;<br />
- <span class="indent">
- # ... directives here ...<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Àµµ¬É½¸½¤Î¥»¥¯¥·¥ç¥ó¤Ï¤¹¤Ù¤Æ¤ÎÄ̾ï¤Î <code class="directive">&lt;Directory&gt;</code> ¤È
- <code>.htaccess</code> ¤ÎŬÍѤ¬½ª¤ï¤ë¤Þ¤Ç¹Í褵¤ì¤Þ¤»¤ó¡£
- ¤½¤Î¸å¤Ç¡¢Àµµ¬É½¸½¤Ï <code>/home/abc/public_html/abc</code> ¤Ë¥Þ¥Ã¥Á¤·¡¢
- Âбþ¤¹¤ë <code class="directive">&lt;Directory&gt;</code> ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <p><strong>Apache ¤Î¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï <code>&lt;Directory /&gt;</code> ¤Ø¤Î¥¢¥¯¥»¥¹¤Ï
- <code>Allow from All</code> ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤ì¤Ï¡¢URL ¤«¤é¥Þ¥Ã¥×¤µ¤ì¤¿¤É¤Î¥Õ¥¡¥¤¥ë¤Ç¤â Apache ¤ÏÁ÷¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
- ¤³¤ì¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤ÆÊѹ¹¤¹¤ë¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</strong></p>
-
- <div class="example"><p><code>
- &lt;Directory /&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from All<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><strong>¤½¤·¤Æ¥¢¥¯¥»¥¹¤ò<em>²Äǽ¤Ë¤·¤¿¤¤</em>¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ
- ¸ÄÊ̤ËÀßÄꤹ¤ì¤Ð¤è¤¤¤Ç¤·¤ç¤¦¡£
- ¤³¤Î¤¢¤¿¤ê¤Ë¤Ä¤¤¤Æ¤Ï¡¢<a href="../misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë¥³¥Ä</a>¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</strong></p>
-
- <p>¥Ç¥£¥ì¥¯¥È¥ê¥»¥¯¥·¥ç¥ó¤Ï httpd.conf ¥Õ¥¡¥¤¥ë½ñ¤­¤Þ¤¹¡£
- <code class="directive">&lt;Directory&gt;</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÆþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤º¡¢
- <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> ¤ä <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤Ë¤â
- µ­½Ò¤Ç¤­¤Þ¤»¤ó¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectoryMatch" id="DirectoryMatch">&lt;DirectoryMatch&gt;</a> <a name="directorymatch" id="directorymatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Àµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È
-¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤È¤Î¤ß¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÈƱÍͤˡ¢<code class="directive">&lt;DirectoryMatch&gt;</code>
- ¤È <code>&lt;/DirectoryMatch&gt;</code> ¤Ï»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤È
- ¤½¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Î¤ßŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö·²¤ò°Ï¤¤¤Þ¤¹¡£
- ¤·¤«¤·¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï°ú¿ô¤È¤·¤ÆÀµµ¬É½¸½¤ò¤È¤ê¤Þ¤¹¡£Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
- </code></p></div>
-
- <p>¤Ï /www/ °Ê²¼¤Ë¤¢¤ë¿ô»ú 3 ʸ»ú¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li>Ä̾ï¤Î <code class="directive">&lt;Directory&gt;</code> ¤ÈÀµµ¬É½¸½¤Î»ØÄ꤬
-ŬÍѤµ¤ì¤ë½çÈ֤ˤĤ¤¤Æ¤Ï <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code></li>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DocumentRoot" id="DocumentRoot">DocumentRoot</a> <a name="documentroot" id="documentroot">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¦¥§¥Ö¤«¤é¸«¤¨¤ë¥á¥¤¥ó¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Ë¤Ê¤ë
-¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DocumentRoot <var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DocumentRoot /usr/local/apache/htdocs</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢<code>httpd</code> ¤¬¥Õ¥¡¥¤¥ë¤òÄ󶡤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òÀßÄꤷ¤Þ¤¹¡£
- <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> ¤Î¤è¤¦¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¥Þ¥Ã¥Á¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢
- ¥É¥­¥å¥á¥ó¥È¤Î (ÌõÃí:¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î) ¥Ñ¥¹¤òÀ¸À®¤¹¤ë¤¿¤á¤Ë¡¢
- ¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿ URL ¤Î¥Ñ¥¹Éôʬ¤ò¥É¥­¥å¥á¥ó¥È¥ë¡¼¥È¤ËÉÕÍ¿¤·¤Þ¤¹¡£
- Îã:</p>
-
- <div class="example"><p><code>
- DocumentRoot /usr/web
- </code></p></div>
-
- <p>¤³¤Î¾ì¹ç¡¢
- <code>http://www.my.host.com/index.html</code> ¤Ø¤Î¥¢¥¯¥»¥¹¤¬¤¢¤ì¤Ð
- <code>/usr/web/index.html</code> ¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
- <var>directory-path</var> ¤¬ÀäÂХѥ¹¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="#serverroot">ServerRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive">DocumentRoot</code> ¤ÏºÇ¸å¤Î¥¹¥é¥Ã¥·¥å̵¤·¤Ç
- »ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../urlmapping.html">URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃÖ¤Ë
-¥Þ¥Ã¥×¤¹¤ë</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableMMAP" id="EnableMMAP">EnableMMAP</a> <a name="enablemmap" id="enablemmap">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÇÛÁ÷Ãæ¤Ë¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤à¤¿¤á¤Ë¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤ò
-»È¤¦¤«¤É¤¦¤«</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>EnableMMAP On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>EnableMMAP On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÇÛÁ÷Ãæ¤Ë¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòÆɤ߹þ¤àɬÍפ¬¤¢¤ë¤È¤­¤Ë
- <code>httpd</code> ¤¬¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤ò»È¤¦¤«¤É¤¦¤«¤òÀ©¸æ¤·¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢
- Î㤨¤Ð¡¢<code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤ò»È¤Ã¤Æ SSI ¥Õ¥¡¥¤¥ë¤òÇÛÁ÷
- ¤¹¤ë¤È¤­¤Î¤è¤¦¤Ë¡¢¥Õ¥¡¥¤¥ë¤ÎÅÓÃæ¤Î¥Ç¡¼¥¿¤ò¥¢¥¯¥»¥¹¤¹¤ëɬÍפ¬¤¢¤ë¤È¤­¤Ë¤Ï
- Apache ¤Ï OS ¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ì¤Ð¥Õ¥¡¥¤¥ë¤ò¥á¥â¥ê¤Ë¥Þ¥Ã¥×¤·¤Þ¤¹¡£</p>
-
- <p>
- ¤³¤Î¥á¥â¥ê¥Þ¥Ã¥×¤ÏÀ­Ç½¤Î¸þ¾å¤ò»ý¤¿¤é¤¹¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¤·¤«¤·¡¢´Ä¶­¤Ë¤è¤Ã¤Æ¤Ï±¿ÍѾå¤ÎÌäÂê¤òËɤ°¤¿¤á¤Ë¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤ò
- »ÈÍѤ·¤Ê¤¤¤è¤¦¤Ë¤·¤¿Êý¤¬Îɤ¤¾ì¹ç¤â¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µ¥·¥¹¥Æ¥à¤ÎÃæ¤Ë¤Ï¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤ò¤¹¤ë¤È <code>httpd</code> ¤Î
- À­Ç½¤¬Íî¤Á¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£</li>
- <li>NFS ¥Þ¥¦¥ó¥È¤µ¤ì¤¿ <code class="directive"><a href="#documentroot">DocumentRoot</a></code>
- ¤Ç¤Ï¡¢<code>httpd</code> ¤¬¥á¥â¥ê¥Þ¥Ã¥×¤·¤Æ¤¤¤ë´Ö¤Ë¥Õ¥¡¥¤¥ë¤¬ºï½ü¤µ¤ì¤¿¤ê
- û¤¯¤Ê¤Ã¤¿¤ê¤·¤¿¤È¤­¤Ëµ¯¤³¤ë¥»¥°¥á¥ó¥Æ¡¼¥·¥ç¥ó¥Õ¥©¡¼¥ë¥È¤Î¤¿¤á¤Ë
- <code>httpd</code> ¤¬¥¯¥é¥Ã¥·¥å¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</li>
- </ul>
-
- <p>¤³¤ì¤é¤ÎÌäÂê¤ËÅö¤Æ¤Ï¤Þ¤ë¥µ¡¼¥Ð¤ÎÀßÄê¤Î¾ì¹ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ
- ¥Õ¥¡¥¤¥ë¤ÎÇÛÁ÷»þ¤Î¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤ò»ÈÍÑÉԲĤˤ·¤Æ¤¯¤À¤µ¤¤:</p>
-
- <div class="example"><p><code>
- EnableMMAP Off
- </code></p></div>
-
- <p>NFS ¥Þ¥¦¥ó¥È¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¤Ï¡¢ÌäÂê¤Î¤¢¤ë¥Õ¥¡¥¤¥ë¤Ë¤Î¤ßÌÀ¼¨Åª¤Ë
- ¤³¤Îµ¡Ç½¤ò»ÈÍÑÉԲĤˤ·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/path-to-nfs-files"&gt;
- <span class="indent">
- EnableMMAP Off
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableSendfile" id="EnableSendfile">EnableSendfile</a> <a name="enablesendfile" id="enablesendfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ø¤ÎÇÛÁ÷»þ¤Ë¥«¡¼¥Í¥ë¤Î sendfile ¥µ¥Ý¡¼¥È¤ò
-»È¤¦¤«¤É¤¦¤«</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>EnableSendfile On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>EnableSendfile On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥Ð¡¼¥¸¥ç¥ó 2.0.44 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥é¥¤¥¢¥ó¤Ë¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòÁ÷¤ë¤È¤­¤Ë
- <code>httpd</code> ¤¬¥«¡¼¥Í¥ë¤Î
- sendfile ¥µ¥Ý¡¼¥È¤ò»È¤¦¤«¤É¤¦¤«¤òÀ©¸æ¤·¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢
- Î㤨¤ÐÀÅŪ¤Ê¥Õ¥¡¥¤¥ë¤ÎÇÛÁ÷¤Î¤è¤¦¤Ë¡¢¥ê¥¯¥¨¥¹¥È¤Î½èÍý¤Ë¥Õ¥¡¥¤¥ë¤Î
- ÅÓÃæ¤Î¥Ç¡¼¥¿¤Î¥¢¥¯¥»¥¹¤òɬÍפȤ·¤Ê¤¤¤È¤­¤Ë¤Ï¡¢Apache ¤Ï OS ¤¬
- ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ì¤Ð¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤à¤³¤È¤Ê¤¯ sendfile ¤ò»È¤Ã¤Æ
- ¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòÁ÷¤ê¤Þ¤¹¡£</p>
-
- <p>sendfile ¤Ï read ¤È send ¤òÊÌ¡¹¤Ë¹Ô¤Ê¤¦¤³¤È¤È¡¢¥Ð¥Ã¥Õ¥¡¤Î³ä¤êÅö¤Æ¤ò
- ²óÈò¤·¤Þ¤¹¡£¤·¤«¤·¡¢¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ä¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎÃæ¤Ë¤Ï
- ±¿ÍѾå¤ÎÌäÂê¤òÈò¤±¤ë¤¿¤á¤Ë¤³¤Îµ¡Ç½¤ò»ÈÍÑÉԲĤˤ·¤¿Êý¤¬Îɤ¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ÎÃæ¤Ë¤Ï¥Ó¥ë¥É¥·¥¹¥Æ¥à¤¬¸¡ÃΤǤ­¤Ê¤«¤Ã¤¿¡¢²õ¤ì¤¿
- sendfile ¤Î¥µ¥Ý¡¼¥È¤¬Â¸ºß¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ÏÆäË
- ¥Ð¥¤¥Ê¥ê¤¬Ê̤Υޥ·¥ó¤Ç¥Ó¥ë¥É¤µ¤ì¡¢²õ¤ì¤¿ sendfile ¤Î¤¢¤ë¥Þ¥·¥ó¤Ë
- °ÜÆ°¤·¤¿¤È¤­¤Ëµ¯¤³¤ê¤Þ¤¹¡£</li>
- <li>Linux ¤Ç¤Ï¡¢sendfile ¤òÍѤ¤¤ë¤È¡¢
- IPv6 »ÈÍÑ»þ¤Ë¸ºß¤¹¤ëÆÃÄê¥Í¥Ã¥È¥ï¡¼¥¯¥«¡¼¥É¤Î TCP-checksum
- ¥ª¥Õ¥í¡¼¥É¤Î¥Ð¥°¤òƧ¤ó¤Ç¤·¤Þ¤¤¤Þ¤¹¡£</li>
- <li>¥Í¥Ã¥È¥ï¡¼¥¯¥Þ¥¦¥ó¥È¤µ¤ì¤¿ <code class="directive"><a href="#documentroot">DocumentRoot</a></code>
- (Î㤨¤Ð NFS ¤ä SMB)
- ¤Ç¤Ï¡¢¥«¡¼¥Í¥ë¤Ï¼«¿È¤Î¥­¥ã¥Ã¥·¥å¤ò»È¤Ã¤Æ¥Í¥Ã¥È¥ï¡¼¥¯¤«¤é¤Î¥Õ¥¡¥¤¥ë¤ò
- Á÷¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£</li>
- </ul>
-
- <p>¤³¤ì¤é¤ÎÌäÂê¤ËÅö¤Æ¤Ï¤Þ¤ë¥µ¡¼¥Ð¤ÎÀßÄê¤Î¾ì¹ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ
- ¤³¤Îµ¡Ç½¤ò»ÈÍÑÉԲĤˤ·¤Æ¤¯¤À¤µ¤¤:</p>
-
-
- <div class="example"><p><code>
- EnableSendfile Off
- </code></p></div>
-
- <p>NFS ¤ä SMB ¥Þ¥¦¥ó¥È¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¤Ï¡¢ÌäÂê¤Î¤¢¤ë¥Õ¥¡¥¤¥ë¤Ë¤Î¤ßÌÀ¼¨Åª¤Ë
- ¤³¤Îµ¡Ç½¤ò»ÈÍÑÉԲĤˤ·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/path-to-nfs-files"&gt;
- <span class="indent">
- EnableSendfile Off
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ErrorDocument" id="ErrorDocument">ErrorDocument</a> <a name="errordocument" id="errordocument">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤È¤­¤Ë¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¤â¤Î</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ErrorDocument <var>error-code document</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 ¤Ç¤Ï¥Æ¥­¥¹¥È¤ò¥¯¥¦¥©¡¼¥È¤¹¤ë¹½Ê¸¤¬°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤«¤é
-ÊѤï¤Ã¤Æ¤¤¤Þ¤¹¡£</td></tr>
-</table>
- <p>ÌäÂê¤ä¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤È¤­¤ÎÆ°ºî¤È¤·¤Æ¡¢
- Apache ¤Ë¤Ï°Ê²¼¤Î»Í¤Ä¤Î¤¦¤Á°ì¤Ä¤ÎÆ°ºî¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <ol>
- <li>Apache ɸ½à¤Î´Êñ¤Ê¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨</li>
-
- <li>¼«Ê¬¤Ç»ØÄꤷ¤¿¥á¥Ã¥»¡¼¥¸¤òɽ¼¨</li>
-
- <li>ÌäÂê¤ä¥¨¥é¡¼¤Î½èÍý¤ò¤¹¤ë°Ù¤Ë¡¢¼«¥µ¡¼¥ÐÆâ¤Î
- <var>URL-path</var> ¤Ø¥ê¥À¥¤¥ì¥¯¥È</li>
-
- <li>ÌäÂê¤ä¥¨¥é¡¼¤Î½èÍý¤ò¤¹¤ë°Ù¤Ë¡¢³°Éô¤Î <var>URL</var> ¤Ø¥ê¥À¥¤¥ì¥¯¥È</li>
- </ol>
-
- <p>ºÇ½é¤Î¤â¤Î¤¬¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤Ç¡¢2 ÈÖÌܤ«¤é 4 ÈÖÌܤϡ¢
- <code class="directive">ErrorDocument</code>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢
- HTTP ¤Î¥ì¥¹¥Ý¥ó¥¹¥³¡¼¥É¤È¡¢¥á¥Ã¥»¡¼¥¸¤« URL ¤ò»ØÄꤹ¤ë¤³¤È¤ÇÀßÄꤷ¤Þ¤¹¡£
- Apache ¤¬ÌäÂê¤â¤·¤¯¤Ï¥¨¥é¡¼¤Ë´Ø¤¹¤ëÄɲþðÊó¤òÄ󶡤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>URL ¤Î¾ì¹ç¤Ï¡¢¥í¡¼¥«¥ë¤Î URL ¤Î»ØÄê¤È¤·¤Æ¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤ë (/) ¥Ñ¥¹¤«¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤¬²ò¼á¤Ç¤­¤ë¥Õ¥ë URL ¤ò»ØÄꤷ¤Þ¤¹¡£<br />
- ¤â¤·¤¯¤Ï¡¢¥Ö¥é¥¦¥¶¤Ëɽ¼¨¤µ¤ì¤ë¥á¥Ã¥»¡¼¥¸¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£
- Îã:</p>
-
- <div class="example"><p><code>
- ErrorDocument 500 http://foo.example.com/cgi-bin/tester<br />
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br />
- ErrorDocument 401 /subscription_info.html<br />
- ErrorDocument 403 "Sorry can't allow you access today"
- </code></p></div>
-
- <p>²Ã¤¨¤Æ¡¢ÆÃÊ̤ÊÃÍ <code>default</code> ¤ò»È¤Ã¤Æ Apache ¤Ë
- ¥Ï¡¼¥É¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë´Êñ¤Ê¥á¥Ã¥»¡¼¥¸¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Ä̾ï¤ÏɬÍפǤϤ¢¤ê¤Þ¤»¤ó¤¬¡¢<code>default</code> ¤ò»È¤¦¤È
- ´û¸¤Î <code class="directive">ErrorDocument</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀßÄê¤ò
- ·Ñ¾µ¤¹¤ë¤È¤³¤í¤Ç¡¢Apache ¤Î¥Ï¡¼¥É¥³¡¼¥É¤µ¤ì¤¿´Êñ¤Ê¥á¥Ã¥»¡¼¥¸¤Ë
- Ì᤹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br /><br />
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- ErrorDocument 404 default<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¥ê¥â¡¼¥È URL (Î㤨¤Ð¡¢Æ¬¤Ë <code>http</code> ¤ÈÉÕÍ¿¤·¤¿ÊýË¡) ¤ò
- <code class="directive">ErrorDocument</code> ¤Ë»ØÄꤹ¤ë¤È¤­¡¢
- ¤¿¤È¤¨Ê¸½ñ¤¬Æ±¤¸¥µ¡¼¥Ð¤Ë¤¢¤í¤¦¤È¤â¡¢¥É¥­¥å¥á¥ó¥È¤¬¤É¤³¤Ë¤¢¤ë¤«¤òÄÌÃΤ¹¤ë¤¿¤á¤Ë¡¢
- Apache ¤Ï¥ê¥À¥¤¥ì¥¯¥È¤ò¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷½Ð¤¹¤ë¤È¤¤¤¦¤³¤È¤Ë¡¢Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤ì¤Ë¤Ï¤¤¤í¤¤¤í¤È´ØÏ¢¤·¤Æµ¯¤³¤ëÌäÂ꤬¤¢¤ê¤Þ¤¹¡£
- Ãæ¤Ç¤âºÇ¤â½ÅÍפʤΤϡ¢¥¯¥é¥¤¥¢¥ó¥È¤Ï¸µ¡¹¤Î¥¨¥é¡¼¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤ò¼õ¤±¼è¤é¤º¡¢
- Âå¤ï¤ê¤Ë¥ê¥À¥¤¥ì¥¯¥È¤Î¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤ò¼õ¤±¼è¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤ò»È¤Ã¤Æ URL ¤¬Í­¸ú¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò·èÄꤷ¤è¤¦¤È¤¹¤ë
- ¥¦¥§¥Ö¥í¥Ü¥Ã¥È¤ä¤½¤Î¾¥¯¥é¥¤¥¢¥ó¥È¤ò¡¢º®Í𤵤»¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤µ¤é¤Ë¡¢<code>ErrorDocument 401</code> ¤Ë¥ê¥â¡¼¥È¤Î URL ¤ò»ØÄꤹ¤ë¤È¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤Ï 401 ¤È¤¤¤¦¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤ò¼õ¤±¼è¤é¤Ê¤¤¤¿¤á¡¢
- ¥Ñ¥¹¥ï¡¼¥É¤ò¥æ¡¼¥¶¡¼¤ËÆþÎÏÍ׵ᤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤»¤ó¡£
- ½¾¤Ã¤Æ¡¢<strong><code>ErrorDocument 401</code> ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¾ì¹ç¤Ï¡¢
- ɬ¤º¥í¡¼¥«¥ë¤Êʸ½ñ¤ò»²¾È¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</strong></p>
-
- <p>Microsoft Internet Explorer (MSIE) ¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥µ¡¼¥Ð¤¬À¸À®¤·¤¿¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬
- ¡Ö¾®¤µ¤¹¤®¤ë¡×¤È¤­¤Ë¤Ï̵»ë¤ò¤·¤Æ¼«Ê¬¼«¿È¤Î¡Ö¤ä¤µ¤·¤¤¡×¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ç
- ÃÖ´¹¤·¤Þ¤¹¡£¥µ¥¤¥º¤Î¤·¤­¤¤Ãͤϥ¨¥é¡¼¤Î¼ïÎà¤Ë¤è¤Ã¤Æ°Û¤Ê¤ê¤Þ¤¹¤¬¡¢
- °ìÈÌŪ¤Ë¤Ï¥¨¥é¡¼¤Îʸ½ñ¤ò 512 ¥Ð¥¤¥È¤è¤ê¤â¿¤­¤¯¤¹¤ë¤È¡¢MSIE ¤Ï
- ¥µ¡¼¥Ð¤¬À¸À®¤·¤¿¥¨¥é¡¼¤ò±£¤µ¤º¤Ëɽ¼¨¤·¤Þ¤¹¡£¾Ü¤·¤¤¾ðÊó¤Ï Microsoft
- Knowledge Base ¤Îµ­»ö <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807">Q294807</a>
- ¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>2.0 ¤è¤êÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢ÂФˤʤäƤ¤¤Ê¤¤Æó½Å°úÍÑÉä¤ò
- ÀèƬ¤ËÉÕ¤±¤ë¤³¤È¤Ë¤è¤ê¥á¥Ã¥»¡¼¥¸¤Ç¤¢¤ë¤³¤È¤ò»ØÄꤷ¤Æ¤¤¤Þ¤·¤¿¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../custom-error.html">¥«¥¹¥¿¥Þ¥¤¥º²Äǽ¤Ê
-¥¨¥é¡¼±þÅú¤Î¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ErrorLog" id="ErrorLog">ErrorLog</a> <a name="errorlog" id="errorlog">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¥¨¥é¡¼¤ò¥í¥°¼ý½¸¤¹¤ë¾ì½ê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ErrorLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥µ¡¼¥Ð¤ËÀ¸¤¸¤¿¤µ¤Þ¤¶¤Þ¤Ê¥¨¥é¡¼¤ò
- µ­Ï¿¤¹¤ë°Ù¤Î¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤷ¤Þ¤¹¡£
- <var>file-path</var> ¤¬ÀäÂХѥ¹¤Ç¤Ê¤¤¤È¤­¤Ï¡¢<code class="directive"><a href="#serverroot">ServerRoot</a></code> ¤«¤é¤ÎÁêÂХѥ¹¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ErrorLog /var/log/httpd/error_log
- </code></p></div>
-
- <p><var>file-path</var> ¤¬¥Ñ¥¤¥× (|) ¤«¤é»Ï¤Þ¤ë¾ì¹ç¤Ï¡¢
- ¥¨¥é¡¼¥í¥°¤ò½èÍý¤¹¤ë¤¿¤á¤Ë¼Â¹Ô¤µ¤ì¤ë¥³¥Þ¥ó¥É¤¬
- »ØÄꤵ¤ì¤Æ¤¤¤ë¤È²ò¼á¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ErrorLog "|/usr/local/bin/httpd_errors"
- </code></p></div>
-
- <p>¥Õ¥¡¥¤¥ë̾¤ÎÊѤï¤ê¤Ë <code>syslog</code> ¤È»ØÄꤹ¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢
- ¥·¥¹¥Æ¥à¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ì¤Ð syslogd(8) ¤òÍøÍѤ·¤¿¥í¥®¥ó¥°¤¬Í­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢<code>local7</code> ¥Õ¥¡¥·¥ê¥Æ¥£¤È¤Ê¤ê¤Þ¤¹¤¬¡¢
- <code>syslog:<var>facility</var></code> ¤È¤¤¤Ã¤¿·Á¤Çµ­½Ò¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢
- Ä̾ï syslog(1) ¤Î¥É¥­¥å¥á¥ó¥È¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥·¥ê¥Æ¥£¤Î°ì¤Ä¤ò»È¤¦¤è¤¦¤Ë
- ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ErrorLog syslog:user
- </code></p></div>
-
- <p>¥»¥­¥å¥ê¥Æ¥£:
- ¥í¥°¥Õ¥¡¥¤¥ë¤ò³ÊǼ¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤¬¡¢¥µ¡¼¥Ð¤òµ¯Æ°¤·¤¿¥æ¡¼¥¶°Ê³°¤Î
- ¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ½ñ¤­¹þ¤á¤ë¾ì¹ç¤Ë¥»¥­¥å¥ê¥Æ¥£¤¬Çˤé¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤³¤È¤Ë
- ´Ø¤¹¤ë¾ÜºÙ¤Ï <a href="../misc/security_tips.html#serverroot">¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë¥³¥Ä</a> ¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- <div class="warning"><h3>Ãí</h3>
- <p>Unix °Ê³°¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤òÆþÎϤ¹¤ë¤È¤­¤Ï¡¢
- ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤¬¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Î»ÈÍѤòµö¤·¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¢
- ³Î¼Â¤Ë¥¹¥é¥Ã¥·¥å¤Î¤ß¤¬»ÈÍѤµ¤ì¤ë¤è¤¦¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£°ìÈÌŪ¤Ë¤Ï¡¢
- ÀßÄê¥Õ¥¡¥¤¥ëÁ´È̤ǥ¹¥é¥Ã¥·¥å¤Î¤ß¤ò»È¤¦Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#loglevel">LogLevel</a></code></li>
-<li><a href="../logs.html">Apache ¥í¥°¥Õ¥¡¥¤¥ë</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="FileETag" id="FileETag">FileETag</a> <a name="fileetag" id="fileetag">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ETag HTTP ±þÅú¥Ø¥Ã¥À¤òºîÀ®¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë
-¥Õ¥¡¥¤¥ë¤Î°À­</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>FileETag <var>component</var> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>FileETag INode MTime Size</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>
- <code class="directive">FileETag</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥É¥­¥å¥á¥ó¥È¤¬¥Õ¥¡¥¤¥ë¤Ë´ð¤Å¤¤¤¿¤â¤Î¤Ç¤¢¤ë¤È¤­¤Ë¡¢
- <code>ETag</code> (¥¨¥ó¥Æ¥£¥Æ¥£¥¿¥°) ±þÅú¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òºîÀ®¤¹¤ë¤È¤­¤Ë»ÈÍѤ¹¤ë
- ¥Õ¥¡¥¤¥ë¤Î°À­¤òÀßÄꤷ¤Þ¤¹¡£ (<code>ETag</code> ¤ÎÃͤϥͥåȥ¥¯¤ÎÂÓ°è¤òÀáÌ󤹤뤿¤á¤Î
- ¥­¥ã¥Ã¥·¥å¤Î´ÉÍý¤Ç»È¤ï¤ì¤Þ¤¹¡£) Apache 1.3.22 °ÊÁ°¤Ç¤Ï¡¢<code>ETag</code> ¤ÎÃͤÏ
- <em>¾ï¤Ë</em>¥Õ¥¡¥¤¥ë¤Î inode, ¥µ¥¤¥º¡¢ºÇ½ª½¤Àµ»þ¹ï (mtime) ¤«¤éºîÀ®
- ¤µ¤ì¤Æ¤¤¤Þ¤·¤¿¡£<code class="directive">FileETag</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢¤³¤ì¤é¤Î¤É¤ì¤ò»È¤¦¤«¤ò
- Áª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Ç§¼±¤µ¤ì¤ë¥­¡¼¥ï¡¼¥É¤Ï:
- </p>
-
- <dl>
- <dt><strong>INode</strong></dt>
- <dd>¥Õ¥¡¥¤¥ë¤Î inode ÈÖ¹æ¤ò·×»»¤Ë»È¤¤¤Þ¤¹</dd>
- <dt><strong>MTime</strong></dt>
- <dd>¥Õ¥¡¥¤¥ë¤ÎºÇ½ª½¤Àµ»þ¹ï¤ò»È¤¤¤Þ¤¹</dd>
- <dt><strong>Size</strong></dt>
- <dd>¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤Î¥Ð¥¤¥È¿ô¤ò»È¤¤¤Þ¤¹</dd>
- <dt><strong>All</strong></dt>
- <dd>»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î¥Õ¥£¡¼¥ë¥É¤ò»È¤¤¤Þ¤¹¡£
- ¤³¤ì¤Ï <div class="example"><p><code>FileETag INode MTime Size</code></p></div> ¤ÈÅù²Á¤Ç¤¹¡£</dd>
- <dt><strong>None</strong></dt>
- <dd>¥É¥­¥å¥á¥ó¥È¤¬¥Õ¥¡¥¤¥ë¤Ë´ð¤Å¤¤¤¿¤â¤Î¤Ç¤â¡¢<code>ETag</code> ¥Õ¥£¡¼¥ë¥É¤ò
- ±þÅú¤ËÉղä·¤Þ¤»¤ó</dd>
- </dl>
-
- <p><code>INode</code>, <code>MTime</code>, <code>Size</code> ¥­¡¼¥ï¡¼¥É¤Ë¤Ï
- <code>+</code> ¤ä <code>-</code> ¤òÁ°¤ËÉÕ¤±¤Æ
- »ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤³¤Î¾ì¹ç¤Ï¡¢¤è¤ê¹­¤¤ÈϰϤ«¤é·Ñ¾µ¤µ¤ì¤¿
- ¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¤ËÊѹ¹¤ò²Ã¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤Î¤è¤¦¤ÊÀÜƬ¼­¤Î
- ̵¤¤¥­¡¼¥ï¡¼¥É¤ò»ØÄꤹ¤ë¤È¡¢Â¨ºÂ¤Ë·Ñ¾µ¤·¤¿ÀßÄê¤ò̵¸ú¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÎÀßÄê¤Ë
- <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code> ¤¬¤¢¤ê¡¢
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ÎÀßÄê¤Ë <code>FileETag&nbsp;-INode</code> ¤¬¤¢¤ë¤È¤­¤Ï¡¢
- ¤½¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ÎÀßÄê¤Ï (ÀßÄ꤬¾å½ñ¤­¤µ¤ì¤Ê¤±¤ì¤Ð¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Î
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤â·Ñ¾µ¤µ¤ì¤Þ¤¹) <code>FileETag&nbsp;MTime&nbsp;Size</code>
- ¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Files" id="Files">&lt;Files&gt;</a> <a name="files" id="files">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë̾¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;Files&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¤½¤ÎÃæ¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈϰϤò¥Õ¥¡¥¤¥ë̾¤ÇÀ©¸Â¤·¤Þ¤¹¡£
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä <code class="directive"><a href="#location">&lt;Location&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- Ʊ¤¸¤è¤¦¤Êµ¡Ç½¤ò»ý¤Á¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢<code>&lt;/Files&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÈÂФË
- ¤Ê¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤Î¥»¥¯¥·¥ç¥óÃæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥Ù¡¼¥¹Ì¾ (¥Õ¥¡¥¤¥ë̾¤ÎºÇ¸å¤ÎÉôʬ)
- ¤¬»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤Ë¥Þ¥Ã¥Á¤¹¤ë¤¹¤Ù¤Æ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- <code class="directive">&lt;Files&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ï
- <code class="directive">&lt;Directory&gt;</code> ¥»¥¯¥·¥ç¥ó¤È
- <code>.htaccess</code> ¤¬Æɤ߹þ¤Þ¤ì¤¿¸å¡¢
- <code class="directive">&lt;Location&gt;</code> ¥»¥¯¥·¥ç¥ó¤è¤ê¤ÏÀè¤Ë
- ÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸½¤ì¤¿½ç¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- <code class="directive">&lt;Files&gt;</code> ¤Ï¡¢
- <code class="directive">&lt;Directory&gt;</code> ¥»¥¯¥·¥ç¥óÆâ¤Ë
- ¥Í¥¹¥È¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¡¢
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ìÉô¤Ë¤Î¤ß¸ÂÄꤷ¤ÆŬÍѤµ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><var>filename</var> °ú¿ô¤Ï¡¢¥Õ¥¡¥¤¥ë̾¤«¥ï¥¤¥ë¥É¥«¡¼¥Éʸ»úÎó
- ¤Ç¡¢¥ï¥¤¥ë¥É¥«¡¼¥É¤Ç¤Ï <code>?</code> ¤Ï°ì¤Ä¤Îʸ»ú¡¢<code>*</code> ¤ÏǤ°Õ¤Îʸ»úÎó¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- <code>~</code> ¤È¤¤¤¦Ê¸»ú¤òÉղ乤뤳¤È¤Ç³ÈÄ¥Àµµ¬É½¸½¤ò»È¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð¡¢</p>
-
- <div class="example"><p><code>
- &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
- </code></p></div>
-
- <p>¤È¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢°ìÈÌŪ¤Ê¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î²èÁü¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- ¤¿¤À¤·¡¢
- <code class="directive"><a href="#filesmatch">&lt;FilesMatch&gt;</a></code> ¤ò»È¤¦Êý¤¬
- ¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¤Á¤Ê¤ß¤Ë¡¢<code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ¤È <code class="directive"><a href="#location">&lt;Location&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤È¤Ï°Û¤Ê¤ê¡¢
- <code class="directive">&lt;Files&gt;</code>
- ¤Ï <code>.htaccess</code> ¥Õ¥¡¥¤¥ëÆâ¤ÇÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥æ¡¼¥¶¤¬¥Õ¥¡¥¤¥ëËè¤Ë¥¢¥¯¥»¥¹¤ÎÀ©¸æ¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë
- ¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="FilesMatch" id="FilesMatch">&lt;FilesMatch&gt;</a> <a name="filesmatch" id="filesmatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Àµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë̾¤ËŬÍѤµ¤ì¤ë
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;FilesMatch&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥ÖƱÍͤˤ½¤ÎÃæ¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈϰϤò¥Õ¥¡¥¤¥ë̾¤ÇÀ©¸Â¤·¤Þ¤¹¡£¤¿¤À¤·¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤ÏÀµµ¬É½¸½¤ò»ØÄꤷ¤Þ¤¹¡£
- Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
- </code></p></div>
-
- <p>¤Ï°ìÈÌŪ¤Ê¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î²èÁü·Á¼°¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForceType" id="ForceType">ForceType</a> <a name="forcetype" id="forcetype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¤¹¤Ù¤Æ¤Î¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë¤¬»ØÄê¤Î MIME ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ç
-Á÷¤é¤ì¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ForceType <var>MIME-type</var>|None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 ¤Ç core ¤Ë°ÜÆ°</td></tr>
-</table>
- <p><code>.htaccess</code> ¤ä <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¡¢
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code> ¥»¥¯¥·¥ç¥ó¡¢
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Ë
- ½ñ¤«¤ì¤¿¾ì¹ç¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤³¤Ë¤¢¤ë¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤¬
- <var>MIME-type</var>
- ¤Ç»ØÄꤵ¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤È¤·¤Æ°·¤ï¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢
- GIF ¥Õ¥¡¥¤¥ë¤Ð¤«¤ê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬¤¢¤Ã¤Æ¡¢¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò <code>.gif</code>
- ¤Ç½ª¤ï¤é¤»¤¿¤¯¤Ï¤Ê¤¤¤È¤­¤Ë¡¢°Ê²¼¤Î¤â¤Î¤ò»ÈÍѤ·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- ForceType image/gif
- </code></p></div>
-
- <p><code class="directive"><a href="#defaulttype">DefaultType</a></code> ¤È°ã¤Ã¤Æ
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥á¥Ç¥£¥¢¥¿¥¤¥×¤ò·è¤á¤ë¤³¤È¤¬¤Ç¤­¤ë¤«¤â¤·¤ì¤Ê¤¤
- ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤â´Þ¤á¡¢¤¹¤Ù¤Æ¤Î MIME ¥¿¥¤¥×¤Î´ØÏ¢ÉÕ¤±¤ò
- ¾å½ñ¤­¤¹¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code>None</code> ¤È¤¤¤¦Ãͤò»È¤¦¤³¤È¤Ç <code class="directive">ForceType</code> ¤Î
- ÀßÄê¤ò̵¸ú¤Ë¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- # force all files to be image/gif:<br />
- &lt;Location /images&gt;<br />
- <span class="indent">
- ForceType image/gif<br />
- </span>
- &lt;/Location&gt;<br />
- <br />
- # but normal mime-type associations here:<br />
- &lt;Location /images/mixed&gt;<br />
- <span class="indent">
- ForceType None<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HostnameLookups" id="HostnameLookups">HostnameLookups</a> <a name="hostnamelookups" id="hostnamelookups">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤Î IP ¥¢¥É¥ì¥¹¤Î DNS ¥ë¥Ã¥¯¥¢¥Ã¥×¤ò
-Í­¸ú¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>HostnameLookups On|Off|Double</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>HostnameLookups Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥Û¥¹¥È̾¤ò¥í¥°¼ý½¸¤Ç¤­¤ë¤è¤¦¤Ë
- DNS ¥ë¥Ã¥¯¥¢¥Ã¥×¤òÍ­¸ú¤Ë¤·¤Þ¤¹
- (¤µ¤é¤Ë¡¢CGI/SSI ¤Ë <code>REMOTE_HOST</code> ÊÑ¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹)¡£
- <code>Double</code>¤ò»ØÄꤷ¤¿¾ì¹ç¡¢2 ½Å¤ÎµÕ°ú¤­¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
- ¤Ä¤Þ¤ê¡¢µÕ°ú¤­¤Î¸å¤Ë¡¢¤½¤Î·ë²Ì¤ËÂФ·¤ÆÀµ°ú¤­¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£Àµ°ú¤­¤Î
- ·ë²Ì¤Î IP ¥¢¥É¥ì¥¹¤ÎÃæ¤Ë¥ª¥ê¥¸¥Ê¥ë¤Î¥¢¥É¥ì¥¹¤È°ìÃפ¹¤ë¤â¤Î¤¬¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£("tcpwrappers" ¤ÎÍѸì¤Ç¤Ï PARANOID ¤È¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¡£)</p>
-
- <p><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> ¤Ç¥Û¥¹¥È̾¤Ë¤è¤ë¥¢¥¯¥»¥¹
- À©¸æ¤ò¹Ô¤Ê¤¦¾ì¹ç¤Ë¤Ï¡¢
- ÀßÄê¤ÎÇ¡²¿¤Ë¤è¤é¤º 2 ½Å¤ÎµÕ°ú¤­¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥»¥­¥å¥ê¥Æ¥£¤òÊݤĤ¿¤á¤ËɬÍפǤ¹¡£
- <code>HostnameLookups Double</code> ¤òÀßÄꤷ¤Ê¤¤¸Â¤ê¡¢
- ¾¤ÎÉôʬ¤Ï¤³¤Î 2 ½ÅµÕ°ú¤­¤Î·ë²Ì¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- Î㤨¤Ð¡¢<code>HostnameLookups On</code> ¤ÈÀßÄꤷ¤Æ¤¢¤ë¾õÂ֤ǡ¢
- ¥Û¥¹¥È̾¤Ë¤è¤ë¥¢¥¯¥»¥¹À©¸Â¤ò¹Ô¤Ê¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿¤È¤¹¤ë¤È¡¢2 ½Å¤ÎµÕ°ú¤­¤¬À®¸ù¤¹¤ë¤«Èݤ«¤Ë¤è¤é¤º¡¢
- <code>REMOTE_HOST</code> ¤Ë¤ÏÄ̾ï¤ÎµÕ°ú¤­·ë²Ì¤¬ÅϤµ¤ì¤Þ¤¹¡£</p>
-
- <p>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥Ç¥Õ¥©¥ë¥È¤Ï
- ËÜÅö¤ËµÕ°ú¤­¤òɬÍפȤ·¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¥µ¥¤¥È¤Î
- ¥Í¥Ã¥È¥ï¡¼¥¯¥È¥é¥Õ¥£¥Ã¥¯¤òÄ㸺¤µ¤»¤ë¤¿¤á¤Ë¡¢<code>Off</code> ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¥ë¥Ã¥¯¥¢¥Ã¥×¤Ë¤è¤ë;·×¤ÊÃٱ䤬¤Ê¤¯¤Ê¤ë¤¿¤á¡¢
- ¥¨¥ó¥É¥æ¡¼¥¶¤Ë¤È¤Ã¤Æ¤âÎɤ¤¤Ç¤·¤ç¤¦¡£
- DNS ¤Î¥ë¥Ã¥¯¥¢¥Ã¥×¤Ë¤Ï¡¢¤«¤Ê¤ê¤Î»þ´Ö¤¬É¬ÍפȤʤë¾ì¹ç¤¬Â¿¤¯¡¢
- Éé²Ù¤Î¹â¤¤¥µ¥¤¥È¤Ç¤Ï¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>Off</code> ¤Ë¤¹¤Ù¤­¤Ç¤¹¡£
- ¤Ê¤ª¡¢<var>/support</var> ¥Ç¥£¥ì¥¯¥È¥ê¤Ë´Þ¤Þ¤ì¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï
- ¥¤¥ó¥¹¥È¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>bin</code> ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë <a href="../programs/logresolve.html">logresolve</a> ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤Ë¤è¤ê¡¢
- Apache ¤ÎÆ°ºî¤È¤ÏÊ̤ˡ¢¥í¥°¤Ë»Ä¤µ¤ì¤Æ¤¤¤ë IP ¥¢¥É¥ì¥¹¤«¤é¥Û¥¹¥È̾¤ò
- ¥ë¥Ã¥¯¥¢¥Ã¥×¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfDefine" id="IfDefine">&lt;IfDefine&gt;</a> <a name="ifdefine" id="ifdefine">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>µ¯Æ°»þ¤Ë¥Æ¥¹¥È¤¬¿¿¤Ç¤¢¤ë¤È¤­¤Î¤ß¤Ë½èÍý¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
-°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code>&lt;IfDefine <var>test</var>&gt;...&lt;/IfDefine&gt;</code>
- ¥»¥¯¥·¥ç¥ó¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¾ò·ïÉÕ¤­¤Ç»ØÄꤹ¤ë¤¿¤á¤ËÍøÍѤ·¤Þ¤¹¡£
- <code class="directive">&lt;IfDefine&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ë
- ´Þ¤Þ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢<var>test</var>¤¬
- ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Î¤ß½èÍý¤µ¤ì¤Þ¤¹¡£
- ¤â¤· <var>test</var> ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢
- ³«»Ï¤È½ªÎ»¤Î»ØÄê¤Î´Ö¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive">&lt;IfDefine&gt;</code> ¥»¥¯¥·¥ç¥ó¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë
- »ØÄꤹ¤ë <var>test</var> ¤Ï¡¢
- ¼¡¤ÎÆó¤Ä¤Î·Á¼°¤Î¤¦¤Á¤Î°ì¤Ä¤ò¤È¤ê¤Þ¤¹:</p>
-
- <ul>
- <li><var>parameter-name</var></li>
-
- <li><code>!</code><var>parameter-name</var></li>
- </ul>
-
- <p>Á°¼Ô¤Î¾ì¹ç¤Ë¤Ï¡¢<var>parameter-name</var> ¤È̾ÉÕ¤±¤é¤ì¤¿¥Ñ¥é¥á¡¼¥¿¤¬
- ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð³«»Ï¤È½ªÎ»¤Î´Ö¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬½èÍý¤µ¤ì¤Þ¤¹¡£
- ¸å¼Ô¤Î¾ì¹ç¤ÏµÕ¤Ç¡¢<em>parameter-name</em> ¤¬»ØÄꤵ¤ì¤Æ<strong>¤¤¤Ê¤¤</strong>
- ¾ì¹ç¤Ë½èÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><var>parameter-name</var> °ú¿ô¤Ï¡¢¥µ¡¼¥Ð¤òµ¯Æ°¤¹¤ëºÝ¤Ë
- <code>httpd</code> ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ë
- <code>-D<var>parameter-</var></code> ¤È¤¤¤¦·Á¤Ç»ØÄꤹ¤ë¤ÈÄêµÁ¤µ¤ì¤Þ¤¹¡£ </p>
-
- <p><code class="directive">&lt;IfDefine&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ï
- Æþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢Ê£¿ô¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤è¤ë¥Æ¥¹¥È¤ò¤¹¤ë¤¿¤á¤Ë»ÈÍѤǤ­¤Þ¤¹¡£
- Îã:</p>
-
- <div class="example"><p><code>
- httpd -DReverseProxy ...<br />
- <br />
- # httpd.conf<br />
- &lt;IfDefine ReverseProxy&gt;<br />
- <span class="indent">
- LoadModule rewrite_module modules/mod_rewrite.so<br />
- LoadModule proxy_module modules/libproxy.so<br />
- </span>
- &lt;/IfDefine&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfModule" id="IfModule">&lt;IfModule&gt;</a> <a name="ifmodule" id="ifmodule">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥â¥¸¥å¡¼¥ë¤Î¸ºß¤¹¤ë¤«¤·¤Ê¤¤¤«¤Ë±þ¤¸¤Æ½èÍý¤µ¤ì¤ë
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥â¥¸¥å¡¼¥ë¼±Ê̻ҤϥС¼¥¸¥ç¥ó 2.1 °Ê¹ß¤Ç»ÈÍѲÄǽ¡£</td></tr>
-</table>
- <p><code>&lt;IfModule <var>test</var>&gt;...&lt;/IfModule&gt;</code>
- ¥»¥¯¥·¥ç¥ó¤Ï¡¢¥â¥¸¥å¡¼¥ë¤¬Â¸ºß¤¹¤ë¤È¤­¤Ë½èÍý¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- »ØÄꤹ¤ë¤¿¤á¤ËÍøÍѤ·¤Þ¤¹¡£
- <code class="directive">&lt;IfModule&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ë
- ´Þ¤Þ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢<var>test</var>
- ¤Ç»ØÄꤹ¤ë¥â¥¸¥å¡¼¥ë¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤È¤­¤Î¤ß½èÍý¤µ¤ì¤Þ¤¹¡£
- ¤â¤· <var>test</var> ¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢³«»Ï¤È½ªÎ»¤Î´Ö¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive">&lt;IfModule&gt;</code> ¥»¥¯¥·¥ç¥ó¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë
- »ØÄꤹ¤ë <var>test</var> ¤Ï¡¢
- ¼¡¤ÎÆó¤Ä¤Î·Á¼°¤Î¤¦¤Á¤Î°ì¤Ä¤ò¤È¤ê¤Þ¤¹¡£</p>
-
- <ul>
- <li><var>module</var></li>
-
- <li>!<var>module</var></li>
- </ul>
-
- <p>Á°¼Ô¤Î¾ì¹ç¤Ï¡¢<var>module</var> ¤È̾ÉÕ¤±¤é¤ì¤¿¥â¥¸¥å¡¼¥ë¤¬
- Apache ¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ì¤Ð
- (¥³¥ó¥Ñ¥¤¥ëºÑ¤ß¤Î¤â¤Î¤È¡¢<code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> ¤òÍøÍѤ·¤Æ
- ưŪ¤ËÆɤ߹þ¤ó¤À¤â¤Î¤ÎξÊý)¡¢
- ³«»Ï¤È½ªÎ»¤Î´Ö¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬½èÍý¤µ¤ì¤Þ¤¹¡£
- ¸å¼Ô¤Î¾ì¹ç¤ÏµÕ¤Ç¡¢<var>module</var> ¤¬ÁȤ߹þ¤Þ¤ì¤Æ<strong>¤¤¤Ê¤¤</strong>
- ¾ì¹ç¤Ë½èÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><var>module</var> °ú¿ô¤Ï¡¢¥â¥¸¥å¡¼¥ë¼±Ê̻Ҥ«
- ¥³¥ó¥Ñ¥¤¥ë¤ò¤·¤¿»þ¤Î¥â¥¸¥å¡¼¥ë¤Î¥Õ¥¡¥¤¥ë̾¤Ç¤¹¡£
- Î㤨¤Ð¡¢<code>rewrite_module</code> ¤Ï¼±Ê̻ҤÇ
- <code>mod_rewrite.c</code> ¤Ï¥Õ¥¡¥¤¥ë̾¤Ç¤¹¡£
- ¥â¥¸¥å¡¼¥ë¤¬Ê£¿ô¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤«¤é¹½À®¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Ê¸»úÎó
- <code>STANDARD20_MODULE_STUFF</code> ¤¬¤¢¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°¤ò
- »È¤Ã¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code class="directive">&lt;IfModule&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ï
- Æþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¢¤ê¡¢
- Ê£¿ô¤Î¥â¥¸¥å¡¼¥ë¤Î¥Æ¥¹¥È¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë»ÈÍѤǤ­¤Þ¤¹¡£</p>
-
- <div class="note">ÆÃÄê¤Î¥â¥¸¥å¡¼¥ë¤Î¸ºß¤Ë´Ø¤ï¤é¤ºÆ°ºî¤¹¤ë
- ÀßÄê¥Õ¥¡¥¤¥ë¤Î¸¶Ëܤ¬É¬ÍפʤȤ­¤Ë¤Î¤ß¤³¤Î¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
- Ä̾ï¤ÎÆ°ºî¤Ç¤Ï¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- <code class="directive">&lt;IfModule&gt;</code> ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤Ë
- Æþ¤ì¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Include" id="Include">Include</a> <a name="include" id="include">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ëÃ椫¤é¾¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ò¼è¤ê¹þ¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Include <var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥ï¥¤¥ë¥É¥«¡¼¥É¤Ë¤è¤ë¥Þ¥Ã¥Á¤Ï 2.0.41 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤«¤é
- ¾¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Ê£¿ô¤Î¥Õ¥¡¥¤¥ë¤ò¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç¤Ë°ìÅÙ¤ËÆɤ߹þ¤à¤¿¤á¤Ë¡¢
- ¥·¥§¥ë·Á¼° (<code>fnmatch</code>) ¤Î¥ï¥¤¥ë¥É¥«¡¼¥Éʸ»ú¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤µ¤é¤Ë¡¢<code class="directive">Include</code> ¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¤È¤½¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥êÆâ¤ÎÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò
- ¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç¤ËÆɤ߹þ¤ó¤Ç¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤È¤·¤Æ½èÍý¤·¤Þ¤¹¡£
- ¤·¤«¤·¡¢¥Ç¥£¥ì¥¯¥È¥êÁ´ÂΤòÆɤ߹þ¤à¤Î¤Ï¤ª´«¤á¤Ç¤­¤Þ¤»¤ó¡£
- ¤Õ¤È¤·¤¿¤³¤È¤«¤é <code>httpd</code> ¤¬Æɤ߹þ¤ß¤Ë¼ºÇÔ¤¹¤ë¤è¤¦¤Ê
- °ì»þ¥Õ¥¡¥¤¥ë¤ò¥Ç¥£¥ì¥¯¥È¥ê¤Ë»Ä¤·¤Æ¤·¤Þ¤¦¤è¤¦¤Ê¤³¤È¤¬¤è¤¯¤¢¤ë¤«¤é¤Ç¤¹¡£</p>
-
- <p>»ØÄꤹ¤ë¥Õ¥¡¥¤¥ë¥Ñ¥¹¤ÏÀäÂХѥ¹¤«¡¢
- <code class="directive"><a href="#serverroot">ServerRoot</a></code> ¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤Î
- ÁêÂХѥ¹¤«¡¢¤Î¤É¤Á¤é¤«¤Ç¤¹¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- Include /usr/local/apache2/conf/ssl.conf<br />
- Include /usr/local/apache2/conf/vhosts/*.conf
- </code></p></div>
-
- <p><code class="directive"><a href="#serverroot">ServerRoot</a></code> ¤«¤é¤ÎÁêÂХѥ¹¤Î¾ì¹ç¤Ï:</p>
-
- <div class="example"><p><code>
- Include conf/ssl.conf<br />
- Include conf/vhosts/*.conf
- </code></p></div>
-
- <p><code>apachectl configtest</code> ¤ò¼Â¹Ô¤¹¤ë¤È¡¢ÀßÄê¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¤¤ë»þ¤Ë
- Æɤ߹þ¤Þ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤¬É½¼¨¤µ¤ì¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- root@host# apachectl configtest<br />
- Processing config file: /usr/local/apache2/conf/ssl.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf<br />
- Syntax OK
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../programs/apachectl.html">apachectl</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="KeepAlive" id="KeepAlive">KeepAlive</a> <a name="keepalive" id="keepalive">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP ¤Î»ý³Ū¤ÊÀܳ¤òÍ­¸ú¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>KeepAlive On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>KeepAlive On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>HTTP/1.0 ¤Î Keep-Alive ³ÈÄ¥¤È HTTP/1.1 ¤Î»ý³ŪÀܳ¤Îµ¡Ç½¤Ï¡¢
- Ê£¿ô¤Î¥ê¥¯¥¨¥¹¥È¤¬Æ±¤¸ TCP ¤ÎÀܳ¤ÇÁ÷¤é¤ì¤ë¡¢Ä¹»þ´Ö»ý³¤¹¤ë
- HTTP ¥»¥Ã¥·¥ç¥ó¤òÄ󶡤·¤Þ¤¹¡£¤¿¤¯¤µ¤ó¤Î²èÁü¤¬
- ´Þ¤Þ¤ì¤ë HTML ¥É¥­¥å¥á¥ó¥È¤Ç¤Ï¾ì¹ç¤Ë¤è¤Ã¤Æ¤ÏÃÙ±ä»þ´Ö¤¬ 50% û½Ì¤µ¤ì¤ë·ë²Ì¤â
- ¤Ç¤Æ¤¤¤Þ¤¹¡£Keep-Alive Àܳ¤òÍ­¸ú¤Ë¤¹¤ë¤Ë¤Ï
- <code>KeepAlive On</code> ¤ÈÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p>HTTP/1.0 ¤ËÂбþ¤·¤¿¥¯¥é¥¤¥¢¥ó¥È¤ÎºÝ¤Ë¤Ï¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤è¤êÆäËÍ׵᤬¤¢¤Ã¤¿¾ì¹ç¤Î¤ß Keep-Alive Àܳ¤È¤Ê¤ê¤Þ¤¹¡£
- ¤µ¤é¤Ë¡¢HTTP/1.0 ¥¯¥é¥¤¥¢¥ó¥È¤Ç¤Ï¡¢¥³¥ó¥Æ¥ó¥Ä¤ÎÍÆÎ̤¬Àè¤Ë
- (ÌõÃí: Í×µá¤ËÂФ·¤Æ±þÅú¤òÊÖ¤¹Á°¤Ë) ¤ï¤«¤ë¾ì¹ç¤Î¤ß Keep-Alive
- Àܳ¤òÍøÍѤǤ­¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢CGI ¤Î½ÐÎϤä SSI ¤Î¥Ú¡¼¥¸¡¢
- ¥µ¡¼¥Ð¤¬À¸À®¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Î¥ê¥¹¥È¤Î¤è¤¦¤ÊưŪ¥³¥ó¥Æ¥ó¥Ä¤ò
- HTTP/1.0 ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¾ì¹ç¤Ë¤Ï Keep-Alive Àܳ¤ò»È¤¨¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- HTTP/1.1 ¤ËÂбþ¤·¤¿¥¯¥é¥¤¥¢¥ó¥È¤ÎºÝ¤Ë¤Ï¡¢
- Æä˻ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¤Ï¥Ç¥Õ¥©¥ë¥È¤È¤·¤Æ»ý³Ū¤ÊÀܳ¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- ¥¯¥é¥¤¥¢¥ó¥È¤¬Í׵᤹¤ì¤Ð¡¢¥³¥ó¥Æ¥ó¥Ä¤ÎÍÆÎ̤òȽÊ̤Ǥ­¤Ê¤¤¤â¤Î¤ò
- »ý³Ū¤ÊÀܳ¤òÄ̤·¤ÆÁ÷¤ë¤¿¤á¤Ë¡¢¥Á¥ã¥ó¥¯¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤¬ÍѤ¤¤é¤ì¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="KeepAliveTimeout" id="KeepAliveTimeout">KeepAliveTimeout</a> <a name="keepalivetimeout" id="keepalivetimeout">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»ý³Ū¤ÊÀܳ¤Ç¼¡¤Î¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤Þ¤Ç¥µ¡¼¥Ð¤¬ÂԤĻþ´Ö</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>KeepAliveTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>KeepAliveTimeout 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>Àܳ¤òÊĤ¸¤ëÁ°¤Ë¡¢Apache ¤¬¼¡¤Î¥ê¥¯¥¨¥¹¥È¤ò²¿ÉÃÂԤĤ«¤ò»ØÄꤷ¤Þ¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿¸å¤Ï¡¢<code class="directive"><a href="#timeout">Timeout</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤Æ
- »ØÄꤵ¤ì¤¿¥¿¥¤¥à¥¢¥¦¥ÈÃͤ¬»È¤ï¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive">KeepAliveTimeout</code> ¤òÂ礭¤ÊÃͤËÀßÄꤹ¤ë¤È¡¢
- Éé²Ù¤Î¹â¤¤¥µ¡¼¥Ð¤Ë¤ª¤¤¤Æ¤Ï¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ÎÌäÂê¤ò°ú¤­µ¯¤³¤¹¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£
- ¥¿¥¤¥à¥¢¥¦¥È¤¬Ä¹¤±¤ì¤ÐŤ¤¤Û¤É¡¢¤è¤ê¿¤¯¤Î¥µ¡¼¥Ð¥×¥í¥»¥¹¤¬
- ³èȯ¤Ç¤Ê¤¤¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤ÎÀܳ¤Î½ªÎ»¤òÂÔ¤Á³¤±¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Limit" id="Limit">&lt;Limit&gt;</a> <a name="limit" id="limit">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>°Ï¤¤¤ÎÃæ¤Ë¤¢¤ë¥¢¥¯¥»¥¹À©¸æ¤ÎŬÍѤòÆÃÄê¤Î HTTP ¥á¥½¥Ã¥É¤Î¤ß¤Ë
-À©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¥¢¥¯¥»¥¹À©¸æ¤Ï¡¢Ä̾ï<strong>Á´¤Æ¤Î</strong>¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤ËÂФ·¤Æ
- ±Æ¶Á¤·¡¢ÉáÄ̤Ϥ³¤ì¤¬Ë¾¤Þ¤·¤¤µóÆ°¤Ç¤¹¡£
- <strong>¤½¤¦¤·¤¿¤³¤È¤«¤é¡¢ÂçÉôʬ¤Î¾ì¹ç¤Ë¤Ï¥¢¥¯¥»¥¹À©¸æ¤Ë´Ø¤ï¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- <code class="directive">&lt;Limit&gt;</code> ¥»¥¯¥·¥ç¥óÆâ¤Ë
- ½ñ¤¯¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ </strong></p>
-
- <p><code class="directive">&lt;Limit&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- ÌÜŪ¤Ï¡¢¥¢¥¯¥»¥¹À©¸æ¤ÎÈϰϤò
- »ØÄꤵ¤ì¤¿ HTTP ¥á¥½¥Ã¥É¤Ë¸ÂÄꤹ¤ë¤¿¤á¤Ç¤¹¡£
- ¤½¤ì°Ê³°¤Î¥á¥½¥Ã¥É¤Ï¡¢<code class="directive">&lt;Limit&gt;</code> ¤Ç°Ï¤ï¤ì¤¿¥¢¥¯¥»¥¹À©¸æ¤Î
- <strong>±Æ¶Á¤ò¼õ¤±¤Þ¤»¤ó</strong>¡£
- °Ê²¼¤ÎÎã¤Ï¡¢<code>POST</code>, <code>PUT</code>, <code>DELETE</code> ¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¤Î¤ß¥¢¥¯¥»¥¹¤ÎÀ©¸æ¤ò¹Ô¤Ê¤¤¡¢
- ¤½¤ì°Ê³°¤Î¥á¥½¥Ã¥É¤Ë¤Ä¤¤¤Æ¤ÏÀ©¸Â¤·¤Þ¤»¤ó:</p>
-
- <div class="example"><p><code>
- &lt;Limit POST PUT DELETE&gt;<br />
- <span class="indent">
- Require valid-user<br />
- </span>
- &lt;/Limit&gt;
- </code></p></div>
-
- <p>¥á¥½¥Ã¥É̾¤Ë¤Ï°Ê²¼¤ÎÃ椫¤é°ì¤Ä°Ê¾å¤òÎóµó¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:
- <code>GET</code>,
- <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
- <code>CONNECT</code>, <code>OPTIONS</code>,
- <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
- <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
- <code>LOCK</code>, <code>UNLOCK</code>. <strong>¥á¥½¥Ã¥É̾¤Ï
- Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤¹¡£</strong> <code>GET</code> ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ë¤Ï
- <code>HEAD</code> ¥ê¥¯¥¨¥¹¥È¤Ë¤âÀ©¸Â¤¬¤«¤«¤ê¤Þ¤¹¡£<code>TRACE</code>
- ¥á¥½¥Ã¥É¤ËÀ©¸Â¤ò¤«¤±¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</p>
-
- <div class="warning">¥¢¥¯¥»¥¹À©¸æ¤¬ÌÜŪ¤Î¾ì¹ç¤Ï
- <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤ÎÂå¤ï¤ê¤Ë <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ·¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
- <code class="directive"><a href="#limitexcept">&lt;LimitExcept&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤Ç¤ÏÉÔÆÃÄê¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¤âËɸæ¤Ç¤­¤ë¤«¤é¤Ç¤¹¡£</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitExcept" id="LimitExcept">&lt;LimitExcept&gt;</a> <a name="limitexcept" id="limitexcept">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»ØÄꤵ¤ì¤¿¤â¤Î°Ê³°¤Î HTTP ¥á¥½¥Ã¥É¤Ë¥¢¥¯¥»¥¹À©¸æ¤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;LimitExcept&gt;</code> ¤È
- <code>&lt;/LimitExcept&gt;</code> ¤Ï¡¢°ú¿ô¤Ë
- <strong>´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤</strong>
- HTTP ¤Î¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤ËŬÍѤ¹¤ë¤¿¤á¤Î¥¢¥¯¥»¥¹À©¸æ
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò³ç¤ë¤¿¤á¤ËÍøÍѤ·¤Þ¤¹¡£
- ¤Ä¤Þ¤ê¡¢<code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ÎÈ¿ÂФÎÆ°ºî¤ò¤·¡¢
- ɸ½à¤Î¥á¥½¥Ã¥É¤Èɸ½à³°¤ä̤ǧ¼±¤Î¥á¥½¥Ã¥É¤Î¾ì¹ç¤ÎξÊý¤òÀßÄê¤Ç¤­¤Þ¤¹¡£
- <code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> ¤Î¥É¥­¥å¥á¥ó¥È¤â
- Ê»¤»¤Æ»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- &lt;LimitExcept POST GET&gt;<br />
- <span class="indent">
- Require valid-user<br />
- </span>
- &lt;/LimitExcept&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitInternalRecursion" id="LimitInternalRecursion">LimitInternalRecursion</a> <a name="limitinternalrecursion" id="limitinternalrecursion">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆâÉô¥ê¥À¥¤¥ì¥¯¥È¤ÈÆþ¤ì»Ò¤Ë¤Ê¤Ã¤¿¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤ÎºÇÂç¿ô¤ò·èÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LimitInternalRecursion <var>number</var> [<var>number</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LimitInternalRecursion 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0.47 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p>ÆâÉô¥ê¥À¥¤¥ì¥¯¥È¤ÏÎ㤨¤Ð <code class="directive">Action</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- »È¤Ã¤Æ¤¤¤ë¤È¤­¤Ëµ¯¤³¤ê¤Þ¤¹¡£<code class="directive">Action</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¸µ¡¹¤Î¥ê¥¯¥¨¥¹¥È¤ò CGI ¥¹¥¯¥ê¥×¥È¤ËÆâÉô¥ê¥À¥¤¥ì¥¯¥È¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
- ¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤Ï¤¤¤¯¤Ä¤«¤Î URI ¤ËÂФ·¤Æ¡¢¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¤È¤­¤Ë
- ²¿¤¬µ¯¤³¤ë¤«¤òÄ´¤Ù¤ë¤¿¤á¤Î Apache ¤Îµ¡¹½¤Ç¤¹¡£Î㤨¤Ð¡¢<code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
- ¤Ï <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤¬¥ê¥¹¥È¤¹¤ë¥Õ¥¡¥¤¥ë¤òÄ´¤Ù¤ë¤¿¤á¤Ë¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤ò»È¤¤¤Þ¤¹¡£</p>
-
- <p><code class="directive">LimitInternalRecursion</code> ¤ÏÆâÉô¥ê¥À¥¤¥ì¥¯¥È¤ä
- ¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤¬Ìµ¸Â¥ë¡¼¥×¤Ë´Ù¤Ã¤¿¤È¤­¤Î¥µ¡¼¥Ð¥¯¥é¥Ã¥·¥å¤òËɤ®¤Þ¤¹¡£
- ÉáÄÌ¡¢¤½¤Î¤è¤¦¤Ê¥ë¡¼¥×¤ÏÀßÄê¤Ë¼ºÇÔ¤·¤¿¤È¤­¤ËȯÀ¸¤·¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥ê¥¯¥¨¥¹¥ÈËè¤Ëɾ²Á¤µ¤ì¤ë¡¢Æó¤Ä¤Î°ã¤¦¸Â³¦Ãͤò
- ÀßÄꤷ¤Þ¤¹¡£ºÇ½é¤Î <var>number</var> ¤Ï¡¢µ¯¤³¤êÆÀ¤ë
- ÆâÉô¥ê¥¯¥¨¥¹¥È¤ÎºÇÂçÃͤòÀßÄꤷ¤Þ¤¹¡£Æó¤Ä¤á¤Î <var>number</var> ¤Ï
- ¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤¬Æþ¤ì»Ò¤Ë¤Ç¤­¤ë¿¼¤µ¤òÀßÄꤷ¤Þ¤¹¡£<var>number</var> ¤ò
- °ì¤Ä¤À¤±»ØÄꤷ¤¿¤È¤­¤Ï¡¢Î¾Êý¤Î¸Â³¦Ãͤˤ½¤ÎÃͤ¬ÀßÄꤵ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- LimitInternalRecursion 5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestBody" id="LimitRequestBody">LimitRequestBody</a> <a name="limitrequestbody" id="limitrequestbody">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤«¤éÁ÷¤é¤ì¤ë HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ü¥Ç¥£¤Î
-ÁíÎ̤òÀ©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LimitRequestBody <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LimitRequestBody 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥ê¥¯¥¨¥¹¥È¥Ü¥Ç¥£¤Ëµö¤µ¤ì¤ë¥Ð¥¤¥È¿ô¡¢<var>bytes</var>
- ¤ò 0 (̵À©¸Â¤ò°ÕÌ£¤·¤Þ¤¹) ¤«¤é 2147483647 (2GB) ¤Þ¤Ç¤Î¿ôÃͤǻØÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="directive">LimitRequestBody</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬½ñ¤«¤ì¤¿¥³¥ó¥Æ¥­¥¹¥È
- (¥µ¡¼¥ÐÁ´ÂΡ¢¥Ç¥£¥ì¥¯¥È¥ê¡¢¥Õ¥¡¥¤¥ë¡¢¥í¥±¡¼¥·¥ç¥ó) Æâ¤Ç
- µöÍƤ¹¤ë HTTP ¥ê¥¯¥¨¥¹¥È¥á¥Ã¥»¡¼¥¸¥Ü¥Ç¥£¤Î¥µ¥¤¥º¤ËÀ©¸Â¤ò¤«¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤¬¤½¤ÎÀ©¸ÂÃͤò±Û¤¨¤Æ¤¤¤ì¤Ð¡¢
- ¥µ¡¼¥Ð¤Ï¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤»¤º¤Ë¥¨¥é¡¼¤òÊÖ¤·¤Þ¤¹¡£
- ÉáÄ̤Υꥯ¥¨¥¹¥È¥á¥Ã¥»¡¼¥¸¥Ü¥Ç¥£¤Î¥µ¥¤¥º¤Ï¡¢¥ê¥½¡¼¥¹¤Î¼ïÎà¤ä
- µö²Ä¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É¤Ë¤è¤Ã¤ÆÂ礭¤¯ÊѤï¤ê¤Þ¤¹¡£
- CGI ¥¹¥¯¥ê¥×¥È¤Ï¡¢¤è¤¯¾ðÊó¤ò¼õ¿®¤¹¤ë¤¿¤á¤Ë
- ¥á¥Ã¥»¡¼¥¸¥Ü¥Ç¥£¤ò»È¤¤¤Þ¤¹¡£
- <code>PUT</code> ¥á¥½¥Ã¥É¤Î¼ÂÁõ¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃͤȤ·¤Æ
- ¾¯¤Ê¤¯¤È¤â¤¢¤ë¥ê¥½¡¼¥¹¤ËÂФ·¤Æ¥µ¡¼¥Ð¤¬¼õ¤±ÉÕ¤±¤è¤¦¤È¤¹¤ë
- ɽ¸½¤ÎÂ礭¤µ¤Û¤É¤ÎÃͤòɬÍפȤ·¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ´ÉÍý¼Ô¤Ë¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î°Û¾ï¤Ê¥ê¥¯¥¨¥¹¥È¤òÀ©¸æ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢
- ²¿¤é¤«¤Î·Á¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â (ÌõÃí:DoS) ¤òÈò¤±¤ë¤Î¤ËÍ­¸ú¤Ç¤¹¡£</p>
-
- <p>¤¢¤ë¾ì½ê¤Ø¤Î¥Õ¥¡¥¤¥ë¥¢¥Ã¥×¥í¡¼¥É¤òµö²Ä¤¹¤ë¾ì¹ç¤Ë¡¢
- ¥¢¥Ã¥×¥í¡¼¥É¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤ò 100K ¤ËÀ©¸Â¤·¤¿¤±¤ì¤Ð¡¢
- °Ê²¼¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- LimitRequestBody 102400
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestFields" id="LimitRequestFields">LimitRequestFields</a> <a name="limitrequestfields" id="limitrequestfields">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Î¿ô¤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LimitRequestFields <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LimitRequestFields 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><var>number</var> ¤Ë¤Ï¡¢0 (̵À©¸Â¤ò°ÕÌ£¤·¤Þ¤¹) ¤«¤é 32767
- ¤Þ¤Ç¤ÎÀ°¿ô¤ò»ØÄꤷ¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃͤϡ¢Äê¿ô <code>DEFAULT_LIMIT_REQUEST_FIELDS</code>
- ¤Ë¤è¤ê¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄêµÁ¤µ¤ì¤Þ¤¹ (ÇÛÉÛ»þ¤Ë¤Ï 100 ¤È»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹)¡£</p>
-
- <p>LimitRequestBody ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥µ¡¼¥Ð´ÉÍý¼Ô¤¬ HTTP ¥ê¥¯¥¨¥¹¥ÈÃæ¤Ë¤ª¤¤¤Æµö²Ä¤¹¤ë¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¿ô¤ò
- »ØÄꤷ¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ï¤³¤ÎÃͤˤÏÄ̾ï¤Î¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Ë´Þ¤Þ¤ì¤ë¤Ç¤¢¤í¤¦
- ¥Õ¥£¡¼¥ë¥É¤Î¿ô¤è¤êÂ礭¤ÊÃͤ¬É¬ÍפȤ·¤Þ¤¹¡£
- ¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤ê»È¤ï¤ì¤¿Í×µá¥Ø¥Ã¥À¡¼¥Õ¥£¡¼¥ë¥É¤Î¿ô¤¬
- 20 ¤òĶ¤¨¤ë¤³¤È¤Ï¤Û¤È¤ó¤É¤¢¤ê¤Þ¤»¤ó¤¬¡¢
- ¤³¤ì¤Ï¼ï¡¹¤Î¥¯¥é¥¤¥¢¥ó¥È¤Î¼ÂÁõ¤è¤Ã¤ÆÊѤï¤ê¡¢
- ¾ÜºÙ¤Ê¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ò¤¹¤ë¤¿¤á¤Î¥Ö¥é¥¦¥¶¤ÎÀßÄê¤Þ¤Ç¤Ë¤â
- ±Æ¶Á¤µ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¥ª¥×¥·¥ç¥ó¤Î HTTP ³ÈÄ¥¤Ï¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ò»È¤Ã¤Æ¸½¤µ¤ì¤ë¾ì¹ç¤¬
- ¿¤¯¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ´ÉÍý¼Ô¤Ë¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î°Û¾ï¤Ê¥ê¥¯¥¨¥¹¥È¤òÀ©¸æ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢
- ²¿¤é¤«¤Î·Á¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â (ÌõÃí:DoS) ¤òÈò¤±¤ë¤Î¤ËÍ­¸ú¤Ç¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¤Î¥Õ¥£¡¼¥ë¥É¤¬Â¿²á¤®¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¥¨¥é¡¼±þÅú¤¬
- ÉáÄ̤Υ¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤µ¤ì¤ë¤è¤¦¤Ê»þ¤Ï¤³¤ÎÃͤòÁý¤ä¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- LimitRequestFields 50
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestFieldSize" id="LimitRequestFieldSize">LimitRequestFieldSize</a> <a name="limitrequestfieldsize" id="limitrequestfieldsize">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤Î
-¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LimitRequestFieldsize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LimitRequestFieldsize 8190</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥ÀÆâ¤Ë´Þ¤á¤ë¤³¤È¤Î¤Ç¤­¤ë
- ¥Ð¥¤¥È¿ô¡¢<var>bytes</var> ¤ò
- 0 ¤«¤é¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄêµÁ¤µ¤ì¤ëÄê¿ô
- <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (ÇÛÉÛ»þ¤Ë¤Ï 8192 ¤È»ØÄê)
- ¤Ç»ØÄꤵ¤ì¤¿ÃͤޤǤοô»ú¤Ç»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="directive">LimitRequestFieldSize</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥µ¡¼¥Ð¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤Ë»ØÄꤷ¤¿¥¤¥ó¥×¥Ã¥È¥Ð¥Ã¥Õ¥¡ÍÆḬ̂ʲ¼¤Ë
- HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ÎµöÍƤµ¤ì¤ë¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃͤȤ·¤Æ¡¢
- Ä̾ï¤Î¥¯¥é¥¤¥¢¥ó¥È¥ê¥¯¥¨¥¹¥È¤«¤éÁ÷¤é¤ì¤¿¸Ä¡¹¤Î¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Ë
- ½½Ê¬Â­¤ëÂ礭¤µ¤òɬÍפȤ·¤Þ¤¹¡£
- ÉáÄ̤Υꥯ¥¨¥¹¥È¥Ø¥Ã¥À¤Î¥µ¥¤¥º¤Ï¡¢¸Ä¡¹¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤êÂ礭¤¯ÊѤï¤ê¡¢
- ¾ÜºÙ¤Ê¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤ò¤¹¤ë¤¿¤á¤Î¥Ö¥é¥¦¥¶¤ÎÀßÄê¤Þ¤Ç¤Ë¤â
- ±Æ¶Á¤µ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ´ÉÍý¼Ô¤Ë¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î°Û¾ï¤Ê¥ê¥¯¥¨¥¹¥È¤òÀ©¸æ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢
- ²¿¤é¤«¤Î·Á¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â (ÌõÃí:DoS) ¤òÈò¤±¤ë¤Î¤ËÍ­¸ú¤Ç¤¹¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- LimitRequestFieldSize 4094
- </code></p></div>
-
- <div class="note">Ä̾ï¤Ï¥Ç¥Õ¥©¥ë¥È¤«¤éÊѹ¹¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitRequestLine" id="LimitRequestLine">LimitRequestLine</a> <a name="limitrequestline" id="limitrequestline">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¹Ô¤Î¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LimitRequestLine <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LimitRequestLine 8190</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢HTTP ¥ê¥¯¥¨¥¹¥È¹ÔÆâ¤ÇµöÍƤµ¤ì¤ë¥Ð¥¤¥È¿ô
- <var>bytes</var> ¤ò 0 ¤«¤é¥³¥ó¥Ñ¥¤¥ë»þ¤ÎÄê¿ô
- <code>DEFAULT_LIMIT_REQUEST_LINE</code> (ÇÛÉÛ»þ¤Ë¤Ï 8190 ¤È»ØÄê)
- ¤Ç»ØÄꤵ¤ì¤¿ÃͤޤǤοô»ú¤Ç»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="directive">LimitRequestLine</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢¥µ¡¼¥Ð´ÉÍý¼Ô¤Ï
- ¥µ¡¼¥Ð¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤Ë»ØÄꤷ¤¿¥¤¥ó¥×¥Ã¥È¥Ð¥Ã¥Õ¥¡ÍÆḬ̂ʲ¼¤Ë
- ¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¹Ô¤Î¥µ¥¤¥º¤ÎÀ©¸Â¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¹Ô¤Ï¡¢HTTP¥á¥½¥Ã¥É¡¢URI¡¢¥×¥í¥È¥³¥ë¥Ð¡¼¥¸¥ç¥ó¤«¤éÀ®¤Ã¤Æ¤ª¤ê¡¢
- <code class="directive">LimitRequestLine</code> ¤Ï¥µ¡¼¥Ð¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ
- µöÍƤ¹¤ë¥ê¥¯¥¨¥¹¥È URI ¤ÎŤµ¤òÀ©¸Â¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ï¡¢<code>GET</code> ¥ê¥¯¥¨¥¹¥È¤Î¥¯¥¨¥êÉôʬ¤â´Þ¤á¤Æ¡¢¥ê¥½¡¼¥¹¤Î̾Á°¤¬Æþ¤ë¤Ë­¤ë
- Â礭¤µ¤òɬÍפȤ·¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ´ÉÍý¼Ô¤Ë¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î°Û¾ï¤Ê¥ê¥¯¥¨¥¹¥È¤òÀ©¸æ¤Ç¤­¤ë¤è¤¦¤Ë¤·¡¢
- ²¿¤é¤«¤Î·Á¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â (ÌõÃí:DoS) ¤òÈò¤±¤ë¤Î¤ËÍ­¸ú¤Ç¤¹¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- LimitRequestLine 4094
- </code></p></div>
-
- <div class="note">Ä̾ï¤Ï¥Ç¥Õ¥©¥ë¥È¤«¤éÊѹ¹¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£</div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LimitXMLRequestBody" id="LimitXMLRequestBody">LimitXMLRequestBody</a> <a name="limitxmlrequestbody" id="limitxmlrequestbody">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>XML ·Á¼°¤Î¥ê¥¯¥¨¥¹¥È¤Î¥Ü¥Ç¥£¤Î¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LimitXMLRequestBody <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LimitXMLRequestBody 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>XML ·Á¼°¤Î¥ê¥¯¥¨¥¹¥È¤Î¥Ü¥Ç¥£¤ÎºÇÂçÃͤò (¥Ð¥¤¥Èñ°Ì¤Ç) À©¸Â¤·¤Þ¤¹¡£
- ÃÍ¤Ë <code>0</code> ¤ò»ØÄꤹ¤ë¤È¥Á¥§¥Ã¥¯¤ò̵¸ú¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- LimitXMLRequestBody 0
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Location" id="Location">&lt;Location&gt;</a> <a name="location" id="location">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>°Ï¤ó¤À¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥Þ¥Ã¥Á¤¹¤ë URL ¤Î¤ß¤ËŬÍÑ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;Location&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- URL ¤Ë¤è¤êÃæ¤Ë½ñ¤«¤ì¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈϰϤòÀ©¸Â¤·¤Þ¤¹¡£
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È»÷¤Æ¤¤¤Æ¡¢
- <code>&lt;/Location&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç½ªÎ»¤¹¤ë
- ¥µ¥Ö¥»¥¯¥·¥ç¥ó¤ò³«»Ï¤·¤Þ¤¹¡£
- <code class="directive">&lt;Location&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ï¡¢
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤È
- <code>.htaccess</code> ¤ÎÆɤ߹þ¤ß¤Î¸å¡¢
- <code class="directive"><a href="#files">&lt;Files&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ò
- ŬÍѤ·¤¿¸å¤Ë¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸½¤ì¤¿½ç¤Ë½èÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive">&lt;Location&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ï
- ´°Á´¤Ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤È´ØÏ¢¤»¤º¤ËÆ°ºî¤·¤Þ¤¹¡£¤³¤Î¤³¤È¤«¤éƳ¤«¤ì¤ë
- ·ë²Ì¤Ë¤Ï¤¤¤Ä¤¯¤«Ãí°Õ¤¹¤ëÅÀ¤¬¤¢¤ê¤Þ¤¹¡£ºÇ¤â½ÅÍפʤâ¤Î¤Ï¡¢
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤ؤΥ¢¥¯¥»¥¹À©¸æ¤Ë <code class="directive">&lt;Location&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤Ù¤­¤Ç¤Ï¤Ê¤¤
- ¤È¤¤¤¦¤³¤È¤Ç¤¹¡£Ê£¿ô¤Î URL ¤¬¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎƱ¤¸°ÌÃ֤˥ޥåפµ¤ì¤ë
- ²Äǽ¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤Î¤è¤¦¤Ê¥¢¥¯¥»¥¹À©¸æ¤Ï²óÈò¤µ¤ì¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬
- ¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="note"><h3>¤¤¤Ä <code class="directive">&lt;Location&gt;</code> ¤ò»È¤¦¤«</h3>
-
- <p><code class="directive">&lt;Location&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à³°¤Î¥³¥ó¥Æ¥ó¥Ä¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òŬÍѤ¹¤ë¤È¤­¤Ë
- »ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¸ºß¤¹¤ë¥³¥ó¥Æ¥ó¥Ä¤ËÂФ·¤Æ¤Ï¡¢
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ¤È <code class="directive"><a href="#files">&lt;Files&gt;</a></code> ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
- Îã³°¤Ï¡¢<code>&lt;Location /&gt;</code> ¤Ç¡¢¤³¤ì¤Ï¥µ¡¼¥ÐÁ´ÂΤËÂФ·¤Æ
- ÀßÄê¤òŬÍѤ¹¤ë´Êñ¤ÊÊýË¡¤Ç¤¹¡£</p>
- </div>
-
- <p>Á´¤Æ¤Î (¥×¥í¥­¥·°Ê³°¤Î) ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¡¢
- URL ¤Ï <code>/path/</code> ¤È¤¤¤¦¡¢
- ÀÜƬ¼­ <code>http://servername</code> ¤ò´Þ¤Þ¤Ê¤¤·Á¤Ç¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- ¥×¥í¥­¥·¥ê¥¯¥¨¥¹¥È¤Î¾ì¹ç¤Ë¤Ï¡¢<code>scheme://servername/path</code>
- ¤È¤¤¤¦ÀÜƬ¼­¤ò´Þ¤à·Á¤Ç¥Þ¥Ã¥Á¤·¡¢ÀÜƬ¼­¤ò´Þ¤á¤Æ»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>URL ¤Ë¤Ï¥ï¥¤¥ë¥É¥«¡¼¥É¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code>?</code> ¤ÏǤ°Õ¤Î°ìʸ»ú¡¢<code>*</code> ¤ÏǤ°Õ¤Îʸ»úÎó¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£ </p>
-
- <p><code>~</code> ¤È¤¤¤¦Ê¸»ú¤òÄɲ乤뤳¤È¤Ç¡¢³ÈÄ¥Àµµ¬É½¸½¤ò
- ÍøÍѤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- &lt;Location ~ "/(extra|special)/data"&gt;
- </code></p></div>
-
- <p>¤Ï URL ¤Ë <code>/extra/data</code> ¤« <code>/special/data</code> ¤È¤¤¤¦Ê¸»úÎó¤¬
- ´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- <code class="directive"><a href="#locationmatch">&lt;LocationMatch&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="directive">&lt;Location&gt;</code> ¤ÎÀµµ¬É½¸½
- ÈǤȤޤ俤¯Æ±¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£</p>
-
- <p><code class="directive">&lt;Location&gt;</code> µ¡Ç½¤Ï¡¢<code class="directive"><a href="#sethandler">SetHandler</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- Áȹç¤ï¤»¤ÆÍøÍѤ¹¤ë¤ÈÆäËÊØÍø¤Ç¤¹¡£
- Î㤨¤Ð¡¢<code>foo.com</code> ¤Î¥Ö¥é¥¦¥¶¤«¤é¤Î¤ß¥¹¥Æ¡¼¥¿¥¹¤Î»²¾È¤òÍ­¸ú¤Ë¤·¤¿¤±¤ì¤Ð¡¢
- ¼¡¤Î¤è¤¦¤Ë¤¹¤ì¤ÐÎɤ¤¤Ç¤·¤ç¤¦¡£</p>
-
- <div class="example"><p><code>
- &lt;Location /status&gt;<br />
- <span class="indent">
- SetHandler server-status<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-<div class="note"><h3>/ (¥¹¥é¥Ã¥·¥å) ¤Ë´Ø¤¹¤ëÃí</h3>
- <p>¥¹¥é¥Ã¥·¥åʸ»ú¤Ï¡¢URL Æâ¤Ë¸½¤ì¤ë¾ì½ê¤Ë±þ¤¸¤ÆÊѲ½¤¹¤ë
- ÆÃÊ̤ʰÕÌ£¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¤ª¤¤¤ÆÍøÍѤ¹¤ë¾ì¹ç¤Ë¤ÏÊ£¿ô¤Î¥¹¥é¥Ã¥·¥å¤Ç¤â°ì¤Ä¤Î
- ¥¹¥é¥Ã¥·¥å¤È¤·¤Æ°·¤ï¤ì¤ë¤³¤È¤¬Â¿¤¤¤Ç¤¹¤¬¡¢
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢<code>/home///foo</code> ¤Ï
- <code>/home/foo</code> ¤ÈƱ¤¸¤¤¤Ã¤¿¤è¤¦¤Ë)
- URL ¤Ë¤ª¤¤¤Æ¤Ïɬ¤º¤·¤â¤½¤¦¤Ê¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- <code class="directive"><a href="#locationmatch">&lt;LocationMatch&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤äÀµµ¬É½¸½¤òÍøÍѤ·¤¿
- <code class="directive">&lt;Location&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢
- Ê£¿ô¤Î¥¹¥é¥Ã¥·¥å¤Ë¥Þ¥Ã¥Á¤µ¤»¤¿¤¤¤È¤­¤Ë¤Ï¡¢¡¢ÌÀ¼¨Åª¤Ëµ­½Ò¤¹¤ë
- ɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢<code>&lt;LocationMatch ^/abc&gt;</code> ¤Ï¡¢
- <code>/abc</code> ¤È¤¤¤¦¥ê¥¯¥¨¥¹¥È URL ¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¤¬¡¢
- <code>//abc</code> ¤È¤¤¤¦¥ê¥¯¥¨¥¹¥È URL ¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Þ¤»¤ó¡£
- (Àµµ¬É½¸½¤Ç¤Ê¤¤) <code class="directive">&lt;Location&gt;</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- proxy ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤ÆÍøÍѤ¹¤ëºÝ¤Ë¤ÏƱÍͤﶤëÉñ¤¤¤ò¤·¤Þ¤¹¤¬¡¢
- (Àµµ¬É½¸½¤Ç¤Ê¤¤) <code class="directive">&lt;Location&gt;</code> ¤ò proxy
- ¤Ç¤Ê¤¤¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤ÆÍøÍѤ¹¤ëºÝ¤Ë¤Ï¡¢
- °ì¤Ä¤Î¥¹¥é¥Ã¥·¥å¤ÇÊ£¿ô¤Î¥¹¥é¥Ã¥·¥å¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
- Î㤨¤Ð¡¢<code>&lt;Location /abc/def&gt;</code> ¤È»ØÄꤷ¡¢
- <code>/abc//def</code> ¤È¤¤¤¦¥ê¥¯¥¨¥¹¥È¤¬¤¢¤ì¤Ð¡¢
- ¥Þ¥Ã¥Á¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p></div>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LocationMatch" id="LocationMatch">&lt;LocationMatch&gt;</a> <a name="locationmatch" id="locationmatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>°Ï¤ó¤À¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤¹¤ë URL ¤Î¤ß¤Ë
-ŬÍÑ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;LocationMatch&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <code class="directive"><a href="#location">&lt;Location&gt;</a></code> ¤ÈƱ¤¸ÍͤË
- URL ¤Ë¤è¤êÃæ¤Ë½ñ¤«¤ì¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍÑÈϰϤòÀ©¸Â¤·¤Þ¤¹¡£
- ⤷¡¢°ú¿ô¤ÏÉáÄ̤Îʸ»úÎó¤Ç¤Ï¤Ê¤¯¡¢Àµµ¬É½¸½¤È¤Ê¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢</p>
-
- <div class="example"><p><code>
- &lt;LocationMatch "/(extra|special)/data"&gt;
- </code></p></div>
-
- <p>¤Ï URL ¤Ë <code>/extra/data</code> ¤« <code>/special/data</code>
- ¤È¤¤¤¦Ê¸»úÎ󤬴ޤޤì¤Æ¤¤¤ë¾ì¹ç¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogLevel" id="LogLevel">LogLevel</a> <a name="loglevel" id="loglevel">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ErrorLog ¤Î¾éĹÀ­¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LogLevel <var>level</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LogLevel warn</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">LogLevel</code> ¤Ï¡¢¥¨¥é¡¼¥í¥° (<code class="directive"><a href="#errorlog">ErrorLog</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ¸«¤Æ¤¯¤À¤µ¤¤) ¤Øµ­Ï¿¤¹¤ë¥á¥Ã¥»¡¼¥¸¤Î¾éĹÀ­¤òÄ´À°¤·¤Þ¤¹¡£
- °Ê²¼¤Î <var>level</var> ¤ò»ØÄê¤Ç¤­¡¢½ç¤Ë½ÅÍ×ÅÙ¤¬²¼¤¬¤Ã¤Æ¤¤¤­¤Þ¤¹¡£</p>
-
- <table class="bordered">
- <tr>
- <th><strong>¥ì¥Ù¥ë</strong> </th>
-
- <th><strong>ÀâÌÀ</strong> </th>
-
- <th><strong>Îã</strong> </th>
- </tr>
-
- <tr>
- <td><code>emerg</code> </td>
-
- <td>¶ÛµÞ - ¥·¥¹¥Æ¥à¤¬ÍøÍѤǤ­¤Ê¤¤</td>
-
- <td>Child cannot open lock file. Exiting
- (»Ò¥×¥í¥»¥¹¤¬¥í¥Ã¥¯¥Õ¥¡¥¤¥ë¤ò³«¤±¤Ê¤¤¤¿¤á½ªÎ»¤·¤¿)</td>
- </tr>
-
- <tr>
- <td><code>alert</code> </td>
-
- <td>ľ¤Á¤ËÂн褬ɬÍ×</td>
-
- <td>getpwuid: couldn't determine user name from uid
- (getpwuid: UID ¤«¤é¥æ¡¼¥¶Ì¾¤òÆÃÄê¤Ç¤­¤Ê¤«¤Ã¤¿)</td>
- </tr>
-
- <tr>
- <td><code>crit</code> </td>
-
- <td>Ã×̿Ū¤Ê¾õÂÖ</td>
-
- <td>socket: Failed to get a socket, exiting child
- (socket: ¥½¥±¥Ã¥È¤¬ÆÀ¤é¤ì¤Ê¤¤¤¿¤á¡¢»Ò¥×¥í¥»¥¹¤ò½ªÎ»¤µ¤»¤¿)</td>
- </tr>
-
- <tr>
- <td><code>error</code> </td>
-
- <td>¥¨¥é¡¼</td>
-
- <td>Premature end of script headers
- (¥¹¥¯¥ê¥×¥È¤Î¥Ø¥Ã¥À¤¬Â­¤ê¤Ê¤¤¤Þ¤Þ¤Ç½ª¤ï¤Ã¤¿)</td>
- </tr>
-
- <tr>
- <td><code>warn</code> </td>
-
- <td>·Ù¹ð</td>
-
- <td>child process 1234 did not exit, sending another SIGHUP
- (»Ò¥×¥í¥»¥¹ 1234 ¤¬½ªÎ»¤·¤Ê¤«¤Ã¤¿¡£¤â¤¦°ìÅÙ SIGHUP ¤òÁ÷¤ë)</td>
- </tr>
-
- <tr>
- <td><code>notice</code> </td>
-
- <td>ÉáÄ̤À¤¬¡¢½ÅÍפʾðÊó</td>
-
- <td>httpd: caught SIGBUS, attempting to dump core in ...
- (httpd: SIGBUS ¥·¥°¥Ê¥ë¤ò¼õ¤±¡¢... ¤Ø¥³¥¢¥À¥ó¥×¤ò¤·¤¿)</td>
- </tr>
-
- <tr>
- <td><code>info</code> </td>
-
- <td>ÄɲþðÊó</td>
-
- <td>"Server seems busy, (you may need to increase
- StartServers, or Min/MaxSpareServers)..." (¡Ö¥µ¡¼¥Ð¤ÏÉé²Ù¤¬¹â¤¤¡¢
- (StartServers ¤ä Min/MaxSpareServers ¤ÎÃͤòÁý¤ä¤¹É¬Íפ¬¤¢¤ë¤«¤â)¡×)</td>
- </tr>
-
- <tr>
- <td><code>debug</code> </td>
-
- <td>¥Ç¥Ð¥Ã¥°¥á¥Ã¥»¡¼¥¸</td>
-
- <td>"Opening config file ..." (ÀßÄê¥Õ¥¡¥¤¥ë¤ò³«¤¤¤Æ¤¤¤ë...)</td>
- </tr>
- </table>
-
- <p>ÆÃÄê¤Î¥ì¥Ù¥ë¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢¤½¤ì¤è¤ê¹â¤¤¥ì¥Ù¥ë¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤¬
- Êó¹ð¤µ¤ì¤Þ¤¹¡£
- <em>Î㤨¤Ð</em>¡¢<code>LogLevel info</code> ¤Ë»ØÄꤹ¤ë¤È¡¢
- <code>notice</code> ¤È <code>warn</code> ¤âÊó¹ð¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤Ê¤ª <code>crit</code> °Ê¾å¤Î¥ì¥Ù¥ë¤ò»ØÄꤹ¤ë¤³¤È¤¬¿ä¾©¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- LogLevel notice
- </code></p></div>
-
- <div class="note"><h3>Ãí</h3>
- <p>¥Õ¥¡¥¤¥ë¤Ë¥í¥°¤ò½ÐÎϤ¹¤ë¾ì¹ç¡¢<code>notice</code>
- ¥ì¥Ù¥ë¤Î¥á¥Ã¥»¡¼¥¸¤ÏÍÞÀ©¤µ¤ì¤º¡¢¤¹¤Ù¤Æ¥í¥°¤Ë½ÐÎϤµ¤ì¤Þ¤¹¡£
- ¤·¤«¤· <code>syslog</code> ¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¤³¤ì¤ÏÅö¤Æ¤Ï¤Þ¤ê¤Þ¤»¤ó¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxKeepAliveRequests" id="MaxKeepAliveRequests">MaxKeepAliveRequests</a> <a name="maxkeepaliverequests" id="maxkeepaliverequests">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»ý³Ū¤ÊÀܳ¾å¤Çµö²Ä¤µ¤ì¤ë¥ê¥¯¥¨¥¹¥È¤Î¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MaxKeepAliveRequests <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>MaxKeepAliveRequests 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">MaxKeepAliveRequests</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <code class="directive"><a href="#keepalive">KeepAlive</a></code> ¤¬Í­¸ú¤Ê¾ì¹ç¤Ë¡¢
- °ì²ó¤ÎÀܳ¤Ç¼õ¤±ÉÕ¤±²Äǽ¤Ê¥ê¥¯¥¨¥¹¥È¤Î¿ô¤òÀ©¸Â¤·¤Þ¤¹¡£
- <code>0</code> ¤ËÀßÄꤷ¤Æ¤¤¤ì¤Ð¡¢¼õ¤±ÉÕ¤±¤ë¥ê¥¯¥¨¥¹¥È¤Ï̵À©¸Â¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ÎÀßÄê¤Ï¡¢¥µ¡¼¥ÐÀ­Ç½¤ò¸þ¾å¤µ¤»¤ë¤¿¤á¤Ë¡¢Â礭¤Ê¿ôÃͤò»ØÄꤹ¤ë¤³¤È´«¤á¤Þ¤¹¡£
- </p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>
- MaxKeepAliveRequests 500
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NameVirtualHost" id="NameVirtualHost">NameVirtualHost</a> <a name="namevirtualhost" id="namevirtualhost">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¤¿¤á¤Î IP ¥¢¥É¥ì¥¹¤ò»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>NameVirtualHost <var>addr</var>[:<var>port</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">NameVirtualHost</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <a href="../vhosts/">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>¤ÎÀßÄê¤ò¹Ô¤Ê¤¤¤¿¤¤¾ì¹ç¤Ë
- ɬÍפȤʤë¤â¤Î¤Ç¤¹¡£</p>
-
- <p><var>addr</var> ¤Ë¤Ï¥Û¥¹¥È̾¤ò»ØÄê¤Ç¤­¤Þ¤¹¤¬¡¢
- ¾ï¤Ë IP ¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ë¤Î¤¬¿ä¾©¤µ¤ì¤Þ¤¹¡£
- Î㤨¤Ð¡¢</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44
- </code></p></div>
-
- <p><code class="directive">NameVirtualHost</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò
- ÍøÍѤ·¤Æ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤ë IP ¥¢¥É¥ì¥¹¤ò»ØÄꤷ¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢ÉáÄ̤Ï̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¥¢¥É¥ì¥¹¤Ç¤¹¡£
- ¤¿¤À¤·¡¢¥Õ¥¡¥¤¥¢¡¼¥¦¥©¡¼¥ë¤ä¾¤Î¥×¥í¥­¥·¤¬¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¡¢
- °ã¤¦ IP ¥¢¥É¥ì¥¹¤Î¥µ¡¼¥Ð¤Ë¥Õ¥©¥ï¡¼¥É¤¹¤ë¤È¤¤¤¦¾ì¹ç¤Ï¡¢
- ¥ê¥¯¥¨¥¹¥È¤òÄ󶡤·¤¿¤¤¥Þ¥·¥ó¾å¤ÎʪÍý¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î
- IP ¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- Ê£¿ô¤Î¥¢¥É¥ì¥¹¤ÇÊ£¿ô¤Î̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»ØÄꤹ¤ë¾ì¹ç¤Ï
- ³Æ¥¢¥É¥ì¥¹¤ËÂФ·¤Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note"><h3>Ãæ</h3>
- <p>¡Ö¼ç¥µ¡¼¥Ð¡×¤ä¡¢¤É¤Î <code>_default_</code> ¥µ¡¼¥Ð¤â¡¢
- <code class="directive">NameVirtualHost</code> ¤Ç»ØÄꤷ¤¿ IP ¥¢¥É¥ì¥¹¤Ø¤Î¥ê¥¯¥¨¥¹¥È
- ¤ò½èÍý¤¹¤ë¤³¤È¤Ï<strong>¤¢¤ê¤Þ¤»¤ó</strong> (¤Ê¤¼¤«
- <code class="directive">NameVirtualHost</code> ¤ò
- »ØÄꤷ¤¿¤±¤É¤½¤Î¥¢¥É¥ì¥¹¤Ë <code class="directive">VirtualHost</code> ¤òÄêµÁ¤·¤Ê¤«¤Ã¤¿¾ì¹ç¤ò½ü¤¯)¡£</p>
- </div>
-
- <p>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¥Ý¡¼¥ÈÈÖ¹æ¤ò»ØÄꤹ¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
- Î㤨¤Ð</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44:8080
- </code></p></div>
-
- <p>IPV6 ¤Î¥¢¥É¥ì¥¹¤Ï¼¡¤ÎÎã¤Î¤è¤¦¤Ë³Ñ³ç¸Ì¤Ç°Ï¤àɬÍפ¬¤¢¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
- </code></p></div>
-
- <p>¤¹¤Ù¤Æ¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
- °ú¿ô¤È¤·¤Æ <code>*</code> ¤ò»È¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- NameVirtualHost *
- </code></p></div>
-
- <div class="note"><h3><code class="directive">&lt;VirtualHost&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô</h3>
- <p><code class="directive">&lt;VirtualHost&gt;</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤Ï <code class="directive">NameVirtualHost</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤ËÀµ³Î¤Ë
- ¹ç¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- NameVirtualHost 1.2.3.4<br />
- &lt;VirtualHost 1.2.3.4&gt;<br />
- # ...<br />
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
- </div>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ
-</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Options" id="Options">Options</a> <a name="options" id="options">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ»ÈÍѲÄǽ¤Êµ¡Ç½¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Options All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">Options</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ
- ¤É¤Îµ¡Ç½¤¬»ÈÍѲÄǽ¤«¤òÀ©¸æ¤·¤Þ¤¹¡£</p>
-
- <p><var>option</var> ¤ò <code>None</code>¤Ë»ØÄꤹ¤ë¤È¡¢
- ÆÃÊ̤ʵ¡Ç½¤ÏÁ´¤Æ̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤Þ¤¿¡¢°Ê²¼¤Î¼¨¤¹ 1 ¸Ä°Ê¾å¤Î¤â¤Î¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>All</code></dt>
-
- <dd><code>MultiViews</code> ¤ò½ü¤¤¤¿Á´¤Æ¤Îµ¡Ç½¤¬Í­¸ú¤È¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤¹¡£</dd>
-
- <dt><code>ExecCGI</code></dt>
-
- <dd>
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤Ë¤è¤ë CGI ¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤òµö²Ä¤·¤Þ¤¹¡£</dd>
-
- <dt><code>FollowSymLinks</code></dt>
-
- <dd>
- ¥µ¡¼¥Ð¤¬¡¢¤³¤Î¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ç¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò¤¿¤É¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- <div class="note"><p>¥µ¡¼¥Ð¤¬¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò¤¿¤É¤ë¾ì¹ç¤Ç¤â¡¢
- <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Ë
- ¥Þ¥Ã¥Á¤µ¤»¤ë¤¿¤á¤Î
- ¥Ñ¥¹Ì¾¤Ï<em>Êѹ¹¤µ¤ì¤Þ¤»¤ó</em>¡£</p>
- <p><code class="directive"><a href="#location">&lt;Location&gt;</a></code> Æâ¤Ë
- ¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Æ¤â<strong>̵»ë¤µ¤ì¤ë</strong>¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p></div></dd>
-
- <dt><code>Includes</code></dt>
-
- <dd>
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤¬Ä󶡤¹¤ë SSI ¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£</dd>
-
- <dt><code>IncludesNOEXEC</code></dt>
-
- <dd>
- SSI ¤ÏÍ­¸ú¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢<code>#exec</code> ¥³¥Þ¥ó¥É ¤È <code>#exec CGI</code> ¤Ï̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤¿¤À¤·¡¢<code>#include virtual</code> ¤Ë¤è¤ê¡¢<code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> ¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ç
- CGI ¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ï²Äǽ¤Ç¤¹¡£</dd>
-
- <dt><code>Indexes</code></dt>
-
- <dd>
- ¤â¤·¡¢URL ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥Þ¥Ã¥×¤¹¤ë¥ê¥¯¥¨¥¹¥È¤Ç¤¢¤Ã¤Æ¡¢
- ³î¤Ä <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> ¤Ç»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë (Î㤨¤Ð¡¢<code>index.html</code>) ¤¬
- ¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë̵¤±¤ì¤Ð¡¢<code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤¬
- ¥Ç¥£¥ì¥¯¥È¥êÆâ¤Î°ìÍ÷¤òÀ°·Á¤·¤ÆÊÖ¤·¤Þ¤¹¡£</dd>
-
- <dt><code>MultiViews</code></dt>
-
- <dd>
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> ¤Ë¤è¤ë
- <a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>
- ¤µ¤ì¤¿ "MultiViews" ¤òµö²Ä¤·¤Þ¤¹¡£</dd>
-
- <dt><code>SymLinksIfOwnerMatch</code></dt>
-
- <dd>
- ¥·¥ó¥Ü¥ê¥Ã¥¯Àè¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤¬¡¢
- ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤Î½êÍ­¥æ¡¼¥¶ ID ¤ÈƱ¤¸¾ì¹ç¤Ë¤Î¤ß¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò
- ¤¿¤É¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
-
- <div class="note"><h3>Ãí</h3> <code class="directive"><a href="#location">&lt;Location&gt;</a></code> Æâ¤Ë¤³¤Î¥ª¥×¥·¥ç¥ó¤ò
- »ØÄꤷ¤Æ¤â̵»ë¤µ¤ì¤Þ¤¹¡£</div>
- </dd>
- </dl>
-
- <p>Ä̾¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤ÆÊ£¿ô¤Î <code class="directive">Options</code> ¤¬
- ŬÍѲÄǽ¤Ê¾ì¹ç¡¢
- ºÇ¤â¶á¤¤¤â¤Î°ì¤Ä¤Î¤ß¤¬Å¬ÍѤµ¤ì¡¢Â¾¤Î¤â¤Î¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£
- Ê£¿ô¤Î»ØÄ꤬¥Þ¡¼¥¸¤µ¤ì¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£(<a href="../sections.html#mergin">¥»¥¯¥·¥ç¥ó¤Î¥Þ¡¼¥¸ÊýË¡</a>¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)
- ¤·¤«¤·¡¢¤¹¤Ù¤Æ¤Î <code class="directive">Options</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ <code>+</code> ¤ä <code>-</code> ÉÕ¤­¤Ç
- »ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¥ª¥×¥·¥ç¥ó¤ÎÃͤϥޡ¼¥¸¤µ¤ì¤Þ¤¹¡£
- <code>+</code> ¤òƬ¤Ë¤Ä¤±¤ì¤Ð¸½ºß¤ÎÀßÄê¤Ë²Ã¤¨¤é¤ì¡¢
- <code>-</code> ¤òÉÕ¤±¤ì¤Ð¸½ºß¤ÎÀßÄ꤫¤éºï½ü¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢<code>+</code> ¤ä <code>-</code> ¤òÍøÍѤ·¤Ê¤¤¾ì¹ç¤Ï:</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <span class="indent">
- Options Includes<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><code>/web/docs/spec</code> ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï¡¢
- <code>Includes</code> ¤À¤±¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£
- ¤·¤«¤·¡¢2 ÈÖÌܤΠ<code class="directive">Options</code> ¤Ç <code>+</code> ¤ä <code>-</code> ¤òÍøÍѤ·¤Æ¤ß¤ë¤È:</p>
-
- <div class="example"><p><code>
- &lt;Directory /web/docs&gt;<br />
- <span class="indent">
- Options Indexes FollowSymLinks<br />
- </span>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <span class="indent">
- Options +Includes -Indexes<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p><code>/web/docs/spec</code> ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï¡¢ <code>FollowSymLinks</code> ¤È
- <code>Includes</code> ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí</h3>
- <p><code>-IncludesNOEXEC</code> ¤â¤·¤¯¤Ï
- <code>-Includes</code> ¤ò»ØÄꤹ¤ë¤È¡¢
- Á°¤ÎÀßÄ꤬¤É¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤è¤¦¤È¤â SSI ¤Ï̵¸ú¤È¤Ê¤ê¤Þ¤¹¡£</p>
- </div>
-
- <p>¤É¤Î¤è¤¦¤ÊÀßÄê¤â¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï <code>All</code> ¤Ë
- ¤Ê¤ê¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Require" id="Require">Require</a> <a name="require" id="require">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¤É¤Îǧ¾ÚºÑ¤ß¥æ¡¼¥¶¤¬¥ê¥½¡¼¥¹¤ò¥¢¥¯¥»¥¹¤Ç¤­¤ë¤«¤òÁªÂò¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Require <var>entity-name</var> [<var>entity-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¤É¤Îǧ¾ÚºÑ¤ß¤Î¥æ¡¼¥¶¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤«¤ò»ØÄꤷ¤Þ¤¹¡£
- °Ê²¼¤Î¤è¤¦¤Ê¹½Ê¸¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>Require user <var>userid</var> [<var>userid</var>] ...</code></dt>
-
- <dd>»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤Î¤ß¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Þ¤¹¡£</dd>
-
- <dt><code>Require group <var>group-name</var> [<var>group-name</var>] ...</code></dt>
-
- <dd>»ØÄꤵ¤ì¤¿¥°¥ë¡¼¥×¤Ë°¤¹¤ë¥æ¡¼¥¶¤Î¤ß¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Þ¤¹¡£</dd>
-
- <dt><code>Require valid-user</code></dt>
-
- <dd>Á´¤Æ¤Îǧ¾Ú¤µ¤ì¤¿¥æ¡¼¥¶¤Ë¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Þ¤¹¡£</dd>
- </dl>
-
- <p><code class="directive">Require</code> ¤Ï¡¢Àµ¤·¤¯Æ°ºî¤¹¤ë¤¿¤á¤Ë¤Ï <code class="directive"><a href="#authname">AuthName</a></code> µÚ¤Ó <code class="directive"><a href="#authtype">AuthType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä¡¢
- (¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤ò»ØÄꤹ¤ë¤¿¤á¤Ë) <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> µÚ¤Ó <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
- ¤È¤¤¤Ã¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¶¦¤Ë
- »ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð:</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Restricted Directory"<br />
- AuthUserFile /web/users<br />
- AuthGroupFile /web/groups<br />
- Require group admin
- </code></p></div>
-
- <p>¤³¤Î¤è¤¦¤Ë¤·¤ÆŬÍѤµ¤ì¤¿¥¢¥¯¥»¥¹À©¸æ¤Ï¡¢<strong>Á´¤Æ¤Î</strong>¥á¥½¥Ã¥É¤Ë
- ÂФ·¤Æ¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- <strong>Ä̾ï¤Ï¡¢¤³¤ì¤¬Ë¾¤Þ¤·¤¤Æ°ºî¤Ç¤¹¡£</strong>
- ¤â¤·¡¢ÆÃÄê¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¤Î¤ß¥¢¥¯¥»¥¹¤ÎÀ©¸æ¤òŬÍѤ·¡¢
- ¾¤Î¥á¥½¥Ã¥É¤ÏÀ©¸Â¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢<code class="directive"><a href="#limit">&lt;Limit&gt;</a></code> ¥»¥¯¥·¥ç¥óÆâ¤Ë
- <code class="directive">Require</code> ¤ò
- »ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#satisfy">Satisfy</a></code></li>
-<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitCPU" id="RLimitCPU">RLimitCPU</a> <a name="rlimitcpu" id="rlimitcpu">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¤¿¥×¥í¥»¥¹¤Î CPU ¾ÃÈñÎ̤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>̤ÀßÄê¡£¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î¥Ç¥Õ¥©¥ë¥È¤ò»ÈÍÑ</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>°ì¤Ä¤«Æó¤Ä¤Î¥Ñ¥é¥á¡¼¥¿¤ò¤È¤ê¤Þ¤¹¡£
- ºÇ½é¤Î¥Ñ¥é¥á¡¼¥¿¤ÏÁ´¥×¥í¥»¥¹¤ËÂФ¹¤ë¥ê¥½¡¼¥¹¤Î¥½¥Õ¥È¥ê¥ß¥Ã¥È¤òÀßÄꤷ¡¢
- 2 ÈÖÌܤΥѥé¥á¡¼¥¿¤ÏºÇÂç¤Î¥ê¥½¡¼¥¹¥ê¥ß¥Ã¥È¤òÀßÄꤷ¤Þ¤¹¡£
- ¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï¿ô»ú¤«¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ÎºÇÂç¤È¤Ê¤ë
- <code>max</code> ¤Î¤É¤Á¤é¤«¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ºÇÂç¤Î¥ê¥½¡¼¥¹¥ê¥ß¥Ã¥È¤ò¾å¤²¤ë¤¿¤á¤Ë¤Ï¡¢¥µ¡¼¥Ð¤ò
- <code>root</code> ¤Ç¼Â¹Ô¤¹¤ë¤«µ¯Æ°¤µ¤ì¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£</p>
-
- <p>¤Á¤Ê¤ß¤Ë¡¢¤³¤ÎÀßÄê¤Ï Apache ¤Î»Ò¥×¥í¥»¥¹¼«ÂΤǤϤʤ¯¡¢
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿ Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤é fork ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ë
- ŬÍѤµ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ë¤Ï CGI ¤ä SSI ¤«¤é¼Â¹Ô¤µ¤ì¤¿¥³¥Þ¥ó¥É¤¬´Þ¤Þ¤ì¤Þ¤¹¤¬¡¢Apache ¤Î
- ¿Æ¥×¥í¥»¥¹¤«¤é fork ¤µ¤ì¤¿¥í¥°¤Î¥Ñ¥¤¥×¥×¥í¥»¥¹¤Ê¤É¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£</p>
-
- <p>CPU ¥ê¥½¡¼¥¹¤Î¥ê¥ß¥Ã¥È¤Ï¥×¥í¥»¥¹¤¢¤¿¤ê¤ÎÉÿô¤Çɽ¤ï¤µ¤ì¤Þ¤¹¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitmem">RLimitMEM</a></code></li>
-<li><code class="directive"><a href="#rlimitnproc">RLimitNPROC</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitMEM" id="RLimitMEM">RLimitMEM</a> <a name="rlimitmem" id="rlimitmem">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¥á¥â¥ê¾ÃÈñÎ̤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>̤ÀßÄê¡£¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î¥Ç¥Õ¥©¥ë¥È¤ò»ÈÍÑ</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>°ì¤Ä¤«Æó¤Ä¤Î¥Ñ¥é¥á¡¼¥¿¤ò¤ò¤È¤ê¤Þ¤¹¡£
- ºÇ½é¤Î¥Ñ¥é¥á¡¼¥¿¤ÏÁ´¥×¥í¥»¥¹¤ËÂФ¹¤ë¥ê¥½¡¼¥¹¤Î¥½¥Õ¥È¥ê¥ß¥Ã¥È¤òÀßÄꤷ¡¢
- 2 ÈÖÌܤΥѥé¥á¡¼¥¿¤ÏºÇÂç¤Î¥ê¥½¡¼¥¹¥ê¥ß¥Ã¥È¤òÀßÄꤷ¤Þ¤¹¡£
- ¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï¿ô»ú¤«¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ÎºÇÂç¤È¤Ê¤ë
- <code>max</code> ¤Î¤É¤Á¤é¤«¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ºÇÂç¤Î¥ê¥½¡¼¥¹¥ê¥ß¥Ã¥È¤ò¾å¤²¤ë¤¿¤á¤Ë¤Ï¡¢¥µ¡¼¥Ð¤ò
- <code>root</code> ¤Ç¼Â¹Ô¤¹¤ë¤«µ¯Æ°¤µ¤ì¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£</p>
-
- <p>¤³¤ÎÀßÄê¤Ï Apache ¤Î»Ò¥×¥í¥»¥¹¼«ÂΤǤϤʤ¯¡¢
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿ Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤é fork ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ë
- ŬÍѤµ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ë¤Ï CGI ¤ä SSI ¤«¤é¼Â¹Ô¤µ¤ì¤¿¥³¥Þ¥ó¥É¤¬´Þ¤Þ¤ì¤Þ¤¹¤¬¡¢Apache ¤Î
- ¿Æ¥×¥í¥»¥¹¤«¤é fork ¤µ¤ì¤¿¥í¥°¤Î¥Ñ¥¤¥×¥×¥í¥»¥¹¤Ê¤É¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£</p>
-
- <p>¥á¥â¥ê¥ê¥½¡¼¥¹¤Î¥ê¥ß¥Ã¥È¤Ï¥×¥í¥»¥¹¤¢¤¿¤ê¤Î¥Ð¥¤¥È¿ô¤Çɽ¤ï¤µ¤ì¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitcpu">RLimitCPU</a></code></li>
-<li><code class="directive"><a href="#rlimitnproc">RLimitNPROC</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RLimitNPROC" id="RLimitNPROC">RLimitNPROC</a> <a name="rlimitnproc" id="rlimitnproc">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¤¿¥×¥í¥»¥¹¤¬µ¯Æ°¤¹¤ë¥×¥í¥»¥¹¤Î
-¿ô¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RLimitNPROC <var>number</var>|max [<var>number</var>|max]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>̤ÀßÄê¡£¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î¥Ç¥Õ¥©¥ë¥È¤ò»ÈÍÑ</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>°ì¤Ä¤«Æó¤Ä¤Î¥Ñ¥é¥á¡¼¥¿¤ò¤È¤ê¤Þ¤¹¡£
- ºÇ½é¤Î¥Ñ¥é¥á¡¼¥¿¤ÏÁ´¥×¥í¥»¥¹¤ËÂФ¹¤ë¥ê¥½¡¼¥¹¤Î¥½¥Õ¥È¥ê¥ß¥Ã¥È¤òÀßÄꤷ¡¢
- 2 ÈÖÌܤΥѥé¥á¡¼¥¿¤ÏºÇÂç¤Î¥ê¥½¡¼¥¹¥ê¥ß¥Ã¥È¤òÀßÄꤷ¤Þ¤¹¡£
- ¥Ñ¥é¥á¡¼¥¿¤Ë¤Ï¿ô»ú¤«¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ÎºÇÂç¤È¤Ê¤ë
- <code>max</code> ¤Î¤É¤Á¤é¤«¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ºÇÂç¤Î¥ê¥½¡¼¥¹¥ê¥ß¥Ã¥È¤ò¾å¤²¤ë¤¿¤á¤Ë¤Ï¡¢¥µ¡¼¥Ð¤ò
- <code>root</code> ¤Ç¼Â¹Ô¤¹¤ë¤«µ¯Æ°¤µ¤ì¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£</p>
-
- <p>¤³¤ÎÀßÄê¤Ï Apache ¤Î»Ò¥×¥í¥»¥¹¼«ÂΤǤϤʤ¯¡¢
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿ Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤é fork ¤µ¤ì¤¿¥×¥í¥»¥¹¤Ë
- ŬÍѤµ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ë¤Ï CGI ¤ä SSI ¤«¤é¼Â¹Ô¤µ¤ì¤¿¥³¥Þ¥ó¥É¤¬´Þ¤Þ¤ì¤Þ¤¹¤¬¡¢Apache ¤Î
- ¿Æ¥×¥í¥»¥¹¤«¤é fork ¤µ¤ì¤¿¥í¥°¤Î¥Ñ¥¤¥×¥×¥í¥»¥¹¤Ê¤É¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£</p>
-
- <p>¥×¥í¥»¥¹¤ÎÀ©¸Â¤Ï¡¢¥æ¡¼¥¶¤¢¤¿¤ê¤Î¥×¥í¥»¥¹¿ô¤ÇÀ©¸æ¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí</h3>
- <p> CGI ¥×¥í¥»¥¹¤¬¥¦¥§¥Ö¥µ¡¼¥Ð¤Î¥æ¡¼¥¶ ID °Ê³°¤Ç¼Â¹Ô¤µ¤ì¤ë¤Î¤Ç
- <strong>̵¤±¤ì¤Ð</strong>¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥µ¡¼¥Ð¼«¿È¤¬À¸À®¤Ç¤­¤ë¥×¥í¥»¥¹¤Î¿ô¤òÀ©¸Â¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤½¤Î¤è¤¦¤Ê¾õ¶·¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«¤Ï¡¢<code>error_log</code> Ãæ¤Î
- <strong><code>cannot fork</code></strong> ¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸¤Ë¤è¤ê
- ³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#rlimitmem">RLimitMEM</a></code></li>
-<li><code class="directive"><a href="#rlimitcpu">RLimitCPU</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Satisfy" id="Satisfy">Satisfy</a> <a name="satisfy" id="satisfy">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Û¥¹¥È¥ì¥Ù¥ë¤Î¥¢¥¯¥»¥¹À©¸æ¤È¥æ¡¼¥¶Ç§¾Ú¤È¤ÎÁê¸ßºîÍѤò»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Satisfy Any|All</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Satisfy All</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> ¤È
- <code class="directive"><a href="#require">Require</a></code> ¤ÎξÊý¤¬»È¤ï¤ì¤Æ¤¤¤ë¤È¤­¤Î
- ¥¢¥¯¥»¥¹¥Ý¥ê¥·¡¼¤òÀßÄꤷ¤Þ¤¹¡£¥Ñ¥é¥á¡¼¥¿¤Ï <code>All</code> ¤« <code>Any</code>
- ¤Ç¤¹¡£¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¢¤ë¾ì½ê¤Ø¤Î¥¢¥¯¥»¥¹¤¬¥æ¡¼¥¶Ì¾/¥Ñ¥¹¥ï¡¼¥É
- <em>¤È</em>¥¯¥é¥¤¥¢¥ó¥È¤Î¥Û¥¹¥È¤Î¥¢¥É¥ì¥¹¤ÇÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Ë¤Î¤ß
- ÌòΩ¤Á¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî (<code>All</code>) ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤¬¥¢¥É¥ì¥¹¤Ë¤è¤ë
- ¥¢¥¯¥»¥¹À©¸Â¤òËþ¤¿¤·¡¢<em>¤«¤Ä</em>Àµ¤·¤¤¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ë¤³¤È¤ò
- Í׵ᤷ¤Þ¤¹¡£<code>Any</code> ¤Ç¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ï¥Û¥¹¥È¤ÎÀ©¸Â¤òËþ¤¿¤¹¤«¡¢
- Àµ¤·¤¤¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎϤò¤¹¤ë¤«¤ò¤¹¤ì¤Ð¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¤¢¤ë¾ì½ê¤ò¥Ñ¥¹¥ï¡¼¥É¤ÇÊݸ¤ë¤±¤ì¤É¡¢ÆÃÄê¤Î¥¢¥É¥ì¥¹¤«¤é¤Î
- ¥¯¥é¥¤¥¢¥ó¥È¤Ë¤Ï¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎϤòÍ׵᤻¤º¤Ë¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë¡¢
- ¤È¤¤¤¦¤è¤¦¤Ê¤È¤­¤Ë»ÈÍѤǤ­¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢Æ±¤¸¥Í¥Ã¥È¥ï¡¼¥¯¾å¤Ë¤¤¤ë¿Í¤Ë¤Ï¥¦¥§¥Ö¥µ¥¤¥È¤Î¤¢¤ëÉôʬ¤Ë¤Ä¤¤¤Æ
- ̵À©¸Â¤Î¥¢¥¯¥»¥¹¤òµö¤·¤¿¤¤¤±¤ì¤É¡¢³°¤Î¥Í¥Ã¥È¥ï¡¼¥¯¤Î¿Í¤Ë¤Ï
- ¥Ñ¥¹¥ï¡¼¥É¤òÄ󶡤µ¤»¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤ÊÀßÄê¤ò¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Require valid-user<br />
- Allow from 192.168.1<br />
- Satisfy Any
- </code></p></div>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li>
-<li><code class="directive"><a href="#require">Require</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptInterpreterSource" id="ScriptInterpreterSource">ScriptInterpreterSource</a> <a name="scriptinterpretersource" id="scriptinterpretersource">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥¹¥¯¥ê¥×¥È¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î°ÌÃÖ¤òÄ´¤Ù¤ë¤¿¤á¤Î¼êË¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptInterpreterSource Registry|Registry-Strict|Script</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ScriptInterpreterSource Script</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Win32 ¤Î¤ß¡£
-¥ª¥×¥·¥ç¥ó <code>Registry-Strict</code> ¤Ï Apache 2.0 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Apache ¤Ç CGI ¥¹¥¯¥ê¥×¥È¤ò
- ¼Â¹Ô¤¹¤ë¾ì¹ç¤ËÍøÍѤ¹¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ò¡¢
- ¤É¤Î¤è¤¦¤Ëõ¤·½Ð¤¹¤«¤Ë¤Ä¤¤¤ÆÀ©¸æ¤¹¤ë¤¿¤á¤Ë»ÈÍѤ·¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¤Ï <code>Script</code> ¤Ç¤¹¡£¤³¤ì¤Ï¥¹¥¯¥ê¥×¥È¤Î
- shebang ¹Ô (ºÇ½é¤Î¹Ô¤Ç <code>#!</code> ¤«¤é»Ï¤Þ¤ë¤â¤Î)
- ¤Ë»Ø¤µ¤ì¤Æ¤¤¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ò»ÈÍѤ·¤Þ¤¹¡£Win32 ¤Ç¤Ï¤½¤Î¹Ô¤Ï
- °Ê²¼¤ÎÍͤˤʤê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- #!C:/Perl/bin/perl.exe
- </code></p></div>
-
- <p>¤â¤·¤¯¤Ï¡¢perl ¤¬ <code>PATH</code> ¤Ë¤¢¤ë¾ì¹ç¤Ïñ¤Ë:</p>
-
- <div class="example"><p><code>
- #!perl
- </code></p></div>
-
- <p><code>ScriptInterpreterSource Registry</code> ¤ò»ØÄꤹ¤ë¤È¡¢
- ¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò (Î㤨¤Ð¡¢<code>.pl</code>) ¤ò
- ¥­¡¼¤È¤·¤Æ¡¢Windows ¤Î¥ì¥¸¥¹¥È¥ê¥Ä¥ê¡¼ <code>HKEY_CLASSES_ROOT</code>
- ¤ò¸¡º÷¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥ì¥¸¥¹¥È¥ê¤Î¥µ¥Ö¥­¡¼
- <code>Shell\ExecCGI\Command</code> ¤«¡¢¤½¤ì¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï
- <code>Shell\Open\Command</code> ¤¬¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤ò³«¤¯¤¿¤á¤Ë
- »È¤ï¤ì¤Þ¤¹¡£¥ì¥¸¥¹¥È¥ê¥­¡¼¤¬¸«¤Ä¤«¤é¤Ê¤¤¤È¤­¤Ï¡¢Apache ¤Ï <code>Script</code>
- ¥ª¥×¥·¥ç¥ó¤¬»ØÄꤵ¤ì¤¿¤È¤­¤ÎÆ°ºî¤ËÌá¤ê¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p><code>ScriptInterpreterSource Registry</code> ¤ò <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> ¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ç»È¤¦¤È¤­¤Ï
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£Apache ¤Ï¤½¤Î¥Ç¥£¥ì¥¯¥È¥êÃæ¤Î<em>¤¹¤Ù¤Æ¤Î</em>¥Õ¥¡¥¤¥ë¤ò
- ¼Â¹Ô¤·¤è¤¦¤È¤·¤Þ¤¹¡£<code>Registry</code> ¤È¤¤¤¦ÀßÄê¤ÏÄ̾ï¤Ï¼Â¹Ô¤µ¤ì¤Ê¤¤
- ¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ˾¤Þ¤·¤¯¤Ê¤¤¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤¬È¯À¸¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð¡¢¤Û¤È¤ó¤É¤Î Windows ¥·¥¹¥Æ¥à¤Ç¡¢
- <code>.htm</code> ¥Õ¥¡¥¤¥ë¤Î¥Ç¥Õ¥©¥ë¥È¤Î¡Ö³«¤¯¡×¥³¥Þ¥ó¥É¤Ï
- Microsoft Internet Explorer ¤ò¼Â¹Ô¤·¤Þ¤¹¤Î¤Ç¡¢¥¹¥¯¥ê¥×¥È¤Ë»ØÄꤵ¤ì¤¿
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë <code>.htm</code> ¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¥µ¡¼¥Ð¤Î
- ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¥Ö¥é¥¦¥¶¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ì¤Ï¡¢°ìʬÆ⤯¤é¤¤¤Ç
- ¥·¥¹¥Æ¥à¤ò¥¯¥é¥Ã¥·¥å¤µ¤ë¤¿¤á¤ÎÎɤ¤ÊýË¡¤Ç¤¹¡£</p>
- </div>
-
- <p>Apache 2.0 ¤«¤éƳÆþ¤µ¤ì¤¿¥ª¥×¥·¥ç¥ó <code>Registry-Strict</code> ¤Ï
- <code>Registry</code> ¤ÈƱ¤¸¤³¤È¤ò¹Ô¤Ê¤¤¤Þ¤¹¤¬¡¢¥µ¥Ö¥­¡¼
- <code>Shell\ExecCGI\Command</code> ¤Î¤ß¤ò»È¤¤¤Þ¤¹¡£
- <code>ExecCGI</code> ¥­¡¼¤ÏÉáÄ̤˻Ȥï¤ì¤ë¥­¡¼¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£Windows
- ¥ì¥¸¥¹¥È¥ê¤Ë¼êÆ°¤ÇÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¥·¥¹¥Æ¥à¤Ç¤Î¶öȯŪ¤Ê¥×¥í¥°¥é¥à¤Î
- ¼Â¹Ô¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerAdmin" id="ServerAdmin">ServerAdmin</a> <a name="serveradmin" id="serveradmin">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë´Þ¤á¤ëÅŻҥ᡼¥ë¤Î
-¥¢¥É¥ì¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerAdmin <var>email-address</var>|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ServerAdmin</code> ¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤¹¤µ¤Þ¤¶¤Þ¤Ê
- ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸Ãæ¤Ëµ­½Ò¤¹¤ë¡¢
- Ìä¹ç¤»¥¢¥É¥ì¥¹¤òÀßÄꤷ¤Þ¤¹¡£Í¿¤¨¤é¤ì¤¿°ú¿ô¤ò <code>httpd</code> ¤¬
- URL ¤Èǧ¼±¤·¤Ê¤¤¾ì¹ç¤Ï¡¢<var>email-address</var> ¤À¤È²ò¼á¤·¤Æ¡¢
- ¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Î¥¿¡¼¥²¥Ã¥È¤Ë <code>mailto:</code> ¤òÉÕ¤±¤Þ¤¹¡£
- ¼ÂºÝ¤Ë¤Ï¡¢¤³¤³¤Ë¤ÏÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤ò»È¤¦¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¿¤¯¤Î CGI ¥¹¥¯¥ê¥×¥È¤Ï¤½¤¦¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ò²¾Äꤷ¤Æ¤¤¤Þ¤¹¡£
- URL ¤ò»È¤¦¾ì¹ç¤Ï¡¢¤¢¤Ê¤¿¤Î´ÉÍý²¼¤Ë¤¢¤ëÊÌ¥µ¡¼¥Ð¤ò»Ø¤¹¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤¦¤Ç¤Ê¤¤¤È¡¢¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¤È¤­¤ËÏ¢Íí¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤Ã¤Æ
- ¤·¤Þ¤¤¤Þ¤¹¡£
-</p>
-
- <p>¤½¤ÎºÝ¡¢¤³¤ì¤Î¤¿¤á¤ËÀìÍѤΥ¢¥É¥ì¥¹¤òÀßÄꤹ¤ë¤Î¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
- Î㤨¤Ð¡¢</p>
-
- <div class="example"><p><code>
- ServerAdmin www-admin@foo.example.com
- </code></p></div>
-
- <p>¤È¤¤¤Ã¤¿¤è¤¦¤Ë¤·¤Þ¤¹¡£¥æ¡¼¥¶¤Ï¤¤¤Ä¤â¥µ¡¼¥Ð¤Ë´Ø¤¹¤ëÏäǤ¢¤ë¤È¤¤¤¦¤³¤È¤ò
- ÌÀµ­¤·¤Æ¤¯¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡£</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerAlias" id="ServerAlias">ServerAlias</a> <a name="serveralias" id="serveralias">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤ò̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¥Þ¥Ã¥Á¤µ¤»¤Æ¤¤¤ë¤È¤­¤Ë
-»ÈÍѤµ¤ì¤ë¥Û¥¹¥È¤ÎÊÌ̾</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerAlias <var>hostname</var> [<var>hostname</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ServerAlias</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢<a href="../vhosts/name-based.html">¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>¤Ë¤ª¤¤¤Æ
- »ÈÍѤ¹¤ë¥Û¥¹¥È¤ÎÊÌ̾¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost *&gt;<br />
- ServerName server.domain.com<br />
- ServerAlias server server2.domain.com server2<br />
- # ...<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../vhosts/">Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerName" id="ServerName">ServerName</a> <a name="servername" id="servername">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤ò¼¨¤¹¤È¤­¤Ë»È¤¦¥Û¥¹¥È̾¤È¥Ý¡¼¥È</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ð¡¼¥¸¥ç¥ó 2.0 ¤Ç¤Ï¥Ð¡¼¥¸¥ç¥ó 1.3 ¤Î
- <code class="directive">Port</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Îµ¡Ç½¤â´Þ¤ß¤Þ¤¹¡£</td></tr>
-</table>
- <p><code class="directive">ServerName</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤ò¼¨¤¹¥Û¥¹¥È̾¤È¥Ý¡¼¥È¤òÀßÄꤷ¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë URL ¤òÀ¸À®¤¹¤ëºÝ¤ËÍøÍѤµ¤ì¤Þ¤¹¡£
- Î㤨¤Ð¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¤òÆ°¤«¤·¤Æ¤¤¤ë¥Þ¥·¥ó¤Ï <code>simple.example.com</code>
- ¤Ç¡¢DNS ¤Î¥¨¥¤¥ê¥¢¥¹ <code>www.example.com</code> ¤â¤¢¤ë¤È¤­¤Ë¡¢
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤¬¸å¼Ô¤È¤·¤Æǧ¼±¤µ¤ì¤ÆÍߤ·¤¤¤È¤­¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- »È¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- ServerName www.example.com:80
- </code></p></div>
-
- <p><code class="directive">ServerName</code> ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï IP ¥¢¥É¥ì¥¹¤«¤éµÕ°ú¤­¤ò¹Ô¤Ê¤¦¤³¤È¤Ç¥Û¥¹¥È̾¤òÃÎ¤í¤¦¤È¤·¤Þ¤¹¡£
- <code class="directive">ServerName</code> ¤Ë¥Ý¡¼¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï¥ê¥¯¥¨¥¹¥È¤¬Íè¤Æ¤¤¤ë
- ¥Ý¡¼¥È¤ò»È¤¤¤Þ¤¹¡£ºÇ¹â¤Î¿®ÍêÀ­¤È³Î¼ÂÀ­¤ò¤â¤¿¤é¤¹¤¿¤á¤Ë¤Ï¡¢
- <code class="directive">ServerName</code> ¤ò»È¤Ã¤Æ¥Û¥¹¥È̾¤È¥Ý¡¼¥È¤òÌÀ¼¨Åª¤Ë
- »ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><a href="../vhosts/name-based.html">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>
- ¤òÍøÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢<code class="directive"><a href="#virtualhost">&lt;VirtualHost&gt;</a></code> ¥»¥¯¥·¥ç¥óÆâ¤Î
- <code class="directive">ServerName</code> ¤Ï¤³¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¥Þ¥Ã¥Á¤¹¤ë¤¿¤á¤Ë
- ²¿¤¬¥ê¥¯¥¨¥¹¥È¤Î Host: ¥Ø¥Ã¥À¤Ë¸½¤ì¤ëɬÍפ¬¤¢¤ë¤Î¤«¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p>¼«¸Ê»²¾È URL (Î㤨¤Ð <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> ¥â¥¸¥å¡¼¥ë¤Ë¤è¤ë¤â¤Î¤Ê¤É)
- ¤¬»ØÄꤵ¤ì¤¿¥Ý¡¼¥È¤ò»È¤¦¤«¡¢¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤Î¥Ý¡¼¥ÈÈÖ¹æ¤ò»È¤¦¤«¤ò
- ·èÄꤹ¤ëÀßÄê¤Ï <code class="directive"><a href="#usecanonicalname">UseCanonicalName</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../dns-caveats.html">DNS ¤È Apache ¤Ë´Ø¤¹¤ëÏÃ</a></li>
-<li><a href="../vhosts/">Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ</a></li>
-<li><code class="directive"><a href="#usecanonicalname">UseCanonicalName</a></code></li>
-<li><code class="directive"><a href="#namevirtualhost">NameVirtualHost</a></code></li>
-<li><code class="directive"><a href="#serveralias">ServerAlias</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerPath" id="ServerPath">ServerPath</a> <a name="serverpath" id="serverpath">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Èó¸ß´¹¤Î¥Ö¥é¥¦¥¶¤¬Ì¾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¥¢¥¯¥»¥¹¤·¤¿¤È¤­¤Î
-¤¿¤á¤Î¸ß´¹ÍÑ URL ¥Ñ¥¹Ì¾</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerPath <var>URL-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ServerPath</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢<a href="../vhosts/">¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>¤Ë¤ª¤¤¤ÆÍøÍѤ¹¤ë
- ¸ß´¹ÍÑ URL ¥Ñ¥¹Ì¾¤òÀßÄꤷ¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../vhosts/">Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerRoot" id="ServerRoot">ServerRoot</a> <a name="serverroot" id="serverroot">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¥µ¡¼¥Ð¤Î¥Ù¡¼¥¹¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerRoot <var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ServerRoot /usr/local/apache</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ServerRoot</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥µ¡¼¥Ð¤¬Â¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òÀßÄꤷ¤Þ¤¹¡£
- Ä̾<code>conf/</code> ¤ä <code>logs/</code> ¤È¤¤¤Ã¤¿¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤¬
- ¸ºß¤·¤Þ¤¹¡£
- ¤Þ¤¿¡¢Â¾¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ë¤ª¤±¤ëÁêÂХѥ¹¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤È¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ServerRoot /home/httpd
- </code></p></div>
-
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../invoking.html"><code>httpd</code> ¤Î <code>-d</code>
- ¥ª¥×¥·¥ç¥ó</a></li>
-<li><code class="directive">ServerRoot</code> ¤Î¸¢¸Â¤òŬÀÚ¤ËÀßÄꤹ¤ëÊýË¡¤Ï<a href="../misc/security_tips.html#serverroot">¥»¥­¥å¥ê¥Æ¥£¤Î¤³¤Ä</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerSignature" id="ServerSignature">ServerSignature</a> <a name="serversignature" id="serversignature">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬À¸À®¤¹¤ë¥É¥­¥å¥á¥ó¥È¤Î¥Õ¥Ã¥¿¤òÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerSignature On|Off|EMail</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ServerSignature Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">ServerSignature</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥µ¡¼¥Ð¤¬À¸À®¤¹¤ë¥É¥­¥å¥á¥ó¥È
- (¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¡¢<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> ¤Ë¤ª¤±¤ë FTP ¤Î¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È¡¢
- <code class="module"><a href="../mod/mod_info.html">mod_info</a></code> ¤Î½ÐÎÏ¡¢Åù¡¹)
- ¤ÎºÇ²¼¹Ô¤ËÉÕÍ¿¤¹¤ë¥Õ¥Ã¥¿¤ÎÀßÄê¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
- ¤½¤Î¤è¤¦¤Ê¥Õ¥Ã¥¿¹Ô¤òÍ­¸ú¤Ë¤·¤¿¤¤Íýͳ¤Ë¤Ï¡¢
- ¥×¥í¥­¥·¤¬Ê£¿ôÏ¢¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¡¢¥æ¡¼¥¶¤Ï¤É¤Î¥µ¡¼¥Ð¤¬ÊÖ¤·¤¿
- ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤«¤òÃΤë¼êÃʤ¬¤Û¤È¤ó¤É̵¤¤¤È¤¤¤¦¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
-
- <p>¥Ç¥Õ¥©¥ë¥È¤Ç¤¢¤ë <code>Off</code> ¤ËÀßÄê¤ò¤¹¤ë¤È¡¢¥Õ¥Ã¥¿¹Ô¤¬ÍÞÀ©¤µ¤ì¤Þ¤¹
- (¤½¤·¤Æ¡¢Apache-1.2 °ÊÁ°¤È¸ß´¹¤ÎÆ°ºî¤ò¤·¤Þ¤¹)¡£
- <code>On</code> ¤ËÀßÄꤷ¤¿¾ì¹ç¤Ï¡¢Ã±¤Ë¥É¥­¥å¥á¥ó¥È¤ÎÃæ¤Ë¡¢¥µ¡¼¥Ð¤Î¥Ð¡¼¥¸¥ç¥ó¡¢
- ²ÔÆ°Ãæ¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î <a href="#servername">ServerName</a> ¤Î½ñ¤«¤ì¤¿¹Ô¤òÄɲä·¡¢
- <code>EMail</code> ¤Ë¤·¤¿¾ì¹ç¤Ï¤µ¤é¤Ë»²¾È¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤ËÂФ¹¤ë <a href="#serveradmin">ServerAdmin</a> ¤ò»Ø¤¹ "mailto:" ¤¬Äɲ䵤ì¤Þ¤¹¡£</p>
-
- <p>¥Ð¡¼¥¸¥ç¥ó 2.0.44 °Ê¹ß¤Ç¤Ï¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="#serversignature">ServerSignature</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤êɽ¼¨¤µ¤ì¤ë¾ðÊó¤âÀ©¸æ¤·¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#servertokens">ServerTokens</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerTokens" id="ServerTokens">ServerTokens</a> <a name="servertokens" id="servertokens">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Server HTTP ±þÅú¥Ø¥Ã¥À¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ServerTokens Full</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤êÊÖ¤¹ <code>Server</code>
- ±þÅú¥Ø¥Ã¥ÀÆâ¤Ë¡¢¥µ¡¼¥Ð¤Î°ìÈÌŪ¤Ê OS ¼ïÊ̤䡢
- ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ÆÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Î¾ðÊó¤ò
- ´Þ¤á¤ë¤«¤É¤¦¤«¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
- <dd>¥µ¡¼¥Ð¤Ï (Î㤨¤Ð): <code>Server:
- Apache</code> ¤È¤¤¤Ã¤¿¤è¤¦¤ËÁ÷¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>ServerTokens Major</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2</code></dd>
-
- <dt><code>ServerTokens Minor</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2.0</code></dd>
-
- <dt><code>ServerTokens Min[imal]</code></dt>
-
- <dd>¥µ¡¼¥Ð¤Ï (Î㤨¤Ð): <code>Server:
- Apache/2.0.41</code> ¤È¤¤¤Ã¤¿¤è¤¦¤ËÁ÷¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>ServerTokens OS</code></dt>
-
- <dd>¥µ¡¼¥Ð¤Ï (Î㤨¤Ð): <code>Server: Apache/2.0.41
- (Unix)</code> ¤È¤¤¤Ã¤¿¤è¤¦¤ËÁ÷¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>ServerTokens Full</code> (¤â¤·¤¯¤Ï̤»ØÄê)</dt>
-
- <dd>¥µ¡¼¥Ð¤Ï (Î㤨¤Ð): <code>Server: Apache/2.0.41
- (Unix) PHP/4.2.2 MyMod/1.2</code> ¤È¤¤¤Ã¤¿¤è¤¦¤ËÁ÷¤ê¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¤³¤ÎÀßÄê¤Ï¥µ¡¼¥ÐÁ´ÂΤËŬÍѤµ¤ì¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¾å¤ÇÍ­¸ú¤Ë¤·¤¿¤ê
- ̵¸ú¤Ë¤·¤¿¤ê¤Ï¤Ç¤­¤Þ¤»¤ó¡£</p>
-
- <p>¥Ð¡¼¥¸¥ç¥ó 2.0.44 °Ê¹ß¤Ç¤Ï¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="#serversignature">ServerSignature</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤êɽ¼¨¤µ¤ì¤ë¾ðÊó¤âÀ©¸æ¤·¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#serversignature">ServerSignature</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetHandler" id="SetHandler">SetHandler</a> <a name="sethandler" id="sethandler">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë¤¬¥Ï¥ó¥É¥é¤Ç½èÍý¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SetHandler <var>handler-name</var>|None</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 ¤Ç core ¤Ë°ÜÆ°</td></tr>
-</table>
- <p><code>.htaccess</code> ¤ä <code class="directive"><a href="#directory">&lt;Directory&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¡¢<code class="directive"><a href="#location">&lt;Location&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤Ë½ñ¤«¤ì¤¿¾ì¹ç¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤³¤Ë¤¢¤ë¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤¬
- <var>handler-name</var> ¤Ç»ØÄꤵ¤ì¤¿<a href="../handler.html">¥Ï¥ó¥É¥é</a>¤Ç°·¤ï¤ì¤ë¤³¤È¤ò¶¯À©¤·¤Þ¤¹¡£Î㤨¤Ð¡¢³ÈÄ¥»Ò¤Ë´Ø¤ï¤é¤º¡¢
- ¥Ç¥£¥ì¥¯¥È¥êÁ´ÂΤ¬¥¤¥á¡¼¥¸¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤È¤·¤Æ²òÀϤ·¤ÆÍߤ·¤¤¾ì¹ç¤Ë¤Ï¡¢
- °Ê²¼¤ò¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- SetHandler imap-file
- </code></p></div>
-
- <p>Ê̤ÎÎã: URL <code>http://servername/status</code>
- ¤¬»ØÄꤵ¤ì¤¿¤È¤­¤Ë¥µ¡¼¥Ð¤¬¾õÂÖÊó¹ð¤ò¤¹¤ë¤è¤¦¤Ë¤·¤¿¤¤¤È¤­¤Ï¡¢°Ê²¼¤ò
- <code>httpd.conf</code> ¤Ëµ­½Ò¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;Location /status&gt;<br />
- <span class="indent">
- SetHandler server-status<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p><code>None</code> ¤È¤¤¤¦ÃͤòÀßÄꤹ¤ë¤³¤È¤Ç¡¢
- Á°¤ÎÊý¤Î <code class="directive">SetHandler</code> ¤ÇÄêµÁ¤µ¤ì¤¿ÀßÄê¤ò̵¸ú¤Ë¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetInputFilter" id="SetInputFilter">SetInputFilter</a> <a name="setinputfilter" id="setinputfilter">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ä POST ¤ÎÆþÎϤò½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SetInputFilter <var>filter</var>[;<var>filter</var>...]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">SetInputFilter</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î
- ¥ê¥¯¥¨¥¹¥È¤ä POST ¤ÎÆþÎϤò¥µ¡¼¥Ð¤¬¼õ¤±¼è¤Ã¤¿¤È¤­¤Ë½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤ò
- ÀßÄꤷ¤Þ¤¹¡£¤³¤ì¤Ï <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò´Þ¤á¡¢Â¾¤Î¾ì½ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥£¥ë¥¿¤ÎÀßÄê¤Ë
- Äɲ䵤ì¤Þ¤¹¡£</p>
-
- <p>Ê£¿ô¤Î¥Õ¥£¥ë¥¿¤ò»ØÄꤹ¤ë¤È¤­¤Ï¡¢¥Ç¡¼¥¿¤ò½èÍý¤¹¤ë½çÈÖ¤Ë
- ¥»¥ß¥³¥í¥ó¤Ç¶èÀÚ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../filter.html">¥Õ¥£¥ë¥¿</a>ÀâÌÀ½ñ</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetOutputFilter" id="SetOutputFilter">SetOutputFilter</a> <a name="setoutputfilter" id="setoutputfilter">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤Î±þÅú¤ò½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SetOutputFilter <var>filter</var>[;<var>filter</var>...]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">SetOutputFilter</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥µ¡¼¥Ð¤Î±þÅú¤ò¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤êÊÖ¤µ¤ì¤ëÁ°¤Ë½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤òÀßÄꤷ¤Þ¤¹¡£
- ¤³¤ì¤Ï <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò´Þ¤á¡¢Â¾¤Î¾ì½ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥£¥ë¥¿¤ÎÀßÄê¤Ë
- Äɲ䵤ì¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢°Ê²¼¤ÎÀßÄê¤Ï <code>/www/data/</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Î¤¹¤Ù¤Æ¤Î
- ¥Õ¥¡¥¤¥ë¤ò SSI ¤Ç½èÍý¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory /www/data/&gt;<br />
- <span class="indent">
- SetOutputFilter INCLUDES<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Ê£¿ô¤Î¥Õ¥£¥ë¥¿¤ò»ØÄꤹ¤ë¤È¤­¤Ï¡¢¥Ç¡¼¥¿¤ò½èÍý¤¹¤ë½çÈÖ¤Ë
- ¥»¥ß¥³¥í¥ó¤Ç¶èÀÚ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../filter.html">¥Õ¥£¥ë¥¿</a>ÀâÌÀ½ñ</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TimeOut" id="TimeOut">TimeOut</a> <a name="timeout" id="timeout">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>³Æ¥¤¥Ù¥ó¥È¤Ë¤Ä¤¤¤Æ¡¢¥ê¥¯¥¨¥¹¥È¤ò¼ºÇÔ¤µ¤»¤ë¤Þ¤Ç¤Ë¥µ¡¼¥Ð¤¬
-ÂԤĻþ´Ö¤òÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>TimeOut <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>TimeOut 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">TimeOut</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¸½ºß¤Î¤È¤³¤í
- °Ê²¼¤Î»°¤Ä¤ÎÂÔ¤Á»þ´Ö¤Ë¤Ä¤¤¤Æ¤ÎÄêµÁ¤ò¹Ô¤¤¤Þ¤¹:</p>
-
- <ol>
- <li>GET ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤ë¤Î¤Ë¤«¤«¤ëÁí»þ´Ö</li>
-
- <li>POST ¤ä PUT¥ê¥¯¥¨¥¹¥È¤Ë¤ª¤¤¤Æ¡¢¼¡¤Î TCP ¥Ñ¥±¥Ã¥È¤¬ÆϤ¯¤Þ¤Ç¤ÎÂÔ¤Á»þ´Ö</li>
-
- <li>¥ì¥¹¥Ý¥ó¥¹¤òÊÖ¤¹ºÝ¡¢TCP ¤Î ACK ¤¬µ¢¤Ã¤Æ¤¯¤ë¤Þ¤Ç¤Î»þ´Ö</li>
- </ol>
-
- <p>¾­Íè¤Ë¤ÏÊÌ¡¹¤ÎÀßÄê¤ò¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ç¤­¤ë¤è¤¦¹ÍθÃæ¤Ç¤¹¡£
- Apache 1.2 °ÊÁ°¤Ï¥¿¥¤¥Þ¡¼¤Ï 1200 ¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤·¤¿¤¬¡¢
- 300 ¤Ë²¼¤²¤é¤ì¤Þ¤·¤¿¡£300 ¤Ç¤â¤Û¤È¤ó¤É¤Î¾ì¹ç¤Ï½½Ê¬¤¹¤®¤ëÃͤǤ¹¡£
- ¥³¡¼¥ÉÃæ¤ÎÊѤʾì½ê¤Ë¤Þ¤À¥Ñ¥±¥Ã¥È¤òÁ÷¤ëºÝ¤Ë¥¿¥¤¥Þ¤ò¥ê¥»¥Ã¥È¤·¤Ê¤¤
- ¾ì½ê¤¬¤¢¤ë¤«¤â¤·¤ì¤Ê¤¤¤Î¤Ç¡¢¥Ç¥Õ¥©¥ë¥È¤ò¤è¤ê¾®¤µ¤¤ÃͤˤϤ·¤Æ¤¤¤Þ¤»¤ó¡£</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UseCanonicalName" id="UseCanonicalName">UseCanonicalName</a> <a name="usecanonicalname" id="usecanonicalname">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤Î̾Á°¤È¥Ý¡¼¥È¤ò·èÄꤹ¤ëÊýË¡¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>UseCanonicalName On|Off|Dns</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>UseCanonicalName On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p>¿¤¯¤Î¾õ¶·¤Ç Apache ¤Ï<em>¼«¸Ê»²¾È</em> URL¡¢¤¹¤Ê¤ï¤Á
- Ʊ¤¸¥µ¡¼¥Ð¤ò»Ø¤¹ URL¡¢¤òºîÀ®¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- <code>UseCanonicalName On</code> ¤ò»È¤¦¤È (1.3 ¤è¤êÁ°¤Î
- ¤¹¤Ù¤Æ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤â) Apache ¤Ï <a href="#servername">ServerName</a> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <a href="#port">Port</a>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¥µ¡¼¥Ð¤ÎÀµ¼°¤Ê̾Á°¤òºîÀ®¤·¤Þ¤¹¡£
- ¤³¤Î̾Á°¤¬¤¹¤Ù¤Æ¤Î¼«¸Ê»²¾È URL ¤Ç»È¤ï¤ì¡¢CGI ¤Î <code>SERVER_NAME</code>
- ¤È <code>SERVER_PORT</code> ¤Ë¤â»È¤ï¤ì¤Þ¤¹¡£</p>
-
- <p><code>UseCanonicalName Off</code> ¤Ç¤Ï Apache ¤Ï
- ¥¯¥é¥¤¥¢¥ó¥È¤¬¥Û¥¹¥È̾¤È¥Ý¡¼¥È¤òÄ󶡤·¤¿¾ì¹ç¤Ë¤Ï¼«¸Ê»²¾È URL ¤ò
- ¤½¤ì¤é¤ò¸µ¤ËºîÀ®¤·¤Þ¤¹ (Ä󶡤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¾å¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë
- Àµ¼°¤Ê̾Á°¤ò»È¤¤¤Þ¤¹)¡£
- ¤³¤ì¤é¤ÎÃͤÏ<a href="../vhosts/name-based.html">̾Á°¥Ù¡¼¥¹¤Î
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>¤ò¼ÂÁõ¤¹¤ë¤Î¤Ë»È¤ï¤ì¤Æ¤¤¤ë¤Î¤ÈƱ¤¸Ãͤǡ¢
- Ʊ¤¸¥¯¥é¥¤¥¢¥ó¥È¤«¤é¼èÆÀ¤Ç¤­¤ëÃͤǤ¹¡£CGI ÊÑ¿ô <code>SERVER_NAME</code>
- ¤È <code>SERVER_PORT</code> ¤â¥¯¥é¥¤¥¢¥ó¥È¤«¤éÍ¿¤¨¤é¤ì¤¿Ãͤ«¤é
- ºîÀ®¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤¬Í­ÍѤʾì¹ç¤ÎÎã¤Ï¡¢¥¤¥ó¥È¥é¥Í¥Ã¥È¤Î¥µ¡¼¥Ð¤Ç¡¢<code>www</code> ¤Î
- ¤è¤¦¤Êû¤¤Ì¾Á°¤Ç¥æ¡¼¥¶¤¬¥Þ¥·¥ó¤ËÀܳ¤·¤Æ¤¤¤ë¤È¤­¤Ç¤¹¡£
- ¥æ¡¼¥¶¤¬Ã»¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¡¢URL ¤¬<em>ºÇ¸å¤Î¥¹¥é¥Ã¥·¥å̵¤·¤Î</em>¥Ç¥£¥ì¥¯¥È¥ê
- ¤Ø¤Î¤â¤Î¤Ç¤¢¤ë¤È¤­¤Ë¡¢Apache ¤Ï¥ê¥¯¥¨¥¹¥È¤ò
- <code>http://www.domain.com/splat/</code> ¤Ø¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤³¤È¤Ë
- µ¤ÉÕ¤¯¤Ç¤·¤ç¤¦¡£Ç§¾Ú¤ò¤¹¤ë¤è¤¦¤ËÀßÄꤷ¤Æ¤¤¤ë¤È¡¢¤³¤Î¾ì¹ç
- ¥æ¡¼¥¶¤Ï 2 ²óǧ¾Ú¤ò¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¯¤Ê¤ê¤Þ¤¹ (<code>www</code> ¤Ë
- ÂФ·¤Æ 1 ²ó¡¢<code>www.domain.com</code> ¤ËÂФ·¤Æ¤â¤¦°ì²ó --
- ¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ï <a href="http://httpd.apache.org/docs/misc/FAQ.html#prompted-twice">¤³¤ÎÏÃÂê¤Î
- FAQ</a> ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
- ¤·¤«¤·¡¢<code class="directive">UseCanonicalName</code> ¤¬ <code>Off</code> ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢
- Apache ¤Ï <code>htttp://www/splat/</code> ¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£</p>
-
- <p>»°¤ÄÌܤΥª¥×¥·¥ç¥ó <code>UseCanonicalName DNS</code> ¤Ï¡¢
- <code>Host:</code> ¥Ø¥Ã¥À¤òÄ󶡤·¤Ê¤¤¸Å¤¤¥¯¥é¥¤¥¢¥ó¥È¤ò¥µ¥Ý¡¼¥È¤·¤¿
- Â絬ÌÏ¤Ê IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥Æ¥£¥ó¥°¤Ç»ÈÍѤµ¤ì¤ë¤³¤È¤ò
- °Õ¿Þ¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥ª¥×¥·¥ç¥ó¤Ç¤Ï¡¢Apache ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤¬
- Àܳ¤·¤¿ IP ¥¢¥É¥ì¥¹¤Ë DNS ¤ÎµÕ°ú¤­¤ò¹Ô¤Ê¤Ã¤Æ¼«¸Ê»²¾È URL ¤ò
- ºîÀ®¤·¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>·Ù¹ð</h3>
- <p>CGI ¤¬ <code>SERVER_NAME</code> ¤Ë
- ´Ø¤¹¤ë²¾Äê¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤ë¤È¤­¤Ï¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤ÎÀßÄê¤ÇÆ°ºî¤·¤Ê¤¯
- ¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¥¯¥é¥¤¥¢¥ó¥È¤Ï¼Â¼ÁŪ¤Ë¤Ï¥Û¥¹¥È̾¤Ë¤È¤·¤Æ
- ²¿¤Ç¤â˾¤ß¤ÎÃͤò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£CGI ¤¬
- <code>SERVER_NAME</code> ¤Î¤ß¤ò»È¤Ã¤Æ¼«¸Ê»²¾È URL ¤òºîÀ®¤·¤Æ¤¤¤ë
- ¾ì¹ç¤Ï¤É¤ÎÀßÄê¤ò¹Ô¤Ê¤Ã¤Æ¤âÂç¾æÉפʤϤº¤Ç¤¹¡£</p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#servername">ServerName</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualHost" id="VirtualHost">&lt;VirtualHost&gt;</a> <a name="virtualhost" id="virtualhost">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆÃÄê¤Î¥Û¥¹¥È̾¤ä IP ¥¢¥É¥ì¥¹¤Î¤ß¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
-°Ï¤à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Core</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>core</td></tr>
-</table>
- <p><code class="directive">&lt;VirtualHost&gt;</code> µÚ¤Ó
- <code>&lt;/VirtualHost&gt;</code> ¤Ï¡¢
- ÆÃÄê¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö·²¤ò³ç¤ë
- ¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¥³¥ó¥Æ¥­¥¹¥È¤Çµö²Ä¤µ¤ì¤ëÁ´¤Æ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ØÄê²Äǽ¤Ç¤¹¡£
- ¥µ¡¼¥Ð¤¬¡¢»ØÄꤵ¤ì¤¿¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¤¢¤ë¥É¥­¥å¥á¥ó¥È¤Ø¤Î
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿¾ì¹ç¡¢
- <code class="directive">&lt;VirtualHost&gt;</code> ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤Ë¤¢¤ë
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£
- <var>Addr</var>¤Ï¡¢¼¡¤Î¤â¤Î¤¬ÍøÍѤǤ­¤Þ¤¹:</p>
-
- <ul>
- <li>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î IP ¥¢¥É¥ì¥¹</li>
-
- <li>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î IP ¤ËÂбþ¤¹¤ë´°Á´¤Ê¥É¥á¥¤¥ó̾</li>
-
- <li><code>NameVirtualHost *</code> ¤È¶¦¤Ë»È¤ï¤ì¤ë¡¢
- ¤¹¤Ù¤Æ¤Î IP ¥¢¥É¥ì¥¹¤Ë¥Þ¥Ã¥Á¤¹¤ëʸ»ú <code>*</code></li>
-
- <li>IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ç¾¤Î¤â¤Î¤Ë¥Þ¥Ã¥Á¤·¤Ê¤¤ IP ¥¢¥É¥ì¥¹
- ¤Î¤¿¤á¤Îʸ»úÎó <code>_default_</code></li>
- </ul>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;VirtualHost 10.1.2.3&gt;<br />
- <span class="indent">
- ServerAdmin webmaster@host.foo.com<br />
- DocumentRoot /www/docs/host.foo.com<br />
- ServerName host.foo.com<br />
- ErrorLog logs/host.foo.com-error_log<br />
- TransferLog logs/host.foo.com-access_log<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>IPv6 ¥¢¥É¥ì¥¹¤Ï¥ª¥×¥·¥ç¥ó¤Î¥Ý¡¼¥ÈÈÖ¹æ¤Î»ØÄê¤È¶èÊ̤¹¤ë¤¿¤á¤Ë¡¢
- ³Ñ³ç¸Ì¤Ç³ç¤Ã¤Æ»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¼¡¤Ï IPv6 ¤ÎÎã¤Ç¤¹:</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
- <span class="indent">
- ServerAdmin webmaster@host.example.com<br />
- DocumentRoot /www/docs/host.example.com<br />
- ServerName host.example.com<br />
- ErrorLog logs/host.example.com-error_log<br />
- TransferLog logs/host.example.com-access_log<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>³Æ¡¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¤Ï¤½¤ì¤¾¤ì°ã¤¦ IP ¥¢¥É¥ì¥¹¡¢¥Ý¡¼¥ÈÈÖ¹æ
- ¤â¤·¤¯¤Ï¥Û¥¹¥È̾¤ËÂбþ¤¹¤ëɬÍפ¬¤¢¤ê¡¢
- 1 ÈÖÌܤξì¹ç¤Ë¤ÏÊ£¿ô¤Î¥¢¥É¥ì¥¹¤Ç IP ¥Ñ¥±¥Ã¥È¤ò¼õ¿®¤Ç¤­¤ë¤è¤¦¤Ë
- ¥µ¡¼¥Ð¥Þ¥·¥ó¤òÀßÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- (¤â¤·¡¢¥Þ¥·¥ó¤¬Ê£¿ô¤Î¥Í¥Ã¥È¥ï¡¼¥¯¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È»ý¤¿¤Ê¤¤¾ì¹ç¤Ï¡¢
- (OS¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ì¤Ð) <code>ifconfig alias</code> ¥³¥Þ¥ó¥É¤Ë¤è¤ê
- ãÀ®¤Ç¤­¤Þ¤¹)¡£</p>
-
- <p><code>:port</code> ¤È¤¤¤Ã¤¿·Á¼°¤Çµ­½Ò¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢
- ¥Þ¥Ã¥Á¤µ¤»¤ë¥Ý¡¼¥È¤òÊѹ¹²Äǽ¤Ç¤¹¡£
- ¤³¤Î»ØÄê¤ò¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¼ç¥µ¡¼¥ÐÀßÄê¤Ë¤ª¤±¤ë
- °ìÈֺǸå¤Ë <code><a href="#port">Port</a></code> ¤Ç»ØÄꤵ¤ì¤¿¥Ý¡¼¥È¤¬
- ¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ê¤Þ¤¹¡£
- <code>:*</code> ¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢
- ¥¢¥É¥ì¥¹¾å¤ÎÁ´¤Æ¤Î¥Ý¡¼¥È¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£(<code>_default_</code> ¤Î¤È¤­¤Ï
- ¤³¤ì¤ò»È¤¦¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£)</p>
-
- <p><strong>¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤·¤Æ</strong>:
- ¥µ¡¼¥Ð¡¼¤òµ¯Æ°¤·¤¿°Ê³°¤Î¥æ¡¼¥¶¤¬¥í¥°¥Õ¥¡¥¤¥ë¤¬Êݴɤµ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ½ñ¤­¹þ¤ß²Äǽ¤Ê¤È¤­¤Ë¤Ê¤¼¥»¥­¥å¥ê¥Æ¥£¤¬Çˤé¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤«¤Î¾ÜºÙ¤Ï
- <a href="../misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë¥³¥Ä</a> ¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note"><h3>Ãí°ÕÅÀ</h3>
- <p><code class="directive">&lt;VirtualHost&gt;</code> ¤Ï Apache ¤¬ Listen ¤¹¤ë
- IP ¥¢¥É¥ì¥¹¤Ë¤Ï±Æ¶Á¤òÍ¿¤¨<strong>¤Þ¤»¤ó</strong>¡£
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ¤ò
- »È¤Ã¤Æ Apache ¤¬Àµ¤·¤¤¥¢¥É¥ì¥¹¤ò listen ¤¹¤ë¤è¤¦¤ËÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
- </div>
-
- <p>IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ÆÃÊ̤Ê̾Á°
- <code>_default_</code> ¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤Î¾ì¹ç¤Ï
- ¤½¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ï¾¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÇÌÀ¼¨Åª¤Ëµó¤²¤é¤ì¤Æ¤¤¤Ê¤¤
- ¤¹¤Ù¤Æ¤Î IP ¥¢¥É¥ì¥¹¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£<code>_default_</code> ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬Ìµ¤¤
- ¾ì¹ç¤Ë IP ¤¬¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ç»ØÄꤵ¤ì¤¿¤â¤Î¤Ë¥Þ¥Ã¥Á¤·¤Ê¤¤¤È¤­¤Ï¡¢
- VirtualHost ¥»¥¯¥·¥ç¥ó¤Î³°¤Î¤¹¤Ù¤Æ¤ÎÄêµÁ¤«¤é¤Ê¤ë¡Ö¼ç¡×¥µ¡¼¥ÐÀßÄ꤬
- »È¤ï¤ì¤Þ¤¹¡£(¤¿¤À¤·¡¢<code class="directive"><a href="#namevirtualhost">NameVirtualHost</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¥Þ¥Ã¥Á¤¹¤ë
- ¤¹¤Ù¤Æ¤Î IP ¥¢¥É¥ì¥¹¤Ï¡Ö¼ç¡×¥µ¡¼¥ÐÀßÄê¤â <code>_default_</code> ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤â
- »È¤ï¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¾Ü¤·¤¯¤Ï <a href="../vhosts/name-based.html">¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a> ¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)</p>
-
- <p><code>:port</code> ¤È¤¤¤Ã¤¿·Á¼°¤Çµ­½Ò¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢
- ¥Þ¥Ã¥Á¤µ¤»¤ë¥Ý¡¼¥È¤òÊѹ¹²Äǽ¤Ç¤¹¡£
- ¤³¤Î»ØÄê¤ò¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¼ç¥µ¡¼¥ÐÀßÄê¤Ë¤ª¤±¤ë
- °ìÈֺǸå¤Ë <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ¤Ç»ØÄꤵ¤ì¤¿
- ¥Ý¡¼¥È¤¬¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ê¤Þ¤¹¡£
- <code>:*</code> ¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢
- ¥¢¥É¥ì¥¹¾å¤ÎÁ´¤Æ¤Î¥Ý¡¼¥È¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£(<code>_default_</code> ¤Î¤È¤­¤Ï
- ¤³¤ì¤ò»È¤¦¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£)</p>
-
- <p><code>:port</code> ¤È¤¤¤Ã¤¿·Á¼°¤Çµ­½Ò¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢
- ¥Þ¥Ã¥Á¤µ¤»¤ë¥Ý¡¼¥È¤òÊѹ¹²Äǽ¤Ç¤¹¡£
- ¤³¤Î»ØÄê¤ò¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¼ç¥µ¡¼¥ÐÀßÄê¤Ë¤ª¤±¤ë
- °ìÈֺǸå¤Ë <code><a href="#port">Port</a></code> ¤Ç»ØÄꤵ¤ì¤¿¥Ý¡¼¥È¤¬
- ¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ê¤Þ¤¹¡£
- <code>:*</code> ¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢
- ¥¢¥É¥ì¥¹¾å¤ÎÁ´¤Æ¤Î¥Ý¡¼¥È¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£(<code>_default_</code> ¤Î¤È¤­¤Ï
- ¤³¤ì¤ò»È¤¦¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£)</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p>¥µ¡¼¥Ð¡¼¤òµ¯Æ°¤·¤¿°Ê³°¤Î¥æ¡¼¥¶¤¬¥í¥°¥Õ¥¡¥¤¥ë¤¬Êݴɤµ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ½ñ¤­¹þ¤ß²Äǽ¤Ê¤È¤­¤Ë¤Ê¤¼¥»¥­¥å¥ê¥Æ¥£¤¬Çˤé¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤«¤Î¾ÜºÙ¤Ï
- <a href="../misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë¥³¥Ä</a> ¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../vhosts/">Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ</a></li>
-<li><a href="../dns-caveats.html">DNS ¤È Apache ¤Ë´Ø¤¹¤ëÏÃ</a></li>
-<li><a href="../bind.html">Apache ¤¬»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÀßÄê</a></li>
-<li>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿ºÝ¤Ë¤³¤ì¤é¤Î°Û¤Ê¤ë¥»¥¯¥·¥ç¥ó¤¬
- ÁȤ߹ç¤ï¤µ¤ì¤ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîË¡</a></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/core.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/core.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/core.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml
deleted file mode 100644
index 9f7731ed7b..0000000000
--- a/docs/manual/mod/core.xml
+++ /dev/null
@@ -1,3110 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.89 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="core.xml.meta">
-
-<name>core</name>
-<description>Core Apache HTTP Server features that are always
-available</description>
-<status>Core</status>
-
-<directivesynopsis>
-<name>AcceptPathInfo</name>
-<description>Resources accept trailing pathname information</description>
-<syntax>AcceptPathInfo On|Off|Default</syntax>
-<default>AcceptPathInfo Default</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Available in Apache 2.0.30 and later</compatibility>
-
-<usage>
-
- <p>This directive controls whether requests that contain trailing
- pathname information that follows an actual filename (or
- non-existent file in an existing directory) will be accepted or
- rejected. The trailing pathname information can be made
- available to scripts in the <code>PATH_INFO</code> environment
- variable.</p>
-
- <p>For example, assume the location <code>/test/</code> points to
- a directory that contains only the single file
- <code>here.html</code>. Then requests for
- <code>/test/here.html/more</code> and
- <code>/test/nothere.html/more</code> both collect
- <code>/more</code> as <code>PATH_INFO</code>.</p>
-
- <p>The three possible arguments for the
- <directive>AcceptPathInfo</directive> directive are:</p>
- <dl>
- <dt><code>Off</code></dt><dd>A request will only be accepted if it
- maps to a literal path that exists. Therefore a request with
- trailing pathname information after the true filename such as
- <code>/test/here.html/more</code> in the above example will return
- a 404 NOT FOUND error.</dd>
-
- <dt><code>On</code></dt><dd>A request will be accepted if a
- leading path component maps to a file that exists. The above
- example <code>/test/here.html/more</code> will be accepted if
- <code>/test/here.html</code> maps to a valid file.</dd>
-
- <dt><code>Default</code></dt><dd>The treatment of requests with
- trailing pathname information is determined by the <a
- href="../handler.html">handler</a> responsible for the request.
- The core handler for normal files defaults to rejecting
- <code>PATH_INFO</code> requests. Handlers that serve scripts, such as <a
- href="mod_cgi.html">cgi-script</a> and <a
- href="mod_isapi.html">isapi-isa</a>, generally accept
- <code>PATH_INFO</code> by default.</dd>
- </dl>
-
- <p>The primary purpose of the <code>AcceptPathInfo</code>
- directive is to allow you to override the handler's choice of
- accepting or rejecting <code>PATH_INFO</code>. This override is required,
- for example, when you use a <a href="../filter.html">filter</a>, such
- as <a href="mod_include.html">INCLUDES</a>, to generate content
- based on <code>PATH_INFO</code>. The core handler would usually reject
- the request, so you can use the following configuration to enable
- such a script:</p>
-
- <example>
- &lt;Files "mypaths.shtml"&gt;<br />
- <indent>
- Options +Includes<br />
- SetOutputFilter INCLUDES<br />
- AcceptPathInfo On<br />
- </indent>
- &lt;/Files&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AccessFileName</name>
-<description>Name of the distributed configuration file</description>
-<syntax>AccessFileName <var>filename</var> [<var>filename</var>] ...</syntax>
-<default>AccessFileName .htaccess</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>While processing a request the server looks for
- the first existing configuration file from this list of names in
- every directory of the path to the document, if distributed
- configuration files are <a href="#allowoverride">enabled for that
- directory</a>. For example:</p>
-
- <example>
- AccessFileName .acl
- </example>
-
- <p>before returning the document
- <code>/usr/local/web/index.html</code>, the server will read
- <code>/.acl</code>, <code>/usr/.acl</code>,
- <code>/usr/local/.acl</code> and <code>/usr/local/web/.acl</code>
- for directives, unless they have been disabled with</p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride None<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-<seealso><directive module="core">AllowOverride</directive></seealso>
-<seealso><a href="../configuring.html">Configuration Files</a></seealso>
-<seealso><a href="../howto/htaccess.html">.htaccess Files</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDefaultCharset</name>
-<description>Default character set to be added for a
-response without an explicit character set</description>
-<syntax>AddDefaultCharset On|Off|<var>charset</var></syntax>
-<default>AddDefaultCharset Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive specifies the name of the character set that
- will be added to any response that does not have any parameter on
- the content type in the HTTP headers. This will override any
- character set specified in the body of the document via a
- <code>META</code> tag. A setting of <code>AddDefaultCharset
- Off</code> disables this
- functionality. <code>AddDefaultCharset On</code> enables
- Apache's internal default charset of <code>iso-8859-1</code> as
- required by the directive. You can also specify an alternate
- <var>charset</var> to be used. For example:</p>
-
- <example>
- AddDefaultCharset utf-8
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddOutputFilterByType</name>
-<description>assigns an output filter to a particular MIME-type</description>
-<syntax>AddOutputFilterByType <var>filter</var>[;<var>filter</var>...]
-<var>MIME-type</var> [<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Available in Apache 2.0.33 and later</compatibility>
-
-<usage>
- <p>This directive activates a particular output <a
- href="../filter.html">filter</a> for a request depending on the
- response MIME-type.</p>
-
- <p>The following example uses the <code>DEFLATE</code> filter, which
- is provided by <module>mod_deflate</module>. It will compress all
- output (either static or dynamic) which is labeled as
- <code>text/html</code> or <code>text/plain</code> before it is sent
- to the client.</p>
-
- <example>
- AddOutputFilterByType DEFLATE text/html text/plain
- </example>
-
- <p>If you want the content to be processed by more than one filter, their
- names have to be separated by semicolons. It's also possible to use one
- <directive>AddOutputFilterByType</directive> directive for each of
- these filters.</p>
-
- <p>The configuration below causes all script output labeled as
- <code>text/html</code> to be processed at first by the
- <code>INCLUDES</code> filter and then by the <code>DEFLATE</code>
- filter.</p>
-
- <example>
- &lt;Location /cgi-bin/&gt;<br />
- <indent>
- Options Includes<br />
- AddOutputFilterByType INCLUDES;DEFLATE text/html<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note type="warning"><title>Note</title>
- <p>Enabling filters with <directive>AddOutputFilterByType</directive>
- may fail partially or completely in some cases. For example, no
- filters are applied if the MIME-type could not be determined and falls
- back to the <directive module="core">DefaultType</directive> setting,
- even if the <directive module="core">DefaultType</directive> is the
- same.</p>
-
- <p>However, if you want to make sure, that the filters will be
- applied, assign the content type to a resource explicitly, for
- example with <directive module="mod_mime">AddType</directive> or
- <directive module="core">ForceType</directive>. Setting the
- content type within a (non-nph) CGI script is also safe.</p>
-
- <p>The by-type output filters are never applied on proxy requests.</p>
- </note>
-</usage>
-
-<seealso><directive module="mod_mime">AddOutputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-<seealso><a href="../filter.html">filters</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AllowEncodedSlashes</name>
-<description>Determines whether encoded path separators in URLs are allowed to
-be passed through</description>
-<syntax>AllowEncodedSlashes On|Off</syntax>
-<default>AllowEncodedSlashes Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in Apache 2.0.46 and later</compatibility>
-
-<usage>
- <p>The <directive>AllowEncodedSlashes</directive> directive allows URLs
- which contain encoded path separators (<code>%2F</code> for <code>/</code>
- and additionally <code>%5C</code> for <code>\</code> on according systems)
- to be used. Normally such URLs are refused with a 404 (Not found) error.</p>
-
- <p>Turning <directive>AllowEncodedSlashes</directive> <code>On</code> is
- mostly useful when used in conjunction with <code>PATH_INFO</code>.</p>
-
- <note><title>Note</title>
- <p>Allowing encoded slashes does <em>not</em> imply <em>decoding</em>.
- Occurrences of <code>%2F</code> or <code>%5C</code> (<em>only</em> on
- according systems) will be left as such in the otherwise decoded URL
- string.</p>
- </note>
-</usage>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>AllowOverride</name>
-<description>Types of directives that are allowed in
-<code>.htaccess</code> files</description>
-<syntax>AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</syntax>
-<default>AllowOverride All</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>When the server finds an <code>.htaccess</code> file (as
- specified by <directive module="core">AccessFileName</directive>)
- it needs to know which directives declared in that file can override
- earlier configuration directives.</p>
-
- <note><title>Only available in &lt;Directory&gt; sections</title>
- <directive>AllowOverride</directive> is valid only in
- <directive type="section" module="core">Directory</directive>
- sections specified without regular expressions, not in <directive
- type="section" module="core">Location</directive>, <directive
- module="core" type="section">DirectoryMatch</directive> or
- <directive type="section" module="core">Files</directive> sections.
- </note>
-
- <p>When this directive is set to <code>None</code>, then
- <a href="#accessfilename">.htaccess</a> files are completely ignored.
- In this case, the server will not even attempt to read
- <code>.htaccess</code> files in the filesystem.</p>
-
- <p>When this directive is set to <code>All</code>, then any
- directive which has the .htaccess <a
- href="directive-dict.html#Context">Context</a> is allowed in
- <code>.htaccess</code> files.</p>
-
- <p>The <var>directive-type</var> can be one of the following
- groupings of directives.</p>
-
- <dl>
- <dt>AuthConfig</dt>
-
- <dd>
-
- Allow use of the authorization directives (<directive
- module="mod_authn_dbm">AuthDBMGroupFile</directive>,
- <directive module="mod_authn_dbm">AuthDBMUserFile</directive>,
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>,
- <directive module="core">AuthName</directive>,
- <directive module="core">AuthType</directive>, <directive
- module="mod_authn_file">AuthUserFile</directive>, <directive
- module="core">Require</directive>, <em>etc.</em>).</dd>
-
- <dt>FileInfo</dt>
-
- <dd>
- Allow use of the directives controlling document types (<directive
- module="core">DefaultType</directive>, <directive
- module="core">ErrorDocument</directive>, <directive
- module="core">ForceType</directive>, <directive
- module="mod_negotiation">LanguagePriority</directive>,
- <directive module="core">SetHandler</directive>, <directive
- module="core">SetInputFilter</directive>, <directive
- module="core">SetOutputFilter</directive>, and
- <module>mod_mime</module> Add* and Remove*
- directives, <em>etc.</em>).</dd>
-
- <dt>Indexes</dt>
-
- <dd>
- Allow use of the directives controlling directory indexing
- (<directive
- module="mod_autoindex">AddDescription</directive>,
- <directive module="mod_autoindex">AddIcon</directive>, <directive
- module="mod_autoindex">AddIconByEncoding</directive>,
- <directive module="mod_autoindex">AddIconByType</directive>,
- <directive module="mod_autoindex">DefaultIcon</directive>, <directive
- module="mod_dir">DirectoryIndex</directive>, <directive
- module="mod_autoindex">FancyIndexing</directive>, <directive
- module="mod_autoindex">HeaderName</directive>, <directive
- module="mod_autoindex">IndexIgnore</directive>, <directive
- module="mod_autoindex">IndexOptions</directive>, <directive
- module="mod_autoindex">ReadmeName</directive>,
- <em>etc.</em>).</dd>
-
- <dt>Limit</dt>
-
- <dd>
- Allow use of the directives controlling host access (<directive
- module="mod_authz_host">Allow</directive>, <directive
- module="mod_authz_host">Deny</directive> and <directive
- module="mod_authz_host">Order</directive>).</dd>
-
- <dt>Options[=<var>Option</var>,...]</dt>
-
- <dd>
- Allow use of the directives controlling specific directory
- features (<directive module="core">Options</directive> and
- <directive module="mod_include">XBitHack</directive>).
- An equal sign may be given followed by a comma (but no spaces)
- separated lists of options that may be set using the Options
- command.</dd>
- </dl>
-
- <p>Example:</p>
-
- <example>
- AllowOverride AuthConfig Indexes
- </example>
-
- <p>In the example above all directives that are neither in the group
- <code>AuthConfig</code> nor <code>Indexes</code> cause an internal
- server error.</p>
-</usage>
-
-<seealso><directive module="core">AccessFileName</directive></seealso>
-<seealso><a href="../configuring.html">Configuration Files</a></seealso>
-<seealso><a href="../howto/htaccess.html">.htaccess Files</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthName</name>
-<description>Authorization realm for use in HTTP
-authentication</description>
-<syntax>AuthName <var>auth-domain</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>This directive sets the name of the authorization realm for a
- directory. This realm is given to the client so that the user
- knows which username and password to send.
- <directive>AuthName</directive> takes a single argument; if the
- realm name contains spaces, it must be enclosed in quotation
- marks. It must be accompanied by <directive
- module="core">AuthType</directive> and <directive
- module="core">Require</directive> directives, and directives such
- as <directive module="mod_authn_file">AuthUserFile</directive> and
- <directive module="mod_authz_groupfile">AuthGroupFile</directive> to
- work.</p>
-
- <p>For example:</p>
-
- <example>
- AuthName "Top Secret"
- </example>
-
- <p>The string provided for the <code>AuthName</code> is what will
- appear in the password dialog provided by most browsers.</p>
-</usage>
-<seealso><a
- href="../howto/auth.html">Authentication, Authorization, and
- Access Control</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthType</name>
-<description>Type of user authentication</description>
-<syntax>AuthType Basic|Digest</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>This directive selects the type of user authentication for a
- directory. Only <code>Basic</code> and <code>Digest</code> are
- currently implemented.
-
- It must be accompanied by <directive
- module="core">AuthName</directive> and <directive
- module="core">Require</directive> directives, and directives such
- as <directive module="mod_authn_file">AuthUserFile</directive> and
- <directive module="mod_authz_groupfile">AuthGroupFile</directive> to
- work.</p>
-</usage>
-<seealso><a href="../howto/auth.html">Authentication, Authorization,
-and Access Control</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CGIMapExtension</name>
-<description>Technique for locating the interpreter for CGI
-scripts</description>
-<syntax>CGIMapExtension <var>cgi-path</var> <var>.extension</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>NetWare only</compatibility>
-
-<usage>
- <p>This directive is used to control how Apache finds the
- interpreter used to run CGI scripts. For example, setting
- <code>CGIMapExtension sys:\foo.nlm .foo</code> will
- cause all CGI script files with a <code>.foo</code> extension to
- be passed to the FOO interpreter.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ContentDigest</name>
-<description>Enables the generation of <code>Content-MD5</code> HTTP Response
-headers</description>
-<syntax>ContentDigest On|Off</syntax>
-<default>ContentDigest Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<status>Experimental</status>
-
-<usage>
- <p>This directive enables the generation of
- <code>Content-MD5</code> headers as defined in RFC1864
- respectively RFC2068.</p>
-
- <p>MD5 is an algorithm for computing a "message digest"
- (sometimes called "fingerprint") of arbitrary-length data, with
- a high degree of confidence that any alterations in the data
- will be reflected in alterations in the message digest.</p>
-
- <p>The <code>Content-MD5</code> header provides an end-to-end
- message integrity check (MIC) of the entity-body. A proxy or
- client may check this header for detecting accidental
- modification of the entity-body in transit. Example header:</p>
-
- <example>
- Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
- </example>
-
- <p>Note that this can cause performance problems on your server
- since the message digest is computed on every request (the
- values are not cached).</p>
-
- <p><code>Content-MD5</code> is only sent for documents served
- by the <module>core</module>, and not by any module. For example,
- SSI documents, output from CGI scripts, and byte range responses
- do not have this header.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultType</name>
-<description>MIME content-type that will be sent if the
-server cannot determine a type in any other way</description>
-<syntax>DefaultType <var>MIME-type</var></syntax>
-<default>DefaultType text/plain</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>There will be times when the server is asked to provide a
- document whose type cannot be determined by its MIME types
- mappings.</p>
-
- <p>The server must inform the client of the content-type of the
- document, so in the event of an unknown type it uses the
- <code>DefaultType</code>. For example:</p>
-
- <example>
- DefaultType image/gif
- </example>
-
- <p>would be appropriate for a directory which contained many GIF
- images with filenames missing the <code>.gif</code> extension.</p>
-
- <p>Note that unlike <directive
- module="core">ForceType</directive>, this directive only
- provides the default mime-type. All other mime-type definitions,
- including filename extensions, that might identify the media type
- will override this default.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Directory</name>
-<description>Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</description>
-<syntax>&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive type="section">Directory</directive> and
- <code>&lt;/Directory&gt;</code> are used to enclose a group of
- directives that will apply only to the named directory and
- sub-directories of that directory. Any directive that is allowed
- in a directory context may be used. <var>Directory-path</var> is
- either the full path to a directory, or a wild-card string using
- Unix shell-style matching. In a wild-card string, <code>?</code> matches
- any single character, and <code>*</code> matches any sequences of
- characters. You may also use <code>[]</code> character ranges. None
- of the wildcards match a `/' character, so <code>&lt;Directory
- /*/public_html&gt;</code> will not match
- <code>/home/user/public_html</code>, but <code>&lt;Directory
- /home/*/public_html&gt;</code> will match. Example:</p>
-
- <example>
- &lt;Directory /usr/local/httpd/htdocs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <note>
- <p>Be careful with the <var>directory-path</var> arguments:
- They have to literally match the filesystem path which Apache uses
- to access the files. Directives applied to a particular
- <code>&lt;Directory&gt;</code> will not apply to files accessed from
- that same directory via a different path, such as via different symbolic
- links.</p>
- </note>
-
- <p>Extended regular
- expressions can also be used, with the addition of the
- <code>~</code> character. For example:</p>
-
- <example>
- &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
- </example>
-
- <p>would match directories in <code>/www/</code> that consisted of
- three numbers.</p>
-
- <p>If multiple (non-regular expression) <directive
- type="section">Directory</directive> sections
- match the directory (or one of its parents) containing a document,
- then the directives are applied in the order of shortest match
- first, interspersed with the directives from the <a
- href="#accessfilename">.htaccess</a> files. For example,
- with</p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride None<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /home/&gt;<br />
- <indent>
- AllowOverride FileInfo<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>for access to the document <code>/home/web/dir/doc.html</code>
- the steps are:</p>
-
- <ul>
- <li>Apply directive <code>AllowOverride None</code>
- (disabling <code>.htaccess</code> files).</li>
-
- <li>Apply directive <code>AllowOverride FileInfo</code> (for
- directory <code>/home</code>).</li>
-
- <li>Apply any <code>FileInfo</code> directives in
- <code>/home/.htaccess</code>, <code>/home/web/.htaccess</code> and
- <code>/home/web/dir/.htaccess</code> in that order.</li>
- </ul>
-
- <p>Regular expressions are not considered until after all of the
- normal sections have been applied. Then all of the regular
- expressions are tested in the order they appeared in the
- configuration file. For example, with</p>
-
- <example>
- &lt;Directory ~ abc$&gt;<br />
- <indent>
- # ... directives here ...<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>the regular expression section won't be considered until after
- all normal <directive type="section">Directory</directive>s and
- <code>.htaccess</code> files have been applied. Then the regular
- expression will match on <code>/home/abc/public_html/abc</code> and
- the corresponding <directive type="section">Directory</directive> will
- be applied.</p>
-
- <p><strong>Note that the default Apache access for
- <code>&lt;Directory /&gt;</code> is <code>Allow from All</code>.
- This means that Apache will serve any file mapped from an URL. It is
- recommended that you change this with a block such
- as</strong></p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from All<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><strong>and then override this for directories you
- <em>want</em> accessible. See the <a
- href="../misc/security_tips.html">Security Tips</a> page for more
- details.</strong></p>
-
- <p>The directory sections occur in the <code>httpd.conf</code> file.
- <directive type="section">Directory</directive> directives
- cannot nest, and cannot appear in a <directive module="core"
- type="section">Limit</directive> or <directive module="core"
- type="section">LimitExcept</directive> section.</p>
-</usage>
-<seealso><a href="../sections.html">How &lt;Directory&gt;,
- &lt;Location&gt; and &lt;Files&gt; sections work</a> for an
- explanation of how these different sections are combined when a
- request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>DirectoryMatch</name>
-<description>Enclose directives that apply to
-file-system directories matching a regular expression and their
-subdirectories</description>
-<syntax>&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive type="section">DirectoryMatch</directive> and
- <code>&lt;/DirectoryMatch&gt;</code> are used to enclose a group
- of directives which will apply only to the named directory and
- sub-directories of that directory, the same as <directive
- module="core" type="section">Directory</directive>. However, it
- takes as an argument a regular expression. For example:</p>
-
- <example>
- &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
- </example>
-
- <p>would match directories in <code>/www/</code> that consisted of three
- numbers.</p>
-</usage>
-<seealso><directive type="section" module="core">Directory</directive> for
-a description of how regular expressions are mixed in with normal
-<directive type="section">Directory</directive>s</seealso>
-<seealso><a
-href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt; and
-&lt;Files&gt; sections work</a> for an explanation of how these different
-sections are combined when a request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DocumentRoot</name>
-<description>Directory that forms the main document tree visible
-from the web</description>
-<syntax>DocumentRoot <var>directory-path</var></syntax>
-<default>DocumentRoot /usr/local/apache/htdocs</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive sets the directory from which <code>httpd</code>
- will serve files. Unless matched by a directive like <directive
- module="mod_alias">Alias</directive>, the server appends the
- path from the requested URL to the document root to make the
- path to the document. Example:</p>
-
- <example>
- DocumentRoot /usr/web
- </example>
-
- <p>then an access to
- <code>http://www.my.host.com/index.html</code> refers to
- <code>/usr/web/index.html</code>. If the <var>directory-path</var> is
- not absolute then it is assumed to be relative to the <directive
- module="core">ServerRoot</directive>.</p>
-
- <p>The <directive>DocumentRoot</directive> should be specified without
- a trailing slash.</p>
-</usage>
-<seealso><a href="../urlmapping.html">Mapping URLs to Filesystem
-Location</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableMMAP</name>
-<description>Use memory-mapping to read files during delivery</description>
-<syntax>EnableMMAP On|Off</syntax>
-<default>EnableMMAP On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive controls whether the <code>httpd</code> may use
- memory-mapping if it needs to read the contents of a file during
- delivery. By default, when the handling of a request requires
- access to the data within a file -- for example, when delivering a
- server-parsed file using <module>mod_include</module> -- Apache
- memory-maps the file if the OS supports it.</p>
-
- <p>This memory-mapping sometimes yields a performance improvement.
- But in some environments, it is better to disable the memory-mapping
- to prevent operational problems:</p>
-
- <ul>
- <li>On some multiprocessor systems, memory-mapping can reduce the
- performance of the <code>httpd</code>.</li>
- <li>With an NFS-mounted <directive module="core">DocumentRoot</directive>,
- the <code>httpd</code> may crash due to a segmentation fault if a file
- is deleted or truncated while the <code>httpd</code> has it
- memory-mapped.</li>
- </ul>
-
- <p>For server configurations that are vulnerable to these problems,
- you should disable memory-mapping of delivered files by specifying:</p>
-
- <example>
- EnableMMAP Off
- </example>
-
- <p>For NFS mounted files, this feature may be disabled explicitly for
- the offending files by specifying:</p>
-
- <example>
- &lt;Directory "/path-to-nfs-files"&gt;
- <indent>
- EnableMMAP Off
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableSendfile</name>
-<description>Use the kernel sendfile support to deliver files to the client</description>
-<syntax>EnableSendfile On|Off</syntax>
-<default>EnableSendfile On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Available in version 2.0.44 and later</compatibility>
-
-<usage>
- <p>This directive controls whether <code>httpd</code> may use the sendfile
- support from the kernel to transmit file contents to the client.
- By default, when the handling of a request requires no access
- to the data within a file -- for example, when delivering a
- static file -- Apache uses sendfile to deliver the file contents
- without ever reading the file if the OS supports it.</p>
-
- <p>This sendfile mechanism avoids separate read and send operations,
- and buffer allocations. But on some platforms or within some
- filesystems, it is better to disable this feature to avoid
- operational problems:</p>
-
- <ul>
- <li>Some platforms may have broken sendfile support that the build
- system did not detect, especially if the binaries were built on
- another box and moved to such a machine with broken sendfile
- support.</li>
- <li>On Linux the use of sendfile triggers TCP-checksum
- offloading bugs on certain networking cards when using IPv6.</li>
- <li>With a network-mounted <directive
- module="core">DocumentRoot</directive> (e.g., NFS or SMB),
- the kernel may be unable to serve the network file through
- its own cache.</li>
- </ul>
-
- <p>For server configurations that are vulnerable to these problems,
- you should disable this feature by specifying:</p>
-
- <example>
- EnableSendfile Off
- </example>
-
- <p>For NFS or SMB mounted files, this feature may be disabled explicitly
- for the offending files by specifying:</p>
-
- <example>
- &lt;Directory "/path-to-nfs-files"&gt;
- <indent>
- EnableSendfile Off
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorDocument</name>
-<description>What the server will return to the client
-in case of an error</description>
-<syntax>ErrorDocument <var>error-code</var> <var>document</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Quoting syntax for text messages is different in Apache
-2.0</compatibility>
-
-<usage>
- <p>In the event of a problem or error, Apache can be configured
- to do one of four things,</p>
-
- <ol>
- <li>output a simple hardcoded error message</li>
-
- <li>output a customized message</li>
-
- <li>redirect to a local <var>URL-path</var> to handle the
- problem/error</li>
-
- <li>redirect to an external <var>URL</var> to handle the
- problem/error</li>
- </ol>
-
- <p>The first option is the default, while options 2-4 are
- configured using the <directive>ErrorDocument</directive>
- directive, which is followed by the HTTP response code and a URL
- or a message. Apache will sometimes offer additional information
- regarding the problem/error.</p>
-
- <p>URLs can begin with a slash (/) for local URLs, or be a full
- URL which the client can resolve. Alternatively, a message can
- be provided to be displayed by the browser. Examples:</p>
-
- <example>
- ErrorDocument 500 http://foo.example.com/cgi-bin/tester<br />
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br />
- ErrorDocument 401 /subscription_info.html<br />
- ErrorDocument 403 "Sorry can't allow you access today"
- </example>
-
- <p>Additionally, the special value <code>default</code> can be used
- to specify Apache's simple hardcoded message. While not required
- under normal circumstances, <code>default</code> will restore
- Apache's simple hardcoded message for configurations that would
- otherwise inherit an existing <directive>ErrorDocument</directive>.</p>
-
- <example>
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br /><br />
- &lt;Directory /web/docs&gt;<br />
- <indent>
- ErrorDocument 404 default<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>Note that when you specify an <directive>ErrorDocument</directive>
- that points to a remote URL (ie. anything with a method such as
- <code>http</code> in front of it), Apache will send a redirect to the
- client to tell it where to find the document, even if the
- document ends up being on the same server. This has several
- implications, the most important being that the client will not
- receive the original error status code, but instead will
- receive a redirect status code. This in turn can confuse web
- robots and other clients which try to determine if a URL is
- valid using the status code. In addition, if you use a remote
- URL in an <code>ErrorDocument 401</code>, the client will not
- know to prompt the user for a password since it will not
- receive the 401 status code. Therefore, <strong>if you use an
- <code>ErrorDocument 401</code> directive then it must refer to a local
- document.</strong></p>
-
- <p>Microsoft Internet Explorer (MSIE) will by default ignore
- server-generated error messages when they are "too small" and substitute
- its own "friendly" error messages. The size threshold varies depending on
- the type of error, but in general, if you make your error document
- greater than 512 bytes, then MSIE will show the server-generated
- error rather than masking it. More information is available in
- Microsoft Knowledge Base article <a
- href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807"
- >Q294807</a>.</p>
-
- <p>Prior to version 2.0, messages were indicated by prefixing
- them with a single unmatched double quote character.</p>
-</usage>
-
-<seealso><a href="../custom-error.html">documentation of
- customizable responses</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorLog</name>
-<description>Location where the server will log errors</description>
-<syntax> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</syntax>
-<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ErrorLog</directive> directive sets the name of
- the file to which the server will log any errors it encounters. If
- the <var>file-path</var> is not absolute then it is assumed to be
- relative to the <directive module="core">ServerRoot</directive>.</p>
-
- <example><title>Example</title>
- ErrorLog /var/log/httpd/error_log
- </example>
-
- <p>If the <var>file-path</var>
- begins with a pipe (|) then it is assumed to be a command to spawn
- to handle the error log.</p>
-
- <example><title>Example</title>
- ErrorLog "|/usr/local/bin/httpd_errors"
- </example>
-
- <p>Using <code>syslog</code> instead of a filename enables logging
- via syslogd(8) if the system supports it. The default is to use
- syslog facility <code>local7</code>, but you can override this by
- using the <code>syslog:<var>facility</var></code> syntax where
- <var>facility</var> can be one of the names usually documented in
- syslog(1).</p>
-
- <example><title>Example</title>
- ErrorLog syslog:user
- </example>
-
- <p>SECURITY: See the <a
- href="../misc/security_tips.html#serverroot">security tips</a>
- document for details on why your security could be compromised
- if the directory where log files are stored is writable by
- anyone other than the user that starts the server.</p>
- <note type="warning"><title>Note</title>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </note>
-</usage>
-<seealso><directive module="core">LogLevel</directive></seealso>
-<seealso><a href="../logs.html">Apache Log Files</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>FileETag</name>
-<description>File attributes used to create the ETag
-HTTP response header</description>
-<syntax>FileETag <var>component</var> ...</syntax>
-<default>FileETag INode MTime Size</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>
- The <directive>FileETag</directive> directive configures the file
- attributes that are used to create the <code>ETag</code> (entity
- tag) response header field when the document is based on a file.
- (The <code>ETag</code> value is used in cache management to save
- network bandwidth.) In Apache 1.3.22 and earlier, the
- <code>ETag</code> value was <em>always</em> formed
- from the file's inode, size, and last-modified time (mtime). The
- <directive>FileETag</directive> directive allows you to choose
- which of these -- if any -- should be used. The recognized keywords are:
- </p>
-
- <dl>
- <dt><strong>INode</strong></dt>
- <dd>The file's i-node number will be included in the calculation</dd>
- <dt><strong>MTime</strong></dt>
- <dd>The date and time the file was last modified will be included</dd>
- <dt><strong>Size</strong></dt>
- <dd>The number of bytes in the file will be included</dd>
- <dt><strong>All</strong></dt>
- <dd>All available fields will be used. This is equivalent to:
- <example>FileETag INode MTime Size</example></dd>
- <dt><strong>None</strong></dt>
- <dd>If a document is file-based, no <code>ETag</code> field will be
- included in the response</dd>
- </dl>
-
- <p>The <code>INode</code>, <code>MTime</code>, and <code>Size</code>
- keywords may be prefixed with either <code>+</code> or <code>-</code>,
- which allow changes to be made to the default setting inherited
- from a broader scope. Any keyword appearing without such a prefix
- immediately and completely cancels the inherited setting.</p>
-
- <p>If a directory's configuration includes
- <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>, and a
- subdirectory's includes <code>FileETag&nbsp;-INode</code>,
- the setting for that subdirectory (which will be inherited by
- any sub-subdirectories that don't override it) will be equivalent to
- <code>FileETag&nbsp;MTime&nbsp;Size</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Files</name>
-<description>Contains directives that apply to matched
-filenames</description>
-<syntax>&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>The <directive type="section">Files</directive> directive
- limits the scope of the enclosed directives by filename. It is comparable
- to the <directive module="core" type="section">Directory</directive>
- and <directive module="core" type="section">Location</directive>
- directives. It should be matched with a <code>&lt;/Files&gt;</code>
- directive. The directives given within this section will be applied to
- any object with a basename (last component of filename) matching the
- specified filename. <directive type="section">Files</directive>
- sections are processed in the order they appear in the
- configuration file, after the <directive module="core"
- type="section">Directory</directive> sections and
- <code>.htaccess</code> files are read, but before <directive
- type="section" module="core">Location</directive> sections. Note
- that <directive type="section">Files</directive> can be nested
- inside <directive type="section"
- module="core">Directory</directive> sections to restrict the
- portion of the filesystem they apply to.</p>
-
- <p>The <var>filename</var> argument should include a filename, or
- a wild-card string, where <code>?</code> matches any single character,
- and <code>*</code> matches any sequences of characters. Extended regular
- expressions can also be used, with the addition of the
- <code>~</code> character. For example:</p>
-
- <example>
- &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
- </example>
-
- <p>would match most common Internet graphics formats. <directive
- module="core" type="section">FilesMatch</directive> is preferred,
- however.</p>
-
- <p>Note that unlike <directive type="section"
- module="core">Directory</directive> and <directive type="section"
- module="core">Location</directive> sections, <directive
- type="section">Files</directive> sections can be used inside
- <code>.htaccess</code> files. This allows users to control access to
- their own files, at a file-by-file level.</p>
-
-</usage>
-<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>FilesMatch</name>
-<description>Contains directives that apply to regular-expression matched
-filenames</description>
-<syntax>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>The <directive type="section">FilesMatch</directive> directive
- limits the scope of the enclosed directives by filename, just as the
- <directive module="core" type="section">Files</directive> directive
- does. However, it accepts a regular expression. For example:</p>
-
- <example>
- &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
- </example>
-
- <p>would match most common Internet graphics formats.</p>
-</usage>
-
-<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceType</name>
-<description>Forces all matching files to be served with the specified
-MIME content-type</description>
-<syntax>ForceType <var>MIME-type</var>|None</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Moved to the core in Apache 2.0</compatibility>
-
-<usage>
- <p>When placed into an <code>.htaccess</code> file or a
- <directive type="section" module="core">Directory</directive>, or
- <directive type="section" module="core">Location</directive> or
- <directive type="section" module="core">Files</directive>
- section, this directive forces all matching files to be served
- with the content type identification given by
- <var>MIME-type</var>. For example, if you had a directory full of
- GIF files, but did not want to label them all with <code>.gif</code>,
- you might want to use:</p>
-
- <example>
- ForceType image/gif
- </example>
-
- <p>Note that unlike <directive module="core">DefaultType</directive>,
- this directive overrides all mime-type associations, including
- filename extensions, that might identify the media type.</p>
-
- <p>You can override any <directive>ForceType</directive> setting
- by using the value of <code>None</code>:</p>
-
- <example>
- # force all files to be image/gif:<br />
- &lt;Location /images&gt;<br />
- <indent>
- ForceType image/gif<br />
- </indent>
- &lt;/Location&gt;<br />
- <br />
- # but normal mime-type associations here:<br />
- &lt;Location /images/mixed&gt;<br />
- <indent>
- ForceType None<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HostnameLookups</name>
-<description>Enables DNS lookups on client IP addresses</description>
-<syntax>HostnameLookups On|Off|Double</syntax>
-<default>HostnameLookups Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>This directive enables DNS lookups so that host names can be
- logged (and passed to CGIs/SSIs in <code>REMOTE_HOST</code>).
- The value <code>Double</code> refers to doing double-reverse
- DNS lookup. That is, after a reverse lookup is performed, a forward
- lookup is then performed on that result. At least one of the IP
- addresses in the forward lookup must match the original
- address. (In "tcpwrappers" terminology this is called
- <code>PARANOID</code>.)</p>
-
- <p>Regardless of the setting, when <module>mod_authz_host</module> is
- used for controlling access by hostname, a double reverse lookup
- will be performed. This is necessary for security. Note that the
- result of this double-reverse isn't generally available unless you
- set <code>HostnameLookups Double</code>. For example, if only
- <code>HostnameLookups On</code> and a request is made to an object
- that is protected by hostname restrictions, regardless of whether
- the double-reverse fails or not, CGIs will still be passed the
- single-reverse result in <code>REMOTE_HOST</code>.</p>
-
- <p>The default is <code>Off</code> in order to save the network
- traffic for those sites that don't truly need the reverse
- lookups done. It is also better for the end users because they
- don't have to suffer the extra latency that a lookup entails.
- Heavily loaded sites should leave this directive
- <code>Off</code>, since DNS lookups can take considerable
- amounts of time. The utility <a
- href="../programs/logresolve.html">logresolve</a>, compiled by default
- to the <code>bin</code> subdirectory of your installation directory, can
- be used to look up host names from logged IP addresses offline.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfDefine</name>
-<description>Encloses directives that will be processed only
-if a test is true at startup</description>
-<syntax>&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>The <code>&lt;IfDefine <var>test</var>&gt;...&lt;/IfDefine&gt;
- </code> section is used to mark directives that are conditional. The
- directives within an <directive type="section">IfDefine</directive>
- section are only processed if the <var>test</var> is true. If <var>
- test</var> is false, everything between the start and end markers is
- ignored.</p>
-
- <p>The <var>test</var> in the <directive type="section"
- >IfDefine</directive> section directive can be one of two forms:</p>
-
- <ul>
- <li><var>parameter-name</var></li>
-
- <li><code>!</code><var>parameter-name</var></li>
- </ul>
-
- <p>In the former case, the directives between the start and end
- markers are only processed if the parameter named
- <var>parameter-name</var> is defined. The second format reverses
- the test, and only processes the directives if
- <var>parameter-name</var> is <strong>not</strong> defined.</p>
-
- <p>The <var>parameter-name</var> argument is a define as given on
- the <code>httpd</code> command line via <code>-D<var>parameter-</var>
- </code>, at the time the server was started.</p>
-
- <p><directive type="section">IfDefine</directive> sections are
- nest-able, which can be used to implement simple
- multiple-parameter tests. Example:</p>
-
- <example>
- httpd -DReverseProxy ...<br />
- <br />
- # httpd.conf<br />
- &lt;IfDefine ReverseProxy&gt;<br />
- <indent>
- LoadModule rewrite_module modules/mod_rewrite.so<br />
- LoadModule proxy_module modules/libproxy.so<br />
- </indent>
- &lt;/IfDefine&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfModule</name>
-<description>Encloses directives that are processed conditional on the
-presence or absence of a specific module</description>
-<syntax>&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-<compatibility>Module identifiers are available in version 2.1 and
-later.</compatibility>
-
-<usage>
- <p>The <code>&lt;IfModule <var>test</var>&gt;...&lt;/IfModule&gt;</code>
- section is used to mark directives that are conditional on the presence of
- a specific module. The directives within an <directive type="section"
- >IfModule</directive> section are only processed if the <var>test</var>
- is true. If <var>test</var> is false, everything between the start and
- end markers is ignored.</p>
-
- <p>The <var>test</var> in the <directive type="section"
- >IfModule</directive> section directive can be one of two forms:</p>
-
- <ul>
- <li><var>module</var></li>
-
- <li>!<var>module</var></li>
- </ul>
-
- <p>In the former case, the directives between the start and end
- markers are only processed if the module named <var>module</var>
- is included in Apache -- either compiled in or
- dynamically loaded using <directive module="mod_so"
- >LoadModule</directive>. The second format reverses the test,
- and only processes the directives if <var>module</var> is
- <strong>not</strong> included.</p>
-
- <p>The <var>module</var> argument can be either the module identifier or
- the file name of the module, at the time it was compiled. For example,
- <code>rewrite_module</code> is the identifier and
- <code>mod_rewrite.c</code> is the file name. If a module consists of
- several source files, use the name of the file containing the string
- <code>STANDARD20_MODULE_STUFF</code>.</p>
-
- <p><directive type="section">IfModule</directive> sections are
- nest-able, which can be used to implement simple multiple-module
- tests.</p>
-
- <note>This section should only be used if you need to have one
- configuration file that works whether or not a specific module
- is available. In normal operation, directives need not be
- placed in <directive type="section">IfModule</directive>
- sections.</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Include</name>
-<description>Includes other configuration files from within
-the server configuration files</description>
-<syntax>Include <var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-<compatibility>Wildcard matching available in 2.0.41 and later</compatibility>
-
-<usage>
- <p>This directive allows inclusion of other configuration files
- from within the server configuration files.</p>
-
- <p>Shell-style (<code>fnmatch()</code>) wildcard characters can be used to
- include several files at once, in alphabetical order. In
- addition, if <directive>Include</directive> points to a directory,
- rather than a file, Apache will read all files in that directory
- and any subdirectory. But including entire directories is not
- recommended, because it is easy to accidentally leave temporary
- files in a directory that can cause <code>httpd</code> to
- fail.</p>
-
- <p>The file path specified may be an absolute path, or may be relative
- to the <directive module="core">ServerRoot</directive> directory.</p>
-
- <p>Examples:</p>
-
- <example>
- Include /usr/local/apache2/conf/ssl.conf<br />
- Include /usr/local/apache2/conf/vhosts/*.conf
- </example>
-
- <p>Or, providing paths relative to your <directive
- module="core">ServerRoot</directive> directory:</p>
-
- <example>
- Include conf/ssl.conf<br />
- Include conf/vhosts/*.conf
- </example>
-
- <p>Running <code>apachectl configtest</code> will give you a list
- of the files that are being processed during the configuration
- check:</p>
-
- <example>
- root@host# apachectl configtest<br />
- Processing config file: /usr/local/apache2/conf/ssl.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf<br />
- Syntax OK
- </example>
-</usage>
-
-<seealso><a href="../programs/apachectl.html">apachectl</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAlive</name>
-<description>Enables HTTP persistent connections</description>
-<syntax>KeepAlive On|Off</syntax>
-<default>KeepAlive On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The Keep-Alive extension to HTTP/1.0 and the persistent
- connection feature of HTTP/1.1 provide long-lived HTTP sessions
- which allow multiple requests to be sent over the same TCP
- connection. In some cases this has been shown to result in an
- almost 50% speedup in latency times for HTML documents with
- many images. To enable Keep-Alive connections, set
- <code>KeepAlive On</code>.</p>
-
- <p>For HTTP/1.0 clients, Keep-Alive connections will only be
- used if they are specifically requested by a client. In
- addition, a Keep-Alive connection with an HTTP/1.0 client can
- only be used when the length of the content is known in
- advance. This implies that dynamic content such as CGI output,
- SSI pages, and server-generated directory listings will
- generally not use Keep-Alive connections to HTTP/1.0 clients.
- For HTTP/1.1 clients, persistent connections are the default
- unless otherwise specified. If the client requests it, chunked
- encoding will be used in order to send content of unknown
- length over persistent connections.</p>
-</usage>
-
-<seealso><directive module="core">MaxKeepAliveRequests</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAliveTimeout</name>
-<description>Amount of time the server will wait for subsequent
-requests on a persistent connection</description>
-<syntax>KeepAliveTimeout <var>seconds</var></syntax>
-<default>KeepAliveTimeout 15</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The number of seconds Apache will wait for a subsequent
- request before closing the connection. Once a request has been
- received, the timeout value specified by the
- <directive module="core">Timeout</directive> directive applies.</p>
-
- <p>Setting <directive>KeepAliveTimeout</directive> to a high value
- may cause performance problems in heavily loaded servers. The
- higher the timeout, the more server processes will be kept
- occupied waiting on connections with idle clients.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Limit</name>
-<description>Restrict enclosed access controls to only certain HTTP
-methods</description>
-<syntax>&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Access controls are normally effective for
- <strong>all</strong> access methods, and this is the usual
- desired behavior. <strong>In the general case, access control
- directives should not be placed within a
- <directive type="section">Limit</directive> section.</strong></p>
-
- <p>The purpose of the <directive type="section">Limit</directive>
- directive is to restrict the effect of the access controls to the
- nominated HTTP methods. For all other methods, the access
- restrictions that are enclosed in the <directive
- type="section">Limit</directive> bracket <strong>will have no
- effect</strong>. The following example applies the access control
- only to the methods <code>POST</code>, <code>PUT</code>, and
- <code>DELETE</code>, leaving all other methods unprotected:</p>
-
- <example>
- &lt;Limit POST PUT DELETE&gt;<br />
- <indent>
- Require valid-user<br />
- </indent>
- &lt;/Limit&gt;
- </example>
-
- <p>The method names listed can be one or more of: <code>GET</code>,
- <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
- <code>CONNECT</code>, <code>OPTIONS</code>,
- <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
- <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
- <code>LOCK</code>, and <code>UNLOCK</code>. <strong>The method name is
- case-sensitive.</strong> If <code>GET</code> is used it will also
- restrict <code>HEAD</code> requests. The <code>TRACE</code> method
- cannot be limited.</p>
-
- <note type="warning">A <directive type="section"
- module="core">LimitExcept</directive> section should always be
- used in preference to a <directive type="section"
- module="core">Limit</directive> section when restricting access,
- since a <directive type="section"
- module="core">LimitExcept</directive> section provides protection
- against arbitrary methods.</note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LimitExcept</name>
-<description>Restrict access controls to all HTTP methods
-except the named ones</description>
-<syntax>&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><directive type="section">LimitExcept</directive> and
- <code>&lt;/LimitExcept&gt;</code> are used to enclose
- a group of access control directives which will then apply to any
- HTTP access method <strong>not</strong> listed in the arguments;
- i.e., it is the opposite of a <directive type="section"
- module="core">Limit</directive> section and can be used to control
- both standard and nonstandard/unrecognized methods. See the
- documentation for <directive module="core"
- type="section">Limit</directive> for more details.</p>
-
- <p>For example:</p>
-
- <example>
- &lt;LimitExcept POST GET&gt;<br />
- <indent>
- Require valid-user<br />
- </indent>
- &lt;/LimitExcept&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitInternalRecursion</name>
-<description>Determine maximum number of internal redirects and nested
-subrequests</description>
-<syntax>LimitInternalRecursion <var>number</var> [<var>number</var>]</syntax>
-<default>LimitInternalRecursion 10</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in Apache 2.0.47 and later</compatibility>
-
-<usage>
- <p>An internal redirect happens, for example, when using the <directive
- module="mod_actions">Action</directive> directive, which internally
- redirects the original request to a CGI script. A subrequest is Apache's
- mechanism to find out what would happen for some URI if it were requested.
- For example, <module>mod_dir</module> uses subrequests to look for the
- files listed in the <directive module="mod_dir">DirectoryIndex</directive>
- directive.</p>
-
- <p><directive>LimitInternalRecursion</directive> prevents the server
- from crashing when entering an infinite loop of internal redirects or
- subrequests. Such loops are usually caused by misconfigurations.</p>
-
- <p>The directive stores two different limits, which are evaluated on
- per-request basis. The first <var>number</var> is the maximum number of
- internal redirects, that may follow each other. The second <var>number</var>
- determines, how deep subrequests may be nested. If you specify only one
- <var>number</var>, it will be assigned to both limits.</p>
-
- <example><title>Example</title>
- LimitInternalRecursion 5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestBody</name>
-<description>Restricts the total size of the HTTP request body sent
-from the client</description>
-<syntax>LimitRequestBody <var>bytes</var></syntax>
-<default>LimitRequestBody 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>This directive specifies the number of <var>bytes</var> from 0
- (meaning unlimited) to 2147483647 (2GB) that are allowed in a
- request body.</p>
-
- <p>The <directive>LimitRequestBody</directive> directive allows
- the user to set a limit on the allowed size of an HTTP request
- message body within the context in which the directive is given
- (server, per-directory, per-file or per-location). If the client
- request exceeds that limit, the server will return an error
- response instead of servicing the request. The size of a normal
- request message body will vary greatly depending on the nature of
- the resource and the methods allowed on that resource. CGI scripts
- typically use the message body for retrieving form information.
- Implementations of the <code>PUT</code> method will require
- a value at least as large as any representation that the server
- wishes to accept for that resource.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service
- attacks.</p>
-
- <p>If, for example, you are permitting file upload to a particular
- location, and wish to limit the size of the uploaded file to 100K,
- you might use the following directive:</p>
-
- <example>
- LimitRequestBody 102400
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFields</name>
-<description>Limits the number of HTTP request header fields that
-will be accepted from the client</description>
-<syntax>LimitRequestFields <var>number</var></syntax>
-<default>LimitRequestFields 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><var>Number</var> is an integer from 0 (meaning unlimited) to
- 32767. The default value is defined by the compile-time
- constant <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (100 as
- distributed).</p>
-
- <p>The <directive>LimitRequestFields</directive> directive allows
- the server administrator to modify the limit on the number of
- request header fields allowed in an HTTP request. A server needs
- this value to be larger than the number of fields that a normal
- client request might include. The number of request header fields
- used by a client rarely exceeds 20, but this may vary among
- different client implementations, often depending upon the extent
- to which a user has configured their browser to support detailed
- content negotiation. Optional HTTP extensions are often expressed
- using request header fields.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service attacks.
- The value should be increased if normal clients see an error
- response from the server that indicates too many fields were
- sent in the request.</p>
-
- <p>For example:</p>
-
- <example>
- LimitRequestFields 50
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFieldSize</name>
-<description>Limits the size of the HTTP request header allowed from the
-client</description>
-<syntax>LimitRequestFieldsize <var>bytes</var></syntax>
-<default>LimitRequestFieldsize 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>This directive specifies the number of <var>bytes</var> from 0
- to the value of the compile-time constant
- <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (8190 as
- distributed) that will be allowed in an HTTP request
- header.</p>
-
- <p>The <directive>LimitRequestFieldSize</directive> directive
- allows the server administrator to reduce the limit on the allowed
- size of an HTTP request header field below the normal input buffer
- size compiled with the server. A server needs this value to be
- large enough to hold any one header field from a normal client
- request. The size of a normal request header field will vary
- greatly among different client implementations, often depending
- upon the extent to which a user has configured their browser to
- support detailed content negotiation.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service attacks.</p>
-
- <p>For example:</p>
-
- <example>
- LimitRequestFieldSize 4094
- </example>
-
- <note>Under normal conditions, the value should not be changed from
- the default.</note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestLine</name>
-<description>Limit the size of the HTTP request line that will be accepted
-from the client</description>
-<syntax>LimitRequestLine <var>bytes</var></syntax>
-<default>LimitRequestLine 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>This directive sets the number of <var>bytes</var> from 0 to
- the value of the compile-time constant
- <code>DEFAULT_LIMIT_REQUEST_LINE</code> (8190 as distributed)
- that will be allowed on the HTTP request-line.</p>
-
- <p>The <directive>LimitRequestLine</directive> directive allows
- the server administrator to reduce the limit on the allowed size
- of a client's HTTP request-line below the normal input buffer size
- compiled with the server. Since the request-line consists of the
- HTTP method, URI, and protocol version, the
- <directive>LimitRequestLine</directive> directive places a
- restriction on the length of a request-URI allowed for a request
- on the server. A server needs this value to be large enough to
- hold any of its resource names, including any information that
- might be passed in the query part of a <code>GET</code> request.</p>
-
- <p>This directive gives the server administrator greater
- control over abnormal client request behavior, which may be
- useful for avoiding some forms of denial-of-service attacks.</p>
-
- <p>For example:</p>
-
- <example>
- LimitRequestLine 4094
- </example>
-
- <note>Under normal conditions, the value should not be changed from
- the default.</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitXMLRequestBody</name>
-<description>Limits the size of an XML-based request body</description>
-<syntax>LimitXMLRequestBody <var>bytes</var></syntax>
-<default>LimitXMLRequestBody 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Limit (in bytes) on maximum size of an XML-based request
- body. A value of <code>0</code> will disable any checking.</p>
-
- <p>Example:</p>
-
- <example>
- LimitXMLRequestBody 0
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Location</name>
-<description>Applies the enclosed directives only to matching
-URLs</description>
-<syntax>&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive type="section">Location</directive> directive
- limits the scope of the enclosed directives by URL. It is similar to the
- <directive type="section" module="core">Directory</directive>
- directive, and starts a subsection which is terminated with a
- <code>&lt;/Location&gt;</code> directive. <directive
- type="section">Location</directive> sections are processed in the
- order they appear in the configuration file, after the <directive
- type="section" module="core">Directory</directive> sections and
- <code>.htaccess</code> files are read, and after the <directive
- type="section" module="core">Files</directive> sections.</p>
-
- <p><directive type="section">Location</directive> sections operate
- completely outside the filesystem. This has several consequences.
- Most importantly, <directive type="section">Location</directive>
- directives should not be used to control access to filesystem
- locations. Since several different URLs may map to the same
- filesystem location, such access controls may by circumvented.</p>
-
- <note><title>When to use <directive
- type="section">Location</directive></title>
-
- <p>Use <directive type="section">Location</directive> to apply
- directives to content that lives outside the filesystem. For
- content that lives in the filesystem, use <directive
- type="section" module="core">Directory</directive> and <directive
- type="section" module="core">Files</directive>. An exception is
- <code>&lt;Location /&gt;</code>, which is an easy way to
- apply a configuration to the entire server.</p>
- </note>
-
- <p>For all origin (non-proxy) requests, the URL to be matched is a
- URL-path of the form <code>/path/</code>. No scheme, hostname,
- port, or query string may be included. For proxy requests, the
- URL to be matched is of the form
- <code>scheme://servername/path</code>, and you must include the
- prefix.</p>
-
- <p>The URL may use wildcards. In a wild-card string, <code>?</code> matches
- any single character, and <code>*</code> matches any sequences of
- characters.</p>
-
- <p>Extended regular
- expressions can also be used, with the addition of the
- <code>~</code> character. For example:</p>
-
- <example>
- &lt;Location ~ "/(extra|special)/data"&gt;
- </example>
-
- <p>would match URLs that contained the substring <code>/extra/data</code>
- or <code>/special/data</code>. The directive <directive
- type="section" module="core">LocationMatch</directive> behaves
- identical to the regex version of <directive
- type="section">Location</directive>.</p>
-
- <p>The <directive type="section">Location</directive>
- functionality is especially useful when combined with the
- <directive module="core">SetHandler</directive>
- directive. For example, to enable status requests, but allow them
- only from browsers at <code>foo.com</code>, you might use:</p>
-
- <example>
- &lt;Location /status&gt;<br />
- <indent>
- SetHandler server-status<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note><title>Note about / (slash)</title>
- <p>The slash character has special meaning depending on where in a
- URL it appears. People may be used to its behavior in the filesystem
- where multiple adjacent slashes are frequently collapsed to a single
- slash (<em>i.e.</em>, <code>/home///foo</code> is the same as
- <code>/home/foo</code>). In URL-space this is not necessarily true.
- The <directive type="section" module="core">LocationMatch</directive>
- directive and the regex version of <directive type="section"
- >Location</directive> require you to explicitly specify multiple
- slashes if that is your intention.</p>
-
- <p>For example, <code>&lt;LocationMatch ^/abc&gt;</code> would match
- the request URL <code>/abc</code> but not the request URL <code>
- //abc</code>. The (non-regex) <directive type="section"
- >Location</directive> directive behaves similarly when used for
- proxy requests. But when (non-regex) <directive type="section"
- >Location</directive> is used for non-proxy requests it will
- implicitly match multiple slashes with a single slash. For example,
- if you specify <code>&lt;Location /abc/def&gt;</code> and the
- request is to <code>/abc//def</code> then it will match.</p>
- </note>
-</usage>
-<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LocationMatch</name>
-<description>Applies the enclosed directives only to regular-expression
-matching URLs</description>
-<syntax>&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive type="section">LocationMatch</directive> directive
- limits the scope of the enclosed directives by URL, in an identical manner
- to <directive module="core" type="section">Location</directive>. However,
- it takes a regular expression as an argument instead of a simple
- string. For example:</p>
-
- <example>
- &lt;LocationMatch "/(extra|special)/data"&gt;
- </example>
-
- <p>would match URLs that contained the substring <code>/extra/data</code>
- or <code>/special/data</code>.</p>
-</usage>
-
-<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogLevel</name>
-<description>Controls the verbosity of the ErrorLog</description>
-<syntax>LogLevel <var>level</var></syntax>
-<default>LogLevel warn</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>LogLevel</directive> adjusts the verbosity of the
- messages recorded in the error logs (see <directive
- module="core">ErrorLog</directive> directive). The following
- <var>level</var>s are available, in order of decreasing
- significance:</p>
-
- <table border="1">
- <columnspec><column width=".2"/><column width=".3"/><column width=".5"/>
- </columnspec>
- <tr>
- <th><strong>Level</strong> </th>
-
- <th><strong>Description</strong> </th>
-
- <th><strong>Example</strong> </th>
- </tr>
-
- <tr>
- <td><code>emerg</code> </td>
-
- <td>Emergencies - system is unusable.</td>
-
- <td>"Child cannot open lock file. Exiting"</td>
- </tr>
-
- <tr>
- <td><code>alert</code> </td>
-
- <td>Action must be taken immediately.</td>
-
- <td>"getpwuid: couldn't determine user name from uid"</td>
- </tr>
-
- <tr>
- <td><code>crit</code> </td>
-
- <td>Critical Conditions.</td>
-
- <td>"socket: Failed to get a socket, exiting child"</td>
- </tr>
-
- <tr>
- <td><code>error</code> </td>
-
- <td>Error conditions.</td>
-
- <td>"Premature end of script headers"</td>
- </tr>
-
- <tr>
- <td><code>warn</code> </td>
-
- <td>Warning conditions.</td>
-
- <td>"child process 1234 did not exit, sending another
- SIGHUP"</td>
- </tr>
-
- <tr>
- <td><code>notice</code> </td>
-
- <td>Normal but significant condition.</td>
-
- <td>"httpd: caught SIGBUS, attempting to dump core in
- ..."</td>
- </tr>
-
- <tr>
- <td><code>info</code> </td>
-
- <td>Informational.</td>
-
- <td>"Server seems busy, (you may need to increase
- StartServers, or Min/MaxSpareServers)..."</td>
- </tr>
-
- <tr>
- <td><code>debug</code> </td>
-
- <td>Debug-level messages</td>
-
- <td>"Opening config file ..."</td>
- </tr>
- </table>
-
- <p>When a particular level is specified, messages from all
- other levels of higher significance will be reported as well.
- <em>E.g.</em>, when <code>LogLevel info</code> is specified,
- then messages with log levels of <code>notice</code> and
- <code>warn</code> will also be posted.</p>
-
- <p>Using a level of at least <code>crit</code> is
- recommended.</p>
-
- <p>For example:</p>
-
- <example>
- LogLevel notice
- </example>
-
- <note><title>Note</title>
- <p>When logging to a regular file messages of the level
- <code>notice</code> cannot be suppressed and thus are always
- logged. However, this doesn't apply when logging is done
- using <code>syslog</code>.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxKeepAliveRequests</name>
-<description>Number of requests allowed on a persistent
-connection</description>
-<syntax>MaxKeepAliveRequests <var>number</var></syntax>
-<default>MaxKeepAliveRequests 100</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>MaxKeepAliveRequests</directive> directive
- limits the number of requests allowed per connection when
- <directive module="core" >KeepAlive</directive> is on. If it is
- set to <code>0</code>, unlimited requests will be allowed. We
- recommend that this setting be kept to a high value for maximum
- server performance.</p>
-
- <p>For example:</p>
-
- <example>
- MaxKeepAliveRequests 500
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NameVirtualHost</name>
-<description>Designates an IP address for name-virtual
-hosting</description>
-<syntax>NameVirtualHost <var>addr</var>[:<var>port</var>]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>NameVirtualHost</directive> directive is a
- required directive if you want to configure <a
- href="../vhosts/">name-based virtual hosts</a>.</p>
-
- <p>Although <var>addr</var> can be hostname it is recommended
- that you always use an IP address, e.g.</p>
-
- <example>
- NameVirtualHost 111.22.33.44
- </example>
-
- <p>With the <directive>NameVirtualHost</directive> directive you
- specify the IP address on which the server will receive requests
- for the name-based virtual hosts. This will usually be the address
- to which your name-based virtual host names resolve. In cases
- where a firewall or other proxy receives the requests and forwards
- them on a different IP address to the server, you must specify the
- IP address of the physical interface on the machine which will be
- servicing the requests. If you have multiple name-based hosts on
- multiple addresses, repeat the directive for each address.</p>
-
- <note><title>Note</title>
- <p>Note, that the "main server" and any <code>_default_</code> servers
- will <strong>never</strong> be served for a request to a
- <directive>NameVirtualHost</directive> IP address (unless for some
- reason you specify <directive>NameVirtualHost</directive> but then
- don't define any <directive>VirtualHost</directive>s for that
- address).</p>
- </note>
-
- <p>Optionally you can specify a port number on which the
- name-based virtual hosts should be used, e.g.</p>
-
- <example>
- NameVirtualHost 111.22.33.44:8080
- </example>
-
- <p>IPv6 addresses must be enclosed in square brackets, as shown
- in the following example:</p>
-
- <example>
- NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
- </example>
-
- <p>To receive requests on all interfaces, you can use an argument of
- <code>*</code></p>
-
- <example>
- NameVirtualHost *
- </example>
-
- <note><title>Argument to <directive type="section">VirtualHost</directive>
- directive</title>
- <p>Note that the argument to the <directive
- type="section">VirtualHost</directive> directive must
- exactly match the argument to the <directive
- >NameVirtualHost</directive> directive.</p>
-
- <example>
- NameVirtualHost 1.2.3.4<br />
- &lt;VirtualHost 1.2.3.4&gt;<br />
- # ...<br />
- &lt;/VirtualHost&gt;<br />
- </example>
- </note>
-</usage>
-
-<seealso><a href="../vhosts/">Virtual Hosts
-documentation</a></seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Options</name>
-<description>Configures what features are available in a particular
-directory</description>
-<syntax>Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</syntax>
-<default>Options All</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-
-<usage>
- <p>The <directive>Options</directive> directive controls which
- server features are available in a particular directory.</p>
-
- <p><var>option</var> can be set to <code>None</code>, in which
- case none of the extra features are enabled, or one or more of
- the following:</p>
-
- <dl>
- <dt><code>All</code></dt>
-
- <dd>All options except for <code>MultiViews</code>. This is the default
- setting.</dd>
-
- <dt><code>ExecCGI</code></dt>
-
- <dd>
- Execution of CGI scripts using <module>mod_cgi</module>
- is permitted.</dd>
-
- <dt><code>FollowSymLinks</code></dt>
-
- <dd>
-
- The server will follow symbolic links in this directory.
- <note>
- <p>Even though the server follows the symlink it does <em>not</em>
- change the pathname used to match against <directive type="section"
- module="core">Directory</directive> sections.</p>
- <p>Note also, that this option <strong>gets ignored</strong> if set
- inside a <directive type="section" module="core">Location</directive>
- section.</p>
- </note></dd>
-
- <dt><code>Includes</code></dt>
-
- <dd>
- Server-side includes provided by <module>mod_include</module>
- are permitted.</dd>
-
- <dt><code>IncludesNOEXEC</code></dt>
-
- <dd>
-
- Server-side includes are permitted, but the <code>#exec
- cmd</code> and <code>#exec cgi</code> are disabled. It is still
- possible to <code>#include virtual</code> CGI scripts from
- <directive module="mod_alias">ScriptAlias</directive>ed
- directories.</dd>
-
- <dt><code>Indexes</code></dt>
-
- <dd>
- If a URL which maps to a directory is requested, and there
- is no <directive module="mod_dir">DirectoryIndex</directive>
- (<em>e.g.</em>, <code>index.html</code>) in that directory, then
- <module>mod_autoindex</module> will return a formatted listing
- of the directory.</dd>
-
- <dt><code>MultiViews</code></dt>
-
- <dd>
- <a href="../content-negotiation.html">Content negotiated</a>
- "MultiViews" are allowed using
- <module>mod_negotiation</module>.</dd>
-
- <dt><code>SymLinksIfOwnerMatch</code></dt>
-
- <dd>The server will only follow symbolic links for which the
- target file or directory is owned by the same user id as the
- link.
-
- <note><title>Note</title> This option gets ignored if
- set inside a <directive module="core"
- type="section">Location</directive> section.</note>
- </dd>
- </dl>
-
- <p>Normally, if multiple <directive>Options</directive> could
- apply to a directory, then the most specific one is used and
- others are ignored; the options are not merged. (See <a
- href="../sections.html#mergin">how sections are merged</a>.)
- However if <em>all</em> the options on the
- <directive>Options</directive> directive are preceded by a
- <code>+</code> or <code>-</code> symbol, the options are
- merged. Any options preceded by a <code>+</code> are added to the
- options currently in force, and any options preceded by a
- <code>-</code> are removed from the options currently in
- force. </p>
-
- <p>For example, without any <code>+</code> and <code>-</code> symbols:</p>
-
- <example>
- &lt;Directory /web/docs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <indent>
- Options Includes<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>then only <code>Includes</code> will be set for the
- <code>/web/docs/spec</code> directory. However if the second
- <directive>Options</directive> directive uses the <code>+</code> and
- <code>-</code> symbols:</p>
-
- <example>
- &lt;Directory /web/docs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <indent>
- Options +Includes -Indexes<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>then the options <code>FollowSymLinks</code> and
- <code>Includes</code> are set for the <code>/web/docs/spec</code>
- directory.</p>
-
- <note><title>Note</title>
- <p>Using <code>-IncludesNOEXEC</code> or
- <code>-Includes</code> disables server-side includes completely
- regardless of the previous setting.</p>
- </note>
-
- <p>The default in the absence of any other settings is
- <code>All</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Require</name>
-<description>Selects which authenticated users can access
-a resource</description>
-<syntax>Require <var>entity-name</var> [<var>entity-name</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>This directive selects which authenticated users can access
- a directory. The allowed syntaxes are:</p>
-
- <dl>
- <dt><code>Require user <var>userid</var> [<var>userid</var>]
- ...</code></dt>
- <dd>Only the named users can access the resource.</dd>
-
- <dt><code>Require group <var>group-name</var> [<var>group-name</var>]
- ...</code></dt>
- <dd>Only users in the named groups can access the resource.</dd>
-
- <dt><code>Require valid-user</code></dt>
- <dd>All valid users can access the resource.</dd>
- </dl>
-
- <p><directive>Require</directive> must be accompanied by
- <directive module="core">AuthName</directive> and <directive
- module="core">AuthType</directive> directives, and directives such
- as <directive module="mod_authn_file">AuthUserFile</directive>
- and <directive module="mod_authz_groupfile">AuthGroupFile</directive> (to
- define users and groups) in order to work correctly. Example:</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Restricted Directory"<br />
- AuthUserFile /web/users<br />
- AuthGroupFile /web/groups<br />
- Require group admin
- </example>
-
- <p>Access controls which are applied in this way are effective for
- <strong>all</strong> methods. <strong>This is what is normally
- desired.</strong> If you wish to apply access controls only to
- specific methods, while leaving other methods unprotected, then
- place the <directive>Require</directive> statement into a
- <directive module="core" type="section">Limit</directive>
- section.</p>
-</usage>
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><module>mod_authz_host</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitCPU</name>
-<description>Limits the CPU consumption of processes launched
-by Apache children</description>
-<syntax>RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</syntax>
-<default>Unset; uses operating system defaults</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Takes 1 or 2 parameters. The first parameter sets the soft
- resource limit for all processes and the second parameter sets
- the maximum resource limit. Either parameter can be a number,
- or <code>max</code> to indicate to the server that the limit should
- be set to the maximum allowed by the operating system
- configuration. Raising the maximum resource limit requires that
- the server is running as <code>root</code>, or in the initial startup
- phase.</p>
-
- <p>This applies to processes forked off from Apache children
- servicing requests, not the Apache children themselves. This
- includes CGI scripts and SSI exec commands, but not any
- processes forked off from the Apache parent such as piped
- logs.</p>
-
- <p>CPU resource limits are expressed in seconds per
- process.</p>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitMEM</name>
-<description>Limits the memory consumption of processes launched
-by Apache children</description>
-<syntax>RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</syntax>
-<default>Unset; uses operating system defaults</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Takes 1 or 2 parameters. The first parameter sets the soft
- resource limit for all processes and the second parameter sets
- the maximum resource limit. Either parameter can be a number,
- or <code>max</code> to indicate to the server that the limit should
- be set to the maximum allowed by the operating system
- configuration. Raising the maximum resource limit requires that
- the server is running as <code>root</code>, or in the initial startup
- phase.</p>
-
- <p>This applies to processes forked off from Apache children
- servicing requests, not the Apache children themselves. This
- includes CGI scripts and SSI exec commands, but not any
- processes forked off from the Apache parent such as piped
- logs.</p>
-
- <p>Memory resource limits are expressed in bytes per
- process.</p>
-</usage>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitNPROC</name>
-<description>Limits the number of processes that can be launched by
-processes launched by Apache children</description>
-<syntax>RLimitNPROC <var>number</var>|max [<var>number</var>|max]</syntax>
-<default>Unset; uses operating system defaults</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Takes 1 or 2 parameters. The first parameter sets the soft
- resource limit for all processes and the second parameter sets
- the maximum resource limit. Either parameter can be a number,
- or <code>max</code> to indicate to the server that the limit
- should be set to the maximum allowed by the operating system
- configuration. Raising the maximum resource limit requires that
- the server is running as <code>root</code>, or in the initial startup
- phase.</p>
-
- <p>This applies to processes forked off from Apache children
- servicing requests, not the Apache children themselves. This
- includes CGI scripts and SSI exec commands, but not any
- processes forked off from the Apache parent such as piped
- logs.</p>
-
- <p>Process limits control the number of processes per user.</p>
-
- <note><title>Note</title>
- <p>If CGI processes are <strong>not</strong> running
- under user ids other than the web server user id, this directive
- will limit the number of processes that the server itself can
- create. Evidence of this situation will be indicated by
- <strong><code>cannot fork</code></strong> messages in the
- <code>error_log</code>.</p>
- </note>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Satisfy</name>
-<description>Interaction between host-level access control and
-user authentication</description>
-<syntax>Satisfy Any|All</syntax>
-<default>Satisfy All</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Access policy if both <directive
- module="mod_authz_host">Allow</directive> and <directive
- module="core">Require</directive> used. The parameter can be
- either <code>All</code> or <code>Any</code>. This directive is only
- useful if access to a particular area is being restricted by both
- username/password <em>and</em> client host address. In this case
- the default behavior (<code>All</code>) is to require that the client
- passes the address access restriction <em>and</em> enters a valid
- username and password. With the <code>Any</code> option the client will be
- granted access if they either pass the host restriction or enter a
- valid username and password. This can be used to password restrict
- an area, but to let clients from particular addresses in without
- prompting for a password.</p>
-
- <p>For example, if you wanted to let people on your network have
- unrestricted access to a portion of your website, but require that
- people outside of your network provide a password, you could use a
- configuration similar to the following:</p>
-
- <example>
- Require valid-user<br />
- Allow from 192.168.1<br />
- Satisfy Any
- </example>
-
-</usage>
- <seealso><directive module="mod_authz_host">Allow</directive></seealso>
- <seealso><directive module="core">Require</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptInterpreterSource</name>
-<description>Technique for locating the interpreter for CGI
-scripts</description>
-<syntax>ScriptInterpreterSource Registry|Registry-Strict|Script</syntax>
-<default>ScriptInterpreterSource Script</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Win32 only;
-option <code>Registry-Strict</code> is available in Apache 2.0 and
-later</compatibility>
-
-<usage>
- <p>This directive is used to control how Apache finds the
- interpreter used to run CGI scripts. The default setting is
- <code>Script</code>. This causes Apache to use the interpreter pointed to
- by the shebang line (first line, starting with <code>#!</code>) in the
- script. On Win32 systems this line usually looks like:</p>
-
- <example>
- #!C:/Perl/bin/perl.exe
- </example>
-
- <p>or, if perl is in the <code>PATH</code>, simply:</p>
-
- <example>
- #!perl
- </example>
-
- <p>Setting <code>ScriptInterpreterSource Registry</code> will
- cause the Windows Registry tree <code>HKEY_CLASSES_ROOT</code> to be
- searched using the script file extension (e.g., <code>.pl</code>) as a
- search key. The command defined by the registry subkey
- <code>Shell\ExecCGI\Command</code> or, if it does not exist, by the subkey
- <code>Shell\Open\Command</code> is used to open the script file. If the
- registry keys cannot be found, Apache falls back to the behavior of the
- <code>Script</code> option.</p>
-
- <note type="warning"><title>Security</title>
- <p>Be careful when using <code>ScriptInterpreterSource
- Registry</code> with <directive
- module="mod_alias">ScriptAlias</directive>'ed directories, because
- Apache will try to execute <strong>every</strong> file within this
- directory. The <code>Registry</code> setting may cause undesired
- program calls on files which are typically not executed. For
- example, the default open command on <code>.htm</code> files on
- most Windows systems will execute Microsoft Internet Explorer, so
- any HTTP request for an <code>.htm</code> file existing within the
- script directory would start the browser in the background on the
- server. This is a good way to crash your system within a minute or
- so.</p>
- </note>
-
- <p>The option <code>Registry-Strict</code> which is new in Apache
- 2.0 does the same thing as <code>Registry</code> but uses only the
- subkey <code>Shell\ExecCGI\Command</code>. The
- <code>ExecCGI</code> key is not a common one. It must be
- configured manually in the windows registry and hence prevents
- accidental program calls on your system.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAdmin</name>
-<description>Email address that the server includes in error
-messages sent to the client</description>
-<syntax>ServerAdmin <var>email-address</var>|<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ServerAdmin</directive> sets the contact address
- that the server includes in any error messages it returns to the
- client. If the <code>httpd</code> doesn't recognize the supplied argument
- as an URL, it
- assumes, that it's an <var>email-address</var> and prepends it with
- <code>mailto:</code> in hyperlink targets. However, it's recommended to
- actually use an email address, since there are a lot of CGI scripts that
- make that assumption. If you want to use an URL, it should point to another
- server under your control. Otherwise users may not be able to contact you in
- case of errors.</p>
-
- <p>It may be worth setting up a dedicated address for this, e.g.</p>
-
- <example>
- ServerAdmin www-admin@foo.example.com
- </example>
- <p>as users do not always mention that they are talking about the
- server!</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAlias</name>
-<description>Alternate names for a host used when matching requests
-to name-virtual hosts</description>
-<syntax>ServerAlias <var>hostname</var> [<var>hostname</var>] ...</syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p>The <directive>ServerAlias</directive> directive sets the
- alternate names for a host, for use with <a
- href="../vhosts/name-based.html">name-based virtual hosts</a>.</p>
-
- <example>
- &lt;VirtualHost *&gt;<br />
- ServerName server.domain.com<br />
- ServerAlias server server2.domain.com server2<br />
- # ...<br />
- &lt;/VirtualHost&gt;
- </example>
-</usage>
-<seealso><a href="../vhosts/">Apache Virtual Host documentation</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerName</name>
-<description>Hostname and port that the server uses to identify
-itself</description>
-<syntax>ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>In version 2.0, this
- directive supersedes the functionality of the <directive>Port</directive>
- directive from version 1.3.</compatibility>
-
-<usage>
- <p>The <directive>ServerName</directive> directive sets the hostname and
- port that the server uses to identify itself. This is used when
- creating redirection URLs. For example, if the name of the
- machine hosting the web server is <code>simple.example.com</code>,
- but the machine also has the DNS alias <code>www.example.com</code>
- and you wish the web server to be so identified, the following
- directive should be used:</p>
-
- <example>
- ServerName www.example.com:80
- </example>
-
- <p>If no <directive>ServerName</directive> is specified, then the
- server attempts to deduce the hostname by performing a reverse
- lookup on the IP address. If no port is specified in the
- <directive>ServerName</directive>, then the server will use the port
- from the incoming
- request. For optimal reliability and predictability, you should
- specify an explicit hostname and port using the
- <directive>ServerName</directive> directive.</p>
-
- <p>If you are using <a
- href="../vhosts/name-based.html">name-based virtual hosts</a>,
- the <directive>ServerName</directive> inside a
- <directive type="section" module="core">VirtualHost</directive>
- section specifies what hostname must appear in the request's
- <code>Host:</code> header to match this virtual host.</p>
-
- <p>See the description of the
- <directive module="core">UseCanonicalName</directive> directive for
- settings which determine whether self-referential URL's (e.g., by the
- <module>mod_dir</module> module) will refer to the
- specified port, or to the port number given in the client's request.
- </p>
-</usage>
-
-<seealso><a href="../dns-caveats.html">Issues Regarding DNS and
- Apache</a></seealso>
-<seealso><a href="../vhosts/">Apache virtual host
- documentation</a></seealso>
-<seealso><directive module="core">UseCanonicalName</directive></seealso>
-<seealso><directive module="core">NameVirtualHost</directive></seealso>
-<seealso><directive module="core">ServerAlias</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerPath</name>
-<description>Legacy URL pathname for a name-based virtual host that
-is accessed by an incompatible browser</description>
-<syntax>ServerPath <var>URL-path</var></syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p>The <directive>ServerPath</directive> directive sets the legacy
- URL pathname for a host, for use with <a
- href="../vhosts/">name-based virtual hosts</a>.</p>
-</usage>
-<seealso><a href="../vhosts/">Apache Virtual Host documentation</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerRoot</name>
-<description>Base directory for the server installation</description>
-<syntax>ServerRoot <var>directory-path</var></syntax>
-<default>ServerRoot /usr/local/apache</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>ServerRoot</directive> directive sets the
- directory in which the server lives. Typically it will contain the
- subdirectories <code>conf/</code> and <code>logs/</code>. Relative
- paths for other configuration files are taken as relative to this
- directory.</p>
-
- <example><title>Example</title>
- ServerRoot /home/httpd
- </example>
-
-</usage>
-<seealso><a href="../invoking.html">the <code>-d</code>
- option to <code>httpd</code></a></seealso>
-<seealso><a href="../misc/security_tips.html#serverroot">the
- security tips</a> for information on how to properly set
- permissions on the <directive>ServerRoot</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerSignature</name>
-<description>Configures the footer on server-generated documents</description>
-<syntax>ServerSignature On|Off|EMail</syntax>
-<default>ServerSignature Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>The <directive>ServerSignature</directive> directive allows the
- configuration of a trailing footer line under server-generated
- documents (error messages, <module>mod_proxy</module> ftp directory
- listings, <module>mod_info</module> output, ...). The reason why you
- would want to enable such a footer line is that in a chain of proxies,
- the user often has no possibility to tell which of the chained servers
- actually produced a returned error message.</p>
-
- <p>The <code>Off</code>
- setting, which is the default, suppresses the footer line (and is
- therefore compatible with the behavior of Apache-1.2 and
- below). The <code>On</code> setting simply adds a line with the
- server version number and <directive
- module="core">ServerName</directive> of the serving virtual host,
- and the <code>EMail</code> setting additionally creates a
- "mailto:" reference to the <directive
- module="core">ServerAdmin</directive> of the referenced
- document.</p>
-
- <p>After version 2.0.44, the details of the server version number
- presented are controlled by the <directive
- module="core">ServerTokens</directive> directive.</p>
-</usage>
-<seealso><directive module="core">ServerTokens</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerTokens</name>
-<description>Configures the <code>Server</code> HTTP response
-header</description>
-<syntax>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</syntax>
-<default>ServerTokens Full</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>This directive controls whether <code>Server</code> response
- header field which is sent back to clients includes a
- description of the generic OS-type of the server as well as
- information about compiled-in modules.</p>
-
- <dl>
- <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache</code></dd>
-
- <dt><code>ServerTokens Major</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2</code></dd>
-
- <dt><code>ServerTokens Minor</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2.0</code></dd>
-
- <dt><code>ServerTokens Min[imal]</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2.0.41</code></dd>
-
- <dt><code>ServerTokens OS</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.0.41
- (Unix)</code></dd>
-
- <dt><code>ServerTokens Full</code> (or not specified)</dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.0.41
- (Unix) PHP/4.2.2 MyMod/1.2</code></dd>
- </dl>
-
- <p>This setting applies to the entire server, and cannot be
- enabled or disabled on a virtualhost-by-virtualhost basis.</p>
-
- <p>After version 2.0.44, this directive also controls the
- information presented by the <directive
- module="core">ServerSignature</directive> directive.</p>
-</usage>
-<seealso><directive module="core">ServerSignature</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetHandler</name>
-<description>Forces all matching files to be processed by a
-handler</description>
-<syntax>SetHandler <var>handler-name</var>|None</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Moved into the core in Apache 2.0</compatibility>
-
-<usage>
- <p>When placed into an <code>.htaccess</code> file or a
- <directive type="section" module="core">Directory</directive> or
- <directive type="section" module="core">Location</directive>
- section, this directive forces all matching files to be parsed
- through the <a href="../handler.html">handler</a> given by
- <var>handler-name</var>. For example, if you had a directory you
- wanted to be parsed entirely as imagemap rule files, regardless
- of extension, you might put the following into an
- <code>.htaccess</code> file in that directory:</p>
-
- <example>
- SetHandler imap-file
- </example>
-
- <p>Another example: if you wanted to have the server display a
- status report whenever a URL of
- <code>http://servername/status</code> was called, you might put
- the following into <code>httpd.conf</code>:</p>
-
- <example>
- &lt;Location /status&gt;<br />
- <indent>
- SetHandler server-status<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>You can override an earlier defined <directive>SetHandler</directive>
- directive by using the value <code>None</code>.</p>
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetInputFilter</name>
-<description>Sets the filters that will process client requests and POST
-input</description>
-<syntax>SetInputFilter <var>filter</var>[;<var>filter</var>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>SetInputFilter</directive> directive sets the
- filter or filters which will process client requests and POST
- input when they are received by the server. This is in addition to
- any filters defined elsewhere, including the
- <directive module="mod_mime">AddInputFilter</directive>
- directive.</p>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content.</p>
-</usage>
-<seealso><a href="../filter.html">Filters</a> documentation</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetOutputFilter</name>
-<description>Sets the filters that will process responses from the
-server</description>
-<syntax>SetOutputFilter <var>filter</var>[;<var>filter</var>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>SetOutputFilter</directive> directive sets the filters
- which will process responses from the server before they are
- sent to the client. This is in addition to any filters defined
- elsewhere, including the
- <directive module="mod_mime">AddOutputFilter</directive>
- directive.</p>
-
- <p>For example, the following configuration will process all files
- in the <code>/www/data/</code> directory for server-side
- includes.</p>
-
- <example>
- &lt;Directory /www/data/&gt;<br />
- <indent>
- SetOutputFilter INCLUDES<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content.</p>
-</usage>
-<seealso><a href="../filter.html">Filters</a> documentation</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TimeOut</name>
-<description>Amount of time the server will wait for
-certain events before failing a request</description>
-<syntax>TimeOut <var>seconds</var></syntax>
-<default>TimeOut 300</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>TimeOut</directive> directive currently defines
- the amount of time Apache will wait for three things:</p>
-
- <ol>
- <li>The total amount of time it takes to receive a GET
- request.</li>
-
- <li>The amount of time between receipt of TCP packets on a
- POST or PUT request.</li>
-
- <li>The amount of time between ACKs on transmissions of TCP
- packets in responses.</li>
- </ol>
-
- <p>We plan on making these separately configurable at some point
- down the road. The timer used to default to 1200 before 1.2,
- but has been lowered to 300 which is still far more than
- necessary in most situations. It is not set any lower by
- default because there may still be odd places in the code where
- the timer is not reset when a packet is sent. </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UseCanonicalName</name>
-<description>Configures how the server determines its own name and
-port</description>
-<syntax>UseCanonicalName On|Off|DNS</syntax>
-<default>UseCanonicalName On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>In many situations Apache must construct a <em>self-referential</em>
- URL -- that is, a URL that refers back to the same server. With
- <code>UseCanonicalName On</code> Apache will use the hostname and port
- specified in the <directive module="core">ServerName</directive>
- directive to construct the canonical name for the server. This name
- is used in all self-referential URLs, and for the values of
- <code>SERVER_NAME</code> and <code>SERVER_PORT</code> in CGIs.</p>
-
- <p>With <code>UseCanonicalName Off</code> Apache will form
- self-referential URLs using the hostname and port supplied by
- the client if any are supplied (otherwise it will use the
- canonical name, as defined above). These values are the same
- that are used to implement <a
- href="../vhosts/name-based.html">name based virtual hosts</a>,
- and are available with the same clients. The CGI variables
- <code>SERVER_NAME</code> and <code>SERVER_PORT</code> will be
- constructed from the client supplied values as well.</p>
-
- <p>An example where this may be useful is on an intranet server
- where you have users connecting to the machine using short
- names such as <code>www</code>. You'll notice that if the users
- type a shortname, and a URL which is a directory, such as
- <code>http://www/splat</code>, <em>without the trailing
- slash</em> then Apache will redirect them to
- <code>http://www.domain.com/splat/</code>. If you have
- authentication enabled, this will cause the user to have to
- authenticate twice (once for <code>www</code> and once again
- for <code>www.domain.com</code> -- see <a
- href="http://httpd.apache.org/docs/misc/FAQ.html#prompted-twice">the
- FAQ on this subject for more information</a>). But if
- <directive>UseCanonicalName</directive> is set <code>Off</code>, then
- Apache will redirect to <code>http://www/splat/</code>.</p>
-
- <p>There is a third option, <code>UseCanonicalName DNS</code>,
- which is intended for use with mass IP-based virtual hosting to
- support ancient clients that do not provide a
- <code>Host:</code> header. With this option Apache does a
- reverse DNS lookup on the server IP address that the client
- connected to in order to work out self-referential URLs.</p>
-
- <note type="warning"><title>Warning</title>
- <p>If CGIs make assumptions about the values of <code>SERVER_NAME</code>
- they may be broken by this option. The client is essentially free
- to give whatever value they want as a hostname. But if the CGI is
- only using <code>SERVER_NAME</code> to construct self-referential URLs
- then it should be just fine.</p>
- </note>
-</usage>
-<seealso><directive module="core">ServerName</directive></seealso>
-<seealso><directive module="mpm_common">Listen</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>VirtualHost</name>
-<description>Contains directives that apply only to a specific
-hostname or IP address</description>
-<syntax>&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive type="section">VirtualHost</directive> and
- <code>&lt;/VirtualHost&gt;</code> are used to enclose a group of
- directives that will apply only to a particular virtual host. Any
- directive that is allowed in a virtual host context may be
- used. When the server receives a request for a document on a
- particular virtual host, it uses the configuration directives
- enclosed in the <directive type="section">VirtualHost</directive>
- section. <var>Addr</var> can be:</p>
-
- <ul>
- <li>The IP address of the virtual host;</li>
-
- <li>A fully qualified domain name for the IP address of the
- virtual host;</li>
-
- <li>The character <code>*</code>, which is used only in combination with
- <code>NameVirtualHost *</code> to match all IP addresses; or</li>
-
- <li>The string <code>_default_</code>, which is used only
- with IP virtual hosting to catch unmatched IP addresses.</li>
- </ul>
-
- <example><title>Example</title>
- &lt;VirtualHost 10.1.2.3&gt;<br />
- <indent>
- ServerAdmin webmaster@host.foo.com<br />
- DocumentRoot /www/docs/host.foo.com<br />
- ServerName host.foo.com<br />
- ErrorLog logs/host.foo.com-error_log<br />
- TransferLog logs/host.foo.com-access_log<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
-
- <p>IPv6 addresses must be specified in square brackets because
- the optional port number could not be determined otherwise. An
- IPv6 example is shown below:</p>
-
- <example>
- &lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
- <indent>
- ServerAdmin webmaster@host.example.com<br />
- DocumentRoot /www/docs/host.example.com<br />
- ServerName host.example.com<br />
- ErrorLog logs/host.example.com-error_log<br />
- TransferLog logs/host.example.com-access_log<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Each Virtual Host must correspond to a different IP address,
- different port number or a different host name for the server,
- in the former case the server machine must be configured to
- accept IP packets for multiple addresses. (If the machine does
- not have multiple network interfaces, then this can be
- accomplished with the <code>ifconfig alias</code> command -- if
- your OS supports it).</p>
-
- <note><title>Note</title>
- <p>The use of <directive type="section">VirtualHost</directive> does
- <strong>not</strong> affect what addresses Apache listens on. You
- may need to ensure that Apache is listening on the correct addresses
- using <directive module="mpm_common">Listen</directive>.</p>
- </note>
-
- <p>When using IP-based virtual hosting, the special name
- <code>_default_</code> can be specified in
- which case this virtual host will match any IP address that is
- not explicitly listed in another virtual host. In the absence
- of any <code>_default_</code> virtual host the "main" server config,
- consisting of all those definitions outside any VirtualHost
- section, is used when no IP-match occurs. (But note that any IP
- address that matches a <directive
- module="core">NameVirtualHost</directive> directive will use neither
- the "main" server config nor the <code>_default_</code> virtual host.
- See the <a href="../vhosts/name-based.html">name-based virtual hosting</a>
- documentation for further details.)</p>
-
- <p>You can specify a <code>:port</code> to change the port that is
- matched. If unspecified then it defaults to the same port as the
- most recent <directive module="mpm_common">Listen</directive>
- statement of the main server. You may also specify <code>:*</code>
- to match all ports on that address. (This is recommended when used
- with <code>_default_</code>.)</p>
-
- <note type="warning"><title>Security</title>
- <p>See the <a href="../misc/security_tips.html">security tips</a>
- document for details on why your security could be compromised if the
- directory where log files are stored is writable by anyone other
- than the user that starts the server.</p>
- </note>
-</usage>
-<seealso><a href="../vhosts/">Apache Virtual Host documentation</a></seealso>
-<seealso><a href="../dns-caveats.html">Issues Regarding DNS and
- Apache</a></seealso>
-<seealso><a href="../bind.html">Setting
- which addresses and ports Apache uses</a></seealso>
-<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
- and &lt;Files&gt; sections work</a> for an explanation of how these
- different sections are combined when a request is received</seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/core.xml.de b/docs/manual/mod/core.xml.de
deleted file mode 100644
index 12417b1fdc..0000000000
--- a/docs/manual/mod/core.xml.de
+++ /dev/null
@@ -1,3261 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.88 (outdated: 1.89) -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="core.xml.meta">
-
-<name>core</name>
-<description>St&auml;ndig verf&uuml;gbare Kernfunktionen des Apache HTTP
-Servers</description>
-<status>Core</status>
-
-<directivesynopsis>
-<name>AcceptPathInfo</name>
-<description>Ressourcen lassen angeh&auml;ngte Pfadangaben zu</description>
-<syntax>AcceptPathInfo On|Off|Default</syntax>
-<default>AcceptPathInfo Default</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Verf&uuml;gbar ab Apache 2.0.30</compatibility>
-
-<usage>
- <p>Die Direktive steuert, ob Anfragen akzeptiert oder
- abgewiesen werden, bei denen nach der tats&auml;chlichen
- Datei (oder einer nicht existierenden Datei in einem existierenden
- Verzeichnis) zus&auml;tzliche Pfadangaben folgen. Die angeh&auml;ngte
- Pfadangabe kann Skripten in der Umgebungsvariable <code>PATH_INFO</code>
- verf&uuml;gbar gemacht werden.</p>
-
- <p>Nehmen wir beispielsweise an, dass <code>/test/</code> auf ein
- Verzeichnis zeigt, welches lediglich eine Datei <code>here.html</code>
- enth&auml;lt. Dann wird bei Anfragen nach
- <code>/test/here.html/more</code> und
- <code>/test/nothere.html/more</code> beides Mal <code>/more</code>
- als <code>PATH_INFO</code> ermittelt.</p>
-
- <p>Die drei m&ouml;glichen Argumente f&uuml;r die Direktive
- <directive>AcceptPathInfo</directive> sind:</p>
-
- <dl>
- <dt><code>Off</code></dt><dd>Eine Anfrage wird nur dann akzeptiert,
- wenn sie exakt auf ein existierendes Verzeichnis (oder eine Datei)
- abgebildet werden kann. Daher w&uuml;rde eine Anfrage mit einer nach dem
- tats&auml;chlichen Dateinamen angeh&auml;ngten Pfadangabe, wie
- <code>/test/here.html/more</code> im obigen Beispiel, den Fehler
- 404 NOT FOUND <transnote>nicht gefunden</transnote>
- zur&uuml;ckgeben.</dd>
-
- <dt><code>On</code></dt>
- <dd>Eine Anfrage wird akzeptiert, wenn eine vorangestellte Pfadangabe
- auf ein existierendes Verzeichnis abgebildet werden kann. Das
- obige Beispiel <code>/test/here.html/more</code> wird akzeptiert,
- wenn <code>/test/here.html</code> auf eine g&uuml;ltige Datei
- zeigt.</dd>
-
- <dt><code>Default</code></dt>
- <dd>Die Behandlung von Anfragen mit angeh&auml;ngten Pfadangaben
- wird von dem f&uuml;r die Anfrage verantwortlichen <a
- href="../handler.html">Handler</a> bestimmt. Der Core-Handler
- f&uuml;r gew&ouml;hnliche Dateien weist <code>PATH_INFO</code>-Zugriffe
- standardm&auml;&szlig;ig zur&uuml;ck. Handler, die Skripte bedienen,
- wie z.B. <a href="mod_cgi.html">cgi-script</a> und
- <a href="mod_isapi.html">isapi-isa</a>, sind im Allgemeinen darauf
- voreingestellt, <code>PATH_INFO</code> zu akzeptieren.</dd>
- </dl>
-
- <p>Das eigentliche Ziel von <code>AcceptPathInfo</code> ist es, Ihnen
- das &Uuml;berschreiben der Voreinstellung der Handler bez&uuml;glich
- der Akzeptanz oder Ablehnung von <code>PATH_INFO</code> zu erlauben.
- Eine solche &Auml;nderung ist zum Beispiel notwendig, wenn Sie einen
- <a href="../filter.html">Filter</a> wie <a
- href="mod_include.html">INCLUDES</a> verwenden, um Inhalte
- abh&auml;ngig von <code>PATH_INFO</code> zu generieren. Der
- Core-Handler w&uuml;rde die Anfrage normalerweise abweisen. Verwenden
- Sie die folgende Konfiguration, um dennoch solch ein Skript zu
- erm&ouml;glichen.</p>
-
- <example>
- &lt;Files "mypaths.shtml"&gt;<br />
- <indent>
- Options +Includes<br />
- SetOutputFilter INCLUDES<br />
- AcceptPathInfo On<br />
- </indent>
- &lt;/Files&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AccessFileName</name>
-<description>Name der dezentralen Konfigurationsdateien</description>
-<syntax>AccessFileName <var>Dateiname</var> [<var>Dateiname</var>] ...</syntax>
-<default>AccessFileName .htaccess</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Aus dieser Namensliste sucht der Server w&auml;hrend der
- Bearbeitung einer Anfrage in jedem Verzeichnis nach der ersten
- existierenden Datei, sofern im betreffenden Verzeichnis dezentrale
- Konfigurationsdateien <a href="#allowoverride">erlaubt sind</a>.
- Beispiel:</p>
-
- <example>
- AccessFileName .acl
- </example>
-
- <p>Vor der R&uuml;cksendung des Dokuments
- <code>/usr/local/web/index.html</code> wird der Server
- <code>/.acl</code>, <code>/usr/.acl</code>,
- <code>/usr/local/.acl</code> und <code>/usr/local/web/.acl</code>
- einlesen, solange diese nicht mit</p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride None<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>deaktiviert wurden.</p>
-</usage>
-<seealso><directive module="core">AllowOverride</directive></seealso>
-<seealso><a href="../configuring.html">Konfigurationsdateien</a></seealso>
-<seealso><a href="../howto/htaccess.html">.htaccess-Dateien</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDefaultCharset</name>
-<description>Standard-Zeichenkodierung f&uuml;r Antworten ohne
-explizit angegebene Zeichenkodierung
-</description>
-<syntax>AddDefaultCharset On|Off|<var>Zeichenkodierung</var></syntax>
-<default>AddDefaultCharset Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Die Direktive gibt den Namen der Zeichenkodierung an, die
- jeder Antwort hinzugef&uuml;gt wird, welche in den HTTP-Headern
- keinen Parameter zum Content-Type enth&auml;lt. Dies &uuml;berschreibt
- jede Zeichenkodierung, die mittels <code>META</code>-Tag im Dokument
- angegeben ist. Die Angabe von <code>AddDefaultCharset Off</code>
- deaktiviert die Funktion. <code>AddDefaultCharset On</code>
- erm&ouml;glicht es, mit der Direktive die Apache-interne
- Standard-Zeichenkodierung <code>iso-8859-1</code> vorzuschreiben.
- Sie k&ouml;nnen auch angeben, dass eine andere
- <var>Zeichenkodierung</var> verwendet werden soll. Zum Beispiel:</p>
-
- <example>
- AddDefaultCharset utf-8
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddOutputFilterByType</name>
-<description>einen Ausgabefilter einem bestimmten MIME-Type
-zuordnen</description>
-<syntax>AddOutputFilterByType <var>Filter</var>[;<var>Filter</var>...]
-<var>MIME-Type</var> [<var>MIME-Type</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Verf&uuml;gbar ab Apache 2.0.33</compatibility>
-
-<usage>
- <p>Die Direktive aktiviert f&uuml;r eine Anfrage abh&auml;ngig vom
- MIME-Type der Antwort einen bestimmten Ausgabe-<a href="../filter.html"
- >Filter</a>.</p>
-
- <p>Das folgende Beispiel verwendet den Filter <code>DEFLATE</code>,
- der von <module>mod_deflate</module> angeboten wird. Er komprimiert
- jede Ausgabe, die als <code>text/html</code> oder <code>text/plain</code>
- gekennzeichnet ist, (gleichg&uuml;ltig, ob statisch oder dynamisch)
- bevor sie an den Client gesendet wird.</p>
-
- <example>
- AddOutputFilterByType DEFLATE text/html text/plain
- </example>
-
- <p>Wenn Sie den Inhalt von mehr als einem Filter verarbeiten lassen
- wollen, dann m&uuml;ssen deren Namen durch Semikolons voneinander
- getrennt werden. Es ist ebenfalls m&ouml;glich, eine
- <directive>AddOutputFilterByType</directive>-Direktive f&uuml;r
- jeden von diesen Filtern zu verwenden.</p>
-
- <p>Die folgende Konfiguration sorgt daf&uuml;r, dass alle
- Skriptausgaben, die als <code>text/html</code> gekennzeichnet
- sind, zuerst vom <code>INCLUDES</code>-Filter und dann vom
- <code>DEFLATE</code>-Filter verarbeitet werden.</p>
-
- <example>
- &lt;Location /cgi-bin/&gt;<br />
- <indent>
- Options Includes<br />
- AddOutputFilterByType INCLUDES;DEFLATE text/html<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note type="warning"><title>Hinweis:</title>
- <p>Die Aktivierung von Filtern mittels
- <directive>AddOutputFilterByType</directive> kann in einigen
- F&auml;llen ganz oder teilweise fehlschlagen. Beispielsweise
- werden keine Filter angewendet, wenn der MIME-Type nicht bestimmt
- werden kann und auf die Einstellung der <directive
- module="core">DefaultType</directive>-Anweisung zur&uuml;ckf&auml;llt,
- selbst wenn die <directive
- module="core">DefaultType</directive>-Einstellung die gleiche ist.</p>
-
- <p>Wenn Sie jedoch sicherstellen wollen, dass der Filter
- angewendet wird, sollten Sie den Content-Type z.B. mit
- <directive module="mod_mime">AddType</directive> oder
- <directive module="core">ForceType</directive> der Ressource
- explizit zuordnen. Das Setzen des Content-Types innerhalb
- eines (nicht-nph) CGI-Skriptes funktioniert ebenfalls
- zuverl&auml;ssig.</p>
-
- <p>Die Typ-gebundenen Ausgabefilter werden niemals auf
- Proxy-Anfragen angewendet.</p>
- </note>
-</usage>
-
-<seealso><directive module="mod_mime">AddOutputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-<seealso><a href="../filter.html">Filter</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AllowEncodedSlashes</name>
-<description>Legt fest, ob kodierte Pfadtrennzeichen in URLs durchgereicht
-werden d&uuml;rfen</description>
-<syntax>AllowEncodedSlashes On|Off</syntax>
-<default>AllowEncodedSlashes Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Verf&uuml;gbar ab Apache 2.0.46</compatibility>
-
-<usage>
- <p>Die <directive>AllowEncodedSlashes</directive>-Direktive erlaubt die
- Verwendung von URLs, welche kodierte Pfadtrennzeichen (<code>%2F</code>
- f&uuml;r <code>/</code> und auf entsprechenden Systemen zus&auml;tzlich
- <code>%5C</code> f&uuml;r <code>\</code>) enthalten. Normalerweise werden
- derartige URLs mit einem 404-Fehler (Nicht gefunden) abgewiesen.</p>
-
- <p><directive>AllowEncodedSlashes</directive> <code>On</code> ist
- vor allem in Verbindung mit <code>PATH_INFO</code> hilfreich.</p>
-
- <note><title>Anmerkung</title>
- <p>Das Erlauben von Schr&auml;gstrichen impliziert <em>nicht</em> deren
- <em>Dekodierung</em>. Vorkommen von <code>%2F</code> oder <code>%5C</code>
- (<em>nur</em> auf entsprechenden Systemen) werden unver&auml;ndert in der
- ansonsten dekodierten URL belassen.</p>
- </note>
-</usage>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AllowOverride</name>
-<description>Direktiven-Typen, die in <code>.htaccess</code>-Dateien
-erlaubt sind.</description>
-<syntax>AllowOverride All|None|<var>Direktiven-Typ</var>
-[<var>Direktiven-Typ</var>] ...</syntax>
-<default>AllowOverride All</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>Wenn der Server eine <code>.htaccess</code>-Datei (wie durch
- <directive module="core">AccessFileName</directive> definiert)
- findet, muss er wissen, welche in der Datei angegebenen Direktiven
- fr&uuml;here Konfigurationsanweisungen &uuml;berschreiben
- d&uuml;rfen.</p>
-
- <note><title>Nur in &lt;Directory&gt;-Abschnitten verf&uuml;gbar</title>
- <directive>AllowOverride</directive> ist nur in <directive
- type="section" module="core">Directory</directive>-Abschnitten
- g&uuml;ltig, die ohne regul&auml;re Ausdr&uuml;ke definiert wurden, nicht
- in <directive type="section" module="core">Location</directive>-,
- <directive module="core" type="section">DirectoryMatch</directive>- oder
- <directive type="section" module="core">Files</directive>-Abschnitten.
- </note>
-
- <p>Wenn diese Anweisung auf <code>None</code> gesetzt wird, dann
- werden <a href="#accessfilename">.htaccess</a>-Dateien komplett
- ignoriert. In diesem Fall wird der Server nicht einmal versuchen,
- die <code>.htaccess</code>-Dateien im Dateisystem zu lesen.</p>
-
- <p>Wenn diese Anweisung auf <code>All</code> gesetzt wird, dann
- ist jede Direktive in den <code>.htaccess</code>-Dateien erlaubt,
- die den <a href="directive-dict.html#Context">Kontext</a>
- .htaccess besitzt.</p>
-
- <p>Der <var>Direktiven-Typ</var> kann eine der folgenden
- Anweisungsgruppen sein.</p>
-
- <dl>
- <dt>AuthConfig</dt>
-
- <dd>
- Erlaubt die Verwendung von Autorisierungs-Anweisungen (<directive
- module="mod_authn_dbm">AuthDBMGroupFile</directive>,
- <directive module="mod_authn_dbm">AuthDBMUserFile</directive>,
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>,
- <directive module="core">AuthName</directive>,
- <directive module="core">AuthType</directive>, <directive
- module="mod_authn_file">AuthUserFile</directive>, <directive
- module="core">Require</directive> <em>usw.</em>).</dd>
-
- <dt>FileInfo</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung der
- Dokumenttypen (<directive
- module="core">DefaultType</directive>, <directive
- module="core">ErrorDocument</directive>, <directive
- module="core">ForceType</directive>, <directive
- module="mod_negotiation">LanguagePriority</directive>,
- <directive module="core">SetHandler</directive>, <directive
- module="core">SetInputFilter</directive>, <directive
- module="core">SetOutputFilter</directive>, und
- <module>mod_mime</module>-Direktiven Add* und Remove*
- <em>usw.</em>).</dd>
-
- <dt>Indexes</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung von
- Verzeichnisindizes (<directive
- module="mod_autoindex">AddDescription</directive>,
- <directive module="mod_autoindex">AddIcon</directive>, <directive
- module="mod_autoindex">AddIconByEncoding</directive>,
- <directive module="mod_autoindex">AddIconByType</directive>,
- <directive module="mod_autoindex">DefaultIcon</directive>, <directive
- module="mod_dir">DirectoryIndex</directive>, <directive
- module="mod_autoindex">FancyIndexing</directive>, <directive
- module="mod_autoindex">HeaderName</directive>, <directive
- module="mod_autoindex">IndexIgnore</directive>, <directive
- module="mod_autoindex">IndexOptions</directive>, <directive
- module="mod_autoindex">ReadmeName</directive>
- <em>usw.</em>).</dd>
-
- <dt>Limit</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung des
- Zugriffs von Hosts (<directive
- module="mod_authz_host">Allow</directive>, <directive
- module="mod_authz_host">Deny</directive> und <directive
- module="mod_authz_host">Order</directive>).</dd>
-
- <dt>Options</dt>
-
- <dd>
- Erlaubt die Verwendung von Direktiven zur Steuerung spezieller
- Verzeichniseigenschaften (<directive module="core">Options</directive>
- und <directive module="mod_include">XBitHack</directive>).</dd>
- </dl>
-
- <p>Beispiel:</p>
-
- <example>
- AllowOverride AuthConfig Indexes
- </example>
-
- <p>Im obigen Beispiel erzeugen alle Direktiven einen internal server
- error <transnote>Server-interner Fehler</transnote>, die weder der
- Gruppe <code>AuthConfig</code> noch der Gruppe <code>Indexes</code>
- angeh&ouml;ren.</p>
-</usage>
-
-<seealso><directive module="core">AccessFileName</directive></seealso>
-<seealso><a href="../configuring.html">Konfigurationsdateien</a></seealso>
-<seealso><a href="../howto/htaccess.html">.htaccess-Dateien</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthName</name>
-<description>Autorisierungsbereich zur Verwendung in der
-HTTP-Authentisierung</description>
-<syntax>AuthName <var>auth-Bereich</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Die Direktive legt den Namen des Autorisierungsbereiches
- <transnote>Der Autorisierungsbereich wird auch Realm genannt.</transnote>
- f&uuml;r ein Verzeichnis fest. Dieser Realm wird dem Client mitgeteilt,
- damit der Anwender wei&szlig;, welchen Benutzernamen und welches Passwort
- er zu &uuml;bermitteln hat. <directive>AuthName</directive> akzeptiert ein
- Argument. Falls der Name des Realm Leerzeichen enth&auml;lt, muss er in
- Anf&uuml;hrungszeichen eingeschlossen werden. Um zu funktionieren, muss
- die Anweisung von den Direktiven <directive
- module="core">AuthType</directive> und <directive
- module="core">Require</directive> sowie von
- Direktiven wie <directive module="mod_authn_file">AuthUserFile</directive>
- und <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- begleitet werden.</p>
-
- <p>Beispiel:</p>
-
- <example>
- AuthName "Top Secret"
- </example>
-
- <p>Die <code>AuthName</code> &uuml;bergebene Zeichenkette ist das,
- was in dem von den meisten Browsern angebotenen Passwort-Dialog
- angezeigt wird.</p>
-</usage>
-<seealso><a
- href="../howto/auth.html">Authentisierung, Autorisierung und
- Zugriffskontrolle</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthType</name>
-<description>Art der Authentisierung</description>
-<syntax>AuthType Basic|Digest</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Die Direktive w&auml;hlt die Art der Benutzer-Authentisierung
- f&uuml;r ein Verzeichnis aus. Derzeit sind lediglich <code>Basic</code>
- und <code>Digest</code> implementiert.
- Um zu funktionieren, muss die Anweisung von den Direktiven <directive
- module="core">AuthName</directive> und <directive
- module="core">Require</directive> sowie von
- Direktiven wie <directive module="mod_authn_file">AuthUserFile</directive>
- und <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- begleitet werden.</p>
-</usage>
-<seealso><a href="../howto/auth.html">Authentisierung, Autorisierung und
- Zugriffskontrolle</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CGIMapExtension</name>
-<description>Technik zur Bestimmung des Interpreters f&uuml;r
-CGI-Skripte</description>
-<syntax>CGIMapExtension <var>CGI-Pfad</var> <var>.Endung</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>ausschlie&szlig;lich NetWare</compatibility>
-
-<usage>
- <p>Die Direktive wird zur Steuerung verwendet, wie Apache
- den Interpreter ermittelt, der zur Ausf&uuml;hrung von
- CGI-Skripten verwendet wird. Beispielsweise bestimmt die Angabe
- von <code>CGIMapExtension sys:\foo.nlm .foo</code>, dass
- alle CGI-Scripte mit der Endung <code>.foo</code> an den
- FOO-Interpreter &uuml;bergeben werden.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ContentDigest</name>
-<description>Aktiviert die Generierung von <code>Content-MD5</code>
-HTTP-Response-Headern</description>
-<syntax>ContentDigest On|Off</syntax>
-<default>ContentDigest Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<status>Experimental</status>
-
-<usage>
- <p>Die Direktive aktiviert die Generierung von
- <code>Content-MD5</code>-Headern, wie sie in RFC1864 bzw. RFC2068
- definiert sind.</p>
-
- <p>MD5 ist ein Algorithmus zur Berechnung eines "Datenextrakts"
- (zuweilen "Fingerabdruck" genannt) <transnote>Der "Datenextrakt" wird im
- Englischen als "message digest" oder "fingerprint" bezeichnet.</transnote>
- aus beliebig langen Daten. Es gilt als zuverl&auml;ssig, dass
- Ver&auml;nderungen an den Daten sich in Ver&auml;nderungen des
- Extrakts wiederspiegeln.</p>
-
- <p>Der <code>Content-MD5</code>-Header bietet eine
- End-to-End-Integrit&auml;tspr&uuml;fung (MIC) <transnote>MIC steht f&uuml;r
- "message integrity check".</transnote> des Daten-Inhalts. Ein Proxy oder
- Client kann diesen Header pr&uuml;fen, um zuf&auml;llige Ver&auml;nderungen
- des Entity-Inhalts bei der &Uuml;bertragung festzustellen.
- Beispielheader:</p>
-
- <example>
- Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
- </example>
-
- <p>Beachten Sie bitte, dass dies Performanceprobleme auf Ihrem
- System verursachen kann, da der Extrakt bei jeder Anfrage
- berechnet wird (der Wert wird nicht zwischengespeichert).</p>
-
- <p><code>Content-MD5</code> wird nur f&uuml;r Dokumente gesendet,
- die von <module>core</module> bedient werden, nicht jedoch bei
- Modulen. SSI-Dokumente, CGI-Skript-Ausgaben und Byte-Range-Antworten
- besitzen diesen Header beispielsweise nicht.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultType</name>
-<description>MIME-Content-Type, der gesendet wird, wenn der Server den Typ
-nicht auf andere Weise ermitteln kann.</description>
-<syntax>DefaultType <var>MIME-Type</var></syntax>
-<default>DefaultType text/plain</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Es kann vorkommen, dass der Server ein Dokument ausliefern muss,
- dessen Typ er nicht mit Hilfe seiner MIME-Type-Zuordnungen bestimmen
- kann.</p>
-
- <p>Der Server muss den Client &uuml;ber den Content-Type des
- Dokumentes informieren. Daher verwendet er im Falle eines
- unbekannten Typs die <code>DefaultType</code>-Einstellung.
- Zum Beispiel:</p>
-
- <example>
- DefaultType image/gif
- </example>
-
- <p>w&auml;re angemessen f&uuml;r ein Verzeichnis, das viele GIF-Bilder
- enth&auml;lt, deren Dateinamen nicht Endung <code>.gif</code>
- besitzen.</p>
-
- <p>Beachten Sie bitte, dass die Direktive anders als <directive
- module="core">ForceType</directive> lediglich den Standard-MIME-Type
- bestimmt. Alle anderen MIME-Type-Definitionen, einschlie&szlig;lich
- Dateierweiterungen, die den Medien-Typ anzeigen k&ouml;nnen,
- &uuml;berschreiben diese Voreinstellung.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Directory</name>
-<description>Umschlie&szlig;t eine Gruppe von Direktiven, die nur auf
-das genannte Verzeichnis des Dateisystems und Unterverzeichnisse angewendet
-werden</description>
-<syntax>&lt;Directory <var>Verzeichnispfad</var>&gt;
-... &lt;/Directory&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive type="section">Directory</directive> und
- <code>&lt;/Directory&gt;</code> werden dazu verwendet, eine Gruppe
- von Direktiven zusammenzufassen, die nur f&uuml;r das genannte
- Verzeichnis und dessen Unterverzeichnisse gelten. Jede Direktive,
- die im Verzeichnis-Kontext erlaubt ist, kann verwendet werden.
- <var>Verzeichnispfad</var> ist entweder der vollst&auml;ndige Pfad zu
- einem Verzeichnis oder eine Zeichenkette mit Platzhaltern wie sie von der
- Unix-Shell zum Abgleich verwendet werden. In einer Zeichenkette
- mit Platzhaltern <transnote>sogenannte wild-cards</transnote> entspricht
- <code>?</code> einem einzelnen Zeichen und <code>*</code> einer
- Zeichenkette beliebiger L&auml;nge. Sie k&ouml;nnen auch auch
- <code>[]</code>-Zeichenbereiche verwenden. Keiner der Platzhalter
- entspricht dem Zeichen "/". Daher passt <code>&lt;Directory
- /*/public_html&gt;</code> nicht auf <code>/home/user/public_html</code>,
- <code>&lt;Directory /home/*/public_html&gt;</code> jedoch tut es.
- Beispiel:</p>
-
- <example>
- &lt;Directory /usr/local/httpd/htdocs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <note>
- <p>Seien Sie vorsichtig mit den <var>Verzeichnispfad</var>-Argumenten.
- Sie m&uuml;ssen buchst&auml;blich mit dem Dateisystempfad
- &uuml;bereinstimmen, den der Apache f&uuml;r den Zugriff auf die
- Dateien verwendet. Direktiven, die f&uuml;r ein bestimmtes
- Verzeichnis gelten, gelten nicht f&uuml;r Dateien in dem Verzeichnis,
- auf die &uuml;ber einen anderen Pfad zugegriffen wird, wie z.B.
- &uuml;ber verschiedene symbolische Links.</p>
- </note>
-
- <p>Erweiterte regul&auml;re Ausdr&uuml;cke k&ouml;nnen ebenfalls
- verwendet werden, indem das Zeichen <code>~</code> hinzugef&uuml;gt
- wird. Beispielsweise w&uuml;rde</p>
-
- <example>
- &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
- </example>
-
- <p>auf Verzeichnisse in <code>/www/</code> passen, die aus drei
- Zahlen bestehen.</p>
-
- <p>Wenn mehrere <directive type="section">Directory</directive>-Abschnitte
- (ohne regul&auml;re Ausdr&uuml;cke) auf ein Verzeichnis (oder
- ein ihm &uuml;bergeordnetes Verzeichnis) passen, welches ein Dokument
- enth&auml;lt, dann werden die Direktiven der Reihe nach, angefangen
- beim k&uuml;rzesten passenden Muster, vermischt mit den Direktiven
- aus den <a href="#accessfilename">.htaccess</a>-Dateien, angewendet.
- Beispiel:</p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride None<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /home/&gt;<br />
- <indent>
- AllowOverride FileInfo<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>Beim Zugriff auf das Dokument <code>/home/web/dir/doc.html</code>
- sind die einzelnen Schritte:</p>
-
- <ul>
- <li>Wende die Direktive <code>AllowOverride None</code> an
- (deaktiviere <code>.htaccess</code>-Dateien).</li>
-
- <li>Wende die Direktive <code>AllowOverride FileInfo</code>
- (auf das Verzeichnis <code>/home</code>) an.</li>
-
- <li>Wende jede <code>FileInfo</code>-Direktive aus
- <code>/home/.htaccess</code>, <code>/home/web/.htaccess</code> und
- <code>/home/web/dir/.htaccess</code> der Reihe nach an.</li>
- </ul>
-
- <p>Regul&auml;re Ausdr&uuml;cke werden solange nicht ber&uuml;cksichtigt,
- bis alle normalen Abschnitte angewendet wurden. Anschlie&szlig;end
- werden alle regul&auml;ren Ausdr&uuml;cke in der Reihenfolge
- gepr&uuml;ft, in der sie in der Konfigurationsdatei auftauchen.
- Beispielsweise wird bei</p>
-
- <example>
- &lt;Directory ~ abc$&gt;<br />
- <indent>
- # ... hier die Direktiven ...<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>der Abschnitt mit dem regul&auml;ren Ausdruck nicht
- ber&uuml;cksichtigt, bis alle normalen
- <directive type="section">Directory</directive>-Abschnitte und
- <code>.htaccess</code>-Dateien angewendet wurden. Dann erst wird
- der regul&auml;re Ausdruck mit <code>/home/abc/public_html/abc</code>
- abgeglichen und der entsprechende <directive
- type="section">Directory</directive>-Abschnitt angewendet.</p>
-
- <p><strong>Beachten Sie bitte, dass der vom Apache voreingestellte
- Zugriff f&uuml;r <code>&lt;Directory /&gt;</code>
- <code>Allow from All</code> ist. Das bedeutet, dass der Apache
- jede Datei ausliefert, die durch eine URL abgebildet wird. Es wird
- empfohlen, dass Sie dies durch einen Block wie</strong></p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from All<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><strong>&auml;ndern und anschlie&szlig;end f&uuml;r
- Verzeichnisse &uuml;berschreiben, die Sie verf&uuml;gbar machen
- <em>wollen</em>. F&uuml;r weitere Einzelheiten lesen Sie bitte
- die Seite zu den <a
- href="../misc/security_tips.html">Sicherheitshinweisen</a>.</strong></p>
-
- <p>Die Verzeichnisabschnitte erscheinen in der Datei
- <code>httpd.conf</code>. <directive
- type="section">Directory</directive>-Direktiven d&uuml;rfen nicht
- ineinander verschachtelt werden oder innerhalb von <directive module="core"
- type="section">Limit</directive>- oder <directive module="core"
- type="section">LimitExcept</directive>-Abschnitten auftauchen.</p>
-</usage>
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>DirectoryMatch</name>
-<description>Umschlie&szlig;t eine Gruppe von Direktiven, die auf
- Verzeichnisse des Dateisystems und ihre Unterverzeichnisse abgebildet
- werden, welche auf einen regul&auml;ren Ausdruck passen</description>
-<syntax>&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive type="section">DirectoryMatch</directive> und
- <code>&lt;/DirectoryMatch&gt;</code> werden dazu verwendet, eine
- Gruppe von Direktiven zusammenzufassen, die nur f&uuml;r das
- genannte Verzeichnis und dessen Unterverzeichnisse gelten, genauso
- wie bei <directive module="core" type="section">Directory</directive>.
- Als Argument dient jedoch ein regul&auml;rer Ausdruck.
- Beispielsweise w&uuml;rde</p>
-
- <example>
- &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
- </example>
-
- <p>auf Verzeichnisse in <code>/www/</code> passen, die aus drei
- Zeichen bestehen.</p>
-</usage>
-<seealso><directive type="section" module="core">Directory</directive>
- f&uuml;r eine Beschreibung, wie regul&auml;re Ausdr&uuml;cke mit
- normalen <directive type="section">Directory</directive>-Anweisungen
- vermischt werden.</seealso>
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DocumentRoot</name>
-<description>Verzeichnis, welches den Haupt-Dokumentenbaum bildet, der im
-Web sichtbar ist.</description>
-<syntax>DocumentRoot <var>Verzeichnis</var></syntax>
-<default>DocumentRoot /usr/local/apache/htdocs</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Die Direktive setzt das Verzeichnis, von dem aus
- <code>httpd</code> Dateien ausliefert. Sofern nicht eine Direktive
- wie <directive module="mod_alias">Alias</directive> greift, h&auml;ngt
- der Server Pfade aus der angeforderten URL an das Wurzelverzeichnis
- an, um den Pfad zum Dokument zu bilden. Beispiel:</p>
-
- <example>
- DocumentRoot /usr/web
- </example>
-
- <p>Damit bezieht sich ein Zugriff auf
- <code>http://www.my.host.com/index.html</code> auf
- <code>/usr/web/index.html</code>. Wenn das <var>Verzeichnis</var> nicht
- absolut angegeben ist, wird es relativ zu <directive
- module="core">ServerRoot</directive> betrachtet.</p>
-
- <p><directive>DocumentRoot</directive> sollte ohne einen
- Schr&auml;gstrich am Ende angegeben werden.</p>
-</usage>
-<seealso><a href="../urlmapping.html">URLs auf das Dateisystem
-abbilden</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableMMAP</name>
-<description>Verwende Memory-Mapping, um Dateien w&auml;hrend der
-Auslieferung zu lesen</description>
-<syntax>EnableMMAP On|Off</syntax>
-<default>EnableMMAP On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Die Direktive steuert, ob <code>httpd</code> Memory-Mapping verwenden
- darf, wenn er w&auml;hrend der Auslieferung den Inhalt einer
- Datei lesen muss. Wenn die Bearbeitung einer Anfrage es erfordert,
- auf die Daten in einer Datei zuzugreifen -- zum Beispiel bei der
- Auslieferung einer mittels <module>mod_include</module> serverseitig
- analysierten Datei --, dann verwendet der Apache standardm&auml;&szlig;ig
- Memory-Mapping f&uuml;r diese Datei, sofern das Betriebssystem es
- unterst&uuml;tzt.</p>
-
- <p>Memory-Mapping bedeutet zuweilen eine Performanceverbesserung.
- In einigen Umgebungen ist es jedoch besser, Memory-Mapping zu
- deaktivieren, um Problemen w&auml;hrend des Betriebs vorzubeugen:</p>
-
- <ul>
- <li>Bei einigen Multiprozessorsystemen kann Memory-Mapping die
- Performance von <code>httpd</code> reduzieren.</li>
- <li>Bei einem per NFS eingebundenen <directive
- module="core">DocumentRoot</directive> kann <code>httpd</code> mit einem
- Segmentierungsfehler <transnote>ein sogenannter "segmentation
- fault"</transnote> abst&uuml;rzen, wenn eine Datei gel&ouml;scht oder
- gek&uuml;rzt wird, w&auml;hrend <code>httpd</code> sie im Speicher
- abbildet.</li>
- </ul>
-
- <p>Bei Serverkonfigurationen, die f&uuml;r dieses Problem
- anf&auml;llig sind, sollten Sie das Memory-Mapping f&uuml;r
- auszuliefernde Dateien deaktivieren, indem Sie schreiben:</p>
-
- <example>
- EnableMMAP Off
- </example>
-
- <p>Bei per NFS eingebundenen Dateien kann diese Funktion
- explizit f&uuml;r die st&ouml;renden Dateien deaktiviert werden,
- indem Sie angeben:</p>
-
- <example>
- &lt;Directory "/pfad-zu-den-nfs-dateien"&gt;
- <indent>
- EnableMMAP Off
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableSendfile</name>
-<description>Verwende die sendfile-Unterst&uuml;tzung des Kernels, um
-Dateien an den Client auszuliefern</description>
-<syntax>EnableSendfile On|Off</syntax>
-<default>EnableSendfile On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Verf&uuml;gbar ab Apache Version 2.0.44</compatibility>
-
-<usage>
- <p>Die Direktive steuert, ob <code>httpd</code> die
- sendfile-Unterst&uuml;tzung des Kernels verwenden kann, um
- Dateiinhalte an den Client zu &uuml;bermitteln. Wenn die Bearbeitung
- einer Anfrage keinen Zugriff auf die Daten in der Datei erfordert --
- zum Beispiel bei der Auslieferung einer statischen Datei -- und das
- Betriebssystem es unterst&uuml;tzt, verwendet der Apache
- standardm&auml;&szlig;ig sendfile, um den Dateiinhalt zu
- &uuml;bertragen, ohne die Datei jemals zu lesen.</p>
-
- <p>Der sendfile-Mechanismus vermeidet getrennte Lese- und
- Sendeoperationen sowie Puffer-Zuweisungen. Bei einigen Plattformen bzw.
- Dateisystemen deaktivieren Sie diese Funktion jedoch besser, um Probleme
- w&auml;hrend des Betriebs zu vermeiden:</p>
-
- <ul>
- <li>Einige Plattformen besitzen u.U. eine fehlerhafte
- sendfile-Unterst&uuml;tzung, die das Erstellungssystem nicht erkennt,
- insbesondere wenn die Bin&auml;rdateien auf einem anderen Rechner erstellt
- und auf eine solche Maschine mit fehlerhafter sendfile-Unterst&uuml;tzung
- &uuml;bertragen wurden.</li>
- <li>Bei einem &uuml;ber das Netzwerk eingebundenen <directive
- module="core">DocumentRoot</directive> (z.B. NFS oder SMB) ist der
- Kernel m&ouml;glicherweise nicht in der Lage, die Netzwerkdatei
- &uuml;ber seinen eigenen Cache zu bedienen.</li>
- <li>Unter Linux l&ouml;st die Verwendung von <code>sendfile</code>
- in Verbindung mit bestimmten Netzwerkkarten und IPv6
- TCP-Checksummenfehler aus.</li>
- </ul>
-
- <p>Bei Serverkonfigurationen, die f&uuml;r dieses Problam
- anf&auml;llig sind, sollten die diese Funktion deaktivieren, indem
- Sie schreiben:</p>
-
- <example>
- EnableSendfile Off
- </example>
-
- <p>Bei per NFS oder SMB eingebundenen Dateien kann diese Funktion
- explizit f&uuml;r die st&ouml;renden Dateien deaktiviert werden, indem
- Sie angeben:</p>
-
- <example>
- &lt;Directory "/pfad-zu-den-nfs-dateien"&gt;
- <indent>
- EnableSendfile Off
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorDocument</name>
-<description>Das, was der Server im Fehlerfall an den Client
-zur&uuml;ckgibt</description>
-<syntax>ErrorDocument <var>Fehlercode</var> <var>Dokument</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Die Syntax der Anf&uuml;hrungszeichen bei Textnachrichten hat
-sich im Apache 2.0 ge&auml;ndert</compatibility>
-
-<usage>
- <p>Im Falle eines Problems oder Fehlers kann der Apache
- konfiguriert werden, eine der vier Aktionen auszuf&uuml;hren:</p>
-
- <ol>
- <li>Ausgabe einer einfachen, hartkodierten Fehlermeldung</li>
-
- <li>Ausgabe einer angepassten Meldung</li>
-
- <li>Umleitung zu einem lokalen <var>URL-Pfad</var> der das
- Problem bzw. den Fehler behandelt</li>
-
- <li>Umleitung zu einer externen <var>URL</var>, die das Problem
- bzw. den Fehler behandelt</li>
- </ol>
-
- <p>Die erste Option ist Voreinstellung, w&auml;hrend die Optionen
- 2 bis 4 &uuml;ber die Direktive <directive>ErrorDocument</directive>
- eingestellt werden, welcher der HTTP-Statuscode und eine
- URL oder Nachricht folgen. Abh&auml;ngig vom Problem bzw. Fehler bietet
- der Apache manchmal zus&auml;tzliche Informationen an.</p>
-
- <p>URLs k&ouml;nnen bei lokalen Adressen mit einem Schr&auml;gstrich
- (/) beginnen oder eine komplette URL bilden, die der Client
- aufl&ouml;sen kann. Alternativ kann eine Nachricht f&uuml;r die
- Anzeige im Browser angeboten werden. Beispiel:</p>
-
- <example>
- ErrorDocument 500 http://foo.example.com/cgi-bin/tester<br />
- ErrorDocument 404 /cgi-bin/falsche_urls.pl<br />
- ErrorDocument 401 /info_zur_anmeldung.html<br />
- ErrorDocument 403 "Der Zugriff ist nicht erlaubt."
- </example>
-
- <p>Au&szlig;erdem kann der spezielle Wert <code>default</code> angegeben
- werden, um die schlichte, hartkodierte Nachricht des Apache zu verwenden.
- Es wird normalerweise nicht ben&ouml;tigt, doch <code>default</code>
- stellt die einfach, im Apache hartkodierte Meldung in Konfigurationen
- wieder her, die ansonsten von einem existierenden <transnote>zuvor
- konfigurierten</transnote> <directive>ErrorDocument</directive> erben
- w&uuml;rden.</p>
-
- <example>
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br /><br />
- &lt;Directory /web/docs&gt;<br />
- <indent>
- ErrorDocument 404 default<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>Wenn Sie eine <directive>ErrorDocument</directive>-Anweisung
- angeben, die auf eine entfernte URL weist (d.h. irgendetwas mit der
- Methode <code>http</code> davor), beachten Sie bitte, dass der Apache
- eine Umleitung zum Client sendet, um diesem mitzuteilen, wo das
- Dokument zu finden ist, auch wenn das Dokument letztlich wieder zum
- gleichen Server f&uuml;hrt. Das hat mehrere Auswirkungen. Die
- wichtigste ist, dass der Client nicht den Original-Statuscode
- erh&auml;lt sondern statt dessen einen Umleitungs-Statuscode. Dies
- wiederum kann Web-Robots und andere Clients verwirren, die den
- Statuscode dazu verwenden, herauszufinden ob eine URL g&uuml;ltig ist.
- Wenn Sie eine entfernte URL in einer Anweisung
- <code>ErrorDocument 401</code> verwenden, wird der Client
- dar&uuml;ber hinaus nicht wissen, dass er den Benutzer zur Eingabe
- eines Passwortes auffordern muss, da er den Statuscode 401 nicht
- erh&auml;lt. <strong>Deshalb m&uuml;ssen Sie sich auf ein lokales
- Dokument beziehen, wenn Sie eine Anweisung <code>ErrorDocument
- 401</code> verwenden.</strong></p>
-
- <p>Der Microsoft Internet Explorer (MSIE) ignoriert
- standardm&auml;&szlig;ig serverseitig generierte Fehlermeldungen, wenn
- sie "zu kurz" sind und ersetzt sie durch eigene "freundliche"
- Fehlermeldungen. Die Gr&ouml;&szlig;e variiert abh&auml;ngig von der
- Art des Fehlers, im Allgemeinen zeigt der MSIE jedoch den
- serverseitig generierten Fehler, anstatt ihn zu verstecken, wenn Ihr
- Fehlerdokument gr&ouml;&szlig;er als 512 Bytes ist. Weitere Informationen
- sind im Artikel <a
- href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807"
- >Q294807</a> in der Microsoft Knowledgebase article verf&uuml;gbar.</p>
-
- <p>In Versionen vor 2.0 wurden Meldungen durch ein einzelnes
- vorangestelltes Anf&uuml;hrungszeichen (") erkannt.</p>
-</usage>
-
-<seealso><a href="../custom-error.html">Dokumentation zu individuellen
-Fehlermeldungen</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorLog</name>
-<description>Ablageort, an dem der Server Fehler protokolliert</description>
-<syntax> ErrorLog <var>Dateiname</var>|syslog[:<var>facility</var>]</syntax>
-<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and
- OS/2)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Die Direktive <directive>ErrorLog</directive> bestimmt den Namen
- der Datei, in welcher der Server alle auftretenden Fehler protokolliert.
- Wenn <var>Dateiname</var> nicht absolut ist, wird er relativ zu <directive
- module="core">ServerRoot</directive> betrachtet.</p>
-
- <example><title>Beispiel</title>
- ErrorLog /var/log/httpd/error_log
- </example>
-
- <p>Wenn der <var>Dateiname</var> mit einem senkrechten Strich (|,
- engl.: Pipe) beginnt, wird angenommen, dass es sich um einen Befehl
- handelt, der ausgef&uuml;hrt wird, um das Fehlerprotokolls zu
- verarbeiten.</p>
-
- <example><title>Beispiel</title>
- ErrorLog "|/usr/local/bin/httpd_errors"
- </example>
-
- <p>Die Verwendung von <code>syslog</code> anstelle eines Dateinamens
- aktiviert die Protokollierung mittels syslogd(8), sofern das System
- es unterst&uuml;tzt. Als Voreinstellung wird der syslog-Typ (syslog
- facility) <code>local7</code> verwendet, Sie k&ouml;nnen dies jedoch
- auch &uuml;berschreiben, indem Sie die Syntax
- <code>syslog:<var>facility</var></code> verwenden, wobei
- <var>facility</var> einer der Namen sein kann, die &uuml;blicherweise
- in syslog(1) dokumentiert sind.</p>
-
- <example><title>Beispiel</title>
- ErrorLog syslog:user
- </example>
-
- <p>SICHERHEITSHINWEIS: Lesen Sie das Dokument <a
- href="../misc/security_tips.html#serverroot">Sicherheitshinweise</a>
- zu Einzelheiten dar&uuml;ber, warum Ihre Sicherheit gef&auml;hrdet
- sein kann, wenn das Verzeichnis, in dem die Log-Dateien gespeichert
- werden, f&uuml;r jemand anderen, als den Benutzer, der den Server
- gestartet hat, beschreibbar ist.</p>
-
- <note type="warning"><title>Anmerkung</title>
- <p>Bei der Eingabe eines Dateipfads auf nicht-Unix-Plattformen sollte
- darauf geachtet werden, nur (Vorw&auml;rts-)Schr&auml;gstriche zu
- verwenden, auch wenn die Plattform r&uuml;ckw&auml;rts gerichtete
- Schr&auml;gstriche (Backslashes) erlaubt. Im Allgemeinen ist es eine gute
- Idee, innerhalb der Konfigurationsdateien immer
- Vorw&auml;rts-Schr&auml;gstriche zu verwenden.</p>
- </note>
-</usage>
-<seealso><directive module="core">LogLevel</directive></seealso>
-<seealso><a href="../logs.html">Apache-Log-Dateien</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>FileETag</name>
-<description>Dateiattribute, die zur Erstellung des HTTP-Response-Headers
-ETag verwendet werden</description>
-<syntax>FileETag <var>Komponente</var> ...</syntax>
-<default>FileETag INode MTime Size</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Wenn dem Dokument eine Datei zugrundeliegt, bestimmt die Direktive
- <directive>FileETag</directive> die Dateiattribute, die zur Erstellung
- des HTTP-Response-Headers <code>ETag</code> (Entity-Tag) verwendet
- werden. (Der Wert von <code>ETag</code> wird bei der Cache-Verwaltung
- zur Einsparung von Netzwerk-Bandbreite benutzt.) Im Apache 1.3.22 und
- fr&uuml;her wurde der <code>ETag</code>-Wert <em>stets</em> aus
- der I-Node, der Gr&ouml;&szlig;e und dem Datum der letzten
- &Auml;nderung (mtime) der Datei gebildet. Die Direktive
- <directive>FileETag</directive> erlaubt es Ihnen, zu bestimmen,
- welche dieser Eigenschaften -- falls &uuml;berhaupt -- verwendet
- werden sollen. Die g&uuml;ltigen Schl&uuml;sselworte lauten:</p>
-
- <dl>
- <dt><strong>INode</strong></dt>
- <dd>Die I-Node-Nummer wird in die Berechnung mit einbezogen</dd>
- <dt><strong>MTime</strong></dt>
- <dd>Datum und Uhrzeit der letzten &Auml;nderung werden mit einbezogen</dd>
- <dt><strong>Size</strong></dt>
- <dd>Die Anzahl der Bytes in der Datei wird mit einbezogen</dd>
- <dt><strong>All</strong></dt>
- <dd>Alle verf&uuml;gbaren Angaben werden verwendet. Die ist
- gleichbedeutend mit:
- <example>FileETag INode MTime Size</example></dd>
- <dt><strong>None</strong></dt>
- <dd>Es wird keine <code>ETag</code>-Angabe in die Antwort eingef&uuml;gt,
- wenn dem Dokument eine Datei zugrundeliegt.</dd>
- </dl>
-
- <p>Den Schl&uuml;sselw&ouml;rtern <code>INode</code>, <code>MTime</code>
- und <code>Size</code> kann entweder ein <code>+</code> oder ein
- <code>-</code> vorangestellt werden, was die &Auml;nderung einer
- Vorgabe erlaubt, die von einem gr&ouml;&szlig;eren Umfeld
- geerbt wurde. Jedes Schl&uuml;selwort ohne ein solches Prefix
- hebt die ererbte Einstellung sofort und vollst&auml;ndig auf.</p>
-
- <p>Wenn die Konfiguration f&uuml;r ein Verzeichnis
- <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code> enth&auml;lt
- und die eines Unterverzeichnisses <code>FileETag&nbsp;-INode</code>,
- dann ist die Einstellung f&uuml;r das Unterverzeichnis (die an
- jedes Unter-Unterverzeichnis weitervererbt wird, welches dies nicht
- &uuml;berschreibt) &auml;quivalent mit
- <code>FileETag&nbsp;MTime&nbsp;Size</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Files</name>
-<description>Enth&auml;lt Direktiven, die sich nur auf passende Dateinamen
-beziehen</description>
-<syntax>&lt;Files <var>Dateiname</var>&gt; ... &lt;/Files&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Die Direktive <directive type="section">Files</directive>
- begrenzt die Reichweite der enthaltenen Anweisungen auf Dateinamen.
- Sie ist vergleichbar mit den Direktiven <directive
- module="core" type="section">Directory</directive> und <directive
- module="core" type="section">Location</directive>. Sie muss eine
- passende <code>&lt;/Files&gt;</code>-Anweisung besitzen.
- Die innerhalb dieses Abschnittes angegebenen Direktiven werden auf
- jedes Objekt mit einem Basisnamen (letzte Komponente des Dateinamens)
- angewendet, der auf die angegebenen Dateinamen passt. <directive
- type="section">Files</directive>-Container werden, nachdem die
- <directive module="core" type="section">Directory</directive>-Container
- und <code>.htaccess</code>-Dateien gelesen sind, jedoch vor den
- <directive type="section" module="core">Location</directive>-Containern,
- in der Reihenfolge ihres Auftretens ausgef&uuml;hrt. Beachten Sie, dass
- <directive type="section">Files</directive>-Anweisungen innerhalb von
- <directive type="section" module="core">Directory</directive>-Containern
- auftreten k&ouml;nnen, um den Teil des Dateisystems einzuschr&auml;nken,
- den sie betreffen.</p>
-
- <p>Das Argument <var>Dateiname</var> kann einen Dateinamen oder eine
- Zeichenkette mit Platzhaltern enthalten, wobei <code>?</code> auf ein
- einzelnes Zeichen passt und <code>*</code> auf eine beliebige Folge von
- Zeichen. Erweiterte regul&auml;re Ausdr&uuml;cke k&ouml;nnen ebenfalls
- verwendet werden, indem das Zeichen <code>~</code> hinzugef&uuml;gt wird.
- Beispielsweise w&uuml;rde</p>
-
- <example>
- &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
- </example>
-
- <p>auf die gebr&auml;uchlichsten Grafikformate im Internet passen.
- <directive module="core" type="section">FilesMatch</directive> wird
- jedoch bevorzugt.</p>
-
- <p>Beachten Sie bitte, dass die <directive
- type="section">Files</directive>-Container anders als <directive
- type="section" module="core">Directory</directive>- und <directive
- type="section" module="core">Location</directive>-Container innerhalb
- von <code>.htaccess</code>-Dateien verwendet werden k&ouml;nnen.
- Dies erlaubt den Anwendern auf Dateiebene die Kontrolle &uuml;ber ihre
- eigenen Dateien.</p>
-</usage>
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>FilesMatch</name>
-<description>Enth&auml;lt Direktiven, die f&uuml;r Dateinamen gelten, die
- auf einen regul&auml;ren Ausdruck passen</description>
-<syntax>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Die Direktive <directive type="section">FilesMatch</directive>
- begrenzt wie die Direktive <directive module="core"
- type="section">Files</directive> die enthaltenen Anweisungen auf
- Dateinamen. Sie akzeptiert jedoch regul&auml;re Ausdr&uuml;cke.
- Beispielsweise w&uuml;rde</p>
-
- <example>
- &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
- </example>
-
- <p>auf die gebr&auml;uchlichsten Grafikformate im Internet passen.</p>
-</usage>
-
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceType</name>
-<description>Erzwingt die Auslieferung aller passendenden Dateien mit dem
-angegebenen MIME-Content-Type</description>
-<syntax>ForceType <var>MIME-Type</var>|None</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Wurde im Apache 2.0 in den Core verschoben</compatibility>
-
-<usage>
- <p>Wenn sie innerhalb einer <code>.htaccess</code>-Datei, eines
- <directive type="section" module="core">Directory</directive>-,
- <directive type="section" module="core">Location</directive>-
- <directive type="section" module="core">Files</directive>-Containers
- angegeben wird, erzwingt die Direktive die Auslieferung aller
- entsprechenden Dateien mit dem Content-Type, der durch
- <var>MIME-Type</var> definiert wurde. Wenn Sie zum Beispiel ein
- Verzeichnis voller GIF-Dateien haben, die Sie nicht alle durch
- <code>.gif</code> kennzeichnen wollen, k&ouml;nnen Sie angeben:</p>
-
- <example>
- ForceType image/gif
- </example>
-
- <p>Beachten Sie bitte, dass die Direktive anders als <directive
- module="core">DefaultType</directive> alle MIME-Type-Zuordnungen
- &uuml;berschreibt, einschlie&szlig;lich Dateiendungen, die einen
- Medientyp bezeichnen k&ouml;nnten.</p>
-
- <p>Sie k&ouml;nnen jede <directive>ForceType</directive>-Angabe
- durch die Verwendung des Wertes <code>None</code> &uuml;berschreiben:</p>
-
- <example>
- # erzwinge image/gif f&uuml;r alle Dateien:<br />
- &lt;Location /images&gt;<br />
- <indent>
- ForceType image/gif<br />
- </indent>
- &lt;/Location&gt;<br />
- <br />
- # hier jedoch normale MIME-Type-Zuordnungen:<br />
- &lt;Location /images/mixed&gt;<br />
- <indent>
- ForceType None<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HostnameLookups</name>
-<description>Aktiviert DNS-Lookups auf Client-IP-Adressen</description>
-<syntax>HostnameLookups On|Off|Double</syntax>
-<default>HostnameLookups Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>Diese Direktive aktiviert die DNS-Abfrage <transnote>ein sogenannter
- DNS-Lookup</transnote>, so dass Hostnamen protokolliert (und in
- <code>REMOTE_HOST</code> an CGIs/SSIs &uuml;bergeben) werden k&ouml;nnnen.
- Der Wert <code>Double</code> bezieht sich auf ein
- Double-Reverse-DNS-Lookup. D.h. nachdem ein Reverse-Lookup
- durchgef&uuml;hrt wurde, wird dann auf dem Ergebnis ein
- Forward-Lookup ausgef&uuml;hrt. Wenigstens eine der IP-Adressen
- aus dem Forward-Lookup muss der Originaladresse entsprechen.
- (In der "tcpwrappers"-Terminologie wird dies <code>PARANOID</code>
- genannt.)</p>
-
- <p>Unabh&auml;ngig von der Einstellung wird ein Double-Reverse-Lookup
- durchgef&uuml;hrt, wenn <module>mod_authz_host</module> zur
- Zugriffskontrolle per Hostnamen eingesetzt wird. Dies ist aus
- Sicherheitsgr&uuml;nden notwendig. Beachten Sie, dass das Ergebnis dieses
- Double-Reverse-Lookups nicht generell verf&uuml;gbar ist, solange Sie
- nicht <code>HostnameLookups Double</code> setzen. Wenn beispielsweise
- nur <code>HostnameLookups On</code> angegeben ist und eine Anfrage
- f&uuml;r ein Objekt erfolgt, welches durch Hostnamen-Beschr&auml;nkungen
- gesch&uuml;tzt ist, dann wird CGIs nur das Ergebnis des
- Singel-Reverse-Lookups in <code>REMOTE_HOST</code> &uuml;bergeben,
- egal ob das Doble-Reverse-Lookup fehlschlug oder nicht.</p>
-
- <p>Die Voreinstellung ist <code>Off</code>, um Netzwerktraffic bei den
- Angeboten einzusparen, die nicht tats&auml;chlich Reverse-Lookups
- ben&ouml;tigen. Es ist auch f&uuml;r die Endanwender besser, da sie nicht
- die zus&auml;tzliche Wartezeit ertragen m&uuml;ssen, die ein Lookup mit
- sich bringt. Hoch frequentierte Angebote sollten diese Direktive auf
- <code>Off</code>lassen. Das Hilfsprogramm <a
- href="../programs/logresolve.html">logresolve</a>, das
- standardm&auml;&szlig;ig in das Unterverzeichnis <code>bin</code>
- Ihres Installationsverzeichnisses kompiliert wird, kann dazu verwendet
- werden, um offline Hostnamen zu protokollierten IP-Adressen
- nachzuschlagen.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfDefine</name>
-<description>Schlie&szlig;t Direktiven ein, die nur ausgef&uuml;hrt werden,
-wenn eine Testbedingung beim Start wahr ist</description>
-<syntax>&lt;IfDefine [!]<var>Parametername</var>&gt; ...
- &lt;/IfDefine&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Der Container <code>&lt;IfDefine <var>Test</var>&gt;...&lt;/IfDefine&gt;
- </code> wird dazu verwendet, Direktiven als bedingt zu kennzeichnen.
- Die Direktiven innerhalb eines <directive
- type="section">IfDefine</directive>-Abschnittes werden nur ausgef&uuml;hrt,
- wenn <var>Test</var> wahr ist. Ist <var>Test</var> falsch, wird alles
- zwischen der Start- und Endemarkierung ignoriert.</p>
-
- <p>In der <directive type="section">IfDefine</directive>-Anweisung kann
- <var>Test</var> eine von zwei Formen annehmen:</p>
-
- <ul>
- <li><var>Parametername</var></li>
-
- <li><code>!</code><var>Parametername</var></li>
- </ul>
-
- <p>Im ersten Fall werden die Direktiven zwischen der Start- und
- Endemarkierung nur ausgef&uuml;hrt, wenn der Parameter namens
- <var>Parametername</var> definiert ist. Die zweite Form kehrt den
- Test um und f&uuml;hrt die Direktiven nur dann aus, wenn
- <var>Parametername</var> <strong>nicht</strong> definiert ist.</p>
-
- <p>Das Argument <var>Parametername</var> ist ein sogenanntes
- "Define", das beim beim Start des Servers in der
- <code>httpd</code>-Befehlszeile durch <code>-D<var>Parameter</var></code>
- angegeben wird.</p>
-
- <p><directive type="section">IfDefine</directive>-Container k&ouml;nnen
- ineinander verschachtelt werden, um einfache Multi-Parameter-Tests
- zu implementieren. Beispiel:</p>
-
- <example>
- httpd -DReverseProxy ...<br />
- <br />
- # httpd.conf<br />
- &lt;IfDefine ReverseProxy&gt;<br />
- <indent>
- LoadModule rewrite_module modules/mod_rewrite.so<br />
- LoadModule proxy_module modules/libproxy.so<br />
- </indent>
- &lt;/IfDefine&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfModule</name>
-<description>Schlie&szlig;t Direktiven ein, die abh&auml;ngig vom
-Vorhandensein oder Fehlen eines speziellen Moduls ausgef&uuml;hrt
-werden</description>
-<syntax>&lt;IfModule [!]<var>Modulname</var>|<var>Modulbezeichner</var>&gt;
- ... &lt;/IfModule&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-<compatibility>Modulbezeichner sind ab Version 2.1
- verf&uuml;gbar.</compatibility>
-
-
-<usage>
- <p>Der Container <code>&lt;IfModule
- <var>Test</var>&gt;...&lt;/IfModule&gt;</code> wird dazu verwendet,
- Direktiven als abh&auml;ngig von dem Vorhandensein eines speziellen
- Moduls zu kennzeichnen. Die Direktiven innerhalb eines <directive
- type="section">IfModule</directive>-Abschnitts werden nur
- ausgef&uuml;hrt, wenn <var>Test</var> wahr ist. Ist <var>Test</var>
- falsch, wird alles zwischen der Start- und Endemarkierung ignoriert.</p>
-
- <p>In der <directive type="section">IfModule</directive>-Anweisung
- kann <var>Test</var> eine von zwei Formen annehmen:</p>
-
- <ul>
- <li><var>Modul</var></li>
-
- <li><code>!</code><var>Modul</var></li>
- </ul>
-
- <p>Im ersten Fall werden die Direktiven zwischen der Start- und
- Endemarkierung nur ausgef&uuml;hrt, das Modul namens
- <var>Modul</var> im Apache enthalten ist -- entweder einkompiliert
- oder mittels <directive module="mod_so">LoadModule</directive>
- dynamisch geladen. Die zweite Form dreht den Test um und f&uuml;hrt die
- Direktiven nur aus, wenn <var>Modul</var> <strong>nicht</strong>
- enthalten ist.</p>
-
- <p>Das Argument <var>Modul</var> kann entweder der Modulbezeichner oder
- der Dateiname des Moduls zum Zeitpunkt seiner Kompilierung sein.
- <code>rewrite_module</code> beispielsweise ist der Bezeichner und
- <code>mod_rewrite.c</code> ist der Dateiname. Wenn ein Modul aus mehreren
- Quelltext-Dateien besteht, verwenden Sie den Namen der Datei, welche die
- Zeichenfolge <code>STANDARD20_MODULE_STUFF</code> enth&auml;lt.</p>
-
- <p><directive type="section">IfModule</directive>-Container k&ouml;nnen
- inneinander verschachtelt werden, um einfache Multi-Modul-Tests
- durchzuf&uuml;hren.</p>
-
- <p>Dieser Container sollte verwendet werden, wenn Sie eine
- Konfigurationsdatei ben&ouml;tigen, die unabh&auml;ngig davon funktioniert,
- ob ein bestimmtes Modul verf&uuml;gbar ist oder nicht. Normalerweise
- ist es nicht notwendig, Direktiven in <directive
- type="section">IfModule</directive>-Containern unterzubringen.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Include</name>
-<description>F&uuml;gt andere Konfigurationsdateien innerhalb der
-Server-Konfigurationsdatei ein</description>
-<syntax>Include <var>Dateiname</var>|<var>Verzeichnis</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-<compatibility>Die Platzhalter-Suche ist verf&uuml;gbar seit
-2.0.41</compatibility>
-
-<usage>
- <p>Die Direktive erlaubt das Einf&uuml;gen anderer Konfigurationsdateien
- in die Konfigurationsdatei des Servers.</p>
-
- <p>Shell-typische (<code>fnmatch()</code>) Platzhlaterzeichen k&ouml;nnen
- dazu verwendet werden, mehrere Dateien auf einmal in alphabetischer
- Reihenfolge einzuf&uuml;gen. Wenn <directive>Include</directive>
- dar&uuml;ber hinaus auf ein Verzeichnis anstatt auf eine Datei zeigt,
- liest der Apache alle Dateien in diesem Verzeichnis und allen
- Unterverzeichnissen ein. Das Einf&uuml;gen ganzer Verzeichnisse ist
- jedoch nicht empfehlenswert, da tempor&auml;re Dateien sehr leicht
- versehentlich in einem Verzeichnis zur&uuml;ckgelassen werden, was
- <code>httpd</code> scheitern lassen kann.</p>
-
- <p>Der angegebene Dateiname kann ein absoluter Pfad sein oder relativ zum
- <directive module="core">ServerRoot</directive>-Verzeichnis angegeben
- werden.</p>
-
- <p>Beispiele:</p>
-
- <example>
- Include /usr/local/apache2/conf/ssl.conf<br />
- Include /usr/local/apache2/conf/vhosts/*.conf
- </example>
-
- <p>Oder Sie geben Pfade relativ zu Ihrem <directive
- module="core">ServerRoot</directive>-Verzeichnis an:</p>
-
- <example>
- Include conf/ssl.conf<br />
- Include conf/vhosts/*.conf
- </example>
-
- <p>Der Aufruf von <code>apachectl configtest</code> liefert eine Liste
- der Dateien, die w&auml;hrend des Konfigurations-Tests verarbeitet
- werden:</p>
-
- <example>
- root@host# apachectl configtest<br />
- Processing config file: /usr/local/apache2/conf/ssl.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf<br />
- Syntax OK
- </example>
-</usage>
-
-<seealso><a href="../programs/apachectl.html">apachectl</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAlive</name>
-<description>Aktiviert persistente HTTP-Verbindungen</description>
-<syntax>KeepAlive On|Off</syntax>
-<default>KeepAlive On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Die Keep-Alive-Erweiterung von HTTP/1.0 und die
- HTTP/1.1-Funktionalit&auml;t persistenter Verbindungen unterst&uuml;tzt
- langlebige HTTP-Sitzungen, die es erlauben, mehrere Anfragen &uuml;ber
- die gleich TCP-Verbindung zu senden. In einigen F&auml;llen wurde eine
- Beschleunigung der Wartezeiten von beinahe 50% f&uuml;r HTML-Dokumente
- mit vielen Bildern festgestellt. Um Keep-Alive-Verbindungen zu aktivieren,
- setzen Sie <code>KeepAlive On</code>.</p>
-
- <p>Bei HTTP/1.0-Clients werden Keep-Alive-Verbindungen nur dann verwendet,
- wenn sie vom Client eigens angefordert werden. Desweiteren k&ouml;nnen
- Keep-Alive-Verbindungen bei einem HTTP/1.0-Client nur dann verwendet
- werden, wenn die L&auml;nge des Inhalts im Voraus bekannt ist. Dies
- impliziert, dass dynamische Inhalte wie CGI-Ausgaben, SSI-Seiten und
- servergenerierte Verzeichnisauflistungen im Allgemeinen keine
- Keep-Alive-Verbindungen mit HTTP/1.0-Clients verwenden. Bei
- HTTP/1.1-Clients sind Keep-Alive-Verbindungen Voreinstellung, solange
- nichts anderes angegeben ist. Wenn der Client es anfordert, wird
- Chunked-Encoding verwendet, um Inhalte mit unbekannter L&auml;nge
- &uuml;ber persistente Verbindungen zu senden.</p>
-</usage>
-
-<seealso><directive module="core">MaxKeepAliveRequests</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAliveTimeout</name>
-<description>Zeitspanne, die der Server w&auml;hrend persistenter Verbindungen
-auf nachfolgende Anfragen wartet</description>
-<syntax>KeepAliveTimeout <var>Sekunden</var></syntax>
-<default>KeepAliveTimeout 15</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Dies legt die Anzahl der Sekunden fest, die der Apache auf weitere
- Anfragen wartet, bevor er die Verbindung schlie&szlig;t. Nachdem einmal
- eine Anfrage entgegen genommen wurde, wird die durch die Direktive
- <directive module="core">Timeout</directive> festgelegte Auszeit
- angewendet.</p>
-
- <p>Auf stark belasteten Servern kann ein hoher
- <directive>KeepAliveTimeout</directive>-Wert zu Durchsatzminderungen
- f&uuml;hren. Je h&ouml;her die Auszeit angegeben ist, desto l&auml;nger
- ist der Apache damit besch&auml;ftigt, auf unt&auml;tige Clients zu
- warten.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Limit</name>
-<description>Beschr&auml;nkt die eingeschlossenen Zugriffskontrollen auf
-bestimmte HTTP-Methoden</description>
-<syntax>&lt;Limit <var>Methode</var> [<var>Methode</var>] ... &gt; ...
- &lt;/Limit&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Zugriffskontrollen gelten normalerweise f&uuml;r <strong>alle</strong>
- Zugriffsmethoden, was normalerweise auch das gew&uuml;nschte Verhalten ist.
- <strong>Im Allgemeinen sollten Zugriffskontrollen nicht in einen
- <directive type="section">Limit</directive>-Container gepackt
- werden.</strong></p>
-
- <p>Der Sinn der Direktive <directive type="section">Limit</directive>
- ist es, den Effekt der Zugriffskontrollen auf die angegebenen
- HTTP-Methoden zu beschr&auml;nken. Bei allen anderen Methoden haben
- die in der <directive type="section">Limit</directive>-Gruppe
- enthaltenen Zugriffsbeschr&auml;nkungen <strong>keine Wirkung</strong>.
- Im folgenden Beispiel gilt die Zugriffskontrolle nur f&uuml;r die
- Methoden <code>POST</code>, <code>PUT</code> und <code>DELETE</code>.
- Alle anderen Methoden bleiben ungesch&uuml;tzt:</p>
-
- <example>
- &lt;Limit POST PUT DELETE&gt;<br />
- <indent>
- Require valid-user<br />
- </indent>
- &lt;/Limit&gt;
- </example>
-
- <p>Sie k&ouml;nnen eine oder mehrere der folgenden Methoden angeben:
- <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
- <code>CONNECT</code>, <code>OPTIONS</code>,
- <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
- <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
- <code>LOCK</code> und <code>UNLOCK</code>. <strong>Die Methodennamen
- unterscheiden zwischen Gro&szlig;- und Kleinschreibung.</strong> Wenn
- <code>GET</code> verwendet wird, sind <code>HEAD</code>-Anfragen
- ebenfalls eingeschr&auml;nkt. Die <code>TRACE</code>-Methode kann nicht
- limitiert werden.</p>
-
- <note type="warning">
- Wenn es um Zugriffsbeschr&auml;nkungen geht, sollte
- ein <directive module="core" type="section"
- >LimitExcept</directive>-Container sollte immmer einem <directive
- module="core" type="section">Limit</directive>-Container vorgezogen
- werden, da <directive module="core" type="section">LimitExcept</directive>
- einen Schutz gegen beliebige Methoden bietet.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LimitExcept</name>
-<description>Beschr&auml;nkt Zugriffskontrollen auf alle HTTP-Methoden
-au&szlig;er den genannten</description>
-<syntax>&lt;LimitExcept <var>Methode</var> [<var>Methode</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><directive type="section">LimitExcept</directive> und
- <code>&lt;/LimitExcept&gt;</code> werden dazu verwendet, eine Gruppe
- von Anweisungen zur Zugriffskontrolle zusammenzufassen, die dann auf
- jede HTTP-Methode angewendet werden, die <strong>nicht</strong>
- als Argument angegeben ist. D.h. dies ist das Gegenteil des
- <directive type="section" module="core">Limit</directive>-Containers
- und kann zur Steuerung von Standard- und nicht-Standard-/unbekannten
- Methoden verwendet werden. F&uuml;r weitere Einzelheiten lesen Sie bitte
- die Beschreibung zu <directive module="core"
- type="section">Limit</directive>.</p>
-
- <p>Beispiel:</p>
-
- <example>
- &lt;LimitExcept POST GET&gt;<br />
- <indent>
- Require valid-user<br />
- </indent>
- &lt;/LimitExcept&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitInternalRecursion</name>
-<description>Bestimmt die maximale Anzahl interner Umleitungen und
- verschachtelter Unteranfragen</description>
-<syntax>LimitInternalRecursion <var>Zahl</var> [<var>Zahl</var>]</syntax>
-<default>LimitInternalRecursion 10</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Verf&uuml;gbar ab Apache 2.0.47</compatibility>
-
-<usage>
- <p>Eine interne Umleitung erfolgt beispielsweise, wenn die Direktive
- <directive module="mod_actions">Action</directive> verwendet wird, welche
- die Originalanfrage intern zu einem CGI-Skript weiterleitet. Eine
- Unteranfrage <transnote>engl. Subrequest</transnote> ist ein Mechanismus des
- Apache, um herauszufinden, was bei einer URI geschehen w&uuml;rde, w&auml;re
- sie angefordert worden. <module>mod_dir</module> z.B. verwendet
- Unteranfragen, um nach den Dateien zu suchen, die in der <directive
- module="mod_dir">DirectoryIndex</directive>-Anweisung aufgef&uuml;hrt
- sind.</p>
-
- <p><directive>LimitInternalRecursion</directive> bewahrt den Server vor
- einem Absturz, wenn er in eine Endlosschleife aus internen Umleitungen
- oder Unteranfragen hineinl&auml;uft. Derartige Schleifen werden
- gew&ouml;hnlich durch Fehlkonfiguration verursacht.</p>
-
- <p>Die Direktive setzt zwei verschiedene Begrenzungen, welche je Anfrage
- ausgewertet werden. Die erste <var>Zahl</var> bestimmt die maximale
- Anzahl der Umleitungen, die aufeinander folgen d&uuml;rfen. Die zweite
- <var>Zahl</var> legt fest, wie tief Unteranfragen ineinander
- verschachtelt werden d&uuml;rfen. Wenn Sie lediglich eine <var>Zahl</var>
- angeben, wird sie beiden Begrenzungen zugewiesen.</p>
-
- <example><title>Beispiel</title>
- LimitInternalRecursion 5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestBody</name>
-<description>Begrenzt die Gesamtgr&ouml;&szlig;e des vom Client gesendeten
-HTTP-Request-Body</description>
-<syntax>LimitRequestBody <var>Bytes</var></syntax>
-<default>LimitRequestBody 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Die Direktive gibt die Anzahl der <var>Bytes</var> zwischen 0
- (unbegrenzt) und 2147483647 (2GB) an, die im Request-Body (Datenteil der
- Anfrage) erlaubt sind.</p>
-
- <p>Die Direktive <directive>LimitRequestBody</directive> erlaubt es dem
- Benutzer, die Gr&ouml;&szlig;e des HTTP-Request-Bodys in dem Kontext zu
- begrenzen, in dem die Anweisung angegeben ist (Server, pro Verzeichnis,
- pro Datei oder pro Adresse). Wenn die Anfrage des Clients dieses Limit
- &uuml;berschreitet, gibt der Server einen Fehler zur&uuml;ck anstatt die
- Anfrage zu bearbeiten. Die Gr&ouml;&szlig;e des Datenteils einer Anfrage
- kann sehr stark variieren, abh&auml;ngig von der Art der Ressource und
- den f&uuml;r diese Ressource erlaubten Methoden. CGI-Skripte verwenden
- den Datenteil &uuml;blicherweise zum Empfang von Formulardaten. Wird
- die <code>PUT</code>-Methode angewendet, dann muss der Wert mindestens
- so gro&szlig; sein wie irgendeine Darstellungsform, die der Server
- f&uuml;r diese Ressource akzeptieren soll.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine gr&ouml;&szlig;ere
- Kontrolle gegen&uuml;ber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann.</p>
-
- <p>Wenn Sie beispielsweise das Hochladen von Dateien zu einer bestimmten
- Adresse erlauben, aber die Gr&ouml;&szlig;e der hochgeladenen Dateien
- auf 100K beschr&auml;nken wollen, k&ouml;nnen Sie die folgende Anweisung
- verwenden:</p>
-
- <example>
- LimitRequestBody 102400
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFields</name>
-<description>Begrenzt die Anzahl der HTTP-Request-Header, die vom Client
-entgegengenommen werden</description>
-<syntax>LimitRequestFields <var>Anzahl</var></syntax>
-<default>LimitRequestFields 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><var>Anzahl</var> ist ein Integer-Wert (eine positive Ganzzahl)
- zwischen 0 (unbegrenzt) und 32767. Die Voreinstellung wird durch die
- Konstante <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (<code>100</code>
- bei der Auslieferung) zur Kompilierungszeit gesetzt.</p>
-
- <p>Die Direktive <directive>LimitRequestFields</directive> erlaubt es
- dem Serveradministrator, die maximale Anzahl der in einem HTTP-Request
- erlaubten HTTP-Request-Header zu ver&auml;ndern. F&uuml;r den Server
- muss dieser Wert gr&ouml;&szlig;er sein als die Anzahl der Headerzeilen,
- die ein normaler Client senden k&ouml;nnte. Die Anzahl der Request-Header,
- die ein gew&ouml;hnlicher Client verwendet, &uuml;berschreitet selten 20
- Zeilen. Allerdings kann dies zwischen den verschiedenen
- Client-Ausf&uuml;hrungen variieren, oft abh&auml;ngig vom Ausma&szlig;,
- mit dem der Anwender die genaue Content-Negotiation-Unterst&uuml;tzung
- seines Browsers konfiguriert hat. Optionale HTTP-Erweiterungen
- &auml;u&szlig;ern sich oft in Form von HTTP-Headern.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine gr&ouml;&szlig;ere
- Kontrolle gegen&uuml;ber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann. Der Wert sollte erh&ouml;ht werden, wenn normale Clients
- eine Fehlermeldung vom Server erhalten, die besagt, dass mit der Anfrage
- zu viele Headerzeilen gesendet wurden.</p>
-
- <p>Beispiel:</p>
-
- <example>
- LimitRequestFields 50
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFieldSize</name>
-<description>Begrenzt die L&auml;nge des vom Client gesendeten
-HTTP-Request-Headers</description>
-<syntax>LimitRequestFieldsize <var>Bytes</var></syntax>
-<default>LimitRequestFieldsize 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive gibt die Anzahl der <var>Bytes</var> zwischen 0
- und dem Wert der zur Kompilierungszeit definierten Konstante
- <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (<code>8190</code> bei
- der Auslieferung) an, die in einem HTTP-Header erlaubt sind.</p>
-
- <p>Die Direktive <directive>LimitRequestFieldsize</directive> erlaubt es
- dem Serveradministrator, die maximale Gr&ouml;&szlig;e eines
- HTTP-Request-Headers auf einen Wert unterhalb der normalen, im Server
- einkompilierten Gr&ouml;&szlig;e des Eingabepuffers zu verringern.
- F&uuml;r den Server muss der Wert gro&szlig; genug sein, um eine beliebige
- Headerzeile einer normalen Client-Anfrage vorzuhalten. Die
- Gr&ouml;&szlig;e variiert stark zwischen den verschiedenen
- Client-Ausf&uuml;hrungen, oft abh&auml;ngig vom Ausma&szlig;, mit dem
- der Anwender die genaue Content-Negotiation-Unterst&uuml;tzung seines
- Browsers konfiguriert hat.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine gr&ouml;&szlig;ere
- Kontrolle gegen&uuml;ber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann.</p>
-
- <p>Beispiel:</p>
-
- <example>
- LimitRequestFieldSize 4094
- </example>
-
- <note>Unter normalen Umst&auml;nden sollte die Voreinstellung nicht
- ver&auml;ndert werden.</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestLine</name>
-<description>Begrenzt die L&auml;nge der vom Client entgegengenommenen
-HTTP-Anfragezeile</description>
-<syntax>LimitRequestLine <var>Bytes</var></syntax>
-<default>LimitRequestLine 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive legt die Anzahl der <var>Bytes</var> zwischen 0 und
- dem Wert der zur Kompilierungszeit definierten Konstante
- <code>DEFAULT_LIMIT_REQUEST_LINE</code> (<code>8190</code> bei der
- Auslieferung) fest, die in der HTTP-Anfragezeile erlaubt sind.</p>
-
- <p>Die Direktive <directive>LimitRequestLine</directive> erlaubt es dem
- Serveradministrator, die maximale Gr&ouml;&szlig;e der
- HTTP-Anfragezeile auf einen Wert unterhalb der normalen, im Server
- einkompilierten Gr&ouml;&szlig;e des Eingabepuffers zu verringern. Da
- die Anfragezeile aus der HTTP-Methode, der URI und der Protokollversion
- besteht, bedeutet die <directive>LimitRequestLine</directive>-Direktive
- eine Beschr&auml;nkung der L&auml;nge der f&uuml;r eine Anfrage an den
- Server erlaubten Anfrage-URI. F&uuml;r den Server muss der Wert gro&szlig;
- genug sein, um jeden seiner Ressourcennamen vorzuhalten,
- einschlie&szlig;lich aller Informationen, die im Query-String einer
- <code>GET</code>-Anfrage &uuml;bergeben werden k&ouml;nnen.</p>
-
- <p>Die Direktive gibt dem Serveradministrator eine gr&ouml;&szlig;ere
- Kontrolle gegen&uuml;ber abnormalem Verhalten von Clients, was bei der
- Vermeidung einiger Formen von Denial-of-Service-Attacken hilfreich
- sein kann.</p>
-
- <p>Beispiel:</p>
-
- <example>
- LimitRequestLine 4094
- </example>
-
- <note>Unter normalen Umst&auml;nden sollte die Voreinstellung nicht
- ver&auml;ndert werden.</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitXMLRequestBody</name>
-<description>Begrenzt die Gr&ouml;&szlig;e eines XML-basierten
-Request-Bodys</description>
-<syntax>LimitXMLRequestBody <var>Bytes</var></syntax>
-<default>LimitXMLRequestBody 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Dies gibt die Grenze f&uuml;r die maximale Gr&ouml;&szlig;e (in Bytes)
- des XML-basierten Request-Bodys an. Der Wert <code>0</code> deaktiviert
- diese Pr&uuml;fung.</p>
-
- <p>Beispiel:</p>
-
- <example>
- LimitXMLRequestBody 0
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Location</name>
-<description>Wendet die enthaltenen Direktiven nur auf die entsprechenden
-URLs an</description>
-<syntax>&lt;Location
- <var>URL-Pfad</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Die Direktive <directive type="section">Location</directive>
- begrenzt die Reichweite der enthaltenen Anweisungen auf URLs.
- Sie ist der Direktive <directive type="section"
- module="core">Directory</directive> &auml;hnlich und startet einen
- Abschnitt, der mit der Anweisung <code>&lt;/Location&gt;</code>
- abgeschlossen wird. <directive
- type="section">Location</directive>-Container werden, nachdem die
- <directive type="section" module="core">Directory</directive>-Container
- und <code>.htaccess</code>-Dateien gelesen wurden, und nach den
- <directive type="section" module="core">Files</directive>-Containern, in
- der Reihenfolge ausgef&uuml;hrt, in der sie in der Konfigurationsdatei
- erscheinen.</p>
-
- <p><directive type="section">Location</directive>-Abschnitte operieren
- vollst&auml;ndig au&szlig;erhalb des Dateisystems. Dies hat mehrere
- Konsequenzen. An Wichtigsten, <directive
- type="section">Location</directive>-Anweisungen sollten nicht daf&uuml;r
- verwendet werden, den Zugriff zu Teilen des Dateisystems zu steuern. Da
- mehrere unterschiedliche URLs auf die gleiche Stelle des Dateisystems
- zeigen k&ouml;nnen, k&ouml;nnte eine solche Zugriffskontrolle u.U.
- umgangen werden.</p>
-
- <note><title>Wann sollte<directive
- type="section">Location</directive> verwendet werden</title>
-
- <p>Verwenden Sie <directive type="section">Location</directive>, um
- Anweisungen auf Inhalte anzuwenden, die au&szlig;erhalb des Dateisystems
- abgelegt sind. Benutzen Sie <directive
- type="section" module="core">Directory</directive> und <directive
- type="section" module="core">Files</directive> f&uuml;r Inhalte, die
- innerhalb des Dateisystems abgelegt sind. Eine Ausnahme bildet
- <code>&lt;Location /&gt;</code>, welches ein einfacher Weg ist, um eine
- Konfiguration auf den gesamten Server anzuwenden.</p>
- </note>
-
- <p>F&uuml;r alle nicht-Proxy-Anfragen ist die entsprechende URL
- ein URL-Pfad in der Form <code>/path/</code>. Es d&uuml;rfen weder ein
- Schema, noch ein Hostname, noch ein Port, noch ein Query-String einbezogen
- werden. F&uuml;r Proxy-Anfragen hat die Vergleichs-URL die Form
- <code>schema://servername/path</code>. Das Pr&auml;fix muss angegeben
- werden.</p>
-
- <p>Die URL kann Platzhalter verwenden. In einer Zeichenfolge mit
- Platzhaltern entspricht <code>?</code> einem einzelnen Zeichen und
- <code>*</code>einer beliebigen Zeichenfolge.</p>
-
- <p>Erweiterte regul&auml;re Ausdr&uuml;cke k&ouml;nnen ebenfalls
- verwendet werden, indem das Zeichen <code>~</code> hinzugef&uuml;gt
- wird. Beispielsweise w&uuml;rde</p>
-
- <example>
- &lt;Location ~ "/(extra|special)/data"&gt;
- </example>
-
- <p>auf URLs passen, welche die Zeichenfolge <code>/extra/data</code>
- oder <code>/special/data</code> enthalten. Die Direktive <directive
- type="section" module="core">LocationMatch</directive> verh&auml;lt sich
- genauso wie <directive type="section">Location</directive> mit
- regul&auml;ren Ausdr&uuml;cken.</p>
-
- <p>Die Funktionalit&auml;t von <directive
- type="section">Location</directive> ist insbesondere dann n&uuml;tzlich,
- wenn sie mit der <directive module="core">SetHandler</directive>-Direktive
- kombiniert wird. Um zum Beispiel Statusabfragen zu aktivieren, sie aber
- nur von Browsern aus <code>foo.com</code> zuzulassen, k&ouml;nnten Sie
- schreiben:</p>
-
- <example>
- &lt;Location /status&gt;<br />
- <indent>
- SetHandler server-status<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note><title>Anmerkung zu / (Schr&auml;gstrich, Slash)</title>
- <p>Das Slash-Zeichen hat eine besondere Bedeutung, je nachdem, wo es
- in der URL erscheint. Manche werden sein Verhalten vom Dateisystem
- gewohnt sein, wo mehrere aufeinanderfolgende Schr&auml;gstriche
- h&auml;ufig zu einem Schr&auml;gstrich zusammengefa&szlig;t werden
- (<em>d.h.</em> <code>/home///foo</code> ist das gleiche wie
- <code>/home/foo</code>). Im URL-Raum ist dies nicht notwendigerweise
- genauso. Bei der Direktive <directive type="section"
- module="core">LocationMatch</directive> und der <directive type="section"
- >Location</directive>-Version mit regul&auml;ren Ausdr&uuml;cken
- m&uuml;ssen Sie explizit mehrere Schr&auml;gstriche angeben, wenn Sie
- genau dies beabsichtigen.</p>
-
- <p>Beispielsweise w&uuml;rde <code>&lt;LocationMatch ^/abc&gt;</code>
- auf die angeforderte URL <code>/abc</code> passen, nicht aber auf
- <code>//abc</code>. Die Direktive <directive type="section"
- >Location</directive> (ohne regul&auml;re Ausdr&uuml;cke) verh&auml;lt
- sich &auml;hnlich, wenn sie f&uuml;r Proxy-Anfragen verwendet wird.
- Wenn <directive type="section">Location</directive> (ohne
- regul&auml;re Ausdr&uuml;cke) jedoch f&uuml;r nicht-Proxy-Anfragen
- verwendet wird, werden stillscheigend mehrere Schr&auml;chstriche mit
- mit einem einzigen Schr&auml;gstrich gleichgesetzt. Geben Sie
- beispielsweise <code>&lt;Location /abc/def&gt;</code> an und die
- Anfrage lautet auf <code>/abc//def</code>, dann greift die Anweisung.</p>
- </note>
-</usage>
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LocationMatch</name>
-<description>Wendet die enthaltenen Direktiven nur auf URLs an, die auf
-regul&auml;re Ausdr&uuml;cke passen</description>
-<syntax>&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Die Direktive <directive type="section">LocationMatch</directive>
- begrenzt die Reichweite der enthaltenen Anweisungen in der gleichen Weise
- wie <directive module="core" type="section">Location</directive> auf URLs.
- Sie verwendet jedoch regul&auml;re Ausdr&uuml;cke als Argument anstelle
- einer einfachen Zeichenkette. Beispielsweise w&uuml;rde</p>
-
- <example>
- &lt;LocationMatch "/(extra|special)/data"&gt;
- </example>
-
- <p>auf URLs passen, welche die Zeichenfolge <code>/extra/data</code>
- oder <code>/special/data</code> enthalten.</p>
-</usage>
-
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogLevel</name>
-<description>Steuert die Ausf&uuml;hrlichkeit des Fehlerprotokolls</description>
-<syntax>LogLevel <var>Level</var></syntax>
-<default>LogLevel warn</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>LogLevel</directive> stellt die Ausf&uuml;hrlichkeit
- der Nachrichten ein, die im Fehlerprotokoll aufgezeichnet werden (siehe
- Direktive <directive module="core">ErrorLog</directive>). Die folgenden,
- nach absteigender Aussagekraft sortierten <var>Level</var> sind
- verf&uuml;gbar:</p>
-
- <table border="1">
- <columnspec><column width=".2"/><column width=".3"/><column width=".5"/>
- </columnspec>
- <tr>
- <th><strong>Level</strong> </th>
-
- <th><strong>Beschreibung</strong> </th>
-
- <th><strong>Beispiel</strong> </th>
- </tr>
-
- <tr>
- <td><code>emerg</code> </td>
-
- <td>Notfall - das System ist unbenutzbar.</td>
-
- <td>"Child cannot open lock file. Exiting"
- <transnote>"Kindprozess kann die Lock-Datei nicht &ouml;ffnen.
- Beende Programm"</transnote></td>
- </tr>
-
- <tr>
- <td><code>alert</code> </td>
-
- <td>Ma&szlig;nahmen m&uuml;ssen unverz&uuml;glich ergriffen
- werden.</td>
-
- <td>"getpwuid: couldn't determine user name from uid"
- <transnote>"getpwuid: kann keinen Benutzernamen aus der UID
- ermitteln"</transnote></td>
- </tr>
-
- <tr>
- <td><code>crit</code> </td>
-
- <td>Kritischer Zustand.</td>
-
- <td>"socket: Failed to get a socket, exiting child"
- <transnote>"socket: Socket-Zuweisung fehlgeschlagen, beende
- Kindprozess"</transnote></td>
- </tr>
-
- <tr>
- <td><code>error</code> </td>
-
- <td>Fehlerbedingung.</td>
-
- <td>"Premature end of script headers"
- <transnote>"Vorzeitiges Ende der Skript-Header"</transnote></td>
- </tr>
-
- <tr>
- <td><code>warn</code> </td>
-
- <td>Warnung.</td>
-
- <td>"child process 1234 did not exit, sending another SIGHUP"
- <transnote>"Kindprozess 1234 nicht beendet, sende ein weiteres
- SIGHUP"</transnote></td>
- </tr>
-
- <tr>
- <td><code>notice</code> </td>
-
- <td>Normaler, aber signifikanter Zustand.</td>
-
- <td>"httpd: caught SIGBUS, attempting to dump core in ..."
- <transnote>"httpd: SIGBUS empfangen, versuche Speicherabbild nach ...
- zu schreiben"</transnote></td>
- </tr>
-
- <tr>
- <td><code>info</code> </td>
-
- <td>Information.</td>
-
- <td>"Server seems busy, (you may need to increase
- StartServers, or Min/MaxSpareServers)..."
- <transnote>"Server scheint besch&auml;ftigt zu sein,
- (m&ouml;glicherweise m&uuml;ssen Sie StartServers oder
- Min/MaxSpareServers erh&ouml;hen)"</transnote></td>
- </tr>
-
- <tr>
- <td><code>debug</code> </td>
-
- <td>Debug-Level-Nachrichten</td>
-
- <td>"Opening config file ..."
- <transnote>"&Ouml;ffne Konfigurationsdatei ..."</transnote></td>
- </tr>
- </table>
-
- <p>Geben Sie einen bestimmten Level an, denn werden Nachrichten von
- allen h&ouml;heren Leveln ebenso angezeigt. <em>Z.B.:</em> Wenn
- <code>LogLevel info</code> eingestellt ist, dann werden Nachrichten der
- Log-Level <code>notice</code> und <code>warn</code> ebenso eingetragen.</p>
-
- <p>Es wird empfohlen, mindestens den Level <code>crit</code> zu
- verwenden.</p>
-
- <p>Beispiel:</p>
-
- <example>
- LogLevel notice
- </example>
-
- <note><title>Hinweis</title>
- <p>Beim Protokollieren in eine regul&auml;re Datei k&ouml;nnen
- Nachrichten des Levels <code>notice</code> nicht unterdr&uuml;ckt
- werden und werden daher immer protokolliert. Dies trifft allerdings
- nicht zu, wenn mittels <code>syslog</code> protokolliert wird.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxKeepAliveRequests</name>
-<description>Anzahl der Anfragen, die bei einer persistenten Verbindung
-zul&auml;ssig sind</description>
-<syntax>MaxKeepAliveRequests <var>Anzahl</var></syntax>
-<default>MaxKeepAliveRequests 100</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Die Direktive <directive>MaxKeepAliveRequests</directive>
- begrenzt die Anzahl der Anfragen, die pro Verbindung zul&auml;ssig sind,
- wenn <directive module="core" >KeepAlive</directive> eingeschaltet ist.
- Bei der Einstellung <code>0</code> sind unbegrenzt viele Anfragen
- erlaubt. Wir empfehlen f&uuml;r diese Einstellung einen hohen Wert
- f&uuml;r eine maximale Serverleistung.</p>
-
- <p>Beispiel:</p>
-
- <example>
- MaxKeepAliveRequests 500
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NameVirtualHost</name>
-<description>Bestimmt eine IP-Adresse f&uuml;r den Betrieb namensbasierter
-virtueller Hosts</description>
-<syntax>NameVirtualHost <var>Adresse</var>[:<var>Port</var>]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>NameVirtualHost</directive> ist erforderlich,
- wenn Sie <a href="../vhosts/">namensbasierte virtuelle Hosts</a>
- konfigurieren m&ouml;chten.</p>
-
- <p>Obwohl <var>Adresse</var> eine Hostname sein kann, wird empfohlen,
- dass Sie stets eine IP-Adresse verwenden, z.B.:</p>
-
- <example>
- NameVirtualHost 111.22.33.44
- </example>
-
- <p>Mit der <directive>NameVirtualHost</directive>-Anweisung geben Sie
- die IP-Adresse an, unter der der Server Anfragen f&uuml;r
- namensbasierte virtuelle Hosts entgegennimmt. Das ist &uuml;blicherweise
- die Adresse, zu der die Namen Ihrer namensbasierten virtuellen Hosts
- aufgel&ouml;st werden. Falls eine Firewall oder ein anderer Proxy die
- Anfrage in Empfang nimmt und Sie zu einer weiteren IP-Adresse des Servers
- weiterleitet, m&uuml;ssen Sie die IP-Adresse der physikalischen
- Schnittstelle der Maschine angeben, welche die Anfragen bedient.
- Wenn Sie mehrere namensbasierte Hosts an verschiedenen Adressen
- betreiben, wiederholen Sie einfach die Anweisung f&uuml;r jede
- Adresse.</p>
-
- <note><title>Anmerkung</title>
- <p>Beachten Sie, dass der "Hauptserver" und jeder
- <code>_default_</code>-Server <strong>niemals</strong> bei einer
- Anfrage an einer <directive>NameVirtualHost</directive>-IP-Adresse
- bedient wird (es sei denn, Sie geben aus irgendwelchen Gr&uuml;nden
- <directive>NameVirtualHost</directive> an, definieren dann aber keine
- <directive>VirtualHost</directive>s f&uuml;r diese Adresse).</p>
- </note>
-
- <p>Optional k&ouml;nnen Sie die Nummer eines Ports angeben, an dem
- namensbasierte virtuelle Hosts verwendet werden sollen. Beispiel:</p>
-
- <example>
- NameVirtualHost 111.22.33.44:8080
- </example>
-
- <p>IPv6-Adressen m&uuml;ssen, wie im folgenden Beispiel angegeben, in
- eckige Klammern eingeschlossen werden:</p>
-
- <example>
- NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
- </example>
-
- <p>Um an allen Schnittstellen Anfragen zu empfangen, k&ouml;nnen Sie
- <code>*</code> als Argument verwenden.</p>
-
- <example>
- NameVirtualHost *
- </example>
-
- <note><title>Argument der Direktive <directive
- type="section">VirtualHost</directive></title>
- <p>Beachten Sie, dass das Argument der <directive
- type="section">VirtualHost</directive>-Anweisung exakt auf das Argument
- der <directive>NameVirtualHost</directive>-Anweisung passen muss.</p>
-
- <example>
- NameVirtualHost 1.2.3.4<br />
- &lt;VirtualHost 1.2.3.4&gt;<br />
- # ...<br />
- &lt;/VirtualHost&gt;<br />
- </example>
- </note>
-</usage>
-<seealso><a href="../vhosts/">Dokumentation zu virtuellen Hosts</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Options</name>
-<description>Definiert, welche Eigenschaften oder Funktionen in einem
-bestimmten Verzeichnis verf&uuml;gbar sind</description>
-<syntax>Options
- [+|-]<var>Option</var> [[+|-]<var>Option</var>] ...</syntax>
-<default>Options All</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-
-<usage>
- <p>Die Direktive <directive>Options</directive> steuert, welche
- Eigenschaften bzw. Funktionen in einem bestimmten Verzeichnis
- verf&uuml;gbar sind.</p>
-
- <p><var>Option</var> kann auf <code>None</code> gesetzt werden, wobei
- keine der besonderen Eigenschaften verf&uuml;gbar sind, oder auf eines
- oder mehrere der folgenden:</p>
-
- <dl>
- <dt><code>All</code></dt>
-
- <dd>Alle Optionen au&szlig;er <code>MultiViews</code>. Dies ist
- die Voreinstellung.</dd>
-
- <dt><code>ExecCGI</code></dt>
-
- <dd>Die Ausf&uuml;hrung von CGI-Skripten, welche <module>mod_cgi</module>
- verwenden, ist erlaubt.</dd>
-
- <dt><code>FollowSymLinks</code></dt>
-
- <dd>Der Server folgt symbolischen Links in diesem Verzeichnis.
- <note>
- <p>Auch wenn der Server symbolischen Links folgt, bedeutet dies
- <em>nicht</em>, dass der zum Abgleich gegen <directive type="section"
- module="core">Directory</directive>-Abschnitte verwendete Pfadname
- wechselt.</p>
- <p>Beachten Sie auch, dass diese Option innerhalb eines
- <directive type="section" module="core">Location</directive>-Abschnitts
- <strong>ignoriert wird</strong>.</p>
- </note></dd>
-
- <dt><code>Includes</code></dt>
-
- <dd>
- Server Side Includes, die von <module>mod_include</module> bereitgestellt
- werden, sind erlaubt.</dd>
-
- <dt><code>IncludesNOEXEC</code></dt>
-
- <dd>Server Side Includes sind erlaubt, <code>#exec cmd</code>
- und <code>#exec cgi</code> sind jedoch deaktiviert. Es ist aber noch
- m&ouml;glich, CGI-Skripte aus
- <directive module="mod_alias">ScriptAlias</directive>-Verzeichnissen mittels
- <code>#include virtual</code> einzubinden.</dd>
-
- <dt><code>Indexes</code></dt>
-
- <dd>Wenn eine URL, die auf ein Verzeichnis zeigt, in dem sich keine durch
- <directive module="mod_dir">DirectoryIndex</directive> definierte
- Indexdatei (<em>z.B.</em> <code>index.html</code>) befindet, dann liefert
- <module>mod_autoindex</module> eine formatierte Auflistung des
- Verzeichnisses zur&uuml;ck.</dd>
-
- <dt><code>MultiViews</code></dt>
-
- <dd>"MultiViews" sind bei der Verwendung von
- <module>mod_negotiation</module> erlaubt (siehe <a
- href="../content-negotiation.html">Content-Negotiation</a>).</dd>
-
- <dt><code>SymLinksIfOwnerMatch</code></dt>
-
- <dd>Der Server folgt nur symbolischen Links, bei denen die Zieldatei
- bzw. das Zielverzeichnis der gleichen Benutzerkennung geh&ouml;rt, wie
- der Link.
- <note><title>Anmerkung</title> Diese Option wird innerhalb eines
- <directive module="core" type="section">Location</directive>-Abschnitts
- ignoriert.</note></dd>
- </dl>
-
- <p>Wenn mehrere <directive>Options</directive> auf ein Verzeichnis
- angewandt werden k&ouml;nnen, dann wird normalerweise die
- spezifischste <transnote>Gemeint ist die zuletzt
- ausgef&uuml;hrte Option.</transnote> verwendet und alle anderen werden
- ignoriert; die Optionen werden nicht vermischt. (Siehe auch <a
- href="../sections.html#mergin">Wie Abschnitte zusammengef&uuml;hrt
- werden.</a>.) Wenn jedoch <em>allen</em> Optionen der
- <directive>Options</directive>-Anweisung eines der Zeichen
- <code>+</code> oder <code>-</code> vorangestellt wird, werden die Optionen
- zusammengemischt. Jede Option mit vorangestelltem <code>+</code> wird
- zu den momentan g&uuml;ltigen Optionen hinzugef&uuml;gt und jede Option
- mit vorangestelltem <code>-</code> wird aus den derzeit g&uuml;ltigen
- Optionen entfernt.</p>
-
- <p>So wird zum Beispiel ohne die Zeichen <code>+</code> und
- <code>-</code></p>
-
- <example>
- &lt;Directory /web/docs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <indent>
- Options Includes<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>f&uuml;r das Verzeichnis <code>/web/docs/spec</code> wird jetzt
- lediglich <code>Includes</code> gesetzt. Wenn die zweite
- <directive>Options</directive>-Anweisung jedoch <code>+</code>-
- und <code>-</code>-Zeichen verwenden w&uuml;rde,</p>
-
- <example>
- &lt;Directory /web/docs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <indent>
- Options +Includes -Indexes<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>dann w&uuml;rden die Optionen <code>FollowSymLinks</code> und
- <code>Includes</code> f&uuml;r das Verzeichnis <code>/web/docs/spec</code>
- gesetzt.</p>
-
- <note><title>Anmerkung</title>
- <p>Die Verwendung von <code>-IncludesNOEXEC</code> oder
- <code>-Includes</code> deaktiviert Server Side Includes unabh&auml;ngig
- von der vorigen Einstellung vollst&auml;ndig.</p>
- </note>
-
- <p>Die Voreinstellung ist <code>All</code>, sofern keine anderen Angaben
- gemacht wurden.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Require</name>
-<description>W&auml;hlt die authentisierten Benutzer aus, die auf eine
-Ressource zugreifen k&ouml;nnen</description>
-<syntax>Require <var>Name</var> [<var>Name</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Die Direktive w&auml;hlt aus, welche authentisierten Benutzer auf ein
- Verzeichnis zugreifen d&uuml;rfen. Folgende Syntax ist erlaubt:</p>
-
- <dl>
- <dt><code>Require user <var>User-ID</var> [<var>User-ID</var>]
- ...</code></dt>
- <dd>Nur die genannten Benutzer d&uuml;rfen auf die Ressource
- zugreifen.</dd>
-
- <dt><code>Require group <var>Gruppenname</var> [<var>Gruppenname</var>]
- ...</code></dt>
- <dd>Nur Benutzer der genannten Gruppen d&uuml;rfen auf die
- Ressource zugreifen.</dd>
-
- <dt><code>Require valid-user</code></dt>
- <dd>Alle g&uuml;ltigen Benutzer d&uuml;rfen auf die Ressource
- zugreifen.</dd>
- </dl>
-
- <p><directive>Require</directive> muss von den Direktiven
- <directive module="core">AuthName</directive> und <directive
- module="core">AuthType</directive> sowie Direktiven wie
- <directive module="mod_authn_file">AuthUserFile</directive>
- und <directive module="mod_authz_groupfile">AuthGroupFile</directive>
- (zur Definition von Benutzern und Gruppen) begleitet werden, um
- korrekt zu funktionieren. Beispiel:</p>
-
- <example>
- AuthType Basic<br />
- AuthName "gesch&uuml;tztes Verzeichnis"<br />
- AuthUserFile /web/users<br />
- AuthGroupFile /web/groups<br />
- Require group admin
- </example>
-
- <p>Zugriffskontrollen, die in dieser Form angewandt werden, gelten
- f&uuml;r <strong>alle</strong> Methoden. <strong>Dies ist normalerweise
- gew&uuml;nscht.</strong> Wenn Sie Zugriffskontrollen nur auf bestimmte
- Methoden anwenden m&ouml;chten, w&auml;hrend andere Methoden
- ungesch&uuml;tzt bleiben, dann m&uuml;ssen Sie die
- <directive>Require</directive>-Anweisung innerhalb eines
- <directive module="core" type="section">Limit</directive>-Abschnitts
- platzieren.</p>
-</usage>
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><module>mod_authz_host</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitCPU</name>
-<description>Begrenzt den CPU-Verbrauch von Prozessen, die von
-Apache-Kindprozessen gestartet wurden</description>
-<syntax>RLimitCPU <var>Sekunden</var>|max [<var>Sekunden</var>|max]</syntax>
-<default>unbestimmt; verwendet die Voreinstellung des Systems</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Akzeptiert einen oder zwei Parameter. Der erste Paramater setzt eine
- weiche Ressourcenbegrenzung f&uuml;r alle Prozesse, der zweite Parameter
- setzt die Maximalgrenze f&uuml;r die Ressourcennutzung. Jeder der
- Parameter kann eine Zahl oder <code>max</code> sein. <code>max</code>
- zeigt dem Server an, dass das vom Betriebssystem erlaubte Maximum
- verwendet werden soll. Das Anheben der maximal erlaubten Ressourcennutzung
- erfordert, dass der Server als <code>root</code> l&auml;uft, zumindest in
- der anf&auml;nglichen Startphase.</p>
-
- <p>Dies wird auf Prozesse angewendet, die von Anfragen bearbeitenden
- Apache-Kindprozessen abgespalten werden, nicht auf die
- Apache-Kindprozesse selbst. Das beinhaltet CGI-Skripte und
- SSI-exec-Befehle, nicht jedoch Prozesse, die vom Apache-Elternprozess
- abgespalten werden, wie z.B. Protokollierung.</p>
-
- <p>CPU-Ressourcenbegrenzung wird in Sekunden pro Prozess
- ausgedr&uuml;ckt.</p>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitMEM</name>
-<description>Begrenzt den Speicherverbrauch von Prozessen, die von
-Apache-Kindprozessen gestartet wurden</description>
-<syntax>RLimitMEM <var>Bytes</var>|max [<var>Bytes</var>|max]</syntax>
-<default>unbestimmt; verwendet die Voreinstellung des Systems</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Akzeptiert einen oder zwei Parameter. Der erste Paramater setzt eine
- weiche Ressourcenbegrenzung f&uuml;r alle Prozesse, der zweite Parameter
- setzt die Maximalgrenze f&uuml;r die Ressourcennutzung. Jeder der
- Parameter kann eine Zahl oder <code>max</code> sein. <code>max</code>
- zeigt dem Server an, dass das vom Betriebssystem erlaubte Maximum
- verwendet werden soll. Das Anheben der maximal erlaubten Ressourcennutzung
- erfordert, dass der Server als <code>root</code> l&auml;uft, zumindest in
- der anf&auml;nglichen Startphase.</p>
-
- <p>Dies wird auf Prozesse angewendet, die von Anfragen bearbeitenden
- Apache-Kindprozessen abgespalten werden, nicht auf die
- Apache-Kindprozesse selbst. Das beinhaltet CGI-Skripte und
- SSI-exec-Befehle, nicht jedoch Prozesse, die vom Apache-Elternprozess
- abgespalten werden, wie z.B. Protokollierung.</p>
-
- <p>Die Begrenzung des Speicherverbrauchs wird in Bytes pro Prozess
- ausgedr&uuml;ckt.</p>
-</usage>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitNPROC</name>
-<description>Begrenzt die Anzahl der Prozesse, die von Prozessen gestartet
-werden k&ouml;nnen, der ihrerseits von Apache-Kinprozessen gestartet
-wurden</description>
-<syntax>RLimitNPROC <var>Zahl</var>|max [<var>Zahl</var>|max]</syntax>
-<default>unbestimmt; verwendet die Voreinstellung des Systems</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>Akzeptiert einen oder zwei Parameter. Der erste Paramater setzt eine
- weiche Ressourcenbegrenzung f&uuml;r alle Prozesse, der zweite Parameter
- setzt die Maximalgrenze f&uuml;r die Ressourcennutzung. Jeder der
- Parameter kann eine Zahl oder <code>max</code> sein. <code>max</code>
- zeigt dem Server an, dass das vom Betriebssystem erlaubte Maximum
- verwendet werden soll. Das Anheben der maximal erlaubten Ressourcennutzung
- erfordert, dass der Server als <code>root</code> l&auml;uft, zumindest in
- der anf&auml;nglichen Startphase.</p>
-
- <p>Dies wird auf Prozesse angewendet, die von Anfragen bearbeitenden
- Apache-Kindprozessen abgespalten werden, nicht auf die
- Apache-Kindprozesse selbst. Dies beinhaltet CGI-Skripte und
- SSI-exec-Befehle, nicht jedoch Prozesse, die vom Apache-Elternprozess
- abgespalten werden, wie z.B. Protokollierung.</p>
-
- <p>Prozessbegrenzungen steuern die Anzahl der Prozesse pro Benutzer.</p>
-
- <note><title>Anmerkung</title>
- <p>Wenn CGI-Prozesse nicht unter anderen Benutzerkennungen als der
- User-ID des Webservers laufen, dann beschr&auml;nkt diese Direktive
- die Anzahl der Prozesse, die der Server selbst erstellen kann.
- Kennzeichen einer solchen Situation sind
- <strong><code>cannot fork</code></strong>-Meldungen
- <transnote><code>kann nicht abspalten</code></transnote> in der
- Datei <code>error_log</code>.</p>
- </note>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Satisfy</name>
-<description>Zusammenspiel von rechnerbasierter Zugriffskontrolle und
-Benutzerauthentisierung</description>
-<syntax>Satisfy Any|All</syntax>
-<default>Satisfy All</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Verfahrensweise f&uuml;r den Zugriff, falls sowohl <directive
- module="mod_authz_host">Allow</directive> als auch <directive
- module="core">Require</directive> verwendet werden. Der Parameter kann
- entweder <code>All</code> oder <code>Any</code> sein. Die Direktive ist
- nur dann n&uuml;tzlich, wenn der Zugriff zu einem bestimmten Bereich
- durch Benutzername/Passwort <em>und</em> Clientrechner-Adressen
- eingeschr&auml;nkt ist. In diesem Fall verlangt die Voreinstellung
- (<code>All</code>), dass der Client die Adressbeschr&auml;nkung passiert
- <em>und</em> eine g&uuml;ltige Benutzerkennung und ein g&uuml;ltiges
- Passwort &uuml;bermittelt. Mit der Auswahl <code>Any</code> wird dem
- Client der Zugriff erlaubt, wenn er entweder die Rechner-Besch&auml;nkung
- passiert oder einen g&uuml;ltigen Benutzernamen und ein g&uuml;ltiges
- Passwort &uuml;bermittelt. Dies kann verwendet werden, um einen Bereich
- mit einem Passwort zu sch&uuml;tzen, jedoch Clients von bestimmten
- Adressen ohne Abfrage des Passwortes zuzulassen.</p>
-
- <p>Wenn Sie beispielsweise m&ouml;chten, dass Personen aus Ihrem
- privaten Netzwerk unbech&auml;nkten Zugriff zu Teilen Ihres
- Webangebots haben, jedoch verlangen, dass Personen au&szlig;erhalb
- Ihres privaten Netzwerks ein Passwort &uuml;bergeben m&uuml;ssen,
- k&ouml;nnen Sie eine Konfiguration &auml;hnlich der folgenden
- verwenden:</p>
-
- <example>
- Require valid-user<br />
- Allow from 192.168.1<br />
- Satisfy Any
- </example>
-</usage>
- <seealso><directive module="mod_authz_host">Allow</directive></seealso>
- <seealso><directive module="core">Require</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptInterpreterSource</name>
-<description>Methode zur Ermittlung des Interpreters von
-CGI-Skripten</description>
-<syntax>ScriptInterpreterSource Registry|Registry-Strict|Script</syntax>
-<default>ScriptInterpreterSource Script</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>ausschlie&szlig;lich Win32;
-Die Option <code>Registry-Strict</code> ist verf&uuml;gbar seit Apache
-2.0.</compatibility>
-
-<usage>
- <p>Die Direktive steuert, wie der Apache den Interpreter zur Ausf&uuml;hrung
- von CGI-Skripten bestimmt. Die Voreinstellung ist <code>Script</code>. Dies
- veranla&szlig;t den Apache, den Interpreter zu verwenden, auf den die
- Shebang-Zeile (erste Zeile, beginnt mit <code>#!</code>) im Skript zeigt.
- Auf Win32-Systemen sieht diese Zeile &uuml;blicherweise so aus:</p>
-
- <example>
- #!C:/Perl/bin/perl.exe
- </example>
-
- <p>oder, wenn perl im Pfad (Umgebungsvariable <code>PATH</code>) liegt,
- einfach:</p>
-
- <example>
- #!perl
- </example>
-
- <p>Die Einstellung <code>ScriptInterpreterSource Registry</code>
- veranla&szlig;t eine Suche in <code>HKEY_CLASSES_ROOT</code> der
- Windows-Registrierungsdatenbank und verwendet die Endung der Skript-Datei
- (z.B. <code>.pl</code>) als Suchargument. Der durch den Unterschl&uuml;ssel
- <code>Shell\ExecCGI\Command</code> oder, falls dieser nicht existiert,
- <code>Shell\Open\Command</code> definierte Befehl wird zum &Ouml;ffnen der
- Skript-Datei verwendet. Wenn der Schl&uuml;ssel zur Dateiendung oder
- beide Unterschl&uuml;ssel fehlen, dann verwendet der Apache die Option
- <code>Script</code>.</p>
-
- <note type="warning"><title>Sicherheit</title>
- <p>Seien Sie vorsichtig, <code>ScriptInterpreterSource Registry</code> bei
- Verzeichnissen zu verwenden, auf die eine <directive
- module="mod_alias">ScriptAlias</directive>-Anweisung zeigt, denn der
- Apache versucht <strong>jede</strong> Datei innerhalb des Verzeichnisses
- auszuf&uuml;hren. Die Einstellung <code>Registry</code> kann
- unerw&uuml;nschte Programmaufrufe bei Dateien verursachen, die
- &uuml;blicherweise nicht ausgef&uuml;hrt werden. Auf den meisten
- Windows-Systemen beispielsweise startet der voreingestellte
- &Ouml;ffnen-Befehl f&uuml;r <code>.htm</code>-Dateien den Microsoft
- Internet Explorer, so dass jede HTTP-Anfrage nach einer existierenden
- <code>.htm</code>-Datei im Skript-Verzeichnis den Browser im Hintergrund
- starten w&uuml;rde. Dies ist eine wirksame Methode, Ihr System binnen
- etwa einer Minute zum Absturz zu bringen.</p>
- </note>
-
- <p>Die seit Apache 2.0 neue Option <code>Registry-Strict</code>
- macht das gleiche wie <code>Registry</code>, verwendet jedoch nur den
- Unterschl&uuml;ssel <code>Shell\ExecCGI\Command</code>. Der Schl&uuml;ssel
- <code>ExecCGI</code> ist gew&ouml;hnlich nicht voreingestellt. Er muss
- manuell eingerichtet werden und sch&uuml;tzt Ihr System so for
- versehentlichen Programmaufrufen.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAdmin</name>
-<description>E-Mail-Adresse, die der Server in Fehlermeldungen einf&uuml;gt,
-welche an den Client gesendet werden</description>
-<syntax>ServerAdmin <var>E-Mail-Adresse</var>|<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>ServerAdmin</directive> legt die Kontaktadresse fest,
- die der Server in jede Fehlermeldung einf&uuml;gt, die er an den
- Client zur&uuml;ckschickt. Wenn <code>httpd</code> das &uuml;bergebene
- Argument nicht als URL erkennt, nimmt er an, dess es sich um eine
- <var>E-Mail-Adresse</var> handelt und stellt in Hyperlinks
- <code>mailto:</code> voran. Es ist jedoch sogar sinnvoll, eine
- E-Mail-Adresse zu verwenden, da viele CGI-Skripte davon ausgehen. Wenn Sie
- eine URL verwenden m&ouml;chten, sollten Sie auf einem anderen unter Ihrer
- Kontrolle stehenden Server verweisen. Andernfalls k&ouml;nnen Besucher Sie
- im Fehlerfall m&ouml;glicherweise nicht kontaktieren.</p>
-
- <p>Es kann sich lohnen, hierf&uuml;r eine reservierte Adresse
- anzugeben, z.B.</p>
-
- <example>
- ServerAdmin www-admin@foo.example.com
- </example>
-
- <p>da Anwender nicht unbedingt erw&auml;hnen, dass sie vom Server
- sprechen!</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAlias</name>
-<description>Alternativer Name f&uuml;r einen Host, der verwendet wird, wenn
-Anfragen einem namensbasierten virtuellen Host zugeordnet werden</description>
-<syntax>ServerAlias <var>Hostname</var> [<var>Hostname</var>] ...</syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>ServerAlias</directive> bestimmt die
- alternativen Namen eines Hosts zur Verwendung mit <a
- href="../vhosts/name-based.html">namensbasierten virtuellen Hosts</a>.</p>
-
- <example>
- &lt;VirtualHost *&gt;<br />
- ServerName server.domain.com<br />
- ServerAlias server server2.domain.com server2<br />
- # ...<br />
- &lt;/VirtualHost&gt;
- </example>
-</usage>
-<seealso><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerName</name>
-<description>Rechnername und Port, die der Server dazu verwendet, sich
-selbst zu identifizieren</description>
-<syntax>ServerName
-<var>voll-qualifizierter-Domainname</var>[:<var>port</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Diese Direktive l&ouml;st in Version 2.0 die
- Funktionalit&auml;t der Direktive <directive>Port</directive> aus
- Version 1.3 ab.</compatibility>
-
-<usage>
- <p>Die Direktive <directive>ServerName</directive> bestimmt den
- Rechnernamen und Port, den der Server dazu verwendet, sich selbst
- zu identifizieren. Diese werden bei der Erstellung von Umleitungs-URLs
- ben&ouml;tigt. Wenn beispielsweise der Name der Maschine, die den Webserver
- beherbergt, <code>simple.example.com</code> lautet, die Maschine jedoch
- auch einen DNS-Alias <code>www.example.com</code> besitzt und Sie den
- Webserver so identifizieren m&ouml;chten, sollten Sie die folgende
- Anweisung verwenden:</p>
-
- <example>
- ServerName www.example.com:80
- </example>
-
- <p>Wenn kein <directive>ServerName</directive> angegeben wurde,
- dann versucht der Server den Rechnernamen mittels eines Reverse-Lookup
- herzuleiten. Wenn kein Port in der
- <directive>ServerName</directive>-Anweisung angegeben wurde, dann
- verwendet der Server den Port der eingegangenen Anfrage. F&uuml;r eine
- optimale Zuverl&auml;ssigkeit und Berechenbarkeit sollten Sie einen
- eindeutigen Rechnernamen und Port angeben, in dem Sie die Direktive
- <directive>ServerName</directive> verwenden.</p>
-
- <p>Wenn Sie <a href="../vhosts/name-based.html">namensbasierte
- virtuelle Hosts</a> verwenden, gibt <directive>ServerName</directive>
- innerhalb eines <directive type="section"
- module="core">VirtualHost</directive>-Abschnitts an, welcher
- Hostname im <code>Host:</code>-Header der Anfrage auftauchen muss,
- damit sie diesem virtuellen Host zugeordnet wird.</p>
-
- <p>Lesen Sie bitte die Beschreibung der Direktive <directive
- module="core">UseCanonicalName</directive> f&uuml;r Einstellungen, die
- bestimmen, ob selbstreferenzierende URLs (z.B. vom Modul
- <module>mod_dir</module>) auf den angegebenen Port zeigen oder auf die
- Portnummern die in der Anfrage des Clients angegeben ist.</p>
-</usage>
-
-<seealso><a href="../dns-caveats.html">Probleme bez&uuml;glich DNS und
-Apache</a></seealso>
-<seealso><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></seealso>
-<seealso><directive module="core">UseCanonicalName</directive></seealso>
-<seealso><directive module="core">NameVirtualHost</directive></seealso>
-<seealso><directive module="core">ServerAlias</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerPath</name>
-<description>Veralteter URL-Pfad f&uuml;r einen namensbasierten
-virtuellen Host, auf den von einem inkompatiblen Browser zugegriffen
-wird</description>
-<syntax>ServerPath <var>URL-Pfad</var></syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>ServerPath</directive> legt den
- veralteten <transnote>Gemeint ist eigentlich "Altlast" aufgrund
- antiquierter Clients.</transnote> URL-Pfad eines Hosts zur Verwendung mit
- <a href="../vhosts/">namensbasierten virtuellen Hosts</a> fest.</p>
-</usage>
-<seealso><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerRoot</name>
-<description>Basisverzeichnis der Serverinstallation</description>
-<syntax>ServerRoot <var>Verzeichnis</var></syntax>
-<default>ServerRoot /usr/local/apache</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>ServerRoot</directive> bestimmt das
- Verzeichnis, in dem der Server installiert ist. &Uuml;blicherweise
- enth&auml;lt es die Unterverzeichnisse <code>conf/</code> und
- <code>logs/</code>. Relative Pfadangaben f&uuml;r andere
- Konfigurationsdateien werden relativ zu diesem Verzeichnis betrachtet.</p>
-
- <example><title>Beispiel</title>
- ServerRoot /home/httpd
- </example>
-</usage>
-<seealso><a href="../invoking.html">Die <code>httpd</code>-Option
- <code>-d</code></a></seealso>
-<seealso><a href="../misc/security_tips.html#serverroot">Sicherheitshinweise</a>
- f&uuml;r Informationen, wie die Rechte auf das <directive
- >ServerRoot</directive>-Verzeichnis richtig gesetzt werden</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerSignature</name>
-<description>Konfiguriert die Fu&szlig;zeile von servergenerierten
-Dokumenten</description>
-<syntax>ServerSignature On|Off|EMail</syntax>
-<default>ServerSignature Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>Die Direktive <directive>ServerSignature</directive> erm&ouml;glicht
- die Gestaltung einer unter servergenerierten Dokumenten (z.B.
- Fehlerdokumente, FTP-Verzeichnislisten von <module>mod_proxy</module>,
- <module>mod_info</module>-Ausgaben, ...) angef&uuml;gten
- Fu&szlig;zeile. Ein m&ouml;glicher Grund f&uuml;r die Aktivierung einer
- solchen Fu&szlig;zeile ist, dass der Anwender bei einer Kette von
- Proxy-Servern oft keine M&ouml;glichkeit hat, zu erkennen, welcher der
- verketteten Server gegenw&auml;rtig die zur&uuml;ckgegebene Fehlermeldung
- produziert hat.</p>
-
- <p>Die (Vor-)Einstellung <code>Off</code> unterdr&uuml;ckt die
- Fu&szlig;zeile (und ist damit kompatibel zum Verhalten des Apache 1.2 und
- fr&uuml;her). Die Einstellung <code>On</code> f&uuml;gt schlicht eine
- Zeile mit der Versionsnummer des Servers und dem Servernamen (<directive
- module="core">ServerName</directive>) des bedienenden virtuellen Hosts an.
- Die Einstellung <code>EMail</code> erstellt zus&auml;tzlich einen
- "mailto:"-Verweis zum Serveradministrator (<directive
- module="core">ServerAdmin</directive>) des referenzierten Dokuments.</p>
-
- <p>Ab Version 2.0.44 werden die Details der angegebenen Versionsnummer des
- Servers von der Direktive <directive
- module="core">ServerTokens</directive> kontrolliert.</p>
-</usage>
-<seealso><directive module="core">ServerTokens</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerTokens</name>
-<description>Konfiguriert den HTTP-Response-Header
-<code>Server</code></description>
-<syntax>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</syntax>
-<default>ServerTokens Full</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>die Direktive steuert, ob der Response-Header <code>Server</code>,
- der an den Client zur&uuml;ckgesendet wird, eine Beschreibung des
- allgemeinen Betriesbsystemtyps des Servers wie auch Informationen
- &uuml;ber einkompilierte Module enth&auml;lt.</p>
-
- <dl>
- <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache</code></dd>
-
- <dt><code>ServerTokens Major</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache/2</code></dd>
-
- <dt><code>ServerTokens Minor</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache/2.0</code></dd>
-
- <dt><code>ServerTokens Min[imal]</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server:
- Apache/2.0.41</code></dd>
-
- <dt><code>ServerTokens OS</code></dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server: Apache/2.0.41
- (Unix)</code></dd>
-
- <dt><code>ServerTokens Full</code> (oder nicht angegeben)</dt>
-
- <dd>Der Server sendet (<em>z.B.</em>): <code>Server: Apache/2.0.41
- (Unix) PHP/4.2.2 MyMod/1.2</code></dd>
- </dl>
-
- <p>Diese Einstellung gilt f&uuml;r den gesamten Server und kann nicht
- auf Virtual-Host-Basis aktiviert oder deaktiviert werden.</p>
-
- <p>Ab Version 2.0.44 steuert diese Direktive auch die Informationen, die
- durch die Direktive <directive module="core">ServerSignature</directive>
- angeboten werden.</p>
-</usage>
-<seealso><directive module="core">ServerSignature</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetHandler</name>
-<description>Erzwingt die Verarbeitung aller passenden Dateien durch
-einen Handler</description>
-<syntax>SetHandler <var>Handlername</var>|None</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Seit Apache 2.0 im Core</compatibility>
-
-<usage>
- <p>Wenn die Direktive innerhalb einer <code>.htaccess</code>-Datei
- oder in einem <directive type="section"
- module="core">Directory</directive>- oder
- <directive type="section" module="core">Location</directive>-Abschnitt
- angegeben wird, erzwingt sie, dass alle entsprechenden Dateien von dem
- durch <var>Handlername</var> angegebenen <a
- href="../handler.html">Handler</a> analysiert werden. Wenn Sie
- beispielsweise ein Verzeichnis haben, dessen Dateien unabh&auml;ngig von
- der Endung g&auml;nzlich als Image-Maps interpretiert werden sollen,
- k&ouml;nnen Sie folgendes in eine <code>.htaccess</code>-Datei in
- dem Verzeichnis schreiben:</p>
-
- <example>
- SetHandler imap-file
- </example>
-
- <p>Noch ein Beispiel: wenn Sie den Server immer, wenn die URL
- <code>http://servername/status</code> aufgerufen wird, einen
- Statusbericht anzeigen lassen m&ouml;chten, dann k&ouml;nnen
- Sie folgendes in die <code>httpd.conf</code> schreiben:</p>
-
- <example>
- &lt;Location /status&gt;<br />
- <indent>
- SetHandler server-status<br />
- </indent>
- &lt;/Location&gt;
- </example>
- <p>Sie k&ouml;nnen eine zuvor definierte
- <directive>SetHandler</directive>-Anweisung aufheben, indem Sie den Wert
- <code>None</code> verwenden.</p>
-</usage>
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetInputFilter</name>
-<description>Bestimmt die Filter, die Client-Anfragen und POST-Eingaben
-verarbeiten</description>
-<syntax>SetInputFilter <var>Filter</var>[;<var>Filter</var>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Die Direktive <directive>SetInputFilter</directive> bestimmt den oder
- die Filter, die Client-Anfragen und POST-Eingaben verarbeiten, wenn
- sie vom Server empfangen werden. Diese gelten zus&auml;tzlich zu
- anderweitig definierten Filtern, einschlie&szlig;lich denen der Direktive
- <directive module="mod_mime">AddInputFilter</directive>.</p>
-
- <p>Wenn mehr als ein Filter angegeben wird, dann m&uuml;ssen diese
- durch Semikolon voneinander getrennt in der Reihenfolge angegeben werden,
- in der sie die Daten verarbeiten sollen.</p>
-</usage>
-<seealso><a href="../filter.html">Filter</a>-Dokumentation</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetOutputFilter</name>
-<description>Bestimmt die Filter, die Antworten des Servers verarbeiten</description>
-<syntax>SetOutputFilter <var>Filter</var>[;<var>Filter</var>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Die Direktive <directive>SetOutputFilter</directive> bestimmt
- die Filter, die Antworten des Servers verarbeiten, bevor sie an den
- Client gesendet werden. Diese gelten zus&auml;tzlich zu anderweitig
- definierten Filtern, einschlie&szlig;lich denen der Direktive
- <directive module="mod_mime">AddOutputFilter</directive>.</p>
-
- <p>Die folgende Konfiguration verarbeitet zum Beispiel alle Dateien
- im Verzeichnis <code>/www/data</code> als Server Side Includes.</p>
-
- <example>
- &lt;Directory /www/data/&gt;<br />
- <indent>
- SetOutputFilter INCLUDES<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>Wenn mehr als ein Filter angegeben wird, dann m&uuml;ssen diese
- durch Semikolon voneinander getrennt in der Reihenfolge angegeben werden,
- in der sie die Daten verarbeiten sollen.</p>
-</usage>
-<seealso><a href="../filter.html">Filter</a>-Dokumentation</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TimeOut</name>
-<description>Zeitspanne, die der Server auf verschiedene Ereignisse wartet,
-bevor er die Anfrage abbricht</description>
-<syntax>TimeOut <var>Sekunden</var></syntax>
-<default>TimeOut 300</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>TimeOut</directive> definiert derzeit die
- Zeitspanne, die der Apache auf drei Dinge wartet:</p>
-
- <ol>
- <li>Die gesamte Zeispanne, die ben&ouml;tigt wird, um eine GET-Anfrage
- zu empfangen.</li>
-
- <li>Die Zeitspanne zwischen dem Empfang von TCP-Paketen einer
- POST- oder PUT-Anfrage.</li>
-
- <li>Die Zeitspanne zwischen ACKs bei der &Uuml;bermittlung der
- TCP-Pakete der Antwort.</li>
- </ol>
-
- <p>Wir haben vor, diese Zeitspannen in Zukunft separat konfigurierbar zu
- machen. Vor Version 1.2 war der Zeitgeber auf 1200 voreingestellt, wurde
- dann aber auf 300 herabgesetzt, was immer noch weit mehr ist, als in den
- meisten Situationen ben&ouml;tigt wird. Die Voreinstellung wurde nicht
- weiter herabgesetzt, da gelegentlich noch Stellen im Code existieren
- k&ouml;nnen, wo der Zeitgeber nicht zur&uuml;ckgesetzt wird, wenn ein
- Paket verschickt wird.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UseCanonicalName</name>
-<description>Bestimmt, wie der Server seinen eigenen Namen und Port
-ermittelt</description>
-<syntax>UseCanonicalName On|Off|DNS</syntax>
-<default>UseCanonicalName On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>In vielen Situationen muss der Apache eine
- <em>selbstreferenzierende</em> URL -- d.h. eine URL, die auf den selben
- Server zur&uuml;ck verweist -- zusammenbauen. Bei <code>UseCanonicalName
- On</code> verwendet der Apache den Hostnamen und Port, der in der
- <directive module="core">ServerName</directive>-Anweisung angegeben ist,
- um den kanonischen Namen des Servers zu erstellen. Dieser Name wird in
- allen selbstreferenzierenden URLs sowie in CGI-Skripten f&uuml;r die
- Werte von <code>SERVER_NAME</code> und <code>SERVER_PORT</code>
- verwendet.</p>
-
- <p>Bei <code>UseCanonicalName Off</code> bildet der Apache
- selbstreferenzierende URLs, indem er den vom Client &uuml;bermittelten
- Hostnamen und Port verwendet, sofern diese vorhanden sind (andernfalls
- wird der kanonische Name, wie oben beschrieben, benutzt). Die Werte
- sind die gleichen, die zur Anwendung von <a
- href="../vhosts/name-based.html">namensbasierten virtuellen Hosts</a>
- verwendet werden, und sie sind mit den gleichen Clients verf&uuml;gbar
- <transnote>, die auch in der Lage sind, auf namensbasierte virtuelle Hosts
- zuzugreifen, d.h. einen <code>Host</code>-Header mitschicken</transnote>.
- Die CGI-Variablen <code>SERVER_NAME</code> und <code>SERVER_PORT</code>
- werden ebenfalls aus den vom Client angeboten Werten erstellt.</p>
-
- <p>Ein Intranet-Server, auf den Anwender mit kurzen Namen wie
- <code>www</code> zugreifen, ist ein Beispiel, wo dies sinnvoll sein kann.
- Sie werden bemerken, dass der Apache den Benutzer auf
- <code>http://www.domain.com/splat/</code> umleitet, wenn dieser einen
- Kurznamen und eine URL, die einem Verzeichnis entspricht, ohne
- abschlie&szlig;enden Schr&auml;gstrich eingibt, wie z.B.
- <code>http://www/splat</code>. Wenn Sie Authentisierung aktiviert haben,
- bewirkt dies, dass der Benutzer sich zweimal identifizieren muss
- (einmal f&uuml;r <code>www</code> und noch einmal f&uuml;r
- <code>www.domain.com</code> -- lesen Sie f&uuml;r weitere Informationen <a
- href="http://httpd.apache.org/docs/misc/FAQ.html#prompted-twice">die
- FAQ zu diesem Thema</a>). Wenn <directive>UseCanonicalName</directive>
- jedoch auf <code>Off</code> gesetzt ist, denn wird der Apache zu
- <code>http://www/splat/</code> umleiten.</p>
-
- <p>Es existiert noch eine dritte Option, <code>UseCanonicalName DNS</code>,
- die f&uuml;r den Betrieb von IP-basierten Massen-Virtual-Hosts gedacht ist,
- um antiquierte Clients zu unterst&uuml;tzen, die keinen
- <code>Host:</code>-Header bereit stellen. Um selbstreferenzierende
- URLs zu ermitteln, f&uuml;hrt der Apache bei dieser Option ein
- Reverse-DNS-Lookup auf die IP-Adresse des Servers aus, zu der der Client
- Verbindung aufgenommen hat.</p>
-
- <note type="warning"><title>Warnung</title>
- <p>Wenn CGI-Skripte Vermutungen aufgrund des Wertes von
- <code>SERVER_NAME</code> anstellen, k&ouml;nnen sie durch diese
- Option fehlschlagen. Clients steht es im Wesentlichen frei, einen Wert
- f&uuml;r den Hostnamen anzugeben, wie er will. Wenn das
- CGI-Skript <code>SERVER_NAME</code> jedoch lediglich dazu verwendet,
- selbstreferenzierende URLs zu erstellen, sollte das gerade noch
- in Ordnung sein.</p>
- </note>
-</usage>
-<seealso><directive module="core">ServerName</directive></seealso>
-<seealso><directive module="mpm_common">Listen</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>VirtualHost</name>
-<description>Enth&auml;lt Direktiven, die nur auf bestimmte Hostnamen oder
-IP-Adressen angewendet werden</description>
-<syntax>&lt;VirtualHost
- <var>Adresse</var>[:<var>Port</var>] [<var>Adresse</var>[:<var>Port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive type="section">VirtualHost</directive> und
- <code>&lt;/VirtualHost&gt;</code> werden dazu verwendet, eine Gruppe
- von Direktiven zusammenzufassen, die nur auf einen bestimmten virtuellen
- Host angewendet werden. Jede Direktive, die im Virtual-Host-Kontext
- zul&auml;ssig ist, kann verwendet werden. Wenn der Server eine Anfrage
- f&uuml;r ein bestimmtes Dokument eines bestimmten virtuellen Hosts
- empf&auml;ngt, dann benutzt er die im
- <directive type="section">VirtualHost</directive>-Container enthaltenen
- Konfigurationsanweisungen. <var>Adresse</var> kann sein:</p>
-
- <ul>
- <li>Die IP-Adresse des virtuellen Hosts.</li>
-
- <li>Ein voll qualifizierter Domainname f&uuml;r die IP-Adresse des
- virtuellen Hosts.</li>
-
- <li>Das Zeichen <code>*</code>, welches nur in Kombination mit
- <code>NameVirtualHost *</code> verwendet wird, um allen IP-Adressen
- zu entsprechen.</li>
-
- <li>Die Zeichenkette <code>_default_</code>, die nur mit IP-basierten
- virtuellen Hosts verwendet wird, um nicht zugewiesene IP-Adressen
- aufzufangen.</li>
- </ul>
-
- <example><title>Beispiel</title>
- &lt;VirtualHost 10.1.2.3&gt;<br />
- <indent>
- ServerAdmin webmaster@host.foo.com<br />
- DocumentRoot /www/docs/host.foo.com<br />
- ServerName host.foo.com<br />
- ErrorLog logs/host.foo.com-error_log<br />
- TransferLog logs/host.foo.com-access_log<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>IPv6-Adressen m&uuml;ssen in eckigen Klammern angegeben werden, da die
- optionale Portnummer sonst nicht erkannt werden kann. Hier ein
- IPv6-Beispiel:</p>
-
- <example>
- &lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
- <indent>
- ServerAdmin webmaster@host.example.com<br />
- DocumentRoot /www/docs/host.example.com<br />
- ServerName host.example.com<br />
- ErrorLog logs/host.example.com-error_log<br />
- TransferLog logs/host.example.com-access_log<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Jeder virtuelle Host muss einer anderen IP-Adresse, einem anderen Port
- oder einem anderen Hostnamen f&uuml;r den Server entsprechen. Im ersten
- Fall muss die Servermaschine so eingerichtet sein, dass sie IP-Pakete
- f&uuml;r mehrere Adressen akzeptiert. (Wenn der Rechner nicht mehrere
- Netzwerkkarten besitzt, kann dies mit dem Befehl <code>ifconfig
- alias</code> durchgef&uuml;hrt werden -- sofern Ihr Betriebssystem das
- unterst&uuml;tzt).</p>
-
- <note><title>Anmerkung</title>
- <p>Die Verwendung von <directive type="section">VirtualHost</directive>
- beeinflusst <strong>nicht</strong>, an welchen Adressen der Apache
- lauscht. Sie m&uuml;ssen mit <directive
- module="mpm_common">Listen</directive> sicherstellen, dass der Apache
- an der richtigen Adresse lauscht.</p>
- </note>
-
- <p>Bei der Verwendung IP-basierter virtuellen Hosts kann der spezielle
- Name <code>_default_</code> benutzt werden. In diesem Fall weist
- der Apache jede IP-Adresse diesem virtuellen Host zu, die nicht explizit in
- einem anderen virtuellen Host angegeben ist. Falls kein virtueller Host
- <code>_default_</code> angegeben ist, wird die "Hauptserver"-Konfiguration,
- die aus allen Definitionen au&szlig;erhalb der Virtual-Host-Abschnitte
- besteht, f&uuml;r nicht passende IPs verwendet. (Beachten Sie jedoch,
- dass eine IP-Adressen die zu einer <directive
- module="core">NameVirtualHost</directive>-Anweisung passt, weder den
- "Hauptserver" noch den virtuellen Host <code>_default_</code> verwendet.
- Lesen Sie f&uuml;r weitere Details die Dokumentation zu <a
- href="../vhosts/name-based.html">namensbasierten virtuell Hosts</a>.)</p>
-
- <p>Sie k&ouml;nnen einen speziellen <code>:Port</code> angeben,
- um den entsprechenden Port zu wechseln. Falls nicht angegeben, wird
- er auf den gleichen Port voreingestellt, wie die letzte
- <directive module="mpm_common">Listen</directive>-Anweisung des
- Hauptservers. Sie k&ouml;nnen auch <code>:*</code> angeben, um alle
- Ports dieser Adresse zu akzeptieren. (Dies wird zusammen mit
- <code>_default_</code> empfohlen.)</p>
-
- <note type="warning"><title>Sicherheit</title>
- <p>Lesen Sie das Dokument <a
- href="../misc/security_tips.html">Sicherheitshinweise</a> f&uuml;r
- Details, warum Ihre Sicherheit gef&auml;hrdet sein kann, wenn das
- Verzeichnis, in dem Protokolldateien gespeichert werden, f&uuml;r
- jemanden anderes als den Benutzer beschreibbar ist, der den Server
- gestartet hat.</p>
- </note>
-</usage>
-<seealso><a href="../vhosts/">Apache-Dokumentation zu virtuellen
- Hosts</a></seealso>
-<seealso><a href="../dns-caveats.html">Probleme bez&uuml;glich DNS und
- Apache</a></seealso>
-<seealso><a href="../bind.html">Bestimmen, welche Adressen und Ports
- der Apache verwendet</a></seealso>
-<seealso><a href="../sections.html">Wie die Abschnitte &lt;Directory&gt;,
- &lt;Location&gt; und &lt;Files&gt; arbeiten</a> f&uuml;r eine
- Erl&auml;uterung, wie diese verschiedenen Abschnitte miteinander
- kombiniert werden, wenn eine Anfrage empfangen wird</seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/core.xml.ja b/docs/manual/mod/core.xml.ja
deleted file mode 100644
index 9a888a620e..0000000000
--- a/docs/manual/mod/core.xml.ja
+++ /dev/null
@@ -1,3099 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.89 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="core.xml.meta">
-
-<name>core</name>
-<description>$B>o$K;HMQ2DG=$J(B Apache HTTP $B%5!<%P$N%3%"5!G=(B</description>
-<status>Core</status>
-
-<directivesynopsis>
-<name>AcceptPathInfo</name>
-<description>$B8e$KB3$/%Q%9L>>pJs$r<u$1IU$1$k%j%=!<%9$N;XDj(B</description>
-<syntax>AcceptPathInfo On|Off|Default</syntax>
-<default>AcceptPathInfo Default</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 2.0.30 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O<B:]$N%U%!%$%kL>(B ($B$b$7$/$OB8:_$9$k%G%#%l%/%H%j$N(B
- $BB8:_$7$J$$%U%!%$%k(B) $B$N8e$KB3$/%Q%9L>>pJs$,$"$k%j%/%(%9%H$r<u$1IU$1$k$+(B
- $B5qH]$9$k$+$r@)8f$7$^$9!#B3$-$N%Q%9L>>pJs$O%9%/%j%W%H$K$O(B <code>PATH_INFO</code>
- $B4D6-JQ?t$H$7$FMxMQ2DG=$K$J$j$^$9!#(B</p>
-
- <p>$BNc$($P!"(B<code>/test/</code> $B$,!"(B<code>here.html</code> $B$H$$$&%U%!%$%k(B
- $B0l$D$N$_$,$"$k%G%#%l%/%H%j$r;X$7$F$$$k$H$7$^$9!#$=$&$9$k$H!"(B
- <code>/test/here.html/more</code> $B$H(B <code>/test/nothere.html/more</code>
- $B$X$N%j%/%(%9%H$ON>J}$H$b(B <code>/more</code> $B$r(B <code>PATH_INFO</code> $B$H$7$^$9!#(B</p>
-
- <p><directive>AcceptPathInfo</directive> $B%G%#%l%/%F%#%V$K;XDj2DG=$J(B
- $B;0$D$N0z?t$O(B:</p>
-
- <dl>
- <dt><code>Off</code></dt><dd>$B%j%/%(%9%H$OB8:_$9$k%Q%9$K$=$N$^$^(B
- $B%^%C%W$5$l$k>l9g$K$N$_<u$1IU$1$i$l$^$9!#$G$9$+$i!">e$NNc$N(B
- <code>/test/here.html/more</code> $B$N$h$&$K!"K\Ev$N%U%!%$%kL>$N(B
- $B8e$K%Q%9L>>pJs$,B3$/%j%/%(%9%H$K$O(B 404 NOT FOUND $B%(%i!<$,JV$j$^$9!#(B</dd>
-
- <dt><code>On</code></dt><dd>$BA0$NJ}$N%Q%9$,B8:_$9$k%U%!%$%k$K%^%C%W$9$k>l9g$O(B
- $B%j%/%(%9%H$,<u$1IU$1$i$l$^$9!#>e$NNc$N(B <code>/test/here.html/more</code>
- $B$O(B <code>/test/here.html</code> $B$,M-8z$J%U%!%$%k$K%^%C%W$9$l$P(B
- $B<u$1IU$1$i$l$^$9!#(B</dd>
-
- <dt><code>Default</code></dt><dd>$BB3$-$N%Q%9L>>pJs$N07$$$O%j%/%(%9%H$N(B
- <a href="../handler.html">$B%O%s%I%i(B</a>$B$G7h$^$j$^$9!#(B
- $BIaDL$N%U%!%$%k$N$?$a$N%3%"%O%s%I%i$N%G%U%)%k%H$O(B <code>PATH_INFO</code> $B$r5qH]$7$^$9!#(B
- <a href="mod_cgi.html">cgi-script</a> $B$d(B <a
- href="mod_isapi.html">isapi-isa</a> $B$N$h$&$K%9%/%j%W%H$r07$&%O%s%I%i$O(B
- $B0lHLE*$K%G%U%)%k%H$G(B <code>PATH_INFO</code> $B$r<u$1IU$1$^$9!#(B</dd>
- </dl>
-
- <p><code>AcceptPathInfo</code> $B$N<g$JL\E*$O%O%s%I%i$N(B <code>PATH_INFO</code> $B$r(B
- $B<u$1IU$1$k$+5qH]$9$k$+$NA*Br$r>e=q$-$G$-$k$h$&$K$9$k$3$H$G$9!#(B
- $BNc$($P!"$3$l$ONc$($P(B <a href="mod_include.html">INCLUDES</a> $B$N$h$&$J(B
- <a href="../filter.html">$B%U%#%k%?(B</a>$B$r;H$C$F(B <code>PATH_INFO</code> $B$K(B
- $B4p$E$$$F%3%s%F%s%D$r@8@.$7$F$$$k$H$-$KI,MW$K$J$j$^$9!#(B</p>
-
- <example>
- &lt;Files "mypaths.shtml"&gt;<br />
- <indent>
- Options +Includes<br />
- SetOutputFilter INCLUDES<br />
- AcceptPathInfo On<br />
- </indent>
- &lt;/Files&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AccessFileName</name>
-<description>$BJ,;6@_Dj%U%!%$%k$NL>A0(B</description>
-<syntax>AccessFileName <var>filename</var> [<var>filename</var>] ...</syntax>
-<default>AccessFileName .htaccess</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B%j%/%(%9%H$r=hM}$9$k$H$-!"%5!<%P$O%G%#%l%/%H%j$K(B
- $BBP$7$FJ,;6@_Dj%U%!%$%k$,(B<a href="#allowoverride">$BM-8z$K$J$C$F$$$l$P(B</a>$B!"(B
- $B$=$N%I%-%e%a%s%H$X$N(B
- $B%Q%9>e$K$"$kA4$F$N%G%#%l%/%H%j$+$i!"$3$3$G;XDj$5$l$?L>A0$N0lMw$NCf$G(B
- $B:G=i$K8+$D$+$C$?%U%!%$%k$r$=$l$>$l@_Dj%U%!%$%k$H$7$FFI$_9~$_$^$9!#Nc$($P(B:</p>
-
- <example>
- AccessFileName .acl
- </example>
-
- <p>$B$H$$$&@_Dj$,$"$k$H!"0J2<$N$h$&$K$7$FL58z$K$5$l$F$$$J$$8B$j!"(B
- $B%I%-%e%a%s%H(B <code>/usr/local/web/index.html</code>
- $B$rJV$9A0$K!"%5!<%P$O(B <code>/.acl</code>, <code>/usr/.acl</code>,
- <code>/usr/local/.acl</code>, <code>/usr/local/web/.acl</code> $B$+$i(B
- $B%G%#%l%/%F%#%V$rFI$_9~$_$^$9!#(B</p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride None<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-<seealso><directive module="core">AllowOverride</directive></seealso>
-<seealso><a href="../configuring.html">$B@_Dj%U%!%$%k(B</a></seealso>
-<seealso><a href="../howto/htaccess.html">.htaccess $B%U%!%$%k(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDefaultCharset</name>
-<description>$BL@<(E*$KJ8;z%;%C%H$r;XDj$7$F$$$J$$1~Ez$KDI2C$5$l$k(B
-$B%G%U%)%k%H$NJ8;z%;%C%H(B</description>
-<syntax>AddDefaultCharset On|Off|<var>charset</var></syntax>
-<default>AddDefaultCharset Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(BHTTP $B%X%C%@$K%3%s%F%s%H%?%$%W%Q%i%a!<%?$r(B
- $B;}$?$J$$1~Ez$KDI2C$5$l$kJ8;z%;%C%H$NL>A0$r;XDj$7$^$9!#(B
- $B$3$l$O!"%I%-%e%a%s%HFb$N(B META $B%?%0$G;XDj$5$l$?$I$N$h$&$JJ8;z%;%C%H(B
- $B$bL58z$K$7$^$9!#(B
- <code>AddDefaultCharset Off</code> $B$H$$$&@_Dj$K$h$j!"$3$N5!G=$OL58z$K$J$j$^$9!#(B
- <code>AddDefaultCharset On</code> $B$K$9$l$P!"%G%#%l%/%F%#%V$NMW5aDL$j(B
- Apache $BFbIt$N%G%U%)%k%HJ8;z%;%C%H(B <code>iso-8859-1</code> $B$K@_Dj$7$^$9!#(B
- $B$^$?!"B>$N(B <var>charset</var> $B$b;XDj$G$-$^$9!#Nc$($P(B:</p>
-
- <example>
- AddDefaultCharset utf-8
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddOutputFilterByType</name>
-<description>MIME-type $B$K=PNO%U%#%k%?$r3d$jEv$F$k(B</description>
-<syntax>AddOutputFilterByType <var>filter</var>[;<var>filter</var>...] <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 2.0.33 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O1~Ez$N(B MIME-type $B$K1~$8$F=PNO(B<a
- href="../filter.html">$B%U%#%k%?(B</a>$B$r;HMQ$9$k$h$&$K$7$^$9!#(B</p>
-
- <p>$B<!$NNc$O(B <module>mod_deflate</module> $B$N(B <code>DEFLATE</code> $B%U%#%k%?$r(B
- $B;H$C$F$$$^$9!#(B<code>text/html</code> $B$H(B <code>text/plain</code> $B$N(B
- $B$9$Y$F$N=PNO(B ($B@EE*$J$b$N$bF0E*$J$b$N$b(B) $B$r%/%i%$%"%s%H$KAw$i$l$kA0$K(B
- $B05=L$7$^$9!#(B</p>
-
- <example>
- AddOutputFilterByType DEFLATE text/html text/plain
- </example>
-
- <p>$BJ#?t$N%U%#%k%?$G%3%s%F%s%D$r=hM}$5$;$?$$$H$-$O!"$=$l$>$l$NL>A0$r%;%_%3%m%s$G(B
- $BJ,$1$kI,MW$,$"$j$^$9!#3F%U%#%k%?$KBP$7$F(B
- <directive>AddOutputFilterByType</directive> $B$r0l$D$:$D=q$/$3$H$b$G$-$^$9!#(B</p>
-
- <p>$B<!$NNc$O(B <code>text/html</code> $B$N%9%/%j%W%H$N$9$Y$F$N=PNO$r(B
- $B$^$:(B <code>INCLUDES</code> $B%U%#%k%?$G=hM}$7!"$5$i$K(B <code>DEFLATE</code> $B%U%#%k%?$K$+$1$^$9!#(B</p>
-
- <example>
- &lt;Location /cgi-bin/&gt;<br />
- <indent>
- Options Includes<br />
- AddOutputFilterByType INCLUDES;DEFLATE text/html<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note type="warning"><title>$BCm(B:</title>
- <p><directive>AddOutputFilterByType</directive> $B%G%#%l%/%F%#%V$K$h$j(B
- $BM-8z$K$7$?%U%#%k%?$O>l9g$K$h$C$F$O!"ItJ,E*$b$7$/$O40A4$KE,MQ$5$l$J$$$3$H$,(B
- $B$"$j$^$9!#Nc$($P!"(BMIME $B%?%$%W$,$,7hDj$G$-$J$$$H$-$K$O(B
- <directive module="core">DefaultType</directive> $B$N@_Dj$,F1$8$@$C$?$H$7$F$b!"(B
- <directive module="core">DefaultType</directive> $B@_Dj$r;H$&$h$&$K$J$j$^$9!#(B</p>
- <p>$B$7$+$7!"3N<B$K%U%#%k%?$,E,MQ$5$l$k$h$&$K$7$?$$$H$-$O!"%j%=!<%9$K(B
- $BL@<(E*$K%3%s%F%s%H%?%$%W$r3d$jEv$F$k$3$H$,$G$-$^$9!#$3$l$K$ONc$($P(B
- <directive module="mod_mime">AddType</directive> $B%G%#%l%/%F%#%V$d(B
- <directive module="core">ForceType</directive> $B%G%#%l%/%F%#%V$r;H$$$^$9!#(B
- (nph$B$G$J$$(B) CGI $B%9%/%j%W%H$G%3%s%F%s%H%?%$%W$r@_Dj$9$k$H$$$&$b$N$G$b(B
- $BBg>fIW$G$9!#(B</p>
-
- <p>$B%?%$%WKh$N=PNO%U%#%k%?$O%W%m%-%7%j%/%(%9%H$K$O7h$7$FE,MQ$5$l$^$;$s!#(B</p>
- </note>
-</usage>
-
-<seealso><directive module="mod_mime">AddOutputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-<seealso><a href="../filter.html">$B%U%#%k%?(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AllowEncodedSlashes</name>
-<description>URL $BCf$NId9f2=$5$l$?%Q%9J,N%J8;z$,@h$KEA$($i$l$k$N$r5v2D$9$k$+$I$&$+$r(B
-$B7hDj$9$k(B</description>
-<syntax>AllowEncodedSlashes On|Off</syntax>
-<default>AllowEncodedSlashes Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Apache 2.0.46 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>AllowEncodedSlashes</directive> $B%G%#%l%/%F%#%V$OId9f2=$5$l$?(B
- $B%Q%9J,N%J8;z(B (<code>/</code> $B$O(B <code>%2F</code>$B!"$5$i$K%7%9%F%`$K$h$C$F$O(B
- <code>\</code> $B$KBP1~$9$k(B <code>%5C</code>) $B$,B8:_$9$k(B URL $B$N;HMQ$r(B
- $B5v2D$9$k$+$I$&$+$r7hDj$7$^$9!#DL>o$O$=$N$h$&$J(B URL $B$O(B 404 (Not found) $B%(%i!<(B
- $B$G5qH]$5$l$^$9!#(B</p>
-
- <p><directive>AllowEncodedSlashes</directive> <code>On</code> $B$K$h$k(B
- $B%Q%9J,N%J8;z$N;HMQ$O!"(B<code>PATH_INFO</code> $B$H9g$o$;$F(B
- $B;H$&$H$-$K0lHVLr$KN)$A$^$9!#(B</p>
- <p>Turning <directive>AllowEncodedSlashes</directive> <code>On</code> is
- mostly useful when used in conjunction with <code>PATH_INFO</code>.</p>
-
- <note><title>$BCm(B</title>
- <p>$BId9f2=$5$l$?%9%i%C%7%e$r5v2D$9$k$3$H$O!"(B<em>$BI|9f(B</em>$B$r$9$k$3$H$r(B
- $B0UL#(B<em>$B$7$^$;$s(B</em>$B!#(B<code>%2F</code> $B$d(B ($B4X78$9$k%7%9%F%`$G$N(B)
- <code>%5C</code> $B$O!"B>$NItJ,$,I|9f$5$l$?(B URL $B$NCf$G$b$=$N$^$^$N7A<0$G(B
- $B;D$5$l$^$9!#(B</p>
- </note>
-</usage>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>AllowOverride</name>
-<description><code>.htaccess</code> $B$G5v2D$5$l$k%G%#%l%/%F%#%V$N<oN`(B</description>
-<syntax>AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</syntax>
-<default>AllowOverride All</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>$B%5!<%P$,(B (<directive
- module="core">AccessFileName</directive> $B$K$h$C$F;XDj$5$l$?(B)
- .htaccess $B%U%!%$%k$r8+$D$1$?;~!"$=$N%U%!%$%k$NCf$G(B
- $B@k8@$5$l$?$I$N%G%#%l%/%F%#%V$,$h$jA0$KDj5A$5$l$?@_Dj%G%#%l%/%F%#%V$r(B
- $B>e=q$-$G$-$k$+$rCN$kI,MW$,$"$j$^$9!#(B</p>
-
- <note><title>&lt;Directory&gt; $B%;%/%7%g%s$G$N$_;HMQ2DG=(B</title>
- <directive>AllowOverride</directive> $B$O@55,I=8=L5$7$N(B<directive
- type="section" module="core">Directory</directive>
- $B%;%/%7%g%s$G$N$_M-8z$G!"(B<directive type="section"
- module="core">Location</directive> $B$d(B <directive
- module="core" type="section">DirectoryMatch</directive>
- $B$d(B <directive type="section"
- module="core">Files</directive> $B%;%/%7%g%s$G$OL58z$G$9!#(B
- </note>
-
- <p>$B$3$N%G%#%l%/%F%#%V$r(B None $B$K@_Dj$9$k$H!"(B<a href="#accessfilename">.htaccess</a> $B%U%!%$%k$O40A4$K(B
- $BL5;k$5$l$^$9!#(B
- $B$3$N>l9g!"%5!<%P$O%U%!%$%k%7%9%F%`$N(B <code>.htaccess</code> $B%U%!%$%k$rFI$`$3$H$r(B
- $B;n$_$5$($7$^$;$s!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$,(B <code>All</code> $B$K@_Dj$5$l$F$$$k;~$K$O!"(B
- <code>.htaccess</code> $B$H$$$&(B <a
- href="directive-dict.html#Context">$B%3%s%F%-%9%H(B</a> $B$r;}$D(B
- $BA4$F$N%G%#%l%/%F%#%V$,MxMQ$G$-$^$9!#(B</p>
-
- <p><var>directive-type</var> $B$K$O!"0J2<$N%G%#%l%/%F%#%V72$N(B
- $B%-!<%o!<%I$N$I$l$+$r;XDj$7$^$9!#(B</p>
-
- <dl>
- <dt>AuthConfig</dt>
-
- <dd>
-
- $BG'>Z$K4X$9$k%G%#%l%/%F%#%V$N;HMQ$r5v2D$9$k(B (<directive
- module="mod_authn_dbm">AuthDBMGroupFile</directive>,
- <directive module="mod_authn_dbm">AuthDBMUserFile</directive>,
- <directive module="mod_authz_groupfile">AuthGroupFile</directive>,
- <directive module="core">AuthName</directive>,
- <directive module="core">AuthType</directive>, <directive
- module="mod_authn_file">AuthUserFile</directive>, <directive
- module="core">Require</directive> <em>$B$J$I!#(B</em>)$B!#(B</dd>
-
- <dt>FileInfo</dt>
-
- <dd>
- $B%I%-%e%a%s%H%?%$%W$r@)8f$9$k$?$a$N%G%#%l%/%F%#%V$N;HMQ$r5v2D$9$k(B (<directive
- module="core">DefaultType</directive>, <directive
- module="core">ErrorDocument</directive>, <directive
- module="core">ForceType</directive>, <directive
- module="mod_negotiation">LanguagePriority</directive>,
- <directive module="core">SetHandler</directive>, <directive
- module="core">SetInputFilter</directive>, <directive
- module="core">SetOutputFilter</directive>,
- <module>mod_mime</module> $B$N(B Add* $B$H(B Remove*
- $B%G%#%l%/%F%#%V(B<em>$B$J$I!#(B</em>)$B!#(B</dd>
-
- <dt>Indexes</dt>
-
- <dd>
- $B%G%#%l%/%H%j%$%s%G%C%/%9$r@)8f$9$k$?$a$N%G%#%l%/%F%#%V$N;HMQ$r5v2D$9$k(B
- (<directive
- module="mod_autoindex">AddDescription</directive>,
- <directive module="mod_autoindex">AddIcon</directive>, <directive
- module="mod_autoindex">AddIconByEncoding</directive>,
- <directive module="mod_autoindex">AddIconByType</directive>,
- <directive module="mod_autoindex">DefaultIcon</directive>, <directive
- module="mod_dir">DirectoryIndex</directive>, <directive
- module="mod_autoindex">FancyIndexing</directive>, <directive
- module="mod_autoindex">HeaderName</directive>, <directive
- module="mod_autoindex">IndexIgnore</directive>, <directive
- module="mod_autoindex">IndexOptions</directive>, <directive
- module="mod_autoindex">ReadmeName</directive>
- <em>$B$J$I!#(B</em>)$B!#(B</dd>
-
- <dt>Limit</dt>
-
- <dd>
- $B%[%9%H$X$N%"%/%;%9@)8f$r9T$&$?$a$N%G%#%l%/%F%#%V$N;HMQ$r5v2D$9$k(B (<directive
- module="mod_authz_host">Allow</directive>, <directive
- module="mod_authz_host">Deny</directive>, <directive
- module="mod_authz_host">Order</directive>).</dd>
-
- <dt>Options[=<var>Option</var>,...]</dt>
-
- <dd>
- $BFCDj$N%G%#%l%/%H%j$K$*$1$k5!G=$r;XDj$9$k$?$a$N%G%#%l%/%F%#%V$N;HMQ$r5v2D$9$k(B
- (<directive module="core">Options</directive> $B$H(B
- <directive module="mod_include">XBitHack</directive>)$B!#(B
- $BEy9f$N8e$K!"%3%s%^$GJ,3d$5$l$?(B($B6uGr$NF~$C$F$$$J$$(B)$B%*%W%7%g%s$N%j%9%H$r(B
- $BB3$1$k$3$H$G%*%W%7%g%s$r@_Dj$9$k$3$H$,$G$-$^$9!#(B</dd>
- </dl>
-
- <p>$BNc(B:</p>
-
- <example>
- AllowOverride AuthConfig Indexes
- </example>
-
- <p>$B>e$NNc$G$O(B <code>AuthConfig</code> $B$H(B <code>Indexes</code> $B$N$I$A$i$K$b(B
- $BB0$5$J$$%G%#%l%/%F%#%V$O$9$Y$FFbIt%5!<%P%(%i!<$r0z$-5/$3$7$^$9!#(B</p>
-</usage>
-
-<seealso><directive module="core">AccessFileName</directive></seealso>
-<seealso><a href="../configuring.html">$B@_Dj%U%!%$%k(B</a></seealso>
-<seealso><a href="../howto/htaccess.html">.htaccess $B%U%!%$%k(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthName</name>
-<description>HTTP $BG'>Z$NG'2DNN0h(B ($BLuCm(B: realm)</description>
-<syntax>AuthName <var>auth-domain</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O%G%#%l%/%H%j$KBP$9$kG'2DNN0h(B ($BLuCm(B: realm)
- $B$NL>A0$r;XDj$7$^$9!#(B
- $BG'2DNN0h$O!"MxMQ<T$,$I$N%f!<%6L>$H%Q%9%o!<%I$rAw?.$9$l$P$h$$$N$+$r(B
- $B%/%i%$%"%s%H$K65$($k$?$a$KMxMQ$7$^$9!#(B
- <directive>AuthName</directive> $B$O0l$D$N0z?t$r$H$j!"(B
- $B%9%Z!<%9$,4^$^$l$k>l9g$K$O!"(B
- $B0zMQId$G3g$i$J$1$l$P$J$j$^$;$s!#(B
- $B$3$N%G%#%l%/%F%#%V$O(B
- <directive module="core">AuthType</directive> $B%G%#%l%/%F%#%V$d(B
- <directive module="core">Require</directive> $B%G%#%l%/%F%#%V$H!"(B
- <directive module="mod_authn_file">AuthUserFile</directive> $B$d(B
- <directive module="mod_authz_groupfile">AuthGroupFile</directive> $B$J$I$N%G%#%l%/%F%#%V$H(B
- $B0l=o$KMxMQ$9$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>$BNc$($P(B:</p>
-
- <example>
- AuthName "Top Secret"
- </example>
-
- <p>$B$3$3$G(B <code>AuthName</code> $B$K;XDj$7$?J8;zNs$,!"(B
- $BBgItJ,$N%V%i%&%6$N%Q%9%o!<%I%@%$%"%m%0$KI=<($5$l$^$9!#(B</p>
-</usage>
-<seealso><a
- href="../howto/auth.html">$BG'>Z!">5G'!"%"%/%;%9@)8f(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthType</name>
-<description>$B%f!<%6G'>Z$N<oN`(B</description>
-<syntax>AuthType Basic|Digest</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$OBP>]%G%#%l%/%H%j$GMxMQ$9$k%f!<%6!<G'>Z$N<oN`$rA*$S$^$9!#(B
- $B$?$@!"8=:_$N$H$3$m$O(B <code>Basic</code> $B$H(B <code>Digest</code> $B$7$+(B
- $B<BAu$5$l$F$$$^$;$s!#(B
-
- $B$3$N%G%#%l%/%F%#%V$O(B <directive
- module="core">AuthName</directive>$B%G%#%l%/%F%#%V$d(B
- <directive module="core">Require</directive> $B%G%#%l%/%F%#%V$H!"(B
- <directive module="mod_authn_file">AuthUserFile</directive> $B$d(B <directive
- module="mod_authz_groupfile">AuthGroupFile</directive> $B$J$I$N%G%#%l%/%F%#%V$H(B
- $B0l=o$KMxMQ$9$kI,MW$,$"$j$^$9!#(B</p>
-</usage>
-<seealso><a href="../howto/auth.html">$BG'>Z!">5G'!"%"%/%;%9@)8f(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CGIMapExtension</name>
-<description>CGI $B%9%/%j%W%H$N%$%s%?!<%W%j%?$N0LCV$rD4$Y$k$?$a$N<jK!(B</description>
-<syntax>CGIMapExtension <var>cgi-path</var> <var>.extension</var></syntax>
-<default>None</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>NetWare $B$N$_(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B Apache $B$,(B CGI $B%9%/%j%W%H$r<B9T$9$k$?$a$N(B
- $B%$%s%?!<%W%j%?$rC5$9J}K!$r@)8f$7$^$9!#(B
- $BNc$($P!"(B<code>CGIMapExtension sys:\foo.nlm .foo</code> $B$H@_Dj$9$k$H(B
- <code>.foo</code> $B$H$$$&3HD%;R$N$9$Y$F$N(B CGI $B%9%/%j%W%H$O(B FOO $B%$%s%?!<%W%j%?$K(B
- $BEO$5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ContentDigest</name>
-<description><code>Content-MD5</code> HTTP $B1~Ez%X%C%@$N@8@.$rM-8z$K$9$k(B</description>
-<syntax>ContentDigest On|Off</syntax>
-<default>ContentDigest Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<status>Experimental</status>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(BRFC1864 $B5Z$S(B RFC2068 $B$K$*$$$FDj5A$5$l$F$$$k(B
- <code>Content-MD5</code> $B%X%C%@!<$N@8@.$rM-8z$K$7$^$9!#(B</p>
-
- <p>MD5 $B$O!"G$0UD9$N%G!<%?$N!V%a%C%;!<%8%@%$%8%'%9%H!W(B($B!V;XLf!W(B
- $B$HI=8=$5$l$k$3$H$b$"$k(B) $B$r7W;;$9$k%"%k%4%j%:%`$G!"(B
- $B%G!<%?$NJQ99$,$"$C$?>l9g$K$OHs>o$K9b$$?.MjEY$G%a%C%;!<%8%@%$%8%'%9%H$KJQ99$,(B
- $BH?1G$5$l$^$9!#(B</p>
-
- <p><code>Content-MD5</code> $B%X%C%@$O!"%(%s%I%D!<%(%s%I$G(B
- $B%(%s%F%#%F%#%\%G%#!<$K4^$^$l$k%a%C%;!<%8$N40A4@-%A%'%C%/(B
- (Message Integrity Check - MIC)$B$rDs6!$7$^$9!#(B
- $B$3$N%X%C%@$rD4$Y$k$3$H$G!"%W%m%-%7$d%/%i%$%"%s%H$O!"(B
- $BESCf7PO)$K$*$1$k%(%s%F%#%F%#%\%G%#$NM=4|$;$LJQ99$J$I$r(B
- $B8!=P$9$k$3$H$,$G$-$^$9!#%X%C%@$NNc(B:</p>
-
- <example>
- Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
- </example>
-
- <p>$B%j%/%(%9%HKh$K%a%C%;!<%8%@%$%8%'%9%H$r7W;;$9$k(B ($BCM$O%-%c%C%7%e$5$l$^$;$s(B)
- $B$3$H$+$i!"(B
- $B%5!<%P%Q%U%)!<%^%s%9$,Dc2<$9$k$3$H$K$D$$$FCm0U$7$F$/$@$5$$!#(B</p>
-
- <p><code>Content-MD5</code >$B$O!"(B<module>core</module> $B5!G=$K$h$j=hM}$5$l$?(B
- $B%I%-%e%a%s%H$rAw$k$H$-$N$_M-8z$G$"$j!"(B
- SSI $B%I%-%e%a%s%H$d(B CGI $B%9%/%j%W%H$N=PNO!"%P%$%H%l%s%8$r;XDj$7$?(B
- $B1~Ez$N>l9g$K$O$3$N%X%C%@$OIUM?$5$l$^$;$s!#(B
- </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultType</name>
-<description>$B%5!<%P$,%3%s%F%s%H%?%$%W$r7hDj$G$-$J$$$H$-$K(B
-$BAw$i$l$k(B MIME $B%3%s%F%s%H%?%$%W(B</description>
-<syntax>DefaultType <var>MIME-type</var></syntax>
-<default>DefaultType text/plain</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B%5!<%P$O!"(BMIME $B$N%?%$%W%^%C%W$+$i$O7hDj$G$-$J$$(B
- $B%I%-%e%a%s%H$NAw?.$rMW5a$5$l$k$3$H$,$"$j$^$9!#(B</p>
-
- <p>$B%5!<%P$O!"%I%-%e%a%s%H$N%3%s%F%s%H%?%$%W$r%/%i%$%"%s%H$KDLCN$9$kI,MW$,(B
- $B$"$j$^$9$N$G!"$3$N$h$&$K%?%$%W$,L$CN$N>l9g$O(B
- <code>DefaultType</code> $B$G;XDj$5$l$?%?%$%W$rMxMQ$7$^$9!#(B
- $BNc(B:</p>
-
- <example>
- DefaultType image/gif
- </example>
-
- <p>$B$3$l$O(B <code>.gif</code> $B$H$$$&3HD%;R$,%U%!%$%kL>$K4^$^$l$F$$$J$$(B
- $BB?$/$N(B GIF $B2hA|$,4^$^$l$F$$$k%G%#%l%/%H%j$KE,$7$F$$$k$G$7$g$&!#(B</p>
-
- <p><directive module="core">ForceType</directive> $B%G%#%l%/%F%#%V$H(B
- $B0c$C$F!"$3$N%G%#%l%/%F%#%V$O%G%U%)%k%H$N(B MIME $B%?%$%W$rDs6!$9$k$@$1$G(B
- $B$"$k$3$H$KCm0U$7$F$/$@$5$$!#%U%!%$%kL>$N3HD%;R$r4^$a!"(B
- $B%a%G%#%"%?%$%W$r7hDj$G$-$kB>$N(B MIME $B%?%$%W$NDj5A$,$"$l$P(B
- $B$3$N%G%U%)%k%H$O>e=q$-$5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Directory</name>
-<description>$B;XDj$N%U%!%$%k%7%9%F%`$N%G%#%l%/%H%j$H%5%V%G%#%l%/%H%j$H$N$_$K(B
-$BE,MQ$5$l$k%G%#%l%/%F%#%V$r0O$`(B</description>
-<syntax>&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B;XDj$5$l$?%G%#%l%/%H%j$H$=$N%5%V%G%#%l%/%H%j$K$N$_(B
- $B%G%#%l%/%F%#%V$rE,MQ$5$;$k$?$a$K$O!"(B
- <directive type="section">Directory</directive> $B$H(B
- <code>&lt;/Directory&gt;</code> $B$rBP$H$7$F!"%G%#%l%/%F%#%V72$r0O$$$^$9!#(B
- $B$=$NCf$K$O!"%G%#%l%/%H%j%3%s%F%-%9%H$G5v2D$5$l$?A4$F$N%G%#%l%/%F%#%V$r(B
- $BMxMQ$G$-$^$9!#(B
- <var>directive-path</var> $B$O!"%U%k%Q%9$b$7$/$O(B Unix $B$N%7%'%k7A<0$N(B
- $B%o%$%k%I%+!<%I$r;XDj$7$^$9!#(B
- <code>?</code> $B$OG$0U$N(B 1 $BJ8;z!"(B<code>*</code> $B$OG$0U$NJ8;zNs$K%^%C%A$7$^$9!#(B
- $B%7%'%k$K$*$1$k;XDjF1MM!"J8;z$NHO0O$r(B <code>[]</code> $B$G;XDj$G$-$^$9!#(B
- $B%o%$%k%I%+!<%I$O(B `/' $BJ8;z$K$O%^%C%A$7$^$;$s$N$G!"(B
- <code>/home/user/public_html</code> $B$K$O(B
- <code>&lt;Directory /*/public_html&gt;</code> $B$O%^%C%A$7$^$;$s$,!"(B
- <code>&lt;Directory /home/*/public_html&gt;</code> $B$O%^%C%A$7$^$9!#(B
- $BNc(B:</p>
-
- <example>
- &lt;Directory /usr/local/httpd/htdocs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
-<note>
-<p><var>directory-path</var> $B0z?t$K$OCm0U$7$F$/$@$5$$(B: $B$=$N0z?t$O(B
-Apache $B$,%U%!%$%k$r%"%/%;%9$9$k$?$a$K;H$&%U%!%$%k%7%9%F%`$N%Q%9$K(B
-$B$=$N$^$^%^%C%A$9$kI,MW$,$"$j$^$9!#$"$k(B <code>&lt;Directory&gt;</code> $B$K(B
-$BE,MQ$5$l$k%G%#%l%/%F%#%V$O!"JL$N%7%s%\%j%C%/%j%s%/$r$?$I$C$?$j$7$F(B
-$BF1$8%G%#%l%/%H%j$r0c$&%Q%9$G%"%/%;%9$7$?>l9g$K$OE,MQ$5$l$^$;$s!#(B</p>
-</note>
-
- <p><code>~</code> $B$H$$$&J8;z$r(B
- $BIU2C$9$k$3$H$G3HD%@55,I=8=$rMxMQ$9$k$3$H$b$G$-$^$9!#(B
- $BNc$($P(B:</p>
-
-<example>
- &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
-</example>
-
- <p>$B$H$$$C$?;XDj$N>l9g!"(B<code>/www/</code> $B0J2<$K$"$k?t;z(B
- 3 $BJ8;z$N%G%#%l%/%H%j$K%^%C%A$7$^$9!#(B</p>
-
- <p>$B$b$7J#?t$N(B ($B@55,I=8=0J30$N(B) <directive type="section"
- >Directory</directive>$B%;%/%7%g%s$,(B
- $B%I%-%e%a%s%H$r4^$`%G%#%l%/%H%j(B ($B$d$=$N>e0L%G%#%l%/%H%j$N$I$l$+(B) $B$H%^%C%A$7$?$J$i$P!"(B
- <a
- href="#accessfilename">.htaccess</a> $B%U%!%$%k$N%G%#%l%/%F%#%V$bFI$_9~$_$D$D!"(B
- $BC;$$%Q%9$+$i=g$KE,MQ$5$l$^$9!#(B
- $BNc$($P!"(B</p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- AllowOverride None<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /home/&gt;<br />
- <indent>
- AllowOverride FileInfo<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B$H@_Dj$7!"%I%-%e%a%s%H(B <code>/home/web/dir/doc.html</code> $B$X$N(B
- $B%"%/%;%9$,$"$C$?>l9g$K$O0J2<$N$h$&$KF0:n$7$^$9(B:</p>
-
- <ul>
- <li><code>AllowOverride None</code> $B$,E,MQ$5$l$k!#(B
- (<code>.htaccess</code> $B%U%!%$%k$OL58z$K$J$k(B)</li>
-
- <li><code>AllowOverride FileInfo</code> $B$,E,MQ$5$l$k(B
- (<code>/home</code> $B%G%#%l%/%H%j$KBP$7$F(B)$B!#(B</li>
-
- <li><code>/home/.htaccess</code>, <code>/home/web/.htaccess</code>,
- <code>/home/web/.htaccess</code> $B$N=g$K$=$l$i$N%U%!%$%kCf$N(B
- FileInfo $B%G%#%l%/%F%#%V$,E,MQ$5$l$k!#(B</li>
- </ul>
-
- <p>$B@55,I=8=$O!"DL>o$N%;%/%7%g%s$,$9$Y$FE,MQ$5$l$k$^$G(B
- $B9MN8$5$l$^$;$s!#(B
- $B$=$N8e!"A4$F$N@55,I=8=$,@_Dj%U%!%$%k$K8=$l$?=g$G;n$5$l$^$9!#(B
- $BNc$($P!"0J2<$N$h$&$J>l9g$K(B</p>
-
- <example>
- &lt;Directory ~ abc$&gt;<br />
- <indent>
- # ... directives here ...<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B@55,I=8=$N%;%/%7%g%s$O$9$Y$F$NDL>o$N(B <directive
- type="section">Directory</directive> $B$H(B
- <code>.htaccess</code> $B$NE,MQ$,=*$o$k$^$G9MN8$5$l$^$;$s!#(B
- $B$=$N8e$G!"@55,I=8=$O(B <code>/home/abc/public_html/abc</code> $B$K%^%C%A$7!"(B
- $BBP1~$9$k(B <directive type="section">Directory</directive> $B$,E,MQ$5$l$^$9!#(B</p>
-
- <p><strong>Apache $B$N%G%U%)%k%H$G$O(B <code>&lt;Directory /&gt;</code> $B$X$N%"%/%;%9$O(B
- <code>Allow from All</code> $B$K$J$C$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$3$l$O!"(BURL $B$+$i%^%C%W$5$l$?$I$N%U%!%$%k$G$b(B Apache $B$OAw$k$H$$$&$3$H$G$9!#(B
- $B$3$l$O0J2<$N$h$&$K$7$FJQ99$9$k$3$H$,?d>)$5$l$F$$$^$9!#(B</strong></p>
-
- <example>
- &lt;Directory /&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from All<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><strong>$B$=$7$F%"%/%;%9$r(B<em>$B2DG=$K$7$?$$(B</em>$B%G%#%l%/%H%j$KBP$7$F(B
- $B8DJL$K@_Dj$9$l$P$h$$$G$7$g$&!#(B
- $B$3$N$"$?$j$K$D$$$F$O!"(B<a
- href="../misc/security_tips.html">$B%;%-%e%j%F%#$K4X$9$k%3%D(B</a>$B$r(B
- $B;2>H$7$F$/$@$5$$!#(B</strong></p>
-
- <p>$B%G%#%l%/%H%j%;%/%7%g%s$O(B httpd.conf $B%U%!%$%k=q$-$^$9!#(B
- <directive type="section">Directory</directive>
- $B%G%#%l%/%F%#%V$OF~$l;R$K$9$k$3$H$,$G$-$:!"(B
- <directive module="core" type="section">Limit</directive> $B$d(B <directive
- module="core" type="section">LimitExcept</directive> $B%;%/%7%g%s$NCf$K$b(B
- $B5-=R$G$-$^$;$s!#(B</p>
-
-</usage>
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>DirectoryMatch</name>
-<description>$B@55,I=8=$K%^%C%A$9$k%U%!%$%k%7%9%F%`$N%G%#%l%/%H%j$H(B
-$B%5%V%G%#%l%/%H%j$H$N$_$KE,MQ$5$l$k%G%#%l%/%F%#%V$r0O$`(B</description>
-<syntax>&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive module="core" type="section">Directory</directive>
- $B%G%#%l%/%F%#%V$HF1MM$K!"(B<directive type="section">DirectoryMatch</directive>
- $B$H(B <code>&lt;/DirectoryMatch&gt;</code> $B$O;XDj$5$l$?%G%#%l%/%H%j$H(B
- $B$=$N%5%V%G%#%l%/%H%j$K$N$_E,MQ$5$l$k%G%#%l%/%F%#%V72$r0O$$$^$9!#(B
- $B$7$+$7!"$3$N%G%#%l%/%F%#%V$O0z?t$H$7$F@55,I=8=$r$H$j$^$9!#Nc$($P(B:</p>
-
- <example>
- &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
- </example>
-
- <p>$B$O(B /www/ $B0J2<$K$"$k?t;z(B 3 $BJ8;z$N%G%#%l%/%H%j$K%^%C%A$7$^$9!#(B</p>
-
-</usage>
-<seealso>$BDL>o$N(B <directive type="section">Directory</directive> $B$H@55,I=8=$N;XDj$,(B
-$BE,MQ$5$l$k=gHV$K$D$$$F$O(B <directive type="section"
-module="core">Directory</directive></seealso>
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DocumentRoot</name>
-<description>$B%&%'%V$+$i8+$($k%a%$%s$N%I%-%e%a%s%H%D%j!<$K$J$k(B
-$B%G%#%l%/%H%j(B</description>
-<syntax>DocumentRoot <var>directory-path</var></syntax>
-<default>DocumentRoot /usr/local/apache/htdocs</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(B<code>httpd</code> $B$,%U%!%$%k$rDs6!$9$k%G%#%l%/%H%j$r@_Dj$7$^$9!#(B
- <directive module="mod_alias">Alias</directive> $B$N$h$&$J%G%#%l%/%F%#%V$K%^%C%A$7$J$$>l9g$K$O!"(B
- $B%I%-%e%a%s%H$N(B ($BLuCm(B:$B%U%!%$%k%7%9%F%`>e$N(B) $B%Q%9$r@8@.$9$k$?$a$K!"(B
- $B%j%/%(%9%H$5$l$?(B URL $B$N%Q%9ItJ,$r%I%-%e%a%s%H%k!<%H$KIUM?$7$^$9!#(B
- $BNc(B:</p>
-
- <example>
- DocumentRoot /usr/web
- </example>
-
- <p>$B$3$N>l9g!"(B
- <code>http://www.my.host.com/index.html</code> $B$X$N%"%/%;%9$,$"$l$P(B
- <code>/usr/web/index.html</code> $B$,JV$5$l$^$9!#(B
- <var>directory-path</var> $B$,@dBP%Q%9$G$J$$>l9g$O!"(B
- <directive module="core">ServerRoot</directive>
- $B$+$i$NAjBP%Q%9$H$_$J$5$l$^$9!#(B</p>
-
- <p><directive>DocumentRoot</directive> $B$O:G8e$N%9%i%C%7%eL5$7$G(B
- $B;XDj$9$kI,MW$,$"$j$^$9!#(B</p>
-</usage>
-<seealso><a href="../urlmapping.html">URL $B$r%U%!%$%k%7%9%F%`$N0LCV$K(B
-$B%^%C%W$9$k(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableMMAP</name>
-<description>$BG[AwCf$K%U%!%$%k$rFI$_9~$`$?$a$K%a%b%j%^%C%T%s%0$r(B
-$B;H$&$+$I$&$+(B</description>
-<syntax>EnableMMAP On|Off</syntax>
-<default>EnableMMAP On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$OG[AwCf$K%U%!%$%k$NFbMF$rFI$_9~$`I,MW$,$"$k$H$-$K(B
- <code>httpd</code> $B$,%a%b%j%^%C%T%s%0$r;H$&$+$I$&$+$r@)8f$7$^$9!#%G%U%)%k%H$G$O!"(B
- $BNc$($P!"(B<module>mod_include</module> $B$r;H$C$F(B SSI $B%U%!%$%k$rG[Aw(B
- $B$9$k$H$-$N$h$&$K!"%U%!%$%k$NESCf$N%G!<%?$r%"%/%;%9$9$kI,MW$,$"$k$H$-$K$O(B
- Apache $B$O(B OS $B$,%5%]!<%H$7$F$$$l$P%U%!%$%k$r%a%b%j$K%^%C%W$7$^$9!#(B</p>
-
- <p>
- $B$3$N%a%b%j%^%C%W$O@-G=$N8~>e$r;}$?$i$9$3$H$,$"$j$^$9!#(B
- $B$7$+$7!"4D6-$K$h$C$F$O1?MQ>e$NLdBj$rKI$0$?$a$K%a%b%j%^%C%T%s%0$r(B
- $B;HMQ$7$J$$$h$&$K$7$?J}$,NI$$>l9g$b$"$j$^$9(B:</p>
-
- <ul>
- <li>$B%^%k%A%W%m%;%C%5%7%9%F%`$NCf$K$O%a%b%j%^%C%T%s%0$r$9$k$H(B <code>httpd</code> $B$N(B
- $B@-G=$,Mn$A$k$b$N$,$"$j$^$9!#(B</li>
- <li>NFS $B%^%&%s%H$5$l$?(B <directive module="core">DocumentRoot</directive>
- $B$G$O!"(B<code>httpd</code> $B$,%a%b%j%^%C%W$7$F$$$k4V$K%U%!%$%k$,:o=|$5$l$?$j(B
- $BC;$/$J$C$?$j$7$?$H$-$K5/$3$k%;%0%a%s%F!<%7%g%s%U%)!<%k%H$N$?$a$K(B
- <code>httpd</code> $B$,%/%i%C%7%e$9$k2DG=@-$,$"$j$^$9!#(B</li>
- </ul>
-
- <p>$B$3$l$i$NLdBj$KEv$F$O$^$k%5!<%P$N@_Dj$N>l9g$O!"0J2<$N$h$&$K$7$F(B
- $B%U%!%$%k$NG[Aw;~$N%a%b%j%^%C%T%s%0$r;HMQIT2D$K$7$F$/$@$5$$(B:</p>
-
- <example>
- EnableMMAP Off
- </example>
-
- <p>NFS $B%^%&%s%H$5$l$?%U%!%$%k$K$O!"LdBj$N$"$k%U%!%$%k$K$N$_L@<(E*$K(B
- $B$3$N5!G=$r;HMQIT2D$K$7$^$9(B:</p>
-
- <example>
- &lt;Directory "/path-to-nfs-files"&gt;
- <indent>
- EnableMMAP Off
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableSendfile</name>
-<description>$B%U%!%$%k$N%/%i%$%"%s%H$X$NG[Aw;~$K%+!<%M%k$N(B sendfile $B%5%]!<%H$r(B
-$B;H$&$+$I$&$+(B</description>
-<syntax>EnableSendfile On|Off</syntax>
-<default>EnableSendfile On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>$B%P!<%8%g%s(B 2.0.44 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s$K%U%!%$%k$NFbMF$rAw$k$H$-$K(B
- <code>httpd</code> $B$,%+!<%M%k$N(B
- sendfile $B%5%]!<%H$r;H$&$+$I$&$+$r@)8f$7$^$9!#%G%U%)%k%H$G$O!"(B
- $BNc$($P@EE*$J%U%!%$%k$NG[Aw$N$h$&$K!"%j%/%(%9%H$N=hM}$K%U%!%$%k$N(B
- $BESCf$N%G!<%?$N%"%/%;%9$rI,MW$H$7$J$$$H$-$K$O!"(BApache $B$O(B OS $B$,(B
- $B%5%]!<%H$7$F$$$l$P%U%!%$%k$rFI$_9~$`$3$H$J$/(B sendfile $B$r;H$C$F(B
- $B%U%!%$%k$NFbMF$rAw$j$^$9!#(B</p>
-
- <p>sendfile $B$O(B read $B$H(B send $B$rJL!9$K9T$J$&$3$H$H!"%P%C%U%!$N3d$jEv$F$r(B
- $B2sHr$7$^$9!#$7$+$7!"%W%i%C%H%U%)!<%`$d%U%!%$%k%7%9%F%`$NCf$K$O(B
- $B1?MQ>e$NLdBj$rHr$1$k$?$a$K$3$N5!G=$r;HMQIT2D$K$7$?J}$,NI$$>l9g$,$"$j$^$9(B:</p>
-
- <ul>
- <li>$B%W%i%C%H%U%)!<%`$NCf$K$O%S%k%I%7%9%F%`$,8!CN$G$-$J$+$C$?!"2u$l$?(B
- sendfile $B$N%5%]!<%H$,B8:_$9$k$b$N$,$"$j$^$9!#$3$l$OFC$K(B
- $B%P%$%J%j$,JL$N%^%7%s$G%S%k%I$5$l!"2u$l$?(B sendfile $B$N$"$k%^%7%s$K(B
- $B0\F0$7$?$H$-$K5/$3$j$^$9!#(B</li>
- <li>Linux $B$G$O!"(Bsendfile $B$rMQ$$$k$H!"(B
- IPv6 $B;HMQ;~$KB8:_$9$kFCDj%M%C%H%o!<%/%+!<%I$N(B TCP-checksum
- $B%*%U%m!<%I$N%P%0$rF'$s$G$7$^$$$^$9!#(B</li>
- <li>$B%M%C%H%o!<%/%^%&%s%H$5$l$?(B <directive module="core">DocumentRoot</directive>
- ($BNc$($P(B NFS $B$d(B SMB)
- $B$G$O!"%+!<%M%k$O<+?H$N%-%c%C%7%e$r;H$C$F%M%C%H%o!<%/$+$i$N%U%!%$%k$r(B
- $BAw$k$3$H$,$G$-$J$$$3$H$,$"$j$^$9!#(B</li>
- </ul>
-
- <p>$B$3$l$i$NLdBj$KEv$F$O$^$k%5!<%P$N@_Dj$N>l9g$O!"0J2<$N$h$&$K$7$F(B
- $B$3$N5!G=$r;HMQIT2D$K$7$F$/$@$5$$(B:</p>
-
-
- <example>
- EnableSendfile Off
- </example>
-
- <p>NFS $B$d(B SMB $B%^%&%s%H$5$l$?%U%!%$%k$K$O!"LdBj$N$"$k%U%!%$%k$K$N$_L@<(E*$K(B
- $B$3$N5!G=$r;HMQIT2D$K$7$^$9(B:</p>
-
- <example>
- &lt;Directory "/path-to-nfs-files"&gt;
- <indent>
- EnableSendfile Off
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorDocument</name>
-<description>$B%(%i!<$,H/@8$7$?$H$-$K%5!<%P$,%/%i%$%"%s%H$KAw$k$b$N(B</description>
-<syntax>ErrorDocument <var>error-code document</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 2.0 $B$G$O%F%-%9%H$r%/%&%)!<%H$9$k9=J8$,0JA0$N%P!<%8%g%s$+$i(B
-$BJQ$o$C$F$$$^$9!#(B</compatibility>
-
-<usage>
- <p>$BLdBj$d%(%i!<$,H/@8$7$?$H$-$NF0:n$H$7$F!"(B
- Apache $B$K$O0J2<$N;M$D$N$&$A0l$D$NF0:n$r@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <ol>
- <li>Apache $BI8=`$N4JC1$J%(%i!<%a%C%;!<%8$rI=<((B</li>
-
- <li>$B<+J,$G;XDj$7$?%a%C%;!<%8$rI=<((B</li>
-
- <li>$BLdBj$d%(%i!<$N=hM}$r$9$k0Y$K!"<+%5!<%PFb$N(B
- <var>URL-path</var> $B$X%j%@%$%l%/%H(B</li>
-
- <li>$BLdBj$d%(%i!<$N=hM}$r$9$k0Y$K!"30It$N(B <var>URL</var> $B$X%j%@%$%l%/%H(B</li>
- </ol>
-
- <p>$B:G=i$N$b$N$,%G%U%)%k%H$NF0:n$G!"(B2 $BHVL\$+$i(B 4 $BHVL\$O!"(B
- <directive>ErrorDocument</directive>$B%G%#%l%/%F%#%V$K$h$j!"(B
- HTTP $B$N%l%9%]%s%9%3!<%I$H!"%a%C%;!<%8$+(B URL $B$r;XDj$9$k$3$H$G@_Dj$7$^$9!#(B
- Apache $B$,LdBj$b$7$/$O%(%i!<$K4X$9$kDI2C>pJs$rDs6!$9$k$3$H$,$"$j$^$9!#(B</p>
-
- <p>URL $B$N>l9g$O!"%m!<%+%k$N(B URL $B$N;XDj$H$7$F%9%i%C%7%e$G;O$^$k(B (/) $B%Q%9$+!"(B
- $B%/%i%$%"%s%H$,2r<a$G$-$k%U%k(B URL $B$r;XDj$7$^$9!#(B<br />
- $B$b$7$/$O!"%V%i%&%6$KI=<($5$l$k%a%C%;!<%8$r;XDj$G$-$^$9!#(B
- $BNc(B:</p>
-
- <example>
- ErrorDocument 500 http://foo.example.com/cgi-bin/tester<br />
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br />
- ErrorDocument 401 /subscription_info.html<br />
- ErrorDocument 403 "Sorry can't allow you access today"
- </example>
-
- <p>$B2C$($F!"FCJL$JCM(B <code>default</code> $B$r;H$C$F(B Apache $B$K(B
- $B%O!<%I%3!<%I$5$l$F$$$k4JC1$J%a%C%;!<%8$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $BDL>o$OI,MW$G$O$"$j$^$;$s$,!"(B<code>default</code> $B$r;H$&$H(B
- $B4{B8$N(B <directive>ErrorDocument</directive> $B%G%#%l%/%F%#%V$N@_Dj$r(B
- $B7Q>5$9$k$H$3$m$G!"(BApache $B$N%O!<%I%3!<%I$5$l$?4JC1$J%a%C%;!<%8$K(B
- $BLa$9$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- ErrorDocument 404 /cgi-bin/bad_urls.pl<br /><br />
- &lt;Directory /web/docs&gt;<br />
- <indent>
- ErrorDocument 404 default<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B%j%b!<%H(B URL ($BNc$($P!"F,$K(B <code>http</code> $B$HIUM?$7$?J}K!(B) $B$r(B
- <directive>ErrorDocument</directive> $B$K;XDj$9$k$H$-!"(B
- $B$?$H$(J8=q$,F1$8%5!<%P$K$"$m$&$H$b!"%I%-%e%a%s%H$,$I$3$K$"$k$+$rDLCN$9$k$?$a$K!"(B
- Apache $B$O%j%@%$%l%/%H$r%/%i%$%"%s%H$KAw=P$9$k$H$$$&$3$H$K!"Cm0U$7$F$/$@$5$$!#(B
- $B$3$l$K$O$$$m$$$m$H4XO"$7$F5/$3$kLdBj$,$"$j$^$9!#(B
- $BCf$G$b:G$b=EMW$J$N$O!"%/%i%$%"%s%H$O85!9$N%(%i!<%9%F!<%?%9%3!<%I$r<u$1<h$i$:!"(B
- $BBe$o$j$K%j%@%$%l%/%H$N%9%F!<%?%9%3!<%I$r<u$1<h$k$H$$$&$3$H$G$9!#(B
- $B$3$l$K$h$j!"%9%F!<%?%9%3!<%I$r;H$C$F(B URL $B$,M-8z$G$"$k$+$I$&$+$r7hDj$7$h$&$H$9$k(B
- $B%&%'%V%m%\%C%H$d$=$NB>%/%i%$%"%s%H$r!":.Mp$5$;$k$+$b$7$l$^$;$s!#(B
- $B$5$i$K!"(B<code>ErrorDocument 401</code> $B$K%j%b!<%H$N(B URL $B$r;XDj$9$k$H!"(B
- $B%/%i%$%"%s%H$O(B 401 $B$H$$$&%9%F!<%?%9%3!<%I$r<u$1<h$i$J$$$?$a!"(B
- $B%Q%9%o!<%I$r%f!<%6!<$KF~NOMW5a$7$J$1$l$P$J$i$J$$$3$H$,$o$+$j$^$;$s!#(B
- $B=>$C$F!"(B<strong><code>ErrorDocument 401</code> $B$H$$$&%G%#%l%/%F%#%V$r;H$&>l9g$O!"(B
- $BI,$:%m!<%+%k$JJ8=q$r;2>H$7$J$1$l$P$J$j$^$;$s!#(B</strong></p>
-
- <p>Microsoft Internet Explorer (MSIE) $B$O%G%U%)%k%H$G$O%5!<%P$,@8@.$7$?%(%i!<%a%C%;!<%8$,(B
- $B!V>.$5$9$.$k!W$H$-$K$OL5;k$r$7$F<+J,<+?H$N!V$d$5$7$$!W%(%i!<%a%C%;!<%8$G(B
- $BCV49$7$^$9!#%5%$%:$N$7$-$$CM$O%(%i!<$N<oN`$K$h$C$F0[$J$j$^$9$,!"(B
- $B0lHLE*$K$O%(%i!<$NJ8=q$r(B 512 $B%P%$%H$h$j$bB?$-$/$9$k$H!"(BMSIE $B$O(B
- $B%5!<%P$,@8@.$7$?%(%i!<$r1#$5$:$KI=<($7$^$9!#>\$7$$>pJs$O(B Microsoft
- Knowledge Base $B$N5-;v(B <a
- href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807">Q294807</a>
- $B$K$"$j$^$9!#(B</p>
-
- <p>2.0 $B$h$jA0$N%P!<%8%g%s$G$O!"BP$K$J$C$F$$$J$$Fs=E0zMQId$r(B
- $B@hF,$KIU$1$k$3$H$K$h$j%a%C%;!<%8$G$"$k$3$H$r;XDj$7$F$$$^$7$?!#(B</p>
-
-</usage>
-
-<seealso><a href="../custom-error.html">$B%+%9%?%^%$%:2DG=$J(B
-$B%(%i!<1~Ez$N%I%-%e%a%s%F!<%7%g%s(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorLog</name>
-<description>$B%5!<%P$,%(%i!<$r%m%0<}=8$9$k>l=j(B</description>
-<syntax> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</syntax>
-<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>ErrorLog</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%5!<%P$K@8$8$?$5$^$6$^$J%(%i!<$r(B
- $B5-O?$9$k0Y$N%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B
- <var>file-path</var> $B$,@dBP%Q%9$G$J$$$H$-$O!"(B<directive
- module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$_$J$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ErrorLog /var/log/httpd/error_log
- </example>
-
- <p><var>file-path</var> $B$,%Q%$%W(B (|) $B$+$i;O$^$k>l9g$O!"(B
- $B%(%i!<%m%0$r=hM}$9$k$?$a$K<B9T$5$l$k%3%^%s%I$,(B
- $B;XDj$5$l$F$$$k$H2r<a$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ErrorLog "|/usr/local/bin/httpd_errors"
- </example>
-
- <p>$B%U%!%$%kL>$NJQ$o$j$K(B <code>syslog</code> $B$H;XDj$9$k$3$H$K$h$C$F!"(B
- $B%7%9%F%`$,%5%]!<%H$7$F$$$l$P(B syslogd(8) $B$rMxMQ$7$?%m%.%s%0$,M-8z$K$J$j$^$9!#(B
- $B%G%U%)%k%H$G$O!"(B<code>local7</code> $B%U%!%7%j%F%#$H$J$j$^$9$,!"(B
- <code>syslog:<var>facility</var></code> $B$H$$$C$?7A$G5-=R$9$k$3$H$K$h$j!"(B
- $BDL>o(B syslog(1) $B$N%I%-%e%a%s%H$G@bL@$5$l$F$$$k%U%!%7%j%F%#$N0l$D$r;H$&$h$&$K(B
- $B$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ErrorLog syslog:user
- </example>
-
- <p>$B%;%-%e%j%F%#(B:
- $B%m%0%U%!%$%k$r3JG<$9$k%G%#%l%/%H%j$,!"%5!<%P$r5/F0$7$?%f!<%60J30$N(B
- $B%f!<%6$K$h$C$F=q$-9~$a$k>l9g$K%;%-%e%j%F%#$,GK$i$l$k2DG=@-$,$"$k$3$H$K(B
- $B4X$9$k>\:Y$O(B <a
- href="../misc/security_tips.html#serverroot">$B%;%-%e%j%F%#$K4X$9$k%3%D(B</a> $B$r(B
- $B;2>H$7$F$/$@$5$$!#(B</p>
- <note type="warning"><title>$BCm(B</title>
- <p>Unix $B0J30$N%W%i%C%H%U%)!<%`$G%U%!%$%k$N%Q%9$rF~NO$9$k$H$-$O!"(B
- $B%W%i%C%H%U%)!<%`$,%P%C%/%9%i%C%7%e$N;HMQ$r5v$7$F$$$?$H$7$F$b!"(B
- $B3N<B$K%9%i%C%7%e$N$_$,;HMQ$5$l$k$h$&$KCm0U$7$F$/$@$5$$!#0lHLE*$K$O!"(B
- $B@_Dj%U%!%$%kA4HL$G%9%i%C%7%e$N$_$r;H$&J}$,NI$$$G$7$g$&!#(B</p>
- </note>
-</usage>
-<seealso><directive module="core">LogLevel</directive></seealso>
-<seealso><a href="../logs.html">Apache $B%m%0%U%!%$%k(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>FileETag</name>
-<description>ETag HTTP $B1~Ez%X%C%@$r:n@.$9$k$?$a$K;HMQ$5$l$k(B
-$B%U%!%$%k$NB0@-(B</description>
-<syntax>FileETag <var>component</var> ...</syntax>
-<default>FileETag INode MTime Size</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>
- <directive>FileETag</directive> $B%G%#%l%/%F%#%V$O(B
- $B%I%-%e%a%s%H$,%U%!%$%k$K4p$E$$$?$b$N$G$"$k$H$-$K!"(B
- <code>ETag</code> ($B%(%s%F%#%F%#%?%0(B) $B1~Ez%X%C%@%U%#!<%k%I$r:n@.$9$k$H$-$K;HMQ$9$k(B
- $B%U%!%$%k$NB0@-$r@_Dj$7$^$9!#(B (<code>ETag</code> $B$NCM$O%M%C%H%o!<%/$NBS0h$r@aLs$9$k$?$a$N(B
- $B%-%c%C%7%e$N4IM}$G;H$o$l$^$9!#(B) Apache 1.3.22 $B0JA0$G$O!"(B<code>ETag</code> $B$NCM$O(B
- <em>$B>o$K(B</em>$B%U%!%$%k$N(B inode, $B%5%$%:!":G=*=$@5;~9o(B (mtime) $B$+$i:n@.(B
- $B$5$l$F$$$^$7$?!#(B<directive>FileETag</directive> $B%G%#%l%/%F%#%V$K$h$j!"$3$l$i$N$I$l$r;H$&$+$r(B
- $BA*$V$3$H$,$G$-$^$9!#G'<1$5$l$k%-!<%o!<%I$O(B:
- </p>
-
- <dl>
- <dt><strong>INode</strong></dt>
- <dd>$B%U%!%$%k$N(B inode $BHV9f$r7W;;$K;H$$$^$9(B</dd>
- <dt><strong>MTime</strong></dt>
- <dd>$B%U%!%$%k$N:G=*=$@5;~9o$r;H$$$^$9(B</dd>
- <dt><strong>Size</strong></dt>
- <dd>$B%U%!%$%k$NCf?H$N%P%$%H?t$r;H$$$^$9(B</dd>
- <dt><strong>All</strong></dt>
- <dd>$B;HMQ2DG=$J$9$Y$F$N%U%#!<%k%I$r;H$$$^$9!#(B
- $B$3$l$O(B <example>FileETag INode MTime Size</example> $B$HEy2A$G$9!#(B</dd>
- <dt><strong>None</strong></dt>
- <dd>$B%I%-%e%a%s%H$,%U%!%$%k$K4p$E$$$?$b$N$G$b!"(B<code>ETag</code> $B%U%#!<%k%I$r(B
- $B1~Ez$KIU2C$7$^$;$s(B</dd>
- </dl>
-
- <p><code>INode</code>, <code>MTime</code>, <code>Size</code> $B%-!<%o!<%I$K$O(B
- <code>+</code> $B$d(B <code>-</code> $B$rA0$KIU$1$F(B
- $B;XDj$9$k$3$H$b$G$-$^$9!#$3$N>l9g$O!"$h$j9-$$HO0O$+$i7Q>5$5$l$?(B
- $B%G%U%)%k%H$N@_Dj$KJQ99$r2C$($k$h$&$K$J$j$^$9!#$=$N$h$&$J@\F,<-$N(B
- $BL5$$%-!<%o!<%I$r;XDj$9$k$H!"B(:B$K7Q>5$7$?@_Dj$rL58z$K$7$^$9!#(B</p>
-
- <p>$B$"$k%G%#%l%/%H%j$N@_Dj$K(B
- <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code> $B$,$"$j!"(B
- $B%5%V%G%#%l%/%H%j$N@_Dj$K(B <code>FileETag&nbsp;-INode</code> $B$,$"$k$H$-$O!"(B
- $B$=$N%5%V%G%#%l%/%H%j$N@_Dj$O(B ($B@_Dj$,>e=q$-$5$l$J$1$l$P%5%V%G%#%l%/%H%j$N(B
- $B%5%V%G%#%l%/%H%j$K$b7Q>5$5$l$^$9(B) <code>FileETag&nbsp;MTime&nbsp;Size</code>
- $B$HF1$8$K$J$j$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Files</name>
-<description>$B%^%C%A$9$k%U%!%$%kL>$KE,MQ$5$l$k%G%#%l%/%F%#%V$r0O$`(B</description>
-<syntax>&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><directive type="section">Files</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B$=$NCf$K$"$k%G%#%l%/%F%#%V$NE,MQHO0O$r%U%!%$%kL>$G@)8B$7$^$9!#(B
- <directive module="core"
- type="section">Directory</directive> $B%G%#%l%/%F%#%V$d(B <directive
- module="core" type="section">Location</directive> $B%G%#%l%/%F%#%V$H(B
- $BF1$8$h$&$J5!G=$r;}$A$^$9!#(B
- $B$3$l$O!"(B<code>&lt;/Files&gt;</code> $B%G%#%l%/%F%#%V$HBP$K(B
- $B$J$C$F$$$J$1$l$P$J$j$^$;$s!#(B
- $B$3$N%;%/%7%g%sCf$N%G%#%l%/%F%#%V$O!"%Y!<%9L>(B ($B%U%!%$%kL>$N:G8e$NItJ,(B)
- $B$,;XDj$5$l$?%U%!%$%kL>$K%^%C%A$9$k$9$Y$F$N%*%V%8%'%/%H$KE,MQ$5$l$^$9!#(B
- <directive type="section">Files</directive> $B%;%/%7%g%s$O(B
- <directive type="section">Directory</directive> $B%;%/%7%g%s$H(B
- <code>.htaccess</code> $B$,FI$_9~$^$l$?8e!"(B
- <directive type="section">Location</directive> $B%;%/%7%g%s$h$j$O@h$K(B
- $B@_Dj%U%!%$%k$K8=$l$?=g$KE,MQ$5$l$^$9!#(B
- <directive type="section">Files</directive> $B$O!"(B
- <directive type="section">Directory</directive> $B%;%/%7%g%sFb$K(B
- $B%M%9%H$5$;$k$3$H$,$G$-!"(B
- $B%U%!%$%k%7%9%F%`$N0lIt$K$N$_8BDj$7$FE,MQ$5$;$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><var>filename</var> $B0z?t$O!"%U%!%$%kL>$+%o%$%k%I%+!<%IJ8;zNs(B
- $B$G!"%o%$%k%I%+!<%I$G$O(B <code>?</code> $B$O0l$D$NJ8;z!"(B<code>*</code> $B$OG$0U$NJ8;zNs$K%^%C%A$7$^$9!#(B
- <code>~</code> $B$H$$$&J8;z$rIU2C$9$k$3$H$G3HD%@55,I=8=$r;H$&$3$H$b$G$-$^$9!#(B
- $BNc$($P!"(B</p>
-
- <example>
- &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
- </example>
-
- <p>$B$H$9$k$3$H$K$h$j!"0lHLE*$J%$%s%?!<%M%C%H$N2hA|%U%)!<%^%C%H$K%^%C%A$7$^$9!#(B
- $B$?$@$7!"(B
- <directive module="core" type="section">FilesMatch</directive> $B$r;H$&J}$,(B
- $B?d>)$5$l$F$$$^$9!#(B</p>
-
- <p>$B$A$J$_$K!"(B<directive module="core" type="section"
- >Directory</directive> $B$H(B <directive module="core" type="section"
- >Location</directive> $B%;%/%7%g%s$H$O0[$J$j!"(B
- <directive type="section">Files</directive>
- $B$O(B <code>.htaccess</code> $B%U%!%$%kFb$GMxMQ$9$k$3$H$,$G$-$^$9!#(B
- $B$3$l$K$h$j!"%f!<%6$,%U%!%$%kKh$K%"%/%;%9$N@)8f$r9T$J$&$3$H$,$G$-$k$h$&$K(B
- $B$J$C$F$$$^$9!#(B</p>
-
-</usage>
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>FilesMatch</name>
-<description>$B@55,I=8=$K%^%C%A$9$k%U%!%$%kL>$KE,MQ$5$l$k(B
-$B%G%#%l%/%F%#%V$r0O$`(B</description>
-<syntax>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><directive type="section">FilesMatch</directive> $B%G%#%l%/%F%#%V$O!"(B
- <directive module="core" type="section">Files</directive>
- $B%G%#%l%/%F%#%VF1MM$K$=$NCf$K$"$k%G%#%l%/%F%#%V$NE,MQHO0O$r%U%!%$%kL>$G@)8B$7$^$9!#$?$@$7!"(B
- $B$3$N%G%#%l%/%F%#%V$K$O@55,I=8=$r;XDj$7$^$9!#(B
- $BNc$($P(B:</p>
-
- <example>
- &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
- </example>
-
- <p>$B$O0lHLE*$J%$%s%?!<%M%C%H$N2hA|7A<0$K%^%C%A$7$^$9!#(B</p>
-</usage>
-
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceType</name>
-<description>$B$9$Y$F$N%^%C%A$9$k%U%!%$%k$,;XDj$N(B MIME $B%3%s%F%s%H%?%$%W$G(B
-$BAw$i$l$k$h$&$K$9$k(B</description>
-<syntax>ForceType <var>MIME-type</var>|None</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 2.0 $B$G(B core $B$K0\F0(B</compatibility>
-
-<usage>
- <p><code>.htaccess</code> $B$d(B <directive type="section" module="core"
- >Directory</directive> $B%;%/%7%g%s!"(B
- <directive type="section" module="core">Location</directive> $B%;%/%7%g%s!"(B
- <directive type="section" module="core">Files</directive> $B%;%/%7%g%s$K(B
- $B=q$+$l$?>l9g!"$3$N%G%#%l%/%F%#%V$O$=$3$K$"$k$9$Y$F$N%U%!%$%k$,(B
- <var>MIME-type</var>
- $B$G;XDj$5$l$?%3%s%F%s%H%?%$%W$H$7$F07$o$l$k$h$&$K$7$^$9!#$?$H$($P!"(B
- GIF $B%U%!%$%k$P$+$j$N%G%#%l%/%H%j$,$"$C$F!"$9$Y$F$N%U%!%$%k$r(B <code>.gif</code>
- $B$G=*$o$i$;$?$/$O$J$$$H$-$K!"0J2<$N$b$N$r;HMQ$7$^$9(B:</p>
-
- <example>
- ForceType image/gif
- </example>
-
- <p><directive module="core">DefaultType</directive> $B$H0c$C$F(B
- $B$3$N%G%#%l%/%F%#%V$O%a%G%#%"%?%$%W$r7h$a$k$3$H$,$G$-$k$+$b$7$l$J$$(B
- $B%U%!%$%k$N3HD%;R$b4^$a!"$9$Y$F$N(B MIME $B%?%$%W$N4XO"IU$1$r(B
- $B>e=q$-$9$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <p><code>None</code> $B$H$$$&CM$r;H$&$3$H$G(B <directive>ForceType</directive> $B$N(B
- $B@_Dj$rL58z$K$G$-$^$9(B:</p>
-
- <example>
- # force all files to be image/gif:<br />
- &lt;Location /images&gt;<br />
- <indent>
- ForceType image/gif<br />
- </indent>
- &lt;/Location&gt;<br />
- <br />
- # but normal mime-type associations here:<br />
- &lt;Location /images/mixed&gt;<br />
- <indent>
- ForceType None<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HostnameLookups</name>
-<description>$B%/%i%$%"%s%H$N(B IP $B%"%I%l%9$N(B DNS $B%k%C%/%"%C%W$r(B
-$BM-8z$K$9$k(B</description>
-<syntax>HostnameLookups On|Off|Double</syntax>
-<default>HostnameLookups Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"%[%9%HL>$r%m%0<}=8$G$-$k$h$&$K(B
- DNS $B%k%C%/%"%C%W$rM-8z$K$7$^$9(B
- ($B$5$i$K!"(BCGI/SSI $B$K(B <code>REMOTE_HOST</code> $BJQ?t$H$7$FEO$7$^$9(B)$B!#(B
- <code>Double</code>$B$r;XDj$7$?>l9g!"(B2 $B=E$N5U0z$-$r9T$J$$$^$9!#(B
- $B$D$^$j!"5U0z$-$N8e$K!"$=$N7k2L$KBP$7$F@50z$-$r9T$J$$$^$9!#@50z$-$N(B
- $B7k2L$N(B IP $B%"%I%l%9$NCf$K%*%j%8%J%k$N%"%I%l%9$H0lCW$9$k$b$N$,$J$1$l$P(B
- $B$J$j$^$;$s!#(B("tcpwrappers" $B$NMQ8l$G$O(B PARANOID $B$H8F$P$l$F$$$^$9!#(B)</p>
-
- <p><module>mod_authz_host</module> $B$G%[%9%HL>$K$h$k%"%/%;%9(B
- $B@)8f$r9T$J$&>l9g$K$O!"(B
- $B@_Dj$NG!2?$K$h$i$:(B 2 $B=E$N5U0z$-$,<B9T$5$l$^$9!#(B
- $B$3$l$O!"%;%-%e%j%F%#$rJ]$D$?$a$KI,MW$G$9!#(B
- <code>HostnameLookups Double</code> $B$r@_Dj$7$J$$8B$j!"(B
- $BB>$NItJ,$O$3$N(B 2 $B=E5U0z$-$N7k2L$r;H$&$3$H$O$G$-$^$;$s!#(B
- $BNc$($P!"(B<code>HostnameLookups On</code> $B$H@_Dj$7$F$"$k>uBV$G!"(B
- $B%[%9%HL>$K$h$k%"%/%;%9@)8B$r9T$J$C$?%*%V%8%'%/%H$X$N(B
- $B%j%/%(%9%H$r<u$1$?$H$9$k$H!"(B2 $B=E$N5U0z$-$,@.8y$9$k$+H]$+$K$h$i$:!"(B
- <code>REMOTE_HOST</code> $B$K$ODL>o$N5U0z$-7k2L$,EO$5$l$^$9!#(B</p>
-
- <p>$B%G%#%l%/%F%#%V$N%G%U%)%k%H$O(B
- $BK\Ev$K5U0z$-$rI,MW$H$7$F$$$k$o$1$G$O$J$$%5%$%H$N(B
- $B%M%C%H%o!<%/%H%i%U%#%C%/$rDc8:$5$;$k$?$a$K!"(B<code>Off</code> $B$K$J$C$F$$$^$9!#(B
- $B%k%C%/%"%C%W$K$h$kM>7W$JCY1d$,$J$/$J$k$?$a!"(B
- $B%(%s%I%f!<%6$K$H$C$F$bNI$$$G$7$g$&!#(B
- DNS $B$N%k%C%/%"%C%W$K$O!"$+$J$j$N;~4V$,I,MW$H$J$k>l9g$,B?$/!"(B
- $BIi2Y$N9b$$%5%$%H$G$O$3$N%G%#%l%/%F%#%V$O(B <code>Off</code> $B$K$9$Y$-$G$9!#(B
- $B$J$*!"(B<var>/support</var> $B%G%#%l%/%H%j$K4^$^$l!"%G%U%)%k%H$G$O(B
- $B%$%s%9%H!<%k%G%#%l%/%H%j$N(B <code>bin</code> $B%5%V%G%#%l%/%H%j$K(B
- $B%$%s%9%H!<%k$5$l$k(B <a
- href="../programs/logresolve.html">logresolve</a> $B%f!<%F%#%j%F%#$K$h$j!"(B
- Apache $B$NF0:n$H$OJL$K!"%m%0$K;D$5$l$F$$$k(B IP $B%"%I%l%9$+$i%[%9%HL>$r(B
- $B%k%C%/%"%C%W$9$k$3$H$,2DG=$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfDefine</name>
-<description>$B5/F0;~$K%F%9%H$,??$G$"$k$H$-$N$_$K=hM}$5$l$k%G%#%l%/%F%#%V$r(B
-$B0O$`(B</description>
-<syntax>&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><code>&lt;IfDefine <var>test</var>&gt;...&lt;/IfDefine&gt;</code>
- $B%;%/%7%g%s$O!"(B
- $B%G%#%l%/%F%#%V$r>r7oIU$-$G;XDj$9$k$?$a$KMxMQ$7$^$9!#(B
- <directive type="section">IfDefine</directive> $B%;%/%7%g%s$K(B
- $B4^$^$l$k%G%#%l%/%F%#%V$O!"(B<var>test</var>$B$,(B
- $BDj5A$5$l$F$$$k$H$-$N$_=hM}$5$l$^$9!#(B
- $B$b$7(B <var>test</var> $B$,Dj5A$5$l$F$$$J$1$l$P!"(B
- $B3+;O$H=*N;$N;XDj$N4V$N%G%#%l%/%F%#%V$OL5;k$5$l$^$9!#(B</p>
-
- <p><directive type="section">IfDefine</directive> $B%;%/%7%g%s%G%#%l%/%F%#%V$K(B
- $B;XDj$9$k(B <var>test</var> $B$O!"(B
- $B<!$NFs$D$N7A<0$N$&$A$N0l$D$r$H$j$^$9(B:</p>
-
- <ul>
- <li><var>parameter-name</var></li>
-
- <li><code>!</code><var>parameter-name</var></li>
- </ul>
-
- <p>$BA0<T$N>l9g$K$O!"(B<var>parameter-name</var> $B$HL>IU$1$i$l$?%Q%i%a!<%?$,(B
- $BDj5A$5$l$F$$$l$P3+;O$H=*N;$N4V$N%G%#%l%/%F%#%V$,=hM}$5$l$^$9!#(B
- $B8e<T$N>l9g$O5U$G!"(B<em>parameter-name</em> $B$,;XDj$5$l$F(B<strong>$B$$$J$$(B</strong>
- $B>l9g$K=hM}$5$l$^$9!#(B</p>
-
- <p><var>parameter-name</var> $B0z?t$O!"%5!<%P$r5/F0$9$k:]$K(B
- <code>httpd</code> $B$N%3%^%s%I%i%$%s$K(B
- <code>-D<var>parameter-</var></code> $B$H$$$&7A$G;XDj$9$k$HDj5A$5$l$^$9!#(B </p>
-
- <p><directive type="section">IfDefine</directive> $B%;%/%7%g%s$O(B
- $BF~$l;R$K$9$k$3$H$,$G$-!"J#?t$N%Q%i%a!<%?$K$h$k%F%9%H$r$9$k$?$a$K;HMQ$G$-$^$9!#(B
- $BNc(B:</p>
-
- <example>
- httpd -DReverseProxy ...<br />
- <br />
- # httpd.conf<br />
- &lt;IfDefine ReverseProxy&gt;<br />
- <indent>
- LoadModule rewrite_module modules/mod_rewrite.so<br />
- LoadModule proxy_module modules/libproxy.so<br />
- </indent>
- &lt;/IfDefine&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfModule</name>
-<description>$B%b%8%e!<%k$NB8:_$9$k$+$7$J$$$+$K1~$8$F=hM}$5$l$k(B
-$B%G%#%l%/%F%#%V$r0O$`(B</description>
-<syntax>&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-<compatibility>$B%b%8%e!<%k<1JL;R$O%P!<%8%g%s(B 2.1 $B0J9_$G;HMQ2DG=!#(B</compatibility>
-
-<usage>
- <p><code>&lt;IfModule <var>test</var>&gt;...&lt;/IfModule&gt;</code>
- $B%;%/%7%g%s$O!"%b%8%e!<%k$,B8:_$9$k$H$-$K=hM}$5$l$k%G%#%l%/%F%#%V$r(B
- $B;XDj$9$k$?$a$KMxMQ$7$^$9!#(B
- <directive type="section">IfModule</directive> $B%;%/%7%g%s$K(B
- $B4^$^$l$k%G%#%l%/%F%#%V$O!"(B<var>test</var>
- $B$G;XDj$9$k%b%8%e!<%k$,AH$_9~$^$l$F$$$k$H$-$N$_=hM}$5$l$^$9!#(B
- $B$b$7(B <var>test</var> $B$,AH$_9~$^$l$F$$$J$1$l$P!"3+;O$H=*N;$N4V$N%G%#%l%/%F%#%V(B
- $B$OL5;k$5$l$^$9!#(B</p>
-
- <p><directive type="section">IfModule</directive> $B%;%/%7%g%s%G%#%l%/%F%#%V$K(B
- $B;XDj$9$k(B <var>test</var> $B$O!"(B
- $B<!$NFs$D$N7A<0$N$&$A$N0l$D$r$H$j$^$9!#(B</p>
-
- <ul>
- <li><var>module</var></li>
-
- <li>!<var>module</var></li>
- </ul>
-
- <p>$BA0<T$N>l9g$O!"(B<var>module</var> $B$HL>IU$1$i$l$?%b%8%e!<%k$,(B
- Apache $B$KAH$_9~$^$l$F$$$l$P(B
- ($B%3%s%Q%$%k:Q$_$N$b$N$H!"(B<directive
- module="mod_so">LoadModule</directive> $B$rMxMQ$7$F(B
- $BF0E*$KFI$_9~$s$@$b$N$NN>J}(B)$B!"(B
- $B3+;O$H=*N;$N4V$N%G%#%l%/%F%#%V$,=hM}$5$l$^$9!#(B
- $B8e<T$N>l9g$O5U$G!"(B<var>module</var> $B$,AH$_9~$^$l$F(B<strong>$B$$$J$$(B</strong>
- $B>l9g$K=hM}$5$l$^$9!#(B</p>
-
- <p><var>module</var> $B0z?t$O!"%b%8%e!<%k<1JL;R$+(B
- $B%3%s%Q%$%k$r$7$?;~$N%b%8%e!<%k$N%U%!%$%kL>$G$9!#(B
- $BNc$($P!"(B<code>rewrite_module</code> $B$O<1JL;R$G(B
- <code>mod_rewrite.c</code> $B$O%U%!%$%kL>$G$9!#(B
- $B%b%8%e!<%k$,J#?t$N%=!<%9%U%!%$%k$+$i9=@.$5$l$F$$$k>l9g$O!"J8;zNs(B
- <code>STANDARD20_MODULE_STUFF</code> $B$,$"$k%U%!%$%k$NL>A0$r(B
- $B;H$C$F$/$@$5$$!#(B</p>
-
- <p><directive type="section">IfModule</directive> $B%;%/%7%g%s$O(B
- $BF~$l;R$K$9$k$3$H$,2DG=$G$"$j!"(B
- $BJ#?t$N%b%8%e!<%k$N%F%9%H$r9T$J$&$?$a$K;HMQ$G$-$^$9!#(B</p>
-
- <note>$BFCDj$N%b%8%e!<%k$NB8:_$K4X$o$i$:F0:n$9$k(B
- $B@_Dj%U%!%$%k$N86K\$,I,MW$J$H$-$K$N$_$3$N%;%/%7%g%s$r;HMQ$7$F$/$@$5$$!#(B
- $BDL>o$NF0:n$G$O!"%G%#%l%/%F%#%V$r(B
- <directive type="section">IfModule</directive> $B%;%/%7%g%s$NCf$K(B
- $BF~$l$kI,MW$O$"$j$^$;$s!#(B</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Include</name>
-<description>$B%5!<%P@_Dj%U%!%$%kCf$+$iB>$N@_Dj%U%!%$%k$r<h$j9~$`(B</description>
-<syntax>Include <var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-<compatibility>$B%o%$%k%I%+!<%I$K$h$k%^%C%A$O(B 2.0.41 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$K$h$j!"%5!<%P$N@_Dj%U%!%$%k$+$i(B
- $BB>$N@_Dj%U%!%$%k$r%$%s%/%k!<%I$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$BJ#?t$N%U%!%$%k$r%"%k%U%!%Y%C%H=g$K0lEY$KFI$_9~$`$?$a$K!"(B
- $B%7%'%k7A<0(B (<code>fnmatch</code>) $B$N%o%$%k%I%+!<%IJ8;z$r;H$&$3$H$,$G$-$^$9!#(B
- $B$5$i$K!"(B<directive>Include</directive> $B$K%G%#%l%/%H%j$r;XDj$7$?>l9g$O!"(B
- $B%G%#%l%/%H%j$H$=$N%5%V%G%#%l%/%H%jFb$NA4$F$N%U%!%$%k$r(B
- $B%"%k%U%!%Y%C%H=g$KFI$_9~$s$G!"@_Dj%U%!%$%k$H$7$F=hM}$7$^$9!#(B
- $B$7$+$7!"%G%#%l%/%H%jA4BN$rFI$_9~$`$N$O$*4+$a$G$-$^$;$s!#(B
- $B$U$H$7$?$3$H$+$i(B <code>httpd</code> $B$,FI$_9~$_$K<:GT$9$k$h$&$J(B
- $B0l;~%U%!%$%k$r%G%#%l%/%H%j$K;D$7$F$7$^$&$h$&$J$3$H$,$h$/$"$k$+$i$G$9!#(B</p>
-
- <p>$B;XDj$9$k%U%!%$%k%Q%9$O@dBP%Q%9$+!"(B
- <directive module="core">ServerRoot</directive> $B%G%#%l%/%H%j$+$i$N(B
- $BAjBP%Q%9$+!"$N$I$A$i$+$G$9!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- Include /usr/local/apache2/conf/ssl.conf<br />
- Include /usr/local/apache2/conf/vhosts/*.conf
- </example>
-
- <p><directive module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$N>l9g$O(B:</p>
-
- <example>
- Include conf/ssl.conf<br />
- Include conf/vhosts/*.conf
- </example>
-
- <p><code>apachectl configtest</code> $B$r<B9T$9$k$H!"@_Dj$r%A%'%C%/$7$F$$$k;~$K(B
- $BFI$_9~$^$l$?%U%!%$%k$N%j%9%H$,I=<($5$l$^$9(B:</p>
-
- <example>
- root@host# apachectl configtest<br />
- Processing config file: /usr/local/apache2/conf/ssl.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost1.conf<br />
- Processing config file: /usr/local/apache2/conf/vhosts/vhost2.conf<br />
- Syntax OK
- </example>
-</usage>
-
-<seealso><a href="../programs/apachectl.html">apachectl</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAlive</name>
-<description>HTTP $B$N;}B3E*$J@\B3$rM-8z$K$9$k(B</description>
-<syntax>KeepAlive On|Off</syntax>
-<default>KeepAlive On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>HTTP/1.0 $B$N(B Keep-Alive $B3HD%$H(B HTTP/1.1 $B$N;}B3E*@\B3$N5!G=$O!"(B
- $BJ#?t$N%j%/%(%9%H$,F1$8(B TCP $B$N@\B3$GAw$i$l$k!"D9;~4V;}B3$9$k(B
- HTTP $B%;%C%7%g%s$rDs6!$7$^$9!#$?$/$5$s$N2hA|$,(B
- $B4^$^$l$k(B HTML $B%I%-%e%a%s%H$G$O>l9g$K$h$C$F$OCY1d;~4V$,(B 50% $BC;=L$5$l$k7k2L$b(B
- $B$G$F$$$^$9!#(BKeep-Alive $B@\B3$rM-8z$K$9$k$K$O(B
- <code>KeepAlive On</code> $B$H@_Dj$7$^$9!#(B</p>
-
- <p>HTTP/1.0 $B$KBP1~$7$?%/%i%$%"%s%H$N:]$K$O!"(B
- $B%/%i%$%"%s%H$h$jFC$KMW5a$,$"$C$?>l9g$N$_(B Keep-Alive $B@\B3$H$J$j$^$9!#(B
- $B$5$i$K!"(BHTTP/1.0 $B%/%i%$%"%s%H$G$O!"%3%s%F%s%D$NMFNL$,@h$K(B
- ($BLuCm(B: $BMW5a$KBP$7$F1~Ez$rJV$9A0$K(B) $B$o$+$k>l9g$N$_(B Keep-Alive
- $B@\B3$rMxMQ$G$-$^$9!#(B
- $B$3$l$O!"(BCGI $B$N=PNO$d(B SSI $B$N%Z!<%8!"(B
- $B%5!<%P$,@8@.$7$?%G%#%l%/%H%j$N%j%9%H$N$h$&$JF0E*%3%s%F%s%D$r(B
- HTTP/1.0 $B%/%i%$%"%s%H$KAw$k>l9g$K$O(B Keep-Alive $B@\B3$r;H$($J$$$3$H$r0UL#$7$^$9!#(B
- HTTP/1.1 $B$KBP1~$7$?%/%i%$%"%s%H$N:]$K$O!"(B
- $BFC$K;XDj$5$l$J$$8B$j$O%G%U%)%k%H$H$7$F;}B3E*$J@\B3$,9T$J$o$l$^$9!#(B
- $B%/%i%$%"%s%H$,MW5a$9$l$P!"%3%s%F%s%D$NMFNL$rH=JL$G$-$J$$$b$N$r(B
- $B;}B3E*$J@\B3$rDL$7$FAw$k$?$a$K!"%A%c%s%/%(%s%3!<%G%#%s%0$,MQ$$$i$l$^$9!#(B</p>
-</usage>
-
-<seealso><directive module="core">MaxKeepAliveRequests</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAliveTimeout</name>
-<description>$B;}B3E*$J@\B3$G<!$N%j%/%(%9%H$,Mh$k$^$G%5!<%P$,BT$D;~4V(B</description>
-<syntax>KeepAliveTimeout <var>seconds</var></syntax>
-<default>KeepAliveTimeout 15</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B@\B3$rJD$8$kA0$K!"(BApache $B$,<!$N%j%/%(%9%H$r2?ICBT$D$+$r;XDj$7$^$9!#(B
- $B%j%/%(%9%H$r<u$1IU$1$?8e$O!"(B<directive
- module="core">Timeout</directive> $B%G%#%l%/%F%#%V$K$h$C$F(B
- $B;XDj$5$l$?%?%$%`%"%&%HCM$,;H$o$l$^$9!#(B</p>
-
- <p><directive>KeepAliveTimeout</directive> $B$rBg$-$JCM$K@_Dj$9$k$H!"(B
- $BIi2Y$N9b$$%5!<%P$K$*$$$F$O%Q%U%)!<%^%s%9$NLdBj$r0z$-5/$3$9>l9g$,$"$j$^$9!#(B
- $B%?%$%`%"%&%H$,D9$1$l$PD9$$$[$I!"$h$jB?$/$N%5!<%P%W%m%;%9$,(B
- $B3hH/$G$J$$%/%i%$%"%s%H$+$i$N@\B3$N=*N;$rBT$AB3$1$k$3$H$K$J$j$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Limit</name>
-<description>$B0O$$$NCf$K$"$k%"%/%;%9@)8f$NE,MQ$rFCDj$N(B HTTP $B%a%=%C%I$N$_$K(B
-$B@)8B$9$k(B</description>
-<syntax>&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>$B%"%/%;%9@)8f$O!"DL>o(B<strong>$BA4$F$N(B</strong>$B%"%/%;%9%a%=%C%I$KBP$7$F(B
- $B1F6A$7!"IaDL$O$3$l$,K>$^$7$$5sF0$G$9!#(B
- <strong>$B$=$&$7$?$3$H$+$i!"BgItJ,$N>l9g$K$O%"%/%;%9@)8f$K4X$o$k%G%#%l%/%F%#%V$r(B
- <directive type="section">Limit</directive> $B%;%/%7%g%sFb$K(B
- $B=q$/$Y$-$G$O$"$j$^$;$s!#(B </strong></p>
-
- <p><directive type="section">Limit</directive> $B%G%#%l%/%F%#%V$N(B
- $BL\E*$O!"%"%/%;%9@)8f$NHO0O$r(B
- $B;XDj$5$l$?(B HTTP $B%a%=%C%I$K8BDj$9$k$?$a$G$9!#(B
- $B$=$l0J30$N%a%=%C%I$O!"(B<directive type="section">Limit</directive> $B$G0O$o$l$?%"%/%;%9@)8f$N(B
- <strong>$B1F6A$r<u$1$^$;$s(B</strong>$B!#(B
- $B0J2<$NNc$O!"(B<code>POST</code>, <code>PUT</code>, <code>DELETE</code> $B$N%a%=%C%I$KBP$7$F$N$_%"%/%;%9$N@)8f$r9T$J$$!"(B
- $B$=$l0J30$N%a%=%C%I$K$D$$$F$O@)8B$7$^$;$s(B:</p>
-
- <example>
- &lt;Limit POST PUT DELETE&gt;<br />
- <indent>
- Require valid-user<br />
- </indent>
- &lt;/Limit&gt;
- </example>
-
- <p>$B%a%=%C%IL>$K$O0J2<$NCf$+$i0l$D0J>e$rNs5s$9$k$3$H$,$G$-$^$9(B:
- <code>GET</code>,
- <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
- <code>CONNECT</code>, <code>OPTIONS</code>,
- <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
- <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
- <code>LOCK</code>, <code>UNLOCK</code>. <strong>$B%a%=%C%IL>$O(B
- $BBgJ8;z>.J8;z$r6hJL$7$^$9!#(B</strong> <code>GET</code> $B$r;XDj$7$?>l9g$K$O(B
- <code>HEAD</code> $B%j%/%(%9%H$K$b@)8B$,$+$+$j$^$9!#(B<code>TRACE</code>
- $B%a%=%C%I$K@)8B$r$+$1$k$3$H$O$G$-$^$;$s!#(B</p>
-
- <note type="warning">$B%"%/%;%9@)8f$,L\E*$N>l9g$O(B
- <directive type="section" module="core">Limit</directive>
- $B%;%/%7%g%s$NBe$o$j$K(B <directive type="section"
- module="core">LimitExcept</directive> $B%;%/%7%g%s$r;HMQ$7$?J}$,NI$$$G$7$g$&!#(B
- <directive type="section" module="core">LimitExcept</directive>
- $B%;%/%7%g%s$G$OITFCDj$N%a%=%C%I$KBP$7$F$bKI8f$G$-$k$+$i$G$9!#(B</note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LimitExcept</name>
-<description>$B;XDj$5$l$?$b$N0J30$N(B HTTP $B%a%=%C%I$K%"%/%;%9@)8f$r(B
-$B@)8B$9$k(B</description>
-<syntax>&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><directive type="section">LimitExcept</directive> $B$H(B
- <code>&lt;/LimitExcept&gt;</code> $B$O!"0z?t$K(B
- <strong>$B4^$^$l$F$$$J$$(B</strong>
- HTTP $B$N%"%/%;%9%a%=%C%I$KE,MQ$9$k$?$a$N%"%/%;%9@)8f(B
- $B%G%#%l%/%F%#%V$r3g$k$?$a$KMxMQ$7$^$9!#(B
- $B$D$^$j!"(B<directive type="section" module="core"
- >Limit</directive> $B%;%/%7%g%s$NH?BP$NF0:n$r$7!"(B
- $BI8=`$N%a%=%C%I$HI8=`30$dL$G'<1$N%a%=%C%I$N>l9g$NN>J}$r@_Dj$G$-$^$9!#(B
- <directive type="section" module="core">Limit</directive> $B$N%I%-%e%a%s%H$b(B
- $BJ;$;$F;2>H$7$F$/$@$5$$!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- &lt;LimitExcept POST GET&gt;<br />
- <indent>
- Require valid-user<br />
- </indent>
- &lt;/LimitExcept&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitInternalRecursion</name>
-<description>$BFbIt%j%@%$%l%/%H$HF~$l;R$K$J$C$?%5%V%j%/%(%9%H$N:GBg?t$r7hDj$9$k(B</description>
-<syntax>LimitInternalRecursion <var>number</var> [<var>number</var>]</syntax>
-<default>LimitInternalRecursion 10</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Apache 2.0.47 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>$BFbIt%j%@%$%l%/%H$ONc$($P(B <directive>Action</directive> $B%G%#%l%/%F%#%V$r(B
- $B;H$C$F$$$k$H$-$K5/$3$j$^$9!#(B<directive>Action</directive> $B%G%#%l%/%F%#%V$O(B
- $B85!9$N%j%/%(%9%H$r(B CGI $B%9%/%j%W%H$KFbIt%j%@%$%l%/%H$r9T$J$$$^$9!#(B
- $B%5%V%j%/%(%9%H$O$$$/$D$+$N(B URI $B$KBP$7$F!"%j%/%(%9%H$5$l$?$H$-$K(B
- $B2?$,5/$3$k$+$rD4$Y$k$?$a$N(B Apache $B$N5!9=$G$9!#Nc$($P!"(B<module>mod_dir</module>
- $B$O(B <directive module="mod_dir">DirectoryIndex</directive> $B%G%#%l%/%F%#%V(B
- $B$,%j%9%H$9$k%U%!%$%k$rD4$Y$k$?$a$K%5%V%j%/%(%9%H$r;H$$$^$9!#(B</p>
-
- <p><directive>LimitInternalRecursion</directive> $B$OFbIt%j%@%$%l%/%H$d(B
- $B%5%V%j%/%(%9%H$,L58B%k!<%W$K4Y$C$?$H$-$N%5!<%P%/%i%C%7%e$rKI$.$^$9!#(B
- $BIaDL!"$=$N$h$&$J%k!<%W$O@_Dj$K<:GT$7$?$H$-$KH/@8$7$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O!"%j%/%(%9%HKh$KI>2A$5$l$k!"Fs$D$N0c$&8B3&CM$r(B
- $B@_Dj$7$^$9!#:G=i$N(B <var>number</var> $B$O!"5/$3$jF@$k(B
- $BFbIt%j%/%(%9%H$N:GBgCM$r@_Dj$7$^$9!#Fs$D$a$N(B <var>number</var> $B$O(B
- $B%5%V%j%/%(%9%H$,F~$l;R$K$G$-$k?<$5$r@_Dj$7$^$9!#(B<var>number</var> $B$r(B
- $B0l$D$@$1;XDj$7$?$H$-$O!"N>J}$N8B3&CM$K$=$NCM$,@_Dj$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- LimitInternalRecursion 5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestBody</name>
-<description>$B%/%i%$%"%s%H$+$iAw$i$l$k(B HTTP $B%j%/%(%9%H$N%\%G%#$N(B
-$BAmNL$r@)8B$9$k(B</description>
-<syntax>LimitRequestBody <var>bytes</var></syntax>
-<default>LimitRequestBody 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"%j%/%(%9%H%\%G%#$K5v$5$l$k%P%$%H?t!"(B<var>bytes</var>
- $B$r(B 0 ($BL5@)8B$r0UL#$7$^$9(B) $B$+$i(B 2147483647 (2GB) $B$^$G$N?tCM$G;XDj$7$^$9!#(B</p>
-
- <p><directive>LimitRequestBody</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%G%#%l%/%F%#%V$,=q$+$l$?%3%s%F%-%9%H(B
- ($B%5!<%PA4BN!"%G%#%l%/%H%j!"%U%!%$%k!"%m%1!<%7%g%s(B) $BFb$G(B
- $B5vMF$9$k(B HTTP $B%j%/%(%9%H%a%C%;!<%8%\%G%#$N%5%$%:$K@)8B$r$+$1$k$3$H$,$G$-$^$9!#(B
- $B%/%i%$%"%s%H$N%j%/%(%9%H$,$=$N@)8BCM$r1[$($F$$$l$P!"(B
- $B%5!<%P$O%j%/%(%9%H$r=hM}$;$:$K%(%i!<$rJV$7$^$9!#(B
- $BIaDL$N%j%/%(%9%H%a%C%;!<%8%\%G%#$N%5%$%:$O!"%j%=!<%9$N<oN`$d(B
- $B5v2D$5$l$F$$$k%a%=%C%I$K$h$C$FBg$-$/JQ$o$j$^$9!#(B
- CGI $B%9%/%j%W%H$O!"$h$/>pJs$r<u?.$9$k$?$a$K(B
- $B%a%C%;!<%8%\%G%#$r;H$$$^$9!#(B
- <code>PUT</code> $B%a%=%C%I$N<BAu$O!"$3$N%G%#%l%/%F%#%V$NCM$H$7$F(B
- $B>/$J$/$H$b$"$k%j%=!<%9$KBP$7$F%5!<%P$,<u$1IU$1$h$&$H$9$k(B
- $BI=8=$NBg$-$5$[$I$NCM$rI,MW$H$7$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(B
- $B4IM}<T$K%/%i%$%"%s%H$+$i$N0[>o$J%j%/%(%9%H$r@)8f$G$-$k$h$&$K$7!"(B
- $B2?$i$+$N7A$N%5!<%S%95qH]967b(B ($BLuCm(B:DoS) $B$rHr$1$k$N$KM-8z$G$9!#(B</p>
-
- <p>$B$"$k>l=j$X$N%U%!%$%k%"%C%W%m!<%I$r5v2D$9$k>l9g$K!"(B
- $B%"%C%W%m!<%I$G$-$k%U%!%$%k$N%5%$%:$r(B 100K $B$K@)8B$7$?$1$l$P!"(B
- $B0J2<$N$h$&$K;XDj$7$^$9(B:</p>
-
- <example>
- LimitRequestBody 102400
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFields</name>
-<description>$B%/%i%$%"%s%H$+$i$N(B HTTP $B%j%/%(%9%H$N%X%C%@%U%#!<%k%I$N?t$r(B
-$B@)8B$9$k(B</description>
-<syntax>LimitRequestFields <var>number</var></syntax>
-<default>LimitRequestFields 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><var>number</var> $B$K$O!"(B0 ($BL5@)8B$r0UL#$7$^$9(B) $B$+$i(B 32767
- $B$^$G$N@0?t$r;XDj$7$^$9!#(B
- $B%G%U%)%k%HCM$O!"Dj?t(B <code>DEFAULT_LIMIT_REQUEST_FIELDS</code>
- $B$K$h$j%3%s%Q%$%k;~$KDj5A$5$l$^$9(B ($BG[I[;~$K$O(B 100 $B$H;XDj$5$l$F$$$^$9(B)$B!#(B</p>
-
- <p>LimitRequestBody $B%G%#%l%/%F%#%V$O!"(B
- $B%5!<%P4IM}<T$,(B HTTP $B%j%/%(%9%HCf$K$*$$$F5v2D$9$k%j%/%(%9%H%X%C%@%U%#!<%k%I?t$r(B
- $B;XDj$7$^$9!#(B
- $B%5!<%P$O$3$NCM$K$ODL>o$N%/%i%$%"%s%H$+$i$N%j%/%(%9%H$K4^$^$l$k$G$"$m$&(B
- $B%U%#!<%k%I$N?t$h$jBg$-$JCM$,I,MW$H$7$^$9!#(B
- $B%/%i%$%"%s%H$K$h$j;H$o$l$?MW5a%X%C%@!<%U%#!<%k%I$N?t$,(B
- 20 $B$rD6$($k$3$H$O$[$H$s$I$"$j$^$;$s$,!"(B
- $B$3$l$O<o!9$N%/%i%$%"%s%H$N<BAu$h$C$FJQ$o$j!"(B
- $B>\:Y$J%3%s%F%s%H%M%4%7%(!<%7%g%s$r$9$k$?$a$N%V%i%&%6$N@_Dj$^$G$K$b(B
- $B1F6A$5$l$k$3$H$,$"$j$^$9!#(B
- $B%*%W%7%g%s$N(B HTTP $B3HD%$O%j%/%(%9%H%X%C%@%U%#!<%k%I$r;H$C$F8=$5$l$k>l9g$,(B
- $BB?$/$"$j$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(B
- $B4IM}<T$K%/%i%$%"%s%H$+$i$N0[>o$J%j%/%(%9%H$r@)8f$G$-$k$h$&$K$7!"(B
- $B2?$i$+$N7A$N%5!<%S%95qH]967b(B ($BLuCm(B:DoS) $B$rHr$1$k$N$KM-8z$G$9!#(B
- $B%j%/%(%9%H$N%U%#!<%k%I$,B?2a$.$k$3$H$r0UL#$9$k%(%i!<1~Ez$,(B
- $BIaDL$N%/%i%$%"%s%H$KJV$5$l$k$h$&$J;~$O$3$NCM$rA}$d$7$F$/$@$5$$!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- LimitRequestFields 50
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFieldSize</name>
-<description>$B%/%i%$%"%s%H$+$i$N(B HTTP $B%j%/%(%9%H$N%X%C%@$N(B
-$B%5%$%:$r@)8B$9$k(B</description>
-<syntax>LimitRequestFieldsize <var>bytes</var></syntax>
-<default>LimitRequestFieldsize 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(BHTTP $B%j%/%(%9%H%X%C%@Fb$K4^$a$k$3$H$N$G$-$k(B
- $B%P%$%H?t!"(B<var>bytes</var> $B$r(B
- 0 $B$+$i%3%s%Q%$%k;~$KDj5A$5$l$kDj?t(B
- <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> ($BG[I[;~$K$O(B 8192 $B$H;XDj(B)
- $B$G;XDj$5$l$?CM$^$G$N?t;z$G;XDj$7$^$9!#(B</p>
-
- <p><directive>LimitRequestFieldSize</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%5!<%P$N%3%s%Q%$%k;~$K;XDj$7$?%$%s%W%C%H%P%C%U%!MFNL0J2<$K(B
- HTTP $B%j%/%(%9%H%X%C%@$N5vMF$5$l$k%5%$%:$r@)8B$9$k$3$H$,$G$-$^$9!#(B
- $B%5!<%P$O!"$3$N%G%#%l%/%F%#%V$NCM$H$7$F!"(B
- $BDL>o$N%/%i%$%"%s%H%j%/%(%9%H$+$iAw$i$l$?8D!9$N%X%C%@%U%#!<%k%I$K(B
- $B==J,B-$kBg$-$5$rI,MW$H$7$^$9!#(B
- $BIaDL$N%j%/%(%9%H%X%C%@$N%5%$%:$O!"8D!9$N%/%i%$%"%s%H$K$h$jBg$-$/JQ$o$j!"(B
- $B>\:Y$J%3%s%F%s%H%M%4%7%(!<%7%g%s$r$9$k$?$a$N%V%i%&%6$N@_Dj$^$G$K$b(B
- $B1F6A$5$l$k$3$H$,$"$j$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(B
- $B4IM}<T$K%/%i%$%"%s%H$+$i$N0[>o$J%j%/%(%9%H$r@)8f$G$-$k$h$&$K$7!"(B
- $B2?$i$+$N7A$N%5!<%S%95qH]967b(B ($BLuCm(B:DoS) $B$rHr$1$k$N$KM-8z$G$9!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- LimitRequestFieldSize 4094
- </example>
-
- <note>$BDL>o$O%G%U%)%k%H$+$iJQ99$9$kI,MW$O$"$j$^$;$s!#(B</note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestLine</name>
-<description>$B%/%i%$%"%s%H$+$i$N(B HTTP $B%j%/%(%9%H9T$N%5%$%:$r@)8B$9$k(B</description>
-<syntax>LimitRequestLine <var>bytes</var></syntax>
-<default>LimitRequestLine 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(BHTTP $B%j%/%(%9%H9TFb$G5vMF$5$l$k%P%$%H?t(B
- <var>bytes</var> $B$r(B 0 $B$+$i%3%s%Q%$%k;~$NDj?t(B
- <code>DEFAULT_LIMIT_REQUEST_LINE</code> ($BG[I[;~$K$O(B 8190 $B$H;XDj(B)
- $B$G;XDj$5$l$?CM$^$G$N?t;z$G;XDj$7$^$9!#(B</p>
-
- <p><directive>LimitRequestLine</directive> $B%G%#%l%/%F%#%V$K$h$j!"%5!<%P4IM}<T$O(B
- $B%5!<%P$N%3%s%Q%$%k;~$K;XDj$7$?%$%s%W%C%H%P%C%U%!MFNL0J2<$K(B
- $B%/%i%$%"%s%H$+$i$N(B HTTP $B%j%/%(%9%H9T$N%5%$%:$N@)8B$r9T$J$&$3$H$,$G$-$^$9!#(B
- $B%j%/%(%9%H9T$O!"(BHTTP$B%a%=%C%I!"(BURI$B!"%W%m%H%3%k%P!<%8%g%s$+$i@.$C$F$*$j!"(B
- <directive>LimitRequestLine</directive> $B$O%5!<%P$X$N%j%/%(%9%H$KBP$7$F(B
- $B5vMF$9$k%j%/%(%9%H(B URI $B$ND9$5$r@)8B$9$k$3$H$K$J$j$^$9!#(B
- $B%5!<%P$O!"(B<code>GET</code> $B%j%/%(%9%H$N%/%(%jItJ,$b4^$a$F!"%j%=!<%9$NL>A0$,F~$k$KB-$k(B
- $BBg$-$5$rI,MW$H$7$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(B
- $B4IM}<T$K%/%i%$%"%s%H$+$i$N0[>o$J%j%/%(%9%H$r@)8f$G$-$k$h$&$K$7!"(B
- $B2?$i$+$N7A$N%5!<%S%95qH]967b(B ($BLuCm(B:DoS) $B$rHr$1$k$N$KM-8z$G$9!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- LimitRequestLine 4094
- </example>
-
- <note>$BDL>o$O%G%U%)%k%H$+$iJQ99$9$kI,MW$O$"$j$^$;$s!#(B</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitXMLRequestBody</name>
-<description>XML $B7A<0$N%j%/%(%9%H$N%\%G%#$N%5%$%:$r@)8B$9$k(B</description>
-<syntax>LimitXMLRequestBody <var>bytes</var></syntax>
-<default>LimitXMLRequestBody 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>XML $B7A<0$N%j%/%(%9%H$N%\%G%#$N:GBgCM$r(B ($B%P%$%HC10L$G(B) $B@)8B$7$^$9!#(B
- $BCM$K(B <code>0</code> $B$r;XDj$9$k$H%A%'%C%/$rL58z$K$7$^$9!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- LimitXMLRequestBody 0
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Location</name>
-<description>$B0O$s$@%G%#%l%/%F%#%V$r%^%C%A$9$k(B URL $B$N$_$KE,MQ(B</description>
-<syntax>&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive type="section">Location</directive> $B%G%#%l%/%F%#%V$O!"(B
- URL $B$K$h$jCf$K=q$+$l$?%G%#%l%/%F%#%V$NE,MQHO0O$r@)8B$7$^$9!#(B
- <directive type="section" module="core">Directory</directive>
- $B%G%#%l%/%F%#%V$H;w$F$$$F!"(B
- <code>&lt;/Location&gt;</code> $B%G%#%l%/%F%#%V$G=*N;$9$k(B
- $B%5%V%;%/%7%g%s$r3+;O$7$^$9!#(B
- <directive type="section">Location</directive> $B%;%/%7%g%s$O!"(B
- <directive type="section" module="core">Directory</directive> $B%;%/%7%g%s$H(B
- <code>.htaccess</code> $B$NFI$_9~$_$N8e!"(B
- <directive type="section" module="core">Files</directive> $B%;%/%7%g%s$r(B
- $BE,MQ$7$?8e$K!"@_Dj%U%!%$%k$K8=$l$?=g$K=hM}$5$l$^$9!#(B</p>
-
- <p><directive type="section">Location</directive> $B%;%/%7%g%s$O(B
- $B40A4$K%U%!%$%k%7%9%F%`$H4XO"$;$:$KF0:n$7$^$9!#$3$N$3$H$+$iF3$+$l$k(B
- $B7k2L$K$O$$$D$/$+Cm0U$9$kE@$,$"$j$^$9!#:G$b=EMW$J$b$N$O!"(B
- $B%U%!%$%k%7%9%F%`$N0LCV$X$N%"%/%;%9@)8f$K(B <directive
- type="section">Location</directive> $B%G%#%l%/%F%#%V$r;H$&$Y$-$G$O$J$$(B
- $B$H$$$&$3$H$G$9!#J#?t$N(B URL $B$,%U%!%$%k%7%9%F%`$NF1$80LCV$K%^%C%W$5$l$k(B
- $B2DG=$,$"$j$^$9$N$G!"$=$N$h$&$J%"%/%;%9@)8f$O2sHr$5$l$F$7$^$&2DG=@-$,(B
- $B$"$j$^$9!#(B</p>
-
- <note><title>$B$$$D(B <directive
- type="section">Location</directive> $B$r;H$&$+(B</title>
-
- <p><directive type="section">Location</directive> $B%G%#%l%/%F%#%V$O(B
- $B%U%!%$%k%7%9%F%`30$N%3%s%F%s%D$K%G%#%l%/%F%#%V$rE,MQ$9$k$H$-$K(B
- $B;HMQ$7$F$/$@$5$$!#%U%!%$%k%7%9%F%`$KB8:_$9$k%3%s%F%s%D$KBP$7$F$O!"(B
- <directive
- type="section" module="core">Directory</directive> $B$H(B <directive
- type="section" module="core">Files</directive> $B$r;H$C$F$/$@$5$$!#(B
- $BNc30$O!"(B<code>&lt;Location /&gt;</code> $B$G!"$3$l$O%5!<%PA4BN$KBP$7$F(B
- $B@_Dj$rE,MQ$9$k4JC1$JJ}K!$G$9!#(B</p>
- </note>
-
- <p>$BA4$F$N(B ($B%W%m%-%70J30$N(B) $B%j%/%(%9%H$KBP$7!"(B
- URL $B$O(B <code>/path/</code> $B$H$$$&!"(B
- $B@\F,<-(B <code>http://servername</code> $B$r4^$^$J$$7A$G%^%C%A$7$^$9!#(B
- $B%W%m%-%7%j%/%(%9%H$N>l9g$K$O!"(B<code>scheme://servername/path</code>
- $B$H$$$&@\F,<-$r4^$`7A$G%^%C%A$7!"@\F,<-$r4^$a$F;XDj$9$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>URL $B$K$O%o%$%k%I%+!<%I$rMxMQ$9$k$3$H$,$G$-$^$9!#(B
- <code>?</code> $B$OG$0U$N0lJ8;z!"(B<code>*</code> $B$OG$0U$NJ8;zNs$K%^%C%A$7$^$9!#(B </p>
-
- <p><code>~</code> $B$H$$$&J8;z$rDI2C$9$k$3$H$G!"3HD%@55,I=8=$r(B
- $BMxMQ$9$k$3$H$b$G$-$^$9!#(B
- $BNc$($P(B:</p>
-
- <example>
- &lt;Location ~ "/(extra|special)/data"&gt;
- </example>
-
- <p>$B$O(B URL $B$K(B <code>/extra/data</code> $B$+(B <code>/special/data</code> $B$H$$$&J8;zNs$,(B
- $B4^$^$l$F$$$k>l9g$K%^%C%A$7$^$9!#(B
- <directive type="section" module="core"
- >LocationMatch</directive> $B%G%#%l%/%F%#%V$O(B
- <directive type="section">Location</directive> $B$N@55,I=8=(B
- $BHG$H$^$C$?$/F1$8F0:n$r$7$^$9!#(B</p>
-
- <p><directive type="section">Location</directive> $B5!G=$O!"(B<directive
- module="core">SetHandler</directive> $B%G%#%l%/%F%#%V$H(B
- $BAH9g$o$;$FMxMQ$9$k$HFC$KJXMx$G$9!#(B
- $BNc$($P!"(B<code>foo.com</code> $B$N%V%i%&%6$+$i$N$_%9%F!<%?%9$N;2>H$rM-8z$K$7$?$1$l$P!"(B
- $B<!$N$h$&$K$9$l$PNI$$$G$7$g$&!#(B</p>
-
- <example>
- &lt;Location /status&gt;<br />
- <indent>
- SetHandler server-status<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
-<note><title>/ ($B%9%i%C%7%e(B) $B$K4X$9$kCm(B</title>
- <p>$B%9%i%C%7%eJ8;z$O!"(BURL $BFb$K8=$l$k>l=j$K1~$8$FJQ2=$9$k(B
- $BFCJL$J0UL#$r;}$C$F$$$^$9!#(B
- $B%U%!%$%k%7%9%F%`$K$*$$$FMxMQ$9$k>l9g$K$OJ#?t$N%9%i%C%7%e$G$b0l$D$N(B
- $B%9%i%C%7%e$H$7$F07$o$l$k$3$H$,B?$$$G$9$,!"(B
- (<em>$B$9$J$o$A(B</em>$B!"(B<code>/home///foo</code> $B$O(B
- <code>/home/foo</code> $B$HF1$8$$$C$?$h$&$K(B)
- URL $B$K$*$$$F$OI,$:$7$b$=$&$J$k$o$1$G$O$"$j$^$;$s!#(B
- <directive type="section" module="core">LocationMatch</directive>
- $B%G%#%l%/%F%#%V$d@55,I=8=$rMxMQ$7$?(B
- <directive type="section">Location</directive> $B%G%#%l%/%F%#%V$G!"(B
- $BJ#?t$N%9%i%C%7%e$K%^%C%A$5$;$?$$$H$-$K$O!"!"L@<(E*$K5-=R$9$k(B
- $BI,MW$,$"$j$^$9!#(B</p>
-
- <p>$BNc$($P!"(B<code>&lt;LocationMatch ^/abc&gt;</code> $B$O!"(B
- <code>/abc</code> $B$H$$$&%j%/%(%9%H(B URL $B$K%^%C%A$7$^$9$,!"(B
- <code>//abc</code> $B$H$$$&%j%/%(%9%H(B URL $B$K$O%^%C%A$7$^$;$s!#(B
- ($B@55,I=8=$G$J$$(B) <directive type="section">Location</directive>
- $B%G%#%l%/%F%#%V$O!"(B
- proxy $B%j%/%(%9%H$KBP$7$FMxMQ$9$k:]$K$OF1MM$N?6$kIq$$$r$7$^$9$,!"(B
- ($B@55,I=8=$G$J$$(B) <directive type="section">Location</directive> $B$r(B proxy
- $B$G$J$$%j%/%(%9%H$KBP$7$FMxMQ$9$k:]$K$O!"(B
- $B0l$D$N%9%i%C%7%e$GJ#?t$N%9%i%C%7%e$K%^%C%A$7$^$9!#(B
- $BNc$($P!"(B<code>&lt;Location /abc/def&gt;</code> $B$H;XDj$7!"(B
- <code>/abc//def</code> $B$H$$$&%j%/%(%9%H$,$"$l$P!"(B
- $B%^%C%A$9$k$3$H$K$J$j$^$9!#(B</p></note>
-
-</usage>
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LocationMatch</name>
-<description>$B0O$s$@%G%#%l%/%F%#%V$r@55,I=8=$K%^%C%A$9$k(B URL $B$N$_$K(B
-$BE,MQ(B</description>
-<syntax>&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive type="section">LocationMatch</directive> $B%G%#%l%/%F%#%V$O!"(B
- <directive type="section" module="core">Location</directive> $B$HF1$8MM$K(B
- URL $B$K$h$jCf$K=q$+$l$?%G%#%l%/%F%#%V$NE,MQHO0O$r@)8B$7$^$9!#(B
- $BC"$7!"0z?t$OIaDL$NJ8;zNs$G$O$J$/!"@55,I=8=$H$J$j$^$9!#Nc$($P!"(B</p>
-
- <example>
- &lt;LocationMatch "/(extra|special)/data"&gt;
- </example>
-
- <p>$B$O(B URL $B$K(B <code>/extra/data</code> $B$+(B <code>/special/data</code>
- $B$H$$$&J8;zNs$,4^$^$l$F$$$k>l9g$K%^%C%A$7$^$9!#(B</p>
-</usage>
-
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogLevel</name>
-<description>ErrorLog $B$N>iD9@-$r@)8f$9$k(B</description>
-<syntax>LogLevel <var>level</var></syntax>
-<default>LogLevel warn</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>LogLevel</directive> $B$O!"%(%i!<%m%0(B (<directive module="core"
- >ErrorLog</directive> $B%G%#%l%/%F%#%V$r(B
- $B8+$F$/$@$5$$(B) $B$X5-O?$9$k%a%C%;!<%8$N>iD9@-$rD4@0$7$^$9!#(B
- $B0J2<$N(B <var>level</var> $B$r;XDj$G$-!"=g$K=EMWEY$,2<$,$C$F$$$-$^$9!#(B</p>
-
- <table border="1">
- <tr>
- <th><strong>$B%l%Y%k(B</strong> </th>
-
- <th><strong>$B@bL@(B</strong> </th>
-
- <th><strong>$BNc(B</strong> </th>
- </tr>
-
- <tr>
- <td><code>emerg</code> </td>
-
- <td>$B6[5^(B - $B%7%9%F%`$,MxMQ$G$-$J$$(B</td>
-
- <td>Child cannot open lock file. Exiting
- ($B;R%W%m%;%9$,%m%C%/%U%!%$%k$r3+$1$J$$$?$a=*N;$7$?(B)</td>
- </tr>
-
- <tr>
- <td><code>alert</code> </td>
-
- <td>$BD>$A$KBP=h$,I,MW(B</td>
-
- <td>getpwuid: couldn't determine user name from uid
- (getpwuid: UID $B$+$i%f!<%6L>$rFCDj$G$-$J$+$C$?(B)</td>
- </tr>
-
- <tr>
- <td><code>crit</code> </td>
-
- <td>$BCWL?E*$J>uBV(B</td>
-
- <td>socket: Failed to get a socket, exiting child
- (socket: $B%=%1%C%H$,F@$i$l$J$$$?$a!";R%W%m%;%9$r=*N;$5$;$?(B)</td>
- </tr>
-
- <tr>
- <td><code>error</code> </td>
-
- <td>$B%(%i!<(B</td>
-
- <td>Premature end of script headers
- ($B%9%/%j%W%H$N%X%C%@$,B-$j$J$$$^$^$G=*$o$C$?(B)</td>
- </tr>
-
- <tr>
- <td><code>warn</code> </td>
-
- <td>$B7Y9p(B</td>
-
- <td>child process 1234 did not exit, sending another SIGHUP
- ($B;R%W%m%;%9(B 1234 $B$,=*N;$7$J$+$C$?!#$b$&0lEY(B SIGHUP $B$rAw$k(B)</td>
- </tr>
-
- <tr>
- <td><code>notice</code> </td>
-
- <td>$BIaDL$@$,!"=EMW$J>pJs(B</td>
-
- <td>httpd: caught SIGBUS, attempting to dump core in ...
- (httpd: SIGBUS $B%7%0%J%k$r<u$1!"(B... $B$X%3%"%@%s%W$r$7$?(B)</td>
- </tr>
-
- <tr>
- <td><code>info</code> </td>
-
- <td>$BDI2C>pJs(B</td>
-
- <td>"Server seems busy, (you may need to increase
- StartServers, or Min/MaxSpareServers)..." ($B!V%5!<%P$OIi2Y$,9b$$!"(B
- (StartServers $B$d(B Min/MaxSpareServers $B$NCM$rA}$d$9I,MW$,$"$k$+$b(B)$B!W(B)</td>
- </tr>
-
- <tr>
- <td><code>debug</code> </td>
-
- <td>$B%G%P%C%0%a%C%;!<%8(B</td>
-
- <td>"Opening config file ..." ($B@_Dj%U%!%$%k$r3+$$$F$$$k(B...)</td>
- </tr>
- </table>
-
- <p>$BFCDj$N%l%Y%k$,;XDj$5$l$?>l9g!"$=$l$h$j9b$$%l%Y%k$NA4$F$N%a%C%;!<%8$,(B
- $BJs9p$5$l$^$9!#(B
- <em>$BNc$($P(B</em>$B!"(B<code>LogLevel info</code> $B$K;XDj$9$k$H!"(B
- <code>notice</code> $B$H(B <code>warn</code> $B$bJs9p$5$l$^$9!#(B</p>
-
- <p>$B$J$*(B <code>crit</code> $B0J>e$N%l%Y%k$r;XDj$9$k$3$H$,?d>)$5$l$^$9!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>
- LogLevel notice
- </example>
-
- <note><title>$BCm(B</title>
- <p>$B%U%!%$%k$K%m%0$r=PNO$9$k>l9g!"(B<code>notice</code>
- $B%l%Y%k$N%a%C%;!<%8$OM^@)$5$l$:!"$9$Y$F%m%0$K=PNO$5$l$^$9!#(B
- $B$7$+$7(B <code>syslog</code> $B$r;HMQ$7$F$$$k>l9g$O!"(B
- $B$3$l$OEv$F$O$^$j$^$;$s!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxKeepAliveRequests</name>
-<description>$B;}B3E*$J@\B3>e$G5v2D$5$l$k%j%/%(%9%H$N?t(B</description>
-<syntax>MaxKeepAliveRequests <var>number</var></syntax>
-<default>MaxKeepAliveRequests 100</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>MaxKeepAliveRequests</directive> $B%G%#%l%/%F%#%V$O!"(B
- <directive module="core">KeepAlive</directive> $B$,M-8z$J>l9g$K!"(B
- $B0l2s$N@\B3$G<u$1IU$12DG=$J%j%/%(%9%H$N?t$r@)8B$7$^$9!#(B
- <code>0</code> $B$K@_Dj$7$F$$$l$P!"<u$1IU$1$k%j%/%(%9%H$OL5@)8B$K$J$j$^$9!#(B
- $B$3$N@_Dj$O!"%5!<%P@-G=$r8~>e$5$;$k$?$a$K!"Bg$-$J?tCM$r;XDj$9$k$3$H4+$a$^$9!#(B
- </p>
-
- <p>$BNc(B:</p>
-
- <example>
- MaxKeepAliveRequests 500
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NameVirtualHost</name>
-<description>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$N$?$a$N(B IP $B%"%I%l%9$r;XDj(B</description>
-<syntax>NameVirtualHost <var>addr</var>[:<var>port</var>]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>NameVirtualHost</directive> $B%G%#%l%/%F%#%V$O!"(B
- <a href="../vhosts/">$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>$B$N@_Dj$r9T$J$$$?$$>l9g$K(B
- $BI,MW$H$J$k$b$N$G$9!#(B</p>
-
- <p><var>addr</var> $B$K$O%[%9%HL>$r;XDj$G$-$^$9$,!"(B
- $B>o$K(B IP $B%"%I%l%9$r;XDj$9$k$N$,?d>)$5$l$^$9!#(B
- $BNc$($P!"(B</p>
-
- <example>
- NameVirtualHost 111.22.33.44
- </example>
-
- <p><directive>NameVirtualHost</directive> $B%G%#%l%/%F%#%V$O!"(B
- $BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r(B
- $BMxMQ$7$F%j%/%(%9%H$r<u$1IU$1$k(B IP $B%"%I%l%9$r;XDj$7$^$9!#(B
- $B$3$l$O!"IaDL$OL>A0%Y!<%9$N%P!<%A%c%k%[%9%H%"%I%l%9$G$9!#(B
- $B$?$@$7!"%U%!%$%"!<%&%)!<%k$dB>$N%W%m%-%7$,%j%/%(%9%H$r<u$1IU$1!"(B
- $B0c$&(B IP $B%"%I%l%9$N%5!<%P$K%U%)%o!<%I$9$k$H$$$&>l9g$O!"(B
- $B%j%/%(%9%H$rDs6!$7$?$$%^%7%s>e$NJ*M}%$%s%?!<%U%'!<%9$N(B
- IP $B%"%I%l%9$r;XDj$9$kI,MW$,$"$j$^$9!#(B
- $BJ#?t$N%"%I%l%9$GJ#?t$NL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;XDj$9$k>l9g$O(B
- $B3F%"%I%l%9$KBP$7$F%G%#%l%/%F%#%V$r=q$$$F$/$@$5$$!#(B</p>
-
- <note><title>$BCf(B</title>
- <p>$B!V<g%5!<%P!W$d!"$I$N(B <code>_default_</code> $B%5!<%P$b!"(B
- <directive>NameVirtualHost</directive> $B$G;XDj$7$?(B IP $B%"%I%l%9$X$N%j%/%(%9%H(B
- $B$r=hM}$9$k$3$H$O(B<strong>$B$"$j$^$;$s(B</strong> ($B$J$<$+(B
- <directive>NameVirtualHost</directive> $B$r(B
- $B;XDj$7$?$1$I$=$N%"%I%l%9$K(B <directive>VirtualHost</directive> $B$rDj5A$7$J$+$C$?>l9g$r=|$/(B)$B!#(B</p>
- </note>
-
- <p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$K%]!<%HHV9f$r;XDj$9$k$3$H$b2DG=$G$9!#(B
- $BNc$($P(B</p>
-
- <example>
- NameVirtualHost 111.22.33.44:8080
- </example>
-
- <p>IPV6 $B$N%"%I%l%9$O<!$NNc$N$h$&$K3Q3g8L$G0O$`I,MW$,$"$j$^$9(B:</p>
-
- <example>
- NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
- </example>
-
- <p>$B$9$Y$F$N%$%s%?%U%'!<%9$X$N%j%/%(%9%H$r<u$1<h$k$h$&$K$9$k$?$a$K$O!"(B
- $B0z?t$H$7$F(B <code>*</code> $B$r;H$$$^$9!#(B</p>
-
- <example>
- NameVirtualHost *
- </example>
-
- <note><title><directive type="section">VirtualHost</directive> $B%G%#%l%/%F%#%V$N0z?t(B</title>
- <p><directive type="section">VirtualHost</directive> $B%G%#%l%/%F%#%V$N0z?t$O(B <directive
- >NameVirtualHost</directive> $B%G%#%l%/%F%#%V$N0z?t$K@53N$K(B
- $B9g$C$F$$$kI,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <example>
- NameVirtualHost 1.2.3.4<br />
- &lt;VirtualHost 1.2.3.4&gt;<br />
- # ...<br />
- &lt;/VirtualHost&gt;<br />
- </example>
- </note>
-
-</usage>
-
-<seealso><a href="../vhosts/">$B%P!<%A%c%k%[%9%H@bL@=q(B
-</a></seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Options</name>
-<description>$B%G%#%l%/%H%j$KBP$7$F;HMQ2DG=$J5!G=$r@_Dj$9$k(B</description>
-<syntax>Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</syntax>
-<default>Options All</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-
-<usage>
- <p><directive>Options</directive> $B%G%#%l%/%F%#%V$O!"FCDj$N%G%#%l%/%H%j$KBP$7$F(B
- $B$I$N5!G=$,;HMQ2DG=$+$r@)8f$7$^$9!#(B</p>
-
- <p><var>option</var> $B$r(B <code>None</code>$B$K;XDj$9$k$H!"(B
- $BFCJL$J5!G=$OA4$FL58z$K$J$j$^$9!#(B
- $B$^$?!"0J2<$N<($9(B 1 $B8D0J>e$N$b$N$r;XDj$G$-$^$9!#(B</p>
-
- <dl>
- <dt><code>All</code></dt>
-
- <dd><code>MultiViews</code> $B$r=|$$$?A4$F$N5!G=$,M-8z$H$J$j$^$9!#(B
- $B$3$l$,%G%U%)%k%H$G$9!#(B</dd>
-
- <dt><code>ExecCGI</code></dt>
-
- <dd>
- <module>mod_cgi</module> $B$K$h$k(B CGI $B%9%/%j%W%H$N<B9T$r5v2D$7$^$9!#(B</dd>
-
- <dt><code>FollowSymLinks</code></dt>
-
- <dd>
- $B%5!<%P$,!"$3$N%G%#%l%/%H%jFb$G%7%s%\%j%C%/%j%s%/$r$?$I$l$k$h$&$K$7$^$9!#(B
- <note><p>$B%5!<%P$,%7%s%\%j%C%/%j%s%/$r$?$I$k>l9g$G$b!"(B
- <directive type="section" module="core">Directory</directive> $B%;%/%7%g%s$K(B
- $B%^%C%A$5$;$k$?$a$N(B
- $B%Q%9L>$O(B<em>$BJQ99$5$l$^$;$s(B</em>$B!#(B</p>
- <p><directive type="section" module="core">Location</directive> $BFb$K(B
- $B$3$N%*%W%7%g%s$r;XDj$7$F$b(B<strong>$BL5;k$5$l$k(B</strong>$B$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#(B</p></note></dd>
-
- <dt><code>Includes</code></dt>
-
- <dd>
- <module>mod_include</module> $B$,Ds6!$9$k(B SSI $B$rM-8z$K$7$^$9!#(B</dd>
-
- <dt><code>IncludesNOEXEC</code></dt>
-
- <dd>
- SSI $B$OM-8z$K$J$j$^$9$,!"(B<code>#exec</code> $B%3%^%s%I(B $B$H(B <code>#exec CGI</code> $B$OL58z$K$J$j$^$9!#(B
- $B$?$@$7!"(B<code>#include virtual</code> $B$K$h$j!"(B<directive module="mod_alias">ScriptAlias</directive> $B$5$l$?%G%#%l%/%H%j$G(B
- CGI $B$r<B9T$9$k$3$H$O2DG=$G$9!#(B</dd>
-
- <dt><code>Indexes</code></dt>
-
- <dd>
- $B$b$7!"(BURL $B$,%G%#%l%/%H%j$K%^%C%W$9$k%j%/%(%9%H$G$"$C$F!"(B
- $B3n$D(B <directive module="mod_dir">DirectoryIndex</directive> $B$G;XDj$7$?%U%!%$%k(B ($BNc$($P!"(B<code>index.html</code>) $B$,(B
- $B%G%#%l%/%H%jFb$KL5$1$l$P!"(B<module>mod_autoindex</module> $B$,(B
- $B%G%#%l%/%H%jFb$N0lMw$r@07A$7$FJV$7$^$9!#(B</dd>
-
- <dt><code>MultiViews</code></dt>
-
- <dd>
- <module>mod_negotiation</module> $B$K$h$k(B
- <a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>
- $B$5$l$?(B "MultiViews" $B$r5v2D$7$^$9!#(B</dd>
-
- <dt><code>SymLinksIfOwnerMatch</code></dt>
-
- <dd>
- $B%7%s%\%j%C%/@h$N%U%!%$%k$^$?$O%G%#%l%/%H%j$,!"(B
- $B%7%s%\%j%C%/%j%s%/$N=jM-%f!<%6(B ID $B$HF1$8>l9g$K$N$_%7%s%\%j%C%/%j%s%/$r(B
- $B$?$I$l$k$h$&$K$7$^$9!#(B
-
- <note><title>$BCm(B</title> <directive type="section" module="core"
- >Location</directive> $BFb$K$3$N%*%W%7%g%s$r(B
- $B;XDj$7$F$bL5;k$5$l$^$9!#(B</note>
- </dd>
- </dl>
-
- <p>$BDL>o!"%G%#%l%/%H%j$KBP$7$FJ#?t$N(B <directive>Options</directive> $B$,(B
- $BE,MQ2DG=$J>l9g!"(B
- $B:G$b6a$$$b$N0l$D$N$_$,E,MQ$5$l!"B>$N$b$N$OL5;k$5$l$^$9!#(B
- $BJ#?t$N;XDj$,%^!<%8$5$l$k$o$1$G$O$"$j$^$;$s!#(B(<a
- href="../sections.html#mergin">$B%;%/%7%g%s$N%^!<%8J}K!(B</a>$B$r;2>H$7$F$/$@$5$$!#(B)
- $B$7$+$7!"$9$Y$F$N(B <directive>Options</directive> $B%G%#%l%/%F%#%V$,(B <code>+</code> $B$d(B <code>-</code> $BIU$-$G(B
- $B;XDj$5$l$?>l9g$O%*%W%7%g%s$NCM$O%^!<%8$5$l$^$9!#(B
- <code>+</code> $B$rF,$K$D$1$l$P8=:_$N@_Dj$K2C$($i$l!"(B
- <code>-</code> $B$rIU$1$l$P8=:_$N@_Dj$+$i:o=|$5$l$^$9!#(B</p>
-
- <p>$BNc$($P!"(B<code>+</code> $B$d(B <code>-</code> $B$rMxMQ$7$J$$>l9g$O(B:</p>
-
- <example>
- &lt;Directory /web/docs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <indent>
- Options Includes<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><code>/web/docs/spec</code> $B$H$$$&%G%#%l%/%H%j$K$O!"(B
- <code>Includes</code> $B$@$1$,E,MQ$5$l$^$9!#(B
- $B$7$+$7!"(B2 $BHVL\$N(B <directive>Options</directive> $B$G(B <code>+</code> $B$d(B <code>-</code> $B$rMxMQ$7$F$_$k$H(B:</p>
-
- <example>
- &lt;Directory /web/docs&gt;<br />
- <indent>
- Options Indexes FollowSymLinks<br />
- </indent>
- &lt;/Directory&gt;<br />
- <br />
- &lt;Directory /web/docs/spec&gt;<br />
- <indent>
- Options +Includes -Indexes<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p><code>/web/docs/spec</code> $B$H$$$&%G%#%l%/%H%j$K$O!"(B <code>FollowSymLinks</code> $B$H(B
- <code>Includes</code> $B$,E,MQ$5$l$^$9!#(B</p>
-
- <note><title>$BCm(B</title>
- <p><code>-IncludesNOEXEC</code> $B$b$7$/$O(B
- <code>-Includes</code> $B$r;XDj$9$k$H!"(B
- $BA0$N@_Dj$,$I$N$h$&$K$J$C$F$$$h$&$H$b(B SSI $B$OL58z$H$J$j$^$9!#(B</p>
- </note>
-
- <p>$B$I$N$h$&$J@_Dj$b$5$l$F$$$J$1$l$P!"%G%U%)%k%H$G$O(B <code>All</code> $B$K(B
- $B$J$j$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Require</name>
-<description>$B$I$NG'>Z:Q$_%f!<%6$,%j%=!<%9$r%"%/%;%9$G$-$k$+$rA*Br$9$k(B</description>
-<syntax>Require <var>entity-name</var> [<var>entity-name</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"$I$NG'>Z:Q$_$N%f!<%6$,%G%#%l%/%H%j$K(B
- $B%"%/%;%9$9$k$3$H$,$G$-$k$+$r;XDj$7$^$9!#(B
- $B0J2<$N$h$&$J9=J8$K$J$j$^$9!#(B</p>
-
- <dl>
- <dt><code>Require user <var>userid</var> [<var>userid</var>] ...</code></dt>
-
- <dd>$B;XDj$5$l$?%f!<%6$N$_!"%G%#%l%/%H%j$X$N%"%/%;%9$r5v2D$7$^$9!#(B</dd>
-
- <dt><code>Require group <var>group-name</var> [<var>group-name</var>] ...</code></dt>
-
- <dd>$B;XDj$5$l$?%0%k!<%W$KB0$9$k%f!<%6$N$_!"%G%#%l%/%H%j$X$N%"%/%;%9$r5v2D$7$^$9!#(B</dd>
-
- <dt><code>Require valid-user</code></dt>
-
- <dd>$BA4$F$NG'>Z$5$l$?%f!<%6$K!"%G%#%l%/%H%j$X$N%"%/%;%9$r5v2D$7$^$9!#(B</dd>
- </dl>
-
- <p><directive>Require</directive> $B$O!"@5$7$/F0:n$9$k$?$a$K$O(B <directive
- module="core">AuthName</directive> $B5Z$S(B <directive module="core"
- >AuthType</directive> $B%G%#%l%/%F%#%V$d!"(B
- ($B%f!<%6$H%0%k!<%W$r;XDj$9$k$?$a$K(B) <directive module="mod_authn_file"
- >AuthUserFile</directive> $B5Z$S(B <directive module="mod_authz_groupfile"
- >AuthGroupFile</directive>
- $B$H$$$C$?%G%#%l%/%F%#%V$H6&$K(B
- $B;XDj$9$kI,MW$,$"$j$^$9!#(B
- $BNc$($P(B:</p>
-
- <example>
- AuthType Basic<br />
- AuthName "Restricted Directory"<br />
- AuthUserFile /web/users<br />
- AuthGroupFile /web/groups<br />
- Require group admin
- </example>
-
- <p>$B$3$N$h$&$K$7$FE,MQ$5$l$?%"%/%;%9@)8f$O!"(B<strong>$BA4$F$N(B</strong>$B%a%=%C%I$K(B
- $BBP$7$F9T$J$o$l$^$9!#(B
- <strong>$BDL>o$O!"$3$l$,K>$^$7$$F0:n$G$9!#(B</strong>
- $B$b$7!"FCDj$N%a%=%C%I$KBP$7$F$N$_%"%/%;%9$N@)8f$rE,MQ$7!"(B
- $BB>$N%a%=%C%I$O@)8B$7$J$$>l9g$K$O!"(B<directive
- type="section" module="core">Limit</directive> $B%;%/%7%g%sFb$K(B
- <directive>Require</directive> $B$r(B
- $B;XDj$7$F$/$@$5$$!#(B</p>
-
-</usage>
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><module>mod_authz_host</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitCPU</name>
-<description>Apache $B$N;R%W%m%;%9$+$i5/F0$5$l$?%W%m%;%9$N(B CPU $B>CHqNL$r(B
-$B@)8B$9$k(B</description>
-<syntax>RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</syntax>
-<default>$BL$@_Dj!#%*%Z%l!<%F%#%s%0%7%9%F%`$N%G%U%)%k%H$r;HMQ(B</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>$B0l$D$+Fs$D$N%Q%i%a!<%?$r$H$j$^$9!#(B
- $B:G=i$N%Q%i%a!<%?$OA4%W%m%;%9$KBP$9$k%j%=!<%9$N%=%U%H%j%_%C%H$r@_Dj$7!"(B
- 2 $BHVL\$N%Q%i%a!<%?$O:GBg$N%j%=!<%9%j%_%C%H$r@_Dj$7$^$9!#(B
- $B%Q%i%a!<%?$K$O?t;z$+!"%*%Z%l!<%F%#%s%0%7%9%F%`$N:GBg$H$J$k(B
- <code>max</code> $B$N$I$A$i$+$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B:GBg$N%j%=!<%9%j%_%C%H$r>e$2$k$?$a$K$O!"%5!<%P$r(B
- <code>root</code> $B$G<B9T$9$k$+5/F0$5$l$J$1$l$P$$$1$^$;$s!#(B</p>
-
- <p>$B$A$J$_$K!"$3$N@_Dj$O(B Apache $B$N;R%W%m%;%9<+BN$G$O$J$/!"(B
- $B%j%/%(%9%H$r<u$1IU$1$?(B Apache $B$N;R%W%m%;%9$+$i(B fork $B$5$l$?%W%m%;%9$K(B
- $BE,MQ$5$l$^$9!#(B
- $B$3$l$K$O(B CGI $B$d(B SSI $B$+$i<B9T$5$l$?%3%^%s%I$,4^$^$l$^$9$,!"(BApache $B$N(B
- $B?F%W%m%;%9$+$i(B fork $B$5$l$?%m%0$N%Q%$%W%W%m%;%9$J$I$K$OE,MQ$5$l$^$;$s!#(B</p>
-
- <p>CPU $B%j%=!<%9$N%j%_%C%H$O%W%m%;%9$"$?$j$NIC?t$GI=$o$5$l$^$9!#(B</p>
-
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitMEM</name>
-<description>Apache $B$N;R%W%m%;%9$+$i5/F0$5$l$?%W%m%;%9$N%a%b%j>CHqNL$r(B
-$B@)8B$9$k(B</description>
-<syntax>RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</syntax>
-<default>$BL$@_Dj!#%*%Z%l!<%F%#%s%0%7%9%F%`$N%G%U%)%k%H$r;HMQ(B</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>$B0l$D$+Fs$D$N%Q%i%a!<%?$r$r$H$j$^$9!#(B
- $B:G=i$N%Q%i%a!<%?$OA4%W%m%;%9$KBP$9$k%j%=!<%9$N%=%U%H%j%_%C%H$r@_Dj$7!"(B
- 2 $BHVL\$N%Q%i%a!<%?$O:GBg$N%j%=!<%9%j%_%C%H$r@_Dj$7$^$9!#(B
- $B%Q%i%a!<%?$K$O?t;z$+!"%*%Z%l!<%F%#%s%0%7%9%F%`$N:GBg$H$J$k(B
- <code>max</code> $B$N$I$A$i$+$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B:GBg$N%j%=!<%9%j%_%C%H$r>e$2$k$?$a$K$O!"%5!<%P$r(B
- <code>root</code> $B$G<B9T$9$k$+5/F0$5$l$J$1$l$P$$$1$^$;$s!#(B</p>
-
- <p>$B$3$N@_Dj$O(B Apache $B$N;R%W%m%;%9<+BN$G$O$J$/!"(B
- $B%j%/%(%9%H$r<u$1IU$1$?(B Apache $B$N;R%W%m%;%9$+$i(B fork $B$5$l$?%W%m%;%9$K(B
- $BE,MQ$5$l$^$9!#(B
- $B$3$l$K$O(B CGI $B$d(B SSI $B$+$i<B9T$5$l$?%3%^%s%I$,4^$^$l$^$9$,!"(BApache $B$N(B
- $B?F%W%m%;%9$+$i(B fork $B$5$l$?%m%0$N%Q%$%W%W%m%;%9$J$I$K$OE,MQ$5$l$^$;$s!#(B</p>
-
- <p>$B%a%b%j%j%=!<%9$N%j%_%C%H$O%W%m%;%9$"$?$j$N%P%$%H?t$GI=$o$5$l$^$9!#(B</p>
-</usage>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitNPROC</name>
-<description>Apache $B$N;R%W%m%;%9$+$i5/F0$5$l$?%W%m%;%9$,5/F0$9$k%W%m%;%9$N(B
-$B?t$r@)8B$9$k(B</description>
-<syntax>RLimitNPROC <var>number</var>|max [<var>number</var>|max]</syntax>
-<default>$BL$@_Dj!#%*%Z%l!<%F%#%s%0%7%9%F%`$N%G%U%)%k%H$r;HMQ(B</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>$B0l$D$+Fs$D$N%Q%i%a!<%?$r$H$j$^$9!#(B
- $B:G=i$N%Q%i%a!<%?$OA4%W%m%;%9$KBP$9$k%j%=!<%9$N%=%U%H%j%_%C%H$r@_Dj$7!"(B
- 2 $BHVL\$N%Q%i%a!<%?$O:GBg$N%j%=!<%9%j%_%C%H$r@_Dj$7$^$9!#(B
- $B%Q%i%a!<%?$K$O?t;z$+!"%*%Z%l!<%F%#%s%0%7%9%F%`$N:GBg$H$J$k(B
- <code>max</code> $B$N$I$A$i$+$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B:GBg$N%j%=!<%9%j%_%C%H$r>e$2$k$?$a$K$O!"%5!<%P$r(B
- <code>root</code> $B$G<B9T$9$k$+5/F0$5$l$J$1$l$P$$$1$^$;$s!#(B</p>
-
- <p>$B$3$N@_Dj$O(B Apache $B$N;R%W%m%;%9<+BN$G$O$J$/!"(B
- $B%j%/%(%9%H$r<u$1IU$1$?(B Apache $B$N;R%W%m%;%9$+$i(B fork $B$5$l$?%W%m%;%9$K(B
- $BE,MQ$5$l$^$9!#(B
- $B$3$l$K$O(B CGI $B$d(B SSI $B$+$i<B9T$5$l$?%3%^%s%I$,4^$^$l$^$9$,!"(BApache $B$N(B
- $B?F%W%m%;%9$+$i(B fork $B$5$l$?%m%0$N%Q%$%W%W%m%;%9$J$I$K$OE,MQ$5$l$^$;$s!#(B</p>
-
- <p>$B%W%m%;%9$N@)8B$O!"%f!<%6$"$?$j$N%W%m%;%9?t$G@)8f$5$l$^$9!#(B</p>
-
- <note><title>$BCm(B</title>
- <p> CGI $B%W%m%;%9$,%&%'%V%5!<%P$N%f!<%6(B ID $B0J30$G<B9T$5$l$k$N$G(B
- <strong>$BL5$1$l$P(B</strong>$B!"(B
- $B$3$N%G%#%l%/%F%#%V$O!"%5!<%P<+?H$,@8@.$G$-$k%W%m%;%9$N?t$r@)8B$9$k$3$H$K$J$j$^$9!#(B
- $B$=$N$h$&$J>u67$K$J$C$F$$$k$+$I$&$+$O!"(B<code>error_log</code> $BCf$N(B
- <strong><code>cannot fork</code></strong> $B$H$$$&%a%C%;!<%8$K$h$j(B
- $B3NG'$9$k$3$H$,$G$-$^$9!#(B</p>
- </note>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Satisfy</name>
-<description>$B%[%9%H%l%Y%k$N%"%/%;%9@)8f$H%f!<%6G'>Z$H$NAj8_:nMQ$r;XDj(B</description>
-<syntax>Satisfy Any|All</syntax>
-<default>Satisfy All</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive module="mod_authz_host">Allow</directive> $B$H(B
- <directive module="core">Require</directive> $B$NN>J}$,;H$o$l$F$$$k$H$-$N(B
- $B%"%/%;%9%]%j%7!<$r@_Dj$7$^$9!#%Q%i%a!<%?$O(B <code>All</code> $B$+(B <code>Any</code>
- $B$G$9!#$3$N%G%#%l%/%F%#%V$O$"$k>l=j$X$N%"%/%;%9$,%f!<%6L>(B/$B%Q%9%o!<%I(B
- <em>$B$H(B</em>$B%/%i%$%"%s%H$N%[%9%H$N%"%I%l%9$G@)8B$5$l$F$$$k$H$-$K$N$_(B
- $BLrN)$A$^$9!#%G%U%)%k%H$NF0:n(B (<code>All</code>) $B$O%/%i%$%"%s%H$,%"%I%l%9$K$h$k(B
- $B%"%/%;%9@)8B$rK~$?$7!"(B<em>$B$+$D(B</em>$B@5$7$$%f!<%6L>$H%Q%9%o!<%I$rF~NO$9$k$3$H$r(B
- $BMW5a$7$^$9!#(B<code>Any</code> $B$G$O!"%/%i%$%"%s%H$O%[%9%H$N@)8B$rK~$?$9$+!"(B
- $B@5$7$$%f!<%6L>$H%Q%9%o!<%I$NF~NO$r$9$k$+$r$9$l$P%"%/%;%9$r5v2D$5$l$^$9!#(B
- $B$3$l$O!"$"$k>l=j$r%Q%9%o!<%I$GJ]8n$9$k$1$l$I!"FCDj$N%"%I%l%9$+$i$N(B
- $B%/%i%$%"%s%H$K$O%Q%9%o!<%I$NF~NO$rMW5a$;$:$K%"%/%;%9$r5v2D$9$k!"(B
- $B$H$$$&$h$&$J$H$-$K;HMQ$G$-$^$9!#(B</p>
-
- <p>$BNc$($P!"F1$8%M%C%H%o!<%/>e$K$$$k?M$K$O%&%'%V%5%$%H$N$"$kItJ,$K$D$$$F(B
- $BL5@)8B$N%"%/%;%9$r5v$7$?$$$1$l$I!"30$N%M%C%H%o!<%/$N?M$K$O(B
- $B%Q%9%o!<%I$rDs6!$5$;$k$h$&$K$9$k$?$a$K$O!"<!$N$h$&$J@_Dj$r$9$k$3$H$,(B
- $B$G$-$^$9(B:</p>
-
- <example>
- Require valid-user<br />
- Allow from 192.168.1<br />
- Satisfy Any
- </example>
-
-</usage>
- <seealso><directive module="mod_authz_host">Allow</directive></seealso>
- <seealso><directive module="core">Require</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptInterpreterSource</name>
-<description>CGI $B%9%/%j%W%H$N%$%s%?!<%W%j%?$N0LCV$rD4$Y$k$?$a$N<jK!(B</description>
-<syntax>ScriptInterpreterSource Registry|Registry-Strict|Script</syntax>
-<default>ScriptInterpreterSource Script</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Win32 $B$N$_!#(B
-$B%*%W%7%g%s(B <code>Registry-Strict</code> $B$O(B Apache 2.0 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"(BApache $B$G(B CGI $B%9%/%j%W%H$r(B
- $B<B9T$9$k>l9g$KMxMQ$9$k%$%s%?!<%W%j%?$r!"(B
- $B$I$N$h$&$KC5$7=P$9$+$K$D$$$F@)8f$9$k$?$a$K;HMQ$7$^$9!#(B
- $B%G%U%)%k%H$N@_Dj$O(B <code>Script</code> $B$G$9!#$3$l$O%9%/%j%W%H$N(B
- shebang $B9T(B ($B:G=i$N9T$G(B <code>#!</code> $B$+$i;O$^$k$b$N(B)
- $B$K;X$5$l$F$$$k%$%s%?!<%W%j%?$r;HMQ$7$^$9!#(BWin32 $B$G$O$=$N9T$O(B
- $B0J2<$NMM$K$J$j$^$9!#(B</p>
-
- <example>
- #!C:/Perl/bin/perl.exe
- </example>
-
- <p>$B$b$7$/$O!"(Bperl $B$,(B <code>PATH</code> $B$K$"$k>l9g$OC1$K(B:</p>
-
- <example>
- #!perl
- </example>
-
- <p><code>ScriptInterpreterSource Registry</code> $B$r;XDj$9$k$H!"(B
- $B%9%/%j%W%H%U%!%$%k$N3HD%;R(B ($BNc$($P!"(B<code>.pl</code>) $B$r(B
- $B%-!<$H$7$F!"(BWindows $B$N%l%8%9%H%j%D%j!<(B <code>HKEY_CLASSES_ROOT</code>
- $B$r8!:w$9$k$h$&$K$J$j$^$9!#%l%8%9%H%j$N%5%V%-!<(B
- <code>Shell\ExecCGI\Command</code> $B$+!"$=$l$,B8:_$7$J$$>l9g$O(B
- <code>Shell\Open\Command</code> $B$,%9%/%j%W%H%U%!%$%k$r3+$/$?$a$K(B
- $B;H$o$l$^$9!#%l%8%9%H%j%-!<$,8+$D$+$i$J$$$H$-$O!"(BApache $B$O(B <code>Script</code>
- $B%*%W%7%g%s$,;XDj$5$l$?$H$-$NF0:n$KLa$j$^$9!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p><code>ScriptInterpreterSource Registry</code> $B$r(B <directive
- module="mod_alias">ScriptAlias</directive> $B$5$l$?%G%#%l%/%H%j$G;H$&$H$-$O(B
- $BCm0U$7$F$/$@$5$$!#(BApache $B$O$=$N%G%#%l%/%H%jCf$N(B<em>$B$9$Y$F$N(B</em>$B%U%!%$%k$r(B
- $B<B9T$7$h$&$H$7$^$9!#(B<code>Registry</code> $B$H$$$&@_Dj$ODL>o$O<B9T$5$l$J$$(B
- $B%U%!%$%k$KBP$7$FK>$^$7$/$J$$%W%m%0%i%`$N<B9T$,H/@8$9$k2DG=@-$,$"$j$^$9!#(B
- $BNc$($P!"$[$H$s$I$N(B Windows $B%7%9%F%`$G!"(B
- <code>.htm</code> $B%U%!%$%k$N%G%U%)%k%H$N!V3+$/!W%3%^%s%I$O(B
- Microsoft Internet Explorer $B$r<B9T$7$^$9$N$G!"%9%/%j%W%H$K;XDj$5$l$?(B
- $B%G%#%l%/%H%j$K$"$k(B <code>.htm</code> $B%U%!%$%k$X$N%j%/%(%9%H$O%5!<%P$N(B
- $B%P%C%/%0%i%&%s%I$G%V%i%&%6$r<B9T$9$k$3$H$K$J$j$^$9!#$3$l$O!"0lJ,Fb$/$i$$$G(B
- $B%7%9%F%`$r%/%i%C%7%e$5$k$?$a$NNI$$J}K!$G$9!#(B</p>
- </note>
-
- <p>Apache 2.0 $B$+$iF3F~$5$l$?%*%W%7%g%s(B <code>Registry-Strict</code> $B$O(B
- <code>Registry</code> $B$HF1$8$3$H$r9T$J$$$^$9$,!"%5%V%-!<(B
- <code>Shell\ExecCGI\Command</code> $B$N$_$r;H$$$^$9!#(B
- <code>ExecCGI</code> $B%-!<$OIaDL$K;H$o$l$k%-!<$G$O$"$j$^$;$s!#(BWindows
- $B%l%8%9%H%j$K<jF0$G@_Dj$9$kI,MW$,$"$j$^$9$N$G!"%7%9%F%`$G$N6vH/E*$J%W%m%0%i%`$N(B
- $B<B9T$rKI$0$3$H$,$G$-$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAdmin</name>
-<description>$B%5!<%P$,%/%i%$%"%s%H$KAw$k%(%i!<%a%C%;!<%8$K4^$a$kEE;R%a!<%k$N(B
-$B%"%I%l%9(B</description>
-<syntax>ServerAdmin <var>email-address</var>|<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>ServerAdmin</directive> $B$O!"%/%i%$%"%s%H$KJV$9$5$^$6$^$J(B
- $B%(%i!<%a%C%;!<%8Cf$K5-=R$9$k!"(B
- $BLd9g$;%"%I%l%9$r@_Dj$7$^$9!#M?$($i$l$?0z?t$r(B <code>httpd</code> $B$,(B
- URL $B$HG'<1$7$J$$>l9g$O!"(B<var>email-address</var> $B$@$H2r<a$7$F!"(B
- $B%O%$%Q!<%j%s%/$N%?!<%2%C%H$K(B <code>mailto:</code> $B$rIU$1$^$9!#(B
- $B<B:]$K$O!"$3$3$K$OEE;R%a!<%k%"%I%l%9$r;H$&$3$H$,?d>)$5$l$F$$$^$9!#(B
- $BB?$/$N(B CGI $B%9%/%j%W%H$O$=$&$J$C$F$$$k$3$H$r2>Dj$7$F$$$^$9!#(B
- URL $B$r;H$&>l9g$O!"$"$J$?$N4IM}2<$K$"$kJL%5!<%P$r;X$9$h$&$K$7$F$/$@$5$$!#(B
- $B$=$&$G$J$$$H!"%(%i!<$,5/$3$C$?$H$-$KO"Mm$r$9$k$3$H$,$G$-$J$/$J$C$F(B
- $B$7$^$$$^$9!#(B
-</p>
-
- <p>$B$=$N:]!"$3$l$N$?$a$K@lMQ$N%"%I%l%9$r@_Dj$9$k$N$,NI$$$G$7$g$&!#(B
- $BNc$($P!"(B</p>
-
- <example>
- ServerAdmin www-admin@foo.example.com
- </example>
-
- <p>$B$H$$$C$?$h$&$K$7$^$9!#%f!<%6$O$$$D$b%5!<%P$K4X$9$kOC$G$"$k$H$$$&$3$H$r(B
- $BL@5-$7$F$/$k$o$1$G$O$"$j$^$;$s$N$G!#(B</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAlias</name>
-<description>$B%j%/%(%9%H$rL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$K%^%C%A$5$;$F$$$k$H$-$K(B
-$B;HMQ$5$l$k%[%9%H$NJLL>(B</description>
-<syntax>ServerAlias <var>hostname</var> [<var>hostname</var>] ...</syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p><directive>ServerAlias</directive> $B%G%#%l%/%F%#%V$O!"(B<a
- href="../vhosts/name-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>$B$K$*$$$F(B
- $B;HMQ$9$k%[%9%H$NJLL>$r;XDj$7$^$9!#(B</p>
-
- <example>
- &lt;VirtualHost *&gt;<br />
- ServerName server.domain.com<br />
- ServerAlias server server2.domain.com server2<br />
- # ...<br />
- &lt;/VirtualHost&gt;
- </example>
-</usage>
-<seealso><a href="../vhosts/">Apache $B%P!<%A%c%k%[%9%H@bL@=q(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerName</name>
-<description>$B%5!<%P$,<+J,<+?H$r<($9$H$-$K;H$&%[%9%HL>$H%]!<%H(B</description>
-<syntax>ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>$B$3$N%G%#%l%/%F%#%V$O%P!<%8%g%s(B 2.0 $B$G$O%P!<%8%g%s(B 1.3 $B$N(B
- <directive>Port</directive> $B%G%#%l%/%F%#%V$N5!G=$b4^$_$^$9!#(B</compatibility>
-
-<usage>
- <p><directive>ServerName</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%5!<%P$,<+J,<+?H$r<($9%[%9%HL>$H%]!<%H$r@_Dj$7$^$9!#(B
- $B$3$l$O!"%j%@%$%l%/%H$9$k(B URL $B$r@8@.$9$k:]$KMxMQ$5$l$^$9!#(B
- $BNc$($P!"%&%'%V%5!<%P$rF0$+$7$F$$$k%^%7%s$O(B <code>simple.example.com</code>
- $B$G!"(BDNS $B$N%(%$%j%"%9(B <code>www.example.com</code> $B$b$"$k$H$-$K!"(B
- $B%&%'%V%5!<%P$,8e<T$H$7$FG'<1$5$l$FM_$7$$$H$-$O!"0J2<$N$h$&$K%G%#%l%/%F%#%V$r(B
- $B;H$$$^$9!#(B</p>
-
- <example>
- ServerName www.example.com:80
- </example>
-
- <p><directive>ServerName</directive> $B$,;XDj$5$l$F$$$J$$$H$-$O!"(B
- $B%5!<%P$O(B IP $B%"%I%l%9$+$i5U0z$-$r9T$J$&$3$H$G%[%9%HL>$rCN$m$&$H$7$^$9!#(B
- <directive>ServerName</directive> $B$K%]!<%H$,;XDj$5$l$F$$$J$$$H$-$O!"(B
- $B%5!<%P$O%j%/%(%9%H$,Mh$F$$$k(B
- $B%]!<%H$r;H$$$^$9!#:G9b$N?.Mj@-$H3N<B@-$r$b$?$i$9$?$a$K$O!"(B
- <directive>ServerName</directive> $B$r;H$C$F%[%9%HL>$H%]!<%H$rL@<(E*$K(B
- $B;XDj$7$F$/$@$5$$!#(B</p>
-
- <p><a href="../vhosts/name-based.html">$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>
- $B$rMxMQ$7$F$$$k>l9g!"(B<directive type="section" module="core"
- >VirtualHost</directive> $B%;%/%7%g%sFb$N(B
- <directive>ServerName</directive> $B$O$3$N%P!<%A%c%k%[%9%H$K%^%C%A$9$k$?$a$K(B
- $B2?$,%j%/%(%9%H$N(B Host: $B%X%C%@$K8=$l$kI,MW$,$"$k$N$+$r;XDj$7$^$9!#(B</p>
-
- <p>$B<+8J;2>H(B URL ($BNc$($P(B <module>mod_dir</module> $B%b%8%e!<%k$K$h$k$b$N$J$I(B)
- $B$,;XDj$5$l$?%]!<%H$r;H$&$+!"%/%i%$%"%s%H$N%j%/%(%9%H$N%]!<%HHV9f$r;H$&$+$r(B
- $B7hDj$9$k@_Dj$O(B <directive module="core">UseCanonicalName</directive>
- $B%G%#%l%/%F%#%V$r;2>H$7$F$/$@$5$$!#(B</p>
-</usage>
-
-<seealso><a href="../dns-caveats.html">DNS $B$H(B Apache $B$K4X$9$kOC(B</a></seealso>
-<seealso><a href="../vhosts/">Apache $B%P!<%A%c%k%[%9%H@bL@=q(B</a></seealso>
-<seealso><directive module="core">UseCanonicalName</directive></seealso>
-<seealso><directive module="core">NameVirtualHost</directive></seealso>
-<seealso><directive module="core">ServerAlias</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerPath</name>
-<description>$BHs8_49$N%V%i%&%6$,L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$K%"%/%;%9$7$?$H$-$N(B
-$B$?$a$N8_49MQ(B URL $B%Q%9L>(B</description>
-<syntax>ServerPath <var>URL-path</var></syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p><directive>ServerPath</directive> $B%G%#%l%/%F%#%V$O!"(B<a
- href="../vhosts/">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>$B$K$*$$$FMxMQ$9$k(B
- $B8_49MQ(B URL $B%Q%9L>$r@_Dj$7$^$9!#(B</p>
-</usage>
-<seealso><a href="../vhosts/">Apache $B%P!<%A%c%k%[%9%H@bL@=q(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerRoot</name>
-<description>$B%$%s%9%H!<%k$5$l$?%5!<%P$N%Y!<%9%G%#%l%/%H%j(B</description>
-<syntax>ServerRoot <var>directory-path</var></syntax>
-<default>ServerRoot /usr/local/apache</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>ServerRoot</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%5!<%P$,B8:_$9$k%G%#%l%/%H%j$r@_Dj$7$^$9!#(B
- $BDL>o!"(B<code>conf/</code> $B$d(B <code>logs/</code> $B$H$$$C$?%5%V%G%#%l%/%H%j$,(B
- $BB8:_$7$^$9!#(B
- $B$^$?!"B>$N@_Dj%U%!%$%k$K$*$1$kAjBP%Q%9$O!"$3$N%G%#%l%/%H%j$+$i$H$J$j$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ServerRoot /home/httpd
- </example>
-
-
-</usage>
-<seealso><a href="../invoking.html"><code>httpd</code> $B$N(B <code>-d</code>
- $B%*%W%7%g%s(B</a></seealso>
-<seealso><directive>ServerRoot</directive> $B$N8"8B$rE,@Z$K@_Dj$9$kJ}K!$O(B<a
- href="../misc/security_tips.html#serverroot">$B%;%-%e%j%F%#$N$3$D(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerSignature</name>
-<description>$B%5!<%P$,@8@.$9$k%I%-%e%a%s%H$N%U%C%?$r@_Dj(B</description>
-<syntax>ServerSignature On|Off|EMail</syntax>
-<default>ServerSignature Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>All</override>
-
-<usage>
- <p><directive>ServerSignature</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%5!<%P$,@8@.$9$k%I%-%e%a%s%H(B
- ($B%(%i!<%a%C%;!<%8!"(B<module>mod_proxy</module> $B$K$*$1$k(B FTP $B$N%G%#%l%/%H%j%j%9%H!"(B
- <module>mod_info</module> $B$N=PNO!"Ey!9(B)
- $B$N:G2<9T$KIUM?$9$k%U%C%?$N@_Dj$r9T$J$$$^$9!#(B
- $B$=$N$h$&$J%U%C%?9T$rM-8z$K$7$?$$M}M3$K$O!"(B
- $B%W%m%-%7$,J#?tO"$J$C$F$$$k>l9g$K!"%f!<%6$O$I$N%5!<%P$,JV$7$?(B
- $B%(%i!<%a%C%;!<%8$+$rCN$k<jCJ$,$[$H$s$IL5$$$H$$$&$b$N$,$"$j$^$9!#(B</p>
-
-
- <p>$B%G%U%)%k%H$G$"$k(B <code>Off</code> $B$K@_Dj$r$9$k$H!"%U%C%?9T$,M^@)$5$l$^$9(B
- ($B$=$7$F!"(BApache-1.2 $B0JA0$H8_49$NF0:n$r$7$^$9(B)$B!#(B
- <code>On</code> $B$K@_Dj$7$?>l9g$O!"C1$K%I%-%e%a%s%H$NCf$K!"%5!<%P$N%P!<%8%g%s!"(B
- $B2TF0Cf$N%P!<%A%c%k%[%9%H$N(B <a
- href="#servername">ServerName</a> $B$N=q$+$l$?9T$rDI2C$7!"(B
- <code>EMail</code> $B$K$7$?>l9g$O$5$i$K;2>H$5$l$?%I%-%e%a%s%H$KBP$9$k(B <a
- href="#serveradmin">ServerAdmin</a> $B$r;X$9(B "mailto:" $B$,DI2C$5$l$^$9!#(B</p>
-
- <p>$B%P!<%8%g%s(B 2.0.44 $B0J9_$G$O$3$N%G%#%l%/%F%#%V$O(B <directive
- module="core">ServerSignature</directive>
- $B%G%#%l%/%F%#%V$K$h$jI=<($5$l$k>pJs$b@)8f$7$^$9!#(B</p>
-</usage>
-<seealso><directive module="core">ServerTokens</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerTokens</name>
-<description>Server HTTP $B1~Ez%X%C%@$r@_Dj$9$k(B</description>
-<syntax>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</syntax>
-<default>ServerTokens Full</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"%/%i%$%"%s%H$KAw$jJV$9(B <code>Server</code>
- $B1~Ez%X%C%@Fb$K!"%5!<%P$N0lHLE*$J(B OS $B<oJL$d!"(B
- $B%3%s%Q%$%k$5$l$FAH$_9~$^$l$F$$$k%b%8%e!<%k$N>pJs$r(B
- $B4^$a$k$+$I$&$+$r;XDj$7$^$9!#(B</p>
-
- <dl>
- <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
- <dd>$B%5!<%P$O(B ($BNc$($P(B): <code>Server:
- Apache</code> $B$H$$$C$?$h$&$KAw$j$^$9!#(B</dd>
-
- <dt><code>ServerTokens Major</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2</code></dd>
-
- <dt><code>ServerTokens Minor</code></dt>
-
- <dd>Server sends (<em>e.g.</em>): <code>Server:
- Apache/2.0</code></dd>
-
- <dt><code>ServerTokens Min[imal]</code></dt>
-
- <dd>$B%5!<%P$O(B ($BNc$($P(B): <code>Server:
- Apache/2.0.41</code> $B$H$$$C$?$h$&$KAw$j$^$9!#(B</dd>
-
- <dt><code>ServerTokens OS</code></dt>
-
- <dd>$B%5!<%P$O(B ($BNc$($P(B): <code>Server: Apache/2.0.41
- (Unix)</code> $B$H$$$C$?$h$&$KAw$j$^$9!#(B</dd>
-
- <dt><code>ServerTokens Full</code> ($B$b$7$/$OL$;XDj(B)</dt>
-
- <dd>$B%5!<%P$O(B ($BNc$($P(B): <code>Server: Apache/2.0.41
- (Unix) PHP/4.2.2 MyMod/1.2</code> $B$H$$$C$?$h$&$KAw$j$^$9!#(B</dd>
- </dl>
-
- <p>$B$3$N@_Dj$O%5!<%PA4BN$KE,MQ$5$l!"%P!<%A%c%k%[%9%H>e$GM-8z$K$7$?$j(B
- $BL58z$K$7$?$j$O$G$-$^$;$s!#(B</p>
-
- <p>$B%P!<%8%g%s(B 2.0.44 $B0J9_$G$O$3$N%G%#%l%/%F%#%V$O(B <directive
- module="core">ServerSignature</directive>
- $B%G%#%l%/%F%#%V$K$h$jI=<($5$l$k>pJs$b@)8f$7$^$9!#(B</p>
-</usage>
-<seealso><directive module="core">ServerSignature</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetHandler</name>
-<description>$B%^%C%A$9$k%U%!%$%k$,%O%s%I%i$G=hM}$5$l$k$h$&$K$9$k(B</description>
-<syntax>SetHandler <var>handler-name</var>|None</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 2.0 $B$G(B core $B$K0\F0(B</compatibility>
-
-<usage>
- <p><code>.htaccess</code> $B$d(B <directive type="section" module="core"
- >Directory</directive>
- $B%;%/%7%g%s!"(B<directive type="section" module="core">Location</directive>
- $B%;%/%7%g%s$K=q$+$l$?>l9g!"(B
- $B$3$N%G%#%l%/%F%#%V$O$=$3$K$"$k$9$Y$F$N%U%!%$%k$,(B
- <var>handler-name</var> $B$G;XDj$5$l$?(B<a href="../handler.html"
- >$B%O%s%I%i(B</a>$B$G07$o$l$k$3$H$r6/@)$7$^$9!#Nc$($P!"3HD%;R$K4X$o$i$:!"(B
- $B%G%#%l%/%H%jA4BN$,%$%a!<%8%^%C%W%U%!%$%k$H$7$F2r@O$7$FM_$7$$>l9g$K$O!"(B
- $B0J2<$r$=$N%G%#%l%/%H%j$N(B <code>.htaccess</code>
- $B%U%!%$%k$K5-=R$7$^$9(B:</p>
-
- <example>
- SetHandler imap-file
- </example>
-
- <p>$BJL$NNc(B: URL <code>http://servername/status</code>
- $B$,;XDj$5$l$?$H$-$K%5!<%P$,>uBVJs9p$r$9$k$h$&$K$7$?$$$H$-$O!"0J2<$r(B
- <code>httpd.conf</code> $B$K5-=R$7$^$9(B:</p>
-
- <example>
- &lt;Location /status&gt;<br />
- <indent>
- SetHandler server-status<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p><code>None</code> $B$H$$$&CM$r@_Dj$9$k$3$H$G!"(B
- $BA0$NJ}$N(B <directive>SetHandler</directive> $B$GDj5A$5$l$?@_Dj$rL58z$K$9$k$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetInputFilter</name>
-<description>$B%/%i%$%"%s%H$N%j%/%(%9%H$d(B POST $B$NF~NO$r=hM}$9$k%U%#%k%?$r@_Dj$9$k(B</description>
-<syntax>SetInputFilter <var>filter</var>[;<var>filter</var>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>SetInputFilter</directive> $B%G%#%l%/%F%#%V$O%/%i%$%"%s%H$N(B
- $B%j%/%(%9%H$d(B POST $B$NF~NO$r%5!<%P$,<u$1<h$C$?$H$-$K=hM}$9$k%U%#%k%?$r(B
- $B@_Dj$7$^$9!#$3$l$O(B <directive module="mod_mime">AddInputFilter</directive>
- $B%G%#%l%/%F%#%V$r4^$a!"B>$N>l=j$GDj5A$5$l$F$$$k%U%#%k%?$N@_Dj$K(B
- $BDI2C$5$l$^$9!#(B</p>
-
- <p>$BJ#?t$N%U%#%k%?$r;XDj$9$k$H$-$O!"%G!<%?$r=hM}$9$k=gHV$K(B
- $B%;%_%3%m%s$G6h@Z$kI,MW$,$"$j$^$9!#(B</p>
-
-</usage>
-<seealso><a href="../filter.html">$B%U%#%k%?(B</a>$B@bL@=q(B</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetOutputFilter</name>
-<description>$B%5!<%P$N1~Ez$r=hM}$9$k%U%#%k%?$r@_Dj$9$k(B</description>
-<syntax>SetOutputFilter <var>filter</var>[;<var>filter</var>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>SetOutputFilter</directive> $B%G%#%l%/%F%#%V$O(B
- $B%5!<%P$N1~Ez$r%/%i%$%"%s%H$KAw$jJV$5$l$kA0$K=hM}$9$k%U%#%k%?$r@_Dj$7$^$9!#(B
- $B$3$l$O(B <directive module="mod_mime">AddOutputFilter</directive>
- $B%G%#%l%/%F%#%V$r4^$a!"B>$N>l=j$GDj5A$5$l$F$$$k%U%#%k%?$N@_Dj$K(B
- $BDI2C$5$l$^$9!#(B</p>
-
- <p>$BNc$($P!"0J2<$N@_Dj$O(B <code>/www/data/</code> $B%G%#%l%/%H%j$N$9$Y$F$N(B
- $B%U%!%$%k$r(B SSI $B$G=hM}$7$^$9!#(B</p>
-
- <example>
- &lt;Directory /www/data/&gt;<br />
- <indent>
- SetOutputFilter INCLUDES<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$BJ#?t$N%U%#%k%?$r;XDj$9$k$H$-$O!"%G!<%?$r=hM}$9$k=gHV$K(B
- $B%;%_%3%m%s$G6h@Z$kI,MW$,$"$j$^$9!#(B</p>
-</usage>
-<seealso><a href="../filter.html">$B%U%#%k%?(B</a>$B@bL@=q(B</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TimeOut</name>
-<description>$B3F%$%Y%s%H$K$D$$$F!"%j%/%(%9%H$r<:GT$5$;$k$^$G$K%5!<%P$,(B
-$BBT$D;~4V$r@_Dj(B</description>
-<syntax>TimeOut <var>seconds</var></syntax>
-<default>TimeOut 300</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>TimeOut</directive> $B%G%#%l%/%F%#%V$O!"8=:_$N$H$3$m(B
- $B0J2<$N;0$D$NBT$A;~4V$K$D$$$F$NDj5A$r9T$$$^$9(B:</p>
-
- <ol>
- <li>GET $B%j%/%(%9%H$r<u$1<h$k$N$K$+$+$kAm;~4V(B</li>
-
- <li>POST $B$d(B PUT$B%j%/%(%9%H$K$*$$$F!"<!$N(B TCP $B%Q%1%C%H$,FO$/$^$G$NBT$A;~4V(B</li>
-
- <li>$B%l%9%]%s%9$rJV$9:]!"(BTCP $B$N(B ACK $B$,5"$C$F$/$k$^$G$N;~4V(B</li>
- </ol>
-
- <p>$B>-Mh$K$OJL!9$N@_Dj$r$9$k$3$H$,2DG=$K$G$-$k$h$&9MN8Cf$G$9!#(B
- Apache 1.2 $B0JA0$O%?%$%^!<$O(B 1200 $B$,%G%U%)%k%H$G$7$?$,!"(B
- 300 $B$K2<$2$i$l$^$7$?!#(B300 $B$G$b$[$H$s$I$N>l9g$O==J,$9$.$kCM$G$9!#(B
- $B%3!<%ICf$NJQ$J>l=j$K$^$@%Q%1%C%H$rAw$k:]$K%?%$%^$r%j%;%C%H$7$J$$(B
- $B>l=j$,$"$k$+$b$7$l$J$$$N$G!"%G%U%)%k%H$r$h$j>.$5$$CM$K$O$7$F$$$^$;$s!#(B</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UseCanonicalName</name>
-<description>$B%5!<%P$,<+J,<+?H$NL>A0$H%]!<%H$r7hDj$9$kJ}K!$r@_Dj$9$k(B</description>
-<syntax>UseCanonicalName On|Off|Dns</syntax>
-<default>UseCanonicalName On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>$BB?$/$N>u67$G(B Apache $B$O(B<em>$B<+8J;2>H(B</em> URL$B!"$9$J$o$A(B
- $BF1$8%5!<%P$r;X$9(B URL$B!"$r:n@.$9$kI,MW$,$"$j$^$9!#(B
- <code>UseCanonicalName On</code> $B$r;H$&$H(B (1.3 $B$h$jA0$N(B
- $B$9$Y$F$N%P!<%8%g%s$G$b(B) Apache $B$O(B <a
- href="#servername">ServerName</a> $B%G%#%l%/%F%#%V$H(B <a href="#port">Port</a>
- $B%G%#%l%/%F%#%V$r;H$C$F%5!<%P$N@5<0$JL>A0$r:n@.$7$^$9!#(B
- $B$3$NL>A0$,$9$Y$F$N<+8J;2>H(B URL $B$G;H$o$l!"(BCGI $B$N(B <code>SERVER_NAME</code>
- $B$H(B <code>SERVER_PORT</code> $B$K$b;H$o$l$^$9!#(B</p>
-
- <p><code>UseCanonicalName Off</code> $B$G$O(B Apache $B$O(B
- $B%/%i%$%"%s%H$,%[%9%HL>$H%]!<%H$rDs6!$7$?>l9g$K$O<+8J;2>H(B URL $B$r(B
- $B$=$l$i$r85$K:n@.$7$^$9(B ($BDs6!$5$l$F$$$J$$>l9g$O>e$GDj5A$5$l$F$$$k$h$&$K(B
- $B@5<0$JL>A0$r;H$$$^$9(B)$B!#(B
- $B$3$l$i$NCM$O(B<a href="../vhosts/name-based.html">$BL>A0%Y!<%9$N(B
- $B%P!<%A%c%k%[%9%H(B</a>$B$r<BAu$9$k$N$K;H$o$l$F$$$k$N$HF1$8CM$G!"(B
- $BF1$8%/%i%$%"%s%H$+$i<hF@$G$-$kCM$G$9!#(BCGI $BJQ?t(B <code>SERVER_NAME</code>
- $B$H(B <code>SERVER_PORT</code> $B$b%/%i%$%"%s%H$+$iM?$($i$l$?CM$+$i(B
- $B:n@.$5$l$^$9!#(B</p>
-
- <p>$B$3$l$,M-MQ$J>l9g$NNc$O!"%$%s%H%i%M%C%H$N%5!<%P$G!"(B<code>www</code> $B$N(B
- $B$h$&$JC;$$L>A0$G%f!<%6$,%^%7%s$K@\B3$7$F$$$k$H$-$G$9!#(B
- $B%f!<%6$,C;$$L>A0$rF~NO$7$F!"(BURL $B$,(B<em>$B:G8e$N%9%i%C%7%eL5$7$N(B</em>$B%G%#%l%/%H%j(B
- $B$X$N$b$N$G$"$k$H$-$K!"(BApache $B$O%j%/%(%9%H$r(B
- <code>http://www.domain.com/splat/</code> $B$X%j%@%$%l%/%H$9$k$3$H$K(B
- $B5$IU$/$G$7$g$&!#G'>Z$r$9$k$h$&$K@_Dj$7$F$$$k$H!"$3$N>l9g(B
- $B%f!<%6$O(B 2 $B2sG'>Z$r$7$J$1$l$P$J$i$J$/$J$j$^$9(B (<code>www</code> $B$K(B
- $BBP$7$F(B 1 $B2s!"(B<code>www.domain.com</code> $B$KBP$7$F$b$&0l2s(B --
- $B$h$j>\$7$$>pJs$O(B <a
- href="http://httpd.apache.org/docs/misc/FAQ.html#prompted-twice">$B$3$NOCBj$N(B
- FAQ</a> $B$r;2>H$7$F$/$@$5$$(B)$B!#(B
- $B$7$+$7!"(B<directive>UseCanonicalName</directive> $B$,(B <code>Off</code> $B$K$J$C$F$$$k$H!"(B
- Apache $B$O(B <code>htttp://www/splat/</code> $B$K%j%@%$%l%/%H$7$^$9!#(B</p>
-
- <p>$B;0$DL\$N%*%W%7%g%s(B <code>UseCanonicalName DNS</code> $B$O!"(B
- <code>Host:</code> $B%X%C%@$rDs6!$7$J$$8E$$%/%i%$%"%s%H$r%5%]!<%H$7$?(B
- $BBg5,LO$J(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%F%#%s%0$G;HMQ$5$l$k$3$H$r(B
- $B0U?^$7$F$$$^$9!#$3$N%*%W%7%g%s$G$O!"(BApache $B$O%/%i%$%"%s%H$,(B
- $B@\B3$7$?(B IP $B%"%I%l%9$K(B DNS $B$N5U0z$-$r9T$J$C$F<+8J;2>H(B URL $B$r(B
- $B:n@.$7$^$9!#(B</p>
-
- <note type="warning"><title>$B7Y9p(B</title>
- <p>CGI $B$,(B <code>SERVER_NAME</code> $B$K(B
- $B4X$9$k2>Dj$r9T$J$C$F$$$k$H$-$O!"$3$N%*%W%7%g%s$N@_Dj$GF0:n$7$J$/(B
- $B$J$k$+$b$7$l$^$;$s!#%/%i%$%"%s%H$O<B<AE*$K$O%[%9%HL>$K$H$7$F(B
- $B2?$G$bK>$_$NCM$r;XDj$9$k$3$H$,$G$-$^$9!#(BCGI $B$,(B
- <code>SERVER_NAME</code> $B$N$_$r;H$C$F<+8J;2>H(B URL $B$r:n@.$7$F$$$k(B
- $B>l9g$O$I$N@_Dj$r9T$J$C$F$bBg>fIW$J$O$:$G$9!#(B</p></note>
-</usage>
-<seealso><directive module="core">ServerName</directive></seealso>
-<seealso><directive module="mpm_common">Listen</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>VirtualHost</name>
-<description>$BFCDj$N%[%9%HL>$d(B IP $B%"%I%l%9$N$_$KE,MQ$5$l$k%G%#%l%/%F%#%V$r(B
-$B0O$`(B</description>
-<syntax>&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive type="section">VirtualHost</directive> $B5Z$S(B
- <code>&lt;/VirtualHost&gt;</code> $B$O!"(B
- $BFCDj$N%P!<%A%c%k%[%9%H$KBP$7$F$N$_E,MQ$5$l$k%G%#%l%/%F%#%V72$r3g$k(B
- $B$?$a$K;H$o$l$^$9!#(B
- $B%P!<%A%c%k%[%9%H%3%s%F%-%9%H$G5v2D$5$l$kA4$F$N%G%#%l%/%F%#%V$r;XDj2DG=$G$9!#(B
- $B%5!<%P$,!";XDj$5$l$?%P!<%A%c%k%[%9%H$K$"$k%I%-%e%a%s%H$X$N(B
- $B%j%/%(%9%H$r<u$1IU$1$?>l9g!"(B
- <directive type="section">VirtualHost</directive> $B%;%/%7%g%s$NCf$K$"$k(B
- $B%G%#%l%/%F%#%V$,E,MQ$5$l$^$9!#(B
- <var>Addr</var>$B$O!"<!$N$b$N$,MxMQ$G$-$^$9(B:</p>
-
- <ul>
- <li>$B%P!<%A%c%k%[%9%H$N(B IP $B%"%I%l%9(B</li>
-
- <li>$B%P!<%A%c%k%[%9%H$N(B IP $B$KBP1~$9$k40A4$J%I%a%$%sL>(B</li>
-
- <li><code>NameVirtualHost *</code> $B$H6&$K;H$o$l$k!"(B
- $B$9$Y$F$N(B IP $B%"%I%l%9$K%^%C%A$9$kJ8;z(B <code>*</code></li>
-
- <li>IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$GB>$N$b$N$K%^%C%A$7$J$$(B IP $B%"%I%l%9(B
- $B$N$?$a$NJ8;zNs(B <code>_default_</code></li>
- </ul>
-
- <example><title>$BNc(B</title>
- &lt;VirtualHost 10.1.2.3&gt;<br />
- <indent>
- ServerAdmin webmaster@host.foo.com<br />
- DocumentRoot /www/docs/host.foo.com<br />
- ServerName host.foo.com<br />
- ErrorLog logs/host.foo.com-error_log<br />
- TransferLog logs/host.foo.com-access_log<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>IPv6 $B%"%I%l%9$O%*%W%7%g%s$N%]!<%HHV9f$N;XDj$H6hJL$9$k$?$a$K!"(B
- $B3Q3g8L$G3g$C$F;XDj$9$kI,MW$,$"$j$^$9!#<!$O(B IPv6 $B$NNc$G$9(B:</p>
-
- <example>
- &lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
- <indent>
- ServerAdmin webmaster@host.example.com<br />
- DocumentRoot /www/docs/host.example.com<br />
- ServerName host.example.com<br />
- ErrorLog logs/host.example.com-error_log<br />
- TransferLog logs/host.example.com-access_log<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>$B3F!9$N%P!<%A%c%k%[%9%H$K$O$=$l$>$l0c$&(B IP $B%"%I%l%9!"%]!<%HHV9f(B
- $B$b$7$/$O%[%9%HL>$KBP1~$9$kI,MW$,$"$j!"(B
- 1 $BHVL\$N>l9g$K$OJ#?t$N%"%I%l%9$G(B IP $B%Q%1%C%H$r<u?.$G$-$k$h$&$K(B
- $B%5!<%P%^%7%s$r@_Dj$7$J$1$l$P$J$j$^$;$s!#(B
- ($B$b$7!"%^%7%s$,J#?t$N%M%C%H%o!<%/%$%s%?!<%U%'!<%9$H;}$?$J$$>l9g$O!"(B
- (OS$B$,%5%]!<%H$7$F$$$l$P(B) <code>ifconfig alias</code> $B%3%^%s%I$K$h$j(B
- $BC#@.$G$-$^$9(B)$B!#(B</p>
-
- <p><code>:port</code> $B$H$$$C$?7A<0$G5-=R$9$k$3$H$K$h$j!"(B
- $B%^%C%A$5$;$k%]!<%H$rJQ992DG=$G$9!#(B
- $B$3$N;XDj$r$7$J$$>l9g$K$O!"<g%5!<%P@_Dj$K$*$1$k(B
- $B0lHV:G8e$K(B <code><a href="#port">Port</a></code> $B$G;XDj$5$l$?%]!<%H$,(B
- $B%G%U%)%k%H$H$J$j$^$9!#(B
- <code>:*</code> $B$r;XDj$9$k$3$H$K$h$j!"(B
- $B%"%I%l%9>e$NA4$F$N%]!<%H$K%^%C%A$7$^$9!#(B(<code>_default_</code> $B$N$H$-$O(B
- $B$3$l$r;H$&$3$H$,?d>)$5$l$F$$$^$9!#(B)</p>
-
- <p><strong>$B%;%-%e%j%F%#$K4X$7$F(B</strong>:
- $B%5!<%P!<$r5/F0$7$?0J30$N%f!<%6$,%m%0%U%!%$%k$,J]4I$5$l$k%G%#%l%/%H%j$K(B
- $B=q$-9~$_2DG=$J$H$-$K$J$<%;%-%e%j%F%#$,GK$i$l$k2DG=@-$,$"$k$+$N>\:Y$O(B
- <a href="../misc/security_tips.html">$B%;%-%e%j%F%#$K4X$9$k%3%D(B</a> $B$r(B
- $B;2>H$7$F$/$@$5$$!#(B</p>
-
- <note><title>$BCm0UE@(B</title>
- <p><directive type="section">VirtualHost</directive> $B$O(B Apache $B$,(B Listen $B$9$k(B
- IP $B%"%I%l%9$K$O1F6A$rM?$((B<strong>$B$^$;$s(B</strong>$B!#(B
- <directive module="mpm_common">Listen</directive> $B$r(B
- $B;H$C$F(B Apache $B$,@5$7$$%"%I%l%9$r(B listen $B$9$k$h$&$K@_Dj$9$kI,MW$,$"$j$^$9!#(B</p>
- </note>
-
- <p>IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$C$F$$$k>l9g$O!"FCJL$JL>A0(B
- <code>_default_</code> $B$r;XDj$9$k$3$H$,$G$-$^$9!#$=$N>l9g$O(B
- $B$=$N%P!<%A%c%k%[%9%H$OB>$N%P!<%A%c%k%[%9%H$GL@<(E*$K5s$2$i$l$F$$$J$$(B
- $B$9$Y$F$N(B IP $B%"%I%l%9$K%^%C%A$7$^$9!#(B<code>_default_</code> $B%P!<%A%c%k%[%9%H$,L5$$(B
- $B>l9g$K(B IP $B$,%P!<%A%c%k%[%9%H$G;XDj$5$l$?$b$N$K%^%C%A$7$J$$$H$-$O!"(B
- VirtualHost $B%;%/%7%g%s$N30$N$9$Y$F$NDj5A$+$i$J$k!V<g!W%5!<%P@_Dj$,(B
- $B;H$o$l$^$9!#(B($B$?$@$7!"(B<directive
- module="core">NameVirtualHost</directive> $B%G%#%l%/%F%#%V$K%^%C%A$9$k(B
- $B$9$Y$F$N(B IP $B%"%I%l%9$O!V<g!W%5!<%P@_Dj$b(B <code>_default_</code> $B%P!<%A%c%k%[%9%H$b(B
- $B;H$o$J$$$3$H$KCm0U$7$F$/$@$5$$!#>\$7$/$O(B <a
- href="../vhosts/name-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a> $B$r(B
- $B;2>H$7$F$/$@$5$$!#(B)</p>
-
- <p><code>:port</code> $B$H$$$C$?7A<0$G5-=R$9$k$3$H$K$h$j!"(B
- $B%^%C%A$5$;$k%]!<%H$rJQ992DG=$G$9!#(B
- $B$3$N;XDj$r$7$J$$>l9g$K$O!"<g%5!<%P@_Dj$K$*$1$k(B
- $B0lHV:G8e$K(B <directive module="mpm_common">Listen</directive> $B$G;XDj$5$l$?(B
- $B%]!<%H$,%G%U%)%k%H$H$J$j$^$9!#(B
- <code>:*</code> $B$r;XDj$9$k$3$H$K$h$j!"(B
- $B%"%I%l%9>e$NA4$F$N%]!<%H$K%^%C%A$7$^$9!#(B(<code>_default_</code> $B$N$H$-$O(B
- $B$3$l$r;H$&$3$H$,?d>)$5$l$F$$$^$9!#(B)</p>
-
- <p><code>:port</code> $B$H$$$C$?7A<0$G5-=R$9$k$3$H$K$h$j!"(B
- $B%^%C%A$5$;$k%]!<%H$rJQ992DG=$G$9!#(B
- $B$3$N;XDj$r$7$J$$>l9g$K$O!"<g%5!<%P@_Dj$K$*$1$k(B
- $B0lHV:G8e$K(B <code><a href="#port">Port</a></code> $B$G;XDj$5$l$?%]!<%H$,(B
- $B%G%U%)%k%H$H$J$j$^$9!#(B
- <code>:*</code> $B$r;XDj$9$k$3$H$K$h$j!"(B
- $B%"%I%l%9>e$NA4$F$N%]!<%H$K%^%C%A$7$^$9!#(B(<code>_default_</code> $B$N$H$-$O(B
- $B$3$l$r;H$&$3$H$,?d>)$5$l$F$$$^$9!#(B)</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p>$B%5!<%P!<$r5/F0$7$?0J30$N%f!<%6$,%m%0%U%!%$%k$,J]4I$5$l$k%G%#%l%/%H%j$K(B
- $B=q$-9~$_2DG=$J$H$-$K$J$<%;%-%e%j%F%#$,GK$i$l$k2DG=@-$,$"$k$+$N>\:Y$O(B
- <a href="../misc/security_tips.html">$B%;%-%e%j%F%#$K4X$9$k%3%D(B</a> $B$r(B
- $B;2>H$7$F$/$@$5$$!#(B</p></note>
-</usage>
-<seealso><a href="../vhosts/">Apache $B%P!<%A%c%k%[%9%H@bL@=q(B</a></seealso>
-<seealso><a href="../dns-caveats.html">DNS $B$H(B Apache $B$K4X$9$kOC(B</a></seealso>
-<seealso><a href="../bind.html">Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</a></seealso>
-<seealso>$B%j%/%(%9%H$r<u$1$?:]$K$3$l$i$N0[$J$k%;%/%7%g%s$,(B
- $BAH$_9g$o$5$l$kJ}K!$K$D$$$F$O(B <a href="../sections.html">
- &lt;Directory&gt;, &lt;Location&gt;, &lt;Files&gt; $B%;%/%7%g%s$NF0:nK!(B</a></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/core.xml.meta b/docs/manual/mod/core.xml.meta
deleted file mode 100644
index 79ae78c3c4..0000000000
--- a/docs/manual/mod/core.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>core</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant outdated="yes">de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/directive-dict.html b/docs/manual/mod/directive-dict.html
deleted file mode 100644
index 1ed62d36a9..0000000000
--- a/docs/manual/mod/directive-dict.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: directive-dict.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: directive-dict.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: directive-dict.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/directive-dict.html.en b/docs/manual/mod/directive-dict.html.en
deleted file mode 100644
index a34e709f04..0000000000
--- a/docs/manual/mod/directive-dict.html.en
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Terms Used to Describe Directives - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Terms Used to Describe Directives</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/directive-dict.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/directive-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document describes the terms that are used to describe
- each Apache <a href="directives.html">configuration
- directive</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">Description</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Syntax">Syntax</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Default">Default</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Context">Context</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Override">Override</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Status">Status</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Module">Module</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">Compatibility</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="../configuring.html">Configuration files</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Description" id="Description">Description</a></h2>
-
-<p>A brief description of the purpose of the directive.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Syntax" id="Syntax">Syntax</a></h2>
-
- <p>This indicates the format of the directive as it would
- appear in a configuration file. This syntax is extremely
- directive-specific, and is described in detail in the
- directive's definition. Generally, the directive name is
- followed by a series of one or more space-separated arguments.
- If an argument contains a space, the argument must be enclosed
- in double quotes. Optional arguments are enclosed in square
- brackets. Where an argument can take on more than one possible
- value, the possible values are separated by vertical bars "|".
- Literal text is presented in the default font, while
- argument-types for which substitution is necessary are
- <em>emphasized</em>. Directives which can take a variable
- number of arguments will end in "..." indicating that the last
- argument is repeated.</p>
-
- <p>Directives use a great number of different argument types. A
- few common ones are defined below.</p>
-
- <dl>
- <dt><em>URL</em></dt>
-
- <dd>A complete Uniform Resource Locator including a scheme,
- hostname, and optional pathname as in
- <code>http://www.example.com/path/to/file.html</code></dd>
-
- <dt><em>URL-path</em></dt>
-
- <dd>The part of a <em>url</em> which follows the scheme and
- hostname as in <code>/path/to/file.html</code>. The
- <em>url-path</em> represents a web-view of a resource, as
- opposed to a file-system view.</dd>
-
- <dt><em>file-path</em></dt>
-
- <dd>The path to a file in the local file-system beginning
- with the root directory as in
- <code>/usr/local/apache/htdocs/path/to/file.html</code>.
- Unless otherwise specified, a <em>file-path</em> which does
- not begin with a slash will be treated as relative to the <a href="core.html#serverroot">ServerRoot</a>.</dd>
-
- <dt><em>directory-path</em></dt>
-
- <dd>The path to a directory in the local file-system
- beginning with the root directory as in
- <code>/usr/local/apache/htdocs/path/to/</code>.</dd>
-
- <dt><em>filename</em></dt>
-
- <dd>The name of a file with no accompanying path information
- as in <code>file.html</code>.</dd>
-
- <dt><em>regex</em></dt>
-
- <dd>A Perl-compatible <a href="../glossary.html#regex">regular
- expression</a>. The directive definition will specify what the
- <em>regex</em> is matching against.</dd>
-
- <dt><em>extension</em></dt>
-
- <dd>In general, this is the part of the <em>filename</em>
- which follows the last dot. However, Apache recognizes
- multiple filename extensions, so if a <em>filename</em>
- contains more than one dot, each dot-separated part of the
- filename following the first dot is an <em>extension</em>.
- For example, the <em>filename</em> <code>file.html.en</code>
- contains two extensions: <code>.html</code> and
- <code>.en</code>. For Apache directives, you may specify
- <em>extension</em>s with or without the leading dot. In
- addition, <em>extension</em>s are not case sensitive.</dd>
-
- <dt><em>MIME-type</em></dt>
-
- <dd>A method of describing the format of a file which
- consists of a major format type and a minor format type,
- separated by a slash as in <code>text/html</code>.</dd>
-
- <dt><em>env-variable</em></dt>
-
- <dd>The name of an <a href="../env.html">environment
- variable</a> defined in the Apache configuration process.
- Note this is not necessarily the same as an operating system
- environment variable. See the <a href="../env.html">environment variable documentation</a> for
- more details.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Default" id="Default">Default</a></h2>
-
- <p>If the directive has a default value (<em>i.e.</em>, if you
- omit it from your configuration entirely, the Apache Web server
- will behave as though you set it to a particular value), it is
- described here. If there is no default value, this section
- should say "<em>None</em>". Note that the default listed here
- is not necessarily the same as the value the directive takes in
- the default httpd.conf distributed with the server.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Context" id="Context">Context</a></h2>
-
- <p>This indicates where in the server's configuration files the
- directive is legal. It's a comma-separated list of one or more
- of the following values:</p>
-
- <dl>
- <dt>server config</dt>
-
- <dd>This means that the directive may be used in the server
- configuration files (<em>e.g.</em>, <code>httpd.conf</code>), but
- <strong>not</strong> within any
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- or <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- containers. It is not allowed in <code>.htaccess</code> files
- at all.</dd>
-
- <dt>virtual host</dt>
-
- <dd>This context means that the directive may appear inside
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- containers in the server
- configuration files.</dd>
-
- <dt>directory</dt>
-
- <dd>A directive marked as being valid in this context may be
- used inside <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>, and <code class="directive"><a href="../mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> containers
- in the server configuration files, subject to the restrictions
- outlined in <a href="../sections.html">Configuration
- Sections</a>.</dd>
-
- <dt>.htaccess</dt>
-
- <dd>If a directive is valid in this context, it means that it
- can appear inside <em>per</em>-directory
- <code>.htaccess</code> files. It may not be processed, though
- depending upon the <a href="#Override">overrides</a> currently active.</dd>
- </dl>
-
- <p>The directive is <em>only</em> allowed within the designated
- context; if you try to use it elsewhere, you'll get a
- configuration error that will either prevent the server from
- handling requests in that context correctly, or will keep the
- server from operating at all -- <em>i.e.</em>, the server won't
- even start.</p>
-
- <p>The valid locations for the directive are actually the
- result of a Boolean OR of all of the listed contexts. In other
- words, a directive that is marked as being valid in
- "<code>server config, .htaccess</code>" can be used in the
- <code>httpd.conf</code> file and in <code>.htaccess</code>
- files, but not within any <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> or
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- containers.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Override" id="Override">Override</a></h2>
-
- <p>This directive attribute indicates which configuration
- override must be active in order for the directive to be
- processed when it appears in a <code>.htaccess</code> file. If
- the directive's <a href="#Context">context</a>
- doesn't permit it to appear in <code>.htaccess</code> files,
- then no context will be listed.</p>
-
- <p>Overrides are activated by the <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive, and apply
- to a particular scope (such as a directory) and all
- descendants, unless further modified by other
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directives at
- lower levels. The documentation for that directive also lists the
- possible override names available.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Status" id="Status">Status</a></h2>
-
- <p>This indicates how tightly bound into the Apache Web server
- the directive is; in other words, you may need to recompile the
- server with an enhanced set of modules in order to gain access
- to the directive and its functionality. Possible values for
- this attribute are:</p>
-
- <dl>
- <dt>Core</dt>
-
- <dd>If a directive is listed as having "Core" status, that
- means it is part of the innermost portions of the Apache Web
- server, and is always available.</dd>
-
- <dt>MPM</dt>
-
- <dd>A directive labeled as having "MPM" status is provided by
- a <a href="../mpm.html">Multi-Processing Module</a>. This
- type of directive will be available if and only if you are
- using one of the MPMs listed on the <a href="#Module">Module</a> line of the directive
- definition.</dd>
-
- <dt>Base</dt>
-
- <dd>A directive labeled as having "Base" status is supported
- by one of the standard Apache modules which is compiled into
- the server by default, and is therefore normally available
- unless you've taken steps to remove the module from your
- configuration.</dd>
-
- <dt>Extension</dt>
-
- <dd>A directive with "Extension" status is provided by one of
- the modules included with the Apache server kit, but the
- module isn't normally compiled into the server. To enable the
- directive and its functionality, you will need to change the
- server build configuration files and re-compile Apache.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" status indicates that the directive is
- available as part of the Apache kit, but you're on your own
- if you try to use it. The directive is being documented for
- completeness, and is not necessarily supported. The module
- which provides the directive may or may not be compiled in by
- default; check the top of the page which describes the
- directive and its module to see if it remarks on the
- availability.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Module" id="Module">Module</a></h2>
-
- <p>This quite simply lists the name of the source module which
- defines the directive.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Compatibility" id="Compatibility">Compatibility</a></h2>
-
- <p>If the directive wasn't part of the original Apache version
- 2 distribution, the version in which it was introduced should
- be listed here. In addition, if the directive is available
- only on certain platforms, it will be noted here.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/directive-dict.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/directive-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directive-dict.html.ja.euc-jp b/docs/manual/mod/directive-dict.html.ja.euc-jp
deleted file mode 100644
index f142e7cd51..0000000000
--- a/docs/manual/mod/directive-dict.html.ja.euc-jp
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î²òÀâ¤Ë»È¤ï¤ì¤ëÍѸì - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î²òÀâ¤Ë»È¤ï¤ì¤ëÍѸì</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/directive-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/directive-dict.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ï³Æ Apache <a href="directives.html">ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a>
- ¤òÀâÌÀ¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Æ¤¤¤ëÍѸì¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">ÀâÌÀ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Syntax">¹½Ê¸</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Default">¥Ç¥Õ¥©¥ë¥È</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Context">¥³¥ó¥Æ¥­¥¹¥È</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Override">¾å½ñ¤­</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Status">¥¹¥Æ¡¼¥¿¥¹</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Module">¥â¥¸¥å¡¼¥ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">¸ß´¹À­</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="../configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Description" id="Description">ÀâÌÀ</a></h2>
-
-<p>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÌÜŪ¤Î´Êñ¤ÊÀâÌÀ¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Syntax" id="Syntax">¹½Ê¸</a></h2>
-
- <p>ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ñ¼°¤ò¼¨¤·¤Þ¤¹¡£
- ¤³¤Î¹½Ê¸¤Ï¥Ç¥£¥ì¥¯¥Æ¥£¥ÖÆÃÍ­¤Ê¤Î¤Ç¡¢¾ÜºÙ¤Ï¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀâÌÀ¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£°ìÈÌŪ¤Ë¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö̾¤Î¸å¤Ë¤Ï
- ¶õÇò¤Ë¤è¤êʬ³ä¤µ¤ì¤¿¤¤¤¯¤Ä¤«¤Î°ú¿ô¤¬Â³¤­¤Þ¤¹¡£
- °ú¿ô¤¬¶õÇò¤ò´Þ¤à¤È¤­¤ÏÆó½Å°úÍÑÉä (ÌõÃí: ")
- ¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥ª¥×¥·¥ç¥Ê¥ë¤Ê°ú¿ô¤Ï³ç¸Ì
- (ÌõÃí: []) ¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
- °ú¿ô¤¬Ê£¿ô¤ÎÃͤò¼è¤êÆÀ¤ë¾ì¹ç¤Ï¡¢¤½¤ì¤é¤ÎÃͤϿ⾤ÎËÀ "|"
- ¤Ç ʬ³ä¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- Êѹ¹¤µ¤ì¤Ê¤¤¥Æ¥­¥¹¥È¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥©¥ó¥È¤Çɽ¼¨¤µ¤ì¡¢ÃÖ´¹¤ÎɬÍפÊ
- °ú¿ô¤Ï<em>¶¯Ä´¤µ¤ì¤Æ</em>ɽ¼¨¤µ¤ì¤Þ¤¹¡£
- °ú¿ô¤Î¿ô¤¬ÊѤï¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏºÇ¸å¤Î
- °ú¿ô¤¬·«¤êÊÖ¤µ¤ì¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¤Ë "..."
- ¤Ç½ª¤ï¤ê¤Þ¤¹¡£</p>
-
- <p>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¿¤¯¤Î°ã¤¦·¿¤Î°ú¿ô¤ò¤È¤ê¤Þ¤¹¡£¤¤¤¯¤Ä¤«¡¢Îɤ¯
- »È¤ï¤ì¤ë¤â¤Î¤ò°Ê²¼¤ÇÄêµÁ¤·¤Þ¤¹¡£</p>
-
- <dl>
- <dt><em>URL</em></dt>
-
- <dd><code>http://www.example.com/path/to/file.html</code>
- ¤Î¤è¤¦¤Ë¡¢
- ¥¹¥­¡¼¥à¡¢¥Û¥¹¥È̾¡¢¥Ñ¥¹Ì¾(¾Êά²Äǽ)¤ò´Þ¤ó¤Ç¤¤¤ë´°Á´¤Ê
- Uniform Resource Locator¡£</dd>
-
- <dt><em>URL-path</em></dt>
-
- <dd><code>/path/to/file.html</code> ¤Î¤è¤¦¤Ë¡¢¥¹¥­¡¼¥à¤È
- ¥Û¥¹¥È̾¤Î¸å¤Ë³¤¯ <em>url</em>
- ¤Î°ìÉô¡£<em>url-path</em> ¤Ï
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤«¤é¤Î»ëÅÀ¤Ç¤Ï¤Ê¤¯¡¢
- ¥¦¥§¥Ö¤«¤é¤Î»ëÅÀ¤Ç¥ê¥½¡¼¥¹¤òɽ¸½¤·¤Þ¤¹¡£</dd>
-
- <dt><em>file-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/file.html</code>
- ¤Î¤è¤¦¤Ë¡¢
- ¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê¤«¤é»Ï¤Þ¤ë¥í¡¼¥«¥ë¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹¡£
- Ä̾¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤é¤Ê¤¤ <em>file-path</em> ¤Ï <a href="core.html#serverroot">ServerRoot</a>
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ °·¤ï¤ì¤Þ¤¹¡£</dd>
-
- <dt><em>directory-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/</code>
- ¤Î¤è¤¦¤Ë¡¢
- ¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê¤«¤é»Ï¤Þ¤ë¥í¡¼¥«¥ë¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î
- ¥Ñ¥¹¡£</dd>
-
- <dt><em>filename</em></dt>
-
- <dd><code>file.html</code> ¤Î¤è¤¦¤Ë¡¢¥Ñ¥¹¾ðÊó¤ÎÉÕ¤¤¤Æ¤¤¤Ê¤¤
- ¥Õ¥¡¥¤¥ë̾¡£</dd>
-
- <dt><em>regex</em></dt>
-
- <dd>Perl ¸ß´¹¤Î<a href="../glossary.html#regex">Àµµ¬É½¸½</a>¤Ç¤¹¡£
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÄêµÁ¤¬ <em>regex</em>
- ¤¬²¿¤ËÂФ·¤Æ¥Þ¥Ã¥Á¤ò¹Ô¤Ê¤¦¤Î¤«¤ò»ØÄꤷ¤Þ¤¹¡£</dd>
-
- <dt><em>extension</em></dt>
-
- <dd>°ìÈÌŪ¤Ë¤Ï <em>filename</em>
- ¤ÎºÇ¸å¤Î¥É¥Ã¥È¤Î¸å¤ÎÉôʬ¤Ç¤¹¡£ ¤·¤«¤·¡¢Apache
- ¤ÏÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤òǧ¼±¤·¤Þ¤¹¤Î¤Ç¡¢<em>filename</em>
- ¤ËÊ£¿ô¤Î¥É¥Ã¥È¤¬¤¢¤ë¤È¡¢ºÇ½é¤Î¥É¥Ã¥È¤Î¸å¤Î¡¢¤½¤ì¤¾¤ì¤Î¥É¥Ã¥È¤ÇʬΥ¤µ¤ì¤¿Éôʬ¤¬
- <em>extension</em> (ÌõÃí: ³ÈÄ¥»Ò)
- ¤Ë¤Ê¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢<em>filename</em>
- <code>file.html.en</code>
- ¤Ë¤ÏÆó¤Ä¤Î³ÈÄ¥»Ò¤¬¤¢¤ê¤Þ¤¹¡£<code>.html</code> ¤È
- <code>.en</code> ¤Ç¤¹¡£Apache
- ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï¡¢<em>extension</em>
- ¤Ï¥É¥Ã¥ÈÉÕ¤­¤Ç¤â̵¤·¤Ç¤â»ØÄê¤Ç¤­¤Þ¤¹¡£¤µ¤é¤Ë¡¢<em>extension</em>
- ¤Ï Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£</dd>
-
- <dt><em>MIME-type</em></dt>
-
- <dd><code>text/html</code> ¤Î¤è¤¦¤Ë¡¢¥¹¥é¥Ã¥·¥å¤ÇʬΥ¤µ¤ì¤¿
- ¼ç¥Õ¥©¡¼¥Þ¥Ã¥È¤ÈÉû¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë¤è¤Ã¤Æ¥Õ¥¡¥¤¥ë¤Î·Á¼°¤ò
- ɽ¤¹ÊýË¡¤Ç¤¹¡£</dd>
-
- <dt><em>env-variable</em></dt>
-
- <dd>Apache ¤ÎÀßÄê¤Ë¤è¤êÄêµÁ¤µ¤ì¤ë <a href="../env.html">´Ä¶­ÊÑ¿ô</a>¤Î̾Á°¤Ç¤¹¡£¤³¤ì¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î
- ´Ä¶­ÊÑ¿ô¤ÈƱ¤¸¤È¤Ï¸Â¤é¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¾ÜºÙ¤Ï <a href="../env.html">´Ä¶­ÊÑ¿ô¤ÎÀâÌÀ</a>¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</dd>
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Default" id="Default">¥Ç¥Õ¥©¥ë¥È</a></h2>
-
- <p>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¥Ç¥Õ¥©¥ë¥ÈÃÍ
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤«¤é
- ¾Êά¤µ¤ì¤Æ¤¤¤Æ¤â¡¢Apache
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤ÏÆÃÄê¤ÎÃͤËÀßÄꤵ¤ì¤Æ¤¤¤ë¤«¤Î¤è¤¦¤Ë
- Æ°ºî¤·¤Þ¤¹) ¤¬¤¢¤ë¾ì¹ç¤Ï¤³¤³¤Ëµ­½Ò¤µ¤ì¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃͤÎ̵¤¤¾ì¹ç¡¢¤³¤³¤Ï "<em>None</em>" ¤È
- ½ñ¤«¤ì¤Þ¤¹¡£¤³¤³¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥Ç¥Õ¥©¥ë¥È¤Ï¥µ¡¼¥Ð¤È¶¦¤ËÇÛÉÛ¤µ¤ì¤Æ¤¤¤ë
- ¥Ç¥Õ¥©¥ë¥È¤Î httpd.conf
- Æâ¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃͤÈ
- °ã¤¦²ÄǽÀ­¤¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Context" id="Context">¥³¥ó¥Æ¥­¥¹¥È</a></h2>
-
- <p>
- ¤³¤ì¤Ï¡¢¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î¤É¤³¤Ç¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ê¤Î¤«¤ò¼¨¤·¤Þ¤¹¡£
- ¼¡¤Ë¼¨¤¹Ãͤ¬°ì¤Ä°Ê¾å¥«¥ó¥Þ¶èÀÚ¤ê¤ÇÎóµó¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <dl>
- <dt>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</dt>
-
- <dd>¤³¤ì¤Ï¡¢¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë
- (<em>Î㤨¤Ð</em>¡¢<code>httpd.conf</code>,
- <code>srm.conf</code>, <code>access.conf</code>)
- Æâ¤Ç¤Ï»ÈÍѤǤ­¤Þ¤¹¤¬¡¢
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¤ä
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¤ÎÃæ¤Ç¤Ï
- <strong>»ÈÍѤǤ­¤Ê¤¤</strong>¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- <code>.htaccess</code>¥Õ¥¡¥¤¥ë¤Ç¤Î»ÈÍѤϵö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</dd>
-
- <dt>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</dt>
-
- <dd>¤³¤ì¤Ï¡¢¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤Î
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤ÎÃæ¤Ç»ÈÍѤǤ­¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£</dd>
-
- <dt>¥Ç¥£¥ì¥¯¥È¥ê</dt>
-
- <dd>¤³¤ì¤Ï¡¢¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤Î
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>,
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>,
- <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>,
- <code class="directive"><a href="../mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- ¥³¥ó¥Æ¥Ê¤ÎÃæ¤Ç¡¢ <a href="../sections.html">ÀßÄꥻ¥¯¥·¥ç¥ó</a>
- ¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ëÀ©¸Â¤Î²¼¤Ç»ÈÍѤǤ­¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£</dd>
-
- <dt>.htaccess</dt>
-
- <dd>¤³¤ì¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê<em>Ëè</em>¤Î
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ëÆâ¤Ç
- »ÈÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£ ¤¿¤À¡¢<a href="#Override">¾å½ñ¤­</a>
- ¤ÎÀßÄê¤Ë¤è¤Ã¤Æ¤Ï¡¢½èÍý¤µ¤ì¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£</dd>
- </dl>
-
- <p>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï»Ø¼¨¤µ¤ì¤¿¥³¥ó¥Æ¥­¥¹¥È¤Ç<em>¤Î¤ß</em>µö²Ä¤µ¤ì¤Þ¤¹¡£
- ¾¤Î¾ì½ê¤Ç»È¤ª¤¦¤È¤¹¤ë¤È¡¢¥µ¡¼¥Ð¤¬¤½¤Î¥³¥ó¥Æ¥­¥¹¥È¤òÀµ¤·¤¯°·¤¨¤Ê¤¯
- ¤Ê¤ë¤è¤¦¤ÊÀßÄꥨ¥é¡¼¤¬È¯À¸¤¹¤ë¤«¡¢¥µ¡¼¥Ð¤¬¤Þ¤Ã¤¿¤¯Æ°ºî¤·¤Ê¤¯¤Ê¤ë¡¢
- <em>¤¹¤Ê¤ï¤Á</em>¡¢¥µ¡¼¥Ð¤¬µ¯Æ°¤·¤Ê¤¯¤Ê¤ë¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍ­¸ú¤Ê°ÌÃ֤ϡ¢¼ÂºÝ¤Ïµó¤²¤é¤ì¤Æ¤¤¤ë¥³¥ó¥Æ¥­¥¹¥È¤Î
- ÏÀÍýÏÂ (ÌõÃí: Boolen OR)
- ¤Ë¤Ê¤ê¤Þ¤¹¡£¸À¤¤´¹¤¨¤ë¤È¡¢
- "<code>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¡¢.htaccess</code>" ¤ÇÍ­¸ú¤À¤È
- µ­¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>httpd.conf</code>
- ¥Õ¥¡¥¤¥ë¤È <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤È¤ÇÍ­¸ú¤Ç¤¹¤¬¡¢ <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¤ä <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤ÎÃæ¤Ç¤Ï»ÈÍѤǤ­¤Þ¤»¤ó¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Override" id="Override">¾å½ñ¤­</a></h2>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°À­¤Ï¡¢<code>.htaccess</code>
- ¥Õ¥¡¥¤¥ëÃæ¤Ë
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¸½¤ì¤¿¤È¤­¤Ë¡¢¤½¤ì¤Î½èÍý¤òÍ­¸ú¤Ë¤¹¤ë¤¿¤á¤Ë
- ¤É¤ÎÀßÄê¤Î¾å½ñ¤­¤¬É¬Íפ«¤ò¼¨¤·¤Þ¤¹¡£ ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- <a href="#Context">¥³¥ó¥Æ¥­¥¹¥È</a>
- ¤¬¡¢<code>.htaccess</code>
- ¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ïµö²Ä¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢ ¤³¤Î°À­¤Ï
- "<em>ŬÍÑÉÔ²Ä</em>" ¤È½ñ¤«¤ì¤Þ¤¹¡£</p>
-
- <p>¾å½ñ¤­¤Ï¡¢<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤ÆÍ­¸ú¤Ë¤µ¤ì¡¢
- ÆÃÄê¤Î¥¹¥³¡¼¥×(¥Ç¥£¥ì¥¯¥È¥ê¤Ê¤É)¤È¡¢
- ¤µ¤é¤Ë²¼°Ì¤Î¥ì¥Ù¥ë¤Î <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- ¤Ç½¤Àµ¤µ¤ì¤Ê¤¤¸Â¤ê¡¢ ¤½¤ÎÇÛ²¼¤ËÂФ·¤ÆŬÍѤµ¤ì¤Þ¤¹¡£
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥É¥­¥å¥á¥ó¥È¤Ï¼è¤êÆÀ¤ë¾å½ñ¤­¤Î̾Á°¤âµó¤²¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Status" id="Status">¥¹¥Æ¡¼¥¿¥¹</a></h2>
-
- <p>¤³¤ì¤Ï¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ Apache
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ë¤É¤ì¤¯¤é¤¤¤­¤Ä¤¯ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤«¤ò
- ¼¨¤·¤Þ¤¹¡£¸À¤¤´¹¤¨¤ì¤Ð¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤½¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¡¢
- ¥â¥¸¥å¡¼¥ë¤Î¿ô¤òÁý¤ä¤·¤Æ¡¢¥µ¡¼¥Ð¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Ê¤¤
- ¤È¤¤¤¦¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- ¤³¤Î°À­¤¬¼è¤êÆÀ¤ëÃͤϰʲ¼¤Î¤â¤Î¤Ç¤¹:</p>
-
- <dl>
- <dt>Core</dt>
-
- <dd>"Core" ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤Î´ðËܤȤʤë¤Ù¤­¤â¤Î¤Ç¤¢¤ê¡¢
- ¾ï¤Ë»ÈÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£</dd>
-
- <dt>MPM</dt>
-
- <dd>"MPM" ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï<a href="../mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</a>¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Î¼ïÎà¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÄêµÁ¤Î<a href="#Module">¥â¥¸¥å¡¼¥ë</a>¤Î¹Ô¤Ë»È¤Ã¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Î̾Á°¤¬½ñ¤«¤ì¤Æ¤¤¤ë
- ¾ì¹ç¤Ë¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£</dd>
-
- <dt>Base</dt>
-
- <dd>"Base" ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥Ç¥Õ¥©¥ë¥È¤Ç¥µ¡¼¥Ð¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ëɸ½à¥â¥¸¥å¡¼¥ë¤ÎÃæ¤Î°ì¤Ä¤Ç¥µ
- ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Æ¡¢¤ï¤¶¤ï¤¶ÀßÄ꤫¤é¥â¥¸¥å¡¼¥ë¤òºï½ü¤·¤¿¤È¤­¤ò½ü¤¤¤Æ¡¢
- Ä̾ï¤Ç¤Ï»ÈÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£</dd>
-
- <dt>Extension</dt>
-
- <dd>"Extension" ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢ Apache
- ¥µ¡¼¥Ð¤ÎÇÛÉÛʪ¤ËƱº­¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Î°ì¤Ä¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Î¡¢
- Ä̾ï¤Ç¤Ï¥µ¡¼¥Ð¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤½¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢¥µ¡¼¥Ð¥Ó¥ë¥ÉÍѤÎÀßÄê¥Õ¥¡¥¤¥ë¤ò
- Êѹ¹¤·¤Æ Apache
- ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Apache
- ÇÛÉÛʪ¤Ë
- Ʊº­¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Î¡¢»î¤·¤¿¤¤¾ì¹ç¤Ï¼«¸ÊÀÕǤ¤Ç¹Ô¤Ê¤¦
- ɬÍפ¬¤¢¤ë¤È¤¤¤¦¤³¤È¤ò¼¨¤·¤Þ¤¹¡£¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¤¹¤Ù¤Æ¤Î¥É¥­¥å¥á¥ó¥È¤ò
- ´°Á´¤Ë¤½¤í¤ï¤»¤ë¤¿¤á¤Ë²òÀ⤵¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÄ󶡤¹¤ë¥â¥¸¥å¡¼¥ë¤Ï¥Ç¥Õ¥©¥ë¥È¤ÇÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤«¤â
- ¤·¤ì¤Þ¤»¤ó¤·¡¢¤½¤¦¤Ç¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£»ÈÍѲÄǽ¤«¤É¤¦¤«¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¥â¥¸¥å¡¼¥ë¤ÎÀâÌÀ¤ò¤·¤Æ¤¤¤ë¥Ú¡¼¥¸¤ÎÀèƬ¤òÄ´¤Ù¤Æ¤¯¤À¤µ¤¤¡£</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Module" id="Module">¥â¥¸¥å¡¼¥ë</a></h2>
-
- <p>
- ¤³¤ì¤Ïñ½ã¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Î̾Á°¤òµ­ºÜ¤·¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Compatibility" id="Compatibility">¸ß´¹À­</a></h2>
-
- <p>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ Apache 2
- ¤ÎÇÛÉÛ¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Æ³Æþ¤µ¤ì¤¿¥Ð¡¼¥¸¥ç¥ó¤¬¤³¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤Þ¤¿¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ÆÃÄê¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤Î¤ß¸ºß¤¹¤ë¤È¤­¤â
- ¤³¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/directive-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/directive-dict.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directive-dict.html.ko.euc-kr b/docs/manual/mod/directive-dict.html.ko.euc-kr
deleted file mode 100644
index fa3c9ad1ed..0000000000
--- a/docs/manual/mod/directive-dict.html.ko.euc-kr
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥ »ç¿ëÇÑ ¿ë¾îµé - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥ »ç¿ëÇÑ ¿ë¾îµé</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/directive-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/directive-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directive-dict.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ <a href="directives.html">¼³Á¤
- Áö½Ã¾î</a>¸¦ ¼³¸íÇϴµ¥ »ç¿ëÇÑ ¿ë¾îµéÀ» ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">¼³¸í (Description)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Syntax">¹®¹ý (Syntax)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Default">±âº»°ª (Default)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Context">»ç¿ëÀå¼Ò (Context)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Override">Override ¿É¼Ç (Override)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Status">»óÅÂ (Status)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Module">¸ðµâ (Module)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">Áö¿ø (Compatibility)</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="../configuring.html">¼³Á¤ÆÄÀÏ</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Description" id="Description">¼³¸í (Description)</a></h2>
-
-<p>Áö½Ã¾îÀÇ ¸ñÀû¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸í.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Syntax" id="Syntax">¹®¹ý (Syntax)</a></h2>
-
- <p>¼³Á¤ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ Áö½Ã¾îÀÇ Çü½ÄÀ» ¾Ë·ÁÁØ´Ù. ÀÌ ¹®¹ýÀº
- Áö½Ã¾î¸¶´Ù ¸Å¿ì ´Ù¸£¸ç, Áö½Ã¾î¸¦ Á¤ÀÇÇÒ ¶§¸¶´Ù ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.
- ÀϹÝÀûÀ¸·Î Áö½Ã¾î À̸§ µÚ¿¡ °ø¹éÀ¸·Î ±¸ºÐÇÑ ¾Æ±Ô¸ÕÆ®µéÀÌ
- ³ª¿Â´Ù. ¾Æ±Ô¸ÕÆ®°¡ °ø¹éÀ» Æ÷ÇÔÇÑ´Ù¸é ¾Æ±Ô¸ÕÆ®¸¦ ½Öµû¿ÈÇ¥·Î
- ¹­¾î¾ß ÇÑ´Ù. ¼±ÅÃÀûÀÎ ¾Æ±Ô¸ÕÆ®´Â Áß°ýÈ£·Î ¹­´Â´Ù. ¾Æ±Ô¸ÕÆ®°¡
- ¿©·¯ °ªÁß ÇϳªÀÏ °æ¿ì °ªµéÀ» ¼öÁ÷¸·´ë "|"·Î ±¸ºÐÇÑ´Ù.
- ¹®ÀÚ±×´ë·Î »ç¿ëÇÒ ºÎºÐÀº ±âº» ¹®ÀÚü·Î ¾²°í, ´ëüÇÒ ¾Æ±Ô¸ÕÆ®´Â
- <em>°­Á¶ÇÑ´Ù</em>. ¾Æ±Ô¸ÕÆ® °³¼ö°¡ Á¤ÇØÁöÁö¾ÊÀº Áö½Ã¾î´Â
- ¸¶Áö¸· ¾Æ±Ô¸ÕÆ®°¡ ¹Ýº¹µÊÀ» ³ªÅ¸³»´Â "..."À¸·Î ³¡³­´Ù.</p>
-
- <p>Áö½Ã¾î´Â ¸Å¿ì ´Ù¾çÇÑ Á¾·ùÀÇ ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ´Â´Ù. ÀÌÁß ÀÚÁÖ
- »ç¿ëÇÏ´Â °ÍÀº ¾Æ·¡¿Í °°´Ù.</p>
-
- <dl>
- <dt><em>URL</em></dt>
-
- <dd><code>http://www.example.com/path/to/file.html</code>°ú
- °°ÀÌ ½ºÅ´(scheme), È£½ºÆ®¸í, ¼±ÅÃÀûÀÎ °æ·Î¸íÀ» Æ÷ÇÔÇÑ
- ¿ÏÀüÇÑ Uniform Resource Locator</dd>
-
- <dt><em>URL-path</em></dt>
-
- <dd><code>/path/to/file.html</code>°ú °°ÀÌ <em>url</em>¿¡¼­
- ½ºÅ´°ú È£½ºÆ®¸í µÚ¿¡ ³ª¿À´Â ºÎºÐ. <em>url-path</em>´Â
- ÆÄÀϽýºÅÛ¿¡¼­ º» ½ÃÁ¡ÀÌ ¾Æ´Ñ À¥¿¡¼­ º» ½ÃÁ¡¿¡¼­ÀÇ ÀڷḦ
- ³ªÅ¸³½´Ù.</dd>
-
- <dt><em>file-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/file.html</code>°ú
- °°ÀÌ root µð·ºÅ丮·Î ½ÃÀÛÇÏ´Â ÆÄÀϽýºÅÛ»óÀÇ ÆÄÀÏ °æ·Î. µû·Î
- ¾ð±ÞÇÏÁö¾ÊÀ¸¸é, ½½·¡½¬·Î ½ÃÀÛÇÏÁö¾ÊÀº <em>file-path</em>´Â
- <a href="core.html#serverroot">ServerRoot</a>¿¡ »ó´ë°æ·Î·Î
- Ãë±ÞÇÑ´Ù.</dd>
-
- <dt><em>directory-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/</code>¿Í °°ÀÌ
- root µð·ºÅ丮·Î ½ÃÀÛÇÏ´Â ÆÄÀϽýºÅÛ»óÀÇ µð·ºÅ丮 °æ·Î.</dd>
-
- <dt><em>filename</em></dt>
-
- <dd><code>file.html</code>°ú °°ÀÌ °æ·Î Á¤º¸°¡ ¾ø´Â ÆÄÀϸí.</dd>
-
- <dt><em>regex</em></dt>
-
- <dd>Perl Çü½ÄÀÇ <a href="../glossary.html#regex">Á¤±ÔÇ¥Çö½Ä(regular
- expression)</a>. Áö½Ã¾î´Â <em>regex</em>·Î ¹«¾ùÀΰ¡¸¦ °Ë»öÇÑ´Ù.</dd>
-
- <dt><em>extension</em></dt>
-
- <dd>ÀϹÝÀûÀ¸·Î <em>filename</em>¿¡¼­ ¸¶Áö¸· ¸¶Ä§Ç¥ µÚ¿¡
- ³ª¿À´Â ºÎºÐÀÌ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡´Â ¿©·¯ È®ÀåÀÚ¸¦ ÀνÄÇÒ
- ¼ö Àֱ⶧¹®¿¡, <em>filename</em>¿¡ ¸¶Ä§Ç¥°¡ ¿©·¯°³ Æ÷ÇÔµÈ
- °æ¿ì ¸¶Ä§Ç¥·Î ±¸ºÐµÈ ¸ðµç ºÎºÐÀ» <em>È®ÀåÀÚ(extension)</em>·Î
- ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î, <em>ÆÄÀϸí</em> <code>file.html.en</code>Àº
- <code>.html</code>°ú <code>.en</code>À̶ó´Â µÎ°¡Áö È®ÀåÀÚ¸¦
- °¡Áø´Ù. ¾ÆÆÄÄ¡ Áö½Ã¾î¿¡¼­ <em>extension</em>¿¡ ÁöÁ¤ÇÑ
- °ª ¾Õ¿¡ ¸¶Ä§Ç¥°¡ À־ µÇ°í ¾ø¾îµµ µÈ´Ù. ¶Ç,
- <em>extension</em>Àº ´ë¼Ò¹®ÀÚ¸¦ °¡¸®Áö¾Ê´Â´Ù.</dd>
-
- <dt><em>MIME-type</em></dt>
-
- <dd><code>text/html</code>°ú °°ÀÌ ½½·¡½¬·Î major format
- type°ú minor format type¸¦ ±¸ºÐÇÏ¿© ÆÄÀÏÀÇ Çü½ÄÀ» ¼³¸íÇÏ´Â
- ¹æ½Ä.</dd>
-
- <dt><em>env-variable</em></dt>
-
- <dd>¾ÆÆÄÄ¡ ¼³Á¤¿¡¼­ Á¤ÀÇÇÑ <a href="../env.html">ȯ°æº¯¼ö</a>
- À̸§. ¿î¿µÃ¼Á¦ÀÇ È¯°æº¯¼ö¿Í ´Ù¸§À» ÁÖÀÇÇ϶ó. ÀÚ¼¼ÇÑ ³»¿ëÀº
- <a href="../env.html">ȯ°æº¯¼ö ¹®¼­</a>¸¦ Âü°íÇ϶ó.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Default" id="Default">±âº»°ª (Default)</a></h2>
-
- <p>Áö½Ã¾î¿¡ ±âº»°ªÀÌ ÀÖ´Ù¸é (<em>¿¹¸¦ µé¾î</em>, ¼³Á¤¿¡¼­
- Áö½Ã¾î¸¦ »ý·«ÇÑ °æ¿ì ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌ °ªÀ» »ç¿ëÇÑ´Ù.)
- ÀÌ Ç׸ñ¿¡ ³ª¿Â´Ù. ±âº»°ªÀÌ ¾ø´Ù¸é ÀÌ Ç׸ñÀº
- "<em>None</em>"À̾î¾ß ÇÑ´Ù. ±âº»°ªÀÌ ¼­¹ö¿¡ Æ÷ÇÔµÈ ±âº»
- httpd.confÀÇ Áö½Ã¾î °ª°ú ´Ù¸¦ ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Context" id="Context">»ç¿ëÀå¼Ò (Context)</a></h2>
-
- <p>¼­¹öÀÇ ¼³Á¤ÆÄÀÏÁß ¾î´À°÷¿¡¼­ Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö
- ¾Ë·ÁÁØ´Ù. ´ÙÀ½ °ªµéÀ» ½°Ç¥·Î ±¸ºÐÇÑ ¸ñ·ÏÀÌ´Ù:</p>
-
- <dl>
- <dt>ÁÖ¼­¹ö¼³Á¤ (server config)</dt>
-
- <dd>Áö½Ã¾î¸¦ ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡¼­ (<em>¿¹¸¦ µé¾î</em>,
- <code>httpd.conf</code>) »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª, <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>³ª
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>¿¡¼­
- »ç¿ëÇÒ ¼ö <strong>¾øÀ½À»</strong> ¶æÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­µµ »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt>°¡»óÈ£½ºÆ® (virtual host)</dt>
-
- <dd>Áö½Ã¾î¸¦ ¼­¹ö ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¾È¿¡¼­ »ç¿ëÇÒ ¼ö
- ÀÖÀ½À» ¶æÇÑ´Ù.</dd>
-
- <dt>µð·ºÅ丮 (directory)</dt>
-
- <dd>Áö½Ã¾î°¡ <a href="../sections.html">¼½¼Ç ¼³Á¤</a>¿¡
- ¼³¸íÇÑ Á¦¾àÀ» µû¸£¸ç, ¼­¹ö ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="../mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>¿¡¼­
- »ç¿ëÇÒ ¼ö ÀÖÀ½À» ¶æÇÑ´Ù.</dd>
-
- <dt>.htaccess</dt>
-
- <dd>Áö½Ã¾î¸¦ µð·ºÅ丮<em>º°</em> <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÀ½À» ¶æÇÑ´Ù. ÀÌ Áö½Ã¾î´Â ÇöÀç »ç¿ëÇÏ´Â
- <a href="#Override">overrides</a> °ª¿¡ µû¶ó ¹«½ÃµÉ ¼ö
- ÀÖ´Ù.</dd>
- </dl>
-
- <p>Áö½Ã¾î´Â ÁöÁ¤µÈ Àå¼Ò¿¡¼­<em>¸¸</em> »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥
- °÷¿¡¼­ »ç¿ëÇÏ¸é ¼³Á¤¿À·ù°¡ ¹ß»ýÇÏ°í ¼­¹ö´Â ºÎºÐ¿¡ ´ëÇÑ ¿äûÀ»
- ¿Ã¹Ù·Î ó¸®ÇÏÁö ¸øÇϰųª ÀÛµ¿ÀÌ, <em>¿¹¸¦ µé¾î</em> ½ÃÀÛÁ¶Â÷µµ,
- ¾ÈµÉ ¼ö ÀÖ´Ù.</p>
-
- <p>Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â Àå¼Ò´Â ¿­°ÅÇÑ Àå¼Ò¸¦ ¸ðµÎ
- ºÒ¸°(boolean) ORÇÑ °á°úÀÌ´Ù. Áï,
- "<code>server config, .htaccess</code>"¿¡¼­ °¡´ÉÇÏ´Ù´Â
- Áö½Ã¾î´Â <code>httpd.conf</code> ÆÄÀÏ°ú <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­´Â »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>³ª <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Override" id="Override">Override ¿É¼Ç (Override)</a></h2>
-
- <p>ÀÌ Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÏ·Á¸é
- ¾î¶² override ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö¸¦ ³ªÅ¸³½´Ù. Áö½Ã¾îÀÇ
- <a href="#Context">»ç¿ëÀå¼Ò</a>°¡ Áö½Ã¾î¸¦ <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù°í ÇÑ´Ù¸é ¾î¶² »ç¿ëÀå¼Òµµ ³ª¿ÀÁö
- ¾Ê´Â´Ù.</p>
-
- <p>Overrides´Â <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> Áö½Ã¾î·Î Áö½ÃÇÏ°í,
- (µð·ºÅ丮 µîÀÇ) ƯÁ¤ ¹üÀ§¿Í ÇÏÀ§ ¹üÀ§¿¡¼­ ´Ù¸¥ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> Áö½Ã¾î·Î ´Ù¸¥ °ªÀ»
- ¼³Á¤ÇÏÁö¾Ê¾Ò´Ù¸é ÇÏÀ§ ¹üÀ§¿¡µµ ±×´ë·Î Àû¿ëµÈ´Ù. Áö½Ã¾î ¼³¸í¿¡
- »ç¿ë°¡´ÉÇÑ override À̸§µéÀÌ ³ª¿Â´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Status" id="Status">»óÅÂ (Status)</a></h2>
-
- <p>Áö½Ã¾î°¡ ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ ¾ó¸¶³ª ±ä¹ÐÈ÷ ¹­¿©ÀÖ´ÂÁö¸¦
- ³ªÅ¸³½´Ù. Áï, ±× Áö½Ã¾î³ª ±â´ÉÀ» »ç¿ëÇϱâÀ§ÇØ ¼­¹ö¸¦
- ¸ðµâ°ú °°ÀÌ ´Ù½Ã ÄÄÆÄÀÏÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¼öµµ ÀÖ´Ù.
- °¡´ÉÇÑ °ªÀº ´ÙÀ½°ú °°´Ù:</p>
-
- <dl>
- <dt>Core</dt>
-
- <dd>Áö½Ã¾î°¡ "Core" »óŸ¦ °¡Áö¸é, Áö½Ã¾î°¡ ¾ÆÆÄÄ¡ À¥¼­¹ö
- Çٽɺκп¡ ¼ÓÇÏ°í Ç×»ó »ç¿ë°¡´ÉÇÔÀ» ¶æÇÑ´Ù.</dd>
-
- <dt>MPM</dt>
-
- <dd>"MPM" »óÅÂÀÎ Áö½Ã¾î´Â <a href="../mpm.html">´ÙÁßó¸®
- ¸ðµâ</a>À» Á¦°øÇÑ´Ù. ÀÌ·± Áö½Ã¾î´Â Áö½Ã¾î ¼³¸í¿¡¼­ <a href="#Module">¸ðµâ</a>¿¡ ¿­°ÅµÈ MPMÁß Çϳª¸¦ »ç¿ëÇÒ¶§¸¸
- °¡´ÉÇÏ´Ù.</dd>
-
- <dt>Base</dt>
-
- <dd>±âº»ÀûÀ¸·Î ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵǹǷΠÁ÷Á¢ ±¸¼º¿¡¼­
- ¸ðµâÀ» Á¦°ÅÇÏÁö ¾Ê¾Ò´Ù¸é ÀϹÝÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ Ç¥ÁØ ¾ÆÆÄÄ¡
- ¸ðµâÀÌ Á¦°øÇÏ´Â Áö½Ã¾î´Â "Base" »óÅÂÀÌ´Ù.</dd>
-
- <dt>Extension</dt>
-
- <dd>¾ÆÆÄÄ¡ ¼­¹ö ¹èÆ÷º»¿¡´Â Æ÷ÇÔµÇÀÖÁö¸¸ º¸Åë ¼­¹ö¿Í °°ÀÌ
- ÄÄÆÄÀϵÇÁö¾Ê´Â ¸ðµâÀÌ Á¦°øÇÏ´Â Áö½Ã¾î´Â "Extension" »óÅÂÀÌ´Ù.
- ÀÌ·± Áö½Ã¾î¸¦ »ç¿ëÇÏ·Á¸é ¼­¹ö ÄÄÆÄÀÏ ±¸¼ºÆÄÀÏÀ» ¼öÁ¤ÇÏ°í
- ¾ÆÆÄÄ¡¸¦ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental"Àº Áö½Ã¾î°¡ ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖÁö¸¸,
- »ç¿ëÀº ÀÚ½ÅÀÇ Ã¥ÀÓÀÓÀ» ³ªÅ¸³½´Ù. Áö½Ã¾î´Â ¹®¼­È­µÇÀÖÁö¸¸,
- ½ÇÁ¦¿Í ´Ù¸¦ ¼ö ÀÖ´Ù. Áö½Ã¾î¸¦ Á¦°øÇÏ´Â ¸ðµâÀº ±âº»ÀûÀ¸·Î
- ¾ÆÆÄÄ¡¿Í °°ÀÌ ÄÄÆÄÀ쵃 ¼öµµ ¾ÈµÉ ¼öµµ ÀÖ´Ù. Áö½Ã¾î¿Í ¸ðµâÀ»
- ¼³¸íÇÏ´Â ¹®¼­ ¾Õ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö »ìÆìºÁ¶ó.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Module" id="Module">¸ðµâ (Module)</a></h2>
-
- <p>´Ü¼øÈ÷ Áö½Ã¾î¸¦ Á¤ÀÇÇÑ ¼Ò½º ¸ðµâ¸íÀ» ¿­°ÅÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Compatibility" id="Compatibility">Áö¿ø (Compatibility)</a></h2>
-
- <p>Áö½Ã¾î°¡ ¿ø·¡ ¾ÆÆÄÄ¡ ¹öÀü 2 ¹èÆ÷º»ÀÇ ÀϺΰ¡ ¾Æ´Ï¿´´Ù¸é,
- Áö½Ã¾î¸¦ Ãß°¡Çϱ⠽ÃÀÛÇÑ ¹öÀüÀÌ ¿©±â ³ª¿Â´Ù. ¶Ç, ¾î¶²
- Ç÷¡Æû¿¡¼­¸¸ »ç¿ë°¡´ÉÇÑ Áö½Ã¾îµµ ¿©±â ³ª¿Â´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/directive-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/directive-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directive-dict.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directive-dict.xml b/docs/manual/mod/directive-dict.xml
deleted file mode 100644
index b5c86431f7..0000000000
--- a/docs/manual/mod/directive-dict.xml
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="directive-dict.xml.meta">
-
- <title>Terms Used to Describe Directives</title>
-
-<summary>
- <p>This document describes the terms that are used to describe
- each Apache <a href="directives.html">configuration
- directive</a>.</p>
-</summary>
-<seealso><a href="../configuring.html">Configuration files</a></seealso>
-
-<section id="Description"><title>Description</title>
-
-<p>A brief description of the purpose of the directive.</p>
-</section>
-
-<section id="Syntax"><title>Syntax</title>
-
- <p>This indicates the format of the directive as it would
- appear in a configuration file. This syntax is extremely
- directive-specific, and is described in detail in the
- directive's definition. Generally, the directive name is
- followed by a series of one or more space-separated arguments.
- If an argument contains a space, the argument must be enclosed
- in double quotes. Optional arguments are enclosed in square
- brackets. Where an argument can take on more than one possible
- value, the possible values are separated by vertical bars "|".
- Literal text is presented in the default font, while
- argument-types for which substitution is necessary are
- <em>emphasized</em>. Directives which can take a variable
- number of arguments will end in "..." indicating that the last
- argument is repeated.</p>
-
- <p>Directives use a great number of different argument types. A
- few common ones are defined below.</p>
-
- <dl>
- <dt><em>URL</em></dt>
-
- <dd>A complete Uniform Resource Locator including a scheme,
- hostname, and optional pathname as in
- <code>http://www.example.com/path/to/file.html</code></dd>
-
- <dt><em>URL-path</em></dt>
-
- <dd>The part of a <em>url</em> which follows the scheme and
- hostname as in <code>/path/to/file.html</code>. The
- <em>url-path</em> represents a web-view of a resource, as
- opposed to a file-system view.</dd>
-
- <dt><em>file-path</em></dt>
-
- <dd>The path to a file in the local file-system beginning
- with the root directory as in
- <code>/usr/local/apache/htdocs/path/to/file.html</code>.
- Unless otherwise specified, a <em>file-path</em> which does
- not begin with a slash will be treated as relative to the <a
- href="core.html#serverroot">ServerRoot</a>.</dd>
-
- <dt><em>directory-path</em></dt>
-
- <dd>The path to a directory in the local file-system
- beginning with the root directory as in
- <code>/usr/local/apache/htdocs/path/to/</code>.</dd>
-
- <dt><em>filename</em></dt>
-
- <dd>The name of a file with no accompanying path information
- as in <code>file.html</code>.</dd>
-
- <dt><em>regex</em></dt>
-
- <dd>A Perl-compatible <a href="../glossary.html#regex">regular
- expression</a>. The directive definition will specify what the
- <em>regex</em> is matching against.</dd>
-
- <dt><em>extension</em></dt>
-
- <dd>In general, this is the part of the <em>filename</em>
- which follows the last dot. However, Apache recognizes
- multiple filename extensions, so if a <em>filename</em>
- contains more than one dot, each dot-separated part of the
- filename following the first dot is an <em>extension</em>.
- For example, the <em>filename</em> <code>file.html.en</code>
- contains two extensions: <code>.html</code> and
- <code>.en</code>. For Apache directives, you may specify
- <em>extension</em>s with or without the leading dot. In
- addition, <em>extension</em>s are not case sensitive.</dd>
-
- <dt><em>MIME-type</em></dt>
-
- <dd>A method of describing the format of a file which
- consists of a major format type and a minor format type,
- separated by a slash as in <code>text/html</code>.</dd>
-
- <dt><em>env-variable</em></dt>
-
- <dd>The name of an <a href="../env.html">environment
- variable</a> defined in the Apache configuration process.
- Note this is not necessarily the same as an operating system
- environment variable. See the <a
- href="../env.html">environment variable documentation</a> for
- more details.</dd>
- </dl>
-</section>
-
-<section id="Default"><title>Default</title>
-
- <p>If the directive has a default value (<em>i.e.</em>, if you
- omit it from your configuration entirely, the Apache Web server
- will behave as though you set it to a particular value), it is
- described here. If there is no default value, this section
- should say "<em>None</em>". Note that the default listed here
- is not necessarily the same as the value the directive takes in
- the default httpd.conf distributed with the server.</p>
-</section>
-
-<section id="Context"><title>Context</title>
-
- <p>This indicates where in the server's configuration files the
- directive is legal. It's a comma-separated list of one or more
- of the following values:</p>
-
- <dl>
- <dt>server config</dt>
-
- <dd>This means that the directive may be used in the server
- configuration files (<em>e.g.</em>, <code>httpd.conf</code>), but
- <strong>not</strong> within any
- <directive module="core" type="section">VirtualHost</directive>
- or <directive module="core" type="section">Directory</directive>
- containers. It is not allowed in <code>.htaccess</code> files
- at all.</dd>
-
- <dt>virtual host</dt>
-
- <dd>This context means that the directive may appear inside
- <directive module="core" type="section">VirtualHost</directive>
- containers in the server
- configuration files.</dd>
-
- <dt>directory</dt>
-
- <dd>A directive marked as being valid in this context may be
- used inside <directive module="core"
- type="section">Directory</directive>, <directive type="section"
- module="core">Location</directive>, <directive module="core"
- type="section">Files</directive>, and <directive
- module="mod_proxy" type="section">Proxy</directive> containers
- in the server configuration files, subject to the restrictions
- outlined in <a href="../sections.html">Configuration
- Sections</a>.</dd>
-
- <dt>.htaccess</dt>
-
- <dd>If a directive is valid in this context, it means that it
- can appear inside <em>per</em>-directory
- <code>.htaccess</code> files. It may not be processed, though
- depending upon the <a href="#Override"
- >overrides</a> currently active.</dd>
- </dl>
-
- <p>The directive is <em>only</em> allowed within the designated
- context; if you try to use it elsewhere, you'll get a
- configuration error that will either prevent the server from
- handling requests in that context correctly, or will keep the
- server from operating at all -- <em>i.e.</em>, the server won't
- even start.</p>
-
- <p>The valid locations for the directive are actually the
- result of a Boolean OR of all of the listed contexts. In other
- words, a directive that is marked as being valid in
- "<code>server config, .htaccess</code>" can be used in the
- <code>httpd.conf</code> file and in <code>.htaccess</code>
- files, but not within any <directive module="core"
- type="section">Directory</directive> or
- <directive module="core" type="section">VirtualHost</directive>
- containers.</p>
-</section>
-
-<section id="Override"><title>Override</title>
-
- <p>This directive attribute indicates which configuration
- override must be active in order for the directive to be
- processed when it appears in a <code>.htaccess</code> file. If
- the directive's <a href="#Context" >context</a>
- doesn't permit it to appear in <code>.htaccess</code> files,
- then no context will be listed.</p>
-
- <p>Overrides are activated by the <directive
- module="core">AllowOverride</directive> directive, and apply
- to a particular scope (such as a directory) and all
- descendants, unless further modified by other
- <directive module="core">AllowOverride</directive> directives at
- lower levels. The documentation for that directive also lists the
- possible override names available.</p>
-</section>
-
-<section id="Status"><title>Status</title>
-
- <p>This indicates how tightly bound into the Apache Web server
- the directive is; in other words, you may need to recompile the
- server with an enhanced set of modules in order to gain access
- to the directive and its functionality. Possible values for
- this attribute are:</p>
-
- <dl>
- <dt>Core</dt>
-
- <dd>If a directive is listed as having "Core" status, that
- means it is part of the innermost portions of the Apache Web
- server, and is always available.</dd>
-
- <dt>MPM</dt>
-
- <dd>A directive labeled as having "MPM" status is provided by
- a <a href="../mpm.html">Multi-Processing Module</a>. This
- type of directive will be available if and only if you are
- using one of the MPMs listed on the <a
- href="#Module">Module</a> line of the directive
- definition.</dd>
-
- <dt>Base</dt>
-
- <dd>A directive labeled as having "Base" status is supported
- by one of the standard Apache modules which is compiled into
- the server by default, and is therefore normally available
- unless you've taken steps to remove the module from your
- configuration.</dd>
-
- <dt>Extension</dt>
-
- <dd>A directive with "Extension" status is provided by one of
- the modules included with the Apache server kit, but the
- module isn't normally compiled into the server. To enable the
- directive and its functionality, you will need to change the
- server build configuration files and re-compile Apache.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" status indicates that the directive is
- available as part of the Apache kit, but you're on your own
- if you try to use it. The directive is being documented for
- completeness, and is not necessarily supported. The module
- which provides the directive may or may not be compiled in by
- default; check the top of the page which describes the
- directive and its module to see if it remarks on the
- availability.</dd>
- </dl>
-</section>
-
-<section id="Module"><title>Module</title>
-
- <p>This quite simply lists the name of the source module which
- defines the directive.</p>
-</section>
-
-<section id="Compatibility"><title>Compatibility</title>
-
- <p>If the directive wasn't part of the original Apache version
- 2 distribution, the version in which it was introduced should
- be listed here. In addition, if the directive is available
- only on certain platforms, it will be noted here.</p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/mod/directive-dict.xml.ja b/docs/manual/mod/directive-dict.xml.ja
deleted file mode 100644
index 56ec721d26..0000000000
--- a/docs/manual/mod/directive-dict.xml.ja
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="directive-dict.xml.meta">
-
- <title>$B%G%#%l%/%F%#%V$N2r@b$K;H$o$l$kMQ8l(B</title>
-
-<summary>
- <p>$B$3$NJ8=q$O3F(B Apache <a href="directives.html">$B@_Dj%G%#%l%/%F%#%V(B</a>
- $B$r@bL@$9$k$?$a$K;H$o$l$F$$$kMQ8l$r@bL@$7$^$9!#(B</p>
-</summary>
-<seealso><a href="../configuring.html">$B@_Dj%U%!%$%k(B</a></seealso>
-
-<section id="Description"><title>$B@bL@(B</title>
-
-<p>$B%G%#%l%/%F%#%V$NL\E*$N4JC1$J@bL@!#(B</p>
-</section>
-
-<section id="Syntax"><title>$B9=J8(B</title>
-
- <p>$B@_Dj%U%!%$%kCf$N%G%#%l%/%F%#%V$N=q<0$r<($7$^$9!#(B
- $B$3$N9=J8$O%G%#%l%/%F%#%VFCM-$J$N$G!">\:Y$O%G%#%l%/%F%#%V$N@bL@$r(B
- $B;2>H$7$F$/$@$5$$!#0lHLE*$K!"%G%#%l%/%F%#%VL>$N8e$K$O(B
- $B6uGr$K$h$jJ,3d$5$l$?$$$/$D$+$N0z?t$,B3$-$^$9!#(B
- $B0z?t$,6uGr$r4^$`$H$-$OFs=E0zMQId(B ($BLuCm(B: ")
- $B$G0O$^$l$F$$$^$9!#(B $B%*%W%7%g%J%k$J0z?t$O3g8L(B
- ($BLuCm(B: []) $B$G0O$^$l$F$$$^$9!#(B
- $B0z?t$,J#?t$NCM$r<h$jF@$k>l9g$O!"$=$l$i$NCM$O?bD>$NK@(B "|"
- $B$G(B $BJ,3d$5$l$F$$$^$9!#(B
- $BJQ99$5$l$J$$%F%-%9%H$O%G%U%)%k%H$N%U%)%s%H$GI=<($5$l!"CV49$NI,MW$J(B
- $B0z?t$O(B<em>$B6/D4$5$l$F(B</em>$BI=<($5$l$^$9!#(B
- $B0z?t$N?t$,JQ$o$k%G%#%l%/%F%#%V$O:G8e$N(B
- $B0z?t$,7+$jJV$5$l$k$3$H$r<($9$?$a$K(B "..."
- $B$G=*$o$j$^$9!#(B</p>
-
- <p>
- $B%G%#%l%/%F%#%V$OB?$/$N0c$&7?$N0z?t$r$H$j$^$9!#$$$/$D$+!"NI$/(B
- $B;H$o$l$k$b$N$r0J2<$GDj5A$7$^$9!#(B</p>
-
- <dl>
- <dt><em>URL</em></dt>
-
- <dd><code>http://www.example.com/path/to/file.html</code>
- $B$N$h$&$K!"(B
- $B%9%-!<%`!"%[%9%HL>!"%Q%9L>(B($B>JN,2DG=(B)$B$r4^$s$G$$$k40A4$J(B
- Uniform Resource Locator$B!#(B</dd>
-
- <dt><em>URL-path</em></dt>
-
- <dd><code>/path/to/file.html</code> $B$N$h$&$K!"%9%-!<%`$H(B
- $B%[%9%HL>$N8e$KB3$/(B <em>url</em>
- $B$N0lIt!#(B<em>url-path</em> $B$O(B
- $B%U%!%$%k%7%9%F%`$+$i$N;kE@$G$O$J$/!"(B
- $B%&%'%V$+$i$N;kE@$G%j%=!<%9$rI=8=$7$^$9!#(B</dd>
-
- <dt><em>file-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/file.html</code>
- $B$N$h$&$K!"(B
- $B%k!<%H%G%#%l%/%H%j$+$i;O$^$k%m!<%+%k$N%U%!%$%k%7%9%F%`>e$N%U%!%$%k$X$N%Q%9!#(B
- $BDL>o!"%9%i%C%7%e$G;O$^$i$J$$(B <em>file-path</em> $B$O(B <a
- href="core.html#serverroot">ServerRoot</a>
- $B$+$i$NAjBP%Q%9$H$7$F(B $B07$o$l$^$9!#(B</dd>
-
- <dt><em>directory-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/</code>
- $B$N$h$&$K!"(B
- $B%k!<%H%G%#%l%/%H%j$+$i;O$^$k%m!<%+%k$N%U%!%$%k%7%9%F%`$N%G%#%l%/%H%j$X$N(B
- $B%Q%9!#(B</dd>
-
- <dt><em>filename</em></dt>
-
- <dd><code>file.html</code> $B$N$h$&$K!"%Q%9>pJs$NIU$$$F$$$J$$(B
- $B%U%!%$%kL>!#(B</dd>
-
- <dt><em>regex</em></dt>
-
- <dd>Perl $B8_49$N(B<a href="../glossary.html#regex">$B@55,I=8=(B</a>$B$G$9!#(B
- $B%G%#%l%/%F%#%V$NDj5A$,(B <em>regex</em>
- $B$,2?$KBP$7$F%^%C%A$r9T$J$&$N$+$r;XDj$7$^$9!#(B</dd>
-
- <dt><em>extension</em></dt>
-
- <dd>$B0lHLE*$K$O(B <em>filename</em>
- $B$N:G8e$N%I%C%H$N8e$NItJ,$G$9!#(B $B$7$+$7!"(BApache
- $B$OJ#?t$N%U%!%$%k$N3HD%;R$rG'<1$7$^$9$N$G!"(B<em>filename</em>
- $B$KJ#?t$N%I%C%H$,$"$k$H!":G=i$N%I%C%H$N8e$N!"$=$l$>$l$N%I%C%H$GJ,N%$5$l$?ItJ,$,(B
- <em>extension</em> ($BLuCm(B: $B3HD%;R(B)
- $B$K$J$j$^$9!#Nc$($P!"(B<em>filename</em>
- <code>file.html.en</code>
- $B$K$OFs$D$N3HD%;R$,$"$j$^$9!#(B<code>.html</code> $B$H(B
- <code>.en</code> $B$G$9!#(BApache
- $B$N%G%#%l%/%F%#%V$G$O!"(B<em>extension</em>
- $B$O%I%C%HIU$-$G$bL5$7$G$b;XDj$G$-$^$9!#$5$i$K!"(B<em>extension</em>
- $B$O(B $BBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B</dd>
-
- <dt><em>MIME-type</em></dt>
-
- <dd><code>text/html</code> $B$N$h$&$K!"%9%i%C%7%e$GJ,N%$5$l$?(B
- $B<g%U%)!<%^%C%H$HI{%U%)!<%^%C%H$K$h$C$F%U%!%$%k$N7A<0$r(B
- $BI=$9J}K!$G$9!#(B</dd>
-
- <dt><em>env-variable</em></dt>
-
- <dd>Apache $B$N@_Dj$K$h$jDj5A$5$l$k(B <a
- href="../env.html">$B4D6-JQ?t(B</a>$B$NL>A0$G$9!#$3$l$O%*%Z%l!<%F%#%s%0%7%9%F%`$N(B
- $B4D6-JQ?t$HF1$8$H$O8B$i$J$$$3$H$KCm0U$7$F$/$@$5$$!#>\:Y$O(B <a
- href="../env.html">$B4D6-JQ?t$N@bL@(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</dd>
- </dl>
- </section>
-
-<section id="Default"><title>$B%G%U%)%k%H(B</title>
-
- <p>$B%G%#%l%/%F%#%V$K%G%U%)%k%HCM(B
- (<em>$B$9$J$o$A(B</em>$B!"@_Dj%U%!%$%k$+$i(B
- $B>JN,$5$l$F$$$F$b!"(BApache
- $B%&%'%V%5!<%P$OFCDj$NCM$K@_Dj$5$l$F$$$k$+$N$h$&$K(B
- $BF0:n$7$^$9(B) $B$,$"$k>l9g$O$3$3$K5-=R$5$l$^$9!#(B
- $B%G%U%)%k%HCM$NL5$$>l9g!"$3$3$O(B "<em>None</em>" $B$H(B
- $B=q$+$l$^$9!#$3$3$G=q$+$l$F$$$k%G%U%)%k%H$O%5!<%P$H6&$KG[I[$5$l$F$$$k(B
- $B%G%U%)%k%H$N(B httpd.conf
- $BFb$K=q$+$l$F$$$k%G%#%l%/%F%#%V$NCM$H(B
- $B0c$&2DG=@-$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-</section>
-
-<section id="Context"><title>$B%3%s%F%-%9%H(B</title>
-
- <p>
- $B$3$l$O!"%5!<%P$N@_Dj%U%!%$%kCf$N$I$3$G%G%#%l%/%F%#%V$,M-8z$J$N$+$r<($7$^$9!#(B
- $B<!$K<($9CM$,0l$D0J>e%+%s%^6h@Z$j$GNs5s$5$l$F$$$^$9!#(B</p>
-
- <dl>
- <dt>$B%5!<%P@_Dj%U%!%$%k(B</dt>
-
- <dd>$B$3$l$O!"%5!<%P@_Dj%U%!%$%k(B
- (<em>$BNc$($P(B</em>$B!"(B<code>httpd.conf</code>,
- <code>srm.conf</code>, <code>access.conf</code>)
- $BFb$G$O;HMQ$G$-$^$9$,!"(B
- <directive module="core" type="section">VirtualHost</directive> $B$d(B
- <directive module="core" type="section">Directory</directive> $B$NCf$G$O(B
- <strong>$B;HMQ$G$-$J$$(B</strong>$B$3$H$r<($7$^$9!#(B
- <code>.htaccess</code>$B%U%!%$%k$G$N;HMQ$O5v2D$5$l$F$$$^$;$s!#(B</dd>
-
- <dt>$B%P!<%A%c%k%[%9%H(B</dt>
-
- <dd>$B$3$l$O!"%5!<%P@_Dj%U%!%$%k$N(B
- <directive module="core" type="section">VirtualHost</directive>
- $B$NCf$G;HMQ$G$-$k$3$H$r<($7$^$9!#(B</dd>
-
- <dt>$B%G%#%l%/%H%j(B</dt>
-
- <dd>$B$3$l$O!"%5!<%P@_Dj%U%!%$%k$N(B
- <directive module="core" type="section">Directory</directive>,
- <directive module="core" type="section">Location</directive>,
- <directive module="core" type="section">Files</directive>,
- <directive module="mod_proxy" type="section">Proxy</directive>
- $B%3%s%F%J$NCf$G!"(B <a
- href="../sections.html">$B@_Dj%;%/%7%g%s(B</a>
- $B$G@bL@$5$l$F$$$k@)8B$N2<$G;HMQ$G$-$k$3$H$r<($7$^$9!#(B</dd>
-
- <dt>.htaccess</dt>
-
- <dd>$B$3$l$O!"%G%#%l%/%H%j(B<em>$BKh(B</em>$B$N(B
- <code>.htaccess</code> $B%U%!%$%kFb$G(B
- $B;HMQ2DG=$G$"$k$3$H$r<($7$^$9!#(B $B$?$@!"(B<a
- href="#Override">$B>e=q$-(B</a>
- $B$N@_Dj$K$h$C$F$O!"=hM}$5$l$J$$$+$b$7$l$^$;$s!#(B</dd>
- </dl>
-
- <p>
- $B%G%#%l%/%F%#%V$O;X<($5$l$?%3%s%F%-%9%H$G(B<em>$B$N$_(B</em>$B5v2D$5$l$^$9!#(B
- $BB>$N>l=j$G;H$*$&$H$9$k$H!"%5!<%P$,$=$N%3%s%F%-%9%H$r@5$7$/07$($J$/(B
- $B$J$k$h$&$J@_Dj%(%i!<$,H/@8$9$k$+!"%5!<%P$,$^$C$?$/F0:n$7$J$/$J$k!"(B
- <em>$B$9$J$o$A(B</em>$B!"%5!<%P$,5/F0$7$J$/$J$k$H$$$&$3$H$K$J$j$^$9!#(B</p>
-
- <p>
- $B%G%#%l%/%F%#%V$NM-8z$J0LCV$O!"<B:]$O5s$2$i$l$F$$$k%3%s%F%-%9%H$N(B
- $BO@M}OB(B ($BLuCm(B: Boolen OR)
- $B$K$J$j$^$9!#8@$$49$($k$H!"(B
- "<code>$B%5!<%P@_Dj%U%!%$%k!"(B.htaccess</code>" $B$GM-8z$@$H(B
- $B5-$5$l$F$$$k%G%#%l%/%F%#%V$O(B <code>httpd.conf</code>
- $B%U%!%$%k$H(B <code>.htaccess</code>
- $B%U%!%$%k$H$GM-8z$G$9$,!"(B <directive module="core"
- type="section">Directory</directive>
- $B$d(B <directive module="core" type="section">VirtualHost</directive>
- $B$NCf$G$O;HMQ$G$-$^$;$s!#(B</p>
-</section>
-
-<section id="Override"><title>$B>e=q$-(B</title>
-
- <p>$B$3$N%G%#%l%/%F%#%V$NB0@-$O!"(B<code>.htaccess</code>
- $B%U%!%$%kCf$K(B
- $B%G%#%l%/%F%#%V$,8=$l$?$H$-$K!"$=$l$N=hM}$rM-8z$K$9$k$?$a$K(B
- $B$I$N@_Dj$N>e=q$-$,I,MW$+$r<($7$^$9!#(B $B%G%#%l%/%F%#%V$N(B
- <a href="#Context">$B%3%s%F%-%9%H(B</a>
- $B$,!"(B<code>.htaccess</code>
- $B%U%!%$%kCf$G$O5v2D$7$F$$$J$$>l9g$O!"(B $B$3$NB0@-$O(B
- "<em>$BE,MQIT2D(B</em>" $B$H=q$+$l$^$9!#(B</p>
-
- <p>$B>e=q$-$O!"(B<directive module="core">AllowOverride</directive>
- $B%G%#%l%/%F%#%V$K$h$C$FM-8z$K$5$l!"(B
- $BFCDj$N%9%3!<%W(B($B%G%#%l%/%H%j$J$I(B)$B$H!"(B
- $B$5$i$K2<0L$N%l%Y%k$N(B <directive module="core">AllowOverride</directive>
- $B$G=$@5$5$l$J$$8B$j!"(B $B$=$NG[2<$KBP$7$FE,MQ$5$l$^$9!#(B
- $B%G%#%l%/%F%#%V$N%I%-%e%a%s%H$O<h$jF@$k>e=q$-$NL>A0$b5s$2$^$9!#(B</p>
-</section>
-
-<section id="Status"><title>$B%9%F!<%?%9(B</title>
-
- <p>$B$3$l$O%G%#%l%/%F%#%V$,(B Apache
- $B%&%'%V%5!<%P$K$I$l$/$i$$$-$D$/AH$_9~$^$l$F$$$k$+$r(B
- $B<($7$^$9!#8@$$49$($l$P!"%G%#%l%/%F%#%V$H$=$N5!G=$rMxMQ$9$k$?$a$K!"(B
- $B%b%8%e!<%k$N?t$rA}$d$7$F!"%5!<%P$r:F%3%s%Q%$%k$9$kI,MW$,$"$k$+$b$7$l$J$$(B
- $B$H$$$&$3$H$r<($7$^$9!#(B
- $B$3$NB0@-$,<h$jF@$kCM$O0J2<$N$b$N$G$9(B:</p>
-
- <dl>
- <dt>Core</dt>
-
- <dd>"Core" $B$N%G%#%l%/%F%#%V$O(B Apache
- $B%&%'%V%5!<%P$N4pK\$H$J$k$Y$-$b$N$G$"$j!"(B
- $B>o$K;HMQ2DG=$G$"$k$3$H$r<($7$^$9!#(B</dd>
-
- <dt>MPM</dt>
-
- <dd>"MPM" $B$N%G%#%l%/%F%#%V$O(B<a
- href="../mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a>$B$GDs6!$5$l$F$$$^$9!#(B
- $B$3$N<oN`$N%G%#%l%/%F%#%V$O%G%#%l%/%F%#%V$NDj5A$N(B<a
- href="#Module">$B%b%8%e!<%k(B</a>$B$N9T$K;H$C$F$$$k%b%8%e!<%k$NL>A0$,=q$+$l$F$$$k(B
- $B>l9g$K$N$_;HMQ2DG=$G$9!#(B</dd>
-
- <dt>Base</dt>
-
- <dd>"Base" $B$N%G%#%l%/%F%#%V$O(B
- $B%G%U%)%k%H$G%5!<%P$KAH$_9~$^$l$F$$$kI8=`%b%8%e!<%k$NCf$N0l$D$G%5(B
- $B%]!<%H$5$l$F$$$F!"$o$6$o$6@_Dj$+$i%b%8%e!<%k$r:o=|$7$?$H$-$r=|$$$F!"(B
- $BDL>o$G$O;HMQ2DG=$G$"$k$3$H$r<($7$^$9!#(B</dd>
-
- <dt>Extension</dt>
-
- <dd>"Extension" $B$N%G%#%l%/%F%#%V$O!"(B Apache
- $B%5!<%P$NG[I[J*$KF1:-$5$l$F$$$k%b%8%e!<%k$N0l$D$GDs6!$5$l$F$$$k$b$N$N!"(B
- $BDL>o$G$O%5!<%P$KAH$_9~$^$l$F$$$J$$$3$H$r<($7$^$9!#(B
- $B%G%#%l%/%F%#%V$H$=$N5!G=$rM-8z$K$9$k$K$O!"%5!<%P%S%k%IMQ$N@_Dj%U%!%$%k$r(B
- $BJQ99$7$F(B Apache
- $B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#(B</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" $B$N%G%#%l%/%F%#%V$O!"(BApache
- $BG[I[J*$K(B
- $BF1:-$5$l$F$$$k$b$N$N!";n$7$?$$>l9g$O<+8J@UG$$G9T$J$&(B
- $BI,MW$,$"$k$H$$$&$3$H$r<($7$^$9!#%G%#%l%/%F%#%V$O!"$9$Y$F$N%I%-%e%a%s%H$r(B
- $B40A4$K$=$m$o$;$k$?$a$K2r@b$5$l$F$$$^$9$,!"%5%]!<%H$5$l$F$$$k$H$O8B$j$^$;$s!#(B
- $B%G%#%l%/%F%#%V$rDs6!$9$k%b%8%e!<%k$O%G%U%)%k%H$GAH$_9~$^$l$F$$$k$+$b(B
- $B$7$l$^$;$s$7!"$=$&$G$J$$$+$b$7$l$^$;$s!#;HMQ2DG=$+$I$&$+$O!"(B
- $B%G%#%l%/%F%#%V$H%b%8%e!<%k$N@bL@$r$7$F$$$k%Z!<%8$N@hF,$rD4$Y$F$/$@$5$$!#(B</dd>
- </dl>
-</section>
-
-<section id="Module"><title>$B%b%8%e!<%k(B</title>
-
- <p>
- $B$3$l$OC1=c$K%G%#%l%/%F%#%V$,Dj5A$5$l$F$$$k%b%8%e!<%k$NL>A0$r5-:\$7$^$9!#(B</p>
-</section>
-
-<section id="Compatibility"><title>$B8_49@-(B</title>
-
- <p>$B%G%#%l%/%F%#%V$,(B Apache 2
- $B$NG[I[$KAH$_9~$^$l$F$$$J$+$C$?>l9g!"(B
- $B%G%#%l%/%F%#%V$,F3F~$5$l$?%P!<%8%g%s$,$3$3$K=q$+$l$F$$$^$9!#(B
- $B$^$?!"%G%#%l%/%F%#%V$,FCDj$N%W%i%C%H%U%)!<%`$K$N$_B8:_$9$k$H$-$b(B
- $B$3$3$K=q$+$l$F$$$^$9!#(B</p>
-</section>
-</manualpage>
diff --git a/docs/manual/mod/directive-dict.xml.ko b/docs/manual/mod/directive-dict.xml.ko
deleted file mode 100644
index 7f58dadae2..0000000000
--- a/docs/manual/mod/directive-dict.xml.ko
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="directive-dict.xml.meta">
-
- <title>Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥ »ç¿ëÇÑ ¿ë¾îµé</title>
-
-<summary>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ <a href="directives.html">¼³Á¤
- Áö½Ã¾î</a>¸¦ ¼³¸íÇϴµ¥ »ç¿ëÇÑ ¿ë¾îµéÀ» ¼³¸íÇÑ´Ù.</p>
-</summary>
-<seealso><a href="../configuring.html">¼³Á¤ÆÄÀÏ</a></seealso>
-
-<section id="Description"><title>¼³¸í (Description)</title>
-
-<p>Áö½Ã¾îÀÇ ¸ñÀû¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸í.</p>
-</section>
-
-<section id="Syntax"><title>¹®¹ý (Syntax)</title>
-
- <p>¼³Á¤ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ Áö½Ã¾îÀÇ Çü½ÄÀ» ¾Ë·ÁÁØ´Ù. ÀÌ ¹®¹ýÀº
- Áö½Ã¾î¸¶´Ù ¸Å¿ì ´Ù¸£¸ç, Áö½Ã¾î¸¦ Á¤ÀÇÇÒ ¶§¸¶´Ù ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.
- ÀϹÝÀûÀ¸·Î Áö½Ã¾î À̸§ µÚ¿¡ °ø¹éÀ¸·Î ±¸ºÐÇÑ ¾Æ±Ô¸ÕÆ®µéÀÌ
- ³ª¿Â´Ù. ¾Æ±Ô¸ÕÆ®°¡ °ø¹éÀ» Æ÷ÇÔÇÑ´Ù¸é ¾Æ±Ô¸ÕÆ®¸¦ ½Öµû¿ÈÇ¥·Î
- ¹­¾î¾ß ÇÑ´Ù. ¼±ÅÃÀûÀÎ ¾Æ±Ô¸ÕÆ®´Â Áß°ýÈ£·Î ¹­´Â´Ù. ¾Æ±Ô¸ÕÆ®°¡
- ¿©·¯ °ªÁß ÇϳªÀÏ °æ¿ì °ªµéÀ» ¼öÁ÷¸·´ë "|"·Î ±¸ºÐÇÑ´Ù.
- ¹®ÀÚ±×´ë·Î »ç¿ëÇÒ ºÎºÐÀº ±âº» ¹®ÀÚü·Î ¾²°í, ´ëüÇÒ ¾Æ±Ô¸ÕÆ®´Â
- <em>°­Á¶ÇÑ´Ù</em>. ¾Æ±Ô¸ÕÆ® °³¼ö°¡ Á¤ÇØÁöÁö¾ÊÀº Áö½Ã¾î´Â
- ¸¶Áö¸· ¾Æ±Ô¸ÕÆ®°¡ ¹Ýº¹µÊÀ» ³ªÅ¸³»´Â "..."À¸·Î ³¡³­´Ù.</p>
-
- <p>Áö½Ã¾î´Â ¸Å¿ì ´Ù¾çÇÑ Á¾·ùÀÇ ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ´Â´Ù. ÀÌÁß ÀÚÁÖ
- »ç¿ëÇÏ´Â °ÍÀº ¾Æ·¡¿Í °°´Ù.</p>
-
- <dl>
- <dt><em>URL</em></dt>
-
- <dd><code>http://www.example.com/path/to/file.html</code>°ú
- °°ÀÌ ½ºÅ´(scheme), È£½ºÆ®¸í, ¼±ÅÃÀûÀÎ °æ·Î¸íÀ» Æ÷ÇÔÇÑ
- ¿ÏÀüÇÑ Uniform Resource Locator</dd>
-
- <dt><em>URL-path</em></dt>
-
- <dd><code>/path/to/file.html</code>°ú °°ÀÌ <em>url</em>¿¡¼­
- ½ºÅ´°ú È£½ºÆ®¸í µÚ¿¡ ³ª¿À´Â ºÎºÐ. <em>url-path</em>´Â
- ÆÄÀϽýºÅÛ¿¡¼­ º» ½ÃÁ¡ÀÌ ¾Æ´Ñ À¥¿¡¼­ º» ½ÃÁ¡¿¡¼­ÀÇ ÀڷḦ
- ³ªÅ¸³½´Ù.</dd>
-
- <dt><em>file-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/file.html</code>°ú
- °°ÀÌ root µð·ºÅ丮·Î ½ÃÀÛÇÏ´Â ÆÄÀϽýºÅÛ»óÀÇ ÆÄÀÏ °æ·Î. µû·Î
- ¾ð±ÞÇÏÁö¾ÊÀ¸¸é, ½½·¡½¬·Î ½ÃÀÛÇÏÁö¾ÊÀº <em>file-path</em>´Â
- <a href="core.html#serverroot">ServerRoot</a>¿¡ »ó´ë°æ·Î·Î
- Ãë±ÞÇÑ´Ù.</dd>
-
- <dt><em>directory-path</em></dt>
-
- <dd><code>/usr/local/apache/htdocs/path/to/</code>¿Í °°ÀÌ
- root µð·ºÅ丮·Î ½ÃÀÛÇÏ´Â ÆÄÀϽýºÅÛ»óÀÇ µð·ºÅ丮 °æ·Î.</dd>
-
- <dt><em>filename</em></dt>
-
- <dd><code>file.html</code>°ú °°ÀÌ °æ·Î Á¤º¸°¡ ¾ø´Â ÆÄÀϸí.</dd>
-
- <dt><em>regex</em></dt>
-
- <dd>Perl Çü½ÄÀÇ <a href="../glossary.html#regex">Á¤±ÔÇ¥Çö½Ä(regular
- expression)</a>. Áö½Ã¾î´Â <em>regex</em>·Î ¹«¾ùÀΰ¡¸¦ °Ë»öÇÑ´Ù.</dd>
-
- <dt><em>extension</em></dt>
-
- <dd>ÀϹÝÀûÀ¸·Î <em>filename</em>¿¡¼­ ¸¶Áö¸· ¸¶Ä§Ç¥ µÚ¿¡
- ³ª¿À´Â ºÎºÐÀÌ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡´Â ¿©·¯ È®ÀåÀÚ¸¦ ÀνÄÇÒ
- ¼ö Àֱ⶧¹®¿¡, <em>filename</em>¿¡ ¸¶Ä§Ç¥°¡ ¿©·¯°³ Æ÷ÇÔµÈ
- °æ¿ì ¸¶Ä§Ç¥·Î ±¸ºÐµÈ ¸ðµç ºÎºÐÀ» <em>È®ÀåÀÚ(extension)</em>·Î
- ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î, <em>ÆÄÀϸí</em> <code>file.html.en</code>Àº
- <code>.html</code>°ú <code>.en</code>À̶ó´Â µÎ°¡Áö È®ÀåÀÚ¸¦
- °¡Áø´Ù. ¾ÆÆÄÄ¡ Áö½Ã¾î¿¡¼­ <em>extension</em>¿¡ ÁöÁ¤ÇÑ
- °ª ¾Õ¿¡ ¸¶Ä§Ç¥°¡ À־ µÇ°í ¾ø¾îµµ µÈ´Ù. ¶Ç,
- <em>extension</em>Àº ´ë¼Ò¹®ÀÚ¸¦ °¡¸®Áö¾Ê´Â´Ù.</dd>
-
- <dt><em>MIME-type</em></dt>
-
- <dd><code>text/html</code>°ú °°ÀÌ ½½·¡½¬·Î major format
- type°ú minor format type¸¦ ±¸ºÐÇÏ¿© ÆÄÀÏÀÇ Çü½ÄÀ» ¼³¸íÇÏ´Â
- ¹æ½Ä.</dd>
-
- <dt><em>env-variable</em></dt>
-
- <dd>¾ÆÆÄÄ¡ ¼³Á¤¿¡¼­ Á¤ÀÇÇÑ <a href="../env.html">ȯ°æº¯¼ö</a>
- À̸§. ¿î¿µÃ¼Á¦ÀÇ È¯°æº¯¼ö¿Í ´Ù¸§À» ÁÖÀÇÇ϶ó. ÀÚ¼¼ÇÑ ³»¿ëÀº
- <a href="../env.html">ȯ°æº¯¼ö ¹®¼­</a>¸¦ Âü°íÇ϶ó.</dd>
- </dl>
-</section>
-
-<section id="Default"><title>±âº»°ª (Default)</title>
-
- <p>Áö½Ã¾î¿¡ ±âº»°ªÀÌ ÀÖ´Ù¸é (<em>¿¹¸¦ µé¾î</em>, ¼³Á¤¿¡¼­
- Áö½Ã¾î¸¦ »ý·«ÇÑ °æ¿ì ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÌ °ªÀ» »ç¿ëÇÑ´Ù.)
- ÀÌ Ç׸ñ¿¡ ³ª¿Â´Ù. ±âº»°ªÀÌ ¾ø´Ù¸é ÀÌ Ç׸ñÀº
- "<em>None</em>"À̾î¾ß ÇÑ´Ù. ±âº»°ªÀÌ ¼­¹ö¿¡ Æ÷ÇÔµÈ ±âº»
- httpd.confÀÇ Áö½Ã¾î °ª°ú ´Ù¸¦ ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó.</p>
-</section>
-
-<section id="Context"><title>»ç¿ëÀå¼Ò (Context)</title>
-
- <p>¼­¹öÀÇ ¼³Á¤ÆÄÀÏÁß ¾î´À°÷¿¡¼­ Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö
- ¾Ë·ÁÁØ´Ù. ´ÙÀ½ °ªµéÀ» ½°Ç¥·Î ±¸ºÐÇÑ ¸ñ·ÏÀÌ´Ù:</p>
-
- <dl>
- <dt>ÁÖ¼­¹ö¼³Á¤ (server config)</dt>
-
- <dd>Áö½Ã¾î¸¦ ¼­¹ö ¼³Á¤ÆÄÀÏ¿¡¼­ (<em>¿¹¸¦ µé¾î</em>,
- <code>httpd.conf</code>) »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª, <directive
- module="core" type="section">VirtualHost</directive>³ª
- <directive module="core" type="section">Directory</directive>¿¡¼­
- »ç¿ëÇÒ ¼ö <strong>¾øÀ½À»</strong> ¶æÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­µµ »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt>°¡»óÈ£½ºÆ® (virtual host)</dt>
-
- <dd>Áö½Ã¾î¸¦ ¼­¹ö ¼³Á¤ÆÄÀÏÀÇ <directive module="core"
- type="section">VirtualHost</directive> ¾È¿¡¼­ »ç¿ëÇÒ ¼ö
- ÀÖÀ½À» ¶æÇÑ´Ù.</dd>
-
- <dt>µð·ºÅ丮 (directory)</dt>
-
- <dd>Áö½Ã¾î°¡ <a href="../sections.html">¼½¼Ç ¼³Á¤</a>¿¡
- ¼³¸íÇÑ Á¦¾àÀ» µû¸£¸ç, ¼­¹ö ¼³Á¤ÆÄÀÏÀÇ <directive module="core"
- type="section">Directory</directive>, <directive
- type="section" module="core">Location</directive>, <directive
- module="core" type="section">Files</directive>, <directive
- module="mod_proxy" type="section">Proxy</directive>¿¡¼­
- »ç¿ëÇÒ ¼ö ÀÖÀ½À» ¶æÇÑ´Ù.</dd>
-
- <dt>.htaccess</dt>
-
- <dd>Áö½Ã¾î¸¦ µð·ºÅ丮<em>º°</em> <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÀ½À» ¶æÇÑ´Ù. ÀÌ Áö½Ã¾î´Â ÇöÀç »ç¿ëÇÏ´Â
- <a href="#Override">overrides</a> °ª¿¡ µû¶ó ¹«½ÃµÉ ¼ö
- ÀÖ´Ù.</dd>
- </dl>
-
- <p>Áö½Ã¾î´Â ÁöÁ¤µÈ Àå¼Ò¿¡¼­<em>¸¸</em> »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥
- °÷¿¡¼­ »ç¿ëÇÏ¸é ¼³Á¤¿À·ù°¡ ¹ß»ýÇÏ°í ¼­¹ö´Â ºÎºÐ¿¡ ´ëÇÑ ¿äûÀ»
- ¿Ã¹Ù·Î ó¸®ÇÏÁö ¸øÇϰųª ÀÛµ¿ÀÌ, <em>¿¹¸¦ µé¾î</em> ½ÃÀÛÁ¶Â÷µµ,
- ¾ÈµÉ ¼ö ÀÖ´Ù.</p>
-
- <p>Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â Àå¼Ò´Â ¿­°ÅÇÑ Àå¼Ò¸¦ ¸ðµÎ
- ºÒ¸°(boolean) ORÇÑ °á°úÀÌ´Ù. Áï,
- "<code>server config, .htaccess</code>"¿¡¼­ °¡´ÉÇÏ´Ù´Â
- Áö½Ã¾î´Â <code>httpd.conf</code> ÆÄÀÏ°ú <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­´Â »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, <directive module="core"
- type="section">Directory</directive>³ª <directive module="core"
- type="section">VirtualHost</directive>¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-</section>
-
-<section id="Override"><title>Override ¿É¼Ç (Override)</title>
-
- <p>ÀÌ Áö½Ã¾î¸¦ <code>.htaccess</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇÏ·Á¸é
- ¾î¶² override ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö¸¦ ³ªÅ¸³½´Ù. Áö½Ã¾îÀÇ
- <a href="#Context" >»ç¿ëÀå¼Ò</a>°¡ Áö½Ã¾î¸¦ <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù°í ÇÑ´Ù¸é ¾î¶² »ç¿ëÀå¼Òµµ ³ª¿ÀÁö
- ¾Ê´Â´Ù.</p>
-
- <p>Overrides´Â <directive
- module="core">AllowOverride</directive> Áö½Ã¾î·Î Áö½ÃÇÏ°í,
- (µð·ºÅ丮 µîÀÇ) ƯÁ¤ ¹üÀ§¿Í ÇÏÀ§ ¹üÀ§¿¡¼­ ´Ù¸¥ <directive
- module="core">AllowOverride</directive> Áö½Ã¾î·Î ´Ù¸¥ °ªÀ»
- ¼³Á¤ÇÏÁö¾Ê¾Ò´Ù¸é ÇÏÀ§ ¹üÀ§¿¡µµ ±×´ë·Î Àû¿ëµÈ´Ù. Áö½Ã¾î ¼³¸í¿¡
- »ç¿ë°¡´ÉÇÑ override À̸§µéÀÌ ³ª¿Â´Ù.</p>
-</section>
-
-<section id="Status"><title>»óÅÂ (Status)</title>
-
- <p>Áö½Ã¾î°¡ ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ ¾ó¸¶³ª ±ä¹ÐÈ÷ ¹­¿©ÀÖ´ÂÁö¸¦
- ³ªÅ¸³½´Ù. Áï, ±× Áö½Ã¾î³ª ±â´ÉÀ» »ç¿ëÇϱâÀ§ÇØ ¼­¹ö¸¦
- ¸ðµâ°ú °°ÀÌ ´Ù½Ã ÄÄÆÄÀÏÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¼öµµ ÀÖ´Ù.
- °¡´ÉÇÑ °ªÀº ´ÙÀ½°ú °°´Ù:</p>
-
- <dl>
- <dt>Core</dt>
-
- <dd>Áö½Ã¾î°¡ "Core" »óŸ¦ °¡Áö¸é, Áö½Ã¾î°¡ ¾ÆÆÄÄ¡ À¥¼­¹ö
- Çٽɺκп¡ ¼ÓÇÏ°í Ç×»ó »ç¿ë°¡´ÉÇÔÀ» ¶æÇÑ´Ù.</dd>
-
- <dt>MPM</dt>
-
- <dd>"MPM" »óÅÂÀÎ Áö½Ã¾î´Â <a href="../mpm.html">´ÙÁßó¸®
- ¸ðµâ</a>À» Á¦°øÇÑ´Ù. ÀÌ·± Áö½Ã¾î´Â Áö½Ã¾î ¼³¸í¿¡¼­ <a
- href="#Module">¸ðµâ</a>¿¡ ¿­°ÅµÈ MPMÁß Çϳª¸¦ »ç¿ëÇÒ¶§¸¸
- °¡´ÉÇÏ´Ù.</dd>
-
- <dt>Base</dt>
-
- <dd>±âº»ÀûÀ¸·Î ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵǹǷΠÁ÷Á¢ ±¸¼º¿¡¼­
- ¸ðµâÀ» Á¦°ÅÇÏÁö ¾Ê¾Ò´Ù¸é ÀϹÝÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ Ç¥ÁØ ¾ÆÆÄÄ¡
- ¸ðµâÀÌ Á¦°øÇÏ´Â Áö½Ã¾î´Â "Base" »óÅÂÀÌ´Ù.</dd>
-
- <dt>Extension</dt>
-
- <dd>¾ÆÆÄÄ¡ ¼­¹ö ¹èÆ÷º»¿¡´Â Æ÷ÇÔµÇÀÖÁö¸¸ º¸Åë ¼­¹ö¿Í °°ÀÌ
- ÄÄÆÄÀϵÇÁö¾Ê´Â ¸ðµâÀÌ Á¦°øÇÏ´Â Áö½Ã¾î´Â "Extension" »óÅÂÀÌ´Ù.
- ÀÌ·± Áö½Ã¾î¸¦ »ç¿ëÇÏ·Á¸é ¼­¹ö ÄÄÆÄÀÏ ±¸¼ºÆÄÀÏÀ» ¼öÁ¤ÇÏ°í
- ¾ÆÆÄÄ¡¸¦ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental"Àº Áö½Ã¾î°¡ ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖÁö¸¸,
- »ç¿ëÀº ÀÚ½ÅÀÇ Ã¥ÀÓÀÓÀ» ³ªÅ¸³½´Ù. Áö½Ã¾î´Â ¹®¼­È­µÇÀÖÁö¸¸,
- ½ÇÁ¦¿Í ´Ù¸¦ ¼ö ÀÖ´Ù. Áö½Ã¾î¸¦ Á¦°øÇÏ´Â ¸ðµâÀº ±âº»ÀûÀ¸·Î
- ¾ÆÆÄÄ¡¿Í °°ÀÌ ÄÄÆÄÀ쵃 ¼öµµ ¾ÈµÉ ¼öµµ ÀÖ´Ù. Áö½Ã¾î¿Í ¸ðµâÀ»
- ¼³¸íÇÏ´Â ¹®¼­ ¾Õ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö »ìÆìºÁ¶ó.</dd>
- </dl>
-</section>
-
-<section id="Module"><title>¸ðµâ (Module)</title>
-
- <p>´Ü¼øÈ÷ Áö½Ã¾î¸¦ Á¤ÀÇÇÑ ¼Ò½º ¸ðµâ¸íÀ» ¿­°ÅÇÑ´Ù.</p>
-</section>
-
-<section id="Compatibility"><title>Áö¿ø (Compatibility)</title>
-
- <p>Áö½Ã¾î°¡ ¿ø·¡ ¾ÆÆÄÄ¡ ¹öÀü 2 ¹èÆ÷º»ÀÇ ÀϺΰ¡ ¾Æ´Ï¿´´Ù¸é,
- Áö½Ã¾î¸¦ Ãß°¡Çϱ⠽ÃÀÛÇÑ ¹öÀüÀÌ ¿©±â ³ª¿Â´Ù. ¶Ç, ¾î¶²
- Ç÷¡Æû¿¡¼­¸¸ »ç¿ë°¡´ÉÇÑ Áö½Ã¾îµµ ¿©±â ³ª¿Â´Ù.</p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/mod/directive-dict.xml.meta b/docs/manual/mod/directive-dict.xml.meta
deleted file mode 100644
index fbf596604d..0000000000
--- a/docs/manual/mod/directive-dict.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>directive-dict</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/directives.html b/docs/manual/mod/directives.html
deleted file mode 100644
index 29278cdb7c..0000000000
--- a/docs/manual/mod/directives.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: directives.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: directives.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: directives.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: directives.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: directives.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/directives.html.de b/docs/manual/mod/directives.html.de
deleted file mode 100644
index 0427b16e66..0000000000
--- a/docs/manual/mod/directives.html.de
+++ /dev/null
@@ -1,414 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Verzeichnis der Direktiven - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index"><div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div><div id="preamble"><h1>Verzeichnis der Direktiven</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/directives.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- Hier sind alle Apache-Direktiven aufgeführt, die in der
- Standard-Apache-Distribution verfügbar sind. Sie sind in
- einem einheitlichen Format beschrieben. Ein <a href="directive-dict.html" rel="Glossary">Glossar</a>
- erläutert die in der Beschreibung verwendeten Begriffe.
- </p>
-
- <p>
- Außerdem existiert eine <a href="quickreference.html">Kurzreferenz der Direktiven</a>, welche
- zu jeder Direktive eine Zusammenfassung der Details enthält.
- </p>
-
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></p>
-</div>
-<div id="directive-list"><ul>
-<li><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex</a></li>
-<li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li>
-<li><a href="core.html#accessfilename">AccessFileName</a></li>
-<li><a href="mod_actions.html#action">Action</a></li>
-<li><a href="mod_autoindex.html#addalt">AddAlt</a></li>
-<li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li>
-<li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li>
-<li><a href="mod_mime.html#addcharset">AddCharset</a></li>
-<li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li>
-<li><a href="mod_autoindex.html#adddescription">AddDescription</a></li>
-<li><a href="mod_mime.html#addencoding">AddEncoding</a></li>
-<li><a href="mod_mime.html#addhandler">AddHandler</a></li>
-<li><a href="mod_autoindex.html#addicon">AddIcon</a></li>
-<li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li>
-<li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li>
-<li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li>
-<li><a href="mod_mime.html#addlanguage">AddLanguage</a></li>
-<li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li>
-<li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li>
-<li><a href="core.html#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><a href="mod_mime.html#addtype">AddType</a></li>
-<li><a href="mod_alias.html#alias">Alias</a></li>
-<li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li>
-<li><a href="mod_authz_host.html#allow">Allow</a></li>
-<li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li>
-<li><a href="core.html#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><a href="core.html#allowoverride">AllowOverride</a></li>
-<li><a href="mod_authn_anon.html#anonymous">Anonymous</a></li>
-<li><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-<li><a href="perchild.html#assignuserid">AssignUserID</a></li>
-<li><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></li>
-<li><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType</a></li>
-<li><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li>
-<li><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-<li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li>
-<li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></li>
-<li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li>
-<li><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize</a></li>
-<li><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></li>
-<li><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative</a></li>
-<li><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword</a></li>
-<li><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig</a></li>
-<li><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></li>
-<li><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases</a></li>
-<li><a href="mod_auth_ldap.html#authldapenabled">AuthLDAPEnabled</a></li>
-<li><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl</a></li>
-<li><a href="core.html#authname">AuthName</a></li>
-<li><a href="core.html#authtype">AuthType</a></li>
-<li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType</a></li>
-<li><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-<li><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-<li><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-<li><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-<li><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch</a></li>
-<li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire</a></li>
-<li><a href="mod_disk_cache.html#cachedirlength">CacheDirLength</a></li>
-<li><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></li>
-<li><a href="mod_cache.html#cachedisable">CacheDisable</a></li>
-<li><a href="mod_cache.html#cacheenable">CacheEnable</a></li>
-<li><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><a href="mod_file_cache.html#cachefile">CacheFile</a></li>
-<li><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><a href="mod_disk_cache.html#cachegcclean">CacheGcClean</a></li>
-<li><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></li>
-<li><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></li>
-<li><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused</a></li>
-<li><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire</a></li>
-<li><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></li>
-<li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><a href="mod_disk_cache.html#cacheroot">CacheRoot</a></li>
-<li><a href="mod_disk_cache.html#cachesize">CacheSize</a></li>
-<li><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></li>
-<li><a href="core.html#cgimapextension">CGIMapExtension</a></li>
-<li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li>
-<li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li>
-<li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li>
-<li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li>
-<li><a href="perchild.html#childperuserid">ChildPerUserID</a></li>
-<li><a href="core.html#contentdigest">ContentDigest</a></li>
-<li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li>
-<li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li>
-<li><a href="mod_log_config.html#cookielog">CookieLog</a></li>
-<li><a href="mod_usertrack.html#cookiename">CookieName</a></li>
-<li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li>
-<li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li>
-<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><a href="mod_log_config.html#customlog">CustomLog</a></li>
-<li><a href="mod_dav.html#dav" id="D" name="D">Dav</a></li>
-<li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li>
-<li><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB</a></li>
-<li><a href="mod_dav_fs.html#davlockdb">DavLockDB</a></li>
-<li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li>
-<li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li>
-<li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li>
-<li><a href="core.html#defaulttype">DefaultType</a></li>
-<li><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize</a></li>
-<li><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li>
-<li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li>
-<li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li>
-<li><a href="mod_authz_host.html#deny">Deny</a></li>
-<li><a href="core.html#directory">&lt;Directory&gt;</a></li>
-<li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li>
-<li><a href="core.html#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><a href="mod_dir.html#directoryslash">DirectorySlash</a></li>
-<li><a href="core.html#documentroot">DocumentRoot</a></li>
-<li><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook</a></li>
-<li><a href="core.html#enablemmap">EnableMMAP</a></li>
-<li><a href="core.html#enablesendfile">EnableSendfile</a></li>
-<li><a href="core.html#errordocument">ErrorDocument</a></li>
-<li><a href="core.html#errorlog">ErrorLog</a></li>
-<li><a href="mod_example.html#example">Example</a></li>
-<li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li>
-<li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li>
-<li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li>
-<li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li>
-<li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li>
-<li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li>
-<li><a href="core.html#fileetag" id="F" name="F">FileETag</a></li>
-<li><a href="core.html#files">&lt;Files&gt;</a></li>
-<li><a href="core.html#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><a href="core.html#forcetype">ForceType</a></li>
-<li><a href="mod_log_forensic.html#forensiclog">ForensicLog</a></li>
-<li><a href="mpm_common.html#group" id="G" name="G">Group</a></li>
-<li><a href="mod_headers.html#header" id="H" name="H">Header</a></li>
-<li><a href="mod_autoindex.html#headername">HeaderName</a></li>
-<li><a href="core.html#hostnamelookups">HostnameLookups</a></li>
-<li><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck</a></li>
-<li><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout</a></li>
-<li><a href="core.html#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><a href="core.html#ifmodule">&lt;IfModule&gt;</a></li>
-<li><a href="mod_version.html#ifversion">&lt;IfVersion&gt;</a></li>
-<li><a href="mod_imap.html#imapbase">ImapBase</a></li>
-<li><a href="mod_imap.html#imapdefault">ImapDefault</a></li>
-<li><a href="mod_imap.html#imapmenu">ImapMenu</a></li>
-<li><a href="core.html#include">Include</a></li>
-<li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li>
-<li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li>
-<li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li>
-<li><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
-<li><a href="mod_isapi.html#isapicachefile">ISAPICacheFile</a></li>
-<li><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync</a></li>
-<li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li>
-<li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
-<li><a href="core.html#keepalive" id="K" name="K">KeepAlive</a></li>
-<li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority</a></li>
-<li><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize</a></li>
-<li><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></li>
-<li><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></li>
-<li><a href="core.html#limit">&lt;Limit&gt;</a></li>
-<li><a href="core.html#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><a href="core.html#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><a href="core.html#limitrequestbody">LimitRequestBody</a></li>
-<li><a href="core.html#limitrequestfields">LimitRequestFields</a></li>
-<li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><a href="core.html#limitrequestline">LimitRequestLine</a></li>
-<li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><a href="mpm_common.html#listen">Listen</a></li>
-<li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li>
-<li><a href="mod_so.html#loadfile">LoadFile</a></li>
-<li><a href="mod_so.html#loadmodule">LoadModule</a></li>
-<li><a href="core.html#location">&lt;Location&gt;</a></li>
-<li><a href="core.html#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><a href="mod_log_config.html#logformat">LogFormat</a></li>
-<li><a href="core.html#loglevel">LogLevel</a></li>
-<li><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients</a></li>
-<li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><a href="prefork.html#maxspareservers">MaxSpareServers</a></li>
-<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><a href="mpm_netware.html#maxthreads">MaxThreads</a></li>
-<li><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></li>
-<li><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></li>
-<li><a href="mod_mem_cache.html#mcachesize">MCacheSize</a></li>
-<li><a href="mod_cern_meta.html#metadir">MetaDir</a></li>
-<li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li>
-<li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li>
-<li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li>
-<li><a href="prefork.html#minspareservers">MinSpareServers</a></li>
-<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li>
-<li><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li>
-<li><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost</a></li>
-<li><a href="mod_proxy.html#noproxy">NoProxy</a></li>
-<li><a href="perchild.html#numservers">NumServers</a></li>
-<li><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></li>
-<li><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></li>
-<li><a href="core.html#options" id="O" name="O">Options</a></li>
-<li><a href="mod_authz_host.html#order">Order</a></li>
-<li><a href="mod_env.html#passenv" id="P" name="P">PassEnv</a></li>
-<li><a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><a href="mod_echo.html#protocolecho">ProtocolEcho</a></li>
-<li><a href="mod_proxy.html#proxy">&lt;Proxy&gt;</a></li>
-<li><a href="mod_proxy.html#proxybadheader">ProxyBadHeader</a></li>
-<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
-<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
-<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
-<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
-<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
-<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
-<li><a href="mod_proxy.html#proxypass">ProxyPass</a></li>
-<li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
-<li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li>
-<li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
-<li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li>
-<li><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch</a></li>
-<li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li>
-<li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li>
-<li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li>
-<li><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName</a></li>
-<li><a href="mod_alias.html#redirect">Redirect</a></li>
-<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
-<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
-<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
-<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
-<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
-<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
-<li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li>
-<li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li>
-<li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><a href="mod_mime.html#removetype">RemoveType</a></li>
-<li><a href="mod_headers.html#requestheader">RequestHeader</a></li>
-<li><a href="core.html#require">Require</a></li>
-<li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li>
-<li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li>
-<li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li>
-<li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li>
-<li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li>
-<li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li>
-<li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li>
-<li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li>
-<li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li>
-<li><a href="core.html#rlimitcpu">RLimitCPU</a></li>
-<li><a href="core.html#rlimitmem">RLimitMEM</a></li>
-<li><a href="core.html#rlimitnproc">RLimitNPROC</a></li>
-<li><a href="core.html#satisfy" id="S" name="S">Satisfy</a></li>
-<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><a href="mod_actions.html#script">Script</a></li>
-<li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li>
-<li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li>
-<li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
-<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
-<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><a href="core.html#serveradmin">ServerAdmin</a></li>
-<li><a href="core.html#serveralias">ServerAlias</a></li>
-<li><a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><a href="core.html#servername">ServerName</a></li>
-<li><a href="core.html#serverpath">ServerPath</a></li>
-<li><a href="core.html#serverroot">ServerRoot</a></li>
-<li><a href="core.html#serversignature">ServerSignature</a></li>
-<li><a href="core.html#servertokens">ServerTokens</a></li>
-<li><a href="mod_env.html#setenv">SetEnv</a></li>
-<li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li>
-<li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li>
-<li><a href="core.html#sethandler">SetHandler</a></li>
-<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
-<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
-<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
-<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
-<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
-<li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li>
-<li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li>
-<li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice</a></li>
-<li><a href="mod_ssl.html#sslengine">SSLEngine</a></li>
-<li><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCipherOrder</a></li>
-<li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li>
-<li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li>
-<li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li>
-<li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify</a></li>
-<li><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth</a></li>
-<li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li>
-<li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li>
-<li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li>
-<li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li>
-<li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
-<li><a href="mod_ssl.html#sslusername">SSLUserName</a></li>
-<li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li>
-<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
-<li><a href="mpm_common.html#startservers">StartServers</a></li>
-<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
-<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
-<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><a href="core.html#timeout">TimeOut</a></li>
-<li><a href="mod_log_config.html#transferlog">TransferLog</a></li>
-<li><a href="mod_mime.html#typesconfig">TypesConfig</a></li>
-<li><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv</a></li>
-<li><a href="core.html#usecanonicalname">UseCanonicalName</a></li>
-<li><a href="mpm_common.html#user">User</a></li>
-<li><a href="mod_userdir.html#userdir">UserDir</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li>
-<li><a href="core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li>
-<li><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></li>
-<li><a href="mod_include.html#xbithack" id="X" name="X">XBitHack</a></li>
-</ul></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/directives.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directives.html.en b/docs/manual/mod/directives.html.en
deleted file mode 100644
index 5fac02b851..0000000000
--- a/docs/manual/mod/directives.html.en
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Directive Index - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div><div id="preamble"><h1>Directive Index</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- Each Apache directive available in the standard Apache
- distribution is listed here. They are described using a
- consistent format, and there is <a href="directive-dict.html" rel="Glossary">a dictionary</a> of the terms used in their
- descriptions available.
- </p>
-
- <p>
- A <a href="quickreference.html">Directive Quick-Reference</a>
- is also available giving details about each directive in a
- summary form.
- </p>
-
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></p>
-</div>
-<div id="directive-list"><ul>
-<li><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex</a></li>
-<li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li>
-<li><a href="core.html#accessfilename">AccessFileName</a></li>
-<li><a href="mod_actions.html#action">Action</a></li>
-<li><a href="mod_autoindex.html#addalt">AddAlt</a></li>
-<li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li>
-<li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li>
-<li><a href="mod_mime.html#addcharset">AddCharset</a></li>
-<li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li>
-<li><a href="mod_autoindex.html#adddescription">AddDescription</a></li>
-<li><a href="mod_mime.html#addencoding">AddEncoding</a></li>
-<li><a href="mod_mime.html#addhandler">AddHandler</a></li>
-<li><a href="mod_autoindex.html#addicon">AddIcon</a></li>
-<li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li>
-<li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li>
-<li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li>
-<li><a href="mod_mime.html#addlanguage">AddLanguage</a></li>
-<li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li>
-<li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li>
-<li><a href="core.html#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><a href="mod_mime.html#addtype">AddType</a></li>
-<li><a href="mod_alias.html#alias">Alias</a></li>
-<li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li>
-<li><a href="mod_authz_host.html#allow">Allow</a></li>
-<li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li>
-<li><a href="core.html#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><a href="core.html#allowoverride">AllowOverride</a></li>
-<li><a href="mod_authn_anon.html#anonymous">Anonymous</a></li>
-<li><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-<li><a href="perchild.html#assignuserid">AssignUserID</a></li>
-<li><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></li>
-<li><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType</a></li>
-<li><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li>
-<li><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-<li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li>
-<li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></li>
-<li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li>
-<li><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize</a></li>
-<li><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></li>
-<li><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative</a></li>
-<li><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword</a></li>
-<li><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig</a></li>
-<li><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></li>
-<li><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases</a></li>
-<li><a href="mod_auth_ldap.html#authldapenabled">AuthLDAPEnabled</a></li>
-<li><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl</a></li>
-<li><a href="core.html#authname">AuthName</a></li>
-<li><a href="core.html#authtype">AuthType</a></li>
-<li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType</a></li>
-<li><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-<li><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-<li><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-<li><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-<li><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch</a></li>
-<li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire</a></li>
-<li><a href="mod_disk_cache.html#cachedirlength">CacheDirLength</a></li>
-<li><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></li>
-<li><a href="mod_cache.html#cachedisable">CacheDisable</a></li>
-<li><a href="mod_cache.html#cacheenable">CacheEnable</a></li>
-<li><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><a href="mod_file_cache.html#cachefile">CacheFile</a></li>
-<li><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><a href="mod_disk_cache.html#cachegcclean">CacheGcClean</a></li>
-<li><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></li>
-<li><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></li>
-<li><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused</a></li>
-<li><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire</a></li>
-<li><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></li>
-<li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><a href="mod_disk_cache.html#cacheroot">CacheRoot</a></li>
-<li><a href="mod_disk_cache.html#cachesize">CacheSize</a></li>
-<li><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></li>
-<li><a href="core.html#cgimapextension">CGIMapExtension</a></li>
-<li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li>
-<li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li>
-<li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li>
-<li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li>
-<li><a href="perchild.html#childperuserid">ChildPerUserID</a></li>
-<li><a href="core.html#contentdigest">ContentDigest</a></li>
-<li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li>
-<li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li>
-<li><a href="mod_log_config.html#cookielog">CookieLog</a></li>
-<li><a href="mod_usertrack.html#cookiename">CookieName</a></li>
-<li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li>
-<li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li>
-<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><a href="mod_log_config.html#customlog">CustomLog</a></li>
-<li><a href="mod_dav.html#dav" id="D" name="D">Dav</a></li>
-<li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li>
-<li><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB</a></li>
-<li><a href="mod_dav_fs.html#davlockdb">DavLockDB</a></li>
-<li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li>
-<li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li>
-<li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li>
-<li><a href="core.html#defaulttype">DefaultType</a></li>
-<li><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize</a></li>
-<li><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li>
-<li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li>
-<li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li>
-<li><a href="mod_authz_host.html#deny">Deny</a></li>
-<li><a href="core.html#directory">&lt;Directory&gt;</a></li>
-<li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li>
-<li><a href="core.html#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><a href="mod_dir.html#directoryslash">DirectorySlash</a></li>
-<li><a href="core.html#documentroot">DocumentRoot</a></li>
-<li><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook</a></li>
-<li><a href="core.html#enablemmap">EnableMMAP</a></li>
-<li><a href="core.html#enablesendfile">EnableSendfile</a></li>
-<li><a href="core.html#errordocument">ErrorDocument</a></li>
-<li><a href="core.html#errorlog">ErrorLog</a></li>
-<li><a href="mod_example.html#example">Example</a></li>
-<li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li>
-<li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li>
-<li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li>
-<li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li>
-<li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li>
-<li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li>
-<li><a href="core.html#fileetag" id="F" name="F">FileETag</a></li>
-<li><a href="core.html#files">&lt;Files&gt;</a></li>
-<li><a href="core.html#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><a href="core.html#forcetype">ForceType</a></li>
-<li><a href="mod_log_forensic.html#forensiclog">ForensicLog</a></li>
-<li><a href="mpm_common.html#group" id="G" name="G">Group</a></li>
-<li><a href="mod_headers.html#header" id="H" name="H">Header</a></li>
-<li><a href="mod_autoindex.html#headername">HeaderName</a></li>
-<li><a href="core.html#hostnamelookups">HostnameLookups</a></li>
-<li><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck</a></li>
-<li><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout</a></li>
-<li><a href="core.html#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><a href="core.html#ifmodule">&lt;IfModule&gt;</a></li>
-<li><a href="mod_version.html#ifversion">&lt;IfVersion&gt;</a></li>
-<li><a href="mod_imap.html#imapbase">ImapBase</a></li>
-<li><a href="mod_imap.html#imapdefault">ImapDefault</a></li>
-<li><a href="mod_imap.html#imapmenu">ImapMenu</a></li>
-<li><a href="core.html#include">Include</a></li>
-<li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li>
-<li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li>
-<li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li>
-<li><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
-<li><a href="mod_isapi.html#isapicachefile">ISAPICacheFile</a></li>
-<li><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync</a></li>
-<li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li>
-<li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
-<li><a href="core.html#keepalive" id="K" name="K">KeepAlive</a></li>
-<li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority</a></li>
-<li><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize</a></li>
-<li><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></li>
-<li><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></li>
-<li><a href="core.html#limit">&lt;Limit&gt;</a></li>
-<li><a href="core.html#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><a href="core.html#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><a href="core.html#limitrequestbody">LimitRequestBody</a></li>
-<li><a href="core.html#limitrequestfields">LimitRequestFields</a></li>
-<li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><a href="core.html#limitrequestline">LimitRequestLine</a></li>
-<li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><a href="mpm_common.html#listen">Listen</a></li>
-<li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li>
-<li><a href="mod_so.html#loadfile">LoadFile</a></li>
-<li><a href="mod_so.html#loadmodule">LoadModule</a></li>
-<li><a href="core.html#location">&lt;Location&gt;</a></li>
-<li><a href="core.html#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><a href="mod_log_config.html#logformat">LogFormat</a></li>
-<li><a href="core.html#loglevel">LogLevel</a></li>
-<li><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients</a></li>
-<li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><a href="prefork.html#maxspareservers">MaxSpareServers</a></li>
-<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><a href="mpm_netware.html#maxthreads">MaxThreads</a></li>
-<li><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></li>
-<li><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></li>
-<li><a href="mod_mem_cache.html#mcachesize">MCacheSize</a></li>
-<li><a href="mod_cern_meta.html#metadir">MetaDir</a></li>
-<li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li>
-<li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li>
-<li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li>
-<li><a href="prefork.html#minspareservers">MinSpareServers</a></li>
-<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li>
-<li><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li>
-<li><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost</a></li>
-<li><a href="mod_proxy.html#noproxy">NoProxy</a></li>
-<li><a href="perchild.html#numservers">NumServers</a></li>
-<li><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></li>
-<li><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></li>
-<li><a href="core.html#options" id="O" name="O">Options</a></li>
-<li><a href="mod_authz_host.html#order">Order</a></li>
-<li><a href="mod_env.html#passenv" id="P" name="P">PassEnv</a></li>
-<li><a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><a href="mod_echo.html#protocolecho">ProtocolEcho</a></li>
-<li><a href="mod_proxy.html#proxy">&lt;Proxy&gt;</a></li>
-<li><a href="mod_proxy.html#proxybadheader">ProxyBadHeader</a></li>
-<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
-<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
-<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
-<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
-<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
-<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
-<li><a href="mod_proxy.html#proxypass">ProxyPass</a></li>
-<li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
-<li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li>
-<li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
-<li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li>
-<li><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch</a></li>
-<li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li>
-<li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li>
-<li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li>
-<li><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName</a></li>
-<li><a href="mod_alias.html#redirect">Redirect</a></li>
-<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
-<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
-<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
-<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
-<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
-<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
-<li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li>
-<li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li>
-<li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><a href="mod_mime.html#removetype">RemoveType</a></li>
-<li><a href="mod_headers.html#requestheader">RequestHeader</a></li>
-<li><a href="core.html#require">Require</a></li>
-<li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li>
-<li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li>
-<li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li>
-<li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li>
-<li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li>
-<li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li>
-<li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li>
-<li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li>
-<li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li>
-<li><a href="core.html#rlimitcpu">RLimitCPU</a></li>
-<li><a href="core.html#rlimitmem">RLimitMEM</a></li>
-<li><a href="core.html#rlimitnproc">RLimitNPROC</a></li>
-<li><a href="core.html#satisfy" id="S" name="S">Satisfy</a></li>
-<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><a href="mod_actions.html#script">Script</a></li>
-<li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li>
-<li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li>
-<li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
-<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
-<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><a href="core.html#serveradmin">ServerAdmin</a></li>
-<li><a href="core.html#serveralias">ServerAlias</a></li>
-<li><a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><a href="core.html#servername">ServerName</a></li>
-<li><a href="core.html#serverpath">ServerPath</a></li>
-<li><a href="core.html#serverroot">ServerRoot</a></li>
-<li><a href="core.html#serversignature">ServerSignature</a></li>
-<li><a href="core.html#servertokens">ServerTokens</a></li>
-<li><a href="mod_env.html#setenv">SetEnv</a></li>
-<li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li>
-<li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li>
-<li><a href="core.html#sethandler">SetHandler</a></li>
-<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
-<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
-<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
-<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
-<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
-<li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li>
-<li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li>
-<li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice</a></li>
-<li><a href="mod_ssl.html#sslengine">SSLEngine</a></li>
-<li><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCipherOrder</a></li>
-<li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li>
-<li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li>
-<li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li>
-<li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify</a></li>
-<li><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth</a></li>
-<li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li>
-<li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li>
-<li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li>
-<li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li>
-<li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
-<li><a href="mod_ssl.html#sslusername">SSLUserName</a></li>
-<li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li>
-<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
-<li><a href="mpm_common.html#startservers">StartServers</a></li>
-<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
-<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
-<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><a href="core.html#timeout">TimeOut</a></li>
-<li><a href="mod_log_config.html#transferlog">TransferLog</a></li>
-<li><a href="mod_mime.html#typesconfig">TypesConfig</a></li>
-<li><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv</a></li>
-<li><a href="core.html#usecanonicalname">UseCanonicalName</a></li>
-<li><a href="mpm_common.html#user">User</a></li>
-<li><a href="mod_userdir.html#userdir">UserDir</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li>
-<li><a href="core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li>
-<li><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></li>
-<li><a href="mod_include.html#xbithack" id="X" name="X">XBitHack</a></li>
-</ul></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directives.html.es b/docs/manual/mod/directives.html.es
deleted file mode 100644
index b2e96d6c4e..0000000000
--- a/docs/manual/mod/directives.html.es
+++ /dev/null
@@ -1,417 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Índice de Directivas - Servidor HTTP Apache</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index"><div id="page-header">
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="../">Versión 2.1</a> &gt; <a href="./">Módulos</a></div><div id="preamble"><h1>Índice de Directivas</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- Todas las directivas disponibles en la distribución
- estándar de Apache están en la lista que se muestra más
- abajo. Cada una se describe usando un formato uniforme, y existe
- un <a href="directive-dict.html" rel="Glossary">glosario</a>
- de los términos usados en las descripciones que puede
- consultar.
- </p>
-
- <p>
- También existe una <a href="quickreference.html">Guía Rápida de
- Referencia de Directivas</a> con información de cada
- directiva de forma resumida.
- </p>
-
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></p>
-</div>
-<div id="directive-list"><ul>
-<li><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex</a></li>
-<li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li>
-<li><a href="core.html#accessfilename">AccessFileName</a></li>
-<li><a href="mod_actions.html#action">Action</a></li>
-<li><a href="mod_autoindex.html#addalt">AddAlt</a></li>
-<li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li>
-<li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li>
-<li><a href="mod_mime.html#addcharset">AddCharset</a></li>
-<li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li>
-<li><a href="mod_autoindex.html#adddescription">AddDescription</a></li>
-<li><a href="mod_mime.html#addencoding">AddEncoding</a></li>
-<li><a href="mod_mime.html#addhandler">AddHandler</a></li>
-<li><a href="mod_autoindex.html#addicon">AddIcon</a></li>
-<li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li>
-<li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li>
-<li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li>
-<li><a href="mod_mime.html#addlanguage">AddLanguage</a></li>
-<li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li>
-<li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li>
-<li><a href="core.html#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><a href="mod_mime.html#addtype">AddType</a></li>
-<li><a href="mod_alias.html#alias">Alias</a></li>
-<li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li>
-<li><a href="mod_authz_host.html#allow">Allow</a></li>
-<li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li>
-<li><a href="core.html#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><a href="core.html#allowoverride">AllowOverride</a></li>
-<li><a href="mod_authn_anon.html#anonymous">Anonymous</a></li>
-<li><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-<li><a href="perchild.html#assignuserid">AssignUserID</a></li>
-<li><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></li>
-<li><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType</a></li>
-<li><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li>
-<li><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-<li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li>
-<li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></li>
-<li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li>
-<li><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize</a></li>
-<li><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></li>
-<li><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative</a></li>
-<li><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword</a></li>
-<li><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig</a></li>
-<li><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></li>
-<li><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases</a></li>
-<li><a href="mod_auth_ldap.html#authldapenabled">AuthLDAPEnabled</a></li>
-<li><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl</a></li>
-<li><a href="core.html#authname">AuthName</a></li>
-<li><a href="core.html#authtype">AuthType</a></li>
-<li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType</a></li>
-<li><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-<li><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-<li><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-<li><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-<li><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch</a></li>
-<li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire</a></li>
-<li><a href="mod_disk_cache.html#cachedirlength">CacheDirLength</a></li>
-<li><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></li>
-<li><a href="mod_cache.html#cachedisable">CacheDisable</a></li>
-<li><a href="mod_cache.html#cacheenable">CacheEnable</a></li>
-<li><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><a href="mod_file_cache.html#cachefile">CacheFile</a></li>
-<li><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><a href="mod_disk_cache.html#cachegcclean">CacheGcClean</a></li>
-<li><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></li>
-<li><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></li>
-<li><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused</a></li>
-<li><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire</a></li>
-<li><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></li>
-<li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><a href="mod_disk_cache.html#cacheroot">CacheRoot</a></li>
-<li><a href="mod_disk_cache.html#cachesize">CacheSize</a></li>
-<li><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></li>
-<li><a href="core.html#cgimapextension">CGIMapExtension</a></li>
-<li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li>
-<li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li>
-<li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li>
-<li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li>
-<li><a href="perchild.html#childperuserid">ChildPerUserID</a></li>
-<li><a href="core.html#contentdigest">ContentDigest</a></li>
-<li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li>
-<li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li>
-<li><a href="mod_log_config.html#cookielog">CookieLog</a></li>
-<li><a href="mod_usertrack.html#cookiename">CookieName</a></li>
-<li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li>
-<li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li>
-<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><a href="mod_log_config.html#customlog">CustomLog</a></li>
-<li><a href="mod_dav.html#dav" id="D" name="D">Dav</a></li>
-<li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li>
-<li><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB</a></li>
-<li><a href="mod_dav_fs.html#davlockdb">DavLockDB</a></li>
-<li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li>
-<li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li>
-<li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li>
-<li><a href="core.html#defaulttype">DefaultType</a></li>
-<li><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize</a></li>
-<li><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li>
-<li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li>
-<li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li>
-<li><a href="mod_authz_host.html#deny">Deny</a></li>
-<li><a href="core.html#directory">&lt;Directory&gt;</a></li>
-<li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li>
-<li><a href="core.html#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><a href="mod_dir.html#directoryslash">DirectorySlash</a></li>
-<li><a href="core.html#documentroot">DocumentRoot</a></li>
-<li><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook</a></li>
-<li><a href="core.html#enablemmap">EnableMMAP</a></li>
-<li><a href="core.html#enablesendfile">EnableSendfile</a></li>
-<li><a href="core.html#errordocument">ErrorDocument</a></li>
-<li><a href="core.html#errorlog">ErrorLog</a></li>
-<li><a href="mod_example.html#example">Example</a></li>
-<li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li>
-<li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li>
-<li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li>
-<li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li>
-<li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li>
-<li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li>
-<li><a href="core.html#fileetag" id="F" name="F">FileETag</a></li>
-<li><a href="core.html#files">&lt;Files&gt;</a></li>
-<li><a href="core.html#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><a href="core.html#forcetype">ForceType</a></li>
-<li><a href="mod_log_forensic.html#forensiclog">ForensicLog</a></li>
-<li><a href="mpm_common.html#group" id="G" name="G">Group</a></li>
-<li><a href="mod_headers.html#header" id="H" name="H">Header</a></li>
-<li><a href="mod_autoindex.html#headername">HeaderName</a></li>
-<li><a href="core.html#hostnamelookups">HostnameLookups</a></li>
-<li><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck</a></li>
-<li><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout</a></li>
-<li><a href="core.html#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><a href="core.html#ifmodule">&lt;IfModule&gt;</a></li>
-<li><a href="mod_version.html#ifversion">&lt;IfVersion&gt;</a></li>
-<li><a href="mod_imap.html#imapbase">ImapBase</a></li>
-<li><a href="mod_imap.html#imapdefault">ImapDefault</a></li>
-<li><a href="mod_imap.html#imapmenu">ImapMenu</a></li>
-<li><a href="core.html#include">Include</a></li>
-<li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li>
-<li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li>
-<li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li>
-<li><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
-<li><a href="mod_isapi.html#isapicachefile">ISAPICacheFile</a></li>
-<li><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync</a></li>
-<li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li>
-<li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
-<li><a href="core.html#keepalive" id="K" name="K">KeepAlive</a></li>
-<li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority</a></li>
-<li><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize</a></li>
-<li><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></li>
-<li><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></li>
-<li><a href="core.html#limit">&lt;Limit&gt;</a></li>
-<li><a href="core.html#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><a href="core.html#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><a href="core.html#limitrequestbody">LimitRequestBody</a></li>
-<li><a href="core.html#limitrequestfields">LimitRequestFields</a></li>
-<li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><a href="core.html#limitrequestline">LimitRequestLine</a></li>
-<li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><a href="mpm_common.html#listen">Listen</a></li>
-<li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li>
-<li><a href="mod_so.html#loadfile">LoadFile</a></li>
-<li><a href="mod_so.html#loadmodule">LoadModule</a></li>
-<li><a href="core.html#location">&lt;Location&gt;</a></li>
-<li><a href="core.html#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><a href="mod_log_config.html#logformat">LogFormat</a></li>
-<li><a href="core.html#loglevel">LogLevel</a></li>
-<li><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients</a></li>
-<li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><a href="prefork.html#maxspareservers">MaxSpareServers</a></li>
-<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><a href="mpm_netware.html#maxthreads">MaxThreads</a></li>
-<li><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></li>
-<li><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></li>
-<li><a href="mod_mem_cache.html#mcachesize">MCacheSize</a></li>
-<li><a href="mod_cern_meta.html#metadir">MetaDir</a></li>
-<li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li>
-<li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li>
-<li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li>
-<li><a href="prefork.html#minspareservers">MinSpareServers</a></li>
-<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li>
-<li><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li>
-<li><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost</a></li>
-<li><a href="mod_proxy.html#noproxy">NoProxy</a></li>
-<li><a href="perchild.html#numservers">NumServers</a></li>
-<li><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></li>
-<li><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></li>
-<li><a href="core.html#options" id="O" name="O">Options</a></li>
-<li><a href="mod_authz_host.html#order">Order</a></li>
-<li><a href="mod_env.html#passenv" id="P" name="P">PassEnv</a></li>
-<li><a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><a href="mod_echo.html#protocolecho">ProtocolEcho</a></li>
-<li><a href="mod_proxy.html#proxy">&lt;Proxy&gt;</a></li>
-<li><a href="mod_proxy.html#proxybadheader">ProxyBadHeader</a></li>
-<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
-<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
-<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
-<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
-<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
-<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
-<li><a href="mod_proxy.html#proxypass">ProxyPass</a></li>
-<li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
-<li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li>
-<li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
-<li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li>
-<li><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch</a></li>
-<li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li>
-<li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li>
-<li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li>
-<li><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName</a></li>
-<li><a href="mod_alias.html#redirect">Redirect</a></li>
-<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
-<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
-<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
-<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
-<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
-<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
-<li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li>
-<li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li>
-<li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><a href="mod_mime.html#removetype">RemoveType</a></li>
-<li><a href="mod_headers.html#requestheader">RequestHeader</a></li>
-<li><a href="core.html#require">Require</a></li>
-<li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li>
-<li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li>
-<li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li>
-<li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li>
-<li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li>
-<li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li>
-<li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li>
-<li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li>
-<li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li>
-<li><a href="core.html#rlimitcpu">RLimitCPU</a></li>
-<li><a href="core.html#rlimitmem">RLimitMEM</a></li>
-<li><a href="core.html#rlimitnproc">RLimitNPROC</a></li>
-<li><a href="core.html#satisfy" id="S" name="S">Satisfy</a></li>
-<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><a href="mod_actions.html#script">Script</a></li>
-<li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li>
-<li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li>
-<li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
-<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
-<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><a href="core.html#serveradmin">ServerAdmin</a></li>
-<li><a href="core.html#serveralias">ServerAlias</a></li>
-<li><a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><a href="core.html#servername">ServerName</a></li>
-<li><a href="core.html#serverpath">ServerPath</a></li>
-<li><a href="core.html#serverroot">ServerRoot</a></li>
-<li><a href="core.html#serversignature">ServerSignature</a></li>
-<li><a href="core.html#servertokens">ServerTokens</a></li>
-<li><a href="mod_env.html#setenv">SetEnv</a></li>
-<li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li>
-<li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li>
-<li><a href="core.html#sethandler">SetHandler</a></li>
-<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
-<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
-<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
-<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
-<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
-<li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li>
-<li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li>
-<li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice</a></li>
-<li><a href="mod_ssl.html#sslengine">SSLEngine</a></li>
-<li><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCipherOrder</a></li>
-<li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li>
-<li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li>
-<li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li>
-<li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify</a></li>
-<li><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth</a></li>
-<li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li>
-<li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li>
-<li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li>
-<li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li>
-<li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
-<li><a href="mod_ssl.html#sslusername">SSLUserName</a></li>
-<li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li>
-<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
-<li><a href="mpm_common.html#startservers">StartServers</a></li>
-<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
-<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
-<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><a href="core.html#timeout">TimeOut</a></li>
-<li><a href="mod_log_config.html#transferlog">TransferLog</a></li>
-<li><a href="mod_mime.html#typesconfig">TypesConfig</a></li>
-<li><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv</a></li>
-<li><a href="core.html#usecanonicalname">UseCanonicalName</a></li>
-<li><a href="mpm_common.html#user">User</a></li>
-<li><a href="mod_userdir.html#userdir">UserDir</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li>
-<li><a href="core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li>
-<li><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></li>
-<li><a href="mod_include.html#xbithack" id="X" name="X">XBitHack</a></li>
-</ul></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directives.html.ja.euc-jp b/docs/manual/mod/directives.html.ja.euc-jp
deleted file mode 100644
index f50b4a9b77..0000000000
--- a/docs/manual/mod/directives.html.ja.euc-jp
+++ /dev/null
@@ -1,410 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö°ìÍ÷ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div><div id="preamble"><h1>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö°ìÍ÷</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- ɸ½à Apache ÇÛÉۤˤ¢¤ë¤¹¤Ù¤Æ¤Î Apache ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ìÍ÷¤Ç¤¹¡£
- ¤³¤ì¤é¤Ï°ì´Ó¤·¤¿·Á¼°¤Ç½ñ¤«¤ì¤Æ¤¤¤Æ¡¢»È¤ï¤ì¤Æ¤¤¤ëÍѸì¤Î
- <a href="directive-dict.html" rel="Glossary">ÍѸ콸</a> ¤âÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- </p>
- <p>
- ³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î³µÍפòÀâÌÀ¤·¤¿ <a href="quickreference.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹</a>¤â
- ¤¢¤ê¤Þ¤¹¡£
- </p>
-
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></p>
-</div>
-<div id="directive-list"><ul>
-<li><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex</a></li>
-<li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li>
-<li><a href="core.html#accessfilename">AccessFileName</a></li>
-<li><a href="mod_actions.html#action">Action</a></li>
-<li><a href="mod_autoindex.html#addalt">AddAlt</a></li>
-<li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li>
-<li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li>
-<li><a href="mod_mime.html#addcharset">AddCharset</a></li>
-<li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li>
-<li><a href="mod_autoindex.html#adddescription">AddDescription</a></li>
-<li><a href="mod_mime.html#addencoding">AddEncoding</a></li>
-<li><a href="mod_mime.html#addhandler">AddHandler</a></li>
-<li><a href="mod_autoindex.html#addicon">AddIcon</a></li>
-<li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li>
-<li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li>
-<li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li>
-<li><a href="mod_mime.html#addlanguage">AddLanguage</a></li>
-<li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li>
-<li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li>
-<li><a href="core.html#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><a href="mod_mime.html#addtype">AddType</a></li>
-<li><a href="mod_alias.html#alias">Alias</a></li>
-<li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li>
-<li><a href="mod_authz_host.html#allow">Allow</a></li>
-<li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li>
-<li><a href="core.html#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><a href="core.html#allowoverride">AllowOverride</a></li>
-<li><a href="mod_authn_anon.html#anonymous">Anonymous</a></li>
-<li><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-<li><a href="perchild.html#assignuserid">AssignUserID</a></li>
-<li><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></li>
-<li><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType</a></li>
-<li><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li>
-<li><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-<li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li>
-<li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></li>
-<li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li>
-<li><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize</a></li>
-<li><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></li>
-<li><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative</a></li>
-<li><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword</a></li>
-<li><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig</a></li>
-<li><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></li>
-<li><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases</a></li>
-<li><a href="mod_auth_ldap.html#authldapenabled">AuthLDAPEnabled</a></li>
-<li><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl</a></li>
-<li><a href="core.html#authname">AuthName</a></li>
-<li><a href="core.html#authtype">AuthType</a></li>
-<li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType</a></li>
-<li><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-<li><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-<li><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-<li><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-<li><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch</a></li>
-<li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire</a></li>
-<li><a href="mod_disk_cache.html#cachedirlength">CacheDirLength</a></li>
-<li><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></li>
-<li><a href="mod_cache.html#cachedisable">CacheDisable</a></li>
-<li><a href="mod_cache.html#cacheenable">CacheEnable</a></li>
-<li><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><a href="mod_file_cache.html#cachefile">CacheFile</a></li>
-<li><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><a href="mod_disk_cache.html#cachegcclean">CacheGcClean</a></li>
-<li><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></li>
-<li><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></li>
-<li><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused</a></li>
-<li><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire</a></li>
-<li><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></li>
-<li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><a href="mod_disk_cache.html#cacheroot">CacheRoot</a></li>
-<li><a href="mod_disk_cache.html#cachesize">CacheSize</a></li>
-<li><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></li>
-<li><a href="core.html#cgimapextension">CGIMapExtension</a></li>
-<li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li>
-<li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li>
-<li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li>
-<li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li>
-<li><a href="perchild.html#childperuserid">ChildPerUserID</a></li>
-<li><a href="core.html#contentdigest">ContentDigest</a></li>
-<li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li>
-<li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li>
-<li><a href="mod_log_config.html#cookielog">CookieLog</a></li>
-<li><a href="mod_usertrack.html#cookiename">CookieName</a></li>
-<li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li>
-<li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li>
-<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><a href="mod_log_config.html#customlog">CustomLog</a></li>
-<li><a href="mod_dav.html#dav" id="D" name="D">Dav</a></li>
-<li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li>
-<li><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB</a></li>
-<li><a href="mod_dav_fs.html#davlockdb">DavLockDB</a></li>
-<li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li>
-<li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li>
-<li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li>
-<li><a href="core.html#defaulttype">DefaultType</a></li>
-<li><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize</a></li>
-<li><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li>
-<li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li>
-<li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li>
-<li><a href="mod_authz_host.html#deny">Deny</a></li>
-<li><a href="core.html#directory">&lt;Directory&gt;</a></li>
-<li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li>
-<li><a href="core.html#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><a href="mod_dir.html#directoryslash">DirectorySlash</a></li>
-<li><a href="core.html#documentroot">DocumentRoot</a></li>
-<li><a href="core.html#enablemmap" id="E" name="E">EnableMMAP</a></li>
-<li><a href="core.html#enablesendfile">EnableSendfile</a></li>
-<li><a href="core.html#errordocument">ErrorDocument</a></li>
-<li><a href="core.html#errorlog">ErrorLog</a></li>
-<li><a href="mod_example.html#example">Example</a></li>
-<li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li>
-<li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li>
-<li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li>
-<li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li>
-<li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li>
-<li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li>
-<li><a href="core.html#fileetag" id="F" name="F">FileETag</a></li>
-<li><a href="core.html#files">&lt;Files&gt;</a></li>
-<li><a href="core.html#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><a href="core.html#forcetype">ForceType</a></li>
-<li><a href="mod_log_forensic.html#forensiclog">ForensicLog</a></li>
-<li><a href="mpm_common.html#group" id="G" name="G">Group</a></li>
-<li><a href="mod_headers.html#header" id="H" name="H">Header</a></li>
-<li><a href="mod_autoindex.html#headername">HeaderName</a></li>
-<li><a href="core.html#hostnamelookups">HostnameLookups</a></li>
-<li><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck</a></li>
-<li><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout</a></li>
-<li><a href="core.html#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><a href="core.html#ifmodule">&lt;IfModule&gt;</a></li>
-<li><a href="mod_version.html#ifversion">&lt;IfVersion&gt;</a></li>
-<li><a href="mod_imap.html#imapbase">ImapBase</a></li>
-<li><a href="mod_imap.html#imapdefault">ImapDefault</a></li>
-<li><a href="mod_imap.html#imapmenu">ImapMenu</a></li>
-<li><a href="core.html#include">Include</a></li>
-<li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li>
-<li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li>
-<li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li>
-<li><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
-<li><a href="mod_isapi.html#isapicachefile">ISAPICacheFile</a></li>
-<li><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync</a></li>
-<li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li>
-<li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
-<li><a href="core.html#keepalive" id="K" name="K">KeepAlive</a></li>
-<li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority</a></li>
-<li><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize</a></li>
-<li><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></li>
-<li><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></li>
-<li><a href="core.html#limit">&lt;Limit&gt;</a></li>
-<li><a href="core.html#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><a href="core.html#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><a href="core.html#limitrequestbody">LimitRequestBody</a></li>
-<li><a href="core.html#limitrequestfields">LimitRequestFields</a></li>
-<li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><a href="core.html#limitrequestline">LimitRequestLine</a></li>
-<li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><a href="mpm_common.html#listen">Listen</a></li>
-<li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li>
-<li><a href="mod_so.html#loadfile">LoadFile</a></li>
-<li><a href="mod_so.html#loadmodule">LoadModule</a></li>
-<li><a href="core.html#location">&lt;Location&gt;</a></li>
-<li><a href="core.html#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><a href="mod_log_config.html#logformat">LogFormat</a></li>
-<li><a href="core.html#loglevel">LogLevel</a></li>
-<li><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients</a></li>
-<li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><a href="prefork.html#maxspareservers">MaxSpareServers</a></li>
-<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><a href="mpm_netware.html#maxthreads">MaxThreads</a></li>
-<li><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></li>
-<li><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></li>
-<li><a href="mod_mem_cache.html#mcachesize">MCacheSize</a></li>
-<li><a href="mod_cern_meta.html#metadir">MetaDir</a></li>
-<li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li>
-<li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li>
-<li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li>
-<li><a href="prefork.html#minspareservers">MinSpareServers</a></li>
-<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li>
-<li><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li>
-<li><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost</a></li>
-<li><a href="mod_proxy.html#noproxy">NoProxy</a></li>
-<li><a href="perchild.html#numservers">NumServers</a></li>
-<li><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></li>
-<li><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></li>
-<li><a href="core.html#options" id="O" name="O">Options</a></li>
-<li><a href="mod_authz_host.html#order">Order</a></li>
-<li><a href="mod_env.html#passenv" id="P" name="P">PassEnv</a></li>
-<li><a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><a href="mod_echo.html#protocolecho">ProtocolEcho</a></li>
-<li><a href="mod_proxy.html#proxy">&lt;Proxy&gt;</a></li>
-<li><a href="mod_proxy.html#proxybadheader">ProxyBadHeader</a></li>
-<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
-<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
-<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
-<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
-<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
-<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
-<li><a href="mod_proxy.html#proxypass">ProxyPass</a></li>
-<li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
-<li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li>
-<li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
-<li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li>
-<li><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch</a></li>
-<li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li>
-<li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li>
-<li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li>
-<li><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName</a></li>
-<li><a href="mod_alias.html#redirect">Redirect</a></li>
-<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
-<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
-<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
-<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
-<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
-<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
-<li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li>
-<li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li>
-<li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><a href="mod_mime.html#removetype">RemoveType</a></li>
-<li><a href="mod_headers.html#requestheader">RequestHeader</a></li>
-<li><a href="core.html#require">Require</a></li>
-<li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li>
-<li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li>
-<li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li>
-<li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li>
-<li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li>
-<li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li>
-<li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li>
-<li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li>
-<li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li>
-<li><a href="core.html#rlimitcpu">RLimitCPU</a></li>
-<li><a href="core.html#rlimitmem">RLimitMEM</a></li>
-<li><a href="core.html#rlimitnproc">RLimitNPROC</a></li>
-<li><a href="core.html#satisfy" id="S" name="S">Satisfy</a></li>
-<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><a href="mod_actions.html#script">Script</a></li>
-<li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li>
-<li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li>
-<li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
-<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
-<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><a href="core.html#serveradmin">ServerAdmin</a></li>
-<li><a href="core.html#serveralias">ServerAlias</a></li>
-<li><a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><a href="core.html#servername">ServerName</a></li>
-<li><a href="core.html#serverpath">ServerPath</a></li>
-<li><a href="core.html#serverroot">ServerRoot</a></li>
-<li><a href="core.html#serversignature">ServerSignature</a></li>
-<li><a href="core.html#servertokens">ServerTokens</a></li>
-<li><a href="mod_env.html#setenv">SetEnv</a></li>
-<li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li>
-<li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li>
-<li><a href="core.html#sethandler">SetHandler</a></li>
-<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
-<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
-<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
-<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
-<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
-<li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li>
-<li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li>
-<li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice</a></li>
-<li><a href="mod_ssl.html#sslengine">SSLEngine</a></li>
-<li><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCipherOrder</a></li>
-<li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li>
-<li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li>
-<li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li>
-<li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify</a></li>
-<li><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth</a></li>
-<li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li>
-<li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li>
-<li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li>
-<li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li>
-<li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
-<li><a href="mod_ssl.html#sslusername">SSLUserName</a></li>
-<li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li>
-<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
-<li><a href="mpm_common.html#startservers">StartServers</a></li>
-<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
-<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
-<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><a href="core.html#timeout">TimeOut</a></li>
-<li><a href="mod_log_config.html#transferlog">TransferLog</a></li>
-<li><a href="mod_mime.html#typesconfig">TypesConfig</a></li>
-<li><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv</a></li>
-<li><a href="core.html#usecanonicalname">UseCanonicalName</a></li>
-<li><a href="mpm_common.html#user">User</a></li>
-<li><a href="mod_userdir.html#userdir">UserDir</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li>
-<li><a href="core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li>
-<li><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></li>
-<li><a href="mod_include.html#xbithack" id="X" name="X">XBitHack</a></li>
-</ul></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directives.html.ko.euc-kr b/docs/manual/mod/directives.html.ko.euc-kr
deleted file mode 100644
index 3c6585cf6e..0000000000
--- a/docs/manual/mod/directives.html.ko.euc-kr
+++ /dev/null
@@ -1,412 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Áö½Ã¾î ¸ñ·Ï - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div><div id="preamble"><h1>Áö½Ã¾î ¸ñ·Ï</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- ´ÙÀ½Àº Ç¥ÁØ ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡¼­ »ç¿ë°¡´ÉÇÑ Áö½Ã¾î ¸ñ·ÏÀÌ´Ù.
- À̵éÀ» µ¿ÀÏÇÑ Çü½ÄÀ¸·Î ¼³¸íÇÏ¿´°í, ¼³¸í¿¡ »ç¿ëÇÑ ¿ë¾î
- <a href="directive-dict.html" rel="Glossary">»çÀü</a>µµ ÀÖ´Ù.
- </p>
-
- <p>
- °¢ Áö½Ã¾î¸¦ ¿ä¾àÇÏ¿© ¼³¸íÇÑ <a href="quickreference.html">Áö½Ã¾î ºü¸¥ÂüÁ¶</a>µµ ÀÖ´Ù.
- </p>
-
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></p>
-</div>
-<div id="directive-list"><ul>
-<li><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex</a></li>
-<li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li>
-<li><a href="core.html#accessfilename">AccessFileName</a></li>
-<li><a href="mod_actions.html#action">Action</a></li>
-<li><a href="mod_autoindex.html#addalt">AddAlt</a></li>
-<li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li>
-<li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li>
-<li><a href="mod_mime.html#addcharset">AddCharset</a></li>
-<li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li>
-<li><a href="mod_autoindex.html#adddescription">AddDescription</a></li>
-<li><a href="mod_mime.html#addencoding">AddEncoding</a></li>
-<li><a href="mod_mime.html#addhandler">AddHandler</a></li>
-<li><a href="mod_autoindex.html#addicon">AddIcon</a></li>
-<li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li>
-<li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li>
-<li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li>
-<li><a href="mod_mime.html#addlanguage">AddLanguage</a></li>
-<li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li>
-<li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li>
-<li><a href="core.html#addoutputfilterbytype">AddOutputFilterByType</a></li>
-<li><a href="mod_mime.html#addtype">AddType</a></li>
-<li><a href="mod_alias.html#alias">Alias</a></li>
-<li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li>
-<li><a href="mod_authz_host.html#allow">Allow</a></li>
-<li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li>
-<li><a href="core.html#allowencodedslashes">AllowEncodedSlashes</a></li>
-<li><a href="core.html#allowoverride">AllowOverride</a></li>
-<li><a href="mod_authn_anon.html#anonymous">Anonymous</a></li>
-<li><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-<li><a href="perchild.html#assignuserid">AssignUserID</a></li>
-<li><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></li>
-<li><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType</a></li>
-<li><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li>
-<li><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-<li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li>
-<li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></li>
-<li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li>
-<li><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize</a></li>
-<li><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></li>
-<li><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative</a></li>
-<li><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword</a></li>
-<li><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig</a></li>
-<li><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></li>
-<li><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases</a></li>
-<li><a href="mod_auth_ldap.html#authldapenabled">AuthLDAPEnabled</a></li>
-<li><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute</a></li>
-<li><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></li>
-<li><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl</a></li>
-<li><a href="core.html#authname">AuthName</a></li>
-<li><a href="core.html#authtype">AuthType</a></li>
-<li><a href="mod_authn_file.html#authuserfile">AuthUserFile</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType</a></li>
-<li><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-<li><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-<li><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-<li><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-<li><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch</a></li>
-<li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire</a></li>
-<li><a href="mod_disk_cache.html#cachedirlength">CacheDirLength</a></li>
-<li><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></li>
-<li><a href="mod_cache.html#cachedisable">CacheDisable</a></li>
-<li><a href="mod_cache.html#cacheenable">CacheEnable</a></li>
-<li><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><a href="mod_file_cache.html#cachefile">CacheFile</a></li>
-<li><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><a href="mod_disk_cache.html#cachegcclean">CacheGcClean</a></li>
-<li><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></li>
-<li><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></li>
-<li><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused</a></li>
-<li><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire</a></li>
-<li><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></li>
-<li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><a href="mod_disk_cache.html#cacheroot">CacheRoot</a></li>
-<li><a href="mod_disk_cache.html#cachesize">CacheSize</a></li>
-<li><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></li>
-<li><a href="core.html#cgimapextension">CGIMapExtension</a></li>
-<li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li>
-<li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li>
-<li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li>
-<li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li>
-<li><a href="perchild.html#childperuserid">ChildPerUserID</a></li>
-<li><a href="core.html#contentdigest">ContentDigest</a></li>
-<li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li>
-<li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li>
-<li><a href="mod_log_config.html#cookielog">CookieLog</a></li>
-<li><a href="mod_usertrack.html#cookiename">CookieName</a></li>
-<li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li>
-<li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li>
-<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><a href="mod_log_config.html#customlog">CustomLog</a></li>
-<li><a href="mod_dav.html#dav" id="D" name="D">Dav</a></li>
-<li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li>
-<li><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB</a></li>
-<li><a href="mod_dav_fs.html#davlockdb">DavLockDB</a></li>
-<li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li>
-<li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li>
-<li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li>
-<li><a href="core.html#defaulttype">DefaultType</a></li>
-<li><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize</a></li>
-<li><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li>
-<li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li>
-<li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li>
-<li><a href="mod_authz_host.html#deny">Deny</a></li>
-<li><a href="core.html#directory">&lt;Directory&gt;</a></li>
-<li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li>
-<li><a href="core.html#directorymatch">&lt;DirectoryMatch&gt;</a></li>
-<li><a href="mod_dir.html#directoryslash">DirectorySlash</a></li>
-<li><a href="core.html#documentroot">DocumentRoot</a></li>
-<li><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook</a></li>
-<li><a href="core.html#enablemmap">EnableMMAP</a></li>
-<li><a href="core.html#enablesendfile">EnableSendfile</a></li>
-<li><a href="core.html#errordocument">ErrorDocument</a></li>
-<li><a href="core.html#errorlog">ErrorLog</a></li>
-<li><a href="mod_example.html#example">Example</a></li>
-<li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li>
-<li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li>
-<li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li>
-<li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li>
-<li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li>
-<li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li>
-<li><a href="core.html#fileetag" id="F" name="F">FileETag</a></li>
-<li><a href="core.html#files">&lt;Files&gt;</a></li>
-<li><a href="core.html#filesmatch">&lt;FilesMatch&gt;</a></li>
-<li><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><a href="core.html#forcetype">ForceType</a></li>
-<li><a href="mod_log_forensic.html#forensiclog">ForensicLog</a></li>
-<li><a href="mpm_common.html#group" id="G" name="G">Group</a></li>
-<li><a href="mod_headers.html#header" id="H" name="H">Header</a></li>
-<li><a href="mod_autoindex.html#headername">HeaderName</a></li>
-<li><a href="core.html#hostnamelookups">HostnameLookups</a></li>
-<li><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck</a></li>
-<li><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout</a></li>
-<li><a href="core.html#ifdefine">&lt;IfDefine&gt;</a></li>
-<li><a href="core.html#ifmodule">&lt;IfModule&gt;</a></li>
-<li><a href="mod_version.html#ifversion">&lt;IfVersion&gt;</a></li>
-<li><a href="mod_imap.html#imapbase">ImapBase</a></li>
-<li><a href="mod_imap.html#imapdefault">ImapDefault</a></li>
-<li><a href="mod_imap.html#imapmenu">ImapMenu</a></li>
-<li><a href="core.html#include">Include</a></li>
-<li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li>
-<li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li>
-<li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li>
-<li><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
-<li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
-<li><a href="mod_isapi.html#isapicachefile">ISAPICacheFile</a></li>
-<li><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync</a></li>
-<li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li>
-<li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
-<li><a href="core.html#keepalive" id="K" name="K">KeepAlive</a></li>
-<li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li>
-<li><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority</a></li>
-<li><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries</a></li>
-<li><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile</a></li>
-<li><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize</a></li>
-<li><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></li>
-<li><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></li>
-<li><a href="core.html#limit">&lt;Limit&gt;</a></li>
-<li><a href="core.html#limitexcept">&lt;LimitExcept&gt;</a></li>
-<li><a href="core.html#limitinternalrecursion">LimitInternalRecursion</a></li>
-<li><a href="core.html#limitrequestbody">LimitRequestBody</a></li>
-<li><a href="core.html#limitrequestfields">LimitRequestFields</a></li>
-<li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li>
-<li><a href="core.html#limitrequestline">LimitRequestLine</a></li>
-<li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li>
-<li><a href="mpm_common.html#listen">Listen</a></li>
-<li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li>
-<li><a href="mod_so.html#loadfile">LoadFile</a></li>
-<li><a href="mod_so.html#loadmodule">LoadModule</a></li>
-<li><a href="core.html#location">&lt;Location&gt;</a></li>
-<li><a href="core.html#locationmatch">&lt;LocationMatch&gt;</a></li>
-<li><a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><a href="mod_log_config.html#logformat">LogFormat</a></li>
-<li><a href="core.html#loglevel">LogLevel</a></li>
-<li><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients</a></li>
-<li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li>
-<li><a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread</a></li>
-<li><a href="prefork.html#maxspareservers">MaxSpareServers</a></li>
-<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><a href="mpm_netware.html#maxthreads">MaxThreads</a></li>
-<li><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></li>
-<li><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></li>
-<li><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></li>
-<li><a href="mod_mem_cache.html#mcachesize">MCacheSize</a></li>
-<li><a href="mod_cern_meta.html#metadir">MetaDir</a></li>
-<li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li>
-<li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li>
-<li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li>
-<li><a href="prefork.html#minspareservers">MinSpareServers</a></li>
-<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li>
-<li><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li>
-<li><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost</a></li>
-<li><a href="mod_proxy.html#noproxy">NoProxy</a></li>
-<li><a href="perchild.html#numservers">NumServers</a></li>
-<li><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></li>
-<li><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></li>
-<li><a href="core.html#options" id="O" name="O">Options</a></li>
-<li><a href="mod_authz_host.html#order">Order</a></li>
-<li><a href="mod_env.html#passenv" id="P" name="P">PassEnv</a></li>
-<li><a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><a href="mod_echo.html#protocolecho">ProtocolEcho</a></li>
-<li><a href="mod_proxy.html#proxy">&lt;Proxy&gt;</a></li>
-<li><a href="mod_proxy.html#proxybadheader">ProxyBadHeader</a></li>
-<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
-<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
-<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
-<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
-<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
-<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
-<li><a href="mod_proxy.html#proxypass">ProxyPass</a></li>
-<li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
-<li><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
-<li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li>
-<li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
-<li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li>
-<li><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch</a></li>
-<li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li>
-<li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li>
-<li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li>
-<li><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName</a></li>
-<li><a href="mod_alias.html#redirect">Redirect</a></li>
-<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
-<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
-<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
-<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
-<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
-<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
-<li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li>
-<li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li>
-<li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><a href="mod_mime.html#removetype">RemoveType</a></li>
-<li><a href="mod_headers.html#requestheader">RequestHeader</a></li>
-<li><a href="core.html#require">Require</a></li>
-<li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li>
-<li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li>
-<li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li>
-<li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li>
-<li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li>
-<li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li>
-<li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li>
-<li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li>
-<li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li>
-<li><a href="core.html#rlimitcpu">RLimitCPU</a></li>
-<li><a href="core.html#rlimitmem">RLimitMEM</a></li>
-<li><a href="core.html#rlimitnproc">RLimitNPROC</a></li>
-<li><a href="core.html#satisfy" id="S" name="S">Satisfy</a></li>
-<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><a href="mod_actions.html#script">Script</a></li>
-<li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li>
-<li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li>
-<li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li>
-<li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
-<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
-<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><a href="core.html#serveradmin">ServerAdmin</a></li>
-<li><a href="core.html#serveralias">ServerAlias</a></li>
-<li><a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><a href="core.html#servername">ServerName</a></li>
-<li><a href="core.html#serverpath">ServerPath</a></li>
-<li><a href="core.html#serverroot">ServerRoot</a></li>
-<li><a href="core.html#serversignature">ServerSignature</a></li>
-<li><a href="core.html#servertokens">ServerTokens</a></li>
-<li><a href="mod_env.html#setenv">SetEnv</a></li>
-<li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li>
-<li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li>
-<li><a href="core.html#sethandler">SetHandler</a></li>
-<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
-<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
-<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
-<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
-<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
-<li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li>
-<li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li>
-<li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice</a></li>
-<li><a href="mod_ssl.html#sslengine">SSLEngine</a></li>
-<li><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCipherOrder</a></li>
-<li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li>
-<li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li>
-<li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li>
-<li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile</a></li>
-<li><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath</a></li>
-<li><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite</a></li>
-<li><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile</a></li>
-<li><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath</a></li>
-<li><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol</a></li>
-<li><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify</a></li>
-<li><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth</a></li>
-<li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li>
-<li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li>
-<li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li>
-<li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li>
-<li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
-<li><a href="mod_ssl.html#sslusername">SSLUserName</a></li>
-<li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li>
-<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
-<li><a href="mpm_common.html#startservers">StartServers</a></li>
-<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
-<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
-<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><a href="core.html#timeout">TimeOut</a></li>
-<li><a href="mod_log_config.html#transferlog">TransferLog</a></li>
-<li><a href="mod_mime.html#typesconfig">TypesConfig</a></li>
-<li><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv</a></li>
-<li><a href="core.html#usecanonicalname">UseCanonicalName</a></li>
-<li><a href="mpm_common.html#user">User</a></li>
-<li><a href="mod_userdir.html#userdir">UserDir</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot</a></li>
-<li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li>
-<li><a href="core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li>
-<li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li>
-<li><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></li>
-<li><a href="mod_include.html#xbithack" id="X" name="X">XBitHack</a></li>
-</ul></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/directives.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/directives.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/directives.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/directives.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/directives.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/directives.xml b/docs/manual/mod/directives.xml
deleted file mode 100644
index c79203e7c7..0000000000
--- a/docs/manual/mod/directives.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE directiveindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<directiveindex metafile="directives.xml.meta">
- <title>Directive Index</title>
- <summary>
- <p>
- Each Apache directive available in the standard Apache
- distribution is listed here. They are described using a
- consistent format, and there is <a href="directive-dict.html"
- rel="Glossary">a dictionary</a> of the terms used in their
- descriptions available.
- </p>
-
- <p>
- A <a href="quickreference.html">Directive Quick-Reference</a>
- is also available giving details about each directive in a
- summary form.
- </p>
- </summary>
-</directiveindex>
diff --git a/docs/manual/mod/directives.xml.de b/docs/manual/mod/directives.xml.de
deleted file mode 100644
index b97573fab0..0000000000
--- a/docs/manual/mod/directives.xml.de
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE directiveindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<directiveindex metafile="directives.xml.meta">
- <title>Verzeichnis der Direktiven</title>
- <summary>
- <p>
- Hier sind alle Apache-Direktiven aufgef&uuml;hrt, die in der
- Standard-Apache-Distribution verf&uuml;gbar sind. Sie sind in
- einem einheitlichen Format beschrieben. Ein <a
- href="directive-dict.html" rel="Glossary">Glossar</a>
- erl&auml;utert die in der Beschreibung verwendeten Begriffe.
- </p>
-
- <p>
- Au&szlig;erdem existiert eine <a
- href="quickreference.html">Kurzreferenz der Direktiven</a>, welche
- zu jeder Direktive eine Zusammenfassung der Details enth&auml;lt.
- </p>
- </summary>
-</directiveindex>
diff --git a/docs/manual/mod/directives.xml.es b/docs/manual/mod/directives.xml.es
deleted file mode 100644
index 30143fcc84..0000000000
--- a/docs/manual/mod/directives.xml.es
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE directiveindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<directiveindex metafile="directives.xml.meta">
- <title>&#205;ndice de Directivas</title>
- <summary>
- <p>
- Todas las directivas disponibles en la distribuci&#243;n
- est&#225;ndar de Apache están en la lista que se muestra m&#225;s
- abajo. Cada una se describe usando un formato uniforme, y existe
- un <a href="directive-dict.html" rel="Glossary">glosario</a>
- de los t&#233;rminos usados en las descripciones que puede
- consultar.
- </p>
-
- <p>
- Tambi&#233;n existe una <a href="quickreference.html">Gu&#237;a R&#225;pida de
- Referencia de Directivas</a> con informaci&#243;n de cada
- directiva de forma resumida.
- </p>
- </summary>
-</directiveindex>
-
diff --git a/docs/manual/mod/directives.xml.ja b/docs/manual/mod/directives.xml.ja
deleted file mode 100644
index 8dcff8da15..0000000000
--- a/docs/manual/mod/directives.xml.ja
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE directiveindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<directiveindex metafile="directives.xml.meta">
- <title>$B%G%#%l%/%F%#%V0lMw(B</title>
- <summary>
- <p>
- $BI8=`(B Apache $BG[I[$K$"$k$9$Y$F$N(B Apache $B$N%G%#%l%/%F%#%V$N0lMw$G$9!#(B
- $B$3$l$i$O0l4S$7$?7A<0$G=q$+$l$F$$$F!";H$o$l$F$$$kMQ8l$N(B
- <a href="directive-dict.html"
- rel="Glossary">$BMQ8l=8(B</a> $B$bMQ0U$5$l$F$$$^$9!#(B
- </p>
- <p>
- $B3F%G%#%l%/%F%#%V$N35MW$r@bL@$7$?(B <a
- href="quickreference.html">$B%G%#%l%/%F%#%V%/%$%C%/%j%U%!%l%s%9(B</a>$B$b(B
- $B$"$j$^$9!#(B
- </p>
- </summary>
-</directiveindex>
diff --git a/docs/manual/mod/directives.xml.ko b/docs/manual/mod/directives.xml.ko
deleted file mode 100644
index c29f5ce7aa..0000000000
--- a/docs/manual/mod/directives.xml.ko
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding='EUC-KR' ?>
-<!DOCTYPE directiveindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<directiveindex metafile="directives.xml.meta">
- <title>Áö½Ã¾î ¸ñ·Ï</title>
- <summary>
- <p>
- ´ÙÀ½Àº Ç¥ÁØ ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡¼­ »ç¿ë°¡´ÉÇÑ Áö½Ã¾î ¸ñ·ÏÀÌ´Ù.
- À̵éÀ» µ¿ÀÏÇÑ Çü½ÄÀ¸·Î ¼³¸íÇÏ¿´°í, ¼³¸í¿¡ »ç¿ëÇÑ ¿ë¾î
- <a href="directive-dict.html" rel="Glossary">»çÀü</a>µµ ÀÖ´Ù.
- </p>
-
- <p>
- °¢ Áö½Ã¾î¸¦ ¿ä¾àÇÏ¿© ¼³¸íÇÑ <a
- href="quickreference.html">Áö½Ã¾î ºü¸¥ÂüÁ¶</a>µµ ÀÖ´Ù.
- </p>
- </summary>
-</directiveindex>
diff --git a/docs/manual/mod/directives.xml.meta b/docs/manual/mod/directives.xml.meta
deleted file mode 100644
index 9049742913..0000000000
--- a/docs/manual/mod/directives.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>directives</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/index.html b/docs/manual/mod/index.html
deleted file mode 100644
index 15e69b0703..0000000000
--- a/docs/manual/mod/index.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: index.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/index.html.de b/docs/manual/mod/index.html.de
deleted file mode 100644
index ce0e5c4f93..0000000000
--- a/docs/manual/mod/index.html.de
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Modul-Index - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="module-index"><div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Modul-Index</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- Unten ist eine Liste aller Module angegeben, die als Bestandteil der
- Apache-Distribution mitgeliefert werden. Bitte beachten Sie auch die
- vollständige alphabetische Liste <a href="directives.html">aller
- Apache-Direktiven</a>.
- </p>
- </div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#core">Kernfunktionen und
- Multi-Processing-Module</a></li><li><img alt="" src="../images/down.gif" /> <a href="#other">Andere Module</a></li></ul><h3>Siehe auch</h3>
-<ul class="seealso">
-<li><a href="../mpm.html">Multi-Processing-Module (MPMs)</a>
- </li>
-<li><a href="quickreference.html">Kurzreferenz der Direktiven</a>
- </li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="core" name="core">Kernfunktionen und
- Multi-Processing-Module</a></h2>
-<dl>
-<dt><a href="core.html">core</a></dt><dd>Ständig verfügbare Kernfunktionen des Apache HTTP
-Servers</dd>
-<dt><a href="mpm_common.html">mpm_common</a></dt><dd class="separate">Eine Sammlung von Direktiven, die in mehr als einem
- Multi-Processing-Modul (MPM) implementiert sind.</dd>
-<dt><a href="beos.html">beos</a></dt><dd>Dieses Multi-Processing-Modul ist für BeOS
- optimiert.</dd>
-<dt><a href="leader.html">leader</a></dt><dd>Eine experimentelle Variante des Standard-MPMs
- <code class="module"><a href="../mod/worker.html">worker</a></code></dd>
-<dt><a href="mpm_netware.html">mpm_netware</a></dt><dd>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</dd>
-<dt><a href="mpmt_os2.html">mpmt_os2</a></dt><dd>Hybrid multi-process, multi-threaded MPM for OS/2</dd>
-<dt><a href="perchild.html">perchild</a></dt><dd>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</dd>
-<dt><a href="prefork.html">prefork</a></dt><dd>Implementiert einen im Voraus forkenden Webserver ohne
- Thread-Unterstützung</dd>
-<dt><a href="threadpool.html">threadpool</a></dt><dd>Yet another experimental variant of the standard
-<code class="module"><a href="../mod/worker.html">worker</a></code> MPM</dd>
-<dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd> Das Multi-Processing-Modul ist optimiert für
- Windows NT.</dd>
-<dt><a href="worker.html">worker</a></dt><dd>Multi-Processing-Modul, das einen Hybrid-Webserver mit
- Multi-Thread und Multi-Prozess-Unterstützung implementiert</dd>
-</dl></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="other" name="other">Andere Module</a></h2>
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a></p>
-<dl><dt><a href="mod_actions.html" id="A" name="A">mod_actions</a></dt><dd>Dieses Modul ermöglicht die Ausführung von CGI-Skripten
- in Abhängigkeit von Medientypen und Anfragemethoden.</dd>
-<dt><a href="mod_alias.html">mod_alias</a></dt><dd>Provides for mapping different parts of the host
- filesystem in the document tree and for URL redirection</dd>
-<dt><a href="mod_asis.html">mod_asis</a></dt><dd>Sends files that contain their own
-HTTP headers</dd>
-<dt><a href="mod_auth_basic.html">mod_auth_basic</a></dt><dd>Basic authentication</dd>
-<dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>User authentication using MD5
- Digest Authentication.</dd>
-<dt><a href="mod_auth_ldap.html">mod_auth_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</dd>
-<dt><a href="mod_authn_anon.html">mod_authn_anon</a></dt><dd>Allows "anonymous" user access to authenticated
- areas</dd>
-<dt><a href="mod_authn_dbm.html">mod_authn_dbm</a></dt><dd>User authentication using DBM files</dd>
-<dt><a href="mod_authn_default.html">mod_authn_default</a></dt><dd>Authentication fallback module</dd>
-<dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
-<dt><a href="mod_authz_dbm.html">mod_authz_dbm</a></dt><dd>Group authorization using DBM files</dd>
-<dt><a href="mod_authz_default.html">mod_authz_default</a></dt><dd>Authorization fallback module</dd>
-<dt><a href="mod_authz_groupfile.html">mod_authz_groupfile</a></dt><dd>Group authorization using plaintext files</dd>
-<dt><a href="mod_authz_host.html">mod_authz_host</a></dt><dd>Group authorizations based on host (name or IP
-address)</dd>
-<dt><a href="mod_authz_owner.html">mod_authz_owner</a></dt><dd>Authorization based on file ownership</dd>
-<dt><a href="mod_authz_user.html">mod_authz_user</a></dt><dd>User Authorization</dd>
-<dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd>Generates directory indexes,
- automatically, similar to the Unix <code>ls</code> command or the
- Win32 <code>dir</code> shell command</dd>
-<dt><a href="mod_cache.html" id="C" name="C">mod_cache</a></dt><dd>Content cache keyed to URIs.</dd>
-<dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd>CERN httpd metafile semantics</dd>
-<dt><a href="mod_cgi.html">mod_cgi</a></dt><dd>Execution of CGI scripts</dd>
-<dt><a href="mod_cgid.html">mod_cgid</a></dt><dd>Execution of CGI scripts using an
- external CGI daemon</dd>
-<dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd>Specify character set translation or recoding</dd>
-<dt><a href="mod_dav.html" id="D" name="D">mod_dav</a></dt><dd>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</dd>
-<dt><a href="mod_dav_fs.html">mod_dav_fs</a></dt><dd>filesystem provider for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_dav_lock.html">mod_dav_lock</a></dt><dd>generic locking module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_deflate.html">mod_deflate</a></dt><dd>Compress content before it is delivered to the
-client</dd>
-<dt><a href="mod_dir.html">mod_dir</a></dt><dd>Provides for "trailing slash" redirects and
- serving directory index files</dd>
-<dt><a href="mod_disk_cache.html">mod_disk_cache</a></dt><dd>Content cache storage manager keyed to URIs</dd>
-<dt><a href="mod_echo.html" id="E" name="E">mod_echo</a></dt><dd>A simple echo server to illustrate protocol
-modules</dd>
-<dt><a href="mod_env.html">mod_env</a></dt><dd>Modifies the environment which is passed to CGI scripts and
-SSI pages</dd>
-<dt><a href="mod_example.html">mod_example</a></dt><dd>Illustrates the Apache module API</dd>
-<dt><a href="mod_expires.html">mod_expires</a></dt><dd>Generation of <code>Expires</code> HTTP headers according to
-user-specified criteria</dd>
-<dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd>Pass the response body through an external program before
-delivery to the client</dd>
-<dt><a href="mod_file_cache.html" id="F" name="F">mod_file_cache</a></dt><dd>Caches a static list of files in memory</dd>
-<dt><a href="mod_headers.html" id="H" name="H">mod_headers</a></dt><dd>Customization of HTTP request and response
-headers</dd>
-<dt><a href="mod_ident.html" id="I" name="I">mod_ident</a></dt><dd>RFC 1413 ident lookups</dd>
-<dt><a href="mod_imap.html">mod_imap</a></dt><dd>Server-side imagemap processing</dd>
-<dt><a href="mod_include.html">mod_include</a></dt><dd>Server-parsed html documents (Server Side Includes)</dd>
-<dt><a href="mod_info.html">mod_info</a></dt><dd>Provides a comprehensive overview of the server
-configuration</dd>
-<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>ISAPI Extensions within Apache for Windows</dd>
-<dt><a href="mod_ldap.html" id="L" name="L">mod_ldap</a></dt><dd>LDAP connection pooling and result caching services for use
-by other LDAP modules</dd>
-<dt><a href="mod_log_config.html">mod_log_config</a></dt><dd>Logging of the requests made to the server</dd>
-<dt><a href="mod_log_forensic.html">mod_log_forensic</a></dt><dd>Forensic Logging of the requests made to the server</dd>
-<dt><a href="mod_logio.html">mod_logio</a></dt><dd>Logging of input and output bytes per request</dd>
-<dt><a href="mod_mem_cache.html" id="M" name="M">mod_mem_cache</a></dt><dd>Content cache keyed to URIs</dd>
-<dt><a href="mod_mime.html">mod_mime</a></dt><dd>Associates the requested filename's extensions
- with the file's behavior (handlers and filters)
- and content (mime-type, language, character set and
- encoding)</dd>
-<dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd>Determines the MIME type of a file
- by looking at a few bytes of its contents</dd>
-<dt><a href="mod_negotiation.html" id="N" name="N">mod_negotiation</a></dt><dd>Provides for <a href="../content-negotiation.html">content negotiation</a></dd>
-<dt><a href="mod_nw_ssl.html">mod_nw_ssl</a></dt><dd>Enable SSL encryption for NetWare</dd>
-<dt><a href="mod_proxy.html" id="P" name="P">mod_proxy</a></dt><dd>HTTP/1.1 proxy/gateway server</dd>
-<dt><a href="mod_proxy_connect.html">mod_proxy_connect</a></dt><dd><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> extension for
-<code>CONNECT</code> request handling</dd>
-<dt><a href="mod_proxy_ftp.html">mod_proxy_ftp</a></dt><dd>FTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_rewrite.html" id="R" name="R">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</dd>
-<dt><a href="mod_setenvif.html" id="S" name="S">mod_setenvif</a></dt><dd>Allows the setting of environment variables based
-on characteristics of the request</dd>
-<dt><a href="mod_so.html">mod_so</a></dt><dd>Loading of executable code and
-modules into the server at start-up or restart time</dd>
-<dt><a href="mod_speling.html">mod_speling</a></dt><dd>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</dd>
-<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
-<dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
-performance</dd>
-<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
-and Group</dd>
-<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
-identifier for each request</dd>
-<dt><a href="mod_userdir.html">mod_userdir</a></dt><dd>User-specific directories</dd>
-<dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd>
-<em>Clickstream</em> logging of user activity on a site
-</dd>
-<dt><a href="mod_version.html" id="V" name="V">mod_version</a></dt><dd>Version dependent configuration</dd>
-<dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd>Provides for dynamically configured mass virtual
-hosting</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/index.html.en b/docs/manual/mod/index.html.en
deleted file mode 100644
index 3df53a8653..0000000000
--- a/docs/manual/mod/index.html.en
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Module Index - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="module-index"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Module Index</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- Below is a list of all of the modules that come as part of
- the Apache distribution. See also the complete
- alphabetical list of <a href="directives.html">all Apache
- directives</a>.
- </p>
- </div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#core">Core Features and Multi-Processing
- Modules</a></li><li><img alt="" src="../images/down.gif" /> <a href="#other">Other Modules</a></li></ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../mpm.html">Multi-Processing Modules (MPMs)</a>
- </li>
-<li><a href="quickreference.html">Directive Quick Reference</a>
- </li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="core" name="core">Core Features and Multi-Processing
- Modules</a></h2>
-<dl>
-<dt><a href="core.html">core</a></dt><dd>Core Apache HTTP Server features that are always
-available</dd>
-<dt><a href="mpm_common.html">mpm_common</a></dt><dd class="separate">A collection of directives that are implemented by
-more than one multi-processing module (MPM)</dd>
-<dt><a href="beos.html">beos</a></dt><dd>This Multi-Processing Module is optimized for BeOS.</dd>
-<dt><a href="leader.html">leader</a></dt><dd>An experimental variant of the standard <code class="module"><a href="../mod/worker.html">worker</a></code>
-MPM</dd>
-<dt><a href="mpm_netware.html">mpm_netware</a></dt><dd>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</dd>
-<dt><a href="mpmt_os2.html">mpmt_os2</a></dt><dd>Hybrid multi-process, multi-threaded MPM for OS/2</dd>
-<dt><a href="perchild.html">perchild</a></dt><dd>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</dd>
-<dt><a href="prefork.html">prefork</a></dt><dd>Implements a non-threaded, pre-forking web server</dd>
-<dt><a href="threadpool.html">threadpool</a></dt><dd>Yet another experimental variant of the standard
-<code class="module"><a href="../mod/worker.html">worker</a></code> MPM</dd>
-<dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd>This Multi-Processing Module is optimized for Windows
-NT.</dd>
-<dt><a href="worker.html">worker</a></dt><dd>Multi-Processing Module implementing a hybrid
- multi-threaded multi-process web server</dd>
-</dl></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="other" name="other">Other Modules</a></h2>
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a></p>
-<dl><dt><a href="mod_actions.html" id="A" name="A">mod_actions</a></dt><dd>This module provides for executing CGI scripts based on
-media type or request method.</dd>
-<dt><a href="mod_alias.html">mod_alias</a></dt><dd>Provides for mapping different parts of the host
- filesystem in the document tree and for URL redirection</dd>
-<dt><a href="mod_asis.html">mod_asis</a></dt><dd>Sends files that contain their own
-HTTP headers</dd>
-<dt><a href="mod_auth_basic.html">mod_auth_basic</a></dt><dd>Basic authentication</dd>
-<dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>User authentication using MD5
- Digest Authentication.</dd>
-<dt><a href="mod_auth_ldap.html">mod_auth_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</dd>
-<dt><a href="mod_authn_anon.html">mod_authn_anon</a></dt><dd>Allows "anonymous" user access to authenticated
- areas</dd>
-<dt><a href="mod_authn_dbm.html">mod_authn_dbm</a></dt><dd>User authentication using DBM files</dd>
-<dt><a href="mod_authn_default.html">mod_authn_default</a></dt><dd>Authentication fallback module</dd>
-<dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
-<dt><a href="mod_authz_dbm.html">mod_authz_dbm</a></dt><dd>Group authorization using DBM files</dd>
-<dt><a href="mod_authz_default.html">mod_authz_default</a></dt><dd>Authorization fallback module</dd>
-<dt><a href="mod_authz_groupfile.html">mod_authz_groupfile</a></dt><dd>Group authorization using plaintext files</dd>
-<dt><a href="mod_authz_host.html">mod_authz_host</a></dt><dd>Group authorizations based on host (name or IP
-address)</dd>
-<dt><a href="mod_authz_owner.html">mod_authz_owner</a></dt><dd>Authorization based on file ownership</dd>
-<dt><a href="mod_authz_user.html">mod_authz_user</a></dt><dd>User Authorization</dd>
-<dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd>Generates directory indexes,
- automatically, similar to the Unix <code>ls</code> command or the
- Win32 <code>dir</code> shell command</dd>
-<dt><a href="mod_cache.html" id="C" name="C">mod_cache</a></dt><dd>Content cache keyed to URIs.</dd>
-<dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd>CERN httpd metafile semantics</dd>
-<dt><a href="mod_cgi.html">mod_cgi</a></dt><dd>Execution of CGI scripts</dd>
-<dt><a href="mod_cgid.html">mod_cgid</a></dt><dd>Execution of CGI scripts using an
- external CGI daemon</dd>
-<dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd>Specify character set translation or recoding</dd>
-<dt><a href="mod_dav.html" id="D" name="D">mod_dav</a></dt><dd>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</dd>
-<dt><a href="mod_dav_fs.html">mod_dav_fs</a></dt><dd>filesystem provider for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_dav_lock.html">mod_dav_lock</a></dt><dd>generic locking module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_deflate.html">mod_deflate</a></dt><dd>Compress content before it is delivered to the
-client</dd>
-<dt><a href="mod_dir.html">mod_dir</a></dt><dd>Provides for "trailing slash" redirects and
- serving directory index files</dd>
-<dt><a href="mod_disk_cache.html">mod_disk_cache</a></dt><dd>Content cache storage manager keyed to URIs</dd>
-<dt><a href="mod_echo.html" id="E" name="E">mod_echo</a></dt><dd>A simple echo server to illustrate protocol
-modules</dd>
-<dt><a href="mod_env.html">mod_env</a></dt><dd>Modifies the environment which is passed to CGI scripts and
-SSI pages</dd>
-<dt><a href="mod_example.html">mod_example</a></dt><dd>Illustrates the Apache module API</dd>
-<dt><a href="mod_expires.html">mod_expires</a></dt><dd>Generation of <code>Expires</code> HTTP headers according to
-user-specified criteria</dd>
-<dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd>Pass the response body through an external program before
-delivery to the client</dd>
-<dt><a href="mod_file_cache.html" id="F" name="F">mod_file_cache</a></dt><dd>Caches a static list of files in memory</dd>
-<dt><a href="mod_headers.html" id="H" name="H">mod_headers</a></dt><dd>Customization of HTTP request and response
-headers</dd>
-<dt><a href="mod_ident.html" id="I" name="I">mod_ident</a></dt><dd>RFC 1413 ident lookups</dd>
-<dt><a href="mod_imap.html">mod_imap</a></dt><dd>Server-side imagemap processing</dd>
-<dt><a href="mod_include.html">mod_include</a></dt><dd>Server-parsed html documents (Server Side Includes)</dd>
-<dt><a href="mod_info.html">mod_info</a></dt><dd>Provides a comprehensive overview of the server
-configuration</dd>
-<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>ISAPI Extensions within Apache for Windows</dd>
-<dt><a href="mod_ldap.html" id="L" name="L">mod_ldap</a></dt><dd>LDAP connection pooling and result caching services for use
-by other LDAP modules</dd>
-<dt><a href="mod_log_config.html">mod_log_config</a></dt><dd>Logging of the requests made to the server</dd>
-<dt><a href="mod_log_forensic.html">mod_log_forensic</a></dt><dd>Forensic Logging of the requests made to the server</dd>
-<dt><a href="mod_logio.html">mod_logio</a></dt><dd>Logging of input and output bytes per request</dd>
-<dt><a href="mod_mem_cache.html" id="M" name="M">mod_mem_cache</a></dt><dd>Content cache keyed to URIs</dd>
-<dt><a href="mod_mime.html">mod_mime</a></dt><dd>Associates the requested filename's extensions
- with the file's behavior (handlers and filters)
- and content (mime-type, language, character set and
- encoding)</dd>
-<dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd>Determines the MIME type of a file
- by looking at a few bytes of its contents</dd>
-<dt><a href="mod_negotiation.html" id="N" name="N">mod_negotiation</a></dt><dd>Provides for <a href="../content-negotiation.html">content negotiation</a></dd>
-<dt><a href="mod_nw_ssl.html">mod_nw_ssl</a></dt><dd>Enable SSL encryption for NetWare</dd>
-<dt><a href="mod_proxy.html" id="P" name="P">mod_proxy</a></dt><dd>HTTP/1.1 proxy/gateway server</dd>
-<dt><a href="mod_proxy_connect.html">mod_proxy_connect</a></dt><dd><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> extension for
-<code>CONNECT</code> request handling</dd>
-<dt><a href="mod_proxy_ftp.html">mod_proxy_ftp</a></dt><dd>FTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_rewrite.html" id="R" name="R">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</dd>
-<dt><a href="mod_setenvif.html" id="S" name="S">mod_setenvif</a></dt><dd>Allows the setting of environment variables based
-on characteristics of the request</dd>
-<dt><a href="mod_so.html">mod_so</a></dt><dd>Loading of executable code and
-modules into the server at start-up or restart time</dd>
-<dt><a href="mod_speling.html">mod_speling</a></dt><dd>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</dd>
-<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
-<dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
-performance</dd>
-<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
-and Group</dd>
-<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
-identifier for each request</dd>
-<dt><a href="mod_userdir.html">mod_userdir</a></dt><dd>User-specific directories</dd>
-<dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd>
-<em>Clickstream</em> logging of user activity on a site
-</dd>
-<dt><a href="mod_version.html" id="V" name="V">mod_version</a></dt><dd>Version dependent configuration</dd>
-<dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd>Provides for dynamically configured mass virtual
-hosting</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/index.html.es b/docs/manual/mod/index.html.es
deleted file mode 100644
index 181d57db3b..0000000000
--- a/docs/manual/mod/index.html.es
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Índice de Módulos - Servidor HTTP Apache</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="module-index"><div id="page-header">
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="../">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Índice de Módulos</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- Abajo se muestra una lista con todos los módulos que forman
- parte de la distribución de Apache. Consulte también la lista
- alfabética completa de <a href="directives.html">las
- directivas de Apache</a>.
- </p>
- </div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#core">Funcionalidad Básica y Módulos
- de MultiProcesamiento</a></li><li><img alt="" src="../images/down.gif" /> <a href="#other">Otros Módulos</a></li></ul><h3>Consulte también</h3>
-<ul class="seealso">
-<li><a href="../mpm.html">Módulos de MultiProcesamiento
- (MPMs)</a>
- </li>
-<li><a href="quickreference.html">Guía Rápida de Referencia de
- Directivas</a>
- </li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="core" name="core">Funcionalidad Básica y Módulos
- de MultiProcesamiento</a></h2>
-<dl>
-<dt><a href="core.html">core</a></dt><dd>Core Apache HTTP Server features that are always
-available</dd>
-<dt><a href="mpm_common.html">mpm_common</a></dt><dd class="separate">A collection of directives that are implemented by
-more than one multi-processing module (MPM)</dd>
-<dt><a href="beos.html">beos</a></dt><dd>Este módulo de muiltiprocesamiento está
-optimizado para BeOS.</dd>
-<dt><a href="leader.html">leader</a></dt><dd>An experimental variant of the standard <code class="module"><a href="../mod/worker.html">worker</a></code>
-MPM</dd>
-<dt><a href="mpm_netware.html">mpm_netware</a></dt><dd>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</dd>
-<dt><a href="mpmt_os2.html">mpmt_os2</a></dt><dd>Hybrid multi-process, multi-threaded MPM for OS/2</dd>
-<dt><a href="perchild.html">perchild</a></dt><dd>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</dd>
-<dt><a href="prefork.html">prefork</a></dt><dd>Implements a non-threaded, pre-forking web server</dd>
-<dt><a href="threadpool.html">threadpool</a></dt><dd>Yet another experimental variant of the standard
-<code class="module"><a href="../mod/worker.html">worker</a></code> MPM</dd>
-<dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd>This Multi-Processing Module is optimized for Windows
-NT.</dd>
-<dt><a href="worker.html">worker</a></dt><dd>Multi-Processing Module implementing a hybrid
- multi-threaded multi-process web server</dd>
-</dl></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="other" name="other">Otros Módulos</a></h2>
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a></p>
-<dl><dt><a href="mod_actions.html" id="A" name="A">mod_actions</a></dt><dd>This module provides for executing CGI scripts based on
-media type or request method.</dd>
-<dt><a href="mod_alias.html">mod_alias</a></dt><dd>Provides for mapping different parts of the host
- filesystem in the document tree and for URL redirection</dd>
-<dt><a href="mod_asis.html">mod_asis</a></dt><dd>Sends files that contain their own
-HTTP headers</dd>
-<dt><a href="mod_auth_basic.html">mod_auth_basic</a></dt><dd>Basic authentication</dd>
-<dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>User authentication using MD5
- Digest Authentication.</dd>
-<dt><a href="mod_auth_ldap.html">mod_auth_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</dd>
-<dt><a href="mod_authn_anon.html">mod_authn_anon</a></dt><dd>Allows "anonymous" user access to authenticated
- areas</dd>
-<dt><a href="mod_authn_dbm.html">mod_authn_dbm</a></dt><dd>User authentication using DBM files</dd>
-<dt><a href="mod_authn_default.html">mod_authn_default</a></dt><dd>Authentication fallback module</dd>
-<dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>User authentication using text files</dd>
-<dt><a href="mod_authz_dbm.html">mod_authz_dbm</a></dt><dd>Group authorization using DBM files</dd>
-<dt><a href="mod_authz_default.html">mod_authz_default</a></dt><dd>Authorization fallback module</dd>
-<dt><a href="mod_authz_groupfile.html">mod_authz_groupfile</a></dt><dd>Group authorization using plaintext files</dd>
-<dt><a href="mod_authz_host.html">mod_authz_host</a></dt><dd>Group authorizations based on host (name or IP
-address)</dd>
-<dt><a href="mod_authz_owner.html">mod_authz_owner</a></dt><dd>Authorization based on file ownership</dd>
-<dt><a href="mod_authz_user.html">mod_authz_user</a></dt><dd>User Authorization</dd>
-<dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd>Generates directory indexes,
- automatically, similar to the Unix <code>ls</code> command or the
- Win32 <code>dir</code> shell command</dd>
-<dt><a href="mod_cache.html" id="C" name="C">mod_cache</a></dt><dd>Content cache keyed to URIs.</dd>
-<dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd>CERN httpd metafile semantics</dd>
-<dt><a href="mod_cgi.html">mod_cgi</a></dt><dd>Execution of CGI scripts</dd>
-<dt><a href="mod_cgid.html">mod_cgid</a></dt><dd>Execution of CGI scripts using an
- external CGI daemon</dd>
-<dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd>Specify character set translation or recoding</dd>
-<dt><a href="mod_dav.html" id="D" name="D">mod_dav</a></dt><dd>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</dd>
-<dt><a href="mod_dav_fs.html">mod_dav_fs</a></dt><dd>filesystem provider for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_dav_lock.html">mod_dav_lock</a></dt><dd>generic locking module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_deflate.html">mod_deflate</a></dt><dd>Compress content before it is delivered to the
-client</dd>
-<dt><a href="mod_dir.html">mod_dir</a></dt><dd>Provides for "trailing slash" redirects and
- serving directory index files</dd>
-<dt><a href="mod_disk_cache.html">mod_disk_cache</a></dt><dd>Content cache storage manager keyed to URIs</dd>
-<dt><a href="mod_echo.html" id="E" name="E">mod_echo</a></dt><dd>A simple echo server to illustrate protocol
-modules</dd>
-<dt><a href="mod_env.html">mod_env</a></dt><dd>Modifies the environment which is passed to CGI scripts and
-SSI pages</dd>
-<dt><a href="mod_example.html">mod_example</a></dt><dd>Illustrates the Apache module API</dd>
-<dt><a href="mod_expires.html">mod_expires</a></dt><dd>Generation of <code>Expires</code> HTTP headers according to
-user-specified criteria</dd>
-<dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd>Pass the response body through an external program before
-delivery to the client</dd>
-<dt><a href="mod_file_cache.html" id="F" name="F">mod_file_cache</a></dt><dd>Caches a static list of files in memory</dd>
-<dt><a href="mod_headers.html" id="H" name="H">mod_headers</a></dt><dd>Customization of HTTP request and response
-headers</dd>
-<dt><a href="mod_ident.html" id="I" name="I">mod_ident</a></dt><dd>RFC 1413 ident lookups</dd>
-<dt><a href="mod_imap.html">mod_imap</a></dt><dd>Server-side imagemap processing</dd>
-<dt><a href="mod_include.html">mod_include</a></dt><dd>Server-parsed html documents (Server Side Includes)</dd>
-<dt><a href="mod_info.html">mod_info</a></dt><dd>Provides a comprehensive overview of the server
-configuration</dd>
-<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>ISAPI Extensions within Apache for Windows</dd>
-<dt><a href="mod_ldap.html" id="L" name="L">mod_ldap</a></dt><dd>LDAP connection pooling and result caching services for use
-by other LDAP modules</dd>
-<dt><a href="mod_log_config.html">mod_log_config</a></dt><dd>Logging of the requests made to the server</dd>
-<dt><a href="mod_log_forensic.html">mod_log_forensic</a></dt><dd>Forensic Logging of the requests made to the server</dd>
-<dt><a href="mod_logio.html">mod_logio</a></dt><dd>Logging of input and output bytes per request</dd>
-<dt><a href="mod_mem_cache.html" id="M" name="M">mod_mem_cache</a></dt><dd>Content cache keyed to URIs</dd>
-<dt><a href="mod_mime.html">mod_mime</a></dt><dd>Associates the requested filename's extensions
- with the file's behavior (handlers and filters)
- and content (mime-type, language, character set and
- encoding)</dd>
-<dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd>Determines the MIME type of a file
- by looking at a few bytes of its contents</dd>
-<dt><a href="mod_negotiation.html" id="N" name="N">mod_negotiation</a></dt><dd>Provides for <a href="../content-negotiation.html">content negotiation</a></dd>
-<dt><a href="mod_nw_ssl.html">mod_nw_ssl</a></dt><dd>Enable SSL encryption for NetWare</dd>
-<dt><a href="mod_proxy.html" id="P" name="P">mod_proxy</a></dt><dd>HTTP/1.1 proxy/gateway server</dd>
-<dt><a href="mod_proxy_connect.html">mod_proxy_connect</a></dt><dd><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> extension for
-<code>CONNECT</code> request handling</dd>
-<dt><a href="mod_proxy_ftp.html">mod_proxy_ftp</a></dt><dd>FTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_rewrite.html" id="R" name="R">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</dd>
-<dt><a href="mod_setenvif.html" id="S" name="S">mod_setenvif</a></dt><dd>Allows the setting of environment variables based
-on characteristics of the request</dd>
-<dt><a href="mod_so.html">mod_so</a></dt><dd>Loading of executable code and
-modules into the server at start-up or restart time</dd>
-<dt><a href="mod_speling.html">mod_speling</a></dt><dd>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</dd>
-<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
-<dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
-performance</dd>
-<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
-and Group</dd>
-<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
-identifier for each request</dd>
-<dt><a href="mod_userdir.html">mod_userdir</a></dt><dd>User-specific directories</dd>
-<dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd>
-<em>Clickstream</em> logging of user activity on a site
-</dd>
-<dt><a href="mod_version.html" id="V" name="V">mod_version</a></dt><dd>Version dependent configuration</dd>
-<dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd>Provides for dynamically configured mass virtual
-hosting</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/index.html.ja.euc-jp b/docs/manual/mod/index.html.ja.euc-jp
deleted file mode 100644
index 6f152c5d82..0000000000
--- a/docs/manual/mod/index.html.ja.euc-jp
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥â¥¸¥å¡¼¥ë°ìÍ÷ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="module-index"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥â¥¸¥å¡¼¥ë°ìÍ÷</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- °Ê²¼¤Ï Apache ¤ÎÇÛÉۤΰìÉô¤È¤·¤ÆÇÛ¤é¤ì¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¥â¥¸¥å¡¼¥ë¤Î
- °ìÍ÷¤Ç¤¹¡£¤¹¤Ù¤Æ¤Î <a href="directives.html">Apache
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> ¤Î¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç¤Î¥ê¥¹¥È¤â¸«¤Æ¤¯¤À¤µ¤¤¡£
- </p>
- </div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#core">¥³¥¢µ¡Ç½¤È MPM</a></li><li><img alt="" src="../images/down.gif" /> <a href="#other">¾¤Î¥â¥¸¥å¡¼¥ë</a></li></ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPMs)</a>
- </li>
-<li><a href="quickreference.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö ¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹</a>
- </li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="core" name="core">¥³¥¢µ¡Ç½¤È MPM</a></h2>
-<dl>
-<dt><a href="core.html">core</a></dt><dd>¾ï¤Ë»ÈÍѲÄǽ¤Ê Apache HTTP ¥µ¡¼¥Ð¤Î¥³¥¢µ¡Ç½</dd>
-<dt><a href="mpm_common.html">mpm_common</a></dt><dd class="separate">Æó¤Ä°Ê¾å¤Î¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)
-¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥³¥ì¥¯¥·¥ç¥ó</dd>
-<dt><a href="beos.html">beos</a></dt><dd>This Multi-Processing Module is optimized for BeOS.</dd>
-<dt><a href="leader.html">leader</a></dt><dd>An experimental variant of the standard <code class="module"><a href="../mod/worker.html">worker</a></code>
-MPM</dd>
-<dt><a href="mpm_netware.html">mpm_netware</a></dt><dd>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</dd>
-<dt><a href="mpmt_os2.html">mpmt_os2</a></dt><dd>Hybrid multi-process, multi-threaded MPM for OS/2</dd>
-<dt><a href="perchild.html">perchild</a></dt><dd>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</dd>
-<dt><a href="prefork.html">prefork</a></dt><dd>¥¹¥ì¥Ã¥É¤ò»È¤ï¤º¡¢Àè¹Ô¤·¤Æ fork ¤ò¹Ô¤Ê¤¦¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¼ÂÁõ
-</dd>
-<dt><a href="threadpool.html">threadpool</a></dt><dd>Yet another experimental variant of the standard
-<code class="module"><a href="../mod/worker.html">worker</a></code> MPM</dd>
-<dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd>Windows NT
-¸þ¤±¤ËºÇŬ²½¤µ¤ì¤¿¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</dd>
-<dt><a href="worker.html">worker</a></dt><dd>¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤È¥Þ¥ë¥Á¥×¥í¥»¥¹¤Î¥Ï¥¤¥Ö¥ê¥Ã¥É·¿
-¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¼ÂÁõ¤·¤¿¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</dd>
-</dl></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="other" name="other">¾¤Î¥â¥¸¥å¡¼¥ë</a></h2>
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a></p>
-<dl><dt><a href="mod_actions.html" id="A" name="A">mod_actions</a></dt><dd>¥á¥Ç¥£¥¢¥¿¥¤¥×¤ä¥ê¥¯¥¨¥¹¥È¥á¥½¥Ã¥É¤Ë±þ¤¸¤Æ
-CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ëµ¡Ç½¤òÄó¶¡</dd>
-<dt><a href="mod_alias.html">mod_alias</a></dt><dd>¥Û¥¹¥È¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î¤¤¤í¤¤¤í¤Ê°ã¤¦¾ì½ê¤ò
- ¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Ë¥Þ¥Ã¥×¤¹¤ëµ¡Ç½¤È¡¢
- URL ¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò¹Ô¤Ê¤¦µ¡Ç½¤òÄ󶡤¹¤ë</dd>
-<dt><a href="mod_asis.html">mod_asis</a></dt><dd>¼«Ê¬ÍѤΠHTTP ¥Ø¥Ã¥À¤Î½ñ¤«¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤òÁ÷¿®¤¹¤ë</dd>
-<dt><a href="mod_auth_basic.html">mod_auth_basic</a></dt><dd>´ðËÜǧ¾Ú</dd>
-<dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>User authentication using MD5
- Digest Authentication.</dd>
-<dt><a href="mod_auth_ldap.html">mod_auth_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</dd>
-<dt><a href="mod_authn_anon.html">mod_authn_anon</a></dt><dd>ǧ¾Ú¤¬É¬ÍפÊÎΰè¤Ø¤Î "anonymous" ¥æ¡¼¥¶¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë
-</dd>
-<dt><a href="mod_authn_dbm.html">mod_authn_dbm</a></dt><dd>DBM ¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥æ¡¼¥¶Ç§¾Ú</dd>
-<dt><a href="mod_authn_default.html">mod_authn_default</a></dt><dd>ǧ¾Ú¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¥â¥¸¥å¡¼¥ë</dd>
-<dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥æ¡¼¥¶Ç§¾Ú</dd>
-<dt><a href="mod_authz_dbm.html">mod_authz_dbm</a></dt><dd>Group authorization using DBM files</dd>
-<dt><a href="mod_authz_default.html">mod_authz_default</a></dt><dd>¾µÇ§¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¥â¥¸¥å¡¼¥ë</dd>
-<dt><a href="mod_authz_groupfile.html">mod_authz_groupfile</a></dt><dd>¥×¥ì¡¼¥ó¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥°¥ë¡¼¥×¾µÇ§</dd>
-<dt><a href="mod_authz_host.html">mod_authz_host</a></dt><dd>¥Û¥¹¥È (̾Á°¤â¤·¤¯¤Ï IP ¥¢¥É¥ì¥¹) ¤Ë´ð¤Å¤¤¤¿¥°¥ë¡¼¥×¾µÇ§</dd>
-<dt><a href="mod_authz_owner.html">mod_authz_owner</a></dt><dd>Authorization based on file ownership</dd>
-<dt><a href="mod_authz_user.html">mod_authz_user</a></dt><dd>User Authorization</dd>
-<dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd>Unix ¤Î <code>ls</code> ¥³¥Þ¥ó¥É¤ä
- Win32 ¤Î <code>dir</code> ¥·¥§¥ë¥³¥Þ¥ó¥É¤Ë»÷¤¿
- ¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÀ¸À®¤¹¤ë</dd>
-<dt><a href="mod_cache.html" id="C" name="C">mod_cache</a></dt><dd>Content cache keyed to URIs.</dd>
-<dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd>CERN httpd metafile semantics</dd>
-<dt><a href="mod_cgi.html">mod_cgi</a></dt><dd>CGI ¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô</dd>
-<dt><a href="mod_cgid.html">mod_cgid</a></dt><dd>³°Éô CGI ¥Ç¡¼¥â¥ó¤ò»È¤Ã¤¿ CGI ¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô</dd>
-<dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd>Specify character set translation or recoding</dd>
-<dt><a href="mod_dav.html" id="D" name="D">mod_dav</a></dt><dd>ʬ»¶¥ª¡¼¥µ¥ê¥ó¥°¤È¥Ð¡¼¥¸¥ç¥ó´ÉÍý
-(<a href="http://www.webdav.org/">WebDAV</a>) µ¡Ç½</dd>
-<dt><a href="mod_dav_fs.html">mod_dav_fs</a></dt><dd><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥×¥í¥Ð¥¤¥À</dd>
-<dt><a href="mod_dav_lock.html">mod_dav_lock</a></dt><dd>generic locking module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_deflate.html">mod_deflate</a></dt><dd>¥¯¥é¥¤¥¢¥ó¥È¤ØÁ÷¤é¤ì¤ëÁ°¤Ë¥³¥ó¥Æ¥ó¥Ä¤ò°µ½Ì¤¹¤ë</dd>
-<dt><a href="mod_dir.html">mod_dir</a></dt><dd>¡ÖºÇ¸å¤Î¥¹¥é¥Ã¥·¥å¡×¤Î¥ê¥À¥¤¥ì¥¯¥È¤È¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î
-¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤ò°·¤¦µ¡Ç½¤òÄ󶡤¹¤ë</dd>
-<dt><a href="mod_disk_cache.html">mod_disk_cache</a></dt><dd>Content cache storage manager keyed to URIs</dd>
-<dt><a href="mod_echo.html" id="E" name="E">mod_echo</a></dt><dd>¥×¥í¥È¥³¥ë¥â¥¸¥å¡¼¥ë¤Î³µÍפò¼¨¤¹¤¿¤á¤Îñ½ã¤Ê¥¨¥³¡¼¥µ¡¼¥Ð
-</dd>
-<dt><a href="mod_env.html">mod_env</a></dt><dd>CGI ¥¹¥¯¥ê¥×¥ÈµÚ¤Ó SSI
-¥Ú¡¼¥¸¤ËÅϤµ¤ì¤ë´Ä¶­ÊÑ¿ô¤òÊѹ¹¤¹¤ëµ¡Ç½¤òÄ󶡤¹¤ë</dd>
-<dt><a href="mod_example.html">mod_example</a></dt><dd>Illustrates the Apache module API</dd>
-<dt><a href="mod_expires.html">mod_expires</a></dt><dd>¥æ¡¼¥¶¤Î»ØÄꤷ¤¿´ð½à¤Ë´ð¤Å¤¤¤¿ <code>Expires</code> HTTP ¥Ø¥Ã¥À¤ÎÀ¸À®</dd>
-<dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd>Pass the response body through an external program before
-delivery to the client</dd>
-<dt><a href="mod_file_cache.html" id="F" name="F">mod_file_cache</a></dt><dd>Caches a static list of files in memory</dd>
-<dt><a href="mod_headers.html" id="H" name="H">mod_headers</a></dt><dd>HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤È±þÅú¤Î¥Ø¥Ã¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º</dd>
-<dt><a href="mod_ident.html" id="I" name="I">mod_ident</a></dt><dd>RFC 1413 ident lookups</dd>
-<dt><a href="mod_imap.html">mod_imap</a></dt><dd>Server-side imagemap processing</dd>
-<dt><a href="mod_include.html">mod_include</a></dt><dd>¥µ¡¼¥Ð¤¬¥Ñ¡¼¥¹¤¹¤ë html ¥É¥­¥å¥á¥ó¥È (Server Side Includes)</dd>
-<dt><a href="mod_info.html">mod_info</a></dt><dd>¥µ¡¼¥Ð¤ÎÀßÄê¤ÎÊñ³çŪ¤Ê³µ´Ñ¤òÄ󶡤¹¤ë</dd>
-<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>ISAPI Extensions within Apache for Windows</dd>
-<dt><a href="mod_ldap.html" id="L" name="L">mod_ldap</a></dt><dd>LDAP connection pooling and result caching services for use
-by other LDAP modules</dd>
-<dt><a href="mod_log_config.html">mod_log_config</a></dt><dd>¥µ¡¼¥Ð¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Î¥í¥®¥ó¥°</dd>
-<dt><a href="mod_log_forensic.html">mod_log_forensic</a></dt><dd>Forensic Logging of the requests made to the server</dd>
-<dt><a href="mod_logio.html">mod_logio</a></dt><dd>¥ê¥¯¥¨¥¹¥ÈËè¤ËÆþÎϥХ¤¥È¿ô¤È½ÐÎϥХ¤¥È¿ô¤È¤ò¥í¥®¥ó¥°</dd>
-<dt><a href="mod_mem_cache.html" id="M" name="M">mod_mem_cache</a></dt><dd>Content cache keyed to URIs</dd>
-<dt><a href="mod_mime.html">mod_mime</a></dt><dd>¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤È¥Õ¥¡¥¤¥ë¤Î¿¶¤ëÉñ¤¤
- (¥Ï¥ó¥É¥é¤È¥Õ¥£¥ë¥¿)¡¢ÆâÍÆ (MIME ¥¿¥¤¥×¡¢¸À¸ì¡¢Ê¸»ú¥»¥Ã¥È¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°)
- ¤È¤ò´ØÏ¢ÉÕ¤±¤ë</dd>
-<dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd>Determines the MIME type of a file
- by looking at a few bytes of its contents</dd>
-<dt><a href="mod_negotiation.html" id="N" name="N">mod_negotiation</a></dt><dd><a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>
- µ¡Ç½¤òÄ󶡤¹¤ë</dd>
-<dt><a href="mod_nw_ssl.html">mod_nw_ssl</a></dt><dd>Enable SSL encryption for NetWare</dd>
-<dt><a href="mod_proxy.html" id="P" name="P">mod_proxy</a></dt><dd>HTTP/1.1 proxy/gateway server</dd>
-<dt><a href="mod_proxy_connect.html">mod_proxy_connect</a></dt><dd><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> extension for
-<code>CONNECT</code> request handling</dd>
-<dt><a href="mod_proxy_ftp.html">mod_proxy_ftp</a></dt><dd>FTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_rewrite.html" id="R" name="R">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</dd>
-<dt><a href="mod_setenvif.html" id="S" name="S">mod_setenvif</a></dt><dd>¥ê¥¯¥¨¥¹¥È¤ÎÆÃħ¤Ë´ð¤Å¤¤¤¿´Ä¶­ÊÑ¿ô¤ÎÀßÄê¤ò²Äǽ¤Ë¤¹¤ë</dd>
-<dt><a href="mod_so.html">mod_so</a></dt><dd>µ¯Æ°»þ¤äºÆµ¯Æ°»þ¤Ë¼Â¹Ô¥³¡¼¥É¤È¥â¥¸¥å¡¼¥ë¤ò¥µ¡¼¥Ð¤Ë¥í¡¼¥É¤¹¤ë
-</dd>
-<dt><a href="mod_speling.html">mod_speling</a></dt><dd>¥æ¡¼¥¶¤¬ÆþÎϤ·¤¿¤Ç¤¢¤í¤¦´Ö°ã¤Ã¤¿ URL ¤ò¡¢
-Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤¹¤ë¤³¤È¤È°ì¤Ä°Ê²¼¤ÎÄÖ¤ê´Ö°ã¤¤¤òµöÍƤ¹¤ë¤³¤È¤Ç
-½¤Àµ¤ò»î¤ß¤ë</dd>
-<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
-<dt><a href="mod_status.html">mod_status</a></dt><dd>¥µ¡¼¥Ð¤Î³èÆ°¾õ¶·¤ÈÀ­Ç½¤Ë´Ø¤¹¤ë¾ðÊó¤òÄ󶡤¹¤ë</dd>
-<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Ç CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë</dd>
-<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>¤½¤ì¤¾¤ì¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë°ì°Õ¤Ê¼±Ê̻ҤÎÆþ¤Ã¤¿´Ä¶­ÊÑ¿ô¤ò
-Ä󶡤¹¤ë</dd>
-<dt><a href="mod_userdir.html">mod_userdir</a></dt><dd>¥æ¡¼¥¶ÀìÍѤΥǥ£¥ì¥¯¥È¥ê¤òÄó¶¡
- </dd>
-<dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd>
-<em>Clickstream</em> logging of user activity on a site
-</dd>
-<dt><a href="mod_version.html" id="V" name="V">mod_version</a></dt><dd>Version dependent configuration</dd>
-<dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd>Provides for dynamically configured mass virtual
-hosting</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/index.html.ko.euc-kr b/docs/manual/mod/index.html.ko.euc-kr
deleted file mode 100644
index 08bb5db298..0000000000
--- a/docs/manual/mod/index.html.ko.euc-kr
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¸ðµâ ¸ñ·Ï - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="module-index"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¸ðµâ ¸ñ·Ï</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>
- ´ÙÀ½Àº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÈ ¸ðµç ¸ðµâ ¸ñ·ÏÀÌ´Ù. <a href="directives.html">¸ðµç ¾ÆÆÄÄ¡ Áö½Ã¾î</a> ¸ñ·Ïµµ
- Âü°íÇ϶ó.
- </p>
- </div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#core">ÇÙ½É ±â´É°ú ´ÙÁßó¸® ¸ðµâ</a></li><li><img alt="" src="../images/down.gif" /> <a href="#other">´Ù¸¥ ¸ðµâ</a></li></ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../mpm.html">´ÙÁß󸮸ðµâ (MPM)</a>
- </li>
-<li><a href="quickreference.html">Áö½Ã¾î ºü¸¥Âü°í</a>
- </li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="core" name="core">ÇÙ½É ±â´É°ú ´ÙÁßó¸® ¸ðµâ</a></h2>
-<dl>
-<dt><a href="core.html">core</a></dt><dd>Core Apache HTTP Server features that are always
-available</dd>
-<dt><a href="mpm_common.html">mpm_common</a></dt><dd class="separate">A collection of directives that are implemented by
-more than one multi-processing module (MPM)</dd>
-<dt><a href="beos.html">beos</a></dt><dd>BeOS¿¡ ÃÖÀûÈ­µÈ ´ÙÁßó¸® ¸ðµâ.</dd>
-<dt><a href="leader.html">leader</a></dt><dd>Ç¥ÁØ <code class="module"><a href="../mod/worker.html">worker</a></code> MPMÀÇ ½ÇÇèÀûÀÎ º¯Çü</dd>
-<dt><a href="mpm_netware.html">mpm_netware</a></dt><dd>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</dd>
-<dt><a href="mpmt_os2.html">mpmt_os2</a></dt><dd>Hybrid multi-process, multi-threaded MPM for OS/2</dd>
-<dt><a href="perchild.html">perchild</a></dt><dd>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</dd>
-<dt><a href="prefork.html">prefork</a></dt><dd>Implements a non-threaded, pre-forking web server</dd>
-<dt><a href="threadpool.html">threadpool</a></dt><dd>Yet another experimental variant of the standard
-<code class="module"><a href="../mod/worker.html">worker</a></code> MPM</dd>
-<dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd>This Multi-Processing Module is optimized for Windows
-NT.</dd>
-<dt><a href="worker.html">worker</a></dt><dd>Multi-Processing Module implementing a hybrid
- multi-threaded multi-process web server</dd>
-</dl></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section"><h2><a id="other" name="other">´Ù¸¥ ¸ðµâ</a></h2>
-<p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a></p>
-<dl><dt><a href="mod_actions.html" id="A" name="A">mod_actions</a></dt><dd>ÀÌ ¸ðµâÀº ¹Ìµð¾îÁ¾·ù³ª ¿äû¸Þ¼­µå¿¡ µû¶ó CGI
-½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.</dd>
-<dt><a href="mod_alias.html">mod_alias</a></dt><dd>ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐµéÀ» ¹®¼­ °èÃþ±¸Á¶¿¡ Æ÷ÇÔÇÏ°í,
- URL ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÑ´Ù</dd>
-<dt><a href="mod_asis.html">mod_asis</a></dt><dd>HTTP Çì´õ¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀ» º¸³½´Ù</dd>
-<dt><a href="mod_auth_basic.html">mod_auth_basic</a></dt><dd>Basic authentication</dd>
-<dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>MD5 Digest AuthenticationÀ» »ç¿ëÇÑ »ç¿ëÀÚÀÎÁõ.</dd>
-<dt><a href="mod_auth_ldap.html">mod_auth_ldap</a></dt><dd>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</dd>
-<dt><a href="mod_authn_anon.html">mod_authn_anon</a></dt><dd>ÀÎÁõ¿µ¿ª¿¡ "À͸í(anonymous)" »ç¿ëÀÚÀÇ Á¢±ÙÀ»
-Çã¿ëÇÑ´Ù</dd>
-<dt><a href="mod_authn_dbm.html">mod_authn_dbm</a></dt><dd>DBM ÆÄÀÏÀ» »ç¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</dd>
-<dt><a href="mod_authn_default.html">mod_authn_default</a></dt><dd>ÃÖÈÄ ÀÎÁõ¸ðµâ</dd>
-<dt><a href="mod_authn_file.html">mod_authn_file</a></dt><dd>¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</dd>
-<dt><a href="mod_authz_dbm.html">mod_authz_dbm</a></dt><dd>DBM ÆÄÀÏÀ» »ç¿ëÇÑ ±×·ì ÀÎÁõ</dd>
-<dt><a href="mod_authz_default.html">mod_authz_default</a></dt><dd>ÃÖÈÄ ±ÇÇѺο©¸ðµâ</dd>
-<dt><a href="mod_authz_groupfile.html">mod_authz_groupfile</a></dt><dd>ÀÏ¹Ý ¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ ±×·ì ±ÇÇѺο©</dd>
-<dt><a href="mod_authz_host.html">mod_authz_host</a></dt><dd>È£½ºÆ® (À̸§À̳ª IP ÁÖ¼Ò)¸¦ »ç¿ëÇÑ ±×·ì ±ÇÇѺο©</dd>
-<dt><a href="mod_authz_owner.html">mod_authz_owner</a></dt><dd>ÆÄÀÏ ¼ÒÀ¯ÀÚ¸¦ ÀÌ¿ëÇÑ ±ÇÇѺο©</dd>
-<dt><a href="mod_authz_user.html">mod_authz_user</a></dt><dd>»ç¿ëÀÚ ±ÇÇѺο©</dd>
-<dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd>ÀÚµ¿À¸·Î À¯´Ð½ºÀÇ <code>ls</code> ¸í·É¾î³ª Win32ÀÇ
- <code>dir</code> ½©¸í·É¾î¿Í À¯»çÇÑ µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù</dd>
-<dt><a href="mod_cache.html" id="C" name="C">mod_cache</a></dt><dd>Content cache keyed to URIs.</dd>
-<dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd>CERN À¥¼­¹ö ¸ÞŸÆÄÀÏ Áö¿ø</dd>
-<dt><a href="mod_cgi.html">mod_cgi</a></dt><dd>CGI ½ºÅ©¸³Æ® ½ÇÇà</dd>
-<dt><a href="mod_cgid.html">mod_cgid</a></dt><dd>¿ÜºÎ CGI µ¥¸óÀ» »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇà</dd>
-<dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd>¹®ÀÚÁýÇÕ º¯È¯À» ÁöÁ¤</dd>
-<dt><a href="mod_dav.html" id="D" name="D">mod_dav</a></dt><dd>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) ±â´É</dd>
-<dt><a href="mod_dav_fs.html">mod_dav_fs</a></dt><dd><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>À» À§ÇÑ ÆÄÀϽýºÅÛ Á¦°øÀÚ</dd>
-<dt><a href="mod_dav_lock.html">mod_dav_lock</a></dt><dd>generic locking module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></dd>
-<dt><a href="mod_deflate.html">mod_deflate</a></dt><dd>³»¿ëÀ» Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ ¾ÐÃàÇÑ´Ù</dd>
-<dt><a href="mod_dir.html">mod_dir</a></dt><dd>"¸¶Áö¸· ½½·¡½¬" ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÏ°í µð·ºÅ丮
-index ÆÄÀÏÀ» ¼­ºñ½ºÇÑ´Ù</dd>
-<dt><a href="mod_disk_cache.html">mod_disk_cache</a></dt><dd>Content cache storage manager keyed to URIs</dd>
-<dt><a href="mod_echo.html" id="E" name="E">mod_echo</a></dt><dd>ÇÁ·ÎÅäÄÝ ¸ðµâÀ» ¼³¸íÇϱâÀ§ÇÑ °£´ÜÇÑ echo ¼­¹ö</dd>
-<dt><a href="mod_env.html">mod_env</a></dt><dd>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦
-¼öÁ¤ÇÑ´Ù</dd>
-<dt><a href="mod_example.html">mod_example</a></dt><dd>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇÑ´Ù</dd>
-<dt><a href="mod_expires.html">mod_expires</a></dt><dd>»ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ±âÁØ¿¡ µû¶ó <code>Expires</code>
-HTTP Çì´õ¸¦ »ý¼ºÇÑ´Ù</dd>
-<dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd>ÀÀ´ä ³»¿ëÀ» ¿ÜºÎ ÇÁ·Î±×·¥À¸·Î ó¸®ÇÑ ÈÄ Å¬¶óÀ̾ðÆ®·Î
-º¸³½´Ù</dd>
-<dt><a href="mod_file_cache.html" id="F" name="F">mod_file_cache</a></dt><dd>¸Þ¸ð¸®¿¡ Á¤Àû ÆÄÀϵéÀ» ij½¬</dd>
-<dt><a href="mod_headers.html" id="H" name="H">mod_headers</a></dt><dd>Customization of HTTP request and response
-headers</dd>
-<dt><a href="mod_ident.html" id="I" name="I">mod_ident</a></dt><dd>RFC 1413 ident lookups</dd>
-<dt><a href="mod_imap.html">mod_imap</a></dt><dd>Server-side imagemap processing</dd>
-<dt><a href="mod_include.html">mod_include</a></dt><dd>Server-parsed html documents (Server Side Includes)</dd>
-<dt><a href="mod_info.html">mod_info</a></dt><dd>Provides a comprehensive overview of the server
-configuration</dd>
-<dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>ISAPI Extensions within Apache for Windows</dd>
-<dt><a href="mod_ldap.html" id="L" name="L">mod_ldap</a></dt><dd>LDAP connection pooling and result caching services for use
-by other LDAP modules</dd>
-<dt><a href="mod_log_config.html">mod_log_config</a></dt><dd>Logging of the requests made to the server</dd>
-<dt><a href="mod_log_forensic.html">mod_log_forensic</a></dt><dd>Forensic Logging of the requests made to the server</dd>
-<dt><a href="mod_logio.html">mod_logio</a></dt><dd>¿äû´ç ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·Ï</dd>
-<dt><a href="mod_mem_cache.html" id="M" name="M">mod_mem_cache</a></dt><dd>Content cache keyed to URIs</dd>
-<dt><a href="mod_mime.html">mod_mime</a></dt><dd>Associates the requested filename's extensions
- with the file's behavior (handlers and filters)
- and content (mime-type, language, character set and
- encoding)</dd>
-<dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd>Determines the MIME type of a file
- by looking at a few bytes of its contents</dd>
-<dt><a href="mod_negotiation.html" id="N" name="N">mod_negotiation</a></dt><dd>Provides for <a href="../content-negotiation.html">content negotiation</a></dd>
-<dt><a href="mod_nw_ssl.html">mod_nw_ssl</a></dt><dd>Enable SSL encryption for NetWare</dd>
-<dt><a href="mod_proxy.html" id="P" name="P">mod_proxy</a></dt><dd>HTTP/1.1 proxy/gateway server</dd>
-<dt><a href="mod_proxy_connect.html">mod_proxy_connect</a></dt><dd><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> extension for
-<code>CONNECT</code> request handling</dd>
-<dt><a href="mod_proxy_ftp.html">mod_proxy_ftp</a></dt><dd>FTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_rewrite.html" id="R" name="R">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</dd>
-<dt><a href="mod_setenvif.html" id="S" name="S">mod_setenvif</a></dt><dd>¿äûÀÇ ¼º°Ý¿¡ µû¶ó ȯ°æº¯¼ö ¼³Á¤À» º¯°æÇÑ´Ù</dd>
-<dt><a href="mod_so.html">mod_so</a></dt><dd>½ÃÀÛÇÒ¶§ ȤÀº Àç½ÃÀÛÇÒ¶§ ½ÇÇà°¡´ÉÇÑ ÄÚµå¿Í ¸ðµâÀ»
-¼­¹ö·Î ÀоîµéÀδÙ</dd>
-<dt><a href="mod_speling.html">mod_speling</a></dt><dd>»ç¿ëÀÚ°¡ ´ë¼Ò¹®ÀÚ¸¦ À߸ø »ç¿ëÇϰųª ¸ÂÃã¹ýÀÌ Æ²¸®´Â
-°ÍÀ» Çѹø±îÁö Çã¿ëÇÏ¿© À߸øµÈ URLÀ» °íÄ¡·Á°í ½ÃµµÇÑ´Ù</dd>
-<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
-<dt><a href="mod_status.html">mod_status</a></dt><dd>¼­¹ö È°µ¿°ú ¼º´É¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù</dd>
-<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>CGI ½ºÅ©¸³Æ®¸¦ ƯÁ¤ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑÀ¸·Î ½ÇÇàÇÑ´Ù</dd>
-<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>°¢ ¿äû¸¶´Ù À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ °¡Áö´Â ȯ°æº¯¼ö¸¦
-Á¦°øÇÑ´Ù</dd>
-<dt><a href="mod_userdir.html">mod_userdir</a></dt><dd>»ç¿ëÀÚº° µð·ºÅ丮</dd>
-<dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd>
-<em>Clickstream</em> logging of user activity on a site
-</dd>
-<dt><a href="mod_version.html" id="V" name="V">mod_version</a></dt><dd>¹öÀüº° ¼³Á¤</dd>
-<dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd>Provides for dynamically configured mass virtual
-hosting</dd>
-</dl></div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/index.xml b/docs/manual/mod/index.xml
deleted file mode 100644
index 8d4eebd4de..0000000000
--- a/docs/manual/mod/index.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE moduleindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<moduleindex metafile="index.xml.meta">
- <title>Module Index</title>
- <summary>
- <p>
- Below is a list of all of the modules that come as part of
- the Apache distribution. See also the complete
- alphabetical list of <a href="directives.html">all Apache
- directives</a>.
- </p>
- </summary>
- <seealso><a href="../mpm.html">Multi-Processing Modules (MPMs)</a>
- </seealso>
- <seealso><a href="quickreference.html">Directive Quick Reference</a>
- </seealso>
-</moduleindex>
diff --git a/docs/manual/mod/index.xml.de b/docs/manual/mod/index.xml.de
deleted file mode 100644
index 66bdf6dd26..0000000000
--- a/docs/manual/mod/index.xml.de
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE moduleindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<moduleindex metafile="index.xml.meta">
- <title>Modul-Index</title>
- <summary>
- <p>
- Unten ist eine Liste aller Module angegeben, die als Bestandteil der
- Apache-Distribution mitgeliefert werden. Bitte beachten Sie auch die
- vollst&#228;ndige alphabetische Liste <a href="directives.html">aller
- Apache-Direktiven</a>.
- </p>
- </summary>
- <seealso><a href="../mpm.html">Multi-Processing-Module (MPMs)</a>
- </seealso>
- <seealso><a href="quickreference.html">Kurzreferenz der Direktiven</a>
- </seealso>
-</moduleindex>
diff --git a/docs/manual/mod/index.xml.es b/docs/manual/mod/index.xml.es
deleted file mode 100644
index 9185e7a879..0000000000
--- a/docs/manual/mod/index.xml.es
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE moduleindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1.11 -->
-
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<moduleindex metafile="index.xml.meta">
- <title>&#205;ndice de Módulos</title>
- <summary>
- <p>
- Abajo se muestra una lista con todos los m&#243;dulos que forman
- parte de la distribuci&#243;n de Apache. Consulte tambi&#233;n la lista
- alfab&#233;tica completa de <a href="directives.html">las
- directivas de Apache</a>.
- </p>
- </summary>
- <seealso><a href="../mpm.html">M&#243;dulos de MultiProcesamiento
- (MPMs)</a>
- </seealso>
- <seealso><a href="quickreference.html">Gu&#237;a R&#225;pida de Referencia de
- Directivas</a>
- </seealso>
-</moduleindex>
-
diff --git a/docs/manual/mod/index.xml.ja b/docs/manual/mod/index.xml.ja
deleted file mode 100644
index 8d3174a5bb..0000000000
--- a/docs/manual/mod/index.xml.ja
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE moduleindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<moduleindex metafile="index.xml.meta">
- <title>$B%b%8%e!<%k0lMw(B</title>
- <summary>
- <p>
- $B0J2<$O(B Apache $B$NG[I[$N0lIt$H$7$FG[$i$l$F$$$k$9$Y$F$N%b%8%e!<%k$N(B
- $B0lMw$G$9!#$9$Y$F$N(B <a href="directives.html">Apache
- $B%G%#%l%/%F%#%V(B</a> $B$N%"%k%U%!%Y%C%H=g$N%j%9%H$b8+$F$/$@$5$$!#(B
- </p>
- </summary>
- <seealso><a href="../mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPMs)</a>
- </seealso>
- <seealso><a href="quickreference.html">$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</a>
- </seealso>
-</moduleindex>
diff --git a/docs/manual/mod/index.xml.ko b/docs/manual/mod/index.xml.ko
deleted file mode 100644
index 53ffb559b7..0000000000
--- a/docs/manual/mod/index.xml.ko
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE moduleindex SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<moduleindex metafile="index.xml.meta">
- <title>¸ðµâ ¸ñ·Ï</title>
- <summary>
- <p>
- ´ÙÀ½Àº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÈ ¸ðµç ¸ðµâ ¸ñ·ÏÀÌ´Ù. <a
- href="directives.html">¸ðµç ¾ÆÆÄÄ¡ Áö½Ã¾î</a> ¸ñ·Ïµµ
- Âü°íÇ϶ó.
- </p>
- </summary>
- <seealso><a href="../mpm.html">´ÙÁß󸮸ðµâ (MPM)</a>
- </seealso>
- <seealso><a href="quickreference.html">Áö½Ã¾î ºü¸¥Âü°í</a>
- </seealso>
-</moduleindex>
diff --git a/docs/manual/mod/index.xml.meta b/docs/manual/mod/index.xml.meta
deleted file mode 100644
index cfaaf6c2c2..0000000000
--- a/docs/manual/mod/index.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/leader.html b/docs/manual/mod/leader.html
deleted file mode 100644
index 05175a8004..0000000000
--- a/docs/manual/mod/leader.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: leader.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: leader.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: leader.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/leader.html.de b/docs/manual/mod/leader.html.de
deleted file mode 100644
index 133a428000..0000000000
--- a/docs/manual/mod/leader.html.de
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>leader - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-MPM leader</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/leader.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/leader.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/leader.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Eine experimentelle Variante des Standard-MPMs
- <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Modulbezeichner:</a></th><td>mpm_leader_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Quelltext-Datei:</a></th><td>leader.c</td></tr></table>
-<h3>Zusammenfassung</h3>
-
- <div class="warning"><h3>Warnung</h3>
- <p>Dieses MPM ist noch experimentell und funktioniert möglicherweise
- nicht wie erwartet.</p>
- </div>
-
- <p>Dies ist eine experimentelle Variante des Standard-MPMs
- <code class="module"><a href="../mod/worker.html">worker</a></code>. Das Modul verwendet ein
- Leader/Followers-Design-Pattern, um die Arbeit zwischen Threads zu
- koordinieren. Weitere Informationen finden Sie unter <a href="http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf">http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf</a>.</p>
-
- <p>Um bei der Erstellung des <code>httpd</code> das MPM
- <code class="module"><a href="../mod/leader.html">leader</a></code> zu verwenden, fügen Sie den Argumenten
- des <code>configure</code>-Skripts <code>--with-mpm=leader</code>
- hinzu.</p>
-
- <p>Dieses MPM baut auf den atomaren APR-Vergleichs- und -Tauschoperationen
- für die Thread-Synchronisation auf. Wenn Sie für einen
- x86-Rechner kompilieren, ohne dass 386-Unterstützung benötigt
- wird, oder wenn Sie für einen SPARC-Rechner kompilieren und keine
- pre-UltraSPARC-Chips betreiben müssen, fügen Sie den Argumenten
- des <code>configure</code>-Skripts
- <code>--enable-nonportable-atomics=yes</code> hinzu. Dies veranlasst die
- APR veranlasst dazu, atomare Operationen einzusetzen, welche effizienten
- Befehlscode verwenden, der älteren CPUs nicht zur Verfügung
- stehen.</p>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-</div>
-
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/leader.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/leader.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/leader.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/leader.html.en b/docs/manual/mod/leader.html.en
deleted file mode 100644
index c3f82f2f96..0000000000
--- a/docs/manual/mod/leader.html.en
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>leader - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM leader</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/leader.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/leader.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/leader.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>An experimental variant of the standard <code class="module"><a href="../mod/worker.html">worker</a></code>
-MPM</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_leader_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>leader.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning"><h3>Warning</h3>
- <p>This MPM is experimental, so it may or may not work
- as expected.</p>
- </div>
-
- <p>This is an experimental variant of the standard
- <code class="module"><a href="../mod/worker.html">worker</a></code> MPM. It uses a Leader/Followers design pattern
- to coordinate work among threads. For more info, see <a href="http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf">http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf</a>.</p>
-
- <p>To use the <code class="module"><a href="../mod/leader.html">leader</a></code> MPM, add
- <code>--with-mpm=leader</code> to the <code>configure</code> script's
- arguments when building the <code>httpd</code>.</p>
-
- <p>This MPM depends on APR's atomic compare-and-swap operations for
- thread synchronization. If you are compiling for an x86 target
- and you don't need to support 386s, or you are compiling for a
- SPARC and you don't need to run on pre-UltraSPARC chips, add
- <code>--enable-nonportable-atomics=yes</code> to the <code>configure</code>
- script's arguments. This will cause APR to implement atomic operations
- using efficient opcodes not available in older CPUs.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-</div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/leader.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/leader.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/leader.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/leader.html.ko.euc-kr b/docs/manual/mod/leader.html.ko.euc-kr
deleted file mode 100644
index 7a0ddd2f75..0000000000
--- a/docs/manual/mod/leader.html.ko.euc-kr
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>leader - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ MPM leader</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/leader.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/leader.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/leader.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>Ç¥ÁØ <code class="module"><a href="../mod/worker.html">worker</a></code> MPMÀÇ ½ÇÇèÀûÀÎ º¯Çü</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>mpm_leader_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>leader.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <div class="warning"><h3>ÁÖÀÇ</h3>
- <p>ÀÌ MPMÀº ½ÇÇèÀûÀÎ »óÅ·Î, ±â´ëÇÑ´ë·Î µ¿ÀÛÇÏÁö¾ÊÀ» ¼ö ÀÖ´Ù.</p>
- </div>
-
- <p>ÀÌ ¸ðµâÀº Ç¥ÁØ <code class="module"><a href="../mod/worker.html">worker</a></code> MPMÀÇ ½ÇÇèÀûÀÎ
- º¯ÇüÀÌ´Ù. ÀÌ ¸ðµâÀº ¾²·¹µå°£ÀÇ Çùµ¿À» À§ÇØ Leader/Followers
- µðÀÚÀÎÆÐÅÏÀ» »ç¿ëÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf">http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p><code class="module"><a href="../mod/leader.html">leader</a></code> MPMÀ» »ç¿ëÇÏ·Á¸é,
- <code>httpd</code>¸¦ ÄÄÆÄÀÏÇÒ¶§ <code>configure</code>
- ½ºÅ©¸³Æ® ¾Æ±Ô¸ÕÆ®¿¡ <code>--with-mpm=leader</code>¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>ÀÌ MPMÀº ¾²·¹µå µ¿±â¸¦ À§ÇØ APRÀÇ atomic compare-and-swap
- ¸í·ÉÀ» »ç¿ëÇÑ´Ù. x86¿ëÀ¸·Î ÄÄÆÄÀÏÇÏÁö¸¸ 386À» Áö¿øÇÒ ÇÊ¿ä°¡
- ¾ø°Å³ª, SPARC¿ëÀ¸·Î ÄÄÆÄÀÏÇÏÁö¸¸ UltraSPARC Ĩ ÀÌÀü¿¡¼­
- ½ÇÇàÇÏÁö ¾Ê´Â´Ù¸é, <code>configure</code> ½ºÅ©¸³Æ® ¾Æ±Ô¸ÕÆ®¿¡
- <code>--enable-nonportable-atomics=yes</code>¸¦ »ç¿ëÇ϶ó.
- ±×·¯¸é APRÀÌ ¿À·¡µÈ CPU¿¡´Â ¾ø´Â ´õ È¿À²ÀûÀÎ ¸í·É¾î¸¦ »ç¿ëÇÏ¿©
- atomic ¸í·ÉÀ» ±¸ÇöÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-</div>
-
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/leader.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/leader.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/leader.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/leader.xml b/docs/manual/mod/leader.xml
deleted file mode 100644
index 9154e2179d..0000000000
--- a/docs/manual/mod/leader.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="leader.xml.meta">
-<name>leader</name>
-<description>An experimental variant of the standard <module>worker</module>
-MPM</description>
-<status>MPM</status>
-<sourcefile>leader.c</sourcefile>
-<identifier>mpm_leader_module</identifier>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>This MPM is experimental, so it may or may not work
- as expected.</p>
- </note>
-
- <p>This is an experimental variant of the standard
- <module>worker</module> MPM. It uses a Leader/Followers design pattern
- to coordinate work among threads. For more info, see <a
- href="http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf"
- >http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf</a>.</p>
-
- <p>To use the <module>leader</module> MPM, add
- <code>--with-mpm=leader</code> to the <code>configure</code> script's
- arguments when building the <code>httpd</code>.</p>
-
- <p>This MPM depends on APR's atomic compare-and-swap operations for
- thread synchronization. If you are compiling for an x86 target
- and you don't need to support 386s, or you are compiling for a
- SPARC and you don't need to run on pre-UltraSPARC chips, add
- <code>--enable-nonportable-atomics=yes</code> to the <code>configure</code>
- script's arguments. This will cause APR to implement atomic operations
- using efficient opcodes not available in older CPUs.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/leader.xml.de b/docs/manual/mod/leader.xml.de
deleted file mode 100644
index f81722f959..0000000000
--- a/docs/manual/mod/leader.xml.de
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="leader.xml.meta">
-<name>leader</name>
-<description>Eine experimentelle Variante des Standard-MPMs
- <module>worker</module></description>
-<status>MPM</status>
-<sourcefile>leader.c</sourcefile>
-<identifier>mpm_leader_module</identifier>
-
-<summary>
- <note type="warning"><title>Warnung</title>
- <p>Dieses MPM ist noch experimentell und funktioniert m&ouml;glicherweise
- nicht wie erwartet.</p>
- </note>
-
- <p>Dies ist eine experimentelle Variante des Standard-MPMs
- <module>worker</module>. Das Modul verwendet ein
- Leader/Followers-Design-Pattern, um die Arbeit zwischen Threads zu
- koordinieren. Weitere Informationen finden Sie unter <a
- href="http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf"
- >http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf</a>.</p>
-
- <p>Um bei der Erstellung des <code>httpd</code> das MPM
- <module>leader</module> zu verwenden, f&uuml;gen Sie den Argumenten
- des <code>configure</code>-Skripts <code>--with-mpm=leader</code>
- hinzu.</p>
-
- <p>Dieses MPM baut auf den atomaren APR-Vergleichs- und -Tauschoperationen
- f&uuml;r die Thread-Synchronisation auf. Wenn Sie f&uuml;r einen
- x86-Rechner kompilieren, ohne dass 386-Unterst&uuml;tzung ben&ouml;tigt
- wird, oder wenn Sie f&uuml;r einen SPARC-Rechner kompilieren und keine
- pre-UltraSPARC-Chips betreiben m&uuml;ssen, f&uuml;gen Sie den Argumenten
- des <code>configure</code>-Skripts
- <code>--enable-nonportable-atomics=yes</code> hinzu. Dies veranlasst die
- APR veranlasst dazu, atomare Operationen einzusetzen, welche effizienten
- Befehlscode verwenden, der &auml;lteren CPUs nicht zur Verf&uuml;gung
- stehen.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/leader.xml.ko b/docs/manual/mod/leader.xml.ko
deleted file mode 100644
index d851b6519d..0000000000
--- a/docs/manual/mod/leader.xml.ko
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="leader.xml.meta">
-<name>leader</name>
-<description>Ç¥ÁØ <module>worker</module> MPMÀÇ ½ÇÇèÀûÀÎ º¯Çü</description>
-<status>MPM</status>
-<sourcefile>leader.c</sourcefile>
-<identifier>mpm_leader_module</identifier>
-
-<summary>
- <note type="warning"><title>ÁÖÀÇ</title>
- <p>ÀÌ MPMÀº ½ÇÇèÀûÀÎ »óÅ·Î, ±â´ëÇÑ´ë·Î µ¿ÀÛÇÏÁö¾ÊÀ» ¼ö ÀÖ´Ù.</p>
- </note>
-
- <p>ÀÌ ¸ðµâÀº Ç¥ÁØ <module>worker</module> MPMÀÇ ½ÇÇèÀûÀÎ
- º¯ÇüÀÌ´Ù. ÀÌ ¸ðµâÀº ¾²·¹µå°£ÀÇ Çùµ¿À» À§ÇØ Leader/Followers
- µðÀÚÀÎÆÐÅÏÀ» »ç¿ëÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a
- href="http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf"
- >http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p><module>leader</module> MPMÀ» »ç¿ëÇÏ·Á¸é,
- <code>httpd</code>¸¦ ÄÄÆÄÀÏÇÒ¶§ <code>configure</code>
- ½ºÅ©¸³Æ® ¾Æ±Ô¸ÕÆ®¿¡ <code>--with-mpm=leader</code>¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>ÀÌ MPMÀº ¾²·¹µå µ¿±â¸¦ À§ÇØ APRÀÇ atomic compare-and-swap
- ¸í·ÉÀ» »ç¿ëÇÑ´Ù. x86¿ëÀ¸·Î ÄÄÆÄÀÏÇÏÁö¸¸ 386À» Áö¿øÇÒ ÇÊ¿ä°¡
- ¾ø°Å³ª, SPARC¿ëÀ¸·Î ÄÄÆÄÀÏÇÏÁö¸¸ UltraSPARC Ĩ ÀÌÀü¿¡¼­
- ½ÇÇàÇÏÁö ¾Ê´Â´Ù¸é, <code>configure</code> ½ºÅ©¸³Æ® ¾Æ±Ô¸ÕÆ®¿¡
- <code>--enable-nonportable-atomics=yes</code>¸¦ »ç¿ëÇ϶ó.
- ±×·¯¸é APRÀÌ ¿À·¡µÈ CPU¿¡´Â ¾ø´Â ´õ È¿À²ÀûÀÎ ¸í·É¾î¸¦ »ç¿ëÇÏ¿©
- atomic ¸í·ÉÀ» ±¸ÇöÇÑ´Ù.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/leader.xml.meta b/docs/manual/mod/leader.xml.meta
deleted file mode 100644
index f560db886c..0000000000
--- a/docs/manual/mod/leader.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>leader</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_actions.html b/docs/manual/mod/mod_actions.html
deleted file mode 100644
index 8b9470135e..0000000000
--- a/docs/manual/mod/mod_actions.html
+++ /dev/null
@@ -1,15 +0,0 @@
-URI: mod_actions.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_actions.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_actions.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_actions.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_actions.html.de b/docs/manual/mod/mod_actions.html.de
deleted file mode 100644
index 6259b6eb8e..0000000000
--- a/docs/manual/mod/mod_actions.html.de
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_actions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-Modul mod_actions</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mod_actions.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Dieses Modul ermöglicht die Ausführung von CGI-Skripten
- in Abhängigkeit von Medientypen und Anfragemethoden.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Modulbezeichner:</a></th><td>actions_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Quelltext-Datei:</a></th><td>mod_actions.c</td></tr></table>
-<h3>Zusammenfassung</h3>
-
- <p>Das Modul besitzt zwei Direktiven. Die Direktive <code class="directive"><a href="#action">Action</a></code> erlaubt die Ausführung von
- CGI-Skripten immer dann, wenn eine Anfrage zu einem bestimmten MIME-Type
- erfolgt. Die Direktive <code class="directive"><a href="#script">Script</a></code>
- erlaubt die Ausführung von CGI-Skripten abhängig von einer
- bestimmten Methode, die in der Anfrage verwendet wird. Dies macht es
- deutlich einfacher, Skripte auszuführen, die Dateien
- verarbeiten.</p>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#action">Action</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#script">Script</a></li>
-</ul>
-<h3>Siehe auch</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../howto/cgi.html">Dynamische Inhalte mit CGI</a></li>
-<li><a href="../handler.html">Die Verwendung von Handlern</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Action" id="Action">Action</a>-<a name="action" id="action">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Aktiviert ein CGI-Skript für einen bestimmten Handler oder
- Content-Type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Action <var>Aktionsart</var> <var>CGI-Skript</var> [virtual]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>mod_actions</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Der Schalter <code>virtual</code> und die Übergabe des
- Handlers wurden in Apache 2.1 eingeführt.</td></tr>
-</table>
- <p>Die Direktive fügt eine Aktion hinzu, welche das
- <var>CGI-Skript</var> aktiviert, sobald die <var>Aktionsart</var> durch
- eine Anfrage ausgelöst wird. <var>CGI-Skript</var> ist der URL-Pfad
- zu einer Ressource, die unter Verwendung von <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> oder <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> als CGI-Skript gekennzeichnet
- wurde. Die <var>Aktionsart</var> kann entweder ein <a href="../handler.html">Handler</a> oder ein MIME-Type sein. Die URL und
- den Dateipfad des angeforderten Dokuments in den
- Standard-CGI-Umgebungsvariablen <code>PATH_INFO</code> und
- <code>PATH_TRANSLATED</code> übergeben. Der für die jeweilige
- Anfrage verwendete Handler wird in der Umgebungsvariablen
- <code>REDIRECT_HANDLER</code> übergeben.</p>
-
- <div class="example"><h3>Beispiele</h3><p><code>
- # Anfragen für Dateien eines bestimmten MIME-Types:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # Dateien einer bestimmten Dateiendung<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </code></p></div>
-
- <p>Im ersten Beispiel werden Anfragen für Dateien mit dem MIME-Type
- <code>image/gif</code> von dem angegebenen CGI-Skript
- <code>/cgi-bin/images.cgi</code> bearbeitet.</p>
-
- <p>Im zweiten Beispiel werden Anfragen für Dateien mit der Dateiendung
- <code>.xyz</code> von dem angegebenen CGI-Skript
- <code>/cgi-bin/program.cgi</code> bearbeitet.</p>
-
- <p>Der optionale Schalter <code>virtual</code> deaktiviert die Prüfung
- auf Existenz der angeforderten Datei. Dies ist beispielsweise
- nützlich, wenn Sie die Direktive <code class="directive">Action</code> in
- Verbindung mit virtuellen Adressräumen verwenden möchten.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- &lt;Location /news&gt;<br />
- <span class="indent">
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Script" id="Script">Script</a>-<a name="script" id="script">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Aktiviert ein CGI-Skript für eine bestimmte
- Anfragemethode.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Script <var>Methode</var> <var>CGI-Skript</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration, Virtual Host, Verzeichnis</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>mod_actions</td></tr>
-</table>
- <p>Die Direktive fügt eine Aktion hinzu, welche das
- <var>CGI-Skript</var> aktiviert, wenn eine Datei unter der Verwendung der
- Methode <var>Methode</var> angefordert wird. <var>CGI-Skript</var> ist der
- URL-Pfad zu einer Ressource, die unter Verwendung von <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> oder <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> als CGI-Skript gekennzeichnet
- wurde. Die URL und der Dateipfad des angeforderten Dokuments werden in den
- Standard-CGI-Umgebungsvariablen <code>PATH_INFO</code> und
- <code>PATH_TRANSLATED</code> übergeben.</p>
-
- <div class="note">
- Der Methodenname kann frei gewählt werden. Bei <strong>Methodennamen
- wird zwischen Groß- und Kleinschreibung</strong> unterschieden, so
- dass <code>Script PUT</code> und <code>Script put</code> zu vollkommen
- unterschiedlichen Ergebnissen führen.
- </div>
-
- <p>Beachten Sie, dass der <code class="directive">Script</code>-Befehl nur
- Voreinstellungen für Aktionen definiert. Wird ein CGI-Skript
- - oder eine andere Ressource, die in der Lage ist, die angeforderte
- Methode intern zu bearbeiten - aufgerufen, so wird diese(s) verwendet.
- Beachten Sie auch, dass <code class="directive">Script</code> mit der Methode
- <code>GET</code> nur dann aufgerufen wird, wenn Query-Argumente vorhanden
- sind (<em>z.B.</em> foo.html?hi). Andernfalls wird die Anfrage normal
- bearbeitet.</p>
-
- <div class="example"><h3>Beispiele</h3><p><code>
- # Für &lt;ISINDEX&gt;-ähnliches Suchen<br />
- Script GET /cgi-bin/search<br />
- <br />
- # Ein CGI-PUT-Handler<br />
- Script PUT /~bob/put.cgi<br />
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mod_actions.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_actions.html.en b/docs/manual/mod/mod_actions.html.en
deleted file mode 100644
index aa7c200b1f..0000000000
--- a/docs/manual/mod/mod_actions.html.en
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_actions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_actions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>This module provides for executing CGI scripts based on
-media type or request method.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>actions_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_actions.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module has two directives. The <code class="directive"><a href="#action">Action</a></code> directive lets you run CGI
- scripts whenever a file of a certain MIME content type is requested. The
- <code class="directive"><a href="#script">Script</a></code> directive lets
- you run CGI scripts whenever a particular method is used in a
- request. This makes it much easier to execute scripts that process
- files.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#action">Action</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#script">Script</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../howto/cgi.html">Dynamic Content with CGI</a></li>
-<li><a href="../handler.html">Apache's Handler Use</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Activates a CGI script for a particular handler or
-content-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Action <var>action-type</var> <var>cgi-script</var> [virtual]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_actions</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The <code>virtual</code> modifier and handler passing were
-introduced in Apache 2.1</td></tr>
-</table>
- <p>This directive adds an action, which will activate
- <var>cgi-script</var> when <var>action-type</var> is triggered by the
- request. The <var>cgi-script</var> is the URL-path to a resource
- that has been designated as a CGI script using <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>. The
- <var>action-type</var> can be either a <a href="../handler.html">handler</a> or a MIME content type. It
- sends the URL and file path of the requested document using the
- standard CGI <code>PATH_INFO</code> and <code>PATH_TRANSLATED</code>
- environment variables. The handler used for the particular request is
- passed using the <code>REDIRECT_HANDLER</code> variable.</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- # Requests for files of a particular MIME content type:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # Files of a particular file extension<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </code></p></div>
-
- <p>In the first example, requests for files with a MIME content
- type of <code>image/gif</code> will be handled by the
- specified cgi script <code>/cgi-bin/images.cgi</code>.</p>
-
- <p>In the second example, requests for files with a file extension of
- <code>.xyz</code> are handled by the specified cgi script
- <code>/cgi-bin/program.cgi</code>.</p>
-
- <p>The optional <code>virtual</code> modifier turns off the check
- whether the requested file really exists. This is useful, for example,
- if you want to use the <code class="directive">Action</code> directive in
- virtual locations.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Location /news&gt;<br />
- <span class="indent">
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Script" id="Script">Script</a> <a name="script" id="script">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Activates a CGI script for a particular request
-method.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Script <var>method</var> <var>cgi-script</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_actions</td></tr>
-</table>
- <p>This directive adds an action, which will activate
- <var>cgi-script</var> when a file is requested using the method of
- <var>method</var>. The <var>cgi-script</var> is the URL-path to a
- resource that has been designated as a CGI script using <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>. The URL and
- file path of the requested document is sent using the standard CGI
- <code>PATH_INFO</code> and <code>PATH_TRANSLATED</code> environment
- variables.</p>
-
- <div class="note">
- Any arbitrary method name may be used. <strong>Method names are
- case-sensitive</strong>, so <code>Script PUT</code> and
- <code>Script put</code> have two entirely different
- effects.
- </div>
-
- <p>Note that the <code class="directive">Script</code> command defines default
- actions only. If a CGI script is called, or some other resource that is
- capable of handling the requested method internally, it will do
- so. Also note that <code class="directive">Script</code> with a method of
- <code>GET</code> will only be called if there are query arguments present
- (<em>e.g.</em>, foo.html?hi). Otherwise, the request will
- proceed normally.</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- # For &lt;ISINDEX&gt;-style searching<br />
- Script GET /cgi-bin/search<br />
- <br />
- # A CGI PUT handler<br />
- Script PUT /~bob/put.cgi<br />
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_actions.html.ja.euc-jp b/docs/manual/mod/mod_actions.html.ja.euc-jp
deleted file mode 100644
index 8b9e036a66..0000000000
--- a/docs/manual/mod/mod_actions.html.ja.euc-jp
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_actions - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_actions</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥á¥Ç¥£¥¢¥¿¥¤¥×¤ä¥ê¥¯¥¨¥¹¥È¥á¥½¥Ã¥É¤Ë±þ¤¸¤Æ
-CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ëµ¡Ç½¤òÄó¶¡</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>actions_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_actions.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¤ÏÆó¤Ä¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¤¢¤ê¤Þ¤¹¡£<code class="directive"><a href="#action">Action</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÆÃÄê¤Î MIME ¥¿¥¤¥×¤Î¥Õ¥¡¥¤¥ë¤ò¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¾ì¹ç¤Ë
- CGI ¥¹¥¯¥ê¥×¥È¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£<code class="directive"><a href="#script">Script</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥ê¥¯¥¨¥¹¥È¤ÇÆÃÄê¤Î¥á¥½¥Ã¥É¤¬»ÈÍѤµ¤ì¤¿¤È¤­¤Ë CGI
- ¥¹¥¯¥ê¥×¥È¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï¥Õ¥¡¥¤¥ë¤ò½èÍý¤¹¤ë¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤ò¤º¤Ã¤È´Êñ¤Ë¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#action">Action</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#script">Script</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../howto/cgi.html">CGI ¤Ë¤è¤ëưŪ¥³¥ó¥Æ¥ó¥Ä</a></li>
-<li><a href="../handler.html">Apache ¤Î¥Ï¥ó¥É¥é¤Î»ÈÍÑ</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆÃÄê¤Î¥Ï¥ó¥É¥é¤ä¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ËÂФ·¤Æ CGI ¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤Ë
-ÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Action <var>action-type</var> <var>cgi-script</var> [virtual]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_actions</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td><code>virtual</code> ½¤¾þ»Ò¤È¥Ï¥ó¥É¥éÅϤ·¤Ï
-Apache 2.1 ¤ÇƳÆþ¤µ¤ì¤Þ¤·¤¿</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <var>action-type</var>
- ¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¤È¤­¤Ë <var>cgi-script</var>
- ¤¬¼Â¹Ô¤µ¤ì¤ë¤È¤¤¤¦Æ°ºî¤òÄɲä·¤Þ¤¹¡£<var>cgi-script</var> ¤Ï
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> ¤ä
- <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ¤Ë¤è¤Ã¤Æ
- CGI ¥¹¥¯¥ê¥×¥È¤ËÀßÄꤵ¤ì¤¿¥ê¥½¡¼¥¹¤Ø¤Î URL-path ¤Ç¤¹¡£
- <var>Action-type</var> ¤Ë¤Ï
- <a href="../handler.html">handler</a> ¤« MIME
- ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤Î URL
- ¤È¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤Ïɸ½à CGI ´Ä¶­ÊÑ¿ô <code>PATH_INFO</code> ¤È
- <code>PATH_TRANSLATED</code> ¤ò»È¤Ã¤ÆÅÁ¤¨¤é¤ì¤Þ¤¹¡£
- ÆÃÄê¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ»ÈÍѤµ¤ì¤ë¥Ï¥ó¥É¥é¤Ø¤Ï¡¢
- <code>REDIRECT_HANDLER</code> ÊÑ¿ô¤ò»È¤Ã¤ÆÅϤ»¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- # Requests for files of a particular MIME content type:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # Files of a particular file extension<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </code></p></div>
-
- <p>ºÇ½é¤ÎÎã¤Ç¤Ï¡¢MIME ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤¬ <code>image/gif</code>
- ¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¡¢»ØÄꤷ¤¿¥¹¥¯¥ê¥×¥È
- <code>/cgi-bin/images.cgi</code> ¤Ç½èÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>2 ÈÖÌܤÎÎã¤Ç¤Ï¡¢³ÈÄ¥»Ò¤¬ <code>.xyz</code>
- ¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¡¢»ØÄꤷ¤¿¥¹¥¯¥ê¥×¥È
- <code>/cgi-bin/program.cgi</code> ¤Ç½èÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¥ª¥×¥·¥ç¥ó¤Î <code>virtual</code> ½¤¾þ»Ò¤ò»ÈÍѤ¹¤ë¤È¡¢
- ¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤¬¼ÂºÝ¤Ë¸ºß¤¹¤ë¤«¤É¤¦¤«¤ò¸¡ºº¤·¤Ê¤¤¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤ÏÎ㤨¤Ð¡¢<code class="directive">Action</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥Ð¡¼¥Á¥ã¥ë¤Ê
- Location ¤Ë»ÈÍѤ·¤¿¤¤¡¢¤È¤¤¤Ã¤¿¾ì¹ç¤ËÊØÍø¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;Location /news&gt;<br />
- <span class="indent">
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Script" id="Script">Script</a> <a name="script" id="script">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆÃÄê¤Î¥ê¥¯¥¨¥¹¥È¥á¥½¥Ã¥É¤ËÂФ·¤Æ CGI ¥¹¥¯¥ê¥×¥È¤ò
-¼Â¹Ô¤¹¤ë¤è¤¦¤ËÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Script <var>method</var> <var>cgi-script</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_actions</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <var>method</var>
- ¤È¤¤¤¦¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¥ê¥¯¥¨¥¹¥È¤¬¹Ô¤Ê¤ï¤ì¤¿¤È¤­¤Ë
- <var>cgi-script</var> ¤ò¼Â¹Ô¤¹¤ë¤È¤¤¤¦Æ°ºî¤òÄɲä·¤Þ¤¹¡£
- <var>cgi-script</var> ¤Ï
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> ¤ä
- <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ¤Ë¤è¤Ã¤Æ
- CGI ¥¹¥¯¥ê¥×¥È¤ËÀßÄꤵ¤ì¤¿¥ê¥½¡¼¥¹¤Ø¤Î URL-path ¤Ç¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤Î URL ¤È¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤Ïɸ½à CGI
- ´Ä¶­ÊÑ¿ô <code>PATH_INFO</code> ¤È <code>PATH_TRANSLATED</code>
- ¤ò»È¤Ã¤ÆÅÁ¤¨¤é¤ì¤Þ¤¹¡£</p>
-
- <div class="note">
- Ǥ°Õ¤Î¥á¥½¥Ã¥É̾¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <strong>¥á¥½¥Ã¥É̾¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤¹</strong>¡£¤Ç¤¹¤«¤é¡¢
- <code>Script PUT</code> ¤È <code>Script put</code>
- ¤Ï¤Þ¤Ã¤¿¤¯°ã¤Ã¤¿¸ú²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£
- </div>
-
- <p><code class="directive">Script</code> ¥³¥Þ¥ó¥É¤Ï¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤ò
- Äɲ乤ë¤À¤±¤Ç¤¢¤ë¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤â¤· CGI ¥¹¥¯¥ê¥×¥È¤¬¸Æ¤Ð¤ì¤¿¤ê¡¢¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿
- ¥á¥½¥Ã¥É¤òÆâÉô¤Ç°·¤¦¤³¤È¤Î¤Ç¤­¤ë¾¤Î¥ê¥½¡¼¥¹¤¬¤¢¤ì¤Ð¡¢¤½¤ì¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- <code>GET</code> ¥á¥½¥Ã¥É¤Î <code class="directive">Script</code> ¤ÏÌä¹ç¤»
- °ú¿ô¤¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ß
- (<em>¤¿¤È¤¨¤Ð</em>¡¢foo.html?hi) ¸Æ¤Ð¤ì¤ë¤È¤¤¤¦¤³¤È¤Ë¤âÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤ÏÄ̾ïÄ̤ê½èÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- # For &lt;ISINDEX&gt;-style searching<br />
- Script GET /cgi-bin/search<br />
- <br />
- # A CGI PUT handler<br />
- Script PUT /~bob/put.cgi<br />
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_actions.html.ko.euc-kr b/docs/manual/mod/mod_actions.html.ko.euc-kr
deleted file mode 100644
index bcfc4ca6e3..0000000000
--- a/docs/manual/mod/mod_actions.html.ko.euc-kr
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_actions - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_actions</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÀÌ ¸ðµâÀº ¹Ìµð¾îÁ¾·ù³ª ¿äû¸Þ¼­µå¿¡ µû¶ó CGI
-½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>actions_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_actions.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâ¿¡´Â µÎ°¡Áö Áö½Ã¾î°¡ ÀÖ´Ù. <code class="directive"><a href="#action">Action</a></code> Áö½Ã¾î´Â ¿äûÇÏ´Â
- ÆÄÀÏÀÇ MIME content type¿¡ µû¶ó CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.
- <code class="directive"><a href="#script">Script</a></code> Áö½Ã¾î´Â
- ¿äûÀÌ Æ¯Á¤ ¸Þ¼­µå¸¦ »ç¿ëÇÒ °æ¿ì CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.
- ±×·¡¼­ ÆÄÀÏÀ» ó¸®ÇÏ´Â ½ºÅ©¸³Æ®¸¦ ¸Å¿ì ½±°Ô ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#action">Action</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#script">Script</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a></li>
-<li><a href="../handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ƯÁ¤ Çڵ鷯³ª content-type¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
-»ç¿ëÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Action <var>action-type</var> <var>cgi-script</var> [virtual]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_actions</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td><code>virtual</code> ¼öÁ¤ÀÚ¿Í Çڵ鷯´Â ¾ÆÆÄÄ¡
-2.1¶§ Ãß°¡µÇ¾ú´Ù</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â ¿äûÀÌ <var>action-type</var>À̸é
- <var>cgi-script</var>¸¦ ½ÇÇàÇÏ´Â ÇൿÀ» ¼­¹ö¿¡ Ãß°¡ÇÑ´Ù.
- <var>cgi-script</var>´Â <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>³ª <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>¸¦ »ç¿ëÇÏ¿© CGI
- ½ºÅ©¸³Æ®·Î ÁöÁ¤ÇÑ ¸®¼Ò½ºÀÇ URL°æ·ÎÀÌ´Ù.
- <var>action-type</var>¿¡´Â <a href="../handler.html">Çڵ鷯</a>³ª MIME content typeÀ»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾î´Â <code>PATH_INFO</code>¿Í
- <code>PATH_TRANSLATED</code> CGI Ç¥ÁØ È¯°æº¯¼ö·Î ¿äûÇÑ
- ¹®¼­ÀÇ URL°ú ÆÄÀÏ°æ·Î¸¦ Àü´ÞÇÑ´Ù. <code>REDIRECT_HANDLER</code>
- º¯¼ö·Î ƯÁ¤ ¿äû¿¡ »ç¿ëÇÒ Çڵ鷯¸¦ Àü´ÞÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- # ƯÁ¤ MIME content typeÀÇ ÆÄÀÏ ¿äû:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # ƯÁ¤ÇÑ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏ<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </code></p></div>
-
- <p>ù¹ø° ¿¹¿¡¼­ MIME content typeÀÌ <code>image/gif</code>ÀÎ
- ÆÄÀÏÀ» ¿äûÇϸé ÁöÁ¤ÇÑ cgi ½ºÅ©¸³Æ® <code>/cgi-bin/images.cgi</code>°¡
- ó¸®ÇÑ´Ù.</p>
-
- <p>µÎ¹ø° ¿¹¿¡¼­ È®ÀåÀÚ°¡ <code>.xyz</code>ÀÎ ÆÄÀÏÀ» ¿äûÇϸé
- ÁöÁ¤ÇÑ cgi ½ºÅ©¸³Æ® <code>/cgi-bin/program.cgi</code>°¡
- ó¸®ÇÑ´Ù.</p>
- <p>In the second example, requests for files with a file extension of
- <code>.xyz</code> are handled instead by the specified cgi script
- <code>/cgi-bin/program.cgi</code>.</p>
-
- <p>¼±ÅÃÀûÀÎ <code>virtual</code> ¼öÁ¤ÀÚ´Â ¿äûÇÑ ÆÄÀÏÀÌ
- ½ÇÁ¦·Î Á¸ÀçÇÏ´ÂÁö °Ë»çÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. ¿¹¸¦ µé¾î, °¡»óÀÇ
- À§Ä¡¿¡ <code class="directive">Action</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ·Á´Â
- °æ¿ì À¯¿ëÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;Location /news&gt;<br />
- <span class="indent">
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-<h3>Âü°í</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Script" id="Script">Script</a> <a name="script" id="script">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ƯÁ¤ ¿äû¸Þ¼­µå¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
-»ç¿ëÇÑ´Ù.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Script <var>method</var> <var>cgi-script</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_actions</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â ÆÄÀÏÀ» <var>method</var> ¸Þ¼­µå¸¦ »ç¿ëÇÏ¿©
- ¿äûÇϸé <var>cgi-script</var>¸¦ ½ÇÇàÇÏ´Â ÇൿÀ» ¼­¹ö¿¡
- Ãß°¡ÇÑ´Ù. <var>cgi-script</var>´Â <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>³ª <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>¸¦ »ç¿ëÇÏ¿© CGI
- ½ºÅ©¸³Æ®·Î ÁöÁ¤ÇÑ ¸®¼Ò½ºÀÇ URL°æ·ÎÀÌ´Ù. ÀÌ Áö½Ã¾î´Â
- <code>PATH_INFO</code>¿Í <code>PATH_TRANSLATED</code> CGI
- Ç¥ÁØ È¯°æº¯¼ö·Î ¿äûÇÑ ¹®¼­ÀÇ URL°ú ÆÄÀÏ°æ·Î¸¦ Àü´ÞÇÑ´Ù.</p>
-
- <div class="note">
- ¾î¶² ¸Þ¼­µå À̸§ÀÌ¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <strong>¸Þ¼­µå À̸§Àº
- ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÑ´Ù.</strong> ±×·¡¼­ <code>Script PUT</code>°ú
- <code>Script put</code>Àº ¿ÏÀüÈ÷ ´Ù¸£´Ù.
- </div>
-
- <p><code class="directive">Script</code> ¸í·É¾î´Â ±âº»ÀûÀÎ Çൿ¸¸À»
- ó¸®ÇÔÀ» ÁÖÀÇÇ϶ó. CGI ½ºÅ©¸³Æ®°¡ ºÒ¸®°Å³ª, ¿äûÇÑ ¸Þ¼­µå¸¦
- ¾Ë¾Æ¼­ ó¸®ÇÒ ¼ö ÀÖ´Â ¸®¼Ò½ºÀÇ °æ¿ì ±×´ë·Î ó¸®ÇÑ´Ù.
- <code>GET</code> ¸Þ¼­µåÀÇ <code class="directive">Script</code>´Â
- ÁúÀǾƱԸÕÆ®°¡ ÀÖÀ»¶§¸¸ (<em>¿¹</em>, foo.html?hi) »ç¿ëÇÔÀ»
- ÁÖÀÇÇ϶ó. ÁúÀǾƱԸÕÆ®°¡ ¾ø´Ù¸é Á¤»óÀûÀ¸·Î ¿äûÀ» ó¸®ÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- # &lt;ISINDEX&gt;½Ä °Ë»öÀ» À§ÇØ<br />
- Script GET /cgi-bin/search<br />
- <br />
- # CGI PUT Çڵ鷯<br />
- Script PUT /~bob/put.cgi<br />
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_actions.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_actions.xml b/docs/manual/mod/mod_actions.xml
deleted file mode 100644
index fffd5ca69a..0000000000
--- a/docs/manual/mod/mod_actions.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.17 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_actions.xml.meta">
-
-<name>mod_actions</name>
-
-<description>This module provides for executing CGI scripts based on
-media type or request method.</description>
-
-<status>Base</status>
-<sourcefile>mod_actions.c</sourcefile>
-<identifier>actions_module</identifier>
-
-<summary>
- <p>This module has two directives. The <directive
- module="mod_actions">Action</directive> directive lets you run CGI
- scripts whenever a file of a certain MIME content type is requested. The
- <directive module="mod_actions">Script</directive> directive lets
- you run CGI scripts whenever a particular method is used in a
- request. This makes it much easier to execute scripts that process
- files.</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../howto/cgi.html">Dynamic Content with CGI</a></seealso>
-<seealso><a href="../handler.html">Apache's Handler Use</a></seealso>
-
-<directivesynopsis>
-<name>Action</name>
-<description>Activates a CGI script for a particular handler or
-content-type</description>
-<syntax>Action <var>action-type</var> <var>cgi-script</var> [virtual]</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>The <code>virtual</code> modifier and handler passing were
-introduced in Apache 2.1</compatibility>
-
-<usage>
- <p>This directive adds an action, which will activate
- <var>cgi-script</var> when <var>action-type</var> is triggered by the
- request. The <var>cgi-script</var> is the URL-path to a resource
- that has been designated as a CGI script using <directive
- module="mod_alias">ScriptAlias</directive> or <directive
- module="mod_mime">AddHandler</directive>. The
- <var>action-type</var> can be either a <a
- href="../handler.html">handler</a> or a MIME content type. It
- sends the URL and file path of the requested document using the
- standard CGI <code>PATH_INFO</code> and <code>PATH_TRANSLATED</code>
- environment variables. The handler used for the particular request is
- passed using the <code>REDIRECT_HANDLER</code> variable.</p>
-
- <example><title>Examples</title>
- # Requests for files of a particular MIME content type:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # Files of a particular file extension<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </example>
-
- <p>In the first example, requests for files with a MIME content
- type of <code>image/gif</code> will be handled by the
- specified cgi script <code>/cgi-bin/images.cgi</code>.</p>
-
- <p>In the second example, requests for files with a file extension of
- <code>.xyz</code> are handled by the specified cgi script
- <code>/cgi-bin/program.cgi</code>.</p>
-
- <p>The optional <code>virtual</code> modifier turns off the check
- whether the requested file really exists. This is useful, for example,
- if you want to use the <directive>Action</directive> directive in
- virtual locations.</p>
-
- <example><title>Example</title>
- &lt;Location /news&gt;<br />
- <indent>
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Script</name>
-<description>Activates a CGI script for a particular request
-method.</description>
-<syntax>Script <var>method</var> <var>cgi-script</var></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<usage>
- <p>This directive adds an action, which will activate
- <var>cgi-script</var> when a file is requested using the method of
- <var>method</var>. The <var>cgi-script</var> is the URL-path to a
- resource that has been designated as a CGI script using <directive
- module="mod_alias">ScriptAlias</directive> or <directive
- module="mod_mime">AddHandler</directive>. The URL and
- file path of the requested document is sent using the standard CGI
- <code>PATH_INFO</code> and <code>PATH_TRANSLATED</code> environment
- variables.</p>
-
- <note>
- Any arbitrary method name may be used. <strong>Method names are
- case-sensitive</strong>, so <code>Script PUT</code> and
- <code>Script put</code> have two entirely different
- effects.
- </note>
-
- <p>Note that the <directive>Script</directive> command defines default
- actions only. If a CGI script is called, or some other resource that is
- capable of handling the requested method internally, it will do
- so. Also note that <directive>Script</directive> with a method of
- <code>GET</code> will only be called if there are query arguments present
- (<em>e.g.</em>, foo.html?hi). Otherwise, the request will
- proceed normally.</p>
-
- <example><title>Examples</title>
- # For &lt;ISINDEX&gt;-style searching<br />
- Script GET /cgi-bin/search<br />
- <br />
- # A CGI PUT handler<br />
- Script PUT /~bob/put.cgi<br />
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_actions.xml.de b/docs/manual/mod/mod_actions.xml.de
deleted file mode 100644
index c691088593..0000000000
--- a/docs/manual/mod/mod_actions.xml.de
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_actions.xml.meta">
-
-<name>mod_actions</name>
-
-<description>Dieses Modul erm&ouml;glicht die Ausf&uuml;hrung von CGI-Skripten
- in Abh&auml;ngigkeit von Medientypen und Anfragemethoden.</description>
-
-<status>Base</status>
-<sourcefile>mod_actions.c</sourcefile>
-<identifier>actions_module</identifier>
-
-<summary>
- <p>Das Modul besitzt zwei Direktiven. Die Direktive <directive
- module="mod_actions">Action</directive> erlaubt die Ausf&uuml;hrung von
- CGI-Skripten immer dann, wenn eine Anfrage zu einem bestimmten MIME-Type
- erfolgt. Die Direktive <directive module="mod_actions">Script</directive>
- erlaubt die Ausf&uuml;hrung von CGI-Skripten abh&auml;ngig von einer
- bestimmten Methode, die in der Anfrage verwendet wird. Dies macht es
- deutlich einfacher, Skripte auszuf&uuml;hren, die Dateien
- verarbeiten.</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../howto/cgi.html">Dynamische Inhalte mit CGI</a></seealso>
-<seealso><a href="../handler.html">Die Verwendung von Handlern</a></seealso>
-
-<directivesynopsis>
-<name>Action</name>
-<description>Aktiviert ein CGI-Skript f&uuml;r einen bestimmten Handler oder
- Content-Type</description>
-<syntax>Action <var>Aktionsart</var> <var>CGI-Skript</var> [virtual]</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Der Schalter <code>virtual</code> und die &Uuml;bergabe des
- Handlers wurden in Apache 2.1 eingef&uuml;hrt.</compatibility>
-
-<usage>
- <p>Die Direktive f&uuml;gt eine Aktion hinzu, welche das
- <var>CGI-Skript</var> aktiviert, sobald die <var>Aktionsart</var> durch
- eine Anfrage ausgel&ouml;st wird. <var>CGI-Skript</var> ist der URL-Pfad
- zu einer Ressource, die unter Verwendung von <directive
- module="mod_alias">ScriptAlias</directive> oder <directive
- module="mod_mime">AddHandler</directive> als CGI-Skript gekennzeichnet
- wurde. Die <var>Aktionsart</var> kann entweder ein <a
- href="../handler.html">Handler</a> oder ein MIME-Type sein. Die URL und
- den Dateipfad des angeforderten Dokuments in den
- Standard-CGI-Umgebungsvariablen <code>PATH_INFO</code> und
- <code>PATH_TRANSLATED</code> &uuml;bergeben. Der f&uuml;r die jeweilige
- Anfrage verwendete Handler wird in der Umgebungsvariablen
- <code>REDIRECT_HANDLER</code> &uuml;bergeben.</p>
-
- <example><title>Beispiele</title>
- # Anfragen f&uuml;r Dateien eines bestimmten MIME-Types:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # Dateien einer bestimmten Dateiendung<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </example>
-
- <p>Im ersten Beispiel werden Anfragen f&uuml;r Dateien mit dem MIME-Type
- <code>image/gif</code> von dem angegebenen CGI-Skript
- <code>/cgi-bin/images.cgi</code> bearbeitet.</p>
-
- <p>Im zweiten Beispiel werden Anfragen f&uuml;r Dateien mit der Dateiendung
- <code>.xyz</code> von dem angegebenen CGI-Skript
- <code>/cgi-bin/program.cgi</code> bearbeitet.</p>
-
- <p>Der optionale Schalter <code>virtual</code> deaktiviert die Pr&uuml;fung
- auf Existenz der angeforderten Datei. Dies ist beispielsweise
- n&uuml;tzlich, wenn Sie die Direktive <directive>Action</directive> in
- Verbindung mit virtuellen Adressr&auml;umen verwenden m&ouml;chten.</p>
-
- <example><title>Beispiel</title>
- &lt;Location /news&gt;<br />
- <indent>
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Script</name>
-<description>Aktiviert ein CGI-Skript f&uuml;r eine bestimmte
- Anfragemethode.</description>
-<syntax>Script <var>Methode</var> <var>CGI-Skript</var></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<usage>
- <p>Die Direktive f&uuml;gt eine Aktion hinzu, welche das
- <var>CGI-Skript</var> aktiviert, wenn eine Datei unter der Verwendung der
- Methode <var>Methode</var> angefordert wird. <var>CGI-Skript</var> ist der
- URL-Pfad zu einer Ressource, die unter Verwendung von <directive
- module="mod_alias">ScriptAlias</directive> oder <directive
- module="mod_mime">AddHandler</directive> als CGI-Skript gekennzeichnet
- wurde. Die URL und der Dateipfad des angeforderten Dokuments werden in den
- Standard-CGI-Umgebungsvariablen <code>PATH_INFO</code> und
- <code>PATH_TRANSLATED</code> &uuml;bergeben.</p>
-
- <note>
- Der Methodenname kann frei gew&auml;hlt werden. Bei <strong>Methodennamen
- wird zwischen Gro&szlig;- und Kleinschreibung</strong> unterschieden, so
- dass <code>Script PUT</code> und <code>Script put</code> zu vollkommen
- unterschiedlichen Ergebnissen f&uuml;hren.
- </note>
-
- <p>Beachten Sie, dass der <directive>Script</directive>-Befehl nur
- Voreinstellungen f&uuml;r Aktionen definiert. Wird ein CGI-Skript
- - oder eine andere Ressource, die in der Lage ist, die angeforderte
- Methode intern zu bearbeiten - aufgerufen, so wird diese(s) verwendet.
- Beachten Sie auch, dass <directive>Script</directive> mit der Methode
- <code>GET</code> nur dann aufgerufen wird, wenn Query-Argumente vorhanden
- sind (<em>z.B.</em> foo.html?hi). Andernfalls wird die Anfrage normal
- bearbeitet.</p>
-
- <example><title>Beispiele</title>
- # F&uuml;r &lt;ISINDEX&gt;-&auml;hnliches Suchen<br />
- Script GET /cgi-bin/search<br />
- <br />
- # Ein CGI-PUT-Handler<br />
- Script PUT /~bob/put.cgi<br />
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_actions.xml.ja b/docs/manual/mod/mod_actions.xml.ja
deleted file mode 100644
index 5e394743b9..0000000000
--- a/docs/manual/mod/mod_actions.xml.ja
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_actions.xml.meta">
-
-<name>mod_actions</name>
-
-<description>$B%a%G%#%"%?%$%W$d%j%/%(%9%H%a%=%C%I$K1~$8$F(B
-CGI $B%9%/%j%W%H$r<B9T$9$k5!G=$rDs6!(B</description>
-
-<status>Base</status>
-<sourcefile>mod_actions.c</sourcefile>
-<identifier>actions_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$K$OFs$D$N%G%#%l%/%F%#%V$,$"$j$^$9!#(B<directive
- module="mod_actions">Action</directive>
- $B%G%#%l%/%F%#%V$OFCDj$N(B MIME $B%?%$%W$N%U%!%$%k$r%j%/%(%9%H$5$l$?>l9g$K(B
- CGI $B%9%/%j%W%H$,<B9T$5$l$k$h$&$K$7$^$9!#(B<directive
- module="mod_actions">Script</directive>
- $B%G%#%l%/%F%#%V$O%j%/%(%9%H$GFCDj$N%a%=%C%I$,;HMQ$5$l$?$H$-$K(B CGI
- $B%9%/%j%W%H$,<B9T$5$l$k$h$&$K$7$^$9!#(B
- $B$3$l$O%U%!%$%k$r=hM}$9$k%9%/%j%W%H$N<B9T$r$:$C$H4JC1$K$7$^$9!#(B</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../howto/cgi.html">CGI $B$K$h$kF0E*%3%s%F%s%D(B</a></seealso>
-<seealso><a href="../handler.html">Apache $B$N%O%s%I%i$N;HMQ(B</a></seealso>
-
-<directivesynopsis>
-<name>Action</name>
-<description>$BFCDj$N%O%s%I%i$d%3%s%F%s%H%?%$%W$KBP$7$F(B CGI $B$r<B9T$9$k$h$&$K(B
-$B@_Dj(B</description>
-<syntax>Action <var>action-type</var> <var>cgi-script</var> [virtual]</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility><code>virtual</code> $B=$>~;R$H%O%s%I%iEO$7$O(B
-Apache 2.1 $B$GF3F~$5$l$^$7$?(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <var>action-type</var>
- $B$,%j%/%(%9%H$5$l$?$H$-$K(B <var>cgi-script</var>
- $B$,<B9T$5$l$k$H$$$&F0:n$rDI2C$7$^$9!#(B<var>cgi-script</var> $B$O(B
- <directive module="mod_alias">ScriptAlias</directive> $B$d(B
- <directive module="mod_mime">AddHandler</directive> $B$K$h$C$F(B
- CGI $B%9%/%j%W%H$K@_Dj$5$l$?%j%=!<%9$X$N(B URL-path $B$G$9!#(B
- <var>Action-type</var> $B$K$O(B
- <a href="../handler.html">handler</a> $B$+(B MIME
- $B%3%s%F%s%H%?%$%W$r;XDj$G$-$^$9!#%j%/%(%9%H$5$l$?%I%-%e%a%s%H$N(B URL
- $B$H%U%!%$%k$N%Q%9$OI8=`(B CGI $B4D6-JQ?t(B <code>PATH_INFO</code> $B$H(B
- <code>PATH_TRANSLATED</code> $B$r;H$C$FEA$($i$l$^$9!#(B
- $BFCDj$N%j%/%(%9%H$KBP$7$F;HMQ$5$l$k%O%s%I%i$X$O!"(B
- <code>REDIRECT_HANDLER</code> $BJQ?t$r;H$C$FEO$;$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- # Requests for files of a particular MIME content type:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # Files of a particular file extension<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </example>
-
- <p>$B:G=i$NNc$G$O!"(BMIME $B%3%s%F%s%H%?%$%W$,(B <code>image/gif</code>
- $B$N%U%!%$%k$X$N%j%/%(%9%H$O!";XDj$7$?%9%/%j%W%H(B
- <code>/cgi-bin/images.cgi</code> $B$G=hM}$5$l$^$9!#(B</p>
-
- <p>2 $BHVL\$NNc$G$O!"3HD%;R$,(B <code>.xyz</code>
- $B$N%U%!%$%k$X$N%j%/%(%9%H$O!";XDj$7$?%9%/%j%W%H(B
- <code>/cgi-bin/program.cgi</code> $B$G=hM}$5$l$^$9!#(B</p>
-
- <p>$B%*%W%7%g%s$N(B <code>virtual</code> $B=$>~;R$r;HMQ$9$k$H!"(B
- $B%j%/%(%9%H$5$l$?%U%!%$%k$,<B:]$KB8:_$9$k$+$I$&$+$r8!::$7$J$$$h$&$K$G$-$^$9!#(B
- $B$3$l$ONc$($P!"(B<directive>Action</directive> $B%G%#%l%/%F%#%V$r%P!<%A%c%k$J(B
- Location $B$K;HMQ$7$?$$!"$H$$$C$?>l9g$KJXMx$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- &lt;Location /news&gt;<br />
- <indent>
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Script</name>
-<description>$BFCDj$N%j%/%(%9%H%a%=%C%I$KBP$7$F(B CGI $B%9%/%j%W%H$r(B
-$B<B9T$9$k$h$&$K@_Dj(B</description>
-<syntax>Script <var>method</var> <var>cgi-script</var></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <var>method</var>
- $B$H$$$&%a%=%C%I$r;H$C$F%j%/%(%9%H$,9T$J$o$l$?$H$-$K(B
- <var>cgi-script</var> $B$r<B9T$9$k$H$$$&F0:n$rDI2C$7$^$9!#(B
- <var>cgi-script</var> $B$O(B
- <directive module="mod_alias">ScriptAlias</directive> $B$d(B
- <directive module="mod_mime">AddHandler</directive> $B$K$h$C$F(B
- CGI $B%9%/%j%W%H$K@_Dj$5$l$?%j%=!<%9$X$N(B URL-path $B$G$9!#(B
- $B%j%/%(%9%H$5$l$?%I%-%e%a%s%H$N(B URL $B$H%U%!%$%k$N%Q%9$OI8=`(B CGI
- $B4D6-JQ?t(B <code>PATH_INFO</code> $B$H(B <code>PATH_TRANSLATED</code>
- $B$r;H$C$FEA$($i$l$^$9!#(B</p>
-
- <note>
- $BG$0U$N%a%=%C%IL>$r;HMQ$9$k$3$H$,$G$-$^$9!#(B
- <strong>$B%a%=%C%IL>$OBgJ8;z>.J8;z$r6hJL$7$^$9(B</strong>$B!#$G$9$+$i!"(B
- <code>Script PUT</code> $B$H(B <code>Script put</code>
- $B$O$^$C$?$/0c$C$?8z2L$K$J$j$^$9!#(B
- </note>
-
- <p><directive>Script</directive> $B%3%^%s%I$O%G%U%)%k%H$NF0:n$r(B
- $BDI2C$9$k$@$1$G$"$k$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#$b$7(B CGI $B%9%/%j%W%H$,8F$P$l$?$j!"%j%/%(%9%H$5$l$?(B
- $B%a%=%C%I$rFbIt$G07$&$3$H$N$G$-$kB>$N%j%=!<%9$,$"$l$P!"$=$l$,9T$J$o$l$^$9!#(B
- <code>GET</code> $B%a%=%C%I$N(B <directive>Script</directive> $B$OLd9g$;(B
- $B0z?t$,$"$k>l9g$K$N$_(B
- (<em>$B$?$H$($P(B</em>$B!"(Bfoo.html?hi) $B8F$P$l$k$H$$$&$3$H$K$bCm0U$7$F$/$@$5$$!#(B
- $B$=$&$G$J$$>l9g$O!"%j%/%(%9%H$ODL>oDL$j=hM}$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- # For &lt;ISINDEX&gt;-style searching<br />
- Script GET /cgi-bin/search<br />
- <br />
- # A CGI PUT handler<br />
- Script PUT /~bob/put.cgi<br />
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_actions.xml.ko b/docs/manual/mod/mod_actions.xml.ko
deleted file mode 100644
index dc1ea05473..0000000000
--- a/docs/manual/mod/mod_actions.xml.ko
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding='EUC-KR' ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_actions.xml.meta">
-
-<name>mod_actions</name>
-
-<description>ÀÌ ¸ðµâÀº ¹Ìµð¾îÁ¾·ù³ª ¿äû¸Þ¼­µå¿¡ µû¶ó CGI
-½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.</description>
-
-<status>Base</status>
-<sourcefile>mod_actions.c</sourcefile>
-<identifier>actions_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâ¿¡´Â µÎ°¡Áö Áö½Ã¾î°¡ ÀÖ´Ù. <directive
- module="mod_actions">Action</directive> Áö½Ã¾î´Â ¿äûÇÏ´Â
- ÆÄÀÏÀÇ MIME content type¿¡ µû¶ó CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.
- <directive module="mod_actions">Script</directive> Áö½Ã¾î´Â
- ¿äûÀÌ Æ¯Á¤ ¸Þ¼­µå¸¦ »ç¿ëÇÒ °æ¿ì CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.
- ±×·¡¼­ ÆÄÀÏÀ» ó¸®ÇÏ´Â ½ºÅ©¸³Æ®¸¦ ¸Å¿ì ½±°Ô ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a></seealso>
-<seealso><a href="../handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></seealso>
-
-<directivesynopsis>
-<name>Action</name>
-<description>ƯÁ¤ Çڵ鷯³ª content-type¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
-»ç¿ëÇÑ´Ù</description>
-<syntax>Action <var>action-type</var> <var>cgi-script</var> [virtual]</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility><code>virtual</code> ¼öÁ¤ÀÚ¿Í Çڵ鷯´Â ¾ÆÆÄÄ¡
-2.1¶§ Ãß°¡µÇ¾ú´Ù</compatibility>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â ¿äûÀÌ <var>action-type</var>À̸é
- <var>cgi-script</var>¸¦ ½ÇÇàÇÏ´Â ÇൿÀ» ¼­¹ö¿¡ Ãß°¡ÇÑ´Ù.
- <var>cgi-script</var>´Â <directive
- module="mod_alias">ScriptAlias</directive>³ª <directive
- module="mod_mime">AddHandler</directive>¸¦ »ç¿ëÇÏ¿© CGI
- ½ºÅ©¸³Æ®·Î ÁöÁ¤ÇÑ ¸®¼Ò½ºÀÇ URL°æ·ÎÀÌ´Ù.
- <var>action-type</var>¿¡´Â <a
- href="../handler.html">Çڵ鷯</a>³ª MIME content typeÀ»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾î´Â <code>PATH_INFO</code>¿Í
- <code>PATH_TRANSLATED</code> CGI Ç¥ÁØ È¯°æº¯¼ö·Î ¿äûÇÑ
- ¹®¼­ÀÇ URL°ú ÆÄÀÏ°æ·Î¸¦ Àü´ÞÇÑ´Ù. <code>REDIRECT_HANDLER</code>
- º¯¼ö·Î ƯÁ¤ ¿äû¿¡ »ç¿ëÇÒ Çڵ鷯¸¦ Àü´ÞÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- # ƯÁ¤ MIME content typeÀÇ ÆÄÀÏ ¿äû:<br />
- Action image/gif /cgi-bin/images.cgi<br />
- <br />
- # ƯÁ¤ÇÑ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏ<br />
- AddHandler my-file-type .xyz<br />
- Action my-file-type /cgi-bin/program.cgi<br />
- </example>
-
- <p>ù¹ø° ¿¹¿¡¼­ MIME content typeÀÌ <code>image/gif</code>ÀÎ
- ÆÄÀÏÀ» ¿äûÇϸé ÁöÁ¤ÇÑ cgi ½ºÅ©¸³Æ® <code>/cgi-bin/images.cgi</code>°¡
- ó¸®ÇÑ´Ù.</p>
-
- <p>µÎ¹ø° ¿¹¿¡¼­ È®ÀåÀÚ°¡ <code>.xyz</code>ÀÎ ÆÄÀÏÀ» ¿äûÇϸé
- ÁöÁ¤ÇÑ cgi ½ºÅ©¸³Æ® <code>/cgi-bin/program.cgi</code>°¡
- ó¸®ÇÑ´Ù.</p>
- <p>In the second example, requests for files with a file extension of
- <code>.xyz</code> are handled instead by the specified cgi script
- <code>/cgi-bin/program.cgi</code>.</p>
-
- <p>¼±ÅÃÀûÀÎ <code>virtual</code> ¼öÁ¤ÀÚ´Â ¿äûÇÑ ÆÄÀÏÀÌ
- ½ÇÁ¦·Î Á¸ÀçÇÏ´ÂÁö °Ë»çÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. ¿¹¸¦ µé¾î, °¡»óÀÇ
- À§Ä¡¿¡ <directive>Action</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ·Á´Â
- °æ¿ì À¯¿ëÇÏ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- &lt;Location /news&gt;<br />
- <indent>
- SetHandler news-handler<br />
- Action news-handler /cgi-bin/news.cgi virtual<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Script</name>
-<description>ƯÁ¤ ¿äû¸Þ¼­µå¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
-»ç¿ëÇÑ´Ù.</description>
-<syntax>Script <var>method</var> <var>cgi-script</var></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â ÆÄÀÏÀ» <var>method</var> ¸Þ¼­µå¸¦ »ç¿ëÇÏ¿©
- ¿äûÇϸé <var>cgi-script</var>¸¦ ½ÇÇàÇÏ´Â ÇൿÀ» ¼­¹ö¿¡
- Ãß°¡ÇÑ´Ù. <var>cgi-script</var>´Â <directive
- module="mod_alias">ScriptAlias</directive>³ª <directive
- module="mod_mime">AddHandler</directive>¸¦ »ç¿ëÇÏ¿© CGI
- ½ºÅ©¸³Æ®·Î ÁöÁ¤ÇÑ ¸®¼Ò½ºÀÇ URL°æ·ÎÀÌ´Ù. ÀÌ Áö½Ã¾î´Â
- <code>PATH_INFO</code>¿Í <code>PATH_TRANSLATED</code> CGI
- Ç¥ÁØ È¯°æº¯¼ö·Î ¿äûÇÑ ¹®¼­ÀÇ URL°ú ÆÄÀÏ°æ·Î¸¦ Àü´ÞÇÑ´Ù.</p>
-
- <note>
- ¾î¶² ¸Þ¼­µå À̸§ÀÌ¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <strong>¸Þ¼­µå À̸§Àº
- ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÑ´Ù.</strong> ±×·¡¼­ <code>Script PUT</code>°ú
- <code>Script put</code>Àº ¿ÏÀüÈ÷ ´Ù¸£´Ù.
- </note>
-
- <p><directive>Script</directive> ¸í·É¾î´Â ±âº»ÀûÀÎ Çൿ¸¸À»
- ó¸®ÇÔÀ» ÁÖÀÇÇ϶ó. CGI ½ºÅ©¸³Æ®°¡ ºÒ¸®°Å³ª, ¿äûÇÑ ¸Þ¼­µå¸¦
- ¾Ë¾Æ¼­ ó¸®ÇÒ ¼ö ÀÖ´Â ¸®¼Ò½ºÀÇ °æ¿ì ±×´ë·Î ó¸®ÇÑ´Ù.
- <code>GET</code> ¸Þ¼­µåÀÇ <directive>Script</directive>´Â
- ÁúÀǾƱԸÕÆ®°¡ ÀÖÀ»¶§¸¸ (<em>¿¹</em>, foo.html?hi) »ç¿ëÇÔÀ»
- ÁÖÀÇÇ϶ó. ÁúÀǾƱԸÕÆ®°¡ ¾ø´Ù¸é Á¤»óÀûÀ¸·Î ¿äûÀ» ó¸®ÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- # &lt;ISINDEX&gt;½Ä °Ë»öÀ» À§ÇØ<br />
- Script GET /cgi-bin/search<br />
- <br />
- # CGI PUT Çڵ鷯<br />
- Script PUT /~bob/put.cgi<br />
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_actions.xml.meta b/docs/manual/mod/mod_actions.xml.meta
deleted file mode 100644
index 917590df17..0000000000
--- a/docs/manual/mod/mod_actions.xml.meta
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_actions</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_alias.html b/docs/manual/mod/mod_alias.html
deleted file mode 100644
index cbf64dede2..0000000000
--- a/docs/manual/mod/mod_alias.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_alias.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_alias.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_alias.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_alias.html.en b/docs/manual/mod/mod_alias.html.en
deleted file mode 100644
index 0b90b9b5ae..0000000000
--- a/docs/manual/mod/mod_alias.html.en
+++ /dev/null
@@ -1,370 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_alias - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_alias</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_alias.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides for mapping different parts of the host
- filesystem in the document tree and for URL redirection</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>alias_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_alias.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>The directives contained in this module allow for manipulation
- and control of URLs as requests arrive at the server. The
- <code class="directive"><a href="#alias">Alias</a></code> and <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> directives are used to
- map between URLs and filesystem paths. This allows for content
- which is not directly under the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> served as part of the web
- document tree. The <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> directive has the
- additional effect of marking the target directory as containing
- only CGI scripts.</p>
-
- <p>The <code class="directive"><a href="#redirect">Redirect</a></code>
- directives are used to instruct clients to make a new request with
- a different URL. They are often used when a resource has moved to
- a new location.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#alias">Alias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#aliasmatch">AliasMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirect</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirectmatch">RedirectMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirectpermanent">RedirectPermanent</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirecttemp">RedirectTemp</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptalias">ScriptAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptaliasmatch">ScriptAliasMatch</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#order">Order of Processing</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code></li>
-<li><a href="../urlmapping.html">Mapping URLs to the filesystem</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">Order of Processing</a></h2>
-
-<p>Aliases and Redirects occuring in different contexts are processed
-like other directives according to standard <a href="../sections.html#mergin">merging rules</a>. But when multiple
-Aliases or Redirects occur in the same context (for example, in the
-same <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
-section) they are processed in a particular order.</p>
-
-<p>First, all Redirects are processed before Aliases are processed,
-and therefore a request that matches a <code class="directive"><a href="#redirect">Redirect</a></code> or <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> will never have Aliases
-applied. Second, the Aliases and Redirects are processed in the order
-they appear in the configuration files, with the first match taking
-precedence.</p>
-
-<p>For this reason, when two or more of these directives apply to the
-same sub-path, you must list the most specific path first in order for
-all the directives to have an effect. For example, the following
-configuration will work as expected:</p>
-
-<div class="example"><p><code>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</code></p></div>
-
-<p>But if the above two directives were reversed in order, the
-<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code>
-would always match before the <code>/foo/bar</code> <code class="directive"><a href="#alias">Alias</a></code>, so the latter directive would be
-ignored.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps URLs to filesystem locations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
-
- <p>The <code class="directive">Alias</code> directive allows documents to
- be stored in the local filesystem other than under the
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. URLs with a
- (%-decoded) path beginning with <var>url-path</var> will be mapped
- to local files beginning with <var>directory-path</var>.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- Alias /image /ftp/pub/image
- </code></p></div>
-
- <p>A request for http://myserver/image/foo.gif would cause the
- server to return the file /ftp/pub/image/foo.gif.</p>
-
- <p>Note that if you include a trailing / on the
- <var>url-path</var> then the server will require a trailing / in
- order to expand the alias. That is, if you use <code>Alias
- /icons/ /usr/local/apache/icons/</code> then the url
- <code>/icons</code> will not be aliased.</p>
-
- <p>Note that you may need to specify additional <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> sections which
- cover the <em>destination</em> of aliases. Aliasing occurs before
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> sections
- are checked, so only the destination of aliases are affected.
- (Note however <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- sections are run through once before aliases are performed, so
- they will apply.)</p>
-
- <p>In particular, if you are creating an <code>Alias</code> to a
- directory outside of your <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, you may need to explicitly
- permit access to the target directory.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- Alias /image /ftp/pub/image<br />
- &lt;Directory /ftp/pub/image&gt;<br />
- <span class="indent">
- Order allow,deny<br />
- Allow from all<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AliasMatch" id="AliasMatch">AliasMatch</a> <a name="aliasmatch" id="aliasmatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps URLs to filesystem locations using regular
-expressions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>This directive is equivalent to <code class="directive"><a href="#alias">Alias</a></code>, but makes use of standard
- regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the URL-path, and
- if it matches, the server will substitute any parenthesized
- matches into the given string and use it as a filename. For
- example, to activate the <code>/icons</code> directory, one might
- use:</p>
-
- <div class="example"><p><code>
- AliasMatch ^/icons(.*) /usr/local/apache/icons$1
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Redirect" id="Redirect">Redirect</a> <a name="redirect" id="redirect">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sends an external redirect asking the client to fetch
-a different URL</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>The Redirect directive maps an old URL into a new one. The
- new URL is returned to the client which attempts to fetch it
- again with the new address. <var>URL-path</var> a (%-decoded)
- path; any requests for documents beginning with this path will
- be returned a redirect error to a new (%-encoded) URL beginning
- with <var>URL</var>.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- Redirect /service http://foo2.bar.com/service
- </code></p></div>
-
- <p>If the client requests http://myserver/service/foo.txt, it
- will be told to access http://foo2.bar.com/service/foo.txt
- instead.</p>
-
-<div class="note"><h3>Note</h3> <p>Redirect directives take precedence over
-Alias and ScriptAlias directives, irrespective of their ordering in
-the configuration file. Also, <var>URL-path</var> must be a fully
-qualified URL, not a relative path, even when used with .htaccess files or
-inside of <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
-sections.</p></div>
-
- <p>If no <var>status</var> argument is given, the redirect will
- be "temporary" (HTTP status 302). This indicates to the client
- that the resource has moved temporarily. The <var>status</var>
- argument can be used to return other HTTP status codes:</p>
-
- <dl>
- <dt>permanent</dt>
-
- <dd>Returns a permanent redirect status (301) indicating that
- the resource has moved permanently.</dd>
-
- <dt>temp</dt>
-
- <dd>Returns a temporary redirect status (302). This is the
- default.</dd>
-
- <dt>seeother</dt>
-
- <dd>Returns a "See Other" status (303) indicating that the
- resource has been replaced.</dd>
-
- <dt>gone</dt>
-
- <dd>Returns a "Gone" status (410) indicating that the
- resource has been permanently removed. When this status is
- used the <var>URL</var> argument should be omitted.</dd>
- </dl>
-
- <p>Other status codes can be returned by giving the numeric
- status code as the value of <var>status</var>. If the status is
- between 300 and 399, the <var>URL</var> argument must be present,
- otherwise it must be omitted. Note that the status must be
- known to the Apache code (see the function
- <code>send_error_response</code> in http_protocol.c).</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- Redirect permanent /one http://example.com/two<br />
- Redirect 303 /three http://example.com/other
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectMatch" id="RedirectMatch">RedirectMatch</a> <a name="redirectmatch" id="redirectmatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sends an external redirect based on a regular expression match
-of the current URL</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>This directive is equivalent to <code class="directive"><a href="#redirect">Redirect</a></code>, but makes use of standard
- regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the URL-path, and
- if it matches, the server will substitute any parenthesized
- matches into the given string and use it as a filename. For
- example, to redirect all GIF files to like-named JPEG files on
- another server, one might use:</p>
-
- <div class="example"><p><code>
- RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectPermanent" id="RedirectPermanent">RedirectPermanent</a> <a name="redirectpermanent" id="redirectpermanent">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sends an external permanent redirect asking the client to fetch
-a different URL</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RedirectPermanent <var>URL-path</var> <var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>This directive makes the client know that the Redirect is
- permanent (status 301). Exactly equivalent to <code>Redirect
- permanent</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectTemp" id="RedirectTemp">RedirectTemp</a> <a name="redirecttemp" id="redirecttemp">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sends an external temporary redirect asking the client to fetch
-a different URL</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RedirectTemp <var>URL-path</var> <var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>This directive makes the client know that the Redirect is
- only temporary (status 302). Exactly equivalent to
- <code>Redirect temp</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptAlias" id="ScriptAlias">ScriptAlias</a> <a name="scriptalias" id="scriptalias">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps a URL to a filesystem location and designates the
-target as a CGI script</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>The <code class="directive">ScriptAlias</code> directive has the same
- behavior as the <code class="directive"><a href="#alias">Alias</a></code>
- directive, except that in addition it marks the target directory
- as containing CGI scripts that will be processed by <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>'s cgi-script handler. URLs with a
- (%-decoded) path beginning with <var>URL-path</var> will be mapped
- to scripts beginning with the second argument which is a full
- pathname in the local filesystem.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- ScriptAlias /cgi-bin/ /web/cgi-bin/
- </code></p></div>
-
- <p>A request for <code>http://myserver/cgi-bin/foo</code> would cause the
- server to run the script <code>/web/cgi-bin/foo</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptAliasMatch" id="ScriptAliasMatch">ScriptAliasMatch</a> <a name="scriptaliasmatch" id="scriptaliasmatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_alias</td></tr>
-</table>
- <p>This directive is equivalent to <code class="directive"><a href="#scriptalias">ScriptAlias</a></code>, but makes use of standard
- regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the URL-path,
- and if it matches, the server will substitute any parenthesized
- matches into the given string and use it as a filename. For
- example, to activate the standard <code>/cgi-bin</code>, one
- might use:</p>
-
- <div class="example"><p><code>
- ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_alias.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_alias.html.ja.euc-jp b/docs/manual/mod/mod_alias.html.ja.euc-jp
deleted file mode 100644
index 07a0283128..0000000000
--- a/docs/manual/mod/mod_alias.html.ja.euc-jp
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_alias - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_alias</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_alias.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥Û¥¹¥È¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î¤¤¤í¤¤¤í¤Ê°ã¤¦¾ì½ê¤ò
- ¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Ë¥Þ¥Ã¥×¤¹¤ëµ¡Ç½¤È¡¢
- URL ¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò¹Ô¤Ê¤¦µ¡Ç½¤òÄ󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>alias_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_alias.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥µ¡¼¥Ð¤Ë¥ê¥¯¥¨¥¹¥È¤¬ÅþÃ夷¤¿¤È¤­¤Ë
- URL ¤ÎÁàºî¤äÀ©¸æ¤ò¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£<code class="directive"><a href="#alias">Alias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code class="directive"><a href="#scriptalias">ScriptAlias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- URL ¤È¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ñ¥¹¤ò¥Þ¥Ã¥×¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£¤³¤ì¤Ï
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤Î²¼¤Ë¤Ê¤¤¥É¥­¥å¥á¥ó¥È¤ò¥¦¥§¥Ö¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Î°ìÉô¤È¤·¤Æ
- Á÷¤é¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£<code class="directive"><a href="#scriptalias">ScriptAlias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤Ï¥Þ¥Ã¥×Àè¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬ CGI
- ¥¹¥¯¥ê¥×¥È¤Î¤ß¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤È¤¤¤¦Äɲäθú²Ì¤¬¤¢¤ê¤Þ¤¹¡£
- </p>
-
- <p><code class="directive"><a href="#redirect">Redirect</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥¯¥é¥¤¥¢¥ó¥È¤Ë°ã¤Ã¤¿
- URL ¤Ë¿·¤·¤¤¥ê¥¯¥¨¥¹¥È¤òÁ÷¤ë¤è¤¦¤Ë»Ø¼¨¤·¤Þ¤¹¡£¤³¤ì¤Ï¡¢
- ¥ê¥½¡¼¥¹¤¬¿·¤·¤¤¾ì½ê¤Ë°ÜÆ°¤·¤¿¤È¤­¤Ë¤è¤¯»ÈÍѤµ¤ì¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#alias">Alias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#aliasmatch">AliasMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirect</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirectmatch">RedirectMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirectpermanent">RedirectPermanent</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirecttemp">RedirectTemp</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptalias">ScriptAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptaliasmatch">ScriptAliasMatch</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#order">½èÍý¤Î½çÈÖ</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code></li>
-<li><a href="../urlmapping.html">URL ¤«¤é¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î°ÌÃ֤ؤΥޥåԥó¥°</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">½èÍý¤Î½çÈÖ</a></h2>
-
-<p>ÍÍ¡¹¤Ê¥³¥ó¥Æ¥­¥¹¥ÈÃæ¤Ç¤Î Alias ¤ä Redirect ¤Ï¾¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
-Ʊ¤¸¤è¤¦¤Ëɸ½à¤Î <a href="../sections.html#mergin">¥Þ¡¼¥¸µ¬Â§</a> ¤Ë
-½¾¤Ã¤Æ½èÍý¤µ¤ì¤Þ¤¹¡£¤¿¤À¤·¡¢(Î㤨¤Ð <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤Î¤è¤¦¤Ë) Ê£¿ô¤Î Alias ¤ä Redirect ¤¬
-Ʊ¤¸¥³¥ó¥Æ¥­¥¹¥ÈÃæ¤Ë¸½¤ì¤¿¾ì¹ç¤Ï·è¤Þ¤Ã¤¿½çÈ֤ǽèÍý¤µ¤ì¤Þ¤¹¡£</p>
-
-<p>¤Þ¤º¡¢Alias ¤ÎÁ°¤Ë¤¹¤Ù¤Æ¤Î Redirect ¤¬½èÍý¤µ¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢<code class="directive"><a href="#redirect">Redirect</a></code> ¤« <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> ¤Ë¥Þ¥Ã¥Á¤¹¤ë¥ê¥¯¥¨¥¹¥È¤Ë¤Ï
-Alias ¤Ï·è¤·¤ÆŬÍѤµ¤ì¤Þ¤»¤ó¡£¼¡¤Ë¡¢Alias ¤È Redirect ¤¬ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î
-½çÈÖ¤ËŬÍѤµ¤ì¡¢ºÇ½é¤Ë¥Þ¥Ã¥Á¤·¤¿¤â¤Î¤¬Í¥À褵¤ì¤Þ¤¹¡£</p>
-
-<p>¤Ç¤¹¤«¤é¡¢Æó¤Ä°Ê¾å¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Æ±¤¸¥Ñ¥¹¤ËŬÍѤµ¤ì¤ë¤È¤­¤Ï¡¢
-¤¹¤Ù¤Æ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¸ú²Ì¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¤è¤ê¾Ü¤·¤¤¥Ñ¥¹¤òÀè¤Ë½ñ¤¯
-ɬÍפ¬¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢¼¡¤ÎÀßÄê¤Ï´üÂÔÄ̤ê¤ÎÆ°ºî¤ò¤·¤Þ¤¹:</p>
-
-<div class="example"><p><code>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</code></p></div>
-
-<p>¤·¤«¤·¡¢¾åµ­¤ÎÆó¤Ä¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½çÈÖ¤¬µÕ¤Ë¤Ê¤ë¤È¡¢
-<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code> ¤¬
-¾ï¤Ë <code>/foo/bar</code> <code class="directive"><a href="#alias">Alias</a></code> ¤è¤êÀè¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¤Î¤Ç¡¢¸å¼Ô¤Ï
-·è¤·¤ÆŬÍѤµ¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤˥ޥåפ¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p><code class="directive">Alias</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥É¥­¥å¥á¥ó¥È¤ò
- ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- °Ê³°¤Î¾ì½ê¤ËÊݴɤ¹¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£
- URL ¤Î (% ¤¬Éü¹æ¤µ¤ì¤¿) ¥Ñ¥¹¤¬ <var>url-path</var> ¤Ç»Ï¤Þ¤ë¤â¤Î¤Ï
- <var>directory-filename</var>
- ¤Ç»Ï¤Þ¤ë¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤Ë¥Þ¥Ã¥×¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- Alias /image /ftp/pub/image
- </code></p></div>
-
- <p>http://myserver/image/foo.gif ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¡¢¥µ¡¼¥Ð¤Ï
- ¥Õ¥¡¥¤¥ë /ftp/pub/image/foo.gif ¤òÊÖ¤·¤Þ¤¹¡£</p>
-
- <p>¤â¤· <var>url-path</var> ¤ÎºÇ¸å¤Ë /
- ¤ò½ñ¤¤¤¿¤Ê¤é¡¢¥µ¡¼¥Ð¤¬¥¨¥¤¥ê¥¢¥¹¤òŸ³«¤¹¤ë¤¿¤á¤Ë¤Ï¡¢ºÇ¸å¤Î /
- ¤¬É¬Íפˤʤ뤳¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤¹¤Ê¤ï¤Á¡¢<code>Alias /icons/
- /usr/local/apache/icons/</code> ¤È¤¤¤¦¤â¤Î¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- <code>/icons</code> ¤È¤¤¤¦ url ¤Ï¥¨¥¤¥ê¥¢¥¹¤µ¤ì¤Þ¤»¤ó¡£</p>
-
- <p>¥¨¥¤¥ê¥¢¥¹¤Î<em>¹Ô¤­Àè</em>¤ò´Þ¤ó¤Ç¤¤¤ë <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤òÄɲ乤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¥¨¥¤¥ê¥¢¥¹¤ÎŸ³«¤Ï <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤òÄ´¤Ù¤ëÁ°¤Ë¹Ô¤Ê¤ï¤ì¤Þ¤¹¤Î¤Ç¡¢
- ¥¨¥¤¥ê¥¢¥¹¤Î¹Ô¤­Àè¤Î <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Î¤ß
- ¸ú²Ì¤¬¤¢¤ê¤Þ¤¹¡£
- (¤·¤«¤·¡¢<code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤Ï¥¨¥¤¥ê¥¢¥¹¤¬½èÍý¤µ¤ì¤ëÁ°¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- ¤³¤Á¤é¤ÏŬÍѤµ¤ì¤Þ¤¹¡£)</p>
-
- <p>Æäˡ¢<code>Alias</code> ¤ò
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤Î³°Â¦¤ËÇÛÃÖ¤·¤¿¾ì¹ç¤Ï¡¢¹Ô¤­Àè¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ¹¤ë
- ¥¢¥¯¥»¥¹¸¢¸Â¤òÌÀ¼¨Åª¤ËÀ©¸Â¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- Alias /image /ftp/pub/image<br />
- &lt;Directory /ftp/pub/image&gt;<br />
- <span class="indent">
- Order allow,deny<br />
- Allow from all<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AliasMatch" id="AliasMatch">AliasMatch</a> <a name="aliasmatch" id="aliasmatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Àµµ¬É½¸½¤ò»È¤Ã¤Æ URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤˥ޥåפ¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="#alias">Alias</a></code>
- ¤È¤Û¤È¤ó¤ÉƱ¤¸¤Ç¤¹¤¬¡¢´Êñ¤ÊÀèƬ¤«¤é¤Î¥Þ¥Ã¥Á¤ò¹Ô¤Ê¤¦¤Î¤Ç¤Ï¤Ê¤¯¡¢
- ɸ½àÀµµ¬É½¸½¤òÍøÍѤ·¤Þ¤¹¡£¤³¤³¤Ç»ØÄꤵ¤ì¤¿Àµµ¬É½¸½¤È URL ¤Î¥Ñ¥¹
- ¤¬¹ç¤¦¤«¤É¤¦¤«¤òÄ´¤Ù¡¢¹ç¤¦¾ì¹ç¤Ï³ç¸Ì¤Ç³ç¤é¤ì¤¿¥Þ¥Ã¥Á¤ò
- Í¿¤¨¤é¤ì¤¿Ê¸»úÎó¤ÇÃÖ¤­´¹¤¨¡¢¤½¤ì¤ò¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ»ÈÍѤ·¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢
- <code>/icons</code> ¥Ç¥£¥ì¥¯¥È¥ê¤ò»È¤¦
- ¤¿¤á¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤¬»ÈÍѤǤ­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- AliasMatch ^/icons(.*) /usr/local/apache/icons$1
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Redirect" id="Redirect">Redirect</a> <a name="redirect" id="redirect">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤¬°ã¤¦ URL ¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë³°Éô¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò
-Á÷¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p>Redirect ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¸Å¤¤ URL ¤ò¿·¤·¤¤¤â¤Î¤Ø¥Þ¥Ã¥×¤·¤Þ¤¹¡£
- ¿·¤·¤¤ URL ¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤µ¤ì¤Þ¤¹¡£¤½¤·¤Æ¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤Ï¿·¤·¤¤¥¢¥É¥ì¥¹¤ò¤â¤¦°ì²ó¼èÆÀ¤·¤è¤¦¤È¤·¤Þ¤¹¡£
- <var>URL-path</var> (% ¤¬Éü¹æ¤µ¤ì¤¿) ¥Ñ¥¹¤Ç»Ï¤Þ¤ë¥É¥­¥å¥á¥ó¥È¤Ø¤Î
- ¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤Ï <var>URL</var> ¤Ç»Ï¤Þ¤ë¿·¤·¤¤
- (% ¤¬Éä¹æ²½¤µ¤ì¤¿) URL ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¥¨¥é¡¼¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- Redirect /service http://foo2.bar.com/service
- </code></p></div>
-
- <p>¥¯¥é¥¤¥¢¥ó¥È¤Ï http://myserver/service/foo.txt
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤Ê¤¦¤È¡¢Âå¤ï¤ê¤Ë http://foo2.bar.com/service/foo.txt
- ¤ò¥¢¥¯¥»¥¹¤¹¤ë¤è¤¦¤Ë¹ð¤²¤é¤ì¤Þ¤¹¡£</p>
-
-<div class="note"><h3>Ãí°Õ</h3><p>ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î½çÈ֤˴ؤï¤é¤º¡¢
-Redirect ·Ï¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Alias
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È ScriptAlias ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤è¤ê¤âÍ¥À褵¤ì¤Þ¤¹¡£
-¤Þ¤¿¡¢.htaccess ¥Õ¥¡¥¤¥ë¤ä <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤ÎÃæ¤Ç»È¤ï¤ì¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¢<var>URL-path</var>
-¤ÏÁêÂХѥ¹¤Ç¤Ï¤Ê¤¯¡¢´°Á´¤Ê URL ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p></div>
-
- <p>¤â¤· <var>status</var> °ú¿ô¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¥ê¥À¥¤¥ì¥¯¥È¤Ï
- "temporary" (HTTP ¥¹¥Æ¡¼¥¿¥¹ 302) ¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ë
- ¥ê¥½¡¼¥¹¤¬°ì»þŪ¤Ë°ÜÆ°¤·¤¿¤È¤¤¤¦¤³¤È¤ò¼¨¤·¤Þ¤¹¡£<var>Status</var>
- °ú¿ô¤Ï ¾¤Î HTTP ¤Î¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤òÊÖ¤¹¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <dl>
- <dt>permanent</dt>
-
- <dd>±Êµ×¤Ë¥ê¥À¥¤¥ì¥¯¥È¤ò¤¹¤ë¥¹¥Æ¡¼¥¿¥¹ (301) ¤òÊÖ¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï¥ê¥½¡¼¥¹¤¬±Êµ×¤Ë°ÜÆ°¤·¤¿¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£</dd>
-
- <dt>temp</dt>
-
- <dd>°ì»þŪ¤Ê¥ê¥À¥¤¥ì¥¯¥È¥¹¥Æ¡¼¥¿¥¹ (302)
- ¤òÊÖ¤·¤Þ¤¹¡£¤³¤ì¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤¹¡£</dd>
-
- <dt>seeother</dt>
-
- <dd>"See Other" ¥¹¥Æ¡¼¥¿¥¹ (303) ¤òÊÖ¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï¥ê¥½¡¼¥¹¤¬Â¾¤Î¤â¤Î¤ÇÃÖ¤­´¹¤¨¤é¤ì¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£</dd>
-
- <dt>gone</dt>
-
- <dd>"Gone" ¥¹¥Æ¡¼¥¿¥¹ (410) ¤òÊÖ¤·¤Þ¤¹¡£¤³¤ì¤Ï¥ê¥½¡¼¥¹¤¬±Êµ×¤Ë
- ºï½ü¤µ¤ì¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£¤³¤Î¥¹¥Æ¡¼¥¿¥¹¤¬»ÈÍѤµ¤ì¤¿¾ì¹ç¡¢
- <var>url</var> °ú¿ô¤Ï¾Êά¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</dd>
- </dl>
-
- <p><var>Status</var> ¤ÎÃͤ˥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤ò¿ôÃͤÇÍ¿¤¨¤ë¤³¤È¤Ç
- ¾¤Î¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤âÊÖ¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥¹¥Æ¡¼¥¿¥¹¤¬ 300 ¤È 399
- ¤Î´Ö¤Ë¤¢¤ë¾ì¹ç¡¢<var>url</var> °ú¿ô¤Ï¸ºß¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£
- ¤½¤Î¾¤Î¾ì¹ç¤Ï¾Êά¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤¿¤À¤·¡¢
- ¥¹¥Æ¡¼¥¿¥¹¤Ï Apache ¤Î¥³¡¼¥É¤¬ÃΤäƤ¤¤ë¤â¤Î¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹
- (http_protocol.c ¤Î´Ø¿ô <code>send_error_response</code>
- ¤ò¸«¤Æ¤¯¤À¤µ¤¤)¡£</p>
- <p>Îã:</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- Redirect permanent /one http://example.com/two<br />
- Redirect 303 /three http://example.com/other
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectMatch" id="RedirectMatch">RedirectMatch</a> <a name="redirectmatch" id="redirectmatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¸½ºß¤Î URL ¤Ø¤ÎÀµµ¬É½¸½¤Î¥Þ¥Ã¥Á¤Ë¤è¤ê
-³°Éô¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="#redirect">Redirect</a></code>
- ¤È¤Û¤È¤ó¤ÉƱ¤¸¤Ç¤¹¤¬¡¢´Êñ¤ÊÀèƬ¤«¤é¤Î¥Þ¥Ã¥Á¤ò¹Ô¤Ê¤¦¤Î¤Ç¤Ï¤Ê¤¯¡¢
- ɸ½àÀµµ¬É½¸½¤òÍøÍѤ·¤Þ¤¹¡£¤³¤³¤Ç»ØÄꤵ¤ì¤¿Àµµ¬É½¸½¤È URL-path
- ¤¬¹ç¤¦¤«¤É¤¦¤«¤òÄ´¤Ù¡¢¹ç¤¦¾ì¹ç¤Ï³ç¸Ì¤Ç³ç¤é¤ì¤¿¥Þ¥Ã¥Á¤ò
- Í¿¤¨¤é¤ì¤¿Ê¸»úÎó¤ÇÃÖ¤­´¹¤¨¡¢¤½¤ì¤ò¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ»ÈÍѤ·¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢¤¹¤Ù¤Æ¤Î GIF ¥Õ¥¡¥¤¥ë¤òÊÌ¥µ¡¼¥Ð¤ÎƱÍͤÊ̾Á°¤Î JPEG
- ¥Õ¥¡¥¤¥ë¤Ë¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤ò»È¤¤¤Þ¤¹:
- </p>
-
- <div class="example"><p><code>
- RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectPermanent" id="RedirectPermanent">RedirectPermanent</a> <a name="redirectpermanent" id="redirectpermanent">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤¬°ã¤¦ URL ¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë³°Éô¤Ø¤Î±Êµ×Ū¤Ê
-¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RedirectPermanent <var>URL-path</var> <var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ë Redirect ¤¬±Êµ×Ū¤Ê¤â¤Î
- (¥¹¥Æ¡¼¥¿¥¹ 301) ¤Ç¤¢¤ë¤³¤È¤òÃΤ餻¤Þ¤¹¡£
- <code>Redirect premanent</code> ¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectTemp" id="RedirectTemp">RedirectTemp</a> <a name="redirecttemp" id="redirecttemp">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤¬°ã¤¦ URL ¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë³°Éô¤Ø¤Î°ì»þŪ¤Ê
-¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RedirectTemp <var>URL-path</var> <var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ë Redirect
- ¤¬°ì»þŪ¤Ê¤â¤Î¤Ç¤¢¤ë (¥¹¥Æ¡¼¥¿¥¹ 302) ¤³¤È¤òÃΤ餻¤Þ¤¹¡£
- <code>Redirect temp</code> ¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptAlias" id="ScriptAlias">ScriptAlias</a> <a name="scriptalias" id="scriptalias">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤إޥåפ·¡¢¥Þ¥Ã¥×Àè¤ò
-CGI ¥¹¥¯¥ê¥×¥È¤Ë»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p><code class="directive">ScriptAlias</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Âоݥǥ£¥ì¥¯¥È¥ê¤Ë
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤Î cgi-script
- ¥Ï¥ó¥É¥é¤Ç½èÍý¤µ¤ì¤ë CGI
- ¥¹¥¯¥ê¥×¥È¤¬¤¢¤ë¤³¤È¤ò¼¨¤¹°Ê³°¤Ï
- <code class="directive"><a href="#alias">Alias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÈƱ¤¸¿¶¤ëÉñ¤¤¤ò¤·¤Þ¤¹¡£
- URL ¤Î (% ¤¬Éü¹æ¤µ¤ì¤¿) ¥Ñ¥¹¤¬ <var>URL-path</var> ¤Ç»Ï¤Þ¤ë¤â¤Î¤Ï
- ¥í¡¼¥«¥ë¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î
- ¥Õ¥ë¥Ñ¥¹¤Ç¤¢¤ëÆóÈÖÌܤΰú¿ô¤Ë¥Þ¥Ã¥×¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ScriptAlias /cgi-bin/ /web/cgi-bin/
- </code></p></div>
-
- <p><code>http://myserver/cgi-bin/foo</code>
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¥µ¡¼¥Ð¤Ï¥¹¥¯¥ê¥×¥È
- <code>/web/cgi-bin/foo</code> ¤ò¼Â¹Ô¤·¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptAliasMatch" id="ScriptAliasMatch">ScriptAliasMatch</a> <a name="scriptaliasmatch" id="scriptaliasmatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>URL ¤òÀµµ¬É½¸½¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤إޥåפ·¡¢¥Þ¥Ã¥×Àè¤ò
-CGI ¥¹¥¯¥ê¥×¥È¤Ë»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_alias</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="directive"><a href="#scriptalias">ScriptAlias</a></code>
- ¤È¤Û¤È¤ó¤ÉƱ¤¸¤Ç¤¹¤¬¡¢´Êñ¤ÊÀèƬ¤«¤é¤Î¥Þ¥Ã¥Á¤ò¹Ô¤Ê¤¦¤Î¤Ç¤Ï¤Ê¤¯¡¢
- ɸ½àÀµµ¬É½¸½¤òÍøÍѤ·¤Þ¤¹¡£¤³¤³¤Ç»ØÄꤵ¤ì¤¿Àµµ¬É½¸½¤È URL-path
- ¤¬¹ç¤¦¤«¤É¤¦¤«¤òÄ´¤Ù¡¢¹ç¤¦¾ì¹ç¤Ï³ç¸Ì¤Ç³ç¤é¤ì¤¿¥Þ¥Ã¥Á¤ò
- Í¿¤¨¤é¤ì¤¿Ê¸»úÎó¤ÇÃÖ¤­´¹¤¨¡¢¤½¤ì¤ò¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ»ÈÍѤ·¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢É¸½à¤Î <code>/cgi-bin</code>
- ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤ò»È¤¤¤Þ¤¹:
- </p>
-
- <div class="example"><p><code>
- ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_alias.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_alias.html.ko.euc-kr b/docs/manual/mod/mod_alias.html.ko.euc-kr
deleted file mode 100644
index 799a46680b..0000000000
--- a/docs/manual/mod/mod_alias.html.ko.euc-kr
+++ /dev/null
@@ -1,349 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_alias - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_alias</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_alias.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐµéÀ» ¹®¼­ °èÃþ±¸Á¶¿¡ Æ÷ÇÔÇÏ°í,
- URL ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>alias_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_alias.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀÌ Á¦°øÇÏ´Â Áö½Ã¾îµéÀ» »ç¿ëÇÏ¿© ¼­¹ö°¡ ¿äûÀ»
- ¹ÞÀ»¶§ URLÀ» ¼öÁ¤Çϰųª Á¶ÀÛÇÒ ¼ö ÀÖ´Ù. <code class="directive"><a href="#alias">Alias</a></code>¿Í <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> Áö½Ã¾î´Â URLÀ»
- ÆÄÀϽýºÅÛ °æ·Î·Î ´ëÀÀÇÑ´Ù. ±×·¡¼­ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> ¾Æ·¡¿¡ ¾ø´Â ³»¿ëÀ»
- À¥À¸·Î ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù. ¶Ç, <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> Áö½Ã¾î´Â ÁöÁ¤ÇÑ
- µð·ºÅ丮¿¡ CGI ½ºÅ©¸³Æ®¹Û¿¡ ¾ø´Ù°í ¾Ë¸°´Ù.</p>
-
- <p><code class="directive"><a href="#redirect">Redirect</a></code> Áö½Ã¾î´Â
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ´Ù¸¥ URL·Î »õ·Î¿î ¿äûÀ» Çϵµ·Ï Áö½ÃÇÑ´Ù.
- ÀÚ¿øÀ» »õ·Î¿î Àå¼Ò·Î ¿Å±ä °æ¿ì ÀÚÁÖ »ç¿ëÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#alias">Alias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#aliasmatch">AliasMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirect</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirectmatch">RedirectMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirectpermanent">RedirectPermanent</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirecttemp">RedirectTemp</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptalias">ScriptAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptaliasmatch">ScriptAliasMatch</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#order">ó¸® ¼ø¼­</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code></li>
-<li><a href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">ó¸® ¼ø¼­</a></h2>
-
-<p>¼­·Î ´Ù¸¥ »ç¿ëÀå¼Ò¿¡¼­ Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ´Ù¸¥ Áö½Ã¾î¿Í
-°°ÀÌ Ç¥ÁØ <a href="../sections.html#mergin">°áÇÕ ¹æ¹ý</a>¿¡
-µû¶ó ó¸®ÇÑ´Ù. ±×·¯³ª °°Àº »ç¿ëÀå¼Ò¿¡ (¿¹¸¦ µé¾î, °°Àº <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¼½¼Ç¿¡)
-Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ¾Æ·¡ ¼ø¼­´ë·Î ó¸®ÇÑ´Ù.</p>
-
-<p>¸ÕÀú ¸ðµç Redirect¸¦ ó¸®ÇÑ ÈÄ Alias¸¦ ó¸®ÇÑ´Ù. ±×·¡¼­
-<code class="directive"><a href="#redirect">Redirect</a></code>³ª <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code>¿¡ ÇØ´çÇÏ´Â ¿äûÀº
-Àý´ë·Î AliasÇÏÁö ¾Ê´Â´Ù. ±×¸®°í Alias¿Í Redirect´Â ¼³Á¤ÆÄÀÏ¿¡¼­
-ù¹ø°·Î ³ª¿À´Â °ÍÀ» »ç¿ëÇÑ´Ù.</p>
-
-<p>±×·¡¼­ ¿©·¯ Áö½Ã¾î°¡ µ¿ÀÏÇÑ ÇÏÀ§°æ·Î¿¡ ÇØ´çÇÏ´Â °æ¿ì ¸ðµç
-Áö½Ã¾î¸¦ Àû¿ëÇϱâÀ§Çؼ­´Â °¡Àå »ó¼¼ÇÑ °æ·Î¸¦ ¸ÕÀú »ç¿ëÇØ¾ß ÇÑ´Ù.
-¿¹¸¦ µé¾î, ´ÙÀ½ ¼³Á¤Àº ÀǵµÇÑ´ë·Î µ¿ÀÛÇÑ´Ù:</p>
-
-<div class="example"><p><code>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</code></p></div>
-
-<p>±×·¯³ª À§ÀÇ µÎ Áö½Ã¾î ¼ø¼­¸¦ ¹Ù²Ù¸é <code>/foo/bar</code>
-<code class="directive"><a href="#alias">Alias</a></code> ÀÌÀü¿¡
-<code>/foo</code> <code class="directive"><a href="#alias">Alias</a></code>¸¦
-Àû¿ëÇϹǷΠÇ×»ó µÎ¹ø° Áö½Ã¾î¸¦ ¹«½ÃÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
-
- <p><code class="directive">Alias</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé ÆÄÀϽýºÅÛ¿¡¼­
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> ¹Û¿¡ ÀÖ´Â
- ¹®¼­µµ ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù. <var>url-path</var>·Î ½ÃÀÛÇÏ´Â
- (%·Î ÀÎÄÚµùµÈ) URLÀ» <var>directory-path</var>·Î ½ÃÀÛÇÏ´Â
- ÆÄÀÏ¿¡ ´ëÀÀÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Alias /image /ftp/pub/image
- </code></p></div>
-
- <p>http://myserver/image/foo.gif¸¦ ¿äûÇÏ¸é ¼­¹ö´Â
- /ftp/pub/image/foo.gif ÆÄÀÏÀ» ³Ñ°ÜÁØ´Ù.</p>
-
- <p><var>url-path</var> ³¡¿¡ /¸¦ Æ÷ÇÔÇϸé, URL ³¡¿¡ /¸¦
- »ç¿ëÇؾ߸¸ ¿µÇâÀÌ ÀÖÀ½À» ÁÖÀÇÇ϶ó. Áï, <code>Alias /icons/
- /usr/local/apache/icons/</code> ¼³Á¤Àº url <code>/icons</code>¿Í
- °ü°è°¡ ¾ø´Ù.</p>
-
- <p>´ëÀÀÀÇ <em>´ë»ó</em>À» Æ÷ÇÔÇÏ´Â ¿©·¯ <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼ÇÀÌ
- ÇÊ¿äÇÒÁöµµ ¸ð¸¥´Ù. ÀÌ Áö½Ã¾î´Â <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼ÇÀ» °Ë»çÇϱâ Àü¿¡
- ó¸®ÇϹǷÎ, ´ëÀÀÀÇ ´ë»ó¸¸ ¼½¼ÇÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. (±×·¯³ª
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- ¼½¼ÇÀº ÀÌ Áö½Ã¾î¸¦ ó¸®Çϱâ Àü¿¡ Çѹø¸¸ °Ë»çÇϹǷΠÁöÁ¤ÇÑ
- URL ÀÌÇÏ Àüü¿¡ ¿µÇâÀ» ÁØ´Ù.)</p>
-
- <p>ƯÈ÷ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¹Û¿¡ ÀÖ´Â µð·ºÅ丮·Î <code>Alias</code>¸¦ ¸¸µé¾ú´Ù¸é, Á÷Á¢
- ´ë»ó µð·ºÅ丮ÀÇ Á¢±ÙÀ» Çã¿ëÇØÁà¾ß ÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Alias /image /ftp/pub/image<br />
- &lt;Directory /ftp/pub/image&gt;<br />
- <span class="indent">
- Order allow,deny<br />
- Allow from all<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AliasMatch" id="AliasMatch">AliasMatch</a> <a name="aliasmatch" id="aliasmatch">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ÆÄÀϽýºÅÛ Àå¼Ò·Î
-´ëÀÀÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code class="directive"><a href="#alias">Alias</a></code>¿Í
- °°Áö¸¸, °£´ÜÈ÷ URLÀÇ ¾ÕºÎºÐ¸¸ ºñ±³ÇÏ´Â ´ë½Å Ç¥ÁØ Á¤±ÔÇ¥Çö½ÄÀ»
- »ç¿ëÇÑ´Ù. ÁöÁ¤ÇÑ Á¤±ÔÇ¥Çö½ÄÀ» URL °æ·Î¿Í ºñ±³ÇÏ¿© ¸Â´Ù¸é,
- ¼­¹ö´Â °ýÈ£·Î ¹­Àº ºÎºÐÀ» ´ëüÇÏ¿© ÆÄÀϸíÀ¸·Î »ç¿ëÇÑ´Ù.
- ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ <code>/icons</code> µð·ºÅ丮¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- AliasMatch ^/icons(.*) /usr/local/apache/icons$1
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Redirect" id="Redirect">Redirect</a> <a name="redirect" id="redirect">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p>Redirect Áö½Ã¾î´Â ÀÌÀü URLÀ» »õ·Î¿î URL·Î ´ëÀÀÇÑ´Ù.
- Ŭ¶óÀ̾ðÆ®¿¡°Ô »õ·Î¿î URLÀ» º¸³»°í, Ŭ¶óÀ̾ðÆ®´Â »õ·Î¿î
- ÁÖ¼Ò·Î ´Ù½Ã Çѹø Á¢¼ÓÇÑ´Ù. (%·Î ÀÎÄÚµùµÈ) <var>URL-path</var>·Î
- ½ÃÀÛÇÏ´Â ¿äûÀ» ¹ÞÀ¸¸é (%·Î ÀÎÄÚµùµÈ) <var>URL</var>·Î ½ÃÀÛÇÏ´Â
- »õ·Î¿î URL·Î ¸®´ÙÀÌ·º¼Ç ¿À·ù¸¦ º¸³½´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Redirect /service http://foo2.bar.com/service
- </code></p></div>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ http://myserver/service/foo.txt¸¦ ¿äûÇϸé
- ´ë½Å http://foo2.bar.com/service/foo.txt¿¡ Á¢±ÙÇ϶ó´Â ÀÀ´äÀ»
- ¹Þ´Â´Ù.</p>
-
-<div class="note"><h3>ÁÖÀÇ</h3> <p>Redirect Áö½Ã¾î´Â ¼³Á¤ÆÄÀÏ¿¡¼­
-³ª¿À´Â ¼ø¼­¿Í °ü°è¾øÀÌ Alias¿Í ScriptAlias Áö½Ã¾îº¸´Ù ¿ì¼±¼øÀ§°¡
-³ô´Ù. ¶Ç, .htaccess ÆÄÀÏÀ̳ª <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼Ç¿¡¼­ »ç¿ëÇÏ´õ¶óµµ
-<var>URL-path</var>¿¡´Â »ó´ë°æ·Î°¡ ¾Æ´Ï¶ó ¹Ýµå½Ã ¿ÏÀüÇÑ URLÀ»
-»ç¿ëÇØ¾ß ÇÑ´Ù.</p></div>
-
- <p><var>status</var> ¾Æ±Ô¸ÕÆ®¸¦ ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é, "ÀÓ½Ã
- (temporary)" (HTTP »óÅ 302) ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù. Áï,
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÚ¿øÀ» Àӽ÷Π¿Å°å´Ù°í ¾Ë¸°´Ù. <var>status</var>
- ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ HTTP »óÅÂÄڵ带 ¹ÝȯÇÒ ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt>permanent</dt>
-
- <dd>ÀÚ¿øÀ» ¿ÏÀüÈ÷ ¿Å°åÀ½À» ¶æÇÏ´Â ¿µ±¸ ¸®´ÙÀÌ·º¼Ç »óŸ¦
- (301) ¹ÝȯÇÑ´Ù.</dd>
-
- <dt>temp</dt>
-
- <dd>Àӽà ¸®´ÙÀÌ·º¼Ç »óŸ¦ (302) ¹ÝȯÇÑ´Ù. ±âº»°ªÀÌ´Ù.</dd>
-
- <dt>seeother</dt>
-
- <dd>ÀÚ¿øÀÌ ±³Ã¼µÇ¾úÀ½À» ¶æÇÏ´Â "ÂüÁ¶ (See Other)" »óŸ¦
- (303) ¹ÝȯÇÑ´Ù.</dd>
-
- <dt>gone</dt>
-
- <dd>ÀÚ¿øÀÌ ¿µ±¸È÷ »èÁ¦µÇ¾úÀ½À» ¶æÇÏ´Â "¼Ò¸ê (Gone)" »óŸ¦
- (410) ¹ÝȯÇÑ´Ù. ÀÌ »óŸ¦ »ç¿ëÇϸé <var>URL</var> ¾Æ±Ô¸ÕÆ®¸¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
- </dl>
-
- <p><var>status</var>¿¡ ¼ýÀÚ »óÅÂÄڵ带 »ç¿ëÇÏ¿© ´Ù¸¥ »óÅÂÄڵ嵵
- ¹ÝȯÇÒ ¼ö ÀÖ´Ù. »óÅ°¡ 300°ú 399 »çÀ̶ó¸é <var>URL</var>
- ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇØ¾ß ÇÏ°í, ¾Æ´Ï¶ó¸é »ý·«ÇØ¾ß ÇÑ´Ù. ´Ü, ¾ÆÆÄÄ¡
- Äڵ忡 »óÅ°¡ Á¤ÀǵÇÀÖ¾î¾ß ÇÑ´Ù (http_protocol.cÀÇ
- <code>send_error_response</code> ÇÔ¼ö Âü°í).</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Redirect permanent /one http://example.com/two<br />
- Redirect 303 /three http://example.com/other
- </code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectMatch" id="RedirectMatch">RedirectMatch</a> <a name="redirectmatch" id="redirectmatch">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÇöÀç URLÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ¸é ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
-º¸³½´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code class="directive"><a href="#redirect">Redirect</a></code>¿Í °°Áö¸¸, °£´ÜÈ÷
- URLÀÇ ¾ÕºÎºÐ¸¸ ºñ±³ÇÏ´Â ´ë½Å Ç¥ÁØ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÑ´Ù.
- ÁöÁ¤ÇÑ Á¤±ÔÇ¥Çö½ÄÀ» URL °æ·Î¿Í ºñ±³ÇÏ¿© ¸Â´Ù¸é, ¼­¹ö´Â °ýÈ£·Î
- ¹­Àº ºÎºÐÀ» ´ëüÇÏ¿© ÆÄÀϸíÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½Àº
- ¸ðµç GIF ÆÄÀÏ ¿äû¿¡ ´ëÇØ ´Ù¸¥ ¼­¹öÀÇ ºñ½ÁÇÑ À̸§À» °¡Áø
- JPEG ÆÄÀÏ·Î ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù:</p>
-
- <div class="example"><p><code>
- RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectPermanent" id="RedirectPermanent">RedirectPermanent</a> <a name="redirectpermanent" id="redirectpermanent">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-¿µ±¸ ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>RedirectPermanent <var>URL-path</var> <var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀÌ ¿µ±¸ÀûÀÓÀ» (»óÅÂ
- 301) ¾Ë¸°´Ù. <code>Redirect permanent</code>¿Í Á¤È®È÷ °°´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RedirectTemp" id="RedirectTemp">RedirectTemp</a> <a name="redirecttemp" id="redirecttemp">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-Àӽà ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>RedirectTemp <var>URL-path</var> <var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀÌ ÀÓ½ÃÀûÀÓÀ» (»óÅÂ
- 302) ¾Ë¸°´Ù. <code>Redirect temp</code>¿Í Á¤È®È÷ °°´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptAlias" id="ScriptAlias">ScriptAlias</a> <a name="scriptalias" id="scriptalias">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÏ°í ´ë»óÀÌ CGI
-½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p><code class="directive">ScriptAlias</code> Áö½Ã¾î´Â <code class="directive"><a href="#alias">Alias</a></code> Áö½Ã¾î¿Í ºñ½ÁÇÏÁö¸¸,
- Ãß°¡·Î ´ë»ó µð·ºÅ丮¿¡ <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>ÀÇ cgi-script
- Çڵ鷯°¡ ó¸®ÇÒ CGI ½ºÅ©¸³Æ®°¡ ÀÖ´Ù°í ¾Ë¸°´Ù.
- <var>URL-path</var>·Î ½ÃÀÛÇÏ´Â (%·Î ÀÎÄÚµùµÈ) URLÀ» ÆÄÀϽýºÅÛÀÇ
- Àý´ë°æ·ÎÀÎ µÎ¹ø° ¾Æ±Ô¸ÕÆ®·Î ½ÃÀÛÇÏ´Â ½ºÅ©¸³Æ®¿¡ ´ëÀÀÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- ScriptAlias /cgi-bin/ /web/cgi-bin/
- </code></p></div>
-
- <p><code>http://myserver/cgi-bin/foo</code>¸¦ ¿äûÇÏ¸é ¼­¹ö´Â
- <code>/web/cgi-bin/foo</code> ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptAliasMatch" id="ScriptAliasMatch">ScriptAliasMatch</a> <a name="scriptaliasmatch" id="scriptaliasmatch">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î
-´ëÀÀÇÏ°í ´ë»óÀÌ CGI ½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_alias</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code class="directive"><a href="#scriptalias">ScriptAlias</a></code>¿Í °°Áö¸¸, °£´ÜÈ÷
- URLÀÇ ¾ÕºÎºÐ¸¸ ºñ±³ÇÏ´Â ´ë½Å Ç¥ÁØ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÑ´Ù.
- ÁöÁ¤ÇÑ Á¤±ÔÇ¥Çö½ÄÀ» URL °æ·Î¿Í ºñ±³ÇÏ¿© ¸Â´Ù¸é, ¼­¹ö´Â °ýÈ£·Î
- ¹­Àº ºÎºÐÀ» ´ëüÇÏ¿© ÆÄÀϸíÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú
- °°ÀÌ Ç¥ÁØÀûÀÎ <code>/cgi-bin</code>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_alias.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_alias.xml b/docs/manual/mod/mod_alias.xml
deleted file mode 100644
index a68df67552..0000000000
--- a/docs/manual/mod/mod_alias.xml
+++ /dev/null
@@ -1,357 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.18 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_alias.xml.meta">
-
-<name>mod_alias</name>
-<description>Provides for mapping different parts of the host
- filesystem in the document tree and for URL redirection</description>
-<status>Base</status>
-<sourcefile>mod_alias.c</sourcefile>
-<identifier>alias_module</identifier>
-
-<summary>
- <p>The directives contained in this module allow for manipulation
- and control of URLs as requests arrive at the server. The
- <directive module="mod_alias">Alias</directive> and <directive
- module="mod_alias">ScriptAlias</directive> directives are used to
- map between URLs and filesystem paths. This allows for content
- which is not directly under the <directive
- module="core">DocumentRoot</directive> served as part of the web
- document tree. The <directive
- module="mod_alias">ScriptAlias</directive> directive has the
- additional effect of marking the target directory as containing
- only CGI scripts.</p>
-
- <p>The <directive module="mod_alias">Redirect</directive>
- directives are used to instruct clients to make a new request with
- a different URL. They are often used when a resource has moved to
- a new location.</p>
-</summary>
-
-<seealso><module>mod_rewrite</module></seealso> <seealso><a
-href="../urlmapping.html">Mapping URLs to the filesystem</a></seealso>
-
-<section id="order"><title>Order of Processing</title>
-
-<p>Aliases and Redirects occuring in different contexts are processed
-like other directives according to standard <a
-href="../sections.html#mergin">merging rules</a>. But when multiple
-Aliases or Redirects occur in the same context (for example, in the
-same <directive type="section" module="core">VirtualHost</directive>
-section) they are processed in a particular order.</p>
-
-<p>First, all Redirects are processed before Aliases are processed,
-and therefore a request that matches a <directive
-module="mod_alias">Redirect</directive> or <directive
-module="mod_alias">RedirectMatch</directive> will never have Aliases
-applied. Second, the Aliases and Redirects are processed in the order
-they appear in the configuration files, with the first match taking
-precedence.</p>
-
-<p>For this reason, when two or more of these directives apply to the
-same sub-path, you must list the most specific path first in order for
-all the directives to have an effect. For example, the following
-configuration will work as expected:</p>
-
-<example>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</example>
-
-<p>But if the above two directives were reversed in order, the
-<code>/foo</code> <directive module="mod_alias">Alias</directive>
-would always match before the <code>/foo/bar</code> <directive
-module="mod_alias">Alias</directive>, so the latter directive would be
-ignored.</p>
-
-</section>
-
-<directivesynopsis>
-<name>Alias</name>
-<description>Maps URLs to filesystem locations</description>
-<syntax>Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-
- <p>The <directive>Alias</directive> directive allows documents to
- be stored in the local filesystem other than under the
- <directive module="core">DocumentRoot</directive>. URLs with a
- (%-decoded) path beginning with <var>url-path</var> will be mapped
- to local files beginning with <var>directory-path</var>.</p>
-
- <example><title>Example:</title>
- Alias /image /ftp/pub/image
- </example>
-
- <p>A request for http://myserver/image/foo.gif would cause the
- server to return the file /ftp/pub/image/foo.gif.</p>
-
- <p>Note that if you include a trailing / on the
- <var>url-path</var> then the server will require a trailing / in
- order to expand the alias. That is, if you use <code>Alias
- /icons/ /usr/local/apache/icons/</code> then the url
- <code>/icons</code> will not be aliased.</p>
-
- <p>Note that you may need to specify additional <directive
- type="section" module="core">Directory</directive> sections which
- cover the <em>destination</em> of aliases. Aliasing occurs before
- <directive type="section" module="core">Directory</directive> sections
- are checked, so only the destination of aliases are affected.
- (Note however <directive type="section" module="core">Location</directive>
- sections are run through once before aliases are performed, so
- they will apply.)</p>
-
- <p>In particular, if you are creating an <code>Alias</code> to a
- directory outside of your <directive
- module="core">DocumentRoot</directive>, you may need to explicitly
- permit access to the target directory.</p>
-
- <example><title>Example:</title>
- Alias /image /ftp/pub/image<br />
- &lt;Directory /ftp/pub/image&gt;<br />
- <indent>
- Order allow,deny<br />
- Allow from all<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AliasMatch</name>
-<description>Maps URLs to filesystem locations using regular
-expressions</description>
-<syntax>AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive is equivalent to <directive
- module="mod_alias">Alias</directive>, but makes use of standard
- regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the URL-path, and
- if it matches, the server will substitute any parenthesized
- matches into the given string and use it as a filename. For
- example, to activate the <code>/icons</code> directory, one might
- use:</p>
-
- <example>
- AliasMatch ^/icons(.*) /usr/local/apache/icons$1
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Redirect</name>
-<description>Sends an external redirect asking the client to fetch
-a different URL</description>
-<syntax>Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The Redirect directive maps an old URL into a new one. The
- new URL is returned to the client which attempts to fetch it
- again with the new address. <var>URL-path</var> a (%-decoded)
- path; any requests for documents beginning with this path will
- be returned a redirect error to a new (%-encoded) URL beginning
- with <var>URL</var>.</p>
-
- <example><title>Example:</title>
- Redirect /service http://foo2.bar.com/service
- </example>
-
- <p>If the client requests http://myserver/service/foo.txt, it
- will be told to access http://foo2.bar.com/service/foo.txt
- instead.</p>
-
-<note><title>Note</title> <p>Redirect directives take precedence over
-Alias and ScriptAlias directives, irrespective of their ordering in
-the configuration file. Also, <var>URL-path</var> must be a fully
-qualified URL, not a relative path, even when used with .htaccess files or
-inside of <directive type="section" module="core">Directory</directive>
-sections.</p></note>
-
- <p>If no <var>status</var> argument is given, the redirect will
- be "temporary" (HTTP status 302). This indicates to the client
- that the resource has moved temporarily. The <var>status</var>
- argument can be used to return other HTTP status codes:</p>
-
- <dl>
- <dt>permanent</dt>
-
- <dd>Returns a permanent redirect status (301) indicating that
- the resource has moved permanently.</dd>
-
- <dt>temp</dt>
-
- <dd>Returns a temporary redirect status (302). This is the
- default.</dd>
-
- <dt>seeother</dt>
-
- <dd>Returns a "See Other" status (303) indicating that the
- resource has been replaced.</dd>
-
- <dt>gone</dt>
-
- <dd>Returns a "Gone" status (410) indicating that the
- resource has been permanently removed. When this status is
- used the <var>URL</var> argument should be omitted.</dd>
- </dl>
-
- <p>Other status codes can be returned by giving the numeric
- status code as the value of <var>status</var>. If the status is
- between 300 and 399, the <var>URL</var> argument must be present,
- otherwise it must be omitted. Note that the status must be
- known to the Apache code (see the function
- <code>send_error_response</code> in http_protocol.c).</p>
-
- <example><title>Example:</title>
- Redirect permanent /one http://example.com/two<br />
- Redirect 303 /three http://example.com/other
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectMatch</name>
-<description>Sends an external redirect based on a regular expression match
-of the current URL</description>
-<syntax>RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive is equivalent to <directive
- module="mod_alias">Redirect</directive>, but makes use of standard
- regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the URL-path, and
- if it matches, the server will substitute any parenthesized
- matches into the given string and use it as a filename. For
- example, to redirect all GIF files to like-named JPEG files on
- another server, one might use:</p>
-
- <example>
- RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectTemp</name>
-<description>Sends an external temporary redirect asking the client to fetch
-a different URL</description>
-<syntax>RedirectTemp <var>URL-path</var> <var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive makes the client know that the Redirect is
- only temporary (status 302). Exactly equivalent to
- <code>Redirect temp</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectPermanent</name>
-<description>Sends an external permanent redirect asking the client to fetch
-a different URL</description>
-<syntax>RedirectPermanent <var>URL-path</var> <var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive makes the client know that the Redirect is
- permanent (status 301). Exactly equivalent to <code>Redirect
- permanent</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAlias</name>
-<description>Maps a URL to a filesystem location and designates the
-target as a CGI script</description>
-<syntax>ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ScriptAlias</directive> directive has the same
- behavior as the <directive module="mod_alias">Alias</directive>
- directive, except that in addition it marks the target directory
- as containing CGI scripts that will be processed by <module
- >mod_cgi</module>'s cgi-script handler. URLs with a
- (%-decoded) path beginning with <var>URL-path</var> will be mapped
- to scripts beginning with the second argument which is a full
- pathname in the local filesystem.</p>
-
- <example><title>Example:</title>
- ScriptAlias /cgi-bin/ /web/cgi-bin/
- </example>
-
- <p>A request for <code>http://myserver/cgi-bin/foo</code> would cause the
- server to run the script <code>/web/cgi-bin/foo</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAliasMatch</name>
-<description>Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</description>
-<syntax>ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive is equivalent to <directive module="mod_alias"
- >ScriptAlias</directive>, but makes use of standard
- regular expressions, instead of simple prefix matching. The
- supplied regular expression is matched against the URL-path,
- and if it matches, the server will substitute any parenthesized
- matches into the given string and use it as a filename. For
- example, to activate the standard <code>/cgi-bin</code>, one
- might use:</p>
-
- <example>
- ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_alias.xml.ja b/docs/manual/mod/mod_alias.xml.ja
deleted file mode 100644
index 97365faee8..0000000000
--- a/docs/manual/mod/mod_alias.xml.ja
+++ /dev/null
@@ -1,372 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.18 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_alias.xml.meta">
-
-<name>mod_alias</name>
-<description>$B%[%9%H%U%!%$%k%7%9%F%`>e$N$$$m$$$m$J0c$&>l=j$r(B
- $B%I%-%e%a%s%H%D%j!<$K%^%C%W$9$k5!G=$H!"(B
- URL $B$N%j%@%$%l%/%H$r9T$J$&5!G=$rDs6!$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_alias.c</sourcefile>
-<identifier>alias_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$N%G%#%l%/%F%#%V$O%5!<%P$K%j%/%(%9%H$,E~Ce$7$?$H$-$K(B
- URL $B$NA`:n$d@)8f$r$9$k$3$H$r2DG=$K$7$^$9!#(B<directive
- module="mod_alias">Alias</directive>
- $B%G%#%l%/%F%#%V$H(B <directive module="mod_alias">ScriptAlias</directive>
- $B%G%#%l%/%F%#%V$O(B
- URL $B$H%U%!%$%k%7%9%F%`$N%Q%9$r%^%C%W$9$k$?$a$K;HMQ$5$l$^$9!#$3$l$O(B
- <directive module="core">DocumentRoot</directive>
- $B$N2<$K$J$$%I%-%e%a%s%H$r%&%'%V$N%I%-%e%a%s%H%D%j!<$N0lIt$H$7$F(B
- $BAw$i$l$k$h$&$K$7$^$9!#(B<directive module="mod_alias">ScriptAlias</directive>
- $B%G%#%l%/%F%#%V$K$O%^%C%W@h$N%G%#%l%/%H%j$,(B CGI
- $B%9%/%j%W%H$N$_$G$"$k$3$H$r<($9$H$$$&DI2C$N8z2L$,$"$j$^$9!#(B
- </p>
-
- <p><directive module="mod_alias">Redirect</directive> $B%G%#%l%/%F%#%V$O(B
- $B%/%i%$%"%s%H$K0c$C$?(B
- URL $B$K?7$7$$%j%/%(%9%H$rAw$k$h$&$K;X<($7$^$9!#$3$l$O!"(B
- $B%j%=!<%9$,?7$7$$>l=j$K0\F0$7$?$H$-$K$h$/;HMQ$5$l$^$9!#(B</p>
-</summary>
-
-<seealso><module>mod_rewrite</module></seealso> <seealso><a
-href="../urlmapping.html">URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%T%s%0(B</a></seealso>
-
-<section id="order"><title>$B=hM}$N=gHV(B</title>
-
-<p>$BMM!9$J%3%s%F%-%9%HCf$G$N(B Alias $B$d(B Redirect $B$OB>$N%G%#%l%/%F%#%V$H(B
-$BF1$8$h$&$KI8=`$N(B <a href="../sections.html#mergin">$B%^!<%85,B'(B</a> $B$K(B
-$B=>$C$F=hM}$5$l$^$9!#$?$@$7!"(B($BNc$($P(B <directive type="section" module="core"
->VirtualHost</directive> $B%;%/%7%g%s$NCf$N$h$&$K(B) $BJ#?t$N(B Alias $B$d(B Redirect $B$,(B
-$BF1$8%3%s%F%-%9%HCf$K8=$l$?>l9g$O7h$^$C$?=gHV$G=hM}$5$l$^$9!#(B</p>
-
-<p>$B$^$:!"(BAlias $B$NA0$K$9$Y$F$N(B Redirect $B$,=hM}$5$l$^$9!#$G$9$+$i!"(B<directive
-module="mod_alias">Redirect</directive> $B$+(B <directive
-module="mod_alias">RedirectMatch</directive> $B$K%^%C%A$9$k%j%/%(%9%H$K$O(B
-Alias $B$O7h$7$FE,MQ$5$l$^$;$s!#<!$K!"(BAlias $B$H(B Redirect $B$,@_Dj%U%!%$%kCf$N(B
-$B=gHV$KE,MQ$5$l!":G=i$K%^%C%A$7$?$b$N$,M%@h$5$l$^$9!#(B</p>
-
-<p>$B$G$9$+$i!"Fs$D0J>e$N%G%#%l%/%F%#%V$,F1$8%Q%9$KE,MQ$5$l$k$H$-$O!"(B
-$B$9$Y$F$N%G%#%l%/%F%#%V$N8z2L$rF@$k$?$a$K$O$h$j>\$7$$%Q%9$r@h$K=q$/(B
-$BI,MW$,$"$j$^$9!#Nc$($P!"<!$N@_Dj$O4|BTDL$j$NF0:n$r$7$^$9(B:</p>
-
-<example>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</example>
-
-<p>$B$7$+$7!">e5-$NFs$D$N%G%#%l%/%F%#%V$N=gHV$,5U$K$J$k$H!"(B
-<code>/foo</code> <directive module="mod_alias">Alias</directive> $B$,(B
-$B>o$K(B <code>/foo/bar</code> <directive
-module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
-$B7h$7$FE,MQ$5$l$k$3$H$O$"$j$^$;$s!#(B</p>
-
-</section>
-
-<directivesynopsis>
-<name>Alias</name>
-<description>URL $B$r%U%!%$%k%7%9%F%`$N0LCV$K%^%C%W$9$k(B</description>
-<syntax>Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>Alias</directive> $B%G%#%l%/%F%#%V$O%I%-%e%a%s%H$r(B
- $B%m!<%+%k%U%!%$%k%7%9%F%`$N(B
- <directive module="core">DocumentRoot</directive>
- $B0J30$N>l=j$KJ]4I$9$k$3$H$r2DG=$K$7$^$9!#(B
- URL $B$N(B (% $B$,I|9f$5$l$?(B) $B%Q%9$,(B <var>url-path</var> $B$G;O$^$k$b$N$O(B
- <var>directory-filename</var>
- $B$G;O$^$k%m!<%+%k%U%!%$%k$K%^%C%W$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- Alias /image /ftp/pub/image
- </example>
-
- <p>http://myserver/image/foo.gif $B$X$N%j%/%(%9%H$KBP$7$F!"%5!<%P$O(B
- $B%U%!%$%k(B /ftp/pub/image/foo.gif $B$rJV$7$^$9!#(B</p>
-
- <p>$B$b$7(B <var>url-path</var> $B$N:G8e$K(B /
- $B$r=q$$$?$J$i!"%5!<%P$,%(%$%j%"%9$rE83+$9$k$?$a$K$O!":G8e$N(B /
- $B$,I,MW$K$J$k$3$H$KCm0U$7$F$/$@$5$$!#$9$J$o$A!"(B<code>Alias /icons/
- /usr/local/apache/icons/</code> $B$H$$$&$b$N$r;HMQ$7$F$$$k>l9g$O!"(B
- <code>/icons</code> $B$H$$$&(B url $B$O%(%$%j%"%9$5$l$^$;$s!#(B</p>
-
- <p>$B%(%$%j%"%9$N(B<em>$B9T$-@h(B</em>$B$r4^$s$G$$$k(B <directive
- type="section" module="core">Directory</directive>
- $B%;%/%7%g%s$rDI2C$9$kI,MW$,$"$k$+$b$7$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B%(%$%j%"%9$NE83+$O(B <directive
- type="section" module="core">Directory</directive>
- $B%;%/%7%g%s$rD4$Y$kA0$K9T$J$o$l$^$9$N$G!"(B
- $B%(%$%j%"%9$N9T$-@h$N(B <directive
- type="section" module="core">Directory</directive> $B%;%/%7%g%s$N$_(B
- $B8z2L$,$"$j$^$9!#(B
- ($B$7$+$7!"(B<directive
- type="section" module="core">Location</directive>
- $B%;%/%7%g%s$O%(%$%j%"%9$,=hM}$5$l$kA0$K<B9T$5$l$^$9$N$G!"(B
- $B$3$A$i$OE,MQ$5$l$^$9!#(B)</p>
-
- <p>$BFC$K!"(B<code>Alias</code> $B$r(B
- <directive module="core">DocumentRoot</directive>
- $B%G%#%l%/%H%j$N30B&$KG[CV$7$?>l9g$O!"9T$-@h$N%G%#%l%/%H%j$KBP$9$k(B
- $B%"%/%;%98"8B$rL@<(E*$K@)8B$7$J$1$l$P$J$i$J$$$G$7$g$&!#(B</p>
-
- <example><title>$BNc(B</title>
- Alias /image /ftp/pub/image<br />
- &lt;Directory /ftp/pub/image&gt;<br />
- <indent>
- Order allow,deny<br />
- Allow from all<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AliasMatch</name>
-<description>$B@55,I=8=$r;H$C$F(B URL $B$r%U%!%$%k%7%9%F%`$N0LCV$K%^%C%W$9$k(B</description>
-<syntax>AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <directive module="mod_alias">Alias</directive>
- $B$H$[$H$s$IF1$8$G$9$,!"4JC1$J@hF,$+$i$N%^%C%A$r9T$J$&$N$G$O$J$/!"(B
- $BI8=`@55,I=8=$rMxMQ$7$^$9!#$3$3$G;XDj$5$l$?@55,I=8=$H(B URL $B$N%Q%9(B
- $B$,9g$&$+$I$&$+$rD4$Y!"9g$&>l9g$O3g8L$G3g$i$l$?%^%C%A$r(B
- $BM?$($i$l$?J8;zNs$GCV$-49$(!"$=$l$r%U%!%$%kL>$H$7$F;HMQ$7$^$9!#$?$H$($P!"(B
- <code>/icons</code> $B%G%#%l%/%H%j$r;H$&(B
- $B$?$a$K$O0J2<$N$h$&$J$b$N$,;HMQ$G$-$^$9(B:</p>
-
- <example>
- AliasMatch ^/icons(.*) /usr/local/apache/icons$1
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Redirect</name>
-<description>$B%/%i%$%"%s%H$,0c$&(B URL $B$r<hF@$9$k$h$&$K30It$X$N%j%@%$%l%/%H$r(B
-$BAw$k(B</description>
-<syntax>Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Redirect $B%G%#%l%/%F%#%V$O8E$$(B URL $B$r?7$7$$$b$N$X%^%C%W$7$^$9!#(B
- $B?7$7$$(B URL $B$,%/%i%$%"%s%H$KJV$5$l$^$9!#$=$7$F!"(B
- $B%/%i%$%"%s%H$O?7$7$$%"%I%l%9$r$b$&0l2s<hF@$7$h$&$H$7$^$9!#(B
- <var>URL-path</var> (% $B$,I|9f$5$l$?(B) $B%Q%9$G;O$^$k%I%-%e%a%s%H$X$N(B
- $B$9$Y$F$N%j%/%(%9%H$O(B <var>URL</var> $B$G;O$^$k?7$7$$(B
- (% $B$,Id9f2=$5$l$?(B) URL $B$X$N%j%@%$%l%/%H%(%i!<$,JV$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- Redirect /service http://foo2.bar.com/service
- </example>
-
- <p>$B%/%i%$%"%s%H$O(B http://myserver/service/foo.txt
- $B$X$N%j%/%(%9%H$r9T$J$&$H!"Be$o$j$K(B http://foo2.bar.com/service/foo.txt
- $B$r%"%/%;%9$9$k$h$&$K9p$2$i$l$^$9!#(B</p>
-
-<note><title>$BCm0U(B</title><p>$B@_Dj%U%!%$%kCf$N=gHV$K4X$o$i$:!"(B
-Redirect $B7O$N%G%#%l%/%F%#%V$O(B Alias
-$B%G%#%l%/%F%#%V$H(B ScriptAlias $B%G%#%l%/%F%#%V$h$j$bM%@h$5$l$^$9!#(B
-$B$^$?!"(B.htaccess $B%U%!%$%k$d(B <directive
-type="section" module="core">Directory</directive>
-$B%;%/%7%g%s$NCf$G;H$o$l$F$$$?$H$7$F$b!"(B<var>URL-path</var>
-$B$OAjBP%Q%9$G$O$J$/!"40A4$J(B URL $B$G$J$1$l$P$J$j$^$;$s!#(B</p></note>
-
- <p>$B$b$7(B <var>status</var> $B0z?t$,M?$($i$l$F$$$J$1$l$P!"%j%@%$%l%/%H$O(B
- "temporary" (HTTP $B%9%F!<%?%9(B 302) $B$K$J$j$^$9!#$3$l$O%/%i%$%"%s%H$K(B
- $B%j%=!<%9$,0l;~E*$K0\F0$7$?$H$$$&$3$H$r<($7$^$9!#(B<var>Status</var>
- $B0z?t$O(B $BB>$N(B HTTP $B$N%9%F!<%?%9%3!<%I$rJV$9$?$a$K;HMQ$9$k$3$H$,$G$-$^$9(B:</p>
-
- <dl>
- <dt>permanent</dt>
-
- <dd>$B1J5W$K%j%@%$%l%/%H$r$9$k%9%F!<%?%9(B (301) $B$rJV$7$^$9!#(B
- $B$3$l$O%j%=!<%9$,1J5W$K0\F0$7$?$H$$$&$3$H$r0UL#$7$^$9!#(B</dd>
-
- <dt>temp</dt>
-
- <dd>$B0l;~E*$J%j%@%$%l%/%H%9%F!<%?%9(B (302)
- $B$rJV$7$^$9!#$3$l$,%G%U%)%k%H$G$9!#(B</dd>
-
- <dt>seeother</dt>
-
- <dd>"See Other" $B%9%F!<%?%9(B (303) $B$rJV$7$^$9!#(B
- $B$3$l$O%j%=!<%9$,B>$N$b$N$GCV$-49$($i$l$?$3$H$r0UL#$7$^$9!#(B</dd>
-
- <dt>gone</dt>
-
- <dd>"Gone" $B%9%F!<%?%9(B (410) $B$rJV$7$^$9!#$3$l$O%j%=!<%9$,1J5W$K(B
- $B:o=|$5$l$?$3$H$r0UL#$7$^$9!#$3$N%9%F!<%?%9$,;HMQ$5$l$?>l9g!"(B
- <var>url</var> $B0z?t$O>JN,$5$l$J$1$l$P$J$j$^$;$s!#(B</dd>
- </dl>
-
- <p><var>Status</var> $B$NCM$K%9%F!<%?%9%3!<%I$r?tCM$GM?$($k$3$H$G(B
- $BB>$N%9%F!<%?%9%3!<%I$bJV$9$3$H$,$G$-$^$9!#%9%F!<%?%9$,(B 300 $B$H(B 399
- $B$N4V$K$"$k>l9g!"(B<var>url</var> $B0z?t$OB8:_$7$F$$$J$1$l$P$$$1$^$;$s!#(B
- $B$=$NB>$N>l9g$O>JN,$5$l$F$$$J$1$l$P$J$j$^$;$s!#$?$@$7!"(B
- $B%9%F!<%?%9$O(B Apache $B$N%3!<%I$,CN$C$F$$$k$b$N$G$"$kI,MW$,$"$j$^$9(B
- (http_protocol.c $B$N4X?t(B <code>send_error_response</code>
- $B$r8+$F$/$@$5$$(B)$B!#(B</p>
- <p>$BNc(B:</p>
-
- <example><title>$BNc(B</title>
- Redirect permanent /one http://example.com/two<br />
- Redirect 303 /three http://example.com/other
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectMatch</name>
-<description>$B8=:_$N(B URL $B$X$N@55,I=8=$N%^%C%A$K$h$j(B
-$B30It$X$N%j%@%$%l%/%H$rAw$k(B</description>
-<syntax>RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <directive module="mod_alias">Redirect</directive>
- $B$H$[$H$s$IF1$8$G$9$,!"4JC1$J@hF,$+$i$N%^%C%A$r9T$J$&$N$G$O$J$/!"(B
- $BI8=`@55,I=8=$rMxMQ$7$^$9!#$3$3$G;XDj$5$l$?@55,I=8=$H(B URL-path
- $B$,9g$&$+$I$&$+$rD4$Y!"9g$&>l9g$O3g8L$G3g$i$l$?%^%C%A$r(B
- $BM?$($i$l$?J8;zNs$GCV$-49$(!"$=$l$r%U%!%$%kL>$H$7$F;HMQ$7$^$9!#(B
- $B$?$H$($P!"$9$Y$F$N(B GIF $B%U%!%$%k$rJL%5!<%P$NF1MM$JL>A0$N(B JPEG
- $B%U%!%$%k$K%j%@%$%l%/%H$9$k$K$O!"0J2<$N$h$&$J$b$N$r;H$$$^$9(B:
- </p>
-
- <example>
- RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectTemp</name>
-<description>$B%/%i%$%"%s%H$,0c$&(B URL $B$r<hF@$9$k$h$&$K30It$X$N0l;~E*$J(B
-$B%j%@%$%l%/%H$rAw$k(B</description>
-<syntax>RedirectTemp <var>URL-path</var> <var>URL</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$K(B Redirect
- $B$,0l;~E*$J$b$N$G$"$k(B ($B%9%F!<%?%9(B 302) $B$3$H$rCN$i$;$^$9!#(B
- <code>Redirect temp</code> $B$H$^$C$?$/F1$8$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectPermanent</name>
-<description>$B%/%i%$%"%s%H$,0c$&(B URL $B$r<hF@$9$k$h$&$K30It$X$N1J5WE*$J(B
-$B%j%@%$%l%/%H$rAw$k(B</description>
-<syntax>RedirectPermanent <var>URL-path</var> <var>URL</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$K(B Redirect $B$,1J5WE*$J$b$N(B
- ($B%9%F!<%?%9(B 301) $B$G$"$k$3$H$rCN$i$;$^$9!#(B
- <code>Redirect premanent</code> $B$H$^$C$?$/F1$8$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAlias</name>
-<description>URL $B$r%U%!%$%k%7%9%F%`$N0LCV$X%^%C%W$7!"%^%C%W@h$r(B
-CGI $B%9%/%j%W%H$K;XDj(B</description>
-<syntax>ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>ScriptAlias</directive> $B%G%#%l%/%F%#%V$O!"BP>]%G%#%l%/%H%j$K(B
- <module>mod_cgi</module> $B$N(B cgi-script
- $B%O%s%I%i$G=hM}$5$l$k(B CGI
- $B%9%/%j%W%H$,$"$k$3$H$r<($90J30$O(B
- <directive module="mod_alias">Alias</directive>
- $B%G%#%l%/%F%#%V$HF1$8?6$kIq$$$r$7$^$9!#(B
- URL $B$N(B (% $B$,I|9f$5$l$?(B) $B%Q%9$,(B <var>URL-path</var> $B$G;O$^$k$b$N$O(B
- $B%m!<%+%k$N%U%!%$%k%7%9%F%`$N(B
- $B%U%k%Q%9$G$"$kFsHVL\$N0z?t$K%^%C%W$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ScriptAlias /cgi-bin/ /web/cgi-bin/
- </example>
-
- <p><code>http://myserver/cgi-bin/foo</code>
- $B$X$N%j%/%(%9%H$KBP$7$F%5!<%P$O%9%/%j%W%H(B
- <code>/web/cgi-bin/foo</code> $B$r<B9T$7$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAliasMatch</name>
-<description>URL $B$r@55,I=8=$r;H$C$F%U%!%$%k%7%9%F%`$N0LCV$X%^%C%W$7!"%^%C%W@h$r(B
-CGI $B%9%/%j%W%H$K;XDj(B</description>
-<syntax>ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <directive module="mod_alias">ScriptAlias</directive>
- $B$H$[$H$s$IF1$8$G$9$,!"4JC1$J@hF,$+$i$N%^%C%A$r9T$J$&$N$G$O$J$/!"(B
- $BI8=`@55,I=8=$rMxMQ$7$^$9!#$3$3$G;XDj$5$l$?@55,I=8=$H(B URL-path
- $B$,9g$&$+$I$&$+$rD4$Y!"9g$&>l9g$O3g8L$G3g$i$l$?%^%C%A$r(B
- $BM?$($i$l$?J8;zNs$GCV$-49$(!"$=$l$r%U%!%$%kL>$H$7$F;HMQ$7$^$9!#(B
- $B$?$H$($P!"I8=`$N(B <code>/cgi-bin</code>
- $B$r;HMQ$9$k$h$&$K$9$k$?$a$K$O!"0J2<$N$h$&$J$b$N$r;H$$$^$9(B:
- </p>
-
- <example>
- ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_alias.xml.ko b/docs/manual/mod/mod_alias.xml.ko
deleted file mode 100644
index c4d466d361..0000000000
--- a/docs/manual/mod/mod_alias.xml.ko
+++ /dev/null
@@ -1,335 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.18 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_alias.xml.meta">
-
-<name>mod_alias</name>
-<description>ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐµéÀ» ¹®¼­ °èÃþ±¸Á¶¿¡ Æ÷ÇÔÇÏ°í,
- URL ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÑ´Ù</description>
-<status>Base</status>
-<sourcefile>mod_alias.c</sourcefile>
-<identifier>alias_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀÌ Á¦°øÇÏ´Â Áö½Ã¾îµéÀ» »ç¿ëÇÏ¿© ¼­¹ö°¡ ¿äûÀ»
- ¹ÞÀ»¶§ URLÀ» ¼öÁ¤Çϰųª Á¶ÀÛÇÒ ¼ö ÀÖ´Ù. <directive
- module="mod_alias">Alias</directive>¿Í <directive
- module="mod_alias">ScriptAlias</directive> Áö½Ã¾î´Â URLÀ»
- ÆÄÀϽýºÅÛ °æ·Î·Î ´ëÀÀÇÑ´Ù. ±×·¡¼­ <directive
- module="core">DocumentRoot</directive> ¾Æ·¡¿¡ ¾ø´Â ³»¿ëÀ»
- À¥À¸·Î ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù. ¶Ç, <directive
- module="mod_alias">ScriptAlias</directive> Áö½Ã¾î´Â ÁöÁ¤ÇÑ
- µð·ºÅ丮¿¡ CGI ½ºÅ©¸³Æ®¹Û¿¡ ¾ø´Ù°í ¾Ë¸°´Ù.</p>
-
- <p><directive module="mod_alias">Redirect</directive> Áö½Ã¾î´Â
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ´Ù¸¥ URL·Î »õ·Î¿î ¿äûÀ» Çϵµ·Ï Áö½ÃÇÑ´Ù.
- ÀÚ¿øÀ» »õ·Î¿î Àå¼Ò·Î ¿Å±ä °æ¿ì ÀÚÁÖ »ç¿ëÇÑ´Ù.</p>
-</summary>
-
-<seealso><module>mod_rewrite</module></seealso> <seealso><a
-href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></seealso>
-
-<section id="order"><title>ó¸® ¼ø¼­</title>
-
-<p>¼­·Î ´Ù¸¥ »ç¿ëÀå¼Ò¿¡¼­ Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ´Ù¸¥ Áö½Ã¾î¿Í
-°°ÀÌ Ç¥ÁØ <a href="../sections.html#mergin">°áÇÕ ¹æ¹ý</a>¿¡
-µû¶ó ó¸®ÇÑ´Ù. ±×·¯³ª °°Àº »ç¿ëÀå¼Ò¿¡ (¿¹¸¦ µé¾î, °°Àº <directive
-type="section" module="core">VirtualHost</directive> ¼½¼Ç¿¡)
-Alias¿Í Redirect¸¦ »ç¿ëÇÏ¸é ¾Æ·¡ ¼ø¼­´ë·Î ó¸®ÇÑ´Ù.</p>
-
-<p>¸ÕÀú ¸ðµç Redirect¸¦ ó¸®ÇÑ ÈÄ Alias¸¦ ó¸®ÇÑ´Ù. ±×·¡¼­
-<directive module="mod_alias">Redirect</directive>³ª <directive
-module="mod_alias">RedirectMatch</directive>¿¡ ÇØ´çÇÏ´Â ¿äûÀº
-Àý´ë·Î AliasÇÏÁö ¾Ê´Â´Ù. ±×¸®°í Alias¿Í Redirect´Â ¼³Á¤ÆÄÀÏ¿¡¼­
-ù¹ø°·Î ³ª¿À´Â °ÍÀ» »ç¿ëÇÑ´Ù.</p>
-
-<p>±×·¡¼­ ¿©·¯ Áö½Ã¾î°¡ µ¿ÀÏÇÑ ÇÏÀ§°æ·Î¿¡ ÇØ´çÇÏ´Â °æ¿ì ¸ðµç
-Áö½Ã¾î¸¦ Àû¿ëÇϱâÀ§Çؼ­´Â °¡Àå »ó¼¼ÇÑ °æ·Î¸¦ ¸ÕÀú »ç¿ëÇØ¾ß ÇÑ´Ù.
-¿¹¸¦ µé¾î, ´ÙÀ½ ¼³Á¤Àº ÀǵµÇÑ´ë·Î µ¿ÀÛÇÑ´Ù:</p>
-
-<example>
-Alias /foo/bar /baz<br />
-Alias /foo /gaq
-</example>
-
-<p>±×·¯³ª À§ÀÇ µÎ Áö½Ã¾î ¼ø¼­¸¦ ¹Ù²Ù¸é <code>/foo/bar</code>
-<directive module="mod_alias">Alias</directive> ÀÌÀü¿¡
-<code>/foo</code> <directive module="mod_alias">Alias</directive>¸¦
-Àû¿ëÇϹǷΠÇ×»ó µÎ¹ø° Áö½Ã¾î¸¦ ¹«½ÃÇÑ´Ù.</p>
-
-</section>
-
-<directivesynopsis>
-<name>Alias</name>
-<description>URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÑ´Ù</description>
-<syntax>Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-
- <p><directive>Alias</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé ÆÄÀϽýºÅÛ¿¡¼­
- <directive module="core">DocumentRoot</directive> ¹Û¿¡ ÀÖ´Â
- ¹®¼­µµ ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù. <var>url-path</var>·Î ½ÃÀÛÇÏ´Â
- (%·Î ÀÎÄÚµùµÈ) URLÀ» <var>directory-path</var>·Î ½ÃÀÛÇÏ´Â
- ÆÄÀÏ¿¡ ´ëÀÀÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- Alias /image /ftp/pub/image
- </example>
-
- <p>http://myserver/image/foo.gif¸¦ ¿äûÇÏ¸é ¼­¹ö´Â
- /ftp/pub/image/foo.gif ÆÄÀÏÀ» ³Ñ°ÜÁØ´Ù.</p>
-
- <p><var>url-path</var> ³¡¿¡ /¸¦ Æ÷ÇÔÇϸé, URL ³¡¿¡ /¸¦
- »ç¿ëÇؾ߸¸ ¿µÇâÀÌ ÀÖÀ½À» ÁÖÀÇÇ϶ó. Áï, <code>Alias /icons/
- /usr/local/apache/icons/</code> ¼³Á¤Àº url <code>/icons</code>¿Í
- °ü°è°¡ ¾ø´Ù.</p>
-
- <p>´ëÀÀÀÇ <em>´ë»ó</em>À» Æ÷ÇÔÇÏ´Â ¿©·¯ <directive
- type="section" module="core">Directory</directive> ¼½¼ÇÀÌ
- ÇÊ¿äÇÒÁöµµ ¸ð¸¥´Ù. ÀÌ Áö½Ã¾î´Â <directive type="section"
- module="core">Directory</directive> ¼½¼ÇÀ» °Ë»çÇϱâ Àü¿¡
- ó¸®ÇϹǷÎ, ´ëÀÀÀÇ ´ë»ó¸¸ ¼½¼ÇÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. (±×·¯³ª
- <directive type="section" module="core">Location</directive>
- ¼½¼ÇÀº ÀÌ Áö½Ã¾î¸¦ ó¸®Çϱâ Àü¿¡ Çѹø¸¸ °Ë»çÇϹǷΠÁöÁ¤ÇÑ
- URL ÀÌÇÏ Àüü¿¡ ¿µÇâÀ» ÁØ´Ù.)</p>
-
- <p>ƯÈ÷ <directive module="core">DocumentRoot</directive>
- ¹Û¿¡ ÀÖ´Â µð·ºÅ丮·Î <code>Alias</code>¸¦ ¸¸µé¾ú´Ù¸é, Á÷Á¢
- ´ë»ó µð·ºÅ丮ÀÇ Á¢±ÙÀ» Çã¿ëÇØÁà¾ß ÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- Alias /image /ftp/pub/image<br />
- &lt;Directory /ftp/pub/image&gt;<br />
- <indent>
- Order allow,deny<br />
- Allow from all<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AliasMatch</name>
-<description>Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ÆÄÀϽýºÅÛ Àå¼Ò·Î
-´ëÀÀÇÑ´Ù</description>
-<syntax>AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <directive module="mod_alias">Alias</directive>¿Í
- °°Áö¸¸, °£´ÜÈ÷ URLÀÇ ¾ÕºÎºÐ¸¸ ºñ±³ÇÏ´Â ´ë½Å Ç¥ÁØ Á¤±ÔÇ¥Çö½ÄÀ»
- »ç¿ëÇÑ´Ù. ÁöÁ¤ÇÑ Á¤±ÔÇ¥Çö½ÄÀ» URL °æ·Î¿Í ºñ±³ÇÏ¿© ¸Â´Ù¸é,
- ¼­¹ö´Â °ýÈ£·Î ¹­Àº ºÎºÐÀ» ´ëüÇÏ¿© ÆÄÀϸíÀ¸·Î »ç¿ëÇÑ´Ù.
- ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ <code>/icons</code> µð·ºÅ丮¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <example>
- AliasMatch ^/icons(.*) /usr/local/apache/icons$1
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Redirect</name>
-<description>Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</description>
-<syntax>Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Redirect Áö½Ã¾î´Â ÀÌÀü URLÀ» »õ·Î¿î URL·Î ´ëÀÀÇÑ´Ù.
- Ŭ¶óÀ̾ðÆ®¿¡°Ô »õ·Î¿î URLÀ» º¸³»°í, Ŭ¶óÀ̾ðÆ®´Â »õ·Î¿î
- ÁÖ¼Ò·Î ´Ù½Ã Çѹø Á¢¼ÓÇÑ´Ù. (%·Î ÀÎÄÚµùµÈ) <var>URL-path</var>·Î
- ½ÃÀÛÇÏ´Â ¿äûÀ» ¹ÞÀ¸¸é (%·Î ÀÎÄÚµùµÈ) <var>URL</var>·Î ½ÃÀÛÇÏ´Â
- »õ·Î¿î URL·Î ¸®´ÙÀÌ·º¼Ç ¿À·ù¸¦ º¸³½´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- Redirect /service http://foo2.bar.com/service
- </example>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ http://myserver/service/foo.txt¸¦ ¿äûÇϸé
- ´ë½Å http://foo2.bar.com/service/foo.txt¿¡ Á¢±ÙÇ϶ó´Â ÀÀ´äÀ»
- ¹Þ´Â´Ù.</p>
-
-<note><title>ÁÖÀÇ</title> <p>Redirect Áö½Ã¾î´Â ¼³Á¤ÆÄÀÏ¿¡¼­
-³ª¿À´Â ¼ø¼­¿Í °ü°è¾øÀÌ Alias¿Í ScriptAlias Áö½Ã¾îº¸´Ù ¿ì¼±¼øÀ§°¡
-³ô´Ù. ¶Ç, .htaccess ÆÄÀÏÀ̳ª <directive type="section"
-module="core">Directory</directive> ¼½¼Ç¿¡¼­ »ç¿ëÇÏ´õ¶óµµ
-<var>URL-path</var>¿¡´Â »ó´ë°æ·Î°¡ ¾Æ´Ï¶ó ¹Ýµå½Ã ¿ÏÀüÇÑ URLÀ»
-»ç¿ëÇØ¾ß ÇÑ´Ù.</p></note>
-
- <p><var>status</var> ¾Æ±Ô¸ÕÆ®¸¦ ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é, "ÀÓ½Ã
- (temporary)" (HTTP »óÅ 302) ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù. Áï,
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÚ¿øÀ» Àӽ÷Π¿Å°å´Ù°í ¾Ë¸°´Ù. <var>status</var>
- ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ HTTP »óÅÂÄڵ带 ¹ÝȯÇÒ ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt>permanent</dt>
-
- <dd>ÀÚ¿øÀ» ¿ÏÀüÈ÷ ¿Å°åÀ½À» ¶æÇÏ´Â ¿µ±¸ ¸®´ÙÀÌ·º¼Ç »óŸ¦
- (301) ¹ÝȯÇÑ´Ù.</dd>
-
- <dt>temp</dt>
-
- <dd>Àӽà ¸®´ÙÀÌ·º¼Ç »óŸ¦ (302) ¹ÝȯÇÑ´Ù. ±âº»°ªÀÌ´Ù.</dd>
-
- <dt>seeother</dt>
-
- <dd>ÀÚ¿øÀÌ ±³Ã¼µÇ¾úÀ½À» ¶æÇÏ´Â "ÂüÁ¶ (See Other)" »óŸ¦
- (303) ¹ÝȯÇÑ´Ù.</dd>
-
- <dt>gone</dt>
-
- <dd>ÀÚ¿øÀÌ ¿µ±¸È÷ »èÁ¦µÇ¾úÀ½À» ¶æÇÏ´Â "¼Ò¸ê (Gone)" »óŸ¦
- (410) ¹ÝȯÇÑ´Ù. ÀÌ »óŸ¦ »ç¿ëÇϸé <var>URL</var> ¾Æ±Ô¸ÕÆ®¸¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
- </dl>
-
- <p><var>status</var>¿¡ ¼ýÀÚ »óÅÂÄڵ带 »ç¿ëÇÏ¿© ´Ù¸¥ »óÅÂÄڵ嵵
- ¹ÝȯÇÒ ¼ö ÀÖ´Ù. »óÅ°¡ 300°ú 399 »çÀ̶ó¸é <var>URL</var>
- ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇØ¾ß ÇÏ°í, ¾Æ´Ï¶ó¸é »ý·«ÇØ¾ß ÇÑ´Ù. ´Ü, ¾ÆÆÄÄ¡
- Äڵ忡 »óÅ°¡ Á¤ÀǵÇÀÖ¾î¾ß ÇÑ´Ù (http_protocol.cÀÇ
- <code>send_error_response</code> ÇÔ¼ö Âü°í).</p>
-
- <example><title>¿¹Á¦:</title>
- Redirect permanent /one http://example.com/two<br />
- Redirect 303 /three http://example.com/other
- </example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectMatch</name>
-<description>ÇöÀç URLÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ¸é ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
-º¸³½´Ù</description>
-<syntax>RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <directive
- module="mod_alias">Redirect</directive>¿Í °°Áö¸¸, °£´ÜÈ÷
- URLÀÇ ¾ÕºÎºÐ¸¸ ºñ±³ÇÏ´Â ´ë½Å Ç¥ÁØ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÑ´Ù.
- ÁöÁ¤ÇÑ Á¤±ÔÇ¥Çö½ÄÀ» URL °æ·Î¿Í ºñ±³ÇÏ¿© ¸Â´Ù¸é, ¼­¹ö´Â °ýÈ£·Î
- ¹­Àº ºÎºÐÀ» ´ëüÇÏ¿© ÆÄÀϸíÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½Àº
- ¸ðµç GIF ÆÄÀÏ ¿äû¿¡ ´ëÇØ ´Ù¸¥ ¼­¹öÀÇ ºñ½ÁÇÑ À̸§À» °¡Áø
- JPEG ÆÄÀÏ·Î ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù:</p>
-
- <example>
- RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectTemp</name>
-<description>Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-Àӽà ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</description>
-<syntax>RedirectTemp <var>URL-path</var> <var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀÌ ÀÓ½ÃÀûÀÓÀ» (»óÅÂ
- 302) ¾Ë¸°´Ù. <code>Redirect temp</code>¿Í Á¤È®È÷ °°´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectPermanent</name>
-<description>Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-¿µ±¸ ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</description>
-<syntax>RedirectPermanent <var>URL-path</var> <var>URL</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀÌ ¿µ±¸ÀûÀÓÀ» (»óÅÂ
- 301) ¾Ë¸°´Ù. <code>Redirect permanent</code>¿Í Á¤È®È÷ °°´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAlias</name>
-<description>URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÏ°í ´ë»óÀÌ CGI
-½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</description>
-<syntax>ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>ScriptAlias</directive> Áö½Ã¾î´Â <directive
- module="mod_alias">Alias</directive> Áö½Ã¾î¿Í ºñ½ÁÇÏÁö¸¸,
- Ãß°¡·Î ´ë»ó µð·ºÅ丮¿¡ <module >mod_cgi</module>ÀÇ cgi-script
- Çڵ鷯°¡ ó¸®ÇÒ CGI ½ºÅ©¸³Æ®°¡ ÀÖ´Ù°í ¾Ë¸°´Ù.
- <var>URL-path</var>·Î ½ÃÀÛÇÏ´Â (%·Î ÀÎÄÚµùµÈ) URLÀ» ÆÄÀϽýºÅÛÀÇ
- Àý´ë°æ·ÎÀÎ µÎ¹ø° ¾Æ±Ô¸ÕÆ®·Î ½ÃÀÛÇÏ´Â ½ºÅ©¸³Æ®¿¡ ´ëÀÀÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- ScriptAlias /cgi-bin/ /web/cgi-bin/
- </example>
-
- <p><code>http://myserver/cgi-bin/foo</code>¸¦ ¿äûÇÏ¸é ¼­¹ö´Â
- <code>/web/cgi-bin/foo</code> ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAliasMatch</name>
-<description>Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î
-´ëÀÀÇÏ°í ´ë»óÀÌ CGI ½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</description>
-<syntax>ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <directive
- module="mod_alias">ScriptAlias</directive>¿Í °°Áö¸¸, °£´ÜÈ÷
- URLÀÇ ¾ÕºÎºÐ¸¸ ºñ±³ÇÏ´Â ´ë½Å Ç¥ÁØ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÑ´Ù.
- ÁöÁ¤ÇÑ Á¤±ÔÇ¥Çö½ÄÀ» URL °æ·Î¿Í ºñ±³ÇÏ¿© ¸Â´Ù¸é, ¼­¹ö´Â °ýÈ£·Î
- ¹­Àº ºÎºÐÀ» ´ëüÇÏ¿© ÆÄÀϸíÀ¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú
- °°ÀÌ Ç¥ÁØÀûÀÎ <code>/cgi-bin</code>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_alias.xml.meta b/docs/manual/mod/mod_alias.xml.meta
deleted file mode 100644
index 7f438145fc..0000000000
--- a/docs/manual/mod/mod_alias.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_alias</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_asis.html b/docs/manual/mod/mod_asis.html
deleted file mode 100644
index 66ab1a743a..0000000000
--- a/docs/manual/mod/mod_asis.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_asis.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_asis.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_asis.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_asis.html.en b/docs/manual/mod/mod_asis.html.en
deleted file mode 100644
index 805c24a57b..0000000000
--- a/docs/manual/mod/mod_asis.html.en
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_asis - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_asis</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_asis.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Sends files that contain their own
-HTTP headers</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>asis_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_asis.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides the handler <code>send-as-is</code>
- which causes Apache to send the document without adding most of
- the usual HTTP headers.</p>
-
- <p>This can be used to send any kind of data from the server,
- including redirects and other special HTTP responses, without
- requiring a cgi-script or an nph script.</p>
-
- <p>For historical reasons, this module will also process any
- file with the mime type <code>httpd/send-as-is</code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#usage">Usage</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
-<li><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code></li>
-<li><a href="../handler.html">Apache's Handler Use</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">Usage</a></h2>
-
- <p>In the server configuration file, associate files with the
- <code>send-as-is</code> handler <em>e.g.</em></p>
-
- <div class="example"><p><code>AddHandler send-as-is asis</code></p></div>
-
- <p>The contents of any file with a <code>.asis</code> extension
- will then be sent by Apache to the client with almost no
- changes. Clients will need HTTP headers to be attached, so do
- not forget them. A Status: header is also required; the data
- should be the 3-digit HTTP response code, followed by a textual
- message.</p>
-
- <p>Here's an example of a file whose contents are sent <em>as
- is</em> so as to tell the client that a file has
- redirected.</p>
-
-
- <div class="example"><p><code>
- Status: 301 Now where did I leave that URL<br />
- Location: http://xyz.abc.com/foo/bar.html<br />
- Content-type: text/html<br />
- <br />
- &lt;html&gt;<br />
- &lt;head&gt;<br />
- &lt;title&gt;Lame excuses'R'us&lt;/title&gt;<br />
- &lt;/head&gt;<br />
- &lt;body&gt;<br />
- &lt;h1&gt;Fred's exceptionally wonderful page has moved to<br />
- &lt;a href="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
- site.<br />
- &lt;/h1&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;
- </code></p></div>
-
- <div class="note"><h3>Notes:</h3>
- <p>The server always adds a <code>Date:</code> and <code>Server:</code>
- header to the data returned to the client, so these should not be
- included in the file. The server does <em>not</em> add a
- <code>Last-Modified</code> header; it probably should.</p>
- </div>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_asis.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_asis.html.ja.euc-jp b/docs/manual/mod/mod_asis.html.ja.euc-jp
deleted file mode 100644
index 6b83c42ea0..0000000000
--- a/docs/manual/mod/mod_asis.html.ja.euc-jp
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_asis - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_asis</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_asis.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¼«Ê¬ÍѤΠHTTP ¥Ø¥Ã¥À¤Î½ñ¤«¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤òÁ÷¿®¤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>asis_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_asis.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥Ï¥ó¥É¥é <code>send-as-is</code>
- ¤òÄ󶡤·¤Þ¤¹¡£¤³¤Î¥Ï¥ó¥É¥é¤ÏÄ̾ï¤Î HTTP
- ¥Ø¥Ã¥À¤ò¤Û¤È¤ó¤ÉÄɲ乤뤳¤È¤Ê¤¯¥É¥­¥å¥á¥ó¥È¤òÁ÷¿®¤·¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤Ï¥µ¡¼¥Ð¤«¤é¤É¤ó¤Ê¼ïÎà¤Î¥Ç¡¼¥¿¤òÁ÷¤ë¤È¤­¤Ë¤â»ÈÍѤǤ­¤Þ¤¹¡£
- Cgi ¥¹¥¯¥ê¥×¥È¤ä nph ¥¹¥¯¥ê¥×¥È¤¬Ìµ¤¯¤Æ¤â¥ê¥À¥¤¥ì¥¯¥È¤ä¾¤ÎÆÃÊ̤Ê
- HTTP ±þÅú¤òÁ÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Îò»ËŪ¤ÊÍýͳ¤Ë¤è¤ê¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï mime ¥¿¥¤¥×
- <code>httpd/send-as-is</code> ¤Î¥Õ¥¡¥¤¥ë¤â½èÍý¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#usage">»ÈÍÑË¡</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
-<li><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code></li>
-<li><a href="../handler.html">Apache ¤Î¥Ï¥ó¥É¥é¤Î»ÈÍÑ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">»ÈÍÑË¡</a></h2>
-
- <p>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤Ç¡¢¥Õ¥¡¥¤¥ë¤È <code>send-as-is</code>
- ¥Ï¥ó¥É¥é¤òÎ㤨¤Ð°Ê²¼¤Î¤è¤¦¤Ë´ØÏ¢ÉÕ¤±¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>AddHandler send-as-is asis</code></p></div>
-
- <p>³ÈÄ¥»Ò¤¬ <code>.asis</code> ¤Î¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤Ï Apache
- ¤«¤é¥¯¥é¥¤¥¢¥ó¥È¤Ø¤Û¤È¤ó¤ÉÊѹ¹Ìµ¤¯Á÷¤é¤ì¤Þ¤¹¡£¥¯¥é¥¤¥¢¥ó¥È¤Ë¤Ï
- HTTP ¥Ø¥Ã¥À¤¬É¬ÍפǤ¹¤Î¤Ç¡¢¥Õ¥¡¥¤¥ë¤Ë½ñ¤¯¤³¤È¤ò˺¤ì¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- Status: ¥Ø¥Ã¥À¤âɬÍפǤ¹¡£¥Ç¡¼¥¿¤Ï 3 ·å¤Î HTTP
- ±þÅú¥³¡¼¥É¤È¡¢¤½¤Î¸å¤Ë¥Æ¥­¥¹¥È¥á¥Ã¥»¡¼¥¸¤¬Â³¤¤¤¿¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ë¥Õ¥¡¥¤¥ë¤¬°ÜÆ°¤·¤¿¤³¤È¤òÃΤ餻¤ë¤¿¤á¤Ë
- <em>as is</em> (¤½¤Î¤Þ¤Þ) ¤ÇÁ÷¤é¤ì¤ë¥Õ¥¡¥¤¥ë¤ÎÆâÍƤÎÎã¤Ç¤¹¡£
- </p>
-
-
- <div class="example"><p><code>
- Status: 301 Now where did I leave that URL<br />
- Location: http://xyz.abc.com/foo/bar.html<br />
- Content-type: text/html<br />
- <br />
- &lt;html&gt;<br />
- &lt;head&gt;<br />
- &lt;title&gt;Lame excuses'R'us&lt;/title&gt;<br />
- &lt;/head&gt;<br />
- &lt;body&gt;<br />
- &lt;h1&gt;Fred's exceptionally wonderful page has moved to<br />
- &lt;a href="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
- site.<br />
- &lt;/h1&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;
- </code></p></div>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p>Ãí°Õ: ¥µ¡¼¥Ð¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤µ¤ì¤ë¥Ç¡¼¥¿¤Ë¾ï¤Ë <code>Date:</code>
- ¤È <code>Server:</code> ¥Ø¥Ã¥À¤òÄɲä·¤Þ¤¹¤Î¤Ç¡¢
- ¤½¤ì¤é¤¬¥Õ¥¡¥¤¥ë¤Ë½ñ¤«¤ì¤Æ¤¤¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
- ¥µ¡¼¥Ð¤Ï <code>Last-Modified</code> ¥Ø¥Ã¥À¤òÄɲÃ<em>¤·¤Þ¤»¤ó</em>¡£
- ¤ª¤½¤é¤¯¤Ï¤½¤¦¤¹¤Ù¤­¤Ç¤·¤ç¤¦¤±¤ì¤É¡£</p>
- </div>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_asis.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_asis.html.ko.euc-kr b/docs/manual/mod/mod_asis.html.ko.euc-kr
deleted file mode 100644
index a35a4488f9..0000000000
--- a/docs/manual/mod/mod_asis.html.ko.euc-kr
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_asis - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_asis</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_asis.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>HTTP Çì´õ¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀ» º¸³½´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>asis_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_asis.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ¾ÆÆÄÄ¡°¡ ÀϹÝÀûÀÎ HTTP Çì´õÀÇ ´ëºÎºÐÀ» Ãß°¡ÇÏÁö¾Ê°í
- ¹®¼­¸¦ º¸³»µµ·Ï ¸¸µå´Â <code>send-as-is</code> Çڵ鷯¸¦
- Á¦°øÇÑ´Ù.</p>
-
- <p>±×·¡¼­ ¼­¹ö´Â cgi ½ºÅ©¸³Æ®³ª nph ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏÁö¾Ê°íµµ
- ¸®´ÙÀÌ·º¼Ç°ú ´Ù¸¥ Ưº°ÇÑ HTTP ÀÀ´ä µî ¾î¶² ÀÚ·áµµ º¸³¾ ¼ö
- ÀÖ´Ù.</p>
-
- <p>°ú°Å¿¡ ÀÌ ¸ðµâÀº mime typeÀÌ <code>httpd/send-as-is</code>ÀÎ
- ÆÄÀϵµ ó¸®Çß´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<p>ÀÌ ¸ðµâ¿¡´Â Áö½Ã¾î°¡ ¾ø½À´Ï´Ù.</p>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#usage">»ç¿ë¹ý</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
-<li><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code></li>
-<li><a href="../handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">»ç¿ë¹ý</a></h2>
-
- <p>¼­¹ö ¼³Á¤ÆÄÀÏ¿¡¼­ ÆÄÀÏ°ú <code>send-as-is</code> Çڵ鷯¸¦
- <em>¿¹¸¦ µé¾î</em> ´ÙÀ½°ú °°ÀÌ ¿¬°áÇÑ´Ù.</p>
-
- <div class="example"><p><code>AddHandler send-as-is asis</code></p></div>
-
- <p>¾ÆÆÄÄ¡´Â <code>.asis</code> È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀÇ ³»¿ëÀ»
- °ÅÀÇ ¼öÁ¤ÇÏÁö¾Ê°í Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³½´Ù. Ŭ¶óÀ̾ðÆ®´Â HTTP
- Çì´õ°¡ ÇÊ¿äÇϹǷΠ»©¸ÔÁö¸¶¶ó. Status: Çì´õµµ ÇÊ¿äÇÏ´Ù. ÀÌ
- Çì´õÀÇ ³»¿ëÀº ¼¼ÀÚ¸® ¼ýÀÚÀÎ HTTP ÀÀ´äÄÚµå¿Í ±× µÚÀÇ ¹®±¸ÀÌ´Ù.</p>
-
- <p>´ÙÀ½Àº ³»¿ë <em>±×´ë·Î</em> Ŭ¶óÀ̾ðÆ®¿¡°Ô ÆÄÀÏÀÌ
- ¸®´ÙÀ̷¼ǵǾú´Ù°í ¾Ë¸®´Â ÆÄÀÏÀÇ ¿¹ÀÌ´Ù.</p>
-
-
- <div class="example"><p><code>
- Status: 301 Now where did I leave that URL<br />
- Location: http://xyz.abc.com/foo/bar.html<br />
- Content-type: text/html<br />
- <br />
- &lt;html&gt;<br />
- &lt;head&gt;<br />
- &lt;title&gt;Lame excuses'R'us&lt;/title&gt;<br />
- &lt;/head&gt;<br />
- &lt;body&gt;<br />
- &lt;h1&gt;Fred's exceptionally wonderful page has moved to<br />
- &lt;a href="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
- site.<br />
- &lt;/h1&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;
- </code></p></div>
-
- <div class="note"><h3>ÁÖÀÇ:</h3>
- <p>¼­¹ö´Â ÀڷḦ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³¾¶§ Ç×»ó <code>Date:</code>¿Í
- <code>Server:</code> Çì´õ¸¦ Ãß°¡ÇϹǷÎ, ÆÄÀÏ¿¡ ÀÌ Çì´õ°¡
- ÀÖÀ¸¸é ¾ÈµÈ´Ù. ¼­¹ö´Â <code>Last-Modified</code> Çì´õ¸¦
- Ãß°¡ÇÏÁö <em>¾Ê´Â´Ù</em>. ±×·¡¼­ ¾Æ¸¶µµ ÀÌ Çì´õ´Â Æ÷ÇÔÇؾß
- ÇÑ´Ù.</p>
- </div>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_asis.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_asis.xml b/docs/manual/mod/mod_asis.xml
deleted file mode 100644
index 9b526c8110..0000000000
--- a/docs/manual/mod/mod_asis.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_asis.xml.meta">
-
-<name>mod_asis</name>
-<description>Sends files that contain their own
-HTTP headers</description>
-<status>Base</status>
-<sourcefile>mod_asis.c</sourcefile>
-<identifier>asis_module</identifier>
-
-<summary>
- <p>This module provides the handler <code>send-as-is</code>
- which causes Apache to send the document without adding most of
- the usual HTTP headers.</p>
-
- <p>This can be used to send any kind of data from the server,
- including redirects and other special HTTP responses, without
- requiring a cgi-script or an nph script.</p>
-
- <p>For historical reasons, this module will also process any
- file with the mime type <code>httpd/send-as-is</code>.</p>
-</summary>
-
-<seealso><module>mod_headers</module></seealso>
-<seealso><module>mod_cern_meta</module></seealso>
-<seealso><a href="../handler.html">Apache's Handler Use</a></seealso>
-
-<section id="usage"><title>Usage</title>
-
- <p>In the server configuration file, associate files with the
- <code>send-as-is</code> handler <em>e.g.</em></p>
-
- <example>AddHandler send-as-is asis</example>
-
- <p>The contents of any file with a <code>.asis</code> extension
- will then be sent by Apache to the client with almost no
- changes. Clients will need HTTP headers to be attached, so do
- not forget them. A Status: header is also required; the data
- should be the 3-digit HTTP response code, followed by a textual
- message.</p>
-
- <p>Here's an example of a file whose contents are sent <em>as
- is</em> so as to tell the client that a file has
- redirected.</p>
-
-
- <example>
- Status: 301 Now where did I leave that URL<br />
- Location: http://xyz.abc.com/foo/bar.html<br />
- Content-type: text/html<br />
- <br />
- &lt;html&gt;<br />
- &lt;head&gt;<br />
- &lt;title&gt;Lame excuses'R'us&lt;/title&gt;<br />
- &lt;/head&gt;<br />
- &lt;body&gt;<br />
- &lt;h1&gt;Fred's exceptionally wonderful page has moved to<br />
- &lt;a href="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
- site.<br />
- &lt;/h1&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;
- </example>
-
- <note><title>Notes:</title>
- <p>The server always adds a <code>Date:</code> and <code>Server:</code>
- header to the data returned to the client, so these should not be
- included in the file. The server does <em>not</em> add a
- <code>Last-Modified</code> header; it probably should.</p>
- </note>
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_asis.xml.ja b/docs/manual/mod/mod_asis.xml.ja
deleted file mode 100644
index b743e349c4..0000000000
--- a/docs/manual/mod/mod_asis.xml.ja
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_asis.xml.meta">
-
-<name>mod_asis</name>
-<description>$B<+J,MQ$N(B HTTP $B%X%C%@$N=q$+$l$F$$$k%U%!%$%k$rAw?.$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_asis.c</sourcefile>
-<identifier>asis_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O%O%s%I%i(B <code>send-as-is</code>
- $B$rDs6!$7$^$9!#$3$N%O%s%I%i$ODL>o$N(B HTTP
- $B%X%C%@$r$[$H$s$IDI2C$9$k$3$H$J$/%I%-%e%a%s%H$rAw?.$7$^$9!#(B</p>
-
- <p>$B$3$l$O%5!<%P$+$i$I$s$J<oN`$N%G!<%?$rAw$k$H$-$K$b;HMQ$G$-$^$9!#(B
- Cgi $B%9%/%j%W%H$d(B nph $B%9%/%j%W%H$,L5$/$F$b%j%@%$%l%/%H$dB>$NFCJL$J(B
- HTTP $B1~Ez$rAw$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$BNr;KE*$JM}M3$K$h$j!"$3$N%b%8%e!<%k$O(B mime $B%?%$%W(B
- <code>httpd/send-as-is</code> $B$N%U%!%$%k$b=hM}$7$^$9!#(B</p>
-</summary>
-
-<seealso><module>mod_headers</module></seealso>
-<seealso><module>mod_cern_meta</module></seealso>
-<seealso><a href="../handler.html">Apache $B$N%O%s%I%i$N;HMQ(B</a></seealso>
-
-<section id="usage"><title>$B;HMQK!(B</title>
-
- <p>$B%5!<%P@_Dj%U%!%$%k$G!"%U%!%$%k$H(B <code>send-as-is</code>
- $B%O%s%I%i$rNc$($P0J2<$N$h$&$K4XO"IU$1$F$/$@$5$$!#(B</p>
-
- <example>AddHandler send-as-is asis</example>
-
- <p>$B3HD%;R$,(B <code>.asis</code> $B$N$9$Y$F$N%U%!%$%k$NFbMF$O(B Apache
- $B$+$i%/%i%$%"%s%H$X$[$H$s$IJQ99L5$/Aw$i$l$^$9!#%/%i%$%"%s%H$K$O(B
- HTTP $B%X%C%@$,I,MW$G$9$N$G!"%U%!%$%k$K=q$/$3$H$rK:$l$J$$$G$/$@$5$$!#(B
- Status: $B%X%C%@$bI,MW$G$9!#%G!<%?$O(B 3 $B7e$N(B HTTP
- $B1~Ez%3!<%I$H!"$=$N8e$K%F%-%9%H%a%C%;!<%8$,B3$$$?$b$N$G$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p>$B$3$l$O%/%i%$%"%s%H$K%U%!%$%k$,0\F0$7$?$3$H$rCN$i$;$k$?$a$K(B
- <em>as is</em> ($B$=$N$^$^(B) $B$GAw$i$l$k%U%!%$%k$NFbMF$NNc$G$9!#(B
- </p>
-
-
- <example>
- Status: 301 Now where did I leave that URL<br />
- Location: http://xyz.abc.com/foo/bar.html<br />
- Content-type: text/html<br />
- <br />
- &lt;html&gt;<br />
- &lt;head&gt;<br />
- &lt;title&gt;Lame excuses'R'us&lt;/title&gt;<br />
- &lt;/head&gt;<br />
- &lt;body&gt;<br />
- &lt;h1&gt;Fred's exceptionally wonderful page has moved to<br />
- &lt;a href="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
- site.<br />
- &lt;/h1&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;
- </example>
-
- <note><title>$BCm0U(B</title>
- <p>$BCm0U(B: $B%5!<%P$O%/%i%$%"%s%H$KJV$5$l$k%G!<%?$K>o$K(B <code>Date:</code>
- $B$H(B <code>Server:</code> $B%X%C%@$rDI2C$7$^$9$N$G!"(B
- $B$=$l$i$,%U%!%$%k$K=q$+$l$F$$$F$O$$$1$^$;$s!#(B
- $B%5!<%P$O(B <code>Last-Modified</code> $B%X%C%@$rDI2C(B<em>$B$7$^$;$s(B</em>$B!#(B
- $B$*$=$i$/$O$=$&$9$Y$-$G$7$g$&$1$l$I!#(B</p>
- </note>
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_asis.xml.ko b/docs/manual/mod/mod_asis.xml.ko
deleted file mode 100644
index 143618ee4d..0000000000
--- a/docs/manual/mod/mod_asis.xml.ko
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_asis.xml.meta">
-
-<name>mod_asis</name>
-<description>HTTP Çì´õ¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀ» º¸³½´Ù</description>
-<status>Base</status>
-<sourcefile>mod_asis.c</sourcefile>
-<identifier>asis_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ¾ÆÆÄÄ¡°¡ ÀϹÝÀûÀÎ HTTP Çì´õÀÇ ´ëºÎºÐÀ» Ãß°¡ÇÏÁö¾Ê°í
- ¹®¼­¸¦ º¸³»µµ·Ï ¸¸µå´Â <code>send-as-is</code> Çڵ鷯¸¦
- Á¦°øÇÑ´Ù.</p>
-
- <p>±×·¡¼­ ¼­¹ö´Â cgi ½ºÅ©¸³Æ®³ª nph ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏÁö¾Ê°íµµ
- ¸®´ÙÀÌ·º¼Ç°ú ´Ù¸¥ Ưº°ÇÑ HTTP ÀÀ´ä µî ¾î¶² ÀÚ·áµµ º¸³¾ ¼ö
- ÀÖ´Ù.</p>
-
- <p>°ú°Å¿¡ ÀÌ ¸ðµâÀº mime typeÀÌ <code>httpd/send-as-is</code>ÀÎ
- ÆÄÀϵµ ó¸®Çß´Ù.</p>
-</summary>
-
-<seealso><module>mod_headers</module></seealso>
-<seealso><module>mod_cern_meta</module></seealso>
-<seealso><a href="../handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></seealso>
-
-<section id="usage"><title>»ç¿ë¹ý</title>
-
- <p>¼­¹ö ¼³Á¤ÆÄÀÏ¿¡¼­ ÆÄÀÏ°ú <code>send-as-is</code> Çڵ鷯¸¦
- <em>¿¹¸¦ µé¾î</em> ´ÙÀ½°ú °°ÀÌ ¿¬°áÇÑ´Ù.</p>
-
- <example>AddHandler send-as-is asis</example>
-
- <p>¾ÆÆÄÄ¡´Â <code>.asis</code> È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀÇ ³»¿ëÀ»
- °ÅÀÇ ¼öÁ¤ÇÏÁö¾Ê°í Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³½´Ù. Ŭ¶óÀ̾ðÆ®´Â HTTP
- Çì´õ°¡ ÇÊ¿äÇϹǷΠ»©¸ÔÁö¸¶¶ó. Status: Çì´õµµ ÇÊ¿äÇÏ´Ù. ÀÌ
- Çì´õÀÇ ³»¿ëÀº ¼¼ÀÚ¸® ¼ýÀÚÀÎ HTTP ÀÀ´äÄÚµå¿Í ±× µÚÀÇ ¹®±¸ÀÌ´Ù.</p>
-
- <p>´ÙÀ½Àº ³»¿ë <em>±×´ë·Î</em> Ŭ¶óÀ̾ðÆ®¿¡°Ô ÆÄÀÏÀÌ
- ¸®´ÙÀ̷¼ǵǾú´Ù°í ¾Ë¸®´Â ÆÄÀÏÀÇ ¿¹ÀÌ´Ù.</p>
-
-
- <example>
- Status: 301 Now where did I leave that URL<br />
- Location: http://xyz.abc.com/foo/bar.html<br />
- Content-type: text/html<br />
- <br />
- &lt;html&gt;<br />
- &lt;head&gt;<br />
- &lt;title&gt;Lame excuses'R'us&lt;/title&gt;<br />
- &lt;/head&gt;<br />
- &lt;body&gt;<br />
- &lt;h1&gt;Fred's exceptionally wonderful page has moved to<br />
- &lt;a href="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
- site.<br />
- &lt;/h1&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;
- </example>
-
- <note><title>ÁÖÀÇ:</title>
- <p>¼­¹ö´Â ÀڷḦ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³¾¶§ Ç×»ó <code>Date:</code>¿Í
- <code>Server:</code> Çì´õ¸¦ Ãß°¡ÇϹǷÎ, ÆÄÀÏ¿¡ ÀÌ Çì´õ°¡
- ÀÖÀ¸¸é ¾ÈµÈ´Ù. ¼­¹ö´Â <code>Last-Modified</code> Çì´õ¸¦
- Ãß°¡ÇÏÁö <em>¾Ê´Â´Ù</em>. ±×·¡¼­ ¾Æ¸¶µµ ÀÌ Çì´õ´Â Æ÷ÇÔÇؾß
- ÇÑ´Ù.</p>
- </note>
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_asis.xml.meta b/docs/manual/mod/mod_asis.xml.meta
deleted file mode 100644
index f829c41d1d..0000000000
--- a/docs/manual/mod/mod_asis.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_asis</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_auth_basic.html b/docs/manual/mod/mod_auth_basic.html
deleted file mode 100644
index e93a9911e6..0000000000
--- a/docs/manual/mod/mod_auth_basic.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_auth_basic.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_auth_basic.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_auth_basic.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_auth_basic.html.en b/docs/manual/mod/mod_auth_basic.html.en
deleted file mode 100644
index 53b1b712ef..0000000000
--- a/docs/manual/mod/mod_auth_basic.html.en
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_auth_basic - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_auth_basic</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_basic.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_auth_basic.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_auth_basic.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Basic authentication</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>auth_basic_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_auth_basic.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module allows the use of HTTP Basic Authentication to
- restrict access by looking up users in the given providers.
- HTTP Digest Authentication is provided by
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authbasicprovider">AuthBasicProvider</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a> <a name="authbasicauthoritative" id="authbasicauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization and authentication are passed to
-lower level modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthBasicAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthBasicAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_basic</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthBasicAuthoritative</code> directive
- explicitly to <code>Off</code> allows for both
- authentication and authorization to be passed on to lower level
- modules (as defined in the <code>modules.c</code> files) if there is
- <strong>no userID</strong> or <strong>rule</strong> matching the
- supplied userID. If there is a userID and/or rule specified, the usual
- password and access checks will be applied and a failure will give
- an "Authentication Required" reply.</p>
-
- <p>So if a userID appears in the database of more than one module;
- or if a valid <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- directive applies to more than one module; then the first module
- will verify the credentials; and no access is passed on;
- regardless of the <code class="directive">AuthBasicAuthoritative</code>
- setting.</p>
-
- <p>By default control is not passed on and an unknown userID or
- rule will result in an "Authentication Required" reply. Not setting
- it thus keeps the system secure and forces an NCSA compliant
- behaviour.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthBasicProvider" id="AuthBasicProvider">AuthBasicProvider</a> <a name="authbasicprovider" id="authbasicprovider">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the authentication provider(s) for this location</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthBasicProvider On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_basic</td></tr>
-</table>
- <p>The <code class="directive">AuthBasicProvider</code> directive sets
- which provider is used to authenticate the users for this location.
- Setting the value to <code>On</code> will choose the default provider
- (<code>file</code>). Since the <code>file</code> provider is implemented
- by the <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> module, you have to make sure,
- that the module is present in the server.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Location /secure&gt;<br />
- <span class="indent">
- AuthBasicProvider dbm<br />
- AuthDBMType SDBM<br />
- AuthDBMUserFile /www/etc/dbmpasswd<br />
- Require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>See <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- for providers.</p>
-
- <p>The value <code>Off</code> clears the provider list and sets it back
- to the default.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_basic.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_auth_basic.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_auth_basic.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_basic.html.ja.euc-jp b/docs/manual/mod/mod_auth_basic.html.ja.euc-jp
deleted file mode 100644
index 38d7896173..0000000000
--- a/docs/manual/mod/mod_auth_basic.html.ja.euc-jp
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_auth_basic - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_auth_basic</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_auth_basic.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_auth_basic.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>´ðËÜǧ¾Ú</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>auth_basic_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_auth_basic.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>Í¿¤¨¤é¤ì¤¿¥×¥í¥Ð¥¤¥À (ÌõÃí: ǧ¾Ú¤Ç¤Î¾È²ñ¤ò¹Ô¤¦Ì䤤¹ç¤ï¤»Àè)
- ¤Ç¥æ¡¼¥¶¤ò¸¡º÷¤·¡¢HTTP ´ðËÜǧ¾Ú¤Ç¥¢¥¯¥»¥¹À©¸Â¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- HTTP ¥À¥¤¥¸¥§¥¹¥Èǧ¾Ú¤Ë¤Ä¤¤¤Æ¤Ï <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>
- ¤ÇÄ󶡤µ¤ì¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authbasicprovider">AuthBasicProvider</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a> <a name="authbasicauthoritative" id="authbasicauthoritative">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ǧ¾Ú¤È¾µÇ§¤ò¡¢¤è¤êÄ㤤¥ì¥Ù¥ë¤Î¥â¥¸¥å¡¼¥ë¤Ë°Ü¹Ô¤µ¤»¤ë¤«¤ò
-ÀßÄꤷ¤Þ¤¹¡£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthBasicAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AuthBasicAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_auth_basic</td></tr>
-</table>
- <p><code class="directive">AuthBasicAuthoritative</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÌÀ¼¨Åª¤Ë <code>Off</code>¤ËÀßÄꤹ¤ë¤È¡¢
- Í¿¤¨¤é¤ì¤¿Ç§¾Ú¥æ¡¼¥¶ ID ¤ËÂФ·¤Æ<strong>¥æ¡¼¥¶ ID ¤¬¤Ê¤¤</strong>
- ¤Þ¤¿¤Ï<strong>¥ë¡¼¥ë¤¬¤Ê¤¤</strong>¾ì¹ç¤Ë¡¢
- ǧ¾Ú¤È¾µÇ§¤ÎξÊý¤Î¥×¥í¥»¥¹¤¬¡¢
- ¤è¤êÄ㤤¥ì¥Ù¥ë¤Î¥â¥¸¥å¡¼¥ë (<code>modules.c</code> ¥Õ¥¡¥¤¥ë¤ÇÄêµÁ) ¤Ë°Ü¹Ô¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£
- ¥æ¡¼¥¶ ID ¤¬¤¢¤ë¡¢¤«¤Ä¤Þ¤¿¤Ï¡¢¥ë¡¼¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- Ä̾ï¤Î¥Ñ¥¹¥ï¡¼¥É¤È¥¢¥¯¥»¥¹¥Á¥§¥Ã¥¯¤¬Å¬ÍѤµ¤ì¤Æ¡¢
- ǧ¾Ú¤Ë¼ºÇÔ¤¹¤ë¤È "Authentication Required" ±þÅú¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤Ç¤¹¤«¤é¡¢Æó¤Ä°Ê¾å¤Î¥â¥¸¥å¡¼¥ë¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÇƱ°ì¤Î
- ¥æ¡¼¥¶ ID ¤¬¸½¤ï¤ì¤¿¤ê¡¢
- ¤Þ¤¿¤Ï¡¢Àµ¤·¤¤ <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Æó¤Ä°Ê¾å¤Î¥â¥¸¥å¡¼¥ë¤Ç¸½¤ï¤ì¤¿¤ê¤·¤¿¾ì¹ç¤Ï¡¢
- °ì¤ÄÌܤΥ⥸¥å¡¼¥ë¤¬Ç§Äê¤ò¹Ô¤Ã¤Æ¡¢<code class="directive">AuthAuthoritative</code>
- ÀßÄê¤Ë´Ø¤ï¤é¤º¡¢¥¢¥¯¥»¥¹¤Ï°Ü¹Ô¤·¤Þ¤»¤ó¡£</p>
-
- <p>¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢À©¸æ¤Ï°Ü¹Ô¤·¤Þ¤»¤ó¡£¤½¤·¤Æ¡¢Ì¤ÃΤΥ桼¥¶ ID ¤ä
- ¥ë¡¼¥ë¤¬¤¢¤Ã¤Æ¤â "Authentication Required" ±þÅú¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀßÄꤷ¤Ê¤¤¤³¤È¤Ç¥·¥¹¥Æ¥à¤Î°ÂÁ´¤ò°Ý»ý¤Ç¤­¤Æ¡¢¤Þ¤¿¡¢
- NCSA ½àµò¤ÎµóÆ°¤ò¶¯À©¤Ç¤­¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthBasicProvider" id="AuthBasicProvider">AuthBasicProvider</a> <a name="authbasicprovider" id="authbasicprovider">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¤³¤Î°ÌÃÖ¤ËÂФ¹¤ëǧ¾Ú¥×¥í¥Ð¥¤¥À¤òÀßÄꤷ¤Þ¤¹¡£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AuthBasicProvider On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_auth_basic</td></tr>
-</table>
- <p><code class="directive">AuthBasicProvider</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢
- ¤³¤Î°ÌÃÖ¤ËÂФ¹¤ë¥æ¡¼¥¶Ç§¾Ú¤ËÍѤ¤¤é¤ì¤ëǧ¾Ú¥×¥í¥Ð¥¤¥À¤òÀßÄꤷ¤Þ¤¹¡£
- <code>On</code> ¤ËÀßÄꤹ¤ë¤È¥Ç¥Õ¥©¥ë¥È¤Îǧ¾Ú¥×¥í¥Ð¥¤¥À
- (<code>file</code>) ¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£<code>file</code>
- ¥×¥í¥Ð¥¤¥À¤Ï <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
- ¤³¤Î¥â¥¸¥å¡¼¥ë¤¬¥µ¡¼¥Ð¤ËÆþ¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Location /secure&gt;<br />
- <span class="indent">
- AuthBasicProvider dbm<br />
- AuthDBMType SDBM<br />
- AuthDBMUserFile /www/etc/dbmpasswd<br />
- Require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>ǧ¾Ú¥×¥í¥Ð¥¤¥À¤Ë¤Ä¤¤¤Æ¤Ï
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ¤È <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- ¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p><code>Off</code> ¤Ï¥×¥í¥Ð¥¤¥À¥ê¥¹¥È¤ò¥¯¥ê¥¢¤·¤Æ¡¢¥Ç¥Õ¥©¥ë¥È¤Î
- ¾õÂÖ¤ËÌᤷ¤Þ¤¹¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_auth_basic.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_auth_basic.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_basic.html.ko.euc-kr b/docs/manual/mod/mod_auth_basic.html.ko.euc-kr
deleted file mode 100644
index e7b21f102f..0000000000
--- a/docs/manual/mod/mod_auth_basic.html.ko.euc-kr
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_auth_basic - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_auth_basic</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_auth_basic.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_auth_basic.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>Basic authentication</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>auth_basic_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_auth_basic.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ÇØ´ç Á¦°øÀÚ(provider)¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚº°·Î
- Á¢±ÙÀ» Á¦ÇÑÇÏ´Â HTTP Basic AuthenticationÀ» Á¦°øÇÑ´Ù.
- HTTP Digest AuthenticationÀº <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>°¡
- Á¦°øÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authbasicauthoritative">AuthBasicAuthoritative</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authbasicprovider">AuthBasicProvider</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthBasicAuthoritative" id="AuthBasicAuthoritative">AuthBasicAuthoritative</a> <a name="authbasicauthoritative" id="authbasicauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõ°ú ±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ¿¡ ³Ñ°ÜÁÙÁö °áÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthBasicAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthBasicAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_basic</td></tr>
-</table>
- <p><code class="directive">AuthBasicAuthoritative</code> Áö½Ã¾î¸¦
- <code>Off</code>·Î ¼³Á¤Çϸé ÁÖ¾îÁø »ç¿ëÀÚ ¾ÆÀ̵𿡠ÇØ´çÇÏ´Â
- <strong>»ç¿ëÀÚ ¾ÆÀ̵ð</strong>³ª <strong>±ÔÄ¢</strong>À»
- ãÀ» ¼ö ¾ø´Â °æ¿ì ÀÎÁõ°ú ±ÇÇѺο© ¸ðµÎ¸¦ (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁØ´Ù. ÁÖ¾îÁø »ç¿ëÀÚ
- ¾ÆÀ̵𳪠±ÔÄ¢À» ã¾Ò´Ù¸é º¸Å붧¿Í °°ÀÌ ¾ÏÈ£¿Í Á¢±ÙÇã¿ë¿©ºÎ¸¦
- °Ë»çÇÏ°í, ½ÇÆÐÇϸé "Authentication Required (ÀÎÁõ ÇÊ¿ä)"
- ÀÀ´äÀ» ÇÑ´Ù.</p>
-
- <p>±×·¡¼­ ¿©·¯ ¸ðµâÀÇ µ¥ÀÌÅͺ£À̽º¿¡ »ç¿ëÀÚ ¾ÆÀ̵𰡠Àְųª
- À¯È¿ÇÑ <code class="directive"><a href="../mod/core.html#require">Require</a></code> Áö½Ã¾î¸¦
- ¿©·¯ ¸ðµâ¿¡ Àû¿ëÇϸé, ù¹ø° ¸ðµâÀÌ »ç¿ëÀÚ¸¦ °Ë»çÇÏ°í,
- <code class="directive">AuthBasicAuthoritative</code> ¼³Á¤°ú °ü°è¾øÀÌ
- Á¢±ÙÀ» ³Ñ±âÁö¾Ê´Â´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â »ç¿ëÀÚ ¾ÆÀ̵ð¿Í
- ±ÔÄ¢ÀÎ °æ¿ì "Authentication Required (ÀÎÁõ ÇÊ¿ä)" ÀÀ´äÀ»
- ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ ¼³Á¤ÇÏÁö¾ÊÀ¸¸é ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô À¯ÁöµÇ¸ç,
- NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthBasicProvider" id="AuthBasicProvider">AuthBasicProvider</a> <a name="authbasicprovider" id="authbasicprovider">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÌ À§Ä¡¿¡ ´ëÇÑ ÀÎÁõÁ¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthBasicProvider On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_basic</td></tr>
-</table>
- <p><code class="directive">AuthBasicProvider</code> Áö½Ã¾î´Â ÀÌ
- À§Ä¡¿¡¼­ »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ Á¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. °ªÀÌ
- <code>On</code>ÀÌ¸é ±âº»Á¦°øÀÚ(<code>file</code>)¸¦ ¼±ÅÃÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> ¸ðµâÀÌ <code>file</code>
- Á¦°øÀÚ¸¦ ±¸ÇöÇϱ⶧¹®¿¡ ¼­¹ö¿¡ ÀÌ ¸ðµâÀÌ ÀÖ´ÂÁö È®ÀÎÇؾß
- ÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;Location /secure&gt;<br />
- <span class="indent">
- AuthBasicProvider dbm<br />
- AuthDBMType SDBM<br />
- AuthDBMUserFile /www/etc/dbmpasswd<br />
- Require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>Á¦°øÀÚ´Â <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>°ú
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>À» Âü°íÇ϶ó.</p>
-
- <p>°ªÀÌ <code>Off</code>À̸é Á¦°øÀÚ ¸ñ·ÏÀ» Áö¿ì°í ±âº»»óÅ·Î
- µ¹¾Æ°£´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_auth_basic.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_auth_basic.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_auth_basic.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_basic.xml b/docs/manual/mod/mod_auth_basic.xml
deleted file mode 100644
index 7c69569f18..0000000000
--- a/docs/manual/mod/mod_auth_basic.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_auth_basic.xml.meta">
-
-<name>mod_auth_basic</name>
-<description>Basic authentication</description>
-<status>Base</status>
-<sourcefile>mod_auth_basic.c</sourcefile>
-<identifier>auth_basic_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module allows the use of HTTP Basic Authentication to
- restrict access by looking up users in the given providers.
- HTTP Digest Authentication is provided by
- <module>mod_auth_digest</module>.</p>
-</summary>
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-
-<directivesynopsis>
-<name>AuthBasicProvider</name>
-<description>Sets the authentication provider(s) for this location</description>
-<syntax>AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</syntax>
-<default>AuthBasicProvider On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthBasicProvider</directive> directive sets
- which provider is used to authenticate the users for this location.
- Setting the value to <code>On</code> will choose the default provider
- (<code>file</code>). Since the <code>file</code> provider is implemented
- by the <module>mod_authn_file</module> module, you have to make sure,
- that the module is present in the server.</p>
-
- <example><title>Example</title>
- &lt;Location /secure&gt;<br />
- <indent>
- AuthBasicProvider dbm<br />
- AuthDBMType SDBM<br />
- AuthDBMUserFile /www/etc/dbmpasswd<br />
- Require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>See <module>mod_authn_dbm</module> and <module>mod_authn_file</module>
- for providers.</p>
-
- <p>The value <code>Off</code> clears the provider list and sets it back
- to the default.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthBasicAuthoritative</name>
-<description>Sets whether authorization and authentication are passed to
-lower level modules</description>
-<syntax>AuthBasicAuthoritative On|Off</syntax>
-<default>AuthBasicAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthBasicAuthoritative</directive> directive
- explicitly to <code>Off</code> allows for both
- authentication and authorization to be passed on to lower level
- modules (as defined in the <code>modules.c</code> files) if there is
- <strong>no userID</strong> or <strong>rule</strong> matching the
- supplied userID. If there is a userID and/or rule specified, the usual
- password and access checks will be applied and a failure will give
- an "Authentication Required" reply.</p>
-
- <p>So if a userID appears in the database of more than one module;
- or if a valid <directive module="core">Require</directive>
- directive applies to more than one module; then the first module
- will verify the credentials; and no access is passed on;
- regardless of the <directive>AuthBasicAuthoritative</directive>
- setting.</p>
-
- <p>By default control is not passed on and an unknown userID or
- rule will result in an "Authentication Required" reply. Not setting
- it thus keeps the system secure and forces an NCSA compliant
- behaviour.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth_basic.xml.ja b/docs/manual/mod/mod_auth_basic.xml.ja
deleted file mode 100644
index 7dd187545e..0000000000
--- a/docs/manual/mod/mod_auth_basic.xml.ja
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_auth_basic.xml.meta">
-
-<name>mod_auth_basic</name>
-<description>$B4pK\G'>Z(B</description>
-<status>Base</status>
-<sourcefile>mod_auth_basic.c</sourcefile>
-<identifier>auth_basic_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p>$BM?$($i$l$?%W%m%P%$%@(B ($BLuCm(B: $BG'>Z$G$N>H2q$r9T$&Ld$$9g$o$;@h(B)
- $B$G%f!<%6$r8!:w$7!"(BHTTP $B4pK\G'>Z$G%"%/%;%9@)8B$G$-$k$h$&$K$J$j$^$9!#(B
- HTTP $B%@%$%8%'%9%HG'>Z$K$D$$$F$O(B <module>mod_auth_digest</module>
- $B$GDs6!$5$l$^$9!#(B</p>
-</summary>
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-
-<directivesynopsis>
-<name>AuthBasicProvider</name>
-<description>$B$3$N0LCV$KBP$9$kG'>Z%W%m%P%$%@$r@_Dj$7$^$9!#(B</description>
-<syntax>AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</syntax>
-<default>AuthBasicProvider On</default>
-<contextlist><context>directory</context><context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthBasicProvider</directive> $B%G%#%l%/%F%#%V$G!"(B
- $B$3$N0LCV$KBP$9$k%f!<%6G'>Z$KMQ$$$i$l$kG'>Z%W%m%P%$%@$r@_Dj$7$^$9!#(B
- <code>On</code> $B$K@_Dj$9$k$H%G%U%)%k%H$NG'>Z%W%m%P%$%@(B
- (<code>file</code>) $B$,;HMQ$5$l$^$9!#(B<code>file</code>
- $B%W%m%P%$%@$O(B <module>mod_authn_file</module>
- $B%b%8%e!<%k$G<BAu$5$l$F$$$^$9$N$G!"(B
- $B$3$N%b%8%e!<%k$,%5!<%P$KF~$C$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B</p>
-
- <example><title>Example</title>
- &lt;Location /secure&gt;<br />
- <indent>
- AuthBasicProvider dbm<br />
- AuthDBMType SDBM<br />
- AuthDBMUserFile /www/etc/dbmpasswd<br />
- Require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>$BG'>Z%W%m%P%$%@$K$D$$$F$O(B
- <module>mod_authn_dbm</module> $B$H(B <module>mod_authn_file</module>
- $B$r$4Mw2<$5$$!#(B</p>
-
- <p><code>Off</code> $B$O%W%m%P%$%@%j%9%H$r%/%j%"$7$F!"%G%U%)%k%H$N(B
- $B>uBV$KLa$7$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthBasicAuthoritative</name>
-<description>$BG'>Z$H>5G'$r!"$h$jDc$$%l%Y%k$N%b%8%e!<%k$K0\9T$5$;$k$+$r(B
-$B@_Dj$7$^$9!#(B</description>
-<syntax>AuthBasicAuthoritative On|Off</syntax>
-<default>AuthBasicAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthBasicAuthoritative</directive>
- $B%G%#%l%/%F%#%V$GL@<(E*$K(B <code>Off</code>$B$K@_Dj$9$k$H!"(B
- $BM?$($i$l$?G'>Z%f!<%6(B ID $B$KBP$7$F(B<strong>$B%f!<%6(B ID $B$,$J$$(B</strong>
- $B$^$?$O(B<strong>$B%k!<%k$,$J$$(B</strong>$B>l9g$K!"(B
- $BG'>Z$H>5G'$NN>J}$N%W%m%;%9$,!"(B
- $B$h$jDc$$%l%Y%k$N%b%8%e!<%k(B (<code>modules.c</code> $B%U%!%$%k$GDj5A(B) $B$K0\9T$9$k$h$&$K$G$-$^$9!#(B
- $B%f!<%6(B ID $B$,$"$k!"$+$D$^$?$O!"%k!<%k$,;XDj$5$l$F$$$k>l9g$O!"(B
- $BDL>o$N%Q%9%o!<%I$H%"%/%;%9%A%'%C%/$,E,MQ$5$l$F!"(B
- $BG'>Z$K<:GT$9$k$H(B "Authentication Required" $B1~Ez$,JV$5$l$^$9!#(B</p>
-
- <p>$B$G$9$+$i!"Fs$D0J>e$N%b%8%e!<%k$N%G!<%?%Y!<%9$GF10l$N(B
- $B%f!<%6(B ID $B$,8=$o$l$?$j!"(B
- $B$^$?$O!"@5$7$$(B <directive module="core">Require</directive>
- $B%G%#%l%/%F%#%V$,Fs$D0J>e$N%b%8%e!<%k$G8=$o$l$?$j$7$?>l9g$O!"(B
- $B0l$DL\$N%b%8%e!<%k$,G'Dj$r9T$C$F!"(B<directive>AuthAuthoritative</directive>
- $B@_Dj$K4X$o$i$:!"%"%/%;%9$O0\9T$7$^$;$s!#(B</p>
-
- <p>$B%G%U%)%k%H$G$O!"@)8f$O0\9T$7$^$;$s!#$=$7$F!"L$CN$N%f!<%6(B ID $B$d(B
- $B%k!<%k$,$"$C$F$b(B "Authentication Required" $B1~Ez$,JV$5$l$^$9!#(B
- $B$G$9$+$i!"$3$N%G%#%l%/%F%#%V$r@_Dj$7$J$$$3$H$G%7%9%F%`$N0BA4$r0];}$G$-$F!"$^$?!"(B
- NCSA $B=`5r$N5sF0$r6/@)$G$-$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth_basic.xml.ko b/docs/manual/mod/mod_auth_basic.xml.ko
deleted file mode 100644
index 6ec4fb832f..0000000000
--- a/docs/manual/mod/mod_auth_basic.xml.ko
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_auth_basic.xml.meta">
-
-<name>mod_auth_basic</name>
-<description>Basic authentication</description>
-<status>Base</status>
-<sourcefile>mod_auth_basic.c</sourcefile>
-<identifier>auth_basic_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ÇØ´ç Á¦°øÀÚ(provider)¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚº°·Î
- Á¢±ÙÀ» Á¦ÇÑÇÏ´Â HTTP Basic AuthenticationÀ» Á¦°øÇÑ´Ù.
- HTTP Digest AuthenticationÀº <module>mod_auth_digest</module>°¡
- Á¦°øÇÑ´Ù.</p>
-</summary>
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-
-<directivesynopsis>
-<name>AuthBasicProvider</name>
-<description>ÀÌ À§Ä¡¿¡ ´ëÇÑ ÀÎÁõÁ¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</syntax>
-<default>AuthBasicProvider On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthBasicProvider</directive> Áö½Ã¾î´Â ÀÌ
- À§Ä¡¿¡¼­ »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ Á¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. °ªÀÌ
- <code>On</code>ÀÌ¸é ±âº»Á¦°øÀÚ(<code>file</code>)¸¦ ¼±ÅÃÇÑ´Ù.
- <module>mod_authn_file</module> ¸ðµâÀÌ <code>file</code>
- Á¦°øÀÚ¸¦ ±¸ÇöÇϱ⶧¹®¿¡ ¼­¹ö¿¡ ÀÌ ¸ðµâÀÌ ÀÖ´ÂÁö È®ÀÎÇؾß
- ÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- &lt;Location /secure&gt;<br />
- <indent>
- AuthBasicProvider dbm<br />
- AuthDBMType SDBM<br />
- AuthDBMUserFile /www/etc/dbmpasswd<br />
- Require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>Á¦°øÀÚ´Â <module>mod_authn_dbm</module>°ú
- <module>mod_authn_file</module>À» Âü°íÇ϶ó.</p>
-
- <p>°ªÀÌ <code>Off</code>À̸é Á¦°øÀÚ ¸ñ·ÏÀ» Áö¿ì°í ±âº»»óÅ·Î
- µ¹¾Æ°£´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthBasicAuthoritative</name>
-<description>ÀÎÁõ°ú ±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ¿¡ ³Ñ°ÜÁÙÁö °áÁ¤ÇÑ´Ù</description>
-<syntax>AuthBasicAuthoritative On|Off</syntax>
-<default>AuthBasicAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthBasicAuthoritative</directive> Áö½Ã¾î¸¦
- <code>Off</code>·Î ¼³Á¤Çϸé ÁÖ¾îÁø »ç¿ëÀÚ ¾ÆÀ̵𿡠ÇØ´çÇÏ´Â
- <strong>»ç¿ëÀÚ ¾ÆÀ̵ð</strong>³ª <strong>±ÔÄ¢</strong>À»
- ãÀ» ¼ö ¾ø´Â °æ¿ì ÀÎÁõ°ú ±ÇÇѺο© ¸ðµÎ¸¦ (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁØ´Ù. ÁÖ¾îÁø »ç¿ëÀÚ
- ¾ÆÀ̵𳪠±ÔÄ¢À» ã¾Ò´Ù¸é º¸Å붧¿Í °°ÀÌ ¾ÏÈ£¿Í Á¢±ÙÇã¿ë¿©ºÎ¸¦
- °Ë»çÇÏ°í, ½ÇÆÐÇϸé "Authentication Required (ÀÎÁõ ÇÊ¿ä)"
- ÀÀ´äÀ» ÇÑ´Ù.</p>
-
- <p>±×·¡¼­ ¿©·¯ ¸ðµâÀÇ µ¥ÀÌÅͺ£À̽º¿¡ »ç¿ëÀÚ ¾ÆÀ̵𰡠Àְųª
- À¯È¿ÇÑ <directive module="core">Require</directive> Áö½Ã¾î¸¦
- ¿©·¯ ¸ðµâ¿¡ Àû¿ëÇϸé, ù¹ø° ¸ðµâÀÌ »ç¿ëÀÚ¸¦ °Ë»çÇÏ°í,
- <directive>AuthBasicAuthoritative</directive> ¼³Á¤°ú °ü°è¾øÀÌ
- Á¢±ÙÀ» ³Ñ±âÁö¾Ê´Â´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â »ç¿ëÀÚ ¾ÆÀ̵ð¿Í
- ±ÔÄ¢ÀÎ °æ¿ì "Authentication Required (ÀÎÁõ ÇÊ¿ä)" ÀÀ´äÀ»
- ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ ¼³Á¤ÇÏÁö¾ÊÀ¸¸é ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô À¯ÁöµÇ¸ç,
- NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth_basic.xml.meta b/docs/manual/mod/mod_auth_basic.xml.meta
deleted file mode 100644
index ef31679fba..0000000000
--- a/docs/manual/mod/mod_auth_basic.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_auth_basic</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_auth_digest.html b/docs/manual/mod/mod_auth_digest.html
deleted file mode 100644
index ff5152833c..0000000000
--- a/docs/manual/mod/mod_auth_digest.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_auth_digest.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_auth_digest.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_auth_digest.html.en b/docs/manual/mod/mod_auth_digest.html.en
deleted file mode 100644
index 795cf5165a..0000000000
--- a/docs/manual/mod/mod_auth_digest.html.en
+++ /dev/null
@@ -1,299 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_auth_digest - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_auth_digest</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_digest.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_auth_digest.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>User authentication using MD5
- Digest Authentication.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>auth_digest_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_auth_digest.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module implements HTTP Digest Authentication. However, it
- has not been extensively tested and is therefore marked
- experimental.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestdomain">AuthDigestDomain</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestprovider">AuthDigestProvider</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestqop">AuthDigestQop</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestshmemsize">AuthDigestShmemSize</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#using">Using Digest Authentication</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Using Digest Authentication</a></h2>
-
- <p>Using MD5 Digest authentication is very simple. Simply set
- up authentication normally, using <code>AuthType Digest</code> and
- <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code>
- instead of the normal <code>AuthType Basic</code> and
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>.
- Then add a <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> directive containing at least the root
- URI(s) for this protection space.</p>
-
- <p>Appropriate user (text) files can be created using the
- <a href="../programs/htdigest.html">htdigest</a> tool.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- &lt;Location /private/&gt;<br />
- <span class="indent">
- AuthType Digest<br />
- AuthName "private area"<br />
- AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
- <br />
- AuthDigestProvider file<br />
- AuthUserFile /web/auth/.digest_pw<br />
- Require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="note"><h3>Note</h3>
- <p>Digest authentication provides a more secure password system
- than Basic authentication, but only works with supporting
- browsers. As of November 2002, the major browsers that support digest
- authentication are <a href="http://www.opera.com/">Opera</a>, <a href="http://www.microsoft.com/windows/ie/">MS Internet
- Explorer</a> (fails when used with a query string), <a href="http://www.w3.org/Amaya/">Amaya</a>, <a href="http://www.mozilla.org">Mozilla</a> and <a href="http://channels.netscape.com/ns/browsers/download.jsp">Netscape</a> since version 7. Since digest
- authentication is not as widely implemented as basic
- authentication, you should use it only in controlled environments.</p>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestAlgorithm" id="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm" id="authdigestalgorithm">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Selects the algorithm used to calculate the challenge and
-response hashes in digest authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestAlgorithm MD5|MD5-sess</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDigestAlgorithm MD5</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p>The <code class="directive">AuthDigestAlgorithm</code> directive
- selects the algorithm used to calculate the challenge and response
- hashes.</p>
-
- <div class="note">
- <code>MD5-sess</code> is not correctly implemented yet.
- </div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestDomain" id="AuthDigestDomain">AuthDigestDomain</a> <a name="authdigestdomain" id="authdigestdomain">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>URIs that are in the same protection space for digest
-authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p>The <code class="directive">AuthDigestDomain</code> directive allows
- you to specify one or more URIs which are in the same protection
- space (<em>i.e.</em> use the same realm and username/password info).
- The specified URIs are prefixes; the client will assume
- that all URIs "below" these are also protected by the same
- username/password. The URIs may be either absolute URIs (<em>i.e.</em>
- including a scheme, host, port, etc.) or relative URIs.</p>
-
- <p>This directive <em>should</em> always be specified and
- contain at least the (set of) root URI(s) for this space.
- Omitting to do so will cause the client to send the
- Authorization header for <em>every request</em> sent to this
- server. Apart from increasing the size of the request, it may
- also have a detrimental effect on performance if <code class="directive"><a href="#authdigestnccheck">AuthDigestNcCheck</a></code> is on.</p>
-
- <p>The URIs specified can also point to different servers, in
- which case clients (which understand this) will then share
- username/password info across multiple servers without
- prompting the user each time. </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestNcCheck" id="AuthDigestNcCheck">AuthDigestNcCheck</a> <a name="authdigestnccheck" id="authdigestnccheck">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables or disables checking of the nonce-count sent by the
-server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestNcCheck On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDigestNcCheck Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <div class="note">
- Not implemented yet.
- </div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestNonceFormat" id="AuthDigestNonceFormat">AuthDigestNonceFormat</a> <a name="authdigestnonceformat" id="authdigestnonceformat">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines how the nonce is generated</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestNonceFormat <var>format</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <div class="note">Not implemented yet.</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestNonceLifetime" id="AuthDigestNonceLifetime">AuthDigestNonceLifetime</a> <a name="authdigestnoncelifetime" id="authdigestnoncelifetime">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>How long the server nonce is valid</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestNonceLifetime <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDigestNonceLifetime 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p>The <code class="directive">AuthDigestNonceLifetime</code> directive
- controls how long the server nonce is valid. When the client
- contacts the server using an expired nonce the server will send
- back a 401 with <code>stale=true</code>. If <var>seconds</var> is
- greater than 0 then it specifies the amount of time for which the
- nonce is valid; this should probably never be set to less than 10
- seconds. If <var>seconds</var> is less than 0 then the nonce never
- expires.
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestProvider" id="AuthDigestProvider">AuthDigestProvider</a> <a name="authdigestprovider" id="authdigestprovider">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the authentication provider(s) for this location</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDigestProvider On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p>The <code class="directive">AuthDigestProvider</code> directive sets
- which provider is used to authenticate the users for this location.
- Setting the value to <code>On</code> will choose the default provider
- (<code>file</code>). Since the <code>file</code> provider is implemented
- by the <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> module, you have to make sure,
- that the module is present in the server.</p>
-
- <p>See <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- for providers.</p>
-
- <p>The value <code>Off</code> clears the provider list and sets it back
- to the default.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestQop" id="AuthDigestQop">AuthDigestQop</a> <a name="authdigestqop" id="authdigestqop">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines the quality-of-protection to use in digest
-authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestQop none|auth|auth-int [auth|auth-int]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDigestQop auth</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p>The <code class="directive">AuthDigestQop</code> directive determines
- the <dfn>quality-of-protection</dfn> to use. <code>auth</code> will
- only do authentication (username/password); <code>auth-int</code> is
- authentication plus integrity checking (an MD5 hash of the entity
- is also computed and checked); <code>none</code> will cause the module
- to use the old RFC-2069 digest algorithm (which does not include
- integrity checking). Both <code>auth</code> and <code>auth-int</code> may
- be specified, in which the case the browser will choose which of
- these to use. <code>none</code> should only be used if the browser for
- some reason does not like the challenge it receives otherwise.</p>
-
- <div class="note">
- <code>auth-int</code> is not implemented yet.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestShmemSize" id="AuthDigestShmemSize">AuthDigestShmemSize</a> <a name="authdigestshmemsize" id="authdigestshmemsize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The amount of shared memory to allocate for keeping track
-of clients</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDigestShmemSize <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDigestShmemSize 1000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p>The <code class="directive">AuthDigestShmemSize</code> directive defines
- the amount of shared memory, that will be allocated at the server
- startup for keeping track of clients. Note that the shared memory
- segment cannot be set less than the space that is necessary for
- tracking at least <em>one</em> client. This value is dependant on your
- system. If you want to find out the exact value, you may simply
- set <code class="directive">AuthDigestShmemSize</code> to the value of
- <code>0</code> and read the error message after trying to start the
- server.</p>
-
- <p>The <var>size</var> is normally expressed in Bytes, but you
- may let the number follow a <code>K</code> or an <code>M</code> to
- express your value as KBytes or MBytes. For example, the following
- directives are all equivalent:</p>
-
- <div class="example"><p><code>
- AuthDigestShmemSize 1048576<br />
- AuthDigestShmemSize 1024K<br />
- AuthDigestShmemSize 1M
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_digest.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_auth_digest.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_digest.html.ko.euc-kr b/docs/manual/mod/mod_auth_digest.html.ko.euc-kr
deleted file mode 100644
index 69fa384998..0000000000
--- a/docs/manual/mod/mod_auth_digest.html.ko.euc-kr
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_auth_digest - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_auth_digest</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_auth_digest.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_auth_digest.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>MD5 Digest AuthenticationÀ» »ç¿ëÇÑ »ç¿ëÀÚÀÎÁõ.</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>auth_digest_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_auth_digest.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº HTTP Digest AuthenticationÀ» ±¸ÇöÇÑ´Ù.
- ±×·¯³ª ¸¹Àº Å×½ºÆ®¸¦ °ÅÄ¡Áö ¾ÊÀº ½ÇÇèÀûÀÎ ¸ðµâÀÌ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestalgorithm">AuthDigestAlgorithm</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestdomain">AuthDigestDomain</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestnccheck">AuthDigestNcCheck</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestnonceformat">AuthDigestNonceFormat</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestprovider">AuthDigestProvider</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestqop">AuthDigestQop</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdigestshmemsize">AuthDigestShmemSize</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#using">Digest Authentication »ç¿ëÇϱâ</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Digest Authentication »ç¿ëÇϱâ</a></h2>
-
- <p>MD5 Digest authenticationÀº ¸Å¿ì ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- <code>AuthType Basic</code>°ú <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ´ë½Å
- <code>AuthType Digest</code>¿Í <code class="directive"><a href="#authdigestprovider">AuthDigestProvider</a></code>¸¦
- »ç¿ëÇÏ¿© °£´ÜÈ÷ ÀÎÁõÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ÃÖ¼ÒÇÑ º¸È£ÇÏ·Á´Â
- ¿µ¿ªÀÇ ±âº» URIÀ» <code class="directive"><a href="#authdigestdomain">AuthDigestDomain</a></code> Áö½Ã¾î¿¡ »ç¿ëÇÑ´Ù.</p>
-
- <p><a href="../programs/htdigest.html">htdigest</a> µµ±¸¸¦
- »ç¿ëÇÏ¿© »ç¿ëÀÚ (¹®ÀÚ)ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- &lt;Location /private/&gt;<br />
- <span class="indent">
- AuthType Digest<br />
- AuthName "private area"<br />
- AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
- <br />
- AuthDigestProvider file<br />
- AuthUserFile /web/auth/.digest_pw<br />
- Require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p>Digest authenticationÀº Basic authenticationº¸´Ù ´õ
- ¾ÈÀüÇÑ ¾ÏÈ£½Ã½ºÅÛÀ» Á¦°øÇÏÁö¸¸, ºê¶ó¿ìÀú°¡ Áö¿øÇØ¾ß ÇÑ´Ù.
- 2002³â 11¿ù ÇöÀç digest authenticationÀ» Áö¿øÇÏ´Â ºê¶ó¿ìÀú¿¡´Â
- <a href="http://www.opera.com/">Opera</a>, (ÁúÀǹ®ÀÚ¿­°ú
- ÇÔ²² »ç¿ëÇÒ ¼ö ¾øÁö¸¸) <a href="http://www.microsoft.com/windows/ie/">MS Internet
- Explorer</a>, <a href="http://www.w3.org/Amaya/">Amaya</a>, <a href="http://www.mozilla.org">Mozilla</a>, ¹öÀü 7 ÀÌÈÄÀÇ
- <a href="http://channels.netscape.com/ns/browsers/download.jsp">Netscape</a> µîÀÌ ÀÖ´Ù. digest authenticationÀÌ basic
- authentication ¸¸Å­ ³Î¸® ±¸ÇöµÇÁö ¾Ê¾Ò±â¶§¹®¿¡ ÁÖÀÇÇؼ­
- »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestAlgorithm" id="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm" id="authdigestalgorithm">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>digest authentication¿¡¼­ challenge¿Í response
-hash¸¦ °è»êÇÏ´Â ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestAlgorithm MD5|MD5-sess</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDigestAlgorithm MD5</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p><code class="directive">AuthDigestAlgorithm</code> Áö½Ã¾î´Â
- challenge¿Í response hash¸¦ °è»êÇÏ´Â ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÑ´Ù.</p>
-
- <div class="note">
- <code>MD5-sess</code>´Â ¾ÆÁ÷ ¿ÏÀüÈ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.
- </div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestDomain" id="AuthDigestDomain">AuthDigestDomain</a> <a name="authdigestdomain" id="authdigestdomain">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>digest authentication¿¡¼­ °°Àº º¸È£¿µ¿ª¿¡ ¼ÓÇÏ´Â
-URIµé</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p><code class="directive">AuthDigestDomain</code> Áö½Ã¾î´Â °°Àº
- º¸È£¿µ¿ª¿¡ ÀÖ´Â (<em>¿¹¸¦ µé¾î</em> °°Àº ¿µ¿ª°ú »ç¿ëÀÚ¸í/¾ÏÈ£
- Á¤º¸¸¦ »ç¿ëÇÏ´Â) URIµéÀ» ÁöÁ¤ÇÑ´Ù. ÁöÁ¤ÇÑ URI´Â Á¢µÎ»ç·Î
- »ç¿ëÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â URI "¾Æ·¡" ¸ðµÎ¸¦
- °°Àº »ç¿ëÀÚ¸í/¾ÏÈ£·Î º¸È£ÇÑ´Ù°í °¡Á¤ÇÑ´Ù. URI´Â
- (<em>Áï</em>, ½ºÅ´(scheme), È£½ºÆ®, Æ÷Æ® µîÀ» Æ÷ÇÔÇÏ´Â)
- Àý´ë URLÀ̰ųª »ó´ë URIÀÌ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾î´Â Ç×»ó <em>ÁöÁ¤Çؾß</em> Çϸç, ÃÖ¼ÒÇÑ ¿µ¿ªµéÀÇ
- ±âº» URI(µé)¸¦ Æ÷ÇÔ<em>Çؾß</em> ÇÑ´Ù. »ý·«Çϸé Ŭ¶óÀ̾ðÆ®´Â
- ÀÌ ¼­¹ö·Î º¸³»´Â <em>¸ðµç ¿äû</em>¿¡ Authorization Çì´õ¸¦
- Æ÷ÇÔÇÑ´Ù. ±×·¯¸é ¿äûÀÇ Å©±â°¡ Ä¿Áö¸ç, <code class="directive"><a href="#authdigestnccheck">AuthDigestNcCheck</a></code>¸¦
- »ç¿ëÇÑ´Ù¸é ¼º´É¿¡ ³ª»Û ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p>´Ù¸¥ ¼­¹öÀÇ URI¸¦ ÁöÁ¤Çϸé, (À̸¦ ÀÌÇØÇÏ´Â) Ŭ¶óÀ̾ðÆ®´Â
- ¿©·¯ ¼­¹ö¸¶´Ù ¸Å¹ø »ç¿ëÀÚ¿¡°Ô ¹¯Áö¾Ê°í °°Àº »ç¿ëÀÚ¸í/¾ÏÈ£¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestNcCheck" id="AuthDigestNcCheck">AuthDigestNcCheck</a> <a name="authdigestnccheck" id="authdigestnccheck">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼­¹ö°¡ º¸³»´Â nonce-count¸¦ °Ë»çÇÒÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestNcCheck On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDigestNcCheck Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <div class="note">
- ¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.
- </div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestNonceFormat" id="AuthDigestNonceFormat">AuthDigestNonceFormat</a> <a name="authdigestnonceformat" id="authdigestnonceformat">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>nonce¸¦ ¸¸µå´Â ¹æ¹ýÀ» °áÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestNonceFormat <var>format</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <div class="note">¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestNonceLifetime" id="AuthDigestNonceLifetime">AuthDigestNonceLifetime</a> <a name="authdigestnoncelifetime" id="authdigestnoncelifetime">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼­¹ö nonce°¡ À¯È¿ÇÑ ±â°£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestNonceLifetime <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDigestNonceLifetime 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p><code class="directive">AuthDigestNonceLifetime</code> Áö½Ã¾î´Â
- ¼­¹ö nonce°¡ À¯È¿ÇÑ ±â°£À» Á¶ÀýÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¸¸±âµÈ
- nonce¸¦ °¡Áö°í ¼­¹ö¿¡ Á¢±ÙÇÏ¸é ¼­¹ö´Â <code>stale=true</code>¿Í
- ÇÔ²² 401À» ¹ÝȯÇÑ´Ù. <var>seconds</var>°¡ 0º¸´Ù Å©¸é nonce°¡
- À¯È¿ÇÑ ±â°£À» ÁöÁ¤ÇÑ´Ù. ¾Æ¸¶µµ 10 Ãʺ¸´Ù ÀÛ°Ô ¼³Á¤ÇÏ¸é ¾ÈµÈ´Ù.
- <var>seconds</var>°¡ 0º¸´Ù ÀÛÀ¸¸é nonce´Â ¿µ¿øÈ÷ ¸¸±âµÇÁö
- ¾Ê´Â´Ù.
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestProvider" id="AuthDigestProvider">AuthDigestProvider</a> <a name="authdigestprovider" id="authdigestprovider">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÌ À§Ä¡¿¡ ´ëÇÑ ÀÎÁõÁ¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDigestProvider On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p><code class="directive">AuthDigestProvider</code> Áö½Ã¾î´Â ÀÌ
- À§Ä¡¿¡¼­ »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ Á¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. °ªÀÌ
- <code>On</code>ÀÌ¸é ±âº»Á¦°øÀÚ(<code>file</code>)¸¦ »ç¿ëÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> ¸ðµâÀÌ <code>file</code>
- Á¦°øÀÚ¸¦ ±¸ÇöÇϱ⶧¹®¿¡ ¼­¹ö¿¡ ÀÌ ¸ðµâÀÌ ÀÖ´ÂÁö È®ÀÎÇؾß
- ÇÑ´Ù.</p>
-
- <p>Á¦°øÀÚ´Â <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>°ú
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>À» Âü°íÇ϶ó.</p>
-
- <p>°ªÀÌ <code>Off</code>À̸é Á¦°øÀÚ ¸ñ·ÏÀ» Áö¿ì°í ±âº»»óÅ·Î
- µ¹¾Æ°£´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestQop" id="AuthDigestQop">AuthDigestQop</a> <a name="authdigestqop" id="authdigestqop">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>digest authentication°¡ »ç¿ëÇÒ
-º¸È£¼öÁØ(quality-of-protection)À» ÁöÁ¤ÇÑ´Ù.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestQop none|auth|auth-int [auth|auth-int]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDigestQop auth</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p><code class="directive">AuthDigestQop</code> Áö½Ã¾î´Â
- <dfn>º¸È£¼öÁØ(quality-of-protection)</dfn>À» ÁöÁ¤ÇÑ´Ù.
- <code>auth</code>´Â (»ç¿ëÀÚ¸í/¾ÏÈ£) ÀÎÁõ¸¸ ÇÏ°í,
- <code>auth-int</code>´Â ÀÎÁõ°ú ¿Ï°á¼º °Ë»ç¸¦ (MD5 Çؽ¬µµ
- °è»êÇÏ¿© °Ë»çÇÑ´Ù) ÇÑ´Ù. <code>none</code>Àº (¿Ï°á¼º °Ë»ç¸¦
- ÇÏÁö¾Ê´Â) ¿À·¡µÈ RFC-2069 digest ¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù.
- <code>auth</code>¿Í <code>auth-int</code>¸¦ ¸ðµÎ ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ºê¶ó¿ìÀú´Â ¾î¶² °ÍÀ» »ç¿ëÇÒÁö ¼±ÅÃÇÑ´Ù.
- ºê¶ó¿ìÀú°¡ ¾î´ø ÀÌÀ¯¿¡¼­°Ç challenge¸¦ ÁÁ¾ÆÇÏÁö ¾Ê´Â´Ù¸é
- <code>none</code>À» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
- <div class="note">
- <code>auth-int</code>´Â ¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDigestShmemSize" id="AuthDigestShmemSize">AuthDigestShmemSize</a> <a name="authdigestshmemsize" id="authdigestshmemsize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ÇÒ´çÇÏ´Â °øÀ¯¸Þ¸ð¸®·®</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDigestShmemSize <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDigestShmemSize 1000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_auth_digest</td></tr>
-</table>
- <p><code class="directive">AuthDigestShmemSize</code> Áö½Ã¾î´Â
- Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ¼­¹ö°¡ ½ÃÀÛÇÒ¶§ ÇÒ´çÇÏ´Â
- °øÀ¯¸Þ¸ð¸®·®À» Á¤ÀÇÇÑ´Ù. °øÀ¯¸Þ¸ð¸®´Â ÃÖ¼ÒÇÑ <em>ÇϳªÀÇ</em>
- Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ÇÊ¿äÇÑ °ø°£º¸´Ù ÀÛÀ» ¼ö ¾øÀ½À»
- ÁÖÀÇÇ϶ó. ÀÌ °ªÀº ½Ã½ºÅÛ¿¡ µû¶ó ´Ù¸£´Ù. Á¤È®ÇÑ °ªÀ» ¾Ë·Á¸é
- <code class="directive">AuthDigestShmemSize</code>¸¦ <code>0</code>À¸·Î
- ¼³Á¤ÇÏ°í ¼­¹ö¸¦ ½ÃÀÛÇÑÈÄ ¿À·ù¹®À» Âü°íÇ϶ó.</p>
-
- <p><var>size</var>´Â º¸Åë ¹ÙÀÌÆ® ´ÜÀ§ÀÌÁö¸¸, µÚ¿¡
- <code>K</code>³ª <code>M</code>À» »ç¿ëÇÏ¿© KBytes³ª MBytes¸¦
- ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ Áö½Ã¾îµéÀº ¸ðµÎ °°´Ù:</p>
-
- <div class="example"><p><code>
- AuthDigestShmemSize 1048576<br />
- AuthDigestShmemSize 1024K<br />
- AuthDigestShmemSize 1M
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_auth_digest.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_auth_digest.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_digest.xml b/docs/manual/mod/mod_auth_digest.xml
deleted file mode 100644
index c29c874c80..0000000000
--- a/docs/manual/mod/mod_auth_digest.xml
+++ /dev/null
@@ -1,307 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.16 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_auth_digest.xml.meta">
-
-<name>mod_auth_digest</name>
-<description>User authentication using MD5
- Digest Authentication.</description>
-<status>Experimental</status>
-<sourcefile>mod_auth_digest.c</sourcefile>
-<identifier>auth_digest_module</identifier>
-
-<summary>
- <p>This module implements HTTP Digest Authentication. However, it
- has not been extensively tested and is therefore marked
- experimental.</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<section id="using"><title>Using Digest Authentication</title>
-
- <p>Using MD5 Digest authentication is very simple. Simply set
- up authentication normally, using <code>AuthType Digest</code> and
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
- instead of the normal <code>AuthType Basic</code> and
- <directive module="mod_auth_basic">AuthBasicProvider</directive>.
- Then add a <directive module="mod_auth_digest"
- >AuthDigestDomain</directive> directive containing at least the root
- URI(s) for this protection space.</p>
-
- <p>Appropriate user (text) files can be created using the
- <a href="../programs/htdigest.html">htdigest</a> tool.</p>
-
- <example><title>Example:</title>
- &lt;Location /private/&gt;<br />
- <indent>
- AuthType Digest<br />
- AuthName "private area"<br />
- AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
- <br />
- AuthDigestProvider file<br />
- AuthUserFile /web/auth/.digest_pw<br />
- Require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note><title>Note</title>
- <p>Digest authentication provides a more secure password system
- than Basic authentication, but only works with supporting
- browsers. As of November 2002, the major browsers that support digest
- authentication are <a href="http://www.opera.com/">Opera</a>, <a
- href="http://www.microsoft.com/windows/ie/">MS Internet
- Explorer</a> (fails when used with a query string), <a
- href="http://www.w3.org/Amaya/">Amaya</a>, <a
- href="http://www.mozilla.org">Mozilla</a> and <a
- href="http://channels.netscape.com/ns/browsers/download.jsp"
- >Netscape</a> since version 7. Since digest
- authentication is not as widely implemented as basic
- authentication, you should use it only in controlled environments.</p>
- </note>
-</section>
-
-<directivesynopsis>
-<name>AuthDigestProvider</name>
-<description>Sets the authentication provider(s) for this location</description>
-<syntax>AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</syntax>
-<default>AuthDigestProvider On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDigestProvider</directive> directive sets
- which provider is used to authenticate the users for this location.
- Setting the value to <code>On</code> will choose the default provider
- (<code>file</code>). Since the <code>file</code> provider is implemented
- by the <module>mod_authn_file</module> module, you have to make sure,
- that the module is present in the server.</p>
-
- <p>See <module>mod_authn_dbm</module> and <module>mod_authn_file</module>
- for providers.</p>
-
- <p>The value <code>Off</code> clears the provider list and sets it back
- to the default.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestQop</name>
-<description>Determines the quality-of-protection to use in digest
-authentication</description>
-<syntax>AuthDigestQop none|auth|auth-int [auth|auth-int]</syntax>
-<default>AuthDigestQop auth</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDigestQop</directive> directive determines
- the <dfn>quality-of-protection</dfn> to use. <code>auth</code> will
- only do authentication (username/password); <code>auth-int</code> is
- authentication plus integrity checking (an MD5 hash of the entity
- is also computed and checked); <code>none</code> will cause the module
- to use the old RFC-2069 digest algorithm (which does not include
- integrity checking). Both <code>auth</code> and <code>auth-int</code> may
- be specified, in which the case the browser will choose which of
- these to use. <code>none</code> should only be used if the browser for
- some reason does not like the challenge it receives otherwise.</p>
-
- <note>
- <code>auth-int</code> is not implemented yet.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNonceLifetime</name>
-<description>How long the server nonce is valid</description>
-<syntax>AuthDigestNonceLifetime <var>seconds</var></syntax>
-<default>AuthDigestNonceLifetime 300</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDigestNonceLifetime</directive> directive
- controls how long the server nonce is valid. When the client
- contacts the server using an expired nonce the server will send
- back a 401 with <code>stale=true</code>. If <var>seconds</var> is
- greater than 0 then it specifies the amount of time for which the
- nonce is valid; this should probably never be set to less than 10
- seconds. If <var>seconds</var> is less than 0 then the nonce never
- expires. <!-- Not implemented yet: If <var>seconds</var> is 0 then
- the nonce may be used exactly once by the client. Note that while
- one-time-nonces provide higher security against replay attacks,
- they also have significant performance implications, as the
- browser cannot pipeline or multiple connections for the
- requests. Because browsers cannot easily detect that
- one-time-nonces are being used, this may lead to browsers trying
- to pipeline requests and receiving 401 responses for all but the
- first request, requiring the browser to resend the requests. Note
- also that the protection against reply attacks only makes sense
- for dynamically generated content and things like POST requests;
- for static content the attacker may already have the complete
- response, so one-time-nonces do not make sense here. -->
- </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNonceFormat</name>
-<description>Determines how the nonce is generated</description>
-<syntax>AuthDigestNonceFormat <var>format</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <note>Not implemented yet.</note>
- <!-- The AuthDigestNonceFormat directive determines how the nonce is
- generated. -->
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNcCheck</name>
-<description>Enables or disables checking of the nonce-count sent by the
-server</description>
-<syntax>AuthDigestNcCheck On|Off</syntax>
-<default>AuthDigestNcCheck Off</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <note>
- Not implemented yet.
- </note>
- <!--
- <p>The AuthDigestNcCheck directive enables or disables the checking of the
- nonce-count sent by the server.</p>
-
- <p>While recommended from a security standpoint, turning this directive
- On has one important performance implication. To check the nonce-count
- *all* requests (which have an Authorization header, irrespective of
- whether they require digest authentication) must be serialized through
- a critical section. If the server is handling a large number of
- requests which contain the Authorization header then this may noticeably
- impact performance.</p>
- -->
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestAlgorithm</name>
-<description>Selects the algorithm used to calculate the challenge and
-response hashes in digest authentication</description>
-<syntax>AuthDigestAlgorithm MD5|MD5-sess</syntax>
-<default>AuthDigestAlgorithm MD5</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDigestAlgorithm</directive> directive
- selects the algorithm used to calculate the challenge and response
- hashes.</p>
-
- <note>
- <code>MD5-sess</code> is not correctly implemented yet.
- </note>
- <!--
- <p>To use <code>MD5-sess</code> you must first code up the
- <code>get_userpw_hash()</code> function in
- <code>mod_auth_digest.c</code>.</p>
- -->
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestDomain</name>
-<description>URIs that are in the same protection space for digest
-authentication</description>
-<syntax>AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDigestDomain</directive> directive allows
- you to specify one or more URIs which are in the same protection
- space (<em>i.e.</em> use the same realm and username/password info).
- The specified URIs are prefixes; the client will assume
- that all URIs "below" these are also protected by the same
- username/password. The URIs may be either absolute URIs (<em>i.e.</em>
- including a scheme, host, port, etc.) or relative URIs.</p>
-
- <p>This directive <em>should</em> always be specified and
- contain at least the (set of) root URI(s) for this space.
- Omitting to do so will cause the client to send the
- Authorization header for <em>every request</em> sent to this
- server. Apart from increasing the size of the request, it may
- also have a detrimental effect on performance if <directive
- module="mod_auth_digest">AuthDigestNcCheck</directive> is on.</p>
-
- <p>The URIs specified can also point to different servers, in
- which case clients (which understand this) will then share
- username/password info across multiple servers without
- prompting the user each time. </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestShmemSize</name>
-<description>The amount of shared memory to allocate for keeping track
-of clients</description>
-<syntax>AuthDigestShmemSize <var>size</var></syntax>
-<default>AuthDigestShmemSize 1000</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>AuthDigestShmemSize</directive> directive defines
- the amount of shared memory, that will be allocated at the server
- startup for keeping track of clients. Note that the shared memory
- segment cannot be set less than the space that is necessary for
- tracking at least <em>one</em> client. This value is dependant on your
- system. If you want to find out the exact value, you may simply
- set <directive>AuthDigestShmemSize</directive> to the value of
- <code>0</code> and read the error message after trying to start the
- server.</p>
-
- <p>The <var>size</var> is normally expressed in Bytes, but you
- may let the number follow a <code>K</code> or an <code>M</code> to
- express your value as KBytes or MBytes. For example, the following
- directives are all equivalent:</p>
-
- <example>
- AuthDigestShmemSize 1048576<br />
- AuthDigestShmemSize 1024K<br />
- AuthDigestShmemSize 1M
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth_digest.xml.ko b/docs/manual/mod/mod_auth_digest.xml.ko
deleted file mode 100644
index 75924f3b58..0000000000
--- a/docs/manual/mod/mod_auth_digest.xml.ko
+++ /dev/null
@@ -1,295 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.16 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_auth_digest.xml.meta">
-
-<name>mod_auth_digest</name>
-<description>MD5 Digest AuthenticationÀ» »ç¿ëÇÑ »ç¿ëÀÚÀÎÁõ.</description>
-<status>Experimental</status>
-<sourcefile>mod_auth_digest.c</sourcefile>
-<identifier>auth_digest_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº HTTP Digest AuthenticationÀ» ±¸ÇöÇÑ´Ù.
- ±×·¯³ª ¸¹Àº Å×½ºÆ®¸¦ °ÅÄ¡Áö ¾ÊÀº ½ÇÇèÀûÀÎ ¸ðµâÀÌ´Ù.</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<section id="using"><title>Digest Authentication »ç¿ëÇϱâ</title>
-
- <p>MD5 Digest authenticationÀº ¸Å¿ì ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- <code>AuthType Basic</code>°ú <directive
- module="mod_auth_basic">AuthBasicProvider</directive> ´ë½Å
- <code>AuthType Digest</code>¿Í <directive
- module="mod_auth_digest">AuthDigestProvider</directive>¸¦
- »ç¿ëÇÏ¿© °£´ÜÈ÷ ÀÎÁõÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ÃÖ¼ÒÇÑ º¸È£ÇÏ·Á´Â
- ¿µ¿ªÀÇ ±âº» URIÀ» <directive module="mod_auth_digest"
- >AuthDigestDomain</directive> Áö½Ã¾î¿¡ »ç¿ëÇÑ´Ù.</p>
-
- <p><a href="../programs/htdigest.html">htdigest</a> µµ±¸¸¦
- »ç¿ëÇÏ¿© »ç¿ëÀÚ (¹®ÀÚ)ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- &lt;Location /private/&gt;<br />
- <indent>
- AuthType Digest<br />
- AuthName "private area"<br />
- AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
- <br />
- AuthDigestProvider file<br />
- AuthUserFile /web/auth/.digest_pw<br />
- Require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note><title>ÁÖÀÇ</title>
- <p>Digest authenticationÀº Basic authenticationº¸´Ù ´õ
- ¾ÈÀüÇÑ ¾ÏÈ£½Ã½ºÅÛÀ» Á¦°øÇÏÁö¸¸, ºê¶ó¿ìÀú°¡ Áö¿øÇØ¾ß ÇÑ´Ù.
- 2002³â 11¿ù ÇöÀç digest authenticationÀ» Áö¿øÇÏ´Â ºê¶ó¿ìÀú¿¡´Â
- <a href="http://www.opera.com/">Opera</a>, (ÁúÀǹ®ÀÚ¿­°ú
- ÇÔ²² »ç¿ëÇÒ ¼ö ¾øÁö¸¸) <a
- href="http://www.microsoft.com/windows/ie/">MS Internet
- Explorer</a>, <a
- href="http://www.w3.org/Amaya/">Amaya</a>, <a
- href="http://www.mozilla.org">Mozilla</a>, ¹öÀü 7 ÀÌÈÄÀÇ
- <a href="http://channels.netscape.com/ns/browsers/download.jsp"
- >Netscape</a> µîÀÌ ÀÖ´Ù. digest authenticationÀÌ basic
- authentication ¸¸Å­ ³Î¸® ±¸ÇöµÇÁö ¾Ê¾Ò±â¶§¹®¿¡ ÁÖÀÇÇؼ­
- »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
- </note>
-</section>
-
-<directivesynopsis>
-<name>AuthDigestProvider</name>
-<description>ÀÌ À§Ä¡¿¡ ´ëÇÑ ÀÎÁõÁ¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</syntax>
-<default>AuthDigestProvider On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDigestProvider</directive> Áö½Ã¾î´Â ÀÌ
- À§Ä¡¿¡¼­ »ç¿ëÀÚ¸¦ ÀÎÁõÇÒ Á¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. °ªÀÌ
- <code>On</code>ÀÌ¸é ±âº»Á¦°øÀÚ(<code>file</code>)¸¦ »ç¿ëÇÑ´Ù.
- <module>mod_authn_file</module> ¸ðµâÀÌ <code>file</code>
- Á¦°øÀÚ¸¦ ±¸ÇöÇϱ⶧¹®¿¡ ¼­¹ö¿¡ ÀÌ ¸ðµâÀÌ ÀÖ´ÂÁö È®ÀÎÇؾß
- ÇÑ´Ù.</p>
-
- <p>Á¦°øÀÚ´Â <module>mod_authn_dbm</module>°ú
- <module>mod_authn_file</module>À» Âü°íÇ϶ó.</p>
-
- <p>°ªÀÌ <code>Off</code>À̸é Á¦°øÀÚ ¸ñ·ÏÀ» Áö¿ì°í ±âº»»óÅ·Î
- µ¹¾Æ°£´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestQop</name>
-<description>digest authentication°¡ »ç¿ëÇÒ
-º¸È£¼öÁØ(quality-of-protection)À» ÁöÁ¤ÇÑ´Ù.</description>
-<syntax>AuthDigestQop none|auth|auth-int [auth|auth-int]</syntax>
-<default>AuthDigestQop auth</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDigestQop</directive> Áö½Ã¾î´Â
- <dfn>º¸È£¼öÁØ(quality-of-protection)</dfn>À» ÁöÁ¤ÇÑ´Ù.
- <code>auth</code>´Â (»ç¿ëÀÚ¸í/¾ÏÈ£) ÀÎÁõ¸¸ ÇÏ°í,
- <code>auth-int</code>´Â ÀÎÁõ°ú ¿Ï°á¼º °Ë»ç¸¦ (MD5 Çؽ¬µµ
- °è»êÇÏ¿© °Ë»çÇÑ´Ù) ÇÑ´Ù. <code>none</code>Àº (¿Ï°á¼º °Ë»ç¸¦
- ÇÏÁö¾Ê´Â) ¿À·¡µÈ RFC-2069 digest ¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù.
- <code>auth</code>¿Í <code>auth-int</code>¸¦ ¸ðµÎ ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ºê¶ó¿ìÀú´Â ¾î¶² °ÍÀ» »ç¿ëÇÒÁö ¼±ÅÃÇÑ´Ù.
- ºê¶ó¿ìÀú°¡ ¾î´ø ÀÌÀ¯¿¡¼­°Ç challenge¸¦ ÁÁ¾ÆÇÏÁö ¾Ê´Â´Ù¸é
- <code>none</code>À» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
- <note>
- <code>auth-int</code>´Â ¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNonceLifetime</name>
-<description>¼­¹ö nonce°¡ À¯È¿ÇÑ ±â°£</description>
-<syntax>AuthDigestNonceLifetime <var>seconds</var></syntax>
-<default>AuthDigestNonceLifetime 300</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDigestNonceLifetime</directive> Áö½Ã¾î´Â
- ¼­¹ö nonce°¡ À¯È¿ÇÑ ±â°£À» Á¶ÀýÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¸¸±âµÈ
- nonce¸¦ °¡Áö°í ¼­¹ö¿¡ Á¢±ÙÇÏ¸é ¼­¹ö´Â <code>stale=true</code>¿Í
- ÇÔ²² 401À» ¹ÝȯÇÑ´Ù. <var>seconds</var>°¡ 0º¸´Ù Å©¸é nonce°¡
- À¯È¿ÇÑ ±â°£À» ÁöÁ¤ÇÑ´Ù. ¾Æ¸¶µµ 10 Ãʺ¸´Ù ÀÛ°Ô ¼³Á¤ÇÏ¸é ¾ÈµÈ´Ù.
- <var>seconds</var>°¡ 0º¸´Ù ÀÛÀ¸¸é nonce´Â ¿µ¿øÈ÷ ¸¸±âµÇÁö
- ¾Ê´Â´Ù. <!-- ¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾ÒÀ½: <var>seconds</var>°¡
- 0À̸é Ŭ¶óÀ̾ðÆ®´Â Á¤È®È÷ Çѹø¸¸ nonce¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- Çѹø¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â nonce´Â Àç»ý°ø°Ý(replay attack)¿¡
- ´ëÇØ ´õ ¾ÈÀüÇÑ º¸¾ÈÀ» Á¦°øÇÏÁö¸¸, ºê¶ó¿ìÀú°¡ ¿äûµéÀ» ¿¬¼ÓÇؼ­
- º¸³»°Å³ª ¿©·¯ ¿¬°áÀ» µ¿½Ã¿¡ ÇÒ ¼ö°¡ ¾ø¾î¼­ ¼º´ÉÀÌ »ó´çÈ÷
- ¶³¾îÁú ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó. ºê¶ó¿ìÀú´Â nonce¸¦ ÀÌ¹Ì »ç¿ëÇÏ¿´´ÂÁö
- ½±°Ô ¾Ë¾Æ³¾ ¼ö ¾ø±â¶§¹®¿¡ ¿äûÀ» ¿¬¼ÓÇؼ­ º¸³½ÈÄ, ù¹ø°
- ¿äûÀ» Á¦¿ÜÇÏ°í 401 ÀÀ´äÀ» ¹ÞÀº ´ÙÀ½ ¿äûÀ» ´Ù½Ã º¸³»°Ô
- µÈ´Ù. ¶Ç Àç»ý°ø°Ý¿¡ ´ëÇÑ º¸È£´Â POST ¿äû°ú °°ÀÌ µ¿ÀûÀ¸·Î
- ³»¿ëÀ» »ý¼ºÇÏ´Â °æ¿ì¿¡¸¸ Àǹ̰¡ ÀÖÀ½À» ÁÖÀÇÇ϶ó. Á¤ÀûÀÎ
- ³»¿ëÀÇ °æ¿ì °ø°ÝÀÚ´Â ÀÌ¹Ì ¿ÏÀüÇÑ ³»¿ëÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î,
- Çѹø¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â nonce´Â Àǹ̰¡ ¾ø´Ù. -->
- </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNonceFormat</name>
-<description>nonce¸¦ ¸¸µå´Â ¹æ¹ýÀ» °áÁ¤ÇÑ´Ù</description>
-<syntax>AuthDigestNonceFormat <var>format</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <note>¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.</note>
- <!-- AuthDigestNonceFormat Áö½Ã¾î´Â nonce¸¦ ¸¸µå´Â ¹æ¹ýÀ»
- °áÁ¤ÇÑ´Ù. -->
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNcCheck</name>
-<description>¼­¹ö°¡ º¸³»´Â nonce-count¸¦ °Ë»çÇÒÁö ¿©ºÎ</description>
-<syntax>AuthDigestNcCheck On|Off</syntax>
-<default>AuthDigestNcCheck Off</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <note>
- ¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.
- </note>
- <!--
- <p>AuthDigestNcCheck Áö½Ã¾î´Â ¼­¹ö°¡ º¸³»´Â nonce-count¸¦
- °Ë»çÇÒÁö °áÁ¤ÇÑ´Ù.</p>
-
- <p>º¸¾È»ó ±ÇÀåÇÏÁö¸¸ ÀÌ Áö½Ã¾î¸¦ OnÀ¸·Î ¼³Á¤ÇÏ¸é ¼º´ÉÀÌ
- Å©°Ô ¶³¾îÁø´Ù. nonce-count¸¦ °Ë»çÇÏ·Á¸é (digest authentication
- ¿©ºÎ¿Í °ü°è¾øÀÌ Authorization Çì´õ¸¦ º¸³»´Â) *¸ðµç* ¿äûÀ»
- ÀӰ迵¿ª(critical section)À» ÅëÇØ Ã³¸®ÇØ¾ß ÇÑ´Ù. ¼­¹ö°¡
- Authorization Çì´õ¸¦ Æ÷ÇÔÇÑ ¸Å¿ì ¸¹Àº ¿äûÀ» ó¸®ÇÑ´Ù¸é
- ¼º´ÉÀÌ ÇöÀúÈ÷ ¶³¾îÁú ¼ö ÀÖ´Ù.</p>
- -->
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestAlgorithm</name>
-<description>digest authentication¿¡¼­ challenge¿Í response
-hash¸¦ °è»êÇÏ´Â ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÑ´Ù</description>
-<syntax>AuthDigestAlgorithm MD5|MD5-sess</syntax>
-<default>AuthDigestAlgorithm MD5</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDigestAlgorithm</directive> Áö½Ã¾î´Â
- challenge¿Í response hash¸¦ °è»êÇÏ´Â ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÑ´Ù.</p>
-
- <note>
- <code>MD5-sess</code>´Â ¾ÆÁ÷ ¿ÏÀüÈ÷ ±¸ÇöµÇÁö ¾Ê¾Ò´Ù.
- </note>
- <!--
- <p><code>MD5-sess</code>¸¦ »ç¿ëÇÏ·Á¸é
- <code>mod_auth_digest.c</code>ÀÇ <code>get_userpw_hash()</code>
- ÇÔ¼ö¸¦ ¸ÕÀú ÀÛ¼ºÇØ¾ß ÇÑ´Ù.</p>
- -->
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestDomain</name>
-<description>digest authentication¿¡¼­ °°Àº º¸È£¿µ¿ª¿¡ ¼ÓÇÏ´Â
-URIµé</description>
-<syntax>AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDigestDomain</directive> Áö½Ã¾î´Â °°Àº
- º¸È£¿µ¿ª¿¡ ÀÖ´Â (<em>¿¹¸¦ µé¾î</em> °°Àº ¿µ¿ª°ú »ç¿ëÀÚ¸í/¾ÏÈ£
- Á¤º¸¸¦ »ç¿ëÇÏ´Â) URIµéÀ» ÁöÁ¤ÇÑ´Ù. ÁöÁ¤ÇÑ URI´Â Á¢µÎ»ç·Î
- »ç¿ëÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â URI "¾Æ·¡" ¸ðµÎ¸¦
- °°Àº »ç¿ëÀÚ¸í/¾ÏÈ£·Î º¸È£ÇÑ´Ù°í °¡Á¤ÇÑ´Ù. URI´Â
- (<em>Áï</em>, ½ºÅ´(scheme), È£½ºÆ®, Æ÷Æ® µîÀ» Æ÷ÇÔÇÏ´Â)
- Àý´ë URLÀ̰ųª »ó´ë URIÀÌ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾î´Â Ç×»ó <em>ÁöÁ¤Çؾß</em> Çϸç, ÃÖ¼ÒÇÑ ¿µ¿ªµéÀÇ
- ±âº» URI(µé)¸¦ Æ÷ÇÔ<em>Çؾß</em> ÇÑ´Ù. »ý·«Çϸé Ŭ¶óÀ̾ðÆ®´Â
- ÀÌ ¼­¹ö·Î º¸³»´Â <em>¸ðµç ¿äû</em>¿¡ Authorization Çì´õ¸¦
- Æ÷ÇÔÇÑ´Ù. ±×·¯¸é ¿äûÀÇ Å©±â°¡ Ä¿Áö¸ç, <directive
- module="mod_auth_digest">AuthDigestNcCheck</directive>¸¦
- »ç¿ëÇÑ´Ù¸é ¼º´É¿¡ ³ª»Û ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p>´Ù¸¥ ¼­¹öÀÇ URI¸¦ ÁöÁ¤Çϸé, (À̸¦ ÀÌÇØÇÏ´Â) Ŭ¶óÀ̾ðÆ®´Â
- ¿©·¯ ¼­¹ö¸¶´Ù ¸Å¹ø »ç¿ëÀÚ¿¡°Ô ¹¯Áö¾Ê°í °°Àº »ç¿ëÀÚ¸í/¾ÏÈ£¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestShmemSize</name>
-<description>Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ÇÒ´çÇÏ´Â °øÀ¯¸Þ¸ð¸®·®</description>
-<syntax>AuthDigestShmemSize <var>size</var></syntax>
-<default>AuthDigestShmemSize 1000</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>AuthDigestShmemSize</directive> Áö½Ã¾î´Â
- Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ¼­¹ö°¡ ½ÃÀÛÇÒ¶§ ÇÒ´çÇÏ´Â
- °øÀ¯¸Þ¸ð¸®·®À» Á¤ÀÇÇÑ´Ù. °øÀ¯¸Þ¸ð¸®´Â ÃÖ¼ÒÇÑ <em>ÇϳªÀÇ</em>
- Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ÇÊ¿äÇÑ °ø°£º¸´Ù ÀÛÀ» ¼ö ¾øÀ½À»
- ÁÖÀÇÇ϶ó. ÀÌ °ªÀº ½Ã½ºÅÛ¿¡ µû¶ó ´Ù¸£´Ù. Á¤È®ÇÑ °ªÀ» ¾Ë·Á¸é
- <directive>AuthDigestShmemSize</directive>¸¦ <code>0</code>À¸·Î
- ¼³Á¤ÇÏ°í ¼­¹ö¸¦ ½ÃÀÛÇÑÈÄ ¿À·ù¹®À» Âü°íÇ϶ó.</p>
-
- <p><var>size</var>´Â º¸Åë ¹ÙÀÌÆ® ´ÜÀ§ÀÌÁö¸¸, µÚ¿¡
- <code>K</code>³ª <code>M</code>À» »ç¿ëÇÏ¿© KBytes³ª MBytes¸¦
- ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ Áö½Ã¾îµéÀº ¸ðµÎ °°´Ù:</p>
-
- <example>
- AuthDigestShmemSize 1048576<br />
- AuthDigestShmemSize 1024K<br />
- AuthDigestShmemSize 1M
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth_digest.xml.meta b/docs/manual/mod/mod_auth_digest.xml.meta
deleted file mode 100644
index 1049bab5af..0000000000
--- a/docs/manual/mod/mod_auth_digest.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_auth_digest</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_auth_ldap.html b/docs/manual/mod/mod_auth_ldap.html
deleted file mode 100644
index fc763b6940..0000000000
--- a/docs/manual/mod/mod_auth_ldap.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_auth_ldap.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_auth_ldap.html.en b/docs/manual/mod/mod_auth_ldap.html.en
deleted file mode 100644
index 242be62869..0000000000
--- a/docs/manual/mod/mod_auth_ldap.html.en
+++ /dev/null
@@ -1,860 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_auth_ldap - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_auth_ldap</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_ldap.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>auth_ldap_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_auth_ldap.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.41 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p><code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> supports the following features:</p>
-
- <ul>
- <li>Known to support the <a href="http://www.openldap.org/">OpenLDAP SDK</a> (both 1.x
- and 2.x), <a href="http://developer.novell.com/ndk/cldap.htm">
- Novell LDAP SDK</a> and the <a href="http://www.iplanet.com/downloads/developer/">iPlanet
- (Netscape)</a> SDK.</li>
-
- <li>Complex authorization policies can be implemented by
- representing the policy with LDAP filters.</li>
-
- <li>Support for Microsoft FrontPage allows FrontPage users to
- control access to their webs, while retaining LDAP for user
- authentication.</li>
-
- <li>Uses extensive caching of LDAP operations via <a href="mod_ldap.html">mod_ldap</a>.</li>
-
- <li>Support for LDAP over SSL (requires the Netscape SDK) or
- TLS (requires the OpenLDAP 2.x SDK or Novell LDAP SDK).</li>
- </ul>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapauthoritative">AuthLDAPAuthoritative</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapbinddn">AuthLDAPBindDN</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapbindpassword">AuthLDAPBindPassword</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapcharsetconfig">AuthLDAPCharsetConfig</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapdereferencealiases">AuthLDAPDereferenceAliases</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapenabled">AuthLDAPEnabled</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapfrontpagehack">AuthLDAPFrontPageHack</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authldapurl">AuthLDAPUrl</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#contents">Contents</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#operation">Operation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#requiredirectives">The require Directives</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#usingtls">Using TLS</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#usingssl">Using SSL</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#frontpage">Using Microsoft
- FrontPage with mod_auth_ldap</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contents" id="contents">Contents</a></h2>
-
- <ul>
- <li>
- <a href="#operation">Operation</a>
-
- <ul>
- <li><a href="#authenphase">The Authentication
- Phase</a></li>
-
- <li><a href="#authorphase">The Authorization
- Phase</a></li>
- </ul>
- </li>
-
- <li>
- <a href="#requiredirectives">The require Directives</a>
-
- <ul>
- <li><a href="#reqvaliduser">require valid-user</a></li>
- <li><a href="#requser">require user</a></li>
- <li><a href="#reqgroup">require group</a></li>
- <li><a href="#reqdn">require dn</a></li>
- </ul>
- </li>
-
- <li><a href="#examples">Examples</a></li>
- <li><a href="#usingtls">Using TLS</a></li>
- <li><a href="#usingssl">Using SSL</a></li>
-
- <li>
- <a href="#frontpage">Using Microsoft FrontPage with
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code></a>
-
- <ul>
- <li><a href="#howitworks">How It Works</a></li>
- <li><a href="#fpcaveats">Caveats</a></li>
- </ul>
- </li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="operation" id="operation">Operation</a></h2>
-
- <p>There are two phases in granting access to a user. The first
- phase is authentication, in which <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>
- verifies that the user's credentials are valid. This also called
- the <em>search/bind</em> phase. The second phase is
- authorization, in which <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> determines
- if the authenticated user is allowed access to the resource in
- question. This is also known as the <em>compare</em>
- phase.</p>
-
-<h3><a name="authenphase" id="authenphase">The Authentication
- Phase</a></h3>
-
- <p>During the authentication phase, <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>
- searches for an entry in the directory that matches the username
- that the HTTP client passes. If a single unique match is found,
- then <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> attempts to bind to the
- directory server using the DN of the entry plus the password
- provided by the HTTP client. Because it does a search, then a
- bind, it is often referred to as the search/bind phase. Here are
- the steps taken during the search/bind phase.</p>
-
- <ol>
- <li>Generate a search filter by combining the attribute and
- filter provided in the <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> directive with
- the username passed by the HTTP client.</li>
-
- <li>Search the directory using the generated filter. If the
- search does not return exactly one entry, deny or decline
- access.</li>
-
- <li>Fetch the distinguished name of the entry retrieved from
- the search and attempt to bind to the LDAP server using the
- DN and the password passed by the HTTP client. If the bind is
- unsuccessful, deny or decline access.</li>
- </ol>
-
- <p>The following directives are used during the search/bind
- phase</p>
-
- <table>
-
- <tr>
- <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code></td>
-
- <td>Specifies the LDAP server, the
- base DN, the attribute to use in the search, as well as the
- extra search filter to use.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code></td>
-
- <td>An optional DN to bind with
- during the search phase.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code></td>
-
- <td>An optional password to bind
- with during the search phase.</td>
- </tr>
- </table>
-
-
-<h3><a name="authorphase" id="authorphase">The Authorization
- Phase</a></h3>
-
- <p>During the authorization phase, <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>
- attempts to determine if the user is authorized to access the
- resource. Many of these checks require
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> to do a compare operation on the
- LDAP server. This is why this phase is often referred to as the
- compare phase. <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> accepts the
- following <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- directives to determine if the credentials are acceptable:</p>
-
- <ul>
- <li>Grant access if there is a <a href="#requser"><code>require
- valid-user</code></a> directive.</li>
-
- <li>Grant access if there is a <a href="#reqgroup"><code>require user</code></a> directive, and the
- username in the directive matches the username passed by the
- client.</li>
-
- <li>Grant access if there is a <a href="#reqdn"><code>require
- dn</code></a> directive, and the DN in the directive matches
- the DN fetched from the LDAP directory.</li>
-
- <li>Grant access if there is a <a href="#reqgroup"><code>require group</code></a> directive, and
- the DN fetched from the LDAP directory (or the username
- passed by the client) occurs in the LDAP group.</li>
-
- <li>otherwise, deny or decline access</li>
- </ul>
-
- <p><code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> uses the following directives during the
- compare phase:</p>
-
- <table>
-
- <tr>
- <td><code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> </td>
-
- <td>The attribute specified in the
- URL is used in compare operations for the <code>require
- user</code> operation.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code></td>
-
- <td>Determines the behavior of the
- <code>require dn</code> directive.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code></td>
-
- <td>Determines the attribute to
- use for comparisons in the <code>require group</code>
- directive.</td>
- </tr>
-
- <tr>
- <td><code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code></td>
-
- <td>Specifies whether to use the
- user DN or the username when doing comparisons for the
- <code>require group</code> directive.</td>
- </tr>
- </table>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requiredirectives" id="requiredirectives">The require Directives</a></h2>
-
- <p>Apache's <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- directives are used during the authorization phase to ensure that
- a user is allowed to access a resource.</p>
-
-<h3><a name="reqvaliduser" id="reqvaliduser">require
- valid-user</a></h3>
-
- <p>If this directive exists, <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> grants
- access to any user that has successfully authenticated during the
- search/bind phase.</p>
-
-
-<h3><a name="requser" id="requser">require user</a></h3>
-
- <p>The <code>require user</code> directive specifies what
- usernames can access the resource. Once
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> has retrieved a unique DN from the
- directory, it does an LDAP compare operation using the username
- specified in the <code>require user</code> to see if that username
- is part of the just-fetched LDAP entry. Multiple users can be
- granted access by putting multiple usernames on the line,
- separated with spaces. If a username has a space in it, then it
- must be surrounded with double quotes. Multiple users can also be
- granted access by using multiple <code>require user</code>
- directives, with one user per line. For example, with a <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> of
- <code>ldap://ldap/o=Airius?cn</code> (i.e., <code>cn</code> is
- used for searches), the following require directives could be used
- to restrict access:</p>
-<div class="example"><p><code>
-require user "Barbara Jenson"<br />
-require user "Fred User"<br />
-require user "Joe Manager"<br />
-</code></p></div>
-
- <p>Because of the way that <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> handles this
- directive, Barbara Jenson could sign on as <em>Barbara
- Jenson</em>, <em>Babs Jenson</em> or any other <code>cn</code> that
- she has in her LDAP entry. Only the single <code>require
- user</code> line is needed to support all values of the attribute
- in the user's entry.</p>
-
- <p>If the <code>uid</code> attribute was used instead of the
- <code>cn</code> attribute in the URL above, the above three lines
- could be condensed to</p>
-<div class="example"><p><code>require user bjenson fuser jmanager</code></p></div>
-
-
-<h3><a name="reqgroup" id="reqgroup">require group</a></h3>
-
- <p>This directive specifies an LDAP group whose members are
- allowed access. It takes the distinguished name of the LDAP
- group. Note: Do not surround the group name with quotes.
- For example, assume that the following entry existed in
- the LDAP directory:</p>
-<div class="example"><p><code>
-dn: cn=Administrators, o=Airius<br />
-objectClass: groupOfUniqueNames<br />
-uniqueMember: cn=Barbara Jenson, o=Airius<br />
-uniqueMember: cn=Fred User, o=Airius<br />
-</code></p></div>
-
- <p>The following directive would grant access to both Fred and
- Barbara:</p>
-<div class="example"><p><code>require group cn=Administrators, o=Airius</code></p></div>
-
- <p>Behavior of this directive is modified by the <code class="directive"><a href="#authldapgroupattribute">AuthLDAPGroupAttribute</a></code> and
- <code class="directive"><a href="#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN</a></code>
- directives.</p>
-
-
-<h3><a name="reqdn" id="reqdn">require dn</a></h3>
-
- <p>The <code>require dn</code> directive allows the administrator
- to grant access based on distinguished names. It specifies a DN
- that must match for access to be granted. If the distinguished
- name that was retrieved from the directory server matches the
- distinguished name in the <code>require dn</code>, then
- authorization is granted. Note: do not surround the distinguished
- name with quotes.</p>
-
- <p>The following directive would grant access to a specific
- DN:</p>
-<div class="example"><p><code>require dn cn=Barbara Jenson, o=Airius</code></p></div>
-
- <p>Behavior of this directive is modified by the <code class="directive"><a href="#authldapcomparednonserver">AuthLDAPCompareDNOnServer</a></code>
- directive.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <ul>
- <li>
- Grant access to anyone who exists in the LDAP directory,
- using their UID for searches.
-<div class="example"><p><code>
-AuthLDAPURL ldap://ldap1.airius.com:389/ou=People, o=Airius?uid?sub?(objectClass=*)<br />
-require valid-user
-</code></p></div>
- </li>
-
- <li>
- The next example is the same as above; but with the fields
- that have useful defaults omitted. Also, note the use of a
- redundant LDAP server.
-<div class="example"><p><code>AuthLDAPURL ldap://ldap1.airius.com ldap2.airius.com/ou=People, o=Airius<br />
-require valid-user
-</code></p></div>
- </li>
-
- <li>
- The next example is similar to the previous one, but is
- uses the common name instead of the UID. Note that this
- could be problematical if multiple people in the directory
- share the same <code>cn</code>, because a search on <code>cn</code>
- <strong>must</strong> return exactly one entry. That's why
- this approach is not recommended: it's a better idea to
- choose an attribute that is guaranteed unique in your
- directory, such as <code>uid</code>.
-<div class="example"><p><code>
-AuthLDAPURL ldap://ldap.airius.com/ou=People, o=Airius?cn<br />
-require valid-user
-</code></p></div>
- </li>
-
- <li>
- Grant access to anybody in the Administrators group. The
- users must authenticate using their UID.
-<div class="example"><p><code>
-AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid<br />
-require group cn=Administrators, o=Airius
-</code></p></div>
- </li>
-
- <li>
- The next example assumes that everyone at Airius who
- carries an alphanumeric pager will have an LDAP attribute
- of <code>qpagePagerID</code>. The example will grant access
- only to people (authenticated via their UID) who have
- alphanumeric pagers:
-<div class="example"><p><code>
-AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid??(qpagePagerID=*)<br />
-require valid-user
-</code></p></div>
- </li>
-
- <li>
- <p>The next example demonstrates the power of using filters
- to accomplish complicated administrative requirements.
- Without filters, it would have been necessary to create a
- new LDAP group and ensure that the group's members remain
- synchronized with the pager users. This becomes trivial
- with filters. The goal is to grant access to anyone who has
- a filter, plus grant access to Joe Manager, who doesn't
- have a pager, but does need to access the same
- resource:</p>
-<div class="example"><p><code>
-AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid??(|(qpagePagerID=*)(uid=jmanager))<br />
-require valid-user
-</code></p></div>
-
- <p>This last may look confusing at first, so it helps to
- evaluate what the search filter will look like based on who
- connects, as shown below. The text in blue is the part that
- is filled in using the attribute specified in the URL. The
- text in red is the part that is filled in using the filter
- specified in the URL. The text in green is filled in using
- the information that is retrieved from the HTTP client. If
- Fred User connects as <code>fuser</code>, the filter would look
- like</p>
-
- <div class="example"><p><code>(&amp;(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</code></p></div>
-
- <p>The above search will only succeed if <em>fuser</em> has a
- pager. When Joe Manager connects as <em>jmanager</em>, the
- filter looks like</p>
-
- <div class="example"><p><code>(&amp;(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</code></p></div>
-
- <p>The above search will succeed whether <em>jmanager</em>
- has a pager or not.</p>
- </li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingtls" id="usingtls">Using TLS</a></h2>
-
- <p>To use TLS, see the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> directives <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></code> and <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingssl" id="usingssl">Using SSL</a></h2>
-
- <p>To use SSL, see the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> directives <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedca">LDAPTrustedCA</a></code> and <code class="directive"><a href="../mod/mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType</a></code>.</p>
-
- <p>To specify a secure LDAP server, use <em>ldaps://</em> in the
- <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code>
- directive, instead of <em>ldap://</em>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="frontpage" id="frontpage">Using Microsoft
- FrontPage with mod_auth_ldap</a></h2>
-
- <p>Normally, FrontPage uses FrontPage-web-specific user/group
- files (i.e., the <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> and
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> modules) to handle all
- authentication. Unfortunately, it is not possible to just
- change to LDAP authentication by adding the proper directives,
- because it will break the <em>Permissions</em> forms in
- the FrontPage client, which attempt to modify the standard
- text-based authorization files.</p>
-
- <p>Once a FrontPage web has been created, adding LDAP
- authentication to it is a matter of adding the following
- directives to <em>every</em> <code>.htaccess</code> file
- that gets created in the web</p>
-<div class="example"><pre>
-AuthLDAPURL "the url"
-AuthLDAPAuthoritative off
-AuthLDAPFrontPageHack on
-</pre></div>
-
- <p><code class="directive"><a href="#authldapauthoritative">AuthLDAPAuthoritative</a></code> must be
- off to allow <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> to decline group
- authentication so that Apache will fall back to file
- authentication for checking group membership. This allows the
- FrontPage-managed group file to be used.</p>
-
-<h3><a name="howitworks" id="howitworks">How It Works</a></h3>
-
- <p>FrontPage restricts access to a web by adding the <code>require
- valid-user</code> directive to the <code>.htaccess</code>
- files. If <code class="directive"><a href="#authldapfrontpagehack">AuthLDAPFrontPageHack</a></code> is not
- on, the <code>require valid-user</code> directive will succeed for
- any user who is valid <em>as far as LDAP is
- concerned</em>. This means that anybody who has an entry in
- the LDAP directory is considered a valid user, whereas FrontPage
- considers only those people in the local user file to be
- valid. The purpose of the hack is to force Apache to consult the
- local user file (which is managed by FrontPage) - instead of LDAP
- - when handling the <code>require valid-user</code> directive.</p>
-
- <p>Once directives have been added as specified above,
- FrontPage users will be able to perform all management
- operations from the FrontPage client.</p>
-
-
-<h3><a name="fpcaveats" id="fpcaveats">Caveats</a></h3>
-
- <ul>
- <li>When choosing the LDAP URL, the attribute to use for
- authentication should be something that will also be valid
- for putting into a <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> user file.
- The user ID is ideal for this.</li>
-
- <li>When adding users via FrontPage, FrontPage administrators
- should choose usernames that already exist in the LDAP
- directory (for obvious reasons). Also, the password that the
- administrator enters into the form is ignored, since Apache
- will actually be authenticating against the password in the
- LDAP database, and not against the password in the local user
- file. This could cause confusion for web administrators.</li>
-
-
- <li>Apache must be compiled with <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>,
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> and
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> in order to
- use FrontPage support. This is because Apache will still use
- the <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> group file for determine the extent of a
- user's access to the FrontPage web.</li>
-
- <li>The directives must be put in the <code>.htaccess</code>
- files. Attempting to put them inside <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> or <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> directives won't work. This
- is because <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> has to be able to grab
- the <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
- directive that is found in FrontPage <code>.htaccess</code>
- files so that it knows where to look for the valid user list. If
- the <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> directives aren't in the same
- <code>.htaccess</code> file as the FrontPage directives, then
- the hack won't work, because <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will
- never get a chance to process the <code>.htaccess</code> file,
- and won't be able to find the FrontPage-managed user file.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPAuthoritative" id="AuthLDAPAuthoritative">AuthLDAPAuthoritative</a> <a name="authldapauthoritative" id="authldapauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Prevent other authentication modules from
-authenticating the user if this one fails</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPAuthoritative on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPAuthoritative on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>Set to <code>off</code> if this module should let other
- authentication modules attempt to authenticate the user, should
- authentication with this module fail. Control is only passed on
- to lower modules if there is no DN or rule that matches the
- supplied user name (as passed by the client).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPBindDN" id="AuthLDAPBindDN">AuthLDAPBindDN</a> <a name="authldapbinddn" id="authldapbinddn">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Optional DN to use in binding to the LDAP server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindDN <em>distinguished-name</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>An optional DN used to bind to the server when searching for
- entries. If not provided, <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will use
- an anonymous bind.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPBindPassword" id="AuthLDAPBindPassword">AuthLDAPBindPassword</a> <a name="authldapbindpassword" id="authldapbindpassword">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Password used in conjuction with the bind DN</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPBindPassword <em>password</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>A bind password to use in conjunction with the bind DN. Note
- that the bind password is probably sensitive data, and should be
- properly protected. You should only use the <code class="directive"><a href="#authldapbinddn">AuthLDAPBindDN</a></code> and <code class="directive"><a href="#authldapbindpassword">AuthLDAPBindPassword</a></code> if you
- absolutely need them to search the directory.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPCharsetConfig" id="AuthLDAPCharsetConfig">AuthLDAPCharsetConfig</a> <a name="authldapcharsetconfig" id="authldapcharsetconfig">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Language to charset conversion configuration file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCharsetConfig <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>The <code class="directive">AuthLDAPCharsetConfig</code> directive sets the location
- of the language to charset conversion configuration file. <var>File-path</var> is relative
- to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. This file specifies
- the list of language extensions to character sets.
- Most administrators use the provided <code>charset.conv</code>
- file, which associates common language extensions to character sets.</p>
-
- <p>The file contains lines in the following format:</p>
-
- <div class="example"><p><code>
- <var>Language-Extension</var> <var>charset</var> [<var>Language-String</var>] ...
- </code></p></div>
-
- <p>The case of the extension does not matter. Blank lines, and lines
- beginning with a hash character (<code>#</code>) are ignored.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPCompareDNOnServer" id="AuthLDAPCompareDNOnServer">AuthLDAPCompareDNOnServer</a> <a name="authldapcomparednonserver" id="authldapcomparednonserver">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the LDAP server to compare the DNs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPCompareDNOnServer on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPCompareDNOnServer on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>When set, <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will use the LDAP
- server to compare the DNs. This is the only foolproof way to
- compare DNs. <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will search the
- directory for the DN specified with the <a href="#reqdn"><code>require dn</code></a> directive, then,
- retrieve the DN and compare it with the DN retrieved from the user
- entry. If this directive is not set,
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> simply does a string comparison. It
- is possible to get false negatives with this approach, but it is
- much faster. Note the <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache can speed up
- DN comparison in most situations.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPDereferenceAliases" id="AuthLDAPDereferenceAliases">AuthLDAPDereferenceAliases</a> <a name="authldapdereferencealiases" id="authldapdereferencealiases">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>When will the module de-reference aliases</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPDereferenceAliases never|searching|finding|always</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPDereferenceAliases Always</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>This directive specifies when <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will
- de-reference aliases during LDAP operations. The default is
- <code>always</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPEnabled" id="AuthLDAPEnabled">AuthLDAPEnabled</a> <a name="authldapenabled" id="authldapenabled">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Turn on or off LDAP authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> AuthLDAPEnabled on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPEnabled on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>Set to <code>off</code> to disable
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> in certain directories. This is
- useful if you have <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> enabled at or
- near the top of your tree, but want to disable it completely in
- certain locations.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPFrontPageHack" id="AuthLDAPFrontPageHack">AuthLDAPFrontPageHack</a> <a name="authldapfrontpagehack" id="authldapfrontpagehack">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allow LDAP authentication to work with MS FrontPage</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPFrontPageHack on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPFrontPageHack off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>See the section on <a href="#frontpage">using Microsoft
- FrontPage</a> with <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPGroupAttribute" id="AuthLDAPGroupAttribute">AuthLDAPGroupAttribute</a> <a name="authldapgroupattribute" id="authldapgroupattribute">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>LDAP attributes used to check for group membership</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPGroupAttribute <em>attribute</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>This directive specifies which LDAP attributes are used to
- check for group membership. Multiple attributes can be used by
- specifying this directive multiple times. If not specified,
- then <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> uses the <code>member</code> and
- <code>uniquemember</code> attributes.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPGroupAttributeIsDN" id="AuthLDAPGroupAttributeIsDN">AuthLDAPGroupAttributeIsDN</a> <a name="authldapgroupattributeisdn" id="authldapgroupattributeisdn">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPGroupAttributeIsDN on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPGroupAttributeIsDN on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>When set <code>on</code>, this directive says to use the
- distinguished name of the client username when checking for group
- membership. Otherwise, the username will be used. For example,
- assume that the client sent the username <code>bjenson</code>,
- which corresponds to the LDAP DN <code>cn=Babs Jenson,
- o=Airius</code>. If this directive is set,
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will check if the group has
- <code>cn=Babs Jenson, o=Airius</code> as a member. If this
- directive is not set, then <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will
- check if the group has <code>bjenson</code> as a member.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPRemoteUserIsDN" id="AuthLDAPRemoteUserIsDN">AuthLDAPRemoteUserIsDN</a> <a name="authldapremoteuserisdn" id="authldapremoteuserisdn">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPRemoteUserIsDN on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthLDAPRemoteUserIsDN off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>If this directive is set to on, the value of the
- <code>REMOTE_USER</code> environment variable will be set to the full
- distinguished name of the authenticated user, rather than just
- the username that was passed by the client. It is turned off by
- default.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthLDAPUrl" id="AuthLDAPUrl">AuthLDAPUrl</a> <a name="authldapurl" id="authldapurl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>URL specifying the LDAP search parameters</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthLDAPUrl <em>url</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_ldap</td></tr>
-</table>
- <p>An RFC 2255 URL which specifies the LDAP search parameters
- to use. The syntax of the URL is</p>
-<div class="example"><p><code>ldap://host:port/basedn?attribute?scope?filter</code></p></div>
-
-<dl>
-<dt>ldap</dt>
-
- <dd>For regular ldap, use the
- string <code>ldap</code>. For secure LDAP, use <code>ldaps</code>
- instead. Secure LDAP is only available if Apache was linked
- to an LDAP library with SSL support.</dd>
-
-<dt>host:port</dt>
-
- <dd>
- <p>The name/port of the ldap server (defaults to
- <code>localhost:389</code> for <code>ldap</code>, and
- <code>localhost:636</code> for <code>ldaps</code>). To
- specify multiple, redundant LDAP servers, just list all
- servers, separated by spaces. <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>
- will try connecting to each server in turn, until it makes a
- successful connection.</p>
-
- <p>Once a connection has been made to a server, that
- connection remains active for the life of the
- <code>httpd</code> process, or until the LDAP server goes
- down.</p>
-
- <p>If the LDAP server goes down and breaks an existing
- connection, <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code> will attempt to
- re-connect, starting with the primary server, and trying
- each redundant server in turn. Note that this is different
- than a true round-robin search.</p>
- </dd>
-
-<dt>basedn</dt>
-
- <dd>The DN of the branch of the
- directory where all searches should start from. At the very
- least, this must be the top of your directory tree, but
- could also specify a subtree in the directory.</dd>
-
-<dt>attribute</dt>
-
- <dd>The attribute to search for.
- Although RFC 2255 allows a comma-separated list of
- attributes, only the first attribute will be used, no
- matter how many are provided. If no attributes are
- provided, the default is to use <code>uid</code>. It's a good
- idea to choose an attribute that will be unique across all
- entries in the subtree you will be using.</dd>
-
-<dt>scope</dt>
-
- <dd>The scope of the search. Can be either <code>one</code> or
- <code>sub</code>. Note that a scope of <code>base</code> is
- also supported by RFC 2255, but is not supported by this
- module. If the scope is not provided, or if <code>base</code> scope
- is specified, the default is to use a scope of
- <code>sub</code>.</dd>
-
-<dt>filter</dt>
-
- <dd>A valid LDAP search filter. If
- not provided, defaults to <code>(objectClass=*)</code>, which
- will search for all objects in the tree. Filters are
- limited to approximately 8000 characters (the definition of
- <code>MAX_STRING_LEN</code> in the Apache source code). This
- should be than sufficient for any application.</dd>
-</dl>
-
- <p>When doing searches, the attribute, filter and username passed
- by the HTTP client are combined to create a search filter that
- looks like
- <code>(&amp;(<em>filter</em>)(<em>attribute</em>=<em>username</em>))</code>.</p>
-
- <p>For example, consider an URL of
- <code>ldap://ldap.airius.com/o=Airius?cn?sub?(posixid=*)</code>. When
- a client attempts to connect using a username of <code>Babs
- Jenson</code>, the resulting search filter will be
- <code>(&amp;(posixid=*)(cn=Babs Jenson))</code>.</p>
-
- <p>See above for examples of <code class="directive"><a href="#authldapurl">AuthLDAPURL</a></code> URLs.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_auth_ldap.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_ldap.xml b/docs/manual/mod/mod_auth_ldap.xml
deleted file mode 100644
index d7959ba0d1..0000000000
--- a/docs/manual/mod/mod_auth_ldap.xml
+++ /dev/null
@@ -1,852 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.18 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_auth_ldap.xml.meta">
-
-<name>mod_auth_ldap</name>
-<description>Allows an LDAP directory to be used to store the database
-for HTTP Basic authentication.</description>
-<status>Experimental</status>
-<sourcefile>mod_auth_ldap.c</sourcefile>
-<identifier>auth_ldap_module</identifier>
-<compatibility>Available in version 2.0.41 and later</compatibility>
-
-<summary>
- <p><module>mod_auth_ldap</module> supports the following features:</p>
-
- <ul>
- <li>Known to support the <a
- href="http://www.openldap.org/">OpenLDAP SDK</a> (both 1.x
- and 2.x), <a href="http://developer.novell.com/ndk/cldap.htm">
- Novell LDAP SDK</a> and the <a
- href="http://www.iplanet.com/downloads/developer/">iPlanet
- (Netscape)</a> SDK.</li>
-
- <li>Complex authorization policies can be implemented by
- representing the policy with LDAP filters.</li>
-
- <li>Support for Microsoft FrontPage allows FrontPage users to
- control access to their webs, while retaining LDAP for user
- authentication.</li>
-
- <li>Uses extensive caching of LDAP operations via <a
- href="mod_ldap.html">mod_ldap</a>.</li>
-
- <li>Support for LDAP over SSL (requires the Netscape SDK) or
- TLS (requires the OpenLDAP 2.x SDK or Novell LDAP SDK).</li>
- </ul>
-</summary>
-
-<seealso><module>mod_ldap</module></seealso>
-
-<section id="contents"><title>Contents</title>
-
- <ul>
- <li>
- <a href="#operation">Operation</a>
-
- <ul>
- <li><a href="#authenphase">The Authentication
- Phase</a></li>
-
- <li><a href="#authorphase">The Authorization
- Phase</a></li>
- </ul>
- </li>
-
- <li>
- <a href="#requiredirectives">The require Directives</a>
-
- <ul>
- <li><a href="#reqvaliduser">require valid-user</a></li>
- <li><a href="#requser">require user</a></li>
- <li><a href="#reqgroup">require group</a></li>
- <li><a href="#reqdn">require dn</a></li>
- </ul>
- </li>
-
- <li><a href="#examples">Examples</a></li>
- <li><a href="#usingtls">Using TLS</a></li>
- <li><a href="#usingssl">Using SSL</a></li>
-
- <li>
- <a href="#frontpage">Using Microsoft FrontPage with
- <module>mod_auth_ldap</module></a>
-
- <ul>
- <li><a href="#howitworks">How It Works</a></li>
- <li><a href="#fpcaveats">Caveats</a></li>
- </ul>
- </li>
- </ul>
-</section>
-
-<section id="operation"><title>Operation</title>
-
- <p>There are two phases in granting access to a user. The first
- phase is authentication, in which <module>mod_auth_ldap</module>
- verifies that the user's credentials are valid. This also called
- the <em>search/bind</em> phase. The second phase is
- authorization, in which <module>mod_auth_ldap</module> determines
- if the authenticated user is allowed access to the resource in
- question. This is also known as the <em>compare</em>
- phase.</p>
-
-<section id="authenphase"><title>The Authentication
- Phase</title>
-
- <p>During the authentication phase, <module>mod_auth_ldap</module>
- searches for an entry in the directory that matches the username
- that the HTTP client passes. If a single unique match is found,
- then <module>mod_auth_ldap</module> attempts to bind to the
- directory server using the DN of the entry plus the password
- provided by the HTTP client. Because it does a search, then a
- bind, it is often referred to as the search/bind phase. Here are
- the steps taken during the search/bind phase.</p>
-
- <ol>
- <li>Generate a search filter by combining the attribute and
- filter provided in the <directive module="mod_auth_ldap"
- >AuthLDAPURL</directive> directive with
- the username passed by the HTTP client.</li>
-
- <li>Search the directory using the generated filter. If the
- search does not return exactly one entry, deny or decline
- access.</li>
-
- <li>Fetch the distinguished name of the entry retrieved from
- the search and attempt to bind to the LDAP server using the
- DN and the password passed by the HTTP client. If the bind is
- unsuccessful, deny or decline access.</li>
- </ol>
-
- <p>The following directives are used during the search/bind
- phase</p>
-
- <table>
- <columnspec><column width=".3"/><column width=".7"/></columnspec>
- <tr>
- <td><directive module="mod_auth_ldap">AuthLDAPURL</directive></td>
-
- <td>Specifies the LDAP server, the
- base DN, the attribute to use in the search, as well as the
- extra search filter to use.</td>
- </tr>
-
- <tr>
- <td><directive module="mod_auth_ldap">AuthLDAPBindDN</directive></td>
-
- <td>An optional DN to bind with
- during the search phase.</td>
- </tr>
-
- <tr>
- <td><directive
- module="mod_auth_ldap">AuthLDAPBindPassword</directive></td>
-
- <td>An optional password to bind
- with during the search phase.</td>
- </tr>
- </table>
-</section>
-
-<section id="authorphase"><title>The Authorization
- Phase</title>
-
- <p>During the authorization phase, <module>mod_auth_ldap</module>
- attempts to determine if the user is authorized to access the
- resource. Many of these checks require
- <module>mod_auth_ldap</module> to do a compare operation on the
- LDAP server. This is why this phase is often referred to as the
- compare phase. <module>mod_auth_ldap</module> accepts the
- following <directive module="core">Require</directive>
- directives to determine if the credentials are acceptable:</p>
-
- <ul>
- <li>Grant access if there is a <a href="#requser"><code>require
- valid-user</code></a> directive.</li>
-
- <li>Grant access if there is a <a
- href="#reqgroup"><code>require user</code></a> directive, and the
- username in the directive matches the username passed by the
- client.</li>
-
- <li>Grant access if there is a <a href="#reqdn"><code>require
- dn</code></a> directive, and the DN in the directive matches
- the DN fetched from the LDAP directory.</li>
-
- <li>Grant access if there is a <a
- href="#reqgroup"><code>require group</code></a> directive, and
- the DN fetched from the LDAP directory (or the username
- passed by the client) occurs in the LDAP group.</li>
-
- <li>otherwise, deny or decline access</li>
- </ul>
-
- <p><module>mod_auth_ldap</module> uses the following directives during the
- compare phase:</p>
-
- <table>
- <columnspec><column width=".4"/><column width=".6"/></columnspec>
- <tr>
- <td><directive module="mod_auth_ldap">AuthLDAPURL</directive> </td>
-
- <td>The attribute specified in the
- URL is used in compare operations for the <code>require
- user</code> operation.</td>
- </tr>
-
- <tr>
- <td><directive
- module="mod_auth_ldap">AuthLDAPCompareDNOnServer</directive></td>
-
- <td>Determines the behavior of the
- <code>require dn</code> directive.</td>
- </tr>
-
- <tr>
- <td><directive
- module="mod_auth_ldap">AuthLDAPGroupAttribute</directive></td>
-
- <td>Determines the attribute to
- use for comparisons in the <code>require group</code>
- directive.</td>
- </tr>
-
- <tr>
- <td><directive
- module="mod_auth_ldap">AuthLDAPGroupAttributeIsDN</directive></td>
-
- <td>Specifies whether to use the
- user DN or the username when doing comparisons for the
- <code>require group</code> directive.</td>
- </tr>
- </table>
-</section>
-</section>
-
-<section id="requiredirectives"><title>The require Directives</title>
-
- <p>Apache's <directive module="core">Require</directive>
- directives are used during the authorization phase to ensure that
- a user is allowed to access a resource.</p>
-
-<section id="reqvaliduser"><title>require
- valid-user</title>
-
- <p>If this directive exists, <module>mod_auth_ldap</module> grants
- access to any user that has successfully authenticated during the
- search/bind phase.</p>
-</section>
-
-<section id="requser"><title>require user</title>
-
- <p>The <code>require user</code> directive specifies what
- usernames can access the resource. Once
- <module>mod_auth_ldap</module> has retrieved a unique DN from the
- directory, it does an LDAP compare operation using the username
- specified in the <code>require user</code> to see if that username
- is part of the just-fetched LDAP entry. Multiple users can be
- granted access by putting multiple usernames on the line,
- separated with spaces. If a username has a space in it, then it
- must be surrounded with double quotes. Multiple users can also be
- granted access by using multiple <code>require user</code>
- directives, with one user per line. For example, with a <directive
- module="mod_auth_ldap">AuthLDAPURL</directive> of
- <code>ldap://ldap/o=Airius?cn</code> (i.e., <code>cn</code> is
- used for searches), the following require directives could be used
- to restrict access:</p>
-<example>
-require user "Barbara Jenson"<br />
-require user "Fred User"<br />
-require user "Joe Manager"<br />
-</example>
-
- <p>Because of the way that <module>mod_auth_ldap</module> handles this
- directive, Barbara Jenson could sign on as <em>Barbara
- Jenson</em>, <em>Babs Jenson</em> or any other <code>cn</code> that
- she has in her LDAP entry. Only the single <code>require
- user</code> line is needed to support all values of the attribute
- in the user's entry.</p>
-
- <p>If the <code>uid</code> attribute was used instead of the
- <code>cn</code> attribute in the URL above, the above three lines
- could be condensed to</p>
-<example>require user bjenson fuser jmanager</example>
-</section>
-
-<section id="reqgroup"><title>require group</title>
-
- <p>This directive specifies an LDAP group whose members are
- allowed access. It takes the distinguished name of the LDAP
- group. Note: Do not surround the group name with quotes.
- For example, assume that the following entry existed in
- the LDAP directory:</p>
-<example>
-dn: cn=Administrators, o=Airius<br />
-objectClass: groupOfUniqueNames<br />
-uniqueMember: cn=Barbara Jenson, o=Airius<br />
-uniqueMember: cn=Fred User, o=Airius<br />
-</example>
-
- <p>The following directive would grant access to both Fred and
- Barbara:</p>
-<example>require group cn=Administrators, o=Airius</example>
-
- <p>Behavior of this directive is modified by the <directive
- module="mod_auth_ldap">AuthLDAPGroupAttribute</directive> and
- <directive
- module="mod_auth_ldap">AuthLDAPGroupAttributeIsDN</directive>
- directives.</p>
-</section>
-
-<section id="reqdn"><title>require dn</title>
-
- <p>The <code>require dn</code> directive allows the administrator
- to grant access based on distinguished names. It specifies a DN
- that must match for access to be granted. If the distinguished
- name that was retrieved from the directory server matches the
- distinguished name in the <code>require dn</code>, then
- authorization is granted. Note: do not surround the distinguished
- name with quotes.</p>
-
- <p>The following directive would grant access to a specific
- DN:</p>
-<example>require dn cn=Barbara Jenson, o=Airius</example>
-
- <p>Behavior of this directive is modified by the <directive
- module="mod_auth_ldap">AuthLDAPCompareDNOnServer</directive>
- directive.</p>
-</section>
-</section>
-
-<section id="examples"><title>Examples</title>
-
- <ul>
- <li>
- Grant access to anyone who exists in the LDAP directory,
- using their UID for searches.
-<example>
-AuthLDAPURL ldap://ldap1.airius.com:389/ou=People, o=Airius?uid?sub?(objectClass=*)<br />
-require valid-user
-</example>
- </li>
-
- <li>
- The next example is the same as above; but with the fields
- that have useful defaults omitted. Also, note the use of a
- redundant LDAP server.
-<example>AuthLDAPURL ldap://ldap1.airius.com ldap2.airius.com/ou=People, o=Airius<br />
-require valid-user
-</example>
- </li>
-
- <li>
- The next example is similar to the previous one, but is
- uses the common name instead of the UID. Note that this
- could be problematical if multiple people in the directory
- share the same <code>cn</code>, because a search on <code>cn</code>
- <strong>must</strong> return exactly one entry. That's why
- this approach is not recommended: it's a better idea to
- choose an attribute that is guaranteed unique in your
- directory, such as <code>uid</code>.
-<example>
-AuthLDAPURL ldap://ldap.airius.com/ou=People, o=Airius?cn<br />
-require valid-user
-</example>
- </li>
-
- <li>
- Grant access to anybody in the Administrators group. The
- users must authenticate using their UID.
-<example>
-AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid<br />
-require group cn=Administrators, o=Airius
-</example>
- </li>
-
- <li>
- The next example assumes that everyone at Airius who
- carries an alphanumeric pager will have an LDAP attribute
- of <code>qpagePagerID</code>. The example will grant access
- only to people (authenticated via their UID) who have
- alphanumeric pagers:
-<example>
-AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid??(qpagePagerID=*)<br />
-require valid-user
-</example>
- </li>
-
- <li>
- <p>The next example demonstrates the power of using filters
- to accomplish complicated administrative requirements.
- Without filters, it would have been necessary to create a
- new LDAP group and ensure that the group's members remain
- synchronized with the pager users. This becomes trivial
- with filters. The goal is to grant access to anyone who has
- a filter, plus grant access to Joe Manager, who doesn't
- have a pager, but does need to access the same
- resource:</p>
-<example>
-AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid??(|(qpagePagerID=*)(uid=jmanager))<br />
-require valid-user
-</example>
-
- <p>This last may look confusing at first, so it helps to
- evaluate what the search filter will look like based on who
- connects, as shown below. The text in blue is the part that
- is filled in using the attribute specified in the URL. The
- text in red is the part that is filled in using the filter
- specified in the URL. The text in green is filled in using
- the information that is retrieved from the HTTP client. If
- Fred User connects as <code>fuser</code>, the filter would look
- like</p>
-
- <example>(&amp;(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</example>
-
- <p>The above search will only succeed if <em>fuser</em> has a
- pager. When Joe Manager connects as <em>jmanager</em>, the
- filter looks like</p>
-
- <example>(&amp;(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</example>
-
- <p>The above search will succeed whether <em>jmanager</em>
- has a pager or not.</p>
- </li>
- </ul>
-</section>
-
-<section id="usingtls"><title>Using TLS</title>
-
- <p>To use TLS, see the <module>mod_ldap</module> directives <directive
- module="mod_ldap">LDAPTrustedCA</directive> and <directive
- module="mod_ldap">LDAPTrustedCAType</directive>.</p>
-</section>
-
-<section id="usingssl"><title>Using SSL</title>
-
- <p>To use SSL, see the <module>mod_ldap</module> directives <directive
- module="mod_ldap">LDAPTrustedCA</directive> and <directive
- module="mod_ldap">LDAPTrustedCAType</directive>.</p>
-
- <p>To specify a secure LDAP server, use <em>ldaps://</em> in the
- <directive module="mod_auth_ldap">AuthLDAPURL</directive>
- directive, instead of <em>ldap://</em>.</p>
-</section>
-
-<section id="frontpage"><title>Using Microsoft
- FrontPage with mod_auth_ldap</title>
-
- <p>Normally, FrontPage uses FrontPage-web-specific user/group
- files (i.e., the <module>mod_authn_file</module> and
- <module>mod_authz_groupfile</module> modules) to handle all
- authentication. Unfortunately, it is not possible to just
- change to LDAP authentication by adding the proper directives,
- because it will break the <em>Permissions</em> forms in
- the FrontPage client, which attempt to modify the standard
- text-based authorization files.</p>
-
- <p>Once a FrontPage web has been created, adding LDAP
- authentication to it is a matter of adding the following
- directives to <em>every</em> <code>.htaccess</code> file
- that gets created in the web</p>
-<example><pre>
-AuthLDAPURL "the url"
-AuthLDAPAuthoritative off
-AuthLDAPFrontPageHack on
-</pre></example>
-
- <p><directive
- module="mod_auth_ldap">AuthLDAPAuthoritative</directive> must be
- off to allow <module>mod_auth_ldap</module> to decline group
- authentication so that Apache will fall back to file
- authentication for checking group membership. This allows the
- FrontPage-managed group file to be used.</p>
-
-<section id="howitworks"><title>How It Works</title>
-
- <p>FrontPage restricts access to a web by adding the <code>require
- valid-user</code> directive to the <code>.htaccess</code>
- files. If <directive
- module="mod_auth_ldap">AuthLDAPFrontPageHack</directive> is not
- on, the <code>require valid-user</code> directive will succeed for
- any user who is valid <em>as far as LDAP is
- concerned</em>. This means that anybody who has an entry in
- the LDAP directory is considered a valid user, whereas FrontPage
- considers only those people in the local user file to be
- valid. The purpose of the hack is to force Apache to consult the
- local user file (which is managed by FrontPage) - instead of LDAP
- - when handling the <code>require valid-user</code> directive.</p>
-
- <p>Once directives have been added as specified above,
- FrontPage users will be able to perform all management
- operations from the FrontPage client.</p>
-</section>
-
-<section id="fpcaveats"><title>Caveats</title>
-
- <ul>
- <li>When choosing the LDAP URL, the attribute to use for
- authentication should be something that will also be valid
- for putting into a <module>mod_authn_file</module> user file.
- The user ID is ideal for this.</li>
-
- <li>When adding users via FrontPage, FrontPage administrators
- should choose usernames that already exist in the LDAP
- directory (for obvious reasons). Also, the password that the
- administrator enters into the form is ignored, since Apache
- will actually be authenticating against the password in the
- LDAP database, and not against the password in the local user
- file. This could cause confusion for web administrators.</li>
-
- <!-- XXX is that true? was mod_auth before the aaa change -->
- <li>Apache must be compiled with <module>mod_auth_basic</module>,
- <module>mod_authn_file</module> and
- <module>mod_authz_groupfile</module> in order to
- use FrontPage support. This is because Apache will still use
- the <module>mod_authz_groupfile</module> group file for determine the extent of a
- user's access to the FrontPage web.</li>
-
- <li>The directives must be put in the <code>.htaccess</code>
- files. Attempting to put them inside <directive module="core"
- type="section">Location</directive> or <directive module="core"
- type="section">Directory</directive> directives won't work. This
- is because <module>mod_auth_ldap</module> has to be able to grab
- the <directive module="mod_authn_file">AuthUserFile</directive>
- directive that is found in FrontPage <code>.htaccess</code>
- files so that it knows where to look for the valid user list. If
- the <module>mod_auth_ldap</module> directives aren't in the same
- <code>.htaccess</code> file as the FrontPage directives, then
- the hack won't work, because <module>mod_auth_ldap</module> will
- never get a chance to process the <code>.htaccess</code> file,
- and won't be able to find the FrontPage-managed user file.</li>
- </ul>
-</section>
-</section>
-
-<directivesynopsis>
-<name>AuthLDAPAuthoritative</name>
-<description>Prevent other authentication modules from
-authenticating the user if this one fails</description>
-<syntax>AuthLDAPAuthoritative on|off</syntax>
-<default>AuthLDAPAuthoritative on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Set to <code>off</code> if this module should let other
- authentication modules attempt to authenticate the user, should
- authentication with this module fail. Control is only passed on
- to lower modules if there is no DN or rule that matches the
- supplied user name (as passed by the client).</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPBindDN</name>
-<description>Optional DN to use in binding to the LDAP server</description>
-<syntax>AuthLDAPBindDN <em>distinguished-name</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>An optional DN used to bind to the server when searching for
- entries. If not provided, <module>mod_auth_ldap</module> will use
- an anonymous bind.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPBindPassword</name>
-<description>Password used in conjuction with the bind DN</description>
-<syntax>AuthLDAPBindPassword <em>password</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>A bind password to use in conjunction with the bind DN. Note
- that the bind password is probably sensitive data, and should be
- properly protected. You should only use the <directive
- module="mod_auth_ldap">AuthLDAPBindDN</directive> and <directive
- module="mod_auth_ldap">AuthLDAPBindPassword</directive> if you
- absolutely need them to search the directory.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPCharsetConfig</name>
-<description>Language to charset conversion configuration file</description>
-<syntax>AuthLDAPCharsetConfig <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-</contextlist>
-
-<usage>
- <p>The <directive>AuthLDAPCharsetConfig</directive> directive sets the location
- of the language to charset conversion configuration file. <var>File-path</var> is relative
- to the <directive module="core">ServerRoot</directive>. This file specifies
- the list of language extensions to character sets.
- Most administrators use the provided <code>charset.conv</code>
- file, which associates common language extensions to character sets.</p>
-
- <p>The file contains lines in the following format:</p>
-
- <example>
- <var>Language-Extension</var> <var>charset</var> [<var>Language-String</var>] ...
- </example>
-
- <p>The case of the extension does not matter. Blank lines, and lines
- beginning with a hash character (<code>#</code>) are ignored.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPCompareDNOnServer</name>
-<description>Use the LDAP server to compare the DNs</description>
-<syntax>AuthLDAPCompareDNOnServer on|off</syntax>
-<default>AuthLDAPCompareDNOnServer on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>When set, <module>mod_auth_ldap</module> will use the LDAP
- server to compare the DNs. This is the only foolproof way to
- compare DNs. <module>mod_auth_ldap</module> will search the
- directory for the DN specified with the <a
- href="#reqdn"><code>require dn</code></a> directive, then,
- retrieve the DN and compare it with the DN retrieved from the user
- entry. If this directive is not set,
- <module>mod_auth_ldap</module> simply does a string comparison. It
- is possible to get false negatives with this approach, but it is
- much faster. Note the <module>mod_ldap</module> cache can speed up
- DN comparison in most situations.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPDereferenceAliases</name>
-<description>When will the module de-reference aliases</description>
-<syntax>AuthLDAPDereferenceAliases never|searching|finding|always</syntax>
-<default>AuthLDAPDereferenceAliases Always</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>This directive specifies when <module>mod_auth_ldap</module> will
- de-reference aliases during LDAP operations. The default is
- <code>always</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPEnabled</name>
-<description>Turn on or off LDAP authentication</description>
-<syntax> AuthLDAPEnabled on|off</syntax>
-<default>AuthLDAPEnabled on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Set to <code>off</code> to disable
- <module>mod_auth_ldap</module> in certain directories. This is
- useful if you have <module>mod_auth_ldap</module> enabled at or
- near the top of your tree, but want to disable it completely in
- certain locations.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPFrontPageHack</name>
-<description>Allow LDAP authentication to work with MS FrontPage</description>
-<syntax>AuthLDAPFrontPageHack on|off</syntax>
-<default>AuthLDAPFrontPageHack off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>See the section on <a href="#frontpage">using Microsoft
- FrontPage</a> with <module>mod_auth_ldap</module>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPGroupAttribute</name>
-<description>LDAP attributes used to check for group membership</description>
-<syntax>AuthLDAPGroupAttribute <em>attribute</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>This directive specifies which LDAP attributes are used to
- check for group membership. Multiple attributes can be used by
- specifying this directive multiple times. If not specified,
- then <module>mod_auth_ldap</module> uses the <code>member</code> and
- <code>uniquemember</code> attributes.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPGroupAttributeIsDN</name>
-<description>Use the DN of the client username when checking for
-group membership</description>
-<syntax>AuthLDAPGroupAttributeIsDN on|off</syntax>
-<default>AuthLDAPGroupAttributeIsDN on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>When set <code>on</code>, this directive says to use the
- distinguished name of the client username when checking for group
- membership. Otherwise, the username will be used. For example,
- assume that the client sent the username <code>bjenson</code>,
- which corresponds to the LDAP DN <code>cn=Babs Jenson,
- o=Airius</code>. If this directive is set,
- <module>mod_auth_ldap</module> will check if the group has
- <code>cn=Babs Jenson, o=Airius</code> as a member. If this
- directive is not set, then <module>mod_auth_ldap</module> will
- check if the group has <code>bjenson</code> as a member.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPRemoteUserIsDN</name>
-<description>Use the DN of the client username to set the REMOTE_USER
-environment variable</description>
-<syntax>AuthLDAPRemoteUserIsDN on|off</syntax>
-<default>AuthLDAPRemoteUserIsDN off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>If this directive is set to on, the value of the
- <code>REMOTE_USER</code> environment variable will be set to the full
- distinguished name of the authenticated user, rather than just
- the username that was passed by the client. It is turned off by
- default.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthLDAPUrl</name>
-<description>URL specifying the LDAP search parameters</description>
-<syntax>AuthLDAPUrl <em>url</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>An RFC 2255 URL which specifies the LDAP search parameters
- to use. The syntax of the URL is</p>
-<example>ldap://host:port/basedn?attribute?scope?filter</example>
-
-<dl>
-<dt>ldap</dt>
-
- <dd>For regular ldap, use the
- string <code>ldap</code>. For secure LDAP, use <code>ldaps</code>
- instead. Secure LDAP is only available if Apache was linked
- to an LDAP library with SSL support.</dd>
-
-<dt>host:port</dt>
-
- <dd>
- <p>The name/port of the ldap server (defaults to
- <code>localhost:389</code> for <code>ldap</code>, and
- <code>localhost:636</code> for <code>ldaps</code>). To
- specify multiple, redundant LDAP servers, just list all
- servers, separated by spaces. <module>mod_auth_ldap</module>
- will try connecting to each server in turn, until it makes a
- successful connection.</p>
-
- <p>Once a connection has been made to a server, that
- connection remains active for the life of the
- <code>httpd</code> process, or until the LDAP server goes
- down.</p>
-
- <p>If the LDAP server goes down and breaks an existing
- connection, <module>mod_auth_ldap</module> will attempt to
- re-connect, starting with the primary server, and trying
- each redundant server in turn. Note that this is different
- than a true round-robin search.</p>
- </dd>
-
-<dt>basedn</dt>
-
- <dd>The DN of the branch of the
- directory where all searches should start from. At the very
- least, this must be the top of your directory tree, but
- could also specify a subtree in the directory.</dd>
-
-<dt>attribute</dt>
-
- <dd>The attribute to search for.
- Although RFC 2255 allows a comma-separated list of
- attributes, only the first attribute will be used, no
- matter how many are provided. If no attributes are
- provided, the default is to use <code>uid</code>. It's a good
- idea to choose an attribute that will be unique across all
- entries in the subtree you will be using.</dd>
-
-<dt>scope</dt>
-
- <dd>The scope of the search. Can be either <code>one</code> or
- <code>sub</code>. Note that a scope of <code>base</code> is
- also supported by RFC 2255, but is not supported by this
- module. If the scope is not provided, or if <code>base</code> scope
- is specified, the default is to use a scope of
- <code>sub</code>.</dd>
-
-<dt>filter</dt>
-
- <dd>A valid LDAP search filter. If
- not provided, defaults to <code>(objectClass=*)</code>, which
- will search for all objects in the tree. Filters are
- limited to approximately 8000 characters (the definition of
- <code>MAX_STRING_LEN</code> in the Apache source code). This
- should be than sufficient for any application.</dd>
-</dl>
-
- <p>When doing searches, the attribute, filter and username passed
- by the HTTP client are combined to create a search filter that
- looks like
- <code>(&amp;(<em>filter</em>)(<em>attribute</em>=<em>username</em>))</code>.</p>
-
- <p>For example, consider an URL of
- <code>ldap://ldap.airius.com/o=Airius?cn?sub?(posixid=*)</code>. When
- a client attempts to connect using a username of <code>Babs
- Jenson</code>, the resulting search filter will be
- <code>(&amp;(posixid=*)(cn=Babs Jenson))</code>.</p>
-
- <p>See above for examples of <directive
- module="mod_auth_ldap">AuthLDAPURL</directive> URLs.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth_ldap.xml.meta b/docs/manual/mod/mod_auth_ldap.xml.meta
deleted file mode 100644
index b751577a5f..0000000000
--- a/docs/manual/mod/mod_auth_ldap.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_auth_ldap</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authn_anon.html b/docs/manual/mod/mod_authn_anon.html
deleted file mode 100644
index 3afcbf615b..0000000000
--- a/docs/manual/mod/mod_authn_anon.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authn_anon.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authn_anon.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authn_anon.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authn_anon.html.en b/docs/manual/mod/mod_authn_anon.html.en
deleted file mode 100644
index 3eb7598ea4..0000000000
--- a/docs/manual/mod/mod_authn_anon.html.en
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_anon - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authn_anon</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_anon.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_anon.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_anon.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Allows "anonymous" user access to authenticated
- areas</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authn_anon_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authn_anon.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides authentication front-ends such as
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> to authenticate users similar
- to anonymous-ftp sites, <em>i.e.</em> have a 'magic' user id
- 'anonymous' and the email address as a password. These email
- addresses can be logged.</p>
-
- <p>Combined with other (database) access control methods, this
- allows for effective user tracking and customization according
- to a user profile while still keeping the site open for
- 'unregistered' users. One advantage of using Auth-based user
- tracking is that, unlike magic-cookies and funny URL
- pre/postfixes, it is completely browser independent and it
- allows users to share URLs.</p>
-
- <p>When using <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>, this module is invoked
- via the <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
- directive with the <code>anon</code> value.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous">Anonymous</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Example</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Example</a></h2>
- <p>The example below is combined with "normal" htpasswd-file based
- authentication and allows users in additionally as 'guests' with the
- following properties:</p>
-
- <ul>
- <li>It insists that the user enters a userID.
- (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>It insists that the user enters a password.
- (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>The password entered must be a valid email address, <em>i.e.</em>
- contain at least one '@' and a '.'.
- (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>The userID must be one of <code>anonymous guest www test
- welcome</code> and comparison is <strong>not</strong> case
- sensitive. (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
-
- <li>And the Email addresses entered in the passwd field are
- logged to the error log file.
- (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Directory /foo&gt;
- <span class="indent">
- AuthName "Use 'anonymous' &amp; Email address for guest entry"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous" id="Anonymous">Anonymous</a> <a name="anonymous" id="anonymous">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies userIDs that are allowed access without
-password verification</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Anonymous <var>user</var> [<var>user</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>A list of one or more 'magic' userIDs which are allowed
- access without password verification. The userIDs are space
- separated. It is possible to use the ' and " quotes to allow a
- space in a userID as well as the \ escape character.</p>
-
- <p>Please note that the comparison is
- <strong>case-IN-sensitive</strong>.<br />
- It's strongly recommended that the magic username
- '<code>anonymous</code>' is always one of the allowed
- userIDs.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- Anonymous anonymous "Not Registered" "I don't know"
- </code></p></div>
-
- <p>This would allow the user to enter without password
- verification by using the userIDs "anonymous",
- "AnonyMous", "Not Registered" and "I Don't Know".</p>
-
- <p>As of Apache 2.1 it is possible to specify the userID as
- "<code>*</code>". That allows <em>any</em> supplied userID to be
- accepted.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_LogEmail" id="Anonymous_LogEmail">Anonymous_LogEmail</a> <a name="anonymous_logemail" id="anonymous_logemail">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether the password entered will be logged in the
-error log</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Anonymous_LogEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Anonymous_LogEmail On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>When set <code>On</code>, the default, the 'password' entered
- (which hopefully contains a sensible email address) is logged in
- the error log.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_MustGiveEmail" id="Anonymous_MustGiveEmail">Anonymous_MustGiveEmail</a> <a name="anonymous_mustgiveemail" id="anonymous_mustgiveemail">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies whether blank passwords are allowed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Anonymous_MustGiveEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Anonymous_MustGiveEmail On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>Specifies whether the user must specify an email address as
- the password. This prohibits blank passwords.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_NoUserID" id="Anonymous_NoUserID">Anonymous_NoUserID</a> <a name="anonymous_nouserid" id="anonymous_nouserid">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether the userID field may be empty</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Anonymous_NoUserID On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Anonymous_NoUserID Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>When set <code>On</code>, users can leave the userID (and
- perhaps the password field) empty. This can be very convenient for
- MS-Explorer users who can just hit return or click directly on the
- OK button; which seems a natural reaction.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_VerifyEmail" id="Anonymous_VerifyEmail">Anonymous_VerifyEmail</a> <a name="anonymous_verifyemail" id="anonymous_verifyemail">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether to check the password field for a correctly
-formatted email address</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Anonymous_VerifyEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Anonymous_VerifyEmail Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>When set <code>On</code> the 'password' entered is checked for
- at least one '@' and a '.' to encourage users to enter valid email
- addresses (see the above <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>).</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_anon.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_anon.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_anon.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_anon.html.ja.euc-jp b/docs/manual/mod/mod_authn_anon.html.ja.euc-jp
deleted file mode 100644
index 760deaa289..0000000000
--- a/docs/manual/mod/mod_authn_anon.html.ja.euc-jp
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_anon - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authn_anon</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_anon.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_anon.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_anon.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>ǧ¾Ú¤¬É¬ÍפÊÎΰè¤Ø¤Î "anonymous" ¥æ¡¼¥¶¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë
-</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authn_anon_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authn_anon.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤Î¤è¤¦¤Ê
- ǧ¾Ú¥Õ¥í¥ó¥È¥¨¥ó¥É¤È¤·¤Æ¡¢anonymous-ftp ¥µ¥¤¥È¤Î¤è¤¦¤Ê¡¢¡ÖËâË¡¤Î¡×¥æ¡¼¥¶ ID
- 'anonymous' ¤ÈÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤ò¥Ñ¥¹¥ï¡¼¥É¤Ë¤·¤¿¥æ¡¼¥¶Ç§¾Ú¤ò
- ¹Ô¤Ê¤¦µ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£¤³¤ÎÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ï¥í¥°¼ý½¸¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¾¤Î (¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤è¤ë) ¥¢¥¯¥»¥¹À©¸æÊýË¡¤ÈÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¡¢
- ¡Ö̤ÅÐÏ¿¡×¥æ¡¼¥¶¤ËÂФ·¤Æ¥µ¥¤¥È¤ò¸ø³«¤·¤Ä¤Ä¡¢¸úΨ¤è¤¯¥æ¡¼¥¶ÄÉÀפ·¤¿¤ê¡¢
- ¥æ¡¼¥¶¤Î¥×¥í¥Õ¥¡¥¤¥ë¤Ë±þ¤¸¤¿¥«¥¹¥¿¥Þ¥¤¥º¤ò¤·¤¿¤ê¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Êǧ¾Ú¤Ë´ð¤Å¤¤¤¿¥æ¡¼¥¶ÄÉÀפÎÍøÅÀ¤Î°ì¤Ä¤Ï¡¢
- ¥Þ¥¸¥Ã¥¯¥¯¥Ã¥­¡¼¤Ë´ð¤Å¤¯¥æ¡¼¥¶ÄÉÀ×ÊýË¡¤ä¡¢
- ÄÁ̯¤Ê URL ¤ÎÀÜƬ¼­¤äÀÜÈø¼­¤òÍøÍѤ·¤¿¥æ¡¼¥¶ÄÉÀ×ÊýË¡¤È¤Ï°Û¤Ê¤ê¡¢
- ´°Á´¤Ë¥Ö¥é¥¦¥¶Èó°Í¸¤Ç¤¢¤ê¡¢¥æ¡¼¥¶´Ö¤Ç URL ¤ò¶¦Í­¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤È¤¤¤¦
- ÅÀ¤Ç¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ¤Ë
- <code>anon</code> ¤È¤¤¤¦ÃͤòÀßÄꤹ¤ë¤³¤È¤Çµ¯Æ°¤µ¤ì¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous">Anonymous</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Îã</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Îã</a></h2>
- <p>°Ê²¼¤ÎÎã¤Ï¡ÖÉáÄ̡פΠhtpasswd ¥Õ¥¡¥¤¥ë¤Ë´ð¤Å¤¤¤¿Ç§¾Ú¤ÈÁȤ߹ç¤ï¤µ¤ì¤Æ
- ¤ª¤ê¡¢°Ê²¼¤ÎÍ×·ï¤ò¸«¤¿¤¹¥æ¡¼¥¶¤ò¡Ö¥²¥¹¥È¡×¤È¤·¤Æµö²Ä¤·¤Þ¤¹:</p>
-
- <ul>
- <li>¥æ¡¼¥¶¤Ï userID ¤òÆþÎϤ·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>¥æ¡¼¥¶¤Ï¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ÏÍ­¸ú¤ÊÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ç¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£<em>¤¹¤Ê¤ï¤Á</em>¡¢¾¯¤¯¤È¤â°ì¤Ä¤Î '@' ¤È '.' ¤¬
- ´Þ¤Þ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>userID ¤Ï <code>anonymous guest www test
- welcome</code> ¤Î¤É¤ì¤«¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¥æ¡¼¥¶Ì¾¤ÎÈæ³Ó¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊÌ<strong>¤·¤Þ¤»¤ó¡£</strong></li>
-
- <li>¥Ñ¥¹¥ï¡¼¥ÉÍó¤ËÆþÎϤµ¤ì¤¿ÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ï¥¨¥é¡¼¥í¥°¥Õ¥¡¥¤¥ë¤Ë
- ¥í¥®¥ó¥°¤µ¤ì¤Þ¤¹¡£
- (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;Directory /foo&gt;
- <span class="indent">
- AuthName "Use 'anonymous' &amp; Email address for guest entry"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous" id="Anonymous">Anonymous</a> <a name="anonymous" id="anonymous">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ñ¥¹¥ï¡¼¥É¤Î¸¡ººÌµ¤·¤Ç¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë userID ¤ò»ØÄꤹ¤ë
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Anonymous <var>user</var> [<var>user</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>¥Ñ¥¹¥ï¡¼¥É¤Î¸¡ºº¤ò¤·¤Ê¤¤¤Ç¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë¡ÖËâË¡¤Î¡× userID ¤ò
- ÀßÄꤷ¤Þ¤¹¡£userID Ãæ¤Ë¶õÇò¤ò»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¡¢
- ¥¨¥¹¥±¡¼¥×ʸ»ú \ ¤Ë¤è¤ëÊýË¡¤È¡¢°úÍÑÉä ' ¤È " ¤Ë¤è¤ë¥¯¥ª¡¼¥Æ¥£¥ó¥°
- ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥æ¡¼¥¶Ì¾¤ÎÈæ³Ó¤Ï<strong>Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤</strong>¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£<br />
- ËâË¡¤Î¥æ¡¼¥¶Ì¾ '<code>anonymous</code>' ¤¬µö²Ä¤µ¤ì¤Æ¤¤¤ë userID ¤Ë
- ´Þ¤à¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ï¶¯¤¯¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã:</h3><p><code>
- Anonymous anonymous "Not Registered" "I don't know"
- </code></p></div>
-
- <p>¤³¤ì¤Ï¡¢userID "anonymous",
- "AnonyMous", "Not Registered", "I Don't Know" ¤Î¤É¤ì¤«¤ò»È¤Ã¤Æ¤â
- ¥Ñ¥¹¥ï¡¼¥É̵¤·¤Ç¥æ¡¼¥¶¤¬¥µ¥¤¥È¤ËÆþ¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>Apache 2.1 ¤Ç¤Ï userID ¤Ë "<code>*</code>" ¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¡¢<em>¤¹¤Ù¤Æ¤Î</em>userID ¤òµö²Ä¤·¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_LogEmail" id="Anonymous_LogEmail">Anonymous_LogEmail</a> <a name="anonymous_logemail" id="anonymous_logemail">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤¬¥¨¥é¡¼¥í¥°¤Ë¥í¥®¥ó¥°¤µ¤ì¤ë¤«¤É¤¦¤«¤ò
-ÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Anonymous_LogEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Anonymous_LogEmail On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>¥Ç¥Õ¥©¥ë¥È¤Î <code>On</code> ¤ËÀßÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢
- ÆþÎϤµ¤ì¤¿ (¤Þ¤Ã¤È¤¦¤ÊÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ç¤¢¤ë¤³¤È¤¬
- ´üÂÔ¤µ¤ì¤ë) ¡Ö¥Ñ¥¹¥ï¡¼¥É¡×¤¬¥¨¥é¡¼¥í¥°¤Ë¥í¥®¥ó¥°¤µ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_MustGiveEmail" id="Anonymous_MustGiveEmail">Anonymous_MustGiveEmail</a> <a name="anonymous_mustgiveemail" id="anonymous_mustgiveemail">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¶õ¥Ñ¥¹¥ï¡¼¥É¤òµö²Ä¤¹¤ë¤«¤É¤¦¤«¤ò»ØÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Anonymous_MustGiveEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Anonymous_MustGiveEmail On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>¥æ¡¼¥¶¤¬¥Ñ¥¹¥ï¡¼¥É¤È¤·¤ÆÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¤«¤É¤¦¤«¤ò
- ÀßÄꤷ¤Þ¤¹¡£¤³¤ì¤Ï¶õ¥Ñ¥¹¥ï¡¼¥É¤ò¶Ø»ß¤·¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_NoUserID" id="Anonymous_NoUserID">Anonymous_NoUserID</a> <a name="anonymous_nouserid" id="anonymous_nouserid">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¶õ userID ¤òµö²Ä¤¹¤ë¤«¤ò»ØÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Anonymous_NoUserID On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Anonymous_NoUserID Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p><code>On</code> ¤ËÀßÄꤹ¤ë¤È¡¢¥æ¡¼¥¶¤Ï userID (¤È¤ª¤½¤é¤¯¤Ï
- ¥Ñ¥¹¥ï¡¼¥ÉÍó¤â) ¶õ¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ïñ¤Ë¥ê¥¿¡¼¥ó¥­¡¼¤ò
- ᤤ¤¿¤ê OK ¥Ü¥¿¥ó¤òľÀÜ¥¯¥ê¥Ã¥¯¤·¤¿¤ê¤¹¤ë MS-Explorer ¥æ¡¼¥¶¤Ë¤Ï
- Èó¾ï¤ËÊØÍø¤Ç¤¹¡£¤½¤Î¤è¤¦¤ÊÁàºî¤Ï¤´¤¯¤´¤¯¼«Á³¤Ê¤â¤Î¤Ç¤·¤ç¤¦¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_VerifyEmail" id="Anonymous_VerifyEmail">Anonymous_VerifyEmail</a> <a name="anonymous_verifyemail" id="anonymous_verifyemail">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ñ¥¹¥ï¡¼¥ÉÍó¤¬Àµ¤·¤¤·Á¼°¤ÎÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ç¤¢¤ë¤³¤È¤ò
-Ä´¤Ù¤ë¤«¤É¤¦¤«¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Anonymous_VerifyEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Anonymous_VerifyEmail Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p><code>On</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¥æ¡¼¥¶¤¬Í­¸ú¤ÊÅŻҥ᡼¥ë
- ¥¢¥É¥ì¥¹¤òÆþÎϤ¹¤ë¤³¤È¤ò¿ä¾©¤¹¤ë¤¿¤á¡¢ÆþÎϤµ¤ì¤¿¡Ö¥Ñ¥¹¥ï¡¼¥É¡×¤Ï
- ¾¯¤Ê¤¯¤È¤â°ì¤Ä¤Î '@' ¤È '.' ¤ò´Þ¤ó¤Ç¤¤¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹
- (¾å¤Î <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code> »²¾È)¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_anon.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_anon.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_anon.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_anon.html.ko.euc-kr b/docs/manual/mod/mod_authn_anon.html.ko.euc-kr
deleted file mode 100644
index 9ef2566427..0000000000
--- a/docs/manual/mod/mod_authn_anon.html.ko.euc-kr
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_anon - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authn_anon</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_anon.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_anon.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_anon.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõ¿µ¿ª¿¡ "À͸í(anonymous)" »ç¿ëÀÚÀÇ Á¢±ÙÀ»
-Çã¿ëÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authn_anon_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authn_anon.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> µî ÀÎÁõ¾Õ´Ü¸ðµâÀ»
- À§ÇØ (<em>¿¹¸¦ µé¾î</em> 'Ưº°ÇÑ' »ç¿ëÀÚ ¾ÆÀ̵ð 'anonymous'¿Í
- ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ¾ÏÈ£·Î »ç¿ëÇÏ´Â) À͸í-ftp »çÀÌÆ®¿Í À¯»çÇÑ
- »ç¿ëÀÚ ÀÎÁõÀ» ÇÑ´Ù. ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ·Î±×¿¡ ±â·ÏÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>´Ù¸¥ (µ¥ÀÌÅͺ£À̽º) Á¢±ÙÁ¦¾î ¹æ½Ä°ú ÇÔ²² »ç¿ëÇÏ¿©
- 'µî·ÏÇÏÁö¾ÊÀº' »ç¿ëÀÚ¿¡°Ô »çÀÌÆ®¸¦ ¿­¾îµÎ¸é¼­ È¿À²ÀûÀÎ »ç¿ëÀÚ
- ÃßÀû°ú »ç¿ëÀÚÁ¤ÀÇ°¡ °¡´ÉÇÏ´Ù. ÀÎÁõ±â¹Ý »ç¿ëÀÚ ÃßÀûÀº ÄíÅ°³ª
- ±«»óÇÑ URL Á¢µÎ»ç/Á¢¹Ì»ç¿Í ´Þ¸® ¿ÏÀüÈ÷ ºê¶ó¿ìÀú µ¶¸³ÀûÀÌ°í
- »ç¿ëÀÚ°¡ URLÀ» °øÀ¯ÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.</p>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>À» »ç¿ëÇÒ¶§ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>ÀÇ
- °ªÀ¸·Î <code>anon</code>À» ¼³Á¤Çϸé ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous">Anonymous</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_logemail">Anonymous_LogEmail</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_nouserid">Anonymous_NoUserID</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">¿¹Á¦</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">¿¹Á¦</a></h2>
- <p>´ÙÀ½ ¿¹´Â "ÀϹÝÀûÀÎ" htpasswd-ÆÄÀϱâ¹Ý ÀÎÁõ¿¡ Ãß°¡·Î
- »ç¿ëÀÚ°¡ ´ÙÀ½ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù¸é '¼Õ´Ô(guest)'À¸·Î Á¢±ÙÇÒ
- ¼ö ÀÖµµ·Ï ÇÑ´Ù:</p>
-
- <ul>
- <li>»ç¿ëÀÚ´Â »ç¿ëÀÚ ¾ÆÀ̵𸦠ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_nouserid">Anonymous_NoUserID</a></code>)</li>
-
- <li>»ç¿ëÀÚ´Â ¾ÏÈ£¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></code>)</li>
-
- <li>¾ÏÈ£·Î À¯È¿ÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. <em>¿¹¸¦
- µé¾î</em> ÃÖ¼ÒÇÑ '@'¿Í '.' ÇÑ°³¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. (<code class="directive"><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></code>)</li>
-
- <li>»ç¿ëÀÚ ¾ÆÀ̵ð´Â <code>anonymous guest www test
- welcome</code> Áß ÇϳªÀ̸ç, ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö
- <strong>¾Ê´Â´Ù</strong>. (<code class="directive"><a href="#anonymous">Anonymous</a></code>)</li>
-
- <li>±×¸®°í ¾ÏÈ£·Î ÀÔ·ÂÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ¿À·ù·Î±×ÆÄÀÏ¿¡
- ±â·ÏÇÑ´Ù. (<code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code>)</li>
- </ul>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;Directory /foo&gt;
- <span class="indent">
- AuthName "¼Õ´ÔÀ¸·Î ¹æ¹®ÇÏ·Á¸é 'anonymous'¿Í ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous" id="Anonymous">Anonymous</a> <a name="anonymous" id="anonymous">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÏÈ£°Ë»ç¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÒ »ç¿ëÀÚ ¾ÆÀ̵ðµéÀ»
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Anonymous <var>user</var> [<var>user</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>¾ÏÈ£°Ë»ç¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÒ 'Ưº°ÇÑ' »ç¿ëÀÚ ¾ÆÀ̵ð ¸ñ·Ï.
- »ç¿ëÀÚ ¾ÆÀ̵ðµéÀ» °ø¹éÀ¸·Î ±¸ºÐÇÑ´Ù. µû¿ÈÇ¥ '¿Í "³ª Å»Ãâ¹®ÀÚ
- \¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ ¾ÆÀ̵ð ¾È¿¡ °ø¹éÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÀ̵ð´Â <strong>´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾ÊÀ½</strong>À»
- ÁÖÀÇÇ϶ó.<br />
- Çã¿ëÇÒ »ç¿ëÀÚ ¾ÆÀ̵𿡠Ưº°ÇÑ »ç¿ëÀÚ¸íÀÎ
- '<code>anonymous</code>'¸¦ Ç×»ó Æ÷ÇÔÇÏ±æ °­·ÂÈ÷ ±ÇÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Anonymous anonymous "Not Registered" "I don't know"
- </code></p></div>
-
- <p>"anonymous", "AnonyMous", "Not Registered", "I Don't Know"
- µî »ç¿ëÀÚ ¾ÆÀ̵𸦠»ç¿ëÇÏ¸é ¾ÏÈ£°Ë»ç¾øÀÌ »ç¿ëÀÚ¸¦ Çã¿ëÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 2.1¿¡¼­´Â »ç¿ëÀÚ ¾ÆÀ̵ð·Î "<code>*</code>"¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯¸é <em>¾î¶²</em> »ç¿ëÀÚ ¾ÆÀ̵ð¶óµµ
- ¹Þ¾ÆµéÀδÙ.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_LogEmail" id="Anonymous_LogEmail">Anonymous_LogEmail</a> <a name="anonymous_logemail" id="anonymous_logemail">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÔ·ÂÇÑ ¾ÏÈ£¸¦ ¿À·ù·Î±×¿¡ ±â·ÏÇÒÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Anonymous_LogEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Anonymous_LogEmail On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>±âº»°ªÀÎ <code>On</code>À¸·Î ¼³Á¤Çϸé (¾Æ¸¶µµ ÀüÀÚ¿ìÆí
- ÁÖ¼ÒÀÏ) ÀÔ·ÂÇÑ '¾ÏÈ£'¸¦ ¿À·ù·Î±×¿¡ ±â·ÏÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_MustGiveEmail" id="Anonymous_MustGiveEmail">Anonymous_MustGiveEmail</a> <a name="anonymous_mustgiveemail" id="anonymous_mustgiveemail">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÏÈ£°¡ ¾ø¾îµµ °¡´ÉÇÑÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Anonymous_MustGiveEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Anonymous_MustGiveEmail On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p>»ç¿ëÀÚ°¡ ¾ÏÈ£·Î ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ÀÔ·ÂÇØ¾ß ÇÏ´ÂÁö ¿©ºÎ¸¦
- °áÁ¤ÇÑ´Ù. ¾ÏÈ£°¡ ¾øÀ¸¸é °ÅºÎÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_NoUserID" id="Anonymous_NoUserID">Anonymous_NoUserID</a> <a name="anonymous_nouserid" id="anonymous_nouserid">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>»ç¿ëÀÚ ¾ÆÀ̵𰡠¾ø¾îµµ °¡´ÉÇÏÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Anonymous_NoUserID On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Anonymous_NoUserID Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p><code>On</code>À¸·Î ¼³Á¤ÇÏ¸é »ç¿ëÀÚ´Â »ç¿ëÀÚ ¾ÆÀ̵ð¸¦
- (¾Æ¸¶ ¾ÏÈ£µµ) ÀÔ·ÂÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ÀÌ´Â ÀÚ¿¬½º·´°Ô ±×³É
- returnÀ» Ä¡°Å³ª OK ¹öÆ°À» Ŭ¸¯ÇÏ´Â MS-Explorer »ç¿ëÀÚ¿¡°Ô
- ¸Å¿ì Æí¸®ÇÏ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Anonymous_VerifyEmail" id="Anonymous_VerifyEmail">Anonymous_VerifyEmail</a> <a name="anonymous_verifyemail" id="anonymous_verifyemail">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÏÈ£°¡ ¿Ã¹Ù¸¥ Çü½ÄÀÇ ÀüÀÚ¿ìÆí ÁÖ¼ÒÀÎÁö °Ë»ç
-¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Anonymous_VerifyEmail On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Anonymous_VerifyEmail Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_anon</td></tr>
-</table>
- <p><code>On</code>À¸·Î ¼³Á¤ÇÏ¸é »ç¿ëÀÚ°¡ ¿Ã¹Ù¸¥ ÀüÀÚ¿ìÆí
- ÁÖ¼Ò¸¦ ÀÔ·ÂÇϵµ·Ï ÀÔ·ÂÇÑ '¾ÏÈ£'°¡ ÃÖ¼ÒÇÑ '@'¿Í '.'¸¦ ÇÑ°³¾¿
- Æ÷ÇÔÇÏ´ÂÁö °Ë»çÇÑ´Ù (À§ÀÇ <code class="directive"><a href="#anonymous_logemail">Anonymous_LogEmail</a></code> Âü°í).</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_anon.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_anon.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_anon.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_anon.xml b/docs/manual/mod/mod_authn_anon.xml
deleted file mode 100644
index 0a109ab99e..0000000000
--- a/docs/manual/mod/mod_authn_anon.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_anon.xml.meta">
-
-<name>mod_authn_anon</name>
-<description>Allows "anonymous" user access to authenticated
- areas</description>
-<status>Extension</status>
-<sourcefile>mod_authn_anon.c</sourcefile>
-<identifier>authn_anon_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module provides authentication front-ends such as
- <module>mod_auth_basic</module> to authenticate users similar
- to anonymous-ftp sites, <em>i.e.</em> have a 'magic' user id
- 'anonymous' and the email address as a password. These email
- addresses can be logged.</p>
-
- <p>Combined with other (database) access control methods, this
- allows for effective user tracking and customization according
- to a user profile while still keeping the site open for
- 'unregistered' users. One advantage of using Auth-based user
- tracking is that, unlike magic-cookies and funny URL
- pre/postfixes, it is completely browser independent and it
- allows users to share URLs.</p>
-
- <p>When using <module>mod_auth_basic</module>, this module is invoked
- via the <directive module="mod_auth_basic">AuthBasicProvider</directive>
- directive with the <code>anon</code> value.</p>
-</summary>
-
-<section id="example"><title>Example</title>
- <p>The example below is combined with "normal" htpasswd-file based
- authentication and allows users in additionally as 'guests' with the
- following properties:</p>
-
- <ul>
- <li>It insists that the user enters a userID.
- (<directive module="mod_authn_anon"
- >Anonymous_NoUserID</directive>)</li>
-
- <li>It insists that the user enters a password.
- (<directive module="mod_authn_anon"
- >Anonymous_MustGiveEmail</directive>)</li>
-
- <li>The password entered must be a valid email address, <em>i.e.</em>
- contain at least one '@' and a '.'.
- (<directive module="mod_authn_anon"
- >Anonymous_VerifyEmail</directive>)</li>
-
- <li>The userID must be one of <code>anonymous guest www test
- welcome</code> and comparison is <strong>not</strong> case
- sensitive. (<directive module="mod_authn_anon"
- >Anonymous</directive>)</li>
-
- <li>And the Email addresses entered in the passwd field are
- logged to the error log file.
- (<directive module="mod_authn_anon"
- >Anonymous_LogEmail</directive>)</li>
- </ul>
-
- <example><title>Example</title>
- &lt;Directory /foo&gt;
- <indent>
- AuthName "Use 'anonymous' &amp; Email address for guest entry"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</section>
-
-<directivesynopsis>
-<name>Anonymous</name>
-<description>Specifies userIDs that are allowed access without
-password verification</description>
-<syntax>Anonymous <var>user</var> [<var>user</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>A list of one or more 'magic' userIDs which are allowed
- access without password verification. The userIDs are space
- separated. It is possible to use the ' and " quotes to allow a
- space in a userID as well as the \ escape character.</p>
-
- <p>Please note that the comparison is
- <strong>case-IN-sensitive</strong>.<br />
- It's strongly recommended that the magic username
- '<code>anonymous</code>' is always one of the allowed
- userIDs.</p>
-
- <example><title>Example:</title>
- Anonymous anonymous "Not Registered" "I don't know"
- </example>
-
- <p>This would allow the user to enter without password
- verification by using the userIDs "anonymous",
- "AnonyMous", "Not Registered" and "I Don't Know".</p>
-
- <p>As of Apache 2.1 it is possible to specify the userID as
- "<code>*</code>". That allows <em>any</em> supplied userID to be
- accepted.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_LogEmail</name>
-<description>Sets whether the password entered will be logged in the
-error log</description>
-<syntax>Anonymous_LogEmail On|Off</syntax>
-<default>Anonymous_LogEmail On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>When set <code>On</code>, the default, the 'password' entered
- (which hopefully contains a sensible email address) is logged in
- the error log.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_MustGiveEmail</name>
-<description>Specifies whether blank passwords are allowed</description>
-<syntax>Anonymous_MustGiveEmail On|Off</syntax>
-<default>Anonymous_MustGiveEmail On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Specifies whether the user must specify an email address as
- the password. This prohibits blank passwords.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_NoUserID</name>
-<description>Sets whether the userID field may be empty</description>
-<syntax>Anonymous_NoUserID On|Off</syntax>
-<default>Anonymous_NoUserID Off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>When set <code>On</code>, users can leave the userID (and
- perhaps the password field) empty. This can be very convenient for
- MS-Explorer users who can just hit return or click directly on the
- OK button; which seems a natural reaction.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_VerifyEmail</name>
-<description>Sets whether to check the password field for a correctly
-formatted email address</description>
-<syntax>Anonymous_VerifyEmail On|Off</syntax>
-<default>Anonymous_VerifyEmail Off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>When set <code>On</code> the 'password' entered is checked for
- at least one '@' and a '.' to encourage users to enter valid email
- addresses (see the above <directive
- module="mod_authn_anon">Anonymous_LogEmail</directive>).</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_anon.xml.ja b/docs/manual/mod/mod_authn_anon.xml.ja
deleted file mode 100644
index 800b2dde22..0000000000
--- a/docs/manual/mod/mod_authn_anon.xml.ja
+++ /dev/null
@@ -1,206 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_anon.xml.meta">
-<!-- English Revision: 1.11 -->
-
-<name>mod_authn_anon</name>
-<description>$BG'>Z$,I,MW$JNN0h$X$N(B "anonymous" $B%f!<%6$N%"%/%;%9$r5v2D$9$k(B
-</description>
-<status>Extension</status>
-<sourcefile>mod_authn_anon.c</sourcefile>
-<identifier>authn_anon_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O(B <module>mod_auth_basic</module> $B$N$h$&$J(B
- $BG'>Z%U%m%s%H%(%s%I$H$7$F!"(Banonymous-ftp $B%5%$%H$N$h$&$J!"!VKbK!$N!W%f!<%6(B ID
- 'anonymous' $B$HEE;R%a!<%k%"%I%l%9$r%Q%9%o!<%I$K$7$?%f!<%6G'>Z$r(B
- $B9T$J$&5!G=$rDs6!$7$^$9!#$3$NEE;R%a!<%k%"%I%l%9$O%m%0<}=8$9$k$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
- <p>$BB>$N(B ($B%G!<%?%Y!<%9$K$h$k(B) $B%"%/%;%9@)8fJ}K!$HAH$_9g$o$;$k$3$H$G!"(B
- $B!VL$EPO?!W%f!<%6$KBP$7$F%5%$%H$r8x3+$7$D$D!"8zN($h$/%f!<%6DI@W$7$?$j!"(B
- $B%f!<%6$N%W%m%U%!%$%k$K1~$8$?%+%9%?%^%$%:$r$7$?$j$G$-$^$9!#(B
- $B$3$N$h$&$JG'>Z$K4p$E$$$?%f!<%6DI@W$NMxE@$N0l$D$O!"(B
- $B%^%8%C%/%/%C%-!<$K4p$E$/%f!<%6DI@WJ}K!$d!"(B
- $BDAL/$J(B URL $B$N@\F,<-$d@\Hx<-$rMxMQ$7$?%f!<%6DI@WJ}K!$H$O0[$J$j!"(B
- $B40A4$K%V%i%&%6Hs0MB8$G$"$j!"%f!<%64V$G(B URL $B$r6&M-$9$k$3$H$,$G$-$k$H$$$&(B
- $BE@$G$9!#(B</p>
-
- <p><module>mod_auth_basic</module> $B$r;HMQ$7$F$$$k>l9g$O!"$3$N%b%8%e!<%k$O(B
- <directive module="mod_auth_basic">AuthBasicProvider</directive> $B$K(B
- <code>anon</code> $B$H$$$&CM$r@_Dj$9$k$3$H$G5/F0$5$l$^$9!#(B</p>
-</summary>
-
-<section id="example"><title>$BNc(B</title>
- <p>$B0J2<$NNc$O!VIaDL!W$N(B htpasswd $B%U%!%$%k$K4p$E$$$?G'>Z$HAH$_9g$o$5$l$F(B
- $B$*$j!"0J2<$NMW7o$r8+$?$9%f!<%6$r!V%2%9%H!W$H$7$F5v2D$7$^$9(B:</p>
-
- <ul>
- <li>$B%f!<%6$O(B userID $B$rF~NO$7$J$1$l$P$J$j$^$;$s!#(B
- (<directive module="mod_authn_anon"
- >Anonymous_NoUserID</directive>)</li>
-
- <li>$B%f!<%6$O%Q%9%o!<%I$rF~NO$7$J$1$l$P$J$j$^$;$s!#(B
- (<directive module="mod_authn_anon"
- >Anonymous_MustGiveEmail</directive>)</li>
-
- <li>$BF~NO$5$l$?%Q%9%o!<%I$OM-8z$JEE;R%a!<%k%"%I%l%9$G$J$1$l$P(B
- $B$J$j$^$;$s!#(B<em>$B$9$J$o$A(B</em>$B!">/$/$H$b0l$D$N(B '@' $B$H(B '.' $B$,(B
- $B4^$^$l$F$$$kI,MW$,$"$j$^$9!#(B
- (<directive module="mod_authn_anon"
- >Anonymous_VerifyEmail</directive>)</li>
-
- <li>userID $B$O(B <code>anonymous guest www test
- welcome</code> $B$N$I$l$+$G$J$1$l$P$J$j$^$;$s!#(B
- $B%f!<%6L>$NHf3S$OBgJ8;z>.J8;z$r6hJL(B<strong>$B$7$^$;$s!#(B</strong></li>
-
- <li>$B%Q%9%o!<%IMs$KF~NO$5$l$?EE;R%a!<%k%"%I%l%9$O%(%i!<%m%0%U%!%$%k$K(B
- $B%m%.%s%0$5$l$^$9!#(B
- (<directive module="mod_authn_anon"
- >Anonymous_LogEmail</directive>)</li>
- </ul>
-
- <example><title>$BNc(B</title>
- &lt;Directory /foo&gt;
- <indent>
- AuthName "Use 'anonymous' &amp; Email address for guest entry"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</section>
-
-<directivesynopsis>
-<name>Anonymous</name>
-<description>$B%Q%9%o!<%I$N8!::L5$7$G%"%/%;%9$r5v2D$9$k(B userID $B$r;XDj$9$k(B
-</description>
-<syntax>Anonymous <var>user</var> [<var>user</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B%Q%9%o!<%I$N8!::$r$7$J$$$G%"%/%;%9$r5v2D$9$k!VKbK!$N!W(B userID $B$r(B
- $B@_Dj$7$^$9!#(BuserID $BCf$K6uGr$r;H$($k$h$&$K$9$k$?$a!"(B
- $B%(%9%1!<%WJ8;z(B \ $B$K$h$kJ}K!$H!"0zMQId(B ' $B$H(B " $B$K$h$k%/%*!<%F%#%s%0(B
- $B$r;H$&$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%f!<%6L>$NHf3S$O(B<strong>$BBgJ8;z>.J8;z$r6hJL$7$J$$(B</strong>$B$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#(B<br />
- $BKbK!$N%f!<%6L>(B '<code>anonymous</code>' $B$,5v2D$5$l$F$$$k(B userID $B$K(B
- $B4^$`$h$&$K$9$k$3$H$O6/$/?d>)$5$l$F$$$^$9!#(B</p>
-
- <example><title>$BNc(B:</title>
- Anonymous anonymous "Not Registered" "I don't know"
- </example>
-
- <p>$B$3$l$O!"(BuserID "anonymous",
- "AnonyMous", "Not Registered", "I Don't Know" $B$N$I$l$+$r;H$C$F$b(B
- $B%Q%9%o!<%IL5$7$G%f!<%6$,%5%$%H$KF~$l$k$h$&$K$7$^$9!#(B</p>
-
- <p>Apache 2.1 $B$G$O(B userID $B$K(B "<code>*</code>" $B$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B$3$N>l9g!"(B<em>$B$9$Y$F$N(B</em>userID $B$r5v2D$7$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_LogEmail</name>
-<description>$BF~NO$5$l$?%Q%9%o!<%I$,%(%i!<%m%0$K%m%.%s%0$5$l$k$+$I$&$+$r(B
-$B@_Dj$9$k(B</description>
-<syntax>Anonymous_LogEmail On|Off</syntax>
-<default>Anonymous_LogEmail On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B%G%U%)%k%H$N(B <code>On</code> $B$K@_Dj$5$l$?>l9g$O!"(B
- $BF~NO$5$l$?(B ($B$^$C$H$&$JEE;R%a!<%k%"%I%l%9$G$"$k$3$H$,(B
- $B4|BT$5$l$k(B) $B!V%Q%9%o!<%I!W$,%(%i!<%m%0$K%m%.%s%0$5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_MustGiveEmail</name>
-<description>$B6u%Q%9%o!<%I$r5v2D$9$k$+$I$&$+$r;XDj$9$k(B</description>
-<syntax>Anonymous_MustGiveEmail On|Off</syntax>
-<default>Anonymous_MustGiveEmail On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B%f!<%6$,%Q%9%o!<%I$H$7$FEE;R%a!<%k%"%I%l%9$r;XDj$9$kI,MW$,$"$k$+$I$&$+$r(B
- $B@_Dj$7$^$9!#$3$l$O6u%Q%9%o!<%I$r6X;_$7$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_NoUserID</name>
-<description>$B6u(B userID $B$r5v2D$9$k$+$r;XDj$9$k(B</description>
-<syntax>Anonymous_NoUserID On|Off</syntax>
-<default>Anonymous_NoUserID Off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><code>On</code> $B$K@_Dj$9$k$H!"%f!<%6$O(B userID ($B$H$*$=$i$/$O(B
- $B%Q%9%o!<%IMs$b(B) $B6u$K$9$k$3$H$,$G$-$^$9!#$3$l$OC1$K%j%?!<%s%-!<$r(B
- $BC!$$$?$j(B OK $B%\%?%s$rD>@\%/%j%C%/$7$?$j$9$k(B MS-Explorer $B%f!<%6$K$O(B
- $BHs>o$KJXMx$G$9!#$=$N$h$&$JA`:n$O$4$/$4$/<+A3$J$b$N$G$7$g$&!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_VerifyEmail</name>
-<description>$B%Q%9%o!<%IMs$,@5$7$$7A<0$NEE;R%a!<%k%"%I%l%9$G$"$k$3$H$r(B
-$BD4$Y$k$+$I$&$+$r@_Dj$9$k(B</description>
-<syntax>Anonymous_VerifyEmail On|Off</syntax>
-<default>Anonymous_VerifyEmail Off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><code>On</code> $B$K@_Dj$5$l$F$$$k>l9g!"%f!<%6$,M-8z$JEE;R%a!<%k(B
- $B%"%I%l%9$rF~NO$9$k$3$H$r?d>)$9$k$?$a!"F~NO$5$l$?!V%Q%9%o!<%I!W$O(B
- $B>/$J$/$H$b0l$D$N(B '@' $B$H(B '.' $B$r4^$s$G$$$k$+$I$&$+$rD4$Y$^$9(B
- ($B>e$N(B <directive
- module="mod_authn_anon">Anonymous_LogEmail</directive> $B;2>H(B)$B!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_anon.xml.ko b/docs/manual/mod/mod_authn_anon.xml.ko
deleted file mode 100644
index 1c4e2c1f48..0000000000
--- a/docs/manual/mod/mod_authn_anon.xml.ko
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_anon.xml.meta">
-
-<name>mod_authn_anon</name>
-<description>ÀÎÁõ¿µ¿ª¿¡ "À͸í(anonymous)" »ç¿ëÀÚÀÇ Á¢±ÙÀ»
-Çã¿ëÇÑ´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_authn_anon.c</sourcefile>
-<identifier>authn_anon_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <module>mod_auth_basic</module> µî ÀÎÁõ¾Õ´Ü¸ðµâÀ»
- À§ÇØ (<em>¿¹¸¦ µé¾î</em> 'Ưº°ÇÑ' »ç¿ëÀÚ ¾ÆÀ̵ð 'anonymous'¿Í
- ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ¾ÏÈ£·Î »ç¿ëÇÏ´Â) À͸í-ftp »çÀÌÆ®¿Í À¯»çÇÑ
- »ç¿ëÀÚ ÀÎÁõÀ» ÇÑ´Ù. ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ·Î±×¿¡ ±â·ÏÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>´Ù¸¥ (µ¥ÀÌÅͺ£À̽º) Á¢±ÙÁ¦¾î ¹æ½Ä°ú ÇÔ²² »ç¿ëÇÏ¿©
- 'µî·ÏÇÏÁö¾ÊÀº' »ç¿ëÀÚ¿¡°Ô »çÀÌÆ®¸¦ ¿­¾îµÎ¸é¼­ È¿À²ÀûÀÎ »ç¿ëÀÚ
- ÃßÀû°ú »ç¿ëÀÚÁ¤ÀÇ°¡ °¡´ÉÇÏ´Ù. ÀÎÁõ±â¹Ý »ç¿ëÀÚ ÃßÀûÀº ÄíÅ°³ª
- ±«»óÇÑ URL Á¢µÎ»ç/Á¢¹Ì»ç¿Í ´Þ¸® ¿ÏÀüÈ÷ ºê¶ó¿ìÀú µ¶¸³ÀûÀÌ°í
- »ç¿ëÀÚ°¡ URLÀ» °øÀ¯ÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.</p>
-
- <p><module>mod_auth_basic</module>À» »ç¿ëÇÒ¶§ <directive
- module="mod_auth_basic">AuthBasicProvider</directive>ÀÇ
- °ªÀ¸·Î <code>anon</code>À» ¼³Á¤Çϸé ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù.</p>
-</summary>
-
-<section id="example"><title>¿¹Á¦</title>
- <p>´ÙÀ½ ¿¹´Â "ÀϹÝÀûÀÎ" htpasswd-ÆÄÀϱâ¹Ý ÀÎÁõ¿¡ Ãß°¡·Î
- »ç¿ëÀÚ°¡ ´ÙÀ½ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù¸é '¼Õ´Ô(guest)'À¸·Î Á¢±ÙÇÒ
- ¼ö ÀÖµµ·Ï ÇÑ´Ù:</p>
-
- <ul>
- <li>»ç¿ëÀÚ´Â »ç¿ëÀÚ ¾ÆÀ̵𸦠ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<directive
- module="mod_authn_anon">Anonymous_NoUserID</directive>)</li>
-
- <li>»ç¿ëÀÚ´Â ¾ÏÈ£¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. (<directive
- module="mod_authn_anon">Anonymous_MustGiveEmail</directive>)</li>
-
- <li>¾ÏÈ£·Î À¯È¿ÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. <em>¿¹¸¦
- µé¾î</em> ÃÖ¼ÒÇÑ '@'¿Í '.' ÇÑ°³¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. (<directive
- module="mod_authn_anon">Anonymous_VerifyEmail</directive>)</li>
-
- <li>»ç¿ëÀÚ ¾ÆÀ̵ð´Â <code>anonymous guest www test
- welcome</code> Áß ÇϳªÀ̸ç, ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö
- <strong>¾Ê´Â´Ù</strong>. (<directive module="mod_authn_anon"
- >Anonymous</directive>)</li>
-
- <li>±×¸®°í ¾ÏÈ£·Î ÀÔ·ÂÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ¿À·ù·Î±×ÆÄÀÏ¿¡
- ±â·ÏÇÑ´Ù. (<directive
- module="mod_authn_anon">Anonymous_LogEmail</directive>)</li>
- </ul>
-
- <example><title>¿¹Á¦</title>
- &lt;Directory /foo&gt;
- <indent>
- AuthName "¼Õ´ÔÀ¸·Î ¹æ¹®ÇÏ·Á¸é 'anonymous'¿Í ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ »ç¿ëÇ϶ó"<br />
- AuthType Basic<br />
- AuthBasicProvider file anon<br />
- AuthUserFile /path/to/your/.htpasswd<br />
- <br />
- Anonymous_NoUserID off<br />
- Anonymous_MustGiveEmail on<br />
- Anonymous_VerifyEmail on<br />
- Anonymous_LogEmail on<br />
- Anonymous anonymous guest www test welcome<br />
- <br />
- Order Deny,Allow<br />
- Allow from all<br />
- <br />
- Require valid-user<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</section>
-
-<directivesynopsis>
-<name>Anonymous</name>
-<description>¾ÏÈ£°Ë»ç¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÒ »ç¿ëÀÚ ¾ÆÀ̵ðµéÀ»
-ÁöÁ¤ÇÑ´Ù</description>
-<syntax>Anonymous <var>user</var> [<var>user</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>¾ÏÈ£°Ë»ç¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÒ 'Ưº°ÇÑ' »ç¿ëÀÚ ¾ÆÀ̵ð ¸ñ·Ï.
- »ç¿ëÀÚ ¾ÆÀ̵ðµéÀ» °ø¹éÀ¸·Î ±¸ºÐÇÑ´Ù. µû¿ÈÇ¥ '¿Í "³ª Å»Ãâ¹®ÀÚ
- \¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ ¾ÆÀ̵ð ¾È¿¡ °ø¹éÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÀ̵ð´Â <strong>´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾ÊÀ½</strong>À»
- ÁÖÀÇÇ϶ó.<br />
- Çã¿ëÇÒ »ç¿ëÀÚ ¾ÆÀ̵𿡠Ưº°ÇÑ »ç¿ëÀÚ¸íÀÎ
- '<code>anonymous</code>'¸¦ Ç×»ó Æ÷ÇÔÇÏ±æ °­·ÂÈ÷ ±ÇÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- Anonymous anonymous "Not Registered" "I don't know"
- </example>
-
- <p>"anonymous", "AnonyMous", "Not Registered", "I Don't Know"
- µî »ç¿ëÀÚ ¾ÆÀ̵𸦠»ç¿ëÇÏ¸é ¾ÏÈ£°Ë»ç¾øÀÌ »ç¿ëÀÚ¸¦ Çã¿ëÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ 2.1¿¡¼­´Â »ç¿ëÀÚ ¾ÆÀ̵ð·Î "<code>*</code>"¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯¸é <em>¾î¶²</em> »ç¿ëÀÚ ¾ÆÀ̵ð¶óµµ
- ¹Þ¾ÆµéÀδÙ.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_LogEmail</name>
-<description>ÀÔ·ÂÇÑ ¾ÏÈ£¸¦ ¿À·ù·Î±×¿¡ ±â·ÏÇÒÁö ¿©ºÎ</description>
-<syntax>Anonymous_LogEmail On|Off</syntax>
-<default>Anonymous_LogEmail On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>±âº»°ªÀÎ <code>On</code>À¸·Î ¼³Á¤Çϸé (¾Æ¸¶µµ ÀüÀÚ¿ìÆí
- ÁÖ¼ÒÀÏ) ÀÔ·ÂÇÑ '¾ÏÈ£'¸¦ ¿À·ù·Î±×¿¡ ±â·ÏÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_MustGiveEmail</name>
-<description>¾ÏÈ£°¡ ¾ø¾îµµ °¡´ÉÇÑÁö ¿©ºÎ</description>
-<syntax>Anonymous_MustGiveEmail On|Off</syntax>
-<default>Anonymous_MustGiveEmail On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>»ç¿ëÀÚ°¡ ¾ÏÈ£·Î ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ ÀÔ·ÂÇØ¾ß ÇÏ´ÂÁö ¿©ºÎ¸¦
- °áÁ¤ÇÑ´Ù. ¾ÏÈ£°¡ ¾øÀ¸¸é °ÅºÎÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_NoUserID</name>
-<description>»ç¿ëÀÚ ¾ÆÀ̵𰡠¾ø¾îµµ °¡´ÉÇÏÁö ¿©ºÎ</description>
-<syntax>Anonymous_NoUserID On|Off</syntax>
-<default>Anonymous_NoUserID Off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><code>On</code>À¸·Î ¼³Á¤ÇÏ¸é »ç¿ëÀÚ´Â »ç¿ëÀÚ ¾ÆÀ̵ð¸¦
- (¾Æ¸¶ ¾ÏÈ£µµ) ÀÔ·ÂÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ÀÌ´Â ÀÚ¿¬½º·´°Ô ±×³É
- returnÀ» Ä¡°Å³ª OK ¹öÆ°À» Ŭ¸¯ÇÏ´Â MS-Explorer »ç¿ëÀÚ¿¡°Ô
- ¸Å¿ì Æí¸®ÇÏ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_VerifyEmail</name>
-<description>¾ÏÈ£°¡ ¿Ã¹Ù¸¥ Çü½ÄÀÇ ÀüÀÚ¿ìÆí ÁÖ¼ÒÀÎÁö °Ë»ç
-¿©ºÎ</description>
-<syntax>Anonymous_VerifyEmail On|Off</syntax>
-<default>Anonymous_VerifyEmail Off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><code>On</code>À¸·Î ¼³Á¤ÇÏ¸é »ç¿ëÀÚ°¡ ¿Ã¹Ù¸¥ ÀüÀÚ¿ìÆí
- ÁÖ¼Ò¸¦ ÀÔ·ÂÇϵµ·Ï ÀÔ·ÂÇÑ '¾ÏÈ£'°¡ ÃÖ¼ÒÇÑ '@'¿Í '.'¸¦ ÇÑ°³¾¿
- Æ÷ÇÔÇÏ´ÂÁö °Ë»çÇÑ´Ù (À§ÀÇ <directive
- module="mod_authn_anon">Anonymous_LogEmail</directive> Âü°í).</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_anon.xml.meta b/docs/manual/mod/mod_authn_anon.xml.meta
deleted file mode 100644
index fe1306c9ba..0000000000
--- a/docs/manual/mod/mod_authn_anon.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authn_anon</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authn_dbm.html b/docs/manual/mod/mod_authn_dbm.html
deleted file mode 100644
index a4472a2cfd..0000000000
--- a/docs/manual/mod/mod_authn_dbm.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authn_dbm.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authn_dbm.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authn_dbm.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authn_dbm.html.en b/docs/manual/mod/mod_authn_dbm.html.en
deleted file mode 100644
index 67c11af1ce..0000000000
--- a/docs/manual/mod/mod_authn_dbm.html.en
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_dbm - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authn_dbm</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_dbm.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_dbm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>User authentication using DBM files</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authn_dbm_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authn_dbm.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides authentication front-ends such as
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> and <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>
- to authenticate users by looking up users in <dfn>dbm</dfn> password
- files. Similar functionality is provided by
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>.</p>
-
- <p>When using <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>, this module is invoked via the
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> or
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
- with the <code>dbm</code> value.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmtype">AuthDBMType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmuserfile">AuthDBMUserFile</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
-</li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
-</li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a> <a name="authdbmtype" id="authdbmtype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the type of database file that is used to
-store passwords</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBMType default|SDBM|GDBM|NDBM|DB</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDBMType default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbm</td></tr>
-</table>
- <p>Sets the type of database file that is used to store the passwords.
- The default database type is determined at compile time. The
- availability of other types of database files also depends on
- <a href="../install.html#dbm">compile-time settings</a>.</p>
-
- <p>It is crucial that whatever program you use to create your password
- files is configured to use the same type of database.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMUserFile" id="AuthDBMUserFile">AuthDBMUserFile</a> <a name="authdbmuserfile" id="authdbmuserfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of a database file containing the list of users and
-passwords for authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBMUserFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_dbm</td></tr>
-</table>
- <p>The <code class="directive">AuthDBMUserFile</code> directive sets the
- name of a DBM file containing the list of users and passwords for
- user authentication. <var>File-path</var> is the absolute path to
- the user file.</p>
-
- <p>The user file is keyed on the username. The value for a user is
- the encrypted password, optionally followed by a colon and arbitrary
- data. The colon and the data following it will be ignored by the
- server.</p>
-
- <div class="warning"><h3>Security:</h3>
- <p>Make sure that the <code class="directive">AuthDBMUserFile</code> is stored
- outside the document tree of the web-server; do <em>not</em> put it in
- the directory that it protects. Otherwise, clients will be able to
- download the <code class="directive">AuthDBMUserFile</code>.</p>
- </div>
-
- <p>Important compatibility note: The implementation of
- <code>dbmopen</code> in the apache modules reads the string length of
- the hashed values from the DBM data structures, rather than relying
- upon the string being NULL-appended. Some applications, such as
- the Netscape web server, rely upon the string being
- NULL-appended, so if you are having trouble using DBM files
- interchangeably between applications this may be a part of the
- problem.</p>
-
- <p>A perl script called
- <a href="../programs/dbmmanage.html">dbmmanage</a> is included with
- Apache. This program can be used to create and update DBM
- format password files for use with this module.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_dbm.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_dbm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_dbm.html.ja.euc-jp b/docs/manual/mod/mod_authn_dbm.html.ja.euc-jp
deleted file mode 100644
index 7c98f5bbb4..0000000000
--- a/docs/manual/mod/mod_authn_dbm.html.ja.euc-jp
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_dbm - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authn_dbm</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_dbm.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>DBM ¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥æ¡¼¥¶Ç§¾Ú</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authn_dbm_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authn_dbm.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>Ëܥ⥸¥å¡¼¥ë¤Ï <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ¤ä
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤È¤¤¤Ã¤¿Ç§¾Ú¥Õ¥í¥ó¥È¥¨¥ó¥É¤ËÂФ·¤Æ¡¢
- <dfn>dbm</dfn> ¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ëÆ⤫¤é¤Î¥æ¡¼¥¶¸¡º÷¤Ë¤è¤ë
- ¥æ¡¼¥¶Ç§¾Úµ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£»÷¤¿¤è¤¦¤Êµ¡Ç½¤Ï <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- ¤Ç¤âÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤ä <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>
- ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ¤ä
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprivider">AuthDigestPrivider</a></code>
- ¤Ç <code>dbm</code> ¤È»ØÄꤹ¤ë¤³¤È¤Çµ¯Æ°¤µ¤ì¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmtype">AuthDBMType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmuserfile">AuthDBMUserFile</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
-</li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
-</li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a> <a name="authdbmtype" id="authdbmtype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ñ¥¹¥ï¡¼¥É¤òÊݸ¤¹¤ë¤¿¤á¤ËɬÍפʥǡ¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Î¼ïÎà¤ò
-ÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthDBMType default|SDBM|GDBM|NDBM|DB</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AuthDBMType default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_dbm</td></tr>
-</table>
- <p>¥Ñ¥¹¥ï¡¼¥É¤òÊݸ¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Î¼ïÎà¤ò
- ÀßÄꤷ¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¼ïÎà¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Ë·è¤Þ¤ê¤Þ¤¹¡£
- ¾¤Î¼ïÎà¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤¬»ÈÍѲÄǽ¤«¤É¤¦¤«¤â <a href="../install.html#dbm">¥³¥ó¥Ñ¥¤¥ë»þ¤ÎÀßÄê</a>¤Ë°Í¸¤·¤Þ¤¹¡£</p>
-
- <p>¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë¤Î¤Ë»ÈÍѤ¹¤ë¥×¥í¥°¥é¥à¤¬Æ±¤¸¼ïÎà¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò
- »ÈÍѤ¹¤ë¤è¤¦¤ËÀßÄꤹ¤ë¤³¤È¤ÏÈó¾ï¤Ë½ÅÍפǤ¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMUserFile" id="AuthDBMUserFile">AuthDBMUserFile</a> <a name="authdbmuserfile" id="authdbmuserfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ǧ¾ÚÍѤΥ桼¥¶¤È¥Ñ¥¹¥ï¡¼¥É¤Î¥ê¥¹¥È¤òÊÝ»ý¤·¤Æ¤¤¤ë
-¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë̾¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthDBMUserFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_dbm</td></tr>
-</table>
- <p><code class="directive">AuthDBMUserFile</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ǧ¾ÚÍѤΥ桼¥¶¤È¥Ñ¥¹¥ï¡¼¥É¤Î¥ê¥¹¥È¤òÊÝ»ý¤·¤Æ¤¤¤ë DBM ¥Õ¥¡¥¤¥ë¤Î
- ̾Á°¤òÀßÄꤷ¤Þ¤¹¡£<var>File-path</var> ¤Ï¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤Ø¤Î
- ÀäÂХѥ¹¤Ç¤¹¡£</p>
-
- <p>¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤Î¥­¡¼¤Ï¥æ¡¼¥¶Ì¾¤Ç¤¹¡£¥æ¡¼¥¶¤ËÂФ·¤ÆÊÖ¤µ¤ì¤ëÃͤÏ
- °Å¹æ²½¤µ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤Ç¡¢¤½¤Î¸å¤Ë¡¢¥³¥í¥ó¤Ë³¤¤¤ÆǤ°Õ¤Î¥Ç¡¼¥¿¤¬
- ³¤¤¤Æ¤¤¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£¥³¥í¥ó¤È¤½¤Î¸å¤Î¥Ç¡¼¥¿¤Ï¥µ¡¼¥Ð¤Ï
- ̵»ë¤·¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p><code class="directive">AuthDBMUserFile </code> ¤Ï¡¢
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Î³°Â¦¤ËÊݴɤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- Êݸ¤è¤¦¤È¤·¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë¤Ï
- <strong>ÃÖ¤«¤Ê¤¤¤Ç²¼¤µ¤¤</strong>¡£
- ¤½¤¦¤·¤Ê¤¤¤È¥¯¥é¥¤¥¢¥ó¥È¤¬ <code class="directive">AuthUserFile</code> ¤ò
- ¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Æ¤·¤Þ¤¤¤Þ¤¹¡£</p>
- </div>
-
- <p>½ÅÍפʸߴ¹À­¤Ë´Ø¤¹¤ëÃí°Õ: apache module ¤Î <code>dbmopen</code> ¤Î¼ÂÁõ¤Ï
- ʸ»úÎó¤¬ NULL ¤Ç½ª¤ï¤Ã¤Æ¤¤¤ë¤³¤È¤Ë°Í¸¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢DBM ¥Ç¡¼¥¿¥¹¥È¥é¥¯¥Á¥ã
- ¤Î¥Ï¥Ã¥·¥åÃͤÎʸ»úÎó¤ÎŤµ¤òÆɤ߼è¤ê¤Þ¤¹¡£Netscape ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ê¤É¡¢
- ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÃæ¤Ë¤Ïʸ»úÎó¤¬ NULL ¤Ç½ª¤ï¤Ã¤Æ¤¤¤ë¤³¤È¤Ë°Í¸¤·¤Æ¤¤¤ë
- ¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢°Û¤Ê¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó´Ö¤Ç¤Î DBM ¥Õ¥¡¥¤¥ë¤Î
- »ÈÍѤËÌäÂ꤬¤¢¤ë¾ì¹ç¤Ï¡¢¤³¤ì¤¬¸¶°ø¤Ë¤Ê¤Ã¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Apache ¤Ë¤Ï <a href="../programs/dbmmanage.html">dbmmanage</a> ¤È¤¤¤¦
- perl ¥¹¥¯¥ê¥×¥È¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥×¥í¥°¥é¥à¤ò»È¤Ã¤Æ¤³¤Î
- ¥â¥¸¥å¡¼¥ë¤¬»ÈÍѤ¹¤ë DBM ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤¿¤ê
- ¹¹¿·¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_dbm.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_dbm.html.ko.euc-kr b/docs/manual/mod/mod_authn_dbm.html.ko.euc-kr
deleted file mode 100644
index 24d3edbc4c..0000000000
--- a/docs/manual/mod/mod_authn_dbm.html.ko.euc-kr
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_dbm - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authn_dbm</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_dbm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_dbm.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>DBM ÆÄÀÏÀ» »ç¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authn_dbm_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authn_dbm.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>³ª
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ÀÎÁõ¾Õ´Ü¸ðµâÀ» À§ÇØ
- <dfn>dbm</dfn> ¾ÏÈ£ÆÄÀÏ¿¡¼­ »ç¿ëÀÚ¸¦ ã¾Æ¼­ ÀÎÁõÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>°ú ±â´ÉÀÌ ºñ½ÁÇÑ´Ù.</p>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>À̳ª
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>¸¦ »ç¿ëÇÒ¶§ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>³ª
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>ÀÇ
- °ªÀ¸·Î <code>dbm</code>À» ¼³Á¤Çϸé ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmtype">AuthDBMType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmuserfile">AuthDBMUserFile</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
-</li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
-</li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMType" id="AuthDBMType">AuthDBMType</a> <a name="authdbmtype" id="authdbmtype">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDBMType default|SDBM|GDBM|NDBM|DB</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDBMType default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_dbm</td></tr>
-</table>
- <p>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»
- µ¥ÀÌÅͺ£À̽º Á¾·ù´Â ÄÄÆÄÀ϶§ ÆÇ´ÜÇÑ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ´Ù¸¥
- µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ùµµ <a href="../install.html#dbm">ÄÄÆÄÀÏ
- ¼³Á¤</a>¿¡ ´Þ·È´Ù.</p>
-
- <p>¾ÏÈ£ÆÄÀÏÀ» ¸¸µå´Â ÇÁ·Î±×·¥ÀÌ °°Àº Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽º¸¦
- »ç¿ëÇϵµ·Ï ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMUserFile" id="AuthDBMUserFile">AuthDBMUserFile</a> <a name="authdbmuserfile" id="authdbmuserfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõÇÒ »ç¿ëÀÚ¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º
-ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDBMUserFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_dbm</td></tr>
-</table>
- <p><code class="directive">AuthDBMUserFile</code> Áö½Ã¾î´Â »ç¿ëÀÚ
- ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â DBM ÆÄÀϸíÀ»
- ÁöÁ¤ÇÑ´Ù. <var>File-path</var>´Â ÆÄÀÏÀÇ Àý´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>ÆÄÀÏÀº »ç¿ëÀÚ¸íÀ» Å°·Î »ç¿ëÇÑ´Ù. »ç¿ëÀÚ¿¡ ´ëÇÑ °ªÀº
- ÀÎÄÚµùµÈ ¾ÏÈ£ÀÌ´Ù. ¾ÏÈ£ µÚ¿¡ Äݷаú ÀÓÀÇÀÇ Á¤º¸°¡ ³ª¿Ã ¼ö
- ÀÖ´Ù. ¼­¹ö´Â Äݷаú µÚ¿¡ ³ª¿À´Â Á¤º¸¸¦ ¹«½ÃÇÑ´Ù.</p>
-
- <div class="warning"><h3>º¸¾È:</h3>
- <p><code class="directive">AuthDBMUserFile</code>ÀÌ À¥¼­¹öÀÇ ¹®¼­µé
- ¹Û¿¡ ÀÖÀ½À» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮 ¾È¿¡ °°ÀÌ
- µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <code class="directive">AuthDBMUserFile</code>À» ´Ù¿î·ÎµåÇÒ ¼ö
- ÀÖ´Ù.</p>
- </div>
-
- <p>Áß¿äÇÑ È£È¯¼º ÁÖÀÇ: ¾ÆÆÄÄ¡ ¸ðµâÀÇ <code>dbmopen</code>
- ±¸ÇöÀº ¹®ÀÚ¿­ ³¡ÀÇ NULL¿¡ ÀÇÁ¸ÇÏÁö¾Ê°í DBM ÀڷᱸÁ¶¿¡¼­
- Çؽ̰ªÀÇ ¹®ÀÚ¿­ ±æÀ̸¦ Àд´Ù. Netscape À¥¼­¹ö µî ¾î¶²
- ÇÁ·Î±×·¥Àº ¹®ÀÚ¿­ÀÌ NULL·Î ³¡³­´Ù°í °¡Á¤Çϱ⶧¹®¿¡ ¿©·¯
- ÇÁ·Î±×·¥ÀÌ DBM ÆÄÀÏÀ» »ç¿ëÇÏ¸é ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â <a href="../programs/dbmmanage.html">dbmmanage</a>¶ó´Â
- Perl ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÀÌ ¸ðµâÀÌ »ç¿ëÇÒ
- DBMÇü½Ä ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé°í ¼öÁ¤ÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_dbm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_dbm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_dbm.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_dbm.xml b/docs/manual/mod/mod_authn_dbm.xml
deleted file mode 100644
index 7b098cd18d..0000000000
--- a/docs/manual/mod/mod_authn_dbm.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_dbm.xml.meta">
-
-<name>mod_authn_dbm</name>
-<description>User authentication using DBM files</description>
-<status>Extension</status>
-<sourcefile>mod_authn_dbm.c</sourcefile>
-<identifier>authn_dbm_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module provides authentication front-ends such as
- <module>mod_auth_digest</module> and <module>mod_auth_basic</module>
- to authenticate users by looking up users in <dfn>dbm</dfn> password
- files. Similar functionality is provided by
- <module>mod_authn_file</module>.</p>
-
- <p>When using <module>mod_auth_basic</module> or
- <module>mod_auth_digest</module>, this module is invoked via the
- <directive module="mod_auth_basic">AuthBasicProvider</directive> or
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
- with the <code>dbm</code> value.</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso>
- <directive module="mod_auth_basic">AuthBasicProvider</directive>
-</seealso>
-<seealso>
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
-</seealso>
-
-<directivesynopsis>
-<name>AuthDBMUserFile</name>
-<description>Sets the name of a database file containing the list of users and
-passwords for authentication</description>
-<syntax>AuthDBMUserFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDBMUserFile</directive> directive sets the
- name of a DBM file containing the list of users and passwords for
- user authentication. <var>File-path</var> is the absolute path to
- the user file.</p>
-
- <p>The user file is keyed on the username. The value for a user is
- the encrypted password, optionally followed by a colon and arbitrary
- data. The colon and the data following it will be ignored by the
- server.</p>
-
- <note type="warning"><title>Security:</title>
- <p>Make sure that the <directive>AuthDBMUserFile</directive> is stored
- outside the document tree of the web-server; do <em>not</em> put it in
- the directory that it protects. Otherwise, clients will be able to
- download the <directive>AuthDBMUserFile</directive>.</p>
- </note>
-
- <p>Important compatibility note: The implementation of
- <code>dbmopen</code> in the apache modules reads the string length of
- the hashed values from the DBM data structures, rather than relying
- upon the string being NULL-appended. Some applications, such as
- the Netscape web server, rely upon the string being
- NULL-appended, so if you are having trouble using DBM files
- interchangeably between applications this may be a part of the
- problem.</p>
-
- <p>A perl script called
- <a href="../programs/dbmmanage.html">dbmmanage</a> is included with
- Apache. This program can be used to create and update DBM
- format password files for use with this module.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDBMType</name>
-<description>Sets the type of database file that is used to
-store passwords</description>
-<syntax>AuthDBMType default|SDBM|GDBM|NDBM|DB</syntax>
-<default>AuthDBMType default</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Sets the type of database file that is used to store the passwords.
- The default database type is determined at compile time. The
- availability of other types of database files also depends on
- <a href="../install.html#dbm">compile-time settings</a>.</p>
-
- <p>It is crucial that whatever program you use to create your password
- files is configured to use the same type of database.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_dbm.xml.ja b/docs/manual/mod/mod_authn_dbm.xml.ja
deleted file mode 100644
index ead814b7e9..0000000000
--- a/docs/manual/mod/mod_authn_dbm.xml.ja
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_dbm.xml.meta">
-<!-- English Revision: 1.10 -->
-
-<name>mod_authn_dbm</name>
-<description>DBM $B%U%!%$%k$rMQ$$$?%f!<%6G'>Z(B</description>
-<status>Extension</status>
-<sourcefile>mod_authn_dbm.c</sourcefile>
-<identifier>authn_dbm_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p>$BK\%b%8%e!<%k$O(B <module>mod_auth_digest</module> $B$d(B
- <module>mod_auth_basic</module> $B$H$$$C$?G'>Z%U%m%s%H%(%s%I$KBP$7$F!"(B
- <dfn>dbm</dfn> $B%Q%9%o!<%I%U%!%$%kFb$+$i$N%f!<%68!:w$K$h$k(B
- $B%f!<%6G'>Z5!G=$rDs6!$7$^$9!#;w$?$h$&$J5!G=$O(B <module>mod_authn_file</module>
- $B$G$bDs6!$5$l$F$$$^$9!#(B</p>
-
- <p><module>mod_auth_basic</module> $B$d(B <module>mod_auth_digest</module>
- $B$r;HMQ$9$k:]$K$O!"$3$N%b%8%e!<%k$O(B
- <directive module="mod_auth_basic">AuthBasicProvider</directive> $B$d(B
- <directive module="mod_auth_digest">AuthDigestPrivider</directive>
- $B$G(B <code>dbm</code> $B$H;XDj$9$k$3$H$G5/F0$5$l$^$9!#(B</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso>
- <directive module="mod_auth_basic">AuthBasicProvider</directive>
-</seealso>
-<seealso>
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
-</seealso>
-
-<directivesynopsis>
-<name>AuthDBMUserFile</name>
-<description>$BG'>ZMQ$N%f!<%6$H%Q%9%o!<%I$N%j%9%H$rJ];}$7$F$$$k(B
-$B%G!<%?%Y!<%9%U%!%$%kL>$r@_Dj$9$k(B</description>
-<syntax>AuthDBMUserFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDBMUserFile</directive> $B%G%#%l%/%F%#%V$O(B
- $BG'>ZMQ$N%f!<%6$H%Q%9%o!<%I$N%j%9%H$rJ];}$7$F$$$k(B DBM $B%U%!%$%k$N(B
- $BL>A0$r@_Dj$7$^$9!#(B<var>File-path</var> $B$O%f!<%6%U%!%$%k$X$N(B
- $B@dBP%Q%9$G$9!#(B</p>
-
- <p>$B%f!<%6%U%!%$%k$N%-!<$O%f!<%6L>$G$9!#%f!<%6$KBP$7$FJV$5$l$kCM$O(B
- $B0E9f2=$5$l$?%Q%9%o!<%I$G!"$=$N8e$K!"%3%m%s$KB3$$$FG$0U$N%G!<%?$,(B
- $BB3$$$F$$$k$3$H$b$"$j$^$9!#%3%m%s$H$=$N8e$N%G!<%?$O%5!<%P$O(B
- $BL5;k$7$^$9!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p><directive>AuthDBMUserFile </directive> $B$O!"(B
- $B%&%'%V%5!<%P$N%I%-%e%a%s%H%D%j!<$N30B&$KJ]4I$9$k$h$&$K$7$F$/$@$5$$!#(B
- $BJ]8n$7$h$&$H$7$F$$$k%G%#%l%/%H%j0J2<$K$O(B
- <strong>$BCV$+$J$$$G2<$5$$(B</strong>$B!#(B
- $B$=$&$7$J$$$H%/%i%$%"%s%H$,(B <directive>AuthUserFile</directive> $B$r(B
- $B%@%&%s%m!<%I$G$-$F$7$^$$$^$9!#(B</p>
- </note>
-
- <p>$B=EMW$J8_49@-$K4X$9$kCm0U(B: apache module $B$N(B <code>dbmopen</code> $B$N<BAu$O(B
- $BJ8;zNs$,(B NULL $B$G=*$o$C$F$$$k$3$H$K0MB8$9$k$N$G$O$J$/!"(BDBM $B%G!<%?%9%H%i%/%A%c(B
- $B$N%O%C%7%eCM$NJ8;zNs$ND9$5$rFI$_<h$j$^$9!#(BNetscape $B%&%'%V%5!<%P$J$I!"(B
- $B%"%W%j%1!<%7%g%s$NCf$K$OJ8;zNs$,(B NULL $B$G=*$o$C$F$$$k$3$H$K0MB8$7$F$$$k(B
- $B$b$N$,$"$j$^$9!#$G$9$+$i!"0[$J$k%"%W%j%1!<%7%g%s4V$G$N(B DBM $B%U%!%$%k$N(B
- $B;HMQ$KLdBj$,$"$k>l9g$O!"$3$l$,860x$K$J$C$F$$$k2DG=@-$,$"$j$^$9!#(B</p>
-
- <p>Apache $B$K$O(B <a href="../programs/dbmmanage.html">dbmmanage</a> $B$H$$$&(B
- perl $B%9%/%j%W%H$,4^$^$l$F$$$^$9!#$3$N%W%m%0%i%`$r;H$C$F$3$N(B
- $B%b%8%e!<%k$,;HMQ$9$k(B DBM $B%U%)!<%^%C%H$N%Q%9%o!<%I%U%!%$%k$r:n@.$7$?$j(B
- $B99?7$7$?$j$9$k$3$H$,$G$-$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDBMType</name>
-<description>$B%Q%9%o!<%I$rJ]B8$9$k$?$a$KI,MW$J%G!<%?%Y!<%9%U%!%$%k$N<oN`$r(B
-$B@_Dj$9$k(B</description>
-<syntax>AuthDBMType default|SDBM|GDBM|NDBM|DB</syntax>
-<default>AuthDBMType default</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>$B%Q%9%o!<%I$rJ]B8$9$k$?$a$K;HMQ$9$k%G!<%?%Y!<%9%U%!%$%k$N<oN`$r(B
- $B@_Dj$7$^$9!#%G%U%)%k%H$N%G!<%?%Y!<%9$N<oN`$O%3%s%Q%$%k;~$K7h$^$j$^$9!#(B
- $BB>$N<oN`$N%G!<%?%Y!<%9$,;HMQ2DG=$+$I$&$+$b(B <a href="../install.html#dbm"
- >$B%3%s%Q%$%k;~$N@_Dj(B</a>$B$K0MB8$7$^$9!#(B</p>
-
- <p>$B%Q%9%o!<%I%U%!%$%k$r:n@.$9$k$N$K;HMQ$9$k%W%m%0%i%`$,F1$8<oN`$N%G!<%?%Y!<%9$r(B
- $B;HMQ$9$k$h$&$K@_Dj$9$k$3$H$OHs>o$K=EMW$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_dbm.xml.ko b/docs/manual/mod/mod_authn_dbm.xml.ko
deleted file mode 100644
index d5b699f24b..0000000000
--- a/docs/manual/mod/mod_authn_dbm.xml.ko
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_dbm.xml.meta">
-
-<name>mod_authn_dbm</name>
-<description>DBM ÆÄÀÏÀ» »ç¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</description>
-<status>Extension</status>
-<sourcefile>mod_authn_dbm.c</sourcefile>
-<identifier>authn_dbm_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <module>mod_auth_digest</module>³ª
- <module>mod_auth_basic</module> ÀÎÁõ¾Õ´Ü¸ðµâÀ» À§ÇØ
- <dfn>dbm</dfn> ¾ÏÈ£ÆÄÀÏ¿¡¼­ »ç¿ëÀÚ¸¦ ã¾Æ¼­ ÀÎÁõÇÑ´Ù.
- <module>mod_authn_file</module>°ú ±â´ÉÀÌ ºñ½ÁÇÑ´Ù.</p>
-
- <p><module>mod_auth_basic</module>À̳ª
- <module>mod_auth_digest</module>¸¦ »ç¿ëÇÒ¶§ <directive
- module="mod_auth_basic">AuthBasicProvider</directive>³ª
- <directive module="mod_auth_digest">AuthDigestProvider</directive>ÀÇ
- °ªÀ¸·Î <code>dbm</code>À» ¼³Á¤Çϸé ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù.</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso>
- <directive module="mod_auth_basic">AuthBasicProvider</directive>
-</seealso>
-<seealso>
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
-</seealso>
-
-<directivesynopsis>
-<name>AuthDBMUserFile</name>
-<description>ÀÎÁõÇÒ »ç¿ëÀÚ¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º
-ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthDBMUserFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDBMUserFile</directive> Áö½Ã¾î´Â »ç¿ëÀÚ
- ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â DBM ÆÄÀϸíÀ»
- ÁöÁ¤ÇÑ´Ù. <var>File-path</var>´Â ÆÄÀÏÀÇ Àý´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>ÆÄÀÏÀº »ç¿ëÀÚ¸íÀ» Å°·Î »ç¿ëÇÑ´Ù. »ç¿ëÀÚ¿¡ ´ëÇÑ °ªÀº
- ÀÎÄÚµùµÈ ¾ÏÈ£ÀÌ´Ù. ¾ÏÈ£ µÚ¿¡ Äݷаú ÀÓÀÇÀÇ Á¤º¸°¡ ³ª¿Ã ¼ö
- ÀÖ´Ù. ¼­¹ö´Â Äݷаú µÚ¿¡ ³ª¿À´Â Á¤º¸¸¦ ¹«½ÃÇÑ´Ù.</p>
-
- <note type="warning"><title>º¸¾È:</title>
- <p><directive>AuthDBMUserFile</directive>ÀÌ À¥¼­¹öÀÇ ¹®¼­µé
- ¹Û¿¡ ÀÖÀ½À» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮 ¾È¿¡ °°ÀÌ
- µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <directive>AuthDBMUserFile</directive>À» ´Ù¿î·ÎµåÇÒ ¼ö
- ÀÖ´Ù.</p>
- </note>
-
- <p>Áß¿äÇÑ È£È¯¼º ÁÖÀÇ: ¾ÆÆÄÄ¡ ¸ðµâÀÇ <code>dbmopen</code>
- ±¸ÇöÀº ¹®ÀÚ¿­ ³¡ÀÇ NULL¿¡ ÀÇÁ¸ÇÏÁö¾Ê°í DBM ÀڷᱸÁ¶¿¡¼­
- Çؽ̰ªÀÇ ¹®ÀÚ¿­ ±æÀ̸¦ Àд´Ù. Netscape À¥¼­¹ö µî ¾î¶²
- ÇÁ·Î±×·¥Àº ¹®ÀÚ¿­ÀÌ NULL·Î ³¡³­´Ù°í °¡Á¤Çϱ⶧¹®¿¡ ¿©·¯
- ÇÁ·Î±×·¥ÀÌ DBM ÆÄÀÏÀ» »ç¿ëÇÏ¸é ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â <a href="../programs/dbmmanage.html">dbmmanage</a>¶ó´Â
- Perl ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÀÌ ¸ðµâÀÌ »ç¿ëÇÒ
- DBMÇü½Ä ¾ÏÈ£ÆÄÀÏÀ» ¸¸µé°í ¼öÁ¤ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDBMType</name>
-<description>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦
-ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthDBMType default|SDBM|GDBM|NDBM|DB</syntax>
-<default>AuthDBMType default</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»
- µ¥ÀÌÅͺ£À̽º Á¾·ù´Â ÄÄÆÄÀ϶§ ÆÇ´ÜÇÑ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ´Ù¸¥
- µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ùµµ <a href="../install.html#dbm">ÄÄÆÄÀÏ
- ¼³Á¤</a>¿¡ ´Þ·È´Ù.</p>
-
- <p>¾ÏÈ£ÆÄÀÏÀ» ¸¸µå´Â ÇÁ·Î±×·¥ÀÌ °°Àº Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽º¸¦
- »ç¿ëÇϵµ·Ï ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_dbm.xml.meta b/docs/manual/mod/mod_authn_dbm.xml.meta
deleted file mode 100644
index 9e8242af95..0000000000
--- a/docs/manual/mod/mod_authn_dbm.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authn_dbm</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authn_default.html b/docs/manual/mod/mod_authn_default.html
deleted file mode 100644
index 9a1beb27aa..0000000000
--- a/docs/manual/mod/mod_authn_default.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authn_default.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authn_default.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authn_default.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authn_default.html.en b/docs/manual/mod/mod_authn_default.html.en
deleted file mode 100644
index 732356e3ed..0000000000
--- a/docs/manual/mod/mod_authn_default.html.en
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_default - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authn_default</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_default.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Authentication fallback module</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authn_default_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authn_default.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module is designed to be the fallback module, if you don't
- have configured an authentication module like
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. It simply rejects any
- credentials supplied by the user.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDefaultAuthoritative" id="AuthDefaultAuthoritative">AuthDefaultAuthoritative</a> <a name="authdefaultauthoritative" id="authdefaultauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authentication is passed to lower level
-modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDefaultAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthDefaultAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_default</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthDefaultAuthoritative</code> directive
- explicitly to <code>Off</code> allows for authentication to be passed on
- to lower level modules (as defined in the <code>modules.c</code>
- files).</p>
-
- <div class="note"><h3>Note</h3>
- <p>Normally there are no lower level modules, since
- <code class="module"><a href="../mod/mod_authn_default.html">mod_authn_default</a></code> is defined to be already on
- a <em>very low</em> level. Therefore you should leave the value of
- <code class="directive">AuthDefaultAuthoritative</code> as default
- (<code>On</code>).</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_default.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_default.html.ja.euc-jp b/docs/manual/mod/mod_authn_default.html.ja.euc-jp
deleted file mode 100644
index baf12e55cf..0000000000
--- a/docs/manual/mod/mod_authn_default.html.ja.euc-jp
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_default - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authn_default</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_default.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>ǧ¾Ú¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¥â¥¸¥å¡¼¥ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authn_default_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authn_default.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤Î¤è¤¦¤Êǧ¾Ú¥â¥¸¥å¡¼¥ë¤ò
- ÀßÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢Ëܥ⥸¥å¡¼¥ë¤¬¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¤È¤Ê¤ê¤Þ¤¹¡£
- ¥æ¡¼¥¶¤«¤éÄ󼨤µ¤ì¤¿¤É¤ó¤Ê¾Ú½ñ¤âñ¤ËµñÈݤ·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDefaultAuthoritative" id="AuthDefaultAuthoritative">AuthDefaultAuthoritative</a> <a name="authdefaultauthoritative" id="authdefaultauthoritative">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¼¡¤ÎÄ㼡¥ì¥Ù¥ë¤Îǧ¾Ú¥â¥¸¥å¡¼¥ë¤ËÀ©¸æ¤òÅϤ¹¤«¤É¤¦¤«¤ò
-ÀßÄꤷ¤Þ¤¹</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthDefaultAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AuthDefaultAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_default</td></tr>
-</table>
- <p><code class="directive">AuthDefaultAuthoritative</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ÌÀ¼¨Åª¤Ë <code>Off</code> ¤ËÀßÄꤹ¤ë¤È¡¢
- ǧ¾Ú¤ò¼¡¤Î (<code>modules.c</code> ¥Õ¥¡¥¤¥ë¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë)
- Ä㼡¥ì¥Ù¥ë¤Î¥â¥¸¥å¡¼¥ë¤ËÅϤ·¤Þ¤¹¡£
- </p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code class="module"><a href="../mod/mod_authn_default.html">mod_authn_default</a></code> ¼«ÂΤ¬<em>¤È¤Æ¤âÄ㤤</em>
- ¥ì¥Ù¥ë¤È¤·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢Ä̾ï¤Ï¤³¤ì¤è¤ê¤âÄ㼡¤Î
- ¥â¥¸¥å¡¼¥ë¤Ï¸ºß¤·¤Þ¤»¤ó¡£¤Ç¤¹¤«¤é
- <code class="directive">AuthDefaultAuthoritative</code> ¤Ï¥Ç¥Õ¥©¥ë¥È
- (<code>On</code>) ¤Î¤Þ¤Þ¤Ë¤·¤¿¤Û¤¦¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_default.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_default.html.ko.euc-kr b/docs/manual/mod/mod_authn_default.html.ko.euc-kr
deleted file mode 100644
index e6ee65b1db..0000000000
--- a/docs/manual/mod/mod_authn_default.html.ko.euc-kr
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_default - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authn_default</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_default.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÃÖÈÄ ÀÎÁõ¸ðµâ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authn_default_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authn_default.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>°ú °°Àº ÀÎÁõ¸ðµâÀ»
- ¼³Á¤ÇÏÁö¾ÊÀº ÃÖÈÄÀÇ °æ¿ì ´ë½Å »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº »ç¿ëÀÚ°¡
- Á¦°øÇÑ ¾î¶°ÇÑ Á¤º¸µµ °ÅºÎÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdefaultauthoritative">AuthDefaultAuthoritative</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDefaultAuthoritative" id="AuthDefaultAuthoritative">AuthDefaultAuthoritative</a> <a name="authdefaultauthoritative" id="authdefaultauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõÀ» Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDefaultAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthDefaultAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_default</td></tr>
-</table>
- <p><code class="directive">AuthDefaultAuthoritative</code> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ÀÎÁõÀ» ³Ñ°ÜÁØ´Ù.</p>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p><code class="module"><a href="../mod/mod_authn_default.html">mod_authn_default</a></code>°¡ ÀÌ¹Ì <em>¸Å¿ì
- Àú¼öÁØ</em>À¸·Î Á¤ÀǵÇÀֱ⠶§¹®¿¡ º¸Åë ´õ ³·Àº ¸ðµâÀÌ ¾ø´Ù.
- ±×·¯¹Ç·Î <code class="directive">AuthDefaultAuthoritative</code>¸¦
- ±âº»°ª(<code>On</code>)À¸·Î ³²°ÜµÖ¾ß ÇÑ´Ù.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_default.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_default.xml b/docs/manual/mod/mod_authn_default.xml
deleted file mode 100644
index a53af55fb3..0000000000
--- a/docs/manual/mod/mod_authn_default.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_default.xml.meta">
-
-<name>mod_authn_default</name>
-<description>Authentication fallback module</description>
-<status>Base</status>
-<sourcefile>mod_authn_default.c</sourcefile>
-<identifier>authn_default_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module is designed to be the fallback module, if you don't
- have configured an authentication module like
- <module>mod_auth_basic</module>. It simply rejects any
- credentials supplied by the user.</p>
-</summary>
-
-<directivesynopsis>
-<name>AuthDefaultAuthoritative</name>
-<description>Sets whether authentication is passed to lower level
-modules</description>
-<syntax>AuthDefaultAuthoritative On|Off</syntax>
-<default>AuthDefaultAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthDefaultAuthoritative</directive> directive
- explicitly to <code>Off</code> allows for authentication to be passed on
- to lower level modules (as defined in the <code>modules.c</code>
- files).</p>
-
- <note><title>Note</title>
- <p>Normally there are no lower level modules, since
- <module>mod_authn_default</module> is defined to be already on
- a <em>very low</em> level. Therefore you should leave the value of
- <directive>AuthDefaultAuthoritative</directive> as default
- (<code>On</code>).</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_default.xml.ja b/docs/manual/mod/mod_authn_default.xml.ja
deleted file mode 100644
index 3c32b30631..0000000000
--- a/docs/manual/mod/mod_authn_default.xml.ja
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_default.xml.meta">
-
-<name>mod_authn_default</name>
-<description>$BG'>Z%U%)!<%k%P%C%/%b%8%e!<%k(B</description>
-<status>Base</status>
-<sourcefile>mod_authn_default.c</sourcefile>
-<identifier>authn_default_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p><module>mod_auth_basic</module> $B$N$h$&$JG'>Z%b%8%e!<%k$r(B
- $B@_Dj$7$J$+$C$?>l9g$O!"K\%b%8%e!<%k$,%U%)!<%k%P%C%/$H$J$j$^$9!#(B
- $B%f!<%6$+$iDs<($5$l$?$I$s$J>Z=q$bC1$K5qH]$7$^$9!#(B</p>
-</summary>
-
-<directivesynopsis>
-<name>AuthDefaultAuthoritative</name>
-<description>$B<!$NDc<!%l%Y%k$NG'>Z%b%8%e!<%k$K@)8f$rEO$9$+$I$&$+$r(B
-$B@_Dj$7$^$9(B</description>
-<syntax>AuthDefaultAuthoritative On|Off</syntax>
-<default>AuthDefaultAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDefaultAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
- $BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H!"(B
- $BG'>Z$r<!$N(B (<code>modules.c</code> $B%U%!%$%k$GDj5A$5$l$F$$$k(B)
- $BDc<!%l%Y%k$N%b%8%e!<%k$KEO$7$^$9!#(B
- </p>
-
- <note><title>$BCm0U(B</title>
- <p><module>mod_authn_default</module> $B<+BN$,(B<em>$B$H$F$bDc$$(B</em>
- $B%l%Y%k$H$7$FDj5A$5$l$F$$$^$9$N$G!"DL>o$O$3$l$h$j$bDc<!$N(B
- $B%b%8%e!<%k$OB8:_$7$^$;$s!#$G$9$+$i(B
- <directive>AuthDefaultAuthoritative</directive> $B$O%G%U%)%k%H(B
- (<code>On</code>) $B$N$^$^$K$7$?$[$&$,NI$$$G$7$g$&!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_default.xml.ko b/docs/manual/mod/mod_authn_default.xml.ko
deleted file mode 100644
index e4c51d1935..0000000000
--- a/docs/manual/mod/mod_authn_default.xml.ko
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_default.xml.meta">
-
-<name>mod_authn_default</name>
-<description>ÃÖÈÄ ÀÎÁõ¸ðµâ</description>
-<status>Base</status>
-<sourcefile>mod_authn_default.c</sourcefile>
-<identifier>authn_default_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <module>mod_auth_basic</module>°ú °°Àº ÀÎÁõ¸ðµâÀ»
- ¼³Á¤ÇÏÁö¾ÊÀº ÃÖÈÄÀÇ °æ¿ì ´ë½Å »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº »ç¿ëÀÚ°¡
- Á¦°øÇÑ ¾î¶°ÇÑ Á¤º¸µµ °ÅºÎÇÑ´Ù.</p>
-</summary>
-
-<directivesynopsis>
-<name>AuthDefaultAuthoritative</name>
-<description>ÀÎÁõÀ» Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</description>
-<syntax>AuthDefaultAuthoritative On|Off</syntax>
-<default>AuthDefaultAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDefaultAuthoritative</directive> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ÀÎÁõÀ» ³Ñ°ÜÁØ´Ù.</p>
-
- <note><title>ÁÖÀÇ</title>
- <p><module>mod_authn_default</module>°¡ ÀÌ¹Ì <em>¸Å¿ì
- Àú¼öÁØ</em>À¸·Î Á¤ÀǵÇÀֱ⠶§¹®¿¡ º¸Åë ´õ ³·Àº ¸ðµâÀÌ ¾ø´Ù.
- ±×·¯¹Ç·Î <directive>AuthDefaultAuthoritative</directive>¸¦
- ±âº»°ª(<code>On</code>)À¸·Î ³²°ÜµÖ¾ß ÇÑ´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_default.xml.meta b/docs/manual/mod/mod_authn_default.xml.meta
deleted file mode 100644
index ec19eb6a6c..0000000000
--- a/docs/manual/mod/mod_authn_default.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authn_default</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authn_file.html b/docs/manual/mod/mod_authn_file.html
deleted file mode 100644
index d3f6ce2a68..0000000000
--- a/docs/manual/mod/mod_authn_file.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authn_file.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authn_file.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authn_file.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authn_file.html.en b/docs/manual/mod/mod_authn_file.html.en
deleted file mode 100644
index 37a7fa8a17..0000000000
--- a/docs/manual/mod/mod_authn_file.html.en
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_file - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authn_file</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_file.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_file.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_file.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>User authentication using text files</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authn_file_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authn_file.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides authentication front-ends such as
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> and <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>
- to authenticate users by looking up users in plain text password files.
- Similar functionality is provided by <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>.</p>
-
- <p>When using <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>, this module is invoked via the
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> or
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
- with the <code>file</code> value.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authuserfile">AuthUserFile</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li>
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
-</li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
-</li>
-<li><a href="../programs/htpasswd.html">htpasswd</a></li>
-<li><a href="../programs/htdigest.html">htdigest</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a> <a name="authuserfile" id="authuserfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of a text file containing the list of users and
-passwords for authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthUserFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authn_file</td></tr>
-</table>
- <p>The <code class="directive">AuthUserFile</code> directive sets the name
- of a textual file containing the list of users and passwords for
- user authentication. <var>File-path</var> is the path to the user
- file. If it is not absolute, it is treated as relative to the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
-
- <p>Each line of the user file contains a username followed by
- a colon, followed by the encrypted password. If the same user
- ID is defined multiple times, <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code> will
- use the first occurrence to verify the password.</p>
-
- <p>The utility <a href="../programs/htpasswd.html">htpasswd</a>
- which is installed as part of the binary distribution, or which
- can be found in <code>src/support</code>, is used to maintain
- the password file for <em>HTTP Basic Authentication</em>. See the
- <a href="../programs/htpasswd.html">man page</a> for more details.
- In short:</p>
-
- <p>Create a password file <code>Filename</code> with
- <code>username</code> as the initial ID. It will prompt for
- the password:</p>
-
- <div class="example"><p><code>
- htpasswd -c Filename username
- </code></p></div>
-
- <p>Add or modify <code>username2</code> in the password file
- <code>Filename</code>:</p>
-
- <div class="example"><p><code>
- htpasswd Filename username2
- </code></p></div>
-
- <p>Note that searching large text files is <em>very</em>
- inefficient; <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> should be used
- instead.</p>
-
- <p>If you are using <em>HTTP Digest Authentication</em>, the <a href="../programs/htpasswd.html">htpasswd</a> tool is not sufficient.
- You have to use <a href="../programs/htdigest.html">htdigest</a>
- instead. Note that you cannot mix user data for Digest Authentication
- and Basic Authentication within the same file.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Make sure that the <code class="directive">AuthUserFile</code> is
- stored outside the document tree of the web-server. Do
- <strong>not</strong> put it in the directory that it protects.
- Otherwise, clients may be able to download the
- <code class="directive">AuthUserFile</code>.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_file.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_file.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_file.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_file.html.ja.euc-jp b/docs/manual/mod/mod_authn_file.html.ja.euc-jp
deleted file mode 100644
index 1f064723c7..0000000000
--- a/docs/manual/mod/mod_authn_file.html.ja.euc-jp
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_file - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authn_file</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_file.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_file.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥æ¡¼¥¶Ç§¾Ú</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authn_file_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authn_file.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>Ëܥ⥸¥å¡¼¥ë¤Ï <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ¤ä
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤È¤¤¤Ã¤¿Ç§¾Ú¥Õ¥í¥ó¥È¥¨¥ó¥É¤ËÂФ·¤Æ¡¢
- ¥×¥ì¥¤¥ó¥Æ¥­¥¹¥È¤Î¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ëÆ⤫¤é¥æ¡¼¥¶¤ò¸¡º÷¤¹¤ë¤³¤È¤Ç¡¢
- ¥æ¡¼¥¶Ç§¾Úµ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£»÷¤¿¤è¤¦¤Êµ¡Ç½¤Ï <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>
- ¤Ç¤âÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ¤ä <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>
- ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¡¢
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> ¤ä
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprivider">AuthDigestPrivider</a></code>
- ¤Ç <code>file</code> ¤È»ØÄꤹ¤ë¤³¤È¤Ç¤³¤Î¥â¥¸¥å¡¼¥ë¤Ïµ¯Æ°¤µ¤ì¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authuserfile">AuthUserFile</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li>
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
-</li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
-</li>
-<li><a href="../programs/htpasswd.html">htpasswd</a></li>
-<li><a href="../programs/htdigest.html">htdigest</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a> <a name="authuserfile" id="authuserfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ǧ¾Ú¤Ë»ÈÍѤ¹¤ë¥æ¡¼¥¶¤È¥Ñ¥¹¥ï¡¼¥É¤Î°ìÍ÷¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¡¢
-¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthUserFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authn_file</td></tr>
-</table>
- <p><code class="directive">AuthUserFile</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥æ¡¼¥¶Ç§¾Ú¤Î¤¿¤á¤Î¥æ¡¼¥¶¤È¥Ñ¥¹¥ï¡¼¥É¤Î°ìÍ÷¤ò³ÊǼ¤·¤¿
- ¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤷ¤Þ¤¹¡£<var>file-path</var>
- ¤Ï¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹¤Ç¤¹¡£
- ¤â¤·ÀäÂХѥ¹¤Ç¤Ê¤±¤ì¤Ð¡¢
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <p>¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤Î³Æ¹Ô¤Ë¤Ï¡¢¥æ¡¼¥¶Ì¾¡¢¥³¥í¥ó¡¢
- °Å¹æ²½¤·¤¿¥Ñ¥¹¥ï¡¼¥É¤òµ­½Ò¤·¤Þ¤¹¡£
- Ʊ°ì¥æ¡¼¥¶ ID ¤¬Ê£¿ô²óÅÐÏ¿¤µ¤ì¤¿»þ¤Ï¡¢
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>
- ¤ÏºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¥Ñ¥¹¥ï¡¼¥É¤ò»ÈÍѤ·¤Æǧ¾Ú¤·¤Þ¤¹¡£</p>
-
- <p>¥Ð¥¤¥Ê¥êÇÛÉۤΰìÉô¤È¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë¤«¡¢
- ¤¢¤ë¤¤¤Ï <code>src/support</code> ¤Ë¤¢¤ë
- <a href="../programs/htpasswd.html">htpasswd</a>
- ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤Ç¡¢¤³¤Î <em>HTTP ´ðËÜǧ¾Ú</em>
- Íѥѥ¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤ò¥á¥¤¥ó¥Æ¥Ê¥ó¥¹¤·¤Þ¤¹¡£
- ¾ÜºÙ¤Ï <a href="../programs/htpasswd.html">man
- ¥Ú¡¼¥¸</a>¤ò¤´Í÷ĺ¤¯¤È¤·¤Æ¡¢´Êñ¤Ë¤Ï:</p>
-
- <p>½é´ü ID <code>username</code> ¤Ç¡¢<code>Filename</code>
- ¤È¤¤¤¦¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¤Þ¤¹¡£
- ¼¡¤Î¥³¥Þ¥ó¥É¤òȯ¹Ô¤¹¤ë¤È¥Ñ¥¹¥ï¡¼¥É¤¬Í׵ᤵ¤ì¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- htpasswd -c Filename username
- </code></p></div>
-
- <p>¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ë <code>Filename</code> ¤Ë¡¢<code>username2</code>
- ¤òÄɲä·¤¿¤ê½¤Àµ¤·¤¿¤ê¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- htpasswd Filename username2
- </code></p></div>
-
- <p>(ÌõÃí: Èó¾ï¤Ë¿¤¯¤Î¥æ¡¼¥¶¤òÅÐÏ¿¤¹¤ë¤ÈÂ礭¤Ê¥Õ¥¡¥¤¥ë¤Ë¤Ê¤ê¤Þ¤¹¤¬)
- Â礭¤Ê¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤ò¸¡º÷¤¹¤ë¤Î¤Ï<em>Èó¾ï¤Ë¸úΨ¤¬°­¤¤</em>
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤½¤Î¤è¤¦¤ÊɬÍפΤ¢¤ë»þ¤Ï¡¢
- <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>
- ¤òÂå¤ï¤ê¤Ë»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><em>HTTP ¥À¥¤¥¸¥§¥¹¥Èǧ¾Ú</em>¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢
- <a href="../programs/htpasswd.html">htpasswd</a>
- ¥×¥í¥°¥é¥à¤Ç¤ÏÉÔ½½Ê¬¤Ç¤¹¡£¤½¤ÎÂå¤ï¤ê¤Ë
- <a href="../programs/htdigest.html">htdigest</a>
- ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£¥À¥¤¥¸¥§¥¹¥Èǧ¾ÚÍѤΥǡ¼¥¿¤È
- ´ðËÜǧ¾ÚÍѤΥǡ¼¥¿¤òƱ°ì¥Õ¥¡¥¤¥ë¤Ëº®¤¼¤ÆÊݸ¤Ç¤­¤Ê¤¤¡¢
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p><code class="directive">AuthUserFile </code>
- ¤Ï¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Î³°Â¦¤ËÊݴɤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- Êݸ¤è¤¦¤È¤·¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë¤Ï¡¢<strong>ÃÖ¤«¤Ê¤¤¤Ç²¼¤µ¤¤</strong>¡£
- ¤½¤¦¤·¤Ê¤¤¤È <code class="directive">AuthUserFile</code> ¤Ï
- ¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Æ¤·¤Þ¤¤¤Þ¤¹¡£</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_file.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_file.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_file.html.ko.euc-kr b/docs/manual/mod/mod_authn_file.html.ko.euc-kr
deleted file mode 100644
index 8a5cfc55e1..0000000000
--- a/docs/manual/mod/mod_authn_file.html.ko.euc-kr
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authn_file - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authn_file</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_file.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_file.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authn_file_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authn_file.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈÄ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>¿Í
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> °°Àº ÀÎÁõ¾Õ´Ü¸ðµâÀ» À§ÇØ
- ÀÏ¹Ý ¹®ÀÚ ¾ÏÈ£ÆÄÀÏ¿¡¼­ »ç¿ëÀÚ¸¦ ã¾Æ¼­ ÀÎÁõÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>°ú ±â´ÉÀÌ ºñ½ÁÇÏ´Ù.</p>
-
- <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>À̳ª
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>¸¦ »ç¿ëÇÒ¶§ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>³ª
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>ÀÇ
- °ªÀ» <code>file</code>·Î ¼³Á¤Çϸé ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authuserfile">AuthUserFile</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li>
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
-</li>
-<li>
- <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>
-</li>
-<li><a href="../programs/htpasswd.html">htpasswd</a></li>
-<li><a href="../programs/htdigest.html">htdigest</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthUserFile" id="AuthUserFile">AuthUserFile</a> <a name="authuserfile" id="authuserfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõÇÒ »ç¿ëÀÚ¸í¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthUserFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authn_file</td></tr>
-</table>
- <p><code class="directive">AuthUserFile</code> Áö½Ã¾î´Â »ç¿ëÀÚ ÀÎÁõ¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ¸í¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.
- <var>File-path</var>´Â ÆÄÀÏ°æ·ÎÀÌ´Ù. Àý´ë°æ·Î¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸¸é <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>ÀÇ
- »ó´ë°æ·Î·Î ó¸®ÇÑ´Ù.</p>
-
- <p>ÆÄÀÏÀÇ °¢ ÁÙ¿¡´Â »ç¿ëÀÚ¸í, ÄÝ·Ð, ÀÎÄÚµùµÈ ¾ÏÈ£°¡ ¼ø¼­´ë·Î
- ³ª¿Â´Ù. ¿©·¯ ÁÙ¿¡¼­ µ¿ÀÏÇÑ »ç¿ëÀÚ ¾ÆÀ̵𸦠Á¤ÀÇÇϸé,
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>´Â ù¹ø°·Î ³ª¿À´Â ¾ÏÈ£¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>ÄÄÆÄÀÏµÈ ¹èÆ÷º»À̳ª <code>src/support</code>¿¡ ÀÖ´Â <a href="../programs/htpasswd.html">htpasswd</a> µµ±¸´Â <em>HTTP
- Basic Authentication</em>¿¡ »ç¿ëÇÒ ¾ÏÈ£ÆÄÀÏÀ» °ü¸®ÇÑ´Ù.
- ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="../programs/htpasswd.html">manpage</a>¸¦
- Âü°íÇ϶ó. ¿ä¾àÇϸé:</p>
-
- <p>Ãʱ⠾ÆÀ̵ð <code>username</code>À» °¡Áø ¾ÏÈ£ÆÄÀÏ
- <code>Filename</code>À» ¸¸µç´Ù. ¾ÏÈ£¸¦ ¹°¾îº»´Ù:</p>
-
- <div class="example"><p><code>
- htpasswd -c Filename username
- </code></p></div>
-
- <p>¾ÏÈ£ÆÄÀÏ <code>Filename</code>¿¡ <code>username2</code>¸¦
- Ãß°¡Çϰųª ¼öÁ¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- htpasswd Filename username2
- </code></p></div>
-
- <p>Å« ¹®ÀÚÆÄÀÏÀ» °Ë»öÇÏ´Â °ÍÀº <em>¸Å¿ì</em> ºñÈ¿À²ÀûÀÓÀ»
- ÁÖÀÇÇ϶ó. »ç¿ëÀÚ°¡ ¸¹´Ù¸é ´ë½Å <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>À» »ç¿ëÇؾß
- ÇÑ´Ù.</p>
-
- <p><em>HTTP Digest Authentication</em>À» »ç¿ëÇÑ´Ù¸é <a href="../programs/htpasswd.html">htpasswd</a> µµ±¸·Î ¾ÈµÈ´Ù.
- ´ë½Å <a href="../programs/htdigest.html">htdigest</a>¸¦
- »ç¿ëÇØ¾ß ÇÑ´Ù. Digest Authentication°ú Basic AuthenticationÀ»
- À§ÇÑ ÀڷḦ °°Àº ÆÄÀÏ¿¡ ¼¯¾î¼­ »ç¿ëÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- <div class="warning"><h3>º¸¾È</h3>
- <p><code class="directive">AuthUserFile</code>ÀÌ À¥¼­¹öÀÇ ¹®¼­µé
- ¹Û¿¡ À§Ä¡ÇÔÀ» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮 ¾È¿¡
- °°ÀÌ µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <code class="directive">AuthUserFile</code>À» ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authn_file.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authn_file.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authn_file.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authn_file.xml b/docs/manual/mod/mod_authn_file.xml
deleted file mode 100644
index b1f0911bf4..0000000000
--- a/docs/manual/mod/mod_authn_file.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_file.xml.meta">
-
-<name>mod_authn_file</name>
-<description>User authentication using text files</description>
-<status>Base</status>
-<sourcefile>mod_authn_file.c</sourcefile>
-<identifier>authn_file_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module provides authentication front-ends such as
- <module>mod_auth_digest</module> and <module>mod_auth_basic</module>
- to authenticate users by looking up users in plain text password files.
- Similar functionality is provided by <module>mod_authn_dbm</module>.</p>
-
- <p>When using <module>mod_auth_basic</module> or
- <module>mod_auth_digest</module>, this module is invoked via the
- <directive module="mod_auth_basic">AuthBasicProvider</directive> or
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
- with the <code>file</code> value.</p>
-</summary>
-<seealso>
- <directive module="mod_auth_basic">AuthBasicProvider</directive>
-</seealso>
-<seealso>
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
-</seealso>
-<seealso><a href="../programs/htpasswd.html">htpasswd</a></seealso>
-<seealso><a href="../programs/htdigest.html">htdigest</a></seealso>
-
-<directivesynopsis>
-<name>AuthUserFile</name>
-<description>Sets the name of a text file containing the list of users and
-passwords for authentication</description>
-<syntax>AuthUserFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthUserFile</directive> directive sets the name
- of a textual file containing the list of users and passwords for
- user authentication. <var>File-path</var> is the path to the user
- file. If it is not absolute, it is treated as relative to the
- <directive module="core">ServerRoot</directive>.</p>
-
- <p>Each line of the user file contains a username followed by
- a colon, followed by the encrypted password. If the same user
- ID is defined multiple times, <module>mod_authn_file</module> will
- use the first occurrence to verify the password.</p>
-
- <p>The utility <a href="../programs/htpasswd.html">htpasswd</a>
- which is installed as part of the binary distribution, or which
- can be found in <code>src/support</code>, is used to maintain
- the password file for <em>HTTP Basic Authentication</em>. See the
- <a href="../programs/htpasswd.html">man page</a> for more details.
- In short:</p>
-
- <p>Create a password file <code>Filename</code> with
- <code>username</code> as the initial ID. It will prompt for
- the password:</p>
-
- <example>
- htpasswd -c Filename username
- </example>
-
- <p>Add or modify <code>username2</code> in the password file
- <code>Filename</code>:</p>
-
- <example>
- htpasswd Filename username2
- </example>
-
- <p>Note that searching large text files is <em>very</em>
- inefficient; <directive
- module="mod_authn_dbm">AuthDBMUserFile</directive> should be used
- instead.</p>
-
- <p>If you are using <em>HTTP Digest Authentication</em>, the <a
- href="../programs/htpasswd.html">htpasswd</a> tool is not sufficient.
- You have to use <a href="../programs/htdigest.html">htdigest</a>
- instead. Note that you cannot mix user data for Digest Authentication
- and Basic Authentication within the same file.</p>
-
- <note type="warning"><title>Security</title>
- <p>Make sure that the <directive>AuthUserFile</directive> is
- stored outside the document tree of the web-server. Do
- <strong>not</strong> put it in the directory that it protects.
- Otherwise, clients may be able to download the
- <directive>AuthUserFile</directive>.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_file.xml.ja b/docs/manual/mod/mod_authn_file.xml.ja
deleted file mode 100644
index 5acd658014..0000000000
--- a/docs/manual/mod/mod_authn_file.xml.ja
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_file.xml.meta">
-
-<name>mod_authn_file</name>
-<description>$B%F%-%9%H%U%!%$%k$rMQ$$$?%f!<%6G'>Z(B</description>
-<status>Base</status>
-<sourcefile>mod_authn_file.c</sourcefile>
-<identifier>authn_file_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p>$BK\%b%8%e!<%k$O(B <module>mod_auth_digest</module> $B$d(B
- <module>mod_auth_basic</module> $B$H$$$C$?G'>Z%U%m%s%H%(%s%I$KBP$7$F!"(B
- $B%W%l%$%s%F%-%9%H$N%Q%9%o!<%I%U%!%$%kFb$+$i%f!<%6$r8!:w$9$k$3$H$G!"(B
- $B%f!<%6G'>Z5!G=$rDs6!$7$^$9!#;w$?$h$&$J5!G=$O(B <module>mod_authn_dbm</module>
- $B$G$bDs6!$5$l$F$$$^$9!#(B</p>
-
- <p><module>mod_auth_basic</module> $B$d(B <module>mod_auth_digest</module>
- $B$r;HMQ$9$k:]$K$O!"(B
- <directive module="mod_auth_basic">AuthBasicProvider</directive> $B$d(B
- <directive module="mod_auth_digest">AuthDigestPrivider</directive>
- $B$G(B <code>file</code> $B$H;XDj$9$k$3$H$G$3$N%b%8%e!<%k$O5/F0$5$l$^$9!#(B</p>
-</summary>
-<seealso>
- <directive module="mod_auth_basic">AuthBasicProvider</directive>
-</seealso>
-<seealso>
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
-</seealso>
-<seealso><a href="../programs/htpasswd.html">htpasswd</a></seealso>
-<seealso><a href="../programs/htdigest.html">htdigest</a></seealso>
-
-<directivesynopsis>
-<name>AuthUserFile</name>
-<description>$BG'>Z$K;HMQ$9$k%f!<%6$H%Q%9%o!<%I$N0lMw$,3JG<$5$l$F$$$k!"(B
-$B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$9$k(B</description>
-<syntax>AuthUserFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthUserFile</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%f!<%6G'>Z$N$?$a$N%f!<%6$H%Q%9%o!<%I$N0lMw$r3JG<$7$?(B
- $B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B<var>file-path</var>
- $B$O%f!<%6%U%!%$%k$X$N%Q%9$G$9!#(B
- $B$b$7@dBP%Q%9$G$J$1$l$P!"(B
- <directive module="core">ServerRoot</directive>
- $B$+$i$NAjBP%Q%9$H$7$F07$o$l$^$9!#(B</p>
-
- <p>$B%f!<%6%U%!%$%k$N3F9T$K$O!"%f!<%6L>!"%3%m%s!"(B
- $B0E9f2=$7$?%Q%9%o!<%I$r5-=R$7$^$9!#(B
- $BF10l%f!<%6(B ID $B$,J#?t2sEPO?$5$l$?;~$O!"(B
- <module>mod_authn_file</module>
- $B$O:G=i$K8+$D$+$C$?%Q%9%o!<%I$r;HMQ$7$FG'>Z$7$^$9!#(B</p>
-
- <p>$B%P%$%J%jG[I[$N0lIt$H$7$F%$%s%9%H!<%k$5$l$k$+!"(B
- $B$"$k$$$O(B <code>src/support</code> $B$K$"$k(B
- <a href="../programs/htpasswd.html">htpasswd</a>
- $B%f!<%F%#%j%F%#$G!"$3$N(B <em>HTTP $B4pK\G'>Z(B</em>
- $BMQ%Q%9%o!<%I%U%!%$%k$r%a%$%s%F%J%s%9$7$^$9!#(B
- $B>\:Y$O(B <a href="../programs/htpasswd.html">man
- $B%Z!<%8(B</a>$B$r$4MwD:$/$H$7$F!"4JC1$K$O(B:</p>
-
- <p>$B=i4|(B ID <code>username</code> $B$G!"(B<code>Filename</code>
- $B$H$$$&%Q%9%o!<%I%U%!%$%k$r@8@.$7$^$9!#(B
- $B<!$N%3%^%s%I$rH/9T$9$k$H%Q%9%o!<%I$,MW5a$5$l$^$9(B:</p>
-
- <example>
- htpasswd -c Filename username
- </example>
-
- <p>$B%Q%9%o!<%I%U%!%$%k(B <code>Filename</code> $B$K!"(B<code>username2</code>
- $B$rDI2C$7$?$j=$@5$7$?$j$7$^$9(B:</p>
-
- <example>
- htpasswd Filename username2
- </example>
-
- <p>($BLuCm(B: $BHs>o$KB?$/$N%f!<%6$rEPO?$9$k$HBg$-$J%U%!%$%k$K$J$j$^$9$,(B)
- $BBg$-$J%F%-%9%H%U%!%$%k$r8!:w$9$k$N$O(B<em>$BHs>o$K8zN($,0-$$(B</em>
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#$=$N$h$&$JI,MW$N$"$k;~$O!"(B
- <directive module="mod_authn_dbm">AuthDBMUserFile</directive>
- $B$rBe$o$j$K;H$C$F$/$@$5$$!#(B</p>
-
- <p><em>HTTP $B%@%$%8%'%9%HG'>Z(B</em>$B$r;HMQ$9$k>l9g$O!"(B
- <a href="../programs/htpasswd.html">htpasswd</a>
- $B%W%m%0%i%`$G$OIT==J,$G$9!#$=$NBe$o$j$K(B
- <a href="../programs/htdigest.html">htdigest</a>
- $B$r;HMQ$7$F$/$@$5$$!#%@%$%8%'%9%HG'>ZMQ$N%G!<%?$H(B
- $B4pK\G'>ZMQ$N%G!<%?$rF10l%U%!%$%k$K:.$<$FJ]B8$G$-$J$$!"(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p><directive>AuthUserFile </directive>
- $B$O!"%&%'%V%5!<%P$N%I%-%e%a%s%H%D%j!<$N30B&$KJ]4I$9$k$h$&$K$7$F$/$@$5$$!#(B
- $BJ]8n$7$h$&$H$7$F$$$k%G%#%l%/%H%j0J2<$K$O!"(B<strong>$BCV$+$J$$$G2<$5$$(B</strong>$B!#(B
- $B$=$&$7$J$$$H(B <directive>AuthUserFile</directive> $B$O(B
- $B%@%&%s%m!<%I$G$-$F$7$^$$$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_file.xml.ko b/docs/manual/mod/mod_authn_file.xml.ko
deleted file mode 100644
index 3dd32dbedf..0000000000
--- a/docs/manual/mod/mod_authn_file.xml.ko
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authn_file.xml.meta">
-
-<name>mod_authn_file</name>
-<description>¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ</description>
-<status>Base</status>
-<sourcefile>mod_authn_file.c</sourcefile>
-<identifier>authn_file_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈÄ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <module>mod_auth_digest</module>¿Í
- <module>mod_auth_basic</module> °°Àº ÀÎÁõ¾Õ´Ü¸ðµâÀ» À§ÇØ
- ÀÏ¹Ý ¹®ÀÚ ¾ÏÈ£ÆÄÀÏ¿¡¼­ »ç¿ëÀÚ¸¦ ã¾Æ¼­ ÀÎÁõÇÑ´Ù.
- <module>mod_authn_dbm</module>°ú ±â´ÉÀÌ ºñ½ÁÇÏ´Ù.</p>
-
- <p><module>mod_auth_basic</module>À̳ª
- <module>mod_auth_digest</module>¸¦ »ç¿ëÇÒ¶§ <directive
- module="mod_auth_basic">AuthBasicProvider</directive>³ª
- <directive
- module="mod_auth_digest">AuthDigestProvider</directive>ÀÇ
- °ªÀ» <code>file</code>·Î ¼³Á¤Çϸé ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù.</p>
-</summary>
-<seealso>
- <directive module="mod_auth_basic">AuthBasicProvider</directive>
-</seealso>
-<seealso>
- <directive module="mod_auth_digest">AuthDigestProvider</directive>
-</seealso>
-<seealso><a href="../programs/htpasswd.html">htpasswd</a></seealso>
-<seealso><a href="../programs/htdigest.html">htdigest</a></seealso>
-
-<directivesynopsis>
-<name>AuthUserFile</name>
-<description>ÀÎÁõÇÒ »ç¿ëÀÚ¸í¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
-ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthUserFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthUserFile</directive> Áö½Ã¾î´Â »ç¿ëÀÚ ÀÎÁõ¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ¸í¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.
- <var>File-path</var>´Â ÆÄÀÏ°æ·ÎÀÌ´Ù. Àý´ë°æ·Î¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸¸é <directive module="core">ServerRoot</directive>ÀÇ
- »ó´ë°æ·Î·Î ó¸®ÇÑ´Ù.</p>
-
- <p>ÆÄÀÏÀÇ °¢ ÁÙ¿¡´Â »ç¿ëÀÚ¸í, ÄÝ·Ð, ÀÎÄÚµùµÈ ¾ÏÈ£°¡ ¼ø¼­´ë·Î
- ³ª¿Â´Ù. ¿©·¯ ÁÙ¿¡¼­ µ¿ÀÏÇÑ »ç¿ëÀÚ ¾ÆÀ̵𸦠Á¤ÀÇÇϸé,
- <module>mod_authn_file</module>´Â ù¹ø°·Î ³ª¿À´Â ¾ÏÈ£¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p>ÄÄÆÄÀÏµÈ ¹èÆ÷º»À̳ª <code>src/support</code>¿¡ ÀÖ´Â <a
- href="../programs/htpasswd.html">htpasswd</a> µµ±¸´Â <em>HTTP
- Basic Authentication</em>¿¡ »ç¿ëÇÒ ¾ÏÈ£ÆÄÀÏÀ» °ü¸®ÇÑ´Ù.
- ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="../programs/htpasswd.html">manpage</a>¸¦
- Âü°íÇ϶ó. ¿ä¾àÇϸé:</p>
-
- <p>Ãʱ⠾ÆÀ̵ð <code>username</code>À» °¡Áø ¾ÏÈ£ÆÄÀÏ
- <code>Filename</code>À» ¸¸µç´Ù. ¾ÏÈ£¸¦ ¹°¾îº»´Ù:</p>
-
- <example>
- htpasswd -c Filename username
- </example>
-
- <p>¾ÏÈ£ÆÄÀÏ <code>Filename</code>¿¡ <code>username2</code>¸¦
- Ãß°¡Çϰųª ¼öÁ¤ÇÑ´Ù:</p>
-
- <example>
- htpasswd Filename username2
- </example>
-
- <p>Å« ¹®ÀÚÆÄÀÏÀ» °Ë»öÇÏ´Â °ÍÀº <em>¸Å¿ì</em> ºñÈ¿À²ÀûÀÓÀ»
- ÁÖÀÇÇ϶ó. »ç¿ëÀÚ°¡ ¸¹´Ù¸é ´ë½Å <directive
- module="mod_authn_dbm">AuthDBMUserFile</directive>À» »ç¿ëÇؾß
- ÇÑ´Ù.</p>
-
- <p><em>HTTP Digest Authentication</em>À» »ç¿ëÇÑ´Ù¸é <a
- href="../programs/htpasswd.html">htpasswd</a> µµ±¸·Î ¾ÈµÈ´Ù.
- ´ë½Å <a href="../programs/htdigest.html">htdigest</a>¸¦
- »ç¿ëÇØ¾ß ÇÑ´Ù. Digest Authentication°ú Basic AuthenticationÀ»
- À§ÇÑ ÀڷḦ °°Àº ÆÄÀÏ¿¡ ¼¯¾î¼­ »ç¿ëÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- <note type="warning"><title>º¸¾È</title>
- <p><directive>AuthUserFile</directive>ÀÌ À¥¼­¹öÀÇ ¹®¼­µé
- ¹Û¿¡ À§Ä¡ÇÔÀ» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮 ¾È¿¡
- °°ÀÌ µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <directive>AuthUserFile</directive>À» ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authn_file.xml.meta b/docs/manual/mod/mod_authn_file.xml.meta
deleted file mode 100644
index 085839cc0f..0000000000
--- a/docs/manual/mod/mod_authn_file.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authn_file</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authz_dbm.html b/docs/manual/mod/mod_authz_dbm.html
deleted file mode 100644
index 5b5cdad64d..0000000000
--- a/docs/manual/mod/mod_authz_dbm.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_authz_dbm.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authz_dbm.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authz_dbm.html.en b/docs/manual/mod/mod_authz_dbm.html.en
deleted file mode 100644
index 8b7b3e4628..0000000000
--- a/docs/manual/mod/mod_authz_dbm.html.en
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_dbm - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authz_dbm</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_dbm.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Group authorization using DBM files</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authz_dbm_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authz_dbm.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides authorization capabilities so that
- authenticated users can be allowed or denied access to portions
- of the web site by group membership. Similar functionality is
- provided by <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdbmtype">AuthzDBMType</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMGroupFile" id="AuthDBMGroupFile">AuthDBMGroupFile</a> <a name="authdbmgroupfile" id="authdbmgroupfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of the database file containing the list
-of user groups for authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthDBMGroupFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbm</td></tr>
-</table>
- <p>The <code class="directive">AuthDBMGroupFile</code> directive sets the
- name of a DBM file containing the list of user groups for user
- authentication. <var>File-path</var> is the absolute path to the
- group file.</p>
-
- <p>The group file is keyed on the username. The value for a
- user is a comma-separated list of the groups to which the users
- belongs. There must be no whitespace within the value, and it
- must never contain any colons.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Make sure that the <code class="directive">AuthDBMGroupFile</code> is
- stored outside the document tree of the web-server. Do
- <strong>not</strong> put it in the directory that it protects.
- Otherwise, clients will be able to download the
- <code class="directive">AuthDBMGroupFile</code> unless otherwise
- protected.</p>
- </div>
-
- <p>Combining Group and Password DBM files: In some cases it is
- easier to manage a single database which contains both the
- password and group details for each user. This simplifies any
- support programs that need to be written: they now only have to
- deal with writing to and locking a single DBM file. This can be
- accomplished by first setting the group and password files to
- point to the same DBM:</p>
-
- <div class="example"><p><code>
- AuthDBMGroupFile /www/userbase<br />
- AuthDBMUserFile /www/userbase
- </code></p></div>
-
- <p>The key for the single DBM is the username. The value consists
- of</p>
-
- <div class="example"><p><code>
- Encrypted Password : List of Groups [ : (ignored) ]
- </code></p></div>
-
- <p>The password section contains the encrypted
- password as before. This is followed by a colon and the comma
- separated list of groups. Other data may optionally be left in the
- DBM file after another colon; it is ignored by the authentication
- module. This is what www.telescope.org uses for its combined
- password and group database.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBMAuthoritative" id="AuthzDBMAuthoritative">AuthzDBMAuthoritative</a> <a name="authzdbmauthoritative" id="authzdbmauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBMAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzDBMAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbm</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthzDBMAuthoritative</code>
- directive explicitly to <code>Off</code> allows group authorization
- to be passed on to lower level modules (as defined in the
- <code>modules.c</code> file) if there is no group found
- for the the supplied userID. If there are any groups
- specified, the usual checks will be applied and a failure will
- give an Authentication Required reply.</p>
-
- <p>So if a userID appears in the database of more than one module;
- or if a valid <code class="directive"><a href="../mod/core.html#require">Require</a></code>
- directive applies to more than one module; then the first module
- will verify the credentials; and no access is passed on;
- regardless of the <code class="directive">AuthAuthoritative</code> setting.</p>
-
- <p>A common use for this is in conjunction with one of the
- auth providers; such as <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> or
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>. Whereas this DBM module supplies
- the bulk of the user credential checking; a few (administrator) related
- accesses fall through to a lower level with a well protected
- <code>.htpasswd</code> file.</p>
-
- <p>By default, control is not passed on and an unknown group
- will result in an Authentication Required reply. Not
- setting it thus keeps the system secure and forces an NCSA
- compliant behaviour.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Do consider the implications of allowing a user to
- allow fall-through in his .htaccess file; and verify that this
- is really what you want; Generally it is easier to just secure
- a single <code>.htpasswd</code> file, than it is to secure a
- database which might have more access interfaces.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBMType" id="AuthzDBMType">AuthzDBMType</a> <a name="authzdbmtype" id="authzdbmtype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the type of database file that is used to
-store passwords</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDBMType default|SDBM|GDBM|NDBM|DB</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzDBMType default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_dbm</td></tr>
-</table>
- <p>Sets the type of database file that is used to store the passwords.
- The default database type is determined at compile time. The
- availability of other types of database files also depends on
- <a href="../install.html#dbm">compile-time settings</a>.</p>
-
- <p>It is crucial that whatever program you use to create your password
- files is configured to use the same type of database.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_dbm.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_dbm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_dbm.html.ko.euc-kr b/docs/manual/mod/mod_authz_dbm.html.ko.euc-kr
deleted file mode 100644
index 8ac5b9274c..0000000000
--- a/docs/manual/mod/mod_authz_dbm.html.ko.euc-kr
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_dbm - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authz_dbm</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_dbm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_dbm.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>DBM ÆÄÀÏÀ» »ç¿ëÇÑ ±×·ì ÀÎÁõ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authz_dbm_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authz_dbm.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ÀÎÁõÇÑ »ç¿ëÀÚÀÇ ±×·ì±ÇÇÑÀ¸·Î À¥ÀÇ ÀϺθ¦ Á¢±ÙÇÒ
- ¼ö ÀÖ´ÂÁö °áÁ¤ÇÏ¿© ±ÇÇѺο©¸¦ ÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>°ú ±â´ÉÀÌ ºñ½ÁÇÏ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authdbmgroupfile">AuthDBMGroupFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdbmauthoritative">AuthzDBMAuthoritative</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdbmtype">AuthzDBMType</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthDBMGroupFile" id="AuthDBMGroupFile">AuthDBMGroupFile</a> <a name="authdbmgroupfile" id="authdbmgroupfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º
-ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthDBMGroupFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_dbm</td></tr>
-</table>
- <p><code class="directive">AuthDBMGroupFile</code> Áö½Ã¾î´Â ÀÎÁõ¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â DBM ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.
- <var>File-path</var>´Â ÆÄÀÏÀÇ Àý´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>ÆÄÀÏÀº »ç¿ëÀÚ¸íÀ» Å°·Î »ç¿ëÇÑ´Ù. »ç¿ëÀÚ¿¡ ´ëÇÑ °ªÀº ½°Ç¥·Î
- ±¸ºÐÇÑ »ç¿ëÀÚ°¡ ¼ÓÇÑ ±×·ì ¸ñ·ÏÀÌ´Ù. °ª¿¡ °ø¹éÀ̳ª ÄÝ·ÐÀ»
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <div class="warning"><h3>º¸¾È</h3>
- <p><code class="directive">AuthDBMGroupFile</code>ÀÌ À¥¼­¹öÀÇ
- ¹®¼­µé ¹Û¿¡ À§Ä¡ÇÔÀ» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮
- ¾È¿¡ °°ÀÌ µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <code class="directive">AuthDBMGroupFile</code>¸¦ ´Ù¿î·ÎµåÇÒ ¼ö
- ÀÖ´Ù.</p>
- </div>
-
- <p>±×·ì DBM ÆÄÀÏ°ú ¾ÏÈ£ DBM ÆÄÀÏÀ» °°ÀÌ »ç¿ëÇϱâ: »ç¿ëÀÚ¿¡
- ´ëÇÑ ¾ÏÈ£¿Í ±×·ì Á¤º¸ ¸ðµÎ¸¦ ÇÑ µ¥ÀÌÅͺ£À̽º¿¡¼­ °ü¸®ÇÏ´Â
- °ÍÀÌ ½¬¿ï¶§°¡ ÀÖ´Ù. ÀÌ °æ¿ì ÀÛ¼ºÇÒ Áö¿ø ÇÁ·Î±×·¥ÀÌ °£´ÜÇØÁø´Ù.
- ÇÁ·Î±×·¥Àº ÇÑ DBM ÆÄÀϸ¸À» Àá±×°í ¾²¸é µÈ´Ù. ±×·ìÆÄÀÏ°ú
- ¾ÏÈ£ÆÄÀÏÀ» °°Àº DBMÆÄÀÏ·Î ¼³Á¤ÇÏ¸é °¡´ÉÇÏ´Ù:</p>
-
- <div class="example"><p><code>
- AuthDBMGroupFile /www/userbase<br />
- AuthDBMUserFile /www/userbase
- </code></p></div>
-
- <p>ÀÌ ÅëÇÕ DBMÀÇ Å°´Â »ç¿ëÀÚ¸íÀÌ´Ù. °ªÀº ´ÙÀ½°ú °°´Ù</p>
-
- <div class="example"><p><code>
- ÀÎÄÚµùµÈ ¾ÏÈ£ : ±×·ì ¸ñ·Ï [ : (¹«½Ã) ]
- </code></p></div>
-
- <p>¾ÏÈ£ ºÎºÐÀº Àü°ú °°ÀÌ ÀÎÄÚµùµÈ ¾ÏÈ£ÀÌ´Ù. ÄÝ·Ð µÚ¿¡ ½°Ç¥·Î
- ±¸ºÐÇÑ ±×·ì ¸ñ·ÏÀÌ ³ª¿Â´Ù. ¶Ç ´Ù½Ã ÄÝ·Ð ´ÙÀ½¿¡ ´Ù¸¥ Á¤º¸¸¦
- ±â·ÏÇÒ ¼ö ÀÖ´Ù. ÀÌ ºÎºÐÀº ÀÎÁõ¸ðµâÀÌ ¹«½ÃÇÑ´Ù.
- www.telescope.org´Â ÀÌ·¸°Ô ¾ÏÈ£ µ¥ÀÌÅͺ£À̽º¿Í ±×·ì
- µ¥ÀÌÅͺ£À̽º¸¦ °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBMAuthoritative" id="AuthzDBMAuthoritative">AuthzDBMAuthoritative</a> <a name="authzdbmauthoritative" id="authzdbmauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthzDBMAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthzDBMAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_dbm</td></tr>
-</table>
- <p><code class="directive">AuthzDBMAuthoritative</code> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé ÇØ´ç »ç¿ëÀÚ ¾ÆÀ̵𿡠´ëÇÑ
- ±×·ìÀÌ ¾ø´Â °æ¿ì ±×·ì ±ÇÇѺο©¸¦ (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁØ´Ù. ÁöÁ¤ÇÑ ±×·ìÀÌ ÀÖ´Ù¸é
- º¸Å붧¿Í °°ÀÌ °Ë»çÇÏ°í, ½ÇÆÐÇϸé ÀÎÁõ ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù.</p>
-
- <p>±×·¡¼­ ¿©·¯ ¸ðµâÀÇ µ¥ÀÌÅͺ£À̽º¿¡ »ç¿ëÀÚ ¾ÆÀ̵𰡠Àְųª
- À¯È¿ÇÑ <code class="directive"><a href="../mod/core.html#require">Require</a></code> Áö½Ã¾î¸¦
- ¿©·¯ ¸ðµâ¿¡ Àû¿ëÇϸé, ù¹ø° ¸ðµâÀÌ »ç¿ëÀÚ¸¦ °Ë»çÇÏ°í,
- <code class="directive">AuthAuthoritative</code> ¼³Á¤°ú °ü°è¾øÀÌ
- Á¢±ÙÀ» ³Ñ±âÁö¾Ê´Â´Ù.</p>
-
- <p>ÀϹÝÀûÀ¸·Î <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>À̳ª
- <code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code>°ú °°Àº ÀÎÁõÁ¦°øÀÚ¿Í °°ÀÌ
- »ç¿ëÇÑ´Ù. ´ë·®ÀÇ »ç¿ëÀÚ °Ë»ç¿¡ ´ëÇÑ °Ë»ç´Â DBM ¸ðµâÀ»
- »ç¿ëÇÏÁö¸¸, ¼Ò¼ö(°ü¸®ÀÚ)¿¡ ´ëÇÑ °Ë»ç´Â Àß º¸È£µÈ
- <code>.htpasswd</code> ÆÄÀÏ·Î ³Ñ±ä´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â ±×·ìÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ ¼³Á¤ÇÏÁö¾ÊÀ¸¸é ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô
- À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
- <div class="warning"><h3>º¸¾È</h3>
- <p>»ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ .htaccess ÆÄÀÏÀ» »ç¿ëÇÏ°Ô µÇ´ÂÁö »ìÆ캸°í,
- ÀÌ·± ÇൿÀ» Çã¿ëÇÒÁö °áÁ¤Ç϶ó. ÀϹÝÀûÀ¸·Î ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î
- Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͺ£À̽º¸¦ º¸È£ÇÏ´Â °Íº¸´Ù ÇϳªÀÇ
- <code>.htpasswd</code> ÆÄÀÏÀ» º¸È£ÇÏ´Â °ÍÀÌ ´õ ½±´Ù.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDBMType" id="AuthzDBMType">AuthzDBMType</a> <a name="authzdbmtype" id="authzdbmtype">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthzDBMType default|SDBM|GDBM|NDBM|DB</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthzDBMType default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_dbm</td></tr>
-</table>
- <p>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù.
- µ¥ÀÌÅͺ£À̽º Á¾·ù ±âº»°ªÀº ÄÄÆÄÀ϶§ Á¤ÇØÁø´Ù. »ç¿ëÇÒ ¼ö
- ÀÖ´Â ´Ù¸¥ µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ùµµ <a href="../install.html#dbm">ÄÄÆÄÀÏ ¼³Á¤</a>¿¡ ´Þ·È´Ù.</p>
-
- <p>¾ÏÈ£ÆÄÀÏÀ» ¸¸µç ÇÁ·Î±×·¥ÀÌ °°Àº Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽º¸¦
- »ç¿ëÇϵµ·Ï ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_dbm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_dbm.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_dbm.xml b/docs/manual/mod/mod_authz_dbm.xml
deleted file mode 100644
index c68e092774..0000000000
--- a/docs/manual/mod/mod_authz_dbm.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_dbm.xml.meta">
-
-<name>mod_authz_dbm</name>
-<description>Group authorization using DBM files</description>
-<status>Extension</status>
-<sourcefile>mod_authz_dbm.c</sourcefile>
-<identifier>authz_dbm_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module provides authorization capabilities so that
- authenticated users can be allowed or denied access to portions
- of the web site by group membership. Similar functionality is
- provided by <module>mod_authz_groupfile</module>.</p>
-</summary>
-
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthDBMGroupFile</name>
-<description>Sets the name of the database file containing the list
-of user groups for authentication</description>
-<syntax>AuthDBMGroupFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthDBMGroupFile</directive> directive sets the
- name of a DBM file containing the list of user groups for user
- authentication. <var>File-path</var> is the absolute path to the
- group file.</p>
-
- <p>The group file is keyed on the username. The value for a
- user is a comma-separated list of the groups to which the users
- belongs. There must be no whitespace within the value, and it
- must never contain any colons.</p>
-
- <note type="warning"><title>Security</title>
- <p>Make sure that the <directive>AuthDBMGroupFile</directive> is
- stored outside the document tree of the web-server. Do
- <strong>not</strong> put it in the directory that it protects.
- Otherwise, clients will be able to download the
- <directive>AuthDBMGroupFile</directive> unless otherwise
- protected.</p>
- </note>
-
- <p>Combining Group and Password DBM files: In some cases it is
- easier to manage a single database which contains both the
- password and group details for each user. This simplifies any
- support programs that need to be written: they now only have to
- deal with writing to and locking a single DBM file. This can be
- accomplished by first setting the group and password files to
- point to the same DBM:</p>
-
- <example>
- AuthDBMGroupFile /www/userbase<br />
- AuthDBMUserFile /www/userbase
- </example>
-
- <p>The key for the single DBM is the username. The value consists
- of</p>
-
- <example>
- Encrypted Password : List of Groups [ : (ignored) ]
- </example>
-
- <p>The password section contains the encrypted
- password as before. This is followed by a colon and the comma
- separated list of groups. Other data may optionally be left in the
- DBM file after another colon; it is ignored by the authentication
- module. This is what www.telescope.org uses for its combined
- password and group database.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzDBMType</name>
-<description>Sets the type of database file that is used to
-store passwords</description>
-<syntax>AuthzDBMType default|SDBM|GDBM|NDBM|DB</syntax>
-<default>AuthzDBMType default</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Sets the type of database file that is used to store the passwords.
- The default database type is determined at compile time. The
- availability of other types of database files also depends on
- <a href="../install.html#dbm">compile-time settings</a>.</p>
-
- <p>It is crucial that whatever program you use to create your password
- files is configured to use the same type of database.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzDBMAuthoritative</name>
-<description>Sets whether authorization will be passed on to lower level
-modules</description>
-<syntax>AuthzDBMAuthoritative On|Off</syntax>
-<default>AuthzDBMAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthzDBMAuthoritative</directive>
- directive explicitly to <code>Off</code> allows group authorization
- to be passed on to lower level modules (as defined in the
- <code>modules.c</code> file) if there is no group found
- for the the supplied userID. If there are any groups
- specified, the usual checks will be applied and a failure will
- give an Authentication Required reply.</p>
-
- <p>So if a userID appears in the database of more than one module;
- or if a valid <directive module="core">Require</directive>
- directive applies to more than one module; then the first module
- will verify the credentials; and no access is passed on;
- regardless of the <directive>AuthAuthoritative</directive> setting.</p>
-
- <p>A common use for this is in conjunction with one of the
- auth providers; such as <module>mod_authn_dbm</module> or
- <module>mod_authn_file</module>. Whereas this DBM module supplies
- the bulk of the user credential checking; a few (administrator) related
- accesses fall through to a lower level with a well protected
- <code>.htpasswd</code> file.</p>
-
- <p>By default, control is not passed on and an unknown group
- will result in an Authentication Required reply. Not
- setting it thus keeps the system secure and forces an NCSA
- compliant behaviour.</p>
-
- <note type="warning"><title>Security</title>
- <p>Do consider the implications of allowing a user to
- allow fall-through in his .htaccess file; and verify that this
- is really what you want; Generally it is easier to just secure
- a single <code>.htpasswd</code> file, than it is to secure a
- database which might have more access interfaces.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_dbm.xml.ko b/docs/manual/mod/mod_authz_dbm.xml.ko
deleted file mode 100644
index e644bc3ffa..0000000000
--- a/docs/manual/mod/mod_authz_dbm.xml.ko
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_dbm.xml.meta">
-
-<name>mod_authz_dbm</name>
-<description>DBM ÆÄÀÏÀ» »ç¿ëÇÑ ±×·ì ÀÎÁõ</description>
-<status>Extension</status>
-<sourcefile>mod_authz_dbm.c</sourcefile>
-<identifier>authz_dbm_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ÀÎÁõÇÑ »ç¿ëÀÚÀÇ ±×·ì±ÇÇÑÀ¸·Î À¥ÀÇ ÀϺθ¦ Á¢±ÙÇÒ
- ¼ö ÀÖ´ÂÁö °áÁ¤ÇÏ¿© ±ÇÇѺο©¸¦ ÇÑ´Ù.
- <module>mod_authz_groupfile</module>°ú ±â´ÉÀÌ ºñ½ÁÇÏ´Ù.</p>
-</summary>
-
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthDBMGroupFile</name>
-<description>ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º
-ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthDBMGroupFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthDBMGroupFile</directive> Áö½Ã¾î´Â ÀÎÁõ¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â DBM ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.
- <var>File-path</var>´Â ÆÄÀÏÀÇ Àý´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>ÆÄÀÏÀº »ç¿ëÀÚ¸íÀ» Å°·Î »ç¿ëÇÑ´Ù. »ç¿ëÀÚ¿¡ ´ëÇÑ °ªÀº ½°Ç¥·Î
- ±¸ºÐÇÑ »ç¿ëÀÚ°¡ ¼ÓÇÑ ±×·ì ¸ñ·ÏÀÌ´Ù. °ª¿¡ °ø¹éÀ̳ª ÄÝ·ÐÀ»
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <note type="warning"><title>º¸¾È</title>
- <p><directive>AuthDBMGroupFile</directive>ÀÌ À¥¼­¹öÀÇ
- ¹®¼­µé ¹Û¿¡ À§Ä¡ÇÔÀ» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮
- ¾È¿¡ °°ÀÌ µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <directive>AuthDBMGroupFile</directive>¸¦ ´Ù¿î·ÎµåÇÒ ¼ö
- ÀÖ´Ù.</p>
- </note>
-
- <p>±×·ì DBM ÆÄÀÏ°ú ¾ÏÈ£ DBM ÆÄÀÏÀ» °°ÀÌ »ç¿ëÇϱâ: »ç¿ëÀÚ¿¡
- ´ëÇÑ ¾ÏÈ£¿Í ±×·ì Á¤º¸ ¸ðµÎ¸¦ ÇÑ µ¥ÀÌÅͺ£À̽º¿¡¼­ °ü¸®ÇÏ´Â
- °ÍÀÌ ½¬¿ï¶§°¡ ÀÖ´Ù. ÀÌ °æ¿ì ÀÛ¼ºÇÒ Áö¿ø ÇÁ·Î±×·¥ÀÌ °£´ÜÇØÁø´Ù.
- ÇÁ·Î±×·¥Àº ÇÑ DBM ÆÄÀϸ¸À» Àá±×°í ¾²¸é µÈ´Ù. ±×·ìÆÄÀÏ°ú
- ¾ÏÈ£ÆÄÀÏÀ» °°Àº DBMÆÄÀÏ·Î ¼³Á¤ÇÏ¸é °¡´ÉÇÏ´Ù:</p>
-
- <example>
- AuthDBMGroupFile /www/userbase<br />
- AuthDBMUserFile /www/userbase
- </example>
-
- <p>ÀÌ ÅëÇÕ DBMÀÇ Å°´Â »ç¿ëÀÚ¸íÀÌ´Ù. °ªÀº ´ÙÀ½°ú °°´Ù</p>
-
- <example>
- ÀÎÄÚµùµÈ ¾ÏÈ£ : ±×·ì ¸ñ·Ï [ : (¹«½Ã) ]
- </example>
-
- <p>¾ÏÈ£ ºÎºÐÀº Àü°ú °°ÀÌ ÀÎÄÚµùµÈ ¾ÏÈ£ÀÌ´Ù. ÄÝ·Ð µÚ¿¡ ½°Ç¥·Î
- ±¸ºÐÇÑ ±×·ì ¸ñ·ÏÀÌ ³ª¿Â´Ù. ¶Ç ´Ù½Ã ÄÝ·Ð ´ÙÀ½¿¡ ´Ù¸¥ Á¤º¸¸¦
- ±â·ÏÇÒ ¼ö ÀÖ´Ù. ÀÌ ºÎºÐÀº ÀÎÁõ¸ðµâÀÌ ¹«½ÃÇÑ´Ù.
- www.telescope.org´Â ÀÌ·¸°Ô ¾ÏÈ£ µ¥ÀÌÅͺ£À̽º¿Í ±×·ì
- µ¥ÀÌÅͺ£À̽º¸¦ °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzDBMType</name>
-<description>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthzDBMType default|SDBM|GDBM|NDBM|DB</syntax>
-<default>AuthzDBMType default</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù.
- µ¥ÀÌÅͺ£À̽º Á¾·ù ±âº»°ªÀº ÄÄÆÄÀ϶§ Á¤ÇØÁø´Ù. »ç¿ëÇÒ ¼ö
- ÀÖ´Â ´Ù¸¥ µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ùµµ <a
- href="../install.html#dbm">ÄÄÆÄÀÏ ¼³Á¤</a>¿¡ ´Þ·È´Ù.</p>
-
- <p>¾ÏÈ£ÆÄÀÏÀ» ¸¸µç ÇÁ·Î±×·¥ÀÌ °°Àº Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽º¸¦
- »ç¿ëÇϵµ·Ï ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzDBMAuthoritative</name>
-<description>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</description>
-<syntax>AuthzDBMAuthoritative On|Off</syntax>
-<default>AuthzDBMAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzDBMAuthoritative</directive> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé ÇØ´ç »ç¿ëÀÚ ¾ÆÀ̵𿡠´ëÇÑ
- ±×·ìÀÌ ¾ø´Â °æ¿ì ±×·ì ±ÇÇѺο©¸¦ (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁØ´Ù. ÁöÁ¤ÇÑ ±×·ìÀÌ ÀÖ´Ù¸é
- º¸Å붧¿Í °°ÀÌ °Ë»çÇÏ°í, ½ÇÆÐÇϸé ÀÎÁõ ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù.</p>
-
- <p>±×·¡¼­ ¿©·¯ ¸ðµâÀÇ µ¥ÀÌÅͺ£À̽º¿¡ »ç¿ëÀÚ ¾ÆÀ̵𰡠Àְųª
- À¯È¿ÇÑ <directive module="core">Require</directive> Áö½Ã¾î¸¦
- ¿©·¯ ¸ðµâ¿¡ Àû¿ëÇϸé, ù¹ø° ¸ðµâÀÌ »ç¿ëÀÚ¸¦ °Ë»çÇÏ°í,
- <directive>AuthAuthoritative</directive> ¼³Á¤°ú °ü°è¾øÀÌ
- Á¢±ÙÀ» ³Ñ±âÁö¾Ê´Â´Ù.</p>
-
- <p>ÀϹÝÀûÀ¸·Î <module>mod_authn_dbm</module>À̳ª
- <module>mod_authn_file</module>°ú °°Àº ÀÎÁõÁ¦°øÀÚ¿Í °°ÀÌ
- »ç¿ëÇÑ´Ù. ´ë·®ÀÇ »ç¿ëÀÚ °Ë»ç¿¡ ´ëÇÑ °Ë»ç´Â DBM ¸ðµâÀ»
- »ç¿ëÇÏÁö¸¸, ¼Ò¼ö(°ü¸®ÀÚ)¿¡ ´ëÇÑ °Ë»ç´Â Àß º¸È£µÈ
- <code>.htpasswd</code> ÆÄÀÏ·Î ³Ñ±ä´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â ±×·ìÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ ¼³Á¤ÇÏÁö¾ÊÀ¸¸é ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô
- À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
- <note type="warning"><title>º¸¾È</title>
- <p>»ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ .htaccess ÆÄÀÏÀ» »ç¿ëÇÏ°Ô µÇ´ÂÁö »ìÆ캸°í,
- ÀÌ·± ÇൿÀ» Çã¿ëÇÒÁö °áÁ¤Ç϶ó. ÀϹÝÀûÀ¸·Î ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î
- Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͺ£À̽º¸¦ º¸È£ÇÏ´Â °Íº¸´Ù ÇϳªÀÇ
- <code>.htpasswd</code> ÆÄÀÏÀ» º¸È£ÇÏ´Â °ÍÀÌ ´õ ½±´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_dbm.xml.meta b/docs/manual/mod/mod_authz_dbm.xml.meta
deleted file mode 100644
index 60a80ebcbb..0000000000
--- a/docs/manual/mod/mod_authz_dbm.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authz_dbm</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authz_default.html b/docs/manual/mod/mod_authz_default.html
deleted file mode 100644
index 612b1b6899..0000000000
--- a/docs/manual/mod/mod_authz_default.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authz_default.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authz_default.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authz_default.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authz_default.html.en b/docs/manual/mod/mod_authz_default.html.en
deleted file mode 100644
index 3bb03a7912..0000000000
--- a/docs/manual/mod/mod_authz_default.html.en
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_default - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authz_default</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_default.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Authorization fallback module</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authz_default_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authz_default.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module is designed to be the fallback module, if you don't
- have configured an authorization module like
- <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code> or <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>.
- It simply rejects any authorization request.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDefaultAuthoritative" id="AuthzDefaultAuthoritative">AuthzDefaultAuthoritative</a> <a name="authzdefaultauthoritative" id="authzdefaultauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization is passed to lower level
-modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzDefaultAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzDefaultAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_default</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthzDefaultAuthoritative</code> directive
- explicitly to <code>Off</code> allows for authorization to be passed on
- to lower level modules (as defined in the <code>modules.c</code>
- files).</p>
-
- <div class="note"><h3>Note</h3>
- <p>Normally there are no lower level modules, since
- <code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code> is defined to be already on
- a <em>very low</em> level. Therefore you should leave the value of
- <code class="directive">AuthzDefaultAuthoritative</code> as default
- (<code>On</code>).</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_default.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_default.html.ja.euc-jp b/docs/manual/mod/mod_authz_default.html.ja.euc-jp
deleted file mode 100644
index fee02cbe23..0000000000
--- a/docs/manual/mod/mod_authz_default.html.ja.euc-jp
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_default - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authz_default</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_default.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¾µÇ§¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¥â¥¸¥å¡¼¥ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authz_default_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authz_default.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code> ¤ä
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> ¤È¤¤¤Ã¤¿¾µÇ§¥â¥¸¥å¡¼¥ë¤ò
- ÀßÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Î¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¥â¥¸¥å¡¼¥ë¤È¤·¤ÆÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤É¤Î¤è¤¦¤Ê¾µÇ§¥ê¥¯¥¨¥¹¥È¤âñ¤ËµñÈݤ·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDefaultAuthoritative" id="AuthzDefaultAuthoritative">AuthzDefaultAuthoritative</a> <a name="authzdefaultauthoritative" id="authzdefaultauthoritative">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¾µÇ§¤¬Äã°Ì¤Î¥â¥¸¥å¡¼¥ë¤ËÅϤµ¤ì¤ë¤«¤É¤¦¤«¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthzDefaultAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AuthzDefaultAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authz_default</td></tr>
-</table>
- <p><code class="directive">AuthzDefaultAuthoritative</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ÌÀ¼¨Åª¤Ë <code>Off</code> ¤ËÀßÄꤹ¤ë¤È
- ǧ¾Ú¤ò¼¡¤Î (<code>modules.c</code> ¥Õ¥¡¥¤¥ë¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë)
- Äã°Ì¤Î¥â¥¸¥å¡¼¥ë¤ËÅϤ¹¤³¤È¤òµö²Ä¤·¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code> ¼«ÂΤ¬<em>¤È¤Æ¤âÄ㤤</em>
- ¥ì¥Ù¥ë¤È¤·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢Ä̾ï¤Ï¤³¤ì¤è¤ê¤âÄ㼡¤Î
- ¥â¥¸¥å¡¼¥ë¤Ï¸ºß¤·¤Þ¤»¤ó¡£¤Ç¤¹¤«¤é
- <code class="directive">AuthDefaultAuthoritative</code> ¤Ï¥Ç¥Õ¥©¥ë¥È
- (<code>On</code>) ¤Î¤Þ¤Þ¤Ë¤·¤¿¤Û¤¦¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_default.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_default.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_default.html.ko.euc-kr b/docs/manual/mod/mod_authz_default.html.ko.euc-kr
deleted file mode 100644
index 4a03c6f76b..0000000000
--- a/docs/manual/mod/mod_authz_default.html.ko.euc-kr
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_default - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authz_default</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_default.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÃÖÈÄ ±ÇÇѺο©¸ðµâ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authz_default_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authz_default.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code>³ª
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>¿Í °°Àº ±ÇÇѺο©¸ðµâÀ»
- ¼³Á¤ÇÏÁö¾ÊÀº ÃÖÈÄÀÇ °æ¿ì ´ë½Å »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº ¸ðµç ±ÇÇѺο©
- ¿äûÀ» °ÅºÎÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzdefaultauthoritative">AuthzDefaultAuthoritative</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzDefaultAuthoritative" id="AuthzDefaultAuthoritative">AuthzDefaultAuthoritative</a> <a name="authzdefaultauthoritative" id="authzdefaultauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthzDefaultAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthzDefaultAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_default</td></tr>
-</table>
- <p><code class="directive">AuthzDefaultAuthoritative</code> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ±ÇÇѺο©¸¦ ³Ñ°ÜÁØ´Ù.</p>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p><code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code>°¡ ÀÌ¹Ì <em>¸Å¿ì
- Àú¼öÁØ</em>À¸·Î Á¤ÀǵÇÀֱ⠶§¹®¿¡ º¸Åë ´õ ³·Àº ¸ðµâÀÌ
- ¾ø´Ù. ±×·¯¹Ç·Î
- <code class="directive">AuthzDefaultAuthoritative</code>¸¦
- ±âº»°ª(<code>On</code>)À¸·Î ³²°ÜµÖ¾ß ÇÑ´Ù.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_default.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_default.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_default.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_default.xml b/docs/manual/mod/mod_authz_default.xml
deleted file mode 100644
index ade8b368f2..0000000000
--- a/docs/manual/mod/mod_authz_default.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_default.xml.meta">
-
-<name>mod_authz_default</name>
-<description>Authorization fallback module</description>
-<status>Base</status>
-<sourcefile>mod_authz_default.c</sourcefile>
-<identifier>authz_default_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module is designed to be the fallback module, if you don't
- have configured an authorization module like
- <module>mod_authz_user</module> or <module>mod_authz_groupfile</module>.
- It simply rejects any authorization request.</p>
-</summary>
-
-<directivesynopsis>
-<name>AuthzDefaultAuthoritative</name>
-<description>Sets whether authorization is passed to lower level
-modules</description>
-<syntax>AuthzDefaultAuthoritative On|Off</syntax>
-<default>AuthzDefaultAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthzDefaultAuthoritative</directive> directive
- explicitly to <code>Off</code> allows for authorization to be passed on
- to lower level modules (as defined in the <code>modules.c</code>
- files).</p>
-
- <note><title>Note</title>
- <p>Normally there are no lower level modules, since
- <module>mod_authz_default</module> is defined to be already on
- a <em>very low</em> level. Therefore you should leave the value of
- <directive>AuthzDefaultAuthoritative</directive> as default
- (<code>On</code>).</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_default.xml.ja b/docs/manual/mod/mod_authz_default.xml.ja
deleted file mode 100644
index c8346bf615..0000000000
--- a/docs/manual/mod/mod_authz_default.xml.ja
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_default.xml.meta">
-<!-- English revision: 1.5 -->
-
-<name>mod_authz_default</name>
-<description>$B>5G'%U%)!<%k%P%C%/%b%8%e!<%k(B</description>
-<status>Base</status>
-<sourcefile>mod_authz_default.c</sourcefile>
-<identifier>authz_default_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O(B <module>mod_authz_user</module> $B$d(B
- <module>mod_authz_groupfile</module> $B$H$$$C$?>5G'%b%8%e!<%k$r(B
- $B@_Dj$7$J$+$C$?>l9g$N%U%)!<%k%P%C%/%b%8%e!<%k$H$7$F@_7W$5$l$F$$$^$9!#(B
- $B$I$N$h$&$J>5G'%j%/%(%9%H$bC1$K5qH]$7$^$9!#(B</p>
-</summary>
-
-<directivesynopsis>
-<name>AuthzDefaultAuthoritative</name>
-<description>$B>5G'$,Dc0L$N%b%8%e!<%k$KEO$5$l$k$+$I$&$+$r@_Dj$9$k(B</description>
-<syntax>AuthzDefaultAuthoritative On|Off</syntax>
-<default>AuthzDefaultAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzDefaultAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
- $BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H(B
- $BG'>Z$r<!$N(B (<code>modules.c</code> $B%U%!%$%k$GDj5A$5$l$F$$$k(B)
- $BDc0L$N%b%8%e!<%k$KEO$9$3$H$r5v2D$7$^$9!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><module>mod_authz_default</module> $B<+BN$,(B<em>$B$H$F$bDc$$(B</em>
- $B%l%Y%k$H$7$FDj5A$5$l$F$$$^$9$N$G!"DL>o$O$3$l$h$j$bDc<!$N(B
- $B%b%8%e!<%k$OB8:_$7$^$;$s!#$G$9$+$i(B
- <directive>AuthDefaultAuthoritative</directive> $B$O%G%U%)%k%H(B
- (<code>On</code>) $B$N$^$^$K$7$?$[$&$,NI$$$G$7$g$&!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_default.xml.ko b/docs/manual/mod/mod_authz_default.xml.ko
deleted file mode 100644
index 4d86685655..0000000000
--- a/docs/manual/mod/mod_authz_default.xml.ko
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_default.xml.meta">
-
-<name>mod_authz_default</name>
-<description>ÃÖÈÄ ±ÇÇѺο©¸ðµâ</description>
-<status>Base</status>
-<sourcefile>mod_authz_default.c</sourcefile>
-<identifier>authz_default_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <module>mod_authz_user</module>³ª
- <module>mod_authz_groupfile</module>¿Í °°Àº ±ÇÇѺο©¸ðµâÀ»
- ¼³Á¤ÇÏÁö¾ÊÀº ÃÖÈÄÀÇ °æ¿ì ´ë½Å »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº ¸ðµç ±ÇÇѺο©
- ¿äûÀ» °ÅºÎÇÑ´Ù.</p>
-</summary>
-
-<directivesynopsis>
-<name>AuthzDefaultAuthoritative</name>
-<description>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</description>
-<syntax>AuthzDefaultAuthoritative On|Off</syntax>
-<default>AuthzDefaultAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzDefaultAuthoritative</directive> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ±ÇÇѺο©¸¦ ³Ñ°ÜÁØ´Ù.</p>
-
- <note><title>ÁÖÀÇ</title>
- <p><module>mod_authz_default</module>°¡ ÀÌ¹Ì <em>¸Å¿ì
- Àú¼öÁØ</em>À¸·Î Á¤ÀǵÇÀֱ⠶§¹®¿¡ º¸Åë ´õ ³·Àº ¸ðµâÀÌ
- ¾ø´Ù. ±×·¯¹Ç·Î
- <directive>AuthzDefaultAuthoritative</directive>¸¦
- ±âº»°ª(<code>On</code>)À¸·Î ³²°ÜµÖ¾ß ÇÑ´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_default.xml.meta b/docs/manual/mod/mod_authz_default.xml.meta
deleted file mode 100644
index ca7213c64d..0000000000
--- a/docs/manual/mod/mod_authz_default.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authz_default</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authz_groupfile.html b/docs/manual/mod/mod_authz_groupfile.html
deleted file mode 100644
index eae1ea3510..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authz_groupfile.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authz_groupfile.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authz_groupfile.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authz_groupfile.html.en b/docs/manual/mod/mod_authz_groupfile.html.en
deleted file mode 100644
index fe78313cfb..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.html.en
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_groupfile - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authz_groupfile</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_groupfile.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_groupfile.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_groupfile.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Group authorization using plaintext files</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authz_groupfile_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authz_groupfile.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides authorization capabilities so that
- authenticated users can be allowed or denied access to portions
- of the web site by group membership. Similar functionality is
- provided by <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authgroupfile">AuthGroupFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile" id="authgroupfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of a text file containing the list
-of user groups for authentication</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthGroupFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_groupfile</td></tr>
-</table>
- <p>The <code class="directive">AuthGroupFile</code> directive sets the
- name of a textual file containing the list of user groups for user
- authentication. <var>File-path</var> is the path to the group
- file. If it is not absolute, it is treated as relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
-
- <p>Each line of the group file contains a groupname followed by a
- colon, followed by the member usernames separated by spaces.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- mygroup: bob joe anne
- </code></p></div>
-
- <p>Note that searching large text files is <em>very</em>
- inefficient; <code class="directive"><a href="../mod/mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code> provides a much better performance.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Make sure that the <code class="directive">AuthGroupFile</code> is
- stored outside the document tree of the web-server; do <em>not</em>
- put it in the directory that it protects. Otherwise, clients may
- be able to download the <code class="directive">AuthGroupFile</code>.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzGroupFileAuthoritative" id="AuthzGroupFileAuthoritative">AuthzGroupFileAuthoritative</a> <a name="authzgroupfileauthoritative" id="authzgroupfileauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzGroupFileAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzGroupFileAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_groupfile</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthzGroupFileAuthoritative</code>
- directive explicitly to <code>Off</code> allows for
- group authorization to be passed on to lower level modules (as defined
- in the <code>modules.c</code> files) if there is <strong>no
- group</strong> matching the supplied userID.</p>
-
- <p>By default, control is not passed on and an unknown group
- will result in an Authentication Required reply. Not
- setting it thus keeps the system secure and forces an NCSA
- compliant behaviour.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Do consider the implications of allowing a user to
- allow fall-through in his <code>.htaccess</code> file; and verify
- that this is really what you want; Generally it is easier to just
- secure a single <code>.htpasswd</code> file, than it is to secure
- a database which might have more access interfaces.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_groupfile.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_groupfile.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_groupfile.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_groupfile.html.ja.euc-jp b/docs/manual/mod/mod_authz_groupfile.html.ja.euc-jp
deleted file mode 100644
index 2ce8774a1f..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.html.ja.euc-jp
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_groupfile - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authz_groupfile</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_groupfile.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_groupfile.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_groupfile.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥×¥ì¡¼¥ó¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÍѤ¤¤¿¥°¥ë¡¼¥×¾µÇ§</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authz_groupfile_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authz_groupfile.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ïǧ¾Ú¤µ¤ì¤¿¥æ¡¼¥¶¤¬¥°¥ë¡¼¥×¤Î¥á¥ó¥Ð¡¼¤«
- Èݤ«¤Ë¤è¤Ã¤Æ¥¦¥§¥Ö¥µ¥¤¥È¤Î°ìÉô¤Ø¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë¤«µñÈݤ¹¤ë¤«¤Î
- ¾µÇ§µ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£Æ±Íͤε¡Ç½¤Ï <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>
- ¤Ë¤è¤Ã¤Æ¤âÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authgroupfile">AuthGroupFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile" id="authgroupfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ǧ¾Ú¤Ë»ÈÍѤ¹¤ë¥æ¡¼¥¶¥°¥ë¡¼¥×¤Î°ìÍ÷¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¡¢
-¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthGroupFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authz_groupfile</td></tr>
-</table>
- <p><code class="directive">AuthGroupFile</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ǧ¾Ú¤Ë»ÈÍѤ¹¤ë¥æ¡¼¥¶¥°¥ë¡¼¥×¤Î°ìÍ÷¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¡¢
- ¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤷ¤Þ¤¹¡£
- <var>file-path</var> ¤Ï¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹¤Ç¤¹¡£
- ÀäÂХѥ¹¤Ç¤Ê¤±¤ì¤Ð¡¢
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <p>¥°¥ë¡¼¥×¥Õ¥¡¥¤¥ë³Æ¹Ô¤Ï¡¢¥°¥ë¡¼¥×̾¡¢¥³¥í¥ó¡¢¤½¤·¤Æ
- ¥¹¥Ú¡¼¥¹¶èÀÚ¤ê¤Ç¤½¤Î¥á¥ó¥Ð¡¼¤Î¥æ¡¼¥¶Ì¾¤òµ­½Ò¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã:</h3><p><code>
- mygroup: bob joe anne
- </code></p></div>
-
- <p>Â礭¤Ê¥Õ¥¡¥¤¥ë¤òõº÷¤¹¤ë¤Î¤Ï¡¢<em>Èó¾ï¤Ë</em>¸úΨ¤¬°­¤¤¤È¤¤¤¦ÅÀ¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code>
- ¤ÎÊý¤¬¤º¤Ã¤ÈÎɤ¤À­Ç½¤òȯ´ø¤·¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p><code class="directive">AuthGroupFile</code> ¤Ï¡¢
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Î³°Â¦¤Ë
- Êݴɤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- Êݸ¤è¤¦¤È¤·¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë¤Ï¡¢<em>ÃÖ¤«¤Ê¤¤¤Ç²¼¤µ¤¤</em>¡£
- ¤½¤¦¤·¤Ê¤¤¤È¥¯¥é¥¤¥¢¥ó¥È¤¬ <code class="directive">AuthGroupFile</code> ¤ò
- ¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzGroupFileAuthoritative" id="AuthzGroupFileAuthoritative">AuthzGroupFileAuthoritative</a> <a name="authzgroupfileauthoritative" id="authzgroupfileauthoritative">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¾µÇ§¤¬²¼°Ì¤Î¥â¥¸¥å¡¼¥ë¤ËÅϤµ¤ì¤ë¤«¤É¤¦¤«¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AuthzGroupFileAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AuthzGroupFileAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authz_groupfile</td></tr>
-</table>
- <p><code class="directive">AuthzGroupFileAuthoritative</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ÌÀ¼¨Åª¤Ë <code>Off</code> ¤ËÀßÄꤹ¤ë¤È userID ¤ËÂбþ¤¹¤ë
- <strong>¥°¥ë¡¼¥×¤¬¤Ê¤¤¾ì¹ç¤Ë</strong>¡¢
- (<code>module.c</code> ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë) ²¼°Ì¤Î¥â¥¸¥å¡¼¥ë¤Ë¥°¥ë¡¼¥×¾µÇ§¤ò
- ÅϤ¹¤³¤È¤òµö²Ä¤·¤Þ¤¹¡£</p>
-
-
- <p>¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÀ©¸æ¤ÏÅϤµ¤ì¤º¡¢Ì¤ÃΤΥ°¥ë¡¼¥×¤Î¾ì¹ç¤Ï Authentication
- Required ±þÅú¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¤³¤ì¤òÀßÄꤷ¤Ê¤¤¤È
- ¥·¥¹¥Æ¥à¤ò°ÂÁ´¤ËÊݤĤ³¤È¤¬¤Ç¤­¡¢NCSA ¸ß´¹¤Î¿¶¤ëÉñ¤¤¤ò¤µ¤»¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p>¥æ¡¼¥¶¤Î <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¾¤Î¾µÇ§¼êÃʤؤÎ
- °Ñ¾ù¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤Î°ÕÌ£¤¹¤ë¤È¤³¤í¤Ï½½Ê¬¤Ë¹Íθ¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£
- ¤½¤·¤Æ¤½¤ì¤¬¡¢ËÜÅö¤Ë˾¤àµóÆ°¤Ç¤¢¤ë¤³¤È¤ò³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡£
- Ä̾ï¤Ï°ì¤Ä¤Î <code>.htpasswd</code> ¥Õ¥¡¥¤¥ë¤ò°ÂÁ´¤Ë¤¹¤ëÊý¤¬
- ¤è¤ê¿¤¯¤Î¥¢¥¯¥»¥¹¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»ý¤Ä¤«¤â¤·¤ì¤Ê¤¤¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò
- °ÂÁ´¤Ë¤¹¤ë¤è¤ê¤â´Êñ¤Ç¤¹¡£</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_groupfile.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_groupfile.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_groupfile.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_groupfile.html.ko.euc-kr b/docs/manual/mod/mod_authz_groupfile.html.ko.euc-kr
deleted file mode 100644
index e7b2dc28ab..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.html.ko.euc-kr
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_groupfile - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authz_groupfile</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_groupfile.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_groupfile.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_groupfile.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÀÏ¹Ý ¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ ±×·ì ±ÇÇѺο©</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authz_groupfile_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authz_groupfile.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ÀÎÁõÇÑ »ç¿ëÀÚÀÇ ±×·ì±ÇÇÑÀ¸·Î À¥»çÀÌÆ®ÀÇ ÀϺθ¦
- Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö °áÁ¤ÇÏ¿© ±ÇÇѺο©¸¦ ÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>°ú ±â´ÉÀÌ ºñ½ÁÇÏ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authgroupfile">AuthGroupFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#authzgroupfileauthoritative">AuthzGroupFileAuthoritative</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthGroupFile" id="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile" id="authgroupfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthGroupFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_groupfile</td></tr>
-</table>
- <p><code class="directive">AuthGroupFile</code> Áö½Ã¾î´Â »ç¿ëÀÚ
- ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
- ÁöÁ¤ÇÑ´Ù. <var>File-path</var>´Â ±×·ìÆÄÀÏ °æ·ÎÀÌ´Ù. Àý´ë°æ·Î¸¦
- »ç¿ëÇÏÁö ¾ÊÀ¸¸é <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>ÀÇ »ó´ë°æ·Î·Î ¹Þ¾ÆµéÀδÙ.</p>
-
- <p>±×·ìÆÄÀÏÀÇ °¢ ÁÙ¿¡´Â ±×·ì¸í, ÄÝ·Ð, °ø¹éÀ¸·Î ±¸ºÐÇÑ
- »ç¿ëÀÚ¸íµéÀÌ ¼ø¼­´ë·Î ³ª¿Â´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- mygroup: bob joe anne
- </code></p></div>
-
- <p>¸¹Àº ±×·ìÀ» ÀúÀåÇÑ Å« ¹®ÀÚÆÄÀÏÀ» °Ë»öÇÏ´Â °ÍÀº <em>¸Å¿ì</em>
- ºñÈ¿À²ÀûÀÓÀ» ÁÖÀÇÇ϶ó. <code class="directive"><a href="../mod/mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code>ÀÌ ´õ ¼º´ÉÀÌ ÁÁ´Ù.</p>
-
- <div class="warning"><h3>º¸¾È</h3>
- <p><code class="directive">AuthGroupFile</code>ÀÌ À¥¼­¹öÀÇ ¹®¼­µé
- ¹Û¿¡ À§Ä¡ÇÔÀ» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮 ¾È¿¡
- °°ÀÌ µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <code class="directive">AuthGroupFile</code>À» ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzGroupFileAuthoritative" id="AuthzGroupFileAuthoritative">AuthzGroupFileAuthoritative</a> <a name="authzgroupfileauthoritative" id="authzgroupfileauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthzGroupFileAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthzGroupFileAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_groupfile</td></tr>
-</table>
- <p><code class="directive">AuthzGroupFileAuthoritative</code> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé ÇØ´ç »ç¿ëÀÚ ¾ÆÀ̵𿡠´ëÇÑ
- <strong>±×·ìÀÌ ¾ø´Â</strong> °æ¿ì ±×·ì ±ÇÇѺο©¸¦
- (<code>modules.c</code> ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î
- ³Ñ°ÜÁØ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â ±×·ìÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ ¼³Á¤ÇÏÁö¾ÊÀ¸¸é ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô
- À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
- <div class="warning"><h3>º¸¾È</h3>
- <p>»ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ .htaccess ÆÄÀÏÀ» »ç¿ëÇÏ°Ô µÇ´ÂÁö »ìÆ캸°í,
- ÀÌ·± ÇൿÀ» Çã¿ëÇÒÁö °áÁ¤Ç϶ó. ÀϹÝÀûÀ¸·Î ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î
- Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͺ£À̽º¸¦ º¸È£ÇÏ´Â °Íº¸´Ù ÇϳªÀÇ
- <code>.htpasswd</code> ÆÄÀÏÀ» º¸È£ÇÏ´Â °ÍÀÌ ´õ ½±´Ù.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_groupfile.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_groupfile.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_groupfile.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_groupfile.xml b/docs/manual/mod/mod_authz_groupfile.xml
deleted file mode 100644
index f8c29799db..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_groupfile.xml.meta">
-
-<name>mod_authz_groupfile</name>
-<description>Group authorization using plaintext files</description>
-<status>Base</status>
-<sourcefile>mod_authz_groupfile.c</sourcefile>
-<identifier>authz_groupfile_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module provides authorization capabilities so that
- authenticated users can be allowed or denied access to portions
- of the web site by group membership. Similar functionality is
- provided by <module>mod_authz_dbm</module>.</p>
-</summary>
-
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthGroupFile</name>
-<description>Sets the name of a text file containing the list
-of user groups for authentication</description>
-<syntax>AuthGroupFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>The <directive>AuthGroupFile</directive> directive sets the
- name of a textual file containing the list of user groups for user
- authentication. <var>File-path</var> is the path to the group
- file. If it is not absolute, it is treated as relative to the <directive
- module="core">ServerRoot</directive>.</p>
-
- <p>Each line of the group file contains a groupname followed by a
- colon, followed by the member usernames separated by spaces.</p>
-
- <example><title>Example:</title>
- mygroup: bob joe anne
- </example>
-
- <p>Note that searching large text files is <em>very</em>
- inefficient; <directive module="mod_authz_dbm"
- >AuthDBMGroupFile</directive> provides a much better performance.</p>
-
- <note type="warning"><title>Security</title>
- <p>Make sure that the <directive>AuthGroupFile</directive> is
- stored outside the document tree of the web-server; do <em>not</em>
- put it in the directory that it protects. Otherwise, clients may
- be able to download the <directive>AuthGroupFile</directive>.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzGroupFileAuthoritative</name>
-<description>Sets whether authorization will be passed on to lower level
-modules</description>
-<syntax>AuthzGroupFileAuthoritative On|Off</syntax>
-<default>AuthzGroupFileAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthzGroupFileAuthoritative</directive>
- directive explicitly to <code>Off</code> allows for
- group authorization to be passed on to lower level modules (as defined
- in the <code>modules.c</code> files) if there is <strong>no
- group</strong> matching the supplied userID.</p>
-
- <p>By default, control is not passed on and an unknown group
- will result in an Authentication Required reply. Not
- setting it thus keeps the system secure and forces an NCSA
- compliant behaviour.</p>
-
- <note type="warning"><title>Security</title>
- <p>Do consider the implications of allowing a user to
- allow fall-through in his <code>.htaccess</code> file; and verify
- that this is really what you want; Generally it is easier to just
- secure a single <code>.htpasswd</code> file, than it is to secure
- a database which might have more access interfaces.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_groupfile.xml.ja b/docs/manual/mod/mod_authz_groupfile.xml.ja
deleted file mode 100644
index 619bda60c4..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.xml.ja
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_groupfile.xml.meta">
-<!-- English Revision: 1.8 -->
-
-<name>mod_authz_groupfile</name>
-<description>$B%W%l!<%s%F%-%9%H%U%!%$%k$rMQ$$$?%0%k!<%W>5G'(B</description>
-<status>Base</status>
-<sourcefile>mod_authz_groupfile.c</sourcefile>
-<identifier>authz_groupfile_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$OG'>Z$5$l$?%f!<%6$,%0%k!<%W$N%a%s%P!<$+(B
- $BH]$+$K$h$C$F%&%'%V%5%$%H$N0lIt$X$N%"%/%;%9$r5v2D$9$k$+5qH]$9$k$+$N(B
- $B>5G'5!G=$rDs6!$7$^$9!#F1MM$N5!G=$O(B <module>mod_authz_dbm</module>
- $B$K$h$C$F$bDs6!$5$l$F$$$^$9!#(B</p>
-</summary>
-
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthGroupFile</name>
-<description>$BG'>Z$K;HMQ$9$k%f!<%6%0%k!<%W$N0lMw$,3JG<$5$l$F$$$k!"(B
-$B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$9$k(B</description>
-<syntax>AuthGroupFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthGroupFile</directive> $B%G%#%l%/%F%#%V$O!"(B
- $BG'>Z$K;HMQ$9$k%f!<%6%0%k!<%W$N0lMw$,3JG<$5$l$F$$$k!"(B
- $B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B
- <var>file-path</var> $B$O%0%k!<%W%U%!%$%k$X$N%Q%9$G$9!#(B
- $B@dBP%Q%9$G$J$1$l$P!"(B
- <directive module="core">ServerRoot</directive>
- $B$+$i$NAjBP%Q%9$H$7$F07$o$l$^$9!#(B</p>
-
- <p>$B%0%k!<%W%U%!%$%k3F9T$O!"%0%k!<%WL>!"%3%m%s!"$=$7$F(B
- $B%9%Z!<%96h@Z$j$G$=$N%a%s%P!<$N%f!<%6L>$r5-=R$7$^$9!#(B</p>
-
- <example><title>$BNc(B:</title>
- mygroup: bob joe anne
- </example>
-
- <p>$BBg$-$J%U%!%$%k$rC5:w$9$k$N$O!"(B<em>$BHs>o$K(B</em>$B8zN($,0-$$$H$$$&E@$K(B
- $BCm0U$7$F$/$@$5$$!#$=$N$h$&$J>l9g$O!"(B
- <directive module="mod_authz_dbm">AuthDBMGroupFile</directive>
- $B$NJ}$,$:$C$HNI$$@-G=$rH/4x$7$^$9!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p><directive>AuthGroupFile</directive> $B$O!"(B
- $B%&%'%V%5!<%P$N%I%-%e%a%s%H%D%j!<$N30B&$K(B
- $BJ]4I$9$k$h$&$K$7$F$/$@$5$$!#(B
- $BJ]8n$7$h$&$H$7$F$$$k%G%#%l%/%H%j0J2<$K$O!"(B<em>$BCV$+$J$$$G2<$5$$(B</em>$B!#(B
- $B$=$&$7$J$$$H%/%i%$%"%s%H$,(B <directive>AuthGroupFile</directive> $B$r(B
- $B%@%&%s%m!<%I$G$-$F$7$^$&2DG=@-$,$"$j$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzGroupFileAuthoritative</name>
-<description>$B>5G'$,2<0L$N%b%8%e!<%k$KEO$5$l$k$+$I$&$+$r@_Dj$9$k(B</description>
-<syntax>AuthzGroupFileAuthoritative On|Off</syntax>
-<default>AuthzGroupFileAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzGroupFileAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
- $BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H(B userID $B$KBP1~$9$k(B
- <strong>$B%0%k!<%W$,$J$$>l9g$K(B</strong>$B!"(B
- (<code>module.c</code> $B$GDj5A$5$l$F$$$k(B) $B2<0L$N%b%8%e!<%k$K%0%k!<%W>5G'$r(B
- $BEO$9$3$H$r5v2D$7$^$9!#(B</p>
-
-
- <p>$B%G%U%)%k%H$G$O@)8f$OEO$5$l$:!"L$CN$N%0%k!<%W$N>l9g$O(B Authentication
- Required $B1~Ez$,JV$5$l$^$9!#$G$9$+$i!"$3$l$r@_Dj$7$J$$$H(B
- $B%7%9%F%`$r0BA4$KJ]$D$3$H$,$G$-!"(BNCSA $B8_49$N?6$kIq$$$r$5$;$k$3$H$K$J$j$^$9!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p>$B%f!<%6$N(B <code>.htaccess</code> $B%U%!%$%k$GB>$N>5G'<jCJ$X$N(B
- $B0Q>y$,$G$-$k$h$&$K$9$k$3$H$N0UL#$9$k$H$3$m$O==J,$K9MN8$7$F$*$$$F$/$@$5$$!#(B
- $B$=$7$F$=$l$,!"K\Ev$KK>$`5sF0$G$"$k$3$H$r3N$+$a$F$/$@$5$$!#(B
- $BDL>o$O0l$D$N(B <code>.htpasswd</code> $B%U%!%$%k$r0BA4$K$9$kJ}$,(B
- $B$h$jB?$/$N%"%/%;%9%$%s%?%U%'!<%9$r;}$D$+$b$7$l$J$$%G!<%?%Y!<%9$r(B
- $B0BA4$K$9$k$h$j$b4JC1$G$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_groupfile.xml.ko b/docs/manual/mod/mod_authz_groupfile.xml.ko
deleted file mode 100644
index ca5ea59a21..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.xml.ko
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_groupfile.xml.meta">
-
-<name>mod_authz_groupfile</name>
-<description>ÀÏ¹Ý ¹®ÀÚÆÄÀÏÀ» ÀÌ¿ëÇÑ ±×·ì ±ÇÇѺο©</description>
-<status>Base</status>
-<sourcefile>mod_authz_groupfile.c</sourcefile>
-<identifier>authz_groupfile_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ÀÎÁõÇÑ »ç¿ëÀÚÀÇ ±×·ì±ÇÇÑÀ¸·Î À¥»çÀÌÆ®ÀÇ ÀϺθ¦
- Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö °áÁ¤ÇÏ¿© ±ÇÇѺο©¸¦ ÇÑ´Ù.
- <module>mod_authz_dbm</module>°ú ±â´ÉÀÌ ºñ½ÁÇÏ´Ù.</p>
-</summary>
-
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthGroupFile</name>
-<description>ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
-ÁöÁ¤ÇÑ´Ù</description>
-<syntax>AuthGroupFile <var>file-path</var></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthGroupFile</directive> Áö½Ã¾î´Â »ç¿ëÀÚ
- ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
- ÁöÁ¤ÇÑ´Ù. <var>File-path</var>´Â ±×·ìÆÄÀÏ °æ·ÎÀÌ´Ù. Àý´ë°æ·Î¸¦
- »ç¿ëÇÏÁö ¾ÊÀ¸¸é <directive
- module="core">ServerRoot</directive>ÀÇ »ó´ë°æ·Î·Î ¹Þ¾ÆµéÀδÙ.</p>
-
- <p>±×·ìÆÄÀÏÀÇ °¢ ÁÙ¿¡´Â ±×·ì¸í, ÄÝ·Ð, °ø¹éÀ¸·Î ±¸ºÐÇÑ
- »ç¿ëÀÚ¸íµéÀÌ ¼ø¼­´ë·Î ³ª¿Â´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- mygroup: bob joe anne
- </example>
-
- <p>¸¹Àº ±×·ìÀ» ÀúÀåÇÑ Å« ¹®ÀÚÆÄÀÏÀ» °Ë»öÇÏ´Â °ÍÀº <em>¸Å¿ì</em>
- ºñÈ¿À²ÀûÀÓÀ» ÁÖÀÇÇ϶ó. <directive module="mod_authz_dbm"
- >AuthDBMGroupFile</directive>ÀÌ ´õ ¼º´ÉÀÌ ÁÁ´Ù.</p>
-
- <note type="warning"><title>º¸¾È</title>
- <p><directive>AuthGroupFile</directive>ÀÌ À¥¼­¹öÀÇ ¹®¼­µé
- ¹Û¿¡ À§Ä¡ÇÔÀ» È®ÀÎÇ϶ó. ÀÌ ÆÄÀÏÀ» º¸È£ÇÒ µð·ºÅ丮 ¾È¿¡
- °°ÀÌ µÎÁö <em>¸¶¶ó</em>. ±×·¸Áö ¾ÊÀ¸¸é, Ŭ¶óÀ̾ðÆ®°¡
- <directive>AuthGroupFile</directive>À» ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthzGroupFileAuthoritative</name>
-<description>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</description>
-<syntax>AuthzGroupFileAuthoritative On|Off</syntax>
-<default>AuthzGroupFileAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzGroupFileAuthoritative</directive> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé ÇØ´ç »ç¿ëÀÚ ¾ÆÀ̵𿡠´ëÇÑ
- <strong>±×·ìÀÌ ¾ø´Â</strong> °æ¿ì ±×·ì ±ÇÇѺο©¸¦
- (<code>modules.c</code> ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î
- ³Ñ°ÜÁØ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â ±×·ìÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ ¼³Á¤ÇÏÁö¾ÊÀ¸¸é ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô
- À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
- <note type="warning"><title>º¸¾È</title>
- <p>»ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ .htaccess ÆÄÀÏÀ» »ç¿ëÇÏ°Ô µÇ´ÂÁö »ìÆ캸°í,
- ÀÌ·± ÇൿÀ» Çã¿ëÇÒÁö °áÁ¤Ç϶ó. ÀϹÝÀûÀ¸·Î ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î
- Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͺ£À̽º¸¦ º¸È£ÇÏ´Â °Íº¸´Ù ÇϳªÀÇ
- <code>.htpasswd</code> ÆÄÀÏÀ» º¸È£ÇÏ´Â °ÍÀÌ ´õ ½±´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_groupfile.xml.meta b/docs/manual/mod/mod_authz_groupfile.xml.meta
deleted file mode 100644
index 148ddde160..0000000000
--- a/docs/manual/mod/mod_authz_groupfile.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authz_groupfile</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authz_host.html b/docs/manual/mod/mod_authz_host.html
deleted file mode 100644
index fc883205f3..0000000000
--- a/docs/manual/mod/mod_authz_host.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_authz_host.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authz_host.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_authz_host.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authz_host.html.en b/docs/manual/mod/mod_authz_host.html.en
deleted file mode 100644
index 168471ffbe..0000000000
--- a/docs/manual/mod/mod_authz_host.html.en
+++ /dev/null
@@ -1,330 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_host - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authz_host</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_host.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_host.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_host.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Group authorizations based on host (name or IP
-address)</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authz_host_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authz_host.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>The directives provided by <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> are
- used in <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>,
- <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>, and
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> sections
- as well as <code><a href="core.html#accessfilename">.htaccess</a>
- </code> files to control access to particular parts of the server.
- Access can be controlled based on the client hostname, IP address, or
- other characteristics of the client request, as captured in <a href="../env.html">environment variables</a>. The <code class="directive"><a href="#allow">Allow</a></code> and <code class="directive"><a href="#deny">Deny</a></code> directives are used to
- specify which clients are or are not allowed access to the server,
- while the <code class="directive"><a href="#order">Order</a></code>
- directive sets the default access state, and configures how the
- <code class="directive"><a href="#allow">Allow</a></code> and <code class="directive"><a href="#deny">Deny</a></code> directives interact with each
- other.</p>
-
- <p>Both host-based access restrictions and password-based
- authentication may be implemented simultaneously. In that case,
- the <code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code> directive is used
- to determine how the two sets of restrictions interact.</p>
-
- <p>In general, access restriction directives apply to all
- access methods (<code>GET</code>, <code>PUT</code>,
- <code>POST</code>, etc). This is the desired behavior in most
- cases. However, it is possible to restrict some methods, while
- leaving other methods unrestricted, by enclosing the directives
- in a <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code> section.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#allow">Allow</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deny">Deny</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#order">Order</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls which hosts can access an area of the
-server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p>The <code class="directive">Allow</code> directive affects which hosts can
- access an area of the server. Access can be controlled by
- hostname, IP Address, IP Address range, or by other
- characteristics of the client request captured in environment
- variables.</p>
-
- <p>The first argument to this directive is always
- <code>from</code>. The subsequent arguments can take three
- different forms. If <code>Allow from all</code> is specified, then
- all hosts are allowed access, subject to the configuration of the
- <code class="directive"><a href="#deny">Deny</a></code> and <code class="directive"><a href="#order">Order</a></code> directives as discussed
- below. To allow only particular hosts or groups of hosts to access
- the server, the <em>host</em> can be specified in any of the
- following formats:</p>
-
- <dl>
- <dt>A (partial) domain-name</dt>
-
- <dd>
- <div class="example"><h3>Example:</h3><p><code>
- Allow from apache.org
- </code></p></div>
- <p>Hosts whose names match, or end in, this string are allowed
- access. Only complete components are matched, so the above
- example will match <code>foo.apache.org</code> but it will not
- match <code>fooapache.org</code>. This configuration will cause
- Apache to perform a double reverse DNS lookup on the client IP
- address, regardless of the setting of the <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code> directive. It will do
- a reverse DNS lookup on the IP address to find the associated
- hostname, and then do a forward lookup on the hostname to assure
- that it matches the original IP address. Only if the forward
- and reverse DNS are consistent and the hostname matches will
- access be allowed.</p></dd>
-
- <dt>A full IP address</dt>
-
- <dd>
- <div class="example"><h3>Example:</h3><p><code>
- Allow from 10.1.2.3
- </code></p></div>
- <p>An IP address of a host allowed access</p></dd>
-
- <dt>A partial IP address</dt>
-
- <dd>
- <div class="example"><h3>Example:</h3><p><code>
- Allow from 10.1
- </code></p></div>
- <p>The first 1 to 3 bytes of an IP address, for subnet
- restriction.</p></dd>
-
- <dt>A network/netmask pair</dt>
-
- <dd>
- <div class="example"><h3>Example:</h3><p><code>
- Allow from 10.1.0.0/255.255.0.0
- </code></p></div>
- <p>A network a.b.c.d, and a netmask w.x.y.z. For more
- fine-grained subnet restriction.</p></dd>
-
- <dt>A network/nnn CIDR specification</dt>
-
- <dd>
- <div class="example"><h3>Example:</h3><p><code>
- Allow from 10.1.0.0/16
- </code></p></div>
- <p>Similar to the previous case, except the netmask consists of
- nnn high-order 1 bits.</p></dd>
- </dl>
-
- <p>Note that the last three examples above match exactly the
- same set of hosts.</p>
-
- <p>IPv6 addresses and IPv6 subnets can be specified as shown
- below:</p>
-
- <div class="example"><p><code>
- Allow from fe80::a00:20ff:fea7:ccea<br />
- Allow from fe80::a00:20ff:fea7:ccea/10
- </code></p></div>
-
- <p>The third format of the arguments to the
- <code class="directive">Allow</code> directive allows access to the server
- to be controlled based on the existence of an <a href="../env.html">environment variable</a>. When <code>Allow from
- env=<var>env-variable</var></code> is specified, then the request is
- allowed access if the environment variable <var>env-variable</var>
- exists. The server provides the ability to set environment
- variables in a flexible way based on characteristics of the client
- request using the directives provided by
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. Therefore, this directive can be
- used to allow access based on such factors as the clients
- <code>User-Agent</code> (browser type), <code>Referer</code>, or
- other HTTP request header fields.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
- &lt;Directory /docroot&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=let_me_in<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>In this case, browsers with a user-agent string beginning
- with <code>KnockKnock/2.0</code> will be allowed access, and all
- others will be denied.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Deny" id="Deny">Deny</a> <a name="deny" id="deny">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls which hosts are denied access to the
-server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p>This directive allows access to the server to be restricted
- based on hostname, IP address, or environment variables. The
- arguments for the <code class="directive">Deny</code> directive are
- identical to the arguments for the <code class="directive"><a href="#allow">Allow</a></code> directive.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Order" id="Order">Order</a> <a name="order" id="order">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Controls the default access state and the order in which
-Allow and Deny are
-evaluated.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> Order <var>ordering</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Order Deny,Allow</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p>The <code class="directive">Order</code> directive controls the default
- access state and the order in which <code class="directive"><a href="#allow">Allow</a></code> and <code class="directive"><a href="#deny">Deny</a></code> directives are evaluated.
- <var>Ordering</var> is one of</p>
-
- <dl>
- <dt><code>Deny,Allow</code></dt>
-
- <dd>The <code class="directive"><a href="#deny">Deny</a></code> directives
- are evaluated before the <code class="directive"><a href="#allow">Allow</a></code> directives. Access is
- allowed by default. Any client which does not match a
- <code class="directive"><a href="#deny">Deny</a></code> directive or does
- match an <code class="directive"><a href="#allow">Allow</a></code>
- directive will be allowed access to the server.</dd>
-
- <dt><code>Allow,Deny</code></dt>
-
- <dd>The <code class="directive"><a href="#allow">Allow</a></code>
- directives are evaluated before the <code class="directive"><a href="#deny">Deny</a></code> directives. Access is denied
- by default. Any client which does not match an <code class="directive"><a href="#allow">Allow</a></code> directive or does match a
- <code class="directive"><a href="#deny">Deny</a></code> directive will be
- denied access to the server.</dd>
-
- <dt><code>Mutual-failure</code></dt>
-
- <dd>Only those hosts which appear on the <code class="directive"><a href="#allow">Allow</a></code> list and do not appear on
- the <code class="directive"><a href="#deny">Deny</a></code> list are
- granted access. This ordering has the same effect as <code>Order
- Allow,Deny</code> and is deprecated in favor of that
- configuration.</dd>
- </dl>
-
- <p>Keywords may only be separated by a comma; <em>no whitespace</em> is
- allowed between them. Note that in all cases every <code class="directive"><a href="#allow">Allow</a></code> and <code class="directive"><a href="#deny">Deny</a></code> statement is evaluated.</p>
-
- <p>In the following example, all hosts in the apache.org domain
- are allowed access; all other hosts are denied access.</p>
-
- <div class="example"><p><code>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from apache.org
- </code></p></div>
-
- <p>In the next example, all hosts in the apache.org domain are
- allowed access, except for the hosts which are in the
- foo.apache.org subdomain, who are denied access. All hosts not
- in the apache.org domain are denied access because the default
- state is to deny access to the server.</p>
-
- <div class="example"><p><code>
- Order Allow,Deny<br />
- Allow from apache.org<br />
- Deny from foo.apache.org
- </code></p></div>
-
- <p>On the other hand, if the <code class="directive">Order</code> in the last
- example is changed to <code>Deny,Allow</code>, all hosts will
- be allowed access. This happens because, regardless of the
- actual ordering of the directives in the configuration file,
- the <code>Allow from apache.org</code> will be evaluated last
- and will override the <code>Deny from foo.apache.org</code>.
- All hosts not in the <code>apache.org</code> domain will also
- be allowed access because the default state will change to
- <em>allow</em>.</p>
-
- <p>The presence of an <code class="directive">Order</code> directive can affect
- access to a part of the server even in the absence of accompanying
- <code class="directive"><a href="#allow">Allow</a></code> and <code class="directive"><a href="#deny">Deny</a></code> directives because of its effect
- on the default access state. For example,</p>
-
- <div class="example"><p><code>
- &lt;Directory /www&gt;<br />
- <span class="indent">
- Order Allow,Deny<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>will deny all access to the <code>/www</code> directory
- because the default access state will be set to
- <em>deny</em>.</p>
-
- <p>The <code class="directive">Order</code> directive controls the order of access
- directive processing only within each phase of the server's
- configuration processing. This implies, for example, that an
- <code class="directive"><a href="#allow">Allow</a></code> or <code class="directive"><a href="#deny">Deny</a></code> directive occurring in a
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section will
- always be evaluated after an <code class="directive"><a href="#allow">Allow</a></code> or <code class="directive"><a href="#deny">Deny</a></code> directive occurring in a
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> section or
- <code>.htaccess</code> file, regardless of the setting of the
- <code class="directive">Order</code> directive. For details on the merging
- of configuration sections, see the documentation on <a href="../sections.html">How Directory, Location and Files sections
- work</a>.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_host.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_host.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_host.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_host.html.ja.euc-jp b/docs/manual/mod/mod_authz_host.html.ja.euc-jp
deleted file mode 100644
index 849b8763fc..0000000000
--- a/docs/manual/mod/mod_authz_host.html.ja.euc-jp
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_host - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_authz_host</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_host.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_host.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_host.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥Û¥¹¥È (̾Á°¤â¤·¤¯¤Ï IP ¥¢¥É¥ì¥¹) ¤Ë´ð¤Å¤¤¤¿¥°¥ë¡¼¥×¾µÇ§</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>authz_host_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_authz_host.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.1 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> ¤Ë¤è¤êÄ󶡤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥µ¡¼¥Ð¤ÎÆÃÄê¤ÎÉôʬ¤Ø¤Î
- ¥¢¥¯¥»¥¹¤òÀ©¸æ¤¹¤ë¤¿¤á¤Ë <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- ¤È <code><a href="core.html#accessfilename">.htaccess</a></code> ¥Õ¥¡¥¤¥ë¤Ç»ÈÍѤµ¤ì¤Þ¤¹¡£¥¯¥é¥¤¥¢¥ó¥È¤Î¥Û¥¹¥È̾¡¢IP
- ¥¢¥É¥ì¥¹¤ä <a href="../env.html">´Ä¶­ÊÑ¿ô</a>¤È¤·¤Æ¼èÆÀ¤µ¤ì¤¿¡¢¤½¤Î¾¤Î¥ê¥¯¥¨¥¹¥È¤ÎÆÃħ¤Ë´ð¤Å¤¤¤Æ
- ¥¢¥¯¥»¥¹À©¸æ¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£<code class="directive"><a href="#allow">Allow</a></code> ¤È
- <code class="directive"><a href="#deny">Deny</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¤É¤Î¤è¤¦¤Ê¥¯¥é¥¤¥¢¥ó¥È¤Ë¥¢¥¯¥»¥¹¤ò
- µö²Ä¤¹¤ë¡¢¤·¤Ê¤¤¤«¤ò»ØÄꤹ¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£°ìÊý¡¢
- <code class="directive"><a href="#order">Order</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥»¥¹¾õÂ֤ȡ¢
- <code class="directive"><a href="#allow">Allow</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤Î¤ª¸ß¤¤¤Ø¤Î±Æ¶Á¤Î»ÅÊý¤òÀßÄꤷ¤Þ¤¹¡£
- </p>
-
- <p>¥Û¥¹¥È¤Ë¤è¤ë¥¢¥¯¥»¥¹À©¸Â¤È¥Ñ¥¹¥ï¡¼¥É¤Ë¤è¤ëǧ¾Ú¤òƱ»þ¤Ë
- ¹Ô¤Ê¤¦¤³¤È¤¬²Äǽ¤Ç¤¹¡£¤½¤Î¾ì¹ç¡¢¤½¤ÎÆó¤Ä¤ÎÀ©¸Â¤Î´Ø·¸¤ò»ØÄꤹ¤ë¤¿¤á¤Ë
- <code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Þ¤¹¡£</p>
-
- <p>°ìÈÌŪ¤Ë¤Ï¡¢¥¢¥¯¥»¥¹À©¸Â¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¹¤Ù¤Æ¤Î¥¢¥¯¥»¥¹¥á¥½¥Ã¥É
- (<code>GET</code>, <code>PUT</code>, <code>POST</code> ¤Ê¤É)
- ¤ËŬÍѤµ¤ì¤Þ¤¹¡£¤½¤·¤Æ¡¢¤Û¤È¤ó¤É¤Î¾ì¹ç¤³¤ì¤¬Ë¾¤Þ¤·¤¤Æ°ºî¤Ç¤¹¡£
- ¤·¤«¤·¡¢<code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤ÎÃæ¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¯¤³¤È¤Ç¡¢
- °ìÉô¤Î¥á¥½¥Ã¥É¤Ë¤Î¤ßÀ©¸Â¤ò¤«¤±¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#allow">Allow</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deny">Deny</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#order">Order</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤Î¤¢¤ëÎΰè¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë¥Û¥¹¥È¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p><code class="directive">Allow</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤É¤Î¥Û¥¹¥È¤¬
- ¥µ¡¼¥Ð¤Î¤¢¤ëÎΰè¤ò¥¢¥¯¥»¥¹¤Ç¤­¤ë¤«¤Ë±Æ¶Á¤òÍ¿¤¨¤Þ¤¹¡£
- ¥¢¥¯¥»¥¹¤Ï¥Û¥¹¥È̾¡¢IP ¥¢¥É¥ì¥¹¡¢IP ¥¢¥É¥ì¥¹¤ÎÈϰϤ䡢
- ´Ä¶­ÊÑ¿ô¤È¤·¤Æ¼èÆÀ¤µ¤ì¤¿¡¢¤½¤Î¾¤Î¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤Î
- ÆÃħ¤Ë¤è¤Ã¤ÆÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎºÇ½é¤Î°ú¿ô¤Ï¾ï¤Ë <code>from</code> ¤Ç¤¹¡£
- ¤½¤ì¤Ë³¤¯°ú¿ô¤Ï»°¤Ä¤Î°ã¤Ã¤¿·Á¼°¤¬¤¢¤ê¤Þ¤¹¡£<code>Allow from
- all</code> ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢¤¹¤Ù¤Æ¤Î¥Û¥¹¥È¤Ë¥¢¥¯¥»¥¹¤òµö²Ä¤·¡¢
- ¥¢¥¯¥»¥¹À©¸Â¤Ï²¼¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢
- <code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code class="directive"><a href="#order">Order</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀßÄê¤Ç·è¤Þ¤ê¤Þ¤¹¡£
- ÆÃÄê¤Î¥Û¥¹¥È¤ä¥Û¥¹¥È·²¤Ë¤Î¤ß¥µ¡¼¥Ð¤Ø¤Î¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
- °Ê²¼¤Î¤É¤ì¤«¤Î·Á¼°¤Ç <em>host</em> ¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <dl>
- <dt>¥É¥á¥¤¥ó̾ (¤Î°ìÉô)</dt>
-
- <dd>
- <div class="example"><h3>Îã</h3><p><code>
- Allow from apache.org
- </code></p></div>
- <p>¤³¤Îʸ»úÎó¤Ë¹ç¤¦¤«¡¢¤³¤ì¤Ç½ª¤ï¤ë̾Á°¤Î¥Û¥¹¥È¤Î¥¢¥¯¥»¥¹¤¬µö²Ä¤µ¤ì¤Þ¤¹¡£
- ³ÆÉôʬ¤¬´°Á´¤Ë¹ç¤¦¤â¤Î¤À¤±¤ËŬÍѤµ¤ì¤Þ¤¹¤Î¤Ç¡¢¾å¤ÎÎã¤Ï
- <code>foo.apache.org</code> ¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Þ¤¹¤¬¡¢
- <code>fooapache.org</code> ¤Ë¤Ï¥Þ¥Ã¥Á¤·¤Þ¤»¤ó¡£
- ¤³¤ÎÀßÄê¤ò¤¹¤ë¤È¡¢Apache ¤Ï
- <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code>
- ¤ÎÀßÄê¤Ë´Ø¤ï¤é¤º¡¢¥¯¥é¥¤¥¢¥ó¥È¤Î IP ¥¢¥É¥ì¥¹¤ËÂФ·¤Æ
- DNS ¤Î 2 ½ÅµÕ°ú¤­¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£
- ¥Û¥¹¥È̾¤«¤é¥ª¥ê¥¸¥Ê¥ë¤Î IP ¥¢¥É¥ì¥¹¤ò½ç°ú¤­¤·¤Þ¤¹¡£
- ½ç°ú¤­¤ÈµÕ°ú¤­¤¬°ìÃפ·¡¢¥Û¥¹¥È̾¤¬³ºÅö¤·¤¿¾ì¹ç¤Ë¤Î¤ß¡¢
- ¥¢¥¯¥»¥¹¤¬µö²Ä¤µ¤ì¤Þ¤¹¡£</p></dd>
-
- <dt>´°Á´¤Ê IP ¥¢¥É¥ì¥¹</dt>
-
- <dd>
- <div class="example"><h3>Îã</h3><p><code>
- Allow from 10.1.2.3
- </code></p></div>
- <p>¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë IP ¥¢¥É¥ì¥¹¤Ç¤¹¡£</p></dd>
-
- <dt>IP ¥¢¥É¥ì¥¹¤Î°ìÉô</dt>
-
- <dd>
- <div class="example"><h3>Îã</h3><p><code>
- Allow from 10.1
- </code></p></div>
- <p>¥µ¥Ö¥Í¥Ã¥È¤ÎÀ©¸ÂÍѤΡ¢IP
- ¥¢¥É¥ì¥¹¤ÎºÇ½é¤Î°ì¤Ä¤«¤é»°¤Ä¤Þ¤Ç¤Î¥Ð¥¤¥È¤Ç¤¹¡£</p></dd>
-
- <dt>¥Í¥Ã¥È¥ï¡¼¥¯/¥Í¥Ã¥È¥Þ¥¹¥¯ ¤ÎÂÐ</dt>
-
- <dd>
- <div class="example"><h3>Îã</h3><p><code>
- Allow from 10.1.0.0/255.255.0.0
- </code></p></div>
- <p>¥Í¥Ã¥È¥ï¡¼¥¯ a.b.c.d ¤È¥Í¥Ã¥È¥Þ¥¹¥¯ w.x.y.z ¤Ç¤¹¡£
- ¤è¤êºÙγÅ٤Υµ¥Ö¥Í¥Ã¥ÈÀ©¸ÂÍѤǤ¹¡£</p></dd>
-
- <dt>¥Í¥Ã¥È¥ï¡¼¥¯/nnn CIDR »ØÄê</dt>
-
- <dd>
- <div class="example"><h3>Îã</h3><p><code>
- Allow from 10.1.0.0/16
- </code></p></div>
- <p>¥Í¥Ã¥È¥Þ¥¹¥¯¤¬ nnn ¤Î¾å°Ì¥Ó¥Ã¥È¤¬ 1
- ¤È¤Ê¤Ã¤Æ¤¤¤ë¤â¤Î¤«¤é¤Ê¤ë¤³¤È°Ê³°¤ÏÁ°¤Î¤â¤Î¤ÈƱ¤¸¤Ç¤¹¡£</p></dd>
- </dl>
-
- <p>Ãí: ºÇ¸å¤Î»°¤Ä¤ÎÎã¤Ï¤Þ¤Ã¤¿¤¯Æ±¤¸¥Û¥¹¥È¤Ë¹ç¤¤¤Þ¤¹¡£</p>
-
-
- <p>IPv6 ¥¢¥É¥ì¥¹¤È IPv6 ¤Î¥µ¥Ö¥Í¥Ã¥È¤Ï°Ê²¼¤Î¤è¤¦¤Ë»ØÄê¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- Allow from fe80::a00:20ff:fea7:ccea<br />
- Allow from fe80::a00:20ff:fea7:ccea/10
- </code></p></div>
-
- <p><code class="directive">Allow</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤Î»°¤ÄÌܤηÁ¼°¤Ï¡¢
- <a href="../env.html">´Ä¶­ÊÑ¿ô</a>
- ¤Î¸ºß¤Ë¤è¤ê¥¢¥¯¥»¥¹¤ÎÀ©¸æ¤ò¹Ô¤Ê¤¨¤ë¤è¤¦¤Ë¤¹¤ë¤â¤Î¤Ç¤¹¡£
- <code>Allow from env=<var>env-variable</var></code>
- ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢´Ä¶­ÊÑ¿ô <var>env-variable</var>
- ¤¬Â¸ºß¤·¤¿¾ì¹ç¤Ë¥ê¥¯¥¨¥¹¥È¤Ï¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£¥µ¡¼¥Ð¤Ï
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
- ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È
- ¤ÎÆÃħ¤Ë´ð¤Å¤¤¤Æ½ÀÆð¤Ë´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ëµ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î
- <code>User-Agent</code> (¥Ö¥é¥¦¥¶¤Î¼ïÎà)¡¢<code>Referer</code>
- ¤ä¾¤Î HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Ê¤É¤Ë´ð¤Å¤¤¤Æ
- ¥¢¥¯¥»¥¹µö²Ä¤ò¤¹¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- </p>
-
- <div class="example"><h3>Example:</h3><p><code>
- SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
- &lt;Directory /docroot&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=let_me_in<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¤³¤Î¾ì¹ç¡¢user-agent ¤Îʸ»úÎó¤¬ <code>KnockKnock/2.0</code>
- ¤Ç»Ï¤Þ¤ë¥Ö¥é¥¦¥¶¤Î¤ß¤¬¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¡¢
- ¾¤Î¤â¤Î¤Ï¥¢¥¯¥»¥¹¤òµñÈݤµ¤ì¤Þ¤¹¡£</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Deny" id="Deny">Deny</a> <a name="deny" id="deny">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¥¢¥¯¥»¥¹¤òµñÈݤ¹¤ë¥Û¥¹¥È¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Û¥¹¥È̾¡¢IP
- ¥¢¥É¥ì¥¹¡¢´Ä¶­ÊÑ¿ô¤Ë´ð¤Å¤¤¤Æ¥µ¡¼¥Ð¤Ø¤Î¥¢¥¯¥»¥¹¤òÀ©¸Â¤·¤Þ¤¹¡£
- <code class="directive">Deny</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤Ï <code class="directive"><a href="#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Order" id="Order">Order</a> <a name="order" id="order">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥»¥¹²Äǽ¤Ê¾õÂ֤ȡ¢Allow ¤È
-Deny ¤¬É¾²Á¤µ¤ì¤ë½çÈÖ¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code> Order <var>ordering</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Order Deny,Allow</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p><code class="directive">Order</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥»¥¹¤Î¾õÂÖ¤È
- <code class="directive"><a href="#allow">Allow</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬É¾²Á¤µ¤ì¤ë½çÈÖ¤òÀ©¸æ¤·¤Þ¤¹¡£
- <var>Ordering</var> ¤Ï°Ê²¼¤Î¤É¤ì¤«¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>Deny,Allow</code></dt>
-
- <dd><code class="directive"><a href="#deny">Deny</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
- <code class="directive"><a href="#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÁ°¤Ëɾ²Á¤µ¤ì¤Þ¤¹¡£
- ¥¢¥¯¥»¥¹¤Ï¥Ç¥Õ¥©¥ë¥È¤Çµö²Ä¤µ¤ì¤Þ¤¹¡£<code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¹ç¤ï¤Ê¤¤¤«¡¢<code class="directive"><a href="#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¹ç¤¦¥¯¥é¥¤¥¢¥ó¥È¤Ï¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>Allow,Deny</code></dt>
-
- <dd><code class="directive"><a href="#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ <code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÁ°¤Ëɾ²Á¤µ¤ì¤Þ¤¹¡£
- ¥¢¥¯¥»¥¹¤Ï¥Ç¥Õ¥©¥ë¥È¤ÇµñÈݤµ¤ì¤Þ¤¹¡£<code class="directive"><a href="#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¹ç¤ï¤Ê¤¤¤«¡¢<code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¹ç¤¦¥¯¥é¥¤¥¢¥ó¥È¤Ï¥¢¥¯¥»¥¹¤òµñÈݤµ¤ì¤Þ¤¹¡£
- </dd>
-
- <dt><code>Mutual-failure</code></dt>
-
- <dd><code class="directive"><a href="#allow">Allow</a></code> ¤Î¥ê¥¹¥È¤Ë¸½¤ì¤Æ¡¢
- <code class="directive"><a href="#deny">Deny</a></code>
- ¤Î¥ê¥¹¥È¤Ë¸½¤ì¤Ê¤¤¥Û¥¹¥È¤Î¤ß¤¬¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£
- ¤³¤Î½çÈÖÉÕ¤±¤Ï <code>Order Allow,Deny</code> ¤ÈƱ¤¸¸ú²Ì¤ò»ý¤Á¡¢
- ¤½¤ÎÀßÄê¤ÎÊý¤¬¹¥¤Þ¤·¤¤¤¿¤á¤ËÈó¿ä¾©¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¥­¡¼¥ï¡¼¥É¤Ï¥³¥ó¥Þ¤ÇʬΥ¤¹¤ë¤³¤È¤À¤±¤¬²Äǽ¤Ç¤¹¡£
- ´Ö¤Ë<em>¶õÇò¤¬¤¢¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó</em>¡£¤É¤Î¾ì¹ç¤Ç¤â¡¢<code class="directive"><a href="#allow">Allow</a></code> ¤È
- <code class="directive"><a href="#deny">Deny</a></code> ʸ¤Ï
- Á´¤Æɾ²Á¤µ¤ì¤ë¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- </p>
-
- <p>°Ê²¼¤ÎÎã¤Ç¤Ï¡¢apache.org
- ¥É¥á¥¤¥ó¤Î¤¹¤Ù¤Æ¤Î¥Û¥¹¥È¤Ï¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£
- ¾¤Î¤¹¤Ù¤Æ¤Î¥Û¥¹¥È¤Ï¥¢¥¯¥»¥¹¤òµñÈݤµ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from apache.org
- </code></p></div>
-
- <p>¼¡¤ÎÎã¤Ç¤Ï¡¢foo.apache.org ¥µ¥Ö¥É¥á¥¤¥ó¤Ë¤¢¤ë¥Û¥¹¥È°Ê³°¤Î¡¢
- apache.org ¥É¥á¥¤¥ó¤Î¤¹¤Ù¤Æ¤Î¥Û¥¹¥È¤¬¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£
- apache.org
- ¥É¥á¥¤¥ó¤Ç¤Ê¤¤¥Û¥¹¥È¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Î¾õÂÖ¤¬¥¢¥¯¥»¥¹µñÈݤΤ¿¤á¡¢
- ¥µ¡¼¥Ð¤Ø¤Î¥¢¥¯¥»¥¹¤òµñÈݤµ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Order Allow,Deny<br />
- Allow from apache.org<br />
- Deny from foo.apache.org
- </code></p></div>
-
- <p>°ìÊý¡¢¾å¤ÎÎã¤Î <code class="directive">Order</code> ¤¬ <code>Deny,Allow</code>
- ¤ËÊѤï¤Ã¤Æ¤¤¤ì¤Ð¡¢¤¹¤Ù¤Î¥Û¥¹¥È¤Ë¥¢¥¯¥»¥¹¤¬µö²Ä¤µ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î¼ÂºÝ¤Î½çÈ֤˴ؤï¤é¤º¡¢
- <code>Allow from apache.org</code> ¤¬ºÇ¸å¤Ëɾ²Á¤µ¤ì¤Æ¡¢
- <code>Deny from foo.apache.org</code> ¤ò¾å½ñ¤­¤¹¤ë¤«¤é¤Ç¤¹¡£
- <code>apache.org</code>
- ¥É¥á¥¤¥ó¤Ë¤Ê¤¤¥Û¥¹¥È¤â¡¢¥Ç¥Õ¥©¥ë¥È¤Î¾õÂÖ¤¬ <em>allow</em>
- ¤ËÊѲ½¤¹¤ë¤¿¤á¤Ë¡¢¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤Þ¤¹¡£
- </p>
-
- <p><code class="directive">Order</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥»¥¹¤Î¾õÂ֤˱ƶÁ¤òÍ¿¤¨¤ë¤Î¤Ç¡¢
- <code class="directive"><a href="#allow">Allow</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Ìµ¤¯¤Æ¤â¡¢¥µ¡¼¥Ð¤Î¥¢¥¯¥»¥¹¤Ë±Æ¶Á¤òÍ¿¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢</p>
-
- <div class="example"><p><code>
- &lt;Directory /www&gt;<br />
- <span class="indent">
- Order Allow,Deny<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥»¥¹¾õÂÖ¤¬ <em>deny</em> ¤Ë¤Ê¤ë¤¿¤á¡¢
- <code>/www</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¤¹¤Ù¤Æ¤Î¥¢¥¯¥»¥¹¤òµñÈݤ·¤Þ¤¹¡£
- </p>
-
- <p><code class="directive">Order</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥µ¡¼¥Ð¤ÎÀßÄê½èÍý¤Î³ÆÃʳ¬¤Ç¤À¤±
- ¥¢¥¯¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½èÍý¤Î½çÈÖ¤òÊѹ¹¤·¤Þ¤¹¡£¤³¤ì¤Ï¡¢¤¿¤È¤¨¤Ð¡¢
- <code class="directive">Order</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀßÄê¤Ë´Ø¤ï¤é¤º¡¢
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Î
- <code class="directive"><a href="#allow">Allow</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <code class="directive"><a href="#deny">Deny</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> ¥»¥¯¥·¥ç¥ó¤ä
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Î <code class="directive"><a href="#allow">Allow</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä <code class="directive"><a href="#deny">Deny</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤è¤ê¤â¾ï¤Ë¸å¤Ëɾ²Á¤µ¤ì¤ë¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- ÀßÄꥻ¥¯¥·¥ç¥ó¤Î¥Þ¡¼¥¸¤Î¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
- <a href="../sections.html">Directory,Location, Files
- ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîÊýË¡</a> ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_host.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_host.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_host.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_host.html.ko.euc-kr b/docs/manual/mod/mod_authz_host.html.ko.euc-kr
deleted file mode 100644
index 5a2ffaf515..0000000000
--- a/docs/manual/mod/mod_authz_host.html.ko.euc-kr
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_host - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authz_host</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_host.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_host.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_host.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>È£½ºÆ® (À̸§À̳ª IP ÁÖ¼Ò)¸¦ »ç¿ëÇÑ ±×·ì ±ÇÇѺο©</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authz_host_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authz_host.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p><code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>,
- <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>,
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- ¼½¼Ç°ú <code><a href="core.html#accessfilename">.htaccess</a></code>
- ÆÄÀÏ¿¡¼­ ¼­¹öÀÇ Æ¯Á¤ ºÎºÐÀÇ Á¢±ÙÀ» Á¦¾îÇϱâÀ§ÇØ
- <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>°¡ Á¦°øÇÏ´Â Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- Ŭ¶óÀ̾ðÆ®ÀÇ È£½ºÆ®¸í, IP ÁÖ¼Ò, <a href="../env.html">ȯ°æº¯¼ö</a>¿¡ ±â·ÏµÈ ¿äûÀÇ Æ¯¼º¿¡ µû¶ó
- Á¢±ÙÀ» Á¦¾îÇÑ´Ù. <code class="directive"><a href="#allow">Allow</a></code>¿Í <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î´Â ¾î¶²
- Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö¸¦ Áö½ÃÇÏ°í, <code class="directive"><a href="#order">Order</a></code> Áö½Ã¾î´Â ±âº»ÀûÀ¸·Î
- Á¢±ÙÀ» Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í ¾î¶»°Ô <code class="directive"><a href="#allow">Allow</a></code> Áö½Ã¾î¿Í <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î°¡ ¼­·Î ¿µÇâÀ»
- ¹ÌÄ¡´ÂÁö °áÁ¤ÇÑ´Ù.</p>
-
- <p>È£½ºÆ®±â¹Ý Á¢±ÙÁ¦ÇÑ°ú ¾ÏÈ£±â¹Ý ÀÎÁõÀ» µ¿½Ã¿¡ »ç¿ëÇÒ ¼öµµ
- ÀÖ´Ù. ÀÌ °æ¿ì <code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¾î¶»°Ô µÎ Á¦ÇÑÀÌ ¼­·Î ¿µÇâÀ» ¹ÌÄ¡´ÂÁö
- °áÁ¤ÇÑ´Ù.</p>
-
- <p>ÀϹÝÀûÀ¸·Î Á¢±ÙÁ¦ÇÑ Áö½Ã¾î´Â (<code>GET</code>,
- <code>PUT</code>, <code>POST</code> µî) ¸ðµç ¸Þ¼­µå¿¡ Àû¿ëµÇ¸ç,
- ÀÌ ÇൿÀº ´ëºÎºÐÀÇ °æ¿ì ¹Ù¶÷Á÷ÇÏ´Ù. ±×·¯³ª <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code> ¼½¼Ç¾È¿¡
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ƯÁ¤ ¸Þ¼­µå¿¡¸¸ Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#allow">Allow</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deny">Deny</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#order">Order</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼­¹öÀÇ ÀϺο¡ Á¢±ÙÇÒ ¼ö Àִ ȣ½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p><code class="directive">Allow</code> Áö½Ã¾î´Â ¾î¶² È£½ºÆ®°¡ ¼­¹öÀÇ
- ÀϺο¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö Áö½ÃÇÑ´Ù. È£½ºÆ®¸í, IP ÁÖ¼Ò, IP
- ÁÖ¼Ò¿µ¿ª, ȯ°æº¯¼ö¿¡ ±â·ÏµÈ ´Ù¸¥ Ư¼º¿¡ µû¶ó Á¢±ÙÀ» Á¶ÀýÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾îÀÇ Ã¹¹ø° ¾Æ±Ô¸ÕÆ®´Â Ç×»ó <code>from</code>ÀÌ´Ù.
- ´ÙÀ½ ¾Æ±Ô¸ÕÆ®¿¡´Â ¼¼°¡Áö Çü½ÄÀÌ ÀÖ´Ù. <code>Allow from all</code>À»
- »ç¿ëÇϸé, ¾Æ·¡¿¡¼­ ¼³¸íÇÒ <code class="directive"><a href="#deny">Deny</a></code>¿Í <code class="directive"><a href="#order">Order</a></code> Áö½Ã¾î ¼³Á¤¿¡
- µû¶ó ¸ðµç È£½ºÆ®ÀÇ Á¢±ÙÀ» Çã°¡ÇÑ´Ù. ƯÁ¤ È£½ºÆ®¸¸ ¼­¹ö·Î
- Á¢±ÙÀ» Çã¿ëÇÏ·Á¸é ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î <em>host</em>¸¦ Áö½ÃÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt>È£½ºÆ®¸í (ÀϺÎ)</dt>
-
- <dd>
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Allow from apache.org
- </code></p></div>
- <p>È£½ºÆ®¸íÀÌ ÀÌ ¹®ÀÚ¿­°ú °°°Å³ª ÀÌ ¹®ÀÚ¿­·Î ³¡³ª¸é Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ±×·¡¼­ ÀÌ °æ¿ì <code>foo.apache.org</code>´Â
- ÇØ´çµÇ°í, <code>fooapache.org</code>´Â ÇØ´çµÇÁö ¾Ê´Â´Ù.
- ÀÌ ¼³Á¤À» »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code> Áö½Ã¾î ¼³Á¤°ú
- °ü°è¾øÀÌ Å¬¶óÀ̾ðÆ® IP ÁÖ¼Ò¸¦ °¡Áö°í Áߺ¹-¿ª DNS °Ë»öÀ»
- ÇÑ´Ù. Áï, È£½ºÆ®¸íÀ» ã±âÀ§ÇØ IP ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÀ» ÇÑ
- ÈÄ, ´Ù½Ã È£½ºÆ®¸íÀ¸·Î °Ë»öÇÏ¿© ¿ø·¡ IP ÁÖ¼Ò¿Í ÀÏÄ¡ÇÏ´ÂÁö
- È®ÀÎÇÑ´Ù. °á°ú°¡ °°°í È£½ºÆ®¸íÀÌ ¼³Á¤°ª¿¡ ÇØ´çÇϸé, Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù.</p></dd>
-
- <dt>IP ÁÖ¼Ò Àüü</dt>
-
- <dd>
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Allow from 10.1.2.3
- </code></p></div>
- <p>Á¢±ÙÀ» Çã°¡Çϴ ȣ½ºÆ®ÀÇ IP ÁÖ¼Ò</p></dd>
-
- <dt>IP ÁÖ¼Ò ÀϺÎ</dt>
-
- <dd>
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Allow from 10.1
- </code></p></div>
- <p>¼­ºê³×Æ®¿öÅ©·Î Á¦ÇÑÇϱâÀ§ÇØ IP ÁÖ¼Ò ¾ÕÀÇ 1¿¡¼­ 3
- ¹ÙÀÌÆ®.</p></dd>
-
- <dt>³×Æ®¿öÅ©/³Ý¸Å½ºÅ© ½Ö</dt>
-
- <dd>
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Allow from 10.1.0.0/255.255.0.0
- </code></p></div>
- <p>³×Æ®¿öÅ© a.b.c.d¿Í ³Ý¸Å½ºÅ© w.x.y.z. ´õ ¼¼¹ÐÇÏ°Ô
- ¼­ºê³×Æ®¿öÅ©·Î Á¦ÇÑÇÒ¶§ »ç¿ëÇÑ´Ù.</p></dd>
-
- <dt>³×Æ®¿öÅ©/nnn CIDR ±Ô¾à</dt>
-
- <dd>
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- Allow from 10.1.0.0/16
- </code></p></div>
- <p>¾ÕÀÇ °æ¿ì¿Í °°Áö¸¸, »óÀ§ nnn°³ ºñÆ® °ªÀÌ 1ÀÎ ³Ý¸Å½ºÅ©¸¦
- »ç¿ëÇÑ´Ù.</p></dd>
- </dl>
-
- <p>¸¶Áö¸· ¼¼°¡Áö ¿¹´Â Á¤È®È÷ µ¿ÀÏÇÑ È£½ºÆ®µéÀ» ÁöĪÇÑ´Ù.</p>
-
- <p>´ÙÀ½°ú °°ÀÌ IPv6 ÁÖ¼Ò¿Í IPv6 ¼­ºê³×Æ®¿öÅ©¸¦ ÁöÁ¤ÇÒ ¼öµµ
- ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- Allow from fe80::a00:20ff:fea7:ccea<br />
- Allow from fe80::a00:20ff:fea7:ccea/10
- </code></p></div>
-
- <p><code class="directive">Allow</code> Áö½Ã¾î ¾Æ±Ô¸ÕÆ®ÀÇ ¼¼¹ø°
- Çü½ÄÀº <a href="../env.html">ȯ°æº¯¼ö</a> À¯¹«¿¡ µû¶ó Á¢±ÙÀ»
- Á¦¾îÇÑ´Ù. <code>Allow from env=<var>env-variable</var></code>À»
- »ç¿ëÇϸé, <var>env-variable</var> ȯ°æº¯¼ö°¡ Á¤ÀÇµÈ °æ¿ì
- Á¢±ÙÀ» Çã°¡ÇÑ´Ù. <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>°¡ Á¦°øÇÏ´Â
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Ŭ¶óÀ̾ðÆ® ¿äûÀÇ Æ¯¼º¿¡ µû¶ó ÀÚÀ¯·Ó°Ô
- ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- Ŭ¶óÀ̾ðÆ® <code>User-Agent</code> (ºê¶ó¿ìÀú Á¾·ù),
- <code>Referer</code>, ´Ù¸¥ HTTP ¿äû Çì´õ¿¡ µû¶ó Á¢±ÙÀ»
- Çã°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
- &lt;Directory /docroot&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=let_me_in<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>ÀÌ °æ¿ì user-agent ¹®ÀÚ¿­ÀÌ <code>KnockKnock/2.0</code>À¸·Î
- ½ÃÀÛÇÏ´Â ºê¶ó¿ìÀúÀÇ Á¢±ÙÀº Çã¿ëÇÏ°í, ³ª¸ÓÁö´Â ¸ðµÎ °ÅºÎÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Deny" id="Deny">Deny</a> <a name="deny" id="deny">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼­¹ö Á¢±ÙÀ» °ÅºÎÇÒ È£½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© È£½ºÆ®¸í, IP ÁÖ¼Ò, ȯ°æº¯¼ö¿¡ µû¶ó
- ¼­¹ö Á¢±ÙÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. <code class="directive">Deny</code>
- Áö½Ã¾îÀÇ ¾Æ±Ô¸ÕÆ®´Â <code class="directive"><a href="#allow">Allow</a></code> Áö½Ã¾î¿Í µ¿ÀÏÇÏ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Order" id="Order">Order</a> <a name="order" id="order">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í
-Allow¿Í Deny
-󸮼ø¼­¸¦ Á¤ÇÑ´Ù.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code> Order <var>ordering</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Order Deny,Allow</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Limit</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_host</td></tr>
-</table>
- <p><code class="directive">Order</code> Áö½Ã¾î´Â ±âº»ÀûÀ¸·Î Á¢±ÙÀ»
- Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í <code class="directive"><a href="#allow">Allow</a></code>¿Í <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î 󸮼ø¼­¸¦
- Á¤ÇÑ´Ù. <var>ordering</var>Àº ´ÙÀ½ Áß ÇϳªÀÌ´Ù</p>
-
- <dl>
- <dt><code>Deny,Allow</code></dt>
-
- <dd><code class="directive"><a href="#deny">Deny</a></code>
- Áö½Ã¾î¸¦ <code class="directive"><a href="#allow">Allow</a></code>
- Áö½Ã¾î º¸´Ù ¸ÕÀú »ìÆ캻´Ù. ±×¸®°í ±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÑ´Ù.
- <code class="directive"><a href="#deny">Deny</a></code>³ª
- <code class="directive"><a href="#allow">Allow</a></code> Áö½Ã¾î¿¡
- ÇØ´çµÇÁö ¾Ê´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</dd>
-
- <dt><code>Allow,Deny</code></dt>
-
- <dd><code class="directive"><a href="#allow">Allow</a></code>
- Áö½Ã¾î¸¦ <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î º¸´Ù ¸ÕÀú
- »ìÆ캻´Ù. ±×¸®°í ±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.
- <code class="directive"><a href="#deny">Deny</a></code>³ª
- <code class="directive"><a href="#allow">Allow</a></code> Áö½Ã¾î¿¡
- ÇØ´çµÇÁö ¾Ê´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</dd>
-
- <dt><code>Mutual-failure</code></dt>
-
- <dd><code class="directive"><a href="#deny">Deny</a></code>
- ¸ñ·Ï¿¡´Â ¾È³ª¿À°í <code class="directive"><a href="#allow">Allow</a></code> ¸ñ·Ï¿¡¸¸ ³ª¿À´Â
- È£½ºÆ®¸¸ Á¢±ÙÀ» Çã¿ëÇÑ´Ù. <code>Order Allow,Deny</code>¿Í
- °°Àº ÀÏÀ» Çϱ⶧¹®¿¡ »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
-
- <p>Å°¿öµå´Â ½°Ç¥·Î¸¸ ±¸ºÐÇÑ´Ù; »çÀÌ¿¡ <em>°ø¹éÀÌ ÀÖÀ¸¸é
- ¾ÈµÈ´Ù.</em> ¸ðµç °æ¿ì <code class="directive"><a href="#allow">Allow</a></code>¿Í <code class="directive"><a href="#deny">Deny</a></code> ¸ðµÎ »ìÆ캽À»
- ¸í½ÉÇ϶ó.</p>
-
- <p>¾Æ·¡ ¿¹¿¡¼­ apache.org µµ¸ÞÀÎÀÇ ¸ðµç È£½ºÆ®ÀÇ Á¢±ÙÀº
- Çã¿ëÇÏÁö¸¸, ´Ù¸¥ È£½ºÆ®´Â ¸ðµÎ °ÅºÎÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from apache.org
- </code></p></div>
-
- <p>¾Æ·¡ ¿¹¿¡¼­ foo.apache.org ÇÏÀ§µµ¸ÞÀο¡ Àִ ȣ½ºÆ®¸¸
- °ÅºÎÇÏ°í, apache.org µµ¸ÞÀο¡ Àִ ȣ½ºÆ®´Â ¸ðµÎ Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î Á¢±ÙÀ» °ÅºÎÇϱ⶧¹®¿¡ apache.org µµ¸ÞÀο¡
- ¼ÓÇÏÁö ¾Ê´Â È£½ºÆ®´Â Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- Order Allow,Deny<br />
- Allow from apache.org<br />
- Deny from foo.apache.org
- </code></p></div>
-
- <p>¹Ý´ë·Î À§ÀÇ <code class="directive">Order</code>¸¦
- <code>Deny,Allow</code>·Î º¯°æÇϸé, ¸ðµç È£½ºÆ®ÀÇ Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­ Áö½Ã¾î°¡ ³ª¿À´Â ¼ø¼­¿Í °ü°è¾øÀÌ
- <code>Allow from apache.org</code>¸¦ Á¦ÀÏ ¸¶Áö¸·¿¡ ó¸®ÇÏ¿©
- <code>Deny from foo.apache.org</code>ÀÇ È¿°ú¸¦ ¹«½ÃÇϱâ
- ¶§¹®ÀÌ´Ù. ¶Ç, ±âº»ÀûÀ¸·Î Á¢±ÙÀ» <em>Çã°¡</em>ÇϹǷÎ
- <code>apache.org</code> µµ¸ÞÀο¡ ¼ÓÇÏÁö ¾Ê´Â È£½ºÆ®µµ ¸ðµÎ
- Á¢±ÙÀ» Çã°¡ÇÑ´Ù.</p>
-
- <p><code class="directive">Order</code> Áö½Ã¾î´Â ±âº»ÀûÀ¸·Î Á¢±ÙÀ»
- Çã¿ëÇÒÁö °ÅºÎÇÒÁö¸¦ Á¤Çϱ⶧¹®¿¡ <code class="directive"><a href="#allow">Allow</a></code>³ª <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏÁö
- ¾Ê¾Æµµ Á¢±Ù°¡´É ¿©ºÎ¿¡ ¿µÇâÀ» ÁØ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <div class="example"><p><code>
- &lt;Directory /www&gt;<br />
- <span class="indent">
- Order Allow,Deny<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>´Â ±âº»ÀûÀ¸·Î Á¢±ÙÀ» <em>°ÅºÎ</em>Çϱ⶧¹®¿¡
- <code>/www</code> µð·ºÅ丮¿¡ ´ëÇÑ ¸ðµç Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
- <p><code class="directive">Order</code> Áö½Ã¾î°¡ Á¤ÇÏ´Â Á¢±Ù Áö½Ã¾î
- 󸮼ø¼­´Â ÇØ´ç ¼­¹ö¼³Á¤ 󸮴ܰ迡¸¸ ¿µÇâÀ» ÁØ´Ù. Áï,
- <code class="directive">Order</code> Áö½Ã¾î ¼³Á¤°ú °ü°è¾øÀÌ <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> ¼½¼Ç ¾È¿¡
- ÀÖ´Â <code class="directive"><a href="#allow">Allow</a></code>³ª
- <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î´Â
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¼½¼ÇÀ̳ª <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â <code class="directive"><a href="#allow">Allow</a></code>¿Í <code class="directive"><a href="#deny">Deny</a></code> Áö½Ã¾î¸¦ ¸ðµÎ ó¸®ÇÑ
- ÈÄ¿¡ ó¸®ÇÑ´Ù. ¼³Á¤ ¼½¼ÇµéÀÌ °áÇÕÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­´Â <a href="../sections.html">¾î¶»°Ô Directory, Location, Files
- ¼½¼ÇÀÌ µ¿ÀÛÇϳª</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_host.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_authz_host.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_authz_host.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_host.xml b/docs/manual/mod/mod_authz_host.xml
deleted file mode 100644
index 9e894bcc65..0000000000
--- a/docs/manual/mod/mod_authz_host.xml
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_host.xml.meta">
-
-<name>mod_authz_host</name>
-<description>Group authorizations based on host (name or IP
-address)</description>
-<status>Base</status>
-<sourcefile>mod_authz_host.c</sourcefile>
-<identifier>authz_host_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>The directives provided by <module>mod_authz_host</module> are
- used in <directive module="core" type="section">Directory</directive>,
- <directive module="core" type="section">Files</directive>, and
- <directive module="core" type="section">Location</directive> sections
- as well as <code><a href="core.html#accessfilename">.htaccess</a>
- </code> files to control access to particular parts of the server.
- Access can be controlled based on the client hostname, IP address, or
- other characteristics of the client request, as captured in <a
- href="../env.html">environment variables</a>. The <directive
- module="mod_authz_host">Allow</directive> and <directive
- module="mod_authz_host">Deny</directive> directives are used to
- specify which clients are or are not allowed access to the server,
- while the <directive module="mod_authz_host">Order</directive>
- directive sets the default access state, and configures how the
- <directive module="mod_authz_host">Allow</directive> and <directive
- module="mod_authz_host">Deny</directive> directives interact with each
- other.</p>
-
- <p>Both host-based access restrictions and password-based
- authentication may be implemented simultaneously. In that case,
- the <directive module="core">Satisfy</directive> directive is used
- to determine how the two sets of restrictions interact.</p>
-
- <p>In general, access restriction directives apply to all
- access methods (<code>GET</code>, <code>PUT</code>,
- <code>POST</code>, etc). This is the desired behavior in most
- cases. However, it is possible to restrict some methods, while
- leaving other methods unrestricted, by enclosing the directives
- in a <directive module="core" type="section">Limit</directive> section.</p>
-</summary>
-
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-
-<directivesynopsis>
-<name>Allow</name>
-<description>Controls which hosts can access an area of the
-server</description>
-<syntax> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p>The <directive>Allow</directive> directive affects which hosts can
- access an area of the server. Access can be controlled by
- hostname, IP Address, IP Address range, or by other
- characteristics of the client request captured in environment
- variables.</p>
-
- <p>The first argument to this directive is always
- <code>from</code>. The subsequent arguments can take three
- different forms. If <code>Allow from all</code> is specified, then
- all hosts are allowed access, subject to the configuration of the
- <directive module="mod_authz_host">Deny</directive> and <directive
- module="mod_authz_host">Order</directive> directives as discussed
- below. To allow only particular hosts or groups of hosts to access
- the server, the <em>host</em> can be specified in any of the
- following formats:</p>
-
- <dl>
- <dt>A (partial) domain-name</dt>
-
- <dd>
- <example><title>Example:</title>
- Allow from apache.org
- </example>
- <p>Hosts whose names match, or end in, this string are allowed
- access. Only complete components are matched, so the above
- example will match <code>foo.apache.org</code> but it will not
- match <code>fooapache.org</code>. This configuration will cause
- Apache to perform a double reverse DNS lookup on the client IP
- address, regardless of the setting of the <directive
- module="core">HostnameLookups</directive> directive. It will do
- a reverse DNS lookup on the IP address to find the associated
- hostname, and then do a forward lookup on the hostname to assure
- that it matches the original IP address. Only if the forward
- and reverse DNS are consistent and the hostname matches will
- access be allowed.</p></dd>
-
- <dt>A full IP address</dt>
-
- <dd>
- <example><title>Example:</title>
- Allow from 10.1.2.3
- </example>
- <p>An IP address of a host allowed access</p></dd>
-
- <dt>A partial IP address</dt>
-
- <dd>
- <example><title>Example:</title>
- Allow from 10.1
- </example>
- <p>The first 1 to 3 bytes of an IP address, for subnet
- restriction.</p></dd>
-
- <dt>A network/netmask pair</dt>
-
- <dd>
- <example><title>Example:</title>
- Allow from 10.1.0.0/255.255.0.0
- </example>
- <p>A network a.b.c.d, and a netmask w.x.y.z. For more
- fine-grained subnet restriction.</p></dd>
-
- <dt>A network/nnn CIDR specification</dt>
-
- <dd>
- <example><title>Example:</title>
- Allow from 10.1.0.0/16
- </example>
- <p>Similar to the previous case, except the netmask consists of
- nnn high-order 1 bits.</p></dd>
- </dl>
-
- <p>Note that the last three examples above match exactly the
- same set of hosts.</p>
-
- <p>IPv6 addresses and IPv6 subnets can be specified as shown
- below:</p>
-
- <example>
- Allow from fe80::a00:20ff:fea7:ccea<br />
- Allow from fe80::a00:20ff:fea7:ccea/10
- </example>
-
- <p>The third format of the arguments to the
- <directive>Allow</directive> directive allows access to the server
- to be controlled based on the existence of an <a
- href="../env.html">environment variable</a>. When <code>Allow from
- env=<var>env-variable</var></code> is specified, then the request is
- allowed access if the environment variable <var>env-variable</var>
- exists. The server provides the ability to set environment
- variables in a flexible way based on characteristics of the client
- request using the directives provided by
- <module>mod_setenvif</module>. Therefore, this directive can be
- used to allow access based on such factors as the clients
- <code>User-Agent</code> (browser type), <code>Referer</code>, or
- other HTTP request header fields.</p>
-
- <example><title>Example:</title>
- SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
- &lt;Directory /docroot&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=let_me_in<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>In this case, browsers with a user-agent string beginning
- with <code>KnockKnock/2.0</code> will be allowed access, and all
- others will be denied.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Deny</name>
-<description>Controls which hosts are denied access to the
-server</description>
-<syntax> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p>This directive allows access to the server to be restricted
- based on hostname, IP address, or environment variables. The
- arguments for the <directive>Deny</directive> directive are
- identical to the arguments for the <directive
- module="mod_authz_host">Allow</directive> directive.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Order</name>
-<description>Controls the default access state and the order in which
-<directive>Allow</directive> and <directive>Deny</directive> are
-evaluated.</description>
-<syntax> Order <var>ordering</var></syntax>
-<default>Order Deny,Allow</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p>The <directive>Order</directive> directive controls the default
- access state and the order in which <directive
- module="mod_authz_host">Allow</directive> and <directive
- module="mod_authz_host">Deny</directive> directives are evaluated.
- <var>Ordering</var> is one of</p>
-
- <dl>
- <dt><code>Deny,Allow</code></dt>
-
- <dd>The <directive module="mod_authz_host">Deny</directive> directives
- are evaluated before the <directive
- module="mod_authz_host">Allow</directive> directives. Access is
- allowed by default. Any client which does not match a
- <directive module="mod_authz_host">Deny</directive> directive or does
- match an <directive module="mod_authz_host">Allow</directive>
- directive will be allowed access to the server.</dd>
-
- <dt><code>Allow,Deny</code></dt>
-
- <dd>The <directive module="mod_authz_host">Allow</directive>
- directives are evaluated before the <directive
- module="mod_authz_host">Deny</directive> directives. Access is denied
- by default. Any client which does not match an <directive
- module="mod_authz_host">Allow</directive> directive or does match a
- <directive module="mod_authz_host">Deny</directive> directive will be
- denied access to the server.</dd>
-
- <dt><code>Mutual-failure</code></dt>
-
- <dd>Only those hosts which appear on the <directive
- module="mod_authz_host">Allow</directive> list and do not appear on
- the <directive module="mod_authz_host">Deny</directive> list are
- granted access. This ordering has the same effect as <code>Order
- Allow,Deny</code> and is deprecated in favor of that
- configuration.</dd>
- </dl>
-
- <p>Keywords may only be separated by a comma; <em>no whitespace</em> is
- allowed between them. Note that in all cases every <directive
- module="mod_authz_host">Allow</directive> and <directive
- module="mod_authz_host">Deny</directive> statement is evaluated.</p>
-
- <p>In the following example, all hosts in the apache.org domain
- are allowed access; all other hosts are denied access.</p>
-
- <example>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from apache.org
- </example>
-
- <p>In the next example, all hosts in the apache.org domain are
- allowed access, except for the hosts which are in the
- foo.apache.org subdomain, who are denied access. All hosts not
- in the apache.org domain are denied access because the default
- state is to deny access to the server.</p>
-
- <example>
- Order Allow,Deny<br />
- Allow from apache.org<br />
- Deny from foo.apache.org
- </example>
-
- <p>On the other hand, if the <directive>Order</directive> in the last
- example is changed to <code>Deny,Allow</code>, all hosts will
- be allowed access. This happens because, regardless of the
- actual ordering of the directives in the configuration file,
- the <code>Allow from apache.org</code> will be evaluated last
- and will override the <code>Deny from foo.apache.org</code>.
- All hosts not in the <code>apache.org</code> domain will also
- be allowed access because the default state will change to
- <em>allow</em>.</p>
-
- <p>The presence of an <directive>Order</directive> directive can affect
- access to a part of the server even in the absence of accompanying
- <directive module="mod_authz_host">Allow</directive> and <directive
- module="mod_authz_host">Deny</directive> directives because of its effect
- on the default access state. For example,</p>
-
- <example>
- &lt;Directory /www&gt;<br />
- <indent>
- Order Allow,Deny<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>will deny all access to the <code>/www</code> directory
- because the default access state will be set to
- <em>deny</em>.</p>
-
- <p>The <directive>Order</directive> directive controls the order of access
- directive processing only within each phase of the server's
- configuration processing. This implies, for example, that an
- <directive module="mod_authz_host">Allow</directive> or <directive
- module="mod_authz_host">Deny</directive> directive occurring in a
- <directive module="core" type="section">Location</directive> section will
- always be evaluated after an <directive
- module="mod_authz_host">Allow</directive> or <directive
- module="mod_authz_host">Deny</directive> directive occurring in a
- <directive module="core" type="section">Directory</directive> section or
- <code>.htaccess</code> file, regardless of the setting of the
- <directive>Order</directive> directive. For details on the merging
- of configuration sections, see the documentation on <a
- href="../sections.html">How Directory, Location and Files sections
- work</a>.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_host.xml.ja b/docs/manual/mod/mod_authz_host.xml.ja
deleted file mode 100644
index 39e8cd474d..0000000000
--- a/docs/manual/mod/mod_authz_host.xml.ja
+++ /dev/null
@@ -1,337 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_host.xml.meta">
-
-<name>mod_authz_host</name>
-<description>$B%[%9%H(B ($BL>A0$b$7$/$O(B IP $B%"%I%l%9(B) $B$K4p$E$$$?%0%k!<%W>5G'(B</description>
-<status>Base</status>
-<sourcefile>mod_authz_host.c</sourcefile>
-<identifier>authz_host_module</identifier>
-<compatibility>Apache 2.1 $B0J9_(B</compatibility>
-
-<summary>
- <p><module>mod_authz_host</module> $B$K$h$jDs6!$5$l$k%G%#%l%/%F%#%V$O(B
- $B%5!<%P$NFCDj$NItJ,$X$N(B
- $B%"%/%;%9$r@)8f$9$k$?$a$K(B <directive module="core" type="section"
- >Directory</directive>, <directive module="core"
- type="section">Files</directive>, <directive module="core"
- type="section">Location</directive>
- $B$H(B <code><a href="core.html#accessfilename">.htaccess</a
- ></code> $B%U%!%$%k$G;HMQ$5$l$^$9!#%/%i%$%"%s%H$N%[%9%HL>!"(BIP
- $B%"%I%l%9$d(B <a href="../env.html">$B4D6-JQ?t(B</a
- >$B$H$7$F<hF@$5$l$?!"$=$NB>$N%j%/%(%9%H$NFCD'$K4p$E$$$F(B
- $B%"%/%;%9@)8f$r9T$J$&$3$H$,$G$-$^$9!#(B<directive
- module="mod_authz_host">Allow</directive> $B$H(B
- <directive module="mod_authz_host">Deny</directive> $B%G%#%l%/%F%#%V$O(B
- $B$I$N$h$&$J%/%i%$%"%s%H$K%"%/%;%9$r(B
- $B5v2D$9$k!"$7$J$$$+$r;XDj$9$k$?$a$K;HMQ$5$l$^$9!#0lJ}!"(B
- <directive module="mod_authz_host">Order</directive> $B%G%#%l%/%F%#%V$O(B
- $B%G%U%)%k%H$N%"%/%;%9>uBV$H!"(B
- <directive module="mod_authz_host">Allow</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$H$N$*8_$$$X$N1F6A$N;EJ}$r@_Dj$7$^$9!#(B
- </p>
-
- <p>$B%[%9%H$K$h$k%"%/%;%9@)8B$H%Q%9%o!<%I$K$h$kG'>Z$rF1;~$K(B
- $B9T$J$&$3$H$,2DG=$G$9!#$=$N>l9g!"$=$NFs$D$N@)8B$N4X78$r;XDj$9$k$?$a$K(B
- <directive module="core">Satisfy</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$^$9!#(B</p>
-
- <p>$B0lHLE*$K$O!"%"%/%;%9@)8B%G%#%l%/%F%#%V$O$9$Y$F$N%"%/%;%9%a%=%C%I(B
- (<code>GET</code>, <code>PUT</code>, <code>POST</code> $B$J$I(B)
- $B$KE,MQ$5$l$^$9!#$=$7$F!"$[$H$s$I$N>l9g$3$l$,K>$^$7$$F0:n$G$9!#(B
- $B$7$+$7!"(B<directive module="core" type="section">Limit</directive>
- $B%;%/%7%g%s$NCf$K%G%#%l%/%F%#%V$r=q$/$3$H$G!"(B
- $B0lIt$N%a%=%C%I$K$N$_@)8B$r$+$1$k$3$H$b$G$-$^$9!#(B</p>
-</summary>
-
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-
-<directivesynopsis>
-<name>Allow</name>
-<description>$B%5!<%P$N$"$kNN0h$K%"%/%;%9$G$-$k%[%9%H$r@)8f$9$k(B</description>
-<syntax> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p><directive>Allow</directive> $B%G%#%l%/%F%#%V$O$I$N%[%9%H$,(B
- $B%5!<%P$N$"$kNN0h$r%"%/%;%9$G$-$k$+$K1F6A$rM?$($^$9!#(B
- $B%"%/%;%9$O%[%9%HL>!"(BIP $B%"%I%l%9!"(BIP $B%"%I%l%9$NHO0O$d!"(B
- $B4D6-JQ?t$H$7$F<hF@$5$l$?!"$=$NB>$N%/%i%$%"%s%H$N%j%/%(%9%H$N(B
- $BFCD'$K$h$C$F@)8f$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$N:G=i$N0z?t$O>o$K(B <code>from</code> $B$G$9!#(B
- $B$=$l$KB3$/0z?t$O;0$D$N0c$C$?7A<0$,$"$j$^$9!#(B<code>Allow from
- all</code> $B$,;XDj$5$l$F$$$l$P!"$9$Y$F$N%[%9%H$K%"%/%;%9$r5v2D$7!"(B
- $B%"%/%;%9@)8B$O2<$G@bL@$5$l$F$$$k$h$&$K!"(B
- <directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$H(B <directive module="mod_authz_host">Order</directive>
- $B%G%#%l%/%F%#%V$N@_Dj$G7h$^$j$^$9!#(B
- $BFCDj$N%[%9%H$d%[%9%H72$K$N$_%5!<%P$X$N%"%/%;%9$r5v2D$9$k$?$a$K$O!"(B
- $B0J2<$N$I$l$+$N7A<0$G(B <em>host</em> $B$r;XDj$9$k$3$H$,$G$-$^$9(B:</p>
-
- <dl>
- <dt>$B%I%a%$%sL>(B ($B$N0lIt(B)</dt>
-
- <dd>
- <example><title>$BNc(B</title>
- Allow from apache.org
- </example>
- <p>$B$3$NJ8;zNs$K9g$&$+!"$3$l$G=*$o$kL>A0$N%[%9%H$N%"%/%;%9$,5v2D$5$l$^$9!#(B
- $B3FItJ,$,40A4$K9g$&$b$N$@$1$KE,MQ$5$l$^$9$N$G!">e$NNc$O(B
- <code>foo.apache.org</code> $B$K$O%^%C%A$7$^$9$,!"(B
- <code>fooapache.org</code> $B$K$O%^%C%A$7$^$;$s!#(B
- $B$3$N@_Dj$r$9$k$H!"(BApache $B$O(B
- <directive module="core">HostnameLookups</directive>
- $B$N@_Dj$K4X$o$i$:!"%/%i%$%"%s%H$N(B IP $B%"%I%l%9$KBP$7$F(B
- DNS $B$N(B 2 $B=E5U0z$-$r9T$J$$$^$9!#(B
- $B%[%9%HL>$+$i%*%j%8%J%k$N(B IP $B%"%I%l%9$r=g0z$-$7$^$9!#(B
- $B=g0z$-$H5U0z$-$,0lCW$7!"%[%9%HL>$,3:Ev$7$?>l9g$K$N$_!"(B
- $B%"%/%;%9$,5v2D$5$l$^$9!#(B</p></dd>
-
- <dt>$B40A4$J(B IP $B%"%I%l%9(B</dt>
-
- <dd>
- <example><title>$BNc(B</title>
- Allow from 10.1.2.3
- </example>
- <p>$B%"%/%;%9$r5v2D$9$k(B IP $B%"%I%l%9$G$9!#(B</p></dd>
-
- <dt>IP $B%"%I%l%9$N0lIt(B</dt>
-
- <dd>
- <example><title>$BNc(B</title>
- Allow from 10.1
- </example>
- <p>$B%5%V%M%C%H$N@)8BMQ$N!"(BIP
- $B%"%I%l%9$N:G=i$N0l$D$+$i;0$D$^$G$N%P%$%H$G$9!#(B</p></dd>
-
- <dt>$B%M%C%H%o!<%/(B/$B%M%C%H%^%9%/(B $B$NBP(B</dt>
-
- <dd>
- <example><title>$BNc(B</title>
- Allow from 10.1.0.0/255.255.0.0
- </example>
- <p>$B%M%C%H%o!<%/(B a.b.c.d $B$H%M%C%H%^%9%/(B w.x.y.z $B$G$9!#(B
- $B$h$j:YN3EY$N%5%V%M%C%H@)8BMQ$G$9!#(B</p></dd>
-
- <dt>$B%M%C%H%o!<%/(B/nnn CIDR $B;XDj(B</dt>
-
- <dd>
- <example><title>$BNc(B</title>
- Allow from 10.1.0.0/16
- </example>
- <p>$B%M%C%H%^%9%/$,(B nnn $B$N>e0L%S%C%H$,(B 1
- $B$H$J$C$F$$$k$b$N$+$i$J$k$3$H0J30$OA0$N$b$N$HF1$8$G$9!#(B</p></dd>
- </dl>
-
- <p>$BCm(B: $B:G8e$N;0$D$NNc$O$^$C$?$/F1$8%[%9%H$K9g$$$^$9!#(B</p>
-
-
- <p>IPv6 $B%"%I%l%9$H(B IPv6 $B$N%5%V%M%C%H$O0J2<$N$h$&$K;XDj$G$-$^$9(B:</p>
-
- <example>
- Allow from fe80::a00:20ff:fea7:ccea<br />
- Allow from fe80::a00:20ff:fea7:ccea/10
- </example>
-
- <p><directive>Allow</directive> $B%G%#%l%/%F%#%V$N0z?t$N;0$DL\$N7A<0$O!"(B
- <a href="../env.html">$B4D6-JQ?t(B</a>
- $B$NB8:_$K$h$j%"%/%;%9$N@)8f$r9T$J$($k$h$&$K$9$k$b$N$G$9!#(B
- <code>Allow from env=<var>env-variable</var></code>
- $B$,;XDj$5$l$F$$$k$H!"4D6-JQ?t(B <var>env-variable</var>
- $B$,B8:_$7$?>l9g$K%j%/%(%9%H$O%"%/%;%9$r5v2D$5$l$^$9!#%5!<%P$O(B
- <module>mod_setenvif</module>
- $B$N%G%#%l%/%F%#%V$K$h$j!"%/%i%$%"%s%H$N%j%/%(%9%H(B
- $B$NFCD'$K4p$E$$$F=@Fp$K4D6-JQ?t$r@_Dj$9$k5!G=$rDs6!$7$^$9!#(B
- $B$G$9$+$i!"$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$N(B
- <code>User-Agent</code> ($B%V%i%&%6$N<oN`(B)$B!"(B<code>Referer</code>
- $B$dB>$N(B HTTP $B%j%/%(%9%H$N%X%C%@%U%#!<%k%I$J$I$K4p$E$$$F(B
- $B%"%/%;%95v2D$r$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
- </p>
-
- <example><title>Example:</title>
- SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
- &lt;Directory /docroot&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=let_me_in<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B$3$N>l9g!"(Buser-agent $B$NJ8;zNs$,(B <code>KnockKnock/2.0</code>
- $B$G;O$^$k%V%i%&%6$N$_$,%"%/%;%9$r5v2D$5$l!"(B
- $BB>$N$b$N$O%"%/%;%9$r5qH]$5$l$^$9!#(B</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Deny</name>
-<description>$B%5!<%P$,%"%/%;%9$r5qH]$9$k%[%9%H$r@)8f$9$k(B</description>
-<syntax> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O%[%9%HL>!"(BIP
- $B%"%I%l%9!"4D6-JQ?t$K4p$E$$$F%5!<%P$X$N%"%/%;%9$r@)8B$7$^$9!#(B
- <directive>Deny</directive> $B%G%#%l%/%F%#%V$N0z?t$O(B <directive
- module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$H$^$C$?$/F1$8$G$9!#(B</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Order</name>
-<description>$B%G%U%)%k%H$N%"%/%;%92DG=$J>uBV$H!"(B<directive>Allow</directive> $B$H(B
-<directive>Deny</directive> $B$,I>2A$5$l$k=gHV$r@)8f$9$k(B</description>
-<syntax> Order <var>ordering</var></syntax>
-<default>Order Deny,Allow</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p><directive>Order</directive> $B%G%#%l%/%F%#%V$O%G%U%)%k%H$N%"%/%;%9$N>uBV$H(B
- <directive module="mod_authz_host">Allow</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$,I>2A$5$l$k=gHV$r@)8f$7$^$9!#(B
- <var>Ordering</var> $B$O0J2<$N$I$l$+$G$9!#(B</p>
-
- <dl>
- <dt><code>Deny,Allow</code></dt>
-
- <dd><directive module="mod_authz_host">Deny</directive> $B%G%#%l%/%F%#%V$,(B
- <directive module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$NA0$KI>2A$5$l$^$9!#(B
- $B%"%/%;%9$O%G%U%)%k%H$G5v2D$5$l$^$9!#(B<directive
- module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$K9g$o$J$$$+!"(B<directive module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$K9g$&%/%i%$%"%s%H$O%"%/%;%9$r5v2D$5$l$^$9!#(B</dd>
-
- <dt><code>Allow,Deny</code></dt>
-
- <dd><directive module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$,(B <directive
- module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$NA0$KI>2A$5$l$^$9!#(B
- $B%"%/%;%9$O%G%U%)%k%H$G5qH]$5$l$^$9!#(B<directive
- module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$K9g$o$J$$$+!"(B<directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$K9g$&%/%i%$%"%s%H$O%"%/%;%9$r5qH]$5$l$^$9!#(B
- </dd>
-
- <dt><code>Mutual-failure</code></dt>
-
- <dd><directive module="mod_authz_host">Allow</directive> $B$N%j%9%H$K8=$l$F!"(B
- <directive module="mod_authz_host">Deny</directive>
- $B$N%j%9%H$K8=$l$J$$%[%9%H$N$_$,%"%/%;%9$r5v2D$5$l$^$9!#(B
- $B$3$N=gHVIU$1$O(B <code>Order Allow,Deny</code> $B$HF1$88z2L$r;}$A!"(B
- $B$=$N@_Dj$NJ}$,9%$^$7$$$?$a$KHs?d>)$H$J$C$F$$$^$9!#(B</dd>
- </dl>
-
- <p>$B%-!<%o!<%I$O%3%s%^$GJ,N%$9$k$3$H$@$1$,2DG=$G$9!#(B
- $B4V$K(B<em>$B6uGr$,$"$C$F$O$$$1$^$;$s(B</em>$B!#$I$N>l9g$G$b!"(B<directive
- module="mod_authz_host">Allow</directive> $B$H(B
- <directive module="mod_authz_host">Deny</directive> $BJ8$O(B
- $BA4$FI>2A$5$l$k$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- </p>
-
- <p>$B0J2<$NNc$G$O!"(Bapache.org
- $B%I%a%$%s$N$9$Y$F$N%[%9%H$O%"%/%;%9$r5v2D$5$l$^$9!#(B
- $BB>$N$9$Y$F$N%[%9%H$O%"%/%;%9$r5qH]$5$l$^$9!#(B</p>
-
- <example>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from apache.org
- </example>
-
- <p>$B<!$NNc$G$O!"(Bfoo.apache.org $B%5%V%I%a%$%s$K$"$k%[%9%H0J30$N!"(B
- apache.org $B%I%a%$%s$N$9$Y$F$N%[%9%H$,%"%/%;%9$r5v2D$5$l$^$9!#(B
- apache.org
- $B%I%a%$%s$G$J$$%[%9%H$O!"%G%U%)%k%H$N>uBV$,%"%/%;%95qH]$N$?$a!"(B
- $B%5!<%P$X$N%"%/%;%9$r5qH]$5$l$^$9!#(B</p>
-
- <example>
- Order Allow,Deny<br />
- Allow from apache.org<br />
- Deny from foo.apache.org
- </example>
-
- <p>$B0lJ}!">e$NNc$N(B <directive>Order</directive> $B$,(B <code>Deny,Allow</code>
- $B$KJQ$o$C$F$$$l$P!"$9$Y$N%[%9%H$K%"%/%;%9$,5v2D$5$l$^$9!#(B
- $B$3$l$O!"@_Dj%U%!%$%kCf$N<B:]$N=gHV$K4X$o$i$:!"(B
- <code>Allow from apache.org</code> $B$,:G8e$KI>2A$5$l$F!"(B
- <code>Deny from foo.apache.org</code> $B$r>e=q$-$9$k$+$i$G$9!#(B
- <code>apache.org</code>
- $B%I%a%$%s$K$J$$%[%9%H$b!"%G%U%)%k%H$N>uBV$,(B <em>allow</em>
- $B$KJQ2=$9$k$?$a$K!"%"%/%;%9$r5v2D$5$l$^$9!#(B
- </p>
-
- <p><directive>Order</directive>
- $B%G%#%l%/%F%#%V$O%G%U%)%k%H$N%"%/%;%9$N>uBV$K1F6A$rM?$($k$N$G!"(B
- <directive module="mod_authz_host">Allow</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$,L5$/$F$b!"%5!<%P$N%"%/%;%9$K1F6A$rM?$($k$3$H$,$G$-$^$9!#(B
- $B$?$H$($P!"(B</p>
-
- <example>
- &lt;Directory /www&gt;<br />
- <indent>
- Order Allow,Deny<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B$O%G%U%)%k%H$N%"%/%;%9>uBV$,(B <em>deny</em> $B$K$J$k$?$a!"(B
- <code>/www</code> $B%G%#%l%/%H%j$X$N$9$Y$F$N%"%/%;%9$r5qH]$7$^$9!#(B
- </p>
-
- <p><directive>Order</directive>
- $B%G%#%l%/%F%#%V$O%5!<%P$N@_Dj=hM}$N3FCJ3,$G$@$1(B
- $B%"%/%;%9%G%#%l%/%F%#%V$N=hM}$N=gHV$rJQ99$7$^$9!#$3$l$O!"$?$H$($P!"(B
- <directive>Order</directive> $B%G%#%l%/%F%#%V$N@_Dj$K4X$o$i$:!"(B
- <directive module="core" type="section">Location</directive> $B%;%/%7%g%s$N(B
- <directive module="mod_authz_host">Allow</directive> $B%G%#%l%/%F%#%V$d(B
- <directive module="mod_authz_host">Deny</directive> $B%G%#%l%/%F%#%V$O!"(B
- <directive module="core" type="sectino">Directory</directive> $B%;%/%7%g%s$d(B
- <code>.htaccess</code> $B%U%!%$%k$N(B <directive
- module="mod_authz_host">Allow</directive>
- $B%G%#%l%/%F%#%V$d(B <directive module="mod_authz_host">Deny</directive>
- $B%G%#%l%/%F%#%V$h$j$b>o$K8e$KI>2A$5$l$k$H$$$&$3$H$r0UL#$7$^$9!#(B
- $B@_Dj%;%/%7%g%s$N%^!<%8$N>\:Y$K$D$$$F$O!"(B
- <a href="../sections.html">Directory,Location, Files
- $B%;%/%7%g%s$NF0:nJ}K!(B</a> $B$r;2>H$7$F$/$@$5$$!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_host.xml.ko b/docs/manual/mod/mod_authz_host.xml.ko
deleted file mode 100644
index 00ba9a04c6..0000000000
--- a/docs/manual/mod/mod_authz_host.xml.ko
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_host.xml.meta">
-
-<name>mod_authz_host</name>
-<description>È£½ºÆ® (À̸§À̳ª IP ÁÖ¼Ò)¸¦ »ç¿ëÇÑ ±×·ì ±ÇÇѺο©</description>
-<status>Base</status>
-<sourcefile>mod_authz_host.c</sourcefile>
-<identifier>authz_host_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p><directive module="core" type="section">Directory</directive>,
- <directive module="core" type="section">Files</directive>,
- <directive module="core" type="section">Location</directive>
- ¼½¼Ç°ú <code><a href="core.html#accessfilename">.htaccess</a></code>
- ÆÄÀÏ¿¡¼­ ¼­¹öÀÇ Æ¯Á¤ ºÎºÐÀÇ Á¢±ÙÀ» Á¦¾îÇϱâÀ§ÇØ
- <module>mod_authz_host</module>°¡ Á¦°øÇÏ´Â Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- Ŭ¶óÀ̾ðÆ®ÀÇ È£½ºÆ®¸í, IP ÁÖ¼Ò, <a
- href="../env.html">ȯ°æº¯¼ö</a>¿¡ ±â·ÏµÈ ¿äûÀÇ Æ¯¼º¿¡ µû¶ó
- Á¢±ÙÀ» Á¦¾îÇÑ´Ù. <directive
- module="mod_authz_host">Allow</directive>¿Í <directive
- module="mod_authz_host">Deny</directive> Áö½Ã¾î´Â ¾î¶²
- Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö¸¦ Áö½ÃÇÏ°í, <directive
- module="mod_authz_host">Order</directive> Áö½Ã¾î´Â ±âº»ÀûÀ¸·Î
- Á¢±ÙÀ» Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í ¾î¶»°Ô <directive
- module="mod_authz_host">Allow</directive> Áö½Ã¾î¿Í <directive
- module="mod_authz_host">Deny</directive> Áö½Ã¾î°¡ ¼­·Î ¿µÇâÀ»
- ¹ÌÄ¡´ÂÁö °áÁ¤ÇÑ´Ù.</p>
-
- <p>È£½ºÆ®±â¹Ý Á¢±ÙÁ¦ÇÑ°ú ¾ÏÈ£±â¹Ý ÀÎÁõÀ» µ¿½Ã¿¡ »ç¿ëÇÒ ¼öµµ
- ÀÖ´Ù. ÀÌ °æ¿ì <directive module="core">Satisfy</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¾î¶»°Ô µÎ Á¦ÇÑÀÌ ¼­·Î ¿µÇâÀ» ¹ÌÄ¡´ÂÁö
- °áÁ¤ÇÑ´Ù.</p>
-
- <p>ÀϹÝÀûÀ¸·Î Á¢±ÙÁ¦ÇÑ Áö½Ã¾î´Â (<code>GET</code>,
- <code>PUT</code>, <code>POST</code> µî) ¸ðµç ¸Þ¼­µå¿¡ Àû¿ëµÇ¸ç,
- ÀÌ ÇൿÀº ´ëºÎºÐÀÇ °æ¿ì ¹Ù¶÷Á÷ÇÏ´Ù. ±×·¯³ª <directive
- module="core" type="section">Limit</directive> ¼½¼Ç¾È¿¡
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ƯÁ¤ ¸Þ¼­µå¿¡¸¸ Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-
-<directivesynopsis>
-<name>Allow</name>
-<description>¼­¹öÀÇ ÀϺο¡ Á¢±ÙÇÒ ¼ö Àִ ȣ½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù</description>
-<syntax> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p><directive>Allow</directive> Áö½Ã¾î´Â ¾î¶² È£½ºÆ®°¡ ¼­¹öÀÇ
- ÀϺο¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö Áö½ÃÇÑ´Ù. È£½ºÆ®¸í, IP ÁÖ¼Ò, IP
- ÁÖ¼Ò¿µ¿ª, ȯ°æº¯¼ö¿¡ ±â·ÏµÈ ´Ù¸¥ Ư¼º¿¡ µû¶ó Á¢±ÙÀ» Á¶ÀýÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾îÀÇ Ã¹¹ø° ¾Æ±Ô¸ÕÆ®´Â Ç×»ó <code>from</code>ÀÌ´Ù.
- ´ÙÀ½ ¾Æ±Ô¸ÕÆ®¿¡´Â ¼¼°¡Áö Çü½ÄÀÌ ÀÖ´Ù. <code>Allow from all</code>À»
- »ç¿ëÇϸé, ¾Æ·¡¿¡¼­ ¼³¸íÇÒ <directive
- module="mod_authz_host">Deny</directive>¿Í <directive
- module="mod_authz_host">Order</directive> Áö½Ã¾î ¼³Á¤¿¡
- µû¶ó ¸ðµç È£½ºÆ®ÀÇ Á¢±ÙÀ» Çã°¡ÇÑ´Ù. ƯÁ¤ È£½ºÆ®¸¸ ¼­¹ö·Î
- Á¢±ÙÀ» Çã¿ëÇÏ·Á¸é ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î <em>host</em>¸¦ Áö½ÃÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt>È£½ºÆ®¸í (ÀϺÎ)</dt>
-
- <dd>
- <example><title>¿¹Á¦:</title>
- Allow from apache.org
- </example>
- <p>È£½ºÆ®¸íÀÌ ÀÌ ¹®ÀÚ¿­°ú °°°Å³ª ÀÌ ¹®ÀÚ¿­·Î ³¡³ª¸é Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ±×·¡¼­ ÀÌ °æ¿ì <code>foo.apache.org</code>´Â
- ÇØ´çµÇ°í, <code>fooapache.org</code>´Â ÇØ´çµÇÁö ¾Ê´Â´Ù.
- ÀÌ ¼³Á¤À» »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â <directive
- module="core">HostnameLookups</directive> Áö½Ã¾î ¼³Á¤°ú
- °ü°è¾øÀÌ Å¬¶óÀ̾ðÆ® IP ÁÖ¼Ò¸¦ °¡Áö°í Áߺ¹-¿ª DNS °Ë»öÀ»
- ÇÑ´Ù. Áï, È£½ºÆ®¸íÀ» ã±âÀ§ÇØ IP ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÀ» ÇÑ
- ÈÄ, ´Ù½Ã È£½ºÆ®¸íÀ¸·Î °Ë»öÇÏ¿© ¿ø·¡ IP ÁÖ¼Ò¿Í ÀÏÄ¡ÇÏ´ÂÁö
- È®ÀÎÇÑ´Ù. °á°ú°¡ °°°í È£½ºÆ®¸íÀÌ ¼³Á¤°ª¿¡ ÇØ´çÇϸé, Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù.</p></dd>
-
- <dt>IP ÁÖ¼Ò Àüü</dt>
-
- <dd>
- <example><title>¿¹Á¦:</title>
- Allow from 10.1.2.3
- </example>
- <p>Á¢±ÙÀ» Çã°¡Çϴ ȣ½ºÆ®ÀÇ IP ÁÖ¼Ò</p></dd>
-
- <dt>IP ÁÖ¼Ò ÀϺÎ</dt>
-
- <dd>
- <example><title>¿¹Á¦:</title>
- Allow from 10.1
- </example>
- <p>¼­ºê³×Æ®¿öÅ©·Î Á¦ÇÑÇϱâÀ§ÇØ IP ÁÖ¼Ò ¾ÕÀÇ 1¿¡¼­ 3
- ¹ÙÀÌÆ®.</p></dd>
-
- <dt>³×Æ®¿öÅ©/³Ý¸Å½ºÅ© ½Ö</dt>
-
- <dd>
- <example><title>¿¹Á¦:</title>
- Allow from 10.1.0.0/255.255.0.0
- </example>
- <p>³×Æ®¿öÅ© a.b.c.d¿Í ³Ý¸Å½ºÅ© w.x.y.z. ´õ ¼¼¹ÐÇÏ°Ô
- ¼­ºê³×Æ®¿öÅ©·Î Á¦ÇÑÇÒ¶§ »ç¿ëÇÑ´Ù.</p></dd>
-
- <dt>³×Æ®¿öÅ©/nnn CIDR ±Ô¾à</dt>
-
- <dd>
- <example><title>¿¹Á¦:</title>
- Allow from 10.1.0.0/16
- </example>
- <p>¾ÕÀÇ °æ¿ì¿Í °°Áö¸¸, »óÀ§ nnn°³ ºñÆ® °ªÀÌ 1ÀÎ ³Ý¸Å½ºÅ©¸¦
- »ç¿ëÇÑ´Ù.</p></dd>
- </dl>
-
- <p>¸¶Áö¸· ¼¼°¡Áö ¿¹´Â Á¤È®È÷ µ¿ÀÏÇÑ È£½ºÆ®µéÀ» ÁöĪÇÑ´Ù.</p>
-
- <p>´ÙÀ½°ú °°ÀÌ IPv6 ÁÖ¼Ò¿Í IPv6 ¼­ºê³×Æ®¿öÅ©¸¦ ÁöÁ¤ÇÒ ¼öµµ
- ÀÖ´Ù:</p>
-
- <example>
- Allow from fe80::a00:20ff:fea7:ccea<br />
- Allow from fe80::a00:20ff:fea7:ccea/10
- </example>
-
- <p><directive>Allow</directive> Áö½Ã¾î ¾Æ±Ô¸ÕÆ®ÀÇ ¼¼¹ø°
- Çü½ÄÀº <a href="../env.html">ȯ°æº¯¼ö</a> À¯¹«¿¡ µû¶ó Á¢±ÙÀ»
- Á¦¾îÇÑ´Ù. <code>Allow from env=<var>env-variable</var></code>À»
- »ç¿ëÇϸé, <var>env-variable</var> ȯ°æº¯¼ö°¡ Á¤ÀÇµÈ °æ¿ì
- Á¢±ÙÀ» Çã°¡ÇÑ´Ù. <module>mod_setenvif</module>°¡ Á¦°øÇÏ´Â
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© Ŭ¶óÀ̾ðÆ® ¿äûÀÇ Æ¯¼º¿¡ µû¶ó ÀÚÀ¯·Ó°Ô
- ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- Ŭ¶óÀ̾ðÆ® <code>User-Agent</code> (ºê¶ó¿ìÀú Á¾·ù),
- <code>Referer</code>, ´Ù¸¥ HTTP ¿äû Çì´õ¿¡ µû¶ó Á¢±ÙÀ»
- Çã°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in<br />
- &lt;Directory /docroot&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=let_me_in<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>ÀÌ °æ¿ì user-agent ¹®ÀÚ¿­ÀÌ <code>KnockKnock/2.0</code>À¸·Î
- ½ÃÀÛÇÏ´Â ºê¶ó¿ìÀúÀÇ Á¢±ÙÀº Çã¿ëÇÏ°í, ³ª¸ÓÁö´Â ¸ðµÎ °ÅºÎÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Deny</name>
-<description>¼­¹ö Á¢±ÙÀ» °ÅºÎÇÒ È£½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù</description>
-<syntax> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© È£½ºÆ®¸í, IP ÁÖ¼Ò, ȯ°æº¯¼ö¿¡ µû¶ó
- ¼­¹ö Á¢±ÙÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. <directive>Deny</directive>
- Áö½Ã¾îÀÇ ¾Æ±Ô¸ÕÆ®´Â <directive
- module="mod_authz_host">Allow</directive> Áö½Ã¾î¿Í µ¿ÀÏÇÏ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Order</name>
-<description>±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í
-<directive>Allow</directive>¿Í <directive>Deny</directive>
-󸮼ø¼­¸¦ Á¤ÇÑ´Ù.</description>
-<syntax> Order <var>ordering</var></syntax>
-<default>Order Deny,Allow</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
- <p><directive>Order</directive> Áö½Ã¾î´Â ±âº»ÀûÀ¸·Î Á¢±ÙÀ»
- Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í <directive
- module="mod_authz_host">Allow</directive>¿Í <directive
- module="mod_authz_host">Deny</directive> Áö½Ã¾î 󸮼ø¼­¸¦
- Á¤ÇÑ´Ù. <var>ordering</var>Àº ´ÙÀ½ Áß ÇϳªÀÌ´Ù</p>
-
- <dl>
- <dt><code>Deny,Allow</code></dt>
-
- <dd><directive module="mod_authz_host">Deny</directive>
- Áö½Ã¾î¸¦ <directive module="mod_authz_host">Allow</directive>
- Áö½Ã¾î º¸´Ù ¸ÕÀú »ìÆ캻´Ù. ±×¸®°í ±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÑ´Ù.
- <directive module="mod_authz_host">Deny</directive>³ª
- <directive module="mod_authz_host">Allow</directive> Áö½Ã¾î¿¡
- ÇØ´çµÇÁö ¾Ê´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</dd>
-
- <dt><code>Allow,Deny</code></dt>
-
- <dd><directive module="mod_authz_host">Allow</directive>
- Áö½Ã¾î¸¦ <directive
- module="mod_authz_host">Deny</directive> Áö½Ã¾î º¸´Ù ¸ÕÀú
- »ìÆ캻´Ù. ±×¸®°í ±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.
- <directive module="mod_authz_host">Deny</directive>³ª
- <directive module="mod_authz_host">Allow</directive> Áö½Ã¾î¿¡
- ÇØ´çµÇÁö ¾Ê´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</dd>
-
- <dt><code>Mutual-failure</code></dt>
-
- <dd><directive module="mod_authz_host">Deny</directive>
- ¸ñ·Ï¿¡´Â ¾È³ª¿À°í <directive
- module="mod_authz_host">Allow</directive> ¸ñ·Ï¿¡¸¸ ³ª¿À´Â
- È£½ºÆ®¸¸ Á¢±ÙÀ» Çã¿ëÇÑ´Ù. <code>Order Allow,Deny</code>¿Í
- °°Àº ÀÏÀ» Çϱ⶧¹®¿¡ »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
-
- <p>Å°¿öµå´Â ½°Ç¥·Î¸¸ ±¸ºÐÇÑ´Ù; »çÀÌ¿¡ <em>°ø¹éÀÌ ÀÖÀ¸¸é
- ¾ÈµÈ´Ù.</em> ¸ðµç °æ¿ì <directive
- module="mod_authz_host">Allow</directive>¿Í <directive
- module="mod_authz_host">Deny</directive> ¸ðµÎ »ìÆ캽À»
- ¸í½ÉÇ϶ó.</p>
-
- <p>¾Æ·¡ ¿¹¿¡¼­ apache.org µµ¸ÞÀÎÀÇ ¸ðµç È£½ºÆ®ÀÇ Á¢±ÙÀº
- Çã¿ëÇÏÁö¸¸, ´Ù¸¥ È£½ºÆ®´Â ¸ðµÎ °ÅºÎÇÑ´Ù.</p>
-
- <example>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from apache.org
- </example>
-
- <p>¾Æ·¡ ¿¹¿¡¼­ foo.apache.org ÇÏÀ§µµ¸ÞÀο¡ Àִ ȣ½ºÆ®¸¸
- °ÅºÎÇÏ°í, apache.org µµ¸ÞÀο¡ Àִ ȣ½ºÆ®´Â ¸ðµÎ Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î Á¢±ÙÀ» °ÅºÎÇϱ⶧¹®¿¡ apache.org µµ¸ÞÀο¡
- ¼ÓÇÏÁö ¾Ê´Â È£½ºÆ®´Â Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
- <example>
- Order Allow,Deny<br />
- Allow from apache.org<br />
- Deny from foo.apache.org
- </example>
-
- <p>¹Ý´ë·Î À§ÀÇ <directive>Order</directive>¸¦
- <code>Deny,Allow</code>·Î º¯°æÇϸé, ¸ðµç È£½ºÆ®ÀÇ Á¢±ÙÀ»
- Çã¿ëÇÑ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­ Áö½Ã¾î°¡ ³ª¿À´Â ¼ø¼­¿Í °ü°è¾øÀÌ
- <code>Allow from apache.org</code>¸¦ Á¦ÀÏ ¸¶Áö¸·¿¡ ó¸®ÇÏ¿©
- <code>Deny from foo.apache.org</code>ÀÇ È¿°ú¸¦ ¹«½ÃÇϱâ
- ¶§¹®ÀÌ´Ù. ¶Ç, ±âº»ÀûÀ¸·Î Á¢±ÙÀ» <em>Çã°¡</em>ÇϹǷÎ
- <code>apache.org</code> µµ¸ÞÀο¡ ¼ÓÇÏÁö ¾Ê´Â È£½ºÆ®µµ ¸ðµÎ
- Á¢±ÙÀ» Çã°¡ÇÑ´Ù.</p>
-
- <p><directive>Order</directive> Áö½Ã¾î´Â ±âº»ÀûÀ¸·Î Á¢±ÙÀ»
- Çã¿ëÇÒÁö °ÅºÎÇÒÁö¸¦ Á¤Çϱ⶧¹®¿¡ <directive
- module="mod_authz_host">Allow</directive>³ª <directive
- module="mod_authz_host">Deny</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏÁö
- ¾Ê¾Æµµ Á¢±Ù°¡´É ¿©ºÎ¿¡ ¿µÇâÀ» ÁØ´Ù. ¿¹¸¦ µé¾î,</p>
-
- <example>
- &lt;Directory /www&gt;<br />
- <indent>
- Order Allow,Deny<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>´Â ±âº»ÀûÀ¸·Î Á¢±ÙÀ» <em>°ÅºÎ</em>Çϱ⶧¹®¿¡
- <code>/www</code> µð·ºÅ丮¿¡ ´ëÇÑ ¸ðµç Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
- <p><directive>Order</directive> Áö½Ã¾î°¡ Á¤ÇÏ´Â Á¢±Ù Áö½Ã¾î
- 󸮼ø¼­´Â ÇØ´ç ¼­¹ö¼³Á¤ 󸮴ܰ迡¸¸ ¿µÇâÀ» ÁØ´Ù. Áï,
- <directive>Order</directive> Áö½Ã¾î ¼³Á¤°ú °ü°è¾øÀÌ <directive
- module="core" type="section">Location</directive> ¼½¼Ç ¾È¿¡
- ÀÖ´Â <directive module="mod_authz_host">Allow</directive>³ª
- <directive module="mod_authz_host">Deny</directive> Áö½Ã¾î´Â
- <directive module="core" type="section">Directory</directive>
- ¼½¼ÇÀ̳ª <code>.htaccess</code> ÆÄÀÏ¿¡ ÀÖ´Â <directive
- module="mod_authz_host">Allow</directive>¿Í <directive
- module="mod_authz_host">Deny</directive> Áö½Ã¾î¸¦ ¸ðµÎ ó¸®ÇÑ
- ÈÄ¿¡ ó¸®ÇÑ´Ù. ¼³Á¤ ¼½¼ÇµéÀÌ °áÇÕÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­´Â <a
- href="../sections.html">¾î¶»°Ô Directory, Location, Files
- ¼½¼ÇÀÌ µ¿ÀÛÇϳª</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_host.xml.meta b/docs/manual/mod/mod_authz_host.xml.meta
deleted file mode 100644
index dbf3c742b1..0000000000
--- a/docs/manual/mod/mod_authz_host.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authz_host</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authz_owner.html b/docs/manual/mod/mod_authz_owner.html
deleted file mode 100644
index e0ab78af4e..0000000000
--- a/docs/manual/mod/mod_authz_owner.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_authz_owner.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authz_owner.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authz_owner.html.en b/docs/manual/mod/mod_authz_owner.html.en
deleted file mode 100644
index ef2c79fcd9..0000000000
--- a/docs/manual/mod/mod_authz_owner.html.en
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_owner - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authz_owner</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_owner.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_owner.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Authorization based on file ownership</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authz_owner_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authz_owner.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module authorizes access to files by comparing the userid used
- for HTTP authentication (the web userid) with the file-system owner or
- group of the requested file. The supplied username and password
- must be already properly verified by an authentication module,
- such as <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> or
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>. <code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code>
- recognizes two arguments for the <code class="directive"><a href="../mod/core.html#require">Require</a></code> directive, <code>file-owner</code> and
- <code>file-group</code>, as follows:</p>
-
- <dl>
- <dt><code>file-owner</code></dt>
- <dd>The supplied web-username must match the system's name for the
- owner of the file being requested. That is, if the operating system
- says the requested file is owned by <code>jones</code>, then the
- username used to access it through the web must be <code>jones</code>
- as well.</dd>
-
- <dt><code>file-group</code></dt>
- <dd>The name of the system group that owns the file must be present
- in a group database, which is provided, for example, by <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code> or <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>,
- and the web-username must be a member of that group. For example, if
- the operating system says the requested file is owned by (system)
- group <code>accounts</code>, the group <code>accounts</code> must
- appear in the group database and the web-username used in the request
- must be a member of that group.</dd>
- </dl>
-
- <div class="note"><h3>Note</h3>
- <p>If <code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code> is used in order to authorize
- a resource that is not actually present in the filesystem
- (<em>i.e.</em> a virtual resource), it will deny the access.</p>
-
- <p>Particularly it will never authorize <a href="../content-negotiation.html#multiviews">content negotiated
- "MultiViews"</a> resources.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Configuration Examples</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Configuration Examples</a></h2>
-
- <h3><a name="examples.file-owner" id="examples.file-owner">Require file-owner</a></h3>
- <p>Consider a multi-user system running the Apache Web server, with
- each user having his or her own files in <code>~/public_html/private</code>. Assuming that there is a single
- <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> database
- that lists all of their web-usernames, and that these usernames match
- the system's usernames that actually own the files on the server, then
- the following stanza would allow only the user himself access to his
- own files. User <code>jones</code> would not be allowed to access
- files in <code>/home/smith/public_html/private</code> unless they
- were owned by <code>jones</code> instead of <code>smith</code>.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/private&gt;<br />
- <span class="indent">
- AuthType Basic<br />
- AuthName MyPrivateFiles<br />
- AuthBasicProvider dbm<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- Satisfy All<br />
- Require file-owner<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
- <h3><a name="examples.file-group" id="examples.file-group">Require file-group</a></h3>
- <p>Consider a system similar to the one described above, but with
- some users that share their project files in
- <code>~/public_html/project-foo</code>. The files are owned by the
- system group <code>foo</code> and there is a single <code class="directive"><a href="../mod/mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code> database that
- contains all of the web-usernames and their group membership,
- <em>i.e.</em> they must be at least member of a group named
- <code>foo</code>. So if <code>jones</code> and <code>smith</code>
- are both member of the group <code>foo</code>, then both will be
- authorized to access the <code>project-foo</code> directories of
- each other.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/project-foo&gt;<br />
- <span class="indent">
- AuthType Basic<br />
- AuthName "Project Foo Files"<br />
- AuthBasicProvider dbm<br />
- <br />
- # combined user/group database<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- AuthDBMGroupFile /usr/local/apache2/etc/.htdbm-all<br />
- <br />
- Satisfy All<br />
- Require file-group<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzOwnerAuthoritative" id="AuthzOwnerAuthoritative">AuthzOwnerAuthoritative</a> <a name="authzownerauthoritative" id="authzownerauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzOwnerAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzOwnerAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_owner</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthzOwnerAuthoritative</code>
- directive explicitly to <code>Off</code> allows for
- user authorization to be passed on to lower level modules (as defined
- in the <code>modules.c</code> files) if:</p>
-
- <ul>
- <li>in the case of <code>file-owner</code> the file-system owner does not
- match the supplied web-username or could not be determined, or</li>
-
- <li>in the case of <code>file-group</code> the file-system group does not
- contain the supplied web-username or could not be determined.</li>
- </ul>
-
- <p>Note that setting the value to <code>Off</code> also allows the
- combination of <code>file-owner</code> and <code>file-group</code>, so
- access will be allowed if either one or the other (or both) match.</p>
-
- <p>By default, control is not passed on and an authorization failure
- will result in an "Authentication Required" reply. Not
- setting it to <code>Off</code> thus keeps the system secure and forces
- an NCSA compliant behaviour.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_owner.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_owner.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_owner.html.ko.euc-kr b/docs/manual/mod/mod_authz_owner.html.ko.euc-kr
deleted file mode 100644
index b6a74b857f..0000000000
--- a/docs/manual/mod/mod_authz_owner.html.ko.euc-kr
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_owner - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authz_owner</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_owner.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_owner.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀÏ ¼ÒÀ¯ÀÚ¸¦ ÀÌ¿ëÇÑ ±ÇÇѺο©</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authz_owner_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authz_owner.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº HTTP ÀÎÁõ¿¡ »ç¿ëÇÑ »ç¿ëÀÚ ¾ÆÀ̵ð(À¥ »ç¿ëÀÚ
- ¾ÆÀ̵ð)¸¦ ¿äûÇÑ ÆÄÀÏÀÇ ÆÄÀϽýºÅÛ ¼ÒÀ¯ÀÚ/±×·ì°ú ºñ±³ÇÏ¿©
- ÆÄÀÏÀÇ Á¢±Ù±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù. ¿©±â¼­ »ç¿ëÀÚ¸í°ú ¾ÏÈ£´Â À̹Ì
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>À̳ª
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> °°Àº ÀÎÁõ¸ðµâÀÇ È®ÀÎÀ»
- °ÅÃÆ´Ù. <code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code>´Â <code class="directive"><a href="../mod/core.html#require">Require</a></code> Áö½Ã¾îÀÇ ´ÙÀ½ µÎ ¾Æ±Ô¸ÕÆ®,
- <code>file-owner</code>¿Í <code>file-group</code>À» ó¸®ÇÑ´Ù:</p>
-
- <dl>
- <dt><code>file-owner</code></dt>
- <dd>À¥ »ç¿ëÀÚ¸íÀÌ ¿äûÇÑ ÆÄÀÏ ¼ÒÀ¯ÀÚÀÇ ½Ã½ºÅÛ À̸§°ú °°¾Æ¾ß
- ÇÑ´Ù. Áï, ¿î¿µÃ¼Á¦°¡ ¿äûÇÑ ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ°¡
- <code>jones</code>¶ó¸é, À¥À» ÅëÇØ ÆÄÀÏ¿¡ Á¢±ÙÇÏ´Â »ç¿ëÀÚµµ
- ¸¶Âù°¡Áö·Î <code>jones</code>À̾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>file-group</code></dt>
- <dd>ÆÄÀÏÀ» ¼ÒÀ¯ÇÑ ½Ã½ºÅÛ ±×·ì¸íÀÌ
- <code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code>À̳ª
- <code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code>°ú °°Àº ±×·ì µ¥ÀÌÅͺ£À̽º¿¡
- ÀÖ°í, À¥ »ç¿ëÀÚ¸íÀÌ ÇØ´ç ±×·ì¿¡ ¼ÓÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î,
- ¿î¿µÃ¼Á¦°¡ ¿äûÇÑ ÆÄÀÏÀ» <code>accounts</code> (½Ã½ºÅÛ)
- ±×·ìÀÌ ¼ÒÀ¯ÇÏ°í ÀÖ´Ù¸é, ±×·ì µ¥ÀÌÅͺ£À̽º¿¡
- <code>accounts</code>¶ó´Â ±×·ìÀÌ ÀÖ°í ¿äû¿¡ »ç¿ëÇÑ À¥
- »ç¿ëÀÚ¸íÀÌ ±× ±×·ì¿¡ ¼ÓÇØ¾ß ÇÑ´Ù.</dd>
- </dl>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code>°¡ ½ÇÁ¦·Î ÆÄÀϽýºÅÛ¿¡
- ÀÖÁö ¾Ê´Â ÀÚ¿øÀ» (<em>Áï,</em> °¡»ó ÀÚ¿ø) ±ÇÇѺο©ÇÑ´Ù¸é,
- Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
- <p>ƯÈ÷ <a href="../content-negotiation.html#multiviews">³»¿ëÇù»óÇÑ
- "MultiViews"</a> ÀÚ¿øÀ» ±ÇÇѺο©ÇÏÁö ¾Ê´Â´Ù.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzownerauthoritative">AuthzOwnerAuthoritative</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">¼³Á¤ ¿¹Á¦</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¼³Á¤ ¿¹Á¦</a></h2>
-
- <h3><a name="examples.file-owner" id="examples.file-owner">Require file-owner</a></h3>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¿î¿µÇÏ´Â ´ÙÁß»ç¿ëÀÚ ½Ã½ºÅÛ¿¡¼­ °¢ »ç¿ëÀÚ°¡
- <code>~/public_html/private</code>¿¡ ÀÚ½ÅÀÇ ÆÄÀÏÀ» ÀúÀåÇÑ´Ù°í
- °¡Á¤ÇÏÀÚ. ¸ðµç À¥ »ç¿ëÀÚ¸íÀ» ÀúÀåÇÏ´Â <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>
- µ¥ÀÌÅͺ£À̽º°¡ ÀÖ°í, ¿©±â¿¡ ÀúÀåµÈ »ç¿ëÀÚ¸íÀº ¼­¹ö¿¡¼­
- ½ÇÁ¦ ÆÄÀÏÀ» ¼ÒÀ¯ÇÏ´Â ½Ã½ºÅÛ »ç¿ëÀÚ¸í°ú µ¿ÀÏÇÏ´Ù. ÀÌ °æ¿ì
- ¾Æ·¡ ¼³Á¤Àº ÆÄÀÏ ¼ÒÀ¯ÀÚ¿¡°Ô¸¸ Á¢±ÙÀ» Çã¿ëÇÑ´Ù. »ç¿ëÀÚ
- <code>jones</code>´Â ÆÄÀÏÀ» <code>jones</code>°¡ ¾Æ´Ñ
- <code>smith</code>°¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÇÑ
- <code>/home/smith/public_html/private</code>¿¡ ÀÖ´Â ÆÄÀÏ¿¡
- Á¢±ÙÇÒ ¼ö ¾ø´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/private&gt;<br />
- <span class="indent">
- AuthType Basic<br />
- AuthName MyPrivateFiles<br />
- AuthBasicProvider dbm<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- Satisfy All<br />
- Require file-owner<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
- <h3><a name="examples.file-group" id="examples.file-group">Require file-group</a></h3>
- <p>À§¿Í »óȲÀÌ ºñ½ÁÇÏÁö¸¸ ¿©·¯¸íÀÌ
- <code>~/public_html/project-foo</code>¿¡ ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ»
- °øÀ¯ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ÆÄÀϵéÀº ½Ã½ºÅÛ ±×·ì <code>foo</code>°¡
- ¼ÒÀ¯Çϸç, ¸ðµç À¥ »ç¿ëÀÚ¸í°ú »ç¿ëÀÚ ±×·ìÀ» ±â·ÏÇÏ´Â <code class="directive"><a href="../mod/mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></code>
- µ¥ÀÌÅͺ£À̽º°¡ ÀÖ´Ù. <em>Áï,</em> ÃÖ¼ÒÇÑ <code>foo</code>¶ó´Â
- ±×·ì¿¡ ±¸¼º¿øÀÌ ÀÖ´Ù. <code>jones</code>¿Í
- <code>smith</code>°¡ ¸ðµÎ ±×·ì <code>foo</code>ÀÇ
- ±¸¼º¿øÀ̶ó¸é, µÑ ¸ðµÎ <code>project-foo</code> µð·ºÅ丮¿¡
- Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Directory /home/*/public_html/project-foo&gt;<br />
- <span class="indent">
- AuthType Basic<br />
- AuthName "Project Foo Files"<br />
- AuthBasicProvider dbm<br />
- <br />
- # combined user/group database<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- AuthDBMGroupFile /usr/local/apache2/etc/.htdbm-all<br />
- <br />
- Satisfy All<br />
- Require file-group<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzOwnerAuthoritative" id="AuthzOwnerAuthoritative">AuthzOwnerAuthoritative</a> <a name="authzownerauthoritative" id="authzownerauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthzOwnerAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthzOwnerAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_owner</td></tr>
-</table>
- <p><code class="directive">AuthzOwnerAuthoritative</code> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤ÇÏ¸é ´ÙÀ½°ú °°Àº °æ¿ì »ç¿ëÀÚ
- ±ÇÇѺο©¸¦ (<code>modules.c</code> ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ
- ¸ðµâ·Î ³Ñ°ÜÁØ´Ù.</p>
-
- <ul>
- <li><code>file-owner</code>¸¦ »ç¿ëÇϸé ÆÄÀϽýºÅÛ ¼ÒÀ¯ÀÚ¸¦
- ¾Ë ¼ö ¾ø°Å³ª ÁÖ¾îÁø À¥ »ç¿ëÀÚ¸í°ú ´Ù¸¥ °æ¿ì</li>
-
- <li><code>file-group</code>À» »ç¿ëÇϸé ÆÄÀϽýºÅÛ ±×·ìÀ»
- ¾Ë ¼ö ¾ø°Å³ª ÁÖ¾îÁø À¥ »ç¿ëÀÚ¸íÀÌ ±¸¼º¿øÀÌ ¾Æ´Ñ °æ¿ì.</li>
- </ul>
-
- <p>¶Ç, °ªÀ» <code>Off</code>·Î ¼³Á¤Çϸé
- <code>file-owner</code>¿Í <code>file-group</code>À» °áÇÕÇÏ¿©,
- µÑ Áß Çϳª¸¸ ¸¸Á·Çصµ Á¢±ÙÀ» Çã°¡ÇÑ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â ±×·ìÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ <code>Off</code>·Î ¼³Á¤ÇÏÁö¾ÊÀ¸¸é
- ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_owner.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_owner.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_owner.xml b/docs/manual/mod/mod_authz_owner.xml
deleted file mode 100644
index 94cf8b3680..0000000000
--- a/docs/manual/mod/mod_authz_owner.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_owner.xml.meta">
-
-<name>mod_authz_owner</name>
-<description>Authorization based on file ownership</description>
-<status>Extension</status>
-<sourcefile>mod_authz_owner.c</sourcefile>
-<identifier>authz_owner_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module authorizes access to files by comparing the userid used
- for HTTP authentication (the web userid) with the file-system owner or
- group of the requested file. The supplied username and password
- must be already properly verified by an authentication module,
- such as <module>mod_auth_basic</module> or
- <module>mod_auth_digest</module>. <module>mod_authz_owner</module>
- recognizes two arguments for the <directive module="core"
- >Require</directive> directive, <code>file-owner</code> and
- <code>file-group</code>, as follows:</p>
-
- <dl>
- <dt><code>file-owner</code></dt>
- <dd>The supplied web-username must match the system's name for the
- owner of the file being requested. That is, if the operating system
- says the requested file is owned by <code>jones</code>, then the
- username used to access it through the web must be <code>jones</code>
- as well.</dd>
-
- <dt><code>file-group</code></dt>
- <dd>The name of the system group that owns the file must be present
- in a group database, which is provided, for example, by <module
- >mod_authz_groupfile</module> or <module>mod_authz_dbm</module>,
- and the web-username must be a member of that group. For example, if
- the operating system says the requested file is owned by (system)
- group <code>accounts</code>, the group <code>accounts</code> must
- appear in the group database and the web-username used in the request
- must be a member of that group.</dd>
- </dl>
-
- <note><title>Note</title>
- <p>If <module>mod_authz_owner</module> is used in order to authorize
- a resource that is not actually present in the filesystem
- (<em>i.e.</em> a virtual resource), it will deny the access.</p>
-
- <p>Particularly it will never authorize <a
- href="../content-negotiation.html#multiviews">content negotiated
- "MultiViews"</a> resources.</p>
- </note>
-</summary>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<section id="examples"><title>Configuration Examples</title>
-
- <section id="examples.file-owner"><title>Require file-owner</title>
- <p>Consider a multi-user system running the Apache Web server, with
- each user having his or her own files in <code
- >~/public_html/private</code>. Assuming that there is a single
- <directive module="mod_authn_dbm">AuthDBMUserFile</directive> database
- that lists all of their web-usernames, and that these usernames match
- the system's usernames that actually own the files on the server, then
- the following stanza would allow only the user himself access to his
- own files. User <code>jones</code> would not be allowed to access
- files in <code>/home/smith/public_html/private</code> unless they
- were owned by <code>jones</code> instead of <code>smith</code>.</p>
-
- <example>
- &lt;Directory /home/*/public_html/private&gt;<br />
- <indent>
- AuthType Basic<br />
- AuthName MyPrivateFiles<br />
- AuthBasicProvider dbm<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- Satisfy All<br />
- Require file-owner<br />
- </indent>
- &lt;/Directory&gt;
- </example>
- </section>
-
- <section id="examples.file-group"><title>Require file-group</title>
- <p>Consider a system similar to the one described above, but with
- some users that share their project files in
- <code>~/public_html/project-foo</code>. The files are owned by the
- system group <code>foo</code> and there is a single <directive
- module="mod_authz_dbm">AuthDBMGroupFile</directive> database that
- contains all of the web-usernames and their group membership,
- <em>i.e.</em> they must be at least member of a group named
- <code>foo</code>. So if <code>jones</code> and <code>smith</code>
- are both member of the group <code>foo</code>, then both will be
- authorized to access the <code>project-foo</code> directories of
- each other.</p>
-
- <example>
- &lt;Directory /home/*/public_html/project-foo&gt;<br />
- <indent>
- AuthType Basic<br />
- AuthName "Project Foo Files"<br />
- AuthBasicProvider dbm<br />
- <br />
- # combined user/group database<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- AuthDBMGroupFile /usr/local/apache2/etc/.htdbm-all<br />
- <br />
- Satisfy All<br />
- Require file-group<br />
- </indent>
- &lt;/Directory&gt;
- </example>
- </section>
-</section>
-
-<directivesynopsis>
-<name>AuthzOwnerAuthoritative</name>
-<description>Sets whether authorization will be passed on to lower level
-modules</description>
-<syntax>AuthzOwnerAuthoritative On|Off</syntax>
-<default>AuthzOwnerAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthzOwnerAuthoritative</directive>
- directive explicitly to <code>Off</code> allows for
- user authorization to be passed on to lower level modules (as defined
- in the <code>modules.c</code> files) if:</p>
-
- <ul>
- <li>in the case of <code>file-owner</code> the file-system owner does not
- match the supplied web-username or could not be determined, or</li>
-
- <li>in the case of <code>file-group</code> the file-system group does not
- contain the supplied web-username or could not be determined.</li>
- </ul>
-
- <p>Note that setting the value to <code>Off</code> also allows the
- combination of <code>file-owner</code> and <code>file-group</code>, so
- access will be allowed if either one or the other (or both) match.</p>
-
- <p>By default, control is not passed on and an authorization failure
- will result in an "Authentication Required" reply. Not
- setting it to <code>Off</code> thus keeps the system secure and forces
- an NCSA compliant behaviour.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_owner.xml.ko b/docs/manual/mod/mod_authz_owner.xml.ko
deleted file mode 100644
index 403a448bd5..0000000000
--- a/docs/manual/mod/mod_authz_owner.xml.ko
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_owner.xml.meta">
-
-<name>mod_authz_owner</name>
-<description>ÆÄÀÏ ¼ÒÀ¯ÀÚ¸¦ ÀÌ¿ëÇÑ ±ÇÇѺο©</description>
-<status>Extension</status>
-<sourcefile>mod_authz_owner.c</sourcefile>
-<identifier>authz_owner_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº HTTP ÀÎÁõ¿¡ »ç¿ëÇÑ »ç¿ëÀÚ ¾ÆÀ̵ð(À¥ »ç¿ëÀÚ
- ¾ÆÀ̵ð)¸¦ ¿äûÇÑ ÆÄÀÏÀÇ ÆÄÀϽýºÅÛ ¼ÒÀ¯ÀÚ/±×·ì°ú ºñ±³ÇÏ¿©
- ÆÄÀÏÀÇ Á¢±Ù±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù. ¿©±â¼­ »ç¿ëÀÚ¸í°ú ¾ÏÈ£´Â À̹Ì
- <module>mod_auth_basic</module>À̳ª
- <module>mod_auth_digest</module> °°Àº ÀÎÁõ¸ðµâÀÇ È®ÀÎÀ»
- °ÅÃÆ´Ù. <module>mod_authz_owner</module>´Â <directive
- module="core">Require</directive> Áö½Ã¾îÀÇ ´ÙÀ½ µÎ ¾Æ±Ô¸ÕÆ®,
- <code>file-owner</code>¿Í <code>file-group</code>À» ó¸®ÇÑ´Ù:</p>
-
- <dl>
- <dt><code>file-owner</code></dt>
- <dd>À¥ »ç¿ëÀÚ¸íÀÌ ¿äûÇÑ ÆÄÀÏ ¼ÒÀ¯ÀÚÀÇ ½Ã½ºÅÛ À̸§°ú °°¾Æ¾ß
- ÇÑ´Ù. Áï, ¿î¿µÃ¼Á¦°¡ ¿äûÇÑ ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ°¡
- <code>jones</code>¶ó¸é, À¥À» ÅëÇØ ÆÄÀÏ¿¡ Á¢±ÙÇÏ´Â »ç¿ëÀÚµµ
- ¸¶Âù°¡Áö·Î <code>jones</code>À̾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>file-group</code></dt>
- <dd>ÆÄÀÏÀ» ¼ÒÀ¯ÇÑ ½Ã½ºÅÛ ±×·ì¸íÀÌ
- <module>mod_authz_groupfile</module>À̳ª
- <module>mod_authz_dbm</module>°ú °°Àº ±×·ì µ¥ÀÌÅͺ£À̽º¿¡
- ÀÖ°í, À¥ »ç¿ëÀÚ¸íÀÌ ÇØ´ç ±×·ì¿¡ ¼ÓÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î,
- ¿î¿µÃ¼Á¦°¡ ¿äûÇÑ ÆÄÀÏÀ» <code>accounts</code> (½Ã½ºÅÛ)
- ±×·ìÀÌ ¼ÒÀ¯ÇÏ°í ÀÖ´Ù¸é, ±×·ì µ¥ÀÌÅͺ£À̽º¿¡
- <code>accounts</code>¶ó´Â ±×·ìÀÌ ÀÖ°í ¿äû¿¡ »ç¿ëÇÑ À¥
- »ç¿ëÀÚ¸íÀÌ ±× ±×·ì¿¡ ¼ÓÇØ¾ß ÇÑ´Ù.</dd>
- </dl>
-
- <note><title>ÁÖÀÇ</title>
- <p><module>mod_authz_owner</module>°¡ ½ÇÁ¦·Î ÆÄÀϽýºÅÛ¿¡
- ÀÖÁö ¾Ê´Â ÀÚ¿øÀ» (<em>Áï,</em> °¡»ó ÀÚ¿ø) ±ÇÇѺο©ÇÑ´Ù¸é,
- Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
- <p>ƯÈ÷ <a
- href="../content-negotiation.html#multiviews">³»¿ëÇù»óÇÑ
- "MultiViews"</a> ÀÚ¿øÀ» ±ÇÇѺο©ÇÏÁö ¾Ê´Â´Ù.</p>
- </note>
-</summary>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<section id="examples"><title>¼³Á¤ ¿¹Á¦</title>
-
- <section id="examples.file-owner"><title>Require file-owner</title>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¿î¿µÇÏ´Â ´ÙÁß»ç¿ëÀÚ ½Ã½ºÅÛ¿¡¼­ °¢ »ç¿ëÀÚ°¡
- <code>~/public_html/private</code>¿¡ ÀÚ½ÅÀÇ ÆÄÀÏÀ» ÀúÀåÇÑ´Ù°í
- °¡Á¤ÇÏÀÚ. ¸ðµç À¥ »ç¿ëÀÚ¸íÀ» ÀúÀåÇÏ´Â <directive
- module="mod_authn_dbm">AuthDBMUserFile</directive>
- µ¥ÀÌÅͺ£À̽º°¡ ÀÖ°í, ¿©±â¿¡ ÀúÀåµÈ »ç¿ëÀÚ¸íÀº ¼­¹ö¿¡¼­
- ½ÇÁ¦ ÆÄÀÏÀ» ¼ÒÀ¯ÇÏ´Â ½Ã½ºÅÛ »ç¿ëÀÚ¸í°ú µ¿ÀÏÇÏ´Ù. ÀÌ °æ¿ì
- ¾Æ·¡ ¼³Á¤Àº ÆÄÀÏ ¼ÒÀ¯ÀÚ¿¡°Ô¸¸ Á¢±ÙÀ» Çã¿ëÇÑ´Ù. »ç¿ëÀÚ
- <code>jones</code>´Â ÆÄÀÏÀ» <code>jones</code>°¡ ¾Æ´Ñ
- <code>smith</code>°¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÇÑ
- <code>/home/smith/public_html/private</code>¿¡ ÀÖ´Â ÆÄÀÏ¿¡
- Á¢±ÙÇÒ ¼ö ¾ø´Ù.</p>
-
- <example>
- &lt;Directory /home/*/public_html/private&gt;<br />
- <indent>
- AuthType Basic<br />
- AuthName MyPrivateFiles<br />
- AuthBasicProvider dbm<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- Satisfy All<br />
- Require file-owner<br />
- </indent>
- &lt;/Directory&gt;
- </example>
- </section>
-
- <section id="examples.file-group"><title>Require file-group</title>
- <p>À§¿Í »óȲÀÌ ºñ½ÁÇÏÁö¸¸ ¿©·¯¸íÀÌ
- <code>~/public_html/project-foo</code>¿¡ ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ»
- °øÀ¯ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ÆÄÀϵéÀº ½Ã½ºÅÛ ±×·ì <code>foo</code>°¡
- ¼ÒÀ¯Çϸç, ¸ðµç À¥ »ç¿ëÀÚ¸í°ú »ç¿ëÀÚ ±×·ìÀ» ±â·ÏÇÏ´Â <directive
- module="mod_authz_dbm">AuthDBMGroupFile</directive>
- µ¥ÀÌÅͺ£À̽º°¡ ÀÖ´Ù. <em>Áï,</em> ÃÖ¼ÒÇÑ <code>foo</code>¶ó´Â
- ±×·ì¿¡ ±¸¼º¿øÀÌ ÀÖ´Ù. <code>jones</code>¿Í
- <code>smith</code>°¡ ¸ðµÎ ±×·ì <code>foo</code>ÀÇ
- ±¸¼º¿øÀ̶ó¸é, µÑ ¸ðµÎ <code>project-foo</code> µð·ºÅ丮¿¡
- Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example>
- &lt;Directory /home/*/public_html/project-foo&gt;<br />
- <indent>
- AuthType Basic<br />
- AuthName "Project Foo Files"<br />
- AuthBasicProvider dbm<br />
- <br />
- # combined user/group database<br />
- AuthDBMUserFile /usr/local/apache2/etc/.htdbm-all<br />
- AuthDBMGroupFile /usr/local/apache2/etc/.htdbm-all<br />
- <br />
- Satisfy All<br />
- Require file-group<br />
- </indent>
- &lt;/Directory&gt;
- </example>
- </section>
-</section>
-
-<directivesynopsis>
-<name>AuthzOwnerAuthoritative</name>
-<description>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</description>
-<syntax>AuthzOwnerAuthoritative On|Off</syntax>
-<default>AuthzOwnerAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzOwnerAuthoritative</directive> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤ÇÏ¸é ´ÙÀ½°ú °°Àº °æ¿ì »ç¿ëÀÚ
- ±ÇÇѺο©¸¦ (<code>modules.c</code> ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ
- ¸ðµâ·Î ³Ñ°ÜÁØ´Ù.</p>
-
- <ul>
- <li><code>file-owner</code>¸¦ »ç¿ëÇϸé ÆÄÀϽýºÅÛ ¼ÒÀ¯ÀÚ¸¦
- ¾Ë ¼ö ¾ø°Å³ª ÁÖ¾îÁø À¥ »ç¿ëÀÚ¸í°ú ´Ù¸¥ °æ¿ì</li>
-
- <li><code>file-group</code>À» »ç¿ëÇϸé ÆÄÀϽýºÅÛ ±×·ìÀ»
- ¾Ë ¼ö ¾ø°Å³ª ÁÖ¾îÁø À¥ »ç¿ëÀÚ¸íÀÌ ±¸¼º¿øÀÌ ¾Æ´Ñ °æ¿ì.</li>
- </ul>
-
- <p>¶Ç, °ªÀ» <code>Off</code>·Î ¼³Á¤Çϸé
- <code>file-owner</code>¿Í <code>file-group</code>À» °áÇÕÇÏ¿©,
- µÑ Áß Çϳª¸¸ ¸¸Á·Çصµ Á¢±ÙÀ» Çã°¡ÇÑ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â ±×·ìÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ <code>Off</code>·Î ¼³Á¤ÇÏÁö¾ÊÀ¸¸é
- ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_owner.xml.meta b/docs/manual/mod/mod_authz_owner.xml.meta
deleted file mode 100644
index fd0c400cab..0000000000
--- a/docs/manual/mod/mod_authz_owner.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authz_owner</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_authz_user.html b/docs/manual/mod/mod_authz_user.html
deleted file mode 100644
index b7841bd79e..0000000000
--- a/docs/manual/mod/mod_authz_user.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_authz_user.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_authz_user.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_authz_user.html.en b/docs/manual/mod/mod_authz_user.html.en
deleted file mode 100644
index 85a45ac41b..0000000000
--- a/docs/manual/mod/mod_authz_user.html.en
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_user - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_authz_user</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_user.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_user.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>User Authorization</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>authz_user_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_authz_user.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides authorization capabilities so that
- authenticated users can be allowed or denied access to portions
- of the web site. <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code> grants
- access if the authenticated user is listed in a <code>Require user</code>
- directive. Alternatively <code>require valid-user</code> can be used to
- grant access to all successfully authenticated users.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzUserAuthoritative" id="AuthzUserAuthoritative">AuthzUserAuthoritative</a> <a name="authzuserauthoritative" id="authzuserauthoritative">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthzUserAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthzUserAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_authz_user</td></tr>
-</table>
- <p>Setting the <code class="directive">AuthzUserAuthoritative</code>
- directive explicitly to <code>Off</code> allows for
- user authorization to be passed on to lower level modules (as defined
- in the <code>modules.c</code> files) if there is <strong>no
- user</strong> matching the supplied userID.</p>
-
- <p>By default, control is not passed on and an unknown user
- will result in an Authentication Required reply. Not
- setting it to <code>Off</code> thus keeps the system secure and forces
- an NCSA compliant behaviour.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_authz_user.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_user.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_user.html.ko.euc-kr b/docs/manual/mod/mod_authz_user.html.ko.euc-kr
deleted file mode 100644
index 91b358d87e..0000000000
--- a/docs/manual/mod/mod_authz_user.html.ko.euc-kr
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_authz_user - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_authz_user</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_user.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_user.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>»ç¿ëÀÚ ±ÇÇѺο©</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>authz_user_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_authz_user.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ±ÇÇÑÀ» ºÎ¿©ÇÏ¿©, ÀÎÁõÇÑ »ç¿ëÀÚ°¡ À¥»çÀÌÆ®ÀÇ
- ÀϺο¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö °áÁ¤ÇÑ´Ù.
- <code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code>´Â <code>Require user</code>
- Áö½Ã¾î ¸ñ·Ï¿¡ ÀÎÁõÇÑ »ç¿ëÀÚ°¡ µé¾îÀÖÀ¸¸é Á¢±ÙÀ» Çã¿ëÇÑ´Ù.
- ¶Ç, <code>require valid-user</code>´Â ¼º°øÀûÀ¸·Î ÀÎÁõÇÑ
- »ç¿ëÀÚ ¸ðµÎ¿¡°Ô Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#authzuserauthoritative">AuthzUserAuthoritative</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#satisfy">Satisfy</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AuthzUserAuthoritative" id="AuthzUserAuthoritative">AuthzUserAuthoritative</a> <a name="authzuserauthoritative" id="authzuserauthoritative">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AuthzUserAuthoritative On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>AuthzUserAuthoritative On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_authz_user</td></tr>
-</table>
- <p><code class="directive">AuthzUserAuthoritative</code> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé ÇØ´ç <strong>»ç¿ëÀÚ°¡
- ¾ø´Â</strong> °æ¿ì »ç¿ëÀÚ ±ÇÇѺο©¸¦ (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁØ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â »ç¿ëÀÚÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ <code>Off</code>·Î ¼³Á¤ÇÏÁö¾ÊÀ¸¸é
- ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_authz_user.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_authz_user.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_authz_user.xml b/docs/manual/mod/mod_authz_user.xml
deleted file mode 100644
index 391268e9f1..0000000000
--- a/docs/manual/mod/mod_authz_user.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_user.xml.meta">
-
-<name>mod_authz_user</name>
-<description>User Authorization</description>
-<status>Base</status>
-<sourcefile>mod_authz_user.c</sourcefile>
-<identifier>authz_user_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module provides authorization capabilities so that
- authenticated users can be allowed or denied access to portions
- of the web site. <module>mod_authz_user</module> grants
- access if the authenticated user is listed in a <code>Require user</code>
- directive. Alternatively <code>require valid-user</code> can be used to
- grant access to all successfully authenticated users.</p>
-</summary>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthzUserAuthoritative</name>
-<description>Sets whether authorization will be passed on to lower level
-modules</description>
-<syntax>AuthzUserAuthoritative On|Off</syntax>
-<default>AuthzUserAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p>Setting the <directive>AuthzUserAuthoritative</directive>
- directive explicitly to <code>Off</code> allows for
- user authorization to be passed on to lower level modules (as defined
- in the <code>modules.c</code> files) if there is <strong>no
- user</strong> matching the supplied userID.</p>
-
- <p>By default, control is not passed on and an unknown user
- will result in an Authentication Required reply. Not
- setting it to <code>Off</code> thus keeps the system secure and forces
- an NCSA compliant behaviour.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_user.xml.ko b/docs/manual/mod/mod_authz_user.xml.ko
deleted file mode 100644
index c5f60763fa..0000000000
--- a/docs/manual/mod/mod_authz_user.xml.ko
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_authz_user.xml.meta">
-
-<name>mod_authz_user</name>
-<description>»ç¿ëÀÚ ±ÇÇѺο©</description>
-<status>Base</status>
-<sourcefile>mod_authz_user.c</sourcefile>
-<identifier>authz_user_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ±ÇÇÑÀ» ºÎ¿©ÇÏ¿©, ÀÎÁõÇÑ »ç¿ëÀÚ°¡ À¥»çÀÌÆ®ÀÇ
- ÀϺο¡ Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö °áÁ¤ÇÑ´Ù.
- <module>mod_authz_user</module>´Â <code>Require user</code>
- Áö½Ã¾î ¸ñ·Ï¿¡ ÀÎÁõÇÑ »ç¿ëÀÚ°¡ µé¾îÀÖÀ¸¸é Á¢±ÙÀ» Çã¿ëÇÑ´Ù.
- ¶Ç, <code>require valid-user</code>´Â ¼º°øÀûÀ¸·Î ÀÎÁõÇÑ
- »ç¿ëÀÚ ¸ðµÎ¿¡°Ô Á¢±ÙÀ» Çã¿ëÇÑ´Ù.</p>
-</summary>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthzUserAuthoritative</name>
-<description>±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</description>
-<syntax>AuthzUserAuthoritative On|Off</syntax>
-<default>AuthzUserAuthoritative On</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
- <p><directive>AuthzUserAuthoritative</directive> Áö½Ã¾î¸¦
- Á÷Á¢ <code>Off</code>·Î ¼³Á¤Çϸé ÇØ´ç <strong>»ç¿ëÀÚ°¡
- ¾ø´Â</strong> °æ¿ì »ç¿ëÀÚ ±ÇÇѺο©¸¦ (<code>modules.c</code>
- ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÑ) Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁØ´Ù.</p>
-
- <p>±âº»ÀûÀ¸·Î Á¦¾î¸¦ ³Ñ±âÁö¾Ê°í, ¸ð¸£´Â »ç¿ëÀÚÀÇ °æ¿ì ÀÎÁõ
- ÇÊ¿ä ÀÀ´äÀ» ÇÑ´Ù. ÀÌ Áö½Ã¾î¸¦ <code>Off</code>·Î ¼³Á¤ÇÏÁö¾ÊÀ¸¸é
- ½Ã½ºÅÛÀÌ ¾ÈÀüÇÏ°Ô À¯ÁöµÇ¸ç, NCSA À¥¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_authz_user.xml.meta b/docs/manual/mod/mod_authz_user.xml.meta
deleted file mode 100644
index 4fc70e1df0..0000000000
--- a/docs/manual/mod/mod_authz_user.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_authz_user</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_autoindex.html b/docs/manual/mod/mod_autoindex.html
deleted file mode 100644
index 16baec2f69..0000000000
--- a/docs/manual/mod/mod_autoindex.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_autoindex.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_autoindex.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_autoindex.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_autoindex.html.en b/docs/manual/mod/mod_autoindex.html.en
deleted file mode 100644
index cf05092a01..0000000000
--- a/docs/manual/mod/mod_autoindex.html.en
+++ /dev/null
@@ -1,893 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_autoindex - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_autoindex</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_autoindex.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_autoindex.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_autoindex.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Generates directory indexes,
- automatically, similar to the Unix <code>ls</code> command or the
- Win32 <code>dir</code> shell command</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>autoindex_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_autoindex.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>The index of a directory can come from one of two
- sources:</p>
-
- <ul>
- <li>A file written by the user, typically called
- <code>index.html</code>. The <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> directive sets the
- name of this file. This is controlled by
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>.</li>
-
- <li>Otherwise, a listing generated by the server. The other
- directives control the format of this listing. The <code class="directive"><a href="#addicon">AddIcon</a></code>, <code class="directive"><a href="#addiconbyencoding">AddIconByEncoding</a></code> and
- <code class="directive"><a href="#addiconbytype">AddIconByType</a></code> are
- used to set a list of icons to display for various file types;
- for each file listed, the first icon listed that matches the
- file is displayed. These are controlled by
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>.</li>
- </ul>
- <p>The two functions are separated so that you can completely
- remove (or replace) automatic index generation should you want
- to.</p>
-
- <p>Automatic index generation is enabled with using
- <code>Options +Indexes</code>. See the
- <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive for
- more details.</p>
-
- <p>If the <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> option is given with the <code class="directive"><a href="#indexoptions">IndexOptions</a></code> directive,
- the column headers are links that control the order of the
- display. If you select a header link, the listing will be
- regenerated, sorted by the values in that column. Selecting the
- same header repeatedly toggles between ascending and descending
- order. These column header links are suppressed with
- <code class="directive"><a href="#indexoptions">IndexOptions</a></code> directive's
- <code>SuppressColumnSorting</code> option.</p>
-
- <p>Note that when the display is sorted by "Size", it's the
- <em>actual</em> size of the files that's used, not the
- displayed value - so a 1010-byte file will always be displayed
- before a 1011-byte file (if in ascending order) even though
- they both are shown as "1K".</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addalt">AddAlt</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addaltbyencoding">AddAltByEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addaltbytype">AddAltByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#adddescription">AddDescription</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addicon">AddIcon</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addiconbyencoding">AddIconByEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addiconbytype">AddIconByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaulticon">DefaultIcon</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#headername">HeaderName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexignore">IndexIgnore</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexoptions">IndexOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexorderdefault">IndexOrderDefault</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexstylesheet">IndexStyleSheet</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#readmename">ReadmeName</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex Request Query Arguments</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Autoindex Request Query Arguments</a></h2>
-
-
- <p>Apache 2.0.23 reorganized the Query Arguments for Column
- Sorting, and introduced an entire group of new query options.
- To effectively eliminate all client control over the output,
- the <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> option was introduced.</p>
-
- <p>The column sorting headers themselves are self-referencing
- hyperlinks that add the sort query options shown below. Any
- option below may be added to any request for the directory
- resource.</p>
-
- <ul>
- <li><code>C=N</code> sorts the directory by file name</li>
-
- <li><code>C=M</code> sorts the directory by last-modified
- date, then file name</li>
-
- <li><code>C=S</code> sorts the directory by size, then file
- name</li>
-
- <li class="separate"><code>C=D</code> sorts the directory by description, then
- file name</li>
-
- <li><code>O=A</code> sorts the listing in Ascending
- Order</li>
-
- <li class="separate"><code>O=D</code> sorts the listing in Descending
- Order</li>
-
- <li><code>F=0</code> formats the listing as a simple list
- (not FancyIndexed)</li>
-
- <li><code>F=1</code> formats the listing as a FancyIndexed
- list</li>
-
- <li class="separate"><code>F=2</code> formats the listing as an
- HTMLTable FancyIndexed list</li>
-
- <li><code>V=0</code> disables version sorting</li>
-
- <li class="separate"><code>V=1</code> enables version sorting</li>
-
- <li><code>P=<var>pattern</var></code> lists only files matching
- the given <var>pattern</var></li>
- </ul>
-
- <p>Note that the 'P'attern query argument is tested
- <em>after</em> the usual <code class="directive"><a href="#indexignore">IndexIgnore</a></code> directives are processed,
- and all file names are still subjected to the same criteria as
- any other autoindex listing. The Query Arguments parser in
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> will stop abruptly when an unrecognized
- option is encountered. The Query Arguments must be well formed,
- according to the table above.</p>
-
- <p>The simple example below, which can be clipped and saved in
- a header.html file, illustrates these query options. Note that
- the unknown "X" argument, for the submit button, is listed last
- to assure the arguments are all parsed before mod_autoindex
- encounters the X=Go input.</p>
-
- <div class="example"><p><code>
- &lt;form action="" method="get"&gt;<br />
- <span class="indent">
- Show me a &lt;select name="F"&gt;<br />
- <span class="indent">
- &lt;option value="0"&gt; Plain list&lt;/option&gt;<br />
- &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;<br />
- &lt;option value="2"&gt; Table list&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- Sorted by &lt;select name="C"&gt;<br />
- <span class="indent">
- &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;<br />
- &lt;option value="M"&gt; Date Modified&lt;/option&gt;<br />
- &lt;option value="S"&gt; Size&lt;/option&gt;<br />
- &lt;option value="D"&gt; Description&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- &lt;select name="O"&gt;<br />
- <span class="indent">
- &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;<br />
- &lt;option value="D"&gt; Descending&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- &lt;select name="V"&gt;<br />
- <span class="indent">
- &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;<br />
- &lt;option value="1"&gt; in Version order&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- Matching &lt;input type="text" name="P" value="*" /&gt;<br />
- &lt;input type="submit" name="X" value="Go" /&gt;<br />
- </span>
- &lt;/form&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file, instead of an
-icon selected by filename</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAlt</code> provides the alternate text to
- display for a file, instead of an icon, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>File</var> is a file extension, partial filename, wild-card
- expression or full filename for files to describe.
- If <var>String</var> contains any whitespace, you have to enclose it
- in quotes (<code>"</code> or <code>'</code>). This alternate text
- is displayed if the client is image-incapable, has image loading
- disabled, or fails to retrieve the icon.</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- AddAlt "PDF file" *.pdf<br />
- AddAlt Compressed *.gz *.zip *.Z
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAltByEncoding" id="AddAltByEncoding">AddAltByEncoding</a> <a name="addaltbyencoding" id="addaltbyencoding">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file instead of an icon
-selected by MIME-encoding</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAltByEncoding</code> provides the alternate
- text to display for a file, instead of an icon, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>MIME-encoding</var> is a valid content-encoding, such as
- <code>x-compress</code>. If <var>String</var> contains any whitespace,
- you have to enclose it in quotes (<code>"</code> or <code>'</code>).
- This alternate text is displayed if the client is image-incapable,
- has image loading disabled, or fails to retrieve the icon.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddAltByEncoding gzip x-gzip
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAltByType" id="AddAltByType">AddAltByType</a> <a name="addaltbytype" id="addaltbytype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file, instead of an
-icon selected by MIME content-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAltByType</code> sets the alternate text to
- display for a file, instead of an icon, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>MIME-type</var> is a valid content-type, such as
- <code>text/html</code>. If <var>String</var> contains any whitespace,
- you have to enclose it in quotes (<code>"</code> or <code>'</code>).
- This alternate text is displayed if the client is image-incapable,
- has image loading disabled, or fails to retrieve the icon.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddAltByType 'plain text' text/plain
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddDescription" id="AddDescription">AddDescription</a> <a name="adddescription" id="adddescription">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Description to display for a file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddDescription <var>string file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>This sets the description to display for a file, for
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>File</var> is a file extension, partial filename, wild-card
- expression or full filename for files to describe.
- <var>String</var> is enclosed in double quotes (<code>"</code>).</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddDescription "The planet Mars" /web/pics/mars.gif
- </code></p></div>
-
- <p>The typical, default description field is 23 bytes wide. 6
- more bytes are added by the <code><a href="#indexoptions.suppressicon">IndexOptions SuppressIcon</a></code> option, 7 bytes are
- added by the <code><a href="#indexoptions.suppresssize">IndexOptions SuppressSize</a></code> option, and 19 bytes are
- added by the <code><a href="#indexoptions.suppresslastmodified">IndexOptions SuppressLastModified</a></code> option.
- Therefore, the widest default the description column is ever
- assigned is 55 bytes.</p>
-
- <p>See the <a href="#indexoptions.descriptionwidth">DescriptionWidth</a> <code class="directive"><a href="#indexoptions">IndexOptions</a></code> keyword for details on overriding the size
- of this column, or allowing descriptions of unlimited length.</p>
-
- <div class="note"><h3>Caution</h3>
- <p>Descriptive text defined with <code class="directive">AddDescription</code>
- may contain HTML markup, such as tags and character entities. If the
- width of the description column should happen to truncate a tagged
- element (such as cutting off the end of a bolded phrase), the
- results may affect the rest of the directory listing.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIcon" id="AddIcon">AddIcon</a> <a name="addicon" id="addicon">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display for a file selected by name</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>This sets the icon to display next to a file ending in
- <var>name</var> for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>. <var>Icon</var> is either a (%-escaped)
- relative URL to the icon, or of the format <code>
- (<var>alttext</var>,<var>url</var>)</code> where <var>alttext</var>
- is the text tag given for an icon for non-graphical browsers.</p>
-
- <p><var>Name</var> is either <code>^^DIRECTORY^^</code> for directories,
- <code>^^BLANKICON^^</code> for blank lines (to format the list
- correctly), a file extension, a wildcard expression, a partial
- filename or a complete filename.</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
- AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
- AddIcon /icons/backup.xbm *~
- </code></p></div>
-
- <p><code class="directive"><a href="#addiconbytype">AddIconByType</a></code>
- should be used in preference to <code class="directive">AddIcon</code>,
- when possible.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIconByEncoding" id="AddIconByEncoding">AddIconByEncoding</a> <a name="addiconbyencoding" id="addiconbyencoding">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display next to files selected by MIME
-content-encoding</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>This sets the icon to display next to files with <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>Icon</var> is either a (%-escaped) relative URL to the icon,
- or of the format <code>(<var>alttext</var>,<var>url</var>)</code>
- where <var>alttext</var> is the text tag given for an icon for
- non-graphical browsers.</p>
-
- <p><var>MIME-encoding</var> is a wildcard expression matching
- required the content-encoding.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddIconByEncoding /icons/compress.xbm x-compress
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIconByType" id="AddIconByType">AddIconByType</a> <a name="addiconbytype" id="addiconbytype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display next to files selected by MIME
-content-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>This sets the icon to display next to files of type
- <var>MIME-type</var> for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>Icon</var> is either a (%-escaped) relative URL to the icon,
- or of the format <code>(<var>alttext</var>,<var>url</var>)</code>
- where <var>alttext</var> is the text tag given for an icon for
- non-graphical browsers.</p>
-
- <p><var>MIME-type</var> is a wildcard expression matching
- required the mime types.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddIconByType (IMG,/icons/image.xbm) image/*
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultIcon" id="DefaultIcon">DefaultIcon</a> <a name="defaulticon" id="defaulticon">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display for files when no specific icon is
-configured</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultIcon <var>url-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">DefaultIcon</code> directive sets the icon
- to display for files when no specific icon is known, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>Url-path</var> is a (%-escaped) relative URL to the icon.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- DefaultIcon /icon/unknown.xbm
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HeaderName" id="HeaderName">HeaderName</a> <a name="headername" id="headername">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the file that will be inserted at the top
-of the index listing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>HeaderName <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">HeaderName</code> directive sets the name
- of the file that will be inserted at the top of the index
- listing. <var>Filename</var> is the name of the file to include.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- HeaderName HEADER.html
- </code></p></div>
-
- <div class="note">
- <p>Both HeaderName and <code class="directive"><a href="#readmename">ReadmeName</a></code> now treat
- <var>Filename</var> as a URI path relative to the one used to
- access the directory being indexed. If <var>Filename</var> begins
- with a slash, it will be taken to be relative to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- HeaderName /include/HEADER.html
- </code></p></div>
-
- <p><var>Filename</var> must resolve to a document with a major
- content type of <code>text/*</code> (<em>e.g.</em>,
- <code>text/html</code>, <code>text/plain</code>, etc.). This means
- that <var>filename</var> may refer to a CGI script if the script's
- actual file type (as opposed to its output) is marked as
- <code>text/html</code> such as with a directive like:</p>
-
- <div class="example"><p><code>
- AddType text/html .cgi
- </code></p></div>
-
- <p><a href="../content-negotiation.html">Content negotiation</a>
- will be performed if <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- <code>MultiViews</code> is in effect. If <var>filename</var> resolves
- to a static <code>text/html</code> document (not a CGI script) and
- either one of the <code class="directive"><a href="../mod/core.html#options">options</a></code>
- <code>Includes</code> or <code>IncludesNOEXEC</code> is enabled,
- the file will be processed for server-side includes (see the
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> documentation).</p>
- </div>
-
- <p>If the file specified by <code class="directive">HeaderName</code> contains
- the beginnings of an HTML document (&lt;html&gt;, &lt;head&gt;, etc.)
- then you will probably want to set <a href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
- +SuppressHTMLPreamble</code></a>, so that these tags are not
- repeated.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexIgnore" id="IndexIgnore">IndexIgnore</a> <a name="indexignore" id="indexignore">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds to the list of files to hide when listing
-a directory</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexIgnore <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">IndexIgnore</code> directive adds to the
- list of files to hide when listing a directory. <var>File</var> is a
- shell-style wildcard expression or full
- filename. Multiple IndexIgnore directives add
- to the list, rather than the replacing the list of ignored
- files. By default, the list contains <code>.</code> (the current
- directory).</p>
-
- <div class="example"><p><code>
- IndexIgnore README .htaccess *.bak *~
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexOptions" id="IndexOptions">IndexOptions</a> <a name="indexoptions" id="indexoptions">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Various configuration settings for directory
-indexing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">IndexOptions</code> directive specifies the
- behavior of the directory indexing. <var>Option</var> can be one
- of</p>
-
- <dl>
- <dt><a name="indexoptions.descriptionwidth" id="indexoptions.descriptionwidth">DescriptionWidth=[<var>n</var> | *]</a> (<em>Apache 2.0.23 and
- later</em>)</dt>
-
- <dd>The <code>DescriptionWidth</code> keyword allows you to
- specify the width of the description column in
- characters.</dd>
-
- <dd><code>-DescriptionWidth</code> (or unset) allows
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> to calculate the best width.</dd>
-
- <dd><code>DescriptionWidth=<var>n</var></code> fixes the column width to
- <var>n</var> bytes wide.</dd>
-
- <dd><code>DescriptionWidth=*</code> grows the column to the
- width necessary to accommodate the longest description
- string.</dd>
-
- <dd><strong>See the section on <code class="directive"><a href="#adddescription">AddDescription</a></code> for dangers
- inherent in truncating descriptions.</strong></dd>
-
- <dt><a name="indexoptions.fancyindexing" id="indexoptions.fancyindexing">FancyIndexing</a></dt>
-
- <dd>This turns on fancy indexing of directories.</dd>
-
- <dt><a name="indexoptions.foldersfirst" id="indexoptions.foldersfirst">FoldersFirst</a> (<em>Apache
- 2.0.23 and later</em>)</dt>
-
- <dd>If this option is enabled, subdirectory listings will
- <em>always</em> appear first, followed by normal files in the
- directory. The listing is basically broken into two
- components, the files and the subdirectories, and each is
- sorted separately and then displayed subdirectories-first.
- For instance, if the sort order is descending by name, and
- <code>FoldersFirst</code> is enabled, subdirectory
- <code>Zed</code> will be listed before subdirectory
- <code>Beta</code>, which will be listed before normal files
- <code>Gamma</code> and <code>Alpha</code>. <strong>This option
- only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong></dd>
-
- <dt><a name="indexoptions.htmltable" id="indexoptions.htmltable">HTMLTable</a> (<em>Experimental,
- Apache 2.0.23 and later</em>)</dt>
-
- <dd>This experimental option with FancyIndexing constructs a
- simple table for the fancy directory listing. Note this will
- confuse older browsers. It is particularly necessary if file
- names or description text will alternate between
- left-to-right and right-to-left reading order, as can happen
- on WinNT or other utf-8 enabled platforms.</dd>
-
- <dt><a name="indexoptions.iconsarelinks" id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>
-
- <dd>This makes the icons part of the anchor for the filename, for
- fancy indexing.</dd>
-
- <dt><a name="indexoptions.iconheight" id="indexoptions.iconheight">IconHeight[=<var>pixels</var>]</a></dt>
-
- <dd>Presence of this option, when used with IconWidth, will cause
- the server to include <code>height</code> and <code>width</code>
- attributes in the <code>img</code> tag for the file icon. This allows
- browser to precalculate the page layout without having to wait until
- all the images have been loaded. If no value is given for the option,
- it defaults to the standard height of the icons supplied with the Apache
- software.</dd>
-
- <dt><a name="indexoptions.iconwidth" id="indexoptions.iconwidth">IconWidth[=<var>pixels</var>]</a></dt>
-
- <dd>Presence of this option, when used with <code>IconHeight</code>,
- will cause the server to include <code>height</code> and
- <code>width</code> attributes in the <code>img</code> tag for
- the file icon. This allows browser to precalculate the page
- layout without having to wait until all the images have been
- loaded. If no value is given for the option, it defaults to
- the standard width of the icons supplied with the Apache
- software.</dd>
-
- <dt><a name="indexoptions.ignorecase" id="indexoptions.ignorecase">IgnoreCase</a></dt>
-
- <dd>If this option is enabled, names are sorted in a case-insensitive
- manner. For instance, if the sort order is ascending by name, and
- IgnoreCase is enabled, file Zeta will be listed after file alfa
- (Note: file GAMMA will always be listed before file gamma). </dd>
-
- <dt><a name="indexoptions.ignoreclient" id="indexoptions.ignoreclient">IgnoreClient</a></dt>
-
- <dd>This option causes <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> to ignore all
- query variables from the client, including sort order (implies
- <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>.)</dd>
-
- <dt><a name="indexoptions.namewidth" id="indexoptions.namewidth">NameWidth=[<var>n</var>
- | *]</a></dt>
-
- <dd>The <code>NameWidth</code> keyword allows you to specify the width
- of the filename column in bytes.</dd>
-
- <dd><code>-NameWidth</code> (or unset) allows <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> to calculate the best width.</dd>
-
- <dd><code>NameWidth=<var>n</var></code> fixes the column width to
- <var>n</var> bytes wide.</dd>
-
- <dd><code>NameWidth=*</code> grows the column to the necessary
- width.</dd>
-
- <dt><a name="indexoptions.scanhtmltitles" id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>
-
- <dd>This enables the extraction of the title from HTML documents
- for fancy indexing. If the file does not have a description
- given by <code class="directive"><a href="#adddescription">AddDescription</a></code>
- then httpd will read the document for the value of the
- <code>title</code> element. This is CPU and disk intensive.</dd>
-
- <dt><a name="indexoptions.showforbidden" id="indexoptions.showforbidden">ShowForbidden</a></dt>
-
- <dd>If specified, Apache will show files normally hidden because
- the subrequest returned HTTP_UNAUTHORIZED or HTTP_FORBIDDEN</dd>
-
- <dt><a name="indexoptions.suppresscolumnsorting" id="indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></dt>
-
- <dd>If specified, Apache will not make the column headings in a
- FancyIndexed directory listing into links for sorting. The
- default behavior is for them to be links; selecting the
- column heading will sort the directory listing by the values
- in that column. <strong>Prior to Apache 2.0.23, this also
- disabled parsing the Query Arguments for the sort
- string.</strong> That behavior is now controlled by <a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a> in Apache 2.0.23.</dd>
-
- <dt><a name="indexoptions.suppressdescription" id="indexoptions.suppressdescription">SuppressDescription</a></dt>
-
- <dd>This will suppress the file description in fancy indexing
- listings. By default, no file descriptions are defined, and
- so the use of this option will regain 23 characters of screen
- space to use for something else. See <code class="directive"><a href="#adddescription">AddDescription</a></code> for information about setting the file
- description. See also the <code><a href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
- index option to limit the size of the description column.</dd>
-
- <dt><a name="indexoptions.suppresshtmlpreamble" id="indexoptions.suppresshtmlpreamble">SuppressHTMLPreamble</a></dt>
-
- <dd>If the directory actually contains a file specified by the
- <code class="directive"><a href="#headername">HeaderName</a></code>
- directive, the module usually includes the contents of the file
- after a standard HTML preamble (<code>&lt;html&gt;</code>,
- <code>&lt;head&gt;</code>, <em>et cetera</em>). The
- <code>SuppressHTMLPreamble</code> option disables this behaviour,
- causing the module to start the display with the header file
- contents. The header file must contain appropriate HTML instructions
- in this case. If there is no header file, the preamble is generated
- as usual.</dd>
-
- <dt><a name="indexoptions.suppressicon" id="indexoptions.suppressicon">SuppressIcon</a> (<em>Apache
- 2.0.23 and later</em>)</dt>
-
- <dd>This will suppress the icon in fancy indexing listings.
- Combining both <code>SuppressIcon</code> and
- <code>SuppressRules</code> yields proper HTML 3.2 output, which
- by the final specification prohibits <code>img</code> and
- <code>hr</code> elements from the <code>pre</code> block (used to
- format FancyIndexed listings.)</dd>
-
- <dt><a name="indexoptions.suppresslastmodified" id="indexoptions.suppresslastmodified">SuppressLastModified</a></dt>
-
- <dd>This will suppress the display of the last modification date,
- in fancy indexing listings.</dd>
-
- <dt><a name="indexoptions.suppressrules" id="indexoptions.suppressrules">SuppressRules</a>
- (<em>Apache 2.0.23 and later</em>)</dt>
-
- <dd>This will suppress the horizontal rule lines (<code>hr</code>
- elements) in directory listings. Combining both <code>SuppressIcon</code> and
- <code>SuppressRules</code> yields proper HTML 3.2 output, which
- by the final specification prohibits <code>img</code> and
- <code>hr</code> elements from the <code>pre</code> block (used to
- format FancyIndexed listings.)</dd>
-
- <dt><a name="indexoptions.suppresssize" id="indexoptions.suppresssize">SuppressSize</a></dt>
-
- <dd>This will suppress the file size in fancy indexing listings.</dd>
-
- <dt><a name="indexoptions.trackmodified" id="indexoptions.trackmodified">TrackModified</a> (<em>Apache
- 2.0.23 and later</em>)</dt>
-
- <dd>This returns the Last-Modified and ETag values for the listed
- directory in the HTTP header. It is only valid if the
- operating system and file system return appropriate stat()
- results. Some Unix systems do so, as do OS2's JFS and Win32's
- NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
- Once this feature is enabled, the client or proxy can track
- changes to the list of files when they perform a <code>HEAD</code>
- request. Note some operating systems correctly track new and
- removed files, but do not track changes for sizes or dates of
- the files within the directory. <strong>Changes to the size
- or date stamp of an existing file will not update the
- Last-Modified header on all Unix platforms.</strong> If this
- is a concern, leave this option disabled.</dd>
-
- <dt><a name="indexoptions.versionsort" id="indexoptions.versionsort">VersionSort</a>
- (<em>Apache 2.0a3 and later</em>)</dt>
-
- <dd>The <code>VersionSort</code> keyword causes files containing
- version numbers to sort in a natural way. Strings are sorted as
- usual, except that substrings of digits in the name and
- description are compared according to their numeric value.
-
- <div class="example"><h3>Example:</h3><p><code>
- foo-1.7<br />
- foo-1.7.2<br />
- foo-1.7.12<br />
- foo-1.8.2<br />
- foo-1.8.2a<br />
- foo-1.12
- </code></p></div>
-
- <p>If the number starts with a zero, then it is considered to
- be a fraction:</p>
-
- <div class="example"><p><code>
- foo-1.001<br />
- foo-1.002<br />
- foo-1.030<br />
- foo-1.04
- </code></p></div>
- </dd>
-
- <dt><a name="indexoptions.xhtml" id="indexoptions.xhtml">XHTML</a>
- (<em>Apache 2.0.49 and later</em>)</dt>
-
- <dd>The <code>XHTML</code> keyword forces <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>
- to emit XHTML 1.0 code instead of HTML 3.2.</dd>
- </dl>
-
-
- <dl><dt>Incremental IndexOptions</dt>
- <dd>
- <p>Apache 1.3.3 introduced some significant changes in the
- handling of <code class="directive">IndexOptions</code> directives. In
- particular:</p>
-
- <ul>
- <li>Multiple <code class="directive">IndexOptions</code> directives for a
- single directory are now merged together. The result of:
-
- <div class="example"><p><code>
- &lt;Directory /foo&gt;
- <span class="indent">
- IndexOptions HTMLTable<br />
- IndexOptions SuppressColumnsorting
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>will be the equivalent of</p>
-
- <div class="example"><p><code>
- IndexOptions HTMLTable SuppressColumnsorting
- </code></p></div>
- </li>
-
- <li>The addition of the incremental syntax (<em>i.e.</em>, prefixing
- keywords with <code>+</code> or <code>-</code>).</li>
- </ul>
-
- <p>Whenever a '+' or '-' prefixed keyword is encountered, it
- is applied to the current <code class="directive">IndexOptions</code>
- settings (which may have been inherited from an upper-level
- directory). However, whenever an unprefixed keyword is processed, it
- clears all inherited options and any incremental settings encountered
- so far. Consider the following example:</p>
-
- <div class="example"><p><code>
- IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing<br />
- IndexOptions +SuppressSize
- </code></p></div>
-
- <p>The net effect is equivalent to <code>IndexOptions FancyIndexing
- +SuppressSize</code>, because the unprefixed <code>FancyIndexing</code>
- discarded the incremental keywords before it, but allowed them to
- start accumulating again afterward.</p>
-
- <p>To unconditionally set the <code class="directive">IndexOptions</code> for
- a particular directory, clearing the inherited settings, specify
- keywords without any <code>+</code> or <code>-</code> prefixes.</p>
- </dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexOrderDefault" id="IndexOrderDefault">IndexOrderDefault</a> <a name="indexorderdefault" id="indexorderdefault">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the default ordering of the directory index</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>IndexOrderDefault Ascending Name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">IndexOrderDefault</code> directive is used
- in combination with the <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> index option. By default, fancyindexed
- directory listings are displayed in ascending order by filename; the
- <code class="directive">IndexOrderDefault</code> allows you to change this
- initial display order.</p>
-
- <p><code class="directive">IndexOrderDefault</code> takes two
- arguments. The first must be either <code>Ascending</code> or
- <code>Descending</code>, indicating the direction of the sort.
- The second argument must be one of the keywords <code>Name</code>,
- <code>Date</code>, <code>Size</code>, or <code>Description</code>,
- and identifies the primary key. The secondary key is
- <em>always</em> the ascending filename.</p>
-
- <p>You can force a directory listing to only be displayed in a
- particular order by combining this directive with the <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code> index option; this will prevent
- the client from requesting the directory listing in a different
- order.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexStyleSheet" id="IndexStyleSheet">IndexStyleSheet</a> <a name="indexstylesheet" id="indexstylesheet">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds a CSS stylesheet to the directory index</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexStyleSheet <var>url-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">IndexStyleSheet</code> directive sets the name of
- the file that will be used as the CSS for the index listing.
- </p>
- <div class="example"><h3>Example</h3><p><code>
-
- IndexStyleSheet "/css/style.css"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ReadmeName" id="ReadmeName">ReadmeName</a> <a name="readmename" id="readmename">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the file that will be inserted at the end
-of the index listing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ReadmeName <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>The <code class="directive">ReadmeName</code> directive sets the name
- of the file that will be appended to the end of the index
- listing. <var>Filename</var> is the name of the file to include, and
- is taken to be relative to the location being indexed. If
- <var>Filename</var> begins with a slash, it will be taken to be
- relative to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>.
- </p>
-
- <div class="example"><h3>Example</h3><p><code>
- ReadmeName FOOTER.html
- </code></p></div>
-
- <div class="example"><h3>Example 2</h3><p><code>
- ReadmeName /include/FOOTER.html
- </code></p></div>
-
- <p>See also <code class="directive"><a href="#headername">HeaderName</a></code>, where this behavior is described in greater
- detail.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_autoindex.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_autoindex.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_autoindex.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_autoindex.html.ja.euc-jp b/docs/manual/mod/mod_autoindex.html.ja.euc-jp
deleted file mode 100644
index 9a6c2f43c6..0000000000
--- a/docs/manual/mod/mod_autoindex.html.ja.euc-jp
+++ /dev/null
@@ -1,985 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_autoindex - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_autoindex</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_autoindex.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_autoindex.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_autoindex.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>Unix ¤Î <code>ls</code> ¥³¥Þ¥ó¥É¤ä
- Win32 ¤Î <code>dir</code> ¥·¥§¥ë¥³¥Þ¥ó¥É¤Ë»÷¤¿
- ¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÀ¸À®¤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>autoindex_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_autoindex.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤ÏÆó¤Ä¤Î¾ðÊ󸻤Τ¦¤Á¤Î
- °ì¤Ä¤«¤éÀ¸À®¤Ç¤­¤Þ¤¹:</p>
-
- <ul>
- <li>ÉáÄÌ¤Ï <code>index.html</code> ¤È¸Æ¤Ð¤ì¤ë
- ¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ½ñ¤«¤ì¤¿¥Õ¥¡¥¤¥ë¡£
- <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤³¤Î¥Õ¥¡¥¤¥ë̾¤òÀßÄꤷ¤Þ¤¹¡£
- ¤³¤ì¤Ï <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> ¤ÇÀ©¸æ¤µ¤ì¤Þ¤¹¡£</li>
-
- <li>¤â¤·¤¯¤Ï¡¢¥µ¡¼¥Ð¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤¿°ìÍ÷¡£
- ¤½¤Î¾¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤³¤Î°ìÍ÷¤Î½ñ¼°¤òÀ©¸æ¤·¤Þ¤¹¡£
- <code class="directive"><a href="#addicon">AddIcon</a></code>, <code class="directive"><a href="#addiconbyencoding">AddIconByEncoding</a></code> ¤È
- <code class="directive"><a href="#addiconbytype">AddIconByType</a></code>
- ¤ò»È¤¦¤³¤È¤Ç¡¢ÍÍ¡¹¤Ê¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤ËÂФ·¤Æ¥¢¥¤¥³¥ó°ìÍ÷¤ò
- ¥»¥Ã¥È¤·¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¥ê¥¹¥È¤µ¤ì¤¿¥Õ¥¡¥¤¥ëËè¤Ë¡¢
- ¥Õ¥¡¥¤¥ë¤Ë¥Þ¥Ã¥Á¤·¤¿°ìÈֺǽé¤Î¥¢¥¤¥³¥ó¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
- ¤³¤ì¤é¤Ï <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤ÇÀ©¸æ¤µ¤ì¤Þ¤¹¡£</li>
- </ul>
- <p>˾¤à¤Ê¤é¤Ð¡¢¼«Æ°¥¤¥ó¥Ç¥Ã¥¯¥¹À¸À®¤ò´°Á´¤Ë½üµî (¤¢¤ë¤¤¤ÏÃÖ´¹)
- ¤Ç¤­¤ë¤è¤¦¤Ë¡¢¤³¤ÎÆó¤Ä¤Îµ¡Ç½¤ÏʬΥ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¼«Æ°¥¤¥ó¥Ç¥Ã¥¯¥¹À¸À®¤Ï <code>Options +Indexes</code>
- ¤ò»È¤¦¤³¤È¤ÇÍ­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>¤â¤· <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¥ª¥×¥·¥ç¥ó¤¬
- <code class="directive"><a href="../mod/autoindex.html#indexoptions">IndexOptions</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤ë¤Ê¤é¤Ð¡¢
- Îó¤ÎÀèƬ¤Ïɽ¼¨¤Î½çÈÖ¤òÀ©¸æ¤¹¤ë¥ê¥ó¥¯¤Ë¤Ê¤ê¤Þ¤¹¡£
- ÀèƬ¤Î¥ê¥ó¥¯¤òÁªÂò¤¹¤ë¤È¡¢°ìÍ÷¤ÏºÆÀ¸À®¤µ¤ì¤Æ
- ¤½¤ÎÎó¤ÎÃͤǥ½¡¼¥È¤µ¤ì¤Þ¤¹¡£
- Ʊ¤¸ÀèƬ¤ò³¤±¤ÆÁªÂò¤¹¤ë¤È¡¢¸ò¸ß¤Ë¾º½ç¤È¹ß½ç¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤é¤ÎÎó¤ÎÀèƬ¤Î¥ê¥ó¥¯¤Ï¡¢
- <code class="directive"><a href="#indexoptions">IndexOptions</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- <code>SuppressColumnSorting</code>
- ¥ª¥×¥·¥ç¥ó¤Ç¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>"Size" ¤Ç¥½¡¼¥È¤·¤¿¾ì¹ç¤Ï¡¢ÍѤ¤¤é¤ì¤ë¤Î¤Ï
- <em>¼ÂºÝ¤Î</em>¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤Ç¤¢¤Ã¤Æ¡¢
- ɽ¼¨¤ÎÃͤǤϤʤ¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤ -
- ¤¿¤È¤¨Î¾Êý¤È¤â¤¬ "1K" ¤Èɽ¼¨¤µ¤ì¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¢
- 1010 ¥Ð¥¤¥È¤Î¥Õ¥¡¥¤¥ë¤Ïɬ¤º 1011
- ¥Ð¥¤¥È¤Î¥Õ¥¡¥¤¥ë¤è¤ê¤âÁ° (¾º½ç¤Î¾ì¹ç) ¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addalt">AddAlt</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addaltbyencoding">AddAltByEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addaltbytype">AddAltByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#adddescription">AddDescription</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addicon">AddIcon</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addiconbyencoding">AddIconByEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addiconbytype">AddIconByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaulticon">DefaultIcon</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#headername">HeaderName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexignore">IndexIgnore</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexoptions">IndexOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexorderdefault">IndexOrderDefault</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexstylesheet">IndexStyleSheet</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#readmename">ReadmeName</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex ¥ê¥¯¥¨¥¹¥È¥¯¥¨¥ê¡¼°ú¿ô</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Autoindex ¥ê¥¯¥¨¥¹¥È¥¯¥¨¥ê¡¼°ú¿ô</a></h2>
-
-
- <p>Apache 2.0.23 ¤Ç¡¢
- ¥³¥é¥à¥½¡¼¥È¤Î¤¿¤á¤Ë¥¯¥¨¥ê¡¼°ú¿ô¤òºÆÊÔÀ®¤·¤Æ¡¢
- ¿·¤·¤¤¥¯¥¨¥ê¡¼¥ª¥×¥·¥ç¥ó¤Î¥°¥ë¡¼¥×¤òƳÆþ¤·¤Þ¤·¤¿¡£
- ½ÐÎϤËÂФ¹¤ë¥¯¥é¥¤¥¢¥ó¥È¤Î¤¹¤Ù¤Æ¤ÎÀ©¸æ¤ò¸úΨŪ¤ËËõ¾Ã
- ¤Ç¤­¤ë¤è¤¦¤Ë¡¢
- <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> ¤¬Æ³Æþ¤µ¤ì¤Þ¤·¤¿¡£</p>
-
- <p>¥³¥é¥à¥½¡¼¥È¤Î¥Ø¥Ã¥À¤½¤ì¼«ÂΤ¬¡¢
- ²¼µ­¤Î¥½¡¼¥È¥¯¥¨¥ê¡¼¥ª¥×¥·¥ç¥ó¤òÉղ乤ë
- ¼«Ê¬¼«¿È¤ò»²¾È¤¹¤ë¥ê¥ó¥¯¤Ç¤¹¡£
- ²¼µ­¤Î¥ª¥×¥·¥ç¥ó¤Î¤É¤ì¤Ç¤â¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¥ê¥½¡¼¥¹¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ë²Ã¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <ul>
- <li><code>C=N</code> ¤Ï¡¢¥Õ¥¡¥¤¥ë̾¤Ç¥½¡¼¥È¤·¤Þ¤¹¡£</li>
-
- <li><code>C=M</code> ¤Ï¡¢¹¹¿·Æü»þ¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¡¢¥Õ¥¡¥¤¥ë̾¤Î½ç¤Ç¥½¡¼¥È¤·¤Þ¤¹¡£</li>
-
- <li><code>C=S</code> ¤Ï¡¢¥µ¥¤¥º¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¡¢¥Õ¥¡¥¤¥ë̾¤Î½ç¤Ç¥½¡¼¥È¤·¤Þ¤¹¡£</li>
-
- <li class="separate"><code>C=D</code> ¤Ï¡¢ÀâÌÀ¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¡¢¥Õ¥¡¥¤¥ë̾¤Î½ç¤Ç¥½¡¼¥È¤·¤Þ¤¹¡£</li>
-
- <li><code>O=A</code> ¤Ï¡¢¾º½ç¤Çɽ¤ò¥½¡¼¥È¤·¤Þ¤¹¡£</li>
-
- <li class="separate"><code>O=D</code> ¤Ï¡¢¹ß½ç¤Çɽ¤ò¥½¡¼¥È¤·¤Þ¤¹¡£</li>
-
- <li><code>F=0</code> ¤Ï¡¢Ã±½ã¤Êɽ¤Î½ñ¼°¤Ë¤·¤Þ¤¹¡£
- (FancyIndex ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£)</li>
-
- <li><code>F=1</code> ¤Ï¡¢FancyIndex
- ɽ¼¨¤Îɽ¤Î½ñ¼°¤Ë¤·¤Þ¤¹¡£</li>
-
- <li><code>F=2</code> ¤Ï¡¢É½¤ò HTML
- ¤Î¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤¿ FancyIndex ¤Î½ñ¼°¤Ë¤·¤Þ¤¹¡£</li>
-
- <li><code>V=0</code>
- ¤Ï¡¢¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤ë¥½¡¼¥È¤ò̵¸ú¤Ë¤·¤Þ¤¹¡£</li>
-
- <li class="separate"><code>V=1</code>
- ¤Ï¡¢¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤ë¥½¡¼¥È¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£</li>
-
- <li><code>P=<var>pattern</var></code>
- ¤Ï¡¢Í¿¤¨¤é¤ì¤¿ <var>pattern</var>
- ¤ËŬ¹ç¤·¤¿¥Õ¥¡¥¤¥ë¤Î¤ß¤òɽ¼¨¤·¤Þ¤¹¡£</li>
- </ul>
-
- <p>"P (¥Ñ¥¿¡¼¥ó¤Î P)" ¥¯¥¨¥ê¡¼°ú¿ô¤Ï¡¢
- Ä̾ï¤Î <code class="directive"><a href="#indexignore">IndexIgnore</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬½èÍý¤µ¤ì¤¿<em>¸å</em>¤Ë¸¡ºº¤µ¤ì¡¢
- ¥Õ¥¡¥¤¥ë̾Á´¤Æ¤¬¡¢Â¾¤Î autoindex
- ¥ê¥¹¥È½èÍý¤ÈƱÍͤÎȽÄê´ð½à²¼¤ËÃÖ¤«¤ì³¤±¤ë
- ¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤Î¥¯¥¨¥ê¡¼°ú¿ô¥Ñ¡¼¥µ (²òÀÏ) ¤Ï¡¢
- ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó¤Ë¤Ö¤Ä¤«¤ë¤È¨ºÂ¤ËÄä»ß¤·¤Þ¤¹¡£
- ¥¯¥¨¥ê¡¼°ú¿ô¤Ï¾å¤Îɽ¤Ë½¾¤Ã¤Æ
- Àµ¤·¤¤·Á¼°¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>²¼¤Îñ½ã¤ÊÎã¤Ï¡¢¤³¤ì¤é¤Î¥¯¥¨¥ê¡¼¥ª¥×¥·¥ç¥ó¤ò
- ɽ¤·¤Þ¤¹¡£¤³¤ì¤ò¤½¤Î¤Þ¤ÞÀÚ¤ê¼è¤Ã¤Æ HEADER.html
- ¥Õ¥¡¥¤¥ë¤ËÊݸ¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- mod_autoindex ¤¬ X=Go ÆþÎϤˤ֤Ĥ«¤ëÁ°¤Ë
- °ú¿ô¤¬Á´¤Æ²ò¼á¤µ¤ì¤ë¤è¤¦¤Ë¡¢
- ̤ÃΤΰú¿ô "X" ¤Ï¥ê¥¹¥È¤ÎºÇ¸å¤ËÃÖ¤«¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;form action="" method="get"&gt;<br />
- <span class="indent">
- Show me a &lt;select name="F"&gt;<br />
- <span class="indent">
- &lt;option value="0"&gt; Plain list&lt;/option&gt;<br />
- &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;<br />
- &lt;option value="2"&gt; Table list&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- Sorted by &lt;select name="C"&gt;<br />
- <span class="indent">
- &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;<br />
- &lt;option value="M"&gt; Date Modified&lt;/option&gt;<br />
- &lt;option value="S"&gt; Size&lt;/option&gt;<br />
- &lt;option value="D"&gt; Description&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- &lt;select name="O"&gt;<br />
- <span class="indent">
- &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;<br />
- &lt;option value="D"&gt; Descending&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- &lt;select name="V"&gt;<br />
- <span class="indent">
- &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;<br />
- &lt;option value="1"&gt; in Version order&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- Matching &lt;input type="text" name="P" value="*" /&gt;<br />
- &lt;input type="submit" name="X" value="Go" /&gt;<br />
- </span>
- &lt;/form&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ë
-ɽ¼¨¤µ¤ì¤ë¡¢¥Õ¥¡¥¤¥ë̾¤ÇÁªÂò¤µ¤ì¤¿ÂåÂإƥ­¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAlt</code> ¤Ï¡¢<code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ëɽ¼¨¤¹¤ëÂåÂإƥ­¥¹¥È¤òÄ󶡤·¤Þ¤¹¡£
- <var>file</var> ¤Ï¡¢ÀâÌÀ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¡¢
- ¥Õ¥¡¥¤¥ë̾¤Î°ìÉô¡¢¥ï¥¤¥ë¥É¥«¡¼¥Éɽ¸½¡¢´°Á´¤Ê¥Õ¥¡¥¤¥ë̾¤Î
- ¤É¤ì¤«¤Ë¤Ê¤ê¤Þ¤¹¡£
- <var>string</var> ¤Ë¶õÇò¤¬¤¢¤ë¾ì¹ç¤Ï°úÍÑÉä (<code>"</code>
- ¤« <code>'</code>) ¤Ç°Ï¤àɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Îʸ»úÎó¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬²èÁü¤òɽ¼¨¤Ç¤­¤Ê¤¤¾ì¹ç¤ä
- ²èÁü¤Î¥í¡¼¥É¤ò̵¸ú¤Ë¤·¤Æ¤¤¤ë¾ì¹ç¤ä
- ¥¢¥¤¥³¥ó¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddAlt "PDF file" *.pdf<br />
- AddAlt Compressed *.gz *.zip *.Z
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAltByEncoding" id="AddAltByEncoding">AddAltByEncoding</a> <a name="addaltbyencoding" id="addaltbyencoding">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ëɽ¼¨¤µ¤ì¤ë¡¢MIME Éä¹æ²½ÊýË¡¤ÇÁªÂò¤µ¤ì¤¿
-ÂåÂإƥ­¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAltByEncoding</code> ¤Ï¡¢
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ëɽ¼¨¤¹¤ëÂåÂØʸ»úÎó¤òÄ󶡤·¤Þ¤¹¡£
- <var>MIME-encoding</var> ¤ÏÍ­¸ú¤ÊÉä¹æ²½¡¢Î㤨¤Ð
- <code>x-compress</code>
- ¤Ç¤¹¡£
- <var>string</var> ¤Ë¶õÇò¤¬¤¢¤ë¤È¤­¤Ï¡¢°úÍÑÉä (<code>"</code> ¤«
- <code>'</code>) ¤Ç°Ï¤àɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Îʸ»úÎó¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬²èÁü¤òɽ¼¨¤Ç¤­¤Ê¤¤¾ì¹ç¤ä
- ²èÁü¤Î¥í¡¼¥É¤ò̵¸ú¤Ë¤·¤Æ¤¤¤ë¾ì¹ç¤ä
- ¥¢¥¤¥³¥ó¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddAltByEncoding gzip x-gzip
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAltByType" id="AddAltByType">AddAltByType</a> <a name="addaltbytype" id="addaltbytype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ë
-ɽ¼¨¤µ¤ì¤ë¡¢MIME ¥¿¥¤¥×¤ÇÁªÂò¤µ¤ì¤¿ÂåÂإƥ­¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAltByType</code> ¤Ï¡¢
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ëɽ¼¨¤¹¤ëÂåÂØʸ»úÎó¤òÀßÄꤷ¤Þ¤¹¡£
- <var>MIME-type</var> ¤ÏÍ­¸ú¤Ê¥¿¥¤¥×¡¢Î㤨¤Ð
- <code>text/html</code>
- ¤Ç¤¹¡£
- <var>string</var> ¤Ë¶õÇò¤¬¤¢¤ë¤È¤­¤Ï¡¢°úÍÑÉä (<code>"</code> ¤«
- <code>'</code>) ¤Ç°Ï¤àɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Îʸ»úÎó¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬²èÁü¤òɽ¼¨¤Ç¤­¤Ê¤¤¾ì¹ç¤ä
- ²èÁü¤Î¥í¡¼¥É¤ò̵¸ú¤Ë¤·¤Æ¤¤¤ë¾ì¹ç¤ä
- ¥¢¥¤¥³¥ó¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddAltByType 'plain text' text/plain
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddDescription" id="AddDescription">AddDescription</a> <a name="adddescription" id="adddescription">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æɽ¼¨¤¹¤ëÀâÌÀ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddDescription <var>string</var> <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æɽ¼¨¤¹¤ëÀâÌÀ¤òÀßÄꤷ¤Þ¤¹¡£
- <var>file</var> ¤ÏÀâÌÀ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¡¢
- ¥Õ¥¡¥¤¥ë̾¤Î°ìÉô¡¢¥ï¥¤¥ë¥É¥«¡¼¥Éɽ¸½¡¢´°Á´¤Ê¥Õ¥¡¥¤¥ë̾¤Î
- ¤É¤ì¤«¤Ë¤Ê¤ê¤Þ¤¹¡£
- <var>string</var> ¤ÏÆó½Å°úÍÑÉä (<code>"</code>) ¤Ç°Ï¤Þ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddDescription "The planet Mars" /web/pics/mars.gif
- </code></p></div>
-
- <p>Ä̾ï¤Î¥Ç¥Õ¥©¥ë¥È¤ÎÀâÌÀÎΰè¤Ï 23 ¥Ð¥¤¥È¤ÎÉý¤Ç¤¹¡£
- <code><a href="#indexoptions.suppressicon">IndexOptions SuppressIcon</a></code>
- ¥ª¥×¥·¥ç¥ó¤Ç 6 ¥Ð¥¤¥ÈÄɲá¢
- <code><a href="#indexoptions.suppresssize">IndexOptions SuppressSize</a></code>
- ¥ª¥×¥·¥ç¥ó¤Ç 7 ¥Ð¥¤¥ÈÄɲá¢
- <code><a href="#indexoptions.suppresslastmodified">IndexOptions SuppressLastModified</a></code>
- ¥ª¥×¥·¥ç¥ó¤Ç 19 ¥Ð¥¤¥ÈÄɲ䵤ì¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¥Ç¥Õ¥©¥ë¥È¤ÎÀâÌÀ¥³¥é¥à¤ÎºÇÂçÉý¤Ï
- 55 ¥Ð¥¤¥È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥³¥é¥à¤ÎÂ礭¤µ¤ò¾å½ñ¤­¤·¤¿¤ê¡¢
- ÀâÌÀ¤¬ÌµÀ©¸ÂŤǤâ¤è¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Î¾ÜºÙ¤Ë´Ø¤·¤Æ¤Ï¡¢
- <a href="#indexoptions.descriptionwidth">DescriptionWidth</a>
- ¤È¤¤¤¦
- <code class="directive"><a href="#indexoptions">IndexOptions</a></code>
- ¤Î¥­¡¼¥ï¡¼¥É¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <div class="note"><h3>·Ù¹ð</h3>
- <p><code class="directive">AddDescription</code>
- ¤ÇÄêµÁ¤µ¤ì¤¿ÀâÌÀ¥Æ¥­¥¹¥È¤Ï¡¢¥¿¥°¤äʸ»úÎó¤È¤¤¤Ã¤¿
- HTML ¥Þ¡¼¥¯¥¢¥Ã¥×¤ò´Þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤â¤·¡¢ÀâÌÀ¥³¥é¥à¤ÎÉý¤Ë¤è¤Ã¤Æ¥¿¥°ÉÕ¤±¤µ¤ì¤¿Í×ÁǤ¬´Ý¤á¹þ¤Þ¤ì¤¿
- (ÂÀ»ú¤Î¸ì¶ç¤ÎºÇ¸å¤¬ÀÚ¤ì¤ë¤È¤¤¤Ã¤¿) ¾ì¹ç¡¢
- ½ÐÎÏ·ë²Ì¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤Î»Ä¤ê¤ÎÉôʬ¤Ë±Æ¶Á¤òÍ¿¤¨¤ë¤Ç¤·¤ç¤¦¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIcon" id="AddIcon">AddIcon</a> <a name="addicon" id="addicon">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤ò̾Á°¤ÇÁªÂò</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddIcon <var>icon</var> <var>name</var>
-[<var>name</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢
- <var>name</var> ¤Ç½ª¤ï¤ë¥Õ¥¡¥¤¥ë¤ÎÎÙ¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤òÀßÄꤷ¤Þ¤¹¡£
- <var>icon</var> ¤Ï¡¢(% ¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿) ¥¢¥¤¥³¥ó¤Ø¤ÎÁêÂÐ URL
- ¤«¡¢Â¾¤Î½ñ¼° (<var>alttext</var>, <var>url</var>) ¤Ç¤¹¡£
- ¤³¤³¤Ç <var>alttext</var>
- ¤Ï¡¢Èó¥°¥é¥Õ¥£¥«¥ë¥Ö¥é¥¦¥¶¸þ¤±¤Ë¥¢¥¤¥³¥ó¤ËÉÕ¤±¤é¤ì¤¿¥Æ¥­¥¹¥È¥¿¥°¤Ç¤¹¡£
- </p>
-
- <p><var>name</var> ¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¤ËÂбþ¤¹¤ë <code>^^DIRECTORY^^</code>
- ¤«¡¢¶õÇò¹Ô¤ËÂбþ¤¹¤ë <code>^^BLANKICON^^</code> (°ìÍ÷¤¬Àµ¤·¤¯É½¼¨¤µ¤ì¤ë¤¿¤á¤Ë) ¤«¡¢
- ¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤«¡¢¥ï¥¤¥ë¥É¥«¡¼¥Éɽ¸½¤«¡¢¥Õ¥¡¥¤¥ë̾¤Î°ìÉô¤«
- ´°Á´¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
- AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
- AddIcon /icons/backup.xbm *~
- </code></p></div>
-
- <p>¤â¤·²Äǽ¤Ê¤é¡¢
- <code class="directive">AddIcon</code>
- ¤è¤ê
- <code class="directive"><a href="#addiconbytype">AddIconByType</a></code>
- ¤òÍ¥ÀèŪ¤Ë»È¤¦¤Ù¤­¤Ç¤·¤ç¤¦¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIconByEncoding" id="AddIconByEncoding">AddIconByEncoding</a> <a name="addiconbyencoding" id="addiconbyencoding">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤ò MIME
-Éä¹æ²½ÊýË¡¤ÇÁªÂò</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢¥Õ¥¡¥¤¥ë¤ÎÎÙ¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤òÀßÄꤷ¤Þ¤¹¡£
- <var>icon</var> ¤Ï¡¢(% ¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿) ¥¢¥¤¥³¥ó¤Ø¤ÎÁêÂÐ URL
- ¤«¡¢Â¾¤Î½ñ¼° <code>(<var>alttext</var>, <var>url</var>)</code> ¤Ç¤¹¡£
- ¤³¤³¤Ç <var>alttext</var>
- ¤Ï¡¢Èó¥°¥é¥Õ¥£¥«¥ë¥Ö¥é¥¦¥¶¸þ¤±¤Ë¥¢¥¤¥³¥ó¤ËÉÕ¤±¤é¤ì¤¿¥Æ¥­¥¹¥È¥¿¥°¤Ç¤¹¡£
- </p>
-
- <p><var>MIME-encoding</var> ¤Ï¡¢Í׵ᤵ¤ì¤¿¥¨¥ó¥³¡¼¥É¤Ë³ºÅö¤¹¤ë
- ¥ï¥¤¥ë¥É¥«¡¼¥Éɽ¸½¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddIconByEncoding /icons/compress.xbm x-compress
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIconByType" id="AddIconByType">AddIconByType</a> <a name="addiconbytype" id="addiconbytype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤ÎÎÙ¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤ò
-MIME ¥¿¥¤¥×¤Ë¤è¤Ã¤ÆÁªÂò</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢¥Õ¥¡¥¤¥ë¤ÎÎÙ¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤òÀßÄꤷ¤Þ¤¹¡£
- <var>icon</var> ¤Ï¡¢(% ¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿) ¥¢¥¤¥³¥ó¤Ø¤ÎÁêÂÐ URL
- ¤«¡¢Â¾¤Î½ñ¼° <code>(<var>alttext</var>, <var>url</var>)</code> ¤Ç¤¹¡£
- ¤³¤³¤Ç <var>alttext</var>
- ¤Ï¡¢Èó¥°¥é¥Õ¥£¥«¥ë¥Ö¥é¥¦¥¶¸þ¤±¤Ë¥¢¥¤¥³¥ó¤ËÉÕ¤±¤é¤ì¤¿¥Æ¥­¥¹¥È¥¿¥°¤Ç¤¹¡£
- </p>
-
- <p><var>MIME-type</var> ¤Ï¡¢Í׵ᤵ¤ì¤¿¥¿¥¤¥×¤Ë³ºÅö¤¹¤ë
- ¥ï¥¤¥ë¥É¥«¡¼¥Éɽ¸½¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddIconByType (IMG,/icons/image.xbm) image/*
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultIcon" id="DefaultIcon">DefaultIcon</a> <a name="defaulticon" id="defaulticon">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆÃÄê¤Î¥¢¥¤¥³¥ó¤¬²¿¤âÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤»þ¤Ë
-¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DefaultIcon <var>url-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¤Ë¤ª¤¤¤Æ¡¢
- ÆÃÄê¤Î¥¢¥¤¥³¥ó¤¬¤Ê¤¤¾ì¹ç¤Ë¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤òÀßÄꤷ¤Þ¤¹¡£
- <var>url-path</var> ¤Ï¡¢(% ¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿) ¥¢¥¤¥³¥ó¤Ø¤ÎÁêÂÐ URL
- ¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- DefaultIcon /icon/unknown.xbm
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HeaderName" id="HeaderName">HeaderName</a> <a name="headername" id="headername">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>
-¥¤¥ó¥Ç¥Ã¥¯¥¹°ìÍ÷¤ÎÀèƬ¤ËÁÞÆþ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>HeaderName <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">HeaderName</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥¤¥ó¥Ç¥Ã¥¯¥¹°ìÍ÷¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤷ¤Þ¤¹¡£
- <var>Filename</var> ¤Ï¼è¤ê¹þ¤à¥Õ¥¡¥¤¥ë¤Î̾Á°¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- HeaderName HEADER.html
- </code></p></div>
-
- <div class="note">
- <p>HeaderName ¤â <code class="directive"><a href="#readmename">ReadmeName</a></code>
- ¤âξÊý¤È¤â¸½ºß¤Ï¡¢<var>filename</var>
- ¤ò¥¤¥ó¥Ç¥Ã¥¯¥¹¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ËÍѤ¤¤é¤ì¤¿ URI
- ¤ËÂФ¹¤ëÁêÂÐ URI ¥Ñ¥¹¤È¤·¤Æ°·¤¤¤Þ¤¹¡£
- <var>filename</var> ¤¬¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤ë¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- HeaderName /include/HEADER.html
- </code></p></div>
-
- <p><var>filename</var> ¤Ï
- ¥á¥¸¥ã¡¼¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤¬ "<code>text/*</code>"
- (<em>Î㤨¤Ð</em>¡¢<code>text/html</code>,
- <code>text/plain</code> Åù¤Ç¤¹¡£)
- ¤Î¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ²ò·è
- ¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤ì¤Ï¤Ä¤Þ¤ê¡¢
- ¤â¤· CGI ¥¹¥¯¥ê¥×¥È¤Î¼ÂºÝ¤Î¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤¬
- ¼¡¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¤è¤¦¤Ë¤·¤Æ¼ÂºÝ¤Î½ÐÎϤȤϰۤʤäÆ
- <code>text/html</code> ¤È¤·¤Æ¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢
- <var>filename</var>
- ¤Ï CGI ¥¹¥¯¥ê¥×¥È¤ò»²¾È¤¹¤ë¤«¤âÃΤì¤Ê¤¤¡¢
- ¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- AddType text/html .cgi
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/core.html#options">Options</a></code> <code>MultiViews</code> ¤¬
- Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- <a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>
- ¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- ¤â¤· <var>filename</var> ¤¬ (CGI ¥¹¥¯¥ê¥×¥È¤Ç¤Ê¤¤) ÀÅŪ¤Ê
- <code>text/html</code> ¥É¥­¥å¥á¥ó¥È¤Ç²ò·è¤µ¤ì¡¢
- <code class="directive"><a href="../mod/core.html#options">options</a></code>
- <code>Includes</code> ¤« <code>IncludesNOEXEC</code>
- ¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥Õ¥¡¥¤¥ë¤Ï¥µ¡¼¥Ð¡¼¥µ¥¤¥É¥¤¥ó¥¯¥ë¡¼¥É¤Ç½èÍý¤µ¤ì¤Þ¤¹
- (<code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¥É¥­¥å¥á¥ó¥È¤ò»²¾È¤·¤Æ²¼¤µ¤¤)¡£</p>
- </div>
-
- <p>¤â¤· <code class="directive">HeaderName</code> ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤¬
- HTML ¥É¥­¥å¥á¥ó¥È¤Î³«»ÏÉôʬ (&lt;html&gt;, &lt;head&gt;,
- Åù) ¤ò´Þ¤ó¤Ç¤¤¤¿¤é¡¢
- <a href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
- +SuppressHTMLPreamble</code></a>
- ¤òÀßÄꤷ¤Æ¡¢¤³¤ì¤é¤Î¥¿¥°¤¬·«¤êÊÖ¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤¿¤¤¤È»×¤¦¤Ç¤·¤ç¤¦¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexIgnore" id="IndexIgnore">IndexIgnore</a> <a name="indexignore" id="indexignore">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤ò¹Ô¤Ê¤¦ºÝ¤Ë̵»ë¤¹¤Ù¤­
-¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤ËÄɲÃ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>IndexIgnore <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexIgnore</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¤Î°ìÍ÷¤ò¹Ô¤¦ºÝ¤Ë̵»ë¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤ËÄɲä·¤Þ¤¹¡£
- <var>file</var> ¤Ï¡¢
- ¥·¥§¥ë·Á¼°¤Î¥ï¥¤¥ë¥É¥«¡¼¥Éɽ¸½¤«´°Á´¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤¹¡£
- IndexIgnore ¤¬Ê£¿ô¤¢¤ë¾ì¹ç¤Ï¡¢Ìµ»ë¤¹¤ë¥ê¥¹¥È¤ËÄɲ䬹Ԥï¤ì¡¢
- ÃÖ´¹¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥ê¥¹¥È¤Ë¤Ï <code>.</code>
- (¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê) ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- IndexIgnore README .htaccess *.bak *~
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexOptions" id="IndexOptions">IndexOptions</a> <a name="indexoptions" id="indexoptions">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤ÎÍÍ¡¹¤ÊÀßÄê¹àÌÜ
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexOptions</code>
- ¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤ÎµóÆ°¤ò»ØÄꤷ¤Þ¤¹¡£
- <var>option</var> ¤Ï¼¡¤Î¤É¤ì¤«¤Ç¤¹:</p>
-
- <dl>
- <dt><a name="indexoptions.descriptionwidth" id="indexoptions.descriptionwidth">DescriptionWidth=[<var>n</var> | *]</a>
- (<em>2.0.23 °Ê¹ß</em>)</dt>
-
- <dd><code>DescriptionWidth</code>
- ¥­¡¼¥ï¡¼¥É¤ÏÀâÌÀ¥³¥é¥à¤ÎÉý¤òʸ»ú¿ô¤Ç»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dd><code>-DescriptionWidth</code> (¤Þ¤¿¤ÏÈóÀßÄê) ¤Ç¡¢
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤¬ºÇŬ¤ÊÉý¤ò·×»»¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dd><code>DescriptionWidth=<var>n</var></code>
- ¤Ç¡¢¥³¥é¥àÉý¤ò <var>n</var> ¥Ð¥¤¥È¤Ë¸ÇÄꤷ¤Þ¤¹¡£</dd>
-
- <dd><code>DescriptionWidth=*</code>
- ¤Ï¡¢ºÇŤÎÀâÌÀ¤Ë¹ç¤ï¤»¤ÆɬÍפÊŤµ¤Þ¤Ç¥³¥é¥à¤ò±ä¤Ð¤·¤Þ¤¹¡£</dd>
-
- <dd><strong>ÀâÌÀ¤ò´Ý¤á¹þ¤ó¤À¾ì¹çÆÃÍ­¤Î´í¸±¤Ë¤Ä¤¤¤Æ¤Ï
- <code class="directive"><a href="#adddescription">AddDescription</a></code>
- ¥»¥¯¥·¥ç¥ó¤ò¤ªÆɤ߲¼¤µ¤¤¡£</strong></dd>
-
- <dt><a name="indexoptions.fancyindexing" id="indexoptions.fancyindexing">FancyIndexing</a></dt>
-
- <dd>¾þ¤êÉÕ¤­¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò¥ª¥ó¤Ë¤·¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.foldersfirst" id="indexoptions.foldersfirst">FoldersFirst</a>
- (<em>2.0.23 °Ê¹ß</em>)</dt>
-
- <dd>¤³¤Î¥ª¥×¥·¥ç¥ó¤¬Í­¸ú¤Ë¤Ê¤Ã¤¿¾ì¹ç¡¢¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Î°ìÍ÷¤Ï
- <em>ɬ¤º</em>ºÇ½é¤Ë¸½¤ï¤ì¤Æ¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ÎÄ̾ï¤Î¥Õ¥¡¥¤¥ë¤Ï
- ¤½¤Î¸å¤Ë³¤­¤Þ¤¹¡£
- °ìÍ÷¤Ï´ðËÜŪ¤Ë¤Ï¡¢¥Õ¥¡¥¤¥ë¤È¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆó¤Ä¤ÎÉôʬ¤Ëʬ¤±¤é¤ì¤Æ¡¢
- ¤½¤ì¤¾¤ì¤ÏÊÌ¡¹¤Ë¥½¡¼¥È¤µ¤ì¡¢¤½¤Î¸å¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤òÀè¤Ë¤·¤Æ
- ɽ¼¨¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£Î㤨¤Ð¥½¡¼¥È½ç¤¬Ì¾Á°¤Î¹ß½ç¤Ë¤Ê¤Ã¤Æ¤¤¤Æ¡¢
- <code>FoldersFirst</code> ¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê <code>Zed</code> ¤Ï¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê
- <code>Beta</code> ¤è¤ê¤âÁ°¤Ë¥ê¥¹¥È¤µ¤ì¡¢Ä̾ï¤Î¥Õ¥¡¥¤¥ë
- <code>Gamma</code> ¤ä <code>Alpha</code>
- ¤è¤ê¤âÁ°¤Ë¥ê¥¹¥È¤µ¤ì¤Þ¤¹¡£<strong>¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï
- <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a>
- ¤âÍ­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤­¤Ë¤Î¤ß¡¢¸ú²Ì¤¬¤¢¤ê¤Þ¤¹¡£</strong></dd>
-
- <dt><a name="indexoptions.htmltable" id="indexoptions.htmltable">HTMLTable</a> <em>(¼Â¸³Åª¡¢
- Apache 2.0.23 °Ê¹ß)</em></dt>
-
- <dd>¤³¤Î¼Â¸³Åª¤Ê¥ª¥×¥·¥ç¥ó¤Ï FancyIndexing ¤È¤È¤â¤Ë»ØÄꤹ¤ë¤³¤È¤Ç¡¢
- ¾þ¤ê¤ÎÉÕ¤¤¤¿¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤Î¤¿¤á¤Ë¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤¿Ã±½ã¤Êɽ¤òºî¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï¸Å¤¤¥Ö¥é¥¦¥¶¤òº®Í𤵤»¤ë¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- WinNT ¤ä¤½¤Î¾ utf-8
- ¤¬Í­¸ú¤Ê¥×¥é¥Ã¥È¥Û¡¼¥à¤Î¤è¤¦¤Ë¡¢¥Õ¥¡¥¤¥ë̾¤äÀâÌÀ¥Æ¥­¥¹¥È¤¬
- ±¦Æɤߤˤʤ俤꺸Æɤߤˤʤꤨ¤ë¾ì¹ç¤ÏÆäËɬÍפǤ¹¡£</dd>
-
- <dt><a name="indexoptions.iconsarelinks" id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>
-
- <dd>¤³¤ì¤Ï¡¢FancyIndexing ¤Ë¤ª¤¤¤Æ¡¢
- ¥¢¥¤¥³¥ó¤â¥Õ¥¡¥¤¥ë̾¤Ø¤Î¥ê¥ó¥¯¤Î°ìÉô¤Ë¤·¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.iconheight" id="indexoptions.iconheight">IconHeight[=<var>pixels</var>]</a></dt>
-
- <dd>¤³¤Î¥ª¥×¥·¥ç¥ó¤¬¡¢IconWidth ¤È¤È¤â¤Ë»È¤ï¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï¥Õ¥¡¥¤¥ë¥¢¥¤¥³¥ó¤Î¤¿¤á¤Î <code>img</code>
- ¥¿¥°¤Ë <code>height</code> ¤È <code>width</code>
- °À­¤ò¼è¤ê¹þ¤à¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤Ã¤Æ¡¢¥¤¥á¡¼¥¸Á´¤Æ¤ò¥í¡¼¥É¤·½ª¤ï¤ë¤Þ¤ÇÂÔ¤¿¤Ê¤¯¤Æ¤â¡¢
- ¥Ö¥é¥¦¥¶¤Ï¥Ú¡¼¥¸¥ì¥¤¥¢¥¦¥È¤ò¤¢¤é¤«¤¸¤á·×»»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ë²¿¤âÃͤ¬Í¿¤¨¤é¤ì¤Ê¤±¤ì¤Ð¡¢Apache
- ¥½¥Õ¥È¥¦¥§¥¢¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¥¢¥¤¥³¥ó¤Îɸ½à¤Î¹â¤µ¤¬
- ¥Ç¥Õ¥©¥ë¥È¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.iconwidth" id="indexoptions.iconwidth">IconWidth[=<var>pixels</var>]</a></dt>
-
- <dd>¤³¤Î¥ª¥×¥·¥ç¥ó¤¬¡¢<code>IconHeight</code> ¤È¤È¤â¤Ë»È¤ï¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï¥Õ¥¡¥¤¥ë¥¢¥¤¥³¥ó¤Î¤¿¤á¤Î <code>img</code>
- ¥¿¥°¤Ë <code>height</code> ¤È <code>width</code>
- °À­¤ò¼è¤ê¹þ¤à¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤Ã¤Æ¡¢¥¤¥á¡¼¥¸Á´¤Æ¤ò¥í¡¼¥É¤·½ª¤ï¤ë¤Þ¤ÇÂÔ¤¿¤Ê¤¯¤Æ¤â¡¢
- ¥Ö¥é¥¦¥¶¤Ï¥Ú¡¼¥¸¥ì¥¤¥¢¥¦¥È¤ò¤¢¤é¤«¤¸¤á·×»»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ë²¿¤âÃͤ¬Í¿¤¨¤é¤ì¤Ê¤±¤ì¤Ð¡¢Apache
- ¥½¥Õ¥È¥¦¥§¥¢¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¥¢¥¤¥³¥ó¤Îɸ½à¤Î¹â¤µ¤¬
- ¥Ç¥Õ¥©¥ë¥È¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.ignorecase" id="indexoptions.ignorecase">IgnoreCase</a></dt>
-
- <dd>¤³¤Î¥ª¥×¥·¥ç¥ó¤¬Í­¸ú¤Ç¤¢¤ë¤È¡¢¥Õ¥¡¥¤¥ë̾¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¤Ë¥½¡¼¥È¤µ¤ì¤Þ¤¹¡£
- Î㤨¤Ð¥Õ¥¡¥¤¥ë̾¤¬¾º½ç¤Ç¥½¡¼¥È¤µ¤ì¡¢IgnoreCase ¤¬Í­¸ú¤Ç¤¢¤ì¤Ð¡¢
- Zeta ¤Ï alfa ¤Î¸å¤Ë¥ê¥¹¥È¤µ¤ì¤Þ¤¹
- (Ãí°Õ: GAMMA ¤Ï¾ï¤Ë gamma ¤ÎÁ°¤Ë¤Ê¤ê¤Þ¤¹)¡£</dd>
-
- <dt><a name="indexoptions.ignoreclient" id="indexoptions.ignoreclient">IgnoreClient</a></dt>
-
- <dd>¤³¤Î¥ª¥×¥·¥ç¥ó¤Ç <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤Ï¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤ÎÁ´¤Æ¤Î¥¯¥¨¥ê¡¼ÊÑ¿ô¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï¥½¡¼¥È½ç¤â´Þ¤ß¤Þ¤¹¡£
- (¤Ä¤Þ¤ê <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>
- ¤ò°Å¤Ë°ÕÌ£¤·¤Þ¤¹¡£)</dd>
-
- <dt><a name="indexoptions.namewidth" id="indexoptions.namewidth">NameWidth=[<var>n</var>
- | *]</a></dt>
-
- <dd><code>NameWidth</code> ¥­¡¼¥ï¡¼¥É¤Ç¥Õ¥¡¥¤¥ë̾¥³¥é¥à¤ÎÉý¤ò¥Ð¥¤¥È¿ô¤Ç
- »ØÄê¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dd><code>-NameWidth</code> (¤Þ¤¿¤ÏÈóÀßÄê) ¤Ç¡¢
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤¬ºÇŬ¤ÊÉý¤ò·×»»¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dd><code>NameWidth=<var>n</var></code>
- ¤Ç¡¢¥³¥é¥àÉý¤ò <var>n</var> ¥Ð¥¤¥È¤Ë¸ÇÄꤷ¤Þ¤¹¡£</dd>
-
- <dd><code>NameWidth=*</code>
- ¤Ï¡¢É¬ÍפÊŤµ¤Þ¤Ç¥³¥é¥à¤ò±ä¤Ð¤·¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.scanhtmltitles" id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>
-
- <dd>FancyIndexing ¤Î¤¿¤á¤Ë¡¢
- HTML ¥É¥­¥å¥á¥ó¥È¤«¤é¥¿¥¤¥È¥ë¤ò¼è¤ê½Ð¤¹¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£
- ¤â¤·¥Õ¥¡¥¤¥ë¤Ë
- <code class="directive"><a href="#adddescription">AddDescription</a></code>
- ¤ÇÀâÌÀ¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢
- httpd ¤Ï <code>title</code> ¥¿¥°¤ÎÃͤòÆɤि¤á¤Ë¥É¥­¥å¥á¥ó¥È¤òÆɤ߻Ϥá¤Þ¤¹¡£
- ¤³¤ì¤Ï CPU ¤ä disk ¤ËÉé²Ù¤ò¤«¤±¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.showforbidden" id="indexoptions.showforbidden">ShowForbidden</a></dt>
-
- <dd>»ØÄꤷ¤¿¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤Î·ë²Ì¤¬ HTTP_UNAUTHORIZED ¤ä
- HTTP_FORBIDDEN ¤Î¥Õ¥¡¥¤¥ë¤ÏÄ̾ïÄ̤걣¤µ¤ì¤¿¾õÂ֤Τޤޡ¢
- ¥Õ¥¡¥¤¥ë°ìÍ÷¤¬À¸À®¤µ¤ì¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.suppresscolumnsorting" id="indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></dt>
-
- <dd>¤â¤·»ØÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢Apache ¤Ï
- FancyIndexing ¤Çɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤Ç¤Î
- ¥³¥é¥à¤ÎÀèƬ¤ò¡¢¥½¡¼¥È¤Î¤¿¤á¤Î¥ê¥ó¥¯¤Ë¤·¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤ÎµóÆ°¤Ï¡¢¥ê¥ó¥¯¤È¤·¤Þ¤¹¡£
- ¥³¥é¥à¤ÎÀèƬ¤òÁª¤Ö¤È¥³¥é¥à¤ÎÃͤ˽¾¤Ã¤Æ¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È¤ò
- ¥½¡¼¥È¤·¤Þ¤¹¡£
- <strong>Apache 2.0.23 °ÊÁ°¤Ç¤Ï¡¢¤³¤ì¤ÏƱ»þ¤Ë
- ¥½¡¼¥Èʸ»úÎó¤Î¤¿¤á¤Î¥¯¥¨¥ê¡¼°ú¿ô¤Î²òÀϤâ̵¸ú¤Ë¤·¤Þ¤¹¡£
- </strong>
- ¤³¤ÎµóÆ°¤Ï Apache 2.0.23 ¤Ç¤Ï
- <a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a> ¤ÇÀ©¸æ¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.suppressdescription" id="indexoptions.suppressdescription">SuppressDescription</a></dt>
-
- <dd>¤³¤ì¤Ï FancyIndexing ¤Ë¤ª¤±¤ë¥Õ¥¡¥¤¥ë¤ÎÀâÌÀ¤ò¾Ãµî¤·¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢ÀâÌÀ¤ÏÄêµÁ¤µ¤ì¤Æ¤ª¤é¤º¡¢
- ¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤È¾¤Î¤¿¤á¤Ë 23
- ʸ»ú¤Î¶õÇò¤ò²Ô¤°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë¤ÎÀâÌÀ¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¡¢
- <code class="directive"><a href="#adddescription">AddDescription</a></code>
- ¤ò¤´Í÷²¼¤µ¤¤¡£¤Þ¤¿¡¢ÀâÌÀ¤Î¥³¥é¥à¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë
- <code><a href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
- ¥¤¥ó¥Ç¥Ã¥¯¥¹¥ª¥×¥·¥ç¥ó¤â¤´Í÷²¼¤µ¤¤¡£</dd>
-
- <dt><a name="indexoptions.suppresshtmlpreamble" id="indexoptions.suppresshtmlpreamble">SuppressHTMLPreamble</a></dt>
-
- <dd>Ä̾
- <code class="directive"><a href="#headername">HeaderName</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤ò
- ¥Ç¥£¥ì¥¯¥È¥ê¤¬¼ÂºÝ¤Ë´Þ¤ó¤Ç¤¤¤ì¤Ð¡¢É¸½àŪ¤Ê HTML ¥×¥ê¥¢¥ó¥Ö¥ë
- (<code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>, <em>Åù</em>) ¤Î¸å¤Ë¡¢
- ¥â¥¸¥å¡¼¥ë¤Ï¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Þ¤¹¡£
- <code>SuppressHTMLPreamble</code> ¥ª¥×¥·¥ç¥ó¤Ï¡¢
- ¤³¤ÎµóÆ°¤ò̵¸ú¤Ë¤Ç¤­¤Æ¡¢
- ¥â¥¸¥å¡¼¥ë¤¬¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤«¤éɽ¼¨¤ò»Ï¤á¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¡¢¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤ÏÀµ¤·¤¤ HTML
- Ì¿Îá¤ò´Þ¤ó¤Ç¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï¡¢¥×¥ê¥¢¥ó¥Ö¥ë¤ÏÄ̾ïÄ̤ê
- À¸À®¤µ¤ì¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.suppressicon" id="indexoptions.suppressicon">SuppressIcon</a> (<em>Apache
- 2.0.23 °Ê¹ß</em>)</dt>
-
- <dd>
- ¤³¤ì¤Ï FancyIndexing ¤Î°ìÍ÷¤«¤é¥¢¥¤¥³¥ó¤ò¾Ãµî¤·¤Þ¤¹¡£
- <code>SuppressIcon</code> ¤È <code>SuppressRules</code>
- ¤ÈÁȹç¤ï¤»¤ë¤³¤È¤Ë¤è¤Ã¤ÆÀµ¤·¤¤ HTML 3.2 ¤Î½ÐÎϤ¬ÆÀ¤é¤ì¤Þ¤¹¡£
- Àµ¤·¤¤ HTML 3.2 ½ÐÎϤϡ¢ºÇ½ªµ¬³Ê¤Ë¤ª¤¤¤Æ <code>img</code> ¤È <code>hr</code>
- ¤¬ <code>pre</code> ¥Ö¥í¥Ã¥¯¤ËÆþ¤ë (FancyIndexing °ìÍ÷¤Ç½ñ¼°¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹)
- ¤³¤È¤ò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.suppresslastmodified" id="indexoptions.suppresslastmodified">SuppressLastModified</a></dt>
-
- <dd>FancyIndexing °ìÍ÷¤Ë¤ª¤¤¤ÆºÇ½ª¹¹¿·Æü»þ¤Îɽ¼¨¤ò¾Ãµî¤·¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.suppressrules" id="indexoptions.suppressrules">SuppressRules</a>
- (<em>Apache 2.0.23 °Ê¹ß</em>) </dt>
-
- <dd>¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤Ë¤ª¤¤¤Æ¿åÊ¿¶èÀÚ¤êÀþ (<code>hr</code> ¥¿¥°) ¤ò¾Ãµî¤·¤Þ¤¹¡£
- <code>SuppressIcon</code> ¤È <code>SuppressRules</code>
- ¤ÈÁȹç¤ï¤»¤ë¤³¤È¤Ë¤è¤Ã¤ÆÀµ¤·¤¤ HTML 3.2 ¤Î½ÐÎϤ¬ÆÀ¤é¤ì¤Þ¤¹¡£
- Àµ¤·¤¤ HTML 3.2 ½ÐÎϤϡ¢ºÇ½ªµ¬³Ê¤Ë¤ª¤¤¤Æ <code>img</code> ¤È <code>hr</code>
- ¤¬ <code>pre</code> ¥Ö¥í¥Ã¥¯¤ËÆþ¤ë (FancyIndexing °ìÍ÷¤Ç½ñ¼°¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹)
- ¤³¤È¤ò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.suppresssize" id="indexoptions.suppresssize">SuppressSize</a></dt>
-
- <dd>FancyIndexing °ìÍ÷¤Ë¤ª¤¤¤Æ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤Îɽ¼¨¤ò¾Ãµî¤·¤Þ¤¹¡£</dd>
-
- <dt><a name="indexoptions.trackmodified" id="indexoptions.trackmodified">TrackModified</a>
- (<em>Apache 2.0.23 °Ê¹ß</em>)</dt>
-
- <dd>¤³¤ì¤Ï HTTP ¥Ø¥Ã¥ÀÃæ¤Ë¡¢
- ¥ê¥¹¥È¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ÎºÇ½ª¹¹¿·Æü¤ä ETag Ãͤò´Þ¤á¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ä¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬
- ŬÀÚ¤Ê stat() ¤ÎÊÖ¤êÃͤòÊÖ¤¹¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¹¡£
- ¤¤¤¯¤Ä¤«¤Î UNIX ¥·¥¹¥Æ¥à¡¢OS2 ¤Î JFS ¤ä Win32 ¤Î NTFS
- ¥Ü¥ê¥å¡¼¥à¤Ï¤½¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- Î㤨¤Ð¡¢OS2 ¤È Win32 FAT ¥Ü¥ê¥å¡¼¥à¤Ï¤½¤¦¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤³¤Îµ¡Ç½¤¬Í­¸ú¤Ë¤Ê¤ë¤È¡¢¥¯¥é¥¤¥¢¥ó¥È¤ä¥×¥í¥­¥·¤Ï
- <code>HEAD</code> ¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤¦¤³¤È¤Ë¤è¤Ã¤Æ¡¢
- ¥Õ¥¡¥¤¥ë°ìÍ÷¤ÎÊѲ½¤òÄÉÀפ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤¤¤¯¤Ä¤«¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ï¡¢¿·µ¬¥Õ¥¡¥¤¥ë¤ä
- °ÜÆ°¥Õ¥¡¥¤¥ë¤ÏÀµ¤·¤¯ÄÉÀפ¹¤ë¤±¤ì¤É¤â¡¢
- ¥Ç¥£¥ì¥¯¥È¥êÃæ¤Î¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤äÆüÉÕ¤ÏÄÉÀפʤ¤¤È¤¤¤¦¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- <strong>´û¤Ë¸ºß¤¹¤ë¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤äÆüÉդΥ¹¥¿¥ó¥×¤¬ÊѲ½¤·¤Æ¤â¡¢
- Á´¤Æ¤Î Unix ¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Ï¡¢
- ºÇ½ª¹¹¿·Æü¥Ø¥Ã¥À¡¼¤ò¹¹¿·¤·¤Þ¤»¤ó¡£</strong>
- ¤â¤·¤³¤ì¤¬½ÅÍפǤ¢¤ì¤Ð¡¢
- ¤³¤Î¥ª¥×¥·¥ç¥ó¤ò̵¸ú¤Î¤Þ¤Þ¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</dd>
-
- <dt><a name="indexoptions.versionsort" id="indexoptions.versionsort">VersionSort</a>
- (<em>Apache 2.0a3 °Ê¹ß</em>)</dt>
-
- <dd><code>VersionSort</code> ¥­¡¼¥ï¡¼¥É¤Ï¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤ò´Þ¤ó¤À¥Õ¥¡¥¤¥ë¤¬
- ¼«Á³¤ÊÊýË¡¤Ç¥½¡¼¥È¤µ¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ʸ»úÎó¤ÏÄ̾ïÄ̤꥽¡¼¥È¤µ¤ì¡¢
- ¤½¤ì°Ê³°¤Î¡¢ÀâÌÀ¤ä̾Á°Ãæ¤Î¿ô¤È¤Ê¤ëÉôʬʸ»úÎó¤Ï
- ¤½¤Î¿ôÃͤÇÈæ³Ó¤µ¤ì¤Þ¤¹¡£
-
- <div class="example"><h3>Îã:</h3><p><code>
- foo-1.7<br />
- foo-1.7.2<br />
- foo-1.7.12<br />
- foo-1.8.2<br />
- foo-1.8.2a<br />
- foo-1.12
- </code></p></div>
-
- <p>Èֹ椬 0 ¤«¤é»Ï¤Þ¤ë¾ì¹ç¤Ï¡¢Ã¼¿ô¤È¹Í¤¨¤é¤ì¤Þ¤¹</p>
-
- <div class="example"><p><code>
- foo-1.001<br />
- foo-1.002<br />
- foo-1.030<br />
- foo-1.04
- </code></p></div>
- </dd>
-
- <dt><a name="indexoptions.xhtml" id="indexoptions.xhtml">XHTML</a>
- (<em>Apache 2.0.49 °Ê¹ß</em>)</dt>
-
- <dd><code>XHTML</code> ¥­¡¼¥ï¡¼¥É¤ò»ØÄꤹ¤ë¤È¡¢<code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>
- ¤Ï HTML 3.2 ¤ÎÂå¤ï¤ê¤Ë XHTML 1.0 ¤Î¥³¡¼¥É¤ò½ÐÎϤ¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</dd>
- </dl>
-
-
- <dl><dt>Áý¸º»ØÄê¤Ç¤­¤ë IndexOptions</dt>
- <dd>
- <p>Apache 1.3.3 ¤Ç¤Ï¡¢
- <code class="directive">IndexOptions</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°·¤¤¤Ç´ö¤Ä¤«¤ÎÂ礭¤ÊÊѲ½¤¬Æ³Æþ¤µ¤ì¤Þ¤·¤¿¡£
- Æäˡ¢</p>
-
- <ul>
- <li>°ì¤Ä¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ¹¤ëÊ£¿ô¤Î
- <code class="directive">IndexOptions</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¸½ºß¤Ç¤Ï°ì¤Ä¤Ë¥Þ¡¼¥¸¤µ¤ì¤Þ¤¹¡£
- ¾å¤ÎÎã¤Î·ë²Ì¤Ï¡¢
-
- <div class="example"><p><code>
- &lt;Directory /foo&gt;
- <span class="indent">
- IndexOptions HTMLTable<br />
- IndexOptions SuppressColumnsorting
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¤ÈƱ°ì¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- IndexOptions HTMLTable SuppressColumnsorting
- </code></p></div>
- </li>
-
- <li>Áý¸º¹½Ê¸
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢'+' ¤ä '-'
- ¤ÎÀÜƬ¼­¤¬ÉÕ¤¯¥­¡¼¥ï¡¼¥É) ¤ÎÄɲá£</li>
- </ul>
-
- <p>'+' ¤ä '-' ÀÜƬ¼­¤ÎÉÕ¤¤¤¿¥­¡¼¥ï¡¼¥É¤Ë½Ð²ñ¤¦¤È¤½¤ì¤Ï¡¢
- ¤½¤Î»þÅÀ¤Ç¤Î <code class="directive">IndexOptions</code>
- ¤ÎÀßÄê (¤³¤ì¤Ï¾åή¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò¼õ¤±·Ñ¤®¤Þ¤¹)
- ¤ËÂФ·¤ÆŬ±þ¤µ¤ì¤Þ¤¹¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢ÀÜƬ¼­¤ÎÉÕ¤«¤Ê¤¤¥­¡¼¥ï¡¼¥É¤¬½èÍý¤µ¤ì¤¿¾ì¹ç¤Ï¡¢
- ¼õ¤±·Ñ¤¤¤À¥ª¥×¥·¥ç¥óÁ´¤Æ¤È¤½¤ì¤Þ¤Ç½Ð²ñ¤Ã¤¿Áý¸ºÀßÄêÁ´¤Æ¤¬
- ¾Ãµî¤µ¤ì¤Þ¤¹¡£¼¡¤ÎÎã¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤:</p>
-
- <div class="example"><p><code>
- IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing<br />
- IndexOptions +SuppressSize
- </code></p></div>
-
- <p>Ãæ¿È¤Î¸ú²Ì¤Ï
- <code>IndexOptions&nbsp;FancyIndexing&nbsp;+SuppressSize</code>
- ¤ÈƱ°ì¤Ç¤¹¡£
- ÀÜƬ¼­¤ÎÉÕ¤«¤Ê¤¤ <code>FancyIndexing</code>
- ¤Ç¤½¤ì°ÊÁ°¤ÎÁý¸º¥­¡¼¥ï¡¼¥É¤ò̵¸ú¤Ë¤µ¤ì¤Æ¡¢
- ¤½¤Î¸å¤ÎÎßÀѤ¬»Ï¤Þ¤ë¤«¤é¤Ç¤¹¡£</p>
-
- <p>̵¾ò·ï¤Ë <code class="directive">IndexOptions</code>
- ¤ò¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÇÀßÄꤹ¤ë¤³¤È¤Ë¤è¤Ã¤Æ
- ·Ñ¾µ¤·¤¿ÀßÄê¤ò¾Ãµî¤·¤Æ¡¢<code>+</code> ¤ä <code>-</code>
- ÀÜƬ¼­¤ÎÉÕ¤«¤Ê¤¤¥­¡¼¥ï¡¼¥É¤ÇÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£</p>
- </dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexOrderDefault" id="IndexOrderDefault">IndexOrderDefault</a> <a name="indexorderdefault" id="indexorderdefault">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>
-¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Îɸ½à¤Î½çÈÖÉÕ¤±¤òÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>IndexOrderDefault Ascending Name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexOrderDefault</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¥¤¥ó¥Ç¥Ã¥¯¥¹¥ª¥×¥·¥ç¥ó¤ÈÊ»¤»¤ÆÍѤ¤¤ì¤ì¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢FancyIndexing
- ¤Î¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤Ï¥Õ¥¡¥¤¥ë̾¤Î¾º½ç¤Çɽ¼¨¤µ¤ì¤Þ¤¹¡£
- <code class="directive">IndexOrderDefault</code>
- ¤Ç¡¢½é´ü¾õÂÖ¤Îɽ¼¨½çÈÖ¤òÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="directive">IndexOrderDefault</code>
- ¤ÏÆó¤Ä¤Î°ú¿ô¤ò¤È¤ê¤Þ¤¹¡£°ì¤ÄÌܤϥ½¡¼¥È¤ÎÊý¸þ¤ò»Ø¼¨¤¹¤ë
- <code>Ascending</code> ¤« <code>Descending</code> ¤Î¤¤¤º¤ì¤«¤Ç¤¹¡£
- Æó¤ÄÌܤΰú¿ô¤Ï <code>Name</code>, <code>Date</code>,
- <code>Size</code> ¤« <code>Description</code>
- ¤Î¤¤¤º¤ì¤«°ì¤Ä¤Î¥­¡¼¥ï¡¼¥É¤Ç¤¢¤Ã¤Æ¡¢¥×¥é¥¤¥Þ¥ê¥­¡¼¤ò»ØÄꤷ¤Þ¤¹¡£
- Æó¤ÄÌܤΥ­¡¼¤Ï<em>¾ï¤Ë</em>¥Õ¥¡¥¤¥ë̾¤Î¾º½ç¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>
- ¥¤¥ó¥Ç¥Ã¥¯¥¹¥ª¥×¥·¥ç¥ó¤È¤òÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤ò¤¢¤ëÆÃÄê¤Î½çÈ֤ǤΤßɽ¼¨¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤¬Ê̤νçÈ֤ǥǥ£¥ì¥¯¥È¥ê°ìÍ÷¤ò¥ê¥¯¥¨¥¹¥È¤¹¤ë¤³¤È¤òËɤ®¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexStyleSheet" id="IndexStyleSheet">IndexStyleSheet</a> <a name="indexstylesheet" id="indexstylesheet">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë CSS ¥¹¥¿¥¤¥ë¥·¡¼¥È¤òÄɲ乤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>IndexStyleSheet <var>url-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexStyleSheet</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥¤¥ó¥Ç¥Ã¥¯¥¹É½¼¨¤Ë»ÈÍѤµ¤ì¤ë CSS ¤Î¥Õ¥¡¥¤¥ë̾¤òÀßÄꤷ¤Þ¤¹¡£
- </p>
- <div class="example"><h3>Îã</h3><p><code>
-
- IndexStyleSheet "/css/style.css"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ReadmeName" id="ReadmeName">ReadmeName</a> <a name="readmename" id="readmename">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¤¥ó¥Ç¥Ã¥¯¥¹°ìÍ÷¤ÎºÇ¸å¤ËÁÞÆþ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ReadmeName <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">ReadmeName</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥¤¥ó¥Ç¥Ã¥¯¥¹¤Î½ª¤ï¤ê¤ËÉÕ¤±²Ã¤¨¤é¤ì¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤷ¤Þ¤¹¡£
- <var>filename</var> ¤ÏÁÞÆþ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°¤Ç¡¢
- °ìÍ÷¤Î¹Ô¤ï¤ì¤Æ¤¤¤ë°ÌÃÖ¤«¤éÁêÂÐŪ¤Ê¤â¤Î¤È¤·¤Æ²ò¼á¤µ¤ì¤Þ¤¹¡£
- <var>filename</var> ¤¬¥¹¥é¥Ã¥·¥å¤Ç»Ï¤Þ¤ë¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤È¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ReadmeName FOOTER.html
- </code></p></div>
-
- <div class="example"><h3>Îã 2</h3><p><code>
- ReadmeName /include/FOOTER.html
- </code></p></div>
-
- <p>¤è¤ê¾ÜºÙ¤Ë¤Þ¤Ç¤³¤ÎµóÆ°¤Ë¤Ä¤¤¤Æµ­½Ò¤·¤Æ¤¤¤ë <code class="directive"><a href="#headername">HeaderName</a></code>
- ¤â¤´Í÷²¼¤µ¤¤¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_autoindex.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_autoindex.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_autoindex.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_autoindex.html.ko.euc-kr b/docs/manual/mod/mod_autoindex.html.ko.euc-kr
deleted file mode 100644
index aada0e488b..0000000000
--- a/docs/manual/mod/mod_autoindex.html.ko.euc-kr
+++ /dev/null
@@ -1,835 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_autoindex - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_autoindex</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_autoindex.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_autoindex.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_autoindex.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<div class="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
- ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÀÚµ¿À¸·Î À¯´Ð½ºÀÇ <code>ls</code> ¸í·É¾î³ª Win32ÀÇ
- <code>dir</code> ½©¸í·É¾î¿Í À¯»çÇÑ µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>autoindex_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_autoindex.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>µð·ºÅ丮 ¸ñ·ÏÀº ¾ò´Â ¹æ¹ýÀº µÎ°¡Áö´Ù:</p>
-
- <ul>
- <li>º¸Åë <code>index.html</code>À̶õ À̸§À¸·Î »ç¿ëÀÚ°¡
- ÀÛ¼ºÇÑ ÆÄÀÏ. ÀÌ ÆÄÀÏÀÇ À̸§Àº <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ´Ù. ÀÌ ÀÛ¾÷Àº <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>ÀÌ ÇÑ´Ù.</li>
-
- <li>¾Æ´Ï¸é ¼­¹ö°¡ ¸ñ·ÏÀ» ¸¸µç´Ù. ÀÌ ¸ñ·ÏÀÇ Çü½ÄÀ» ÁöÁ¤ÇÏ´Â
- Áö½Ã¾îµéÀÌ ÀÖ´Ù. <code class="directive"><a href="#addicon">AddIcon</a></code>, <code class="directive"><a href="#addiconbyencoding">AddIconByEncoding</a></code>,
- <code class="directive"><a href="#addiconbytype">AddIconByType</a></code>˼
- ¿©·¯ ÆÄÀÏÁ¾·ù¸¶´Ù º¸¿©ÁÙ ¾ÆÀÌÄܵéÀ» ÁöÁ¤ÇÑ´Ù. °¢ ÆÄÀÏ¿¡
- ´ëÀÀÇϴ ù¹ø° ¾ÆÀÌÄÜÀ» º¸ÀδÙ. ÀÌ ÀÛ¾÷À»
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>°¡ ÇÑ´Ù.</li>
- </ul>
- <p>ÀÌ µÎ ±â´ÉÀº ¼­·Î º°°³·Î, ¿øÇÑ´Ù¸é ÀÚµ¿ ¸ñ·Ï »ý¼ºÀ» ¿ÏÀüÈ÷
- Á¦¿ÜÇÒ (ȤÀº ´ëüÇÒ) ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÚµ¿ ¸ñ·Ï »ý¼ºÀº <code>Options +Indexes</code>·Î °¡´ÉÇÏ´Ù.
- ÀÚ¼¼ÇÑ ³»¿ëÀº <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- Áö½Ã¾î¸¦ Âü°íÇ϶ó.</p>
-
- <p><code class="directive"><a href="#indexoptions">IndexOptions</a></code>
- Áö½Ã¾î¿¡ <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> ¿É¼ÇÀ» ÁÖ¸é, ¿­ À̸§À» Ãâ·ÂÇÒ
- ¼ø¼­¸¦ ¹Ù²Ù´Â ¸µÅ©·Î ¸¸µç´Ù. À̸§ ¸µÅ©¸¦ ¼±ÅÃÇÏ¸é ±× ¿­ÀÇ
- °ª ¼ø¼­·Î ¸ñ·ÏÀ» ´Ù½Ã ¸¸µç´Ù. °°Àº À̸§À» ¹Ýº¹Çؼ­ ¼±ÅÃÇϸé
- ¿À¸§Â÷¼ø°ú ³»¸²Â÷¼ø »çÀ̸¦ ¿À°£´Ù. <code class="directive"><a href="#indexoptions">IndexOptions</a></code> Áö½Ã¾îÀÇ
- <code>SuppressColumnSorting</code> ¿É¼ÇÀº ÀÌ·± ¿­ À̸§ ¸µÅ©¸¦
- ¸¸µéÁö ¾Ê´Â´Ù.</p>
-
- <p>"Size(Å©±â)" ¼øÀ¸·Î º¼¶§ Ãâ·ÂµÇ´Â °ª ¼ø¼­°¡ ¾Æ´Ï¶ó <em>½ÇÁ¦</em>
- ÆÄÀÏÅ©±â ¼ø¼­ÀÓÀ» ÁÖÀÇÇ϶ó. Áï, 1010 ¹ÙÀÌÆ® ÆÄÀÏ°ú 1011
- ¹ÙÀÌÆ® ÆÄÀÏÀº µÑ´Ù "1K"·Î º¸ÀÌ´õ¶óµµ Ç×»ó 1010 ¹ÙÀÌÆ® ÆÄÀÏÀÌ
- ¾Õ¿¡ ³ª¿Â´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addalt">AddAlt</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addaltbyencoding">AddAltByEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addaltbytype">AddAltByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#adddescription">AddDescription</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addicon">AddIcon</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addiconbyencoding">AddIconByEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addiconbytype">AddIconByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaulticon">DefaultIcon</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#headername">HeaderName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexignore">IndexIgnore</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexoptions">IndexOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexorderdefault">IndexOrderDefault</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#indexstylesheet">IndexStyleSheet</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#readmename">ReadmeName</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex ¿äû ¾Æ±Ô¸ÕÆ®</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="query" id="query">Autoindex ¿äû ¾Æ±Ô¸ÕÆ®</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ 2.0.23´Â ¿­¼ø¼­¿¡ ´ëÇÑ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ Á¤¸®ÇÏ°í,
- »õ·Î¿î ¿É¼ÇµéÀ» Ãß°¡Çß´Ù. Ãâ·ÂÀ» Ŭ¶óÀ̾ðÆ®°¡ Á¶ÀýÇÒ ¼ö
- ¾øµµ·Ï ¸¸µå´Â <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> ¿É¼ÇÀÌ Ãß°¡µÇ¾ú´Ù.</p>
-
- <p>¿­¼ø¼­ À̸§Àº ¾Æ·¡ ³ª¿Â ¼ø¼­ ¿äû ¿É¼ÇÀ» ´õÇÑ ÀÚ±âÂüÁ¶
- ¸µÅ©´Ù. ¾Æ·¡ ¿É¼ÇÀº µð·ºÅ丮 ÀÚ¿ø¿¡ ´ëÇÑ ¾î¶² ¿äû¿¡µµ
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <ul>
- <li><code>C=N</code>Àº ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li><code>C=M</code>Àº ÃÖ±Ù ¼öÁ¤ÀÏ ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li><code>C=S</code>´Â Å©±â ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li class="separate"><code>C=D</code>´Â ¼³¸í ¼ø, ±×¸®°í ÆÄÀϸí
- ¼øÀÌ´Ù</li>
-
- <li><code>O=A</code>´Â ¿À¸§Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
-
- <li class="separate"><code>O=D</code>´Â ³»¸²Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
-
- <li><code>F=0</code>Àº (FancyIndexed°¡ ¾Æ´Ñ) °£´ÜÇÑ ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
-
- <li><code>F=1</code>Àº FancyIndexed ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
-
- <li class="separate"><code>F=2</code>´Â HTMLTable FancyIndexed ¸ñ·Ï
- Çü½ÄÀÌ´Ù</li>
-
- <li><code>V=0</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÏÁö ¾Ê´Â´Ù</li>
-
- <li class="separate"><code>V=1</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÑ´Ù</li>
-
- <li><code>P=<var>pattern</var></code>Àº ÁÖ¾îÁø <var>pattern</var>¿¡
- ÇØ´çÇÏ´Â ÆÄÀϸ¸À» ¸ñ·ÏÀ¸·Î ¸¸µç´Ù</li>
- </ul>
-
- <p>'P'attern ¾Æ±Ô¸ÕÆ®´Â ÀϹÝÀûÀÎ <code class="directive"><a href="#indexignore">IndexIgnore</a></code> Áö½Ã¾î¸¦ ó¸®ÇÑ <em>ÈÄ¿¡</em>
- °Ë»çÇϱ⶧¹®¿¡, ¸ñ·ÏÀº ´Ù¸¥ autoindex Á¶°ÇÀ» µû¸§À» ÁÖÀÇÇ϶ó.
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>ÀÇ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀ϶§
- ¾Ë ¼ö ¾ø´Â ¿É¼ÇÀ» ¹ß°ßÇÏ¸é ´õ ÀÌ»ó ÀÐÁö¾Ê´Â´Ù. ¿äû ¾Æ±Ô¸ÕÆ®´Â
- À§ÀÇ Ç¥¿¡ µû¶ó ¸¸µé¾î¾ß ÇÑ´Ù.</p>
-
- <p>header.html ÆÄÀÏ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Æ·¡ °£´ÜÇÑ ¿¹Á¦´Â
- ÀÌ ¿É¼ÇµéÀ» ¼³¸íÇÑ´Ù. submit ¹öÅÏÀÇ ¾Ë ¼ö ¾ø´Â "X" ¾Æ±Ô¸ÕÆ®´Â
- mod_autoindex°¡ X=Go Àü±îÁö ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀÓÀ»
- È®ÀÎÇϱâÀ§ÇØ ¸¶Áö¸·¿¡ »ç¿ëÇß´Ù.</p>
-
- <div class="example"><p><code>
- &lt;form action="" method="get"&gt;<br />
- <span class="indent">
- Show me a &lt;select name="F"&gt;<br />
- <span class="indent">
- &lt;option value="0"&gt; Plain list&lt;/option&gt;<br />
- &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;<br />
- &lt;option value="2"&gt; Table list&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- Sorted by &lt;select name="C"&gt;<br />
- <span class="indent">
- &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;<br />
- &lt;option value="M"&gt; Date Modified&lt;/option&gt;<br />
- &lt;option value="S"&gt; Size&lt;/option&gt;<br />
- &lt;option value="D"&gt; Description&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- &lt;select name="O"&gt;<br />
- <span class="indent">
- &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;<br />
- &lt;option value="D"&gt; Descending&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- &lt;select name="V"&gt;<br />
- <span class="indent">
- &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;<br />
- &lt;option value="1"&gt; in Version order&lt;/option&gt;<br />
- </span>
- &lt;/select&gt;<br />
- Matching &lt;input type="text" name="P" value="*" /&gt;<br />
- &lt;input type="submit" name="X" value="Go" /&gt;<br />
- </span>
- &lt;/form&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀϸíÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ ¼³¸í±Û</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAlt</code>´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ¿¡ ´ëÇÑ ¾ÆÀÌÄÜ´ë½Å º¸ÀÏ ±ÛÀ» ÁöÁ¤ÇÑ´Ù. <var>File</var>¿¡´Â
- ¼³¸íÇÒ ÆÄÀÏÀÇ ÆÄÀÏ È®ÀåÀÚ, ÆÄÀϸí ÀϺÎ, ¿ÍÀϵåÄ«µå Ç¥Çö,
- Àüü ÆÄÀϸíÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <var>String</var>¿¡ °ø¹éÀÌ
- µé¾î°£´Ù¸é µû¿ÈÇ¥(<code>"</code> ȤÀº <code>'</code>)·Î
- ¹­¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ À̹ÌÁö¸¦ º¼ ¼ö ¾ø°Å³ª, À̹ÌÁö¸¦
- ÀÐÁö¾Ê°Å³ª, ¾ÆÀÌÄÜÀ» ¸ø ¾òÀº °æ¿ì ÀÌ Ãß°¡ ±ÛÀÌ º¸ÀÌ°Ô µÈ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddAlt "PDF file" *.pdf<br />
- AddAlt Compressed *.gz *.zip *.Z
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAltByEncoding" id="AddAltByEncoding">AddAltByEncoding</a> <a name="addaltbyencoding" id="addaltbyencoding">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>MIME-encodingÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ
-¼³¸í±Û</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAltByEncoding</code>Àº <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ¿¡ ´ëÇÑ ¾ÆÀÌÄÜ´ë½Å º¸ÀÏ ±ÛÀ» ÁöÁ¤ÇÑ´Ù. <var>MIME-encoding</var>Àº
- <code>x-compress</code>¿Í °°Àº À¯È¿ÇÑ content-encodingÀÌ´Ù.
- <var>String</var>¿¡ °ø¹éÀÌ µé¾î°£´Ù¸é µû¿ÈÇ¥(<code>"</code>
- ȤÀº <code>'</code>)·Î ¹­¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ À̹ÌÁö¸¦
- º¼ ¼ö ¾ø°Å³ª, À̹ÌÁö¸¦ ÀÐÁö¾Ê°Å³ª, ¾ÆÀÌÄÜÀ» ¸ø ¾òÀº °æ¿ì
- ÀÌ Ãß°¡ ±ÛÀÌ º¸ÀÌ°Ô µÈ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddAltByEncoding gzip x-gzip
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddAltByType" id="AddAltByType">AddAltByType</a> <a name="addaltbytype" id="addaltbytype">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>MIME content-typeÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ
-¼³¸í±Û</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">AddAltByType</code>Àº <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ¿¡ ´ëÇÑ ¾ÆÀÌÄÜ´ë½Å º¸ÀÏ ±ÛÀ» ÁöÁ¤ÇÑ´Ù. <var>MIME-type</var>Àº
- <code>text/html</code>°ú °°Àº À¯È¿ÇÑ content-typeÀÌ´Ù.
- <var>String</var>¿¡ °ø¹éÀÌ µé¾î°£´Ù¸é µû¿ÈÇ¥(<code>"</code>
- ȤÀº <code>'</code>)·Î ¹­¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ À̹ÌÁö¸¦
- º¼ ¼ö ¾ø°Å³ª, À̹ÌÁö¸¦ ÀÐÁö¾Ê°Å³ª, ¾ÆÀÌÄÜÀ» ¸ø ¾òÀº °æ¿ì
- ÀÌ Ãß°¡ ±ÛÀÌ º¸ÀÌ°Ô µÈ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddAltByType 'plain text' text/plain
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddDescription" id="AddDescription">AddDescription</a> <a name="adddescription" id="adddescription">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀÏ¿¡ ´ëÇÑ ¼³¸í</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddDescription <var>string file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­ ÆÄÀÏ¿¡ ´ëÇÑ ¼³¸íÀ» ÁöÁ¤ÇÑ´Ù.
- <var>File</var>¿¡´Â ¼³¸íÇÒ ÆÄÀÏÀÇ ÆÄÀÏ È®ÀåÀÚ, ÆÄÀϸí ÀϺÎ,
- ¿ÍÀϵåÄ«µå Ç¥Çö, Àüü ÆÄÀϸíÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <var>String</var>Àº
- µû¿ÈÇ¥(<code>"</code>)·Î ¹­¾î¾ß ÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddDescription "The planet Mars" /web/pics/mars.gif
- </code></p></div>
-
- <p>ÀüÇüÀûÀÎ ±âº» ¼³¸í ÇʵåÆøÀº 23 ¹ÙÀÌÆ®´Ù. <code><a href="#indexoptions.suppressicon">IndexOptions
- SuppressIcon</a></code> ¿É¼ÇÀ» »ç¿ëÇÏ¸é ±âº»Æø¿¡ 6 ¹ÙÀÌÆ®¸¦
- ´õ Ãß°¡ÇÏ°í, <code><a href="#indexoptions.suppresssize">IndexOptions SuppressSize</a></code> ¿É¼ÇÀº 7 ¹ÙÀÌÆ®¸¦,
- <code><a href="#indexoptions.suppresslastmodified">IndexOptions SuppressLastModified</a></code> ¿É¼ÇÀº 19
- ¹ÙÀÌÆ®¸¦ ´õ Ãß°¡ÇÑ´Ù. ±×·¯¹Ç·Î °¡Àå ³ÐÀº ¼³¸íÆøÀº 55 ¹ÙÀÌÆ®´Ù.</p>
-
- <p>ÀÌ ÇʵåÀÇ Æø¸¦ ¹Ù²Ù°Å³ª ¼³¸íÀÇ ±æÀ̸¦ ¹«ÇÑ´ë·Î ¸¸µå·Á¸é
- <a href="#indexoptions.descriptionwidth">DescriptionWidth</a> <code class="directive"><a href="#indexoptions">IndexOptions</a></code> Å°¿öµå¸¦ Âü°íÇ϶ó.</p>
-
- <div class="note"><h3>Á¶½É</h3>
- <p><code class="directive">AddDescription</code>À¸·Î ÁöÁ¤ÇÑ ¼³¸í±Û¿¡
- ű׳ª character entity<span class="transnote">(<em>¿ªÁÖ;</em> &amp;lt;, &amp;amp; µîÀ»
- ÁöĪ)</span>°°Àº HTMLÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Æø¶§¹®¿¡
- űװ¡ ÀÖ´Â ºÎºÐÀÌ Â©¸®°ÔµÇ¸é (¿¹¸¦ µé¾î ±½ÀºÃ¼ ºÎºÐ ³¡ÀÌ
- ©¸®¸é) ³ª¸ÓÁö µð·ºÅ丮 ¸ñ·Ï¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIcon" id="AddIcon">AddIcon</a> <a name="addicon" id="addicon">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>À̸§À¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­ <var>name</var>À¸·Î ³¡³ª´Â
- ÆÄÀÏ ¿·¿¡ º¸¿©ÁÙ ¾ÆÀÌÄÜÀ» ÁöÁ¤ÇÑ´Ù. <var>Icon</var>Àº
- ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URL ȤÀº
- <code>(<var>alttext</var>,<var>url</var>)</code> Çü½ÄÀÌ´Ù.
- ¿©±â¼­ <var>alttext</var>´Â ±×¸²À» º¸¿©ÁÙ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡
- ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ¹®±¸ÀÌ´Ù.</p>
-
- <p><var>Name</var>¿¡´Â µð·ºÅ丮¸¦ ³ªÅ¸³»´Â <code>^^DIRECTORY^^</code>,
- (¸ñ·Ï Çü½ÄÀ» ¿Ã¹Ù·Î ¸ÂÃß±âÀ§ÇØ) ºóÁÙÀ» ³ªÅ¸³»´Â
- <code>^^BLANKICON^^</code>, ÆÄÀÏ È®ÀåÀÚ, ¿ÍÀϵåÄ«µå Ç¥Çö,
- ÆÄÀϸí ÀϺΠȤÀº Àüü¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
- AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
- AddIcon /icons/backup.xbm *~
- </code></p></div>
-
- <p>°¡´ÉÇϸé <code class="directive">AddIcon</code>º¸´Ù´Â <code class="directive"><a href="#addiconbytype">AddIconByType</a></code>À» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIconByEncoding" id="AddIconByEncoding">AddIconByEncoding</a> <a name="addiconbyencoding" id="addiconbyencoding">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>MIME content-encodingÀ¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ ¿·¿¡ º¸¿©ÁÙ ¾ÆÀÌÄÜÀ» ÁöÁ¤ÇÑ´Ù. <var>Icon</var>Àº
- ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URL ȤÀº
- <code>(<var>alttext</var>,<var>url</var>)</code> Çü½ÄÀÌ´Ù.
- ¿©±â¼­ <var>alttext</var>´Â ±×¸²À» º¸¿©ÁÙ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡
- ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ¹®±¸ÀÌ´Ù.</p>
-
- <p><var>MIME-encoding</var>´Â content-encoding¿¡ ÇØ´çÇÏ´Â
- ¿ÍÀϵåÄ«µå Ç¥ÇöÀÌ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddIconByEncoding /icons/compress.xbm x-compress
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddIconByType" id="AddIconByType">AddIconByType</a> <a name="addiconbytype" id="addiconbytype">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>MIME content-typeÀ¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- <var>MIME-type</var>ÀÇ ÆÄÀÏ ¿·¿¡ º¸¿©ÁÙ ¾ÆÀÌÄÜÀ» ÁöÁ¤ÇÑ´Ù.
- <var>Icon</var>Àº ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URL ȤÀº
- <code>(<var>alttext</var>,<var>url</var>)</code> Çü½ÄÀÌ´Ù.
- ¿©±â¼­ <var>alttext</var>´Â ±×¸²À» º¸¿©ÁÙ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡
- ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ¹®±¸ÀÌ´Ù.</p>
-
- <p><var>MIME-type</var>Àº mime type¿¡ ÇØ´çÇÏ´Â ¿ÍÀϵåÄ«µå
- Ç¥ÇöÀÌ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- AddIconByType (IMG,/icons/image.xbm) image/*
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultIcon" id="DefaultIcon">DefaultIcon</a> <a name="defaulticon" id="defaulticon">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ƯÁ¤ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÏÁö¾ÊÀº ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DefaultIcon <var>url-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">DefaultIcon</code> Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ƯÁ¤ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÏÁö¾ÊÀº ÆÄÀÏ ¿·¿¡ ³ª¿Ã ¾ÆÀÌÄÜÀÌ´Ù.
- <var>Icon</var>Àº ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URLÀÌ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- DefaultIcon /icon/unknown.xbm
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="HeaderName" id="HeaderName">HeaderName</a> <a name="headername" id="headername">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀϸñ·Ï À§¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>HeaderName <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">HeaderName</code> Áö½Ã¾î´Â ÆÄÀϸñ·Ï ¾Õ¿¡
- »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÑ´Ù. <var>Filename</var>Àº »ðÀÔÇÒ
- ÆÄÀϸíÀÌ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- HeaderName HEADER.html
- </code></p></div>
-
- <div class="note">
- <p>ÇöÀç HeaderName°ú <code class="directive"><a href="#readmename">ReadmeName</a></code> µÑ ¸ðµÎ
- <var>Filename</var>À» Á¢±ÙÇÏ·Á´Â µð·ºÅ丮ÀÇ »ó´ë URI °æ·Î·Î
- ¹Þ¾ÆµéÀδÙ. <var>Filename</var>ÀÌ ½½·¡½¬·Î ½ÃÀÛÇϸé <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>¿¡ »ó´ëÀûÀÎ °æ·Î·Î
- ¹Þ¾ÆµéÀδÙ.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- HeaderName /include/HEADER.html
- </code></p></div>
-
- <p><var>Filename</var>¿¡´Â major content typeÀÌ <code>text/*</code>ÀÎ
- (<em>¿¹¸¦ µé¾î</em>, <code>text/html</code>, <code>text/plain</code>,
- µî) ¹®¼­¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. Áï, ½ºÅ©¸³Æ®ÀÇ (Ãâ·ÂÀÌ ¾Æ´Ñ) ½ÇÁ¦ ÆÄÀÏ
- typeÀ» ´ÙÀ½°ú °°ÀÌ <code>text/html</code>·Î ÁöÁ¤ÇÑ´Ù¸é
- <var>filename</var>À¸·Î CGI ½ºÅ©¸³Æ®¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- AddType text/html .cgi
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/core.html#options">Options</a></code>
- <code>MultiViews</code>À» »ç¿ëÇϸé <a href="../content-negotiation.html">³»¿ëÇù»ó</a>À» ÇÑ´Ù.
- <var>filename</var>ÀÌ (CGI ½ºÅ©¸³Æ®°¡ ¾Æ´Ñ) °íÁ¤µÈ
- <code>text/html</code> ¹®¼­ÀÌ°í <code class="directive"><a href="../mod/core.html#options">options</a></code> <code>Includes</code>³ª
- <code>IncludesNOEXEC</code> Áß Çϳª¸¦ »ç¿ëÇÑ´Ù¸é ÆÄÀÏÀ»
- server-side includes·Î ó¸®ÇÑ´Ù. (<code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- ¹®¼­ Âü°í)</p>
- </div>
-
- <p><code class="directive">HeaderName</code>À¸·Î ÁöÁ¤ÇÑ ÆÄÀÏ¿¡
- (&lt;html&gt;, &lt;head&gt;, µî) HTML ¹®¼­ ½ÃÀۺκÐÀÌ Æ÷ÇÔµÇÀÖ´Ù¸é
- <a href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
- +SuppressHTMLPreamble</code></a>À» »ç¿ëÇÏ¿© ÀÌ ºÎºÐÀ» Ãß°¡ÇÏÁö¾Ê´Â
- °ÍÀÌ ÁÁ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexIgnore" id="IndexIgnore">IndexIgnore</a> <a name="indexignore" id="indexignore">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>µð·ºÅ丮 ¸ñ·Ï¿¡¼­ ¼û±æ ÆÄÀϸñ·ÏÀ» Ãß°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>IndexIgnore <var>file</var> [<var>file</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexIgnore</code> Áö½Ã¾î´Â µð·ºÅ丮
- ¸ñ·Ï¿¡¼­ °¨Ãâ ÆÄÀϸñ·ÏÀ» Ãß°¡ÇÑ´Ù. <var>File</var>¿¡´Â °¨Ãâ
- (½©¿¡¼­ »ç¿ëÇÏ´Â) È­ÀϵåÄ«µå Ç¥ÇöÀ̳ª Àüü ÆÄÀϸíÀ»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿©·¯ IndexIgnore Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ±âÁ¸ÀÇ
- °¨Ãâ ÆÄÀϸñ·ÏÀ» ´ëüÇÏÁö¾Ê°í ¸ñ·Ï¿¡ ÁöÁ¤ÇÑ ÆÄÀϵéÀ» Ãß°¡ÇÑ´Ù.
- ±âº»ÀûÀ¸·Î ¸ñ·ÏÀº <code>.</code>À» (ÇöÀç µð·ºÅ丮) Æ÷ÇÔÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- IndexIgnore README .htaccess *.bak *~
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexOptions" id="IndexOptions">IndexOptions</a> <a name="indexoptions" id="indexoptions">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>µð·ºÅ丮 ¸ñ·ÏÀÇ ¿©·¯ ¼³Á¤µé</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexOptions</code> Áö½Ã¾î´Â µð·ºÅ丮
- ¸ñ·ÏÀ» ¼³Á¤ÇÑ´Ù. <var>Option</var>Àº ´ÙÀ½ Áß ÇϳªÀÌ´Ù</p>
-
- <dl>
- <dt><a name="indexoptions.descriptionwidth" id="indexoptions.descriptionwidth">DescriptionWidth=[<var>n</var> | *]</a> (<em>¾ÆÆÄÄ¡
- 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd><code>DescriptionWidth</code> Å°¿öµå¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ´ÜÀ§·Î
- ¼³¸í¿­ÀÇ ÆøÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dd><code>-DescriptionWidth</code>¸¦ ÁöÁ¤Çϸé (ȤÀº ¾Æ¹«°Íµµ
- ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é) <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>°¡ ÃÖÀûÀÇ
- ÆøÀ» °è»êÇÑ´Ù.</dd>
-
- <dd><code>DescriptionWidth=<var>n</var></code>Àº ¿­ÀÇ
- ÆøÀ» <var>n</var> ¹ÙÀÌÆ®·Î °íÁ¤ÇÑ´Ù.</dd>
-
- <dd><code>DescriptionWidth=*</code>Àº ¿­ÀÇ ÆøÀ» °¡Àå ±ä
- ¼³¸í±ÛÀ» ´ãÀ» ¼ö Àִ¸¸Å­ ´Ã¸°´Ù.</dd>
-
- <dd><strong>¼³Á¤ÀÌ Â©¸± ¼ö ÀÖ´Â ¹®Á¦´Â <code class="directive"><a href="#adddescription">AddDescription</a></code>
- ÀýÀ» Âü°íÇ϶ó.</strong></dd>
-
- <dt><a name="indexoptions.fancyindexing" id="indexoptions.fancyindexing">FancyIndexing</a></dt>
-
- <dd>µð·ºÅ丮ÀÇ fancy ¸ñ·ÏÀ» ¸¸µç´Ù.</dd>
-
- <dt><a name="indexoptions.foldersfirst" id="indexoptions.foldersfirst">FoldersFirst</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé ÇÏÀ§µð·ºÅ丮 ¸ñ·ÏÀÌ <em>Ç×»ó</em>
- ¸ÕÀú ³ª¿À°í, µð·ºÅ丮¿¡ ÀÖ´Â ÀÏ¹Ý ÆÄÀÏÀÌ µÚ¿¡ ³ª¿Â´Ù.
- ±âº»ÀûÀ¸·Î ¸ñ·ÏÀº ÆÄÀÏ°ú ÇÏÀ§µð·ºÅ丮·Î ³ª´µ°í, µû·Î
- °¢°¢ÀÇ ¼ø¼­¸¦ Á¤¸®ÇÏ¿© ÇÏÀ§µð·ºÅ丮µéÀ» ¸ÕÀú º¸ÀδÙ.
- ¿¹¸¦ µé¾î, À̸§ ¿ª¼øÀ¸·Î Á¤·ÄÇÏ°í <code>FoldersFirst</code>¸¦
- »ç¿ëÇÑ´Ù¸é ÇÏÀ§µð·ºÅ丮 <code>Zed</code>°¡ ÇÏÀ§µð·ºÅ丮
- <code>Beta</code> ¾Õ¿¡ ³ª¿À°í, ÇÏÀ§µð·ºÅ丮 <code>Beta</code>´Â
- ÀÏ¹Ý ÆÄÀÏ <code>Gamma</code>¿Í <code>Alpha</code> ¾Õ¿¡
- ³ª¿Â´Ù. <strong>ÀÌ ¿É¼ÇÀº <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a>À» ÇÔ²² »ç¿ëÇÒ¶§¸¸ È¿°ú°¡
- ÀÖ´Ù.</strong></dd>
-
- <dt><a name="indexoptions.htmltable" id="indexoptions.htmltable">HTMLTable</a> (<em>½ÇÇèÀû,
- ¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>ÀÌ ½ÇÇèÀûÀÎ FancyIndexing ¿É¼ÇÀº °£´ÜÇÑ HTML Ç¥·Î
- fancy µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù. ÀÌ ¿É¼ÇÀº ¿À·¡µÈ ºê¶ó¿ìÀú¸¦
- È¥¶õ½º·´°Ô ÇÒ ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó. ÀÌ ¿É¼ÇÀº WinNT³ª ´Ù¸¥
- utf-8 »ç¿ë Ç÷¡Æû¿¡¼­ ÆÄÀϸíÀ̳ª ¼³¸í¹®ÀÇ Àб⠼ø¼­(¿ÞÂÊ¿¡¼­
- ¿À¸¥ÂÊ È¤Àº ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ¸·Î)°¡ ´Ù¸¦¶§ Ưº°È÷ À¯¿ëÇÏ´Ù.</dd>
-
- <dt><a name="indexoptions.iconsarelinks" id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ÆÄÀÏ¸í ¸µÅ©¿¡ ¾ÆÀÌÄÜÀ» Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.iconheight" id="indexoptions.iconheight">IconHeight[=<var>pixels</var>]</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» IconWidth¿Í °°ÀÌ »ç¿ëÇÏ¸é ¼­¹ö´Â ÆÄÀÏ ¾ÆÀÌÄÜÀÇ
- <code>img</code> ű׿¡ <code>height</code>¿Í <code>width</code>
- ¼Ó¼ºÀ» Æ÷ÇÔÇÑ´Ù. ±×·¯¸é ºê¶ó¿ìÀú´Â ¸ðµç À̹ÌÁö¸¦ ¹ÞÁö¾ÊÀº
- »óȲ¿¡¼­µµ ÆäÀÌÁö ±¸¼ºÀ» ¹Ì¸® °è»êÇÒ ¼ö ÀÖ´Ù. ¿É¼Ç¿¡ °ªÀ»
- ÁÖÁö¾ÊÀ¸¸é ¾ÆÆÄÄ¡°¡ Á¦°øÇÏ´Â ¾ÆÀÌÄÜÀÇ Ç¥ÁØ ³ôÀ̸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.iconwidth" id="indexoptions.iconwidth">IconWidth[=<var>pixels</var>]</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» <code>IconHeight</code>¿Í °°ÀÌ »ç¿ëÇϸé
- ¼­¹ö´Â ÆÄÀÏ ¾ÆÀÌÄÜÀÇ <code>img</code> ű׿¡
- <code>height</code>¿Í <code>width</code> ¼Ó¼ºÀ» Æ÷ÇÔÇÑ´Ù.
- ±×·¯¸é ºê¶ó¿ìÀú´Â ¸ðµç À̹ÌÁö¸¦ ¹ÚÁö¾ÊÀº »óȲ¿¡¼­µµ ÆäÀÌÁö
- ±¸¼ºÀ» ¹Ì¸® °è»êÇÒ ¼ö ÀÖ´Ù. ¿É¼Ç¿¡ °ªÀ» ÁÖÁö¾ÊÀ¸¸é ¾ÆÆÄÄ¡°¡
- Á¦°øÇÏ´Â ¾ÆÀÌÄÜÀÇ Ç¥ÁØ ÆøÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.ignorecase" id="indexoptions.ignorecase">IgnoreCase</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¸é ´ë¼Ò¹®ÀÚ ±¸º°ÇÏÁö¾Ê°í À̸§À» Á¤·ÄÇÑ´Ù.
- ¿¹¸¦ µé¾î, À̸§À¸·Î ¿À¸§Â÷¼øÀÌ°í IgnoreCase¸¦ »ç¿ëÇϸé
- ÆÄÀÏ Zeta´Â ÆÄÀÏ alfa µÚ¿¡ ³ª¿Â´Ù (ÁÖÀÇ: ÆÄÀÏ GAMMA´Â
- Ç×»ó ÆÄÀÏ gamma ¾Õ¿¡ ³ª¿Â´Ù). </dd>
-
- <dt><a name="indexoptions.ignoreclient" id="indexoptions.ignoreclient">IgnoreClient</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>´Â
- ¼ø¼­¸¦ Æ÷ÇÔÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ º¸³»´Â ¸ðµç ÁúÀǺ¯¼ö¸¦ ¹«½ÃÇÑ´Ù.
- (<code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>À» °¡Á¤ÇÑ´Ù.)</dd>
-
- <dt><a name="indexoptions.namewidth" id="indexoptions.namewidth">NameWidth=[<var>n</var>
- | *]</a></dt>
-
- <dd><code>NameWidth</code> Å°¿öµå´Â ¹ÙÀÌÆ®´ÜÀ§·Î ÆÄÀϸí
- ¿­ÀÇ ÆøÀ» ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dd><code>-NameWidth</code>À» ÁöÁ¤Çϸé (ȤÀº ¾Æ¹«°Íµµ
- ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é) <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>°¡ ÃÖÀûÀÇ
- ÆøÀ» °è»êÇÑ´Ù.</dd>
-
- <dd><code>NameWidth=<var>n</var></code>´Â ¿­ÀÇ ÆøÀ» <var>n</var>
- ¹ÙÀÌÆ®·Î °íÁ¤ÇÑ´Ù.</dd>
-
- <dd><code>NameWidth=*</code>Àº ¿­ÀÇ ÆøÀ» ÇÊ¿äÇѸ¸Å­ ´Ã¸°´Ù.</dd>
-
- <dt><a name="indexoptions.scanhtmltitles" id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ HTML ¹®¼­ÀÇ titleÀ» »Ì´Â´Ù. ÆÄÀÏ¿¡
- <code class="directive"><a href="#adddescription">AddDescription</a></code>·Î
- ÁöÁ¤ÇÑ ¼³¸íÀÌ ¾ø´Ù¸é À¥¼­¹ö´Â ¹®¼­ÀÇ <code>title</code>
- ¿ä¼Ò°ªÀ» ÀоîµéÀδÙ. ÀÌ ÀÛ¾÷Àº CPU¿Í µð½ºÅ©¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.suppresscolumnsorting" id="indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â FancyIndexed µð·ºÅ丮
- ¸ñ·Ï¿¡¼­ ¿­ À̸§À» ¼ø¼­¸¦ ¹Ù²Ù´Â ¸µÅ©·Î ¸¸µéÁö ¾Ê´Â´Ù.
- º¸ÅëÀº ¿­ À̸§À» ¸µÅ©·Î ¸¸µé¾î¼­, ¿­ À̸§À» ¼±ÅÃÇÏ¸é ±×
- ¿­¿¡ ÀÖ´Â °ª¼ø¼­·Î µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù. <strong>¾ÆÆÄÄ¡
- 2.0.23 ÀÌÀü¿¡´Â ¼ø¼­ ¾Æ±Ô¸ÕÆ®µµ ÀÐÁö ¾Ê¾Ò´Ù.</strong>
- ¾ÆÆÄÄ¡ 2.0.23¿¡¼­´Â <a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a>¸¦ »ç¿ëÇÏ¿© ¼ø¼­ ¾Æ±Ô¸ÕÆ®¸¦ ÀÐÁö ¾Ê´Â´Ù.</dd>
-
- <dt><a name="indexoptions.suppressdescription" id="indexoptions.suppressdescription">SuppressDescription</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ÆÄÀÏ ¼³¸íÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ±âº»ÀûÀ¸·Î
- ¾î¶² ÆÄÀÏ ¼³¸íµµ Á¤ÀǵÇÀÖÁö¾Ê°í, ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé 23
- ¹®ÀÚ °ø°£À» ´Ù¸¥ ¿ëµµ·Î »ç¿ëÇÑ´Ù. ÆÄÀÏ ¼³¸íÀ» ÁöÁ¤ÇÏ´Â
- ¹æ¹ýÀº <code class="directive"><a href="#adddescription">AddDescription</a></code>À» Âü°íÇ϶ó. ¼³¸í¿­ÀÇ Å©±â¸¦
- ÁöÁ¤ÇÏ´Â <code><a href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
- ¿É¼Çµµ Âü°íÇ϶ó.</dd>
-
- <dt><a name="indexoptions.suppresshtmlpreamble" id="indexoptions.suppresshtmlpreamble">SuppressHTMLPreamble</a></dt>
-
- <dd>µð·ºÅ丮¿¡ <code class="directive"><a href="#headername">HeaderName</a></code> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ ÆÄÀÏÀÌ ÀÖ´Â °æ¿ì ¸ðµâÀº º¸Åë Ç¥ÁØ HTML ½ÃÀۺκÐ
- (<code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>,
- <em>et cetera</em>) µÚ¿¡ ÆÄÀÏ ³»¿ëÀ» ÷°¡ÇÑ´Ù. ±×·¯³ª
- <code>SuppressHTMLPreamble</code> ¿É¼ÇÀ» »ç¿ëÇϸé óÀ½ºÎÅÍ
- header ÆÄÀÏ ³»¿ëÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ °æ¿ì header ÆÄÀÏ¿¡´Â ÀûÀýÇÑ
- HTML ¸í·ÉÀÌ ÀÖ¾î¾ß ÇÑ´Ù. header ÆÄÀÏÀÌ ¾ø´Ù¸é ÀϹÝÀûÀÎ
- ½ÃÀۺκÐÀÌ ¸¸µé¾îÁø´Ù.</dd>
-
- <dt><a name="indexoptions.suppressicon" id="indexoptions.suppressicon">SuppressIcon</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ¾ÆÀÌÄÜÀ» »«´Ù. <code>SuppressIcon</code>°ú
- <code>SuppressRules</code>¸¦ °°ÀÌ »ç¿ëÇϸé, (FancyIndexed
- ¸ñ·ÏÀÌ »ç¿ëÇÑ) <code>pre</code> ¾È¿¡ <code>img</code>¿Í
- <code>hr</code> ¿ä¼Ò »ç¿ëÀ» ±ÝÁöÇÑ ¸¶Áö¸· Ç¥ÁØÀÎ HTML 3.2¿¡
- ¾Ë¸ÂÀº Ãâ·ÂÀÌ µÈ´Ù.</dd>
-
- <dt><a name="indexoptions.suppresslastmodified" id="indexoptions.suppresslastmodified">SuppressLastModified</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ¸¶Áö¸· ¼öÁ¤ÀÏÀ» Ç¥½ÃÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><a name="indexoptions.suppressrules" id="indexoptions.suppressrules">SuppressRules</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>µð·ºÅ丮 ¸ñ·Ï¿¡¼­ ¼öÆòÁÙÀ» (<code>hr</code> ¿ä¼Ò)
- »ç¿ëÇÏÁö ¾Ê´Â´Ù. <code>SuppressIcon</code>°ú
- <code>SuppressRules</code>¸¦ °°ÀÌ »ç¿ëÇϸé, (FancyIndexed
- ¸ñ·ÏÀÌ »ç¿ëÇÑ) <code>pre</code> ¾È¿¡ <code>img</code>¿Í
- <code>hr</code> ¿ä¼Ò »ç¿ëÀ» ±ÝÁöÇÑ ¸¶Áö¸· Ç¥ÁØÀÎ HTML 3.2¿¡
- ¾Ë¸ÂÀº Ãâ·ÂÀÌ µÈ´Ù.</dd>
-
- <dt><a name="indexoptions.suppresssize" id="indexoptions.suppresssize">SuppressSize</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ÆÄÀÏÅ©±â¸¦ Ç¥½ÃÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><a name="indexoptions.trackmodified" id="indexoptions.trackmodified">TrackModified</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>µð·ºÅ丮 ¸ñ·ÏÀÇ HTTP Çì´õ¿¡ Last-Modified¿Í ETag °ªÀ»
- Æ÷ÇÔÇÑ´Ù. ÀÌ ¿É¼ÇÀº ¿î¿µÃ¼Á¦¿Í ÆÄÀϽýºÅÛ¿¡¼­ ÀûÀýÇÑ stat()
- °á°ú¸¦ ¾òÀ» ¼ö ÀÖÀ»¶§¸¸ À¯È¿ÇÏ´Ù. À¯´Ð½º ½Ã½ºÅÛ°ú OS2ÀÇ
- JFS, Win32ÀÇ NTFS¿¡¼­´Â °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î, OS2¿Í Win32ÀÇ
- FATÀº ºÒ°¡´ÉÇÏ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϸé Ŭ¶óÀ̾ðÆ®³ª ÇÁ·Ï½Ã´Â
- <code>HEAD</code> ¿äûÀ» »ç¿ëÇÏ¿© ÆÄÀϸñ·ÏÀÇ º¯È­¸¦ ÃßÀûÇÒ
- ¼ö ÀÖ´Ù. ¾î¶² ¿î¿µÃ¼Á¦´Â »õ·Î¿î ÆÄÀÏ°ú »èÁ¦ÇÑ ÆÄÀÏÀ» ¿Ã¹Ù·Î
- ÃßÀûÇÏÁö¸¸, µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀÇ Å©±â³ª ³¯Â¥ º¯È­¸¦
- ÃßÀûÇÏÁö ¸øÇÔÀ» ÁÖÀÇÇ϶ó. <strong>¸ðµç À¯´Ð½º Ç÷¡Æû¿¡¼­
- ±âÁ¸ ÆÄÀÏÀÇ Å©±â³ª ³¯Â¥ º¯È­½Ã Last-Modified Çì´õ°¡
- ¹Ù²îÁö¾Ê´Â´Ù.</strong> ÀÌ·± º¯È­°¡ Áß¿äÇÏ´Ù¸é ÀÌ ¿É¼ÇÀ»
- »ç¿ëÇÏÁö ¸¶¶ó.</dd>
-
- <dt><a name="indexoptions.versionsort" id="indexoptions.versionsort">VersionSort</a>
- (<em>¾ÆÆÄÄ¡ 2.0a3 ÀÌÈÄ</em>)</dt>
-
- <dd><code>VersionSort</code> Å°¿öµå´Â ¹öÀü ¹øÈ£¸¦ Æ÷ÇÔÇÑ
- ÆÄÀϸíÀ» ÀÚ¿¬½º·´°Ô Á¤·ÄÇÑ´Ù. ¹®ÀÚ ºÎºÐÀº Á¤»óÀûÀÎ ¼ø¼­¸¦
- Á¤·ÄÇÏÁö¸¸, ÆÄÀÏ°ú ¼³¸í¿¡ ÀÖ´Â ¼ýÀÚ ºÎºÐÀº ¼ýÀÚ°ªÀ¸·Î
- ºñ±³ÇÑ´Ù.
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- foo-1.7<br />
- foo-1.7.2<br />
- foo-1.7.12<br />
- foo-1.8.2<br />
- foo-1.8.2a<br />
- foo-1.12
- </code></p></div>
-
- <p>¼ö°¡ 0À¸·Î ½ÃÀÛÇϸé, ±× ¼ö¸¦ ºÐ¼ö·Î Ãë±ÞÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- foo-1.001<br />
- foo-1.002<br />
- foo-1.030<br />
- foo-1.04
- </code></p></div>
- </dd>
-
- <dt><a name="indexoptions.xhtml" id="indexoptions.xhtml">XHTML</a>
- (<em>¾ÆÆÄÄ¡ 2.0.49 ÀÌÈÄ</em>)</dt>
-
- <dd><code>XHTML</code> Å°¿öµå¸¦ »ç¿ëÇϸé
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>´Â HTML 3.2 ´ë½Å XHTML 1.0
- Äڵ带 »ý¼ºÇÑ´Ù.</dd>
- </dl>
-
-
- <dl><dt>Á¡ÁøÀûÀÎ IndexOptions</dt>
- <dd>
- <p>¾ÆÆÄÄ¡ 1.3.3¿¡¼­ <code class="directive">IndexOptions</code>
- Áö½Ã¾î 󸮹æ½ÄÀÌ Å©°Ô º¯È­µÇ¾ú´Ù. Ưº°È÷:</p>
-
- <ul>
- <li>ÀÌÁ¦ ÇÑ µð·ºÅ丮¿¡ ´ëÇÑ ¿©·¯
- <code class="directive">IndexOptions</code> Áö½Ã¾îµéÀ» ¼­·Î °áÇÕÇÑ´Ù.
- ´ÙÀ½ÀÇ °á°ú´Â:
-
- <div class="example"><p><code>
- &lt;Directory /foo&gt;
- <span class="indent">
- IndexOptions HTMLTable<br />
- IndexOptions SuppressColumnsorting
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>´ÙÀ½°ú °°´Ù</p>
-
- <div class="example"><p><code>
- IndexOptions HTMLTable SuppressColumnsorting
- </code></p></div>
- </li>
-
- <li>(<em>¿¹¸¦ µé¾î</em>, Å°¿öµå ¾Õ¿¡ <code>+</code>³ª
- <code>-</code>¸¦ ºÙÀÌ´Â) Á¡ÁøÀûÀÎ ¹®¹ýÀÌ Ãß°¡µÇ¾ú´Ù.</li>
- </ul>
-
- <p>Å°¿öµå ¾Õ¿¡ '+'³ª '-'°¡ ºÙÀ»¶§¸¶´Ù ÇØ´ç Å°¿öµå°¡ ÇöÀç
- (»óÀ§ µð·ºÅ丮¿¡¼­ »ó¼ÓµÇ¾úÀ») <code class="directive">IndexOptions</code>
- ¼³Á¤¿¡ ¹Ý¿µµÈ´Ù. ±×·¯³ª ¾Õ¿¡ ¾Æ¹«°Íµµ ¾ø´Â Å°¿öµå¸¦ ¸¸³ª¸é
- ¾ÆÁ÷±îÁö »ó¼ÓµÇ°Å³ª Á¡ÁøÀûÀ¸·Î º¯°æµÈ ¼³Á¤À» ¸ðµÎ Áö¿î´Ù.
- ´ÙÀ½ ¿¹Á¦¸¦ »ìÆ캸ÀÚ:</p>
-
- <div class="example"><p><code>
- IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing<br />
- IndexOptions +SuppressSize
- </code></p></div>
-
- <p>¾Õ¿¡ ¾Æ¹«°Íµµ ¾ø´Â <code>FancyIndexing</code>ÀÌ ÀÌÀüÀÇ
- Á¡ÁøÀûÀÎ ¼³Á¤À» Áö¿ö¹ö·ÈÁö¸¸ ¼³Á¤ÀÌ ´Ù½Ã Ãß°¡µÇ¿© °á°ú´Â
- <code>IndexOptions FancyIndexing +SuppressSize</code>¿Í °°´Ù.</p>
-
- <p>ƯÁ¤ µð·ºÅ丮¿¡ ´ëÇØ ¹«Á¶°ÇÀûÀÎ
- <code class="directive">IndexOptions</code>¸¦ ¼³Á¤ÇÏ·Á¸é Å°¿öµå
- ¾Õ¿¡ <code>+</code>³ª <code>-</code>¸¦ »ç¿ëÇÏÁö¸»°í
- »ó¼ÓµÈ ¼³Á¤À» Áö¿î´Ù.</p>
- </dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexOrderDefault" id="IndexOrderDefault">IndexOrderDefault</a> <a name="indexorderdefault" id="indexorderdefault">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>µð·ºÅ丮 ¸ñ·ÏÀÇ ±âº» ¼ø¼­¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>IndexOrderDefault Ascending Name</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexOrderDefault</code> Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¸ñ·Ï ¿É¼Ç°ú ÇÔ²² »ç¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î fancyindexed µð·ºÅ丮
- ¸ñ·ÏÀº ÆÄÀÏ¸í ¿À¸§Â÷¼øÀÌ´Ù. <code class="directive">IndexOrderDefault</code>´Â
- ÀÌ Ãʱ⠼ø¼­¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="directive">IndexOrderDefault</code>´Â µÎ ¾Æ±Ô¸ÕÆ®¸¦
- ¹Þ´Â´Ù. ù¹ø°´Â ¼ø¼­ÀÇ ¹æÇâÀ» Áö½ÃÇÏ´Â <code>Ascending</code>
- (¿À¸¥Â÷¼ø) À̳ª <code>Descending</code> (³»¸²Â÷¼ø) Áß Çϳª´Ù.
- µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â ÀÏÂ÷ ¼ø¼­¸¦ ³ªÅ¸³»´Â Å°¿öµå <code>Name</code>,
- <code>Date</code>, <code>Size</code>, <code>Description</code>
- Áß Çϳª´Ù. ÀÌÂ÷ ¼ø¼­´Â <em>Ç×»ó</em> ÆÄÀÏ¸í ¿À¸§Â÷¼øÀÌ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾î¿Í <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code> ¸ñ·Ï ¿É¼ÇÀ» °°ÀÌ »ç¿ëÇϸé
- ƯÁ¤ ¼ø¼­·Î¸¸ µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù. ÀÌ °æ¿ì Ŭ¶óÀ̾ðÆ®´Â
- ´Ù¸¥ ¼ø¼­·Î µð·ºÅ丮 ¸ñ·ÏÀ» ¿äûÇÏÁö ¸øÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IndexStyleSheet" id="IndexStyleSheet">IndexStyleSheet</a> <a name="indexstylesheet" id="indexstylesheet">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>µð·ºÅ丮 ¸ñ·Ï¿¡ CSS ½ºÅ¸ÀϽ¬Æ®¸¦ Ãß°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>IndexStyleSheet <var>url-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">IndexStyleSheet</code> Áö½Ã¾î´Â µð·ºÅ丮
- ¸ñ·Ï¿¡¼­ CSS·Î »ç¿ëÇÒ ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.
- </p>
- <div class="example"><h3>Example</h3><p><code>
-
- IndexStyleSheet "/css/style.css"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ReadmeName" id="ReadmeName">ReadmeName</a> <a name="readmename" id="readmename">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀϸñ·Ï ¸¶Áö¸·¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ReadmeName <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_autoindex</td></tr>
-</table>
- <p><code class="directive">ReadmeName</code> Áö½Ã¾î´Â ÆÄÀϸñ·Ï ³¡¿¡
- »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÑ´Ù. <var>Filename</var>Àº Æ÷ÇÔÇÒ
- ÆÄÀϸíÀÌ°í, ¸ñ·ÏÀ» ¸¸µé·Á´Â À§Ä¡ÀÇ »ó´ë°æ·Î·Î ¹Þ¾ÆµéÀδÙ.
- <var>Filename</var>ÀÌ ½½·¡½¬·Î ½ÃÀÛÇϸé <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>¿¡ »ó´ë°æ·Î·Î ¹Þ¾ÆµéÀδÙ.
- </p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ReadmeName FOOTER.html
- </code></p></div>
-
- <div class="example"><h3>¿¹Á¦ 2</h3><p><code>
- ReadmeName /include/FOOTER.html
- </code></p></div>
-
- <p>ÀÌ µ¿ÀÛÀ» ÀÚ¼¼È÷ ¼³¸íÇÑ <code class="directive"><a href="#headername">HeaderName</a></code>µµ Âü°íÇ϶ó.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_autoindex.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_autoindex.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_autoindex.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_autoindex.xml b/docs/manual/mod/mod_autoindex.xml
deleted file mode 100644
index 81abb98e3a..0000000000
--- a/docs/manual/mod/mod_autoindex.xml
+++ /dev/null
@@ -1,940 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.25 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_autoindex.xml.meta">
-<name>mod_autoindex</name>
-
-<description>Generates directory indexes,
- automatically, similar to the Unix <code>ls</code> command or the
- Win32 <code>dir</code> shell command</description>
-<status>Base</status>
-<sourcefile>mod_autoindex.c</sourcefile>
-<identifier>autoindex_module</identifier>
-
-<summary>
- <p>The index of a directory can come from one of two
- sources:</p>
-
- <ul>
- <li>A file written by the user, typically called
- <code>index.html</code>. The <directive
- module="mod_dir">DirectoryIndex</directive> directive sets the
- name of this file. This is controlled by
- <module>mod_dir</module>.</li>
-
- <li>Otherwise, a listing generated by the server. The other
- directives control the format of this listing. The <directive
- module="mod_autoindex">AddIcon</directive>, <directive
- module="mod_autoindex">AddIconByEncoding</directive> and
- <directive module="mod_autoindex">AddIconByType</directive> are
- used to set a list of icons to display for various file types;
- for each file listed, the first icon listed that matches the
- file is displayed. These are controlled by
- <module>mod_autoindex</module>.</li>
- </ul>
- <p>The two functions are separated so that you can completely
- remove (or replace) automatic index generation should you want
- to.</p>
-
- <p>Automatic index generation is enabled with using
- <code>Options +Indexes</code>. See the
- <directive module="core">Options</directive> directive for
- more details.</p>
-
- <p>If the <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code> option is given with the <directive
- module="mod_autoindex">IndexOptions</directive> directive,
- the column headers are links that control the order of the
- display. If you select a header link, the listing will be
- regenerated, sorted by the values in that column. Selecting the
- same header repeatedly toggles between ascending and descending
- order. These column header links are suppressed with
- <directive module="mod_autoindex">IndexOptions</directive> directive's
- <code>SuppressColumnSorting</code> option.</p>
-
- <p>Note that when the display is sorted by "Size", it's the
- <em>actual</em> size of the files that's used, not the
- displayed value - so a 1010-byte file will always be displayed
- before a 1011-byte file (if in ascending order) even though
- they both are shown as "1K".</p>
-</summary>
-
-<section id="query">
- <title>Autoindex Request Query Arguments</title>
-
- <p>Apache 2.0.23 reorganized the Query Arguments for Column
- Sorting, and introduced an entire group of new query options.
- To effectively eliminate all client control over the output,
- the <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> option was introduced.</p>
-
- <p>The column sorting headers themselves are self-referencing
- hyperlinks that add the sort query options shown below. Any
- option below may be added to any request for the directory
- resource.</p>
-
- <ul>
- <li><code>C=N</code> sorts the directory by file name</li>
-
- <li><code>C=M</code> sorts the directory by last-modified
- date, then file name</li>
-
- <li><code>C=S</code> sorts the directory by size, then file
- name</li>
-
- <li class="separate"><code>C=D</code> sorts the directory by description, then
- file name</li>
-
- <li><code>O=A</code> sorts the listing in Ascending
- Order</li>
-
- <li class="separate"><code>O=D</code> sorts the listing in Descending
- Order</li>
-
- <li><code>F=0</code> formats the listing as a simple list
- (not FancyIndexed)</li>
-
- <li><code>F=1</code> formats the listing as a FancyIndexed
- list</li>
-
- <li class="separate"><code>F=2</code> formats the listing as an
- HTMLTable FancyIndexed list</li>
-
- <li><code>V=0</code> disables version sorting</li>
-
- <li class="separate"><code>V=1</code> enables version sorting</li>
-
- <li><code>P=<var>pattern</var></code> lists only files matching
- the given <var>pattern</var></li>
- </ul>
-
- <p>Note that the 'P'attern query argument is tested
- <em>after</em> the usual <directive module="mod_autoindex"
- >IndexIgnore</directive> directives are processed,
- and all file names are still subjected to the same criteria as
- any other autoindex listing. The Query Arguments parser in
- <module>mod_autoindex</module> will stop abruptly when an unrecognized
- option is encountered. The Query Arguments must be well formed,
- according to the table above.</p>
-
- <p>The simple example below, which can be clipped and saved in
- a header.html file, illustrates these query options. Note that
- the unknown "X" argument, for the submit button, is listed last
- to assure the arguments are all parsed before mod_autoindex
- encounters the X=Go input.</p>
-
- <example>
- &lt;form action="" method="get"&gt;<br />
- <indent>
- Show me a &lt;select name="F"&gt;<br />
- <indent>
- &lt;option value="0"&gt; Plain list&lt;/option&gt;<br />
- &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;<br />
- &lt;option value="2"&gt; Table list&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- Sorted by &lt;select name="C"&gt;<br />
- <indent>
- &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;<br />
- &lt;option value="M"&gt; Date Modified&lt;/option&gt;<br />
- &lt;option value="S"&gt; Size&lt;/option&gt;<br />
- &lt;option value="D"&gt; Description&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- &lt;select name="O"&gt;<br />
- <indent>
- &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;<br />
- &lt;option value="D"&gt; Descending&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- &lt;select name="V"&gt;<br />
- <indent>
- &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;<br />
- &lt;option value="1"&gt; in Version order&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- Matching &lt;input type="text" name="P" value="*" /&gt;<br />
- &lt;input type="submit" name="X" value="Go" /&gt;<br />
- </indent>
- &lt;/form&gt;
- </example>
-
-</section>
-
-<directivesynopsis>
-<name>AddAlt</name>
-<description>Alternate text to display for a file, instead of an
-icon selected by filename</description>
-<syntax>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAlt</directive> provides the alternate text to
- display for a file, instead of an icon, for <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>File</var> is a file extension, partial filename, wild-card
- expression or full filename for files to describe.
- If <var>String</var> contains any whitespace, you have to enclose it
- in quotes (<code>"</code> or <code>'</code>). This alternate text
- is displayed if the client is image-incapable, has image loading
- disabled, or fails to retrieve the icon.</p>
-
- <example><title>Examples</title>
- AddAlt "PDF file" *.pdf<br />
- AddAlt Compressed *.gz *.zip *.Z
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByEncoding</name>
-<description>Alternate text to display for a file instead of an icon
-selected by MIME-encoding</description>
-<syntax>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAltByEncoding</directive> provides the alternate
- text to display for a file, instead of an icon, for <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>MIME-encoding</var> is a valid content-encoding, such as
- <code>x-compress</code>. If <var>String</var> contains any whitespace,
- you have to enclose it in quotes (<code>"</code> or <code>'</code>).
- This alternate text is displayed if the client is image-incapable,
- has image loading disabled, or fails to retrieve the icon.</p>
-
- <example><title>Example</title>
- AddAltByEncoding gzip x-gzip
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByType</name>
-<description>Alternate text to display for a file, instead of an
-icon selected by MIME content-type</description>
-<syntax>AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAltByType</directive> sets the alternate text to
- display for a file, instead of an icon, for <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>MIME-type</var> is a valid content-type, such as
- <code>text/html</code>. If <var>String</var> contains any whitespace,
- you have to enclose it in quotes (<code>"</code> or <code>'</code>).
- This alternate text is displayed if the client is image-incapable,
- has image loading disabled, or fails to retrieve the icon.</p>
-
- <example><title>Example</title>
- AddAltByType 'plain text' text/plain
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDescription</name>
-<description>Description to display for a file</description>
-<syntax>AddDescription <var>string file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This sets the description to display for a file, for
- <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code>.
- <var>File</var> is a file extension, partial filename, wild-card
- expression or full filename for files to describe.
- <var>String</var> is enclosed in double quotes (<code>"</code>).</p>
-
- <example><title>Example</title>
- AddDescription "The planet Mars" /web/pics/mars.gif
- </example>
-
- <p>The typical, default description field is 23 bytes wide. 6
- more bytes are added by the <code><a href="#indexoptions.suppressicon"
- >IndexOptions SuppressIcon</a></code> option, 7 bytes are
- added by the <code><a href="#indexoptions.suppresssize"
- >IndexOptions SuppressSize</a></code> option, and 19 bytes are
- added by the <code><a href="#indexoptions.suppresslastmodified"
- >IndexOptions SuppressLastModified</a></code> option.
- Therefore, the widest default the description column is ever
- assigned is 55 bytes.</p>
-
- <p>See the <a href="#indexoptions.descriptionwidth"
- >DescriptionWidth</a> <directive module="mod_autoindex"
- >IndexOptions</directive> keyword for details on overriding the size
- of this column, or allowing descriptions of unlimited length.</p>
-
- <note><title>Caution</title>
- <p>Descriptive text defined with <directive>AddDescription</directive>
- may contain HTML markup, such as tags and character entities. If the
- width of the description column should happen to truncate a tagged
- element (such as cutting off the end of a bolded phrase), the
- results may affect the rest of the directory listing.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIcon</name>
-<description>Icon to display for a file selected by name</description>
-<syntax>AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This sets the icon to display next to a file ending in
- <var>name</var> for <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code>. <var>Icon</var> is either a (%-escaped)
- relative URL to the icon, or of the format <code>
- (<var>alttext</var>,<var>url</var>)</code> where <var>alttext</var>
- is the text tag given for an icon for non-graphical browsers.</p>
-
- <p><var>Name</var> is either <code>^^DIRECTORY^^</code> for directories,
- <code>^^BLANKICON^^</code> for blank lines (to format the list
- correctly), a file extension, a wildcard expression, a partial
- filename or a complete filename.</p>
-
- <example><title>Examples</title>
- AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
- AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
- AddIcon /icons/backup.xbm *~
- </example>
-
- <p><directive module="mod_autoindex">AddIconByType</directive>
- should be used in preference to <directive>AddIcon</directive>,
- when possible.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByEncoding</name>
-<description>Icon to display next to files selected by MIME
-content-encoding</description>
-<syntax>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This sets the icon to display next to files with <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>Icon</var> is either a (%-escaped) relative URL to the icon,
- or of the format <code>(<var>alttext</var>,<var>url</var>)</code>
- where <var>alttext</var> is the text tag given for an icon for
- non-graphical browsers.</p>
-
- <p><var>MIME-encoding</var> is a wildcard expression matching
- required the content-encoding.</p>
-
- <example><title>Example</title>
- AddIconByEncoding /icons/compress.xbm x-compress
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByType</name>
-<description>Icon to display next to files selected by MIME
-content-type</description>
-<syntax>AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This sets the icon to display next to files of type
- <var>MIME-type</var> for <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>Icon</var> is either a (%-escaped) relative URL to the icon,
- or of the format <code>(<var>alttext</var>,<var>url</var>)</code>
- where <var>alttext</var> is the text tag given for an icon for
- non-graphical browsers.</p>
-
- <p><var>MIME-type</var> is a wildcard expression matching
- required the mime types.</p>
-
- <example><title>Example</title>
- AddIconByType (IMG,/icons/image.xbm) image/*
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultIcon</name>
-<description>Icon to display for files when no specific icon is
-configured</description>
-<syntax>DefaultIcon <var>url-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>DefaultIcon</directive> directive sets the icon
- to display for files when no specific icon is known, for <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
- <var>Url-path</var> is a (%-escaped) relative URL to the icon.</p>
-
- <example><title>Example</title>
- DefaultIcon /icon/unknown.xbm
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HeaderName</name>
-<description>Name of the file that will be inserted at the top
-of the index listing</description>
-<syntax>HeaderName <var>filename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>HeaderName</directive> directive sets the name
- of the file that will be inserted at the top of the index
- listing. <var>Filename</var> is the name of the file to include.</p>
-
- <example><title>Example</title>
- HeaderName HEADER.html
- </example>
-
- <note>
- <p>Both HeaderName and <directive
- module="mod_autoindex">ReadmeName</directive> now treat
- <var>Filename</var> as a URI path relative to the one used to
- access the directory being indexed. If <var>Filename</var> begins
- with a slash, it will be taken to be relative to the <directive
- module="core">DocumentRoot</directive>.</p>
-
- <example><title>Example</title>
- HeaderName /include/HEADER.html
- </example>
-
- <p><var>Filename</var> must resolve to a document with a major
- content type of <code>text/*</code> (<em>e.g.</em>,
- <code>text/html</code>, <code>text/plain</code>, etc.). This means
- that <var>filename</var> may refer to a CGI script if the script's
- actual file type (as opposed to its output) is marked as
- <code>text/html</code> such as with a directive like:</p>
-
- <example>
- AddType text/html .cgi
- </example>
-
- <p><a href="../content-negotiation.html">Content negotiation</a>
- will be performed if <directive module="core">Options</directive>
- <code>MultiViews</code> is in effect. If <var>filename</var> resolves
- to a static <code>text/html</code> document (not a CGI script) and
- either one of the <directive module="core">options</directive>
- <code>Includes</code> or <code>IncludesNOEXEC</code> is enabled,
- the file will be processed for server-side includes (see the
- <module>mod_include</module> documentation).</p>
- </note>
-
- <p>If the file specified by <directive>HeaderName</directive> contains
- the beginnings of an HTML document (&lt;html&gt;, &lt;head&gt;, etc.)
- then you will probably want to set <a
- href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
- +SuppressHTMLPreamble</code></a>, so that these tags are not
- repeated.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexIgnore</name>
-<description>Adds to the list of files to hide when listing
-a directory</description>
-<syntax>IndexIgnore <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>IndexIgnore</directive> directive adds to the
- list of files to hide when listing a directory. <var>File</var> is a
- shell-style wildcard expression or full
- filename. Multiple IndexIgnore directives add
- to the list, rather than the replacing the list of ignored
- files. By default, the list contains <code>.</code> (the current
- directory).</p>
-
- <example>
- IndexIgnore README .htaccess *.bak *~
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOptions</name>
-<description>Various configuration settings for directory
-indexing</description>
-<syntax>IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>IndexOptions</directive> directive specifies the
- behavior of the directory indexing. <var>Option</var> can be one
- of</p>
-
- <dl>
- <dt><a name="indexoptions.descriptionwidth"
- id="indexoptions.descriptionwidth"
- >DescriptionWidth=[<var>n</var> | *]</a> (<em>Apache 2.0.23 and
- later</em>)</dt>
-
- <dd>The <code>DescriptionWidth</code> keyword allows you to
- specify the width of the description column in
- characters.</dd>
-
- <dd><code>-DescriptionWidth</code> (or unset) allows
- <module>mod_autoindex</module> to calculate the best width.</dd>
-
- <dd><code>DescriptionWidth=<var>n</var></code> fixes the column width to
- <var>n</var> bytes wide.</dd>
-
- <dd><code>DescriptionWidth=*</code> grows the column to the
- width necessary to accommodate the longest description
- string.</dd>
-
- <dd><strong>See the section on <directive
- module="mod_autoindex">AddDescription</directive> for dangers
- inherent in truncating descriptions.</strong></dd>
-
- <dt><a name="indexoptions.fancyindexing"
- id="indexoptions.fancyindexing">FancyIndexing</a></dt>
-
- <dd>This turns on fancy indexing of directories.</dd>
-
- <dt><a name="indexoptions.foldersfirst"
- id="indexoptions.foldersfirst">FoldersFirst</a> (<em>Apache
- 2.0.23 and later</em>)</dt>
-
- <dd>If this option is enabled, subdirectory listings will
- <em>always</em> appear first, followed by normal files in the
- directory. The listing is basically broken into two
- components, the files and the subdirectories, and each is
- sorted separately and then displayed subdirectories-first.
- For instance, if the sort order is descending by name, and
- <code>FoldersFirst</code> is enabled, subdirectory
- <code>Zed</code> will be listed before subdirectory
- <code>Beta</code>, which will be listed before normal files
- <code>Gamma</code> and <code>Alpha</code>. <strong>This option
- only has an effect if <a href="#indexoptions.fancyindexing"
- ><code>FancyIndexing</code></a> is also enabled.</strong></dd>
-
- <dt><a name="indexoptions.htmltable"
- id="indexoptions.htmltable">HTMLTable</a> (<em>Experimental,
- Apache 2.0.23 and later</em>)</dt>
-
- <dd>This experimental option with FancyIndexing constructs a
- simple table for the fancy directory listing. Note this will
- confuse older browsers. It is particularly necessary if file
- names or description text will alternate between
- left-to-right and right-to-left reading order, as can happen
- on WinNT or other utf-8 enabled platforms.</dd>
-
- <dt><a name="indexoptions.iconsarelinks"
- id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>
-
- <dd>This makes the icons part of the anchor for the filename, for
- fancy indexing.</dd>
-
- <dt><a name="indexoptions.iconheight"
- id="indexoptions.iconheight">IconHeight[=<var
- >pixels</var>]</a></dt>
-
- <dd>Presence of this option, when used with IconWidth, will cause
- the server to include <code>height</code> and <code>width</code>
- attributes in the <code>img</code> tag for the file icon. This allows
- browser to precalculate the page layout without having to wait until
- all the images have been loaded. If no value is given for the option,
- it defaults to the standard height of the icons supplied with the Apache
- software.</dd>
-
- <dt><a name="indexoptions.iconwidth"
- id="indexoptions.iconwidth">IconWidth[=<var
- >pixels</var>]</a></dt>
-
- <dd>Presence of this option, when used with <code>IconHeight</code>,
- will cause the server to include <code>height</code> and
- <code>width</code> attributes in the <code>img</code> tag for
- the file icon. This allows browser to precalculate the page
- layout without having to wait until all the images have been
- loaded. If no value is given for the option, it defaults to
- the standard width of the icons supplied with the Apache
- software.</dd>
-
- <dt><a name="indexoptions.ignorecase"
- id="indexoptions.ignorecase">IgnoreCase</a></dt>
-
- <dd>If this option is enabled, names are sorted in a case-insensitive
- manner. For instance, if the sort order is ascending by name, and
- IgnoreCase is enabled, file Zeta will be listed after file alfa
- (Note: file GAMMA will always be listed before file gamma). </dd>
-
- <dt><a name="indexoptions.ignoreclient"
- id="indexoptions.ignoreclient">IgnoreClient</a></dt>
-
- <dd>This option causes <module>mod_autoindex</module> to ignore all
- query variables from the client, including sort order (implies
- <code><a href="#indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></code>.)</dd>
-
- <dt><a name="indexoptions.namewidth"
- id="indexoptions.namewidth">NameWidth=[<var>n</var>
- | *]</a></dt>
-
- <dd>The <code>NameWidth</code> keyword allows you to specify the width
- of the filename column in bytes.</dd>
-
- <dd><code>-NameWidth</code> (or unset) allows <module
- >mod_autoindex</module> to calculate the best width.</dd>
-
- <dd><code>NameWidth=<var>n</var></code> fixes the column width to
- <var>n</var> bytes wide.</dd>
-
- <dd><code>NameWidth=*</code> grows the column to the necessary
- width.</dd>
-
- <dt><a name="indexoptions.scanhtmltitles"
- id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>
-
- <dd>This enables the extraction of the title from HTML documents
- for fancy indexing. If the file does not have a description
- given by <directive module="mod_autoindex">AddDescription</directive>
- then httpd will read the document for the value of the
- <code>title</code> element. This is CPU and disk intensive.</dd>
-
- <dt><a name="indexoptions.showforbidden"
- id="indexoptions.showforbidden">ShowForbidden</a></dt>
-
- <dd>If specified, Apache will show files normally hidden because
- the subrequest returned HTTP_UNAUTHORIZED or HTTP_FORBIDDEN</dd>
-
- <dt><a name="indexoptions.suppresscolumnsorting"
- id="indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></dt>
-
- <dd>If specified, Apache will not make the column headings in a
- FancyIndexed directory listing into links for sorting. The
- default behavior is for them to be links; selecting the
- column heading will sort the directory listing by the values
- in that column. <strong>Prior to Apache 2.0.23, this also
- disabled parsing the Query Arguments for the sort
- string.</strong> That behavior is now controlled by <a
- href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a> in Apache 2.0.23.</dd>
-
- <dt><a name="indexoptions.suppressdescription"
- id="indexoptions.suppressdescription"
- >SuppressDescription</a></dt>
-
- <dd>This will suppress the file description in fancy indexing
- listings. By default, no file descriptions are defined, and
- so the use of this option will regain 23 characters of screen
- space to use for something else. See <directive module="mod_autoindex"
- >AddDescription</directive> for information about setting the file
- description. See also the <code><a
- href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
- index option to limit the size of the description column.</dd>
-
- <dt><a name="indexoptions.suppresshtmlpreamble"
- id="indexoptions.suppresshtmlpreamble"
- >SuppressHTMLPreamble</a></dt>
-
- <dd>If the directory actually contains a file specified by the
- <directive module="mod_autoindex">HeaderName</directive>
- directive, the module usually includes the contents of the file
- after a standard HTML preamble (<code>&lt;html&gt;</code>,
- <code>&lt;head&gt;</code>, <em>et cetera</em>). The
- <code>SuppressHTMLPreamble</code> option disables this behaviour,
- causing the module to start the display with the header file
- contents. The header file must contain appropriate HTML instructions
- in this case. If there is no header file, the preamble is generated
- as usual.</dd>
-
- <dt><a name="indexoptions.suppressicon"
- id="indexoptions.suppressicon">SuppressIcon</a> (<em>Apache
- 2.0.23 and later</em>)</dt>
-
- <dd>This will suppress the icon in fancy indexing listings.
- Combining both <code>SuppressIcon</code> and
- <code>SuppressRules</code> yields proper HTML 3.2 output, which
- by the final specification prohibits <code>img</code> and
- <code>hr</code> elements from the <code>pre</code> block (used to
- format FancyIndexed listings.)</dd>
-
- <dt><a name="indexoptions.suppresslastmodified"
- id="indexoptions.suppresslastmodified"
- >SuppressLastModified</a></dt>
-
- <dd>This will suppress the display of the last modification date,
- in fancy indexing listings.</dd>
-
- <dt><a name="indexoptions.suppressrules"
- id="indexoptions.suppressrules">SuppressRules</a>
- (<em>Apache 2.0.23 and later</em>)</dt>
-
- <dd>This will suppress the horizontal rule lines (<code>hr</code>
- elements) in directory listings. Combining both <code>SuppressIcon</code> and
- <code>SuppressRules</code> yields proper HTML 3.2 output, which
- by the final specification prohibits <code>img</code> and
- <code>hr</code> elements from the <code>pre</code> block (used to
- format FancyIndexed listings.)</dd>
-
- <dt><a name="indexoptions.suppresssize"
- id="indexoptions.suppresssize">SuppressSize</a></dt>
-
- <dd>This will suppress the file size in fancy indexing listings.</dd>
-
- <dt><a name="indexoptions.trackmodified"
- id="indexoptions.trackmodified">TrackModified</a> (<em>Apache
- 2.0.23 and later</em>)</dt>
-
- <dd>This returns the Last-Modified and ETag values for the listed
- directory in the HTTP header. It is only valid if the
- operating system and file system return appropriate stat()
- results. Some Unix systems do so, as do OS2's JFS and Win32's
- NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
- Once this feature is enabled, the client or proxy can track
- changes to the list of files when they perform a <code>HEAD</code>
- request. Note some operating systems correctly track new and
- removed files, but do not track changes for sizes or dates of
- the files within the directory. <strong>Changes to the size
- or date stamp of an existing file will not update the
- Last-Modified header on all Unix platforms.</strong> If this
- is a concern, leave this option disabled.</dd>
-
- <dt><a name="indexoptions.versionsort"
- id="indexoptions.versionsort">VersionSort</a>
- (<em>Apache 2.0a3 and later</em>)</dt>
-
- <dd>The <code>VersionSort</code> keyword causes files containing
- version numbers to sort in a natural way. Strings are sorted as
- usual, except that substrings of digits in the name and
- description are compared according to their numeric value.
-
- <example><title>Example:</title>
- foo-1.7<br />
- foo-1.7.2<br />
- foo-1.7.12<br />
- foo-1.8.2<br />
- foo-1.8.2a<br />
- foo-1.12
- </example>
-
- <p>If the number starts with a zero, then it is considered to
- be a fraction:</p>
-
- <example>
- foo-1.001<br />
- foo-1.002<br />
- foo-1.030<br />
- foo-1.04
- </example>
- </dd>
-
- <dt><a name="indexoptions.xhtml"
- id="indexoptions.xhtml">XHTML</a>
- (<em>Apache 2.0.49 and later</em>)</dt>
-
- <dd>The <code>XHTML</code> keyword forces <module>mod_autoindex</module>
- to emit XHTML 1.0 code instead of HTML 3.2.</dd>
- </dl>
-
- <!--
- XXX: we should consider to allow sections inside <usage>
- this would require some xslt changes...
- -->
- <dl><dt>Incremental IndexOptions</dt>
- <dd>
- <p>Apache 1.3.3 introduced some significant changes in the
- handling of <directive>IndexOptions</directive> directives. In
- particular:</p>
-
- <ul>
- <li>Multiple <directive>IndexOptions</directive> directives for a
- single directory are now merged together. The result of:
-
- <example>
- &lt;Directory /foo&gt;
- <indent>
- IndexOptions HTMLTable<br />
- IndexOptions SuppressColumnsorting
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>will be the equivalent of</p>
-
- <example>
- IndexOptions HTMLTable SuppressColumnsorting
- </example>
- </li>
-
- <li>The addition of the incremental syntax (<em>i.e.</em>, prefixing
- keywords with <code>+</code> or <code>-</code>).</li>
- </ul>
-
- <p>Whenever a '+' or '-' prefixed keyword is encountered, it
- is applied to the current <directive>IndexOptions</directive>
- settings (which may have been inherited from an upper-level
- directory). However, whenever an unprefixed keyword is processed, it
- clears all inherited options and any incremental settings encountered
- so far. Consider the following example:</p>
-
- <example>
- IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing<br />
- IndexOptions +SuppressSize
- </example>
-
- <p>The net effect is equivalent to <code>IndexOptions FancyIndexing
- +SuppressSize</code>, because the unprefixed <code>FancyIndexing</code>
- discarded the incremental keywords before it, but allowed them to
- start accumulating again afterward.</p>
-
- <p>To unconditionally set the <directive>IndexOptions</directive> for
- a particular directory, clearing the inherited settings, specify
- keywords without any <code>+</code> or <code>-</code> prefixes.</p>
- </dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOrderDefault</name>
-<description>Sets the default ordering of the directory index</description>
-<syntax>IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</syntax>
-<default>IndexOrderDefault Ascending Name</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>IndexOrderDefault</directive> directive is used
- in combination with the <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code> index option. By default, fancyindexed
- directory listings are displayed in ascending order by filename; the
- <directive>IndexOrderDefault</directive> allows you to change this
- initial display order.</p>
-
- <p><directive>IndexOrderDefault</directive> takes two
- arguments. The first must be either <code>Ascending</code> or
- <code>Descending</code>, indicating the direction of the sort.
- The second argument must be one of the keywords <code>Name</code>,
- <code>Date</code>, <code>Size</code>, or <code>Description</code>,
- and identifies the primary key. The secondary key is
- <em>always</em> the ascending filename.</p>
-
- <p>You can force a directory listing to only be displayed in a
- particular order by combining this directive with the <code><a
- href="#indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></code> index option; this will prevent
- the client from requesting the directory listing in a different
- order.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexStyleSheet</name>
-<description>Adds a CSS stylesheet to the directory index</description>
-<syntax>IndexStyleSheet <var>url-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>IndexStyleSheet</directive> directive sets the name of
- the file that will be used as the CSS for the index listing.
- </p>
- <example>
- <title>Example</title>
- IndexStyleSheet "/css/style.css"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ReadmeName</name>
-<description>Name of the file that will be inserted at the end
-of the index listing</description>
-<syntax>ReadmeName <var>filename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>ReadmeName</directive> directive sets the name
- of the file that will be appended to the end of the index
- listing. <var>Filename</var> is the name of the file to include, and
- is taken to be relative to the location being indexed. If
- <var>Filename</var> begins with a slash, it will be taken to be
- relative to the <directive module="core">DocumentRoot</directive>.
- </p>
-
- <example><title>Example</title>
- ReadmeName FOOTER.html
- </example>
-
- <example><title>Example 2</title>
- ReadmeName /include/FOOTER.html
- </example>
-
- <p>See also <directive module="mod_autoindex"
- >HeaderName</directive>, where this behavior is described in greater
- detail.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_autoindex.xml.ja b/docs/manual/mod/mod_autoindex.xml.ja
deleted file mode 100644
index 14310a4e74..0000000000
--- a/docs/manual/mod/mod_autoindex.xml.ja
+++ /dev/null
@@ -1,1023 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.25 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_autoindex.xml.meta">
-
-<name>mod_autoindex</name>
-<description>Unix $B$N(B <code>ls</code> $B%3%^%s%I$d(B
- Win32 $B$N(B <code>dir</code> $B%7%'%k%3%^%s%I$K;w$?(B
- $B%G%#%l%/%H%j%$%s%G%C%/%9$r@8@.$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_autoindex.c</sourcefile>
-<identifier>autoindex_module</identifier>
-
-<summary>
- <p>$B%G%#%l%/%H%j$N%$%s%G%C%/%9$OFs$D$N>pJs8;$N$&$A$N(B
- $B0l$D$+$i@8@.$G$-$^$9(B:</p>
-
- <ul>
- <li>$BIaDL$O(B <code>index.html</code> $B$H8F$P$l$k(B
- $B%f!<%6$K$h$C$F=q$+$l$?%U%!%$%k!#(B
- <directive module="mod_dir">DirectoryIndex</directive>
- $B%G%#%l%/%F%#%V$G$3$N%U%!%$%kL>$r@_Dj$7$^$9!#(B
- $B$3$l$O(B <module>mod_dir</module> $B$G@)8f$5$l$^$9!#(B</li>
-
- <li>$B$b$7$/$O!"%5!<%P$K$h$C$F@8@.$5$l$?0lMw!#(B
- $B$=$NB>$N%G%#%l%/%F%#%V$G$3$N0lMw$N=q<0$r@)8f$7$^$9!#(B
- <directive
- module="mod_autoindex">AddIcon</directive>, <directive
- module="mod_autoindex">AddIconByEncoding</directive> $B$H(B
- <directive module="mod_autoindex">AddIconByType</directive>
- $B$r;H$&$3$H$G!"MM!9$J%U%!%$%k%?%$%W$KBP$7$F%"%$%3%s0lMw$r(B
- $B%;%C%H$7$^$9!#$D$^$j!"%j%9%H$5$l$?%U%!%$%kKh$K!"(B
- $B%U%!%$%k$K%^%C%A$7$?0lHV:G=i$N%"%$%3%s$,I=<($5$l$^$9!#(B
- $B$3$l$i$O(B <module>mod_autoindex</module> $B$G@)8f$5$l$^$9!#(B</li>
- </ul>
- <p>$BK>$`$J$i$P!"<+F0%$%s%G%C%/%9@8@.$r40A4$K=|5n(B ($B$"$k$$$OCV49(B)
- $B$G$-$k$h$&$K!"$3$NFs$D$N5!G=$OJ,N%$5$l$F$$$^$9!#(B</p>
-
- <p>$B<+F0%$%s%G%C%/%9@8@.$O(B <code>Options +Indexes</code>
- $B$r;H$&$3$H$GM-8z$K$J$j$^$9!#>\:Y$K$D$$$F$O!"(B
- <directive module="core">Options</directive>
- $B%G%#%l%/%F%#%V$r$4Mw2<$5$$!#(B</p>
-
- <p>$B$b$7(B <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code>$B%*%W%7%g%s$,(B
- <directive module="autoindex">IndexOptions</directive>
- $B%G%#%l%/%F%#%V$KM?$($i$l$F$$$k$J$i$P!"(B
- $BNs$N@hF,$OI=<($N=gHV$r@)8f$9$k%j%s%/$K$J$j$^$9!#(B
- $B@hF,$N%j%s%/$rA*Br$9$k$H!"0lMw$O:F@8@.$5$l$F(B
- $B$=$NNs$NCM$G%=!<%H$5$l$^$9!#(B
- $BF1$8@hF,$rB3$1$FA*Br$9$k$H!"8r8_$K>:=g$H9_=g$H$K$J$j$^$9!#(B
- $B$3$l$i$NNs$N@hF,$N%j%s%/$O!"(B
- <directive module="mod_autoindex">IndexOptions</directive>
- $B%G%#%l%/%F%#%V$N(B
- <code>SuppressColumnSorting</code>
- $B%*%W%7%g%s$G>C$9$3$H$,$G$-$^$9!#(B</p>
-
- <p>"Size" $B$G%=!<%H$7$?>l9g$O!"MQ$$$i$l$k$N$O(B
- <em>$B<B:]$N(B</em>$B%U%!%$%k$N%5%$%:$G$"$C$F!"(B
- $BI=<($NCM$G$O$J$$$3$H$KCm0U$7$F$/$@$5$$(B -
- $B$?$H$(N>J}$H$b$,(B "1K" $B$HI=<($5$l$F$$$?$H$7$F$b!"(B
- 1010 $B%P%$%H$N%U%!%$%k$OI,$:(B 1011
- $B%P%$%H$N%U%!%$%k$h$j$bA0(B ($B>:=g$N>l9g(B) $B$KI=<($5$l$^$9!#(B</p>
-</summary>
-
-<section id="query">
- <title>Autoindex $B%j%/%(%9%H%/%(%j!<0z?t(B</title>
-
- <p>Apache 2.0.23 $B$G!"(B
- $B%3%i%`%=!<%H$N$?$a$K%/%(%j!<0z?t$r:FJT@.$7$F!"(B
- $B?7$7$$%/%(%j!<%*%W%7%g%s$N%0%k!<%W$rF3F~$7$^$7$?!#(B
- $B=PNO$KBP$9$k%/%i%$%"%s%H$N$9$Y$F$N@)8f$r8zN(E*$KKu>C(B
- $B$G$-$k$h$&$K!"(B
- <code><a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> $B$,F3F~$5$l$^$7$?!#(B</p>
-
- <p>$B%3%i%`%=!<%H$N%X%C%@$=$l<+BN$,!"(B
- $B2<5-$N%=!<%H%/%(%j!<%*%W%7%g%s$rIU2C$9$k(B
- $B<+J,<+?H$r;2>H$9$k%j%s%/$G$9!#(B
- $B2<5-$N%*%W%7%g%s$N$I$l$G$b!"(B
- $B%G%#%l%/%H%j%j%=!<%9$X$N%j%/%(%9%H$K2C$($k$3$H$,$G$-$^$9!#(B</p>
-
- <ul>
- <li><code>C=N</code> $B$O!"%U%!%$%kL>$G%=!<%H$7$^$9!#(B</li>
-
- <li><code>C=M</code> $B$O!"99?7F|;~!"(B
- $B%G%#%l%/%H%j!"%U%!%$%kL>$N=g$G%=!<%H$7$^$9!#(B</li>
-
- <li><code>C=S</code> $B$O!"%5%$%:!"(B
- $B%G%#%l%/%H%j!"%U%!%$%kL>$N=g$G%=!<%H$7$^$9!#(B</li>
-
- <li class="separate"><code>C=D</code> $B$O!"@bL@!"(B
- $B%G%#%l%/%H%j!"%U%!%$%kL>$N=g$G%=!<%H$7$^$9!#(B</li>
-
- <li><code>O=A</code> $B$O!">:=g$GI=$r%=!<%H$7$^$9!#(B</li>
-
- <li class="separate"><code>O=D</code> $B$O!"9_=g$GI=$r%=!<%H$7$^$9!#(B</li>
-
- <li><code>F=0</code> $B$O!"C1=c$JI=$N=q<0$K$7$^$9!#(B
- (FancyIndex $B$G$O$"$j$^$;$s!#(B)</li>
-
- <li><code>F=1</code> $B$O!"(BFancyIndex
- $BI=<($NI=$N=q<0$K$7$^$9!#(B</li>
-
- <li><code>F=2</code> $B$O!"I=$r(B HTML
- $B$N%F!<%V%k$r;H$C$?(B FancyIndex $B$N=q<0$K$7$^$9!#(B</li>
-
- <li><code>V=0</code>
- $B$O!"%P!<%8%g%s$K$h$k%=!<%H$rL58z$K$7$^$9!#(B</li>
-
- <li class="separate"><code>V=1</code>
- $B$O!"%P!<%8%g%s$K$h$k%=!<%H$rM-8z$K$7$^$9!#(B</li>
-
- <li><code>P=<var>pattern</var></code>
- $B$O!"M?$($i$l$?(B <var>pattern</var>
- $B$KE,9g$7$?%U%!%$%k$N$_$rI=<($7$^$9!#(B</li>
- </ul>
-
- <p>"P ($B%Q%?!<%s$N(B P)" $B%/%(%j!<0z?t$O!"(B
- $BDL>o$N(B <directive module="mod_autoindex">IndexIgnore</directive>
- $B%G%#%l%/%F%#%V$,=hM}$5$l$?(B<em>$B8e(B</em>$B$K8!::$5$l!"(B
- $B%U%!%$%kL>A4$F$,!"B>$N(B autoindex
- $B%j%9%H=hM}$HF1MM$NH=Dj4p=`2<$KCV$+$lB3$1$k(B
- $B$3$H$KCm0U$7$F$/$@$5$$!#(B
- <module>mod_autoindex</module> $B$N%/%(%j!<0z?t%Q!<%5(B ($B2r@O(B) $B$O!"(B
- $BG'<1ITG=$J%*%W%7%g%s$K$V$D$+$k$HB(:B$KDd;_$7$^$9!#(B
- $B%/%(%j!<0z?t$O>e$NI=$K=>$C$F(B
- $B@5$7$$7A<0$K$J$C$F$$$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p>$B2<$NC1=c$JNc$O!"$3$l$i$N%/%(%j!<%*%W%7%g%s$r(B
- $BI=$7$^$9!#$3$l$r$=$N$^$^@Z$j<h$C$F(B HEADER.html
- $B%U%!%$%k$KJ]B8$9$k$3$H$b$G$-$^$9!#(B
- mod_autoindex $B$,(B X=Go $BF~NO$K$V$D$+$kA0$K(B
- $B0z?t$,A4$F2r<a$5$l$k$h$&$K!"(B
- $BL$CN$N0z?t(B "X" $B$O%j%9%H$N:G8e$KCV$+$l$F$$$^$9!#(B</p>
-
- <example>
- &lt;form action="" method="get"&gt;<br />
- <indent>
- Show me a &lt;select name="F"&gt;<br />
- <indent>
- &lt;option value="0"&gt; Plain list&lt;/option&gt;<br />
- &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;<br />
- &lt;option value="2"&gt; Table list&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- Sorted by &lt;select name="C"&gt;<br />
- <indent>
- &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;<br />
- &lt;option value="M"&gt; Date Modified&lt;/option&gt;<br />
- &lt;option value="S"&gt; Size&lt;/option&gt;<br />
- &lt;option value="D"&gt; Description&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- &lt;select name="O"&gt;<br />
- <indent>
- &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;<br />
- &lt;option value="D"&gt; Descending&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- &lt;select name="V"&gt;<br />
- <indent>
- &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;<br />
- &lt;option value="1"&gt; in Version order&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- Matching &lt;input type="text" name="P" value="*" /&gt;<br />
- &lt;input type="submit" name="X" value="Go" /&gt;<br />
- </indent>
- &lt;/form&gt;
- </example>
-
-</section>
-
-<directivesynopsis>
-<name>AddAlt</name>
-<description>$B%"%$%3%s$NBe$o$j$K(B
-$BI=<($5$l$k!"%U%!%$%kL>$GA*Br$5$l$?BeBX%F%-%9%H(B</description>
-<syntax>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAlt</directive> $B$O!"(B<code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"%"%$%3%s$NBe$o$j$KI=<($9$kBeBX%F%-%9%H$rDs6!$7$^$9!#(B
- <var>file</var> $B$O!"@bL@$9$k%U%!%$%k$N%U%!%$%k3HD%;R!"(B
- $B%U%!%$%kL>$N0lIt!"%o%$%k%I%+!<%II=8=!"40A4$J%U%!%$%kL>$N(B
- $B$I$l$+$K$J$j$^$9!#(B
- <var>string</var> $B$K6uGr$,$"$k>l9g$O0zMQId(B (<code>"</code>
- $B$+(B <code>'</code>) $B$G0O$`I,MW$,$"$j$^$9!#(B
- $B$3$NJ8;zNs$O!"%/%i%$%"%s%H$,2hA|$rI=<($G$-$J$$>l9g$d(B
- $B2hA|$N%m!<%I$rL58z$K$7$F$$$k>l9g$d(B
- $B%"%$%3%s$N<hF@$K<:GT$7$?$H$-$KI=<($5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddAlt "PDF file" *.pdf<br />
- AddAlt Compressed *.gz *.zip *.Z
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByEncoding</name>
-<description>$B%"%$%3%s$NBe$o$j$KI=<($5$l$k!"(BMIME $BId9f2=J}K!$GA*Br$5$l$?(B
-$BBeBX%F%-%9%H(B</description>
-<syntax>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAltByEncoding</directive> $B$O!"(B
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"%"%$%3%s$NBe$o$j$KI=<($9$kBeBXJ8;zNs$rDs6!$7$^$9!#(B
- <var>MIME-encoding</var> $B$OM-8z$JId9f2=!"Nc$($P(B
- <code>x-compress</code>
- $B$G$9!#(B
- <var>string</var> $B$K6uGr$,$"$k$H$-$O!"0zMQId(B (<code>"</code> $B$+(B
- <code>'</code>) $B$G0O$`I,MW$,$"$j$^$9!#(B
- $B$3$NJ8;zNs$O!"%/%i%$%"%s%H$,2hA|$rI=<($G$-$J$$>l9g$d(B
- $B2hA|$N%m!<%I$rL58z$K$7$F$$$k>l9g$d(B
- $B%"%$%3%s$N<hF@$K<:GT$7$?$H$-$KI=<($5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddAltByEncoding gzip x-gzip
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByType</name>
-<description>$B%"%$%3%s$NBe$o$j$K(B
-$BI=<($5$l$k!"(BMIME $B%?%$%W$GA*Br$5$l$?BeBX%F%-%9%H(B</description>
-<syntax>AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAltByType</directive> $B$O!"(B
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"%"%$%3%s$NBe$o$j$KI=<($9$kBeBXJ8;zNs$r@_Dj$7$^$9!#(B
- <var>MIME-type</var> $B$OM-8z$J%?%$%W!"Nc$($P(B
- <code>text/html</code>
- $B$G$9!#(B
- <var>string</var> $B$K6uGr$,$"$k$H$-$O!"0zMQId(B (<code>"</code> $B$+(B
- <code>'</code>) $B$G0O$`I,MW$,$"$j$^$9!#(B
- $B$3$NJ8;zNs$O!"%/%i%$%"%s%H$,2hA|$rI=<($G$-$J$$>l9g$d(B
- $B2hA|$N%m!<%I$rL58z$K$7$F$$$k>l9g$d(B
- $B%"%$%3%s$N<hF@$K<:GT$7$?$H$-$KI=<($5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddAltByType 'plain text' text/plain
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDescription</name>
-<description>$B%U%!%$%k$KBP$7$FI=<($9$k@bL@(B</description>
-<syntax>AddDescription <var>string</var> <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"%U%!%$%k$KBP$7$FI=<($9$k@bL@$r@_Dj$7$^$9!#(B
- <var>file</var> $B$O@bL@$9$k%U%!%$%k$N%U%!%$%k3HD%;R!"(B
- $B%U%!%$%kL>$N0lIt!"%o%$%k%I%+!<%II=8=!"40A4$J%U%!%$%kL>$N(B
- $B$I$l$+$K$J$j$^$9!#(B
- <var>string</var> $B$OFs=E0zMQId(B (<code>"</code>) $B$G0O$^$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddDescription "The planet Mars" /web/pics/mars.gif
- </example>
-
- <p>$BDL>o$N%G%U%)%k%H$N@bL@NN0h$O(B 23 $B%P%$%H$NI}$G$9!#(B
- <code><a href="#indexoptions.suppressicon"
- >IndexOptions SuppressIcon</a></code>
- $B%*%W%7%g%s$G(B 6 $B%P%$%HDI2C!"(B
- <code><a href="#indexoptions.suppresssize"
- >IndexOptions SuppressSize</a></code>
- $B%*%W%7%g%s$G(B 7 $B%P%$%HDI2C!"(B
- <code><a href="#indexoptions.suppresslastmodified"
- >IndexOptions SuppressLastModified</a></code>
- $B%*%W%7%g%s$G(B 19 $B%P%$%HDI2C$5$l$^$9!#(B
- $B$G$9$+$i!"%G%U%)%k%H$N@bL@%3%i%`$N:GBgI}$O(B
- 55 $B%P%$%H$K$J$j$^$9!#(B</p>
-
- <p>$B$3$N%3%i%`$NBg$-$5$r>e=q$-$7$?$j!"(B
- $B@bL@$,L5@)8BD9$G$b$h$$$h$&$K$9$k$?$a$N>\:Y$K4X$7$F$O!"(B
- <a href="#indexoptions.descriptionwidth">DescriptionWidth</a>
- $B$H$$$&(B
- <directive module="mod_autoindex">IndexOptions</directive>
- $B$N%-!<%o!<%I$r$4Mw2<$5$$!#(B</p>
-
- <note><title>$B7Y9p(B</title>
- <p><directive>AddDescription</directive>
- $B$GDj5A$5$l$?@bL@%F%-%9%H$O!"%?%0$dJ8;zNs$H$$$C$?(B
- HTML $B%^!<%/%"%C%W$r4^$`$3$H$,$G$-$^$9!#(B
- $B$b$7!"@bL@%3%i%`$NI}$K$h$C$F%?%0IU$1$5$l$?MWAG$,4]$a9~$^$l$?(B
- ($BB@;z$N8l6g$N:G8e$,@Z$l$k$H$$$C$?(B) $B>l9g!"(B
- $B=PNO7k2L$O!"%G%#%l%/%H%j0lMw$N;D$j$NItJ,$K1F6A$rM?$($k$G$7$g$&!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIcon</name>
-<description>$B%U%!%$%k$KI=<($9$k%"%$%3%s$rL>A0$GA*Br(B</description>
-<syntax>AddIcon <var>icon</var> <var>name</var>
-[<var>name</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"(B
- <var>name</var> $B$G=*$o$k%U%!%$%k$NNY$KI=<($9$k%"%$%3%s$r@_Dj$7$^$9!#(B
- <var>icon</var> $B$O!"(B(% $B$G%(%9%1!<%W$5$l$?(B) $B%"%$%3%s$X$NAjBP(B URL
- $B$+!"B>$N=q<0(B (<var>alttext</var>, <var>url</var>) $B$G$9!#(B
- $B$3$3$G(B <var>alttext</var>
- $B$O!"Hs%0%i%U%#%+%k%V%i%&%68~$1$K%"%$%3%s$KIU$1$i$l$?%F%-%9%H%?%0$G$9!#(B
- </p>
-
- <p><var>name</var> $B$O!"%G%#%l%/%H%j$KBP1~$9$k(B <code>^^DIRECTORY^^</code>
- $B$+!"6uGr9T$KBP1~$9$k(B <code>^^BLANKICON^^</code> ($B0lMw$,@5$7$/I=<($5$l$k$?$a$K(B) $B$+!"(B
- $B%U%!%$%k3HD%;R$+!"%o%$%k%I%+!<%II=8=$+!"%U%!%$%kL>$N0lIt$+(B
- $B40A4$J%U%!%$%kL>$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
- AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
- AddIcon /icons/backup.xbm *~
- </example>
-
- <p>$B$b$72DG=$J$i!"(B
- <directive>AddIcon</directive>
- $B$h$j(B
- <directive module="mod_autoindex">AddIconByType</directive>
- $B$rM%@hE*$K;H$&$Y$-$G$7$g$&!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByEncoding</name>
-<description>$B%U%!%$%k$KI=<($9$k%"%$%3%s$r(B MIME
-$BId9f2=J}K!$GA*Br(B</description>
-<syntax>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"%U%!%$%k$NNY$KI=<($9$k%"%$%3%s$r@_Dj$7$^$9!#(B
- <var>icon</var> $B$O!"(B(% $B$G%(%9%1!<%W$5$l$?(B) $B%"%$%3%s$X$NAjBP(B URL
- $B$+!"B>$N=q<0(B <code>(<var>alttext</var>, <var>url</var>)</code> $B$G$9!#(B
- $B$3$3$G(B <var>alttext</var>
- $B$O!"Hs%0%i%U%#%+%k%V%i%&%68~$1$K%"%$%3%s$KIU$1$i$l$?%F%-%9%H%?%0$G$9!#(B
- </p>
-
- <p><var>MIME-encoding</var> $B$O!"MW5a$5$l$?%(%s%3!<%I$K3:Ev$9$k(B
- $B%o%$%k%I%+!<%II=8=$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddIconByEncoding /icons/compress.xbm x-compress
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByType</name>
-<description>$B%U%!%$%k$NNY$KI=<($9$k%"%$%3%s$r(B
-MIME $B%?%$%W$K$h$C$FA*Br(B</description>
-<syntax>AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"%U%!%$%k$NNY$KI=<($9$k%"%$%3%s$r@_Dj$7$^$9!#(B
- <var>icon</var> $B$O!"(B(% $B$G%(%9%1!<%W$5$l$?(B) $B%"%$%3%s$X$NAjBP(B URL
- $B$+!"B>$N=q<0(B <code>(<var>alttext</var>, <var>url</var>)</code> $B$G$9!#(B
- $B$3$3$G(B <var>alttext</var>
- $B$O!"Hs%0%i%U%#%+%k%V%i%&%68~$1$K%"%$%3%s$KIU$1$i$l$?%F%-%9%H%?%0$G$9!#(B
- </p>
-
- <p><var>MIME-type</var> $B$O!"MW5a$5$l$?%?%$%W$K3:Ev$9$k(B
- $B%o%$%k%I%+!<%II=8=$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddIconByType (IMG,/icons/image.xbm) image/*
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultIcon</name>
-<description>$BFCDj$N%"%$%3%s$,2?$b@_Dj$5$l$F$$$J$$;~$K(B
-$B%U%!%$%k$KI=<($9$k%"%$%3%s(B</description>
-<syntax>DefaultIcon <var>url-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B$K$*$$$F!"(B
- $BFCDj$N%"%$%3%s$,$J$$>l9g$K%U%!%$%k$KI=<($9$k%"%$%3%s$r@_Dj$7$^$9!#(B
- <var>url-path</var> $B$O!"(B(% $B$G%(%9%1!<%W$5$l$?(B) $B%"%$%3%s$X$NAjBP(B URL
- $B$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- DefaultIcon /icon/unknown.xbm
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HeaderName</name>
-<description>
-$B%$%s%G%C%/%90lMw$N@hF,$KA^F~$5$l$k%U%!%$%k$NL>A0(B</description>
-<syntax>HeaderName <var>filename</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>HeaderName</directive>
- $B%G%#%l%/%F%#%V$O!"(B
- $B%$%s%G%C%/%90lMw$N@hF,$KA^F~$9$k%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B
- <var>Filename</var> $B$O<h$j9~$`%U%!%$%k$NL>A0$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- HeaderName HEADER.html
- </example>
-
- <note>
- <p>HeaderName $B$b(B <directive
- module="mod_autoindex">ReadmeName</directive>
- $B$bN>J}$H$b8=:_$O!"(B<var>filename</var>
- $B$r%$%s%G%C%/%9$5$l$F$$$k%G%#%l%/%H%j$KMQ$$$i$l$?(B URI
- $B$KBP$9$kAjBP(B URI $B%Q%9$H$7$F07$$$^$9!#(B
- <var>filename</var> $B$,%9%i%C%7%e$G;O$^$k>l9g$O!"(B
- <directive module="core">DocumentRoot</directive>
- $B$+$i$NAjBP%Q%9$H$J$j$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- HeaderName /include/HEADER.html
- </example>
-
- <p><var>filename</var> $B$O(B
- $B%a%8%c!<%3%s%F%s%H%?%$%W$,(B "<code>text/*</code>"
- (<em>$BNc$($P(B</em>$B!"(B<code>text/html</code>,
- <code>text/plain</code> $BEy$G$9!#(B)
- $B$N%I%-%e%a%s%H$H$7$F2r7h(B
- $B$5$l$J$1$l$P$J$j$^$;$s!#$3$l$O$D$^$j!"(B
- $B$b$7(B CGI $B%9%/%j%W%H$N<B:]$N%U%!%$%k%?%$%W$,(B
- $B<!$N%G%#%l%/%F%#%V$N$h$&$K$7$F<B:]$N=PNO$H$O0[$J$C$F(B
- <code>text/html</code> $B$H$7$F%^!<%/$5$l$F$$$k>l9g!"(B
- <var>filename</var>
- $B$O(B CGI $B%9%/%j%W%H$r;2>H$9$k$+$bCN$l$J$$!"(B
- $B$H$$$&$3$H$r0UL#$7$^$9(B:</p>
-
- <example>
- AddType text/html .cgi
- </example>
-
- <p><directive module="core">Options</directive> <code>MultiViews</code> $B$,(B
- $BM-8z$K$J$C$F$$$k>l9g$O!"(B
- <a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>
- $B$,9T$J$o$l$^$9!#(B
- $B$b$7(B <var>filename</var> $B$,(B (CGI $B%9%/%j%W%H$G$J$$(B) $B@EE*$J(B
- <code>text/html</code> $B%I%-%e%a%s%H$G2r7h$5$l!"(B
- <directive module="core">options</directive>
- <code>Includes</code> $B$+(B <code>IncludesNOEXEC</code>
- $B$,M-8z$K$J$C$F$$$k>l9g$O!"(B
- $B%U%!%$%k$O%5!<%P!<%5%$%I%$%s%/%k!<%I$G=hM}$5$l$^$9(B
- (<module>mod_include</module> $B%I%-%e%a%s%H$r;2>H$7$F2<$5$$(B)$B!#(B</p>
- </note>
-
- <p>$B$b$7(B <directive>HeaderName</directive> $B$G;XDj$5$l$?%U%!%$%k$,(B
- HTML $B%I%-%e%a%s%H$N3+;OItJ,(B (&lt;html&gt;, &lt;head&gt;,
- $BEy(B) $B$r4^$s$G$$$?$i!"(B
- <a href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
- +SuppressHTMLPreamble</code></a>
- $B$r@_Dj$7$F!"$3$l$i$N%?%0$,7+$jJV$5$l$J$$$h$&$K$7$?$$$H;W$&$G$7$g$&!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexIgnore</name>
-<description>$B%G%#%l%/%H%j0lMw$r9T$J$&:]$KL5;k$9$Y$-(B
-$B%U%!%$%k%j%9%H$KDI2C(B</description>
-<syntax>IndexIgnore <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexIgnore</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%G%#%l%/%H%j$N0lMw$r9T$&:]$KL5;k$9$Y$-%U%!%$%k%j%9%H$KDI2C$7$^$9!#(B
- <var>file</var> $B$O!"(B
- $B%7%'%k7A<0$N%o%$%k%I%+!<%II=8=$+40A4$J%U%!%$%kL>$G$9!#(B
- IndexIgnore $B$,J#?t$"$k>l9g$O!"L5;k$9$k%j%9%H$KDI2C$,9T$o$l!"(B
- $BCV49$O9T$o$l$^$;$s!#%G%U%)%k%H$G$O%j%9%H$K$O(B <code>.</code>
- ($B%+%l%s%H%G%#%l%/%H%j(B) $B$,4^$^$l$F$$$^$9!#(B</p>
-
- <example>
- IndexIgnore README .htaccess *.bak *~
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOptions</name>
-<description>$B%G%#%l%/%H%j%$%s%G%C%/%9$NMM!9$J@_Dj9`L\(B
-</description>
-<syntax>IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexOptions</directive>
- $B$O!"%G%#%l%/%H%j%$%s%G%C%/%9$N5sF0$r;XDj$7$^$9!#(B
- <var>option</var> $B$O<!$N$I$l$+$G$9(B:</p>
-
- <dl>
- <dt><a name="indexoptions.descriptionwidth"
- id="indexoptions.descriptionwidth"
- >DescriptionWidth=[<var>n</var> | *]</a>
- (<em>2.0.23 $B0J9_(B</em>)</dt>
-
- <dd><code>DescriptionWidth</code>
- $B%-!<%o!<%I$O@bL@%3%i%`$NI}$rJ8;z?t$G;XDj$9$k$3$H$,$G$-$^$9!#(B</dd>
-
- <dd><code>-DescriptionWidth</code> ($B$^$?$OHs@_Dj(B) $B$G!"(B
- <module>mod_autoindex</module> $B$,:GE,$JI}$r7W;;$9$k$h$&$K$G$-$^$9!#(B</dd>
-
- <dd><code>DescriptionWidth=<var>n</var></code>
- $B$G!"%3%i%`I}$r(B <var>n</var> $B%P%$%H$K8GDj$7$^$9!#(B</dd>
-
- <dd><code>DescriptionWidth=*</code>
- $B$O!":GD9$N@bL@$K9g$o$;$FI,MW$JD9$5$^$G%3%i%`$r1d$P$7$^$9!#(B</dd>
-
- <dd><strong>$B@bL@$r4]$a9~$s$@>l9gFCM-$N4m81$K$D$$$F$O(B
- <directive module="mod_autoindex">AddDescription</directive>
- $B%;%/%7%g%s$r$*FI$_2<$5$$!#(B</strong></dd>
-
- <dt><a name="indexoptions.fancyindexing"
- id="indexoptions.fancyindexing">FancyIndexing</a></dt>
-
- <dd>$B>~$jIU$-%$%s%G%C%/%9$r%*%s$K$7$^$9!#(B</dd>
-
- <dt><a name="indexoptions.foldersfirst"
- id="indexoptions.foldersfirst">FoldersFirst</a>
- (<em>2.0.23 $B0J9_(B</em>)</dt>
-
- <dd>$B$3$N%*%W%7%g%s$,M-8z$K$J$C$?>l9g!"%5%V%G%#%l%/%H%j$N0lMw$O(B
- <em>$BI,$:(B</em>$B:G=i$K8=$o$l$F!"$=$N%G%#%l%/%H%j$NDL>o$N%U%!%$%k$O(B
- $B$=$N8e$KB3$-$^$9!#(B
- $B0lMw$O4pK\E*$K$O!"%U%!%$%k$H%G%#%l%/%H%j$NFs$D$NItJ,$KJ,$1$i$l$F!"(B
- $B$=$l$>$l$OJL!9$K%=!<%H$5$l!"$=$N8e%5%V%G%#%l%/%H%j$r@h$K$7$F(B
- $BI=<($,9T$J$o$l$^$9!#Nc$($P%=!<%H=g$,L>A0$N9_=g$K$J$C$F$$$F!"(B
- <code>FoldersFirst</code> $B$,M-8z$K$J$C$F$$$k>l9g$O!"(B
- $B%5%V%G%#%l%/%H%j(B <code>Zed</code> $B$O%5%V%G%#%l%/%H%j(B
- <code>Beta</code> $B$h$j$bA0$K%j%9%H$5$l!"DL>o$N%U%!%$%k(B
- <code>Gamma</code> $B$d(B <code>Alpha</code>
- $B$h$j$bA0$K%j%9%H$5$l$^$9!#(B<strong>$B$3$N%*%W%7%g%s$O(B
- <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a>
- $B$bM-8z$K$J$C$F$$$k$H$-$K$N$_!"8z2L$,$"$j$^$9!#(B</strong></dd>
-
- <dt><a name="indexoptions.htmltable"
- id="indexoptions.htmltable">HTMLTable</a> <em>($B<B83E*!"(B
- Apache 2.0.23 $B0J9_(B)</em></dt>
-
- <dd>$B$3$N<B83E*$J%*%W%7%g%s$O(B FancyIndexing $B$H$H$b$K;XDj$9$k$3$H$G!"(B
- $B>~$j$NIU$$$?%G%#%l%/%H%j0lMw$N$?$a$K%F!<%V%k$r;H$C$?C1=c$JI=$r:n$j$^$9!#(B
- $B$3$l$O8E$$%V%i%&%6$r:.Mp$5$;$k$+$b$7$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B
- WinNT $B$d$=$NB>(B utf-8
- $B$,M-8z$J%W%i%C%H%[!<%`$N$h$&$K!"%U%!%$%kL>$d@bL@%F%-%9%H$,(B
- $B1&FI$_$K$J$C$?$j:8FI$_$K$J$j$($k>l9g$OFC$KI,MW$G$9!#(B</dd>
-
- <dt><a name="indexoptions.iconsarelinks"
- id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>
-
- <dd>$B$3$l$O!"(BFancyIndexing $B$K$*$$$F!"(B
- $B%"%$%3%s$b%U%!%$%kL>$X$N%j%s%/$N0lIt$K$7$^$9!#(B</dd>
-
- <dt><a name="indexoptions.iconheight"
- id="indexoptions.iconheight">IconHeight[=<var
- >pixels</var>]</a></dt>
-
- <dd>$B$3$N%*%W%7%g%s$,!"(BIconWidth $B$H$H$b$K;H$o$l$F$$$k>l9g$O!"(B
- $B%5!<%P$O%U%!%$%k%"%$%3%s$N$?$a$N(B <code>img</code>
- $B%?%0$K(B <code>height</code> $B$H(B <code>width</code>
- $BB0@-$r<h$j9~$`$h$&$K$J$j$^$9!#(B
- $B$3$l$K$h$C$F!"%$%a!<%8A4$F$r%m!<%I$7=*$o$k$^$GBT$?$J$/$F$b!"(B
- $B%V%i%&%6$O%Z!<%8%l%$%"%&%H$r$"$i$+$8$a7W;;$9$k$3$H$,$G$-$^$9!#(B
- $B$3$N%*%W%7%g%s$K2?$bCM$,M?$($i$l$J$1$l$P!"(BApache
- $B%=%U%H%&%'%"$GDs6!$5$l$F$$$k%"%$%3%s$NI8=`$N9b$5$,(B
- $B%G%U%)%k%H$J$j$^$9!#(B</dd>
-
- <dt><a name="indexoptions.iconwidth"
- id="indexoptions.iconwidth">IconWidth[=<var
- >pixels</var>]</a></dt>
-
- <dd>$B$3$N%*%W%7%g%s$,!"(B<code>IconHeight</code> $B$H$H$b$K;H$o$l$F$$$k>l9g$O!"(B
- $B%5!<%P$O%U%!%$%k%"%$%3%s$N$?$a$N(B <code>img</code>
- $B%?%0$K(B <code>height</code> $B$H(B <code>width</code>
- $BB0@-$r<h$j9~$`$h$&$K$J$j$^$9!#(B
- $B$3$l$K$h$C$F!"%$%a!<%8A4$F$r%m!<%I$7=*$o$k$^$GBT$?$J$/$F$b!"(B
- $B%V%i%&%6$O%Z!<%8%l%$%"%&%H$r$"$i$+$8$a7W;;$9$k$3$H$,$G$-$^$9!#(B
- $B$3$N%*%W%7%g%s$K2?$bCM$,M?$($i$l$J$1$l$P!"(BApache
- $B%=%U%H%&%'%"$GDs6!$5$l$F$$$k%"%$%3%s$NI8=`$N9b$5$,(B
- $B%G%U%)%k%H$J$j$^$9!#(B</dd>
-
- <dt><a name="indexoptions.ignorecase"
- id="indexoptions.ignorecase">IgnoreCase</a></dt>
-
- <dd>$B$3$N%*%W%7%g%s$,M-8z$G$"$k$H!"%U%!%$%kL>$OBgJ8;z>.J8;z$r6hJL$;$:$K%=!<%H$5$l$^$9!#(B
- $BNc$($P%U%!%$%kL>$,>:=g$G%=!<%H$5$l!"(BIgnoreCase $B$,M-8z$G$"$l$P!"(B
- Zeta $B$O(B alfa $B$N8e$K%j%9%H$5$l$^$9(B
- ($BCm0U(B: GAMMA $B$O>o$K(B gamma $B$NA0$K$J$j$^$9(B)$B!#(B</dd>
-
- <dt><a name="indexoptions.ignoreclient"
- id="indexoptions.ignoreclient">IgnoreClient</a></dt>
-
- <dd>$B$3$N%*%W%7%g%s$G(B <module>mod_autoindex</module> $B$O!"(B
- $B%/%i%$%"%s%H$+$i$NA4$F$N%/%(%j!<JQ?t$rL5;k$9$k$h$&$K$J$j$^$9!#(B
- $B$3$l$O%=!<%H=g$b4^$_$^$9!#(B
- ($B$D$^$j(B <code><a href="#indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></code>
- $B$r0E$K0UL#$7$^$9!#(B)</dd>
-
- <dt><a name="indexoptions.namewidth"
- id="indexoptions.namewidth">NameWidth=[<var>n</var>
- | *]</a></dt>
-
- <dd><code>NameWidth</code> $B%-!<%o!<%I$G%U%!%$%kL>%3%i%`$NI}$r%P%$%H?t$G(B
- $B;XDj$G$-$^$9!#(B</dd>
-
- <dd><code>-NameWidth</code> ($B$^$?$OHs@_Dj(B) $B$G!"(B
- <module>mod_autoindex</module> $B$,:GE,$JI}$r7W;;$9$k$h$&$K$G$-$^$9!#(B</dd>
-
- <dd><code>NameWidth=<var>n</var></code>
- $B$G!"%3%i%`I}$r(B <var>n</var> $B%P%$%H$K8GDj$7$^$9!#(B</dd>
-
- <dd><code>NameWidth=*</code>
- $B$O!"I,MW$JD9$5$^$G%3%i%`$r1d$P$7$^$9!#(B</dd>
-
- <dt><a name="indexoptions.scanhtmltitles"
- id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>
-
- <dd>FancyIndexing $B$N$?$a$K!"(B
- HTML $B%I%-%e%a%s%H$+$i%?%$%H%k$r<h$j=P$9$3$H$r2DG=$K$7$^$9!#(B
- $B$b$7%U%!%$%k$K(B
- <directive module="mod_autoindex">AddDescription</directive>
- $B$G@bL@$,M?$($i$l$F$$$J$1$l$P!"(B
- httpd $B$O(B <code>title</code> $B%?%0$NCM$rFI$`$?$a$K%I%-%e%a%s%H$rFI$_;O$a$^$9!#(B
- $B$3$l$O(B CPU $B$d(B disk $B$KIi2Y$r$+$1$^$9!#(B</dd>
-
- <dt><a name="indexoptions.showforbidden"
- id="indexoptions.showforbidden">ShowForbidden</a></dt>
-
- <dd>$B;XDj$7$?>l9g$G$"$C$F$b!"%5%V%j%/%(%9%H$N7k2L$,(B HTTP_UNAUTHORIZED $B$d(B
- HTTP_FORBIDDEN $B$N%U%!%$%k$ODL>oDL$j1#$5$l$?>uBV$N$^$^!"(B
- $B%U%!%$%k0lMw$,@8@.$5$l$^$9!#(B</dd>
-
- <dt><a name="indexoptions.suppresscolumnsorting"
- id="indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></dt>
-
- <dd>$B$b$7;XDj$5$l$F$$$l$P!"(BApache $B$O(B
- FancyIndexing $B$GI=<($5$l$F$$$k%G%#%l%/%H%j0lMw$G$N(B
- $B%3%i%`$N@hF,$r!"%=!<%H$N$?$a$N%j%s%/$K$7$J$/$J$j$^$9!#(B
- $B%G%U%)%k%H$N5sF0$O!"%j%s%/$H$7$^$9!#(B
- $B%3%i%`$N@hF,$rA*$V$H%3%i%`$NCM$K=>$C$F%G%#%l%/%H%j%j%9%H$r(B
- $B%=!<%H$7$^$9!#(B
- <strong>Apache 2.0.23 $B0JA0$G$O!"$3$l$OF1;~$K(B
- $B%=!<%HJ8;zNs$N$?$a$N%/%(%j!<0z?t$N2r@O$bL58z$K$7$^$9!#(B
- </strong>
- $B$3$N5sF0$O(B Apache 2.0.23 $B$G$O(B
- <a href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a> $B$G@)8f$5$l$k$h$&$K$J$C$F$$$^$9!#(B</dd>
-
- <dt><a name="indexoptions.suppressdescription"
- id="indexoptions.suppressdescription"
- >SuppressDescription</a></dt>
-
- <dd>$B$3$l$O(B FancyIndexing $B$K$*$1$k%U%!%$%k$N@bL@$r>C5n$7$^$9!#(B
- $B%G%U%)%k%H$G$O!"@bL@$ODj5A$5$l$F$*$i$:!"(B
- $B$3$N%*%W%7%g%s$r;H$&$HB>$N$?$a$K(B 23
- $BJ8;z$N6uGr$r2T$0$3$H$,$G$-$^$9!#(B $B%U%!%$%k$N@bL@$K4X$9$k>pJs$O!"(B
- <directive module="mod_autoindex">AddDescription</directive>
- $B$r$4Mw2<$5$$!#$^$?!"@bL@$N%3%i%`%5%$%:$r@)8B$9$k(B
- <code><a href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
- $B%$%s%G%C%/%9%*%W%7%g%s$b$4Mw2<$5$$!#(B</dd>
-
- <dt><a name="indexoptions.suppresshtmlpreamble"
- id="indexoptions.suppresshtmlpreamble"
- >SuppressHTMLPreamble</a></dt>
-
- <dd>$BDL>o!"(B
- <directive module="mod_autoindex">HeaderName</directive>
- $B%G%#%l%/%F%#%V$G;XDj$7$?%U%!%$%k$r(B
- $B%G%#%l%/%H%j$,<B:]$K4^$s$G$$$l$P!"I8=`E*$J(B HTML $B%W%j%"%s%V%k(B
- (<code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>, <em>$BEy(B</em>) $B$N8e$K!"(B
- $B%b%8%e!<%k$O%U%!%$%k$NCf?H$r%$%s%/%k!<%I$7$^$9!#(B
- <code>SuppressHTMLPreamble</code> $B%*%W%7%g%s$O!"(B
- $B$3$N5sF0$rL58z$K$G$-$F!"(B
- $B%b%8%e!<%k$,%X%C%@!<%U%!%$%k$NCf?H$+$iI=<($r;O$a$^$9!#(B
- $B$3$N>l9g!"%X%C%@!<%U%!%$%k$O@5$7$$(B HTML
- $BL?Na$r4^$s$G$$$J$1$l$P$J$j$^$;$s!#(B
- $B%X%C%@!<%U%!%$%k$,B8:_$7$J$$>l9g$O!"%W%j%"%s%V%k$ODL>oDL$j(B
- $B@8@.$5$l$^$9!#(B</dd>
-
- <dt><a name="indexoptions.suppressicon"
- id="indexoptions.suppressicon">SuppressIcon</a> (<em>Apache
- 2.0.23 $B0J9_(B</em>)</dt>
-
- <dd>
- $B$3$l$O(B FancyIndexing $B$N0lMw$+$i%"%$%3%s$r>C5n$7$^$9!#(B
- <code>SuppressIcon</code> $B$H(B <code>SuppressRules</code>
- $B$HAH9g$o$;$k$3$H$K$h$C$F@5$7$$(B HTML 3.2 $B$N=PNO$,F@$i$l$^$9!#(B
- $B@5$7$$(B HTML 3.2 $B=PNO$O!":G=*5,3J$K$*$$$F(B <code>img</code> $B$H(B <code>hr</code>
- $B$,(B <code>pre</code> $B%V%m%C%/$KF~$k(B (FancyIndexing $B0lMw$G=q<0$K;H$o$l$F$$$^$9(B)
- $B$3$H$r6X;_$7$F$$$^$9!#(B</dd>
-
- <dt><a name="indexoptions.suppresslastmodified"
- id="indexoptions.suppresslastmodified"
- >SuppressLastModified</a></dt>
-
- <dd>FancyIndexing $B0lMw$K$*$$$F:G=*99?7F|;~$NI=<($r>C5n$7$^$9!#(B</dd>
-
- <dt><a name="indexoptions.suppressrules"
- id="indexoptions.suppressrules">SuppressRules</a>
- (<em>Apache 2.0.23 $B0J9_(B</em>) </dt>
-
- <dd>$B%G%#%l%/%H%j0lMw$K$*$$$F?eJ?6h@Z$j@~(B (<code>hr</code> $B%?%0(B) $B$r>C5n$7$^$9!#(B
- <code>SuppressIcon</code> $B$H(B <code>SuppressRules</code>
- $B$HAH9g$o$;$k$3$H$K$h$C$F@5$7$$(B HTML 3.2 $B$N=PNO$,F@$i$l$^$9!#(B
- $B@5$7$$(B HTML 3.2 $B=PNO$O!":G=*5,3J$K$*$$$F(B <code>img</code> $B$H(B <code>hr</code>
- $B$,(B <code>pre</code> $B%V%m%C%/$KF~$k(B (FancyIndexing $B0lMw$G=q<0$K;H$o$l$F$$$^$9(B)
- $B$3$H$r6X;_$7$F$$$^$9!#(B</dd>
-
- <dt><a name="indexoptions.suppresssize"
- id="indexoptions.suppresssize">SuppressSize</a></dt>
-
- <dd>FancyIndexing $B0lMw$K$*$$$F%U%!%$%k%5%$%:$NI=<($r>C5n$7$^$9!#(B</dd>
-
- <dt><a name="indexoptions.trackmodified"
- id="indexoptions.trackmodified">TrackModified</a>
- (<em>Apache 2.0.23 $B0J9_(B</em>)</dt>
-
- <dd>$B$3$l$O(B HTTP $B%X%C%@Cf$K!"(B
- $B%j%9%H$5$l$?%G%#%l%/%H%j$N:G=*99?7F|$d(B ETag $BCM$r4^$a$^$9!#(B
- $B$3$l$O!"%*%Z%l!<%F%#%s%0%7%9%F%`$d%U%!%$%k%7%9%F%`$,(B
- $BE,@Z$J(B stat() $B$NJV$jCM$rJV$9>l9g$K$N$_M-8z$G$9!#(B
- $B$$$/$D$+$N(B UNIX $B%7%9%F%`!"(BOS2 $B$N(B JFS $B$d(B Win32 $B$N(B NTFS
- $B%\%j%e!<%`$O$=$&$J$C$F$$$^$9!#(B
- $BNc$($P!"(BOS2 $B$H(B Win32 FAT $B%\%j%e!<%`$O$=$&$G$O$"$j$^$;$s!#(B
- $B$3$N5!G=$,M-8z$K$J$k$H!"%/%i%$%"%s%H$d%W%m%-%7$O(B
- <code>HEAD</code> $B%j%/%(%9%H$r9T$&$3$H$K$h$C$F!"(B
- $B%U%!%$%k0lMw$NJQ2=$rDI@W$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
- $B$$$/$D$+$N%*%Z%l!<%F%#%s%0%7%9%F%`$O!"?75,%U%!%$%k$d(B
- $B0\F0%U%!%$%k$O@5$7$/DI@W$9$k$1$l$I$b!"(B
- $B%G%#%l%/%H%jCf$N%U%!%$%k$N%5%$%:$dF|IU$ODI@W$J$$$H$$$&$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#(B
- <strong>$B4{$KB8:_$9$k%U%!%$%k$N%5%$%:$dF|IU$N%9%?%s%W$,JQ2=$7$F$b!"(B
- $BA4$F$N(B Unix $B%W%i%C%H%[!<%`$G$O!"(B
- $B:G=*99?7F|%X%C%@!<$r99?7$7$^$;$s!#(B</strong>
- $B$b$7$3$l$,=EMW$G$"$l$P!"(B
- $B$3$N%*%W%7%g%s$rL58z$N$^$^$K$7$F$/$@$5$$!#(B</dd>
-
- <dt><a name="indexoptions.versionsort"
- id="indexoptions.versionsort">VersionSort</a>
- (<em>Apache 2.0a3 $B0J9_(B</em>)</dt>
-
- <dd><code>VersionSort</code> $B%-!<%o!<%I$O%P!<%8%g%sHV9f$r4^$s$@%U%!%$%k$,(B
- $B<+A3$JJ}K!$G%=!<%H$5$l$k$h$&$K$7$^$9!#(B
- $BJ8;zNs$ODL>oDL$j%=!<%H$5$l!"(B
- $B$=$l0J30$N!"@bL@$dL>A0Cf$N?t$H$J$kItJ,J8;zNs$O(B
- $B$=$N?tCM$GHf3S$5$l$^$9!#(B
-
- <example><title>$BNc(B:</title>
- foo-1.7<br />
- foo-1.7.2<br />
- foo-1.7.12<br />
- foo-1.8.2<br />
- foo-1.8.2a<br />
- foo-1.12
- </example>
-
- <p>$BHV9f$,(B 0 $B$+$i;O$^$k>l9g$O!"C<?t$H9M$($i$l$^$9(B</p>
-
- <example>
- foo-1.001<br />
- foo-1.002<br />
- foo-1.030<br />
- foo-1.04
- </example>
- </dd>
-
- <dt><a name="indexoptions.xhtml"
- id="indexoptions.xhtml">XHTML</a>
- (<em>Apache 2.0.49 $B0J9_(B</em>)</dt>
-
- <dd><code>XHTML</code> $B%-!<%o!<%I$r;XDj$9$k$H!"(B<module>mod_autoindex</module>
- $B$O(B HTML 3.2 $B$NBe$o$j$K(B XHTML 1.0 $B$N%3!<%I$r=PNO$9$k$h$&$K$J$j$^$9!#(B</dd>
- </dl>
-
- <!--
- XXX: we should consider to allow sections inside <usage>
- this would require some xslt changes...
- -->
- <dl><dt>$BA}8:;XDj$G$-$k(B IndexOptions</dt>
- <dd>
- <p>Apache 1.3.3 $B$G$O!"(B
- <directive>IndexOptions</directive>
- $B%G%#%l%/%F%#%V$N07$$$G4v$D$+$NBg$-$JJQ2=$,F3F~$5$l$^$7$?!#(B
- $BFC$K!"(B</p>
-
- <ul>
- <li>$B0l$D$N%G%#%l%/%H%j$KBP$9$kJ#?t$N(B
- <directive>IndexOptions</directive>
- $B%G%#%l%/%F%#%V$O!"8=:_$G$O0l$D$K%^!<%8$5$l$^$9!#(B
- $B>e$NNc$N7k2L$O!"(B
-
- <example>
- &lt;Directory /foo&gt;
- <indent>
- IndexOptions HTMLTable<br />
- IndexOptions SuppressColumnsorting
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$B$HF10l$K$J$j$^$9!#(B</p>
-
- <example>
- IndexOptions HTMLTable SuppressColumnsorting
- </example>
- </li>
-
- <li>$BA}8:9=J8(B
- (<em>$B$9$J$o$A(B</em>$B!"(B'+' $B$d(B '-'
- $B$N@\F,<-$,IU$/%-!<%o!<%I(B) $B$NDI2C!#(B</li>
- </ul>
-
- <p>'+' $B$d(B '-' $B@\F,<-$NIU$$$?%-!<%o!<%I$K=P2q$&$H$=$l$O!"(B
- $B$=$N;~E@$G$N(B <directive>IndexOptions</directive>
- $B$N@_Dj(B ($B$3$l$O>eN.$N%G%#%l%/%H%j$r<u$17Q$.$^$9(B)
- $B$KBP$7$FE,1~$5$l$^$9!#(B
- $B$7$+$7$J$,$i!"@\F,<-$NIU$+$J$$%-!<%o!<%I$,=hM}$5$l$?>l9g$O!"(B
- $B<u$17Q$$$@%*%W%7%g%sA4$F$H$=$l$^$G=P2q$C$?A}8:@_DjA4$F$,(B
- $B>C5n$5$l$^$9!#<!$NNc$r9M$($F$_$F$/$@$5$$(B:</p>
-
- <example>
- IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing<br />
- IndexOptions +SuppressSize
- </example>
-
- <p>$BCf?H$N8z2L$O(B
- <code>IndexOptions&nbsp;FancyIndexing&nbsp;+SuppressSize</code>
- $B$HF10l$G$9!#(B
- $B@\F,<-$NIU$+$J$$(B <code>FancyIndexing</code>
- $B$G$=$l0JA0$NA}8:%-!<%o!<%I$rL58z$K$5$l$F!"(B
- $B$=$N8e$NN_@Q$,;O$^$k$+$i$G$9!#(B</p>
-
- <p>$BL5>r7o$K(B <directive>IndexOptions</directive>
- $B$r$"$k%G%#%l%/%H%j$G@_Dj$9$k$3$H$K$h$C$F(B
- $B7Q>5$7$?@_Dj$r>C5n$7$F!"(B<code>+</code> $B$d(B <code>-</code>
- $B@\F,<-$NIU$+$J$$%-!<%o!<%I$G@_Dj$7$F$/$@$5$$!#(B</p>
- </dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOrderDefault</name>
-<description>
-$B%G%#%l%/%H%j%$%s%G%C%/%9$NI8=`$N=gHVIU$1$r@_Dj(B</description>
-<syntax>IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</syntax>
-<default>IndexOrderDefault Ascending Name</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexOrderDefault</directive> $B%G%#%l%/%F%#%V$O(B
- <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- $B%$%s%G%C%/%9%*%W%7%g%s$HJ;$;$FMQ$$$l$l$^$9!#(B
- $B%G%U%)%k%H$G$O!"(BFancyIndexing
- $B$N%G%#%l%/%H%j0lMw$O%U%!%$%kL>$N>:=g$GI=<($5$l$^$9!#(B
- <directive>IndexOrderDefault</directive>
- $B$G!"=i4|>uBV$NI=<(=gHV$rJQ$($k$3$H$,$G$-$^$9!#(B</p>
-
- <p><directive>IndexOrderDefault</directive>
- $B$OFs$D$N0z?t$r$H$j$^$9!#0l$DL\$O%=!<%H$NJ}8~$r;X<($9$k(B
- <code>Ascending</code> $B$+(B <code>Descending</code> $B$N$$$:$l$+$G$9!#(B
- $BFs$DL\$N0z?t$O(B <code>Name</code>, <code>Date</code>,
- <code>Size</code> $B$+(B <code>Description</code>
- $B$N$$$:$l$+0l$D$N%-!<%o!<%I$G$"$C$F!"%W%i%$%^%j%-!<$r;XDj$7$^$9!#(B
- $BFs$DL\$N%-!<$O(B<em>$B>o$K(B</em>$B%U%!%$%kL>$N>:=g$K$J$j$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$H(B <code><a
- href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>
- $B%$%s%G%C%/%9%*%W%7%g%s$H$rAH$_9g$o$;$k$3$H$G!"(B
- $B%G%#%l%/%H%j0lMw$r$"$kFCDj$N=gHV$G$N$_I=<($9$k$h$&$K$G$-$^$9!#(B
- $B$3$l$O!"(B
- $B%/%i%$%"%s%H$,JL$N=gHV$G%G%#%l%/%H%j0lMw$r%j%/%(%9%H$9$k$3$H$rKI$.$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexStyleSheet</name>
-<description>$B%G%#%l%/%H%j%$%s%G%C%/%9$K(B CSS $B%9%?%$%k%7!<%H$rDI2C$9$k(B</description>
-<syntax>IndexStyleSheet <var>url-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexStyleSheet</directive> $B%G%#%l%/%F%#%V$O(B
- $B%$%s%G%C%/%9I=<($K;HMQ$5$l$k(B CSS $B$N%U%!%$%kL>$r@_Dj$7$^$9!#(B
- </p>
- <example>
- <title>$BNc(B</title>
- IndexStyleSheet "/css/style.css"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ReadmeName</name>
-<description>$B%$%s%G%C%/%90lMw$N:G8e$KA^F~$5$l$k%U%!%$%k$NL>A0(B</description>
-<syntax>ReadmeName <var>filename</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>ReadmeName</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%$%s%G%C%/%9$N=*$o$j$KIU$12C$($i$l$k%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B
- <var>filename</var> $B$OA^F~$9$k%U%!%$%k$NL>A0$G!"(B
- $B0lMw$N9T$o$l$F$$$k0LCV$+$iAjBPE*$J$b$N$H$7$F2r<a$5$l$^$9!#(B
- <var>filename</var> $B$,%9%i%C%7%e$G;O$^$k>l9g$O!"(B
- <directive module="core">DocumentRoot</directive>
- $B$+$i$NAjBP%Q%9$H$J$j$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ReadmeName FOOTER.html
- </example>
-
- <example><title>$BNc(B 2</title>
- ReadmeName /include/FOOTER.html
- </example>
-
- <p>$B$h$j>\:Y$K$^$G$3$N5sF0$K$D$$$F5-=R$7$F$$$k(B <directive
- module="mod_autoindex">HeaderName</directive>
- $B$b$4Mw2<$5$$!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_autoindex.xml.ko b/docs/manual/mod/mod_autoindex.xml.ko
deleted file mode 100644
index 63c7478c4a..0000000000
--- a/docs/manual/mod/mod_autoindex.xml.ko
+++ /dev/null
@@ -1,883 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.24 (outdated: 1.25) -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_autoindex.xml.meta">
-<name>mod_autoindex</name>
-
-<description>ÀÚµ¿À¸·Î À¯´Ð½ºÀÇ <code>ls</code> ¸í·É¾î³ª Win32ÀÇ
- <code>dir</code> ½©¸í·É¾î¿Í À¯»çÇÑ µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù</description>
-<status>Base</status>
-<sourcefile>mod_autoindex.c</sourcefile>
-<identifier>autoindex_module</identifier>
-
-<summary>
- <p>µð·ºÅ丮 ¸ñ·ÏÀº ¾ò´Â ¹æ¹ýÀº µÎ°¡Áö´Ù:</p>
-
- <ul>
- <li>º¸Åë <code>index.html</code>À̶õ À̸§À¸·Î »ç¿ëÀÚ°¡
- ÀÛ¼ºÇÑ ÆÄÀÏ. ÀÌ ÆÄÀÏÀÇ À̸§Àº <directive
- module="mod_dir">DirectoryIndex</directive> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ´Ù. ÀÌ ÀÛ¾÷Àº <module>mod_dir</module>ÀÌ ÇÑ´Ù.</li>
-
- <li>¾Æ´Ï¸é ¼­¹ö°¡ ¸ñ·ÏÀ» ¸¸µç´Ù. ÀÌ ¸ñ·ÏÀÇ Çü½ÄÀ» ÁöÁ¤ÇÏ´Â
- Áö½Ã¾îµéÀÌ ÀÖ´Ù. <directive
- module="mod_autoindex">AddIcon</directive>, <directive
- module="mod_autoindex">AddIconByEncoding</directive>,
- <directive module="mod_autoindex">AddIconByType</directive>˼
- ¿©·¯ ÆÄÀÏÁ¾·ù¸¶´Ù º¸¿©ÁÙ ¾ÆÀÌÄܵéÀ» ÁöÁ¤ÇÑ´Ù. °¢ ÆÄÀÏ¿¡
- ´ëÀÀÇϴ ù¹ø° ¾ÆÀÌÄÜÀ» º¸ÀδÙ. ÀÌ ÀÛ¾÷À»
- <module>mod_autoindex</module>°¡ ÇÑ´Ù.</li>
- </ul>
- <p>ÀÌ µÎ ±â´ÉÀº ¼­·Î º°°³·Î, ¿øÇÑ´Ù¸é ÀÚµ¿ ¸ñ·Ï »ý¼ºÀ» ¿ÏÀüÈ÷
- Á¦¿ÜÇÒ (ȤÀº ´ëüÇÒ) ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÚµ¿ ¸ñ·Ï »ý¼ºÀº <code>Options +Indexes</code>·Î °¡´ÉÇÏ´Ù.
- ÀÚ¼¼ÇÑ ³»¿ëÀº <directive module="core">Options</directive>
- Áö½Ã¾î¸¦ Âü°íÇ϶ó.</p>
-
- <p><directive module="mod_autoindex">IndexOptions</directive>
- Áö½Ã¾î¿¡ <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code> ¿É¼ÇÀ» ÁÖ¸é, ¿­ À̸§À» Ãâ·ÂÇÒ
- ¼ø¼­¸¦ ¹Ù²Ù´Â ¸µÅ©·Î ¸¸µç´Ù. À̸§ ¸µÅ©¸¦ ¼±ÅÃÇÏ¸é ±× ¿­ÀÇ
- °ª ¼ø¼­·Î ¸ñ·ÏÀ» ´Ù½Ã ¸¸µç´Ù. °°Àº À̸§À» ¹Ýº¹Çؼ­ ¼±ÅÃÇϸé
- ¿À¸§Â÷¼ø°ú ³»¸²Â÷¼ø »çÀ̸¦ ¿À°£´Ù. <directive
- module="mod_autoindex">IndexOptions</directive> Áö½Ã¾îÀÇ
- <code>SuppressColumnSorting</code> ¿É¼ÇÀº ÀÌ·± ¿­ À̸§ ¸µÅ©¸¦
- ¸¸µéÁö ¾Ê´Â´Ù.</p>
-
- <p>"Size(Å©±â)" ¼øÀ¸·Î º¼¶§ Ãâ·ÂµÇ´Â °ª ¼ø¼­°¡ ¾Æ´Ï¶ó <em>½ÇÁ¦</em>
- ÆÄÀÏÅ©±â ¼ø¼­ÀÓÀ» ÁÖÀÇÇ϶ó. Áï, 1010 ¹ÙÀÌÆ® ÆÄÀÏ°ú 1011
- ¹ÙÀÌÆ® ÆÄÀÏÀº µÑ´Ù "1K"·Î º¸ÀÌ´õ¶óµµ Ç×»ó 1010 ¹ÙÀÌÆ® ÆÄÀÏÀÌ
- ¾Õ¿¡ ³ª¿Â´Ù.</p>
-</summary>
-
-<section id="query">
- <title>Autoindex ¿äû ¾Æ±Ô¸ÕÆ®</title>
-
- <p>¾ÆÆÄÄ¡ 2.0.23´Â ¿­¼ø¼­¿¡ ´ëÇÑ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ Á¤¸®ÇÏ°í,
- »õ·Î¿î ¿É¼ÇµéÀ» Ãß°¡Çß´Ù. Ãâ·ÂÀ» Ŭ¶óÀ̾ðÆ®°¡ Á¶ÀýÇÒ ¼ö
- ¾øµµ·Ï ¸¸µå´Â <code><a
- href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a></code> ¿É¼ÇÀÌ Ãß°¡µÇ¾ú´Ù.</p>
-
- <p>¿­¼ø¼­ À̸§Àº ¾Æ·¡ ³ª¿Â ¼ø¼­ ¿äû ¿É¼ÇÀ» ´õÇÑ ÀÚ±âÂüÁ¶
- ¸µÅ©´Ù. ¾Æ·¡ ¿É¼ÇÀº µð·ºÅ丮 ÀÚ¿ø¿¡ ´ëÇÑ ¾î¶² ¿äû¿¡µµ
- »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <ul>
- <li><code>C=N</code>Àº ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li><code>C=M</code>Àº ÃÖ±Ù ¼öÁ¤ÀÏ ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li><code>C=S</code>´Â Å©±â ¼ø, ±×¸®°í ÆÄÀÏ¸í ¼øÀÌ´Ù</li>
-
- <li class="separate"><code>C=D</code>´Â ¼³¸í ¼ø, ±×¸®°í ÆÄÀϸí
- ¼øÀÌ´Ù</li>
-
- <li><code>O=A</code>´Â ¿À¸§Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
-
- <li class="separate"><code>O=D</code>´Â ³»¸²Â÷¼øÀ¸·Î ¸ñ·ÏÀ» Á¤·ÄÇÑ´Ù</li>
-
- <li><code>F=0</code>Àº (FancyIndexed°¡ ¾Æ´Ñ) °£´ÜÇÑ ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
-
- <li><code>F=1</code>Àº FancyIndexed ¸ñ·Ï Çü½ÄÀÌ´Ù</li>
-
- <li class="separate"><code>F=2</code>´Â HTMLTable FancyIndexed ¸ñ·Ï
- Çü½ÄÀÌ´Ù</li>
-
- <li><code>V=0</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÏÁö ¾Ê´Â´Ù</li>
-
- <li class="separate"><code>V=1</code>Àº ¹öÀü ¼øÀ¸·Î Á¤·ÄÇÑ´Ù</li>
-
- <li><code>P=<var>pattern</var></code>Àº ÁÖ¾îÁø <var>pattern</var>¿¡
- ÇØ´çÇÏ´Â ÆÄÀϸ¸À» ¸ñ·ÏÀ¸·Î ¸¸µç´Ù</li>
- </ul>
-
- <p>'P'attern ¾Æ±Ô¸ÕÆ®´Â ÀϹÝÀûÀÎ <directive module="mod_autoindex"
- >IndexIgnore</directive> Áö½Ã¾î¸¦ ó¸®ÇÑ <em>ÈÄ¿¡</em>
- °Ë»çÇϱ⶧¹®¿¡, ¸ñ·ÏÀº ´Ù¸¥ autoindex Á¶°ÇÀ» µû¸§À» ÁÖÀÇÇ϶ó.
- <module>mod_autoindex</module>ÀÇ ¿äû ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀ϶§
- ¾Ë ¼ö ¾ø´Â ¿É¼ÇÀ» ¹ß°ßÇÏ¸é ´õ ÀÌ»ó ÀÐÁö¾Ê´Â´Ù. ¿äû ¾Æ±Ô¸ÕÆ®´Â
- À§ÀÇ Ç¥¿¡ µû¶ó ¸¸µé¾î¾ß ÇÑ´Ù.</p>
-
- <p>header.html ÆÄÀÏ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Æ·¡ °£´ÜÇÑ ¿¹Á¦´Â
- ÀÌ ¿É¼ÇµéÀ» ¼³¸íÇÑ´Ù. submit ¹öÅÏÀÇ ¾Ë ¼ö ¾ø´Â "X" ¾Æ±Ô¸ÕÆ®´Â
- mod_autoindex°¡ X=Go Àü±îÁö ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ÀоîµéÀÓÀ»
- È®ÀÎÇϱâÀ§ÇØ ¸¶Áö¸·¿¡ »ç¿ëÇß´Ù.</p>
-
- <example>
- &lt;form action="" method="get"&gt;<br />
- <indent>
- Show me a &lt;select name="F"&gt;<br />
- <indent>
- &lt;option value="0"&gt; Plain list&lt;/option&gt;<br />
- &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;<br />
- &lt;option value="2"&gt; Table list&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- Sorted by &lt;select name="C"&gt;<br />
- <indent>
- &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;<br />
- &lt;option value="M"&gt; Date Modified&lt;/option&gt;<br />
- &lt;option value="S"&gt; Size&lt;/option&gt;<br />
- &lt;option value="D"&gt; Description&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- &lt;select name="O"&gt;<br />
- <indent>
- &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;<br />
- &lt;option value="D"&gt; Descending&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- &lt;select name="V"&gt;<br />
- <indent>
- &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;<br />
- &lt;option value="1"&gt; in Version order&lt;/option&gt;<br />
- </indent>
- &lt;/select&gt;<br />
- Matching &lt;input type="text" name="P" value="*" /&gt;<br />
- &lt;input type="submit" name="X" value="Go" /&gt;<br />
- </indent>
- &lt;/form&gt;
- </example>
-
-</section>
-
-<directivesynopsis>
-<name>AddAlt</name>
-<description>ÆÄÀϸíÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ ¼³¸í±Û</description>
-<syntax>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAlt</directive>´Â <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ¿¡ ´ëÇÑ ¾ÆÀÌÄÜ´ë½Å º¸ÀÏ ±ÛÀ» ÁöÁ¤ÇÑ´Ù. <var>File</var>¿¡´Â
- ¼³¸íÇÒ ÆÄÀÏÀÇ ÆÄÀÏ È®ÀåÀÚ, ÆÄÀϸí ÀϺÎ, ¿ÍÀϵåÄ«µå Ç¥Çö,
- Àüü ÆÄÀϸíÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <var>String</var>¿¡ °ø¹éÀÌ
- µé¾î°£´Ù¸é µû¿ÈÇ¥(<code>"</code> ȤÀº <code>'</code>)·Î
- ¹­¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ À̹ÌÁö¸¦ º¼ ¼ö ¾ø°Å³ª, À̹ÌÁö¸¦
- ÀÐÁö¾Ê°Å³ª, ¾ÆÀÌÄÜÀ» ¸ø ¾òÀº °æ¿ì ÀÌ Ãß°¡ ±ÛÀÌ º¸ÀÌ°Ô µÈ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddAlt "PDF file" *.pdf<br />
- AddAlt Compressed *.gz *.zip *.Z
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByEncoding</name>
-<description>MIME-encodingÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ
-¼³¸í±Û</description>
-<syntax>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAltByEncoding</directive>˼ <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ¿¡ ´ëÇÑ ¾ÆÀÌÄÜ´ë½Å º¸ÀÏ ±ÛÀ» ÁöÁ¤ÇÑ´Ù. <var>MIME-encoding</var>Àº
- <code>x-compress</code>¿Í °°Àº À¯È¿ÇÑ content-encodingÀÌ´Ù.
- <var>String</var>¿¡ °ø¹éÀÌ µé¾î°£´Ù¸é µû¿ÈÇ¥(<code>"</code>
- ȤÀº <code>'</code>)·Î ¹­¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ À̹ÌÁö¸¦
- º¼ ¼ö ¾ø°Å³ª, À̹ÌÁö¸¦ ÀÐÁö¾Ê°Å³ª, ¾ÆÀÌÄÜÀ» ¸ø ¾òÀº °æ¿ì
- ÀÌ Ãß°¡ ±ÛÀÌ º¸ÀÌ°Ô µÈ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddAltByEncoding gzip x-gzip
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByType</name>
-<description>MIME content-typeÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ
-¼³¸í±Û</description>
-<syntax>AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>AddAltByType</directive>˼ <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ¿¡ ´ëÇÑ ¾ÆÀÌÄÜ´ë½Å º¸ÀÏ ±ÛÀ» ÁöÁ¤ÇÑ´Ù. <var>MIME-type</var>Àº
- <code>text/html</code>°ú °°Àº À¯È¿ÇÑ content-typeÀÌ´Ù.
- <var>String</var>¿¡ °ø¹éÀÌ µé¾î°£´Ù¸é µû¿ÈÇ¥(<code>"</code>
- ȤÀº <code>'</code>)·Î ¹­¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ À̹ÌÁö¸¦
- º¼ ¼ö ¾ø°Å³ª, À̹ÌÁö¸¦ ÀÐÁö¾Ê°Å³ª, ¾ÆÀÌÄÜÀ» ¸ø ¾òÀº °æ¿ì
- ÀÌ Ãß°¡ ±ÛÀÌ º¸ÀÌ°Ô µÈ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddAltByType 'plain text' text/plain
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDescription</name>
-<description>ÆÄÀÏ¿¡ ´ëÇÑ ¼³¸í</description>
-<syntax>AddDescription <var>string file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code>¿¡¼­ ÆÄÀÏ¿¡ ´ëÇÑ ¼³¸íÀ» ÁöÁ¤ÇÑ´Ù.
- <var>File</var>¿¡´Â ¼³¸íÇÒ ÆÄÀÏÀÇ ÆÄÀÏ È®ÀåÀÚ, ÆÄÀϸí ÀϺÎ,
- ¿ÍÀϵåÄ«µå Ç¥Çö, Àüü ÆÄÀϸíÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <var>String</var>Àº
- µû¿ÈÇ¥(<code>"</code>)·Î ¹­¾î¾ß ÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddDescription "The planet Mars" /web/pics/mars.gif
- </example>
-
- <p>ÀüÇüÀûÀÎ ±âº» ¼³¸í ÇʵåÆøÀº 23 ¹ÙÀÌÆ®´Ù. <code><a
- href="#indexoptions.suppressicon">IndexOptions
- SuppressIcon</a></code> ¿É¼ÇÀ» »ç¿ëÇÏ¸é ±âº»Æø¿¡ 6 ¹ÙÀÌÆ®¸¦
- ´õ Ãß°¡ÇÏ°í, <code><a href="#indexoptions.suppresssize"
- >IndexOptions SuppressSize</a></code> ¿É¼ÇÀº 7 ¹ÙÀÌÆ®¸¦,
- <code><a href="#indexoptions.suppresslastmodified"
- >IndexOptions SuppressLastModified</a></code> ¿É¼ÇÀº 19
- ¹ÙÀÌÆ®¸¦ ´õ Ãß°¡ÇÑ´Ù. ±×·¯¹Ç·Î °¡Àå ³ÐÀº ¼³¸íÆøÀº 55 ¹ÙÀÌÆ®´Ù.</p>
-
- <p>ÀÌ ÇʵåÀÇ Æø¸¦ ¹Ù²Ù°Å³ª ¼³¸íÀÇ ±æÀ̸¦ ¹«ÇÑ´ë·Î ¸¸µå·Á¸é
- <a href="#indexoptions.descriptionwidth"
- >DescriptionWidth</a> <directive module="mod_autoindex"
- >IndexOptions</directive> Å°¿öµå¸¦ Âü°íÇ϶ó.</p>
-
- <note><title>Á¶½É</title>
- <p><directive>AddDescription</directive>À¸·Î ÁöÁ¤ÇÑ ¼³¸í±Û¿¡
- ű׳ª character entity<transnote>&amp;lt;, &amp;amp; µîÀ»
- ÁöĪ</transnote>°°Àº HTMLÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Æø¶§¹®¿¡
- űװ¡ ÀÖ´Â ºÎºÐÀÌ Â©¸®°ÔµÇ¸é (¿¹¸¦ µé¾î ±½ÀºÃ¼ ºÎºÐ ³¡ÀÌ
- ©¸®¸é) ³ª¸ÓÁö µð·ºÅ丮 ¸ñ·Ï¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIcon</name>
-<description>À̸§À¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</description>
-<syntax>AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <code><a href="#indexoptions.fancyindexing"
- >FancyIndexing</a></code>¿¡¼­ <var>name</var>À¸·Î ³¡³ª´Â
- ÆÄÀÏ ¿·¿¡ º¸¿©ÁÙ ¾ÆÀÌÄÜÀ» ÁöÁ¤ÇÑ´Ù. <var>Icon</var>Àº
- ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URL ȤÀº
- <code>(<var>alttext</var>,<var>url</var>)</code> Çü½ÄÀÌ´Ù.
- ¿©±â¼­ <var>alttext</var>´Â ±×¸²À» º¸¿©ÁÙ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡
- ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ¹®±¸ÀÌ´Ù.</p>
-
- <p><var>Name</var>¿¡´Â µð·ºÅ丮¸¦ ³ªÅ¸³»´Â <code>^^DIRECTORY^^</code>,
- (¸ñ·Ï Çü½ÄÀ» ¿Ã¹Ù·Î ¸ÂÃß±âÀ§ÇØ) ºóÁÙÀ» ³ªÅ¸³»´Â
- <code>^^BLANKICON^^</code>, ÆÄÀÏ È®ÀåÀÚ, ¿ÍÀϵåÄ«µå Ç¥Çö,
- ÆÄÀϸí ÀϺΠȤÀº Àüü¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
- AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
- AddIcon /icons/backup.xbm *~
- </example>
-
- <p>°¡´ÉÇϸé <directive>AddIcon</directive>º¸´Ù´Â <directive
- module="mod_autoindex">AddIconByType</directive>À» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByEncoding</name>
-<description>MIME content-encodingÀ¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</description>
-<syntax>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ÆÄÀÏ ¿·¿¡ º¸¿©ÁÙ ¾ÆÀÌÄÜÀ» ÁöÁ¤ÇÑ´Ù. <var>Icon</var>Àº
- ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URL ȤÀº
- <code>(<var>alttext</var>,<var>url</var>)</code> Çü½ÄÀÌ´Ù.
- ¿©±â¼­ <var>alttext</var>´Â ±×¸²À» º¸¿©ÁÙ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡
- ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ¹®±¸ÀÌ´Ù.</p>
-
- <p><var>MIME-encoding</var>´Â content-encoding¿¡ ÇØ´çÇÏ´Â
- ¿ÍÀϵåÄ«µå Ç¥ÇöÀÌ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddIconByEncoding /icons/compress.xbm x-compress
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByType</name>
-<description>MIME content-typeÀ¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</description>
-<syntax>AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- <var>MIME-type</var>ÀÇ ÆÄÀÏ ¿·¿¡ º¸¿©ÁÙ ¾ÆÀÌÄÜÀ» ÁöÁ¤ÇÑ´Ù.
- <var>Icon</var>Àº ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URL ȤÀº
- <code>(<var>alttext</var>,<var>url</var>)</code> Çü½ÄÀÌ´Ù.
- ¿©±â¼­ <var>alttext</var>´Â ±×¸²À» º¸¿©ÁÙ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡
- ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ¹®±¸ÀÌ´Ù.</p>
-
- <p><var>MIME-type</var>Àº mime type¿¡ ÇØ´çÇÏ´Â ¿ÍÀϵåÄ«µå
- Ç¥ÇöÀÌ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- AddIconByType (IMG,/icons/image.xbm) image/*
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultIcon</name>
-<description>ƯÁ¤ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÏÁö¾ÊÀº ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</description>
-<syntax>DefaultIcon <var>url-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>DefaultIcon</directive> Áö½Ã¾î´Â <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>¿¡¼­
- ƯÁ¤ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÏÁö¾ÊÀº ÆÄÀÏ ¿·¿¡ ³ª¿Ã ¾ÆÀÌÄÜÀÌ´Ù.
- <var>Icon</var>Àº ¾ÆÀÌÄÜÀÇ (%-escaped) »ó´ë URLÀÌ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- DefaultIcon /icon/unknown.xbm
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HeaderName</name>
-<description>ÆÄÀϸñ·Ï À§¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</description>
-<syntax>HeaderName <var>filename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>HeaderName</directive> Áö½Ã¾î´Â ÆÄÀϸñ·Ï ¾Õ¿¡
- »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÑ´Ù. <var>Filename</var>Àº »ðÀÔÇÒ
- ÆÄÀϸíÀÌ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- HeaderName HEADER.html
- </example>
-
- <note>
- <p>ÇöÀç HeaderName°ú <directive
- module="mod_autoindex">ReadmeName</directive> µÑ ¸ðµÎ
- <var>Filename</var>À» Á¢±ÙÇÏ·Á´Â µð·ºÅ丮ÀÇ »ó´ë URI °æ·Î·Î
- ¹Þ¾ÆµéÀδÙ. <var>Filename</var>ÀÌ ½½·¡½¬·Î ½ÃÀÛÇϸé <directive
- module="core">DocumentRoot</directive>¿¡ »ó´ëÀûÀÎ °æ·Î·Î
- ¹Þ¾ÆµéÀδÙ.</p>
-
- <example><title>¿¹Á¦</title>
- HeaderName /include/HEADER.html
- </example>
-
- <p><var>Filename</var>¿¡´Â major content typeÀÌ <code>text/*</code>ÀÎ
- (<em>¿¹¸¦ µé¾î</em>, <code>text/html</code>, <code>text/plain</code>,
- µî) ¹®¼­¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. Áï, ½ºÅ©¸³Æ®ÀÇ (Ãâ·ÂÀÌ ¾Æ´Ñ) ½ÇÁ¦ ÆÄÀÏ
- typeÀ» ´ÙÀ½°ú °°ÀÌ <code>text/html</code>·Î ÁöÁ¤ÇÑ´Ù¸é
- <var>filename</var>À¸·Î CGI ½ºÅ©¸³Æ®¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù:</p>
-
- <example>
- AddType text/html .cgi
- </example>
-
- <p><directive module="core">Options</directive>
- <code>MultiViews</code>À» »ç¿ëÇϸé <a
- href="../content-negotiation.html">³»¿ëÇù»ó</a>À» ÇÑ´Ù.
- <var>filename</var>ÀÌ (CGI ½ºÅ©¸³Æ®°¡ ¾Æ´Ñ) °íÁ¤µÈ
- <code>text/html</code> ¹®¼­ÀÌ°í <directive
- module="core">options</directive> <code>Includes</code>³ª
- <code>IncludesNOEXEC</code> Áß Çϳª¸¦ »ç¿ëÇÑ´Ù¸é ÆÄÀÏÀ»
- server-side includes·Î ó¸®ÇÑ´Ù. (<module>mod_include</module>
- ¹®¼­ Âü°í)</p>
- </note>
-
- <p><directive>HeaderName</directive>À¸·Î ÁöÁ¤ÇÑ ÆÄÀÏ¿¡
- (&lt;html&gt;, &lt;head&gt;, µî) HTML ¹®¼­ ½ÃÀۺκÐÀÌ Æ÷ÇÔµÇÀÖ´Ù¸é
- <a href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
- +SuppressHTMLPreamble</code></a>À» »ç¿ëÇÏ¿© ÀÌ ºÎºÐÀ» Ãß°¡ÇÏÁö¾Ê´Â
- °ÍÀÌ ÁÁ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexIgnore</name>
-<description>µð·ºÅ丮 ¸ñ·Ï¿¡¼­ ¼û±æ ÆÄÀϸñ·ÏÀ» Ãß°¡ÇÑ´Ù</description>
-<syntax>IndexIgnore <var>file</var> [<var>file</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexIgnore</directive> Áö½Ã¾î´Â µð·ºÅ丮
- ¸ñ·Ï¿¡¼­ °¨Ãâ ÆÄÀϸñ·ÏÀ» Ãß°¡ÇÑ´Ù. <var>File</var>¿¡´Â °¨Ãâ
- (½©¿¡¼­ »ç¿ëÇÏ´Â) È­ÀϵåÄ«µå Ç¥ÇöÀ̳ª Àüü ÆÄÀϸíÀ»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿©·¯ IndexIgnore Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ±âÁ¸ÀÇ
- °¨Ãâ ÆÄÀϸñ·ÏÀ» ´ëüÇÏÁö¾Ê°í ¸ñ·Ï¿¡ ÁöÁ¤ÇÑ ÆÄÀϵéÀ» Ãß°¡ÇÑ´Ù.
- ±âº»ÀûÀ¸·Î ¸ñ·ÏÀº <code>.</code>À» (ÇöÀç µð·ºÅ丮) Æ÷ÇÔÇÑ´Ù.</p>
-
- <example>
- IndexIgnore README .htaccess *.bak *~
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOptions</name>
-<description>µð·ºÅ丮 ¸ñ·ÏÀÇ ¿©·¯ ¼³Á¤µé</description>
-<syntax>IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexOptions</directive> Áö½Ã¾î´Â µð·ºÅ丮
- ¸ñ·ÏÀ» ¼³Á¤ÇÑ´Ù. <var>Option</var>Àº ´ÙÀ½ Áß ÇϳªÀÌ´Ù</p>
-
- <dl>
- <dt><a name="indexoptions.descriptionwidth"
- id="indexoptions.descriptionwidth"
- >DescriptionWidth=[<var>n</var> | *]</a> (<em>¾ÆÆÄÄ¡
- 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd><code>DescriptionWidth</code> Å°¿öµå¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ´ÜÀ§·Î
- ¼³¸í¿­ÀÇ ÆøÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dd><code>-DescriptionWidth</code>¸¦ ÁöÁ¤Çϸé (ȤÀº ¾Æ¹«°Íµµ
- ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é) <module>mod_autoindex</module>°¡ ÃÖÀûÀÇ
- ÆøÀ» °è»êÇÑ´Ù.</dd>
-
- <dd><code>DescriptionWidth=<var>n</var></code>Àº ¿­ÀÇ
- ÆøÀ» <var>n</var> ¹ÙÀÌÆ®·Î °íÁ¤ÇÑ´Ù.</dd>
-
- <dd><code>DescriptionWidth=*</code>Àº ¿­ÀÇ ÆøÀ» °¡Àå ±ä
- ¼³¸í±ÛÀ» ´ãÀ» ¼ö Àִ¸¸Å­ ´Ã¸°´Ù.</dd>
-
- <dd><strong>¼³Á¤ÀÌ Â©¸± ¼ö ÀÖ´Â ¹®Á¦´Â <directive
- module="mod_autoindex">AddDescription</directive>
- ÀýÀ» Âü°íÇ϶ó.</strong></dd>
-
- <dt><a name="indexoptions.fancyindexing"
- id="indexoptions.fancyindexing">FancyIndexing</a></dt>
-
- <dd>µð·ºÅ丮ÀÇ fancy ¸ñ·ÏÀ» ¸¸µç´Ù.</dd>
-
- <dt><a name="indexoptions.foldersfirst"
- id="indexoptions.foldersfirst">FoldersFirst</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé ÇÏÀ§µð·ºÅ丮 ¸ñ·ÏÀÌ <em>Ç×»ó</em>
- ¸ÕÀú ³ª¿À°í, µð·ºÅ丮¿¡ ÀÖ´Â ÀÏ¹Ý ÆÄÀÏÀÌ µÚ¿¡ ³ª¿Â´Ù.
- ±âº»ÀûÀ¸·Î ¸ñ·ÏÀº ÆÄÀÏ°ú ÇÏÀ§µð·ºÅ丮·Î ³ª´µ°í, µû·Î
- °¢°¢ÀÇ ¼ø¼­¸¦ Á¤¸®ÇÏ¿© ÇÏÀ§µð·ºÅ丮µéÀ» ¸ÕÀú º¸ÀδÙ.
- ¿¹¸¦ µé¾î, À̸§ ¿ª¼øÀ¸·Î Á¤·ÄÇÏ°í <code>FoldersFirst</code>¸¦
- »ç¿ëÇÑ´Ù¸é ÇÏÀ§µð·ºÅ丮 <code>Zed</code>°¡ ÇÏÀ§µð·ºÅ丮
- <code>Beta</code> ¾Õ¿¡ ³ª¿À°í, ÇÏÀ§µð·ºÅ丮 <code>Beta</code>´Â
- ÀÏ¹Ý ÆÄÀÏ <code>Gamma</code>¿Í <code>Alpha</code> ¾Õ¿¡
- ³ª¿Â´Ù. <strong>ÀÌ ¿É¼ÇÀº <a href="#indexoptions.fancyindexing"
- ><code>FancyIndexing</code></a>À» ÇÔ²² »ç¿ëÇÒ¶§¸¸ È¿°ú°¡
- ÀÖ´Ù.</strong></dd>
-
- <dt><a name="indexoptions.htmltable"
- id="indexoptions.htmltable">HTMLTable</a> (<em>½ÇÇèÀû,
- ¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>ÀÌ ½ÇÇèÀûÀÎ FancyIndexing ¿É¼ÇÀº °£´ÜÇÑ HTML Ç¥·Î
- fancy µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù. ÀÌ ¿É¼ÇÀº ¿À·¡µÈ ºê¶ó¿ìÀú¸¦
- È¥¶õ½º·´°Ô ÇÒ ¼ö ÀÖÀ½À» ÁÖÀÇÇ϶ó. ÀÌ ¿É¼ÇÀº WinNT³ª ´Ù¸¥
- utf-8 »ç¿ë Ç÷¡Æû¿¡¼­ ÆÄÀϸíÀ̳ª ¼³¸í¹®ÀÇ Àб⠼ø¼­(¿ÞÂÊ¿¡¼­
- ¿À¸¥ÂÊ È¤Àº ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ¸·Î)°¡ ´Ù¸¦¶§ Ưº°È÷ À¯¿ëÇÏ´Ù.</dd>
-
- <dt><a name="indexoptions.iconsarelinks"
- id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ÆÄÀÏ¸í ¸µÅ©¿¡ ¾ÆÀÌÄÜÀ» Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.iconheight"
- id="indexoptions.iconheight">IconHeight[=<var
- >pixels</var>]</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» IconWidth¿Í °°ÀÌ »ç¿ëÇÏ¸é ¼­¹ö´Â ÆÄÀÏ ¾ÆÀÌÄÜÀÇ
- <code>img</code> ű׿¡ <code>height</code>¿Í <code>width</code>
- ¼Ó¼ºÀ» Æ÷ÇÔÇÑ´Ù. ±×·¯¸é ºê¶ó¿ìÀú´Â ¸ðµç À̹ÌÁö¸¦ ¹ÞÁö¾ÊÀº
- »óȲ¿¡¼­µµ ÆäÀÌÁö ±¸¼ºÀ» ¹Ì¸® °è»êÇÒ ¼ö ÀÖ´Ù. ¿É¼Ç¿¡ °ªÀ»
- ÁÖÁö¾ÊÀ¸¸é ¾ÆÆÄÄ¡°¡ Á¦°øÇÏ´Â ¾ÆÀÌÄÜÀÇ Ç¥ÁØ ³ôÀ̸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.iconwidth"
- id="indexoptions.iconwidth">IconWidth[=<var
- >pixels</var>]</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» <code>IconHeight</code>¿Í °°ÀÌ »ç¿ëÇϸé
- ¼­¹ö´Â ÆÄÀÏ ¾ÆÀÌÄÜÀÇ <code>img</code> ű׿¡
- <code>height</code>¿Í <code>width</code> ¼Ó¼ºÀ» Æ÷ÇÔÇÑ´Ù.
- ±×·¯¸é ºê¶ó¿ìÀú´Â ¸ðµç À̹ÌÁö¸¦ ¹ÚÁö¾ÊÀº »óȲ¿¡¼­µµ ÆäÀÌÁö
- ±¸¼ºÀ» ¹Ì¸® °è»êÇÒ ¼ö ÀÖ´Ù. ¿É¼Ç¿¡ °ªÀ» ÁÖÁö¾ÊÀ¸¸é ¾ÆÆÄÄ¡°¡
- Á¦°øÇÏ´Â ¾ÆÀÌÄÜÀÇ Ç¥ÁØ ÆøÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.ignorecase"
- id="indexoptions.ignorecase">IgnoreCase</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¸é ´ë¼Ò¹®ÀÚ ±¸º°ÇÏÁö¾Ê°í À̸§À» Á¤·ÄÇÑ´Ù.
- ¿¹¸¦ µé¾î, À̸§À¸·Î ¿À¸§Â÷¼øÀÌ°í IgnoreCase¸¦ »ç¿ëÇϸé
- ÆÄÀÏ Zeta´Â ÆÄÀÏ alfa µÚ¿¡ ³ª¿Â´Ù (ÁÖÀÇ: ÆÄÀÏ GAMMA´Â
- Ç×»ó ÆÄÀÏ gamma ¾Õ¿¡ ³ª¿Â´Ù). </dd>
-
- <dt><a name="indexoptions.ignoreclient"
- id="indexoptions.ignoreclient">IgnoreClient</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé <module>mod_autoindex</module>´Â
- ¼ø¼­¸¦ Æ÷ÇÔÇÏ¿© Ŭ¶óÀ̾ðÆ®°¡ º¸³»´Â ¸ðµç ÁúÀǺ¯¼ö¸¦ ¹«½ÃÇÑ´Ù.
- (<code><a href="#indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></code>À» °¡Á¤ÇÑ´Ù.)</dd>
-
- <dt><a name="indexoptions.namewidth"
- id="indexoptions.namewidth">NameWidth=[<var>n</var>
- | *]</a></dt>
-
- <dd><code>NameWidth</code> Å°¿öµå´Â ¹ÙÀÌÆ®´ÜÀ§·Î ÆÄÀϸí
- ¿­ÀÇ ÆøÀ» ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dd><code>-NameWidth</code>À» ÁöÁ¤Çϸé (ȤÀº ¾Æ¹«°Íµµ
- ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é) <module>mod_autoindex</module>°¡ ÃÖÀûÀÇ
- ÆøÀ» °è»êÇÑ´Ù.</dd>
-
- <dd><code>NameWidth=<var>n</var></code>´Â ¿­ÀÇ ÆøÀ» <var>n</var>
- ¹ÙÀÌÆ®·Î °íÁ¤ÇÑ´Ù.</dd>
-
- <dd><code>NameWidth=*</code>Àº ¿­ÀÇ ÆøÀ» ÇÊ¿äÇѸ¸Å­ ´Ã¸°´Ù.</dd>
-
- <dt><a name="indexoptions.scanhtmltitles"
- id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ HTML ¹®¼­ÀÇ titleÀ» »Ì´Â´Ù. ÆÄÀÏ¿¡
- <directive module="mod_autoindex">AddDescription</directive>·Î
- ÁöÁ¤ÇÑ ¼³¸íÀÌ ¾ø´Ù¸é À¥¼­¹ö´Â ¹®¼­ÀÇ <code>title</code>
- ¿ä¼Ò°ªÀ» ÀоîµéÀδÙ. ÀÌ ÀÛ¾÷Àº CPU¿Í µð½ºÅ©¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><a name="indexoptions.suppresscolumnsorting"
- id="indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></dt>
-
- <dd>ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¸é ¾ÆÆÄÄ¡´Â FancyIndexed µð·ºÅ丮
- ¸ñ·Ï¿¡¼­ ¿­ À̸§À» ¼ø¼­¸¦ ¹Ù²Ù´Â ¸µÅ©·Î ¸¸µéÁö ¾Ê´Â´Ù.
- º¸ÅëÀº ¿­ À̸§À» ¸µÅ©·Î ¸¸µé¾î¼­, ¿­ À̸§À» ¼±ÅÃÇÏ¸é ±×
- ¿­¿¡ ÀÖ´Â °ª¼ø¼­·Î µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù. <strong>¾ÆÆÄÄ¡
- 2.0.23 ÀÌÀü¿¡´Â ¼ø¼­ ¾Æ±Ô¸ÕÆ®µµ ÀÐÁö ¾Ê¾Ò´Ù.</strong>
- ¾ÆÆÄÄ¡ 2.0.23¿¡¼­´Â <a
- href="#indexoptions.ignoreclient">IndexOptions
- IgnoreClient</a>¸¦ »ç¿ëÇÏ¿© ¼ø¼­ ¾Æ±Ô¸ÕÆ®¸¦ ÀÐÁö ¾Ê´Â´Ù.</dd>
-
- <dt><a name="indexoptions.suppressdescription"
- id="indexoptions.suppressdescription"
- >SuppressDescription</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ÆÄÀÏ ¼³¸íÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ±âº»ÀûÀ¸·Î
- ¾î¶² ÆÄÀÏ ¼³¸íµµ Á¤ÀǵÇÀÖÁö¾Ê°í, ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé 23
- ¹®ÀÚ °ø°£À» ´Ù¸¥ ¿ëµµ·Î »ç¿ëÇÑ´Ù. ÆÄÀÏ ¼³¸íÀ» ÁöÁ¤ÇÏ´Â
- ¹æ¹ýÀº <directive module="mod_autoindex"
- >AddDescription</directive>À» Âü°íÇ϶ó. ¼³¸í¿­ÀÇ Å©±â¸¦
- ÁöÁ¤ÇÏ´Â <code><a
- href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
- ¿É¼Çµµ Âü°íÇ϶ó.</dd>
-
- <dt><a name="indexoptions.suppresshtmlpreamble"
- id="indexoptions.suppresshtmlpreamble"
- >SuppressHTMLPreamble</a></dt>
-
- <dd>µð·ºÅ丮¿¡ <directive
- module="mod_autoindex">HeaderName</directive> Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ ÆÄÀÏÀÌ ÀÖ´Â °æ¿ì ¸ðµâÀº º¸Åë Ç¥ÁØ HTML ½ÃÀۺκÐ
- (<code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>,
- <em>et cetera</em>) µÚ¿¡ ÆÄÀÏ ³»¿ëÀ» ÷°¡ÇÑ´Ù. ±×·¯³ª
- <code>SuppressHTMLPreamble</code> ¿É¼ÇÀ» »ç¿ëÇϸé óÀ½ºÎÅÍ
- header ÆÄÀÏ ³»¿ëÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ °æ¿ì header ÆÄÀÏ¿¡´Â ÀûÀýÇÑ
- HTML ¸í·ÉÀÌ ÀÖ¾î¾ß ÇÑ´Ù. header ÆÄÀÏÀÌ ¾ø´Ù¸é ÀϹÝÀûÀÎ
- ½ÃÀۺκÐÀÌ ¸¸µé¾îÁø´Ù.</dd>
-
- <dt><a name="indexoptions.suppressicon"
- id="indexoptions.suppressicon">SuppressIcon</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ¾ÆÀÌÄÜÀ» »«´Ù. <code>SuppressIcon</code>°ú
- <code>SuppressRules</code>¸¦ °°ÀÌ »ç¿ëÇϸé, (FancyIndexed
- ¸ñ·ÏÀÌ »ç¿ëÇÑ) <code>pre</code> ¾È¿¡ <code>img</code>¿Í
- <code>hr</code> ¿ä¼Ò »ç¿ëÀ» ±ÝÁöÇÑ ¸¶Áö¸· Ç¥ÁØÀÎ HTML 3.2¿¡
- ¾Ë¸ÂÀº Ãâ·ÂÀÌ µÈ´Ù.</dd>
-
- <dt><a name="indexoptions.suppresslastmodified"
- id="indexoptions.suppresslastmodified"
- >SuppressLastModified</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ¸¶Áö¸· ¼öÁ¤ÀÏÀ» Ç¥½ÃÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><a name="indexoptions.suppressrules"
- id="indexoptions.suppressrules">SuppressRules</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>µð·ºÅ丮 ¸ñ·Ï¿¡¼­ ¼öÆòÁÙÀ» (<code>hr</code> ¿ä¼Ò)
- »ç¿ëÇÏÁö ¾Ê´Â´Ù. <code>SuppressIcon</code>°ú
- <code>SuppressRules</code>¸¦ °°ÀÌ »ç¿ëÇϸé, (FancyIndexed
- ¸ñ·ÏÀÌ »ç¿ëÇÑ) <code>pre</code> ¾È¿¡ <code>img</code>¿Í
- <code>hr</code> ¿ä¼Ò »ç¿ëÀ» ±ÝÁöÇÑ ¸¶Áö¸· Ç¥ÁØÀÎ HTML 3.2¿¡
- ¾Ë¸ÂÀº Ãâ·ÂÀÌ µÈ´Ù.</dd>
-
- <dt><a name="indexoptions.suppresssize"
- id="indexoptions.suppresssize">SuppressSize</a></dt>
-
- <dd>fancy ¸ñ·Ï¿¡¼­ ÆÄÀÏÅ©±â¸¦ Ç¥½ÃÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><a name="indexoptions.trackmodified"
- id="indexoptions.trackmodified">TrackModified</a>
- (<em>¾ÆÆÄÄ¡ 2.0.23 ÀÌÈÄ</em>)</dt>
-
- <dd>µð·ºÅ丮 ¸ñ·ÏÀÇ HTTP Çì´õ¿¡ Last-Modified¿Í ETag °ªÀ»
- Æ÷ÇÔÇÑ´Ù. ÀÌ ¿É¼ÇÀº ¿î¿µÃ¼Á¦¿Í ÆÄÀϽýºÅÛ¿¡¼­ ÀûÀýÇÑ stat()
- °á°ú¸¦ ¾òÀ» ¼ö ÀÖÀ»¶§¸¸ À¯È¿ÇÏ´Ù. À¯´Ð½º ½Ã½ºÅÛ°ú OS2ÀÇ
- JFS, Win32ÀÇ NTFS¿¡¼­´Â °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î, OS2¿Í Win32ÀÇ
- FATÀº ºÒ°¡´ÉÇÏ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϸé Ŭ¶óÀ̾ðÆ®³ª ÇÁ·Ï½Ã´Â
- <code>HEAD</code> ¿äûÀ» »ç¿ëÇÏ¿© ÆÄÀϸñ·ÏÀÇ º¯È­¸¦ ÃßÀûÇÒ
- ¼ö ÀÖ´Ù. ¾î¶² ¿î¿µÃ¼Á¦´Â »õ·Î¿î ÆÄÀÏ°ú »èÁ¦ÇÑ ÆÄÀÏÀ» ¿Ã¹Ù·Î
- ÃßÀûÇÏÁö¸¸, µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀÇ Å©±â³ª ³¯Â¥ º¯È­¸¦
- ÃßÀûÇÏÁö ¸øÇÔÀ» ÁÖÀÇÇ϶ó. <strong>¸ðµç À¯´Ð½º Ç÷¡Æû¿¡¼­
- ±âÁ¸ ÆÄÀÏÀÇ Å©±â³ª ³¯Â¥ º¯È­½Ã Last-Modified Çì´õ°¡
- ¹Ù²îÁö¾Ê´Â´Ù.</strong> ÀÌ·± º¯È­°¡ Áß¿äÇÏ´Ù¸é ÀÌ ¿É¼ÇÀ»
- »ç¿ëÇÏÁö ¸¶¶ó.</dd>
-
- <dt><a name="indexoptions.versionsort"
- id="indexoptions.versionsort">VersionSort</a>
- (<em>¾ÆÆÄÄ¡ 2.0a3 ÀÌÈÄ</em>)</dt>
-
- <dd><code>VersionSort</code> Å°¿öµå´Â ¹öÀü ¹øÈ£¸¦ Æ÷ÇÔÇÑ
- ÆÄÀϸíÀ» ÀÚ¿¬½º·´°Ô Á¤·ÄÇÑ´Ù. ¹®ÀÚ ºÎºÐÀº Á¤»óÀûÀÎ ¼ø¼­¸¦
- Á¤·ÄÇÏÁö¸¸, ÆÄÀÏ°ú ¼³¸í¿¡ ÀÖ´Â ¼ýÀÚ ºÎºÐÀº ¼ýÀÚ°ªÀ¸·Î
- ºñ±³ÇÑ´Ù.
-
- <example><title>¿¹Á¦:</title>
- foo-1.7<br />
- foo-1.7.2<br />
- foo-1.7.12<br />
- foo-1.8.2<br />
- foo-1.8.2a<br />
- foo-1.12
- </example>
-
- <p>¼ö°¡ 0À¸·Î ½ÃÀÛÇϸé, ±× ¼ö¸¦ ºÐ¼ö·Î Ãë±ÞÇÑ´Ù:</p>
-
- <example>
- foo-1.001<br />
- foo-1.002<br />
- foo-1.030<br />
- foo-1.04
- </example>
- </dd>
-
- <dt><a name="indexoptions.xhtml"
- id="indexoptions.xhtml">XHTML</a>
- (<em>¾ÆÆÄÄ¡ 2.0.49 ÀÌÈÄ</em>)</dt>
-
- <dd><code>XHTML</code> Å°¿öµå¸¦ »ç¿ëÇϸé
- <module>mod_autoindex</module>´Â HTML 3.2 ´ë½Å XHTML 1.0
- Äڵ带 »ý¼ºÇÑ´Ù.</dd>
- </dl>
-
- <!--
- XXX: we should consider to allow sections inside <usage>
- this would require some xslt changes...
- -->
- <dl><dt>Á¡ÁøÀûÀÎ IndexOptions</dt>
- <dd>
- <p>¾ÆÆÄÄ¡ 1.3.3¿¡¼­ <directive>IndexOptions</directive>
- Áö½Ã¾î 󸮹æ½ÄÀÌ Å©°Ô º¯È­µÇ¾ú´Ù. Ưº°È÷:</p>
-
- <ul>
- <li>ÀÌÁ¦ ÇÑ µð·ºÅ丮¿¡ ´ëÇÑ ¿©·¯
- <directive>IndexOptions</directive> Áö½Ã¾îµéÀ» ¼­·Î °áÇÕÇÑ´Ù.
- ´ÙÀ½ÀÇ °á°ú´Â:
-
- <example>
- &lt;Directory /foo&gt;
- <indent>
- IndexOptions HTMLTable<br />
- IndexOptions SuppressColumnsorting
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>´ÙÀ½°ú °°´Ù</p>
-
- <example>
- IndexOptions HTMLTable SuppressColumnsorting
- </example>
- </li>
-
- <li>(<em>¿¹¸¦ µé¾î</em>, Å°¿öµå ¾Õ¿¡ <code>+</code>³ª
- <code>-</code>¸¦ ºÙÀÌ´Â) Á¡ÁøÀûÀÎ ¹®¹ýÀÌ Ãß°¡µÇ¾ú´Ù.</li>
- </ul>
-
- <p>Å°¿öµå ¾Õ¿¡ '+'³ª '-'°¡ ºÙÀ»¶§¸¶´Ù ÇØ´ç Å°¿öµå°¡ ÇöÀç
- (»óÀ§ µð·ºÅ丮¿¡¼­ »ó¼ÓµÇ¾úÀ») <directive>IndexOptions</directive>
- ¼³Á¤¿¡ ¹Ý¿µµÈ´Ù. ±×·¯³ª ¾Õ¿¡ ¾Æ¹«°Íµµ ¾ø´Â Å°¿öµå¸¦ ¸¸³ª¸é
- ¾ÆÁ÷±îÁö »ó¼ÓµÇ°Å³ª Á¡ÁøÀûÀ¸·Î º¯°æµÈ ¼³Á¤À» ¸ðµÎ Áö¿î´Ù.
- ´ÙÀ½ ¿¹Á¦¸¦ »ìÆ캸ÀÚ:</p>
-
- <example>
- IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing<br />
- IndexOptions +SuppressSize
- </example>
-
- <p>¾Õ¿¡ ¾Æ¹«°Íµµ ¾ø´Â <code>FancyIndexing</code>ÀÌ ÀÌÀüÀÇ
- Á¡ÁøÀûÀÎ ¼³Á¤À» Áö¿ö¹ö·ÈÁö¸¸ ¼³Á¤ÀÌ ´Ù½Ã Ãß°¡µÇ¿© °á°ú´Â
- <code>IndexOptions FancyIndexing +SuppressSize</code>¿Í °°´Ù.</p>
-
- <p>ƯÁ¤ µð·ºÅ丮¿¡ ´ëÇØ ¹«Á¶°ÇÀûÀÎ
- <directive>IndexOptions</directive>¸¦ ¼³Á¤ÇÏ·Á¸é Å°¿öµå
- ¾Õ¿¡ <code>+</code>³ª <code>-</code>¸¦ »ç¿ëÇÏÁö¸»°í
- »ó¼ÓµÈ ¼³Á¤À» Áö¿î´Ù.</p>
- </dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOrderDefault</name>
-<description>µð·ºÅ丮 ¸ñ·ÏÀÇ ±âº» ¼ø¼­¸¦ ¼³Á¤ÇÑ´Ù</description>
-<syntax>IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</syntax>
-<default>IndexOrderDefault Ascending Name</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexOrderDefault</directive> Áö½Ã¾î´Â <code><a
- href="#indexoptions.fancyindexing">FancyIndexing</a></code>
- ¸ñ·Ï ¿É¼Ç°ú ÇÔ²² »ç¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î fancyindexed µð·ºÅ丮
- ¸ñ·ÏÀº ÆÄÀÏ¸í ¿À¸§Â÷¼øÀÌ´Ù. <directive>IndexOrderDefault</directive>´Â
- ÀÌ Ãʱ⠼ø¼­¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><directive>IndexOrderDefault</directive>´Â µÎ ¾Æ±Ô¸ÕÆ®¸¦
- ¹Þ´Â´Ù. ù¹ø°´Â ¼ø¼­ÀÇ ¹æÇâÀ» Áö½ÃÇÏ´Â <code>Ascending</code>
- (¿À¸¥Â÷¼ø) À̳ª <code>Descending</code> (³»¸²Â÷¼ø) Áß Çϳª´Ù.
- µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â ÀÏÂ÷ ¼ø¼­¸¦ ³ªÅ¸³»´Â Å°¿öµå <code>Name</code>,
- <code>Date</code>, <code>Size</code>, <code>Description</code>
- Áß Çϳª´Ù. ÀÌÂ÷ ¼ø¼­´Â <em>Ç×»ó</em> ÆÄÀÏ¸í ¿À¸§Â÷¼øÀÌ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾î¿Í <code><a
- href="#indexoptions.suppresscolumnsorting"
- >SuppressColumnSorting</a></code> ¸ñ·Ï ¿É¼ÇÀ» °°ÀÌ »ç¿ëÇϸé
- ƯÁ¤ ¼ø¼­·Î¸¸ µð·ºÅ丮 ¸ñ·ÏÀ» ¸¸µç´Ù. ÀÌ °æ¿ì Ŭ¶óÀ̾ðÆ®´Â
- ´Ù¸¥ ¼ø¼­·Î µð·ºÅ丮 ¸ñ·ÏÀ» ¿äûÇÏÁö ¸øÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexStyleSheet</name>
-<description>µð·ºÅ丮 ¸ñ·Ï¿¡ CSS ½ºÅ¸ÀϽ¬Æ®¸¦ Ãß°¡ÇÑ´Ù</description>
-<syntax>IndexStyleSheet <var>url-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>IndexStyleSheet</directive> Áö½Ã¾î´Â µð·ºÅ丮
- ¸ñ·Ï¿¡¼­ CSS·Î »ç¿ëÇÒ ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.
- </p>
- <example>
- <title>Example</title>
- IndexStyleSheet "/css/style.css"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ReadmeName</name>
-<description>ÆÄÀϸñ·Ï ¸¶Áö¸·¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</description>
-<syntax>ReadmeName <var>filename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>ReadmeName</directive> Áö½Ã¾î´Â ÆÄÀϸñ·Ï ³¡¿¡
- »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÑ´Ù. <var>Filename</var>Àº Æ÷ÇÔÇÒ
- ÆÄÀϸíÀÌ°í, ¸ñ·ÏÀ» ¸¸µé·Á´Â À§Ä¡ÀÇ »ó´ë°æ·Î·Î ¹Þ¾ÆµéÀδÙ.
- <var>Filename</var>ÀÌ ½½·¡½¬·Î ½ÃÀÛÇϸé <directive
- module="core">DocumentRoot</directive>¿¡ »ó´ë°æ·Î·Î ¹Þ¾ÆµéÀδÙ.
- </p>
-
- <example><title>¿¹Á¦</title>
- ReadmeName FOOTER.html
- </example>
-
- <example><title>¿¹Á¦ 2</title>
- ReadmeName /include/FOOTER.html
- </example>
-
- <p>ÀÌ µ¿ÀÛÀ» ÀÚ¼¼È÷ ¼³¸íÇÑ <directive module="mod_autoindex"
- >HeaderName</directive>µµ Âü°íÇ϶ó.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_autoindex.xml.meta b/docs/manual/mod/mod_autoindex.xml.meta
deleted file mode 100644
index df5f14e406..0000000000
--- a/docs/manual/mod/mod_autoindex.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_autoindex</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant outdated="yes">ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_cache.html b/docs/manual/mod/mod_cache.html
deleted file mode 100644
index 291a87a580..0000000000
--- a/docs/manual/mod/mod_cache.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_cache.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_cache.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_cache.html.en b/docs/manual/mod/mod_cache.html.en
deleted file mode 100644
index be3e5081ca..0000000000
--- a/docs/manual/mod/mod_cache.html.en
+++ /dev/null
@@ -1,333 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_cache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cache.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cache.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Content cache keyed to URIs.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_cache.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning">
- This module is experimental. Documentation is still under development...
- </div>
-
- <p><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> implements an <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> compliant HTTP
- content cache that can be used to cache either local or proxied content.
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> requires the services of one or more storage
- management modules. Two storage management modules are included in
- the base Apache distribution:</p>
- <dl>
- <dt><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code></dt>
- <dd>implements a disk based storage manager.</dd>
-
- <dt><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></dt>
- <dd>implements a memory based storage manager.
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code> can be configured to operate in two
- modes: caching open file descriptors or caching objects in heap storage.
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code> can be used to cache locally generated content
- or to cache backend server content for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> when
- configured using <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>
- (aka <dfn>reverse proxy</dfn>)</dd>
- </dl>
-
- <p>Content is stored in and retrieved from the cache using URI based keys. Content with
- access protection is not cached.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedefaultexpire">CacheDefaultExpire</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedisable">CacheDisable</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheenable">CacheEnable</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachemaxexpire">CacheMaxExpire</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#related">Related Modules and Directives</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sampleconf">Sample Configuration</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Related Modules and Directives</a></h2>
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code></li><li><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_disk_cache.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachesize">CacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcunused">CacheGcUnused</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcclean">CacheGcClean</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachesize">MCacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="sampleconf" id="sampleconf">Sample Configuration</a></h2>
- <div class="example"><h3>Sample httpd.conf</h3><p><code>
- #<br />
- # Sample Cache Configuration<br />
- #<br />
- LoadModule cache_module modules/mod_cache.so<br />
- <br />
- &lt;IfModule mod_cache.c&gt;<br />
- <span class="indent">
- #LoadModule disk_cache_module modules/mod_disk_cache.so<br />
- &lt;IfModule mod_disk_cache.c&gt;<br />
- <span class="indent">
- CacheRoot c:/cacheroot<br />
- CacheSize 256<br />
- CacheEnable disk /<br />
- CacheDirLevels 5<br />
- CacheDirLength 3<br />
- </span>
- &lt;/IfModule&gt; <br />
- <br />
- LoadModule mem_cache_module modules/mod_mem_cache.so<br />
- &lt;IfModule mod_mem_cache.c&gt;<br />
- <span class="indent">
- CacheEnable mem /<br />
- MCacheSize 4096<br />
- MCacheMaxObjectCount 100<br />
- MCacheMinObjectSize 1<br />
- MCacheMaxObjectSize 2048<br />
- </span>
- &lt;/IfModule&gt;<br />
- </span>
- &lt;/IfModule&gt;
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDefaultExpire" id="CacheDefaultExpire">CacheDefaultExpire</a> <a name="cachedefaultexpire" id="cachedefaultexpire">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The default duration to cache a document when no expiry date is specified.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheDefaultExpire <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheDefaultExpire 3600 (one hour)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheDefaultExpire</code> directive specifies a default time,
- in seconds, to cache a document if neither an expiry date nor last-modified date are provided
- with the document. The value specified with the <code class="directive">CacheMaxExpire</code>
- directive does <em>not</em> override this setting.</p>
-
- <div class="example"><p><code>
- CacheDefaultExpire 86400
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDisable" id="CacheDisable">CacheDisable</a> <a name="cachedisable" id="cachedisable">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Disable caching of specified URLs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheDisable <var> url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheDisable</code> directive instructs
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> to <em>not</em> cache urls at or below
- <var>url-string</var>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- CacheDisable /local_files
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheEnable" id="CacheEnable">CacheEnable</a> <a name="cacheenable" id="cacheenable">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable caching of specified URLs using a specified storage
-manager</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheEnable <var>cache_type</var> <var>url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheEnable</code> directive instructs
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> to cache urls at or below
- <var>url-string</var>. The cache storage manager is specified with the
- <var>cache_type</var> argument. <var>cache_type</var> <code> mem</code>
- instructs <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> to use the memory based storage
- manager implemented by <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>.
- <var>cache_type</var> <code>disk</code> instructs
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> to use the disk based storage manager
- implemented by <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>.
- <var>cache_type</var> <code>fd</code> instructs
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> to use the file descriptor cache implemented
- by <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>.</p>
- <p>In the event that the URL space overlaps between different
- <code class="directive">CacheEnable</code> directives (as in the example below),
- each possible storage manager will be run until the first one that
- actually processes the request. The order in which the storage managers are
- run is determined by the order of the <code class="directive">CacheEnable</code>
- directives in the configuration file.</p>
-
- <div class="example"><p><code>
- CacheEnable mem /manual<br />
- CacheEnable fd /images<br />
- CacheEnable disk /<br />
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheForceCompletion" id="CacheForceCompletion">CacheForceCompletion</a> <a name="cacheforcecompletion" id="cacheforcecompletion">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Percentage of document served, after which the server
-will complete caching the file even if the request is cancelled.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheForceCompletion <var>Percentage</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheForceCompletion 60</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>Ordinarily, if a request is cancelled while the response is being
- cached and delivered to the client the processing of the response will
- stop and the cache entry will be removed. The
- <code class="directive">CacheForceCompletion</code> directive specifies a
- threshold beyond which the document will continue to be cached to
- completion, even if the request is cancelled.</p>
-
- <p>The threshold is a percentage specified as a value between
- <code>1</code> and <code>100</code>. A value of <code>0</code>
- specifies that the default be used. A value of <code>100</code>
- will only cache documents that are served in their entirety. A value
- between 60 and 90 is recommended.</p>
-
- <div class="example"><p><code>
- CacheForceCompletion 80
- </code></p></div>
-
- <div class="warning"><h3>Note:</h3>
- This feature is currently <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheIgnoreCacheControl" id="CacheIgnoreCacheControl">CacheIgnoreCacheControl</a> <a name="cacheignorecachecontrol" id="cacheignorecachecontrol">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ignore the fact that the client requested the content not be
-cached.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheIgnoreCacheControl On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheIgnoreCacheControl Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>Ordinarily, documents with no-cache or no-store header values will not be stored in the cache.
- The <code class="directive">CacheIgnoreCacheControl</code> directive allows this behavior to be overridden.
- <code class="directive">CacheIgnoreCacheControl</code> On tells the server to attempt to cache the document
- even if it contains no-cache or no-store header values. Documents requiring authorization will
- <em>never</em> be cached.</p>
-
- <div class="example"><p><code>
- CacheIgnoreCacheControl On
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheIgnoreNoLastMod" id="CacheIgnoreNoLastMod">CacheIgnoreNoLastMod</a> <a name="cacheignorenolastmod" id="cacheignorenolastmod">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ignore the fact that a response has no Last Modified
-header.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheIgnoreNoLastMod On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheIgnoreNoLastMod Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>Ordinarily, documents without a last-modified date are not cached.
- Under some circumstances the last-modified date is removed (during
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> processing for example) or not provided
- at all. The <code class="directive">CacheIgnoreNoLastMod</code> directive
- provides a way to specify that documents without last-modified dates
- should be considered for caching, even without a last-modified date.
- If neither a last-modified date nor an expiry date are provided with
- the document then the value specified by the
- <code class="directive">CacheDefaultExpire</code> directive will be used to
- generate an expiration date.</p>
-
- <div class="example"><p><code>
- CacheIgnoreNoLastMod On
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheLastModifiedFactor" id="CacheLastModifiedFactor">CacheLastModifiedFactor</a> <a name="cachelastmodifiedfactor" id="cachelastmodifiedfactor">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The factor used to compute an expiry date based on the
-LastModified date.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheLastModifiedFactor <var>float</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheLastModifiedFactor 0.1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>In the event that a document does not provide an expiry date but does
- provide a last-modified date, an expiry date can be calculated based on
- the time since the document was last modified. The
- <code class="directive">CacheLastModifiedFactor</code> directive specifies a
- <var>factor</var> to be used in the generation of this expiry date
- according to the following formula:
-
- <code>expiry-period = time-since-last-modified-date * <var>factor</var>
- expiry-date = current-date + expiry-period</code>
-
- For example, if the document was last modified 10 hours ago, and
- <var>factor</var> is 0.1 then the expiry-period will be set to
- 10*0.1 = 1 hour. If the current time was 3:00pm then the computed
- expiry-date would be 3:00pm + 1hour = 4:00pm.
-
- If the expiry-period would be longer than that set by
- <code class="directive">CacheMaxExpire</code>, then the latter takes
- precedence.</p>
-
- <div class="example"><p><code>
- CacheLastModifiedFactor 0.5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheMaxExpire" id="CacheMaxExpire">CacheMaxExpire</a> <a name="cachemaxexpire" id="cachemaxexpire">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum time in seconds to cache a document</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheMaxExpire <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheMaxExpire 86400 (one day)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheMaxExpire</code> directive specifies the maximum number of
- seconds for which cachable HTTP documents will be retained without checking the origin
- server. Thus, documents will be out of date at most this number of seconds. This maximum
- value is enforced even if an expiry date was supplied with the document.</p>
-
- <div class="example"><p><code>
- CacheMaxExpire 604800
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cache.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cache.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cache.html.ko.euc-kr b/docs/manual/mod/mod_cache.html.ko.euc-kr
deleted file mode 100644
index b99c7f7fa8..0000000000
--- a/docs/manual/mod/mod_cache.html.ko.euc-kr
+++ /dev/null
@@ -1,321 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_cache</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cache.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cache.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>Content cache keyed to URIs.</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_cache.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <div class="warning">
- ÀÌ ¸ðµâÀº ½ÇÇèÀûÀÎ »óÅÂÀÌ´Ù. ¹®¼­´Â ¾ÆÁ÷ ÀÛ¾÷ÁßÀÌ´Ù...
- </div>
-
- <p><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>´Â °°Àº ÄÄÇ»ÅÍ¿¡ ÀÖ´Â ³»¿ëÀ̳ª
- ÇÁ·Ï½ÃµÈ ³»¿ëÀ» ij½¬ÇÒ ¼ö ÀÖ´Â <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>
- ȣȯ HTTP ³»¿ëij½¬¸¦ ±¸ÇöÇÑ´Ù. <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>¸¦
- »ç¿ëÇÏ·Á¸é ÀúÀå°ü¸®¸ðµâ(storage management module)ÀÌ ÇÊ¿äÇÏ´Ù.
- ±âº» ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡´Â µÎ°¡Áö ÀúÀå°ü¸®¸ðµâÀÌ ÀÖ´Ù:</p>
- <dl>
- <dt><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code></dt>
- <dd>´Â µð½ºÅ©±â¹Ý ÀúÀå°ü¸®ÀÚ¸¦ ±¸ÇöÇÑ´Ù.</dd>
-
- <dt><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></dt>
- <dd>´Â ¸Þ¸ð¸®±â¹Ý ÀúÀå°ü¸®ÀÚ¸¦ ±¸ÇöÇÑ´Ù.
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>´Â ÆÄÀϱâ¼úÀÚ¸¦ ij½¬Çϰųª
- Èü(heap) °ø°£¿¡ °´Ã¼¸¦ ij½¬ÇÏ´Â µÎ°¡Áö ¹æ½ÄÁß ÇÑ°¡Áö ¹æ¹ýÀ¸·Î
- µ¿ÀÛÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>´Â
- ÀÚ½ÅÀÌ »ý¼ºÇÑ ³»¿ëÀ» ij½¬Çϰųª, (<dfn>¿ªÇÁ·Ï½Ã(reverse proxy)</dfn>·Î
- ¾Ë·ÁÁø) <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>¸¦
- »ç¿ëÇÏ¿© <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>¸¦ À§ÇØ µÞ´Ü ¼­¹ö³»¿ëÀ»
- ij½¬ÇÒ ¼ö ÀÖ´Ù.</dd>
- </dl>
-
- <p>³»¿ëÀ» URI¸¦ Åä´ë·Î ¸¸µç Å°·Î ij½¬¿¡ ÀúÀåÇÏ°í °¡Á®¿Â´Ù.
- Á¢±Ùº¸È£°¡ µÈ ³»¿ëÀº ij½¬ÇÏÁö¾Ê´Â´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedefaultexpire">CacheDefaultExpire</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedisable">CacheDisable</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheenable">CacheEnable</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheforcecompletion">CacheForceCompletion</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachemaxexpire">CacheMaxExpire</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#related">°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾î</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sampleconf">¼³Á¤¿¹</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾î</a></h2>
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code></li><li><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_disk_cache.html#cacheroot">CacheRoot</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachesize">CacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcinterval">CacheGcInterval</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cacheminfilesize">CacheMinFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachetimemargin">CacheTimeMargin</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcdaily">CacheGcDaily</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcunused">CacheGcUnused</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcclean">CacheGcClean</a></code></li><li><code class="directive"><a href="../mod/mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachesize">MCacheSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code></li><li><code class="directive"><a href="../mod/mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="sampleconf" id="sampleconf">¼³Á¤¿¹</a></h2>
- <div class="example"><h3>Sample httpd.conf</h3><p><code>
- #<br />
- # ¿¹Á¦ ij½¬ ¼³Á¤<br />
- #<br />
- LoadModule cache_module modules/mod_cache.so<br />
- <br />
- &lt;IfModule mod_cache.c&gt;<br />
- <span class="indent">
- #LoadModule disk_cache_module modules/mod_disk_cache.so<br />
- &lt;IfModule mod_disk_cache.c&gt;<br />
- <span class="indent">
- CacheRoot c:/cacheroot<br />
- CacheSize 256<br />
- CacheEnable disk /<br />
- CacheDirLevels 5<br />
- CacheDirLength 3<br />
- </span>
- &lt;/IfModule&gt; <br />
- <br />
- LoadModule mem_cache_module modules/mod_mem_cache.so<br />
- &lt;IfModule mod_mem_cache.c&gt;<br />
- <span class="indent">
- CacheEnable mem /<br />
- MCacheSize 4096<br />
- MCacheMaxObjectCount 100<br />
- MCacheMinObjectSize 1<br />
- MCacheMaxObjectSize 2048<br />
- </span>
- &lt;/IfModule&gt;<br />
- </span>
- &lt;/IfModule&gt;
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDefaultExpire" id="CacheDefaultExpire">CacheDefaultExpire</a> <a name="cachedefaultexpire" id="cachedefaultexpire">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸¸±â½Ã°£À» ÁöÁ¤ÇÏÁö¾ÊÀº ¹®¼­¸¦ ij½¬ÇÒ ±âº» ±â°£.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheDefaultExpire <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheDefaultExpire 3600 (one hour)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p><code class="directive">CacheDefaultExpire</code> Áö½Ã¾î´Â ¹®¼­ÀÇ
- ¸¸±â½Ã°£°ú ÃÖ±Ù¼öÁ¤½Ã°£ÀÌ ¾ø´Â °æ¿ì ¹®¼­¸¦ ij½¬ÇÒ ÃÊ´ÜÀ§
- ±âº» ½Ã°£À» ÁöÁ¤ÇÑ´Ù. <code class="directive">CacheMaxExpire</code>·Î
- ÁöÁ¤ÇÑ °ªÀÌ ÀÌ ¼³Á¤À» ¹«½ÃÇÏÁö <em>¾Ê´Â´Ù</em>.</p>
-
- <div class="example"><p><code>
- CacheDefaultExpire 86400
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDisable" id="CacheDisable">CacheDisable</a> <a name="cachedisable" id="cachedisable">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ƯÁ¤ URLÀ» ij½¬ÇÏÁö ¾Ê´Â´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheDisable <var> url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p><code class="directive">CacheDisable</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>°¡ <var>url-string</var> ÀÌÇÏÀÇ
- urlµéÀ» ij½¬ÇÏÁö <em>¾Ê´Â´Ù</em>.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- CacheDisable /local_files
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheEnable" id="CacheEnable">CacheEnable</a> <a name="cacheenable" id="cacheenable">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÁöÁ¤ÇÑ ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÏ¿© ÁöÁ¤ÇÑ URLÀ» ij½¬ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheEnable <var>cache_type</var> <var>url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p><code class="directive">CacheEnable</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>°¡ <var>url-string</var> ÀÌÇÏ
- urlµéÀ» ij½¬ÇÑ´Ù. ij½¬ ÀúÀå°ü¸®ÀÚ´Â <var>cache_type</var>
- ¾Æ±Ô¸ÕÆ®·Î ÁöÁ¤ÇÑ´Ù. <var>cache_type</var> <code>mem</code>Àº
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>°¡ ±¸ÇöÇÏ´Â ¸Þ¸ð¸®±â¹Ý
- ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÑ´Ù. <var>cache_type</var> <code>disk</code>´Â
- <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>°¡ ±¸ÇöÇÏ´Â µð½ºÅ©±â¹Ý
- ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÑ´Ù. <var>cache_type</var> <code>fd</code>´Â
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>°¡ ±¸ÇöÇÏ´Â ÆÄÀϱâ¼úÀÚ Ä³½¬¸¦
- »ç¿ëÇÑ´Ù.</p>
- <p>(¾Æ·¡ ¿¹¿Í °°ÀÌ) URL °ø°£ÀÌ ´Ù¸¥
- <code class="directive">CacheEnable</code> Áö½Ã¾î¿Í °ãÄ¡¸é ½ÇÁ¦·Î
- ÇÑ ÀúÀå°ü¸®ÀÚ°¡ ¿äûÀ» ó¸®ÇÒ¶§±îÁö µÎ ÀúÀå°ü¸®ÀÚ¸¦ ¸ðµÎ
- ½ÇÇàÇÑ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­ <code class="directive">CacheEnable</code>
- Áö½Ã¾îÀÇ ¼ø¼­´ë·Î ÀúÀå°ü¸®ÀÚ°¡ ½ÇÇàµÈ´Ù.</p>
-
- <div class="example"><p><code>
- CacheEnable mem /manual<br />
- CacheEnable fd /images<br />
- CacheEnable disk /<br />
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheForceCompletion" id="CacheForceCompletion">CacheForceCompletion</a> <a name="cacheforcecompletion" id="cacheforcecompletion">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¿äûÀÌ Ãë¼ÒµÇ´õ¶óµµ ¼­¹ö°¡ ÆÄÀÏÀ» °è¼Ó ij½¬ÇϱâÀ§ÇØ
-ÇÊ¿äÇÑ ¹®¼­ÀÇ ¼­ºñ½º·ü.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheForceCompletion <var>Percentage</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheForceCompletion 60</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p>º¸Åë ÀÀ´äÀ» ij½¬ÇÏ°í Ŭ¶óÀ̾ðÆ®·Î º¸³»´Â µµÁß¿¡ ¿äûÀÌ
- Ãë¼ÒµÇ¸é ÀÀ´ä 󸮸¦ Áߴܵǰí ij½¬ Ç׸ñÀ» Áö¿î´Ù.
- <code class="directive">CacheForceCompletion</code> Áö½Ã¾î´Â ¿äûÀÌ
- Ãë¼ÒµÇ´õ¶óµµ ¹®¼­¸¦ °è¼Ó ij½¬ÇÒ Á¤µµ¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
- <p>Á¤µµ´Â ¹éºÐÀ²·Î ³ªÅ¸³»¸ç <code>1</code>°ú <code>100</code>
- »çÀÌÀÇ °ªÀÌ´Ù. <code>0</code> °ªÀ» ÁöÁ¤ÇÏ¸é ±âº»°ªÀ» »ç¿ëÇÑ´Ù.
- <code>100</code>Àº ³»¿ëÀ» ¸ðµÎ ¼­ºñ½ºÇÑ ¹®¼­¸¸À» ij½¬ÇÑ´Ù.
- 60°ú 90 »çÀÌÀÇ °ªÀ» ÃßõÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- CacheForceCompletion 80
- </code></p></div>
-
- <div class="warning"><h3>ÁÖÀÇ:</h3>
- ÀÌ ±â´ÉÀº ÇöÀç ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheIgnoreCacheControl" id="CacheIgnoreCacheControl">CacheIgnoreCacheControl</a> <a name="cacheignorecachecontrol" id="cacheignorecachecontrol">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ŭ¶óÀ̾ðÆ®°¡ ij½¬ÇÏÁö¾Ê´Â ³»¿ëÀ» ¿äûÇÔÀ» ¹«½ÃÇÑ´Ù.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheIgnoreCacheControl On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheIgnoreCacheControl Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p>º¸Åë no-cache³ª no-store Çì´õ°ªÀ» °¡Áø ¹®¼­´Â ij½¬¿¡
- ÀúÀåÇÏÁö¾Ê´Â´Ù. <code class="directive">CacheIgnoreCacheControl</code>
- Áö½Ã¾î´Â ÀÌ·± ÇൿÀ» º¯°æÇÑ´Ù.
- <code class="directive">CacheIgnoreCacheControl</code> OnÀ» »ç¿ëÇϸé
- ¼­¹ö´Â ¹®¼­¿¡ no-cache³ª no-store Çì´õ°ªÀÌ À־ ¹®¼­¸¦
- ij½¬ÇÑ´Ù. ÀÎÁõÀÌ ÇÊ¿äÇÑ ¹®¼­´Â <em>Àý´ë·Î</em> ij½¬ÇÏÁö
- ¾Ê´Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheIgnoreCacheControl On
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheIgnoreNoLastMod" id="CacheIgnoreNoLastMod">CacheIgnoreNoLastMod</a> <a name="cacheignorenolastmod" id="cacheignorenolastmod">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÀÀ´ä¿¡ Last Modified Çì´õ°¡ ¾ø´Ù´Â »ç½ÇÀ» ¹«½ÃÇÑ´Ù.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheIgnoreNoLastMod On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheIgnoreNoLastMod Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p>º¸Åë ÃÖ±Ù¼öÁ¤ÀÏÀÌ ¾ø´Â ¹®¼­´Â ij½¬ÇÏÁö ¾Ê´Â´Ù. ¾î¶² °æ¿ì
- ÃÖ±Ù¼öÁ¤ÀÏÀ» (¿¹¸¦ µé¾î <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ó¸®Áß¿¡)
- »©°Å³ª óÀ½ºÎÅÍ ¾ø¾úÀ» ¼ö°¡ ÀÖ´Ù.
- <code class="directive">CacheIgnoreNoLastMod</code> Áö½Ã¾î´Â ÃÖ±Ù¼öÁ¤ÀÏÀÌ
- ¾ø´Â ¹®¼­µµ ¹Ýµå½Ã ij½¬Çϵµ·Ï ¸¸µç´Ù. ¹®¼­¿¡ ÃÖ±Ù¼öÁ¤ÀÏ°ú
- ¸¸±â½Ã°£ÀÌ ¾ø´Â °æ¿ì <code class="directive">CacheDefaultExpire</code>
- Áö½Ã¾î·Î ÁöÁ¤ÇÑ °ªÀ» ¸¸±â½Ã°£À¸·Î »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- CacheIgnoreNoLastMod On
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheLastModifiedFactor" id="CacheLastModifiedFactor">CacheLastModifiedFactor</a> <a name="cachelastmodifiedfactor" id="cachelastmodifiedfactor">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>LastModified ½Ã°£À¸·Î ¸¸±â½Ã°£À» °è»êÇϴµ¥ »ç¿ëÇÏ´Â
-°è¼ö.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheLastModifiedFactor <var>float</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheLastModifiedFactor 0.1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p>¹®¼­¿¡ ¸¸±â½Ã°£Àº ¾øÁö¸¸ ÃÖ±Ù¼öÁ¤ÀÏÀÌ ÀÖ´Â °æ¿ì ÃÖ±Ù¼öÁ¤ÀÏ
- ÀÌÈÄ Áö³­ ½Ã°£À¸·Î ¸¸±â½Ã°£À» °è»êÇÑ´Ù.
- <code class="directive">CacheLastModifiedFactor</code> Áö½Ã¾î´Â
- ¸¸±â½Ã°£À» °è»êÇÏ´Â ´ÙÀ½ °ø½Ä¿¡¼­ »ç¿ëÇÒ <var>factor</var>¸¦
- ÁöÁ¤ÇÑ´Ù:
-
- <code>expiry-period = time-since-last-modified-date * <var>factor</var>
- expiry-date = current-date + expiry-period</code>
-
- ¿¹¸¦ µé¾î, ¹®¼­°¡ 10 ½Ã°£ Àü¿¡ ¸¶Áö¸·À¸·Î ¼öÁ¤µÇ¾ú°í <var>factor</var>°¡
- 0.1À̶ó¸é ¸¸±â±â°£Àº 10*01 = 1 ½Ã°£ÀÌ µÈ´Ù. ÇöÀç ½Ã°£ÀÌ
- 3:00pmÀ̶ó¸é ¸¸±â½Ã°£Àº 3:00pm + 1½Ã°£ = 4:00pmÀÌ´Ù.
-
- ¸¸±â±â°£ÀÌ <code class="directive">CacheMaxExpire</code> º¸´Ù ±æ´Ù¸é
- <code class="directive">CacheMaxExpire</code>¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- CacheLastModifiedFactor 0.5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheMaxExpire" id="CacheMaxExpire">CacheMaxExpire</a> <a name="cachemaxexpire" id="cachemaxexpire">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¹®¼­¸¦ ij½¬ÇÏ´Â ÃÊ´ÜÀ§ ÃÖ´ë½Ã°£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheMaxExpire <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheMaxExpire 86400 (ÇÏ·ç)</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cache</td></tr>
-</table>
- <p><code class="directive">CacheMaxExpire</code> Áö½Ã¾î´Â ½ÇÁ¦ ¼­¹ö¸¦
- °Ë»çÇÏÁö¾Ê°í ij½¬°¡´ÉÇÑ HTTP ¹®¼­¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Â ÃÊ´ÜÀ§
- ÃÖ´ë½Ã°£À» ÁöÁ¤ÇÑ´Ù. Áï, ¹®¼­´Â ÃÖ´ëÇÑ ÀÌ ¼³Á¤°ª¸¸Å­ ¿À·¡µÇ¾ú´Ù.
- ¹®¼­°¡ ¸¸±â½Ã°£À» ÁöÁ¤ÇÏ¿©µµ ÀÌ ÃÖ´ë°ªÀ» ÁöŲ´Ù.</p>
-
- <div class="example"><p><code>
- CacheMaxExpire 604800
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cache.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cache.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cache.xml b/docs/manual/mod/mod_cache.xml
deleted file mode 100644
index 1f8957633e..0000000000
--- a/docs/manual/mod/mod_cache.xml
+++ /dev/null
@@ -1,335 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.17 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cache.xml.meta">
-
-<name>mod_cache</name>
-<description>Content cache keyed to URIs.</description>
-<status>Experimental</status>
-<sourcefile>mod_cache.c</sourcefile>
-<identifier>cache_module</identifier>
-
-<summary>
- <note type="warning">
- This module is experimental. Documentation is still under development...
- </note>
-
- <p><module>mod_cache</module> implements an <a
- href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> compliant HTTP
- content cache that can be used to cache either local or proxied content.
- <module>mod_cache</module> requires the services of one or more storage
- management modules. Two storage management modules are included in
- the base Apache distribution:</p>
- <dl>
- <dt><module>mod_disk_cache</module></dt>
- <dd>implements a disk based storage manager.</dd>
-
- <dt><module>mod_mem_cache</module></dt>
- <dd>implements a memory based storage manager.
- <module>mod_mem_cache</module> can be configured to operate in two
- modes: caching open file descriptors or caching objects in heap storage.
- <module>mod_mem_cache</module> can be used to cache locally generated content
- or to cache backend server content for <module>mod_proxy</module> when
- configured using <directive module="mod_proxy">ProxyPass</directive>
- (aka <dfn>reverse proxy</dfn>)</dd>
- </dl>
-
- <p>Content is stored in and retrieved from the cache using URI based keys. Content with
- access protection is not cached.</p>
-</summary>
-
-<section id="related"><title>Related Modules and Directives</title>
- <related>
- <modulelist>
- <module>mod_disk_cache</module>
- <module>mod_mem_cache</module>
- </modulelist>
- <directivelist>
- <directive module="mod_disk_cache">CacheRoot</directive>
- <directive module="mod_disk_cache">CacheSize</directive>
- <directive module="mod_disk_cache">CacheGcInterval</directive>
- <directive module="mod_disk_cache">CacheDirLevels</directive>
- <directive module="mod_disk_cache">CacheDirLength</directive>
- <directive module="mod_disk_cache">CacheExpiryCheck</directive>
- <directive module="mod_disk_cache">CacheMinFileSize</directive>
- <directive module="mod_disk_cache">CacheMaxFileSize</directive>
- <directive module="mod_disk_cache">CacheTimeMargin</directive>
- <directive module="mod_disk_cache">CacheGcDaily</directive>
- <directive module="mod_disk_cache">CacheGcUnused</directive>
- <directive module="mod_disk_cache">CacheGcClean</directive>
- <directive module="mod_disk_cache">CacheGcMemUsage</directive>
- <directive module="mod_mem_cache">MCacheSize</directive>
- <directive module="mod_mem_cache">MCacheMaxObjectCount</directive>
- <directive module="mod_mem_cache">MCacheMinObjectSize</directive>
- <directive module="mod_mem_cache">MCacheMaxObjectSize</directive>
- <directive module="mod_mem_cache">MCacheRemovalAlgorithm</directive>
- <directive module="mod_mem_cache">MCacheMaxStreamingBuffer</directive>
- </directivelist>
- </related>
-</section>
-
-<section id="sampleconf"><title>Sample Configuration</title>
- <example><title>Sample httpd.conf</title>
- #<br />
- # Sample Cache Configuration<br />
- #<br />
- LoadModule cache_module modules/mod_cache.so<br />
- <br />
- &lt;IfModule mod_cache.c&gt;<br />
- <indent>
- #LoadModule disk_cache_module modules/mod_disk_cache.so<br />
- &lt;IfModule mod_disk_cache.c&gt;<br />
- <indent>
- CacheRoot c:/cacheroot<br />
- CacheSize 256<br />
- CacheEnable disk /<br />
- CacheDirLevels 5<br />
- CacheDirLength 3<br />
- </indent>
- &lt;/IfModule&gt; <br />
- <br />
- LoadModule mem_cache_module modules/mod_mem_cache.so<br />
- &lt;IfModule mod_mem_cache.c&gt;<br />
- <indent>
- CacheEnable mem /<br />
- MCacheSize 4096<br />
- MCacheMaxObjectCount 100<br />
- MCacheMinObjectSize 1<br />
- MCacheMaxObjectSize 2048<br />
- </indent>
- &lt;/IfModule&gt;<br />
- </indent>
- &lt;/IfModule&gt;
- </example>
-</section>
-
-<directivesynopsis>
-<name>CacheEnable</name>
-<description>Enable caching of specified URLs using a specified storage
-manager</description>
-<syntax>CacheEnable <var>cache_type</var> <var>url-string</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheEnable</directive> directive instructs
- <module>mod_cache</module> to cache urls at or below
- <var>url-string</var>. The cache storage manager is specified with the
- <var>cache_type</var> argument. <var>cache_type</var> <code> mem</code>
- instructs <module>mod_cache</module> to use the memory based storage
- manager implemented by <module>mod_mem_cache</module>.
- <var>cache_type</var> <code>disk</code> instructs
- <module>mod_cache</module> to use the disk based storage manager
- implemented by <module>mod_disk_cache</module>.
- <var>cache_type</var> <code>fd</code> instructs
- <module>mod_cache</module> to use the file descriptor cache implemented
- by <module>mod_mem_cache</module>.</p>
- <p>In the event that the URL space overlaps between different
- <directive>CacheEnable</directive> directives (as in the example below),
- each possible storage manager will be run until the first one that
- actually processes the request. The order in which the storage managers are
- run is determined by the order of the <directive>CacheEnable</directive>
- directives in the configuration file.</p>
-
- <example>
- CacheEnable mem /manual<br />
- CacheEnable fd /images<br />
- CacheEnable disk /<br />
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDisable</name>
-<description>Disable caching of specified URLs</description>
-<syntax>CacheDisable <var> url-string</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheDisable</directive> directive instructs
- <module>mod_cache</module> to <em>not</em> cache urls at or below
- <var>url-string</var>.</p>
-
- <example><title>Example</title>
- CacheDisable /local_files
- </example>
-</usage>
-
-</directivesynopsis>
-<directivesynopsis>
-<name>CacheMaxExpire</name>
-<description>The maximum time in seconds to cache a document</description>
-<syntax>CacheMaxExpire <var>seconds</var></syntax>
-<default>CacheMaxExpire 86400 (one day)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheMaxExpire</directive> directive specifies the maximum number of
- seconds for which cachable HTTP documents will be retained without checking the origin
- server. Thus, documents will be out of date at most this number of seconds. This maximum
- value is enforced even if an expiry date was supplied with the document.</p>
-
- <example>
- CacheMaxExpire 604800
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDefaultExpire</name>
-<description>The default duration to cache a document when no expiry date is specified.</description>
-<syntax>CacheDefaultExpire <var>seconds</var></syntax>
-<default>CacheDefaultExpire 3600 (one hour)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheDefaultExpire</directive> directive specifies a default time,
- in seconds, to cache a document if neither an expiry date nor last-modified date are provided
- with the document. The value specified with the <directive>CacheMaxExpire</directive>
- directive does <em>not</em> override this setting.</p>
-
- <example>
- CacheDefaultExpire 86400
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheIgnoreNoLastMod</name>
-<description>Ignore the fact that a response has no Last Modified
-header.</description>
-<syntax>CacheIgnoreNoLastMod On|Off</syntax>
-<default>CacheIgnoreNoLastMod Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Ordinarily, documents without a last-modified date are not cached.
- Under some circumstances the last-modified date is removed (during
- <module>mod_include</module> processing for example) or not provided
- at all. The <directive>CacheIgnoreNoLastMod</directive> directive
- provides a way to specify that documents without last-modified dates
- should be considered for caching, even without a last-modified date.
- If neither a last-modified date nor an expiry date are provided with
- the document then the value specified by the
- <directive>CacheDefaultExpire</directive> directive will be used to
- generate an expiration date.</p>
-
- <example>
- CacheIgnoreNoLastMod On
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheIgnoreCacheControl</name>
-<description>Ignore the fact that the client requested the content not be
-cached.</description>
-<syntax>CacheIgnoreCacheControl On|Off</syntax>
-<default>CacheIgnoreCacheControl Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Ordinarily, documents with no-cache or no-store header values will not be stored in the cache.
- The <directive>CacheIgnoreCacheControl</directive> directive allows this behavior to be overridden.
- <directive>CacheIgnoreCacheControl</directive> On tells the server to attempt to cache the document
- even if it contains no-cache or no-store header values. Documents requiring authorization will
- <em>never</em> be cached.</p>
-
- <example>
- CacheIgnoreCacheControl On
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheLastModifiedFactor</name>
-<description>The factor used to compute an expiry date based on the
-LastModified date.</description>
-<syntax>CacheLastModifiedFactor <var>float</var></syntax>
-<default>CacheLastModifiedFactor 0.1</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>In the event that a document does not provide an expiry date but does
- provide a last-modified date, an expiry date can be calculated based on
- the time since the document was last modified. The
- <directive>CacheLastModifiedFactor</directive> directive specifies a
- <var>factor</var> to be used in the generation of this expiry date
- according to the following formula:
-
- <code>expiry-period = time-since-last-modified-date * <var>factor</var>
- expiry-date = current-date + expiry-period</code>
-
- For example, if the document was last modified 10 hours ago, and
- <var>factor</var> is 0.1 then the expiry-period will be set to
- 10*0.1 = 1 hour. If the current time was 3:00pm then the computed
- expiry-date would be 3:00pm + 1hour = 4:00pm.
-
- If the expiry-period would be longer than that set by
- <directive>CacheMaxExpire</directive>, then the latter takes
- precedence.</p>
-
- <example>
- CacheLastModifiedFactor 0.5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheForceCompletion</name>
-<description>Percentage of document served, after which the server
-will complete caching the file even if the request is cancelled.</description>
-<syntax>CacheForceCompletion <var>Percentage</var></syntax>
-<default>CacheForceCompletion 60</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Ordinarily, if a request is cancelled while the response is being
- cached and delivered to the client the processing of the response will
- stop and the cache entry will be removed. The
- <directive>CacheForceCompletion</directive> directive specifies a
- threshold beyond which the document will continue to be cached to
- completion, even if the request is cancelled.</p>
-
- <p>The threshold is a percentage specified as a value between
- <code>1</code> and <code>100</code>. A value of <code>0</code>
- specifies that the default be used. A value of <code>100</code>
- will only cache documents that are served in their entirety. A value
- between 60 and 90 is recommended.</p>
-
- <example>
- CacheForceCompletion 80
- </example>
-
- <note type="warning"><title>Note:</title>
- This feature is currently <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cache.xml.ko b/docs/manual/mod/mod_cache.xml.ko
deleted file mode 100644
index e73406e263..0000000000
--- a/docs/manual/mod/mod_cache.xml.ko
+++ /dev/null
@@ -1,323 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.17 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cache.xml.meta">
-
-<name>mod_cache</name>
-<description>Content cache keyed to URIs.</description>
-<status>Experimental</status>
-<sourcefile>mod_cache.c</sourcefile>
-<identifier>cache_module</identifier>
-
-<summary>
- <note type="warning">
- ÀÌ ¸ðµâÀº ½ÇÇèÀûÀÎ »óÅÂÀÌ´Ù. ¹®¼­´Â ¾ÆÁ÷ ÀÛ¾÷ÁßÀÌ´Ù...
- </note>
-
- <p><module>mod_cache</module>´Â °°Àº ÄÄÇ»ÅÍ¿¡ ÀÖ´Â ³»¿ëÀ̳ª
- ÇÁ·Ï½ÃµÈ ³»¿ëÀ» ij½¬ÇÒ ¼ö ÀÖ´Â <a
- href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>
- ȣȯ HTTP ³»¿ëij½¬¸¦ ±¸ÇöÇÑ´Ù. <module>mod_cache</module>¸¦
- »ç¿ëÇÏ·Á¸é ÀúÀå°ü¸®¸ðµâ(storage management module)ÀÌ ÇÊ¿äÇÏ´Ù.
- ±âº» ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡´Â µÎ°¡Áö ÀúÀå°ü¸®¸ðµâÀÌ ÀÖ´Ù:</p>
- <dl>
- <dt><module>mod_disk_cache</module></dt>
- <dd>´Â µð½ºÅ©±â¹Ý ÀúÀå°ü¸®ÀÚ¸¦ ±¸ÇöÇÑ´Ù.</dd>
-
- <dt><module>mod_mem_cache</module></dt>
- <dd>´Â ¸Þ¸ð¸®±â¹Ý ÀúÀå°ü¸®ÀÚ¸¦ ±¸ÇöÇÑ´Ù.
- <module>mod_mem_cache</module>´Â ÆÄÀϱâ¼úÀÚ¸¦ ij½¬Çϰųª
- Èü(heap) °ø°£¿¡ °´Ã¼¸¦ ij½¬ÇÏ´Â µÎ°¡Áö ¹æ½ÄÁß ÇÑ°¡Áö ¹æ¹ýÀ¸·Î
- µ¿ÀÛÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. <module>mod_mem_cache</module>´Â
- ÀÚ½ÅÀÌ »ý¼ºÇÑ ³»¿ëÀ» ij½¬Çϰųª, (<dfn>¿ªÇÁ·Ï½Ã(reverse proxy)</dfn>·Î
- ¾Ë·ÁÁø) <directive module="mod_proxy">ProxyPass</directive>¸¦
- »ç¿ëÇÏ¿© <module>mod_proxy</module>¸¦ À§ÇØ µÞ´Ü ¼­¹ö³»¿ëÀ»
- ij½¬ÇÒ ¼ö ÀÖ´Ù.</dd>
- </dl>
-
- <p>³»¿ëÀ» URI¸¦ Åä´ë·Î ¸¸µç Å°·Î ij½¬¿¡ ÀúÀåÇÏ°í °¡Á®¿Â´Ù.
- Á¢±Ùº¸È£°¡ µÈ ³»¿ëÀº ij½¬ÇÏÁö¾Ê´Â´Ù.</p>
-</summary>
-
-<section id="related"><title>°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾î</title>
- <related>
- <modulelist>
- <module>mod_disk_cache</module>
- <module>mod_mem_cache</module>
- </modulelist>
- <directivelist>
- <directive module="mod_disk_cache">CacheRoot</directive>
- <directive module="mod_disk_cache">CacheSize</directive>
- <directive module="mod_disk_cache">CacheGcInterval</directive>
- <directive module="mod_disk_cache">CacheDirLevels</directive>
- <directive module="mod_disk_cache">CacheDirLength</directive>
- <directive module="mod_disk_cache">CacheExpiryCheck</directive>
- <directive module="mod_disk_cache">CacheMinFileSize</directive>
- <directive module="mod_disk_cache">CacheMaxFileSize</directive>
- <directive module="mod_disk_cache">CacheTimeMargin</directive>
- <directive module="mod_disk_cache">CacheGcDaily</directive>
- <directive module="mod_disk_cache">CacheGcUnused</directive>
- <directive module="mod_disk_cache">CacheGcClean</directive>
- <directive module="mod_disk_cache">CacheGcMemUsage</directive>
- <directive module="mod_mem_cache">MCacheSize</directive>
- <directive module="mod_mem_cache">MCacheMaxObjectCount</directive>
- <directive module="mod_mem_cache">MCacheMinObjectSize</directive>
- <directive module="mod_mem_cache">MCacheMaxObjectSize</directive>
- <directive module="mod_mem_cache">MCacheRemovalAlgorithm</directive>
- <directive module="mod_mem_cache">MCacheMaxStreamingBuffer</directive>
- </directivelist>
- </related>
-</section>
-
-<section id="sampleconf"><title>¼³Á¤¿¹</title>
- <example><title>Sample httpd.conf</title>
- #<br />
- # ¿¹Á¦ ij½¬ ¼³Á¤<br />
- #<br />
- LoadModule cache_module modules/mod_cache.so<br />
- <br />
- &lt;IfModule mod_cache.c&gt;<br />
- <indent>
- #LoadModule disk_cache_module modules/mod_disk_cache.so<br />
- &lt;IfModule mod_disk_cache.c&gt;<br />
- <indent>
- CacheRoot c:/cacheroot<br />
- CacheSize 256<br />
- CacheEnable disk /<br />
- CacheDirLevels 5<br />
- CacheDirLength 3<br />
- </indent>
- &lt;/IfModule&gt; <br />
- <br />
- LoadModule mem_cache_module modules/mod_mem_cache.so<br />
- &lt;IfModule mod_mem_cache.c&gt;<br />
- <indent>
- CacheEnable mem /<br />
- MCacheSize 4096<br />
- MCacheMaxObjectCount 100<br />
- MCacheMinObjectSize 1<br />
- MCacheMaxObjectSize 2048<br />
- </indent>
- &lt;/IfModule&gt;<br />
- </indent>
- &lt;/IfModule&gt;
- </example>
-</section>
-
-<directivesynopsis>
-<name>CacheEnable</name>
-<description>ÁöÁ¤ÇÑ ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÏ¿© ÁöÁ¤ÇÑ URLÀ» ij½¬ÇÑ´Ù</description>
-<syntax>CacheEnable <var>cache_type</var> <var>url-string</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheEnable</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- <module>mod_cache</module>°¡ <var>url-string</var> ÀÌÇÏ
- urlµéÀ» ij½¬ÇÑ´Ù. ij½¬ ÀúÀå°ü¸®ÀÚ´Â <var>cache_type</var>
- ¾Æ±Ô¸ÕÆ®·Î ÁöÁ¤ÇÑ´Ù. <var>cache_type</var> <code>mem</code>Àº
- <module>mod_mem_cache</module>°¡ ±¸ÇöÇÏ´Â ¸Þ¸ð¸®±â¹Ý
- ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÑ´Ù. <var>cache_type</var> <code>disk</code>´Â
- <module>mod_disk_cache</module>°¡ ±¸ÇöÇÏ´Â µð½ºÅ©±â¹Ý
- ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÑ´Ù. <var>cache_type</var> <code>fd</code>´Â
- <module>mod_mem_cache</module>°¡ ±¸ÇöÇÏ´Â ÆÄÀϱâ¼úÀÚ Ä³½¬¸¦
- »ç¿ëÇÑ´Ù.</p>
- <p>(¾Æ·¡ ¿¹¿Í °°ÀÌ) URL °ø°£ÀÌ ´Ù¸¥
- <directive>CacheEnable</directive> Áö½Ã¾î¿Í °ãÄ¡¸é ½ÇÁ¦·Î
- ÇÑ ÀúÀå°ü¸®ÀÚ°¡ ¿äûÀ» ó¸®ÇÒ¶§±îÁö µÎ ÀúÀå°ü¸®ÀÚ¸¦ ¸ðµÎ
- ½ÇÇàÇÑ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­ <directive>CacheEnable</directive>
- Áö½Ã¾îÀÇ ¼ø¼­´ë·Î ÀúÀå°ü¸®ÀÚ°¡ ½ÇÇàµÈ´Ù.</p>
-
- <example>
- CacheEnable mem /manual<br />
- CacheEnable fd /images<br />
- CacheEnable disk /<br />
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDisable</name>
-<description>ƯÁ¤ URLÀ» ij½¬ÇÏÁö ¾Ê´Â´Ù</description>
-<syntax>CacheDisable <var> url-string</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheDisable</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- <module>mod_cache</module>°¡ <var>url-string</var> ÀÌÇÏÀÇ
- urlµéÀ» ij½¬ÇÏÁö <em>¾Ê´Â´Ù</em>.</p>
-
- <example><title>¿¹Á¦</title>
- CacheDisable /local_files
- </example>
-</usage>
-
-</directivesynopsis>
-<directivesynopsis>
-<name>CacheMaxExpire</name>
-<description>¹®¼­¸¦ ij½¬ÇÏ´Â ÃÊ´ÜÀ§ ÃÖ´ë½Ã°£</description>
-<syntax>CacheMaxExpire <var>seconds</var></syntax>
-<default>CacheMaxExpire 86400 (ÇÏ·ç)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheMaxExpire</directive> Áö½Ã¾î´Â ½ÇÁ¦ ¼­¹ö¸¦
- °Ë»çÇÏÁö¾Ê°í ij½¬°¡´ÉÇÑ HTTP ¹®¼­¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Â ÃÊ´ÜÀ§
- ÃÖ´ë½Ã°£À» ÁöÁ¤ÇÑ´Ù. Áï, ¹®¼­´Â ÃÖ´ëÇÑ ÀÌ ¼³Á¤°ª¸¸Å­ ¿À·¡µÇ¾ú´Ù.
- ¹®¼­°¡ ¸¸±â½Ã°£À» ÁöÁ¤ÇÏ¿©µµ ÀÌ ÃÖ´ë°ªÀ» ÁöŲ´Ù.</p>
-
- <example>
- CacheMaxExpire 604800
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDefaultExpire</name>
-<description>¸¸±â½Ã°£À» ÁöÁ¤ÇÏÁö¾ÊÀº ¹®¼­¸¦ ij½¬ÇÒ ±âº» ±â°£.</description>
-<syntax>CacheDefaultExpire <var>seconds</var></syntax>
-<default>CacheDefaultExpire 3600 (one hour)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheDefaultExpire</directive> Áö½Ã¾î´Â ¹®¼­ÀÇ
- ¸¸±â½Ã°£°ú ÃÖ±Ù¼öÁ¤½Ã°£ÀÌ ¾ø´Â °æ¿ì ¹®¼­¸¦ ij½¬ÇÒ ÃÊ´ÜÀ§
- ±âº» ½Ã°£À» ÁöÁ¤ÇÑ´Ù. <directive>CacheMaxExpire</directive>·Î
- ÁöÁ¤ÇÑ °ªÀÌ ÀÌ ¼³Á¤À» ¹«½ÃÇÏÁö <em>¾Ê´Â´Ù</em>.</p>
-
- <example>
- CacheDefaultExpire 86400
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheIgnoreNoLastMod</name>
-<description>ÀÀ´ä¿¡ Last Modified Çì´õ°¡ ¾ø´Ù´Â »ç½ÇÀ» ¹«½ÃÇÑ´Ù.</description>
-<syntax>CacheIgnoreNoLastMod On|Off</syntax>
-<default>CacheIgnoreNoLastMod Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>º¸Åë ÃÖ±Ù¼öÁ¤ÀÏÀÌ ¾ø´Â ¹®¼­´Â ij½¬ÇÏÁö ¾Ê´Â´Ù. ¾î¶² °æ¿ì
- ÃÖ±Ù¼öÁ¤ÀÏÀ» (¿¹¸¦ µé¾î <module>mod_include</module> ó¸®Áß¿¡)
- »©°Å³ª óÀ½ºÎÅÍ ¾ø¾úÀ» ¼ö°¡ ÀÖ´Ù.
- <directive>CacheIgnoreNoLastMod</directive> Áö½Ã¾î´Â ÃÖ±Ù¼öÁ¤ÀÏÀÌ
- ¾ø´Â ¹®¼­µµ ¹Ýµå½Ã ij½¬Çϵµ·Ï ¸¸µç´Ù. ¹®¼­¿¡ ÃÖ±Ù¼öÁ¤ÀÏ°ú
- ¸¸±â½Ã°£ÀÌ ¾ø´Â °æ¿ì <directive>CacheDefaultExpire</directive>
- Áö½Ã¾î·Î ÁöÁ¤ÇÑ °ªÀ» ¸¸±â½Ã°£À¸·Î »ç¿ëÇÑ´Ù.</p>
-
- <example>
- CacheIgnoreNoLastMod On
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheIgnoreCacheControl</name>
-<description>Ŭ¶óÀ̾ðÆ®°¡ ij½¬ÇÏÁö¾Ê´Â ³»¿ëÀ» ¿äûÇÔÀ» ¹«½ÃÇÑ´Ù.</description>
-<syntax>CacheIgnoreCacheControl On|Off</syntax>
-<default>CacheIgnoreCacheControl Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>º¸Åë no-cache³ª no-store Çì´õ°ªÀ» °¡Áø ¹®¼­´Â ij½¬¿¡
- ÀúÀåÇÏÁö¾Ê´Â´Ù. <directive>CacheIgnoreCacheControl</directive>
- Áö½Ã¾î´Â ÀÌ·± ÇൿÀ» º¯°æÇÑ´Ù.
- <directive>CacheIgnoreCacheControl</directive> OnÀ» »ç¿ëÇϸé
- ¼­¹ö´Â ¹®¼­¿¡ no-cache³ª no-store Çì´õ°ªÀÌ À־ ¹®¼­¸¦
- ij½¬ÇÑ´Ù. ÀÎÁõÀÌ ÇÊ¿äÇÑ ¹®¼­´Â <em>Àý´ë·Î</em> ij½¬ÇÏÁö
- ¾Ê´Â´Ù.</p>
-
- <example>
- CacheIgnoreCacheControl On
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheLastModifiedFactor</name>
-<description>LastModified ½Ã°£À¸·Î ¸¸±â½Ã°£À» °è»êÇϴµ¥ »ç¿ëÇÏ´Â
-°è¼ö.</description>
-<syntax>CacheLastModifiedFactor <var>float</var></syntax>
-<default>CacheLastModifiedFactor 0.1</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>¹®¼­¿¡ ¸¸±â½Ã°£Àº ¾øÁö¸¸ ÃÖ±Ù¼öÁ¤ÀÏÀÌ ÀÖ´Â °æ¿ì ÃÖ±Ù¼öÁ¤ÀÏ
- ÀÌÈÄ Áö³­ ½Ã°£À¸·Î ¸¸±â½Ã°£À» °è»êÇÑ´Ù.
- <directive>CacheLastModifiedFactor</directive> Áö½Ã¾î´Â
- ¸¸±â½Ã°£À» °è»êÇÏ´Â ´ÙÀ½ °ø½Ä¿¡¼­ »ç¿ëÇÒ <var>factor</var>¸¦
- ÁöÁ¤ÇÑ´Ù:
-
- <code>expiry-period = time-since-last-modified-date * <var>factor</var>
- expiry-date = current-date + expiry-period</code>
-
- ¿¹¸¦ µé¾î, ¹®¼­°¡ 10 ½Ã°£ Àü¿¡ ¸¶Áö¸·À¸·Î ¼öÁ¤µÇ¾ú°í <var>factor</var>°¡
- 0.1À̶ó¸é ¸¸±â±â°£Àº 10*01 = 1 ½Ã°£ÀÌ µÈ´Ù. ÇöÀç ½Ã°£ÀÌ
- 3:00pmÀ̶ó¸é ¸¸±â½Ã°£Àº 3:00pm + 1½Ã°£ = 4:00pmÀÌ´Ù.
-
- ¸¸±â±â°£ÀÌ <directive>CacheMaxExpire</directive> º¸´Ù ±æ´Ù¸é
- <directive>CacheMaxExpire</directive>¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <example>
- CacheLastModifiedFactor 0.5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheForceCompletion</name>
-<description>¿äûÀÌ Ãë¼ÒµÇ´õ¶óµµ ¼­¹ö°¡ ÆÄÀÏÀ» °è¼Ó ij½¬ÇϱâÀ§ÇØ
-ÇÊ¿äÇÑ ¹®¼­ÀÇ ¼­ºñ½º·ü.</description>
-<syntax>CacheForceCompletion <var>Percentage</var></syntax>
-<default>CacheForceCompletion 60</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>º¸Åë ÀÀ´äÀ» ij½¬ÇÏ°í Ŭ¶óÀ̾ðÆ®·Î º¸³»´Â µµÁß¿¡ ¿äûÀÌ
- Ãë¼ÒµÇ¸é ÀÀ´ä 󸮸¦ Áߴܵǰí ij½¬ Ç׸ñÀ» Áö¿î´Ù.
- <directive>CacheForceCompletion</directive> Áö½Ã¾î´Â ¿äûÀÌ
- Ãë¼ÒµÇ´õ¶óµµ ¹®¼­¸¦ °è¼Ó ij½¬ÇÒ Á¤µµ¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
- <p>Á¤µµ´Â ¹éºÐÀ²·Î ³ªÅ¸³»¸ç <code>1</code>°ú <code>100</code>
- »çÀÌÀÇ °ªÀÌ´Ù. <code>0</code> °ªÀ» ÁöÁ¤ÇÏ¸é ±âº»°ªÀ» »ç¿ëÇÑ´Ù.
- <code>100</code>Àº ³»¿ëÀ» ¸ðµÎ ¼­ºñ½ºÇÑ ¹®¼­¸¸À» ij½¬ÇÑ´Ù.
- 60°ú 90 »çÀÌÀÇ °ªÀ» ÃßõÇÑ´Ù.</p>
-
- <example>
- CacheForceCompletion 80
- </example>
-
- <note type="warning"><title>ÁÖÀÇ:</title>
- ÀÌ ±â´ÉÀº ÇöÀç ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cache.xml.meta b/docs/manual/mod/mod_cache.xml.meta
deleted file mode 100644
index 5d6a04dec8..0000000000
--- a/docs/manual/mod/mod_cache.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_cache</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_cern_meta.html b/docs/manual/mod/mod_cern_meta.html
deleted file mode 100644
index a0a4d49c4b..0000000000
--- a/docs/manual/mod/mod_cern_meta.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_cern_meta.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_cern_meta.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_cern_meta.html.en b/docs/manual/mod/mod_cern_meta.html.en
deleted file mode 100644
index a6c927b465..0000000000
--- a/docs/manual/mod/mod_cern_meta.html.en
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cern_meta - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_cern_meta</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cern_meta.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cern_meta.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>CERN httpd metafile semantics</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>cern_meta_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_cern_meta.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>Emulate the CERN HTTPD Meta file semantics. Meta files are HTTP
- headers that can be output in addition to the normal range of
- headers for each file accessed. They appear rather like the
- Apache .asis files, and are able to provide a crude way of
- influencing the Expires: header, as well as providing other
- curiosities. There are many ways to manage meta information,
- this one was chosen because there is already a large number of
- CERN users who can exploit this module.</p>
-
- <p>More information on the <a href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir">CERN metafile semantics</a> is available.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#metadir">MetaDir</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#metafiles">MetaFiles</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#metasuffix">MetaSuffix</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
-<li><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MetaDir" id="MetaDir">MetaDir</a> <a name="metadir" id="metadir">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the directory to find CERN-style meta information
-files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MetaDir <var>directory</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MetaDir .web</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cern_meta</td></tr>
-</table>
- <p>Specifies the name of the directory in which Apache can find
- meta information files. The directory is usually a 'hidden'
- subdirectory of the directory that contains the file being
- accessed. Set to "<code>.</code>" to look in the same directory
- as the file:</p>
-
- <div class="example"><p><code>MetaDir .</code></p></div>
-
- <p>Or, to set it to a subdirectory of the directory containing the
- files:</p>
-
- <div class="example"><p><code>MetaDir .meta</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MetaFiles" id="MetaFiles">MetaFiles</a> <a name="metafiles" id="metafiles">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Activates CERN meta-file processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MetaFiles on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MetaFiles off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cern_meta</td></tr>
-</table>
- <p>Turns on/off Meta file processing on a per-directory basis.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MetaSuffix" id="MetaSuffix">MetaSuffix</a> <a name="metasuffix" id="metasuffix">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File name suffix for the file containg CERN-style
-meta information</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MetaSuffix <var>suffix</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MetaSuffix .meta</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cern_meta</td></tr>
-</table>
- <p>Specifies the file name suffix for the file containing the
- meta information. For example, the default values for the two
- directives will cause a request to
- <code>DOCUMENT_ROOT/somedir/index.html</code> to look in
- <code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code> and
- will use its contents to generate additional MIME header
- information.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- MetaSuffix .meta
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cern_meta.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cern_meta.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cern_meta.html.ko.euc-kr b/docs/manual/mod/mod_cern_meta.html.ko.euc-kr
deleted file mode 100644
index 2c2de2da75..0000000000
--- a/docs/manual/mod/mod_cern_meta.html.ko.euc-kr
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cern_meta - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_cern_meta</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cern_meta.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cern_meta.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>CERN À¥¼­¹ö ¸ÞŸÆÄÀÏ Áö¿ø</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>cern_meta_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_cern_meta.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>CERN À¥¼­¹ö ¸ÞŸÆÄÀÏÀ» Èä³»³½´Ù. ¸ÞŸÆÄÀÏÀº Á¢±ÙÇÏ´Â
- ÆÄÀÏ¿¡ ´ëÇØ ÀϹÝÀûÀÎ Çì´õ¿Ü¿¡ Ãß°¡·Î Ãâ·ÂÇÒ HTTP Çì´õ¸¦
- ´ã°íÀÖ´Ù. ¾ÆÆÄÄ¡ .asis ÆÄÀÏ°ú ºñ½ÁÇÏ°í, Expires: Çì´õ¸¦
- ¼öÁ¤Çϰųª ´Ù¸¥ ½Å±âÇÑ ÀϵéÀ» ÇÒ ¼ö ÀÖ´Ù. ¸ÞŸ Á¤º¸¸¦ ´Ù·ç´Â
- ¹æ¹ýÀº ´Ù¾çÇÏÁö¸¸, ÀÌ¹Ì ÀÌ ¸ðµâÀ» »ç¿ëÇÏ´Â ¸¹Àº CERN »ç¿ëÀÚµéÀ»
- À§ÇØ ÀÌ ¹æ¹ýÀ» ¼±ÅÃÇß´Ù.</p>
-
- <p>´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir">CERN metafile semantics</a>¸¦ Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#metadir">MetaDir</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#metafiles">MetaFiles</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#metasuffix">MetaSuffix</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
-<li><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MetaDir" id="MetaDir">MetaDir</a> <a name="metadir" id="metadir">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CERN ¸ÞŸÁ¤º¸¸¦ ãÀ» µð·ºÅ丮 À̸§</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MetaDir <var>directory</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>MetaDir .web</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cern_meta</td></tr>
-</table>
- <p>¾ÆÆÄÄ¡°¡ ¸ÞŸÁ¤º¸ ÆÄÀÏÀ» ãÀ» µð·ºÅ丮¸íÀ» ÁöÁ¤ÇÑ´Ù.
- µð·ºÅ丮´Â º¸Åë Á¢±ÙÇÒ ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮ÀÇ '°¨ÃçÁø'
- ÇÏÀ§µð·ºÅ丮´Ù. "<code>.</code>"À¸·Î ÁöÁ¤ÇÏ¸é °°Àº µð·ºÅ丮¿¡¼­
- ÆÄÀÏÀ» ã´Â´Ù:</p>
-
- <div class="example"><p><code>MetaDir .</code></p></div>
-
- <p>¾Æ´Ï¸é ÆÄÀÏÀÌ ÀÖ´Â ÇÏÀ§µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>MetaDir .meta</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MetaFiles" id="MetaFiles">MetaFiles</a> <a name="metafiles" id="metafiles">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CERN ¸ÞŸÆÄÀÏÀ» ó¸®ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MetaFiles on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>MetaFiles off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cern_meta</td></tr>
-</table>
- <p>µð·ºÅ丮º°·Î ¸ÞŸÆÄÀÏ Ã³¸®¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MetaSuffix" id="MetaSuffix">MetaSuffix</a> <a name="metasuffix" id="metasuffix">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CERN ¸ÞŸÁ¤º¸¸¦ ÀúÀåÇÏ´Â ÆÄÀÏÀÇ Á¢¹Ì»ç</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MetaSuffix <var>suffix</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>MetaSuffix .meta</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cern_meta</td></tr>
-</table>
- <p>¸ÞŸÁ¤º¸¸¦ ÀúÀåÇÏ´Â ÆÄÀÏÀÇ Á¢¹Ì»ç¸¦ ÁöÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î,
- µÎ Áö½Ã¾îÀÇ ±âº»°ªÀ» »ç¿ëÇÒ °æ¿ì
- <code>DOCUMENT_ROOT/somedir/index.html</code>À» ¿äûÇϸé
- <code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code>ÀÇ
- ³»¿ëÀ» Âü°íÇÏ¿© MIME Çì´õ Á¤º¸¸¦ Ãß°¡ÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- MetaSuffix .meta
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cern_meta.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_cern_meta.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cern_meta.xml b/docs/manual/mod/mod_cern_meta.xml
deleted file mode 100644
index 77c1124ca6..0000000000
--- a/docs/manual/mod/mod_cern_meta.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cern_meta.xml.meta">
-
-<name>mod_cern_meta</name>
-<description>CERN httpd metafile semantics</description>
-<status>Extension</status>
-<sourcefile>mod_cern_meta.c</sourcefile>
-<identifier>cern_meta_module</identifier>
-
-<summary>
- <p>Emulate the CERN HTTPD Meta file semantics. Meta files are HTTP
- headers that can be output in addition to the normal range of
- headers for each file accessed. They appear rather like the
- Apache .asis files, and are able to provide a crude way of
- influencing the Expires: header, as well as providing other
- curiosities. There are many ways to manage meta information,
- this one was chosen because there is already a large number of
- CERN users who can exploit this module.</p>
-
- <p>More information on the <a
- href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir"
- >CERN metafile semantics</a> is available.</p>
-</summary>
-
-<seealso><module>mod_headers</module></seealso>
-<seealso><module>mod_asis</module></seealso>
-
-<directivesynopsis>
-<name>MetaFiles</name>
-<description>Activates CERN meta-file processing</description>
-<syntax>MetaFiles on|off</syntax>
-<default>MetaFiles off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>Turns on/off Meta file processing on a per-directory basis.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MetaDir</name>
-<description>Name of the directory to find CERN-style meta information
-files</description>
-<syntax>MetaDir <var>directory</var></syntax>
-<default>MetaDir .web</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>Specifies the name of the directory in which Apache can find
- meta information files. The directory is usually a 'hidden'
- subdirectory of the directory that contains the file being
- accessed. Set to "<code>.</code>" to look in the same directory
- as the file:</p>
-
- <example>MetaDir .</example>
-
- <p>Or, to set it to a subdirectory of the directory containing the
- files:</p>
-
- <example>MetaDir .meta</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MetaSuffix</name>
-<description>File name suffix for the file containg CERN-style
-meta information</description>
-<syntax>MetaSuffix <var>suffix</var></syntax>
-<default>MetaSuffix .meta</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>Specifies the file name suffix for the file containing the
- meta information. For example, the default values for the two
- directives will cause a request to
- <code>DOCUMENT_ROOT/somedir/index.html</code> to look in
- <code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code> and
- will use its contents to generate additional MIME header
- information.</p>
-
- <example><title>Example:</title>
- MetaSuffix .meta
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cern_meta.xml.ko b/docs/manual/mod/mod_cern_meta.xml.ko
deleted file mode 100644
index 07dd215f1e..0000000000
--- a/docs/manual/mod/mod_cern_meta.xml.ko
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cern_meta.xml.meta">
-
-<name>mod_cern_meta</name>
-<description>CERN À¥¼­¹ö ¸ÞŸÆÄÀÏ Áö¿ø</description>
-<status>Extension</status>
-<sourcefile>mod_cern_meta.c</sourcefile>
-<identifier>cern_meta_module</identifier>
-
-<summary>
- <p>CERN À¥¼­¹ö ¸ÞŸÆÄÀÏÀ» Èä³»³½´Ù. ¸ÞŸÆÄÀÏÀº Á¢±ÙÇÏ´Â
- ÆÄÀÏ¿¡ ´ëÇØ ÀϹÝÀûÀÎ Çì´õ¿Ü¿¡ Ãß°¡·Î Ãâ·ÂÇÒ HTTP Çì´õ¸¦
- ´ã°íÀÖ´Ù. ¾ÆÆÄÄ¡ .asis ÆÄÀÏ°ú ºñ½ÁÇÏ°í, Expires: Çì´õ¸¦
- ¼öÁ¤Çϰųª ´Ù¸¥ ½Å±âÇÑ ÀϵéÀ» ÇÒ ¼ö ÀÖ´Ù. ¸ÞŸ Á¤º¸¸¦ ´Ù·ç´Â
- ¹æ¹ýÀº ´Ù¾çÇÏÁö¸¸, ÀÌ¹Ì ÀÌ ¸ðµâÀ» »ç¿ëÇÏ´Â ¸¹Àº CERN »ç¿ëÀÚµéÀ»
- À§ÇØ ÀÌ ¹æ¹ýÀ» ¼±ÅÃÇß´Ù.</p>
-
- <p>´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a
- href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir"
- >CERN metafile semantics</a>¸¦ Âü°íÇ϶ó.</p>
-</summary>
-
-<seealso><module>mod_headers</module></seealso>
-<seealso><module>mod_asis</module></seealso>
-
-<directivesynopsis>
-<name>MetaFiles</name>
-<description>CERN ¸ÞŸÆÄÀÏÀ» ó¸®ÇÑ´Ù</description>
-<syntax>MetaFiles on|off</syntax>
-<default>MetaFiles off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>µð·ºÅ丮º°·Î ¸ÞŸÆÄÀÏ Ã³¸®¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MetaDir</name>
-<description>CERN ¸ÞŸÁ¤º¸¸¦ ãÀ» µð·ºÅ丮 À̸§</description>
-<syntax>MetaDir <var>directory</var></syntax>
-<default>MetaDir .web</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>¾ÆÆÄÄ¡°¡ ¸ÞŸÁ¤º¸ ÆÄÀÏÀ» ãÀ» µð·ºÅ丮¸íÀ» ÁöÁ¤ÇÑ´Ù.
- µð·ºÅ丮´Â º¸Åë Á¢±ÙÇÒ ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮ÀÇ '°¨ÃçÁø'
- ÇÏÀ§µð·ºÅ丮´Ù. "<code>.</code>"À¸·Î ÁöÁ¤ÇÏ¸é °°Àº µð·ºÅ丮¿¡¼­
- ÆÄÀÏÀ» ã´Â´Ù:</p>
-
- <example>MetaDir .</example>
-
- <p>¾Æ´Ï¸é ÆÄÀÏÀÌ ÀÖ´Â ÇÏÀ§µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù:</p>
-
- <example>MetaDir .meta</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MetaSuffix</name>
-<description>CERN ¸ÞŸÁ¤º¸¸¦ ÀúÀåÇÏ´Â ÆÄÀÏÀÇ Á¢¹Ì»ç</description>
-<syntax>MetaSuffix <var>suffix</var></syntax>
-<default>MetaSuffix .meta</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>¸ÞŸÁ¤º¸¸¦ ÀúÀåÇÏ´Â ÆÄÀÏÀÇ Á¢¹Ì»ç¸¦ ÁöÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î,
- µÎ Áö½Ã¾îÀÇ ±âº»°ªÀ» »ç¿ëÇÒ °æ¿ì
- <code>DOCUMENT_ROOT/somedir/index.html</code>À» ¿äûÇϸé
- <code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code>ÀÇ
- ³»¿ëÀ» Âü°íÇÏ¿© MIME Çì´õ Á¤º¸¸¦ Ãß°¡ÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- MetaSuffix .meta
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cern_meta.xml.meta b/docs/manual/mod/mod_cern_meta.xml.meta
deleted file mode 100644
index 7ede4771e1..0000000000
--- a/docs/manual/mod/mod_cern_meta.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_cern_meta</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_cgi.html b/docs/manual/mod/mod_cgi.html
deleted file mode 100644
index 7970a36c34..0000000000
--- a/docs/manual/mod/mod_cgi.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_cgi.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_cgi.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_cgi.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_cgi.html.en b/docs/manual/mod/mod_cgi.html.en
deleted file mode 100644
index 8b67ae6385..0000000000
--- a/docs/manual/mod/mod_cgi.html.en
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cgi - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_cgi</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgi.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Execution of CGI scripts</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>cgi_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_cgi.c</td></tr></table>
-<h3>Summary</h3>
-
-
-
- <p>Any file that has the mime type
- <code>application/x-httpd-cgi</code> or handler
- <code>cgi-script</code> (Apache 1.1 or later) will be treated
- as a CGI script, and run by the server, with its output being
- returned to the client. Files acquire this type either by
- having a name containing an extension defined by the
- <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> directive, or by being
- in a <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- directory.</p>
-
- <p>When the server invokes a CGI script, it will add a variable
- called <code>DOCUMENT_ROOT</code> to the environment. This
- variable will contain the value of the
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> configuration
- variable.</p>
-
- <p>For an introduction to using CGI scripts with Apache, see
- our tutorial on <a href="../howto/cgi.html">Dynamic Content
- With CGI</a>.</p>
-
- <p>When using a multi-threaded MPM under unix, the module
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> should be used in place of
- this module. At the user level, the two modules are essentially
- identical.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptlog">ScriptLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptloglength">ScriptLogLength</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#env">CGI Environment variables</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi-debug">CGI Debugging</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-<li><a href="../suexec.html">Running CGI programs under different user IDs</a></li>
-<li><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Specification</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="env" id="env">CGI Environment variables</a></h2>
- <p>The server will set the CGI environment variables as described
- in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
- specification</a>, with the following provisions:</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>This will not be available if the <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> directive is explicitly set to
- <code>off</code>. The default behavior, if <code class="directive">AcceptPathInfo</code> is not given, is that <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> will accept path info (trailing <code>
- /more/path/info</code> following the script filename in the URI),
- while the core server will return a 404 NOT FOUND error for requests
- with additional path info. Omitting the <code class="directive">AcceptPathInfo</code> directive has the same effect as setting
- it <code>On</code> for <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> requests.</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd>This will only be set if <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code> is set to <code>on</code> (it
- is off by default), and if a reverse DNS lookup of the accessing
- host's address indeed finds a host name.</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd>This will only be set if <code class="directive"><a href="../mod/core.html#identitycheck">IdentityCheck</a></code> is set to
- <code>on</code> and the accessing host supports the ident
- protocol. Note that the contents of this variable cannot be
- relied upon because it can easily be faked, and if there is a
- proxy between the client and the server, it is usually
- totally useless.</dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>This will only be set if the CGI script is subject to
- authentication.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi-debug" id="cgi-debug">CGI Debugging</a></h2>
- <p>Debugging CGI scripts has traditionally been difficult, mainly
- because it has not been possible to study the output (standard
- output and error) for scripts which are failing to run
- properly. These directives, included in Apache 1.2 and later,
- provide more detailed logging of errors when they occur.</p>
-
- <h3>CGI Logfile Format</h3>
- <p>When configured, the CGI error log logs any CGI which does not
- execute properly. Each CGI script which fails to operate causes
- several lines of information to be logged. The first two lines
- are always of the format:</p>
-
- <div class="example"><p><code>
- %% [<var>time</var>] <var>request-line</var><br />
- %% <var>HTTP-status</var> <var>CGI-script-filename</var>
- </code></p></div>
-
- <p>If the error is that CGI script cannot be run, the log file
- will contain an extra two lines:</p>
-
- <div class="example"><p><code>
- %%error<br />
- <var>error-message</var>
- </code></p></div>
-
- <p>Alternatively, if the error is the result of the script
- returning incorrect header information (often due to a bug in
- the script), the following information is logged:</p>
-
- <div class="example"><p><code>
- %request<br />
- <var>All HTTP request headers received</var><br />
- <var>POST or PUT entity (if any)</var><br />
- %response<br />
- <var>All headers output by the CGI script</var><br />
- %stdout<br />
- <var>CGI standard output</var><br />
- %stderr<br />
- <var>CGI standard error</var><br />
- </code></p></div>
-
- <p>(The %stdout and %stderr parts may be missing if the script did
- not output anything on standard output or standard error).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the CGI script error logfile</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>The <code class="directive">ScriptLog</code> directive sets the CGI
- script error logfile. If no <code class="directive">ScriptLog</code> is given,
- no error log is created. If given, any CGI errors are logged into the
- filename given as argument. If this is a relative file or path it is
- taken relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.
- </p>
-
- <div class="example"><h3>Example</h3><p><code>
- ScriptLog logs/cgi_log
- </code></p></div>
-
- <p>This log will be opened as the user the child processes run
- as, <em>i.e.</em> the user specified in the main <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> directive. This means that
- either the directory the script log is in needs to be writable
- by that user or the file needs to be manually created and set
- to be writable by that user. If you place the script log in
- your main logs directory, do <strong>NOT</strong> change the
- directory permissions to make it writable by the user the child
- processes run as.</p>
-
- <p>Note that script logging is meant to be a debugging feature
- when writing CGI scripts, and is not meant to be activated
- continuously on running servers. It is not optimized for speed
- or efficiency, and may have security problems if used in a
- manner other than that for which it was designed.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLogBuffer <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>The size of any PUT or POST entity body that is logged to
- the file is limited, to prevent the log file growing too big
- too quickly if large bodies are being received. By default, up
- to 1024 bytes are logged, but this can be changed with this
- directive.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size limit of the CGI script logfile</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLogLength</code> can be used to limit the
- size of the CGI script logfile. Since the logfile logs a lot of
- information per CGI error (all request headers, all script output)
- it can grow to be a big file. To prevent problems due to unbounded
- growth, this directive can be used to set an maximum file-size for
- the CGI logfile. If the file exceeds this size, no more
- information will be written to it.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgi.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cgi.html.ja.euc-jp b/docs/manual/mod/mod_cgi.html.ja.euc-jp
deleted file mode 100644
index 617216afa5..0000000000
--- a/docs/manual/mod/mod_cgi.html.ja.euc-jp
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cgi - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_cgi</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>cgi_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_cgi.c</td></tr></table>
-<h3>³µÍ×</h3>
-
-
-
- <p>Mime ¥¿¥¤¥×¤¬ <code>application/x-httpd-cgi</code>
- ¤Ç¤¢¤ë¤«¡¢¥Ï¥ó¥É¥é <code>cgi-script</code> (Apache 1.1 °Ê¹ß)
- ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Ï CGI ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ°·¤ï¤ì¡¢
- ¥µ¡¼¥Ð¤Ë¤è¤ê¼Â¹Ô¤µ¤ì¡¢¤½¤Î½ÐÎϤ¬¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤µ¤ì¤Þ¤¹¡£
- ¥Õ¥¡¥¤¥ë¤Ï¡¢<code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë»ØÄꤵ¤ì¤¿ ³ÈÄ¥»Ò¤ò̾Á°¤Ë´Þ¤à¤«¡¢
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¸ºß¤¹¤ë¤³¤È¤Ë¤è¤ê¤³¤Î¥¿¥¤¥×¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¤¬ CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¤È¤­¤Ë¤Ï¡¢
- <code>DOCUMENT_ROOT</code>
- ¤È¸Æ¤Ð¤ì¤ëÊÑ¿ô¤ò´Ä¶­¤ËÄɲä·¤Þ¤¹¡£¤³¤ÎÊÑ¿ô¤Ï
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤ÎÃͤòÊÝ»ý¤·¤Þ¤¹¡£</p>
-
- <p>Apache ¤Ç CGI ¥¹¥¯¥ê¥×¥È¤ò»ÈÍѤ¹¤ë¤¿¤á¤Î¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó¤Ï¡¢
- <a href="../howto/cgi.html">CGI ¤Ë¤è¤ëưŪ¥³¥ó¥Æ¥ó¥Ä</a>
- ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>Unix ¤Ç¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Î MPM ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Î
- Âå¤ï¤ê¤Ë <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> ¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- ¥æ¡¼¥¶¥ì¥Ù¥ë¤Ç¤Ï¤³¤ÎÆó¤Ä¤Î¥â¥¸¥å¡¼¥ë¤ÏËܼÁŪ¤Ë¤ÏƱ°ì¤Ç¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptlog">ScriptLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptloglength">ScriptLogLength</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#env">CGI ´Ä¶­ÊÑ¿ô</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi-debug">CGI ¤Î¥Ç¥Ð¥Ã¥°</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-<li><a href="../suexec.html">CGI ¥×¥í¥°¥é¥à¤òÊ̤Υ桼¥¶ ID ¤Ç¼Â¹Ô¤¹¤ë</a></li>
-<li><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI µ¬³Ê½ñ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="env" id="env">CGI ´Ä¶­ÊÑ¿ô</a></h2>
- <p>¥µ¡¼¥Ð¤Ï <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
- µ¬³Ê</a> ¤Ç·è¤á¤é¤ì¤Æ¤¤¤ë CGI
- ´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¤Þ¤¹¡£°Ê²¼¤Î¤â¤Î¤Ï¡¢¾ò·ïÉÕ¤­¤ÇÀßÄꤵ¤ì¤Þ¤¹¡£</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>¤³¤ì¤Ï <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ÌÀ¼¨Åª¤Ë <code>off</code>
- ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤ÏÀßÄꤵ¤ì¤Þ¤»¤ó¡£¥Ç¥Õ¥©¥ë¥È¤Î¡¢
- <code class="directive">AcceptPathInfo</code> ¤¬
- »ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Î¿¶¤ëÉñ¤¤¤Ç¤Ï¡¢<code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤Ï¥Ñ¥¹¾ðÊó
- (URI ¤Î¥¹¥¯¥ê¥×¥È¤Î¥Õ¥¡¥¤¥ë̾¤Î¸å¤Ë³¤¯ <code>/more/path/info</code>) ¤ò
- ¼õ¤±ÉÕ¤±¤Þ¤¹¤¬¡¢¥³¥¢¤Ï¥µ¡¼¥Ð¤Ï¥Ñ¥¹¾ðÊó¤Î¤¢¤ë¥ê¥¯¥¨¥¹¥È¤Ë
- ÂФ·¤Æ 404 NOT FOUND ¥¨¥é¡¼¤òÊÖ¤·¤Þ¤¹¡£<code class="directive">AcceptPathInfo</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ¾Êά¤¹¤ë¤È¡¢<code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ
- <code>On</code> ¤ò
- ÀßÄꤷ¤¿¤Î¤ÈƱ¤¸¸ú²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd><code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code>
- ¤¬ <code>on</code> (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï off ¤Ç¤¹)
- ¤Ç¡¢¥¢¥¯¥»¥¹¤·¤Æ¤¤¤ë¥Û¥¹¥È¤Î¥¢¥É¥ì¥¹¤Î DNS
- ¤ÎµÕ°ú¤­¤¬¼ÂºÝ¤Ë¥Û¥¹¥È̾¤ò¸«¤Ä¤±¤¿¤È¤­¤Ë¤Î¤ßÀßÄꤵ¤ì¤Þ¤¹¡£</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd><code class="directive"><a href="../mod/core.html#identitycheck">IdentityCheck</a></code>
- ¤¬ <code>on</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤Æ¡¢¥¢¥¯¥»¥¹¤·¤Æ¤¤¤ë¥Û¥¹¥È¤¬
- ident ¥×¥í¥È¥³¥ë¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤È¤­¤Ë¤Î¤ßÀßÄꤵ¤ì¤Þ¤¹¡£
- ¤³¤ì¤Ï´Êñ¤Ëµ¶¤ë¤³¤È¤¬¤Ç¤­¡¢¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤Î´Ö¤Ë
- ¥×¥í¥­¥·¤¬¤¢¤ì¤Ð¤Þ¤Ã¤¿¤¯Ìò¤ËΩ¤¿¤Ê¤¤¤Î¤Ç¡¢
- ¤³¤ÎÊÑ¿ô¤ÎÃͤϿ®ÍѤǤ­¤Ê¤¤¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- </dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>CGI
- ¥¹¥¯¥ê¥×¥È¤Ëǧ¾Ú¤¬É¬ÍפʤȤ­¤Ë¤Î¤ßÀßÄꤵ¤ì¤Þ¤¹¡£</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi-debug" id="cgi-debug">CGI ¤Î¥Ç¥Ð¥Ã¥°</a></h2>
- <p>CGI ¥¹¥¯¥ê¥×¥È¤Î¥Ç¥Ð¥Ã¥°¤Ï¡¢Àµ¤·¤¯Æ°ºî¤·¤Æ¤¤¤Ê¤¤¥¹¥¯¥ê¥×¥È¤Î½ÐÎÏ
- (ɸ½à½ÐÎϤȥ¨¥é¡¼)
- ¤òÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤¿¤á¤Ë¡¢Æñ¤·¤¤¾õÂÖ¤¬Â³¤¤¤Æ¤¤¤Þ¤·¤¿¡£
- ¤³¤ì¤é¤Î Apache 1.2 °Ê¹ß¤Ë¤¢¤ë
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤è¤ê¾ÜºÙ¤Ê¥¨¥é¡¼¤Î¥í¥°¼ý½¸¤òÄ󶡤·¤Þ¤¹¡£</p>
-
- <h3>CGI ¥í¥°¥Õ¥¡¥¤¥ë¤Î½ñ¼°</h3>
- <p>ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤­¤Ë¤Ï¡¢CGI ¥¨¥é¡¼¥í¥°¤ÏŬÀÚ¤ËÆ°ºî¤·¤Ê¤¤¤¹¤Ù¤Æ¤Î
- CGI ¤ò¥í¥°¼ý½¸¤·¤Þ¤¹¡£¤½¤ì¤¾¤ì¤ÎÀµ¤·¤¯Æ°ºî¤·¤Ê¤¤ CGI
- ¥¹¥¯¥ê¥×¥È¤Ï Ê£¿ô¤Î¹Ô¤Ë¤ï¤¿¤ë¾ðÊó¤¬¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹¡£ºÇ½é¤Î
- 2 ¹Ô¤Ï¾ï¤Ë°Ê²¼¤Î½ñ¼°¤Ç¤¹:</p>
-
- <div class="example"><p><code>
- %% [<var>time</var>] <var>request-line</var><br />
- %% <var>HTTP-status</var> <var>CGI-script-filename</var>
- </code></p></div>
-
- <p>¥¨¥é¡¼¤¬¡¢CGI ¥¹¥¯¥ê¥×¥È¤¬¼Â¹Ô¤Ç¤­¤Ê¤¤¤È¤¤¤¦¤â¤Î¤Ç¤¢¤ë¾ì¹ç¤Ï¡¢
- ¥í¥°¥Õ¥¡¥¤¥ë¤Ï¤µ¤é¤Ë¤â¤¦ 2 ¹Ô½ñ¤«¤ì¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- %%error<br />
- <var>error-message</var>
- </code></p></div>
-
- <p>¤½¤¦¤Ç¤Ï¤Ê¤¯¡¢¥¨¥é¡¼¤¬Àµ¤·¤¯¤Ê¤¤¥Ø¥Ã¥À¾ðÊó¤òÊÖ¤¹·ë²Ì¤Ç¤¢¤ë¾ì¹ç
- (¥¹¥¯¥ê¥×¥È¤Î¥Ð¥°¤Ç¤¢¤ë¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹)¡¢
- °Ê²¼¤Î¾ðÊó¤¬¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- %request<br />
- <var>¼õ¤±¼è¤Ã¤¿¤¹¤Ù¤Æ¤Î HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À</var><br />
- <var>(¤â¤·¤¢¤ì¤Ð) POST ¤ä PUT ¤ÎÃæ¿È</var><br />
- %response<br />
- <var>CGI ¥¹¥¯¥ê¥×¥È¤Ë¤è¤ê½ÐÎϤµ¤ì¤¿¤¹¤Ù¤Æ¤Î¥Ø¥Ã¥À</var><br />
- %stdout<br />
- <var>CGI ɸ½à½ÐÎÏ</var><br />
- %stderr<br />
- <var>CGI ɸ½à¥¨¥é¡¼</var><br />
- </code></p></div>
-
- <p>(¥¹¥¯¥ê¥×¥È¤¬É¸½à½ÐÎϤäɸ½à¥¨¥é¡¼¤Ë²¿¤â½ÐÎϤ·¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢
- %stdout ¤ä %stderr ¤Ï¤¢¤ê¤Þ¤»¤ó)¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥¹¥¯¥ê¥×¥È¤Î¥¨¥é¡¼¥í¥°¥Õ¥¡¥¤¥ë¤Î¾ì½ê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï CGI ¥¹¥¯¥ê¥×¥È¤Î
- ¥¨¥é¡¼¥í¥°¥Õ¥¡¥¤¥ë¤òÀßÄꤷ¤Þ¤¹¡£<code class="directive">ScriptLog</code> ¤¬
- ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¡¢
- ¥¨¥é¡¼¥í¥°¤ÏºîÀ®¤µ¤ì¤Þ¤»¤ó¡£ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢CGI
- ¤Î¥¨¥é¡¼¤Ï¤¹¤Ù¤Æ°ú¿ô¤È¤·¤ÆÍ¿¤¨¤é¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë̾¤Ë¥í¥°¤µ¤ì¤Þ¤¹¡£
- ÁêÂХѥ¹¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ
- °·¤ï¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ScriptLog logs/cgi_log
- </code></p></div>
-
- <p>¤³¤Î¥í¥°¤Ï»Ò¥×¥í¥»¥¹¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¥æ¡¼¥¶¤È¤·¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤Þ¤¹¡£
- <em>¤¹¤Ê¤ï¤Á</em>¡¢<code class="directive"><a href="../mod/mpm_commmon.html#user">User</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿
- ¥æ¡¼¥¶¤Ç¤¹¡£¤³¤ì¤Ï¡¢¥¹¥¯¥ê¥×¥È¥í¥°¤¬½ñ¤«¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤¬¤½¤Î¥æ¡¼¥¶¤Ç
- ½ñ¤­¹þ¤ß²Äǽ¤«¡¢¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤¬¼êÆ°¤ÇºîÀ®¤µ¤ì¡¢¤½¤Î¥æ¡¼¥¶¤Ç
- ½ñ¤­¹þ¤ß²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£¥¹¥¯¥ê¥×¥È¥í¥°¤ò
- ¥¢¥¯¥»¥¹¥í¥°¤Ê¤É¤Î¤¿¤á¤Î¥í¥°¥Ç¥£¥ì¥¯¥È¥ê¤Ë½ñ¤«¤ì¤ë¤è¤¦¤Ë¤·¤¿¤È¤­¤Ï¡¢
- ¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò»Ò¥×¥í¥»¥¹¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥æ¡¼¥¶¤Î¸¢¸Â¤Ç
- ½ñ¤­¹þ¤ß²Äǽ¤Ë¤Ï<strong>¤·¤Ê¤¤</strong>¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¥¹¥¯¥ê¥×¥È¤Î¥í¥°¼ý½¸¤Ï CGI ¥¹¥¯¥ê¥×¥È¤ò½ñ¤¯¤È¤­¤Î
- ¥Ç¥Ð¥Ã¥°ÍѤε¡Ç½¤È¤·¤Æ°Õ¿Þ¤µ¤ì¤Æ¤¤¤Æ¡¢Ä̾ï¤Î¥µ¡¼¥Ð¤Ç
- ¾ï¤Ë»ÈÍѤµ¤ì¤ë¤è¤¦¤Ë¤Ï°Õ¿Þ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ®ÅÙ¤ä¸úΨ¤ÏºÇŬ²½¤µ¤ì¤Æ¤ª¤é¤º¡¢À߷פµ¤ì¤¿°Ê³°¤ÎÊýË¡¤Ç»ÈÍѤµ¤ì¤ë¤È
- ¥»¥­¥å¥ê¥Æ¥£¤ÎÌäÂ꤬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¹¥¯¥ê¥×¥È¥í¥°¤Ëµ­Ï¿¤µ¤ì¤ë PUT ¤ä POST ¥ê¥¯¥¨¥¹¥È¤ÎÆâÍƤξå¸Â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptLogBuffer <em>bytes</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>Â礭¤ÊËÜÂΤò¼õ¤±¼è¤Ã¤¿¤È¤­¤Ë¥í¥°¥Õ¥¡¥¤¥ë¤¬¤¹¤°¤ËÂ礭¤¯¤Ê¤ê¤¹¤®¤ë
- ÌäÂê¤òÈò¤±¤ë¤¿¤á¤Ë¡¢¥Õ¥¡¥¤¥ë¤Ë¥í¥°¼ý½¸¤µ¤ì¤ë PUT ¤È POST
- ¤ÎËÜÂΤÎÂ礭¤µ¤ÏÀ©¸Â¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢1024
- ¥Ð¥¤¥È¤Þ¤Ç¤¬¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹¤¬¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤ì¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- </p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥¹¥¯¥ê¥×¥È¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ¤Î¾å¸Â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLogLength</code> ¤Ï CGI ¥¹¥¯¥ê¥×¥È¤Î¥í¥°¥Õ¥¡¥¤¥ë
- ¤ÎÂ礭¤µ¤òÀ©¸Â¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥í¥°¥Õ¥¡¥¤¥ë¤Ï
- CGI ¤Î¥¨¥é¡¼Ëè¤ËÂçÎ̤ξðÊó (¥ê¥¯¥¨¥¹¥È¤Î¤¹¤Ù¤Æ¤Î¥Ø¥Ã¥À¡¢
- ¤¹¤Ù¤Æ¤Î½ÐÎÏ)¤ò¥í¥°¤·¤Þ¤¹¤Î¤Ç¡¢¤¹¤°¤ËÂ礭¤Ê¥Õ¥¡¥¤¥ë¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤³¤ÎÂ礭¤µ¤ÎÀ©¸Â¤¬¤Ê¤¤¤³¤È¤Ë¤è¤ëÌäÂê¤òËɤ°¤¿¤á¤Ë¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ CGI ¤Î¥í¥°¥Õ¥¡¥¤¥ë¤Î
- ºÇÂç¤Î¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥Õ¥¡¥¤¥ë¤¬¤³¤ÎÂ礭¤µ¤òĶ¤¨¤¿¾ì¹ç¤Ï¡¢¤½¤ì°Ê¾å¤Ï½ñ¤­¹þ¤Þ¤ì¤Þ¤»¤ó¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cgi.html.ko.euc-kr b/docs/manual/mod/mod_cgi.html.ko.euc-kr
deleted file mode 100644
index 2efd4537ea..0000000000
--- a/docs/manual/mod/mod_cgi.html.ko.euc-kr
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cgi - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_cgi</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ½ÇÇà</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>cgi_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_cgi.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
-
- <p>¼­¹ö´Â mime typeÀÌ <code>application/x-httpd-cgi</code>À̰ųª
- (¾ÆÆÄÄ¡ 1.1 ÀÌÈÄ) Çڵ鷯°¡ <code>cgi-script</code>ÀÎ ¸ðµç
- ÆÄÀÏÀ» CGI ½ºÅ©¸³Æ®·Î ÀνÄÇÏ¿©, ½ÇÇàÇÏ°í, ±× °á°ú¸¦ Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³½´Ù. ÆÄÀÏÀÌ <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>
- Áö½Ã¾î·Î ÁöÁ¤ÇÑ È®ÀåÀÚ¸¦ °¡Áö°Å³ª, <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> µð·ºÅ丮 ¾È¿¡
- ÀÖÀ¸¸é CGI·Î 󸮵ȴÙ.</p>
-
- <p>¼­¹ö´Â CGI ½ºÅ©¸³Æ®¸¦ ºÎ¸¦¶§ <code>DOCUMENT_ROOT</code>¶ó´Â
- ȯ°æº¯¼ö¸¦ Ãß°¡ÇÑ´Ù. ÀÌ º¯¼ö´Â <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> ¼³Á¤°ªÀ» °¡Áø´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡¼­ CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼Ò°³´Â
- <a href="../howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a> ÅõÅ丮¾óÀ»
- Âü°íÇ϶ó.</p>
-
- <p>À¯´Ð½º¿¡¼­ ´ÙÁß¾²·¹µå MPMÀ» »ç¿ëÇÑ´Ù¸é ÀÌ ¸ðµâ´ë½Å
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> ¸ðµâÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ
- ÀÔÀå¿¡¼­ ÀÌ µÎ ¸ðµâÀº ±âº»ÀûÀ¸·Î µ¿ÀÏÇÏ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptlog">ScriptLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptloglength">ScriptLogLength</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#env">CGI ȯ°æº¯¼ö</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi-debug">CGI µð¹ö±ë</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li>
-<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
-<li><a href="../suexec.html">´Ù¸¥ »ç¿ëÀÚ ID·Î CGI ÇÁ·Î±×·¥
-½ÇÇàÇϱâ</a></li>
-<li><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Ç¥ÁØ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="env" id="env">CGI ȯ°æº¯¼ö</a></h2>
- <p>¼­¹ö´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Ç¥ÁØ</a>ÀÌ ¼³¸íÇÏ´Â
- CGI ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù:</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>ÀÌ º¯¼ö´Â <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> Áö½Ã¾î¸¦ Á÷Á¢ <code>off</code>·Î
- ÁöÁ¤ÇÑ °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù. <code class="directive">AcceptPathInfo</code>°¡ ¾ø´Â °æ¿ì ¼­¹ö´Â ±âº»ÀûÀ¸·Î
- °æ·Î Á¤º¸°¡ ÀÖ´Â ¿äû¿¡ ´ëÇØ 404 NOT FOUND ¿À·ù¸¦ ³»Áö¸¸,
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>´Â °æ·Î Á¤º¸¸¦ (URI¿¡¼­ ½ºÅ©¸³Æ®
- ÆÄÀÏ¸í µÚ¿¡ ³ª¿À´Â <code>/more/path/info</code>) ¹Þ´Â´Ù.
- <code class="directive">AcceptPathInfo</code> Áö½Ã¾î¸¦ »ý·«Çϸé
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¿äû¿¡ ´ëÇؼ­ <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>¸¦ <code>On</code>À¸·Î
- ¼³Á¤ÇÑ °Í°ú °°´Ù.</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd>ÀÌ º¯¼ö´Â <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code>°¡ <code>on</code>ÀÌ°í (±âº»°ªÀº
- off), Á¢¼ÓÇÑ È£½ºÆ® ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÇÏ¿© ½ÇÁ¦ È£½ºÆ®¸íÀ»
- ãÀº °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù.</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd>ÀÌ º¯¼ö´Â <code class="directive"><a href="../mod/core.html#identitycheck">IdentityCheck</a></code>°¡ <code>on</code>ÀÌ°í, Á¢¼ÓÇÑ
- È£½ºÆ®°¡ ident ÇÁ·ÎÅäÄÝÀ» Áö¿øÇÏ´Â °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù.
- ½±°Ô ÀÌ °ªÀ» ¼ÓÀÏ ¼ö Àֱ⶧¹®¿¡ ÀÌ º¯¼öÀÇ ³»¿ëÀ» ¹ÏÀ¸¸é
- ¾ÈµÇ°í, Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö »çÀÌ¿¡ ÇÁ·Ï½Ã°¡ ÀÖ´Ù¸é º¯¼ö
- ³»¿ëÀÌ ¿ÏÀüÈ÷ ¹«ÀǹÌÇÔÀ» ÁÖÀÇÇ϶ó.</dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>CGI ½ºÅ©¸³Æ®°¡ ÀÎÁõÀ» °ÅÃľßÇÏ´Â °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi-debug" id="cgi-debug">CGI µð¹ö±ë</a></h2>
- <p>¾îµð¿¡¼­ À߸ø ½ÇÇàµÇ´ÂÁö ½ºÅ©¸³Æ®ÀÇ Ãâ·ÂÀ» (Ç¥ÁØÃâ·Â°ú
- Ç¥ÁØ¿À·ù) º¼ ¼ö ¾ø±â¶§¹®¿¡ CGI ½ºÅ©¸³Æ®´Â ÀüÅëÀûÀ¸·Î µð¹ö±ëÇϱâ
- ¾î·Á¿ü´Ù. ¾ÆÆÄÄ¡ 1.2 ÀÌÈÄ¿¡ Ãß°¡µÈ Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ¹ß»ýÇÑ
- ¿À·ù¸¦ ÀÚ¼¼È÷ ·Î±×¿¡ ³²±æ ¼ö ÀÖ´Ù.</p>
-
- <h3>CGI ·Î±×ÆÄÀÏ Çü½Ä</h3>
- <p>CGI ¿À·ù·Î±×´Â Á¤»óÀûÀ¸·Î ½ÇÇàÇÏÁö ¸øÇÑ CGI¸¦ ±â·ÏÇÑ´Ù.
- ¿À·ù°¡ ¹ß»ýÇÑ CGI ½ºÅ©¸³Æ®´Â ·Î±×¿¡ ¿©·¯ ÁÙÀÇ Á¤º¸¸¦ ³²±ä´Ù.
- ù¹ø° µÎ ÁÙÀº Ç×»ó ¾Æ·¡¿Í °°Àº Çü½ÄÀÌ´Ù:</p>
-
- <div class="example"><p><code>
- %% [<var>½Ã°£</var>] <var>¿äûÁÙ</var><br />
- %% <var>HTTP-»óÅÂ</var> <var>CGI-½ºÅ©¸³Æ®-ÆÄÀϸí</var>
- </code></p></div>
-
- <p>CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø´Â ¿À·ùÀÎ °æ¿ì ·Î±×ÆÄÀÏ¿¡
- Ãß°¡·Î µÎ ÁÙÀ» ´õ ±â·ÏÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- %%error<br />
- <var>¿À·ù¹®</var>
- </code></p></div>
-
- <p>½ºÅ©¸³Æ®°¡ (º¸Åë ½ºÅ©¸³Æ®ÀÇ ¹ö±×¶§¹®¿¡) À߸øµÈ Çì´õ
- Á¤º¸¸¦ ¹ÝȯÇÏ´Â °æ¿ì, ´ÙÀ½ ³»¿ëÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- %request<br />
- <var>¹ÞÀº ¸ðµç HTTP Çì´õ</var><br />
- <var>(ÀÖ´Ù¸é) POST³ª PUT ³»¿ë</var><br />
- %response<br />
- <var>CGI ½ºÅ©¸³Æ® Ãâ·ÂÀÇ ¸ðµç Çì´õ</var><br />
- %stdout<br />
- <var>CGI Ç¥ÁØÃâ·Â</var><br />
- %stderr<br />
- <var>CGI Ç¥ÁØ¿À·ù</var><br />
- </code></p></div>
-
- <p>(½ºÅ©¸³Æ®°¡ Ç¥ÁØÃâ·ÂÀ̳ª Ç¥ÁØ¿À·ù¿¡ ¾Æ¹« ³»¿ëµµ Ãâ·ÂÇÏÁö
- ¾Ê¾Ò´Ù¸é %stdout°ú %stderr ºÎºÐÀº »ý·«µÉ ¼ö ÀÖ´Ù).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLog" id="ScriptLog">ScriptLog</a> <a name="scriptlog" id="scriptlog">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLog <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLog</code> Áö½Ã¾î´Â CGI ½ºÅ©¸³Æ®
- ¿À·ù·Î±×ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. <code class="directive">ScriptLog</code>¸¦
- »ç¿ëÇÏÁö¾ÊÀ¸¸é ¿À·ù·Î±×¸¦ ¸¸µéÁö ¾Ê´Â´Ù. »ç¿ëÇÏ¸é ¾Æ±Ô¸ÕÆ®·Î
- ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ CGI ¿À·ù¸¦ ±â·ÏÇÑ´Ù. »ó´ë°æ·Î¸¦ ÁöÁ¤Çϸé
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë°æ·Î·Î
- ¹Þ¾ÆµéÀδÙ.
- </p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ScriptLog logs/cgi_log
- </code></p></div>
-
- <p>ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ, <em>Áï</em> <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> Áö½Ã¾î·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ
- ±ÇÇÑÀ¸·Î ·Î±×¸¦ ¿¬´Ù. ±×·¡¼­ ±× »ç¿ëÀÚ°¡ ½ºÅ©¸³Æ® ·Î±×°¡
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ ÀÖ´øÁö, Á÷Á¢ ¹Ì¸® ÆÄÀÏÀ» ¸¸µé¾î¼­
- ±× »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ» Áà¾ß ÇÑ´Ù. ½ºÅ©¸³Æ® ·Î±×¸¦ ÁÖ ·Î±×
- µð·ºÅ丮¿¡ µÐ´Ù¸é ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ»
- ÁÖ±âÀ§ÇØ µð·ºÅ丮 ±ÇÇÑÀ» º¯°æÇÏÁö <strong>¸¶¶ó</strong>.</p>
-
- <p>½ºÅ©¸³Æ® ·Î±×´Â CGI ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ¶§ µð¹ö±ëÀ» À§ÇÑ
- ¿ëµµÀÌÁö ¼­¹ö¸¦ ½ÇÇàÇÏ´Â µ¿¾È °è¼Ó »ç¿ëÇϱâÀ§ÇÔÀÌ ¾Æ´ÔÀ»
- ÁÖÀÇÇ϶ó. ¼Óµµ¿Í È¿À²¼º¸é¿¡¼­ ÃÖÀûÈ­°¡ ¾ÈµÇÀÖ°í, ¼³°èÇÑ
- ¸ñÀûÀÌ¿ÜÀÇ ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é º¸¾È»ó ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogBuffer" id="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer" id="scriptlogbuffer">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLogBuffer <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptLogBuffer 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p>Å« ³»¿ëÀ» ¹Þ¾Æ¼­ ·Î±×ÆÄÀÏÀÌ ³Ê¹« »¡¸® Ä¿Áö´Â Çö»óÀ» ¸·±âÀ§ÇØ
- ÆÄÀÏ¿¡ ±â·ÏÇÒ PUT ȤÀº POST ³»¿ëÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. ±âº»ÀûÀ¸·Î
- 1024 ¹ÙÀÌÆ®±îÁö ·Î±×¿¡ ±â·ÏÇÏÁö¸¸, ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptLogLength" id="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength" id="scriptloglength">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptLogLength <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptLogLength 10385760</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></td></tr>
-</table>
- <p><code class="directive">ScriptLogLength</code>´Â CGI ½ºÅ©¸³Æ®
- ·Î±×ÆÄÀÏÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. CGI ¿À·ù°¡ ¹ß»ýÇÒ¶§¸¶´Ù (¸ðµç
- ¿äû Çì´õ, ¸ðµç ½ºÅ©¸³Æ® Ãâ·Â µî) ¸¹Àº Á¤º¸°¡ ·Î±×¿¡
- ±â·ÏµÇ±â¶§¹®¿¡ ÆÄÀÏÀÌ ¸Å¿ì Ä¿Áú ¼ö ÀÖ´Ù. ÆÄÀÏÀÌ ¹«ÇÑÈ÷ Ä¿Áö´Â
- ¹®Á¦¸¦ ¸·±âÀ§ÇØ ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© CGI ·Î±×ÆÄÀÏÀÇ ÃÖ´ë
- ÆÄÀÏÅ©±â¸¦ ¼³Á¤ÇÑ´Ù. ÆÄÀÏÀÇ Å©±â°¡ ¼³Á¤ÇÑ °ªÀ» ³ÑÀ¸¸é ´õ
- ÀÌ»ó Á¤º¸¸¦ ±â·ÏÇÏÁö¾Ê´Â´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgi.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cgi.xml b/docs/manual/mod/mod_cgi.xml
deleted file mode 100644
index 99ea19f225..0000000000
--- a/docs/manual/mod/mod_cgi.xml
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cgi.xml.meta">
-
-<name>mod_cgi</name>
-<description>Execution of CGI scripts</description>
-<status>Base</status>
-<sourcefile>mod_cgi.c</sourcefile>
-<identifier>cgi_module</identifier>
-
-<summary>
- <!-- XXX: Should mention Options ExecCGI
- is the link to howto/cgi not sufficient? -nd
- -->
-
- <p>Any file that has the mime type
- <code>application/x-httpd-cgi</code> or handler
- <code>cgi-script</code> (Apache 1.1 or later) will be treated
- as a CGI script, and run by the server, with its output being
- returned to the client. Files acquire this type either by
- having a name containing an extension defined by the
- <directive module="mod_mime">AddType</directive> directive, or by being
- in a <directive module="mod_alias">ScriptAlias</directive>
- directory.</p>
-
- <p>When the server invokes a CGI script, it will add a variable
- called <code>DOCUMENT_ROOT</code> to the environment. This
- variable will contain the value of the
- <directive module="core">DocumentRoot</directive> configuration
- variable.</p>
-
- <p>For an introduction to using CGI scripts with Apache, see
- our tutorial on <a href="../howto/cgi.html">Dynamic Content
- With CGI</a>.</p>
-
- <p>When using a multi-threaded MPM under unix, the module
- <module>mod_cgid</module> should be used in place of
- this module. At the user level, the two modules are essentially
- identical.</p>
-</summary>
-
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><directive module="mod_alias">ScriptAlias</directive></seealso>
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-<seealso><a href="../suexec.html">Running CGI programs under different user IDs</a></seealso>
-<seealso><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Specification</a></seealso>
-
-<section id="env"><title>CGI Environment variables</title>
- <p>The server will set the CGI environment variables as described
- in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
- specification</a>, with the following provisions:</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>This will not be available if the <directive module="core"
- >AcceptPathInfo</directive> directive is explicitly set to
- <code>off</code>. The default behavior, if <directive
- >AcceptPathInfo</directive> is not given, is that <module
- >mod_cgi</module> will accept path info (trailing <code>
- /more/path/info</code> following the script filename in the URI),
- while the core server will return a 404 NOT FOUND error for requests
- with additional path info. Omitting the <directive
- >AcceptPathInfo</directive> directive has the same effect as setting
- it <code>On</code> for <module>mod_cgi</module> requests.</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd>This will only be set if <directive module="core"
- >HostnameLookups</directive> is set to <code>on</code> (it
- is off by default), and if a reverse DNS lookup of the accessing
- host's address indeed finds a host name.</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd>This will only be set if <directive module="core"
- >IdentityCheck</directive> is set to
- <code>on</code> and the accessing host supports the ident
- protocol. Note that the contents of this variable cannot be
- relied upon because it can easily be faked, and if there is a
- proxy between the client and the server, it is usually
- totally useless.</dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>This will only be set if the CGI script is subject to
- authentication.</dd>
- </dl>
-</section>
-
-<section id="cgi-debug"><title>CGI Debugging</title>
- <p>Debugging CGI scripts has traditionally been difficult, mainly
- because it has not been possible to study the output (standard
- output and error) for scripts which are failing to run
- properly. These directives, included in Apache 1.2 and later,
- provide more detailed logging of errors when they occur.</p>
-
- <section><title>CGI Logfile Format</title>
- <p>When configured, the CGI error log logs any CGI which does not
- execute properly. Each CGI script which fails to operate causes
- several lines of information to be logged. The first two lines
- are always of the format:</p>
-
- <example>
- %% [<var>time</var>] <var>request-line</var><br />
- %% <var>HTTP-status</var> <var>CGI-script-filename</var>
- </example>
-
- <p>If the error is that CGI script cannot be run, the log file
- will contain an extra two lines:</p>
-
- <example>
- %%error<br />
- <var>error-message</var>
- </example>
-
- <p>Alternatively, if the error is the result of the script
- returning incorrect header information (often due to a bug in
- the script), the following information is logged:</p>
-
- <example>
- %request<br />
- <var>All HTTP request headers received</var><br />
- <var>POST or PUT entity (if any)</var><br />
- %response<br />
- <var>All headers output by the CGI script</var><br />
- %stdout<br />
- <var>CGI standard output</var><br />
- %stderr<br />
- <var>CGI standard error</var><br />
- </example>
-
- <p>(The %stdout and %stderr parts may be missing if the script did
- not output anything on standard output or standard error).</p>
- </section>
-</section>
-
-<directivesynopsis>
-<name>ScriptLog</name>
-<description>Location of the CGI script error logfile</description>
-<syntax>ScriptLog <var>file-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p>The <directive>ScriptLog</directive> directive sets the CGI
- script error logfile. If no <directive>ScriptLog</directive> is given,
- no error log is created. If given, any CGI errors are logged into the
- filename given as argument. If this is a relative file or path it is
- taken relative to the <directive module="core">ServerRoot</directive>.
- </p>
-
- <example><title>Example</title>
- ScriptLog logs/cgi_log
- </example>
-
- <p>This log will be opened as the user the child processes run
- as, <em>i.e.</em> the user specified in the main <directive
- module="mpm_common">User</directive> directive. This means that
- either the directory the script log is in needs to be writable
- by that user or the file needs to be manually created and set
- to be writable by that user. If you place the script log in
- your main logs directory, do <strong>NOT</strong> change the
- directory permissions to make it writable by the user the child
- processes run as.</p>
-
- <p>Note that script logging is meant to be a debugging feature
- when writing CGI scripts, and is not meant to be activated
- continuously on running servers. It is not optimized for speed
- or efficiency, and may have security problems if used in a
- manner other than that for which it was designed.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogLength</name>
-<description>Size limit of the CGI script logfile</description>
-<syntax>ScriptLogLength <var>bytes</var></syntax>
-<default>ScriptLogLength 10385760</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p><directive>ScriptLogLength</directive> can be used to limit the
- size of the CGI script logfile. Since the logfile logs a lot of
- information per CGI error (all request headers, all script output)
- it can grow to be a big file. To prevent problems due to unbounded
- growth, this directive can be used to set an maximum file-size for
- the CGI logfile. If the file exceeds this size, no more
- information will be written to it.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogBuffer</name>
-<description>Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</description>
-<syntax>ScriptLogBuffer <var>bytes</var></syntax>
-<default>ScriptLogBuffer 1024</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p>The size of any PUT or POST entity body that is logged to
- the file is limited, to prevent the log file growing too big
- too quickly if large bodies are being received. By default, up
- to 1024 bytes are logged, but this can be changed with this
- directive.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cgi.xml.ja b/docs/manual/mod/mod_cgi.xml.ja
deleted file mode 100644
index 00617d82b2..0000000000
--- a/docs/manual/mod/mod_cgi.xml.ja
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cgi.xml.meta">
-
-<name>mod_cgi</name>
-<description>CGI $B%9%/%j%W%H$N<B9T(B</description>
-<status>Base</status>
-<sourcefile>mod_cgi.c</sourcefile>
-<identifier>cgi_module</identifier>
-
-<summary>
- <!-- XXX: Should mention Options ExecCGI
- is the link to howto/cgi not sufficient? -nd
- -->
-
- <p>Mime $B%?%$%W$,(B <code>application/x-httpd-cgi</code>
- $B$G$"$k$+!"%O%s%I%i(B <code>cgi-script</code> (Apache 1.1 $B0J9_(B)
- $B$,;XDj$5$l$F$$$k%U%!%$%k$O(B CGI $B%9%/%j%W%H$H$7$F07$o$l!"(B
- $B%5!<%P$K$h$j<B9T$5$l!"$=$N=PNO$,%/%i%$%"%s%H$KJV$5$l$^$9!#(B
- $B%U%!%$%k$O!"(B<directive module="mod_mime">AddType</directive>
- $B%G%#%l%/%F%#%V$K;XDj$5$l$?(B $B3HD%;R$rL>A0$K4^$`$+!"(B
- <directive module="mod_alias">ScriptAlias</directive>
- $B%G%#%l%/%H%j$KB8:_$9$k$3$H$K$h$j$3$N%?%$%W$K$J$j$^$9!#(B</p>
-
- <p>$B%5!<%P$,(B CGI $B%9%/%j%W%H$r<B9T$9$k$H$-$K$O!"(B
- <code>DOCUMENT_ROOT</code>
- $B$H8F$P$l$kJQ?t$r4D6-$KDI2C$7$^$9!#$3$NJQ?t$O(B
- <directive module="core">DocumentRoot</directive>
- $B$NCM$rJ];}$7$^$9!#(B</p>
-
- <p>Apache $B$G(B CGI $B%9%/%j%W%H$r;HMQ$9$k$?$a$N%$%s%H%m%@%/%7%g%s$O!"(B
- <a href="../howto/cgi.html">CGI $B$K$h$kF0E*%3%s%F%s%D(B</a>
- $B$r;2>H$7$F$/$@$5$$!#(B</p>
-
- <p>Unix $B$G%^%k%A%9%l%C%I$N(B MPM $B$r;H$C$F$$$k>l9g$O!"$3$N%b%8%e!<%k$N(B
- $BBe$o$j$K(B <module>mod_cgid</module> $B$r;H$&I,MW$,$"$j$^$9!#(B
- $B%f!<%6%l%Y%k$G$O$3$NFs$D$N%b%8%e!<%k$OK\<AE*$K$OF10l$G$9!#(B</p>
-</summary>
-
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><directive module="mod_alias">ScriptAlias</directive></seealso>
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-<seealso><a href="../suexec.html">CGI $B%W%m%0%i%`$rJL$N%f!<%6(B ID $B$G<B9T$9$k(B</a></seealso>
-<seealso><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI $B5,3J=q(B</a></seealso>
-
-<section id="env"><title>CGI $B4D6-JQ?t(B</title>
- <p>$B%5!<%P$O(B <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
- $B5,3J(B</a> $B$G7h$a$i$l$F$$$k(B CGI
- $B4D6-JQ?t$r@_Dj$7$^$9!#0J2<$N$b$N$O!">r7oIU$-$G@_Dj$5$l$^$9!#(B</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>$B$3$l$O(B <directive module="core"
- >AcceptPathInfo</directive> $B%G%#%l%/%F%#%V$,L@<(E*$K(B <code>off</code>
- $B$K@_Dj$5$l$F$$$k>l9g$O@_Dj$5$l$^$;$s!#%G%U%)%k%H$N!"(B
- <directive>AcceptPathInfo</directive> $B$,(B
- $B;XDj$5$l$F$$$J$$$H$-$N?6$kIq$$$G$O!"(B<module>mod_cgi</module> $B$O%Q%9>pJs(B
- (URI $B$N%9%/%j%W%H$N%U%!%$%kL>$N8e$KB3$/(B <code>/more/path/info</code>) $B$r(B
- $B<u$1IU$1$^$9$,!"%3%"$O%5!<%P$O%Q%9>pJs$N$"$k%j%/%(%9%H$K(B
- $BBP$7$F(B 404 NOT FOUND $B%(%i!<$rJV$7$^$9!#(B<directive>AcceptPathInfo</directive>
- $B%G%#%l%/%F%#%V$r(B
- $B>JN,$9$k$H!"(B<module>mod_cgi</module> $B$X$N%j%/%(%9%H$KBP$7$F(B
- <code>On</code> $B$r(B
- $B@_Dj$7$?$N$HF1$88z2L$K$J$j$^$9!#(B</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd><directive module="core">HostnameLookups</directive>
- $B$,(B <code>on</code> ($B%G%U%)%k%H$G$O(B off $B$G$9(B)
- $B$G!"%"%/%;%9$7$F$$$k%[%9%H$N%"%I%l%9$N(B DNS
- $B$N5U0z$-$,<B:]$K%[%9%HL>$r8+$D$1$?$H$-$K$N$_@_Dj$5$l$^$9!#(B</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd><directive module="core">IdentityCheck</directive>
- $B$,(B <code>on</code> $B$K@_Dj$5$l$F$$$F!"%"%/%;%9$7$F$$$k%[%9%H$,(B
- ident $B%W%m%H%3%k$r%5%]!<%H$7$F$$$k$H$-$K$N$_@_Dj$5$l$^$9!#(B
- $B$3$l$O4JC1$K56$k$3$H$,$G$-!"%/%i%$%"%s%H$H%5!<%P$N4V$K(B
- $B%W%m%-%7$,$"$l$P$^$C$?$/Lr$KN)$?$J$$$N$G!"(B
- $B$3$NJQ?t$NCM$O?.MQ$G$-$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- </dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>CGI
- $B%9%/%j%W%H$KG'>Z$,I,MW$J$H$-$K$N$_@_Dj$5$l$^$9!#(B</dd>
- </dl>
-</section>
-
-<section id="cgi-debug"><title>CGI $B$N%G%P%C%0(B</title>
- <p>CGI $B%9%/%j%W%H$N%G%P%C%0$O!"@5$7$/F0:n$7$F$$$J$$%9%/%j%W%H$N=PNO(B
- ($BI8=`=PNO$H%(%i!<(B)
- $B$rD4$Y$k$3$H$,$G$-$J$$$?$a$K!"Fq$7$$>uBV$,B3$$$F$$$^$7$?!#(B
- $B$3$l$i$N(B Apache 1.2 $B0J9_$K$"$k(B
- $B%G%#%l%/%F%#%V$O$h$j>\:Y$J%(%i!<$N%m%0<}=8$rDs6!$7$^$9!#(B</p>
-
- <section><title>CGI $B%m%0%U%!%$%k$N=q<0(B</title>
- <p>$B@_Dj$5$l$F$$$k$H$-$K$O!"(BCGI $B%(%i!<%m%0$OE,@Z$KF0:n$7$J$$$9$Y$F$N(B
- CGI $B$r%m%0<}=8$7$^$9!#$=$l$>$l$N@5$7$/F0:n$7$J$$(B CGI
- $B%9%/%j%W%H$O(B $BJ#?t$N9T$K$o$?$k>pJs$,%m%0<}=8$5$l$^$9!#:G=i$N(B
- 2 $B9T$O>o$K0J2<$N=q<0$G$9(B:</p>
-
- <example>
- %% [<var>time</var>] <var>request-line</var><br />
- %% <var>HTTP-status</var> <var>CGI-script-filename</var>
- </example>
-
- <p>$B%(%i!<$,!"(BCGI $B%9%/%j%W%H$,<B9T$G$-$J$$$H$$$&$b$N$G$"$k>l9g$O!"(B
- $B%m%0%U%!%$%k$O$5$i$K$b$&(B 2 $B9T=q$+$l$^$9(B:</p>
-
- <example>
- %%error<br />
- <var>error-message</var>
- </example>
-
- <p>$B$=$&$G$O$J$/!"%(%i!<$,@5$7$/$J$$%X%C%@>pJs$rJV$97k2L$G$"$k>l9g(B
- ($B%9%/%j%W%H$N%P%0$G$"$k$3$H$,$h$/$"$j$^$9(B)$B!"(B
- $B0J2<$N>pJs$,%m%0<}=8$5$l$^$9(B:</p>
-
- <example>
- %request<br />
- <var>$B<u$1<h$C$?$9$Y$F$N(B HTTP $B%j%/%(%9%H%X%C%@(B</var><br />
- <var>($B$b$7$"$l$P(B) POST $B$d(B PUT $B$NCf?H(B</var><br />
- %response<br />
- <var>CGI $B%9%/%j%W%H$K$h$j=PNO$5$l$?$9$Y$F$N%X%C%@(B</var><br />
- %stdout<br />
- <var>CGI $BI8=`=PNO(B</var><br />
- %stderr<br />
- <var>CGI $BI8=`%(%i!<(B</var><br />
- </example>
-
- <p>($B%9%/%j%W%H$,I8=`=PNO$dI8=`%(%i!<$K2?$b=PNO$7$J$+$C$?>l9g$O!"(B
- %stdout $B$d(B %stderr $B$O$"$j$^$;$s(B)$B!#(B</p>
-</section>
-</section>
-
-<directivesynopsis>
-<name>ScriptLog</name>
-<description>CGI $B%9%/%j%W%H$N%(%i!<%m%0%U%!%$%k$N>l=j(B</description>
-<syntax>ScriptLog <var>file-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p><directive>ScriptLog</directive> $B%G%#%l%/%F%#%V$O(B CGI $B%9%/%j%W%H$N(B
- $B%(%i!<%m%0%U%!%$%k$r@_Dj$7$^$9!#(B<directive>ScriptLog</directive> $B$,(B
- $B@_Dj$5$l$F$$$J$$$H$-$O!"(B
- $B%(%i!<%m%0$O:n@.$5$l$^$;$s!#@_Dj$5$l$F$$$k$H$-$O!"(BCGI
- $B$N%(%i!<$O$9$Y$F0z?t$H$7$FM?$($i$l$F$$$k%U%!%$%kL>$K%m%0$5$l$^$9!#(B
- $BAjBP%Q%9$G;XDj$5$l$F$$$k$H$-$O!"(B
- <directive module="core">ServerRoot</directive>$B$+$i$NAjBP%Q%9$H$7$F(B
- $B07$o$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ScriptLog logs/cgi_log
- </example>
-
- <p>$B$3$N%m%0$O;R%W%m%;%9$,<B9T$5$l$F$$$k%f!<%6$H$7$F%*!<%W%s$5$l$^$9!#(B
- <em>$B$9$J$o$A(B</em>$B!"(B<directive module="mpm_commmon"
- >User</directive> $B%G%#%l%/%F%#%V$G;XDj$5$l$?(B
- $B%f!<%6$G$9!#$3$l$O!"%9%/%j%W%H%m%0$,=q$+$l$k%G%#%l%/%H%j$,$=$N%f!<%6$G(B
- $B=q$-9~$_2DG=$+!"%9%/%j%W%H%U%!%$%k$,<jF0$G:n@.$5$l!"$=$N%f!<%6$G(B
- $B=q$-9~$_2DG=$K$J$C$F$$$kI,MW$,$"$k$H$$$&$3$H$G$9!#%9%/%j%W%H%m%0$r(B
- $B%"%/%;%9%m%0$J$I$N$?$a$N%m%0%G%#%l%/%H%j$K=q$+$l$k$h$&$K$7$?$H$-$O!"(B
- $B$=$N%G%#%l%/%H%j$r;R%W%m%;%9$r<B9T$7$F$$$k%f!<%6$N8"8B$G(B
- $B=q$-9~$_2DG=$K$O(B<strong>$B$7$J$$(B</strong>$B$h$&$K$7$F$/$@$5$$!#(B</p>
-
- <p>$B%9%/%j%W%H$N%m%0<}=8$O(B CGI $B%9%/%j%W%H$r=q$/$H$-$N(B
- $B%G%P%C%0MQ$N5!G=$H$7$F0U?^$5$l$F$$$F!"DL>o$N%5!<%P$G(B
- $B>o$K;HMQ$5$l$k$h$&$K$O0U?^$5$l$F$$$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- $BB.EY$d8zN($O:GE,2=$5$l$F$*$i$:!"@_7W$5$l$?0J30$NJ}K!$G;HMQ$5$l$k$H(B
- $B%;%-%e%j%F%#$NLdBj$,$"$k$+$b$7$l$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogLength</name>
-<description>CGI $B%9%/%j%W%H$N%m%0%U%!%$%k$NBg$-$5$N>e8B(B</description>
-<syntax>ScriptLogLength <var>bytes</var></syntax>
-<default>ScriptLogLength 10385760</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p><directive>ScriptLogLength</directive> $B$O(B CGI $B%9%/%j%W%H$N%m%0%U%!%$%k(B
- $B$NBg$-$5$r@)8B$9$k$?$a$K;HMQ$9$k$3$H$,$G$-$^$9!#%m%0%U%!%$%k$O(B
- CGI $B$N%(%i!<Kh$KBgNL$N>pJs(B ($B%j%/%(%9%H$N$9$Y$F$N%X%C%@!"(B
- $B$9$Y$F$N=PNO(B)$B$r%m%0$7$^$9$N$G!"$9$0$KBg$-$J%U%!%$%k$K$J$j$^$9!#(B
- $B$3$NBg$-$5$N@)8B$,$J$$$3$H$K$h$kLdBj$rKI$0$?$a$K!"(B
- $B$3$N%G%#%l%/%F%#%V$r;H$C$F(B CGI $B$N%m%0%U%!%$%k$N(B
- $B:GBg$N%U%!%$%k%5%$%:$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
- $B%U%!%$%k$,$3$NBg$-$5$rD6$($?>l9g$O!"$=$l0J>e$O=q$-9~$^$l$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogBuffer</name>
-<description>$B%9%/%j%W%H%m%0$K5-O?$5$l$k(B PUT $B$d(B POST $B%j%/%(%9%H$NFbMF$N>e8B(B</description>
-<syntax>ScriptLogBuffer <em>bytes</em></syntax>
-<default>ScriptLogBuffer 1024</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p>$BBg$-$JK\BN$r<u$1<h$C$?$H$-$K%m%0%U%!%$%k$,$9$0$KBg$-$/$J$j$9$.$k(B
- $BLdBj$rHr$1$k$?$a$K!"%U%!%$%k$K%m%0<}=8$5$l$k(B PUT $B$H(B POST
- $B$NK\BN$NBg$-$5$O@)8B$5$l$F$$$^$9!#%G%U%)%k%H$G$O!"(B1024
- $B%P%$%H$^$G$,%m%0<}=8$5$l$^$9$,!"(B
- $B$3$N%G%#%l%/%F%#%V$O$=$l$rJQ99$9$k$3$H$,$G$-$^$9!#(B
- </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cgi.xml.ko b/docs/manual/mod/mod_cgi.xml.ko
deleted file mode 100644
index 44e59d4213..0000000000
--- a/docs/manual/mod/mod_cgi.xml.ko
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cgi.xml.meta">
-
-<name>mod_cgi</name>
-<description>CGI ½ºÅ©¸³Æ® ½ÇÇà</description>
-<status>Base</status>
-<sourcefile>mod_cgi.c</sourcefile>
-<identifier>cgi_module</identifier>
-
-<summary>
- <!-- XXX: Should mention Options ExecCGI
- is the link to howto/cgi not sufficient? -nd
- -->
-
- <p>¼­¹ö´Â mime typeÀÌ <code>application/x-httpd-cgi</code>À̰ųª
- (¾ÆÆÄÄ¡ 1.1 ÀÌÈÄ) Çڵ鷯°¡ <code>cgi-script</code>ÀÎ ¸ðµç
- ÆÄÀÏÀ» CGI ½ºÅ©¸³Æ®·Î ÀνÄÇÏ¿©, ½ÇÇàÇÏ°í, ±× °á°ú¸¦ Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³½´Ù. ÆÄÀÏÀÌ <directive module="mod_mime">AddType</directive>
- Áö½Ã¾î·Î ÁöÁ¤ÇÑ È®ÀåÀÚ¸¦ °¡Áö°Å³ª, <directive
- module="mod_alias">ScriptAlias</directive> µð·ºÅ丮 ¾È¿¡
- ÀÖÀ¸¸é CGI·Î 󸮵ȴÙ.</p>
-
- <p>¼­¹ö´Â CGI ½ºÅ©¸³Æ®¸¦ ºÎ¸¦¶§ <code>DOCUMENT_ROOT</code>¶ó´Â
- ȯ°æº¯¼ö¸¦ Ãß°¡ÇÑ´Ù. ÀÌ º¯¼ö´Â <directive
- module="core">DocumentRoot</directive> ¼³Á¤°ªÀ» °¡Áø´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡¼­ CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼Ò°³´Â
- <a href="../howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a> ÅõÅ丮¾óÀ»
- Âü°íÇ϶ó.</p>
-
- <p>À¯´Ð½º¿¡¼­ ´ÙÁß¾²·¹µå MPMÀ» »ç¿ëÇÑ´Ù¸é ÀÌ ¸ðµâ´ë½Å
- <module>mod_cgid</module> ¸ðµâÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ
- ÀÔÀå¿¡¼­ ÀÌ µÎ ¸ðµâÀº ±âº»ÀûÀ¸·Î µ¿ÀÏÇÏ´Ù.</p>
-</summary>
-
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><directive module="mod_alias">ScriptAlias</directive></seealso>
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-<seealso><a href="../suexec.html">´Ù¸¥ »ç¿ëÀÚ ID·Î CGI ÇÁ·Î±×·¥
-½ÇÇàÇϱâ</a></seealso>
-<seealso><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Ç¥ÁØ</a></seealso>
-
-<section id="env"><title>CGI ȯ°æº¯¼ö</title>
- <p>¼­¹ö´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î <a
- href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Ç¥ÁØ</a>ÀÌ ¼³¸íÇÏ´Â
- CGI ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù:</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>ÀÌ º¯¼ö´Â <directive module="core"
- >AcceptPathInfo</directive> Áö½Ã¾î¸¦ Á÷Á¢ <code>off</code>·Î
- ÁöÁ¤ÇÑ °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù. <directive
- >AcceptPathInfo</directive>°¡ ¾ø´Â °æ¿ì ¼­¹ö´Â ±âº»ÀûÀ¸·Î
- °æ·Î Á¤º¸°¡ ÀÖ´Â ¿äû¿¡ ´ëÇØ 404 NOT FOUND ¿À·ù¸¦ ³»Áö¸¸,
- <module>mod_cgi</module>´Â °æ·Î Á¤º¸¸¦ (URI¿¡¼­ ½ºÅ©¸³Æ®
- ÆÄÀÏ¸í µÚ¿¡ ³ª¿À´Â <code>/more/path/info</code>) ¹Þ´Â´Ù.
- <directive>AcceptPathInfo</directive> Áö½Ã¾î¸¦ »ý·«Çϸé
- <module>mod_cgi</module> ¿äû¿¡ ´ëÇؼ­ <directive
- module="core">AcceptPathInfo</directive>¸¦ <code>On</code>À¸·Î
- ¼³Á¤ÇÑ °Í°ú °°´Ù.</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd>ÀÌ º¯¼ö´Â <directive module="core"
- >HostnameLookups</directive>°¡ <code>on</code>ÀÌ°í (±âº»°ªÀº
- off), Á¢¼ÓÇÑ È£½ºÆ® ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÇÏ¿© ½ÇÁ¦ È£½ºÆ®¸íÀ»
- ãÀº °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù.</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd>ÀÌ º¯¼ö´Â <directive module="core"
- >IdentityCheck</directive>°¡ <code>on</code>ÀÌ°í, Á¢¼ÓÇÑ
- È£½ºÆ®°¡ ident ÇÁ·ÎÅäÄÝÀ» Áö¿øÇÏ´Â °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù.
- ½±°Ô ÀÌ °ªÀ» ¼ÓÀÏ ¼ö Àֱ⶧¹®¿¡ ÀÌ º¯¼öÀÇ ³»¿ëÀ» ¹ÏÀ¸¸é
- ¾ÈµÇ°í, Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö »çÀÌ¿¡ ÇÁ·Ï½Ã°¡ ÀÖ´Ù¸é º¯¼ö
- ³»¿ëÀÌ ¿ÏÀüÈ÷ ¹«ÀǹÌÇÔÀ» ÁÖÀÇÇ϶ó.</dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>CGI ½ºÅ©¸³Æ®°¡ ÀÎÁõÀ» °ÅÃľßÇÏ´Â °æ¿ì¿¡¸¸ ¼³Á¤ÇÑ´Ù.</dd>
- </dl>
-</section>
-
-<section id="cgi-debug"><title>CGI µð¹ö±ë</title>
- <p>¾îµð¿¡¼­ À߸ø ½ÇÇàµÇ´ÂÁö ½ºÅ©¸³Æ®ÀÇ Ãâ·ÂÀ» (Ç¥ÁØÃâ·Â°ú
- Ç¥ÁØ¿À·ù) º¼ ¼ö ¾ø±â¶§¹®¿¡ CGI ½ºÅ©¸³Æ®´Â ÀüÅëÀûÀ¸·Î µð¹ö±ëÇϱâ
- ¾î·Á¿ü´Ù. ¾ÆÆÄÄ¡ 1.2 ÀÌÈÄ¿¡ Ãß°¡µÈ Áö½Ã¾î¸¦ »ç¿ëÇÏ¸é ¹ß»ýÇÑ
- ¿À·ù¸¦ ÀÚ¼¼È÷ ·Î±×¿¡ ³²±æ ¼ö ÀÖ´Ù.</p>
-
- <section><title>CGI ·Î±×ÆÄÀÏ Çü½Ä</title>
- <p>CGI ¿À·ù·Î±×´Â Á¤»óÀûÀ¸·Î ½ÇÇàÇÏÁö ¸øÇÑ CGI¸¦ ±â·ÏÇÑ´Ù.
- ¿À·ù°¡ ¹ß»ýÇÑ CGI ½ºÅ©¸³Æ®´Â ·Î±×¿¡ ¿©·¯ ÁÙÀÇ Á¤º¸¸¦ ³²±ä´Ù.
- ù¹ø° µÎ ÁÙÀº Ç×»ó ¾Æ·¡¿Í °°Àº Çü½ÄÀÌ´Ù:</p>
-
- <example>
- %% [<var>½Ã°£</var>] <var>¿äûÁÙ</var><br />
- %% <var>HTTP-»óÅÂ</var> <var>CGI-½ºÅ©¸³Æ®-ÆÄÀϸí</var>
- </example>
-
- <p>CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø´Â ¿À·ùÀÎ °æ¿ì ·Î±×ÆÄÀÏ¿¡
- Ãß°¡·Î µÎ ÁÙÀ» ´õ ±â·ÏÇÑ´Ù:</p>
-
- <example>
- %%error<br />
- <var>¿À·ù¹®</var>
- </example>
-
- <p>½ºÅ©¸³Æ®°¡ (º¸Åë ½ºÅ©¸³Æ®ÀÇ ¹ö±×¶§¹®¿¡) À߸øµÈ Çì´õ
- Á¤º¸¸¦ ¹ÝȯÇÏ´Â °æ¿ì, ´ÙÀ½ ³»¿ëÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù:</p>
-
- <example>
- %request<br />
- <var>¹ÞÀº ¸ðµç HTTP Çì´õ</var><br />
- <var>(ÀÖ´Ù¸é) POST³ª PUT ³»¿ë</var><br />
- %response<br />
- <var>CGI ½ºÅ©¸³Æ® Ãâ·ÂÀÇ ¸ðµç Çì´õ</var><br />
- %stdout<br />
- <var>CGI Ç¥ÁØÃâ·Â</var><br />
- %stderr<br />
- <var>CGI Ç¥ÁØ¿À·ù</var><br />
- </example>
-
- <p>(½ºÅ©¸³Æ®°¡ Ç¥ÁØÃâ·ÂÀ̳ª Ç¥ÁØ¿À·ù¿¡ ¾Æ¹« ³»¿ëµµ Ãâ·ÂÇÏÁö
- ¾Ê¾Ò´Ù¸é %stdout°ú %stderr ºÎºÐÀº »ý·«µÉ ¼ö ÀÖ´Ù).</p>
- </section>
-</section>
-
-<directivesynopsis>
-<name>ScriptLog</name>
-<description>CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</description>
-<syntax>ScriptLog <var>file-path</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p><directive>ScriptLog</directive> Áö½Ã¾î´Â CGI ½ºÅ©¸³Æ®
- ¿À·ù·Î±×ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù. <directive>ScriptLog</directive>¸¦
- »ç¿ëÇÏÁö¾ÊÀ¸¸é ¿À·ù·Î±×¸¦ ¸¸µéÁö ¾Ê´Â´Ù. »ç¿ëÇÏ¸é ¾Æ±Ô¸ÕÆ®·Î
- ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ CGI ¿À·ù¸¦ ±â·ÏÇÑ´Ù. »ó´ë°æ·Î¸¦ ÁöÁ¤Çϸé
- <directive module="core">ServerRoot</directive>¿¡ »ó´ë°æ·Î·Î
- ¹Þ¾ÆµéÀδÙ.
- </p>
-
- <example><title>¿¹Á¦</title>
- ScriptLog logs/cgi_log
- </example>
-
- <p>ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ, <em>Áï</em> <directive
- module="mpm_common">User</directive> Áö½Ã¾î·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ
- ±ÇÇÑÀ¸·Î ·Î±×¸¦ ¿¬´Ù. ±×·¡¼­ ±× »ç¿ëÀÚ°¡ ½ºÅ©¸³Æ® ·Î±×°¡
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ ÀÖ´øÁö, Á÷Á¢ ¹Ì¸® ÆÄÀÏÀ» ¸¸µé¾î¼­
- ±× »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ» Áà¾ß ÇÑ´Ù. ½ºÅ©¸³Æ® ·Î±×¸¦ ÁÖ ·Î±×
- µð·ºÅ丮¿¡ µÐ´Ù¸é ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀ»
- ÁÖ±âÀ§ÇØ µð·ºÅ丮 ±ÇÇÑÀ» º¯°æÇÏÁö <strong>¸¶¶ó</strong>.</p>
-
- <p>½ºÅ©¸³Æ® ·Î±×´Â CGI ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ¶§ µð¹ö±ëÀ» À§ÇÑ
- ¿ëµµÀÌÁö ¼­¹ö¸¦ ½ÇÇàÇÏ´Â µ¿¾È °è¼Ó »ç¿ëÇϱâÀ§ÇÔÀÌ ¾Æ´ÔÀ»
- ÁÖÀÇÇ϶ó. ¼Óµµ¿Í È¿À²¼º¸é¿¡¼­ ÃÖÀûÈ­°¡ ¾ÈµÇÀÖ°í, ¼³°èÇÑ
- ¸ñÀûÀÌ¿ÜÀÇ ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é º¸¾È»ó ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogLength</name>
-<description>CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</description>
-<syntax>ScriptLogLength <var>bytes</var></syntax>
-<default>ScriptLogLength 10385760</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p><directive>ScriptLogLength</directive>´Â CGI ½ºÅ©¸³Æ®
- ·Î±×ÆÄÀÏÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. CGI ¿À·ù°¡ ¹ß»ýÇÒ¶§¸¶´Ù (¸ðµç
- ¿äû Çì´õ, ¸ðµç ½ºÅ©¸³Æ® Ãâ·Â µî) ¸¹Àº Á¤º¸°¡ ·Î±×¿¡
- ±â·ÏµÇ±â¶§¹®¿¡ ÆÄÀÏÀÌ ¸Å¿ì Ä¿Áú ¼ö ÀÖ´Ù. ÆÄÀÏÀÌ ¹«ÇÑÈ÷ Ä¿Áö´Â
- ¹®Á¦¸¦ ¸·±âÀ§ÇØ ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© CGI ·Î±×ÆÄÀÏÀÇ ÃÖ´ë
- ÆÄÀÏÅ©±â¸¦ ¼³Á¤ÇÑ´Ù. ÆÄÀÏÀÇ Å©±â°¡ ¼³Á¤ÇÑ °ªÀ» ³ÑÀ¸¸é ´õ
- ÀÌ»ó Á¤º¸¸¦ ±â·ÏÇÏÁö¾Ê´Â´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogBuffer</name>
-<description>½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</description>
-<syntax>ScriptLogBuffer <var>bytes</var></syntax>
-<default>ScriptLogBuffer 1024</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
- <p>Å« ³»¿ëÀ» ¹Þ¾Æ¼­ ·Î±×ÆÄÀÏÀÌ ³Ê¹« »¡¸® Ä¿Áö´Â Çö»óÀ» ¸·±âÀ§ÇØ
- ÆÄÀÏ¿¡ ±â·ÏÇÒ PUT ȤÀº POST ³»¿ëÀÇ Å©±â¸¦ Á¦ÇÑÇÑ´Ù. ±âº»ÀûÀ¸·Î
- 1024 ¹ÙÀÌÆ®±îÁö ·Î±×¿¡ ±â·ÏÇÏÁö¸¸, ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cgi.xml.meta b/docs/manual/mod/mod_cgi.xml.meta
deleted file mode 100644
index 0087e6682f..0000000000
--- a/docs/manual/mod/mod_cgi.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_cgi</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_cgid.html b/docs/manual/mod/mod_cgid.html
deleted file mode 100644
index f89ee3c782..0000000000
--- a/docs/manual/mod/mod_cgid.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_cgid.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_cgid.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_cgid.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_cgid.html.en b/docs/manual/mod/mod_cgid.html.en
deleted file mode 100644
index eb273f7640..0000000000
--- a/docs/manual/mod/mod_cgid.html.en
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cgid - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_cgid</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgid.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgid.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgid.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Execution of CGI scripts using an
- external CGI daemon</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>cgid_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_cgid.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Unix threaded MPMs only</td></tr></table>
-<h3>Summary</h3>
-
- <p>Except for the optimizations and the additional <code class="directive"><a href="#scriptsock">ScriptSock</a></code> directive noted below,
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> behaves similarly to <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>.
- <strong>See the <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> summary for additional details
- about Apache and CGI.</strong></p>
-
- <p>On certain unix operating systems, forking a process from a
- multi-threaded server is a very expensive operation because the
- new process will replicate all the threads of the parent
- process. In order to avoid incurring this expense on each CGI
- invocation, <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> creates an external daemon that is
- responsible for forking child processes to run CGI scripts. The
- main server communicates with this daemon using a unix domain
- socket.</p>
-
- <p>This module is used by default instead of
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> whenever a multi-threaded MPM
- is selected during the compilation process. At the user level,
- this module is identical in configuration and operation to
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>. The only exception is the
- additional directive <code>ScriptSock</code> which gives the
- name of the socket to use for communication with the cgi
- daemon.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptsock">ScriptSock</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../suexec.html">Running CGI programs under different user IDs</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptSock" id="ScriptSock">ScriptSock</a> <a name="scriptsock" id="scriptsock">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of the socket to use for communication with
-the cgi daemon</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScriptSock <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScriptSock logs/cgisock</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cgid</td></tr>
-</table>
- <p>This directive sets the name of the socket to use for
- communication with the CGI daemon. The socket will be opened
- using the permissions of the user who starts Apache (usually
- root). To maintain the security of communications with CGI
- scripts, it is important that no other user has permission to
- write in the directory where the socket is located.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ScriptSock /var/run/cgid.sock
- </code></p></div>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgid.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgid.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgid.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cgid.html.ja.euc-jp b/docs/manual/mod/mod_cgid.html.ja.euc-jp
deleted file mode 100644
index eeb8f80fde..0000000000
--- a/docs/manual/mod/mod_cgid.html.ja.euc-jp
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cgid - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_cgid</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgid.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgid.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>³°Éô CGI ¥Ç¡¼¥â¥ó¤ò»È¤Ã¤¿ CGI ¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>cgid_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_cgid.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Unix ¤Î¥¹¥ì¥Ã¥É MPM ¤Î¤ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>ºÇŬ²½¤¬»Ü¤µ¤ì¤Æ¤¤¤ë¤³¤È¤È¡¢°Ê²¼¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ëÄɲäΠ<code class="directive"><a href="#scriptsock">ScriptSock</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ü¤¤¤Æ¤Ï¡¢
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> ¤Ï <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤ÈƱÍͤÎ
- Æ°ºî¤ò¤·¤Þ¤¹¡£<strong>Apache ¤È CGI ¤Ë´Ø¤¹¤ë¾ÜºÙ¤Ï
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤Î³µÍפòÆɤó¤Ç¤¯¤À¤µ¤¤¡£</strong></p>
-
- <p>Unix ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ÎÃæ¤Ë¤Ï¡¢¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Î¥µ¡¼¥Ð¤«¤é
- ¥×¥í¥»¥¹¤ò fork ¤¹¤ë¤Î¤¬Èó¾ï¤Ë¥³¥¹¥È¤Î¹â¤¤Æ°ºî¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
- Íýͳ¤Ï¡¢¿·¤·¤¤¥×¥í¥»¥¹¤¬¿Æ¥×¥í¥»¥¹¤Î¥¹¥ì¥Ã¥É¤¹¤Ù¤Æ¤òÊ£À½¤¹¤ë¤«¤é¤Ç¤¹¡£
- ³Æ CGI µ¯Æ°»þ¤Ë¤³¤Î¥³¥¹¥È¤¬¤«¤«¤ë¤Î¤òËɤ°¤¿¤á¤Ë¡¢<code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code>
- ¤Ï»Ò¥×¥í¥»¥¹¤ò fork ¤·¤Æ CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Î
- ³°Éô¥Ç¡¼¥â¥ó¤ò¼Â¹Ô¤·¤Þ¤¹¡£
- ¼ç¥µ¡¼¥Ð¤Ï unix ¥É¥á¥¤¥ó¥½¥±¥Ã¥È¤ò»È¤Ã¤Æ¤³¤Î¥Ç¡¼¥â¥ó¤ÈÄÌ¿®¤·¤Þ¤¹¡£</p>
-
- <p>¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥Þ¥ë¥Á¥¹¥ì¥Ã¥É MPM ¤¬Áª¤Ð¤ì¤¿¤È¤­¤Ï
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤ÎÂå¤ï¤ê¤Ëɬ¤º¤³¤Î¥â¥¸¥å¡¼¥ë¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£
- ¥æ¡¼¥¶¤Î¥ì¥Ù¥ë¤Ç¤Ï¤³¤Î¥â¥¸¥å¡¼¥ë¤ÎÀßÄê¤ÈÆ°ºî¤Ï <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>
- ¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¤¹¡£Í£°ì¤ÎÎã³°¤Ï <code>ScriptSock</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- Äɲäǡ¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï CGI ¥Ç¡¼¥â¥ó¤È¤ÎÄÌ¿®ÍѤΥ½¥±¥Ã¥È¤Î̾Á°¤ò
- »ØÄꤷ¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptsock">ScriptSock</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../suexec.html">CGI ¥×¥í¥°¥é¥à¤ò°ã¤¦¥æ¡¼¥¶ ID ¤Ç¼Â¹Ô¤¹¤ë</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptSock" id="ScriptSock">ScriptSock</a> <a name="scriptsock" id="scriptsock">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥Ç¡¼¥â¥ó¤È¤ÎÄÌ¿®¤Ë»È¤ï¤ì¤ë¥½¥±¥Ã¥È¤Î̾Á°</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScriptSock <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ScriptSock logs/cgisock</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_cgid</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï CGI ¥Ç¡¼¥â¥ó¤È¤ÎÄÌ¿®¤Ë»È¤ï¤ì¤ë¥½¥±¥Ã¥È¤Î
- ̾Á°¤òÀßÄꤷ¤Þ¤¹¡£¥½¥±¥Ã¥È¤Ï Apache ¤¬µ¯Æ°¤µ¤ì¤¿¥æ¡¼¥¶ (Ä̾ï root) ¤Î
- ¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÍѤ¤¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤Þ¤¹¡£CGI ¥¹¥¯¥ê¥×¥È¤È¤ÎÄÌ¿®¤Î
- ¥»¥­¥å¥ê¥Æ¥£¤òÊݤĤ¿¤á¤Ë¡¢¥½¥±¥Ã¥È¤Î¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ¾¤Î¥æ¡¼¥¶¤¬½ñ¤­¹þ¤ß¸¢¸Â¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬½ÅÍפǤ¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ScriptSock /var/run/cgid.sock
- </code></p></div>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgid.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgid.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cgid.html.ko.euc-kr b/docs/manual/mod/mod_cgid.html.ko.euc-kr
deleted file mode 100644
index c319c25f94..0000000000
--- a/docs/manual/mod/mod_cgid.html.ko.euc-kr
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_cgid - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_cgid</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgid.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgid.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¿ÜºÎ CGI µ¥¸óÀ» »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇà</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>cgid_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_cgid.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>À¯´Ð½º¿¡¼­ ¾²·¹µå¸¦ »ç¿ëÇÏ´Â MPMs Àü¿ë</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>¾Æ·¡¿¡¼­ ¼³¸íÇÏ´Â Ãß°¡µÈ <code class="directive"><a href="#scriptsock">ScriptSock</a></code> Áö½Ã¾î¸¦ Á¦¿ÜÇÏ°í
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code>´Â <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>¿Í
- ºñ½ÁÇÏ°Ô µ¿ÀÛÇÑ´Ù. <strong>¾ÆÆÄÄ¡¿Í CGI¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>¸¦ Âü°íÇ϶ó.</strong></p>
-
- <p>¾î¶² À¯´Ð½º ¿î¿µÃ¼Á¦ÀÇ °æ¿ì ´ÙÁß¾²·¹µå ¼­¹ö¿¡¼­ ÇÁ·Î¼¼½º¸¦
- Æ÷Å©(fork)ÇÏ¸é »õ·Î¿î ÇÁ·Î¼¼½º°¡ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ¸ðµç ¾²·¹µå¸¦
- º¹Á¦ÇØ¾ß ÇϹǷΠºÎ´ãÀÌ µÈ´Ù. CGI ½ÇÇึ´Ù ÀÌ·± ºÎ´ãÀ» ÁÖÁö
- ¾Ê±âÀ§ÇØ <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code>´Â CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â
- ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ Æ÷Å©ÇÏ´Â ¿ÜºÎ µ¥¸óÀ» ¸¸µç´Ù. ÁÖ¼­¹ö´Â ÀÌ
- µ¥¸ó°ú À¯´Ð½º¼ÒÄÏ(unix domain socket)À» »ç¿ëÇÏ¿© Åë½ÅÇÑ´Ù.</p>
-
- <p>ÄÄÆÄÀÏÇÒ¶§ ´ÙÁß¾²·¹µå MPMÀ» ¼±ÅÃÇÏ¸é ±âº»ÀûÀ¸·Î
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ´ë½Å ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù. »ç¿ëÀÚ
- ÀÔÀå¿¡¼­ ÀÌ ¸ðµâÀÇ ¼³Á¤°ú µ¿ÀÛÀº <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>¿Í
- µ¿ÀÏÇÏ´Ù. À¯ÀÏÇÑ Â÷ÀÌÁ¡Àº cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ
- ¼ÒÄÏÀÇ À̸§À» ¼³Á¤ÇÏ´Â <code>ScriptSock</code> Áö½Ã¾î°¡
- Ãß°¡µÈ Á¡ÀÌ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptlog">ScriptLog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scriptsock">ScriptSock</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
-<li><a href="../suexec.html">´Ù¸¥ »ç¿ëÀÚ ID·Î CGI ÇÁ·Î±×·¥
-½ÇÇàÇϱâ</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScriptSock" id="ScriptSock">ScriptSock</a> <a name="scriptsock" id="scriptsock">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ScriptSock <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ScriptSock logs/cgisock</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_cgid</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â CGI µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§À»
- ÁöÁ¤ÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÑ »ç¿ëÀÚ (º¸Åë root) ±ÇÇÑÀ¸·Î ¼ÒÄÏÀ»
- ¿¬´Ù. CGI ½ºÅ©¸³Æ®¿Í Åë½ÅÀÇ º¸¾ÈÀ» À§ÇØ ´Ù¸¥ »ç¿ëÀÚ°¡ ¼ÒÄÏÀÌ
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀ» °¡ÁöÁö¾Ê´Â °ÍÀÌ Áß¿äÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ScriptSock /var/run/cgid.sock
- </code></p></div>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_cgid.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_cgid.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_cgid.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_cgid.xml b/docs/manual/mod/mod_cgid.xml
deleted file mode 100644
index f143cf2005..0000000000
--- a/docs/manual/mod/mod_cgid.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cgid.xml.meta">
-
-<name>mod_cgid</name>
-<description>Execution of CGI scripts using an
- external CGI daemon</description>
-<status>Base</status>
-<sourcefile>mod_cgid.c</sourcefile>
-<identifier>cgid_module</identifier>
-<compatibility>Unix threaded MPMs only</compatibility>
-
-<summary>
- <p>Except for the optimizations and the additional <directive
- module="mod_cgid">ScriptSock</directive> directive noted below,
- <module>mod_cgid</module> behaves similarly to <module>mod_cgi</module>.
- <strong>See the <module>mod_cgi</module> summary for additional details
- about Apache and CGI.</strong></p>
-
- <p>On certain unix operating systems, forking a process from a
- multi-threaded server is a very expensive operation because the
- new process will replicate all the threads of the parent
- process. In order to avoid incurring this expense on each CGI
- invocation, <module>mod_cgid</module> creates an external daemon that is
- responsible for forking child processes to run CGI scripts. The
- main server communicates with this daemon using a unix domain
- socket.</p>
-
- <p>This module is used by default instead of
- <module>mod_cgi</module> whenever a multi-threaded MPM
- is selected during the compilation process. At the user level,
- this module is identical in configuration and operation to
- <module>mod_cgi</module>. The only exception is the
- additional directive <code>ScriptSock</code> which gives the
- name of the socket to use for communication with the cgi
- daemon.</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../suexec.html">Running CGI programs under different user IDs</a></seealso>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLog</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogLength</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogBuffer</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptSock</name>
-<description>The name of the socket to use for communication with
-the cgi daemon</description>
-<syntax>ScriptSock <var>file-path</var></syntax>
-<default>ScriptSock logs/cgisock</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
- <p>This directive sets the name of the socket to use for
- communication with the CGI daemon. The socket will be opened
- using the permissions of the user who starts Apache (usually
- root). To maintain the security of communications with CGI
- scripts, it is important that no other user has permission to
- write in the directory where the socket is located.</p>
-
- <example><title>Example</title>
- ScriptSock /var/run/cgid.sock
- </example>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_cgid.xml.ja b/docs/manual/mod/mod_cgid.xml.ja
deleted file mode 100644
index 2379b0a05f..0000000000
--- a/docs/manual/mod/mod_cgid.xml.ja
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cgid.xml.meta">
-
-<name>mod_cgid</name>
-<description>$B30It(B CGI $B%G!<%b%s$r;H$C$?(B CGI $B%9%/%j%W%H$N<B9T(B</description>
-<status>Base</status>
-<sourcefile>mod_cgid.c</sourcefile>
-<identifier>cgid_module</identifier>
-<compatibility>Unix $B$N%9%l%C%I(B MPM $B$N$_(B</compatibility>
-
-<summary>
- <p>$B:GE,2=$,;\$5$l$F$$$k$3$H$H!"0J2<$G@bL@$5$l$F$$$kDI2C$N(B <directive
- module="mod_cgid">ScriptSock</directive> $B%G%#%l%/%F%#%V$r=|$$$F$O!"(B
- <module>mod_cgid</module> $B$O(B <module>mod_cgi</module> $B$HF1MM$N(B
- $BF0:n$r$7$^$9!#(B<strong>Apache $B$H(B CGI $B$K4X$9$k>\:Y$O(B
- <module>mod_cgi</module> $B$N35MW$rFI$s$G$/$@$5$$!#(B</strong></p>
-
- <p>Unix $B%*%Z%l!<%F%#%s%0%7%9%F%`$NCf$K$O!"%^%k%A%9%l%C%I$N%5!<%P$+$i(B
- $B%W%m%;%9$r(B fork $B$9$k$N$,Hs>o$K%3%9%H$N9b$$F0:n$K$J$C$F$$$k$b$N$,$"$j$^$9!#(B
- $BM}M3$O!"?7$7$$%W%m%;%9$,?F%W%m%;%9$N%9%l%C%I$9$Y$F$rJ#@=$9$k$+$i$G$9!#(B
- $B3F(B CGI $B5/F0;~$K$3$N%3%9%H$,$+$+$k$N$rKI$0$?$a$K!"(B<module>mod_cgid</module>
- $B$O;R%W%m%;%9$r(B fork $B$7$F(B CGI $B%9%/%j%W%H$r<B9T$9$k$?$a$N(B
- $B30It%G!<%b%s$r<B9T$7$^$9!#(B
- $B<g%5!<%P$O(B unix $B%I%a%$%s%=%1%C%H$r;H$C$F$3$N%G!<%b%s$HDL?.$7$^$9!#(B</p>
-
- <p>$B%3%s%Q%$%k;~$K%^%k%A%9%l%C%I(B MPM $B$,A*$P$l$?$H$-$O(B
- <module>mod_cgi</module> $B$NBe$o$j$KI,$:$3$N%b%8%e!<%k$,;HMQ$5$l$^$9!#(B
- $B%f!<%6$N%l%Y%k$G$O$3$N%b%8%e!<%k$N@_Dj$HF0:n$O(B <module>mod_cgi</module>
- $B$H$^$C$?$/F1$8$G$9!#M#0l$NNc30$O(B <code>ScriptSock</code> $B%G%#%l%/%F%#%V$N(B
- $BDI2C$G!"$3$N%G%#%l%/%F%#%V$O(B CGI $B%G!<%b%s$H$NDL?.MQ$N%=%1%C%H$NL>A0$r(B
- $B;XDj$7$^$9!#(B</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../suexec.html">CGI $B%W%m%0%i%`$r0c$&%f!<%6(B ID $B$G<B9T$9$k(B</a></seealso>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLog</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogLength</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogBuffer</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptSock</name>
-<description>CGI $B%G!<%b%s$H$NDL?.$K;H$o$l$k%=%1%C%H$NL>A0(B</description>
-<syntax>ScriptSock <var>file-path</var></syntax>
-<default>ScriptSock logs/cgisock</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B CGI $B%G!<%b%s$H$NDL?.$K;H$o$l$k%=%1%C%H$N(B
- $BL>A0$r@_Dj$7$^$9!#%=%1%C%H$O(B Apache $B$,5/F0$5$l$?%f!<%6(B ($BDL>o(B root) $B$N(B
- $B%Q!<%_%C%7%g%s$rMQ$$$F%*!<%W%s$5$l$^$9!#(BCGI $B%9%/%j%W%H$H$NDL?.$N(B
- $B%;%-%e%j%F%#$rJ]$D$?$a$K!"%=%1%C%H$NB8:_$9$k%G%#%l%/%H%j$K(B
- $BB>$N%f!<%6$,=q$-9~$_8"8B$r;}$C$F$$$J$$$h$&$K$9$k$3$H$,=EMW$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ScriptSock /var/run/cgid.sock
- </example>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_cgid.xml.ko b/docs/manual/mod/mod_cgid.xml.ko
deleted file mode 100644
index 33603fc9cb..0000000000
--- a/docs/manual/mod/mod_cgid.xml.ko
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_cgid.xml.meta">
-
-<name>mod_cgid</name>
-<description>¿ÜºÎ CGI µ¥¸óÀ» »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇà</description>
-<status>Base</status>
-<sourcefile>mod_cgid.c</sourcefile>
-<identifier>cgid_module</identifier>
-<compatibility>À¯´Ð½º¿¡¼­ ¾²·¹µå¸¦ »ç¿ëÇÏ´Â MPMs Àü¿ë</compatibility>
-
-<summary>
- <p>¾Æ·¡¿¡¼­ ¼³¸íÇÏ´Â Ãß°¡µÈ <directive
- module="mod_cgid">ScriptSock</directive> Áö½Ã¾î¸¦ Á¦¿ÜÇÏ°í
- <module>mod_cgid</module>´Â <module>mod_cgi</module>¿Í
- ºñ½ÁÇÏ°Ô µ¿ÀÛÇÑ´Ù. <strong>¾ÆÆÄÄ¡¿Í CGI¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº
- <module>mod_cgi</module>¸¦ Âü°íÇ϶ó.</strong></p>
-
- <p>¾î¶² À¯´Ð½º ¿î¿µÃ¼Á¦ÀÇ °æ¿ì ´ÙÁß¾²·¹µå ¼­¹ö¿¡¼­ ÇÁ·Î¼¼½º¸¦
- Æ÷Å©(fork)ÇÏ¸é »õ·Î¿î ÇÁ·Î¼¼½º°¡ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ¸ðµç ¾²·¹µå¸¦
- º¹Á¦ÇØ¾ß ÇϹǷΠºÎ´ãÀÌ µÈ´Ù. CGI ½ÇÇึ´Ù ÀÌ·± ºÎ´ãÀ» ÁÖÁö
- ¾Ê±âÀ§ÇØ <module>mod_cgid</module>´Â CGI ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â
- ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ Æ÷Å©ÇÏ´Â ¿ÜºÎ µ¥¸óÀ» ¸¸µç´Ù. ÁÖ¼­¹ö´Â ÀÌ
- µ¥¸ó°ú À¯´Ð½º¼ÒÄÏ(unix domain socket)À» »ç¿ëÇÏ¿© Åë½ÅÇÑ´Ù.</p>
-
- <p>ÄÄÆÄÀÏÇÒ¶§ ´ÙÁß¾²·¹µå MPMÀ» ¼±ÅÃÇÏ¸é ±âº»ÀûÀ¸·Î
- <module>mod_cgi</module> ´ë½Å ÀÌ ¸ðµâÀ» »ç¿ëÇÑ´Ù. »ç¿ëÀÚ
- ÀÔÀå¿¡¼­ ÀÌ ¸ðµâÀÇ ¼³Á¤°ú µ¿ÀÛÀº <module>mod_cgi</module>¿Í
- µ¿ÀÏÇÏ´Ù. À¯ÀÏÇÑ Â÷ÀÌÁ¡Àº cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ
- ¼ÒÄÏÀÇ À̸§À» ¼³Á¤ÇÏ´Â <code>ScriptSock</code> Áö½Ã¾î°¡
- Ãß°¡µÈ Á¡ÀÌ´Ù.</p>
-</summary>
-
-<seealso><module>mod_cgi</module></seealso>
-<seealso><a href="../suexec.html">´Ù¸¥ »ç¿ëÀÚ ID·Î CGI ÇÁ·Î±×·¥
-½ÇÇàÇϱâ</a></seealso>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLog</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogLength</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogBuffer</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptSock</name>
-<description>cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§</description>
-<syntax>ScriptSock <var>file-path</var></syntax>
-<default>ScriptSock logs/cgisock</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â CGI µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§À»
- ÁöÁ¤ÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÑ »ç¿ëÀÚ (º¸Åë root) ±ÇÇÑÀ¸·Î ¼ÒÄÏÀ»
- ¿¬´Ù. CGI ½ºÅ©¸³Æ®¿Í Åë½ÅÀÇ º¸¾ÈÀ» À§ÇØ ´Ù¸¥ »ç¿ëÀÚ°¡ ¼ÒÄÏÀÌ
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀ» °¡ÁöÁö¾Ê´Â °ÍÀÌ Áß¿äÇÏ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- ScriptSock /var/run/cgid.sock
- </example>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_cgid.xml.meta b/docs/manual/mod/mod_cgid.xml.meta
deleted file mode 100644
index 56d2bc353f..0000000000
--- a/docs/manual/mod/mod_cgid.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_cgid</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_charset_lite.html b/docs/manual/mod/mod_charset_lite.html
deleted file mode 100644
index 1592ea0133..0000000000
--- a/docs/manual/mod/mod_charset_lite.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_charset_lite.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_charset_lite.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_charset_lite.html.en b/docs/manual/mod/mod_charset_lite.html.en
deleted file mode 100644
index ff33a58d6a..0000000000
--- a/docs/manual/mod/mod_charset_lite.html.en
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_charset_lite - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_charset_lite</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_charset_lite.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_charset_lite.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Specify character set translation or recoding</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>charset_lite_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_charset_lite.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This is an <strong>experimental</strong> module and should
- be used with care. Experiment with your
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> configuration to ensure that it
- performs the desired function.</p>
-
- <p><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> allows the administrator to
- specify the source character set of objects as well as the
- character set they should be translated into before sending to the
- client. <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> does not translate the
- data itself but instead tells Apache what translation to
- perform. <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> is applicable to EBCDIC
- and ASCII host environments. In an EBCDIC environment, Apache
- normally translates text content from the code page of the Apache
- process locale to ISO-8859-1. <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>
- can be used to specify that a different translation is to be
- performed. In an ASCII environment, Apache normally performs no
- translation, so <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> is needed in
- order for any translation to take place.</p>
-
- <p>This module provides a small subset of configuration
- mechanisms implemented by Russian Apache and its associated
- <code>mod_charset</code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#charsetdefault">CharsetDefault</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#charsetoptions">CharsetOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#charsetsourceenc">CharsetSourceEnc</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#problems">Common Problems</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="problems" id="problems">Common Problems</a></h2>
-
- <h3>Invalid character set names</h3>
-
- <p>The character set name parameters of <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code> and
- <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>
- must be acceptable to the translation mechanism used by APR on the
- system where <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> is deployed. These
- character set names are not standardized and are usually not the
- same as the corresponding values used in http headers. Currently,
- APR can only use iconv(3), so you can easily test your character
- set names using the iconv(1) program, as follows:</p>
-
- <div class="example"><p><code>
- iconv -f charsetsourceenc-value -t charsetdefault-value
- </code></p></div>
-
-
- <h3>Mismatch between character set of content and translation
- rules</h3>
-
- <p>If the translation rules don't make sense for the content,
- translation can fail in various ways, including:</p>
-
- <ul>
- <li>The translation mechanism may return a bad return code,
- and the connection will be aborted.</li>
-
- <li>The translation mechanism may silently place special
- characters (e.g., question marks) in the output buffer when
- it cannot translate the input buffer.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CharsetDefault" id="CharsetDefault">CharsetDefault</a> <a name="charsetdefault" id="charsetdefault">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Charset to translate into</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CharsetDefault <var>charset</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_charset_lite</td></tr>
-</table>
- <p>The <code class="directive">CharsetDefault</code> directive specifies the
- charset that content in the associated container should be
- translated to.</p>
-
- <p>The value of the <var>charset</var> argument must be accepted
- as a valid character set name by the character set support in
- APR. Generally, this means that it must be supported by
- iconv.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <span class="indent">
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CharsetOptions" id="CharsetOptions">CharsetOptions</a> <a name="charsetoptions" id="charsetoptions">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures charset translation behavior</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CharsetOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CharsetOptions DebugLevel=0 NoImplicitAdd</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_charset_lite</td></tr>
-</table>
- <p>The <code class="directive">CharsetOptions</code> directive configures certain
- behaviors of <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>. <var>Option</var> can
- be one of</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>The <code>DebugLevel</code> keyword allows you to specify
- the level of debug messages generated by
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>. By default, no messages are
- generated. This is equivalent to <code>DebugLevel=0</code>.
- With higher numbers, more debug messages are generated, and
- server performance will be degraded. The actual meanings of
- the numeric values are described with the definitions of the
- DBGLVL_ constants near the beginning of
- <code>mod_charset_lite.c</code>.</dd>
-
- <dt><code>ImplicitAdd | NoImplicitAdd</code></dt>
-
- <dd>The <code>ImplicitAdd</code> keyword specifies that
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> should implicitly insert its
- filter when the configuration specifies that the character
- set of content should be translated. If the filter chain is
- explicitly configured using the <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> directive, <code>NoImplicitAdd</code>
- should be specified so that <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>
- doesn't add its filter.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CharsetSourceEnc" id="CharsetSourceEnc">CharsetSourceEnc</a> <a name="charsetsourceenc" id="charsetsourceenc">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Source charset of files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CharsetSourceEnc <var>charset</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_charset_lite</td></tr>
-</table>
- <p>The <code class="directive">CharsetSourceEnc</code> directive specifies the
- source charset of files in the associated container.</p>
-
- <p>The value of the <var>charset</var> argument must be accepted
- as a valid character set name by the character set support in
- APR. Generally, this means that it must be supported by
- iconv.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <span class="indent">
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>The character set names in this example work with the iconv
- translation support in Solaris 8.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_charset_lite.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_charset_lite.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_charset_lite.html.ko.euc-kr b/docs/manual/mod/mod_charset_lite.html.ko.euc-kr
deleted file mode 100644
index b29d7b99a4..0000000000
--- a/docs/manual/mod/mod_charset_lite.html.ko.euc-kr
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_charset_lite - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_charset_lite</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_charset_lite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_charset_lite.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¹®ÀÚÁýÇÕ º¯È¯À» ÁöÁ¤</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>charset_lite_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_charset_lite.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <strong>½ÇÇèÀûÀÎ</strong> ¸ðµâÀÌ°í, ÁÖÀÇÀÖ°Ô
- »ç¿ëÇØ¾ß ÇÑ´Ù. ¿øÇÏ´Â µ¿ÀÛÀ» ÇÏ´ÂÁö
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code> ¼³Á¤À» ½ÃÇèÇغÁ¶ó.</p>
-
- <p><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>¸¦ »ç¿ëÇÏ¿© ¹®¼­ ¿øº»ÀÇ
- ¹®ÀÚÁýÇÕ°ú ¹®¼­¸¦ Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ º¯È¯ÇÒ ¹®ÀÚÁýÇÕÀ»
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>´Â Á÷Á¢
- ÀڷḦ º¯È¯ÇÏÁö¾Ê°í ´ë½Å ¾ÆÆÄÄ¡¿¡°Ô º¯È¯Ç϶ó°í ¿äûÇÑ´Ù.
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>´Â EBCDIC°ú ASCII ȯ°æ¿¡¼­
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. EBCDIC ȯ°æ¿¡¼­ ¾ÆÆÄÄ¡´Â º¸Åë ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½ºÀÇ
- ÄÚµåÆäÀÌÁö¿¡¼­ ISO-8859-1 ¹®ÀÚÁýÇÕÀ¸·Î ¹®¼­¸¦ º¯È¯ÇÑ´Ù.
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ º¯È¯À»
- Áö½ÃÇÒ ¼ö ÀÖ´Ù. ASCII ȯ°æ¿¡¼­ ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î º¯È¯À»
- ÇÏÁö ¾Ê±â¶§¹®¿¡, ¾î¶² º¯È¯À» À§Çؼ­´Â
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <p>ÀÌ ¸ðµâÀº ·¯½Ã¾ÆÆÇ ¾ÆÆÄÄ¡ÀÇ <code>mod_charset</code>ÀÌ
- Á¦°øÇÏ´Â ¼³Á¤ÀÇ ÀϺθ¦ Á¦°øÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#charsetdefault">CharsetDefault</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#charsetoptions">CharsetOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#charsetsourceenc">CharsetSourceEnc</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#problems">ÀϹÝÀûÀÎ ¹®Á¦Á¡</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="problems" id="problems">ÀϹÝÀûÀÎ ¹®Á¦Á¡</a></h2>
-
- <h3>À߸øµÈ ¹®ÀÚÁýÇÕ À̸§</h3>
-
- <p><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ
- ARP ¹ø¿ª±â´ÉÀÌ <code class="directive"><a href="#charsetsourceenc">CharsetSourceEnc</a></code>¿Í
- <code class="directive"><a href="#charsetdefault">CharsetDefault</a></code>ÀÇ
- ÆĶó¹ÌÅÍÀÎ ¹®ÀÚÁýÇÕ À̸§À» ó¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¹®ÀÚÁýÇÕ
- À̸§Àº Ç¥ÁØÈ­µÇÁö ¾Ê¾Ò°í, http Çì´õ¿¡ »ç¿ëÇÏ´Â °ª°ú Ç×»ó
- °°Áö´Â ¾Ê´Ù. ÇöÀç APRÀº iconv(3)¸¸À» »ç¿ëÇϱ⶧¹®¿¡,
- ´ÙÀ½°ú °°ÀÌ iconv(1) ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ƯÁ¤ ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- iconv -f charsetsourceenc-value -t charsetdefault-value
- </code></p></div>
-
-
- <h3>³»¿ë°ú º¯È¯±ÔÄ¢ÀÇ ¹®ÀÚÁýÇÕÀÌ ¼­·Î ´Ù¸§</h3>
-
- <p>º¯È¯±ÔÄ¢ÀÌ »óȲ¿¡ ¸ÂÁö¾ÊÀ¸¸é ´ÙÀ½°ú °°Àº ¿©·¯ ¹æ½ÄÀ¸·Î
- º¯È¯ÀÌ ½ÇÆÐÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>º¯È¯±â´ÉÀÌ ½ÇÆÐ ¹ÝȯÄڵ带 ¹ÝȯÇÏ°í ¿¬°áÀÌ ²÷¾îÁú
- ¼ö ÀÖ´Ù.</li>
-
- <li>ÀԷ¹öÆÛ¸¦ º¯È¯ÇÏÁö ¸øÇÒ¶§ Ãâ·Â¹öÆÛ¿¡ ´ë½Å Ưº°ÇÑ
- ¹®ÀÚ¸¦ (¿¹, ¹°À½Ç¥) ÀûÀ» ¼ö ÀÖ´Ù.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CharsetDefault" id="CharsetDefault">CharsetDefault</a> <a name="charsetdefault" id="charsetdefault">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>º¯È¯ÇÒ ¹®ÀÚÁýÇÕ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CharsetDefault <var>charset</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_charset_lite</td></tr>
-</table>
- <p><code class="directive">CharsetDefault</code> Áö½Ã¾î´Â Áö½Ã¾î¸¦
- »ç¿ëÇÑ À§Ä¡¿¡ ÀÖ´Â ¿øº»À» º¯È¯ÇÒ ¹®ÀÚÁýÇÕÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><var>charset</var> ¾Æ±Ô¸ÕÆ®¿¡´Â APRÀÌ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î iconv°¡ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕÀ»
- ÀǹÌÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <span class="indent">
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CharsetOptions" id="CharsetOptions">CharsetOptions</a> <a name="charsetoptions" id="charsetoptions">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¹®ÀÚÁýÇÕ º¯È¯ ±â´ÉÀ» ¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CharsetOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CharsetOptions DebugLevel=0 NoImplicitAdd</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_charset_lite</td></tr>
-</table>
- <p><code class="directive">CharsetOptions</code> Áö½Ã¾î´Â
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>ÀÇ ±â´ÉÀ» ¼³Á¤ÇÑ´Ù.
- <var>Option</var>¿¡´Â ¾Æ·¡ Ç׸ñµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd><code>DebugLevel</code> Å°¿öµå´Â
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>°¡ ±â·ÏÇÏ´Â µð¹ö±×¹®±¸ÀÇ
- ¼öÁØÀ» ¼³Á¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¾î¶² °Íµµ ±â·ÏÇÏÁö ¾Ê´Â´Ù.
- ÀÌ´Â <code>DebugLevel=0</code>°ú °°´Ù. ³ôÀº ¼ýÀÚ¸¦ »ç¿ëÇÒ¼ö·Ï
- ´õ ¸¹Àº µð¹ö±×¹®±¸¸¦ ±â·ÏÇÏ°ÔµÇ¾î ¼­¹ö ¼º´ÉÀÌ ¶³¾îÁø´Ù.
- ¼ýÀÚ°ªÀÇ ½ÇÁ¦ Àǹ̴ <code>mod_charset_lite.c</code> ¾ÕºÎºÐÀÇ
- DBGLVL_ »ó¼ö Á¤ÀǸ¦ Âü°íÇ϶ó.</dd>
-
- <dt><code>ImplicitAdd | NoImplicitAdd</code></dt>
-
- <dd><code>ImplicitAdd</code> Å°¿öµå´Â ³»¿ëÀ» º¯È¯ÇÒ
- ¹®ÀÚÁýÇÕÀ» ÁöÁ¤Çϸé ÀÚµ¿À¸·Î <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>¸¦
- ÇÊÅÍ¿¡ Ãß°¡ÇÑ´Ù. <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> Áö½Ã¾î·Î ÇÊÅͼø¼­¸¦ Á÷Á¢
- ÁöÁ¤ÇÑ´Ù¸é, <code>NoImplicitAdd</code>¸¦ »ç¿ëÇÏ¿©
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>°¡ ÀÚµ¿À¸·Î ÇÊÅÍ¿¡
- Ãß°¡µÇÁö¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CharsetSourceEnc" id="CharsetSourceEnc">CharsetSourceEnc</a> <a name="charsetsourceenc" id="charsetsourceenc">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÆÄÀÏ ¿øº»ÀÇ ¹®ÀÚÁýÇÕ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CharsetSourceEnc <var>charset</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_charset_lite</td></tr>
-</table>
- <p><code class="directive">CharsetSourceEnc</code> Áö½Ã¾î´Â Áö½Ã¾î¸¦
- »ç¿ëÇÑ À§Ä¡¿¡ ÀÖ´Â ÆÄÀÏµé ¿øº»ÀÇ ¹®ÀÚÁýÇÕÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><var>charset</var> ¾Æ±Ô¸ÕÆ®¿¡´Â APRÀÌ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î iconv°¡ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕÀ»
- ÀǹÌÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <span class="indent">
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Solaris 8ÀÇ iconv°¡ ÀÌ ¿¹Á¦ÀÇ ¹®ÀÚÁýÇÕÀ» Áö¿øÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_charset_lite.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_charset_lite.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_charset_lite.xml b/docs/manual/mod/mod_charset_lite.xml
deleted file mode 100644
index a53adfa1a1..0000000000
--- a/docs/manual/mod/mod_charset_lite.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_charset_lite.xml.meta">
-
-<name>mod_charset_lite</name>
-<description>Specify character set translation or recoding</description>
-<status>Experimental</status>
-<sourcefile>mod_charset_lite.c</sourcefile>
-<identifier>charset_lite_module</identifier>
-
-<summary>
- <p>This is an <strong>experimental</strong> module and should
- be used with care. Experiment with your
- <module>mod_charset_lite</module> configuration to ensure that it
- performs the desired function.</p>
-
- <p><module>mod_charset_lite</module> allows the administrator to
- specify the source character set of objects as well as the
- character set they should be translated into before sending to the
- client. <module>mod_charset_lite</module> does not translate the
- data itself but instead tells Apache what translation to
- perform. <module>mod_charset_lite</module> is applicable to EBCDIC
- and ASCII host environments. In an EBCDIC environment, Apache
- normally translates text content from the code page of the Apache
- process locale to ISO-8859-1. <module>mod_charset_lite</module>
- can be used to specify that a different translation is to be
- performed. In an ASCII environment, Apache normally performs no
- translation, so <module>mod_charset_lite</module> is needed in
- order for any translation to take place.</p>
-
- <p>This module provides a small subset of configuration
- mechanisms implemented by Russian Apache and its associated
- <code>mod_charset</code>.</p>
-</summary>
-
-<section id="problems"><title>Common Problems</title>
-
- <section><title>Invalid character set names</title>
-
- <p>The character set name parameters of <directive
- module="mod_charset_lite">CharsetSourceEnc</directive> and
- <directive module="mod_charset_lite">CharsetDefault</directive>
- must be acceptable to the translation mechanism used by APR on the
- system where <module>mod_charset_lite</module> is deployed. These
- character set names are not standardized and are usually not the
- same as the corresponding values used in http headers. Currently,
- APR can only use iconv(3), so you can easily test your character
- set names using the iconv(1) program, as follows:</p>
-
- <example>
- iconv -f charsetsourceenc-value -t charsetdefault-value
- </example>
- </section>
-
- <section><title>Mismatch between character set of content and translation
- rules</title>
-
- <p>If the translation rules don't make sense for the content,
- translation can fail in various ways, including:</p>
-
- <ul>
- <li>The translation mechanism may return a bad return code,
- and the connection will be aborted.</li>
-
- <li>The translation mechanism may silently place special
- characters (e.g., question marks) in the output buffer when
- it cannot translate the input buffer.</li>
- </ul>
- </section>
-</section>
-
-<directivesynopsis>
-<name>CharsetSourceEnc</name>
-<description>Source charset of files</description>
-<syntax>CharsetSourceEnc <var>charset</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>CharsetSourceEnc</directive> directive specifies the
- source charset of files in the associated container.</p>
-
- <p>The value of the <var>charset</var> argument must be accepted
- as a valid character set name by the character set support in
- APR. Generally, this means that it must be supported by
- iconv.</p>
-
- <example><title>Example</title>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <indent>
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>The character set names in this example work with the iconv
- translation support in Solaris 8.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CharsetDefault</name>
-<description>Charset to translate into</description>
-<syntax>CharsetDefault <var>charset</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>CharsetDefault</directive> directive specifies the
- charset that content in the associated container should be
- translated to.</p>
-
- <p>The value of the <var>charset</var> argument must be accepted
- as a valid character set name by the character set support in
- APR. Generally, this means that it must be supported by
- iconv.</p>
-
- <example><title>Example</title>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <indent>
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CharsetOptions</name>
-<description>Configures charset translation behavior</description>
-<syntax>CharsetOptions <var>option</var> [<var>option</var>] ...</syntax>
-<default>CharsetOptions DebugLevel=0 NoImplicitAdd</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>CharsetOptions</directive> directive configures certain
- behaviors of <module>mod_charset_lite</module>. <var>Option</var> can
- be one of</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>The <code>DebugLevel</code> keyword allows you to specify
- the level of debug messages generated by
- <module>mod_charset_lite</module>. By default, no messages are
- generated. This is equivalent to <code>DebugLevel=0</code>.
- With higher numbers, more debug messages are generated, and
- server performance will be degraded. The actual meanings of
- the numeric values are described with the definitions of the
- DBGLVL_ constants near the beginning of
- <code>mod_charset_lite.c</code>.</dd>
-
- <dt><code>ImplicitAdd | NoImplicitAdd</code></dt>
-
- <dd>The <code>ImplicitAdd</code> keyword specifies that
- <module>mod_charset_lite</module> should implicitly insert its
- filter when the configuration specifies that the character
- set of content should be translated. If the filter chain is
- explicitly configured using the <directive module="mod_mime"
- >AddOutputFilter</directive> directive, <code>NoImplicitAdd</code>
- should be specified so that <module>mod_charset_lite</module>
- doesn't add its filter.</dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_charset_lite.xml.ko b/docs/manual/mod/mod_charset_lite.xml.ko
deleted file mode 100644
index 8ef2bb7c89..0000000000
--- a/docs/manual/mod/mod_charset_lite.xml.ko
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_charset_lite.xml.meta">
-
-<name>mod_charset_lite</name>
-<description>¹®ÀÚÁýÇÕ º¯È¯À» ÁöÁ¤</description>
-<status>Experimental</status>
-<sourcefile>mod_charset_lite.c</sourcefile>
-<identifier>charset_lite_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <strong>½ÇÇèÀûÀÎ</strong> ¸ðµâÀÌ°í, ÁÖÀÇÀÖ°Ô
- »ç¿ëÇØ¾ß ÇÑ´Ù. ¿øÇÏ´Â µ¿ÀÛÀ» ÇÏ´ÂÁö
- <module>mod_charset_lite</module> ¼³Á¤À» ½ÃÇèÇغÁ¶ó.</p>
-
- <p><module>mod_charset_lite</module>¸¦ »ç¿ëÇÏ¿© ¹®¼­ ¿øº»ÀÇ
- ¹®ÀÚÁýÇÕ°ú ¹®¼­¸¦ Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ º¯È¯ÇÒ ¹®ÀÚÁýÇÕÀ»
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. <module>mod_charset_lite</module>´Â Á÷Á¢
- ÀڷḦ º¯È¯ÇÏÁö¾Ê°í ´ë½Å ¾ÆÆÄÄ¡¿¡°Ô º¯È¯Ç϶ó°í ¿äûÇÑ´Ù.
- <module>mod_charset_lite</module>´Â EBCDIC°ú ASCII ȯ°æ¿¡¼­
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. EBCDIC ȯ°æ¿¡¼­ ¾ÆÆÄÄ¡´Â º¸Åë ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½ºÀÇ
- ÄÚµåÆäÀÌÁö¿¡¼­ ISO-8859-1 ¹®ÀÚÁýÇÕÀ¸·Î ¹®¼­¸¦ º¯È¯ÇÑ´Ù.
- <module>mod_charset_lite</module>¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ º¯È¯À»
- Áö½ÃÇÒ ¼ö ÀÖ´Ù. ASCII ȯ°æ¿¡¼­ ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î º¯È¯À»
- ÇÏÁö ¾Ê±â¶§¹®¿¡, ¾î¶² º¯È¯À» À§Çؼ­´Â
- <module>mod_charset_lite</module>°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <p>ÀÌ ¸ðµâÀº ·¯½Ã¾ÆÆÇ ¾ÆÆÄÄ¡ÀÇ <code>mod_charset</code>ÀÌ
- Á¦°øÇÏ´Â ¼³Á¤ÀÇ ÀϺθ¦ Á¦°øÇÑ´Ù.</p>
-</summary>
-
-<section id="problems"><title>ÀϹÝÀûÀÎ ¹®Á¦Á¡</title>
-
- <section><title>À߸øµÈ ¹®ÀÚÁýÇÕ À̸§</title>
-
- <p><module>mod_charset_lite</module>¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ
- ARP ¹ø¿ª±â´ÉÀÌ <directive
- module="mod_charset_lite">CharsetSourceEnc</directive>¿Í
- <directive module="mod_charset_lite">CharsetDefault</directive>ÀÇ
- ÆĶó¹ÌÅÍÀÎ ¹®ÀÚÁýÇÕ À̸§À» ó¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¹®ÀÚÁýÇÕ
- À̸§Àº Ç¥ÁØÈ­µÇÁö ¾Ê¾Ò°í, http Çì´õ¿¡ »ç¿ëÇÏ´Â °ª°ú Ç×»ó
- °°Áö´Â ¾Ê´Ù. ÇöÀç APRÀº iconv(3)¸¸À» »ç¿ëÇϱ⶧¹®¿¡,
- ´ÙÀ½°ú °°ÀÌ iconv(1) ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ƯÁ¤ ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù:</p>
-
- <example>
- iconv -f charsetsourceenc-value -t charsetdefault-value
- </example>
- </section>
-
- <section><title>³»¿ë°ú º¯È¯±ÔÄ¢ÀÇ ¹®ÀÚÁýÇÕÀÌ ¼­·Î ´Ù¸§</title>
-
- <p>º¯È¯±ÔÄ¢ÀÌ »óȲ¿¡ ¸ÂÁö¾ÊÀ¸¸é ´ÙÀ½°ú °°Àº ¿©·¯ ¹æ½ÄÀ¸·Î
- º¯È¯ÀÌ ½ÇÆÐÇÒ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>º¯È¯±â´ÉÀÌ ½ÇÆÐ ¹ÝȯÄڵ带 ¹ÝȯÇÏ°í ¿¬°áÀÌ ²÷¾îÁú
- ¼ö ÀÖ´Ù.</li>
-
- <li>ÀԷ¹öÆÛ¸¦ º¯È¯ÇÏÁö ¸øÇÒ¶§ Ãâ·Â¹öÆÛ¿¡ ´ë½Å Ưº°ÇÑ
- ¹®ÀÚ¸¦ (¿¹, ¹°À½Ç¥) ÀûÀ» ¼ö ÀÖ´Ù.</li>
- </ul>
- </section>
-</section>
-
-<directivesynopsis>
-<name>CharsetSourceEnc</name>
-<description>ÆÄÀÏ ¿øº»ÀÇ ¹®ÀÚÁýÇÕ</description>
-<syntax>CharsetSourceEnc <var>charset</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>CharsetSourceEnc</directive> Áö½Ã¾î´Â Áö½Ã¾î¸¦
- »ç¿ëÇÑ À§Ä¡¿¡ ÀÖ´Â ÆÄÀÏµé ¿øº»ÀÇ ¹®ÀÚÁýÇÕÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><var>charset</var> ¾Æ±Ô¸ÕÆ®¿¡´Â APRÀÌ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î iconv°¡ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕÀ»
- ÀǹÌÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <indent>
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>Solaris 8ÀÇ iconv°¡ ÀÌ ¿¹Á¦ÀÇ ¹®ÀÚÁýÇÕÀ» Áö¿øÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CharsetDefault</name>
-<description>º¯È¯ÇÒ ¹®ÀÚÁýÇÕ</description>
-<syntax>CharsetDefault <var>charset</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>CharsetDefault</directive> Áö½Ã¾î´Â Áö½Ã¾î¸¦
- »ç¿ëÇÑ À§Ä¡¿¡ ÀÖ´Â ¿øº»À» º¯È¯ÇÒ ¹®ÀÚÁýÇÕÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p><var>charset</var> ¾Æ±Ô¸ÕÆ®¿¡´Â APRÀÌ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕ
- À̸§À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î iconv°¡ Áö¿øÇÏ´Â ¹®ÀÚÁýÇÕÀ»
- ÀǹÌÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- &lt;Directory /export/home/trawick/apacheinst/htdocs/convert&gt;<br />
- <indent>
- CharsetSourceEnc UTF-16BE<br />
- CharsetDefault ISO-8859-1<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CharsetOptions</name>
-<description>¹®ÀÚÁýÇÕ º¯È¯ ±â´ÉÀ» ¼³Á¤</description>
-<syntax>CharsetOptions <var>option</var> [<var>option</var>] ...</syntax>
-<default>CharsetOptions DebugLevel=0 NoImplicitAdd</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>CharsetOptions</directive> Áö½Ã¾î´Â
- <module>mod_charset_lite</module>ÀÇ ±â´ÉÀ» ¼³Á¤ÇÑ´Ù.
- <var>Option</var>¿¡´Â ¾Æ·¡ Ç׸ñµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd><code>DebugLevel</code> Å°¿öµå´Â
- <module>mod_charset_lite</module>°¡ ±â·ÏÇÏ´Â µð¹ö±×¹®±¸ÀÇ
- ¼öÁØÀ» ¼³Á¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¾î¶² °Íµµ ±â·ÏÇÏÁö ¾Ê´Â´Ù.
- ÀÌ´Â <code>DebugLevel=0</code>°ú °°´Ù. ³ôÀº ¼ýÀÚ¸¦ »ç¿ëÇÒ¼ö·Ï
- ´õ ¸¹Àº µð¹ö±×¹®±¸¸¦ ±â·ÏÇÏ°ÔµÇ¾î ¼­¹ö ¼º´ÉÀÌ ¶³¾îÁø´Ù.
- ¼ýÀÚ°ªÀÇ ½ÇÁ¦ Àǹ̴ <code>mod_charset_lite.c</code> ¾ÕºÎºÐÀÇ
- DBGLVL_ »ó¼ö Á¤ÀǸ¦ Âü°íÇ϶ó.</dd>
-
- <dt><code>ImplicitAdd | NoImplicitAdd</code></dt>
-
- <dd><code>ImplicitAdd</code> Å°¿öµå´Â ³»¿ëÀ» º¯È¯ÇÒ
- ¹®ÀÚÁýÇÕÀ» ÁöÁ¤Çϸé ÀÚµ¿À¸·Î <module>mod_charset_lite</module>¸¦
- ÇÊÅÍ¿¡ Ãß°¡ÇÑ´Ù. <directive module="mod_mime"
- >AddOutputFilter</directive> Áö½Ã¾î·Î ÇÊÅͼø¼­¸¦ Á÷Á¢
- ÁöÁ¤ÇÑ´Ù¸é, <code>NoImplicitAdd</code>¸¦ »ç¿ëÇÏ¿©
- <module>mod_charset_lite</module>°¡ ÀÚµ¿À¸·Î ÇÊÅÍ¿¡
- Ãß°¡µÇÁö¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.</dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_charset_lite.xml.meta b/docs/manual/mod/mod_charset_lite.xml.meta
deleted file mode 100644
index f1fbc29def..0000000000
--- a/docs/manual/mod/mod_charset_lite.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_charset_lite</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_dav.html b/docs/manual/mod/mod_dav.html
deleted file mode 100644
index 347f8cf256..0000000000
--- a/docs/manual/mod/mod_dav.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_dav.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_dav.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_dav.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_dav.html.en b/docs/manual/mod/mod_dav.html.en
deleted file mode 100644
index eeeb3b3c7a..0000000000
--- a/docs/manual/mod/mod_dav.html.en
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_dav</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>dav_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_dav.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides class 1 and class 2 <a href="http://www.webdav.org">WebDAV</a> ('Web-based Distributed
- Authoring and Versioning') functionality for Apache. This
- extension to the HTTP protocol allows creating, moving,
- copying, and deleting resources and collections on a remote web
- server.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#dav">Dav</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#davdepthinfinity">DavDepthInfinity</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#davmintimeout">DavMinTimeout</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Enabling WebDAV</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">Security Issues</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#complex">Complex Configurations</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/mod_dav_fs.html#davlockdb">DavLockDB</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code></li>
-<li><a href="http://www.webdav.org">WebDAV Resources</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Enabling WebDAV</a></h2>
- <p>To enable <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>, add the following to a
- container in your <code>httpd.conf</code> file:</p>
-
- <div class="example"><p><code>Dav On</code></p></div>
-
- <p>This enables the DAV file system provider, which is implemented
- by the <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> module. Therefore, that module
- must be compiled into the server or loaded at runtime using the
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive.</p>
-
- <p>In addition, a location for the DAV lock database must be
- specified in the global section of your <code>httpd.conf</code>
- file using the <code class="directive"><a href="../mod/mod_dav_fs.html#davlockdb">DavLockDB</a></code>
- directive:</p>
-
- <div class="example"><p><code>
- DavLockDB /usr/local/apache2/var/DavLock
- </code></p></div>
-
- <p>The directory containing the lock database file must be
- writable by the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> under which
- Apache is running.</p>
-
- <p>You may wish to add a <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code> clause inside the <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> directive to limit access to
- DAV-enabled locations. If you want to set the maximum amount of
- bytes that a DAV client can send at one request, you have to use
- the <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code>
- directive. The "normal" <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code> directive has no effect on DAV
- requests.</p>
-
- <div class="example"><h3>Full Example</h3><p><code>
- DavLockDB /usr/local/apache2/var/DavLock<br />
- <br />
- &lt;Location /foo&gt;<br />
- <span class="indent">
- Dav On<br />
- <br />
- AuthType Basic<br />
- AuthName DAV<br />
- AuthUserFile user.passwd<br />
- <br />
- &lt;LimitExcept GET OPTIONS&gt;<br />
- <span class="indent">
- require user admin<br />
- </span>
- &lt;/LimitExcept&gt;<br />
- </span>
- &lt;/Location&gt;<br />
- </code></p></div>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> is a descendent of Greg Stein's <a href="http://www.webdav.org/mod_dav/">mod_dav for Apache 1.3</a>. More
- information about the module is available from that site.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Security Issues</a></h2>
-
- <p>Since DAV access methods allow remote clients to manipulate
- files on the server, you must take particular care to assure that
- your server is secure before enabling <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>.</p>
-
- <p>Any location on the server where DAV is enabled should be
- protected by authentication. The use of HTTP Basic Authentication
- is not recommended. You should use at least HTTP Digest
- Authentication, which is provided by the
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> module. Nearly all WebDAV clients
- support this authentication method. An alternative is Basic
- Authentication over an <a href="../ssl/">SSL</a> enabled
- connection.</p>
-
- <p>In order for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> to manage files, it must
- be able to write to the directories and files under its control
- using the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> under which
- Apache is running. New files created will also be owned by this
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>. For this reason, it is
- important to control access to this account. The DAV repository
- is considered private to Apache; modifying files outside of Apache
- (for example using FTP or filesystem-level tools) should not be
- allowed.</p>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> may be subject to various kinds of
- denial-of-service attacks. The <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> directive can be
- used to limit the amount of memory consumed in parsing large DAV
- requests. The <code class="directive"><a href="#davdepthinfinity">DavDepthInfinity</a></code> directive can be
- used to prevent <code>PROPFIND</code> requests on a very large
- repository from consuming large amounts of memory. Another
- possible denial-of-service attack involves a client simply filling
- up all available disk space with many large files. There is no
- direct way to prevent this in Apache, so you should avoid giving
- DAV access to untrusted users.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="complex" id="complex">Complex Configurations</a></h2>
-
- <p>One common request is to use <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> to
- manipulate dynamic files (PHP scripts, CGI scripts, etc). This is
- difficult because a <code>GET</code> request will always run the
- script, rather than downloading its contents. One way to avoid
- this is to map two different URLs to the content, one of which
- will run the script, and one of which will allow it to be
- downloaded and manipulated with DAV.</p>
-
-<div class="example"><p><code>
-Alias /phparea /home/gstein/php_files<br />
-Alias /php-source /home/gstein/php_files<br />
-&lt;Location /php-source&gt;
-<span class="indent">
- DAV On<br />
- ForceType text/plain<br />
-</span>
-&lt;/Location&gt;
-</code></p></div>
-
- <p>With this setup, <code>http://example.com/phparea</code> can be
- used to access the output of the PHP scripts, and
- <code>http://example.com/php-source</code> can be used with a DAV
- client to manipulate them.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable WebDAV HTTP methods</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Use the <code class="directive">Dav</code> directive to enable the
- WebDAV HTTP methods for the given container:</p>
-
- <div class="example"><p><code>
- &lt;Location /foo&gt;<br />
- <span class="indent">
- Dav On<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>The value <code>On</code> is actually an alias for the default
- provider <code>filesystem</code> which is served by the <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> module. Note, that once you have DAV enabled
- for some location, it <em>cannot</em> be disabled for sublocations.
- For a complete configuration example have a look at the <a href="#example">section above</a>.</p>
-
- <div class="warning">
- Do not enable WebDAV until you have secured your server. Otherwise
- everyone will be able to distribute files on your system.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allow PROPFIND, Depth: Infinity requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Use the <code class="directive">DavDepthInfinity</code> directive to
- allow the processing of <code>PROPFIND</code> requests containing the
- header 'Depth: Infinity'. Because this type of request could constitute
- a denial-of-service attack, by default it is not allowed.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Minimum amount of time the server holds a lock on
-a DAV resource</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav</td></tr>
-</table>
- <p>When a client requests a DAV resource lock, it can also
- specify a time when the lock will be automatically removed by
- the server. This value is only a request, and the server can
- ignore it or inform the client of an arbitrary value.</p>
-
- <p>Use the <code class="directive">DavMinTimeout</code> directive to specify, in
- seconds, the minimum lock timeout to return to a client.
- Microsoft Web Folders defaults to a timeout of 120 seconds; the
- <code class="directive">DavMinTimeout</code> can override this to a higher value
- (like 600 seconds) to reduce the chance of the client losing
- the lock due to network latency.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;Location /MSWord&gt;<br />
- <span class="indent">
- DavMinTimeout 600<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav.html.ja.euc-jp b/docs/manual/mod/mod_dav.html.ja.euc-jp
deleted file mode 100644
index 5174440ada..0000000000
--- a/docs/manual/mod/mod_dav.html.ja.euc-jp
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_dav</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>ʬ»¶¥ª¡¼¥µ¥ê¥ó¥°¤È¥Ð¡¼¥¸¥ç¥ó´ÉÍý
-(<a href="http://www.webdav.org/">WebDAV</a>) µ¡Ç½</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>dav_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_dav.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥¯¥é¥¹ 1 ¤È¥¯¥é¥¹ 2 ¤Î
- <a href="http://www.webdav.org">WebDAV</a>
- ('¥¦¥§¥Ö¥Ù¡¼¥¹¤Îʬ»¶¥ª¡¼¥µ¥ê¥ó¥°¤È¥Ð¡¼¥¸¥ç¥ó´ÉÍý')
- µ¡Ç½¤ò Apache ¤ËÄ󶡤·¤Þ¤¹¡£
- ¤³¤Î HTTP ¥×¥í¥È¥³¥ë¤Î³ÈÄ¥¤Ë¤è¤ê¡¢¥ê¥â¡¼¥È¤Î¥¦¥§¥Ö¥µ¡¼¥Ð¾å¤Ë¤¢¤ë
- ¥ê¥½¡¼¥¹¤ä¥³¥ì¥¯¥·¥ç¥ó¤ò
- ºîÀ®¡¢°ÜÆ°¡¢Ê£À½¡¢ºï½ü¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#dav">Dav</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#davdepthinfinity">DavDepthInfinity</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#davmintimeout">DavMinTimeout</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Enabling WebDAV</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">¥»¥­¥å¥ê¥Æ¥£¤ÎÌäÂê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#complex">Ê£»¨¤ÊÀßÄê</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/mod_dav_fs.html#davlockdb">DavLockDB</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code></li>
-<li><a href="http://www.webdav.org">WebDAV Resources</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Enabling WebDAV</a></h2>
- <p>mod_dav ¤òÍ­¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢<code>httpd.conf</code>
- ¥Õ¥¡¥¤¥ëÃæ¤Î¥³¥ó¥Æ¥Ê¤Ë¼¡¤ò²Ã¤¨¤Þ¤¹:</p>
-
- <div class="example"><p><code>Dav On</code></p></div>
-
- <p>¤³¤ì¤Ï DAV ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥×¥í¥Ð¥¤¥À¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£DAV
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥×¥í¥Ð¥¤¥À¤Ï <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Ë
- ¥µ¡¼¥Ð¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤«¡¢¤¢¤ë¤¤¤Ï
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
- ¤ò»ÈÍѤ·¤Æ¼Â¹Ô»þ¤Ë¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¤µ¤é¤Ë¡¢DAV ¥í¥Ã¥¯¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¾ì½ê¤¬
- <code class="directive"><a href="../mod/mod_dav_fs.html#davlockdb">DavLockDB</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ
- <code>httd.conf</code> ¥Õ¥¡¥¤¥ë¤Î¥°¥í¡¼¥Ð¥ë¥»¥¯¥·¥ç¥ó¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë
- ɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- DavLockDB /usr/local/apache2/var/DavLock
- </code></p></div>
-
- <p>¥í¥Ã¥¯¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ï Apache ¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> ¤È <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> ¤Ë½ñ¤­¹þ¤ß¸¢¸Â¤¬¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code>
- Àá¤ò <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥ÖÆâÉô¤ËÄɲ䷤ơ¢DAV ¤¬Í­¸ú¤Ê¾ì½ê¤Ø¤Î
- ¥¢¥¯¥»¥¹¤òÀ©¸Â¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£DAV ¥¯¥é¥¤¥¢¥ó¥È¤¬
- °ìÅ٤Υꥯ¥¨¥¹¥È¤ÇÁ÷¿®¤Ç¤­¤ëºÇÂç¥Ð¥¤¥È¿ô¤ò»ØÄꤷ¤¿¤¤¤È¤­¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¡ÖÄ̾ï¤Î¡×
- <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï DAV ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¤Ï¸úÎϤò»ý¤Á¤Þ¤»¤ó¡£</p>
-
- <div class="example"><h3>´°Á´¤ÊÎã</h3><p><code>
- DavLockDB /usr/local/apache2/var/DavLock<br />
- <br />
- &lt;Location /foo&gt;<br />
- <span class="indent">
- Dav On<br />
- <br />
- AuthType Basic<br />
- AuthName DAV<br />
- AuthUserFile user.passwd<br />
- <br />
- &lt;LimitExcept GET OPTIONS&gt;<br />
- <span class="indent">
- require user admin<br />
- </span>
- &lt;/LimitExcept&gt;<br />
- </span>
- &lt;/Location&gt;<br />
- </code></p></div>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤Ï Greg Stein ¤µ¤ó¤Î <a href="http://www.webdav.org/mod_dav/">Apache 1.3 ÍѤΠmod_dav</a> ¤Ë
- ͳÍ褹¤ë¤â¤Î¤Ç¤¹¡£¤½¤Î¥µ¥¤¥È¤«¤é¤è¤ê¿¤¯¤Î¾ðÊó¤ò¼ê¤ËÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">¥»¥­¥å¥ê¥Æ¥£¤ÎÌäÂê</a></h2>
-
- <p>DAV ¤Î¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤Ï±ó³Ö¥¯¥é¥¤¥¢¥ó¥È¤¬¥µ¡¼¥Ð¤Î¥Õ¥¡¥¤¥ë¤ò
- Áàºî¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¤Î¤Ç¡¢ <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤ò»ÈÍѤ¹¤ë
- Á°¤Ë¡¢¥µ¡¼¥Ð¤¬°ÂÁ´¤Ç¤¢¤ë¤³¤È¤òÆäËÃí°Õ¤·¤Æ³Îǧ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>¥µ¡¼¥Ð¾å¤Î DAV ¤¬»ÈÍѲÄǽ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì½ê¤Ï¤¹¤Ù¤Æǧ¾Ú¤ÇÊݸ¤Æ¤¯¤À¤µ¤¤¡£
- HTTP ´ðËÜǧ¾Ú¤Î»ÈÍѤϿ侩¤Ç¤­¤Þ¤»¤ó¡£¾¯¤Ê¤¯¤È¤â
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ¥â¥¸¥å¡¼¥ë¤ÇÄ󶡤µ¤ì¤ë HTTP
- ¥À¥¤¥¸¥§¥¹¥Èǧ¾Ú¤òÍѤ¤¤ë¤Ù¤­¤Ç¤¹¡£WebDAV ¥¯¥é¥¤¥¢¥ó¥È¤Î¤Û¤È¤ó¤É¤Ï
- ¤³¤Îǧ¾ÚÊýË¡¤ËÂбþ¤·¤Æ¤¤¤Þ¤¹¡£Âå¤ï¤ê¤Ë¡¢<a href="../ssl/">SSL</a> ¤¬
- Í­¸ú¤Ê¥³¥Í¥¯¥·¥ç¥ó¤òÄ̤·¤¿´ðËÜǧ¾Ú¤ò»È¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤¬¥Õ¥¡¥¤¥ë¤òÁàºî¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
- ´ÉÍý²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È¥Õ¥¡¥¤¥ë¤È¤Ë Apache ¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> ¤È <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> ¤Ç½ñ¤­¹þ¤ß²Äǽ¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¿·¤·¤¯ºîÀ®¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤â¤³¤Î <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- ¤È <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> ¤Ë½êÍ­¤µ¤ì¤ë
- ¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ÎÍýͳ¤«¤é¡¢¤½¤Î¥¢¥«¥¦¥ó¥È¤Ø¤Î¥¢¥¯¥»¥¹¤òÀ©¸æ¤¹¤ë¤³¤È¤Ï
- ½ÅÍפǤ¹¡£DAV ¥ê¥Ý¥¸¥È¥ê¤Ï Apache ÀìÍѤΤâ¤Î¤À¤È¤ß¤Ê¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- Apache °Ê³°¤ÎÊýË¡¤Ç¥Õ¥¡¥¤¥ë¤ò½¤Àµ¤¹¤ë¤³¤È (Î㤨¤Ð FTP ¤ä¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à
- ÍѤΥġ¼¥ë¤Ê¤É¤ò»È¤Ã¤Æ) ¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤Ï¤¤¤í¤¤¤í¤Ê¼ïÎà¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â¤Ë¤µ¤é¤µ¤ì¤ë
- ¤«¤â¤·¤ì¤Þ¤»¤ó¡£<code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤È
- Â礭¤Ê DAV ¥ê¥¯¥¨¥¹¥È¤ò²òÀϤ¹¤ë¤È¤­¤Ë¾ÃÈñ¤µ¤ì¤ë¥á¥â¥ê¤ÎÎ̤òÀ©¸Â¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£<code class="directive"><a href="#davdepthinfinity">DavDepthInfinity</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code>PROPFIND</code> ¥ê¥¯¥¨¥¹¥È¤¬µðÂç¥ê¥Ý¥¸¥È¥ê¤ÇÂçÎ̤Υá¥â¥ê¤ò¾ÃÈñ¤¹¤ë¤Î¤ò
- Ëɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Â¾¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â¤Ë¤Ïñ½ã¤Ë»ÈÍѲÄǽ¤Ê¥Ç¥£¥¹¥¯Îΰè¤ò
- ¿¤¯¤ÎÂ礭¤Ê¥Õ¥¡¥¤¥ë¤ÇËä¤á¤Æ¤·¤Þ¤¦¤ó¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤òľÀÜËɤ°ÊýË¡¤Ï
- Apache ¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¿®ÍѤǤ­¤Ê¤¤¥æ¡¼¥¶¤Ë DAV ¥¢¥¯¥»¥¹¤òÄ󶡤¹¤ë¤Î¤Ï
- Èò¤±¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="complex" id="complex">Ê£»¨¤ÊÀßÄê</a></h2>
-
- <p>¤è¤¯¤¢¤ëÍ×µá¤Ë¡¢<code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤ò»È¤Ã¤ÆưŪ¤Ê¥Õ¥¡¥¤¥ë
- (PHP ¥¹¥¯¥ê¥×¥È¡¢CGI ¥¹¥¯¥ê¥×¥È¤Ê¤É) ¤òÁàºî¤·¤¿¤¤¤È¤¤¤¦¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Î¼Â¸½¤Ï¡¢<code>GET</code> ¥ê¥¯¥¨¥¹¥È¤Ï¥¹¥¯¥ê¥×¥È¤ÎÆâÍƤò¥À¥¦¥ó¥í¡¼¥É¤µ¤»¤ë
- Âå¤ï¤ê¤Ë¡¢¥¹¥¯¥ê¥×¥È¤ò¾ï¤Ë¼Â¹Ô¤µ¤»¤Æ¤·¤Þ¤¦¤Î¤ÇÆñ¤·¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ì¤ò²óÈò¤¹¤ëÊýË¡¤Ë¤Ï¡¢Æó¤Ä¤Î°ã¤¦ URL ¤òƱ¤¸¥³¥ó¥Æ¥ó¥Ä¤Ë¥Þ¥Ã¥×¤·¡¢
- °ì¤Ä¤Ï¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤µ¤»¡¢¤â¤¦°ì¤Ä¤Ï¥À¥¦¥ó¥í¡¼¥É¤µ¤»¤¿¤ê¡¢DAV ¤«¤é
- Áàºî¤µ¤ì¤¿¤ê¤¹¤ë¤è¤¦¤ËÀßÄꤹ¤ë¤È¤¤¤¦¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-Alias /phparea /home/gstein/php_files<br />
-Alias /php-source /home/gstein/php_files<br />
-&lt;Location /php-source&gt;
-<span class="indent">
- DAV On<br />
- ForceType text/plain<br />
-</span>
-&lt;/Location&gt;
-</code></p></div>
-
- <p>¤³¤ÎÀßÄê¤Ë¤è¤ê¡¢<code>http://example.com/phparea</code> ¤ò PHP ¥¹¥¯¥ê¥×¥È¤Î
- ½ÐÎϤò¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¡¢
- <code>http://example.com/php-source</code> ¤ò DAV ¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤ë
- ¤¬Áàºî¤Î¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>WebDAV HTTP ¥á¥½¥Ã¥É¤òÍ­¸ú¤Ë¤·¤Þ¤¹</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Í¿¤¨¤é¤ì¤¿¥³¥ó¥Æ¥Ê¤Ç WebDAV HTTP ¥á¥½¥Ã¥É¤¬»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï
- ¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Location /foo&gt;<br />
- <span class="indent">
- Dav On<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p><code>On</code> ¤È¤¤¤¦»ØÄê¤Ï¼ÂºÝ¤Ë¤Ï <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
- ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¥Ç¥Õ¥©¥ë¥È¤Î¥×¥í¥Ð¥¤¥À¡¢<code>filesystem</code>
- ¤Ø¤Î¥¨¥¤¥ê¥¢¥¹¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£°ìÅÙ¤¢¤ë¥í¥±¡¼¥·¥ç¥ó¤Ç DAV
- ¤òÍ­¸ú¤Ë¤·¤¿¸å¤Ï¡¢¤½¤Î¥µ¥Ö¥í¥±¡¼¥·¥ç¥ó¤Ç<em>̵¸ú²½¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤</em>
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£´°Á´¤ÊÀßÄêÎã¤Ï<a href="#example">¾åµ­¤Î¥»¥¯¥·¥ç¥ó</a> ¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <div class="warning">
- ¥µ¡¼¥Ð¤Î¥»¥­¥å¥ê¥Æ¥£¤¬³ÎÊݤǤ­¤ë¤Þ¤Ç WebDAV ¤òÍ­¸ú¤Ë¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- ¤½¤¦¤·¤Ê¤±¤ì¤Ðï¤Ç¤â¤½¤Î¥µ¡¼¥Ð¤Ç¥Õ¥¡¥¤¥ë¤òÇÛÉÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë
- ¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>PROPFIND, Depth: Infinity ¥ê¥¯¥¨¥¹¥È¤òµö²Ä¤·¤Þ¤¹</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_dav</td></tr>
-</table>
- <p>'Depth: Infinity' ¤ò´Þ¤ó¤Ç¤¤¤ë
- <code>PROPFIND</code> ¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
- <code class="directive">DavDepthInfinity</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹¡£¤³¤Î¥¿¥¤¥×¤Î¥ê¥¯¥¨¥¹¥È¤Ï
- denial-of-service ¥¢¥¿¥Ã¥¯¤È¤Ê¤ê¤¦¤ë¤Î¤Ç¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬ DAV ¥ê¥½¡¼¥¹¤Î¥í¥Ã¥¯¤ò°Ý»ý¤¹¤ëºÇ¾®»þ´Ö¤Ç¤¹¡£
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_dav</td></tr>
-</table>
- <p>¥¯¥é¥¤¥¢¥ó¥È¤¬ DAV ¥ê¥½¡¼¥¹¥í¥Ã¥¯¤òÍ׵ᤷ¤¿¾ì¹ç¡¢
- ¥í¥Ã¥¯¤¬¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤Ë²ò½ü¤µ¤ì¤ë¤Þ¤Ç¤Î»þ´Ö¤ò
- Ʊ»þ¤Ë»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ÎÃͤÏñ¤Ê¤ë¥ê¥¯¥¨¥¹¥È¤Ç¤¢¤Ã¤Æ¡¢
- ¥µ¡¼¥Ð¤Ï¤³¤ì¤ò̵»ë¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤·¡¢
- Ǥ°Õ¤ÎÃͤò¥¯¥é¥¤¥¢¥ó¥È¤ËÄÌÃΤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥¯¥é¥¤¥¢¥ó¥È¤ËÌ᤹¥í¥Ã¥¯¥¿¥¤¥à¥¢¥¦¥È¤ÎºÇ¾®»þ´Ö¤ò¡¢
- Éäǡ¢»ØÄꤹ¤ë¤¿¤á¤Ë <code class="directive">DavMinTimeout</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹¡£
- ¥Þ¥¤¥¯¥í¥½¥Õ¥È¤Î¥¦¥§¥Ö¥Õ¥©¥ë¥À¤Î¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï 120 ÉäǤ¹¤¬¡¨
- ¥Í¥Ã¥È¥ï¡¼¥¯¤ÎÃÙ±ä¤Î¤»¤¤¤Ç¥¯¥é¥¤¥¢¥ó¥È¤¬¥í¥Ã¥¯¤ò¼º¤¦¤Î¤ò¸º¤é¤¹¤¿¤á¤Ë¡¢
- <code class="directive">DavMinTimeout</code> ¤ò»È¤Ã¤Æ
- ¤³¤ì¤ò¤â¤Ã¤ÈÂ礭¤ÊÃÍ (Î㤨¤Ð 600 ÉÃ) ¤Ë¾å½ñ¤­¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;Location /MSWord&gt;<br />
- <span class="indent">
- DavMinTimeout 600<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav.html.ko.euc-kr b/docs/manual/mod/mod_dav.html.ko.euc-kr
deleted file mode 100644
index adcd82aa59..0000000000
--- a/docs/manual/mod/mod_dav.html.ko.euc-kr
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_dav</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dav.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) ±â´É</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>dav_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_dav.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ¾ÆÆÄÄ¡¿¡ <a href="http://www.webdav.org">WebDAV</a>
- ('Web-based Distributed Authoring and Versioning') class 1°ú
- class 2 ±â´ÉÀ» Ãß°¡ÇÑ´Ù. WebDAV´Â ¿ø°Ý À¥¼­¹öÀÇ ÀÚ¿ø°ú
- ÄÝ·º¼Ç(collection)À» <span class="transnote">(<em>¿ªÁÖ;</em> ÄÝ·º¼ÇÀº ÆÄÀϽýºÅÛÀÇ µð·ºÅ丮¿Í
- °°Àº °³³äÀÌ´Ù)</span> ¸¸µé°í, ¿Å±â°í, º¹»çÇÏ°í, Áö¿ï
- ¼ö ÀÖµµ·Ï HTTP ÇÁ·ÎÅäÄÝÀ» È®ÀåÇÑ °ÍÀÌ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#dav">Dav</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#davdepthinfinity">DavDepthInfinity</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#davmintimeout">DavMinTimeout</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">WebDAV »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">º¸¾È ¹®Á¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#complex">º¹ÀâÇÑ ¼³Á¤</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/mod_dav_fs.html#davlockdb">DavLockDB</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code></li>
-<li><a href="http://www.webdav.org">WebDAV Á¤º¸</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">WebDAV »ç¿ëÇϱâ</a></h2>
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>¸¦ »ç¿ëÇÏ·Á¸é <code>httpd.conf</code>
- ÆÄÀÏ¿¡ ¾Æ·¡°ú °°ÀÌ Ãß°¡ÇÑ´Ù:</p>
-
- <div class="example"><p><code>Dav On</code></p></div>
-
- <p>±×·¯¸é <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> ¸ðµâÀÌ ±¸ÇöÇÏ´Â DAV
- ÆÄÀϽýºÅÛ Á¦°øÀÚ(provider)¸¦ »ç¿ëÇÑ´Ù. ±×·¯¹Ç·Î ÀÌ ¸ðµâµµ
- ¼­¹ö¿¡ °°ÀÌ ÄÄÆÄÀϵÇÀְųª <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î·Î ½ÇÇàÁß¿¡
- Àоîµé¿©¾ß ÇÑ´Ù.</p>
-
- <p>¶Ç, DAV Àá±Ý(lock) µ¥ÀÌÅͺ£À̽ºÀÇ À§Ä¡¸¦ <code>httpd.conf</code>
- ÆÄÀÏÀÇ Àü¿ª ºÎºÐ¿¡ <code class="directive"><a href="../mod/mod_dav_fs.html#davlockdb">DavLockDB</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ÁöÁ¤ÇØ¾ß ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- DavLockDB /usr/local/apache2/var/DavLock
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>¿Í <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>Àº Àá±Ý µ¥ÀÌÅͺ£À̽º°¡
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù.</p>
-
- <p>DAV¸¦ »ç¿ëÇÏ´Â À§Ä¡¿¡ Á¢±ÙÀ» Á¦ÇÑÇϱâÀ§ÇØ <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> Áö½Ã¾î
- ¾È¿¡ <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. DAV Ŭ¶óÀ̾ðÆ®°¡ ÇѹøÀÇ ¿äû¿¡
- º¸³¾ ¼ö ÀÖ´Â ÃÖ´ë ¹ÙÀÌÆ®¼ö¸¦ Á¦ÇÑÇÏ·Á¸é <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- "ÀϹÝÀûÀÎ" <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>
- Áö½Ã¾î´Â DAV ¿äû°ú °ü°è¾ø´Ù.</p>
-
- <div class="example"><h3>Àüü ¿¹Á¦</h3><p><code>
- DavLockDB /usr/local/apache2/var/DavLock<br />
- <br />
- &lt;Location /foo&gt;<br />
- <span class="indent">
- Dav On<br />
- <br />
- AuthType Basic<br />
- AuthName DAV<br />
- AuthUserFile user.passwd<br />
- <br />
- &lt;LimitExcept GET OPTIONS&gt;<br />
- <span class="indent">
- require user admin<br />
- </span>
- &lt;/LimitExcept&gt;<br />
- </span>
- &lt;/Location&gt;<br />
- </code></p></div>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>´Â Greg SteinÀÌ ¸¸µç <a href="http://www.webdav.org/mod_dav/">Apache 1.3¿ë mod_dav</a>¸¦
- ±â¹ÝÀ¸·Î ¸¸µé¾ú´Ù. ¸ðµâ¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ±× »çÀÌÆ®¸¦
- Âü°íÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">º¸¾È ¹®Á¦</a></h2>
-
- <p>DAV¸¦ »ç¿ëÇÏ¸é ¿ø°Ý Ŭ¶óÀ̾ðÆ®°¡ ¼­¹öÀÇ ÆÄÀÏÀ» Á¶ÀÛÇÒ
- ¼ö Àֱ⶧¹®¿¡, <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>¸¦ »ç¿ëÇϱâ Àü¿¡
- ¼­¹ö°¡ ¾ÈÀüÇÑÁö Ưº°È÷ °ü½ÉÀ» °¡Á®¾ß ÇÑ´Ù.</p>
-
- <p>¼­¹ö¿¡¼­ DAV°¡ °¡´ÉÇÑ À§Ä¡´Â ÀÎÁõÀ¸·Î º¸È£ÇØ¾ß ÇÑ´Ù.
- HTTP Basic Authentication´Â ÃßõÇÏÁö ¾Ê´Â´Ù. ÃÖ¼ÒÇÑ
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ¸ðµâÀÌ Á¦°øÇÏ´Â HTTP Digest
- AuthenticationÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. °ÅÀÇ ¸ðµç WebDAV Ŭ¶óÀ̾ðÆ®´Â
- ÀÌ ÀÎÁõ ¹æ½ÄÀ» Áö¿øÇÑ´Ù. ¾Æ´Ï¸é <a href="../ssl/">SSL</a>
- ¿¬°á¿¡¼­ Basic AuthenticationÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>°¡ ÆÄÀÏÀ» Á¶ÀÛÇÏ·Á¸é, ¾ÆÆÄÄ¡¸¦
- ½ÇÇàÇÏ´Â <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>¿Í
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>Àº ÇØ´ç
- µð·ºÅ丮¿Í ÆÄÀÏ¿¡ ¾²±â ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù. ¶Ç, »õ·Î »ý¼ºÇÑ
- ÆÄÀÏÀº <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>¿Í
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>ÀÌ ¼ÒÀ¯ÇÏ°Ô
- µÈ´Ù. ±×·¡¼­ ¾Æ¹«³ª ÀÌ °èÁ¤¿¡ Á¢±ÙÇÒ ¼ö ¾øµµ·Ï Ç϶ó. DAV
- ÀúÀå¼Ò´Â ¾ÆÆÄÄ¡¸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ ÅëÇÏÁö¾Ê°í
- (¿¹¸¦ µé¾î FTP³ª ÆÄÀϽýºÅÛ µµ±¸¸¦ »ç¿ëÇÏ¿©) ÆÄÀÏÀ» ¼öÁ¤ÇÔÀ»
- Çã¿ëÇÏ¸é ¾ÈµÈ´Ù.</p>
-
- <p><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>´Â ¿©·¯ ¼­ºñ½º°ÅºÎ °ø°ÝÀÇ ´ë»óÀÌ
- µÉ ¼ö ÀÖ´Ù. <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© Å« DAV ¿äûÀ» ÀÐÀ»¶§ ¸Þ¸ð¸®·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.
- <code class="directive"><a href="#davdepthinfinity">DavDepthInfinity</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¸¹Àº ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇϱâÀ§ÇÑ ¸Å¿ì Å« ÀúÀå¼ÒÀÇ
- <code>PROPFIND</code> ¿äûÀ» ¸·À» ¼ö ÀÖ´Ù. ´Ü¼øÈ÷ Ŭ¶óÀ̾ðÆ®°¡
- ¿©·¯ Å« ÆÄÀϵé·Î µð½ºÅ©°ø°£À» ä¿ì´Â ¼­ºñ½º°ÅºÎ °ø°Ýµµ °¡´ÉÇÏ´Ù.
- ¾ÆÆÄÄ¡¿¡¼­ À̸¦ ¸·À» Á÷Á¢ÀûÀÎ ¹æ¹ýÀº ¾ø´Ù. ±×·¯¹Ç·Î ½Å·ÚÇÏÁö¾Ê´Â
- »ç¿ëÀÚ¿¡°Ô DAV Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Êµµ·ÏÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="complex" id="complex">º¹ÀâÇÑ ¼³Á¤</a></h2>
-
- <p>ÀϹÝÀûÀÎ Áú¹®Áß Çϳª´Â (PHP ½ºÅ©¸³Æ®, CGI ½ºÅ©¸³Æ® µî)
- µ¿ÀûÆÄÀÏ ÀÛ¾÷À» À§ÇØ <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>¸¦ »ç¿ëÇÏ´Â
- ¹æ¹ýÀÌ´Ù. ÀÌ´Â <code>GET</code> ¿äûÀÌ ÆÄÀÏ ³»¿ëÀ» ´Ù¿î·ÎµåÇÏÁö
- ¾Ê°í Ç×»ó ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϹǷΠ¾î·Æ´Ù. ÇØ°á¹æ¹ýÁß Çϳª´Â
- ³»¿ë¿¡ µÎ°³ÀÇ URLÀ» ´ëÀÀÇÏ´Â °ÍÀÌ´Ù. ÇÑ URLÀº ½ºÅ©¸³Æ®¸¦
- ½ÇÇàÇÏ°í, ´Ù¸¥ URL·Î´Â ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ¿© DAV·Î ÀÛ¾÷ÇÒ
- ¼ö ÀÖ´Ù.</p>
-
-<div class="example"><p><code>
-Alias /phparea /home/gstein/php_files<br />
-Alias /php-source /home/gstein/php_files<br />
-&lt;Location /php-source&gt;
-<span class="indent">
- DAV On<br />
- ForceType text/plain<br />
-</span>
-&lt;/Location&gt;
-</code></p></div>
-
- <p>ÀÌ ¼³Á¤¿¡¼­ <code>http://example.com/phparea</code>´Â
- PHP ½ºÅ©¸³Æ®ÀÇ °á°ú¸¦ º¸¿©ÁÖ°í,
- <code>http://example.com/php-source</code>·Î´Â DAV Ŭ¶óÀ̾ðÆ®¿¡¼­
- ½ºÅ©¸³Æ®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Dav" id="Dav">Dav</a> <a name="dav" id="dav">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>WebDAV HTTP ¸Þ½áµå¸¦ ½ÃÀÛÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Dav On|Off|<var>provider-name</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Dav Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
-</table>
- <p>ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ WebDAV HTTP ¸Þ½áµå¸¦ »ç¿ëÇÏ·Á¸é
- <code class="directive">Dav</code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- &lt;Location /foo&gt;<br />
- <span class="indent">
- Dav On<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p><code>On</code> °ªÀº ½ÇÁ¦·Î <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
- ¸ðµâÀÌ Á¦°øÇÏ´Â ±âº» Á¦°øÀÚÀÎ <code>filesystem</code>ÀÇ
- º°ÄªÀÌ´Ù. ¾î¶² À§Ä¡¿¡¼­ DAV¸¦ ½ÃÀÛÇϸé ÇÏÀ§°ø°£¿¡¼­ DAV¸¦
- »ç¿ë¾ÈÇϵµ·Ï ¼³Á¤ÇÒ ¼ö <em>¾øÀ½À»</em> ÁÖÀÇÇ϶ó. ¿ÏÀüÇÑ
- ¼³Á¤¿¹´Â <a href="#example">À§ÀÇ Àý</a>À» Âü°íÇ϶ó.</p>
-
- <div class="warning">
- ¼­¹ö¸¦ ¾ÈÀüÇÏ°Ô ±¸¼ºÇÒ¶§±îÁö WebDAVÀ» »ç¿ëÇÏÁö ¸¶¶ó. ±×·¸Áö
- ¾ÊÀ¸¸é ´©±¸¶óµµ ¼­¹ö¸¦ ÅëÇØ ÆÄÀÏÀ» ºÐ¹èÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavDepthInfinity" id="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity" id="davdepthinfinity">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>PROPFINDÀÇ Depth: Infinity ¿äûÀ» Çã°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavDepthInfinity on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DavDepthInfinity off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
-</table>
- <p><code class="directive">DavDepthInfinity</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- 'Depth: Infinity' Çì´õ¸¦ °¡Áø <code>PROPFIND</code> ¿äûÀ»
- Çã°¡ÇÑ´Ù. ÀÌ·± ¿äûÀ» »ç¿ëÇÏ¿© ¼­ºñ½º°ÅºÎ °ø°ÝÀÌ °¡´ÉÇϱâ
- ¶§¹®¿¡ ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavMinTimeout" id="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout" id="davmintimeout">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¼­¹ö°¡ DAV ÀÚ¿ø¿¡ ´ëÇØ À¯ÁöÇÒ Àá±ÝÀÇ Ãּҽð£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavMinTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DavMinTimeout 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav</td></tr>
-</table>
- <p>Ŭ¶óÀ̾ðÆ®°¡ DAV ÀÚ¿ø¿¡ Àá±Ý(lock)À» ¿äûÇÒ¶§ ¼­¹ö°¡
- ¾Ë¾Æ¼­ Àá±ÝÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Â ½Ã°£À» °°ÀÌ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ÀÌ °ªÀº
- ´ÜÁö ¿äûÀÏ»ÓÀ̸ç, ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¿äûÇÑ °ªÀ» ¹«½ÃÇÏ°í
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÓÀÇÀÇ ½Ã°£À» ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="directive">DavMinTimeout</code> Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³¾ ÃÖ¼Ò Àá±Ý ½Ã°£À» (ÃÊ´ÜÀ§) ÁöÁ¤ÇÑ´Ù. Microsoft Web Folders´Â
- ±âº»°ªÀ¸·Î 120 Ãʸ¦ »ç¿ëÇÑ´Ù. <code class="directive">DavMinTimeout</code>¿¡
- (600 ÃÊ¿Í °°ÀÌ) ´õ ³ôÀº °ªÀ» »ç¿ëÇϸé Ŭ¶óÀ̾ðÆ®°¡ ³×Æ®¿÷
- Áö¿¬¶§¹®¿¡ Àá±ÝÀ» ÀҰԵǴ °æ¿ì¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;Location /MSWord&gt;<br />
- <span class="indent">
- DavMinTimeout 600<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dav.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav.xml b/docs/manual/mod/mod_dav.xml
deleted file mode 100644
index c1342b7ee8..0000000000
--- a/docs/manual/mod/mod_dav.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav.xml.meta">
-
-<name>mod_dav</name>
-<description>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</description>
-<status>Extension</status>
-<sourcefile>mod_dav.c</sourcefile>
-<identifier>dav_module</identifier>
-
-<summary>
- <p>This module provides class 1 and class 2 <a
- href="http://www.webdav.org">WebDAV</a> ('Web-based Distributed
- Authoring and Versioning') functionality for Apache. This
- extension to the HTTP protocol allows creating, moving,
- copying, and deleting resources and collections on a remote web
- server.</p>
-</summary>
-<seealso><directive module="mod_dav_fs">DavLockDB</directive></seealso>
-<seealso><directive module="core">LimitXMLRequestBody</directive></seealso>
-<seealso><a href="http://www.webdav.org">WebDAV Resources</a></seealso>
-
-<section id="example"><title>Enabling WebDAV</title>
- <p>To enable <module>mod_dav</module>, add the following to a
- container in your <code>httpd.conf</code> file:</p>
-
- <example>Dav On</example>
-
- <p>This enables the DAV file system provider, which is implemented
- by the <module>mod_dav_fs</module> module. Therefore, that module
- must be compiled into the server or loaded at runtime using the
- <directive module="mod_so">LoadModule</directive> directive.</p>
-
- <p>In addition, a location for the DAV lock database must be
- specified in the global section of your <code>httpd.conf</code>
- file using the <directive module="mod_dav_fs">DavLockDB</directive>
- directive:</p>
-
- <example>
- DavLockDB /usr/local/apache2/var/DavLock
- </example>
-
- <p>The directory containing the lock database file must be
- writable by the <directive module="mpm_common">User</directive>
- and <directive module="mpm_common" >Group</directive> under which
- Apache is running.</p>
-
- <p>You may wish to add a <directive module="core" type="section"
- >Limit</directive> clause inside the <directive module="core"
- type="section">Location</directive> directive to limit access to
- DAV-enabled locations. If you want to set the maximum amount of
- bytes that a DAV client can send at one request, you have to use
- the <directive module="core">LimitXMLRequestBody</directive>
- directive. The "normal" <directive module="core"
- >LimitRequestBody</directive> directive has no effect on DAV
- requests.</p>
-
- <example><title>Full Example</title>
- DavLockDB /usr/local/apache2/var/DavLock<br />
- <br />
- &lt;Location /foo&gt;<br />
- <indent>
- Dav On<br />
- <br />
- AuthType Basic<br />
- AuthName DAV<br />
- AuthUserFile user.passwd<br />
- <br />
- &lt;LimitExcept GET OPTIONS&gt;<br />
- <indent>
- require user admin<br />
- </indent>
- &lt;/LimitExcept&gt;<br />
- </indent>
- &lt;/Location&gt;<br />
- </example>
-
- <p><module>mod_dav</module> is a descendent of Greg Stein's <a
- href="http://www.webdav.org/mod_dav/">mod_dav for Apache 1.3</a>. More
- information about the module is available from that site.</p>
-</section>
-
-<section id="security"><title>Security Issues</title>
-
- <p>Since DAV access methods allow remote clients to manipulate
- files on the server, you must take particular care to assure that
- your server is secure before enabling <module>mod_dav</module>.</p>
-
- <p>Any location on the server where DAV is enabled should be
- protected by authentication. The use of HTTP Basic Authentication
- is not recommended. You should use at least HTTP Digest
- Authentication, which is provided by the
- <module>mod_auth_digest</module> module. Nearly all WebDAV clients
- support this authentication method. An alternative is Basic
- Authentication over an <a href="../ssl/">SSL</a> enabled
- connection.</p>
-
- <p>In order for <module>mod_dav</module> to manage files, it must
- be able to write to the directories and files under its control
- using the <directive module="mpm_common">User</directive> and
- <directive module="mpm_common">Group</directive> under which
- Apache is running. New files created will also be owned by this
- <directive module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive>. For this reason, it is
- important to control access to this account. The DAV repository
- is considered private to Apache; modifying files outside of Apache
- (for example using FTP or filesystem-level tools) should not be
- allowed.</p>
-
- <p><module>mod_dav</module> may be subject to various kinds of
- denial-of-service attacks. The <directive
- module="core">LimitXMLRequestBody</directive> directive can be
- used to limit the amount of memory consumed in parsing large DAV
- requests. The <directive
- module="mod_dav">DavDepthInfinity</directive> directive can be
- used to prevent <code>PROPFIND</code> requests on a very large
- repository from consuming large amounts of memory. Another
- possible denial-of-service attack involves a client simply filling
- up all available disk space with many large files. There is no
- direct way to prevent this in Apache, so you should avoid giving
- DAV access to untrusted users.</p>
-</section>
-
-<section id="complex"><title>Complex Configurations</title>
-
- <p>One common request is to use <module>mod_dav</module> to
- manipulate dynamic files (PHP scripts, CGI scripts, etc). This is
- difficult because a <code>GET</code> request will always run the
- script, rather than downloading its contents. One way to avoid
- this is to map two different URLs to the content, one of which
- will run the script, and one of which will allow it to be
- downloaded and manipulated with DAV.</p>
-
-<example>
-Alias /phparea /home/gstein/php_files<br />
-Alias /php-source /home/gstein/php_files<br />
-&lt;Location /php-source&gt;
-<indent>
- DAV On<br />
- ForceType text/plain<br />
-</indent>
-&lt;/Location&gt;
-</example>
-
- <p>With this setup, <code>http://example.com/phparea</code> can be
- used to access the output of the PHP scripts, and
- <code>http://example.com/php-source</code> can be used with a DAV
- client to manipulate them.</p>
-</section>
-
-<directivesynopsis>
-<name>Dav</name>
-<description>Enable WebDAV HTTP methods</description>
-<syntax>Dav On|Off|<var>provider-name</var></syntax>
-<default>Dav Off</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>Use the <directive>Dav</directive> directive to enable the
- WebDAV HTTP methods for the given container:</p>
-
- <example>
- &lt;Location /foo&gt;<br />
- <indent>
- Dav On<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>The value <code>On</code> is actually an alias for the default
- provider <code>filesystem</code> which is served by the <module
- >mod_dav_fs</module> module. Note, that once you have DAV enabled
- for some location, it <em>cannot</em> be disabled for sublocations.
- For a complete configuration example have a look at the <a
- href="#example">section above</a>.</p>
-
- <note type="warning">
- Do not enable WebDAV until you have secured your server. Otherwise
- everyone will be able to distribute files on your system.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavMinTimeout</name>
-<description>Minimum amount of time the server holds a lock on
-a DAV resource</description>
-<syntax>DavMinTimeout <var>seconds</var></syntax>
-<default>DavMinTimeout 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>When a client requests a DAV resource lock, it can also
- specify a time when the lock will be automatically removed by
- the server. This value is only a request, and the server can
- ignore it or inform the client of an arbitrary value.</p>
-
- <p>Use the <directive>DavMinTimeout</directive> directive to specify, in
- seconds, the minimum lock timeout to return to a client.
- Microsoft Web Folders defaults to a timeout of 120 seconds; the
- <directive>DavMinTimeout</directive> can override this to a higher value
- (like 600 seconds) to reduce the chance of the client losing
- the lock due to network latency.</p>
-
- <example><title>Example</title>
- &lt;Location /MSWord&gt;<br />
- <indent>
- DavMinTimeout 600<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavDepthInfinity</name>
-<description>Allow PROPFIND, Depth: Infinity requests</description>
-<syntax>DavDepthInfinity on|off</syntax>
-<default>DavDepthInfinity off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>Use the <directive>DavDepthInfinity</directive> directive to
- allow the processing of <code>PROPFIND</code> requests containing the
- header 'Depth: Infinity'. Because this type of request could constitute
- a denial-of-service attack, by default it is not allowed.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_dav.xml.ja b/docs/manual/mod/mod_dav.xml.ja
deleted file mode 100644
index 55973e6875..0000000000
--- a/docs/manual/mod/mod_dav.xml.ja
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav.xml.meta">
-
-<name>mod_dav</name>
-<description>$BJ,;6%*!<%5%j%s%0$H%P!<%8%g%s4IM}(B
-(<a href="http://www.webdav.org/">WebDAV</a>) $B5!G=(B</description>
-<status>Extension</status>
-<sourcefile>mod_dav.c</sourcefile>
-<identifier>dav_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O%/%i%9(B 1 $B$H%/%i%9(B 2 $B$N(B
- <a href="http://www.webdav.org">WebDAV</a>
- ('$B%&%'%V%Y!<%9$NJ,;6%*!<%5%j%s%0$H%P!<%8%g%s4IM}(B')
- $B5!G=$r(B Apache $B$KDs6!$7$^$9!#(B
- $B$3$N(B HTTP $B%W%m%H%3%k$N3HD%$K$h$j!"%j%b!<%H$N%&%'%V%5!<%P>e$K$"$k(B
- $B%j%=!<%9$d%3%l%/%7%g%s$r(B
- $B:n@.!"0\F0!"J#@=!":o=|$G$-$k$h$&$K$J$j$^$9!#(B</p>
-</summary>
-<seealso><directive module="mod_dav_fs">DavLockDB</directive></seealso>
-<seealso><directive module="core">LimitXMLRequestBody</directive></seealso>
-<seealso><a href="http://www.webdav.org">WebDAV Resources</a></seealso>
-
-<section id="example"><title>Enabling WebDAV</title>
- <p>mod_dav $B$rM-8z$K$9$k$K$O!"(B<code>httpd.conf</code>
- $B%U%!%$%kCf$N%3%s%F%J$K<!$r2C$($^$9(B:</p>
-
- <example>Dav On</example>
-
- <p>$B$3$l$O(B DAV $B%U%!%$%k%7%9%F%`%W%m%P%$%@$rM-8z$K$7$^$9!#(BDAV
- $B%U%!%$%k%7%9%F%`%W%m%P%$%@$O(B <module>mod_dav_fs</module>
- $B%b%8%e!<%k$G<BAu$5$l$F$$$^$9!#$G$9$+$i!"$3$N%b%8%e!<%k$O%3%s%Q%$%k;~$K(B
- $B%5!<%P$KAH$_9~$^$l$F$$$k$+!"$"$k$$$O(B
- <directive module="mod_so">LoadModule</directive>
- $B$r;HMQ$7$F<B9T;~$K%m!<%I$5$l$F$$$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>$B$5$i$K!"(BDAV $B%m%C%/%G!<%?%Y!<%9$N>l=j$,(B
- <directive module="mod_dav_fs">DavLockDB</directive> $B%G%#%l%/%F%#%V$r;H$C$F(B
- <code>httd.conf</code> $B%U%!%$%k$N%0%m!<%P%k%;%/%7%g%s$K;XDj$5$l$F$$$k(B
- $BI,MW$,$"$j$^$9!#(B</p>
-
- <example>
- DavLockDB /usr/local/apache2/var/DavLock
- </example>
-
- <p>$B%m%C%/%G!<%?%Y!<%9%U%!%$%k$N$"$k%G%#%l%/%H%j$O(B Apache $B$,<B9T$5$l$F$$$k(B
- <directive module="mpm_common">User</directive> $B$H(B <directive
- module="mpm_common" >Group</directive> $B$K=q$-9~$_8"8B$,$"$kI,MW$,$"$j$^$9!#(B</p>
-
- <p><directive module="core" type="section">Limit</directive>
- $B@a$r(B <directive module="core" type="section">Location</directive>
- $B%G%#%l%/%F%#%VFbIt$KDI2C$7$F!"(BDAV $B$,M-8z$J>l=j$X$N(B
- $B%"%/%;%9$r@)8B$9$k$3$H$b$G$-$^$9!#(BDAV $B%/%i%$%"%s%H$,(B
- $B0lEY$N%j%/%(%9%H$GAw?.$G$-$k:GBg%P%$%H?t$r;XDj$7$?$$$H$-$O!"(B
- <directive module="core">LimitXMLRequestBody</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$9$kI,MW$,$"$j$^$9!#!VDL>o$N!W(B
- <directive module="core">LimitRequestBody</directive>
- $B%G%#%l%/%F%#%V$O(B DAV $B%j%/%(%9%H$KBP$7$F$O8zNO$r;}$A$^$;$s!#(B</p>
-
- <example><title>$B40A4$JNc(B</title>
- DavLockDB /usr/local/apache2/var/DavLock<br />
- <br />
- &lt;Location /foo&gt;<br />
- <indent>
- Dav On<br />
- <br />
- AuthType Basic<br />
- AuthName DAV<br />
- AuthUserFile user.passwd<br />
- <br />
- &lt;LimitExcept GET OPTIONS&gt;<br />
- <indent>
- require user admin<br />
- </indent>
- &lt;/LimitExcept&gt;<br />
- </indent>
- &lt;/Location&gt;<br />
- </example>
-
- <p><module>mod_dav</module> $B$O(B Greg Stein $B$5$s$N(B <a
- href="http://www.webdav.org/mod_dav/">Apache 1.3 $BMQ$N(B mod_dav</a> $B$K(B
- $BM3Mh$9$k$b$N$G$9!#$=$N%5%$%H$+$i$h$jB?$/$N>pJs$r<j$KF~$l$k$3$H$,$G$-$^$9!#(B</p>
-</section>
-
-<section id="security"><title>$B%;%-%e%j%F%#$NLdBj(B</title>
-
- <p>DAV $B$N%"%/%;%9%a%=%C%I$O1s3V%/%i%$%"%s%H$,%5!<%P$N%U%!%$%k$r(B
- $BA`:n$9$k$3$H$r2DG=$K$7$^$9$N$G!"(B <module>mod_dav</module> $B$r;HMQ$9$k(B
- $BA0$K!"%5!<%P$,0BA4$G$"$k$3$H$rFC$KCm0U$7$F3NG'$7$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p>$B%5!<%P>e$N(B DAV $B$,;HMQ2DG=$K$J$C$F$$$k>l=j$O$9$Y$FG'>Z$GJ]8n$7$F$/$@$5$$!#(B
- HTTP $B4pK\G'>Z$N;HMQ$O?d>)$G$-$^$;$s!#>/$J$/$H$b(B
- <module>mod_auth_digest</module> $B%b%8%e!<%k$GDs6!$5$l$k(B HTTP
- $B%@%$%8%'%9%HG'>Z$rMQ$$$k$Y$-$G$9!#(BWebDAV $B%/%i%$%"%s%H$N$[$H$s$I$O(B
- $B$3$NG'>ZJ}K!$KBP1~$7$F$$$^$9!#Be$o$j$K!"(B<a href="../ssl/">SSL</a> $B$,(B
- $BM-8z$J%3%M%/%7%g%s$rDL$7$?4pK\G'>Z$r;H$&$3$H$b$G$-$^$9!#(B</p>
-
- <p><module>mod_dav</module> $B$,%U%!%$%k$rA`:n$G$-$k$h$&$K$9$k$?$a$K$O!"(B
- $B4IM}2<$N%G%#%l%/%H%j$H%U%!%$%k$H$K(B Apache $B$,<B9T$5$l$F$$$k(B <directive
- module="mpm_common">User</directive> $B$H(B <directive
- module="mpm_common">Group</directive> $B$G=q$-9~$_2DG=$G$"$kI,MW$,$"$j$^$9!#(B
- $B?7$7$/:n@.$5$l$k%U%!%$%k$b$3$N(B <directive module="mpm_common">User</directive>
- $B$H(B <directive module="mpm_common">Group</directive> $B$K=jM-$5$l$k(B
- $B$3$H$K$J$j$^$9!#$3$NM}M3$+$i!"$=$N%"%+%&%s%H$X$N%"%/%;%9$r@)8f$9$k$3$H$O(B
- $B=EMW$G$9!#(BDAV $B%j%]%8%H%j$O(B Apache $B@lMQ$N$b$N$@$H$_$J$5$l$F$$$^$9!#(B
- Apache $B0J30$NJ}K!$G%U%!%$%k$r=$@5$9$k$3$H(B ($BNc$($P(B FTP $B$d%U%!%$%k%7%9%F%`(B
- $BMQ$N%D!<%k$J$I$r;H$C$F(B) $B$O5v2D$5$l$F$$$^$;$s!#(B</p>
-
- <p><module>mod_dav</module> $B$O$$$m$$$m$J<oN`$N%5!<%S%95qH]967b$K$5$i$5$l$k(B
- $B$+$b$7$l$^$;$s!#(B<directive
- module="core">LimitXMLRequestBody</directive> $B%G%#%l%/%F%#%V$r;H$&$H(B
- $BBg$-$J(B DAV $B%j%/%(%9%H$r2r@O$9$k$H$-$K>CHq$5$l$k%a%b%j$NNL$r@)8B$9$k$3$H$,(B
- $B$G$-$^$9!#(B<directive
- module="mod_dav">DavDepthInfinity</directive> $B%G%#%l%/%F%#%V$O(B
- <code>PROPFIND</code> $B%j%/%(%9%H$,5pBg%j%]%8%H%j$GBgNL$N%a%b%j$r>CHq$9$k$N$r(B
- $BKI$0$3$H$,$G$-$^$9!#B>$N%5!<%S%95qH]967b$K$OC1=c$K;HMQ2DG=$J%G%#%9%/NN0h$r(B
- $BB?$/$NBg$-$J%U%!%$%k$GKd$a$F$7$^$&$s$b$N$,$"$j$^$9!#$3$l$rD>@\KI$0J}K!$O(B
- Apache $B$K$O$"$j$^$;$s$N$G!"?.MQ$G$-$J$$%f!<%6$K(B DAV $B%"%/%;%9$rDs6!$9$k$N$O(B
- $BHr$1$?J}$,NI$$$G$7$g$&!#(B</p>
-</section>
-
-<section id="complex"><title>$BJ#;($J@_Dj(B</title>
-
- <p>$B$h$/$"$kMW5a$K!"(B<module>mod_dav</module> $B$r;H$C$FF0E*$J%U%!%$%k(B
- (PHP $B%9%/%j%W%H!"(BCGI $B%9%/%j%W%H$J$I(B) $B$rA`:n$7$?$$$H$$$&$b$N$,$"$j$^$9!#(B
- $B$3$l$N<B8=$O!"(B<code>GET</code> $B%j%/%(%9%H$O%9%/%j%W%H$NFbMF$r%@%&%s%m!<%I$5$;$k(B
- $BBe$o$j$K!"%9%/%j%W%H$r>o$K<B9T$5$;$F$7$^$&$N$GFq$7$/$J$C$F$$$^$9!#(B
- $B$3$l$r2sHr$9$kJ}K!$K$O!"Fs$D$N0c$&(B URL $B$rF1$8%3%s%F%s%D$K%^%C%W$7!"(B
- $B0l$D$O%9%/%j%W%H$r<B9T$5$;!"$b$&0l$D$O%@%&%s%m!<%I$5$;$?$j!"(BDAV $B$+$i(B
- $BA`:n$5$l$?$j$9$k$h$&$K@_Dj$9$k$H$$$&$b$N$,$"$j$^$9!#(B</p>
-
-<example>
-Alias /phparea /home/gstein/php_files<br />
-Alias /php-source /home/gstein/php_files<br />
-&lt;Location /php-source&gt;
-<indent>
- DAV On<br />
- ForceType text/plain<br />
-</indent>
-&lt;/Location&gt;
-</example>
-
- <p>$B$3$N@_Dj$K$h$j!"(B<code>http://example.com/phparea</code> $B$r(B PHP $B%9%/%j%W%H$N(B
- $B=PNO$r%"%/%;%9$9$k$?$a$K;H$&$3$H$,$G$-!"(B
- <code>http://example.com/php-source</code> $B$r(B DAV $B%/%i%$%"%s%H$K$h$k(B
- $B$,A`:n$N$?$a$K;H$&$3$H$,$G$-$^$9!#(B</p>
-</section>
-
-<directivesynopsis>
-<name>Dav</name>
-<description>WebDAV HTTP $B%a%=%C%I$rM-8z$K$7$^$9(B</description>
-<syntax>Dav On|Off|<var>provider-name</var></syntax>
-<default>Dav Off</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>$BM?$($i$l$?%3%s%F%J$G(B WebDAV HTTP $B%a%=%C%I$,;H$($k$h$&$K$9$k$K$O(B
- $B<!$N$h$&$K$7$^$9!#(B</p>
-
- <example>
- &lt;Location /foo&gt;<br />
- <indent>
- Dav On<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p><code>On</code> $B$H$$$&;XDj$O<B:]$K$O(B <module>mod_dav_fs</module>
- $B$GDs6!$5$l$F$$$k%G%U%)%k%H$N%W%m%P%$%@!"(B<code>filesystem</code>
- $B$X$N%(%$%j%"%9$K$J$C$F$$$^$9!#0lEY$"$k%m%1!<%7%g%s$G(B DAV
- $B$rM-8z$K$7$?8e$O!"$=$N%5%V%m%1!<%7%g%s$G(B<em>$BL58z2=$9$k$3$H$O$G$-$J$$(B</em>
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#40A4$J@_DjNc$O(B<a
- href="#example">$B>e5-$N%;%/%7%g%s(B</a> $B$r$4Mw2<$5$$!#(B</p>
-
- <note type="warning">
- $B%5!<%P$N%;%-%e%j%F%#$,3NJ]$G$-$k$^$G(B WebDAV $B$rM-8z$K$7$J$$$G$/$@$5$$!#(B
- $B$=$&$7$J$1$l$PC/$G$b$=$N%5!<%P$G%U%!%$%k$rG[I[$9$k$3$H$,$G$-$k$h$&$K(B
- $B$J$C$F$7$^$$$^$9!#(B
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavMinTimeout</name>
-<description>$B%5!<%P$,(B DAV $B%j%=!<%9$N%m%C%/$r0];}$9$k:G>.;~4V$G$9!#(B
-</description>
-<syntax>DavMinTimeout <var>seconds</var></syntax>
-<default>DavMinTimeout 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>$B%/%i%$%"%s%H$,(B DAV $B%j%=!<%9%m%C%/$rMW5a$7$?>l9g!"(B
- $B%m%C%/$,%5!<%P$K$h$C$F<+F0E*$K2r=|$5$l$k$^$G$N;~4V$r(B
- $BF1;~$K;XDj$9$k$3$H$,$G$-$^$9!#$3$NCM$OC1$J$k%j%/%(%9%H$G$"$C$F!"(B
- $B%5!<%P$O$3$l$rL5;k$9$k$3$H$b$G$-$^$9$7!"(B
- $BG$0U$NCM$r%/%i%$%"%s%H$KDLCN$9$k$3$H$b$G$-$^$9!#(B</p>
-
- <p>$B%/%i%$%"%s%H$KLa$9%m%C%/%?%$%`%"%&%H$N:G>.;~4V$r!"(B
- $BIC$G!";XDj$9$k$?$a$K(B <directive>DavMinTimeout</directive>
- $B%G%#%l%/%F%#%V$r;H$$$^$9!#(B
- $B%^%$%/%m%=%U%H$N%&%'%V%U%)%k%@$N%G%U%)%k%H$G$O(B 120 $BIC$G$9$,!((B
- $B%M%C%H%o!<%/$NCY1d$N$;$$$G%/%i%$%"%s%H$,%m%C%/$r<:$&$N$r8:$i$9$?$a$K!"(B
- <directive>DavMinTimeout</directive> $B$r;H$C$F(B
- $B$3$l$r$b$C$HBg$-$JCM(B ($BNc$($P(B 600 $BIC(B) $B$K>e=q$-$G$-$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- &lt;Location /MSWord&gt;<br />
- <indent>
- DavMinTimeout 600<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavDepthInfinity</name>
-<description>PROPFIND, Depth: Infinity $B%j%/%(%9%H$r5v2D$7$^$9(B</description>
-<syntax>DavDepthInfinity on|off</syntax>
-<default>DavDepthInfinity off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>'Depth: Infinity' $B$r4^$s$G$$$k(B
- <code>PROPFIND</code> $B%j%/%(%9%H$r=hM}$G$-$k$h$&$K$9$k$K$O!"(B
- <directive>DavDepthInfinity</directive>
- $B%G%#%l%/%F%#%V$r;H$$$^$9!#$3$N%?%$%W$N%j%/%(%9%H$O(B
- denial-of-service $B%"%?%C%/$H$J$j$&$k$N$G!"(B
- $B%G%U%)%k%H$G$O5v2D$5$l$F$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_dav.xml.ko b/docs/manual/mod/mod_dav.xml.ko
deleted file mode 100644
index 92823e4ee6..0000000000
--- a/docs/manual/mod/mod_dav.xml.ko
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav.xml.meta">
-
-<name>mod_dav</name>
-<description>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) ±â´É</description>
-<status>Extension</status>
-<sourcefile>mod_dav.c</sourcefile>
-<identifier>dav_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ¾ÆÆÄÄ¡¿¡ <a href="http://www.webdav.org">WebDAV</a>
- ('Web-based Distributed Authoring and Versioning') class 1°ú
- class 2 ±â´ÉÀ» Ãß°¡ÇÑ´Ù. WebDAV´Â ¿ø°Ý À¥¼­¹öÀÇ ÀÚ¿ø°ú
- ÄÝ·º¼Ç(collection)À» <transnote>ÄÝ·º¼ÇÀº ÆÄÀϽýºÅÛÀÇ µð·ºÅ丮¿Í
- °°Àº °³³äÀÌ´Ù</transnote> ¸¸µé°í, ¿Å±â°í, º¹»çÇÏ°í, Áö¿ï
- ¼ö ÀÖµµ·Ï HTTP ÇÁ·ÎÅäÄÝÀ» È®ÀåÇÑ °ÍÀÌ´Ù.</p>
-</summary>
-<seealso><directive module="mod_dav_fs">DavLockDB</directive></seealso>
-<seealso><directive module="core">LimitXMLRequestBody</directive></seealso>
-<seealso><a href="http://www.webdav.org">WebDAV Á¤º¸</a></seealso>
-
-<section id="example"><title>WebDAV »ç¿ëÇϱâ</title>
- <p><module>mod_dav</module>¸¦ »ç¿ëÇÏ·Á¸é <code>httpd.conf</code>
- ÆÄÀÏ¿¡ ¾Æ·¡°ú °°ÀÌ Ãß°¡ÇÑ´Ù:</p>
-
- <example>Dav On</example>
-
- <p>±×·¯¸é <module>mod_dav_fs</module> ¸ðµâÀÌ ±¸ÇöÇÏ´Â DAV
- ÆÄÀϽýºÅÛ Á¦°øÀÚ(provider)¸¦ »ç¿ëÇÑ´Ù. ±×·¯¹Ç·Î ÀÌ ¸ðµâµµ
- ¼­¹ö¿¡ °°ÀÌ ÄÄÆÄÀϵÇÀְųª <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î·Î ½ÇÇàÁß¿¡
- Àоîµé¿©¾ß ÇÑ´Ù.</p>
-
- <p>¶Ç, DAV Àá±Ý(lock) µ¥ÀÌÅͺ£À̽ºÀÇ À§Ä¡¸¦ <code>httpd.conf</code>
- ÆÄÀÏÀÇ Àü¿ª ºÎºÐ¿¡ <directive
- module="mod_dav_fs">DavLockDB</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ÁöÁ¤ÇØ¾ß ÇÑ´Ù:</p>
-
- <example>
- DavLockDB /usr/local/apache2/var/DavLock
- </example>
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â <directive
- module="mpm_common">User</directive>¿Í <directive
- module="mpm_common" >Group</directive>Àº Àá±Ý µ¥ÀÌÅͺ£À̽º°¡
- ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù.</p>
-
- <p>DAV¸¦ »ç¿ëÇÏ´Â À§Ä¡¿¡ Á¢±ÙÀ» Á¦ÇÑÇϱâÀ§ÇØ <directive
- module="core" type="section">Location</directive> Áö½Ã¾î
- ¾È¿¡ <directive module="core" type="section">Limit</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. DAV Ŭ¶óÀ̾ðÆ®°¡ ÇѹøÀÇ ¿äû¿¡
- º¸³¾ ¼ö ÀÖ´Â ÃÖ´ë ¹ÙÀÌÆ®¼ö¸¦ Á¦ÇÑÇÏ·Á¸é <directive
- module="core">LimitXMLRequestBody</directive> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- "ÀϹÝÀûÀÎ" <directive module="core">LimitRequestBody</directive>
- Áö½Ã¾î´Â DAV ¿äû°ú °ü°è¾ø´Ù.</p>
-
- <example><title>Àüü ¿¹Á¦</title>
- DavLockDB /usr/local/apache2/var/DavLock<br />
- <br />
- &lt;Location /foo&gt;<br />
- <indent>
- Dav On<br />
- <br />
- AuthType Basic<br />
- AuthName DAV<br />
- AuthUserFile user.passwd<br />
- <br />
- &lt;LimitExcept GET OPTIONS&gt;<br />
- <indent>
- require user admin<br />
- </indent>
- &lt;/LimitExcept&gt;<br />
- </indent>
- &lt;/Location&gt;<br />
- </example>
-
- <p><module>mod_dav</module>´Â Greg SteinÀÌ ¸¸µç <a
- href="http://www.webdav.org/mod_dav/">Apache 1.3¿ë mod_dav</a>¸¦
- ±â¹ÝÀ¸·Î ¸¸µé¾ú´Ù. ¸ðµâ¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ±× »çÀÌÆ®¸¦
- Âü°íÇ϶ó.</p>
-</section>
-
-<section id="security"><title>º¸¾È ¹®Á¦</title>
-
- <p>DAV¸¦ »ç¿ëÇÏ¸é ¿ø°Ý Ŭ¶óÀ̾ðÆ®°¡ ¼­¹öÀÇ ÆÄÀÏÀ» Á¶ÀÛÇÒ
- ¼ö Àֱ⶧¹®¿¡, <module>mod_dav</module>¸¦ »ç¿ëÇϱâ Àü¿¡
- ¼­¹ö°¡ ¾ÈÀüÇÑÁö Ưº°È÷ °ü½ÉÀ» °¡Á®¾ß ÇÑ´Ù.</p>
-
- <p>¼­¹ö¿¡¼­ DAV°¡ °¡´ÉÇÑ À§Ä¡´Â ÀÎÁõÀ¸·Î º¸È£ÇØ¾ß ÇÑ´Ù.
- HTTP Basic Authentication´Â ÃßõÇÏÁö ¾Ê´Â´Ù. ÃÖ¼ÒÇÑ
- <module>mod_auth_digest</module> ¸ðµâÀÌ Á¦°øÇÏ´Â HTTP Digest
- AuthenticationÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. °ÅÀÇ ¸ðµç WebDAV Ŭ¶óÀ̾ðÆ®´Â
- ÀÌ ÀÎÁõ ¹æ½ÄÀ» Áö¿øÇÑ´Ù. ¾Æ´Ï¸é <a href="../ssl/">SSL</a>
- ¿¬°á¿¡¼­ Basic AuthenticationÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p><module>mod_dav</module>°¡ ÆÄÀÏÀ» Á¶ÀÛÇÏ·Á¸é, ¾ÆÆÄÄ¡¸¦
- ½ÇÇàÇÏ´Â <directive module="mpm_common">User</directive>¿Í
- <directive module="mpm_common">Group</directive>Àº ÇØ´ç
- µð·ºÅ丮¿Í ÆÄÀÏ¿¡ ¾²±â ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù. ¶Ç, »õ·Î »ý¼ºÇÑ
- ÆÄÀÏÀº <directive module="mpm_common">User</directive>¿Í
- <directive module="mpm_common">Group</directive>ÀÌ ¼ÒÀ¯ÇÏ°Ô
- µÈ´Ù. ±×·¡¼­ ¾Æ¹«³ª ÀÌ °èÁ¤¿¡ Á¢±ÙÇÒ ¼ö ¾øµµ·Ï Ç϶ó. DAV
- ÀúÀå¼Ò´Â ¾ÆÆÄÄ¡¸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ ÅëÇÏÁö¾Ê°í
- (¿¹¸¦ µé¾î FTP³ª ÆÄÀϽýºÅÛ µµ±¸¸¦ »ç¿ëÇÏ¿©) ÆÄÀÏÀ» ¼öÁ¤ÇÔÀ»
- Çã¿ëÇÏ¸é ¾ÈµÈ´Ù.</p>
-
- <p><module>mod_dav</module>´Â ¿©·¯ ¼­ºñ½º°ÅºÎ °ø°ÝÀÇ ´ë»óÀÌ
- µÉ ¼ö ÀÖ´Ù. <directive
- module="core">LimitXMLRequestBody</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© Å« DAV ¿äûÀ» ÀÐÀ»¶§ ¸Þ¸ð¸®·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù.
- <directive module="mod_dav">DavDepthInfinity</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¸¹Àº ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇϱâÀ§ÇÑ ¸Å¿ì Å« ÀúÀå¼ÒÀÇ
- <code>PROPFIND</code> ¿äûÀ» ¸·À» ¼ö ÀÖ´Ù. ´Ü¼øÈ÷ Ŭ¶óÀ̾ðÆ®°¡
- ¿©·¯ Å« ÆÄÀϵé·Î µð½ºÅ©°ø°£À» ä¿ì´Â ¼­ºñ½º°ÅºÎ °ø°Ýµµ °¡´ÉÇÏ´Ù.
- ¾ÆÆÄÄ¡¿¡¼­ À̸¦ ¸·À» Á÷Á¢ÀûÀÎ ¹æ¹ýÀº ¾ø´Ù. ±×·¯¹Ç·Î ½Å·ÚÇÏÁö¾Ê´Â
- »ç¿ëÀÚ¿¡°Ô DAV Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Êµµ·ÏÇ϶ó.</p>
-</section>
-
-<section id="complex"><title>º¹ÀâÇÑ ¼³Á¤</title>
-
- <p>ÀϹÝÀûÀÎ Áú¹®Áß Çϳª´Â (PHP ½ºÅ©¸³Æ®, CGI ½ºÅ©¸³Æ® µî)
- µ¿ÀûÆÄÀÏ ÀÛ¾÷À» À§ÇØ <module>mod_dav</module>¸¦ »ç¿ëÇÏ´Â
- ¹æ¹ýÀÌ´Ù. ÀÌ´Â <code>GET</code> ¿äûÀÌ ÆÄÀÏ ³»¿ëÀ» ´Ù¿î·ÎµåÇÏÁö
- ¾Ê°í Ç×»ó ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϹǷΠ¾î·Æ´Ù. ÇØ°á¹æ¹ýÁß Çϳª´Â
- ³»¿ë¿¡ µÎ°³ÀÇ URLÀ» ´ëÀÀÇÏ´Â °ÍÀÌ´Ù. ÇÑ URLÀº ½ºÅ©¸³Æ®¸¦
- ½ÇÇàÇÏ°í, ´Ù¸¥ URL·Î´Â ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÏ¿© DAV·Î ÀÛ¾÷ÇÒ
- ¼ö ÀÖ´Ù.</p>
-
-<example>
-Alias /phparea /home/gstein/php_files<br />
-Alias /php-source /home/gstein/php_files<br />
-&lt;Location /php-source&gt;
-<indent>
- DAV On<br />
- ForceType text/plain<br />
-</indent>
-&lt;/Location&gt;
-</example>
-
- <p>ÀÌ ¼³Á¤¿¡¼­ <code>http://example.com/phparea</code>´Â
- PHP ½ºÅ©¸³Æ®ÀÇ °á°ú¸¦ º¸¿©ÁÖ°í,
- <code>http://example.com/php-source</code>·Î´Â DAV Ŭ¶óÀ̾ðÆ®¿¡¼­
- ½ºÅ©¸³Æ®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-</section>
-
-<directivesynopsis>
-<name>Dav</name>
-<description>WebDAV HTTP ¸Þ½áµå¸¦ ½ÃÀÛÇÑ´Ù</description>
-<syntax>Dav On|Off|<var>provider-name</var></syntax>
-<default>Dav Off</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ WebDAV HTTP ¸Þ½áµå¸¦ »ç¿ëÇÏ·Á¸é
- <directive>Dav</directive> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <example>
- &lt;Location /foo&gt;<br />
- <indent>
- Dav On<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p><code>On</code> °ªÀº ½ÇÁ¦·Î <module>mod_dav_fs</module>
- ¸ðµâÀÌ Á¦°øÇÏ´Â ±âº» Á¦°øÀÚÀÎ <code>filesystem</code>ÀÇ
- º°ÄªÀÌ´Ù. ¾î¶² À§Ä¡¿¡¼­ DAV¸¦ ½ÃÀÛÇϸé ÇÏÀ§°ø°£¿¡¼­ DAV¸¦
- »ç¿ë¾ÈÇϵµ·Ï ¼³Á¤ÇÒ ¼ö <em>¾øÀ½À»</em> ÁÖÀÇÇ϶ó. ¿ÏÀüÇÑ
- ¼³Á¤¿¹´Â <a href="#example">À§ÀÇ Àý</a>À» Âü°íÇ϶ó.</p>
-
- <note type="warning">
- ¼­¹ö¸¦ ¾ÈÀüÇÏ°Ô ±¸¼ºÇÒ¶§±îÁö WebDAVÀ» »ç¿ëÇÏÁö ¸¶¶ó. ±×·¸Áö
- ¾ÊÀ¸¸é ´©±¸¶óµµ ¼­¹ö¸¦ ÅëÇØ ÆÄÀÏÀ» ºÐ¹èÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavMinTimeout</name>
-<description>¼­¹ö°¡ DAV ÀÚ¿ø¿¡ ´ëÇØ À¯ÁöÇÒ Àá±ÝÀÇ Ãּҽð£</description>
-<syntax>DavMinTimeout <var>seconds</var></syntax>
-<default>DavMinTimeout 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p>Ŭ¶óÀ̾ðÆ®°¡ DAV ÀÚ¿ø¿¡ Àá±Ý(lock)À» ¿äûÇÒ¶§ ¼­¹ö°¡
- ¾Ë¾Æ¼­ Àá±ÝÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Â ½Ã°£À» °°ÀÌ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. ÀÌ °ªÀº
- ´ÜÁö ¿äûÀÏ»ÓÀ̸ç, ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¿äûÇÑ °ªÀ» ¹«½ÃÇÏ°í
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀÓÀÇÀÇ ½Ã°£À» ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p><directive>DavMinTimeout</directive> Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô
- º¸³¾ ÃÖ¼Ò Àá±Ý ½Ã°£À» (ÃÊ´ÜÀ§) ÁöÁ¤ÇÑ´Ù. Microsoft Web Folders´Â
- ±âº»°ªÀ¸·Î 120 Ãʸ¦ »ç¿ëÇÑ´Ù. <directive>DavMinTimeout</directive>¿¡
- (600 ÃÊ¿Í °°ÀÌ) ´õ ³ôÀº °ªÀ» »ç¿ëÇϸé Ŭ¶óÀ̾ðÆ®°¡ ³×Æ®¿÷
- Áö¿¬¶§¹®¿¡ Àá±ÝÀ» ÀҰԵǴ °æ¿ì¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- &lt;Location /MSWord&gt;<br />
- <indent>
- DavMinTimeout 600<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavDepthInfinity</name>
-<description>PROPFINDÀÇ Depth: Infinity ¿äûÀ» Çã°¡ÇÑ´Ù</description>
-<syntax>DavDepthInfinity on|off</syntax>
-<default>DavDepthInfinity off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
- <p><directive>DavDepthInfinity</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- 'Depth: Infinity' Çì´õ¸¦ °¡Áø <code>PROPFIND</code> ¿äûÀ»
- Çã°¡ÇÑ´Ù. ÀÌ·± ¿äûÀ» »ç¿ëÇÏ¿© ¼­ºñ½º°ÅºÎ °ø°ÝÀÌ °¡´ÉÇϱâ
- ¶§¹®¿¡ ±âº»ÀûÀ¸·Î Çã¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_dav.xml.meta b/docs/manual/mod/mod_dav.xml.meta
deleted file mode 100644
index 927ffa2c6c..0000000000
--- a/docs/manual/mod/mod_dav.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_dav</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_dav_fs.html b/docs/manual/mod/mod_dav_fs.html
deleted file mode 100644
index 44954c4ddb..0000000000
--- a/docs/manual/mod/mod_dav_fs.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_dav_fs.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_dav_fs.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_dav_fs.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_dav_fs.html.en b/docs/manual/mod/mod_dav_fs.html.en
deleted file mode 100644
index 9e413570d8..0000000000
--- a/docs/manual/mod/mod_dav_fs.html.en
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav_fs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_dav_fs</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav_fs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav_fs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav_fs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>filesystem provider for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>dav_fs_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_dav_fs.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>. It acts as a support module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> and provides access to resources located in the
- server's file system. The formal name of this provider is
- <code>filesystem</code>. <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> backend providers
- will be invoked by using the <code class="directive"><a href="../mod/mod_dav.html#dav">Dav</a></code>
- directive:</p>
-
- <div class="example"><h3>Example</h3><p><code>
- Dav filesystem
- </code></p></div>
-
- <p>Since <code>filesystem</code> is the default provider for
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>, you may simply use the value
- <code>On</code> instead.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#davlockdb">DavLockDB</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavLockDB" id="DavLockDB">DavLockDB</a> <a name="davlockdb" id="davlockdb">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the DAV lock database</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavLockDB <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav_fs</td></tr>
-</table>
- <p>Use the <code class="directive">DavLockDB</code> directive to specify
- the full path to the lock database, excluding an extension. If
- the path is not absolute, it will be taken relative to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. The implementation of
- <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> uses a SDBM database to track user
- locks.</p>
-
-
-
- <div class="example"><h3>Example</h3><p><code>
- DavLockDB var/DavLock
- </code></p></div>
-
- <p>The directory containing the lock database file must be
- writable by the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> under which
- Apache is running. For security reasons, you should create a
- directory for this purpose rather than changing the permissions on
- an existing directory. In the above example, Apache will create
- files in the <code>var/</code> directory under the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> with the base filename
- <code>DavLock</code> and extension name chosen by the server.</p>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav_fs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav_fs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav_fs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav_fs.html.ja.euc-jp b/docs/manual/mod/mod_dav_fs.html.ja.euc-jp
deleted file mode 100644
index 8b10e31ff0..0000000000
--- a/docs/manual/mod/mod_dav_fs.html.ja.euc-jp
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav_fs - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_dav_fs</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav_fs.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav_fs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥×¥í¥Ð¥¤¥À</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>dav_fs_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_dav_fs.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>
- ¤Î¥µ¡¼¥Ó¥¹¤ò<em>ɬÍפȤ·¤Þ¤¹</em>¡£<code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>
- ¤Î¥µ¥Ý¡¼¥È¥â¥¸¥å¡¼¥ë¤È¤·¤ÆÆ°ºî¤·¡¢¥µ¡¼¥Ð¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Ë
- °ÌÃÖ¤¹¤ë¥ê¥½¡¼¥¹¤Ø¤Î¥¢¥¯¥»¥¹¤òÄ󶡤·¤Þ¤¹¡£¤³¤Î¥×¥í¥Ð¥¤¥À¤ÎÀµ¼°¤Ê̾Á°¤Ï
- <code>filesystem</code> ¤Ç¤¹¡£<code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>
- ¥Ð¥Ã¥¯¥¨¥ó¥É¥×¥í¥Ð¥¤¥À¤Ï <code class="directive"><a href="../mod/mod_dav.html#dav">Dav</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æµ¯Æ°¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- Dav filesystem
- </code></p></div>
-
- <p><code>filesystem</code> ¤Ï <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>
- ¤Î¥Ç¥Õ¥©¥ë¥È¥×¥í¥Ð¥¤¥À¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤«¤é¡¢Âå¤ï¤ê¤Ëñ¤Ë
- <code>On</code> ¤È»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#davlockdb">DavLockDB</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavLockDB" id="DavLockDB">DavLockDB</a> <a name="davlockdb" id="davlockdb">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>DAV ¥í¥Ã¥¯¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î°ÌÃÖ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DavLockDB <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_dav_fs</td></tr>
-</table>
- <p>¥í¥Ã¥¯¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤ò¡¢³ÈÄ¥»Ò¤ò½ü¤¤¤¿·Á¤Ç
- »ØÄꤹ¤ë¤Ë¤Ï¡¢<code class="directive">DavLockDB</code>
- ¤ò»È¤¤¤Þ¤¹¡£¥Ñ¥¹¤¬ÀäÂХѥ¹¤Ç¤Ê¤±¤ì¤Ð¡¢<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> ¤«¤é¤ÎÁêÂХѥ¹¤È²ò¼á¤µ¤ì¤Þ¤¹¡£
- <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> ¼ÂÁõ¤Ç¤Ï¡¢¥æ¡¼¥¶¥í¥Ã¥¯¤ò
- ÄÉÀפ¹¤ë¤¿¤á¤Ë SDBM ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò»È¤¤¤Þ¤¹¡£</p>
-
-
-
- <div class="example"><h3>Îã</h3><p><code>
- DavLockDB logs/DavLock
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav_fs.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav_fs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav_fs.html.ko.euc-kr b/docs/manual/mod/mod_dav_fs.html.ko.euc-kr
deleted file mode 100644
index d0bd1697ca..0000000000
--- a/docs/manual/mod/mod_dav_fs.html.ko.euc-kr
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav_fs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_dav_fs</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav_fs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav_fs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>À» À§ÇÑ ÆÄÀϽýºÅÛ Á¦°øÀÚ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>dav_fs_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_dav_fs.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¼­ºñ½º¿¡ <em>ÇÊ¿äÇÏ´Ù</em>.
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>¸¦ Áö¿øÇÏ´Â ¸ðµâ·Î ¼­¹öÀÇ ÆÄÀϽýºÅÛ¿¡
- ÀÖ´Â ÀÚ¿øÀ» Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÌ Á¦°øÀÚ(provider)ÀÇ
- Á¤½Ä¸íĪÀº <code>filesystem</code>ÀÌ´Ù. <code class="directive"><a href="../mod/mod_dav.html#dav">Dav</a></code> Áö½Ã¾î¸¦ ÁöÁ¤ÇÏ¿©
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> µÞ´Ü Á¦°øÀÚ¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- Dav filesystem
- </code></p></div>
-
- <p><code>filesystem</code>ÀÌ <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>ÀÇ
- ±âº» Á¦°øÀÚÀ̹ǷΠ´ë½Å <code>On</code>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#davlockdb">DavLockDB</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavLockDB" id="DavLockDB">DavLockDB</a> <a name="davlockdb" id="davlockdb">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>DAV Àá±Ý µ¥ÀÌÅͺ£À̽º À§Ä¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DavLockDB <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dav_fs</td></tr>
-</table>
- <p><code class="directive">DavLockDB</code> Áö½Ã¾î´Â Àá±Ý µ¥ÀÌÅͺ£À̽ºÀÇ
- Àüü °æ·Î¸¦ È®ÀåÀÚ¸¦ Á¦¿ÜÇÏ°í ÁöÁ¤ÇÑ´Ù. Àý´ë°æ·Î°¡ ¾Æ´Ï¸é
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë°æ·Î·Î
- ó¸®ÇÑ´Ù. <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>´Â Àá±ÝÀ» SDBM µ¥ÀÌÅͺ£À̽º¿¡
- ±â·ÏÇÑ´Ù.</p>
-
-
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- DavLockDB var/DavLock
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>¿Í
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>Àº Àá±Ý
- µ¥ÀÌÅͺ£À̽º°¡ ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù.
- º¸¾È»ó ÀÌÀ¯·Î ±âÁ¸ µð·ºÅ丮ÀÇ ±ÇÇÑÀ» ¹Ù²Ù±âº¸´Ù´Â Àá±Ý
- µ¥ÀÌÅͺ£À̽º¿ë µð·ºÅ丮¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. À§ÀÇ °æ¿ì ¾ÆÆÄÄ¡´Â
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> ¾Æ·¡
- <code>var/</code> µð·ºÅ丮¿¡ ¼­¹ö°¡ ¼±ÅÃÇÑ È®Àå¸íÀ» °¡Áø
- <code>DavLock</code> ÆÄÀÏÀ» ¸¸µç´Ù.</p>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dav_fs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dav_fs.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dav_fs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav_fs.xml b/docs/manual/mod/mod_dav_fs.xml
deleted file mode 100644
index 6ad1e327bd..0000000000
--- a/docs/manual/mod/mod_dav_fs.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav_fs.xml.meta">
-
-<name>mod_dav_fs</name>
-<description>filesystem provider for <module>mod_dav</module></description>
-<status>Extension</status>
-<sourcefile>mod_dav_fs.c</sourcefile>
-<identifier>dav_fs_module</identifier>
-
-<summary>
- <p>This module <em>requires</em> the service of <module
- >mod_dav</module>. It acts as a support module for <module
- >mod_dav</module> and provides access to resources located in the
- server's file system. The formal name of this provider is
- <code>filesystem</code>. <module>mod_dav</module> backend providers
- will be invoked by using the <directive module="mod_dav">Dav</directive>
- directive:</p>
-
- <example><title>Example</title>
- Dav filesystem
- </example>
-
- <p>Since <code>filesystem</code> is the default provider for
- <module>mod_dav</module>, you may simply use the value
- <code>On</code> instead.</p>
-</summary>
-<seealso><module>mod_dav</module></seealso>
-
-<directivesynopsis>
-<name>DavLockDB</name>
-<description>Location of the DAV lock database</description>
-<syntax>DavLockDB <var>file-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Use the <directive>DavLockDB</directive> directive to specify
- the full path to the lock database, excluding an extension. If
- the path is not absolute, it will be taken relative to <directive
- module="core">ServerRoot</directive>. The implementation of
- <module>mod_dav_fs</module> uses a SDBM database to track user
- locks.</p>
-
- <!-- XXX: someone should add that tool to the support directory...
- The utility <code>modules/dav/util/lockview</code> can be used from
- the server to display all locks in a lock database.</p> -->
-
- <example><title>Example</title>
- DavLockDB var/DavLock
- </example>
-
- <p>The directory containing the lock database file must be
- writable by the <directive module="mpm_common">User</directive>
- and <directive module="mpm_common" >Group</directive> under which
- Apache is running. For security reasons, you should create a
- directory for this purpose rather than changing the permissions on
- an existing directory. In the above example, Apache will create
- files in the <code>var/</code> directory under the <directive
- module="core">ServerRoot</directive> with the base filename
- <code>DavLock</code> and extension name chosen by the server.</p>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_dav_fs.xml.ja b/docs/manual/mod/mod_dav_fs.xml.ja
deleted file mode 100644
index 730e26895f..0000000000
--- a/docs/manual/mod/mod_dav_fs.xml.ja
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav_fs.xml.meta">
-
-<name>mod_dav_fs</name>
-<description><module>mod_dav</module> $B$N$?$a$N%U%!%$%k%7%9%F%`%W%m%P%$%@(B</description>
-<status>Extension</status>
-<sourcefile>mod_dav_fs.c</sourcefile>
-<identifier>dav_fs_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O(B <module>mod_dav</module>
- $B$N%5!<%S%9$r(B<em>$BI,MW$H$7$^$9(B</em>$B!#(B<module>mod_dav</module>
- $B$N%5%]!<%H%b%8%e!<%k$H$7$FF0:n$7!"%5!<%P%U%!%$%k%7%9%F%`>e$K(B
- $B0LCV$9$k%j%=!<%9$X$N%"%/%;%9$rDs6!$7$^$9!#$3$N%W%m%P%$%@$N@5<0$JL>A0$O(B
- <code>filesystem</code> $B$G$9!#(B<module>mod_dav</module>
- $B%P%C%/%(%s%I%W%m%P%$%@$O(B <directive module="mod_dav">Dav</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$F5/F0$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- Dav filesystem
- </example>
-
- <p><code>filesystem</code> $B$O(B <module>mod_dav</module>
- $B$N%G%U%)%k%H%W%m%P%$%@$K$J$C$F$$$^$9$+$i!"Be$o$j$KC1$K(B
- <code>On</code> $B$H;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
-</summary>
-<seealso><module>mod_dav</module></seealso>
-
-<directivesynopsis>
-<name>DavLockDB</name>
-<description>DAV $B%m%C%/%G!<%?%Y!<%9$N0LCV(B</description>
-<syntax>DavLockDB <var>file-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B%m%C%/%G!<%?%Y!<%9$X$N%U%k%Q%9$r!"3HD%;R$r=|$$$?7A$G(B
- $B;XDj$9$k$K$O!"(B<directive>DavLockDB</directive>
- $B$r;H$$$^$9!#%Q%9$,@dBP%Q%9$G$J$1$l$P!"(B<directive module=
- "core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H2r<a$5$l$^$9!#(B
- <module>mod_dav_fs</module> $B<BAu$G$O!"%f!<%6%m%C%/$r(B
- $BDI@W$9$k$?$a$K(B SDBM $B%G!<%?%Y!<%9$r;H$$$^$9!#(B</p>
-
- <!-- XXX: someone should add that tool to the support directory...
- The utility <code>modules/dav/util/lockview</code> can be used from
- the server to display all locks in a lock database.</p> -->
-
- <example><title>$BNc(B</title>
- DavLockDB logs/DavLock
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_dav_fs.xml.ko b/docs/manual/mod/mod_dav_fs.xml.ko
deleted file mode 100644
index 83ce498c82..0000000000
--- a/docs/manual/mod/mod_dav_fs.xml.ko
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav_fs.xml.meta">
-
-<name>mod_dav_fs</name>
-<description><module>mod_dav</module>À» À§ÇÑ ÆÄÀϽýºÅÛ Á¦°øÀÚ</description>
-<status>Extension</status>
-<sourcefile>mod_dav_fs.c</sourcefile>
-<identifier>dav_fs_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <module>mod_dav</module> ¼­ºñ½º¿¡ <em>ÇÊ¿äÇÏ´Ù</em>.
- <module>mod_dav</module>¸¦ Áö¿øÇÏ´Â ¸ðµâ·Î ¼­¹öÀÇ ÆÄÀϽýºÅÛ¿¡
- ÀÖ´Â ÀÚ¿øÀ» Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÌ Á¦°øÀÚ(provider)ÀÇ
- Á¤½Ä¸íĪÀº <code>filesystem</code>ÀÌ´Ù. <directive
- module="mod_dav">Dav</directive> Áö½Ã¾î¸¦ ÁöÁ¤ÇÏ¿©
- <module>mod_dav</module> µÞ´Ü Á¦°øÀÚ¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <example><title>¿¹Á¦</title>
- Dav filesystem
- </example>
-
- <p><code>filesystem</code>ÀÌ <module>mod_dav</module>ÀÇ
- ±âº» Á¦°øÀÚÀ̹ǷΠ´ë½Å <code>On</code>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-<seealso><module>mod_dav</module></seealso>
-
-<directivesynopsis>
-<name>DavLockDB</name>
-<description>DAV Àá±Ý µ¥ÀÌÅͺ£À̽º À§Ä¡</description>
-<syntax>DavLockDB <var>file-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>DavLockDB</directive> Áö½Ã¾î´Â Àá±Ý µ¥ÀÌÅͺ£À̽ºÀÇ
- Àüü °æ·Î¸¦ È®ÀåÀÚ¸¦ Á¦¿ÜÇÏ°í ÁöÁ¤ÇÑ´Ù. Àý´ë°æ·Î°¡ ¾Æ´Ï¸é
- <directive module="core">ServerRoot</directive>¿¡ »ó´ë°æ·Î·Î
- ó¸®ÇÑ´Ù. <module>mod_dav_fs</module>´Â Àá±ÝÀ» SDBM µ¥ÀÌÅͺ£À̽º¿¡
- ±â·ÏÇÑ´Ù.</p>
-
- <!-- XXX: someone should add that tool to the support directory...
- The utility <code>modules/dav/util/lockview</code> can be used from
- the server to display all locks in a lock database.</p> -->
-
- <example><title>¿¹Á¦</title>
- DavLockDB var/DavLock
- </example>
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â <directive module="mpm_common">User</directive>¿Í
- <directive module="mpm_common" >Group</directive>Àº Àá±Ý
- µ¥ÀÌÅͺ£À̽º°¡ ÀÖ´Â µð·ºÅ丮¿¡ ¾²±â ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù.
- º¸¾È»ó ÀÌÀ¯·Î ±âÁ¸ µð·ºÅ丮ÀÇ ±ÇÇÑÀ» ¹Ù²Ù±âº¸´Ù´Â Àá±Ý
- µ¥ÀÌÅͺ£À̽º¿ë µð·ºÅ丮¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. À§ÀÇ °æ¿ì ¾ÆÆÄÄ¡´Â
- <directive module="core">ServerRoot</directive> ¾Æ·¡
- <code>var/</code> µð·ºÅ丮¿¡ ¼­¹ö°¡ ¼±ÅÃÇÑ È®Àå¸íÀ» °¡Áø
- <code>DavLock</code> ÆÄÀÏÀ» ¸¸µç´Ù.</p>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_dav_fs.xml.meta b/docs/manual/mod/mod_dav_fs.xml.meta
deleted file mode 100644
index 9e23cbfc4e..0000000000
--- a/docs/manual/mod/mod_dav_fs.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_dav_fs</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_dav_lock.html b/docs/manual/mod/mod_dav_lock.html
deleted file mode 100644
index 07601cdbf7..0000000000
--- a/docs/manual/mod/mod_dav_lock.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_dav_lock.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_dav_lock.html.en b/docs/manual/mod/mod_dav_lock.html.en
deleted file mode 100644
index e5e4d435c5..0000000000
--- a/docs/manual/mod/mod_dav_lock.html.en
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dav_lock - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_dav_lock</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav_lock.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>generic locking module for <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>dav_lock_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_dav_lock.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module implements a generic locking API which can be used by any
- backend provider of <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>. It <em>requires</em> at least
- the service of <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>. But without a backend provider
- which makes use of it, it's useless and should not be loaded into the
- server. A sample backend module which actually utilizes
- <code class="module"><a href="../mod/mod_dav_lock.html">mod_dav_lock</a></code>, is <a href="http://subversion.tigris.org/">mod_dav_svn</a>, the subversion provider module.</p>
-
- <p>Note that <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> does <em>not</em> need this
- generic locking module, because it uses it's own more specialized
- version.</p>
-
- <p>In order to make <code class="module"><a href="../mod/mod_dav_lock.html">mod_dav_lock</a></code> functional, you just have
- to specify the location of the lock database using the <code class="directive"><a href="#davgenericlockdb">DavGenericLockDB</a></code> directive described
- below.</p>
-
- <div class="note"><h3>Developer's Note</h3>
- <p>In order to retrieve the pointer to the locking provider function, you
- have to use the <code>ap_lookup_provider</code> API with the arguments
- <code>dav-lock</code>, <code>generic</code> and <code>0</code>.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#davgenericlockdb">DavGenericLockDB</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DavGenericLockDB" id="DavGenericLockDB">DavGenericLockDB</a> <a name="davgenericlockdb" id="davgenericlockdb">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the DAV lock database</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DavGenericLockDB <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dav_lock</td></tr>
-</table>
- <p>Use the <code class="directive">DavGenericLockDB</code> directive to specify
- the full path to the lock database, excluding an extension. If
- the path is not absolute, it will be taken relative to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. The implementation of
- <code class="module"><a href="../mod/mod_dav_lock.html">mod_dav_lock</a></code> uses a SDBM database to track user
- locks.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- DavGenericLockDB var/DavLock
- </code></p></div>
-
- <p>The directory containing the lock database file must be
- writable by the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> under which
- Apache is running. For security reasons, you should create a
- directory for this purpose rather than changing the permissions on
- an existing directory. In the above example, Apache will create
- files in the <code>var/</code> directory under the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> with the base filename
- <code>DavLock</code> and extension name chosen by the server.</p>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dav_lock.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dav_lock.xml b/docs/manual/mod/mod_dav_lock.xml
deleted file mode 100644
index 5a3065344c..0000000000
--- a/docs/manual/mod/mod_dav_lock.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.1 $ -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dav_lock.xml.meta">
-
-<name>mod_dav_lock</name>
-<description>generic locking module for <module>mod_dav</module></description>
-<status>Extension</status>
-<sourcefile>mod_dav_lock.c</sourcefile>
-<identifier>dav_lock_module</identifier>
-<compatibility>Available in version 2.1 and later</compatibility>
-
-<summary>
- <p>This module implements a generic locking API which can be used by any
- backend provider of <module>mod_dav</module>. It <em>requires</em> at least
- the service of <module>mod_dav</module>. But without a backend provider
- which makes use of it, it's useless and should not be loaded into the
- server. A sample backend module which actually utilizes
- <module>mod_dav_lock</module>, is <a href="http://subversion.tigris.org/"
- >mod_dav_svn</a>, the subversion provider module.</p>
-
- <p>Note that <module>mod_dav_fs</module> does <em>not</em> need this
- generic locking module, because it uses it's own more specialized
- version.</p>
-
- <p>In order to make <module>mod_dav_lock</module> functional, you just have
- to specify the location of the lock database using the <directive
- module="mod_dav_lock">DavGenericLockDB</directive> directive described
- below.</p>
-
- <note><title>Developer's Note</title>
- <p>In order to retrieve the pointer to the locking provider function, you
- have to use the <code>ap_lookup_provider</code> API with the arguments
- <code>dav-lock</code>, <code>generic</code> and <code>0</code>.</p>
- </note>
-</summary>
-<seealso><module>mod_dav</module></seealso>
-
-<directivesynopsis>
-<name>DavGenericLockDB</name>
-<description>Location of the DAV lock database</description>
-<syntax>DavGenericLockDB <var>file-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-
-<usage>
- <p>Use the <directive>DavGenericLockDB</directive> directive to specify
- the full path to the lock database, excluding an extension. If
- the path is not absolute, it will be taken relative to <directive
- module="core">ServerRoot</directive>. The implementation of
- <module>mod_dav_lock</module> uses a SDBM database to track user
- locks.</p>
-
- <example><title>Example</title>
- DavGenericLockDB var/DavLock
- </example>
-
- <p>The directory containing the lock database file must be
- writable by the <directive module="mpm_common">User</directive>
- and <directive module="mpm_common" >Group</directive> under which
- Apache is running. For security reasons, you should create a
- directory for this purpose rather than changing the permissions on
- an existing directory. In the above example, Apache will create
- files in the <code>var/</code> directory under the <directive
- module="core">ServerRoot</directive> with the base filename
- <code>DavLock</code> and extension name chosen by the server.</p>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_dav_lock.xml.meta b/docs/manual/mod/mod_dav_lock.xml.meta
deleted file mode 100644
index 6068da99b4..0000000000
--- a/docs/manual/mod/mod_dav_lock.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_dav_lock</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_deflate.html b/docs/manual/mod/mod_deflate.html
deleted file mode 100755
index dd4e6dce92..0000000000
--- a/docs/manual/mod/mod_deflate.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_deflate.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_deflate.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_deflate.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_deflate.html.en b/docs/manual/mod/mod_deflate.html.en
deleted file mode 100644
index 9859846483..0000000000
--- a/docs/manual/mod/mod_deflate.html.en
+++ /dev/null
@@ -1,382 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_deflate - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_deflate</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_deflate.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_deflate.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_deflate.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Compress content before it is delivered to the
-client</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>deflate_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_deflate.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module provides
- the <code>DEFLATE</code> output filter that allows output from
- your server to be compressed before being sent to the client over
- the network.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatebuffersize">DeflateBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatefilternote">DeflateFilterNote</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatememlevel">DeflateMemLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatewindowsize">DeflateWindowSize</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#recommended">Sample Configurations</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">Enabling Compression</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxies">Dealing with proxy servers</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../filter.html">Filters</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="recommended" id="recommended">Sample Configurations</a></h2>
- <p>This is a simple sample configuration for the impatient.</p>
-
- <div class="example"><h3>Compress only a few types</h3><p><code>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- </code></p></div>
-
- <p>The following configuration, while resulting in more compressed content,
- is also much more complicated. Do not use this unless you fully understand
- all the configuration details.</p>
-
- <div class="example"><h3>Compress everything except images</h3><p><code>
- &lt;Location /&gt;<br />
- <span class="indent">
- # Insert filter<br />
- SetOutputFilter DEFLATE<br />
- <br />
- # Netscape 4.x has some problems...<br />
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- <br />
- # Netscape 4.06-4.08 have some more problems<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- <br />
- # MSIE masquerades as Netscape, but it is fine<br />
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
- <br />
- # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
- # the above regex won't work. You can use the following<br />
- # workaround to get the desired effect:<br />
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
- <br />
- # Don't compress images<br />
- SetEnvIfNoCase Request_URI \<br />
- <span class="indent">
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
- </span>
- <br />
- # Make sure proxies don't deliver the wrong content<br />
- Header append Vary User-Agent env=!dont-vary<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Enabling Compression</a></h2>
-
- <h3><a name="output" id="output">Output Compression</a></h3>
- <p>Compression is implemented by the <code>DEFLATE</code>
- <a href="../filter.html">filter</a>. The following directive
- will enable compression for documents in the container where it
- is placed:</p>
-
- <div class="example"><p><code>
- SetOutputFilter DEFLATE
- </code></p></div>
-
- <p>Some popular browsers cannot handle compression of all content
- so you may want to set the <code>gzip-only-text/html</code> note to
- <code>1</code> to only allow html files to be compressed (see
- below). If you set this to <em>anything but <code>1</code></em> it
- will be ignored.</p>
-
- <p>If you want to restrict the compression to particular MIME types
- in general, you may use the <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code> directive. Here is an example of
- enabling compression only for the html files of the Apache
- documentation:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/your-server-root/manual"&gt;<br />
- <span class="indent">
- AddOutputFilterByType DEFLATE text/html<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>For browsers that have problems even with compression of all file
- types, use the <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code> directive to set the <code>no-gzip</code>
- note for that particular browser so that no compression will be
- performed. You may combine <code>no-gzip</code> with <code>gzip-only-text/html</code> to get the best results. In that case
- the former overrides the latter. Take a look at the following
- excerpt from the <a href="#recommended">configuration example</a>
- defined in the section above:</p>
-
- <div class="example"><p><code>
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- </code></p></div>
-
- <p>At first we probe for a <code>User-Agent</code> string that
- indicates a Netscape Navigator version of 4.x. These versions
- cannot handle compression of types other than
- <code>text/html</code>. The versions 4.06, 4.07 and 4.08 also
- have problems with decompressing html files. Thus, we completely
- turn off the deflate filter for them.</p>
-
- <p>The third <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
- directive fixes the guessed identity of the user agent, because
- the Microsoft Internet Explorer identifies itself also as "Mozilla/4"
- but is actually able to handle requested compression. Therefore we
- match against the additional string "MSIE" (<code>\b</code> means
- "word boundary") in the <code>User-Agent</code> Header and turn off
- the restrictions defined before.</p>
-
- <div class="note"><h3>Note</h3>
- The <code>DEFLATE</code> filter is always inserted after RESOURCE
- filters like PHP or SSI. It never touches internal subrequests.
- </div>
- <div class="note"><h3>Note</h3>
- There is a environment variable <code>force-gzip</code>,
- set via <code class="directive"><a href="../mod/core.html#setenv">SetEnv</a></code>, which
- will ignore the accept-encoding setting of your browser and will
- send compressed output.
- </div>
-
-
- <h3><a name="inflate" id="inflate">Output Decompression</a></h3>
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
- inflating/uncompressing a gzip compressed response body. In order to activate
- this feature you have to insert the <code>INFLATE</code> filter into
- the outputfilter chain using <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, for example:</p>
-
- <div class="example"><p><code>
- &lt;Location /dav-area&gt;<br />
- <span class="indent">
- ProxyPass http://example.com/<br />
- SetOutputFilter INFLATE<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>This Example will uncompress gzip'ed output from example.com, so other
- filters can do further processing with it.
- </p>
-
-
- <h3><a name="input" id="input">Input Decompression</a></h3>
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
- decompressing a gzip compressed request body . In order to activate
- this feature you have to insert the <code>DEFLATE</code> filter into
- the input filter chain using <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, for example:</p>
-
- <div class="example"><p><code>
- &lt;Location /dav-area&gt;<br />
- <span class="indent">
- SetInputFilter DEFLATE<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>Now if a request contains a <code>Content-Encoding:
- gzip</code> header, the body will be automatically decompressed.
- Few browsers have the ability to gzip request bodies. However,
- some special applications actually do support request
- compression, for instance some <a href="http://www.webdav.org">WebDAV</a> clients.</p>
-
- <div class="warning"><h3>Note on Content-Length</h3>
- <p>If you evaluate the request body yourself, <em>don't trust
- the <code>Content-Length</code> header!</em>
- The Content-Length header reflects the length of the
- incoming data from the client and <em>not</em> the byte count of
- the decompressed data stream.</p>
- </div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxies" id="proxies">Dealing with proxy servers</a></h2>
-
- <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module sends a <code>Vary:
- Accept-Encoding</code> HTTP response header to alert proxies that
- a cached response should be sent only to clients that send the
- appropriate <code>Accept-Encoding</code> request header. This
- prevents compressed content from being sent to a client that will
- not understand it.</p>
-
- <p>If you use some special exclusions dependent
- on, for example, the <code>User-Agent</code> header, you must
- manually configure an addition to the <code>Vary</code> header
- to alert proxies of the additional restrictions. For example,
- in a typical configuration where the addition of the <code>DEFLATE</code>
- filter depends on the <code>User-Agent</code>, you should add:</p>
-
- <div class="example"><p><code>
- Header append Vary User-Agent
- </code></p></div>
-
- <p>If your decision about compression depends on other information
- than request headers (<em>e.g.</em> HTTP version), you have to set the
- <code>Vary</code> header to the value <code>*</code>. This prevents
- compliant proxies from caching entirely.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- Header set Vary *
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fragment size to be compressed at one time by zlib</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
-</table>
- <p>The <code class="directive">DeflateBufferSize</code> directive specifies
- the size in bytes of the fragments that zlib should compress at one
- time.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>How much compression do we apply to the output</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Zlib's default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>This directive is available since Apache 2.0.45</td></tr>
-</table>
- <p>The <code class="directive">DeflateCompressionLevel</code> directive specifies
- what level of compression should be used, the higher the value,
- the better the compression, but the more CPU time is required to
- achieve this.</p>
- <p>The value must between 1 (less compression) and 9 (more compression).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Places the compression ratio in a note for logging</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><var>type</var> is available since Apache 2.0.45</td></tr>
-</table>
- <p>The <code class="directive">DeflateFilterNote</code> directive
- specifies that a note about compression ratios should be attached
- to the request. The name of the note is the value specified for
- the directive. You can use that note for statistical purposes by
- adding the value to your <a href="../logs.html#accesslog">access log</a>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
- <p>If you want to extract more accurate values from your logs, you
- can use the <var>type</var> argument to specify the type of data
- left as note for logging. <var>type</var> can be one of:</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>Store the byte count of the filter's input stream in the note.</dd>
-
- <dt><code>Output</code></dt>
- <dd>Store the byte count of the filter's output stream in the note.</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>Store the compression ratio (<code>output/input * 100</code>)
- in the note. This is the default, if the <var>type</var> argument
- is omitted.</dd>
- </dl>
-
- <p>Thus you may log it this way:</p>
-
- <div class="example"><h3>Accurate Logging</h3><p><code>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>How much memory should be used by zlib for compression</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
-</table>
- <p>The <code class="directive">DeflateMemLevel</code> directive specifies
- how much memory should be used by zlib for compression
- (a value between 1 and 9).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Zlib compression window size</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
-</table>
- <p>The <code class="directive">DeflateWindowSize</code> directive specifies the
- zlib compression window size (a value between 1 and 15). Generally, the
- higher the window size, the higher can the compression ratio be expected.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_deflate.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_deflate.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_deflate.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_deflate.html.ja.euc-jp b/docs/manual/mod/mod_deflate.html.ja.euc-jp
deleted file mode 100644
index a0c43c989b..0000000000
--- a/docs/manual/mod/mod_deflate.html.ja.euc-jp
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_deflate - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_deflate</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_deflate.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_deflate.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_deflate.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤ØÁ÷¤é¤ì¤ëÁ°¤Ë¥³¥ó¥Æ¥ó¥Ä¤ò°µ½Ì¤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>deflate_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_deflate.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¥â¥¸¥å¡¼¥ë¤Ï <code>DEFLATE</code>
- ½ÐÎÏ¥Õ¥£¥ë¥¿¤òÄ󶡤·¤Þ¤¹¡£¤³¤ì¤Ï¥µ¡¼¥Ð¤«¤é¤Î½ÐÎϤò¡¢¥Í¥Ã¥È¥ï¡¼¥¯¤ò
- Ä̤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ëÁ°¤Ë°µ½Ì¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatebuffersize">DeflateBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatefilternote">DeflateFilterNote</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatememlevel">DeflateMemLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatewindowsize">DeflateWindowSize</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#recommended">¥µ¥ó¥×¥ëÀßÄê</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">°µ½Ì¤òÍ­¸ú¤Ë¤¹¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxies">Proxy ¥µ¡¼¥Ð¤Ç¤Î°·¤¤</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../filter.html">Filters</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="recommended" id="recommended">¥µ¥ó¥×¥ëÀßÄê</a></h2>
- <p>²¼¤Ë¤»¤Ã¤«¤Á¤Ê¿Í¸þ¤±¤Î´Êñ¤ÊÀßÄêÎã¤ò¼¨¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>¿ô¥¿¥¤¥×¤Î¤ß°µ½Ì¤¹¤ë</h3><p><code>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- </code></p></div>
-
- <p>°Ê²¼¤ÎÀßÄê¤Ï¥³¥ó¥Æ¥ó¥Ä¤ò¤è¤ê°µ½Ì¤·¤Þ¤¹¤¬¡¢¤º¤Ã¤ÈÊ£»¨¤ÊÀßÄê¤Ë¤Ê¤ê¤Þ¤¹¡£
- ÀßÄê¤Î¶ù¡¹¤Þ¤Ç¤è¤¯Íý²ò¤·¤Ê¤¤¤Ç»È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><h3>²èÁü°Ê³°Á´¤Æ°µ½Ì¤¹¤ë</h3><p><code>
- &lt;Location /&gt;<br />
- <span class="indent">
- # Insert filter<br />
- SetOutputFilter DEFLATE<br />
- <br />
- # Netscape 4.x has some problems...<br />
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- <br />
- # Netscape 4.06-4.08 have some more problems<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- <br />
- # MSIE masquerades as Netscape, but it is fine<br />
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
- <br />
- # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
- # the above regex won't work. You can use the following<br />
- # workaround to get the desired effect:<br />
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
- <br />
- # Don't compress images<br />
- SetEnvIfNoCase Request_URI \<br />
- <span class="indent">
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
- </span>
- <br />
- # Make sure proxies don't deliver the wrong content<br />
- Header append Vary User-Agent env=!dont-vary<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">°µ½Ì¤òÍ­¸ú¤Ë¤¹¤ë</a></h2>
-
- <h3><a name="output" id="output">Output Compression</a></h3>
- <p>°µ½Ìµ¡Ç½¤Ï <code>DEFLATE</code> <a href="../filter.html">¥Õ¥£¥ë¥¿</a>
- ¤Ë¤è¤ê¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¤¢¤ë
- ¥³¥ó¥Æ¥ÊÃæ¤Î¥É¥­¥å¥á¥ó¥È¤ò°µ½Ì¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- SetOutputFilter DEFLATE
- </code></p></div>
-
- <p>¤è¤¯»È¤ï¤ì¤Æ¤¤¤ë¥Ö¥é¥¦¥¶¤Ç¤Ï¡¢¤¹¤Ù¤Æ¤Î¥³¥ó¥Æ¥ó¥Ä¤ËÂФ¹¤ë
- °µ½Ì¤ò°·¤¨¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤Ç¤¹¤«¤é¡¢<code>gzip-only-text/html</code>
- ¥Î¡¼¥È¤ò <code>1</code> ¤Ë¤·¤Æ¡¢html ¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ¤Î¤ß
- °µ½Ì¤¬Æ¯¤¯¤è¤¦¤Ë¤·¤¿Êý¤¬¤è¤¤¤«¤â¤·¤ì¤Þ¤»¤ó (°Ê²¼»²¾È)
- ¤³¤ÎÃͤò <em><code>1</code> °Ê³°¤ÎÃÍ</em>¤ËÀßÄꤷ¤¿¾ì¹ç¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>Ä̾ÆÃÄê¤ÎMIME¥¿¥¤¥×¤Ë¤Ä¤¤¤Æ¤Î¤ß°µ½Ì¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢
- <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Þ¤¹¡£¼¡¤Ë Apache ¤Î¥É¥­¥å¥á¥ó¥È¤Î html
- ¥Õ¥¡¥¤¥ë¤Î¤ß¤Î°µ½Ì¤òÍ­¸ú¤Ë¤¹¤ëÎã¤ò¼¨¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Directory "/your-server-root/manual"&gt;<br />
- <span class="indent">
- AddOutputFilterByType DEFLATE text/html<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>Á´¤Æ¤Î¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤Ç¤Î°µ½Ì¤ËÌäÂê¤òÊú¤¨¤Æ¤¤¤ë¥Ö¥é¥¦¥¶¤ËÂФ·¤Æ¤Ï¡¢
- <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¡¢ÆÃÄê¤Î¥Ö¥é¥¦¥¶¤Ë <code>no-gzip</code>
- ¥Î¡¼¥È¤ò¥»¥Ã¥È¤·¡¢°µ½Ì¤¬¹Ô¤Ê¤ï¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£
- <code>no-gzip</code> ¤È <code>gzip-only-text/html</code>
- ¤òÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¾å¼ê¤¯Âнè¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¡¢Á°¼Ô¤¬¸å¼Ô¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Þ¤¹¡£
- ¾åµ­¤Î<a href="#recommended">ÀßÄêÎã</a>¤ÎÈ´¿è¤ò
- ¼¡¤Ë¼¨¤·¤Þ¤¹¤Î¤Ç¤´Í÷²¼¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- </code></p></div>
-
- <p>¤Þ¤º»Ï¤á¤Ë <code>User-Agent</code> ʸ»úÎ󤫤é Netscape Navigator
- 4.x ¤Ç¤¢¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£¤³¤ì¤é¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢
- <code>text/html</code> °Ê³°¤Î¥¿¥¤¥×¤Î°µ½Ì¤ò°·¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£
- 4.06, 4.07, 4.08 ¤Ï html ¥Õ¥¡¥¤¥ë¤Î¿­Ä¥¤Ë¤âÌäÂê¤òÊú¤¨¤Æ¤¤¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¤³¤ì¤é¤ËÂФ·¤Æ¤Ï¡¢´°Á´¤Ë deflate ¥Õ¥£¥ë¥¿¤ò¥ª¥Õ¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>3 ÈÖÌܤΠ<code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢¿ä¬¤·¤¿¥æ¡¼¥¶¡¼¥¨¡¼¥¸¥§¥ó¥È¤ò½¤Àµ¤·¤Þ¤¹¡£
- ¤Ê¤¼¤Ê¤é Microsoft Internet Explorer ¤â "Mozilla/4" ¤ÈÆÃÄꤵ¤ì¤Þ¤¹¤¬¡¢
- ¤³¤ì¤é¤Ï¼ÂºÝ¤Ë¤Ï°µ½Ì¤ò°·¤¦¤³¤È¤¬¤Ç¤­¤ë¤«¤é¤Ç¤¹¡£
- <code>User-Agent</code> ¥Ø¥Ã¥À¤ò "MSIE"
- (<code>\b</code> ¤Ï¡Öñ¸ì¤Î¶­³¦¡×¤ò°ÕÌ£¤·¤Þ¤¹) ¤ÎÄɲÃʸ»ú¤Ç¸¡ºº¤·¤Æ¡¢
- ¤³¤ì°ÊÁ°¤ËÀßÄꤷ¤¿À©¸Â¤òºÆ¤Ó²ò½ü¤·¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí</h3>
- <code>DEFLATE</code> ¥Õ¥£¥ë¥¿¤Ïɬ¤º¡¢PHP ¤ä SSI ¤È¤¤¤Ã¤¿ RESOURCE
- ¥Õ¥£¥ë¥¿¤Î¸å¤Ë¤Ê¤ê¤Þ¤¹¡£
- DEFLATE ¥Õ¥£¥ë¥¿¤ÏÆâÉôŪ¤Ê¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤ò´ØÃΤ·¤Þ¤»¤ó¡£
- </div>
- <div class="note"><h3>Ãí</h3>
- <code class="directive"><a href="../mod/core.html#setenv">SetEnv</a></code> ¤ÇÀßÄꤵ¤ì¤ë
- <code>force-gzip</code> ´Ä¶­ÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤ì¤Ï
- ¥Ö¥é¥¦¥¶¤Î accept-encoding ÀßÄê¤ò̵»ë¤·¡¢°µ½Ì¤·¤¿½ÐÎϤò¤·¤Þ¤¹¡£
- </div>
-
-
- <h3><a name="inflate" id="inflate">½ÐÎϤο­Ä¹</a></h3>
- <p><code class="module"><a href="../mod/mod_defulate.html">mod_defulate</a></code> ¥â¥¸¥å¡¼¥ë¤Ï¡¢gzip °µ½Ì¤µ¤ì¤¿¥ì¥¹¥Ý¥ó¥¹
- ËÜʸ¤ò inflate/uncompress ¤¹¤ë¥Õ¥£¥ë¥¿¤âÄ󶡤·¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢<code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>
- ¤ä <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> ¤ò»È¤Ã¤Æ¡¢
- <code>INFLATE</code> ¥Õ¥£¥ë¥¿¤ò½ÐÎÏ¥Õ¥£¥ë¥¿¥Á¥§¥¤¥ó¤ËÁÞÆþ¤·¤Þ¤¹¡£
- Î㤨¤Ð¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Location /dav-area&gt;<br />
- <span class="indent">
- ProxyPass http://example.com/<br />
- SetOutputFilter INFLATE<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>¤³¤ÎÎã¤Ç¤Ï¡¢example.com ¤«¤é¤Î gzip °µ½Ì¤µ¤ì¤¿½ÐÎϤò¿­Ä¹¤·¡¢
- ¤½¤Î¾¤Î¥Õ¥£¥ë¥¿¤¬¤µ¤é¤Ë¤½¤Î½ÐÎϤò½èÍý¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- </p>
-
-
- <h3><a name="input" id="input">ÆþÎϤο­Ä¥</a></h3>
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¥â¥¸¥å¡¼¥ë¤Ï¡¢gzip
- ¤Ç°µ½Ì¤µ¤ì¤¿¥ê¥¯¥¨¥¹¥ÈËÜÂΤò¿­Ä¥¤¹¤ë¥Õ¥£¥ë¥¿¤âÄ󶡤·¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢<code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code>
- ¤« <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code> ¤ò»ÈÍѤ·¤Æ¡¢
- <code>DEFLATE</code> ¥Õ¥£¥ë¥¿¤òÆþÎÏ¥Õ¥£¥ë¥¿¥Á¥§¥¤¥ó¤ËÁȤ߹þ¤ß¤Þ¤¹¡£
- Î㤨¤Ð¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Location /dav-area&gt;<br />
- <span class="indent">
- SetInputFilter DEFLATE<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>¤³¤ÎÀßÄê¤Ç¤¢¤ì¤Ð¡¢<code>Content-Encoding: gzip</code>
- ¥Ø¥Ã¥À¤ò´Þ¤à¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤È¡¢ËÜÂΤϼ«Æ°Åª¤Ë¿­Ä¥¤µ¤ì¤Þ¤¹¡£
- gzip ¥ê¥¯¥¨¥¹¥ÈËÜÂΤòÁ÷¿®¤¹¤ë¥Ö¥é¥¦¥¶¤Ï¤¢¤Þ¤ê¤¢¤ê¤Þ¤»¤ó¡£
- ¤·¤«¤·¡¢Î㤨¤Ð <a href="http://www.webdav.org">WebDAV</a>
- ¥¯¥é¥¤¥¢¥ó¥È¤Î´ö¤Ä¤«¤Ê¤É¡¢ÆÃÊ̤ʥ¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¥ê¥¯¥¨¥¹¥È¤Î
- °µ½Ì¤ò¼ÂºÝ¤Ë¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>Content-Length ¤Ë´Ø¤¹¤ëÃí°Õ</h3>
- <p>¥ê¥¯¥¨¥¹¥ÈËÜÂΤ½¤ì¼«ÂΤòɾ²Á¤¹¤ë¾ì¹ç¤Ï¡¢<em><code>Content-Length</code>
- ¥Ø¥Ã¥À¤ò¿®ÍѤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤</em>¡£Content-Length ¥Ø¥Ã¥À¤Ï¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤«¤éÁ÷¿®¤µ¤ì¤ë¥Ç¡¼¥¿¤ÎŤµ¤òÈ¿±Ç¤·¤Æ¤¤¤ë¤Î¤Ç¤¢¤Ã¤Æ¡¢
- ¿­Ä¥¤µ¤ì¤¿¥Ç¡¼¥¿¥¹¥È¥ê¡¼¥à¤Î<em>¥Ð¥¤¥È¥«¥¦¥ó¥È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó</em>¡£</p>
- </div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxies" id="proxies">Proxy ¥µ¡¼¥Ð¤Ç¤Î°·¤¤</a></h2>
-
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¥â¥¸¥å¡¼¥ë¤Ï <code>Vary: Accept-Encoding</code>
- HTTP ±þÅú¥Ø¥Ã¥À¤òÁ÷¿®¤·¤Æ¡¢Å¬ÀÚ¤Ê <code>Accept-Encoding</code>
- ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤òÁ÷¿®¤¹¤ë¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¤Î¤ß¡¢
- ¥×¥í¥¯¥·¥µ¡¼¥Ð¤¬¥­¥ã¥Ã¥·¥å¤·¤¿±þÅú¤òÁ÷¿®¤¹¤ë¤è¤¦¤ËÃí°Õ¤ò´­µ¯¤·¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Ë¤·¤Æ¡¢°µ½Ì¤ò°·¤¦¤³¤È¤Î¤Ç¤­¤Ê¤¤¥¯¥é¥¤¥¢¥ó¥È¤Ë
- °µ½Ì¤µ¤ì¤¿ÆâÍƤ¬Á÷¤é¤ì¤ë¤³¤È¤Î¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <p>¤â¤·ÆÃÊ̤˲¿¤«¤Ë°Í¸¤·¤Æ½ü³°¤·¤¿¤¤¾ì¹ç¡¢Î㤨¤Ð <code>User-Agent</code>
- ¥Ø¥Ã¥À¤Ê¤É¤Ë°Í¸¤·¤Æ¤¤¤ë¾ì¹ç¡¢¼êÆ°¤Ç <code>Vary</code> ¥Ø¥Ã¥À¤òÀßÄꤷ¤Æ¡¢
- ÄɲäÎÀ©¸Â¤Ë¤Ä¤¤¤Æ¥×¥í¥¯¥·¥µ¡¼¥Ð¤ËÃí°Õ¤ò¹Ô¤Ê¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- Î㤨¤Ð <code>User-Agent</code> ¤Ë°Í¸¤·¤Æ <code>DEFLATE</code>
- ¤òÄɲ乤ëŵ·¿Åª¤ÊÀßÄê¤Ç¤Ï¡¢¼¡¤Î¤è¤¦¤ËÄɲ乤뤳¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Header append Vary User-Agent
- </code></p></div>
-
- <p>¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À°Ê³°¤Î¾ðÊó (<em>Î㤨¤Ð</em> HTTP ¥Ð¡¼¥¸¥ç¥ó)
- ¤Ë°Í¸¤·¤Æ°µ½Ì¤¹¤ë¤«¤É¤¦¤«·è¤á¤ë¾ì¹ç¡¢
- <code>Vary</code> ¥Ø¥Ã¥À¤ò <code>*</code> ¤ËÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Ë¤¹¤ë¤È¡¢»ÅÍͤ˽àµò¤·¤¿¥×¥í¥¯¥·¤Ï¥­¥ã¥Ã¥·¥å¤òÁ´¤¯¹Ô¤Ê¤ï¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- Header set Vary *
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>zlib ¤¬°ìÅ٤˰µ½Ì¤¹¤ë²ô¤ÎÂ礭¤µ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateBufferSize</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- zlib ¤¬°ìÅ٤˰µ½Ì¤¹¤ë²ô¤ÎÂ礭¤µ¤ò¥Ð¥¤¥Èñ°Ì¤Ç»ØÄꤷ¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>½ÐÎϤËÂФ·¤Æ¹Ô¤Ê¤¦°µ½Ì¤ÎÄøÅÙ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Zlib ¤Î¥Ç¥Õ¥©¥ë¥È</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>This directive is available since Apache 2.0.45</td></tr>
-</table>
- <p><code class="directive">DeflateCompressionLevel</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- °µ½Ì¤ÎÄøÅÙ¤òÀßÄꤷ¤Þ¤¹¡£Â礭¤ÊÃͤǤϡ¢¤è¤ê°µ½Ì¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¤¬¡¢
- CPU »ñ¸»¤ò¾ÃÈñ¤·¤Þ¤¹¡£</p>
- <p>ÃÍ¤Ï 1 (Äã°µ½Ì) ¤«¤é 9 (¹â°µ½Ì) ¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥í¥®¥ó¥°ÍѤ˰µ½ÌÈæ¤ò¥á¥â¤ËÄɲÃ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td><var>type</var> is available since Apache 2.0.45</td></tr>
-</table>
- <p><code class="directive">DeflateFilterNote</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- °µ½ÌÈæ¤Ë´Ø¤¹¤ë¥á¥â¤¬¥ê¥¯¥¨¥¹¥È¤ËÉղ䵤ì¤ë¤³¤È¤ò»ØÄꤷ¤Þ¤¹¡£
- ¥á¥â (note) ¤Î̾Á°¤Ï¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë»ØÄꤵ¤ì¤¿ÃͤǤ¹¡£
- ¥á¥â¤Ï<a href="../logs.html#accesslog">¥¢¥¯¥»¥¹¥í¥°</a>¤Ë
- Ãͤòµ­Ï¿¤·¡¢Åý·×¤ò¼è¤ëÌÜŪ¤Ë¤â»È¤¨¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
- <p>¥í¥°¤«¤é¤â¤Ã¤ÈÀºÌ©¤ÊÃͤòÃê½Ð¤·¤¿¤¤¾ì¹ç¤Ï¡¢<var>type</var>
- °ú¿ô¤ò»ÈÍѤ·¤Æ¡¢¥Ç¡¼¥¿¥¿¥¤¥×¤ò¥í¥°¤Î¥á¥â¤È¤·¤Æ»Ä¤¹¤è¤¦¤Ë»ØÄê¤Ç¤­¤Þ¤¹¡£
- <var>type</var> ¤Ï¼¡¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>¥Õ¥£¥ë¥¿¤ÎÆþÎÏ¥¹¥È¥ê¡¼¥à¤Î¥Ð¥¤¥È¥«¥¦¥ó¥È¤ò¥á¥â¤ËÊݸ¤¹¤ë¡£</dd>
-
- <dt><code>Output</code></dt>
- <dd>¥Õ¥£¥ë¥¿¤Î½ÐÎÏ¥¹¥È¥ê¡¼¥à¤Î¥Ð¥¤¥È¥«¥¦¥ó¥È¤ò¥á¥â¤ËÊݸ¤¹¤ë¡£</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>°µ½ÌΨ (<code>½ÐÎÏ / ÆþÎÏ * 100</code>) ¤ò¥á¥â¤ËÊݸ¤¹¤ë¡£
- <var>type</var> °ú¿ô¤ò¾Êά¤·¤¿¾ì¹ç¤Ï¡¢¤³¤ì¤¬¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ê¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¤Þ¤È¤á¤ë¤È¡¢¼¡¤Î¤è¤¦¤Ë¥í¥°¤ò¼è¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <div class="example"><h3>ÀºÌ©¤Ê¥í¥°ºÎ¼è</h3><p><code>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>zlib ¤¬°µ½Ì¤Ë»È¤¦¥á¥â¥ê¤Î¥ì¥Ù¥ë¤ò»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateMemLevel</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- zlib ¤¬°µ½Ì¤Ë»È¤¦¥á¥â¥ê¤Î¥ì¥Ù¥ë¤òÀßÄꤷ¤Þ¤¹ (1 ¤«¤é 9 ¤Î´Ö¤ÎÃÍ)¡£
- (ÌõÃí: 2 ¤òÄì¤È¤¹¤ëÂпô¤ÎÃͤˤʤê¤Þ¤¹¡£
- 8 ÄøÅÙ¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£)</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Zlib ¤Î°µ½ÌÍÑ¥¦¥£¥ó¥É¥¦¤ÎÂ礭¤µ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateWindowSize</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- zlib ¤Î°µ½ÌÍÑ¥¦¥£¥ó¥É¥¦ (ÌõÃí: zlib ¤Ç»ÈÍѤµ¤ì¤ëÍúÎò¥Ð¥Ã¥Õ¥¡)
- ¤ÎÂ礭¤µ¤ò»ØÄꤷ¤Þ¤¹ (1 ¤«¤é 15 ¤Î´Ö¤ÎÃÍ)¡£
- °ìÈÌŪ¤ËÂ礭¤Ê¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò»ÈÍѤ¹¤ë¤È°µ½ÌΨ¤¬¸þ¾å¤·¤Þ¤¹¡£
- (ÌõÃí: 2 ¤òÄì¤È¤¹¤ëÂпô¤ÎÃͤˤʤê¤Þ¤¹¡£
- 8 ¤«¤é 15 ¤Ë¤¹¤ë¤Î¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£)</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_deflate.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_deflate.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_deflate.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_deflate.html.ko.euc-kr b/docs/manual/mod/mod_deflate.html.ko.euc-kr
deleted file mode 100644
index 0cc9f58803..0000000000
--- a/docs/manual/mod/mod_deflate.html.ko.euc-kr
+++ /dev/null
@@ -1,366 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_deflate - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_deflate</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_deflate.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_deflate.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_deflate.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>³»¿ëÀ» Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ ¾ÐÃàÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>deflate_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_deflate.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¸ðµâÀº ¼­¹öÀÇ Ãâ·ÂÀ» ³×Æ®¿÷À¸·Î
- Ŭ¶óÀ̾ðÆ®¿¡ º¸³»±â Àü¿¡ ¾ÐÃàÇÏ´Â <code>DEFLATE</code> Ãâ·ÂÇÊÅ͸¦
- Á¦°øÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatebuffersize">DeflateBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatecompressionlevel">DeflateCompressionLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatefilternote">DeflateFilterNote</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatememlevel">DeflateMemLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#deflatewindowsize">DeflateWindowSize</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#recommended">°ßº» ¼³Á¤</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">¾ÐÃàÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxies">ÇÁ·Ï½Ã ¼­¹ö ´Ù·ç±â</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../filter.html">ÇÊÅÍ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="recommended" id="recommended">°ßº» ¼³Á¤</a></h2>
- <p>±ÞÇÑ »ç¶÷À» À§ÇÑ °ßº» ¼³Á¤ÀÌ´Ù.</p>
-
- <div class="example"><h3>ÀϺΠtype¸¸ ¾ÐÃà</h3><p><code>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- </code></p></div>
-
- <p>¾Æ·¡ ¼³Á¤Àº ¿ä¾àÇÏ¿´Áö¸¸ ±×·¡µµ º¹ÀâÇÏ´Ù. ¼³Á¤À» ¿ÏÀüÈ÷
- ÀÌÇØÇÑ ÈÄ »ç¿ëÇ϶ó.</p>
-
- <div class="example"><h3>À̹ÌÁö¸¦ Á¦¿ÜÇÑ ¸ðµç °ÍÀ» ¾ÐÃà</h3><p><code>
- &lt;Location /&gt;<br />
- <span class="indent">
- # ÇÊÅ͸¦ Ãß°¡ÇÑ´Ù<br />
- SetOutputFilter DEFLATE<br />
- <br />
- # Netscape 4.x¿¡ ¹®Á¦°¡ ÀÖ´Ù...<br />
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- <br />
- # Netscape 4.06-4.08¿¡ ´õ ¹®Á¦°¡ ÀÖ´Ù<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- <br />
- # MSIEÀº Netscape¶ó°í ÀÚ½ÅÀ» ¾Ë¸®Áö¸¸, ¹®Á¦°¡ ¾ø´Ù<br />
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
- <br />
- # ÁÖÀÇ: ¾ÆÆÄÄ¡ 2.0.48±îÁö mod_setenvifÀÇ ¹ö±×¶§¹®¿¡<br />
- # À§ÀÇ Á¤±ÔÇ¥Çö½ÄÀº µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ¿øÇÏ´Â È¿°ú¸¦<br />
- # ¾ò±âÀ§ÇØ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¿© »ç¿ëÇÑ´Ù:<br />
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
- <br />
- # À̹ÌÁö¸¦ ¾ÐÃàÇÏÁö ¾Ê´Â´Ù<br />
- SetEnvIfNoCase Request_URI \<br />
- <span class="indent">
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
- </span>
- <br />
- # ÇÁ·Ï½Ã°¡ À߸øµÈ ³»¿ëÀ» Àü´ÞÇÏÁö¾Êµµ·Ï ÇÑ´Ù<br />
- Header append Vary User-Agent env=!dont-vary<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">¾ÐÃàÇϱâ</a></h2>
-
- <h3><a name="output" id="output">Ãâ·Â ¾ÐÃà</a></h3>
- <p><code>DEFLATE</code> <a href="../filter.html">ÇÊÅÍ</a>°¡
- ¾ÐÃàÀ» ÇÑ´Ù. ´ÙÀ½ Áö½Ã¾î´Â Áö½Ã¾î°¡ ÀÖ´Â À§Ä¡ÀÇ ¹®¼­¸¦
- ¾ÐÃàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- SetOutputFilter DEFLATE
- </code></p></div>
-
- <p>¸ðµç ³»¿ëÀ» ¾ÐÃàÇϸé ó¸®ÇÏÁö ¸øÇÏ´Â ºê¶ó¿ìÀú°¡ Àֱ⶧¹®¿¡
- html ÆÄÀϸ¸À» ¾ÐÃàÇϱâÀ§ÇØ (¾Æ·¡ Âü°í)
- <code>gzip-only-text/html</code>À» <code>1</code>·Î ¼³Á¤ÇÒÁöµµ
- ¸ð¸¥´Ù. À̸¦ <em><code>1</code>ÀÌ ¾Æ´Ñ °ªÀ¸·Î</em> ¼³Á¤Çϸé
- ¹«½ÃÇÑ´Ù.</p>
-
- <p>º¸Åë Ưº°ÇÑ MIME type¸¸ ¾ÐÃàÇÏ·Á¸é <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- ´ÙÀ½ ¼³Á¤Àº html ÆÄÀϸ¸À» ¾ÐÃàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- &lt;Directory "/your-server-root/manual"&gt;<br />
- <span class="indent">
- AddOutputFilterByType DEFLATE text/html<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <p>¾ÐÃàÇÑ ÆÄÀÏÀ» ó¸®ÇÏÁö ¸øÇÏ´Â ºê¶ó¿ìÀú¿¡°Ô´Â ¾ÐÃàÇÏÁö¾Ê°í
- º¸³»±æÀ§ÇØ <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code> Áö½Ã¾î¿¡ <code>no-gzip</code>À»
- ¼³Á¤ÇÑ´Ù. ÃÖÀûÀÇ °á°ú¸¦ ¾ò±âÀ§ÇØ <code>no-gzip</code>°ú
- <code>gzip-only-text/html</code>À» °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ÀÌ °æ¿ì ÀüÀÚ°¡ ÈÄÀÚ¸¦ ¹«½ÃÇÑ´Ù. À§ ÀýÀÇ <a href="#recommended">¼³Á¤ ¿¹Á¦</a> ÀϺθ¦ »ìÆ캸ÀÚ:</p>
-
- <div class="example"><p><code>
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- </code></p></div>
-
- <p>¸ÕÀú <code>User-Agent</code> ¹®ÀÚ¿­À» º¸°í Netscape
- Navigator ¹öÀü 4.xÀÎÁö °Ë»çÇÑ´Ù. ÀÌ ¹öÀüÀº <code>text/html</code>ÀÌ
- ¾Æ´Ñ typeÀÇ ¾ÐÃàÀ» ó¸®ÇÏÁö ¸øÇÑ´Ù. ¹öÀü 4.06, 4.07, 4.08Àº
- html ÆÄÀÏ ¾ÐÃàÀ» ó¸®Çϴ´뵵 ¹®Á¦°¡ ÀÖ´Ù. ±×·¡¼­ ¿ì¸®´Â
- ÀÌ °æ¿ì deflate ÇÊÅ͸¦ ¿ÏÀüÈ÷ »ç¿ëÇÏÁö¾Ê´Â´Ù.</p>
-
- <p>¼¼¹ø° <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
- Áö½Ã¾î´Â Microsoft Internet Explorer°¡ ÀÚ½ÅÀ» "Mozilla/4"·Î
- ¾Ë¸®Áö¸¸ ¾ÐÃàµÈ ¿äûÀ» ó¸®ÇÒ ¼ö Àֱ⶧¹®¿¡ user agent
- ÃßÃøÀ» ¼öÁ¤ÇÑ´Ù. <code>User-Agent</code> Çì´õ¿¡¼­ "MSIE"
- (<code>\b</code>´Â "´Ü¾î °æ°è"¸¦ ¶æÇÑ´Ù) ¹®ÀÚ¿­À» ¹ß°ßÇϸé
- ¾Õ¿¡¼­ ¼³Á¤ÇÑ Á¦¾àÀ» Ǭ´Ù.</p>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <code>DEFLATE</code> ÇÊÅÍ´Â Ç×»ó PHP³ª SSI¿Í °°Àº RESOURCE
- ÇÊÅÍ µÚ¿¡ µé¾î°£´Ù. ¶Ç, ³»ºÎ ÇÏÀ§¿äû(subrequest)¿¡ ¿µÇâÀ»
- ÁÖÁö ¾Ê´Â´Ù.
- </div>
- <div class="note"><h3>ÁÖÀÇ</h3>
- <code class="directive"><a href="../mod/core.html#setenv">SetEnv</a></code>·Î
- <code>force-gzip</code> ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ¸é ºê¶ó¿ìÀúÀÇ
- accept-encoding ¼³Á¤À» ¹«½ÃÇÏ°í ¾ÐÃàµÈ °á°ú¸¦ º¸³½´Ù.
- </div>
-
-
- <h3><a name="inflate" id="inflate">Ãâ·Â ¾ÐÃàÇ®±â</a></h3>
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¸ðµâÀº gzipÀ¸·Î ¾ÐÃàµÈ
- ÀÀ´ä ³»¿ëÀ» Ǫ´Â ÇÊÅ͵µ Á¦°øÇÑ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é
- ´ÙÀ½°ú °°ÀÌ <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>³ª <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>¸¦ »ç¿ëÇÏ¿©
- Ãâ·ÂÇÊÅͼø¼­¿¡ <code>INFLATE</code> ÇÊÅ͸¦ Ãß°¡ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Location /dav-area&gt;<br />
- <span class="indent">
- ProxyPass http://example.com/<br />
- SetOutputFilter INFLATE<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>ÀÌ ¿¹Á¦´Â example.comÀÌ º¸³½ gzipÀ¸·Î ¾ÐÃàµÈ °á°úÀÇ
- ¾ÐÃàÀ» Ç®¾î¼­, ´Ù¸¥ ÇÊÅÍ°¡ ´õ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
- </p>
-
-
- <h3><a name="input" id="input">ÀÔ·Â ¾ÐÃàÇ®±â</a></h3>
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¸ðµâÀº gzipÀ¸·Î ¾ÐÃàµÈ ¿äû
- ³»¿ëÀ» Ǫ´Â ÇÊÅ͵µ Á¦°øÇÑ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½°ú
- °°ÀÌ <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code>³ª
- <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>¸¦
- »ç¿ëÇÏ¿© ÀÔ·ÂÇÊÅͼø¼­¿¡ <code>DEFLATE</code> ÇÊÅ͸¦
- Ãß°¡ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;Location /dav-area&gt;<br />
- <span class="indent">
- SetInputFilter DEFLATE<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>¿äû¿¡ <code>Content-Encoding: gzip</code> Çì´õ°¡ ÀÖ´Ù¸é
- ÀÚµ¿À¸·Î ¾ÐÃàµÈ ³»¿ëÀ» Ǭ´Ù. gzip ¿äûÀ» ÇÒ ¼ö ÀÖ´Â
- ºê¶ó¿ìÀú´Â µå¹°´Ù. ±×·¯³ª ¾î¶² <a href="http://www.webdav.org">WebDAV</a> Ŭ¶óÀ̾ðÆ®¿Í °°Àº
- Ưº°ÇÑ ÇÁ·Î±×·¥Àº ¿äû ¾ÐÃàÀ» Áö¿øÇÑ´Ù.</p>
-
- <div class="warning"><h3>Content-Length¿¡ ´ëÇÑ ÁÖÀÇ</h3>
- <p>¿äû ³»¿ëÀ» Á÷Á¢ »ìÆ캻´Ù¸é, <em><code>Content-Length</code>
- Çì´õ¸¦ ¹ÏÁö¸¶¶ó!</em> Content-Length Çì´õ´Â Ŭ¶óÀ̾ðÆ®°¡
- º¸³½ ³»¿ëÀÇ ±æÀÌÀÌÁö, ¾ÐÃàÀ» Ǭ °á°úÀÇ ¹ÙÀÌÆ®¼ö°¡
- <em>¾Æ´Ï´Ù</em>.</p>
- </div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxies" id="proxies">ÇÁ·Ï½Ã ¼­¹ö ´Ù·ç±â</a></h2>
-
- <p><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¸ðµâÀº ÇÁ·Ï½Ã°¡ ÀÚ½ÅÀÌ Ä³½¬ÇÑ
- ÀÀ´äÀ» ÀûÀýÇÑ <code>Accept-Encoding</code> ¿äû Çì´õ¸¦ º¸³½
- Ŭ¶óÀ̾ðÆ®¿¡°Ô¸¸ º¸³»µµ·Ï <code>Vary:
- Accept-Encoding</code> HTTP ÀÀ´ä Çì´õ¸¦ Ãß°¡ÇÑ´Ù. ±×·¡¼­
- ¾ÐÃàµÈ ³»¿ëÀ» ÀÌÇØÇÒ ¼ö ¾ø´Â Ŭ¶óÀ̾ðÆ®¿¡ ¾ÐÃàµÈ ³»¿ëÀ»
- º¸³»Áö¾Êµµ·Ï ÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, <code>User-Agent</code> Çì´õ µî¿¡ µû¶ó Ưº°È÷
- ÇÊÅÍ Àû¿ëÀ» Ãë¼ÒÇÑ´Ù¸é, ÇÁ·Ï½Ã¿¡°Ô ÀÌ·¯ÇÑ Á¦ÇÑÀ» ¾Ë·ÁÁÖ±âÀ§ÇØ
- Á÷Á¢ <code>Vary</code> Çì´õ¿¡ Ãß°¡ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î,
- ¼³Á¤ÀÌ <code>User-Agent</code>¿¡ µû¶ó <code>DEFLATE</code>
- ÇÊÅ͸¦ Ãß°¡ÇÑ´Ù¸é ´ÙÀ½À» »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- Header append Vary User-Agent
- </code></p></div>
-
- <p>¿äû Çì´õ¿ÜÀÇ ´Ù¸¥ Á¤º¸¿¡ (<em>¿¹¸¦ µé¾î</em>, HTTP ¹öÀü)
- µû¶ó ¾ÐÃà ¿©ºÎ°¡ °áÁ¤µÈ´Ù¸é, <code>Vary</code> Çì´õ°ªÀ»
- <code>*</code>·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±×·¯¸é Ç¥ÁØÀ» µû¸£´Â ÇÁ·Ï½Ã´Â
- ij½¬¸¦ ÇÏÁö ¾Ê°Ô µÈ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- Header set Vary *
- </code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>zlibÀÌ Çѹø¿¡ ¾ÐÃàÇÒ Å©±â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateBufferSize</code> Áö½Ã¾î´Â zlibÀÌ
- Çѹø¿¡ ¾ÐÃàÇÒ ¹ÙÀÌÆ®¼ö¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ãâ·ÂÀ» ¾î´ÀÁ¤µµ ¾ÐÃàÇϴ°¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>Zlib's default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>This directive is available since Apache 2.0.45</td></tr>
-</table>
- <p><code class="directive">DeflateCompressionLevel</code> Áö½Ã¾î´Â
- »ç¿ëÇÒ ¾ÐÃà¼öÁØÀ» ¼±ÅÃÇÑ´Ù. °ªÀÌ Å¬¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÏÁö¸¸,
- CPU¸¦ ´õ ¸¹ÀÌ »ç¿ëÇÑ´Ù.</p>
- <p>(°¡Àå ´ú ¾ÐÃà) 1°ú (°¡Àå ¸¹ÀÌ ¾ÐÃà) 9 »çÀÌÀÇ °ªÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td><var>type</var> is available since Apache 2.0.45</td></tr>
-</table>
- <p><code class="directive">DeflateFilterNote</code> Áö½Ã¾î´Â ¿äûÀÇ
- ¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÏ´Â ±âÈ£¸¦ ÁöÁ¤ÇÑ´Ù. ±âÈ£ À̸§Àº Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ °ªÀÌ´Ù. Åë°è¸¦ À§ÇØ <a href="../logs.html#accesslog">Á¢±Ù
- ·Î±×</a>¿¡¼­ ±âÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
- <p>·Î±×¿¡¼­ ´õ Á¤È®ÇÑ °ªÀ» ÃßÃâÇÏ·Á¸é <var>type</var> ¾Æ±Ô¸ÕÆ®·Î
- ±â·ÏÇÒ ÀڷḦ ¼±ÅÃÇÑ´Ù. <var>type</var>´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>ÇÊÅÍ ÀԷ½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù.</dd>
-
- <dt><code>Output</code></dt>
- <dd>ÇÊÅÍ Ãâ·Â½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù..</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>¾ÐÃà·üÀ» (<code>output/input * 100</code>) ÀúÀåÇÑ´Ù.
- <var>type</var> ¾Æ±Ô¸ÕÆ®¸¦ »ý·«ÇÏ¸é »ç¿ëÇÏ´Â ±âº»°ªÀÌ´Ù.</dd>
- </dl>
-
- <p>±×·¡¼­ ÀÌ·¸°Ô ·Î±×¿¡ ±â·ÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><h3>Á¤¹ÐÇÑ ·Î±×</h3><p><code>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </code></p></div>
-
-<h3>Âü°í</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>zlibÀÌ ¾ÐÃàÇÒ¶§ »ç¿ëÇÏ´Â ¸Þ¸ð¸®·®</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateMemLevel</code> Áö½Ã¾î´Â zlibÀÌ
- ¾ÐÃàÇÒ¶§ ¾ó¸¶¸¸Å­ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒÁö °áÁ¤ÇÑ´Ù. (1°ú 9 »çÀÌÀÇ
- °ª)</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Zlib ¾ÐÃà window size</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_deflate</td></tr>
-</table>
- <p><code class="directive">DeflateWindowSize</code> Áö½Ã¾î´Â zlib
- ¾ÐÃà window size¸¦ (1°ú 15 »çÀÌÀÇ °ª) ÁöÁ¤ÇÑ´Ù. ÀϹÝÀûÀ¸·Î
- window size°¡ Ŭ¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_deflate.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_deflate.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_deflate.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_deflate.xml b/docs/manual/mod/mod_deflate.xml
deleted file mode 100644
index 8c6e66b8a2..0000000000
--- a/docs/manual/mod/mod_deflate.xml
+++ /dev/null
@@ -1,364 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.24 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_deflate.xml.meta">
-
-<name>mod_deflate</name>
-<description>Compress content before it is delivered to the
-client</description>
-<status>Extension</status>
-<sourcefile>mod_deflate.c</sourcefile>
-<identifier>deflate_module</identifier>
-
-<summary>
- <p>The <module>mod_deflate</module> module provides
- the <code>DEFLATE</code> output filter that allows output from
- your server to be compressed before being sent to the client over
- the network.</p>
-</summary>
-<seealso><a href="../filter.html">Filters</a></seealso>
-
-<section id="recommended"><title>Sample Configurations</title>
- <p>This is a simple sample configuration for the impatient.</p>
-
- <example><title>Compress only a few types</title>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- </example>
-
- <p>The following configuration, while resulting in more compressed content,
- is also much more complicated. Do not use this unless you fully understand
- all the configuration details.</p>
-
- <example><title>Compress everything except images</title>
- &lt;Location /&gt;<br />
- <indent>
- # Insert filter<br />
- SetOutputFilter DEFLATE<br />
- <br />
- # Netscape 4.x has some problems...<br />
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- <br />
- # Netscape 4.06-4.08 have some more problems<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- <br />
- # MSIE masquerades as Netscape, but it is fine<br />
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
- <br />
- # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
- # the above regex won't work. You can use the following<br />
- # workaround to get the desired effect:<br />
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
- <br />
- # Don't compress images<br />
- SetEnvIfNoCase Request_URI \<br />
- <indent>
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
- </indent>
- <br />
- # Make sure proxies don't deliver the wrong content<br />
- Header append Vary User-Agent env=!dont-vary<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
-</section>
-
-<section id="enable"><title>Enabling Compression</title>
-
- <section id="output"><title>Output Compression</title>
- <p>Compression is implemented by the <code>DEFLATE</code>
- <a href="../filter.html">filter</a>. The following directive
- will enable compression for documents in the container where it
- is placed:</p>
-
- <example>
- SetOutputFilter DEFLATE
- </example>
-
- <p>Some popular browsers cannot handle compression of all content
- so you may want to set the <code>gzip-only-text/html</code> note to
- <code>1</code> to only allow html files to be compressed (see
- below). If you set this to <em>anything but <code>1</code></em> it
- will be ignored.</p>
-
- <p>If you want to restrict the compression to particular MIME types
- in general, you may use the <directive module="core"
- >AddOutputFilterByType</directive> directive. Here is an example of
- enabling compression only for the html files of the Apache
- documentation:</p>
-
- <example>
- &lt;Directory "/your-server-root/manual"&gt;<br />
- <indent>
- AddOutputFilterByType DEFLATE text/html<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>For browsers that have problems even with compression of all file
- types, use the <directive module="mod_setenvif"
- >BrowserMatch</directive> directive to set the <code>no-gzip</code>
- note for that particular browser so that no compression will be
- performed. You may combine <code>no-gzip</code> with <code
- >gzip-only-text/html</code> to get the best results. In that case
- the former overrides the latter. Take a look at the following
- excerpt from the <a href="#recommended">configuration example</a>
- defined in the section above:</p>
-
- <example>
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- </example>
-
- <p>At first we probe for a <code>User-Agent</code> string that
- indicates a Netscape Navigator version of 4.x. These versions
- cannot handle compression of types other than
- <code>text/html</code>. The versions 4.06, 4.07 and 4.08 also
- have problems with decompressing html files. Thus, we completely
- turn off the deflate filter for them.</p>
-
- <p>The third <directive module="mod_setenvif">BrowserMatch</directive>
- directive fixes the guessed identity of the user agent, because
- the Microsoft Internet Explorer identifies itself also as "Mozilla/4"
- but is actually able to handle requested compression. Therefore we
- match against the additional string "MSIE" (<code>\b</code> means
- "word boundary") in the <code>User-Agent</code> Header and turn off
- the restrictions defined before.</p>
-
- <note><title>Note</title>
- The <code>DEFLATE</code> filter is always inserted after RESOURCE
- filters like PHP or SSI. It never touches internal subrequests.
- </note>
- <note><title>Note</title>
- There is a environment variable <code>force-gzip</code>,
- set via <directive module="core">SetEnv</directive>, which
- will ignore the accept-encoding setting of your browser and will
- send compressed output.
- </note>
-
- </section>
- <section id="inflate"><title>Output Decompression</title>
- <p>The <module>mod_deflate</module> module also provides a filter for
- inflating/uncompressing a gzip compressed response body. In order to activate
- this feature you have to insert the <code>INFLATE</code> filter into
- the outputfilter chain using <directive module="core"
- >SetOutputFilter</directive> or <directive module="mod_mime"
- >AddOutputFilter</directive>, for example:</p>
-
- <example>
- &lt;Location /dav-area&gt;<br />
- <indent>
- ProxyPass http://example.com/<br />
- SetOutputFilter INFLATE<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>This Example will uncompress gzip'ed output from example.com, so other
- filters can do further processing with it.
- </p>
-
- </section>
- <section id="input"><title>Input Decompression</title>
- <p>The <module>mod_deflate</module> module also provides a filter for
- decompressing a gzip compressed request body . In order to activate
- this feature you have to insert the <code>DEFLATE</code> filter into
- the input filter chain using <directive module="core"
- >SetInputFilter</directive> or <directive module="mod_mime"
- >AddInputFilter</directive>, for example:</p>
-
- <example>
- &lt;Location /dav-area&gt;<br />
- <indent>
- SetInputFilter DEFLATE<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>Now if a request contains a <code>Content-Encoding:
- gzip</code> header, the body will be automatically decompressed.
- Few browsers have the ability to gzip request bodies. However,
- some special applications actually do support request
- compression, for instance some <a
- href="http://www.webdav.org">WebDAV</a> clients.</p>
-
- <note type="warning"><title>Note on Content-Length</title>
- <p>If you evaluate the request body yourself, <em>don't trust
- the <code>Content-Length</code> header!</em>
- The Content-Length header reflects the length of the
- incoming data from the client and <em>not</em> the byte count of
- the decompressed data stream.</p>
- </note>
- </section>
-</section>
-
-<section id="proxies"><title>Dealing with proxy servers</title>
-
- <p>The <module>mod_deflate</module> module sends a <code>Vary:
- Accept-Encoding</code> HTTP response header to alert proxies that
- a cached response should be sent only to clients that send the
- appropriate <code>Accept-Encoding</code> request header. This
- prevents compressed content from being sent to a client that will
- not understand it.</p>
-
- <p>If you use some special exclusions dependent
- on, for example, the <code>User-Agent</code> header, you must
- manually configure an addition to the <code>Vary</code> header
- to alert proxies of the additional restrictions. For example,
- in a typical configuration where the addition of the <code>DEFLATE</code>
- filter depends on the <code>User-Agent</code>, you should add:</p>
-
- <example>
- Header append Vary User-Agent
- </example>
-
- <p>If your decision about compression depends on other information
- than request headers (<em>e.g.</em> HTTP version), you have to set the
- <code>Vary</code> header to the value <code>*</code>. This prevents
- compliant proxies from caching entirely.</p>
-
- <example><title>Example</title>
- Header set Vary *
- </example>
-</section>
-
-<directivesynopsis>
-<name>DeflateFilterNote</name>
-<description>Places the compression ratio in a note for logging</description>
-<syntax>DeflateFilterNote [<var>type</var>] <var>notename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility><var>type</var> is available since Apache 2.0.45</compatibility>
-
-<usage>
- <p>The <directive>DeflateFilterNote</directive> directive
- specifies that a note about compression ratios should be attached
- to the request. The name of the note is the value specified for
- the directive. You can use that note for statistical purposes by
- adding the value to your <a href="../logs.html#accesslog"
- >access log</a>.</p>
-
- <example><title>Example</title>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </example>
-
- <p>If you want to extract more accurate values from your logs, you
- can use the <var>type</var> argument to specify the type of data
- left as note for logging. <var>type</var> can be one of:</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>Store the byte count of the filter's input stream in the note.</dd>
-
- <dt><code>Output</code></dt>
- <dd>Store the byte count of the filter's output stream in the note.</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>Store the compression ratio (<code>output/input * 100</code>)
- in the note. This is the default, if the <var>type</var> argument
- is omitted.</dd>
- </dl>
-
- <p>Thus you may log it this way:</p>
-
- <example><title>Accurate Logging</title>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </example>
-</usage>
-<seealso><module>mod_log_config</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateBufferSize</name>
-<description>Fragment size to be compressed at one time by zlib</description>
-<syntax>DeflateBufferSize <var>value</var></syntax>
-<default>DeflateBufferSize 8096</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>DeflateBufferSize</directive> directive specifies
- the size in bytes of the fragments that zlib should compress at one
- time.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateWindowSize</name>
-<description>Zlib compression window size</description>
-<syntax>DeflateWindowSize <var>value</var></syntax>
-<default>DeflateWindowSize 15</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>DeflateWindowSize</directive> directive specifies the
- zlib compression window size (a value between 1 and 15). Generally, the
- higher the window size, the higher can the compression ratio be expected.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-
-<name>DeflateMemLevel</name>
-<description>How much memory should be used by zlib for compression</description>
-<syntax>DeflateMemLevel <var>value</var></syntax>
-<default>DeflateMemLevel 9</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>DeflateMemLevel</directive> directive specifies
- how much memory should be used by zlib for compression
- (a value between 1 and 9).</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateCompressionLevel</name>
-<description>How much compression do we apply to the output</description>
-<syntax>DeflateCompressionLevel <var>value</var></syntax>
-<default>Zlib's default</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>This directive is available since Apache 2.0.45</compatibility>
-
-<usage>
- <p>The <directive>DeflateCompressionLevel</directive> directive specifies
- what level of compression should be used, the higher the value,
- the better the compression, but the more CPU time is required to
- achieve this.</p>
- <p>The value must between 1 (less compression) and 9 (more compression).</p>
-</usage>
-</directivesynopsis>
-
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_deflate.xml.ja b/docs/manual/mod/mod_deflate.xml.ja
deleted file mode 100644
index 3d70d03c33..0000000000
--- a/docs/manual/mod/mod_deflate.xml.ja
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.24 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_deflate.xml.meta">
-
-<name>mod_deflate</name>
-<description>$B%/%i%$%"%s%H$XAw$i$l$kA0$K%3%s%F%s%D$r05=L$9$k(B</description>
-<status>Extension</status>
-<sourcefile>mod_deflate.c</sourcefile>
-<identifier>deflate_module</identifier>
-
-<summary>
- <p><module>mod_deflate</module> $B%b%8%e!<%k$O(B <code>DEFLATE</code>
- $B=PNO%U%#%k%?$rDs6!$7$^$9!#$3$l$O%5!<%P$+$i$N=PNO$r!"%M%C%H%o!<%/$r(B
- $BDL$7$F%/%i%$%"%s%H$KAw$kA0$K05=L$9$k$3$H$r2DG=$K$7$^$9!#(B</p>
-</summary>
-<seealso><a href="../filter.html">Filters</a></seealso>
-
-<section id="recommended"><title>$B%5%s%W%k@_Dj(B</title>
- <p>$B2<$K$;$C$+$A$J?M8~$1$N4JC1$J@_DjNc$r<($7$^$9!#(B</p>
-
- <example><title>$B?t%?%$%W$N$_05=L$9$k(B</title>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- </example>
-
- <p>$B0J2<$N@_Dj$O%3%s%F%s%D$r$h$j05=L$7$^$9$,!"$:$C$HJ#;($J@_Dj$K$J$j$^$9!#(B
- $B@_Dj$N6y!9$^$G$h$/M}2r$7$J$$$G;H$o$J$$$G$/$@$5$$!#(B</p>
-
- <example><title>$B2hA|0J30A4$F05=L$9$k(B</title>
- &lt;Location /&gt;<br />
- <indent>
- # Insert filter<br />
- SetOutputFilter DEFLATE<br />
- <br />
- # Netscape 4.x has some problems...<br />
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- <br />
- # Netscape 4.06-4.08 have some more problems<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- <br />
- # MSIE masquerades as Netscape, but it is fine<br />
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
- <br />
- # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
- # the above regex won't work. You can use the following<br />
- # workaround to get the desired effect:<br />
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
- <br />
- # Don't compress images<br />
- SetEnvIfNoCase Request_URI \<br />
- <indent>
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
- </indent>
- <br />
- # Make sure proxies don't deliver the wrong content<br />
- Header append Vary User-Agent env=!dont-vary<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
-</section>
-
-<section id="enable"><title>$B05=L$rM-8z$K$9$k(B</title>
-
- <section id="output"><title>Output Compression</title>
- <p>$B05=L5!G=$O(B <code>DEFLATE</code> <a href="../filter.html">$B%U%#%k%?(B</a>
- $B$K$h$j<BAu$5$l$F$$$^$9!#0J2<$N%G%#%l%/%F%#%V$O$=$N%G%#%l%/%F%#%V$N$"$k(B
- $B%3%s%F%JCf$N%I%-%e%a%s%H$r05=L$9$k$h$&$K$7$^$9(B:</p>
-
- <example>
- SetOutputFilter DEFLATE
- </example>
-
- <p>$B$h$/;H$o$l$F$$$k%V%i%&%6$G$O!"$9$Y$F$N%3%s%F%s%D$KBP$9$k(B
- $B05=L$r07$($k$o$1$G$O$"$j$^$;$s!#$G$9$+$i!"(B<code>gzip-only-text/html</code>
- $B%N!<%H$r(B <code>1</code> $B$K$7$F!"(Bhtml $B%U%!%$%k$KBP$7$F$N$_(B
- $B05=L$,F/$/$h$&$K$7$?J}$,$h$$$+$b$7$l$^$;$s(B ($B0J2<;2>H(B)
- $B$3$NCM$r(B <em><code>1</code> $B0J30$NCM(B</em>$B$K@_Dj$7$?>l9g$OL5;k$5$l$^$9!#(B</p>
-
- <p>$BDL>o!"FCDj$N(BMIME$B%?%$%W$K$D$$$F$N$_05=L$7$?$$$N$G$"$l$P!"(B
- <directive module="core">AddOutputFilterByType</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$^$9!#<!$K(B Apache $B$N%I%-%e%a%s%H$N(B html
- $B%U%!%$%k$N$_$N05=L$rM-8z$K$9$kNc$r<($7$^$9!#(B</p>
-
- <example>
- &lt;Directory "/your-server-root/manual"&gt;<br />
- <indent>
- AddOutputFilterByType DEFLATE text/html<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>$BA4$F$N%U%!%$%k%?%$%W$G$N05=L$KLdBj$rJz$($F$$$k%V%i%&%6$KBP$7$F$O!"(B
- <directive module="mod_setenvif">BrowserMatch</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$7$F!"FCDj$N%V%i%&%6$K(B <code>no-gzip</code>
- $B%N!<%H$r%;%C%H$7!"05=L$,9T$J$o$l$J$$$h$&$K$7$^$9!#(B
- <code>no-gzip</code> $B$H(B <code>gzip-only-text/html</code>
- $B$rAH$_9g$o$;$k$3$H$G>e<j$/BP=h$G$-$^$9!#(B
- $B$3$N>l9g!"A0<T$,8e<T$r%*!<%P!<%i%$%I$7$^$9!#(B
- $B>e5-$N(B<a href="#recommended">$B@_DjNc(B</a>$B$NH4?h$r(B
- $B<!$K<($7$^$9$N$G$4Mw2<$5$$!#(B</p>
-
- <example>
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- </example>
-
- <p>$B$^$:;O$a$K(B <code>User-Agent</code> $BJ8;zNs$+$i(B Netscape Navigator
- 4.x $B$G$"$k$+$I$&$+$rD4$Y$^$9!#$3$l$i$N%P!<%8%g%s$G$O!"(B
- <code>text/html</code> $B0J30$N%?%$%W$N05=L$r07$&$3$H$,$G$-$^$;$s!#(B
- 4.06, 4.07, 4.08 $B$O(B html $B%U%!%$%k$N?-D%$K$bLdBj$rJz$($F$$$^$9!#(B
- $B$G$9$+$i$3$l$i$KBP$7$F$O!"40A4$K(B deflate $B%U%#%k%?$r%*%U$K$7$^$9!#(B</p>
-
- <p>3 $BHVL\$N(B <directive module="mod_setenvif">BrowserMatch</directive>
- $B%G%#%l%/%F%#%V$G!"?dB,$7$?%f!<%6!<%(!<%8%'%s%H$r=$@5$7$^$9!#(B
- $B$J$<$J$i(B Microsoft Internet Explorer $B$b(B "Mozilla/4" $B$HFCDj$5$l$^$9$,!"(B
- $B$3$l$i$O<B:]$K$O05=L$r07$&$3$H$,$G$-$k$+$i$G$9!#(B
- <code>User-Agent</code> $B%X%C%@$r(B "MSIE"
- (<code>\b</code> $B$O!VC18l$N6-3&!W$r0UL#$7$^$9(B) $B$NDI2CJ8;z$G8!::$7$F!"(B
- $B$3$l0JA0$K@_Dj$7$?@)8B$r:F$S2r=|$7$^$9!#(B</p>
-
- <note><title>$BCm(B</title>
- <code>DEFLATE</code> $B%U%#%k%?$OI,$:!"(BPHP $B$d(B SSI $B$H$$$C$?(B RESOURCE
- $B%U%#%k%?$N8e$K$J$j$^$9!#(B
- DEFLATE $B%U%#%k%?$OFbItE*$J%5%V%j%/%(%9%H$r4XCN$7$^$;$s!#(B
- </note>
- <note><title>$BCm(B</title>
- <directive module="core">SetEnv</directive> $B$G@_Dj$5$l$k(B
- <code>force-gzip</code> $B4D6-JQ?t$,$"$j$^$9$,!"$3$l$O(B
- $B%V%i%&%6$N(B accept-encoding $B@_Dj$rL5;k$7!"05=L$7$?=PNO$r$7$^$9!#(B
- </note>
-
- </section>
- <section id="inflate"><title>$B=PNO$N?-D9(B</title>
- <p><module>mod_defulate</module> $B%b%8%e!<%k$O!"(Bgzip $B05=L$5$l$?%l%9%]%s%9(B
- $BK\J8$r(B inflate/uncompress $B$9$k%U%#%k%?$bDs6!$7$F$$$^$9!#(B
- $B$3$N5!G=$rM-8z$K$9$k$K$O!"(B<directive module="core">SetOutputFilter</directive>
- $B$d(B <directive module="mod_mime">AddOutputFilter</directive> $B$r;H$C$F!"(B
- <code>INFLATE</code> $B%U%#%k%?$r=PNO%U%#%k%?%A%'%$%s$KA^F~$7$^$9!#(B
- $BNc$($P<!$N$h$&$K$7$^$9!#(B</p>
-
- <example>
- &lt;Location /dav-area&gt;<br />
- <indent>
- ProxyPass http://example.com/<br />
- SetOutputFilter INFLATE<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>$B$3$NNc$G$O!"(Bexample.com $B$+$i$N(B gzip $B05=L$5$l$?=PNO$r?-D9$7!"(B
- $B$=$NB>$N%U%#%k%?$,$5$i$K$=$N=PNO$r=hM}$G$-$k$h$&$K$7$^$9!#(B
- </p>
-
- </section>
- <section id="input"><title>$BF~NO$N?-D%(B</title>
- <p><module>mod_deflate</module> $B%b%8%e!<%k$O!"(Bgzip
- $B$G05=L$5$l$?%j%/%(%9%HK\BN$r?-D%$9$k%U%#%k%?$bDs6!$7$F$$$^$9!#(B
- $B$3$N5!G=$rM-8z$K$9$k$K$O!"(B<directive module="core">SetInputFilter</directive>
- $B$+(B <directive module="mod_mime">AddInputFilter</directive> $B$r;HMQ$7$F!"(B
- <code>DEFLATE</code> $B%U%#%k%?$rF~NO%U%#%k%?%A%'%$%s$KAH$_9~$_$^$9!#(B
- $BNc$($P<!$N$h$&$K$J$j$^$9!#(B</p>
-
- <example>
- &lt;Location /dav-area&gt;<br />
- <indent>
- SetInputFilter DEFLATE<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>$B$3$N@_Dj$G$"$l$P!"(B<code>Content-Encoding: gzip</code>
- $B%X%C%@$r4^$`%j%/%(%9%H$,Mh$k$H!"K\BN$O<+F0E*$K?-D%$5$l$^$9!#(B
- gzip $B%j%/%(%9%HK\BN$rAw?.$9$k%V%i%&%6$O$"$^$j$"$j$^$;$s!#(B
- $B$7$+$7!"Nc$($P(B <a href="http://www.webdav.org">WebDAV</a>
- $B%/%i%$%"%s%H$N4v$D$+$J$I!"FCJL$J%"%W%j%1!<%7%g%s$G%j%/%(%9%H$N(B
- $B05=L$r<B:]$K%5%]!<%H$7$F$$$k$b$N$b$"$j$^$9!#(B</p>
-
- <note type="warning"><title>Content-Length $B$K4X$9$kCm0U(B</title>
- <p>$B%j%/%(%9%HK\BN$=$l<+BN$rI>2A$9$k>l9g$O!"(B<em><code>Content-Length</code>
- $B%X%C%@$r?.MQ$7$J$$$G$/$@$5$$(B</em>$B!#(BContent-Length $B%X%C%@$O!"(B
- $B%/%i%$%"%s%H$+$iAw?.$5$l$k%G!<%?$ND9$5$rH?1G$7$F$$$k$N$G$"$C$F!"(B
- $B?-D%$5$l$?%G!<%?%9%H%j!<%`$N(B<em>$B%P%$%H%+%&%s%H$G$O$"$j$^$;$s(B</em>$B!#(B</p>
- </note>
- </section>
-</section>
-
-<section id="proxies"><title>Proxy $B%5!<%P$G$N07$$(B</title>
-
- <p><module>mod_deflate</module> $B%b%8%e!<%k$O(B <code>Vary: Accept-Encoding</code>
- HTTP $B1~Ez%X%C%@$rAw?.$7$F!"E,@Z$J(B <code>Accept-Encoding</code>
- $B%j%/%(%9%H%X%C%@$rAw?.$9$k%/%i%$%"%s%H$KBP$7$F$N$_!"(B
- $B%W%m%/%7%5!<%P$,%-%c%C%7%e$7$?1~Ez$rAw?.$9$k$h$&$KCm0U$r4-5/$7$^$9!#(B
- $B$3$N$h$&$K$7$F!"05=L$r07$&$3$H$N$G$-$J$$%/%i%$%"%s%H$K(B
- $B05=L$5$l$?FbMF$,Aw$i$l$k$3$H$N$J$$$h$&$K$7$^$9!#(B</p>
-
- <p>$B$b$7FCJL$K2?$+$K0MB8$7$F=|30$7$?$$>l9g!"Nc$($P(B <code>User-Agent</code>
- $B%X%C%@$J$I$K0MB8$7$F$$$k>l9g!"<jF0$G(B <code>Vary</code> $B%X%C%@$r@_Dj$7$F!"(B
- $BDI2C$N@)8B$K$D$$$F%W%m%/%7%5!<%P$KCm0U$r9T$J$&I,MW$,$"$j$^$9!#(B
- $BNc$($P(B <code>User-Agent</code> $B$K0MB8$7$F(B <code>DEFLATE</code>
- $B$rDI2C$9$kE57?E*$J@_Dj$G$O!"<!$N$h$&$KDI2C$9$k$3$H$K$J$j$^$9!#(B</p>
-
- <example>
- Header append Vary User-Agent
- </example>
-
- <p>$B%j%/%(%9%H%X%C%@0J30$N>pJs(B (<em>$BNc$($P(B</em> HTTP $B%P!<%8%g%s(B)
- $B$K0MB8$7$F05=L$9$k$+$I$&$+7h$a$k>l9g!"(B
- <code>Vary</code> $B%X%C%@$r(B <code>*</code> $B$K@_Dj$9$kI,MW$,$"$j$^$9!#(B
- $B$3$N$h$&$K$9$k$H!";EMM$K=`5r$7$?%W%m%/%7$O%-%c%C%7%e$rA4$/9T$J$o$J$/$J$j$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- Header set Vary *
- </example>
-</section>
-
-<directivesynopsis>
-<name>DeflateFilterNote</name>
-<description>$B%m%.%s%0MQ$K05=LHf$r%a%b$KDI2C(B</description>
-<syntax>DeflateFilterNote [<var>type</var>] <var>notename</var></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility><var>type</var> is available since Apache 2.0.45</compatibility>
-
-<usage>
- <p><directive>DeflateFilterNote</directive> $B%G%#%l%/%F%#%V$O(B
- $B05=LHf$K4X$9$k%a%b$,%j%/%(%9%H$KIU2C$5$l$k$3$H$r;XDj$7$^$9!#(B
- $B%a%b(B (note) $B$NL>A0$O%G%#%l%/%F%#%V$K;XDj$5$l$?CM$G$9!#(B
- $B%a%b$O(B<a href="../logs.html#accesslog">$B%"%/%;%9%m%0(B</a>$B$K(B
- $BCM$r5-O?$7!"E}7W$r<h$kL\E*$K$b;H$($^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </example>
-
- <p>$B%m%0$+$i$b$C$H@:L)$JCM$rCj=P$7$?$$>l9g$O!"(B<var>type</var>
- $B0z?t$r;HMQ$7$F!"%G!<%?%?%$%W$r%m%0$N%a%b$H$7$F;D$9$h$&$K;XDj$G$-$^$9!#(B
- <var>type</var> $B$O<!$N$&$A$N0l$D$G$9!#(B</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>$B%U%#%k%?$NF~NO%9%H%j!<%`$N%P%$%H%+%&%s%H$r%a%b$KJ]B8$9$k!#(B</dd>
-
- <dt><code>Output</code></dt>
- <dd>$B%U%#%k%?$N=PNO%9%H%j!<%`$N%P%$%H%+%&%s%H$r%a%b$KJ]B8$9$k!#(B</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>$B05=LN((B (<code>$B=PNO(B / $BF~NO(B * 100</code>) $B$r%a%b$KJ]B8$9$k!#(B
- <var>type</var> $B0z?t$r>JN,$7$?>l9g$O!"$3$l$,%G%U%)%k%H$H$J$j$^$9!#(B</dd>
- </dl>
-
- <p>$B$^$H$a$k$H!"<!$N$h$&$K%m%0$r<h$k$3$H$K$J$k$G$7$g$&!#(B</p>
-
- <example><title>$B@:L)$J%m%0:N<h(B</title>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </example>
-</usage>
-<seealso><module>mod_log_config</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateBufferSize</name>
-<description>zlib $B$,0lEY$K05=L$9$k2t$NBg$-$5(B</description>
-<syntax>DeflateBufferSize <var>value</var></syntax>
-<default>DeflateBufferSize 8096</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
- <p><directive>DeflateBufferSize</directive> $B%G%#%l%/%F%#%V$O(B
- zlib $B$,0lEY$K05=L$9$k2t$NBg$-$5$r%P%$%HC10L$G;XDj$7$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateWindowSize</name>
-<description>Zlib $B$N05=LMQ%&%#%s%I%&$NBg$-$5(B</description>
-<syntax>DeflateWindowSize <var>value</var></syntax>
-<default>DeflateWindowSize 15</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
- <p><directive>DeflateWindowSize</directive> $B%G%#%l%/%F%#%V$O(B
- zlib $B$N05=LMQ%&%#%s%I%&(B ($BLuCm(B: zlib $B$G;HMQ$5$l$kMzNr%P%C%U%!(B)
- $B$NBg$-$5$r;XDj$7$^$9(B (1 $B$+$i(B 15 $B$N4V$NCM(B)$B!#(B
- $B0lHLE*$KBg$-$J%&%#%s%I%&%5%$%:$r;HMQ$9$k$H05=LN($,8~>e$7$^$9!#(B
- ($BLuCm(B: 2 $B$rDl$H$9$kBP?t$NCM$K$J$j$^$9!#(B
- 8 $B$+$i(B 15 $B$K$9$k$N$,NI$$$G$7$g$&!#(B)</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateMemLevel</name>
-<description>zlib $B$,05=L$K;H$&%a%b%j$N%l%Y%k$r;XDj(B</description>
-<syntax>DeflateMemLevel <var>value</var></syntax>
-<default>DeflateMemLevel 9</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
- <p><directive>DeflateMemLevel</directive> $B%G%#%l%/%F%#%V$O(B
- zlib $B$,05=L$K;H$&%a%b%j$N%l%Y%k$r@_Dj$7$^$9(B (1 $B$+$i(B 9 $B$N4V$NCM(B)$B!#(B
- ($BLuCm(B: 2 $B$rDl$H$9$kBP?t$NCM$K$J$j$^$9!#(B
- 8 $BDxEY$,NI$$$G$7$g$&!#(B)</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateCompressionLevel</name>
-<description>$B=PNO$KBP$7$F9T$J$&05=L$NDxEY(B</description>
-<syntax>DeflateCompressionLevel <var>value</var></syntax>
-<default>Zlib $B$N%G%U%)%k%H(B</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>This directive is available since Apache 2.0.45</compatibility>
-
-<usage>
- <p><directive>DeflateCompressionLevel</directive> $B%G%#%l%/%F%#%V$O(B
- $B05=L$NDxEY$r@_Dj$7$^$9!#Bg$-$JCM$G$O!"$h$j05=L$,9T$J$o$l$^$9$,!"(B
- CPU $B;q8;$r>CHq$7$^$9!#(B</p>
- <p>$BCM$O(B 1 ($BDc05=L(B) $B$+$i(B 9 ($B9b05=L(B) $B$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_deflate.xml.ko b/docs/manual/mod/mod_deflate.xml.ko
deleted file mode 100644
index 69837e1c37..0000000000
--- a/docs/manual/mod/mod_deflate.xml.ko
+++ /dev/null
@@ -1,345 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.24 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_deflate.xml.meta">
-
-<name>mod_deflate</name>
-<description>³»¿ëÀ» Ŭ¶óÀ̾ðÆ®·Î º¸³»±â Àü¿¡ ¾ÐÃàÇÑ´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_deflate.c</sourcefile>
-<identifier>deflate_module</identifier>
-
-<summary>
- <p><module>mod_deflate</module> ¸ðµâÀº ¼­¹öÀÇ Ãâ·ÂÀ» ³×Æ®¿÷À¸·Î
- Ŭ¶óÀ̾ðÆ®¿¡ º¸³»±â Àü¿¡ ¾ÐÃàÇÏ´Â <code>DEFLATE</code> Ãâ·ÂÇÊÅ͸¦
- Á¦°øÇÑ´Ù.</p>
-</summary>
-<seealso><a href="../filter.html">ÇÊÅÍ</a></seealso>
-
-<section id="recommended"><title>°ßº» ¼³Á¤</title>
- <p>±ÞÇÑ »ç¶÷À» À§ÇÑ °ßº» ¼³Á¤ÀÌ´Ù.</p>
-
- <example><title>ÀϺΠtype¸¸ ¾ÐÃà</title>
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- </example>
-
- <p>¾Æ·¡ ¼³Á¤Àº ¿ä¾àÇÏ¿´Áö¸¸ ±×·¡µµ º¹ÀâÇÏ´Ù. ¼³Á¤À» ¿ÏÀüÈ÷
- ÀÌÇØÇÑ ÈÄ »ç¿ëÇ϶ó.</p>
-
- <example><title>À̹ÌÁö¸¦ Á¦¿ÜÇÑ ¸ðµç °ÍÀ» ¾ÐÃà</title>
- &lt;Location /&gt;<br />
- <indent>
- # ÇÊÅ͸¦ Ãß°¡ÇÑ´Ù<br />
- SetOutputFilter DEFLATE<br />
- <br />
- # Netscape 4.x¿¡ ¹®Á¦°¡ ÀÖ´Ù...<br />
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- <br />
- # Netscape 4.06-4.08¿¡ ´õ ¹®Á¦°¡ ÀÖ´Ù<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- <br />
- # MSIEÀº Netscape¶ó°í ÀÚ½ÅÀ» ¾Ë¸®Áö¸¸, ¹®Á¦°¡ ¾ø´Ù<br />
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
- <br />
- # ÁÖÀÇ: ¾ÆÆÄÄ¡ 2.0.48±îÁö mod_setenvifÀÇ ¹ö±×¶§¹®¿¡<br />
- # À§ÀÇ Á¤±ÔÇ¥Çö½ÄÀº µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ¿øÇÏ´Â È¿°ú¸¦<br />
- # ¾ò±âÀ§ÇØ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¿© »ç¿ëÇÑ´Ù:<br />
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
- <br />
- # À̹ÌÁö¸¦ ¾ÐÃàÇÏÁö ¾Ê´Â´Ù<br />
- SetEnvIfNoCase Request_URI \<br />
- <indent>
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
- </indent>
- <br />
- # ÇÁ·Ï½Ã°¡ À߸øµÈ ³»¿ëÀ» Àü´ÞÇÏÁö¾Êµµ·Ï ÇÑ´Ù<br />
- Header append Vary User-Agent env=!dont-vary<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
-</section>
-
-<section id="enable"><title>¾ÐÃàÇϱâ</title>
-
- <section id="output"><title>Ãâ·Â ¾ÐÃà</title>
- <p><code>DEFLATE</code> <a href="../filter.html">ÇÊÅÍ</a>°¡
- ¾ÐÃàÀ» ÇÑ´Ù. ´ÙÀ½ Áö½Ã¾î´Â Áö½Ã¾î°¡ ÀÖ´Â À§Ä¡ÀÇ ¹®¼­¸¦
- ¾ÐÃàÇÑ´Ù:</p>
-
- <example>
- SetOutputFilter DEFLATE
- </example>
-
- <p>¸ðµç ³»¿ëÀ» ¾ÐÃàÇϸé ó¸®ÇÏÁö ¸øÇÏ´Â ºê¶ó¿ìÀú°¡ Àֱ⶧¹®¿¡
- html ÆÄÀϸ¸À» ¾ÐÃàÇϱâÀ§ÇØ (¾Æ·¡ Âü°í)
- <code>gzip-only-text/html</code>À» <code>1</code>·Î ¼³Á¤ÇÒÁöµµ
- ¸ð¸¥´Ù. À̸¦ <em><code>1</code>ÀÌ ¾Æ´Ñ °ªÀ¸·Î</em> ¼³Á¤Çϸé
- ¹«½ÃÇÑ´Ù.</p>
-
- <p>º¸Åë Ưº°ÇÑ MIME type¸¸ ¾ÐÃàÇÏ·Á¸é <directive module="core"
- >AddOutputFilterByType</directive> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- ´ÙÀ½ ¼³Á¤Àº html ÆÄÀϸ¸À» ¾ÐÃàÇÑ´Ù:</p>
-
- <example>
- &lt;Directory "/your-server-root/manual"&gt;<br />
- <indent>
- AddOutputFilterByType DEFLATE text/html<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <p>¾ÐÃàÇÑ ÆÄÀÏÀ» ó¸®ÇÏÁö ¸øÇÏ´Â ºê¶ó¿ìÀú¿¡°Ô´Â ¾ÐÃàÇÏÁö¾Ê°í
- º¸³»±æÀ§ÇØ <directive module="mod_setenvif"
- >BrowserMatch</directive> Áö½Ã¾î¿¡ <code>no-gzip</code>À»
- ¼³Á¤ÇÑ´Ù. ÃÖÀûÀÇ °á°ú¸¦ ¾ò±âÀ§ÇØ <code>no-gzip</code>°ú
- <code>gzip-only-text/html</code>À» °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ÀÌ °æ¿ì ÀüÀÚ°¡ ÈÄÀÚ¸¦ ¹«½ÃÇÑ´Ù. À§ ÀýÀÇ <a
- href="#recommended">¼³Á¤ ¿¹Á¦</a> ÀϺθ¦ »ìÆ캸ÀÚ:</p>
-
- <example>
- BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
- BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- </example>
-
- <p>¸ÕÀú <code>User-Agent</code> ¹®ÀÚ¿­À» º¸°í Netscape
- Navigator ¹öÀü 4.xÀÎÁö °Ë»çÇÑ´Ù. ÀÌ ¹öÀüÀº <code>text/html</code>ÀÌ
- ¾Æ´Ñ typeÀÇ ¾ÐÃàÀ» ó¸®ÇÏÁö ¸øÇÑ´Ù. ¹öÀü 4.06, 4.07, 4.08Àº
- html ÆÄÀÏ ¾ÐÃàÀ» ó¸®Çϴ´뵵 ¹®Á¦°¡ ÀÖ´Ù. ±×·¡¼­ ¿ì¸®´Â
- ÀÌ °æ¿ì deflate ÇÊÅ͸¦ ¿ÏÀüÈ÷ »ç¿ëÇÏÁö¾Ê´Â´Ù.</p>
-
- <p>¼¼¹ø° <directive module="mod_setenvif">BrowserMatch</directive>
- Áö½Ã¾î´Â Microsoft Internet Explorer°¡ ÀÚ½ÅÀ» "Mozilla/4"·Î
- ¾Ë¸®Áö¸¸ ¾ÐÃàµÈ ¿äûÀ» ó¸®ÇÒ ¼ö Àֱ⶧¹®¿¡ user agent
- ÃßÃøÀ» ¼öÁ¤ÇÑ´Ù. <code>User-Agent</code> Çì´õ¿¡¼­ "MSIE"
- (<code>\b</code>´Â "´Ü¾î °æ°è"¸¦ ¶æÇÑ´Ù) ¹®ÀÚ¿­À» ¹ß°ßÇϸé
- ¾Õ¿¡¼­ ¼³Á¤ÇÑ Á¦¾àÀ» Ǭ´Ù.</p>
-
- <note><title>ÁÖÀÇ</title>
- <code>DEFLATE</code> ÇÊÅÍ´Â Ç×»ó PHP³ª SSI¿Í °°Àº RESOURCE
- ÇÊÅÍ µÚ¿¡ µé¾î°£´Ù. ¶Ç, ³»ºÎ ÇÏÀ§¿äû(subrequest)¿¡ ¿µÇâÀ»
- ÁÖÁö ¾Ê´Â´Ù.
- </note>
- <note><title>ÁÖÀÇ</title>
- <directive module="core">SetEnv</directive>·Î
- <code>force-gzip</code> ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ¸é ºê¶ó¿ìÀúÀÇ
- accept-encoding ¼³Á¤À» ¹«½ÃÇÏ°í ¾ÐÃàµÈ °á°ú¸¦ º¸³½´Ù.
- </note>
-
- </section>
- <section id="inflate"><title>Ãâ·Â ¾ÐÃàÇ®±â</title>
- <p><module>mod_deflate</module> ¸ðµâÀº gzipÀ¸·Î ¾ÐÃàµÈ
- ÀÀ´ä ³»¿ëÀ» Ǫ´Â ÇÊÅ͵µ Á¦°øÇÑ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é
- ´ÙÀ½°ú °°ÀÌ <directive
- module="core">SetOutputFilter</directive>³ª <directive
- module="mod_mime">AddOutputFilter</directive>¸¦ »ç¿ëÇÏ¿©
- Ãâ·ÂÇÊÅͼø¼­¿¡ <code>INFLATE</code> ÇÊÅ͸¦ Ãß°¡ÇÑ´Ù.</p>
-
- <example>
- &lt;Location /dav-area&gt;<br />
- <indent>
- ProxyPass http://example.com/<br />
- SetOutputFilter INFLATE<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>ÀÌ ¿¹Á¦´Â example.comÀÌ º¸³½ gzipÀ¸·Î ¾ÐÃàµÈ °á°úÀÇ
- ¾ÐÃàÀ» Ç®¾î¼­, ´Ù¸¥ ÇÊÅÍ°¡ ´õ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
- </p>
-
- </section>
- <section id="input"><title>ÀÔ·Â ¾ÐÃàÇ®±â</title>
- <p><module>mod_deflate</module> ¸ðµâÀº gzipÀ¸·Î ¾ÐÃàµÈ ¿äû
- ³»¿ëÀ» Ǫ´Â ÇÊÅ͵µ Á¦°øÇÑ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½°ú
- °°ÀÌ <directive module="core">SetInputFilter</directive>³ª
- <directive module="mod_mime">AddInputFilter</directive>¸¦
- »ç¿ëÇÏ¿© ÀÔ·ÂÇÊÅͼø¼­¿¡ <code>DEFLATE</code> ÇÊÅ͸¦
- Ãß°¡ÇÑ´Ù.</p>
-
- <example>
- &lt;Location /dav-area&gt;<br />
- <indent>
- SetInputFilter DEFLATE<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>¿äû¿¡ <code>Content-Encoding: gzip</code> Çì´õ°¡ ÀÖ´Ù¸é
- ÀÚµ¿À¸·Î ¾ÐÃàµÈ ³»¿ëÀ» Ǭ´Ù. gzip ¿äûÀ» ÇÒ ¼ö ÀÖ´Â
- ºê¶ó¿ìÀú´Â µå¹°´Ù. ±×·¯³ª ¾î¶² <a
- href="http://www.webdav.org">WebDAV</a> Ŭ¶óÀ̾ðÆ®¿Í °°Àº
- Ưº°ÇÑ ÇÁ·Î±×·¥Àº ¿äû ¾ÐÃàÀ» Áö¿øÇÑ´Ù.</p>
-
- <note type="warning"><title>Content-Length¿¡ ´ëÇÑ ÁÖÀÇ</title>
- <p>¿äû ³»¿ëÀ» Á÷Á¢ »ìÆ캻´Ù¸é, <em><code>Content-Length</code>
- Çì´õ¸¦ ¹ÏÁö¸¶¶ó!</em> Content-Length Çì´õ´Â Ŭ¶óÀ̾ðÆ®°¡
- º¸³½ ³»¿ëÀÇ ±æÀÌÀÌÁö, ¾ÐÃàÀ» Ǭ °á°úÀÇ ¹ÙÀÌÆ®¼ö°¡
- <em>¾Æ´Ï´Ù</em>.</p>
- </note>
- </section>
-</section>
-
-<section id="proxies"><title>ÇÁ·Ï½Ã ¼­¹ö ´Ù·ç±â</title>
-
- <p><module>mod_deflate</module> ¸ðµâÀº ÇÁ·Ï½Ã°¡ ÀÚ½ÅÀÌ Ä³½¬ÇÑ
- ÀÀ´äÀ» ÀûÀýÇÑ <code>Accept-Encoding</code> ¿äû Çì´õ¸¦ º¸³½
- Ŭ¶óÀ̾ðÆ®¿¡°Ô¸¸ º¸³»µµ·Ï <code>Vary:
- Accept-Encoding</code> HTTP ÀÀ´ä Çì´õ¸¦ Ãß°¡ÇÑ´Ù. ±×·¡¼­
- ¾ÐÃàµÈ ³»¿ëÀ» ÀÌÇØÇÒ ¼ö ¾ø´Â Ŭ¶óÀ̾ðÆ®¿¡ ¾ÐÃàµÈ ³»¿ëÀ»
- º¸³»Áö¾Êµµ·Ï ÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, <code>User-Agent</code> Çì´õ µî¿¡ µû¶ó Ưº°È÷
- ÇÊÅÍ Àû¿ëÀ» Ãë¼ÒÇÑ´Ù¸é, ÇÁ·Ï½Ã¿¡°Ô ÀÌ·¯ÇÑ Á¦ÇÑÀ» ¾Ë·ÁÁÖ±âÀ§ÇØ
- Á÷Á¢ <code>Vary</code> Çì´õ¿¡ Ãß°¡ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î,
- ¼³Á¤ÀÌ <code>User-Agent</code>¿¡ µû¶ó <code>DEFLATE</code>
- ÇÊÅ͸¦ Ãß°¡ÇÑ´Ù¸é ´ÙÀ½À» »ç¿ëÇÑ´Ù:</p>
-
- <example>
- Header append Vary User-Agent
- </example>
-
- <p>¿äû Çì´õ¿ÜÀÇ ´Ù¸¥ Á¤º¸¿¡ (<em>¿¹¸¦ µé¾î</em>, HTTP ¹öÀü)
- µû¶ó ¾ÐÃà ¿©ºÎ°¡ °áÁ¤µÈ´Ù¸é, <code>Vary</code> Çì´õ°ªÀ»
- <code>*</code>·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±×·¯¸é Ç¥ÁØÀ» µû¸£´Â ÇÁ·Ï½Ã´Â
- ij½¬¸¦ ÇÏÁö ¾Ê°Ô µÈ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- Header set Vary *
- </example>
-</section>
-
-<directivesynopsis>
-<name>DeflateFilterNote</name>
-<description>¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù</description>
-<syntax>DeflateFilterNote [<var>type</var>] <var>notename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility><var>type</var> is available since Apache 2.0.45</compatibility>
-
-<usage>
- <p><directive>DeflateFilterNote</directive> Áö½Ã¾î´Â ¿äûÀÇ
- ¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÏ´Â ±âÈ£¸¦ ÁöÁ¤ÇÑ´Ù. ±âÈ£ À̸§Àº Áö½Ã¾î·Î
- ÁöÁ¤ÇÑ °ªÀÌ´Ù. Åë°è¸¦ À§ÇØ <a href="../logs.html#accesslog">Á¢±Ù
- ·Î±×</a>¿¡¼­ ±âÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- DeflateFilterNote ratio<br />
- <br />
- LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
- CustomLog logs/deflate_log deflate
- </example>
-
- <p>·Î±×¿¡¼­ ´õ Á¤È®ÇÑ °ªÀ» ÃßÃâÇÏ·Á¸é <var>type</var> ¾Æ±Ô¸ÕÆ®·Î
- ±â·ÏÇÒ ÀڷḦ ¼±ÅÃÇÑ´Ù. <var>type</var>´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <dl>
- <dt><code>Input</code></dt>
- <dd>ÇÊÅÍ ÀԷ½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù.</dd>
-
- <dt><code>Output</code></dt>
- <dd>ÇÊÅÍ Ãâ·Â½ºÆ®¸²ÀÇ ¹ÙÀÌÆ®¼ö¸¦ ÀúÀåÇÑ´Ù..</dd>
-
- <dt><code>Ratio</code></dt>
- <dd>¾ÐÃà·üÀ» (<code>output/input * 100</code>) ÀúÀåÇÑ´Ù.
- <var>type</var> ¾Æ±Ô¸ÕÆ®¸¦ »ý·«ÇÏ¸é »ç¿ëÇÏ´Â ±âº»°ªÀÌ´Ù.</dd>
- </dl>
-
- <p>±×·¡¼­ ÀÌ·¸°Ô ·Î±×¿¡ ±â·ÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example><title>Á¤¹ÐÇÑ ·Î±×</title>
- DeflateFilterNote Input instream<br />
- DeflateFilterNote Output outstream<br />
- DeflateFilterNote Ratio ratio<br />
- <br />
- LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br />
- CustomLog logs/deflate_log deflate
- </example>
-</usage>
-<seealso><module>mod_log_config</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateBufferSize</name>
-<description>zlibÀÌ Çѹø¿¡ ¾ÐÃàÇÒ Å©±â</description>
-<syntax>DeflateBufferSize <var>value</var></syntax>
-<default>DeflateBufferSize 8096</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>DeflateBufferSize</directive> Áö½Ã¾î´Â zlibÀÌ
- Çѹø¿¡ ¾ÐÃàÇÒ ¹ÙÀÌÆ®¼ö¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateWindowSize</name>
-<description>Zlib ¾ÐÃà window size</description>
-<syntax>DeflateWindowSize <var>value</var></syntax>
-<default>DeflateWindowSize 15</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>DeflateWindowSize</directive> Áö½Ã¾î´Â zlib
- ¾ÐÃà window size¸¦ (1°ú 15 »çÀÌÀÇ °ª) ÁöÁ¤ÇÑ´Ù. ÀϹÝÀûÀ¸·Î
- window size°¡ Ŭ¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-
-<name>DeflateMemLevel</name>
-<description>zlibÀÌ ¾ÐÃàÇÒ¶§ »ç¿ëÇÏ´Â ¸Þ¸ð¸®·®</description>
-<syntax>DeflateMemLevel <var>value</var></syntax>
-<default>DeflateMemLevel 9</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>DeflateMemLevel</directive> Áö½Ã¾î´Â zlibÀÌ
- ¾ÐÃàÇÒ¶§ ¾ó¸¶¸¸Å­ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒÁö °áÁ¤ÇÑ´Ù. (1°ú 9 »çÀÌÀÇ
- °ª)</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateCompressionLevel</name>
-<description>Ãâ·ÂÀ» ¾î´ÀÁ¤µµ ¾ÐÃàÇϴ°¡</description>
-<syntax>DeflateCompressionLevel <var>value</var></syntax>
-<default>Zlib's default</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>This directive is available since Apache 2.0.45</compatibility>
-
-<usage>
- <p><directive>DeflateCompressionLevel</directive> Áö½Ã¾î´Â
- »ç¿ëÇÒ ¾ÐÃà¼öÁØÀ» ¼±ÅÃÇÑ´Ù. °ªÀÌ Å¬¼ö·Ï ¾ÐÃà·üÀÌ Áõ°¡ÇÏÁö¸¸,
- CPU¸¦ ´õ ¸¹ÀÌ »ç¿ëÇÑ´Ù.</p>
- <p>(°¡Àå ´ú ¾ÐÃà) 1°ú (°¡Àå ¸¹ÀÌ ¾ÐÃà) 9 »çÀÌÀÇ °ªÀ» ÁöÁ¤ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_deflate.xml.meta b/docs/manual/mod/mod_deflate.xml.meta
deleted file mode 100644
index 8486f1ffda..0000000000
--- a/docs/manual/mod/mod_deflate.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_deflate</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_dir.html b/docs/manual/mod/mod_dir.html
deleted file mode 100644
index be6c14c870..0000000000
--- a/docs/manual/mod/mod_dir.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_dir.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_dir.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_dir.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_dir.html.en b/docs/manual/mod/mod_dir.html.en
deleted file mode 100644
index 5e9463f543..0000000000
--- a/docs/manual/mod/mod_dir.html.en
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dir - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_dir</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dir.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides for "trailing slash" redirects and
- serving directory index files</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>dir_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_dir.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>The index of a directory can come from one of two sources:</p>
-
- <ul>
- <li>A file written by the user, typically called
- <code>index.html</code>. The <code class="directive"><a href="#directoryindex">DirectoryIndex</a></code> directive sets the
- name of this file. This is controlled by
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>.</li>
-
- <li>Otherwise, a listing generated by the server. This is
- provided by <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>.</li>
- </ul>
- <p>The two functions are separated so that you can completely
- remove (or replace) automatic index generation should you want
- to.</p>
-
- <p>A "trailing slash" redirect is issued when the server
- receives a request for a URL
- <code>http://servername/foo/dirname</code> where
- <code>dirname</code> is a directory. Directories require a
- trailing slash, so <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> issues a redirect to
- <code>http://servername/foo/dirname/</code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#directoryindex">DirectoryIndex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directoryslash">DirectorySlash</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectoryIndex" id="DirectoryIndex">DirectoryIndex</a> <a name="directoryindex" id="directoryindex">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>List of resources to look for when the client requests
-a directory</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DirectoryIndex index.html</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dir</td></tr>
-</table>
- <p>The <code class="directive">DirectoryIndex</code> directive sets the
- list of resources to look for, when the client requests an index
- of the directory by specifying a / at the end of the directory
- name. <var>Local-url</var> is the (%-encoded) URL of a document on
- the server relative to the requested directory; it is usually the
- name of a file in the directory. Several URLs may be given, in
- which case the server will return the first one that it finds. If
- none of the resources exist and the <code>Indexes</code> option is
- set, the server will generate its own listing of the
- directory.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- DirectoryIndex index.html
- </code></p></div>
-
- <p>then a request for <code>http://myserver/docs/</code> would
- return <code>http://myserver/docs/index.html</code> if it
- exists, or would list the directory if it did not.</p>
-
- <p>Note that the documents do not need to be relative to the
- directory;</p>
-
- <div class="example"><p><code>
- DirectoryIndex index.html index.txt /cgi-bin/index.pl
- </code></p></div>
-
- <p>would cause the CGI script <code>/cgi-bin/index.pl</code> to be
- executed if neither <code>index.html</code> or <code>index.txt</code>
- existed in a directory.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectorySlash" id="DirectorySlash">DirectorySlash</a> <a name="directoryslash" id="directoryslash">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Toggle trailing slash redirects on or off</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DirectorySlash On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DirectorySlash On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_dir</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.1 and later</td></tr>
-</table>
- <p>The <code class="directive">DirectorySlash</code> directive determines, whether
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> should fixup URLs pointing to a directory or
- not.</p>
-
- <p>Typically if a user requests a resource without a trailing slash, which
- points to a directory, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> redirects him to the same
- ressource, but <em>with</em> trailing slash for some good reasons:</p>
-
- <ul>
- <li>The user is finally requesting the canonical URL of the resource</li>
- <li><code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> works correctly. Since it doesn't emit
- the path in the link, it would point to the wrong path.</li>
- <li><code class="directive"><a href="#directoryindex">DirectoryIndex</a></code> will be evaluated
- <em>only</em> for directories requested with trailing slash.</li>
- <li>Relative URL references inside html pages will work correctly.</li>
- </ul>
-
- <p>Well, if you don't want this effect <em>and</em> the reasons above don't
- apply to you, you can turn off the redirect with:</p>
-
- <div class="example"><p><code>
- # see security warning below!<br />
- &lt;Location /some/path&gt;<br />
- <span class="indent">
- DirectorySlash Off<br />
- SetHandler some-handler<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="warning"><h3>Security Warning</h3>
- <p>Turning off the trailing slash redirect may result in an information
- disclosure. Consider a situation where <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> is
- active (<code>Options +Indexes</code>) and <code class="directive"><a href="#directoryindex">DirectoryIndex</a></code> is set to a valid resource (say,
- <code>index.html</code>) and there's no other special handler defined for
- that URL. In this case a request with a trailing slash would show the
- <code>index.html</code> file. <strong>But a request without trailing slash
- would list the directory contents</strong>.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dir.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dir.html.ja.euc-jp b/docs/manual/mod/mod_dir.html.ja.euc-jp
deleted file mode 100644
index 3c330ba5f2..0000000000
--- a/docs/manual/mod/mod_dir.html.ja.euc-jp
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dir - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_dir</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dir.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¡ÖºÇ¸å¤Î¥¹¥é¥Ã¥·¥å¡×¤Î¥ê¥À¥¤¥ì¥¯¥È¤È¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î
-¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤ò°·¤¦µ¡Ç½¤òÄ󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>dir_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_dir.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¡¢¼¡¤ÎÆó¤Ä¤Î¤¦¤Á¤É¤Á¤é¤«¤¬ÍøÍѤµ¤ì¤Þ¤¹:</p>
-
- <ul>
- <li>°ì¤ÄÌܤϡ¢¥æ¡¼¥¶¤¬ºîÀ®¤·¤¿¥Õ¥¡¥¤¥ë¤òÍѤ¤¤ë¤â¤Î¤Ç¡¢Ä̾ï
- <code>index.html</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë̾¤ò»È¤¤¤Þ¤¹¡£¤³¤Î¥Õ¥¡¥¤¥ë̾¤Ï¡¢
- <code class="directive"><a href="#directoryindex">DirectoryIndex</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- »ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤Îµ¡Ç½¤Ï <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
- ¥â¥¸¥å¡¼¥ë¤ÇÄ󶡤µ¤ì¤Þ¤¹¡£</li>
-
- <li>¤â¤¦°ì¤Ä¤ÎÊýË¡¤Ï¡¢
- ¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¥ê¥¹¥È¤òÍѤ¤¤ë¾ì¹ç¤Ç¤¹¡£
- ¤³¤Îµ¡Ç½¤Ï¡¢<code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ë¤è¤êÄ󶡤µ¤ì¤Þ¤¹¡£</li>
- </ul>
-
- <p>¼«Æ°Åª¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹À¸À®µ¡Ç½¤òºï½ü (¤â¤·¤¯¤Ï¸ò´¹)
- ¤Ç¤­¤ë¤è¤¦¤Ë¡¢¤³¤ÎÆó¤Ä¤Îµ¡Ç½¤ÏʬΥ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¤Ê¤ª <code>http://servername/foo/dirname</code> ¤È¤¤¤¦ URL
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤¬¤¢¤Ã¤¿ºÝ¤Ë¡¢<code>dirname</code>
- ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê¤¬¤¢¤ì¤Ð¡¢¡ÖºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å¤ò¤Ä¤±¤¿·Á¡×¤Î URL
- ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷½Ð¤·¤Þ¤¹¡£
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¢¥¯¥»¥¹¤Ï¥¹¥é¥Ã¥·¥å¤Ç½ª¤ï¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¡¢
- <code>mod_dir</code> ¤Ï¡¢<code>http://servername/foo/dirname/</code>
- ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷½Ð¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#directoryindex">DirectoryIndex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directoryslash">DirectorySlash</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectoryIndex" id="DirectoryIndex">DirectoryIndex</a> <a name="directoryindex" id="directoryindex">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤¬¥Ç¥£¥ì¥¯¥È¥ê¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¤È¤­¤ËÄ´¤Ù¤ë
-¥ê¥½¡¼¥¹¤Î¥ê¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DirectoryIndex index.html</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_dir</td></tr>
-</table>
- <p>
- ¥¯¥é¥¤¥¢¥ó¥È¤¬¡¢¥Ç¥£¥ì¥¯¥È¥ê̾¤ÎºÇ¸å¤Ë¡Ö/¡×
- ¤ò»ØÄꤷ¤Æ¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÍ׵᤹¤ë¾ì¹ç¤Ëõ¤¹¥ê¥½¡¼¥¹¤Î¥ê¥¹¥È¤ò
- <code class="directive">DirectoryIndex</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤Þ¤¹¡£
- <var>Local-url</var>
- ¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ËÂбþ¤¹¤ë¡¢¥µ¡¼¥Ð¾å¤Î¥É¥­¥å¥á¥ó¥È¤Î
- (% ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿) URL ¤Ç¡¢ÉáÄ̤ϥǥ£¥ì¥¯¥È¥êÃæ¤Î¥Õ¥¡¥¤¥ë¤Î̾Á°¤Ç¤¹¡£
- Ê£¿ô¤Î URL ¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
- ¤½¤ì¤é¤¬¸«¤Ä¤«¤é¤º¡¢<code>Indexes</code>
- ¥ª¥×¥·¥ç¥ó¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¥ê¥¹¥È¤òÀ¸À®¤·¤Þ¤¹¡£
- </p>
-
- <div class="example"><h3>Îã</h3><p><code>
- DirectoryIndex index.html
- </code></p></div>
-
- <p><code>http://myserver/docs/</code> ¤Ø¤Î¥¢¥¯¥»¥¹¤¬¤¢¤ê¡¢
- <code>http://myserver/docs/index.html</code>
- ¤¬Â¸ºß¤¹¤ì¤Ð¡¢¤³¤Î URL ¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£
- ¤â¤·Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Î¥ê¥¹¥È¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>Ãí: ¥É¥­¥å¥á¥ó¥È¤¬Æ±¤¸¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¸ºß¤¹¤ë¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£
- </p>
-
- <div class="example"><p><code>
- DirectoryIndex index.html index.txt /cgi-bin/index.pl
- </code></p></div>
-
- <p>¤È¤·¤¿¾ì¹ç¡¢<code>index.html</code> ¤È <code>index.txt</code>
- ¤Î¤É¤Á¤é¤â¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¸ºß¤·¤Ê¤¤¾ì¹ç¡¢CGI ¥¹¥¯¥ê¥×¥È
- <code>/cgi-bin/index.pl</code> ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectorySlash" id="DirectorySlash">DirectorySlash</a> <a name="directoryslash" id="directoryslash">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ñ¥¹ËöÈø¤Î¥¹¥é¥Ã¥·¥å¤Ç¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤«¤É¤¦¤«¤Î¥ª¥ó¥ª¥Õ¤ò¥È¥°¥ë¤µ¤»¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DirectorySlash On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>DirectorySlash On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_dir</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.1 °Ê¹ß</td></tr>
-</table>
- <p>Í×µá¤Î¤¢¤Ã¤¿ URL ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤ò»Ø¤¹¤«¤É¤¦¤«¤ò¡¢
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> ¤¬Ä´À°¤¹¤ë¤Ù¤­¤«¤É¤¦¤«¤ò
- <code class="directive">DirectorySlash</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p>ŵ·¿Åª¤Ë¤Ï¡¢¥æ¡¼¥¶¤¬ËöÈø¤Î¥¹¥é¥Ã¥·¥å̵¤·¤Ç¥ê¥½¡¼¥¹¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤òȯ¹Ô¤·¡¢
- ¤½¤·¤Æ¡¢¤½¤Î¥ê¥½¡¼¥¹¤¬¥Ç¥£¥ì¥¯¥È¥ê¤ò»Ø¤·¤Æ¤¤¤¿¾ì¹ç¡¢<code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>
- ¤Ï¡¢ËöÈø¤Ë¥¹¥é¥Ã¥·¥å¤ò<em>ÉÕ²Ã</em>¤·¤¿¾å¤ÇƱ¤¸¥ê¥½¡¼¥¹¤Ë¥ê¥À¥¤¥ì¥¯¥È¤µ¤»¤Þ¤¹¡£
- ¤³¤ÎµóÆ°¤Ë¤Ï´ö¤Ä¤«Íýͳ¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>¥æ¡¼¥¶¤Ï¡¢ºÇ½ªÅª¤Ë¤Ï¥ê¥½¡¼¥¹¤ÎÊÌ̾ URL ¤ò¥ê¥¯¥¨¥¹¥È¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡£</li>
- <li><code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤¬´üÂÔÄ̤ê¤ËÆ°¤¯¡£<code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>
- ¤ÎÀ¸À®¤¹¤ë¥ê¥ó¥¯¤Ï¥Ñ¥¹¤ò½ÐÎϤ·¤Þ¤»¤ó¤Î¤Ç¡¢¥¹¥é¥Ã¥·¥å¤¬¤Ê¤¤¾ì¹ç¤Ï´Ö°ã¤Ã¤¿¥Ñ¥¹¤ò
- »Ø¤·¤Æ¤·¤Þ¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</li>
- <li><code class="directive"><a href="#directoryindex">DirectoryIndex</a></code> ¤Ï¡¢
- ËöÈø¤Ë¥¹¥é¥Ã¥·¥å¤¬¤Ä¤¤¤Æ¤¤¤ë¥ê¥¯¥¨¥¹¥È¤Ë¤Ä¤¤¤Æ<em>¤Î¤ß</em>ɾ²Á¤µ¤ì¤ë¡£</li>
- <li>HTML ¥Ú¡¼¥¸¤ÎÁêÂÐ URL »²¾È¤¬Àµ¤·¤¯Æ°ºî¤¹¤ë¡£</li>
- </ul>
-
- <p>¤È¤Ï¤¤¤¨¡¢¤â¤·¤³¤¦¤¤¤Ã¤¿¸ú²Ì¤ò˾¤Þ¤Ê¤¤¡¢¤«¤Ä¡¢
- ¾åµ­¤Î¤è¤¦¤ÊÍýͳ¤¬Åö¤Æ¤Ï¤Þ¤é¤Ê¤¤¾ì¹ç¤Ï¡¢¥ê¥À¥¤¥ì¥¯¥È¤ò¼¡¤Î¤è¤¦¤Ë¤·¤Æ¥ª¥Õ¤Ë¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- # see security warning below!<br />
- &lt;Location /some/path&gt;<br />
- <span class="indent">
- DirectorySlash Off<br />
- SetHandler some-handler<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£·Ù¹ð</h3>
- <p>ËöÈø¤Î¥¹¥é¥Ã¥·¥å¤Ç¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò¥ª¥Õ¤Ë¤¹¤ë¤È¡¢·ë²ÌŪ¤Ë¾ðÊóϳ±Ì¤ò
- ¾·¤¯¤³¤È¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> ¤¬Í­¸ú (<code>Options +Indexes</code>) ¤Ç¡¢
- <code class="directive"><a href="#directoryindex">DirectoryIndex</a></code> ¤¬Í­¸ú¤Ê¥ê¥½¡¼¥¹ (Î㤨¤Ð
- <code>index.html</code>) ¤ò»Ø¤·¤Æ¤¤¤Æ¡¢¤Þ¤¿¡¢Í×µá¤Î¤¢¤Ã¤¿ URL ¤ËÆÃÊ̤Ê
- ¥Ï¥ó¥É¥é¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤Î¾ì¹çËöÈø¤Ë¥¹¥é¥Ã¥·¥å¤Î¤Ä¤¤¤Æ¤¤¤ë¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¤Ï <code>index.html</code>
- ¥Õ¥¡¥¤¥ë¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£<strong>¤·¤«¤·¥¹¥é¥Ã¥·¥å¤Î¤Ê¤¤¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆâÍÆ°ìÍ÷¤òÊÖ¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£</strong></p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dir.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dir.html.ko.euc-kr b/docs/manual/mod/mod_dir.html.ko.euc-kr
deleted file mode 100644
index 790c817f1c..0000000000
--- a/docs/manual/mod/mod_dir.html.ko.euc-kr
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_dir - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_dir</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dir.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>"¸¶Áö¸· ½½·¡½¬" ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÏ°í µð·ºÅ丮
-index ÆÄÀÏÀ» ¼­ºñ½ºÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>dir_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_dir.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>µð·ºÅ丮ÀÇ index´Â ´ÙÀ½ µÑÁß ÇÑ°¡Áö ¹æ¹ýÀ¸·Î Á¦°øµÈ´Ù:</p>
-
- <ul>
- <li>»ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ º¸Åë <code>index.html</code>À̶ó´Â
- ÆÄÀÏ. <code class="directive"><a href="#directoryindex">DirectoryIndex</a></code>
- Áö½Ã¾î´Â ÀÌ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÑ´Ù. <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>°¡
- ÀÌ Áö½Ã¾î¸¦ Á¦°øÇÑ´Ù.</li>
-
- <li>¾Æ´Ï¶ó¸é ¼­¹ö°¡ ¸¸µç ¸ñ·Ï. <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>°¡
- ÀÌ ±â´ÉÀ» Á¦°øÇÑ´Ù.</li>
- </ul>
- <p>µÎ ±â´ÉÀº ¼­·Î º°°³·Î ¿øÇÑ´Ù¸é ÀÚµ¿ index »ý¼ºÀ» ¿ÏÀüÈ÷
- ¾ø¾Ù (ȤÀº ±³Ã¼ÇÒ) ¼ö ÀÖ´Ù.</p>
-
- <p><code>dirname</code>ÀÌ µð·ºÅ丮¶ó¸é ¼­¹ö´Â URL
- <code>http://servername/foo/dirname</code> ¿äûÀ» ¹ÞÀ¸¸é
- "¸¶Áö¸· ½½·¡½¬" ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù. µð·ºÅ丮¿¡´Â ¸¶Áö¸·
- ½½·¡½¬°¡ ÇÊ¿äÇÏ´Ù. ±×·¡¼­ <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>Àº
- <code>http://servername/foo/dirname/</code>·Î ¸®´ÙÀÌ·º¼ÇÀ»
- º¸³½´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#directoryindex">DirectoryIndex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directoryslash">DirectorySlash</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectoryIndex" id="DirectoryIndex">DirectoryIndex</a> <a name="directoryindex" id="directoryindex">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Ŭ¶óÀ̾ðÆ®°¡ µð·ºÅ丮¸¦ ¿äûÇÒ¶§ ã¾Æº¼ ÀÚ¿ø ¸ñ·Ï</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DirectoryIndex index.html</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dir</td></tr>
-</table>
- <p><code class="directive">DirectoryIndex</code> Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®°¡
- µð·ºÅ丮¸í ³¡¿¡ /¸¦ ºÙ¿©¼­ µð·ºÅ丮ÀÇ index¸¦ ¿äûÇÒ¶§ ã¾Æº¼
- ÀÚ¿ø ¸ñ·ÏÀ» ÁöÁ¤ÇÑ´Ù. <var>Local-url</var>Àº ¿äûÇÑ µð·ºÅ丮¿¡
- »ó´ëÀûÀÎ ¹®¼­ÀÇ (%·Î ÀÎÄÚµùµÈ) URLÀÌ´Ù. º¸ÅëÀº µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀϸíÀÌ´Ù. ¿©·¯ URLÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ°í, ÀÌ °æ¿ì ¼­¹ö´Â
- ù¹ø°·Î ãÀº ÆÄÀÏÀ» º¸³½´Ù. ÀÚ¿øÀ» ãÀ» ¼ö ¾ø°í
- <code>Indexes</code> ¿É¼ÇÀ» ¼³Á¤ÇÏ¿´´Ù¸é ¼­¹ö´Â Á÷Á¢ µð·ºÅ丮
- ¸ñ·ÏÀ» ¸¸µç´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- DirectoryIndex index.html
- </code></p></div>
-
- <p>ÀÌ °æ¿ì <code>http://myserver/docs/</code>¸¦ ¿äûÇÒ¶§
- <code>http://myserver/docs/index.html</code>ÀÌ ÀÖÀ¸¸é À̸¦
- º¸³»°í, ¾ø´Ù¸é µð·ºÅ丮 ¸ñ·ÏÀ» º¸³½´Ù.</p>
-
- <p>¹®¼­°¡ ¹Ýµå½Ã µð·ºÅ丮¿¡ »ó´ëÀûÀÏ ÇÊ¿ä´Â ¾ø´Ù.</p>
-
- <div class="example"><p><code>
- DirectoryIndex index.html index.txt /cgi-bin/index.pl
- </code></p></div>
-
- <p>ÀÌ °æ¿ì µð·ºÅ丮¿¡ <code>index.html</code>À̳ª
- <code>index.txt</code>°¡ ¾øÀ¸¸é CGI ½ºÅ©¸³Æ®
- <code>/cgi-bin/index.pl</code>À» ½ÇÇàÇÑ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DirectorySlash" id="DirectorySlash">DirectorySlash</a> <a name="directoryslash" id="directoryslash">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸¶Áö¸· ½½·¡½¬ ¸®´ÙÀÌ·º¼ÇÀ» Å°°í ²ö´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>DirectorySlash On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>DirectorySlash On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_dir</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr>
-</table>
- <p><code class="directive">DirectorySlash</code> Áö½Ã¾î´Â
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>°¡ µð·ºÅ丮¸¦ °¡¸®Å°´Â URLÀ» ¼öÁ¤ÇÒÁö
- ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.</p>
-
- <p>»ç¿ëÀÚ°¡ ¸¶Áö¸· ½½·¡½¬¾øÀÌ µð·ºÅ丮¿¡ ÇØ´çÇÏ´Â ÀÚ¿øÀ»
- ¿äûÇϸé, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>´Â º¸Åë ´ÙÀ½°ú °°Àº ÀÌÀ¯·Î
- »ç¿ëÀÚ¸¦ ¸¶Áö¸· ½½·¡½¬¸¦ <em>ºÙÀÎ</em> µ¿ÀÏÇÑ ÀÚ¿øÀ¸·Î
- ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.</p>
-
- <ul>
- <li>»ç¿ëÀÚ´Â °á±¹ ÀÚ¿øÀÇ Á¤±Ô URLÀ» ¿äûÇÏ°Ô µÈ´Ù</li>
- <li><code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>°¡ ¿Ã¹Ù·Î µ¿ÀÛÇÑ´Ù. ÀÌ
- ±â´ÉÀÌ ¾ø´Ù¸é ÀÌ ¸ðµâÀº ¸µÅ©¿¡ À߸øµÈ °æ·Î¸¦ ¾²°Ô µÈ´Ù.</li>
- <li><code class="directive"><a href="#directoryindex">DirectoryIndex</a></code>´Â
- ¸¶Áö¸· ½½·¡½¬°¡ ÀÖ´Â µð·ºÅ丮 ¿äû<em>¸¸À»</em> ó¸®ÇÑ´Ù.</li>
- <li>html ÆäÀÌÁö¿¡ ÀÖ´Â »ó´ëÀûÀÎ URL ÂüÁ¶°¡ ¿Ã¹Ù·Î µ¿ÀÛÇÑ´Ù.</li>
- </ul>
-
- <p>±×·±µ¥ ÀÌ ±â´ÉÀ» ¿øÇÏÁö ¾Ê°Å<em>³ª</em> À§¿¡ µç ÀÌÀ¯°¡
- ´ç½Å¿¡°Ô ¾Ë¸ÂÁö ¾Ê´Ù¸é ´ÙÀ½°ú °°ÀÌ ¸®´ÙÀÌ·º¼ÇÀ» ÇÏÁö ¾ÊÀ»
- ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><p><code>
- # ¾Æ·¡ º¸¾È °æ°í Âü°í!<br />
- &lt;Location /some/path&gt;<br />
- <span class="indent">
- DirectorySlash Off<br />
- SetHandler some-handler<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <div class="warning"><h3>º¸¾È °æ°í</h3>
- <p>¸¶Áö¸· ½½·¡½¬ ¸®´ÙÀÌ·º¼ÇÀ» ²ô¸é Á¤º¸°¡ À¯ÃâµÉ ¼ö ÀÖ´Ù.
- (<code>Options +Indexes</code>) <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>¸¦
- »ç¿ëÇÏ°í <code class="directive"><a href="#directoryindex">DirectoryIndex</a></code>¸¦
- (<code>index.html</code> °°Àº) À¯È¿ÇÑ ÀÚ¿øÀ¸·Î ¼³Á¤ÇÏ¿´Áö¸¸
- ÇØ´ç URL¿¡ ´Ù¸¥ Ưº°ÇÑ Çڵ鷯°¡ ¾ø´Â »óȲÀ» »ó»óÇغ¸¶ó.
- ÀÌ °æ¿ì ¸¶Áö¸· ½½·¡½¬°¡ ÀÖ´Â ¿äûÀº <code>index.html</code>
- ÆÄÀÏÀ» º¸¿©ÁØ´Ù. <strong>±×·¯³ª ¸¶Áö¸· ½½·¡½¬°¡ ¾ø´Â ¿äûÀº
- µð·ºÅ丮 ³»¿ëÀ» º¸¿©ÁØ´Ù</strong>.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_dir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_dir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_dir.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_dir.xml b/docs/manual/mod/mod_dir.xml
deleted file mode 100644
index 5f6ec5e4e4..0000000000
--- a/docs/manual/mod/mod_dir.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dir.xml.meta">
-<name>mod_dir</name>
-<description>Provides for "trailing slash" redirects and
- serving directory index files</description>
-<status>Base</status>
-<sourcefile>mod_dir.c</sourcefile>
-<identifier>dir_module</identifier>
-
-<summary>
- <p>The index of a directory can come from one of two sources:</p>
-
- <ul>
- <li>A file written by the user, typically called
- <code>index.html</code>. The <directive module="mod_dir"
- >DirectoryIndex</directive> directive sets the
- name of this file. This is controlled by
- <module>mod_dir</module>.</li>
-
- <li>Otherwise, a listing generated by the server. This is
- provided by <module>mod_autoindex</module>.</li>
- </ul>
- <p>The two functions are separated so that you can completely
- remove (or replace) automatic index generation should you want
- to.</p>
-
- <p>A "trailing slash" redirect is issued when the server
- receives a request for a URL
- <code>http://servername/foo/dirname</code> where
- <code>dirname</code> is a directory. Directories require a
- trailing slash, so <module>mod_dir</module> issues a redirect to
- <code>http://servername/foo/dirname/</code>.</p>
-</summary>
-
-<directivesynopsis>
-<name>DirectoryIndex</name>
-<description>List of resources to look for when the client requests
-a directory</description>
-<syntax>DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</syntax>
-<default>DirectoryIndex index.html</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>DirectoryIndex</directive> directive sets the
- list of resources to look for, when the client requests an index
- of the directory by specifying a / at the end of the directory
- name. <var>Local-url</var> is the (%-encoded) URL of a document on
- the server relative to the requested directory; it is usually the
- name of a file in the directory. Several URLs may be given, in
- which case the server will return the first one that it finds. If
- none of the resources exist and the <code>Indexes</code> option is
- set, the server will generate its own listing of the
- directory.</p>
-
- <example><title>Example</title>
- DirectoryIndex index.html
- </example>
-
- <p>then a request for <code>http://myserver/docs/</code> would
- return <code>http://myserver/docs/index.html</code> if it
- exists, or would list the directory if it did not.</p>
-
- <p>Note that the documents do not need to be relative to the
- directory;</p>
-
- <example>
- DirectoryIndex index.html index.txt /cgi-bin/index.pl
- </example>
-
- <p>would cause the CGI script <code>/cgi-bin/index.pl</code> to be
- executed if neither <code>index.html</code> or <code>index.txt</code>
- existed in a directory.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DirectorySlash</name>
-<description>Toggle trailing slash redirects on or off</description>
-<syntax>DirectorySlash On|Off</syntax>
-<default>DirectorySlash On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-<compatibility>Available in version 2.1 and later</compatibility>
-
-<usage>
- <p>The <directive>DirectorySlash</directive> directive determines, whether
- <module>mod_dir</module> should fixup URLs pointing to a directory or
- not.</p>
-
- <p>Typically if a user requests a resource without a trailing slash, which
- points to a directory, <module>mod_dir</module> redirects him to the same
- ressource, but <em>with</em> trailing slash for some good reasons:</p>
-
- <ul>
- <li>The user is finally requesting the canonical URL of the resource</li>
- <li><module>mod_autoindex</module> works correctly. Since it doesn't emit
- the path in the link, it would point to the wrong path.</li>
- <li><directive module="mod_dir">DirectoryIndex</directive> will be evaluated
- <em>only</em> for directories requested with trailing slash.</li>
- <li>Relative URL references inside html pages will work correctly.</li>
- </ul>
-
- <p>Well, if you don't want this effect <em>and</em> the reasons above don't
- apply to you, you can turn off the redirect with:</p>
-
- <example>
- # see security warning below!<br />
- &lt;Location /some/path&gt;<br />
- <indent>
- DirectorySlash Off<br />
- SetHandler some-handler<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note type="warning"><title>Security Warning</title>
- <p>Turning off the trailing slash redirect may result in an information
- disclosure. Consider a situation where <module>mod_autoindex</module> is
- active (<code>Options +Indexes</code>) and <directive module="mod_dir"
- >DirectoryIndex</directive> is set to a valid resource (say,
- <code>index.html</code>) and there's no other special handler defined for
- that URL. In this case a request with a trailing slash would show the
- <code>index.html</code> file. <strong>But a request without trailing slash
- would list the directory contents</strong>.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_dir.xml.ja b/docs/manual/mod/mod_dir.xml.ja
deleted file mode 100644
index 99cb4b4982..0000000000
--- a/docs/manual/mod/mod_dir.xml.ja
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dir.xml.meta">
-
-<name>mod_dir</name>
-<description>$B!V:G8e$N%9%i%C%7%e!W$N%j%@%$%l%/%H$H!"%G%#%l%/%H%j$N(B
-$B%$%s%G%C%/%9%U%!%$%k$r07$&5!G=$rDs6!$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_dir.c</sourcefile>
-<identifier>dir_module</identifier>
-
-<summary>
- <p>$B%G%#%l%/%H%j%$%s%G%C%/%9$O!"<!$NFs$D$N$&$A$I$A$i$+$,MxMQ$5$l$^$9(B:</p>
-
- <ul>
- <li>$B0l$DL\$O!"%f!<%6$,:n@.$7$?%U%!%$%k$rMQ$$$k$b$N$G!"DL>o(B
- <code>index.html</code> $B$H$$$&%U%!%$%kL>$r;H$$$^$9!#$3$N%U%!%$%kL>$O!"(B
- <directive module="mod_dir">DirectoryIndex</directive> $B%G%#%l%/%F%#%V$G(B
- $B;XDj$9$k$3$H$,$G$-$^$9!#$3$N5!G=$O(B <module>mod_dir</module>
- $B%b%8%e!<%k$GDs6!$5$l$^$9!#(B</li>
-
- <li>$B$b$&0l$D$NJ}K!$O!"(B
- $B%5!<%P$K$h$C$F<+F0E*$K@8@.$5$l$k%G%#%l%/%H%j%j%9%H$rMQ$$$k>l9g$G$9!#(B
- $B$3$N5!G=$O!"(B<module>mod_autoindex</module>
- $B%b%8%e!<%k$K$h$jDs6!$5$l$^$9!#(B</li>
- </ul>
-
- <p>$B<+F0E*$J%$%s%G%C%/%9@8@.5!G=$r:o=|(B ($B$b$7$/$O8r49(B)
- $B$G$-$k$h$&$K!"$3$NFs$D$N5!G=$OJ,N%$5$l$F$$$^$9!#(B</p>
-
- <p>$B$J$*(B <code>http://servername/foo/dirname</code> $B$H$$$&(B URL
- $B$X$N%j%/%(%9%H$,$"$C$?:]$K!"(B<code>dirname</code>
- $B$H$$$&%G%#%l%/%H%j$,$"$l$P!"!V:G8e$K%9%i%C%7%e$r$D$1$?7A!W$N(B URL
- $B$X$N%j%@%$%l%/%H$rAw=P$7$^$9!#(B
- $B%G%#%l%/%H%j$X$N%"%/%;%9$O%9%i%C%7%e$G=*$o$C$F$$$kI,MW$,$"$j!"(B
- <code>mod_dir</code> $B$O!"(B<code>http://servername/foo/dirname/</code>
- $B$X$N%j%@%$%l%/%H$rAw=P$9$k$3$H$K$J$j$^$9!#(B</p>
-</summary>
-
-<directivesynopsis>
-<name>DirectoryIndex</name>
-<description>$B%/%i%$%"%s%H$,%G%#%l%/%H%j$r%j%/%(%9%H$7$?$H$-$KD4$Y$k(B
-$B%j%=!<%9$N%j%9%H(B</description>
-<syntax>DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</syntax>
-<default>DirectoryIndex index.html</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>
- $B%/%i%$%"%s%H$,!"%G%#%l%/%H%jL>$N:G8e$K!V(B/$B!W(B
- $B$r;XDj$7$F%G%#%l%/%H%j%$%s%G%C%/%9$rMW5a$9$k>l9g$KC5$9%j%=!<%9$N%j%9%H$r(B
- <directive>DirectoryIndex</directive> $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B
- <var>Local-url</var>
- $B$O!"%j%/%(%9%H$5$l$?%G%#%l%/%H%j$KBP1~$9$k!"%5!<%P>e$N%I%-%e%a%s%H$N(B
- (% $B%(%s%3!<%I$5$l$?(B) URL $B$G!"IaDL$O%G%#%l%/%H%jCf$N%U%!%$%k$NL>A0$G$9!#(B
- $BJ#?t$N(B URL $B$,@_Dj$5$l$?>l9g$K$O!":G=i$K8+$D$+$C$?$b$N$rJV$7$^$9!#(B
- $B$=$l$i$,8+$D$+$i$:!"(B<code>Indexes</code>
- $B%*%W%7%g%s$,%;%C%H$5$l$F$$$k>l9g!"%G%#%l%/%H%j$N%j%9%H$r@8@.$7$^$9!#(B
- </p>
-
- <example><title>$BNc(B</title>
- DirectoryIndex index.html
- </example>
-
- <p><code>http://myserver/docs/</code> $B$X$N%"%/%;%9$,$"$j!"(B
- <code>http://myserver/docs/index.html</code>
- $B$,B8:_$9$l$P!"$3$N(B URL $B$,JV$5$l$^$9!#(B
- $B$b$7B8:_$7$J$1$l$P!"%G%#%l%/%H%j$N%j%9%H$,JV$5$l$^$9!#(B</p>
-
- <p>$BCm(B: $B%I%-%e%a%s%H$,F1$8%G%#%l%/%H%jFb$KB8:_$9$k$OI,MW$"$j$^$;$s!#(B
- </p>
-
- <example>
- DirectoryIndex index.html index.txt /cgi-bin/index.pl
- </example>
-
- <p>$B$H$7$?>l9g!"(B<code>index.html</code> $B$H(B <code>index.txt</code>
- $B$N$I$A$i$b%G%#%l%/%H%jFb$KB8:_$7$J$$>l9g!"(BCGI $B%9%/%j%W%H(B
- <code>/cgi-bin/index.pl</code> $B$,<B9T$5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DirectorySlash</name>
-<description>$B%Q%9KvHx$N%9%i%C%7%e$G%j%@%$%l%/%H$9$k$+$I$&$+$N%*%s%*%U$r%H%0%k$5$;$k(B</description>
-<syntax>DirectorySlash On|Off</syntax>
-<default>DirectorySlash On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-<compatibility>2.1 $B0J9_(B</compatibility>
-
-<usage>
- <p>$BMW5a$N$"$C$?(B URL $B$,%G%#%l%/%H%j$r;X$9$+$I$&$+$r!"(B
- <module>mod_dir</module> $B$,D4@0$9$k$Y$-$+$I$&$+$r(B
- <directive>DirectorySlash</directive>
- $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B</p>
-
- <p>$BE57?E*$K$O!"%f!<%6$,KvHx$N%9%i%C%7%eL5$7$G%j%=!<%9$X$N%j%/%(%9%H$rH/9T$7!"(B
- $B$=$7$F!"$=$N%j%=!<%9$,%G%#%l%/%H%j$r;X$7$F$$$?>l9g!"(B<module>mod_dir</module>
- $B$O!"KvHx$K%9%i%C%7%e$r(B<em>$BIU2C(B</em>$B$7$?>e$GF1$8%j%=!<%9$K%j%@%$%l%/%H$5$;$^$9!#(B
- $B$3$N5sF0$K$O4v$D$+M}M3$,$"$j$^$9(B:</p>
-
- <ul>
- <li>$B%f!<%6$O!":G=*E*$K$O%j%=!<%9$NJLL>(B URL $B$r%j%/%(%9%H$9$k$3$H$K$J$k!#(B</li>
- <li><module>mod_autoindex</module> $B$,4|BTDL$j$KF0$/!#(B<module>mod_autoindex</module>
- $B$N@8@.$9$k%j%s%/$O%Q%9$r=PNO$7$^$;$s$N$G!"%9%i%C%7%e$,$J$$>l9g$O4V0c$C$?%Q%9$r(B
- $B;X$7$F$7$^$&$3$H$K$J$j$^$9!#(B</li>
- <li><directive module="mod_dir">DirectoryIndex</directive> $B$O!"(B
- $BKvHx$K%9%i%C%7%e$,$D$$$F$$$k%j%/%(%9%H$K$D$$$F(B<em>$B$N$_(B</em>$BI>2A$5$l$k!#(B</li>
- <li>HTML $B%Z!<%8$NAjBP(B URL $B;2>H$,@5$7$/F0:n$9$k!#(B</li>
- </ul>
-
- <p>$B$H$O$$$(!"$b$7$3$&$$$C$?8z2L$rK>$^$J$$!"$+$D!"(B
- $B>e5-$N$h$&$JM}M3$,Ev$F$O$^$i$J$$>l9g$O!"%j%@%$%l%/%H$r<!$N$h$&$K$7$F%*%U$K$G$-$^$9(B:</p>
-
- <example>
- # see security warning below!<br />
- &lt;Location /some/path&gt;<br />
- <indent>
- DirectorySlash Off<br />
- SetHandler some-handler<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note type="warning"><title>$B%;%-%e%j%F%#7Y9p(B</title>
- <p>$BKvHx$N%9%i%C%7%e$G$N%j%@%$%l%/%H$r%*%U$K$9$k$H!"7k2LE*$K>pJsO31L$r(B
- $B>7$/$3$H$K$J$k$+$b$7$l$^$;$s!#(B
- <module>mod_autoindex</module> $B$,M-8z(B (<code>Options +Indexes</code>) $B$G!"(B
- <directive module="mod_dir">DirectoryIndex</directive> $B$,M-8z$J%j%=!<%9(B ($BNc$($P(B
- <code>index.html</code>) $B$r;X$7$F$$$F!"$^$?!"MW5a$N$"$C$?(B URL $B$KFCJL$J(B
- $B%O%s%I%i$,@_Dj$5$l$F$$$J$$>l9g$r9M$($F$_$F$/$@$5$$!#(B
- $B$3$N>l9gKvHx$K%9%i%C%7%e$N$D$$$F$$$k%j%/%(%9%H$KBP$7$F$O(B <code>index.html</code>
- $B%U%!%$%k$,JV$5$l$^$9!#(B<strong>$B$7$+$7%9%i%C%7%e$N$J$$%j%/%(%9%H$KBP$7$F$O!"(B
- $B%G%#%l%/%H%j$NFbMF0lMw$rJV$7$F$7$^$$$^$9!#(B</strong></p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_dir.xml.ko b/docs/manual/mod/mod_dir.xml.ko
deleted file mode 100644
index fe3b057331..0000000000
--- a/docs/manual/mod/mod_dir.xml.ko
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_dir.xml.meta">
-<name>mod_dir</name>
-<description>"¸¶Áö¸· ½½·¡½¬" ¸®´ÙÀÌ·º¼ÇÀ» Á¦°øÇÏ°í µð·ºÅ丮
-index ÆÄÀÏÀ» ¼­ºñ½ºÇÑ´Ù</description>
-<status>Base</status>
-<sourcefile>mod_dir.c</sourcefile>
-<identifier>dir_module</identifier>
-
-<summary>
- <p>µð·ºÅ丮ÀÇ index´Â ´ÙÀ½ µÑÁß ÇÑ°¡Áö ¹æ¹ýÀ¸·Î Á¦°øµÈ´Ù:</p>
-
- <ul>
- <li>»ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ º¸Åë <code>index.html</code>À̶ó´Â
- ÆÄÀÏ. <directive module="mod_dir">DirectoryIndex</directive>
- Áö½Ã¾î´Â ÀÌ ÆÄÀÏÀÇ À̸§À» ÁöÁ¤ÇÑ´Ù. <module>mod_dir</module>°¡
- ÀÌ Áö½Ã¾î¸¦ Á¦°øÇÑ´Ù.</li>
-
- <li>¾Æ´Ï¶ó¸é ¼­¹ö°¡ ¸¸µç ¸ñ·Ï. <module>mod_autoindex</module>°¡
- ÀÌ ±â´ÉÀ» Á¦°øÇÑ´Ù.</li>
- </ul>
- <p>µÎ ±â´ÉÀº ¼­·Î º°°³·Î ¿øÇÑ´Ù¸é ÀÚµ¿ index »ý¼ºÀ» ¿ÏÀüÈ÷
- ¾ø¾Ù (ȤÀº ±³Ã¼ÇÒ) ¼ö ÀÖ´Ù.</p>
-
- <p><code>dirname</code>ÀÌ µð·ºÅ丮¶ó¸é ¼­¹ö´Â URL
- <code>http://servername/foo/dirname</code> ¿äûÀ» ¹ÞÀ¸¸é
- "¸¶Áö¸· ½½·¡½¬" ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù. µð·ºÅ丮¿¡´Â ¸¶Áö¸·
- ½½·¡½¬°¡ ÇÊ¿äÇÏ´Ù. ±×·¡¼­ <module>mod_dir</module>Àº
- <code>http://servername/foo/dirname/</code>·Î ¸®´ÙÀÌ·º¼ÇÀ»
- º¸³½´Ù.</p>
-</summary>
-
-<directivesynopsis>
-<name>DirectoryIndex</name>
-<description>Ŭ¶óÀ̾ðÆ®°¡ µð·ºÅ丮¸¦ ¿äûÇÒ¶§ ã¾Æº¼ ÀÚ¿ø ¸ñ·Ï</description>
-<syntax>DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</syntax>
-<default>DirectoryIndex index.html</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p><directive>DirectoryIndex</directive> Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®°¡
- µð·ºÅ丮¸í ³¡¿¡ /¸¦ ºÙ¿©¼­ µð·ºÅ丮ÀÇ index¸¦ ¿äûÇÒ¶§ ã¾Æº¼
- ÀÚ¿ø ¸ñ·ÏÀ» ÁöÁ¤ÇÑ´Ù. <var>Local-url</var>Àº ¿äûÇÑ µð·ºÅ丮¿¡
- »ó´ëÀûÀÎ ¹®¼­ÀÇ (%·Î ÀÎÄÚµùµÈ) URLÀÌ´Ù. º¸ÅëÀº µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀϸíÀÌ´Ù. ¿©·¯ URLÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ°í, ÀÌ °æ¿ì ¼­¹ö´Â
- ù¹ø°·Î ãÀº ÆÄÀÏÀ» º¸³½´Ù. ÀÚ¿øÀ» ãÀ» ¼ö ¾ø°í
- <code>Indexes</code> ¿É¼ÇÀ» ¼³Á¤ÇÏ¿´´Ù¸é ¼­¹ö´Â Á÷Á¢ µð·ºÅ丮
- ¸ñ·ÏÀ» ¸¸µç´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- DirectoryIndex index.html
- </example>
-
- <p>ÀÌ °æ¿ì <code>http://myserver/docs/</code>¸¦ ¿äûÇÒ¶§
- <code>http://myserver/docs/index.html</code>ÀÌ ÀÖÀ¸¸é À̸¦
- º¸³»°í, ¾ø´Ù¸é µð·ºÅ丮 ¸ñ·ÏÀ» º¸³½´Ù.</p>
-
- <p>¹®¼­°¡ ¹Ýµå½Ã µð·ºÅ丮¿¡ »ó´ëÀûÀÏ ÇÊ¿ä´Â ¾ø´Ù.</p>
-
- <example>
- DirectoryIndex index.html index.txt /cgi-bin/index.pl
- </example>
-
- <p>ÀÌ °æ¿ì µð·ºÅ丮¿¡ <code>index.html</code>À̳ª
- <code>index.txt</code>°¡ ¾øÀ¸¸é CGI ½ºÅ©¸³Æ®
- <code>/cgi-bin/index.pl</code>À» ½ÇÇàÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DirectorySlash</name>
-<description>¸¶Áö¸· ½½·¡½¬ ¸®´ÙÀÌ·º¼ÇÀ» Å°°í ²ö´Ù</description>
-<syntax>DirectorySlash On|Off</syntax>
-<default>DirectorySlash On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<usage>
- <p><directive>DirectorySlash</directive> Áö½Ã¾î´Â
- <module>mod_dir</module>°¡ µð·ºÅ丮¸¦ °¡¸®Å°´Â URLÀ» ¼öÁ¤ÇÒÁö
- ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.</p>
-
- <p>»ç¿ëÀÚ°¡ ¸¶Áö¸· ½½·¡½¬¾øÀÌ µð·ºÅ丮¿¡ ÇØ´çÇÏ´Â ÀÚ¿øÀ»
- ¿äûÇϸé, <module>mod_dir</module>´Â º¸Åë ´ÙÀ½°ú °°Àº ÀÌÀ¯·Î
- »ç¿ëÀÚ¸¦ ¸¶Áö¸· ½½·¡½¬¸¦ <em>ºÙÀÎ</em> µ¿ÀÏÇÑ ÀÚ¿øÀ¸·Î
- ¸®´ÙÀÌ·º¼ÇÇÑ´Ù.</p>
-
- <ul>
- <li>»ç¿ëÀÚ´Â °á±¹ ÀÚ¿øÀÇ Á¤±Ô URLÀ» ¿äûÇÏ°Ô µÈ´Ù</li>
- <li><module>mod_autoindex</module>°¡ ¿Ã¹Ù·Î µ¿ÀÛÇÑ´Ù. ÀÌ
- ±â´ÉÀÌ ¾ø´Ù¸é ÀÌ ¸ðµâÀº ¸µÅ©¿¡ À߸øµÈ °æ·Î¸¦ ¾²°Ô µÈ´Ù.</li>
- <li><directive module="mod_dir">DirectoryIndex</directive>´Â
- ¸¶Áö¸· ½½·¡½¬°¡ ÀÖ´Â µð·ºÅ丮 ¿äû<em>¸¸À»</em> ó¸®ÇÑ´Ù.</li>
- <li>html ÆäÀÌÁö¿¡ ÀÖ´Â »ó´ëÀûÀÎ URL ÂüÁ¶°¡ ¿Ã¹Ù·Î µ¿ÀÛÇÑ´Ù.</li>
- </ul>
-
- <p>±×·±µ¥ ÀÌ ±â´ÉÀ» ¿øÇÏÁö ¾Ê°Å<em>³ª</em> À§¿¡ µç ÀÌÀ¯°¡
- ´ç½Å¿¡°Ô ¾Ë¸ÂÁö ¾Ê´Ù¸é ´ÙÀ½°ú °°ÀÌ ¸®´ÙÀÌ·º¼ÇÀ» ÇÏÁö ¾ÊÀ»
- ¼ö ÀÖ´Ù.</p>
-
- <example>
- # ¾Æ·¡ º¸¾È °æ°í Âü°í!<br />
- &lt;Location /some/path&gt;<br />
- <indent>
- DirectorySlash Off<br />
- SetHandler some-handler<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <note type="warning"><title>º¸¾È °æ°í</title>
- <p>¸¶Áö¸· ½½·¡½¬ ¸®´ÙÀÌ·º¼ÇÀ» ²ô¸é Á¤º¸°¡ À¯ÃâµÉ ¼ö ÀÖ´Ù.
- (<code>Options +Indexes</code>) <module>mod_autoindex</module>¸¦
- »ç¿ëÇÏ°í <directive module="mod_dir">DirectoryIndex</directive>¸¦
- (<code>index.html</code> °°Àº) À¯È¿ÇÑ ÀÚ¿øÀ¸·Î ¼³Á¤ÇÏ¿´Áö¸¸
- ÇØ´ç URL¿¡ ´Ù¸¥ Ưº°ÇÑ Çڵ鷯°¡ ¾ø´Â »óȲÀ» »ó»óÇغ¸¶ó.
- ÀÌ °æ¿ì ¸¶Áö¸· ½½·¡½¬°¡ ÀÖ´Â ¿äûÀº <code>index.html</code>
- ÆÄÀÏÀ» º¸¿©ÁØ´Ù. <strong>±×·¯³ª ¸¶Áö¸· ½½·¡½¬°¡ ¾ø´Â ¿äûÀº
- µð·ºÅ丮 ³»¿ëÀ» º¸¿©ÁØ´Ù</strong>.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_dir.xml.meta b/docs/manual/mod/mod_dir.xml.meta
deleted file mode 100644
index 9f9e57b9c3..0000000000
--- a/docs/manual/mod/mod_dir.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_dir</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_disk_cache.html b/docs/manual/mod/mod_disk_cache.html
deleted file mode 100644
index 85d77ec77b..0000000000
--- a/docs/manual/mod/mod_disk_cache.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_disk_cache.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_disk_cache.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_disk_cache.html.en b/docs/manual/mod/mod_disk_cache.html.en
deleted file mode 100644
index 340283ae28..0000000000
--- a/docs/manual/mod/mod_disk_cache.html.en
+++ /dev/null
@@ -1,368 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_disk_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_disk_cache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_disk_cache.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_disk_cache.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Content cache storage manager keyed to URIs</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>disk_cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_disk_cache.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning">
- This module is experimental. Documentation is still under development...
- </div>
-
- <p><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code> implements a disk based storage
- manager. It is primarily of use in conjunction with
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>.</p>
-
- <p>Content is stored in and retrieved from the cache using URI based
- keys. Content with access protection is not cached.</p>
-
- <div class="note"><h3>Note:</h3>
- <p><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code> requires the services of
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedirlength">CacheDirLength</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedirlevels">CacheDirLevels</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcclean">CacheGcClean</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcdaily">CacheGcDaily</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcinterval">CacheGcInterval</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcunused">CacheGcUnused</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheminfilesize">CacheMinFileSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheroot">CacheRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachesize">CacheSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachetimemargin">CacheTimeMargin</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDirLength" id="CacheDirLength">CacheDirLength</a> <a name="cachedirlength" id="cachedirlength">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The number of characters in subdirectory names</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheDirLength <var>length</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheDirLength 2</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheDirLength</code> directive sets the number
- of characters for each subdirectory name in the cache hierarchy.</p>
-
- <div class="note">
- <p>The result of <code class="directive"><a href="#cachedirlevels">CacheDirLevels</a></code>* <code class="directive">CacheDirLength</code>
- must not be higher than 20.</p>
- </div>
-
- <div class="example"><p><code>
- CacheDirLength 4
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDirLevels" id="CacheDirLevels">CacheDirLevels</a> <a name="cachedirlevels" id="cachedirlevels">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The number of levels of subdirectories in the
-cache.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheDirLevels <var>levels</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheDirLevels 3</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheDirLevels</code> directive sets the number
- of subdirectory levels in the cache. Cached data will be saved this
- many directory levels below the <code class="directive"><a href="#cacheroot">CacheRoot</a></code> directory.</p>
-
- <div class="note">
- <p>The result of <code class="directive">CacheDirLevels</code>*
- <code class="directive"><a href="#cachedirlength">CacheDirLength</a></code> must
- not be higher than 20.</p>
- </div>
-
- <div class="example"><p><code>
- CacheDirLevels 5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheExpiryCheck" id="CacheExpiryCheck">CacheExpiryCheck</a> <a name="cacheexpirycheck" id="cacheexpirycheck">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Indicates if the cache observes Expires dates when seeking
-files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheExpiryCheck On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheExpiryCheck On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheExpiryCheck Off<br />
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheExpiryCheck</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcClean" id="CacheGcClean">CacheGcClean</a> <a name="cachegcclean" id="cachegcclean">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The time to retain unchanged cached files that match a
-URL</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheGcClean <var>hours</var> <var>url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheGcClean ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheGcClean 12 /daily_scripts
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheGcClean</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcDaily" id="CacheGcDaily">CacheGcDaily</a> <a name="cachegcdaily" id="cachegcdaily">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The recurring time each day for garbage collection to be run.
-(24 hour clock)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheGcDaily <var>time</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheGcDaily ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheGcDaily 23:59
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheGcDaily</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcInterval" id="CacheGcInterval">CacheGcInterval</a> <a name="cachegcinterval" id="cachegcinterval">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The interval between garbage collection attempts.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheGcInterval <var>hours</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheGcInterval</code> directive specifies the
- number of hours to wait between attempts to free up disk space.</p>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheGcInterval 24<br />
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheGcInterval</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcMemUsage" id="CacheGcMemUsage">CacheGcMemUsage</a> <a name="cachegcmemusage" id="cachegcmemusage">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum kilobytes of memory used for garbage
-collection</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheGcMemUsage <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheGcMemUsage ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheGcMemUsage 16
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheGcMemUsage</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcUnused" id="CacheGcUnused">CacheGcUnused</a> <a name="cachegcunused" id="cachegcunused">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The time to retain unreferenced cached files that match a
-URL.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheGcUnused <var>hours</var> <var>url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheGcUnused ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheGcUnused 12 /local_images
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheGcUnused</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheMaxFileSize" id="CacheMaxFileSize">CacheMaxFileSize</a> <a name="cachemaxfilesize" id="cachemaxfilesize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheMaxFileSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheMaxFileSize 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheMaxFileSize</code> directive sets the
- maximum size, in bytes, for a document to be considered for storage in
- the cache.</p>
-
- <div class="example"><p><code>
- CacheMaxFileSize 64000
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheMinFileSize" id="CacheMinFileSize">CacheMinFileSize</a> <a name="cacheminfilesize" id="cacheminfilesize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The minimum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheMinFileSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheMinFileSize 1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheMinFileSize</code> directive sets the
- minimum size, in bytes, for a document to be considered for storage
- in the cache.</p>
-
- <div class="example"><p><code>
- CacheMinFileSize 64
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheRoot" id="CacheRoot">CacheRoot</a> <a name="cacheroot" id="cacheroot">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The directory root under which cache files are
-stored</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheRoot <var>directory</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheRoot</code> directive defines the name of
- the directory on the disk to contain cache files. If the <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code> module has been loaded or compiled in to the
- Apache server, this directive <em>must</em> be defined. Failing to
- provide a value for <code class="directive">CacheRoot</code> will result in
- a configuration file processing error. The <code class="directive"><a href="#cachedirlevels">CacheDirLevels</a></code> and <code class="directive"><a href="#cachedirlength">CacheDirLength</a></code> directives define
- the structure of the directories under the specified root directory.</p>
-
- <div class="example"><p><code>
- CacheRoot c:/cacheroot
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheSize" id="CacheSize">CacheSize</a> <a name="cachesize" id="cachesize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum amount of disk space that will be used by the
-cache in KBytes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheSize <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheSize 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheSize</code> directive sets the desired
- disk space usage of the cache, in KBytes (1024-byte units). This
- directive does not put a hard limit on the size of the cache. The
- garbage collector will delete files until the usage is at or below the
- settings. Always use a value that is lower than the available disk
- space.</p>
-
- <div class="example"><p><code>
- CacheSize 5000000
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheTimeMargin" id="CacheTimeMargin">CacheTimeMargin</a> <a name="cachetimemargin" id="cachetimemargin">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The minimum time margin to cache a document</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheTimeMargin <var>?</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheTimeMargin ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <div class="example"><p><code>
- CacheTimeMargin X
- </code></p></div>
-
- <div class="warning">
- The <code class="directive">CacheTimeMargin</code> directive is currently
- <em>not</em> implemented.
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_disk_cache.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_disk_cache.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_disk_cache.html.ko.euc-kr b/docs/manual/mod/mod_disk_cache.html.ko.euc-kr
deleted file mode 100644
index bcc7d7587d..0000000000
--- a/docs/manual/mod/mod_disk_cache.html.ko.euc-kr
+++ /dev/null
@@ -1,355 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_disk_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_disk_cache</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_disk_cache.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_disk_cache.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>Content cache storage manager keyed to URIs</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>disk_cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_disk_cache.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <div class="warning">
- ÀÌ ¸ðµâÀº ½ÇÇèÀûÀÎ »óÅÂÀÌ´Ù. ¹®¼­´Â ¾ÆÁ÷ ÀÛ¾÷ÁßÀÌ´Ù...
- </div>
-
- <p><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>´Â µð½ºÅ©±â¹Ý ÀúÀå°ü¸®ÀÚ¸¦
- ±¸ÇöÇÑ´Ù. ÀÌ ¸ðµâÀº ±âº»ÀûÀ¸·Î <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>¿Í
- °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <p>³»¿ëÀ» URI¸¦ Åä´ë·Î ¸¸µç Å°·Î ij½¬¿¡ ÀúÀåÇÏ°í °¡Á®¿Â´Ù.
- Á¢±Ùº¸È£°¡ µÈ ³»¿ëÀº ij½¬ÇÏÁö¾Ê´Â´Ù.</p>
-
- <div class="note"><h3>ÁÖÀÇ:</h3>
- <p><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>´Â
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>°¡ ÇÊ¿äÇÏ´Ù.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedirlength">CacheDirLength</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachedirlevels">CacheDirLevels</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheexpirycheck">CacheExpiryCheck</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcclean">CacheGcClean</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcdaily">CacheGcDaily</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcinterval">CacheGcInterval</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcmemusage">CacheGcMemUsage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachegcunused">CacheGcUnused</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachemaxfilesize">CacheMaxFileSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheminfilesize">CacheMinFileSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cacheroot">CacheRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachesize">CacheSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cachetimemargin">CacheTimeMargin</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDirLength" id="CacheDirLength">CacheDirLength</a> <a name="cachedirlength" id="cachedirlength">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÇÏÀ§µð·ºÅ丮¸íÀÇ ¹®ÀÚ°³¼ö</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheDirLength <var>length</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheDirLength 2</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheDirLength</code> Áö½Ã¾î´Â ij½¬
- °èÃþ±¸Á¶¿¡¼­ °¢ ÇÏÀ§µð·ºÅ丮¸íÀÇ ¹®ÀÚ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
- <div class="note">
- <p><code class="directive"><a href="#cachedirlevels">CacheDirLevels</a></code>¿Í
- <code class="directive">CacheDirLength</code>¸¦ °öÇÏ¿© 20 º¸´Ù
- Å©¸é ¾ÈµÈ´Ù.</p>
- </div>
-
- <div class="example"><p><code>
- CacheDirLength 4
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheDirLevels" id="CacheDirLevels">CacheDirLevels</a> <a name="cachedirlevels" id="cachedirlevels">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ij½¬ÀÇ ÇÏÀ§µð·ºÅ丮 ±íÀÌ.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheDirLevels <var>levels</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheDirLevels 3</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheDirLevels</code> Áö½Ã¾î´Â ij½¬ÀÇ
- ÇÏÀ§µð·ºÅ丮 ±íÀ̸¦ ÁöÁ¤ÇÑ´Ù. ij½¬µÈ ÀڷḦ <code class="directive"><a href="#cacheroot">CacheRoot</a></code> µð·ºÅ丮
- ¾Æ·¡ ÀÌ ±íÀ̱îÁö ÀúÀåÇÑ´Ù.</p>
-
- <div class="note">
- <p><code class="directive">CacheDirLevels</code>¿Í <code class="directive"><a href="#cachedirlength">CacheDirLength</a></code>¸¦
- °öÇÏ¿© 20 º¸´Ù Å©¸é ¾ÈµÈ´Ù.</p>
- </div>
-
- <div class="example"><p><code>
- CacheDirLevels 5
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheExpiryCheck" id="CacheExpiryCheck">CacheExpiryCheck</a> <a name="cacheexpirycheck" id="cacheexpirycheck">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ij½¬¿¡¼­ ÆÄÀÏÀ» ãÀ»¶§ ¸¸±â½Ã°£À» °í·ÁÇÒÁö ¿©ºÎ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheExpiryCheck On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheExpiryCheck On</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheExpiryCheck Off<br />
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheExpiryCheck</code> Áö½Ã¾î´Â ÇöÀç
- ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcClean" id="CacheGcClean">CacheGcClean</a> <a name="cachegcclean" id="cachegcclean">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>URL¿¡ ÇØ´çÇÏ´Â º¯ÇÏÁö¾ÊÀº ij½¬ÆÄÀÏÀ» À¯ÁöÇÒ ½Ã°£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheGcClean <var>hours</var> <var>url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheGcClean ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheGcClean 12 /daily_scripts
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheGcClean</code> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcDaily" id="CacheGcDaily">CacheGcDaily</a> <a name="cachegcdaily" id="cachegcdaily">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ÅÀÏ °¡ºñÁöÄ÷¢Å͸¦ ½ÇÇàÇÒ ¹Ýº¹ ½Ã°£ (24½Ã ½Ã°è)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheGcDaily <var>time</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheGcDaily ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheGcDaily 23:59
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheGcDaily</code> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcInterval" id="CacheGcInterval">CacheGcInterval</a> <a name="cachegcinterval" id="cachegcinterval">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>°¡ºñÁöÄ÷¢Å͸¦ ½ÇÇàÇÏ´Â °£°Ý.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheGcInterval <var>hours</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheGcInterval</code> Áö½Ã¾î´Â Ä«ºñÁöÄ÷¢ÅÍ°¡
- µð½ºÅ©°ø°£À» ºñ¿ì´Â ½Ã°£ °£°ÝÀ» ½Ã°£´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.</p>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheGcInterval 24<br />
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheGcInterval</code> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcMemUsage" id="CacheGcMemUsage">CacheGcMemUsage</a> <a name="cachegcmemusage" id="cachegcmemusage">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>°¡ºñÁöÄ÷¢ÅÍ°¡ »ç¿ëÇÒ ÃÖ´ë ¸Þ¸ð¸®·® (kilobyte ´ÜÀ§)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheGcMemUsage <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheGcMemUsage ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheGcMemUsage 16
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheGcMemUsage</code> Áö½Ã¾î´Â ÇöÀç
- ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheGcUnused" id="CacheGcUnused">CacheGcUnused</a> <a name="cachegcunused" id="cachegcunused">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>URL¿¡ ÇØ´çÇÏ´Â ÂüÁ¶µÇÁö¾ÊÀº ij½¬ÆÄÀÏÀ» À¯ÁöÇÒ ±â°£.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheGcUnused <var>hours</var> <var>url-string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheGcUnused ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheGcUnused 12 /local_images
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheGcUnused</code> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheMaxFileSize" id="CacheMaxFileSize">CacheMaxFileSize</a> <a name="cachemaxfilesize" id="cachemaxfilesize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ij½¬¿¡ ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ´ëÅ©±â (¹ÙÀÌÆ® ´ÜÀ§)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheMaxFileSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheMaxFileSize 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheMaxFileSize</code> Áö½Ã¾î´Â ij½¬¿¡
- ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ´ëÅ©±â¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- CacheMaxFileSize 64000
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheMinFileSize" id="CacheMinFileSize">CacheMinFileSize</a> <a name="cacheminfilesize" id="cacheminfilesize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ij½¬¿¡ ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ¼ÒÅ©±â (¹ÙÀÌÆ® ´ÜÀ§)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheMinFileSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheMinFileSize 1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheMinFileSize</code> Áö½Ã¾î´Â ij½¬¿¡
- ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ¼ÒÅ©±â¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- CacheMinFileSize 64
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheRoot" id="CacheRoot">CacheRoot</a> <a name="cacheroot" id="cacheroot">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ij½¬ ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮 root</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheRoot <var>directory</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheRoot</code> Áö½Ã¾î´Â µð½ºÅ©¿¡¼­
- ij½¬ ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù. <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code> ¸ðµâÀ» ¾ÆÆÄÄ¡ ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀÏÇÏ¿´°Å³ª
- ÀоîµéÀÎ °æ¿ì <em>¹Ýµå½Ã</em> ÀÌ Áö½Ã¾î¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
- <code class="directive">CacheRoot</code>¿¡ °ªÀÌ ¾øÀ¸¸é ¼³Á¤ÆÄÀÏÀ»
- ó¸®ÇÏÁö ¾Ê´Â´Ù. <code class="directive"><a href="#cachedirlevels">CacheDirLevels</a></code>¿Í <code class="directive"><a href="#cachedirlength">CacheDirLength</a></code> Áö½Ã¾î´Â
- ÀÌ Áö½Ã¾î·Î ÁöÁ¤ÇÑ root µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮 ±¸Á¶¸¦ Áö½ÃÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- CacheRoot c:/cacheroot
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheSize" id="CacheSize">CacheSize</a> <a name="cachesize" id="cachesize">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ij½¬·Î »ç¿ëÇÒ ÃÖ´ë µð½ºÅ©°ø°£ (KByte ´ÜÀ§)</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheSize <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheSize 1000000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p><code class="directive">CacheSize</code> Áö½Ã¾î´Â ij½¬·Î »ç¿ëÇÒ
- µð½ºÅ©°ø°£ Å©±â¸¦ KByte (1024 ¹ÙÀÌÆ®) ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù. ÀÌ
- Áö½Ã¾î´Â ij½¬ Å©±â¸¦ Á¦ÇÑÇÏÁö ¾Ê´Â´Ù. °¡ºñÁöÄ÷¢ÅÍ°¡ ij½¬
- »ç¿ë·®ÀÌ ¼³Á¤ÇÑ °ªº¸´Ù À۰Եɶ§±îÁö ÆÄÀÏÀ» Áö¿î´Ù. Ç×»ó
- »ç¿ë°¡´ÉÇÑ µð½ºÅ©°ø°£ º¸´Ù ÀÛÀº °ªÀ» »ç¿ëÇ϶ó.</p>
-
- <div class="example"><p><code>
- CacheSize 5000000
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheTimeMargin" id="CacheTimeMargin">CacheTimeMargin</a> <a name="cachetimemargin" id="cachetimemargin">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¹®¼­¸¦ ij½¬ÇÒ Ãּҽð£ ÇÑ°è</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheTimeMargin <var>?</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CacheTimeMargin ?</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_disk_cache</td></tr>
-</table>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <div class="example"><p><code>
- CacheTimeMargin X
- </code></p></div>
-
- <div class="warning">
- <code class="directive">CacheTimeMargin</code> Áö½Ã¾î´Â ÇöÀç
- ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_disk_cache.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_disk_cache.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_disk_cache.xml b/docs/manual/mod/mod_disk_cache.xml
deleted file mode 100644
index abfff4c44e..0000000000
--- a/docs/manual/mod/mod_disk_cache.xml
+++ /dev/null
@@ -1,347 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_disk_cache.xml.meta">
-
-<name>mod_disk_cache</name>
-<description>Content cache storage manager keyed to URIs</description>
-<status>Experimental</status>
-<sourcefile>mod_disk_cache.c</sourcefile>
-<identifier>disk_cache_module</identifier>
-
-<summary>
- <note type="warning">
- This module is experimental. Documentation is still under development...
- </note>
-
- <p><module>mod_disk_cache</module> implements a disk based storage
- manager. It is primarily of use in conjunction with
- <module>mod_proxy</module>.</p>
-
- <p>Content is stored in and retrieved from the cache using URI based
- keys. Content with access protection is not cached.</p>
-
- <note><title>Note:</title>
- <p><module>mod_disk_cache</module> requires the services of
- <module>mod_cache</module>.</p>
- </note>
-</summary>
-
-<directivesynopsis>
-<name>CacheRoot</name>
-<description>The directory root under which cache files are
-stored</description>
-<syntax>CacheRoot <var>directory</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheRoot</directive> directive defines the name of
- the directory on the disk to contain cache files. If the <module
- >mod_disk_cache</module> module has been loaded or compiled in to the
- Apache server, this directive <em>must</em> be defined. Failing to
- provide a value for <directive>CacheRoot</directive> will result in
- a configuration file processing error. The <directive
- module="mod_disk_cache">CacheDirLevels</directive> and <directive
- module="mod_disk_cache">CacheDirLength</directive> directives define
- the structure of the directories under the specified root directory.</p>
-
- <example>
- CacheRoot c:/cacheroot
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheSize</name>
-<description>The maximum amount of disk space that will be used by the
-cache in KBytes</description>
-<syntax>CacheSize <var>KBytes</var></syntax>
-<default>CacheSize 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheSize</directive> directive sets the desired
- disk space usage of the cache, in KBytes (1024-byte units). This
- directive does not put a hard limit on the size of the cache. The
- garbage collector will delete files until the usage is at or below the
- settings. Always use a value that is lower than the available disk
- space.</p>
-
- <example>
- CacheSize 5000000
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcInterval</name>
-<description>The interval between garbage collection attempts.</description>
-<syntax>CacheGcInterval <var>hours</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheGcInterval</directive> directive specifies the
- number of hours to wait between attempts to free up disk space.</p>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheGcInterval 24<br />
- </example>
-
- <note type="warning">
- The <directive>CacheGcInterval</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDirLevels</name>
-<description>The number of levels of subdirectories in the
-cache.</description>
-<syntax>CacheDirLevels <var>levels</var></syntax>
-<default>CacheDirLevels 3</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheDirLevels</directive> directive sets the number
- of subdirectory levels in the cache. Cached data will be saved this
- many directory levels below the <directive module="mod_disk_cache"
- >CacheRoot</directive> directory.</p>
-
- <note>
- <p>The result of <directive>CacheDirLevels</directive>*
- <directive module="mod_disk_cache">CacheDirLength</directive> must
- not be higher than 20.</p>
- </note>
-
- <example>
- CacheDirLevels 5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDirLength</name>
-<description>The number of characters in subdirectory names</description>
-<syntax>CacheDirLength <var>length</var></syntax>
-<default>CacheDirLength 2</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheDirLength</directive> directive sets the number
- of characters for each subdirectory name in the cache hierarchy.</p>
-
- <note>
- <p>The result of <directive module="mod_disk_cache"
- >CacheDirLevels</directive>* <directive>CacheDirLength</directive>
- must not be higher than 20.</p>
- </note>
-
- <example>
- CacheDirLength 4
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheExpiryCheck</name>
-<description>Indicates if the cache observes Expires dates when seeking
-files</description>
-<syntax>CacheExpiryCheck On|Off</syntax>
-<default>CacheExpiryCheck On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheExpiryCheck Off<br />
- </example>
-
- <note type="warning">
- The <directive>CacheExpiryCheck</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheMinFileSize</name>
-<description>The minimum size (in bytes) of a document to be placed in the
-cache</description>
-<syntax>CacheMinFileSize <var>bytes</var></syntax>
-<default>CacheMinFileSize 1</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheMinFileSize</directive> directive sets the
- minimum size, in bytes, for a document to be considered for storage
- in the cache.</p>
-
- <example>
- CacheMinFileSize 64
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheMaxFileSize</name>
-<description>The maximum size (in bytes) of a document to be placed in the
-cache</description>
-<syntax>CacheMaxFileSize <var>bytes</var></syntax>
-<default>CacheMaxFileSize 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CacheMaxFileSize</directive> directive sets the
- maximum size, in bytes, for a document to be considered for storage in
- the cache.</p>
-
- <example>
- CacheMaxFileSize 64000
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheTimeMargin</name>
-<description>The minimum time margin to cache a document</description>
-<syntax>CacheTimeMargin <var>?</var></syntax>
-<default>CacheTimeMargin ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheTimeMargin X
- </example>
-
- <note type="warning">
- The <directive>CacheTimeMargin</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcDaily</name>
-<description>The recurring time each day for garbage collection to be run.
-(24 hour clock)</description>
-<syntax>CacheGcDaily <var>time</var></syntax>
-<default>CacheGcDaily ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheGcDaily 23:59
- </example>
-
- <note type="warning">
- The <directive>CacheGcDaily</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcUnused</name>
-<description>The time to retain unreferenced cached files that match a
-URL.</description>
-<syntax>CacheGcUnused <var>hours</var> <var>url-string</var></syntax>
-<default>CacheGcUnused ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheGcUnused 12 /local_images
- </example>
-
- <note type="warning">
- The <directive>CacheGcUnused</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcClean</name>
-<description>The time to retain unchanged cached files that match a
-URL</description>
-<syntax>CacheGcClean <var>hours</var> <var>url-string</var></syntax>
-<default>CacheGcClean ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheGcClean 12 /daily_scripts
- </example>
-
- <note type="warning">
- The <directive>CacheGcClean</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcMemUsage</name>
-<description>The maximum kilobytes of memory used for garbage
-collection</description>
-<syntax>CacheGcMemUsage <var>KBytes</var></syntax>
-<default>CacheGcMemUsage ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>More detail will be added here, when the function is implemented.</p>
-
- <example>
- CacheGcMemUsage 16
- </example>
-
- <note type="warning">
- The <directive>CacheGcMemUsage</directive> directive is currently
- <em>not</em> implemented.
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_disk_cache.xml.ko b/docs/manual/mod/mod_disk_cache.xml.ko
deleted file mode 100644
index 6c6e58fd20..0000000000
--- a/docs/manual/mod/mod_disk_cache.xml.ko
+++ /dev/null
@@ -1,334 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_disk_cache.xml.meta">
-
-<name>mod_disk_cache</name>
-<description>Content cache storage manager keyed to URIs</description>
-<status>Experimental</status>
-<sourcefile>mod_disk_cache.c</sourcefile>
-<identifier>disk_cache_module</identifier>
-
-<summary>
- <note type="warning">
- ÀÌ ¸ðµâÀº ½ÇÇèÀûÀÎ »óÅÂÀÌ´Ù. ¹®¼­´Â ¾ÆÁ÷ ÀÛ¾÷ÁßÀÌ´Ù...
- </note>
-
- <p><module>mod_disk_cache</module>´Â µð½ºÅ©±â¹Ý ÀúÀå°ü¸®ÀÚ¸¦
- ±¸ÇöÇÑ´Ù. ÀÌ ¸ðµâÀº ±âº»ÀûÀ¸·Î <module>mod_proxy</module>¿Í
- °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
- <p>³»¿ëÀ» URI¸¦ Åä´ë·Î ¸¸µç Å°·Î ij½¬¿¡ ÀúÀåÇÏ°í °¡Á®¿Â´Ù.
- Á¢±Ùº¸È£°¡ µÈ ³»¿ëÀº ij½¬ÇÏÁö¾Ê´Â´Ù.</p>
-
- <note><title>ÁÖÀÇ:</title>
- <p><module>mod_disk_cache</module>´Â
- <module>mod_cache</module>°¡ ÇÊ¿äÇÏ´Ù.</p>
- </note>
-</summary>
-
-<directivesynopsis>
-<name>CacheRoot</name>
-<description>ij½¬ ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮 root</description>
-<syntax>CacheRoot <var>directory</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheRoot</directive> Áö½Ã¾î´Â µð½ºÅ©¿¡¼­
- ij½¬ ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù. <module
- >mod_disk_cache</module> ¸ðµâÀ» ¾ÆÆÄÄ¡ ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀÏÇÏ¿´°Å³ª
- ÀоîµéÀÎ °æ¿ì <em>¹Ýµå½Ã</em> ÀÌ Áö½Ã¾î¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
- <directive>CacheRoot</directive>¿¡ °ªÀÌ ¾øÀ¸¸é ¼³Á¤ÆÄÀÏÀ»
- ó¸®ÇÏÁö ¾Ê´Â´Ù. <directive
- module="mod_disk_cache">CacheDirLevels</directive>¿Í <directive
- module="mod_disk_cache">CacheDirLength</directive> Áö½Ã¾î´Â
- ÀÌ Áö½Ã¾î·Î ÁöÁ¤ÇÑ root µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮 ±¸Á¶¸¦ Áö½ÃÇÑ´Ù.</p>
-
- <example>
- CacheRoot c:/cacheroot
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheSize</name>
-<description>ij½¬·Î »ç¿ëÇÒ ÃÖ´ë µð½ºÅ©°ø°£ (KByte ´ÜÀ§)</description>
-<syntax>CacheSize <var>KBytes</var></syntax>
-<default>CacheSize 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheSize</directive> Áö½Ã¾î´Â ij½¬·Î »ç¿ëÇÒ
- µð½ºÅ©°ø°£ Å©±â¸¦ KByte (1024 ¹ÙÀÌÆ®) ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù. ÀÌ
- Áö½Ã¾î´Â ij½¬ Å©±â¸¦ Á¦ÇÑÇÏÁö ¾Ê´Â´Ù. °¡ºñÁöÄ÷¢ÅÍ°¡ ij½¬
- »ç¿ë·®ÀÌ ¼³Á¤ÇÑ °ªº¸´Ù À۰Եɶ§±îÁö ÆÄÀÏÀ» Áö¿î´Ù. Ç×»ó
- »ç¿ë°¡´ÉÇÑ µð½ºÅ©°ø°£ º¸´Ù ÀÛÀº °ªÀ» »ç¿ëÇ϶ó.</p>
-
- <example>
- CacheSize 5000000
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcInterval</name>
-<description>°¡ºñÁöÄ÷¢Å͸¦ ½ÇÇàÇÏ´Â °£°Ý.</description>
-<syntax>CacheGcInterval <var>hours</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheGcInterval</directive> Áö½Ã¾î´Â Ä«ºñÁöÄ÷¢ÅÍ°¡
- µð½ºÅ©°ø°£À» ºñ¿ì´Â ½Ã°£ °£°ÝÀ» ½Ã°£´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.</p>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheGcInterval 24<br />
- </example>
-
- <note type="warning">
- <directive>CacheGcInterval</directive> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDirLevels</name>
-<description>ij½¬ÀÇ ÇÏÀ§µð·ºÅ丮 ±íÀÌ.</description>
-<syntax>CacheDirLevels <var>levels</var></syntax>
-<default>CacheDirLevels 3</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheDirLevels</directive> Áö½Ã¾î´Â ij½¬ÀÇ
- ÇÏÀ§µð·ºÅ丮 ±íÀ̸¦ ÁöÁ¤ÇÑ´Ù. ij½¬µÈ ÀڷḦ <directive
- module="mod_disk_cache">CacheRoot</directive> µð·ºÅ丮
- ¾Æ·¡ ÀÌ ±íÀ̱îÁö ÀúÀåÇÑ´Ù.</p>
-
- <note>
- <p><directive>CacheDirLevels</directive>¿Í <directive
- module="mod_disk_cache">CacheDirLength</directive>¸¦
- °öÇÏ¿© 20 º¸´Ù Å©¸é ¾ÈµÈ´Ù.</p>
- </note>
-
- <example>
- CacheDirLevels 5
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheDirLength</name>
-<description>ÇÏÀ§µð·ºÅ丮¸íÀÇ ¹®ÀÚ°³¼ö</description>
-<syntax>CacheDirLength <var>length</var></syntax>
-<default>CacheDirLength 2</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheDirLength</directive> Áö½Ã¾î´Â ij½¬
- °èÃþ±¸Á¶¿¡¼­ °¢ ÇÏÀ§µð·ºÅ丮¸íÀÇ ¹®ÀÚ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.</p>
-
- <note>
- <p><directive module="mod_disk_cache">CacheDirLevels</directive>¿Í
- <directive>CacheDirLength</directive>¸¦ °öÇÏ¿© 20 º¸´Ù
- Å©¸é ¾ÈµÈ´Ù.</p>
- </note>
-
- <example>
- CacheDirLength 4
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheExpiryCheck</name>
-<description>ij½¬¿¡¼­ ÆÄÀÏÀ» ãÀ»¶§ ¸¸±â½Ã°£À» °í·ÁÇÒÁö ¿©ºÎ</description>
-<syntax>CacheExpiryCheck On|Off</syntax>
-<default>CacheExpiryCheck On</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheExpiryCheck Off<br />
- </example>
-
- <note type="warning">
- <directive>CacheExpiryCheck</directive> Áö½Ã¾î´Â ÇöÀç
- ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheMinFileSize</name>
-<description>ij½¬¿¡ ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ¼ÒÅ©±â (¹ÙÀÌÆ® ´ÜÀ§)</description>
-<syntax>CacheMinFileSize <var>bytes</var></syntax>
-<default>CacheMinFileSize 1</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheMinFileSize</directive> Áö½Ã¾î´Â ij½¬¿¡
- ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ¼ÒÅ©±â¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.</p>
-
- <example>
- CacheMinFileSize 64
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheMaxFileSize</name>
-<description>ij½¬¿¡ ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ´ëÅ©±â (¹ÙÀÌÆ® ´ÜÀ§)</description>
-<syntax>CacheMaxFileSize <var>bytes</var></syntax>
-<default>CacheMaxFileSize 1000000</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CacheMaxFileSize</directive> Áö½Ã¾î´Â ij½¬¿¡
- ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ´ëÅ©±â¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.</p>
-
- <example>
- CacheMaxFileSize 64000
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheTimeMargin</name>
-<description>¹®¼­¸¦ ij½¬ÇÒ Ãּҽð£ ÇÑ°è</description>
-<syntax>CacheTimeMargin <var>?</var></syntax>
-<default>CacheTimeMargin ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheTimeMargin X
- </example>
-
- <note type="warning">
- <directive>CacheTimeMargin</directive> Áö½Ã¾î´Â ÇöÀç
- ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcDaily</name>
-<description>¸ÅÀÏ °¡ºñÁöÄ÷¢Å͸¦ ½ÇÇàÇÒ ¹Ýº¹ ½Ã°£ (24½Ã ½Ã°è)</description>
-<syntax>CacheGcDaily <var>time</var></syntax>
-<default>CacheGcDaily ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheGcDaily 23:59
- </example>
-
- <note type="warning">
- <directive>CacheGcDaily</directive> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcUnused</name>
-<description>URL¿¡ ÇØ´çÇÏ´Â ÂüÁ¶µÇÁö¾ÊÀº ij½¬ÆÄÀÏÀ» À¯ÁöÇÒ ±â°£.</description>
-<syntax>CacheGcUnused <var>hours</var> <var>url-string</var></syntax>
-<default>CacheGcUnused ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheGcUnused 12 /local_images
- </example>
-
- <note type="warning">
- <directive>CacheGcUnused</directive> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcClean</name>
-<description>URL¿¡ ÇØ´çÇÏ´Â º¯ÇÏÁö¾ÊÀº ij½¬ÆÄÀÏÀ» À¯ÁöÇÒ ½Ã°£</description>
-<syntax>CacheGcClean <var>hours</var> <var>url-string</var></syntax>
-<default>CacheGcClean ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheGcClean 12 /daily_scripts
- </example>
-
- <note type="warning">
- <directive>CacheGcClean</directive> Áö½Ã¾î´Â ÇöÀç ±¸ÇöµÇÁö
- <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheGcMemUsage</name>
-<description>°¡ºñÁöÄ÷¢ÅÍ°¡ »ç¿ëÇÒ ÃÖ´ë ¸Þ¸ð¸®·® (kilobyte ´ÜÀ§)</description>
-<syntax>CacheGcMemUsage <var>KBytes</var></syntax>
-<default>CacheGcMemUsage ?</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>ÇÔ¼ö°¡ ±¸ÇöµÇ¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀÌ ¿©±â ³ª¿Â´Ù.</p>
-
- <example>
- CacheGcMemUsage 16
- </example>
-
- <note type="warning">
- <directive>CacheGcMemUsage</directive> Áö½Ã¾î´Â ÇöÀç
- ±¸ÇöµÇÁö <em>¾Ê¾Ò´Ù</em>.
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_disk_cache.xml.meta b/docs/manual/mod/mod_disk_cache.xml.meta
deleted file mode 100644
index 47d0202d14..0000000000
--- a/docs/manual/mod/mod_disk_cache.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_disk_cache</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_echo.html b/docs/manual/mod/mod_echo.html
deleted file mode 100644
index f4db4ba0ed..0000000000
--- a/docs/manual/mod/mod_echo.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_echo.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_echo.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_echo.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_echo.html.en b/docs/manual/mod/mod_echo.html.en
deleted file mode 100644
index 2736ed3a7c..0000000000
--- a/docs/manual/mod/mod_echo.html.en
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_echo - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_echo</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_echo.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_echo.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_echo.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>A simple echo server to illustrate protocol
-modules</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>echo_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_echo.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides an example protocol module to illustrate the
- concept. It provides a simple echo server. Telnet to it and type
- stuff, and it will echo it.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a> <a name="protocolecho" id="protocolecho">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Turn the echo server on or off</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProtocolEcho On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_echo</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProtocolEcho is only available in 2.0 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">ProtocolEcho</code> directive enables or
- disables the echo server.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProtocolEcho On
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_echo.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_echo.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_echo.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_echo.html.ja.euc-jp b/docs/manual/mod/mod_echo.html.ja.euc-jp
deleted file mode 100644
index 413bbcdd41..0000000000
--- a/docs/manual/mod/mod_echo.html.ja.euc-jp
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_echo - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_echo</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_echo.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_echo.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥×¥í¥È¥³¥ë¥â¥¸¥å¡¼¥ë¤Î³µÍפò¼¨¤¹¤¿¤á¤Îñ½ã¤Ê¥¨¥³¡¼¥µ¡¼¥Ð
-</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>echo_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_echo.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 °Ê¹ß</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>Ëܥ⥸¥å¡¼¥ë¤Ï¥³¥ó¥»¥×¥È¤òÅÁ¤¨¤ë¤¿¤á¤Î¥×¥í¥È¥³¥ë¥â¥¸¥å¡¼¥ë¤Î
- ¼ÂÁõÎã¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£Ã±½ã¤Ê¥¨¥³¡¼¥µ¡¼¥Ð¤òÄ󶡤·¤Þ¤¹¡£
- Telnet ¤ÇÀܳ¤·¡¢Ê¸»úÎó¤òÁ÷¿®¤¹¤ë¤È¡¢¥¨¥³¡¼¤òÊÖ¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a> <a name="protocolecho" id="protocolecho">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¨¥³¡¼¥µ¡¼¥Ð¤ÎÍ­¸ú̵¸ú¤òÀßÄꤷ¤Þ¤¹¡£</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ProtocolEcho On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_echo</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 °Ê¹ß</td></tr>
-</table>
- <p><code class="directive">ProtocolEcho</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- ¥¨¥³¡¼¥µ¡¼¥Ð¤ÎÍ­¸ú̵¸ú¤òÀßÄꤷ¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ProtocolEcho On
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_echo.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_echo.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_echo.html.ko.euc-kr b/docs/manual/mod/mod_echo.html.ko.euc-kr
deleted file mode 100644
index eacf259b04..0000000000
--- a/docs/manual/mod/mod_echo.html.ko.euc-kr
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_echo - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_echo</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_echo.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_echo.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÇÁ·ÎÅäÄÝ ¸ðµâÀ» ¼³¸íÇϱâÀ§ÇÑ °£´ÜÇÑ echo ¼­¹ö</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>echo_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_echo.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>Apache 2.0 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ÇÁ·ÎÅäÄÝ ¸ðµâÀÇ °³³äÀ» ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ÀÌ´Ù.
- ÀÌ ¸ðµâÀº °£´ÜÇÑ echo ¼­¹ö¸¦ ±¸ÇöÇÑ´Ù. ÀÌ ¼­¹ö·Î telnetÇÏ¿©
- ¹«¾ð°¡¸¦ ÀÔ·ÂÇϸé, ¼­¹ö´Â ÀÔ·ÂÇÑ ³»¿ëÀÌ ±×´ë·Î ¹ÝȯÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#protocolecho">ProtocolEcho</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProtocolEcho" id="ProtocolEcho">ProtocolEcho</a> <a name="protocolecho" id="protocolecho">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>echo ¼­¹ö¸¦ Å°°í ²ö´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ProtocolEcho On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_echo</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>ProtocolEcho´Â 2.0 ÀÌÈÄ¿¡¸¸ ÀÖ´Ù.</td></tr>
-</table>
- <p><code class="directive">ProtocolEcho</code> Áö½Ã¾î´Â echo ¼­¹ö¸¦
- Å°°í ²ö´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ProtocolEcho On
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_echo.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_echo.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_echo.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_echo.xml b/docs/manual/mod/mod_echo.xml
deleted file mode 100644
index 4688257898..0000000000
--- a/docs/manual/mod/mod_echo.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_echo.xml.meta">
-
-<name>mod_echo</name>
-<description>A simple echo server to illustrate protocol
-modules</description>
-<status>Experimental</status>
-<sourcefile>mod_echo.c</sourcefile>
-<identifier>echo_module</identifier>
-<compatibility>Available in Apache 2.0 and later</compatibility>
-
-<summary>
- <p>This module provides an example protocol module to illustrate the
- concept. It provides a simple echo server. Telnet to it and type
- stuff, and it will echo it.</p>
-</summary>
-
-<directivesynopsis>
-
-<name>ProtocolEcho</name>
-<description>Turn the echo server on or off</description>
-<syntax>ProtocolEcho On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>ProtocolEcho is only available in 2.0 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>ProtocolEcho</directive> directive enables or
- disables the echo server.</p>
-
- <example><title>Example</title>
- ProtocolEcho On
- </example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_echo.xml.ja b/docs/manual/mod/mod_echo.xml.ja
deleted file mode 100644
index 1bb59553d6..0000000000
--- a/docs/manual/mod/mod_echo.xml.ja
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_echo.xml.meta">
-
-<name>mod_echo</name>
-<description>$B%W%m%H%3%k%b%8%e!<%k$N35MW$r<($9$?$a$NC1=c$J%(%3!<%5!<%P(B
-</description>
-<status>Experimental</status>
-<sourcefile>mod_echo.c</sourcefile>
-<identifier>echo_module</identifier>
-<compatibility>Apache 2.0 $B0J9_(B</compatibility>
-
-<summary>
- <p>$BK\%b%8%e!<%k$O%3%s%;%W%H$rEA$($k$?$a$N%W%m%H%3%k%b%8%e!<%k$N(B
- $B<BAuNc$H$J$C$F$$$^$9!#C1=c$J%(%3!<%5!<%P$rDs6!$7$^$9!#(B
- Telnet $B$G@\B3$7!"J8;zNs$rAw?.$9$k$H!"%(%3!<$rJV$7$^$9!#(B</p>
-</summary>
-
-<directivesynopsis>
-
-<name>ProtocolEcho</name>
-<description>$B%(%3!<%5!<%P$NM-8zL58z$r@_Dj$7$^$9!#(B</description>
-<syntax>ProtocolEcho On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>Apache 2.0 $B0J9_(B</compatibility>
-
-<usage>
- <p><directive>ProtocolEcho</directive> $B%G%#%l%/%F%#%V$G(B
- $B%(%3!<%5!<%P$NM-8zL58z$r@_Dj$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ProtocolEcho On
- </example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_echo.xml.ko b/docs/manual/mod/mod_echo.xml.ko
deleted file mode 100644
index f092195eb5..0000000000
--- a/docs/manual/mod/mod_echo.xml.ko
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_echo.xml.meta">
-
-<name>mod_echo</name>
-<description>ÇÁ·ÎÅäÄÝ ¸ðµâÀ» ¼³¸íÇϱâÀ§ÇÑ °£´ÜÇÑ echo ¼­¹ö</description>
-<status>Experimental</status>
-<sourcefile>mod_echo.c</sourcefile>
-<identifier>echo_module</identifier>
-<compatibility>Apache 2.0 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ÇÁ·ÎÅäÄÝ ¸ðµâÀÇ °³³äÀ» ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ÀÌ´Ù.
- ÀÌ ¸ðµâÀº °£´ÜÇÑ echo ¼­¹ö¸¦ ±¸ÇöÇÑ´Ù. ÀÌ ¼­¹ö·Î telnetÇÏ¿©
- ¹«¾ð°¡¸¦ ÀÔ·ÂÇϸé, ¼­¹ö´Â ÀÔ·ÂÇÑ ³»¿ëÀÌ ±×´ë·Î ¹ÝȯÇÑ´Ù.</p>
-</summary>
-
-<directivesynopsis>
-
-<name>ProtocolEcho</name>
-<description>echo ¼­¹ö¸¦ Å°°í ²ö´Ù</description>
-<syntax>ProtocolEcho On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>ProtocolEcho´Â 2.0 ÀÌÈÄ¿¡¸¸ ÀÖ´Ù.</compatibility>
-
-<usage>
- <p><directive>ProtocolEcho</directive> Áö½Ã¾î´Â echo ¼­¹ö¸¦
- Å°°í ²ö´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- ProtocolEcho On
- </example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_echo.xml.meta b/docs/manual/mod/mod_echo.xml.meta
deleted file mode 100644
index 88f36723c9..0000000000
--- a/docs/manual/mod/mod_echo.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_echo</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_env.html b/docs/manual/mod/mod_env.html
deleted file mode 100644
index 00d518a79e..0000000000
--- a/docs/manual/mod/mod_env.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_env.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_env.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_env.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_env.html.en b/docs/manual/mod/mod_env.html.en
deleted file mode 100644
index 92d6828354..0000000000
--- a/docs/manual/mod/mod_env.html.en
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_env - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_env</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_env.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Modifies the environment which is passed to CGI scripts and
-SSI pages</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>env_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_env.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module allows for control of the environment that will
- be provided to CGI scripts and SSI pages. Environment variables
- may be passed from the shell which invoked the httpd process.
- Alternatively, environment variables may be set or unset within
- the configuration process.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#passenv">PassEnv</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenv">SetEnv</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#unsetenv">UnsetEnv</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../env.html">Environment Variables</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Passes environment variables from the shell</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_env</td></tr>
-</table>
- <p>Specifies one or more environment variables to pass to CGI
- scripts and SSI pages from the environment of the shell which
- invoked the httpd process.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- PassEnv LD_LIBRARY_PATH
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnv" id="SetEnv">SetEnv</a> <a name="setenv" id="setenv">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets environment variables</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetEnv <var>env-variable</var> <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_env</td></tr>
-</table>
- <p>Sets an environment variable, which is then passed on to CGI
- scripts and SSI pages.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SetEnv SPECIAL_PATH /foo/bin
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UnsetEnv" id="UnsetEnv">UnsetEnv</a> <a name="unsetenv" id="unsetenv">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes variables from the environment</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_env</td></tr>
-</table>
- <p>Removes one or more environment variables from those passed
- on to CGI scripts and SSI pages.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- UnsetEnv LD_LIBRARY_PATH
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_env.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_env.html.ja.euc-jp b/docs/manual/mod/mod_env.html.ja.euc-jp
deleted file mode 100644
index 017b099aa5..0000000000
--- a/docs/manual/mod/mod_env.html.ja.euc-jp
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_env - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_env</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_env.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥¹¥¯¥ê¥×¥ÈµÚ¤Ó SSI
-¥Ú¡¼¥¸¤ËÅϤµ¤ì¤ë´Ä¶­ÊÑ¿ô¤òÊѹ¹¤¹¤ëµ¡Ç½¤òÄ󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>env_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_env.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¤è¤ê CGI ¥¹¥¯¥ê¥×¥È¤È SSI
- ¥Ú¡¼¥¸¤ËŬÍѤµ¤ì¤ë´Ä¶­ÊÑ¿ô¤òÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ´Ä¶­ÊÑ¿ô¤Ï httpd ¥×¥í¥»¥¹¤òµ¯Æ°¤·¤¿¥·¥§¥ë¤«¤éÅϤµ¤ì¤Þ¤¹¡£¤Þ¤¿¡¢
- ÀßÄê¥Õ¥¡¥¤¥ë¤Ç´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¤¿¤ê¡¢ºï½ü¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- </p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#passenv">PassEnv</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenv">SetEnv</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#unsetenv">UnsetEnv</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../env.html">´Ä¶­ÊÑ¿ô</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥·¥§¥ë¤«¤é¤Î´Ä¶­ÊÑ¿ô¤òÅϤ¹</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_env</td></tr>
-</table>
-
- <p>httpd ¥×¥í¥»¥¹¤òµ¯Æ°¤·¤¿¥·¥§¥ë¤Î´Ä¶­¤«¤é CGI ¥¹¥¯¥ê¥×¥È¤È
- SSI ¥Ú¡¼¥¸¤ËÅϤ¹´Ä¶­ÊÑ¿ô¤ò°ì¤Ä°Ê¾å»ØÄꤷ¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- PassEnv LD_LIBRARY_PATH
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnv" id="SetEnv">SetEnv</a> <a name="setenv" id="setenv">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SetEnv <var>env-variable</var> <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_env</td></tr>
-</table>
- <p>´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¡¢¤½¤ì¤ò CGI ¥¹¥¯¥ê¥×¥È¤È SSI
- ¥Ú¡¼¥¸¤ËÅϤ¹¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- SetEnv SPECIAL_PATH /foo/bin
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UnsetEnv" id="UnsetEnv">UnsetEnv</a> <a name="unsetenv" id="unsetenv">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>´Ä¶­¤«¤éÊÑ¿ô¤ò¼è¤ê½ü¤¯</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_env</td></tr>
-</table>
- <p>CGI ¥¹¥¯¥ê¥×¥È¤È SSI
- ¥Ú¡¼¥¸¤ËÅϤµ¤ì¤ë´Ä¶­ÊÑ¿ô¤«¤é»ØÄꤵ¤ì¤¿´Ä¶­ÊÑ¿ô¤ò¼è¤ê½ü¤­¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- UnsetEnv LD_LIBRARY_PATH
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_env.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_env.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_env.html.ko.euc-kr b/docs/manual/mod/mod_env.html.ko.euc-kr
deleted file mode 100644
index 6324d042d0..0000000000
--- a/docs/manual/mod/mod_env.html.ko.euc-kr
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_env - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_env</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_env.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦
-¼öÁ¤ÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>env_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_env.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦
- Á¶ÀýÇÑ´Ù. À¥¼­¹ö¸¦ ½ÃÀÛÇÑ ½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.
- ¾Æ´Ï¸é ¼³Á¤°úÁ¤Áß¿¡ ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ°í Á¦°ÅÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#passenv">PassEnv</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenv">SetEnv</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#unsetenv">UnsetEnv</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../env.html">ȯ°æº¯¼ö</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="PassEnv" id="PassEnv">PassEnv</a> <a name="passenv" id="passenv">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Â´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_env</td></tr>
-</table>
- <p>À¥¼­¹ö¸¦ ½ÇÇàÇÑ ½©ÀÇ Æ¯Á¤ ȯ°æº¯¼ö¸¦ CGI ½ºÅ©¸³Æ®³ª
- SSI ÆäÀÌÁö·Î Àü´ÞÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- PassEnv LD_LIBRARY_PATH
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnv" id="SetEnv">SetEnv</a> <a name="setenv" id="setenv">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>SetEnv <var>env-variable</var> <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_env</td></tr>
-</table>
- <p>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- SetEnv SPECIAL_PATH /foo/bin
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UnsetEnv" id="UnsetEnv">UnsetEnv</a> <a name="unsetenv" id="unsetenv">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ȯ°æº¯¼ö¸¦ Á¦°ÅÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_env</td></tr>
-</table>
- <p>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ ȯ°æº¯¼ö¸¦ Àü´ÞÇÏÁö ¾Ê´Â´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- UnsetEnv LD_LIBRARY_PATH
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_env.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_env.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_env.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_env.xml b/docs/manual/mod/mod_env.xml
deleted file mode 100644
index 58b0bb9619..0000000000
--- a/docs/manual/mod/mod_env.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_env.xml.meta">
-
-<name>mod_env</name>
-<description>Modifies the environment which is passed to CGI scripts and
-SSI pages</description>
-<status>Base</status>
-<sourcefile>mod_env.c</sourcefile>
-<identifier>env_module</identifier>
-<summary>
- <p>This module allows for control of the environment that will
- be provided to CGI scripts and SSI pages. Environment variables
- may be passed from the shell which invoked the httpd process.
- Alternatively, environment variables may be set or unset within
- the configuration process.</p>
-</summary>
-<seealso><a href="../env.html">Environment Variables</a></seealso>
-
-<directivesynopsis>
-<name>PassEnv</name>
-<description>Passes environment variables from the shell</description>
-<syntax>PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Specifies one or more environment variables to pass to CGI
- scripts and SSI pages from the environment of the shell which
- invoked the httpd process.</p>
-
- <example><title>Example</title>
- PassEnv LD_LIBRARY_PATH
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnv</name>
-<description>Sets environment variables</description>
-<syntax>SetEnv <var>env-variable</var> <var>value</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Sets an environment variable, which is then passed on to CGI
- scripts and SSI pages.</p>
-
- <example><title>Example</title>
- SetEnv SPECIAL_PATH /foo/bin
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UnsetEnv</name>
-<description>Removes variables from the environment</description>
-<syntax>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Removes one or more environment variables from those passed
- on to CGI scripts and SSI pages.</p>
-
- <example><title>Example</title>
- UnsetEnv LD_LIBRARY_PATH
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_env.xml.ja b/docs/manual/mod/mod_env.xml.ja
deleted file mode 100644
index 0d82984090..0000000000
--- a/docs/manual/mod/mod_env.xml.ja
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_env.xml.meta">
-
-<name>mod_env</name>
-<description>CGI $B%9%/%j%W%H5Z$S(B SSI
-$B%Z!<%8$KEO$5$l$k4D6-JQ?t$rJQ99$9$k5!G=$rDs6!$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_env.c</sourcefile>
-<identifier>env_module</identifier>
-<summary>
- <p>$B$3$N%b%8%e!<%k$K$h$j(B CGI $B%9%/%j%W%H$H(B SSI
- $B%Z!<%8$KE,MQ$5$l$k4D6-JQ?t$r@)8f$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
- $B4D6-JQ?t$O(B httpd $B%W%m%;%9$r5/F0$7$?%7%'%k$+$iEO$5$l$^$9!#$^$?!"(B
- $B@_Dj%U%!%$%k$G4D6-JQ?t$r@_Dj$7$?$j!":o=|$7$?$j$9$k$3$H$,$G$-$^$9!#(B
- </p>
-</summary>
-<seealso><a href="../env.html">$B4D6-JQ?t(B</a></seealso>
-
-<directivesynopsis>
-<name>PassEnv</name>
-<description>$B%7%'%k$+$i$N4D6-JQ?t$rEO$9(B</description>
-<syntax>PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-
- <p>httpd $B%W%m%;%9$r5/F0$7$?%7%'%k$N4D6-$+$i(B CGI $B%9%/%j%W%H$H(B
- SSI $B%Z!<%8$KEO$94D6-JQ?t$r0l$D0J>e;XDj$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- PassEnv LD_LIBRARY_PATH
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnv</name>
-<description>$B4D6-JQ?t$r@_Dj$9$k(B</description>
-<syntax>SetEnv <var>env-variable</var> <var>value</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B4D6-JQ?t$r@_Dj$7!"$=$l$r(B CGI $B%9%/%j%W%H$H(B SSI
- $B%Z!<%8$KEO$9$h$&$K$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- SetEnv SPECIAL_PATH /foo/bin
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UnsetEnv</name>
-<description>$B4D6-$+$iJQ?t$r<h$j=|$/(B</description>
-<syntax>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>CGI $B%9%/%j%W%H$H(B SSI
- $B%Z!<%8$KEO$5$l$k4D6-JQ?t$+$i;XDj$5$l$?4D6-JQ?t$r<h$j=|$-$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- UnsetEnv LD_LIBRARY_PATH
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_env.xml.ko b/docs/manual/mod/mod_env.xml.ko
deleted file mode 100644
index 5e1ec19fb4..0000000000
--- a/docs/manual/mod/mod_env.xml.ko
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_env.xml.meta">
-
-<name>mod_env</name>
-<description>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦
-¼öÁ¤ÇÑ´Ù</description>
-<status>Base</status>
-<sourcefile>mod_env.c</sourcefile>
-<identifier>env_module</identifier>
-<summary>
- <p>ÀÌ ¸ðµâÀº CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦
- Á¶ÀýÇÑ´Ù. À¥¼­¹ö¸¦ ½ÃÀÛÇÑ ½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.
- ¾Æ´Ï¸é ¼³Á¤°úÁ¤Áß¿¡ ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ°í Á¦°ÅÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-<seealso><a href="../env.html">ȯ°æº¯¼ö</a></seealso>
-
-<directivesynopsis>
-<name>PassEnv</name>
-<description>½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Â´Ù</description>
-<syntax>PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>À¥¼­¹ö¸¦ ½ÇÇàÇÑ ½©ÀÇ Æ¯Á¤ ȯ°æº¯¼ö¸¦ CGI ½ºÅ©¸³Æ®³ª
- SSI ÆäÀÌÁö·Î Àü´ÞÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- PassEnv LD_LIBRARY_PATH
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnv</name>
-<description>ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</description>
-<syntax>SetEnv <var>env-variable</var> <var>value</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ Àü´ÞÇÒ È¯°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- SetEnv SPECIAL_PATH /foo/bin
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UnsetEnv</name>
-<description>ȯ°æº¯¼ö¸¦ Á¦°ÅÇÑ´Ù</description>
-<syntax>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>CGI ½ºÅ©¸³Æ®³ª SSI ÆäÀÌÁö¿¡ ȯ°æº¯¼ö¸¦ Àü´ÞÇÏÁö ¾Ê´Â´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- UnsetEnv LD_LIBRARY_PATH
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_env.xml.meta b/docs/manual/mod/mod_env.xml.meta
deleted file mode 100644
index 1d2f660783..0000000000
--- a/docs/manual/mod/mod_env.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_env</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_example.html b/docs/manual/mod/mod_example.html
deleted file mode 100644
index 41b1d56e32..0000000000
--- a/docs/manual/mod/mod_example.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_example.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_example.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_example.html.en b/docs/manual/mod/mod_example.html.en
deleted file mode 100644
index 6350dbfc7f..0000000000
--- a/docs/manual/mod/mod_example.html.en
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_example - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_example</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_example.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_example.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Illustrates the Apache module API</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>example_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_example.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>Some files in the <code>modules/experimental</code> directory
- under the Apache distribution directory tree are provided as an
- example to those that wish to write modules that use the Apache
- API.</p>
-
- <p>The main file is <code>mod_example.c</code>, which
- illustrates all the different callback mechanisms and call
- syntaxes. By no means does an add-on module need to include
- routines for all of the callbacks - quite the contrary!</p>
-
- <p>The example module is an actual working module. If you link
- it into your server, enable the "example-handler" handler for a
- location, and then browse to that location, you will see a
- display of some of the tracing the example module did as the
- various callbacks were made.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Example</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#compiling">Compiling the example module</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#using">Using the <code>mod_example</code> Module</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compiling" id="compiling">Compiling the example module</a></h2>
-
- <p>To include the example module in your server, follow the
- steps below:</p>
-
- <ol>
- <li>
- Run <code>configure</code> with <code>--enable-example</code>
- option.</li>
-
- <li>Make the server (run "<code>make</code>").</li>
- </ol>
-
- <p>To add another module of your own:</p>
-
- <ol class="up-A">
- <li><code>cp modules/experimental/mod_example.c
- modules/new_module/<em>mod_myexample.c</em></code></li>
-
- <li>Modify the file.</li>
-
- <li>Create <code>modules/new_module/config.m4</code>.
- <ol>
- <li>Add <code>APACHE_MODPATH_INIT(new_module)</code>.</li>
- <li>Copy APACHE_MODULE line with "example" from
- <code>modules/experimental/config.m4</code>.</li>
- <li>Replace the first argument "example" with <em>myexample</em>.</li>
- <li>Replace the second argument with brief description of your module.
- It will be used in <code>configure --help</code>.</li>
- <li>If your module needs additional C compiler flags, linker flags or
- libraries, add them to CFLAGS, LDFLAGS and LIBS accordingly.
- See other <code>config.m4</code> files in modules directory for
- examples.</li>
- <li>Add <code>APACHE_MODPATH_FINISH</code>.</li>
- </ol>
- </li>
-
- <li>Create <code>module/new_module/Makefile.in</code>.
- If your module doesn't need special build instructions,
- all you need to have in that file is
- <code>include $(top_srcdir)/build/special.mk</code>.</li>
-
- <li>Run ./buildconf from the top-level directory.</li>
-
- <li>Build the server with --enable-myexample</li>
-
- </ol>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Using the <code>mod_example</code> Module</a></h2>
-
- <p>To activate the example module, include a block similar to
- the following in your <code>httpd.conf</code> file:</p>
-<div class="example"><p><code>
- &lt;Location /example-info&gt;<br />
- SetHandler example-handler<br />
- &lt;/Location&gt;
-</code></p></div>
-
- <p>As an alternative, you can put the following into a <a href="core.html#accessfilename"><code>.htaccess</code></a> file
- and then request the file "test.example" from that location:</p>
-<div class="example"><p><code>
- AddHandler example-handler .example
-</code></p></div>
-
- <p>After reloading/restarting your server, you should be able
- to browse to this location and see the brief display mentioned
- earlier.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Example" id="Example">Example</a> <a name="example" id="example">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Demonstration directive to illustrate the Apache module
-API</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Example</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_example</td></tr>
-</table>
- <p>The <code class="directive">Example</code> directive just sets a demonstration
- flag which the example module's content handler displays. It
- takes no arguments. If you browse to an URL to which the
- example content-handler applies, you will get a display of the
- routines within the module and how and in what order they were
- called to service the document request. The effect of this
- directive one can observe under the point "<code>Example
- directive declared here: YES/NO</code>".</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_example.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_example.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_example.html.ko.euc-kr b/docs/manual/mod/mod_example.html.ko.euc-kr
deleted file mode 100644
index 7c51f37aae..0000000000
--- a/docs/manual/mod/mod_example.html.ko.euc-kr
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_example - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_example</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_example.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_example.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>example_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_example.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>¾ÆÆÄÄ¡ ¹èÆ÷º» <code>modules/experimental</code> µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀϵéÀº ¾ÆÆÄÄ¡ API¸¦ »ç¿ëÇÏ¿© ¸ðµâÀ» ÀÛ¼ºÇÏ·Á´Â »ç¶÷µéÀ»
- µ½±âÀ§ÇÑ ¿¹Á¦´Ù.</p>
-
- <p><code>mod_example.c</code>´Â ¸ðµç Äݹé(callback) ±¸Á¶¿Í
- È£Ãâ ¹®¹ýÀ» ¼³¸íÇÏ´Â ÆÄÀÏÀÌ´Ù. ´ç½ÅÀº ¸ðµâ¿¡ ÀÌ ¸ðµç ÄݹéÀ»
- ±¸ÇöÇÒ ÇÊ¿ä°¡ ¾ø´Ù. »ç½Ç Á¤¹Ý´ë´Ù!</p>
-
- <p>example ¸ðµâÀº ½ÇÁ¦·Î µ¿ÀÛÇÏ´Â ¸ðµâÀÌ´Ù. ÀÌ ¸ðµâÀ» ¼­¹ö¿¡
- ¿¬°áÇÏ°í ƯÁ¤ À§Ä¡¿¡ "example-handler" Çڵ鷯¸¦ ÇÒ´çÇÏ¿©
- ±×°÷À» ºê¶ó¿ì¡Çϸé example ¸ðµâÀÇ ¿©·¯ ÄݹéÀ» È®ÀÎÇÒ ¼ö
- ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Example</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#compiling">example ¸ðµâ ÄÄÆÄÀÏÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#using"><code>mod_example</code> ¸ðµâ »ç¿ëÇϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compiling" id="compiling">example ¸ðµâ ÄÄÆÄÀÏÇϱâ</a></h2>
-
- <p>¼­¹ö¿¡ example ¸ðµâÀ» Æ÷ÇÔÇÏ·Á¸é ´ÙÀ½ °úÁ¤À» °ÅÄ£´Ù:</p>
-
- <ol>
- <li>
- <code>--enable-example</code> ¿É¼Ç°ú ÇÔ²²
- <code>configure</code>¸¦ ½ÇÇàÇÑ´Ù.</li>
-
- <li>¼­¹ö¸¦ ÄÄÆÄÀÏÇÑ´Ù ("<code>make</code>"¸¦ ½ÇÇàÇÑ´Ù).</li>
- </ol>
-
- <p>ÀÚ½ÅÀÌ ¸¸µç ¸ðµâÀ» Ãß°¡ÇÏ·Á¸é:</p>
-
- <ol class="up-A">
- <li><code>cp modules/experimental/mod_example.c
- modules/new_module/<em>mod_myexample.c</em></code></li>
-
- <li>ÆÄÀÏÀ» ¼öÁ¤ÇÑ´Ù.</li>
-
- <li><code>modules/new_module/config.m4</code> ÆÄÀÏÀ» ¸¸µç´Ù.
- <ol>
- <li><code>APACHE_MODPATH_INIT(new_module)</code>À»
- Ãß°¡ÇÑ´Ù.</li>
- <li><code>modules/experimental/config.m4</code> ÆÄÀÏ¿¡¼­
- "example"ÀÌ ÀÖ´Â APACHE_MODULE ÁÙÀ» º¹»çÇؿ´Ù.</li>
- <li>ù¹ø° ¾Æ±Ô¸ÕÆ® "example"À» <em>myexample</em>·Î
- º¯°æÇÑ´Ù.</li>
- <li>µÎ¹ø° ¾Æ±Ô¸ÕÆ® ÀÚ¸®¿¡ ÀÚ½ÅÀÌ ¸¸µç ¸ðµâ¿¡ ´ëÇÑ
- °£´ÜÇÑ ¼³¸íÀ» Àû´Â´Ù. <code>configure --help</code>¸¦
- ½ÇÇàÇÏ¸é ¿©±â¿¡ ±â·ÏÇÑ ¼³¸íÀ» º¸¿©ÁØ´Ù.</li>
- <li>¸ðµâÀ» ÄÄÆÄÀÏÇÒ¶§ Ưº°ÇÑ C ÄÄÆÄÀÏ·¯ ¿É¼Ç, ¸µÄ¿
- ¿É¼Ç, ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ¸é °¢°¢ CFLAGS, LDFLAGS,
- LIBS¿¡ Ãß°¡ÇÑ´Ù. modules µð·ºÅ丮¿¡ ÀÖ´Â ´Ù¸¥
- <code>config.m4</code> ÆÄÀϵéÀ» Âü°íÇ϶ó.</li>
- <li><code>APACHE_MODPATH_FINISH</code>¸¦ Ãß°¡ÇÑ´Ù.</li>
- </ol>
- </li>
-
- <li><code>module/new_module/Makefile.in</code> ÆÄÀÏÀ»
- ¸¸µç´Ù. ¸ðµâÀ» ÄÄÆÄÀÏÇϴµ¥ Ưº°ÇÑ ¸í·É¾î°¡ ÇÊ¿ä¾ø´Ù¸é,
- ÆÄÀÏ¿¡ <code>include $(top_srcdir)/build/special.mk</code>¸¸
- À־ µÈ´Ù.</li>
-
- <li>ÃÖ»óÀ§ µð·ºÅ丮¿¡¼­ ./buildconf ¸¦ ½ÇÇàÇÑ´Ù.</li>
-
- <li>--enable-myexample ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¼­¹ö¸¦ ÄÄÆÄÀÏÇÑ´Ù</li>
-
- </ol>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using"><code>mod_example</code> ¸ðµâ »ç¿ëÇϱâ</a></h2>
-
- <p>example ¸ðµâÀ» »ç¿ëÇÏ·Á¸é <code>httpd.conf</code> ÆÄÀÏ¿¡
- ´ÙÀ½°ú °°Àº ¼³Á¤À» Ãß°¡Ç϶ó:</p>
-<div class="example"><p><code>
- &lt;Location /example-info&gt;<br />
- SetHandler example-handler<br />
- &lt;/Location&gt;
-</code></p></div>
-
- <p>¾Æ´Ï¸é <a href="core.html#accessfilename"><code>.htaccess</code></a>
- ÆÄÀÏ¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» Ãß°¡ÇÏ°í, ±× À§Ä¡¿¡¼­ "test.example"
- °°Àº ÆÄÀÏÀ» ¿äûÇ϶ó:</p>
-<div class="example"><p><code>
- AddHandler example-handler .example
-</code></p></div>
-
- <p>¼­¹ö¸¦ Àç½ÃÀÛÇÑ ÈÄ ÀÌ À§Ä¡¸¦ ºê¶ó¿ì¡ÇÏ¸é ¾Õ¿¡¼­ ¸»ÇÑ
- ³»¿ëÀ» º¸°ÔµÉ °ÍÀÌ´Ù.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Example" id="Example">Example</a> <a name="example" id="example">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ Áö½Ã¾î</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>Example</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_example</td></tr>
-</table>
- <p><code class="directive">Example</code> Áö½Ã¾î´Â example ¸ðµâÀÇ
- ³»¿ëÇڵ鷯°¡ °£´ÜÇÑ ¹®±¸¸¦ º¸ÀÏÁö ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¾Ê´Â´Ù. example ³»¿ëÇڵ鷯¸¦ Àû¿ëÇÑ URL¿¡
- Á¢¼ÓÇÏ¸é ¹®¼­ ¿äûÀ» ¼­ºñ½ºÇϱâÀ§ÇØ ¸ðµâ¾È¿¡ ÇÔ¼öµéÀÌ ¾î¶»°Ô
- ±×¸®°í ¾î¶² ¼ø¼­·Î ºÒ¸®´ÂÁö ¾Ë ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾îÀÇ È¿°ú´Â
- "<code>Example directive declared here: YES/NO</code>"·Î
- È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_example.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_example.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_example.xml b/docs/manual/mod/mod_example.xml
deleted file mode 100644
index bac4620f04..0000000000
--- a/docs/manual/mod/mod_example.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_example.xml.meta">
-
-<name>mod_example</name>
-<description>Illustrates the Apache module API</description>
-<status>Experimental</status>
-<sourcefile>mod_example.c</sourcefile>
-<identifier>example_module</identifier>
-
-<summary>
- <p>Some files in the <code>modules/experimental</code> directory
- under the Apache distribution directory tree are provided as an
- example to those that wish to write modules that use the Apache
- API.</p>
-
- <p>The main file is <code>mod_example.c</code>, which
- illustrates all the different callback mechanisms and call
- syntaxes. By no means does an add-on module need to include
- routines for all of the callbacks - quite the contrary!</p>
-
- <p>The example module is an actual working module. If you link
- it into your server, enable the "example-handler" handler for a
- location, and then browse to that location, you will see a
- display of some of the tracing the example module did as the
- various callbacks were made.</p>
-</summary>
-
-<section id="compiling"><title>Compiling the example module</title>
-
- <p>To include the example module in your server, follow the
- steps below:</p>
-
- <ol>
- <li>
- Run <code>configure</code> with <code>--enable-example</code>
- option.</li>
-
- <li>Make the server (run "<code>make</code>").</li>
- </ol>
-
- <p>To add another module of your own:</p>
-
- <ol type="A">
- <li><code>cp modules/experimental/mod_example.c
- modules/new_module/<em>mod_myexample.c</em></code></li>
-
- <li>Modify the file.</li>
-
- <li>Create <code>modules/new_module/config.m4</code>.
- <ol>
- <li>Add <code>APACHE_MODPATH_INIT(new_module)</code>.</li>
- <li>Copy APACHE_MODULE line with "example" from
- <code>modules/experimental/config.m4</code>.</li>
- <li>Replace the first argument "example" with <em>myexample</em>.</li>
- <li>Replace the second argument with brief description of your module.
- It will be used in <code>configure --help</code>.</li>
- <li>If your module needs additional C compiler flags, linker flags or
- libraries, add them to CFLAGS, LDFLAGS and LIBS accordingly.
- See other <code>config.m4</code> files in modules directory for
- examples.</li>
- <li>Add <code>APACHE_MODPATH_FINISH</code>.</li>
- </ol>
- </li>
-
- <li>Create <code>module/new_module/Makefile.in</code>.
- If your module doesn't need special build instructions,
- all you need to have in that file is
- <code>include $(top_srcdir)/build/special.mk</code>.</li>
-
- <li>Run ./buildconf from the top-level directory.</li>
-
- <li>Build the server with --enable-myexample</li>
-
- </ol>
-</section>
-
-<section id="using"><title>Using the <code>mod_example</code> Module</title>
-
- <p>To activate the example module, include a block similar to
- the following in your <code>httpd.conf</code> file:</p>
-<example>
- &lt;Location /example-info&gt;<br />
- SetHandler example-handler<br />
- &lt;/Location&gt;
-</example>
-
- <p>As an alternative, you can put the following into a <a
- href="core.html#accessfilename"><code>.htaccess</code></a> file
- and then request the file "test.example" from that location:</p>
-<example>
- AddHandler example-handler .example
-</example>
-
- <p>After reloading/restarting your server, you should be able
- to browse to this location and see the brief display mentioned
- earlier.</p>
-</section>
-
-<directivesynopsis>
-<name>Example</name>
-<description>Demonstration directive to illustrate the Apache module
-API</description>
-<syntax>Example</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-
-<usage>
- <p>The <directive>Example</directive> directive just sets a demonstration
- flag which the example module's content handler displays. It
- takes no arguments. If you browse to an URL to which the
- example content-handler applies, you will get a display of the
- routines within the module and how and in what order they were
- called to service the document request. The effect of this
- directive one can observe under the point "<code>Example
- directive declared here: YES/NO</code>".</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_example.xml.ko b/docs/manual/mod/mod_example.xml.ko
deleted file mode 100644
index 31c749793b..0000000000
--- a/docs/manual/mod/mod_example.xml.ko
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_example.xml.meta">
-
-<name>mod_example</name>
-<description>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇÑ´Ù</description>
-<status>Experimental</status>
-<sourcefile>mod_example.c</sourcefile>
-<identifier>example_module</identifier>
-
-<summary>
- <p>¾ÆÆÄÄ¡ ¹èÆ÷º» <code>modules/experimental</code> µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀϵéÀº ¾ÆÆÄÄ¡ API¸¦ »ç¿ëÇÏ¿© ¸ðµâÀ» ÀÛ¼ºÇÏ·Á´Â »ç¶÷µéÀ»
- µ½±âÀ§ÇÑ ¿¹Á¦´Ù.</p>
-
- <p><code>mod_example.c</code>´Â ¸ðµç Äݹé(callback) ±¸Á¶¿Í
- È£Ãâ ¹®¹ýÀ» ¼³¸íÇÏ´Â ÆÄÀÏÀÌ´Ù. ´ç½ÅÀº ¸ðµâ¿¡ ÀÌ ¸ðµç ÄݹéÀ»
- ±¸ÇöÇÒ ÇÊ¿ä°¡ ¾ø´Ù. »ç½Ç Á¤¹Ý´ë´Ù!</p>
-
- <p>example ¸ðµâÀº ½ÇÁ¦·Î µ¿ÀÛÇÏ´Â ¸ðµâÀÌ´Ù. ÀÌ ¸ðµâÀ» ¼­¹ö¿¡
- ¿¬°áÇÏ°í ƯÁ¤ À§Ä¡¿¡ "example-handler" Çڵ鷯¸¦ ÇÒ´çÇÏ¿©
- ±×°÷À» ºê¶ó¿ì¡Çϸé example ¸ðµâÀÇ ¿©·¯ ÄݹéÀ» È®ÀÎÇÒ ¼ö
- ÀÖ´Ù.</p>
-</summary>
-
-<section id="compiling"><title>example ¸ðµâ ÄÄÆÄÀÏÇϱâ</title>
-
- <p>¼­¹ö¿¡ example ¸ðµâÀ» Æ÷ÇÔÇÏ·Á¸é ´ÙÀ½ °úÁ¤À» °ÅÄ£´Ù:</p>
-
- <ol>
- <li>
- <code>--enable-example</code> ¿É¼Ç°ú ÇÔ²²
- <code>configure</code>¸¦ ½ÇÇàÇÑ´Ù.</li>
-
- <li>¼­¹ö¸¦ ÄÄÆÄÀÏÇÑ´Ù ("<code>make</code>"¸¦ ½ÇÇàÇÑ´Ù).</li>
- </ol>
-
- <p>ÀÚ½ÅÀÌ ¸¸µç ¸ðµâÀ» Ãß°¡ÇÏ·Á¸é:</p>
-
- <ol type="A">
- <li><code>cp modules/experimental/mod_example.c
- modules/new_module/<em>mod_myexample.c</em></code></li>
-
- <li>ÆÄÀÏÀ» ¼öÁ¤ÇÑ´Ù.</li>
-
- <li><code>modules/new_module/config.m4</code> ÆÄÀÏÀ» ¸¸µç´Ù.
- <ol>
- <li><code>APACHE_MODPATH_INIT(new_module)</code>À»
- Ãß°¡ÇÑ´Ù.</li>
- <li><code>modules/experimental/config.m4</code> ÆÄÀÏ¿¡¼­
- "example"ÀÌ ÀÖ´Â APACHE_MODULE ÁÙÀ» º¹»çÇؿ´Ù.</li>
- <li>ù¹ø° ¾Æ±Ô¸ÕÆ® "example"À» <em>myexample</em>·Î
- º¯°æÇÑ´Ù.</li>
- <li>µÎ¹ø° ¾Æ±Ô¸ÕÆ® ÀÚ¸®¿¡ ÀÚ½ÅÀÌ ¸¸µç ¸ðµâ¿¡ ´ëÇÑ
- °£´ÜÇÑ ¼³¸íÀ» Àû´Â´Ù. <code>configure --help</code>¸¦
- ½ÇÇàÇÏ¸é ¿©±â¿¡ ±â·ÏÇÑ ¼³¸íÀ» º¸¿©ÁØ´Ù.</li>
- <li>¸ðµâÀ» ÄÄÆÄÀÏÇÒ¶§ Ưº°ÇÑ C ÄÄÆÄÀÏ·¯ ¿É¼Ç, ¸µÄ¿
- ¿É¼Ç, ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ¸é °¢°¢ CFLAGS, LDFLAGS,
- LIBS¿¡ Ãß°¡ÇÑ´Ù. modules µð·ºÅ丮¿¡ ÀÖ´Â ´Ù¸¥
- <code>config.m4</code> ÆÄÀϵéÀ» Âü°íÇ϶ó.</li>
- <li><code>APACHE_MODPATH_FINISH</code>¸¦ Ãß°¡ÇÑ´Ù.</li>
- </ol>
- </li>
-
- <li><code>module/new_module/Makefile.in</code> ÆÄÀÏÀ»
- ¸¸µç´Ù. ¸ðµâÀ» ÄÄÆÄÀÏÇϴµ¥ Ưº°ÇÑ ¸í·É¾î°¡ ÇÊ¿ä¾ø´Ù¸é,
- ÆÄÀÏ¿¡ <code>include $(top_srcdir)/build/special.mk</code>¸¸
- À־ µÈ´Ù.</li>
-
- <li>ÃÖ»óÀ§ µð·ºÅ丮¿¡¼­ ./buildconf ¸¦ ½ÇÇàÇÑ´Ù.</li>
-
- <li>--enable-myexample ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¼­¹ö¸¦ ÄÄÆÄÀÏÇÑ´Ù</li>
-
- </ol>
-</section>
-
-<section id="using"><title><code>mod_example</code> ¸ðµâ »ç¿ëÇϱâ</title>
-
- <p>example ¸ðµâÀ» »ç¿ëÇÏ·Á¸é <code>httpd.conf</code> ÆÄÀÏ¿¡
- ´ÙÀ½°ú °°Àº ¼³Á¤À» Ãß°¡Ç϶ó:</p>
-<example>
- &lt;Location /example-info&gt;<br />
- SetHandler example-handler<br />
- &lt;/Location&gt;
-</example>
-
- <p>¾Æ´Ï¸é <a
- href="core.html#accessfilename"><code>.htaccess</code></a>
- ÆÄÀÏ¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» Ãß°¡ÇÏ°í, ±× À§Ä¡¿¡¼­ "test.example"
- °°Àº ÆÄÀÏÀ» ¿äûÇ϶ó:</p>
-<example>
- AddHandler example-handler .example
-</example>
-
- <p>¼­¹ö¸¦ Àç½ÃÀÛÇÑ ÈÄ ÀÌ À§Ä¡¸¦ ºê¶ó¿ì¡ÇÏ¸é ¾Õ¿¡¼­ ¸»ÇÑ
- ³»¿ëÀ» º¸°ÔµÉ °ÍÀÌ´Ù.</p>
-</section>
-
-<directivesynopsis>
-<name>Example</name>
-<description>¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ Áö½Ã¾î</description>
-<syntax>Example</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-
-<usage>
- <p><directive>Example</directive> Áö½Ã¾î´Â example ¸ðµâÀÇ
- ³»¿ëÇڵ鷯°¡ °£´ÜÇÑ ¹®±¸¸¦ º¸ÀÏÁö ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â
- ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¾Ê´Â´Ù. example ³»¿ëÇڵ鷯¸¦ Àû¿ëÇÑ URL¿¡
- Á¢¼ÓÇÏ¸é ¹®¼­ ¿äûÀ» ¼­ºñ½ºÇϱâÀ§ÇØ ¸ðµâ¾È¿¡ ÇÔ¼öµéÀÌ ¾î¶»°Ô
- ±×¸®°í ¾î¶² ¼ø¼­·Î ºÒ¸®´ÂÁö ¾Ë ¼ö ÀÖ´Ù. ÀÌ Áö½Ã¾îÀÇ È¿°ú´Â
- "<code>Example directive declared here: YES/NO</code>"·Î
- È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_example.xml.meta b/docs/manual/mod/mod_example.xml.meta
deleted file mode 100644
index 30b6b9d915..0000000000
--- a/docs/manual/mod/mod_example.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_example</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_expires.html b/docs/manual/mod/mod_expires.html
deleted file mode 100644
index c3692c250c..0000000000
--- a/docs/manual/mod/mod_expires.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_expires.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_expires.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_expires.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_expires.html.en b/docs/manual/mod/mod_expires.html.en
deleted file mode 100644
index ebe6b04863..0000000000
--- a/docs/manual/mod/mod_expires.html.en
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_expires - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_expires</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_expires.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_expires.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_expires.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Generation of <code>Expires</code> HTTP headers according to
-user-specified criteria</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>expires_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_expires.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module controls the setting of the <code>Expires</code>
- HTTP header in server responses. The expiration date can set to
- be relative to either the time the source file was last
- modified, or to the time of the client access.</p>
-
- <p>The <code>Expires</code> HTTP header is an instruction to
- the client about the document's validity and persistence. If
- cached, the document may be fetched from the cache rather than
- from the source until this time has passed. After that, the
- cache copy is considered "expired" and invalid, and a new copy
- must be obtained from the source.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresactive">ExpiresActive</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresbytype">ExpiresByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresdefault">ExpiresDefault</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#AltSyn">Alternate Interval Syntax</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">Alternate Interval Syntax</a></h2>
- <p>The <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> and
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> directives
- can also be defined in a more readable syntax of the form:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
- &lt;type&gt;}*"<br />
- ExpiresByType type/encoding "&lt;base&gt; [plus]
- {&lt;num&gt; &lt;type&gt;}*"
- </code></p></div>
-
- <p>where &lt;base&gt; is one of:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> (equivalent to
- '<code>access</code>')</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p>The <code>plus</code> keyword is optional. &lt;num&gt;
- should be an integer value [acceptable to <code>atoi()</code>],
- and &lt;type&gt; is one of:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>For example, any of the following directives can be used to
- make documents expire 1 month after being accessed, by
- default:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </code></p></div>
-
- <p>The expiry time can be fine-tuned by adding several
- '&lt;num&gt; &lt;type&gt;' clauses:</p>
-
- <div class="example"><p><code>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </code></p></div>
-
- <p>Note that if you use a modification date based setting, the
- Expires header will <strong>not</strong> be added to content
- that does not come from a file on disk. This is due to the fact
- that there is no modification time for such content.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables generation of Expires
-headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ExpiresActive On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_expires</td></tr>
-</table>
- <p>This directive enables or disables the generation of the
- <code>Expires</code> header for the document realm in question.
- (That is, if found in an <code>.htaccess</code> file, for
- instance, it applies only to documents generated from that
- directory.) If set to <code>Off</code>, no <code>Expires</code> header
- will be generated for any document in the realm (unless overridden at
- a lower level, such as an <code>.htaccess</code> file overriding a
- server config file). If set to <code>On</code>, the header will be
- added to served documents according to the criteria defined by the
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> and
- <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> directives
- (<em>q.v.</em>).</p>
-
- <p>Note that this directive does not guarantee that an
- <code>Expires</code> header will be generated. If the criteria
- aren't met, no header will be sent, and the effect will be as
- though this directive wasn't even specified.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresByType" id="ExpiresByType">ExpiresByType</a> <a name="expiresbytype" id="expiresbytype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Value of the Expires header configured
-by MIME type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_expires</td></tr>
-</table>
- <p>This directive defines the value of the <code>Expires</code>
- header generated for documents of the specified type (<em>e.g.</em>,
- <code>text/html</code>). The second argument sets the number of
- seconds that will be added to a base time to construct the expiration
- date.</p>
-
- <p>The base time is either the last modification time of the
- file, or the time of the client's access to the document. Which
- should be used is specified by the
- <code><var>&lt;code&gt;</var></code> field; <code>M</code>
- means that the file's last modification time should be used as
- the base time, and <code>A</code> means the client's access
- time should be used.</p>
-
- <p>The difference in effect is subtle. If <code>M</code> is used,
- all current copies of the document in all caches will expire at
- the same time, which can be good for something like a weekly
- notice that's always found at the same URL. If <code>A</code> is
- used, the date of expiration is different for each client; this
- can be good for image files that don't change very often,
- particularly for a set of related documents that all refer to
- the same images (<em>i.e.</em>, the images will be accessed
- repeatedly within a relatively short timespan).</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- # enable expirations<br />
- ExpiresActive On<br />
- # expire GIF images after a month in the client's cache<br />
- ExpiresByType image/gif A2592000<br />
- # HTML documents are good for a week from the<br />
- # time they were changed<br />
- ExpiresByType text/html M604800
- </code></p></div>
-
- <p>Note that this directive only has effect if
- <code>ExpiresActive On</code> has been specified. It overrides,
- for the specified MIME type <em>only</em>, any expiration date
- set by the <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code>
- directive.</p>
-
- <p>You can also specify the expiration time calculation using
- an <a href="#AltSyn">alternate syntax</a>, described earlier in
- this document.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresDefault" id="ExpiresDefault">ExpiresDefault</a> <a name="expiresdefault" id="expiresdefault">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default algorithm for calculating expiration time</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ExpiresDefault <var>&lt;code&gt;seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_expires</td></tr>
-</table>
- <p>This directive sets the default algorithm for calculating the
- expiration time for all documents in the affected realm. It can be
- overridden on a type-by-type basis by the <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> directive. See the
- description of that directive for details about the syntax of the
- argument, and the <a href="#AltSyn">alternate syntax</a>
- description as well.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_expires.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_expires.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_expires.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_expires.html.ja.euc-jp b/docs/manual/mod/mod_expires.html.ja.euc-jp
deleted file mode 100644
index ac7e35c003..0000000000
--- a/docs/manual/mod/mod_expires.html.ja.euc-jp
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_expires - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_expires</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_expires.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_expires.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥æ¡¼¥¶¤Î»ØÄꤷ¤¿´ð½à¤Ë´ð¤Å¤¤¤¿ <code>Expires</code> HTTP ¥Ø¥Ã¥À¤ÎÀ¸À®</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>expires_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_expires.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥µ¡¼¥Ð±þÅú¤Î <code>Expires</code> HTTP ¥Ø¥Ã¥À¤Î
- ÀßÄê¤òÀ©¸æ¤·¤Þ¤¹¡£¸µ¤Î¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤¿»þ¹ï¤Þ¤¿¤Ï
- ¥¯¥é¥¤¥¢¥ó¥È¤Î¥¢¥¯¥»¥¹»þ¹ï¤Î¤É¤Á¤é¤«¤Ë´ð¤Å¤¤¤Æ´ü¸ÂÀÚ¤ìÆü¤ò
- ÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code>Expires</code> HTTP ¥Ø¥Ã¥À¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Ëʸ½ñ¤Î
- Í­¸úÀ­¤È·Ñ³À­¤ò»Ø¼¨¤·¤Þ¤¹¡£Ê¸½ñ¤¬¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢
- »ØÄê»þ¹ï¤Ë㤹¤ë¤Þ¤Ç¤Ï¡¢¸µ¤Î¾ì½ê¤«¤é¼èÆÀ¤¹¤ëÂå¤ï¤ê¤Ë
- ¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤Î¸å¤Ï¡¢
- ¥­¥ã¥Ã¥·¥å¤Ë¤¢¤ë¥³¥Ô¡¼¤Ï´ü¸ÂÀÚ¤ì (expired) ¤Ç̵¸ú¤Ç¤¢¤ë¤È¤µ¤ì¡¢
- ¸µ¤Î¾ì½ê¤«¤é¿·¤·¤¤¤â¤Î¤ò¼èÆÀ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresactive">ExpiresActive</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresbytype">ExpiresByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresdefault">ExpiresDefault</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#AltSyn">ÂåÂØ´ü´Ö»ØÄ깽ʸ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">ÂåÂØ´ü´Ö»ØÄ깽ʸ</a></h2>
-
- <p><code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- °Ê²¼¤Î¤è¤êÆɤ߰פ¤¹½Ê¸¤ò»È¤Ã¤ÆÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
- &lt;type&gt;}*"<br />
- ExpiresByType type/encoding "&lt;base&gt; [plus]
- {&lt;num&gt; &lt;type&gt;}*"
- </code></p></div>
-
- <p>&lt;base&gt; ¤Ï°Ê²¼¤Î¤É¤ì¤«¤Ç¤¹:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> ('<code>access</code>' ¤ÈÅù²Á)</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p><code>plus</code> ¥­¡¼¥ï¡¼¥É¤Ï¾Êά²Äǽ¤Ç¤¹¡£&lt;num&gt;
- ¤Ï (<code>atoi()</code> ¤¬¼õ¤±ÉÕ¤±¤ë) À°¿ôÃÍ¡¢
- &lt;type&gt; ¤Ï°Ê²¼¤Î¤É¤ì¤«¤Ç¤¹:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>Î㤨¤Ð¡¢°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤É¤ì¤â¥Ç¥Õ¥©¥ë¥È¤Çʸ½ñ¤¬¥¢¥¯¥»¥¹¤Î 1 ¥ö·î¸å¤Ë
- ´ü¸Â¤¬ÀÚ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë»È¤¨¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </code></p></div>
-
- <p>´ü¸ÂÀÚ¤ì»þ¹ï¤Ï¤¤¤¯¤Ä¤«
- '&lt;num&gt; &lt;type&gt;' Àá¤òÄɲ乤뤳¤È¤Ç¤è¤êºÙ¤«¤¯
- À©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </code></p></div>
-
- <p>½¤Àµ»þ¹ï¤Ë´ð¤Å¤¤¤¿ÀßÄê¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢Expires ¥Ø¥Ã¥À¤Ï
- ¥Ç¥£¥¹¥¯¤Î¥Õ¥¡¥¤¥ë°Ê³°¤Î¥³¥ó¥Æ¥ó¥Ä¤Ë¤Ï<strong>Äɲ䵤ì¤Ê¤¤</strong>¤³¤È¤ËÃí°Õ
- ¤·¤Æ¤¯¤À¤µ¤¤¡£¤½¤Î¤è¤¦¤Ê¥³¥ó¥Æ¥ó¥Ä¤Ë¤Ï½¤Àµ»þ¹ï¤Ï¸ºß¤·¤Ê¤¤¤«¤é¤Ç¤¹¡£</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Expires ¥Ø¥Ã¥À¤ÎÀ¸À®¤òÍ­¸ú¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ExpiresActive On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_expires</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÂбþ¤¹¤ë¥É¥­¥å¥á¥ó¥È¤ÎÎΰè¤Ç
- <code>Expires</code> ¥Ø¥Ã¥À¤òÍ­¸ú¤Ë¤¹¤ë¤«Ìµ¸ú¤Ë¤¹¤ë¤«¤ò·è¤á¤Þ¤¹¡£
- (Î㤨¤Ð¡¢<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î
- ʸ½ñ¤Î¤ß¤ËŬÍѤµ¤ì¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£) <code>Off</code> ¤Ë
- ÀßÄꤵ¤ì¤¿¾ì¹ç¤ÏÂбþÎΰè¤Ç <code>Expires</code> ¥Ø¥Ã¥À¤Ï
- À¸À®¤µ¤ì¤Þ¤»¤ó (<code>.htaccess</code> ¤¬¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤ÎÀßÄê¤ò
- ¾å½ñ¤­¤¹¤ë¡¢¤È¤¤¤¦¤è¤¦¤Ê²¼°Ì¥ì¥Ù¥ë¤Ç¤Î¾å½ñ¤­¤¬¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð)¡£
- <code>On</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢¥Ø¥Ã¥À¤Ï <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤Î´ð½à¤Ë½¾¤Ã¤Æʸ½ñ¤Ë¥Ø¥Ã¥À¤òÄɲä·¤Þ¤¹ (³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö»²¾È)¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>Expires</code> ¥Ø¥Ã¥À¤Î¸ºß¤ò
- Êݾڤ¹¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£´ð½à¤¬Ëþ¤¿¤µ¤ì¤Æ
- ¤¤¤Ê¤¤¾ì¹ç¤Ï¥Ø¥Ã¥À¤ÏÄɲ䵤줺¡¢·ë²Ì¤È¤·¤Æ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
- »ØÄꤵ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¤«¤Î¤è¤¦¤Ë¤µ¤¨¸«¤¨¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresByType" id="ExpiresByType">ExpiresByType</a> <a name="expiresbytype" id="expiresbytype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>MIME ¥¿¥¤¥×¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë Expires ¥Ø¥Ã¥À¤ÎÃÍ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_expires</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï»ØÄꤵ¤ì¤¿¥¿¥¤¥×¤Î¥É¥­¥å¥á¥ó¥È
- (<em>Î㤨¤Ð</em> <code>text/html</code>)
- ¤ËÂФ·¤ÆÀ¸À®¤µ¤ì¤ë <code>Expires</code> ¥Ø¥Ã¥À¤ÎÃͤòÄêµÁ¤·¤Þ¤¹¡£
- Æó¤ÄÌܤΰú¿ô¤Ï´ü¸ÂÀÚ¤ì¤ÎÆü»þ¤òÀ¸À®¤¹¤ë¤¿¤á¤Î´ð½à»þ¹ï¤ËÄɲ䵤ì¤ë
- Éÿô¤òÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p>´ð½à»þ¹ï¤Ï¥Õ¥¡¥¤¥ë¤ÎºÇ½ª½¤Àµ»þ¹ï¤«¡¢¥¯¥é¥¤¥¢¥ó¥È¤Î¥É¥­¥å¥á¥ó¥È¤Ø¤Î
- ¥¢¥¯¥»¥¹»þ¹ï¤Ç¤¹¡£¤É¤Á¤é¤ò»È¤¦¤Ù¤­¤«¤Ï <code><var>&lt;code&gt;</var></code>
- ¤Ë¤è¤Ã¤Æ»ØÄꤷ¤Þ¤¹¡£<code>M</code> ¤Ï´ð½à»þ¹ï¤È¤·¤Æ
- ¥Õ¥¡¥¤¥ë¤ÎºÇ½ª½¤Àµ»þ¹ï¤ò¤È¤¤¤¦°ÕÌ£¤Ç¡¢<code>A</code> ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î
- ¥¢¥¯¥»¥¹»þ¹ï¤ò»È¤¦¤È¤¤¤¦°ÕÌ£¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¸ú²Ì¤Ë¤ÏÈù̯¤Ê°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£<code>M</code> ¤¬»ÈÍѤµ¤ì¤¿¾ì¹ç¤Ï¡¢
- ¤¹¤Ù¤Æ¤Î¥­¥ã¥Ã¥·¥å¤Ë¤¢¤ë¸½ºß¤Î¥É¥­¥å¥á¥ó¥È¥­¥ã¥Ã¥·¥å¤ÏƱ»þ¤Ë´ü¸Â¤¬
- ÀÚ¤ì¤Þ¤¹¡£¤³¤ì¤ÏƱ¤¸ URL ¤ËËè½µ¾ï¤ËÃÖ¤«¤ì¤ëÊ󤻤Τ褦¤Ê¤â¤Î¤Ë¤Ï
- Èó¾ï¤ËÍ­¸ú¤Ç¤¹¡£<code>A</code> ¤¬»ÈÍѤµ¤ì¤¿¾ì¹ç¤Ï¡¢´ü¸ÂÀÚ¤ì¤Î
- »þ´Ö¤Ï³Æ¥¯¥é¥¤¥¢¥ó¥È¤è¤Ã¤Æ°Û¤Ê¤ê¤Þ¤¹¡£¤³¤ì¤Ï¤¢¤Þ¤êÊѹ¹¤µ¤ì¤Ê¤¤
- ²èÁü¥Õ¥¡¥¤¥ë¤Ê¤É¡¢Æä˴ØÏ¢¤¹¤ë¥É¥­¥å¥á¥ó¥È·²¤¬¤¹¤Ù¤ÆƱ¤¸²èÁü¤ò
- »²¾È¤¹¤ë¤È¤­ (<em>¤¹¤Ê¤ï¤Á</em>²èÁü¤¬Èæ³ÓŪû¤¤´ü´ÖÆâ¤Ë·«¤êÊÖ¤·
- ¥¢¥¯¥»¥¹¤µ¤ì¤ë¤È¤­) ¤ËÍ­¸ú¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã:</h3><p><code>
- # enable expirations<br />
- ExpiresActive On<br />
- # expire GIF images after a month in the client's cache<br />
- ExpiresByType image/gif A2592000<br />
- # HTML documents are good for a week from the<br />
- # time they were changed<br />
- ExpiresByType text/html M604800
- </code></p></div>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>ExpiresActive On</code> ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë
- ¤È¤­¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤ì¤Ï¡¢
- »ØÄꤵ¤ì¤¿ MIME ¥¿¥¤¥×¤ËÂФ·¤Æ<em>¤Î¤ß</em> <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- ÀßÄꤵ¤ì¤¿´ü¸ÂÀÚ¤ì´üÆü¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <p>¤³¤Îʸ½ñ¤ÎÁ°¤ÎÊý¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë<a href="#AltSyn">ÂåÂع½Ê¸</a>¤ò
- »È¤Ã¤Æ´ü¸ÂÀÚ¤ì´üÆü¤Î·×»»ÊýË¡¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresDefault" id="ExpiresDefault">ExpiresDefault</a> <a name="expiresdefault" id="expiresdefault">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>´ü¸ÂÀÚ¤ì´üÆü¤ò·×»»¤¹¤ë¥Ç¥Õ¥©¥ë¥È¥¢¥ë¥´¥ê¥º¥à</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ExpiresDefault <var>&lt;code&gt;seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_expires</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÂбþ¤¹¤ëÈϰϤΤ¹¤Ù¤Æ¤Î¥É¥­¥å¥á¥ó¥È¤ËÂФ·¤Æ
- ¥Ç¥Õ¥©¥ë¥È¤Î´ü¸ÂÀÚ¤ì´üÆü¤Î·×»»¥¢¥ë¥´¥ê¥º¥à¤òÀßÄꤷ¤Þ¤¹¡£<code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤Ã¤Æ
- ¥¿¥¤¥×Ëè¤Ë¾å½ñ¤­¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£°ú¿ô¤Î¹½Ê¸¤Ï¤½¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- ÀâÌÀ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£¤Þ¤¿¡¢<a href="#AltSyn">ÂåÂع½Ê¸</a>¤â
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_expires.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_expires.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_expires.html.ko.euc-kr b/docs/manual/mod/mod_expires.html.ko.euc-kr
deleted file mode 100644
index bd7c9e986c..0000000000
--- a/docs/manual/mod/mod_expires.html.ko.euc-kr
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_expires - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_expires</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_expires.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_expires.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>»ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ±âÁØ¿¡ µû¶ó <code>Expires</code>
-HTTP Çì´õ¸¦ »ý¼ºÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>expires_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_expires.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº ¼­¹ö ÀÀ´äÀÇ <code>Expires</code> HTTP Çì´õ
- ¼³Á¤À» Á¶ÀýÇÑ´Ù. ¸¸±âÀÏÀ» ¼Ò½ºÆÄÀÏÀÌ ¸¶Á÷¸· ¼öÁ¤µÉ ½Ã°£
- ȤÀº Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇÑ ½Ã°£¿¡ »ó´ëÀûÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>Expires</code> HTTP Çì´õ´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¹®¼­ÀÇ
- À¯È¿¼º°ú Áö¼Ó¼ºÀ» ¾Ë·ÁÁØ´Ù. ÀÌ ½Ã°£ÀÌ ¾ÆÁ÷ Áö³ªÁö¾Ê¾Ò´Ù¸é,
- ¹®¼­¸¦ ij½¬¿¡¼­ °¡Á®¿Íµµ µÈ´Ù. ¸¸±âÀÏÀÌ Áö³µ´Ù¸é ij½¬µÈ
- °ÍÀ» "¸¸·áµÇ°í" À¯È¿ÇÏÁö ¾Ê´Ù°í °£ÁÖÇÏ¿©, ¼Ò½º¿¡¼­ ¹®¼­¸¦
- »õ·Î ¾ò¾î¿Í¾ß ÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresactive">ExpiresActive</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresbytype">ExpiresByType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#expiresdefault">ExpiresDefault</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#AltSyn">´Ù¸¥ ³»ºÎ ¹®¹ý</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="AltSyn" id="AltSyn">´Ù¸¥ ³»ºÎ ¹®¹ý</a></h2>
- <p><code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code>¿Í
- <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code>
- Áö½Ã¾î¸¦ ´õ Àбâ ÁÁÀº Çü½ÄÀ¸·Î ±â¼úÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
- &lt;type&gt;}*"<br />
- ExpiresByType type/encoding "&lt;base&gt; [plus]
- {&lt;num&gt; &lt;type&gt;}*"
- </code></p></div>
-
- <p>&lt;base&gt;´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> ('<code>access</code>'¿Í °°À½)</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p><code>plus</code> Å°¿öµå´Â ¾ø¾îµµ µÈ´Ù. &lt;num&gt;Àº
- [<code>atoi()</code>¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â] Á¤¼ö°ªÀÌ´Ù.
- &lt;type&gt;Àº ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>¿¹¸¦ µé¾î, ´ÙÀ½ ¸ðµÎ´Â ¹®¼­°¡ ±âº»ÀûÀ¸·Î Á¢¼ÓµÈÁö 1´ÞÈÄ¿¡
- ¸¸±âµÈ´Ù°í ¼³Á¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </code></p></div>
-
- <p>'&lt;num&gt; &lt;type&gt;' ±¸¹®À» ¹Ýº¹Çؼ­ »ç¿ëÇÏ¿©
- ¸¸±â½Ã°£À» ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </code></p></div>
-
- <p>¸¸¾à ¼öÁ¤½Ã°£(modification)À» ±âÁØÀ¸·Î ¸¸±â½Ã°£À» ¼³Á¤ÇÏ´Â
- °æ¿ì ³»¿ëÀ» µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏ¿¡¼­ °¡Á®¿ÀÁö ¾Ê´Â´Ù¸é Expires
- Çì´õ¸¦ ºÙÀÌÁö <strong>¾Ê´Â´Ù</strong>. ÀÌ °æ¿ì ³»¿ë¿¡ ¼öÁ¤½Ã°£ÀÌ
- ¾ø±â ¶§¹®ÀÌ´Ù.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>Expires Çì´õ¸¦ »ý¼ºÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExpiresActive On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_expires</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â ÇØ´ç ¿µ¿ª¿¡ ´ëÇØ (Áï, <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­ »ç¿ëÇÑ´Ù¸é ±× µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â ¹®¼­µé¸¸ ÇØ´çµÈ´Ù.)
- <code>Expires</code> Çì´õ¸¦ »ý¼ºÇÒÁö À¯¹«¸¦ °áÁ¤ÇÑ´Ù.
- (<code>.htaccess</code> ÆÄÀÏ µîÀ¸·Î ´õ ÇÏÀ§ ´Ü°è¿¡¼­ ¼­¹ö¼³Á¤À»
- º¯°æÇÏÁö¾Ê´Â ÇÑ) <code>Off</code>À̸é ÇØ´ç ¿µ¿ª¿¡ ÀÖ´Â
- ¹®¼­¿¡ <code>Expires</code> Çì´õ¸¦ »ý¼ºÇÏÁö ¾Ê´Â´Ù.
- <code>On</code>À̸é <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code>°ú <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> Áö½Ã¾î·Î
- (<em>ÇØ´ç Ç׸ñÀ» Âü°íÇ϶ó</em>) ÁöÁ¤ÇÑ ±ÔÄ¢¿¡ µû¶ó ¼­ºñ½ºÇÏ·Á´Â
- ¹®¼­¿¡ Çì´õ¸¦ »ý¼ºÇÑ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾î´Â <code>Expires</code> Çì´õ¸¦ º¸ÀåÇÏÁö ¾Ê´Â´Ù.
- ±ÔÄ¢¿¡ ÇØ´çÇÏÁö ¾Ê´Ù¸é ¸¶Ä¡ ÀÌ Áö½Ã¾î°¡ ¾ø´Â °Íó·³ Çì´õ¸¦
- ¸¸µéÁö ¾Ê´Â´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresByType" id="ExpiresByType">ExpiresByType</a> <a name="expiresbytype" id="expiresbytype">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>MIME typeÀ¸·Î Expires Çì´õ°ªÀ» ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_expires</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â ƯÁ¤ Á¾·ùÀÇ (<em>¿¡¸¦ µé¾î</em>,
- <code>text/html</code>) ¹®¼­¿¡ ´ëÇÑ <code>Expires</code>
- Çì´õ°ªÀ» Á¤ÀÇÇÑ´Ù. µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â ¸¸±â½Ã°£À» °áÁ¤ÇÒ¶§
- ±âÁØ ½Ã°£¿¡ ´õÇÒ ÃÊ´ÜÀ§ °ªÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p>±âÁØ ½Ã°£Àº ÆÄÀÏÀÇ ÃÖ±Ù ¼öÁ¤½Ã°£ ȤÀº Ŭ¶óÀ̾ðÆ®°¡ ¹®¼­¿¡
- Á¢±ÙÇÑ ½Ã°£ÀÌ´Ù. À̶² °ÍÀ» »ç¿ëÇÒÁö´Â
- <code><var>&lt;code&gt;</var></code> Çʵå·Î °áÁ¤ÇØ¾ß ÇÑ´Ù.
- <code>M</code>Àº ±âÁØ ½Ã°£À¸·Î ÆÄÀÏÀÇ ÃÖ±Ù ¼öÁ¤½Ã°£À»
- »ç¿ëÇÏ°í, <code>A</code>´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±Ù ½Ã°£À» »ç¿ëÇÑ´Ù.</p>
-
- <p>Â÷ÀÌ´Â ¹Ì¹¦ÇÏ´Ù. <code>M</code>À» »ç¿ëÇϸé ij½¬¿¡ ÀÖ´Â
- ¸ðµç º¹»çº»ÀÌ °°Àº ½Ã°£¿¡ ¸¸·áµÈ´Ù. ±×·¡¼­ Ç×»ó °°Àº URL·Î
- ã¾Æº¼ ¼ö ÀÖ´Â ÁÖ°£ÀÏÁ¤ °°Àº ¿ëµµ¿¡ ÁÁ´Ù. <code>A</code>¸¦
- »ç¿ëÇÏ¸é º¹»çº»ÀÇ ¸¸±â½Ã°£ÀÌ °¢°¢ ´Ù¸£´Ù. ÀÌ´Â ÀÚÁÖ ¼öÁ¤µÇÁö¾Ê´Â
- ±×¸²ÆÄÀÏ¿¡, ƯÈ÷ ¿©·¯ ¹®¼­¿¡¼­ °°Àº ±×¸²À» ÂüÁ¶ÇÒ¶§ (<em>¿¹¸¦
- µé¾î</em>, À̹ÌÁö´Â »ó´ëÀûÀ¸·Î ªÀº ±â°£µ¿¾È ¹Ýº¹Çؼ­ Á¢±ÙµÈ´Ù),
- À¯¿ëÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦:</h3><p><code>
- # ¸¸±âÇì´õ¸¦ »ç¿ëÇÑ´Ù<br />
- ExpiresActive On<br />
- # Ŭ¶óÀ̾ðÆ® ij½¬ÀÇ GIF ±×¸²Àº ÇÑ ´ÞÈÄ¿¡ ¸¸±âÇÑ´Ù<br />
- ExpiresByType image/gif A2592000<br />
- # HTML ¹®¼­´Â º¯°æÈÄ ÀÏÁÖÀÏ°£ À¯È¿ÇÏ´Ù
- ExpiresByType text/html M604800
- </code></p></div>
-
- <p>ÀÌ Áö½Ã¾î´Â <code>ExpiresActive On</code>À» »ç¿ëÇÒ¶§¸¸
- À¯È¿ÇÔÀ» ÁÖÀÇÇ϶ó. <code class="directive"><a href="#expiresdefault">ExpiresDefault</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ƯÁ¤ MIME type¿¡ ´ëÇؼ­<em>¸¸</em> ¸¸±â½Ã°£À»
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾Õ¿¡¼­ ¼³¸íÇÑ <a href="#AltSyn">´Ù¸¥ ¹®¹ý</a>À» »ç¿ëÇÏ¿©
- ¸¸±â½Ã°£À» °è»êÇÒ ¼öµµ ÀÖ´Ù.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExpiresDefault" id="ExpiresDefault">ExpiresDefault</a> <a name="expiresdefault" id="expiresdefault">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸¸±â½Ã°£À» °è»êÇÏ´Â ±âº» ¾Ë°í¸®Áò</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExpiresDefault <var>&lt;code&gt;seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_expires</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â ÇØ´ç ¿µ¿ª¿¡ ÀÖ´Â ¸ðµç ¹®¼­ÀÇ ¸¸±â½Ã°£À»
- °è»êÇÏ´Â ±âº» ¾Ë°í¸®ÁòÀ» ÁöÁ¤ÇÑ´Ù. <code class="directive"><a href="#expiresbytype">ExpiresByType</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© Á¾·ùº°·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¾Æ±Ô¸ÕÆ® ¹®¹ý¿¡ ´ëÇÑ
- ÀÚ¼¼ÇÑ ¼³¸íÀº ±× Áö½Ã¾î¿Í <a href="#AltSyn">´Ù¸¥ ¹®¹ý</a>À»
- Âü°íÇ϶ó.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_expires.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_expires.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_expires.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_expires.xml b/docs/manual/mod/mod_expires.xml
deleted file mode 100644
index 2ae7f5b45d..0000000000
--- a/docs/manual/mod/mod_expires.xml
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_expires.xml.meta">
-
-<name>mod_expires</name>
-<description>Generation of <code>Expires</code> HTTP headers according to
-user-specified criteria</description>
-<status>Extension</status>
-<sourcefile>mod_expires.c</sourcefile>
-<identifier>expires_module</identifier>
-
-<summary>
- <p>This module controls the setting of the <code>Expires</code>
- HTTP header in server responses. The expiration date can set to
- be relative to either the time the source file was last
- modified, or to the time of the client access.</p>
-
- <p>The <code>Expires</code> HTTP header is an instruction to
- the client about the document's validity and persistence. If
- cached, the document may be fetched from the cache rather than
- from the source until this time has passed. After that, the
- cache copy is considered "expired" and invalid, and a new copy
- must be obtained from the source.</p>
-</summary>
-
-<section id="AltSyn"><title>Alternate Interval Syntax</title>
- <p>The <directive module="mod_expires">ExpiresDefault</directive> and
- <directive module="mod_expires">ExpiresByType</directive> directives
- can also be defined in a more readable syntax of the form:</p>
-
- <example>
- ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
- &lt;type&gt;}*"<br />
- ExpiresByType type/encoding "&lt;base&gt; [plus]
- {&lt;num&gt; &lt;type&gt;}*"
- </example>
-
- <p>where &lt;base&gt; is one of:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> (equivalent to
- '<code>access</code>')</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p>The <code>plus</code> keyword is optional. &lt;num&gt;
- should be an integer value [acceptable to <code>atoi()</code>],
- and &lt;type&gt; is one of:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>For example, any of the following directives can be used to
- make documents expire 1 month after being accessed, by
- default:</p>
-
- <example>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </example>
-
- <p>The expiry time can be fine-tuned by adding several
- '&lt;num&gt; &lt;type&gt;' clauses:</p>
-
- <example>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </example>
-
- <p>Note that if you use a modification date based setting, the
- Expires header will <strong>not</strong> be added to content
- that does not come from a file on disk. This is due to the fact
- that there is no modification time for such content.</p>
-</section>
-
-<directivesynopsis>
-<name>ExpiresActive</name>
-<description>Enables generation of <code>Expires</code>
-headers</description>
-<syntax>ExpiresActive On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This directive enables or disables the generation of the
- <code>Expires</code> header for the document realm in question.
- (That is, if found in an <code>.htaccess</code> file, for
- instance, it applies only to documents generated from that
- directory.) If set to <code>Off</code>, no <code>Expires</code> header
- will be generated for any document in the realm (unless overridden at
- a lower level, such as an <code>.htaccess</code> file overriding a
- server config file). If set to <code>On</code>, the header will be
- added to served documents according to the criteria defined by the
- <directive module="mod_expires">ExpiresByType</directive> and
- <directive module="mod_expires">ExpiresDefault</directive> directives
- (<em>q.v.</em>).</p>
-
- <p>Note that this directive does not guarantee that an
- <code>Expires</code> header will be generated. If the criteria
- aren't met, no header will be sent, and the effect will be as
- though this directive wasn't even specified.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresByType</name>
-<description>Value of the <code>Expires</code> header configured
-by MIME type</description>
-<syntax>ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This directive defines the value of the <code>Expires</code>
- header generated for documents of the specified type (<em>e.g.</em>,
- <code>text/html</code>). The second argument sets the number of
- seconds that will be added to a base time to construct the expiration
- date.</p>
-
- <p>The base time is either the last modification time of the
- file, or the time of the client's access to the document. Which
- should be used is specified by the
- <code><var>&lt;code&gt;</var></code> field; <code>M</code>
- means that the file's last modification time should be used as
- the base time, and <code>A</code> means the client's access
- time should be used.</p>
-
- <p>The difference in effect is subtle. If <code>M</code> is used,
- all current copies of the document in all caches will expire at
- the same time, which can be good for something like a weekly
- notice that's always found at the same URL. If <code>A</code> is
- used, the date of expiration is different for each client; this
- can be good for image files that don't change very often,
- particularly for a set of related documents that all refer to
- the same images (<em>i.e.</em>, the images will be accessed
- repeatedly within a relatively short timespan).</p>
-
- <example><title>Example:</title>
- # enable expirations<br />
- ExpiresActive On<br />
- # expire GIF images after a month in the client's cache<br />
- ExpiresByType image/gif A2592000<br />
- # HTML documents are good for a week from the<br />
- # time they were changed<br />
- ExpiresByType text/html M604800
- </example>
-
- <p>Note that this directive only has effect if
- <code>ExpiresActive On</code> has been specified. It overrides,
- for the specified MIME type <em>only</em>, any expiration date
- set by the <directive module="mod_expires">ExpiresDefault</directive>
- directive.</p>
-
- <p>You can also specify the expiration time calculation using
- an <a href="#AltSyn">alternate syntax</a>, described earlier in
- this document.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresDefault</name>
-<description>Default algorithm for calculating expiration time</description>
-<syntax>ExpiresDefault <var>&lt;code&gt;seconds</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>This directive sets the default algorithm for calculating the
- expiration time for all documents in the affected realm. It can be
- overridden on a type-by-type basis by the <directive
- module="mod_expires">ExpiresByType</directive> directive. See the
- description of that directive for details about the syntax of the
- argument, and the <a href="#AltSyn">alternate syntax</a>
- description as well.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_expires.xml.ja b/docs/manual/mod/mod_expires.xml.ja
deleted file mode 100644
index caf03d5687..0000000000
--- a/docs/manual/mod/mod_expires.xml.ja
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_expires.xml.meta">
-
-<name>mod_expires</name>
-<description>$B%f!<%6$N;XDj$7$?4p=`$K4p$E$$$?(B <code>Expires</code> HTTP $B%X%C%@$N@8@.(B</description>
-<status>Extension</status>
-<sourcefile>mod_expires.c</sourcefile>
-<identifier>expires_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O%5!<%P1~Ez$N(B <code>Expires</code> HTTP $B%X%C%@$N(B
- $B@_Dj$r@)8f$7$^$9!#85$N%U%!%$%k$,:n@.$5$l$?;~9o$^$?$O(B
- $B%/%i%$%"%s%H$N%"%/%;%9;~9o$N$I$A$i$+$K4p$E$$$F4|8B@Z$lF|$r(B
- $B@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><code>Expires</code> HTTP $B%X%C%@$O%/%i%$%"%s%H$KJ8=q$N(B
- $BM-8z@-$H7QB3@-$r;X<($7$^$9!#J8=q$,%-%c%C%7%e$5$l$?>l9g$K$O!"(B
- $B;XDj;~9o$KC#$9$k$^$G$O!"85$N>l=j$+$i<hF@$9$kBe$o$j$K(B
- $B%-%c%C%7%e$5$l$F$$$k$b$N$r;H$&$3$H$,$G$-$^$9!#$=$N8e$O!"(B
- $B%-%c%C%7%e$K$"$k%3%T!<$O4|8B@Z$l(B (expired) $B$GL58z$G$"$k$H$5$l!"(B
- $B85$N>l=j$+$i?7$7$$$b$N$r<hF@$9$kI,MW$,$"$j$^$9!#(B</p>
-</summary>
-
-<section id="AltSyn"><title>$BBeBX4|4V;XDj9=J8(B</title>
-
- <p><directive module="mod_expires">ExpiresDefault</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="mod_expires">ExpiresByType</directive> $B%G%#%l%/%F%#%V$O(B
- $B0J2<$N$h$jFI$_0W$$9=J8$r;H$C$FDj5A$9$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
- &lt;type&gt;}*"<br />
- ExpiresByType type/encoding "&lt;base&gt; [plus]
- {&lt;num&gt; &lt;type&gt;}*"
- </example>
-
- <p>&lt;base&gt; $B$O0J2<$N$I$l$+$G$9(B:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> ('<code>access</code>' $B$HEy2A(B)</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p><code>plus</code> $B%-!<%o!<%I$O>JN,2DG=$G$9!#(B&lt;num&gt;
- $B$O(B (<code>atoi()</code> $B$,<u$1IU$1$k(B) $B@0?tCM!"(B
- &lt;type&gt; $B$O0J2<$N$I$l$+$G$9(B:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>$BNc$($P!"0J2<$N%G%#%l%/%F%#%V$O$I$l$b%G%U%)%k%H$GJ8=q$,%"%/%;%9$N(B 1 $B%v7n8e$K(B
- $B4|8B$,@Z$l$k$h$&$K$9$k$?$a$K;H$($^$9(B:</p>
-
- <example>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </example>
-
- <p>$B4|8B@Z$l;~9o$O$$$/$D$+(B
- '&lt;num&gt; &lt;type&gt;' $B@a$rDI2C$9$k$3$H$G$h$j:Y$+$/(B
- $B@)8f$9$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </example>
-
- <p>$B=$@5;~9o$K4p$E$$$?@_Dj$r;HMQ$7$F$$$k>l9g!"(BExpires $B%X%C%@$O(B
- $B%G%#%9%/$N%U%!%$%k0J30$N%3%s%F%s%D$K$O(B<strong>$BDI2C$5$l$J$$(B</strong>$B$3$H$KCm0U(B
- $B$7$F$/$@$5$$!#$=$N$h$&$J%3%s%F%s%D$K$O=$@5;~9o$OB8:_$7$J$$$+$i$G$9!#(B</p>
-</section>
-
-<directivesynopsis>
-<name>ExpiresActive</name>
-<description><code>Expires</code> $B%X%C%@$N@8@.$rM-8z$K$9$k(B</description>
-<syntax>ExpiresActive On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$OBP1~$9$k%I%-%e%a%s%H$NNN0h$G(B
- <code>Expires</code> $B%X%C%@$rM-8z$K$9$k$+L58z$K$9$k$+$r7h$a$^$9!#(B
- ($BNc$($P!"(B<code>.htaccess</code> $B%U%!%$%k$G$O$=$N%G%#%l%/%H%j$N(B
- $BJ8=q$N$_$KE,MQ$5$l$k$H$$$&$3$H$G$9!#(B) <code>Off</code> $B$K(B
- $B@_Dj$5$l$?>l9g$OBP1~NN0h$G(B <code>Expires</code> $B%X%C%@$O(B
- $B@8@.$5$l$^$;$s(B (<code>.htaccess</code> $B$,%5!<%P@_Dj%U%!%$%k$N@_Dj$r(B
- $B>e=q$-$9$k!"$H$$$&$h$&$J2<0L%l%Y%k$G$N>e=q$-$,$5$l$F$$$J$1$l$P(B)$B!#(B
- <code>On</code> $B$K@_Dj$5$l$F$$$l$P!"%X%C%@$O(B <directive
- module="mod_expires">ExpiresByType</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="mod_expires">ExpiresDefault</directive> $B%G%#%l%/%F%#%V(B
- $B$N4p=`$K=>$C$FJ8=q$K%X%C%@$rDI2C$7$^$9(B ($B3F%G%#%l%/%F%#%V;2>H(B)$B!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <code>Expires</code> $B%X%C%@$NB8:_$r(B
- $BJ]>Z$9$k$o$1$G$O$J$$$3$H$KCm0U$7$F$/$@$5$$!#4p=`$,K~$?$5$l$F(B
- $B$$$J$$>l9g$O%X%C%@$ODI2C$5$l$:!"7k2L$H$7$F$3$N%G%#%l%/%F%#%V$,(B
- $B;XDj$5$l$F$$$J$+$C$?$+$N$h$&$K$5$(8+$($k$3$H$K$J$j$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresByType</name>
-<description>MIME $B%?%$%W$K$h$C$F@_Dj$5$l$k(B <code>Expires</code> $B%X%C%@$NCM(B</description>
-<syntax>ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O;XDj$5$l$?%?%$%W$N%I%-%e%a%s%H(B
- (<em>$BNc$($P(B</em> <code>text/html</code>)
- $B$KBP$7$F@8@.$5$l$k(B <code>Expires</code> $B%X%C%@$NCM$rDj5A$7$^$9!#(B
- $BFs$DL\$N0z?t$O4|8B@Z$l$NF|;~$r@8@.$9$k$?$a$N4p=`;~9o$KDI2C$5$l$k(B
- $BIC?t$r@_Dj$7$^$9!#(B</p>
-
- <p>$B4p=`;~9o$O%U%!%$%k$N:G=*=$@5;~9o$+!"%/%i%$%"%s%H$N%I%-%e%a%s%H$X$N(B
- $B%"%/%;%9;~9o$G$9!#$I$A$i$r;H$&$Y$-$+$O(B <code><var>&lt;code&gt;</var></code>
- $B$K$h$C$F;XDj$7$^$9!#(B<code>M</code> $B$O4p=`;~9o$H$7$F(B
- $B%U%!%$%k$N:G=*=$@5;~9o$r$H$$$&0UL#$G!"(B<code>A</code> $B$O%/%i%$%"%s%H$N(B
- $B%"%/%;%9;~9o$r;H$&$H$$$&0UL#$K$J$j$^$9!#(B</p>
-
- <p>$B8z2L$K$OHyL/$J0c$$$,$"$j$^$9!#(B<code>M</code> $B$,;HMQ$5$l$?>l9g$O!"(B
- $B$9$Y$F$N%-%c%C%7%e$K$"$k8=:_$N%I%-%e%a%s%H%-%c%C%7%e$OF1;~$K4|8B$,(B
- $B@Z$l$^$9!#$3$l$OF1$8(B URL $B$KKh=5>o$KCV$+$l$kJs$;$N$h$&$J$b$N$K$O(B
- $BHs>o$KM-8z$G$9!#(B<code>A</code> $B$,;HMQ$5$l$?>l9g$O!"4|8B@Z$l$N(B
- $B;~4V$O3F%/%i%$%"%s%H$h$C$F0[$J$j$^$9!#$3$l$O$"$^$jJQ99$5$l$J$$(B
- $B2hA|%U%!%$%k$J$I!"FC$K4XO"$9$k%I%-%e%a%s%H72$,$9$Y$FF1$82hA|$r(B
- $B;2>H$9$k$H$-(B (<em>$B$9$J$o$A(B</em>$B2hA|$,Hf3SE*C;$$4|4VFb$K7+$jJV$7(B
- $B%"%/%;%9$5$l$k$H$-(B) $B$KM-8z$G$9!#(B</p>
-
- <example><title>$BNc(B:</title>
- # enable expirations<br />
- ExpiresActive On<br />
- # expire GIF images after a month in the client's cache<br />
- ExpiresByType image/gif A2592000<br />
- # HTML documents are good for a week from the<br />
- # time they were changed<br />
- ExpiresByType text/html M604800
- </example>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <code>ExpiresActive On</code> $B$,;XDj$5$l$F$$$k(B
- $B$H$-$N$_M-8z$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#$3$l$O!"(B
- $B;XDj$5$l$?(B MIME $B%?%$%W$KBP$7$F(B<em>$B$N$_(B</em> <directive
- module="mod_expires">ExpiresDefault</directive> $B%G%#%l%/%F%#%V$G(B
- $B@_Dj$5$l$?4|8B@Z$l4|F|$r>e=q$-$7$^$9!#(B</p>
-
- <p>$B$3$NJ8=q$NA0$NJ}$G@bL@$5$l$F$$$k(B<a href="#AltSyn">$BBeBX9=J8(B</a>$B$r(B
- $B;H$C$F4|8B@Z$l4|F|$N7W;;J}K!$r;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresDefault</name>
-<description>$B4|8B@Z$l4|F|$r7W;;$9$k%G%U%)%k%H%"%k%4%j%:%`(B</description>
-<syntax>ExpiresDefault <var>&lt;code&gt;seconds</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$OBP1~$9$kHO0O$N$9$Y$F$N%I%-%e%a%s%H$KBP$7$F(B
- $B%G%U%)%k%H$N4|8B@Z$l4|F|$N7W;;%"%k%4%j%:%`$r@_Dj$7$^$9!#(B<directive
- module="mod_expires">ExpiresByType</directive> $B%G%#%l%/%F%#%V$K$h$C$F(B
- $B%?%$%WKh$K>e=q$-$9$k$3$H$,$G$-$^$9!#0z?t$N9=J8$O$=$N%G%#%l%/%F%#%V$N(B
- $B@bL@$r;2>H$7$F$/$@$5$$!#$^$?!"(B<a href="#AltSyn">$BBeBX9=J8(B</a>$B$b(B
- $B;2>H$7$F$/$@$5$$!#(B</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_expires.xml.ko b/docs/manual/mod/mod_expires.xml.ko
deleted file mode 100644
index a8585f6843..0000000000
--- a/docs/manual/mod/mod_expires.xml.ko
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_expires.xml.meta">
-
-<name>mod_expires</name>
-<description>»ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ±âÁØ¿¡ µû¶ó <code>Expires</code>
-HTTP Çì´õ¸¦ »ý¼ºÇÑ´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_expires.c</sourcefile>
-<identifier>expires_module</identifier>
-
-<summary>
- <p>ÀÌ ¸ðµâÀº ¼­¹ö ÀÀ´äÀÇ <code>Expires</code> HTTP Çì´õ
- ¼³Á¤À» Á¶ÀýÇÑ´Ù. ¸¸±âÀÏÀ» ¼Ò½ºÆÄÀÏÀÌ ¸¶Á÷¸· ¼öÁ¤µÉ ½Ã°£
- ȤÀº Ŭ¶óÀ̾ðÆ®°¡ Á¢¼ÓÇÑ ½Ã°£¿¡ »ó´ëÀûÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>Expires</code> HTTP Çì´õ´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¹®¼­ÀÇ
- À¯È¿¼º°ú Áö¼Ó¼ºÀ» ¾Ë·ÁÁØ´Ù. ÀÌ ½Ã°£ÀÌ ¾ÆÁ÷ Áö³ªÁö¾Ê¾Ò´Ù¸é,
- ¹®¼­¸¦ ij½¬¿¡¼­ °¡Á®¿Íµµ µÈ´Ù. ¸¸±âÀÏÀÌ Áö³µ´Ù¸é ij½¬µÈ
- °ÍÀ» "¸¸·áµÇ°í" À¯È¿ÇÏÁö ¾Ê´Ù°í °£ÁÖÇÏ¿©, ¼Ò½º¿¡¼­ ¹®¼­¸¦
- »õ·Î ¾ò¾î¿Í¾ß ÇÑ´Ù.</p>
-</summary>
-
-<section id="AltSyn"><title>´Ù¸¥ ³»ºÎ ¹®¹ý</title>
- <p><directive module="mod_expires">ExpiresDefault</directive>¿Í
- <directive module="mod_expires">ExpiresByType</directive>
- Áö½Ã¾î¸¦ ´õ Àбâ ÁÁÀº Çü½ÄÀ¸·Î ±â¼úÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
- &lt;type&gt;}*"<br />
- ExpiresByType type/encoding "&lt;base&gt; [plus]
- {&lt;num&gt; &lt;type&gt;}*"
- </example>
-
- <p>&lt;base&gt;´Â ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li><code>access</code></li>
-
- <li><code>now</code> ('<code>access</code>'¿Í °°À½)</li>
-
- <li><code>modification</code></li>
- </ul>
-
- <p><code>plus</code> Å°¿öµå´Â ¾ø¾îµµ µÈ´Ù. &lt;num&gt;Àº
- [<code>atoi()</code>¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â] Á¤¼ö°ªÀÌ´Ù.
- &lt;type&gt;Àº ´ÙÀ½Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li><code>years</code></li>
- <li><code>months</code></li>
- <li><code>weeks</code></li>
- <li><code>days</code></li>
- <li><code>hours</code></li>
- <li><code>minutes</code></li>
- <li><code>seconds</code></li>
- </ul>
-
- <p>¿¹¸¦ µé¾î, ´ÙÀ½ ¸ðµÎ´Â ¹®¼­°¡ ±âº»ÀûÀ¸·Î Á¢¼ÓµÈÁö 1´ÞÈÄ¿¡
- ¸¸±âµÈ´Ù°í ¼³Á¤ÇÑ´Ù:</p>
-
- <example>
- ExpiresDefault "access plus 1 month"<br />
- ExpiresDefault "access plus 4 weeks"<br />
- ExpiresDefault "access plus 30 days"
- </example>
-
- <p>'&lt;num&gt; &lt;type&gt;' ±¸¹®À» ¹Ýº¹Çؼ­ »ç¿ëÇÏ¿©
- ¸¸±â½Ã°£À» ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- ExpiresByType text/html "access plus 1 month 15
- days 2 hours"<br />
- ExpiresByType image/gif "modification plus 5 hours 3
- minutes"
- </example>
-
- <p>¸¸¾à ¼öÁ¤½Ã°£(modification)À» ±âÁØÀ¸·Î ¸¸±â½Ã°£À» ¼³Á¤ÇÏ´Â
- °æ¿ì ³»¿ëÀ» µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏ¿¡¼­ °¡Á®¿ÀÁö ¾Ê´Â´Ù¸é Expires
- Çì´õ¸¦ ºÙÀÌÁö <strong>¾Ê´Â´Ù</strong>. ÀÌ °æ¿ì ³»¿ë¿¡ ¼öÁ¤½Ã°£ÀÌ
- ¾ø±â ¶§¹®ÀÌ´Ù.</p>
-</section>
-
-<directivesynopsis>
-<name>ExpiresActive</name>
-<description><code>Expires</code> Çì´õ¸¦ »ý¼ºÇÑ´Ù</description>
-<syntax>ExpiresActive On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â ÇØ´ç ¿µ¿ª¿¡ ´ëÇØ (Áï, <code>.htaccess</code>
- ÆÄÀÏ¿¡¼­ »ç¿ëÇÑ´Ù¸é ±× µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â ¹®¼­µé¸¸ ÇØ´çµÈ´Ù.)
- <code>Expires</code> Çì´õ¸¦ »ý¼ºÇÒÁö À¯¹«¸¦ °áÁ¤ÇÑ´Ù.
- (<code>.htaccess</code> ÆÄÀÏ µîÀ¸·Î ´õ ÇÏÀ§ ´Ü°è¿¡¼­ ¼­¹ö¼³Á¤À»
- º¯°æÇÏÁö¾Ê´Â ÇÑ) <code>Off</code>À̸é ÇØ´ç ¿µ¿ª¿¡ ÀÖ´Â
- ¹®¼­¿¡ <code>Expires</code> Çì´õ¸¦ »ý¼ºÇÏÁö ¾Ê´Â´Ù.
- <code>On</code>À̸é <directive
- module="mod_expires">ExpiresByType</directive>°ú <directive
- module="mod_expires">ExpiresDefault</directive> Áö½Ã¾î·Î
- (<em>ÇØ´ç Ç׸ñÀ» Âü°íÇ϶ó</em>) ÁöÁ¤ÇÑ ±ÔÄ¢¿¡ µû¶ó ¼­ºñ½ºÇÏ·Á´Â
- ¹®¼­¿¡ Çì´õ¸¦ »ý¼ºÇÑ´Ù.</p>
-
- <p>ÀÌ Áö½Ã¾î´Â <code>Expires</code> Çì´õ¸¦ º¸ÀåÇÏÁö ¾Ê´Â´Ù.
- ±ÔÄ¢¿¡ ÇØ´çÇÏÁö ¾Ê´Ù¸é ¸¶Ä¡ ÀÌ Áö½Ã¾î°¡ ¾ø´Â °Íó·³ Çì´õ¸¦
- ¸¸µéÁö ¾Ê´Â´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresByType</name>
-<description>MIME typeÀ¸·Î <code>Expires</code> Çì´õ°ªÀ» ¼³Á¤ÇÑ´Ù</description>
-<syntax>ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â ƯÁ¤ Á¾·ùÀÇ (<em>¿¡¸¦ µé¾î</em>,
- <code>text/html</code>) ¹®¼­¿¡ ´ëÇÑ <code>Expires</code>
- Çì´õ°ªÀ» Á¤ÀÇÇÑ´Ù. µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â ¸¸±â½Ã°£À» °áÁ¤ÇÒ¶§
- ±âÁØ ½Ã°£¿¡ ´õÇÒ ÃÊ´ÜÀ§ °ªÀ» ÁöÁ¤ÇÑ´Ù.</p>
-
- <p>±âÁØ ½Ã°£Àº ÆÄÀÏÀÇ ÃÖ±Ù ¼öÁ¤½Ã°£ ȤÀº Ŭ¶óÀ̾ðÆ®°¡ ¹®¼­¿¡
- Á¢±ÙÇÑ ½Ã°£ÀÌ´Ù. À̶² °ÍÀ» »ç¿ëÇÒÁö´Â
- <code><var>&lt;code&gt;</var></code> Çʵå·Î °áÁ¤ÇØ¾ß ÇÑ´Ù.
- <code>M</code>Àº ±âÁØ ½Ã°£À¸·Î ÆÄÀÏÀÇ ÃÖ±Ù ¼öÁ¤½Ã°£À»
- »ç¿ëÇÏ°í, <code>A</code>´Â Ŭ¶óÀ̾ðÆ®ÀÇ Á¢±Ù ½Ã°£À» »ç¿ëÇÑ´Ù.</p>
-
- <p>Â÷ÀÌ´Â ¹Ì¹¦ÇÏ´Ù. <code>M</code>À» »ç¿ëÇϸé ij½¬¿¡ ÀÖ´Â
- ¸ðµç º¹»çº»ÀÌ °°Àº ½Ã°£¿¡ ¸¸·áµÈ´Ù. ±×·¡¼­ Ç×»ó °°Àº URL·Î
- ã¾Æº¼ ¼ö ÀÖ´Â ÁÖ°£ÀÏÁ¤ °°Àº ¿ëµµ¿¡ ÁÁ´Ù. <code>A</code>¸¦
- »ç¿ëÇÏ¸é º¹»çº»ÀÇ ¸¸±â½Ã°£ÀÌ °¢°¢ ´Ù¸£´Ù. ÀÌ´Â ÀÚÁÖ ¼öÁ¤µÇÁö¾Ê´Â
- ±×¸²ÆÄÀÏ¿¡, ƯÈ÷ ¿©·¯ ¹®¼­¿¡¼­ °°Àº ±×¸²À» ÂüÁ¶ÇÒ¶§ (<em>¿¹¸¦
- µé¾î</em>, À̹ÌÁö´Â »ó´ëÀûÀ¸·Î ªÀº ±â°£µ¿¾È ¹Ýº¹Çؼ­ Á¢±ÙµÈ´Ù),
- À¯¿ëÇÏ´Ù.</p>
-
- <example><title>¿¹Á¦:</title>
- # ¸¸±âÇì´õ¸¦ »ç¿ëÇÑ´Ù<br />
- ExpiresActive On<br />
- # Ŭ¶óÀ̾ðÆ® ij½¬ÀÇ GIF ±×¸²Àº ÇÑ ´ÞÈÄ¿¡ ¸¸±âÇÑ´Ù<br />
- ExpiresByType image/gif A2592000<br />
- # HTML ¹®¼­´Â º¯°æÈÄ ÀÏÁÖÀÏ°£ À¯È¿ÇÏ´Ù
- ExpiresByType text/html M604800
- </example>
-
- <p>ÀÌ Áö½Ã¾î´Â <code>ExpiresActive On</code>À» »ç¿ëÇÒ¶§¸¸
- À¯È¿ÇÔÀ» ÁÖÀÇÇ϶ó. <directive
- module="mod_expires">ExpiresDefault</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ƯÁ¤ MIME type¿¡ ´ëÇؼ­<em>¸¸</em> ¸¸±â½Ã°£À»
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾Õ¿¡¼­ ¼³¸íÇÑ <a href="#AltSyn">´Ù¸¥ ¹®¹ý</a>À» »ç¿ëÇÏ¿©
- ¸¸±â½Ã°£À» °è»êÇÒ ¼öµµ ÀÖ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresDefault</name>
-<description>¸¸±â½Ã°£À» °è»êÇÏ´Â ±âº» ¾Ë°í¸®Áò</description>
-<syntax>ExpiresDefault <var>&lt;code&gt;seconds</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â ÇØ´ç ¿µ¿ª¿¡ ÀÖ´Â ¸ðµç ¹®¼­ÀÇ ¸¸±â½Ã°£À»
- °è»êÇÏ´Â ±âº» ¾Ë°í¸®ÁòÀ» ÁöÁ¤ÇÑ´Ù. <directive
- module="mod_expires">ExpiresByType</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© Á¾·ùº°·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¾Æ±Ô¸ÕÆ® ¹®¹ý¿¡ ´ëÇÑ
- ÀÚ¼¼ÇÑ ¼³¸íÀº ±× Áö½Ã¾î¿Í <a href="#AltSyn">´Ù¸¥ ¹®¹ý</a>À»
- Âü°íÇ϶ó.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_expires.xml.meta b/docs/manual/mod/mod_expires.xml.meta
deleted file mode 100644
index ee1b828e32..0000000000
--- a/docs/manual/mod/mod_expires.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_expires</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_ext_filter.html b/docs/manual/mod/mod_ext_filter.html
deleted file mode 100644
index fb45a4b60f..0000000000
--- a/docs/manual/mod/mod_ext_filter.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_ext_filter.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_ext_filter.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_ext_filter.html.en b/docs/manual/mod/mod_ext_filter.html.en
deleted file mode 100644
index 4444aa1470..0000000000
--- a/docs/manual/mod/mod_ext_filter.html.en
+++ /dev/null
@@ -1,374 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_ext_filter - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_ext_filter</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ext_filter.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_ext_filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Pass the response body through an external program before
-delivery to the client</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>ext_filter_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_ext_filter.c</td></tr></table>
-<h3>Summary</h3>
-
- <p><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> presents a simple and familiar
- programming model for <a href="../filter.html">filters</a>. With
- this module, a program which reads from stdin and writes to stdout
- (i.e., a Unix-style filter command) can be a filter for
- Apache. This filtering mechanism is much slower than using a
- filter which is specially written for the Apache API and runs
- inside of the Apache server process, but it does have the
- following benefits:</p>
-
- <ul>
- <li>the programming model is much simpler</li>
-
- <li>any programming/scripting language can be used, provided
- that it allows the program to read from standard input and
- write to standard output</li>
-
- <li>existing programs can be used unmodified as Apache
- filters</li>
- </ul>
-
- <p>Even when the performance characteristics are not suitable
- for production use, <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> can be used as
- a prototype environment for filters.</p>
-
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#extfilterdefine">ExtFilterDefine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#extfilteroptions">ExtFilterOptions</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../filter.html">Filters</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <h3>Generating HTML from some other type of response</h3>
- <div class="example"><p><code>
- # mod_ext_filter directive to define a filter<br />
- # to HTML-ize text/c files using the external<br />
- # program /usr/bin/enscript, with the type of<br />
- # the result set to text/html<br />
- ExtFilterDefine c-to-html mode=output \<br />
- <span class="indent">
- intype=text/c outtype=text/html \<br />
- cmd="/usr/bin/enscript --color -W html -Ec -o - -"<br />
- </span>
- <br />
- &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;<br />
- <span class="indent">
- # core directive to cause the new filter to<br />
- # be run on output<br />
- SetOutputFilter c-to-html<br />
- <br />
- # mod_mime directive to set the type of .c<br />
- # files to text/c<br />
- AddType text/c .c<br />
- <br />
- # mod_ext_filter directive to set the debug<br />
- # level just high enough to see a log message<br />
- # per request showing the configuration in force<br />
- ExtFilterOptions DebugLevel=1<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
- <h3>Implementing a content encoding filter</h3>
- <p>Note: this gzip example is just for the purposes of illustration.
- Please refer to <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> for a practical
- implementation.</p>
-
- <div class="example"><p><code>
- # mod_ext_filter directive to define the external filter<br />
- ExtFilterDefine gzip mode=output cmd=/bin/gzip<br />
- <br />
- &lt;Location /gzipped&gt;<br />
- <span class="indent">
- # core directive to cause the gzip filter to be<br />
- # run on output<br />
- SetOutputFilter gzip<br />
- <br />
- # mod_header directive to add<br />
- # "Content-Encoding: gzip" header field<br />
- Header set Content-Encoding gzip<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-
- <h3>Slowing down the server</h3>
- <div class="example"><p><code>
- # mod_ext_filter directive to define a filter<br />
- # which runs everything through cat; cat doesn't<br />
- # modify anything; it just introduces extra pathlength<br />
- # and consumes more resources<br />
- ExtFilterDefine slowdown mode=output cmd=/bin/cat \<br />
- <span class="indent">
- preservescontentlength<br />
- </span>
- <br />
- &lt;Location /&gt;<br />
- <span class="indent">
- # core directive to cause the slowdown filter to<br />
- # be run several times on output<br />
- #<br />
- SetOutputFilter slowdown;slowdown;slowdown<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-
- <h3>Using sed to replace text in the response</h3>
- <div class="example"><p><code>
- # mod_ext_filter directive to define a filter which<br />
- # replaces text in the response<br />
- #<br />
- ExtFilterDefine fixtext mode=output intype=text/html \<br />
- <span class="indent">
- cmd="/bin/sed s/verdana/arial/g"<br />
- </span>
- <br />
- &lt;Location /&gt;<br />
- <span class="indent">
- # core directive to cause the fixtext filter to<br />
- # be run on output<br />
- SetOutputFilter fixtext<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-
- <h3>Tracing another filter</h3>
- <div class="example"><p><code>
- # Trace the data read and written by mod_deflate<br />
- # for a particular client (IP 192.168.1.31)<br />
- # experiencing compression problems.<br />
- # This filter will trace what goes into mod_deflate.<br />
- ExtFilterDefine tracebefore \<br />
- <span class="indent">
- cmd="/bin/tracefilter.pl /tmp/tracebefore" \<br />
- EnableEnv=trace_this_client<br />
- </span>
- <br />
- # This filter will trace what goes after mod_deflate.<br />
- # Note that without the ftype parameter, the default<br />
- # filter type of AP_FTYPE_RESOURCE would cause the<br />
- # filter to be placed *before* mod_deflate in the filter<br />
- # chain. Giving it a numeric value slightly higher than<br />
- # AP_FTYPE_CONTENT_SET will ensure that it is placed<br />
- # after mod_deflate.<br />
- ExtFilterDefine traceafter \<br />
- <span class="indent">
- cmd="/bin/tracefilter.pl /tmp/traceafter" \<br />
- EnableEnv=trace_this_client ftype=21<br />
- </span>
- <br />
- &lt;Directory /usr/local/docs&gt;<br />
- <span class="indent">
- SetEnvIf Remote_Addr 192.168.1.31 trace_this_client<br />
- SetOutputFilter tracebefore;deflate;traceafter<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <div class="example"><h3>Here is the filter which traces the data:</h3><p><code>
- #!/usr/local/bin/perl -w<br />
- use strict;<br />
- <br />
- open(SAVE, "&gt;$ARGV[0]")<br />
- <span class="indent">
- or die "can't open $ARGV[0]: $?";<br />
- </span>
- <br />
- while (&lt;STDIN&gt;) {<br />
- <span class="indent">
- print SAVE $_;<br />
- print $_;<br />
- </span>
- }<br />
- <br />
- close(SAVE);
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define an external filter</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p>The <code class="directive">ExtFilterDefine</code> directive defines the
- characteristics of an external filter, including the program to
- run and its arguments.</p>
-
- <p><var>filtername</var> specifies the name of the filter being
- defined. This name can then be used in SetOutputFilter
- directives. It must be unique among all registered filters.
- <em>At the present time, no error is reported by the
- register-filter API, so a problem with duplicate names isn't
- reported to the user.</em></p>
-
- <p>Subsequent parameters can appear in any order and define the
- external command to run and certain other characteristics. The
- only required parameter is <code>cmd=</code>. These parameters
- are:</p>
-
- <dl>
- <dt><code>cmd=<var>cmdline</var></code></dt>
-
- <dd>The <code>cmd=</code> keyword allows you to specify the
- external command to run. If there are arguments after the
- program name, the command line should be surrounded in
- quotation marks (<em>e.g.</em>, <code>cmd="<var>/bin/mypgm</var>
- <var>arg1</var> <var>arg2</var>"</code>. Normal shell quoting is
- not necessary since the program is run directly, bypassing the shell.
- Program arguments are blank-delimited. A backslash can be used to
- escape blanks which should be part of a program argument. Any
- backslashes which are part of the argument must be escaped with
- backslash themselves. In addition to the standard CGI environment
- variables, DOCUMENT_URI, DOCUMENT_PATH_INFO, and
- QUERY_STRING_UNESCAPED will also be set for the program.</dd>
-
- <dt><code>mode=<var>mode</var></code></dt>
-
- <dd>Use <code>mode=output</code> (the default) for filters which
- process the response. Use <code>mode=input</code> for filters
- which process the request. <code>mode=input</code> is new with
- Apache 2.1.</dd>
-
- <dt><code>intype=<var>imt</var></code></dt>
-
- <dd>This parameter specifies the internet media type (<em>i.e.</em>,
- MIME type) of documents which should be filtered. By default,
- all documents are filtered. If <code>intype=</code> is
- specified, the filter will be disabled for documents of other
- types.</dd>
-
- <dt><code>outtype=<var>imt</var></code></dt>
-
- <dd>This parameter specifies the internet media type (<em>i.e.</em>,
- MIME type) of filtered documents. It is useful when the
- filter changes the internet media type as part of the
- filtering operation. By default, the internet media type is
- unchanged.</dd>
-
- <dt><code>PreservesContentLength</code></dt>
-
- <dd>The <code>PreservesContentLength</code> keyword specifies
- that the filter preserves the content length. This is not the
- default, as most filters change the content length. In the
- event that the filter doesn't modify the length, this keyword
- should be specified.</dd>
-
- <dt><code>ftype=<var>filtertype</var></code></dt>
-
- <dd>This parameter specifies the numeric value for filter type
- that the filter should be registered as. The default value,
- AP_FTYPE_RESOURCE, is sufficient in most cases. If the filter
- needs to operate at a different point in the filter chain than
- resource filters, then this parameter will be necessary. See
- the AP_FTYPE_foo definitions in util_filter.h for appropriate
- values.</dd>
-
- <dt><code>disableenv=<var>env</var></code></dt>
-
- <dd>This parameter specifies the name of an environment variable
- which, if set, will disable the filter.</dd>
-
- <dt><code>enableenv=<var>env</var></code></dt>
-
- <dd>This parameter specifies the name of an environment variable
- which must be set, or the filter will be disabled.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure mod_ext_filter options</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p>The <code class="directive">ExtFilterOptions</code> directive specifies
- special processing options for <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>.
- <var>Option</var> can be one of</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>
- The <code>DebugLevel</code> keyword allows you to specify
- the level of debug messages generated by
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>. By default, no debug messages
- are generated. This is equivalent to
- <code>DebugLevel=0</code>. With higher numbers, more debug
- messages are generated, and server performance will be
- degraded. The actual meanings of the numeric values are
- described with the definitions of the DBGLVL_ constants
- near the beginning of <code>mod_ext_filter.c</code>.
-
- <p>Note: The core directive <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> should be used to cause debug messages to
- be stored in the Apache error log.</p>
- </dd>
-
- <dt><code>LogStderr | NoLogStderr</code></dt>
-
- <dd>The <code>LogStderr</code> keyword specifies that
- messages written to standard error by the external filter
- program will be saved in the Apache error log.
- <code>NoLogStderr</code> disables this feature.</dd>
- </dl>
-
- <div class="example"><h3>Example</h3><p><code>
- ExtFilterOptions LogStderr DebugLevel=0
- </code></p></div>
-
- <p>Messages written to the filter's standard error will be stored
- in the Apache error log. No debug messages will be generated by
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>. </p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ext_filter.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_ext_filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_ext_filter.html.ko.euc-kr b/docs/manual/mod/mod_ext_filter.html.ko.euc-kr
deleted file mode 100644
index a2f6a0b9fa..0000000000
--- a/docs/manual/mod/mod_ext_filter.html.ko.euc-kr
+++ /dev/null
@@ -1,350 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_ext_filter - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_ext_filter</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_ext_filter.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>ÀÀ´ä ³»¿ëÀ» ¿ÜºÎ ÇÁ·Î±×·¥À¸·Î ó¸®ÇÑ ÈÄ Å¬¶óÀ̾ðÆ®·Î
-º¸³½´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>ext_filter_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_ext_filter.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>¸¦ »ç¿ëÇÏ¸é °£´ÜÇÏ°í Àͼ÷ÇÑ
- ¹æ¹ýÀ¸·Î <a href="../filter.html">ÇÊÅÍ</a>¸¦ ¸¸µé ¼ö ÀÖ´Ù.
- Ç¥ÁØÀԷ¿¡¼­ Àаí Ç¥ÁØÃâ·Â¿¡ ¾²´Â ÇÁ·Î±×·¥(Áï, À¯´Ð½º½Ä
- ÇÊÅÍ ¸í·É¾î)À» ¾ÆÆÄÄ¡ ÇÊÅÍ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ÇÊÅÍ´Â
- ¾ÆÆÄÄ¡ API·Î ¾²¿©Áö°í ¾ÆÆÄÄ¡ ¼­¹ö ÇÁ·Î¼¼½º ¾È¿¡¼­ ½ÇÇàµÇ´Â
- ÇÊÅÍ¿¡ ºñÇØ ¸Å¿ì ´À¸®Áö¸¸, ´ÙÀ½°ú °°Àº ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>ÇÁ·Î±×·¡¹Ö ¸ðµ¨ÀÌ ¸Å¿ì °£´ÜÇÏ´Ù</li>
-
- <li>ÇÁ·Î±×·¥ÀÌ Ç¥ÁØÀԷ¿¡¼­ Àаí Ç¥ÁØÃâ·Â¿¡ ¾µ ¼ö¸¸ ÀÖ´Ù¸é
- ¾î¶² ÇÁ·Î±×·¡¹Ö/½ºÅ©¸³Æ® ¾ð¾î¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù</li>
-
- <li>ÀÌ¹Ì ÀÖ´Â ÇÁ·Î±×·¥À» ¼öÁ¤¾øÀÌ ¾ÆÆÄÄ¡ ÇÊÅÍ·Î »ç¿ëÇÒ
- ¼ö ÀÖ´Ù</li>
- </ul>
-
- <p>½ÇÁ¦ »ç¿ëÇϱ⿡´Â ¼º´ÉÀÌ ¶³¾îÁöÁö¸¸,
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>¸¦ »ç¿ëÇÏ¿© ÇÊÅ͸¦ »¡¸® ¸¸µé¾îº¼
- ¼ö ÀÖ´Ù.</p>
-
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#extfilterdefine">ExtFilterDefine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#extfilteroptions">ExtFilterOptions</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">¿¹Á¦</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../filter.html">ÇÊÅÍ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
-
- <h3>´Ù¸¥ typeÀÇ ÀÀ´äÀ» HTML·Î ¸¸µç´Ù</h3>
- <div class="example"><p><code>
- # mod_ext_filter Áö½Ã¾î¸¦ °¡Áö°í<br />
- # ¿ÜºÎ ÇÁ·Î±×·¥ /usr/bin/enscript¸¦ »ç¿ëÇÏ¿©<br />
- # ¹®¼­ÆÄÀÏ°ú text/c ÆÄÀÏÀ» HTML·Î ¸¸µé°í °á°úÀÇ<br />
- # typeÀ» text/html·Î º¯°æÇÏ´Â ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù<br />
- ExtFilterDefine c-to-html mode=output \<br />
- <span class="indent">
- intype=text/c outtype=text/html \<br />
- cmd="/usr/bin/enscript --color -W html -Ec -o - -"<br />
- </span>
- <br />
- &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;<br />
- <span class="indent">
- # Ãâ·Â¿¡ »õ·Î¿î ÇÊÅ͸¦ ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- SetOutputFilter c-to-html<br />
- <br />
- # .c ÆÄÀÏÀÇ typeÀ» text/c·Î ¸¸µå´Â mod_mime<br />
- # Áö½Ã¾î<br />
- AddType text/c .c<br />
- <br />
- # µð¹ö±× ¼öÁØÀ» ³ô¿©¼­ ¿äû¸¶´Ù ÇöÀç ¼³Á¤À»<br />
- # ¾Ë·ÁÁÖ´Â ·Î±×¹®À» ±â·ÏÇÏ´Â mod_ext_filter<br />
- # Áö½Ã¾î<br />
- ExtFilterOptions DebugLevel=1<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
-
- <h3>content ÀÎÄÚµù ÇÊÅÍ ±¸ÇöÇϱâ</h3>
- <p>Note: ¾Æ·¡ gzip ¿¹Á¦´Â ´ÜÁö ¼³¸íÀ» ¿¹·Î µç °ÍÀÌ´Ù.
- ½ÇÁ¦ ¼­ºñ½º¿¡ »ç¿ëÇÏ·Á¸é <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>¸¦
- Âü°íÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <div class="example"><p><code>
- # ¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÏ´Â mod_ext_filter Áö½Ã¾î<br />
- ExtFilterDefine gzip mode=output cmd=/bin/gzip<br />
- <br />
- &lt;Location /gzipped&gt;<br />
- <span class="indent">
- # Ãâ·ÂÇÒ¶§ gzip ÇÊÅ͸¦ ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- SetOutputFilter gzip<br />
- <br />
- # "Content-Encoding: gzip" Çì´õ¸¦ Ãß°¡ÇÏ´Â<br />
- # mod_header Áö½Ã¾î<br />
- Header set Content-Encoding gzip<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-
- <h3>¼­¹ö¸¦ ´À¸®°Ô Çϱâ</h3>
- <div class="example"><p><code>
- # catÀ¸·Î ¸ðµç ³»¿ëÀ» Åë°úÇÏ´Â ÇÊÅ͸¦ Á¤ÀÇÇÏ´Â<br />
- # mod_ext_filter Áö½Ã¾î; catÀº ¾Æ¹«°Íµµ ¼öÁ¤ÇÏÁö<br />
- # ¾Ê´Â´Ù; ´ÜÁö 󸮰æ·Î¸¦ ±æ°Ô ÇÏ¿© ÀÚ¿øÀ» ´õ ¼Ò¸ðÇÑ´Ù<br />
- ExtFilterDefine slowdown mode=output cmd=/bin/cat \<br />
- <span class="indent">
- preservescontentlength<br />
- </span>
- <br />
- &lt;Location /&gt;<br />
- <span class="indent">
- # Ãâ·ÂÇÒ¶§ slowdown ÇÊÅ͸¦ ¿©·¯¹ø ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- #<br />
- SetOutputFilter slowdown;slowdown;slowdown<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-
- <h3>sed¸¦ »ç¿ëÇÏ¿© ÀÀ´ä¿¡¼­ ±ÛÀ» ´ëüÇϱâ</h3>
- <div class="example"><p><code>
- # ÀÀ´ä¿¡¼­ ±ÛÀ» ´ëüÇÏ´Â ÇÊÅ͸¦ Á¤ÀÇÇÏ´Â<br />
- # mod_ext_filter Áö½Ã¾î<br />
- #<br />
- ExtFilterDefine fixtext mode=output intype=text/html \<br />
- <span class="indent">
- cmd="/bin/sed s/verdana/arial/g"<br />
- </span>
- <br />
- &lt;Location /&gt;<br />
- <span class="indent">
- # Ãâ·ÂÇÒ¶§ fixtext ÇÊÅ͸¦ ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- SetOutputFilter fixtext<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
-
- <h3>´Ù¸¥ ÇÊÅ͸¦ ÃßÀûÇϱâ</h3>
- <div class="example"><p><code>
- # ¾ÐÃà ¹®Á¦°¡ Àִ ƯÁ¤ Ŭ¶óÀ̾ðÆ®(IP 192.168.1.31)¿¡<br />
- # ´ëÇØ mod_deflate°¡ ÀÐ°í ¾²´Â ÀڷḦ ÃßÀûÇÑ´Ù.<br />
- # ÀÌ ÇÊÅÍ´Â mod_deflate·Î º¸³»±â Àü ÀڷḦ ÃßÀûÇÑ´Ù.<br />
- ExtFilterDefine tracebefore \<br />
- <span class="indent">
- cmd="/bin/tracefilter.pl /tmp/tracebefore" \<br />
- EnableEnv=trace_this_client<br />
- </span>
- <br />
- # ÀÌ ÇÊÅÍ´Â mod_deflate¿¡¼­ ³ª¿À´Â ÀڷḦ ÃßÀûÇÑ´Ù.<br />
- # ftype ÆĶó¹ÌÅ͸¦ »ç¿ëÇÏÁö¾Ê´Â °æ¿ì, ±âº» ÇÊÅÍÇü<br />
- # AP_FTYPE_RESOURCE´Â ÇÊÅÍ ¼ø¼­¸¦ mod_deflate *ÀÌÀü¿¡*<br />
- # µÐ´Ù. AP_FTYPE_CONTENT_SET º¸´Ù Á¶±Ý ³ôÀº ¼ýÀÚ°ªÀ»<br />
- # ÁöÁ¤Çϸé mod_deflate ÀÌÈÄ¿¡ ½ÇÇàÇÑ´Ù.<br />
- ExtFilterDefine traceafter \<br />
- <span class="indent">
- cmd="/bin/tracefilter.pl /tmp/traceafter" \<br />
- EnableEnv=trace_this_client ftype=21<br />
- </span>
- <br />
- &lt;Directory /usr/local/docs&gt;<br />
- <span class="indent">
- SetEnvIf Remote_Addr 192.168.1.31 trace_this_client<br />
- SetOutputFilter tracebefore;deflate;traceafter<br />
- </span>
- &lt;/Directory&gt;
- </code></p></div>
-
- <div class="example"><h3>´ÙÀ½Àº ÀڷḦ ÃßÀûÇÏ´Â ÇÊÅÍÀÌ´Ù:</h3><p><code>
- #!/usr/local/bin/perl -w<br />
- use strict;<br />
- <br />
- open(SAVE, "&gt;$ARGV[0]")<br />
- <span class="indent">
- or die "can't open $ARGV[0]: $?";<br />
- </span>
- <br />
- while (&lt;STDIN&gt;) {<br />
- <span class="indent">
- print SAVE $_;<br />
- print $_;<br />
- </span>
- }<br />
- <br />
- close(SAVE);
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p><code class="directive">ExtFilterDefine</code> Áö½Ã¾î´Â ¿ÜºÎ
- ÇÊÅÍÀÇ ¼ºÁú°ú ½ÇÇàÇÒ ÇÁ·Î±×·¥, ¾Æ±Ô¸ÕÆ®¸¦ Á¤ÀÇÇÑ´Ù.</p>
-
- <p><var>filtername</var>Àº Á¤ÀÇÇÒ ÇÊÅÍ À̸§À» ÁöÁ¤ÇÑ´Ù.
- ÀÌ À̸§À» SetOutputFilter Áö½Ã¾î¿¡¼­ »ç¿ëÇÑ´Ù. µî·ÏÇÑ ¸ðµç
- ÇÊÅ͵鰣¿¡ À̸§ÀÌ °ãÄ¡¸é ¾ÈµÈ´Ù. <em>ÇöÀç ÇÊÅ͵î·Ï API´Â
- ¿À·ù¸¦ º¸°íÇÏÁö ¾Ê´Â´Ù. ±×·¡¼­ »ç¿ëÀÚ´Â À̸§ÀÌ °ãÄ¡´Â ¹®Á¦¸¦
- ¾ËÁö ¸øÇÑ´Ù.</em></p>
-
- <p>½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¿Í ´Ù¸¥ ¼ºÁúÀ» Á¤ÀÇÇÏ´Â ³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®´Â
- ¾î¶² ¼ø¼­·Î ³ª¿Íµµ °¡´ÉÇÏ´Ù. ´Ü, <code>cmd=</code> ÆĶó¹ÌÅÍ´Â
- ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ÆĶó¹ÌÅÍ´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <dl>
- <dt><code>cmd=<var>cmdline</var></code></dt>
-
- <dd><code>cmd=</code> Å°¿öµå´Â ½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.
- ÇÁ·Î±×·¥¸í µÚ¿¡ ¾Æ±Ô¸ÕÆ®°¡ ÀÖ´Ù¸é ¸í·ÉÇàÀ» ½Öµû¿ÈÇ¥·Î
- ¹­¾î¾ß ÇÑ´Ù (<em>¿¹¸¦ µé¾î</em>,
- <code>cmd="<var>/bin/mypgm</var> <var>arg1</var>
- <var>arg2</var>"</code>). ½©À» °ÅÄ¡Áö¾Ê°í Á÷Á¢ ÇÁ·Î±×·¥À»
- ½ÇÇàÇϱ⶧¹®¿¡ ÀϹÝÀûÀÎ ½© µû¿ÈÇ¥´Â ÇÊ¿ä¾ø´Ù. ÇÁ·Î±×·¥
- ¾Æ±Ô¸ÕÆ®µéÀº °ø¹éÀ¸·Î ±¸ºÐÇÑ´Ù. ÇÁ·Î±×·¥ ¾Æ±Ô¸ÕÆ®¿¡ °ø¹éÀÌ
- ÀÖ´Ù¸é °ø¹é ¾Õ¿¡ ¹é½½·¡½¬·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ¹é½½·¡½¬°¡
- ¾Æ±Ô¸ÕÆ®ÀÇ ÀϺζó¸é ¹é½½·¡½¬¸¦ µÎ¹ø »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥À»
- ½ÇÇàÇÒ¶§ Ç¥ÁØ CGI ȯ°æº¯¼ö¿Í Ãß°¡·Î DOCUMENT_URI,
- DOCUMENT_PATH_INFO, QUERY_STRING_UNESCAPED º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</dd>
-
- <dt><code>mode=<var>mode</var></code></dt>
-
- <dd>ÀÀ´äÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â (±âº»°ªÀÎ) <code>mode=output</code>À»
- »ç¿ëÇÑ´Ù. ¿äûÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â <code>mode=input</code>À»
- »ç¿ëÇÑ´Ù. <code>mode=input</code>Àº ¾ÆÆÄÄ¡ 2.1¿¡ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt><code>intype=<var>imt</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÒ ¹®¼­ÀÇ ÀÎÅÍ³Ý media
- type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¸ðµç
- ¹®¼­¸¦ ÇÊÅͷΠó¸®ÇÑ´Ù. <code>intype=</code>À» ÁöÁ¤Çϸé
- ´Ù¸¥ typeÀÇ ¹®¼­´Â ÇÊÅͷΠó¸®ÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>outtype=<var>imt</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÑ ¹®¼­ÀÇ ÀÎÅÍ³Ý media
- type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ÇÊÅÍó¸® ÀÛ¾÷Áß¿¡
- ÀÎÅÍ³Ý media typeÀ» º¯°æÇÒ¶§ À¯¿ëÇÏ´Ù. ±âº»ÀûÀ¸·Î, ÀÎÅͳÝ
- media typeÀº º¯ÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>PreservesContentLength</code></dt>
-
- <dd><code>PreservesContentLength</code> Å°¿öµå´Â ÇÊÅÍ°¡
- content length¸¦ À¯ÁöÇϵµ·Ï ÇÑ´Ù. ´ëºÎºÐÀÇ ÇÊÅÍ°¡ content
- length¸¦ º¯°æÇϹǷΠÀÌ Å°¿öµå´Â ±âº»°ªÀÌ ¾Æ´Ï´Ù. ÇÊÅÍ°¡
- ±æÀ̸¦ À¯ÁöÇÒ¶§¸¸ ÀÌ Å°¿öµå¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>ftype=<var>filtertype</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅÍ Á¾·ù¿¡ ´ëÇÑ ¼ýÀÚ°ªÀ» ÁöÁ¤ÇÑ´Ù.
- ´ëºÎºÐÀÇ °æ¿ì ±âº»°ªÀÎ AP_FTYPE_RESOURCE°¡ Àû´çÇÏ´Ù.
- ÇÊÅ͸¦ ½ÇÇàÇÏ´Â ¼ø¼­°¡ ÀÚ¿øÇÊÅÍ¿Í ´Þ¶ó¾ßÇÏ´Â °æ¿ì ÀÌ
- ÆĶó¹ÌÅÍ°¡ ÇÊ¿äÇÏ´Ù. Àû´çÇÑ °ªÀ» ¾Ë·Á¸é util_filter.h¿¡
- ÀÖ´Â AP_FTYPE_* Á¤ÀǸ¦ Âü°íÇ϶ó.</dd>
-
- <dt><code>disableenv=<var>env</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀǵǾú´Ù¸é ÇÊÅ͸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>enableenv=<var>env</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀÇµÈ °æ¿ì ÇÊÅ͸¦
- »ç¿ëÇÑ´Ù.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>mod_ext_filter ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_ext_filter</td></tr>
-</table>
- <p><code class="directive">ExtFilterOptions</code> Áö½Ã¾î´Â
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>ÀÇ Æ¯º°ÇÑ Ã³¸®¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.
- <var>Option</var>Àº ´ÙÀ½Áß Çϳª´Ù.</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>
- <code>DebugLevel</code> Å°¿öµå´Â
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>°¡ ±â·ÏÇÏ´Â µð¹ö±× ¹®±¸
- ¼öÁØÀ» Á¤ÇÑ´Ù. ±âº»°ªÀº µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù.
- ÀÌ´Â <code>DebugLevel=0</code>°ú °°´Ù. ³ôÀº ¼ýÀÚ¸¦
- »ç¿ëÇÒ¼ö·Ï, ´õ ¸¹Àº µð¹ö±×¹®ÀÌ ±â·ÏµÇ°í ¼­¹ö ¼º´ÉÀÌ
- ¶³¾îÁø´Ù. ¼ýÀÚ°ªÀÇ ½ÇÁ¦ Àǹ̴ <code>mod_ext_filter.c</code>
- ¾ÕºÎºÐ¿¡ ÀÖ´Â DBGLVL_ »ó¼ö Á¤ÀÇ¿¡ ¼³¸íµÇÀÖ´Ù.
-
- <p>ÁÖÀÇ: ÇÊÅÍ ·Î±×¸¦ ±â·ÏÇÏ·Á¸é core Áö½Ã¾î <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>À» »ç¿ëÇÏ¿© µð¹ö±×¹®À»
- ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇØ¾ß ÇÑ´Ù.</p>
- </dd>
-
- <dt><code>LogStderr | NoLogStderr</code></dt>
-
- <dd><code>LogStderr</code> Å°¿öµå´Â ¿ÜºÎ ÇÊÅÍ ÇÁ·Î±×·¥ÀÌ
- Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦ ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÑ´Ù.
- <code>NoLogStderr</code>´Â ÀÌ ±â´ÉÀ» ÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- ExtFilterOptions LogStderr DebugLevel=0
- </code></p></div>
-
- <p>À§ÀÇ ¼³Á¤À» »ç¿ëÇϸé ÇÊÅÍ°¡ Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦
- ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÏ°í, <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>´Â
- ÀÚü µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù. </p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_ext_filter.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_ext_filter.xml b/docs/manual/mod/mod_ext_filter.xml
deleted file mode 100644
index 095174efa2..0000000000
--- a/docs/manual/mod/mod_ext_filter.xml
+++ /dev/null
@@ -1,353 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.16 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_ext_filter.xml.meta">
-
-<name>mod_ext_filter</name>
-<description>Pass the response body through an external program before
-delivery to the client</description>
-<status>Extension</status>
-<sourcefile>mod_ext_filter.c</sourcefile>
-<identifier>ext_filter_module</identifier>
-
-<summary>
- <p><module>mod_ext_filter</module> presents a simple and familiar
- programming model for <a href="../filter.html">filters</a>. With
- this module, a program which reads from stdin and writes to stdout
- (i.e., a Unix-style filter command) can be a filter for
- Apache. This filtering mechanism is much slower than using a
- filter which is specially written for the Apache API and runs
- inside of the Apache server process, but it does have the
- following benefits:</p>
-
- <ul>
- <li>the programming model is much simpler</li>
-
- <li>any programming/scripting language can be used, provided
- that it allows the program to read from standard input and
- write to standard output</li>
-
- <li>existing programs can be used unmodified as Apache
- filters</li>
- </ul>
-
- <p>Even when the performance characteristics are not suitable
- for production use, <module>mod_ext_filter</module> can be used as
- a prototype environment for filters.</p>
-
-</summary>
-<seealso><a href="../filter.html">Filters</a></seealso>
-
-<section id="examples"><title>Examples</title>
-
- <section><title>Generating HTML from some other type of response</title>
- <example>
- # mod_ext_filter directive to define a filter<br />
- # to HTML-ize text/c files using the external<br />
- # program /usr/bin/enscript, with the type of<br />
- # the result set to text/html<br />
- ExtFilterDefine c-to-html mode=output \<br />
- <indent>
- intype=text/c outtype=text/html \<br />
- cmd="/usr/bin/enscript --color -W html -Ec -o - -"<br />
- </indent>
- <br />
- &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;<br />
- <indent>
- # core directive to cause the new filter to<br />
- # be run on output<br />
- SetOutputFilter c-to-html<br />
- <br />
- # mod_mime directive to set the type of .c<br />
- # files to text/c<br />
- AddType text/c .c<br />
- <br />
- # mod_ext_filter directive to set the debug<br />
- # level just high enough to see a log message<br />
- # per request showing the configuration in force<br />
- ExtFilterOptions DebugLevel=1<br />
- </indent>
- &lt;/Directory&gt;
- </example>
- </section>
-
- <section><title>Implementing a content encoding filter</title>
- <p>Note: this gzip example is just for the purposes of illustration.
- Please refer to <module>mod_deflate</module> for a practical
- implementation.</p>
-
- <example>
- # mod_ext_filter directive to define the external filter<br />
- ExtFilterDefine gzip mode=output cmd=/bin/gzip<br />
- <br />
- &lt;Location /gzipped&gt;<br />
- <indent>
- # core directive to cause the gzip filter to be<br />
- # run on output<br />
- SetOutputFilter gzip<br />
- <br />
- # mod_header directive to add<br />
- # "Content-Encoding: gzip" header field<br />
- Header set Content-Encoding gzip<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section>
-
- <section><title>Slowing down the server</title>
- <example>
- # mod_ext_filter directive to define a filter<br />
- # which runs everything through cat; cat doesn't<br />
- # modify anything; it just introduces extra pathlength<br />
- # and consumes more resources<br />
- ExtFilterDefine slowdown mode=output cmd=/bin/cat \<br />
- <indent>
- preservescontentlength<br />
- </indent>
- <br />
- &lt;Location /&gt;<br />
- <indent>
- # core directive to cause the slowdown filter to<br />
- # be run several times on output<br />
- #<br />
- SetOutputFilter slowdown;slowdown;slowdown<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section>
-
- <section><title>Using sed to replace text in the response</title>
- <example>
- # mod_ext_filter directive to define a filter which<br />
- # replaces text in the response<br />
- #<br />
- ExtFilterDefine fixtext mode=output intype=text/html \<br />
- <indent>
- cmd="/bin/sed s/verdana/arial/g"<br />
- </indent>
- <br />
- &lt;Location /&gt;<br />
- <indent>
- # core directive to cause the fixtext filter to<br />
- # be run on output<br />
- SetOutputFilter fixtext<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section>
-
- <section><title>Tracing another filter</title>
- <example>
- # Trace the data read and written by mod_deflate<br />
- # for a particular client (IP 192.168.1.31)<br />
- # experiencing compression problems.<br />
- # This filter will trace what goes into mod_deflate.<br />
- ExtFilterDefine tracebefore \<br />
- <indent>
- cmd="/bin/tracefilter.pl /tmp/tracebefore" \<br />
- EnableEnv=trace_this_client<br />
- </indent>
- <br />
- # This filter will trace what goes after mod_deflate.<br />
- # Note that without the ftype parameter, the default<br />
- # filter type of AP_FTYPE_RESOURCE would cause the<br />
- # filter to be placed *before* mod_deflate in the filter<br />
- # chain. Giving it a numeric value slightly higher than<br />
- # AP_FTYPE_CONTENT_SET will ensure that it is placed<br />
- # after mod_deflate.<br />
- ExtFilterDefine traceafter \<br />
- <indent>
- cmd="/bin/tracefilter.pl /tmp/traceafter" \<br />
- EnableEnv=trace_this_client ftype=21<br />
- </indent>
- <br />
- &lt;Directory /usr/local/docs&gt;<br />
- <indent>
- SetEnvIf Remote_Addr 192.168.1.31 trace_this_client<br />
- SetOutputFilter tracebefore;deflate;traceafter<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <example><title>Here is the filter which traces the data:</title>
- #!/usr/local/bin/perl -w<br />
- use strict;<br />
- <br />
- open(SAVE, "&gt;$ARGV[0]")<br />
- <indent>
- or die "can't open $ARGV[0]: $?";<br />
- </indent>
- <br />
- while (&lt;STDIN&gt;) {<br />
- <indent>
- print SAVE $_;<br />
- print $_;<br />
- </indent>
- }<br />
- <br />
- close(SAVE);
- </example>
- </section>
-</section> <!-- /Examples -->
-
-<directivesynopsis>
-<name>ExtFilterDefine</name>
-<description>Define an external filter</description>
-<syntax>ExtFilterDefine <var>filtername</var> <var>parameters</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>ExtFilterDefine</directive> directive defines the
- characteristics of an external filter, including the program to
- run and its arguments.</p>
-
- <p><var>filtername</var> specifies the name of the filter being
- defined. This name can then be used in SetOutputFilter
- directives. It must be unique among all registered filters.
- <em>At the present time, no error is reported by the
- register-filter API, so a problem with duplicate names isn't
- reported to the user.</em></p>
-
- <p>Subsequent parameters can appear in any order and define the
- external command to run and certain other characteristics. The
- only required parameter is <code>cmd=</code>. These parameters
- are:</p>
-
- <dl>
- <dt><code>cmd=<var>cmdline</var></code></dt>
-
- <dd>The <code>cmd=</code> keyword allows you to specify the
- external command to run. If there are arguments after the
- program name, the command line should be surrounded in
- quotation marks (<em>e.g.</em>, <code>cmd="<var>/bin/mypgm</var>
- <var>arg1</var> <var>arg2</var>"</code>. Normal shell quoting is
- not necessary since the program is run directly, bypassing the shell.
- Program arguments are blank-delimited. A backslash can be used to
- escape blanks which should be part of a program argument. Any
- backslashes which are part of the argument must be escaped with
- backslash themselves. In addition to the standard CGI environment
- variables, DOCUMENT_URI, DOCUMENT_PATH_INFO, and
- QUERY_STRING_UNESCAPED will also be set for the program.</dd>
-
- <dt><code>mode=<var>mode</var></code></dt>
-
- <dd>Use <code>mode=output</code> (the default) for filters which
- process the response. Use <code>mode=input</code> for filters
- which process the request. <code>mode=input</code> is new with
- Apache 2.1.</dd>
-
- <dt><code>intype=<var>imt</var></code></dt>
-
- <dd>This parameter specifies the internet media type (<em>i.e.</em>,
- MIME type) of documents which should be filtered. By default,
- all documents are filtered. If <code>intype=</code> is
- specified, the filter will be disabled for documents of other
- types.</dd>
-
- <dt><code>outtype=<var>imt</var></code></dt>
-
- <dd>This parameter specifies the internet media type (<em>i.e.</em>,
- MIME type) of filtered documents. It is useful when the
- filter changes the internet media type as part of the
- filtering operation. By default, the internet media type is
- unchanged.</dd>
-
- <dt><code>PreservesContentLength</code></dt>
-
- <dd>The <code>PreservesContentLength</code> keyword specifies
- that the filter preserves the content length. This is not the
- default, as most filters change the content length. In the
- event that the filter doesn't modify the length, this keyword
- should be specified.</dd>
-
- <dt><code>ftype=<var>filtertype</var></code></dt>
-
- <dd>This parameter specifies the numeric value for filter type
- that the filter should be registered as. The default value,
- AP_FTYPE_RESOURCE, is sufficient in most cases. If the filter
- needs to operate at a different point in the filter chain than
- resource filters, then this parameter will be necessary. See
- the AP_FTYPE_foo definitions in util_filter.h for appropriate
- values.</dd>
-
- <dt><code>disableenv=<var>env</var></code></dt>
-
- <dd>This parameter specifies the name of an environment variable
- which, if set, will disable the filter.</dd>
-
- <dt><code>enableenv=<var>env</var></code></dt>
-
- <dd>This parameter specifies the name of an environment variable
- which must be set, or the filter will be disabled.</dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExtFilterOptions</name>
-<description>Configure <module>mod_ext_filter</module> options</description>
-<syntax>ExtFilterOptions <var>option</var> [<var>option</var>] ...</syntax>
-<default>ExtFilterOptions DebugLevel=0 NoLogStderr</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p>The <directive>ExtFilterOptions</directive> directive specifies
- special processing options for <module>mod_ext_filter</module>.
- <var>Option</var> can be one of</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>
- The <code>DebugLevel</code> keyword allows you to specify
- the level of debug messages generated by
- <module>mod_ext_filter</module>. By default, no debug messages
- are generated. This is equivalent to
- <code>DebugLevel=0</code>. With higher numbers, more debug
- messages are generated, and server performance will be
- degraded. The actual meanings of the numeric values are
- described with the definitions of the DBGLVL_ constants
- near the beginning of <code>mod_ext_filter.c</code>.
-
- <p>Note: The core directive <directive module="core"
- >LogLevel</directive> should be used to cause debug messages to
- be stored in the Apache error log.</p>
- </dd>
-
- <dt><code>LogStderr | NoLogStderr</code></dt>
-
- <dd>The <code>LogStderr</code> keyword specifies that
- messages written to standard error by the external filter
- program will be saved in the Apache error log.
- <code>NoLogStderr</code> disables this feature.</dd>
- </dl>
-
- <example><title>Example</title>
- ExtFilterOptions LogStderr DebugLevel=0
- </example>
-
- <p>Messages written to the filter's standard error will be stored
- in the Apache error log. No debug messages will be generated by
- <module>mod_ext_filter</module>. </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_ext_filter.xml.ko b/docs/manual/mod/mod_ext_filter.xml.ko
deleted file mode 100644
index cd392c2c0b..0000000000
--- a/docs/manual/mod/mod_ext_filter.xml.ko
+++ /dev/null
@@ -1,329 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.16 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_ext_filter.xml.meta">
-
-<name>mod_ext_filter</name>
-<description>ÀÀ´ä ³»¿ëÀ» ¿ÜºÎ ÇÁ·Î±×·¥À¸·Î ó¸®ÇÑ ÈÄ Å¬¶óÀ̾ðÆ®·Î
-º¸³½´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_ext_filter.c</sourcefile>
-<identifier>ext_filter_module</identifier>
-
-<summary>
- <p><module>mod_ext_filter</module>¸¦ »ç¿ëÇÏ¸é °£´ÜÇÏ°í Àͼ÷ÇÑ
- ¹æ¹ýÀ¸·Î <a href="../filter.html">ÇÊÅÍ</a>¸¦ ¸¸µé ¼ö ÀÖ´Ù.
- Ç¥ÁØÀԷ¿¡¼­ Àаí Ç¥ÁØÃâ·Â¿¡ ¾²´Â ÇÁ·Î±×·¥(Áï, À¯´Ð½º½Ä
- ÇÊÅÍ ¸í·É¾î)À» ¾ÆÆÄÄ¡ ÇÊÅÍ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ÇÊÅÍ´Â
- ¾ÆÆÄÄ¡ API·Î ¾²¿©Áö°í ¾ÆÆÄÄ¡ ¼­¹ö ÇÁ·Î¼¼½º ¾È¿¡¼­ ½ÇÇàµÇ´Â
- ÇÊÅÍ¿¡ ºñÇØ ¸Å¿ì ´À¸®Áö¸¸, ´ÙÀ½°ú °°Àº ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>ÇÁ·Î±×·¡¹Ö ¸ðµ¨ÀÌ ¸Å¿ì °£´ÜÇÏ´Ù</li>
-
- <li>ÇÁ·Î±×·¥ÀÌ Ç¥ÁØÀԷ¿¡¼­ Àаí Ç¥ÁØÃâ·Â¿¡ ¾µ ¼ö¸¸ ÀÖ´Ù¸é
- ¾î¶² ÇÁ·Î±×·¡¹Ö/½ºÅ©¸³Æ® ¾ð¾î¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù</li>
-
- <li>ÀÌ¹Ì ÀÖ´Â ÇÁ·Î±×·¥À» ¼öÁ¤¾øÀÌ ¾ÆÆÄÄ¡ ÇÊÅÍ·Î »ç¿ëÇÒ
- ¼ö ÀÖ´Ù</li>
- </ul>
-
- <p>½ÇÁ¦ »ç¿ëÇϱ⿡´Â ¼º´ÉÀÌ ¶³¾îÁöÁö¸¸,
- <module>mod_ext_filter</module>¸¦ »ç¿ëÇÏ¿© ÇÊÅ͸¦ »¡¸® ¸¸µé¾îº¼
- ¼ö ÀÖ´Ù.</p>
-
-</summary>
-<seealso><a href="../filter.html">ÇÊÅÍ</a></seealso>
-
-<section id="examples"><title>¿¹Á¦</title>
-
- <section><title>´Ù¸¥ typeÀÇ ÀÀ´äÀ» HTML·Î ¸¸µç´Ù</title>
- <example>
- # mod_ext_filter Áö½Ã¾î¸¦ °¡Áö°í<br />
- # ¿ÜºÎ ÇÁ·Î±×·¥ /usr/bin/enscript¸¦ »ç¿ëÇÏ¿©<br />
- # ¹®¼­ÆÄÀÏ°ú text/c ÆÄÀÏÀ» HTML·Î ¸¸µé°í °á°úÀÇ<br />
- # typeÀ» text/html·Î º¯°æÇÏ´Â ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù<br />
- ExtFilterDefine c-to-html mode=output \<br />
- <indent>
- intype=text/c outtype=text/html \<br />
- cmd="/usr/bin/enscript --color -W html -Ec -o - -"<br />
- </indent>
- <br />
- &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;<br />
- <indent>
- # Ãâ·Â¿¡ »õ·Î¿î ÇÊÅ͸¦ ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- SetOutputFilter c-to-html<br />
- <br />
- # .c ÆÄÀÏÀÇ typeÀ» text/c·Î ¸¸µå´Â mod_mime<br />
- # Áö½Ã¾î<br />
- AddType text/c .c<br />
- <br />
- # µð¹ö±× ¼öÁØÀ» ³ô¿©¼­ ¿äû¸¶´Ù ÇöÀç ¼³Á¤À»<br />
- # ¾Ë·ÁÁÖ´Â ·Î±×¹®À» ±â·ÏÇÏ´Â mod_ext_filter<br />
- # Áö½Ã¾î<br />
- ExtFilterOptions DebugLevel=1<br />
- </indent>
- &lt;/Directory&gt;
- </example>
- </section>
-
- <section><title>content ÀÎÄÚµù ÇÊÅÍ ±¸ÇöÇϱâ</title>
- <p>Note: ¾Æ·¡ gzip ¿¹Á¦´Â ´ÜÁö ¼³¸íÀ» ¿¹·Î µç °ÍÀÌ´Ù.
- ½ÇÁ¦ ¼­ºñ½º¿¡ »ç¿ëÇÏ·Á¸é <module>mod_deflate</module>¸¦
- Âü°íÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <example>
- # ¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÏ´Â mod_ext_filter Áö½Ã¾î<br />
- ExtFilterDefine gzip mode=output cmd=/bin/gzip<br />
- <br />
- &lt;Location /gzipped&gt;<br />
- <indent>
- # Ãâ·ÂÇÒ¶§ gzip ÇÊÅ͸¦ ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- SetOutputFilter gzip<br />
- <br />
- # "Content-Encoding: gzip" Çì´õ¸¦ Ãß°¡ÇÏ´Â<br />
- # mod_header Áö½Ã¾î<br />
- Header set Content-Encoding gzip<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section>
-
- <section><title>¼­¹ö¸¦ ´À¸®°Ô Çϱâ</title>
- <example>
- # catÀ¸·Î ¸ðµç ³»¿ëÀ» Åë°úÇÏ´Â ÇÊÅ͸¦ Á¤ÀÇÇÏ´Â<br />
- # mod_ext_filter Áö½Ã¾î; catÀº ¾Æ¹«°Íµµ ¼öÁ¤ÇÏÁö<br />
- # ¾Ê´Â´Ù; ´ÜÁö 󸮰æ·Î¸¦ ±æ°Ô ÇÏ¿© ÀÚ¿øÀ» ´õ ¼Ò¸ðÇÑ´Ù<br />
- ExtFilterDefine slowdown mode=output cmd=/bin/cat \<br />
- <indent>
- preservescontentlength<br />
- </indent>
- <br />
- &lt;Location /&gt;<br />
- <indent>
- # Ãâ·ÂÇÒ¶§ slowdown ÇÊÅ͸¦ ¿©·¯¹ø ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- #<br />
- SetOutputFilter slowdown;slowdown;slowdown<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section>
-
- <section><title>sed¸¦ »ç¿ëÇÏ¿© ÀÀ´ä¿¡¼­ ±ÛÀ» ´ëüÇϱâ</title>
- <example>
- # ÀÀ´ä¿¡¼­ ±ÛÀ» ´ëüÇÏ´Â ÇÊÅ͸¦ Á¤ÀÇÇÏ´Â<br />
- # mod_ext_filter Áö½Ã¾î<br />
- #<br />
- ExtFilterDefine fixtext mode=output intype=text/html \<br />
- <indent>
- cmd="/bin/sed s/verdana/arial/g"<br />
- </indent>
- <br />
- &lt;Location /&gt;<br />
- <indent>
- # Ãâ·ÂÇÒ¶§ fixtext ÇÊÅ͸¦ ½ÇÇàÇÏ´Â core Áö½Ã¾î<br />
- SetOutputFilter fixtext<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section>
-
- <section><title>´Ù¸¥ ÇÊÅ͸¦ ÃßÀûÇϱâ</title>
- <example>
- # ¾ÐÃà ¹®Á¦°¡ Àִ ƯÁ¤ Ŭ¶óÀ̾ðÆ®(IP 192.168.1.31)¿¡<br />
- # ´ëÇØ mod_deflate°¡ ÀÐ°í ¾²´Â ÀڷḦ ÃßÀûÇÑ´Ù.<br />
- # ÀÌ ÇÊÅÍ´Â mod_deflate·Î º¸³»±â Àü ÀڷḦ ÃßÀûÇÑ´Ù.<br />
- ExtFilterDefine tracebefore \<br />
- <indent>
- cmd="/bin/tracefilter.pl /tmp/tracebefore" \<br />
- EnableEnv=trace_this_client<br />
- </indent>
- <br />
- # ÀÌ ÇÊÅÍ´Â mod_deflate¿¡¼­ ³ª¿À´Â ÀڷḦ ÃßÀûÇÑ´Ù.<br />
- # ftype ÆĶó¹ÌÅ͸¦ »ç¿ëÇÏÁö¾Ê´Â °æ¿ì, ±âº» ÇÊÅÍÇü<br />
- # AP_FTYPE_RESOURCE´Â ÇÊÅÍ ¼ø¼­¸¦ mod_deflate *ÀÌÀü¿¡*<br />
- # µÐ´Ù. AP_FTYPE_CONTENT_SET º¸´Ù Á¶±Ý ³ôÀº ¼ýÀÚ°ªÀ»<br />
- # ÁöÁ¤Çϸé mod_deflate ÀÌÈÄ¿¡ ½ÇÇàÇÑ´Ù.<br />
- ExtFilterDefine traceafter \<br />
- <indent>
- cmd="/bin/tracefilter.pl /tmp/traceafter" \<br />
- EnableEnv=trace_this_client ftype=21<br />
- </indent>
- <br />
- &lt;Directory /usr/local/docs&gt;<br />
- <indent>
- SetEnvIf Remote_Addr 192.168.1.31 trace_this_client<br />
- SetOutputFilter tracebefore;deflate;traceafter<br />
- </indent>
- &lt;/Directory&gt;
- </example>
-
- <example><title>´ÙÀ½Àº ÀڷḦ ÃßÀûÇÏ´Â ÇÊÅÍÀÌ´Ù:</title>
- #!/usr/local/bin/perl -w<br />
- use strict;<br />
- <br />
- open(SAVE, "&gt;$ARGV[0]")<br />
- <indent>
- or die "can't open $ARGV[0]: $?";<br />
- </indent>
- <br />
- while (&lt;STDIN&gt;) {<br />
- <indent>
- print SAVE $_;<br />
- print $_;<br />
- </indent>
- }<br />
- <br />
- close(SAVE);
- </example>
- </section>
-</section> <!-- /Examples -->
-
-<directivesynopsis>
-<name>ExtFilterDefine</name>
-<description>¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù</description>
-<syntax>ExtFilterDefine <var>filtername</var> <var>parameters</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>ExtFilterDefine</directive> Áö½Ã¾î´Â ¿ÜºÎ
- ÇÊÅÍÀÇ ¼ºÁú°ú ½ÇÇàÇÒ ÇÁ·Î±×·¥, ¾Æ±Ô¸ÕÆ®¸¦ Á¤ÀÇÇÑ´Ù.</p>
-
- <p><var>filtername</var>Àº Á¤ÀÇÇÒ ÇÊÅÍ À̸§À» ÁöÁ¤ÇÑ´Ù.
- ÀÌ À̸§À» SetOutputFilter Áö½Ã¾î¿¡¼­ »ç¿ëÇÑ´Ù. µî·ÏÇÑ ¸ðµç
- ÇÊÅ͵鰣¿¡ À̸§ÀÌ °ãÄ¡¸é ¾ÈµÈ´Ù. <em>ÇöÀç ÇÊÅ͵î·Ï API´Â
- ¿À·ù¸¦ º¸°íÇÏÁö ¾Ê´Â´Ù. ±×·¡¼­ »ç¿ëÀÚ´Â À̸§ÀÌ °ãÄ¡´Â ¹®Á¦¸¦
- ¾ËÁö ¸øÇÑ´Ù.</em></p>
-
- <p>½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¿Í ´Ù¸¥ ¼ºÁúÀ» Á¤ÀÇÇÏ´Â ³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®´Â
- ¾î¶² ¼ø¼­·Î ³ª¿Íµµ °¡´ÉÇÏ´Ù. ´Ü, <code>cmd=</code> ÆĶó¹ÌÅÍ´Â
- ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. »ç¿ëÇÒ ¼ö ÀÖ´Â ÆĶó¹ÌÅÍ´Â ´ÙÀ½°ú °°´Ù:</p>
-
- <dl>
- <dt><code>cmd=<var>cmdline</var></code></dt>
-
- <dd><code>cmd=</code> Å°¿öµå´Â ½ÇÇàÇÒ ¿ÜºÎ ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.
- ÇÁ·Î±×·¥¸í µÚ¿¡ ¾Æ±Ô¸ÕÆ®°¡ ÀÖ´Ù¸é ¸í·ÉÇàÀ» ½Öµû¿ÈÇ¥·Î
- ¹­¾î¾ß ÇÑ´Ù (<em>¿¹¸¦ µé¾î</em>,
- <code>cmd="<var>/bin/mypgm</var> <var>arg1</var>
- <var>arg2</var>"</code>). ½©À» °ÅÄ¡Áö¾Ê°í Á÷Á¢ ÇÁ·Î±×·¥À»
- ½ÇÇàÇϱ⶧¹®¿¡ ÀϹÝÀûÀÎ ½© µû¿ÈÇ¥´Â ÇÊ¿ä¾ø´Ù. ÇÁ·Î±×·¥
- ¾Æ±Ô¸ÕÆ®µéÀº °ø¹éÀ¸·Î ±¸ºÐÇÑ´Ù. ÇÁ·Î±×·¥ ¾Æ±Ô¸ÕÆ®¿¡ °ø¹éÀÌ
- ÀÖ´Ù¸é °ø¹é ¾Õ¿¡ ¹é½½·¡½¬·Î »ç¿ëÇØ¾ß ÇÑ´Ù. ¹é½½·¡½¬°¡
- ¾Æ±Ô¸ÕÆ®ÀÇ ÀϺζó¸é ¹é½½·¡½¬¸¦ µÎ¹ø »ç¿ëÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥À»
- ½ÇÇàÇÒ¶§ Ç¥ÁØ CGI ȯ°æº¯¼ö¿Í Ãß°¡·Î DOCUMENT_URI,
- DOCUMENT_PATH_INFO, QUERY_STRING_UNESCAPED º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.</dd>
-
- <dt><code>mode=<var>mode</var></code></dt>
-
- <dd>ÀÀ´äÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â (±âº»°ªÀÎ) <code>mode=output</code>À»
- »ç¿ëÇÑ´Ù. ¿äûÀ» ó¸®ÇÏ´Â ÇÊÅÍ´Â <code>mode=input</code>À»
- »ç¿ëÇÑ´Ù. <code>mode=input</code>Àº ¾ÆÆÄÄ¡ 2.1¿¡ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt><code>intype=<var>imt</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÒ ¹®¼­ÀÇ ÀÎÅÍ³Ý media
- type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¸ðµç
- ¹®¼­¸¦ ÇÊÅͷΠó¸®ÇÑ´Ù. <code>intype=</code>À» ÁöÁ¤Çϸé
- ´Ù¸¥ typeÀÇ ¹®¼­´Â ÇÊÅͷΠó¸®ÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>outtype=<var>imt</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅͷΠó¸®ÇÑ ¹®¼­ÀÇ ÀÎÅÍ³Ý media
- type(<em>Áï</em>, MIME type)À» ÁöÁ¤ÇÑ´Ù. ÇÊÅÍó¸® ÀÛ¾÷Áß¿¡
- ÀÎÅÍ³Ý media typeÀ» º¯°æÇÒ¶§ À¯¿ëÇÏ´Ù. ±âº»ÀûÀ¸·Î, ÀÎÅͳÝ
- media typeÀº º¯ÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>PreservesContentLength</code></dt>
-
- <dd><code>PreservesContentLength</code> Å°¿öµå´Â ÇÊÅÍ°¡
- content length¸¦ À¯ÁöÇϵµ·Ï ÇÑ´Ù. ´ëºÎºÐÀÇ ÇÊÅÍ°¡ content
- length¸¦ º¯°æÇϹǷΠÀÌ Å°¿öµå´Â ±âº»°ªÀÌ ¾Æ´Ï´Ù. ÇÊÅÍ°¡
- ±æÀ̸¦ À¯ÁöÇÒ¶§¸¸ ÀÌ Å°¿öµå¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>ftype=<var>filtertype</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ´Â ÇÊÅÍ Á¾·ù¿¡ ´ëÇÑ ¼ýÀÚ°ªÀ» ÁöÁ¤ÇÑ´Ù.
- ´ëºÎºÐÀÇ °æ¿ì ±âº»°ªÀÎ AP_FTYPE_RESOURCE°¡ Àû´çÇÏ´Ù.
- ÇÊÅ͸¦ ½ÇÇàÇÏ´Â ¼ø¼­°¡ ÀÚ¿øÇÊÅÍ¿Í ´Þ¶ó¾ßÇÏ´Â °æ¿ì ÀÌ
- ÆĶó¹ÌÅÍ°¡ ÇÊ¿äÇÏ´Ù. Àû´çÇÑ °ªÀ» ¾Ë·Á¸é util_filter.h¿¡
- ÀÖ´Â AP_FTYPE_* Á¤ÀǸ¦ Âü°íÇ϶ó.</dd>
-
- <dt><code>disableenv=<var>env</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀǵǾú´Ù¸é ÇÊÅ͸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>enableenv=<var>env</var></code></dt>
-
- <dd>ÀÌ ÆĶó¹ÌÅÍ·Î ¼³Á¤ÇÑ È¯°æº¯¼ö°¡ Á¤ÀÇµÈ °æ¿ì ÇÊÅ͸¦
- »ç¿ëÇÑ´Ù.</dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExtFilterOptions</name>
-<description><module>mod_ext_filter</module> ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù</description>
-<syntax>ExtFilterOptions <var>option</var> [<var>option</var>] ...</syntax>
-<default>ExtFilterOptions DebugLevel=0 NoLogStderr</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
- <p><directive>ExtFilterOptions</directive> Áö½Ã¾î´Â
- <module>mod_ext_filter</module>ÀÇ Æ¯º°ÇÑ Ã³¸®¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.
- <var>Option</var>Àº ´ÙÀ½Áß Çϳª´Ù.</p>
-
- <dl>
- <dt><code>DebugLevel=<var>n</var></code></dt>
-
- <dd>
- <code>DebugLevel</code> Å°¿öµå´Â
- <module>mod_ext_filter</module>°¡ ±â·ÏÇÏ´Â µð¹ö±× ¹®±¸
- ¼öÁØÀ» Á¤ÇÑ´Ù. ±âº»°ªÀº µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù.
- ÀÌ´Â <code>DebugLevel=0</code>°ú °°´Ù. ³ôÀº ¼ýÀÚ¸¦
- »ç¿ëÇÒ¼ö·Ï, ´õ ¸¹Àº µð¹ö±×¹®ÀÌ ±â·ÏµÇ°í ¼­¹ö ¼º´ÉÀÌ
- ¶³¾îÁø´Ù. ¼ýÀÚ°ªÀÇ ½ÇÁ¦ Àǹ̴ <code>mod_ext_filter.c</code>
- ¾ÕºÎºÐ¿¡ ÀÖ´Â DBGLVL_ »ó¼ö Á¤ÀÇ¿¡ ¼³¸íµÇÀÖ´Ù.
-
- <p>ÁÖÀÇ: ÇÊÅÍ ·Î±×¸¦ ±â·ÏÇÏ·Á¸é core Áö½Ã¾î <directive
- module="core">LogLevel</directive>À» »ç¿ëÇÏ¿© µð¹ö±×¹®À»
- ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇØ¾ß ÇÑ´Ù.</p>
- </dd>
-
- <dt><code>LogStderr | NoLogStderr</code></dt>
-
- <dd><code>LogStderr</code> Å°¿öµå´Â ¿ÜºÎ ÇÊÅÍ ÇÁ·Î±×·¥ÀÌ
- Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦ ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÑ´Ù.
- <code>NoLogStderr</code>´Â ÀÌ ±â´ÉÀ» ÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
-
- <example><title>¿¹Á¦</title>
- ExtFilterOptions LogStderr DebugLevel=0
- </example>
-
- <p>À§ÀÇ ¼³Á¤À» »ç¿ëÇϸé ÇÊÅÍ°¡ Ç¥ÁØ¿À·ù·Î Ãâ·ÂÇÏ´Â ¹®±¸¸¦
- ¾ÆÆÄÄ¡ ¿À·ù·Î±×¿¡ ±â·ÏÇÏ°í, <module>mod_ext_filter</module>´Â
- ÀÚü µð¹ö±×¹®À» ±â·ÏÇÏÁö ¾Ê´Â´Ù. </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_ext_filter.xml.meta b/docs/manual/mod/mod_ext_filter.xml.meta
deleted file mode 100644
index 72a277b5a9..0000000000
--- a/docs/manual/mod/mod_ext_filter.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_ext_filter</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_file_cache.html b/docs/manual/mod/mod_file_cache.html
deleted file mode 100644
index 1fc51cd79c..0000000000
--- a/docs/manual/mod/mod_file_cache.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_file_cache.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_file_cache.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_file_cache.html.en b/docs/manual/mod/mod_file_cache.html.en
deleted file mode 100644
index fcb30d982a..0000000000
--- a/docs/manual/mod/mod_file_cache.html.en
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_file_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_file_cache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_file_cache.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_file_cache.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Caches a static list of files in memory</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>file_cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_file_cache.c</td></tr></table>
-<h3>Summary</h3>
-
-
- <div class="warning">
- This module should be used with care. You can easily create a broken
- site using <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>, so read this document
- carefully.
- </div>
-
- <p><em>Caching</em> frequently requested files that change very
- infrequently is a technique for reducing server load.
- <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code> provides two techniques for caching
- frequently requested <em>static</em> files. Through configuration
- directives, you can direct <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code> to either
- open then <code>mmap()</code> a file, or to pre-open a file and save
- the file's open <em>file handle</em>. Both techniques reduce server
- load when processing requests for these files by doing part of the work
- (specifically, the file I/O) for serving the file when the
- server is started rather than during each request.</p>
-
- <p>Notice: You cannot use this for speeding up CGI programs or
- other files which are served by special content handlers. It
- can only be used for regular files which are usually served by
- the Apache core content handler.</p>
-
- <p>This module is an extension of and borrows heavily from the
- <code>mod_mmap_static</code> module in Apache 1.3.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachefile">CacheFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mmapfile">MMapFile</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#using">Using mod_file_cache</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Using mod_file_cache</a></h2>
-
- <p><code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code> caches a list of statically
- configured files via <code class="directive"><a href="#mmapfile">MMapFile</a></code> or <code class="directive"><a href="#cachefile">CacheFile</a></code> directives in the main server configuration.</p>
-
- <p>Not all platforms support both directives. For example, Apache
- on Windows does not currently support the <code class="directive"><a href="#mmapstatic">MMapStatic</a></code> directive, while
- other platforms, like AIX, support both. You will receive an error
- message in the server error log if you attempt to use an
- unsupported directive. If given an unsupported directive, the
- server will start but the file will not be cached. On platforms
- that support both directives, you should experiment with both to
- see which works best for you.</p>
-
- <h3>MMapFile Directive</h3>
-
- <p>The <code class="directive"><a href="#mmapfile">MMapFile</a></code>
- directive of <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code> maps a list of
- statically configured files into memory through the system call
- <code>mmap()</code>. This system call is available on most modern
- Unix derivates, but not on all. There are sometimes system-specific
- limits on the size and number of files that can be
- <code>mmap()</code>ed, experimentation is probably the easiest way
- to find out.</p>
-
- <p>This <code>mmap()</code>ing is done once at server start or
- restart, only. So whenever one of the mapped files changes on the
- filesystem you <em>have</em> to restart the server (see the <a href="../stopping.html">Stopping and Restarting</a> documentation).
- To reiterate that point: if the files are modified <em>in place</em>
- without restarting the server you may end up serving requests that
- are completely bogus. You should update files by unlinking the old
- copy and putting a new copy in place. Most tools such as
- <code>rdist</code> and <code>mv</code> do this. The reason why this
- modules doesn't take care of changes to the files is that this check
- would need an extra <code>stat()</code> every time which is a waste
- and against the intent of I/O reduction.</p>
-
-
- <h3>CacheFile Directive</h3>
-
- <p>The <code class="directive"><a href="#cachefile">CacheFile</a></code>
- directive of <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code> opens an active
- <em>handle</em> or <em>file descriptor</em> to the file (or files)
- listed in the configuration directive and places these open file
- handles in the cache. When the file is requested, the server
- retrieves the handle from the cache and passes it to the
- <code>sendfile()</code> (or <code>TransmitFile()</code> on Windows),
- socket API.</p>
-
-
-
- <p>This file handle caching is done once at server start or
- restart, only. So whenever one of the cached files changes on
- the filesystem you <em>have</em> to restart the server (see the
- <a href="../stopping.html">Stopping and Restarting</a>
- documentation). To reiterate that point: if the files are
- modified <em>in place</em> without restarting the server you
- may end up serving requests that are completely bogus. You
- should update files by unlinking the old copy and putting a new
- copy in place. Most tools such as <code>rdist</code> and
- <code>mv</code> do this.</p>
-
-
- <div class="note"><h3>Note</h3>
- <p>Don't bother asking for a directive which recursively
- caches all the files in a directory. Try this instead... See the
- <code class="directive"><a href="../mod/core.html#include">Include</a></code> directive, and consider
- this command:</p>
-
- <div class="example"><p><code>
- find /www/htdocs -type f -print \<br />
- | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
- </code></p></div>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheFile" id="CacheFile">CacheFile</a> <a name="cachefile" id="cachefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Cache a list of file handles at startup time</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p>The <code class="directive">CacheFile</code> directive opens handles to
- one or more files (given as whitespace separated arguments) and
- places these handles into the cache at server startup
- time. Handles to cached files are automatically closed on a server
- shutdown. When the files have changed on the filesystem, the
- server should be restarted to to re-cache them.</p>
-
- <p>Be careful with the <var>file-path</var> arguments: They have
- to literally match the filesystem path Apache's URL-to-filename
- translation handlers create. We cannot compare inodes or other
- stuff to match paths through symbolic links <em>etc.</em>
- because that again would cost extra <code>stat()</code> system
- calls which is not acceptable. This module may or may not work
- with filenames rewritten by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- CacheFile /usr/local/apache/htdocs/index.html
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MMapFile" id="MMapFile">MMapFile</a> <a name="mmapfile" id="mmapfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Map a list of files into memory at startup time</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MMapFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p>The <code class="directive">MMapFile</code> directive maps one or more files
- (given as whitespace separated arguments) into memory at server
- startup time. They are automatically unmapped on a server
- shutdown. When the files have changed on the filesystem at
- least a <code>HUP</code> or <code>USR1</code> signal should be send to
- the server to re-<code>mmap()</code> them.</p>
-
- <p>Be careful with the <var>file-path</var> arguments: They have
- to literally match the filesystem path Apache's URL-to-filename
- translation handlers create. We cannot compare inodes or other
- stuff to match paths through symbolic links <em>etc.</em>
- because that again would cost extra <code>stat()</code> system
- calls which is not acceptable. This module may or may not work
- with filenames rewritten by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- MMapFile /usr/local/apache/htdocs/index.html
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_file_cache.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_file_cache.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_file_cache.html.ko.euc-kr b/docs/manual/mod/mod_file_cache.html.ko.euc-kr
deleted file mode 100644
index 7f21e60691..0000000000
--- a/docs/manual/mod/mod_file_cache.html.ko.euc-kr
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_file_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_file_cache</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_file_cache.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_file_cache.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¸Þ¸ð¸®¿¡ Á¤Àû ÆÄÀϵéÀ» ij½¬</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>file_cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_file_cache.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
- <div class="warning">
- ÀÌ ¸ðµâÀº Á¶½ÉÇؼ­ »ç¿ëÇØ¾ß ÇÑ´Ù. <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>¸¦
- »ç¿ëÇÏ¿© »çÀÌÆ®¸¦ ¾û¸ÁÀ¸·Î ¸¸µé±â ½±±â¶§¹®¿¡ ÀÌ ¹®¼­¸¦
- ²Ä²ÄÈ÷ ÀÐ±æ ¹Ù¶õ´Ù.
- </div>
-
- <p>°ÅÀÇ º¯ÇÏÁö ¾Ê°í ÀÚÁÖ ¿äûµÇ´Â ÆÄÀÏÀ» <em>ij½¬</em>¿¡
- ÀúÀåÇÏ¿© ¼­¹ö ºÎÇϸ¦ ÁÙÀÏ ¼ö ÀÖ´Ù. <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>´Â
- ÀÚÁÖ ¿äûµÇ´Â <em>Á¤Àû</em> ÆÄÀÏÀ» µÎ°¡Áö ¹æ½ÄÀ¸·Î ij½¬¿¡
- ÀúÀåÇÑ´Ù. ¼³Á¤ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>°¡
- ÆÄÀÏÀ» ¿­°í(open) <code>mmap()</code>ÇÒÁö ¾Æ´Ï¸é ÆÄÀÏÀ»
- ¿­°í <em>ÆÄÀÏ ÇÚµé</em>À» ÀúÀåÇÒÁö °áÁ¤ÇÑ´Ù. µÎ ¹æ½Ä ¸ðµÎ
- ÆÄÀÏÀ» ¼­ºñ½ºÇϱâÀ§ÇØ ÇÊ¿äÇÑ ÀÛ¾÷ÀÇ ÀϺθ¦ (ƯÈ÷ ÆÄÀÏ ÀÔÃâ·Â
- ÀÛ¾÷) ÆÄÀÏÀ» ¿äûÇÒ ¶§¸¶´Ù ¸Å¹ø ÇÏ´Â ´ë½Å ¼­¹ö°¡ ½ÃÀÛÇÒ¶§
- Çѹø¸¸ ÇÏ¿© ¼­¹ö ºÎÇÏ°¡ °¨¼ÒÇÑ´Ù.</p>
-
- <p>ÁÖÀÇ: ÀÌ ¹æ¹ýÀº CGI ÇÁ·Î±×·¥À̳ª Ưº°ÇÑ ³»¿ëÇڵ鷯¸¦
- ÅëÇØ ¼­ºñ½ºÇÏ´Â ÆÄÀÏÀÇ ¼­ºñ½º ¼Óµµ¸¦ ³ôÀÏ ¼ö ¾ø´Ù. ÀÌ ¹æ¹ýÀº
- º¸Åë ¾ÆÆÄÄ¡ core ³»¿ëÇڵ鷯°¡ ¼­ºñ½ºÇÏ´Â ÀϹÝÆÄÀÏ¿¡¸¸
- Àû¿ëµÈ´Ù.</p>
-
- <p>ÀÌ ¸ðµâÀº ¾ÆÆÄÄ¡ 1.3¿¡ ÀÖ´Â <code>mod_mmap_static</code>
- ¸ðµâÀÇ ±â´ÉÀ» È®ÀåÇÑ °á°ú´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachefile">CacheFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mmapfile">MMapFile</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#using">mod_file_cache »ç¿ëÇϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">mod_file_cache »ç¿ëÇϱâ</a></h2>
-
- <p><code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>´Â ÁÖ¼­¹ö ¼³Á¤¿¡¼­ <code class="directive"><a href="#mmapfile">MMapFile</a></code>°ú <code class="directive"><a href="#cachefile">CacheFile</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼³Á¤ÇÑ Á¤Àû ÆÄÀϵéÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù.</p>
-
- <p>¸ðµç Ç÷¡ÆûÀÌ µÎ Áö½Ã¾î¸¦ ¸ðµÎ Áö¿øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
- ¿¹¸¦ µé¾î, À©µµ¿ìÁî¿ë ¾ÆÆÄÄ¡´Â ÇöÀç <code class="directive"><a href="#mmapstatic">MMapStatic</a></code> Áö½Ã¾î¸¦
- Áö¿øÇÏÁö ¾ÊÁö¸¸, AIX °°Àº ´Ù¸¥ Ç÷¡ÆûÀº µÑ ¸ðµÎ¸¦ Áö¿øÇÑ´Ù.
- Áö¿øÇÏÁö¾Ê´Â Áö½Ã¾î¸¦ »ç¿ëÇÒ °æ¿ì ¼­¹ö ¿À·ù ·Î±×¿¡ ¿À·ù¹®À»
- ³²±ä´Ù. Áö¿øÇÏÁö¾Ê´Â Áö½Ã¾î¸¦ »ç¿ëÇصµ ¼­¹ö´Â µ¿ÀÛÇÏÁö¸¸
- ÆÄÀÏÀ» ij½¬¿¡ ÀúÀåÇÏÁö ¾Ê´Â´Ù. µÎ Áö½Ã¾î¸¦ ¸ðµÎ Áö¿øÇÏ´Â
- Ç÷¡ÆûÀ» »ç¿ëÇÑ´Ù¸é ¾î¶² ¹æ½ÄÀÌ ´õ ÁÁÀºÁö ½ÇÇèÇغ¸¶ó.</p>
-
- <h3>MMapFile Áö½Ã¾î</h3>
-
- <p><code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>ÀÇ <code class="directive"><a href="#mmapfile">MMapFile</a></code> Áö½Ã¾î´Â
- ¼³Á¤ÇÑ Á¤Àû ÆÄÀϵéÀ» <code>mmap()</code> ½Ã½ºÅÛÈ£ÃâÀ»
- »ç¿ëÇÏ¿© ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù. ÃֽŠÀ¯´Ð½º·ù ¿î¿µÃ¼Á¦¶ó¸é
- º¸Åë ÀÌ ½Ã½ºÅÛÈ£ÃâÀÌ ÀÖÁö¸¸, ¾ø´Â ¿î¿µÃ¼Á¦µµ ÀÖ´Ù. ¶Ç,
- <code>mmap()</code>ÇÒ ¼ö ÀÖ´Â ÆÄÀÏ Å©±â¿Í °³¼ö¸¦ ½Ã½ºÅÛÀÌ
- Á¦ÇÑÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¹Ì¸® ½ÇÇèÇغ¸´Â °ÍÀÌ ÁÁ´Ù.</p>
-
- <p>¼­¹ö´Â ½ÃÀÛÇÒ¶§¿Í Àç½ÃÀÛÇÒ¶§¸¸ <code>mmap()</code>ÇÑ´Ù.
- ±×·¡¼­ ÆÄÀϽýºÅÛ¿¡¼­ ÇØ´ç ÆÄÀÏÁß Çϳª¶óµµ º¯°æµÇ¸é ¼­¹ö¸¦
- Àç½ÃÀÛ<em>Çؾß</em> ÇÑ´Ù (<a href="../stopping.html">Áß´Ü°ú
- Àç½ÃÀÛ</a> ¹®¼­ Âü°í). ´Ù½Ã ¸»Çؼ­ ÆÄÀÏÀÌ º¯°æµÇ¾ú´Âµ¥
- ¼­¹ö¸¦ Àç½ÃÀÛÇÏÁö ¾ÊÀ¸¸é ¿ÏÀüÈ÷ ÀÌ»óÇÏ°Ô ¿äûÀ» ¼­ºñ½ºÇÒÁöµµ
- ¸ð¸¥´Ù. ÀÌÀü ÆÄÀÏÀ» Áö¿ì°í(unlink) ±× ÀÚ¸®¿¡ »õ·Î¿î ÆÄÀÏÀ»
- ¸¸µé´Â ¹æ½ÄÀ¸·Î ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. <code>rdist</code>³ª
- <code>mv</code>¿Í °°Àº ´ë´Ù¼öÀÇ µµ±¸°¡ ÀÌ·± ¹æ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù.
- ¸Å¹ø Ãß°¡·Î ºÒÇÊ¿äÇÑ <code>stat()</code> °Ë»ç°¡ ÇÊ¿äÇÏ°í
- ÀÔÃâ·Â °¨¼Ò¶ó´Â ¿ø·¡ Àǵµ¿¡ ¹ÝÇϱ⶧¹®¿¡ ÀÌ ¸ðµâÀº ÆÄÀÏÀÇ
- º¯È­¸¦ ¹«½ÃÇÑ´Ù.</p>
-
-
- <h3>CacheFile Áö½Ã¾î</h3>
-
- <p><code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>ÀÇ <code class="directive"><a href="#cachefile">CacheFile</a></code> Áö½Ã¾î´Â
- ¼³Á¤ Áö½Ã¾î¿¡ ¿­°ÅÇÑ ÆÄÀÏ(°ú ÆÄÀϵé)À» ¿­¾î¼­ ÆÄÀÏÀÇ
- <em>ÇÚµé(handle)</em> ȤÀº <em>ÆÄÀÏ ±â¼úÀÚ(file descriptor)</em>¸¦
- ij½¬¿¡ ÀúÀåÇÑ´Ù. ÆÄÀÏÀ» ¿äûÇÏ¸é ¼­¹ö´Â ij½¬¿¡¼­ ÇÚµéÀ»
- ã¾Æ¼­ ¼ÒÄÏ API <code>sendfile()</code>¿¡ (À©µµ¿ìÁî¿¡¼­´Â
- <code>TransmitFile()</code>) ³Ñ±ä´Ù.</p>
-
-
-
- <p>¼­¹ö´Â ½ÃÀÛÇÒ¶§¿Í Àç½ÃÀÛÇÒ¶§¸¸ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù.
- ±×·¡¼­ ÆÄÀϽýºÅÛ¿¡¼­ ij½¬ÇÑ ÆÄÀÏÁß Çϳª¶óµµ º¯°æµÇ¸é
- ¼­¹ö¸¦ Àç½ÃÀÛ<em>Çؾß</em> ÇÑ´Ù (<a href="../stopping.html">Áß´Ü°ú Àç½ÃÀÛ</a> ¹®¼­ Âü°í).
- ´Ù½Ã ¸»Çؼ­ ÆÄÀÏÀÌ º¯°æµÇ¾ú´Âµ¥ ¼­¹ö¸¦ Àç½ÃÀÛÇÏÁö ¾ÊÀ¸¸é
- ¿ÏÀüÈ÷ ÀÌ»óÇÏ°Ô ¿äûÀ» ¼­ºñ½ºÇÒÁöµµ ¸ð¸¥´Ù. ÀÌÀü ÆÄÀÏÀ»
- Áö¿ì°í(unlink) ±× ÀÚ¸®¿¡ »õ·Î¿î ÆÄÀÏÀ» ¸¸µå´Â ¹æ½ÄÀ¸·Î
- ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. <code>rdist</code>³ª <code>mv</code>¿Í
- °°Àº ´ë´Ù¼öÀÇ µµ±¸°¡ ÀÌ·± ¹æ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù.</p>
-
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p>µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» Àç±ÍÀûÀ¸·Î ij½¬¿¡ ÀúÀåÇÏ´Â Áö½Ã¾î´Â
- ¾ø´Ù. ´ë½Å ´ÙÀ½°ú °°ÀÌ Çغ¸¶ó... <code class="directive"><a href="../mod/core.html#include">Include</a></code> Áö½Ã¾î¸¦ Âü°íÇÏ¿© ´ÙÀ½°ú
- °°Àº ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- find /www/htdocs -type f -print \<br />
- | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
- </code></p></div>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheFile" id="CacheFile">CacheFile</a> <a name="cachefile" id="cachefile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ÃÀ۽à ¿©·¯ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CacheFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p><code class="directive">CacheFile</code> Áö½Ã¾î´Â ¼­¹ö°¡ ½ÃÀÛÇÒ¶§
- ¿©·¯ ÆÄÀÏÀ» ¿­°í(open) ÆÄÀϵéÀÇ ÇÚµéÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù.
- ¼­¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ij½¬ÇÑ ÆÄÀÏÀÇ ÇÚµéÀ» ´Ý´Â´Ù(close).
- ÆÄÀϽýºÅÛ¿¡¼­ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀÏÀ» ´Ù½Ã ij½¬ÇϱâÀ§ÇØ
- ¼­¹ö¸¦ Àç½ÃÀÛÇØ¾ß ÇÑ´Ù.</p>
-
- <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
- ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
- Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
- ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
- °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>³ª
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
- Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- CacheFile /usr/local/apache/htdocs/index.html
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MMapFile" id="MMapFile">MMapFile</a> <a name="mmapfile" id="mmapfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>½ÃÀ۽à ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>MMapFile <var>file-path</var> [<var>file-path</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_file_cache</td></tr>
-</table>
- <p><code class="directive">MMapFile</code> Áö½Ã¾î´Â ¼­¹ö°¡ ½ÃÀÛÇÒ¶§
- (°ø¹éÀ¸·Î ±¸ºÐÇÑ ¾Æ±Ô¸ÕÆ®·Î ÁöÁ¤ÇÑ) ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡
- ´ëÀÀÇÑ´Ù(map). ¼­¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ´ëÀÀÀ» Ǭ´Ù(unmap).
- ÆÄÀϽýºÅÛ¿¡¼­ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀϵéÀ» ´Ù½Ã
- <code>mmap()</code>ÇϱâÀ§ÇØ ÃÖ¼ÒÇÑ ¼­¹ö¿¡ <code>HUP</code>À̳ª
- <code>USR1</code> ½Ã±×³ÎÀ» º¸³»¾ß ÇÑ´Ù.</p>
-
- <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
- ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
- Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
- ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
- °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>³ª
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
- Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- MMapFile /usr/local/apache/htdocs/index.html
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_file_cache.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_file_cache.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_file_cache.xml b/docs/manual/mod/mod_file_cache.xml
deleted file mode 100644
index 30f731f526..0000000000
--- a/docs/manual/mod/mod_file_cache.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_file_cache.xml.meta">
-
-<name>mod_file_cache</name>
-<description>Caches a static list of files in memory</description>
-<status>Experimental</status>
-<sourcefile>mod_file_cache.c</sourcefile>
-<identifier>file_cache_module</identifier>
-
-<summary>
-
- <note type="warning">
- This module should be used with care. You can easily create a broken
- site using <module>mod_file_cache</module>, so read this document
- carefully.
- </note>
-
- <p><em>Caching</em> frequently requested files that change very
- infrequently is a technique for reducing server load.
- <module>mod_file_cache</module> provides two techniques for caching
- frequently requested <em>static</em> files. Through configuration
- directives, you can direct <module>mod_file_cache</module> to either
- open then <code>mmap()</code> a file, or to pre-open a file and save
- the file's open <em>file handle</em>. Both techniques reduce server
- load when processing requests for these files by doing part of the work
- (specifically, the file I/O) for serving the file when the
- server is started rather than during each request.</p>
-
- <p>Notice: You cannot use this for speeding up CGI programs or
- other files which are served by special content handlers. It
- can only be used for regular files which are usually served by
- the Apache core content handler.</p>
-
- <p>This module is an extension of and borrows heavily from the
- <code>mod_mmap_static</code> module in Apache 1.3.</p>
-</summary>
-
-<section id="using"><title>Using mod_file_cache</title>
-
- <p><module>mod_file_cache</module> caches a list of statically
- configured files via <directive module="mod_file_cache"
- >MMapFile</directive> or <directive module="mod_file_cache"
- >CacheFile</directive> directives in the main server configuration.</p>
-
- <p>Not all platforms support both directives. For example, Apache
- on Windows does not currently support the <directive
- module="mod_file_cache">MMapStatic</directive> directive, while
- other platforms, like AIX, support both. You will receive an error
- message in the server error log if you attempt to use an
- unsupported directive. If given an unsupported directive, the
- server will start but the file will not be cached. On platforms
- that support both directives, you should experiment with both to
- see which works best for you.</p>
-
- <section><title>MMapFile Directive</title>
-
- <p>The <directive module="mod_file_cache">MMapFile</directive>
- directive of <module>mod_file_cache</module> maps a list of
- statically configured files into memory through the system call
- <code>mmap()</code>. This system call is available on most modern
- Unix derivates, but not on all. There are sometimes system-specific
- limits on the size and number of files that can be
- <code>mmap()</code>ed, experimentation is probably the easiest way
- to find out.</p>
-
- <p>This <code>mmap()</code>ing is done once at server start or
- restart, only. So whenever one of the mapped files changes on the
- filesystem you <em>have</em> to restart the server (see the <a
- href="../stopping.html">Stopping and Restarting</a> documentation).
- To reiterate that point: if the files are modified <em>in place</em>
- without restarting the server you may end up serving requests that
- are completely bogus. You should update files by unlinking the old
- copy and putting a new copy in place. Most tools such as
- <code>rdist</code> and <code>mv</code> do this. The reason why this
- modules doesn't take care of changes to the files is that this check
- would need an extra <code>stat()</code> every time which is a waste
- and against the intent of I/O reduction.</p>
- </section>
-
- <section><title>CacheFile Directive</title>
-
- <p>The <directive module="mod_file_cache">CacheFile</directive>
- directive of <module>mod_file_cache</module> opens an active
- <em>handle</em> or <em>file descriptor</em> to the file (or files)
- listed in the configuration directive and places these open file
- handles in the cache. When the file is requested, the server
- retrieves the handle from the cache and passes it to the
- <code>sendfile()</code> (or <code>TransmitFile()</code> on Windows),
- socket API.</p>
-
- <!-- XXX
- <p>Insert more details about sendfile API...</p>
- -->
-
- <p>This file handle caching is done once at server start or
- restart, only. So whenever one of the cached files changes on
- the filesystem you <em>have</em> to restart the server (see the
- <a href="../stopping.html">Stopping and Restarting</a>
- documentation). To reiterate that point: if the files are
- modified <em>in place</em> without restarting the server you
- may end up serving requests that are completely bogus. You
- should update files by unlinking the old copy and putting a new
- copy in place. Most tools such as <code>rdist</code> and
- <code>mv</code> do this.</p>
- </section>
-
- <note><title>Note</title>
- <p>Don't bother asking for a directive which recursively
- caches all the files in a directory. Try this instead... See the
- <directive module="core">Include</directive> directive, and consider
- this command:</p>
-
- <example>
- find /www/htdocs -type f -print \<br />
- | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
- </example>
- </note>
-</section>
-
-<directivesynopsis>
-<name>MMapFile</name>
-<description>Map a list of files into memory at startup time</description>
-<syntax>MMapFile <var>file-path</var> [<var>file-path</var>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MMapFile</directive> directive maps one or more files
- (given as whitespace separated arguments) into memory at server
- startup time. They are automatically unmapped on a server
- shutdown. When the files have changed on the filesystem at
- least a <code>HUP</code> or <code>USR1</code> signal should be send to
- the server to re-<code>mmap()</code> them.</p>
-
- <p>Be careful with the <var>file-path</var> arguments: They have
- to literally match the filesystem path Apache's URL-to-filename
- translation handlers create. We cannot compare inodes or other
- stuff to match paths through symbolic links <em>etc.</em>
- because that again would cost extra <code>stat()</code> system
- calls which is not acceptable. This module may or may not work
- with filenames rewritten by <module>mod_alias</module> or
- <module>mod_rewrite</module>.</p>
-
- <example><title>Example</title>
- MMapFile /usr/local/apache/htdocs/index.html
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheFile</name>
-<description>Cache a list of file handles at startup time</description>
-<syntax>CacheFile <var>file-path</var> [<var>file-path</var>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>CacheFile</directive> directive opens handles to
- one or more files (given as whitespace separated arguments) and
- places these handles into the cache at server startup
- time. Handles to cached files are automatically closed on a server
- shutdown. When the files have changed on the filesystem, the
- server should be restarted to to re-cache them.</p>
-
- <p>Be careful with the <var>file-path</var> arguments: They have
- to literally match the filesystem path Apache's URL-to-filename
- translation handlers create. We cannot compare inodes or other
- stuff to match paths through symbolic links <em>etc.</em>
- because that again would cost extra <code>stat()</code> system
- calls which is not acceptable. This module may or may not work
- with filenames rewritten by <module>mod_alias</module> or
- <module>mod_rewrite</module>.</p>
-
- <example><title>Example</title>
- CacheFile /usr/local/apache/htdocs/index.html
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_file_cache.xml.ko b/docs/manual/mod/mod_file_cache.xml.ko
deleted file mode 100644
index 6c23d797d4..0000000000
--- a/docs/manual/mod/mod_file_cache.xml.ko
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_file_cache.xml.meta">
-
-<name>mod_file_cache</name>
-<description>¸Þ¸ð¸®¿¡ Á¤Àû ÆÄÀϵéÀ» ij½¬</description>
-<status>Experimental</status>
-<sourcefile>mod_file_cache.c</sourcefile>
-<identifier>file_cache_module</identifier>
-
-<summary>
-
- <note type="warning">
- ÀÌ ¸ðµâÀº Á¶½ÉÇؼ­ »ç¿ëÇØ¾ß ÇÑ´Ù. <module>mod_file_cache</module>¸¦
- »ç¿ëÇÏ¿© »çÀÌÆ®¸¦ ¾û¸ÁÀ¸·Î ¸¸µé±â ½±±â¶§¹®¿¡ ÀÌ ¹®¼­¸¦
- ²Ä²ÄÈ÷ ÀÐ±æ ¹Ù¶õ´Ù.
- </note>
-
- <p>°ÅÀÇ º¯ÇÏÁö ¾Ê°í ÀÚÁÖ ¿äûµÇ´Â ÆÄÀÏÀ» <em>ij½¬</em>¿¡
- ÀúÀåÇÏ¿© ¼­¹ö ºÎÇϸ¦ ÁÙÀÏ ¼ö ÀÖ´Ù. <module>mod_file_cache</module>´Â
- ÀÚÁÖ ¿äûµÇ´Â <em>Á¤Àû</em> ÆÄÀÏÀ» µÎ°¡Áö ¹æ½ÄÀ¸·Î ij½¬¿¡
- ÀúÀåÇÑ´Ù. ¼³Á¤ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© <module>mod_file_cache</module>°¡
- ÆÄÀÏÀ» ¿­°í(open) <code>mmap()</code>ÇÒÁö ¾Æ´Ï¸é ÆÄÀÏÀ»
- ¿­°í <em>ÆÄÀÏ ÇÚµé</em>À» ÀúÀåÇÒÁö °áÁ¤ÇÑ´Ù. µÎ ¹æ½Ä ¸ðµÎ
- ÆÄÀÏÀ» ¼­ºñ½ºÇϱâÀ§ÇØ ÇÊ¿äÇÑ ÀÛ¾÷ÀÇ ÀϺθ¦ (ƯÈ÷ ÆÄÀÏ ÀÔÃâ·Â
- ÀÛ¾÷) ÆÄÀÏÀ» ¿äûÇÒ ¶§¸¶´Ù ¸Å¹ø ÇÏ´Â ´ë½Å ¼­¹ö°¡ ½ÃÀÛÇÒ¶§
- Çѹø¸¸ ÇÏ¿© ¼­¹ö ºÎÇÏ°¡ °¨¼ÒÇÑ´Ù.</p>
-
- <p>ÁÖÀÇ: ÀÌ ¹æ¹ýÀº CGI ÇÁ·Î±×·¥À̳ª Ưº°ÇÑ ³»¿ëÇڵ鷯¸¦
- ÅëÇØ ¼­ºñ½ºÇÏ´Â ÆÄÀÏÀÇ ¼­ºñ½º ¼Óµµ¸¦ ³ôÀÏ ¼ö ¾ø´Ù. ÀÌ ¹æ¹ýÀº
- º¸Åë ¾ÆÆÄÄ¡ core ³»¿ëÇڵ鷯°¡ ¼­ºñ½ºÇÏ´Â ÀϹÝÆÄÀÏ¿¡¸¸
- Àû¿ëµÈ´Ù.</p>
-
- <p>ÀÌ ¸ðµâÀº ¾ÆÆÄÄ¡ 1.3¿¡ ÀÖ´Â <code>mod_mmap_static</code>
- ¸ðµâÀÇ ±â´ÉÀ» È®ÀåÇÑ °á°ú´Ù.</p>
-</summary>
-
-<section id="using"><title>mod_file_cache »ç¿ëÇϱâ</title>
-
- <p><module>mod_file_cache</module>´Â ÁÖ¼­¹ö ¼³Á¤¿¡¼­ <directive
- module="mod_file_cache">MMapFile</directive>°ú <directive
- module="mod_file_cache">CacheFile</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¼³Á¤ÇÑ Á¤Àû ÆÄÀϵéÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù.</p>
-
- <p>¸ðµç Ç÷¡ÆûÀÌ µÎ Áö½Ã¾î¸¦ ¸ðµÎ Áö¿øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
- ¿¹¸¦ µé¾î, À©µµ¿ìÁî¿ë ¾ÆÆÄÄ¡´Â ÇöÀç <directive
- module="mod_file_cache">MMapStatic</directive> Áö½Ã¾î¸¦
- Áö¿øÇÏÁö ¾ÊÁö¸¸, AIX °°Àº ´Ù¸¥ Ç÷¡ÆûÀº µÑ ¸ðµÎ¸¦ Áö¿øÇÑ´Ù.
- Áö¿øÇÏÁö¾Ê´Â Áö½Ã¾î¸¦ »ç¿ëÇÒ °æ¿ì ¼­¹ö ¿À·ù ·Î±×¿¡ ¿À·ù¹®À»
- ³²±ä´Ù. Áö¿øÇÏÁö¾Ê´Â Áö½Ã¾î¸¦ »ç¿ëÇصµ ¼­¹ö´Â µ¿ÀÛÇÏÁö¸¸
- ÆÄÀÏÀ» ij½¬¿¡ ÀúÀåÇÏÁö ¾Ê´Â´Ù. µÎ Áö½Ã¾î¸¦ ¸ðµÎ Áö¿øÇÏ´Â
- Ç÷¡ÆûÀ» »ç¿ëÇÑ´Ù¸é ¾î¶² ¹æ½ÄÀÌ ´õ ÁÁÀºÁö ½ÇÇèÇغ¸¶ó.</p>
-
- <section><title>MMapFile Áö½Ã¾î</title>
-
- <p><module>mod_file_cache</module>ÀÇ <directive
- module="mod_file_cache">MMapFile</directive> Áö½Ã¾î´Â
- ¼³Á¤ÇÑ Á¤Àû ÆÄÀϵéÀ» <code>mmap()</code> ½Ã½ºÅÛÈ£ÃâÀ»
- »ç¿ëÇÏ¿© ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù. ÃֽŠÀ¯´Ð½º·ù ¿î¿µÃ¼Á¦¶ó¸é
- º¸Åë ÀÌ ½Ã½ºÅÛÈ£ÃâÀÌ ÀÖÁö¸¸, ¾ø´Â ¿î¿µÃ¼Á¦µµ ÀÖ´Ù. ¶Ç,
- <code>mmap()</code>ÇÒ ¼ö ÀÖ´Â ÆÄÀÏ Å©±â¿Í °³¼ö¸¦ ½Ã½ºÅÛÀÌ
- Á¦ÇÑÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¹Ì¸® ½ÇÇèÇغ¸´Â °ÍÀÌ ÁÁ´Ù.</p>
-
- <p>¼­¹ö´Â ½ÃÀÛÇÒ¶§¿Í Àç½ÃÀÛÇÒ¶§¸¸ <code>mmap()</code>ÇÑ´Ù.
- ±×·¡¼­ ÆÄÀϽýºÅÛ¿¡¼­ ÇØ´ç ÆÄÀÏÁß Çϳª¶óµµ º¯°æµÇ¸é ¼­¹ö¸¦
- Àç½ÃÀÛ<em>Çؾß</em> ÇÑ´Ù (<a href="../stopping.html">Áß´Ü°ú
- Àç½ÃÀÛ</a> ¹®¼­ Âü°í). ´Ù½Ã ¸»Çؼ­ ÆÄÀÏÀÌ º¯°æµÇ¾ú´Âµ¥
- ¼­¹ö¸¦ Àç½ÃÀÛÇÏÁö ¾ÊÀ¸¸é ¿ÏÀüÈ÷ ÀÌ»óÇÏ°Ô ¿äûÀ» ¼­ºñ½ºÇÒÁöµµ
- ¸ð¸¥´Ù. ÀÌÀü ÆÄÀÏÀ» Áö¿ì°í(unlink) ±× ÀÚ¸®¿¡ »õ·Î¿î ÆÄÀÏÀ»
- ¸¸µé´Â ¹æ½ÄÀ¸·Î ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. <code>rdist</code>³ª
- <code>mv</code>¿Í °°Àº ´ë´Ù¼öÀÇ µµ±¸°¡ ÀÌ·± ¹æ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù.
- ¸Å¹ø Ãß°¡·Î ºÒÇÊ¿äÇÑ <code>stat()</code> °Ë»ç°¡ ÇÊ¿äÇÏ°í
- ÀÔÃâ·Â °¨¼Ò¶ó´Â ¿ø·¡ Àǵµ¿¡ ¹ÝÇϱ⶧¹®¿¡ ÀÌ ¸ðµâÀº ÆÄÀÏÀÇ
- º¯È­¸¦ ¹«½ÃÇÑ´Ù.</p>
- </section>
-
- <section><title>CacheFile Áö½Ã¾î</title>
-
- <p><module>mod_file_cache</module>ÀÇ <directive
- module="mod_file_cache">CacheFile</directive> Áö½Ã¾î´Â
- ¼³Á¤ Áö½Ã¾î¿¡ ¿­°ÅÇÑ ÆÄÀÏ(°ú ÆÄÀϵé)À» ¿­¾î¼­ ÆÄÀÏÀÇ
- <em>ÇÚµé(handle)</em> ȤÀº <em>ÆÄÀÏ ±â¼úÀÚ(file descriptor)</em>¸¦
- ij½¬¿¡ ÀúÀåÇÑ´Ù. ÆÄÀÏÀ» ¿äûÇÏ¸é ¼­¹ö´Â ij½¬¿¡¼­ ÇÚµéÀ»
- ã¾Æ¼­ ¼ÒÄÏ API <code>sendfile()</code>¿¡ (À©µµ¿ìÁî¿¡¼­´Â
- <code>TransmitFile()</code>) ³Ñ±ä´Ù.</p>
-
- <!-- XXX
- <p>Insert more details about sendfile API...</p>
- -->
-
- <p>¼­¹ö´Â ½ÃÀÛÇÒ¶§¿Í Àç½ÃÀÛÇÒ¶§¸¸ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù.
- ±×·¡¼­ ÆÄÀϽýºÅÛ¿¡¼­ ij½¬ÇÑ ÆÄÀÏÁß Çϳª¶óµµ º¯°æµÇ¸é
- ¼­¹ö¸¦ Àç½ÃÀÛ<em>Çؾß</em> ÇÑ´Ù (<a
- href="../stopping.html">Áß´Ü°ú Àç½ÃÀÛ</a> ¹®¼­ Âü°í).
- ´Ù½Ã ¸»Çؼ­ ÆÄÀÏÀÌ º¯°æµÇ¾ú´Âµ¥ ¼­¹ö¸¦ Àç½ÃÀÛÇÏÁö ¾ÊÀ¸¸é
- ¿ÏÀüÈ÷ ÀÌ»óÇÏ°Ô ¿äûÀ» ¼­ºñ½ºÇÒÁöµµ ¸ð¸¥´Ù. ÀÌÀü ÆÄÀÏÀ»
- Áö¿ì°í(unlink) ±× ÀÚ¸®¿¡ »õ·Î¿î ÆÄÀÏÀ» ¸¸µå´Â ¹æ½ÄÀ¸·Î
- ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. <code>rdist</code>³ª <code>mv</code>¿Í
- °°Àº ´ë´Ù¼öÀÇ µµ±¸°¡ ÀÌ·± ¹æ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù.</p>
- </section>
-
- <note><title>ÁÖÀÇ</title>
- <p>µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» Àç±ÍÀûÀ¸·Î ij½¬¿¡ ÀúÀåÇÏ´Â Áö½Ã¾î´Â
- ¾ø´Ù. ´ë½Å ´ÙÀ½°ú °°ÀÌ Çغ¸¶ó... <directive
- module="core">Include</directive> Áö½Ã¾î¸¦ Âü°íÇÏ¿© ´ÙÀ½°ú
- °°Àº ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù:</p>
-
- <example>
- find /www/htdocs -type f -print \<br />
- | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
- </example>
- </note>
-</section>
-
-<directivesynopsis>
-<name>MMapFile</name>
-<description>½ÃÀ۽à ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù</description>
-<syntax>MMapFile <var>file-path</var> [<var>file-path</var>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>MMapFile</directive> Áö½Ã¾î´Â ¼­¹ö°¡ ½ÃÀÛÇÒ¶§
- (°ø¹éÀ¸·Î ±¸ºÐÇÑ ¾Æ±Ô¸ÕÆ®·Î ÁöÁ¤ÇÑ) ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡
- ´ëÀÀÇÑ´Ù(map). ¼­¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ´ëÀÀÀ» Ǭ´Ù(unmap).
- ÆÄÀϽýºÅÛ¿¡¼­ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀϵéÀ» ´Ù½Ã
- <code>mmap()</code>ÇϱâÀ§ÇØ ÃÖ¼ÒÇÑ ¼­¹ö¿¡ <code>HUP</code>À̳ª
- <code>USR1</code> ½Ã±×³ÎÀ» º¸³»¾ß ÇÑ´Ù.</p>
-
- <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
- ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
- Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
- ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
- °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <module>mod_alias</module>³ª
- <module>mod_rewrite</module>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
- Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- MMapFile /usr/local/apache/htdocs/index.html
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheFile</name>
-<description>½ÃÀ۽à ¿©·¯ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù</description>
-<syntax>CacheFile <var>file-path</var> [<var>file-path</var>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>CacheFile</directive> Áö½Ã¾î´Â ¼­¹ö°¡ ½ÃÀÛÇÒ¶§
- ¿©·¯ ÆÄÀÏÀ» ¿­°í(open) ÆÄÀϵéÀÇ ÇÚµéÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù.
- ¼­¹ö Á¾·á½Ã ÀÚµ¿À¸·Î ij½¬ÇÑ ÆÄÀÏÀÇ ÇÚµéÀ» ´Ý´Â´Ù(close).
- ÆÄÀϽýºÅÛ¿¡¼­ ÆÄÀÏÀÌ º¯°æµÇ¸é ÆÄÀÏÀ» ´Ù½Ã ij½¬ÇϱâÀ§ÇØ
- ¼­¹ö¸¦ Àç½ÃÀÛÇØ¾ß ÇÑ´Ù.</p>
-
- <p><var>file-path</var> ¾Æ±Ô¸ÕÆ®¸¦ Á¶½ÉÇضó. ¾Æ±Ô¸ÕÆ®´Â
- ¾ÆÆÄÄ¡ÀÇ URL-ÆÄÀÏ¸í º¯È¯ Çڵ鷯°¡ ¸¸µç ÆÄÀϽýºÅÛ °æ·Î¿Í
- Á¤È®È÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. Çѹø ´õ ºÒÇÊ¿äÇÑ <code>stat()</code>
- ½Ã½ºÅÛÈ£ÃâÀÌ ÇÊ¿äÇϱ⶧¹®¿¡ inode³ª ½Éº¼¸µÅ© <em>µî</em>À»
- °æ·Î¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸ðµâÀº <module>mod_alias</module>³ª
- <module>mod_rewrite</module>·Î ÀçÀÛ¼ºÇÑ ÆÄÀϸíÀ» ´Ù·ê ¼ö
- Àֱ⵵ ¾ø±âµµ ÇÏ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- CacheFile /usr/local/apache/htdocs/index.html
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_file_cache.xml.meta b/docs/manual/mod/mod_file_cache.xml.meta
deleted file mode 100644
index b50023875d..0000000000
--- a/docs/manual/mod/mod_file_cache.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_file_cache</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_headers.html b/docs/manual/mod/mod_headers.html
deleted file mode 100644
index 66ed628cca..0000000000
--- a/docs/manual/mod/mod_headers.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_headers.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_headers.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mod_headers.html.en b/docs/manual/mod/mod_headers.html.en
deleted file mode 100644
index 560a308a59..0000000000
--- a/docs/manual/mod/mod_headers.html.en
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_headers - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_headers</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Customization of HTTP request and response
-headers</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>headers_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_headers.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td><code class="directive"><a href="#requestheader">RequestHeader</a></code>
-is available only in Apache 2.0</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides directives to control and modify HTTP
- request and response headers. Headers can be merged, replaced
- or removed.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#header">Header</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#requestheader">RequestHeader</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#order">Order of Processing</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#early">Early and Late Processing</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">Order of Processing</a></h2>
-
- <p>The directives provided by <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can
- occur almost anywhere within the server configuration, and can be
- limited in scope by enclosing them in <a href="../sections.html">configuration sections</a>.</p>
-
- <p>Order of processing is important and is affected both by the
- order in the configuration file and by placement in <a href="../sections.html#mergin">configuration sections</a>. These
- two headers have a different effect if reversed:</p>
-
- <div class="example"><p><code>
- RequestHeader append MirrorID "mirror 12"<br />
- RequestHeader unset MirrorID
- </code></p></div>
-
- <p>This way round, the <code>MirrorID</code> header is not set. If
- reversed, the MirrorID header is set to "mirror 12".</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="early" id="early">Early and Late Processing</a></h2>
- <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can be applied either early or late
- in the request. The normal mode is late, when Request Headers are
- set immediately before running the content generator and Response
- Headers just as the response is sent down the wire. Always use
- Late mode in an operational server.</p>
-
- <p>Early mode is designed as a test/debugging aid for developers.
- Directives defined using the <code>early</code> keyword are set
- right at the beginning of processing the request. This means
- they can be used to simulate different requests and set up test
- cases, but it also means that headers may be changed at any time
- by other modules before generating a Response.</p>
-
- <p>Because early directives are processed before the request path's
- configuration is traversed, early headers can only be set in a
- main server or virtual host context. Early directives cannot depend
- on a request path, so they will fail in contexts such as
- <code>&lt;Directory&gt;</code> or <code>&lt;Location&gt;</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
- <ol>
- <li>
- Copy all request headers that begin with "TS" to the
- response headers:
-
- <div class="example"><p><code>
- Header echo ^TS
- </code></p></div>
- </li>
-
- <li>
- Add a header, <code>MyHeader</code>, to the response including a
- timestamp for when the request was received and how long it
- took to begin serving the request. This header can be used by
- the client to intuit load on the server or in isolating
- bottlenecks between the client and the server.
-
- <div class="example"><p><code>
- Header add MyHeader "%D %t"
- </code></p></div>
-
- <p>results in this header being added to the response:</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256
- </code></p></div>
- </li>
-
- <li>
- Say hello to Joe
-
- <div class="example"><p><code>
- Header add MyHeader "Hello Joe. It took %D microseconds \<br />
- for Apache to serve this request."
- </code></p></div>
-
- <p>results in this header being added to the response:</p>
-
- <div class="example"><p><code>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
- to serve this request.
- </code></p></div>
- </li>
-
- <li>
- Conditionally send <code>MyHeader</code> on the response if and
- only if header "MyRequestHeader" is present on the request. This
- is useful for constructing headers in response to some client
- stimulus. Note that this example requires the services of the
- <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module.
-
- <div class="example"><p><code>
- SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
- Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader<br />
- </code></p></div>
-
- <p>If the header <code>MyRequestHeader: value</code> is present on
- the HTTP request, the response will contain the following header:</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256 mytext
- </code></p></div>
- </li>
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP response headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Header [<var>condition</var>] set|append|add|unset|echo
-<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
-</table>
- <p>This directive can replace, merge or remove HTTP response
- headers. The header is modified just after the content handler
- and output filters are run, allowing outgoing headers to be
- modified.</p>
-
- <p>The optional <var>condition</var> can be either <code>onsuccess</code>
- or <code>always</code>. It determines, which internal header table should be
- operated on. <code>onsuccess</code> stands for <code>2<var>xx</var></code>
- status codes and <code>always</code> for all status codes (including
- <code>2<var>xx</var></code>). Especially if you want to unset headers
- set by certain modules, you should try out, which table is affected.</p>
-
- <p>The action it performs is determined by the second
- argument. This can be one of the following values:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>The response header is set, replacing any previous header
- with this name. The <var>value</var> may be a format string.</dd>
-
- <dt><code>append</code></dt>
- <dd>The response header is appended to any existing header of
- the same name. When a new value is merged onto an existing
- header it is separated from the existing header with a comma.
- This is the HTTP standard way of giving a header multiple values.</dd>
-
- <dt><code>add</code></dt>
- <dd>The response header is added to the existing set of headers,
- even if this header already exists. This can result in two
- (or more) headers having the same name. This can lead to
- unforeseen consequences, and in general "append" should be
- used instead.</dd>
-
- <dt><code>unset</code></dt>
- <dd>The response header of this name is removed, if it exists.
- If there are multiple headers of the same name, all will be
- removed. <var>value</var> must be omitted.</dd>
-
- <dt><code>echo</code></dt>
- <dd>Request headers with this name are echoed back in the
- response headers. <var>header</var> may be a regular expression.
- <var>value</var> must be omitted.</dd>
- </dl>
-
- <p>This argument is followed by a <var>header</var> name, which
- can include the final colon, but it is not required. Case is
- ignored for <code>set</code>, <code>append</code>, <code>add</code>
- and <code>unset</code>. The <var>header</var> name for <code>echo</code>
- is case sensitive and may be a regular expression.</p>
-
- <p>For <code>add</code>, <code>append</code> and <code>set</code> a
- <var>value</var> is specified as the third argument. If <var>value</var>
- contains spaces, it should be surrounded by doublequotes.
- <var>value</var> may be a character string, a string containing format
- specifiers or a combination of both. The following format specifiers
- are supported in <var>value</var>:</p>
-
- <table class="bordered"><tr class="header"><th>Format</th><th>Description</th></tr>
-<tr><td><code>%%</code></td>
- <td>The percent sign</td></tr>
-<tr class="odd"><td><code>%t</code></td>
- <td>The time the request was received in Universal Coordinated Time
- since the epoch (Jan. 1, 1970) measured in microseconds. The value
- is preceded by <code>t=</code>.</td></tr>
-<tr><td><code>%D</code></td>
- <td>The time from when the request was received to the time the
- headers are sent on the wire. This is a measure of the duration
- of the request. The value is preceded by <code>D=</code>.</td></tr>
-<tr class="odd"><td><code>%{FOOBAR}e</code></td>
- <td>The contents of the <a href="../env.html">environment
- variable</a> <code>FOOBAR</code>.</td></tr>
-<tr><td><code>%{FOOBAR}s</code></td>
- <td>The contents of the <a href="mod_ssl.html#envvars">SSL environment
- variable</a> <code>FOOBAR</code>, if <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is enabled.</td></tr>
-</table>
-
- <div class="note"><h3>Note</h3>
- <p>The <code>%s</code> format specifier is only available in
- Apache 2.1 and later; it can be used instead of <code>%e</code>
- to avoid the overhead of enabling <code>SSLOptions
- +StdEnvVars</code>. If <code>SSLOptions +StdEnvVars</code> must
- be enabled anyway for some other reason, <code>%e</code> will be
- more efficient than <code>%s</code>.</p>
- </div>
-
- <p>The <code class="directive">Header</code> directive may be followed by an
- an additional argument, which may be used to specify conditions under
- which the action will be taken, or may be the keyword <code>early</code>
- to specify <a href="#early">early processing</a>. If the
- <a href="../env.html">environment variable</a> specified in the
- <code>env=<var>...</var></code> argument exists (or if the environment
- variable does not exist and <code>env=!<var>...</var></code> is specified)
- then the action specified by the <code class="directive">Header</code> directive
- will take effect. Otherwise, the directive will have no effect
- on the request.</p>
-
- <p>Except in <a href="#early">early</a> mode, the
- <code class="directive">Header</code> directives are processed just
- before the response is sent to the network. These means that it is
- possible to set and/or override most headers, except for those headers
- added by the header filter.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RequestHeader" id="RequestHeader">RequestHeader</a> <a name="requestheader" id="requestheader">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP request headers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
-</table>
- <p>This directive can replace, merge or remove HTTP request
- headers. The header is modified just before the content handler
- is run, allowing incoming headers to be modified. The action it
- performs is determined by the first argument. This can be one
- of the following values:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>The request header is set, replacing any previous header
- with this name</dd>
-
- <dt><code>append</code></dt>
- <dd>The request header is appended to any existing header of the
- same name. When a new value is merged onto an existing header
- it is separated from the existing header with a comma. This
- is the HTTP standard way of giving a header multiple
- values.</dd>
-
- <dt><code>add</code></dt>
- <dd>The request header is added to the existing set of headers,
- even if this header already exists. This can result in two
- (or more) headers having the same name. This can lead to
- unforeseen consequences, and in general <code>append</code> should be
- used instead.</dd>
-
- <dt><code>unset</code></dt>
- <dd>The request header of this name is removed, if it exists. If
- there are multiple headers of the same name, all will be removed.
- <var>value</var> must be omitted.</dd>
- </dl>
-
- <p>This argument is followed by a header name, which can
- include the final colon, but it is not required. Case is
- ignored. For <code>add</code>, <code>append</code> and
- <code>set</code> a <var>value</var> is given as the third argument. If
- <var>value</var> contains spaces, it should be surrounded by double
- quotes. For unset, no <var>value</var> should be given.
- <var>value</var> may be a character string, a string containing format
- specifiers or a combination of both. The supported format specifiers
- are the same as for the <code class="directive"><a href="#header">Header</a></code>,
- please have a look there for details.</p>
-
- <p>The <code class="directive">RequestHeader</code> directive may be followed by
- an additional argument, which may be used to specify conditions under
- which the action will be taken, or may be the keyword <code>early</code>
- to specify <a href="#early">early processing</a>. If the
- <a href="../env.html">environment
- variable</a> specified in the <code>env=<var>...</var></code> argument
- exists (or if the environment variable does not exist and
- <code>env=!<var>...</var></code> is specified) then the action specified
- by the <code class="directive">RequestHeader</code> directive will take effect.
- Otherwise, the directive will have no effect on the request.</p>
-
- <p>Except in <a href="#early">early</a> mode, the
- <code class="directive">RequestHeader</code> directive is processed
- just before the request is run by its handler in the fixup phase.
- This should allow headers generated by the browser, or by Apache
- input filters to be overridden or modified.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_headers.html.ja.euc-jp b/docs/manual/mod/mod_headers.html.ja.euc-jp
deleted file mode 100644
index 9223ada3e0..0000000000
--- a/docs/manual/mod/mod_headers.html.ja.euc-jp
+++ /dev/null
@@ -1,283 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_headers - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_headers</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_headers.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<div class="outofdate">This translation may be out of date. Check the
- English version for recent changes.</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤È±þÅú¤Î¥Ø¥Ã¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>headers_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_headers.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td><code class="directive"><a href="#requestheader">RequestHeader</a></code>
-¤Ï Apache 2.0 °Ê¹ß¤Î¤ß¤Ç»ÈÍѲÄǽ</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï HTTP ¤Î¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤È±þÅú¥Ø¥Ã¥À¤òÀ©¸æ¤·¡¢
- Êѹ¹¤¹¤ë¤¿¤á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÄ󶡤·¤Þ¤¹¡£¥Ø¥Ã¥À¤òÄɲä·¤¿¤ê¡¢
- ÃÖ¤­´¹¤¨¤¿¤ê¡¢ºï½ü¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#header">Header</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#requestheader">RequestHeader</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#order">½èÍý¤Î½çÈÖ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Îã</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="order" id="order">½èÍý¤Î½çÈÖ</a></h2>
-
- <p><code class="module"><a href="../mod/mod_header.html">mod_header</a></code> ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥µ¡¼¥ÐÀßÄê¤Î¤Û¤Ü¤É¤³¤Ë¤Ç¤â
- ½ñ¤¯¤³¤È¤¬¤Ç¤­¡¢±Æ¶Á¤¹¤ëÈϰϤò<a href="../sections.html">ÀßÄêÍÑ¥»¥¯¥·¥ç¥ó</a>¤Ç°Ï¤à¤³¤È¤Ç¸ÂÄꤹ¤ë
- ¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>½èÍý¤Î½çÈ֤ϽÅÍפǡ¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î½çÈ֤ȡ¢<a href="../sections.html">ÀßÄêÍÑ¥»¥¯¥·¥ç¥ó</a>Æâ¤Î°ÌÃ֤ȤÎξÊý¤Ë
- ±Æ¶Á¤µ¤ì¤Þ¤¹¡£°Ê²¼¤ÎÆó¤Ä¤Î¥Ø¥Ã¥À¤Ï½çÈÖ¤¬µÕ¤Ë¤Ê¤ë¤È
- °ã¤¦·ë²Ì¤Ë¤Ê¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- RequestHeader append MirrorID "mirror 12"<br />
- RequestHeader unset MirrorID
- </code></p></div>
-
- <p>¤³¤Î½çÈ֤ξì¹ç¤Ï¡¢<code>MirrorID</code> ¥Ø¥Ã¥À¤ÏÀßÄꤵ¤ì¤Þ¤»¤ó¡£
- µÕ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢MirrorID ¥Ø¥Ã¥À¤Ï "mirror 12" ¤ËÀßÄꤵ¤ì¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Îã</a></h2>
-
- <ol>
- <li>¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥ÀÃæ¤Î "TS" ¤Ç»Ï¤Þ¤ë¥Õ¥£¡¼¥ë¥É¤ò¤¹¤Ù¤Æ±þÅú¥Ø¥Ã¥À¤Ë
- ¥³¥Ô¡¼¤·¤Þ¤¹:
- <div class="example"><p><code>
- Header echo ^TS
- </code></p></div>
- </li>
-
- <li>
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿»þ¹ï¤È¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤·¤¿»þ´Ö¤òÆþ¤ì¤¿¥Ø¥Ã¥À¡¢
- <code>MyHeader</code> ¤ò±þÅú¤ËÄɲä·¤Þ¤¹¡£¤³¤Î¥Ø¥Ã¥À¤Ï¥¯¥é¥¤¥¢¥ó¥È¤¬
- ¥µ¡¼¥Ð¤ÎÉé²Ù¤òľ´ÑŪ¤ËÃΤ뤿¤á¤ä¡¢¥¯¥é¥¤¥¢¥ó¥È-¥µ¡¼¥Ð´Ö¤Î
- ¥Ü¥È¥ë¥Í¥Ã¥¯¤òÄ´¤Ù¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-
- <div class="example"><p><code>
- Header add MyHeader "%D %t"
- </code></p></div>
-
- <p>¾åµ­¤ÎÀßÄê¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¥Ø¥Ã¥À¤¬±þÅú¤ËÄɲ䵤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256
- </code></p></div>
- </li>
-
- <li>
- Joe ¤Ë¤¢¤¤¤µ¤Ä¤ò¤·¤Þ¤¹:
-
- <div class="example"><p><code>
- Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
- </code></p></div>
-
- <p>°Ê²¼¤Î¤è¤¦¤Ê¥Ø¥Ã¥À¤¬±þÅú¤ËÄɲ䵤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹</p>
-
- <div class="example"><p><code>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
- </code></p></div>
- </li>
-
- <li>¥ê¥¯¥¨¥¹¥È¤Ë "MyRequestHeader" ¤¬¤¢¤ë¤È¤­¤Ë¸Â¤ê <code>MyHeader</code> ¤ò±þÅú¤Ë
- ÉÕ¤±¤Þ¤¹¡£¤³¤ì¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤ÎÍ×µá¤Ë±þ¤¨¤Æ¥Ø¥Ã¥À¤òºîÀ®¤¹¤ë¤È¤­¤Ë
- Ìò¤ËΩ¤Á¤Þ¤¹¡£¤³¤ÎÎã¤Ç¤Ï <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> ¥â¥¸¥å¡¼¥ë¤¬É¬Íפʤ³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
-
- <div class="example"><p><code>
- SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
- Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
- </code></p></div>
-
- <p>¤â¤· HTTP ¥ê¥¯¥¨¥¹¥È¤Ë <code>MyRequestHeader: value</code> ¥Ø¥Ã¥À¤¬
- ¤¢¤ë¤È¡¢±þÅú¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ê¥Ø¥Ã¥À¤¬Éղ䵤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- MyHeader: D=3775428 t=991424704447256 mytext
- </code></p></div>
- </li>
- </ol>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP ±þÅú¥Ø¥Ã¥À¤ÎÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Header set|append|add|unset|echo <var>header</var>
-[<var>value</var> [env=[!]<var>variable</var>]]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_headers</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï HTTP ±þÅú¥Ø¥Ã¥À¤òÃÖ´¹¡¢Äɲᢺï½ü¤Ç¤­¤Þ¤¹¡£
- ¥Ø¥Ã¥À¤Ï¥³¥ó¥Æ¥ó¥È¥Ï¥ó¥É¥é¤ä½ÐÎÏ¥Õ¥£¥ë¥¿¤¬¼Â¹Ô¤µ¤ì¤¿Ä¾¸å¤Ë¼Â¹Ô¤µ¤ì¡¢
- ½Ð¤Æ¹Ô¤¯¥Ø¥Ã¥À¤òÊѹ¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¹Ô¤Ê¤¦½èÍý¤ÏºÇ½é¤Î°ú¿ô¤Ë¤è¤ê·è¤Þ¤ê¤Þ¤¹¡£¤³¤ì¤Ë¤Ï°Ê²¼¤ÎÃͤò»ØÄê
- ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>±þÅú¥Ø¥Ã¥À¤òÀßÄꤷ¤Þ¤¹¡£Æ±¤¸Ì¾Á°¤Î¥Ø¥Ã¥À¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ï¤½¤ì¤ò
- ÃÖ¤­´¹¤¨¤Þ¤¹¡£<em>value</em> ¤Ë¤Ï¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ò
- »ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dt><code>append</code></dt>
- <dd>±þÅú¥Ø¥Ã¥À¤ò´û¤Ë¸ºß¤¹¤ëƱ¤¸Ì¾Á°¤Î¥Ø¥Ã¥À¤ËÄɲä·¤Þ¤¹¡£
- ¿·¤·¤¤Ãͤ¬´û¸¤Î¥Ø¥Ã¥À¤ËÄɲ䵤ì¤ë¤È¤­¤Ë¤Ï¡¢´û¸¤Î¥Ø¥Ã¥À¤Î
- ¸å¤Ë¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤ÆÄɲ䵤ì¤Þ¤¹¡£¤³¤ì¤Ï¥Ø¥Ã¥À¤ËÊ£¿ô¤ÎÃͤò
- »ØÄꤹ¤ë¤È¤­¤Î HTTP ¤Îɸ½à¤ÎÊýË¡¤Ç¤¹¡£</dd>
-
- <dt><code>add</code></dt>
- <dd>¥Ø¥Ã¥À¤¬´û¤Ë¸ºß¤·¤Æ¤¤¤ë¤È¤­¤Ç¤µ¤¨¤â¡¢±þÅú¥Ø¥Ã¥À¤ò
- ´û¸¤Î¥Ø¥Ã¥À¤ËÄɲä·¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢Æó¤Ä (¤«¤½¤ì°Ê¾å) ¤Î
- ¥Ø¥Ã¥À¤Î̾Á°¤¬Æ±¤¸¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤½¤Î·ë²Ì¡¢ÁÛÄê¤Ç¤­¤Ê¤¤
- ¤³¤È¤¬µ¯¤³¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢°ìÈÌŪ¤Ë¤Ï <code>append</code> ¤ÎÊý¤ò
- »È¤¦Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</dd>
-
- <dt><code>unset</code></dt>
- <dd>¤â¤·»ØÄꤵ¤ì¤¿Ì¾Á°¤Î±þÅú¥Ø¥Ã¥À¤¬Â¸ºß¤·¤Æ¤¤¤ì¤Ð¡¢ºï½ü¤µ¤ì¤Þ¤¹¡£
- Ʊ¤¸Ì¾Á°¤Î¥Ø¥Ã¥À¤¬Ê£¿ô¤¢¤ë¤È¤­¤Ï¡¢¤¹¤Ù¤Æºï½ü¤µ¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>echo</code></dt>
- <dd>»ØÄꤵ¤ì¤¿¤â¤Î¤ÈƱ¤¸Ì¾Á°¤Î¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ò±þÅú¥Ø¥Ã¥À¤Ç
- ¤½¤Î¤Þ¤ÞÊÖ¤·¤Þ¤¹¡£<var>header</var> ¤Ë¤ÏÀµµ¬É½¸½¤â»ØÄê¤Ç¤­¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¤³¤Î°ú¿ô¤Î¸å¤Ë¤Ï¥Ø¥Ã¥À̾ (<var>header</var>) ¤¬Â³¤­¤Þ¤¹¡£
- ¥Ø¥Ã¥À̾¤Ë¤ÏºÇ¸å¤Ë¥³¥í¥ó¤ò´Þ¤á¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬¡¢Ìµ¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£
- <code>set</code>, <code>append</code>, <code>add</code>,
- <code>unset</code> ¤Ç¤ÏÂçʸ»ú¾®Ê¸»ú¤Ï
- ¶èÊ̤µ¤ì¤Þ¤»¤ó¡£echo ¤Î <em>header</em> ̾¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¡¢
- Àµµ¬É½¸½¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code>add</code>, <code>append</code>,
- <code>set</code> ¤Ç¤Ï <var>value</var> ¤ò»°¤ÄÌܤÎ
- °ú¿ô¤È¤·¤Æ»ØÄꤷ¤Þ¤¹¡£<var>value</var> ¤Ë¶õÇò¤¬¤¢¤ë¾ì¹ç¤ÏÆó½Å°úÍÑÉä¤Ç
- °Ï¤àɬÍפ¬¤¢¤ê¤Þ¤¹¡£<var>value</var> ¤Ïʸ»ú¤Î¤ß¤«¤é¤Ê¤ëʸ»úÎó¡¢
- ¥Õ¥©¡¼¥Þ¥Ã¥È»Ø¼¨»Ò¤ò´Þ¤àʸ»úÎ󡢤⤷¤¯¤ÏξÊý¤«¤é¤Ê¤ëʸ»úÎó¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£
- <var>value</var> ¤Ï°Ê²¼¤Î¥Õ¥©¡¼¥Þ¥Ã¥È»Ø¼¨»Ò¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹:</p>
-
- <table>
- <tr><td><code>%t</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤Ã¤¿»þ¹ï¤ò¡¢
- Universal Coordinated Time ¤Ç¤Î»Ï¤Þ¤ê¤Î»þ¹ï (Jan. 1, 1970) ¤«¤é·Ð²á¤·¤¿
- »þ´Ö¤ò¥Þ¥¤¥¯¥íÉäȤ·¤Æ¸½¤·¤¿¤â¤Î¡£Ãͤκǽé¤Ë¤Ï
- <code>t=</code> ¤¬Éղ䵤ì¤Þ¤¹¡£</td></tr>
-
- <tr><td><code>%D</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤Ã¤¿»þ¹ï¤È¡¢¥Ø¥Ã¥À¤òÁ÷¤ê½Ð¤·¤¿
- »þ´Ö¤È¤Îº¹¡£¤³¤ì¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤¬Â¸ºß¤·¤Æ¤¤¤¿´ü´Ö¤ò¸½¤·¤Þ¤¹¡£
- Ãͤκǽé¤Ë¤Ï <code>D=</code> ¤¬Éղ䵤ì¤Þ¤¹¡£</td></tr>
-
- <tr><td><code>%{FOOBAR}e</code></td>
- <td><a href="../env.html">´Ä¶­ÊÑ¿ô</a>
- <code>FOOBAR</code> ¤ÎÃͤǤ¹¡£</td></tr>
- </table>
-
- <p><code class="directive">Header</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
- <code>add</code>, <code>append</code>, <code>set</code> ¤È¤·¤Æ
- »È¤ï¤ì¤¿¤È¤­¤Ë¤Ï¡¢Æ°ºî¤ò¹Ô¤Ê¤¦¾ò·ï¤ò»Í¤ÄÌܤΰú¿ô¤Ç»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- <code>env=...</code> °ú¿ô¤Ç»ØÄꤵ¤ì¤¿ <a href="../env.html">´Ä¶­ÊÑ¿ô</a> ¤¬Â¸ºß¤¹¤ë (¤â¤·¤¯¤Ï <code>env=!...</code>
- ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Æ´Ä¶­ÊÑ¿ô¤¬Â¸ºß¤·¤Ê¤¤) ¾ì¹ç¤Ï¡¢<code class="directive">Header</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿Æ°ºî¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤½¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤Ï²¿¤â¤·¤Þ¤»¤ó¡£</p>
-
- <p><code class="directive">Header</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï±þÅú¤¬¥Í¥Ã¥È¥ï¡¼¥¯¤ËÁ÷¤é¤ì¤ëľÁ°¤Ë
- ½èÍý¤µ¤ì¤Þ¤¹¡£¤³¤ì¤Ï¡¢¥Ø¥Ã¥À¥Õ¥£¥ë¥¿¤Ë¤è¤êÄɲ䵤ì¤ë¥Ø¥Ã¥À¤ò
- ½ü¤­¡¢¤Û¤È¤ó¤É¤Î¥Ø¥Ã¥À¤òÀßÄꤷ¤¿¤ê¾å½ñ¤­¤·¤¿¤ê¤¹¤ë¤³¤È¤¬
- ²Äǽ¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RequestHeader" id="RequestHeader">RequestHeader</a> <a name="requestheader" id="requestheader">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ÎÀßÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_headers</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤òÃÖ´¹¡¢Äɲᢺï½ü¤Ç¤­¤Þ¤¹¡£
- ¥Ø¥Ã¥À¤Ï¥³¥ó¥Æ¥ó¥È¥Ï¥ó¥É¥é¤¬¼Â¹Ô¤µ¤ì¤ëľÁ°¤Ë¼Â¹Ô¤µ¤ì¡¢
- Æþ¤Ã¤ÆÍè¤ë¥Ø¥Ã¥À¤òÊѹ¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¹Ô¤Ê¤¦½èÍý¤ÏÂè 1 °ú¿ô¤Ë¤è¤ê·è¤Þ¤ê¤Þ¤¹¡£¤³¤ì¤Ë¤Ï°Ê²¼¤ÎÃͤò»ØÄê
- ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤òÀßÄꤷ¤Þ¤¹¡£Æ±¤¸Ì¾Á°¤Î¥Ø¥Ã¥À¤¬Â¸ºß¤·¤Æ¤¤¤ë¤È¡¢
- ¤½¤ì¤òÃÖ¤­´¹¤¨¤Þ¤¹¡£</dd>
-
- <dt><code>append</code></dt>
- <dd>¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ï¡¢´û¤Ë¸ºß¤¹¤ëƱ¤¸Ì¾Á°¤Î¥Ø¥Ã¥À¤ËÄɲ䵤ì¤Þ¤¹¡£
- ¿·¤·¤¤Ãͤ¬´û¸¤Î¥Ø¥Ã¥À¤ËÄɲ䵤ì¤ë¤È¤­¤Ë¤Ï¡¢´û¸¤Î¥Ø¥Ã¥À¤Î
- ¸å¤Ë¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤ÆÄɲ䵤ì¤Þ¤¹¡£¤³¤ì¤Ï¥Ø¥Ã¥À¤ËÊ£¿ô¤ÎÃͤò
- »ØÄꤹ¤ë¤È¤­¤Î HTTP ¤Îɸ½à¤ÎÊýË¡¤Ç¤¹¡£</dd>
-
- <dt><code>add</code></dt>
- <dd>¥Ø¥Ã¥À¤¬´û¤Ë¸ºß¤·¤Æ¤¤¤ë¤È¤­¤Ç¤µ¤¨¤â¡¢¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ò
- ´û¸¤Î¥Ø¥Ã¥À¤ËÄɲä·¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢Æó¤Ä (¤«¤½¤ì°Ê¾å) ¤Î
- ¥Ø¥Ã¥À¤Î̾Á°¤¬Æ±¤¸¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤½¤Î·ë²Ì¡¢ÁÛÄê¤Ç¤­¤Ê¤¤
- ¤³¤È¤¬µ¯¤³¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢°ìÈÌŪ¤Ë¤Ï <code>append</code> ¤ÎÊý¤ò
- »È¤¦Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</dd>
-
- <dt><code>unset</code></dt>
- <dd>¤â¤·»ØÄꤵ¤ì¤¿Ì¾Á°¤Î¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤¬Â¸ºß¤·¤Æ¤¤¤ì¤Ð¡¢ºï½ü¤µ¤ì¤Þ¤¹¡£
- Ʊ¤¸Ì¾Á°¤ÎÊ£¿ô¤Î¥Ø¥Ã¥À¤¬¤¢¤ë¤È¤­¤Ï¡¢¤¹¤Ù¤Æºï½ü¤µ¤ì¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¤³¤Î°ú¿ô¤Î¸å¤Ë¤Ï¥Ø¥Ã¥À̾ (<em>header</em>) ¤¬Â³¤­¤Þ¤¹¡£
- ¥Ø¥Ã¥À̾¤Ë¤ÏºÇ¸å¤Ë¥³¥í¥ó¤ò´Þ¤á¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬¡¢Ìµ¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£
- Âçʸ»ú¾®Ê¸»ú¤Ï¶èÊ̤µ¤ì¤Þ¤»¤ó¡£<code>add</code>,
- <code>append</code>, <code>set</code> ¤Î¾ì¹ç¤Ï¡¢<em>value</em> ¤¬»°¤ÄÌܤÎ
- °ú¿ô¤È¤·¤Æ»ØÄꤵ¤ì¤Þ¤¹¡£<em>value</em> ¤Ë¶õÇò¤¬¤¢¤ë¾ì¹ç¤ÏÆó½Å°úÍÑÉä¤Ç
- °Ï¤àɬÍפ¬¤¢¤ê¤Þ¤¹¡£unset ¤Î¾ì¹ç¤Ï¡¢<em>value</em> ¤Ï»ØÄꤷ¤Þ¤»¤ó¡£</p>
-
- <p><code class="directive">RequestHeader</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- fixup ¥Õ¥§¡¼¥º¤Ç¥ê¥¯¥¨¥¹¥È¤¬¥Ï¥ó¥É¥é¤Ë°·¤ï¤ì¤ëľÁ°¤Ë
- ½èÍý¤µ¤ì¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢¥Ö¥é¥¦¥¶¤ä Apache ¤ÎÆþÎÏ¥Õ¥£¥ë¥¿¤Ë¤è¤ê
- À¸À®¤µ¤ì¤¿¥Ø¥Ã¥À¤ò¾å½ñ¤­¤·¤¿¤ê½¤Àµ¤·¤¿¤ê¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_headers.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_headers.xml b/docs/manual/mod/mod_headers.xml
deleted file mode 100644
index 030aaab732..0000000000
--- a/docs/manual/mod/mod_headers.xml
+++ /dev/null
@@ -1,342 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.18 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_headers.xml.meta">
-
-<name>mod_headers</name>
-<description>Customization of HTTP request and response
-headers</description>
-<status>Extension</status>
-<sourcefile>mod_headers.c</sourcefile>
-<identifier>headers_module</identifier>
-<compatibility><directive module="mod_headers">RequestHeader</directive>
-is available only in Apache 2.0</compatibility>
-
-<summary>
- <p>This module provides directives to control and modify HTTP
- request and response headers. Headers can be merged, replaced
- or removed.</p>
-</summary>
-
-<section id="order"><title>Order of Processing</title>
-
- <p>The directives provided by <module>mod_headers</module> can
- occur almost anywhere within the server configuration, and can be
- limited in scope by enclosing them in <a
- href="../sections.html">configuration sections</a>.</p>
-
- <p>Order of processing is important and is affected both by the
- order in the configuration file and by placement in <a
- href="../sections.html#mergin">configuration sections</a>. These
- two headers have a different effect if reversed:</p>
-
- <example>
- RequestHeader append MirrorID "mirror 12"<br />
- RequestHeader unset MirrorID
- </example>
-
- <p>This way round, the <code>MirrorID</code> header is not set. If
- reversed, the MirrorID header is set to "mirror 12".</p>
-</section>
-
-<section id="early"><title>Early and Late Processing</title>
- <p><module>mod_headers</module> can be applied either early or late
- in the request. The normal mode is late, when Request Headers are
- set immediately before running the content generator and Response
- Headers just as the response is sent down the wire. Always use
- Late mode in an operational server.</p>
-
- <p>Early mode is designed as a test/debugging aid for developers.
- Directives defined using the <code>early</code> keyword are set
- right at the beginning of processing the request. This means
- they can be used to simulate different requests and set up test
- cases, but it also means that headers may be changed at any time
- by other modules before generating a Response.</p>
-
- <p>Because early directives are processed before the request path's
- configuration is traversed, early headers can only be set in a
- main server or virtual host context. Early directives cannot depend
- on a request path, so they will fail in contexts such as
- <code>&lt;Directory&gt;</code> or <code>&lt;Location&gt;</code>.</p>
-</section>
-
-<section id="examples"><title>Examples</title>
-
- <ol>
- <li>
- Copy all request headers that begin with "TS" to the
- response headers:
-
- <example>
- Header echo ^TS
- </example>
- </li>
-
- <li>
- Add a header, <code>MyHeader</code>, to the response including a
- timestamp for when the request was received and how long it
- took to begin serving the request. This header can be used by
- the client to intuit load on the server or in isolating
- bottlenecks between the client and the server.
-
- <example>
- Header add MyHeader "%D %t"
- </example>
-
- <p>results in this header being added to the response:</p>
-
- <example>
- MyHeader: D=3775428 t=991424704447256
- </example>
- </li>
-
- <li>
- Say hello to Joe
-
- <example>
- Header add MyHeader "Hello Joe. It took %D microseconds \<br />
- for Apache to serve this request."
- </example>
-
- <p>results in this header being added to the response:</p>
-
- <example>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
- to serve this request.
- </example>
- </li>
-
- <li>
- Conditionally send <code>MyHeader</code> on the response if and
- only if header "MyRequestHeader" is present on the request. This
- is useful for constructing headers in response to some client
- stimulus. Note that this example requires the services of the
- <module>mod_setenvif</module> module.
-
- <example>
- SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
- Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader<br />
- </example>
-
- <p>If the header <code>MyRequestHeader: value</code> is present on
- the HTTP request, the response will contain the following header:</p>
-
- <example>
- MyHeader: D=3775428 t=991424704447256 mytext
- </example>
- </li>
- </ol>
-</section>
-
-<directivesynopsis>
-<name>RequestHeader</name>
-<description>Configure HTTP request headers</description>
-<syntax>RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive can replace, merge or remove HTTP request
- headers. The header is modified just before the content handler
- is run, allowing incoming headers to be modified. The action it
- performs is determined by the first argument. This can be one
- of the following values:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>The request header is set, replacing any previous header
- with this name</dd>
-
- <dt><code>append</code></dt>
- <dd>The request header is appended to any existing header of the
- same name. When a new value is merged onto an existing header
- it is separated from the existing header with a comma. This
- is the HTTP standard way of giving a header multiple
- values.</dd>
-
- <dt><code>add</code></dt>
- <dd>The request header is added to the existing set of headers,
- even if this header already exists. This can result in two
- (or more) headers having the same name. This can lead to
- unforeseen consequences, and in general <code>append</code> should be
- used instead.</dd>
-
- <dt><code>unset</code></dt>
- <dd>The request header of this name is removed, if it exists. If
- there are multiple headers of the same name, all will be removed.
- <var>value</var> must be omitted.</dd>
- </dl>
-
- <p>This argument is followed by a header name, which can
- include the final colon, but it is not required. Case is
- ignored. For <code>add</code>, <code>append</code> and
- <code>set</code> a <var>value</var> is given as the third argument. If
- <var>value</var> contains spaces, it should be surrounded by double
- quotes. For unset, no <var>value</var> should be given.
- <var>value</var> may be a character string, a string containing format
- specifiers or a combination of both. The supported format specifiers
- are the same as for the <directive module="mod_headers">Header</directive>,
- please have a look there for details.</p>
-
- <p>The <directive>RequestHeader</directive> directive may be followed by
- an additional argument, which may be used to specify conditions under
- which the action will be taken, or may be the keyword <code>early</code>
- to specify <a href="#early">early processing</a>. If the
- <a href="../env.html">environment
- variable</a> specified in the <code>env=<var>...</var></code> argument
- exists (or if the environment variable does not exist and
- <code>env=!<var>...</var></code> is specified) then the action specified
- by the <directive>RequestHeader</directive> directive will take effect.
- Otherwise, the directive will have no effect on the request.</p>
-
- <p>Except in <a href="#early">early</a> mode, the
- <directive>RequestHeader</directive> directive is processed
- just before the request is run by its handler in the fixup phase.
- This should allow headers generated by the browser, or by Apache
- input filters to be overridden or modified.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Header</name>
-<description>Configure HTTP response headers</description>
-<syntax>Header [<var>condition</var>] set|append|add|unset|echo
-<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive can replace, merge or remove HTTP response
- headers. The header is modified just after the content handler
- and output filters are run, allowing outgoing headers to be
- modified.</p>
-
- <p>The optional <var>condition</var> can be either <code>onsuccess</code>
- or <code>always</code>. It determines, which internal header table should be
- operated on. <code>onsuccess</code> stands for <code>2<var>xx</var></code>
- status codes and <code>always</code> for all status codes (including
- <code>2<var>xx</var></code>). Especially if you want to unset headers
- set by certain modules, you should try out, which table is affected.</p>
-
- <p>The action it performs is determined by the second
- argument. This can be one of the following values:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>The response header is set, replacing any previous header
- with this name. The <var>value</var> may be a format string.</dd>
-
- <dt><code>append</code></dt>
- <dd>The response header is appended to any existing header of
- the same name. When a new value is merged onto an existing
- header it is separated from the existing header with a comma.
- This is the HTTP standard way of giving a header multiple values.</dd>
-
- <dt><code>add</code></dt>
- <dd>The response header is added to the existing set of headers,
- even if this header already exists. This can result in two
- (or more) headers having the same name. This can lead to
- unforeseen consequences, and in general "append" should be
- used instead.</dd>
-
- <dt><code>unset</code></dt>
- <dd>The response header of this name is removed, if it exists.
- If there are multiple headers of the same name, all will be
- removed. <var>value</var> must be omitted.</dd>
-
- <dt><code>echo</code></dt>
- <dd>Request headers with this name are echoed back in the
- response headers. <var>header</var> may be a regular expression.
- <var>value</var> must be omitted.</dd>
- </dl>
-
- <p>This argument is followed by a <var>header</var> name, which
- can include the final colon, but it is not required. Case is
- ignored for <code>set</code>, <code>append</code>, <code>add</code>
- and <code>unset</code>. The <var>header</var> name for <code>echo</code>
- is case sensitive and may be a regular expression.</p>
-
- <p>For <code>add</code>, <code>append</code> and <code>set</code> a
- <var>value</var> is specified as the third argument. If <var>value</var>
- contains spaces, it should be surrounded by doublequotes.
- <var>value</var> may be a character string, a string containing format
- specifiers or a combination of both. The following format specifiers
- are supported in <var>value</var>:</p>
-
- <table border="1" style="zebra">
- <columnspec><column width=".25"/><column width=".75"/></columnspec>
- <tr><th>Format</th><th>Description</th></tr>
- <tr><td><code>%%</code></td>
- <td>The percent sign</td></tr>
-
- <tr><td><code>%t</code></td>
- <td>The time the request was received in Universal Coordinated Time
- since the epoch (Jan. 1, 1970) measured in microseconds. The value
- is preceded by <code>t=</code>.</td></tr>
-
- <tr><td><code>%D</code></td>
- <td>The time from when the request was received to the time the
- headers are sent on the wire. This is a measure of the duration
- of the request. The value is preceded by <code>D=</code>.</td></tr>
-
- <tr><td><code>%{FOOBAR}e</code></td>
- <td>The contents of the <a href="../env.html">environment
- variable</a> <code>FOOBAR</code>.</td></tr>
-
- <tr><td><code>%{FOOBAR}s</code></td>
- <td>The contents of the <a href="mod_ssl.html#envvars">SSL environment
- variable</a> <code>FOOBAR</code>, if <module>mod_ssl</module> is enabled.</td></tr>
-
- </table>
-
- <note><title>Note</title>
- <p>The <code>%s</code> format specifier is only available in
- Apache 2.1 and later; it can be used instead of <code>%e</code>
- to avoid the overhead of enabling <code>SSLOptions
- +StdEnvVars</code>. If <code>SSLOptions +StdEnvVars</code> must
- be enabled anyway for some other reason, <code>%e</code> will be
- more efficient than <code>%s</code>.</p>
- </note>
-
- <p>The <directive>Header</directive> directive may be followed by an
- an additional argument, which may be used to specify conditions under
- which the action will be taken, or may be the keyword <code>early</code>
- to specify <a href="#early">early processing</a>. If the
- <a href="../env.html">environment variable</a> specified in the
- <code>env=<var>...</var></code> argument exists (or if the environment
- variable does not exist and <code>env=!<var>...</var></code> is specified)
- then the action specified by the <directive>Header</directive> directive
- will take effect. Otherwise, the directive will have no effect
- on the request.</p>
-
- <p>Except in <a href="#early">early</a> mode, the
- <directive>Header</directive> directives are processed just
- before the response is sent to the network. These means that it is
- possible to set and/or override most headers, except for those headers
- added by the header filter.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_headers.xml.ja b/docs/manual/mod/mod_headers.xml.ja
deleted file mode 100644
index 97d61188f9..0000000000
--- a/docs/manual/mod/mod_headers.xml.ja
+++ /dev/null
@@ -1,265 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 (outdated: 1.18) -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_headers.xml.meta">
-
-<name>mod_headers</name>
-<description>HTTP $B%j%/%(%9%H$N%X%C%@$H1~Ez$N%X%C%@$N%+%9%?%^%$%:(B</description>
-<status>Extension</status>
-<sourcefile>mod_headers.c</sourcefile>
-<identifier>headers_module</identifier>
-<compatibility><directive module="mod_headers">RequestHeader</directive>
-$B$O(B Apache 2.0 $B0J9_$N$_$G;HMQ2DG=(B</compatibility>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O(B HTTP $B$N%j%/%(%9%H%X%C%@$H1~Ez%X%C%@$r@)8f$7!"(B
- $BJQ99$9$k$?$a$N%G%#%l%/%F%#%V$rDs6!$7$^$9!#%X%C%@$rDI2C$7$?$j!"(B
- $BCV$-49$($?$j!":o=|$7$?$j$9$k$3$H$,$G$-$^$9!#(B</p>
-</summary>
-
-<section id="order"><title>$B=hM}$N=gHV(B</title>
-
- <p><module>mod_header</module> $B$N%G%#%l%/%F%#%V$O%5!<%P@_Dj$N$[$\$I$3$K$G$b(B
- $B=q$/$3$H$,$G$-!"1F6A$9$kHO0O$r(B<a
- href="../sections.html">$B@_DjMQ%;%/%7%g%s(B</a>$B$G0O$`$3$H$G8BDj$9$k(B
- $B$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B=hM}$N=gHV$O=EMW$G!"@_Dj%U%!%$%kCf$N=gHV$H!"(B<a
- href="../sections.html">$B@_DjMQ%;%/%7%g%s(B</a>$BFb$N0LCV$H$NN>J}$K(B
- $B1F6A$5$l$^$9!#0J2<$NFs$D$N%X%C%@$O=gHV$,5U$K$J$k$H(B
- $B0c$&7k2L$K$J$j$^$9(B:</p>
-
- <example>
- RequestHeader append MirrorID "mirror 12"<br />
- RequestHeader unset MirrorID
- </example>
-
- <p>$B$3$N=gHV$N>l9g$O!"(B<code>MirrorID</code> $B%X%C%@$O@_Dj$5$l$^$;$s!#(B
- $B5U$K$J$C$F$$$k$H!"(BMirrorID $B%X%C%@$O(B "mirror 12" $B$K@_Dj$5$l$^$9!#(B</p>
-</section>
-
-<section id="examples"><title>$BNc(B</title>
-
- <ol>
- <li>$B%j%/%(%9%H%X%C%@Cf$N(B "TS" $B$G;O$^$k%U%#!<%k%I$r$9$Y$F1~Ez%X%C%@$K(B
- $B%3%T!<$7$^$9(B:
- <example>
- Header echo ^TS
- </example>
- </li>
-
- <li>
- $B%j%/%(%9%H$r<u$1IU$1$?;~9o$H%j%/%(%9%H$r=hM}$7$?;~4V$rF~$l$?%X%C%@!"(B
- <code>MyHeader</code> $B$r1~Ez$KDI2C$7$^$9!#$3$N%X%C%@$O%/%i%$%"%s%H$,(B
- $B%5!<%P$NIi2Y$rD>4QE*$KCN$k$?$a$d!"%/%i%$%"%s%H(B-$B%5!<%P4V$N(B
- $B%\%H%k%M%C%/$rD4$Y$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
-
- <example>
- Header add MyHeader "%D %t"
- </example>
-
- <p>$B>e5-$N@_Dj$G$O!"0J2<$N$h$&$J%X%C%@$,1~Ez$KDI2C$5$l$k$3$H$K$J$j$^$9(B:</p>
-
- <example>
- MyHeader: D=3775428 t=991424704447256
- </example>
- </li>
-
- <li>
- Joe $B$K$"$$$5$D$r$7$^$9(B:
-
- <example>
- Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
- </example>
-
- <p>$B0J2<$N$h$&$J%X%C%@$,1~Ez$KDI2C$5$l$k$3$H$K$J$j$^$9(B</p>
-
- <example>
- MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
- </example>
- </li>
-
- <li>$B%j%/%(%9%H$K(B "MyRequestHeader" $B$,$"$k$H$-$K8B$j(B <code>MyHeader</code> $B$r1~Ez$K(B
- $BIU$1$^$9!#$3$l$O!"%/%i%$%"%s%H$NMW5a$K1~$($F%X%C%@$r:n@.$9$k$H$-$K(B
- $BLr$KN)$A$^$9!#$3$NNc$G$O(B <module>mod_setenvif</module> $B%b%8%e!<%k$,I,MW$J$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#(B
-
- <example>
- SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
- Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
- </example>
-
- <p>$B$b$7(B HTTP $B%j%/%(%9%H$K(B <code>MyRequestHeader: value</code> $B%X%C%@$,(B
- $B$"$k$H!"1~Ez$K$O0J2<$N$h$&$J%X%C%@$,IU2C$5$l$^$9!#(B</p>
-
- <example>
- MyHeader: D=3775428 t=991424704447256 mytext
- </example>
- </li>
- </ol>
-</section>
-
-<directivesynopsis>
-<name>RequestHeader</name>
-<description>HTTP $B%j%/%(%9%H%X%C%@$N@_Dj(B</description>
-<syntax>RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B HTTP $B%j%/%(%9%H%X%C%@$rCV49!"DI2C!":o=|$G$-$^$9!#(B
- $B%X%C%@$O%3%s%F%s%H%O%s%I%i$,<B9T$5$l$kD>A0$K<B9T$5$l!"(B
- $BF~$C$FMh$k%X%C%@$rJQ99$9$k$3$H$,2DG=$K$J$C$F$$$^$9!#(B
- $B9T$J$&=hM}$OBh(B 1 $B0z?t$K$h$j7h$^$j$^$9!#$3$l$K$O0J2<$NCM$r;XDj(B
- $B$9$k$3$H$,$G$-$^$9(B:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>$B%j%/%(%9%H%X%C%@$r@_Dj$7$^$9!#F1$8L>A0$N%X%C%@$,B8:_$7$F$$$k$H!"(B
- $B$=$l$rCV$-49$($^$9!#(B</dd>
-
- <dt><code>append</code></dt>
- <dd>$B%j%/%(%9%H%X%C%@$O!"4{$KB8:_$9$kF1$8L>A0$N%X%C%@$KDI2C$5$l$^$9!#(B
- $B?7$7$$CM$,4{B8$N%X%C%@$KDI2C$5$l$k$H$-$K$O!"4{B8$N%X%C%@$N(B
- $B8e$K%3%s%^$G6h@Z$i$l$FDI2C$5$l$^$9!#$3$l$O%X%C%@$KJ#?t$NCM$r(B
- $B;XDj$9$k$H$-$N(B HTTP $B$NI8=`$NJ}K!$G$9!#(B</dd>
-
- <dt><code>add</code></dt>
- <dd>$B%X%C%@$,4{$KB8:_$7$F$$$k$H$-$G$5$($b!"%j%/%(%9%H%X%C%@$r(B
- $B4{B8$N%X%C%@$KDI2C$7$^$9!#$3$l$K$h$j!"Fs$D(B ($B$+$=$l0J>e(B) $B$N(B
- $B%X%C%@$NL>A0$,F1$8$K$J$k$3$H$,$"$j$^$9!#$=$N7k2L!"A[Dj$G$-$J$$(B
- $B$3$H$,5/$3$k2DG=@-$,$"$j$^$9$N$G!"0lHLE*$K$O(B <code>append</code> $B$NJ}$r(B
- $B;H$&J}$,NI$$$G$7$g$&!#(B</dd>
-
- <dt><code>unset</code></dt>
- <dd>$B$b$7;XDj$5$l$?L>A0$N%j%/%(%9%H%X%C%@$,B8:_$7$F$$$l$P!":o=|$5$l$^$9!#(B
- $BF1$8L>A0$NJ#?t$N%X%C%@$,$"$k$H$-$O!"$9$Y$F:o=|$5$l$^$9!#(B</dd>
- </dl>
-
- <p>$B$3$N0z?t$N8e$K$O%X%C%@L>(B (<em>header</em>) $B$,B3$-$^$9!#(B
- $B%X%C%@L>$K$O:G8e$K%3%m%s$r4^$a$k$3$H$b$G$-$^$9$,!"L5$/$F$b9=$$$^$;$s!#(B
- $BBgJ8;z>.J8;z$O6hJL$5$l$^$;$s!#(B<code>add</code>,
- <code>append</code>, <code>set</code> $B$N>l9g$O!"(B<em>value</em> $B$,;0$DL\$N(B
- $B0z?t$H$7$F;XDj$5$l$^$9!#(B<em>value</em> $B$K6uGr$,$"$k>l9g$OFs=E0zMQId$G(B
- $B0O$`I,MW$,$"$j$^$9!#(Bunset $B$N>l9g$O!"(B<em>value</em> $B$O;XDj$7$^$;$s!#(B</p>
-
- <p><directive>RequestHeader</directive> $B%G%#%l%/%F%#%V$O!"(B
- fixup $B%U%'!<%:$G%j%/%(%9%H$,%O%s%I%i$K07$o$l$kD>A0$K(B
- $B=hM}$5$l$^$9!#$3$l$K$h$j!"%V%i%&%6$d(B Apache $B$NF~NO%U%#%k%?$K$h$j(B
- $B@8@.$5$l$?%X%C%@$r>e=q$-$7$?$j=$@5$7$?$j$G$-$k$h$&$K$J$C$F$$$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Header</name>
-<description>HTTP $B1~Ez%X%C%@$N@_Dj(B</description>
-<syntax>Header set|append|add|unset|echo <var>header</var>
-[<var>value</var> [env=[!]<var>variable</var>]]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B HTTP $B1~Ez%X%C%@$rCV49!"DI2C!":o=|$G$-$^$9!#(B
- $B%X%C%@$O%3%s%F%s%H%O%s%I%i$d=PNO%U%#%k%?$,<B9T$5$l$?D>8e$K<B9T$5$l!"(B
- $B=P$F9T$/%X%C%@$rJQ99$9$k$3$H$,2DG=$K$J$C$F$$$^$9!#(B
- $B9T$J$&=hM}$O:G=i$N0z?t$K$h$j7h$^$j$^$9!#$3$l$K$O0J2<$NCM$r;XDj(B
- $B$9$k$3$H$,$G$-$^$9(B:</p>
-
- <dl>
- <dt><code>set</code></dt>
- <dd>$B1~Ez%X%C%@$r@_Dj$7$^$9!#F1$8L>A0$N%X%C%@$,B8:_$9$k>l9g$O$=$l$r(B
- $BCV$-49$($^$9!#(B<em>value</em> $B$K$O%U%)!<%^%C%HJ8;zNs$r(B
- $B;XDj$9$k$3$H$b$G$-$^$9!#(B</dd>
-
- <dt><code>append</code></dt>
- <dd>$B1~Ez%X%C%@$r4{$KB8:_$9$kF1$8L>A0$N%X%C%@$KDI2C$7$^$9!#(B
- $B?7$7$$CM$,4{B8$N%X%C%@$KDI2C$5$l$k$H$-$K$O!"4{B8$N%X%C%@$N(B
- $B8e$K%3%s%^$G6h@Z$i$l$FDI2C$5$l$^$9!#$3$l$O%X%C%@$KJ#?t$NCM$r(B
- $B;XDj$9$k$H$-$N(B HTTP $B$NI8=`$NJ}K!$G$9!#(B</dd>
-
- <dt><code>add</code></dt>
- <dd>$B%X%C%@$,4{$KB8:_$7$F$$$k$H$-$G$5$($b!"1~Ez%X%C%@$r(B
- $B4{B8$N%X%C%@$KDI2C$7$^$9!#$3$l$K$h$j!"Fs$D(B ($B$+$=$l0J>e(B) $B$N(B
- $B%X%C%@$NL>A0$,F1$8$K$J$k$3$H$,$"$j$^$9!#$=$N7k2L!"A[Dj$G$-$J$$(B
- $B$3$H$,5/$3$k2DG=@-$,$"$j$^$9$N$G!"0lHLE*$K$O(B <code>append</code> $B$NJ}$r(B
- $B;H$&J}$,NI$$$G$7$g$&!#(B</dd>
-
- <dt><code>unset</code></dt>
- <dd>$B$b$7;XDj$5$l$?L>A0$N1~Ez%X%C%@$,B8:_$7$F$$$l$P!":o=|$5$l$^$9!#(B
- $BF1$8L>A0$N%X%C%@$,J#?t$"$k$H$-$O!"$9$Y$F:o=|$5$l$^$9!#(B</dd>
-
- <dt><code>echo</code></dt>
- <dd>$B;XDj$5$l$?$b$N$HF1$8L>A0$N%j%/%(%9%H%X%C%@$r1~Ez%X%C%@$G(B
- $B$=$N$^$^JV$7$^$9!#(B<var>header</var> $B$K$O@55,I=8=$b;XDj$G$-$^$9!#(B</dd>
- </dl>
-
- <p>$B$3$N0z?t$N8e$K$O%X%C%@L>(B (<var>header</var>) $B$,B3$-$^$9!#(B
- $B%X%C%@L>$K$O:G8e$K%3%m%s$r4^$a$k$3$H$b$G$-$^$9$,!"L5$/$F$b9=$$$^$;$s!#(B
- <code>set</code>, <code>append</code>, <code>add</code>,
- <code>unset</code> $B$G$OBgJ8;z>.J8;z$O(B
- $B6hJL$5$l$^$;$s!#(Becho $B$N(B <em>header</em> $BL>$OBgJ8;z>.J8;z$r6hJL$7!"(B
- $B@55,I=8=$r;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
-
- <p><code>add</code>, <code>append</code>,
- <code>set</code> $B$G$O(B <var>value</var> $B$r;0$DL\$N(B
- $B0z?t$H$7$F;XDj$7$^$9!#(B<var>value</var> $B$K6uGr$,$"$k>l9g$OFs=E0zMQId$G(B
- $B0O$`I,MW$,$"$j$^$9!#(B<var>value</var> $B$OJ8;z$N$_$+$i$J$kJ8;zNs!"(B
- $B%U%)!<%^%C%H;X<(;R$r4^$`J8;zNs!"$b$7$/$ON>J}$+$i$J$kJ8;zNs$r;XDj$G$-$^$9!#(B
- <var>value</var> $B$O0J2<$N%U%)!<%^%C%H;X<(;R$r%5%]!<%H$7$^$9(B:</p>
-
- <table>
- <tr><td><code>%t</code></td>
- <td>$B%j%/%(%9%H$r<u$1<h$C$?;~9o$r!"(B
- Universal Coordinated Time $B$G$N;O$^$j$N;~9o(B (Jan. 1, 1970) $B$+$i7P2a$7$?(B
- $B;~4V$r%^%$%/%mIC$H$7$F8=$7$?$b$N!#CM$N:G=i$K$O(B
- <code>t=</code> $B$,IU2C$5$l$^$9!#(B</td></tr>
-
- <tr><td><code>%D</code></td>
- <td>$B%j%/%(%9%H$r<u$1<h$C$?;~9o$H!"%X%C%@$rAw$j=P$7$?(B
- $B;~4V$H$N:9!#$3$l$O!"%j%/%(%9%H$,B8:_$7$F$$$?4|4V$r8=$7$^$9!#(B
- $BCM$N:G=i$K$O(B <code>D=</code> $B$,IU2C$5$l$^$9!#(B</td></tr>
-
- <tr><td><code>%{FOOBAR}e</code></td>
- <td><a href="../env.html">$B4D6-JQ?t(B</a>
- <code>FOOBAR</code> $B$NCM$G$9!#(B</td></tr>
- </table>
-
- <p><directive>Header</directive> $B%G%#%l%/%F%#%V$,(B
- <code>add</code>, <code>append</code>, <code>set</code> $B$H$7$F(B
- $B;H$o$l$?$H$-$K$O!"F0:n$r9T$J$&>r7o$r;M$DL\$N0z?t$G;XDj$9$k$3$H$,$G$-$^$9!#(B
- <code>env=...</code> $B0z?t$G;XDj$5$l$?(B <a
- href="../env.html">$B4D6-JQ?t(B</a> $B$,B8:_$9$k(B ($B$b$7$/$O(B <code>env=!...</code>
- $B$,;XDj$5$l$F$$$F4D6-JQ?t$,B8:_$7$J$$(B) $B>l9g$O!"(B<directive>Header</directive>
- $B%G%#%l%/%F%#%V$G;XDj$5$l$?F0:n$,9T$J$o$l$^$9!#$=$&$G$J$$>l9g$O!"(B
- $B%G%#%l%/%F%#%V$O$=$N%j%/%(%9%H$K$O2?$b$7$^$;$s!#(B</p>
-
- <p><directive>Header</directive>
- $B%G%#%l%/%F%#%V$O1~Ez$,%M%C%H%o!<%/$KAw$i$l$kD>A0$K(B
- $B=hM}$5$l$^$9!#$3$l$O!"%X%C%@%U%#%k%?$K$h$jDI2C$5$l$k%X%C%@$r(B
- $B=|$-!"$[$H$s$I$N%X%C%@$r@_Dj$7$?$j>e=q$-$7$?$j$9$k$3$H$,(B
- $B2DG=!"$H$$$&$3$H$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_headers.xml.meta b/docs/manual/mod/mod_headers.xml.meta
deleted file mode 100644
index f8c9266845..0000000000
--- a/docs/manual/mod/mod_headers.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_headers</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant outdated="yes">ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_ident.html b/docs/manual/mod/mod_ident.html
deleted file mode 100644
index 44eb0d713b..0000000000
--- a/docs/manual/mod/mod_ident.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_ident.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_ident.html.en b/docs/manual/mod/mod_ident.html.en
deleted file mode 100644
index f08d6152e3..0000000000
--- a/docs/manual/mod/mod_ident.html.en
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_ident - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_ident</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ident.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>RFC 1413 ident lookups</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>ident_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_ident.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module queries an <a href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a> compatible daemon on a remote host to look up the owner of
- a connection.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#identitycheck">IdentityCheck</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#identitychecktimeout">IdentityCheckTimeout</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IdentityCheck" id="IdentityCheck">IdentityCheck</a> <a name="identitycheck" id="identitycheck">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables logging of the RFC 1413 identity of the remote
-user</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IdentityCheck On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>IdentityCheck Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ident</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Moved out of core in Apache 2.1</td></tr>
-</table>
- <p>This directive enables <a href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a>-compliant logging of the remote user name for each
- connection, where the client machine runs identd or something similar.
- This information is logged in the access log using the <code>%...l</code>
- <a href="mod_log_config.html#formats">format string</a>.</p>
-
- <div class="note">
- The information should not be trusted in any way except for
- rudimentary usage tracking.
- </div>
-
- <p>Note that this can cause serious latency problems accessing
- your server since every request requires one of these lookups
- to be performed. When firewalls or proxy servers are involved,
- each lookup might possibly fail and add a latency duration as
- defined by the <code class="directive"><a href="#identitychecktimeout">IdentityCheckTimeout</a></code> directive to each hit. So in
- general this is not very useful on public servers accessible from
- the Internet.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IdentityCheckTimeout" id="IdentityCheckTimeout">IdentityCheckTimeout</a> <a name="identitychecktimeout" id="identitychecktimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines the timeout duration for ident requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IdentityCheckTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>IdentityCheckTimeout 30</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ident</td></tr>
-</table>
- <p>This directive specifies the timeout duration of an ident
- request. The default value of 30 seconds is recommended by <a href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a>, mainly because
- of possible network latency. However, you may want to adjust the
- timeout value according to your local network speed.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ident.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_ident.xml b/docs/manual/mod/mod_ident.xml
deleted file mode 100644
index 285ead9569..0000000000
--- a/docs/manual/mod/mod_ident.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_ident.xml.meta">
-
-<name>mod_ident</name>
-<description>RFC 1413 ident lookups</description>
-<status>Extension</status>
-<sourcefile>mod_ident.c</sourcefile>
-<identifier>ident_module</identifier>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<summary>
- <p>This module queries an <a href="http://www.ietf.org/rfc/rfc1413.txt"
- >RFC 1413</a> compatible daemon on a remote host to look up the owner of
- a connection.</p>
-</summary>
-<seealso><module>mod_log_config</module></seealso>
-
-<directivesynopsis>
-<name>IdentityCheck</name>
-<description>Enables logging of the RFC 1413 identity of the remote
-user</description>
-<syntax>IdentityCheck On|Off</syntax>
-<default>IdentityCheck Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<compatibility>Moved out of core in Apache 2.1</compatibility>
-
-<usage>
- <p>This directive enables <a href="http://www.ietf.org/rfc/rfc1413.txt"
- >RFC 1413</a>-compliant logging of the remote user name for each
- connection, where the client machine runs identd or something similar.
- This information is logged in the access log using the <code>%...l</code>
- <a href="mod_log_config.html#formats">format string</a>.</p>
-
- <note>
- The information should not be trusted in any way except for
- rudimentary usage tracking.
- </note>
-
- <p>Note that this can cause serious latency problems accessing
- your server since every request requires one of these lookups
- to be performed. When firewalls or proxy servers are involved,
- each lookup might possibly fail and add a latency duration as
- defined by the <directive module="mod_ident"
- >IdentityCheckTimeout</directive> directive to each hit. So in
- general this is not very useful on public servers accessible from
- the Internet.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IdentityCheckTimeout</name>
-<description>Determines the timeout duration for ident requests</description>
-<syntax>IdentityCheckTimeout <var>seconds</var></syntax>
-<default>IdentityCheckTimeout 30</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<usage>
- <p>This directive specifies the timeout duration of an ident
- request. The default value of 30 seconds is recommended by <a
- href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a>, mainly because
- of possible network latency. However, you may want to adjust the
- timeout value according to your local network speed.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_ident.xml.meta b/docs/manual/mod/mod_ident.xml.meta
deleted file mode 100644
index c36ae3752d..0000000000
--- a/docs/manual/mod/mod_ident.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_ident</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_imap.html b/docs/manual/mod/mod_imap.html
deleted file mode 100644
index 4469b63900..0000000000
--- a/docs/manual/mod/mod_imap.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_imap.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_imap.html.en b/docs/manual/mod/mod_imap.html.en
deleted file mode 100644
index 066bcab374..0000000000
--- a/docs/manual/mod/mod_imap.html.en
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_imap - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_imap</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_imap.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Server-side imagemap processing</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>imap_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_imap.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module processes <code>.map</code> files, thereby
- replacing the functionality of the <code>imagemap</code> CGI
- program. Any directory or document type configured to use the
- handler <code>imap-file</code> (using either
- <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> or
- <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>)
- will be processed by this module.</p>
-
- <p>The following directive will activate files ending with
- <code>.map</code> as imagemap files:</p>
-
- <div class="example"><p><code>AddHandler imap-file map</code></p></div>
-
- <p>Note that the following is still supported:</p>
-
- <div class="example"><p><code>AddType application/x-httpd-imap map</code></p></div>
-
- <p>However, we are trying to phase out "magic MIME types" so we
- are deprecating this method.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#imapbase">ImapBase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#imapdefault">ImapDefault</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#imapmenu">ImapMenu</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#features">New Features</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#imapfile">Imagemap File</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#example">Example Mapfile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#referencing">Referencing your mapfile</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="features" id="features">New Features</a></h2>
-
- <p>The imagemap module adds some new features that were not
- possible with previously distributed imagemap programs.</p>
-
- <ul>
- <li>URL references relative to the Referer: information.</li>
-
- <li>Default <code>&lt;base&gt;</code> assignment through a new map
- directive <code>base</code>.</li>
-
- <li>No need for <code>imagemap.conf</code> file.</li>
-
- <li>Point references.</li>
-
- <li>Configurable generation of imagemap menus.</li>
- </ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="imapfile" id="imapfile">Imagemap File</a></h2>
-
- <p>The lines in the imagemap files can have one of several
- formats:</p>
-
- <div class="example"><p><code>
- directive value [<var>x</var>,<var>y</var> ...]<br />
- directive value "<var>Menu text</var>" [<var>x</var>,<var>y</var>
- ...]<br />
- directive value <var>x</var>,<var>y</var> ... "<var>Menu text</var>"
- </code></p></div>
-
- <p>The directive is one of <code>base</code>,
- <code>default</code>, <code>poly</code>, <code>circle</code>,
- <code>rect</code>, or <code>point</code>. The value is an
- absolute or relative URL, or one of the special values listed
- below. The coordinates are <code><var>x</var>,<var>y</var></code>
- pairs separated by whitespace. The quoted text is used as the text of
- the link if a imagemap menu is generated. Lines beginning with '#' are
- comments.</p>
-
- <h3><a name="imapfile.directives" id="imapfile.directives">Imagemap File Directives</a></h3>
- <p>There are six directives allowed in the imagemap file. The
- directives can come in any order, but are processed in the
- order they are found in the imagemap file.</p>
-
- <dl>
- <dt><code>base</code> Directive</dt>
-
- <dd><p>Has the effect of <code>&lt;base href="<var>value</var>"&gt;
- </code>. The non-absolute URLs of the map-file are taken relative
- to this value. The <code>base</code> directive overrides
- <code class="directive"><a href="#imapbase">ImapBase</a></code> as set in a
- <code>.htaccess</code> file or in the server configuration files.
- In the absence of an <code class="directive">ImapBase</code> configuration
- directive, <code>base</code> defaults to
- <code>http://server_name/</code>.</p>
- <p><code>base_uri</code> is synonymous with <code>base</code>.
- Note that a trailing slash on the URL is significant.</p></dd>
-
- <dt><code>default</code> Directive</dt>
-
- <dd>The action taken if the coordinates given do not fit any
- of the <code>poly</code>, <code>circle</code> or
- <code>rect</code> directives, and there are no
- <code>point</code> directives. Defaults to <code>nocontent</code>
- in the absence of an <code class="directive"><a href="#imapdefault">ImapDefault</a></code> configuration setting, causing a status
- code of <code>204 No Content</code> to be returned. The client
- should keep the same page displayed.</dd>
-
- <dt><code>poly</code> Directive</dt>
-
- <dd>Takes three to one-hundred points, and is obeyed if the
- user selected coordinates fall within the polygon defined by
- these points.</dd>
-
- <dt><code>circle</code></dt>
-
- <dd>Takes the center coordinates of a circle and a point on
- the circle. Is obeyed if the user selected point is with the
- circle.</dd>
-
- <dt><code>rect</code> Directive</dt>
-
- <dd>Takes the coordinates of two opposing corners of a
- rectangle. Obeyed if the point selected is within this
- rectangle.</dd>
-
- <dt><code>point</code> Directive</dt>
-
- <dd>Takes a single point. The point directive closest to the
- user selected point is obeyed if no other directives are
- satisfied. Note that <code>default</code> will not be
- followed if a <code>point</code> directive is present and
- valid coordinates are given.</dd>
- </dl>
-
-
- <h3><a name="imapfile.values" id="imapfile.values">Values</a></h3>
-
- <p>The values for each of the directives can any of the following:</p>
-
- <dl>
- <dt>a URL</dt>
-
- <dd><p>The URL can be relative or absolute URL. Relative URLs
- can contain '..' syntax and will be resolved relative to the
- <code>base</code> value.</p>
- <p><code>base</code> itself will not resolved according to the
- current value. A statement <code>base mailto:</code> will
- work properly, though.</p></dd>
-
- <dt><code>map</code></dt>
-
- <dd>Equivalent to the URL of the imagemap file itself. No
- coordinates are sent with this, so a menu will be generated
- unless <code class="directive"><a href="#imapmenu">ImapMenu</a></code> is set to
- <code>none</code>.</dd>
-
- <dt><code>menu</code></dt>
- <dd>Synonymous with <code>map</code>.</dd>
-
- <dt><code>referer</code></dt>
-
- <dd>Equivalent to the URL of the referring document. Defaults
- to <code>http://servername/</code> if no <code>Referer:</code>
- header was present.</dd>
-
- <dt><code>nocontent</code></dt>
-
- <dd>Sends a status code of <code>204 No Content</code>,
- telling the client to keep the same page displayed. Valid for
- all but <code>base</code>.</dd>
-
- <dt><code>error</code></dt>
-
- <dd>Fails with a <code>500 Server Error</code>. Valid for all
- but <code>base</code>, but sort of silly for anything but
- <code>default</code>.</dd>
- </dl>
-
-
- <h3><a name="imapfile.coords" id="imapfile.coords">Coordinates</a></h3>
-
- <dl>
- <dt><code>0,0 200,200</code></dt>
-
- <dd>A coordinate consists of an <var>x</var> and a <var>y</var>
- value separated by a comma. The coordinates are separated
- from each other by whitespace. To accommodate the way Lynx
- handles imagemaps, should a user select the coordinate
- <code>0,0</code>, it is as if no coordinate had been
- selected.</dd>
- </dl>
-
-
-
- <h3><a name="imapfile.quotedtext" id="imapfile.quotedtext">Quoted Text</a></h3>
-
- <dl>
- <dt><code>"<var>Menu Text</var>"</code></dt>
-
- <dd><p>After the value or after the coordinates, the line
- optionally may contain text within double quotes. This string
- is used as the text for the link if a menu is
- generated:</p>
-
- <div class="example"><p><code>
- &lt;a href="http://foo.com/"&gt;<var>Menu text</var>&lt;/a&gt;
- </code></p></div>
-
- <p>If no quoted text is present, the name of the link will be
- used as the text:</p>
-
- <div class="example"><p><code>
- &lt;a href="http://foo.com/"&gt;http://foo.com&lt;/a&gt;
- </code></p></div>
-
- <p>If you want to use double quotes within this text, you have to
- write them as <code>&amp;quot;</code>.</p></dd>
- </dl>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="example" id="example">Example Mapfile</a></h2>
-
- <div class="example"><p><code>
- #Comments are printed in a 'formatted' or 'semiformatted' menu.<br />
- #And can contain html tags. &lt;hr&gt;<br />
- base referer<br />
- poly map "Could I have a menu, please?" 0,0 0,10 10,10 10,0<br />
- rect .. 0,0 77,27 "the directory of the referer"<br />
- circle http://www.inetnebr.com/lincoln/feedback/ 195,0 305,27<br />
- rect another_file "in same directory as referer" 306,0 419,27<br />
- point http://www.zyzzyva.com/ 100,100<br />
- point http://www.tripod.com/ 200,200<br />
- rect mailto:nate@tripod.com 100,150 200,0 "Bugs?"<br />
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="referencing" id="referencing">Referencing your mapfile</a></h2>
-
- <div class="example"><h3>HTML example</h3><p><code>
- &lt;a href="/maps/imagemap1.map"&gt;<br />
- <span class="indent">
- &lt;img ismap src="/images/imagemap1.gif"&gt;<br />
- </span>
- &lt;/a&gt;
- </code></p></div>
-
- <div class="example"><h3>XHTML example</h3><p><code>
- &lt;a href="/maps/imagemap1.map"&gt;<br />
- <span class="indent">
- &lt;img ismap="ismap" src="/images/imagemap1.gif" /&gt;<br />
- </span>
- &lt;/a&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapBase" id="ImapBase">ImapBase</a> <a name="imapbase" id="imapbase">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default base for imagemap files</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapBase map|referer|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapBase http://servername/</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imap</td></tr>
-</table>
- <p>The <code class="directive">ImapBase</code> directive sets the default
- <code>base</code> used in the imagemap files. Its value is
- overridden by a <code>base</code> directive within the imagemap
- file. If not present, the <code>base</code> defaults to
- <code>http://<var>servername</var>/</code>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapDefault" id="ImapDefault">ImapDefault</a> <a name="imapdefault" id="imapdefault">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapDefault error|nocontent|map|referer|<var>URL</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ImapDefault nocontent</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imap</td></tr>
-</table>
- <p>The <code class="directive">ImapDefault</code> directive sets the default
- <code>default</code> used in the imagemap files. Its value is
- overridden by a <code>default</code> directive within the
- imagemap file. If not present, the <code>default</code> action
- is <code>nocontent</code>, which means that a <code>204 No
- Content</code> is sent to the client. In this case, the client
- should continue to display the original page.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ImapMenu" id="ImapMenu">ImapMenu</a> <a name="imapmenu" id="imapmenu">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ImapMenu none|formatted|semiformatted|unformatted</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_imap</td></tr>
-</table>
- <p>The <code class="directive">ImapMenu</code> directive determines the
- action taken if an imagemap file is called without valid
- coordinates.</p>
-
- <dl>
- <dt><code>none</code></dt>
- <dd>If ImapMenu is <code>none</code>, no menu is generated,
- and the <code>default</code> action is performed.</dd>
-
- <dt><code>formatted</code></dt>
- <dd>A <code>formatted</code> menu is the simplest menu.
- Comments in the imagemap file are ignored. A level one header
- is printed, then an hrule, then the links each on a separate
- line. The menu has a consistent, plain look close to that of
- a directory listing.</dd>
-
- <dt><code>semiformatted</code></dt>
- <dd>In the <code>semiformatted</code> menu, comments are
- printed where they occur in the imagemap file. Blank lines
- are turned into HTML breaks. No header or hrule is printed,
- but otherwise the menu is the same as a
- <code>formatted</code> menu.</dd>
-
- <dt><code>unformatted</code></dt>
- <dd>Comments are printed, blank lines are ignored. Nothing is
- printed that does not appear in the imagemap file. All breaks
- and headers must be included as comments in the imagemap
- file. This gives you the most flexibility over the appearance
- of your menus, but requires you to treat your map files as
- HTML instead of plaintext.</dd>
- </dl>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_imap.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_imap.xml b/docs/manual/mod/mod_imap.xml
deleted file mode 100644
index 327cc64668..0000000000
--- a/docs/manual/mod/mod_imap.xml
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_imap.xml.meta">
-
-<name>mod_imap</name>
-<description>Server-side imagemap processing</description>
-<status>Base</status>
-<sourcefile>mod_imap.c</sourcefile>
-<identifier>imap_module</identifier>
-
-<summary>
- <p>This module processes <code>.map</code> files, thereby
- replacing the functionality of the <code>imagemap</code> CGI
- program. Any directory or document type configured to use the
- handler <code>imap-file</code> (using either
- <directive module="mod_mime">AddHandler</directive> or
- <directive module="core">SetHandler</directive>)
- will be processed by this module.</p>
-
- <p>The following directive will activate files ending with
- <code>.map</code> as imagemap files:</p>
-
- <example>AddHandler imap-file map</example>
-
- <p>Note that the following is still supported:</p>
-
- <example>AddType application/x-httpd-imap map</example>
-
- <p>However, we are trying to phase out "magic MIME types" so we
- are deprecating this method.</p>
-</summary>
-
-<section id="features"><title>New Features</title>
-
- <p>The imagemap module adds some new features that were not
- possible with previously distributed imagemap programs.</p>
-
- <ul>
- <li>URL references relative to the Referer: information.</li>
-
- <li>Default <code>&lt;base&gt;</code> assignment through a new map
- directive <code>base</code>.</li>
-
- <li>No need for <code>imagemap.conf</code> file.</li>
-
- <li>Point references.</li>
-
- <li>Configurable generation of imagemap menus.</li>
- </ul>
-</section>
-
-<section id="imapfile"><title>Imagemap File</title>
-
- <p>The lines in the imagemap files can have one of several
- formats:</p>
-
- <example>
- directive value [<var>x</var>,<var>y</var> ...]<br />
- directive value "<var>Menu text</var>" [<var>x</var>,<var>y</var>
- ...]<br />
- directive value <var>x</var>,<var>y</var> ... "<var>Menu text</var>"
- </example>
-
- <p>The directive is one of <code>base</code>,
- <code>default</code>, <code>poly</code>, <code>circle</code>,
- <code>rect</code>, or <code>point</code>. The value is an
- absolute or relative URL, or one of the special values listed
- below. The coordinates are <code><var>x</var>,<var>y</var></code>
- pairs separated by whitespace. The quoted text is used as the text of
- the link if a imagemap menu is generated. Lines beginning with '#' are
- comments.</p>
-
- <section id="imapfile.directives"><title>Imagemap File Directives</title>
- <p>There are six directives allowed in the imagemap file. The
- directives can come in any order, but are processed in the
- order they are found in the imagemap file.</p>
-
- <dl>
- <dt><code>base</code> Directive</dt>
-
- <dd><p>Has the effect of <code>&lt;base href="<var>value</var>"&gt;
- </code>. The non-absolute URLs of the map-file are taken relative
- to this value. The <code>base</code> directive overrides
- <directive module="mod_imap">ImapBase</directive> as set in a
- <code>.htaccess</code> file or in the server configuration files.
- In the absence of an <directive>ImapBase</directive> configuration
- directive, <code>base</code> defaults to
- <code>http://server_name/</code>.</p>
- <p><code>base_uri</code> is synonymous with <code>base</code>.
- Note that a trailing slash on the URL is significant.</p></dd>
-
- <dt><code>default</code> Directive</dt>
-
- <dd>The action taken if the coordinates given do not fit any
- of the <code>poly</code>, <code>circle</code> or
- <code>rect</code> directives, and there are no
- <code>point</code> directives. Defaults to <code>nocontent</code>
- in the absence of an <directive module="mod_imap"
- >ImapDefault</directive> configuration setting, causing a status
- code of <code>204 No Content</code> to be returned. The client
- should keep the same page displayed.</dd>
-
- <dt><code>poly</code> Directive</dt>
-
- <dd>Takes three to one-hundred points, and is obeyed if the
- user selected coordinates fall within the polygon defined by
- these points.</dd>
-
- <dt><code>circle</code></dt>
-
- <dd>Takes the center coordinates of a circle and a point on
- the circle. Is obeyed if the user selected point is with the
- circle.</dd>
-
- <dt><code>rect</code> Directive</dt>
-
- <dd>Takes the coordinates of two opposing corners of a
- rectangle. Obeyed if the point selected is within this
- rectangle.</dd>
-
- <dt><code>point</code> Directive</dt>
-
- <dd>Takes a single point. The point directive closest to the
- user selected point is obeyed if no other directives are
- satisfied. Note that <code>default</code> will not be
- followed if a <code>point</code> directive is present and
- valid coordinates are given.</dd>
- </dl>
- </section>
-
- <section id="imapfile.values"><title>Values</title>
-
- <p>The values for each of the directives can any of the following:</p>
-
- <dl>
- <dt>a URL</dt>
-
- <dd><p>The URL can be relative or absolute URL. Relative URLs
- can contain '..' syntax and will be resolved relative to the
- <code>base</code> value.</p>
- <p><code>base</code> itself will not resolved according to the
- current value. A statement <code>base mailto:</code> will
- work properly, though.</p></dd>
-
- <dt><code>map</code></dt>
-
- <dd>Equivalent to the URL of the imagemap file itself. No
- coordinates are sent with this, so a menu will be generated
- unless <directive module="mod_imap">ImapMenu</directive> is set to
- <code>none</code>.</dd>
-
- <dt><code>menu</code></dt>
- <dd>Synonymous with <code>map</code>.</dd>
-
- <dt><code>referer</code></dt>
-
- <dd>Equivalent to the URL of the referring document. Defaults
- to <code>http://servername/</code> if no <code>Referer:</code>
- header was present.</dd>
-
- <dt><code>nocontent</code></dt>
-
- <dd>Sends a status code of <code>204 No Content</code>,
- telling the client to keep the same page displayed. Valid for
- all but <code>base</code>.</dd>
-
- <dt><code>error</code></dt>
-
- <dd>Fails with a <code>500 Server Error</code>. Valid for all
- but <code>base</code>, but sort of silly for anything but
- <code>default</code>.</dd>
- </dl>
- </section>
-
- <section id="imapfile.coords"><title>Coordinates</title>
-
- <dl>
- <dt><code>0,0 200,200</code></dt>
-
- <dd>A coordinate consists of an <var>x</var> and a <var>y</var>
- value separated by a comma. The coordinates are separated
- from each other by whitespace. To accommodate the way Lynx
- handles imagemaps, should a user select the coordinate
- <code>0,0</code>, it is as if no coordinate had been
- selected.</dd>
- </dl>
-
- </section>
-
- <section id="imapfile.quotedtext"><title>Quoted Text</title>
-
- <dl>
- <dt><code>"<var>Menu Text</var>"</code></dt>
-
- <dd><p>After the value or after the coordinates, the line
- optionally may contain text within double quotes. This string
- is used as the text for the link if a menu is
- generated:</p>
-
- <example>
- &lt;a href="http://foo.com/"&gt;<var>Menu text</var>&lt;/a&gt;
- </example>
-
- <p>If no quoted text is present, the name of the link will be
- used as the text:</p>
-
- <example>
- &lt;a href="http://foo.com/"&gt;http://foo.com&lt;/a&gt;
- </example>
-
- <p>If you want to use double quotes within this text, you have to
- write them as <code>&amp;quot;</code>.</p></dd>
- </dl>
-
- </section>
-</section>
-
-<section id="example"><title>Example Mapfile</title>
-
- <example>
- #Comments are printed in a 'formatted' or 'semiformatted' menu.<br />
- #And can contain html tags. &lt;hr&gt;<br />
- base referer<br />
- poly map "Could I have a menu, please?" 0,0 0,10 10,10 10,0<br />
- rect .. 0,0 77,27 "the directory of the referer"<br />
- circle http://www.inetnebr.com/lincoln/feedback/ 195,0 305,27<br />
- rect another_file "in same directory as referer" 306,0 419,27<br />
- point http://www.zyzzyva.com/ 100,100<br />
- point http://www.tripod.com/ 200,200<br />
- rect mailto:nate@tripod.com 100,150 200,0 "Bugs?"<br />
- </example>
-
-</section>
-
-<section id="referencing"><title>Referencing your mapfile</title>
-
- <example><title>HTML example</title>
- &lt;a href="/maps/imagemap1.map"&gt;<br />
- <indent>
- &lt;img ismap src="/images/imagemap1.gif"&gt;<br />
- </indent>
- &lt;/a&gt;
- </example>
-
- <example><title>XHTML example</title>
- &lt;a href="/maps/imagemap1.map"&gt;<br />
- <indent>
- &lt;img ismap="ismap" src="/images/imagemap1.gif" /&gt;<br />
- </indent>
- &lt;/a&gt;
- </example>
-
-</section>
-
-<directivesynopsis>
-<name>ImapMenu</name>
-<description>Action if no coordinates are given when calling
-an imagemap</description>
-<syntax>ImapMenu none|formatted|semiformatted|unformatted</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>ImapMenu</directive> directive determines the
- action taken if an imagemap file is called without valid
- coordinates.</p>
-
- <dl>
- <dt><code>none</code></dt>
- <dd>If ImapMenu is <code>none</code>, no menu is generated,
- and the <code>default</code> action is performed.</dd>
-
- <dt><code>formatted</code></dt>
- <dd>A <code>formatted</code> menu is the simplest menu.
- Comments in the imagemap file are ignored. A level one header
- is printed, then an hrule, then the links each on a separate
- line. The menu has a consistent, plain look close to that of
- a directory listing.</dd>
-
- <dt><code>semiformatted</code></dt>
- <dd>In the <code>semiformatted</code> menu, comments are
- printed where they occur in the imagemap file. Blank lines
- are turned into HTML breaks. No header or hrule is printed,
- but otherwise the menu is the same as a
- <code>formatted</code> menu.</dd>
-
- <dt><code>unformatted</code></dt>
- <dd>Comments are printed, blank lines are ignored. Nothing is
- printed that does not appear in the imagemap file. All breaks
- and headers must be included as comments in the imagemap
- file. This gives you the most flexibility over the appearance
- of your menus, but requires you to treat your map files as
- HTML instead of plaintext.</dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ImapDefault</name>
-<description>Default action when an imagemap is called with coordinates
-that are not explicitly mapped</description>
-<syntax>ImapDefault error|nocontent|map|referer|<var>URL</var></syntax>
-<default>ImapDefault nocontent</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>ImapDefault</directive> directive sets the default
- <code>default</code> used in the imagemap files. Its value is
- overridden by a <code>default</code> directive within the
- imagemap file. If not present, the <code>default</code> action
- is <code>nocontent</code>, which means that a <code>204 No
- Content</code> is sent to the client. In this case, the client
- should continue to display the original page.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ImapBase</name>
-<description>Default <code>base</code> for imagemap files</description>
-<syntax>ImapBase map|referer|<var>URL</var></syntax>
-<default>ImapBase http://servername/</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
- <p>The <directive>ImapBase</directive> directive sets the default
- <code>base</code> used in the imagemap files. Its value is
- overridden by a <code>base</code> directive within the imagemap
- file. If not present, the <code>base</code> defaults to
- <code>http://<var>servername</var>/</code>.</p>
-</usage>
-<seealso><directive module="core">UseCanonicalName</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_imap.xml.meta b/docs/manual/mod/mod_imap.xml.meta
deleted file mode 100644
index 2180e667d6..0000000000
--- a/docs/manual/mod/mod_imap.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_imap</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_include.html b/docs/manual/mod/mod_include.html
deleted file mode 100644
index b45a07fc56..0000000000
--- a/docs/manual/mod/mod_include.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_include.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_include.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mod_include.html.en b/docs/manual/mod/mod_include.html.en
deleted file mode 100644
index 890e1deec6..0000000000
--- a/docs/manual/mod/mod_include.html.en
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_include - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_include</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_include.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_include.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Server-parsed html documents (Server Side Includes)</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>include_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_include.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Implemented as an output filter since Apache
-2.0</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides a filter which will process files
- before they are sent to the client. The processing is
- controlled by specially formatted SGML comments, referred to as
- <dfn>elements</dfn>. These elements allow conditional text, the
- inclusion of other files or programs, as well as the setting and
- printing of environment variables.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#ssiendtag">SSIEndTag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssierrormsg">SSIErrorMsg</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssistarttag">SSIStartTag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssitimeformat">SSITimeFormat</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#xbithack">XBitHack</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#enabling">Enabling Server-Side Includes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pathinfo">PATH_INFO with Server Side Includes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#elements">Basic Elements</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#includevars">Include Variables</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#substitution">Variable Substitution</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#flowctrl">Flow Control Elements</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-<li><a href="../filter.html">Filters</a></li>
-<li><a href="../howto/ssi.html">SSI Tutorial</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enabling" id="enabling">Enabling Server-Side Includes</a></h2>
-
-
- <p>Server Side Includes are implemented by the
- <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
- documents containing server-side include directives are given
- the extension .shtml, the following directives will make Apache
- parse them and assign the resulting document the mime type of
- <code>text/html</code>:</p>
-
- <div class="example"><p><code>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
- </code></p></div>
-
- <p>The following directive must be given for the directories
- containing the shtml files (typically in a
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> section,
- but this directive is also valid in <code>.htaccess</code> files if
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> <code>Options</code>
- is set):</p>
-
- <div class="example"><p><code>
- Options +Includes
- </code></p></div>
-
- <p>For backwards compatibility, the <code>server-parsed</code>
- <a href="../handler.html">handler</a> also activates the
- INCLUDES filter. As well, Apache will activate the INCLUDES
- filter for any document with mime type
- <code>text/x-server-parsed-html</code> or
- <code>text/x-server-parsed-html3</code> (and the resulting
- output will have the mime type <code>text/html</code>).</p>
-
- <p>For more information, see our <a href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pathinfo" id="pathinfo">PATH_INFO with Server Side Includes</a></h2>
-
-
- <p>Files processed for server-side includes no longer accept
- requests with <code>PATH_INFO</code> (trailing pathname information)
- by default. You can use the <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> directive to
- configure the server to accept requests with <code>PATH_INFO</code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="elements" id="elements">Basic Elements</a></h2>
- <p>The document is parsed as an HTML document, with special
- commands embedded as SGML comments. A command has the syntax: </p>
-
- <div class="example"><p><code>
- &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
- <var>attribute</var>=<var>value</var> ... --&gt;
- </code></p></div>
-
- <p>The value will often be enclosed in double quotes, but single
- quotes (<code>'</code>) and backticks (<code>`</code>) are also
- possible. Many commands only allow a single attribute-value pair.
- Note that the comment terminator (<code>--&gt;</code>) should be
- preceded by whitespace to ensure that it isn't considered part of
- an SSI token. Note that the leading <code>&lt;!--#</code> is <em>one</em>
- token and may not contain any whitespaces.</p>
-
- <p>The allowed elements are listed in the following table:</p>
-
- <table class="bordered">
- <tr><th>Element</th><th>Description</th></tr>
- <tr><td><code><a href="#element.config">config</a></code></td>
- <td>configure output formats</td></tr>
- <tr><td><code><a href="#element.echo">echo</a></code></td>
- <td>print variables</td></tr>
- <tr><td><code><a href="#element.exec">exec</a></code></td>
- <td>execute external programs</td></tr>
- <tr><td><code><a href="#element.fsize">fsize</a></code></td>
- <td>print size of a file</td></tr>
- <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
- <td>print last modification time of a file</td></tr>
- <tr><td><code><a href="#element.include">include</a></code></td>
- <td>include a file</td></tr>
- <tr><td><code><a href="#element.printenv">printenv</a></code></td>
- <td>print all available variables</td></tr>
- <tr><td><code><a href="#element.set">set</a></code></td>
- <td>set a value of a variable</td></tr>
- </table>
-
- <p>SSI elements may be defined by modules other than
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>. In fact, the <code><a href="#element.exec">exec</a></code> element is provided by
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, and will only be available if this
- module is loaded.</p>
-
- <h3><a name="element.config" id="element.config">The config Element</a></h3>
- <p>This command controls various aspects of the parsing. The
- valid attributes are:</p>
-
- <dl>
- <dt><code>echomsg</code> (<em>Apache 2.1 and later</em>)</dt>
- <dd>The value is a message that is sent back to the
- client if the <code><a href="#element.echo">echo</a></code> element
- attempts to echo an undefined variable. This overrides any <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directives.</dd>
-
- <dt><code>errmsg</code></dt>
- <dd>The value is a message that is sent back to the
- client if an error occurs while parsing the
- document. This overrides any <code class="directive"><a href="#ssierrormsg">SSIErrorMsg</a></code> directives.</dd>
-
- <dt><code>sizefmt</code></dt>
- <dd>The value sets the format to be used which displaying
- the size of a file. Valid values are <code>bytes</code>
- for a count in bytes, or <code>abbrev</code> for a count
- in Kb or Mb as appropriate, for example a size of 1024 bytes
- will be printed as "1K".</dd>
-
- <dt><code>timefmt</code></dt>
- <dd>The value is a string to be used by the
- <code>strftime(3)</code> library routine when printing
- dates.</dd>
- </dl>
-
-
- <h3><a name="element.echo" id="element.echo">The echo Element</a></h3>
- <p>This command prints one of the <a href="#includevars">include
- variables</a>, defined below. If the variable is unset, the result is
- determined by the <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directive. Any dates printed are
- subject to the currently configured <code>timefmt</code>.</p>
-
- <p>Attributes:</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>The value is the name of the variable to print.</dd>
-
- <dt><code>encoding</code></dt>
- <dd><p>Specifies how Apache should encode special characters
- contained in the variable before outputting them. If set
- to <code>none</code>, no encoding will be done. If set to
- <code>url</code>, then URL encoding (also known as %-encoding;
- this is appropriate for use within URLs in links, etc.) will be
- performed. At the start of an <code>echo</code> element,
- the default is set to <code>entity</code>, resulting in entity
- encoding (which is appropriate in the context of a block-level
- HTML element, <em>e.g.</em> a paragraph of text). This can be
- changed by adding an <code>encoding</code> attribute, which will
- remain in effect until the next <code>encoding</code> attribute
- is encountered or the element ends, whichever comes first.</p>
-
- <p>The <code>encoding</code> attribute must <em>precede</em> the
- corresponding <code>var</code> attribute to be effective, and
- only special characters as defined in the ISO-8859-1 character
- encoding will be encoded. This encoding process may not have the
- desired result if a different character encoding is in use.</p>
-
- <div class="warning">
- In order to avoid cross-site scripting issues, you should
- <em>always</em> encode user supplied data.
- </div>
- </dd>
- </dl>
-
-
- <h3><a name="element.exec" id="element.exec">The exec Element</a></h3>
- <p>The <code>exec</code> command executes a given shell command or
- CGI script. It requires <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> to be present
- in the server. If <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- <code>IncludesNOEXEC</code> is set, this command is completely
- disabled. The valid attributes are:</p>
-
- <dl>
- <dt><code>cgi</code></dt>
- <dd><p>The value specifies a (%-encoded) URL-path to
- the CGI script. If the path does not begin with a slash (/),
- then it is taken to be relative to the current
- document. The document referenced by this path is
- invoked as a CGI script, even if the server would not
- normally recognize it as such. However, the directory
- containing the script must be enabled for CGI scripts
- (with <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- or <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- <code>ExecCGI</code>).</p>
-
- <p>The CGI script is given the <code>PATH_INFO</code> and query
- string (<code>QUERY_STRING</code>) of the original request from the
- client; these <em>cannot</em> be specified in the URL path. The
- include variables will be available to the script in addition to
- the standard <a href="mod_cgi.html">CGI</a> environment.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
- </code></p></div>
-
- <p>If the script returns a <code>Location:</code> header instead of
- output, then this will be translated into an HTML anchor.</p>
-
- <p>The <code><a href="#includevirtual">include virtual</a></code>
- element should be used in preference to <code>exec cgi</code>. In
- particular, if you need to pass additional arguments to a CGI program,
- using the query string, this cannot be done with <code>exec
- cgi</code>, but can be done with <code>include virtual</code>, as
- shown here:</p>
-
- <div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </code></p></div>
- </dd>
-
- <dt><code>cmd</code></dt>
- <dd><p>The server will execute the given string using
- <code>/bin/sh</code>. The <a href="#includevars">include variables</a> are available to the command, in addition
- to the usual set of CGI variables.</p>
-
- <p>The use of <code><a href="#includevirtual">#include virtual</a></code> is almost always prefered to using
- either <code>#exec cgi</code> or <code>#exec cmd</code>. The former
- (<code>#include virtual</code>) uses the standard Apache sub-request
- mechanism to include files or scripts. It is much better tested and
- maintained.</p>
-
- <p>In addition, on some platforms, like Win32, and on unix when
- using <a href="../suexec.html">suexec</a>, you cannot pass arguments
- to a command in an <code>exec</code> directive, or otherwise include
- spaces in the command. Thus, while the following will work under a
- non-suexec configuration on unix, it will not produce the desired
- result under Win32, or when running suexec:</p>
-
- <div class="example"><p><code>
- &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
- </code></p></div>
- </dd>
- </dl>
-
-
- <h3><a name="element.fsize" id="element.fsize">The fsize Element</a></h3>
- <p>This command prints the size of the specified file, subject
- to the <code>sizefmt</code> format specification. Attributes:</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>The value is a path relative to the directory
- containing the current document being parsed.</dd>
-
- <dt><code>virtual</code></dt>
- <dd>The value is a (%-encoded) URL-path. If it does not begin with
- a slash (/) then it is taken to be relative to the current document.
- Note, that this does <em>not</em> print the size of any CGI output,
- but the size of the CGI script itself.</dd>
- </dl>
-
-
- <h3><a name="element.flastmod" id="element.flastmod">The flastmod Element</a></h3>
- <p>This command prints the last modification date of the
- specified file, subject to the <code>timefmt</code> format
- specification. The attributes are the same as for the
- <code><a href="#element.fsize">fsize</a></code> command.</p>
-
-
- <h3><a name="element.include" id="element.include">The include Element</a></h3>
- <p>This command inserts the text of another document or file
- into the parsed file. Any included file is subject to the
- usual access control. If the directory containing the
- parsed file has <a href="core.html#options">Options</a>
- <code>IncludesNOEXEC</code> set, then only documents with
- a text MIME type (<code>text/plain</code>, <code>text/html</code>
- etc.) will be included. Otherwise CGI scripts are invoked as normal
- using the complete URL given in the command, including any query
- string.</p>
-
- <p>An attribute defines the location of the document; the
- inclusion is done for each attribute given to the include
- command. The valid attributes are:</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>The value is a path relative to the directory
- containing the current document being parsed. It cannot
- contain <code>../</code>, nor can it be an absolute path.
- Therefore, you cannot include files that are outside of the
- document root, or above the current document in the directory
- structure. The <code>virtual</code> attribute should always be
- used in preference to this one.</dd>
-
- <dt><code><a id="includevirtual" name="includevirtual">virtual</a></code></dt>
- <dd><p>The value is a (%-encoded) URL-path. The URL cannot contain a
- scheme or hostname, only a path and an optional query string. If it
- does not begin with a slash (/) then it is taken to be relative to the
- current document.</p>
-
- <p>A URL is constructed from the attribute, and the output the
- server would return if the URL were accessed by the client is
- included in the parsed output. Thus included files can be nested.</p>
-
- <p>If the specified URL is a CGI program, the program will be
- executed and its output inserted in place of the directive in the
- parsed file. You may include a query string in a CGI url:</p>
-
- <div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </code></p></div>
-
- <p><code>include virtual</code> should be used in preference
- to <code>exec cgi</code> to include the output of CGI programs
- into an HTML document.</p>
- </dd>
- </dl>
-
-
- <h3><a name="element.printenv" id="element.printenv">The printenv Element</a></h3>
- <p>This prints out a listing of all existing variables and
- their values. Special characters are entity encoded (see the <code><a href="#element.echo">echo</a></code> element for details)
- before being output. There are no attributes.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;!--#printenv --&gt;
- </code></p></div>
-
-
- <h3><a name="element.set" id="element.set">The set Element</a></h3>
- <p>This sets the value of a variable. Attributes:</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>The name of the variable to set.</dd>
-
- <dt><code>value</code></dt>
- <dd>The value to give a variable.</dd>
- </dl>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;!--#set var="category" value="help" --&gt;
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="includevars" id="includevars">Include Variables</a></h2>
-
-
- <p>In addition to the variables in the standard CGI environment,
- these are available for the <code>echo</code> command, for
- <code>if</code> and <code>elif</code>, and to any program
- invoked by the document.</p>
-
- <dl>
- <dt><code>DATE_GMT</code></dt>
- <dd>The current date in Greenwich Mean Time.</dd>
-
- <dt><code>DATE_LOCAL</code></dt>
- <dd>The current date in the local time zone.</dd>
-
- <dt><code>DOCUMENT_NAME</code></dt>
- <dd>The filename (excluding directories) of the document
- requested by the user.</dd>
-
- <dt><code>DOCUMENT_URI</code></dt>
- <dd>The (%-decoded) URL path of the document requested by the
- user. Note that in the case of nested include files, this is
- <em>not</em> the URL for the current document.</dd>
-
- <dt><code>LAST_MODIFIED</code></dt>
- <dd>The last modification date of the document requested by
- the user.</dd>
-
- <dt><code>QUERY_STRING_UNESCAPED</code></dt>
- <dd>If a query string is present, this variable contains the
- (%-decoded) query string, which is <em>escaped</em> for shell
- usage (special characters like <code>&amp;</code> etc. are
- preceded by backslashes).</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="substitution" id="substitution">Variable Substitution</a></h2>
-
- <p>Variable substitution is done within quoted strings in most
- cases where they may reasonably occur as an argument to an SSI
- directive. This includes the <code>config</code>,
- <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
- <code>include</code>, <code>echo</code>, and <code>set</code>
- directives, as well as the arguments to conditional operators.
- You can insert a literal dollar sign into the string using backslash
- quoting:</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr="$a = \$test" --&gt;
- </code></p></div>
-
- <p>If a variable reference needs to be substituted in the
- middle of a character sequence that might otherwise be
- considered a valid identifier in its own right, it can be
- disambiguated by enclosing the reference in braces,
- <em>a la</em> shell substitution:</p>
-
- <div class="example"><p><code>
- &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
- </code></p></div>
-
- <p>This will result in the <code>Zed</code> variable being set
- to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
- "<code>X</code>" and <code>REQUEST_METHOD</code> is
- "<code>Y</code>".</p>
-
- <p>The below example will print "in foo" if the
- <code>DOCUMENT_URI</code> is <code>/foo/file.html</code>, "in bar"
- if it is <code>/bar/file.html</code> and "in neither" otherwise:</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
- <span class="indent">
- in foo<br />
- </span>
- &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
- <span class="indent">
- in bar<br />
- </span>
- &lt;!--#else --&gt;<br />
- <span class="indent">
- in neither<br />
- </span>
- &lt;!--#endif --&gt;
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="flowctrl" id="flowctrl">Flow Control Elements</a></h2>
-
-
- <p>The basic flow control elements are:</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
- </code></p></div>
-
- <p>The <code>if</code> element works like an if statement in a
- programming language. The test condition is evaluated and if
- the result is true, then the text until the next <code>elif</code>,
- <code>else</code> or <code>endif</code> element is included in the
- output stream.</p>
-
- <p>The <code>elif</code> or <code>else</code> statements are be used
- to put text into the output stream if the original
- <var>test_condition</var> was false. These elements are optional.</p>
-
- <p>The <code>endif</code> element ends the <code>if</code> element
- and is required.</p>
-
- <p><var>test_condition</var> is one of the following:</p>
-
- <dl>
- <dt><code><var>string</var></code></dt>
- <dd>true if <var>string</var> is not empty</dd>
-
- <dt><code><var>string1</var> = <var>string2</var><br />
- <var>string1</var> == <var>string2</var><br />
- <var>string1</var> != <var>string2</var></code></dt>
-
- <dd><p>Compare <var>string1</var> with <var>string2</var>. If
- <var>string2</var> has the form <code>/<var>string2</var>/</code>
- then it is treated as a regular expression. Regular expressions are
- implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
- have the same syntax as those in <a href="http://www.perl.com">perl
- 5</a>. Note that <code>==</code> is just an alias for <code>=</code>
- and behaves exactly the same way.</p>
-
- <p>If you are matching positive (<code>=</code> or <code>==</code>), you
- can capture grouped parts of the regular expression. The captured parts
- are stored in the special variables <code>$1</code> ..
- <code>$9</code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
- <span class="indent">
- &lt;!--#set var="session" value="$1" --&gt;<br />
- </span>
- &lt;!--#endif --&gt;
- </code></p></div>
- </dd>
-
- <dt><code><var>string1</var> &lt; <var>string2</var><br />
- <var>string1</var> &lt;= <var>string2</var><br />
- <var>string1</var> &gt; <var>string2</var><br />
- <var>string1</var> &gt;= <var>string2</var></code></dt>
-
- <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
- strings are compared <em>literally</em> (using
- <code>strcmp(3)</code>). Therefore the string "100" is less than
- "20".</dd>
-
- <dt><code>( <var>test_condition</var> )</code></dt>
- <dd>true if <var>test_condition</var> is true</dd>
-
- <dt><code>! <var>test_condition</var></code></dt>
- <dd>true if <var>test_condition</var> is false</dd>
-
- <dt><code><var>test_condition1</var> &amp;&amp;
- <var>test_condition2</var></code></dt>
- <dd>true if both <var>test_condition1</var> and
- <var>test_condition2</var> are true</dd>
-
- <dt><code><var>test_condition1</var> ||
- <var>test_condition2</var></code></dt>
- <dd>true if either <var>test_condition1</var> or
- <var>test_condition2</var> is true</dd>
- </dl>
-
- <p>"<code>=</code>" and "<code>!=</code>" bind more tightly than
- "<code>&amp;&amp;</code>" and "<code>||</code>". "<code>!</code>" binds
- most tightly. Thus, the following are equivalent:</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
- &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
- </code></p></div>
-
- <p>The boolean operators <code>&amp;&amp;</code> and <code>||</code>
- share the same priority. So if you want to bind such an operator more
- tightly, you should use parentheses.</p>
-
- <p>Anything that's not recognized as a variable or an operator
- is treated as a string. Strings can also be quoted:
- <code>'string'</code>. Unquoted strings can't contain whitespace
- (blanks and tabs) because it is used to separate tokens such as
- variables. If multiple strings are found in a row, they are
- concatenated using blanks. So,</p>
-
- <div class="example"><p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code> results in <code><var>string1</var>&nbsp;<var>string2</var></code><br />
- <br />
- and<br />
- <br />
- <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var>'</code> results in <code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>.</p></div>
-
- <div class="note"><h3>Optimization of Boolean Expressions</h3>
- <p>If the expressions become more complex and slow down processing
- significantly, you can try to optimize them according to the
- evaluation rules:</p>
- <ul>
- <li>Expressions are evaluated from left to right</li>
- <li>Binary boolean operators (<code>&amp;&amp;</code> and <code>||</code>)
- are short circuited wherever possible. In conclusion with the rule
- above that means, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> evaluates at first
- the left expression. If the left result is sufficient to determine
- the end result, processing stops here. Otherwise it evaluates the
- right side and computes the end result from both left and right
- results.</li>
- <li>Short circuit evaluation is turned off as long as there are regular
- expressions to deal with. These must be evaluated to fill in the
- backreference variables (<code>$1</code> .. <code>$9</code>).</li>
- </ul>
- <p>If you want to look how a particular expression is handled, you can
- recompile <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> using the
- <code>-DDEBUG_INCLUDE</code> compiler option. This inserts for every
- parsed expression tokenizer information, the parse tree and how it is
- evaluated into the output sent to the client.</p>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that ends an include element</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIEndTag "--&gt;"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
-</table>
- <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- looks for to mark the end of an include element.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SSIEndTag "%&gt;"
- </code></p></div>
-
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Error message displayed when there is an SSI
-error</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
-directive]"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
-</table>
- <p>The <code class="directive">SSIErrorMsg</code> directive changes the error
- message displayed when <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> encounters an
- error. For production servers you may consider changing the default
- error message to <code>"&lt;!-- Error --&gt;"</code> so that
- the message is not presented to the user.</p>
-
- <p>This directive has the same effect as the <code>&lt;!--#config
- errmsg=<var>message</var> --&gt;</code> element.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SSIErrorMsg "&lt;!-- Error --&gt;"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that starts an include element</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIStartTag "&lt;!--#"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
-</table>
- <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- looks for to mark an include element to process.</p>
-
- <p>You may want to use this option if you have 2 servers parsing the
- output of a file each processing different commands (possibly at
- different times).</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SSIStartTag "&lt;%"<br />
- SSIEndTag "%&gt;"
- </code></p></div>
-
- <p>The example given above, which also specifies a matching
- <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code>, will
- allow you to use SSI directives as shown in the example
- below:</p>
-
- <div class="example"><h3>SSI directives with alternate start and end tags</h3><p><code>
- &lt;%printenv %&gt;
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the format in which date strings are
-displayed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
-</table>
-<p>This directive changes the format in which date strings are displayed
- when echoing <code>DATE</code> environment variables. The
- <var>formatstring</var> is as in <code>strftime(3)</code> from the
- C standard library.</p>
-
- <p>This directive has the same effect as the <code>&lt;!--#config
- timefmt=<var>formatstring</var> --&gt;</code> element.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SSITimeFormat "%R, %B %d, %Y"
- </code></p></div>
-
- <p>The above directive would cause times to be displayed in the
- format "22:26, June 14, 2002".</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String displayed when an unset variable is echoed</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.34 and later.</td></tr>
-</table>
- <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- displays when a variable is not set and "echoed".</p>
-
- <div class="example"><h3>Example</h3><p><code>
- SSIUndefinedEcho "&lt;!-- undef --&gt;"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Parse SSI directives in files with the execute bit
-set</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>XBitHack on|off|full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>XBitHack off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
-</table>
- <p>The <code class="directive">XBitHack</code> directive controls the parsing
- of ordinary html documents. This directive only affects files associated
- with the MIME type <code>text/html</code>. <code class="directive">XBitHack</code> can take on the following values:</p>
-
- <dl>
- <dt><code>off</code></dt>
- <dd>No special treatment of executable files.</dd>
-
- <dt><code>on</code></dt>
- <dd>Any <code>text/html</code> file that has the user-execute bit
- set will be treated as a server-parsed html document.</dd>
-
- <dt><code>full</code></dt>
- <dd>As for <code>on</code> but also test the group-execute bit.
- If it is set, then set the <code>Last-modified</code> date of the
- returned file to be the last modified time of the file. If
- it is not set, then no last-modified date is sent. Setting
- this bit allows clients and proxies to cache the result of
- the request.
-
- <div class="note"><h3>Note</h3>
- <p>You would not want to use the full option, unless you assure the
- group-execute bit is unset for every SSI script which might <code>#include</code> a CGI or otherwise produces different output on
- each hit (or could potentially change on subsequent requests).</p>
- </div>
- </dd>
- </dl>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_include.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_include.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_include.html.ja.euc-jp b/docs/manual/mod/mod_include.html.ja.euc-jp
deleted file mode 100644
index eca5b203b1..0000000000
--- a/docs/manual/mod/mod_include.html.ja.euc-jp
+++ /dev/null
@@ -1,789 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_include - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_include</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_include.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_include.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬¥Ñ¡¼¥¹¤¹¤ë html ¥É¥­¥å¥á¥ó¥È (Server Side Includes)</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>include_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_include.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 ¤«¤é½ÐÎÏ¥Õ¥£¥ë¥¿¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Þ¤·¤¿¡£</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥Õ¥¡¥¤¥ë¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤ëÁ°¤Ë½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤ò
- Ä󶡤·¤Þ¤¹¡£½èÍý¤ÎÆâÍƤÏ<dfn>Í×ÁÇ</dfn>¤È¸Æ¤Ð¤ì¤ëÆÃÊ̤ʷÁ¼°¤Î SGML ¥³¥á¥ó¥È¤Ë¤è¤ê
- À©¸æ¤µ¤ì¤Þ¤¹¡£¤³¤ì¤é¤ÎÍ×ÁǤϾò·ïʬ´ô¤ä¡¢Â¾¤Î¥Õ¥¡¥¤¥ë¤ä
- ¥×¥í¥°¥é¥à¤Î½ÐÎϤμè¤ê¹þ¤ß¡¢´Ä¶­ÊÑ¿ô¤ÎÀßÄê¤äɽ¼¨¤ò¹Ô¤Ê¤¦¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#ssiendtag">SSIEndTag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssierrormsg">SSIErrorMsg</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssistarttag">SSIStartTag</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssitimeformat">SSITimeFormat</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssiundefinedecho">SSIUndefinedEcho</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#xbithack">XBitHack</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#enabling">Server-Side Includes ¤òÍ­¸ú¤Ë¤¹¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pathinfo">¥µ¡¼¥Ð¥µ¥¤¥É¥¤¥ó¥¯¥ë¡¼¥É (SSI) ¤Ç¤Î PATH_INFO</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#elements">´ðËÜÍ×ÁÇ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#includevars">Include ÊÑ¿ô</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#substitution">ÊÑ¿ôÃÖ´¹</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#flowctrl">¥Õ¥í¡¼À©¸æÍ×ÁÇ</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-<li><a href="../filter.html">¥Õ¥£¥ë¥¿</a></li>
-<li><a href="../howto/ssi.html">SSI ¥Á¥å¡¼¥È¥ê¥¢¥ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enabling" id="enabling">Server-Side Includes ¤òÍ­¸ú¤Ë¤¹¤ë</a></h2>
-
-
- <p>Server Side Includes ¤Ï <code>INCLUDES</code>
- <a href="../filter.html">¥Õ¥£¥ë¥¿</a> ¤Ë¤è¤ê¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- Server-side include ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò´Þ¤à¥É¥­¥å¥á¥ó¥È¤Î³ÈÄ¥»Ò¤¬
- .shtml ¤Î¾ì¹ç¡¢°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï Apache ¤¬¤½¤ì¤é¤ò
- ¥Ñ¡¼¥¹¤·¤Æ¡¢¤½¤Î·ë²Ì¤Ç¤­¤ë¥É¥­¥å¥á¥ó¥È¤Ë <code>text/html</code> ¤Î
- MIME ¥¿¥¤¥×¤ò³ä¤êÅö¤Æ¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
- </code></p></div>
-
- <p>°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï shtml ¥Õ¥¡¥¤¥ë¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë
- ɬÍפ¬¤¢¤ê¤Þ¤¹ (Ä̾ï¤Ï <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Ç»ØÄꤷ¤Þ¤¹¤¬¡¢
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> <code>Options</code>
- ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢<code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¯¤³¤È¤â¤Ç¤­¤Þ¤¹):</p>
-
- <div class="example"><p><code>
- Options +Includes
- </code></p></div>
-
- <p>¸ß´¹À­¤òÊݤĤ¿¤á¤Ë¡¢<code>server-parsed</code>
- <a href="../handler.html">¥Ï¥ó¥É¥é</a> ¤â INCLUDES ¥Õ¥£¥ë¥¿¤ò
- Í­¸ú¤Ë¤·¤Þ¤¹¡£MIME ¥¿¥¤¥× <code>text/x-server-parsed-html</code> ¤ä
- <code>text/x-server-parsed-html3</code> ¤Î¥É¥­¥å¥á¥ó¥È¤ËÂФ·¤Æ¤â
- Apache ¤Ï INCLUDES ¥Õ¥£¥ë¥¿¤òÍ­¸ú¤Ë¤·¤Þ¤¹ (½ÐÎϤµ¤ì¤ë¤â¤Î¤Ï
- MIME ¥¿¥¤¥× <code>text/html</code> ¤Ë¤Ê¤ê¤Þ¤¹)¡£</p>
-
- <p>¾Ü¤·¤¤¾ðÊó¤Ï <a href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pathinfo" id="pathinfo">¥µ¡¼¥Ð¥µ¥¤¥É¥¤¥ó¥¯¥ë¡¼¥É (SSI) ¤Ç¤Î PATH_INFO</a></h2>
-
-
- <p>SSI ¤Ç½èÍý¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï <code>PATH_INFO</code>
- (¸å³¤Î¥Ñ¥¹Ì¾¾ðÊó)
- ÉÕ¤­¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±Æþ¤ì¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¡£<code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- <code>PATH_INFO</code> ÉÕ¤­¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±Æþ¤ì¤ë¤è¤¦¤Ë¥µ¡¼¥Ð¤ò
- ÀßÄê¤Ç¤­¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="elements" id="elements">´ðËÜÍ×ÁÇ</a></h2>
- <p>¥É¥­¥å¥á¥ó¥È¤Ï¡¢SGML ¤Î¥³¥á¥ó¥È¤È¤·¤ÆÆÃÊ̤ʥ³¥Þ¥ó¥É¤¬Ëä¤á¹þ¤Þ¤ì¤¿
- HTML ¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ¥Ñ¡¼¥¹¤µ¤ì¤Þ¤¹¡£¥³¥Þ¥ó¥É¤Î¹½Ê¸¤Ï¼¡¤Î¤è¤¦¤Ë
- ¤Ê¤Ã¤Æ¤¤¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
- <var>attribute</var>=<var>value</var> ... --&gt;
- </code></p></div>
-
- <p>ÃÍ (ÌõÃí: value) ¤ÏÆó½Å°úÍÑÉä¤Ç°Ï¤à¤Î¤¬°ìÈÌŪ¤Ç¤¹¤¬¡¢
- ¥·¥ó¥°¥ë¥¯¥ª¡¼¥È (') ¤È¥Ð¥Ã¥¯¥¯¥ª¡¼¥È (`) ¤â»ÈÍѤǤ­¤Þ¤¹¡£
- ¿¤¯¤Î¥³¥Þ¥ó¥É¤Ï°À­-ÃÍ (ÌõÃí: attribute-value) ¤ÎÁȤò°ì¤Ä¤À¤±»ØÄê¤Ç¤­¤Þ¤¹¡£
- ¥³¥á¥ó¥È¤Î½ª¤ï¤ê (<code>--&gt;</code>)
- ¤ÎÁ°¤Ë¤Ï¡¢SSI ¤Î¶ç¤Î°ìÉô¤À¤È²ò¼á¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¶õÇò¤ò
- Æþ¤ì¤Æ¤¯¤À¤µ¤¤¡£ºÇ½é¤Î <code>&lt;!--#</code> ¤Ï¤Þ¤È¤á¤Æ<em>°ì¤Ä</em>¤Î
- ¶ç¤Ç¡¢¶õÇò¤ò¤Õ¤¯¤ó¤Ç¤Ï¤¤¤±¤Ê¤¤¤³¤ÈÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>Í×ÁÇ (ÌõÃí: element) ¤ò°Ê²¼¤Îɽ¤Ë¼¨¤·¤Þ¤¹¡£</p>
-
- <table class="bordered">
- <tr><th>Í×ÁÇ</th><th>ÀâÌÀ</th></tr>
- <tr><td><code><a href="#element.config">config</a></code></td>
- <td>configure output formats</td></tr>
- <tr><td><code><a href="#element.echo">echo</a></code></td>
- <td>print variables</td></tr>
- <tr><td><code><a href="#element.exec">exec</a></code></td>
- <td>execute external programs</td></tr>
- <tr><td><code><a href="#element.fsize">fsize</a></code></td>
- <td>print size of a file</td></tr>
- <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
- <td>print last modification time of a file</td></tr>
- <tr><td><code><a href="#element.include">include</a></code></td>
- <td>include a file</td></tr>
- <tr><td><code><a href="#element.printenv">printenv</a></code></td>
- <td>print all available variables</td></tr>
- <tr><td><code><a href="#element.set">set</a></code></td>
- <td>set a value of a variable</td></tr>
- </table>
-
- <p>SSI Í×ÁÇ¤Ï <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> °Ê³°¤Î¥â¥¸¥å¡¼¥ë¤Ç
- ÄêµÁ¤µ¤ì¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£¼ÂºÝ¡¢
- <code><a href="#element.exec">exec</a></code> Í×ÁǤÏ
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Æ¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤¬
- ¥í¡¼¥É¤µ¤ì¤ë¾ì¹ç¤Ë¤Î¤ßÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£</p>
-
- <h3><a name="element.config" id="element.config">config Í×ÁÇ</a></h3>
- <p>¼¡¤Î¥³¥Þ¥ó¥É¤Ï²òÀϤÎÍÍ¡¹¤Ê¦Ì̤òÀ©¸æ¤·¤Þ¤¹¡£Â°À­¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>echomsg</code> (<em>Apache 2.1 °Ê¹ß</em>)</dt>
- <dd>»ØÄꤵ¤ì¤ëÃͤϡ¢<code><a href="#element.echo">echo</a></code>
- Í×ÁǤ¬Ì¤ÄêµÁ¤ÎÊÑ¿ô¤ò¥¨¥³¡¼¤·¤è¤¦¤È¤·¤¿ºÝ¤Ë¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤ë¥á¥Ã¥»¡¼¥¸¤Ë¤Ê¤ê¤Þ¤¹¡£
- <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</dd>
-
- <dt><code>errmsg</code></dt>
- <dd>¤³¤ÎÃͤ¬¡¢¥É¥­¥å¥á¥ó¥È¤Î²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿»þ¤Ë
- ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¿®¤µ¤ì¤ë¥á¥Ã¥»¡¼¥¸¤Ë¤Ê¤ê¤Þ¤¹¡£
- <code class="directive"><a href="#ssierrormsg">SSIErrorMsg</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</dd>
-
- <dt><code>sizefmt</code></dt>
- <dd>¤³¤ÎÃͤϡ¢¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤òɽ¼¨¤¹¤ëºÝ¤Ë»ÈÍѤ¹¤ë
- ¥Õ¥©¡¼¥Þ¥Ã¥È¤òÀßÄꤷ¤Þ¤¹¡£ÃÍ¤Ï ¥Ð¥¤¥È¥«¥¦¥ó¥È¤Î
- <code>bytes</code>¤«¡¢Kb ¤ä Mb ¤òÍ¥ÀèŪ¤Ë»ÈÍѤ¹¤ë
- <code>abbrec</code> (Î㤨¤Ð 1024 ¥Ð¥¤¥È¤Ï "1K" ¤Èɽ¼¨¤µ¤ì¤Þ¤¹)
- ¤Ç¤¹¡£</dd>
-
- <dt><code>timefmt</code></dt>
- <dd>¤³¤ÎÃÍ¤Ï <code>strftime(3)</code> ¥é¥¤¥Ö¥é¥ê¥ë¡¼¥Á¥ó¤¬
- Æü»þ¤ò¥×¥ê¥ó¥È¤¹¤ëºÝ¤ËÍѤ¤¤é¤ì¤Þ¤¹¡£</dd>
- </dl>
-
-
- <h3><a name="element.echo" id="element.echo">echo Í×ÁÇ</a></h3>
- <p>¤³¤Î¥³¥Þ¥ó¥É¤Ï°Ê²¼¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë <a href="#includevars">include
- ÊÑ¿ô</a> ¤òɽ¼¨¤·¤Þ¤¹¡£ÊÑ¿ô¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- ·èÄꤵ¤ì¤ë·ë²Ì¤È¤Ê¤ê¤Þ¤¹¡£ÆüÉդϤ½¤Î»þÅÀ¤Ç¤Î <code>timefmt</code> ¤Ë½¾¤Ã¤Æ
- ɽ¼¨¤µ¤ì¤Þ¤¹¡£Â°À­¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>ÃͤÏɽ¼¨¤¹¤ëÊÑ¿ô¤Î̾Á°¤Ç¤¹¡£</dd>
-
- <dt><code>encoding</code></dt>
- <dd><p>ÊÑ¿ô¤ò½ÐÎϤ¹¤ëÁ°¤Ë¡¢ÊÑ¿ôÃæ¤ÎÆÃÊÌʸ»ú¤ò¤É¤Î¤è¤¦¤Ë¥¨¥ó¥³¡¼¥É¤¹¤ë¤«¤ò
- »ØÄꤷ¤Þ¤¹¡£<code>none</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢¥¨¥ó¥³¡¼¥É¤Ï¹Ô¤Ê¤ï¤ì¤Þ¤»¤ó¡£
- <code>url</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢URL ¥¨¥ó¥³¡¼¥É (%-¥¨¥ó¥³¡¼¥É¤È¤â
- ¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¥ê¥ó¥¯Åù¤Î URL ¤Î»ÈÍѤËŬÀڤǤ¹) ¤¬
- ¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£<code>echo</code> Í×ÁǤγ«»Ï»þ¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Ï
- <code>entity</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¥¨¥ó¥Æ¥£¥Æ¥£¥¨¥ó¥³¡¼¥É
- (ÃÊÍî¤ä¥Æ¥­¥¹¥È¤Ê¤É¤Î¥Ö¥í¥Ã¥¯¥ì¥Ù¥ë¤Î HTML ¥¨¥ì¥á¥ó¥È¤Î¥³¥ó¥Æ¥­¥¹¥È¤Ë
- Ŭ¤·¤Æ¤¤¤Þ¤¹) ¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£¤³¤ì¤Ï <code>encoding</code> °À­
- ¤ò²Ã¤¨¤ë¤³¤È¤ÇÊѹ¹¤Ç¤­¤Þ¤¹¡£Êѹ¹¤Ï¼¡¤Î <code>encoding</code> °À­¤«¡¢
- Í×ÁǤνªÎ»¤Þ¤Ç¸úÎϤò»ý¤Á¤Þ¤¹¡£</p>
-
- <p><code>encoding</code> °À­¤Ï¥¨¥ó¥³¡¼¥É¤ÎÊѹ¹¤ò¤·¤¿¤¤ <code>var</code>
- ¤Î<em>Á°¤Ë</em> ¤¢¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤Þ¤¿¡¢ISO-8859-1 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ç
- ÄêµÁ¤µ¤ì¤Æ¤¤¤ëÆÃÊ̤Êʸ»ú¤À¤±¤¬¥¨¥ó¥³¡¼¥É¤µ¤ì¤Þ¤¹¡£
- Ê̤Îʸ»ú¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¾ì¹ç¤Ï¡¢¤³¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ï
- ˾¤ß¤Î·ë²Ì¤Ë¤Ê¤é¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <div class="warning">
- ¥¯¥í¥¹¥µ¥¤¥È¥¹¥¯¥ê¥×¥Æ¥£¥ó¥°¤ÎÌäÂê¤òÈò¤±¤ë¤¿¤á¤Ë¡¢
- <em>¾ï¤Ë</em>¥æ¡¼¥¶¤«¤é¤Î¥Ç¡¼¥¿¤ò¥¨¥ó¥³¡¼¥É¤¹¤Ù¤­¤Ç¤¹¡£
- </div>
- </dd>
- </dl>
-
-
- <h3><a name="element.exec" id="element.exec">exec Í×ÁÇ</a></h3>
- <p><code>exec</code> ¥³¥Þ¥ó¥É¤Ï»ØÄꤵ¤ì¤¿¥·¥§¥ë¥³¥Þ¥ó¥É¤ä CGI ¥¹¥¯¥ê¥×¥È¤ò
- ¼Â¹Ô¤·¤Þ¤¹¡£<code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> ¤¬¥µ¡¼¥Ð¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¤¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£<code class="directive"><a href="../mod/core.html#option">Option</a></code>
- <code>IncludesNOEXEC</code> ¤Ï¤³¤Î¥³¥Þ¥ó¥É¤ò̵¸ú¤Ë¤·¤Þ¤¹¡£
- »ÈÍѲÄǽ¤Ê°À­¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>cgi</code></dt>
- <dd><p>ÃÍ¤Ï (%-¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿) URL ¤ò»ØÄꤷ¤Þ¤¹¡£¥Ñ¥¹¤¬
- ¥¹¥é¥Ã¥·¥å (/) ¤Ç»Ï¤Þ¤é¤Ê¤¤¤È¤­¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤«¤é¤Î
- ÁêÂХѥ¹¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£¤³¤Î¥Ñ¥¹¤Ç»²¾È¤µ¤ì¤Æ¤¤¤ë¥É¥­¥å¥á¥ó¥È¤Ï
- ¥µ¡¼¥Ð¤¬ CGI ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Ê¤¯¤Æ¤â CGI ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ
- µ¯Æ°¤µ¤ì¤Þ¤¹¡£¤¿¤À¤·¡¢¥¹¥¯¥ê¥×¥È¤Î¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï
- (<code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- ¤ä <code class="directive"><a href="../mod/core.html#option">Option</a></code> <code>ExecCGI</code>
- ¤Ë¤è¤Ã¤Æ) CGI ¥¹¥¯¥ê¥×¥È¤Î»ÈÍѤ¬µö²Ä¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>CGI ¥¹¥¯¥ê¥×¥È¤Ë¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¸µ¡¹¤Î¥ê¥¯¥¨¥¹¥È¤Î
- <code>PATH_INFO</code> ¤È¥¯¥¨¥ê¡¼Ê¸»úÎó (<code>QUERY_STRING</code>) ¤¬ÅϤµ¤ì¤Þ¤¹¡£
- ¤³¤ì¤é¤Ï URL ¥Ñ¥¹¤È¤·¤ÆÆÃÄê<em>¤Ç¤­¤Ê¤¤</em>¤â¤Î¤Ç¤¹¡£
- ¥¹¥¯¥ê¥×¥È¤Ïɸ½à <a href="mod_cgi.html">CGI</a> ´Ä¶­¤Ë²Ã¤¨¤Æ¡¢include ÊÑ¿ô¤ò
- »ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
- </code></p></div>
-
- <p>¥¹¥¯¥ê¥×¥È¤¬¡¢½ÐÎϤÎÂå¤ï¤ê¤Ë <code>Location:</code> ¥Ø¥Ã¥À¤òÊÖ¤¹¤È¡¢
- HTML ¤Î¥¢¥ó¥«¡¼ (ÌõÃí¡§¥ê¥ó¥¯) ¤ËÊÑ´¹¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code>exec cgi</code> ¤è¤ê¤â¡¢
- <code><a href="#includevirtual">include virtual</a></code>
- ¤ÎÊý¤ò»È¤¦¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£Æäˡ¢CGI ¤Ø¤ÎÄɲäΰú¿ô¤ò
- ¥¯¥¨¥ê¡¼Ê¸»úÎó¤ò»È¤Ã¤ÆÅϤ¹¤³¤È¤Ï <code>exec cgi</code> ¤Ï
- ¤Ç¤­¤Þ¤»¤ó¤¬¡¢<code>include virtual</code> ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ
- ²Äǽ¤Ç¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </code></p></div>
- </dd>
-
- <dt><code>cmd</code></dt>
- <dd><p>¥µ¡¼¥Ð¤Ï»ØÄꤵ¤ì¤¿Ê¸»úÎó¤ò <code>/bin/sh</code> ¤ò»È¤Ã¤Æ
- ¼Â¹Ô¤·¤Þ¤¹¡£¥³¥Þ¥ó¥É¤ÏÄ̾ï¤Î CGI ÊÑ¿ô¤Ë²Ã¤¨¤Æ <a href="#includevars">include ÊÑ¿ô</a>¤â»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢<code><a href="#includevirtual">#include
- virtual</a></code> ¤ò»È¤¦Êý¤¬ <code>#exec cgi</code> ¤ä <code>#exec
- cmd</code> ¤ò»È¤¦¤è¤ê¤âÎɤ¤¤Ç¤¹¡£Á°¼Ô (<code>#include virtual</code>)
- ¤Ïɸ½à¤Î Apache ¤Î¥µ¥Ö¥ê¥¯¥¨¥¹¥Èµ¡¹½¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¤ä¥¹¥¯¥ê¥×¥È¤Î
- ½ÐÎϤò¼è¤ê¹þ¤ß¤Þ¤¹¡£
- ¤³¤Á¤é¤ÎÊý¤¬¤è¤¯¥Æ¥¹¥È¤µ¤ì¥á¥ó¥Æ¥Ê¥ó¥¹¤µ¤ì¤¿ÊýË¡¤Ç¤¹¡£</p>
-
- <p>¤µ¤é¤Ë¡¢Win32 ¤Î¤è¤¦¤Ê¤¤¤¯¤Ä¤«¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ä¡¢<a href="../suexec.html">suexec</a> ¤ò»È¤Ã¤Æ¤¤¤ë unix ¤Ç¤Ï¡¢
- <code>exec</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥³¥Þ¥ó¥É¤Ë
- °ú¿ô¤òÅϤ·¤¿¤ê¡¢¥³¥Þ¥ó¥É¤Ë¶õÇò¤òÆþ¤ì¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- ¤Ç¤¹¤«¤é¡¢°Ê²¼¤Î¤â¤Î¤Ï unix ¤Î suexec ¤Ç¤Ê¤¤ÀßÄê¤Ç¤ÏÆ°ºî¤·¤Þ¤¹¤¬¡¢
- Win32 ¤ä suexec ¤ò»È¤Ã¤Æ¤¤¤ë unix ¤Ç¤Ï´üÂÔ¤·¤¿·ë²Ì¤Ë¤Ï¤Ê¤ê¤Þ¤»¤ó:</p>
-
- <div class="example"><p><code>
- &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
- </code></p></div>
- </dd>
- </dl>
-
-
- <h3><a name="element.fsize" id="element.fsize">fsize Í×ÁÇ</a></h3>
- <p>¤³¤Î¥³¥Þ¥ó¥É¤Ï»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ¤ò <code>sizefmt</code> ¤Î
- ½ñ¼°»ØÄê¤Ë´ð¤Å¤¤¤Æ½ÐÎϤ·¤Þ¤¹¡£Â°À­¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>ÃͤϲòÀϤµ¤ì¤Æ¤¤¤ë¥É¥­¥å¥á¥ó¥È¤Î¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤Î
- ÁêÂХѥ¹¤Ç¤¹¡£</dd>
-
- <dt><code>virtual</code></dt>
- <dd> ÃÍ¤Ï (% ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿) URL-path ¤Ç¤¹¡£¥¹¥é¥Ã¥·¥å (/) ¤Ç
- »Ï¤Þ¤é¤Ê¤¤¤È¤­¤Ï¥É¥­¥å¥á¥ó¥È¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
- CGI ¤Î½ÐÎϤΥµ¥¤¥º¤Ï¥×¥ê¥ó¥È<em>¤µ¤ì¤Þ¤»¤ó</em>¡£CGI
- ¥¹¥¯¥ê¥×¥È¼«ÂΤΥµ¥¤¥º¤¬¥×¥ê¥ó¥È¤µ¤ì¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</dd>
- </dl>
-
-
- <h3><a name="element.flastmod" id="element.flastmod">flastmod Í×ÁÇ</a></h3>
- <p>¤³¤Î¥³¥Þ¥ó¥É¤Ï»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤ÎºÇ½ª½¤Àµ»þ¹ï¤ò
- <code>timefmt</code> ½ñ¼°»ØÄê¤Ë½¾¤Ã¤Æɽ¼¨¤·¤Þ¤¹¡£
- »ØÄê²Äǽ¤Ê°À­¤Ï <code>fsize</code> ¥³¥Þ¥ó¥É¤ÈƱ¤¸¤Ç¤¹¡£</p>
-
-
- <h3><a name="element.include" id="element.include">include Í×ÁÇ</a></h3>
- <p>¤³¤Î¥³¥Þ¥ó¥É¤ÏÊ̤Îʸ½ñ¤ä¥Õ¥¡¥¤¥ë¤Î¥Æ¥­¥¹¥È¤ò²òÀϤ·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Ë
- ÁÞÆþ¤·¤Þ¤¹¡£ÁÞÆþ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Ï¥¢¥¯¥»¥¹À©¸æ¤Î´ÉÍý²¼¤Ë¤¢¤ê¤Þ¤¹¡£
- ²òÀϤ·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Î¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- <a href="core.html#options">Option</a> <code>IncludesNOEXEC</code>
- ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢text MIME ¥¿¥¤¥× (<code>text/plain</code>,
- <code>text/html</code> Åù) ¤Î¥É¥­¥å¥á¥ó¥È¤Î¤ß¥¤¥ó¥¯¥ë¡¼¥É¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- ¤½¤Î¾¤Î¾ì¹ç¤Ï¡¢¥¯¥¨¥ê¡¼Ê¸»úÎó¤â´Þ¤á¡¢¥³¥Þ¥ó¥É¤Ç»ØÄꤵ¤ì¤¿
- ´°Á´¤Ê URL ¤ò»È¤Ã¤ÆÉáÄÌ¤Ë CGI ¥¹¥¯¥ê¥×¥È¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>°À­¤¬Ê¸½ñ¤Î°ÌÃÖ¤ò»ØÄꤷ¤Þ¤¹¡£include ¥³¥Þ¥ó¥É¤ËÍ¿¤¨¤é¤ì¤¿¤½¤ì¤¾¤ì¤Î
- °À­¤ËÂФ·¤ÆÁÞÆþºî¶È¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£Í­¸ú¤Ê°À­¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>ÃͤϲòÀϤµ¤ì¤Æ¤¤¤ë¥É¥­¥å¥á¥ó¥È¤Î¸ºß¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¤Î
- ÁêÂХѥ¹¤Ç¤¹¡£
- <code>../</code> ¤ò´Þ¤ó¤Ç¤¤¤¿¤ê¡¢ÀäÂХѥ¹¤ò»ØÄꤷ¤¿¤ê¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- ¤Ç¤¹¤«¤é¡¢¥É¥­¥å¥á¥ó¥È¥ë¡¼¥È¤Î³°¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤ä¡¢¥Ç¥£¥ì¥¯¥È¥ê¹½Â¤¤Ç
- ¾å°Ì¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤òÁÞÆþ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- ¾ï¤Ë¤³¤Î°À­¤è¤ê¤Ï¡¢<code>virtual</code> °À­¤ò»È¤¦¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- </dd>
-
- <dt><code><a id="includevirtual" name="includevirtual">virtual</a></code></dt>
- <dd><p>ÃͤϲòÀϤµ¤ì¤Æ¤¤¤ë¥É¥­¥å¥á¥ó¥È¤«¤é¤Î (% ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿) URL
- ¤Ç¤¹¡£URL ¤Ë¤Ï¥¹¥­¡¼¥à¤ä¥Û¥¹¥È̾¤ò´Þ¤á¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¥Ñ¥¹¤È¡¢
- ¤â¤·¤¢¤ì¤Ð¥¯¥¨¥ê¡¼Ê¸»úÎó¤ò»ØÄê¤Ç¤­¤ë¤À¤±¤Ç¤¹¡£¥¹¥é¥Ã¥·¥å (/) ¤«¤é
- »Ï¤Þ¤é¤Ê¤¤¾ì¹ç¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <p>URL ¤Ï°À­¤«¤éºî¤é¤ì¡¢¤½¤Î URL ¤ò¥¯¥é¥¤¥¢¥ó¥È¤¬¥¢¥¯¥»¥¹¤·¤¿¤È¤­¤Ë
- ½ÐÎϤµ¤ì¤ëÆâÍƤ¬²òÀϸå¤Î½ÐÎϤ˴ޤá¤é¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢ÁÞÆþ¤µ¤ì¤ë
- ¥Õ¥¡¥¤¥ë¤ÏÆþ¤ì»Ò¹½Â¤¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>»ØÄꤵ¤ì¤¿ URL ¤¬ CGI ¥×¥í¥°¥é¥à¤Ç¤¢¤Ã¤¿¾ì¹ç¤Ï¡¢
- ¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤µ¤ì¡¢¤½¤Î½ÐÎϤ¬²òÀϤ·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ëÃæ¤Î
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¤¢¤Ã¤¿°ÌÃÖ¤ËÁÞÆþ¤µ¤ì¤Þ¤¹¡£CGI ¤Î url ¤Ë
- ¥¯¥¨¥ê¡¼ URL ¤òÆþ¤ì¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </code></p></div>
-
- <p>HTML ¥É¥­¥å¥á¥ó¥È¤Ë CGI ¥×¥í¥°¥é¥à¤Î½ÐÎϤò´Þ¤á¤ëÊýË¡¤È¤·¤Æ¤Ï¡¢
- <code>include virtual</code> ¤ÎÊý¤¬ <code>exec cgi</code> ¤è¤ê¤â
- ¹¥¤Þ¤·¤¤ÊýË¡¤Ç¤¹¡£</p>
- </dd>
- </dl>
-
-
- <h3><a name="element.printenv" id="element.printenv">printenv Í×ÁÇ</a></h3>
- <p>¤³¤ì¤Ï¡¢Â¸ºß¤¹¤ë¤¹¤Ù¤Æ¤ÎÊÑ¿ô¤È¤½¤ÎÃͤòɽ¼¨¤·¤Þ¤¹¡£Apache 1.3.12 ¤«¤é¡¢
- ÆÃÊ̤Êʸ»ú¤Ï½ÐÎϤµ¤ì¤ëÁ°¤Ë¥¨¥ó¥Æ¥£¥Æ¥£¥¨¥ó¥³¡¼¥É (¾ÜºÙ¤Ï <a href="#element.echo"><code>echo</code></a> Í×ÁǤò»²¾È)
- ¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£Â°À­¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;!--#printenv --&gt;
- </code></p></div>
-
-
- <h3><a name="element.set" id="element.set">set Í×ÁÇ</a></h3>
- <p>¤³¤ì¤ÏÊÑ¿ô¤ÎÃͤòÀßÄꤷ¤Þ¤¹¡£Â°À­¤Ï¼¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>ÀßÄꤹ¤ëÊÑ¿ô¤Î̾Á°¡£</dd>
-
- <dt><code>value</code></dt>
- <dd>ÊÑ¿ô¤ËÀßÄꤹ¤ëÃÍ¡£</dd>
- </dl>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;!--#set var="category" value="help" --&gt;
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="includevars" id="includevars">Include ÊÑ¿ô</a></h2>
-
-
- <p>ɸ½à CGI ´Ä¶­¤ÎÊÑ¿ô¤Ë²Ã¤¨¤Æ¡¢<code>echo</code> ¥³¥Þ¥ó¥É¤ä¡¢
- <code>if</code> ¤ä <code>elif</code>, ¤½¤ì¤Ë¥É¥­¥å¥á¥ó¥È¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë
- ¤¹¤Ù¤Æ¤Î¥×¥í¥°¥é¥à¤«¤é»ÈÍѤǤ­¤ëÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>DATE_GMT</code></dt>
- <dd>¥°¥ê¥Ë¥Ã¥¸É¸½à»þ¤Ë¤è¤ë¸½ºß»þ¹ï¡£</dd>
-
- <dt><code>DATE_LOCAL</code></dt>
- <dd>¥í¡¼¥«¥ë¤Îɸ½à»þ¤Ë¤è¤ë¸½ºß»þ¹ï¡£</dd>
-
- <dt><code>DOCUMENT_NAME</code></dt>
- <dd>¥æ¡¼¥¶¤¬¥ê¥¯¥¨¥¹¥È¤·¤¿ (¥Ç¥£¥ì¥¯¥È¥ê¤ò½ü¤¤¤¿) ¥Õ¥¡¥¤¥ë̾¡£</dd>
-
- <dt><code>DOCUMENT_URI</code></dt>
- <dd>¥æ¡¼¥¶¤¬¥ê¥¯¥¨¥¹¥È¤·¤¿ (% ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿) URL-path¡£
- ÁÞÆþ¥Õ¥¡¥¤¥ë¤¬Æþ¤ì»Ò¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢²òÀϤµ¤ì¤Æ¤¤¤ë
- ¥É¥­¥å¥á¥ó¥È¤Î URL ¤Ç¤Ï<em>¤Ê¤¤</em>¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</dd>
-
- <dt><code>LAST_MODIFIED</code></dt>
- <dd>¥æ¡¼¥¶¤¬¥ê¥¯¥¨¥¹¥È¤·¤¿¥É¥­¥å¥á¥ó¥È¤ÎºÇ½ª½¤Àµ»þ¹ï¡£</dd>
-
- <dt><code>QUERY_STRING_UNESCAPED</code></dt>
- <dd>¥¯¥¨¥ê¡¼Ê¸»úÎ󤬤¢¤ë¾ì¹ç¡¢¤³¤ÎÊÑ¿ô¤Ë¤Ï (%-¥Ç¥³¡¼¥É¤µ¤ì¤¿)
- ¥¯¥¨¥ê¡¼Ê¸»úÎó¤¬ÂåÆþ¤µ¤ì¤Æ¤¤¤Æ¡¢shell ¤Ç»ÈÍѤǤ­¤ë¤è¤¦¤Ë
- <em>¥¨¥¹¥±¡¼¥×</em>¤µ¤ì¤Æ¤¤¤Þ¤¹ (<code>&amp;</code>
- ¤È¤¤¤Ã¤¿Æüìʸ»ú¤Ë¤Ï¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤¬Ä¾Á°¤ËÃÖ¤«¤ì¤Þ¤¹)¡£</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="substitution" id="substitution">ÊÑ¿ôÃÖ´¹</a></h2>
-
- <p>ÊÑ¿ôÃÖ´¹¤Ï¤¿¤¤¤Æ¤¤¤Î¾ì¹ç SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤È¤·¤ÆÂÅÅö¤Ê¾ì½ê¤Ë¤¢¤ë
- °úÍÑÉä¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎóÃæ¤Ç¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£¤³¤ì¤Ë³ºÅö¤¹¤ë¤â¤Î¤Ë¤Ï¡¢
- <code>config</code>,
- <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
- <code>include</code>, <code>echo</code>, <code>set</code> ¤Î
- ³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¡¢¾ò·ïʬ´ôÍѤΥª¥Ú¥ì¡¼¥¿¤Ø¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤¹¡£
- ¥É¥ëµ­¹æ¤Ï¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤ò»È¤¦¤³¤È¤Ç»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr="$a = \$test" --&gt;
- </code></p></div>
-
- <p>ÊÑ¿ô̾¤È¤·¤Æ¤ß¤Ê¤µ¤ì¤ëʸ»úÎó¤ÎÃæ¤ÇÊÑ¿ô¤Ø¤Î»²¾È¤òÃÖ´¹¤¹¤ëɬÍפ¬¤¢¤ë¤È¤­¤Ï¡¢
- ¥·¥§¥ë¤Ç¤ÎÊÑ¿ôÃÖ´¹¤Î¤è¤¦¤Ë¡¢Ãæ³ç¸Ì¤Ç³ç¤ë¤³¤È¤Ç¶èÊ̤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
- </code></p></div>
-
- <p>¤³¤ÎÎã¤Ç¤Ï¡¢<code>REMOTE_HOST</code> ¤¬
- "<code>X</code>" ¤Ç <code>REQUEST_METHOD</code> ¤¬
- "<code>Y</code>" ¤Î¤È¤­¤ËÊÑ¿ô <code>Zed</code> ¤ò "<code>X_Y</code>"
- ¤ËÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p>°Ê²¼¤ÎÎã¤Ç¤Ï¡¢<code>DOCUMENT_URI</code> ¤¬ <code>/foo/file.html</code>
- ¤Î¤È¤­¤Ë "in foo" ¤ò¡¢<code>/bar/file.html</code> ¤Î¤È¤­¤Ë "in bar" ¤ò¡¢
- ¤É¤Á¤é¤Ç¤â¤Ê¤¤¤È¤­¤Ë¤Ï "in neither" ¤òɽ¼¨¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
- <span class="indent">
- in foo<br />
- </span>
- &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
- <span class="indent">
- in bar<br />
- </span>
- &lt;!--#else --&gt;<br />
- <span class="indent">
- in neither<br />
- </span>
- &lt;!--#endif --&gt;
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="flowctrl" id="flowctrl">¥Õ¥í¡¼À©¸æÍ×ÁÇ</a></h2>
-
-
- <p>´ðËÜŪ¤Ê¥Õ¥í¡¼¥³¥ó¥È¥í¡¼¥ëÍ×ÁǤϼ¡¤ÎÄ̤ê¤Ç¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
- </code></p></div>
-
- <p><code>if</code> Í×ÁÇ¤Ï¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¤Î
- if ʸ¤ÈƱ¤¸¤è¤¦¤ËÆ°ºî¤·¤Þ¤¹¡£¾ò·ï¤¬É¾²Á¤µ¤ì¡¢·ë²Ì¤¬¿¿¤Ç¤¢¤ì¤Ð¼¡¤Î
- <code>elif</code> ¤« <code>else</code> ¤« <code>endif</code>
- Í×ÁǤޤǤÎʸ»úÎ󤬽ÐÎϤËÁÞÆþ¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code>elif</code> ¤ä <code>else</code> ʸ¤Ï <var>test_condition</var>
- ¤¬µ¶¤Î¤È¤­¤Ë¥Æ¥­¥¹¥È¤ò½ÐÎϤËÁÞÆþ¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£
- ¤³¤ì¤é¤ÎÍ×ÁǤϤ¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
- <p><code>endif</code> Í×ÁÇ¤Ï <code>if</code>
- Í×ÁǤò½ªÎ»¤µ¤»¤Þ¤¹¡£¤³¤ÎÍ×ÁǤÏɬ¿Ü¤Ç¤¹¡£</p>
-
- <p><var>test_condition</var> ¤Ï°Ê²¼¤Î¤É¤ì¤«¤Ç¤¹:</p>
-
- <dl>
- <dt><code><var>string</var></code></dt>
- <dd><var>string</var> ¤¬¶õ¤Ç¤Ê¤¤¾ì¹ç¤Ë¿¿¤Ç¤¹</dd>
-
- <dt><code><var>string1</var> = <var>string2</var><br />
- <var>string1</var> == <var>string2</var><br />
- <var>string1</var> != <var>string2</var></code></dt>
-
- <dd><p><var>string1</var> ¤È <var>string2</var> ¤òÈæ³Ó¤·¤Þ¤¹¡£
- <var>string2</var> ¤¬ <code>/<var>string</var>/</code>
- ¤È¤¤¤¦·Á¼°¤Ç¤¢¤ì¤Ð¡¢Àµµ¬É½¸½¤È¤·¤ÆÈæ³Ó¤µ¤ì¤Þ¤¹¡£Àµµ¬É½¸½¤Ï
- <a href="http://www.pcre.org">PCRE</a> ¥¨¥ó¥¸¥ó¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Æ¡¢
- <a href="http://www.perl.com">perl 5</a> ¤ÈƱ¤¸¹½Ê¸¤ò»ÈÍѤ·¤Þ¤¹¡£
- <code>==</code> ¤Ïñ¤Ë <code>=</code> ¤ÎÊÌ̾¤Ç¡¢¤Þ¤Ã¤¿¤¯Æ±¤¸Æ°ºî¤ò
- ¤·¤Þ¤¹¡£</p>
-
- <p>Àµ¤Î¥Þ¥Ã¥Á¥ó¥° (<code>=</code> ¤Þ¤¿¤Ï <code>==</code>) ¤Î¾ì¹ç¤Ï¡¢
- Àµµ¬É½¸½¤Ç¥°¥ë¡¼¥×ʬ¤±¤µ¤ì¤¿¥Ñ¡¼¥Ä¤ò¥­¥ã¥×¥Á¥ã¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥­¥ã¥×¥Á¥ã¤µ¤ì¤¿Éôʬ¤ÏÆüìÊÑ¿ô <code>$1</code> .. <code>$9</code>
- ¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
- <span class="indent">
- &lt;!--#set var="session" value="$1" --&gt;<br />
- </span>
- &lt;!--#endif --&gt;
- </code></p></div>
- </dd>
-
- <dt><code><var>string1</var> &lt; <var>string2</var><br />
- <var>string1</var> &lt;= <var>string2</var><br />
- <var>string1</var> &gt; <var>string2</var><br />
- <var>string1</var> &gt;= <var>string2</var></code></dt>
-
- <dd><var>string1</var> ¤È <var>string2</var> ¤òÈæ³Ó¤·¤Þ¤¹¡£
- <em>ʸ»úÎó¤È¤·¤Æ</em>Èæ³Ó¤µ¤ì¤ë (<code>strcmp(3)</code> ¤ò»ÈÍÑ)
- ¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤Ç¤¹¤«¤é¡¢Ê¸»úÎó "100" ¤Ï "20"
- ¤è¤ê¤â¾®¤µ¤¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>( <var>test_condition</var> )</code></dt>
- <dd><var>test_condition</var> ¤¬¿¿¤Î¤È¤­¡¢¿¿</dd>
-
- <dt><code>! <var>test_condition</var></code></dt>
- <dd><var>test_condition</var> ¤¬µ¶¤Î¤È¤­¡¢¿¿</dd>
-
- <dt><code><var>test_condition1</var> &amp;&amp;
- <var>test_condition2</var></code></dt>
- <dd><var>test_condition1</var> ¤«¤Ä
- <var>test_condition2</var> ¤¬¿¿¤Î¤È¤­¡¢¿¿</dd>
-
- <dt><code><var>test_condition1</var> ||
- <var>test_condition2</var></code></dt>
- <dd><var>test_condition1</var> ¤Þ¤¿¤Ï
- <var>test_condition2</var> ¤¬¿¿¤Î¤È¤­¡¢¿¿</dd>
- </dl>
-
- <p>"<em>=</em>" ¤È "<em>!=</em>" ¤ÎÊý¤¬ "<em>&amp;&amp;</em>" ¤è¤ê
- ¤­¤Ä¤¯Â«Çû¤·¤Þ¤¹¡£"<em>!</em>" ¤Î«Çû¤¬°ìÈÖ¤­¤Ä¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é°Ê²¼¤ÎÆó¤Ä¤ÏÅù²Á¤Ç¤¹:</p>
-
- <div class="example"><p><code>
- &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
- &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
- </code></p></div>
-
- <p>¿¿µ¶ÃÍ¥ª¥Ú¥ì¡¼¥¿ <code>&amp;&amp;</code> ¤È <code>||</code>
- ¤ÏƱ¤¸Í¥ÀèÅ٤Ǥ¹¡£
- ¤³¤ì¤é¤Î¥ª¥Ú¥ì¡¼¥¿¤Ç°ìÊý¤Ë¤è¤ê¶¯¤¤Í¥ÀèÅÙ¤ò¤Ä¤±¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢
- ³ç¸Ì¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>ÊÑ¿ô¤ä¥ª¥Ú¥ì¡¼¥¿¤È¤·¤Æǧ¼±¤µ¤ì¤Ê¤¤¤â¤Î¤Ï¤¹¤Ù¤Æʸ»úÎó¤È¤·¤Æ
- °·¤ï¤ì¤Þ¤¹¡£Ê¸»úÎó¤Ï°úÍÑÉä¤Ç°Ï¤à¤³¤È¤â¤Ç¤­¤Þ¤¹: <code>'string'</code>
- ¤Î¤è¤¦¤Ë¡£°úÍÑÉä¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎó¤Ë¤Ï¶õÇò (¥¹¥Ú¡¼¥¹¤È¥¿¥Ö)
- ¤ò´Þ¤á¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤½¤ì¤é¤ÏÊÑ¿ô¤Ê¤É¤Î¶ç¤òʬΥ¤¹¤ë¤¿¤á¤Ë
- »È¤ï¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¹¡£Ê£¿ô¤Îʸ»úÎó¤¬Â³¤¤¤Æ¤¤¤ë¤È¤­¤Ï¡¢
- ¶õÇò¤ò´Ö¤ËÆþ¤ì¤Æ°ì¤Ä¤Ë¤¯¤Ã¤Ä¤±¤é¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢</p>
-
- <div class="example"><p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code> ¤Ï <code><var>string1</var>&nbsp;<var>string2</var></code> ¤Ë¤Ê¤ê¤Þ¤¹¡£<br />
- <br />
- ¤Þ¤¿¡¢<br />
- <br />
- <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var>'</code> ¤Ï <code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>
- ¤Ë¤Ê¤ê¤Þ¤¹¡£</p></div>
-
- <div class="note"><h3>¿¿µ¶ÃÍɽ¸½¤ÎºÇŬ²½</h3>
- <p>¼°¤¬¤â¤Ã¤ÈÊ£»¨¤Ë¤Ê¤ê¡¢½èÍý¤Î®ÅÙÄã²¼¤¬¸²Ãø¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ï¡¢
- ɾ²Á¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆºÇŬ²½¤·¤Æ¤ß¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£</p>
- <ul>
- <li>ɾ²Á¤Ïº¸¤«¤é±¦¤Ë¸þ¤«¤Ã¤Æ¹Ô¤ï¤ì¤Þ¤¹¡£</li>
- <li>ÆóÃÍ¿¿µ¶ÃÍ¥ª¥Ú¥ì¡¼¥¿ (<code>&amp;&amp;</code> ¤È <code>||</code>)
- ¤Ï¡¢½ÐÍè¤ë¸Â¤êûÍíɾ²Á¤µ¤ì¤Þ¤¹¡£¤Ä¤Þ¤ê·ë²Ì¤È¤·¤Æ¾åµ­¤Î¥ë¡¼¥ë¤Ï¡¢
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤¬º¸¤Îɾ²Á¼°¤òɾ²Á¤·¤Þ¤¹¡£
- º¸Â¦¤Ç·ë²Ì¤ò½½Ê¬·èÄê¤Ç¤­¤ë¾ì¹ç¤Ï¡¢É¾²Á¤Ï¤½¤³¤ÇÄä»ß¤·¤Þ¤¹¡£
- ¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï±¦Â¦¤òɾ²Á¤·¤Æ¡¢º¸¤È±¦¤ÎξÊý¤«¤é·ë²Ì¤ò·×»»¤·¤Þ¤¹¡£</li>
- <li>ûÍíɾ²Á¤Ïɾ²Á¤ÎÂоݤËÀµµ¬É½¸½¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¡¢¥ª¥Õ¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¸åÊý»²¾È¤¹¤ëÊÑ¿ô (<code>$1</code> .. <code>$9</code>)
- ¤òËä¤á¤ë¤¿¤á¤Ë¡¢¼ÂºÝ¤Ëɾ²Á¤¹¤ëɬÍפ¬¤¢¤ë¤«¤é¤Ç¤¹¡£</li>
- </ul>
- <p>ÆÃÄê¤Î¼°¤¬¤É¤Î¤è¤¦¤Ë°·¤ï¤ì¤ë¤«¤òÃΤꤿ¤¤¾ì¹ç¤Ï¡¢
- <code>-DDEBUG_INCLUDE</code> ¥³¥ó¥Ñ¥¤¥é¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤Æ
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤ò¥ê¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£
- ¤³¤ì¤Ë¤è¤ê¡¢Á´¤Æ¤Î¥Ñ¡¼¥¹¤µ¤ì¤¿¼°¤ËÂФ·¤Æ¡¢»ú¶ç²òÀϾðÊó¡¢
- ¥Ñ¡¼¥¹¥Ä¥ê¡¼¤È¡¢
- ¤½¤ì¤¬¤É¤Î¤è¤¦¤Ë¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤¿½ÐÎϤޤÇɾ²Á¤µ¤ì¤¿¤«¤ò
- ÁÞÆþ¤·¤Þ¤¹¡£</p>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>include Í×ÁǤò½ªÎ»¤µ¤»¤ëʸ»úÎó</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>SSIEndTag "--&gt;"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.30 °Ê¹ß¤ÇÍøÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤¬Ãµ¤¹¡¢
- include Í×ÁǤνªÎ»¤ò¼¨¤¹Ê¸»úÎó¤òÊѹ¹¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- SSIEndTag "%&gt;"
- </code></p></div>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>SSI ¤Î¥¨¥é¡¼¤¬¤¢¤Ã¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
-directive]"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥Ð¡¼¥¸¥ç¥ó 2.0.30 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">SSIErrorMsg</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- ¤¬¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¤È¤­¤Ëɽ¼¨¤¹¤ë¥á¥Ã¥»¡¼¥¸¤òÊѹ¹¤·¤Þ¤¹¡£¥×¥í¥À¥¯¥·¥ç¥ó¥µ¡¼¥Ð¤Ç¤Ï
- ¥á¥Ã¥»¡¼¥¸¤¬¥æ¡¼¥¶¤Ëɽ¼¨¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë
- ¥Ç¥Õ¥©¥ë¥È¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò <code>"&lt;!-- Error --&gt;"</code>
- ¤ËÊѤ¨¤ë¤È¤¤¤¦¤è¤¦¤Ê¤³¤È¤ò¹Í¤¨¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>&lt;!--#config
- errmsg=<var>message</var> --&gt;</code> Í×ÁǤÈƱ¤¸¸ú²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- SSIErrorMsg "&lt;!-- Error --&gt;"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>include Í×ÁǤò³«»Ï¤¹¤ëʸ»úÎó</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>SSIStartTag "&lt;!--#"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥Ð¡¼¥¸¥ç¥ó 2.0.30 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¤¬Ãµ¤¹¡¢include
- Í×ÁǤγ«»Ï¤ò¼¨¤¹Ê¸»úÎó¤òÊѹ¹¤·¤Þ¤¹¡£</p>
-
- <p>Æó¤Ä¤Î¥µ¡¼¥Ð¤Ç (¤â¤·¤«¤¹¤ë¤ÈÊÌ¡¹¤ÎÃʳ¬¤Ç) ¥Õ¥¡¥¤¥ë¤Î½ÐÎϤò²òÀϤ·¤Æ¤¤¤Æ¡¢
- ¤½¤ì¤¾¤ì¤Ë°ã¤¦¥³¥Þ¥ó¥É¤ò½èÍý¤µ¤»¤¿¤¤¡¢
- ¤È¤¤¤¦¤è¤¦¤Ê¤È¤­¤Ë¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»È¤¤¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- SSIStartTag "&lt;%"<br />
- SSIEndTag "%&gt;"
- </code></p></div>
-
- <p>¾å¤ÎÎã¤Î¤è¤¦¤ËÂбþ¤¹¤ë
- <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code> ¤òÊ»¤»¤Æ»È¤¦¤È¡¢
- ²¼¤Ë¼¨¤¹Îã¤Î¤è¤¦¤Ë SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¨¤Þ¤¹:</p>
-
- <div class="example"><h3>°ã¤¦³«»Ï¤È½ªÎ»¤Î¥¿¥°¤ò»È¤Ã¤¿ SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3><p><code>
- &lt;%printenv %&gt;
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÆüÉÕ¤±¤ò¸½¤¹Ê¸»úÎó¤Î½ñ¼°¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.30 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
-<p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>DATE</code> ´Ä¶­ÊÑ¿ô¤ò echo ¤·¤ÆÆüÉÕ¤ò¸½¤¹Ê¸»úÎó¤¬
- ɽ¼¨¤µ¤ì¤ë¤È¤­¤Î½ñ¼°¤òÊѹ¹¤·¤Þ¤¹¡£<var>formatstring</var> ¤Ï
- C ɸ½à¥é¥¤¥Ö¥é¥ê¤Î <code>strftime(3)</code> ¤ÈƱ¤¸·Á¼°¤Ç¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>&lt;!--#config
- timefmt=<var>formatstring</var> --&gt;</code> Í×ÁǤÈƱ¤¸¸ú²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- SSITimeFormat "%R, %B %d, %Y"
- </code></p></div>
-
- <p>¾å¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï¡¢ÆüÉÕ¤Ï "22:26, June 14, 2002" ¤È¤¤¤¦
- ·Á¼°¤Çɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>̤ÄêµÁ¤ÎÊÑ¿ô¤¬ echo ¤µ¤ì¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤ëʸ»úÎó</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_include</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.34 °Ê¹ß¤ÇÍøÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÊÑ¿ô¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤Ë¤â´Ø¤ï¤é¤º
- "echo" ¤µ¤ì¤¿¤È¤­¤Ë <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
- ¤¬É½¼¨¤¹¤ëʸ»úÎó¤òÊѹ¹¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- SSIUndefinedEcho "&lt;!-- undef --&gt;"
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¼Â¹Ô¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
-²òÀϤ¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>XBitHack on|off|full</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>XBitHack off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_include</td></tr>
-</table>
- <p><code class="directive">XBitHack</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÄ̾ï¤Î HTML
- ¥É¥­¥å¥á¥ó¥È¤Î²òÀϤòÀ©¸æ¤·¤Þ¤¹¡£¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï MIME ¥¿¥¤¥×
- <code>text/html</code> ¤È´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Ë¤Î¤ß±Æ¶Á¤·¤Þ¤¹¡£
- <code class="directive">XBitHack</code> ¤Ï°Ê²¼¤ÎÃͤò¤È¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>off</code></dt>
- <dd>¼Â¹Ô²Äǽ¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆÆÃÊ̤ʰ·¤¤¤ò¤·¤Þ¤»¤ó¡£</dd>
-
- <dt><code>on</code></dt>
- <dd>¥æ¡¼¥¶¤Î¼Â¹Ô¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë <code>text/html</code>
- ¥Õ¥¡¥¤¥ë¤ÏÁ´¤Æ¥µ¡¼¥Ð¤Ç²òÀϤ¹¤ë html ¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>full</code></dt>
- <dd><code>on</code> ¤ÈƱÍͤǤ¹¤¬¡¢¥°¥ë¡¼¥×¼Â¹Ô¥Ó¥Ã¥È¤â¥Æ¥¹¥È¤·¤Þ¤¹¡£
- ¤â¤·¤½¤ì¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢ÊÖ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î <code>Last-modified</code> ¤Î
- ÆüÉÕ¤ò¥Õ¥¡¥¤¥ë¤ÎºÇ½ª½¤Àµ»þ¹ï¤Ë¤·¤Þ¤¹¡£¤½¤ì¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¡¢
- last-modified ¤ÎÆüÉÕ¤ÏÁ÷¤é¤ì¤Þ¤»¤ó¡£¤³¤Î¥Ó¥Ã¥È¤òÀßÄꤹ¤ë¤È¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤ä¥×¥í¥­¥·¤¬¥ê¥¯¥¨¥¹¥È¤ò¥­¥ã¥Ã¥·¥å¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
-
- <div class="note"><strong>Ãí°Õ</strong> ¾¤Î CGI ¤ò <code>#include</code>
- ¤¹¤ë¤«¤â¤·¤ì¤Ê¤¤¤â¤Î¤ä¡¢³Æ¥¢¥¯¥»¥¹¤ËÂФ·¤Æ°ã¤¦½ÐÎϤòÀ¸À®¤¹¤ë
- (¤â¤·¤¯¤Ï¸å¤Î¥ê¥¯¥¨¥¹¥È¤ÇÊѤï¤ë¤«¤â¤·¤ì¤Ê¤¤¤â¤Î)
- ¤¹¤Ù¤Æ¤Î SSI ¥¹¥¯¥ê¥×¥È¤ËÂФ·¤Æ¥°¥ë¡¼¥×¼Â¹Ô¥Ó¥Ã¥È¤¬
- ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò³Îǧ¤Ç¤­¤Ê¤¤¾ì¹ç¤Ï¡¢full ¤Ï»È¤ï¤Ê¤¤Êý¤¬Îɤ¤
- ¤Ç¤·¤ç¤¦¡£</div>
- </dd>
- </dl>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_include.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_include.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_include.xml b/docs/manual/mod/mod_include.xml
deleted file mode 100644
index 2c7ab608a3..0000000000
--- a/docs/manual/mod/mod_include.xml
+++ /dev/null
@@ -1,791 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.31 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_include.xml.meta">
-
-<name>mod_include</name>
-<description>Server-parsed html documents (Server Side Includes)</description>
-<status>Base</status>
-<sourcefile>mod_include.c</sourcefile>
-<identifier>include_module</identifier>
-<compatibility>Implemented as an output filter since Apache
-2.0</compatibility>
-
-<summary>
- <p>This module provides a filter which will process files
- before they are sent to the client. The processing is
- controlled by specially formatted SGML comments, referred to as
- <dfn>elements</dfn>. These elements allow conditional text, the
- inclusion of other files or programs, as well as the setting and
- printing of environment variables.</p>
-</summary>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-<seealso><a href="../filter.html">Filters</a></seealso>
-<seealso><a href="../howto/ssi.html">SSI Tutorial</a></seealso>
-
-<section id="enabling">
- <title>Enabling Server-Side Includes</title>
-
- <p>Server Side Includes are implemented by the
- <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
- documents containing server-side include directives are given
- the extension .shtml, the following directives will make Apache
- parse them and assign the resulting document the mime type of
- <code>text/html</code>:</p>
-
- <example>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
- </example>
-
- <p>The following directive must be given for the directories
- containing the shtml files (typically in a
- <directive module="core" type="section">Directory</directive> section,
- but this directive is also valid in <code>.htaccess</code> files if
- <directive module="core">AllowOverride</directive> <code>Options</code>
- is set):</p>
-
- <example>
- Options +Includes
- </example>
-
- <p>For backwards compatibility, the <code>server-parsed</code>
- <a href="../handler.html">handler</a> also activates the
- INCLUDES filter. As well, Apache will activate the INCLUDES
- filter for any document with mime type
- <code>text/x-server-parsed-html</code> or
- <code>text/x-server-parsed-html3</code> (and the resulting
- output will have the mime type <code>text/html</code>).</p>
-
- <p>For more information, see our <a
- href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
-</section> <!-- /enabling -->
-
-<section id="pathinfo">
- <title>PATH_INFO with Server Side Includes</title>
-
- <p>Files processed for server-side includes no longer accept
- requests with <code>PATH_INFO</code> (trailing pathname information)
- by default. You can use the <directive
- module="core">AcceptPathInfo</directive> directive to
- configure the server to accept requests with <code>PATH_INFO</code>.</p>
-</section> <!-- /pathinfo -->
-
-<section id="elements"><title>Basic Elements</title>
- <p>The document is parsed as an HTML document, with special
- commands embedded as SGML comments. A command has the syntax: </p>
-
- <example>
- &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
- <var>attribute</var>=<var>value</var> ... --&gt;
- </example>
-
- <p>The value will often be enclosed in double quotes, but single
- quotes (<code>'</code>) and backticks (<code>`</code>) are also
- possible. Many commands only allow a single attribute-value pair.
- Note that the comment terminator (<code>--&gt;</code>) should be
- preceded by whitespace to ensure that it isn't considered part of
- an SSI token. Note that the leading <code>&lt;!--#</code> is <em>one</em>
- token and may not contain any whitespaces.</p>
-
- <p>The allowed elements are listed in the following table:</p>
-
- <table border="1">
- <tr><th>Element</th><th>Description</th></tr>
- <tr><td><code><a href="#element.config">config</a></code></td>
- <td>configure output formats</td></tr>
- <tr><td><code><a href="#element.echo">echo</a></code></td>
- <td>print variables</td></tr>
- <tr><td><code><a href="#element.exec">exec</a></code></td>
- <td>execute external programs</td></tr>
- <tr><td><code><a href="#element.fsize">fsize</a></code></td>
- <td>print size of a file</td></tr>
- <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
- <td>print last modification time of a file</td></tr>
- <tr><td><code><a href="#element.include">include</a></code></td>
- <td>include a file</td></tr>
- <tr><td><code><a href="#element.printenv">printenv</a></code></td>
- <td>print all available variables</td></tr>
- <tr><td><code><a href="#element.set">set</a></code></td>
- <td>set a value of a variable</td></tr>
- </table>
-
- <p>SSI elements may be defined by modules other than
- <module>mod_include</module>. In fact, the <code><a
- href="#element.exec">exec</a></code> element is provided by
- <module>mod_cgi</module>, and will only be available if this
- module is loaded.</p>
-
- <section id="element.config"><title>The config Element</title>
- <p>This command controls various aspects of the parsing. The
- valid attributes are:</p>
-
- <dl>
- <dt><code>echomsg</code> (<em>Apache 2.1 and later</em>)</dt>
- <dd>The value is a message that is sent back to the
- client if the <code><a href="#element.echo">echo</a></code> element
- attempts to echo an undefined variable. This overrides any <directive
- module="mod_include">SSIUndefinedEcho</directive> directives.</dd>
-
- <dt><code>errmsg</code></dt>
- <dd>The value is a message that is sent back to the
- client if an error occurs while parsing the
- document. This overrides any <directive
- module="mod_include">SSIErrorMsg</directive> directives.</dd>
-
- <dt><code>sizefmt</code></dt>
- <dd>The value sets the format to be used which displaying
- the size of a file. Valid values are <code>bytes</code>
- for a count in bytes, or <code>abbrev</code> for a count
- in Kb or Mb as appropriate, for example a size of 1024 bytes
- will be printed as "1K".</dd>
-
- <dt><code>timefmt</code></dt>
- <dd>The value is a string to be used by the
- <code>strftime(3)</code> library routine when printing
- dates.</dd>
- </dl>
- </section> <!-- /config -->
-
- <section id="element.echo"><title>The echo Element</title>
- <p>This command prints one of the <a href="#includevars">include
- variables</a>, defined below. If the variable is unset, the result is
- determined by the <directive module="mod_include"
- >SSIUndefinedEcho</directive> directive. Any dates printed are
- subject to the currently configured <code>timefmt</code>.</p>
-
- <p>Attributes:</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>The value is the name of the variable to print.</dd>
-
- <dt><code>encoding</code></dt>
- <dd><p>Specifies how Apache should encode special characters
- contained in the variable before outputting them. If set
- to <code>none</code>, no encoding will be done. If set to
- <code>url</code>, then URL encoding (also known as %-encoding;
- this is appropriate for use within URLs in links, etc.) will be
- performed. At the start of an <code>echo</code> element,
- the default is set to <code>entity</code>, resulting in entity
- encoding (which is appropriate in the context of a block-level
- HTML element, <em>e.g.</em> a paragraph of text). This can be
- changed by adding an <code>encoding</code> attribute, which will
- remain in effect until the next <code>encoding</code> attribute
- is encountered or the element ends, whichever comes first.</p>
-
- <p>The <code>encoding</code> attribute must <em>precede</em> the
- corresponding <code>var</code> attribute to be effective, and
- only special characters as defined in the ISO-8859-1 character
- encoding will be encoded. This encoding process may not have the
- desired result if a different character encoding is in use.</p>
-
- <note type="warning">
- In order to avoid cross-site scripting issues, you should
- <em>always</em> encode user supplied data.
- </note>
- </dd>
- </dl>
- </section> <!-- /echo -->
-
- <section id="element.exec"><title>The exec Element</title>
- <p>The <code>exec</code> command executes a given shell command or
- CGI script. It requires <module>mod_cgi</module> to be present
- in the server. If <directive module="core">Options</directive>
- <code>IncludesNOEXEC</code> is set, this command is completely
- disabled. The valid attributes are:</p>
-
- <dl>
- <dt><code>cgi</code></dt>
- <dd><p>The value specifies a (%-encoded) URL-path to
- the CGI script. If the path does not begin with a slash (/),
- then it is taken to be relative to the current
- document. The document referenced by this path is
- invoked as a CGI script, even if the server would not
- normally recognize it as such. However, the directory
- containing the script must be enabled for CGI scripts
- (with <directive module="mod_alias">ScriptAlias</directive>
- or <directive module="core">Options</directive>
- <code>ExecCGI</code>).</p>
-
- <p>The CGI script is given the <code>PATH_INFO</code> and query
- string (<code>QUERY_STRING</code>) of the original request from the
- client; these <em>cannot</em> be specified in the URL path. The
- include variables will be available to the script in addition to
- the standard <a href="mod_cgi.html">CGI</a> environment.</p>
-
- <example><title>Example</title>
- &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
- </example>
-
- <p>If the script returns a <code>Location:</code> header instead of
- output, then this will be translated into an HTML anchor.</p>
-
- <p>The <code><a href="#includevirtual">include virtual</a></code>
- element should be used in preference to <code>exec cgi</code>. In
- particular, if you need to pass additional arguments to a CGI program,
- using the query string, this cannot be done with <code>exec
- cgi</code>, but can be done with <code>include virtual</code>, as
- shown here:</p>
-
- <example>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </example>
- </dd>
-
- <dt><code>cmd</code></dt>
- <dd><p>The server will execute the given string using
- <code>/bin/sh</code>. The <a href="#includevars"
- >include variables</a> are available to the command, in addition
- to the usual set of CGI variables.</p>
-
- <p>The use of <code><a href="#includevirtual"
- >#include virtual</a></code> is almost always prefered to using
- either <code>#exec cgi</code> or <code>#exec cmd</code>. The former
- (<code>#include virtual</code>) uses the standard Apache sub-request
- mechanism to include files or scripts. It is much better tested and
- maintained.</p>
-
- <p>In addition, on some platforms, like Win32, and on unix when
- using <a href="../suexec.html">suexec</a>, you cannot pass arguments
- to a command in an <code>exec</code> directive, or otherwise include
- spaces in the command. Thus, while the following will work under a
- non-suexec configuration on unix, it will not produce the desired
- result under Win32, or when running suexec:</p>
-
- <example>
- &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
- </example>
- </dd>
- </dl>
- </section> <!-- /exec -->
-
- <section id="element.fsize"><title>The fsize Element</title>
- <p>This command prints the size of the specified file, subject
- to the <code>sizefmt</code> format specification. Attributes:</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>The value is a path relative to the directory
- containing the current document being parsed.</dd>
-
- <dt><code>virtual</code></dt>
- <dd>The value is a (%-encoded) URL-path. If it does not begin with
- a slash (/) then it is taken to be relative to the current document.
- Note, that this does <em>not</em> print the size of any CGI output,
- but the size of the CGI script itself.</dd>
- </dl>
- </section> <!-- /fsize -->
-
- <section id="element.flastmod"><title>The flastmod Element</title>
- <p>This command prints the last modification date of the
- specified file, subject to the <code>timefmt</code> format
- specification. The attributes are the same as for the
- <code><a href="#element.fsize">fsize</a></code> command.</p>
- </section> <!-- /flastmod -->
-
- <section id="element.include"><title>The include Element</title>
- <p>This command inserts the text of another document or file
- into the parsed file. Any included file is subject to the
- usual access control. If the directory containing the
- parsed file has <a href="core.html#options">Options</a>
- <code>IncludesNOEXEC</code> set, then only documents with
- a text MIME type (<code>text/plain</code>, <code>text/html</code>
- etc.) will be included. Otherwise CGI scripts are invoked as normal
- using the complete URL given in the command, including any query
- string.</p>
-
- <p>An attribute defines the location of the document; the
- inclusion is done for each attribute given to the include
- command. The valid attributes are:</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>The value is a path relative to the directory
- containing the current document being parsed. It cannot
- contain <code>../</code>, nor can it be an absolute path.
- Therefore, you cannot include files that are outside of the
- document root, or above the current document in the directory
- structure. The <code>virtual</code> attribute should always be
- used in preference to this one.</dd>
-
- <dt><code><a id="includevirtual" name="includevirtual"
- >virtual</a></code></dt>
- <dd><p>The value is a (%-encoded) URL-path. The URL cannot contain a
- scheme or hostname, only a path and an optional query string. If it
- does not begin with a slash (/) then it is taken to be relative to the
- current document.</p>
-
- <p>A URL is constructed from the attribute, and the output the
- server would return if the URL were accessed by the client is
- included in the parsed output. Thus included files can be nested.</p>
-
- <p>If the specified URL is a CGI program, the program will be
- executed and its output inserted in place of the directive in the
- parsed file. You may include a query string in a CGI url:</p>
-
- <example>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </example>
-
- <p><code>include virtual</code> should be used in preference
- to <code>exec cgi</code> to include the output of CGI programs
- into an HTML document.</p>
- </dd>
- </dl>
- </section> <!-- /include -->
-
- <section id="element.printenv"><title>The printenv Element</title>
- <p>This prints out a listing of all existing variables and
- their values. Special characters are entity encoded (see the <code><a
- href="#element.echo">echo</a></code> element for details)
- before being output. There are no attributes.</p>
-
- <example><title>Example</title>
- &lt;!--#printenv --&gt;
- </example>
- </section> <!-- /printenv -->
-
- <section id="element.set"><title>The set Element</title>
- <p>This sets the value of a variable. Attributes:</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>The name of the variable to set.</dd>
-
- <dt><code>value</code></dt>
- <dd>The value to give a variable.</dd>
- </dl>
-
- <example><title>Example</title>
- &lt;!--#set var="category" value="help" --&gt;
- </example>
- </section> <!-- /set -->
-</section> <!-- /basic elements -->
-
-<section id="includevars">
- <title>Include Variables</title>
-
- <p>In addition to the variables in the standard CGI environment,
- these are available for the <code>echo</code> command, for
- <code>if</code> and <code>elif</code>, and to any program
- invoked by the document.</p>
-
- <dl>
- <dt><code>DATE_GMT</code></dt>
- <dd>The current date in Greenwich Mean Time.</dd>
-
- <dt><code>DATE_LOCAL</code></dt>
- <dd>The current date in the local time zone.</dd>
-
- <dt><code>DOCUMENT_NAME</code></dt>
- <dd>The filename (excluding directories) of the document
- requested by the user.</dd>
-
- <dt><code>DOCUMENT_URI</code></dt>
- <dd>The (%-decoded) URL path of the document requested by the
- user. Note that in the case of nested include files, this is
- <em>not</em> the URL for the current document.</dd>
-
- <dt><code>LAST_MODIFIED</code></dt>
- <dd>The last modification date of the document requested by
- the user.</dd>
-
- <dt><code>QUERY_STRING_UNESCAPED</code></dt>
- <dd>If a query string is present, this variable contains the
- (%-decoded) query string, which is <em>escaped</em> for shell
- usage (special characters like <code>&amp;</code> etc. are
- preceded by backslashes).</dd>
- </dl>
-</section>
-
-<section id="substitution"><title>Variable Substitution</title>
-
- <p>Variable substitution is done within quoted strings in most
- cases where they may reasonably occur as an argument to an SSI
- directive. This includes the <code>config</code>,
- <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
- <code>include</code>, <code>echo</code>, and <code>set</code>
- directives, as well as the arguments to conditional operators.
- You can insert a literal dollar sign into the string using backslash
- quoting:</p>
-
- <example>
- &lt;!--#if expr="$a = \$test" --&gt;
- </example>
-
- <p>If a variable reference needs to be substituted in the
- middle of a character sequence that might otherwise be
- considered a valid identifier in its own right, it can be
- disambiguated by enclosing the reference in braces,
- <em>a la</em> shell substitution:</p>
-
- <example>
- &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
- </example>
-
- <p>This will result in the <code>Zed</code> variable being set
- to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
- "<code>X</code>" and <code>REQUEST_METHOD</code> is
- "<code>Y</code>".</p>
-
- <p>The below example will print "in foo" if the
- <code>DOCUMENT_URI</code> is <code>/foo/file.html</code>, "in bar"
- if it is <code>/bar/file.html</code> and "in neither" otherwise:</p>
-
- <example>
- &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
- <indent>
- in foo<br />
- </indent>
- &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
- <indent>
- in bar<br />
- </indent>
- &lt;!--#else --&gt;<br />
- <indent>
- in neither<br />
- </indent>
- &lt;!--#endif --&gt;
- </example>
-</section>
-
-<section id="flowctrl">
- <title>Flow Control Elements</title>
-
- <p>The basic flow control elements are:</p>
-
- <example>
- &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
- </example>
-
- <p>The <code>if</code> element works like an if statement in a
- programming language. The test condition is evaluated and if
- the result is true, then the text until the next <code>elif</code>,
- <code>else</code> or <code>endif</code> element is included in the
- output stream.</p>
-
- <p>The <code>elif</code> or <code>else</code> statements are be used
- to put text into the output stream if the original
- <var>test_condition</var> was false. These elements are optional.</p>
-
- <p>The <code>endif</code> element ends the <code>if</code> element
- and is required.</p>
-
- <p><var>test_condition</var> is one of the following:</p>
-
- <dl>
- <dt><code><var>string</var></code></dt>
- <dd>true if <var>string</var> is not empty</dd>
-
- <dt><code><var>string1</var> = <var>string2</var><br />
- <var>string1</var> == <var>string2</var><br />
- <var>string1</var> != <var>string2</var></code></dt>
-
- <dd><p>Compare <var>string1</var> with <var>string2</var>. If
- <var>string2</var> has the form <code>/<var>string2</var>/</code>
- then it is treated as a regular expression. Regular expressions are
- implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
- have the same syntax as those in <a href="http://www.perl.com">perl
- 5</a>. Note that <code>==</code> is just an alias for <code>=</code>
- and behaves exactly the same way.</p>
-
- <p>If you are matching positive (<code>=</code> or <code>==</code>), you
- can capture grouped parts of the regular expression. The captured parts
- are stored in the special variables <code>$1</code> ..
- <code>$9</code>.</p>
-
- <example><title>Example</title>
- &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
- <indent>
- &lt;!--#set var="session" value="$1" --&gt;<br />
- </indent>
- &lt;!--#endif --&gt;
- </example>
- </dd>
-
- <dt><code><var>string1</var> &lt; <var>string2</var><br />
- <var>string1</var> &lt;= <var>string2</var><br />
- <var>string1</var> &gt; <var>string2</var><br />
- <var>string1</var> &gt;= <var>string2</var></code></dt>
-
- <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
- strings are compared <em>literally</em> (using
- <code>strcmp(3)</code>). Therefore the string "100" is less than
- "20".</dd>
-
- <dt><code>( <var>test_condition</var> )</code></dt>
- <dd>true if <var>test_condition</var> is true</dd>
-
- <dt><code>! <var>test_condition</var></code></dt>
- <dd>true if <var>test_condition</var> is false</dd>
-
- <dt><code><var>test_condition1</var> &amp;&amp;
- <var>test_condition2</var></code></dt>
- <dd>true if both <var>test_condition1</var> and
- <var>test_condition2</var> are true</dd>
-
- <dt><code><var>test_condition1</var> ||
- <var>test_condition2</var></code></dt>
- <dd>true if either <var>test_condition1</var> or
- <var>test_condition2</var> is true</dd>
- </dl>
-
- <p>"<code>=</code>" and "<code>!=</code>" bind more tightly than
- "<code>&amp;&amp;</code>" and "<code>||</code>". "<code>!</code>" binds
- most tightly. Thus, the following are equivalent:</p>
-
- <example>
- &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
- &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
- </example>
-
- <p>The boolean operators <code>&amp;&amp;</code> and <code>||</code>
- share the same priority. So if you want to bind such an operator more
- tightly, you should use parentheses.</p>
-
- <p>Anything that's not recognized as a variable or an operator
- is treated as a string. Strings can also be quoted:
- <code>'string'</code>. Unquoted strings can't contain whitespace
- (blanks and tabs) because it is used to separate tokens such as
- variables. If multiple strings are found in a row, they are
- concatenated using blanks. So,</p>
-
- <example>
- <p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
- >string2</var></code> results in <code><var>string1</var>&nbsp;<var
- >string2</var></code><br />
- <br />
- and<br />
- <br />
- <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
- >string2</var>'</code> results in <code><var
- >string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>.</p>
- </example>
-
- <note><title>Optimization of Boolean Expressions</title>
- <p>If the expressions become more complex and slow down processing
- significantly, you can try to optimize them according to the
- evaluation rules:</p>
- <ul>
- <li>Expressions are evaluated from left to right</li>
- <li>Binary boolean operators (<code>&amp;&amp;</code> and <code>||</code>)
- are short circuited wherever possible. In conclusion with the rule
- above that means, <module>mod_include</module> evaluates at first
- the left expression. If the left result is sufficient to determine
- the end result, processing stops here. Otherwise it evaluates the
- right side and computes the end result from both left and right
- results.</li>
- <li>Short circuit evaluation is turned off as long as there are regular
- expressions to deal with. These must be evaluated to fill in the
- backreference variables (<code>$1</code> .. <code>$9</code>).</li>
- </ul>
- <p>If you want to look how a particular expression is handled, you can
- recompile <module>mod_include</module> using the
- <code>-DDEBUG_INCLUDE</code> compiler option. This inserts for every
- parsed expression tokenizer information, the parse tree and how it is
- evaluated into the output sent to the client.</p>
- </note>
-</section>
-
-<directivesynopsis>
-<name>SSIEndTag</name>
-<description>String that ends an include element</description>
-<syntax>SSIEndTag <var>tag</var></syntax>
-<default>SSIEndTag &quot;--&gt;&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
- <p>This directive changes the string that <module>mod_include</module>
- looks for to mark the end of an include element.</p>
-
- <example><title>Example</title>
- SSIEndTag "%&gt;"
- </example>
-
-</usage>
-<seealso><directive module="mod_include">SSIStartTag</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIUndefinedEcho</name>
-<description>String displayed when an unset variable is echoed</description>
-<syntax>SSIUndefinedEcho <var>string</var></syntax>
-<default>SSIUndefinedEcho &quot;(none)&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-<compatibility>Available in version 2.0.34 and later.</compatibility>
-
-<usage>
- <p>This directive changes the string that <module>mod_include</module>
- displays when a variable is not set and &quot;echoed&quot;.</p>
-
- <example><title>Example</title>
- SSIUndefinedEcho "&lt;!-- undef --&gt;"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIErrorMsg</name>
-<description>Error message displayed when there is an SSI
-error</description>
-<syntax>SSIErrorMsg <var>message</var></syntax>
-<default>SSIErrorMsg &quot;[an error occurred while processing this
-directive]&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
- <p>The <directive>SSIErrorMsg</directive> directive changes the error
- message displayed when <module>mod_include</module> encounters an
- error. For production servers you may consider changing the default
- error message to <code>&quot;&lt;!-- Error --&gt;&quot;</code> so that
- the message is not presented to the user.</p>
-
- <p>This directive has the same effect as the <code>&lt;!--#config
- errmsg=<var>message</var> --&gt;</code> element.</p>
-
- <example><title>Example</title>
- SSIErrorMsg "&lt;!-- Error --&gt;"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIStartTag</name>
-<description>String that starts an include element</description>
-<syntax>SSIStartTag <var>tag</var></syntax>
-<default>SSIStartTag &quot;&lt;!--#&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
- <p>This directive changes the string that <module>mod_include</module>
- looks for to mark an include element to process.</p>
-
- <p>You may want to use this option if you have 2 servers parsing the
- output of a file each processing different commands (possibly at
- different times).</p>
-
- <example><title>Example</title>
- SSIStartTag "&lt;%"<br />
- SSIEndTag "%&gt;"
- </example>
-
- <p>The example given above, which also specifies a matching
- <directive module="mod_include">SSIEndTag</directive>, will
- allow you to use SSI directives as shown in the example
- below:</p>
-
- <example><title>SSI directives with alternate start and end tags</title>
- &lt;%printenv %&gt;
- </example>
-</usage>
-<seealso><directive module="mod_include">SSIEndTag</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSITimeFormat</name>
-<description>Configures the format in which date strings are
-displayed</description>
-<syntax>SSITimeFormat <var>formatstring</var></syntax>
-<default>SSITimeFormat &quot;%A, %d-%b-%Y %H:%M:%S %Z&quot;</default>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
-<p>This directive changes the format in which date strings are displayed
- when echoing <code>DATE</code> environment variables. The
- <var>formatstring</var> is as in <code>strftime(3)</code> from the
- C standard library.</p>
-
- <p>This directive has the same effect as the <code>&lt;!--#config
- timefmt=<var>formatstring</var> --&gt;</code> element.</p>
-
- <example><title>Example</title>
- SSITimeFormat "%R, %B %d, %Y"
- </example>
-
- <p>The above directive would cause times to be displayed in the
- format "22:26, June 14, 2002".</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>XBitHack</name>
-<description>Parse SSI directives in files with the execute bit
-set</description>
-<syntax>XBitHack on|off|full</syntax>
-<default>XBitHack off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Options</override>
-
-<usage>
- <p>The <directive>XBitHack</directive> directive controls the parsing
- of ordinary html documents. This directive only affects files associated
- with the MIME type <code>text/html</code>. <directive
- >XBitHack</directive> can take on the following values:</p>
-
- <dl>
- <dt><code>off</code></dt>
- <dd>No special treatment of executable files.</dd>
-
- <dt><code>on</code></dt>
- <dd>Any <code>text/html</code> file that has the user-execute bit
- set will be treated as a server-parsed html document.</dd>
-
- <dt><code>full</code></dt>
- <dd>As for <code>on</code> but also test the group-execute bit.
- If it is set, then set the <code>Last-modified</code> date of the
- returned file to be the last modified time of the file. If
- it is not set, then no last-modified date is sent. Setting
- this bit allows clients and proxies to cache the result of
- the request.
-
- <note><title>Note</title>
- <p>You would not want to use the full option, unless you assure the
- group-execute bit is unset for every SSI script which might <code
- >#include</code> a CGI or otherwise produces different output on
- each hit (or could potentially change on subsequent requests).</p>
- </note>
- </dd>
- </dl>
-
- </usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_include.xml.ja b/docs/manual/mod/mod_include.xml.ja
deleted file mode 100644
index 6fc3dc0f46..0000000000
--- a/docs/manual/mod/mod_include.xml.ja
+++ /dev/null
@@ -1,770 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.31 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_include.xml.meta">
-
-<name>mod_include</name>
-<description>$B%5!<%P$,%Q!<%9$9$k(B html $B%I%-%e%a%s%H(B (Server Side Includes)</description>
-<status>Base</status>
-<sourcefile>mod_include.c</sourcefile>
-<identifier>include_module</identifier>
-<compatibility>Apache 2.0 $B$+$i=PNO%U%#%k%?$H$7$F<BAu$5$l$^$7$?!#(B</compatibility>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O%U%!%$%k$,%/%i%$%"%s%H$KAw$i$l$kA0$K=hM}$9$k%U%#%k%?$r(B
- $BDs6!$7$^$9!#=hM}$NFbMF$O(B<dfn>$BMWAG(B</dfn>$B$H8F$P$l$kFCJL$J7A<0$N(B SGML $B%3%a%s%H$K$h$j(B
- $B@)8f$5$l$^$9!#$3$l$i$NMWAG$O>r7oJ,4t$d!"B>$N%U%!%$%k$d(B
- $B%W%m%0%i%`$N=PNO$N<h$j9~$_!"4D6-JQ?t$N@_Dj$dI=<($r9T$J$&$3$H$,(B
- $B$G$-$^$9!#(B</p>
-</summary>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-<seealso><a href="../filter.html">$B%U%#%k%?(B</a></seealso>
-<seealso><a href="../howto/ssi.html">SSI $B%A%e!<%H%j%"%k(B</a></seealso>
-
-<section id="enabling">
- <title>Server-Side Includes $B$rM-8z$K$9$k(B</title>
-
- <p>Server Side Includes $B$O(B <code>INCLUDES</code>
- <a href="../filter.html">$B%U%#%k%?(B</a> $B$K$h$j<BAu$5$l$F$$$^$9!#(B
- Server-side include $B$N%G%#%l%/%F%#%V$r4^$`%I%-%e%a%s%H$N3HD%;R$,(B
- .shtml $B$N>l9g!"0J2<$N%G%#%l%/%F%#%V$G$O(B Apache $B$,$=$l$i$r(B
- $B%Q!<%9$7$F!"$=$N7k2L$G$-$k%I%-%e%a%s%H$K(B <code>text/html</code> $B$N(B
- MIME $B%?%$%W$r3d$jEv$F$^$9(B:</p>
-
- <example>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
- </example>
-
- <p>$B0J2<$N%G%#%l%/%F%#%V$O(B shtml $B%U%!%$%k$N$"$k%G%#%l%/%H%j$G;XDj$5$l$F$$$k(B
- $BI,MW$,$"$j$^$9(B ($BDL>o$O(B <directive module="core"
- type="section">Directory</directive> $B%;%/%7%g%s$G;XDj$7$^$9$,!"(B
- <directive module="core">AllowOverride</directive> <code>Options</code>
- $B$,@_Dj$5$l$F$$$k$H!"(B<code>.htaccess</code> $B%U%!%$%k$K=q$/$3$H$b$G$-$^$9(B):</p>
-
- <example>
- Options +Includes
- </example>
-
- <p>$B8_49@-$rJ]$D$?$a$K!"(B<code>server-parsed</code>
- <a href="../handler.html">$B%O%s%I%i(B</a> $B$b(B INCLUDES $B%U%#%k%?$r(B
- $BM-8z$K$7$^$9!#(BMIME $B%?%$%W(B <code>text/x-server-parsed-html</code> $B$d(B
- <code>text/x-server-parsed-html3</code> $B$N%I%-%e%a%s%H$KBP$7$F$b(B
- Apache $B$O(B INCLUDES $B%U%#%k%?$rM-8z$K$7$^$9(B ($B=PNO$5$l$k$b$N$O(B
- MIME $B%?%$%W(B <code>text/html</code> $B$K$J$j$^$9(B)$B!#(B</p>
-
- <p>$B>\$7$$>pJs$O(B <a
- href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
-</section> <!-- /enabling -->
-
-<section id="pathinfo">
- <title>$B%5!<%P%5%$%I%$%s%/%k!<%I(B (SSI) $B$G$N(B PATH_INFO</title>
-
- <p>SSI $B$G=hM}$5$l$k%U%!%$%k$O%G%U%)%k%H$G$O(B <code>PATH_INFO</code>
- ($B8eB3$N%Q%9L>>pJs(B)
- $BIU$-$N%j%/%(%9%H$r<u$1F~$l$J$/$J$j$^$7$?!#(B<directive
- module="core">AcceptPathInfo</directive> $B%G%#%l%/%F%#%V$G(B
- <code>PATH_INFO</code> $BIU$-$N%j%/%(%9%H$r<u$1F~$l$k$h$&$K%5!<%P$r(B
- $B@_Dj$G$-$^$9!#(B</p>
-</section> <!-- /pathinfo -->
-
-<section id="elements"><title>$B4pK\MWAG(B</title>
- <p>$B%I%-%e%a%s%H$O!"(BSGML $B$N%3%a%s%H$H$7$FFCJL$J%3%^%s%I$,Kd$a9~$^$l$?(B
- HTML $B%I%-%e%a%s%H$H$7$F%Q!<%9$5$l$^$9!#%3%^%s%I$N9=J8$O<!$N$h$&$K(B
- $B$J$C$F$$$^$9(B:</p>
-
- <example>
- &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
- <var>attribute</var>=<var>value</var> ... --&gt;
- </example>
-
- <p>$BCM(B ($BLuCm(B: value) $B$OFs=E0zMQId$G0O$`$N$,0lHLE*$G$9$,!"(B
- $B%7%s%0%k%/%*!<%H(B (') $B$H%P%C%/%/%*!<%H(B (`) $B$b;HMQ$G$-$^$9!#(B
- $BB?$/$N%3%^%s%I$OB0@-(B-$BCM(B ($BLuCm(B: attribute-value) $B$NAH$r0l$D$@$1;XDj$G$-$^$9!#(B
- $B%3%a%s%H$N=*$o$j(B (<code>--&gt;</code>)
- $B$NA0$K$O!"(BSSI $B$N6g$N0lIt$@$H2r<a$5$l$J$$$h$&$K$9$k$?$a$K6uGr$r(B
- $BF~$l$F$/$@$5$$!#:G=i$N(B <code>&lt;!--#</code> $B$O$^$H$a$F(B<em>$B0l$D(B</em>$B$N(B
- $B6g$G!"6uGr$r$U$/$s$G$O$$$1$J$$$3$HCm0U$7$F$/$@$5$$!#(B</p>
-
- <p>$BMWAG(B ($BLuCm(B: element) $B$r0J2<$NI=$K<($7$^$9!#(B</p>
-
- <table border="1">
- <tr><th>$BMWAG(B</th><th>$B@bL@(B</th></tr>
- <tr><td><code><a href="#element.config">config</a></code></td>
- <td>configure output formats</td></tr>
- <tr><td><code><a href="#element.echo">echo</a></code></td>
- <td>print variables</td></tr>
- <tr><td><code><a href="#element.exec">exec</a></code></td>
- <td>execute external programs</td></tr>
- <tr><td><code><a href="#element.fsize">fsize</a></code></td>
- <td>print size of a file</td></tr>
- <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
- <td>print last modification time of a file</td></tr>
- <tr><td><code><a href="#element.include">include</a></code></td>
- <td>include a file</td></tr>
- <tr><td><code><a href="#element.printenv">printenv</a></code></td>
- <td>print all available variables</td></tr>
- <tr><td><code><a href="#element.set">set</a></code></td>
- <td>set a value of a variable</td></tr>
- </table>
-
- <p>SSI $BMWAG$O(B <module>mod_include</module> $B0J30$N%b%8%e!<%k$G(B
- $BDj5A$5$l$k$3$H$b$"$j$^$9!#<B:]!"(B
- <code><a href="#element.exec">exec</a></code> $BMWAG$O(B
- <module>mod_cgi</module> $B$GDs6!$5$l$F$$$F!"$3$N%b%8%e!<%k$,(B
- $B%m!<%I$5$l$k>l9g$K$N$_MxMQ2DG=$H$J$j$^$9!#(B</p>
-
- <section id="element.config"><title>config $BMWAG(B</title>
- <p>$B<!$N%3%^%s%I$O2r@O$NMM!9$JB&LL$r@)8f$7$^$9!#B0@-$O<!$NDL$j$G$9!#(B</p>
-
- <dl>
- <dt><code>echomsg</code> (<em>Apache 2.1 $B0J9_(B</em>)</dt>
- <dd>$B;XDj$5$l$kCM$O!"(B<code><a href="#element.echo">echo</a></code>
- $BMWAG$,L$Dj5A$NJQ?t$r%(%3!<$7$h$&$H$7$?:]$K!"(B
- $B%/%i%$%"%s%H$KAw$i$l$k%a%C%;!<%8$K$J$j$^$9!#(B
- <directive module="mod_include">SSIUndefinedEcho</directive>
- $B%G%#%l%/%F%#%V$r>e=q$-$7$^$9!#(B</dd>
-
- <dt><code>errmsg</code></dt>
- <dd>$B$3$NCM$,!"%I%-%e%a%s%H$N2r@OCf$K%(%i!<$,H/@8$7$?;~$K(B
- $B%/%i%$%"%s%H$KAw?.$5$l$k%a%C%;!<%8$K$J$j$^$9!#(B
- <directive module="mod_include">SSIErrorMsg</directive>
- $B%G%#%l%/%F%#%V$r>e=q$-$7$^$9!#(B</dd>
-
- <dt><code>sizefmt</code></dt>
- <dd>$B$3$NCM$O!"%U%!%$%k$N%5%$%:$rI=<($9$k:]$K;HMQ$9$k(B
- $B%U%)!<%^%C%H$r@_Dj$7$^$9!#CM$O(B $B%P%$%H%+%&%s%H$N(B
- <code>bytes</code>$B$+!"(BKb $B$d(B Mb $B$rM%@hE*$K;HMQ$9$k(B
- <code>abbrec</code> ($BNc$($P(B 1024 $B%P%$%H$O(B "1K" $B$HI=<($5$l$^$9(B)
- $B$G$9!#(B</dd>
-
- <dt><code>timefmt</code></dt>
- <dd>$B$3$NCM$O(B <code>strftime(3)</code> $B%i%$%V%i%j%k!<%A%s$,(B
- $BF|;~$r%W%j%s%H$9$k:]$KMQ$$$i$l$^$9!#(B</dd>
- </dl>
- </section> <!-- /config -->
-
- <section id="element.echo"><title>echo $BMWAG(B</title>
- <p>$B$3$N%3%^%s%I$O0J2<$GDj5A$5$l$F$$$k(B <a href="#includevars">include
- $BJQ?t(B</a> $B$rI=<($7$^$9!#JQ?t$,@_Dj$5$l$F$$$J$$>l9g$O(B <directive
- module="mod_include">SSIUndefinedEcho</directive> $B%G%#%l%/%F%#%V$G(B
- $B7hDj$5$l$k7k2L$H$J$j$^$9!#F|IU$O$=$N;~E@$G$N(B <code>timefmt</code> $B$K=>$C$F(B
- $BI=<($5$l$^$9!#B0@-$O<!$NDL$j$G$9!#(B</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>$BCM$OI=<($9$kJQ?t$NL>A0$G$9!#(B</dd>
-
- <dt><code>encoding</code></dt>
- <dd><p>$BJQ?t$r=PNO$9$kA0$K!"JQ?tCf$NFCJLJ8;z$r$I$N$h$&$K%(%s%3!<%I$9$k$+$r(B
- $B;XDj$7$^$9!#(B<code>none</code> $B$K@_Dj$5$l$F$$$k$H!"%(%s%3!<%I$O9T$J$o$l$^$;$s!#(B
- <code>url</code> $B$K@_Dj$5$l$F$$$k$H!"(BURL $B%(%s%3!<%I(B (%-$B%(%s%3!<%I$H$b(B
- $B8F$P$l$F$$$^$9!#$3$l$O%j%s%/Ey$N(B URL $B$N;HMQ$KE,@Z$G$9(B) $B$,(B
- $B9T$J$o$l$^$9!#(B<code>echo</code> $BMWAG$N3+;O;~$O!"%G%U%)%k%H$O(B
- <code>entity</code> $B$K@_Dj$5$l$F$$$^$9!#$3$l$O%(%s%F%#%F%#%(%s%3!<%I(B
- ($BCJMn$d%F%-%9%H$J$I$N%V%m%C%/%l%Y%k$N(B HTML $B%(%l%a%s%H$N%3%s%F%-%9%H$K(B
- $BE,$7$F$$$^$9(B) $B$r9T$J$$$^$9!#$3$l$O(B <code>encoding</code> $BB0@-(B
- $B$r2C$($k$3$H$GJQ99$G$-$^$9!#JQ99$O<!$N(B <code>encoding</code> $BB0@-$+!"(B
- $BMWAG$N=*N;$^$G8zNO$r;}$A$^$9!#(B</p>
-
- <p><code>encoding</code> $BB0@-$O%(%s%3!<%I$NJQ99$r$7$?$$(B <code>var</code>
- $B$N(B<em>$BA0$K(B</em> $B$"$kI,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$^$?!"(BISO-8859-1 $B%(%s%3!<%G%#%s%0$G(B
- $BDj5A$5$l$F$$$kFCJL$JJ8;z$@$1$,%(%s%3!<%I$5$l$^$9!#(B
- $BJL$NJ8;z$N%(%s%3!<%G%#%s%0$N>l9g$O!"$3$N%(%s%3!<%G%#%s%0$O(B
- $BK>$_$N7k2L$K$J$i$J$$$+$b$7$l$^$;$s!#(B</p>
-
- <note type="warning">
- $B%/%m%9%5%$%H%9%/%j%W%F%#%s%0$NLdBj$rHr$1$k$?$a$K!"(B
- <em>$B>o$K(B</em>$B%f!<%6$+$i$N%G!<%?$r%(%s%3!<%I$9$Y$-$G$9!#(B
- </note>
- </dd>
- </dl>
- </section> <!-- /echo -->
-
- <section id="element.exec"><title>exec $BMWAG(B</title>
- <p><code>exec</code> $B%3%^%s%I$O;XDj$5$l$?%7%'%k%3%^%s%I$d(B CGI $B%9%/%j%W%H$r(B
- $B<B9T$7$^$9!#(B<module>mod_cgi</module> $B$,%5!<%P$KAH$_9~$^$l$F$$$k$$$J$1$l$P(B
- $B$J$j$^$;$s!#(B<directive module="core">Option</directive>
- <code>IncludesNOEXEC</code> $B$O$3$N%3%^%s%I$rL58z$K$7$^$9!#(B
- $B;HMQ2DG=$JB0@-$O<!$NDL$j$G$9!#(B</p>
-
- <dl>
- <dt><code>cgi</code></dt>
- <dd><p>$BCM$O(B (%-$B%(%s%3!<%I$5$l$?(B) URL $B$r;XDj$7$^$9!#%Q%9$,(B
- $B%9%i%C%7%e(B (/) $B$G;O$^$i$J$$$H$-$O!"%I%-%e%a%s%H$+$i$N(B
- $BAjBP%Q%9$H$7$F07$o$l$^$9!#$3$N%Q%9$G;2>H$5$l$F$$$k%I%-%e%a%s%H$O(B
- $B%5!<%P$,(B CGI $B%9%/%j%W%H$H$7$F07$C$F$$$J$/$F$b(B CGI $B%9%/%j%W%H$H$7$F(B
- $B5/F0$5$l$^$9!#$?$@$7!"%9%/%j%W%H$N$"$k%G%#%l%/%H%j$G$O(B
- (<directive module="mod_alias">ScriptAlias</directive>
- $B$d(B <directive module="core">Option</directive> <code>ExecCGI</code>
- $B$K$h$C$F(B) CGI $B%9%/%j%W%H$N;HMQ$,5v2D$5$l$F$$$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>CGI $B%9%/%j%W%H$K$O!"%/%i%$%"%s%H$+$i$N85!9$N%j%/%(%9%H$N(B
- <code>PATH_INFO</code> $B$H%/%(%j!<J8;zNs(B (<code>QUERY_STRING</code>) $B$,EO$5$l$^$9!#(B
- $B$3$l$i$O(B URL $B%Q%9$H$7$FFCDj(B<em>$B$G$-$J$$(B</em>$B$b$N$G$9!#(B
- $B%9%/%j%W%H$OI8=`(B <a href="mod_cgi.html">CGI</a> $B4D6-$K2C$($F!"(Binclude $BJQ?t$r(B
- $B;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
- </example>
-
- <p>$B%9%/%j%W%H$,!"=PNO$NBe$o$j$K(B <code>Location:</code> $B%X%C%@$rJV$9$H!"(B
- HTML $B$N%"%s%+!<(B ($BLuCm!'%j%s%/(B) $B$KJQ49$5$l$^$9!#(B</p>
-
- <p><code>exec cgi</code> $B$h$j$b!"(B
- <code><a href="#includevirtual">include virtual</a></code>
- $B$NJ}$r;H$&$h$&$K$7$F$/$@$5$$!#FC$K!"(BCGI $B$X$NDI2C$N0z?t$r(B
- $B%/%(%j!<J8;zNs$r;H$C$FEO$9$3$H$O(B <code>exec cgi</code> $B$O(B
- $B$G$-$^$;$s$,!"(B<code>include virtual</code> $B$O0J2<$N$h$&$K$7$F(B
- $B2DG=$G$9!#(B</p>
-
- <example>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </example>
- </dd>
-
- <dt><code>cmd</code></dt>
- <dd><p>$B%5!<%P$O;XDj$5$l$?J8;zNs$r(B <code>/bin/sh</code> $B$r;H$C$F(B
- $B<B9T$7$^$9!#%3%^%s%I$ODL>o$N(B CGI $BJQ?t$K2C$($F(B <a
- href="#includevars">include $BJQ?t(B</a>$B$b;H$&$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$[$H$s$I$N>l9g!"(B<code><a href="#includevirtual">#include
- virtual</a></code> $B$r;H$&J}$,(B <code>#exec cgi</code> $B$d(B <code>#exec
- cmd</code> $B$r;H$&$h$j$bNI$$$G$9!#A0<T(B (<code>#include virtual</code>)
- $B$OI8=`$N(B Apache $B$N%5%V%j%/%(%9%H5!9=$r;H$C$F%U%!%$%k$d%9%/%j%W%H$N(B
- $B=PNO$r<h$j9~$_$^$9!#(B
- $B$3$A$i$NJ}$,$h$/%F%9%H$5$l%a%s%F%J%s%9$5$l$?J}K!$G$9!#(B</p>
-
- <p>$B$5$i$K!"(BWin32 $B$N$h$&$J$$$/$D$+$N%W%i%C%H%U%)!<%`$d!"(B<a
- href="../suexec.html">suexec</a> $B$r;H$C$F$$$k(B unix $B$G$O!"(B
- <code>exec</code> $B%G%#%l%/%F%#%V$N%3%^%s%I$K(B
- $B0z?t$rEO$7$?$j!"%3%^%s%I$K6uGr$rF~$l$k$3$H$O$G$-$^$;$s!#(B
- $B$G$9$+$i!"0J2<$N$b$N$O(B unix $B$N(B suexec $B$G$J$$@_Dj$G$OF0:n$7$^$9$,!"(B
- Win32 $B$d(B suexec $B$r;H$C$F$$$k(B unix $B$G$O4|BT$7$?7k2L$K$O$J$j$^$;$s(B:</p>
-
- <example>
- &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
- </example>
- </dd>
- </dl>
- </section> <!-- /exec -->
-
- <section id="element.fsize"><title>fsize $BMWAG(B</title>
- <p>$B$3$N%3%^%s%I$O;XDj$5$l$?%U%!%$%k$NBg$-$5$r(B <code>sizefmt</code> $B$N(B
- $B=q<0;XDj$K4p$E$$$F=PNO$7$^$9!#B0@-$O<!$NDL$j$G$9!#(B</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>$BCM$O2r@O$5$l$F$$$k%I%-%e%a%s%H$NB8:_$9$k%G%#%l%/%H%j$+$i$N(B
- $BAjBP%Q%9$G$9!#(B</dd>
-
- <dt><code>virtual</code></dt>
- <dd> $BCM$O(B (% $B%(%s%3!<%I$5$l$?(B) URL-path $B$G$9!#%9%i%C%7%e(B (/) $B$G(B
- $B;O$^$i$J$$$H$-$O%I%-%e%a%s%H$+$i$NAjBP%Q%9$H$7$F07$o$l$^$9!#(B
- CGI $B$N=PNO$N%5%$%:$O%W%j%s%H(B<em>$B$5$l$^$;$s(B</em>$B!#(BCGI
- $B%9%/%j%W%H<+BN$N%5%$%:$,%W%j%s%H$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#(B</dd>
- </dl>
- </section> <!-- /fsize -->
-
- <section id="element.flastmod"><title>flastmod $BMWAG(B</title>
- <p>$B$3$N%3%^%s%I$O;XDj$5$l$?%U%!%$%k$N:G=*=$@5;~9o$r(B
- <code>timefmt</code> $B=q<0;XDj$K=>$C$FI=<($7$^$9!#(B
- $B;XDj2DG=$JB0@-$O(B <code>fsize</code> $B%3%^%s%I$HF1$8$G$9!#(B</p>
- </section> <!-- /flastmod -->
-
- <section id="element.include"><title>include $BMWAG(B</title>
- <p>$B$3$N%3%^%s%I$OJL$NJ8=q$d%U%!%$%k$N%F%-%9%H$r2r@O$7$F$$$k%U%!%$%k$K(B
- $BA^F~$7$^$9!#A^F~$5$l$k%U%!%$%k$O%"%/%;%9@)8f$N4IM}2<$K$"$j$^$9!#(B
- $B2r@O$7$F$$$k%U%!%$%k$NB8:_$9$k%G%#%l%/%H%j$K(B
- <a href="core.html#options">Option</a> <code>IncludesNOEXEC</code>
- $B$,@_Dj$5$l$F$$$k>l9g!"(Btext MIME $B%?%$%W(B (<code>text/plain</code>,
- <code>text/html</code> $BEy(B) $B$N%I%-%e%a%s%H$N$_%$%s%/%k!<%I$,9T$J$o$l$^$9!#(B
- $B$=$NB>$N>l9g$O!"%/%(%j!<J8;zNs$b4^$a!"%3%^%s%I$G;XDj$5$l$?(B
- $B40A4$J(B URL $B$r;H$C$FIaDL$K(B CGI $B%9%/%j%W%H$,8F$S=P$5$l$^$9!#(B</p>
-
- <p>$BB0@-$,J8=q$N0LCV$r;XDj$7$^$9!#(Binclude $B%3%^%s%I$KM?$($i$l$?$=$l$>$l$N(B
- $BB0@-$KBP$7$FA^F~:n6H$,9T$J$o$l$^$9!#M-8z$JB0@-$O<!$NDL$j$G$9!#(B</p>
-
- <dl>
- <dt><code>file</code></dt>
- <dd>$BCM$O2r@O$5$l$F$$$k%I%-%e%a%s%H$NB8:_$9$k%G%#%l%/%H%j$+$i$N(B
- $BAjBP%Q%9$G$9!#(B
- <code>../</code> $B$r4^$s$G$$$?$j!"@dBP%Q%9$r;XDj$7$?$j$O$G$-$^$;$s!#(B
- $B$G$9$+$i!"%I%-%e%a%s%H%k!<%H$N30$K$"$k%U%!%$%k$d!"%G%#%l%/%H%j9=B$$G(B
- $B>e0L$K$"$k%U%!%$%k$rA^F~$9$k$3$H$O$G$-$^$;$s!#(B
- $B>o$K$3$NB0@-$h$j$O!"(B<code>virtual</code> $BB0@-$r;H$&$h$&$K$7$F$/$@$5$$!#(B
- </dd>
-
- <dt><code><a id="includevirtual" name="includevirtual"
- >virtual</a></code></dt>
- <dd><p>$BCM$O2r@O$5$l$F$$$k%I%-%e%a%s%H$+$i$N(B (% $B%(%s%3!<%I$5$l$?(B) URL
- $B$G$9!#(BURL $B$K$O%9%-!<%`$d%[%9%HL>$r4^$a$k$3$H$O$G$-$^$;$s!#%Q%9$H!"(B
- $B$b$7$"$l$P%/%(%j!<J8;zNs$r;XDj$G$-$k$@$1$G$9!#%9%i%C%7%e(B (/) $B$+$i(B
- $B;O$^$i$J$$>l9g$O!"%I%-%e%a%s%H$+$i$NAjBP%Q%9$H$7$F07$o$l$^$9!#(B</p>
-
- <p>URL $B$OB0@-$+$i:n$i$l!"$=$N(B URL $B$r%/%i%$%"%s%H$,%"%/%;%9$7$?$H$-$K(B
- $B=PNO$5$l$kFbMF$,2r@O8e$N=PNO$K4^$a$i$l$^$9!#$G$9$+$i!"A^F~$5$l$k(B
- $B%U%!%$%k$OF~$l;R9=B$$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B;XDj$5$l$?(B URL $B$,(B CGI $B%W%m%0%i%`$G$"$C$?>l9g$O!"(B
- $B%W%m%0%i%`$,<B9T$5$l!"$=$N=PNO$,2r@O$7$F$$$k%U%!%$%kCf$N(B
- $B%G%#%l%/%F%#%V$,$"$C$?0LCV$KA^F~$5$l$^$9!#(BCGI $B$N(B url $B$K(B
- $B%/%(%j!<(B URL $B$rF~$l$k$3$H$b$G$-$^$9!#(B</p>
-
- <example>
- &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
- </example>
-
- <p>HTML $B%I%-%e%a%s%H$K(B CGI $B%W%m%0%i%`$N=PNO$r4^$a$kJ}K!$H$7$F$O!"(B
- <code>include virtual</code> $B$NJ}$,(B <code>exec cgi</code> $B$h$j$b(B
- $B9%$^$7$$J}K!$G$9!#(B</p>
- </dd>
- </dl>
- </section> <!-- /include -->
-
- <section id="element.printenv"><title>printenv $BMWAG(B</title>
- <p>$B$3$l$O!"B8:_$9$k$9$Y$F$NJQ?t$H$=$NCM$rI=<($7$^$9!#(BApache 1.3.12 $B$+$i!"(B
- $BFCJL$JJ8;z$O=PNO$5$l$kA0$K%(%s%F%#%F%#%(%s%3!<%I(B ($B>\:Y$O(B <a
- href="#element.echo"><code>echo</code></a> $BMWAG$r;2>H(B)
- $B$5$l$k$h$&$K$J$j$^$7$?!#B0@-$O$"$j$^$;$s!#(B</p>
-
- <example><title>$BNc(B</title>
- &lt;!--#printenv --&gt;
- </example>
- </section> <!-- /printenv -->
-
- <section id="element.set"><title>set $BMWAG(B</title>
- <p>$B$3$l$OJQ?t$NCM$r@_Dj$7$^$9!#B0@-$O<!$NDL$j$G$9!#(B</p>
-
- <dl>
- <dt><code>var</code></dt>
- <dd>$B@_Dj$9$kJQ?t$NL>A0!#(B</dd>
-
- <dt><code>value</code></dt>
- <dd>$BJQ?t$K@_Dj$9$kCM!#(B</dd>
- </dl>
-
- <example><title>$BNc(B</title>
- &lt;!--#set var="category" value="help" --&gt;
- </example>
- </section> <!-- /set -->
-</section> <!-- /basic elements -->
-
-<section id="includevars">
- <title>Include $BJQ?t(B</title>
-
- <p>$BI8=`(B CGI $B4D6-$NJQ?t$K2C$($F!"(B<code>echo</code> $B%3%^%s%I$d!"(B
- <code>if</code> $B$d(B <code>elif</code>, $B$=$l$K%I%-%e%a%s%H$+$i8F$S=P$5$l$k(B
- $B$9$Y$F$N%W%m%0%i%`$+$i;HMQ$G$-$kJQ?t$,$"$j$^$9!#(B</p>
-
- <dl>
- <dt><code>DATE_GMT</code></dt>
- <dd>$B%0%j%K%C%8I8=`;~$K$h$k8=:_;~9o!#(B</dd>
-
- <dt><code>DATE_LOCAL</code></dt>
- <dd>$B%m!<%+%k$NI8=`;~$K$h$k8=:_;~9o!#(B</dd>
-
- <dt><code>DOCUMENT_NAME</code></dt>
- <dd>$B%f!<%6$,%j%/%(%9%H$7$?(B ($B%G%#%l%/%H%j$r=|$$$?(B) $B%U%!%$%kL>!#(B</dd>
-
- <dt><code>DOCUMENT_URI</code></dt>
- <dd>$B%f!<%6$,%j%/%(%9%H$7$?(B (% $B%(%s%3!<%I$5$l$?(B) URL-path$B!#(B
- $BA^F~%U%!%$%k$,F~$l;R$K$J$C$F$$$k>l9g$O!"2r@O$5$l$F$$$k(B
- $B%I%-%e%a%s%H$N(B URL $B$G$O(B<em>$B$J$$(B</em>$B$3$H$KCm0U$7$F$/$@$5$$!#(B</dd>
-
- <dt><code>LAST_MODIFIED</code></dt>
- <dd>$B%f!<%6$,%j%/%(%9%H$7$?%I%-%e%a%s%H$N:G=*=$@5;~9o!#(B</dd>
-
- <dt><code>QUERY_STRING_UNESCAPED</code></dt>
- <dd>$B%/%(%j!<J8;zNs$,$"$k>l9g!"$3$NJQ?t$K$O(B (%-$B%G%3!<%I$5$l$?(B)
- $B%/%(%j!<J8;zNs$,BeF~$5$l$F$$$F!"(Bshell $B$G;HMQ$G$-$k$h$&$K(B
- <em>$B%(%9%1!<%W(B</em>$B$5$l$F$$$^$9(B (<code>&amp;</code>
- $B$H$$$C$?FC<lJ8;z$K$O%P%C%/%9%i%C%7%e$,D>A0$KCV$+$l$^$9(B)$B!#(B</dd>
- </dl>
-</section>
-
-<section id="substitution"><title>$BJQ?tCV49(B</title>
-
- <p>$BJQ?tCV49$O$?$$$F$$$N>l9g(B SSI $B%G%#%l%/%F%#%V$N0z?t$H$7$FBEEv$J>l=j$K$"$k(B
- $B0zMQId$G0O$^$l$?J8;zNsCf$G9T$J$o$l$^$9!#$3$l$K3:Ev$9$k$b$N$K$O!"(B
- <code>config</code>,
- <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
- <code>include</code>, <code>echo</code>, <code>set</code> $B$N(B
- $B3F%G%#%l%/%F%#%V$H!">r7oJ,4tMQ$N%*%Z%l!<%?$X$N0z?t$,$"$j$^$9!#(B
- $B%I%k5-9f$O%P%C%/%9%i%C%7%e$r;H$&$3$H$G;H$&$3$H$,$G$-$^$9(B:</p>
-
- <example>
- &lt;!--#if expr="$a = \$test" --&gt;
- </example>
-
- <p>$BJQ?tL>$H$7$F$_$J$5$l$kJ8;zNs$NCf$GJQ?t$X$N;2>H$rCV49$9$kI,MW$,$"$k$H$-$O!"(B
- $B%7%'%k$G$NJQ?tCV49$N$h$&$K!"Cf3g8L$G3g$k$3$H$G6hJL$9$k$3$H$,$G$-$^$9(B:</p>
-
- <example>
- &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
- </example>
-
- <p>$B$3$NNc$G$O!"(B<code>REMOTE_HOST</code> $B$,(B
- "<code>X</code>" $B$G(B <code>REQUEST_METHOD</code> $B$,(B
- "<code>Y</code>" $B$N$H$-$KJQ?t(B <code>Zed</code> $B$r(B "<code>X_Y</code>"
- $B$K@_Dj$7$^$9!#(B</p>
-
- <p>$B0J2<$NNc$G$O!"(B<code>DOCUMENT_URI</code> $B$,(B <code>/foo/file.html</code>
- $B$N$H$-$K(B "in foo" $B$r!"(B<code>/bar/file.html</code> $B$N$H$-$K(B "in bar" $B$r!"(B
- $B$I$A$i$G$b$J$$$H$-$K$O(B "in neither" $B$rI=<($7$^$9!#(B</p>
-
- <example>
- &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
- <indent>
- in foo<br />
- </indent>
- &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
- <indent>
- in bar<br />
- </indent>
- &lt;!--#else --&gt;<br />
- <indent>
- in neither<br />
- </indent>
- &lt;!--#endif --&gt;
- </example>
-</section>
-
-<section id="flowctrl">
- <title>$B%U%m!<@)8fMWAG(B</title>
-
- <p>$B4pK\E*$J%U%m!<%3%s%H%m!<%kMWAG$O<!$NDL$j$G$9!#(B</p>
-
- <example>
- &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
- &lt;!--#else --&gt;<br />
- &lt;!--#endif --&gt;
- </example>
-
- <p><code>if</code> $BMWAG$O%W%m%0%i%_%s%08@8l$N(B
- if $BJ8$HF1$8$h$&$KF0:n$7$^$9!#>r7o$,I>2A$5$l!"7k2L$,??$G$"$l$P<!$N(B
- <code>elif</code> $B$+(B <code>else</code> $B$+(B <code>endif</code>
- $BMWAG$^$G$NJ8;zNs$,=PNO$KA^F~$5$l$^$9!#(B</p>
-
- <p><code>elif</code> $B$d(B <code>else</code> $BJ8$O(B <var>test_condition</var>
- $B$,56$N$H$-$K%F%-%9%H$r=PNO$KA^F~$9$k$?$a$K;H$o$l$^$9!#(B
- $B$3$l$i$NMWAG$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-
- <p><code>endif</code> $BMWAG$O(B <code>if</code>
- $BMWAG$r=*N;$5$;$^$9!#$3$NMWAG$OI,?\$G$9!#(B</p>
-
- <p><var>test_condition</var> $B$O0J2<$N$I$l$+$G$9(B:</p>
-
- <dl>
- <dt><code><var>string</var></code></dt>
- <dd><var>string</var> $B$,6u$G$J$$>l9g$K??$G$9(B</dd>
-
- <dt><code><var>string1</var> = <var>string2</var><br />
- <var>string1</var> == <var>string2</var><br />
- <var>string1</var> != <var>string2</var></code></dt>
-
- <dd><p><var>string1</var> $B$H(B <var>string2</var> $B$rHf3S$7$^$9!#(B
- <var>string2</var> $B$,(B <code>/<var>string</var>/</code>
- $B$H$$$&7A<0$G$"$l$P!"@55,I=8=$H$7$FHf3S$5$l$^$9!#@55,I=8=$O(B
- <a href="http://www.pcre.org">PCRE</a> $B%(%s%8%s$G<BAu$5$l$F$$$F!"(B
- <a href="http://www.perl.com">perl 5</a> $B$HF1$89=J8$r;HMQ$7$^$9!#(B
- <code>==</code> $B$OC1$K(B <code>=</code> $B$NJLL>$G!"$^$C$?$/F1$8F0:n$r(B
- $B$7$^$9!#(B</p>
-
- <p>$B@5$N%^%C%A%s%0(B (<code>=</code> $B$^$?$O(B <code>==</code>) $B$N>l9g$O!"(B
- $B@55,I=8=$G%0%k!<%WJ,$1$5$l$?%Q!<%D$r%-%c%W%A%c$9$k$3$H$,$G$-$^$9!#(B
- $B%-%c%W%A%c$5$l$?ItJ,$OFC<lJQ?t(B <code>$1</code> .. <code>$9</code>
- $B$K3JG<$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
- <indent>
- &lt;!--#set var="session" value="$1" --&gt;<br />
- </indent>
- &lt;!--#endif --&gt;
- </example>
- </dd>
-
- <dt><code><var>string1</var> &lt; <var>string2</var><br />
- <var>string1</var> &lt;= <var>string2</var><br />
- <var>string1</var> &gt; <var>string2</var><br />
- <var>string1</var> &gt;= <var>string2</var></code></dt>
-
- <dd><var>string1</var> $B$H(B <var>string2</var> $B$rHf3S$7$^$9!#(B
- <em>$BJ8;zNs$H$7$F(B</em>$BHf3S$5$l$k(B (<code>strcmp(3)</code> $B$r;HMQ(B)
- $B$3$H$KCm0U$7$F$/$@$5$$!#$G$9$+$i!"J8;zNs(B "100" $B$O(B "20"
- $B$h$j$b>.$5$$$3$H$K$J$j$^$9!#(B</dd>
-
- <dt><code>( <var>test_condition</var> )</code></dt>
- <dd><var>test_condition</var> $B$,??$N$H$-!"??(B</dd>
-
- <dt><code>! <var>test_condition</var></code></dt>
- <dd><var>test_condition</var> $B$,56$N$H$-!"??(B</dd>
-
- <dt><code><var>test_condition1</var> &amp;&amp;
- <var>test_condition2</var></code></dt>
- <dd><var>test_condition1</var> $B$+$D(B
- <var>test_condition2</var> $B$,??$N$H$-!"??(B</dd>
-
- <dt><code><var>test_condition1</var> ||
- <var>test_condition2</var></code></dt>
- <dd><var>test_condition1</var> $B$^$?$O(B
- <var>test_condition2</var> $B$,??$N$H$-!"??(B</dd>
- </dl>
-
- <p>"<em>=</em>" $B$H(B "<em>!=</em>" $B$NJ}$,(B "<em>&amp;&amp;</em>" $B$h$j(B
- $B$-$D$/B+G{$7$^$9!#(B"<em>!</em>" $B$NB+G{$,0lHV$-$D$/$J$C$F$$$^$9!#(B
- $B$G$9$+$i0J2<$NFs$D$OEy2A$G$9(B:</p>
-
- <example>
- &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
- &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
- </example>
-
- <p>$B??56CM%*%Z%l!<%?(B <code>&amp;&amp;</code> $B$H(B <code>||</code>
- $B$OF1$8M%@hEY$G$9!#(B
- $B$3$l$i$N%*%Z%l!<%?$G0lJ}$K$h$j6/$$M%@hEY$r$D$1$?$$>l9g$K$O!"(B
- $B3g8L$r;H$&I,MW$,$"$j$^$9!#(B</p>
-
- <p>$BJQ?t$d%*%Z%l!<%?$H$7$FG'<1$5$l$J$$$b$N$O$9$Y$FJ8;zNs$H$7$F(B
- $B07$o$l$^$9!#J8;zNs$O0zMQId$G0O$`$3$H$b$G$-$^$9(B: <code>'string'</code>
- $B$N$h$&$K!#0zMQId$G0O$^$l$F$$$J$$J8;zNs$K$O6uGr(B ($B%9%Z!<%9$H%?%V(B)
- $B$r4^$a$k$3$H$O$G$-$^$;$s!#$=$l$i$OJQ?t$J$I$N6g$rJ,N%$9$k$?$a$K(B
- $B;H$o$l$F$$$k$+$i$G$9!#J#?t$NJ8;zNs$,B3$$$F$$$k$H$-$O!"(B
- $B6uGr$r4V$KF~$l$F0l$D$K$/$C$D$1$i$l$^$9!#$G$9$+$i!"(B</p>
-
- <example>
- <p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
- >string2</var></code> $B$O(B <code><var>string1</var>&nbsp;<var
- >string2</var></code> $B$K$J$j$^$9!#(B<br />
- <br />
- $B$^$?!"(B<br />
- <br />
- <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
- >string2</var>'</code> $B$O(B <code><var
- >string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>
- $B$K$J$j$^$9!#(B</p>
- </example>
-
- <note><title>$B??56CMI=8=$N:GE,2=(B</title>
- <p>$B<0$,$b$C$HJ#;($K$J$j!"=hM}$NB.EYDc2<$,82Cx$K$J$C$?>l9g$O!"(B
- $BI>2A%k!<%k$K=>$C$F:GE,2=$7$F$_$k$HNI$$$G$7$g$&!#(B</p>
- <ul>
- <li>$BI>2A$O:8$+$i1&$K8~$+$C$F9T$o$l$^$9!#(B</li>
- <li>$BFsCM??56CM%*%Z%l!<%?(B (<code>&amp;&amp;</code> $B$H(B <code>||</code>)
- $B$O!"=PMh$k8B$jC;MmI>2A$5$l$^$9!#$D$^$j7k2L$H$7$F>e5-$N%k!<%k$O!"(B
- <module>mod_include</module> $B$,:8$NI>2A<0$rI>2A$7$^$9!#(B
- $B:8B&$G7k2L$r==J,7hDj$G$-$k>l9g$O!"I>2A$O$=$3$GDd;_$7$^$9!#(B
- $B$=$&$G$J$$>l9g$O1&B&$rI>2A$7$F!":8$H1&$NN>J}$+$i7k2L$r7W;;$7$^$9!#(B</li>
- <li>$BC;MmI>2A$OI>2A$NBP>]$K@55,I=8=$,4^$^$l$k>l9g!"%*%U$K$J$j$^$9!#(B
- $B8eJ};2>H$9$kJQ?t(B (<code>$1</code> .. <code>$9</code>)
- $B$rKd$a$k$?$a$K!"<B:]$KI>2A$9$kI,MW$,$"$k$+$i$G$9!#(B</li>
- </ul>
- <p>$BFCDj$N<0$,$I$N$h$&$K07$o$l$k$+$rCN$j$?$$>l9g$O!"(B
- <code>-DDEBUG_INCLUDE</code> $B%3%s%Q%$%i%*%W%7%g%s$rIU$1$F(B
- <module>mod_include</module> $B$r%j%3%s%Q%$%k$9$k$HNI$$$G$7$g$&!#(B
- $B$3$l$K$h$j!"A4$F$N%Q!<%9$5$l$?<0$KBP$7$F!";z6g2r@O>pJs!"(B
- $B%Q!<%9%D%j!<$H!"(B
- $B$=$l$,$I$N$h$&$K%/%i%$%"%s%H$KAw$i$l$?=PNO$^$GI>2A$5$l$?$+$r(B
- $BA^F~$7$^$9!#(B</p>
- </note>
-</section>
-
-<directivesynopsis>
-<name>SSIEndTag</name>
-<description>include $BMWAG$r=*N;$5$;$kJ8;zNs(B</description>
-<syntax>SSIEndTag <var>tag</var></syntax>
-<default>SSIEndTag &quot;--&gt;&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>2.0.30 $B0J9_$GMxMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <module>mod_include</module> $B$,C5$9!"(B
- include $BMWAG$N=*N;$r<($9J8;zNs$rJQ99$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- SSIEndTag "%&gt;"
- </example>
-
-</usage>
-<seealso><directive module="mod_include">SSIStartTag</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIUndefinedEcho</name>
-<description>$BL$Dj5A$NJQ?t$,(B echo $B$5$l$?$H$-$KI=<($5$l$kJ8;zNs(B</description>
-<syntax>SSIUndefinedEcho <var>string</var></syntax>
-<default>SSIUndefinedEcho &quot;(none)&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-<compatibility>2.0.34 $B0J9_$GMxMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$OJQ?t$,Dj5A$5$l$F$$$J$$$K$b4X$o$i$:(B
- &quot;echo&quot; $B$5$l$?$H$-$K(B <module>mod_include</module>
- $B$,I=<($9$kJ8;zNs$rJQ99$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- SSIUndefinedEcho "&lt;!-- undef --&gt;"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIErrorMsg</name>
-<description>SSI $B$N%(%i!<$,$"$C$?$H$-$KI=<($5$l$k%(%i!<%a%C%;!<%8(B</description>
-<syntax>SSIErrorMsg <var>message</var></syntax>
-<default>SSIErrorMsg &quot;[an error occurred while processing this
-directive]&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-<compatibility>$B%P!<%8%g%s(B 2.0.30 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>SSIErrorMsg</directive> $B%G%#%l%/%F%#%V$O(B <module>mod_include</module>
- $B$,%(%i!<$,5/$3$C$?$H$-$KI=<($9$k%a%C%;!<%8$rJQ99$7$^$9!#%W%m%@%/%7%g%s%5!<%P$G$O(B
- $B%a%C%;!<%8$,%f!<%6$KI=<($5$l$J$$$h$&$K$9$k$?$a$K(B
- $B%G%U%)%k%H%(%i!<%a%C%;!<%8$r(B <code>&quot;&lt;!-- Error --&gt;&quot;</code>
- $B$KJQ$($k$H$$$&$h$&$J$3$H$r9M$($k$+$b$7$l$^$;$s!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <code>&lt;!--#config
- errmsg=<var>message</var> --&gt;</code> $BMWAG$HF1$88z2L$K$J$j$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- SSIErrorMsg "&lt;!-- Error --&gt;"
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIStartTag</name>
-<description>include $BMWAG$r3+;O$9$kJ8;zNs(B</description>
-<syntax>SSIStartTag <var>tag</var></syntax>
-<default>SSIStartTag &quot;&lt;!--#&quot;</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>$B%P!<%8%g%s(B 2.0.30 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <module>mod_include</module> $B$,C5$9!"(Binclude
- $BMWAG$N3+;O$r<($9J8;zNs$rJQ99$7$^$9!#(B</p>
-
- <p>$BFs$D$N%5!<%P$G(B ($B$b$7$+$9$k$HJL!9$NCJ3,$G(B) $B%U%!%$%k$N=PNO$r2r@O$7$F$$$F!"(B
- $B$=$l$>$l$K0c$&%3%^%s%I$r=hM}$5$;$?$$!"(B
- $B$H$$$&$h$&$J$H$-$K$3$N%*%W%7%g%s$r;H$$$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- SSIStartTag "&lt;%"<br />
- SSIEndTag "%&gt;"
- </example>
-
- <p>$B>e$NNc$N$h$&$KBP1~$9$k(B
- <directive module="mod_include">SSIEndTag</directive> $B$rJ;$;$F;H$&$H!"(B
- $B2<$K<($9Nc$N$h$&$K(B SSI $B%G%#%l%/%F%#%V$r;H$($^$9(B:</p>
-
- <example><title>$B0c$&3+;O$H=*N;$N%?%0$r;H$C$?(B SSI $B%G%#%l%/%F%#%V(B</title>
- &lt;%printenv %&gt;
- </example>
-</usage>
-<seealso><directive module="mod_include">SSIEndTag</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSITimeFormat</name>
-<description>$BF|IU$1$r8=$9J8;zNs$N=q<0$r@_Dj$9$k(B</description>
-<syntax>SSITimeFormat <var>formatstring</var></syntax>
-<default>SSITimeFormat &quot;%A, %d-%b-%Y %H:%M:%S %Z&quot;</default>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-<compatibility>2.0.30 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
-<p>$B$3$N%G%#%l%/%F%#%V$O(B <code>DATE</code> $B4D6-JQ?t$r(B echo $B$7$FF|IU$r8=$9J8;zNs$,(B
- $BI=<($5$l$k$H$-$N=q<0$rJQ99$7$^$9!#(B<var>formatstring</var> $B$O(B
- C $BI8=`%i%$%V%i%j$N(B <code>strftime(3)</code> $B$HF1$87A<0$G$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O(B <code>&lt;!--#config
- timefmt=<var>formatstring</var> --&gt;</code> $BMWAG$HF1$88z2L$K$J$j$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- SSITimeFormat "%R, %B %d, %Y"
- </example>
-
- <p>$B>e$N%G%#%l%/%F%#%V$G$O!"F|IU$O(B "22:26, June 14, 2002" $B$H$$$&(B
- $B7A<0$GI=<($5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>XBitHack</name>
-<description>$B<B9T%S%C%H$,@_Dj$5$l$?%U%!%$%k$N(B SSI $B%G%#%l%/%F%#%V$r(B
-$B2r@O$9$k(B</description>
-<syntax>XBitHack on|off|full</syntax>
-<default>XBitHack off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Options</override>
-
-<usage>
- <p><directive>XBitHack</directive> $B%G%#%l%/%F%#%V$ODL>o$N(B HTML
- $B%I%-%e%a%s%H$N2r@O$r@)8f$7$^$9!#$3$N%G%#%l%/%F%#%V$O(B MIME $B%?%$%W(B
- <code>text/html</code> $B$H4XO"IU$1$i$l$F$$$k%U%!%$%k$K$N$_1F6A$7$^$9!#(B
- <directive>XBitHack</directive> $B$O0J2<$NCM$r$H$k$3$H$,$G$-$^$9!#(B</p>
-
- <dl>
- <dt><code>off</code></dt>
- <dd>$B<B9T2DG=%U%!%$%k$KBP$7$FFCJL$J07$$$r$7$^$;$s!#(B</dd>
-
- <dt><code>on</code></dt>
- <dd>$B%f!<%6$N<B9T%S%C%H$,@_Dj$5$l$F$$$k(B <code>text/html</code>
- $B%U%!%$%k$OA4$F%5!<%P$G2r@O$9$k(B html $B%I%-%e%a%s%H$H$7$F07$o$l$^$9!#(B</dd>
-
- <dt><code>full</code></dt>
- <dd><code>on</code> $B$HF1MM$G$9$,!"%0%k!<%W<B9T%S%C%H$b%F%9%H$7$^$9!#(B
- $B$b$7$=$l$,@_Dj$5$l$F$$$l$P!"JV$5$l$k%U%!%$%k$N(B <code>Last-modified</code> $B$N(B
- $BF|IU$r%U%!%$%k$N:G=*=$@5;~9o$K$7$^$9!#$=$l$,@_Dj$5$l$F$$$J$$$H$-$O!"(B
- last-modified $B$NF|IU$OAw$i$l$^$;$s!#$3$N%S%C%H$r@_Dj$9$k$H!"(B
- $B%/%i%$%"%s%H$d%W%m%-%7$,%j%/%(%9%H$r%-%c%C%7%e$G$-$k$h$&$K$J$j$^$9!#(B
-
- <note><strong>$BCm0U(B</strong> $BB>$N(B CGI $B$r(B <code>#include</code>
- $B$9$k$+$b$7$l$J$$$b$N$d!"3F%"%/%;%9$KBP$7$F0c$&=PNO$r@8@.$9$k(B
- ($B$b$7$/$O8e$N%j%/%(%9%H$GJQ$o$k$+$b$7$l$J$$$b$N(B)
- $B$9$Y$F$N(B SSI $B%9%/%j%W%H$KBP$7$F%0%k!<%W<B9T%S%C%H$,(B
- $B@_Dj$5$l$F$$$J$$$3$H$r3NG'$G$-$J$$>l9g$O!"(Bfull $B$O;H$o$J$$J}$,NI$$(B
- $B$G$7$g$&!#(B</note>
- </dd>
- </dl>
-
- </usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_include.xml.meta b/docs/manual/mod/mod_include.xml.meta
deleted file mode 100644
index d3ac678b40..0000000000
--- a/docs/manual/mod/mod_include.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_include</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_info.html b/docs/manual/mod/mod_info.html
deleted file mode 100644
index 9ce858904c..0000000000
--- a/docs/manual/mod/mod_info.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_info.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_info.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mod_info.html.en b/docs/manual/mod/mod_info.html.en
deleted file mode 100644
index d3bbb503a0..0000000000
--- a/docs/manual/mod/mod_info.html.en
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_info - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_info</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_info.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_info.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides a comprehensive overview of the server
-configuration</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>info_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_info.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>To configure <code class="module"><a href="../mod/mod_info.html">mod_info</a></code>, add the following to your
- <code>httpd.conf</code> file.</p>
-
- <div class="example"><p><code>
- &lt;Location /server-info&gt;<br />
- <span class="indent">
- SetHandler server-info<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>You may wish to add a
- <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code>
- clause inside the
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- directive to limit access to your server configuration
- information.</p>
-
- <p>Once configured, the server information is obtained by
- accessing <code>http://your.host.dom/server-info</code></p>
-
- <div class="note">
- Note that the configuration files are read by the
- module at run-time, and therefore the display may
- <em>not</em> reflect the running server's active
- configuration if the files have been changed since the server
- was last reloaded. Also, the configuration files must be
- readable by the user as which the server is running (see the
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> directive), or
- else the directive settings will not be listed.
-
- <p>It should also be noted that if
- <code class="module"><a href="../mod/mod_info.html">mod_info</a></code> is compiled into the server, its
- handler capability is available in <em>all</em> configuration
- files, including per-directory files (<em>e.g.</em>,
- <code>.htaccess</code>). This may have security-related
- ramifications for your site.</p>
-
- <p>In particular, this module can leak sensitive information
- from the configuration directives of other Apache modules such as
- system paths, usernames/passwords, database names, etc. Due to
- the way this module works there is no way to block information
- from it. Therefore, this module should <strong>only</strong> be
- used in a controlled environment and always with caution.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addmoduleinfo">AddModuleInfo</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds additional information to the module
-information displayed by the server-info handler</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_info</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache 1.3 and above</td></tr>
-</table>
- <p>This allows the content of <var>string</var> to be shown as
- HTML interpreted, <strong>Additional Information</strong> for
- the module <var>module-name</var>. Example:</p>
-
- <div class="example"><p><code>
- AddModuleInfo mod_deflate.c 'See &lt;a \<br />
- <span class="indent">
- href="http://www.apache.org/docs-2.1/mod/mod_deflate.html"&gt;\<br />
- http://www.apache.org/docs-2.1/mod/mod_deflate.html&lt;/a&gt;'
- </span>
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_info.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_info.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_info.html.ja.euc-jp b/docs/manual/mod/mod_info.html.ja.euc-jp
deleted file mode 100644
index b03906e462..0000000000
--- a/docs/manual/mod/mod_info.html.ja.euc-jp
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_info - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_info</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_info.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_info.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤ÎÀßÄê¤ÎÊñ³çŪ¤Ê³µ´Ñ¤òÄ󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>info_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_info.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p><code class="module"><a href="../mod/mod_info.html">mod_info</a></code> ¤òÀßÄꤹ¤ë¤Ë¤Ï¡¢°Ê²¼¤ò <code>httpd.conf</code>
- ¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- &lt;Location /server-info&gt;<br />
- <span class="indent">
- SetHandler server-info<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>¥µ¡¼¥ÐÀßÄê¤Î¾ðÊó¤Ø¤Î¥¢¥¯¥»¥¹¤òÀ©¸Â¤¹¤ë¤¿¤á¤Ë¡¢
- <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃæ¤Ë <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code>
- Àá¤òÆþ¤ì¤ë¤È¤è¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <p>°ìöÀßÄꤹ¤ë¤È¡¢<code>http://your.host.dom/server-info</code>
- ¤ò¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤Ç¥µ¡¼¥Ð¤Î¾ðÊó¤òÆÀ¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="note">
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¼Â¹Ô»þ¤ËÀßÄê¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ß¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤¬ºÇ¸å¤Ë¥µ¡¼¥Ð¤ËÆɤ߹þ¤Þ¤ì¤¿¸å¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤ë
- ¾ì¹ç¤Ë¤Ï¡¢É½¼¨¤µ¤ì¤Æ¤¤¤ëÆâÍƤϼ¹Ԥµ¤ì¤Æ¤¤¤ë¥µ¡¼¥Ð¤ÎÀßÄê¤òÈ¿±Ç¤·¤Æ
- <em>¤¤¤Ê¤¤</em>¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤Þ¤¿¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤Ï¥µ¡¼¥Ð¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¥æ¡¼¥¶¤Î¸¢¸Â¤Ç
- Æɤ߹þ¤ßµö²Ä¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹
- (<code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
- ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀßÄê¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£</p>
-
- <p><code class="module"><a href="../mod/mod_info.html">mod_info</a></code>
- ¤¬¥µ¡¼¥Ð¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥Ç¥£¥ì¥¯¥È¥êËè¤Î¥Õ¥¡¥¤¥ë
- (Î㤨¤Ð¡¢<code>.htaccess</code>) ¤ò´Þ¤à¤¹¤Ù¤Æ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ç
- ¥Ï¥ó¥É¥é¤ò»ÈÍѲÄǽ¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤Ë¤âÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤ì¤Ï¡¢¤¢¤Ê¤¿¤Î¥µ¥¤¥È¤Ç¤Ï¥»¥­¥å¥ê¥Æ¥£¤Ë´ØÏ¢¤·¤¿ÌäÂ꤬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- </p>
-
- <p>Æäˡ¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥·¥¹¥Æ¥à¥Ñ¥¹¡¢¥æ¡¼¥¶Ì¾/¥Ñ¥¹¥ï¡¼¥É¡¢
- ¥Ç¡¼¥¿¥Ù¡¼¥¹Ì¾¤Ê¤É¡¢Â¾¤Î Apache ¥â¥¸¥å¡¼¥ë¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤«¤é
- ¥»¥­¥å¥ê¥Æ¥£¾åÈù̯¤Ê¾ðÊó¤òϳ¤é¤¹²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¥â¥¸¥å¡¼¥ë¤ÎÆ°ºîÊýË¡¤Î¤»¤¤¤Ç¡¢¾ðÊó¤Îή½Ð¤òËɤ°ÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤Ç¤¹¤«¤é¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¤­¤Á¤ó¤È¥¢¥¯¥»¥¹À©¸æ¤µ¤ì¤¿´Ä¶­¤Ç<strong>¤Î¤ß</strong>¡¢
- Ãí°Õ¤·¤Æ»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addmoduleinfo">AddModuleInfo</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddModuleInfo" id="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo" id="addmoduleinfo">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>server-info ¥Ï¥ó¥É¥é¤Ë¤è¤êɽ¼¨¤µ¤ì¤ë¥â¥¸¥å¡¼¥ë¤Î¾ðÊó¤Ë
-ÄɲäξðÊó¤òÉÕ¤±²Ã¤¨¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddModuleInfo <var>module-name</var> <var>string</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_info</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 1.3 °Ê¹ß</td></tr>
-</table>
- <p>¤³¤ì¤Ï¡¢<var>string</var> ¤ÎÆâÍƤ¬¥â¥¸¥å¡¼¥ë <var>module-name</var>
- ¤Î<strong>ÄɲþðÊó</strong> ¤È¤·¤Æ HTML
- ¤È¤·¤Æ²ò¼á¤µ¤ì¡¢É½¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£Îã:</p>
-
- <div class="example"><p><code>
- AddModuleInfo mod_deflate.c 'See &lt;a \<br />
- <span class="indent">
- href="http://www.apache.org/docs-2.1/mod/mod_deflate.html"&gt;\<br />
- http://www.apache.org/docs-2.1/mod/mod_deflate.html&lt;/a&gt;'
- </span>
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_info.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_info.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_info.xml b/docs/manual/mod/mod_info.xml
deleted file mode 100644
index ca16eecf4f..0000000000
--- a/docs/manual/mod/mod_info.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.16 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_info.xml.meta">
-
-<name>mod_info</name>
-<description>Provides a comprehensive overview of the server
-configuration</description>
-<status>Extension</status>
-<sourcefile>mod_info.c</sourcefile>
-<identifier>info_module</identifier>
-
-<summary>
- <p>To configure <module>mod_info</module>, add the following to your
- <code>httpd.conf</code> file.</p>
-
- <example>
- &lt;Location /server-info&gt;<br />
- <indent>
- SetHandler server-info<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>You may wish to add a
- <directive type="section" module="core">Limit</directive>
- clause inside the
- <directive type="section" module="core">Location</directive>
- directive to limit access to your server configuration
- information.</p>
-
- <p>Once configured, the server information is obtained by
- accessing <code>http://your.host.dom/server-info</code></p>
-
- <note>
- Note that the configuration files are read by the
- module at run-time, and therefore the display may
- <em>not</em> reflect the running server's active
- configuration if the files have been changed since the server
- was last reloaded. Also, the configuration files must be
- readable by the user as which the server is running (see the
- <directive module="mpm_common">User</directive> directive), or
- else the directive settings will not be listed.
-
- <p>It should also be noted that if
- <module>mod_info</module> is compiled into the server, its
- handler capability is available in <em>all</em> configuration
- files, including per-directory files (<em>e.g.</em>,
- <code>.htaccess</code>). This may have security-related
- ramifications for your site.</p>
-
- <p>In particular, this module can leak sensitive information
- from the configuration directives of other Apache modules such as
- system paths, usernames/passwords, database names, etc. Due to
- the way this module works there is no way to block information
- from it. Therefore, this module should <strong>only</strong> be
- used in a controlled environment and always with caution.</p>
- </note>
-</summary>
-
-<directivesynopsis>
-<name>AddModuleInfo</name>
-<description>Adds additional information to the module
-information displayed by the server-info handler</description>
-<syntax>AddModuleInfo <var>module-name</var> <var>string</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Apache 1.3 and above</compatibility>
-
-<usage>
- <p>This allows the content of <var>string</var> to be shown as
- HTML interpreted, <strong>Additional Information</strong> for
- the module <var>module-name</var>. Example:</p>
-
- <example>
- AddModuleInfo mod_deflate.c 'See &lt;a \<br />
- <indent>
- href="http://www.apache.org/docs-2.1/mod/mod_deflate.html"&gt;\<br />
- http://www.apache.org/docs-2.1/mod/mod_deflate.html&lt;/a&gt;'
- </indent>
- </example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_info.xml.ja b/docs/manual/mod/mod_info.xml.ja
deleted file mode 100644
index f471ecddbd..0000000000
--- a/docs/manual/mod/mod_info.xml.ja
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.16 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_info.xml.meta">
-
-<name>mod_info</name>
-<description>$B%5!<%P$N@_Dj$NJq3gE*$J354Q$rDs6!$9$k(B</description>
-<status>Extension</status>
-<sourcefile>mod_info.c</sourcefile>
-<identifier>info_module</identifier>
-
-<summary>
- <p><module>mod_info</module> $B$r@_Dj$9$k$K$O!"0J2<$r(B <code>httpd.conf</code>
- $B%U%!%$%k$K2C$($^$9!#(B</p>
-
- <example>
- &lt;Location /server-info&gt;<br />
- <indent>
- SetHandler server-info<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>$B%5!<%P@_Dj$N>pJs$X$N%"%/%;%9$r@)8B$9$k$?$a$K!"(B
- <directive type="section" module="core">Location</directive>
- $B%G%#%l%/%F%#%V$NCf$K(B <directive type="section" module="core">Limit</directive>
- $B@a$rF~$l$k$H$h$$$+$b$7$l$^$;$s!#(B</p>
-
- <p>$B0lC6@_Dj$9$k$H!"(B<code>http://your.host.dom/server-info</code>
- $B$r%"%/%;%9$9$k$3$H$G%5!<%P$N>pJs$rF@$i$l$k$h$&$K$J$j$^$9!#(B</p>
-
- <note>
- <p>$B$3$N%b%8%e!<%k$O<B9T;~$K@_Dj%U%!%$%k$rFI$_9~$_$^$9!#(B
- $B%5!<%P$N@_Dj%U%!%$%k$,:G8e$K%5!<%P$KFI$_9~$^$l$?8e$KJQ99$5$l$F$$$k(B
- $B>l9g$K$O!"I=<($5$l$F$$$kFbMF$O<B9T$5$l$F$$$k%5!<%P$N@_Dj$rH?1G$7$F(B
- <em>$B$$$J$$(B</em>$B$+$b$7$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$^$?!"@_Dj%U%!%$%k$O%5!<%P$,<B9T$5$l$F$$$k%f!<%6$N8"8B$G(B
- $BFI$_9~$_5v2D$,M?$($i$l$F$$$kI,MW$,$"$j$^$9(B
- (<directive module="mpm_common">User</directive>
- $B%G%#%l%/%F%#%V$r;2>H$7$F$/$@$5$$(B)$B!#(B
- $B$G$J$1$l$P!"%G%#%l%/%F%#%V$N@_Dj$OI=<($5$l$^$;$s!#(B</p>
-
- <p><module>mod_info</module>
- $B$,%5!<%P$KAH$_9~$^$l$F$$$k>l9g$O!"%G%#%l%/%H%jKh$N%U%!%$%k(B
- ($BNc$($P!"(B<code>.htaccess</code>) $B$r4^$`$9$Y$F$N@_Dj%U%!%$%k$G(B
- $B%O%s%I%i$r;HMQ2DG=$G$"$k$H$$$&$3$H$K$bCm0U$7$F$/$@$5$$!#(B
- $B$3$l$O!"$"$J$?$N%5%$%H$G$O%;%-%e%j%F%#$K4XO"$7$?LdBj$,$"$k$+$b$7$l$^$;$s!#(B
- </p>
-
- <p>$BFC$K!"$3$N%b%8%e!<%k$O%7%9%F%`%Q%9!"%f!<%6L>(B/$B%Q%9%o!<%I!"(B
- $B%G!<%?%Y!<%9L>$J$I!"B>$N(B Apache $B%b%8%e!<%k$N@_Dj%G%#%l%/%F%#%V$+$i(B
- $B%;%-%e%j%F%#>eHyL/$J>pJs$rO3$i$92DG=@-$,$"$j$^$9!#(B
- $B$3$N%b%8%e!<%k$NF0:nJ}K!$N$;$$$G!">pJs$NN.=P$rKI$0J}K!$O$"$j$^$;$s!#(B
- $B$G$9$+$i!"$3$N%b%8%e!<%k$O$-$A$s$H%"%/%;%9@)8f$5$l$?4D6-$G(B<strong>$B$N$_(B</strong>$B!"(B
- $BCm0U$7$F;H$C$F$/$@$5$$!#(B</p>
- </note>
-</summary>
-
-<directivesynopsis>
-<name>AddModuleInfo</name>
-<description>server-info $B%O%s%I%i$K$h$jI=<($5$l$k%b%8%e!<%k$N>pJs$K(B
-$BDI2C$N>pJs$rIU$12C$($k(B</description>
-<syntax>AddModuleInfo <var>module-name</var> <var>string</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Apache 1.3 $B0J9_(B</compatibility>
-
-<usage>
- <p>$B$3$l$O!"(B<var>string</var> $B$NFbMF$,%b%8%e!<%k(B <var>module-name</var>
- $B$N(B<strong>$BDI2C>pJs(B</strong> $B$H$7$F(B HTML
- $B$H$7$F2r<a$5$l!"I=<($5$l$k$h$&$K$7$^$9!#Nc(B:</p>
-
- <example>
- AddModuleInfo mod_deflate.c 'See &lt;a \<br />
- <indent>
- href="http://www.apache.org/docs-2.1/mod/mod_deflate.html"&gt;\<br />
- http://www.apache.org/docs-2.1/mod/mod_deflate.html&lt;/a&gt;'
- </indent>
- </example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_info.xml.meta b/docs/manual/mod/mod_info.xml.meta
deleted file mode 100644
index 7a894df494..0000000000
--- a/docs/manual/mod/mod_info.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_info</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_isapi.html b/docs/manual/mod/mod_isapi.html
deleted file mode 100644
index 2aab8b9992..0000000000
--- a/docs/manual/mod/mod_isapi.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_isapi.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_isapi.html.en b/docs/manual/mod/mod_isapi.html.en
deleted file mode 100644
index 4aff312c82..0000000000
--- a/docs/manual/mod/mod_isapi.html.en
+++ /dev/null
@@ -1,335 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_isapi - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_isapi</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_isapi.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>ISAPI Extensions within Apache for Windows</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>isapi_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_isapi.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Win32 only</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module implements the Internet Server extension API. It
- allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
- modules) to be served by Apache for Windows, subject to the
- noted restrictions.</p>
-
- <p>ISAPI extension modules (.dll files) are written by third
- parties. The Apache Group does not author these modules, so we
- provide no support for them. Please contact the ISAPI's author
- directly if you are experiencing problems running their ISAPI
- extension. <strong>Please <em>do not</em> post such problems to
- Apache's lists or bug reporting pages.</strong></p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#isapicachefile">ISAPICacheFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#isapifakeasync">ISAPIFakeAsync</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#isapilognotsupported">ISAPILogNotSupported</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#usage">Usage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#notes">Additional Notes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#journal">Programmer's Journal</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">Usage</a></h2>
-
- <p>In the server configuration file, use
- the <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> directive to
- associate ISAPI files with the <code>isapi-isa</code> handler, and map
- it to them with their file extensions. To enable any .dll file to be
- processed as an ISAPI extension, edit the httpd.conf file and add the
- following line:</p>
- <div class="example"><p><code>
- AddHandler isapi-isa .dll
- </code></p></div>
-
- <p>There is no capability within the Apache server to leave a
- requested module loaded. However, you may preload and keep a
- specific module loaded by using the following syntax in your
- httpd.conf:</p>
- <div class="example"><p><code>
- ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
- </code></p></div>
-
- <p>Whether or not you have preloaded an ISAPI extension, all
- ISAPI extensions are governed by the same permissions and
- restrictions as CGI scripts. That is, <code class="directive"><a href="../mod/core.html#options">Options</a></code> <code>ExecCGI</code> must be set for the
- directory that contains the ISAPI .dll file.</p>
-
- <p>Review the <a href="#notes">Additional Notes</a> and the <a href="#journal">Programmer's Journal</a> for additional details
- and clarification of the specific ISAPI support offered by
- <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notes" id="notes">Additional Notes</a></h2>
-
- <p>Apache's ISAPI implementation conforms to all of the ISAPI
- 2.0 specification, except for some "Microsoft-specific"
- extensions dealing with asynchronous I/O. Apache's I/O model
- does not allow asynchronous reading and writing in a manner
- that the ISAPI could access. If an ISA tries to access
- unsupported features, including async I/O, a message is placed
- in the error log to help with debugging. Since these messages
- can become a flood, the directive <code>ISAPILogNotSupported
- Off</code> exists to quiet this noise.</p>
-
- <p>Some servers, like Microsoft IIS, load the ISAPI extension
- into the server and keep it loaded until memory usage is too
- high, or unless configuration options are specified. Apache
- currently loads and unloads the ISAPI extension each time it is
- requested, unless the <code class="directive"><a href="#isapicachefile">ISAPICacheFile</a></code> directive is specified.
- This is inefficient, but Apache's memory model makes this the
- most effective method. Many ISAPI modules are subtly
- incompatible with the Apache server, and unloading these
- modules helps to ensure the stability of the server.</p>
-
- <p>Also, remember that while Apache supports ISAPI Extensions,
- it <strong>does not support ISAPI Filters</strong>. Support for
- filters may be added at a later date, but no support is planned
- at this time.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="journal" id="journal">Programmer's Journal</a></h2>
-
- <p>If you are programming Apache 2.0 <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code>
- modules, you must limit your calls to <code>ServerSupportFunction</code>
- to the following directives:</p>
-
- <dl>
- <dt><code>HSE_REQ_SEND_URL_REDIRECT_RESP</code></dt>
- <dd>Redirect the user to another location.<br />
- This must be a fully qualified URL (<em>e.g.</em>
- <code>http://server/location</code>).</dd>
-
- <dt><code>HSE_REQ_SEND_URL</code></dt>
- <dd>Redirect the user to another location.<br />
- This cannot be a fully qualified URL, you are not allowed to
- pass the protocol or a server name (<em>e.g.</em> simply
- <code>/location</code>).<br />
- This redirection is handled by the server, not the
- browser.<br />
- <div class="warning"><h3>Warning</h3>
- <p>In their recent documentation, Microsoft appears to have
- abandoned the distinction between the two
- <code>HSE_REQ_SEND_URL</code> functions. Apache continues to treat
- them as two distinct functions with different requirements
- and behaviors.</p>
- </div></dd>
-
- <dt><code>HSE_REQ_SEND_RESPONSE_HEADER</code></dt>
- <dd>Apache accepts a response body following the header if it
- follows the blank line (two consecutive newlines) in the
- headers string argument. This body cannot contain NULLs,
- since the headers argument is NULL terminated.</dd>
-
- <dt><code>HSE_REQ_DONE_WITH_SESSION</code></dt>
- <dd>Apache considers this a no-op, since the session will be
- finished when the ISAPI returns from processing.</dd>
-
- <dt><code>HSE_REQ_MAP_URL_TO_PATH</code></dt>
- <dd>Apache will translate a virtual name to a physical
- name.</dd>
-
- <dt><code>HSE_APPEND_LOG_PARAMETER</code></dt>
- <dd>
- This logged message may be captured in any of the following
- logs:
-
- <ul>
- <li>in the <code>\"%{isapi-parameter}n\"</code> component in a
- <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive</li>
-
- <li>in the <code>%q</code> log component with the
- <code class="directive"><a href="#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></code>
- <code>On</code> directive</li>
-
- <li>in the error log with the <code class="directive"><a href="#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></code> <code>On</code> directive</li>
- </ul>
-
- <p>The first option, the <code>%{isapi-parameter}n</code> component,
- is always available and preferred.</p>
- </dd>
-
- <dt><code>HSE_REQ_IS_KEEP_CONN</code></dt>
- <dd>Will return the negotiated Keep-Alive status.</dd>
-
- <dt><code>HSE_REQ_SEND_RESPONSE_HEADER_EX</code></dt>
- <dd>Will behave as documented, although the <code>fKeepConn</code>
- flag is ignored.</dd>
-
- <dt><code>HSE_REQ_IS_CONNECTED</code></dt>
- <dd>Will report false if the request has been aborted.</dd>
- </dl>
-
- <p>Apache returns <code>FALSE</code> to any unsupported call to
- <code>ServerSupportFunction</code>, and sets the
- <code>GetLastError</code> value to
- <code>ERROR_INVALID_PARAMETER</code>.</p>
-
- <p><code>ReadClient</code> retrieves the request body exceeding the
- initial buffer (defined by <code class="directive"><a href="#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></code>). Based on the
- <code class="directive">ISAPIReadAheadBuffer</code> setting (number of bytes
- to buffer prior to calling the ISAPI handler) shorter requests are sent
- complete to the extension when it is invoked. If the request is
- longer, the ISAPI extension must use <code>ReadClient</code> to
- retrieve the remaining request body.</p>
-
- <p><code>WriteClient</code> is supported, but only with the
- <code>HSE_IO_SYNC</code> flag or no option flag (value of
- <code>0</code>). Any other <code>WriteClient</code> request
- will be rejected with a return value of <code>FALSE</code>, and a
- <code>GetLastError</code> value of
- <code>ERROR_INVALID_PARAMETER</code>.</p>
-
- <p><code>GetServerVariable</code> is supported, although extended server
- variables do not exist (as defined by other servers.) All the
- usual Apache CGI environment variables are available from
- <code>GetServerVariable</code>, as well as the <code>ALL_HTTP</code>
- and <code>ALL_RAW</code> values.</p>
-
- <p>Apache 2.0 <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> supports additional
- features introduced in later versions of the ISAPI specification,
- as well as limited emulation of async I/O and the
- <code>TransmitFile</code> semantics. Apache also supports preloading
- ISAPI .dlls for performance, neither of which were not available under
- Apache 1.3 <code>mod_isapi</code>.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIAppendLogToErrors" id="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors" id="isapiappendlogtoerrors">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Record HSE_APPEND_LOG_PARAMETER requests from
-ISAPI extensions to the error log</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIAppendLogToErrors on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIAppendLogToErrors off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the server error log.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIAppendLogToQuery" id="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery" id="isapiappendlogtoquery">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Record HSE_APPEND_LOG_PARAMETER requests from
-ISAPI extensions to the query field</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIAppendLogToQuery on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIAppendLogToQuery on</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the query field (appended to the <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> <code>%q</code>
- component).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPICacheFile" id="ISAPICacheFile">ISAPICacheFile</a> <a name="isapicachefile" id="isapicachefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>ISAPI .dll files to be loaded at startup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Specifies a space-separated list of file names to be loaded
- when the Apache server is launched, and remain loaded until the
- server is shut down. This directive may be repeated for every
- ISAPI .dll file desired. The full path name of each file should
- be specified. If the path name is not absolute, it will be treated
- relative to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIFakeAsync" id="ISAPIFakeAsync">ISAPIFakeAsync</a> <a name="isapifakeasync" id="isapifakeasync">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIFakeAsync on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIFakeAsync off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>While set to on, asynchronous support for ISAPI callbacks is
- simulated.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPILogNotSupported" id="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported" id="isapilognotsupported">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPILogNotSupported on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPILogNotSupported off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Logs all requests for unsupported features from ISAPI
- extensions in the server error log. This may help administrators
- to track down problems. Once set to on and all desired ISAPI modules
- are functioning, it should be set back to off.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ISAPIReadAheadBuffer" id="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer" id="isapireadaheadbuffer">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ISAPIReadAheadBuffer <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ISAPIReadAheadBuffer 49152</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_isapi</td></tr>
-</table>
- <p>Defines the maximum size of the Read Ahead Buffer sent to
- ISAPI extensions when they are initially invoked. All remaining
- data must be retrieved using the <code>ReadClient</code> callback; some
- ISAPI extensions may not support the <code>ReadClient</code> function.
- Refer questions to the ISAPI extension's author.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_isapi.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_isapi.xml b/docs/manual/mod/mod_isapi.xml
deleted file mode 100644
index 7bf806d61e..0000000000
--- a/docs/manual/mod/mod_isapi.xml
+++ /dev/null
@@ -1,320 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_isapi.xml.meta">
-
-<name>mod_isapi</name>
-<description>ISAPI Extensions within Apache for Windows</description>
-<status>Base</status>
-<sourcefile>mod_isapi.c</sourcefile>
-<identifier>isapi_module</identifier>
-<compatibility>Win32 only</compatibility>
-
-<summary>
- <p>This module implements the Internet Server extension API. It
- allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
- modules) to be served by Apache for Windows, subject to the
- noted restrictions.</p>
-
- <p>ISAPI extension modules (.dll files) are written by third
- parties. The Apache Group does not author these modules, so we
- provide no support for them. Please contact the ISAPI's author
- directly if you are experiencing problems running their ISAPI
- extension. <strong>Please <em>do not</em> post such problems to
- Apache's lists or bug reporting pages.</strong></p>
-</summary>
-
-<section id="usage"><title>Usage</title>
-
- <p>In the server configuration file, use
- the <directive module="mod_mime">AddHandler</directive> directive to
- associate ISAPI files with the <code>isapi-isa</code> handler, and map
- it to them with their file extensions. To enable any .dll file to be
- processed as an ISAPI extension, edit the httpd.conf file and add the
- following line:</p>
- <example>
- AddHandler isapi-isa .dll
- </example>
-
- <p>There is no capability within the Apache server to leave a
- requested module loaded. However, you may preload and keep a
- specific module loaded by using the following syntax in your
- httpd.conf:</p>
- <example>
- ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
- </example>
-
- <p>Whether or not you have preloaded an ISAPI extension, all
- ISAPI extensions are governed by the same permissions and
- restrictions as CGI scripts. That is, <directive module="core"
- >Options</directive> <code>ExecCGI</code> must be set for the
- directory that contains the ISAPI .dll file.</p>
-
- <p>Review the <a href="#notes">Additional Notes</a> and the <a
- href="#journal">Programmer's Journal</a> for additional details
- and clarification of the specific ISAPI support offered by
- <module>mod_isapi</module>.</p>
-</section>
-
-<section id="notes"><title>Additional Notes</title>
-
- <p>Apache's ISAPI implementation conforms to all of the ISAPI
- 2.0 specification, except for some "Microsoft-specific"
- extensions dealing with asynchronous I/O. Apache's I/O model
- does not allow asynchronous reading and writing in a manner
- that the ISAPI could access. If an ISA tries to access
- unsupported features, including async I/O, a message is placed
- in the error log to help with debugging. Since these messages
- can become a flood, the directive <code>ISAPILogNotSupported
- Off</code> exists to quiet this noise.</p>
-
- <p>Some servers, like Microsoft IIS, load the ISAPI extension
- into the server and keep it loaded until memory usage is too
- high, or unless configuration options are specified. Apache
- currently loads and unloads the ISAPI extension each time it is
- requested, unless the <directive module="mod_isapi"
- >ISAPICacheFile</directive> directive is specified.
- This is inefficient, but Apache's memory model makes this the
- most effective method. Many ISAPI modules are subtly
- incompatible with the Apache server, and unloading these
- modules helps to ensure the stability of the server.</p>
-
- <p>Also, remember that while Apache supports ISAPI Extensions,
- it <strong>does not support ISAPI Filters</strong>. Support for
- filters may be added at a later date, but no support is planned
- at this time.</p>
-</section>
-
-<section id="journal"><title>Programmer's Journal</title>
-
- <p>If you are programming Apache 2.0 <module>mod_isapi</module>
- modules, you must limit your calls to <code>ServerSupportFunction</code>
- to the following directives:</p>
-
- <dl>
- <dt><code>HSE_REQ_SEND_URL_REDIRECT_RESP</code></dt>
- <dd>Redirect the user to another location.<br />
- This must be a fully qualified URL (<em>e.g.</em>
- <code>http://server/location</code>).</dd>
-
- <dt><code>HSE_REQ_SEND_URL</code></dt>
- <dd>Redirect the user to another location.<br />
- This cannot be a fully qualified URL, you are not allowed to
- pass the protocol or a server name (<em>e.g.</em> simply
- <code>/location</code>).<br />
- This redirection is handled by the server, not the
- browser.<br />
- <note type="warning"><title>Warning</title>
- <p>In their recent documentation, Microsoft appears to have
- abandoned the distinction between the two
- <code>HSE_REQ_SEND_URL</code> functions. Apache continues to treat
- them as two distinct functions with different requirements
- and behaviors.</p>
- </note></dd>
-
- <dt><code>HSE_REQ_SEND_RESPONSE_HEADER</code></dt>
- <dd>Apache accepts a response body following the header if it
- follows the blank line (two consecutive newlines) in the
- headers string argument. This body cannot contain NULLs,
- since the headers argument is NULL terminated.</dd>
-
- <dt><code>HSE_REQ_DONE_WITH_SESSION</code></dt>
- <dd>Apache considers this a no-op, since the session will be
- finished when the ISAPI returns from processing.</dd>
-
- <dt><code>HSE_REQ_MAP_URL_TO_PATH</code></dt>
- <dd>Apache will translate a virtual name to a physical
- name.</dd>
-
- <dt><code>HSE_APPEND_LOG_PARAMETER</code></dt>
- <dd>
- This logged message may be captured in any of the following
- logs:
-
- <ul>
- <li>in the <code>\"%{isapi-parameter}n\"</code> component in a
- <directive module="mod_log_config">CustomLog</directive>
- directive</li>
-
- <li>in the <code>%q</code> log component with the
- <directive module="mod_isapi">ISAPIAppendLogToQuery</directive>
- <code>On</code> directive</li>
-
- <li>in the error log with the <directive module="mod_isapi"
- >ISAPIAppendLogToErrors</directive> <code>On</code> directive</li>
- </ul>
-
- <p>The first option, the <code>%{isapi-parameter}n</code> component,
- is always available and preferred.</p>
- </dd>
-
- <dt><code>HSE_REQ_IS_KEEP_CONN</code></dt>
- <dd>Will return the negotiated Keep-Alive status.</dd>
-
- <dt><code>HSE_REQ_SEND_RESPONSE_HEADER_EX</code></dt>
- <dd>Will behave as documented, although the <code>fKeepConn</code>
- flag is ignored.</dd>
-
- <dt><code>HSE_REQ_IS_CONNECTED</code></dt>
- <dd>Will report false if the request has been aborted.</dd>
- </dl>
-
- <p>Apache returns <code>FALSE</code> to any unsupported call to
- <code>ServerSupportFunction</code>, and sets the
- <code>GetLastError</code> value to
- <code>ERROR_INVALID_PARAMETER</code>.</p>
-
- <p><code>ReadClient</code> retrieves the request body exceeding the
- initial buffer (defined by <directive module="mod_isapi"
- >ISAPIReadAheadBuffer</directive>). Based on the
- <directive>ISAPIReadAheadBuffer</directive> setting (number of bytes
- to buffer prior to calling the ISAPI handler) shorter requests are sent
- complete to the extension when it is invoked. If the request is
- longer, the ISAPI extension must use <code>ReadClient</code> to
- retrieve the remaining request body.</p>
-
- <p><code>WriteClient</code> is supported, but only with the
- <code>HSE_IO_SYNC</code> flag or no option flag (value of
- <code>0</code>). Any other <code>WriteClient</code> request
- will be rejected with a return value of <code>FALSE</code>, and a
- <code>GetLastError</code> value of
- <code>ERROR_INVALID_PARAMETER</code>.</p>
-
- <p><code>GetServerVariable</code> is supported, although extended server
- variables do not exist (as defined by other servers.) All the
- usual Apache CGI environment variables are available from
- <code>GetServerVariable</code>, as well as the <code>ALL_HTTP</code>
- and <code>ALL_RAW</code> values.</p>
-
- <p>Apache 2.0 <module>mod_isapi</module> supports additional
- features introduced in later versions of the ISAPI specification,
- as well as limited emulation of async I/O and the
- <code>TransmitFile</code> semantics. Apache also supports preloading
- ISAPI .dlls for performance, neither of which were not available under
- Apache 1.3 <code>mod_isapi</code>.</p>
-</section>
-
-<directivesynopsis>
-<name>ISAPICacheFile</name>
-<description>ISAPI .dll files to be loaded at startup</description>
-<syntax>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Specifies a space-separated list of file names to be loaded
- when the Apache server is launched, and remain loaded until the
- server is shut down. This directive may be repeated for every
- ISAPI .dll file desired. The full path name of each file should
- be specified. If the path name is not absolute, it will be treated
- relative to <directive module="core">ServerRoot</directive>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIReadAheadBuffer</name>
-<description>Size of the Read Ahead Buffer sent to ISAPI
-extensions</description>
-<syntax>ISAPIReadAheadBuffer <var>size</var></syntax>
-<default>ISAPIReadAheadBuffer 49152</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Defines the maximum size of the Read Ahead Buffer sent to
- ISAPI extensions when they are initially invoked. All remaining
- data must be retrieved using the <code>ReadClient</code> callback; some
- ISAPI extensions may not support the <code>ReadClient</code> function.
- Refer questions to the ISAPI extension's author.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPILogNotSupported</name>
-<description>Log unsupported feature requests from ISAPI
-extensions</description>
-<syntax>ISAPILogNotSupported on|off</syntax>
-<default>ISAPILogNotSupported off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Logs all requests for unsupported features from ISAPI
- extensions in the server error log. This may help administrators
- to track down problems. Once set to on and all desired ISAPI modules
- are functioning, it should be set back to off.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIAppendLogToErrors</name>
-<description>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</description>
-<syntax>ISAPIAppendLogToErrors on|off</syntax>
-<default>ISAPIAppendLogToErrors off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the server error log.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIAppendLogToQuery</name>
-<description>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</description>
-<syntax>ISAPIAppendLogToQuery on|off</syntax>
-<default>ISAPIAppendLogToQuery on</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the query field (appended to the <directive
- module="mod_log_config">CustomLog</directive> <code>%q</code>
- component).</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIFakeAsync</name>
-<description>Fake asynchronous support for ISAPI callbacks</description>
-<syntax>ISAPIFakeAsync on|off</syntax>
-<default>ISAPIFakeAsync off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>While set to on, asynchronous support for ISAPI callbacks is
- simulated.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_isapi.xml.meta b/docs/manual/mod/mod_isapi.xml.meta
deleted file mode 100644
index b250eef62e..0000000000
--- a/docs/manual/mod/mod_isapi.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_isapi</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_ldap.html b/docs/manual/mod/mod_ldap.html
deleted file mode 100644
index 059ee1a961..0000000000
--- a/docs/manual/mod/mod_ldap.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_ldap.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_ldap.html.en b/docs/manual/mod/mod_ldap.html.en
deleted file mode 100644
index a30d2933eb..0000000000
--- a/docs/manual/mod/mod_ldap.html.en
+++ /dev/null
@@ -1,373 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_ldap - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_ldap</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ldap.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>LDAP connection pooling and result caching services for use
-by other LDAP modules</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>ldap_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>util_ldap.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.41 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module was created to improve the performance of
- websites relying on backend connections to LDAP servers. In
- addition to the functions provided by the standard LDAP
- libraries, this module adds an LDAP connection pool and an LDAP
- shared memory cache.</p>
-
- <p>To enable this module, LDAP support must be compiled into
- apr-util. This is achieved by adding the <code>--with-ldap</code>
- flag to the <code>./configure</code> script when building
- Apache.</p>
-
- <p>SSL support requires that <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> be linked
- with one of the following LDAP SDKs: <a href="http://www.openldap.org/">
- OpenLDAP SDK</a> (both 1.x and 2.x), <a href="http://developer.novell.com/ndk/cldap.htm">
- Novell LDAP SDK</a> or the <a href="http://www.iplanet.com/downloads/developer/">
- iPlanet(Netscape)</a> SDK.</p>
-
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#ldapcacheentries">LDAPCacheEntries</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldapcachettl">LDAPCacheTTL</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldapopcacheentries">LDAPOpCacheEntries</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldapopcachettl">LDAPOpCacheTTL</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldapsharedcachefile">LDAPSharedCacheFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldapsharedcachesize">LDAPSharedCacheSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldaptrustedca">LDAPTrustedCA</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ldaptrustedcatype">LDAPTrustedCAType</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#exampleconfig">Example Configuration</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pool">LDAP Connection Pool</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cache">LDAP Cache</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#usingssltls">Using SSL</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exampleconfig" id="exampleconfig">Example Configuration</a></h2>
- <p>The following is an example configuration that uses
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> to increase the performance of HTTP Basic
- authentication provided by <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>.</p>
-
- <div class="example"><p><code>
- # Enable the LDAP connection pool and shared<br />
- # memory cache. Enable the LDAP cache status<br />
- # handler. Requires that mod_ldap and mod_auth_ldap<br />
- # be loaded. Change the "yourdomain.example.com" to<br />
- # match your domain.<br />
- <br />
- LDAPSharedCacheSize 200000<br />
- LDAPCacheEntries 1024<br />
- LDAPCacheTTL 600<br />
- LDAPOpCacheEntries 1024<br />
- LDAPOpCacheTTL 600<br />
- <br />
- &lt;Location /ldap-status&gt;<br />
- <span class="indent">
- SetHandler ldap-status<br />
- Order deny,allow<br />
- Deny from all<br />
- Allow from yourdomain.example.com<br />
- AuthLDAPEnabled on<br />
- AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one<br />
- AuthLDAPAuthoritative on<br />
- require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="pool" id="pool">LDAP Connection Pool</a></h2>
-
- <p>LDAP connections are pooled from request to request. This
- allows the LDAP server to remain connected and bound ready for
- the next request, without the need to unbind/connect/rebind.
- The performance advantages are similar to the effect of HTTP
- keepalives.</p>
-
- <p>On a busy server it is possible that many requests will try
- and access the same LDAP server connection simultaneously.
- Where an LDAP connection is in use, Apache will create a new
- connection alongside the original one. This ensures that the
- connection pool does not become a bottleneck.</p>
-
- <p>There is no need to manually enable connection pooling in
- the Apache configuration. Any module using this module for
- access to LDAP services will share the connection pool.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cache" id="cache">LDAP Cache</a></h2>
-
- <p>For improved performance, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> uses an aggressive
- caching strategy to minimize the number of times that the LDAP
- server must be contacted. Caching can easily double or triple
- the throughput of Apache when it is serving pages protected
- with mod_auth_ldap. In addition, the load on the LDAP server
- will be significantly decreased.</p>
-
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> supports two types of LDAP caching during
- the search/bind phase with a <em>search/bind cache</em> and
- during the compare phase with two <em>operation
- caches</em>. Each LDAP URL that is used by the server has
- its own set of these three caches.</p>
-
- <h3><a name="search-bind" id="search-bind">The Search/Bind Cache</a></h3>
- <p>The process of doing a search and then a bind is the
- most time-consuming aspect of LDAP operation, especially if
- the directory is large. The search/bind cache is used to
- cache all searches that resulted in successful binds.
- Negative results (<em>i.e.</em>, unsuccessful searches, or searches
- that did not result in a successful bind) are not cached.
- The rationale behind this decision is that connections with
- invalid credentials are only a tiny percentage of the total
- number of connections, so by not caching invalid
- credentials, the size of the cache is reduced.</p>
-
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> stores the username, the DN
- retrieved, the password used to bind, and the time of the bind
- in the cache. Whenever a new connection is initiated with the
- same username, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> compares the password
- of the new connection with the password in the cache. If the
- passwords match, and if the cached entry is not too old,
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> bypasses the search/bind phase.</p>
-
- <p>The search and bind cache is controlled with the <code class="directive"><a href="#ldapcacheentries">LDAPCacheEntries</a></code> and <code class="directive"><a href="#ldapcachettl">LDAPCacheTTL</a></code> directives.</p>
-
-
- <h3><a name="opcaches" id="opcaches">Operation Caches</a></h3>
- <p>During attribute and distinguished name comparison
- functions, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> uses two operation caches
- to cache the compare operations. The first compare cache is
- used to cache the results of compares done to test for LDAP
- group membership. The second compare cache is used to cache
- the results of comparisons done between distinguished
- names.</p>
-
- <p>The behavior of both of these caches is controlled with
- the <code class="directive"><a href="#ldapopcacheentries">LDAPOpCacheEntries</a></code>
- and <code class="directive"><a href="#ldapopcachettl">LDAPOpCacheTTL</a></code>
- directives.</p>
-
-
- <h3><a name="monitoring" id="monitoring">Monitoring the Cache</a></h3>
- <p><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> has a content handler that allows
- administrators to monitor the cache performance. The name of
- the content handler is <code>ldap-status</code>, so the
- following directives could be used to access the
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache information:</p>
-
- <div class="example"><p><code>
- &lt;Location /server/cache-info&gt;<br />
- <span class="indent">
- SetHandler ldap-status<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>By fetching the URL <code>http://servername/cache-info</code>,
- the administrator can get a status report of every cache that is used
- by <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> cache. Note that if Apache does not
- support shared memory, then each <code>httpd</code> instance has its
- own cache, so reloading the URL will result in different
- information each time, depending on which <code>httpd</code>
- instance processes the request.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usingssltls" id="usingssltls">Using SSL</a></h2>
-
- <p>The ability to create an SSL connections to an LDAP server
- is defined by the directives <code class="directive"><a href="#&#10; ldaptrustedca">
- LDAPTrustedCA</a></code> and <code class="directive"><a href="#&#10; ldaptrustedcatype">
- LDAPTrustedCAType</a></code>. These directives specify the certificate
- file or database and the certificate type. Whenever the LDAP url
- includes <em>ldaps://</em>, <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> will establish
- a secure connection to the LDAP server.</p>
-
- <div class="example"><p><code>
- # Establish an SSL LDAP connection. Requires that <br />
- # mod_ldap and mod_auth_ldap be loaded. Change the <br />
- # "yourdomain.example.com" to match your domain.<br />
- <br />
- LDAPTrustedCA /certs/certfile.der<br />
- LDAPTrustedCAType DER_FILE<br />
- <br />
- &lt;Location /ldap-status&gt;<br />
- <span class="indent">
- SetHandler ldap-status<br />
- Order deny,allow<br />
- Deny from all<br />
- Allow from yourdomain.example.com<br />
- AuthLDAPEnabled on<br />
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one<br />
- AuthLDAPAuthoritative on<br />
- require valid-user<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
-
- <p>If <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> is linked against the
- Netscape/iPlanet LDAP SDK, it will not talk to any SSL server
- unless that server has a certificate signed by a known Certificate
- Authority. As part of the configuration
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> needs to be told where it can find
- a database containing the known CAs. This database is in the same
- format as Netscape Communicator's <code>cert7.db</code>
- database. The easiest way to get this file is to start up a fresh
- copy of Netscape, and grab the resulting
- <code>$HOME/.netscape/cert7.db</code> file.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPCacheEntries" id="LDAPCacheEntries">LDAPCacheEntries</a> <a name="ldapcacheentries" id="ldapcacheentries">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of entries in the primary LDAP cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPCacheEntries <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPCacheEntries 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the maximum size of the primary LDAP cache. This
- cache contains successful search/binds. Set it to 0 to turn off
- search/bind caching. The default size is 1024 cached
- searches.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPCacheTTL" id="LDAPCacheTTL">LDAPCacheTTL</a> <a name="ldapcachettl" id="ldapcachettl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Time that cached items remain valid</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPCacheTTL <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPCacheTTL 600</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the time (in seconds) that an item in the
- search/bind cache remains valid. The default is 600 seconds (10
- minutes).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPOpCacheEntries" id="LDAPOpCacheEntries">LDAPOpCacheEntries</a> <a name="ldapopcacheentries" id="ldapopcacheentries">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPOpCacheEntries <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPOpCacheEntries 1024</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>This specifies the number of entries <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>
- will use to cache LDAP compare operations. The default is 1024
- entries. Setting it to 0 disables operation caching.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPOpCacheTTL" id="LDAPOpCacheTTL">LDAPOpCacheTTL</a> <a name="ldapopcachettl" id="ldapopcachettl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Time that entries in the operation cache remain
-valid</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPOpCacheTTL <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPOpCacheTTL 600</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the time (in seconds) that entries in the
- operation cache remain valid. The default is 600 seconds.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPSharedCacheFile" id="LDAPSharedCacheFile">LDAPSharedCacheFile</a> <a name="ldapsharedcachefile" id="ldapsharedcachefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the shared memory chache file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPSharedCacheFile <var>directory-path/filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the directory path and file name of the shared memory
- cache file. If not set, anonymous shared memory will be used if the
- platform supports it.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPSharedCacheSize" id="LDAPSharedCacheSize">LDAPSharedCacheSize</a> <a name="ldapsharedcachesize" id="ldapsharedcachesize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Size in bytes of the shared-memory cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPSharedCacheSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LDAPSharedCacheSize 102400</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>Specifies the number of bytes to allocate for the shared
- memory cache. The default is 100kb. If set to 0, shared memory
- caching will not be used.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPTrustedCA" id="LDAPTrustedCA">LDAPTrustedCA</a> <a name="ldaptrustedca" id="ldaptrustedca">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the file containing the trusted Certificate Authority certificate or database</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedCA <var>directory-path/filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>It specifies the directory path and file name of the trusted CA
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code> should use when establishing an SSL
- connection to an LDAP server. If using the Netscape/iPlanet Directory
- SDK, the file name should be <code>cert7.db</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LDAPTrustedCAType" id="LDAPTrustedCAType">LDAPTrustedCAType</a> <a name="ldaptrustedcatype" id="ldaptrustedcatype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specifies the type of the Certificate Authority file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LDAPTrustedCAType <var>type</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ldap</td></tr>
-</table>
- <p>The following types are supported:<br />
- DER_FILE - file in binary DER format<br />
- BASE64_FILE - file in Base64 format<br />
- CERT7_DB_PATH - Netscape certificate database file ")</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ldap.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_ldap.xml b/docs/manual/mod/mod_ldap.xml
deleted file mode 100644
index c1b3b579f2..0000000000
--- a/docs/manual/mod/mod_ldap.xml
+++ /dev/null
@@ -1,342 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_ldap.xml.meta">
-
-<name>mod_ldap</name>
-<description>LDAP connection pooling and result caching services for use
-by other LDAP modules</description>
-<status>Experimental</status>
-<sourcefile>util_ldap.c</sourcefile>
-<identifier>ldap_module</identifier>
-<compatibility>Available in version 2.0.41 and later</compatibility>
-
-<summary>
- <p>This module was created to improve the performance of
- websites relying on backend connections to LDAP servers. In
- addition to the functions provided by the standard LDAP
- libraries, this module adds an LDAP connection pool and an LDAP
- shared memory cache.</p>
-
- <p>To enable this module, LDAP support must be compiled into
- apr-util. This is achieved by adding the <code>--with-ldap</code>
- flag to the <code>./configure</code> script when building
- Apache.</p>
-
- <p>SSL support requires that <module>mod_ldap</module> be linked
- with one of the following LDAP SDKs: <a href="http://www.openldap.org/">
- OpenLDAP SDK</a> (both 1.x and 2.x), <a href="http://developer.novell.com/ndk/cldap.htm">
- Novell LDAP SDK</a> or the <a href="http://www.iplanet.com/downloads/developer/">
- iPlanet(Netscape)</a> SDK.</p>
-
-</summary>
-
-<section id="exampleconfig"><title>Example Configuration</title>
- <p>The following is an example configuration that uses
- <module>mod_ldap</module> to increase the performance of HTTP Basic
- authentication provided by <module>mod_auth_ldap</module>.</p>
-
- <example>
- # Enable the LDAP connection pool and shared<br />
- # memory cache. Enable the LDAP cache status<br />
- # handler. Requires that mod_ldap and mod_auth_ldap<br />
- # be loaded. Change the "yourdomain.example.com" to<br />
- # match your domain.<br />
- <br />
- LDAPSharedCacheSize 200000<br />
- LDAPCacheEntries 1024<br />
- LDAPCacheTTL 600<br />
- LDAPOpCacheEntries 1024<br />
- LDAPOpCacheTTL 600<br />
- <br />
- &lt;Location /ldap-status&gt;<br />
- <indent>
- SetHandler ldap-status<br />
- Order deny,allow<br />
- Deny from all<br />
- Allow from yourdomain.example.com<br />
- AuthLDAPEnabled on<br />
- AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one<br />
- AuthLDAPAuthoritative on<br />
- require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-</section>
-
-<section id="pool"><title>LDAP Connection Pool</title>
-
- <p>LDAP connections are pooled from request to request. This
- allows the LDAP server to remain connected and bound ready for
- the next request, without the need to unbind/connect/rebind.
- The performance advantages are similar to the effect of HTTP
- keepalives.</p>
-
- <p>On a busy server it is possible that many requests will try
- and access the same LDAP server connection simultaneously.
- Where an LDAP connection is in use, Apache will create a new
- connection alongside the original one. This ensures that the
- connection pool does not become a bottleneck.</p>
-
- <p>There is no need to manually enable connection pooling in
- the Apache configuration. Any module using this module for
- access to LDAP services will share the connection pool.</p>
-</section>
-
-<section id="cache"><title>LDAP Cache</title>
-
- <p>For improved performance, <module>mod_ldap</module> uses an aggressive
- caching strategy to minimize the number of times that the LDAP
- server must be contacted. Caching can easily double or triple
- the throughput of Apache when it is serving pages protected
- with mod_auth_ldap. In addition, the load on the LDAP server
- will be significantly decreased.</p>
-
- <p><module>mod_ldap</module> supports two types of LDAP caching during
- the search/bind phase with a <em>search/bind cache</em> and
- during the compare phase with two <em>operation
- caches</em>. Each LDAP URL that is used by the server has
- its own set of these three caches.</p>
-
- <section id="search-bind"><title>The Search/Bind Cache</title>
- <p>The process of doing a search and then a bind is the
- most time-consuming aspect of LDAP operation, especially if
- the directory is large. The search/bind cache is used to
- cache all searches that resulted in successful binds.
- Negative results (<em>i.e.</em>, unsuccessful searches, or searches
- that did not result in a successful bind) are not cached.
- The rationale behind this decision is that connections with
- invalid credentials are only a tiny percentage of the total
- number of connections, so by not caching invalid
- credentials, the size of the cache is reduced.</p>
-
- <p><module>mod_ldap</module> stores the username, the DN
- retrieved, the password used to bind, and the time of the bind
- in the cache. Whenever a new connection is initiated with the
- same username, <module>mod_ldap</module> compares the password
- of the new connection with the password in the cache. If the
- passwords match, and if the cached entry is not too old,
- <module>mod_ldap</module> bypasses the search/bind phase.</p>
-
- <p>The search and bind cache is controlled with the <directive
- module="mod_ldap">LDAPCacheEntries</directive> and <directive
- module="mod_ldap">LDAPCacheTTL</directive> directives.</p>
- </section>
-
- <section id="opcaches"><title>Operation Caches</title>
- <p>During attribute and distinguished name comparison
- functions, <module>mod_ldap</module> uses two operation caches
- to cache the compare operations. The first compare cache is
- used to cache the results of compares done to test for LDAP
- group membership. The second compare cache is used to cache
- the results of comparisons done between distinguished
- names.</p>
-
- <p>The behavior of both of these caches is controlled with
- the <directive module="mod_ldap">LDAPOpCacheEntries</directive>
- and <directive module="mod_ldap">LDAPOpCacheTTL</directive>
- directives.</p>
- </section>
-
- <section id="monitoring"><title>Monitoring the Cache</title>
- <p><module>mod_ldap</module> has a content handler that allows
- administrators to monitor the cache performance. The name of
- the content handler is <code>ldap-status</code>, so the
- following directives could be used to access the
- <module>mod_ldap</module> cache information:</p>
-
- <example>
- &lt;Location /server/cache-info&gt;<br />
- <indent>
- SetHandler ldap-status<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>By fetching the URL <code>http://servername/cache-info</code>,
- the administrator can get a status report of every cache that is used
- by <module>mod_ldap</module> cache. Note that if Apache does not
- support shared memory, then each <code>httpd</code> instance has its
- own cache, so reloading the URL will result in different
- information each time, depending on which <code>httpd</code>
- instance processes the request.</p>
- </section>
-</section>
-
-<section id="usingssltls"><title>Using SSL</title>
-
- <p>The ability to create an SSL connections to an LDAP server
- is defined by the directives <directive module="mod_ldap">
- LDAPTrustedCA</directive> and <directive module="mod_ldap">
- LDAPTrustedCAType</directive>. These directives specify the certificate
- file or database and the certificate type. Whenever the LDAP url
- includes <em>ldaps://</em>, <module>mod_ldap</module> will establish
- a secure connection to the LDAP server.</p>
-
- <example>
- # Establish an SSL LDAP connection. Requires that <br />
- # mod_ldap and mod_auth_ldap be loaded. Change the <br />
- # "yourdomain.example.com" to match your domain.<br />
- <br />
- LDAPTrustedCA /certs/certfile.der<br />
- LDAPTrustedCAType DER_FILE<br />
- <br />
- &lt;Location /ldap-status&gt;<br />
- <indent>
- SetHandler ldap-status<br />
- Order deny,allow<br />
- Deny from all<br />
- Allow from yourdomain.example.com<br />
- AuthLDAPEnabled on<br />
- AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one<br />
- AuthLDAPAuthoritative on<br />
- require valid-user<br />
- </indent>
- &lt;/Location&gt;
- </example>
-
- <p>If <module>mod_ldap</module> is linked against the
- Netscape/iPlanet LDAP SDK, it will not talk to any SSL server
- unless that server has a certificate signed by a known Certificate
- Authority. As part of the configuration
- <module>mod_ldap</module> needs to be told where it can find
- a database containing the known CAs. This database is in the same
- format as Netscape Communicator's <code>cert7.db</code>
- database. The easiest way to get this file is to start up a fresh
- copy of Netscape, and grab the resulting
- <code>$HOME/.netscape/cert7.db</code> file.</p>
-
-</section>
-
-<directivesynopsis>
-<name>LDAPSharedCacheSize</name>
-<description>Size in bytes of the shared-memory cache</description>
-<syntax>LDAPSharedCacheSize <var>bytes</var></syntax>
-<default>LDAPSharedCacheSize 102400</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies the number of bytes to allocate for the shared
- memory cache. The default is 100kb. If set to 0, shared memory
- caching will not be used.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPSharedCacheFile</name>
-<description>Sets the shared memory chache file</description>
-<syntax>LDAPSharedCacheFile <var>directory-path/filename</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies the directory path and file name of the shared memory
- cache file. If not set, anonymous shared memory will be used if the
- platform supports it.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPCacheEntries</name>
-<description>Maximum number of entries in the primary LDAP cache</description>
-<syntax>LDAPCacheEntries <var>number</var></syntax>
-<default>LDAPCacheEntries 1024</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies the maximum size of the primary LDAP cache. This
- cache contains successful search/binds. Set it to 0 to turn off
- search/bind caching. The default size is 1024 cached
- searches.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPCacheTTL</name>
-<description>Time that cached items remain valid</description>
-<syntax>LDAPCacheTTL <var>seconds</var></syntax>
-<default>LDAPCacheTTL 600</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies the time (in seconds) that an item in the
- search/bind cache remains valid. The default is 600 seconds (10
- minutes).</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPOpCacheEntries</name>
-<description>Number of entries used to cache LDAP compare
-operations</description>
-<syntax>LDAPOpCacheEntries <var>number</var></syntax>
-<default>LDAPOpCacheEntries 1024</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>This specifies the number of entries <module>mod_ldap</module>
- will use to cache LDAP compare operations. The default is 1024
- entries. Setting it to 0 disables operation caching.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPOpCacheTTL</name>
-<description>Time that entries in the operation cache remain
-valid</description>
-<syntax>LDAPOpCacheTTL <var>seconds</var></syntax>
-<default>LDAPOpCacheTTL 600</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies the time (in seconds) that entries in the
- operation cache remain valid. The default is 600 seconds.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPTrustedCA</name>
-<description>Sets the file containing the trusted Certificate Authority certificate or database</description>
-<syntax>LDAPTrustedCA <var>directory-path/filename</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>It specifies the directory path and file name of the trusted CA
- <module>mod_ldap</module> should use when establishing an SSL
- connection to an LDAP server. If using the Netscape/iPlanet Directory
- SDK, the file name should be <code>cert7.db</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LDAPTrustedCAType</name>
-<description>Specifies the type of the Certificate Authority file</description>
-<syntax>LDAPTrustedCAType <var>type</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The following types are supported:<br />
- DER_FILE - file in binary DER format<br />
- BASE64_FILE - file in Base64 format<br />
- CERT7_DB_PATH - Netscape certificate database file ")</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_ldap.xml.meta b/docs/manual/mod/mod_ldap.xml.meta
deleted file mode 100644
index a66e24a5cb..0000000000
--- a/docs/manual/mod/mod_ldap.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_ldap</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_log_config.html b/docs/manual/mod/mod_log_config.html
deleted file mode 100644
index 77ce863854..0000000000
--- a/docs/manual/mod/mod_log_config.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_log_config.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_log_config.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mod_log_config.html.en b/docs/manual/mod/mod_log_config.html.en
deleted file mode 100644
index 1f9cb59966..0000000000
--- a/docs/manual/mod/mod_log_config.html.en
+++ /dev/null
@@ -1,425 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_log_config - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_log_config</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_log_config.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_log_config.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Logging of the requests made to the server</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>log_config_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_log_config.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides for flexible logging of client
- requests. Logs are written in a customizable format, and may be
- written directly to a file, or to an external program.
- Conditional logging is provided so that individual requests may
- be included or excluded from the logs based on characteristics
- of the request.</p>
-
- <p>Three directives are provided by this module:
- <code class="directive"><a href="#transferlog">TransferLog</a></code> to create
- a log file, <code class="directive"><a href="#logformat">LogFormat</a></code>
- to set a custom format, and <code class="directive"><a href="#customlog">CustomLog</a></code> to define a log file and format in one
- step. The <code class="directive">TransferLog</code> and <code class="directive">CustomLog</code> directives can be used multiple times in each
- server to cause each request to be logged to multiple files.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cookielog">CookieLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#customlog">CustomLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#logformat">LogFormat</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#transferlog">TransferLog</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#formats">Custom Log Formats</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">Security Considerations</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../logs.html">Apache Log Files</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">Custom Log Formats</a></h2>
-
- <p>The format argument to the <code class="directive"><a href="#logformat">LogFormat</a></code> and <code class="directive"><a href="#customlog">CustomLog</a></code> directives is a string. This string is
- used to log each request to the log file. It can contain literal
- characters copied into the log files and the C-style control
- characters "\n" and "\t" to represent new-lines and tabs.
- Literal quotes and back-slashes should be escaped with
- back-slashes.</p>
-
- <p>The characteristics of the request itself are logged by
- placing "<code>%</code>" directives in the format string, which are
- replaced in the log file by the values as follows:</p>
-
- <table class="bordered"><tr class="header"><th>Format&nbsp;String</th>
- <th>Description</th></tr>
-<tr><td><code>%%</code></td>
- <td>The percent sign</td></tr>
-<tr class="odd"><td><code>%...a</code></td>
- <td>Remote IP-address</td></tr>
-<tr><td><code>%...A</code></td>
- <td>Local IP-address</td></tr>
-<tr class="odd"><td><code>%...B</code></td>
- <td>Bytes sent, excluding HTTP headers.</td></tr>
-<tr><td><code>%...b</code></td>
- <td>Bytes sent, excluding HTTP headers. In CLF format, <em>i.e.</em>
- a '<code>-</code>' rather than a 0 when no bytes are sent.</td></tr>
-<tr class="odd"><td><code>%...{<var>Foobar</var>}C</code></td>
- <td>The contents of cookie <var>Foobar</var> in the request sent
- to the server.</td></tr>
-<tr><td><code>%...D</code></td>
- <td>The time taken to serve the request, in microseconds.</td></tr>
-<tr class="odd"><td><code>%...{<var>FOOBAR</var>}e</code></td>
- <td>The contents of the environment variable
- <var>FOOBAR</var></td></tr>
-<tr><td><code>%...f</code></td>
- <td>Filename</td></tr>
-<tr class="odd"><td><code>%...h</code></td>
- <td>Remote host</td></tr>
-<tr><td><code>%...H</code></td>
- <td>The request protocol</td></tr>
-<tr class="odd"><td><code>%...{<var>Foobar</var>}i</code></td>
- <td>The contents of <code><var>Foobar</var>:</code> header line(s)
- in the request sent to the server.</td></tr>
-<tr><td><code>%...l</code></td>
- <td>Remote logname (from identd, if supplied). This will return a
- dash unless <code class="module"><a href="../mod/mod_ident.html">mod_ident</a></code> is present and <code class="directive"><a href="../mod/mod_ident.html#identitycheck">IdentityCheck</a></code> is set
- <code>On</code>.</td></tr>
-<tr class="odd"><td><code>%...m</code></td>
- <td>The request method</td></tr>
-<tr><td><code>%...{<var>Foobar</var>}n</code></td>
- <td>The contents of note <var>Foobar</var> from another
- module.</td></tr>
-<tr class="odd"><td><code>%...{<var>Foobar</var>}o</code></td>
- <td>The contents of <code><var>Foobar</var>:</code> header line(s)
- in the reply.</td></tr>
-<tr><td><code>%...p</code></td>
- <td>The canonical port of the server serving the request</td></tr>
-<tr class="odd"><td><code>%...P</code></td>
- <td>The process ID of the child that serviced the request.</td></tr>
-<tr><td><code>%...{<var>format</var>}P</code></td>
- <td>The process ID or thread id of the child that serviced the
- request. Valid formats are <code>pid</code> and <code>tid</code>.
- </td></tr>
-<tr class="odd"><td><code>%...q</code></td>
- <td>The query string (prepended with a <code>?</code> if a query
- string exists, otherwise an empty string)</td></tr>
-<tr><td><code>%...r</code></td>
- <td>First line of request</td></tr>
-<tr class="odd"><td><code>%...s</code></td>
- <td>Status. For requests that got internally redirected, this is
- the status of the *original* request --- <code>%...&gt;s</code>
- for the last.</td></tr>
-<tr><td><code>%...t</code></td>
- <td>Time, in common log format time format (standard english
- format)</td></tr>
-<tr class="odd"><td><code>%...{<var>format</var>}t</code></td>
- <td>The time, in the form given by format, which should be in
- <code>strftime(3)</code> format. (potentially localized)</td></tr>
-<tr><td><code>%...T</code></td>
- <td>The time taken to serve the request, in seconds.</td></tr>
-<tr class="odd"><td><code>%...u</code></td>
- <td>Remote user (from auth; may be bogus if return status
- (<code>%s</code>) is 401)</td></tr>
-<tr><td><code>%...U</code></td>
- <td>The URL path requested, not including any query string.</td></tr>
-<tr class="odd"><td><code>%...v</code></td>
- <td>The canonical <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>
- of the server serving the request.</td></tr>
-<tr><td><code>%...V</code></td>
- <td>The server name according to the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> setting.</td></tr>
-<tr class="odd"><td><code>%...X</code></td>
- <td>Connection status when response is completed:
-
- <table>
-
- <tr><td><code>X</code> =</td>
- <td>connection aborted before the response completed.</td></tr>
- <tr><td><code>+</code> =</td>
- <td>connection may be kept alive after the response is
- sent.</td></tr>
- <tr><td><code>-</code> = </td>
- <td>connection will be closed after the response is
- sent.</td></tr>
- </table>
-
- <p>(This directive was <code>%...c</code> in late versions of Apache
- 1.3, but this conflicted with the historical ssl
- <code>%...{<var>var</var>}c</code> syntax.)</p></td></tr>
-<tr><td><code>%...I</code></td>
- <td>Bytes received, including request and headers, cannot be zero.
- You need to enable <code class="module"><a href="../mod/mod_logio.html">mod_logio</a></code> to use this.</td></tr>
-<tr class="odd"><td><code>%...O</code></td>
- <td>Bytes sent, including headers, cannot be zero. You need to
- enable <code class="module"><a href="../mod/mod_logio.html">mod_logio</a></code> to use this.</td></tr>
-</table>
-
- <p>The "<var>...</var>" can be nothing at all (<em>e.g.</em>,
- <code>"%h %u %r %s %b"</code>), or it can indicate conditions for
- inclusion of the item (which will cause it to be replaced with "-" if
- the condition is not met). The forms of condition are a list of
- HTTP status codes, which may or may not be preceded by "!".
- Thus, "%400,501{User-agent}i" logs <code>User-agent:</code> on 400
- errors and 501 errors (Bad Request, Not Implemented) only;
- "%!200,304,302{Referer}i" logs <code>Referer:</code> on all requests
- which did <em>not</em> return some sort of normal status.</p>
-
- <p>The modifiers "&lt;" and "&gt;" can be used for requests that
- have been internally redirected to choose whether the original or
- final (respectively) request should be consulted. By default, the
- <code>%</code> directives <code>%s, %U, %T, %D,</code> and
- <code>%r</code> look at the original request while all others look
- at the final request. So for example, <code>%&gt;s</code> can be
- used to record the final status of the request and
- <code>%&lt;u</code> can be used to record the original
- authenticated user on a request that is internally redirected to an
- unauthenticated resource.</p>
-
- <p>Note that in httpd 2.0 versions prior to 2.0.46, no escaping was performed
- on the strings from <code>%...r</code>, <code>%...i</code> and
- <code>%...o</code>. This was mainly to comply with the requirements of
- the Common Log Format. This implied that clients could insert control
- characters into the log, so you had to be quite careful when dealing
- with raw log files.</p>
-
- <p>For security reasons, starting with 2.0.46, non-printable and
- other special characters are escaped mostly by using
- <code>\x<var>hh</var></code> sequences, where <var>hh</var> stands for
- the hexadecimal representation of the raw byte. Exceptions from this
- rule are <code>"</code> and <code>\</code> which are escaped by prepending
- a backslash, and all whitespace characters which are written in their
- C-style notation (<code>\n</code>, <code>\t</code> etc).</p>
-
- <p>Some commonly used log format strings are:</p>
-
- <dl>
- <dt>Common Log Format (CLF)</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>Common Log Format with Virtual Host</dt>
- <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>NCSA extended/combined log format</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\""</code></dd>
-
- <dt>Referer log format</dt>
- <dd><code>"%{Referer}i -&gt; %U"</code></dd>
-
- <dt>Agent (Browser) log format</dt>
- <dd><code>"%{User-agent}i"</code></dd>
- </dl>
-
- <p>Note that the canonical <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> and <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> of the server serving the
- request are used for <code>%v</code> and <code>%p</code>
- respectively. This happens regardless of the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> setting
- because otherwise log analysis programs would have to duplicate
- the entire vhost matching algorithm in order to decide what
- host really served the request.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Security Considerations</a></h2>
- <p>See the <a href="../misc/security_tips.html#serverroot">security tips</a>
- document for details on why your security could be compromised
- if the directory where logfiles are stored is writable by
- anyone other than the user that starts the server.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieLog" id="CookieLog">CookieLog</a> <a name="cookielog" id="cookielog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename for the logging of cookies</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CookieLog <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>This directive is deprecated.</td></tr>
-</table>
- <p>The <code class="directive">CookieLog</code> directive sets the
- filename for logging of cookies. The filename is relative to the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. This directive is
- included only for compatibility with <code>mod_cookies</code>,
- and is deprecated.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename and format of log file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>The <code class="directive">CustomLog</code> directive is used to
- log requests to the server. A log format is specified, and the
- logging can optionally be made conditional on request
- characteristics using environment variables.</p>
-
- <p>The first argument, which specifies the location to which
- the logs will be written, can take one of the following two
- types of values:</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd>A filename, relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>The pipe character "<code>|</code>", followed by the path
- to a program to receive the log information on its standard
- input.
-
- <div class="warning"><h3>Security:</h3>
- <p>If a program is used, then it will be run as the user who
- started httpd. This will be root if the server was started by root;
- be sure that the program is secure.</p>
- </div>
- <div class="warning"><h3>Note</h3>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </div></dd>
- </dl>
-
- <p>The second argument specifies what will be written to the
- log file. It can specify either a <var>nickname</var> defined by
- a previous <code class="directive"><a href="#logformat">LogFormat</a></code>
- directive, or it can be an explicit <var>format</var> string as
- described in the <a href="#formats">log formats</a> section.</p>
-
- <p>For example, the following two sets of directives have
- exactly the same effect:</p>
-
- <div class="example"><p><code>
- # CustomLog with format nickname<br />
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # CustomLog with explicit format string<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
- </code></p></div>
-
- <p>The third argument is optional and controls whether or
- not to log a particular request based on the
- presence or absence of a particular variable in the server
- environment. If the specified <a href="../env.html">environment
- variable</a> is set for the request (or is not set, in the case
- of a '<code>env=!<var>name</var></code>' clause), then the
- request will be logged.</p>
-
- <p>Environment variables can be set on a per-request
- basis using the <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
- and/or <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> modules. For
- example, if you want to record requests for all GIF
- images on your server in a separate logfile but not in your main
- log, you can use:</p>
-
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Describes a format for use in a log file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>This directive specifies the format of the access log
- file.</p>
-
- <p>The <code class="directive">LogFormat</code> directive can take one of two
- forms. In the first form, where only one argument is specified,
- this directive sets the log format which will be used by logs
- specified in subsequent <code class="directive">TransferLog</code>
- directives. The single argument can specify an explicit
- <var>format</var> as discussed in the <a href="#formats">custom log
- formats</a> section above. Alternatively, it can use a
- <var>nickname</var> to refer to a log format defined in a
- previous <code class="directive">LogFormat</code> directive as described
- below.</p>
-
- <p>The second form of the <code class="directive">LogFormat</code>
- directive associates an explicit <var>format</var> with a
- <var>nickname</var>. This <var>nickname</var> can then be used in
- subsequent <code class="directive">LogFormat</code> or
- <code class="directive"><a href="#customlog">CustomLog</a></code> directives
- rather than repeating the entire format string. A
- <code class="directive">LogFormat</code> directive that defines a nickname
- <strong>does nothing else</strong> -- that is, it <em>only</em>
- defines the nickname, it doesn't actually apply the format and make
- it the default. Therefore, it will not affect subsequent
- <code class="directive"><a href="#transferlog">TransferLog</a></code> directives.
- In addition, <code class="directive">LogFormat</code> cannot use one nickname
- to define another nickname. Note that the nickname should not contain
- percent signs (<code>%</code>).</p>
-
- <div class="example"><h3>Example</h3><p><code>
- LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify location of a log file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>This directive has exactly the same arguments and effect as
- the <code class="directive"><a href="#customlog">CustomLog</a></code>
- directive, with the exception that it does not allow the log format
- to be specified explicitly or for conditional logging of requests.
- Instead, the log format is determined by the most recently specified
- <code class="directive"><a href="#logformat">LogFormat</a></code> directive
- which does not define a nickname. Common Log Format is used if no
- other format has been specified.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_log_config.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_log_config.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_log_config.html.ja.euc-jp b/docs/manual/mod/mod_log_config.html.ja.euc-jp
deleted file mode 100644
index a8bc0b131a..0000000000
--- a/docs/manual/mod/mod_log_config.html.ja.euc-jp
+++ /dev/null
@@ -1,421 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_log_config - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_log_config</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_log_config.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_log_config.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<div class="outofdate">This translation may be out of date. Check the
- English version for recent changes.</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Î¥í¥®¥ó¥°</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>log_config_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_log_config.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>
- ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ò½ÀÆð¤Ë¥í¥°¼ý½¸¤¹¤ëµ¡Ç½¤ò
- Ä󶡤·¤Þ¤¹¡£¥í¥°¤Ï¥«¥¹¥¿¥Þ¥¤¥º²Äǽ¤Ê½ñ¼°¤Ç½ñ¤«¤ì¡¢¥Õ¥¡¥¤¥ë¤ËľÀÜ
- ½ñ¤¤¤¿¤ê¡¢³°Éô¥×¥í¥°¥é¥à¤ËÅϤ·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¸Ä¡¹¤Î¥ê¥¯¥¨¥¹¥È¤ò
- ÆÃħ¤Ë±þ¤¸¤Æ¥í¥°¤Ë½ñ¤¤¤¿¤ê½ñ¤«¤Ê¤«¤Ã¤¿¤ê¤Ç¤­¤ë¤è¤¦¤Ë¡¢¾ò·ï¤Ë¤è¤ë
- ¥í¥°¼ý½¸¤âÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï»°¤Ä¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥ÖÄ󶡤·¤Þ¤¹:
- ¥í¥°¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë¤¿¤á¤Î <code class="directive"><a href="#transferlog">TransferLog</a></code>,
- ¿·¤·¤¤½ñ¼°¤ò ÄêµÁ¤¹¤ë <code class="directive"><a href="#logformat">LogFormat</a></code>,
- ¥í¥°¥Õ¥¡¥¤¥ë¤È ½ñ¼°¤ò°ìÅÙ¤ËÄêµÁ¤¹¤ë <code class="directive"><a href="#customlog">CustomLog</a></code> ¤Ç¤¹¡£
- ³Æ¥ê¥¯¥¨¥¹¥È¤¬Ê£¿ô²ó¥í¥°¼ý½¸¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë
- <code class="directive">TransferLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive">CustomLog</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÊ£¿ô²ó»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cookielog">CookieLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#customlog">CustomLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#logformat">LogFormat</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#transferlog">TransferLog</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#formats">¥«¥¹¥¿¥à¥í¥°½ñ¼°</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤·¤Æ</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../logs.html">Apache ¥í¥°¥Õ¥¡¥¤¥ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">¥«¥¹¥¿¥à¥í¥°½ñ¼°</a></h2>
-
- <p><code class="directive"><a href="#logformat">LogFormat</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#customlog">CustomLog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ñ¼°¤ò»ØÄꤹ¤ë°ú¿ô¤Ïʸ»úÎó¤Ç¤¹¡£¤³¤Îʸ»úÎó¤ò»È¤Ã¤Æ¤½¤ì¤¾¤ì¤Î
- ¥ê¥¯¥¨¥¹¥È¤¬¥í¥°¥Õ¥¡¥¤¥ë¤Ë¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹¡£¤½¤Îʸ»úÎó¤Ë¤Ï
- ¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤½¤Î¤Þ¤Þ
- ½ñ¤«¤ì¤ëʸ»úÎó¤ä¡¢¤½¤ì¤¾¤ì²þ¹Ô¤È¥¿¥Ö¤ò¸½¤¹ C ¸À¸ì
- ·Á¼°¤ÎÀ©¸æʸ»ú "\n" ¤È "\t"
- ¤È¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤Î¤Þ¤Þ½ÐÎϤµ¤»¤¿¤¤°úÍÑÉä¤È¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ï
- ¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ç¥¨¥¹¥±¡¼¥×¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥ê¥¯¥¨¥¹¥È¤ÎÆÃħ¤½¤Î¤â¤Î¤Ï "<code>%</code>"
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¼°¤Îʸ»úÎó¤Ë½ñ¤¯¤³¤È¤Ç
- ¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹¡£"%"
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥í¥°¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ï°Ê²¼¤Î¤è¤¦¤Ê
- ÃͤÇÃÖ´¹¤µ¤ì¤Þ¤¹:</p>
-
- <table class="bordered"><tr class="header"><th>¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó</th>
- <th>ÀâÌÀ</th></tr>
-<tr><td><code>%%</code></td>
- <td>¥Ñ¡¼¥»¥ó¥Èµ­¹æ</td></tr>
-<tr class="odd"><td><code>%...a</code></td>
- <td>¥ê¥â¡¼¥È IP ¥¢¥É¥ì¥¹</td></tr>
-<tr><td><code>%...A</code></td>
- <td>¥í¡¼¥«¥ë IP ¥¢¥É¥ì¥¹</td></tr>
-<tr class="odd"><td><code>%...B</code></td>
- <td>HTTP ¥Ø¥Ã¥À°Ê³°¤ÎÁ÷¤é¤ì¤¿¥Ð¥¤¥È¿ô</td></tr>
-<tr><td><code>%...b</code></td>
- <td>HTTP ¥Ø¥Ã¥À°Ê³°¤ÎÁ÷¤é¤ì¤¿¥Ð¥¤¥È¿ô¡£CLF ½ñ¼°¡£
- <em>¤¹¤Ê¤ï¤Á</em>¡¢1 ¥Ð¥¤¥È¤âÁ÷¤é¤ì¤Ê¤«¤Ã¤¿¤È¤­¤Ï 0 ¤Ç¤Ï¤Ê¤¯¡¢
- '<code>-</code>' ¤Ë¤Ê¤ë</td></tr>
-<tr class="odd"><td><code>%...{<var>Foobar</var>}C</code></td>
- <td>¥µ¡¼¥Ð¤ËÁ÷¤é¤ì¤¿¥ê¥¯¥¨¥¹¥ÈÃæ¤Î¥¯¥Ã¥­¡¼ <var>Foobar</var> ¤ÎÃÍ</td></tr>
-<tr><td><code>%...D</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤¹¤ë¤Î¤Ë¤«¤«¤Ã¤¿»þ´Ö¡¢¥ß¥êÉÃñ°Ì</td></tr>
-<tr class="odd"><td><code>%...{<var>FOOBAR</var>}e</code></td>
- <td>´Ä¶­ÊÑ¿ô <var>FOOBAR</var> ¤ÎÆâÍÆ</td></tr>
-<tr><td><code>%...f</code></td>
- <td>¥Õ¥¡¥¤¥ë̾</td></tr>
-<tr class="odd"><td><code>%...h</code></td>
- <td>¥ê¥â¡¼¥È¥Û¥¹¥È</td></tr>
-<tr><td><code>%...H</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¥×¥í¥È¥³¥ë</td></tr>
-<tr class="odd"><td><code>%...{<var>Foobar</var>}i</code></td>
- <td>¥µ¡¼¥Ð¤ËÁ÷¤é¤ì¤¿¥ê¥¯¥¨¥¹¥È¤Î <code><var>Foobar</var>:</code>
- ¥Ø¥Ã¥À¤ÎÆâÍÆ</td></tr>
-<tr><td><code>%...l</code></td>
- <td>(identd ¤«¤é¤â¤·Ä󶡤µ¤ì¤Æ¤¤¤ì¤Ð) ¥ê¥â¡¼¥È¥í¥°Ì¾¡£
- ¤³¤ì¤Ï <code class="module"><a href="../mod/mod_ident.html">mod_ident</a></code> ¤¬¥µ¡¼¥Ð¤Ë¸ºß¤·¤Æ¡¢
- <code class="directive"><a href="../mod/mod_ident.html#identitycheck">IdentityCheck</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ <code>On</code> ¤ËÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢
- <code>-</code> ¤Ë¤Ê¤ê¤Þ¤¹¡£</td></tr>
-<tr class="odd"><td><code>%...m</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¥á¥½¥Ã¥É</td></tr>
-<tr><td><code>%...{<var>Foobar</var>}n</code></td>
- <td>¾¤Î¥â¥¸¥å¡¼¥ë¤«¤é¤Î¥á¥â <var>Foobar</var> ¤ÎÆâÍÆ</td></tr>
-<tr class="odd"><td><code>%...{<var>Foobar</var>}o</code></td>
- <td>±þÅú¤Î <code><var>Foobar</var>:</code> ¥Ø¥Ã¥À¤ÎÆâÍÆ</td></tr>
-<tr><td><code>%...p</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤ë¥µ¡¼¥Ð¤ÎÀµ¼°¤Ê¥Ý¡¼¥È</td></tr>
-<tr class="odd"><td><code>%...P</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤¿»Ò¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ ID</td></tr>
-<tr><td><code>%...{<var>format</var>}P</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤¿¥ï¡¼¥«¡¼¤Î¥×¥í¥»¥¹ ID ¤«¥¹¥ì¥Ã¥É ID¡£
- <var>format</var> ¤È¤·¤ÆÍ­¸ú¤ÊÃÍ¤Ï <code>pid</code> ¤È <code>tid</code>
- </td></tr>
-<tr class="odd"><td><code>%...q</code></td>
- <td>Ì䤤¹ç¤»Ê¸»úÎó (¸ºß¤¹¤ë¾ì¹ç¤ÏÁ°¤Ë <code>?</code> ¤¬Äɲ䵤ì¤ë¡£
- ¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¶õʸ»úÎó)</td></tr>
-<tr><td><code>%...r</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ÎºÇ½é¤Î¹Ô</td></tr>
-<tr class="odd"><td><code>%...s</code></td>
- <td>¥¹¥Æ¡¼¥¿¥¹¡£ÆâÉô¤Ç¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤¿¥ê¥¯¥¨¥¹¥È¤Ï¡¢¸µ¡¹¤Î
- ¥ê¥¯¥¨¥¹¥È¤Î¥¹¥Æ¡¼¥¿¥¹ --- ºÇ¸å¤Î¥¹¥Æ¡¼¥¿¥¹¤Ï <code>%...&gt;s</code>
- </td></tr>
-<tr><td><code>%...t</code></td>
- <td>»þ¹ï¡£CLF ¤Î»þ¹ï¤Î½ñ¼° (ɸ½à¤Î±Ñ¸ì¤Î½ñ¼°)</td></tr>
-<tr class="odd"><td><code>%...{<var>format</var>}t</code></td>
- <td><var>format</var> ¤ÇÍ¿¤¨¤é¤ì¤¿½ñ¼°¤Ë¤è¤ë»þ¹ï¡£format ¤Ï
- <code>strftime (3)</code> ¤Î
- ½ñ¼°¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¡£(ÃÏ°è²½¤µ¤ì¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë)</td></tr>
-<tr><td><code>%...T</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¤Î¤Ë¤«¤«¤Ã¤¿»þ´Ö¡¢ÉÃñ°Ì</td></tr>
-<tr class="odd"><td><code>%...u</code></td>
- <td>¥ê¥â¡¼¥È¥æ¡¼¥¶ (ǧ¾Ú¤Ë¤è¤ë¤â¤Î¡£¥¹¥Æ¡¼¥¿¥¹ (<code>%s</code>) ¤¬
- 401 ¤Î¤È¤­¤Ï°ÕÌ£¤¬¤Ê¤¤¤â¤Î¤Ç¤¢¤ë²ÄǽÀ­¤¬¤¢¤ë)
- </td></tr>
-<tr><td><code>%...U</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿ URL ¥Ñ¥¹¡£¥¯¥¨¥êʸ»úÎó¤Ï´Þ¤Þ¤Ê¤¤</td></tr>
-<tr class="odd"><td><code>%...v</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤ë¥µ¡¼¥Ð¤ÎÀµ¼°¤Ê <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></td></tr>
-<tr><td><code>%...V</code></td>
- <td><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> ¤ÎÀßÄê¤Ë¤è¤ë¥µ¡¼¥Ð̾</td></tr>
-<tr class="odd"><td><code>%...X</code></td>
- <td>±þÅú¤¬´°Î»¤·¤¿¤È¤­¤ÎÀܳ¥¹¥Æ¡¼¥¿¥¹:
-
- <table>
-
- <tr><td><code>X</code> =</td>
- <td>±þÅú¤¬´°Î»¤¹¤ëÁ°¤ËÀܳ¤¬°Û¾ï½ªÎ»</td></tr>
- <tr><td><code>+</code> =</td>
- <td>±þÅú¤¬Á÷¤é¤ì¤¿¸å¤ËÀܳ¤ò»ý³¤¹¤ë¤³¤È¤¬²Äǽ</td></tr>
- <tr><td><code>-</code> = </td>
- <td>±þÅú¤¬Á÷¤é¤ì¤¿¸å¤ËÀܳ¤¬ÀÚ¤é¤ì¤ë</td></tr>
- </table>
-
- <p>(¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache
- 1.3 ¤Î¸å´ü¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï <code>%...c</code> ¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ
- ¤¤¤Þ¤·¤¿¤¬¡¢¤³¤ì¤ÏÎò»ËŪ¤Ë ssl ¤¬»ÈÍѤ·¤Æ¤¤¤ë
- <code>%...{<var>var</var>}c</code>
- ¹½Ê¸¤È¾×Æͤ·¤Æ¤¤¤Þ¤·¤¿¡£)</p></td></tr>
-<tr><td><code>%...I</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤È¥Ø¥Ã¥À¤ò´Þ¤à¡¢¼õ¤±¼è¤Ã¤¿¥Ð¥¤¥È¿ô¡£
- 0 ¤Ë¤Ï¤Ê¤é¤Ê¤¤¡£
- ¤³¤ì¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï <code class="module"><a href="../mod/mod_logio.html">mod_logio</a></code> ¤¬É¬Í×</td></tr>
-<tr class="odd"><td><code>%...O</code></td>
- <td>¥Ø¥Ã¥À¤ò´Þ¤à¡¢Á÷¿®¤·¤¿¥Ð¥¤¥È¿ô¡£0 ¤Ë¤Ï¤Ê¤é¤Ê¤¤¡£
- ¤³¤ì¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï <code class="module"><a href="../mod/mod_logio.html">mod_logio</a></code> ¤¬É¬Í×</td></tr>
-</table>
-
- <p><var>"..."</var> ¤Ï²¿¤â¤Ê¤¤¤« (<em>Î㤨¤Ð</em>¡¢
- <code>"%h %u %r %s %b"</code> ¤Î¤è¤¦¤Ë)¡¢
- ¤½¤Î¹àÌܤò´Þ¤á¤ë¤«¤É¤¦¤«¤Î¾ò·ï (¤â¤·¾ò·ï¤Ë¹ç¤ï¤Ê¤«¤Ã¤¿¤È¤­¤Ï
- ¤½¤Î¹àÌÜ¤Ï "-" ¤Ë¤Ê¤ê¤Þ¤¹) ¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¾ò·ï¤Î·Á¼°¤Ï
- HTTP ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤Î¥ê¥¹¥È¤Ç¡¢Á°¤Ë "!" ¤òÉÕ¤±¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢"%400,501{User-agent}i" ¤Ï 400 ¥¨¥é¡¼¤È 501 ¥¨¥é¡¼
- (Bad Request ¤È Not Implemented) ¤Î¤È¤­¤Î¤ß <code>User-agent:</code>
- ¤ò¥í¥°¼ý½¸¤·¤Þ¤¹¡£
- "%!200,304,302{Referer}i" ¤ÏÉáÄ̤Υ¹¥Æ¡¼¥¿¥¹¤ò<em>ÊÖ¤µ¤Ê¤«¤Ã¤¿</em>
- ¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤Ç <code>Referer:</code> ¤ò¥í¥°¼ý½¸¤·¤Þ¤¹¡£</p>
-
- <p>httpd 2.0 ¤Î 1.3.25 ¤è¤êÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢
- <code>%...r</code>, <code>%...i</code>,
- <code>%...o</code> ¤Îʸ»úÎó¤Ï
- ¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤ì¤Ï¼ç¤Ë Common Log Format ¤«¤é¤ÎÍ×µá¤Ë¤è¤ë¤â¤Î¤Ç¤¹¡£
- ¤³¤ì¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬¥í¥°¤ËÀ©¸æʸ»ú¤òÁÞÆþ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤È¤¤¤¦¤³¤È¤Ç¡¢
- À¸¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ò°·¤¦¤È¤­¤Ë¤ÏÈó¾ï¤ËÃí°Õ¤¬É¬ÍפǤ·¤¿¡£</p>
-
- <p>¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤Ë¤è¤ê 2.0.46 ¤è¤ê°õ»úÉÔ²Äǽ¤Êʸ»ú¤È
- ¾¤ÎÆÃÊ̤Êʸ»ú¤Ï¡¢¤Û¤È¤ó¤É <code>\x<var>hh</var></code> ¤È¤¤¤¦
- ʸ»úÎó¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤³¤Ç¡¢<var>hh</var> ¤Ï
- ¤½¤Î¤Þ¤Þ¤Î¥Ð¥¤¥È¤ÎÃͤΠ16 ¿Ê¤Ç¤ÎÃͤǤ¹¡£¤³¤Îµ¬Â§¤ÎÎã³°¤Ë¤Ï¡¢
- ¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤ò»È¤Ã¤Æ¥¨¥¹¥±¡¼¥×¤µ¤ì¤ë <code>"</code> ¤È <code>\</code> ¤È¡¢
- C ·Á¼°¤Îɽµ­Ë¡¤¬»È¤ï¤ì¤ë¶õÇòʸ»ú (<code>\n</code>, <code>\t</code> ¤Ê¤É) ¤¬
- ¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¤è¤¯»È¤ï¤ì¤ë¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ï:</p>
-
- <dl>
- <dt>Common Log Format (CLF)</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÉÕ¤­ Common Log Format</dt>
- <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>NCSA extended/combined ¥í¥°½ñ¼°</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\""</code></dd>
-
- <dt>Referer ¥í¥°½ñ¼°</dt>
- <dd><code>"%{Referer}i -&gt; %U"</code></dd>
-
- <dt>Agent (¥Ö¥é¥¦¥¶) ¥í¥°½ñ¼°</dt>
- <dd><code>"%{User-agent}i"</code></dd>
- </dl>
-
- <p><code>%v</code> ¤È <code>%p</code> ¤Ë¤Ï¤½¤ì¤¾¤ì¡¢
- ¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤ë¥µ¡¼¥Ð¤ÎÀµµ¬²½¤µ¤ì¤¿
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> ¤È <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> ¤¬»È¤ï¤ì¤ë¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¤³¤ì¤Ï <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> ¤Î
- ÀßÄê¤Ë´Ø¤ï¤é¤º¡¢¾ï¤Ë¤½¤¦¤Ê¤ê¤Þ¤¹¡£¤½¤¦¤·¤Ê¤¤¤È¤É¤Î
- ¥Û¥¹¥È¤¬¼ÂºÝ¤Ë¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤¿¤Î¤«¤òÃΤ뤿¤á¤Ë¡¢
- ¥í¥°²òÀÏ¥×¥í¥°¥é¥à¤¬¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Þ¥Ã¥Á¥ó¥°¤ò¤È¤ë¥¢¥ë¥´¥ê¥º¥àÁ´ÂΤò
- ºÆ¼ÂÁõ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¯¤Ê¤ë¤«¤é¤Ç¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤·¤Æ</a></h2>
- <p>¥í¥°¥Õ¥¡¥¤¥ë¤¬Êݸ¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤¬¥µ¡¼¥Ð¤òµ¯Æ°¤·¤¿°Ê³°¤Î¥æ¡¼¥¶¤Ç
- ½ñ¤­¹þ¤ß²Äǽ¤Ê¤È¤­¤Ë¥»¥­¥å¥ê¥Æ¥£¤ÎÌäÂ꤬ȯÀ¸¤¹¤ëÍýͳ¤Î¾ÜºÙ¤Ï<a href="../misc/security_tips.html#serverroot">¥»¥­¥å¥ê¥Æ¥£¤Î¤³¤Ä</a>
- ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieLog" id="CookieLog">CookieLog</a> <a name="cookielog" id="cookielog">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥Ã¥­¥ó¥°¤Î¥í¥®¥ó¥°¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë̾¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>CookieLog <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_log_config</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÈó¿ä¾©</td></tr>
-</table>
- <p><code class="directive">CookieLog</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥Ã¥­¡¼¤Î¥í¥®¥ó¥°¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë̾¤ò
- ÀßÄꤷ¤Þ¤¹¡£filename ¤Ï <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤Ç¤¹¡£¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>mod_cookies</code> ¤È¤Î¸ß´¹À­¤Î¤¿¤á¤À¤±¤Ë
- ¸ºß¤·¡¢»ÈÍѤϿ侩¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CustomLog" id="CustomLog">CustomLog</a> <a name="customlog" id="customlog">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥í¥°¥Õ¥¡¥¤¥ë¤Î̾Á°¤È½ñ¼°¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_log_config</td></tr>
-</table>
- <p><code class="directive">CustomLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥µ¡¼¥Ð¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò
- ¥í¥°¼ý½¸¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£¥í¥°¤Î½ñ¼°¤¬»ØÄꤵ¤ì¡¢
- ´Ä¶­ÊÑ¿ô¤ò»È¤Ã¤Æ¥í¥®¥ó¥°¤¬¾ò·ï¤Ë±þ¤¸¤Æ¹Ô¤Ê¤ï¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥í¥°¤¬½ñ¤«¤ì¤ë¾ì½ê¤ò»ØÄꤹ¤ëºÇ½é¤Î°ú¿ô¤Ï°Ê²¼¤ÎÆó¤Ä¤Î·Á¼°¤ÎÃͤò
- ¤È¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- ¤«¤é¤ÎÁêÂХѥ¹¤Çɽ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë̾¡£</dd>
-
- <dt><var>pipe</var></dt>
- <dd>¥Ñ¥¤¥×ʸ»ú "<code>|</code>" ¤È¡¢¤½¤Î¸å¤Ëɸ½àÆþÎϤ«¤é¥í¥°¤Î
- ¾ðÊó¤ò¼õ¤±¤È¤ë¥×¥í¥°¥é¥à¤Ø¤Î¥Ñ¥¹¤¬Â³¤¤¤¿¤â¤Î¡£
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p>¤â¤·¥×¥í¥°¥é¥à¤¬»ÈÍѤµ¤ì¤¿¾ì¹ç¡¢
- httpd ¤¬µ¯Æ°¤µ¤ì¤¿¥æ¡¼¥¶¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤Þ¤¹¡£¤³¤ì¤Ï¥µ¡¼¥Ð¤¬
- root ¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤¿¾ì¹ç¤Ï root ¤Ë¤Ê¤ê¤Þ¤¹¡£¥×¥í¥°¥é¥à¤¬
- °ÂÁ´¤Ç¤¢¤ë¤è¤¦¤Ëα°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div>
- <div class="warning"><h3>Ãí</h3>
- <p>Unix ¤Ç¤Ê¤¤¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤òÆþÎϤ·¤Æ¤¤¤ë¤È¤­¤Ï¡¢
- »ÈÍѤ·¤Æ¤¤¤ë¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤¬¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Î»ÈÍѤòµö²Ä¤·¤Æ¤¤¤¿
- ¤È¤·¤Æ¡¢Ä̾ï¤Î¥¹¥é¥Ã¥·¥å¤À¤±¤ò»È¤¦¤è¤¦¤Ëµ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£
- °ìÈÌŪ¤Ë¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¤Ï¾ï¤ËÉáÄ̤Υ¹¥é¥Ã¥·¥å¤Î¤ß¤ò»È¤¦¤è¤¦¤Ë¤¹¤ë
- Êý¤¬Îɤ¤¤Ç¤¹¡£</p>
- </div></dd>
- </dl>
-
- <p>Æó¤Ä¤á¤Î°ú¿ô¤Ï¥í¥°¥Õ¥¡¥¤¥ë¤Ë²¿¤¬½ñ¤«¤ì¤ë¤«¤ò»ØÄꤷ¤Þ¤¹¡£
- Á°¤Ë¤¢¤ë <code class="directive"><a href="#logformat">LogFormat</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê
- ÄêµÁ¤µ¤ì¤¿ <var>nickname</var> ¤«¡¢<a href="#formats">¥í¥°¤Î½ñ¼°</a>
- ¤Î¤È¤³¤í¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¡¢ÌÀ¼¨Åª¤Ê <var>format</var> ʸ»úÎó¤Î
- ¤É¤Á¤é¤«¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢°Ê²¼¤ÎÆó¤Ä¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö·²¤ÏÁ´¤¯Æ±¤¸¸ú²Ì¤ò¤â¤¿¤é¤·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- # CustomLog with format nickname<br />
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # CustomLog with explicit format string<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
- </code></p></div>
-
- <p>»°¤ÄÌܤΰú¿ô¤Ï¾Êά²Äǽ¤Ç¡¢¥µ¡¼¥Ð¤Î´Ä¶­¤Ë¤¢¤ëÊÑ¿ô¤¬¤¢¤ë¤«¤Ê¤¤¤«¤Ë
- ±þ¤¸¤Æ¥ê¥¯¥¨¥¹¥È¤ò¥í¥°¼ý½¸¤¹¤ë¤«¤É¤¦¤«¤òÀ©¸æ¤¹¤ë¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- »ØÄꤵ¤ì¤¿<a href="../env.html">´Ä¶­ÊÑ¿ô</a>¤¬¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ
- ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç ('<code>env=!<var>name</var></code>' ʸ¤¬»È¤ï¤ì¤¿¤È¤­¤Ï
- ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç)¡¢¥ê¥¯¥¨¥¹¥È¤¬¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>´Ä¶­ÊÑ¿ô¤Ï <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> ¥â¥¸¥å¡¼¥ë¤È
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> ¥â¥¸¥å¡¼¥ë¤ÎξÊý¤â¤·¤¯¤Ï
- ÊÒÊý¤òÍѤ¤¤Æ¥ê¥¯¥¨¥¹¥È¤´¤È¤ËÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð¡¢¥µ¡¼¥Ð¤Ë¤¢¤ë¤¹¤Ù¤Æ¤Î GIF ²èÁü¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤òÊÌ¤Î¥í¥°¥Õ¥¡¥¤¥ë
- ¤Ë¤Ïµ­Ï¿¤·¤¿¤¤¤±¤ì¤É¡¢¥á¥¤¥ó¥í¥°¤Ë¤Ïµ­Ï¿¤·¤¿¤¯¤Ê¤¤¡¢¤È¤¤¤¦¤È¤­¤Ï
- °Ê²¼¤Î¤â¤Î¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LogFormat" id="LogFormat">LogFormat</a> <a name="logformat" id="logformat">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥í¥°¥Õ¥¡¥¤¥ë¤Ç»ÈÍѤ¹¤ë½ñ¼°¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b"</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¢¥¯¥»¥¹¥í¥°¥Õ¥¡¥¤¥ë¤Î½ñ¼°¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="directive">LogFormat</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÆó¤Ä¤Î·Á¼°¤Î¤É¤Á¤é¤«¤ò
- ¤È¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ºÇ½é¤Î·Á¼°¤Ç¤Ï°ì¤Ä¤Î°ú¿ô¤Î¤ß¤¬»ØÄꤵ¤ì¡¢
- ³¤¯ <code class="directive">TransferLog</code>
- ¤Ç»ØÄꤵ¤ì¤¿¥í¥°¤Ç»È¤ï¤ì¤ë¥í¥°¤Î½ñ¼°¤òÀßÄꤷ¤Þ¤¹¡£¤³¤ÎñÆȤΰú¿ô¤Ç¤Ï
- ¾å¤Î<a href="#formats">¥«¥¹¥¿¥à¥í¥°½ñ¼°</a>¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë
- <var>format</var> ¤òÌÀ¼¨Åª¤Ë»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤â¤·¤¯¤Ï¡¢²¼¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤ËÁ°¤Ë <code class="directive">LogFormat</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÄêµÁ¤µ¤ì¤¿¥í¥°¤Î½ñ¼°¤ò <var>nickname</var>¤ò»È¤Ã¤Æ
- »²¾È¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="directive">LogFormat</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÆó¤Ä¤á¤Î·Á¼°¤Ï
- <var>format</var> ¤Ë <var>nickname</var> ¤òÍ¿¤¨¤Þ¤¹¡£
- ¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎóÁ´ÂΤòºÆ¤Ó½ñ¤¯¤«¤ï¤ê¤Ë¡¢
- ¤³¤Î <var>nickname</var> ¤ò³¤­¤Î <code class="directive">LogFormat</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <code class="directive">CustomLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Nickname ¤òÄêµÁ¤¹¤ë <code class="directive">LogFormat</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <strong>¾¤Ë¤Ï²¿¤â¤·¤Þ¤»¤ó</strong> -- ¤¹¤Ê¤ï¤Á¡¢¥Ë¥Ã¥¯¥Í¡¼¥à¤òÄêµÁ
- ¤¹¤ë¤À¤±¤Ç¡¢¼ÂºÝ¤Ë½ñ¼°¤òŬÍѤ·¤Æ¥Ç¥Õ¥©¥ë¥È¤Ë¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¹Ô¤Ê¤¤¤Þ¤»¤ó¡£
- ¤Ç¤¹¤«¤é¡¢¤³¤ì¤Ï³¤¯ <code class="directive"><a href="#transferlog">TransferLog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤Ï±Æ¶Á¤òÍ¿¤¨¤Þ¤»¤ó¡£
- ¤µ¤é¤Ë¡¢<code class="directive">LogFormat</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï´û¸¤Î nickname ¤ò
- »È¤Ã¤ÆÊ̤Πnickname ¤òÄêµÁ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£Nickname ¤Ë¤Ï
- ¥Ñ¡¼¥»¥ó¥Èµ­¹æ (<code>%</code>) ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Æ¤Ï¤¤¤±¤Ê¤¤¤³¤È¤Ë¤âÃí°Õ
- ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TransferLog" id="TransferLog">TransferLog</a> <a name="transferlog" id="transferlog">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥í¥°¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤ò»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>TransferLog <var>file</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_log_config</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥í¥°½ñ¼°¤òľÀÜ»ØÄê¤Ç¤­¤Ê¤¤¤³¤È¤È¡¢
- ¾ò·ïÉÕ¤­¥í¥®¥ó¥°¤¬Ìµ¤¤¤³¤È¤ò½ü¤¯¤È¡¢<code class="directive"><a href="#customlog">CustomLog</a></code> ¤ÈÁ´¤¯Æ±¤¸°ú¿ô¤È¸ú²Ì¤¬¤¢¤ê¤Þ¤¹¡£
- ľÀÜ¥í¥°½ñ¼°¤ò»ØÄꤹ¤ëÂå¤ï¤ê¤Ë¡¢¥í¥°¤Î½ñ¼°¤Ï¤½¤³¤Þ¤Ç¤Ç°ìÈֺǸå¤Ë»ØÄꤵ¤ì¤¿
- ¥Ë¥Ã¥¯¥Í¡¼¥à¤òÄêµÁ¤·¤Ê¤¤
- <code class="directive"><a href="#logformat">LogFormat</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ÇÄêµÁ¤µ¤ì¤¿¤â¤Î¤ò»È¤¤¤Þ¤¹¡£
- ¤â¤·Â¾¤Î½ñ¼°¤¬Á´¤¯»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï Common Log Format
- ¤¬»È¤ï¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_log_config.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_log_config.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_log_config.xml b/docs/manual/mod/mod_log_config.xml
deleted file mode 100644
index d7dd487193..0000000000
--- a/docs/manual/mod/mod_log_config.xml
+++ /dev/null
@@ -1,447 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.29 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_log_config.xml.meta">
-
-<name>mod_log_config</name>
-<description>Logging of the requests made to the server</description>
-<status>Base</status>
-<sourcefile>mod_log_config.c</sourcefile>
-<identifier>log_config_module</identifier>
-
-<summary>
- <p>This module provides for flexible logging of client
- requests. Logs are written in a customizable format, and may be
- written directly to a file, or to an external program.
- Conditional logging is provided so that individual requests may
- be included or excluded from the logs based on characteristics
- of the request.</p>
-
- <p>Three directives are provided by this module:
- <directive module="mod_log_config">TransferLog</directive> to create
- a log file, <directive module="mod_log_config">LogFormat</directive>
- to set a custom format, and <directive module="mod_log_config"
- >CustomLog</directive> to define a log file and format in one
- step. The <directive>TransferLog</directive> and <directive
- >CustomLog</directive> directives can be used multiple times in each
- server to cause each request to be logged to multiple files.</p>
-</summary>
-<seealso><a href="../logs.html">Apache Log Files</a></seealso>
-
-<section id="formats"><title>Custom Log Formats</title>
-
- <p>The format argument to the <directive module="mod_log_config"
- >LogFormat</directive> and <directive module="mod_log_config"
- >CustomLog</directive> directives is a string. This string is
- used to log each request to the log file. It can contain literal
- characters copied into the log files and the C-style control
- characters "\n" and "\t" to represent new-lines and tabs.
- Literal quotes and back-slashes should be escaped with
- back-slashes.</p>
-
- <p>The characteristics of the request itself are logged by
- placing "<code>%</code>" directives in the format string, which are
- replaced in the log file by the values as follows:</p>
-
- <table border="1" style="zebra">
- <columnspec><column width=".2"/><column width=".8"/></columnspec>
- <tr><th>Format&nbsp;String</th>
- <th>Description</th></tr>
-
- <tr><td><code>%%</code></td>
- <td>The percent sign</td></tr>
-
- <tr><td><code>%...a</code></td>
- <td>Remote IP-address</td></tr>
-
- <tr><td><code>%...A</code></td>
- <td>Local IP-address</td></tr>
-
- <tr><td><code>%...B</code></td>
- <td>Bytes sent, excluding HTTP headers.</td></tr>
-
- <tr><td><code>%...b</code></td>
- <td>Bytes sent, excluding HTTP headers. In CLF format, <em>i.e.</em>
- a '<code>-</code>' rather than a 0 when no bytes are sent.</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}C</code></td>
- <td>The contents of cookie <var>Foobar</var> in the request sent
- to the server.</td></tr>
-
- <tr><td><code>%...D</code></td>
- <td>The time taken to serve the request, in microseconds.</td></tr>
-
- <tr><td><code>%...{<var>FOOBAR</var>}e</code></td>
- <td>The contents of the environment variable
- <var>FOOBAR</var></td></tr>
-
- <tr><td><code>%...f</code></td>
- <td>Filename</td></tr>
-
- <tr><td><code>%...h</code></td>
- <td>Remote host</td></tr>
-
- <tr><td><code>%...H</code></td>
- <td>The request protocol</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}i</code></td>
- <td>The contents of <code><var>Foobar</var>:</code> header line(s)
- in the request sent to the server.</td></tr>
-
- <tr><td><code>%...l</code></td>
- <td>Remote logname (from identd, if supplied). This will return a
- dash unless <module>mod_ident</module> is present and <directive
- module="mod_ident">IdentityCheck</directive> is set
- <code>On</code>.</td></tr>
-
- <tr><td><code>%...m</code></td>
- <td>The request method</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}n</code></td>
- <td>The contents of note <var>Foobar</var> from another
- module.</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}o</code></td>
- <td>The contents of <code><var>Foobar</var>:</code> header line(s)
- in the reply.</td></tr>
-
- <tr><td><code>%...p</code></td>
- <td>The canonical port of the server serving the request</td></tr>
-
- <tr><td><code>%...P</code></td>
- <td>The process ID of the child that serviced the request.</td></tr>
-
- <tr><td><code>%...{<var>format</var>}P</code></td>
- <td>The process ID or thread id of the child that serviced the
- request. Valid formats are <code>pid</code> and <code>tid</code>.
- </td></tr>
-
- <tr><td><code>%...q</code></td>
- <td>The query string (prepended with a <code>?</code> if a query
- string exists, otherwise an empty string)</td></tr>
-
- <tr><td><code>%...r</code></td>
- <td>First line of request</td></tr>
-
- <tr><td><code>%...s</code></td>
- <td>Status. For requests that got internally redirected, this is
- the status of the *original* request --- <code>%...&gt;s</code>
- for the last.</td></tr>
-
- <tr><td><code>%...t</code></td>
- <td>Time, in common log format time format (standard english
- format)</td></tr>
-
- <tr><td><code>%...{<var>format</var>}t</code></td>
- <td>The time, in the form given by format, which should be in
- <code>strftime(3)</code> format. (potentially localized)</td></tr>
-
- <tr><td><code>%...T</code></td>
- <td>The time taken to serve the request, in seconds.</td></tr>
-
- <tr><td><code>%...u</code></td>
- <td>Remote user (from auth; may be bogus if return status
- (<code>%s</code>) is 401)</td></tr>
-
- <tr><td><code>%...U</code></td>
- <td>The URL path requested, not including any query string.</td></tr>
-
- <tr><td><code>%...v</code></td>
- <td>The canonical <directive module="core">ServerName</directive>
- of the server serving the request.</td></tr>
-
- <tr><td><code>%...V</code></td>
- <td>The server name according to the <directive module="core"
- >UseCanonicalName</directive> setting.</td></tr>
-
- <tr><td><code>%...X</code></td>
- <td>Connection status when response is completed:
-
- <table>
- <columnspec><column width=".2"/><column width=".6"/></columnspec>
- <tr><td><code>X</code> =</td>
- <td>connection aborted before the response completed.</td></tr>
- <tr><td><code>+</code> =</td>
- <td>connection may be kept alive after the response is
- sent.</td></tr>
- <tr><td><code>-</code> = </td>
- <td>connection will be closed after the response is
- sent.</td></tr>
- </table>
-
- <p>(This directive was <code>%...c</code> in late versions of Apache
- 1.3, but this conflicted with the historical ssl
- <code>%...{<var>var</var>}c</code> syntax.)</p></td></tr>
-
- <tr><td><code>%...I</code></td>
- <td>Bytes received, including request and headers, cannot be zero.
- You need to enable <module>mod_logio</module> to use this.</td></tr>
-
- <tr><td><code>%...O</code></td>
- <td>Bytes sent, including headers, cannot be zero. You need to
- enable <module>mod_logio</module> to use this.</td></tr>
- </table>
-
- <p>The "<var>...</var>" can be nothing at all (<em>e.g.</em>,
- <code>"%h %u %r %s %b"</code>), or it can indicate conditions for
- inclusion of the item (which will cause it to be replaced with "-" if
- the condition is not met). The forms of condition are a list of
- HTTP status codes, which may or may not be preceded by "!".
- Thus, "%400,501{User-agent}i" logs <code>User-agent:</code> on 400
- errors and 501 errors (Bad Request, Not Implemented) only;
- "%!200,304,302{Referer}i" logs <code>Referer:</code> on all requests
- which did <em>not</em> return some sort of normal status.</p>
-
- <p>The modifiers "&lt;" and "&gt;" can be used for requests that
- have been internally redirected to choose whether the original or
- final (respectively) request should be consulted. By default, the
- <code>%</code> directives <code>%s, %U, %T, %D,</code> and
- <code>%r</code> look at the original request while all others look
- at the final request. So for example, <code>%&gt;s</code> can be
- used to record the final status of the request and
- <code>%&lt;u</code> can be used to record the original
- authenticated user on a request that is internally redirected to an
- unauthenticated resource.</p>
-
- <p>Note that in httpd 2.0 versions prior to 2.0.46, no escaping was performed
- on the strings from <code>%...r</code>, <code>%...i</code> and
- <code>%...o</code>. This was mainly to comply with the requirements of
- the Common Log Format. This implied that clients could insert control
- characters into the log, so you had to be quite careful when dealing
- with raw log files.</p>
-
- <p>For security reasons, starting with 2.0.46, non-printable and
- other special characters are escaped mostly by using
- <code>\x<var>hh</var></code> sequences, where <var>hh</var> stands for
- the hexadecimal representation of the raw byte. Exceptions from this
- rule are <code>"</code> and <code>\</code> which are escaped by prepending
- a backslash, and all whitespace characters which are written in their
- C-style notation (<code>\n</code>, <code>\t</code> etc).</p>
-
- <p>Some commonly used log format strings are:</p>
-
- <dl>
- <dt>Common Log Format (CLF)</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>Common Log Format with Virtual Host</dt>
- <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>NCSA extended/combined log format</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\""</code></dd>
-
- <dt>Referer log format</dt>
- <dd><code>"%{Referer}i -&gt; %U"</code></dd>
-
- <dt>Agent (Browser) log format</dt>
- <dd><code>"%{User-agent}i"</code></dd>
- </dl>
-
- <p>Note that the canonical <directive module="core"
- >ServerName</directive> and <directive module="mpm_common"
- >Listen</directive> of the server serving the
- request are used for <code>%v</code> and <code>%p</code>
- respectively. This happens regardless of the <directive
- module="core">UseCanonicalName</directive> setting
- because otherwise log analysis programs would have to duplicate
- the entire vhost matching algorithm in order to decide what
- host really served the request.</p>
-</section>
-
-<section id="security"><title>Security Considerations</title>
- <p>See the <a
- href="../misc/security_tips.html#serverroot">security tips</a>
- document for details on why your security could be compromised
- if the directory where logfiles are stored is writable by
- anyone other than the user that starts the server.</p>
-</section>
-
-<directivesynopsis>
-<name>CookieLog</name>
-<description>Sets filename for the logging of cookies</description>
-<syntax>CookieLog <var>filename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>This directive is deprecated.</compatibility>
-
-<usage>
- <p>The <directive>CookieLog</directive> directive sets the
- filename for logging of cookies. The filename is relative to the
- <directive module="core">ServerRoot</directive>. This directive is
- included only for compatibility with <code>mod_cookies</code>,
- and is deprecated.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CustomLog</name>
-<description>Sets filename and format of log file</description>
-<syntax>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>CustomLog</directive> directive is used to
- log requests to the server. A log format is specified, and the
- logging can optionally be made conditional on request
- characteristics using environment variables.</p>
-
- <p>The first argument, which specifies the location to which
- the logs will be written, can take one of the following two
- types of values:</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd>A filename, relative to the <directive module="core"
- >ServerRoot</directive>.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>The pipe character "<code>|</code>", followed by the path
- to a program to receive the log information on its standard
- input.
-
- <note type="warning"><title>Security:</title>
- <p>If a program is used, then it will be run as the user who
- started httpd. This will be root if the server was started by root;
- be sure that the program is secure.</p>
- </note>
- <note type="warning"><title>Note</title>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </note></dd>
- </dl>
-
- <p>The second argument specifies what will be written to the
- log file. It can specify either a <var>nickname</var> defined by
- a previous <directive module="mod_log_config">LogFormat</directive>
- directive, or it can be an explicit <var>format</var> string as
- described in the <a href="#formats">log formats</a> section.</p>
-
- <p>For example, the following two sets of directives have
- exactly the same effect:</p>
-
- <example>
- # CustomLog with format nickname<br />
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # CustomLog with explicit format string<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
- </example>
-
- <p>The third argument is optional and controls whether or
- not to log a particular request based on the
- presence or absence of a particular variable in the server
- environment. If the specified <a href="../env.html">environment
- variable</a> is set for the request (or is not set, in the case
- of a '<code>env=!<var>name</var></code>' clause), then the
- request will be logged.</p>
-
- <p>Environment variables can be set on a per-request
- basis using the <module>mod_setenvif</module>
- and/or <module>mod_rewrite</module> modules. For
- example, if you want to record requests for all GIF
- images on your server in a separate logfile but not in your main
- log, you can use:</p>
-
- <example>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogFormat</name>
-<description>Describes a format for use in a log file</description>
-<syntax>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</syntax>
-<default>LogFormat "%h %l %u %t \"%r\" %>s %b"</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive specifies the format of the access log
- file.</p>
-
- <p>The <directive>LogFormat</directive> directive can take one of two
- forms. In the first form, where only one argument is specified,
- this directive sets the log format which will be used by logs
- specified in subsequent <directive>TransferLog</directive>
- directives. The single argument can specify an explicit
- <var>format</var> as discussed in the <a href="#formats">custom log
- formats</a> section above. Alternatively, it can use a
- <var>nickname</var> to refer to a log format defined in a
- previous <directive>LogFormat</directive> directive as described
- below.</p>
-
- <p>The second form of the <directive>LogFormat</directive>
- directive associates an explicit <var>format</var> with a
- <var>nickname</var>. This <var>nickname</var> can then be used in
- subsequent <directive>LogFormat</directive> or
- <directive module="mod_log_config">CustomLog</directive> directives
- rather than repeating the entire format string. A
- <directive>LogFormat</directive> directive that defines a nickname
- <strong>does nothing else</strong> -- that is, it <em>only</em>
- defines the nickname, it doesn't actually apply the format and make
- it the default. Therefore, it will not affect subsequent
- <directive module="mod_log_config">TransferLog</directive> directives.
- In addition, <directive>LogFormat</directive> cannot use one nickname
- to define another nickname. Note that the nickname should not contain
- percent signs (<code>%</code>).</p>
-
- <example><title>Example</title>
- LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TransferLog</name>
-<description>Specify location of a log file</description>
-<syntax>TransferLog <var>file</var>|<var>pipe</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive has exactly the same arguments and effect as
- the <directive module="mod_log_config">CustomLog</directive>
- directive, with the exception that it does not allow the log format
- to be specified explicitly or for conditional logging of requests.
- Instead, the log format is determined by the most recently specified
- <directive module="mod_log_config">LogFormat</directive> directive
- which does not define a nickname. Common Log Format is used if no
- other format has been specified.</p>
-
- <example><title>Example</title>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_log_config.xml.ja b/docs/manual/mod/mod_log_config.xml.ja
deleted file mode 100644
index 43af2eee1c..0000000000
--- a/docs/manual/mod/mod_log_config.xml.ja
+++ /dev/null
@@ -1,441 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.26 (outdated: 1.29) -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_log_config.xml.meta">
-
-<name>mod_log_config</name>
-<description>$B%5!<%P$X$N%j%/%(%9%H$N%m%.%s%0(B</description>
-<status>Base</status>
-<sourcefile>mod_log_config.c</sourcefile>
-<identifier>log_config_module</identifier>
-
-<summary>
- <p>
- $B$3$N%b%8%e!<%k$O%/%i%$%"%s%H$N%j%/%(%9%H$r=@Fp$K%m%0<}=8$9$k5!G=$r(B
- $BDs6!$7$^$9!#%m%0$O%+%9%?%^%$%:2DG=$J=q<0$G=q$+$l!"%U%!%$%k$KD>@\(B
- $B=q$$$?$j!"30It%W%m%0%i%`$KEO$7$?$j$9$k$3$H$,$G$-$^$9!#8D!9$N%j%/%(%9%H$r(B
- $BFCD'$K1~$8$F%m%0$K=q$$$?$j=q$+$J$+$C$?$j$G$-$k$h$&$K!">r7o$K$h$k(B
- $B%m%0<}=8$bDs6!$5$l$F$$$^$9!#(B</p>
-
- <p>$B$3$N%b%8%e!<%k$O;0$D$N%G%#%l%/%F%#%VDs6!$7$^$9(B:
- $B%m%0%U%!%$%k$r:n@.$9$k$?$a$N(B <directive module="mod_log_config"
- >TransferLog</directive>,
- $B?7$7$$=q<0$r(B $BDj5A$9$k(B <directive module="mod_log_config">LogFormat</directive>,
- $B%m%0%U%!%$%k$H(B $B=q<0$r0lEY$KDj5A$9$k(B <directive module="mod_log_config"
- >CustomLog</directive> $B$G$9!#(B
- $B3F%j%/%(%9%H$,J#?t2s%m%0<}=8$5$l$k$h$&$K$9$k$?$a$K(B
- <directive>TransferLog</directive> $B%G%#%l%/%F%#%V$H(B
- <directive>CustomLog</directive>
- $B%G%#%l%/%F%#%V$OJ#?t2s;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-</summary>
-<seealso><a href="../logs.html">Apache $B%m%0%U%!%$%k(B</a></seealso>
-
-<section id="formats"><title>$B%+%9%?%`%m%0=q<0(B</title>
-
- <p><directive module="mod_log_config">LogFormat</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="mod_log_config">CustomLog</directive>
- $B%G%#%l%/%F%#%V$N=q<0$r;XDj$9$k0z?t$OJ8;zNs$G$9!#$3$NJ8;zNs$r;H$C$F$=$l$>$l$N(B
- $B%j%/%(%9%H$,%m%0%U%!%$%k$K%m%0<}=8$5$l$^$9!#$=$NJ8;zNs$K$O(B
- $B%m%0%U%!%$%k$K$=$N$^$^(B
- $B=q$+$l$kJ8;zNs$d!"$=$l$>$l2~9T$H%?%V$r8=$9(B C $B8@8l(B
- $B7A<0$N@)8fJ8;z(B "\n" $B$H(B "\t"
- $B$H$r4^$a$k$3$H$,$G$-$^$9!#$=$N$^$^=PNO$5$;$?$$0zMQId$H%P%C%/%9%i%C%7%e$O(B
- $B%P%C%/%9%i%C%7%e$G%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>$B%j%/%(%9%H$NFCD'$=$N$b$N$O(B "<code>%</code>"
- $B%G%#%l%/%F%#%V$r=q<0$NJ8;zNs$K=q$/$3$H$G(B
- $B%m%0<}=8$5$l$^$9!#(B"%"
- $B%G%#%l%/%F%#%V$O%m%0%U%!%$%kCf$G$O0J2<$N$h$&$J(B
- $BCM$GCV49$5$l$^$9(B:</p>
-
- <table border="1" style="zebra">
- <columnspec><column width=".2"/><column width=".8"/></columnspec>
- <tr><th>$B%U%)!<%^%C%HJ8;zNs(B</th>
- <th>$B@bL@(B</th></tr>
-
- <tr><td><code>%%</code></td>
- <td>$B%Q!<%;%s%H5-9f(B</td></tr>
-
- <tr><td><code>%...a</code></td>
- <td>$B%j%b!<%H(B IP $B%"%I%l%9(B</td></tr>
-
- <tr><td><code>%...A</code></td>
- <td>$B%m!<%+%k(B IP $B%"%I%l%9(B</td></tr>
-
- <tr><td><code>%...B</code></td>
- <td>HTTP $B%X%C%@0J30$NAw$i$l$?%P%$%H?t(B</td></tr>
-
- <tr><td><code>%...b</code></td>
- <td>HTTP $B%X%C%@0J30$NAw$i$l$?%P%$%H?t!#(BCLF $B=q<0!#(B
- <em>$B$9$J$o$A(B</em>$B!"(B1 $B%P%$%H$bAw$i$l$J$+$C$?$H$-$O(B 0 $B$G$O$J$/!"(B
- '<code>-</code>' $B$K$J$k(B</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}C</code></td>
- <td>$B%5!<%P$KAw$i$l$?%j%/%(%9%HCf$N%/%C%-!<(B <var>Foobar</var> $B$NCM(B</td></tr>
-
- <tr><td><code>%...D</code></td>
- <td>$B%j%/%(%9%H$r=hM}$9$k$N$K$+$+$C$?;~4V!"%_%jICC10L(B</td></tr>
-
- <tr><td><code>%...{<var>FOOBAR</var>}e</code></td>
- <td>$B4D6-JQ?t(B <var>FOOBAR</var> $B$NFbMF(B</td></tr>
-
- <tr><td><code>%...f</code></td>
- <td>$B%U%!%$%kL>(B</td></tr>
-
- <tr><td><code>%...h</code></td>
- <td>$B%j%b!<%H%[%9%H(B</td></tr>
-
- <tr><td><code>%...H</code></td>
- <td>$B%j%/%(%9%H%W%m%H%3%k(B</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}i</code></td>
- <td>$B%5!<%P$KAw$i$l$?%j%/%(%9%H$N(B <code><var>Foobar</var>:</code>
- $B%X%C%@$NFbMF(B</td></tr>
-
- <tr><td><code>%...l</code></td>
- <td>(identd $B$+$i$b$7Ds6!$5$l$F$$$l$P(B) $B%j%b!<%H%m%0L>!#(B
- $B$3$l$O(B <module>mod_ident</module> $B$,%5!<%P$KB8:_$7$F!"(B
- <directive module="mod_ident">IdentityCheck</directive>
- $B%G%#%l%/%F%#%V$,(B <code>On</code> $B$K@_Dj$5$l$F$$$J$$8B$j!"(B
- <code>-</code> $B$K$J$j$^$9!#(B</td></tr>
-
- <tr><td><code>%...m</code></td>
- <td>$B%j%/%(%9%H%a%=%C%I(B</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}n</code></td>
- <td>$BB>$N%b%8%e!<%k$+$i$N%a%b(B <var>Foobar</var> $B$NFbMF(B</td></tr>
-
- <tr><td><code>%...{<var>Foobar</var>}o</code></td>
- <td>$B1~Ez$N(B <code><var>Foobar</var>:</code> $B%X%C%@$NFbMF(B</td></tr>
-
- <tr><td><code>%...p</code></td>
- <td>$B%j%/%(%9%H$r07$C$F$$$k%5!<%P$N@5<0$J%]!<%H(B</td></tr>
-
- <tr><td><code>%...P</code></td>
- <td>$B%j%/%(%9%H$r07$C$?;R%W%m%;%9$N%W%m%;%9(B ID</td></tr>
-
- <tr><td><code>%...{<var>format</var>}P</code></td>
- <td>$B%j%/%(%9%H$r07$C$?%o!<%+!<$N%W%m%;%9(B ID $B$+%9%l%C%I(B ID$B!#(B
- <var>format</var> $B$H$7$FM-8z$JCM$O(B <code>pid</code> $B$H(B <code>tid</code>
- </td></tr>
-
- <tr><td><code>%...q</code></td>
- <td>$BLd$$9g$;J8;zNs(B ($BB8:_$9$k>l9g$OA0$K(B <code>?</code> $B$,DI2C$5$l$k!#(B
- $B$=$&$G$J$$>l9g$O6uJ8;zNs(B)</td></tr>
-
- <tr><td><code>%...r</code></td>
- <td>$B%j%/%(%9%H$N:G=i$N9T(B</td></tr>
-
- <tr><td><code>%...s</code></td>
- <td>$B%9%F!<%?%9!#FbIt$G%j%@%$%l%/%H$5$l$?%j%/%(%9%H$O!"85!9$N(B
- $B%j%/%(%9%H$N%9%F!<%?%9(B --- $B:G8e$N%9%F!<%?%9$O(B <code>%...&gt;s</code>
- </td></tr>
-
- <tr><td><code>%...t</code></td>
- <td>$B;~9o!#(BCLF $B$N;~9o$N=q<0(B ($BI8=`$N1Q8l$N=q<0(B)</td></tr>
-
- <tr><td><code>%...{<var>format</var>}t</code></td>
- <td><var>format</var> $B$GM?$($i$l$?=q<0$K$h$k;~9o!#(Bformat $B$O(B
- <code>strftime (3)</code> $B$N(B
- $B=q<0$G$"$kI,MW$,$"$k!#(B($BCO0h2=$5$l$F$$$k2DG=@-$,$"$k(B)</td></tr>
-
- <tr><td><code>%...T</code></td>
- <td>$B%j%/%(%9%H$r07$&$N$K$+$+$C$?;~4V!"ICC10L(B</td></tr>
-
- <tr><td><code>%...u</code></td>
- <td>$B%j%b!<%H%f!<%6(B ($BG'>Z$K$h$k$b$N!#%9%F!<%?%9(B (<code>%s</code>) $B$,(B
- 401 $B$N$H$-$O0UL#$,$J$$$b$N$G$"$k2DG=@-$,$"$k(B)
- </td></tr>
-
- <tr><td><code>%...U</code></td>
- <td>$B%j%/%(%9%H$5$l$?(B URL $B%Q%9!#%/%(%jJ8;zNs$O4^$^$J$$(B</td></tr>
-
- <tr><td><code>%...v</code></td>
- <td>$B%j%/%(%9%H$r07$C$F$$$k%5!<%P$N@5<0$J(B <directive
- module="core">ServerName</directive></td></tr>
-
- <tr><td><code>%...V</code></td>
- <td><directive module="core"
- >UseCanonicalName</directive> $B$N@_Dj$K$h$k%5!<%PL>(B</td></tr>
-
- <tr><td><code>%...X</code></td>
- <td>$B1~Ez$,40N;$7$?$H$-$N@\B3%9%F!<%?%9(B:
-
- <table>
- <columnspec><column width=".2"/><column width=".6"/></columnspec>
- <tr><td><code>X</code> =</td>
- <td>$B1~Ez$,40N;$9$kA0$K@\B3$,0[>o=*N;(B</td></tr>
- <tr><td><code>+</code> =</td>
- <td>$B1~Ez$,Aw$i$l$?8e$K@\B3$r;}B3$9$k$3$H$,2DG=(B</td></tr>
- <tr><td><code>-</code> = </td>
- <td>$B1~Ez$,Aw$i$l$?8e$K@\B3$,@Z$i$l$k(B</td></tr>
- </table>
-
- <p>($B$3$N%G%#%l%/%F%#%V$O(B Apache
- 1.3 $B$N8e4|$N%P!<%8%g%s$G$O(B <code>%...c</code> $B$K3d$jEv$F$i$l$F(B
- $B$$$^$7$?$,!"$3$l$ONr;KE*$K(B ssl $B$,;HMQ$7$F$$$k(B
- <code>%...{<var>var</var>}c</code>
- $B9=J8$H>WFM$7$F$$$^$7$?!#(B)</p></td></tr>
-
- <tr><td><code>%...I</code></td>
- <td>$B%j%/%(%9%H$H%X%C%@$r4^$`!"<u$1<h$C$?%P%$%H?t!#(B
- 0 $B$K$O$J$i$J$$!#(B
- $B$3$l$r;HMQ$9$k$?$a$K$O(B <module>mod_logio</module> $B$,I,MW(B</td></tr>
-
- <tr><td><code>%...O</code></td>
- <td>$B%X%C%@$r4^$`!"Aw?.$7$?%P%$%H?t!#(B0 $B$K$O$J$i$J$$!#(B
- $B$3$l$r;HMQ$9$k$?$a$K$O(B <module>mod_logio</module> $B$,I,MW(B</td></tr>
- </table>
-
- <p><var>"..."</var> $B$O2?$b$J$$$+(B (<em>$BNc$($P(B</em>$B!"(B
- <code>"%h %u %r %s %b"</code> $B$N$h$&$K(B)$B!"(B
- $B$=$N9`L\$r4^$a$k$+$I$&$+$N>r7o(B ($B$b$7>r7o$K9g$o$J$+$C$?$H$-$O(B
- $B$=$N9`L\$O(B "-" $B$K$J$j$^$9(B) $B$K$9$k$3$H$,$G$-$^$9!#>r7o$N7A<0$O(B
- HTTP $B%9%F!<%?%9%3!<%I$N%j%9%H$G!"A0$K(B "!" $B$rIU$1$k$3$H$b$G$-$^$9!#(B
- $B$G$9$+$i!"(B"%400,501{User-agent}i" $B$O(B 400 $B%(%i!<$H(B 501 $B%(%i!<(B
- (Bad Request $B$H(B Not Implemented) $B$N$H$-$N$_(B <code>User-agent:</code>
- $B$r%m%0<}=8$7$^$9!#(B
- "%!200,304,302{Referer}i" $B$OIaDL$N%9%F!<%?%9$r(B<em>$BJV$5$J$+$C$?(B</em>
- $B$9$Y$F$N%j%/%(%9%H$G(B <code>Referer:</code> $B$r%m%0<}=8$7$^$9!#(B</p>
-
- <p>httpd 2.0 $B$N(B 1.3.25 $B$h$jA0$N%P!<%8%g%s$G$O!"(B
- <code>%...r</code>, <code>%...i</code>,
- <code>%...o</code> $B$NJ8;zNs$O(B
- $B%(%9%1!<%W$5$l$F$$$J$+$C$?$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#$3$l$O<g$K(B Common Log Format $B$+$i$NMW5a$K$h$k$b$N$G$9!#(B
- $B$3$l$O!"%/%i%$%"%s%H$,%m%0$K@)8fJ8;z$rA^F~$9$k$3$H$,$G$-$k$H$$$&$3$H$G!"(B
- $B@8$N%m%0%U%!%$%k$r07$&$H$-$K$OHs>o$KCm0U$,I,MW$G$7$?!#(B</p>
-
- <p>$B%;%-%e%j%F%#>e$NM}M3$K$h$j(B 2.0.46 $B$h$j0u;zIT2DG=$JJ8;z$H(B
- $BB>$NFCJL$JJ8;z$O!"$[$H$s$I(B <code>\x<var>hh</var></code> $B$H$$$&(B
- $BJ8;zNs$G%(%9%1!<%W$5$l$k$h$&$K$J$j$^$7$?!#$3$3$G!"(B<var>hh</var> $B$O(B
- $B$=$N$^$^$N%P%$%H$NCM$N(B 16 $B?J$G$NCM$G$9!#$3$N5,B'$NNc30$K$O!"(B
- $B%P%C%/%9%i%C%7%e$r;H$C$F%(%9%1!<%W$5$l$k(B <code>"</code> $B$H(B <code>\</code> $B$H!"(B
- C $B7A<0$NI=5-K!$,;H$o$l$k6uGrJ8;z(B (<code>\n</code>, <code>\t</code> $B$J$I(B) $B$,(B
- $B$"$j$^$9!#(B</p>
-
- <p>$B$h$/;H$o$l$k%U%)!<%^%C%HJ8;zNs$O(B:</p>
-
- <dl>
- <dt>Common Log Format (CLF)</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>$B%P!<%A%c%k%[%9%HIU$-(B Common Log Format</dt>
- <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
- <dt>NCSA extended/combined $B%m%0=q<0(B</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\""</code></dd>
-
- <dt>Referer $B%m%0=q<0(B</dt>
- <dd><code>"%{Referer}i -&gt; %U"</code></dd>
-
- <dt>Agent ($B%V%i%&%6(B) $B%m%0=q<0(B</dt>
- <dd><code>"%{User-agent}i"</code></dd>
- </dl>
-
- <p><code>%v</code> $B$H(B <code>%p</code> $B$K$O$=$l$>$l!"(B
- $B%j%/%(%9%H$r07$C$F$$$k%5!<%P$N@55,2=$5$l$?(B
- <directive module="core">ServerName</directive> $B$H(B <directive
- module="mpm_common">Listen</directive> $B$,;H$o$l$k$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B$3$l$O(B <directive module="core">UseCanonicalName</directive> $B$N(B
- $B@_Dj$K4X$o$i$:!">o$K$=$&$J$j$^$9!#$=$&$7$J$$$H$I$N(B
- $B%[%9%H$,<B:]$K%j%/%(%9%H$r07$C$?$N$+$rCN$k$?$a$K!"(B
- $B%m%02r@O%W%m%0%i%`$,%P!<%A%c%k%[%9%H$N%^%C%A%s%0$r$H$k%"%k%4%j%:%`A4BN$r(B
- $B:F<BAu$7$J$1$l$P$J$i$J$/$J$k$+$i$G$9!#(B</p>
-</section>
-
-<section id="security"><title>$B%;%-%e%j%F%#$K4X$7$F(B</title>
- <p>$B%m%0%U%!%$%k$,J]B8$5$l$F$$$k%G%#%l%/%H%j$,%5!<%P$r5/F0$7$?0J30$N%f!<%6$G(B
- $B=q$-9~$_2DG=$J$H$-$K%;%-%e%j%F%#$NLdBj$,H/@8$9$kM}M3$N>\:Y$O(B<a
- href="../misc/security_tips.html#serverroot">$B%;%-%e%j%F%#$N$3$D(B</a>
- $B$r;2>H$7$F$/$@$5$$!#(B</p>
-</section>
-
-<directivesynopsis>
-<name>CookieLog</name>
-<description>$B%/%C%-%s%0$N%m%.%s%0$N$?$a$N%U%!%$%kL>$r@_Dj$9$k(B</description>
-<syntax>CookieLog <var>filename</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>$B$3$N%G%#%l%/%F%#%V$OHs?d>)(B</compatibility>
-
-<usage>
- <p><directive>CookieLog</directive>
- $B%G%#%l%/%F%#%V$O%/%C%-!<$N%m%.%s%0$N$?$a$N%U%!%$%kL>$r(B
- $B@_Dj$7$^$9!#(Bfilename $B$O(B <directive
- module="core">ServerRoot</directive>
- $B$+$i$NAjBP%Q%9$G$9!#$3$N%G%#%l%/%F%#%V$O(B <code
- >mod_cookies</code> $B$H$N8_49@-$N$?$a$@$1$K(B
- $BB8:_$7!";HMQ$O?d>)$5$l$F$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CustomLog</name>
-<description>$B%m%0%U%!%$%k$NL>A0$H=q<0$r@_Dj$9$k(B</description>
-<syntax>CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p><directive>CustomLog</directive> $B%G%#%l%/%F%#%V$O%5!<%P$X$N%j%/%(%9%H$r(B
- $B%m%0<}=8$9$k$?$a$K;H$o$l$^$9!#%m%0$N=q<0$,;XDj$5$l!"(B
- $B4D6-JQ?t$r;H$C$F%m%.%s%0$,>r7o$K1~$8$F9T$J$o$l$k$h$&$K$9$k$3$H$b$G$-$^$9!#(B</p>
-
- <p>$B%m%0$,=q$+$l$k>l=j$r;XDj$9$k:G=i$N0z?t$O0J2<$NFs$D$N7A<0$NCM$r(B
- $B$H$k$3$H$,$G$-$^$9(B:</p>
-
- <dl>
- <dt><var>file</var></dt>
- <dd><directive module="core">ServerRoot</directive>
- $B$+$i$NAjBP%Q%9$GI=$5$l$k%U%!%$%kL>!#(B</dd>
-
- <dt><var>pipe</var></dt>
- <dd>$B%Q%$%WJ8;z(B "<code>|</code>" $B$H!"$=$N8e$KI8=`F~NO$+$i%m%0$N(B
- $B>pJs$r<u$1$H$k%W%m%0%i%`$X$N%Q%9$,B3$$$?$b$N!#(B
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p>$B$b$7%W%m%0%i%`$,;HMQ$5$l$?>l9g!"(B
- httpd $B$,5/F0$5$l$?%f!<%6$H$7$F<B9T$5$l$^$9!#$3$l$O%5!<%P$,(B
- root $B$K$h$C$F5/F0$5$l$?>l9g$O(B root $B$K$J$j$^$9!#%W%m%0%i%`$,(B
- $B0BA4$G$"$k$h$&$KN10U$7$F$/$@$5$$!#(B</p>
- </note>
- <note type="warning"><title>$BCm(B</title>
- <p>Unix $B$G$J$$%W%i%C%H%U%)!<%`$G%U%!%$%k$N%Q%9$rF~NO$7$F$$$k$H$-$O!"(B
- $B;HMQ$7$F$$$k%W%i%C%H%U%)!<%`$,%P%C%/%9%i%C%7%e$N;HMQ$r5v2D$7$F$$$?(B
- $B$H$7$F!"DL>o$N%9%i%C%7%e$@$1$r;H$&$h$&$K5$$r$D$1$F$/$@$5$$!#(B
- $B0lHLE*$K!"@_Dj%U%!%$%kCf$G$O>o$KIaDL$N%9%i%C%7%e$N$_$r;H$&$h$&$K$9$k(B
- $BJ}$,NI$$$G$9!#(B</p>
- </note></dd>
- </dl>
-
- <p>$BFs$D$a$N0z?t$O%m%0%U%!%$%k$K2?$,=q$+$l$k$+$r;XDj$7$^$9!#(B
- $BA0$K$"$k(B <directive
- module="mod_log_config">LogFormat</directive> $B%G%#%l%/%F%#%V$K$h$j(B
- $BDj5A$5$l$?(B <var>nickname</var> $B$+!"(B<a href="#formats">$B%m%0$N=q<0(B</a>
- $B$N$H$3$m$G@bL@$5$l$F$$$k!"L@<(E*$J(B <var>format</var> $BJ8;zNs$N(B
- $B$I$A$i$+$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$BNc$($P!"0J2<$NFs$D$N%G%#%l%/%F%#%V72$OA4$/F1$88z2L$r$b$?$i$7$^$9(B:</p>
-
- <example>
- # CustomLog with format nickname<br />
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
- CustomLog logs/access_log common<br />
- <br />
- # CustomLog with explicit format string<br />
- CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
- </example>
-
- <p>$B;0$DL\$N0z?t$O>JN,2DG=$G!"%5!<%P$N4D6-$K$"$kJQ?t$,$"$k$+$J$$$+$K(B
- $B1~$8$F%j%/%(%9%H$r%m%0<}=8$9$k$+$I$&$+$r@)8f$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
- $B;XDj$5$l$?(B<a href="../env.html">$B4D6-JQ?t(B</a>$B$,%j%/%(%9%H$KBP$7$F(B
- $B@_Dj$5$l$F$$$?>l9g(B ('<code>env=!<var>name</var></code>' $BJ8$,;H$o$l$?$H$-$O(B
- $B@_Dj$5$l$F$$$J$$>l9g(B)$B!"%j%/%(%9%H$,%m%0<}=8$5$l$^$9!#(B</p>
-
- <p>$B4D6-JQ?t$O(B <module>mod_setenvif</module> $B%b%8%e!<%k$H(B
- <module>mod_rewrite</module> $B%b%8%e!<%k$NN>J}$b$7$/$O(B
- $BJRJ}$rMQ$$$F%j%/%(%9%H$4$H$K@_Dj$9$k$3$H$,$G$-$^$9!#(B
- $BNc$($P!"%5!<%P$K$"$k$9$Y$F$N(B GIF $B2hA|$X$N%j%/%(%9%H$rJL$N%m%0%U%!%$%k(B
- $B$K$O5-O?$7$?$$$1$l$I!"%a%$%s%m%0$K$O5-O?$7$?$/$J$$!"$H$$$&$H$-$O(B
- $B0J2<$N$b$N$r;H$&$3$H$,$G$-$^$9(B:</p>
-
- <example>
- SetEnvIf Request_URI \.gif$ gif-image<br />
- CustomLog gif-requests.log common env=gif-image<br />
- CustomLog nongif-requests.log common env=!gif-image
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogFormat</name>
-<description>$B%m%0%U%!%$%k$G;HMQ$9$k=q<0$r@_Dj$9$k(B</description>
-<syntax>LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</syntax>
-<default>LogFormat "%h %l %u %t \"%r\" %>s %b"</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O%"%/%;%9%m%0%U%!%$%k$N=q<0$r;XDj$7$^$9!#(B</p>
-
- <p><directive>LogFormat</directive> $B%G%#%l%/%F%#%V$OFs$D$N7A<0$N$I$A$i$+$r(B
- $B$H$k$3$H$,$G$-$^$9!#:G=i$N7A<0$G$O0l$D$N0z?t$N$_$,;XDj$5$l!"(B
- $BB3$/(B <directive>TransferLog</directive>
- $B$G;XDj$5$l$?%m%0$G;H$o$l$k%m%0$N=q<0$r@_Dj$7$^$9!#$3$NC1FH$N0z?t$G$O(B
- $B>e$N(B<a href="#formats">$B%+%9%?%`%m%0=q<0(B</a>$B$G@bL@$5$l$F$$$k$h$&$K(B
- <var>format</var> $B$rL@<(E*$K;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B$b$7$/$O!"2<$G@bL@$5$l$F$$$k$h$&$KA0$K(B <directive>LogFormat</directive>
- $B%G%#%l%/%F%#%V$GDj5A$5$l$?%m%0$N=q<0$r(B <var>nickname</var>$B$r;H$C$F(B
- $B;2>H$9$k$3$H$b$G$-$^$9!#(B</p>
-
- <p><directive>LogFormat</directive> $B%G%#%l%/%F%#%V$NFs$D$a$N7A<0$O(B
- <var>format</var> $B$K(B <var>nickname</var> $B$rM?$($^$9!#(B
- $B%U%)!<%^%C%HJ8;zNsA4BN$r:F$S=q$/$+$o$j$K!"(B
- $B$3$N(B <var>nickname</var> $B$rB3$-$N(B <directive
- >LogFormat</directive> $B%G%#%l%/%F%#%V$d(B
- <directive>CustomLog</directive> $B%G%#%l%/%F%#%V$G;H$&$3$H$,$G$-$^$9!#(B
- Nickname $B$rDj5A$9$k(B <directive>LogFormat</directive> $B%G%#%l%/%F%#%V$O(B
- <strong>$BB>$K$O2?$b$7$^$;$s(B</strong> -- $B$9$J$o$A!"%K%C%/%M!<%`$rDj5A(B
- $B$9$k$@$1$G!"<B:]$K=q<0$rE,MQ$7$F%G%U%)%k%H$K$9$k$H$$$&$3$H$O9T$J$$$^$;$s!#(B
- $B$G$9$+$i!"$3$l$OB3$/(B <directive module="mod_log_config">TransferLog</directive>
- $B%G%#%l%/%F%#%V$K$O1F6A$rM?$($^$;$s!#(B
- $B$5$i$K!"(B<directive>LogFormat</directive> $B%G%#%l%/%F%#%V$O4{B8$N(B nickname $B$r(B
- $B;H$C$FJL$N(B nickname $B$rDj5A$9$k$3$H$O$G$-$^$;$s!#(BNickname $B$K$O(B
- $B%Q!<%;%s%H5-9f(B (<code>%</code>) $B$,4^$^$l$F$$$F$O$$$1$J$$$3$H$K$bCm0U(B
- $B$7$F$/$@$5$$!#(B</p>
-
- <example><title>$BNc(B</title>
- LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TransferLog</name>
-<description>$B%m%0%U%!%$%k$N0LCV$r;XDj(B</description>
-<syntax>TransferLog <var>file</var>|<var>pipe</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"%m%0=q<0$rD>@\;XDj$G$-$J$$$3$H$H!"(B
- $B>r7oIU$-%m%.%s%0$,L5$$$3$H$r=|$/$H!"(B<directive module="mod_log_config"
- >CustomLog</directive> $B$HA4$/F1$80z?t$H8z2L$,$"$j$^$9!#(B
- $BD>@\%m%0=q<0$r;XDj$9$kBe$o$j$K!"%m%0$N=q<0$O$=$3$^$G$G0lHV:G8e$K;XDj$5$l$?(B
- $B%K%C%/%M!<%`$rDj5A$7$J$$(B
- <directive module="mod_log_config">LogFormat</directive> $B%G%#%l%/%F%#%V(B
- $B$GDj5A$5$l$?$b$N$r;H$$$^$9!#(B
- $B$b$7B>$N=q<0$,A4$/;XDj$5$l$F$$$J$$$H$-$O(B Common Log Format
- $B$,;H$o$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
- TransferLog logs/access_log
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_log_config.xml.meta b/docs/manual/mod/mod_log_config.xml.meta
deleted file mode 100644
index a632feb587..0000000000
--- a/docs/manual/mod/mod_log_config.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_log_config</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant outdated="yes">ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_log_forensic.html b/docs/manual/mod/mod_log_forensic.html
deleted file mode 100644
index 8537be041d..0000000000
--- a/docs/manual/mod/mod_log_forensic.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_log_forensic.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_log_forensic.html.en b/docs/manual/mod/mod_log_forensic.html.en
deleted file mode 100644
index c6d2c98b3d..0000000000
--- a/docs/manual/mod/mod_log_forensic.html.en
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_log_forensic - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_log_forensic</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_log_forensic.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Forensic Logging of the requests made to the server</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>log_forensic_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_log_forensic.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td><code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code> is no longer required since
-version 2.1</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module provides for forensic logging of client
- requests. Logging is done before and after processing a request, so the
- forensic log contains two log lines for each request.
- The forensic logger is very strict, which means:</p>
-
- <ul>
- <li>The format is fixed. You cannot modify the logging format at
- runtime.</li>
- <li>If it cannot write its data, the child process
- exits immediately and may dump core (depending on your
- <code class="directive"><a href="../mod/mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></code>
- configuration).</li>
- </ul>
-
- <p>The <code>check_forensic</code> script, which can be found in the
- distribution's support directory, may be helpful in evaluating the
- forensic log output.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#forensiclog">ForensicLog</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#formats">Forensic Log Format</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">Security Considerations</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../logs.html">Apache Log Files</a></li>
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">Forensic Log Format</a></h2>
- <p>Each request is logged two times. The first time <em>before</em> it's
- processed further (that is, after receiving the headers). The second log
- entry is written <em>after</em> the request processing at the same time
- where normal logging occurs.</p>
-
- <p>In order to identify each request, a unique request ID is assigned.
- This forensic ID can be cross logged in the normal transfer log using the
- <code>%{forensic-id}n</code> format string. If you're using
- <code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code>, its generated ID will be used.</p>
-
- <p>The first line logs the forensic ID, the request line and all received
- headers, separated by pipe characters (<code>|</code>). A sample line
- looks like the following (all on one line):</p>
-
- <div class="example"><p><code>
- +yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
- HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11;
- U; Linux i686; en-US; rv%3a1.6) Gecko/20040216
- Firefox/0.8|Accept:image/png, <var>etc...</var>
- </code></p></div>
-
- <p>The plus character at the beginning indicates that this is first log
- line of this request. The second line just contains a minus character and
- the ID again:</p>
-
- <div class="example"><p><code>
- -yQtJf8CoAB4AAFNXBIEAAAAA
- </code></p></div>
-
- <p>The <code>check_forensic</code> script takes as its argument the name
- of the logfile. It looks for those <code>+</code>/<code>-</code> ID pairs
- and complains if a request was not completed.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Security Considerations</a></h2>
- <p>See the <a href="../misc/security_tips.html#serverroot">security tips</a>
- document for details on why your security could be compromised
- if the directory where logfiles are stored is writable by
- anyone other than the user that starts the server.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForensicLog" id="ForensicLog">ForensicLog</a> <a name="forensiclog" id="forensiclog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets filename of the forensic log</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForensicLog <var>filename</var>|<var>pipe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_log_forensic</td></tr>
-</table>
- <p>The <code class="directive">ForensicLog</code> directive is used to
- log requests to the server for forensic analysis. Each log entry
- is assigned a unique ID which can be associated with the request
- using the normal <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive. <code class="module"><a href="../mod/mod_log_forensic.html">mod_log_forensic</a></code> creates a token called
- <code>forensic-id</code>, which can be added to the transfer log
- using the <code>%{forensic-id}n</code> format string.</p>
-
- <p>The argument, which specifies the location to which
- the logs will be written, can take one of the following two
- types of values:</p>
-
- <dl>
- <dt><var>filename</var></dt>
- <dd>A filename, relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>The pipe character "<code>|</code>", followed by the path
- to a program to receive the log information on its standard
- input. The program name can be specified relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive.
-
- <div class="warning"><h3>Security:</h3>
- <p>If a program is used, then it will be run as the user who
- started httpd. This will be root if the server was started by root;
- be sure that the program is secure or switches to a less privileged
- user.</p>
- </div>
-
- <div class="note"><h3>Note</h3>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </div></dd>
- </dl>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_log_forensic.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_log_forensic.xml b/docs/manual/mod/mod_log_forensic.xml
deleted file mode 100644
index b19e1fcda0..0000000000
--- a/docs/manual/mod/mod_log_forensic.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_log_forensic.xml.meta">
-
-<name>mod_log_forensic</name>
-<description>Forensic Logging of the requests made to the server</description>
-<status>Extension</status>
-<sourcefile>mod_log_forensic.c</sourcefile>
-<identifier>log_forensic_module</identifier>
-<compatibility><module>mod_unique_id</module> is no longer required since
-version 2.1</compatibility>
-
-<summary>
- <p>This module provides for forensic logging of client
- requests. Logging is done before and after processing a request, so the
- forensic log contains two log lines for each request.
- The forensic logger is very strict, which means:</p>
-
- <ul>
- <li>The format is fixed. You cannot modify the logging format at
- runtime.</li>
- <li>If it cannot write its data, the child process
- exits immediately and may dump core (depending on your
- <directive module="mpm_common">CoreDumpDirectory</directive>
- configuration).</li>
- </ul>
-
- <p>The <code>check_forensic</code> script, which can be found in the
- distribution's support directory, may be helpful in evaluating the
- forensic log output.</p>
-</summary>
-<seealso><a href="../logs.html">Apache Log Files</a></seealso>
-<seealso><module>mod_log_config</module></seealso>
-
-<section id="formats"><title>Forensic Log Format</title>
- <p>Each request is logged two times. The first time <em>before</em> it's
- processed further (that is, after receiving the headers). The second log
- entry is written <em>after</em> the request processing at the same time
- where normal logging occurs.</p>
-
- <p>In order to identify each request, a unique request ID is assigned.
- This forensic ID can be cross logged in the normal transfer log using the
- <code>%{forensic-id}n</code> format string. If you're using
- <module>mod_unique_id</module>, its generated ID will be used.</p>
-
- <p>The first line logs the forensic ID, the request line and all received
- headers, separated by pipe characters (<code>|</code>). A sample line
- looks like the following (all on one line):</p>
-
- <example>
- +yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
- HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11;
- U; Linux i686; en-US; rv%3a1.6) Gecko/20040216
- Firefox/0.8|Accept:image/png, <var>etc...</var>
- </example>
-
- <p>The plus character at the beginning indicates that this is first log
- line of this request. The second line just contains a minus character and
- the ID again:</p>
-
- <example>
- -yQtJf8CoAB4AAFNXBIEAAAAA
- </example>
-
- <p>The <code>check_forensic</code> script takes as its argument the name
- of the logfile. It looks for those <code>+</code>/<code>-</code> ID pairs
- and complains if a request was not completed.</p>
-</section>
-
-<section id="security"><title>Security Considerations</title>
- <p>See the <a
- href="../misc/security_tips.html#serverroot">security tips</a>
- document for details on why your security could be compromised
- if the directory where logfiles are stored is writable by
- anyone other than the user that starts the server.</p>
-</section>
-
-<directivesynopsis>
-<name>ForensicLog</name>
-<description>Sets filename of the forensic log</description>
-<syntax>ForensicLog <var>filename</var>|<var>pipe</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ForensicLog</directive> directive is used to
- log requests to the server for forensic analysis. Each log entry
- is assigned a unique ID which can be associated with the request
- using the normal <directive module="mod_log_config">CustomLog</directive>
- directive. <module>mod_log_forensic</module> creates a token called
- <code>forensic-id</code>, which can be added to the transfer log
- using the <code>%{forensic-id}n</code> format string.</p>
-
- <p>The argument, which specifies the location to which
- the logs will be written, can take one of the following two
- types of values:</p>
-
- <dl>
- <dt><var>filename</var></dt>
- <dd>A filename, relative to the <directive module="core"
- >ServerRoot</directive>.</dd>
-
- <dt><var>pipe</var></dt>
- <dd>The pipe character "<code>|</code>", followed by the path
- to a program to receive the log information on its standard
- input. The program name can be specified relative to the <directive
- module="core">ServerRoot</directive> directive.
-
- <note type="warning"><title>Security:</title>
- <p>If a program is used, then it will be run as the user who
- started httpd. This will be root if the server was started by root;
- be sure that the program is secure or switches to a less privileged
- user.</p>
- </note>
-
- <note><title>Note</title>
- <p>When entering a file path on non-Unix platforms, care should be taken
- to make sure that only forward slashed are used even though the platform
- may allow the use of back slashes. In general it is a good idea to always
- use forward slashes throughout the configuration files.</p>
- </note></dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_log_forensic.xml.meta b/docs/manual/mod/mod_log_forensic.xml.meta
deleted file mode 100644
index abb454728f..0000000000
--- a/docs/manual/mod/mod_log_forensic.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_log_forensic</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_logio.html b/docs/manual/mod/mod_logio.html
deleted file mode 100644
index 225d49bf58..0000000000
--- a/docs/manual/mod/mod_logio.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_logio.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_logio.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_logio.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_logio.html.en b/docs/manual/mod/mod_logio.html.en
deleted file mode 100644
index a4629023d9..0000000000
--- a/docs/manual/mod/mod_logio.html.en
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_logio - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_logio</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_logio.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_logio.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_logio.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Logging of input and output bytes per request</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>logio_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_logio.c</td></tr></table>
-<h3>Summary</h3>
-
-
- <p>This module provides the logging of input and output number of
- bytes received/sent per request. The numbers reflect the actual bytes
- as received on the network, which then takes into account the
- headers and bodies of requests and responses. The counting is done
- before SSL/TLS on input and after SSL/TLS on output, so the numbers
- will correctly reflect any changes made by encryption.</p>
-
- <p>This module requires <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>.</p>
-
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#formats">Custom Log Formats</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-<li><a href="../logs.html">Apache Log Files</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">Custom Log Formats</a></h2>
-
-
- <p>This modules adds two new logging directives. The characteristics of the
- request itself are logged by placing "<code>%</code>" directives in
- the format string, which are replaced in the log file by the values as
- follows:</p>
-
- <table class="bordered"><tr class="header"><th>Format&nbsp;String</th>
- <th>Description</th></tr>
-<tr><td><code>%...I</code></td>
- <td>Bytes received, including request and headers, cannot be
- zero.</td></tr>
-<tr class="odd"><td><code>%...O</code></td>
- <td>Bytes sent, including headers, cannot be zero.</td></tr>
-</table>
-
- <p>Usually, the functionality is used like this:</p>
-
- <dl>
- <dt>Combined I/O log format:</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\" %I %O"</code></dd>
- </dl>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_logio.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_logio.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_logio.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_logio.html.ja.euc-jp b/docs/manual/mod/mod_logio.html.ja.euc-jp
deleted file mode 100644
index 5e9e3daef6..0000000000
--- a/docs/manual/mod/mod_logio.html.ja.euc-jp
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_logio - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_logio</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_logio.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_logio.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥ÈËè¤ËÆþÎϥХ¤¥È¿ô¤È½ÐÎϥХ¤¥È¿ô¤È¤ò¥í¥®¥ó¥°</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>logio_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_logio.c</td></tr></table>
-<h3>³µÍ×</h3>
-
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥ê¥¯¥¨¥¹¥È¤´¤È¤Ë¼õ¤±¼è¤Ã¤¿¥Ð¥¤¥È¿ô¤È
- Á÷¿®¤·¤¿¥Ð¥¤¥È¿ô¤Î¥í¥®¥ó¥°¤ò¹Ô¤Ê¤¦µ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£
- µ­Ï¿¤µ¤ì¤ë¿ô»ú¤Ï¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤È¥ì¥¹¥Ý¥ó¥¹¤ÎËÜÂΤò
- È¿±Ç¤·¤¿¡¢¼ÂºÝ¤Ë¥Í¥Ã¥È¥ï¡¼¥¯¤Ç¼õ¤±¼è¤Ã¤¿¥Ð¥¤¥ÈÃͤǤ¹¡£
- ÆþÎÏ¤Ç¤Ï SSL/TLS ¤ÎÁ°¤Ë¡¢½ÐÎÏ¤Ç¤Ï SSL/TLS ¤Î¸å¤Ë¿ô¤¨¤ë¤Î¤Ç¡¢
- ¿ô»ú¤Ï°Å¹æ¤Ë¤è¤ëÊѲ½¤âÀµ¤·¤¯È¿±Ç¤·¤¿¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Î»ÈÍÑ¤Ë¤Ï <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> ¥â¥¸¥å¡¼¥ë¤¬
- ɬÍפǤ¹¡£</p>
-
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#formats">¥«¥¹¥¿¥à¥í¥°½ñ¼°</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-<li><a href="../logs.html">Apache ¥í¥°¥Õ¥¡¥¤¥ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">¥«¥¹¥¿¥à¥í¥°½ñ¼°</a></h2>
-
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¿·¤·¤¤¥í¥®¥ó¥°Íѥǥ£¥ì¥¯¥Æ¥£¥Ö¤ò²Ã¤¨¤Þ¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¼«¿È¤ÎÆÃħ¤Ï¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤Ë¡¢°Ê²¼¤ÎÍͤËÃÖ´¹¤µ¤ì¤ë
- "<code>%</code>" ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- Æþ¤ì¤ë¤³¤È¤Ç¥í¥°¼ý½¸¤µ¤ì¤Þ¤¹:</p>
-
- <table class="bordered"><tr class="header"><th>¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó</th>
- <th>ÀâÌÀ</th></tr>
-<tr><td><code>%...I</code></td>
- <td>¥ê¥¯¥¨¥¹¥È¤È¥Ø¥Ã¥À¤ò´Þ¤à¡¢¼õ¤±¼è¤Ã¤¿¥Ð¥¤¥È¿ô¡£
- 0 ¤Ë¤Ï¤Ê¤é¤Ê¤¤¡£</td></tr>
-<tr class="odd"><td><code>%...O</code></td>
- <td>¥Ø¥Ã¥À¤ò´Þ¤à¡¢Á÷¿®¤·¤¿¥Ð¥¤¥È¿ô¡£0 ¤Ë¤Ï¤Ê¤é¤Ê¤¤¡£</td></tr>
-</table>
-
- <p>Ä̾¤³¤Îµ¡Ç½¤Ï°Ê²¼¤ÎÍͤ˻ÈÍѤµ¤ì¤Þ¤¹:</p>
-
- <dl>
- <dt>·ë¹ç I/O ¥í¥°½ñ¼°:</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\" %I %O"</code></dd>
- </dl>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_logio.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_logio.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_logio.html.ko.euc-kr b/docs/manual/mod/mod_logio.html.ko.euc-kr
deleted file mode 100644
index 30e6bbd4ca..0000000000
--- a/docs/manual/mod/mod_logio.html.ko.euc-kr
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_logio - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_logio</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_logio.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_logio.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¿äû´ç ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·Ï</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>logio_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_logio.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
- <p>ÀÌ ¸ðµâÀº ¿äû´ç ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·ÏÇÑ´Ù. ¼ýÀÚ´Â
- ³×Æ®¿÷¿¡¼­ ½ÇÁ¦·Î ÁÖ°í¹ÞÀº ¹ÙÀÌÆ®¼ö¸¦ ³ªÅ¸³»¸ç, ¿äû°ú ÀÀ´äÀÇ
- Çì´õ¿Í ³»¿ëÀ» Æ÷ÇÔÇÑ´Ù. °³¼ö´Â ÀÔ·ÂÀÇ °æ¿ì SSL/TLS ÀÌÀü¿¡,
- Ãâ·ÂÀÇ °æ¿ì SSL/TLS ÀÌÈÄ¿¡ ¼¼±â¶§¹®¿¡ ¾ÏȣȭÀÇ °á°úµµ
- ¿Ã¹Ù·Î ¹Ý¿µµÈ´Ù.</p>
-
- <p>ÀÌ ¸ðµâÀ» »ç¿ëÇÏ·Á¸é <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>ÀÌ
- ÇÊ¿äÇÏ´Ù.</p>
-
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<p>ÀÌ ¸ðµâ¿¡´Â Áö½Ã¾î°¡ ¾ø½À´Ï´Ù.</p>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#formats">»ç¿ëÀÚÁ¤ÀÇ ·Î±× Çü½Ä</a></li>
-</ul><h3>Âü°í</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
-<li><a href="../logs.html">¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="formats" id="formats">»ç¿ëÀÚÁ¤ÀÇ ·Î±× Çü½Ä</a></h2>
-
-
- <p>ÀÌ ¸ðµâÀº µÎ°¡Áö »õ·Î¿î ·Î±×Áö½Ã¾î¸¦ Ãß°¡ÇÑ´Ù. ¿äûÀÚüÀÇ
- Ư¼ºÀº Çü½Ä¹®ÀÚ¿­¿¡ "<code>%</code>" Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ±â·ÏÇÑ´Ù.
- Áö½Ã¾î´Â ·Î±×ÆÄÀÏ¿¡ ´ÙÀ½°ú °°Àº °ªÀ» ±â·ÏÇÑ´Ù:</p>
-
- <table class="bordered"><tr class="header"><th>Çü½Ä¹®ÀÚ¿­</th>
- <th>¼³¸í</th></tr>
-<tr><td><code>%...I</code></td>
- <td>¿äû°ú Çì´õ¸¦ Æ÷ÇÔÇÏ¿© ¹ÞÀº ¹ÙÀÌÆ®¼ö. 0ÀÏ ¼ö ¾ø´Ù.</td></tr>
-<tr class="odd"><td><code>%...O</code></td>
- <td>Çì´õ¸¦ Æ÷ÇÔÇÏ¿© º¸³½ ¹ÙÀÌÆ®¼ö. 0ÀÏ ¼ö ¾ø´Ù.</td></tr>
-</table>
-
- <p>º¸Åë ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù:</p>
-
- <dl>
-
- <dt>°áÇÕµÈ ÀÔÃâ·Â ·Î±× Çü½Ä:</dt>
-
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\" %I %O"</code></dd>
-
- </dl>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_logio.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_logio.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_logio.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_logio.xml b/docs/manual/mod/mod_logio.xml
deleted file mode 100644
index 05aa10a537..0000000000
--- a/docs/manual/mod/mod_logio.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_logio.xml.meta">
-
-<name>mod_logio</name>
-<description>Logging of input and output bytes per request</description>
-<status>Extension</status>
-<sourcefile>mod_logio.c</sourcefile>
-<identifier>logio_module</identifier>
-
-<summary>
-
- <p>This module provides the logging of input and output number of
- bytes received/sent per request. The numbers reflect the actual bytes
- as received on the network, which then takes into account the
- headers and bodies of requests and responses. The counting is done
- before SSL/TLS on input and after SSL/TLS on output, so the numbers
- will correctly reflect any changes made by encryption.</p>
-
- <p>This module requires <module>mod_log_config</module>.</p>
-
-</summary>
-
-<seealso><module>mod_log_config</module></seealso>
-<seealso><a href="../logs.html">Apache Log Files</a></seealso>
-
-<section id="formats">
-<title>Custom Log Formats</title>
-
- <p>This modules adds two new logging directives. The characteristics of the
- request itself are logged by placing "<code>%</code>" directives in
- the format string, which are replaced in the log file by the values as
- follows:</p>
-
- <table border="1" style="zebra">
- <tr><th>Format&nbsp;String</th>
- <th>Description</th></tr>
-
- <tr><td><code>%...I</code></td>
- <td>Bytes received, including request and headers, cannot be
- zero.</td></tr>
-
- <tr><td><code>%...O</code></td>
- <td>Bytes sent, including headers, cannot be zero.</td></tr>
- </table>
-
- <p>Usually, the functionality is used like this:</p>
-
- <dl>
- <dt>Combined I/O log format:</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\" %I %O"</code></dd>
- </dl>
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_logio.xml.ja b/docs/manual/mod/mod_logio.xml.ja
deleted file mode 100644
index d7c2101128..0000000000
--- a/docs/manual/mod/mod_logio.xml.ja
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_logio.xml.meta">
-
-<name>mod_logio</name>
-<description>$B%j%/%(%9%HKh$KF~NO%P%$%H?t$H=PNO%P%$%H?t$H$r%m%.%s%0(B</description>
-<status>Extension</status>
-<sourcefile>mod_logio.c</sourcefile>
-<identifier>logio_module</identifier>
-
-<summary>
-
- <p>$B$3$N%b%8%e!<%k$O%j%/%(%9%H$4$H$K<u$1<h$C$?%P%$%H?t$H(B
- $BAw?.$7$?%P%$%H?t$N%m%.%s%0$r9T$J$&5!G=$rDs6!$7$^$9!#(B
- $B5-O?$5$l$k?t;z$O%j%/%(%9%H$N%X%C%@$H%l%9%]%s%9$NK\BN$r(B
- $BH?1G$7$?!"<B:]$K%M%C%H%o!<%/$G<u$1<h$C$?%P%$%HCM$G$9!#(B
- $BF~NO$G$O(B SSL/TLS $B$NA0$K!"=PNO$G$O(B SSL/TLS $B$N8e$K?t$($k$N$G!"(B
- $B?t;z$O0E9f$K$h$kJQ2=$b@5$7$/H?1G$7$?$b$N$K$J$j$^$9!#(B</p>
-
- <p>$B$3$N%b%8%e!<%k$N;HMQ$K$O(B <module>mod_log_config</module> $B%b%8%e!<%k$,(B
- $BI,MW$G$9!#(B</p>
-
-</summary>
-
-<seealso><module>mod_log_config</module></seealso>
-<seealso><a href="../logs.html">Apache $B%m%0%U%!%$%k(B</a></seealso>
-
-<section id="formats">
-<title>$B%+%9%?%`%m%0=q<0(B</title>
-
- <p>$B$3$N%b%8%e!<%k$O?7$7$$%m%.%s%0MQ%G%#%l%/%F%#%V$r2C$($^$9!#(B
- $B%j%/%(%9%H<+?H$NFCD'$O%U%)!<%^%C%HJ8;zNs$K!"0J2<$NMM$KCV49$5$l$k(B
- "<code>%</code>" $B%G%#%l%/%F%#%V$r(B
- $BF~$l$k$3$H$G%m%0<}=8$5$l$^$9(B:</p>
-
- <table border="1" style="zebra">
- <tr><th>$B%U%)!<%^%C%HJ8;zNs(B</th>
- <th>$B@bL@(B</th></tr>
-
- <tr><td><code>%...I</code></td>
- <td>$B%j%/%(%9%H$H%X%C%@$r4^$`!"<u$1<h$C$?%P%$%H?t!#(B
- 0 $B$K$O$J$i$J$$!#(B</td></tr>
-
- <tr><td><code>%...O</code></td>
- <td>$B%X%C%@$r4^$`!"Aw?.$7$?%P%$%H?t!#(B0 $B$K$O$J$i$J$$!#(B</td></tr>
- </table>
-
- <p>$BDL>o!"$3$N5!G=$O0J2<$NMM$K;HMQ$5$l$^$9(B:</p>
-
- <dl>
- <dt>$B7k9g(B I/O $B%m%0=q<0(B:</dt>
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\" %I %O"</code></dd>
- </dl>
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_logio.xml.ko b/docs/manual/mod/mod_logio.xml.ko
deleted file mode 100644
index f76ca8a1b1..0000000000
--- a/docs/manual/mod/mod_logio.xml.ko
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding='EUC-KR' ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_logio.xml.meta">
-
-<name>mod_logio</name>
-<description>¿äû´ç ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·Ï</description>
-<status>Extension</status>
-<sourcefile>mod_logio.c</sourcefile>
-<identifier>logio_module</identifier>
-
-<summary>
-
- <p>ÀÌ ¸ðµâÀº ¿äû´ç ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·ÏÇÑ´Ù. ¼ýÀÚ´Â
- ³×Æ®¿÷¿¡¼­ ½ÇÁ¦·Î ÁÖ°í¹ÞÀº ¹ÙÀÌÆ®¼ö¸¦ ³ªÅ¸³»¸ç, ¿äû°ú ÀÀ´äÀÇ
- Çì´õ¿Í ³»¿ëÀ» Æ÷ÇÔÇÑ´Ù. °³¼ö´Â ÀÔ·ÂÀÇ °æ¿ì SSL/TLS ÀÌÀü¿¡,
- Ãâ·ÂÀÇ °æ¿ì SSL/TLS ÀÌÈÄ¿¡ ¼¼±â¶§¹®¿¡ ¾ÏȣȭÀÇ °á°úµµ
- ¿Ã¹Ù·Î ¹Ý¿µµÈ´Ù.</p>
-
- <p>ÀÌ ¸ðµâÀ» »ç¿ëÇÏ·Á¸é <module>mod_log_config</module>ÀÌ
- ÇÊ¿äÇÏ´Ù.</p>
-
-</summary>
-
-<seealso><module>mod_log_config</module></seealso>
-<seealso><a href="../logs.html">¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏ</a></seealso>
-
-<section id="formats">
-<title>»ç¿ëÀÚÁ¤ÀÇ ·Î±× Çü½Ä</title>
-
- <p>ÀÌ ¸ðµâÀº µÎ°¡Áö »õ·Î¿î ·Î±×Áö½Ã¾î¸¦ Ãß°¡ÇÑ´Ù. ¿äûÀÚüÀÇ
- Ư¼ºÀº Çü½Ä¹®ÀÚ¿­¿¡ "<code>%</code>" Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ±â·ÏÇÑ´Ù.
- Áö½Ã¾î´Â ·Î±×ÆÄÀÏ¿¡ ´ÙÀ½°ú °°Àº °ªÀ» ±â·ÏÇÑ´Ù:</p>
-
- <table border="1" style="zebra">
- <tr><th>Çü½Ä¹®ÀÚ¿­</th>
- <th>¼³¸í</th></tr>
-
- <tr><td><code>%...I</code></td>
- <td>¿äû°ú Çì´õ¸¦ Æ÷ÇÔÇÏ¿© ¹ÞÀº ¹ÙÀÌÆ®¼ö. 0ÀÏ ¼ö ¾ø´Ù.</td></tr>
-
- <tr><td><code>%...O</code></td>
- <td>Çì´õ¸¦ Æ÷ÇÔÇÏ¿© º¸³½ ¹ÙÀÌÆ®¼ö. 0ÀÏ ¼ö ¾ø´Ù.</td></tr>
- </table>
-
- <p>º¸Åë ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù:</p>
-
- <dl>
-
- <dt>°áÇÕµÈ ÀÔÃâ·Â ·Î±× Çü½Ä:</dt>
-
- <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
- \"%{User-agent}i\" %I %O"</code></dd>
-
- </dl>
-
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_logio.xml.meta b/docs/manual/mod/mod_logio.xml.meta
deleted file mode 100644
index ad1bd713ac..0000000000
--- a/docs/manual/mod/mod_logio.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_logio</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_mem_cache.html b/docs/manual/mod/mod_mem_cache.html
deleted file mode 100644
index 7e41a01227..0000000000
--- a/docs/manual/mod/mod_mem_cache.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_mem_cache.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_mem_cache.html.en b/docs/manual/mod/mod_mem_cache.html.en
deleted file mode 100644
index 95046fef49..0000000000
--- a/docs/manual/mod/mod_mem_cache.html.en
+++ /dev/null
@@ -1,237 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_mem_cache - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_mem_cache</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mem_cache.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Content cache keyed to URIs</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mem_cache_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_mem_cache.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning">
- This module is experimental. Documentation is still under
- development...
- </div>
-
- <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>. It acts as a support module for <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> and provides a memory based storage manager.
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code> can be configured to operate in two
- modes: caching open file descriptors or caching objects in heap storage.
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code> is most useful when used to cache locally
- generated content or to cache backend server content for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> configured for <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> (aka <dfn>reverse proxy</dfn>).</p>
-
- <p>Content is stored in and retrieved from the cache using URI based
- keys. Content with access protection is not cached.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#mcachemaxobjectcount">MCacheMaxObjectCount</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mcachemaxobjectsize">MCacheMaxObjectSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mcacheminobjectsize">MCacheMinObjectSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mcachesize">MCacheSize</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li>
-<li><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MCacheMaxObjectCount" id="MCacheMaxObjectCount">MCacheMaxObjectCount</a> <a name="mcachemaxobjectcount" id="mcachemaxobjectcount">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum number of objects allowed to be placed in the
-cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MCacheMaxObjectCount <var>value</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MCacheMaxObjectCount 1009</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mem_cache</td></tr>
-</table>
- <p>The <code class="directive">MCacheMaxObjectCount</code> directive sets the
- maximum number of objects to be cached. The value is used to create the
- open hash table. If a new object needs to be inserted in the cache and
- the maximum number of objects has been reached, an object will be
- removed to allow the new object to be cached. The object to be removed
- is selected using the algorithm specified by <code class="directive"><a href="#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- MCacheMaxObjectCount 13001
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MCacheMaxObjectSize" id="MCacheMaxObjectSize">MCacheMaxObjectSize</a> <a name="mcachemaxobjectsize" id="mcachemaxobjectsize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum size (in bytes) of a document allowed in the
-cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MCacheMaxObjectSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MCacheMaxObjectSize 10000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mem_cache</td></tr>
-</table>
- <p>The <code class="directive">MCacheMaxObjectSize</code> directive sets the
- maximum allowable size, in bytes, of a document for it to be considered
- cacheable.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- MCacheMaxObjectSize 6400000
- </code></p></div>
-
- <div class="note"><h3>Note</h3>
- <p>The value of <code class="directive">MCacheMaxObjectSize</code> must be
- greater than the value specified by the <code class="directive"><a href="#mcacheminobjectsize">MCacheMinObjectSize</a></code> directive.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MCacheMaxStreamingBuffer" id="MCacheMaxStreamingBuffer">MCacheMaxStreamingBuffer</a> <a name="mcachemaxstreamingbuffer" id="mcachemaxstreamingbuffer">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MCacheMaxStreamingBuffer <var>size_in_bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MCacheMaxStreamingBuffer the smaller of 100000 or MCacheMaxObjectSize</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mem_cache</td></tr>
-</table>
- <p>The <code class="directive">MCacheMaxStreamingBuffer</code> directive
- specifies the maximum number of bytes of a streamed response to
- buffer before deciding that the response is too big to cache.
- A streamed response is one in which the entire content is not
- immediately available and in which the <code>Content-Length</code>
- may not be known. Sources of streaming responses include proxied
- responses and the output of CGI scripts. By default, a streamed
- response will <em>not</em> be cached unless it has a
- <code>Content-Length</code> header. The reason for this is to
- avoid using a large amount of memory to buffer a partial response
- that might end up being too large to fit in the cache.
- The <code class="directive">MCacheMaxStreamingBuffer</code> directive allows
- buffering of streamed responses that don't contain a
- <code>Content-Length</code> up to the specified maximum amount of
- space. If the maximum buffer space is reached, the buffered
- content is discarded and the attempt to cache is abandoned.</p>
-
- <div class="note"><h3>Note:</h3>
- <p>Using a nonzero value for <code class="directive">MCacheMaxStreamingBuffer</code>
- will not delay the transmission of the response to the client.
- As soon as <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code> copies a block of streamed
- content into a buffer, it sends the block on to the next output
- filter for delivery to the client.</p>
- </div>
-
- <div class="example"><p><code>
- # Enable caching of streamed responses up to 64KB:<br />
- MCacheMaxStreamingBuffer 65536
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MCacheMinObjectSize" id="MCacheMinObjectSize">MCacheMinObjectSize</a> <a name="mcacheminobjectsize" id="mcacheminobjectsize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The minimum size (in bytes) of a document to be allowed in the
-cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MCacheMinObjectSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MCacheMinObjectSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mem_cache</td></tr>
-</table>
- <p>The <code class="directive">MCacheMinObjectSize</code> directive sets the
- minimum size in bytes of a document for it to be considered
- cacheable.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- MCacheMinObjectSize 10000
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MCacheRemovalAlgorithm" id="MCacheRemovalAlgorithm">MCacheRemovalAlgorithm</a> <a name="mcacheremovalalgorithm" id="mcacheremovalalgorithm">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The algorithm used to select documents for removal from the
-cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MCacheRemovalAlgorithm LRU|GDSF</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MCacheRemovalAlgorithm GDSF</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mem_cache</td></tr>
-</table>
- <p>The <code class="directive">MCacheRemovalAlgorithm</code> directive specifies
- the algorithm used to select documents for removal from the cache.
- Two choices are available:</p>
-
- <dl>
- <dt><code>LRU</code> (Least Recently Used)</dt>
- <dd><code>LRU</code> removes the documents that have not been accessed
- for the longest time.</dd>
-
- <dt><code>GDSF</code> (GreadyDual-Size)</dt>
- <dd><code>GDSF</code> assigns a priority to cached documents based
- on the cost of a cache miss and the size of the document. Documents
- with the lowest priority are removed first.</dd>
- </dl>
-
- <div class="example"><h3>Example</h3><p><code>
- MCacheRemovalAlgorithm GDSF<br />
- MCacheRemovalAlgorithm LRU
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MCacheSize" id="MCacheSize">MCacheSize</a> <a name="mcachesize" id="mcachesize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The maximum amount of memory used by the cache in
-KBytes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MCacheSize <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MCacheSize 100</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mem_cache</td></tr>
-</table>
- <p>The <code class="directive">MCacheSize</code> directive sets the maximum
- amount of memory to be used by the cache, in KBytes (1024-byte units).
- If a new object needs to be inserted in the cache and the size of the
- object is greater than the remaining memory, objects will be removed
- until the new object can be cached. The object to be removed is
- selected using the algorithm specified by <code class="directive"><a href="#mcacheremovalalgorithm">MCacheRemovalAlgorithm</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- MCacheSize 700000
- </code></p></div>
-
- <div class="note"><h3>Note</h3>
- <p>The <code class="directive">MCacheSize</code> value must be greater than
- the value specified by the <code class="directive"><a href="#mcachemaxobjectsize">MCacheMaxObjectSize</a></code> directive.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mem_cache.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_mem_cache.xml b/docs/manual/mod/mod_mem_cache.xml
deleted file mode 100644
index 3d177134e7..0000000000
--- a/docs/manual/mod/mod_mem_cache.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_mem_cache.xml.meta">
-
-<name>mod_mem_cache</name>
-<description>Content cache keyed to URIs</description>
-<status>Experimental</status>
-<sourcefile>mod_mem_cache.c</sourcefile>
-<identifier>mem_cache_module</identifier>
-
-<summary>
- <note type="warning">
- This module is experimental. Documentation is still under
- development...
- </note>
-
- <p>This module <em>requires</em> the service of <module
- >mod_cache</module>. It acts as a support module for <module
- >mod_cache</module> and provides a memory based storage manager.
- <module>mod_mem_cache</module> can be configured to operate in two
- modes: caching open file descriptors or caching objects in heap storage.
- <module>mod_mem_cache</module> is most useful when used to cache locally
- generated content or to cache backend server content for <module
- >mod_proxy</module> configured for <directive module="mod_proxy"
- >ProxyPass</directive> (aka <dfn>reverse proxy</dfn>).</p>
-
- <p>Content is stored in and retrieved from the cache using URI based
- keys. Content with access protection is not cached.</p>
-</summary>
-<seealso><module>mod_cache</module></seealso>
-<seealso><module>mod_disk_cache</module></seealso>
-
-<directivesynopsis>
-<name>MCacheSize</name>
-<description>The maximum amount of memory used by the cache in
-KBytes</description>
-<syntax>MCacheSize <var>KBytes</var></syntax>
-<default>MCacheSize 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MCacheSize</directive> directive sets the maximum
- amount of memory to be used by the cache, in KBytes (1024-byte units).
- If a new object needs to be inserted in the cache and the size of the
- object is greater than the remaining memory, objects will be removed
- until the new object can be cached. The object to be removed is
- selected using the algorithm specified by <directive
- module="mod_mem_cache">MCacheRemovalAlgorithm</directive>.</p>
-
- <example><title>Example</title>
- MCacheSize 700000
- </example>
-
- <note><title>Note</title>
- <p>The <directive>MCacheSize</directive> value must be greater than
- the value specified by the <directive module="mod_mem_cache"
- >MCacheMaxObjectSize</directive> directive.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MCacheMaxObjectCount</name>
-<description>The maximum number of objects allowed to be placed in the
-cache</description>
-<syntax>MCacheMaxObjectCount <var>value</var></syntax>
-<default>MCacheMaxObjectCount 1009</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MCacheMaxObjectCount</directive> directive sets the
- maximum number of objects to be cached. The value is used to create the
- open hash table. If a new object needs to be inserted in the cache and
- the maximum number of objects has been reached, an object will be
- removed to allow the new object to be cached. The object to be removed
- is selected using the algorithm specified by <directive
- module="mod_mem_cache">MCacheRemovalAlgorithm</directive>.</p>
-
- <example><title>Example</title>
- MCacheMaxObjectCount 13001
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MCacheMinObjectSize</name>
-<description>The minimum size (in bytes) of a document to be allowed in the
-cache</description>
-<syntax>MCacheMinObjectSize <var>bytes</var></syntax>
-<default>MCacheMinObjectSize 0</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MCacheMinObjectSize</directive> directive sets the
- minimum size in bytes of a document for it to be considered
- cacheable.</p>
-
- <example><title>Example</title>
- MCacheMinObjectSize 10000
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MCacheMaxObjectSize</name>
-<description>The maximum size (in bytes) of a document allowed in the
-cache</description>
-<syntax>MCacheMaxObjectSize <var>bytes</var></syntax>
-<default>MCacheMaxObjectSize 10000</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MCacheMaxObjectSize</directive> directive sets the
- maximum allowable size, in bytes, of a document for it to be considered
- cacheable.</p>
-
- <example><title>Example</title>
- MCacheMaxObjectSize 6400000
- </example>
-
- <note><title>Note</title>
- <p>The value of <directive>MCacheMaxObjectSize</directive> must be
- greater than the value specified by the <directive
- module="mod_mem_cache">MCacheMinObjectSize</directive> directive.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MCacheRemovalAlgorithm</name>
-<description>The algorithm used to select documents for removal from the
-cache</description>
-<syntax>MCacheRemovalAlgorithm LRU|GDSF</syntax>
-<default>MCacheRemovalAlgorithm GDSF</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MCacheRemovalAlgorithm</directive> directive specifies
- the algorithm used to select documents for removal from the cache.
- Two choices are available:</p>
-
- <dl>
- <dt><code>LRU</code> (Least Recently Used)</dt>
- <dd><code>LRU</code> removes the documents that have not been accessed
- for the longest time.</dd>
-
- <dt><code>GDSF</code> (GreadyDual-Size)</dt>
- <dd><code>GDSF</code> assigns a priority to cached documents based
- on the cost of a cache miss and the size of the document. Documents
- with the lowest priority are removed first.</dd>
- </dl>
-
- <example><title>Example</title>
- MCacheRemovalAlgorithm GDSF<br />
- MCacheRemovalAlgorithm LRU
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MCacheMaxStreamingBuffer</name>
-<description>Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</description>
-<syntax>MCacheMaxStreamingBuffer <var>size_in_bytes</var></syntax>
-<default>MCacheMaxStreamingBuffer the smaller of 100000 or MCacheMaxObjectSize</default>
-<contextlist><context>server config</context>
-</contextlist>
-
-<usage>
- <p>The <directive>MCacheMaxStreamingBuffer</directive> directive
- specifies the maximum number of bytes of a streamed response to
- buffer before deciding that the response is too big to cache.
- A streamed response is one in which the entire content is not
- immediately available and in which the <code>Content-Length</code>
- may not be known. Sources of streaming responses include proxied
- responses and the output of CGI scripts. By default, a streamed
- response will <em>not</em> be cached unless it has a
- <code>Content-Length</code> header. The reason for this is to
- avoid using a large amount of memory to buffer a partial response
- that might end up being too large to fit in the cache.
- The <directive>MCacheMaxStreamingBuffer</directive> directive allows
- buffering of streamed responses that don't contain a
- <code>Content-Length</code> up to the specified maximum amount of
- space. If the maximum buffer space is reached, the buffered
- content is discarded and the attempt to cache is abandoned.</p>
-
- <note><title>Note:</title>
- <p>Using a nonzero value for <directive>MCacheMaxStreamingBuffer</directive>
- will not delay the transmission of the response to the client.
- As soon as <module>mod_mem_cache</module> copies a block of streamed
- content into a buffer, it sends the block on to the next output
- filter for delivery to the client.</p>
- </note>
-
- <example>
- # Enable caching of streamed responses up to 64KB:<br />
- MCacheMaxStreamingBuffer 65536
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_mem_cache.xml.meta b/docs/manual/mod/mod_mem_cache.xml.meta
deleted file mode 100644
index 02c54dd64a..0000000000
--- a/docs/manual/mod/mod_mem_cache.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_mem_cache</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_mime.html b/docs/manual/mod/mod_mime.html
deleted file mode 100644
index 09e9184ea0..0000000000
--- a/docs/manual/mod/mod_mime.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_mime.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_mime.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mod_mime.html.en b/docs/manual/mod/mod_mime.html.en
deleted file mode 100644
index 7d801cb445..0000000000
--- a/docs/manual/mod/mod_mime.html.en
+++ /dev/null
@@ -1,937 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_mime - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_mime</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mime.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_mime.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Associates the requested filename's extensions
- with the file's behavior (handlers and filters)
- and content (mime-type, language, character set and
- encoding)</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mime_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_mime.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module is used to associate various bits of "meta
- information" with files by their filename extensions. This
- information relates the filename of the document to it's
- mime-type, language, character set and encoding. This
- information is sent to the browser, and participates in content
- negotiation, so the user's preferences are respected when
- choosing one of several possible files to serve. See
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> for more information
- about <a href="../content-negotiation.html">content negotiation</a>.</p>
-
- <p>The directives <code class="directive"><a href="#addcharset">AddCharset</a></code>, <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code> and <code class="directive"><a href="#addtype">AddType</a></code> are all used to map file
- extensions onto the meta-information for that file. Respectively
- they set the character set, content-encoding, content-language,
- and MIME-type (content-type) of documents. The directive <code class="directive"><a href="#typesconfig">TypesConfig</a></code> is used to specify a
- file which also maps extensions onto MIME types. </p>
-
- <p>In addition, <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> may define the <a href="../handler.html">handler</a> and <a href="../filter.html">filters</a> that originate and process
- content. The directives <code class="directive"><a href="#addhandler">AddHandler</a></code>, <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code>, and <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code> control the modules
- or scripts that serve the document. The <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> directive allows
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> to consider these file extensions
- to be included when testing Multiviews matches.</p>
-
- <p>While <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> associates meta-information
- with filename extensions, the <code class="module"><a href="../mod/core.html">core</a></code> server
- provides directives that are used to associate all the files in a
- given container (<em>e.g.</em>, <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, or <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>) with particular
- meta-information. These directives include <code class="directive"><a href="../mod/core.html#forcetype">ForceType</a></code>, <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>, <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code>, and <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>. The core directives
- override any filename extension mappings defined in
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>.</p>
-
- <p>Note that changing the meta-information for a file does not
- change the value of the <code>Last-Modified</code> header.
- Thus, previously cached copies may still be used by a client or
- proxy, with the previous headers. If you change the
- meta-information (language, content type, character set or
- encoding) you may need to 'touch' affected files (updating
- their last modified date) to ensure that all visitors are
- receive the corrected content headers.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addcharset">AddCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addencoding">AddEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addhandler">AddHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addinputfilter">AddInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addlanguage">AddLanguage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addoutputfilter">AddOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addtype">AddType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaultlanguage">DefaultLanguage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multiviewsmatch">MultiviewsMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removecharset">RemoveCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removeencoding">RemoveEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removehandler">RemoveHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removeinputfilter">RemoveInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removelanguage">RemoveLanguage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removetype">RemoveType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#typesconfig">TypesConfig</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#multipleext">Files with Multiple Extensions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#contentencoding">Content encoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#charset-lang">Character sets and languages</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#forcetype">ForceType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multipleext" id="multipleext">Files with Multiple Extensions</a></h2>
- <p>Files can have more than one extension, and the order of the
- extensions is <em>normally</em> irrelevant. For example, if the
- file <code>welcome.html.fr</code> maps onto content type
- <code>text/html</code> and language French then the file
- <code>welcome.fr.html</code> will map onto exactly the same information.
- If more than one extension is given which maps onto the same
- type of meta-information, then the one to the right will be
- used, except for languages and content encodings. For example, if
- <code>.gif</code> maps to the MIME-type <code>image/gif</code> and
- <code>.html</code> maps to the MIME-type <code>text/html</code>, then the
- file <code>welcome.gif.html</code> will be associated with the MIME-type
- <code>text/html</code>.</p>
-
- <p><a href="#charset-lang">Languages</a> and <a href="#contentencoding">content encodings</a> are treated accumulative, because one can assign
- more than one language or encoding to a particular ressource. For example,
- the file <code>welcome.html.en.de</code> will be delivered with
- <code>Content-Language: en, de</code> and <code>Content-Type:
- text/html</code>.</p>
-
- <p>Care should be taken when a file with multiple extensions
- gets associated with both a MIME-type and a handler. This will
- usually result in the request being by the module associated
- with the handler. For example, if the <code>.imap</code>
- extension is mapped to the handler <code>imap-file</code> (from
- <code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code>) and the <code>.html</code> extension is
- mapped to the MIME-type <code>text/html</code>, then the file
- <code>world.imap.html</code> will be associated with both the
- <code>imap-file</code> handler and <code>text/html</code> MIME-type.
- When it is processed, the <code>imap-file</code> handler will be used,
- and so it will be treated as a <code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code> imagemap
- file.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contentencoding" id="contentencoding">Content encoding</a></h2>
- <p>A file of a particular MIME type can additionally be encoded a
- particular way to simplify transmission over the Internet.
- While this usually will refer to compression, such as
- <code>gzip</code>, it can also refer to encryption, such a
- <code>pgp</code> or to an encoding such as UUencoding, which is
- designed for transmitting a binary file in an ASCII (text)
- format.</p>
-
- <p>The <a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1
- RFC</a>, section 14.11 puts it this way:</p>
-
- <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
- <p>The Content-Encoding entity-header field is used as a modifier to
- the media-type. When present, its value indicates what additional
- content codings have been applied to the entity-body, and thus what
- decoding mechanisms must be applied in order to obtain the media-type
- referenced by the Content-Type header field. Content-Encoding is
- primarily used to allow a document to be compressed without losing
- the identity of its underlying media type.</p>
- </blockquote>
-
- <p>By using more than one file extension (see <a href="#multipleext">section above about multiple file
- extensions</a>), you can indicate that a file is of a
- particular <em>type</em>, and also has a particular
- <em>encoding</em>. </p>
-
- <p>For example, you may have a file which is a Microsoft Word
- document, which is pkzipped to reduce its size. If the
- <code>.doc</code> extension is associated with the Microsoft
- Word file type, and the <code>.zip</code> extension is
- associated with the pkzip file encoding, then the file
- <code>Resume.doc.zip</code> would be known to be a pkzip'ed Word
- document.</p>
-
- <p>Apache sends a <code>Content-encoding</code> header with the
- resource, in order to tell the client browser about the
- encoding method.</p>
-
- <div class="example"><p><code>Content-encoding: pkzip</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="charset-lang" id="charset-lang">Character sets and languages</a></h2>
- <p>In addition to file type and the file encoding,
- another important piece of information is what language a
- particular document is in, and in what character set the file
- should be displayed. For example, the document might be written
- in the Vietnamese alphabet, or in Cyrillic, and should be
- displayed as such. This information, also, is transmitted in
- HTTP headers.</p>
-
- <p>The character set, language, encoding and mime type are all
- used in the process of content negotiation (See
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>) to determine
- which document to give to the client, when there are
- alternative documents in more than one character set, language,
- encoding or mime type. All filename extensions associations
- created with <code class="directive"><a href="#addcharset">AddCharset</a></code>,
- <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code> and <code class="directive"><a href="#addtype">AddType</a></code> directives
- (and extensions listed in the <code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code>) participate in this select process.
- Filename extensions that are only associated using the <code class="directive"><a href="#addhandler">AddHandler</a></code>, <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code> or <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> directives may be included or excluded
- from matching by using the <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> directive.</p>
-
- <h3><a name="charset" id="charset">Charset</a></h3>
- <p>To convey this further information, Apache optionally sends
- a <code>Content-Language</code> header, to specify the language
- that the document is in, and can append additional information
- onto the <code>Content-Type</code> header to indicate the
- particular character set that should be used to correctly
- render the information.</p>
-
- <div class="example"><p><code>
- Content-Language: en, fr<br />
- Content-Type: text/plain; charset=ISO-8859-1
- </code></p></div>
-
- <p>The language specification is the two-letter abbreviation
- for the language. The <code>charset</code> is the name of the
- particular character set which should be used.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddCharset" id="AddCharset">AddCharset</a> <a name="addcharset" id="addcharset">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps the given filename extensions to the specified content
-charset</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">AddCharset</code> directive maps the given
- filename extensions to the specified content charset. <var>charset</var>
- is the MIME charset parameter of filenames containing
- <var>extension</var>. This mapping is added to any already in force,
- overriding any mappings that already exist for the same
- <var>extension</var>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddLanguage ja .ja<br />
- AddCharset EUC-JP .euc<br />
- AddCharset ISO-2022-JP .jis<br />
- AddCharset SHIFT_JIS .sjis
- </code></p></div>
-
- <p>Then the document <code>xxxx.ja.jis</code> will be treated
- as being a Japanese document whose charset is <code>ISO-2022-JP</code>
- (as will the document <code>xxxx.jis.ja</code>). The
- <code class="directive">AddCharset</code> directive is useful for both to
- inform the client about the character encoding of the document so that
- the document can be interpreted and displayed appropriately, and for <a href="../content-negotiation.html">content negotiation</a>,
- where the server returns one from several documents based on
- the client's charset preference.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddEncoding" id="AddEncoding">AddEncoding</a> <a name="addencoding" id="addencoding">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps the given filename extensions to the specified encoding
-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">AddEncoding</code> directive maps the given
- filename extensions to the specified encoding type. <var>MIME-enc</var>
- is the MIME encoding to use for documents containing the
- <var>extension</var>. This mapping is added to any already in force,
- overriding any mappings that already exist for the same
- <var>extension</var>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddEncoding x-gzip .gz<br />
- AddEncoding x-compress .Z
- </code></p></div>
-
- <p>This will cause filenames containing the <code>.gz</code> extension
- to be marked as encoded using the <code>x-gzip</code> encoding, and
- filenames containing the <code>.Z</code> extension to be marked as
- encoded with <code>x-compress</code>.</p>
-
- <p>Old clients expect <code>x-gzip</code> and <code>x-compress</code>,
- however the standard dictates that they're equivalent to
- <code>gzip</code> and <code>compress</code> respectively. Apache does
- content encoding comparisons by ignoring any leading <code>x-</code>.
- When responding with an encoding Apache will use whatever form
- (<em>i.e.</em>, <code>x-foo</code> or <code>foo</code>) the
- client requested. If the client didn't specifically request a
- particular form Apache will use the form given by the
- <code>AddEncoding</code> directive. To make this long story
- short, you should always use <code>x-gzip</code> and
- <code>x-compress</code> for these two specific encodings. More
- recent encodings, such as <code>deflate</code> should be
- specified without the <code>x-</code>.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddHandler" id="AddHandler">AddHandler</a> <a name="addhandler" id="addhandler">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps the filename extensions to the specified
-handler</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>Files having the name <var>extension</var> will be served by the
- specified <var><a href="../handler.html">handler-name</a></var>. This
- mapping is added to any already in force, overriding any mappings that
- already exist for the same <var>extension</var>. For example, to
- activate CGI scripts with the file extension <code>.cgi</code>, you
- might use:</p>
-
- <div class="example"><p><code>
- AddHandler cgi-script .cgi
- </code></p></div>
-
- <p>Once that has been put into your httpd.conf file, any file containing
- the <code>.cgi</code> extension will be treated as a CGI program.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddInputFilter" id="AddInputFilter">AddInputFilter</a> <a name="addinputfilter" id="addinputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps filename extensions to the filters that will process
-client requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>AddInputFilter is only available in Apache 2.0.26 and
-later.</td></tr>
-</table>
- <p><code class="directive">AddInputFilter</code> maps the filename extension
- <var>extension</var> to the <a href="../filter.html">filters</a> which
- will process client requests and POST input when they are received by
- the server. This is in addition to any filters defined elsewhere,
- including the <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code>
- directive. This mapping is merged over any already in force, overriding
- any mappings that already exist for the same <var>extension</var>.</p>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content. Both the filter and <var>extension</var> arguments are
- case-insensitive, and the extension may be specified with or
- without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#removeinputfilter">RemoveInputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddLanguage" id="AddLanguage">AddLanguage</a> <a name="addlanguage" id="addlanguage">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps the given filename extension to the specified content
-language</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">AddLanguage</code> directive maps the given
- filename extension to the specified content language.
- <var>MIME-lang</var> is the MIME language of filenames containing
- <var>extension</var>. This mapping is added to any already in force,
- overriding any mappings that already exist for the same
- <var>extension</var>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddEncoding x-compress .Z<br />
- AddLanguage en .en<br />
- AddLanguage fr .fr
- </code></p></div>
-
- <p>Then the document <code>xxxx.en.Z</code> will be treated as
- being a compressed English document (as will the document
- <code>xxxx.Z.en</code>). Although the content language is
- reported to the client, the browser is unlikely to use this
- information. The <code class="directive">AddLanguage</code> directive is
- more useful for <a href="../content-negotiation.html">content
- negotiation</a>, where the server returns one from several documents
- based on the client's language preference.</p>
-
- <p>If multiple language assignments are made for the same
- extension, the last one encountered is the one that is used.
- That is, for the case of:</p>
-
- <div class="example"><p><code>
- AddLanguage en .en<br />
- AddLanguage en-gb .en<br />
- AddLanguage en-us .en
- </code></p></div>
-
- <p>documents with the extension <code>.en</code> would be treated as
- being <code>en-us</code>.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddOutputFilter" id="AddOutputFilter">AddOutputFilter</a> <a name="addoutputfilter" id="addoutputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps filename extensions to the filters that will process
-responses from the server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>AddOutputFilter is only available in Apache 2.0.26 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">AddOutputFilter</code> directive maps the
- filename extension <var>extension</var> to the <a href="../filter.html">filters</a> which will process responses
- from the server before they are sent to the client. This is in
- addition to any filters defined elsewhere, including <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> and <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code> directive. This mapping is merged
- over any already in force, overriding any mappings that already exist
- for the same <var>extension</var>.</p>
-
- <p>For example, the following configuration will process all
- <code>.shtml</code> files for server-side includes and will then
- compress the output using <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>.</p>
-
- <div class="example"><p><code>
- AddOutputFilter INCLUDES;DEFLATE shtml
- </code></p></div>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content. Both the <var>filter</var> and <var>extension</var> arguments
- are case-insensitive, and the extension may be specified with or
- without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#removeoutputfilter">RemoveOutputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddType" id="AddType">AddType</a> <a name="addtype" id="addtype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps the given filename extensions onto the specified content
-type</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">AddType</code> directive maps the given filename
- extensions onto the specified content type. <var>MIME-type</var> is the
- MIME type to use for filenames containing <var>extension</var>. This
- mapping is added to any already in force, overriding any mappings that
- already exist for the same <var>extension</var>. This directive can
- be used to add mappings not listed in the MIME types file (see the
- <code class="directive"><a href="#typesconfig">TypesConfig</a></code> directive).</p>
-
- <div class="example"><h3>Example</h3><p><code>
- AddType image/gif .gif
- </code></p></div>
-
- <div class="note">
- It is recommended that new MIME types be added using the
- <code class="directive">AddType</code> directive rather than changing the
- <code class="directive"><a href="#typesconfig">TypesConfig</a></code> file.
- </div>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#forcetype">ForceType</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultLanguage" id="DefaultLanguage">DefaultLanguage</a> <a name="defaultlanguage" id="defaultlanguage">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets all files in the given scope to the specified
-language</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultLanguage <var>MIME-lang</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">DefaultLanguage</code> directive tells Apache
- that all files in the directive's scope (<em>e.g.</em>, all files
- covered by the current <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> container) that don't have an explicit language
- extension (such as <code>.fr</code> or <code>.de</code> as configured
- by <code class="directive"><a href="#addlanguage">AddLanguage</a></code>) should be
- considered to be in the specified <var>MIME-lang</var> language. This
- allows entire directories to be marked as containing Dutch content, for
- instance, without having to rename each file. Note that unlike using
- extensions to specify languages, <code class="directive">DefaultLanguage</code>
- can only specify a single language.</p>
-
- <p>If no <code class="directive">DefaultLanguage</code> directive is in force,
- and a file does not have any language extensions as configured
- by <code class="directive"><a href="#addlanguage">AddLanguage</a></code>, then that file
- will be considered to have no language attribute.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- DefaultLanguage en
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ModMimeUsePathInfo" id="ModMimeUsePathInfo">ModMimeUsePathInfo</a> <a name="modmimeusepathinfo" id="modmimeusepathinfo">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Tells mod_mime to treat path_info
-components as part of the filename</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ModMimeUsePathInfo On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ModMimeUsePathInfo Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.41 and later</td></tr>
-</table>
- <p>The <code class="directive">ModMimeUsePathInfo</code> directive is used to
- combine the filename with the <code>path_info</code> URL component to
- apply <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>'s directives to the request. The default
- value is <code>Off</code> - therefore, the <code>path_info</code>
- component is ignored.</p>
-
- <p>This directive is recommended when you have a virtual filesystem.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ModMimeUsePathInfo On
- </code></p></div>
-
- <p>If you have a request for <code>/bar/foo.shtml</code> where
- <code>/bar</code> is a Location and <code class="directive">ModMimeUsePathInfo</code> is <code>On</code>,
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> will treat the incoming request as
- <code>/bar/foo.shtml</code> and directives like <code>AddOutputFilter
- INCLUDES .shtml</code> will add the <code>INCLUDES</code> filter to the
- request. If <code class="directive">ModMimeUsePathInfo</code> is not set, the
- <code>INCLUDES</code> filter will not be added.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MultiviewsMatch" id="MultiviewsMatch">MultiviewsMatch</a> <a name="multiviewsmatch" id="multiviewsmatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The types of files that will be included when searching for
-a matching file with MultiViews</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MultiviewsMatch NegotiatedOnly</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.26 and later.</td></tr>
-</table>
- <p><code class="directive">MultiviewsMatch</code> permits three different
- behaviors for <a href="mod_negotiation.html">mod_negotiation</a>'s
- Multiviews feature. Multiviews allows a request for a file,
- <em>e.g.</em> <code>index.html</code>, to match any negotiated
- extensions following the base request, <em>e.g.</em>
- <code>index.html.en</code>, <code>index.html.fr</code>, or
- <code>index.html.gz</code>.</p>
-
- <p>The <code>NegotiatedOnly</code> option provides that every extension
- following the base name must correlate to a recognized
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> extension for content negotation, <em>e.g.</em>
- Charset, Content-Type, Language, or Encoding. This is the strictest
- implementation with the fewest unexpected side effects, and is the
- default behavior.</p>
-
- <p>To include extensions associated with Handlers and/or Filters,
- set the <code class="directive">MultiviewsMatch</code> directive to either
- <code>Handlers</code>, <code>Filters</code>, or both option keywords.
- If all other factors are equal, the smallest file will be served,
- <em>e.g.</em> in deciding between <code>index.html.cgi</code> of 500
- bytes and <code>index.html.pl</code> of 1000 bytes, the <code>.cgi</code>
- file would win in this example. Users of <code>.asis</code> files
- might prefer to use the Handler option, if <code>.asis</code> files are
- associated with the <code>asis-handler</code>.</p>
-
- <p>You may finally allow <code>Any</code> extensions to match, even if
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> doesn't recognize the extension. This was the
- behavior in Apache 1.3, and can cause unpredicatable results, such as
- serving .old or .bak files the webmaster never expected to be served.</p>
-
- <p>For example, the following configuration will allow handlers
- and filters to participate in Multviews, but will exclude unknown
- files:</p>
-
- <div class="example"><p><code>
- MultiviewsMatch Handlers Filters
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveCharset" id="RemoveCharset">RemoveCharset</a> <a name="removecharset" id="removecharset">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any character set associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveCharset <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>RemoveCharset is only available in Apache 2.0.24 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">RemoveCharset</code> directive removes any
- character set associations for files with the given extensions.
- This allows <code>.htaccess</code> files in subdirectories to
- undo any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- RemoveCharset .html .shtml
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveEncoding" id="RemoveEncoding">RemoveEncoding</a> <a name="removeencoding" id="removeencoding">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any content encoding associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">RemoveEncoding</code> directive removes any
- encoding associations for files with the given extensions. This
- allows <code>.htaccess</code> files in subdirectories to undo
- any associations inherited from parent directories or the
- server config files. An example of its use might be:</p>
-
- <div class="example"><h3>/foo/.htaccess:</h3><p><code>
- AddEncoding x-gzip .gz<br />
- AddType text/plain .asc<br />
- &lt;Files *.gz.asc&gt;<br />
- <span class="indent">
- RemoveEncoding .gz<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
- <p>This will cause <code>foo.gz</code> to be marked as being
- encoded with the gzip method, but <code>foo.gz.asc</code> as an
- unencoded plaintext file.</p>
-
- <div class="note"><h3>Note</h3>
- <p><code class="directive">RemoveEncoding</code> directives are processed
- <em>after</em> any <code class="directive"><a href="#addencoding">AddEncoding</a></code>
- directives, so it is possible they may undo the effects of the latter
- if both occur within the same directory configuration.</p>
- </div>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveHandler" id="RemoveHandler">RemoveHandler</a> <a name="removehandler" id="removehandler">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any handler associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveHandler <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">RemoveHandler</code> directive removes any
- handler associations for files with the given extensions. This allows
- <code>.htaccess</code> files in subdirectories to undo any
- associations inherited from parent directories or the server
- config files. An example of its use might be:</p>
-
- <div class="example"><h3>/foo/.htaccess:</h3><p><code>
- AddHandler server-parsed .html
- </code></p></div>
-
- <div class="example"><h3>/foo/bar/.htaccess:</h3><p><code>
- RemoveHandler .html
- </code></p></div>
-
- <p>This has the effect of returning <code>.html</code> files in
- the <code>/foo/bar</code> directory to being treated as normal
- files, rather than as candidates for parsing (see the <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> module).</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveInputFilter" id="RemoveInputFilter">RemoveInputFilter</a> <a name="removeinputfilter" id="removeinputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any input filter associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>RemoveInputFilter is only available in Apache 2.0.26 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">RemoveInputFilter</code> directive removes any
- input filter associations for files with the given extensions.
- This allows <code>.htaccess</code> files in subdirectories to
- undo any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#addinputfilter">AddInputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveLanguage" id="RemoveLanguage">RemoveLanguage</a> <a name="removelanguage" id="removelanguage">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any language associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>RemoveLanguage is only available in Apache 2.0.24 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">RemoveLanguage</code> directive removes any
- language associations for files with the given extensions. This
- allows <code>.htaccess</code> files in subdirectories to undo
- any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveOutputFilter" id="RemoveOutputFilter">RemoveOutputFilter</a> <a name="removeoutputfilter" id="removeoutputfilter">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any output filter associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>RemoveOutputFilter is only available in Apache 2.0.26 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">RemoveOutputFilter</code> directive removes any
- output filter associations for files with the given extensions.
- This allows <code>.htaccess</code> files in subdirectories to
- undo any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- RemoveOutputFilter shtml
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveType" id="RemoveType">RemoveType</a> <a name="removetype" id="removetype">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Removes any content type associations for a set of file
-extensions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoveType <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">RemoveType</code> directive removes any MIME
- type associations for files with the given extensions. This allows
- <code>.htaccess</code> files in subdirectories to undo any
- associations inherited from parent directories or the server
- config files. An example of its use might be:</p>
-
- <div class="example"><h3>/foo/.htaccess:</h3><p><code>
- RemoveType .cgi
- </code></p></div>
-
- <p>This will remove any special handling of <code>.cgi</code>
- files in the <code>/foo/</code> directory and any beneath it,
- causing the files to be treated as being of the <code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code>.</p>
-
- <div class="note"><h3>Note</h3>
- <p><code class="directive">RemoveType</code> directives are processed
- <em>after</em> any <code class="directive"><a href="#addtype">AddType</a></code>
- directives, so it is possible they may undo the effects of the
- latter if both occur within the same directory configuration.</p>
- </div>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TypesConfig" id="TypesConfig">TypesConfig</a> <a name="typesconfig" id="typesconfig">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The location of the mime.types file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TypesConfig <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>TypesConfig conf/mime.types</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime</td></tr>
-</table>
- <p>The <code class="directive">TypesConfig</code> directive sets the location
- of the MIME types configuration file. <var>File-path</var> is relative
- to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. This file sets
- the default list of mappings from filename extensions to content
- types. Most administrators use the provided <code>mime.types</code>
- file, which associates common filename extensions with IANA registered
- content types. The current list is maintained at <a href="http://www.isi.edu/in-notes/iana/assignments/media-types/media-types">http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</a>.
- This simplifies the <code>httpd.conf</code> file by providing the
- majority of media-type definitions, and may be overridden by
- <code class="directive"><a href="#addtype">AddType</a></code> directives as
- needed. You should not edit the <code>mime.types</code> file, because
- it may be replaced when you upgrade your server.</p>
-
- <p>The file contains lines in the format of the arguments to
- an <code class="directive"><a href="#addtype">AddType</a></code> directive:</p>
-
- <div class="example"><p><code>
- <var>MIME-type</var> [<var>extension</var>] ...
- </code></p></div>
-
- <p>The case of the extension does not matter. Blank lines, and lines
- beginning with a hash character (<code>#</code>) are ignored.</p>
-
- <div class="note">
- Please do <strong>not</strong> send requests to the Apache HTTP
- Server Project to add any new entries in the distributed
- <code>mime.types</code> file unless (1) they are already
- registered with IANA, and (2) they use widely accepted,
- non-conflicting filename extensions across platforms.
- <code>category/x-subtype</code> requests will be automatically
- rejected, as will any new two-letter extensions as they will
- likely conflict later with the already crowded language and
- character set namespace.
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mime.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_mime.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_mime.html.ja.euc-jp b/docs/manual/mod/mod_mime.html.ja.euc-jp
deleted file mode 100644
index 6941d9be47..0000000000
--- a/docs/manual/mod/mod_mime.html.ja.euc-jp
+++ /dev/null
@@ -1,936 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_mime - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_mime</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mime.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_mime.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤È¥Õ¥¡¥¤¥ë¤Î¿¶¤ëÉñ¤¤
- (¥Ï¥ó¥É¥é¤È¥Õ¥£¥ë¥¿)¡¢ÆâÍÆ (MIME ¥¿¥¤¥×¡¢¸À¸ì¡¢Ê¸»ú¥»¥Ã¥È¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°)
- ¤È¤ò´ØÏ¢ÉÕ¤±¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>mime_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_mime.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï³ÈÄ¥»Ò¤ò»È¤Ã¤Æ¤¤¤í¤¤¤í¤Ê¡Ö¥á¥¿¾ðÊó¡×¤ò¥Õ¥¡¥¤¥ë¤Ë
- ´ØÏ¢ÉÕ¤±¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£¤³¤Î¾ðÊó¤Ï¥É¥­¥å¥á¥ó¥È¤Î¥Õ¥¡¥¤¥ë̾¤È
- MIME ¥¿¥¤¥×¡¢¸À¸ì¡¢Ê¸»ú¥»¥Ã¥È¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤È¤ò´ØÏ¢ÉÕ¤±¤Þ¤¹¡£
- ¤³¤Î¾ðÊó¤Ï¥Ö¥é¥¦¥¶¤ËÁ÷¤é¤ì¤Þ¤¹¤·¡¢Ê£¿ô¤Î¥Õ¥¡¥¤¥ë¤ÎÃ椫¤é¥æ¡¼¥¶¤Î¹¥¤ß¤Î
- ¤â¤Î¤¬Áª¤Ð¤ì¤ë¤è¤¦¤Ë¡¢¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ç¤â»È¤ï¤ì¤Þ¤¹¡£
- <a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>
- ¤Ë´Ø¤¹¤ë¾Ü¤·¤¤¾ðÊó¤Ï <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>
- ¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p><code class="directive"><a href="#addcharset">AddCharset</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢
- <code class="directive"><a href="#addencoding">AddEncoding</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢
- <code class="directive"><a href="#addhandler">AddHandler</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢
- <code class="directive"><a href="#addlanguage">AddLanguage</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢
- <code class="directive"><a href="#addtype">AddType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¹¤Ù¤Æ¡¢
- ¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ò¥á¥¿¾ðÊó¤Ë¥Þ¥Ã¥×¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
- ¤½¤ì¤¾¤ì¡¢¥É¥­¥å¥á¥ó¥È¤Îʸ»ú¥»¥Ã¥È (ÌõÃí: charset)¡¢content-encoding,
- content-language, MIME ¥¿¥¤¥× (content-type) ¤òÀßÄꤷ¤Þ¤¹¡£
- <code class="directive"><a href="#typesconfig">TypesConfig</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï³ÈÄ¥»Ò¤ò
- MIME ¥¿¥¤¥×¤Ë¥Þ¥Ã¥×¤¹¤ë¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <p>¤µ¤é¤Ë¡¢<code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤Ï¥³¥ó¥Æ¥ó¥Ä¤òºîÀ®¡¢½èÍý¤¹¤ë
- <a href="../handler.html">¥Ï¥ó¥É¥é</a> ¤È <a href="../filter.html">¥Õ¥£¥ë¥¿</a>
- ¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£<code class="directive"><a href="#addhandler">AddHandler</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢<code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢<code class="directive"><a href="#addinputfilter">AddInputFilter</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥É¥­¥å¥á¥ó¥È¤ò°·¤¦¥â¥¸¥å¡¼¥ë¤ä¥¹¥¯¥ê¥×¥È¤òÀ©¸æ¤·¤Þ¤¹¡£
- <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ò
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> ¤¬ Multiviews ¤Î¥Þ¥Ã¥Á¤ò¤È¤ë¤È¤­¤Ë
- ¹Íθ¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤Ï¥á¥¿¾ðÊó¤ò¥Õ¥¡¥¤¥ë̾¤È´ØÏ¢ÉÕ¤±¤Þ¤¹¤¬¡¢
- <code class="module"><a href="../mod/core.html">core</a></code> ¥µ¡¼¥Ð¤Ë¤Ï¤¢¤ë¥³¥ó¥Æ¥Ê
- (<em>¤¿¤È¤¨¤Ð</em>, <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>) ¤ÎÃæ¤Î¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤òÆÃÄê¤Î
- ¥á¥¿¾ðÊó¤È´ØÏ¢ÉÕ¤±¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤Ï
- <code class="directive"><a href="../mod/core.html#forcetype">ForceType</a></code>, <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>, <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code>, <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> ¤¬¤¢¤ê¤Þ¤¹¡£
- ¥³¥¢¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤Ë¤è¤êÄêµÁ¤µ¤ì¤¿
- ¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤Î¥Þ¥Ã¥Ô¥ó¥°¤¹¤Ù¤Æ¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <p>¥Õ¥¡¥¤¥ë¤Î¥á¥¿¾ðÊó¤òÊѤ¨¤Æ¤â <code>Last-Modified</code>
- ¥Ø¥Ã¥À¤ÎÃͤÏÊѤï¤é¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¤Ç¤¹¤«¤é¡¢
- ¤½¤ì¤é¤òÊѹ¹¤·¤¿¾ì¹ç¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤ä¥×¥í¥­¥·¤Ç°ÊÁ°¤Ë¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿
- ¥³¥Ô¡¼¤¬¤½¤Î¤È¤­¤Î¥Ø¥Ã¥À¤È¤È¤â¤Ë»È¤ï¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
- ¥á¥¿¾ðÊó (¸À¸ì¡¢¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¡¢Ê¸»ú¥»¥Ã¥È¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°) ¤ò
- Êѹ¹¤·¤¿¤È¤­¤Ï¡¢¤¹¤Ù¤Æ¤ÎˬÌä¼Ô¤¬Àµ¤·¤¤¥³¥ó¥Æ¥ó¥È¥Ø¥Ã¥À¤ò
- ¼õ¤±¼è¤ë¤è¤¦¤Ë¡¢±Æ¶Á¤ò¼õ¤±¤ë¥Õ¥¡¥¤¥ë¤Ë 'touch' ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë
- (ºÇ½ª¹¹¿·Æü¤ò¹¹¿·¤¹¤ë) ɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#addcharset">AddCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addencoding">AddEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addhandler">AddHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addinputfilter">AddInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addlanguage">AddLanguage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addoutputfilter">AddOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#addtype">AddType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#defaultlanguage">DefaultLanguage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#modmimeusepathinfo">ModMimeUsePathInfo</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multiviewsmatch">MultiviewsMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removecharset">RemoveCharset</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removeencoding">RemoveEncoding</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removehandler">RemoveHandler</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removeinputfilter">RemoveInputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removelanguage">RemoveLanguage</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removeoutputfilter">RemoveOutputFilter</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#removetype">RemoveType</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#typesconfig">TypesConfig</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#multipleext">Ê£¿ô¤Î³ÈÄ¥»Ò¤Î¤¢¤ë¥Õ¥¡¥¤¥ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#contentencoding">¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#charset-lang">ʸ»ú¥»¥Ã¥È¤È¸À¸ì</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#forcetype">ForceType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multipleext" id="multipleext">Ê£¿ô¤Î³ÈÄ¥»Ò¤Î¤¢¤ë¥Õ¥¡¥¤¥ë</a></h2>
- <p>¥Õ¥¡¥¤¥ë¤ÏÊ£¿ô¤Î³ÈÄ¥»Ò¤ò»ý¤Ä¤³¤È¤¬¤Ç¤­¡¢³ÈÄ¥»Ò¤Î½çÈÖ¤Ï<em>Ä̾ï¤Ï</em>´Ø·¸¤¢¤ê¤Þ¤»¤ó¡£Î㤨¤Ð¡¢¥Õ¥¡¥¤¥ë <code>welcome.html.fr</code>
- ¤¬¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ï <code>text/html</code>
- ¤Ë¡¢¸À¸ì¤Ï¥Õ¥é¥ó¥¹¸ì¤Ë¥Þ¥Ã¥×¤µ¤ì¤ë¾ì¹ç¡¢<code>welcome.fr.html</code>
- ¤â¤Þ¤Ã¤¿¤¯Æ±¤¸¾ðÊó¤Ë¥Þ¥Ã¥×¤µ¤ì¤Þ¤¹¡£
- Ʊ¤¸¥á¥¿¾ðÊó¤Ë¥Þ¥Ã¥×¤µ¤ì¤ë³ÈÄ¥»Ò¤¬Ê£¿ô¤¢¤ë¤È¤­¤Ë¤Ï¡¢¸À¸ì¤È
- ¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò½ü¤¤¤Æ¡¢
- ±¦Â¦¤Ë¤¢¤ë¤â¤Î¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢<code>.gif</code> ¤¬ MIME
- ¥¿¥¤¥× <code>image/gif</code> ¤Ë¥Þ¥Ã¥×¤µ¤ì¡¢<code>.html</code>
- ¤¬ MIME ¥¿¥¤¥× <code>text/html</code>
- ¤Ë¥Þ¥Ã¥×¤µ¤ì¤ë¾ì¹ç¤Ï¡¢¥Õ¥¡¥¤¥ë <code>welcome.gif.html</code> ¤Ï
- MIME ¥¿¥¤¥× <code>text/html</code> ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Þ¤¹¡£</p>
-
- <p>¥ê¥½¡¼¥¹¤ËÊ£¿ô¤Î¸À¸ì¤ä¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò´ØÏ¢ÉÕ¤±¤ë¤³¤È
- ¤¬¤Ç¤­¤ë¤¿¤á¡¢
- <a href="#charset-lang">¸À¸ì</a>¤È<a href="#contentencoding">¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°</a>¤ÏÁ°¤Î¤â¤Î¤ËÄɲ䵤ì¤Æ¤¤¤­¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢¥Õ¥¡¥¤¥ë <code>welcome.html.en.de</code> ¤Ï
- <code>Content-Language: en, de</code> ¤È <code>Content-Type:
- text/html</code> ¤È¤·¤ÆÁ÷¿®¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>Ê£¿ô¤Î³ÈÄ¥»Ò¤Î¤¢¤ë¥Õ¥¡¥¤¥ë¤¬ MIME
- ¥¿¥¤¥×¤È¥Ï¥ó¥É¥é¤ÎξÊý¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¤È¤­¤ÏÃí°Õ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤½¤Î¾ì¹ç¡¢ÉáÄ̤ϥꥯ¥¨¥¹¥È¤¬¥Ï¥ó¥É¥é¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿
- ¥â¥¸¥å¡¼¥ë¤Ë¤è¤Ã¤Æ°·¤ï¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢³ÈÄ¥»Ò
- <code>.imap</code> ¤¬ (mod_imap ¤Î) <code>imap-file</code>
- ¤Ë¥Þ¥Ã¥×¤µ¤ì¤Æ¤¤¤Æ¡¢<code>.html</code> ¤¬ MIME ¥¿¥¤¥× <code>text/html</code>
- ¤Ë¥Þ¥Ã¥×¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢¥Õ¥¡¥¤¥ë <code>world.imap.html</code> ¤Ï
- <code>imap-file</code> ¥Ï¥ó¥É¥é¤È <code>text/html</code> MIME
- ¥¿¥¤¥×¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¤¬½èÍý¤µ¤ì¤ë¤È¤­¤Ï <code>imap-file</code>
- ¥Ï¥ó¥É¥é¤¬»ÈÍѤµ¤ì¤Þ¤¹¤Î¤Ç¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤Ï <code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code>
- ¤Î¥¤¥á¡¼¥¸¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤È¤·¤Æ°·¤ï¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="contentencoding" id="contentencoding">¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°</a></h2>
- <p>ÆÃÄê¤Î MIME ¥¿¥¤¥×¤Î¥Õ¥¡¥¤¥ë¤Ï¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Ç¤ÎžÁ÷¤ò´Êñ¤Ë¤¹¤ë¤¿¤á¤Ë¡¢
- ¤µ¤é¤ËÉä¹æ²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤ÏÄ̾ï¤Ï <code>gzip</code> ¤Î
- ¤è¤¦¤Ê°µ½Ì¤Î¤³¤È¤ò»Ø¤·¤Þ¤¹¤¬¡¢<code>pgp</code> ¤Î¤è¤¦¤Ê°Å¹æ²½¤ä¡¢
- ¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤ò ASCII (¥Æ¥­¥¹¥È) ·Á¼°¤ÇÁ÷¤ë¤¿¤á¤Ë¹Í°Æ¤µ¤ì¤¿
- UUencoding ¤Î¤³¤È¤ò»Ø¤¹¤³¤È¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <p><a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1 RFC</a>
- 14.11 Àá¤Ç¤Ï¼¡¤Î¤è¤¦¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
- <p>Content-Encoding ¥¨¥ó¥Æ¥£¥Æ¥£¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Ï¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î
- ½¤¾þ»Ò¤È¤·¤Æ»È¤ï¤ì¤Þ¤¹¡£¤½¤ì¤¬Â¸ºß¤·¤Æ¤¤¤ì¤Ð¡¢Ãͤϥ¨¥ó¥Æ¥£¥Æ¥£¥Ü¥Ç¥£¤Ë
- ¤É¤ÎÄɲäÎÉä¹æ²½¤¬Å¬ÍѤµ¤ì¤¿¤«¤ò¼¨¤·¡¢Content-Type ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Ë
- ½ñ¤«¤ì¤Æ¤¤¤ë¥á¥Ç¥£¥¢¥¿¥¤¥×¤òÆÀ¤ë¤¿¤á¤Ë¤É¤ÎÉü¹æµ¡¹½¤òŬÍѤ¹¤Ù¤­¤«¡¢¤â
- ¼¨¤·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£Content-Encoding ¤Ï¼ç¤Ë¡¢¸µ¤Î¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î
- Ʊ°ìÀ­¤ò¼º¤¦¤³¤È¤Ê¤¯¥É¥­¥å¥á¥ó¥È¤ò°µ½Ì¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¤¿¤á¤Ë
- »ÈÍѤµ¤ì¤Þ¤¹¡£</p>
- </blockquote>
-
- <p>Ê£¿ô¤Î¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò (Ê£¿ô¤Î³ÈÄ¥»Ò¤Ë¤Ä¤¤¤Æ¤Ï <a href="#multipleext">¾å¤ÎÀá</a> ¤ò»²¾È) »È¤¦¤³¤È¤Ç¡¢
- ¥Õ¥¡¥¤¥ë¤Î<em>¥¿¥¤¥×</em>¤ä<em>¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°</em>¤ò»ØÄꤹ¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤¿¤È¤¨¤Ð¡¢Microsoft Word ¤Î¥É¥­¥å¥á¥ó¥È¤¬¤¢¤ê¡¢¥µ¥¤¥º¤ò¾®¤µ¤¯¤¹¤ë¤¿¤á¤Ë
- pkzip ¤µ¤ì¤Æ¤¤¤ë¤È¤·¤Þ¤¹¡£<code>.doc</code> ³ÈÄ¥»Ò¤¬ Microsoft Word ¤Î
- ¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤È´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤Æ¡¢<code>.zip</code> ³ÈÄ¥»Ò¤¬
- pkzip ¥Õ¥¡¥¤¥ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤È´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¤È¡¢¥Õ¥¡¥¤¥ë
- <code>Resume.doc.zip</code> ¤Ï pkzip ¤µ¤ì¤¿ Word ¥É¥­¥å¥á¥ó¥È¤Ç¤¢¤ë
- ¤È¤¤¤¦¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£</p>
-
- <p>¥¯¥é¥¤¥¢¥ó¥È¤Î¥Ö¥é¥¦¥¶¤Ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°ÊýË¡¤òÃΤ餻¤ë¤¿¤á¤Ë¡¢
- Apache ¤Ï¥ê¥½¡¼¥¹¤È¶¦¤Ë <code>Content-Encoding</code> ¥Ø¥Ã¥À¤ò
- Á÷¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>Content-encoding: pkzip</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="charset-lang" id="charset-lang">ʸ»ú¥»¥Ã¥È¤È¸À¸ì</a></h2>
- <p>¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤È¥Õ¥¡¥¤¥ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¾¤Ë½ÅÍפʾðÊó¤Ï
- ¥É¥­¥å¥á¥ó¥È¤Î½ñ¤«¤ì¤Æ¤¤¤ë¸À¸ì¤È¡¢¤É¤Îʸ»ú¥»¥Ã¥È¤Ç¥Õ¥¡¥¤¥ë¤¬É½¼¨
- ¤µ¤ì¤ë¤Ù¤­¤«¡¢¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£¤¿¤È¤¨¤Ð¡¢¥É¥­¥å¥á¥ó¥È¤Ï¥Ù¥È¥Ê¥à¤Î
- ¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤ä¥­¥ê¥ëʸ»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤Æ¡¢¤½¤Î¤è¤¦¤Ëɽ¼¨¤µ¤ì¤ë
- ɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤³¤Î¾ðÊó¤â¤Þ¤¿¡¢HTTP ¥Ø¥Ã¥À¤Ç
- Á÷¿®¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>ʸ»ú¥»¥Ã¥È¡¢¸À¸ì¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¡¢mime ¥¿¥¤¥×¤Ï¤¹¤Ù¤Æ
- ¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó (<code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code> »²¾È)
- ¤ÎºÇÃæ¤Ë¡¢Ê£¿ô¤Îʸ»ú¥»¥Ã¥È¡¢¸À¸ì¡¢¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¡¢MIME ¥¿¥¤¥×¤«¤é¤Ê¤ë
- ÂåÂØʪ¤¬¤¢¤ë¤È¤­¤Ë¤É¤Î¥É¥­¥å¥á¥ó¥È¤ò¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¤Î¤«¤ò
- ·èÄꤹ¤ë¤È¤­¤Ë»È¤ï¤ì¤Þ¤¹¡£<code class="directive"><a href="#addcharset">AddCharset</a></code>,
- <code class="directive"><a href="#addencoding">AddEncoding</a></code>, <code class="directive"><a href="#addlanguage">AddLanguage</a></code>,
- <code class="directive"><a href="#addtype">AddType</a></code> ¤Î³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇºîÀ®¤µ¤ì¤¿
- ³ÈÄ¥»Ò¤Î´ØÏ¢ÉÕ¤± (¤È <code class="directive"><a href="../mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code> ¤Ç¥ê¥¹¥È¤µ¤ì¤Æ¤¤¤ë
- ³ÈÄ¥»Ò) ¤¬¤³¤ÎÁªÂò¤Ë»²²Ã¤·¤Þ¤¹¡£<code class="directive"><a href="#addhandler">AddHandler</a></code>,
- <code class="directive"><a href="#addinputfilter">AddInputFilter</a></code>,
- <code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code> ¤Î
- ³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Î¤ß´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë³ÈÄ¥»Ò¤Ï
- <code class="directive"><a href="#multiviewsmatch">MultiviewsMatch</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- »È¤¦¤³¤È¤Ç¥Þ¥Ã¥Á¤Î
- ½èÍý¤Ë´Þ¤á¤ë¤³¤È¤â³°¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
- <h3><a name="charset" id="charset">Charset</a></h3>
- <p>¤µ¤é¤Ë¾ðÊó¤òÅÁ¤¨¤ë¤¿¤á¤Ë¡¢Apache ¤Ïʸ½ñ¤Î¸À¸ì¤ò
- <code>Content-Language</code> ¥Ø¥Ã¥À¤ÇÁ÷¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£
- ¤Þ¤¿¡¢¾ðÊó¤òÀµ¤·¤¯É½¼¨¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤Ù¤­Ê¸»ú¥»¥Ã¥È¤ò¼¨¤¹¤¿¤á¤Ë
- <code>Conten-Type</code> ¥Ø¥Ã¥À¤Ë¾ðÊó¤òÄɲ乤뤳¤È¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Content-Language: en, fr<br />
- Content-Type: text/plain; charset=ISO-8859-1
- </code></p></div>
-
- <p>¸À¸ì¤Î»ØÄê¤ÏÆóʸ»ú¤Îû½Ì·Á¤Ç¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£<code>charset</code> ¤¬
- »ÈÍѤ¹¤Ù¤­Ê¸»ú¥»¥Ã¥È¤Î̾Á°¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddCharset" id="AddCharset">AddCharset</a> <a name="addcharset" id="addcharset">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿Ê¸»ú¥»¥Ã¥È¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">AddCharset</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- Í¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿ charset ¤Ë¥Þ¥Ã¥×¤·¤Þ¤¹¡£<var>charset</var>
- ¤Ï¡¢³ÈÄ¥»Ò <var>extension</var> ¤ò´Þ¤ó¤Ç¤¤¤ë¥Õ¥¡¥¤¥ë̾¤Î MIME charset
- ¥Ñ¥é¥á¡¼¥¿¤Ç¤¹¡£¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¤Ï´û¤Ë¤¢¤ë¾¤Î¥Þ¥Ã¥Ô¥ó¥°¤ËÄɲ䵤졢Ʊ¤¸³ÈÄ¥»Ò
- <var>extension</var> ¤Î¤¿¤á¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddLanguage ja .ja<br />
- AddCharset EUC-JP .euc<br />
- AddCharset ISO-2022-JP .jis<br />
- AddCharset SHIFT_JIS .sjis
- </code></p></div>
-
- <p>¤³¤Î¾ì¹ç¡¢¥É¥­¥å¥á¥ó¥È <code>xxxx.ja.jis</code> ¤Ï charset ¤¬
- <code>ISO-2022-JP</code> ¤ÎÆüËܸì¤Î¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹
- (<code>xxxx.jis.ja</code> ¤âƱÍÍ)¡£<code class="directive">AddCharset</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤¬Å¬Àڤ˲ò¼á¤µ¤ìɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¡¢
- ¥É¥­¥å¥á¥ó¥È¤Î charset ¤Î¾ðÊó¤ò¥¯¥é¥¤¥¢¥ó¥È¤Ë¶µ¤¨¤ë¤¿¤á¤ËÌò¤ËΩ¤Á¤Þ¤¹¡£
- ¤Þ¤¿¡¢¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤Î charset
- ¤ÎÍ¥ÀèÅ٤˴ð¤Å¤¤¤ÆÊ£¿ô¤Î¥É¥­¥å¥á¥ó¥È¤ÎÃ椫¤é¥É¥­¥å¥á¥ó¥È¤òÁª¤Ö<a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>¤Î¤¿¤á¤Ë¤âÌò¤ËΩ¤Á¤Þ¤¹¡£</p>
-
- <p>°ú¿ô <var>extension</var>¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddEncoding" id="AddEncoding">AddEncoding</a> <a name="addencoding" id="addencoding">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
-¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">AddEncoding</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- Í¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë¥Þ¥Ã¥×¤·¤Þ¤¹¡£
- <var>MIME-enc</var> ¤Ï¡¢³ÈÄ¥»Ò <var>extension</var>
- ¤ò´Þ¤ó¤À¥É¥­¥å¥á¥ó¥È¤Ë»ÈÍѤ¹¤ë MIME ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ç¤¹¡£
- ¤³¤Î¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¤Ï´û¤Ë¤¢¤ë¾¤Î¥Þ¥Ã¥Ô¥ó¥°¤ËÄɲ䵤졢
- Ʊ¤¸³ÈÄ¥»Ò <var>extension</var> ¤Î¤¿¤á¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- <code>AddEncoding x-gzip .gz<br />
- AddEncoding x-compress .Z</code>
- </code></p></div>
-
- <p>¤³¤ì¤Ï¡¢³ÈÄ¥»Ò <code>.gz</code> ¤ò´Þ¤à¥Õ¥¡¥¤¥ë̾¤¬ <code>x-gzip</code>
- ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò»È¤Ã¤Æ¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤³¤È¤È¡¢³ÈÄ¥»Ò <code>.Z</code>
- ¤ò´Þ¤à¥Õ¥¡¥¤¥ë̾¤¬ <code>x-compress</code>
- ¤Ç¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <p>¸Å¤¤¥¯¥é¥¤¥¢¥ó¥È¤Ï <code>x-zip</code> ¤È <code>x-compress</code>
- ¤¬Ê֤äƤ¯¤ë¤³¤È¤ò´üÂÔ¤·¤Þ¤¹¤¬¡¢É¸½àµ¬³Ê¤Ç¤Ï¤½¤ì¤¾¤ì
- <code>gzip</code> ¤È <code>compress</code>
- ¤ÈÅù²Á¤Ç¤¢¤ë¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£Apache
- ¤Ï¡¢¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÈæ³Ó¤ò¤¹¤ë¤È¤­¤Ë¤Ï¡¢ÀèƬ¤Ë¤¢¤ë
- <code>x-</code> ¤ò̵»ë¤·¤Þ¤¹¡£Apache
- ¤¬¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°ÉÕ¤­¤Ç±þÅú¤òÊÖ¤¹¤È¤­¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬Í׵ᤷ¤¿·Á¼°
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢<code>x-foo</code> ¤ä <code>foo</code>)
- ¤ò»ÈÍѤ·¤Þ¤¹¡£Íפ¹¤ë¤Ë¡¢¤³¤ÎÆó¤Ä¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¾ì¹ç¤Ï¾ï¤Ë
- <code>x-gzip</code> ¤È <code>x-compress</code>
- ¤ò»È¤¦¤Ù¤­¤Ç¤¢¤ë¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£<code>deflate</code>
- ¤Î¤è¤¦¤Ê¤è¤ê¿·¤·¤¤¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ç¤Ï¡¢<code>x-</code>
- ¤Ê¤·¤Ç»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
- </p>
-
- <p>°ú¿ô <var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddHandler" id="AddHandler">AddHandler</a> <a name="addhandler" id="addhandler">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥Ï¥ó¥É¥é¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p>³ÈÄ¥»Ò <var>extension</var> ¤¬Ì¾Á°¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï»ØÄꤵ¤ì¤¿ <a href="../handler.html">handler-name</a> ¤Ë°·¤ï¤ì¤Þ¤¹¡£
- ¤³¤Î¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¤Ï´û¤Ë¤¢¤ë¾¤Î¥Þ¥Ã¥Ô¥ó¥°¤ËÄɲ䵤졢
- Ʊ¤¸³ÈÄ¥»Ò <var>extension</var>
- ¤Î¤¿¤á¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢³ÈÄ¥»Ò
- "<code>.cgi</code>" ¤Ç½ª¤ï¤ë¥Õ¥¡¥¤¥ë¤ò CGI
- ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ°·¤¤¤¿¤¤¤È¤­¤Ï¡¢°Ê²¼¤ÎÀßÄê¤ò¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- AddHandler cgi-script .cgi
- </code></p></div>
-
- <p>¤³¤ì¤ò httpd.conf ¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤¹¤ë¤³¤È¤Ç¡¢³ÈÄ¥»Ò
- "<code>.cgi</code>" ¤Î¥Õ¥¡¥¤¥ë¤Ï CGI ¥×¥í¥°¥é¥à¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
- </p>
-
- <p>°ú¿ô <var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddInputFilter" id="AddInputFilter">AddInputFilter</a> <a name="addinputfilter" id="addinputfilter">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ò¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤¹¤ë
- ¥Õ¥£¥ë¥¿¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.26 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">AddInputFilter</code> ¤Ï¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò
- <var>extension</var> ¤ò¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ä POST ¤¬¥µ¡¼¥Ð¤ËÍ褿¤È¤­¤Ë
- ½èÍý¤ò¤¹¤ë<a href="../filter.html">¥Õ¥£¥ë¥¿</a>¤Ë¥Þ¥Ã¥×¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢<code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤â
- ´Þ¤á¡¢Â¾¤Î¾ì½ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥£¥ë¥¿¤Ë²Ã¤¨¤é¤ì¤Þ¤¹¡£
- ¤³¤Î¥Þ¥Ã¥Ô¥ó¥°¤Ï¤¹¤Ç¤Ë¤¢¤ë¤â¤Î¤è¤êÍ¥À褵¤ì¤Æ¥Þ¡¼¥¸¤µ¤ì¡¢
- Ʊ¤¸ <var>extension</var> ¤ËÂФ¹¤ë´û¸¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <p>Ê£¿ô¤Î¥Õ¥£¥ë¥¿¤ò»ØÄꤹ¤ë¤È¤­¤Ï¡¢¥Ç¡¼¥¿¤ò½èÍý¤¹¤ë½çÈ֤˥»¥ß¥³¥í¥ó¤Ç
- ·Ò¤¤¤Ç½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¥Õ¥£¥ë¥¿¤È <var>extension</var> ¤È¤Î
- ξÊý¤Î°ú¿ô¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢³ÈÄ¥»Ò¤ÎºÇ½é¤Î¥É¥Ã¥È¤Ï
- ¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#removeinputfilter">RemoveInputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddLanguage" id="AddLanguage">AddLanguage</a> <a name="addlanguage" id="addlanguage">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤵ¤ì¤¿¸À¸ì¤Ë¥Þ¥Ã¥×</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">AddLanguage</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Í¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿
- content language ¤Ë¥Þ¥Ã¥×¤·¤Þ¤¹¡£<var>MIME-lang</var> ¤Ï¡¢³ÈÄ¥»Ò
- <var>extension</var> ¤ò´Þ¤ó¤Ç¤¤¤ë¥Õ¥¡¥¤¥ë̾¤Î MIME ¤Ë¤ª¤±¤ë¸À¸ì¤Ç¤¹¡£
- ¤³¤Î¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¤Ï´û¤Ë¤¢¤ë¥Þ¥Ã¥Ô¥ó¥°¤ËÄɲ䵤졢Ʊ¤¸³ÈÄ¥»Ò
- <var>extension</var> ¤Î¤¿¤á¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddEncoding x-compress .Z<br />
- AddLanguage en .en<br />
- AddLanguage fr .fr
- </code></p></div>
-
- <p>¤³¤Î¾ì¹ç¡¢<code>xxxx.en.Z</code> ¥É¥­¥å¥á¥ó¥È¤Ï compress
- ¤µ¤ì¤¿±Ñ¸ì¤Î¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹ (<code>xxxx.Z.en</code>
- ¤âƱÍÍ)¡£content language ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÄÌÃΤµ¤ì¤Þ¤¹¤¬¡¢
- ¥Ö¥é¥¦¥¶¤¬¤³¤Î¾ðÊó¤ò»È¤¦¤³¤È¤Ï¤ª¤½¤é¤¯¤¢¤ê¤Þ¤»¤ó¡£
- <code class="directive">AddLanguage</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤Î¸À¸ì¤ÎÍ¥ÀèÅ٤˴ð¤Å¤¤¤ÆÊ£¿ô¤Î
- ¥É¥­¥å¥á¥ó¥È¤ÎÃ椫¤é¥É¥­¥å¥á¥ó¥È¤òÁª¤Ö<a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>¤Î¤¿¤á¤Ë¤è¤êÌò¤ËΩ¤Á¤Þ¤¹¡£</p>
-
- <p>Ê£¿ô¤Î¸À¸ì¤¬Æ±¤¸³ÈÄ¥»Ò¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢
- ºÇ¸å¤Î¤â¤Î¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£¤¹¤Ê¤ï¤Á¡¢¼¡¤Î¤è¤¦¤Ê¾ì¹ç¡¢</p>
-
- <div class="example"><p><code>
- AddLanguage en .en<br />
- AddLanguage en-gb .en<br />
- AddLanguage en-us .en
- </code></p></div>
-
- <p>³ÈÄ¥»Ò <code>.en</code> ¤Î¤¢¤ë¥É¥­¥å¥á¥ó¥È¤Ï
- <code>en-us</code> ¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <p>°ú¿ô <var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddOutputFilter" id="AddOutputFilter">AddOutputFilter</a> <a name="addoutputfilter" id="addoutputfilter">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò¥µ¡¼¥Ð¤«¤é¤Î±þÅú¤ò½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤Ë
- ¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.26 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">AddOutputFilter</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ³ÈÄ¥»Ò <var>extension</var> ¤ò¥µ¡¼¥Ð¤Î±þÅú¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤é¤ì¤ë
- Á°¤Ë½èÍý¤¹¤ë<a href="../filter.html">¥Õ¥£¥ë¥¿</a>¤òÄêµÁ¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ò´Þ¤á¡¢Â¾¤Î¾ì½ê¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥£¥ë¥¿¤Ë²Ã¤¨¤é¤ì¤Þ¤¹¡£
- ¤³¤Î¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¤Ï´û¤Ë¤¢¤ë¥Þ¥Ã¥Ô¥ó¥°¤ËÄɲ䵤졢Ʊ¤¸³ÈÄ¥»Ò
- <var>extension</var> ¤Î¤¿¤á¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢°Ê²¼¤ÎÀßÄê¤Ï¤¹¤Ù¤Æ¤Î <code>.shtml</code> ¥Õ¥¡¥¤¥ë¤ò SSI ¤Ç½èÍý¤·¡¢
- ¤½¤Î½ÐÎϤò <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¤ò»È¤Ã¤Æ°µ½Ì¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- AddOutputFilter INCLUDES;DEFLATE shtml
- </code></p></div>
-
- <p>Ê£¿ô¤Î¥Õ¥£¥ë¥¿¤ò»ØÄꤹ¤ë¤È¤­¤Ï¡¢¥Ç¡¼¥¿¤ò½èÍý¤¹¤ë½çÈ֤˥»¥ß¥³¥í¥ó¤Ç
- ·Ò¤¤¤Ç½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£<var>filter</var> ¤È <var>extension</var> ¤Î
- ξ°ú¿ô¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢³ÈÄ¥»Ò¤ÎºÇ½é¤Î¥É¥Ã¥È¤Ï
- ¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#removeoutputfilter">RemoveOutputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AddType" id="AddType">AddType</a> <a name="addtype" id="addtype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ë¥Þ¥Ã¥×</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">AddType</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- Í¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ë¥Þ¥Ã¥×¤·¤Þ¤¹¡£
- <var>MIME-type</var> ¤Ï³ÈÄ¥»Ò <var>extension</var>
- ¤ò´Þ¤ó¤À¥É¥­¥å¥á¥ó¥È¤Ë»ÈÍѤ¹¤ë MIME ¥¿¥¤¥×¤Ç¤¹¡£
- ¤³¤Î¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¤Ï´û¤Ë¤¢¤ë¥Þ¥Ã¥Ô¥ó¥°¤ËÄɲ䵤졢Ʊ¤¸³ÈÄ¥»Ò
- <var>extension</var> ¤Î¤¿¤á¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¾å½ñ¤­¤·¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï MIME ¥¿¥¤¥×¥Õ¥¡¥¤¥ë (<code class="directive"><a href="#typesconfig">TypesConfig</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»²¾È)
- ¤Ë̵¤¤¥Þ¥Ã¥Ô¥ó¥°¤òÄɲ乤뤿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- AddType image/gif .gif
- </code></p></div>
-
- <div class="note">
- ¿·¤·¤¤ MIME ¥¿¥¤¥×¤Ï¡¢<code class="directive"><a href="#typesconfig">TypesConfig</a></code>
- ¥Õ¥¡¥¤¥ë¤òÊѹ¹¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢<code class="directive">AddType</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤ÆÄɲ乤뤳¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- </div>
-
- <p>°ú¿ô <var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#forcetype">ForceType</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="DefaultLanguage" id="DefaultLanguage">DefaultLanguage</a> <a name="defaultlanguage" id="defaultlanguage">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¤¢¤ë¥¹¥³¡¼¥×¤Î¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò»ØÄꤵ¤ì¤¿¸À¸ì¤Ë
-ÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>DefaultLanguage <var>MIME-lang</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">DefaultLanguage</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Apache
- ¤¬¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥¹¥³¡¼¥× (<em>Î㤨¤Ð</em>¡¢¤½¤Î»þÅÀ¤Î
- <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
- ¤ÎÈÏ°Ï) ¤Ë¤¢¤ë¡¢ÌÀ¼¨Åª¤Ê¸À¸ì³ÈÄ¥»Ò
- (<code class="directive"><a href="#addlanguage">AddLanguage</a></code> ¤ÇÀßÄꤵ¤ì¤ë
- <code>.fr</code> ¤ä <code>.de</code>) ¤Î¤Ê¤¤Á´¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò¡¢»ØÄꤵ¤ì¤¿
- <var>MIME-lang</var> ¸À¸ì¤Ç¤¢¤ë¤È¤ß¤Ê¤¹¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë̾¤òÊѤ¨¤ë¤³¤È¤Ê¤¯¡¢
- ¥Ç¥£¥ì¥¯¥È¥ê¤¬¥ª¥é¥ó¥À¸ì¤Î¥³¥ó¥Æ¥ó¥È¤ò´Þ¤ó¤Ç¤¤¤ë¡¢
- ¤È¤¤¤¦¤è¤¦¤Ê¤³¤È¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ³ÈÄ¥»Ò¤ò»ÈÍѤ·¤Æ¸À¸ì¤ò»ØÄꤹ¤ëÊýË¡¤È°ã¤¤¡¢
- <code class="directive">DefaultLanguage</code>
- ¤Ï°ì¤Ä¤Î¸À¸ì¤·¤«»ØÄê¤Ç¤­¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code class="directive">DefaultLanguage</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Í­¸ú¤Ç¤Ê¤¯¡¢¥Õ¥¡¥¤¥ë¤Ë
- <code class="directive"><a href="#addlanguage">AddLanguage</a></code>
- ¤ÇÀßÄꤵ¤ì¤¿¸À¸ì¤Î³ÈÄ¥»Ò¤¬¤Ê¤¤¤È¤­¤Ï¡¢
- ¥Õ¥¡¥¤¥ë¤Ë¤Ï¸À¸ì°À­¤¬¤Ê¤¤¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- DefaultLanguage en
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ModMimeUsePathInfo" id="ModMimeUsePathInfo">ModMimeUsePathInfo</a> <a name="modmimeusepathinfo" id="modmimeusepathinfo">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>path_info ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¥Õ¥¡¥¤¥ë̾¤Î°ìÉô¤È¤·¤Æ°·¤¦¤è¤¦¤Ë
-mod_mime ¤ËÄÌÃΤ¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ModMimeUsePathInfo On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ModMimeUsePathInfo Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0.41 °Ê¹ß</td></tr>
-</table>
- <p><code class="directive">ModMimeUsePathInfo</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤Î»ý¤Ä¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ¥ê¥¯¥¨¥¹¥È¤ËŬÍѤµ¤»¤ë¤¿¤á¤Ë¡¢¥Õ¥¡¥¤¥ë̾¤È <code>path_info</code> URL
- ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò·ë¹ç¤µ¤»¤ë¤¿¤á¤Ë»ÈÍѤ·¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡Ö <code>Off</code> ¡×¤Ç¡¢<code>path_info</code>
- ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥Ð¡¼¥Á¥ã¥ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»ÈÍѤ·¤Æ¤¤¤ëºÝ¤Ë
- ¿ä¾©¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ModMimeUsePathInfo On
- </code></p></div>
-
- <p><code>/bar</code> ¤¬Â¸ºß¤·¤Æ (foo.shtml ¤Ï¸ºß¤·¤Ê¤¤)
- <code class="directive">ModMimeUsePathInfo</code> ¤¬ <code>On</code> ¤Ç¤¢¤ë¤È¤·¤Æ¡¢
- <code>/bar/foo.shtml</code> ¤ËÂФ¹¤ë¥ê¥¯¥¨¥¹¥È¤òȯ¹Ô¤·¤¿¾ì¹ç¡¢
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤ÏÆþ¤Ã¤Æ¤­¤¿¥ê¥¯¥¨¥¹¥È¤ò
- <code>/bar/foo.shtml</code> ¤È¤·¤Æ°·¤¤¡¢
- <code>AddOutputFileter INCLUDES .shtml</code> ¤Î¤è¤¦¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code>INCLUDES</code> ¥Õ¥£¥ë¥¿¤ò¥ê¥¯¥¨¥¹¥È¤ËÉղ䵤»¤Þ¤¹¡£
- <code class="directive">ModMimeUsePathInfo</code> ¤¬ÀßÄꤵ¤ì¤Ê¤±¤ì¤Ð¡¢
- <code>INCLUDES</code> ¥Õ¥£¥ë¥¿¤ÏÉղ䵤ì¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MultiviewsMatch" id="MultiviewsMatch">MultiviewsMatch</a> <a name="multiviewsmatch" id="multiviewsmatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>MultiViews ¤Ç¤Î¥Þ¥Ã¥Á¥ó¥°¤Î¸¡º÷¤Ë´Þ¤Þ¤»¤ë
-¥Õ¥¡¥¤¥ë¤Î¥¿¥¤¥×¤ò»ØÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>MultiviewsMatch NegotiatedOnly</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.26 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">MultiviewsMatch</code> ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢
- <a href="mod_negotiation.html">mod_negotiation</a> ¤Î
- Multiviews ¤Ë 3 ¼ïÎà¤Î°Û¤Ê¤ëµóÆ°¤ò¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Multiviews ¤ò»ÈÍѤ¹¤ë¤È¡¢¥Õ¥¡¥¤¥ë (Îã <code>index.html</code>)
- ¤ËÂФ¹¤ë¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¡¢¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤¹¤ë³ÈÄ¥»Ò¤¬¥Ù¡¼¥¹¤ËÉÕ¤¤¤¿¤â¤Î
- (<code>index.html.en</code>, <code>index.html.fr</code> ¤ä
- <code>index.html.gz</code>)
- ¤ò¥Þ¥Ã¥Á¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code>NegotiatedOnly</code> ¥ª¥×¥·¥ç¥ó¤Ç¤Ï¡¢¥Ù¡¼¥¹Ì¾¤Ë³¤¯³ÈÄ¥»ÒÁ´¤Æ¤¬
- ¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Ç <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>
- ¤¬Ç§¼±¤¹¤ë³ÈÄ¥»Ò (<em>Îã</em> ʸ»ú¥»¥Ã¥È¡¢¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¡¢¸À¸ì¤ä¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°)
- ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤ì¤ÏÉûºîÍѤκǤ⾯¤Ê¤¤
- ºÇ¤âŪ³Î¤Ê¼ÂÁõ¤Ç¡¢¥Ç¥Õ¥©¥ë¥È¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¥Ï¥ó¥É¥é¤È¥Õ¥£¥ë¥¿¤ÎξÊý¤â¤·¤¯¤ÏÊÒÊý¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿³ÈÄ¥»Ò¤ò´Þ¤á¤ë¤Ë¤Ï¡¢
- <code class="directive">MultiviewsMatch</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë <code>Handlers</code>,
- <code>Filters</code> ¤Þ¤¿¤Ï¤½¤ÎξÊý¤Î¥ª¥×¥·¥ç¥ó¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
- ¤â¤·Â¾¤Î¾ò·ï¤¬Æ±¤¸¤Ç¤¢¤ì¤Ð¡¢ºÇ¤â¾®¤µ¤¤¥Õ¥¡¥¤¥ë¤¬Á÷¿®¤µ¤ì¤Þ¤¹¡£
- Î㤨¤Ð¡¢500 ʸ»ú¤Î <code>index.html.cgi</code> ¤È 1000 ¥Ð¥¤¥È¤Î
- <code>index.html.pl</code> ¤Ç¤¢¤ì¤Ð¡¢<code>.cgi</code>
- ¤Î¥Õ¥¡¥¤¥ë¤¬Í¥À褵¤ì¤Þ¤¹¡£<code>.asis</code> ¥Õ¥¡¥¤¥ë¤òÍøÍѤ·¤Æ¤¤¤ë¥æ¡¼¥¶¤Ï¡¢
- <code>.asis</code> ¥Õ¥¡¥¤¥ë¤¬ <code>asis-handler</code> ¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¤È¤­¤Ë¤Ï¡¢
- ¥Ï¥ó¥É¥é¥ª¥×¥·¥ç¥ó¤Î»ÈÍѤò¹¥¤à¤Ç¤·¤ç¤¦¡£</p>
-
- <p>ºÇ¸å¤Ë¡¢<code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤¬Ç§¼±¤·¤Ê¤¤³ÈÄ¥»Ò¤Ç¤¢¤í¤¦¤È¤â¡¢
- ¤É¤ó¤Ê³ÈÄ¥»Ò¤Ç¤â¥Þ¥Ã¥Á¤µ¤»¤ë <code>Any</code> ¤¬»ÈÍѤǤ­¤Þ¤¹¡£
- ¤³¤ÎµóÆ°¤Ï Apache 1.3 ¤Î¤È¤­¤ÈƱ¤¸¤â¤Î¤Ç¡¢Í½´ü¤·¤Ê¤¤Æ°ºî¡¢Î㤨¤Ð <code>.old</code> ¤ä
- <code>.bak</code> ¥Õ¥¡¥¤¥ë¤È¤¤¤Ã¤¿¥¦¥§¥Ö¥Þ¥¹¥¿¤¬Á÷¿®¤ò°Õ¿Þ¤·¤Æ¤¤¤Ê¤¤
- ¥Õ¥¡¥¤¥ë¤òÁ÷¿®¤¹¤ë¡¢¤È¤¤¤Ã¤¿Æ°ºî¤ò¹Ô¤Ê¤¦²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¼¡¤ÎÀßÄê¤Ç¤Ï¡¢¥Ï¥ó¥É¥é¤ä¥Õ¥£¥ë¥¿¤¬ Multiviews ¤Ë»²²Ã¤¹¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¤·¡¢Ì¤ÃΤΥե¡¥¤¥ë¤Ï½ü³°¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- MultiviewsMatch Handlers Filters
- </code></p></div>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveCharset" id="RemoveCharset">RemoveCharset</a> <a name="removecharset" id="removecharset">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤¹¤Ù¤Æ¤Îʸ»ú¥»¥Ã¥È
-¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveCharset <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.24 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">RemoveCharset</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ÏÍ¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿Ê¸»ú¥»¥Ã¥È¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤¬¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ë
- ¤«¤é·Ñ¾µ¤·¤¿´ØÏ¢ÉÕ¤±¤ò¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð:</p>
-
- <p><var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£
- ¤Þ¤¿¡¢ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- RemoveCharset .html .shtml
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveEncoding" id="RemoveEncoding">RemoveEncoding</a> <a name="removeencoding" id="removeencoding">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤¹¤Ù¤Æ¤Î¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
-¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">RemoveEncoding</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- Í¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤¬¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤«¤é·Ñ¾µ¤·¤¿´ØÏ¢ÉÕ¤±¤ò
- ¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><h3>/foo/.htaccess:</h3><p><code>
- AddEncoding x-gzip .gz<br />
- AddType text/plain .asc<br />
- &lt;Files *.gz.asc&gt;<br />
- <span class="indent">
- RemoveEncoding .gz<br />
- </span>
- &lt;/Files&gt;
- </code></p></div>
-
- <p>¤³¤ì¤Ï¡¢<code>foo.gz</code> ¤Ï gzip
- ¤Ç¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò»ØÄꤷ¤Þ¤¹¤¬¡¢<code>foo.gz.asc</code>
- ¤Ï¥¨¥ó¥³¡¼¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¥×¥ì¡¼¥ó¥Æ¥­¥¹¥È¤Î
- ¥Õ¥¡¥¤¥ë¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤ò»ØÄꤷ¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code class="directive">RemoveEncoding</code> ¤Ï
- <code class="directive"><a href="#addencoding">AddEncoding</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î<em>¸å</em>¤Ç½èÍý¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- Ʊ¤¸¥Ç¥£¥ì¥¯¥È¥ê¤ÎÀßÄêÃæ¤ËξÊý¤¬¸½¤ì¤ë¤È¡¢
- ¸å¼Ô¤Î¸ú²Ì¤¬ÂǤÁ¾Ã¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p>
- </div>
-
- <p><var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£
- ¤Þ¤¿¡¢ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveHandler" id="RemoveHandler">RemoveHandler</a> <a name="removehandler" id="removehandler">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤¹¤Ù¤Æ¤Î¥Ï¥ó¥É¥é¤ò
-²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveHandler <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">RemoveHandler</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ÏÍ¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Ï¥ó¥É¥é¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£
- ¤³¤ì¤Ë¤è¤ê¡¢¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤¬¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ë
- ¤«¤é·Ñ¾µ¤·¤¿´ØÏ¢ÉÕ¤±¤ò¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð:</p>
-
- <div class="example"><h3>/foo/.htaccess:</h3><p><code>
- AddHandler server-parsed .html
- </code></p></div>
-
- <div class="example"><h3>/foo/bar/.htaccess:</h3><p><code>
- RemoveHandler .html
- </code></p></div>
-
- <p>¤³¤ì¤Ï¡¢<code>/foo/bar</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Î <code>.html</code>
- ¥Õ¥¡¥¤¥ë¤Ï SSI (<code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ¥â¥¸¥å¡¼¥ë»²¾È) ¤Ç¤Ï¤Ê¤¯¡¢
- ÉáÄ̤Υե¡¥¤¥ë¤È¤·¤Æ°·¤ï¤ì¤ë¤è¤¦¤Ë¤¹¤ë¸ú²Ì¤¬¤¢¤ê¤Þ¤¹¡£
- </p>
-
- <p><var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£
- ¤Þ¤¿¡¢ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveInputFilter" id="RemoveInputFilter">RemoveInputFilter</a> <a name="removeinputfilter" id="removeinputfilter">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ÆþÎÏ¥Õ¥£¥ë¥¿¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.26 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">RemoveInputFilter</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- »ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ÆþÎÏ¥Õ¥£¥ë¥¿¤ò²ò½ü¤·¤Þ¤¹¡£
- ¤³¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤«¤é
- ·Ñ¾µ¤·¤¿´ØÏ¢ÉÕ¤±¤ò ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¤ª¤¤¤Æ
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><var>extension</var> °ú¿ô¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£¤Þ¤¿¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#addinputfilter">AddInputFilter</a></code></li>
-<li><code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveLanguage" id="RemoveLanguage">RemoveLanguage</a> <a name="removelanguage" id="removelanguage">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¸À¸ì¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.24 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">RemoveLanguage</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- »ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¸À¸ì¤ò²ò½ü¤·¤Þ¤¹¡£
- ¤³¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤«¤é
- ·Ñ¾µ¤·¤¿´ØÏ¢ÉÕ¤±¤ò ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¤ª¤¤¤Æ
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><var>extension</var> °ú¿ô¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£¤Þ¤¿¡¢
- ºÇ½é¤Î¥É¥Ã¥È¤Ï¤Ä¤¤¤Æ¤â¤Ä¤«¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveOutputFilter" id="RemoveOutputFilter">RemoveOutputFilter</a> <a name="removeoutputfilter" id="removeoutputfilter">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿½ÐÎÏ¥Õ¥£¥ë¥¿¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.26 °Ê¹ß¤Ç¤Î¤ß»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">RemoveOutputFilter</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- »ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿½ÐÎÏ¥Õ¥£¥ë¥¿¤ò²ò½ü¤·¤Þ¤¹¡£
- ¤³¤ì¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë¤«¤é
- ·Ñ¾µ¤·¤¿´ØÏ¢ÉÕ¤±¤ò ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¤ª¤¤¤Æ
- <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£
- ¤Þ¤¿¡¢ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- RemoveOutputFilter shtml
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#addoutputfilter">AddOutputFilter</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RemoveType" id="RemoveType">RemoveType</a> <a name="removetype" id="removetype">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò
-²ò½ü¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>RemoveType <var>extension</var> [<var>extension</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">RemoveType</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÍ¿¤¨¤é¤ì¤¿³ÈÄ¥»Ò¤Î
- MIME ¥¿¥¤¥×¤Î´ØÏ¢ÉÕ¤±¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë <code>.htaccess</code>
- ¥Õ¥¡¥¤¥ë¤¬¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ä¥µ¡¼¥Ð¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤«¤é·Ñ¾µ¤·¤¿
- ´ØÏ¢ÉÕ¤±¤ò¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð:</p>
-
- <div class="example"><h3>/foo/.htaccess:</h3><p><code>
- RemoveType .cgi
- </code></p></div>
-
- <p>¤³¤ì¤Ï <code>/foo/</code> ¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î <code>.cgi</code>
- ¥Õ¥¡¥¤¥ë¤ÎÆÃÊ̤ʰ·¤¤¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¤Ï <code class="directive"><a href="../mod/core.html#defaulttype">DefaultType</a></code> ¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code class="directive">RemoveType</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="directive"><a href="#addtype">AddType</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î<em>¸å</em>¤Ë½èÍý¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- ξÊý¤¬Æ±¤¸¥Ç¥£¥ì¥¯¥È¥ê¤ÎÀßÄêÃæ¤Ë¸½¤ì¤¿¾ì¹ç¡¢
- ¸å¼Ô¤Î¸ú²Ì¤¬ÂǤÁ¾Ã¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p>
- </div>
-
- <p><var>extension</var> ¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Þ¤»¤ó¡£
- ¤Þ¤¿¡¢ºÇ½é¤Î¥É¥Ã¥È¤Ï¤¢¤Ã¤Æ¤â¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="TypesConfig" id="TypesConfig">TypesConfig</a> <a name="typesconfig" id="typesconfig">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>mime.types ¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>TypesConfig <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>TypesConfig conf/mime.types</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>¥Ù¡¼¥¹</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_mime</td></tr>
-</table>
- <p><code class="directive">TypesConfig</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢MIME
- ¥¿¥¤¥×ÀßÄê¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤òÀßÄꤷ¤Þ¤¹¡£<var>filename</var> ¤Ï
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> ¤«¤é¤ÎÁêÂХѥ¹¤Ç¤¹¡£
- ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤«¤é¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ø¤Î
- ¥Ç¥Õ¥©¥ë¥È¤Î¥Þ¥Ã¥Ô¥ó¥°¤òÀßÄꤷ¤Þ¤¹¡£
- ¤Û¤È¤ó¤É¤Î´ÉÍý¼Ô¤Ï¡¢¤è¤¯»È¤ï¤ì¤ë¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò
- IANA ¤ËÅÐÏ¿¤µ¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ë´ØÏ¢ÉÕ¤±¤Æ¤¤¤ë¡¢
- Apache ¤Î <code>mime.types</code> ¥Õ¥¡¥¤¥ë¤ò»È¤¤¤Þ¤¹¡£
- ¸½ºß¤Î°ìÍ÷¤Ï <a href="http://www.isi.edu/in-notes/iana/assignments/media-types/media-types">http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</a>
- ¤Ç´ÉÍý¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¡¢¼çÍפʥá¥Ç¥£¥¢¥¿¥¤¥×¤ÎÄêµÁ¤òÄ󶡤·¤Æ¡¢
- ɬÍפȤ³¤í¤ò <code class="directive"><a href="#addtype">AddType</a></code> ¤Ç
- ¾å½ñ¤­¤¹¤ë¡¢¤È¤¤¤¦ÊýË¡¤Ç <code>httpd.conf</code> ¤ò´Êά¤Ë¤·¤Þ¤¹¡£
- <code>mime.types</code> ¤Ï¥µ¡¼¥Ð¤ò¥¢¥Ã¥×¥°¥ì¡¼¥É¤·¤¿¤È¤­¤Ë
- ÃÖ¤­´¹¤¨¤é¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¤Î¤Ç¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤òľÀÜ
- ÊÔ½¸¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£</p>
-
- <p>¥Õ¥¡¥¤¥ë¤Ï¡¢<code class="directive"><a href="#addtype">AddType</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤ÈƱ¤¸·Á¼°¤Î¹Ô¤Ç¹½À®¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- <var>MIME-type</var> [<var>extension</var>] ...
- </code></p></div>
-
- <p>³ÈÄ¥»Ò¤ÎÂçʸ»ú¾®Ê¸»ú¤Ï¶èÊ̤µ¤ì¤Þ¤»¤ó¡£¶õ¹Ô¤ä¥Ï¥Ã¥·¥å (`#')
- ¤Ç»Ï¤Þ¤ë¹Ô¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="note">
- (1) IANA ¤Ë´û¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¡¢¤¢¤ë¤¤¤Ï (2)
- ¹­¤¯¼õ¤±Æþ¤ì¤é¤ì¤Æ¤¤¤Æ¥×¥é¥Ã¥È¥Û¡¼¥à´Ö¤Ç¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë¾×Æͤ¬¤Ê¤¤¡¢
- ¤È¤¤¤¦¾ì¹ç¤Ç¤Ê¤±¤ì¤Ð¡¢ÇÛÉÛÃæ¤Î <code>mime.types</code>
- ¥Õ¥¡¥¤¥ë¤Ë¿·¤¿¤Ê¤â¤Î¤òÅÐÏ¿¤¹¤ë¤è¤¦¤Ë
- Apache HTTP Server Project ¤Ë¥ê¥¯¥¨¥¹¥È¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- <code>category/x-subtype</code> ¤Î¥ê¥¯¥¨¥¹¥È¤Ï¼«Æ°Åª¤ËµÑ²¼¤µ¤ì¤Þ¤¹¤·¡¢
- ¸À¸ì¤äʸ»ú¥»¥Ã¥È¤Î̾Á°¶õ´Ö¤Ç´û¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤Æ¡¢¾×ÆͤβÄǽÀ­¤Î¤¢¤ë
- 2 ʸ»ú¤Î³ÈÄ¥»Ò¤âµÑ²¼¤µ¤ì¤Þ¤¹¡£
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mime.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_mime.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_mime.xml b/docs/manual/mod/mod_mime.xml
deleted file mode 100644
index 7c95660814..0000000000
--- a/docs/manual/mod/mod_mime.xml
+++ /dev/null
@@ -1,899 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.27 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_mime.xml.meta">
-
-<name>mod_mime</name>
-<description>Associates the requested filename's extensions
- with the file's behavior (handlers and filters)
- and content (mime-type, language, character set and
- encoding)</description>
-<status>Base</status>
-<sourcefile>mod_mime.c</sourcefile>
-<identifier>mime_module</identifier>
-
-<summary>
- <p>This module is used to associate various bits of "meta
- information" with files by their filename extensions. This
- information relates the filename of the document to it's
- mime-type, language, character set and encoding. This
- information is sent to the browser, and participates in content
- negotiation, so the user's preferences are respected when
- choosing one of several possible files to serve. See
- <module>mod_negotiation</module> for more information
- about <a href="../content-negotiation.html">content negotiation</a>.</p>
-
- <p>The directives <directive
- module="mod_mime">AddCharset</directive>, <directive
- module="mod_mime">AddEncoding</directive>, <directive
- module="mod_mime">AddLanguage</directive> and <directive
- module="mod_mime">AddType</directive> are all used to map file
- extensions onto the meta-information for that file. Respectively
- they set the character set, content-encoding, content-language,
- and MIME-type (content-type) of documents. The directive <directive
- module="mod_mime">TypesConfig</directive> is used to specify a
- file which also maps extensions onto MIME types. </p>
-
- <p>In addition, <module>mod_mime</module> may define the <a
- href="../handler.html">handler</a> and <a
- href="../filter.html">filters</a> that originate and process
- content. The directives <directive
- module="mod_mime">AddHandler</directive>, <directive
- module="mod_mime">AddOutputFilter</directive>, and <directive
- module="mod_mime">AddInputFilter</directive> control the modules
- or scripts that serve the document. The <directive
- module="mod_mime">MultiviewsMatch</directive> directive allows
- <module>mod_negotiation</module> to consider these file extensions
- to be included when testing Multiviews matches.</p>
-
- <p>While <module>mod_mime</module> associates meta-information
- with filename extensions, the <module>core</module> server
- provides directives that are used to associate all the files in a
- given container (<em>e.g.</em>, <directive type="section"
- module="core">Location</directive>, <directive type="section"
- module="core">Directory</directive>, or <directive type="section"
- module="core">Files</directive>) with particular
- meta-information. These directives include <directive
- module="core">ForceType</directive>, <directive
- module="core">SetHandler</directive>, <directive
- module="core">SetInputFilter</directive>, and <directive
- module="core">SetOutputFilter</directive>. The core directives
- override any filename extension mappings defined in
- <module>mod_mime</module>.</p>
-
- <p>Note that changing the meta-information for a file does not
- change the value of the <code>Last-Modified</code> header.
- Thus, previously cached copies may still be used by a client or
- proxy, with the previous headers. If you change the
- meta-information (language, content type, character set or
- encoding) you may need to 'touch' affected files (updating
- their last modified date) to ensure that all visitors are
- receive the corrected content headers.</p>
-</summary>
-<seealso><directive
-module="mod_mime_magic">MimeMagicFile</directive></seealso>
-<seealso><directive module="core">AddDefaultCharset</directive></seealso>
-<seealso><directive module="core">ForceType</directive></seealso>
-<seealso><directive module="core">DefaultType</directive></seealso>
-<seealso><directive module="core">SetHandler</directive></seealso>
-<seealso><directive module="core">SetInputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-
-<section id="multipleext"><title>Files with Multiple Extensions</title>
- <p>Files can have more than one extension, and the order of the
- extensions is <em>normally</em> irrelevant. For example, if the
- file <code>welcome.html.fr</code> maps onto content type
- <code>text/html</code> and language French then the file
- <code>welcome.fr.html</code> will map onto exactly the same information.
- If more than one extension is given which maps onto the same
- type of meta-information, then the one to the right will be
- used, except for languages and content encodings. For example, if
- <code>.gif</code> maps to the MIME-type <code>image/gif</code> and
- <code>.html</code> maps to the MIME-type <code>text/html</code>, then the
- file <code>welcome.gif.html</code> will be associated with the MIME-type
- <code>text/html</code>.</p>
-
- <p><a href="#charset-lang">Languages</a> and <a href="#contentencoding"
- >content encodings</a> are treated accumulative, because one can assign
- more than one language or encoding to a particular ressource. For example,
- the file <code>welcome.html.en.de</code> will be delivered with
- <code>Content-Language: en, de</code> and <code>Content-Type:
- text/html</code>.</p>
-
- <p>Care should be taken when a file with multiple extensions
- gets associated with both a MIME-type and a handler. This will
- usually result in the request being by the module associated
- with the handler. For example, if the <code>.imap</code>
- extension is mapped to the handler <code>imap-file</code> (from
- <module>mod_imap</module>) and the <code>.html</code> extension is
- mapped to the MIME-type <code>text/html</code>, then the file
- <code>world.imap.html</code> will be associated with both the
- <code>imap-file</code> handler and <code>text/html</code> MIME-type.
- When it is processed, the <code>imap-file</code> handler will be used,
- and so it will be treated as a <module>mod_imap</module> imagemap
- file.</p>
-</section>
-
-<section id="contentencoding"><title>Content encoding</title>
- <p>A file of a particular MIME type can additionally be encoded a
- particular way to simplify transmission over the Internet.
- While this usually will refer to compression, such as
- <code>gzip</code>, it can also refer to encryption, such a
- <code>pgp</code> or to an encoding such as UUencoding, which is
- designed for transmitting a binary file in an ASCII (text)
- format.</p>
-
- <p>The <a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1
- RFC</a>, section 14.11 puts it this way:</p>
-
- <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
- <p>The Content-Encoding entity-header field is used as a modifier to
- the media-type. When present, its value indicates what additional
- content codings have been applied to the entity-body, and thus what
- decoding mechanisms must be applied in order to obtain the media-type
- referenced by the Content-Type header field. Content-Encoding is
- primarily used to allow a document to be compressed without losing
- the identity of its underlying media type.</p>
- </blockquote>
-
- <p>By using more than one file extension (see <a
- href="#multipleext">section above about multiple file
- extensions</a>), you can indicate that a file is of a
- particular <em>type</em>, and also has a particular
- <em>encoding</em>. </p>
-
- <p>For example, you may have a file which is a Microsoft Word
- document, which is pkzipped to reduce its size. If the
- <code>.doc</code> extension is associated with the Microsoft
- Word file type, and the <code>.zip</code> extension is
- associated with the pkzip file encoding, then the file
- <code>Resume.doc.zip</code> would be known to be a pkzip'ed Word
- document.</p>
-
- <p>Apache sends a <code>Content-encoding</code> header with the
- resource, in order to tell the client browser about the
- encoding method.</p>
-
- <example>Content-encoding: pkzip</example>
-</section>
-
-<section id="charset-lang"><title>Character sets and languages</title>
- <p>In addition to file type and the file encoding,
- another important piece of information is what language a
- particular document is in, and in what character set the file
- should be displayed. For example, the document might be written
- in the Vietnamese alphabet, or in Cyrillic, and should be
- displayed as such. This information, also, is transmitted in
- HTTP headers.</p>
-
- <p>The character set, language, encoding and mime type are all
- used in the process of content negotiation (See
- <module>mod_negotiation</module>) to determine
- which document to give to the client, when there are
- alternative documents in more than one character set, language,
- encoding or mime type. All filename extensions associations
- created with <directive module="mod_mime">AddCharset</directive>,
- <directive module="mod_mime">AddEncoding</directive>, <directive
- module="mod_mime">AddLanguage</directive> and <directive
- module="mod_mime">AddType</directive> directives
- (and extensions listed in the <directive module="mod_mime_magic"
- >MimeMagicFile</directive>) participate in this select process.
- Filename extensions that are only associated using the <directive
- module="mod_mime">AddHandler</directive>, <directive module="mod_mime"
- >AddInputFilter</directive> or <directive module="mod_mime"
- >AddOutputFilter</directive> directives may be included or excluded
- from matching by using the <directive module="mod_mime"
- >MultiviewsMatch</directive> directive.</p>
-
- <section id="charset"><title>Charset</title>
- <p>To convey this further information, Apache optionally sends
- a <code>Content-Language</code> header, to specify the language
- that the document is in, and can append additional information
- onto the <code>Content-Type</code> header to indicate the
- particular character set that should be used to correctly
- render the information.</p>
-
- <example>
- Content-Language: en, fr<br />
- Content-Type: text/plain; charset=ISO-8859-1
- </example>
-
- <p>The language specification is the two-letter abbreviation
- for the language. The <code>charset</code> is the name of the
- particular character set which should be used.</p>
- </section>
-</section>
-
-<directivesynopsis>
-<name>AddCharset</name>
-<description>Maps the given filename extensions to the specified content
-charset</description>
-<syntax>AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>AddCharset</directive> directive maps the given
- filename extensions to the specified content charset. <var>charset</var>
- is the MIME charset parameter of filenames containing
- <var>extension</var>. This mapping is added to any already in force,
- overriding any mappings that already exist for the same
- <var>extension</var>.</p>
-
- <example><title>Example</title>
- AddLanguage ja .ja<br />
- AddCharset EUC-JP .euc<br />
- AddCharset ISO-2022-JP .jis<br />
- AddCharset SHIFT_JIS .sjis
- </example>
-
- <p>Then the document <code>xxxx.ja.jis</code> will be treated
- as being a Japanese document whose charset is <code>ISO-2022-JP</code>
- (as will the document <code>xxxx.jis.ja</code>). The
- <directive>AddCharset</directive> directive is useful for both to
- inform the client about the character encoding of the document so that
- the document can be interpreted and displayed appropriately, and for <a
- href="../content-negotiation.html">content negotiation</a>,
- where the server returns one from several documents based on
- the client's charset preference.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-<seealso><directive module="core">AddDefaultCharset</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddEncoding</name>
-<description>Maps the given filename extensions to the specified encoding
-type</description>
-<syntax>AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>AddEncoding</directive> directive maps the given
- filename extensions to the specified encoding type. <var>MIME-enc</var>
- is the MIME encoding to use for documents containing the
- <var>extension</var>. This mapping is added to any already in force,
- overriding any mappings that already exist for the same
- <var>extension</var>.</p>
-
- <example><title>Example</title>
- AddEncoding x-gzip .gz<br />
- AddEncoding x-compress .Z
- </example>
-
- <p>This will cause filenames containing the <code>.gz</code> extension
- to be marked as encoded using the <code>x-gzip</code> encoding, and
- filenames containing the <code>.Z</code> extension to be marked as
- encoded with <code>x-compress</code>.</p>
-
- <p>Old clients expect <code>x-gzip</code> and <code>x-compress</code>,
- however the standard dictates that they're equivalent to
- <code>gzip</code> and <code>compress</code> respectively. Apache does
- content encoding comparisons by ignoring any leading <code>x-</code>.
- When responding with an encoding Apache will use whatever form
- (<em>i.e.</em>, <code>x-foo</code> or <code>foo</code>) the
- client requested. If the client didn't specifically request a
- particular form Apache will use the form given by the
- <code>AddEncoding</code> directive. To make this long story
- short, you should always use <code>x-gzip</code> and
- <code>x-compress</code> for these two specific encodings. More
- recent encodings, such as <code>deflate</code> should be
- specified without the <code>x-</code>.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddHandler</name>
-<description>Maps the filename extensions to the specified
-handler</description>
-<syntax>AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>Files having the name <var>extension</var> will be served by the
- specified <var><a href="../handler.html">handler-name</a></var>. This
- mapping is added to any already in force, overriding any mappings that
- already exist for the same <var>extension</var>. For example, to
- activate CGI scripts with the file extension <code>.cgi</code>, you
- might use:</p>
-
- <example>
- AddHandler cgi-script .cgi
- </example>
-
- <p>Once that has been put into your httpd.conf file, any file containing
- the <code>.cgi</code> extension will be treated as a CGI program.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-<seealso><directive module="core">SetHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddInputFilter</name>
-<description>Maps filename extensions to the filters that will process
-client requests</description>
-<syntax>AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>AddInputFilter is only available in Apache 2.0.26 and
-later.</compatibility>
-
-<usage>
- <p><directive>AddInputFilter</directive> maps the filename extension
- <var>extension</var> to the <a href="../filter.html">filters</a> which
- will process client requests and POST input when they are received by
- the server. This is in addition to any filters defined elsewhere,
- including the <directive module="core">SetInputFilter</directive>
- directive. This mapping is merged over any already in force, overriding
- any mappings that already exist for the same <var>extension</var>.</p>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content. Both the filter and <var>extension</var> arguments are
- case-insensitive, and the extension may be specified with or
- without a leading dot.</p>
-</usage>
-<seealso><directive module="mod_mime">RemoveInputFilter</directive></seealso>
-<seealso><directive module="core">SetInputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddLanguage</name>
-<description>Maps the given filename extension to the specified content
-language</description>
-<syntax>AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>AddLanguage</directive> directive maps the given
- filename extension to the specified content language.
- <var>MIME-lang</var> is the MIME language of filenames containing
- <var>extension</var>. This mapping is added to any already in force,
- overriding any mappings that already exist for the same
- <var>extension</var>.</p>
-
- <example><title>Example</title>
- AddEncoding x-compress .Z<br />
- AddLanguage en .en<br />
- AddLanguage fr .fr
- </example>
-
- <p>Then the document <code>xxxx.en.Z</code> will be treated as
- being a compressed English document (as will the document
- <code>xxxx.Z.en</code>). Although the content language is
- reported to the client, the browser is unlikely to use this
- information. The <directive>AddLanguage</directive> directive is
- more useful for <a href="../content-negotiation.html">content
- negotiation</a>, where the server returns one from several documents
- based on the client's language preference.</p>
-
- <p>If multiple language assignments are made for the same
- extension, the last one encountered is the one that is used.
- That is, for the case of:</p>
-
- <example>
- AddLanguage en .en<br />
- AddLanguage en-gb .en<br />
- AddLanguage en-us .en
- </example>
-
- <p>documents with the extension <code>.en</code> would be treated as
- being <code>en-us</code>.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddOutputFilter</name>
-<description>Maps filename extensions to the filters that will process
-responses from the server</description>
-<syntax>AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>AddOutputFilter is only available in Apache 2.0.26 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>AddOutputFilter</directive> directive maps the
- filename extension <var>extension</var> to the <a
- href="../filter.html">filters</a> which will process responses
- from the server before they are sent to the client. This is in
- addition to any filters defined elsewhere, including <directive
- module="core">SetOutputFilter</directive> and <directive module="core"
- >AddOutputFilterByType</directive> directive. This mapping is merged
- over any already in force, overriding any mappings that already exist
- for the same <var>extension</var>.</p>
-
- <p>For example, the following configuration will process all
- <code>.shtml</code> files for server-side includes and will then
- compress the output using <module>mod_deflate</module>.</p>
-
- <example>
- AddOutputFilter INCLUDES;DEFLATE shtml
- </example>
-
- <p>If more than one filter is specified, they must be separated
- by semicolons in the order in which they should process the
- content. Both the <var>filter</var> and <var>extension</var> arguments
- are case-insensitive, and the extension may be specified with or
- without a leading dot.</p>
-</usage>
-<seealso><directive module="mod_mime">RemoveOutputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddType</name>
-<description>Maps the given filename extensions onto the specified content
-type</description>
-<syntax>AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>AddType</directive> directive maps the given filename
- extensions onto the specified content type. <var>MIME-type</var> is the
- MIME type to use for filenames containing <var>extension</var>. This
- mapping is added to any already in force, overriding any mappings that
- already exist for the same <var>extension</var>. This directive can
- be used to add mappings not listed in the MIME types file (see the
- <directive module="mod_mime">TypesConfig</directive> directive).</p>
-
- <example><title>Example</title>
- AddType image/gif .gif
- </example>
-
- <note>
- It is recommended that new MIME types be added using the
- <directive>AddType</directive> directive rather than changing the
- <directive module="mod_mime">TypesConfig</directive> file.
- </note>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-<seealso><directive module="core">DefaultType</directive></seealso>
-<seealso><directive module="core">ForceType</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MultiviewsMatch</name>
-<description>The types of files that will be included when searching for
-a matching file with MultiViews</description>
-<syntax>MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</syntax>
-<default>MultiviewsMatch NegotiatedOnly</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Available in Apache 2.0.26 and later.</compatibility>
-
-<usage>
- <p><directive>MultiviewsMatch</directive> permits three different
- behaviors for <a href="mod_negotiation.html">mod_negotiation</a>'s
- Multiviews feature. Multiviews allows a request for a file,
- <em>e.g.</em> <code>index.html</code>, to match any negotiated
- extensions following the base request, <em>e.g.</em>
- <code>index.html.en</code>, <code>index.html.fr</code>, or
- <code>index.html.gz</code>.</p>
-
- <p>The <code>NegotiatedOnly</code> option provides that every extension
- following the base name must correlate to a recognized
- <module>mod_mime</module> extension for content negotation, <em>e.g.</em>
- Charset, Content-Type, Language, or Encoding. This is the strictest
- implementation with the fewest unexpected side effects, and is the
- default behavior.</p>
-
- <p>To include extensions associated with Handlers and/or Filters,
- set the <directive>MultiviewsMatch</directive> directive to either
- <code>Handlers</code>, <code>Filters</code>, or both option keywords.
- If all other factors are equal, the smallest file will be served,
- <em>e.g.</em> in deciding between <code>index.html.cgi</code> of 500
- bytes and <code>index.html.pl</code> of 1000 bytes, the <code>.cgi</code>
- file would win in this example. Users of <code>.asis</code> files
- might prefer to use the Handler option, if <code>.asis</code> files are
- associated with the <code>asis-handler</code>.</p>
-
- <p>You may finally allow <code>Any</code> extensions to match, even if
- <module>mod_mime</module> doesn't recognize the extension. This was the
- behavior in Apache 1.3, and can cause unpredicatable results, such as
- serving .old or .bak files the webmaster never expected to be served.</p>
-
- <p>For example, the following configuration will allow handlers
- and filters to participate in Multviews, but will exclude unknown
- files:</p>
-
- <example>
- MultiviewsMatch Handlers Filters
- </example>
-</usage>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultLanguage</name>
-<description>Sets all files in the given scope to the specified
-language</description>
-<syntax>DefaultLanguage <var>MIME-lang</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>DefaultLanguage</directive> directive tells Apache
- that all files in the directive's scope (<em>e.g.</em>, all files
- covered by the current <directive module="core" type="section"
- >Directory</directive> container) that don't have an explicit language
- extension (such as <code>.fr</code> or <code>.de</code> as configured
- by <directive module="mod_mime">AddLanguage</directive>) should be
- considered to be in the specified <var>MIME-lang</var> language. This
- allows entire directories to be marked as containing Dutch content, for
- instance, without having to rename each file. Note that unlike using
- extensions to specify languages, <directive>DefaultLanguage</directive>
- can only specify a single language.</p>
-
- <p>If no <directive>DefaultLanguage</directive> directive is in force,
- and a file does not have any language extensions as configured
- by <directive module="mod_mime">AddLanguage</directive>, then that file
- will be considered to have no language attribute.</p>
-
- <example><title>Example</title>
- DefaultLanguage en
- </example>
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ModMimeUsePathInfo</name>
-<description>Tells <module>mod_mime</module> to treat <code>path_info</code>
-components as part of the filename</description>
-<syntax>ModMimeUsePathInfo On|Off</syntax>
-<default>ModMimeUsePathInfo Off</default>
-<contextlist><context>directory</context></contextlist>
-<compatibility>Available in Apache 2.0.41 and later</compatibility>
-
-<usage>
- <p>The <directive>ModMimeUsePathInfo</directive> directive is used to
- combine the filename with the <code>path_info</code> URL component to
- apply <module>mod_mime</module>'s directives to the request. The default
- value is <code>Off</code> - therefore, the <code>path_info</code>
- component is ignored.</p>
-
- <p>This directive is recommended when you have a virtual filesystem.</p>
-
- <example><title>Example</title>
- ModMimeUsePathInfo On
- </example>
-
- <p>If you have a request for <code>/bar/foo.shtml</code> where
- <code>/bar</code> is a Location and <directive
- >ModMimeUsePathInfo</directive> is <code>On</code>,
- <module>mod_mime</module> will treat the incoming request as
- <code>/bar/foo.shtml</code> and directives like <code>AddOutputFilter
- INCLUDES .shtml</code> will add the <code>INCLUDES</code> filter to the
- request. If <directive>ModMimeUsePathInfo</directive> is not set, the
- <code>INCLUDES</code> filter will not be added.</p>
-</usage>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveCharset</name>
-<description>Removes any character set associations for a set of file
-extensions</description>
-<syntax>RemoveCharset <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>RemoveCharset is only available in Apache 2.0.24 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>RemoveCharset</directive> directive removes any
- character set associations for files with the given extensions.
- This allows <code>.htaccess</code> files in subdirectories to
- undo any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
- <example><title>Example</title>
- RemoveCharset .html .shtml
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveEncoding</name>
-<description>Removes any content encoding associations for a set of file
-extensions</description>
-<syntax>RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>RemoveEncoding</directive> directive removes any
- encoding associations for files with the given extensions. This
- allows <code>.htaccess</code> files in subdirectories to undo
- any associations inherited from parent directories or the
- server config files. An example of its use might be:</p>
-
- <example><title>/foo/.htaccess:</title>
- AddEncoding x-gzip .gz<br />
- AddType text/plain .asc<br />
- &lt;Files *.gz.asc&gt;<br />
- <indent>
- RemoveEncoding .gz<br />
- </indent>
- &lt;/Files&gt;
- </example>
-
- <p>This will cause <code>foo.gz</code> to be marked as being
- encoded with the gzip method, but <code>foo.gz.asc</code> as an
- unencoded plaintext file.</p>
-
- <note><title>Note</title>
- <p><directive>RemoveEncoding</directive> directives are processed
- <em>after</em> any <directive module="mod_mime">AddEncoding</directive>
- directives, so it is possible they may undo the effects of the latter
- if both occur within the same directory configuration.</p>
- </note>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveHandler</name>
-<description>Removes any handler associations for a set of file
-extensions</description>
-<syntax>RemoveHandler <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>RemoveHandler</directive> directive removes any
- handler associations for files with the given extensions. This allows
- <code>.htaccess</code> files in subdirectories to undo any
- associations inherited from parent directories or the server
- config files. An example of its use might be:</p>
-
- <example><title>/foo/.htaccess:</title>
- AddHandler server-parsed .html
- </example>
-
- <example><title>/foo/bar/.htaccess:</title>
- RemoveHandler .html
- </example>
-
- <p>This has the effect of returning <code>.html</code> files in
- the <code>/foo/bar</code> directory to being treated as normal
- files, rather than as candidates for parsing (see the <module
- >mod_include</module> module).</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveInputFilter</name>
-<description>Removes any input filter associations for a set of file
-extensions</description>
-<syntax>RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>RemoveInputFilter is only available in Apache 2.0.26 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>RemoveInputFilter</directive> directive removes any
- input filter associations for files with the given extensions.
- This allows <code>.htaccess</code> files in subdirectories to
- undo any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-<seealso><directive module="mod_mime">AddInputFilter</directive></seealso>
-<seealso><directive module="core">SetInputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveLanguage</name>
-<description>Removes any language associations for a set of file
-extensions</description>
-<syntax>RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>RemoveLanguage is only available in Apache 2.0.24 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>RemoveLanguage</directive> directive removes any
- language associations for files with the given extensions. This
- allows <code>.htaccess</code> files in subdirectories to undo
- any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveOutputFilter</name>
-<description>Removes any output filter associations for a set of file
-extensions</description>
-<syntax>RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>RemoveOutputFilter is only available in Apache 2.0.26 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>RemoveOutputFilter</directive> directive removes any
- output filter associations for files with the given extensions.
- This allows <code>.htaccess</code> files in subdirectories to
- undo any associations inherited from parent directories or the
- server config files.</p>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-
- <example><title>Example</title>
- RemoveOutputFilter shtml
- </example>
-</usage>
-<seealso><directive module="mod_mime">AddOutputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveType</name>
-<description>Removes any content type associations for a set of file
-extensions</description>
-<syntax>RemoveType <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>RemoveType</directive> directive removes any MIME
- type associations for files with the given extensions. This allows
- <code>.htaccess</code> files in subdirectories to undo any
- associations inherited from parent directories or the server
- config files. An example of its use might be:</p>
-
- <example><title>/foo/.htaccess:</title>
- RemoveType .cgi
- </example>
-
- <p>This will remove any special handling of <code>.cgi</code>
- files in the <code>/foo/</code> directory and any beneath it,
- causing the files to be treated as being of the <directive
- module="core">DefaultType</directive>.</p>
-
- <note><title>Note</title>
- <p><directive>RemoveType</directive> directives are processed
- <em>after</em> any <directive module="mod_mime">AddType</directive>
- directives, so it is possible they may undo the effects of the
- latter if both occur within the same directory configuration.</p>
- </note>
-
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TypesConfig</name>
-<description>The location of the <code>mime.types</code> file</description>
-<syntax>TypesConfig <var>file-path</var></syntax>
-<default>TypesConfig conf/mime.types</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>TypesConfig</directive> directive sets the location
- of the MIME types configuration file. <var>File-path</var> is relative
- to the <directive module="core">ServerRoot</directive>. This file sets
- the default list of mappings from filename extensions to content
- types. Most administrators use the provided <code>mime.types</code>
- file, which associates common filename extensions with IANA registered
- content types. The current list is maintained at <a href=
- "http://www.isi.edu/in-notes/iana/assignments/media-types/media-types"
- >http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</a>.
- This simplifies the <code>httpd.conf</code> file by providing the
- majority of media-type definitions, and may be overridden by
- <directive module="mod_mime">AddType</directive> directives as
- needed. You should not edit the <code>mime.types</code> file, because
- it may be replaced when you upgrade your server.</p>
-
- <p>The file contains lines in the format of the arguments to
- an <directive module="mod_mime">AddType</directive> directive:</p>
-
- <example>
- <var>MIME-type</var> [<var>extension</var>] ...
- </example>
-
- <p>The case of the extension does not matter. Blank lines, and lines
- beginning with a hash character (<code>#</code>) are ignored.</p>
-
- <note>
- Please do <strong>not</strong> send requests to the Apache HTTP
- Server Project to add any new entries in the distributed
- <code>mime.types</code> file unless (1) they are already
- registered with IANA, and (2) they use widely accepted,
- non-conflicting filename extensions across platforms.
- <code>category/x-subtype</code> requests will be automatically
- rejected, as will any new two-letter extensions as they will
- likely conflict later with the already crowded language and
- character set namespace.
- </note>
-</usage>
-<seealso><module>mod_mime_magic</module></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_mime.xml.ja b/docs/manual/mod/mod_mime.xml.ja
deleted file mode 100644
index 873696f60e..0000000000
--- a/docs/manual/mod/mod_mime.xml.ja
+++ /dev/null
@@ -1,888 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.27 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_mime.xml.meta">
-
-<name>mod_mime</name>
-<description>$B%j%/%(%9%H$5$l$?%U%!%$%k$N3HD%;R$H%U%!%$%k$N?6$kIq$$(B
- ($B%O%s%I%i$H%U%#%k%?(B)$B!"FbMF(B (MIME $B%?%$%W!"8@8l!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0(B)
- $B$H$r4XO"IU$1$k(B</description>
-<status>$B%Y!<%9(B</status>
-<sourcefile>mod_mime.c</sourcefile>
-<identifier>mime_module</identifier>
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$O3HD%;R$r;H$C$F$$$m$$$m$J!V%a%?>pJs!W$r%U%!%$%k$K(B
- $B4XO"IU$1$k$?$a$K;HMQ$5$l$^$9!#$3$N>pJs$O%I%-%e%a%s%H$N%U%!%$%kL>$H(B
- MIME $B%?%$%W!"8@8l!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0$H$r4XO"IU$1$^$9!#(B
- $B$3$N>pJs$O%V%i%&%6$KAw$i$l$^$9$7!"J#?t$N%U%!%$%k$NCf$+$i%f!<%6$N9%$_$N(B
- $B$b$N$,A*$P$l$k$h$&$K!"%3%s%F%s%H%M%4%7%(!<%7%g%s$G$b;H$o$l$^$9!#(B
- <a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>
- $B$K4X$9$k>\$7$$>pJs$O(B <module>mod_negotiation</module>
- $B$r$4Mw2<$5$$!#(B</p>
-
- <p><directive module="mod_mime">AddCharset</directive> $B%G%#%l%/%F%#%V!"(B
- <directive module="mod_mime">AddEncoding</directive> $B%G%#%l%/%F%#%V!"(B
- <directive module="mod_mime">AddHandler</directive> $B%G%#%l%/%F%#%V!"(B
- <directive module="mod_mime">AddLanguage</directive> $B%G%#%l%/%F%#%V!"(B
- <directive module="mod_mime">AddType</directive> $B%G%#%l%/%F%#%V$O$9$Y$F!"(B
- $B%U%!%$%k$N3HD%;R$r%a%?>pJs$K%^%C%W$9$k$?$a$K;HMQ$5$l$^$9!#(B
- $B$=$l$>$l!"%I%-%e%a%s%H$NJ8;z%;%C%H(B ($BLuCm(B: charset)$B!"(Bcontent-encoding,
- content-language, MIME $B%?%$%W(B (content-type) $B$r@_Dj$7$^$9!#(B
- <directive module="mod_mime">TypesConfig</directive> $B%G%#%l%/%F%#%V$O3HD%;R$r(B
- MIME $B%?%$%W$K%^%C%W$9$k%U%!%$%k$r;XDj$9$k$?$a$K;HMQ$5$l$^$9!#(B</p>
-
- <p>$B$5$i$K!"(B<module>mod_mime</module> $B$O%3%s%F%s%D$r:n@.!"=hM}$9$k(B
- <a href="../handler.html">$B%O%s%I%i(B</a> $B$H(B <a href="../filter.html">$B%U%#%k%?(B</a>
- $B$r@_Dj$9$k$3$H$,$G$-$^$9!#(B<directive
- module="mod_mime">AddHandler</directive> $B%G%#%l%/%F%#%V!"(B<directive
- module="mod_mime">AddOutputFilter</directive> $B%G%#%l%/%F%#%V!"(B<directive
- module="mod_mime">AddInputFilter</directive> $B%G%#%l%/%F%#%V$O(B
- $B%I%-%e%a%s%H$r07$&%b%8%e!<%k$d%9%/%j%W%H$r@)8f$7$^$9!#(B
- <directive module="mod_mime">MultiviewsMatch</directive> $B%G%#%l%/%F%#%V$O(B
- $B$3$l$i$N%G%#%l%/%F%#%V$,;XDj$7$?%U%!%$%k$N3HD%;R$r(B
- <module>mod_negotiation</module> $B$,(B Multiviews $B$N%^%C%A$r$H$k$H$-$K(B
- $B9MN8$9$k$h$&$K$G$-$^$9!#(B</p>
-
- <p><module>mod_mime</module> $B$O%a%?>pJs$r%U%!%$%kL>$H4XO"IU$1$^$9$,!"(B
- <module>core</module> $B%5!<%P$K$O$"$k%3%s%F%J(B
- (<em>$B$?$H$($P(B</em>, <directive type="section"
- module="core">Location</directive>, <directive type="section"
- module="core">Directory</directive>, <directive type="section"
- module="core">Files</directive>) $B$NCf$N$9$Y$F$N%U%!%$%k$rFCDj$N(B
- $B%a%?>pJs$H4XO"IU$1$k%G%#%l%/%F%#%V$,$"$j$^$9!#$3$l$i$N%G%#%l%/%F%#%V$K$O(B
- <directive
- module="core">ForceType</directive>, <directive
- module="core">SetHandler</directive>, <directive
- module="core">SetInputFilter</directive>, <directive
- module="core">SetOutputFilter</directive> $B$,$"$j$^$9!#(B
- $B%3%"$N%G%#%l%/%F%#%V$O(B <module>mod_mime</module> $B$K$h$jDj5A$5$l$?(B
- $B%U%!%$%kL>$N3HD%;R$N%^%C%T%s%0$9$Y$F$r>e=q$-$7$^$9!#(B</p>
-
- <p>$B%U%!%$%k$N%a%?>pJs$rJQ$($F$b(B <code>Last-Modified</code>
- $B%X%C%@$NCM$OJQ$o$i$J$$$3$H$KCm0U$7$F$/$@$5$$!#$G$9$+$i!"(B
- $B$=$l$i$rJQ99$7$?>l9g$O!"%/%i%$%"%s%H$d%W%m%-%7$G0JA0$K%-%c%C%7%e$5$l$?(B
- $B%3%T!<$,$=$N$H$-$N%X%C%@$H$H$b$K;H$o$l$k2DG=@-$,$"$j$^$9!#(B
- $B%a%?>pJs(B ($B8@8l!"%3%s%F%s%H%?%$%W!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0(B) $B$r(B
- $BJQ99$7$?$H$-$O!"$9$Y$F$NK,Ld<T$,@5$7$$%3%s%F%s%H%X%C%@$r(B
- $B<u$1<h$k$h$&$K!"1F6A$r<u$1$k%U%!%$%k$K(B 'touch' $B%3%^%s%I$r<B9T$9$k(B
- ($B:G=*99?7F|$r99?7$9$k(B) $BI,MW$,$"$k$+$b$7$l$^$;$s!#(B</p>
-</summary>
-
-<seealso><directive
-module="mod_mime_magic">MimeMagicFile</directive></seealso>
-<seealso><directive module="core">AddDefaultCharset</directive></seealso>
-<seealso><directive module="core">ForceType</directive></seealso>
-<seealso><directive module="core">DefaultType</directive></seealso>
-<seealso><directive module="core">SetHandler</directive></seealso>
-<seealso><directive module="core">SetInputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-
-<section id="multipleext"><title>$BJ#?t$N3HD%;R$N$"$k%U%!%$%k(B</title>
- <p>$B%U%!%$%k$OJ#?t$N3HD%;R$r;}$D$3$H$,$G$-!"3HD%;R$N=gHV$O(B<em
- >$BDL>o$O(B</em>$B4X78$"$j$^$;$s!#Nc$($P!"%U%!%$%k(B <code>welcome.html.fr</code>
- $B$,%3%s%F%s%H%?%$%W$O(B <code>text/html</code>
- $B$K!"8@8l$O%U%i%s%98l$K%^%C%W$5$l$k>l9g!"(B<code>welcome.fr.html</code>
- $B$b$^$C$?$/F1$8>pJs$K%^%C%W$5$l$^$9!#(B
- $BF1$8%a%?>pJs$K%^%C%W$5$l$k3HD%;R$,J#?t$"$k$H$-$K$O!"8@8l$H(B
- $B%3%s%F%s%H%(%s%3!<%G%#%s%0$r=|$$$F!"(B
- $B1&B&$K$"$k$b$N$,;HMQ$5$l$^$9!#$?$H$($P!"(B<code>.gif</code> $B$,(B MIME
- $B%?%$%W(B <code>image/gif</code> $B$K%^%C%W$5$l!"(B<code>.html</code>
- $B$,(B MIME $B%?%$%W(B <code>text/html</code>
- $B$K%^%C%W$5$l$k>l9g$O!"%U%!%$%k(B <code>welcome.gif.html</code> $B$O(B
- MIME $B%?%$%W(B <code>text/html</code> $B$K4XO"IU$1$i$l$^$9!#(B</p>
-
- <p>$B%j%=!<%9$KJ#?t$N8@8l$d%(%s%3!<%G%#%s%0$r4XO"IU$1$k$3$H(B
- $B$,$G$-$k$?$a!"(B
- <a href="#charset-lang">$B8@8l(B</a>$B$H(B<a href="#contentencoding"
- >$B%3%s%F%s%H%(%s%3!<%G%#%s%0(B</a>$B$OA0$N$b$N$KDI2C$5$l$F$$$-$^$9!#(B
- $B$?$H$($P!"%U%!%$%k(B <code>welcome.html.en.de</code> $B$O(B
- <code>Content-Language: en, de</code> $B$H(B <code>Content-Type:
- text/html</code> $B$H$7$FAw?.$5$l$^$9!#(B</p>
-
- <p>$BJ#?t$N3HD%;R$N$"$k%U%!%$%k$,(B MIME
- $B%?%$%W$H%O%s%I%i$NN>J}$K4XO"IU$1$i$l$F$$$k$H$-$OCm0U$9$kI,MW$,$"$j$^$9!#(B
- $B$=$N>l9g!"IaDL$O%j%/%(%9%H$,%O%s%I%i$K4XO"IU$1$i$l$?(B
- $B%b%8%e!<%k$K$h$C$F07$o$l$k$3$H$K$J$j$^$9!#$?$H$($P!"3HD%;R(B
- <code>.imap</code> $B$,(B (mod_imap $B$N(B) <code>imap-file</code>
- $B$K%^%C%W$5$l$F$$$F!"(B<code>.html</code> $B$,(B MIME $B%?%$%W(B <code>text/html</code>
- $B$K%^%C%W$5$l$F$$$k$H$-$O!"%U%!%$%k(B <code>world.imap.html</code> $B$O(B
- <code>imap-file</code> $B%O%s%I%i$H(B <code>text/html</code> MIME
- $B%?%$%W$K4XO"IU$1$i$l$^$9!#%U%!%$%k$,=hM}$5$l$k$H$-$O(B <code>imap-file</code>
- $B%O%s%I%i$,;HMQ$5$l$^$9$N$G!"$=$N%U%!%$%k$O(B <module>mod_imap</module>
- $B$N%$%a!<%8%^%C%W%U%!%$%k$H$7$F07$o$l$k$3$H$K$J$j$^$9!#(B</p>
-</section>
-
-<section id="contentencoding"><title>$B%3%s%F%s%H%(%s%3!<%G%#%s%0(B</title>
- <p>$BFCDj$N(B MIME $B%?%$%W$N%U%!%$%k$O%$%s%?!<%M%C%H$G$NE>Aw$r4JC1$K$9$k$?$a$K!"(B
- $B$5$i$KId9f2=$9$k$3$H$,$G$-$^$9!#$3$l$ODL>o$O(B <code>gzip</code> $B$N(B
- $B$h$&$J05=L$N$3$H$r;X$7$^$9$,!"(B<code>pgp</code> $B$N$h$&$J0E9f2=$d!"(B
- $B%P%$%J%j%U%!%$%k$r(B ASCII ($B%F%-%9%H(B) $B7A<0$GAw$k$?$a$K9M0F$5$l$?(B
- UUencoding $B$N$3$H$r;X$9$3$H$b$"$j$^$9!#(B</p>
-
- <p><a href="http://www.ietf.org/rfc/rfc2616.txt">HTTP/1.1 RFC</a>
- 14.11 $B@a$G$O<!$N$h$&$K5-=R$5$l$F$$$^$9!#(B</p>
-
- <blockquote cite="http://www.ietf.org/rfc/rfc2616.txt">
- <p>Content-Encoding $B%(%s%F%#%F%#%X%C%@%U%#!<%k%I$O%a%G%#%"%?%$%W$N(B
- $B=$>~;R$H$7$F;H$o$l$^$9!#$=$l$,B8:_$7$F$$$l$P!"CM$O%(%s%F%#%F%#%\%G%#$K(B
- $B$I$NDI2C$NId9f2=$,E,MQ$5$l$?$+$r<($7!"(BContent-Type $B%X%C%@%U%#!<%k%I$K(B
- $B=q$+$l$F$$$k%a%G%#%"%?%$%W$rF@$k$?$a$K$I$NI|9f5!9=$rE,MQ$9$Y$-$+!"$b(B
- $B<($7$F$$$k$3$H$K$J$j$^$9!#(BContent-Encoding $B$O<g$K!"85$N%a%G%#%"%?%$%W$N(B
- $BF10l@-$r<:$&$3$H$J$/%I%-%e%a%s%H$r05=L$9$k$3$H$r2DG=$K$9$k$?$a$K(B
- $B;HMQ$5$l$^$9!#(B</p>
- </blockquote>
-
- <p>$BJ#?t$N%U%!%$%k3HD%;R(B ($BJ#?t$N3HD%;R$K$D$$$F$O(B <a
- href="#multipleext">$B>e$N@a(B</a> $B$r;2>H(B) $B;H$&$3$H$G!"(B
- $B%U%!%$%k$N(B<em>$B%?%$%W(B</em>$B$d(B<em>$B%(%s%3!<%G%#%s%0(B</em>$B$r;XDj$9$k$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
- <p>$B$?$H$($P!"(BMicrosoft Word $B$N%I%-%e%a%s%H$,$"$j!"%5%$%:$r>.$5$/$9$k$?$a$K(B
- pkzip $B$5$l$F$$$k$H$7$^$9!#(B<code>.doc</code> $B3HD%;R$,(B Microsoft Word $B$N(B
- $B%U%!%$%k%?%$%W$H4XO"IU$1$i$l$F$$$F!"(B<code>.zip</code> $B3HD%;R$,(B
- pkzip $B%U%!%$%k%(%s%3!<%G%#%s%0$H4XO"IU$1$i$l$F$$$k$H!"%U%!%$%k(B
- <code>Resume.doc.zip</code> $B$O(B pkzip $B$5$l$?(B Word $B%I%-%e%a%s%H$G$"$k(B
- $B$H$$$&$3$H$,$o$+$j$^$9!#(B</p>
-
- <p>$B%/%i%$%"%s%H$N%V%i%&%6$K%(%s%3!<%G%#%s%0J}K!$rCN$i$;$k$?$a$K!"(B
- Apache $B$O%j%=!<%9$H6&$K(B <code>Content-Encoding</code> $B%X%C%@$r(B
- $BAw$j$^$9!#(B</p>
-
- <example>Content-encoding: pkzip</example>
-</section>
-
-<section id="charset-lang"><title>$BJ8;z%;%C%H$H8@8l(B</title>
- <p>$B%U%!%$%k%?%$%W$H%U%!%$%k%(%s%3!<%G%#%s%0$NB>$K=EMW$J>pJs$O(B
- $B%I%-%e%a%s%H$N=q$+$l$F$$$k8@8l$H!"$I$NJ8;z%;%C%H$G%U%!%$%k$,I=<((B
- $B$5$l$k$Y$-$+!"$H$$$&$b$N$G$9!#$?$H$($P!"%I%-%e%a%s%H$O%Y%H%J%`$N(B
- $B%"%k%U%!%Y%C%H$d%-%j%kJ8;z$G=q$+$l$F$$$F!"$=$N$h$&$KI=<($5$l$k(B
- $BI,MW$,$"$k$+$b$7$l$^$;$s!#$3$N>pJs$b$^$?!"(BHTTP $B%X%C%@$G(B
- $BAw?.$5$l$^$9!#(B</p>
-
- <p>$BJ8;z%;%C%H!"8@8l!"%(%s%3!<%G%#%s%0!"(Bmime $B%?%$%W$O$9$Y$F(B
- $B%3%s%F%s%H%M%4%7%(!<%7%g%s(B (<module>mod_negotiation</module> $B;2>H(B)
- $B$N:GCf$K!"J#?t$NJ8;z%;%C%H!"8@8l!"%(%s%3!<%G%#%s%0!"(BMIME $B%?%$%W$+$i$J$k(B
- $BBeBXJ*$,$"$k$H$-$K$I$N%I%-%e%a%s%H$r%/%i%$%"%s%H$KAw$k$N$+$r(B
- $B7hDj$9$k$H$-$K;H$o$l$^$9!#(B<directive module="mod_mime">AddCharset</directive>,
- <directive module="mod_mime">AddEncoding</directive>, <directive
- module="mod_mime">AddLanguage</directive>,
- <directive module="mod_mime">AddType</directive> $B$N3F%G%#%l%/%F%#%V$G:n@.$5$l$?(B
- $B3HD%;R$N4XO"IU$1(B ($B$H(B <directive module="mod_mime_magic"
- >MimeMagicFile</directive> $B$G%j%9%H$5$l$F$$$k(B
- $B3HD%;R(B) $B$,$3$NA*Br$K;22C$7$^$9!#(B<directive module="mod_mime"
- >AddHandler</directive>,
- <directive module="mod_mime">AddInputFilter</directive>,
- <directive module="mod_mime">AddOutputFilter</directive> $B$N(B
- $B3F%G%#%l%/%F%#%V$G$N$_4XO"IU$1$i$l$F$$$k3HD%;R$O(B
- <directive module="mod_mime">MultiviewsMatch</directive> $B%G%#%l%/%F%#%V$r(B
- $B;H$&$3$H$G%^%C%A$N(B
- $B=hM}$K4^$a$k$3$H$b30$9$3$H$b$G$-$^$9!#(B</p>
-
- <section id="charset"><title>Charset</title>
- <p>$B$5$i$K>pJs$rEA$($k$?$a$K!"(BApache $B$OJ8=q$N8@8l$r(B
- <code>Content-Language</code> $B%X%C%@$GAw$k$3$H$b$"$j$^$9!#(B
- $B$^$?!">pJs$r@5$7$/I=<($9$k$?$a$K;HMQ$9$Y$-J8;z%;%C%H$r<($9$?$a$K(B
- <code>Conten-Type</code> $B%X%C%@$K>pJs$rDI2C$9$k$3$H$b$"$j$^$9!#(B</p>
-
- <example>
- Content-Language: en, fr<br />
- Content-Type: text/plain; charset=ISO-8859-1
- </example>
-
- <p>$B8@8l$N;XDj$OFsJ8;z$NC;=L7A$G9T$J$o$l$^$9!#(B<code>charset</code> $B$,(B
- $B;HMQ$9$Y$-J8;z%;%C%H$NL>A0$G$9!#(B</p>
- </section>
-</section>
-
-<directivesynopsis>
-<name>AddCharset</name>
-<description>$B%U%!%$%kL>$N3HD%;R$r;XDj$5$l$?J8;z%;%C%H$K%^%C%W$9$k(B</description>
-<syntax>AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>AddCharset</directive> $B%G%#%l%/%F%#%V$O!"(B
- $BM?$($i$l$?3HD%;R$r;XDj$5$l$?(B charset $B$K%^%C%W$7$^$9!#(B<var>charset</var>
- $B$O!"3HD%;R(B <var>extension</var> $B$r4^$s$G$$$k%U%!%$%kL>$N(B MIME charset
- $B%Q%i%a!<%?$G$9!#?7$7$$%^%C%T%s%0$O4{$K$"$kB>$N%^%C%T%s%0$KDI2C$5$l!"F1$83HD%;R(B
- <var>extension</var> $B$N$?$a$N%^%C%T%s%0$r>e=q$-$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddLanguage ja .ja<br />
- AddCharset EUC-JP .euc<br />
- AddCharset ISO-2022-JP .jis<br />
- AddCharset SHIFT_JIS .sjis
- </example>
-
- <p>$B$3$N>l9g!"%I%-%e%a%s%H(B <code>xxxx.ja.jis</code> $B$O(B charset $B$,(B
- <code>ISO-2022-JP</code> $B$NF|K\8l$N%I%-%e%a%s%H$H$7$F07$o$l$^$9(B
- (<code>xxxx.jis.ja</code> $B$bF1MM(B)$B!#(B<directive>AddCharset</directive>
- $B%G%#%l%/%F%#%V$O!"%I%-%e%a%s%H$,E,@Z$K2r<a$5$lI=<($5$l$k$h$&$K!"(B
- $B%I%-%e%a%s%H$N(B charset $B$N>pJs$r%/%i%$%"%s%H$K65$($k$?$a$KLr$KN)$A$^$9!#(B
- $B$^$?!"%5!<%P$,%/%i%$%"%s%H$N(B charset
- $B$NM%@hEY$K4p$E$$$FJ#?t$N%I%-%e%a%s%H$NCf$+$i%I%-%e%a%s%H$rA*$V(B<a
- href="../content-negotiation.html"
- >$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>$B$N$?$a$K$bLr$KN)$A$^$9!#(B</p>
-
- <p>$B0z?t(B <var>extension</var>$B$OBgJ8;z>.J8;z$r6hJL$;$:!"(B
- $B:G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-<seealso><directive module="core">AddDefaultCharset</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddEncoding</name>
-<description>$B%U%!%$%kL>$N3HD%;R$r;XDj$5$l$?%(%s%3!<%G%#%s%0(B
-$B$K%^%C%W$9$k(B</description>
-<syntax>AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>AddEncoding</directive> $B%G%#%l%/%F%#%V$O!"(B
- $BM?$($i$l$?3HD%;R$r;XDj$5$l$?%(%s%3!<%G%#%s%0$K%^%C%W$7$^$9!#(B
- <var>MIME-enc</var> $B$O!"3HD%;R(B <var>extension</var>
- $B$r4^$s$@%I%-%e%a%s%H$K;HMQ$9$k(B MIME $B%(%s%3!<%G%#%s%0$G$9!#(B
- $B$3$N?7$7$$%^%C%T%s%0$O4{$K$"$kB>$N%^%C%T%s%0$KDI2C$5$l!"(B
- $BF1$83HD%;R(B <var>extension</var> $B$N$?$a$N%^%C%T%s%0$r>e=q$-$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- <code>AddEncoding x-gzip .gz<br />
- AddEncoding x-compress .Z</code>
- </example>
-
- <p>$B$3$l$O!"3HD%;R(B <code>.gz</code> $B$r4^$`%U%!%$%kL>$,(B <code>x-gzip</code>
- $B%(%s%3!<%G%#%s%0$r;H$C$F%(%s%3!<%I$5$l$F$$$k$3$H$H!"3HD%;R(B <code>.Z</code>
- $B$r4^$`%U%!%$%kL>$,(B <code>x-compress</code>
- $B$G%(%s%3!<%I$5$l$F$$$k$3$H$r;XDj$7$^$9!#(B</p>
-
- <p>$B8E$$%/%i%$%"%s%H$O(B <code>x-zip</code> $B$H(B <code>x-compress</code>
- $B$,JV$C$F$/$k$3$H$r4|BT$7$^$9$,!"I8=`5,3J$G$O$=$l$>$l(B
- <code>gzip</code> $B$H(B <code>compress</code>
- $B$HEy2A$G$"$k$3$H$K$J$C$F$$$^$9!#(BApache
- $B$O!"%3%s%F%s%H%(%s%3!<%G%#%s%0$NHf3S$r$9$k$H$-$K$O!"@hF,$K$"$k(B
- <code>x-</code> $B$rL5;k$7$^$9!#(BApache
- $B$,%(%s%3!<%G%#%s%0IU$-$G1~Ez$rJV$9$H$-$O!"%/%i%$%"%s%H$,MW5a$7$?7A<0(B
- (<em>$B$9$J$o$A(B</em>$B!"(B<code>x-foo</code> $B$d(B <code>foo</code>)
- $B$r;HMQ$7$^$9!#MW$9$k$K!"$3$NFs$D$N%(%s%3!<%G%#%s%0$N>l9g$O>o$K(B
- <code>x-gzip</code> $B$H(B <code>x-compress</code>
- $B$r;H$&$Y$-$G$"$k!"$H$$$&$3$H$G$9!#(B<code>deflate</code>
- $B$N$h$&$J$h$j?7$7$$%(%s%3!<%G%#%s%0$G$O!"(B<code>x-</code>
- $B$J$7$G;XDj$7$F$/$@$5$$!#(B
- </p>
-
- <p>$B0z?t(B <var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$;$:!"(B
- $B:G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddHandler</name>
-<description>$B%U%!%$%kL>$N3HD%;R$r;XDj$5$l$?%O%s%I%i$K%^%C%W$9$k(B</description>
-<syntax>AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>$B3HD%;R(B <var>extension</var> $B$,L>A0$K$"$k%U%!%$%k$O;XDj$5$l$?(B <a
- href="../handler.html">handler-name</a> $B$K07$o$l$^$9!#(B
- $B$3$N?7$7$$%^%C%T%s%0$O4{$K$"$kB>$N%^%C%T%s%0$KDI2C$5$l!"(B
- $BF1$83HD%;R(B <var>extension</var>
- $B$N$?$a$N%^%C%T%s%0$r>e=q$-$7$^$9!#$?$H$($P!"3HD%;R(B
- "<code>.cgi</code>" $B$G=*$o$k%U%!%$%k$r(B CGI
- $B%9%/%j%W%H$H$7$F07$$$?$$$H$-$O!"0J2<$N@_Dj$r$7$^$9!#(B</p>
-
- <example>
- AddHandler cgi-script .cgi
- </example>
-
- <p>$B$3$l$r(B httpd.conf $B%U%!%$%k$K5-=R$9$k$3$H$G!"3HD%;R(B
- "<code>.cgi</code>" $B$N%U%!%$%k$O(B CGI $B%W%m%0%i%`$H$7$F07$o$l$^$9!#(B
- </p>
-
- <p>$B0z?t(B <var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$;$:!"(B
- $B:G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><directive module="core">SetHandler</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddInputFilter</name>
-<description>$B%U%!%$%k$N3HD%;R$r%/%i%$%"%s%H$N%j%/%(%9%H$r=hM}$9$k(B
- $B%U%#%k%?$K%^%C%W$9$k(B</description>
-<syntax>AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.26 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>AddInputFilter</directive> $B$O%U%!%$%k$N3HD%;R(B
- <var>extension</var> $B$r%/%i%$%"%s%H$N%j%/%(%9%H$d(B POST $B$,%5!<%P$KMh$?$H$-$K(B
- $B=hM}$r$9$k(B<a href="../filter.html">$B%U%#%k%?(B</a>$B$K%^%C%W$7$^$9!#(B
- $B$3$l$O!"(B<directive module="core">SetInputFilter</directive> $B%G%#%l%/%F%#%V$b(B
- $B4^$a!"B>$N>l=j$GDj5A$5$l$F$$$k%U%#%k%?$K2C$($i$l$^$9!#(B
- $B$3$N%^%C%T%s%0$O$9$G$K$"$k$b$N$h$jM%@h$5$l$F%^!<%8$5$l!"(B
- $BF1$8(B <var>extension</var> $B$KBP$9$k4{B8$N%^%C%T%s%0$r>e=q$-$7$^$9!#(B</p>
-
- <p>$BJ#?t$N%U%#%k%?$r;XDj$9$k$H$-$O!"%G!<%?$r=hM}$9$k=gHV$K%;%_%3%m%s$G(B
- $B7R$$$G=q$/I,MW$,$"$j$^$9!#%U%#%k%?$H(B <var>extension</var> $B$H$N(B
- $BN>J}$N0z?t$OBgJ8;z>.J8;z$r6hJL$;$:!"3HD%;R$N:G=i$N%I%C%H$O(B
- $B$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><directive module="mod_mime">RemoveInputFilter</directive></seealso>
-<seealso><directive module="core">SetInputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddLanguage</name>
-<description>$B%U%!%$%kL>$r;XDj$5$l$?8@8l$K%^%C%W(B</description>
-<syntax>AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>AddLanguage</directive> $B%G%#%l%/%F%#%V$O!"M?$($i$l$?3HD%;R$r;XDj$5$l$?(B
- content language $B$K%^%C%W$7$^$9!#(B<var>MIME-lang</var> $B$O!"3HD%;R(B
- <var>extension</var> $B$r4^$s$G$$$k%U%!%$%kL>$N(B MIME $B$K$*$1$k8@8l$G$9!#(B
- $B$3$N?7$7$$%^%C%T%s%0$O4{$K$"$k%^%C%T%s%0$KDI2C$5$l!"F1$83HD%;R(B
- <var>extension</var> $B$N$?$a$N%^%C%T%s%0$r>e=q$-$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddEncoding x-compress .Z<br />
- AddLanguage en .en<br />
- AddLanguage fr .fr
- </example>
-
- <p>$B$3$N>l9g!"(B<code>xxxx.en.Z</code> $B%I%-%e%a%s%H$O(B compress
- $B$5$l$?1Q8l$N%I%-%e%a%s%H$H$7$F07$o$l$^$9(B (<code>xxxx.Z.en</code>
- $B$bF1MM(B)$B!#(Bcontent language $B$O%/%i%$%"%s%H$KDLCN$5$l$^$9$,!"(B
- $B%V%i%&%6$,$3$N>pJs$r;H$&$3$H$O$*$=$i$/$"$j$^$;$s!#(B
- <directive>AddLanguage</directive>
- $B%G%#%l%/%F%#%V$O!"%5!<%P$,%/%i%$%"%s%H$N8@8l$NM%@hEY$K4p$E$$$FJ#?t$N(B
- $B%I%-%e%a%s%H$NCf$+$i%I%-%e%a%s%H$rA*$V(B<a
- href="../content-negotiation.html"
- >$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>$B$N$?$a$K$h$jLr$KN)$A$^$9!#(B</p>
-
- <p>$BJ#?t$N8@8l$,F1$83HD%;R$K3d$jEv$F$i$l$F$$$k$H$-$O!"(B
- $B:G8e$N$b$N$,;HMQ$5$l$^$9!#$9$J$o$A!"<!$N$h$&$J>l9g!"(B</p>
-
- <example>
- AddLanguage en .en<br />
- AddLanguage en-gb .en<br />
- AddLanguage en-us .en
- </example>
-
- <p>$B3HD%;R(B <code>.en</code> $B$N$"$k%I%-%e%a%s%H$O(B
- <code>en-us</code> $B$H$7$F07$o$l$^$9!#(B</p>
-
- <p>$B0z?t(B <var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$;$:!"(B
- $B:G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddOutputFilter</name>
-<description>$B%U%!%$%kL>$N3HD%;R$r%5!<%P$+$i$N1~Ez$r=hM}$9$k%U%#%k%?$K(B
- $B%^%C%W$9$k(B</description>
-<syntax>AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.26 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>AddOutputFilter</directive> $B%G%#%l%/%F%#%V$O(B
- $B3HD%;R(B <var>extension</var> $B$r%5!<%P$N1~Ez$,%/%i%$%"%s%H$KAw$i$l$k(B
- $BA0$K=hM}$9$k(B<a href="../filter.html">$B%U%#%k%?(B</a>$B$rDj5A$7$^$9!#(B
- $B$3$l$O(B <directive module="core">SetOutputFilter</directive>
- $B%G%#%l%/%F%#%V$H(B <directive module="core"
- >AddOutputFilterByType</directive> $B%G%#%l%/%F%#%V(B
- $B$r4^$a!"B>$N>l=j$GDj5A$5$l$F$$$k%U%#%k%?$K2C$($i$l$^$9!#(B
- $B$3$N?7$7$$%^%C%T%s%0$O4{$K$"$k%^%C%T%s%0$KDI2C$5$l!"F1$83HD%;R(B
- <var>extension</var> $B$N$?$a$N%^%C%T%s%0$r>e=q$-$7$^$9!#(B</p>
-
- <p>$BNc$($P!"0J2<$N@_Dj$O$9$Y$F$N(B <code>.shtml</code> $B%U%!%$%k$r(B SSI $B$G=hM}$7!"(B
- $B$=$N=PNO$r(B <module>mod_deflate</module> $B$r;H$C$F05=L$7$^$9!#(B</p>
-
- <example>
- AddOutputFilter INCLUDES;DEFLATE shtml
- </example>
-
- <p>$BJ#?t$N%U%#%k%?$r;XDj$9$k$H$-$O!"%G!<%?$r=hM}$9$k=gHV$K%;%_%3%m%s$G(B
- $B7R$$$G=q$/I,MW$,$"$j$^$9!#(B<var>filter</var> $B$H(B <var>extension</var> $B$N(B
- $BN>0z?t$OBgJ8;z>.J8;z$r6hJL$;$:!"3HD%;R$N:G=i$N%I%C%H$O(B
- $B$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><directive module="mod_mime">RemoveOutputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddType</name>
-<description>$B%U%!%$%kL>$N3HD%;R$r;XDj$5$l$?%3%s%F%s%H%?%$%W$K%^%C%W(B</description>
-<syntax>AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>AddType</directive> $B%G%#%l%/%F%#%V$O!"(B
- $BM?$($i$l$?3HD%;R$r;XDj$5$l$?%3%s%F%s%H%?%$%W$K%^%C%W$7$^$9!#(B
- <var>MIME-type</var> $B$O3HD%;R(B <var>extension</var>
- $B$r4^$s$@%I%-%e%a%s%H$K;HMQ$9$k(B MIME $B%?%$%W$G$9!#(B
- $B$3$N?7$7$$%^%C%T%s%0$O4{$K$"$k%^%C%T%s%0$KDI2C$5$l!"F1$83HD%;R(B
- <var>extension</var> $B$N$?$a$N%^%C%T%s%0$r>e=q$-$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$O(B MIME $B%?%$%W%U%!%$%k(B (<directive
- module="mod_mime">TypesConfig</directive> $B%G%#%l%/%F%#%V$r;2>H(B)
- $B$KL5$$%^%C%T%s%0$rDI2C$9$k$?$a$K;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- AddType image/gif .gif
- </example>
-
- <note>
- $B?7$7$$(B MIME $B%?%$%W$O!"(B<directive module="mod_mime">TypesConfig</directive>
- $B%U%!%$%k$rJQ99$9$k$N$G$O$J$/!"(B<directive>AddType</directive>
- $B%G%#%l%/%F%#%V$r;H$C$FDI2C$9$k$3$H$,?d>)$5$l$F$$$^$9!#(B
- </note>
-
- <p>$B0z?t(B <var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$;$:!"(B
- $B:G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><directive module="core">DefaultType</directive></seealso>
-<seealso><directive module="core">ForceType</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MultiviewsMatch</name>
-<description>MultiViews $B$G$N%^%C%A%s%0$N8!:w$K4^$^$;$k(B
-$B%U%!%$%k$N%?%$%W$r;XDj$9$k(B</description>
-<syntax>MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</syntax>
-<default>MultiviewsMatch NegotiatedOnly</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.26 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>MultiviewsMatch</directive> $B$r;HMQ$9$k$3$H$G!"(B
- <a href="mod_negotiation.html">mod_negotiation</a> $B$N(B
- Multiviews $B$K(B 3 $B<oN`$N0[$J$k5sF0$r$5$;$k$3$H$,$G$-$^$9!#(B
- Multiviews $B$r;HMQ$9$k$H!"%U%!%$%k(B ($BNc(B <code>index.html</code>)
- $B$KBP$9$k%j%/%(%9%H$KBP$7$F!"%M%4%7%(!<%7%g%s$9$k3HD%;R$,%Y!<%9$KIU$$$?$b$N(B
- (<code>index.html.en</code>, <code>index.html.fr</code> $B$d(B
- <code>index.html.gz</code>)
- $B$r%^%C%A$5$;$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><code>NegotiatedOnly</code> $B%*%W%7%g%s$G$O!"%Y!<%9L>$KB3$/3HD%;RA4$F$,(B
- $B%3%s%F%s%H%M%4%7%(!<%7%g%s$G(B <module>mod_mime</module>
- $B$,G'<1$9$k3HD%;R(B (<em>$BNc(B</em> $BJ8;z%;%C%H!"%3%s%F%s%H%?%$%W!"8@8l$d%(%s%3!<%G%#%s%0(B)
- $B$K4XO"IU$1$i$l$F$$$J$1$l$P$J$j$^$;$s!#$3$l$OI{:nMQ$N:G$b>/$J$$(B
- $B:G$bE*3N$J<BAu$G!"%G%U%)%k%H$K$J$C$F$$$^$9!#(B</p>
-
- <p>$B%O%s%I%i$H%U%#%k%?$NN>J}$b$7$/$OJRJ}$H4XO"IU$1$i$l$?3HD%;R$r4^$a$k$K$O!"(B
- <directive>MultiviewsMatch</directive> $B%G%#%l%/%F%#%V$K(B <code>Handlers</code>,
- <code>Filters</code> $B$^$?$O$=$NN>J}$N%*%W%7%g%s$r%;%C%H$7$^$9!#(B
- $B$b$7B>$N>r7o$,F1$8$G$"$l$P!":G$b>.$5$$%U%!%$%k$,Aw?.$5$l$^$9!#(B
- $BNc$($P!"(B500 $BJ8;z$N(B <code>index.html.cgi</code> $B$H(B 1000 $B%P%$%H$N(B
- <code>index.html.pl</code> $B$G$"$l$P!"(B<code>.cgi</code>
- $B$N%U%!%$%k$,M%@h$5$l$^$9!#(B<code>.asis</code> $B%U%!%$%k$rMxMQ$7$F$$$k%f!<%6$O!"(B
- <code>.asis</code> $B%U%!%$%k$,(B <code>asis-handler</code> $B$K4XO"IU$1$i$l$F$$$k$H$-$K$O!"(B
- $B%O%s%I%i%*%W%7%g%s$N;HMQ$r9%$`$G$7$g$&!#(B</p>
-
- <p>$B:G8e$K!"(B<module>mod_mime</module> $B$,G'<1$7$J$$3HD%;R$G$"$m$&$H$b!"(B
- $B$I$s$J3HD%;R$G$b%^%C%A$5$;$k(B <code>Any</code> $B$,;HMQ$G$-$^$9!#(B
- $B$3$N5sF0$O(B Apache 1.3 $B$N$H$-$HF1$8$b$N$G!"M=4|$7$J$$F0:n!"Nc$($P(B <code>.old</code> $B$d(B
- <code>.bak</code> $B%U%!%$%k$H$$$C$?%&%'%V%^%9%?$,Aw?.$r0U?^$7$F$$$J$$(B
- $B%U%!%$%k$rAw?.$9$k!"$H$$$C$?F0:n$r9T$J$&2DG=@-$,$"$j$^$9!#(B</p>
-
- <p>$BNc$($P<!$N@_Dj$G$O!"%O%s%I%i$d%U%#%k%?$,(B Multiviews $B$K;22C$9$k$3$H$,(B
- $B$G$-$^$9$7!"L$CN$N%U%!%$%k$O=|30$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <example>
- MultiviewsMatch Handlers Filters
- </example>
-
-</usage>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultLanguage</name>
-<description>$B$"$k%9%3!<%W$N$9$Y$F$N%U%!%$%k$r;XDj$5$l$?8@8l$K(B
-$B@_Dj$9$k(B</description>
-<syntax>DefaultLanguage <var>MIME-lang</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>DefaultLanguage</directive> $B%G%#%l%/%F%#%V$O!"(BApache
- $B$,%G%#%l%/%F%#%V$N%9%3!<%W(B (<em>$BNc$($P(B</em>$B!"$=$N;~E@$N(B
- <directive module="core" type="section">Directory</directive>
- $B$NHO0O(B) $B$K$"$k!"L@<(E*$J8@8l3HD%;R(B
- (<directive module="mod_mime">AddLanguage</directive> $B$G@_Dj$5$l$k(B
- <code>.fr</code> $B$d(B <code>.de</code>) $B$N$J$$A4$F$N%U%!%$%k$r!";XDj$5$l$?(B
- <var>MIME-lang</var> $B8@8l$G$"$k$H$_$J$9$h$&$K$7$^$9!#(B
- $B$3$l$K$h$j!"$9$Y$F$N%U%!%$%kL>$rJQ$($k$3$H$J$/!"(B
- $B%G%#%l%/%H%j$,%*%i%s%@8l$N%3%s%F%s%H$r4^$s$G$$$k!"(B
- $B$H$$$&$h$&$J$3$H$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B3HD%;R$r;HMQ$7$F8@8l$r;XDj$9$kJ}K!$H0c$$!"(B
- <directive>DefaultLanguage</directive>
- $B$O0l$D$N8@8l$7$+;XDj$G$-$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <p><directive>DefaultLanguage</directive>
- $B%G%#%l%/%F%#%V$,M-8z$G$J$/!"%U%!%$%k$K(B
- <directive module="mod_mime">AddLanguage</directive>
- $B$G@_Dj$5$l$?8@8l$N3HD%;R$,$J$$$H$-$O!"(B
- $B%U%!%$%k$K$O8@8lB0@-$,$J$$$H$_$J$5$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- DefaultLanguage en
- </example>
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ModMimeUsePathInfo</name>
-<description><code>path_info</code> $B%3%s%]!<%M%s%H$r%U%!%$%kL>$N0lIt$H$7$F07$&$h$&$K(B
-<module>mod_mime</module> $B$KDLCN$9$k(B</description>
-<syntax>ModMimeUsePathInfo On|Off</syntax>
-<default>ModMimeUsePathInfo Off</default>
-<contextlist><context>directory</context></contextlist>
-<compatibility>Apache 2.0.41 $B0J9_(B</compatibility>
-
-<usage>
- <p><directive>ModMimeUsePathInfo</directive> $B%G%#%l%/%F%#%V$O!"(B
- <module>mod_mime</module> $B$N;}$D%G%#%l%/%F%#%V$r(B
- $B%j%/%(%9%H$KE,MQ$5$;$k$?$a$K!"%U%!%$%kL>$H(B <code>path_info</code> URL
- $B%3%s%]!<%M%s%H$r7k9g$5$;$k$?$a$K;HMQ$7$^$9!#(B
- $B%G%U%)%k%H$G$O!V(B <code>Off</code> $B!W$G!"(B<code>path_info</code>
- $B%3%s%]!<%M%s%H$OL5;k$5$l$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O!"%P!<%A%c%k%U%!%$%k%7%9%F%`$r;HMQ$7$F$$$k:]$K(B
- $B?d>)$5$l$k%G%#%l%/%F%#%V$G$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ModMimeUsePathInfo On
- </example>
-
- <p><code>/bar</code> $B$,B8:_$7$F(B (foo.shtml $B$OB8:_$7$J$$(B)
- <directive>ModMimeUsePathInfo</directive> $B$,(B <code>On</code> $B$G$"$k$H$7$F!"(B
- <code>/bar/foo.shtml</code> $B$KBP$9$k%j%/%(%9%H$rH/9T$7$?>l9g!"(B
- <module>mod_mime</module> $B$OF~$C$F$-$?%j%/%(%9%H$r(B
- <code>/bar/foo.shtml</code> $B$H$7$F07$$!"(B
- <code>AddOutputFileter INCLUDES .shtml</code> $B$N$h$&$J%G%#%l%/%F%#%V$O(B
- <code>INCLUDES</code> $B%U%#%k%?$r%j%/%(%9%H$KIU2C$5$;$^$9!#(B
- <directive>ModMimeUsePathInfo</directive> $B$,@_Dj$5$l$J$1$l$P!"(B
- <code>INCLUDES</code> $B%U%#%k%?$OIU2C$5$l$^$;$s!#(B</p>
-</usage>
-<seealso><directive module="core">AcceptPathInfo</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveCharset</name>
-<description>$B%U%!%$%k$N3HD%;R$K4XO"IU$1$i$l$?$9$Y$F$NJ8;z%;%C%H(B
-$B$r2r=|$9$k(B</description>
-<syntax>RemoveCharset <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.24 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>RemoveCharset</directive> $B%G%#%l%/%F%#%V(B
- $B$OM?$($i$l$?3HD%;R$K4XO"IU$1$i$l$?J8;z%;%C%H$r<h$j>C$7$^$9!#(B
- $B$3$l$K$h$j!"%5%V%G%#%l%/%H%j$K$"$k(B <code>.htaccess</code>
- $B%U%!%$%k$,?F%G%#%l%/%H%j$d%5!<%P$N@_Dj%U%!%$%k(B
- $B$+$i7Q>5$7$?4XO"IU$1$r<h$j>C$9$3$H$,$G$-$^$9!#Nc$($P(B:</p>
-
- <p><var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B
- $B$^$?!":G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-
- <example><title>$BNc(B</title>
- RemoveCharset .html .shtml
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveEncoding</name>
-<description>$B%U%!%$%k$N3HD%;R$K4XO"IU$1$i$l$?$9$Y$F$N%3%s%F%s%H%(%s%3!<%G%#%s%0(B
-$B$r2r=|$9$k(B</description>
-<syntax>RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>RemoveEncoding</directive> $B%G%#%l%/%F%#%V$O!"(B
- $BM?$($i$l$?3HD%;R$K4XO"IU$1$i$l$?%(%s%3!<%G%#%s%0$r<h$j>C$7$^$9!#(B
- $B$3$l$K$h$j!"%5%V%G%#%l%/%H%j$K$"$k(B <code>.htaccess</code>
- $B%U%!%$%k$,?F%G%#%l%/%H%j$d%5!<%P$N@_Dj%U%!%$%k$+$i7Q>5$7$?4XO"IU$1$r(B
- $B<h$j>C$9$3$H$,$G$-$^$9!#(B</p>
-
- <example><title>/foo/.htaccess:</title>
- AddEncoding x-gzip .gz<br />
- AddType text/plain .asc<br />
- &lt;Files *.gz.asc&gt;<br />
- <indent>
- RemoveEncoding .gz<br />
- </indent>
- &lt;/Files&gt;
- </example>
-
- <p>$B$3$l$O!"(B<code>foo.gz</code> $B$O(B gzip
- $B$G%(%s%3!<%I$5$l$F$$$k$3$H$r;XDj$7$^$9$,!"(B<code>foo.gz.asc</code>
- $B$O%(%s%3!<%I$5$l$F$$$J$$%W%l!<%s%F%-%9%H$N(B
- $B%U%!%$%k$G$"$k$H$$$&$3$H$r;XDj$7$^$9!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><directive>RemoveEncoding</directive> $B$O(B
- <directive module="mod_mime">AddEncoding</directive>
- $B%G%#%l%/%F%#%V$N(B<em>$B8e(B</em>$B$G=hM}$5$l$^$9$N$G!"(B
- $BF1$8%G%#%l%/%H%j$N@_DjCf$KN>J}$,8=$l$k$H!"(B
- $B8e<T$N8z2L$,BG$A>C$5$l$k2DG=@-$,$"$j$^$9!#(B</p>
- </note>
-
- <p><var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B
- $B$^$?!":G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveHandler</name>
-<description>$B%U%!%$%k$N3HD%;R$K4XO"IU$1$i$l$?$9$Y$F$N%O%s%I%i$r(B
-$B2r=|$9$k(B</description>
-<syntax>RemoveHandler <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>RemoveHandler</directive> $B%G%#%l%/%F%#%V(B
- $B$OM?$($i$l$?3HD%;R$K4XO"IU$1$i$l$?%O%s%I%i$r<h$j>C$7$^$9!#(B
- $B$3$l$K$h$j!"%5%V%G%#%l%/%H%j$K$"$k(B <code>.htaccess</code>
- $B%U%!%$%k$,?F%G%#%l%/%H%j$d%5!<%P$N@_Dj%U%!%$%k(B
- $B$+$i7Q>5$7$?4XO"IU$1$r<h$j>C$9$3$H$,$G$-$^$9!#$?$H$($P(B:</p>
-
- <example><title>/foo/.htaccess:</title>
- AddHandler server-parsed .html
- </example>
-
- <example><title>/foo/bar/.htaccess:</title>
- RemoveHandler .html
- </example>
-
- <p>$B$3$l$O!"(B<code>/foo/bar</code> $B%G%#%l%/%H%j$N(B <code>.html</code>
- $B%U%!%$%k$O(B SSI (<module>mod_include</module> $B%b%8%e!<%k;2>H(B) $B$G$O$J$/!"(B
- $BIaDL$N%U%!%$%k$H$7$F07$o$l$k$h$&$K$9$k8z2L$,$"$j$^$9!#(B
- </p>
-
- <p><var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B
- $B$^$?!":G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveInputFilter</name>
-<description>$B%U%!%$%k3HD%;R$K4XO"IU$1$i$l$?F~NO%U%#%k%?$r2r=|$9$k(B</description>
-<syntax>RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.26 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>RemoveInputFilter</directive> $B%G%#%l%/%F%#%V$O(B
- $B;XDj$5$l$?%U%!%$%k3HD%;R$K4XO"IU$1$i$l$?F~NO%U%#%k%?$r2r=|$7$^$9!#(B
- $B$3$l$rMxMQ$9$k$3$H$G!"?F%G%#%l%/%H%j$d%5!<%P@_Dj%U%!%$%k$+$i(B
- $B7Q>5$7$?4XO"IU$1$r(B $B%5%V%G%#%l%/%H%jFb$K$*$$$F(B
- <code>.htaccess</code> $B%U%!%$%k$G<h$j>C$9$3$H$,$G$-$^$9!#(B</p>
-
- <p><var>extension</var> $B0z?t$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#$^$?!"(B
- $B:G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-<seealso><directive module="mod_mime">AddInputFilter</directive></seealso>
-<seealso><directive module="core">SetInputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveLanguage</name>
-<description>$B%U%!%$%k3HD%;R$K4XO"IU$1$i$l$?8@8l$r2r=|$9$k(B</description>
-<syntax>RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.24 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>RemoveLanguage</directive> $B%G%#%l%/%F%#%V$O(B
- $B;XDj$5$l$?%U%!%$%k3HD%;R$K4XO"IU$1$i$l$?8@8l$r2r=|$7$^$9!#(B
- $B$3$l$rMxMQ$9$k$3$H$G!"?F%G%#%l%/%H%j$d%5!<%P@_Dj%U%!%$%k$+$i(B
- $B7Q>5$7$?4XO"IU$1$r(B $B%5%V%G%#%l%/%H%jFb$K$*$$$F(B
- <code>.htaccess</code> $B%U%!%$%k$G<h$j>C$9$3$H$,$G$-$^$9!#(B</p>
-
- <p><var>extension</var> $B0z?t$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#$^$?!"(B
- $B:G=i$N%I%C%H$O$D$$$F$b$D$+$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveOutputFilter</name>
-<description>$B%U%!%$%k3HD%;R$K4XO"IU$1$i$l$?=PNO%U%#%k%?$r2r=|$9$k(B</description>
-<syntax>RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>2.0.26 $B0J9_$G$N$_;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>RemoveOutputFilter</directive> $B%G%#%l%/%F%#%V$O(B
- $B;XDj$5$l$?%U%!%$%k3HD%;R$K4XO"IU$1$i$l$?=PNO%U%#%k%?$r2r=|$7$^$9!#(B
- $B$3$l$rMxMQ$9$k$3$H$G!"?F%G%#%l%/%H%j$d%5!<%P@_Dj%U%!%$%k$+$i(B
- $B7Q>5$7$?4XO"IU$1$r(B $B%5%V%G%#%l%/%H%jFb$K$*$$$F(B
- <code>.htaccess</code> $B%U%!%$%k$G<h$j>C$9$3$H$,$G$-$^$9!#(B</p>
-
- <p><var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B
- $B$^$?!":G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-
- <example><title>$BNc(B</title>
- RemoveOutputFilter shtml
- </example>
-</usage>
-<seealso><directive module="mod_mime">AddOutputFilter</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveType</name>
-<description>$B%U%!%$%k$N3HD%;R$H4XO"IU$1$i$l$?%3%s%F%s%H%?%$%W$r(B
-$B2r=|$9$k(B</description>
-<syntax>RemoveType <var>extension</var> [<var>extension</var>]
-...</syntax>
-<contextlist><context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>RemoveType</directive> $B%G%#%l%/%F%#%V$OM?$($i$l$?3HD%;R$N(B
- MIME $B%?%$%W$N4XO"IU$1$r<h$j>C$7$^$9!#$3$l$K$h$j!"(B
- $B%5%V%G%#%l%/%H%j$K$"$k(B <code>.htaccess</code>
- $B%U%!%$%k$,?F%G%#%l%/%H%j$d%5!<%P$N@_Dj%U%!%$%k$+$i7Q>5$7$?(B
- $B4XO"IU$1$r<h$j>C$9$3$H$,$G$-$^$9!#$?$H$($P(B:</p>
-
- <example><title>/foo/.htaccess:</title>
- RemoveType .cgi
- </example>
-
- <p>$B$3$l$O(B <code>/foo/</code> $B%G%#%l%/%H%j0J2<$N(B <code>.cgi</code>
- $B%U%!%$%k$NFCJL$J07$$$r<h$j>C$7$^$9!#%U%!%$%k$O(B <directive
- module="core">DefaultType</directive> $B$H$7$F07$o$l$^$9!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><directive>RemoveType</directive> $B%G%#%l%/%F%#%V$O(B
- <directive module="mod_mime">AddType</directive>
- $B%G%#%l%/%F%#%V$N(B<em>$B8e(B</em>$B$K=hM}$5$l$^$9$N$G!"(B
- $BN>J}$,F1$8%G%#%l%/%H%j$N@_DjCf$K8=$l$?>l9g!"(B
- $B8e<T$N8z2L$,BG$A>C$5$l$k2DG=@-$,$"$j$^$9!#(B</p>
- </note>
-
- <p><var>extension</var> $B$OBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B
- $B$^$?!":G=i$N%I%C%H$O$"$C$F$b$J$/$F$b9=$$$^$;$s!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TypesConfig</name>
-<description><code>mime.types</code> $B%U%!%$%k$N0LCV(B</description>
-<syntax>TypesConfig <var>file-path</var></syntax>
-<default>TypesConfig conf/mime.types</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>TypesConfig</directive> $B%G%#%l%/%F%#%V$O!"(BMIME
- $B%?%$%W@_Dj%U%!%$%k$N0LCV$r@_Dj$7$^$9!#(B<var>filename</var> $B$O(B
- <directive module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$G$9!#(B
- $B$3$N%U%!%$%k$O%U%!%$%k$N3HD%;R$+$i%3%s%F%s%H%?%$%W$X$N(B
- $B%G%U%)%k%H$N%^%C%T%s%0$r@_Dj$7$^$9!#(B
- $B$[$H$s$I$N4IM}<T$O!"$h$/;H$o$l$k%U%!%$%kL>$N3HD%;R$r(B
- IANA $B$KEPO?$5$l$?%3%s%F%s%H%?%$%W$K4XO"IU$1$F$$$k!"(B
- Apache $B$N(B <code>mime.types</code> $B%U%!%$%k$r;H$$$^$9!#(B
- $B8=:_$N0lMw$O(B <a href=
- "http://www.isi.edu/in-notes/iana/assignments/media-types/media-types"
- >http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</a>
- $B$G4IM}$5$l$F$$$^$9!#$3$l$O!"<gMW$J%a%G%#%"%?%$%W$NDj5A$rDs6!$7$F!"(B
- $BI,MW$H$3$m$r(B <directive module="mod_mime">AddType</directive> $B$G(B
- $B>e=q$-$9$k!"$H$$$&J}K!$G(B <code>httpd.conf</code> $B$r4JN,$K$7$^$9!#(B
- <code>mime.types</code> $B$O%5!<%P$r%"%C%W%0%l!<%I$7$?$H$-$K(B
- $BCV$-49$($i$l$k$+$b$7$l$J$$$N$G!"$=$N%U%!%$%k$rD>@\(B
- $BJT=8$7$J$$$G$/$@$5$$!#(B</p>
-
- <p>$B%U%!%$%k$O!"(B<directive module="mod_mime">AddType</directive>
- $B%G%#%l%/%F%#%V$N0z?t$HF1$87A<0$N9T$G9=@.$5$l$^$9!#(B</p>
-
- <example>
- <var>MIME-type</var> [<var>extension</var>] ...
- </example>
-
- <p>$B3HD%;R$NBgJ8;z>.J8;z$O6hJL$5$l$^$;$s!#6u9T$d%O%C%7%e(B (`#')
- $B$G;O$^$k9T$OL5;k$5$l$^$9!#(B</p>
-
- <note>
- (1) IANA $B$K4{$KEPO?$5$l$F$$$k!"$"$k$$$O(B (2)
- $B9-$/<u$1F~$l$i$l$F$$$F%W%i%C%H%[!<%`4V$G%U%!%$%k3HD%;R$K>WFM$,$J$$!"(B
- $B$H$$$&>l9g$G$J$1$l$P!"G[I[Cf$N(B <code>mime.types</code>
- $B%U%!%$%k$K?7$?$J$b$N$rEPO?$9$k$h$&$K(B
- Apache HTTP Server Project $B$K%j%/%(%9%H$7$J$$$G$/$@$5$$!#(B
- <code>category/x-subtype</code> $B$N%j%/%(%9%H$O<+F0E*$K5Q2<$5$l$^$9$7!"(B
- $B8@8l$dJ8;z%;%C%H$NL>A06u4V$G4{$K;HMQ$5$l$F$$$F!">WFM$N2DG=@-$N$"$k(B
- 2 $BJ8;z$N3HD%;R$b5Q2<$5$l$^$9!#(B
- </note>
-</usage>
-<seealso><module>mod_mime_magic</module></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_mime.xml.meta b/docs/manual/mod/mod_mime.xml.meta
deleted file mode 100644
index d1696cae58..0000000000
--- a/docs/manual/mod/mod_mime.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_mime</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_mime_magic.html b/docs/manual/mod/mod_mime_magic.html
deleted file mode 100644
index f413ffe981..0000000000
--- a/docs/manual/mod/mod_mime_magic.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_mime_magic.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_mime_magic.html.en b/docs/manual/mod/mod_mime_magic.html.en
deleted file mode 100644
index cc984cd2c5..0000000000
--- a/docs/manual/mod/mod_mime_magic.html.en
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_mime_magic - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_mime_magic</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mime_magic.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Determines the MIME type of a file
- by looking at a few bytes of its contents</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mime_magic_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_mime_magic.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module determines the MIME type of files in the same
- way the Unix <code>file(1)</code> command works: it looks at the first
- few bytes of the file. It is intended as a "second line of defense"
- for cases that <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> can't resolve.</p>
-
- <p>This module is derived from a free version of the
- <code>file(1)</code> command for Unix, which uses "magic
- numbers" and other hints from a file's contents to figure out
- what the contents are. This module is active only if the magic
- file is specified by the <code class="directive"><a href="#mimemagicfile">MimeMagicFile</a></code> directive.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#mimemagicfile">MimeMagicFile</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#format">Format of the Magic File</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#performance">Performance Issues</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#notes">Notes</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="format" id="format">Format of the Magic File</a></h2>
-
- <p>The contents of the file are plain ASCII text in 4-5
- columns. Blank lines are allowed but ignored. Commented lines
- use a hash mark (<code>#</code>). The remaining lines are parsed for
- the following columns:</p>
-
- <table class="bordered"><tr class="header"><th>Column</th><th>Description</th></tr>
-<tr><td>1</td>
- <td>byte number to begin checking from<br />
- "<code>&gt;</code>" indicates a dependency upon the previous
- non-"<code>&gt;</code>" line</td></tr>
-<tr class="odd"><td>2</td>
- <td><p>type of data to match</p>
- <table class="bordered">
-
- <tr><td><code>byte</code></td>
- <td>single character</td></tr>
- <tr><td><code>short</code></td>
- <td>machine-order 16-bit integer</td></tr>
- <tr><td><code>long</code></td>
- <td>machine-order 32-bit integer</td></tr>
- <tr><td><code>string</code></td>
- <td>arbitrary-length string</td></tr>
- <tr><td><code>date</code></td>
- <td>long integer date (seconds since Unix epoch/1970)</td></tr>
- <tr><td><code>beshort</code></td>
- <td>big-endian 16-bit integer</td></tr>
- <tr><td><code>belong</code></td>
- <td>big-endian 32-bit integer</td></tr>
- <tr><td><code>bedate</code></td>
- <td>big-endian 32-bit integer date</td></tr>
- <tr><td><code>leshort</code></td>
- <td>little-endian 16-bit integer</td></tr>
- <tr><td><code>lelong</code></td>
- <td>little-endian 32-bit integer</td></tr>
- <tr><td><code>ledate</code></td>
- <td>little-endian 32-bit integer date</td></tr>
- </table></td></tr>
-<tr><td>3</td>
- <td>contents of data to match</td></tr>
-<tr class="odd"><td>4</td>
- <td>MIME type if matched</td></tr>
-<tr><td>5</td>
- <td>MIME encoding if matched (optional)</td></tr>
-</table>
-
- <p>For example, the following magic file lines would recognize
- some audio formats:</p>
-
- <div class="example"><pre># Sun/NeXT audio data
-0 string .snd
-&gt;12 belong 1 audio/basic
-&gt;12 belong 2 audio/basic
-&gt;12 belong 3 audio/basic
-&gt;12 belong 4 audio/basic
-&gt;12 belong 5 audio/basic
-&gt;12 belong 6 audio/basic
-&gt;12 belong 7 audio/basic
-&gt;12 belong 23 audio/x-adpcm</pre></div>
-
- <p>Or these would recognize the difference between <code>*.doc</code>
- files containing Microsoft Word or FrameMaker documents. (These are
- incompatible file formats which use the same file suffix.)</p>
-
- <div class="example"><pre># Frame
-0 string \&lt;MakerFile application/x-frame
-0 string \&lt;MIFFile application/x-frame
-0 string \&lt;MakerDictionary application/x-frame
-0 string \&lt;MakerScreenFon application/x-frame
-0 string \&lt;MML application/x-frame
-0 string \&lt;Book application/x-frame
-0 string \&lt;Maker application/x-frame
-
-# MS-Word
-0 string \376\067\0\043 application/msword
-0 string \320\317\021\340\241\261 application/msword
-0 string \333\245-\0\0\0 application/msword</pre></div>
-
- <p>An optional MIME encoding can be included as a fifth column.
- For example, this can recognize gzipped files and set the
- encoding for them.</p>
-
- <div class="example"><pre># gzip (GNU zip, not to be confused with
-# [Info-ZIP/PKWARE] zip archiver)
-
-0 string \037\213 application/octet-stream x-gzip</pre></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="performance" id="performance">Performance Issues</a></h2>
- <p>This module is not for every system. If your system is barely
- keeping up with its load or if you're performing a web server
- benchmark, you may not want to enable this because the
- processing is not free.</p>
-
- <p>However, an effort was made to improve the performance of
- the original <code>file(1)</code> code to make it fit in a busy web
- server. It was designed for a server where there are thousands of users
- who publish their own documents. This is probably very common
- on intranets. Many times, it's helpful if the server can make
- more intelligent decisions about a file's contents than the
- file name allows ...even if just to reduce the "why doesn't my
- page work" calls when users improperly name their own files.
- You have to decide if the extra work suits your
- environment.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notes" id="notes">Notes</a></h2>
- <p>The following notes apply to the <code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code>
- module and are included here for compliance with contributors'
- copyright restrictions that require their acknowledgment.</p>
-
- <div class="note">
- <p>mod_mime_magic: MIME type lookup via file magic numbers<br />
- Copyright (c) 1996-1997 Cisco Systems, Inc.</p>
-
- <p>This software was submitted by Cisco Systems to the Apache Group
- in July 1997. Future revisions and derivatives of this source code
- must acknowledge Cisco Systems as the original contributor of this
- module. All other licensing and usage conditions are those of the
- Apache Group.</p>
-
- <p>Some of this code is derived from the free version of the file
- command originally posted to comp.sources.unix. Copyright info for
- that program is included below as required.</p>
- </div>
-
- <div class="note">
- <p> - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.</p>
-
- <p>This software is not subject to any license of the American
- Telephone and Telegraph Company or of the Regents of the University
- of California.</p>
-
- <p>Permission is granted to anyone to use this software for any
- purpose on any computer system, and to alter it and redistribute it
- freely, subject to the following restrictions:</p>
-
- <ol>
- <li>The author is not responsible for the consequences of use of
- this software, no matter how awful, even if they arise from flaws
- in it.</li>
-
- <li>The origin of this software must not be misrepresented, either
- by explicit claim or by omission. Since few users ever read
- sources, credits must appear in the documentation.</li>
-
- <li>Altered versions must be plainly marked as such, and must not
- be misrepresented as being the original software. Since few users
- ever read sources, credits must appear in the documentation.</li>
-
- <li>This notice may not be removed or altered.</li>
- </ol>
- </div>
-
- <div class="note">
- <p>For compliance with Mr Darwin's terms: this has been very
- significantly modified from the free "file" command.</p>
-
- <ul>
- <li>all-in-one file for compilation convenience when moving from
- one version of Apache to the next.</li>
-
- <li>Memory allocation is done through the Apache API's pool
- structure.</li>
-
- <li>All functions have had necessary Apache API request or server
- structures passed to them where necessary to call other Apache API
- routines. (<em>i.e.</em>, usually for logging, files, or memory
- allocation in itself or a called function.)</li>
-
- <li>struct magic has been converted from an array to a single-ended
- linked list because it only grows one record at a time, it's only
- accessed sequentially, and the Apache API has no equivalent of
- <code>realloc()</code>.</li>
-
- <li>Functions have been changed to get their parameters from the
- server configuration instead of globals. (It should be reentrant
- now but has not been tested in a threaded environment.)</li>
-
- <li>Places where it used to print results to stdout now saves them
- in a list where they're used to set the MIME type in the Apache
- request record.</li>
-
- <li>Command-line flags have been removed since they will never be
- used here.</li>
- </ul>
- </div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MimeMagicFile" id="MimeMagicFile">MimeMagicFile</a> <a name="mimemagicfile" id="mimemagicfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MimeMagicFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_mime_magic</td></tr>
-</table>
- <p>The <code class="directive">MimeMagicFile</code> directive can be used to
- enable this module, the default file is distributed at
- <code>conf/magic</code>. Non-rooted paths are relative to the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. Virtual hosts will use
- the same file as the main server unless a more specific setting is
- used, in which case the more specific setting overrides the main
- server's file.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- MimeMagicFile conf/magic
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_mime_magic.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_mime_magic.xml b/docs/manual/mod/mod_mime_magic.xml
deleted file mode 100644
index 9d227c216e..0000000000
--- a/docs/manual/mod/mod_mime_magic.xml
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_mime_magic.xml.meta">
-
-<name>mod_mime_magic</name>
-<description>Determines the MIME type of a file
- by looking at a few bytes of its contents</description>
-<status>Extension</status>
-<sourcefile>mod_mime_magic.c</sourcefile>
-<identifier>mime_magic_module</identifier>
-
-<summary>
- <p>This module determines the MIME type of files in the same
- way the Unix <code>file(1)</code> command works: it looks at the first
- few bytes of the file. It is intended as a "second line of defense"
- for cases that <module>mod_mime</module> can't resolve.</p>
-
- <p>This module is derived from a free version of the
- <code>file(1)</code> command for Unix, which uses "magic
- numbers" and other hints from a file's contents to figure out
- what the contents are. This module is active only if the magic
- file is specified by the <directive module="mod_mime_magic"
- >MimeMagicFile</directive> directive.</p>
-</summary>
-
-<section id="format"><title>Format of the Magic File</title>
-
- <p>The contents of the file are plain ASCII text in 4-5
- columns. Blank lines are allowed but ignored. Commented lines
- use a hash mark (<code>#</code>). The remaining lines are parsed for
- the following columns:</p>
-
- <table style="zebra" border="1">
- <columnspec><column width=".15"/><column width=".8"/></columnspec>
- <tr><th>Column</th><th>Description</th></tr>
- <tr><td>1</td>
- <td>byte number to begin checking from<br />
- "<code>&gt;</code>" indicates a dependency upon the previous
- non-"<code>&gt;</code>" line</td></tr>
-
- <tr><td>2</td>
- <td><p>type of data to match</p>
- <table border="1">
- <columnspec><column width=".2"/><column width=".7"/></columnspec>
- <tr><td><code>byte</code></td>
- <td>single character</td></tr>
- <tr><td><code>short</code></td>
- <td>machine-order 16-bit integer</td></tr>
- <tr><td><code>long</code></td>
- <td>machine-order 32-bit integer</td></tr>
- <tr><td><code>string</code></td>
- <td>arbitrary-length string</td></tr>
- <tr><td><code>date</code></td>
- <td>long integer date (seconds since Unix epoch/1970)</td></tr>
- <tr><td><code>beshort</code></td>
- <td>big-endian 16-bit integer</td></tr>
- <tr><td><code>belong</code></td>
- <td>big-endian 32-bit integer</td></tr>
- <tr><td><code>bedate</code></td>
- <td>big-endian 32-bit integer date</td></tr>
- <tr><td><code>leshort</code></td>
- <td>little-endian 16-bit integer</td></tr>
- <tr><td><code>lelong</code></td>
- <td>little-endian 32-bit integer</td></tr>
- <tr><td><code>ledate</code></td>
- <td>little-endian 32-bit integer date</td></tr>
- </table></td></tr>
-
- <tr><td>3</td>
- <td>contents of data to match</td></tr>
-
- <tr><td>4</td>
- <td>MIME type if matched</td></tr>
-
- <tr><td>5</td>
- <td>MIME encoding if matched (optional)</td></tr>
- </table>
-
- <p>For example, the following magic file lines would recognize
- some audio formats:</p>
-
- <example>
-<pre># Sun/NeXT audio data
-0 string .snd
-&gt;12 belong 1 audio/basic
-&gt;12 belong 2 audio/basic
-&gt;12 belong 3 audio/basic
-&gt;12 belong 4 audio/basic
-&gt;12 belong 5 audio/basic
-&gt;12 belong 6 audio/basic
-&gt;12 belong 7 audio/basic
-&gt;12 belong 23 audio/x-adpcm</pre>
- </example>
-
- <p>Or these would recognize the difference between <code>*.doc</code>
- files containing Microsoft Word or FrameMaker documents. (These are
- incompatible file formats which use the same file suffix.)</p>
-
- <example>
-<pre># Frame
-0 string \&lt;MakerFile application/x-frame
-0 string \&lt;MIFFile application/x-frame
-0 string \&lt;MakerDictionary application/x-frame
-0 string \&lt;MakerScreenFon application/x-frame
-0 string \&lt;MML application/x-frame
-0 string \&lt;Book application/x-frame
-0 string \&lt;Maker application/x-frame
-
-# MS-Word
-0 string \376\067\0\043 application/msword
-0 string \320\317\021\340\241\261 application/msword
-0 string \333\245-\0\0\0 application/msword</pre>
- </example>
-
- <p>An optional MIME encoding can be included as a fifth column.
- For example, this can recognize gzipped files and set the
- encoding for them.</p>
-
- <example>
-<pre># gzip (GNU zip, not to be confused with
-# [Info-ZIP/PKWARE] zip archiver)
-
-0 string \037\213 application/octet-stream x-gzip</pre>
- </example>
-</section>
-
-<section id="performance"><title>Performance Issues</title>
- <p>This module is not for every system. If your system is barely
- keeping up with its load or if you're performing a web server
- benchmark, you may not want to enable this because the
- processing is not free.</p>
-
- <p>However, an effort was made to improve the performance of
- the original <code>file(1)</code> code to make it fit in a busy web
- server. It was designed for a server where there are thousands of users
- who publish their own documents. This is probably very common
- on intranets. Many times, it's helpful if the server can make
- more intelligent decisions about a file's contents than the
- file name allows ...even if just to reduce the "why doesn't my
- page work" calls when users improperly name their own files.
- You have to decide if the extra work suits your
- environment.</p>
-</section>
-
-<section id="notes"><title>Notes</title>
- <p>The following notes apply to the <module>mod_mime_magic</module>
- module and are included here for compliance with contributors'
- copyright restrictions that require their acknowledgment.</p>
-
- <note>
- <p>mod_mime_magic: MIME type lookup via file magic numbers<br />
- Copyright (c) 1996-1997 Cisco Systems, Inc.</p>
-
- <p>This software was submitted by Cisco Systems to the Apache Group
- in July 1997. Future revisions and derivatives of this source code
- must acknowledge Cisco Systems as the original contributor of this
- module. All other licensing and usage conditions are those of the
- Apache Group.</p>
-
- <p>Some of this code is derived from the free version of the file
- command originally posted to comp.sources.unix. Copyright info for
- that program is included below as required.</p>
- </note>
-
- <note>
- <p> - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.</p>
-
- <p>This software is not subject to any license of the American
- Telephone and Telegraph Company or of the Regents of the University
- of California.</p>
-
- <p>Permission is granted to anyone to use this software for any
- purpose on any computer system, and to alter it and redistribute it
- freely, subject to the following restrictions:</p>
-
- <ol>
- <li>The author is not responsible for the consequences of use of
- this software, no matter how awful, even if they arise from flaws
- in it.</li>
-
- <li>The origin of this software must not be misrepresented, either
- by explicit claim or by omission. Since few users ever read
- sources, credits must appear in the documentation.</li>
-
- <li>Altered versions must be plainly marked as such, and must not
- be misrepresented as being the original software. Since few users
- ever read sources, credits must appear in the documentation.</li>
-
- <li>This notice may not be removed or altered.</li>
- </ol>
- </note>
-
- <note>
- <p>For compliance with Mr Darwin's terms: this has been very
- significantly modified from the free "file" command.</p>
-
- <ul>
- <li>all-in-one file for compilation convenience when moving from
- one version of Apache to the next.</li>
-
- <li>Memory allocation is done through the Apache API's pool
- structure.</li>
-
- <li>All functions have had necessary Apache API request or server
- structures passed to them where necessary to call other Apache API
- routines. (<em>i.e.</em>, usually for logging, files, or memory
- allocation in itself or a called function.)</li>
-
- <li>struct magic has been converted from an array to a single-ended
- linked list because it only grows one record at a time, it's only
- accessed sequentially, and the Apache API has no equivalent of
- <code>realloc()</code>.</li>
-
- <li>Functions have been changed to get their parameters from the
- server configuration instead of globals. (It should be reentrant
- now but has not been tested in a threaded environment.)</li>
-
- <li>Places where it used to print results to stdout now saves them
- in a list where they're used to set the MIME type in the Apache
- request record.</li>
-
- <li>Command-line flags have been removed since they will never be
- used here.</li>
- </ul>
- </note>
-</section>
-
-<directivesynopsis>
-<name>MimeMagicFile</name>
-<description>Enable MIME-type determination based on file contents
-using the specified magic file</description>
-<syntax>MimeMagicFile <var>file-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>MimeMagicFile</directive> directive can be used to
- enable this module, the default file is distributed at
- <code>conf/magic</code>. Non-rooted paths are relative to the
- <directive module="core">ServerRoot</directive>. Virtual hosts will use
- the same file as the main server unless a more specific setting is
- used, in which case the more specific setting overrides the main
- server's file.</p>
-
- <example><title>Example</title>
- MimeMagicFile conf/magic
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_mime_magic.xml.meta b/docs/manual/mod/mod_mime_magic.xml.meta
deleted file mode 100644
index 4f0443ae75..0000000000
--- a/docs/manual/mod/mod_mime_magic.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_mime_magic</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_negotiation.html b/docs/manual/mod/mod_negotiation.html
deleted file mode 100644
index c4e86d3a49..0000000000
--- a/docs/manual/mod/mod_negotiation.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_negotiation.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_negotiation.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mod_negotiation.html.en b/docs/manual/mod/mod_negotiation.html.en
deleted file mode 100644
index 6e282fcdfb..0000000000
--- a/docs/manual/mod/mod_negotiation.html.en
+++ /dev/null
@@ -1,306 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_negotiation - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_negotiation</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_negotiation.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides for <a href="../content-negotiation.html">content negotiation</a></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>negotiation_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_negotiation.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>Content negotiation, or more accurately content selection, is
- the selection of the document that best matches the clients
- capabilities, from one of several available documents. There
- are two implementations of this.</p>
-
- <ul>
- <li>A type map (a file with the handler
- <code>type-map</code>) which explicitly lists the files
- containing the variants.</li>
-
- <li>A MultiViews search (enabled by the <code>MultiViews</code>
- <code class="directive"><a href="../mod/core.html#options">Options</a></code>), where the server does
- an implicit filename pattern match, and choose from amongst the
- results.</li>
- </ul>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#languagepriority">LanguagePriority</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#typemaps">Type maps</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multiviews">MultiViews</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li>
-<li><a href="../content-negotiation.html">Content
-Negotiation</a></li>
-<li><a href="../env.html">Environment Variables</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="typemaps" id="typemaps">Type maps</a></h2>
- <p>A type map has a format similar to RFC822 mail headers. It
- contains document descriptions separated by blank lines, with
- lines beginning with a hash character ('#') treated as
- comments. A document description consists of several header
- records; records may be continued on multiple lines if the
- continuation lines start with spaces. The leading space will be
- deleted and the lines concatenated. A header record consists of
- a keyword name, which always ends in a colon, followed by a
- value. Whitespace is allowed between the header name and value,
- and between the tokens of value. The headers allowed are: </p>
-
- <dl>
- <dt><code>Content-Encoding:</code></dt>
- <dd>The encoding of the file. Apache only recognizes
- encodings that are defined by an <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> directive.
- This normally includes the encodings <code>x-compress</code>
- for compress'd files, and <code>x-gzip</code> for gzip'd
- files. The <code>x-</code> prefix is ignored for encoding
- comparisons.</dd>
-
- <dt><code>Content-Language:</code></dt>
- <dd>The language(s) of the variant, as an Internet standard
- language tag (<a href="http://www.ietf.org/rfc/rfc1766.txt">RFC 1766</a>). An example is <code>en</code>,
- meaning English. If the variant contains more than one
- language, they are separated by a comma.</dd>
-
- <dt><code>Content-Length:</code></dt>
- <dd>The length of the file, in bytes. If this header is not
- present, then the actual length of the file is used.</dd>
-
- <dt><code>Content-Type:</code></dt>
-
- <dd>
- The MIME media type of the document, with optional
- parameters. Parameters are separated from the media type
- and from one another by a semi-colon, with a syntax of
- <code>name=value</code>. Common parameters include:
-
- <dl>
- <dt><code>level</code></dt>
- <dd>an integer specifying the version of the media type.
- For <code>text/html</code> this defaults to 2, otherwise
- 0.</dd>
-
- <dt><code>qs</code></dt>
- <dd>a floating-point number with a value in the range 0.0
- to 1.0, indicating the relative 'quality' of this variant
- compared to the other available variants, independent of
- the client's capabilities. For example, a jpeg file is
- usually of higher source quality than an ascii file if it
- is attempting to represent a photograph. However, if the
- resource being represented is ascii art, then an ascii
- file would have a higher source quality than a jpeg file.
- All <code>qs</code> values are therefore specific to a given
- resource.</dd>
- </dl>
-
- <div class="example"><h3>Example</h3><p><code>
- Content-Type: image/jpeg; qs=0.8
- </code></p></div>
- </dd>
-
- <dt><code>URI:</code></dt>
- <dd>uri of the file containing the variant (of the given
- media type, encoded with the given content encoding). These
- are interpreted as URLs relative to the map file; they must
- be on the same server (!), and they must refer to files to
- which the client would be granted access if they were to be
- requested directly.</dd>
-
- <dt><code>Body:</code></dt>
- <dd>New in Apache 2.0, the actual content of the resource may
- be included in the type-map file using the Body header. This
- header must contain a string that designates a delimiter for
- the body content. Then all following lines in the type map
- file will be considered part of the resource body until the
- delimiter string is found.
-
- <div class="example"><h3>Example:</h3><p><code>
- Body:----xyz----<br />
- &lt;html&gt;<br />
- &lt;body&gt;<br />
- &lt;p&gt;Content of the page.&lt;/p&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;<br />
- ----xyz----
- </code></p></div>
- </dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multiviews" id="multiviews">MultiViews</a></h2>
- <p>A MultiViews search is enabled by the <code>MultiViews</code>
- <code class="directive"><a href="../mod/core.html#options">Options</a></code>. If the server receives a
- request for <code>/some/dir/foo</code> and
- <code>/some/dir/foo</code> does <em>not</em> exist, then the
- server reads the directory looking for all files named
- <code>foo.*</code>, and effectively fakes up a type map which
- names all those files, assigning them the same media types and
- content-encodings it would have if the client had asked for one
- of them by name. It then chooses the best match to the client's
- requirements, and returns that document.</p>
-
- <p>The <code class="directive"><a href="../mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>
- directive configures whether Apache will consider files
- that do not have content negotiation meta-information assigned
- to them when choosing files.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs" id="cachenegotiateddocs">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allows content-negotiated documents to be
-cached by proxy servers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CacheNegotiatedDocs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CacheNegotiatedDocs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The syntax changed in version 2.0.</td></tr>
-</table>
- <p>If set, this directive allows content-negotiated documents
- to be cached by proxy servers. This could mean that clients
- behind those proxys could retrieve versions of the documents
- that are not the best match for their abilities, but it will
- make caching more efficient.</p>
-
- <p>This directive only applies to requests which come from
- HTTP/1.0 browsers. HTTP/1.1 provides much better control over
- the caching of negotiated documents, and this directive has no
- effect in responses to HTTP/1.1 requests.</p>
-
- <p>Prior to version 2.0,
- <code class="directive">CacheNegotiatedDocs</code> did not take an
- argument; it was turned on by the presence of the directive by
- itself.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForceLanguagePriority" id="ForceLanguagePriority">ForceLanguagePriority</a> <a name="forcelanguagepriority" id="forcelanguagepriority">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Action to take if a single acceptable document is not
-found</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ForceLanguagePriority Prefer</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later</td></tr>
-</table>
- <p>The <code class="directive">ForceLanguagePriority</code> directive uses
- the given <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> to satisfy
- negotation where the server could otherwise not return a single
- matching document.</p>
-
- <p><code>ForceLanguagePriority Prefer</code> uses
- <code>LanguagePriority</code> to serve a one valid result, rather
- than returning an HTTP result 300 (MULTIPLE CHOICES) when there
- are several equally valid choices. If the directives below were
- given, and the user's <code>Accept-Language</code> header assigned
- <code>en</code> and <code>de</code> each as quality <code>.500</code>
- (equally acceptable) then the first matching variant, <code>en</code>,
- will be served.</p>
-
- <div class="example"><p><code>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Prefer
- </code></p></div>
-
- <p><code>ForceLanguagePriority Fallback</code> uses
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> to
- serve a valid result, rather than returning an HTTP result 406
- (NOT ACCEPTABLE). If the directives below were given, and the user's
- <code>Accept-Language</code> only permitted an <code>es</code>
- language response, but such a variant isn't found, then the first
- variant from the <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> list below will be served.</p>
-
- <div class="example"><p><code>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Fallback
- </code></p></div>
-
- <p>Both options, <code>Prefer</code> and <code>Fallback</code>, may be
- specified, so either the first matching variant from <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> will be served if
- more than one variant is acceptable, or first available document will
- be served if none of the variants matched the client's acceptable list
- of languages.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LanguagePriority" id="LanguagePriority">LanguagePriority</a> <a name="languagepriority" id="languagepriority">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The precendence of language variants for cases where
-the client does not express a preference</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p>The <code class="directive">LanguagePriority</code> sets the precedence
- of language variants for the case where the client does not
- express a preference, when handling a MultiViews request. The list
- of <var>MIME-lang</var> are in order of decreasing preference.</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- LanguagePriority en fr de
- </code></p></div>
-
- <p>For a request for <code>foo.html</code>, where
- <code>foo.html.fr</code> and <code>foo.html.de</code> both
- existed, but the browser did not express a language preference,
- then <code>foo.html.fr</code> would be returned.</p>
-
- <p>Note that this directive only has an effect if a 'best'
- language cannot be determined by any other means or the <code class="directive"><a href="#forcelanguagepriority">ForceLanguagePriority</a></code> directive
- is not <code>None</code>. In general, the client determines the
- language preference, not the server.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_negotiation.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_negotiation.html.ja.euc-jp b/docs/manual/mod/mod_negotiation.html.ja.euc-jp
deleted file mode 100644
index 7e2d5ff28c..0000000000
--- a/docs/manual/mod/mod_negotiation.html.ja.euc-jp
+++ /dev/null
@@ -1,300 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_negotiation - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_negotiation</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td><a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a>
- µ¡Ç½¤òÄ󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>negotiation_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_negotiation.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¡¢¤è¤êÀµ³Î¤Ë¤Ï¥³¥ó¥Æ¥ó¥Ä¤ÎÁªÂòµ¡Ç½¤Ï¡¢
- Ê£¿ôÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥É¥­¥å¥á¥ó¥È¤«¤é¡¢¥¯¥é¥¤¥¢¥ó¥È¤ÎǽÎϤ˰ìÈÖ¹ç¤Ã¤¿
- ¥É¥­¥å¥á¥ó¥È¤òÁªÂò¤¹¤ëµ¡Ç½¤Ç¤¹¡£¤³¤Î¼ÂÁõ¤ÏÆó¤Ä¤¢¤ê¤Þ¤¹¡£</p>
-
- <ul>
- <li>¥¿¥¤¥×¥Þ¥Ã¥× (<code>type-map</code>
- ¥Ï¥ó¥É¥é¤Ç°·¤ï¤ì¤ë¥Õ¥¡¥¤¥ë)¡£¤³¤ì¤Ï variants
- ¤ò´Þ¤ó¤Ç¤¤¤ë¥Õ¥¡¥¤¥ë¤òÌÀ¼¨Åª¤Ë»ØÄꤷ¤Þ¤¹¡£</li>
-
- <li>MultiViews ¤Îõº÷ (<code>MultiViews</code> <code class="directive"><a href="../mod/core.html#option">Option</a></code> ¤ÇÍ­¸ú¤Ë¤Ê¤ê¤Þ¤¹)¡£
- ¥µ¡¼¥Ð¤¬°ÅÌÛ¤ÎÆâ¤Ë¥Õ¥¡¥¤¥ë̾¤Î¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤ò¹Ô¤Ê¤¤¡¢
- ¤½¤Î·ë²Ì¤«¤éÁªÂò¤·¤Þ¤¹¡£</li>
- </ul>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cachenegotiateddocs">CacheNegotiatedDocs</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#forcelanguagepriority">ForceLanguagePriority</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#languagepriority">LanguagePriority</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#typemaps">¥¿¥¤¥×¥Þ¥Ã¥×</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multiviews">MultiViews</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
-<li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li>
-<li><a href="../content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a></li>
-<li><a href="../env.html">´Ä¶­ÊÑ¿ô</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="typemaps" id="typemaps">¥¿¥¤¥×¥Þ¥Ã¥×</a></h2>
- <p>¥¿¥¤¥×¥Þ¥Ã¥×¤Ï RFC 822 ¤Î¥á¡¼¥ë¥Ø¥Ã¥À¤ËÎà»÷¤·¤¿½ñ¼°¤Ç¤¹¡£
- ¥É¥­¥å¥á¥ó¥È¤Îµ­½Ò¤¬¶õ¹Ô¤ÇʬΥ¤µ¤ì¤Æ½ñ¤«¤ì¤Æ¤¤¤Æ¡¢¥Ï¥Ã¥·¥åʸ»ú
- ('#') ¤Ç»Ï¤Þ¤ë¹Ô¤Ï¥³¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
- ¥É¥­¥å¥á¥ó¥È¤ÎÀâÌÀ¤ÏÊ£¿ô¤Î¥Ø¥Ã¥À¥ì¥³¡¼¥É¤«¤é¹½À®¤µ¤ì¤Þ¤¹¡£
- ¥ì¥³¡¼¥É¤Ï¡¢Â³¤­¤Î¹Ô¤¬¶õÇò¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤ë¤ÈÊ£¿ô¤Î¹Ô¤Ë¤Þ¤¿¤¬¤ê¤Þ¤¹¡£
- ºÇ½é¤Î¶õÇò¤¬¾Ãµî¤µ¤ì¤Æ¡¢Á°¤Î¹Ô¤È¤Ä¤Ê¤²¤Æ 1 ¹Ô¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
- ¥Ø¥Ã¥À¥ì¥³¡¼¥É¤Ï¥­¡¼¥ï¡¼¥É̾¤Î¸å¤ËÃͤ¬Â³¤¯¤È¤¤¤¦·Á¼°¤Ç¡¢
- ¥­¡¼¥ï¡¼¥É̾¤Ï¾ï¤Ë¥³¥í¥ó¤Ç½ª¤ï¤ê¤Þ¤¹¡£¶õÇò¤Ï¥Ø¥Ã¥À̾¤ÈÃͤδ֡¢
- ÃͤΥȡ¼¥¯¥ó¤Î´Ö¤ËÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- »ÈÍѲÄǽ¤Ê¥Ø¥Ã¥À¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹:</p>
-
- <dl>
- <dt><code>Content-Encoding:</code></dt>
- <dd>¥Õ¥¡¥¤¥ë¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¡£Apache ¤Ï <code class="directive"><a href="../mod/mod_mime.html#addencoding">AddEncoding</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ÇÄêµÁ¤µ¤ì¤¿¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤À¤±¤òǧ¼±¤·¤Þ¤¹¡£Ä̾ï compress
- ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Î <code>x-compress</code> ¤È gzip
- ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Î <code>x-gzip</code> ¤ò´Þ¤ß¤Þ¤¹¡£
- ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÈæ³Ó¤ò¤¹¤ë¤È¤­¤Ï¡¢ÀÜƬ¼­ <code>x-</code>
- ¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>Content-Language:</code></dt>
- <dd>¥¤¥ó¥¿¡¼¥Í¥Ã¥Èɸ½à¤Î¸À¸ì¥¿¥°
- (<a href="http://www.ietf.org/rfc/rfc1766.txt">RFC 1766</a>)
- ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¸À¸ì¤Î¼ïÎà¡£Î㤨¤Ð¡¢<code>en</code>
- ¤Ï±Ñ¸ì¤òɽ¤·¤Þ¤¹¡£
- Ê£¿ô¤Î¸À¸ì¤¬³ÊǼ¤µ¤ì¤ë¾ì¹ç¤Ï¥³¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>Content-Length:</code></dt>
- <dd>¥Õ¥¡¥¤¥ë¤ÎŤµ (¥Ð¥¤¥È¿ô)¡£
- ¤³¤Î¥Ø¥Ã¥À¤¬¤Ê¤¤¾ì¹ç¡¢¥Õ¥¡¥¤¥ë¤Î¼ÂºÝ¤ÎŤµ¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>Content-Type:</code></dt>
- <dd>¥É¥­¥å¥á¥ó¥È¤Î MIME
- ¥á¥Ç¥£¥¢¥¿¥¤¥×¡¢¥ª¥×¥·¥ç¥Ê¥ë¤Ê¥Ñ¥é¥á¡¼¥¿ÉÕ¤­¡£¥Ñ¥é¥á¡¼¥¿¤Î¹½Ê¸¤Ï
- <code>name=value</code>
- ¤Ç¡¢¥á¥Ç¥£¥¢¥¿¥¤¥×¤ä¾¤Î¥Ñ¥é¥á¡¼¥¿¤È¤Ï¥»¥ß¥³¥í¥ó¤ÇʬΥ¤µ¤ì¤Þ¤¹¡£
- ¶¦Ä̤Υѥé¥á¡¼¥¿¤Ï°Ê²¼¤Î¤È¤ª¤ê:
-
- <dl>
- <dt><code>level</code></dt>
- <dd>¥á¥Ç¥£¥¢¥¿¥¤¥×¤Î¥Ð¡¼¥¸¥ç¥ó¤ò¼¨¤¹À°¿ô¡£
- <code>text/html</code> ¤Ç¤Ï 2 ¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¡¢¤½¤Î¾¤Î¾ì¹ç¤Ï
- 0 ¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤¹¡£</dd>
-
- <dt><code>qs</code></dt>
- <dd>¥¯¥é¥¤¥¢¥ó¥È¤ÎǽÎϤ˴ط¸¤Ê¤¯¡¢variant
- ¤ò¾¤ÈÈæ³Ó¤·¤¿¤È¤­¤ÎÁêÂÐŪ¤Ê¡ÖÉʼÁ¡×¤Ç¡¢0.0 ¤«¤é 1.0
- ¤ÎÈϰϤÎÉâÆ°ÅÀ¾®¿ô¡£
- Î㤨¤Ð¡¢¼Ì¿¿¤òɽ¸½¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤È¤­¤ÏÉáÄÌ¤Ï JPEG
- ¥Õ¥¡¥¤¥ë¤ÎÊý¤¬ ASCII ¥Õ¥¡¥¤¥ë¤è¤ê¤â¹â¤¤ÉʼÁ¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤·¤«¤·¡¢¥ê¥½¡¼¥¹¤¬ ASCII ¥¢¡¼¥È¤Çɽ¸½¤µ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢ASCII
- ¥Õ¥¡¥¤¥ë¤ÎÊý¤¬ JPEG
- ¥Õ¥¡¥¤¥ë¤è¤ê¤â¹â¤¤ÉʼÁ¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ë¡¢<code>qs</code>
- ¤Ï¥ê¥½¡¼¥¹Ëè¤ËÆÃÍ­¤ÎÃͤò¼è¤ê¤Þ¤¹¡£
- </dd>
- </dl>
-
- <div class="example"><h3>Îã</h3><p><code>
- Content-Type: image/jpeg; qs=0.8
- </code></p></div>
- </dd>
-
- <dt><code>URI:</code></dt>
- <dd>(»ØÄê¤Î¥á¥Ç¥£¥¢¥¿¥¤¥×¡¢¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î) variant ¤Î
- ¥Õ¥¡¥¤¥ë¤Î uri. ¤³¤ì¤Ï¡¢¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤«¤é¤ÎÁêÂÐ URL ¤È¤·¤Æ
- ²ò¼á¤µ¤ì¤Þ¤¹¡£Æ±¤¸¥µ¡¼¥Ð¤Ë¸ºß¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬
- ľÀܥꥯ¥¨¥¹¥È¤·¤¿¤È¤­¤Ë¥¢¥¯¥»¥¹¤òµö²Ä¤µ¤ì¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</dd>
-
- <dt><code>Body:</code></dt>
- <dd>Apache 2.0 ¤Ç¿·Àߤµ¤ì¤¿¤³¤Î Body ¥Ø¥Ã¥À¤ò»È¤Ã¤Æ¡¢
- ¥ê¥½¡¼¥¹¤Î¼ÂºÝ¤ÎÆâÍƤò¥¿¥¤¥×¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¥Ø¥Ã¥À¤ÏËÜʸ¤ÎÆâÍƤζèÀÚ¤ê¤È¤Ê¤ëʸ»úÎó¤Ç»Ï¤Þ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¥¿¥¤¥×¥Þ¥Ã¥×¥Õ¥¡¥¤¥ë¤Î³¤¯¹Ô¤Ï¡¢¶èÀÚ¤êʸ»úÎ󤬸«¤Ä¤«¤ë¤Þ¤Ç¡¢
- ¥ê¥½¡¼¥¹¤ÎËÜʸ¤Ë¤Ê¤ê¤Þ¤¹¡£
-
- <div class="example"><h3>Example:</h3><p><code>
- Body:----xyz----<br />
- &lt;html&gt;<br />
- &lt;body&gt;<br />
- &lt;p&gt;Content of the page.&lt;/p&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;<br />
- ----xyz----
- </code></p></div>
- </dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multiviews" id="multiviews">MultiViews</a></h2>
- <p>MultiViews õº÷¤Ï¡¢<code>Multiviews</code> <code class="directive"><a href="../mod/core.html#options">Options</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤êÍ­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤¬ <code>/some/dir/foo</code>
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤ê¡¢<code>/some/dir/foo</code> ¤¬Â¸ºß
- <em>¤·¤Ê¤¤</em>¾ì¹ç¡¢¥µ¡¼¥Ð¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤òÆɤó¤Ç¡¢
- <code>foo.*</code> ¤Ë¤¢¤Æ¤Ï¤Þ¤ëÁ´¤Æ¤Î¥Õ¥¡¥¤¥ë¤òõ¤·¡¢
- »ö¼Â¾å¤½¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤ò¥Þ¥Ã¥×¤¹¤ë¥¿¥¤¥×¥Þ¥Ã¥×¤òºî¤ê¤Þ¤¹¡£
- ¤½¤Î¤È¤­¡¢¥á¥Ç¥£¥¢¥¿¥¤¥×¤È¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ï¡¢
- ¤½¤Î¥Õ¥¡¥¤¥ë̾¤òľÀÜ»ØÄꤷ¤¿¤È¤­¤ÈƱ¤¸¤â¤Î¤¬³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£
- ¤½¤ì¤«¤é¥¯¥é¥¤¥¢¥ó¥È¤ÎÍ×µá¤Ë°ìÈֹ礦¤â¤Î¤òÁª¤Ó¡¢
- ¤½¤Î¥É¥­¥å¥á¥ó¥È¤òÊÖ¤·¤Þ¤¹¡£</p>
-
- <p>¥Õ¥¡¥¤¥ë¤òÁªÂò¤¹¤ëºÝ¤Ë¡¢´ØÏ¢¤¹¤ë¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î
- ¥á¥¿¾ðÊó¤ò»ý¤¿¤Ê¤¤¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤Æ¡¢È½Äê¤ò¹Ô¤¦¤«¤É¤¦¤«¤ò
- <code class="directive"><a href="../mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤Þ¤¹¡£</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CacheNegotiatedDocs" id="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs" id="cachenegotiateddocs">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤ò¥×¥í¥­¥·¥µ¡¼¥Ð¤¬
-¥­¥ã¥Ã¥·¥å¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>CacheNegotiatedDocs On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>CacheNegotiatedDocs Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_negotiation</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥Ð¡¼¥¸¥ç¥ó 2.0¤Ç¹½Ê¸¤¬ÊѤï¤ê¤Þ¤·¤¿</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó
- ¤ò¤·¤¿·ë²Ì¤Î¥É¥­¥å¥á¥ó¥È¤Î¥­¥ã¥Ã¥·¥å¤òµö²Ä¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥×¥í¥­¥·¤Î¸å¤í¤Ë¤¤¤ë¥¯¥é¥¤¥¢¥ó¥È¤¬Ç½ÎϤ˰ìÈÖ¹ç¤Ã¤¿
- ¥É¥­¥å¥á¥ó¥È¤Ç¤Ï¤Ê¤¯¡¢
- ¥­¥ã¥Ã¥·¥å¤ò¤è¤ê¸ú²ÌŪ¤Ë¤¹¤ë¤â¤Î¤òÆÀ¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï HTTP/1.0 ¥Ö¥é¥¦¥¶¤«¤é¤Î¥ê¥¯¥¨¥¹¥È
- ¤Î¤ß¤ËŬÍѤµ¤ì¤Þ¤¹¡£HTTP/1.1 ¤Ï¡¢
- ¸ò¾Ä¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤Î¥­¥ã¥Ã¥·¥å¤ËÂФ·¤Æ¤º¤Ã¤È¤è¤¤À©¸æ¤¬²Äǽ¤Ê¤Î¤Ç¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï HTTP/1.1 ¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤Ï±Æ¶Á¤·¤Þ¤»¤ó¡£</p>
- <p>2.0 ¤è¤êÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢
- <code class="directive">CacheNegotiatedDocs</code> ¤Ï°ú¿ô¤ò¼è¤é¤º¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Â¸ºß¤¹¤ë¤³¤È¤Ç on ¤ÎÆ°ºî¤ò¤·¤Æ¤¤¤Þ¤·¤¿¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ForceLanguagePriority" id="ForceLanguagePriority">ForceLanguagePriority</a> <a name="forcelanguagepriority" id="forcelanguagepriority">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Í×µá¤Ë¹ç¤¦Ã±ÆȤΥɥ­¥å¥á¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ë¹Ô¤Ê¤¦¤³¤È¤ò»ØÄê
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ForceLanguagePriority Prefer</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_negotiation</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¥Ð¡¼¥¸¥ç¥ó 2.0.30 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p><code class="directive">ForceLanguagePriority</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- Í×µá¤Ë¹ç¤¦¥É¥­¥å¥á¥ó¥È¤ò°ì¤Ä¤À¤±ÊÖ¤¹¤³¤È¤¬¤Ç¤­¤Ê¤¤¤È¤­¤Ë¡¢
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î·ë²Ì¤òÊÖ¤·¤Þ¤¹¡£</p>
-
- <p><code>ForceLanguagePriority Prefer</code> ¤Ï¡¢Æ±Åù¤ÎÁªÂò»è¤¬
- ¤¤¤¯¤Ä¤«¤¢¤ë¤È¤­¤Ë¡¢HTTP ¤Î 300 (MULTIPLE CHOICES) ¤òÊÖ¤¹Âå¤ï¤ê¤Ë¡¢
- <code>LanguagePriority</code> ¤ò»È¤Ã¤Æ°ì¤Ä¤À¤±¥É¥­¥å¥á¥ó¥È¤òÊÖ¤¹¤è¤¦¤Ë
- ¤·¤Þ¤¹¡£°Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»ØÄꤵ¤ì¤Æ¤¤¤Æ¡¢¥æ¡¼¥¶¤Î <code>Accept-Language</code>
- ¥Ø¥Ã¥À¤Ç¤Ï <code>en</code> ¤È <code>de</code> ¤ÎÉʼÁ¤¬¶¦¤Ë
- <code>.500</code> (Ʊ¤¸¤¯¤é¤¤µöÍÆ) ¤Ç¤¢¤ë¤È¤­¤Ï¡¢
- ºÇ½é¤Ë¥Þ¥Ã¥Á¤¹¤ë variant ¤Î <code>en</code> ¤¬Á÷¤é¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Prefer
- </code></p></div>
-
- <p><code>ForceLanguagePriority Fallback</code> ¤Ç¤Ï¡¢HTTP 406
- (NOT ACCEPTABLE) ¤òÁ÷¿®¤¹¤ëÂå¤ï¤ê¤Ë¡¢
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code>
- ¤¬Àµ¤·¤¤·ë²Ì¤òÁ÷¤ê¤Þ¤¹¡£
- °Ê²¼¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»ØÄꤵ¤ì¤Æ¤¤¤Æ¡¢¥æ¡¼¥¶¤Î <code>Accept-Language</code>
- ¤¬ <code>es</code> ¸À¸ì¤Î¤ß¤òµö²Ä¤·¤Æ¤¤¤Æ¡¢¤µ¤é¤Ë¤½¤Î¤è¤¦¤Ê variant ¤¬¤Ê¤¤¤È¤­¤Ë¤Ï¡¢
- °Ê²¼¤Î <code class="directive"><a href="#languagepriority">LanguagePriority</a></code>
- ¤Î¥ê¥¹¥È¤ÎºÇ½é¤Î variant ¤¬Á÷¤ì¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Fallback
- </code></p></div>
-
- <p><code>Prefer</code> ¤È <code>Fallback</code> ¤ÎξÊý¤Î¥ª¥×¥·¥ç¥ó¤ò
- Ʊ»þ¤Ë»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢Ê£¿ô¤Î variant ¤¬¤¢¤ë¤È¤­¤Ï
- <code class="directive"><a href="#languagepriority">LanguagePriority</a></code> ¤ÎºÇ½é¤Î
- variant ¤¬Á÷¤é¤ì¡¢¥¯¥é¥¤¥¢¥ó¥È¤ÎµöÍƸÀ¸ì¤Ë¹ç¤¦ vaiant ¤¬¤Ê¤¤¤È¤­¤Ï
- ¸ºß¤¹¤ë¥É¥­¥å¥á¥ó¥È¤ÇºÇ½é¤Î¤â¤Î¤¬Á÷¤é¤ì¤ë¡¢¤È¤¤¤¦Íͤˤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LanguagePriority" id="LanguagePriority">LanguagePriority</a> <a name="languagepriority" id="languagepriority">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¯¥é¥¤¥¢¥ó¥È¤¬Í¥ÀèÅÙ¤ò¼¨¤µ¤Ê¤«¤Ã¤¿¤È¤­¤Î¸À¸ì¤Î variant ¤ÎÍ¥ÀèÅÙ¤ò
-»ØÄê</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_negotiation</td></tr>
-</table>
- <p><code class="directive">LanguagePriority</code> ¤Ï¡¢MultiViews
- ¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¤È¤­¤Ë¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬Í¥Àè½ç°Ì¤òÄ󶡤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Î
- ¸À¸ì¤ÎÍ¥Àè½ç°Ì¤òÀßÄꤷ¤Þ¤¹¡£<var>MIME-lang</var>
- ¤Î¥ê¥¹¥È¤¬Í¥ÀèÅ٤ι߽ç¤ËʤӤޤ¹¡£</p>
-
- <div class="example"><h3>Example:</h3><p><code>
- LanguagePriority en fr de
- </code></p></div>
-
- <p><code>foo.html</code> ¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¡¢<code>foo.html.fr</code>
- ¤È <code>foo.html.de</code> ¤¬Î¾Êý¸ºß¤·¡¢
- ¥Ö¥é¥¦¥¶¤¬¸À¸ì¤ÎÍ¥Àè½ç°Ì¤òÄ󶡤·¤Æ¤Ê¤¤¾ì¹ç¤Ï
- <code>foo.html.fr</code> ¤¬ÊÖ¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¾¤ÎÊýË¡¤Ç¡ÖºÇÁ±¡×
- ¤Î¸À¸ì¤¬·èÄê¤Ç¤­¤Ê¤¤¤È¤­¤«¡¢<code class="directive"><a href="#forcelanguagepriority">ForceLanguagePriority</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
- <code>None</code> °Ê³°¤Î¤È¤­¤Ë¤Î¤ß¸ú²Ì¤¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- °ìÈÌŪ¤Ë¤Ï¡¢¥µ¡¼¥Ð¦¤Ç¤Ï¤Ê¤¯¥¯¥é¥¤¥¢¥ó¥È¦¤Ç¹¥¤ß¤Î¸À¸ì¤ò·èÄꤷ¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="../mod/mod_mime.html#addlanguage">AddLanguage</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_negotiation.xml b/docs/manual/mod/mod_negotiation.xml
deleted file mode 100644
index d2fb220196..0000000000
--- a/docs/manual/mod/mod_negotiation.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.16 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_negotiation.xml.meta">
-
-<name>mod_negotiation</name>
-<description>Provides for <a
- href="../content-negotiation.html">content negotiation</a></description>
-<status>Base</status>
-<sourcefile>mod_negotiation.c</sourcefile>
-<identifier>negotiation_module</identifier>
-
-<summary>
- <p>Content negotiation, or more accurately content selection, is
- the selection of the document that best matches the clients
- capabilities, from one of several available documents. There
- are two implementations of this.</p>
-
- <ul>
- <li>A type map (a file with the handler
- <code>type-map</code>) which explicitly lists the files
- containing the variants.</li>
-
- <li>A MultiViews search (enabled by the <code>MultiViews</code>
- <directive module="core">Options</directive>), where the server does
- an implicit filename pattern match, and choose from amongst the
- results.</li>
- </ul>
-</summary>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><module>mod_mime</module></seealso>
-<seealso><a href="../content-negotiation.html">Content
-Negotiation</a></seealso>
-<seealso><a href="../env.html">Environment Variables</a></seealso>
-
-<section id="typemaps"><title>Type maps</title>
- <p>A type map has a format similar to RFC822 mail headers. It
- contains document descriptions separated by blank lines, with
- lines beginning with a hash character ('#') treated as
- comments. A document description consists of several header
- records; records may be continued on multiple lines if the
- continuation lines start with spaces. The leading space will be
- deleted and the lines concatenated. A header record consists of
- a keyword name, which always ends in a colon, followed by a
- value. Whitespace is allowed between the header name and value,
- and between the tokens of value. The headers allowed are: </p>
-
- <dl>
- <dt><code>Content-Encoding:</code></dt>
- <dd>The encoding of the file. Apache only recognizes
- encodings that are defined by an <directive
- module="mod_mime">AddEncoding</directive> directive.
- This normally includes the encodings <code>x-compress</code>
- for compress'd files, and <code>x-gzip</code> for gzip'd
- files. The <code>x-</code> prefix is ignored for encoding
- comparisons.</dd>
-
- <dt><code>Content-Language:</code></dt>
- <dd>The language(s) of the variant, as an Internet standard
- language tag (<a href="http://www.ietf.org/rfc/rfc1766.txt"
- >RFC 1766</a>). An example is <code>en</code>,
- meaning English. If the variant contains more than one
- language, they are separated by a comma.</dd>
-
- <dt><code>Content-Length:</code></dt>
- <dd>The length of the file, in bytes. If this header is not
- present, then the actual length of the file is used.</dd>
-
- <dt><code>Content-Type:</code></dt>
-
- <dd>
- The MIME media type of the document, with optional
- parameters. Parameters are separated from the media type
- and from one another by a semi-colon, with a syntax of
- <code>name=value</code>. Common parameters include:
-
- <dl>
- <dt><code>level</code></dt>
- <dd>an integer specifying the version of the media type.
- For <code>text/html</code> this defaults to 2, otherwise
- 0.</dd>
-
- <dt><code>qs</code></dt>
- <dd>a floating-point number with a value in the range 0.0
- to 1.0, indicating the relative 'quality' of this variant
- compared to the other available variants, independent of
- the client's capabilities. For example, a jpeg file is
- usually of higher source quality than an ascii file if it
- is attempting to represent a photograph. However, if the
- resource being represented is ascii art, then an ascii
- file would have a higher source quality than a jpeg file.
- All <code>qs</code> values are therefore specific to a given
- resource.</dd>
- </dl>
-
- <example><title>Example</title>
- Content-Type: image/jpeg; qs=0.8
- </example>
- </dd>
-
- <dt><code>URI:</code></dt>
- <dd>uri of the file containing the variant (of the given
- media type, encoded with the given content encoding). These
- are interpreted as URLs relative to the map file; they must
- be on the same server (!), and they must refer to files to
- which the client would be granted access if they were to be
- requested directly.</dd>
-
- <dt><code>Body:</code></dt>
- <dd>New in Apache 2.0, the actual content of the resource may
- be included in the type-map file using the Body header. This
- header must contain a string that designates a delimiter for
- the body content. Then all following lines in the type map
- file will be considered part of the resource body until the
- delimiter string is found.
-
- <example><title>Example:</title>
- Body:----xyz----<br />
- &lt;html&gt;<br />
- &lt;body&gt;<br />
- &lt;p&gt;Content of the page.&lt;/p&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;<br />
- ----xyz----
- </example>
- </dd>
- </dl>
-</section>
-
-<section id="multiviews"><title>MultiViews</title>
- <p>A MultiViews search is enabled by the <code>MultiViews</code>
- <directive module="core">Options</directive>. If the server receives a
- request for <code>/some/dir/foo</code> and
- <code>/some/dir/foo</code> does <em>not</em> exist, then the
- server reads the directory looking for all files named
- <code>foo.*</code>, and effectively fakes up a type map which
- names all those files, assigning them the same media types and
- content-encodings it would have if the client had asked for one
- of them by name. It then chooses the best match to the client's
- requirements, and returns that document.</p>
-
- <p>The <directive module="mod_mime">MultiViewsMatch</directive>
- directive configures whether Apache will consider files
- that do not have content negotiation meta-information assigned
- to them when choosing files.</p>
-</section>
-
-<directivesynopsis>
-<name>CacheNegotiatedDocs</name>
-<description>Allows content-negotiated documents to be
-cached by proxy servers</description>
-<syntax>CacheNegotiatedDocs On|Off</syntax>
-<default>CacheNegotiatedDocs Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>The syntax changed in version 2.0.</compatibility>
-
-<usage>
- <p>If set, this directive allows content-negotiated documents
- to be cached by proxy servers. This could mean that clients
- behind those proxys could retrieve versions of the documents
- that are not the best match for their abilities, but it will
- make caching more efficient.</p>
-
- <p>This directive only applies to requests which come from
- HTTP/1.0 browsers. HTTP/1.1 provides much better control over
- the caching of negotiated documents, and this directive has no
- effect in responses to HTTP/1.1 requests.</p>
-
- <p>Prior to version 2.0,
- <directive>CacheNegotiatedDocs</directive> did not take an
- argument; it was turned on by the presence of the directive by
- itself.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceLanguagePriority</name>
-<description>Action to take if a single acceptable document is not
-found</description>
-<syntax>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</syntax>
-<default>ForceLanguagePriority Prefer</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Available in version 2.0.30 and later</compatibility>
-
-<usage>
- <p>The <directive>ForceLanguagePriority</directive> directive uses
- the given <directive
- module="mod_negotiation">LanguagePriority</directive> to satisfy
- negotation where the server could otherwise not return a single
- matching document.</p>
-
- <p><code>ForceLanguagePriority Prefer</code> uses
- <code>LanguagePriority</code> to serve a one valid result, rather
- than returning an HTTP result 300 (MULTIPLE CHOICES) when there
- are several equally valid choices. If the directives below were
- given, and the user's <code>Accept-Language</code> header assigned
- <code>en</code> and <code>de</code> each as quality <code>.500</code>
- (equally acceptable) then the first matching variant, <code>en</code>,
- will be served.</p>
-
- <example>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Prefer
- </example>
-
- <p><code>ForceLanguagePriority Fallback</code> uses
- <directive module="mod_negotiation">LanguagePriority</directive> to
- serve a valid result, rather than returning an HTTP result 406
- (NOT ACCEPTABLE). If the directives below were given, and the user's
- <code>Accept-Language</code> only permitted an <code>es</code>
- language response, but such a variant isn't found, then the first
- variant from the <directive module="mod_negotiation"
- >LanguagePriority</directive> list below will be served.</p>
-
- <example>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Fallback
- </example>
-
- <p>Both options, <code>Prefer</code> and <code>Fallback</code>, may be
- specified, so either the first matching variant from <directive
- module="mod_negotiation">LanguagePriority</directive> will be served if
- more than one variant is acceptable, or first available document will
- be served if none of the variants matched the client's acceptable list
- of languages.</p>
-</usage>
-<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LanguagePriority</name>
-<description>The precendence of language variants for cases where
-the client does not express a preference</description>
-<syntax>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>LanguagePriority</directive> sets the precedence
- of language variants for the case where the client does not
- express a preference, when handling a MultiViews request. The list
- of <var>MIME-lang</var> are in order of decreasing preference.</p>
-
- <example><title>Example:</title>
- LanguagePriority en fr de
- </example>
-
- <p>For a request for <code>foo.html</code>, where
- <code>foo.html.fr</code> and <code>foo.html.de</code> both
- existed, but the browser did not express a language preference,
- then <code>foo.html.fr</code> would be returned.</p>
-
- <p>Note that this directive only has an effect if a 'best'
- language cannot be determined by any other means or the <directive
- module="mod_negotiation">ForceLanguagePriority</directive> directive
- is not <code>None</code>. In general, the client determines the
- language preference, not the server.</p>
-</usage>
-<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_negotiation.xml.ja b/docs/manual/mod/mod_negotiation.xml.ja
deleted file mode 100644
index ab6b708f6a..0000000000
--- a/docs/manual/mod/mod_negotiation.xml.ja
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.16 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_negotiation.xml.meta">
-
-<name>mod_negotiation</name>
-<description><a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>
- $B5!G=$rDs6!$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_negotiation.c</sourcefile>
-<identifier>negotiation_module</identifier>
-
-<summary>
- <p>$B%3%s%F%s%H%M%4%7%(!<%7%g%s!"$h$j@53N$K$O%3%s%F%s%D$NA*Br5!G=$O!"(B
- $BJ#?tMQ0U$5$l$F$$$k%I%-%e%a%s%H$+$i!"%/%i%$%"%s%H$NG=NO$K0lHV9g$C$?(B
- $B%I%-%e%a%s%H$rA*Br$9$k5!G=$G$9!#$3$N<BAu$OFs$D$"$j$^$9!#(B</p>
-
- <ul>
- <li>$B%?%$%W%^%C%W(B (<code>type-map</code>
- $B%O%s%I%i$G07$o$l$k%U%!%$%k(B)$B!#$3$l$O(B variants
- $B$r4^$s$G$$$k%U%!%$%k$rL@<(E*$K;XDj$7$^$9!#(B</li>
-
- <li>MultiViews $B$NC5:w(B (<code>MultiViews</code> <directive
- module="core">Option</directive> $B$GM-8z$K$J$j$^$9(B)$B!#(B
- $B%5!<%P$,0EL[$NFb$K%U%!%$%kL>$N%Q%?!<%s%^%C%A$r9T$J$$!"(B
- $B$=$N7k2L$+$iA*Br$7$^$9!#(B</li>
- </ul>
-</summary>
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><module>mod_mime</module></seealso>
-<seealso><a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a></seealso>
-<seealso><a href="../env.html">$B4D6-JQ?t(B</a></seealso>
-
-<section id="typemaps"><title>$B%?%$%W%^%C%W(B</title>
- <p>$B%?%$%W%^%C%W$O(B RFC 822 $B$N%a!<%k%X%C%@$KN`;w$7$?=q<0$G$9!#(B
- $B%I%-%e%a%s%H$N5-=R$,6u9T$GJ,N%$5$l$F=q$+$l$F$$$F!"%O%C%7%eJ8;z(B
- ('#') $B$G;O$^$k9T$O%3%a%s%H$H$7$F07$o$l$^$9!#(B
- $B%I%-%e%a%s%H$N@bL@$OJ#?t$N%X%C%@%l%3!<%I$+$i9=@.$5$l$^$9!#(B
- $B%l%3!<%I$O!"B3$-$N9T$,6uGr$G;O$^$C$F$$$k$HJ#?t$N9T$K$^$?$,$j$^$9!#(B
- $B:G=i$N6uGr$,>C5n$5$l$F!"A0$N9T$H$D$J$2$F(B 1 $B9T$H$7$F07$o$l$^$9!#(B
- $B%X%C%@%l%3!<%I$O%-!<%o!<%IL>$N8e$KCM$,B3$/$H$$$&7A<0$G!"(B
- $B%-!<%o!<%IL>$O>o$K%3%m%s$G=*$o$j$^$9!#6uGr$O%X%C%@L>$HCM$N4V!"(B
- $BCM$N%H!<%/%s$N4V$KF~$l$k$3$H$,$G$-$^$9!#(B
- $B;HMQ2DG=$J%X%C%@$O0J2<$N$H$*$j$G$9(B:</p>
-
- <dl>
- <dt><code>Content-Encoding:</code></dt>
- <dd>$B%U%!%$%k$N%(%s%3!<%G%#%s%0!#(BApache $B$O(B <directive
- module="mod_mime">AddEncoding</directive> $B%G%#%l%/%F%#%V(B
- $B$GDj5A$5$l$?%(%s%3!<%G%#%s%0$@$1$rG'<1$7$^$9!#DL>o(B compress
- $B$5$l$?%U%!%$%k$N$?$a$N(B <code>x-compress</code> $B$H(B gzip
- $B$5$l$?%U%!%$%k$N$?$a$N(B <code>x-gzip</code> $B$r4^$_$^$9!#(B
- $B%(%s%3!<%G%#%s%0$NHf3S$r$9$k$H$-$O!"@\F,<-(B <code>x-</code>
- $B$OL5;k$5$l$^$9!#(B</dd>
-
- <dt><code>Content-Language:</code></dt>
- <dd>$B%$%s%?!<%M%C%HI8=`$N8@8l%?%0(B
- (<a href="http://www.ietf.org/rfc/rfc1766.txt">RFC 1766</a>)
- $B$GDj5A$5$l$F$$$k8@8l$N<oN`!#Nc$($P!"(B<code>en</code>
- $B$O1Q8l$rI=$7$^$9!#(B
- $BJ#?t$N8@8l$,3JG<$5$l$k>l9g$O%3%s%^$G6h@Z$i$l$^$9!#(B</dd>
-
- <dt><code>Content-Length:</code></dt>
- <dd>$B%U%!%$%k$ND9$5(B ($B%P%$%H?t(B)$B!#(B
- $B$3$N%X%C%@$,$J$$>l9g!"%U%!%$%k$N<B:]$ND9$5$,;HMQ$5$l$^$9!#(B</dd>
-
- <dt><code>Content-Type:</code></dt>
- <dd>$B%I%-%e%a%s%H$N(B MIME
- $B%a%G%#%"%?%$%W!"%*%W%7%g%J%k$J%Q%i%a!<%?IU$-!#%Q%i%a!<%?$N9=J8$O(B
- <code>name=value</code>
- $B$G!"%a%G%#%"%?%$%W$dB>$N%Q%i%a!<%?$H$O%;%_%3%m%s$GJ,N%$5$l$^$9!#(B
- $B6&DL$N%Q%i%a!<%?$O0J2<$N$H$*$j(B:
-
- <dl>
- <dt><code>level</code></dt>
- <dd>$B%a%G%#%"%?%$%W$N%P!<%8%g%s$r<($9@0?t!#(B
- <code>text/html</code> $B$G$O(B 2 $B$,%G%U%)%k%H$G!"$=$NB>$N>l9g$O(B
- 0 $B$,%G%U%)%k%H$G$9!#(B</dd>
-
- <dt><code>qs</code></dt>
- <dd>$B%/%i%$%"%s%H$NG=NO$K4X78$J$/!"(Bvariant
- $B$rB>$HHf3S$7$?$H$-$NAjBPE*$J!VIJ<A!W$G!"(B0.0 $B$+$i(B 1.0
- $B$NHO0O$NIbF0E@>.?t!#(B
- $BNc$($P!"<L??$rI=8=$7$h$&$H$7$F$$$k$H$-$OIaDL$O(B JPEG
- $B%U%!%$%k$NJ}$,(B ASCII $B%U%!%$%k$h$j$b9b$$IJ<A$K$J$j$^$9!#(B
- $B$7$+$7!"%j%=!<%9$,(B ASCII $B%"!<%H$GI=8=$5$l$F$$$k$H$-$O!"(BASCII
- $B%U%!%$%k$NJ}$,(B JPEG
- $B%U%!%$%k$h$j$b9b$$IJ<A$K$J$j$^$9!#$3$N$h$&$K!"(B<code>qs</code>
- $B$O%j%=!<%9Kh$KFCM-$NCM$r<h$j$^$9!#(B
- </dd>
- </dl>
-
- <example><title>$BNc(B</title>
- Content-Type: image/jpeg; qs=0.8
- </example>
- </dd>
-
- <dt><code>URI:</code></dt>
- <dd>($B;XDj$N%a%G%#%"%?%$%W!"%3%s%F%s%H%(%s%3!<%G%#%s%0$N(B) variant $B$N(B
- $B%U%!%$%k$N(B uri. $B$3$l$O!"%^%C%W%U%!%$%k$+$i$NAjBP(B URL $B$H$7$F(B
- $B2r<a$5$l$^$9!#F1$8%5!<%P$KB8:_$7$J$1$l$P$J$i$:!"%/%i%$%"%s%H$,(B
- $BD>@\%j%/%(%9%H$7$?$H$-$K%"%/%;%9$r5v2D$5$l$k$b$N$G$J$1$l$P$J$j$^$;$s!#(B</dd>
-
- <dt><code>Body:</code></dt>
- <dd>Apache 2.0 $B$G?7@_$5$l$?$3$N(B Body $B%X%C%@$r;H$C$F!"(B
- $B%j%=!<%9$N<B:]$NFbMF$r%?%$%W%^%C%W%U%!%$%k$K=q$/$3$H$,$G$-$^$9!#(B
- $B$3$N%X%C%@$OK\J8$NFbMF$N6h@Z$j$H$J$kJ8;zNs$G;O$^$kI,MW$,$"$j$^$9!#(B
- $B%?%$%W%^%C%W%U%!%$%k$NB3$/9T$O!"6h@Z$jJ8;zNs$,8+$D$+$k$^$G!"(B
- $B%j%=!<%9$NK\J8$K$J$j$^$9!#(B
-
- <example><title>Example:</title>
- Body:----xyz----<br />
- &lt;html&gt;<br />
- &lt;body&gt;<br />
- &lt;p&gt;Content of the page.&lt;/p&gt;<br />
- &lt;/body&gt;<br />
- &lt;/html&gt;<br />
- ----xyz----
- </example>
- </dd>
- </dl>
-</section>
-
-<section id="multiviews"><title>MultiViews</title>
- <p>MultiViews $BC5:w$O!"(B<code>Multiviews</code> <directive
- module="core">Options</directive> $B%G%#%l%/%F%#%V$K$h$jM-8z$K$J$j$^$9!#(B
- $B%5!<%P$,(B <code>/some/dir/foo</code>
- $B$X$N%j%/%(%9%H$r<u$1<h$j!"(B<code>/some/dir/foo</code> $B$,B8:_(B
- <em>$B$7$J$$(B</em>$B>l9g!"%5!<%P$O%G%#%l%/%H%j$rFI$s$G!"(B
- <code>foo.*</code> $B$K$"$F$O$^$kA4$F$N%U%!%$%k$rC5$7!"(B
- $B;v<B>e$=$l$i$N%U%!%$%k$r%^%C%W$9$k%?%$%W%^%C%W$r:n$j$^$9!#(B
- $B$=$N$H$-!"%a%G%#%"%?%$%W$H%3%s%F%s%H%(%s%3!<%G%#%s%0$O!"(B
- $B$=$N%U%!%$%kL>$rD>@\;XDj$7$?$H$-$HF1$8$b$N$,3d$jEv$F$i$l$^$9!#(B
- $B$=$l$+$i%/%i%$%"%s%H$NMW5a$K0lHV9g$&$b$N$rA*$S!"(B
- $B$=$N%I%-%e%a%s%H$rJV$7$^$9!#(B</p>
-
- <p>$B%U%!%$%k$rA*Br$9$k:]$K!"4XO"$9$k%3%s%F%s%H%M%4%7%(!<%7%g%s$N(B
- $B%a%?>pJs$r;}$?$J$$%U%!%$%k$K$D$$$F!"H=Dj$r9T$&$+$I$&$+$r(B
- <directive module="mod_mime">MultiViewsMatch</directive>
- $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B</p>
-</section>
-
-<directivesynopsis>
-<name>CacheNegotiatedDocs</name>
-<description>$B%3%s%F%s%H%M%4%7%(!<%7%g%s$5$l$?%I%-%e%a%s%H$r%W%m%-%7%5!<%P$,(B
-$B%-%c%C%7%e$G$-$k$h$&$K$9$k(B</description>
-<syntax>CacheNegotiatedDocs On|Off</syntax>
-<default>CacheNegotiatedDocs Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<compatibility>$B%P!<%8%g%s(B 2.0$B$G9=J8$,JQ$o$j$^$7$?(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$,@_Dj$5$l$F$$$k$H!"%3%s%F%s%H%M%4%7%(!<%7%g%s(B
- $B$r$7$?7k2L$N%I%-%e%a%s%H$N%-%c%C%7%e$r5v2D$7$^$9!#(B
- $B$3$l$O!"%W%m%-%7$N8e$m$K$$$k%/%i%$%"%s%H$,G=NO$K0lHV9g$C$?(B
- $B%I%-%e%a%s%H$G$O$J$/!"(B
- $B%-%c%C%7%e$r$h$j8z2LE*$K$9$k$b$N$rF@$k2DG=@-$,$"$k$H$$$&$3$H$G$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$O(B HTTP/1.0 $B%V%i%&%6$+$i$N%j%/%(%9%H(B
- $B$N$_$KE,MQ$5$l$^$9!#(BHTTP/1.1 $B$O!"(B
- $B8r>D$5$l$?%I%-%e%a%s%H$N%-%c%C%7%e$KBP$7$F$:$C$H$h$$@)8f$,2DG=$J$N$G!"(B
- $B$3$N%G%#%l%/%F%#%V$O(B HTTP/1.1 $B$N%j%/%(%9%H$K$O1F6A$7$^$;$s!#(B</p>
- <p>2.0 $B$h$jA0$N%P!<%8%g%s$G$O!"(B
- <directive>CacheNegotiatedDocs</directive> $B$O0z?t$r<h$i$:!"(B
- $B%G%#%l%/%F%#%V$,B8:_$9$k$3$H$G(B on $B$NF0:n$r$7$F$$$^$7$?!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceLanguagePriority</name>
-<description>$BMW5a$K9g$&C1FH$N%I%-%e%a%s%H$,8+$D$+$i$J$+$C$?$H$-$K9T$J$&$3$H$r;XDj(B
-</description>
-<syntax>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</syntax>
-<default>ForceLanguagePriority Prefer</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>$B%P!<%8%g%s(B 2.0.30 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p><directive>ForceLanguagePriority</directive> $B%G%#%l%/%F%#%V$O(B
- $BMW5a$K9g$&%I%-%e%a%s%H$r0l$D$@$1JV$9$3$H$,$G$-$J$$$H$-$K!"(B
- <directive module="mod_negotiation">LanguagePriority</directive>
- $B%G%#%l%/%F%#%V$r;H$C$F%M%4%7%(!<%7%g%s$N7k2L$rJV$7$^$9!#(B</p>
-
- <p><code>ForceLanguagePriority Prefer</code> $B$O!"F1Ey$NA*Br;h$,(B
- $B$$$/$D$+$"$k$H$-$K!"(BHTTP $B$N(B 300 (MULTIPLE CHOICES) $B$rJV$9Be$o$j$K!"(B
- <code>LanguagePriority</code> $B$r;H$C$F0l$D$@$1%I%-%e%a%s%H$rJV$9$h$&$K(B
- $B$7$^$9!#0J2<$N%G%#%l%/%F%#%V$,;XDj$5$l$F$$$F!"%f!<%6$N(B <code>Accept-Language</code>
- $B%X%C%@$G$O(B <code>en</code> $B$H(B <code>de</code> $B$NIJ<A$,6&$K(B
- <code>.500</code> ($BF1$8$/$i$$5vMF(B) $B$G$"$k$H$-$O!"(B
- $B:G=i$K%^%C%A$9$k(B variant $B$N(B <code>en</code> $B$,Aw$i$l$^$9!#(B</p>
-
- <example>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Prefer
- </example>
-
- <p><code>ForceLanguagePriority Fallback</code> $B$G$O!"(BHTTP 406
- (NOT ACCEPTABLE) $B$rAw?.$9$kBe$o$j$K!"(B
- <directive module="mod_negotiation">LanguagePriority</directive>
- $B$,@5$7$$7k2L$rAw$j$^$9!#(B
- $B0J2<$N%G%#%l%/%F%#%V$,;XDj$5$l$F$$$F!"%f!<%6$N(B <code>Accept-Language</code>
- $B$,(B <code>es</code> $B8@8l$N$_$r5v2D$7$F$$$F!"$5$i$K$=$N$h$&$J(B variant $B$,$J$$$H$-$K$O!"(B
- $B0J2<$N(B <directive module="mod_negotiation">LanguagePriority</directive>
- $B$N%j%9%H$N:G=i$N(B variant $B$,Aw$l$l$^$9!#(B</p>
-
- <example>
- LanguagePriority en fr de<br />
- ForceLanguagePriority Fallback
- </example>
-
- <p><code>Prefer</code> $B$H(B <code>Fallback</code> $B$NN>J}$N%*%W%7%g%s$r(B
- $BF1;~$K;XDj$9$k$3$H$,$G$-$^$9!#(B
- $B$G$9$+$i!"J#?t$N(B variant $B$,$"$k$H$-$O(B
- <directive module="mod_negotiation">LanguagePriority</directive> $B$N:G=i$N(B
- variant $B$,Aw$i$l!"%/%i%$%"%s%H$N5vMF8@8l$K9g$&(B vaiant $B$,$J$$$H$-$O(B
- $BB8:_$9$k%I%-%e%a%s%H$G:G=i$N$b$N$,Aw$i$l$k!"$H$$$&MM$K$9$k$3$H$,$G$-$^$9!#(B</p>
-</usage>
-<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LanguagePriority</name>
-<description>$B%/%i%$%"%s%H$,M%@hEY$r<($5$J$+$C$?$H$-$N8@8l$N(B variant $B$NM%@hEY$r(B
-$B;XDj(B</description>
-<syntax>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>LanguagePriority</directive> $B$O!"(BMultiViews
- $B%j%/%(%9%H$r07$&$H$-$K!"%/%i%$%"%s%H$,M%@h=g0L$rDs6!$7$F$$$J$$>l9g$N(B
- $B8@8l$NM%@h=g0L$r@_Dj$7$^$9!#(B<var>MIME-lang</var>
- $B$N%j%9%H$,M%@hEY$N9_=g$KJB$S$^$9!#(B</p>
-
- <example><title>Example:</title>
- LanguagePriority en fr de
- </example>
-
- <p><code>foo.html</code> $B$,%j%/%(%9%H$5$l!"(B<code>foo.html.fr</code>
- $B$H(B <code>foo.html.de</code> $B$,N>J}B8:_$7!"(B
- $B%V%i%&%6$,8@8l$NM%@h=g0L$rDs6!$7$F$J$$>l9g$O(B
- <code>foo.html.fr</code> $B$,JV$5$l$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$OB>$NJ}K!$G!V:GA1!W(B
- $B$N8@8l$,7hDj$G$-$J$$$H$-$+!"(B<directive
- module="mod_negotiation">ForceLanguagePriority</directive> $B%G%#%l%/%F%#%V$,(B
- <code>None</code> $B0J30$N$H$-$K$N$_8z2L$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B0lHLE*$K$O!"%5!<%PB&$G$O$J$/%/%i%$%"%s%HB&$G9%$_$N8@8l$r7hDj$7$^$9!#(B</p>
-</usage>
-<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_negotiation.xml.meta b/docs/manual/mod/mod_negotiation.xml.meta
deleted file mode 100644
index 0b53951696..0000000000
--- a/docs/manual/mod/mod_negotiation.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_negotiation</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_nw_ssl.html b/docs/manual/mod/mod_nw_ssl.html
deleted file mode 100644
index 24adb0f8f0..0000000000
--- a/docs/manual/mod/mod_nw_ssl.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_nw_ssl.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_nw_ssl.html.en b/docs/manual/mod/mod_nw_ssl.html.en
deleted file mode 100644
index 51489bb0c3..0000000000
--- a/docs/manual/mod/mod_nw_ssl.html.en
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_nw_ssl - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_nw_ssl</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_nw_ssl.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Enable SSL encryption for NetWare</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>nwssl_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_nw_ssl.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>NetWare only</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module enables SSL encryption for a specified port. It
- takes advantage of the SSL encryption functionality that is
- built into the NetWare operating system.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#nwssltrustedcerts">NWSSLTrustedCerts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#nwsslupgradeable">NWSSLUpgradeable</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#securelisten">SecureListen</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NWSSLTrustedCerts" id="NWSSLTrustedCerts">NWSSLTrustedCerts</a> <a name="nwssltrustedcerts" id="nwssltrustedcerts">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>List of additional client certificates</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_nw_ssl</td></tr>
-</table>
- <p>Specifies a list of client certificate files (DER format)
- that are used when creating a proxied SSL connection. Each
- client certificate used by a server must be listed separately
- in its own <code>.der</code> file.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NWSSLUpgradeable" id="NWSSLUpgradeable">NWSSLUpgradeable</a> <a name="nwsslupgradeable" id="nwsslupgradeable">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allows a connection to be upgraded to an SSL connection upon request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_nw_ssl</td></tr>
-</table>
- <p>Allow a connection that was created on the specified address
- and/or port to be upgraded to an SSL connection upon request from
- the client. The address and/or port must have already be defined
- previously with a <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- directive.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SecureListen" id="SecureListen">SecureListen</a> <a name="securelisten" id="securelisten">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables SSL encryption for the specified port</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_nw_ssl</td></tr>
-</table>
- <p>Specifies the port and the eDirectory based certificate name
- that will be used to enable SSL encryption. An optional third
- parameter also enables mutual authentication.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_nw_ssl.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_nw_ssl.xml b/docs/manual/mod/mod_nw_ssl.xml
deleted file mode 100644
index 8a7283c746..0000000000
--- a/docs/manual/mod/mod_nw_ssl.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_nw_ssl.xml.meta">
-
-<name>mod_nw_ssl</name>
-<description>Enable SSL encryption for NetWare</description>
-<status>Base</status>
-<sourcefile>mod_nw_ssl.c</sourcefile>
-<identifier>nwssl_module</identifier>
-<compatibility>NetWare only</compatibility>
-
-<summary>
- <p>This module enables SSL encryption for a specified port. It
- takes advantage of the SSL encryption functionality that is
- built into the NetWare operating system.</p>
-</summary>
-
-<directivesynopsis>
-<name>SecureListen</name>
-<description>Enables SSL encryption for the specified port</description>
-<syntax>SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies the port and the eDirectory based certificate name
- that will be used to enable SSL encryption. An optional third
- parameter also enables mutual authentication.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NWSSLTrustedCerts</name>
-<description>List of additional client certificates</description>
-<syntax>NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specifies a list of client certificate files (DER format)
- that are used when creating a proxied SSL connection. Each
- client certificate used by a server must be listed separately
- in its own <code>.der</code> file.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NWSSLUpgradeable</name>
-<description>Allows a connection to be upgraded to an SSL connection upon request</description>
-<syntax>NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Allow a connection that was created on the specified address
- and/or port to be upgraded to an SSL connection upon request from
- the client. The address and/or port must have already be defined
- previously with a <directive module="mpm_common">Listen</directive>
- directive.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_nw_ssl.xml.meta b/docs/manual/mod/mod_nw_ssl.xml.meta
deleted file mode 100644
index aee1060afb..0000000000
--- a/docs/manual/mod/mod_nw_ssl.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_nw_ssl</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_proxy.html b/docs/manual/mod/mod_proxy.html
deleted file mode 100644
index c611e80c85..0000000000
--- a/docs/manual/mod/mod_proxy.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_proxy.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_proxy.html.en b/docs/manual/mod/mod_proxy.html.en
deleted file mode 100644
index eb0ec38783..0000000000
--- a/docs/manual/mod/mod_proxy.html.en
+++ /dev/null
@@ -1,1042 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_proxy - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_proxy</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>HTTP/1.1 proxy/gateway server</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning"><h3>Warning</h3>
- <p>Do not enable proxying with <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> until you have <a href="#access">secured your server</a>. Open proxy servers are dangerous both to your
- network and to the Internet at large.</p>
- </div>
-
- <p>This module implements a proxy/gateway for Apache. It implements
- proxying capability for <code>FTP</code>, <code>CONNECT</code> (for SSL),
- <code>HTTP/0.9</code>, <code>HTTP/1.0</code>, and <code>HTTP/1.1</code>.
- The module can be configured to connect to other proxy modules for these
- and other protocols.</p>
-
- <p>Apache's proxy features are divided into several modules in
- addition to <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>:
- <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>, <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>
- and <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code>. Thus, if you want to use
- one or more of the particular proxy functions, load
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> <em>and</em> the appropriate module(s)
- into the server (either statically at compile-time or dynamically
- via the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
- directive).</p>
-
- <p>In addition, extended features are provided by other modules.
- Caching is provided by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> and related
- modules. The ability to contact remote servers using the SSL/TLS
- protocol is provided by the <code>SSLProxy*</code> directives of
- <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. These additional modules will need
- to be loaded and configured to take advantage of these features.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#allowconnect">AllowCONNECT</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#noproxy">NoProxy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxy">&lt;Proxy&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxybadheader">ProxyBadHeader</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyblock">ProxyBlock</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxydomain">ProxyDomain</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyerroroverride">ProxyErrorOverride</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxymatch">&lt;ProxyMatch&gt;</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxymaxforwards">ProxyMaxForwards</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxypass">ProxyPass</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreverse">ProxyPassReverse</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxypreservehost">ProxyPreserveHost</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyremote">ProxyRemote</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyremotematch">ProxyRemoteMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyrequests">ProxyRequests</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxytimeout">ProxyTimeout</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#proxyvia">ProxyVia</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#forwardreverse">Forward and Reverse Proxies</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Basic Examples</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#access">Controlling access to your proxy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ftp-proxy">FTP Proxy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startup">Slow Startup</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#intranet">Intranet Proxy</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#envsettings">Protocol Adjustments</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li>
-<li><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></li>
-<li><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></li>
-<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li>
-<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="forwardreverse" id="forwardreverse">Forward and Reverse Proxies</a></h2>
- <p>Apache can be configured in both a <dfn>forward</dfn> and
- <dfn>reverse</dfn> proxy mode.</p>
-
- <p>An ordinary <dfn>forward proxy</dfn> is an intermediate
- server that sits between the client and the <em>origin
- server</em>. In order to get content from the origin server,
- the client sends a request to the proxy naming the origin server
- as the target and the proxy then requests the content from the
- origin server and returns it to the client. The client must be
- specially configured to use the forward proxy to access other
- sites.</p>
-
- <p>A typical usage of a forward proxy is to provide Internet
- access to internal clients that are otherwise restricted by a
- firewall. The forward proxy can also use caching (as provided
- by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) to reduce network usage.</p>
-
- <p>The forward proxy is activated using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive. Because
- forward proxys allow clients to access arbitrary sites through
- your server and to hide their true origin, it is essential that
- you <a href="#access">secure your server</a> so that only
- authorized clients can access the proxy before activating a
- forward proxy.</p>
-
- <p>A <dfn>reverse proxy</dfn>, by contrast, appears to the
- client just like an ordinary web server. No special
- configuration on the client is necessary. The client makes
- ordinary requests for content in the name-space of the reverse
- proxy. The reverse proxy then decides where to send those
- requests, and returns the content as if it was itself the
- origin.</p>
-
- <p>A typical usage of a reverse proxy is to provide Internet
- users access to a server that is behind a firewall. Reverse
- proxies can also be used to balance load among several back-end
- servers, or to provide caching for a slower back-end server.
- In addition, reverse proxies can be used simply to bring
- several servers into the same URL space.</p>
-
- <p>A reverse proxy is activated using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive or the
- <code>[P]</code> flag to the <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive. It is
- <strong>not</strong> necessary to turn <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> on in order to
- configure a reverse proxy.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Basic Examples</a></h2>
-
- <p>The examples below are only a very basic idea to help you
- get started. Please read the documentation on the individual
- directives.</p>
-
- <p>In addition, if you wish to have caching enabled, consult
- the documentation from <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
-
- <div class="example"><h3>Forward Proxy</h3><p><code>
- ProxyRequests On<br />
- ProxyVia On<br />
- <br />
- &lt;Proxy *&gt;<br />
- <span class="indent">
- Order deny,allow<br />
- Deny from all<br />
- Allow from internal.example.com<br />
- </span>
- &lt;/Proxy&gt;
- </code></p></div>
-
- <div class="example"><h3>Reverse Proxy</h3><p><code>
- ProxyRequests Off<br />
- <br />
- &lt;Proxy *&gt;<br />
- <span class="indent">
- Order deny,allow<br />
- Allow from all<br />
- </span>
- &lt;/Proxy&gt;<br />
- <br />
- ProxyPass /foo http://foo.example.com/bar<br />
- ProxyPassReverse /foo http://foo.example.com/bar
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="access" id="access">Controlling access to your proxy</a></h2>
- <p>You can control who can access your proxy via the <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code> control block as in
- the following example:</p>
-
- <div class="example"><p><code>
- &lt;Proxy *&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from 192.168.0<br />
- </span>
- &lt;/Proxy&gt;
- </code></p></div>
-
- <p>For more information on access control directives, see
- <code class="module"><a href="../mod/mod_access.html">mod_access</a></code>.</p>
-
- <p>Strictly limiting access is essential if you are using a
- forward proxy (using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive).
- Otherwise, your server can be used by any client to access
- arbitrary hosts while hiding his or her true identity. This is
- dangerous both for your network and for the Internet at large.
- When using a reverse proxy (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive with
- <code>ProxyRequests Off</code>), access control is less
- critical because clients can only contact the hosts that you
- have specifically configured.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ftp-proxy" id="ftp-proxy">FTP Proxy</a></h2>
-
-
- <h3><a name="mimetypes" id="mimetypes">Why doesn't file type <var>xxx</var>
- download via FTP?</a></h3>
- <p>You probably don't have that particular file type defined as
- <code>application/octet-stream</code> in your proxy's mime.types
- configuration file. A useful line can be</p>
-
- <div class="example"><pre>application/octet-stream bin dms lha lzh exe class tgz taz</pre></div>
- <p>Alternatively you may prefer to default everything to binary:</p>
- <div class="example"><pre>DefaultType application/octet-stream</pre></div>
-
-
- <h3><a name="type" id="type">How can I force an FTP ASCII download of
- File <var>xxx</var>?</a></h3>
- <p>In the rare situation where you must download a specific file using the
- FTP <code>ASCII</code> transfer method (while the default transfer is in
- <code>binary</code> mode), you can override <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>'s
- default by suffixing the request with <code>;type=a</code> to force an
- ASCII transfer. (FTP Directory listings are always executed in ASCII mode,
- however.)</p>
-
-
- <h3><a name="ftpnonget" id="ftpnonget">How can I do FTP upload?</a></h3>
- <p>Currently, only GET is supported for FTP in mod_proxy. You can
- of course use HTTP upload (POST or PUT) through an Apache proxy.</p>
-
-
- <h3><a name="percent2fhck" id="percent2fhck">How can I access FTP files outside
- of my home directory?</a></h3>
- <p>An FTP URI is interpreted relative to the home directory of the user
- who is logging in. Alas, to reach higher directory levels you cannot
- use /../, as the dots are interpreted by the browser and not actually
- sent to the FTP server. To address this problem, the so called <dfn>Squid
- %2f hack</dfn> was implemented in the Apache FTP proxy; it is a
- solution which is also used by other popular proxy servers like the <a href="http://www.squid-cache.org/">Squid Proxy Cache</a>. By
- prepending <code>/%2f</code> to the path of your request, you can make
- such a proxy change the FTP starting directory to <code>/</code> (instead
- of the home directory). For example, to retrieve the file
- <code>/etc/motd</code>, you would use the URL:</p>
-
- <div class="example"><p><code>
- ftp://<var>user</var>@<var>host</var>/%2f/etc/motd
- </code></p></div>
-
-
- <h3><a name="ftppass" id="ftppass">How can I hide the FTP cleartext password
- in my browser's URL line?</a></h3>
- <p>To log in to an FTP server by username and password, Apache uses
- different strategies. In absense of a user name and password in the URL
- altogether, Apache sends an anonymous login to the FTP server,
- <em>i.e.</em>,</p>
-
- <div class="example"><p><code>
- user: anonymous<br />
- password: apache_proxy@
- </code></p></div>
-
- <p>This works for all popular FTP servers which are configured for
- anonymous access.</p>
-
- <p>For a personal login with a specific username, you can embed the user
- name into the URL, like in:</p>
-
- <div class="example"><p><code>
- ftp://<var>username</var>@<var>host</var>/myfile
- </code></p></div>
-
- <p>If the FTP server asks for a password when given this username (which
- it should), then Apache will reply with a <code>401</code> (Authorization
- required) response, which causes the Browser to pop up the
- username/password dialog. Upon entering the password, the connection
- attempt is retried, and if successful, the requested resource is
- presented. The advantage of this procedure is that your browser does not
- display the password in cleartext (which it would if you had used</p>
-
- <div class="example"><p><code>
- ftp://<var>username</var>:<var>password</var>@<var>host</var>/myfile
- </code></p></div>
-
- <p>in the first place).</p>
-
- <div class="note"><h3>Note</h3>
- <p>The password which is transmitted in such a way is not encrypted on
- its way. It travels between your browser and the Apache proxy server in
- a base64-encoded cleartext string, and between the Apache proxy and the
- FTP server as plaintext. You should therefore think twice before
- accessing your FTP server via HTTP (or before accessing your personal
- files via FTP at all!) When using unsecure channels, an eavesdropper
- might intercept your password on its way.</p>
- </div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="startup" id="startup">Slow Startup</a></h2>
- <p>If you're using the <code class="directive"><a href="#proxyblock">ProxyBlock</a></code> directive, hostnames' IP addresses are looked up
- and cached during startup for later match test. This may take a few
- seconds (or more) depending on the speed with which the hostname lookups
- occur.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intranet" id="intranet">Intranet Proxy</a></h2>
- <p>An Apache proxy server situated in an intranet needs to forward
- external requests through the company's firewall (for this, configure
- the <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive
- to forward the respective <var>scheme</var> to the firewall proxy).
- However, when it has to
- access resources within the intranet, it can bypass the firewall when
- accessing hosts. The <code class="directive"><a href="#noproxy">NoProxy</a></code>
- directive is useful for specifying which hosts belong to the intranet and
- should be accessed directly.</p>
-
- <p>Users within an intranet tend to omit the local domain name from their
- WWW requests, thus requesting "http://somehost/" instead of
- <code>http://somehost.example.com/</code>. Some commercial proxy servers
- let them get away with this and simply serve the request, implying a
- configured local domain. When the <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> directive is used and the server is <a href="#proxyrequests">configured for proxy service</a>, Apache can return
- a redirect response and send the client to the correct, fully qualified,
- server address. This is the preferred method since the user's bookmark
- files will then contain fully qualified hosts.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="envsettings" id="envsettings">Protocol Adjustments</a></h2>
- <p>For circumstances where you have a application server which doesn't
- implement keepalives or HTTP/1.1 properly, there are 2 environment
- variables which when set send a HTTP/1.0 with no keepalive. These are set
- via the <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> directive.</p>
-
- <p>These are the <code>force-proxy-request-1.0</code> and
- <code>proxy-nokeepalive</code> notes.</p>
-
- <div class="example"><p><code>
- &lt;Location /buggyappserver/&gt;<br />
- <span class="indent">
- ProxyPass http://buggyappserver:7001/foo/<br />
- SetEnv force-proxy-request-1.0 1<br />
- SetEnv proxy-nokeepalive 1<br />
- </span>
- &lt;/Location&gt;
- </code></p></div>
- </div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AllowCONNECT" id="AllowCONNECT">AllowCONNECT</a> <a name="allowconnect" id="allowconnect">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ports that are allowed to CONNECT through the
-proxy</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AllowCONNECT <var>port</var> [<var>port</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AllowCONNECT 443 563</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">AllowCONNECT</code> directive specifies a list
- of port numbers to which the proxy <code>CONNECT</code> method may
- connect. Today's browsers use this method when a <code>https</code>
- connection is requested and proxy tunneling over HTTP is in effect.</p>
-
- <p>By default, only the default https port (<code>443</code>) and the
- default snews port (<code>563</code>) are enabled. Use the
- <code class="directive">AllowCONNECT</code> directive to override this default and
- allow connections to the listed ports only.</p>
-
- <p>Note that you'll need to have <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> present
- in the server in order to get the support for the <code>CONNECT</code> at
- all.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NoProxy" id="NoProxy">NoProxy</a> <a name="noproxy" id="noproxy">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NoProxy <var>host</var> [<var>host</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive is only useful for Apache proxy servers within
- intranets. The <code class="directive">NoProxy</code> directive specifies a
- list of subnets, IP addresses, hosts and/or domains, separated by
- spaces. A request to a host which matches one or more of these is
- always served directly, without forwarding to the configured
- <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> proxy server(s).</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProxyRemote * http://firewall.mycompany.com:81<br />
- NoProxy .mycompany.com 192.168.112.0/21
- </code></p></div>
-
- <p>The <var>host</var> arguments to the <code class="directive">NoProxy</code>
- directive are one of the following type list:</p>
-
- <dl>
-
- <dt><var><a name="domain" id="domain">Domain</a></var></dt>
- <dd>
- <p>A <dfn>Domain</dfn> is a partially qualified DNS domain name, preceded
- by a period. It represents a list of hosts which logically belong to the
- same DNS domain or zone (<em>i.e.</em>, the suffixes of the hostnames are
- all ending in <var>Domain</var>).</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- .com .apache.org.
- </code></p></div>
-
- <p>To distinguish <var>Domain</var>s from <var><a href="#hostname">Hostname</a></var>s (both syntactically and semantically; a DNS domain can
- have a DNS A record, too!), <var>Domain</var>s are always written with a
- leading period.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Domain name comparisons are done without regard to the case, and
- <var>Domain</var>s are always assumed to be anchored in the root of the
- DNS tree, therefore two domains <code>.MyDomain.com</code> and
- <code>.mydomain.com.</code> (note the trailing period) are considered
- equal. Since a domain comparison does not involve a DNS lookup, it is much
- more efficient than subnet comparison.</p>
- </div></dd>
-
-
- <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt>
- <dd>
- <p>A <dfn>SubNet</dfn> is a partially qualified internet address in
- numeric (dotted quad) form, optionally followed by a slash and the netmask,
- specified as the number of significant bits in the <var>SubNet</var>. It is
- used to represent a subnet of hosts which can be reached over a common
- network interface. In the absence of the explicit net mask it is assumed
- that omitted (or zero valued) trailing digits specify the mask. (In this
- case, the netmask can only be multiples of 8 bits wide.) Examples:</p>
-
- <dl>
- <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
- <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
- (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
- <dt><code>192.168.112.0/21</code></dt>
- <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
- valid bits (also used in the form 255.255.248.0)</dd>
- </dl>
-
- <p>As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
- equivalent to an <var><a href="#ipadr">IPAddr</a></var>, while a <var>SubNet</var> with zero
- valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
- <var>_Default_</var>, matching any IP address.</p></dd>
-
-
- <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt>
- <dd>
- <p>A <dfn>IPAddr</dfn> represents a fully qualified internet address in
- numeric (dotted quad) form. Usually, this address represents a host, but
- there need not necessarily be a DNS domain name connected with the
- address.</p>
- <div class="example"><h3>Example</h3><p><code>
- 192.168.123.7
- </code></p></div>
-
- <div class="note"><h3>Note</h3>
- <p>An <var>IPAddr</var> does not need to be resolved by the DNS system, so
- it can result in more effective apache performance.</p>
- </div></dd>
-
-
- <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt>
- <dd>
- <p>A <dfn>Hostname</dfn> is a fully qualified DNS domain name which can
- be resolved to one or more <var><a href="#ipaddr">IPAddrs</a></var> via the
- DNS domain name service. It represents a logical host (in contrast to
- <var><a href="#domain">Domain</a></var>s, see above) and must be resolvable
- to at least one <var><a href="#ipaddr">IPAddr</a></var> (or often to a list
- of hosts with different <var><a href="#ipaddr">IPAddr</a></var>s).</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- prep.ai.mit.edu<br />
- www.apache.org
- </code></p></div>
-
- <div class="note"><h3>Note</h3>
- <p>In many situations, it is more effective to specify an <var><a href="#ipaddr">IPAddr</a></var> in place of a <var>Hostname</var> since a
- DNS lookup can be avoided. Name resolution in Apache can take a remarkable
- deal of time when the connection to the name server uses a slow PPP
- link.</p>
- <p><var>Hostname</var> comparisons are done without regard to the case,
- and <var>Hostname</var>s are always assumed to be anchored in the root
- of the DNS tree, therefore two hosts <code>WWW.MyDomain.com</code>
- and <code>www.mydomain.com.</code> (note the trailing period) are
- considered equal.</p>
- </div></dd>
- </dl>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../dns-caveats.html">DNS Issues</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Proxy" id="Proxy">&lt;Proxy&gt;</a> <a name="proxy" id="proxy">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to proxied resources</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>Directives placed in <code class="directive">&lt;Proxy&gt;</code>
- sections apply only to matching proxied content. Shell-style wildcards are
- allowed.</p>
-
- <p>For example, the following will allow only hosts in
- <code>yournetwork.example.com</code> to access content via your proxy
- server:</p>
-
- <div class="example"><p><code>
- &lt;Proxy *&gt;<br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from yournetwork.example.com<br />
- </span>
- &lt;/Proxy&gt;
- </code></p></div>
-
- <p>The following example will process all files in the <code>foo</code>
- directory of <code>example.com</code> through the <code>INCLUDES</code>
- filter when they are sent through the proxy server:</p>
-
- <div class="example"><p><code>
- &lt;Proxy http://example.com/foo/*&gt;<br />
- <span class="indent">
- SetOutputFilter INCLUDES<br />
- </span>
- &lt;/Proxy&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a> <a name="proxybadheader" id="proxybadheader">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines how to handle bad header lines in a
-response</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyBadHeader IsError</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>available in Apache 2.0.44 and later</td></tr>
-</table>
- <p>The <code class="directive">ProxyBadHeader</code> directive determines the
- behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> if it receives syntactically invalid
- header lines (<em>i.e.</em> containing no colon). The following arguments
- are possible:</p>
-
- <dl>
- <dt><code>IsError</code></dt>
- <dd>Abort the request and end up with a 502 (Bad Gateway) response. This is
- the default behaviour.</dd>
-
- <dt><code>Ignore</code></dt>
- <dd>Treat bad header lines as if they weren't sent.</dd>
-
- <dt><code>StartBody</code></dt>
- <dd>When receiving the first bad header line, finish reading the headers and
- treat the remainder as body. This helps to work around buggy backend servers
- which forget to insert an empty line between the headers and the body.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a> <a name="proxyblock" id="proxyblock">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Words, hosts, or domains that are banned from being
-proxied</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyBlock</code> directive specifies a list of
- words, hosts and/or domains, separated by spaces. HTTP, HTTPS, and
- FTP document requests to sites whose names contain matched words,
- hosts or domains are <em>blocked</em> by the proxy server. The proxy
- module will also attempt to determine IP addresses of list items which
- may be hostnames during startup, and cache them for match test as
- well. That may slow down the startup time of the server.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
- </code></p></div>
-
- <p><code>rocky.wotsamattau.edu</code> would also be matched if referenced by
- IP address.</p>
-
- <p>Note that <code>wotsamattau</code> would also be sufficient to match
- <code>wotsamattau.edu</code>.</p>
-
- <p>Note also that</p>
-
- <div class="example"><p><code>
- ProxyBlock *
- </code></p></div>
-
- <p>blocks connections to all sites.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a> <a name="proxydomain" id="proxydomain">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default domain name for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyDomain <var>Domain</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive is only useful for Apache proxy servers within
- intranets. The <code class="directive">ProxyDomain</code> directive specifies
- the default domain which the apache proxy server will belong to. If a
- request to a host without a domain name is encountered, a redirection
- response to the same host with the configured <var>Domain</var> appended
- will be generated.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProxyRemote * http://firewall.mycompany.com:81<br />
- NoProxy .mycompany.com 192.168.112.0/21<br />
- ProxyDomain .mycompany.com
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride" id="proxyerroroverride">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Override error pages for proxied content</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyErrorOverride On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyErrorOverride Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0 and later</td></tr>
-</table>
- <p>This directive is useful for reverse-proxy setups, where you want to
- have a common look and feel on the error pages seen by the end user.
- This also allows for included files (via mod_include's SSI) to get
- the error code and act accordingly (default behavior would display
- the error page of the proxied server, turning this on shows the SSI
- Error message).</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine size of internal data throughput buffer</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyIOBufferSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyIOBufferSize</code> directive adjusts the size
- of the internal buffer, which is used as a scratchpad for the data between
- input and output. The size must be less or equal <code>8192</code>.</p>
-
- <p>In almost every case there's no reason to change that value.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyMatch" id="ProxyMatch">&lt;ProxyMatch&gt;</a> <a name="proxymatch" id="proxymatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">&lt;ProxyMatch&gt;</code> directive is
- identical to the <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code> directive, except it matches URLs
- using regular expressions.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards" id="proxymaxforwards">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0 and later</td></tr>
-</table>
- <p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
- maximum number of proxies through which a request may pass, if there's no
- <code>Max-Forwards</code> header supplied with the request. This is
- set to prevent infinite proxy loops, or a DoS attack.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProxyMaxForwards 15
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive allows remote servers to be mapped into the space of
- the local server; the local server does not act as a proxy in the
- conventional sense, but appears to be a mirror of the remote
- server. <var>path</var> is the name of a local virtual path; <var>url</var>
- is a partial URL for the remote server and cannot include a query
- string.</p>
-
- <p>Suppose the local server has address <code>http://example.com/</code>;
- then</p>
-
- <div class="example"><p><code>
- ProxyPass /mirror/foo/ http://backend.example.com/
- </code></p></div>
-
- <p>will cause a local request for
- <code>http://example.com/mirror/foo/bar</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/bar</code>.</p>
-
- <p>The <code>!</code> directive is useful in situations where you don't want
- to reverse-proxy a subdirectory, <em>e.g.</em></p>
-
- <div class="example"><p><code>
- ProxyPass /mirror/foo/i !<br />
- ProxyPass /mirror/foo http://backend.example.com
- </code></p></div>
-
- <p>will proxy all requests to <code>/mirror/foo</code> to
- <code>backend.example.com</code> <em>except</em> requests made to
- <code>/mirror/foo/i</code>.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Order is important. you need to put the exclusions <em>before</em> the
- general proxypass directive.</p>
- </div>
-
- <p>When used inside a <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section, the first argument is omitted and the local
- directory is obtained from the <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>.</p>
-
- <div class="warning">The <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive should
- usually be set <strong>off</strong> when using
- <code class="directive">ProxyPass</code>.</div>
-
- <p>If you require a more flexible reverse-proxy configuration, see the
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
- <code>[P]</code> flag.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse" id="proxypassreverse">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverse [<var>path</var>] <var>url</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive lets Apache adjust the URL in the <code>Location</code>,
- <code>Content-Location</code> and <code>URI</code> headers on HTTP redirect
- responses. This is essential when Apache is used as a reverse proxy to avoid
- by-passing the reverse proxy because of HTTP redirects on the backend
- servers which stay behind the reverse proxy.</p>
-
- <p>Only the HTTP response headers specifically mentioned above
- will be rewritten. Apache will not rewrite other response
- headers, nor will it rewrite URL references inside HTML pages.
- This means that if the proxied content contains absolute URL
- references, they will by-pass the proxy. A third-party module
- that will look inside the HTML and rewrite URL references is Nick
- Kew's <a href="http://apache.webthing.com/software/mod_proxy_html/">mod_proxy_html</a>.</p>
-
- <p><var>path</var> is the name of a local virtual path. <var>url</var> is a
- partial URL for the remote server - the same way they are used for the
- <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
-
- <p>For example, suppose the local server has address
- <code>http://example.com/</code>; then</p>
-
- <div class="example"><p><code>
- ProxyPass /mirror/foo/ http://backend.example.com/<br />
- ProxyPassReverse /mirror/foo/ http://backend.example.com/
- ProxyPassReverseCookieDomain backend.example.com public.example.com
- ProxyPassReverseCookiePath / /mirror/foo/
- </code></p></div>
-
- <p>will not only cause a local request for the
- <code>http://example.com/mirror/foo/bar</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/bar</code>
- (the functionality <code>ProxyPass</code> provides here). It also takes care
- of redirects the server <code>backend.example.com</code> sends: when
- <code>http://backend.example.com/bar</code> is redirected by him to
- <code>http://backend.example.com/quux</code> Apache adjusts this to
- <code>http://example.com/mirror/foo/quux</code> before forwarding the HTTP
- redirect response to the client. Note that the hostname used for
- constructing the URL is chosen in respect to the setting of the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> directive.</p>
-
- <p>Note that this <code class="directive">ProxyPassReverse</code> directive can
- also be used in conjunction with the proxy pass-through feature
- (<code>RewriteRule ... [P]</code>) from <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
- because its doesn't depend on a corresponding <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
-
- <p>When used inside a <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section, the first argument is omitted and the local
- directory is obtained from the <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a> <a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
-<p>Usage is basically similar to
-<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, but instead of
-rewriting headers that are a URL, this rewrites the <code>domain</code>
-string in <code>Set-Cookie</code> headers.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a> <a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
-<p>Usage is basically similar to
-<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, but instead of
-rewriting headers that are a URL, this rewrites the <code>path</code>
-string in <code>Set-Cookie</code> headers.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost" id="proxypreservehost">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.31 and later.</td></tr>
-</table>
- <p>When enabled, this option will pass the Host: line from the incoming
- request to the proxied host, instead of the hostname specified in the
- proxypass line.</p>
-
- <p>This option should normally be turned <code>Off</code>. It is mostly
- useful in special configurations like proxied mass name-based virtual
- hosting, where the original Host header needs to be evaluated by the
- backend server.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyReceiveBufferSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyReceiveBufferSize</code> directive specifies an
- explicit (TCP/IP) network buffer size for proxied HTTP and FTP connections,
- for increased throughput. It has to be greater than <code>512</code> or set
- to <code>0</code> to indicate that the system's default buffer size should
- be used.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProxyReceiveBufferSize 2048
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a> <a name="proxyremote" id="proxyremote">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle certain requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This defines remote proxies to this proxy. <var>match</var> is either the
- name of a URL-scheme that the remote server supports, or a partial URL
- for which the remote server should be used, or <code>*</code> to indicate
- the server should be contacted for all requests. <var>remote-server</var> is
- a partial URL for the remote server. Syntax:</p>
-
- <div class="example"><p><code>
- <dfn>remote-server</dfn> =
- <var>scheme</var>://<var>hostname</var>[:<var>port</var>]
- </code></p></div>
-
- <p><var>scheme</var> is effectively the protocol that should be used to
- communicate with the remote server; only <code>http</code> is supported by
- this module.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br />
- ProxyRemote * http://cleversite.com<br />
- ProxyRemote ftp http://ftpproxy.mydomain.com:8080
- </code></p></div>
-
- <p>In the last example, the proxy will forward FTP requests, encapsulated
- as yet another HTTP proxy request, to another proxy which can handle
- them.</p>
-
- <p>This option also supports reverse proxy configuration - a backend
- webserver can be embedded within a virtualhost URL space even if that
- server is hidden by another forward proxy.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a> <a name="proxyremotematch" id="proxyremotematch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>The <code class="directive">ProxyRemoteMatch</code> is identical to the
- <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive, except the
- first argument is a regular expression match against the requested URL.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a> <a name="proxyrequests" id="proxyrequests">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables forward (standard) proxy requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyRequests Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This allows or prevents Apache from functioning as a forward proxy
- server. (Setting ProxyRequests to <code>Off</code> does not disable use of
- the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.)</p>
-
- <p>In a typical reverse proxy configuration, this option should be set to
- <code>Off</code>.</p>
-
- <p>In order to get the functionality of proxying HTTP or FTP sites, you
- need also <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> or <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>
- (or both) present in the server.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>Do not enable proxying with <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> until you have <a href="#access">secured your server</a>. Open proxy servers are dangerous
- both to your network and to the Internet at large.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network timeout for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyTimeout 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.31 and later</td></tr>
-</table>
- <p>This directive allows a user to specifiy a timeout on proxy requests.
- This is useful when you have a slow/buggy appserver which hangs, and you
- would rather just return a timeout and fail gracefully instead of waiting
- however long it takes the server to return.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ProxyVia" id="ProxyVia">ProxyVia</a> <a name="proxyvia" id="proxyvia">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information provided in the Via HTTP response
-header for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyVia Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-</table>
- <p>This directive controls the use of the <code>Via:</code> HTTP
- header by the proxy. Its intended use is to control the flow of of
- proxy requests along a chain of proxy servers. See <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1), section
- 14.45 for an explanation of <code>Via:</code> header lines.</p>
-
- <ul>
- <li>If set to <code>Off</code>, which is the default, no special processing
- is performed. If a request or reply contains a <code>Via:</code> header,
- it is passed through unchanged.</li>
-
- <li>If set to <code>On</code>, each request and reply will get a
- <code>Via:</code> header line added for the current host.</li>
-
- <li>If set to <code>Full</code>, each generated <code>Via:</code> header
- line will additionally have the Apache server version shown as a
- <code>Via:</code> comment field.</li>
-
- <li>If set to <code>Block</code>, every proxy request will have all its
- <code>Via:</code> header lines removed. No new <code>Via:</code> header will
- be generated.</li>
- </ul>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml
deleted file mode 100644
index 190b1e7fde..0000000000
--- a/docs/manual/mod/mod_proxy.xml
+++ /dev/null
@@ -1,1029 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.31 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_proxy.xml.meta">
-
-<name>mod_proxy</name>
-<description>HTTP/1.1 proxy/gateway server</description>
-<status>Extension</status>
-<sourcefile>mod_proxy.c</sourcefile>
-<identifier>proxy_module</identifier>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>Do not enable proxying with <directive module="mod_proxy"
- >ProxyRequests</directive> until you have <a href="#access"
- >secured your server</a>. Open proxy servers are dangerous both to your
- network and to the Internet at large.</p>
- </note>
-
- <p>This module implements a proxy/gateway for Apache. It implements
- proxying capability for <code>FTP</code>, <code>CONNECT</code> (for SSL),
- <code>HTTP/0.9</code>, <code>HTTP/1.0</code>, and <code>HTTP/1.1</code>.
- The module can be configured to connect to other proxy modules for these
- and other protocols.</p>
-
- <p>Apache's proxy features are divided into several modules in
- addition to <module>mod_proxy</module>:
- <module>mod_proxy_http</module>, <module>mod_proxy_ftp</module>
- and <module>mod_proxy_connect</module>. Thus, if you want to use
- one or more of the particular proxy functions, load
- <module>mod_proxy</module> <em>and</em> the appropriate module(s)
- into the server (either statically at compile-time or dynamically
- via the <directive module="mod_so">LoadModule</directive>
- directive).</p>
-
- <p>In addition, extended features are provided by other modules.
- Caching is provided by <module>mod_cache</module> and related
- modules. The ability to contact remote servers using the SSL/TLS
- protocol is provided by the <code>SSLProxy*</code> directives of
- <module>mod_ssl</module>. These additional modules will need
- to be loaded and configured to take advantage of these features.</p>
-</summary>
-<seealso><module>mod_cache</module></seealso>
-<seealso><module>mod_proxy_http</module></seealso>
-<seealso><module>mod_proxy_ftp</module></seealso>
-<seealso><module>mod_proxy_connect</module></seealso>
-<seealso><module>mod_ssl</module></seealso>
-
- <section id="forwardreverse"><title>Forward and Reverse Proxies</title>
- <p>Apache can be configured in both a <dfn>forward</dfn> and
- <dfn>reverse</dfn> proxy mode.</p>
-
- <p>An ordinary <dfn>forward proxy</dfn> is an intermediate
- server that sits between the client and the <em>origin
- server</em>. In order to get content from the origin server,
- the client sends a request to the proxy naming the origin server
- as the target and the proxy then requests the content from the
- origin server and returns it to the client. The client must be
- specially configured to use the forward proxy to access other
- sites.</p>
-
- <p>A typical usage of a forward proxy is to provide Internet
- access to internal clients that are otherwise restricted by a
- firewall. The forward proxy can also use caching (as provided
- by <module>mod_cache</module>) to reduce network usage.</p>
-
- <p>The forward proxy is activated using the <directive
- module="mod_proxy">ProxyRequests</directive> directive. Because
- forward proxys allow clients to access arbitrary sites through
- your server and to hide their true origin, it is essential that
- you <a href="#access">secure your server</a> so that only
- authorized clients can access the proxy before activating a
- forward proxy.</p>
-
- <p>A <dfn>reverse proxy</dfn>, by contrast, appears to the
- client just like an ordinary web server. No special
- configuration on the client is necessary. The client makes
- ordinary requests for content in the name-space of the reverse
- proxy. The reverse proxy then decides where to send those
- requests, and returns the content as if it was itself the
- origin.</p>
-
- <p>A typical usage of a reverse proxy is to provide Internet
- users access to a server that is behind a firewall. Reverse
- proxies can also be used to balance load among several back-end
- servers, or to provide caching for a slower back-end server.
- In addition, reverse proxies can be used simply to bring
- several servers into the same URL space.</p>
-
- <p>A reverse proxy is activated using the <directive
- module="mod_proxy">ProxyPass</directive> directive or the
- <code>[P]</code> flag to the <directive
- module="mod_rewrite">RewriteRule</directive> directive. It is
- <strong>not</strong> necessary to turn <directive
- module="mod_proxy">ProxyRequests</directive> on in order to
- configure a reverse proxy.</p>
- </section> <!-- /forwardreverse -->
-
- <section id="examples"><title>Basic Examples</title>
-
- <p>The examples below are only a very basic idea to help you
- get started. Please read the documentation on the individual
- directives.</p>
-
- <p>In addition, if you wish to have caching enabled, consult
- the documentation from <module>mod_cache</module>.</p>
-
- <example><title>Forward Proxy</title>
- ProxyRequests On<br />
- ProxyVia On<br />
- <br />
- &lt;Proxy *&gt;<br />
- <indent>
- Order deny,allow<br />
- Deny from all<br />
- Allow from internal.example.com<br />
- </indent>
- &lt;/Proxy&gt;
- </example>
-
- <example><title>Reverse Proxy</title>
- ProxyRequests Off<br />
- <br />
- &lt;Proxy *&gt;<br />
- <indent>
- Order deny,allow<br />
- Allow from all<br />
- </indent>
- &lt;/Proxy&gt;<br />
- <br />
- ProxyPass /foo http://foo.example.com/bar<br />
- ProxyPassReverse /foo http://foo.example.com/bar
- </example>
- </section> <!-- /examples -->
-
-
- <section id="access"><title>Controlling access to your proxy</title>
- <p>You can control who can access your proxy via the <directive
- module="mod_proxy" type="section">Proxy</directive> control block as in
- the following example:</p>
-
- <example>
- &lt;Proxy *&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from 192.168.0<br />
- </indent>
- &lt;/Proxy&gt;
- </example>
-
- <p>For more information on access control directives, see
- <module>mod_access</module>.</p>
-
- <p>Strictly limiting access is essential if you are using a
- forward proxy (using the <directive
- module="mod_proxy">ProxyRequests</directive> directive).
- Otherwise, your server can be used by any client to access
- arbitrary hosts while hiding his or her true identity. This is
- dangerous both for your network and for the Internet at large.
- When using a reverse proxy (using the <directive
- module="mod_proxy">ProxyPass</directive> directive with
- <code>ProxyRequests Off</code>), access control is less
- critical because clients can only contact the hosts that you
- have specifically configured.</p>
-
- </section> <!-- /access -->
-
- <section id="ftp-proxy"><title>FTP Proxy</title>
-
-
- <section id="mimetypes"><title>Why doesn't file type <var>xxx</var>
- download via FTP?</title>
- <p>You probably don't have that particular file type defined as
- <code>application/octet-stream</code> in your proxy's mime.types
- configuration file. A useful line can be</p>
-
- <example>
-<pre>application/octet-stream bin dms lha lzh exe class tgz taz</pre>
- </example>
- <p>Alternatively you may prefer to default everything to binary:</p>
- <example>
-<pre>DefaultType application/octet-stream</pre>
- </example>
- </section> <!-- /mimetypes -->
-
- <section id="type"><title>How can I force an FTP ASCII download of
- File <var>xxx</var>?</title>
- <p>In the rare situation where you must download a specific file using the
- FTP <code>ASCII</code> transfer method (while the default transfer is in
- <code>binary</code> mode), you can override <module>mod_proxy</module>'s
- default by suffixing the request with <code>;type=a</code> to force an
- ASCII transfer. (FTP Directory listings are always executed in ASCII mode,
- however.)</p>
- </section> <!-- /type -->
-
- <section id="ftpnonget"><title>How can I do FTP upload?</title>
- <p>Currently, only GET is supported for FTP in mod_proxy. You can
- of course use HTTP upload (POST or PUT) through an Apache proxy.</p>
- </section>
-
- <section id="percent2fhck"><title>How can I access FTP files outside
- of my home directory?</title>
- <p>An FTP URI is interpreted relative to the home directory of the user
- who is logging in. Alas, to reach higher directory levels you cannot
- use /../, as the dots are interpreted by the browser and not actually
- sent to the FTP server. To address this problem, the so called <dfn>Squid
- %2f hack</dfn> was implemented in the Apache FTP proxy; it is a
- solution which is also used by other popular proxy servers like the <a
- href="http://www.squid-cache.org/">Squid Proxy Cache</a>. By
- prepending <code>/%2f</code> to the path of your request, you can make
- such a proxy change the FTP starting directory to <code>/</code> (instead
- of the home directory). For example, to retrieve the file
- <code>/etc/motd</code>, you would use the URL:</p>
-
- <example>
- ftp://<var>user</var>@<var>host</var>/%2f/etc/motd
- </example>
- </section> <!-- /percent2fhck -->
-
- <section id="ftppass"><title>How can I hide the FTP cleartext password
- in my browser's URL line?</title>
- <p>To log in to an FTP server by username and password, Apache uses
- different strategies. In absense of a user name and password in the URL
- altogether, Apache sends an anonymous login to the FTP server,
- <em>i.e.</em>,</p>
-
- <example>
- user: anonymous<br />
- password: apache_proxy@
- </example>
-
- <p>This works for all popular FTP servers which are configured for
- anonymous access.</p>
-
- <p>For a personal login with a specific username, you can embed the user
- name into the URL, like in:</p>
-
- <example>
- ftp://<var>username</var>@<var>host</var>/myfile
- </example>
-
- <p>If the FTP server asks for a password when given this username (which
- it should), then Apache will reply with a <code>401</code> (Authorization
- required) response, which causes the Browser to pop up the
- username/password dialog. Upon entering the password, the connection
- attempt is retried, and if successful, the requested resource is
- presented. The advantage of this procedure is that your browser does not
- display the password in cleartext (which it would if you had used</p>
-
- <example>
- ftp://<var>username</var>:<var>password</var>@<var>host</var>/myfile
- </example>
-
- <p>in the first place).</p>
-
- <note><title>Note</title>
- <p>The password which is transmitted in such a way is not encrypted on
- its way. It travels between your browser and the Apache proxy server in
- a base64-encoded cleartext string, and between the Apache proxy and the
- FTP server as plaintext. You should therefore think twice before
- accessing your FTP server via HTTP (or before accessing your personal
- files via FTP at all!) When using unsecure channels, an eavesdropper
- might intercept your password on its way.</p>
- </note>
- </section> <!-- /ftppass -->
- </section> <!-- /ftpproxy -->
- <section id="startup"><title>Slow Startup</title>
- <p>If you're using the <directive module="mod_proxy"
- >ProxyBlock</directive> directive, hostnames' IP addresses are looked up
- and cached during startup for later match test. This may take a few
- seconds (or more) depending on the speed with which the hostname lookups
- occur.</p>
- </section> <!-- /startup -->
-
- <section id="intranet"><title>Intranet Proxy</title>
- <p>An Apache proxy server situated in an intranet needs to forward
- external requests through the company's firewall (for this, configure
- the <directive module="mod_proxy">ProxyRemote</directive> directive
- to forward the respective <var>scheme</var> to the firewall proxy).
- However, when it has to
- access resources within the intranet, it can bypass the firewall when
- accessing hosts. The <directive module="mod_proxy">NoProxy</directive>
- directive is useful for specifying which hosts belong to the intranet and
- should be accessed directly.</p>
-
- <p>Users within an intranet tend to omit the local domain name from their
- WWW requests, thus requesting "http://somehost/" instead of
- <code>http://somehost.example.com/</code>. Some commercial proxy servers
- let them get away with this and simply serve the request, implying a
- configured local domain. When the <directive module="mod_proxy"
- >ProxyDomain</directive> directive is used and the server is <a
- href="#proxyrequests">configured for proxy service</a>, Apache can return
- a redirect response and send the client to the correct, fully qualified,
- server address. This is the preferred method since the user's bookmark
- files will then contain fully qualified hosts.</p>
- </section> <!-- /intranet -->
-
- <section id="envsettings"><title>Protocol Adjustments</title>
- <p>For circumstances where you have a application server which doesn't
- implement keepalives or HTTP/1.1 properly, there are 2 environment
- variables which when set send a HTTP/1.0 with no keepalive. These are set
- via the <directive module="mod_env">SetEnv</directive> directive.</p>
-
- <p>These are the <code>force-proxy-request-1.0</code> and
- <code>proxy-nokeepalive</code> notes.</p>
-
- <example>
- &lt;Location /buggyappserver/&gt;<br />
- <indent>
- ProxyPass http://buggyappserver:7001/foo/<br />
- SetEnv force-proxy-request-1.0 1<br />
- SetEnv proxy-nokeepalive 1<br />
- </indent>
- &lt;/Location&gt;
- </example>
- </section> <!-- /envsettings -->
-
-<directivesynopsis type="section">
-<name>Proxy</name>
-<description>Container for directives applied to proxied resources</description>
-<syntax>&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>Directives placed in <directive type="section">Proxy</directive>
- sections apply only to matching proxied content. Shell-style wildcards are
- allowed.</p>
-
- <p>For example, the following will allow only hosts in
- <code>yournetwork.example.com</code> to access content via your proxy
- server:</p>
-
- <example>
- &lt;Proxy *&gt;<br />
- <indent>
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from yournetwork.example.com<br />
- </indent>
- &lt;/Proxy&gt;
- </example>
-
- <p>The following example will process all files in the <code>foo</code>
- directory of <code>example.com</code> through the <code>INCLUDES</code>
- filter when they are sent through the proxy server:</p>
-
- <example>
- &lt;Proxy http://example.com/foo/*&gt;<br />
- <indent>
- SetOutputFilter INCLUDES<br />
- </indent>
- &lt;/Proxy&gt;
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyBadHeader</name>
-<description>Determines how to handle bad header lines in a
-response</description>
-<syntax>ProxyBadHeader IsError|Ignore|StartBody</syntax>
-<default>ProxyBadHeader IsError</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>available in Apache 2.0.44 and later</compatibility>
-
-<usage>
- <p>The <directive>ProxyBadHeader</directive> directive determines the
- behaviour of <module>mod_proxy</module> if it receives syntactically invalid
- header lines (<em>i.e.</em> containing no colon). The following arguments
- are possible:</p>
-
- <dl>
- <dt><code>IsError</code></dt>
- <dd>Abort the request and end up with a 502 (Bad Gateway) response. This is
- the default behaviour.</dd>
-
- <dt><code>Ignore</code></dt>
- <dd>Treat bad header lines as if they weren't sent.</dd>
-
- <dt><code>StartBody</code></dt>
- <dd>When receiving the first bad header line, finish reading the headers and
- treat the remainder as body. This helps to work around buggy backend servers
- which forget to insert an empty line between the headers and the body.</dd>
- </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>ProxyMatch</name>
-<description>Container for directives applied to regular-expression-matched
-proxied resources</description>
-<syntax>&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive type="section">ProxyMatch</directive> directive is
- identical to the <directive module="mod_proxy"
- type="section">Proxy</directive> directive, except it matches URLs
- using regular expressions.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyPreserveHost</name>
-<description>Use incoming Host HTTP request header for proxy
-request</description>
-<syntax>ProxyPreserveHost On|Off</syntax>
-<default>ProxyPreserveHost Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in Apache 2.0.31 and later.</compatibility>
-
-<usage>
- <p>When enabled, this option will pass the Host: line from the incoming
- request to the proxied host, instead of the hostname specified in the
- proxypass line.</p>
-
- <p>This option should normally be turned <code>Off</code>. It is mostly
- useful in special configurations like proxied mass name-based virtual
- hosting, where the original Host header needs to be evaluated by the
- backend server.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyRequests</name>
-<description>Enables forward (standard) proxy requests</description>
-<syntax>ProxyRequests On|Off</syntax>
-<default>ProxyRequests Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This allows or prevents Apache from functioning as a forward proxy
- server. (Setting ProxyRequests to <code>Off</code> does not disable use of
- the <directive module="mod_proxy">ProxyPass</directive> directive.)</p>
-
- <p>In a typical reverse proxy configuration, this option should be set to
- <code>Off</code>.</p>
-
- <p>In order to get the functionality of proxying HTTP or FTP sites, you
- need also <module>mod_proxy_http</module> or <module>mod_proxy_ftp</module>
- (or both) present in the server.</p>
-
- <note type="warning"><title>Warning</title>
- <p>Do not enable proxying with <directive
- module="mod_proxy">ProxyRequests</directive> until you have <a
- href="#access">secured your server</a>. Open proxy servers are dangerous
- both to your network and to the Internet at large.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyRemote</name>
-<description>Remote proxy used to handle certain requests</description>
-<syntax>ProxyRemote <var>match</var> <var>remote-server</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This defines remote proxies to this proxy. <var>match</var> is either the
- name of a URL-scheme that the remote server supports, or a partial URL
- for which the remote server should be used, or <code>*</code> to indicate
- the server should be contacted for all requests. <var>remote-server</var> is
- a partial URL for the remote server. Syntax:</p>
-
- <example>
- <dfn>remote-server</dfn> =
- <var>scheme</var>://<var>hostname</var>[:<var>port</var>]
- </example>
-
- <p><var>scheme</var> is effectively the protocol that should be used to
- communicate with the remote server; only <code>http</code> is supported by
- this module.</p>
-
- <example><title>Example</title>
- ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br />
- ProxyRemote * http://cleversite.com<br />
- ProxyRemote ftp http://ftpproxy.mydomain.com:8080
- </example>
-
- <p>In the last example, the proxy will forward FTP requests, encapsulated
- as yet another HTTP proxy request, to another proxy which can handle
- them.</p>
-
- <p>This option also supports reverse proxy configuration - a backend
- webserver can be embedded within a virtualhost URL space even if that
- server is hidden by another forward proxy.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyRemoteMatch</name>
-<description>Remote proxy used to handle requests matched by regular
-expressions</description>
-<syntax>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ProxyRemoteMatch</directive> is identical to the
- <directive module="mod_proxy">ProxyRemote</directive> directive, except the
- first argument is a regular expression match against the requested URL.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyPass</name>
-<description>Maps remote servers into the local server URL-space</description>
-<syntax>ProxyPass [<var>path</var>] !|<var>url</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-
-<usage>
- <p>This directive allows remote servers to be mapped into the space of
- the local server; the local server does not act as a proxy in the
- conventional sense, but appears to be a mirror of the remote
- server. <var>path</var> is the name of a local virtual path; <var>url</var>
- is a partial URL for the remote server and cannot include a query
- string.</p>
-
- <p>Suppose the local server has address <code>http://example.com/</code>;
- then</p>
-
- <example>
- ProxyPass /mirror/foo/ http://backend.example.com/
- </example>
-
- <p>will cause a local request for
- <code>http://example.com/mirror/foo/bar</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/bar</code>.</p>
-
- <p>The <code>!</code> directive is useful in situations where you don't want
- to reverse-proxy a subdirectory, <em>e.g.</em></p>
-
- <example>
- ProxyPass /mirror/foo/i !<br />
- ProxyPass /mirror/foo http://backend.example.com
- </example>
-
- <p>will proxy all requests to <code>/mirror/foo</code> to
- <code>backend.example.com</code> <em>except</em> requests made to
- <code>/mirror/foo/i</code>.</p>
-
- <note><title>Note</title>
- <p>Order is important. you need to put the exclusions <em>before</em> the
- general proxypass directive.</p>
- </note>
-
- <p>When used inside a <directive type="section" module="core"
- >Location</directive> section, the first argument is omitted and the local
- directory is obtained from the <directive type="section" module="core"
- >Location</directive>.</p>
-
- <note type="warning">The <directive
- module="mod_proxy">ProxyRequests</directive> directive should
- usually be set <strong>off</strong> when using
- <directive>ProxyPass</directive>.</note>
-
- <p>If you require a more flexible reverse-proxy configuration, see the
- <directive module="mod_rewrite">RewriteRule</directive> directive with the
- <code>[P]</code> flag.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyPassReverse</name>
-<description>Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</description>
-<syntax>ProxyPassReverse [<var>path</var>] <var>url</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-
-<usage>
- <p>This directive lets Apache adjust the URL in the <code>Location</code>,
- <code>Content-Location</code> and <code>URI</code> headers on HTTP redirect
- responses. This is essential when Apache is used as a reverse proxy to avoid
- by-passing the reverse proxy because of HTTP redirects on the backend
- servers which stay behind the reverse proxy.</p>
-
- <p>Only the HTTP response headers specifically mentioned above
- will be rewritten. Apache will not rewrite other response
- headers, nor will it rewrite URL references inside HTML pages.
- This means that if the proxied content contains absolute URL
- references, they will by-pass the proxy. A third-party module
- that will look inside the HTML and rewrite URL references is Nick
- Kew's <a href="http://apache.webthing.com/software/mod_proxy_html/"
- >mod_proxy_html</a>.</p>
-
- <p><var>path</var> is the name of a local virtual path. <var>url</var> is a
- partial URL for the remote server - the same way they are used for the
- <directive module="mod_proxy">ProxyPass</directive> directive.</p>
-
- <p>For example, suppose the local server has address
- <code>http://example.com/</code>; then</p>
-
- <example>
- ProxyPass /mirror/foo/ http://backend.example.com/<br />
- ProxyPassReverse /mirror/foo/ http://backend.example.com/
- ProxyPassReverseCookieDomain backend.example.com public.example.com
- ProxyPassReverseCookiePath / /mirror/foo/
- </example>
-
- <p>will not only cause a local request for the
- <code>http://example.com/mirror/foo/bar</code> to be internally converted
- into a proxy request to <code>http://backend.example.com/bar</code>
- (the functionality <code>ProxyPass</code> provides here). It also takes care
- of redirects the server <code>backend.example.com</code> sends: when
- <code>http://backend.example.com/bar</code> is redirected by him to
- <code>http://backend.example.com/quux</code> Apache adjusts this to
- <code>http://example.com/mirror/foo/quux</code> before forwarding the HTTP
- redirect response to the client. Note that the hostname used for
- constructing the URL is chosen in respect to the setting of the <directive
- module="core">UseCanonicalName</directive> directive.</p>
-
- <p>Note that this <directive>ProxyPassReverse</directive> directive can
- also be used in conjunction with the proxy pass-through feature
- (<code>RewriteRule ... [P]</code>) from <module>mod_rewrite</module>
- because its doesn't depend on a corresponding <directive module="mod_proxy"
- >ProxyPass</directive> directive.</p>
-
- <p>When used inside a <directive type="section" module="core"
- >Location</directive> section, the first argument is omitted and the local
- directory is obtained from the <directive type="section" module="core"
- >Location</directive>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyPassReverseCookieDomain</name>
-<description>Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</description>
-<syntax>ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-<usage>
-<p>Usage is basically similar to
-<directive module="mod_proxy">ProxyPassReverse</directive>, but instead of
-rewriting headers that are a URL, this rewrites the <code>domain</code>
-string in <code>Set-Cookie</code> headers.</p>
-</usage>
-</directivesynopsis>
-<directivesynopsis>
-<name>ProxyPassReverseCookiePath</name>
-<description>Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</description>
-<syntax>ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context>
-</contextlist>
-<usage>
-<p>Usage is basically similar to
-<directive module="mod_proxy">ProxyPassReverse</directive>, but instead of
-rewriting headers that are a URL, this rewrites the <code>path</code>
-string in <code>Set-Cookie</code> headers.</p>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>AllowCONNECT</name>
-<description>Ports that are allowed to <code>CONNECT</code> through the
-proxy</description>
-<syntax>AllowCONNECT <var>port</var> [<var>port</var>] ...</syntax>
-<default>AllowCONNECT 443 563</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>AllowCONNECT</directive> directive specifies a list
- of port numbers to which the proxy <code>CONNECT</code> method may
- connect. Today's browsers use this method when a <code>https</code>
- connection is requested and proxy tunneling over HTTP is in effect.</p>
-
- <p>By default, only the default https port (<code>443</code>) and the
- default snews port (<code>563</code>) are enabled. Use the
- <directive>AllowCONNECT</directive> directive to override this default and
- allow connections to the listed ports only.</p>
-
- <p>Note that you'll need to have <module>mod_proxy_connect</module> present
- in the server in order to get the support for the <code>CONNECT</code> at
- all.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyBlock</name>
-<description>Words, hosts, or domains that are banned from being
-proxied</description>
-<syntax>ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ProxyBlock</directive> directive specifies a list of
- words, hosts and/or domains, separated by spaces. HTTP, HTTPS, and
- FTP document requests to sites whose names contain matched words,
- hosts or domains are <em>blocked</em> by the proxy server. The proxy
- module will also attempt to determine IP addresses of list items which
- may be hostnames during startup, and cache them for match test as
- well. That may slow down the startup time of the server.</p>
-
- <example><title>Example</title>
- ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
- </example>
-
- <p><code>rocky.wotsamattau.edu</code> would also be matched if referenced by
- IP address.</p>
-
- <p>Note that <code>wotsamattau</code> would also be sufficient to match
- <code>wotsamattau.edu</code>.</p>
-
- <p>Note also that</p>
-
- <example>
- ProxyBlock *
- </example>
-
- <p>blocks connections to all sites.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyReceiveBufferSize</name>
-<description>Network buffer size for proxied HTTP and FTP
-connections</description>
-<syntax>ProxyReceiveBufferSize <var>bytes</var></syntax>
-<default>ProxyReceiveBufferSize 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ProxyReceiveBufferSize</directive> directive specifies an
- explicit (TCP/IP) network buffer size for proxied HTTP and FTP connections,
- for increased throughput. It has to be greater than <code>512</code> or set
- to <code>0</code> to indicate that the system's default buffer size should
- be used.</p>
-
- <example><title>Example</title>
- ProxyReceiveBufferSize 2048
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyIOBufferSize</name>
-<description>Determine size of internal data throughput buffer</description>
-<syntax>ProxyIOBufferSize <var>bytes</var></syntax>
-<default>ProxyIOBufferSize 8192</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>ProxyIOBufferSize</directive> directive adjusts the size
- of the internal buffer, which is used as a scratchpad for the data between
- input and output. The size must be less or equal <code>8192</code>.</p>
-
- <p>In almost every case there's no reason to change that value.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyMaxForwards</name>
-<description>Maximium number of proxies that a request can be forwarded
-through</description>
-<syntax>ProxyMaxForwards <var>number</var></syntax>
-<default>ProxyMaxForwards 10</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in Apache 2.0 and later</compatibility>
-
-<usage>
- <p>The <directive>ProxyMaxForwards</directive> directive specifies the
- maximum number of proxies through which a request may pass, if there's no
- <code>Max-Forwards</code> header supplied with the request. This is
- set to prevent infinite proxy loops, or a DoS attack.</p>
-
- <example><title>Example</title>
- ProxyMaxForwards 15
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NoProxy</name>
-<description>Hosts, domains, or networks that will be connected to
-directly</description>
-<syntax>NoProxy <var>host</var> [<var>host</var>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive is only useful for Apache proxy servers within
- intranets. The <directive>NoProxy</directive> directive specifies a
- list of subnets, IP addresses, hosts and/or domains, separated by
- spaces. A request to a host which matches one or more of these is
- always served directly, without forwarding to the configured
- <directive module="mod_proxy">ProxyRemote</directive> proxy server(s).</p>
-
- <example><title>Example</title>
- ProxyRemote * http://firewall.mycompany.com:81<br />
- NoProxy .mycompany.com 192.168.112.0/21
- </example>
-
- <p>The <var>host</var> arguments to the <directive>NoProxy</directive>
- directive are one of the following type list:</p>
-
- <dl>
- <!-- ===================== Domain ======================= -->
- <dt><var><a name="domain" id="domain">Domain</a></var></dt>
- <dd>
- <p>A <dfn>Domain</dfn> is a partially qualified DNS domain name, preceded
- by a period. It represents a list of hosts which logically belong to the
- same DNS domain or zone (<em>i.e.</em>, the suffixes of the hostnames are
- all ending in <var>Domain</var>).</p>
-
- <example><title>Examples</title>
- .com .apache.org.
- </example>
-
- <p>To distinguish <var>Domain</var>s from <var><a href="#hostname"
- >Hostname</a></var>s (both syntactically and semantically; a DNS domain can
- have a DNS A record, too!), <var>Domain</var>s are always written with a
- leading period.</p>
-
- <note><title>Note</title>
- <p>Domain name comparisons are done without regard to the case, and
- <var>Domain</var>s are always assumed to be anchored in the root of the
- DNS tree, therefore two domains <code>.MyDomain.com</code> and
- <code>.mydomain.com.</code> (note the trailing period) are considered
- equal. Since a domain comparison does not involve a DNS lookup, it is much
- more efficient than subnet comparison.</p>
- </note></dd>
-
- <!-- ===================== SubNet ======================= -->
- <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt>
- <dd>
- <p>A <dfn>SubNet</dfn> is a partially qualified internet address in
- numeric (dotted quad) form, optionally followed by a slash and the netmask,
- specified as the number of significant bits in the <var>SubNet</var>. It is
- used to represent a subnet of hosts which can be reached over a common
- network interface. In the absence of the explicit net mask it is assumed
- that omitted (or zero valued) trailing digits specify the mask. (In this
- case, the netmask can only be multiples of 8 bits wide.) Examples:</p>
-
- <dl>
- <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
- <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
- (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
- <dt><code>192.168.112.0/21</code></dt>
- <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
- valid bits (also used in the form 255.255.248.0)</dd>
- </dl>
-
- <p>As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
- equivalent to an <var><a href="#ipadr">IPAddr</a></var>, while a <var>SubNet</var> with zero
- valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
- <var>_Default_</var>, matching any IP address.</p></dd>
-
- <!-- ===================== IPAddr ======================= -->
- <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt>
- <dd>
- <p>A <dfn>IPAddr</dfn> represents a fully qualified internet address in
- numeric (dotted quad) form. Usually, this address represents a host, but
- there need not necessarily be a DNS domain name connected with the
- address.</p>
- <example><title>Example</title>
- 192.168.123.7
- </example>
-
- <note><title>Note</title>
- <p>An <var>IPAddr</var> does not need to be resolved by the DNS system, so
- it can result in more effective apache performance.</p>
- </note></dd>
-
- <!-- ===================== Hostname ======================= -->
- <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt>
- <dd>
- <p>A <dfn>Hostname</dfn> is a fully qualified DNS domain name which can
- be resolved to one or more <var><a href="#ipaddr">IPAddrs</a></var> via the
- DNS domain name service. It represents a logical host (in contrast to
- <var><a href="#domain">Domain</a></var>s, see above) and must be resolvable
- to at least one <var><a href="#ipaddr">IPAddr</a></var> (or often to a list
- of hosts with different <var><a href="#ipaddr">IPAddr</a></var>s).</p>
-
- <example><title>Examples</title>
- prep.ai.mit.edu<br />
- www.apache.org
- </example>
-
- <note><title>Note</title>
- <p>In many situations, it is more effective to specify an <var><a
- href="#ipaddr">IPAddr</a></var> in place of a <var>Hostname</var> since a
- DNS lookup can be avoided. Name resolution in Apache can take a remarkable
- deal of time when the connection to the name server uses a slow PPP
- link.</p>
- <p><var>Hostname</var> comparisons are done without regard to the case,
- and <var>Hostname</var>s are always assumed to be anchored in the root
- of the DNS tree, therefore two hosts <code>WWW.MyDomain.com</code>
- and <code>www.mydomain.com.</code> (note the trailing period) are
- considered equal.</p>
- </note></dd>
- </dl>
-</usage>
-<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyTimeout</name>
-<description>Network timeout for proxied requests</description>
-<syntax>ProxyTimeout <var>seconds</var></syntax>
-<default>ProxyTimeout 300</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in Apache 2.0.31 and later</compatibility>
-
-<usage>
- <p>This directive allows a user to specifiy a timeout on proxy requests.
- This is useful when you have a slow/buggy appserver which hangs, and you
- would rather just return a timeout and fail gracefully instead of waiting
- however long it takes the server to return.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyDomain</name>
-<description>Default domain name for proxied requests</description>
-<syntax>ProxyDomain <var>Domain</var></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive is only useful for Apache proxy servers within
- intranets. The <directive>ProxyDomain</directive> directive specifies
- the default domain which the apache proxy server will belong to. If a
- request to a host without a domain name is encountered, a redirection
- response to the same host with the configured <var>Domain</var> appended
- will be generated.</p>
-
- <example><title>Example</title>
- ProxyRemote * http://firewall.mycompany.com:81<br />
- NoProxy .mycompany.com 192.168.112.0/21<br />
- ProxyDomain .mycompany.com
- </example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyVia</name>
-<description>Information provided in the <code>Via</code> HTTP response
-header for proxied requests</description>
-<syntax>ProxyVia On|Off|Full|Block</syntax>
-<default>ProxyVia Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>This directive controls the use of the <code>Via:</code> HTTP
- header by the proxy. Its intended use is to control the flow of of
- proxy requests along a chain of proxy servers. See <a
- href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1), section
- 14.45 for an explanation of <code>Via:</code> header lines.</p>
-
- <ul>
- <li>If set to <code>Off</code>, which is the default, no special processing
- is performed. If a request or reply contains a <code>Via:</code> header,
- it is passed through unchanged.</li>
-
- <li>If set to <code>On</code>, each request and reply will get a
- <code>Via:</code> header line added for the current host.</li>
-
- <li>If set to <code>Full</code>, each generated <code>Via:</code> header
- line will additionally have the Apache server version shown as a
- <code>Via:</code> comment field.</li>
-
- <li>If set to <code>Block</code>, every proxy request will have all its
- <code>Via:</code> header lines removed. No new <code>Via:</code> header will
- be generated.</li>
- </ul>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyErrorOverride</name>
-<description>Override error pages for proxied content</description>
-<syntax>ProxyErrorOverride On|Off</syntax>
-<default>ProxyErrorOverride Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Available in version 2.0 and later</compatibility>
-
-<usage>
- <p>This directive is useful for reverse-proxy setups, where you want to
- have a common look and feel on the error pages seen by the end user.
- This also allows for included files (via mod_include's SSI) to get
- the error code and act accordingly (default behavior would display
- the error page of the proxied server, turning this on shows the SSI
- Error message).</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_proxy.xml.meta b/docs/manual/mod/mod_proxy.xml.meta
deleted file mode 100644
index 0c969e01db..0000000000
--- a/docs/manual/mod/mod_proxy.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_proxy</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_proxy_connect.html b/docs/manual/mod/mod_proxy_connect.html
deleted file mode 100644
index 315f683c7f..0000000000
--- a/docs/manual/mod/mod_proxy_connect.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_proxy_connect.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_proxy_connect.html.en b/docs/manual/mod/mod_proxy_connect.html.en
deleted file mode 100644
index 54b860d5a7..0000000000
--- a/docs/manual/mod/mod_proxy_connect.html.en
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_proxy_connect - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_proxy_connect</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_connect.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> extension for
-<code>CONNECT</code> request handling</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_connect_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>proxy_connect.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides support for the <code>CONNECT</code>
- HTTP method. This method is mainly used to tunnel SSL requests
- through proxy servers.</p>
-
- <p>Thus, in order to get the ability of handling <code>CONNECT</code>
- requests, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and
- <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> have to be present in the server.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>Do not enable proxying until you have <a href="mod_proxy.html#access">secured your server</a>. Open proxy
- servers are dangerous both to your network and to the Internet at
- large.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/mod_proxy.html#allowconnect">AllowCONNECT</a></code></li>
-<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
-</ul></div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_connect.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_proxy_connect.xml b/docs/manual/mod/mod_proxy_connect.xml
deleted file mode 100644
index 0007abe553..0000000000
--- a/docs/manual/mod/mod_proxy_connect.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_proxy_connect.xml.meta">
-
-<name>mod_proxy_connect</name>
-<description><module>mod_proxy</module> extension for
-<code>CONNECT</code> request handling</description>
-<status>Extension</status>
-<sourcefile>proxy_connect.c</sourcefile>
-<identifier>proxy_connect_module</identifier>
-
-<summary>
- <p>This module <em>requires</em> the service of <module
- >mod_proxy</module>. It provides support for the <code>CONNECT</code>
- HTTP method. This method is mainly used to tunnel SSL requests
- through proxy servers.</p>
-
- <p>Thus, in order to get the ability of handling <code>CONNECT</code>
- requests, <module>mod_proxy</module> and
- <module>mod_proxy_connect</module> have to be present in the server.</p>
-
- <note type="warning"><title>Warning</title>
- <p>Do not enable proxying until you have <a
- href="mod_proxy.html#access">secured your server</a>. Open proxy
- servers are dangerous both to your network and to the Internet at
- large.</p>
- </note>
-</summary>
-<seealso><directive module="mod_proxy">AllowCONNECT</directive></seealso>
-<seealso><module>mod_proxy</module></seealso>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_proxy_connect.xml.meta b/docs/manual/mod/mod_proxy_connect.xml.meta
deleted file mode 100644
index a5847ae1e8..0000000000
--- a/docs/manual/mod/mod_proxy_connect.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_proxy_connect</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_proxy_ftp.html b/docs/manual/mod/mod_proxy_ftp.html
deleted file mode 100644
index a0f912a252..0000000000
--- a/docs/manual/mod/mod_proxy_ftp.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_proxy_ftp.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_proxy_ftp.html.en b/docs/manual/mod/mod_proxy_ftp.html.en
deleted file mode 100644
index d6733741e3..0000000000
--- a/docs/manual/mod/mod_proxy_ftp.html.en
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_proxy_ftp - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_proxy_ftp</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_ftp.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>FTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_ftp_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>proxy_ftp.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides support for the proxying
- FTP sites. Note that FTP support is currently limited to
- the GET method.</p>
-
- <p>Thus, in order to get the ability of handling FTP proxy requests,
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>
- have to be present in the server.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>Do not enable proxying until you have <a href="mod_proxy.html#access">secured your server</a>. Open proxy
- servers are dangerous both to your network and to the Internet at
- large.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
-</ul></div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_ftp.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_proxy_ftp.xml b/docs/manual/mod/mod_proxy_ftp.xml
deleted file mode 100644
index 591d1c8ae1..0000000000
--- a/docs/manual/mod/mod_proxy_ftp.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_proxy_ftp.xml.meta">
-
-<name>mod_proxy_ftp</name>
-<description>FTP support module for
-<module>mod_proxy</module></description>
-<status>Extension</status>
-<sourcefile>proxy_ftp.c</sourcefile>
-<identifier>proxy_ftp_module</identifier>
-
-<summary>
- <p>This module <em>requires</em> the service of <module
- >mod_proxy</module>. It provides support for the proxying
- FTP sites. Note that FTP support is currently limited to
- the GET method.</p>
-
- <p>Thus, in order to get the ability of handling FTP proxy requests,
- <module>mod_proxy</module> and <module>mod_proxy_ftp</module>
- have to be present in the server.</p>
-
- <note type="warning"><title>Warning</title>
- <p>Do not enable proxying until you have <a
- href="mod_proxy.html#access">secured your server</a>. Open proxy
- servers are dangerous both to your network and to the Internet at
- large.</p>
- </note>
-</summary>
-<seealso><module>mod_proxy</module></seealso>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_proxy_ftp.xml.meta b/docs/manual/mod/mod_proxy_ftp.xml.meta
deleted file mode 100644
index 2941afd362..0000000000
--- a/docs/manual/mod/mod_proxy_ftp.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_proxy_ftp</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_proxy_http.html b/docs/manual/mod/mod_proxy_http.html
deleted file mode 100644
index 5be291027e..0000000000
--- a/docs/manual/mod/mod_proxy_http.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_proxy_http.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_proxy_http.html.en b/docs/manual/mod/mod_proxy_http.html.en
deleted file mode 100644
index 6b8f5015f2..0000000000
--- a/docs/manual/mod/mod_proxy_http.html.en
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_proxy_http - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_proxy_http</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_http.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>HTTP support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_http_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>proxy_http.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides the features used for
- proxying HTTP requests. <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
- supports HTTP/0.9, HTTP/1.0 and HTTP/1.1. It does <em>not</em>
- provide any caching abilities. If you want to set up a caching
- proxy, you might want to use the additional service of the
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> module.</p>
-
- <p>Thus, in order to get the ability of handling HTTP proxy requests,
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
- have to be present in the server.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>Do not enable proxying until you have <a href="mod_proxy.html#access">secured your server</a>. Open proxy
- servers are dangerous both to your network and to the Internet at
- large.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
-<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li>
-</ul></div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_http.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_proxy_http.xml b/docs/manual/mod/mod_proxy_http.xml
deleted file mode 100644
index 7ac6526531..0000000000
--- a/docs/manual/mod/mod_proxy_http.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_proxy_http.xml.meta">
-
-<name>mod_proxy_http</name>
-<description>HTTP support module for
-<module>mod_proxy</module></description>
-<status>Extension</status>
-<sourcefile>proxy_http.c</sourcefile>
-<identifier>proxy_http_module</identifier>
-
-<summary>
- <p>This module <em>requires</em> the service of <module
- >mod_proxy</module>. It provides the features used for
- proxying HTTP requests. <module>mod_proxy_http</module>
- supports HTTP/0.9, HTTP/1.0 and HTTP/1.1. It does <em>not</em>
- provide any caching abilities. If you want to set up a caching
- proxy, you might want to use the additional service of the
- <module>mod_cache</module> module.</p>
-
- <p>Thus, in order to get the ability of handling HTTP proxy requests,
- <module>mod_proxy</module> and <module>mod_proxy_http</module>
- have to be present in the server.</p>
-
- <note type="warning"><title>Warning</title>
- <p>Do not enable proxying until you have <a
- href="mod_proxy.html#access">secured your server</a>. Open proxy
- servers are dangerous both to your network and to the Internet at
- large.</p>
- </note>
-</summary>
-<seealso><module>mod_proxy</module></seealso>
-<seealso><module>mod_proxy_connect</module></seealso>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_proxy_http.xml.meta b/docs/manual/mod/mod_proxy_http.xml.meta
deleted file mode 100644
index eb39f10cec..0000000000
--- a/docs/manual/mod/mod_proxy_http.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_proxy_http</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_rewrite.html b/docs/manual/mod/mod_rewrite.html
deleted file mode 100644
index 5b651b93ab..0000000000
--- a/docs/manual/mod/mod_rewrite.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_rewrite.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_rewrite.html.en b/docs/manual/mod/mod_rewrite.html.en
deleted file mode 100644
index fd1e66f916..0000000000
--- a/docs/manual/mod/mod_rewrite.html.en
+++ /dev/null
@@ -1,1801 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_rewrite - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_rewrite</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_rewrite.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>rewrite_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_rewrite.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 1.3 and later</td></tr></table>
-<h3>Summary</h3>
-
- <blockquote>
- <p>``The great thing about mod_rewrite is it gives you
- all the configurability and flexibility of Sendmail.
- The downside to mod_rewrite is that it gives you all
- the configurability and flexibility of Sendmail.''</p>
-
- <p class="cite">-- <cite>Brian Behlendorf</cite><br />
- Apache Group</p>
-
- </blockquote>
-
- <blockquote>
- <p>`` Despite the tons of examples and docs,
- mod_rewrite is voodoo. Damned cool voodoo, but still
- voodoo. ''</p>
-
- <p class="cite">-- <cite>Brian Moore</cite><br />
- bem@news.cmc.net</p>
-
- </blockquote>
-
-
- <p>Welcome to mod_rewrite, the Swiss Army Knife of URL
- manipulation!</p>
-
- <p>This module uses a rule-based rewriting engine (based on a
- regular-expression parser) to rewrite requested URLs on the
- fly. It supports an unlimited number of rules and an
- unlimited number of attached rule conditions for each rule to
- provide a really flexible and powerful URL manipulation
- mechanism. The URL manipulations can depend on various tests,
- for instance server variables, environment variables, HTTP
- headers, time stamps and even external database lookups in
- various formats can be used to achieve a really granular URL
- matching.</p>
-
- <p>This module operates on the full URLs (including the
- path-info part) both in per-server context
- (<code>httpd.conf</code>) and per-directory context
- (<code>.htaccess</code>) and can even generate query-string
- parts on result. The rewritten result can lead to internal
- sub-processing, external request redirection or even to an
- internal proxy throughput.</p>
-
- <p>But all this functionality and flexibility has its
- drawback: complexity. So don't expect to understand this
- entire module in just one day.</p>
-
- <p>This module was invented and originally written in April
- 1996 and gifted exclusively to the The Apache Group in July 1997
- by</p>
-
- <p class="indent">
- <a href="http://www.engelschall.com/"><code>Ralf S.
- Engelschall</code></a><br />
- <a href="mailto:rse@engelschall.com"><code>rse@engelschall.com</code></a><br />
- <a href="http://www.engelschall.com/"><code>www.engelschall.com</code></a>
- </p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewritelock">RewriteLock</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewritelog">RewriteLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewriteloglevel">RewriteLogLevel</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#Internal">Internal Processing</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#EnvVar">Environment Variables</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Solutions">Practical Solutions</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Internal" id="Internal">Internal Processing</a></h2>
-
- <p>The internal processing of this module is very complex but
- needs to be explained once even to the average user to avoid
- common mistakes and to let you exploit its full
- functionality.</p>
-
-<h3><a name="InternalAPI" id="InternalAPI">API Phases</a></h3>
-
- <p>First you have to understand that when Apache processes a
- HTTP request it does this in phases. A hook for each of these
- phases is provided by the Apache API. Mod_rewrite uses two of
- these hooks: the URL-to-filename translation hook which is
- used after the HTTP request has been read but before any
- authorization starts and the Fixup hook which is triggered
- after the authorization phases and after the per-directory
- config files (<code>.htaccess</code>) have been read, but
- before the content handler is activated.</p>
-
- <p>So, after a request comes in and Apache has determined the
- corresponding server (or virtual server) the rewriting engine
- starts processing of all mod_rewrite directives from the
- per-server configuration in the URL-to-filename phase. A few
- steps later when the final data directories are found, the
- per-directory configuration directives of mod_rewrite are
- triggered in the Fixup phase. In both situations mod_rewrite
- rewrites URLs either to new URLs or to filenames, although
- there is no obvious distinction between them. This is a usage
- of the API which was not intended to be this way when the API
- was designed, but as of Apache 1.x this is the only way
- mod_rewrite can operate. To make this point more clear
- remember the following two points:</p>
-
- <ol>
- <li>Although mod_rewrite rewrites URLs to URLs, URLs to
- filenames and even filenames to filenames, the API
- currently provides only a URL-to-filename hook. In Apache
- 2.0 the two missing hooks will be added to make the
- processing more clear. But this point has no drawbacks for
- the user, it is just a fact which should be remembered:
- Apache does more in the URL-to-filename hook than the API
- intends for it.</li>
-
- <li>
- Unbelievably mod_rewrite provides URL manipulations in
- per-directory context, <em>i.e.</em>, within
- <code>.htaccess</code> files, although these are reached
- a very long time after the URLs have been translated to
- filenames. It has to be this way because
- <code>.htaccess</code> files live in the filesystem, so
- processing has already reached this stage. In other
- words: According to the API phases at this time it is too
- late for any URL manipulations. To overcome this chicken
- and egg problem mod_rewrite uses a trick: When you
- manipulate a URL/filename in per-directory context
- mod_rewrite first rewrites the filename back to its
- corresponding URL (which is usually impossible, but see
- the <code>RewriteBase</code> directive below for the
- trick to achieve this) and then initiates a new internal
- sub-request with the new URL. This restarts processing of
- the API phases.
-
- <p>Again mod_rewrite tries hard to make this complicated
- step totally transparent to the user, but you should
- remember here: While URL manipulations in per-server
- context are really fast and efficient, per-directory
- rewrites are slow and inefficient due to this chicken and
- egg problem. But on the other hand this is the only way
- mod_rewrite can provide (locally restricted) URL
- manipulations to the average user.</p>
- </li>
- </ol>
-
- <p>Don't forget these two points!</p>
-
-
-<h3><a name="InternalRuleset" id="InternalRuleset">Ruleset Processing</a></h3>
-
- <p>Now when mod_rewrite is triggered in these two API phases, it
- reads the configured rulesets from its configuration
- structure (which itself was either created on startup for
- per-server context or during the directory walk of the Apache
- kernel for per-directory context). Then the URL rewriting
- engine is started with the contained ruleset (one or more
- rules together with their conditions). The operation of the
- URL rewriting engine itself is exactly the same for both
- configuration contexts. Only the final result processing is
- different. </p>
-
- <p>The order of rules in the ruleset is important because the
- rewriting engine processes them in a special (and not very
- obvious) order. The rule is this: The rewriting engine loops
- through the ruleset rule by rule (<code class="directive"><a href="#rewriterule">RewriteRule</a></code> directives) and
- when a particular rule matches it optionally loops through
- existing corresponding conditions (<code>RewriteCond</code>
- directives). For historical reasons the conditions are given
- first, and so the control flow is a little bit long-winded. See
- Figure 1 for more details.</p>
-<p class="figure">
- <img src="../images/mod_rewrite_fig1.gif" width="428" height="385" alt="[Needs graphics capability to display]" /><br />
- <dfn>Figure 1:</dfn>The control flow through the rewriting ruleset
-</p>
- <p>As you can see, first the URL is matched against the
- <em>Pattern</em> of each rule. When it fails mod_rewrite
- immediately stops processing this rule and continues with the
- next rule. If the <em>Pattern</em> matches, mod_rewrite looks
- for corresponding rule conditions. If none are present, it
- just substitutes the URL with a new value which is
- constructed from the string <em>Substitution</em> and goes on
- with its rule-looping. But if conditions exist, it starts an
- inner loop for processing them in the order that they are
- listed. For conditions the logic is different: we don't match
- a pattern against the current URL. Instead we first create a
- string <em>TestString</em> by expanding variables,
- back-references, map lookups, <em>etc.</em> and then we try
- to match <em>CondPattern</em> against it. If the pattern
- doesn't match, the complete set of conditions and the
- corresponding rule fails. If the pattern matches, then the
- next condition is processed until no more conditions are
- available. If all conditions match, processing is continued
- with the substitution of the URL with
- <em>Substitution</em>.</p>
-
-
-
-<h3><a name="quoting" id="quoting">Quoting Special Characters</a></h3>
-
- <p>As of Apache 1.3.20, special characters in
- <em>TestString</em> and <em>Substitution</em> strings can be
- escaped (that is, treated as normal characters without their
- usual special meaning) by prefixing them with a slosh ('\')
- character. In other words, you can include an actual
- dollar-sign character in a <em>Substitution</em> string by
- using '<code>\$</code>'; this keeps mod_rewrite from trying
- to treat it as a backreference.</p>
-
-
-<h3><a name="InternalBackRefs" id="InternalBackRefs">Regex Back-Reference Availability</a></h3>
-
- <p>One important thing here has to be remembered: Whenever you
- use parentheses in <em>Pattern</em> or in one of the
- <em>CondPattern</em>, back-references are internally created
- which can be used with the strings <code>$N</code> and
- <code>%N</code> (see below). These are available for creating
- the strings <em>Substitution</em> and <em>TestString</em>.
- Figure 2 shows to which locations the back-references are
- transfered for expansion.</p>
-
-<p class="figure">
- <img src="../images/mod_rewrite_fig2.gif" width="381" height="179" alt="[Needs graphics capability to display]" /><br />
- <dfn>Figure 2:</dfn> The back-reference flow through a rule.
-</p>
- <p>We know this was a crash course on mod_rewrite's internal
- processing. But you will benefit from this knowledge when
- reading the following documentation of the available
- directives.</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="EnvVar" id="EnvVar">Environment Variables</a></h2>
-
- <p>This module keeps track of two additional (non-standard)
- CGI/SSI environment variables named <code>SCRIPT_URL</code>
- and <code>SCRIPT_URI</code>. These contain the
- <em>logical</em> Web-view to the current resource, while the
- standard CGI/SSI variables <code>SCRIPT_NAME</code> and
- <code>SCRIPT_FILENAME</code> contain the <em>physical</em>
- System-view. </p>
-
- <p>Notice: These variables hold the URI/URL <em>as they were
- initially requested</em>, <em>i.e.</em>, <em>before</em> any
- rewriting. This is important because the rewriting process is
- primarily used to rewrite logical URLs to physical
- pathnames.</p>
-
-<div class="example"><h3>Example</h3><pre>
-SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
-SCRIPT_FILENAME=/u/rse/.www/index.html
-SCRIPT_URL=/u/rse/
-SCRIPT_URI=http://en1.engelschall.com/u/rse/
-</pre></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Solutions" id="Solutions">Practical Solutions</a></h2>
-
- <p>We also have an <a href="../misc/rewriteguide.html">URL
- Rewriting Guide</a> available, which provides a collection of
- practical solutions for URL-based problems. There you can
- find real-life rulesets and additional information about
- mod_rewrite.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the base URL for per-directory rewrites</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteBase <em>URL-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for information.</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-</table>
- <p>The <code class="directive">RewriteBase</code> directive explicitly
- sets the base URL for per-directory rewrites. As you will see
- below, <code class="directive"><a href="#rewriterule">RewriteRule</a></code>
- can be used in per-directory config files
- (<code>.htaccess</code>). There it will act locally,
- <em>i.e.</em>, the local directory prefix is stripped at this
- stage of processing and your rewriting rules act only on the
- remainder. At the end it is automatically added back to the
- path. The default setting is; <code class="directive">RewriteBase</code> <em>physical-directory-path</em></p>
-
- <p>When a substitution occurs for a new URL, this module has
- to re-inject the URL into the server processing. To be able
- to do this it needs to know what the corresponding URL-prefix
- or URL-base is. By default this prefix is the corresponding
- filepath itself. <strong>But at most websites URLs are NOT
- directly related to physical filename paths, so this
- assumption will usually be wrong!</strong> There you have to
- use the <code>RewriteBase</code> directive to specify the
- correct URL-prefix.</p>
-
-<div class="note"> If your webserver's URLs are <strong>not</strong> directly
-related to physical file paths, you have to use
-<code class="directive">RewriteBase</code> in every <code>.htaccess</code>
-files where you want to use <code class="directive"><a href="#rewriterule">RewriteRule</a></code> directives.
-</div>
-
- <p> For example, assume the following per-directory config file:</p>
-
-<div class="example"><pre>
-#
-# /abc/def/.htaccess -- per-dir config file for directory /abc/def
-# Remember: /abc/def is the physical path of /xyz, <em>i.e.</em>, the server
-# has a 'Alias /xyz /abc/def' directive <em>e.g.</em>
-#
-
-RewriteEngine On
-
-# let the server know that we were reached via /xyz and not
-# via the physical path prefix /abc/def
-RewriteBase /xyz
-
-# now the rewriting rules
-RewriteRule ^oldstuff\.html$ newstuff.html
-</pre></div>
-
- <p>In the above example, a request to
- <code>/xyz/oldstuff.html</code> gets correctly rewritten to
- the physical file <code>/abc/def/newstuff.html</code>.</p>
-
-<div class="note"><h3>For Apache Hackers</h3>
-<p>The following list gives detailed information about
- the internal processing steps:</p>
-<pre>
-Request:
- /xyz/oldstuff.html
-
-Internal Processing:
- /xyz/oldstuff.html -&gt; /abc/def/oldstuff.html (per-server Alias)
- /abc/def/oldstuff.html -&gt; /abc/def/newstuff.html (per-dir RewriteRule)
- /abc/def/newstuff.html -&gt; /xyz/newstuff.html (per-dir RewriteBase)
- /xyz/newstuff.html -&gt; /abc/def/newstuff.html (per-server Alias)
-
-Result:
- /abc/def/newstuff.html
-</pre>
- <p>This seems very complicated but is
- the correct Apache internal processing, because the
- per-directory rewriting comes too late in the
- process. So, when it occurs the (rewritten) request
- has to be re-injected into the Apache kernel! BUT:
- While this seems like a serious overhead, it really
- isn't, because this re-injection happens fully
- internally to the Apache server and the same
- procedure is used by many other operations inside
- Apache. So, you can be sure the design and
- implementation is correct.</p>
-</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a condition under which rewriting will take place
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> RewriteCond
- <em>TestString</em> <em>CondPattern</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-</table>
- <p>The <code class="directive">RewriteCond</code> directive defines a
- rule condition. Precede a <code class="directive"><a href="#rewriterule">RewriteRule</a></code> directive with one
- or more <code class="directive">RewriteCond</code> directives. The following
- rewriting rule is only used if its pattern matches the current
- state of the URI <strong>and</strong> if these additional
- conditions apply too.</p>
-
- <p><em>TestString</em> is a string which can contains the
- following expanded constructs in addition to plain text:</p>
-
- <ul>
- <li>
- <strong>RewriteRule backreferences</strong>: These are
- backreferences of the form
-
- <p class="indent">
- <strong><code>$N</code></strong>
- </p>
- (0 &lt;= N &lt;= 9) which provide access to the grouped
- parts (parenthesis!) of the pattern from the
- corresponding <code>RewriteRule</code> directive (the one
- following the current bunch of <code>RewriteCond</code>
- directives).
- </li>
-
- <li>
- <strong>RewriteCond backreferences</strong>: These are
- backreferences of the form
-
- <p class="indent">
- <strong><code>%N</code></strong>
- </p>
- (1 &lt;= N &lt;= 9) which provide access to the grouped
- parts (parentheses!) of the pattern from the last matched
- <code>RewriteCond</code> directive in the current bunch
- of conditions.
- </li>
-
- <li>
- <strong>RewriteMap expansions</strong>: These are
- expansions of the form
-
- <p class="indent">
- <strong><code>${mapname:key|default}</code></strong>
- </p>
- See <a href="#mapfunc">the documentation for
- RewriteMap</a> for more details.
- </li>
-
- <li>
- <strong>Server-Variables</strong>: These are variables of
- the form
-
- <p class="indent">
- <strong><code>%{</code> <em>NAME_OF_VARIABLE</em>
- <code>}</code></strong>
- </p>
- where <em>NAME_OF_VARIABLE</em> can be a string taken
- from the following list:
-
- <table>
-
- <tr>
- <th>HTTP headers:</th> <th>connection &amp; request:</th> <th />
- </tr>
-
- <tr>
- <td>
- HTTP_USER_AGENT<br />
- HTTP_REFERER<br />
- HTTP_COOKIE<br />
- HTTP_FORWARDED<br />
- HTTP_HOST<br />
- HTTP_PROXY_CONNECTION<br />
- HTTP_ACCEPT<br />
- </td>
-
- <td>
- REMOTE_ADDR<br />
- REMOTE_HOST<br />
- REMOTE_PORT<br />
- REMOTE_USER<br />
- REMOTE_IDENT<br />
- REQUEST_METHOD<br />
- SCRIPT_FILENAME<br />
- PATH_INFO<br />
- QUERY_STRING<br />
- AUTH_TYPE<br />
- </td>
-
- <td />
- </tr>
-
- <tr>
- <th>server internals:</th> <th>system stuff:</th> <th>specials:</th>
- </tr>
-
- <tr>
- <td>
- DOCUMENT_ROOT<br />
- SERVER_ADMIN<br />
- SERVER_NAME<br />
- SERVER_ADDR<br />
- SERVER_PORT<br />
- SERVER_PROTOCOL<br />
- SERVER_SOFTWARE<br />
- </td>
-
- <td>
- TIME_YEAR<br />
- TIME_MON<br />
- TIME_DAY<br />
- TIME_HOUR<br />
- TIME_MIN<br />
- TIME_SEC<br />
- TIME_WDAY<br />
- TIME<br />
- </td>
-
- <td>
- API_VERSION<br />
- THE_REQUEST<br />
- REQUEST_URI<br />
- REQUEST_FILENAME<br />
- IS_SUBREQ<br />
- HTTPS<br />
- </td>
- </tr>
- </table>
-
-<div class="note">
- <p>These variables all
- correspond to the similarly named HTTP
- MIME-headers, C variables of the Apache server or
- <code>struct tm</code> fields of the Unix system.
- Most are documented elsewhere in the Manual or in
- the CGI specification. Those that are special to
- mod_rewrite include:</p>
-
- <dl>
- <dt><code>IS_SUBREQ</code></dt>
-
- <dd>Will contain the text "true" if the request
- currently being processed is a sub-request,
- "false" otherwise. Sub-requests may be generated
- by modules that need to resolve additional files
- or URIs in order to complete their tasks.</dd>
-
- <dt><code>API_VERSION</code></dt>
-
- <dd>This is the version of the Apache module API
- (the internal interface between server and
- module) in the current httpd build, as defined in
- include/ap_mmn.h. The module API version
- corresponds to the version of Apache in use (in
- the release version of Apache 1.3.14, for
- instance, it is 19990320:10), but is mainly of
- interest to module authors.</dd>
-
- <dt><code>THE_REQUEST</code></dt>
-
- <dd>The full HTTP request line sent by the
- browser to the server (e.g., "<code>GET
- /index.html HTTP/1.1</code>"). This does not
- include any additional headers sent by the
- browser.</dd>
-
- <dt><code>REQUEST_URI</code></dt>
-
- <dd>The resource requested in the HTTP request
- line. (In the example above, this would be
- "/index.html".)</dd>
-
- <dt><code>REQUEST_FILENAME</code></dt>
-
- <dd>The full local filesystem path to the file or
- script matching the request.</dd>
-
- <dt><code>HTTPS</code></dt>
-
- <dd>Will contain the text "on" if the connection is
- using SSL/TLS, or "off" otherwise. (This variable
- can be safely used regardless of whether
- <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is loaded).</dd>
-
- </dl>
-</div>
- </li>
- </ul>
-
- <p>Special Notes:</p>
-
- <ol>
- <li>The variables SCRIPT_FILENAME and REQUEST_FILENAME
- contain the same value, <em>i.e.</em>, the value of the
- <code>filename</code> field of the internal
- <code>request_rec</code> structure of the Apache server.
- The first name is just the commonly known CGI variable name
- while the second is the consistent counterpart to
- REQUEST_URI (which contains the value of the
- <code>uri</code> field of <code>request_rec</code>).</li>
-
- <li>There is the special format:
- <code>%{ENV:variable}</code> where <em>variable</em> can be
- any environment variable. This is looked-up via internal
- Apache structures and (if not found there) via
- <code>getenv()</code> from the Apache server process.</li>
-
- <li>There is the special format:
- <code>%{SSL:variable}</code> where <em>variable</em> is the
- name of an <a href="mod_ssl.html#envvars">SSL environment
- variable</a>; this can be used whether or not
- <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is loaded, but will always expand to
- the empty string if it is not. Example:
- <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> may expand to
- <code>128</code>.</li>
-
- <li>There is the special format:
- <code>%{HTTP:header}</code> where <em>header</em> can be
- any HTTP MIME-header name. This is looked-up from the HTTP
- request. Example: <code>%{HTTP:Proxy-Connection}</code> is
- the value of the HTTP header
- ``<code>Proxy-Connection:</code>''.</li>
-
- <li>There is the special format
- <code>%{LA-U:variable}</code> for look-aheads which perform
- an internal (URL-based) sub-request to determine the final
- value of <em>variable</em>. Use this when you want to use a
- variable for rewriting which is actually set later in an
- API phase and thus is not available at the current stage.
- For instance when you want to rewrite according to the
- <code>REMOTE_USER</code> variable from within the
- per-server context (<code>httpd.conf</code> file) you have
- to use <code>%{LA-U:REMOTE_USER}</code> because this
- variable is set by the authorization phases which come
- <em>after</em> the URL translation phase where mod_rewrite
- operates. On the other hand, because mod_rewrite implements
- its per-directory context (<code>.htaccess</code> file) via
- the Fixup phase of the API and because the authorization
- phases come <em>before</em> this phase, you just can use
- <code>%{REMOTE_USER}</code> there.</li>
-
- <li>There is the special format:
- <code>%{LA-F:variable}</code> which performs an internal
- (filename-based) sub-request to determine the final value
- of <em>variable</em>. Most of the time this is the same as
- LA-U above.</li>
- </ol>
-
- <p><em>CondPattern</em> is the condition pattern,
- <em>i.e.</em>, a regular expression which is applied to the
- current instance of the <em>TestString</em>, <em>i.e.</em>,
- <em>TestString</em> is evaluated and then matched against
- <em>CondPattern</em>.</p>
-
- <p><strong>Remember:</strong> <em>CondPattern</em> is a
- <em>perl compatible regular expression</em> with some
- additions:</p>
-
- <ol>
- <li>You can prefix the pattern string with a
- '<code>!</code>' character (exclamation mark) to specify a
- <strong>non</strong>-matching pattern.</li>
-
- <li>
- There are some special variants of <em>CondPatterns</em>.
- Instead of real regular expression strings you can also
- use one of the following:
-
- <ul>
- <li>'<strong>&lt;CondPattern</strong>' (is lexically
- lower)<br />
- Treats the <em>CondPattern</em> as a plain string and
- compares it lexically to <em>TestString</em>. True if
- <em>TestString</em> is lexically lower than
- <em>CondPattern</em>.</li>
-
- <li>'<strong>&gt;CondPattern</strong>' (is lexically
- greater)<br />
- Treats the <em>CondPattern</em> as a plain string and
- compares it lexically to <em>TestString</em>. True if
- <em>TestString</em> is lexically greater than
- <em>CondPattern</em>.</li>
-
- <li>'<strong>=CondPattern</strong>' (is lexically
- equal)<br />
- Treats the <em>CondPattern</em> as a plain string and
- compares it lexically to <em>TestString</em>. True if
- <em>TestString</em> is lexically equal to
- <em>CondPattern</em>, i.e the two strings are exactly
- equal (character by character). If <em>CondPattern</em>
- is just <code>""</code> (two quotation marks) this
- compares <em>TestString</em> to the empty string.</li>
-
- <li>'<strong>-d</strong>' (is
- <strong>d</strong>irectory)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a directory.</li>
-
- <li>'<strong>-f</strong>' (is regular
- <strong>f</strong>ile)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a regular file.</li>
-
- <li>'<strong>-s</strong>' (is regular file with
- <strong>s</strong>ize)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a regular file with size greater
- than zero.</li>
-
- <li>'<strong>-l</strong>' (is symbolic
- <strong>l</strong>ink)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a symbolic link.</li>
-
- <li>'<strong>-x</strong>' (has e<strong>x</strong>ecutable
- permissions)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and has execution permissions. These permissions
- are determined depending on the underlying OS.</li>
-
- <li>'<strong>-F</strong>' (is existing file via
- subrequest)<br />
- Checks if <em>TestString</em> is a valid file and
- accessible via all the server's currently-configured
- access controls for that path. This uses an internal
- subrequest to determine the check, so use it with care
- because it decreases your servers performance!</li>
-
- <li>'<strong>-U</strong>' (is existing URL via
- subrequest)<br />
- Checks if <em>TestString</em> is a valid URL and
- accessible via all the server's currently-configured
- access controls for that path. This uses an internal
- subrequest to determine the check, so use it with care
- because it decreases your server's performance!</li>
- </ul>
-
-<div class="note"><h3>Notice</h3>
- All of these tests can
- also be prefixed by an exclamation mark ('!') to
- negate their meaning.
-</div>
- </li>
- </ol>
-
- <p>Additionally you can set special flags for
- <em>CondPattern</em> by appending</p>
-
- <p class="indent">
- <strong><code>[</code><em>flags</em><code>]</code></strong>
- </p>
-
- <p>as the third argument to the <code>RewriteCond</code>
- directive. <em>Flags</em> is a comma-separated list of the
- following flags:</p>
-
- <ul>
- <li>'<strong><code>nocase|NC</code></strong>'
- (<strong>n</strong>o <strong>c</strong>ase)<br />
- This makes the test case-insensitive, <em>i.e.</em>, there
- is no difference between 'A-Z' and 'a-z' both in the
- expanded <em>TestString</em> and the <em>CondPattern</em>.
- This flag is effective only for comparisons between
- <em>TestString</em> and <em>CondPattern</em>. It has no
- effect on filesystem and subrequest checks.</li>
-
- <li>
- '<strong><code>ornext|OR</code></strong>'
- (<strong>or</strong> next condition)<br />
- Use this to combine rule conditions with a local OR
- instead of the implicit AND. Typical example:
-
-<div class="example"><pre>
-RewriteCond %{REMOTE_HOST} ^host1.* [OR]
-RewriteCond %{REMOTE_HOST} ^host2.* [OR]
-RewriteCond %{REMOTE_HOST} ^host3.*
-RewriteRule ...some special stuff for any of these hosts...
-</pre></div>
-
- Without this flag you would have to write the cond/rule
- three times.
- </li>
- </ul>
-
- <p><strong>Example:</strong></p>
-
- <p>To rewrite the Homepage of a site according to the
- ``<code>User-Agent:</code>'' header of the request, you can
- use the following: </p>
-
-<div class="example"><pre>
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
-RewriteRule ^/$ /homepage.max.html [L]
-
-RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
-RewriteRule ^/$ /homepage.min.html [L]
-
-RewriteRule ^/$ /homepage.std.html [L]
-</pre></div>
-
- <p>Interpretation: If you use Netscape Navigator as your
- browser (which identifies itself as 'Mozilla'), then you
- get the max homepage, which includes Frames, <em>etc.</em>
- If you use the Lynx browser (which is Terminal-based), then
- you get the min homepage, which contains no images, no
- tables, <em>etc.</em> If you use any other browser you get
- the standard homepage.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables or disables runtime rewriting engine</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteEngine on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>RewriteEngine off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-</table>
-
- <p>The <code class="directive">RewriteEngine</code> directive enables or
- disables the runtime rewriting engine. If it is set to
- <code>off</code> this module does no runtime processing at
- all. It does not even update the <code>SCRIPT_URx</code>
- environment variables.</p>
-
- <p>Use this directive to disable the module instead of
- commenting out all the <code class="directive"><a href="#rewriterule">RewriteRule</a></code> directives!</p>
-
- <p>Note that, by default, rewrite configurations are not
- inherited. This means that you need to have a
- <code>RewriteEngine on</code> directive for each virtual host
- in which you wish to use it.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteLock" id="RewriteLock">RewriteLock</a> <a name="rewritelock" id="rewritelock">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of the lock file used for RewriteMap
-synchronization</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteLock <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-</table>
- <p>This directive sets the filename for a synchronization
- lockfile which mod_rewrite needs to communicate with <code class="directive"><a href="#rewritemap">RewriteMap</a></code>
- <em>programs</em>. Set this lockfile to a local path (not on a
- NFS-mounted device) when you want to use a rewriting
- map-program. It is not required for other types of rewriting
- maps.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteLog" id="RewriteLog">RewriteLog</a> <a name="rewritelog" id="rewritelog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the name of the file used for logging rewrite engine
-processing</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteLog <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-</table>
- <p>The <code class="directive">RewriteLog</code> directive sets the name
- of the file to which the server logs any rewriting actions it
- performs. If the name does not begin with a slash
- ('<code>/</code>') then it is assumed to be relative to the
- <em>Server Root</em>. The directive should occur only once per
- server config.</p>
-
-<div class="note"> To disable the logging of
- rewriting actions it is not recommended to set
- <em>Filename</em> to <code>/dev/null</code>, because
- although the rewriting engine does not then output to a
- logfile it still creates the logfile output internally.
- <strong>This will slow down the server with no advantage
- to the administrator!</strong> To disable logging either
- remove or comment out the <code class="directive">RewriteLog</code>
- directive or use <code>RewriteLogLevel 0</code>!
-</div>
-
-<div class="note"><h3>Security</h3>
-
-See the <a href="../misc/security_tips.html">Apache Security Tips</a>
-document for details on why your security could be compromised if the
-directory where logfiles are stored is writable by anyone other than
-the user that starts the server.
-</div>
-
-<div class="example"><h3>Example</h3><p><code>
-RewriteLog "/usr/local/var/apache/logs/rewrite.log"
-</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteLogLevel" id="RewriteLogLevel">RewriteLogLevel</a> <a name="rewriteloglevel" id="rewriteloglevel">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the verbosity of the log file used by the rewrite
-engine</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteLogLevel <em>Level</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>RewriteLogLevel 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-</table>
- <p>The <code class="directive">RewriteLogLevel</code> directive sets the
- verbosity level of the rewriting logfile. The default level 0
- means no logging, while 9 or more means that practically all
- actions are logged.</p>
-
- <p>To disable the logging of rewriting actions simply set
- <em>Level</em> to 0. This disables all rewrite action
- logs.</p>
-
-<div class="note"> Using a high value for
- <em>Level</em> will slow down your Apache server
- dramatically! Use the rewriting logfile at a
- <em>Level</em> greater than 2 only for debugging!
-</div>
-
-<div class="example"><h3>Example</h3><p><code>
-RewriteLogLevel 3
-</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a mapping function for key-lookup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The choice of different dbm types is available in
-Apache 2.0.41 and later</td></tr>
-</table>
- <p>The <code class="directive">RewriteMap</code> directive defines a
- <em>Rewriting Map</em> which can be used inside rule
- substitution strings by the mapping-functions to
- insert/substitute fields through a key lookup. The source of
- this lookup can be of various types.</p>
-
- <p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
- the name of the map and will be used to specify a
- mapping-function for the substitution strings of a rewriting
- rule via one of the following constructs:</p>
-
- <p class="indent">
- <strong><code>${</code> <em>MapName</em> <code>:</code>
- <em>LookupKey</em> <code>}</code><br />
- <code>${</code> <em>MapName</em> <code>:</code>
- <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
- <code>}</code></strong>
- </p>
-
- <p>When such a construct occurs the map <em>MapName</em> is
- consulted and the key <em>LookupKey</em> is looked-up. If the
- key is found, the map-function construct is substituted by
- <em>SubstValue</em>. If the key is not found then it is
- substituted by <em>DefaultValue</em> or by the empty string
- if no <em>DefaultValue</em> was specified.</p>
-
- <p>The following combinations for <em>MapType</em> and
- <em>MapSource</em> can be used:</p>
-
- <ul>
- <li>
- <strong>Standard Plain Text</strong><br />
- MapType: <code>txt</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>This is the standard rewriting map feature where the
- <em>MapSource</em> is a plain ASCII file containing
- either blank lines, comment lines (starting with a '#'
- character) or pairs like the following - one per
- line.</p>
-
- <p class="indent">
- <strong><em>MatchingKey</em>
- <em>SubstValue</em></strong>
- </p>
-
-<div class="example"><h3>Example</h3><pre>
-##
-## map.txt -- rewriting map
-##
-
-Ralf.S.Engelschall rse # Bastard Operator From Hell
-Mr.Joe.Average joe # Mr. Average
-</pre></div>
-
-<div class="example"><p><code>
-RewriteMap real-to-user txt:/path/to/file/map.txt
-</code></p></div>
- </li>
-
- <li>
- <strong>Randomized Plain Text</strong><br />
- MapType: <code>rnd</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>This is identical to the Standard Plain Text variant
- above but with a special post-processing feature: After
- looking up a value it is parsed according to contained
- ``<code>|</code>'' characters which have the meaning of
- ``or''. In other words they indicate a set of
- alternatives from which the actual returned value is
- chosen randomly. Although this sounds crazy and useless,
- it was actually designed for load balancing in a reverse
- proxy situation where the looked up values are server
- names. Example:</p>
-
-<div class="example"><pre>
-##
-## map.txt -- rewriting map
-##
-
-static www1|www2|www3|www4
-dynamic www5|www6
-</pre></div>
-
-<div class="example"><p><code>
-RewriteMap servers rnd:/path/to/file/map.txt
-</code></p></div>
- </li>
-
- <li>
- <strong>Hash File</strong><br /> MapType:
- <code>dbm[=<em>type</em>]</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>Here the source is a binary format DBM file containing
- the same contents as a <em>Plain Text</em> format file, but
- in a special representation which is optimized for really
- fast lookups. The <em>type</em> can be sdbm, gdbm, ndbm, or
- db depending on <a href="../install.html#dbm">compile-time
- settings</a>. If the <em>type</em> is omitted, the
- compile-time default will be chosen. You can create such a
- file with any DBM tool or with the following Perl
- script. Be sure to adjust it to create the appropriate
- type of DBM. The example creates an NDBM file.</p>
-
-<div class="example"><pre>
-#!/path/to/bin/perl
-##
-## txt2dbm -- convert txt map to dbm format
-##
-
-use NDBM_File;
-use Fcntl;
-
-($txtmap, $dbmmap) = @ARGV;
-
-open(TXT, "&lt;$txtmap") or die "Couldn't open $txtmap!\n";
-tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644)
- or die "Couldn't create $dbmmap!\n";
-
-while (&lt;TXT&gt;) {
- next if (/^\s*#/ or /^\s*$/);
- $DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/);
-}
-
-untie %DB;
-close(TXT);
-</pre></div>
-
-<div class="example"><p><code>
-$ txt2dbm map.txt map.db
-</code></p></div>
- </li>
-
- <li>
- <strong>Internal Function</strong><br />
- MapType: <code>int</code>, MapSource: Internal Apache
- function
-
- <p>Here the source is an internal Apache function.
- Currently you cannot create your own, but the following
- functions already exists:</p>
-
- <ul>
- <li><strong>toupper</strong>:<br />
- Converts the looked up key to all upper case.</li>
-
- <li><strong>tolower</strong>:<br />
- Converts the looked up key to all lower case.</li>
-
- <li><strong>escape</strong>:<br />
- Translates special characters in the looked up key to
- hex-encodings.</li>
-
- <li><strong>unescape</strong>:<br />
- Translates hex-encodings in the looked up key back to
- special characters.</li>
- </ul>
- </li>
-
- <li>
- <strong>External Rewriting Program</strong><br />
- MapType: <code>prg</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>Here the source is a program, not a map file. To
- create it you can use the language of your choice, but
- the result has to be a executable (<em>i.e.</em>, either
- object-code or a script with the magic cookie trick
- '<code>#!/path/to/interpreter</code>' as the first
- line).</p>
-
- <p>This program is started once at startup of the Apache
- servers and then communicates with the rewriting engine
- over its <code>stdin</code> and <code>stdout</code>
- file-handles. For each map-function lookup it will
- receive the key to lookup as a newline-terminated string
- on <code>stdin</code>. It then has to give back the
- looked-up value as a newline-terminated string on
- <code>stdout</code> or the four-character string
- ``<code>NULL</code>'' if it fails (<em>i.e.</em>, there
- is no corresponding value for the given key). A trivial
- program which will implement a 1:1 map (<em>i.e.</em>,
- key == value) could be:</p>
-
-<div class="example"><pre>
-#!/usr/bin/perl
-$| = 1;
-while (&lt;STDIN&gt;) {
- # ...put here any transformations or lookups...
- print $_;
-}
-</pre></div>
-
- <p>But be very careful:</p>
-
- <ol>
- <li>``<em>Keep it simple, stupid</em>'' (KISS), because
- if this program hangs it will hang the Apache server
- when the rule occurs.</li>
-
- <li>Avoid one common mistake: never do buffered I/O on
- <code>stdout</code>! This will cause a deadloop! Hence
- the ``<code>$|=1</code>'' in the above example...</li>
-
- <li>Use the <code class="directive"><a href="#rewritelock">RewriteLock</a></code> directive to
- define a lockfile mod_rewrite can use to synchronize the
- communication to the program. By default no such
- synchronization takes place.</li>
- </ol>
- </li>
- </ul>
- <p>The <code class="directive">RewriteMap</code> directive can occur more than
- once. For each mapping-function use one
- <code class="directive">RewriteMap</code> directive to declare its rewriting
- mapfile. While you cannot <strong>declare</strong> a map in
- per-directory context it is of course possible to
- <strong>use</strong> this map in per-directory context. </p>
-
-<div class="note"><h3>Note</h3> For plain text and DBM format files the
-looked-up keys are cached in-core until the <code>mtime</code> of the
-mapfile changes or the server does a restart. This way you can have
-map-functions in rules which are used for <strong>every</strong>
-request. This is no problem, because the external lookup only happens
-once!
-</div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets some special options for the rewrite engine</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>RewriteOptions MaxRedirects=10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><code>MaxRedirects</code> is available in Apache 2.0.45 and
-later</td></tr>
-</table>
-
- <p>The <code class="directive">RewriteOptions</code> directive sets some
- special options for the current per-server or per-directory
- configuration. The <em>Option</em> strings can be one of the
- following:</p>
-
- <dl>
- <dt><code>inherit</code></dt>
- <dd>This forces the current configuration to inherit the
- configuration of the parent. In per-virtual-server context
- this means that the maps, conditions and rules of the main
- server are inherited. In per-directory context this means
- that conditions and rules of the parent directory's
- <code>.htaccess</code> configuration are inherited.</dd>
-
- <dt><code>MaxRedirects=<var>number</var></code></dt>
- <dd>In order to prevent endless loops of internal redirects
- issued by per-directory <code class="directive"><a href="#rewriterule">RewriteRule</a></code>s, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> aborts
- the request after reaching a maximum number of such redirects and
- responds with an 500 Internal Server Error. If you really need
- more internal redirects than 10 per request, you may increase
- the default to the desired value.</dd>
- </dl>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines rules for the rewriting engine</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteRule
- <em>Pattern</em> <em>Substitution</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The cookie-flag is available in Apache 2.0.40 and later.</td></tr>
-</table>
- <p>The <code class="directive">RewriteRule</code> directive is the real
- rewriting workhorse. The directive can occur more than once.
- Each directive then defines one single rewriting rule. The
- <strong>definition order</strong> of these rules is
- <strong>important</strong>, because this order is used when
- applying the rules at run-time.</p>
-
- <p><a id="patterns" name="patterns"><em>Pattern</em></a> is
- a perl compatible <a id="regexp" name="regexp">regular
- expression</a> which gets applied to the current URL. Here
- ``current'' means the value of the URL when this rule gets
- applied. This may not be the originally requested URL,
- because any number of rules may already have matched and made
- alterations to it.</p>
-
- <p>Some hints about the syntax of regular expressions:</p>
-
-<div class="note"><pre>
-<strong>Text:</strong>
- <strong><code>.</code></strong> Any single character
- <strong><code>[</code></strong>chars<strong><code>]</code></strong> Character class: One of chars
- <strong><code>[^</code></strong>chars<strong><code>]</code></strong> Character class: None of chars
- text1<strong><code>|</code></strong>text2 Alternative: text1 or text2
-
-<strong>Quantifiers:</strong>
- <strong><code>?</code></strong> 0 or 1 of the preceding text
- <strong><code>*</code></strong> 0 or N of the preceding text (N &gt; 0)
- <strong><code>+</code></strong> 1 or N of the preceding text (N &gt; 1)
-
-<strong>Grouping:</strong>
- <strong><code>(</code></strong>text<strong><code>)</code></strong> Grouping of text
- (either to set the borders of an alternative or
- for making backreferences where the <strong>N</strong>th group can
- be used on the RHS of a RewriteRule with <code>$</code><strong>N</strong>)
-
-<strong>Anchors:</strong>
- <strong><code>^</code></strong> Start of line anchor
- <strong><code>$</code></strong> End of line anchor
-
-<strong>Escaping:</strong>
- <strong><code>\</code></strong>char escape that particular char
- (for instance to specify the chars "<code>.[]()</code>" <em>etc.</em>)
-</pre></div>
-
- <p>For more information about regular expressions have a look at the
- perl regular expression manpage ("<a href="http://www.perldoc.com/perl5.6.1/pod/perlre.html">perldoc
- perlre</a>"). If you are interested in more detailed
- information about regular expressions and their variants
- (POSIX regex <em>etc.</em>) have a look at the
- following dedicated book on this topic:</p>
-
- <p class="indent">
- <em>Mastering Regular Expressions</em><br />
- Jeffrey E.F. Friedl<br />
- Nutshell Handbook Series<br />
- O'Reilly &amp; Associates, Inc. 1997<br />
- ISBN 1-56592-257-3<br />
- </p>
-
- <p>Additionally in mod_rewrite the NOT character
- ('<code>!</code>') is a possible pattern prefix. This gives
- you the ability to negate a pattern; to say, for instance:
- ``<em>if the current URL does <strong>NOT</strong> match this
- pattern</em>''. This can be used for exceptional cases, where
- it is easier to match the negative pattern, or as a last
- default rule.</p>
-
-<div class="note"><h3>Notice</h3>
-When using the NOT character
- to negate a pattern you cannot have grouped wildcard
- parts in the pattern. This is impossible because when the
- pattern does NOT match, there are no contents for the
- groups. In consequence, if negated patterns are used, you
- cannot use <code>$N</code> in the substitution
- string!
-</div>
-
- <p><a id="rhs" name="rhs"><em>Substitution</em></a> of a
- rewriting rule is the string which is substituted for (or
- replaces) the original URL for which <em>Pattern</em>
- matched. Beside plain text you can use</p>
-
- <ol>
- <li>back-references <code>$N</code> to the RewriteRule
- pattern</li>
-
- <li>back-references <code>%N</code> to the last matched
- RewriteCond pattern</li>
-
- <li>server-variables as in rule condition test-strings
- (<code>%{VARNAME}</code>)</li>
-
- <li><a href="#mapfunc">mapping-function</a> calls
- (<code>${mapname:key|default}</code>)</li>
- </ol>
- <p>Back-references are <code>$</code><strong>N</strong>
- (<strong>N</strong>=0..9) identifiers which will be replaced
- by the contents of the <strong>N</strong>th group of the
- matched <em>Pattern</em>. The server-variables are the same
- as for the <em>TestString</em> of a <code>RewriteCond</code>
- directive. The mapping-functions come from the
- <code>RewriteMap</code> directive and are explained there.
- These three types of variables are expanded in the order of
- the above list. </p>
-
- <p>As already mentioned above, all the rewriting rules are
- applied to the <em>Substitution</em> (in the order of
- definition in the config file). The URL is <strong>completely
- replaced</strong> by the <em>Substitution</em> and the
- rewriting process goes on until there are no more rules
- unless explicitly terminated by a
- <code><strong>L</strong></code> flag - see below.</p>
-
- <p>There is a special substitution string named
- '<code>-</code>' which means: <strong>NO
- substitution</strong>! Sounds silly? No, it is useful to
- provide rewriting rules which <strong>only</strong> match
- some URLs but do no substitution, <em>e.g.</em>, in
- conjunction with the <strong>C</strong> (chain) flag to be
- able to have more than one pattern to be applied before a
- substitution occurs.</p>
-
- <p>One more note: You can even create URLs in the
- substitution string containing a query string part. Just use
- a question mark inside the substitution string to indicate
- that the following stuff should be re-injected into the
- QUERY_STRING. When you want to erase an existing query
- string, end the substitution string with just the question
- mark.</p>
-
-<div class="note"><h3>Note</h3>
-There is a special feature:
- When you prefix a substitution field with
- <code>http://</code><em>thishost</em>[<em>:thisport</em>]
- then <strong>mod_rewrite</strong> automatically strips it
- out. This auto-reduction on implicit external redirect
- URLs is a useful and important feature when used in
- combination with a mapping-function which generates the
- hostname part. Have a look at the first example in the
- example section below to understand this.
-</div>
-
-<div class="note"><h3>Remember</h3>
- An unconditional external
- redirect to your own server will not work with the prefix
- <code>http://thishost</code> because of this feature. To
- achieve such a self-redirect, you have to use the
- <strong>R</strong>-flag (see below).
-</div>
-
- <p>Additionally you can set special flags for
- <em>Substitution</em> by appending</p>
-
- <p class="indent">
- <strong><code>[</code><em>flags</em><code>]</code></strong>
- </p>
- <p>
- as the third argument to the <code>RewriteRule</code>
- directive. <em>Flags</em> is a comma-separated list of the
- following flags: </p>
-
- <ul>
- <li>
- '<strong><code>redirect|R</code>
- [=<em>code</em>]</strong>' (force <a id="redirect" name="redirect"><strong>r</strong>edirect</a>)<br />
- Prefix <em>Substitution</em> with
- <code>http://thishost[:thisport]/</code> (which makes the
- new URL a URI) to force a external redirection. If no
- <em>code</em> is given a HTTP response of 302 (MOVED
- TEMPORARILY) is used. If you want to use other response
- codes in the range 300-400 just specify them as a number
- or use one of the following symbolic names:
- <code>temp</code> (default), <code>permanent</code>,
- <code>seeother</code>. Use it for rules which should
- canonicalize the URL and give it back to the client,
- <em>e.g.</em>, translate ``<code>/~</code>'' into
- ``<code>/u/</code>'' or always append a slash to
- <code>/u/</code><em>user</em>, etc.<br />
-
-
- <p><strong>Note:</strong> When you use this flag, make
- sure that the substitution field is a valid URL! If not,
- you are redirecting to an invalid location! And remember
- that this flag itself only prefixes the URL with
- <code>http://thishost[:thisport]/</code>, rewriting
- continues. Usually you also want to stop and do the
- redirection immediately. To stop the rewriting you also
- have to provide the 'L' flag.</p>
- </li>
-
- <li>'<strong><code>forbidden|F</code></strong>' (force URL
- to be <strong>f</strong>orbidden)<br />
- This forces the current URL to be forbidden,
- <em>i.e.</em>, it immediately sends back a HTTP response of
- 403 (FORBIDDEN). Use this flag in conjunction with
- appropriate RewriteConds to conditionally block some
- URLs.</li>
-
- <li>'<strong><code>gone|G</code></strong>' (force URL to be
- <strong>g</strong>one)<br />
- This forces the current URL to be gone, <em>i.e.</em>, it
- immediately sends back a HTTP response of 410 (GONE). Use
- this flag to mark pages which no longer exist as gone.</li>
-
- <li>
- '<strong><code>proxy|P</code></strong>' (force
- <strong>p</strong>roxy)<br />
- This flag forces the substitution part to be internally
- forced as a proxy request and immediately (<em>i.e.</em>,
- rewriting rule processing stops here) put through the <a href="mod_proxy.html">proxy module</a>. You have to make
- sure that the substitution string is a valid URI
- (<em>e.g.</em>, typically starting with
- <code>http://</code><em>hostname</em>) which can be
- handled by the Apache proxy module. If not you get an
- error from the proxy module. Use this flag to achieve a
- more powerful implementation of the <a href="mod_proxy.html#proxypass">ProxyPass</a> directive,
- to map some remote stuff into the namespace of the local
- server.
-
- <p>Notice: To use this functionality make sure you have
- the proxy module compiled into your Apache server
- program. If you don't know please check whether
- <code>mod_proxy.c</code> is part of the ``<code>httpd
- -l</code>'' output. If yes, this functionality is
- available to mod_rewrite. If not, then you first have to
- rebuild the ``<code>httpd</code>'' program with mod_proxy
- enabled.</p>
- </li>
-
- <li>'<strong><code>last|L</code></strong>'
- (<strong>l</strong>ast rule)<br />
- Stop the rewriting process here and don't apply any more
- rewriting rules. This corresponds to the Perl
- <code>last</code> command or the <code>break</code> command
- from the C language. Use this flag to prevent the currently
- rewritten URL from being rewritten further by following
- rules. For example, use it to rewrite the root-path URL
- ('<code>/</code>') to a real one, <em>e.g.</em>,
- '<code>/e/www/</code>'.</li>
-
- <li>'<strong><code>next|N</code></strong>'
- (<strong>n</strong>ext round)<br />
- Re-run the rewriting process (starting again with the
- first rewriting rule). Here the URL to match is again not
- the original URL but the URL from the last rewriting rule.
- This corresponds to the Perl <code>next</code> command or
- the <code>continue</code> command from the C language. Use
- this flag to restart the rewriting process, <em>i.e.</em>,
- to immediately go to the top of the loop.<br />
- <strong>But be careful not to create an infinite
- loop!</strong></li>
-
- <li>'<strong><code>chain|C</code></strong>'
- (<strong>c</strong>hained with next rule)<br />
- This flag chains the current rule with the next rule
- (which itself can be chained with the following rule,
- <em>etc.</em>). This has the following effect: if a rule
- matches, then processing continues as usual, <em>i.e.</em>,
- the flag has no effect. If the rule does
- <strong>not</strong> match, then all following chained
- rules are skipped. For instance, use it to remove the
- ``<code>.www</code>'' part inside a per-directory rule set
- when you let an external redirect happen (where the
- ``<code>.www</code>'' part should not to occur!).</li>
-
- <li>
- '<strong><code>type|T</code></strong>=<em>MIME-type</em>'
- (force MIME <strong>t</strong>ype)<br />
- Force the MIME-type of the target file to be
- <em>MIME-type</em>. For instance, this can be used to
- setup the content-type based on some conditions.
- For example, the following snippet allows <code>.php</code> files to
- be <em>displayed</em> by <code>mod_php</code> if they are called with
- the <code>.phps</code> extension:
- <div class="example"><p><code>
- RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
- </code></p></div>
- </li>
-
- <li>
- '<strong><code>handler|H</code></strong>=<em>Content-handler</em>'
- (force Content <strong>h</strong>andler)<br />
- Force the Content-handler of the target file to be
- <em>Content-handler</em>. For instance, this can be used to
- simulate the <code>mod_alias</code> directive
- <code>ScriptAlias</code> which internally forces all files
- inside the mapped directory to have a handler of
- ``<code>cgi-script</code>''.</li>
-
- <li>
- '<strong><code>nosubreq|NS</code></strong>' (used only if
- <strong>n</strong>o internal
- <strong>s</strong>ub-request)<br />
- This flag forces the rewriting engine to skip a
- rewriting rule if the current request is an internal
- sub-request. For instance, sub-requests occur internally
- in Apache when <code>mod_include</code> tries to find out
- information about possible directory default files
- (<code>index.xxx</code>). On sub-requests it is not
- always useful and even sometimes causes a failure to if
- the complete set of rules are applied. Use this flag to
- exclude some rules.<br />
-
-
- <p>Use the following rule for your decision: whenever you
- prefix some URLs with CGI-scripts to force them to be
- processed by the CGI-script, the chance is high that you
- will run into problems (or even overhead) on
- sub-requests. In these cases, use this flag.</p>
- </li>
-
- <li>'<strong><code>nocase|NC</code></strong>'
- (<strong>n</strong>o <strong>c</strong>ase)<br />
- This makes the <em>Pattern</em> case-insensitive,
- <em>i.e.</em>, there is no difference between 'A-Z' and
- 'a-z' when <em>Pattern</em> is matched against the current
- URL.</li>
-
- <li>'<strong><code>qsappend|QSA</code></strong>'
- (<strong>q</strong>uery <strong>s</strong>tring
- <strong>a</strong>ppend)<br />
- This flag forces the rewriting engine to append a query
- string part in the substitution string to the existing one
- instead of replacing it. Use this when you want to add more
- data to the query string via a rewrite rule.</li>
-
- <li>
- '<strong><code>noescape|NE</code></strong>'
- (<strong>n</strong>o URI <strong>e</strong>scaping of
- output)<br />
- This flag keeps mod_rewrite from applying the usual URI
- escaping rules to the result of a rewrite. Ordinarily,
- special characters (such as '%', '$', ';', and so on)
- will be escaped into their hexcode equivalents ('%25',
- '%24', and '%3B', respectively); this flag prevents this
- from being done. This allows percent symbols to appear in
- the output, as in
-<div class="example"><p><code>
- RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
-</code></p></div>
-
- which would turn '<code>/foo/zed</code>' into a safe
- request for '<code>/bar?arg=P1=zed</code>'.
- </li>
-
- <li>
- '<strong><code>passthrough|PT</code></strong>'
- (<strong>p</strong>ass <strong>t</strong>hrough to next
- handler)<br />
- This flag forces the rewriting engine to set the
- <code>uri</code> field of the internal
- <code>request_rec</code> structure to the value of the
- <code>filename</code> field. This flag is just a hack to
- be able to post-process the output of
- <code>RewriteRule</code> directives by
- <code>Alias</code>, <code>ScriptAlias</code>,
- <code>Redirect</code>, <em>etc.</em> directives from
- other URI-to-filename translators. A trivial example to
- show the semantics: If you want to rewrite
- <code>/abc</code> to <code>/def</code> via the rewriting
- engine of <code>mod_rewrite</code> and then
- <code>/def</code> to <code>/ghi</code> with
- <code>mod_alias</code>:
-<div class="example"><p><code>
- RewriteRule ^/abc(.*) /def$1 [PT]<br />
- Alias /def /ghi
-</code></p></div>
- If you omit the <code>PT</code> flag then
- <code>mod_rewrite</code> will do its job fine,
- <em>i.e.</em>, it rewrites <code>uri=/abc/...</code> to
- <code>filename=/def/...</code> as a full API-compliant
- URI-to-filename translator should do. Then
- <code>mod_alias</code> comes and tries to do a
- URI-to-filename transition which will not work.
-
- <p>Note: <strong>You have to use this flag if you want to
- intermix directives of different modules which contain
- URL-to-filename translators</strong>. The typical example
- is the use of <code>mod_alias</code> and
- <code>mod_rewrite</code>..</p>
- </li>
-
- <li>'<strong><code>skip|S</code></strong>=<em>num</em>'
- (<strong>s</strong>kip next rule(s))<br />
- This flag forces the rewriting engine to skip the next
- <em>num</em> rules in sequence when the current rule
- matches. Use this to make pseudo if-then-else constructs:
- The last rule of the then-clause becomes
- <code>skip=N</code> where N is the number of rules in the
- else-clause. (This is <strong>not</strong> the same as the
- 'chain|C' flag!)</li>
-
- <li>
- '<strong><code>env|E=</code></strong><em>VAR</em>:<em>VAL</em>'
- (set <strong>e</strong>nvironment variable)<br />
- This forces an environment variable named <em>VAR</em> to
- be set to the value <em>VAL</em>, where <em>VAL</em> can
- contain regexp backreferences <code>$N</code> and
- <code>%N</code> which will be expanded. You can use this
- flag more than once to set more than one variable. The
- variables can be later dereferenced in many situations, but
- usually from within XSSI (via <code>&lt;!--#echo
- var="VAR"--&gt;</code>) or CGI (<em>e.g.</em>
- <code>$ENV{'VAR'}</code>). Additionally you can dereference
- it in a following RewriteCond pattern via
- <code>%{ENV:VAR}</code>. Use this to strip but remember
- information from URLs.</li>
-
- <li>
- '<strong><code>cookie|CO=</code></strong><em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>]]'
- (set <strong>co</strong>okie)<br />
- This sets a cookie on the client's browser. The cookie's name
- is specified by <em>NAME</em> and the value is
- <em>VAL</em>. The <em>domain</em> field is the domain of the
- cookie, such as '.apache.org',the optional <em>lifetime</em>
- is the lifetime of the cookie in minutes, and the optional
- <em>path</em> is the path of the cookie</li>
-
- </ul>
-
-<div class="note"><h3>Note</h3> Never forget that <em>Pattern</em> is
-applied to a complete URL in per-server configuration
-files. <strong>But in per-directory configuration files, the
-per-directory prefix (which always is the same for a specific
-directory!) is automatically <em>removed</em> for the pattern matching
-and automatically <em>added</em> after the substitution has been
-done.</strong> This feature is essential for many sorts of rewriting,
-because without this prefix stripping you have to match the parent
-directory which is not always possible.
-
- <p>There is one exception: If a substitution string
- starts with ``<code>http://</code>'' then the directory
- prefix will <strong>not</strong> be added and an
- external redirect or proxy throughput (if flag
- <strong>P</strong> is used!) is forced!</p>
-</div>
-
-<div class="note"><h3>Note</h3>
- To enable the rewriting engine
- for per-directory configuration files you need to set
- ``<code>RewriteEngine On</code>'' in these files
- <strong>and</strong> ``<code>Options
- FollowSymLinks</code>'' must be enabled. If your
- administrator has disabled override of
- <code>FollowSymLinks</code> for a user's directory, then
- you cannot use the rewriting engine. This restriction is
- needed for security reasons.
-</div>
-
- <p>Here are all possible substitution combinations and their
- meanings:</p>
-
- <p><strong>Inside per-server configuration
- (<code>httpd.conf</code>)<br />
- for request ``<code>GET
- /somepath/pathinfo</code>'':</strong><br />
- </p>
-
-<div class="note"><pre>
-<strong>Given Rule</strong> <strong>Resulting Substitution</strong>
----------------------------------------------- ----------------------------------
-^/somepath(.*) otherpath$1 not supported, because invalid!
-
-^/somepath(.*) otherpath$1 [R] not supported, because invalid!
-
-^/somepath(.*) otherpath$1 [P] not supported, because invalid!
----------------------------------------------- ----------------------------------
-^/somepath(.*) /otherpath$1 /otherpath/pathinfo
-
-^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^/somepath(.*) /otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^/somepath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
-
-^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^/somepath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
- via external redirection
-
-^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
- via external redirection
- (the [R] flag is redundant)
-
-^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
- via internal proxy
-</pre></div>
-
- <p><strong>Inside per-directory configuration for
- <code>/somepath</code><br />
- (<em>i.e.</em>, file <code>.htaccess</code> in dir
- <code>/physical/path/to/somepath</code> containing
- <code>RewriteBase /somepath</code>)<br />
- for request ``<code>GET
- /somepath/localpath/pathinfo</code>'':</strong><br />
- </p>
-
-<div class="note"><pre>
-<strong>Given Rule</strong> <strong>Resulting Substitution</strong>
----------------------------------------------- ----------------------------------
-^localpath(.*) otherpath$1 /somepath/otherpath/pathinfo
-
-^localpath(.*) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^localpath(.*) /otherpath$1 /otherpath/pathinfo
-
-^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) /otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^localpath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
-
-^localpath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^localpath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
- via external redirection
- (the [R] flag is redundant)
-
-^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
- via internal proxy
-</pre></div>
-
- <p><strong>Example:</strong></p>
-
- <p>We want to rewrite URLs of the form </p>
-
- <p class="indent">
- <code>/</code> <em>Language</em> <code>/~</code>
- <em>Realname</em> <code>/.../</code> <em>File</em>
- </p>
-
- <p>into </p>
-
- <p class="indent">
- <code>/u/</code> <em>Username</em> <code>/.../</code>
- <em>File</em> <code>.</code> <em>Language</em>
- </p>
-
- <p>We take the rewrite mapfile from above and save it under
- <code>/path/to/file/map.txt</code>. Then we only have to
- add the following lines to the Apache server configuration
- file:</p>
-
-<div class="example"><pre>
-RewriteLog /path/to/file/rewrite.log
-RewriteMap real-to-user txt:/path/to/file/map.txt
-RewriteRule ^/([^/]+)/~([^/]+)/(.*)$ /u/${real-to-user:$2|nobody}/$3.$1
-</pre></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_rewrite.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_rewrite.xml b/docs/manual/mod/mod_rewrite.xml
deleted file mode 100644
index da8421d106..0000000000
--- a/docs/manual/mod/mod_rewrite.xml
+++ /dev/null
@@ -1,1818 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.27 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_rewrite.xml.meta">
-
-<name>mod_rewrite</name>
-
-<description>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</description>
-
-<status>Extension</status>
-<sourcefile>mod_rewrite.c</sourcefile>
-<identifier>rewrite_module</identifier>
-<compatibility>Available in Apache 1.3 and later</compatibility>
-
-<summary>
- <blockquote>
- <p>``The great thing about mod_rewrite is it gives you
- all the configurability and flexibility of Sendmail.
- The downside to mod_rewrite is that it gives you all
- the configurability and flexibility of Sendmail.''</p>
-
- <p class="cite">-- <cite>Brian Behlendorf</cite><br />
- Apache Group</p>
-
- </blockquote>
-
- <blockquote>
- <p>`` Despite the tons of examples and docs,
- mod_rewrite is voodoo. Damned cool voodoo, but still
- voodoo. ''</p>
-
- <p class="cite">-- <cite>Brian Moore</cite><br />
- bem@news.cmc.net</p>
-
- </blockquote>
-
-
- <p>Welcome to mod_rewrite, the Swiss Army Knife of URL
- manipulation!</p>
-
- <p>This module uses a rule-based rewriting engine (based on a
- regular-expression parser) to rewrite requested URLs on the
- fly. It supports an unlimited number of rules and an
- unlimited number of attached rule conditions for each rule to
- provide a really flexible and powerful URL manipulation
- mechanism. The URL manipulations can depend on various tests,
- for instance server variables, environment variables, HTTP
- headers, time stamps and even external database lookups in
- various formats can be used to achieve a really granular URL
- matching.</p>
-
- <p>This module operates on the full URLs (including the
- path-info part) both in per-server context
- (<code>httpd.conf</code>) and per-directory context
- (<code>.htaccess</code>) and can even generate query-string
- parts on result. The rewritten result can lead to internal
- sub-processing, external request redirection or even to an
- internal proxy throughput.</p>
-
- <p>But all this functionality and flexibility has its
- drawback: complexity. So don't expect to understand this
- entire module in just one day.</p>
-
- <p>This module was invented and originally written in April
- 1996 and gifted exclusively to the The Apache Group in July 1997
- by</p>
-
- <p class="indent">
- <a href="http://www.engelschall.com/"><code>Ralf S.
- Engelschall</code></a><br />
- <a
- href="mailto:rse@engelschall.com"><code>rse@engelschall.com</code></a><br />
- <a
- href="http://www.engelschall.com/"><code>www.engelschall.com</code></a>
- </p>
-</summary>
-
-<section id="Internal"><title>Internal Processing</title>
-
- <p>The internal processing of this module is very complex but
- needs to be explained once even to the average user to avoid
- common mistakes and to let you exploit its full
- functionality.</p>
-
-<section id="InternalAPI"><title>API Phases</title>
-
- <p>First you have to understand that when Apache processes a
- HTTP request it does this in phases. A hook for each of these
- phases is provided by the Apache API. Mod_rewrite uses two of
- these hooks: the URL-to-filename translation hook which is
- used after the HTTP request has been read but before any
- authorization starts and the Fixup hook which is triggered
- after the authorization phases and after the per-directory
- config files (<code>.htaccess</code>) have been read, but
- before the content handler is activated.</p>
-
- <p>So, after a request comes in and Apache has determined the
- corresponding server (or virtual server) the rewriting engine
- starts processing of all mod_rewrite directives from the
- per-server configuration in the URL-to-filename phase. A few
- steps later when the final data directories are found, the
- per-directory configuration directives of mod_rewrite are
- triggered in the Fixup phase. In both situations mod_rewrite
- rewrites URLs either to new URLs or to filenames, although
- there is no obvious distinction between them. This is a usage
- of the API which was not intended to be this way when the API
- was designed, but as of Apache 1.x this is the only way
- mod_rewrite can operate. To make this point more clear
- remember the following two points:</p>
-
- <ol>
- <li>Although mod_rewrite rewrites URLs to URLs, URLs to
- filenames and even filenames to filenames, the API
- currently provides only a URL-to-filename hook. In Apache
- 2.0 the two missing hooks will be added to make the
- processing more clear. But this point has no drawbacks for
- the user, it is just a fact which should be remembered:
- Apache does more in the URL-to-filename hook than the API
- intends for it.</li>
-
- <li>
- Unbelievably mod_rewrite provides URL manipulations in
- per-directory context, <em>i.e.</em>, within
- <code>.htaccess</code> files, although these are reached
- a very long time after the URLs have been translated to
- filenames. It has to be this way because
- <code>.htaccess</code> files live in the filesystem, so
- processing has already reached this stage. In other
- words: According to the API phases at this time it is too
- late for any URL manipulations. To overcome this chicken
- and egg problem mod_rewrite uses a trick: When you
- manipulate a URL/filename in per-directory context
- mod_rewrite first rewrites the filename back to its
- corresponding URL (which is usually impossible, but see
- the <code>RewriteBase</code> directive below for the
- trick to achieve this) and then initiates a new internal
- sub-request with the new URL. This restarts processing of
- the API phases.
-
- <p>Again mod_rewrite tries hard to make this complicated
- step totally transparent to the user, but you should
- remember here: While URL manipulations in per-server
- context are really fast and efficient, per-directory
- rewrites are slow and inefficient due to this chicken and
- egg problem. But on the other hand this is the only way
- mod_rewrite can provide (locally restricted) URL
- manipulations to the average user.</p>
- </li>
- </ol>
-
- <p>Don't forget these two points!</p>
-</section>
-
-<section id="InternalRuleset"><title>Ruleset Processing</title>
-
- <p>Now when mod_rewrite is triggered in these two API phases, it
- reads the configured rulesets from its configuration
- structure (which itself was either created on startup for
- per-server context or during the directory walk of the Apache
- kernel for per-directory context). Then the URL rewriting
- engine is started with the contained ruleset (one or more
- rules together with their conditions). The operation of the
- URL rewriting engine itself is exactly the same for both
- configuration contexts. Only the final result processing is
- different. </p>
-
- <p>The order of rules in the ruleset is important because the
- rewriting engine processes them in a special (and not very
- obvious) order. The rule is this: The rewriting engine loops
- through the ruleset rule by rule (<directive
- module="mod_rewrite">RewriteRule</directive> directives) and
- when a particular rule matches it optionally loops through
- existing corresponding conditions (<code>RewriteCond</code>
- directives). For historical reasons the conditions are given
- first, and so the control flow is a little bit long-winded. See
- Figure 1 for more details.</p>
-<p class="figure">
- <img src="../images/mod_rewrite_fig1.gif" width="428"
- height="385" alt="[Needs graphics capability to display]" /><br />
- <dfn>Figure 1:</dfn>The control flow through the rewriting ruleset
-</p>
- <p>As you can see, first the URL is matched against the
- <em>Pattern</em> of each rule. When it fails mod_rewrite
- immediately stops processing this rule and continues with the
- next rule. If the <em>Pattern</em> matches, mod_rewrite looks
- for corresponding rule conditions. If none are present, it
- just substitutes the URL with a new value which is
- constructed from the string <em>Substitution</em> and goes on
- with its rule-looping. But if conditions exist, it starts an
- inner loop for processing them in the order that they are
- listed. For conditions the logic is different: we don't match
- a pattern against the current URL. Instead we first create a
- string <em>TestString</em> by expanding variables,
- back-references, map lookups, <em>etc.</em> and then we try
- to match <em>CondPattern</em> against it. If the pattern
- doesn't match, the complete set of conditions and the
- corresponding rule fails. If the pattern matches, then the
- next condition is processed until no more conditions are
- available. If all conditions match, processing is continued
- with the substitution of the URL with
- <em>Substitution</em>.</p>
-
-</section>
-
-<section id="quoting"><title>Quoting Special Characters</title>
-
- <p>As of Apache 1.3.20, special characters in
- <em>TestString</em> and <em>Substitution</em> strings can be
- escaped (that is, treated as normal characters without their
- usual special meaning) by prefixing them with a slosh ('\')
- character. In other words, you can include an actual
- dollar-sign character in a <em>Substitution</em> string by
- using '<code>\$</code>'; this keeps mod_rewrite from trying
- to treat it as a backreference.</p>
-</section>
-
-<section id="InternalBackRefs"><title>Regex Back-Reference Availability</title>
-
- <p>One important thing here has to be remembered: Whenever you
- use parentheses in <em>Pattern</em> or in one of the
- <em>CondPattern</em>, back-references are internally created
- which can be used with the strings <code>$N</code> and
- <code>%N</code> (see below). These are available for creating
- the strings <em>Substitution</em> and <em>TestString</em>.
- Figure 2 shows to which locations the back-references are
- transfered for expansion.</p>
-
-<p class="figure">
- <img src="../images/mod_rewrite_fig2.gif" width="381"
- height="179" alt="[Needs graphics capability to display]" /><br />
- <dfn>Figure 2:</dfn> The back-reference flow through a rule.
-</p>
- <p>We know this was a crash course on mod_rewrite's internal
- processing. But you will benefit from this knowledge when
- reading the following documentation of the available
- directives.</p>
-
-</section>
-</section>
-
-<section id="EnvVar"><title>Environment Variables</title>
-
- <p>This module keeps track of two additional (non-standard)
- CGI/SSI environment variables named <code>SCRIPT_URL</code>
- and <code>SCRIPT_URI</code>. These contain the
- <em>logical</em> Web-view to the current resource, while the
- standard CGI/SSI variables <code>SCRIPT_NAME</code> and
- <code>SCRIPT_FILENAME</code> contain the <em>physical</em>
- System-view. </p>
-
- <p>Notice: These variables hold the URI/URL <em>as they were
- initially requested</em>, <em>i.e.</em>, <em>before</em> any
- rewriting. This is important because the rewriting process is
- primarily used to rewrite logical URLs to physical
- pathnames.</p>
-
-<example><title>Example</title>
-<pre>
-SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
-SCRIPT_FILENAME=/u/rse/.www/index.html
-SCRIPT_URL=/u/rse/
-SCRIPT_URI=http://en1.engelschall.com/u/rse/
-</pre>
-</example>
-
-</section>
-
-<section id="Solutions"><title>Practical Solutions</title>
-
- <p>We also have an <a href="../misc/rewriteguide.html">URL
- Rewriting Guide</a> available, which provides a collection of
- practical solutions for URL-based problems. There you can
- find real-life rulesets and additional information about
- mod_rewrite.</p>
-</section>
-
-
-<directivesynopsis>
-<name>RewriteEngine</name>
-<description>Enables or disables runtime rewriting engine</description>
-<syntax>RewriteEngine on|off</syntax>
-<default>RewriteEngine off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-
- <p>The <directive>RewriteEngine</directive> directive enables or
- disables the runtime rewriting engine. If it is set to
- <code>off</code> this module does no runtime processing at
- all. It does not even update the <code>SCRIPT_URx</code>
- environment variables.</p>
-
- <p>Use this directive to disable the module instead of
- commenting out all the <directive
- module="mod_rewrite">RewriteRule</directive> directives!</p>
-
- <p>Note that, by default, rewrite configurations are not
- inherited. This means that you need to have a
- <code>RewriteEngine on</code> directive for each virtual host
- in which you wish to use it.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteOptions</name>
-<description>Sets some special options for the rewrite engine</description>
-<syntax>RewriteOptions <var>Options</var></syntax>
-<default>RewriteOptions MaxRedirects=10</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility><code>MaxRedirects</code> is available in Apache 2.0.45 and
-later</compatibility>
-<usage>
-
- <p>The <directive>RewriteOptions</directive> directive sets some
- special options for the current per-server or per-directory
- configuration. The <em>Option</em> strings can be one of the
- following:</p>
-
- <dl>
- <dt><code>inherit</code></dt>
- <dd>This forces the current configuration to inherit the
- configuration of the parent. In per-virtual-server context
- this means that the maps, conditions and rules of the main
- server are inherited. In per-directory context this means
- that conditions and rules of the parent directory's
- <code>.htaccess</code> configuration are inherited.</dd>
-
- <dt><code>MaxRedirects=<var>number</var></code></dt>
- <dd>In order to prevent endless loops of internal redirects
- issued by per-directory <directive module="mod_rewrite"
- >RewriteRule</directive>s, <module>mod_rewrite</module> aborts
- the request after reaching a maximum number of such redirects and
- responds with an 500 Internal Server Error. If you really need
- more internal redirects than 10 per request, you may increase
- the default to the desired value.</dd>
- </dl>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLog</name>
-<description>Sets the name of the file used for logging rewrite engine
-processing</description>
-<syntax>RewriteLog <em>file-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>RewriteLog</directive> directive sets the name
- of the file to which the server logs any rewriting actions it
- performs. If the name does not begin with a slash
- ('<code>/</code>') then it is assumed to be relative to the
- <em>Server Root</em>. The directive should occur only once per
- server config.</p>
-
-<note> To disable the logging of
- rewriting actions it is not recommended to set
- <em>Filename</em> to <code>/dev/null</code>, because
- although the rewriting engine does not then output to a
- logfile it still creates the logfile output internally.
- <strong>This will slow down the server with no advantage
- to the administrator!</strong> To disable logging either
- remove or comment out the <directive>RewriteLog</directive>
- directive or use <code>RewriteLogLevel 0</code>!
-</note>
-
-<note type="securitywarning"><title>Security</title>
-
-See the <a href="../misc/security_tips.html">Apache Security Tips</a>
-document for details on why your security could be compromised if the
-directory where logfiles are stored is writable by anyone other than
-the user that starts the server.
-</note>
-
-<example><title>Example</title>
-RewriteLog "/usr/local/var/apache/logs/rewrite.log"
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLogLevel</name>
-<description>Sets the verbosity of the log file used by the rewrite
-engine</description>
-<syntax>RewriteLogLevel <em>Level</em></syntax>
-<default>RewriteLogLevel 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>The <directive>RewriteLogLevel</directive> directive sets the
- verbosity level of the rewriting logfile. The default level 0
- means no logging, while 9 or more means that practically all
- actions are logged.</p>
-
- <p>To disable the logging of rewriting actions simply set
- <em>Level</em> to 0. This disables all rewrite action
- logs.</p>
-
-<note> Using a high value for
- <em>Level</em> will slow down your Apache server
- dramatically! Use the rewriting logfile at a
- <em>Level</em> greater than 2 only for debugging!
-</note>
-
-<example><title>Example</title>
-RewriteLogLevel 3
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLock</name>
-<description>Sets the name of the lock file used for <directive
-module="mod_rewrite">RewriteMap</directive>
-synchronization</description>
-<syntax>RewriteLock <em>file-path</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>This directive sets the filename for a synchronization
- lockfile which mod_rewrite needs to communicate with <directive
- module="mod_rewrite">RewriteMap</directive>
- <em>programs</em>. Set this lockfile to a local path (not on a
- NFS-mounted device) when you want to use a rewriting
- map-program. It is not required for other types of rewriting
- maps.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteMap</name>
-<description>Defines a mapping function for key-lookup</description>
-<syntax>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>The choice of different dbm types is available in
-Apache 2.0.41 and later</compatibility>
-
-<usage>
- <p>The <directive>RewriteMap</directive> directive defines a
- <em>Rewriting Map</em> which can be used inside rule
- substitution strings by the mapping-functions to
- insert/substitute fields through a key lookup. The source of
- this lookup can be of various types.</p>
-
- <p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
- the name of the map and will be used to specify a
- mapping-function for the substitution strings of a rewriting
- rule via one of the following constructs:</p>
-
- <p class="indent">
- <strong><code>${</code> <em>MapName</em> <code>:</code>
- <em>LookupKey</em> <code>}</code><br />
- <code>${</code> <em>MapName</em> <code>:</code>
- <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
- <code>}</code></strong>
- </p>
-
- <p>When such a construct occurs the map <em>MapName</em> is
- consulted and the key <em>LookupKey</em> is looked-up. If the
- key is found, the map-function construct is substituted by
- <em>SubstValue</em>. If the key is not found then it is
- substituted by <em>DefaultValue</em> or by the empty string
- if no <em>DefaultValue</em> was specified.</p>
-
- <p>The following combinations for <em>MapType</em> and
- <em>MapSource</em> can be used:</p>
-
- <ul>
- <li>
- <strong>Standard Plain Text</strong><br />
- MapType: <code>txt</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>This is the standard rewriting map feature where the
- <em>MapSource</em> is a plain ASCII file containing
- either blank lines, comment lines (starting with a '#'
- character) or pairs like the following - one per
- line.</p>
-
- <p class="indent">
- <strong><em>MatchingKey</em>
- <em>SubstValue</em></strong>
- </p>
-
-<example><title>Example</title>
-<pre>
-##
-## map.txt -- rewriting map
-##
-
-Ralf.S.Engelschall rse # Bastard Operator From Hell
-Mr.Joe.Average joe # Mr. Average
-</pre>
-</example>
-
-<example>
-RewriteMap real-to-user txt:/path/to/file/map.txt
-</example>
- </li>
-
- <li>
- <strong>Randomized Plain Text</strong><br />
- MapType: <code>rnd</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>This is identical to the Standard Plain Text variant
- above but with a special post-processing feature: After
- looking up a value it is parsed according to contained
- ``<code>|</code>'' characters which have the meaning of
- ``or''. In other words they indicate a set of
- alternatives from which the actual returned value is
- chosen randomly. Although this sounds crazy and useless,
- it was actually designed for load balancing in a reverse
- proxy situation where the looked up values are server
- names. Example:</p>
-
-<example>
-<pre>
-##
-## map.txt -- rewriting map
-##
-
-static www1|www2|www3|www4
-dynamic www5|www6
-</pre>
-</example>
-
-<example>
-RewriteMap servers rnd:/path/to/file/map.txt
-</example>
- </li>
-
- <li>
- <strong>Hash File</strong><br /> MapType:
- <code>dbm[=<em>type</em>]</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>Here the source is a binary format DBM file containing
- the same contents as a <em>Plain Text</em> format file, but
- in a special representation which is optimized for really
- fast lookups. The <em>type</em> can be sdbm, gdbm, ndbm, or
- db depending on <a href="../install.html#dbm">compile-time
- settings</a>. If the <em>type</em> is omitted, the
- compile-time default will be chosen. You can create such a
- file with any DBM tool or with the following Perl
- script. Be sure to adjust it to create the appropriate
- type of DBM. The example creates an NDBM file.</p>
-
-<example>
-<pre>
-#!/path/to/bin/perl
-##
-## txt2dbm -- convert txt map to dbm format
-##
-
-use NDBM_File;
-use Fcntl;
-
-($txtmap, $dbmmap) = @ARGV;
-
-open(TXT, "&lt;$txtmap") or die "Couldn't open $txtmap!\n";
-tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644)
- or die "Couldn't create $dbmmap!\n";
-
-while (&lt;TXT&gt;) {
- next if (/^\s*#/ or /^\s*$/);
- $DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/);
-}
-
-untie %DB;
-close(TXT);
-</pre>
-</example>
-
-<example>
-$ txt2dbm map.txt map.db
-</example>
- </li>
-
- <li>
- <strong>Internal Function</strong><br />
- MapType: <code>int</code>, MapSource: Internal Apache
- function
-
- <p>Here the source is an internal Apache function.
- Currently you cannot create your own, but the following
- functions already exists:</p>
-
- <ul>
- <li><strong>toupper</strong>:<br />
- Converts the looked up key to all upper case.</li>
-
- <li><strong>tolower</strong>:<br />
- Converts the looked up key to all lower case.</li>
-
- <li><strong>escape</strong>:<br />
- Translates special characters in the looked up key to
- hex-encodings.</li>
-
- <li><strong>unescape</strong>:<br />
- Translates hex-encodings in the looked up key back to
- special characters.</li>
- </ul>
- </li>
-
- <li>
- <strong>External Rewriting Program</strong><br />
- MapType: <code>prg</code>, MapSource: Unix filesystem
- path to valid regular file
-
- <p>Here the source is a program, not a map file. To
- create it you can use the language of your choice, but
- the result has to be a executable (<em>i.e.</em>, either
- object-code or a script with the magic cookie trick
- '<code>#!/path/to/interpreter</code>' as the first
- line).</p>
-
- <p>This program is started once at startup of the Apache
- servers and then communicates with the rewriting engine
- over its <code>stdin</code> and <code>stdout</code>
- file-handles. For each map-function lookup it will
- receive the key to lookup as a newline-terminated string
- on <code>stdin</code>. It then has to give back the
- looked-up value as a newline-terminated string on
- <code>stdout</code> or the four-character string
- ``<code>NULL</code>'' if it fails (<em>i.e.</em>, there
- is no corresponding value for the given key). A trivial
- program which will implement a 1:1 map (<em>i.e.</em>,
- key == value) could be:</p>
-
-<example>
-<pre>
-#!/usr/bin/perl
-$| = 1;
-while (&lt;STDIN&gt;) {
- # ...put here any transformations or lookups...
- print $_;
-}
-</pre>
-</example>
-
- <p>But be very careful:</p>
-
- <ol>
- <li>``<em>Keep it simple, stupid</em>'' (KISS), because
- if this program hangs it will hang the Apache server
- when the rule occurs.</li>
-
- <li>Avoid one common mistake: never do buffered I/O on
- <code>stdout</code>! This will cause a deadloop! Hence
- the ``<code>$|=1</code>'' in the above example...</li>
-
- <li>Use the <directive
- module="mod_rewrite">RewriteLock</directive> directive to
- define a lockfile mod_rewrite can use to synchronize the
- communication to the program. By default no such
- synchronization takes place.</li>
- </ol>
- </li>
- </ul>
- <p>The <directive>RewriteMap</directive> directive can occur more than
- once. For each mapping-function use one
- <directive>RewriteMap</directive> directive to declare its rewriting
- mapfile. While you cannot <strong>declare</strong> a map in
- per-directory context it is of course possible to
- <strong>use</strong> this map in per-directory context. </p>
-
-<note><title>Note</title> For plain text and DBM format files the
-looked-up keys are cached in-core until the <code>mtime</code> of the
-mapfile changes or the server does a restart. This way you can have
-map-functions in rules which are used for <strong>every</strong>
-request. This is no problem, because the external lookup only happens
-once!
-</note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteBase</name>
-<description>Sets the base URL for per-directory rewrites</description>
-<syntax>RewriteBase <em>URL-path</em></syntax>
-<default>See usage for information.</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>RewriteBase</directive> directive explicitly
- sets the base URL for per-directory rewrites. As you will see
- below, <directive module="mod_rewrite">RewriteRule</directive>
- can be used in per-directory config files
- (<code>.htaccess</code>). There it will act locally,
- <em>i.e.</em>, the local directory prefix is stripped at this
- stage of processing and your rewriting rules act only on the
- remainder. At the end it is automatically added back to the
- path. The default setting is; <directive>RewriteBase</directive> <em>physical-directory-path</em></p>
-
- <p>When a substitution occurs for a new URL, this module has
- to re-inject the URL into the server processing. To be able
- to do this it needs to know what the corresponding URL-prefix
- or URL-base is. By default this prefix is the corresponding
- filepath itself. <strong>But at most websites URLs are NOT
- directly related to physical filename paths, so this
- assumption will usually be wrong!</strong> There you have to
- use the <code>RewriteBase</code> directive to specify the
- correct URL-prefix.</p>
-
-<note> If your webserver's URLs are <strong>not</strong> directly
-related to physical file paths, you have to use
-<directive>RewriteBase</directive> in every <code>.htaccess</code>
-files where you want to use <directive
-module="mod_rewrite">RewriteRule</directive> directives.
-</note>
-
- <p> For example, assume the following per-directory config file:</p>
-
-<example>
-<pre>
-#
-# /abc/def/.htaccess -- per-dir config file for directory /abc/def
-# Remember: /abc/def is the physical path of /xyz, <em>i.e.</em>, the server
-# has a 'Alias /xyz /abc/def' directive <em>e.g.</em>
-#
-
-RewriteEngine On
-
-# let the server know that we were reached via /xyz and not
-# via the physical path prefix /abc/def
-RewriteBase /xyz
-
-# now the rewriting rules
-RewriteRule ^oldstuff\.html$ newstuff.html
-</pre>
-</example>
-
- <p>In the above example, a request to
- <code>/xyz/oldstuff.html</code> gets correctly rewritten to
- the physical file <code>/abc/def/newstuff.html</code>.</p>
-
-<note><title>For Apache Hackers</title>
-<p>The following list gives detailed information about
- the internal processing steps:</p>
-<pre>
-Request:
- /xyz/oldstuff.html
-
-Internal Processing:
- /xyz/oldstuff.html -&gt; /abc/def/oldstuff.html (per-server Alias)
- /abc/def/oldstuff.html -&gt; /abc/def/newstuff.html (per-dir RewriteRule)
- /abc/def/newstuff.html -&gt; /xyz/newstuff.html (per-dir RewriteBase)
- /xyz/newstuff.html -&gt; /abc/def/newstuff.html (per-server Alias)
-
-Result:
- /abc/def/newstuff.html
-</pre>
- <p>This seems very complicated but is
- the correct Apache internal processing, because the
- per-directory rewriting comes too late in the
- process. So, when it occurs the (rewritten) request
- has to be re-injected into the Apache kernel! BUT:
- While this seems like a serious overhead, it really
- isn't, because this re-injection happens fully
- internally to the Apache server and the same
- procedure is used by many other operations inside
- Apache. So, you can be sure the design and
- implementation is correct.</p>
-</note>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteCond</name>
-<description>Defines a condition under which rewriting will take place
-</description>
-<syntax> RewriteCond
- <em>TestString</em> <em>CondPattern</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>RewriteCond</directive> directive defines a
- rule condition. Precede a <directive
- module="mod_rewrite">RewriteRule</directive> directive with one
- or more <directive>RewriteCond</directive> directives. The following
- rewriting rule is only used if its pattern matches the current
- state of the URI <strong>and</strong> if these additional
- conditions apply too.</p>
-
- <p><em>TestString</em> is a string which can contains the
- following expanded constructs in addition to plain text:</p>
-
- <ul>
- <li>
- <strong>RewriteRule backreferences</strong>: These are
- backreferences of the form
-
- <p class="indent">
- <strong><code>$N</code></strong>
- </p>
- (0 &lt;= N &lt;= 9) which provide access to the grouped
- parts (parenthesis!) of the pattern from the
- corresponding <code>RewriteRule</code> directive (the one
- following the current bunch of <code>RewriteCond</code>
- directives).
- </li>
-
- <li>
- <strong>RewriteCond backreferences</strong>: These are
- backreferences of the form
-
- <p class="indent">
- <strong><code>%N</code></strong>
- </p>
- (1 &lt;= N &lt;= 9) which provide access to the grouped
- parts (parentheses!) of the pattern from the last matched
- <code>RewriteCond</code> directive in the current bunch
- of conditions.
- </li>
-
- <li>
- <strong>RewriteMap expansions</strong>: These are
- expansions of the form
-
- <p class="indent">
- <strong><code>${mapname:key|default}</code></strong>
- </p>
- See <a href="#mapfunc">the documentation for
- RewriteMap</a> for more details.
- </li>
-
- <li>
- <strong>Server-Variables</strong>: These are variables of
- the form
-
- <p class="indent">
- <strong><code>%{</code> <em>NAME_OF_VARIABLE</em>
- <code>}</code></strong>
- </p>
- where <em>NAME_OF_VARIABLE</em> can be a string taken
- from the following list:
-
- <table>
- <columnspec><column width=".3"/><column width=".3"/>
- <column width=".3"/></columnspec>
- <tr>
- <th>HTTP headers:</th> <th>connection &amp; request:</th> <th></th>
- </tr>
-
- <tr>
- <td>
- HTTP_USER_AGENT<br />
- HTTP_REFERER<br />
- HTTP_COOKIE<br />
- HTTP_FORWARDED<br />
- HTTP_HOST<br />
- HTTP_PROXY_CONNECTION<br />
- HTTP_ACCEPT<br />
- </td>
-
- <td>
- REMOTE_ADDR<br />
- REMOTE_HOST<br />
- REMOTE_PORT<br />
- REMOTE_USER<br />
- REMOTE_IDENT<br />
- REQUEST_METHOD<br />
- SCRIPT_FILENAME<br />
- PATH_INFO<br />
- QUERY_STRING<br />
- AUTH_TYPE<br />
- </td>
-
- <td></td>
- </tr>
-
- <tr>
- <th>server internals:</th> <th>system stuff:</th> <th>specials:</th>
- </tr>
-
- <tr>
- <td>
- DOCUMENT_ROOT<br />
- SERVER_ADMIN<br />
- SERVER_NAME<br />
- SERVER_ADDR<br />
- SERVER_PORT<br />
- SERVER_PROTOCOL<br />
- SERVER_SOFTWARE<br />
- </td>
-
- <td>
- TIME_YEAR<br />
- TIME_MON<br />
- TIME_DAY<br />
- TIME_HOUR<br />
- TIME_MIN<br />
- TIME_SEC<br />
- TIME_WDAY<br />
- TIME<br />
- </td>
-
- <td>
- API_VERSION<br />
- THE_REQUEST<br />
- REQUEST_URI<br />
- REQUEST_FILENAME<br />
- IS_SUBREQ<br />
- HTTPS<br />
- </td>
- </tr>
- </table>
-
-<note>
- <p>These variables all
- correspond to the similarly named HTTP
- MIME-headers, C variables of the Apache server or
- <code>struct tm</code> fields of the Unix system.
- Most are documented elsewhere in the Manual or in
- the CGI specification. Those that are special to
- mod_rewrite include:</p>
-
- <dl>
- <dt><code>IS_SUBREQ</code></dt>
-
- <dd>Will contain the text "true" if the request
- currently being processed is a sub-request,
- "false" otherwise. Sub-requests may be generated
- by modules that need to resolve additional files
- or URIs in order to complete their tasks.</dd>
-
- <dt><code>API_VERSION</code></dt>
-
- <dd>This is the version of the Apache module API
- (the internal interface between server and
- module) in the current httpd build, as defined in
- include/ap_mmn.h. The module API version
- corresponds to the version of Apache in use (in
- the release version of Apache 1.3.14, for
- instance, it is 19990320:10), but is mainly of
- interest to module authors.</dd>
-
- <dt><code>THE_REQUEST</code></dt>
-
- <dd>The full HTTP request line sent by the
- browser to the server (e.g., "<code>GET
- /index.html HTTP/1.1</code>"). This does not
- include any additional headers sent by the
- browser.</dd>
-
- <dt><code>REQUEST_URI</code></dt>
-
- <dd>The resource requested in the HTTP request
- line. (In the example above, this would be
- "/index.html".)</dd>
-
- <dt><code>REQUEST_FILENAME</code></dt>
-
- <dd>The full local filesystem path to the file or
- script matching the request.</dd>
-
- <dt><code>HTTPS</code></dt>
-
- <dd>Will contain the text "on" if the connection is
- using SSL/TLS, or "off" otherwise. (This variable
- can be safely used regardless of whether
- <module>mod_ssl</module> is loaded).</dd>
-
- </dl>
-</note>
- </li>
- </ul>
-
- <p>Special Notes:</p>
-
- <ol>
- <li>The variables SCRIPT_FILENAME and REQUEST_FILENAME
- contain the same value, <em>i.e.</em>, the value of the
- <code>filename</code> field of the internal
- <code>request_rec</code> structure of the Apache server.
- The first name is just the commonly known CGI variable name
- while the second is the consistent counterpart to
- REQUEST_URI (which contains the value of the
- <code>uri</code> field of <code>request_rec</code>).</li>
-
- <li>There is the special format:
- <code>%{ENV:variable}</code> where <em>variable</em> can be
- any environment variable. This is looked-up via internal
- Apache structures and (if not found there) via
- <code>getenv()</code> from the Apache server process.</li>
-
- <li>There is the special format:
- <code>%{SSL:variable}</code> where <em>variable</em> is the
- name of an <a href="mod_ssl.html#envvars">SSL environment
- variable</a>; this can be used whether or not
- <module>mod_ssl</module> is loaded, but will always expand to
- the empty string if it is not. Example:
- <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> may expand to
- <code>128</code>.</li>
-
- <li>There is the special format:
- <code>%{HTTP:header}</code> where <em>header</em> can be
- any HTTP MIME-header name. This is looked-up from the HTTP
- request. Example: <code>%{HTTP:Proxy-Connection}</code> is
- the value of the HTTP header
- ``<code>Proxy-Connection:</code>''.</li>
-
- <li>There is the special format
- <code>%{LA-U:variable}</code> for look-aheads which perform
- an internal (URL-based) sub-request to determine the final
- value of <em>variable</em>. Use this when you want to use a
- variable for rewriting which is actually set later in an
- API phase and thus is not available at the current stage.
- For instance when you want to rewrite according to the
- <code>REMOTE_USER</code> variable from within the
- per-server context (<code>httpd.conf</code> file) you have
- to use <code>%{LA-U:REMOTE_USER}</code> because this
- variable is set by the authorization phases which come
- <em>after</em> the URL translation phase where mod_rewrite
- operates. On the other hand, because mod_rewrite implements
- its per-directory context (<code>.htaccess</code> file) via
- the Fixup phase of the API and because the authorization
- phases come <em>before</em> this phase, you just can use
- <code>%{REMOTE_USER}</code> there.</li>
-
- <li>There is the special format:
- <code>%{LA-F:variable}</code> which performs an internal
- (filename-based) sub-request to determine the final value
- of <em>variable</em>. Most of the time this is the same as
- LA-U above.</li>
- </ol>
-
- <p><em>CondPattern</em> is the condition pattern,
- <em>i.e.</em>, a regular expression which is applied to the
- current instance of the <em>TestString</em>, <em>i.e.</em>,
- <em>TestString</em> is evaluated and then matched against
- <em>CondPattern</em>.</p>
-
- <p><strong>Remember:</strong> <em>CondPattern</em> is a
- <em>perl compatible regular expression</em> with some
- additions:</p>
-
- <ol>
- <li>You can prefix the pattern string with a
- '<code>!</code>' character (exclamation mark) to specify a
- <strong>non</strong>-matching pattern.</li>
-
- <li>
- There are some special variants of <em>CondPatterns</em>.
- Instead of real regular expression strings you can also
- use one of the following:
-
- <ul>
- <li>'<strong>&lt;CondPattern</strong>' (is lexically
- lower)<br />
- Treats the <em>CondPattern</em> as a plain string and
- compares it lexically to <em>TestString</em>. True if
- <em>TestString</em> is lexically lower than
- <em>CondPattern</em>.</li>
-
- <li>'<strong>&gt;CondPattern</strong>' (is lexically
- greater)<br />
- Treats the <em>CondPattern</em> as a plain string and
- compares it lexically to <em>TestString</em>. True if
- <em>TestString</em> is lexically greater than
- <em>CondPattern</em>.</li>
-
- <li>'<strong>=CondPattern</strong>' (is lexically
- equal)<br />
- Treats the <em>CondPattern</em> as a plain string and
- compares it lexically to <em>TestString</em>. True if
- <em>TestString</em> is lexically equal to
- <em>CondPattern</em>, i.e the two strings are exactly
- equal (character by character). If <em>CondPattern</em>
- is just <code>""</code> (two quotation marks) this
- compares <em>TestString</em> to the empty string.</li>
-
- <li>'<strong>-d</strong>' (is
- <strong>d</strong>irectory)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a directory.</li>
-
- <li>'<strong>-f</strong>' (is regular
- <strong>f</strong>ile)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a regular file.</li>
-
- <li>'<strong>-s</strong>' (is regular file with
- <strong>s</strong>ize)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a regular file with size greater
- than zero.</li>
-
- <li>'<strong>-l</strong>' (is symbolic
- <strong>l</strong>ink)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and is a symbolic link.</li>
-
- <li>'<strong>-x</strong>' (has e<strong>x</strong>ecutable
- permissions)<br />
- Treats the <em>TestString</em> as a pathname and tests
- if it exists and has execution permissions. These permissions
- are determined depending on the underlying OS.</li>
-
- <li>'<strong>-F</strong>' (is existing file via
- subrequest)<br />
- Checks if <em>TestString</em> is a valid file and
- accessible via all the server's currently-configured
- access controls for that path. This uses an internal
- subrequest to determine the check, so use it with care
- because it decreases your servers performance!</li>
-
- <li>'<strong>-U</strong>' (is existing URL via
- subrequest)<br />
- Checks if <em>TestString</em> is a valid URL and
- accessible via all the server's currently-configured
- access controls for that path. This uses an internal
- subrequest to determine the check, so use it with care
- because it decreases your server's performance!</li>
- </ul>
-
-<note><title>Notice</title>
- All of these tests can
- also be prefixed by an exclamation mark ('!') to
- negate their meaning.
-</note>
- </li>
- </ol>
-
- <p>Additionally you can set special flags for
- <em>CondPattern</em> by appending</p>
-
- <p class="indent">
- <strong><code>[</code><em>flags</em><code>]</code></strong>
- </p>
-
- <p>as the third argument to the <code>RewriteCond</code>
- directive. <em>Flags</em> is a comma-separated list of the
- following flags:</p>
-
- <ul>
- <li>'<strong><code>nocase|NC</code></strong>'
- (<strong>n</strong>o <strong>c</strong>ase)<br />
- This makes the test case-insensitive, <em>i.e.</em>, there
- is no difference between 'A-Z' and 'a-z' both in the
- expanded <em>TestString</em> and the <em>CondPattern</em>.
- This flag is effective only for comparisons between
- <em>TestString</em> and <em>CondPattern</em>. It has no
- effect on filesystem and subrequest checks.</li>
-
- <li>
- '<strong><code>ornext|OR</code></strong>'
- (<strong>or</strong> next condition)<br />
- Use this to combine rule conditions with a local OR
- instead of the implicit AND. Typical example:
-
-<example>
-<pre>
-RewriteCond %{REMOTE_HOST} ^host1.* [OR]
-RewriteCond %{REMOTE_HOST} ^host2.* [OR]
-RewriteCond %{REMOTE_HOST} ^host3.*
-RewriteRule ...some special stuff for any of these hosts...
-</pre>
-</example>
-
- Without this flag you would have to write the cond/rule
- three times.
- </li>
- </ul>
-
- <p><strong>Example:</strong></p>
-
- <p>To rewrite the Homepage of a site according to the
- ``<code>User-Agent:</code>'' header of the request, you can
- use the following: </p>
-
-<example>
-<pre>
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
-RewriteRule ^/$ /homepage.max.html [L]
-
-RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
-RewriteRule ^/$ /homepage.min.html [L]
-
-RewriteRule ^/$ /homepage.std.html [L]
-</pre>
-</example>
-
- <p>Interpretation: If you use Netscape Navigator as your
- browser (which identifies itself as 'Mozilla'), then you
- get the max homepage, which includes Frames, <em>etc.</em>
- If you use the Lynx browser (which is Terminal-based), then
- you get the min homepage, which contains no images, no
- tables, <em>etc.</em> If you use any other browser you get
- the standard homepage.</p>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteRule</name>
-<description>Defines rules for the rewriting engine</description>
-<syntax>RewriteRule
- <em>Pattern</em> <em>Substitution</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>The cookie-flag is available in Apache 2.0.40 and later.</compatibility>
-
-<usage>
- <p>The <directive>RewriteRule</directive> directive is the real
- rewriting workhorse. The directive can occur more than once.
- Each directive then defines one single rewriting rule. The
- <strong>definition order</strong> of these rules is
- <strong>important</strong>, because this order is used when
- applying the rules at run-time.</p>
-
- <p><a id="patterns" name="patterns"><em>Pattern</em></a> is
- a perl compatible <a id="regexp" name="regexp">regular
- expression</a> which gets applied to the current URL. Here
- ``current'' means the value of the URL when this rule gets
- applied. This may not be the originally requested URL,
- because any number of rules may already have matched and made
- alterations to it.</p>
-
- <p>Some hints about the syntax of regular expressions:</p>
-
-<note><pre>
-<strong>Text:</strong>
- <strong><code>.</code></strong> Any single character
- <strong><code>[</code></strong>chars<strong><code>]</code></strong> Character class: One of chars
- <strong><code>[^</code></strong>chars<strong><code>]</code></strong> Character class: None of chars
- text1<strong><code>|</code></strong>text2 Alternative: text1 or text2
-
-<strong>Quantifiers:</strong>
- <strong><code>?</code></strong> 0 or 1 of the preceding text
- <strong><code>*</code></strong> 0 or N of the preceding text (N &gt; 0)
- <strong><code>+</code></strong> 1 or N of the preceding text (N &gt; 1)
-
-<strong>Grouping:</strong>
- <strong><code>(</code></strong>text<strong><code>)</code></strong> Grouping of text
- (either to set the borders of an alternative or
- for making backreferences where the <strong>N</strong>th group can
- be used on the RHS of a RewriteRule with <code>$</code><strong>N</strong>)
-
-<strong>Anchors:</strong>
- <strong><code>^</code></strong> Start of line anchor
- <strong><code>$</code></strong> End of line anchor
-
-<strong>Escaping:</strong>
- <strong><code>\</code></strong>char escape that particular char
- (for instance to specify the chars "<code>.[]()</code>" <em>etc.</em>)
-</pre></note>
-
- <p>For more information about regular expressions have a look at the
- perl regular expression manpage ("<a
- href="http://www.perldoc.com/perl5.6.1/pod/perlre.html">perldoc
- perlre</a>"). If you are interested in more detailed
- information about regular expressions and their variants
- (POSIX regex <em>etc.</em>) have a look at the
- following dedicated book on this topic:</p>
-
- <p class="indent">
- <em>Mastering Regular Expressions</em><br />
- Jeffrey E.F. Friedl<br />
- Nutshell Handbook Series<br />
- O'Reilly &amp; Associates, Inc. 1997<br />
- ISBN 1-56592-257-3<br />
- </p>
-
- <p>Additionally in mod_rewrite the NOT character
- ('<code>!</code>') is a possible pattern prefix. This gives
- you the ability to negate a pattern; to say, for instance:
- ``<em>if the current URL does <strong>NOT</strong> match this
- pattern</em>''. This can be used for exceptional cases, where
- it is easier to match the negative pattern, or as a last
- default rule.</p>
-
-<note><title>Notice</title>
-When using the NOT character
- to negate a pattern you cannot have grouped wildcard
- parts in the pattern. This is impossible because when the
- pattern does NOT match, there are no contents for the
- groups. In consequence, if negated patterns are used, you
- cannot use <code>$N</code> in the substitution
- string!
-</note>
-
- <p><a id="rhs" name="rhs"><em>Substitution</em></a> of a
- rewriting rule is the string which is substituted for (or
- replaces) the original URL for which <em>Pattern</em>
- matched. Beside plain text you can use</p>
-
- <ol>
- <li>back-references <code>$N</code> to the RewriteRule
- pattern</li>
-
- <li>back-references <code>%N</code> to the last matched
- RewriteCond pattern</li>
-
- <li>server-variables as in rule condition test-strings
- (<code>%{VARNAME}</code>)</li>
-
- <li><a href="#mapfunc">mapping-function</a> calls
- (<code>${mapname:key|default}</code>)</li>
- </ol>
- <p>Back-references are <code>$</code><strong>N</strong>
- (<strong>N</strong>=0..9) identifiers which will be replaced
- by the contents of the <strong>N</strong>th group of the
- matched <em>Pattern</em>. The server-variables are the same
- as for the <em>TestString</em> of a <code>RewriteCond</code>
- directive. The mapping-functions come from the
- <code>RewriteMap</code> directive and are explained there.
- These three types of variables are expanded in the order of
- the above list. </p>
-
- <p>As already mentioned above, all the rewriting rules are
- applied to the <em>Substitution</em> (in the order of
- definition in the config file). The URL is <strong>completely
- replaced</strong> by the <em>Substitution</em> and the
- rewriting process goes on until there are no more rules
- unless explicitly terminated by a
- <code><strong>L</strong></code> flag - see below.</p>
-
- <p>There is a special substitution string named
- '<code>-</code>' which means: <strong>NO
- substitution</strong>! Sounds silly? No, it is useful to
- provide rewriting rules which <strong>only</strong> match
- some URLs but do no substitution, <em>e.g.</em>, in
- conjunction with the <strong>C</strong> (chain) flag to be
- able to have more than one pattern to be applied before a
- substitution occurs.</p>
-
- <p>One more note: You can even create URLs in the
- substitution string containing a query string part. Just use
- a question mark inside the substitution string to indicate
- that the following stuff should be re-injected into the
- QUERY_STRING. When you want to erase an existing query
- string, end the substitution string with just the question
- mark.</p>
-
-<note><title>Note</title>
-There is a special feature:
- When you prefix a substitution field with
- <code>http://</code><em>thishost</em>[<em>:thisport</em>]
- then <strong>mod_rewrite</strong> automatically strips it
- out. This auto-reduction on implicit external redirect
- URLs is a useful and important feature when used in
- combination with a mapping-function which generates the
- hostname part. Have a look at the first example in the
- example section below to understand this.
-</note>
-
-<note><title>Remember</title>
- An unconditional external
- redirect to your own server will not work with the prefix
- <code>http://thishost</code> because of this feature. To
- achieve such a self-redirect, you have to use the
- <strong>R</strong>-flag (see below).
-</note>
-
- <p>Additionally you can set special flags for
- <em>Substitution</em> by appending</p>
-
- <p class="indent">
- <strong><code>[</code><em>flags</em><code>]</code></strong>
- </p>
- <p>
- as the third argument to the <code>RewriteRule</code>
- directive. <em>Flags</em> is a comma-separated list of the
- following flags: </p>
-
- <ul>
- <li>
- '<strong><code>redirect|R</code>
- [=<em>code</em>]</strong>' (force <a id="redirect"
- name="redirect"><strong>r</strong>edirect</a>)<br />
- Prefix <em>Substitution</em> with
- <code>http://thishost[:thisport]/</code> (which makes the
- new URL a URI) to force a external redirection. If no
- <em>code</em> is given a HTTP response of 302 (MOVED
- TEMPORARILY) is used. If you want to use other response
- codes in the range 300-400 just specify them as a number
- or use one of the following symbolic names:
- <code>temp</code> (default), <code>permanent</code>,
- <code>seeother</code>. Use it for rules which should
- canonicalize the URL and give it back to the client,
- <em>e.g.</em>, translate ``<code>/~</code>'' into
- ``<code>/u/</code>'' or always append a slash to
- <code>/u/</code><em>user</em>, etc.<br />
-
-
- <p><strong>Note:</strong> When you use this flag, make
- sure that the substitution field is a valid URL! If not,
- you are redirecting to an invalid location! And remember
- that this flag itself only prefixes the URL with
- <code>http://thishost[:thisport]/</code>, rewriting
- continues. Usually you also want to stop and do the
- redirection immediately. To stop the rewriting you also
- have to provide the 'L' flag.</p>
- </li>
-
- <li>'<strong><code>forbidden|F</code></strong>' (force URL
- to be <strong>f</strong>orbidden)<br />
- This forces the current URL to be forbidden,
- <em>i.e.</em>, it immediately sends back a HTTP response of
- 403 (FORBIDDEN). Use this flag in conjunction with
- appropriate RewriteConds to conditionally block some
- URLs.</li>
-
- <li>'<strong><code>gone|G</code></strong>' (force URL to be
- <strong>g</strong>one)<br />
- This forces the current URL to be gone, <em>i.e.</em>, it
- immediately sends back a HTTP response of 410 (GONE). Use
- this flag to mark pages which no longer exist as gone.</li>
-
- <li>
- '<strong><code>proxy|P</code></strong>' (force
- <strong>p</strong>roxy)<br />
- This flag forces the substitution part to be internally
- forced as a proxy request and immediately (<em>i.e.</em>,
- rewriting rule processing stops here) put through the <a
- href="mod_proxy.html">proxy module</a>. You have to make
- sure that the substitution string is a valid URI
- (<em>e.g.</em>, typically starting with
- <code>http://</code><em>hostname</em>) which can be
- handled by the Apache proxy module. If not you get an
- error from the proxy module. Use this flag to achieve a
- more powerful implementation of the <a
- href="mod_proxy.html#proxypass">ProxyPass</a> directive,
- to map some remote stuff into the namespace of the local
- server.
-
- <p>Notice: To use this functionality make sure you have
- the proxy module compiled into your Apache server
- program. If you don't know please check whether
- <code>mod_proxy.c</code> is part of the ``<code>httpd
- -l</code>'' output. If yes, this functionality is
- available to mod_rewrite. If not, then you first have to
- rebuild the ``<code>httpd</code>'' program with mod_proxy
- enabled.</p>
- </li>
-
- <li>'<strong><code>last|L</code></strong>'
- (<strong>l</strong>ast rule)<br />
- Stop the rewriting process here and don't apply any more
- rewriting rules. This corresponds to the Perl
- <code>last</code> command or the <code>break</code> command
- from the C language. Use this flag to prevent the currently
- rewritten URL from being rewritten further by following
- rules. For example, use it to rewrite the root-path URL
- ('<code>/</code>') to a real one, <em>e.g.</em>,
- '<code>/e/www/</code>'.</li>
-
- <li>'<strong><code>next|N</code></strong>'
- (<strong>n</strong>ext round)<br />
- Re-run the rewriting process (starting again with the
- first rewriting rule). Here the URL to match is again not
- the original URL but the URL from the last rewriting rule.
- This corresponds to the Perl <code>next</code> command or
- the <code>continue</code> command from the C language. Use
- this flag to restart the rewriting process, <em>i.e.</em>,
- to immediately go to the top of the loop.<br />
- <strong>But be careful not to create an infinite
- loop!</strong></li>
-
- <li>'<strong><code>chain|C</code></strong>'
- (<strong>c</strong>hained with next rule)<br />
- This flag chains the current rule with the next rule
- (which itself can be chained with the following rule,
- <em>etc.</em>). This has the following effect: if a rule
- matches, then processing continues as usual, <em>i.e.</em>,
- the flag has no effect. If the rule does
- <strong>not</strong> match, then all following chained
- rules are skipped. For instance, use it to remove the
- ``<code>.www</code>'' part inside a per-directory rule set
- when you let an external redirect happen (where the
- ``<code>.www</code>'' part should not to occur!).</li>
-
- <li>
- '<strong><code>type|T</code></strong>=<em>MIME-type</em>'
- (force MIME <strong>t</strong>ype)<br />
- Force the MIME-type of the target file to be
- <em>MIME-type</em>. For instance, this can be used to
- setup the content-type based on some conditions.
- For example, the following snippet allows <code>.php</code> files to
- be <em>displayed</em> by <code>mod_php</code> if they are called with
- the <code>.phps</code> extension:
- <example>
- RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
- </example>
- </li>
-
- <li>
- '<strong><code>handler|H</code></strong>=<em>Content-handler</em>'
- (force Content <strong>h</strong>andler)<br />
- Force the Content-handler of the target file to be
- <em>Content-handler</em>. For instance, this can be used to
- simulate the <code>mod_alias</code> directive
- <code>ScriptAlias</code> which internally forces all files
- inside the mapped directory to have a handler of
- ``<code>cgi-script</code>''.</li>
-
- <li>
- '<strong><code>nosubreq|NS</code></strong>' (used only if
- <strong>n</strong>o internal
- <strong>s</strong>ub-request)<br />
- This flag forces the rewriting engine to skip a
- rewriting rule if the current request is an internal
- sub-request. For instance, sub-requests occur internally
- in Apache when <code>mod_include</code> tries to find out
- information about possible directory default files
- (<code>index.xxx</code>). On sub-requests it is not
- always useful and even sometimes causes a failure to if
- the complete set of rules are applied. Use this flag to
- exclude some rules.<br />
-
-
- <p>Use the following rule for your decision: whenever you
- prefix some URLs with CGI-scripts to force them to be
- processed by the CGI-script, the chance is high that you
- will run into problems (or even overhead) on
- sub-requests. In these cases, use this flag.</p>
- </li>
-
- <li>'<strong><code>nocase|NC</code></strong>'
- (<strong>n</strong>o <strong>c</strong>ase)<br />
- This makes the <em>Pattern</em> case-insensitive,
- <em>i.e.</em>, there is no difference between 'A-Z' and
- 'a-z' when <em>Pattern</em> is matched against the current
- URL.</li>
-
- <li>'<strong><code>qsappend|QSA</code></strong>'
- (<strong>q</strong>uery <strong>s</strong>tring
- <strong>a</strong>ppend)<br />
- This flag forces the rewriting engine to append a query
- string part in the substitution string to the existing one
- instead of replacing it. Use this when you want to add more
- data to the query string via a rewrite rule.</li>
-
- <li>
- '<strong><code>noescape|NE</code></strong>'
- (<strong>n</strong>o URI <strong>e</strong>scaping of
- output)<br />
- This flag keeps mod_rewrite from applying the usual URI
- escaping rules to the result of a rewrite. Ordinarily,
- special characters (such as '%', '$', ';', and so on)
- will be escaped into their hexcode equivalents ('%25',
- '%24', and '%3B', respectively); this flag prevents this
- from being done. This allows percent symbols to appear in
- the output, as in
-<example>
- RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
-</example>
-
- which would turn '<code>/foo/zed</code>' into a safe
- request for '<code>/bar?arg=P1=zed</code>'.
- </li>
-
- <li>
- '<strong><code>passthrough|PT</code></strong>'
- (<strong>p</strong>ass <strong>t</strong>hrough to next
- handler)<br />
- This flag forces the rewriting engine to set the
- <code>uri</code> field of the internal
- <code>request_rec</code> structure to the value of the
- <code>filename</code> field. This flag is just a hack to
- be able to post-process the output of
- <code>RewriteRule</code> directives by
- <code>Alias</code>, <code>ScriptAlias</code>,
- <code>Redirect</code>, <em>etc.</em> directives from
- other URI-to-filename translators. A trivial example to
- show the semantics: If you want to rewrite
- <code>/abc</code> to <code>/def</code> via the rewriting
- engine of <code>mod_rewrite</code> and then
- <code>/def</code> to <code>/ghi</code> with
- <code>mod_alias</code>:
-<example>
- RewriteRule ^/abc(.*) /def$1 [PT]<br />
- Alias /def /ghi
-</example>
- If you omit the <code>PT</code> flag then
- <code>mod_rewrite</code> will do its job fine,
- <em>i.e.</em>, it rewrites <code>uri=/abc/...</code> to
- <code>filename=/def/...</code> as a full API-compliant
- URI-to-filename translator should do. Then
- <code>mod_alias</code> comes and tries to do a
- URI-to-filename transition which will not work.
-
- <p>Note: <strong>You have to use this flag if you want to
- intermix directives of different modules which contain
- URL-to-filename translators</strong>. The typical example
- is the use of <code>mod_alias</code> and
- <code>mod_rewrite</code>..</p>
- </li>
-
- <li>'<strong><code>skip|S</code></strong>=<em>num</em>'
- (<strong>s</strong>kip next rule(s))<br />
- This flag forces the rewriting engine to skip the next
- <em>num</em> rules in sequence when the current rule
- matches. Use this to make pseudo if-then-else constructs:
- The last rule of the then-clause becomes
- <code>skip=N</code> where N is the number of rules in the
- else-clause. (This is <strong>not</strong> the same as the
- 'chain|C' flag!)</li>
-
- <li>
- '<strong><code>env|E=</code></strong><em>VAR</em>:<em>VAL</em>'
- (set <strong>e</strong>nvironment variable)<br />
- This forces an environment variable named <em>VAR</em> to
- be set to the value <em>VAL</em>, where <em>VAL</em> can
- contain regexp backreferences <code>$N</code> and
- <code>%N</code> which will be expanded. You can use this
- flag more than once to set more than one variable. The
- variables can be later dereferenced in many situations, but
- usually from within XSSI (via <code>&lt;!--#echo
- var="VAR"--&gt;</code>) or CGI (<em>e.g.</em>
- <code>$ENV{'VAR'}</code>). Additionally you can dereference
- it in a following RewriteCond pattern via
- <code>%{ENV:VAR}</code>. Use this to strip but remember
- information from URLs.</li>
-
- <li>
- '<strong><code>cookie|CO=</code></strong><em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>]]'
- (set <strong>co</strong>okie)<br />
- This sets a cookie on the client's browser. The cookie's name
- is specified by <em>NAME</em> and the value is
- <em>VAL</em>. The <em>domain</em> field is the domain of the
- cookie, such as '.apache.org',the optional <em>lifetime</em>
- is the lifetime of the cookie in minutes, and the optional
- <em>path</em> is the path of the cookie</li>
-
- </ul>
-
-<note><title>Note</title> Never forget that <em>Pattern</em> is
-applied to a complete URL in per-server configuration
-files. <strong>But in per-directory configuration files, the
-per-directory prefix (which always is the same for a specific
-directory!) is automatically <em>removed</em> for the pattern matching
-and automatically <em>added</em> after the substitution has been
-done.</strong> This feature is essential for many sorts of rewriting,
-because without this prefix stripping you have to match the parent
-directory which is not always possible.
-
- <p>There is one exception: If a substitution string
- starts with ``<code>http://</code>'' then the directory
- prefix will <strong>not</strong> be added and an
- external redirect or proxy throughput (if flag
- <strong>P</strong> is used!) is forced!</p>
-</note>
-
-<note><title>Note</title>
- To enable the rewriting engine
- for per-directory configuration files you need to set
- ``<code>RewriteEngine On</code>'' in these files
- <strong>and</strong> ``<code>Options
- FollowSymLinks</code>'' must be enabled. If your
- administrator has disabled override of
- <code>FollowSymLinks</code> for a user's directory, then
- you cannot use the rewriting engine. This restriction is
- needed for security reasons.
-</note>
-
- <p>Here are all possible substitution combinations and their
- meanings:</p>
-
- <p><strong>Inside per-server configuration
- (<code>httpd.conf</code>)<br />
- for request ``<code>GET
- /somepath/pathinfo</code>'':</strong><br />
- </p>
-
-<note><pre>
-<strong>Given Rule</strong> <strong>Resulting Substitution</strong>
----------------------------------------------- ----------------------------------
-^/somepath(.*) otherpath$1 not supported, because invalid!
-
-^/somepath(.*) otherpath$1 [R] not supported, because invalid!
-
-^/somepath(.*) otherpath$1 [P] not supported, because invalid!
----------------------------------------------- ----------------------------------
-^/somepath(.*) /otherpath$1 /otherpath/pathinfo
-
-^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^/somepath(.*) /otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^/somepath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
-
-^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^/somepath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
- via external redirection
-
-^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
- via external redirection
- (the [R] flag is redundant)
-
-^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
- via internal proxy
-</pre></note>
-
- <p><strong>Inside per-directory configuration for
- <code>/somepath</code><br />
- (<em>i.e.</em>, file <code>.htaccess</code> in dir
- <code>/physical/path/to/somepath</code> containing
- <code>RewriteBase /somepath</code>)<br />
- for request ``<code>GET
- /somepath/localpath/pathinfo</code>'':</strong><br />
- </p>
-
-<note><pre>
-<strong>Given Rule</strong> <strong>Resulting Substitution</strong>
----------------------------------------------- ----------------------------------
-^localpath(.*) otherpath$1 /somepath/otherpath/pathinfo
-
-^localpath(.*) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^localpath(.*) /otherpath$1 /otherpath/pathinfo
-
-^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) /otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^localpath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
-
-^localpath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
----------------------------------------------- ----------------------------------
-^localpath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
- via external redirection
-
-^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
- via external redirection
- (the [R] flag is redundant)
-
-^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
- via internal proxy
-</pre></note>
-
- <p><strong>Example:</strong></p>
-
- <p>We want to rewrite URLs of the form </p>
-
- <p class="indent">
- <code>/</code> <em>Language</em> <code>/~</code>
- <em>Realname</em> <code>/.../</code> <em>File</em>
- </p>
-
- <p>into </p>
-
- <p class="indent">
- <code>/u/</code> <em>Username</em> <code>/.../</code>
- <em>File</em> <code>.</code> <em>Language</em>
- </p>
-
- <p>We take the rewrite mapfile from above and save it under
- <code>/path/to/file/map.txt</code>. Then we only have to
- add the following lines to the Apache server configuration
- file:</p>
-
-<example>
-<pre>
-RewriteLog /path/to/file/rewrite.log
-RewriteMap real-to-user txt:/path/to/file/map.txt
-RewriteRule ^/([^/]+)/~([^/]+)/(.*)$ /u/${real-to-user:$2|nobody}/$3.$1
-</pre>
- </example>
- </usage>
- </directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_rewrite.xml.meta b/docs/manual/mod/mod_rewrite.xml.meta
deleted file mode 100644
index bffdea71d6..0000000000
--- a/docs/manual/mod/mod_rewrite.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_rewrite</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_setenvif.html b/docs/manual/mod/mod_setenvif.html
deleted file mode 100644
index 0a1cf29b65..0000000000
--- a/docs/manual/mod/mod_setenvif.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_setenvif.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_setenvif.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_setenvif.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_setenvif.html.en b/docs/manual/mod/mod_setenvif.html.en
deleted file mode 100644
index e17d000f55..0000000000
--- a/docs/manual/mod/mod_setenvif.html.en
+++ /dev/null
@@ -1,286 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_setenvif - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_setenvif</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_setenvif.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_setenvif.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_setenvif.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Allows the setting of environment variables based
-on characteristics of the request</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>setenvif_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_setenvif.c</td></tr></table>
-<h3>Summary</h3>
-
-
- <p>The <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module allows you to set
- environment variables according to whether different aspects of
- the request match regular expressions you specify. These
- environment variables can be used by other parts of the server
- to make decisions about actions to be taken.</p>
-
- <p>The directives are considered in the order they appear in
- the configuration files. So more complex sequences can be used,
- such as this example, which sets <code>netscape</code> if the
- browser is mozilla but not MSIE.</p>
-
-<div class="example"><p><code>
- BrowserMatch ^Mozilla netscape<br />
- BrowserMatch MSIE !netscape<br />
-</code></p></div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#browsermatch">BrowserMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenvif">SetEnvIf</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenvifnocase">SetEnvIfNoCase</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../env.html">Environment Variables in Apache</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets environment variables conditional on HTTP User-Agent
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
-</table>
- <p>The <code class="directive">BrowserMatch</code> is a special cases of the
- <code class="directive"><a href="#setenvif">SetEnvIf</a></code> directive that
- sets environment variables conditional on the
- <code>User-Agent</code> HTTP request header. The following two
- lines have the same effect:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</code></p></div>
-
- <p>Some additional examples:</p>
-<div class="example"><p><code>
- BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
- BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
- BrowserMatch MSIE !javascript<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BrowserMatchNoCase" id="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase" id="browsermatchnocase">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets environment variables conditional on User-Agent without
-respect to case</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache 1.2 and
- above (in Apache 1.2 this directive was found in the
- now-obsolete mod_browser module)</td></tr>
-</table>
-
- <p>The <code class="directive">BrowserMatchNoCase</code> directive is
- semantically identical to the <code class="directive"><a href="#browsermatch">BrowserMatch</a></code> directive.
- However, it provides for case-insensitive matching. For
- example:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase mac platform=macintosh<br />
- BrowserMatchNoCase win platform=windows<br />
-</code></p></div>
-
- <p>The <code class="directive">BrowserMatch</code> and
- <code class="directive">BrowserMatchNoCase</code> directives are special cases of
- the <code class="directive"><a href="#setenvif">SetEnvIf</a></code> and <code class="directive"><a href="#setenvifnocase">SetEnvIfNoCase</a></code>
- directives. The following two lines have the same effect:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnvIf" id="SetEnvIf">SetEnvIf</a> <a name="setenvif" id="setenvif">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets environment variables based on attributes of the request
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
-</table>
- <p>The <code class="directive">SetEnvIf</code> directive defines
- environment variables based on attributes of the request. The
- <em>attribute</em> specified in the first argument can be one of three
- things:</p>
-
-<ol>
-<li>An HTTP request header field (see <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
- for more information about these); for example: <code>Host</code>,
- <code>User-Agent</code>, <code>Referer</code>, and
- <code>Accept-Language</code>. A regular expression may be
- used to specify a set of request headers.</li>
-
-<li>One of the following aspects of the request:
- <ul>
- <li><code>Remote_Host</code> - the hostname (if available) of
- the client making the request</li>
-
- <li><code>Remote_Addr</code> - the IP address of the client
- making the request</li>
-
- <li><code>Server_Addr</code> - the IP address of the server
- on which the request was received (only with versions later
- than 2.0.43)</li>
-
- <li><code>Request_Method</code> - the name of the method
- being used (<code>GET</code>, <code>POST</code>, <em>et
- cetera</em>)</li>
-
- <li><code>Request_Protocol</code> - the name and version of
- the protocol with which the request was made (<em>e.g.</em>,
- "HTTP/0.9", "HTTP/1.1", <em>etc.</em>)</li>
-
- <li><code>Request_URI</code> - the resource requested on the HTTP
- request line -- generally the portion of the URL
- following the scheme and host portion without the query string</li>
- </ul>
-</li>
-
-<li>The name of an environment variable in the list of those
-associated with the request. This allows
-<code class="directive">SetEnvIf</code> directives to test against the result
-of prior matches. Only those environment variables defined by earlier
-<code>SetEnvIf[NoCase]</code> directives are available for testing in
-this manner. 'Earlier' means that they were defined at a broader scope
-(such as server-wide) or previously in the current directive's scope.
-Environment variables will be considered only if there was no match
-among request characteristics and a regular expression was not
-used for the <em>attribute</em>.</li>
-</ol>
-
-<p>The second argument (<em>regex</em>) is a <a href="http://www.pcre.org/">Perl compatible regular expression</a>.
-This is similar to a POSIX.2 egrep-style regular expression.
-If the <em>regex</em> matches against the <em>attribute</em>,
-then the remainder of the arguments are evaluated.</p>
-
-<p>The rest of the arguments give the names of variables to set, and
-optionally values to which they should be set. These take the form
-of</p>
-
- <ol>
- <li><code><em>varname</em></code>, or</li>
-
- <li><code>!<em>varname</em></code>, or</li>
-
- <li><code><em>varname</em>=<em>value</em></code></li>
- </ol>
-
- <p>In the first form, the value will be set to "1". The second
- will remove the given variable if already defined, and the
- third will set the variable to the literal value given by
- <code><em>value</em></code>. Since version 2.1 Apache will
- recognize occurrences of <code>$1</code>..<code>$9</code> within
- <var>value</var> and replace them by parenthesized subexpressions
- of <var>regex</var>.</p>
-
-<div class="example"><h3>Example:</h3><p><code>
-
- SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
- SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
- SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
- :<br />
- SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
- :<br />
- SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
- :<br />
- SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
-</code></p></div>
-
- <p>The first three will set the environment variable
- <code>object_is_image</code> if the request was for an image
- file, and the fourth sets <code>intra_site_referral</code> if
- the referring page was somewhere on the
- <code>www.mydomain.com</code> Web site.</p>
-
- <p>The last example will set environment variable
- <code>HAVE_TS</code> if the request contains any headers that
- begin with "TS" whose values begins with any character in the
- set [a-z].</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../env.html">Environment Variables in Apache</a>,
-for additional examples.
-</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnvIfNoCase" id="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase" id="setenvifnocase">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets environment variables based on attributes of the request
-without respect to case</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Apache 1.3 and above</td></tr>
-</table>
-
- <p>The <code class="directive">SetEnvIfNoCase</code> is semantically identical to
- the <code class="directive"><a href="#setenvif">SetEnvIf</a></code> directive,
- and differs only in that the regular expression matching is
- performed in a case-insensitive manner. For example:</p>
-<div class="example"><p><code>
- SetEnvIfNoCase Host Apache\.Org site=apache
-</code></p></div>
-
- <p>This will cause the <code>site</code> environment variable
- to be set to "<code>apache</code>" if the HTTP request header
- field <code>Host:</code> was included and contained
- <code>Apache.Org</code>, <code>apache.org</code>, or any other
- combination.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_setenvif.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_setenvif.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_setenvif.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_setenvif.html.ja.euc-jp b/docs/manual/mod/mod_setenvif.html.ja.euc-jp
deleted file mode 100644
index 27b595ad4f..0000000000
--- a/docs/manual/mod/mod_setenvif.html.ja.euc-jp
+++ /dev/null
@@ -1,280 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_setenvif - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_setenvif</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_setenvif.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_setenvif.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤ÎÆÃħ¤Ë´ð¤Å¤¤¤¿´Ä¶­ÊÑ¿ô¤ÎÀßÄê¤ò²Äǽ¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>setenvif_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_setenvif.c</td></tr></table>
-<h3>³µÍ×</h3>
-
-
- <p><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Î¤¢¤ë¦Ì̤¬»ØÄꤵ¤ì¤¿Àµµ¬É½¸½
- ¤Ë¹ç¤¦¤«¤É¤¦¤«¤Ë¤è¤Ã¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ëµ¡Ç½¤òÄ󶡤·¤Þ¤¹¡£
- ¤³¤ì¤é¤Î´Ä¶­ÊÑ¿ô¤ò»ÈÍѤ·¤Æ¡¢¥µ¡¼¥Ð¤Î¾¤ÎÉôʬ¤¬¤É¤Î¤è¤¦¤ÊÆ°ºî¤ò¤¹¤ë¤«¤ò
- ·èÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤¬Ä󶡤¹¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸½¤ì¤ë½çÈÖ¤ËŬÍѤµ¤ì¤Þ¤¹¡£
- ¤½¤ì¤ò»È¤Ã¤Æ¡¢¼¡¤ÎÎã¤Î¤è¤¦¤Ë¤è¤êÊ£»¨¤ÊÀßÄê¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥Ö¥é¥¦¥¶¤¬ mozilla ¤Ç¤Ï¤¢¤ë¤±¤ì¤É¡¢MSIE ¤Ç¤Ï¤Ê¤¤¤È¤­¤Ë
- <code>netscape</code> ¤òÀßÄꤷ¤Þ¤¹¡£</p>
-<div class="example"><p><code>
- BrowserMatch ^Mozilla netscape<br />
- BrowserMatch MSIE !netscape<br />
-</code></p></div>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#browsermatch">BrowserMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenvif">SetEnvIf</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenvifnocase">SetEnvIfNoCase</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../env.html">Apache ¤Î´Ä¶­ÊÑ¿ô</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP User-Agent ¤Ë´ð¤Å¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_setenvif</td></tr>
-</table>
- <p><code class="directive">BrowserMatch</code> ¤Ï
- <code class="directive"><a href="#setenvif">SetEnvIf</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- ÆÃÎã¤Ç¡¢<code>User-Agent</code> HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ë´ð¤Å¤¤¤Æ
- ´Ä¶­ÊÑ¿ô¤òÀßÄꤷ¤Þ¤¹¡£°Ê²¼¤Î 2 ¹Ô¤Î¸ú²Ì¤ÏƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹:</p>
-
-<div class="example"><p><code>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</code></p></div>
-
- <p>¤½¤Î¾¤ÎÎã:</p>
-<div class="example"><p><code>
- BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
- BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
- BrowserMatch MSIE !javascript<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BrowserMatchNoCase" id="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase" id="browsermatchnocase">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>HTTP User-Agent ¤Ë´ð¤Å¤¤¤ÆÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¤Ë
-´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_setenvif</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 1.2 °Ê¹ß
- (Apache 1.2 ¤Ç¤Ï¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤â¤¦ÍѤ¤¤é¤ì¤Æ¤¤¤Ê¤¤
- mod_browser ¥â¥¸¥å¡¼¥ë¤Ë¤¢¤ê¤Þ¤·¤¿)</td></tr>
-</table>
-
- <p><code class="directive">BrowserMatchNoCase</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- °Ọ̃Ū¤Ë¤Ï <code class="directive"><a href="#browsermatch">BrowserMatch</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- Ʊ¤¸¤Ç¤¹¡£¤¿¤À¤·¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤
- ¥Þ¥Ã¥Á¥ó¥°¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£Î㤨¤Ð:</p>
-
-<div class="example"><p><code>
- BrowserMatchNoCase mac platform=macintosh<br />
- BrowserMatchNoCase win platform=windows<br />
-</code></p></div>
-
- <p><code class="directive">BrowserMatch</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive">BrowserMatchNoCase</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="directive"><a href="#setenvif">SetEnvIf</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="#setenvifnocase">SetEnvIfNoCase</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- ÆÃÎã¤Ç¤¹¡£°Ê²¼¤Î 2 ¹Ô¤Î¸ú²Ì¤ÏƱ¤¸¤Ç¤¹:</p>
-
-<div class="example"><p><code>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnvIf" id="SetEnvIf">SetEnvIf</a> <a name="setenvif" id="setenvif">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤Î°À­¤Ë´ð¤Å¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_setenvif</td></tr>
-</table>
- <p><code class="directive">SetEnvIf</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Î°À­¤Ë´ð¤Å¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÄêµÁ¤·¤Þ¤¹¡£
- ºÇ½é¤Î°ú¿ô¤Ç»ØÄê¤Ç¤­¤ë <em>attribute</em> ¤Ï°Ê²¼¤Î»°¤Ä¤Î¤É¤ì¤«¤Ç¤¹:</p>
-
-<ol>
-<li>HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É (¾Ü¤·¤¤¾ðÊó¤Ï <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a> ¤ò
- »²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£Î㤨¤Ð¡¢<code>Host</code>,
- <code>User-Agent</code>, <code>Referer</code>,
- <code>Accept-Language</code> ¤Ç¤¹¡£¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Î½¸¹ç¤ò¸½¤¹¤¿¤á¤Ë
- Àµµ¬É½¸½¤ò»È¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</li>
-
-<li>°Ê²¼¤Î¥ê¥¯¥¨¥¹¥È¤Î°ìÉôʬ¤Î¤É¤ì¤«:
-
- <ul>
- <li><code>Remote_Host</code> -
- ¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤ë¥¯¥é¥¤¥¢¥ó¥È¤Î¥Û¥¹¥È̾ (¤â¤·¤¢¤ì¤Ð)</li>
-
- <li><code>Remote_Addr</code> -
- ¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤ë¥¯¥é¥¤¥¢¥ó¥È¤Î IP ¥¢¥É¥ì¥¹</li>
-
- <li><code>Server_Addr</code> -
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤Ã¤¿¥µ¡¼¥Ð¤Î IP ¥¢¥É¥ì¥¹
- (2.0.43 °Ê¹ß¤Î¤ß)</li>
-
- <li><code>Request_Method</code> -
- »ÈÍѤµ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É̾ (<code>GET</code>, <code>POST</code>
- <em>¤Ê¤É</em>)</li>
-
- <li><code>Request_Protocol</code> -
- ¥ê¥¯¥¨¥¹¥È¤¬¹Ô¤Ê¤ï¤ì¤¿¥×¥í¥È¥³¥ë¤Î̾Á°¤È¥Ð¡¼¥¸¥ç¥ó
- (<em>Î㤨¤Ð</em>¡¢"HTTP/0.9", "HTTP/1.1" <em>¤Ê¤É¡£</em>)</li>
-
- <li><code>Request_URI</code> -
- URL ¤Î¥¹¥­¡¼¥à¤È¥Û¥¹¥È¤Î¸å¤ÎÉôʬ</li>
- </ul>
-</li>
-
-<li>¥ê¥¯¥¨¥¹¥È¤È´ØÏ¢ÉÕ¤±¤é¤ì¤ë´Ä¶­ÊÑ¿ô¤Î¥ê¥¹¥È¡£¤³¤ì¤Ë¤è¤ê
-<code class="directive">SetEnvIf</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬°ÊÁ°¤Î¥Þ¥Ã¥Á¤Î·ë²Ì¤ò
-»È¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ÎÊýË¡¤Î¥Æ¥¹¥È¤Ç¤ÏÁ°¤ÎÉôʬ¤Ë¤¢¤ë
-<code>SetEnvIf[NoCase]</code> ¤Î·ë²Ì¤Î¤ß¤ò»ÈÍѲÄǽ¤Ç¤¹¡£¡ÖÁ°¡×¤È¤Ï¡¢
-¤è¤ê¹­¤¤ÈϰϤËÂФ·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë (¥µ¡¼¥ÐÁ´ÂΤΤ褦¤Ë) ¤«¡¢¸½ºß¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
-ÈϰϤǤè¤êÁ°¤ÎÉôʬ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤«¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
-´Ä¶­ÊÑ¿ô¤Ç¤¢¤ë²ÄǽÀ­¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤ÎÆÃÀ­¤ËÂФ¹¤ë¥Þ¥Ã¥Á¤¬Â¸ºß¤»¤º¡¢
-<em>attribute</em> ¤ËÀµµ¬É½¸½¤¬»È¤ï¤ì¤Ê¤«¤Ã¤¿¤È¤­¤Ë¤Î¤ß¹Í褵¤ì¤Þ¤¹¡£</li>
-</ol>
-
-<p>Æó¤ÄÌܤΰú¿ô (<em>regex</em>) ¤Ï <a href="http://www.pcre.org/">Perl ¸ß´¹¤ÎÀµµ¬É½¸½</a>¤Ç¤¹¡£
-¤³¤ì¤Ï POSIX.2 ¤Î egrep ·Á¼°¤ÎÀµµ¬É½¸½¤È»÷¤Æ¤¤¤Þ¤¹¡£<em>regex</em> ¤¬
-<em>attribute</em> ¤Ë¥Þ¥Ã¥Á¤¹¤ë¾ì¹ç¤Ï¡¢»Ä¤ê¤Î°ú¿ô¤¬É¾²Á¤µ¤ì¤Þ¤¹¡£</p>
-
-<p>»Ä¤ê¤Î°ú¿ô¤ÏÀßÄꤹ¤ëÊÑ¿ô¤Î̾Á°¤Ç¡¢ÀßÄꤵ¤ì¤ëÃͤò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
-¤³¤ì¤Ï¡¢</p>
-
- <ol>
- <li><code><em>varname</em></code></li>
-
- <li><code>!<em>varname</em></code></li>
-
- <li><code><em>varname</em>=<em>value</em></code></li>
- </ol>
-
- <p>¤Î¤É¤ì¤«¤Î·Á¼°¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>ºÇ½é¤Î·Á¼°¤Ç¤Ï¡¢ÃÍ¤Ï "1" ¤ËÀßÄꤵ¤ì¤Þ¤¹¡£
- Æó¤ÄÌܤϤ⤷Ãͤ¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð¤½¤ì¤ò¼è¤ê½ü¤­¤Þ¤¹¡£
- »°¤ÄÌܤÏÊÑ¿ô¤ò <code><em>value</em></code> ¤ÎÍ¿¤¨¤é¤ì¤¿ÃͤËÀßÄꤷ¤Þ¤¹¡£
- 2.1 °Ê¹ß¤Ç¤Ï¡¢<var>regex</var> Æâ¤Ë <code>$1</code>..<code>$9</code>
- ¤¬Â¸ºß¤¹¤ì¤Ð¤½¤ì¤òǧ¼±¤·¡¢<var>regex</var> ¤ÎÂбþ¤¹¤ë´Ý³ç¸Ì¤Ç°Ï¤Þ¤ì¤¿Éôʬ¤Ç
- ÃÖ´¹¤·¤Þ¤¹¡£</p>
-
-<div class="example"><h3>Îã:</h3><p><code>
-
- SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
- SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
- SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
- :<br />
- SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
- :<br />
- SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
- :<br />
- SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
-</code></p></div>
-
- <p>½é¤á¤Î»°¤Ä¤Ï¥ê¥¯¥¨¥¹¥È¤¬²èÁü¤Ç¤¢¤ë¤È¤­¤Ë´Ä¶­ÊÑ¿ô
- <code>object_is_image</code> ¤òÀßÄꤷ¤Þ¤¹¡£»Í¤ÄÌܤÏ
- »²¾È¸µ¤Î¥Ú¡¼¥¸¤¬¥¦¥§¥Ö¥µ¥¤¥È <code>www.mydomain.com</code> ¤Ë¤¢¤ë¤È¤­¤Ë
- <code>intra_site_referral</code> ¤òÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p>ºÇ¸å¤ÎÎã¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Ë "TS" ¤Ç»Ï¤Þ¤ê¡¢Ãͤ¬½¸¹ç [a-z] ¤Î¤É¤ì¤«¤Ç
- »Ï¤Þ¤ë¥Ø¥Ã¥À¤¬¤¢¤ë¤È¤­¤Ë <code>HAVE_TS</code> ¤òÀßÄꤷ¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li>¾¤ÎÎã¤Ï¡¢<a href="../env.html">Apache ¤Î´Ä¶­ÊÑ¿ô</a>
-</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnvIfNoCase" id="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase" id="setenvifnocase">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤Î°À­¤Ë´ð¤Å¤¤¤ÆÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¤Ë´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_setenvif</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 1.3 °Ê¹ß</td></tr>
-</table>
-
- <p><code class="directive">SetEnvIfNoCase</code> ¤Ï°Ọ̃Ū¤Ë¤Ï
- <code class="directive"><a href="#setenvif">SetEnvIf</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- Ʊ¤¸¤Ç¤¹¡£°ã¤¤¤Ï¡¢Àµµ¬É½¸½¤Î¥Þ¥Ã¥Á¥ó¥°¤¬Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¤Ç
- ¹Ô¤Ê¤ï¤ì¤ë¤³¤È¤Ç¤¹¡£Î㤨¤Ð:</p>
-
-<div class="example"><p><code>
- SetEnvIfNoCase Host Apache\.Org site=apache
-</code></p></div>
-
- <p>¤³¤ì¤Ï HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ë¥Õ¥£¡¼¥ë¥É <code>Host:</code> ¤¬
- ¤¢¤ê¡¢¤½¤ÎÃͤ¬ <code>Apache.Org</code> ¤ä <code>apache.org</code>¡¢
- ¤½¤Î¾¤ÎÂçʸ»ú¾®Ê¸»ú¤ÎÁȤ߹ç¤ï¤»¤Ç¤¢¤Ã¤¿¤È¤­¤Ë <code>site</code>
- ´Ä¶­ÊÑ¿ô¤ò "<code>apache</code>" ¤ËÀßÄꤷ¤Þ¤¹¡£</p>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_setenvif.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_setenvif.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_setenvif.html.ko.euc-kr b/docs/manual/mod/mod_setenvif.html.ko.euc-kr
deleted file mode 100644
index f2701753fa..0000000000
--- a/docs/manual/mod/mod_setenvif.html.ko.euc-kr
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_setenvif - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_setenvif</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_setenvif.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_setenvif.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¿äûÀÇ ¼º°Ý¿¡ µû¶ó ȯ°æº¯¼ö ¼³Á¤À» º¯°æÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>setenvif_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_setenvif.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
- <p><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> ¸ðµâÀº ¿äûÀÇ ¼º°ÝÀÌ
- Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ´ÂÁö ¿©ºÎ·Î ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ¼­¹öÀÇ
- ´Ù¸¥ ºÎºÐÀÌ ÇൿÀ» °áÁ¤ÇÒ¶§ ÀÌ È¯°æº¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ³ª¿À´Â ¼ø¼­´ë·Î Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù. ±×·¡¼­
- ºê¶ó¿ìÀú°¡ MSIE°¡ ¾Æ´Ï¶ó mozillaÀÎ °æ¿ì <code>netscape</code>¸¦
- ¼³Á¤ÇÏ´Â ¾Æ·¡ ¿¹¿Í °°ÀÌ ¿©·¯ Áö½Ã¾î¸¦ ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
-<div class="example"><p><code>
- BrowserMatch ^Mozilla netscape<br />
- BrowserMatch MSIE !netscape<br />
-</code></p></div>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#browsermatch">BrowserMatch</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#browsermatchnocase">BrowserMatchNoCase</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenvif">SetEnvIf</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#setenvifnocase">SetEnvIfNoCase</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>HTTP User-Agent¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_setenvif</td></tr>
-</table>
- <p><code class="directive">BrowserMatch</code>´Â <code class="directive"><a href="#setenvif">SetEnvIf</a></code> Áö½Ã¾îÀÇ Æ¯º°ÇÑ
- °æ¿ì·Î, HTTP ¿äû Çì´õ <code>User-Agent</code>¿¡ µû¶ó ȯ°æº¯¼ö¸¦
- ¼³Á¤ÇÑ´Ù. ´ÙÀ½ µÎ ÁÙÀº °°´Ù:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</code></p></div>
-
- <p>Ãß°¡ ¿¹Á¦:</p>
-<div class="example"><p><code>
- BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
- BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
- BrowserMatch MSIE !javascript<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="BrowserMatchNoCase" id="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase" id="browsermatchnocase">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í User-Agent¿¡ µû¶ó ȯ°æº¯¼ö¸¦
-¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_setenvif</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 1.2 ÀÌ»ó (¾ÆÆÄÄ¡ 1.2¿¡¼­ ÀÌ Áö½Ã¾î´Â ÇöÀç
- ¾ø¾îÁø mod_browser ¸ðµâ¿¡ ÀÖ¾ú´Ù)</td></tr>
-</table>
-
- <p><code class="directive">BrowserMatchNoCase</code> Áö½Ã¾î´Â <code class="directive"><a href="#browsermatch">BrowserMatch</a></code> Áö½Ã¾î¿Í
- ÀÇ¹Ì»ó °°´Ù. ±×·¯³ª ÀÌ Áö½Ã¾î´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê´Â´Ù.
- ¿¹¸¦ µé¾î:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase mac platform=macintosh<br />
- BrowserMatchNoCase win platform=windows<br />
-</code></p></div>
-
- <p><code class="directive">BrowserMatch</code>¿Í
- <code class="directive">BrowserMatchNoCase</code> Áö½Ã¾î´Â
- <code class="directive"><a href="#setenvif">SetEnvIf</a></code>¿Í
- <code class="directive"><a href="#setenvifnocase">SetEnvIfNoCase</a></code>
- Áö½Ã¾îÀÇ Æ¯º°ÇÑ °æ¿ì´Ù. ´ÙÀ½ ÁÖ ÁÙÀº °°´Ù:</p>
-<div class="example"><p><code>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnvIf" id="SetEnvIf">SetEnvIf</a> <a name="setenvif" id="setenvif">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_setenvif</td></tr>
-</table>
- <p><code class="directive">SetEnvIf</code> Áö½Ã¾î´Â ¿äûÀÇ ¼ºÁú¿¡
- µû¶ó ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÑ´Ù. ù¹ø° ¾Æ±Ô¸ÕÆ® <em>attribute</em>´Â
- ´ÙÀ½ ¼¼°¡ÁöÁß Çϳª´Ù:</p>
-
-<ol>
-<li>HTTP ¿äû Çì´õ (´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
- Âü°í); ¿¹¸¦ µé¾î: <code>Host</code>, <code>User-Agent</code>,
- <code>Referer</code>, <code>Accept-Language</code>. Á¤±ÔÇ¥Çö½ÄÀ»
- »ç¿ëÇÏ¿© ¿©·¯ ¿äû Çì´õ¸¦ ÁöĪÇÒ ¼ö ÀÖ´Ù.</li>
-
-<li>¿äûÀÇ ´ÙÀ½ ¼ºÁúÁß Çϳª:
- <ul>
- <li><code>Remote_Host</code> - (ÀÖ´Ù¸é) ¿äûÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ
- È£½ºÆ®¸í</li>
-
- <li><code>Remote_Addr</code> - ¿äûÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò</li>
-
- <li><code>Server_Addr</code> - ¿äûÀ» ¹Þ´Â ¼­¹öÀÇ IP ÁÖ¼Ò
- (2.0.43 ¹öÀü ÀÌÈÄ¿¡¸¸)</li>
-
- <li><code>Request_Method</code> - »ç¿ëÇÑ ¸Þ½áµå À̸§
- (<code>GET</code>, <code>POST</code>, <em>µîµî</em>)</li>
-
- <li><code>Request_Protocol</code> - ¿äûÀÇ ÇÁ·ÎÅäÄÝ À̸§°ú
- ¹öÀü (<em>¿¹¸¦ µé¾î</em>, "HTTP/0.9", "HTTP/1.1", <em>µî.</em>)</li>
-
- <li><code>Request_URI</code> - HTTP ¿äû¿¡¼­ ¿äûÇÑ ÀÚ¿ø
- -- ÀϹÝÀûÀ¸·Î URL¿¡¼­ ÁúÀǹ®ÀÚ¿­À» Á¦¿ÜÇÑ ½ºÅ´(scheme)°ú
- È£½ºÆ® ÀÌÈÄ ºÎºÐ</li>
- </ul>
-</li>
-
-<li>¿äû°ú ¿¬°üµÈ ȯ°æº¯¼ö À̸§. ±×·¡¼­ <code class="directive">SetEnvIf</code>
-Áö½Ã¾î´Â ÀÌÀü Áö½Ã¾îÀÇ °á°ú¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù. ÀÌÀü¿¡
-<code>SetEnvIf[NoCase]</code> Áö½Ã¾î·Î Á¤ÀÇÇÑ È¯°æº¯¼ö¸¸À»
-°Ë»çÇÒ ¼ö ÀÖ´Ù. 'ÀÌÀü'À̶õ (¼­¹öÀü¿ª°ú °°ÀÌ) ´õ ³ÐÀº ¿µ¿ª ȤÀº
-Áö½Ã¾îÀÇ ÇöÀç ¿µ¿ª ÀÌÀüÀ» ¶æÇÑ´Ù. ¿äû ¼ºÁúÀÌ ¾Æ´Ï°í Á¤±ÔÇ¥Çö½ÄÀÌ
-¾Æ´Ñ <em>attribute</em>´Â ȯ°æº¯¼ö·Î Ãë±ÞÇÑ´Ù.</li>
-</ol>
-
-<p>µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â (<em>regex</em>) <a href="http://www.pcre.org/">Perl ȣȯ Á¤±ÔÇ¥Çö½Ä</a>ÀÌ´Ù.
-ÀÌ´Â POSIX.2 egrepÀÇ Á¤±ÔÇ¥Çö½Ä°ú ºñ½ÁÇÏ´Ù. <em>regex</em>°¡
-<em>attribute</em>¿¡ ´ëÀÀÇÏ¸é ³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®¸¦ ó¸®ÇÑ´Ù.</p>
-
-<p>³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®´Â ¼³Á¤ÇÒ º¯¼ö¸í°ú (¼±ÅÃÀûÀÎ) ¼³Á¤°ªµéÀÌ´Ù.
-´ÙÀ½°ú °°Àº Çü½ÄÀÌ´Ù</p>
-
- <ol>
- <li><code><em>varname</em></code>, ȤÀº</li>
-
- <li><code>!<em>varname</em></code>, ȤÀº</li>
-
- <li><code><em>varname</em>=<em>value</em></code></li>
- </ol>
-
- <p>ù¹ø° ÇüÅ´ °ªÀ¸·Î "1"À» »ç¿ëÇÑ´Ù. µÎ¹ø° ÇüÅ´ º¯¼ö°¡
- ÀÌ¹Ì Á¤ÀÇµÈ °æ¿ì º¯¼ö¸¦ Á¦°ÅÇÏ°í, ¼¼¹ø°´Â º¯¼öÀÇ °ªÀ¸·Î
- <code><em>value</em></code>¸¦ ¼³Á¤ÇÑ´Ù. ¾ÆÆÄÄ¡ 2.1ºÎÅÍ
- <var>value</var>¿¡ ÀÖ´Â <code>$1</code>..<code>$9</code>¸¦
- <var>regex</var>ÀÇ °ýȣģ ÇÏÀ§Ç¥Çö½ÄÀ¸·Î ´ëüÇÑ´Ù.</p>
-
-<div class="example"><h3>¿¹Á¦:</h3><p><code>
-
- SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
- SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
- SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
- :<br />
- SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
- :<br />
- SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
- :<br />
- SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
-</code></p></div>
-
- <p>óÀ½ ¼¼ ÁÙÀº À̹ÌÁö ÆÄÀÏÀ» ¿äûÇÑ °æ¿ì ȯ°æº¯¼ö
- <code>object_is_image</code>¸¦ ¼³Á¤ÇÑ´Ù. ³×¹ø° ÁÙÀº ÆäÀÌÁö¸¦
- <code>www.mydomain.com</code> À¥»çÀÌÆ®¿¡¼­ ÂüÁ¶ÇÑ °æ¿ì
- <code>intra_site_referral</code>À» ¼³Á¤ÇÑ´Ù.</p>
-
- <p>¸¶Áö¸· ¿¹´Â ¿äû¿¡ À̸§¿¡ "TS"·Î ½ÃÀÛÇÏ°í °ªÀÌ [a-z]
- Áß Çϳª·Î ½ÃÀÛÇÏ´Â Çì´õ°¡ ÀÖ´Â °æ¿ì ȯ°æº¯¼ö
- <code>HAVE_TS</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
-<h3>Âü°í</h3>
-<ul>
-<li><a href="../env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a>¿¡ ´õ ¸¹Àº
-¿¹Á¦°¡ ÀÖ´Ù.
-</li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SetEnvIfNoCase" id="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase" id="setenvifnocase">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í ¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦
-¼³Á¤ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_setenvif</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 1.3 ÀÌÈÄ</td></tr>
-</table>
-
- <p><code class="directive">SetEnvIfNoCase</code>´Â Àǹ̻ó <code class="directive"><a href="#setenvif">SetEnvIf</a></code> Áö½Ã¾î¿Í °°Áö¸¸,
- ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í Á¤±ÔÇ¥Çö½ÄÀ» ã´Â´Ù. ¿¹¸¦ µé¾î:</p>
-<div class="example"><p><code>
- SetEnvIfNoCase Host Apache\.Org site=apache
-</code></p></div>
-
- <p>ÀÌ °æ¿ì HTTP ¿äû Çì´õ <code>Host:</code>°¡
- <code>Apache.Org</code>, <code>apache.org</code> µîÀ» Æ÷ÇÔÇϸé
- <code>site</code> ȯ°æº¯¼ö¸¦ "<code>apache</code>"·Î ¼³Á¤ÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_setenvif.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_setenvif.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_setenvif.xml b/docs/manual/mod/mod_setenvif.xml
deleted file mode 100644
index 35f7517370..0000000000
--- a/docs/manual/mod/mod_setenvif.xml
+++ /dev/null
@@ -1,272 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_setenvif.xml.meta">
-
-<name>mod_setenvif</name>
-<description>Allows the setting of environment variables based
-on characteristics of the request</description>
-<status>Base</status>
-<sourcefile>mod_setenvif.c</sourcefile>
-<identifier>setenvif_module</identifier>
-
-
-<summary>
-
- <p>The <module>mod_setenvif</module> module allows you to set
- environment variables according to whether different aspects of
- the request match regular expressions you specify. These
- environment variables can be used by other parts of the server
- to make decisions about actions to be taken.</p>
-
- <p>The directives are considered in the order they appear in
- the configuration files. So more complex sequences can be used,
- such as this example, which sets <code>netscape</code> if the
- browser is mozilla but not MSIE.</p>
-
-<example>
- BrowserMatch ^Mozilla netscape<br />
- BrowserMatch MSIE !netscape<br />
-</example>
-</summary>
-
-<seealso><a href="../env.html">Environment Variables in Apache</a></seealso>
-
-<directivesynopsis>
-<name>BrowserMatch</name>
-<description>Sets environment variables conditional on HTTP User-Agent
-</description>
-<syntax>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>BrowserMatch</directive> is a special cases of the
- <directive module="mod_setenvif">SetEnvIf</directive> directive that
- sets environment variables conditional on the
- <code>User-Agent</code> HTTP request header. The following two
- lines have the same effect:</p>
-<example>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-
- <p>Some additional examples:</p>
-<example>
- BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
- BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
- BrowserMatch MSIE !javascript<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>BrowserMatchNoCase</name>
-<description>Sets environment variables conditional on User-Agent without
-respect to case</description>
-<syntax>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.2 and
- above (in Apache 1.2 this directive was found in the
- now-obsolete mod_browser module)</compatibility>
-
-<usage>
-
- <p>The <directive>BrowserMatchNoCase</directive> directive is
- semantically identical to the <directive
- module="mod_setenvif">BrowserMatch</directive> directive.
- However, it provides for case-insensitive matching. For
- example:</p>
-<example>
- BrowserMatchNoCase mac platform=macintosh<br />
- BrowserMatchNoCase win platform=windows<br />
-</example>
-
- <p>The <directive>BrowserMatch</directive> and
- <directive>BrowserMatchNoCase</directive> directives are special cases of
- the <directive module="mod_setenvif">SetEnvIf</directive> and <directive
- module="mod_setenvif">SetEnvIfNoCase</directive>
- directives. The following two lines have the same effect:</p>
-<example>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIf</name>
-<description>Sets environment variables based on attributes of the request
-</description>
-<syntax>SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>The <directive>SetEnvIf</directive> directive defines
- environment variables based on attributes of the request. The
- <em>attribute</em> specified in the first argument can be one of three
- things:</p>
-
-<ol>
-<li>An HTTP request header field (see <a
- href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
- for more information about these); for example: <code>Host</code>,
- <code>User-Agent</code>, <code>Referer</code>, and
- <code>Accept-Language</code>. A regular expression may be
- used to specify a set of request headers.</li>
-
-<li>One of the following aspects of the request:
- <ul>
- <li><code>Remote_Host</code> - the hostname (if available) of
- the client making the request</li>
-
- <li><code>Remote_Addr</code> - the IP address of the client
- making the request</li>
-
- <li><code>Server_Addr</code> - the IP address of the server
- on which the request was received (only with versions later
- than 2.0.43)</li>
-
- <li><code>Request_Method</code> - the name of the method
- being used (<code>GET</code>, <code>POST</code>, <em>et
- cetera</em>)</li>
-
- <li><code>Request_Protocol</code> - the name and version of
- the protocol with which the request was made (<em>e.g.</em>,
- "HTTP/0.9", "HTTP/1.1", <em>etc.</em>)</li>
-
- <li><code>Request_URI</code> - the resource requested on the HTTP
- request line -- generally the portion of the URL
- following the scheme and host portion without the query string</li>
- </ul>
-</li>
-
-<li>The name of an environment variable in the list of those
-associated with the request. This allows
-<directive>SetEnvIf</directive> directives to test against the result
-of prior matches. Only those environment variables defined by earlier
-<code>SetEnvIf[NoCase]</code> directives are available for testing in
-this manner. 'Earlier' means that they were defined at a broader scope
-(such as server-wide) or previously in the current directive's scope.
-Environment variables will be considered only if there was no match
-among request characteristics and a regular expression was not
-used for the <em>attribute</em>.</li>
-</ol>
-
-<p>The second argument (<em>regex</em>) is a <a
-href="http://www.pcre.org/">Perl compatible regular expression</a>.
-This is similar to a POSIX.2 egrep-style regular expression.
-If the <em>regex</em> matches against the <em>attribute</em>,
-then the remainder of the arguments are evaluated.</p>
-
-<p>The rest of the arguments give the names of variables to set, and
-optionally values to which they should be set. These take the form
-of</p>
-
- <ol>
- <li><code><em>varname</em></code>, or</li>
-
- <li><code>!<em>varname</em></code>, or</li>
-
- <li><code><em>varname</em>=<em>value</em></code></li>
- </ol>
-
- <p>In the first form, the value will be set to "1". The second
- will remove the given variable if already defined, and the
- third will set the variable to the literal value given by
- <code><em>value</em></code>. Since version 2.1 Apache will
- recognize occurrences of <code>$1</code>..<code>$9</code> within
- <var>value</var> and replace them by parenthesized subexpressions
- of <var>regex</var>.</p>
-
-<example>
-<title>Example:</title>
- SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
- SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
- SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
- :<br />
- SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
- :<br />
- SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
- :<br />
- SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
-</example>
-
- <p>The first three will set the environment variable
- <code>object_is_image</code> if the request was for an image
- file, and the fourth sets <code>intra_site_referral</code> if
- the referring page was somewhere on the
- <code>www.mydomain.com</code> Web site.</p>
-
- <p>The last example will set environment variable
- <code>HAVE_TS</code> if the request contains any headers that
- begin with "TS" whose values begins with any character in the
- set [a-z].</p>
-</usage>
-
-<seealso><a href="../env.html">Environment Variables in Apache</a>,
-for additional examples.
-</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIfNoCase</name>
-<description>Sets environment variables based on attributes of the request
-without respect to case</description>
-<syntax>SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.3 and above</compatibility>
-
-<usage>
-
- <p>The <directive>SetEnvIfNoCase</directive> is semantically identical to
- the <directive module="mod_setenvif">SetEnvIf</directive> directive,
- and differs only in that the regular expression matching is
- performed in a case-insensitive manner. For example:</p>
-<example>
- SetEnvIfNoCase Host Apache\.Org site=apache
-</example>
-
- <p>This will cause the <code>site</code> environment variable
- to be set to "<code>apache</code>" if the HTTP request header
- field <code>Host:</code> was included and contained
- <code>Apache.Org</code>, <code>apache.org</code>, or any other
- combination.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_setenvif.xml.ja b/docs/manual/mod/mod_setenvif.xml.ja
deleted file mode 100644
index 46962bbc57..0000000000
--- a/docs/manual/mod/mod_setenvif.xml.ja
+++ /dev/null
@@ -1,264 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_setenvif.xml.meta">
-
-<name>mod_setenvif</name>
-<description>$B%j%/%(%9%H$NFCD'$K4p$E$$$?4D6-JQ?t$N@_Dj$r2DG=$K$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_setenvif.c</sourcefile>
-<identifier>setenvif_module</identifier>
-<summary>
-
- <p><module>mod_setenvif</module>
- $B%b%8%e!<%k$O!"%j%/%(%9%H$N$"$kB&LL$,;XDj$5$l$?@55,I=8=(B
- $B$K9g$&$+$I$&$+$K$h$C$F4D6-JQ?t$r@_Dj$9$k5!G=$rDs6!$7$^$9!#(B
- $B$3$l$i$N4D6-JQ?t$r;HMQ$7$F!"%5!<%P$NB>$NItJ,$,$I$N$h$&$JF0:n$r$9$k$+$r(B
- $B7hDj$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$3$N%b%8%e!<%k$,Ds6!$9$k%G%#%l%/%F%#%V$O!"(B
- $B@_Dj%U%!%$%k$K8=$l$k=gHV$KE,MQ$5$l$^$9!#(B
- $B$=$l$r;H$C$F!"<!$NNc$N$h$&$K$h$jJ#;($J@_Dj$r$9$k$3$H$,$G$-$^$9!#(B
- $B$3$l$O!"%V%i%&%6$,(B mozilla $B$G$O$"$k$1$l$I!"(BMSIE $B$G$O$J$$$H$-$K(B
- <code>netscape</code> $B$r@_Dj$7$^$9!#(B</p>
-<example>
- BrowserMatch ^Mozilla netscape<br />
- BrowserMatch MSIE !netscape<br />
-</example>
-</summary>
-
-<seealso><a href="../env.html">Apache $B$N4D6-JQ?t(B</a></seealso>
-
-<directivesynopsis>
-<name>BrowserMatch</name>
-<description>HTTP User-Agent $B$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k(B
-</description>
-<syntax>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>BrowserMatch</directive> $B$O(B
- <directive module="mod_setenvif">SetEnvIf</directive> $B%G%#%l%/%F%#%V$N(B
- $BFCNc$G!"(B<code>User-Agent</code> HTTP $B%j%/%(%9%H%X%C%@$K4p$E$$$F(B
- $B4D6-JQ?t$r@_Dj$7$^$9!#0J2<$N(B 2 $B9T$N8z2L$OF1$8$K$J$j$^$9(B:</p>
-
-<example>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-
- <p>$B$=$NB>$NNc(B:</p>
-<example>
- BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
- BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
- BrowserMatch MSIE !javascript<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>BrowserMatchNoCase</name>
-<description>HTTP User-Agent $B$K4p$E$$$FBgJ8;z>.J8;z$r6hJL$;$:$K(B
-$B4D6-JQ?t$r@_Dj$9$k(B</description>
-<syntax>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.2 $B0J9_(B
- (Apache 1.2 $B$G$O$3$N%G%#%l%/%F%#%V$O$b$&MQ$$$i$l$F$$$J$$(B
- mod_browser $B%b%8%e!<%k$K$"$j$^$7$?(B)</compatibility>
-
-<usage>
-
- <p><directive>BrowserMatchNoCase</directive> $B%G%#%l%/%F%#%V$O(B
- $B0UL#E*$K$O(B <directive
- module="mod_setenvif">BrowserMatch</directive> $B%G%#%l%/%F%#%V$H(B
- $BF1$8$G$9!#$?$@$7!"$3$N%G%#%l%/%F%#%V$OBgJ8;z>.J8;z$r6hJL$7$J$$(B
- $B%^%C%A%s%0$r9T$J$$$^$9!#Nc$($P(B:</p>
-
-<example>
- BrowserMatchNoCase mac platform=macintosh<br />
- BrowserMatchNoCase win platform=windows<br />
-</example>
-
- <p><directive>BrowserMatch</directive> $B%G%#%l%/%F%#%V$H(B
- <directive>BrowserMatchNoCase</directive> $B%G%#%l%/%F%#%V$O(B
- <directive module="mod_setenvif">SetEnvIf</directive> $B%G%#%l%/%F%#%V$H(B
- <directive
- module="mod_setenvif">SetEnvIfNoCase</directive> $B%G%#%l%/%F%#%V$N(B
- $BFCNc$G$9!#0J2<$N(B 2 $B9T$N8z2L$OF1$8$G$9(B:</p>
-
-<example>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIf</name>
-<description>$B%j%/%(%9%H$NB0@-$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k(B
-</description>
-<syntax>SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>SetEnvIf</directive>
- $B%G%#%l%/%F%#%V$O!"%j%/%(%9%H$NB0@-$K4p$E$$$F4D6-JQ?t$rDj5A$7$^$9!#(B
- $B:G=i$N0z?t$G;XDj$G$-$k(B <em>attribute</em> $B$O0J2<$N;0$D$N$I$l$+$G$9(B:</p>
-
-<ol>
-<li>HTTP $B%j%/%(%9%H%X%C%@%U%#!<%k%I(B ($B>\$7$$>pJs$O(B <a
- href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a> $B$r(B
- $B;2>H$7$F$/$@$5$$(B)$B!#Nc$($P!"(B<code>Host</code>,
- <code>User-Agent</code>, <code>Referer</code>,
- <code>Accept-Language</code> $B$G$9!#%j%/%(%9%H%X%C%@$N=89g$r8=$9$?$a$K(B
- $B@55,I=8=$r;H$&$3$H$b$G$-$^$9!#(B</li>
-
-<li>$B0J2<$N%j%/%(%9%H$N0lItJ,$N$I$l$+(B:
-
- <ul>
- <li><code>Remote_Host</code> -
- $B%j%/%(%9%H$r9T$J$C$F$$$k%/%i%$%"%s%H$N%[%9%HL>(B ($B$b$7$"$l$P(B)</li>
-
- <li><code>Remote_Addr</code> -
- $B%j%/%(%9%H$r9T$J$C$F$$$k%/%i%$%"%s%H$N(B IP $B%"%I%l%9(B</li>
-
- <li><code>Server_Addr</code> -
- $B%j%/%(%9%H$r<u$1<h$C$?%5!<%P$N(B IP $B%"%I%l%9(B
- (2.0.43 $B0J9_$N$_(B)</li>
-
- <li><code>Request_Method</code> -
- $B;HMQ$5$l$F$$$k%a%=%C%IL>(B (<code>GET</code>, <code>POST</code>
- <em>$B$J$I(B</em>)</li>
-
- <li><code>Request_Protocol</code> -
- $B%j%/%(%9%H$,9T$J$o$l$?%W%m%H%3%k$NL>A0$H%P!<%8%g%s(B
- (<em>$BNc$($P(B</em>$B!"(B"HTTP/0.9", "HTTP/1.1" <em>$B$J$I!#(B</em>)</li>
-
- <li><code>Request_URI</code> -
- URL $B$N%9%-!<%`$H%[%9%H$N8e$NItJ,(B</li>
- </ul>
-</li>
-
-<li>$B%j%/%(%9%H$H4XO"IU$1$i$l$k4D6-JQ?t$N%j%9%H!#$3$l$K$h$j(B
-<directive>SetEnvIf</directive> $B%G%#%l%/%F%#%V$,0JA0$N%^%C%A$N7k2L$r(B
-$B;H$&$3$H$,$G$-$k$h$&$K$J$j$^$9!#$3$NJ}K!$N%F%9%H$G$OA0$NItJ,$K$"$k(B
-<code>SetEnvIf[NoCase]</code> $B$N7k2L$N$_$r;HMQ2DG=$G$9!#!VA0!W$H$O!"(B
-$B$h$j9-$$HO0O$KBP$7$FDj5A$5$l$F$$$k(B ($B%5!<%PA4BN$N$h$&$K(B) $B$+!"8=:_$N%G%#%l%/%F%#%V$N(B
-$BHO0O$G$h$jA0$NItJ,$GDj5A$5$l$F$$$k$+!"$H$$$&$3$H$G$9!#(B
-$B4D6-JQ?t$G$"$k2DG=@-$O!"%j%/%(%9%H$NFC@-$KBP$9$k%^%C%A$,B8:_$;$:!"(B
-<em>attribute</em> $B$K@55,I=8=$,;H$o$l$J$+$C$?$H$-$K$N$_9MN8$5$l$^$9!#(B</li>
-</ol>
-
-<p>$BFs$DL\$N0z?t(B (<em>regex</em>) $B$O(B <a
-href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B</a>$B$G$9!#(B
-$B$3$l$O(B POSIX.2 $B$N(B egrep $B7A<0$N@55,I=8=$H;w$F$$$^$9!#(B<em>regex</em> $B$,(B
-<em>attribute</em> $B$K%^%C%A$9$k>l9g$O!";D$j$N0z?t$,I>2A$5$l$^$9!#(B</p>
-
-<p>$B;D$j$N0z?t$O@_Dj$9$kJQ?t$NL>A0$G!"@_Dj$5$l$kCM$r;XDj$9$k$3$H$b$G$-$^$9!#(B
-$B$3$l$O!"(B</p>
-
- <ol>
- <li><code><em>varname</em></code></li>
-
- <li><code>!<em>varname</em></code></li>
-
- <li><code><em>varname</em>=<em>value</em></code></li>
- </ol>
-
- <p>$B$N$I$l$+$N7A<0$K$J$j$^$9!#(B</p>
-
- <p>$B:G=i$N7A<0$G$O!"CM$O(B "1" $B$K@_Dj$5$l$^$9!#(B
- $BFs$DL\$O$b$7CM$,Dj5A$5$l$F$$$l$P$=$l$r<h$j=|$-$^$9!#(B
- $B;0$DL\$OJQ?t$r(B <code><em>value</em></code> $B$NM?$($i$l$?CM$K@_Dj$7$^$9!#(B
- 2.1 $B0J9_$G$O!"(B<var>regex</var> $BFb$K(B <code>$1</code>..<code>$9</code>
- $B$,B8:_$9$l$P$=$l$rG'<1$7!"(B<var>regex</var> $B$NBP1~$9$k4]3g8L$G0O$^$l$?ItJ,$G(B
- $BCV49$7$^$9!#(B</p>
-
-<example>
-<title>$BNc(B:</title>
- SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
- SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
- SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
- :<br />
- SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
- :<br />
- SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
- :<br />
- SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
-</example>
-
- <p>$B=i$a$N;0$D$O%j%/%(%9%H$,2hA|$G$"$k$H$-$K4D6-JQ?t(B
- <code>object_is_image</code> $B$r@_Dj$7$^$9!#;M$DL\$O(B
- $B;2>H85$N%Z!<%8$,%&%'%V%5%$%H(B <code>www.mydomain.com</code> $B$K$"$k$H$-$K(B
- <code>intra_site_referral</code> $B$r@_Dj$7$^$9!#(B</p>
-
- <p>$B:G8e$NNc$O!"%j%/%(%9%H$K(B "TS" $B$G;O$^$j!"CM$,=89g(B [a-z] $B$N$I$l$+$G(B
- $B;O$^$k%X%C%@$,$"$k$H$-$K(B <code>HAVE_TS</code> $B$r@_Dj$7$^$9!#(B</p>
-</usage>
-
-<seealso>$BB>$NNc$O!"(B<a href="../env.html">Apache $B$N4D6-JQ?t(B</a>
-</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIfNoCase</name>
-<description>$B%j%/%(%9%H$NB0@-$K4p$E$$$FBgJ8;z>.J8;z$r6hJL$;$:$K4D6-JQ?t$r@_Dj$9$k(B</description>
-<syntax>SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.3 $B0J9_(B</compatibility>
-
-<usage>
-
- <p><directive>SetEnvIfNoCase</directive> $B$O0UL#E*$K$O(B
- <directive module="mod_setenvif">SetEnvIf</directive> $B%G%#%l%/%F%#%V$H(B
- $BF1$8$G$9!#0c$$$O!"@55,I=8=$N%^%C%A%s%0$,BgJ8;z>.J8;z$r6hJL$7$J$$$G(B
- $B9T$J$o$l$k$3$H$G$9!#Nc$($P(B:</p>
-
-<example>
- SetEnvIfNoCase Host Apache\.Org site=apache
-</example>
-
- <p>$B$3$l$O(B HTTP $B%j%/%(%9%H%X%C%@$K%U%#!<%k%I(B <code>Host:</code> $B$,(B
- $B$"$j!"$=$NCM$,(B <code>Apache.Org</code> $B$d(B <code>apache.org</code>$B!"(B
- $B$=$NB>$NBgJ8;z>.J8;z$NAH$_9g$o$;$G$"$C$?$H$-$K(B <code>site</code>
- $B4D6-JQ?t$r(B "<code>apache</code>" $B$K@_Dj$7$^$9!#(B</p>
-
-</usage>
-</directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_setenvif.xml.ko b/docs/manual/mod/mod_setenvif.xml.ko
deleted file mode 100644
index f95ec81aa4..0000000000
--- a/docs/manual/mod/mod_setenvif.xml.ko
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_setenvif.xml.meta">
-
-<name>mod_setenvif</name>
-<description>¿äûÀÇ ¼º°Ý¿¡ µû¶ó ȯ°æº¯¼ö ¼³Á¤À» º¯°æÇÑ´Ù</description>
-<status>Base</status>
-<sourcefile>mod_setenvif.c</sourcefile>
-<identifier>setenvif_module</identifier>
-
-
-<summary>
-
- <p><module>mod_setenvif</module> ¸ðµâÀº ¿äûÀÇ ¼º°ÝÀÌ
- Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ´ÂÁö ¿©ºÎ·Î ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ¼­¹öÀÇ
- ´Ù¸¥ ºÎºÐÀÌ ÇൿÀ» °áÁ¤ÇÒ¶§ ÀÌ È¯°æº¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ³ª¿À´Â ¼ø¼­´ë·Î Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù. ±×·¡¼­
- ºê¶ó¿ìÀú°¡ MSIE°¡ ¾Æ´Ï¶ó mozillaÀÎ °æ¿ì <code>netscape</code>¸¦
- ¼³Á¤ÇÏ´Â ¾Æ·¡ ¿¹¿Í °°ÀÌ ¿©·¯ Áö½Ã¾î¸¦ ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
-<example>
- BrowserMatch ^Mozilla netscape<br />
- BrowserMatch MSIE !netscape<br />
-</example>
-</summary>
-
-<seealso><a href="../env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a></seealso>
-
-<directivesynopsis>
-<name>BrowserMatch</name>
-<description>HTTP User-Agent¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</description>
-<syntax>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>BrowserMatch</directive>´Â <directive
- module="mod_setenvif">SetEnvIf</directive> Áö½Ã¾îÀÇ Æ¯º°ÇÑ
- °æ¿ì·Î, HTTP ¿äû Çì´õ <code>User-Agent</code>¿¡ µû¶ó ȯ°æº¯¼ö¸¦
- ¼³Á¤ÇÑ´Ù. ´ÙÀ½ µÎ ÁÙÀº °°´Ù:</p>
-<example>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-
- <p>Ãß°¡ ¿¹Á¦:</p>
-<example>
- BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
- BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
- BrowserMatch MSIE !javascript<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>BrowserMatchNoCase</name>
-<description>´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í User-Agent¿¡ µû¶ó ȯ°æº¯¼ö¸¦
-¼³Á¤ÇÑ´Ù</description>
-<syntax>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>¾ÆÆÄÄ¡ 1.2 ÀÌ»ó (¾ÆÆÄÄ¡ 1.2¿¡¼­ ÀÌ Áö½Ã¾î´Â ÇöÀç
- ¾ø¾îÁø mod_browser ¸ðµâ¿¡ ÀÖ¾ú´Ù)</compatibility>
-
-<usage>
-
- <p><directive>BrowserMatchNoCase</directive> Áö½Ã¾î´Â <directive
- module="mod_setenvif">BrowserMatch</directive> Áö½Ã¾î¿Í
- ÀÇ¹Ì»ó °°´Ù. ±×·¯³ª ÀÌ Áö½Ã¾î´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê´Â´Ù.
- ¿¹¸¦ µé¾î:</p>
-<example>
- BrowserMatchNoCase mac platform=macintosh<br />
- BrowserMatchNoCase win platform=windows<br />
-</example>
-
- <p><directive>BrowserMatch</directive>¿Í
- <directive>BrowserMatchNoCase</directive> Áö½Ã¾î´Â
- <directive module="mod_setenvif">SetEnvIf</directive>¿Í
- <directive module="mod_setenvif">SetEnvIfNoCase</directive>
- Áö½Ã¾îÀÇ Æ¯º°ÇÑ °æ¿ì´Ù. ´ÙÀ½ ÁÖ ÁÙÀº °°´Ù:</p>
-<example>
- BrowserMatchNoCase Robot is_a_robot<br />
- SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIf</name>
-<description>¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</description>
-<syntax>SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p><directive>SetEnvIf</directive> Áö½Ã¾î´Â ¿äûÀÇ ¼ºÁú¿¡
- µû¶ó ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÑ´Ù. ù¹ø° ¾Æ±Ô¸ÕÆ® <em>attribute</em>´Â
- ´ÙÀ½ ¼¼°¡ÁöÁß Çϳª´Ù:</p>
-
-<ol>
-<li>HTTP ¿äû Çì´õ (´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a
- href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
- Âü°í); ¿¹¸¦ µé¾î: <code>Host</code>, <code>User-Agent</code>,
- <code>Referer</code>, <code>Accept-Language</code>. Á¤±ÔÇ¥Çö½ÄÀ»
- »ç¿ëÇÏ¿© ¿©·¯ ¿äû Çì´õ¸¦ ÁöĪÇÒ ¼ö ÀÖ´Ù.</li>
-
-<li>¿äûÀÇ ´ÙÀ½ ¼ºÁúÁß Çϳª:
- <ul>
- <li><code>Remote_Host</code> - (ÀÖ´Ù¸é) ¿äûÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ
- È£½ºÆ®¸í</li>
-
- <li><code>Remote_Addr</code> - ¿äûÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò</li>
-
- <li><code>Server_Addr</code> - ¿äûÀ» ¹Þ´Â ¼­¹öÀÇ IP ÁÖ¼Ò
- (2.0.43 ¹öÀü ÀÌÈÄ¿¡¸¸)</li>
-
- <li><code>Request_Method</code> - »ç¿ëÇÑ ¸Þ½áµå À̸§
- (<code>GET</code>, <code>POST</code>, <em>µîµî</em>)</li>
-
- <li><code>Request_Protocol</code> - ¿äûÀÇ ÇÁ·ÎÅäÄÝ À̸§°ú
- ¹öÀü (<em>¿¹¸¦ µé¾î</em>, "HTTP/0.9", "HTTP/1.1", <em>µî.</em>)</li>
-
- <li><code>Request_URI</code> - HTTP ¿äû¿¡¼­ ¿äûÇÑ ÀÚ¿ø
- -- ÀϹÝÀûÀ¸·Î URL¿¡¼­ ÁúÀǹ®ÀÚ¿­À» Á¦¿ÜÇÑ ½ºÅ´(scheme)°ú
- È£½ºÆ® ÀÌÈÄ ºÎºÐ</li>
- </ul>
-</li>
-
-<li>¿äû°ú ¿¬°üµÈ ȯ°æº¯¼ö À̸§. ±×·¡¼­ <directive>SetEnvIf</directive>
-Áö½Ã¾î´Â ÀÌÀü Áö½Ã¾îÀÇ °á°ú¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù. ÀÌÀü¿¡
-<code>SetEnvIf[NoCase]</code> Áö½Ã¾î·Î Á¤ÀÇÇÑ È¯°æº¯¼ö¸¸À»
-°Ë»çÇÒ ¼ö ÀÖ´Ù. 'ÀÌÀü'À̶õ (¼­¹öÀü¿ª°ú °°ÀÌ) ´õ ³ÐÀº ¿µ¿ª ȤÀº
-Áö½Ã¾îÀÇ ÇöÀç ¿µ¿ª ÀÌÀüÀ» ¶æÇÑ´Ù. ¿äû ¼ºÁúÀÌ ¾Æ´Ï°í Á¤±ÔÇ¥Çö½ÄÀÌ
-¾Æ´Ñ <em>attribute</em>´Â ȯ°æº¯¼ö·Î Ãë±ÞÇÑ´Ù.</li>
-</ol>
-
-<p>µÎ¹ø° ¾Æ±Ô¸ÕÆ®´Â (<em>regex</em>) <a
-href="http://www.pcre.org/">Perl ȣȯ Á¤±ÔÇ¥Çö½Ä</a>ÀÌ´Ù.
-ÀÌ´Â POSIX.2 egrepÀÇ Á¤±ÔÇ¥Çö½Ä°ú ºñ½ÁÇÏ´Ù. <em>regex</em>°¡
-<em>attribute</em>¿¡ ´ëÀÀÇÏ¸é ³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®¸¦ ó¸®ÇÑ´Ù.</p>
-
-<p>³ª¸ÓÁö ¾Æ±Ô¸ÕÆ®´Â ¼³Á¤ÇÒ º¯¼ö¸í°ú (¼±ÅÃÀûÀÎ) ¼³Á¤°ªµéÀÌ´Ù.
-´ÙÀ½°ú °°Àº Çü½ÄÀÌ´Ù</p>
-
- <ol>
- <li><code><em>varname</em></code>, ȤÀº</li>
-
- <li><code>!<em>varname</em></code>, ȤÀº</li>
-
- <li><code><em>varname</em>=<em>value</em></code></li>
- </ol>
-
- <p>ù¹ø° ÇüÅ´ °ªÀ¸·Î "1"À» »ç¿ëÇÑ´Ù. µÎ¹ø° ÇüÅ´ º¯¼ö°¡
- ÀÌ¹Ì Á¤ÀÇµÈ °æ¿ì º¯¼ö¸¦ Á¦°ÅÇÏ°í, ¼¼¹ø°´Â º¯¼öÀÇ °ªÀ¸·Î
- <code><em>value</em></code>¸¦ ¼³Á¤ÇÑ´Ù. ¾ÆÆÄÄ¡ 2.1ºÎÅÍ
- <var>value</var>¿¡ ÀÖ´Â <code>$1</code>..<code>$9</code>¸¦
- <var>regex</var>ÀÇ °ýȣģ ÇÏÀ§Ç¥Çö½ÄÀ¸·Î ´ëüÇÑ´Ù.</p>
-
-<example>
-<title>¿¹Á¦:</title>
- SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
- SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
- SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
- :<br />
- SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
- :<br />
- SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
- :<br />
- SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
-</example>
-
- <p>óÀ½ ¼¼ ÁÙÀº À̹ÌÁö ÆÄÀÏÀ» ¿äûÇÑ °æ¿ì ȯ°æº¯¼ö
- <code>object_is_image</code>¸¦ ¼³Á¤ÇÑ´Ù. ³×¹ø° ÁÙÀº ÆäÀÌÁö¸¦
- <code>www.mydomain.com</code> À¥»çÀÌÆ®¿¡¼­ ÂüÁ¶ÇÑ °æ¿ì
- <code>intra_site_referral</code>À» ¼³Á¤ÇÑ´Ù.</p>
-
- <p>¸¶Áö¸· ¿¹´Â ¿äû¿¡ À̸§¿¡ "TS"·Î ½ÃÀÛÇÏ°í °ªÀÌ [a-z]
- Áß Çϳª·Î ½ÃÀÛÇÏ´Â Çì´õ°¡ ÀÖ´Â °æ¿ì ȯ°æº¯¼ö
- <code>HAVE_TS</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-</usage>
-
-<seealso><a href="../env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a>¿¡ ´õ ¸¹Àº
-¿¹Á¦°¡ ÀÖ´Ù.
-</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIfNoCase</name>
-<description>´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í ¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦
-¼³Á¤ÇÑ´Ù</description>
-<syntax>SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>¾ÆÆÄÄ¡ 1.3 ÀÌÈÄ</compatibility>
-
-<usage>
-
- <p><directive>SetEnvIfNoCase</directive>´Â Àǹ̻ó <directive
- module="mod_setenvif">SetEnvIf</directive> Áö½Ã¾î¿Í °°Áö¸¸,
- ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í Á¤±ÔÇ¥Çö½ÄÀ» ã´Â´Ù. ¿¹¸¦ µé¾î:</p>
-<example>
- SetEnvIfNoCase Host Apache\.Org site=apache
-</example>
-
- <p>ÀÌ °æ¿ì HTTP ¿äû Çì´õ <code>Host:</code>°¡
- <code>Apache.Org</code>, <code>apache.org</code> µîÀ» Æ÷ÇÔÇϸé
- <code>site</code> ȯ°æº¯¼ö¸¦ "<code>apache</code>"·Î ¼³Á¤ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_setenvif.xml.meta b/docs/manual/mod/mod_setenvif.xml.meta
deleted file mode 100644
index 60e6547df3..0000000000
--- a/docs/manual/mod/mod_setenvif.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_setenvif</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_so.html b/docs/manual/mod/mod_so.html
deleted file mode 100644
index 1053634fd3..0000000000
--- a/docs/manual/mod/mod_so.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_so.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_so.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_so.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_so.html.en b/docs/manual/mod/mod_so.html.en
deleted file mode 100644
index 91c14d4e55..0000000000
--- a/docs/manual/mod/mod_so.html.en
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_so - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_so</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_so.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_so.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_so.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Loading of executable code and
-modules into the server at start-up or restart time</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>so_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_so.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>This is a Base module (always included) on
-Windows</td></tr></table>
-<h3>Summary</h3>
-
-
- <p>On selected operating systems this module can be used to
- load modules into Apache at runtime via the <a href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
- rather than requiring a recompilation.</p>
-
- <p>On Unix, the loaded code typically comes from shared object
- files (usually with <code>.so</code> extension), on Windows
- this may either the <code>.so</code> or <code>.dll</code>
- extension.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>Apache 1.3 modules cannot be directly used
- with Apache 2.0 - the module must be modified to dynamically
- load or compile into Apache 2.0.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#loadfile">LoadFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#loadmodule">LoadModule</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#windows">Creating Loadable Modules for Windows</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="windows" id="windows">Creating Loadable Modules for Windows</a></h2>
-
- <div class="note"><h3>Note</h3>
- <p>The module name format changed for Windows
- with Apache 1.3.15 and 2.0 - the modules are now named as
- mod_foo.so</p>
-
- <p>While mod_so still loads modules with
- ApacheModuleFoo.dll names, the new naming convention is
- preferred; if you are converting your loadable module for 2.0,
- please fix the name to this 2.0 convention.</p></div>
-
- <p>The Apache module API is unchanged between the Unix and
- Windows versions. Many modules will run on Windows with no or
- little change from Unix, although others rely on aspects of the
- Unix architecture which are not present in Windows, and will
- not work.</p>
-
- <p>When a module does work, it can be added to the server in
- one of two ways. As with Unix, it can be compiled into the
- server. Because Apache for Windows does not have the
- <code>Configure</code> program of Apache for Unix, the module's
- source file must be added to the ApacheCore project file, and
- its symbols must be added to the
- <code>os\win32\modules.c</code> file.</p>
-
- <p>The second way is to compile the module as a DLL, a shared
- library that can be loaded into the server at runtime, using
- the <code><code class="directive">LoadModule</code></code>
- directive. These module DLLs can be distributed and run on any
- Apache for Windows installation, without recompilation of the
- server.</p>
-
- <p>To create a module DLL, a small change is necessary to the
- module's source file: The module record must be exported from
- the DLL (which will be created later; see below). To do this,
- add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
- Apache header files) to your module's module record definition.
- For example, if your module has:</p>
-
-<div class="example"><p><code>
- module foo_module;
-</code></p></div>
-
- <p>Replace the above with:</p>
-<div class="example"><p><code>
- module AP_MODULE_DECLARE_DATA foo_module;
-</code></p></div>
-
- <p>Note that this will only be activated on Windows, so the
- module can continue to be used, unchanged, with Unix if needed.
- Also, if you are familiar with <code>.DEF</code> files, you can
- export the module record with that method instead.</p>
-
- <p>Now, create a DLL containing your module. You will need to
- link this against the libhttpd.lib export library that is
- created when the libhttpd.dll shared library is compiled. You
- may also have to change the compiler settings to ensure that
- the Apache header files are correctly located. You can find
- this library in your server root's modules directory. It is
- best to grab an existing module .dsp file from the tree to
- assure the build environment is configured correctly, or
- alternately compare the compiler and link options to your
- .dsp.</p>
-
- <p>This should create a DLL version of your module. Now simply
- place it in the <code>modules</code> directory of your server
- root, and use the <code class="directive">LoadModule</code>
- directive to load it.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Link in the named object file or library</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>The LoadFile directive links in the named object files or
- libraries when the server is started or restarted; this is used
- to load additional code which may be required for some module
- to work. <em>Filename</em> is either an absolute path or
- relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
-
- <p>For example:</p>
-
- <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Links in the object file or library, and adds to the list
-of active modules</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_so</td></tr>
-</table>
- <p>The LoadModule directive links in the object file or library
- <em>filename</em> and adds the module structure named
- <em>module</em> to the list of active modules. <em>Module</em>
- is the name of the external variable of type
- <code>module</code> in the file, and is listed as the <a href="module-dict.html#ModuleIdentifier">Module Identifier</a>
- in the module documentation. Example:</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p>loads the named module from the modules subdirectory of the
- ServerRoot.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_so.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_so.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_so.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_so.html.ja.euc-jp b/docs/manual/mod/mod_so.html.ja.euc-jp
deleted file mode 100644
index b4cf493a28..0000000000
--- a/docs/manual/mod/mod_so.html.ja.euc-jp
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_so - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_so</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_so.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_so.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_so.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>µ¯Æ°»þ¤äºÆµ¯Æ°»þ¤Ë¼Â¹Ô¥³¡¼¥É¤È¥â¥¸¥å¡¼¥ë¤ò¥µ¡¼¥Ð¤Ë¥í¡¼¥É¤¹¤ë
-</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>so_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_so.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï Window ¤Ç¤Ï (¾ï¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë) Base
-¥â¥¸¥å¡¼¥ë¤Ç¤¹</td></tr></table>
-<h3>³µÍ×</h3>
-
-
- <p>¤¤¤¯¤Ä¤«¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥µ¡¼¥Ð¤ÎºÆ¥³¥ó¥Ñ¥¤¥ë¤ò¤¹¤ëÂå¤ï¤ê¤Ë¡¢
- ¤³¤Î¥â¥¸¥å¡¼¥ë¤ò»ÈÍѤ·¤Æ
- <a href="../dso.html">ưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È</a>
- (DSO) µ¡¹½¤Ë¤è¤ê¡¢¼Â¹Ô»þ¤Ë Apache ¤Ë¥â¥¸¥å¡¼¥ë¤òÆɤ߹þ¤Þ¤»¤ë¤³¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Unix ¾å¤Ç¤Ï¡¢Æɤ߹þ¤Þ¤ì¤ë¥³¡¼¥É¤ÏÄ̾ï¤Ï¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë
- (ÉáÄÌ <code>.so</code> ¤È¤¤¤¦³ÈÄ¥»Ò¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤¹) ¤«¤é¤Ç¤¹¡£
- Windows ¾å¤Ç¤Ï¤³¤Î¥â¥¸¥å¡¼¥ë¤Î³ÈÄ¥»Ò¤Ï <code>.so</code> ¤« <code>.dll</code>
- ¤Ç¤¹¡£</p>
-
- <div class="warning"><h3>·Ù¹ð</h3>
- <p>Apache 1.3 ¤Î¥â¥¸¥å¡¼¥ë¤òľÀÜ Apache 2.0 ¤Ç»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó
- ¡½ ¥â¥¸¥å¡¼¥ë¤Ï Apache 2.0 ÍѤËưŪ¤Ë¥í¡¼¥É¤µ¤ì¤ë¤«¡¢
- ľÀÜÁȤ߹þ¤Þ¤ì¤ë¤¿¤á¤Ë½¤Àµ¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#loadfile">LoadFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#loadmodule">LoadModule</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> Windows ÍÑ¤Î¥í¡¼¥É²Äǽ¤Ê¥â¥¸¥å¡¼¥ë¤òºîÀ®¤¹¤ë</li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2>Windows ÍÑ¤Î¥í¡¼¥É²Äǽ¤Ê¥â¥¸¥å¡¼¥ë¤òºîÀ®¤¹¤ë</h2>
-
- <div class="note"><h3>Ãí</h3>
- <p>Apache 1.3.15 ¤È 2.0 ¤È¤Ç Windows ¤Î¥â¥¸¥å¡¼¥ë̾¤Î·Á¼°¤ÏÊѹ¹¤µ¤ì¤Þ¤·¤¿
- ¡½ ¥â¥¸¥å¡¼¥ë¤Ï mod_foo.so ¤È¤¤¤¦Ì¾Á°¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</p>
-
- <p>¤Þ¤À mod_so ¤Ç ApacheModuleFoo.dll ¤È¤¤¤¦Ì¾Á°¤Î¥â¥¸¥å¡¼¥ë¤â
- ¥í¡¼¥É¤µ¤ì¤Þ¤¹¤¬¡¢¿·¤·¤¤Ì¾Á°¤ÎÉÕ¤±Êý¤ò»È¤¦Êý¤¬¹¥¤Þ¤ì¤Þ¤¹¡£¥â¥¸¥å¡¼¥ë¤ò
- 2.0 ÍѤ˰ܿ¢¤·¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢2.0 ¤Î½¬´·¤Ë¹ç¤¦¤è¤¦¤Ë̾Á°¤ò
- ½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤¡£</p></div>
-
- <p>Apache ¤Î¥â¥¸¥å¡¼¥ë API ¤Ï UNIX ¤È Windows ´Ö¤Ç¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
- ¿¤¯¤Î¥â¥¸¥å¡¼¥ë¤ÏÁ´¤¯Êѹ¹¤Ê¤·¡¢¤â¤·¤¯¤Ï´Êñ¤ÊÊѹ¹¤Ë¤è¤ê Windows
- ¤Ç¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤¿¤À¤·¡¢¤½¤ì°Ê³°¤Î Windows ¤Ë¤Ï̵¤¤ Unix
- ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¡¼¤Îµ¡Ç½¤Ë°Í¸¤·¤¿¥â¥¸¥å¡¼¥ë¤ÏÆ°ºî¤·¤Þ¤»¤ó¡£</p>
-
- <p>¥â¥¸¥å¡¼¥ë¤¬¼ÂºÝ¤ËÆ°ºî¤¹¤ë¤È¤­¤Ï¡¢
- Æó¤Ä¤ÎÊýË¡¤Î¤É¤Á¤é¤«¤Ç¥µ¡¼¥Ð¤ËÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤º¡¢Unix
- ¤ÈƱÍͤ˥µ¡¼¥Ð¤Ë¥³¥ó¥Ñ¥¤¥ë¤·¤ÆÁȤ߹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Windows
- ÍѤΠApache ¤Ï Unix ÍѤΠApache ¤Ë¤¢¤ë <code>Configure</code>
- ¥×¥í¥°¥é¥à¤¬¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¥â¥¸¥å¡¼¥ë¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò
- ApacheCore ¥×¥í¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ËÄɲä·¡¢¥·¥ó¥Ü¥ë¤ò
- <code>os\win32\modules.c</code> ¥Õ¥¡¥¤¥ë¤ËÄɲ乤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Æó¤ÄÌܤϥ⥸¥å¡¼¥ë¤ò DLL ¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëÊýË¡¤Ç¤¹¡£
- DLL ¤Ï¶¦Í­¥é¥¤¥Ö¥é¥ê¤Ç¡¢¼Â¹Ô»þ¤Ë
- <code><code class="directive">LoadModule</code></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¥µ¡¼¥Ð¤ËÆɤ߹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤é¤Î¥â¥¸¥å¡¼¥ë
- DLL ¤Ï¤½¤Î¤Þ¤ÞÇÛÉÛ¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¡¢¥µ¡¼¥Ð¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤³¤È¤Ê¤¯¡¢Windows
- ÍѤΠApache ¤Î¤¹¤Ù¤Æ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¥â¥¸¥å¡¼¥ë DLL ¤òºîÀ®¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
- ¥â¥¸¥å¡¼¥ë¤ÎºîÀ®¤Ë¾®¤µ¤ÊÊѹ¹¤ò¹Ô¤Ê¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- ¤Ä¤Þ¤ê¡¢¥â¥¸¥å¡¼¥ë¤Î¥ì¥³¡¼¥É (¤³¤ì¤Ï¸å¤ÇºîÀ®¤µ¤ì¤Þ¤¹¡£
- °Ê²¼¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤) ¤¬ DLL ¤«¤é¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤ì¤ò¹Ô¤Ê¤¦¤Ë¤Ï¡¢<code>AP_MODULE_DECLARE_DATA</code> (Apache
- ¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹) ¤ò¥â¥¸¥å¡¼¥ë¤Î¥â¥¸¥å¡¼¥ë¥ì¥³¡¼¥É
- ÄêµÁ¤ÎÉôʬ¤ËÄɲ䷤Ƥ¯¤À¤µ¤¤¡£¤¿¤È¤¨¤Ð¡¢¥â¥¸¥å¡¼¥ë¤Ë</p>
-<div class="example"><p><code>
- module foo_module;
-</code></p></div>
-
- <p>¤¬¤¢¤ë¤È¤¹¤ë¤È¡¢¤½¤ì¤ò¼¡¤Î¤â¤Î¤ÇÃÖ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£</p>
-<div class="example"><p><code>
- module AP_MODULE_DECLARE_DATA foo_module;
-</code></p></div>
-
- <p>Unix ¾å¤Ç¤â¤³¤Î¥â¥¸¥å¡¼¥ë¤ò
- Êѹ¹Ìµ¤·¤Ç»È¤¤Â³¤±¤é¤ì¤ë¤è¤¦¤Ë¡¢¤³¤Î¥Þ¥¯¥í¤Ï Windows
- ¾å¤Ç¤Î¤ß¸úÎϤò»ý¤Á¤Þ¤¹¡£<code>.DEF</code>
- ¥Õ¥¡¥¤¥ë¤ÎÊý¤òÎɤ¯ÃΤäƤ¤¤ë¤È¤¤¤¦¾ì¹ç¤Ï¡¢
- Âå¤ï¤ê¤Ë¤½¤ì¤ò»È¤Ã¤Æ¥â¥¸¥å¡¼¥ë¥ì¥³¡¼¥É¤ò
- ¥¨¥¯¥¹¥Ý¡¼¥È¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
- <p>¤µ¤¢¡¢¤¢¤Ê¤¿¤Î¥â¥¸¥å¡¼¥ë¤Î DLL ¤òºîÀ®¤·¤Þ¤·¤ç¤¦¡£¤³¤ì¤ò¡¢
- libhttpd.lib ¶¦Í­¥é¥¤¥Ö¥é¥ê¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¤È¤­¤ËºîÀ®¤µ¤ì¤¿
- ibhttpd.lib ¥¨¥¯¥¹¥Ý¡¼¥È¥é¥¤¥Ö¥é¥ê¤È¥ê¥ó¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤Î»þ¤Ë¡¢
- Apache ¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤¬Àµ¤·¤¤°ÌÃ֤ˤ¢¤ë¤è¤¦¤Ë¡¢
- ¥³¥ó¥Ñ¥¤¥é¤ÎÀßÄê¤òÊѤ¨¤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤³¤Î¥é¥¤¥Ö¥é¥ê¤Ï¥µ¡¼¥Ð¥ë¡¼¥È¤Î modules ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ê¤Þ¤¹¡£
- ¥Ó¥ë¥É´Ä¶­¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤ë¤è¤¦¤Ë¡¢´û¸¤Î¥â¥¸¥å¡¼¥ëÍѤΠ.dsp ¤ò
- ¼è¤Ã¤Æ¤¯¤ë¤Î¤¬°ìÈÖÎɤ¤¤Ç¤·¤ç¤¦¡£¤â¤·¤¯¤Ï¡¢¤¢¤Ê¤¿¤Î .dsp ¤È
- ¥³¥ó¥Ñ¥¤¥é¤È¥ê¥ó¥¯¤Î¥ª¥×¥·¥ç¥ó¤òÈæ³Ó¤¹¤ë¡¢¤È¤¤¤¦¤â¤Î¤Ç¤âÎɤ¤¤Ç¤¹¡£</p>
-
- <p>¤³¤ì¤Ç DLL ÈǤΥ⥸¥å¡¼¥ë¤¬ºîÀ®¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£
- ¥µ¡¼¥Ð¥ë¡¼¥È¤Î <code>modules</code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥â¥¸¥å¡¼¥ë¤òÃÖ¤¤¤Æ¡¢
- <code><code class="directive">LoadModule</code></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤ÆÆɤ߹þ¤ó¤Ç¤¯¤À¤µ¤¤¡£</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»ØÄꤵ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ä¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>LoadFile ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥µ¡¼¥Ð¤¬µ¯Æ°¤µ¤ì¤¿¤È¤­¤äºÆµ¯Æ°¤µ¤ì¤¿¤È¤­¤Ë¡¢
- »ØÄꤵ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ä¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï¥â¥¸¥å¡¼¥ë¤¬Æ°ºî¤¹¤ë¤¿¤á¤ËɬÍפˤʤ뤫¤â¤·¤ì¤Ê¤¤ÄɲäÎ
- ¥³¡¼¥É¤òÆɤ߹þ¤à¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£<em>Filename</em> ¤ÏÀäÂХѥ¹¤«¡¢<a href="core.html#serverroot">ServerRoot</a> ¤«¤é¤ÎÁêÂХѥ¹¤Ç¤¹¡£</p>
-
- <p>Îã:</p>
-
- <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ä¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·¡¢»ÈÍѥ⥸¥å¡¼¥ë¤Î
-¥ê¥¹¥È¤ËÄɲ乤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>LoadModule ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <em>filename</em>
- ¤È¤¤¤¦¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ª¤è¤Ó¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·¡¢<em>module</em>
- ¤È¤¤¤¦Ì¾Á°¤Î¥â¥¸¥å¡¼¥ë¤Î¹½Â¤¤ò¥¢¥¯¥Æ¥£¥Ö¤Ê¥â¥¸¥å¡¼¥ë¤Î¥ê¥¹¥È¤ËÄɲä·¤Þ¤¹¡£
- <em>Module</em> ¤Ï¥Õ¥¡¥¤¥ëÃæ¤Î <code>module</code>
- ·¿¤Î³°ÉôÊÑ¿ô¤Î̾Á°¤Ç¡¢¥â¥¸¥å¡¼¥ë¤Î¥É¥­¥å¥á¥ó¥È¤Ë
- <a href="module-dict.html#moduleidentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò</a>¤È¤·¤Æ½ñ¤«¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£Îã :</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p>¤³¤ì¤Ï ServerRoot ¤Î modules ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤«¤é»ØÄꤵ¤ì¤¿Ì¾Á°¤Î
- ¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_so.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_so.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_so.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_so.html.ko.euc-kr b/docs/manual/mod/mod_so.html.ko.euc-kr
deleted file mode 100644
index c710d317d3..0000000000
--- a/docs/manual/mod/mod_so.html.ko.euc-kr
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_so - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_so</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_so.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_so.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_so.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>½ÃÀÛÇÒ¶§ ȤÀº Àç½ÃÀÛÇÒ¶§ ½ÇÇà°¡´ÉÇÑ ÄÚµå¿Í ¸ðµâÀ»
-¼­¹ö·Î ÀоîµéÀδÙ</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>so_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_so.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>À©µµ¿ìÁî¿¡¼­ (Ç×»ó Æ÷ÇÔÇÏ´Â) Base ¸ðµâÀÌ´Ù.</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
- <p>¸î¸î ¿î¿µÃ¼Á¦¿¡¼­ ¾ÆÆÄÄ¡´Â <a href="../dso.html">µ¿Àû°øÀ¯°´Ã¼</a>
- (DSO) ±â¼úÀ» »ç¿ëÇÏ¿© ¼­¹ö¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê°íµµ ½ÇÇàÁß¿¡
- ¸ðµâÀ» ÀоîµéÀÏ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀоîµéÀÏ ÄÚµå´Â, À¯´Ð½º¿¡¼­´Â (<code>.so</code> È®ÀåÀÚ¸¦
- °¡Áø) ÀϹÝÀûÀÎ °øÀ¯°´Ã¼ÆÄÀÏÀÌ°í, À©µµ¿ìÁî¿¡¼­´Â <code>.so</code>
- ȤÀº <code>.dll</code> È®ÀåÀÚ¸¦ °¡Áø´Ù.</p>
-
- <div class="warning"><h3>°æ°í</h3>
- <p>¾ÆÆÄÄ¡ 1.3 ¸ðµâÀ» ¾ÆÆÄÄ¡ 2.0¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.
- ¾ÆÆÄÄ¡ 2.0ÀÌ µ¿ÀûÀ¸·Î ÀоîµéÀ̰ųª ¾ÆÆÄÄ¡¿Í °°ÀÌ ÄÄÆÄÀÏÇÏ·Á¸é
- ¸ðµâÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#loadfile">LoadFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#loadmodule">LoadModule</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#windows">À©µµ¿ìÁî¿¡¼­ ÀоîµéÀÏ ¸ðµâ ¸¸µé±â</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="windows" id="windows">À©µµ¿ìÁî¿¡¼­ ÀоîµéÀÏ ¸ðµâ ¸¸µé±â</a></h2>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p>À©µµ¿ìÁîÀÇ ¸ðµâ¸í Çü½ÄÀº ¾ÆÆÄÄ¡ 1.3.15¿Í 2.0¿¡¼­ º¯°æµÇ¾ú´Ù.
- ¸ðµâ¸íÀº ÀÌÁ¦ mod_foo.so½ÄÀÌ´Ù.</p>
-
- <p>mod_so´Â ¾ÆÁ÷µµ ApacheModuleFoo.dll ½ÄÀÇ ¸ðµâÀ» ÀоîµéÀÏ
- ¼ö ÀÖÁö¸¸, »õ·Î¿î À̸§ ±ÔÄ¢À» ¼±È£ÇÑ´Ù. ¸ðµâÀ» 2.0¿¡ ¸Â°Ô
- ¼öÁ¤ÇÑ´Ù¸é À̸§À» 2.0 ±ÔÄ¢¿¡ ¾Ë¸Â°Ô °íÄ¡±æ ¹Ù¶õ´Ù.</p></div>
-
- <p>¾ÆÆÄÄ¡ ¸ðµâ API´Â À¯´Ð½º ¹öÀüÀ̰ųª À©µµ¿ìÁî ¹öÀüÀ̰ųª
- °°´Ù. ¸î¸î API´Â À©µµ¿ìÁî¿¡ ¾ø´Â À¯´Ð½º ±¸Á¶¿¡ ÀÇÁ¸Çϱ⶧¹®¿¡
- »ç¿ëÇÒ ¼ö ¾øÁö¸¸, À¯´Ð½º¿¡¼­ ½ÇÇàµÇ´Â ¸¹Àº ¸ðµâÀ» ¼öÁ¤¾øÀÌ
- ȤÀº Á¶±Ý ¼öÁ¤ÇÏ¿© À©µµ¿ìÁî¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¸ðµâÀº µÎ°¡Áö ¹æ¹ýÀ¸·Î ¼­¹ö¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º¿¡¼­´Â
- ¸ðµâÀ» ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. À©µµ¿ìÁî¿ë ¾ÆÆÄÄ¡´Â
- À¯´Ð½º¿Í ´Þ¸® <code>Configure</code> ÇÁ·Î±×·¥ÀÌ ¾ø±â¶§¹®¿¡
- ¸ðµâÀÇ ¼Ò½ºÆÄÀÏÀ» ApacheCore ÇÁ·ÎÁ§Æ® ÆÄÀÏ¿¡ Ãß°¡ÇÏ°í, ½Éº¼À»
- <code>os\win32\modules.c</code> ÆÄÀÏ¿¡ Ãß°¡ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>µÎ¹ø° ¹æ¹ýÀº ¸ðµâÀ» ¼­¹ö°¡
- <code><code class="directive">LoadModule</code></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ½ÃÀÛÇÒ¶§ ÀоîµéÀÏ ¼ö ÀÖ´Â °øÀ¯¶óÀ̺귯¸® DLL·Î
- ¸¸µå´Â °ÍÀÌ´Ù. ÀÌ ¸ðµâ DLLÀ» ¹èÆ÷ÇÏ¸é ¼­¹ö¸¦ ÀçÄÄÆÄÀÏÇÏÁö
- ¾Ê°í ¾î¶² À©µµ¿ìÁî¿ë ¾ÆÆÄÄ¡¿¡¼­µµ ¸ðµâÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¸ðµâ DLLÀ» ¸¸µé±âÀ§Çؼ­´Â ¸ðµâÀÇ ¼Ò½ºÆÄÀÏÀ» Á¶±Ý ¼öÁ¤Çؾß
- ÇÑ´Ù. DLLÀº module record¸¦ exportÇØ¾ß ÇÑ´Ù. (¾Æ·¡ Âü°í)
- À̸¦ À§ÇØ ¸ðµâÀÇ module record Á¤ÀÇ¿¡ (¾ÆÆÄÄ¡ Çì´õÆÄÀÏ¿¡
- Á¤ÀǵÈ) <code>AP_MODULE_DECLARE_DATA</code>¸¦ Ãß°¡ÇÑ´Ù.
- ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°Àº ¸ðµâÀÌ ÀÖ´Ù¸é:</p>
-
-<div class="example"><p><code>
- module foo_module;
-</code></p></div>
-
- <p>´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù:</p>
-<div class="example"><p><code>
- module AP_MODULE_DECLARE_DATA foo_module;
-</code></p></div>
-
- <p>ÀÌ ºÎºÐÀº À©µµ¿ìÁî¿¡¼­¸¸ »ç¿ëÇϱ⶧¹®¿¡ º¯°æÇÏ¿©µµ À¯´Ð½º¿¡¼­
- ¼Ò½º¸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶Ç, <code>.DEF</code> ÆÄÀÏ¿¡
- Àͼ÷ÇÏ´Ù¸é ´ë½Å ÀÌ ÆÄÀÏÀ» »ç¿ëÇÏ¿© module record¸¦ exportÇÒ
- ¼öµµ ÀÖ´Ù.</p>
-
- <p>ÀÌÁ¦ ¸ðµâÀ» Æ÷ÇÔÇÑ DLLÀ» ¸¸µç´Ù. À̸¦ °øÀ¯¶óÀ̺귯¸®
- libhttpd.dllÀ» ÄÄÆÄÀÏÇÒ¶§ ¸¸µç libhttpd.lib export ¶óÀ̺귯¸®¿Í
- ¸µÅ©ÇÑ´Ù. ¾ÆÆÄÄ¡ Çì´õÆÄÀÏÀ» ¿Ã¹Ù·Î ãµµ·Ï ÄÄÆÄÀÏ·¯ ¼³Á¤À»
- ¼öÁ¤ÇØ¾ß ÇÒÁöµµ ¸ð¸¥´Ù. ¼­¹öÀÇ modules µð·ºÅ丮¿¡¼­ ÀÌ
- ¶óÀ̺귯¸®¸¦ ãÀ» ¼ö ÀÖ´Ù. ÄÄÆÄÀÏȯ°æÀ» ¿Ã¹Ù·Î ¼³Á¤ÇϱâÀ§ÇØ
- ±âÁ¸ ¸ðµâÀÇ .dsp ÆÄÀÏÀ» °¡Á®´Ù ¾²°Å³ª Á÷Á¢ ¸¸µç .dsp¿Í
- ÄÄÆÄÀÏ·¯/¸µÄ¿ ¿É¼ÇÀ» ºñ±³ÇÏ´Â °ÍÀÌ ÁÁ´Ù.</p>
-
- <p>ÀÌÁ¦ ¸ðµâÀ» DLL·Î ¸¸µç´Ù. ÀÌ°ÍÀ» ¼­¹öÀÇ
- <code>modules</code> µð·ºÅ丮¿¡ µÎ°í,
- <code class="directive">LoadModule</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀоîµéÀδÙ.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadFile" id="LoadFile">LoadFile</a> <a name="loadfile" id="loadfile">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>ÁöÁ¤ÇÑ ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LoadFile <em>filename</em> [<em>filename</em>] ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_so</td></tr>
-</table>
-
- <p>LoadFile Áö½Ã¾î´Â ¼­¹ö°¡ ½ÃÀÛÇϰųª Àç½ÃÀÛÇÒ¶§ ÁöÁ¤ÇÑ
- ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ(link in). ÀÌ Áö½Ã¾î´Â
- ¾î¶² ¸ðµâÀÌ µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ Äڵ带 Ãß°¡·Î ÀоîµéÀ϶§
- »ç¿ëÇÑ´Ù. <em>Filename</em>Àº Àý´ë°æ·ÎÀ̰ųª <a href="core.html#serverroot">ServerRoot</a>¿¡ ´ëÇÑ »ó´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î:</p>
-
- <div class="example"><p><code>LoadFile libexec/libxmlparse.so</code></p></div>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LoadModule" id="LoadModule">LoadModule</a> <a name="loadmodule" id="loadmodule">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ
-¸ðµâ ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>LoadModule <em>module filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_so</td></tr>
-</table>
- <p>LoadModule Áö½Ã¾î´Â ¸ñÀûÆÄÀÏ È¤Àº ¶óÀ̺귯¸® <em>filename</em>À»
- ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ ¸ðµâ ¸ñ·Ï¿¡ <em>module</em>À̶ó´Â
- ¸ðµâ ±¸Á¶Ã¼¸¦ Ãß°¡ÇÑ´Ù. <em>Module</em>Àº ÆÄÀÏÀÇ
- <code>module</code> ÀÚ·áÇü ¿ÜºÎº¯¼ö¸íÀ̸ç, ¸ðµâ ¹®¼­ÀÇ <a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í</a>¿¡
- ³ª¿Â´Ù. ¿¹¸¦ µé¸é:</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p>ServerRootÀÇ modules ÇÏÀ§µð·ºÅ丮¿¡¼­ ÁöÁ¤ÇÑ ¸ðµâÀ» ÀоîµéÀδÙ.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_so.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_so.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_so.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_so.xml b/docs/manual/mod/mod_so.xml
deleted file mode 100755
index aa8fe705ad..0000000000
--- a/docs/manual/mod/mod_so.xml
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_so.xml.meta">
-
-<name>mod_so</name>
-<description>Loading of executable code and
-modules into the server at start-up or restart time</description>
-<status>Extension</status>
-<sourcefile>mod_so.c</sourcefile>
-<identifier>so_module</identifier>
-<compatibility>This is a Base module (always included) on
-Windows</compatibility>
-
-<summary>
-
- <p>On selected operating systems this module can be used to
- load modules into Apache at runtime via the <a
- href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
- rather than requiring a recompilation.</p>
-
- <p>On Unix, the loaded code typically comes from shared object
- files (usually with <code>.so</code> extension), on Windows
- this may either the <code>.so</code> or <code>.dll</code>
- extension.</p>
-
- <note type="warning"><title>Warning</title>
- <p>Apache 1.3 modules cannot be directly used
- with Apache 2.0 - the module must be modified to dynamically
- load or compile into Apache 2.0.</p>
- </note>
-</summary>
-
-<section id="windows"><title>Creating Loadable Modules for Windows</title>
-
- <note><title>Note</title>
- <p>The module name format changed for Windows
- with Apache 1.3.15 and 2.0 - the modules are now named as
- mod_foo.so</p>
-
- <p>While mod_so still loads modules with
- ApacheModuleFoo.dll names, the new naming convention is
- preferred; if you are converting your loadable module for 2.0,
- please fix the name to this 2.0 convention.</p></note>
-
- <p>The Apache module API is unchanged between the Unix and
- Windows versions. Many modules will run on Windows with no or
- little change from Unix, although others rely on aspects of the
- Unix architecture which are not present in Windows, and will
- not work.</p>
-
- <p>When a module does work, it can be added to the server in
- one of two ways. As with Unix, it can be compiled into the
- server. Because Apache for Windows does not have the
- <code>Configure</code> program of Apache for Unix, the module's
- source file must be added to the ApacheCore project file, and
- its symbols must be added to the
- <code>os\win32\modules.c</code> file.</p>
-
- <p>The second way is to compile the module as a DLL, a shared
- library that can be loaded into the server at runtime, using
- the <code><directive>LoadModule</directive></code>
- directive. These module DLLs can be distributed and run on any
- Apache for Windows installation, without recompilation of the
- server.</p>
-
- <p>To create a module DLL, a small change is necessary to the
- module's source file: The module record must be exported from
- the DLL (which will be created later; see below). To do this,
- add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
- Apache header files) to your module's module record definition.
- For example, if your module has:</p>
-
-<example>
- module foo_module;
-</example>
-
- <p>Replace the above with:</p>
-<example>
- module AP_MODULE_DECLARE_DATA foo_module;
-</example>
-
- <p>Note that this will only be activated on Windows, so the
- module can continue to be used, unchanged, with Unix if needed.
- Also, if you are familiar with <code>.DEF</code> files, you can
- export the module record with that method instead.</p>
-
- <p>Now, create a DLL containing your module. You will need to
- link this against the libhttpd.lib export library that is
- created when the libhttpd.dll shared library is compiled. You
- may also have to change the compiler settings to ensure that
- the Apache header files are correctly located. You can find
- this library in your server root's modules directory. It is
- best to grab an existing module .dsp file from the tree to
- assure the build environment is configured correctly, or
- alternately compare the compiler and link options to your
- .dsp.</p>
-
- <p>This should create a DLL version of your module. Now simply
- place it in the <code>modules</code> directory of your server
- root, and use the <directive>LoadModule</directive>
- directive to load it.</p>
-
-</section>
-
-<directivesynopsis>
-<name>LoadFile</name>
-<description>Link in the named object file or library</description>
-<syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-
- <p>The LoadFile directive links in the named object files or
- libraries when the server is started or restarted; this is used
- to load additional code which may be required for some module
- to work. <em>Filename</em> is either an absolute path or
- relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
-
- <p>For example:</p>
-
- <example>LoadFile libexec/libxmlparse.so</example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LoadModule</name>
-<description>Links in the object file or library, and adds to the list
-of active modules</description>
-<syntax>LoadModule <em>module filename</em></syntax>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
- <p>The LoadModule directive links in the object file or library
- <em>filename</em> and adds the module structure named
- <em>module</em> to the list of active modules. <em>Module</em>
- is the name of the external variable of type
- <code>module</code> in the file, and is listed as the <a
- href="module-dict.html#ModuleIdentifier">Module Identifier</a>
- in the module documentation. Example:</p>
-
- <example>
- LoadModule status_module modules/mod_status.so
- </example>
-
- <p>loads the named module from the modules subdirectory of the
- ServerRoot.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_so.xml.ja b/docs/manual/mod/mod_so.xml.ja
deleted file mode 100644
index c21d34a9a5..0000000000
--- a/docs/manual/mod/mod_so.xml.ja
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_so.xml.meta">
-
-<name>mod_so</name>
-<description>$B5/F0;~$d:F5/F0;~$K<B9T%3!<%I$H%b%8%e!<%k$r%5!<%P$K%m!<%I$9$k(B
-</description>
-<status>Extension</status>
-<sourcefile>mod_so.c</sourcefile>
-<identifier>so_module</identifier>
-<compatibility>$B$3$N%b%8%e!<%k$O(B Window $B$G$O(B ($B>o$K4^$^$l$F$$$k(B) Base
-$B%b%8%e!<%k$G$9(B</compatibility>
-
-<summary>
-
- <p>$B$$$/$D$+$N%*%Z%l!<%F%#%s%0%7%9%F%`$G$O!"%5!<%P$N:F%3%s%Q%$%k$r$9$kBe$o$j$K!"(B
- $B$3$N%b%8%e!<%k$r;HMQ$7$F(B
- <a href="../dso.html">$BF0E*6&M-%*%V%8%'%/%H(B</a>
- (DSO) $B5!9=$K$h$j!"<B9T;~$K(B Apache $B$K%b%8%e!<%k$rFI$_9~$^$;$k$3$H$,(B
- $B$G$-$^$9!#(B</p>
-
- <p>Unix $B>e$G$O!"FI$_9~$^$l$k%3!<%I$ODL>o$O6&M-%*%V%8%'%/%H%U%!%$%k(B
- ($BIaDL(B <code>.so</code> $B$H$$$&3HD%;R$,IU$$$F$$$^$9(B) $B$+$i$G$9!#(B
- Windows $B>e$G$O$3$N%b%8%e!<%k$N3HD%;R$O(B <code>.so</code> $B$+(B <code>.dll</code>
- $B$G$9!#(B</p>
-
- <note type="warning"><title>$B7Y9p(B</title>
- <p>Apache 1.3 $B$N%b%8%e!<%k$rD>@\(B Apache 2.0 $B$G;H$&$3$H$O$G$-$^$;$s(B
- $B!=(B $B%b%8%e!<%k$O(B Apache 2.0 $BMQ$KF0E*$K%m!<%I$5$l$k$+!"(B
- $BD>@\AH$_9~$^$l$k$?$a$K=$@5$5$l$J$1$l$P$J$j$^$;$s!#(B</p>
- </note>
-</summary>
-
-<section><title>Windows $BMQ$N%m!<%I2DG=$J%b%8%e!<%k$r:n@.$9$k(B</title>
-
- <note><title>$BCm(B</title>
- <p>Apache 1.3.15 $B$H(B 2.0 $B$H$G(B Windows $B$N%b%8%e!<%kL>$N7A<0$OJQ99$5$l$^$7$?(B
- $B!=(B $B%b%8%e!<%k$O(B mod_foo.so $B$H$$$&L>A0$K$J$j$^$7$?!#(B</p>
-
- <p>$B$^$@(B mod_so $B$G(B ApacheModuleFoo.dll $B$H$$$&L>A0$N%b%8%e!<%k$b(B
- $B%m!<%I$5$l$^$9$,!"?7$7$$L>A0$NIU$1J}$r;H$&J}$,9%$^$l$^$9!#%b%8%e!<%k$r(B
- 2.0 $BMQ$K0\?"$7$F$$$k$N$G$"$l$P!"(B2.0 $B$N=,47$K9g$&$h$&$KL>A0$r(B
- $B=$@5$7$F$/$@$5$$!#(B</p></note>
-
- <p>Apache $B$N%b%8%e!<%k(B API $B$O(B UNIX $B$H(B Windows $B4V$G$OJQ99$5$l$F$$$^$;$s!#(B
- $BB?$/$N%b%8%e!<%k$OA4$/JQ99$J$7!"$b$7$/$O4JC1$JJQ99$K$h$j(B Windows
- $B$G<B9T$G$-$k$h$&$K$J$j$^$9!#$?$@$7!"$=$l0J30$N(B Windows $B$K$OL5$$(B Unix
- $B%"!<%-%F%/%A%c!<$N5!G=$K0MB8$7$?%b%8%e!<%k$OF0:n$7$^$;$s!#(B</p>
-
- <p>$B%b%8%e!<%k$,<B:]$KF0:n$9$k$H$-$O!"(B
- $BFs$D$NJ}K!$N$I$A$i$+$G%5!<%P$KDI2C$9$k$3$H$,$G$-$^$9!#$^$:!"(BUnix
- $B$HF1MM$K%5!<%P$K%3%s%Q%$%k$7$FAH$_9~$`$3$H$,$G$-$^$9!#(BWindows
- $BMQ$N(B Apache $B$O(B Unix $BMQ$N(B Apache $B$K$"$k(B <code>Configure</code>
- $B%W%m%0%i%`$,$"$j$^$;$s$N$G!"%b%8%e!<%k$N%=!<%9%U%!%$%k$r(B
- ApacheCore $B%W%m%8%'%/%H%U%!%$%k$KDI2C$7!"%7%s%\%k$r(B
- <code>os\win32\modules.c</code> $B%U%!%$%k$KDI2C$9$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>$BFs$DL\$O%b%8%e!<%k$r(B DLL $B$H$7$F%3%s%Q%$%k$9$kJ}K!$G$9!#(B
- DLL $B$O6&M-%i%$%V%i%j$G!"<B9T;~$K(B
- <code><directive>LoadModule</directive></code>
- $B%G%#%l%/%F%#%V$K$h$j%5!<%P$KFI$_9~$`$3$H$,$G$-$^$9!#$3$l$i$N%b%8%e!<%k(B
- DLL $B$O$=$N$^$^G[I[$9$k$3$H$,2DG=$G!"%5!<%P$r:F%3%s%Q%$%k$9$k$3$H$J$/!"(BWindows
- $BMQ$N(B Apache $B$N$9$Y$F$N%$%s%9%H!<%k$G<B9T$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B%b%8%e!<%k(B DLL $B$r:n@.$9$k$?$a$K$O!"(B
- $B%b%8%e!<%k$N:n@.$K>.$5$JJQ99$r9T$J$&I,MW$,$"$j$^$9!#(B
- $B$D$^$j!"%b%8%e!<%k$N%l%3!<%I(B ($B$3$l$O8e$G:n@.$5$l$^$9!#(B
- $B0J2<$r;2>H$7$F$/$@$5$$(B) $B$,(B DLL $B$+$i%(%/%9%]!<%H$5$l$J$1$l$P$J$j$^$;$s!#(B
- $B$3$l$r9T$J$&$K$O!"(B<code>AP_MODULE_DECLARE_DATA</code> (Apache
- $B$N%X%C%@%U%!%$%k$GDj5A$5$l$F$$$^$9(B) $B$r%b%8%e!<%k$N%b%8%e!<%k%l%3!<%I(B
- $BDj5A$NItJ,$KDI2C$7$F$/$@$5$$!#$?$H$($P!"%b%8%e!<%k$K(B</p>
-<example>
- module foo_module;
-</example>
-
- <p>$B$,$"$k$H$9$k$H!"$=$l$r<!$N$b$N$GCV$-49$($F$/$@$5$$!#(B</p>
-<example>
- module AP_MODULE_DECLARE_DATA foo_module;
-</example>
-
- <p>Unix $B>e$G$b$3$N%b%8%e!<%k$r(B
- $BJQ99L5$7$G;H$$B3$1$i$l$k$h$&$K!"$3$N%^%/%m$O(B Windows
- $B>e$G$N$_8zNO$r;}$A$^$9!#(B<code>.DEF</code>
- $B%U%!%$%k$NJ}$rNI$/CN$C$F$$$k$H$$$&>l9g$O!"(B
- $BBe$o$j$K$=$l$r;H$C$F%b%8%e!<%k%l%3!<%I$r(B
- $B%(%/%9%]!<%H$9$k$3$H$b$G$-$^$9!#(B</p>
- <p>$B$5$"!"$"$J$?$N%b%8%e!<%k$N(B DLL $B$r:n@.$7$^$7$g$&!#$3$l$r!"(B
- libhttpd.lib $B6&M-%i%$%V%i%j$,%3%s%Q%$%k$5$l$?$H$-$K:n@.$5$l$?(B
- ibhttpd.lib $B%(%/%9%]!<%H%i%$%V%i%j$H%j%s%/$7$F$/$@$5$$!#$3$N;~$K!"(B
- Apache $B$N%X%C%@%U%!%$%k$,@5$7$$0LCV$K$"$k$h$&$K!"(B
- $B%3%s%Q%$%i$N@_Dj$rJQ$($kI,MW$,$"$k$+$b$7$l$^$;$s!#(B
- $B$3$N%i%$%V%i%j$O%5!<%P%k!<%H$N(B modules $B%G%#%l%/%H%j$K$"$j$^$9!#(B
- $B%S%k%I4D6-$,@5$7$/@_Dj$5$l$k$h$&$K!"4{B8$N%b%8%e!<%kMQ$N(B .dsp $B$r(B
- $B<h$C$F$/$k$N$,0lHVNI$$$G$7$g$&!#$b$7$/$O!"$"$J$?$N(B .dsp $B$H(B
- $B%3%s%Q%$%i$H%j%s%/$N%*%W%7%g%s$rHf3S$9$k!"$H$$$&$b$N$G$bNI$$$G$9!#(B</p>
-
- <p>$B$3$l$G(B DLL $BHG$N%b%8%e!<%k$,:n@.$5$l$F$$$k$O$:$G$9!#(B
- $B%5!<%P%k!<%H$N(B <code>modules</code>
- $B%G%#%l%/%H%j$K%b%8%e!<%k$rCV$$$F!"(B
- <code><directive>LoadModule</directive></code>
- $B%G%#%l%/%F%#%V$r;H$C$FFI$_9~$s$G$/$@$5$$!#(B</p>
-</section>
-
-<directivesynopsis>
-<name>LoadFile</name>
-<description>$B;XDj$5$l$?%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$9$k(B</description>
-<syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-
- <p>LoadFile $B%G%#%l%/%F%#%V$O!"%5!<%P$,5/F0$5$l$?$H$-$d:F5/F0$5$l$?$H$-$K!"(B
- $B;XDj$5$l$?%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$7$^$9!#(B
- $B$3$l$O%b%8%e!<%k$,F0:n$9$k$?$a$KI,MW$K$J$k$+$b$7$l$J$$DI2C$N(B
- $B%3!<%I$rFI$_9~$`$?$a$K;HMQ$5$l$^$9!#(B<em>Filename</em> $B$O@dBP%Q%9$+!"(B<a
- href="core.html#serverroot">ServerRoot</a> $B$+$i$NAjBP%Q%9$G$9!#(B</p>
-
- <p>$BNc(B:</p>
-
- <example>LoadFile libexec/libxmlparse.so</example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LoadModule</name>
-<description>$B%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$7!";HMQ%b%8%e!<%k$N(B
-$B%j%9%H$KDI2C$9$k(B</description>
-<syntax>LoadModule <em>module filename</em></syntax>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-
- <p>LoadModule $B%G%#%l%/%F%#%V$O(B <em>filename</em>
- $B$H$$$&%*%V%8%'%/%H%U%!%$%k$*$h$S%i%$%V%i%j$r%j%s%/$7!"(B<em>module</em>
- $B$H$$$&L>A0$N%b%8%e!<%k$N9=B$$r%"%/%F%#%V$J%b%8%e!<%k$N%j%9%H$KDI2C$7$^$9!#(B
- <em>Module</em> $B$O%U%!%$%kCf$N(B <code>module</code>
- $B7?$N30ItJQ?t$NL>A0$G!"%b%8%e!<%k$N%I%-%e%a%s%H$K(B
- <a href="module-dict.html#moduleidentifier"
- >$B%b%8%e!<%k<1JL;R(B</a>$B$H$7$F=q$+$l$F$$$k$b$N$G$9!#Nc(B :</p>
-
- <example>
- LoadModule status_module modules/mod_status.so
- </example>
-
- <p>$B$3$l$O(B ServerRoot $B$N(B modules $B%5%V%G%#%l%/%H%j$+$i;XDj$5$l$?L>A0$N(B
- $B%b%8%e!<%k$r%m!<%I$7$^$9!#(B</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_so.xml.ko b/docs/manual/mod/mod_so.xml.ko
deleted file mode 100644
index 32676cc9f2..0000000000
--- a/docs/manual/mod/mod_so.xml.ko
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_so.xml.meta">
-
-<name>mod_so</name>
-<description>½ÃÀÛÇÒ¶§ ȤÀº Àç½ÃÀÛÇÒ¶§ ½ÇÇà°¡´ÉÇÑ ÄÚµå¿Í ¸ðµâÀ»
-¼­¹ö·Î ÀоîµéÀδÙ</description>
-<status>Extension</status>
-<sourcefile>mod_so.c</sourcefile>
-<identifier>so_module</identifier>
-<compatibility>À©µµ¿ìÁî¿¡¼­ (Ç×»ó Æ÷ÇÔÇÏ´Â) Base ¸ðµâÀÌ´Ù.</compatibility>
-
-<summary>
-
- <p>¸î¸î ¿î¿µÃ¼Á¦¿¡¼­ ¾ÆÆÄÄ¡´Â <a href="../dso.html">µ¿Àû°øÀ¯°´Ã¼</a>
- (DSO) ±â¼úÀ» »ç¿ëÇÏ¿© ¼­¹ö¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê°íµµ ½ÇÇàÁß¿¡
- ¸ðµâÀ» ÀоîµéÀÏ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀоîµéÀÏ ÄÚµå´Â, À¯´Ð½º¿¡¼­´Â (<code>.so</code> È®ÀåÀÚ¸¦
- °¡Áø) ÀϹÝÀûÀÎ °øÀ¯°´Ã¼ÆÄÀÏÀÌ°í, À©µµ¿ìÁî¿¡¼­´Â <code>.so</code>
- ȤÀº <code>.dll</code> È®ÀåÀÚ¸¦ °¡Áø´Ù.</p>
-
- <note type="warning"><title>°æ°í</title>
- <p>¾ÆÆÄÄ¡ 1.3 ¸ðµâÀ» ¾ÆÆÄÄ¡ 2.0¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.
- ¾ÆÆÄÄ¡ 2.0ÀÌ µ¿ÀûÀ¸·Î ÀоîµéÀ̰ųª ¾ÆÆÄÄ¡¿Í °°ÀÌ ÄÄÆÄÀÏÇÏ·Á¸é
- ¸ðµâÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
- </note>
-</summary>
-
-<section id="windows"><title>À©µµ¿ìÁî¿¡¼­ ÀоîµéÀÏ ¸ðµâ ¸¸µé±â</title>
-
- <note><title>ÁÖÀÇ</title>
- <p>À©µµ¿ìÁîÀÇ ¸ðµâ¸í Çü½ÄÀº ¾ÆÆÄÄ¡ 1.3.15¿Í 2.0¿¡¼­ º¯°æµÇ¾ú´Ù.
- ¸ðµâ¸íÀº ÀÌÁ¦ mod_foo.so½ÄÀÌ´Ù.</p>
-
- <p>mod_so´Â ¾ÆÁ÷µµ ApacheModuleFoo.dll ½ÄÀÇ ¸ðµâÀ» ÀоîµéÀÏ
- ¼ö ÀÖÁö¸¸, »õ·Î¿î À̸§ ±ÔÄ¢À» ¼±È£ÇÑ´Ù. ¸ðµâÀ» 2.0¿¡ ¸Â°Ô
- ¼öÁ¤ÇÑ´Ù¸é À̸§À» 2.0 ±ÔÄ¢¿¡ ¾Ë¸Â°Ô °íÄ¡±æ ¹Ù¶õ´Ù.</p></note>
-
- <p>¾ÆÆÄÄ¡ ¸ðµâ API´Â À¯´Ð½º ¹öÀüÀ̰ųª À©µµ¿ìÁî ¹öÀüÀ̰ųª
- °°´Ù. ¸î¸î API´Â À©µµ¿ìÁî¿¡ ¾ø´Â À¯´Ð½º ±¸Á¶¿¡ ÀÇÁ¸Çϱ⶧¹®¿¡
- »ç¿ëÇÒ ¼ö ¾øÁö¸¸, À¯´Ð½º¿¡¼­ ½ÇÇàµÇ´Â ¸¹Àº ¸ðµâÀ» ¼öÁ¤¾øÀÌ
- ȤÀº Á¶±Ý ¼öÁ¤ÇÏ¿© À©µµ¿ìÁî¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¸ðµâÀº µÎ°¡Áö ¹æ¹ýÀ¸·Î ¼­¹ö¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º¿¡¼­´Â
- ¸ðµâÀ» ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. À©µµ¿ìÁî¿ë ¾ÆÆÄÄ¡´Â
- À¯´Ð½º¿Í ´Þ¸® <code>Configure</code> ÇÁ·Î±×·¥ÀÌ ¾ø±â¶§¹®¿¡
- ¸ðµâÀÇ ¼Ò½ºÆÄÀÏÀ» ApacheCore ÇÁ·ÎÁ§Æ® ÆÄÀÏ¿¡ Ãß°¡ÇÏ°í, ½Éº¼À»
- <code>os\win32\modules.c</code> ÆÄÀÏ¿¡ Ãß°¡ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>µÎ¹ø° ¹æ¹ýÀº ¸ðµâÀ» ¼­¹ö°¡
- <code><directive>LoadModule</directive></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ½ÃÀÛÇÒ¶§ ÀоîµéÀÏ ¼ö ÀÖ´Â °øÀ¯¶óÀ̺귯¸® DLL·Î
- ¸¸µå´Â °ÍÀÌ´Ù. ÀÌ ¸ðµâ DLLÀ» ¹èÆ÷ÇÏ¸é ¼­¹ö¸¦ ÀçÄÄÆÄÀÏÇÏÁö
- ¾Ê°í ¾î¶² À©µµ¿ìÁî¿ë ¾ÆÆÄÄ¡¿¡¼­µµ ¸ðµâÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¸ðµâ DLLÀ» ¸¸µé±âÀ§Çؼ­´Â ¸ðµâÀÇ ¼Ò½ºÆÄÀÏÀ» Á¶±Ý ¼öÁ¤Çؾß
- ÇÑ´Ù. DLLÀº module record¸¦ exportÇØ¾ß ÇÑ´Ù. (¾Æ·¡ Âü°í)
- À̸¦ À§ÇØ ¸ðµâÀÇ module record Á¤ÀÇ¿¡ (¾ÆÆÄÄ¡ Çì´õÆÄÀÏ¿¡
- Á¤ÀǵÈ) <code>AP_MODULE_DECLARE_DATA</code>¸¦ Ãß°¡ÇÑ´Ù.
- ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°Àº ¸ðµâÀÌ ÀÖ´Ù¸é:</p>
-
-<example>
- module foo_module;
-</example>
-
- <p>´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù:</p>
-<example>
- module AP_MODULE_DECLARE_DATA foo_module;
-</example>
-
- <p>ÀÌ ºÎºÐÀº À©µµ¿ìÁî¿¡¼­¸¸ »ç¿ëÇϱ⶧¹®¿¡ º¯°æÇÏ¿©µµ À¯´Ð½º¿¡¼­
- ¼Ò½º¸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶Ç, <code>.DEF</code> ÆÄÀÏ¿¡
- Àͼ÷ÇÏ´Ù¸é ´ë½Å ÀÌ ÆÄÀÏÀ» »ç¿ëÇÏ¿© module record¸¦ exportÇÒ
- ¼öµµ ÀÖ´Ù.</p>
-
- <p>ÀÌÁ¦ ¸ðµâÀ» Æ÷ÇÔÇÑ DLLÀ» ¸¸µç´Ù. À̸¦ °øÀ¯¶óÀ̺귯¸®
- libhttpd.dllÀ» ÄÄÆÄÀÏÇÒ¶§ ¸¸µç libhttpd.lib export ¶óÀ̺귯¸®¿Í
- ¸µÅ©ÇÑ´Ù. ¾ÆÆÄÄ¡ Çì´õÆÄÀÏÀ» ¿Ã¹Ù·Î ãµµ·Ï ÄÄÆÄÀÏ·¯ ¼³Á¤À»
- ¼öÁ¤ÇØ¾ß ÇÒÁöµµ ¸ð¸¥´Ù. ¼­¹öÀÇ modules µð·ºÅ丮¿¡¼­ ÀÌ
- ¶óÀ̺귯¸®¸¦ ãÀ» ¼ö ÀÖ´Ù. ÄÄÆÄÀÏȯ°æÀ» ¿Ã¹Ù·Î ¼³Á¤ÇϱâÀ§ÇØ
- ±âÁ¸ ¸ðµâÀÇ .dsp ÆÄÀÏÀ» °¡Á®´Ù ¾²°Å³ª Á÷Á¢ ¸¸µç .dsp¿Í
- ÄÄÆÄÀÏ·¯/¸µÄ¿ ¿É¼ÇÀ» ºñ±³ÇÏ´Â °ÍÀÌ ÁÁ´Ù.</p>
-
- <p>ÀÌÁ¦ ¸ðµâÀ» DLL·Î ¸¸µç´Ù. ÀÌ°ÍÀ» ¼­¹öÀÇ
- <code>modules</code> µð·ºÅ丮¿¡ µÎ°í,
- <directive>LoadModule</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀоîµéÀδÙ.</p>
-
-</section>
-
-<directivesynopsis>
-<name>LoadFile</name>
-<description>ÁöÁ¤ÇÑ ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ</description>
-<syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-
- <p>LoadFile Áö½Ã¾î´Â ¼­¹ö°¡ ½ÃÀÛÇϰųª Àç½ÃÀÛÇÒ¶§ ÁöÁ¤ÇÑ
- ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ(link in). ÀÌ Áö½Ã¾î´Â
- ¾î¶² ¸ðµâÀÌ µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ Äڵ带 Ãß°¡·Î ÀоîµéÀ϶§
- »ç¿ëÇÑ´Ù. <em>Filename</em>Àº Àý´ë°æ·ÎÀ̰ųª <a
- href="core.html#serverroot">ServerRoot</a>¿¡ ´ëÇÑ »ó´ë°æ·ÎÀÌ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î:</p>
-
- <example>LoadFile libexec/libxmlparse.so</example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LoadModule</name>
-<description>¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ
-¸ðµâ ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù</description>
-<syntax>LoadModule <em>module filename</em></syntax>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
- <p>LoadModule Áö½Ã¾î´Â ¸ñÀûÆÄÀÏ È¤Àº ¶óÀ̺귯¸® <em>filename</em>À»
- ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ ¸ðµâ ¸ñ·Ï¿¡ <em>module</em>À̶ó´Â
- ¸ðµâ ±¸Á¶Ã¼¸¦ Ãß°¡ÇÑ´Ù. <em>Module</em>Àº ÆÄÀÏÀÇ
- <code>module</code> ÀÚ·áÇü ¿ÜºÎº¯¼ö¸íÀ̸ç, ¸ðµâ ¹®¼­ÀÇ <a
- href="module-dict.html#ModuleIdentifier">¸ðµâ¸í</a>¿¡
- ³ª¿Â´Ù. ¿¹¸¦ µé¸é:</p>
-
- <example>
- LoadModule status_module modules/mod_status.so
- </example>
-
- <p>ServerRootÀÇ modules ÇÏÀ§µð·ºÅ丮¿¡¼­ ÁöÁ¤ÇÑ ¸ðµâÀ» ÀоîµéÀδÙ.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_so.xml.meta b/docs/manual/mod/mod_so.xml.meta
deleted file mode 100644
index 5c88b57de7..0000000000
--- a/docs/manual/mod/mod_so.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_so</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_speling.html b/docs/manual/mod/mod_speling.html
deleted file mode 100644
index bcda93f53c..0000000000
--- a/docs/manual/mod/mod_speling.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_speling.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_speling.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_speling.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_speling.html.en b/docs/manual/mod/mod_speling.html.en
deleted file mode 100644
index 7412e5e75a..0000000000
--- a/docs/manual/mod/mod_speling.html.en
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_speling - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_speling</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_speling.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_speling.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_speling.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>speling_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_speling.c</td></tr></table>
-<h3>Summary</h3>
-
-
- <p>Requests to documents sometimes cannot be served by the core
- apache server because the request was misspelled or
- miscapitalized. This module addresses this problem by trying to
- find a matching document, even after all other modules gave up.
- It does its work by comparing each document name in the
- requested directory against the requested document name
- <strong>without regard to case</strong>, and allowing
- <strong>up to one misspelling</strong> (character insertion /
- omission / transposition or wrong character). A list is built
- with all document names which were matched using this
- strategy.</p>
-
- <p>If, after scanning the directory,</p>
-
- <ul>
- <li>no matching document was found, Apache will proceed as
- usual and return a "document not found" error.</li>
-
- <li>only one document is found that "almost" matches the
- request, then it is returned in the form of a redirection
- response.</li>
-
- <li>more than one document with a close match was found, then
- the list of the matches is returned to the client, and the
- client can select the correct candidate.</li>
- </ul>
-
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#checkspelling">CheckSpelling</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CheckSpelling" id="CheckSpelling">CheckSpelling</a> <a name="checkspelling" id="checkspelling">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables the spelling
-module</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CheckSpelling on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CheckSpelling Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_speling</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>CheckSpelling was available as a separately available
-module for Apache 1.1, but was limited to miscapitalizations. As
-of Apache 1.3, it is part of the Apache distribution. Prior to Apache
-1.3.2, the <code>CheckSpelling</code> directive was only available in the
-"server" and "virtual host" contexts.</td></tr>
-</table>
- <p>This directive enables or disables the spelling module. When
- enabled, keep in mind that</p>
-
- <ul>
- <li>the directory scan which is necessary for the spelling
- correction will have an impact on the server's performance
- when many spelling corrections have to be performed at the
- same time.</li>
-
- <li>the document trees should not contain sensitive files
- which could be matched inadvertently by a spelling
- "correction".</li>
-
- <li>the module is unable to correct misspelled user names (as
- in <code>http://my.host/~apahce/</code>), just file names or
- directory names.</li>
-
- <li>spelling corrections apply strictly to existing files, so
- a request for the <code>&lt;Location /status&gt;</code> may
- get incorrectly treated as the negotiated file
- "<code>/stats.html</code>".</li>
- </ul>
-
-
- <p>mod_speling should not be enabled in <a href="mod_dav.html">DAV</a>
- enabled directories, because it will try to "spell fix" newly created
- resource names against existing filenames, e.g., when trying to upload
- a new document <code>doc43.html</code> it might redirect to an existing
- document <code>doc34.html</code>, which is not what was intended.
- </p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_speling.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_speling.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_speling.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_speling.html.ja.euc-jp b/docs/manual/mod/mod_speling.html.ja.euc-jp
deleted file mode 100644
index 29f8f6625c..0000000000
--- a/docs/manual/mod/mod_speling.html.ja.euc-jp
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_speling - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_speling</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_speling.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_speling.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_speling.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥æ¡¼¥¶¤¬ÆþÎϤ·¤¿¤Ç¤¢¤í¤¦´Ö°ã¤Ã¤¿ URL ¤ò¡¢
-Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤¹¤ë¤³¤È¤È°ì¤Ä°Ê²¼¤ÎÄÖ¤ê´Ö°ã¤¤¤òµöÍƤ¹¤ë¤³¤È¤Ç
-½¤Àµ¤ò»î¤ß¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>speling_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_speling.c</td></tr></table>
-<h3>³µÍ×</h3>
-
-
- <p>¥ê¥¯¥¨¥¹¥È¤ÎÄ֤꤬´Ö°ã¤Ã¤Æ¤¤¤¿¤ê¡¢
- Âçʸ»ú¾®Ê¸»ú¤¬°ã¤Ã¤Æ¤¤¤¿¤ê¤¹¤ë¤¿¤á¤Ë¡¢Apache ¤Î¥³¥¢¥µ¡¼¥Ð¤¬
- ¥É¥­¥å¥á¥ó¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ø¤Î±þÅú¤òÀµ¤·¤¯Ä󶡤Ǥ­¤Ê¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢Â¾¤Î¤¹¤Ù¤Æ¤Î¥â¥¸¥å¡¼¥ë¤¬¤¢¤­¤é¤á¤¿¸å¤Ç¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢
- ¥ê¥¯¥¨¥¹¥È¤Ë¹ç¤¦¥É¥­¥å¥á¥ó¥È¤ò¸«¤Ä¤±¤è¤¦¤È¤¹¤ë¤³¤È¤Ë¤è¤ê¤³¤ÎÌäÂê¤Î
- ²ò·è¤ò»î¤ß¤Þ¤¹¡£¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë
- ¤½¤ì¤¾¤ì¤Î¥É¥­¥å¥á¥ó¥È¤Î̾Á°¤È¡¢¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤Î̾Á°¤È¤ò
- <strong>Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò̵»ë¤·</strong>¡¢<strong>°ìʸ»ú¤Þ¤Ç¤Î
- ÄÖ¤ê¤Î´Ö°ã¤¤</strong> (ʸ»ú¤ÎÁÞÆþ/¾Êά/Îٹ礦ʸ»ú¤ÎÃÖ´¹¡¢´Ö°ã¤Ã¤¿Ê¸»ú)
- ¤òµö²Ä¤·¤ÆÈæ³Ó¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢ÌÜŪ¤òãÀ®¤·¤è¤¦¤È¤·¤Þ¤¹¡£
- ¤³¤ÎÊýË¡¤Ç¥ê¥¯¥¨¥¹¥È¤Ë¹ç¤¦¥É¥­¥å¥á¥ó¥È¤Î°ìÍ÷¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>¥Ç¥£¥ì¥¯¥È¥ê¤ò¥¹¥­¥ã¥ó¤·¤¿¸å¤Ë¡¢</p>
-
- <ul>
- <li>ŬÀڤʥɥ­¥å¥á¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
- Apache ¤Ï¤¤¤Ä¤â¤ÈƱ¤¸¤è¤¦¤Ë½èÍý¤ò¤·¡¢
- ¡Ö¥É¥­¥å¥á¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤¤¡×¤È¤¤¤¦¥¨¥é¡¼¤òÊÖ¤·¤Þ¤¹¡£</li>
-
- <li>¥ê¥¯¥¨¥¹¥È¤Ë¡Ö¤Û¤È¤ó¤É¡×¹ç¤¦¥É¥­¥å¥á¥ó¥È¤¬°ì¤Ä¤À¤±¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢
- ¤½¤ì¤¬¥ê¥À¥¤¥ì¥¯¥È±þÅú¤È¤·¤ÆÊÖ¤µ¤ì¤Þ¤¹¡£</li>
-
- <li>¤è¤¯»÷¤¿¥É¥­¥å¥á¥ó¥È¤¬Ê£¿ô¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢
- ¤½¤Î¥ê¥¹¥È¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤µ¤ì¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤¬Àµ¤·¤¤¸õÊä¤òÁªÂò¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</li>
- </ul>
-
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#checkspelling">CheckSpelling</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CheckSpelling" id="CheckSpelling">CheckSpelling</a> <a name="checkspelling" id="checkspelling">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>spelling ¥â¥¸¥å¡¼¥ë¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>CheckSpelling on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>CheckSpelling Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È, ¥Ç¥£¥ì¥¯¥È¥ê, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">¾å½ñ¤­:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_speling</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>CheckSpelling ¤Ï Apache 1.1 ¤Ç¤ÏÊÌÇÛÉۤΥ⥸¥å¡¼¥ë¤Ç¡¢
-Âçʸ»ú¾®Ê¸»ú¤Î´Ö°ã¤¤¤Î¤ß¤Îµ¡Ç½¤Ç¤·¤¿¡£Apache 1.3 ¤Ç Apache ¤ÎÇÛÉÛ¤Ë
-´Þ¤Þ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£Apache 1.3.2 ¤è¤êÁ°¤Ç¤Ï <code>CheckSpelling</code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡Ö¥µ¡¼¥Ð¡×¤È¡Ö¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¡×¥³¥ó¥Æ¥­¥¹¥È¤Ç¤Î¤ß
-»ÈÍѲÄǽ¤Ç¤·¤¿</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÄÖ¤êÍѤΥ⥸¥å¡¼¥ë¤ò»ÈÍѤ¹¤ë¤«¤É¤¦¤«¤ò
- ·è¤á¤Þ¤¹¡£»ÈÍÑ»þ¤Ë¤Ï¡¢°Ê²¼¤Î¤³¤È¤ò³Ð¤¨¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤</p>
-
- <ul>
- <li>Ʊ»þ¤Ë¤¿¤¯¤µ¤ó¤ÎÄÖ¤ê¤ÎÄûÀµ¤ò¹Ô¤Ê¤ï¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤­¤Ï¡¢
- ¤½¤Î¤¿¤á¤Ë¹Ô¤Ê¤ï¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¹¥­¥ã¥ó¤¬¥µ¡¼¥Ð¤ÎÀ­Ç½¤Ë
- ±Æ¶Á¤òÍ¿¤¨¤Þ¤¹¡£</li>
-
- <li>¥É¥­¥å¥á¥ó¥È¤ÎÃæ¤ËÄÖ¤ê¤Î¡ÖÄûÀµ¡×¤Ë¤è¤ê
- °Õ¿Þ¤»¤º¹ç¤Ã¤Æ¤·¤Þ¤¦¤è¤¦¤Ê½ÅÍפʥե¡¥¤¥ë¤¬¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- </li>
-
- <li>¥â¥¸¥å¡¼¥ë¤Ï¥æ¡¼¥¶Ì¾¤ÎÄÖ¤ê¤Î´Ö°ã¤¤
- (<code>http://my.host/~apahce/</code> ¤Î¤è¤¦¤Ë)
- ¤òÄûÀµ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- ÄûÀµ¤Ç¤­¤ë¤Î¤Ï¥Õ¥¡¥¤¥ë̾¤È¥Ç¥£¥ì¥¯¥È¥ê̾¤À¤±¤Ç¤¹¡£</li>
-
- <li>ÄÖ¤ê¤ÎÄûÀµ¤Ï¸ºß¤¹¤ë¥Õ¥¡¥¤¥ë¤Ë¸·Ì©¤ËŬÍѤµ¤ì¤Þ¤¹¤Î¤Ç¡¢
- <code>&lt;Location /status&gt;</code>
- ¤Ï¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤Î·ë²Ì¤Î¥Õ¥¡¥¤¥ë "<code>/stats.html</code>"
- ¤È¤·¤Æ´Ö°ã¤Ã¤Æ°·¤ï¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</li>
- </ul>
-
-
- <p><a href="mod_dav.html">DAV</a> ¤¬Í­¸ú¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï
- <code class="module"><a href="../mod/mod_speling.html">mod_speling</a></code> ¤ÏÍ­¸ú¤Ë¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- ¿·¤·¤¯ºîÀ®¤·¤¿¥ê¥½¡¼¥¹Ì¾¤ò´û¤Ë¸ºß¤¹¤ë¥Õ¥¡¥¤¥ë̾¤Ë¡Ö½¤Àµ¡×¤·¤è¤¦¤È¤¹¤ë¡¢
- Î㤨¤Ð¡¢¿·µ¬¥É¥­¥å¥á¥ó¥È <code>doc43.html</code> ¤¬´û¤Ë¸ºß¤¹¤ë
- <code>doc34.html</code> ¤Ë¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Æ¡¢
- ´üÂԤȤϰ㤦µóÆ°¤Ë¤Ê¤ë¤«¤é¤Ç¤¹¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_speling.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_speling.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_speling.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_speling.html.ko.euc-kr b/docs/manual/mod/mod_speling.html.ko.euc-kr
deleted file mode 100644
index 0b835d357b..0000000000
--- a/docs/manual/mod/mod_speling.html.ko.euc-kr
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_speling - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_speling</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_speling.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_speling.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_speling.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>»ç¿ëÀÚ°¡ ´ë¼Ò¹®ÀÚ¸¦ À߸ø »ç¿ëÇϰųª ¸ÂÃã¹ýÀÌ Æ²¸®´Â
-°ÍÀ» Çѹø±îÁö Çã¿ëÇÏ¿© À߸øµÈ URLÀ» °íÄ¡·Á°í ½ÃµµÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>speling_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_speling.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
- <p>Á¾Á¾ ¸ÂÃã¹ýÀÌ Æ²¸®°Å³ª ´ë¼Ò¹®ÀÚ¸¦ À߸ø »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡°¡
- ¹®¼­ ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ ¸ðµâÀº ´Ù¸¥
- ¸ðµç ¸ðµâµéÀÌ Æ÷±âÇÑ ¿äû¿¡ ÇØ´çÇÏ´Â ¹®¼­¸¦ ã´Â´Ù. ¸ðµâÀº
- ¿äûÇÑ µð·ºÅ丮 ¾È¿¡ ÀÖ´Â ¸ðµç ¹®¼­¸¦ ¿äûÇÑ ¹®¼­À̸§°ú
- <strong>´ë¼Ò¹®ÀÚ ±¸º°¾øÀÌ</strong> (¹®ÀÚ Ã·°¡ / »ý·« / ±³Ã¼
- ȤÀº À߸øµÈ ¹®ÀÚ ) <strong>¸ÂÃã¹ýÀÌ Çѹø±îÁö Ʋ·Áµµ
- ºÁÁÖ¸ç</strong> ºñ±³ÇÑ´Ù. ÀÌ·± ¹æ¹ýÀ¸·Î ¹®¼­¸ñ·ÏÀ» ¸¸µç´Ù.</p>
-
- <p>µð·ºÅ丮¸¦ »ìÆ캻 ÈÄ¿¡,</p>
-
- <ul>
- <li>¹®¼­¸¦ ãÁö¸øÇϸé, ¾ÆÆÄÄ¡´Â ÀϹÝÀûÀÎ "document not
- found (¹®¼­¸¦ ãÀ» ¼ö ¾øÀ½)" ¿À·ù¸¦ ¹ÝȯÇÑ´Ù.</li>
-
- <li>¿äû¿¡ "°ÅÀÇ" ÀÏÄ¡ÇÏ´Â ¹®¼­¸¦ Çϳª¸¸ ãÀº °æ¿ì, ±×
- ¹®¼­·Î ¸®´ÙÀÌ·º¼Ç ÀÀ´äÀ» ÇÑ´Ù.</li>
-
- <li>±ÙÁ¢ÇÑ ¹®¼­¸¦ ¿©·¯°³ ãÀº °æ¿ì, Ŭ¶óÀ̾ðÆ®°¡ ¿Ã¹Ù¸¥
- ¹®¼­¸¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ¹®¼­¸ñ·ÏÀ» º¸³½´Ù.</li>
- </ul>
-
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#checkspelling">CheckSpelling</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CheckSpelling" id="CheckSpelling">CheckSpelling</a> <a name="checkspelling" id="checkspelling">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¸ÂÃã¹ý ¸ðµâÀ» »ç¿ëÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>CheckSpelling on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>CheckSpelling Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_speling</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 1.1Àº CheckSpellingÀ» º°µµ·Î Á¦°øÇÏ¿´Áö¸¸,
-´ë¼Ò¹®ÀÚ°¡ ´Ù¸¥ °æ¿ì¸¸À» ó¸®ÇÒ ¼ö ÀÖ¾ú´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ¾ÆÆÄÄ¡
-¹èÆ÷º»ÀÇ ÀϺΰ¡ µÇ¾ú´Ù. ¾ÆÆÄÄ¡ 1.3.2 ÀÌÀü¿¡´Â
-<code>CheckSpelling</code> Áö½Ã¾î¸¦ "ÁÖ¼­¹ö"¿Í "°¡»óÈ£½ºÆ®"
-»ç¿ëÀå¼Ò¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù.</td></tr>
-</table>
- <p>ÀÌ Áö½Ã¾î´Â ¸ÂÃã¹ý ¸ðµâÀÇ »ç¿ë¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. »ç¿ëÇÑ´Ù¸é
- ´ÙÀ½À» ÁÖÀÇÇ϶ó</p>
-
- <ul>
- <li>¸ÂÃã¹ý ±³Á¤À» À§ÇØ µð·ºÅ丮¸¦ »ìÆ캸´Â ÀÛ¾÷À» µ¿½Ã¿¡
- ¿©·¯¹ø ÇÒ °æ¿ì ¼­¹ö ¼º´É¿¡ ¿µÇâÀ» ÁØ´Ù.</li>
-
- <li>¹®¼­Áß¿¡ ¸ÂÃã¹ý "±³Á¤"À¸·Î ¿ì¿¬È÷ º¸¿©Áú ¼ö ÀÖ´Â
- ±â¹Ð¹®¼­°¡ ¾ø¾î¾ß ÇÑ´Ù.</li>
-
- <li>¸ðµâÀº ÆÄÀϸí°ú µð·ºÅ丮¸í¸¸À» ±³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç,
- (<code>http://my.host/~apahce/</code>¿Í °°ÀÌ) ¸ÂÃã¹ýÀÌ
- Ʋ¸° »ç¿ëÀÚ¸íÀ» ±³Á¤ÇÏÁö ¸øÇÑ´Ù.</li>
-
- <li>¸ÂÃã¹ý ±³Á¤Àº Á¸ÀçÇÏ´Â ÆÄÀÏ¿¡¸¸ Àû¿ëµÈ´Ù. ±×·¡¼­
- <code>&lt;Location /status&gt;</code>¿¡ ´ëÇÑ ¿äûÀ»
- ³»¿ëÇù»óÀ» °ÅÄ£ "<code>/stats.html</code>" ÆÄÀÏ·Î ¿ÀÀÎÇÒ
- ¼ö ÀÖ´Ù.</li>
- </ul>
-
-
- <p><a href="mod_dav.html">DAV</a>¸¦ »ç¿ëÇÏ´Â µð·ºÅ丮¿¡
- mod_spelingÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ÀÌÀ¯´Â »õ·Î ¾÷·ÎµåÇÏ·Á´Â
- <code>doc43.html</code> ¹®¼­¸¦ ¾û¶×ÇÏ°Ô ±âÁ¸ÀÇ
- <code>doc34.html</code> ÆÄÀÏ·Î ¸®´ÙÀÌ·ºÆ®ÇÏ´Â µî, DAV°¡
- »õ·Î ¸¸µå´Â ¸®¼Ò½º¸íÀ» ±âÁ¸ÀÇ ÆÄÀϸíÀ¸·Î "¸ÂÃã¹ý ±³Á¤"À»
- ½ÃµµÇϱ⠶§¹®ÀÌ´Ù.
- </p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_speling.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_speling.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_speling.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_speling.xml b/docs/manual/mod/mod_speling.xml
deleted file mode 100755
index bf4849c0eb..0000000000
--- a/docs/manual/mod/mod_speling.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_speling.xml.meta">
-
-<name>mod_speling</name>
-<description>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</description>
-<status>Extension</status>
-<sourcefile>mod_speling.c</sourcefile>
-<identifier>speling_module</identifier>
-
-
-
-<summary>
-
- <p>Requests to documents sometimes cannot be served by the core
- apache server because the request was misspelled or
- miscapitalized. This module addresses this problem by trying to
- find a matching document, even after all other modules gave up.
- It does its work by comparing each document name in the
- requested directory against the requested document name
- <strong>without regard to case</strong>, and allowing
- <strong>up to one misspelling</strong> (character insertion /
- omission / transposition or wrong character). A list is built
- with all document names which were matched using this
- strategy.</p>
-
- <p>If, after scanning the directory,</p>
-
- <ul>
- <li>no matching document was found, Apache will proceed as
- usual and return a "document not found" error.</li>
-
- <li>only one document is found that "almost" matches the
- request, then it is returned in the form of a redirection
- response.</li>
-
- <li>more than one document with a close match was found, then
- the list of the matches is returned to the client, and the
- client can select the correct candidate.</li>
- </ul>
-
-</summary>
-
-
-<directivesynopsis>
-<name>CheckSpelling</name>
-<description>Enables the spelling
-module</description>
-<syntax>CheckSpelling on|off</syntax>
-<default>CheckSpelling Off</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<compatibility>CheckSpelling was available as a separately available
-module for Apache 1.1, but was limited to miscapitalizations. As
-of Apache 1.3, it is part of the Apache distribution. Prior to Apache
-1.3.2, the <code>CheckSpelling</code> directive was only available in the
-"server" and "virtual host" contexts.</compatibility>
-
-<usage>
- <p>This directive enables or disables the spelling module. When
- enabled, keep in mind that</p>
-
- <ul>
- <li>the directory scan which is necessary for the spelling
- correction will have an impact on the server's performance
- when many spelling corrections have to be performed at the
- same time.</li>
-
- <li>the document trees should not contain sensitive files
- which could be matched inadvertently by a spelling
- "correction".</li>
-
- <li>the module is unable to correct misspelled user names (as
- in <code>http://my.host/~apahce/</code>), just file names or
- directory names.</li>
-
- <li>spelling corrections apply strictly to existing files, so
- a request for the <code>&lt;Location /status&gt;</code> may
- get incorrectly treated as the negotiated file
- "<code>/stats.html</code>".</li>
- </ul>
-
- <!-- XXX: is that really true?! -nd -->
- <p>mod_speling should not be enabled in <a href="mod_dav.html">DAV</a>
- enabled directories, because it will try to "spell fix" newly created
- resource names against existing filenames, e.g., when trying to upload
- a new document <code>doc43.html</code> it might redirect to an existing
- document <code>doc34.html</code>, which is not what was intended.
- </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_speling.xml.ja b/docs/manual/mod/mod_speling.xml.ja
deleted file mode 100644
index 6bb49cc9b7..0000000000
--- a/docs/manual/mod/mod_speling.xml.ja
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_speling.xml.meta">
-
-<name>mod_speling</name>
-<description>$B%f!<%6$,F~NO$7$?$G$"$m$&4V0c$C$?(B URL $B$r!"(B
-$BBgJ8;z>.J8;z$N6hJL$rL5;k$9$k$3$H$H0l$D0J2<$NDV$j4V0c$$$r5vMF$9$k$3$H$G(B
-$B=$@5$r;n$_$k(B</description>
-<status>Extension</status>
-<sourcefile>mod_speling.c</sourcefile>
-<identifier>speling_module</identifier>
-
-
-<summary>
-
- <p>$B%j%/%(%9%H$NDV$j$,4V0c$C$F$$$?$j!"(B
- $BBgJ8;z>.J8;z$,0c$C$F$$$?$j$9$k$?$a$K!"(BApache $B$N%3%"%5!<%P$,(B
- $B%I%-%e%a%s%H$X$N%j%/%(%9%H$X$N1~Ez$r@5$7$/Ds6!$G$-$J$$$3$H$,$"$j$^$9!#(B
- $B$3$N%b%8%e!<%k$O!"B>$N$9$Y$F$N%b%8%e!<%k$,$"$-$i$a$?8e$G$"$C$?$H$7$F$b!"(B
- $B%j%/%(%9%H$K9g$&%I%-%e%a%s%H$r8+$D$1$h$&$H$9$k$3$H$K$h$j$3$NLdBj$N(B
- $B2r7h$r;n$_$^$9!#$3$N%b%8%e!<%k$O%j%/%(%9%H$5$l$?%G%#%l%/%H%j$K$"$k(B
- $B$=$l$>$l$N%I%-%e%a%s%H$NL>A0$H!"%j%/%(%9%H$5$l$?%I%-%e%a%s%H$NL>A0$H$r(B
- <strong>$BBgJ8;z>.J8;z$N6hJL$rL5;k$7(B</strong>$B!"(B<strong>$B0lJ8;z$^$G$N(B
- $BDV$j$N4V0c$$(B</strong> ($BJ8;z$NA^F~(B/$B>JN,(B/$BNY9g$&J8;z$NCV49!"4V0c$C$?J8;z(B)
- $B$r5v2D$7$FHf3S$9$k$3$H$K$h$j!"L\E*$rC#@.$7$h$&$H$7$^$9!#(B
- $B$3$NJ}K!$G%j%/%(%9%H$K9g$&%I%-%e%a%s%H$N0lMw$,:n@.$5$l$^$9!#(B</p>
-
- <p>$B%G%#%l%/%H%j$r%9%-%c%s$7$?8e$K!"(B</p>
-
- <ul>
- <li>$BE,@Z$J%I%-%e%a%s%H$,8+$D$+$i$J$+$C$?>l9g!"(B
- Apache $B$O$$$D$b$HF1$8$h$&$K=hM}$r$7!"(B
- $B!V%I%-%e%a%s%H$,8+$D$+$i$J$$!W$H$$$&%(%i!<$rJV$7$^$9!#(B</li>
-
- <li>$B%j%/%(%9%H$K!V$[$H$s$I!W9g$&%I%-%e%a%s%H$,0l$D$@$18+$D$+$C$?>l9g!"(B
- $B$=$l$,%j%@%$%l%/%H1~Ez$H$7$FJV$5$l$^$9!#(B</li>
-
- <li>$B$h$/;w$?%I%-%e%a%s%H$,J#?t8+$D$+$C$?>l9g!"(B
- $B$=$N%j%9%H$,%/%i%$%"%s%H$KJV$5$l!"(B
- $B%/%i%$%"%s%H$,@5$7$$8uJd$rA*Br$G$-$k$h$&$K$7$^$9!#(B</li>
- </ul>
-
-</summary>
-
-<directivesynopsis>
-<name>CheckSpelling</name>
-<description>spelling $B%b%8%e!<%k$r;HMQ$9$k$h$&$K$9$k(B</description>
-<syntax>CheckSpelling on|off</syntax>
-<default>CheckSpelling Off</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<compatibility>CheckSpelling $B$O(B Apache 1.1 $B$G$OJLG[I[$N%b%8%e!<%k$G!"(B
-$BBgJ8;z>.J8;z$N4V0c$$$N$_$N5!G=$G$7$?!#(BApache 1.3 $B$G(B Apache $B$NG[I[$K(B
-$B4^$^$l$k$h$&$K$J$j$^$7$?!#(BApache 1.3.2 $B$h$jA0$G$O(B <code>CheckSpelling</code>
-$B%G%#%l%/%F%#%V$O!V%5!<%P!W$H!V%P!<%A%c%k%[%9%H!W%3%s%F%-%9%H$G$N$_(B
-$B;HMQ2DG=$G$7$?(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$ODV$jMQ$N%b%8%e!<%k$r;HMQ$9$k$+$I$&$+$r(B
- $B7h$a$^$9!#;HMQ;~$K$O!"0J2<$N$3$H$r3P$($F$*$$$F$/$@$5$$(B</p>
-
- <ul>
- <li>$BF1;~$K$?$/$5$s$NDV$j$ND{@5$r9T$J$o$J$1$l$P$J$i$J$$$H$-$O!"(B
- $B$=$N$?$a$K9T$J$o$l$k%G%#%l%/%H%j$N%9%-%c%s$,%5!<%P$N@-G=$K(B
- $B1F6A$rM?$($^$9!#(B</li>
-
- <li>$B%I%-%e%a%s%H$NCf$KDV$j$N!VD{@5!W$K$h$j(B
- $B0U?^$;$:9g$C$F$7$^$&$h$&$J=EMW$J%U%!%$%k$,$J$$$h$&$K$7$F$/$@$5$$!#(B
- </li>
-
- <li>$B%b%8%e!<%k$O%f!<%6L>$NDV$j$N4V0c$$(B
- (<code>http://my.host/~apahce/</code> $B$N$h$&$K(B)
- $B$rD{@5$9$k$3$H$O$G$-$^$;$s!#(B
- $BD{@5$G$-$k$N$O%U%!%$%kL>$H%G%#%l%/%H%jL>$@$1$G$9!#(B</li>
-
- <li>$BDV$j$ND{@5$OB8:_$9$k%U%!%$%k$K87L)$KE,MQ$5$l$^$9$N$G!"(B
- <code>&lt;Location /status&gt;</code>
- $B$O%M%4%7%(!<%7%g%s$N7k2L$N%U%!%$%k(B "<code>/stats.html</code>"
- $B$H$7$F4V0c$C$F07$o$l$k$+$b$7$l$^$;$s!#(B</li>
- </ul>
-
- <!-- XXX: is that really true?! -nd -->
- <p><a href="mod_dav.html">DAV</a> $B$,M-8z$J%G%#%l%/%H%j$G$O(B
- <module>mod_speling</module> $B$OM-8z$K$7$J$$$G$/$@$5$$!#(B
- $B?7$7$/:n@.$7$?%j%=!<%9L>$r4{$KB8:_$9$k%U%!%$%kL>$K!V=$@5!W$7$h$&$H$9$k!"(B
- $BNc$($P!"?75,%I%-%e%a%s%H(B <code>doc43.html</code> $B$,4{$KB8:_$9$k(B
- <code>doc34.html</code> $B$K%j%@%$%l%/%H$5$l$F!"(B
- $B4|BT$H$O0c$&5sF0$K$J$k$+$i$G$9!#(B</p>
-</usage>
-
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_speling.xml.ko b/docs/manual/mod/mod_speling.xml.ko
deleted file mode 100644
index 1b17392c81..0000000000
--- a/docs/manual/mod/mod_speling.xml.ko
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_speling.xml.meta">
-
-<name>mod_speling</name>
-<description>»ç¿ëÀÚ°¡ ´ë¼Ò¹®ÀÚ¸¦ À߸ø »ç¿ëÇϰųª ¸ÂÃã¹ýÀÌ Æ²¸®´Â
-°ÍÀ» Çѹø±îÁö Çã¿ëÇÏ¿© À߸øµÈ URLÀ» °íÄ¡·Á°í ½ÃµµÇÑ´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_speling.c</sourcefile>
-<identifier>speling_module</identifier>
-
-
-
-<summary>
-
- <p>Á¾Á¾ ¸ÂÃã¹ýÀÌ Æ²¸®°Å³ª ´ë¼Ò¹®ÀÚ¸¦ À߸ø »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡°¡
- ¹®¼­ ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ ¸ðµâÀº ´Ù¸¥
- ¸ðµç ¸ðµâµéÀÌ Æ÷±âÇÑ ¿äû¿¡ ÇØ´çÇÏ´Â ¹®¼­¸¦ ã´Â´Ù. ¸ðµâÀº
- ¿äûÇÑ µð·ºÅ丮 ¾È¿¡ ÀÖ´Â ¸ðµç ¹®¼­¸¦ ¿äûÇÑ ¹®¼­À̸§°ú
- <strong>´ë¼Ò¹®ÀÚ ±¸º°¾øÀÌ</strong> (¹®ÀÚ Ã·°¡ / »ý·« / ±³Ã¼
- ȤÀº À߸øµÈ ¹®ÀÚ ) <strong>¸ÂÃã¹ýÀÌ Çѹø±îÁö Ʋ·Áµµ
- ºÁÁÖ¸ç</strong> ºñ±³ÇÑ´Ù. ÀÌ·± ¹æ¹ýÀ¸·Î ¹®¼­¸ñ·ÏÀ» ¸¸µç´Ù.</p>
-
- <p>µð·ºÅ丮¸¦ »ìÆ캻 ÈÄ¿¡,</p>
-
- <ul>
- <li>¹®¼­¸¦ ãÁö¸øÇϸé, ¾ÆÆÄÄ¡´Â ÀϹÝÀûÀÎ "document not
- found (¹®¼­¸¦ ãÀ» ¼ö ¾øÀ½)" ¿À·ù¸¦ ¹ÝȯÇÑ´Ù.</li>
-
- <li>¿äû¿¡ "°ÅÀÇ" ÀÏÄ¡ÇÏ´Â ¹®¼­¸¦ Çϳª¸¸ ãÀº °æ¿ì, ±×
- ¹®¼­·Î ¸®´ÙÀÌ·º¼Ç ÀÀ´äÀ» ÇÑ´Ù.</li>
-
- <li>±ÙÁ¢ÇÑ ¹®¼­¸¦ ¿©·¯°³ ãÀº °æ¿ì, Ŭ¶óÀ̾ðÆ®°¡ ¿Ã¹Ù¸¥
- ¹®¼­¸¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ¹®¼­¸ñ·ÏÀ» º¸³½´Ù.</li>
- </ul>
-
-</summary>
-
-
-<directivesynopsis>
-<name>CheckSpelling</name>
-<description>¸ÂÃã¹ý ¸ðµâÀ» »ç¿ëÇÑ´Ù</description>
-<syntax>CheckSpelling on|off</syntax>
-<default>CheckSpelling Off</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<compatibility>¾ÆÆÄÄ¡ 1.1Àº CheckSpellingÀ» º°µµ·Î Á¦°øÇÏ¿´Áö¸¸,
-´ë¼Ò¹®ÀÚ°¡ ´Ù¸¥ °æ¿ì¸¸À» ó¸®ÇÒ ¼ö ÀÖ¾ú´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ¾ÆÆÄÄ¡
-¹èÆ÷º»ÀÇ ÀϺΰ¡ µÇ¾ú´Ù. ¾ÆÆÄÄ¡ 1.3.2 ÀÌÀü¿¡´Â
-<code>CheckSpelling</code> Áö½Ã¾î¸¦ "ÁÖ¼­¹ö"¿Í "°¡»óÈ£½ºÆ®"
-»ç¿ëÀå¼Ò¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù.</compatibility>
-
-<usage>
- <p>ÀÌ Áö½Ã¾î´Â ¸ÂÃã¹ý ¸ðµâÀÇ »ç¿ë¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. »ç¿ëÇÑ´Ù¸é
- ´ÙÀ½À» ÁÖÀÇÇ϶ó</p>
-
- <ul>
- <li>¸ÂÃã¹ý ±³Á¤À» À§ÇØ µð·ºÅ丮¸¦ »ìÆ캸´Â ÀÛ¾÷À» µ¿½Ã¿¡
- ¿©·¯¹ø ÇÒ °æ¿ì ¼­¹ö ¼º´É¿¡ ¿µÇâÀ» ÁØ´Ù.</li>
-
- <li>¹®¼­Áß¿¡ ¸ÂÃã¹ý "±³Á¤"À¸·Î ¿ì¿¬È÷ º¸¿©Áú ¼ö ÀÖ´Â
- ±â¹Ð¹®¼­°¡ ¾ø¾î¾ß ÇÑ´Ù.</li>
-
- <li>¸ðµâÀº ÆÄÀϸí°ú µð·ºÅ丮¸í¸¸À» ±³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç,
- (<code>http://my.host/~apahce/</code>¿Í °°ÀÌ) ¸ÂÃã¹ýÀÌ
- Ʋ¸° »ç¿ëÀÚ¸íÀ» ±³Á¤ÇÏÁö ¸øÇÑ´Ù.</li>
-
- <li>¸ÂÃã¹ý ±³Á¤Àº Á¸ÀçÇÏ´Â ÆÄÀÏ¿¡¸¸ Àû¿ëµÈ´Ù. ±×·¡¼­
- <code>&lt;Location /status&gt;</code>¿¡ ´ëÇÑ ¿äûÀ»
- ³»¿ëÇù»óÀ» °ÅÄ£ "<code>/stats.html</code>" ÆÄÀÏ·Î ¿ÀÀÎÇÒ
- ¼ö ÀÖ´Ù.</li>
- </ul>
-
- <!-- XXX: is that really true?! -nd -->
- <p><a href="mod_dav.html">DAV</a>¸¦ »ç¿ëÇÏ´Â µð·ºÅ丮¿¡
- mod_spelingÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ÀÌÀ¯´Â »õ·Î ¾÷·ÎµåÇÏ·Á´Â
- <code>doc43.html</code> ¹®¼­¸¦ ¾û¶×ÇÏ°Ô ±âÁ¸ÀÇ
- <code>doc34.html</code> ÆÄÀÏ·Î ¸®´ÙÀÌ·ºÆ®ÇÏ´Â µî, DAV°¡
- »õ·Î ¸¸µå´Â ¸®¼Ò½º¸íÀ» ±âÁ¸ÀÇ ÆÄÀϸíÀ¸·Î "¸ÂÃã¹ý ±³Á¤"À»
- ½ÃµµÇϱ⠶§¹®ÀÌ´Ù.
- </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_speling.xml.meta b/docs/manual/mod/mod_speling.xml.meta
deleted file mode 100644
index e17ad2e4d5..0000000000
--- a/docs/manual/mod/mod_speling.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_speling</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_ssl.html b/docs/manual/mod/mod_ssl.html
deleted file mode 100644
index 1b692ba64e..0000000000
--- a/docs/manual/mod/mod_ssl.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_ssl.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_ssl.html.en b/docs/manual/mod/mod_ssl.html.en
deleted file mode 100644
index 8ec5f52f77..0000000000
--- a/docs/manual/mod/mod_ssl.html.en
+++ /dev/null
@@ -1,1582 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_ssl - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_ssl</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ssl.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>ssl_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_ssl.c</td></tr></table>
-<h3>Summary</h3>
-
-<p>This module provides SSL v2/v3 and TLS v1 support for the Apache
-HTTP Server. It was contributed by Ralf S. Engeschall based on his
-mod_ssl project and originally derived from work by Ben Laurie.</p>
-
-<p>This module relies on <a href="http://www.openssl.org/">OpenSSL</a>
-to provide the cryptography engine.</p>
-
-<p>Further details, discussion, and examples are provided in the
-<a href="../ssl/">SSL documentation</a>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcacertificatefile">SSLCACertificateFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcacertificatepath">SSLCACertificatePath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcarevocationfile">SSLCARevocationFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcarevocationpath">SSLCARevocationPath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcertificatechainfile">SSLCertificateChainFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcertificatefile">SSLCertificateFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcertificatekeyfile">SSLCertificateKeyFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslciphersuite">SSLCipherSuite</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslcryptodevice">SSLCryptoDevice</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslengine">SSLEngine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslhonorcipherorder">SSLHonorCipherOrder</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslmutex">SSLMutex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssloptions">SSLOptions</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslpassphrasedialog">SSLPassPhraseDialog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslprotocol">SSLProtocol</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxycacertificatefile">SSLProxyCACertificateFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxycacertificatepath">SSLProxyCACertificatePath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxycarevocationfile">SSLProxyCARevocationFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxycarevocationpath">SSLProxyCARevocationPath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxyciphersuite">SSLProxyCipherSuite</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxyengine">SSLProxyEngine</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxyprotocol">SSLProxyProtocol</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxyverify">SSLProxyVerify</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslproxyverifydepth">SSLProxyVerifyDepth</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslrandomseed">SSLRandomSeed</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslrequire">SSLRequire</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslrequiressl">SSLRequireSSL</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslsessioncache">SSLSessionCache</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslusername">SSLUserName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslverifyclient">SSLVerifyClient</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sslverifydepth">SSLVerifyDepth</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#envvars">Environment Variables</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#logformats">Custom Log Formats</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="envvars" id="envvars">Environment Variables</a></h2>
-
-<p>This module provides a lot of SSL information as additional environment
-variables to the SSI and CGI namespace. The generated variables are listed in
-the table below. For backward compatibility the information can
-be made available under different names, too. Look in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.</p>
-
-<table class="bordered">
-
-<tr>
- <th>Variable Name:</th>
- <th>Value Type:</th>
- <th>Description:</th>
-</tr>
-<tr><td><code>HTTPS</code></td> <td>flag</td> <td>HTTPS is being used.</td></tr>
-<tr><td><code>SSL_PROTOCOL</code></td> <td>string</td> <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
-<tr><td><code>SSL_SESSION_ID</code></td> <td>string</td> <td>The hex-encoded SSL session id</td></tr>
-<tr><td><code>SSL_CIPHER</code></td> <td>string</td> <td>The cipher specification name</td></tr>
-<tr><td><code>SSL_CIPHER_EXPORT</code></td> <td>string</td> <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr><td><code>SSL_CIPHER_USEKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (actually used)</td></tr>
-<tr><td><code>SSL_CIPHER_ALGKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (possible)</td></tr>
-<tr><td><code>SSL_VERSION_INTERFACE</code></td> <td>string</td> <td>The mod_ssl program version</td></tr>
-<tr><td><code>SSL_VERSION_LIBRARY</code></td> <td>string</td> <td>The OpenSSL program version</td></tr>
-<tr><td><code>SSL_CLIENT_M_VERSION</code></td> <td>string</td> <td>The version of the client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_M_SERIAL</code></td> <td>string</td> <td>The serial of the client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_S_DN</code></td> <td>string</td> <td>Subject DN in client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Subject DN</td></tr>
-<tr><td><code>SSL_CLIENT_I_DN</code></td> <td>string</td> <td>Issuer DN of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Issuer DN</td></tr>
-<tr><td><code>SSL_CLIENT_V_START</code></td> <td>string</td> <td>Validity of client's certificate (start time)</td></tr>
-<tr><td><code>SSL_CLIENT_V_END</code></td> <td>string</td> <td>Validity of client's certificate (end time)</td></tr>
-<tr><td><code>SSL_CLIENT_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_CERT</code></td> <td>string</td> <td>PEM-encoded client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_CHAIN_</code><em>n</em></td> <td>string</td> <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr><td><code>SSL_CLIENT_VERIFY</code></td> <td>string</td> <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
-<tr><td><code>SSL_SERVER_M_VERSION</code></td> <td>string</td> <td>The version of the server certificate</td></tr>
-<tr><td><code>SSL_SERVER_M_SERIAL</code></td> <td>string</td> <td>The serial of the server certificate</td></tr>
-<tr><td><code>SSL_SERVER_S_DN</code></td> <td>string</td> <td>Subject DN in server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Subject DN</td></tr>
-<tr><td><code>SSL_SERVER_I_DN</code></td> <td>string</td> <td>Issuer DN of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Issuer DN</td></tr>
-<tr><td><code>SSL_SERVER_V_START</code></td> <td>string</td> <td>Validity of server's certificate (start time)</td></tr>
-<tr><td><code>SSL_SERVER_V_END</code></td> <td>string</td> <td>Validity of server's certificate (end time)</td></tr>
-<tr><td><code>SSL_SERVER_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_CERT</code></td> <td>string</td> <td>PEM-encoded server certificate</td></tr>
-</table>
-
-<p><em>x509</em> specifies a component of an X.509 DN; one of
-<code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code>. In Apache 2.1 and
-later, <em>x509</em> may also include a numeric <code>_n</code>
-suffix. If the DN in question contains multiple attributes of the
-same name, this suffix is used as an index to select a particular
-attribute. For example, where the server certificate subject DN
-included two OU fields, <code>SSL_SERVER_S_DN_OU_0</code> and
-<code>SSL_SERVER_S_DN_OU_1</code> could be used to reference each.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logformats" id="logformats">Custom Log Formats</a></h2>
-
-<p>When <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is built into Apache or at least
-loaded (under DSO situation) additional functions exist for the <a href="mod_log_config.html#formats">Custom Log Format</a> of
-<code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. First there is an
-additional ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables
-provided by any module, especially those provided by mod_ssl which can
-you find in the above table.</p>
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided. Information about this function is provided in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
-<div class="example"><h3>Example</h3><p><code>
-CustomLog logs/ssl_request_log \
- "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-</code></p></div>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCACertificateFile" id="SSLCACertificateFile">SSLCACertificateFile</a> <a name="sslcacertificatefile" id="sslcacertificatefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of concatenated PEM-encoded CA Certificates
-for Client Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCACertificateFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
-with. These are used for Client Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to
-<code class="directive"><a href="#sslcacertificatepath">SSLCACertificatePath</a></code>.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCACertificatePath" id="SSLCACertificatePath">SSLCACertificatePath</a> <a name="sslcacertificatepath" id="sslcacertificatepath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory of PEM-encoded CA Certificates for
-Client Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCACertificatePath <em>directory-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose clients you deal with. These are used to
-verify the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<em>hash-value</em><code>.N</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCACertificatePath /usr/local/apache2/conf/ssl.crt/
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCARevocationFile" id="SSLCARevocationFile">SSLCARevocationFile</a> <a name="sslcarevocationfile" id="sslcarevocationfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of concatenated PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCARevocationFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the <em>all-in-one</em> file where you can
-assemble the Certificate Revocation Lists (CRL) of Certification
-Authorities (CA) whose <em>clients</em> you deal with. These are used
-for Client Authentication. Such a file is simply the concatenation of
-the various PEM-encoded CRL files, in order of preference. This can be
-used alternatively and/or additionally to <code class="directive"><a href="#sslcarevocationpath">SSLCARevocationPath</a></code>.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCARevocationFile /usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCARevocationPath" id="SSLCARevocationPath">SSLCARevocationPath</a> <a name="sslcarevocationpath" id="sslcarevocationpath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory of PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCARevocationPath <em>directory-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
-These are used to revoke the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> to accomplish this task.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCARevocationPath /usr/local/apache2/conf/ssl.crl/
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCertificateChainFile" id="SSLCertificateChainFile">SSLCertificateChainFile</a> <a name="sslcertificatechainfile" id="sslcertificatechainfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of PEM-encoded Server CA Certificates</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCertificateChainFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the optional <em>all-in-one</em> file where you can
-assemble the certificates of Certification Authorities (CA) which form the
-certificate chain of the server certificate. This starts with the issuing CA
-certificate of of the server certificate and can range up to the root CA
-certificate. Such a file is simply the concatenation of the various
-PEM-encoded CA Certificate files, usually in certificate chain order.</p>
-<p>
-This should be used alternatively and/or additionally to <code class="directive"><a href="#sslcacertificatepath">SSLCACertificatePath</a></code> for explicitly
-constructing the server certificate chain which is sent to the browser
-in addition to the server certificate. It is especially useful to
-avoid conflicts with CA certificates when using client
-authentication. Because although placing a CA certificate of the
-server certificate chain into <code class="directive"><a href="#sslcacertificatepath">SSLCACertificatePath</a></code> has the same effect
-for the certificate chain construction, it has the side-effect that
-client certificates issued by this same CA certificate are also
-accepted on client authentication. That's usually not one expect.</p>
-<p>
-But be careful: Providing the certificate chain works only if you are using a
-<em>single</em> (either RSA <em>or</em> DSA) based server certificate. If you are
-using a coupled RSA+DSA certificate pair, this will work only if actually both
-certificates use the <em>same</em> certificate chain. Else the browsers will be
-confused in this situation.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCertificateChainFile /usr/local/apache2/conf/ssl.crt/ca.crt
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCertificateFile" id="SSLCertificateFile">SSLCertificateFile</a> <a name="sslcertificatefile" id="sslcertificatefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Server PEM-encoded X.509 Certificate file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCertificateFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive points to the PEM-encoded Certificate file for the server and
-optionally also to the corresponding RSA or DSA Private Key file for it
-(contained in the same file). If the contained Private Key is encrypted the
-Pass Phrase dialog is forced at startup time. This directive can be used up to
-two times (referencing different filenames) when both a RSA and a DSA based
-server certificate is used in parallel.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCertificateKeyFile" id="SSLCertificateKeyFile">SSLCertificateKeyFile</a> <a name="sslcertificatekeyfile" id="sslcertificatekeyfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Server PEM-encoded Private Key file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCertificateKeyFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive points to the PEM-encoded Private Key file for the
-server. If the Private Key is not combined with the Certificate in the
-<code class="directive">SSLCertificateFile</code>, use this additional directive to
-point to the file with the stand-alone Private Key. When
-<code class="directive">SSLCertificateFile</code> is used and the file
-contains both the Certificate and the Private Key this directive need
-not be used. But we strongly discourage this practice. Instead we
-recommend you to separate the Certificate and the Private Key. If the
-contained Private Key is encrypted, the Pass Phrase dialog is forced
-at startup time. This directive can be used up to two times
-(referencing different filenames) when both a RSA and a DSA based
-private key is used in parallel.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCipherSuite" id="SSLCipherSuite">SSLCipherSuite</a> <a name="sslciphersuite" id="sslciphersuite">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Cipher Suite available for negotiation in SSL
-handshake</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCipherSuite <em>cipher-spec</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This complex directive uses a colon-separated <em>cipher-spec</em> string
-consisting of OpenSSL cipher specifications to configure the Cipher Suite the
-client is permitted to negotiate in the SSL handshake phase. Notice that this
-directive can be used both in per-server and per-directory context. In
-per-server context it applies to the standard SSL handshake when a connection
-is established. In per-directory context it forces a SSL renegotation with the
-reconfigured Cipher Suite after the HTTP request was read but before the HTTP
-response is sent.</p>
-<p>
-An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
-attributes plus a few extra minor ones:</p>
-<ul>
-<li><em>Key Exchange Algorithm</em>:<br />
- RSA or Diffie-Hellman variants.
-</li>
-<li><em>Authentication Algorithm</em>:<br />
- RSA, Diffie-Hellman, DSS or none.
-</li>
-<li><em>Cipher/Encryption Algorithm</em>:<br />
- DES, Triple-DES, RC4, RC2, IDEA or none.
-</li>
-<li><em>MAC Digest Algorithm</em>:<br />
- MD5, SHA or SHA1.
-</li>
-</ul>
-<p>An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
-cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
-one can either specify all the Ciphers, one at a time, or use aliases to
-specify the preference and order for the ciphers (see <a href="#table1">Table
-1</a>).</p>
-
-<table class="bordered">
-
-<tr><th>Tag</th> <th>Description</th></tr>
-<tr><td colspan="2"><em>Key Exchange Algorithm:</em></td></tr>
-<tr><td><code>kRSA</code></td> <td>RSA key exchange</td></tr>
-<tr><td><code>kDHr</code></td> <td>Diffie-Hellman key exchange with RSA key</td></tr>
-<tr><td><code>kDHd</code></td> <td>Diffie-Hellman key exchange with DSA key</td></tr>
-<tr><td><code>kEDH</code></td> <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td> </tr>
-<tr><td colspan="2"><em>Authentication Algorithm:</em></td></tr>
-<tr><td><code>aNULL</code></td> <td>No authentication</td></tr>
-<tr><td><code>aRSA</code></td> <td>RSA authentication</td></tr>
-<tr><td><code>aDSS</code></td> <td>DSS authentication</td> </tr>
-<tr><td><code>aDH</code></td> <td>Diffie-Hellman authentication</td></tr>
-<tr><td colspan="2"><em>Cipher Encoding Algorithm:</em></td></tr>
-<tr><td><code>eNULL</code></td> <td>No encoding</td> </tr>
-<tr><td><code>DES</code></td> <td>DES encoding</td> </tr>
-<tr><td><code>3DES</code></td> <td>Triple-DES encoding</td> </tr>
-<tr><td><code>RC4</code></td> <td>RC4 encoding</td> </tr>
-<tr><td><code>RC2</code></td> <td>RC2 encoding</td> </tr>
-<tr><td><code>IDEA</code></td> <td>IDEA encoding</td> </tr>
-<tr><td colspan="2"><em>MAC Digest Algorithm</em>:</td></tr>
-<tr><td><code>MD5</code></td> <td>MD5 hash function</td></tr>
-<tr><td><code>SHA1</code></td> <td>SHA1 hash function</td></tr>
-<tr><td><code>SHA</code></td> <td>SHA hash function</td> </tr>
-<tr><td colspan="2"><em>Aliases:</em></td></tr>
-<tr><td><code>SSLv2</code></td> <td>all SSL version 2.0 ciphers</td></tr>
-<tr><td><code>SSLv3</code></td> <td>all SSL version 3.0 ciphers</td> </tr>
-<tr><td><code>TLSv1</code></td> <td>all TLS version 1.0 ciphers</td> </tr>
-<tr><td><code>EXP</code></td> <td>all export ciphers</td> </tr>
-<tr><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td> </tr>
-<tr><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td> </tr>
-<tr><td><code>LOW</code></td> <td>all low strength ciphers (no export, single DES)</td></tr>
-<tr><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
-<tr><td><code>HIGH</code></td> <td>all ciphers using Triple-DES</td> </tr>
-<tr><td><code>RSA</code></td> <td>all ciphers using RSA key exchange</td> </tr>
-<tr><td><code>DH</code></td> <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
-<tr><td><code>EDH</code></td> <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
-<tr><td><code>ADH</code></td> <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
-<tr><td><code>DSS</code></td> <td>all ciphers using DSS authentication</td> </tr>
-<tr><td><code>NULL</code></td> <td>all ciphers using no encryption</td> </tr>
-</table>
-<p>
-Now where this becomes interesting is that these can be put together
-to specify the order and ciphers you wish to use. To speed this up
-there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
-HIGH</code>) for certain groups of ciphers. These tags can be joined
-together with prefixes to form the <em>cipher-spec</em>. Available
-prefixes are:</p>
-<ul>
-<li>none: add cipher to list</li>
-<li><code>+</code>: add ciphers to list and pull them to current location in list</li>
-<li><code>-</code>: remove cipher from list (can be added later again)</li>
-<li><code>!</code>: kill cipher from list completely (can <strong>not</strong> be added later again)</li>
-</ul>
-<p>A simpler way to look at all of this is to use the ``<code>openssl ciphers
--v</code>'' command which provides a nice way to successively create the
-correct <em>cipher-spec</em> string. The default <em>cipher-spec</em> string
-is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
-means the following: first, remove from consideration any ciphers that do not
-authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
-use ciphers using RC4 and RSA. Next include the high, medium and then the low
-security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
-end of the list.</p>
-<div class="example"><pre>
-$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
-NULL-SHA SSLv3 Kx=RSA Au=RSA Enc=None Mac=SHA1
-NULL-MD5 SSLv3 Kx=RSA Au=RSA Enc=None Mac=MD5
-EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
-... ... ... ... ...
-EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
-EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
-EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
-</pre></div>
-<p>The complete list of particular RSA &amp; DH ciphers for SSL is given in <a href="#table2">Table 2</a>.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
-</code></p></div>
-<table class="bordered">
-
-<tr><th>Cipher-Tag</th> <th>Protocol</th> <th>Key Ex.</th> <th>Auth.</th> <th>Enc.</th> <th>MAC</th> <th>Type</th> </tr>
-<tr><td colspan="7"><em>RSA Ciphers:</em></td></tr>
-<tr><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td /> </tr>
-<tr><td colspan="7"><em>Diffie-Hellman Ciphers:</em></td></tr>
-<tr><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td /> </tr>
-<tr><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td /> </tr>
-<tr><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
-</table>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLCryptoDevice" id="SSLCryptoDevice">SSLCryptoDevice</a> <a name="sslcryptodevice" id="sslcryptodevice">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable use of a cryptographic hardware accelerator</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLCryptoDevice <em>engine</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLCryptoDevice builtin</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available if mod_ssl is built using <code>-DSSL_ENGINE_EXPERIMENTAL</code></td></tr>
-</table>
-<p>
-This directive enables use of a cryptographic hardware accelerator
-board to offload some of the SSL processing overhead. This directive
-can only be used if the SSL toolkit is built with "engine" support;
-OpenSSL 0.9.7 and later releases have "engine" support by default, the
-separate "-engine" releases of OpenSSL 0.9.6 must be used.</p>
-
-<p>To discover which engine names are supported, run the command
-"<code>openssl engine</code>".</p>
-
-<div class="example"><h3>Example</h3><p><code>
-# For a Broadcom accelerator:<br />
-SSLCryptoDevice ubsec
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLEngine" id="SSLEngine">SSLEngine</a> <a name="sslengine" id="sslengine">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>SSL Engine Operation Switch</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLEngine on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLEngine off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine. This
-is usually used inside a <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> section to enable SSL/TLS for a
-particular virtual host. By default the SSL/TLS Protocol Engine is
-disabled for both the main server and all configured virtual hosts.</p>
-<div class="example"><h3>Example</h3><p><code>
-&lt;VirtualHost _default_:443&gt;<br />
-SSLEngine on<br />
-...<br />
-&lt;/VirtualHost&gt;
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLHonorCipherOrder" id="SSLHonorCipherOrder">SSLHonorCipherOrder</a> <a name="sslhonorcipherorder" id="sslhonorcipherorder">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Option to prefer the server's cipher preference order</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLHonorCiperOrder <em>flag</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later, if using OpenSSL 0.9.7 or later</td></tr>
-</table>
-<p>When choosing a cipher during an SSLv3 or TLSv1 handshake, normally
-the client's preference is used. If this directive is enabled, the
-server's preference will be used instead.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLHonorCipherOrder on
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLMutex" id="SSLMutex">SSLMutex</a> <a name="sslmutex" id="sslmutex">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Semaphore for internal mutual exclusion of
-operations</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLMutex <em>type</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLMutex none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This configures the SSL engine's semaphore (aka. lock) which is used for mutual
-exclusion of operations which have to be done in a synchronized way between the
-pre-forked Apache server processes. This directive can only be used in the
-global server context because it's only useful to have one global mutex.
-This directive is designed to closely match the
-<a href="http://httpd.apache.org/docs-2.0/mod/mpm_common.html#acceptmutex">AcceptMutex</a> directive</p>
-<p>
-The following Mutex <em>types</em> are available:</p>
-<ul>
-<li><code>none | no</code>
- <p>
- This is the default where no Mutex is used at all. Use it at your own
- risk. But because currently the Mutex is mainly used for synchronizing
- write access to the SSL Session Cache you can live without it as long
- as you accept a sometimes garbled Session Cache. So it's not recommended
- to leave this the default. Instead configure a real Mutex.</p></li>
-<li><code>posixsem</code>
- <p>
- This is an elegant Mutex variant where a Posix Semaphore is used when possible.
- It is only available when the underlying platform
- and APR supports it.</p></li>
-<li><code>sysvsem</code>
- <p>
- This is a somewhat elegant Mutex variant where a SystemV IPC Semaphore is used when
- possible. It is possible to "leak" SysV semaphores if processes crash before
- the semaphore is removed. It is only available when the underlying platform
- and APR supports it.</p></li>
-<li><code>sem</code>
- <p>
- This directive tells the SSL Module to pick the "best" semaphore implementation
- available to it, choosing between Posix and SystemV IPC, in that order. It is only
- available when the underlying platform and APR supports at least one of the 2.</p></li>
-<li><code>pthread</code>
- <p>
- This directive tells the SSL Module to use Posix thread mutexes. It is only available
- if the underlying platform and APR supports it.</p></li>
-<li><code>fcntl:/path/to/mutex</code>
- <p>
- This is a portable Mutex variant where a physical (lock-)file and the <code>fcntl()</code>
- fucntion are used as the Mutex.
- Always use a local disk filesystem for <code>/path/to/mutex</code> and never a file
- residing on a NFS- or AFS-filesystem. It is only available when the underlying platform
- and APR supports it. Note: Internally, the Process ID (PID) of the
- Apache parent process is automatically appended to
- <code>/path/to/mutex</code> to make it unique, so you don't have to worry
- about conflicts yourself. Notice that this type of mutex is not available
- under the Win32 environment. There you <em>have</em> to use the semaphore
- mutex.</p></li>
-<li><code>flock:/path/to/mutex</code>
- <p>
- This is similar to the <code>fcntl:/path/to/mutex</code> method with the
- exception that the <code>flock()</code> function is used to provide file
- locking. It is only available when the underlying platform
- and APR supports it.</p></li>
-<li><code>file:/path/to/mutex</code>
- <p>
- This directive tells the SSL Module to pick the "best" file locking implementation
- available to it, choosing between <code>fcntl</code> and <code>flock</code>,
- in that order. It is only available when the underlying platform and APR supports
- at least one of the 2.</p></li>
-<li><code>default | yes</code>
- <p>
- This directive tells the SSL Module to pick the default locking implementation
- as determined by the platform and APR.</p></li>
-</ul>
-<div class="example"><h3>Example</h3><p><code>
-SSLMutex file:/usr/local/apache/logs/ssl_mutex
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLOptions" id="SSLOptions">SSLOptions</a> <a name="ssloptions" id="ssloptions">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure various SSL engine run-time options</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLOptions [+|-]<em>option</em> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive can be used to control various run-time options on a
-per-directory basis. Normally, if multiple <code>SSLOptions</code>
-could apply to a directory, then the most specific one is taken
-completely; the options are not merged. However if <em>all</em> the
-options on the <code>SSLOptions</code> directive are preceded by a
-plus (<code>+</code>) or minus (<code>-</code>) symbol, the options
-are merged. Any options preceded by a <code>+</code> are added to the
-options currently in force, and any options preceded by a
-<code>-</code> are removed from the options currently in force.</p>
-<p>
-The available <em>option</em>s are:</p>
-<ul>
-<li><code>StdEnvVars</code>
- <p>
- When this option is enabled, the standard set of SSL related CGI/SSI
- environment variables are created. This per default is disabled for
- performance reasons, because the information extraction step is a
- rather expensive operation. So one usually enables this option for
- CGI and SSI requests only.</p>
-</li>
-<li><code>CompatEnvVars</code>
- <p>
- When this option is enabled, additional CGI/SSI environment variables are
- created for backward compatibility to other Apache SSL solutions. Look in
- the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details
- on the particular variables generated.</p>
-</li>
-<li><code>ExportCertData</code>
- <p>
- When this option is enabled, additional CGI/SSI environment variables are
- created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
- <code>SSL_CLIENT_CERT_CHAIN_</code><em>n</em> (with <em>n</em> = 0,1,2,..).
- These contain the PEM-encoded X.509 Certificates of server and client for
- the current HTTPS connection and can be used by CGI scripts for deeper
- Certificate checking. Additionally all other certificates of the client
- certificate chain are provided, too. This bloats up the environment a
- little bit which is why you have to use this option to enable it on
- demand.</p>
-</li>
-<li><code>FakeBasicAuth</code>
- <p>
- When this option is enabled, the Subject Distinguished Name (DN) of the
- Client X509 Certificate is translated into a HTTP Basic Authorization
- username. This means that the standard Apache authentication methods can
- be used for access control. The user name is just the Subject of the
- Client's X509 Certificate (can be determined by running OpenSSL's
- <code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
- </code><em>certificate</em><code>.crt</code>). Note that no password is
- obtained from the user. Every entry in the user file needs this password:
- ``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
- word `<code>password</code>''. Those who live under MD5-based encryption
- (for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
- hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.</p>
-</li>
-<li><code>StrictRequire</code>
- <p>
- This <em>forces</em> forbidden access when <code>SSLRequireSSL</code> or
- <code>SSLRequire</code> successfully decided that access should be
- forbidden. Usually the default is that in the case where a ``<code>Satisfy
- any</code>'' directive is used, and other access restrictions are passed,
- denial of access due to <code>SSLRequireSSL</code> or
- <code>SSLRequire</code> is overridden (because that's how the Apache
- <code>Satisfy</code> mechanism should work.) But for strict access restriction
- you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
- combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
- additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
- decided to deny access.</p>
-</li>
-<li><code>OptRenegotiate</code>
- <p>
- This enables optimized SSL connection renegotiation handling when SSL
- directives are used in per-directory context. By default a strict
- scheme is enabled where <em>every</em> per-directory reconfiguration of
- SSL parameters causes a <em>full</em> SSL renegotiation handshake. When this
- option is used mod_ssl tries to avoid unnecessary handshakes by doing more
- granular (but still safe) parameter checks. Nevertheless these granular
- checks sometimes maybe not what the user expects, so enable this on a
- per-directory basis only, please.</p>
-</li>
-</ul>
-<div class="example"><h3>Example</h3><p><code>
-SSLOptions +FakeBasicAuth -StrictRequire<br />
-&lt;Files ~ "\.(cgi|shtml)$"&gt;<br />
- SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData<br />
-&lt;Files&gt;
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLPassPhraseDialog" id="SSLPassPhraseDialog">SSLPassPhraseDialog</a> <a name="sslpassphrasedialog" id="sslpassphrasedialog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Type of pass phrase dialog for encrypted private
-keys</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLPassPhraseDialog <em>type</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLPassPhraseDialog builtin</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-When Apache starts up it has to read the various Certificate (see
-<code class="directive"><a href="#sslcertificatefile">SSLCertificateFile</a></code>) and
-Private Key (see <code class="directive"><a href="#sslcertificatekeyfile">SSLCertificateKeyFile</a></code>) files of the
-SSL-enabled virtual servers. Because for security reasons the Private
-Key files are usually encrypted, mod_ssl needs to query the
-administrator for a Pass Phrase in order to decrypt those files. This
-query can be done in two ways which can be configured by
-<em>type</em>:</p>
-<ul>
-<li><code>builtin</code>
- <p>
- This is the default where an interactive terminal dialog occurs at startup
- time just before Apache detaches from the terminal. Here the administrator
- has to manually enter the Pass Phrase for each encrypted Private Key file.
- Because a lot of SSL-enabled virtual hosts can be configured, the
- following reuse-scheme is used to minimize the dialog: When a Private Key
- file is encrypted, all known Pass Phrases (at the beginning there are
- none, of course) are tried. If one of those known Pass Phrases succeeds no
- dialog pops up for this particular Private Key file. If none succeeded,
- another Pass Phrase is queried on the terminal and remembered for the next
- round (where it perhaps can be reused).</p>
- <p>
- This scheme allows mod_ssl to be maximally flexible (because for N encrypted
- Private Key files you <em>can</em> use N different Pass Phrases - but then
- you have to enter all of them, of course) while minimizing the terminal
- dialog (i.e. when you use a single Pass Phrase for all N Private Key files
- this Pass Phrase is queried only once).</p></li>
-
-<li><code>exec:/path/to/program</code>
- <p>
- Here an external program is configured which is called at startup for each
- encrypted Private Key file. It is called with two arguments (the first is
- of the form ``<code>servername:portnumber</code>'', the second is either
- ``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
- server and algorithm it has to print the corresponding Pass Phrase to
- <code>stdout</code>. The intent is that this external program first runs
- security checks to make sure that the system is not compromised by an
- attacker, and only when these checks were passed successfully it provides
- the Pass Phrase.</p>
- <p>
- Both these security checks, and the way the Pass Phrase is determined, can
- be as complex as you like. Mod_ssl just defines the interface: an
- executable program which provides the Pass Phrase on <code>stdout</code>.
- Nothing more or less! So, if you're really paranoid about security, here
- is your interface. Anything else has to be left as an exercise to the
- administrator, because local security requirements are so different.</p>
- <p>
- The reuse-algorithm above is used here, too. In other words: The external
- program is called only once per unique Pass Phrase.</p></li>
-</ul>
-<div class="example"><h3>Example</h3><p><code>
-SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProtocol" id="SSLProtocol">SSLProtocol</a> <a name="sslprotocol" id="sslprotocol">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure usable SSL protocol flavors</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProtocol [+|-]<em>protocol</em> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLProtocol all</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment. Clients then can only connect
-with one of the provided protocols.</p>
-<p>
-The available (case-insensitive) <em>protocol</em>s are:</p>
-<ul>
-<li><code>SSLv2</code>
- <p>
- This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
- original SSL protocol as designed by Netscape Corporation.</p></li>
-
-<li><code>SSLv3</code>
- <p>
- This is the Secure Sockets Layer (SSL) protocol, version 3.0. It is the
- successor to SSLv2 and the currently (as of February 1999) de-facto
- standardized SSL protocol from Netscape Corporation. It's supported by
- almost all popular browsers.</p></li>
-
-<li><code>TLSv1</code>
- <p>
- This is the Transport Layer Security (TLS) protocol, version 1.0. It is the
- successor to SSLv3 and currently (as of February 1999) still under
- construction by the Internet Engineering Task Force (IETF). It's still
- not supported by any popular browsers.</p></li>
-
-<li><code>All</code>
- <p>
- This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
- convinient way for enabling all protocols except one when used in
- combination with the minus sign on a protocol as the example above
- shows.</p></li>
-</ul>
-<div class="example"><h3>Example</h3><p><code>
-# enable SSLv3 and TLSv1, but not SSLv2<br />
-SSLProtocol all -SSLv2
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyCACertificateFile" id="SSLProxyCACertificateFile">SSLProxyCACertificateFile</a> <a name="sslproxycacertificatefile" id="sslproxycacertificatefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyCACertificateFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>remote servers</em> you deal
-with. These are used for Remote Server Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to
-<code class="directive"><a href="#sslproxycacertificatepath">SSLProxyCACertificatePath</a></code>.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyCACertificateFile /usr/local/apache2/conf/ssl.crt/ca-bundle-remote-server.crt
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyCACertificatePath" id="SSLProxyCACertificatePath">SSLProxyCACertificatePath</a> <a name="sslproxycacertificatepath" id="sslproxycacertificatepath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory of PEM-encoded CA Certificates for
-Remote Server Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyCACertificatePath <em>directory-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose remote servers you deal with. These are used to
-verify the remote server certificate on Remote Server Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<em>hash-value</em><code>.N</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyCACertificatePath /usr/local/apache2/conf/ssl.crt/
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyCARevocationFile" id="SSLProxyCARevocationFile">SSLProxyCARevocationFile</a> <a name="sslproxycarevocationfile" id="sslproxycarevocationfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyCARevocationFile <em>file-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the <em>all-in-one</em> file where you can
-assemble the Certificate Revocation Lists (CRL) of Certification
-Authorities (CA) whose <em>remote servers</em> you deal with. These are used
-for Remote Server Authentication. Such a file is simply the concatenation of
-the various PEM-encoded CRL files, in order of preference. This can be
-used alternatively and/or additionally to <code class="directive"><a href="#sslproxycarevocationpath">SSLProxyCARevocationPath</a></code>.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyCARevocationFile /usr/local/apache2/conf/ssl.crl/ca-bundle-remote-server.crl
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyCARevocationPath" id="SSLProxyCARevocationPath">SSLProxyCARevocationPath</a> <a name="sslproxycarevocationpath" id="sslproxycarevocationpath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory of PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyCARevocationPath <em>directory-path</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose remote servers you deal with.
-These are used to revoke the remote server certificate on Remote Server Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> to accomplish this task.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyCARevocationPath /usr/local/apache2/conf/ssl.crl/
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyCipherSuite" id="SSLProxyCipherSuite">SSLProxyCipherSuite</a> <a name="sslproxyciphersuite" id="sslproxyciphersuite">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Cipher Suite available for negotiation in SSL
-proxy handshake</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyCipherSuite <em>cipher-spec</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>Equivalent to <code>SSLCipherSuite</code>, but for the proxy connection.
-Please refer to <code class="directive"><a href="#sslciphersuite">SSLCipherSuite</a></code>
-for additional information.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyEngine" id="SSLProxyEngine">SSLProxyEngine</a> <a name="sslproxyengine" id="sslproxyengine">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>SSL Proxy Engine Operation Switch</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyEngine on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLProxyEngine off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine for proxy. This
-is usually used inside a <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> section to enable SSL/TLS for proxy
-usage in a particular virtual host. By default the SSL/TLS Protocol Engine is
-disabled for proxy image both for the main server and all configured virtual hosts.</p>
-<div class="example"><h3>Example</h3><p><code>
-&lt;VirtualHost _default_:443&gt;<br />
-SSLProxyEngine on<br />
-...<br />
-&lt;/VirtualHost&gt;
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyMachineCertificateFile" id="SSLProxyMachineCertificateFile">SSLProxyMachineCertificateFile</a> <a name="sslproxymachinecertificatefile" id="sslproxymachinecertificatefile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyMachineCertificateFile <em>filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Not applicable</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the all-in-one file where you keep the certificates and
-keys used for authentication of the proxy server to remote servers.
-</p>
-<p>
-This referenced file is simply the concatenation of the various PEM-encoded
-certificate files, in order of preference. Use this directive alternatively
-or additionally to <code>SSLProxyMachineCertificatePath</code>.
-</p>
-<div class="warning">
-<p>Currently there is no support for encrypted private keys</p>
-</div>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyMachineCertificateFile /usr/local/apache2/conf/ssl.crt/proxy.pem
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyMachineCertificatePath" id="SSLProxyMachineCertificatePath">SSLProxyMachineCertificatePath</a> <a name="sslproxymachinecertificatepath" id="sslproxymachinecertificatepath">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyMachineCertificatePath <em>directory</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Not applicable</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the directory where you keep the certificates and
-keys used for authentication of the proxy server to remote servers.
-</p>
-<p>The files in this directory must be PEM-encoded and are accessed through
-hash filenames. Additionally, you must create symbolic links named
-<code><em>hash-value</em>.N</code>. And you should always make sure this
-directory contains the appropriate symbolic links. Use the Makefile which
-comes with mod_ssl to accomplish this task.
-</p>
-<div class="warning">
-<p>Currently there is no support for encrypted private keys</p>
-</div>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyMachineCertificatePath /usr/local/apache2/conf/proxy.crt/
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyProtocol" id="SSLProxyProtocol">SSLProxyProtocol</a> <a name="sslproxyprotocol" id="sslproxyprotocol">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyProtocol [+|-]<em>protocol</em> ...</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLProxyProtocol all</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment for proxy . It will only connect
-to servers using one of the provided protocols.</p>
-<p>Please refer to <code class="directive"><a href="#sslprotocol">SSLProtocol</a></code>
-for additional information.
-</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyVerify" id="SSLProxyVerify">SSLProxyVerify</a> <a name="sslproxyverify" id="sslproxyverify">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Type of remote server Certificate verification</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyVerify <em>level</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLProxyVerify none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the Certificate verification level for the remote server
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the remote server
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured remote server verification level after the HTTP request was read but
-before the HTTP response is sent.</p>
-<p>
-The following levels are available for <em>level</em>:</p>
-<ul>
-<li><strong>none</strong>:
- no remote server Certificate is required at all</li>
-<li><strong>optional</strong>:
- the remote server <em>may</em> present a valid Certificate</li>
-<li><strong>require</strong>:
- the remote server <em>has to</em> present a valid Certificate</li>
-<li><strong>optional_no_ca</strong>:
- the remote server may present a valid Certificate<br />
- but it need not to be (successfully) verifiable.</li>
-</ul>
-<p>In practice only levels <strong>none</strong> and
-<strong>require</strong> are really interesting, because level
-<strong>optional</strong> doesn't work with all servers and level
-<strong>optional_no_ca</strong> is actually against the idea of
-authentication (but can be used to establish SSL test pages, etc.)</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyVerify require
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLProxyVerifyDepth" id="SSLProxyVerifyDepth">SSLProxyVerifyDepth</a> <a name="sslproxyverifydepth" id="sslproxyverifydepth">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum depth of CA Certificates in Remote Server
-Certificate verification</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLProxyVerifyDepth <em>number</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLProxyVerifyDepth 1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-remote server does not have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured remote server verification depth after the
-HTTP request was read but before the HTTP response is sent.</p>
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the remote server certificate. A depth of 0 means that self-signed
-remote server certificates are accepted only, the default depth of 1 means
-the remote server certificate can be self-signed or has to be signed by a CA
-which is directly known to the server (i.e. the CA's certificate is under
-<code class="directive"><a href="#sslproxycacertificatepath">SSLProxyCACertificatePath</a></code>), etc.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLProxyVerifyDepth 10
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLRandomSeed" id="SSLRandomSeed">SSLRandomSeed</a> <a name="sslrandomseed" id="sslrandomseed">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Pseudo Random Number Generator (PRNG) seeding
-source</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This configures one or more sources for seeding the Pseudo Random Number
-Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
-<code>startup</code>) and/or just before a new SSL connection is established
-(<em>context</em> is <code>connect</code>). This directive can only be used
-in the global server context because the PRNG is a global facility.</p>
-<p>
-The following <em>source</em> variants are available:</p>
-<ul>
-<li><code>builtin</code>
- <p> This is the always available builtin seeding source. It's usage
- consumes minimum CPU cycles under runtime and hence can be always used
- without drawbacks. The source used for seeding the PRNG contains of the
- current time, the current process id and (when applicable) a randomly
- choosen 1KB extract of the inter-process scoreboard structure of Apache.
- The drawback is that this is not really a strong source and at startup
- time (where the scoreboard is still not available) this source just
- produces a few bytes of entropy. So you should always, at least for the
- startup, use an additional seeding source.</p></li>
-<li><code>file:/path/to/source</code>
- <p>
- This variant uses an external file <code>/path/to/source</code> as the
- source for seeding the PRNG. When <em>bytes</em> is specified, only the
- first <em>bytes</em> number of bytes of the file form the entropy (and
- <em>bytes</em> is given to <code>/path/to/source</code> as the first
- argument). When <em>bytes</em> is not specified the whole file forms the
- entropy (and <code>0</code> is given to <code>/path/to/source</code> as
- the first argument). Use this especially at startup time, for instance
- with an available <code>/dev/random</code> and/or
- <code>/dev/urandom</code> devices (which usually exist on modern Unix
- derivates like FreeBSD and Linux).</p>
- <p>
- <em>But be careful</em>: Usually <code>/dev/random</code> provides only as
- much entropy data as it actually has, i.e. when you request 512 bytes of
- entropy, but the device currently has only 100 bytes available two things
- can happen: On some platforms you receive only the 100 bytes while on
- other platforms the read blocks until enough bytes are available (which
- can take a long time). Here using an existing <code>/dev/urandom</code> is
- better, because it never blocks and actually gives the amount of requested
- data. The drawback is just that the quality of the received data may not
- be the best.</p>
- <p>
- On some platforms like FreeBSD one can even control how the entropy is
- actually generated, i.e. by which system interrupts. More details one can
- find under <em>rndcontrol(8)</em> on those platforms. Alternatively, when
- your system lacks such a random device, you can use tool
- like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
- (Entropy Gathering Daemon) and run it's client program with the
- <code>exec:/path/to/program/</code> variant (see below) or use
- <code>egd:/path/to/egd-socket</code> (see below).</p></li>
-
-<li><code>exec:/path/to/program</code>
- <p>
- This variant uses an external executable
- <code>/path/to/program</code> as the source for seeding the
- PRNG. When <em>bytes</em> is specified, only the first
- <em>bytes</em> number of bytes of its <code>stdout</code> contents
- form the entropy. When <em>bytes</em> is not specified, the
- entirety of the data produced on <code>stdout</code> form the
- entropy. Use this only at startup time when you need a very strong
- seeding with the help of an external program (for instance as in
- the example above with the <code>truerand</code> utility you can
- find in the mod_ssl distribution which is based on the AT&amp;T
- <em>truerand</em> library). Using this in the connection context
- slows down the server too dramatically, of course. So usually you
- should avoid using external programs in that context.</p></li>
-<li><code>egd:/path/to/egd-socket</code> (Unix only)
- <p>
- This variant uses the Unix domain socket of the
- external Entropy Gathering Daemon (EGD) (see <a href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
- /crypto/</a>) to seed the PRNG. Use this if no random device exists
- on your platform.</p></li>
-</ul>
-<div class="example"><h3>Example</h3><p><code>
-SSLRandomSeed startup builtin<br />
-SSLRandomSeed startup file:/dev/random<br />
-SSLRandomSeed startup file:/dev/urandom 1024<br />
-SSLRandomSeed startup exec:/usr/local/bin/truerand 16<br />
-SSLRandomSeed connect builtin<br />
-SSLRandomSeed connect file:/dev/random<br />
-SSLRandomSeed connect file:/dev/urandom 1024<br />
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLRequire" id="SSLRequire">SSLRequire</a> <a name="sslrequire" id="sslrequire">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allow access only when an arbitrarily complex
-boolean expression is true</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLRequire <em>expression</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive specifies a general access requirement which has to be
-fulfilled in order to allow access. It's a very powerful directive because the
-requirement specification is an arbitrarily complex boolean expression
-containing any number of access checks.</p>
-<p>
-The <em>expression</em> must match the following syntax (given as a BNF
-grammar notation):</p>
-<blockquote>
-<pre>
-expr ::= "<strong>true</strong>" | "<strong>false</strong>"
- | "<strong>!</strong>" expr
- | expr "<strong>&amp;&amp;</strong>" expr
- | expr "<strong>||</strong>" expr
- | "<strong>(</strong>" expr "<strong>)</strong>"
- | comp
-
-comp ::= word "<strong>==</strong>" word | word "<strong>eq</strong>" word
- | word "<strong>!=</strong>" word | word "<strong>ne</strong>" word
- | word "<strong>&lt;</strong>" word | word "<strong>lt</strong>" word
- | word "<strong>&lt;=</strong>" word | word "<strong>le</strong>" word
- | word "<strong>&gt;</strong>" word | word "<strong>gt</strong>" word
- | word "<strong>&gt;=</strong>" word | word "<strong>ge</strong>" word
- | word "<strong>in</strong>" "<strong>{</strong>" wordlist "<strong>}</strong>"
- | word "<strong>=~</strong>" regex
- | word "<strong>!~</strong>" regex
-
-wordlist ::= word
- | wordlist "<strong>,</strong>" word
-
-word ::= digit
- | cstring
- | variable
- | function
-
-digit ::= [0-9]+
-cstring ::= "..."
-variable ::= "<strong>%{</strong>" varname "<strong>}</strong>"
-function ::= funcname "<strong>(</strong>" funcargs "<strong>)</strong>"
-</pre>
-</blockquote>
-<p>while for <code>varname</code> any variable from <a href="#table3">Table 3</a> can be used. Finally for
-<code>funcname</code> the following functions are available:</p>
-<ul>
-<li><code>file(</code><em>filename</em><code>)</code>
- <p>
- This function takes one string argument and expands to the contents of the
- file. This is especially useful for matching this contents against a
- regular expression, etc.</p>
-</li>
-</ul>
-<p>Notice that <em>expression</em> is first parsed into an internal machine
-representation and then evaluated in a second step. Actually, in Global and
-Per-Server Class context <em>expression</em> is parsed at startup time and
-at runtime only the machine representation is executed. For Per-Directory
-context this is different: here <em>expression</em> has to be parsed and
-immediately executed for every request.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \<br />
- and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \<br />
- and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \<br />
- and %{TIME_WDAY} &gt;= 1 and %{TIME_WDAY} &lt;= 5 \<br />
- and %{TIME_HOUR} &gt;= 8 and %{TIME_HOUR} &lt;= 20 ) \<br />
- or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-</code></p></div>
-
-<p><em>Standard CGI/1.0 and Apache variables:</em></p>
-<pre>
-HTTP_USER_AGENT PATH_INFO AUTH_TYPE
-HTTP_REFERER QUERY_STRING SERVER_SOFTWARE
-HTTP_COOKIE REMOTE_HOST API_VERSION
-HTTP_FORWARDED REMOTE_IDENT TIME_YEAR
-HTTP_HOST IS_SUBREQ TIME_MON
-HTTP_PROXY_CONNECTION DOCUMENT_ROOT TIME_DAY
-HTTP_ACCEPT SERVER_ADMIN TIME_HOUR
-HTTP:headername SERVER_NAME TIME_MIN
-THE_REQUEST SERVER_PORT TIME_SEC
-REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY
-REQUEST_SCHEME REMOTE_ADDR TIME
-REQUEST_URI REMOTE_USER ENV:<strong>variablename</strong>
-REQUEST_FILENAME
-</pre>
-<p><em>SSL-related variables:</em></p>
-<pre>
-HTTPS SSL_CLIENT_M_VERSION SSL_SERVER_M_VERSION
- SSL_CLIENT_M_SERIAL SSL_SERVER_M_SERIAL
-SSL_PROTOCOL SSL_CLIENT_V_START SSL_SERVER_V_START
-SSL_SESSION_ID SSL_CLIENT_V_END SSL_SERVER_V_END
-SSL_CIPHER SSL_CLIENT_S_DN SSL_SERVER_S_DN
-SSL_CIPHER_EXPORT SSL_CLIENT_S_DN_C SSL_SERVER_S_DN_C
-SSL_CIPHER_ALGKEYSIZE SSL_CLIENT_S_DN_ST SSL_SERVER_S_DN_ST
-SSL_CIPHER_USEKEYSIZE SSL_CLIENT_S_DN_L SSL_SERVER_S_DN_L
-SSL_VERSION_LIBRARY SSL_CLIENT_S_DN_O SSL_SERVER_S_DN_O
-SSL_VERSION_INTERFACE SSL_CLIENT_S_DN_OU SSL_SERVER_S_DN_OU
- SSL_CLIENT_S_DN_CN SSL_SERVER_S_DN_CN
- SSL_CLIENT_S_DN_T SSL_SERVER_S_DN_T
- SSL_CLIENT_S_DN_I SSL_SERVER_S_DN_I
- SSL_CLIENT_S_DN_G SSL_SERVER_S_DN_G
- SSL_CLIENT_S_DN_S SSL_SERVER_S_DN_S
- SSL_CLIENT_S_DN_D SSL_SERVER_S_DN_D
- SSL_CLIENT_S_DN_UID SSL_SERVER_S_DN_UID
- SSL_CLIENT_S_DN_Email SSL_SERVER_S_DN_Email
- SSL_CLIENT_I_DN SSL_SERVER_I_DN
- SSL_CLIENT_I_DN_C SSL_SERVER_I_DN_C
- SSL_CLIENT_I_DN_ST SSL_SERVER_I_DN_ST
- SSL_CLIENT_I_DN_L SSL_SERVER_I_DN_L
- SSL_CLIENT_I_DN_O SSL_SERVER_I_DN_O
- SSL_CLIENT_I_DN_OU SSL_SERVER_I_DN_OU
- SSL_CLIENT_I_DN_CN SSL_SERVER_I_DN_CN
- SSL_CLIENT_I_DN_T SSL_SERVER_I_DN_T
- SSL_CLIENT_I_DN_I SSL_SERVER_I_DN_I
- SSL_CLIENT_I_DN_G SSL_SERVER_I_DN_G
- SSL_CLIENT_I_DN_S SSL_SERVER_I_DN_S
- SSL_CLIENT_I_DN_D SSL_SERVER_I_DN_D
- SSL_CLIENT_I_DN_UID SSL_SERVER_I_DN_UID
- SSL_CLIENT_I_DN_Email SSL_SERVER_I_DN_Email
- SSL_CLIENT_A_SIG SSL_SERVER_A_SIG
- SSL_CLIENT_A_KEY SSL_SERVER_A_KEY
- SSL_CLIENT_CERT SSL_SERVER_CERT
- SSL_CLIENT_CERT_CHAIN_<strong>n</strong>
- SSL_CLIENT_VERIFY
-</pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLRequireSSL" id="SSLRequireSSL">SSLRequireSSL</a> <a name="sslrequiressl" id="sslrequiressl">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Deny access when SSL is not used for the
-HTTP request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLRequireSSL</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
-the current connection. This is very handy inside the SSL-enabled virtual
-host or directories for defending against configuration errors that expose
-stuff that should be protected. When this directive is present all requests
-are denied which are not using SSL.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLRequireSSL
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLSessionCache" id="SSLSessionCache">SSLSessionCache</a> <a name="sslsessioncache" id="sslsessioncache">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Type of the global/inter-process SSL Session
-Cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLSessionCache <em>type</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLSessionCache none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This configures the storage type of the global/inter-process SSL Session
-Cache. This cache is an optional facility which speeds up parallel request
-processing. For requests to the same server process (via HTTP keep-alive),
-OpenSSL already caches the SSL session information locally. But because modern
-clients request inlined images and other data via parallel requests (usually
-up to four parallel requests are common) those requests are served by
-<em>different</em> pre-forked server processes. Here an inter-process cache
-helps to avoid unneccessary session handshakes.</p>
-<p>
-The following two storage <em>type</em>s are currently supported:</p>
-<ul>
-<li><code>none</code>
- <p>
- This is the default and just disables the global/inter-process Session
- Cache. There is no drawback in functionality, but a noticeable speed
- penalty can be observed.</p></li>
-<li><code>dbm:/path/to/datafile</code>
- <p>
- This makes use of a DBM hashfile on the local disk to synchronize the
- local OpenSSL memory caches of the server processes. The slight increase
- in I/O on the server results in a visible request speedup for your
- clients, so this type of storage is generally recommended.</p></li>
-<li><code>shm:/path/to/datafile</code>[<code>(</code><em>size</em><code>)</code>]
- <p>
- This makes use of a high-performance hash table (approx. <em>size</em> bytes
- in size) inside a shared memory segment in RAM (established via
- <code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
- caches of the server processes. This storage type is not available on all
- platforms.</p></li>
-</ul>
-<div class="example"><h3>Examples</h3><p><code>
-SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data<br />
-SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLSessionCacheTimeout" id="SSLSessionCacheTimeout">SSLSessionCacheTimeout</a> <a name="sslsessioncachetimeout" id="sslsessioncachetimeout">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of seconds before an SSL session expires
-in the Session Cache</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLSessionCacheTimeout <em>seconds</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLSessionCacheTimeout 300</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the timeout in seconds for the information stored in the
-global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
-It can be set as low as 15 for testing, but should be set to higher
-values like 300 in real life.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLSessionCacheTimeout 600
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLUserName" id="SSLUserName">SSLUserName</a> <a name="sslusername" id="sslusername">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Variable name to determine user name</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLUserName <em>varname</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr>
-</table>
-<p>
-This directive sets the "user" field in the Apache request object.
-This is used by lower modules to identify the user with a character
-string. In particular, this may cause the environment variable
-<code>REMOTE_USER</code> to be set. The <em>varname</em> can be
-any of the <a href="#envvars">SSL environment variables</a>.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLUserName SSL_CLIENT_S_DN_CN
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLVerifyClient" id="SSLVerifyClient">SSLVerifyClient</a> <a name="sslverifyclient" id="sslverifyclient">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Type of Client Certificate verification</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLVerifyClient <em>level</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLVerifyClient none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets the Certificate verification level for the Client
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the client
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured client verification level after the HTTP request was read but
-before the HTTP response is sent.</p>
-<p>
-The following levels are available for <em>level</em>:</p>
-<ul>
-<li><strong>none</strong>:
- no client Certificate is required at all</li>
-<li><strong>optional</strong>:
- the client <em>may</em> present a valid Certificate</li>
-<li><strong>require</strong>:
- the client <em>has to</em> present a valid Certificate</li>
-<li><strong>optional_no_ca</strong>:
- the client may present a valid Certificate<br />
- but it need not to be (successfully) verifiable.</li>
-</ul>
-<p>In practice only levels <strong>none</strong> and
-<strong>require</strong> are really interesting, because level
-<strong>optional</strong> doesn't work with all browsers and level
-<strong>optional_no_ca</strong> is actually against the idea of
-authentication (but can be used to establish SSL test pages, etc.)</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLVerifyClient require
-</code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SSLVerifyDepth" id="SSLVerifyDepth">SSLVerifyDepth</a> <a name="sslverifydepth" id="sslverifydepth">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum depth of CA Certificates in Client
-Certificate verification</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLVerifyDepth <em>number</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLVerifyDepth 1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
-</table>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-clients don't have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured client verification depth after the
-HTTP request was read but before the HTTP response is sent.</p>
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the client certificate. A depth of 0 means that self-signed client
-certificates are accepted only, the default depth of 1 means the client
-certificate can be self-signed or has to be signed by a CA which is directly
-known to the server (i.e. the CA's certificate is under
-<code class="directive"><a href="#sslcacertificatepath">SSLCACertificatePath</a></code>), etc.</p>
-<div class="example"><h3>Example</h3><p><code>
-SSLVerifyDepth 10
-</code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_ssl.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_ssl.xml b/docs/manual/mod/mod_ssl.xml
deleted file mode 100644
index ef1eb2d63e..0000000000
--- a/docs/manual/mod/mod_ssl.xml
+++ /dev/null
@@ -1,1559 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.28 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_ssl.xml.meta">
-
-<name>mod_ssl</name>
-<description>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</description>
-<status>Extension</status>
-<sourcefile>mod_ssl.c</sourcefile>
-<identifier>ssl_module</identifier>
-
-<summary>
-<p>This module provides SSL v2/v3 and TLS v1 support for the Apache
-HTTP Server. It was contributed by Ralf S. Engeschall based on his
-mod_ssl project and originally derived from work by Ben Laurie.</p>
-
-<p>This module relies on <a href="http://www.openssl.org/">OpenSSL</a>
-to provide the cryptography engine.</p>
-
-<p>Further details, discussion, and examples are provided in the
-<a href="../ssl/">SSL documentation</a>.</p>
-</summary>
-
-<section id="envvars"><title>Environment Variables</title>
-
-<p>This module provides a lot of SSL information as additional environment
-variables to the SSI and CGI namespace. The generated variables are listed in
-the table below. For backward compatibility the information can
-be made available under different names, too. Look in the <a
-href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.</p>
-
-<table border="1">
-<columnspec><column width=".3"/><column width=".2"/><column width=".5"/>
-</columnspec>
-<tr>
- <th>Variable Name:</th>
- <th>Value Type:</th>
- <th>Description:</th>
-</tr>
-<tr><td><code>HTTPS</code></td> <td>flag</td> <td>HTTPS is being used.</td></tr>
-<tr><td><code>SSL_PROTOCOL</code></td> <td>string</td> <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
-<tr><td><code>SSL_SESSION_ID</code></td> <td>string</td> <td>The hex-encoded SSL session id</td></tr>
-<tr><td><code>SSL_CIPHER</code></td> <td>string</td> <td>The cipher specification name</td></tr>
-<tr><td><code>SSL_CIPHER_EXPORT</code></td> <td>string</td> <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr><td><code>SSL_CIPHER_USEKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (actually used)</td></tr>
-<tr><td><code>SSL_CIPHER_ALGKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (possible)</td></tr>
-<tr><td><code>SSL_VERSION_INTERFACE</code></td> <td>string</td> <td>The mod_ssl program version</td></tr>
-<tr><td><code>SSL_VERSION_LIBRARY</code></td> <td>string</td> <td>The OpenSSL program version</td></tr>
-<tr><td><code>SSL_CLIENT_M_VERSION</code></td> <td>string</td> <td>The version of the client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_M_SERIAL</code></td> <td>string</td> <td>The serial of the client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_S_DN</code></td> <td>string</td> <td>Subject DN in client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Subject DN</td></tr>
-<tr><td><code>SSL_CLIENT_I_DN</code></td> <td>string</td> <td>Issuer DN of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Issuer DN</td></tr>
-<tr><td><code>SSL_CLIENT_V_START</code></td> <td>string</td> <td>Validity of client's certificate (start time)</td></tr>
-<tr><td><code>SSL_CLIENT_V_END</code></td> <td>string</td> <td>Validity of client's certificate (end time)</td></tr>
-<tr><td><code>SSL_CLIENT_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr><td><code>SSL_CLIENT_CERT</code></td> <td>string</td> <td>PEM-encoded client certificate</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_CHAIN_</code><em>n</em></td> <td>string</td> <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr><td><code>SSL_CLIENT_VERIFY</code></td> <td>string</td> <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
-<tr><td><code>SSL_SERVER_M_VERSION</code></td> <td>string</td> <td>The version of the server certificate</td></tr>
-<tr><td><code>SSL_SERVER_M_SERIAL</code></td> <td>string</td> <td>The serial of the server certificate</td></tr>
-<tr><td><code>SSL_SERVER_S_DN</code></td> <td>string</td> <td>Subject DN in server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Subject DN</td></tr>
-<tr><td><code>SSL_SERVER_I_DN</code></td> <td>string</td> <td>Issuer DN of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Issuer DN</td></tr>
-<tr><td><code>SSL_SERVER_V_START</code></td> <td>string</td> <td>Validity of server's certificate (start time)</td></tr>
-<tr><td><code>SSL_SERVER_V_END</code></td> <td>string</td> <td>Validity of server's certificate (end time)</td></tr>
-<tr><td><code>SSL_SERVER_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr><td><code>SSL_SERVER_CERT</code></td> <td>string</td> <td>PEM-encoded server certificate</td></tr>
-</table>
-
-<p><em>x509</em> specifies a component of an X.509 DN; one of
-<code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code>. In Apache 2.1 and
-later, <em>x509</em> may also include a numeric <code>_n</code>
-suffix. If the DN in question contains multiple attributes of the
-same name, this suffix is used as an index to select a particular
-attribute. For example, where the server certificate subject DN
-included two OU fields, <code>SSL_SERVER_S_DN_OU_0</code> and
-<code>SSL_SERVER_S_DN_OU_1</code> could be used to reference each.</p>
-
-</section>
-
-<section id="logformats"><title>Custom Log Formats</title>
-
-<p>When <module>mod_ssl</module> is built into Apache or at least
-loaded (under DSO situation) additional functions exist for the <a
-href="mod_log_config.html#formats">Custom Log Format</a> of
-<module>mod_log_config</module>. First there is an
-additional ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables
-provided by any module, especially those provided by mod_ssl which can
-you find in the above table.</p>
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided. Information about this function is provided in the <a
-href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
-<example><title>Example</title>
-CustomLog logs/ssl_request_log \
- "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-</example>
-</section>
-
-<directivesynopsis>
-<name>SSLPassPhraseDialog</name>
-<description>Type of pass phrase dialog for encrypted private
-keys</description>
-<syntax>SSLPassPhraseDialog <em>type</em></syntax>
-<default>SSLPassPhraseDialog builtin</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-When Apache starts up it has to read the various Certificate (see
-<directive module="mod_ssl">SSLCertificateFile</directive>) and
-Private Key (see <directive
-module="mod_ssl">SSLCertificateKeyFile</directive>) files of the
-SSL-enabled virtual servers. Because for security reasons the Private
-Key files are usually encrypted, mod_ssl needs to query the
-administrator for a Pass Phrase in order to decrypt those files. This
-query can be done in two ways which can be configured by
-<em>type</em>:</p>
-<ul>
-<li><code>builtin</code>
- <p>
- This is the default where an interactive terminal dialog occurs at startup
- time just before Apache detaches from the terminal. Here the administrator
- has to manually enter the Pass Phrase for each encrypted Private Key file.
- Because a lot of SSL-enabled virtual hosts can be configured, the
- following reuse-scheme is used to minimize the dialog: When a Private Key
- file is encrypted, all known Pass Phrases (at the beginning there are
- none, of course) are tried. If one of those known Pass Phrases succeeds no
- dialog pops up for this particular Private Key file. If none succeeded,
- another Pass Phrase is queried on the terminal and remembered for the next
- round (where it perhaps can be reused).</p>
- <p>
- This scheme allows mod_ssl to be maximally flexible (because for N encrypted
- Private Key files you <em>can</em> use N different Pass Phrases - but then
- you have to enter all of them, of course) while minimizing the terminal
- dialog (i.e. when you use a single Pass Phrase for all N Private Key files
- this Pass Phrase is queried only once).</p></li>
-
-<li><code>exec:/path/to/program</code>
- <p>
- Here an external program is configured which is called at startup for each
- encrypted Private Key file. It is called with two arguments (the first is
- of the form ``<code>servername:portnumber</code>'', the second is either
- ``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
- server and algorithm it has to print the corresponding Pass Phrase to
- <code>stdout</code>. The intent is that this external program first runs
- security checks to make sure that the system is not compromised by an
- attacker, and only when these checks were passed successfully it provides
- the Pass Phrase.</p>
- <p>
- Both these security checks, and the way the Pass Phrase is determined, can
- be as complex as you like. Mod_ssl just defines the interface: an
- executable program which provides the Pass Phrase on <code>stdout</code>.
- Nothing more or less! So, if you're really paranoid about security, here
- is your interface. Anything else has to be left as an exercise to the
- administrator, because local security requirements are so different.</p>
- <p>
- The reuse-algorithm above is used here, too. In other words: The external
- program is called only once per unique Pass Phrase.</p></li>
-</ul>
-<example><title>Example</title>
-SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLMutex</name>
-<description>Semaphore for internal mutual exclusion of
-operations</description>
-<syntax>SSLMutex <em>type</em></syntax>
-<default>SSLMutex none</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-This configures the SSL engine's semaphore (aka. lock) which is used for mutual
-exclusion of operations which have to be done in a synchronized way between the
-pre-forked Apache server processes. This directive can only be used in the
-global server context because it's only useful to have one global mutex.
-This directive is designed to closely match the
-<a href="http://httpd.apache.org/docs-2.0/mod/mpm_common.html#acceptmutex">AcceptMutex</a> directive</p>
-<p>
-The following Mutex <em>types</em> are available:</p>
-<ul>
-<li><code>none | no</code>
- <p>
- This is the default where no Mutex is used at all. Use it at your own
- risk. But because currently the Mutex is mainly used for synchronizing
- write access to the SSL Session Cache you can live without it as long
- as you accept a sometimes garbled Session Cache. So it's not recommended
- to leave this the default. Instead configure a real Mutex.</p></li>
-<li><code>posixsem</code>
- <p>
- This is an elegant Mutex variant where a Posix Semaphore is used when possible.
- It is only available when the underlying platform
- and APR supports it.</p></li>
-<li><code>sysvsem</code>
- <p>
- This is a somewhat elegant Mutex variant where a SystemV IPC Semaphore is used when
- possible. It is possible to "leak" SysV semaphores if processes crash before
- the semaphore is removed. It is only available when the underlying platform
- and APR supports it.</p></li>
-<li><code>sem</code>
- <p>
- This directive tells the SSL Module to pick the "best" semaphore implementation
- available to it, choosing between Posix and SystemV IPC, in that order. It is only
- available when the underlying platform and APR supports at least one of the 2.</p></li>
-<li><code>pthread</code>
- <p>
- This directive tells the SSL Module to use Posix thread mutexes. It is only available
- if the underlying platform and APR supports it.</p></li>
-<li><code>fcntl:/path/to/mutex</code>
- <p>
- This is a portable Mutex variant where a physical (lock-)file and the <code>fcntl()</code>
- fucntion are used as the Mutex.
- Always use a local disk filesystem for <code>/path/to/mutex</code> and never a file
- residing on a NFS- or AFS-filesystem. It is only available when the underlying platform
- and APR supports it. Note: Internally, the Process ID (PID) of the
- Apache parent process is automatically appended to
- <code>/path/to/mutex</code> to make it unique, so you don't have to worry
- about conflicts yourself. Notice that this type of mutex is not available
- under the Win32 environment. There you <em>have</em> to use the semaphore
- mutex.</p></li>
-<li><code>flock:/path/to/mutex</code>
- <p>
- This is similar to the <code>fcntl:/path/to/mutex</code> method with the
- exception that the <code>flock()</code> function is used to provide file
- locking. It is only available when the underlying platform
- and APR supports it.</p></li>
-<li><code>file:/path/to/mutex</code>
- <p>
- This directive tells the SSL Module to pick the "best" file locking implementation
- available to it, choosing between <code>fcntl</code> and <code>flock</code>,
- in that order. It is only available when the underlying platform and APR supports
- at least one of the 2.</p></li>
-<li><code>default | yes</code>
- <p>
- This directive tells the SSL Module to pick the default locking implementation
- as determined by the platform and APR.</p></li>
-</ul>
-<example><title>Example</title>
-SSLMutex file:/usr/local/apache/logs/ssl_mutex
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLRandomSeed</name>
-<description>Pseudo Random Number Generator (PRNG) seeding
-source</description>
-<syntax>SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-This configures one or more sources for seeding the Pseudo Random Number
-Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
-<code>startup</code>) and/or just before a new SSL connection is established
-(<em>context</em> is <code>connect</code>). This directive can only be used
-in the global server context because the PRNG is a global facility.</p>
-<p>
-The following <em>source</em> variants are available:</p>
-<ul>
-<li><code>builtin</code>
- <p> This is the always available builtin seeding source. It's usage
- consumes minimum CPU cycles under runtime and hence can be always used
- without drawbacks. The source used for seeding the PRNG contains of the
- current time, the current process id and (when applicable) a randomly
- choosen 1KB extract of the inter-process scoreboard structure of Apache.
- The drawback is that this is not really a strong source and at startup
- time (where the scoreboard is still not available) this source just
- produces a few bytes of entropy. So you should always, at least for the
- startup, use an additional seeding source.</p></li>
-<li><code>file:/path/to/source</code>
- <p>
- This variant uses an external file <code>/path/to/source</code> as the
- source for seeding the PRNG. When <em>bytes</em> is specified, only the
- first <em>bytes</em> number of bytes of the file form the entropy (and
- <em>bytes</em> is given to <code>/path/to/source</code> as the first
- argument). When <em>bytes</em> is not specified the whole file forms the
- entropy (and <code>0</code> is given to <code>/path/to/source</code> as
- the first argument). Use this especially at startup time, for instance
- with an available <code>/dev/random</code> and/or
- <code>/dev/urandom</code> devices (which usually exist on modern Unix
- derivates like FreeBSD and Linux).</p>
- <p>
- <em>But be careful</em>: Usually <code>/dev/random</code> provides only as
- much entropy data as it actually has, i.e. when you request 512 bytes of
- entropy, but the device currently has only 100 bytes available two things
- can happen: On some platforms you receive only the 100 bytes while on
- other platforms the read blocks until enough bytes are available (which
- can take a long time). Here using an existing <code>/dev/urandom</code> is
- better, because it never blocks and actually gives the amount of requested
- data. The drawback is just that the quality of the received data may not
- be the best.</p>
- <p>
- On some platforms like FreeBSD one can even control how the entropy is
- actually generated, i.e. by which system interrupts. More details one can
- find under <em>rndcontrol(8)</em> on those platforms. Alternatively, when
- your system lacks such a random device, you can use tool
- like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
- (Entropy Gathering Daemon) and run it's client program with the
- <code>exec:/path/to/program/</code> variant (see below) or use
- <code>egd:/path/to/egd-socket</code> (see below).</p></li>
-
-<li><code>exec:/path/to/program</code>
- <p>
- This variant uses an external executable
- <code>/path/to/program</code> as the source for seeding the
- PRNG. When <em>bytes</em> is specified, only the first
- <em>bytes</em> number of bytes of its <code>stdout</code> contents
- form the entropy. When <em>bytes</em> is not specified, the
- entirety of the data produced on <code>stdout</code> form the
- entropy. Use this only at startup time when you need a very strong
- seeding with the help of an external program (for instance as in
- the example above with the <code>truerand</code> utility you can
- find in the mod_ssl distribution which is based on the AT&amp;T
- <em>truerand</em> library). Using this in the connection context
- slows down the server too dramatically, of course. So usually you
- should avoid using external programs in that context.</p></li>
-<li><code>egd:/path/to/egd-socket</code> (Unix only)
- <p>
- This variant uses the Unix domain socket of the
- external Entropy Gathering Daemon (EGD) (see <a
- href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
- /crypto/</a>) to seed the PRNG. Use this if no random device exists
- on your platform.</p></li>
-</ul>
-<example><title>Example</title>
-SSLRandomSeed startup builtin<br />
-SSLRandomSeed startup file:/dev/random<br />
-SSLRandomSeed startup file:/dev/urandom 1024<br />
-SSLRandomSeed startup exec:/usr/local/bin/truerand 16<br />
-SSLRandomSeed connect builtin<br />
-SSLRandomSeed connect file:/dev/random<br />
-SSLRandomSeed connect file:/dev/urandom 1024<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLSessionCache</name>
-<description>Type of the global/inter-process SSL Session
-Cache</description>
-<syntax>SSLSessionCache <em>type</em></syntax>
-<default>SSLSessionCache none</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-This configures the storage type of the global/inter-process SSL Session
-Cache. This cache is an optional facility which speeds up parallel request
-processing. For requests to the same server process (via HTTP keep-alive),
-OpenSSL already caches the SSL session information locally. But because modern
-clients request inlined images and other data via parallel requests (usually
-up to four parallel requests are common) those requests are served by
-<em>different</em> pre-forked server processes. Here an inter-process cache
-helps to avoid unneccessary session handshakes.</p>
-<p>
-The following two storage <em>type</em>s are currently supported:</p>
-<ul>
-<li><code>none</code>
- <p>
- This is the default and just disables the global/inter-process Session
- Cache. There is no drawback in functionality, but a noticeable speed
- penalty can be observed.</p></li>
-<li><code>dbm:/path/to/datafile</code>
- <p>
- This makes use of a DBM hashfile on the local disk to synchronize the
- local OpenSSL memory caches of the server processes. The slight increase
- in I/O on the server results in a visible request speedup for your
- clients, so this type of storage is generally recommended.</p></li>
-<li><code>shm:/path/to/datafile</code>[<code>(</code><em>size</em><code>)</code>]
- <p>
- This makes use of a high-performance hash table (approx. <em>size</em> bytes
- in size) inside a shared memory segment in RAM (established via
- <code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
- caches of the server processes. This storage type is not available on all
- platforms.</p></li>
-</ul>
-<example><title>Examples</title>
-SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data<br />
-SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLSessionCacheTimeout</name>
-<description>Number of seconds before an SSL session expires
-in the Session Cache</description>
-<syntax>SSLSessionCacheTimeout <em>seconds</em></syntax>
-<default>SSLSessionCacheTimeout 300</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the timeout in seconds for the information stored in the
-global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
-It can be set as low as 15 for testing, but should be set to higher
-values like 300 in real life.</p>
-<example><title>Example</title>
-SSLSessionCacheTimeout 600
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLEngine</name>
-<description>SSL Engine Operation Switch</description>
-<syntax>SSLEngine on|off</syntax>
-<default>SSLEngine off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine. This
-is usually used inside a <directive module="core"
-type="section">VirtualHost</directive> section to enable SSL/TLS for a
-particular virtual host. By default the SSL/TLS Protocol Engine is
-disabled for both the main server and all configured virtual hosts.</p>
-<example><title>Example</title>
-&lt;VirtualHost _default_:443&gt;<br />
-SSLEngine on<br />
-...<br />
-&lt;/VirtualHost&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProtocol</name>
-<description>Configure usable SSL protocol flavors</description>
-<syntax>SSLProtocol [+|-]<em>protocol</em> ...</syntax>
-<default>SSLProtocol all</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<override>Options</override>
-
-<usage><!-- XXX Why does this have an override and not .htaccess context? -->
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment. Clients then can only connect
-with one of the provided protocols.</p>
-<p>
-The available (case-insensitive) <em>protocol</em>s are:</p>
-<ul>
-<li><code>SSLv2</code>
- <p>
- This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
- original SSL protocol as designed by Netscape Corporation.</p></li>
-
-<li><code>SSLv3</code>
- <p>
- This is the Secure Sockets Layer (SSL) protocol, version 3.0. It is the
- successor to SSLv2 and the currently (as of February 1999) de-facto
- standardized SSL protocol from Netscape Corporation. It's supported by
- almost all popular browsers.</p></li>
-
-<li><code>TLSv1</code>
- <p>
- This is the Transport Layer Security (TLS) protocol, version 1.0. It is the
- successor to SSLv3 and currently (as of February 1999) still under
- construction by the Internet Engineering Task Force (IETF). It's still
- not supported by any popular browsers.</p></li>
-
-<li><code>All</code>
- <p>
- This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
- convinient way for enabling all protocols except one when used in
- combination with the minus sign on a protocol as the example above
- shows.</p></li>
-</ul>
-<example><title>Example</title>
-# enable SSLv3 and TLSv1, but not SSLv2<br />
-SSLProtocol all -SSLv2
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCipherSuite</name>
-<description>Cipher Suite available for negotiation in SSL
-handshake</description>
-<syntax>SSLCipherSuite <em>cipher-spec</em></syntax>
-<default>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This complex directive uses a colon-separated <em>cipher-spec</em> string
-consisting of OpenSSL cipher specifications to configure the Cipher Suite the
-client is permitted to negotiate in the SSL handshake phase. Notice that this
-directive can be used both in per-server and per-directory context. In
-per-server context it applies to the standard SSL handshake when a connection
-is established. In per-directory context it forces a SSL renegotation with the
-reconfigured Cipher Suite after the HTTP request was read but before the HTTP
-response is sent.</p>
-<p>
-An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
-attributes plus a few extra minor ones:</p>
-<ul>
-<li><em>Key Exchange Algorithm</em>:<br />
- RSA or Diffie-Hellman variants.
-</li>
-<li><em>Authentication Algorithm</em>:<br />
- RSA, Diffie-Hellman, DSS or none.
-</li>
-<li><em>Cipher/Encryption Algorithm</em>:<br />
- DES, Triple-DES, RC4, RC2, IDEA or none.
-</li>
-<li><em>MAC Digest Algorithm</em>:<br />
- MD5, SHA or SHA1.
-</li>
-</ul>
-<p>An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
-cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
-one can either specify all the Ciphers, one at a time, or use aliases to
-specify the preference and order for the ciphers (see <a href="#table1">Table
-1</a>).</p>
-
-<table border="1">
-<columnspec><column width=".5"/><column width=".5"/></columnspec>
-<tr><th>Tag</th> <th>Description</th></tr>
-<tr><td colspan="2"><em>Key Exchange Algorithm:</em></td></tr>
-<tr><td><code>kRSA</code></td> <td>RSA key exchange</td></tr>
-<tr><td><code>kDHr</code></td> <td>Diffie-Hellman key exchange with RSA key</td></tr>
-<tr><td><code>kDHd</code></td> <td>Diffie-Hellman key exchange with DSA key</td></tr>
-<tr><td><code>kEDH</code></td> <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td> </tr>
-<tr><td colspan="2"><em>Authentication Algorithm:</em></td></tr>
-<tr><td><code>aNULL</code></td> <td>No authentication</td></tr>
-<tr><td><code>aRSA</code></td> <td>RSA authentication</td></tr>
-<tr><td><code>aDSS</code></td> <td>DSS authentication</td> </tr>
-<tr><td><code>aDH</code></td> <td>Diffie-Hellman authentication</td></tr>
-<tr><td colspan="2"><em>Cipher Encoding Algorithm:</em></td></tr>
-<tr><td><code>eNULL</code></td> <td>No encoding</td> </tr>
-<tr><td><code>DES</code></td> <td>DES encoding</td> </tr>
-<tr><td><code>3DES</code></td> <td>Triple-DES encoding</td> </tr>
-<tr><td><code>RC4</code></td> <td>RC4 encoding</td> </tr>
-<tr><td><code>RC2</code></td> <td>RC2 encoding</td> </tr>
-<tr><td><code>IDEA</code></td> <td>IDEA encoding</td> </tr>
-<tr><td colspan="2"><em>MAC Digest Algorithm</em>:</td></tr>
-<tr><td><code>MD5</code></td> <td>MD5 hash function</td></tr>
-<tr><td><code>SHA1</code></td> <td>SHA1 hash function</td></tr>
-<tr><td><code>SHA</code></td> <td>SHA hash function</td> </tr>
-<tr><td colspan="2"><em>Aliases:</em></td></tr>
-<tr><td><code>SSLv2</code></td> <td>all SSL version 2.0 ciphers</td></tr>
-<tr><td><code>SSLv3</code></td> <td>all SSL version 3.0 ciphers</td> </tr>
-<tr><td><code>TLSv1</code></td> <td>all TLS version 1.0 ciphers</td> </tr>
-<tr><td><code>EXP</code></td> <td>all export ciphers</td> </tr>
-<tr><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td> </tr>
-<tr><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td> </tr>
-<tr><td><code>LOW</code></td> <td>all low strength ciphers (no export, single DES)</td></tr>
-<tr><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
-<tr><td><code>HIGH</code></td> <td>all ciphers using Triple-DES</td> </tr>
-<tr><td><code>RSA</code></td> <td>all ciphers using RSA key exchange</td> </tr>
-<tr><td><code>DH</code></td> <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
-<tr><td><code>EDH</code></td> <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
-<tr><td><code>ADH</code></td> <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
-<tr><td><code>DSS</code></td> <td>all ciphers using DSS authentication</td> </tr>
-<tr><td><code>NULL</code></td> <td>all ciphers using no encryption</td> </tr>
-</table>
-<p>
-Now where this becomes interesting is that these can be put together
-to specify the order and ciphers you wish to use. To speed this up
-there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
-HIGH</code>) for certain groups of ciphers. These tags can be joined
-together with prefixes to form the <em>cipher-spec</em>. Available
-prefixes are:</p>
-<ul>
-<li>none: add cipher to list</li>
-<li><code>+</code>: add ciphers to list and pull them to current location in list</li>
-<li><code>-</code>: remove cipher from list (can be added later again)</li>
-<li><code>!</code>: kill cipher from list completely (can <strong>not</strong> be added later again)</li>
-</ul>
-<p>A simpler way to look at all of this is to use the ``<code>openssl ciphers
--v</code>'' command which provides a nice way to successively create the
-correct <em>cipher-spec</em> string. The default <em>cipher-spec</em> string
-is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
-means the following: first, remove from consideration any ciphers that do not
-authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
-use ciphers using RC4 and RSA. Next include the high, medium and then the low
-security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
-end of the list.</p>
-<example>
-<pre>
-$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
-NULL-SHA SSLv3 Kx=RSA Au=RSA Enc=None Mac=SHA1
-NULL-MD5 SSLv3 Kx=RSA Au=RSA Enc=None Mac=MD5
-EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
-... ... ... ... ...
-EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
-EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
-EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
-</pre>
-</example>
-<p>The complete list of particular RSA &amp; DH ciphers for SSL is given in <a
-href="#table2">Table 2</a>.</p>
-<example><title>Example</title>
-SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
-</example>
-<table border="1">
-<columnspec><column width=".3"/><column width=".1"/><column width=".13"/>
-<column width=".1"/><column width=".13"/><column width=".1"/>
-<column width=".13"/></columnspec>
-<tr><th>Cipher-Tag</th> <th>Protocol</th> <th>Key Ex.</th> <th>Auth.</th> <th>Enc.</th> <th>MAC</th> <th>Type</th> </tr>
-<tr><td colspan="7"><em>RSA Ciphers:</em></td></tr>
-<tr><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
-<tr><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td></td> </tr>
-<tr><td colspan="7"><em>Diffie-Hellman Ciphers:</em></td></tr>
-<tr><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td></td> </tr>
-<tr><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td></td> </tr>
-<tr><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
-</table>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCertificateFile</name>
-<description>Server PEM-encoded X.509 Certificate file</description>
-<syntax>SSLCertificateFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive points to the PEM-encoded Certificate file for the server and
-optionally also to the corresponding RSA or DSA Private Key file for it
-(contained in the same file). If the contained Private Key is encrypted the
-Pass Phrase dialog is forced at startup time. This directive can be used up to
-two times (referencing different filenames) when both a RSA and a DSA based
-server certificate is used in parallel.</p>
-<example><title>Example</title>
-SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCertificateKeyFile</name>
-<description>Server PEM-encoded Private Key file</description>
-<syntax>SSLCertificateKeyFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive points to the PEM-encoded Private Key file for the
-server. If the Private Key is not combined with the Certificate in the
-<directive>SSLCertificateFile</directive>, use this additional directive to
-point to the file with the stand-alone Private Key. When
-<directive>SSLCertificateFile</directive> is used and the file
-contains both the Certificate and the Private Key this directive need
-not be used. But we strongly discourage this practice. Instead we
-recommend you to separate the Certificate and the Private Key. If the
-contained Private Key is encrypted, the Pass Phrase dialog is forced
-at startup time. This directive can be used up to two times
-(referencing different filenames) when both a RSA and a DSA based
-private key is used in parallel.</p>
-<example><title>Example</title>
-SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCertificateChainFile</name>
-<description>File of PEM-encoded Server CA Certificates</description>
-<syntax>SSLCertificateChainFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the optional <em>all-in-one</em> file where you can
-assemble the certificates of Certification Authorities (CA) which form the
-certificate chain of the server certificate. This starts with the issuing CA
-certificate of of the server certificate and can range up to the root CA
-certificate. Such a file is simply the concatenation of the various
-PEM-encoded CA Certificate files, usually in certificate chain order.</p>
-<p>
-This should be used alternatively and/or additionally to <directive
-module="mod_ssl">SSLCACertificatePath</directive> for explicitly
-constructing the server certificate chain which is sent to the browser
-in addition to the server certificate. It is especially useful to
-avoid conflicts with CA certificates when using client
-authentication. Because although placing a CA certificate of the
-server certificate chain into <directive
-module="mod_ssl">SSLCACertificatePath</directive> has the same effect
-for the certificate chain construction, it has the side-effect that
-client certificates issued by this same CA certificate are also
-accepted on client authentication. That's usually not one expect.</p>
-<p>
-But be careful: Providing the certificate chain works only if you are using a
-<em>single</em> (either RSA <em>or</em> DSA) based server certificate. If you are
-using a coupled RSA+DSA certificate pair, this will work only if actually both
-certificates use the <em>same</em> certificate chain. Else the browsers will be
-confused in this situation.</p>
-<example><title>Example</title>
-SSLCertificateChainFile /usr/local/apache2/conf/ssl.crt/ca.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCACertificatePath</name>
-<description>Directory of PEM-encoded CA Certificates for
-Client Auth</description>
-<syntax>SSLCACertificatePath <em>directory-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose clients you deal with. These are used to
-verify the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<em>hash-value</em><code>.N</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.</p>
-<example><title>Example</title>
-SSLCACertificatePath /usr/local/apache2/conf/ssl.crt/
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCACertificateFile</name>
-<description>File of concatenated PEM-encoded CA Certificates
-for Client Auth</description>
-<syntax>SSLCACertificateFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
-with. These are used for Client Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to
-<directive module="mod_ssl">SSLCACertificatePath</directive>.</p>
-<example><title>Example</title>
-SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCARevocationPath</name>
-<description>Directory of PEM-encoded CA CRLs for
-Client Auth</description>
-<syntax>SSLCARevocationPath <em>directory-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
-These are used to revoke the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with <module>mod_ssl</module> to accomplish this task.</p>
-<example><title>Example</title>
-SSLCARevocationPath /usr/local/apache2/conf/ssl.crl/
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCARevocationFile</name>
-<description>File of concatenated PEM-encoded CA CRLs for
-Client Auth</description>
-<syntax>SSLCARevocationFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can
-assemble the Certificate Revocation Lists (CRL) of Certification
-Authorities (CA) whose <em>clients</em> you deal with. These are used
-for Client Authentication. Such a file is simply the concatenation of
-the various PEM-encoded CRL files, in order of preference. This can be
-used alternatively and/or additionally to <directive
-module="mod_ssl">SSLCARevocationPath</directive>.</p>
-<example><title>Example</title>
-SSLCARevocationFile /usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLVerifyClient</name>
-<description>Type of Client Certificate verification</description>
-<syntax>SSLVerifyClient <em>level</em></syntax>
-<default>SSLVerifyClient none</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive sets the Certificate verification level for the Client
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the client
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured client verification level after the HTTP request was read but
-before the HTTP response is sent.</p>
-<p>
-The following levels are available for <em>level</em>:</p>
-<ul>
-<li><strong>none</strong>:
- no client Certificate is required at all</li>
-<li><strong>optional</strong>:
- the client <em>may</em> present a valid Certificate</li>
-<li><strong>require</strong>:
- the client <em>has to</em> present a valid Certificate</li>
-<li><strong>optional_no_ca</strong>:
- the client may present a valid Certificate<br />
- but it need not to be (successfully) verifiable.</li>
-</ul>
-<p>In practice only levels <strong>none</strong> and
-<strong>require</strong> are really interesting, because level
-<strong>optional</strong> doesn't work with all browsers and level
-<strong>optional_no_ca</strong> is actually against the idea of
-authentication (but can be used to establish SSL test pages, etc.)</p>
-<example><title>Example</title>
-SSLVerifyClient require
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLVerifyDepth</name>
-<description>Maximum depth of CA Certificates in Client
-Certificate verification</description>
-<syntax>SSLVerifyDepth <em>number</em></syntax>
-<default>SSLVerifyDepth 1</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-clients don't have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured client verification depth after the
-HTTP request was read but before the HTTP response is sent.</p>
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the client certificate. A depth of 0 means that self-signed client
-certificates are accepted only, the default depth of 1 means the client
-certificate can be self-signed or has to be signed by a CA which is directly
-known to the server (i.e. the CA's certificate is under
-<directive module="mod_ssl">SSLCACertificatePath</directive>), etc.</p>
-<example><title>Example</title>
-SSLVerifyDepth 10
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLOptions</name>
-<description>Configure various SSL engine run-time options</description>
-<syntax>SSLOptions [+|-]<em>option</em> ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Options</override>
-
-<usage>
-<p>
-This directive can be used to control various run-time options on a
-per-directory basis. Normally, if multiple <code>SSLOptions</code>
-could apply to a directory, then the most specific one is taken
-completely; the options are not merged. However if <em>all</em> the
-options on the <code>SSLOptions</code> directive are preceded by a
-plus (<code>+</code>) or minus (<code>-</code>) symbol, the options
-are merged. Any options preceded by a <code>+</code> are added to the
-options currently in force, and any options preceded by a
-<code>-</code> are removed from the options currently in force.</p>
-<p>
-The available <em>option</em>s are:</p>
-<ul>
-<li><code>StdEnvVars</code>
- <p>
- When this option is enabled, the standard set of SSL related CGI/SSI
- environment variables are created. This per default is disabled for
- performance reasons, because the information extraction step is a
- rather expensive operation. So one usually enables this option for
- CGI and SSI requests only.</p>
-</li>
-<li><code>CompatEnvVars</code>
- <p>
- When this option is enabled, additional CGI/SSI environment variables are
- created for backward compatibility to other Apache SSL solutions. Look in
- the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details
- on the particular variables generated.</p>
-</li>
-<li><code>ExportCertData</code>
- <p>
- When this option is enabled, additional CGI/SSI environment variables are
- created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
- <code>SSL_CLIENT_CERT_CHAIN_</code><em>n</em> (with <em>n</em> = 0,1,2,..).
- These contain the PEM-encoded X.509 Certificates of server and client for
- the current HTTPS connection and can be used by CGI scripts for deeper
- Certificate checking. Additionally all other certificates of the client
- certificate chain are provided, too. This bloats up the environment a
- little bit which is why you have to use this option to enable it on
- demand.</p>
-</li>
-<li><code>FakeBasicAuth</code>
- <p>
- When this option is enabled, the Subject Distinguished Name (DN) of the
- Client X509 Certificate is translated into a HTTP Basic Authorization
- username. This means that the standard Apache authentication methods can
- be used for access control. The user name is just the Subject of the
- Client's X509 Certificate (can be determined by running OpenSSL's
- <code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
- </code><em>certificate</em><code>.crt</code>). Note that no password is
- obtained from the user. Every entry in the user file needs this password:
- ``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
- word `<code>password</code>''. Those who live under MD5-based encryption
- (for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
- hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.</p>
-</li>
-<li><code>StrictRequire</code>
- <p>
- This <em>forces</em> forbidden access when <code>SSLRequireSSL</code> or
- <code>SSLRequire</code> successfully decided that access should be
- forbidden. Usually the default is that in the case where a ``<code>Satisfy
- any</code>'' directive is used, and other access restrictions are passed,
- denial of access due to <code>SSLRequireSSL</code> or
- <code>SSLRequire</code> is overridden (because that's how the Apache
- <code>Satisfy</code> mechanism should work.) But for strict access restriction
- you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
- combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
- additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
- decided to deny access.</p>
-</li>
-<li><code>OptRenegotiate</code>
- <p>
- This enables optimized SSL connection renegotiation handling when SSL
- directives are used in per-directory context. By default a strict
- scheme is enabled where <em>every</em> per-directory reconfiguration of
- SSL parameters causes a <em>full</em> SSL renegotiation handshake. When this
- option is used mod_ssl tries to avoid unnecessary handshakes by doing more
- granular (but still safe) parameter checks. Nevertheless these granular
- checks sometimes maybe not what the user expects, so enable this on a
- per-directory basis only, please.</p>
-</li>
-</ul>
-<example><title>Example</title>
-SSLOptions +FakeBasicAuth -StrictRequire<br />
-&lt;Files ~ "\.(cgi|shtml)$"&gt;<br />
- SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData<br />
-&lt;Files&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLRequireSSL</name>
-<description>Deny access when SSL is not used for the
-HTTP request</description>
-<syntax>SSLRequireSSL</syntax>
-<contextlist><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p><!-- XXX: I think the syntax is wrong -->
-This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
-the current connection. This is very handy inside the SSL-enabled virtual
-host or directories for defending against configuration errors that expose
-stuff that should be protected. When this directive is present all requests
-are denied which are not using SSL.</p>
-<example><title>Example</title>
-SSLRequireSSL
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLRequire</name>
-<description>Allow access only when an arbitrarily complex
-boolean expression is true</description>
-<syntax>SSLRequire <em>expression</em></syntax>
-<contextlist><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive specifies a general access requirement which has to be
-fulfilled in order to allow access. It's a very powerful directive because the
-requirement specification is an arbitrarily complex boolean expression
-containing any number of access checks.</p>
-<p>
-The <em>expression</em> must match the following syntax (given as a BNF
-grammar notation):</p>
-<blockquote>
-<pre>
-expr ::= "<strong>true</strong>" | "<strong>false</strong>"
- | "<strong>!</strong>" expr
- | expr "<strong>&amp;&amp;</strong>" expr
- | expr "<strong>||</strong>" expr
- | "<strong>(</strong>" expr "<strong>)</strong>"
- | comp
-
-comp ::= word "<strong>==</strong>" word | word "<strong>eq</strong>" word
- | word "<strong>!=</strong>" word | word "<strong>ne</strong>" word
- | word "<strong>&lt;</strong>" word | word "<strong>lt</strong>" word
- | word "<strong>&lt;=</strong>" word | word "<strong>le</strong>" word
- | word "<strong>&gt;</strong>" word | word "<strong>gt</strong>" word
- | word "<strong>&gt;=</strong>" word | word "<strong>ge</strong>" word
- | word "<strong>in</strong>" "<strong>{</strong>" wordlist "<strong>}</strong>"
- | word "<strong>=~</strong>" regex
- | word "<strong>!~</strong>" regex
-
-wordlist ::= word
- | wordlist "<strong>,</strong>" word
-
-word ::= digit
- | cstring
- | variable
- | function
-
-digit ::= [0-9]+
-cstring ::= "..."
-variable ::= "<strong>%{</strong>" varname "<strong>}</strong>"
-function ::= funcname "<strong>(</strong>" funcargs "<strong>)</strong>"
-</pre>
-</blockquote>
-<p>while for <code>varname</code> any variable from <a
-href="#table3">Table 3</a> can be used. Finally for
-<code>funcname</code> the following functions are available:</p>
-<ul>
-<li><code>file(</code><em>filename</em><code>)</code>
- <p>
- This function takes one string argument and expands to the contents of the
- file. This is especially useful for matching this contents against a
- regular expression, etc.</p>
-</li>
-</ul>
-<p>Notice that <em>expression</em> is first parsed into an internal machine
-representation and then evaluated in a second step. Actually, in Global and
-Per-Server Class context <em>expression</em> is parsed at startup time and
-at runtime only the machine representation is executed. For Per-Directory
-context this is different: here <em>expression</em> has to be parsed and
-immediately executed for every request.</p>
-<example><title>Example</title>
-SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \<br />
- and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \<br />
- and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \<br />
- and %{TIME_WDAY} &gt;= 1 and %{TIME_WDAY} &lt;= 5 \<br />
- and %{TIME_HOUR} &gt;= 8 and %{TIME_HOUR} &lt;= 20 ) \<br />
- or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-</example>
-
-<p><em>Standard CGI/1.0 and Apache variables:</em></p>
-<pre>
-HTTP_USER_AGENT PATH_INFO AUTH_TYPE
-HTTP_REFERER QUERY_STRING SERVER_SOFTWARE
-HTTP_COOKIE REMOTE_HOST API_VERSION
-HTTP_FORWARDED REMOTE_IDENT TIME_YEAR
-HTTP_HOST IS_SUBREQ TIME_MON
-HTTP_PROXY_CONNECTION DOCUMENT_ROOT TIME_DAY
-HTTP_ACCEPT SERVER_ADMIN TIME_HOUR
-HTTP:headername SERVER_NAME TIME_MIN
-THE_REQUEST SERVER_PORT TIME_SEC
-REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY
-REQUEST_SCHEME REMOTE_ADDR TIME
-REQUEST_URI REMOTE_USER ENV:<strong>variablename</strong>
-REQUEST_FILENAME
-</pre>
-<p><em>SSL-related variables:</em></p>
-<pre>
-HTTPS SSL_CLIENT_M_VERSION SSL_SERVER_M_VERSION
- SSL_CLIENT_M_SERIAL SSL_SERVER_M_SERIAL
-SSL_PROTOCOL SSL_CLIENT_V_START SSL_SERVER_V_START
-SSL_SESSION_ID SSL_CLIENT_V_END SSL_SERVER_V_END
-SSL_CIPHER SSL_CLIENT_S_DN SSL_SERVER_S_DN
-SSL_CIPHER_EXPORT SSL_CLIENT_S_DN_C SSL_SERVER_S_DN_C
-SSL_CIPHER_ALGKEYSIZE SSL_CLIENT_S_DN_ST SSL_SERVER_S_DN_ST
-SSL_CIPHER_USEKEYSIZE SSL_CLIENT_S_DN_L SSL_SERVER_S_DN_L
-SSL_VERSION_LIBRARY SSL_CLIENT_S_DN_O SSL_SERVER_S_DN_O
-SSL_VERSION_INTERFACE SSL_CLIENT_S_DN_OU SSL_SERVER_S_DN_OU
- SSL_CLIENT_S_DN_CN SSL_SERVER_S_DN_CN
- SSL_CLIENT_S_DN_T SSL_SERVER_S_DN_T
- SSL_CLIENT_S_DN_I SSL_SERVER_S_DN_I
- SSL_CLIENT_S_DN_G SSL_SERVER_S_DN_G
- SSL_CLIENT_S_DN_S SSL_SERVER_S_DN_S
- SSL_CLIENT_S_DN_D SSL_SERVER_S_DN_D
- SSL_CLIENT_S_DN_UID SSL_SERVER_S_DN_UID
- SSL_CLIENT_S_DN_Email SSL_SERVER_S_DN_Email
- SSL_CLIENT_I_DN SSL_SERVER_I_DN
- SSL_CLIENT_I_DN_C SSL_SERVER_I_DN_C
- SSL_CLIENT_I_DN_ST SSL_SERVER_I_DN_ST
- SSL_CLIENT_I_DN_L SSL_SERVER_I_DN_L
- SSL_CLIENT_I_DN_O SSL_SERVER_I_DN_O
- SSL_CLIENT_I_DN_OU SSL_SERVER_I_DN_OU
- SSL_CLIENT_I_DN_CN SSL_SERVER_I_DN_CN
- SSL_CLIENT_I_DN_T SSL_SERVER_I_DN_T
- SSL_CLIENT_I_DN_I SSL_SERVER_I_DN_I
- SSL_CLIENT_I_DN_G SSL_SERVER_I_DN_G
- SSL_CLIENT_I_DN_S SSL_SERVER_I_DN_S
- SSL_CLIENT_I_DN_D SSL_SERVER_I_DN_D
- SSL_CLIENT_I_DN_UID SSL_SERVER_I_DN_UID
- SSL_CLIENT_I_DN_Email SSL_SERVER_I_DN_Email
- SSL_CLIENT_A_SIG SSL_SERVER_A_SIG
- SSL_CLIENT_A_KEY SSL_SERVER_A_KEY
- SSL_CLIENT_CERT SSL_SERVER_CERT
- SSL_CLIENT_CERT_CHAIN_<strong>n</strong>
- SSL_CLIENT_VERIFY
-</pre>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyMachineCertificatePath</name>
-<description>Directory of PEM-encoded client certificates and keys to be used by the proxy</description>
-<syntax>SSLProxyMachineCertificatePath <em>directory</em></syntax>
-<contextlist><context>server config</context></contextlist>
-<override>Not applicable</override>
-
-<usage>
-<p>
-This directive sets the directory where you keep the certificates and
-keys used for authentication of the proxy server to remote servers.
-</p>
-<p>The files in this directory must be PEM-encoded and are accessed through
-hash filenames. Additionally, you must create symbolic links named
-<code><em>hash-value</em>.N</code>. And you should always make sure this
-directory contains the appropriate symbolic links. Use the Makefile which
-comes with mod_ssl to accomplish this task.
-</p>
-<note type="warning">
-<p>Currently there is no support for encrypted private keys</p>
-</note>
-<example><title>Example</title>
-SSLProxyMachineCertificatePath /usr/local/apache2/conf/proxy.crt/
-</example>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>SSLProxyMachineCertificateFile</name>
-<description>File of concatenated PEM-encoded client certificates and keys to be used by the proxy</description>
-<syntax>SSLProxyMachineCertificateFile <em>filename</em></syntax>
-<contextlist><context>server config</context></contextlist>
-<override>Not applicable</override>
-
-<usage>
-<p>
-This directive sets the all-in-one file where you keep the certificates and
-keys used for authentication of the proxy server to remote servers.
-</p>
-<p>
-This referenced file is simply the concatenation of the various PEM-encoded
-certificate files, in order of preference. Use this directive alternatively
-or additionally to <code>SSLProxyMachineCertificatePath</code>.
-</p>
-<note type="warning">
-<p>Currently there is no support for encrypted private keys</p>
-</note>
-<example><title>Example</title>
-SSLProxyMachineCertificateFile /usr/local/apache2/conf/ssl.crt/proxy.pem
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyVerify</name>
-<description>Type of remote server Certificate verification</description>
-<syntax>SSLProxyVerify <em>level</em></syntax>
-<default>SSLProxyVerify none</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive sets the Certificate verification level for the remote server
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the remote server
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured remote server verification level after the HTTP request was read but
-before the HTTP response is sent.</p>
-<p>
-The following levels are available for <em>level</em>:</p>
-<ul>
-<li><strong>none</strong>:
- no remote server Certificate is required at all</li>
-<li><strong>optional</strong>:
- the remote server <em>may</em> present a valid Certificate</li>
-<li><strong>require</strong>:
- the remote server <em>has to</em> present a valid Certificate</li>
-<li><strong>optional_no_ca</strong>:
- the remote server may present a valid Certificate<br />
- but it need not to be (successfully) verifiable.</li>
-</ul>
-<p>In practice only levels <strong>none</strong> and
-<strong>require</strong> are really interesting, because level
-<strong>optional</strong> doesn't work with all servers and level
-<strong>optional_no_ca</strong> is actually against the idea of
-authentication (but can be used to establish SSL test pages, etc.)</p>
-<example><title>Example</title>
-SSLProxyVerify require
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyVerifyDepth</name>
-<description>Maximum depth of CA Certificates in Remote Server
-Certificate verification</description>
-<syntax>SSLProxyVerifyDepth <em>number</em></syntax>
-<default>SSLProxyVerifyDepth 1</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-remote server does not have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured remote server verification depth after the
-HTTP request was read but before the HTTP response is sent.</p>
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the remote server certificate. A depth of 0 means that self-signed
-remote server certificates are accepted only, the default depth of 1 means
-the remote server certificate can be self-signed or has to be signed by a CA
-which is directly known to the server (i.e. the CA's certificate is under
-<directive module="mod_ssl">SSLProxyCACertificatePath</directive>), etc.</p>
-<example><title>Example</title>
-SSLProxyVerifyDepth 10
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyEngine</name>
-<description>SSL Proxy Engine Operation Switch</description>
-<syntax>SSLProxyEngine on|off</syntax>
-<default>SSLProxyEngine off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine for proxy. This
-is usually used inside a <directive module="core"
-type="section">VirtualHost</directive> section to enable SSL/TLS for proxy
-usage in a particular virtual host. By default the SSL/TLS Protocol Engine is
-disabled for proxy image both for the main server and all configured virtual hosts.</p>
-<example><title>Example</title>
-&lt;VirtualHost _default_:443&gt;<br />
-SSLProxyEngine on<br />
-...<br />
-&lt;/VirtualHost&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyProtocol</name>
-<description>Configure usable SSL protocol flavors for proxy usage</description>
-<syntax>SSLProxyProtocol [+|-]<em>protocol</em> ...</syntax>
-<default>SSLProxyProtocol all</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<override>Options</override>
-
-<usage>
-<!-- XXX Why does this have an override and not .htaccess context? -->
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment for proxy . It will only connect
-to servers using one of the provided protocols.</p>
-<p>Please refer to <directive module="mod_ssl">SSLProtocol</directive>
-for additional information.
-</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyCipherSuite</name>
-<description>Cipher Suite available for negotiation in SSL
-proxy handshake</description>
-<syntax>SSLProxyCipherSuite <em>cipher-spec</em></syntax>
-<default>SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-<usage>
-<p>Equivalent to <code>SSLCipherSuite</code>, but for the proxy connection.
-Please refer to <directive module="mod_ssl">SSLCipherSuite</directive>
-for additional information.</p>
-</usage>
-
-</directivesynopsis>
-<directivesynopsis>
-<name>SSLProxyCACertificatePath</name>
-<description>Directory of PEM-encoded CA Certificates for
-Remote Server Auth</description>
-<syntax>SSLProxyCACertificatePath <em>directory-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose remote servers you deal with. These are used to
-verify the remote server certificate on Remote Server Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<em>hash-value</em><code>.N</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.</p>
-<example><title>Example</title>
-SSLProxyCACertificatePath /usr/local/apache2/conf/ssl.crt/
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyCACertificateFile</name>
-<description>File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</description>
-<syntax>SSLProxyCACertificateFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>remote servers</em> you deal
-with. These are used for Remote Server Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to
-<directive module="mod_ssl">SSLProxyCACertificatePath</directive>.</p>
-<example><title>Example</title>
-SSLProxyCACertificateFile /usr/local/apache2/conf/ssl.crt/ca-bundle-remote-server.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyCARevocationPath</name>
-<description>Directory of PEM-encoded CA CRLs for
-Remote Server Auth</description>
-<syntax>SSLProxyCARevocationPath <em>directory-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose remote servers you deal with.
-These are used to revoke the remote server certificate on Remote Server Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with <module>mod_ssl</module> to accomplish this task.</p>
-<example><title>Example</title>
-SSLProxyCARevocationPath /usr/local/apache2/conf/ssl.crl/
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProxyCARevocationFile</name>
-<description>File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</description>
-<syntax>SSLProxyCARevocationFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can
-assemble the Certificate Revocation Lists (CRL) of Certification
-Authorities (CA) whose <em>remote servers</em> you deal with. These are used
-for Remote Server Authentication. Such a file is simply the concatenation of
-the various PEM-encoded CRL files, in order of preference. This can be
-used alternatively and/or additionally to <directive
-module="mod_ssl">SSLProxyCARevocationPath</directive>.</p>
-<example><title>Example</title>
-SSLProxyCARevocationFile /usr/local/apache2/conf/ssl.crl/ca-bundle-remote-server.crl
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLUserName</name>
-<description>Variable name to determine user name</description>
-<syntax>SSLUserName <em>varname</em></syntax>
-<contextlist><context>server config</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<usage>
-<p>
-This directive sets the "user" field in the Apache request object.
-This is used by lower modules to identify the user with a character
-string. In particular, this may cause the environment variable
-<code>REMOTE_USER</code> to be set. The <em>varname</em> can be
-any of the <a href="#envvars">SSL environment variables</a>.</p>
-<example><title>Example</title>
-SSLUserName SSL_CLIENT_S_DN_CN
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLHonorCipherOrder</name>
-<description>Option to prefer the server's cipher preference order</description>
-<syntax>SSLHonorCiperOrder <em>flag</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>Available in Apache 2.1 and later, if using OpenSSL 0.9.7 or later</compatibility>
-
-<usage>
-<p>When choosing a cipher during an SSLv3 or TLSv1 handshake, normally
-the client's preference is used. If this directive is enabled, the
-server's preference will be used instead.</p>
-<example><title>Example</title>
-SSLHonorCipherOrder on
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCryptoDevice</name>
-<description>Enable use of a cryptographic hardware accelerator</description>
-<syntax>SSLCryptoDevice <em>engine</em></syntax>
-<default>SSLCryptoDevice builtin</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>Available if mod_ssl is built using <code>-DSSL_ENGINE_EXPERIMENTAL</code></compatibility>
-
-<usage>
-<p>
-This directive enables use of a cryptographic hardware accelerator
-board to offload some of the SSL processing overhead. This directive
-can only be used if the SSL toolkit is built with "engine" support;
-OpenSSL 0.9.7 and later releases have "engine" support by default, the
-separate "-engine" releases of OpenSSL 0.9.6 must be used.</p>
-
-<p>To discover which engine names are supported, run the command
-&quot;<code>openssl engine</code>&quot;.</p>
-
-<example><title>Example</title>
-# For a Broadcom accelerator:<br />
-SSLCryptoDevice ubsec
-</example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_ssl.xml.meta b/docs/manual/mod/mod_ssl.xml.meta
deleted file mode 100644
index a91b3f6ea0..0000000000
--- a/docs/manual/mod/mod_ssl.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_ssl</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_status.html b/docs/manual/mod/mod_status.html
deleted file mode 100644
index 64e6ac3d25..0000000000
--- a/docs/manual/mod/mod_status.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_status.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_status.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_status.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_status.html.en b/docs/manual/mod/mod_status.html.en
deleted file mode 100644
index a03410d90e..0000000000
--- a/docs/manual/mod/mod_status.html.en
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_status - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_status</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_status.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_status.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_status.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides information on server activity and
-performance</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>status_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_status.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>The Status module allows a server administrator to find out
- how well their server is performing. A HTML page is presented
- that gives the current server statistics in an easily readable
- form. If required this page can be made to automatically
- refresh (given a compatible browser). Another page gives a
- simple machine-readable list of the current server state.</p>
-
- <p>The details given are:</p>
-
- <ul>
- <li>The number of worker serving requests</li>
-
- <li>The number of idle worker</li>
-
- <li>The status of each worker, the number of requests that
- worker has performed and the total number of bytes served by
- the worker (*)</li>
-
- <li>A total number of accesses and byte count served (*)</li>
-
- <li>The time the server was started/restarted and the time it
- has been running for</li>
-
- <li>Averages giving the number of requests per second, the
- number of bytes served per second and the average number of
- bytes per request (*)</li>
-
- <li>The current percentage CPU used by each worker and in
- total by Apache (*)</li>
-
- <li>The current hosts and requests being processed (*)</li>
- </ul>
-
- <p>A compile-time option must be used to display the details
- marked "(*)" as the instrumentation required for obtaining
- these statistics does not exist within standard Apache.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#extendedstatus">ExtendedStatus</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">Enabling Status Support</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#autoupdate">Automatic Updates</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#machinereadable">Machine Readable Status File</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Enabling Status Support</a></h2>
-
-
- <p>To enable status reports only for browsers from the foo.com
- domain add this code to your <code>httpd.conf</code>
- configuration file</p>
-<div class="example"><p><code>
- &lt;Location /server-status&gt;<br />
- SetHandler server-status<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- &lt;/Location&gt;
-</code></p></div>
-
- <p>You can now access server statistics by using a Web browser
- to access the page
- <code>http://your.server.name/server-status</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="autoupdate" id="autoupdate">Automatic Updates</a></h2>
-
-
- <p>You can get the status page to update itself automatically if
- you have a browser that supports "refresh". Access the page
- <code>http://your.server.name/server-status?refresh=N</code> to
- refresh the page every N seconds.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="machinereadable" id="machinereadable">Machine Readable Status File</a></h2>
-
-
- <p>A machine-readable version of the status file is available by
- accessing the page
- <code>http://your.server.name/server-status?auto</code>. This
- is useful when automatically run, see the Perl program in the
- <code>/support</code> directory of Apache,
- <code>log_server_status</code>.</p>
-
- <div class="note">
- <strong>It should be noted that if <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> is
- compiled into the server, its handler capability is available
- in <em>all</em> configuration files, including
- <em>per</em>-directory files (<em>e.g.</em>,
- <code>.htaccess</code>). This may have security-related
- ramifications for your site.</strong>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtendedStatus" id="ExtendedStatus">ExtendedStatus</a> <a name="extendedstatus" id="extendedstatus">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Keep track of extended status information for each
-request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ExtendedStatus On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ExtendedStatus Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_status</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ExtendedStatus is only available in Apache 1.3.2 and
-later.</td></tr>
-</table>
- <p>This setting applies to the entire server, and cannot be
- enabled or disabled on a virtualhost-by-virtualhost basis.
- The collection of extended status information can slow down
- the server.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_status.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_status.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_status.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_status.html.ja.euc-jp b/docs/manual/mod/mod_status.html.ja.euc-jp
deleted file mode 100644
index 7f6ce99353..0000000000
--- a/docs/manual/mod/mod_status.html.ja.euc-jp
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_status - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_status</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_status.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_status.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_status.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤Î³èÆ°¾õ¶·¤ÈÀ­Ç½¤Ë´Ø¤¹¤ë¾ðÊó¤òÄ󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>status_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_status.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î Status ¥â¥¸¥å¡¼¥ë¤Ë¤è¤ê¥µ¡¼¥Ð´ÉÍý¼Ô¤Ï¥µ¡¼¥Ð¤¬¤É¤Î¤¯¤é¤¤
- ¤ÎÀ­Ç½¤ÇÆ°ºî¤·¤Æ¤¤¤ë¤«¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¸½»þÅÀ¤Ç¤Î¥µ¡¼¥Ð¤ÎÅý·×¾ðÊó¤òÆɤߤ䤹¤¤·Á¼°¤Ç¸½¤·¤¿ HTML ¥Ú¡¼¥¸¤¬
- ɽ¼¨¤µ¤ì¤Þ¤¹¡£É¬ÍפǤ¢¤ì¤Ð¡¢¤³¤Î¥Ú¡¼¥¸¤Ï¼«Æ°Åª¤Ë¥ê¥Õ¥ì¥Ã¥·¥å¤µ¤»¤ë
- ¤³¤È¤â¤Ç¤­¤Þ¤¹ (¸ß´¹À­¤Î¤¢¤ë¥Ö¥é¥¦¥¶¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç)¡£
- Ê̤ˡ¢¸½»þÅÀ¤Ç¤Î¥µ¡¼¥Ð¤Î¾õÂÖ¤òñ½ã¤Êµ¡³£Æɤ߼è¤ê²Äǽ¤Ê¥ê¥¹¥È¤Ç
- ¸½¤¹¥Ú¡¼¥¸¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>ɽ¼¨¤µ¤ì¤ë¾ðÊó¤Ï:</p>
-
- <ul>
- <li>¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤ë¥ï¡¼¥«¡¼¤Î¿ô</li>
-
- <li>¥¢¥¤¥É¥ë (ÌõÃí: ¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤Ê¤¤) ¥ï¡¼¥«¡¼¤Î¿ô</li>
-
- <li>³Æ¥ï¡¼¥«¡¼¤Î¾õÂÖ¡¢¥ï¡¼¥«¡¼¤¬°·¤Ã¤¿¥ê¥¯¥¨¥¹¥È¤Î¿ô¡¢
- ¥ï¡¼¥«¡¼¤¬Á÷¤Ã¤¿Áí¥Ð¥¤¥È¿ô (*)</li>
-
- <li>Áí¥¢¥¯¥»¥¹¿ô¤ÈÁí¥Ð¥¤¥È¿ô (*)</li>
-
- <li>¥µ¡¼¥Ð¤¬µ¯Æ°¤â¤·¤¯¤ÏºÆµ¯Æ°¤µ¤ì¤¿»þ¹ï¤ÈÆ°ºî¤·¤Æ¤¤¤ë»þ´Ö</li>
-
- <li>Ê¿¶Ñ¤Î 1 É䢤¿¤ê¤Î¥ê¥¯¥¨¥¹¥È¿ô¡¢1 É䢤¿¤ê¤ÎÁ÷¤é¤ì¤¿¥Ð¥¤¥È¿ô¡¢
- ¥ê¥¯¥¨¥¹¥È¤¢¤¿¤ê¤Î¥Ð¥¤¥È¿ô (*)</li>
-
- <li>³Æ¥ï¡¼¥«¡¼¤È Apache Á´ÂΤǻÈÍѤµ¤ì¤Æ¤¤¤ë CPU ¤Î³ä¹ç (*)</li>
-
- <li>¸½»þÅÀ¤Î¥Û¥¹¥È¤È½èÍý¤µ¤ì¤Æ¤¤¤ë¥ê¥¯¥¨¥¹¥È (*)</li>
- </ul>
-
- <p>"(*)" ¤ÎÉÕ¤¤¤Æ¤¤¤ë¾ðÊó¤òɽ¼¨¤¹¤ë¤¿¤á¤Ë¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Î¥ª¥×¥·¥ç¥ó
- ¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤é¤ÎÅý·×¾ðÊó¤òÆÀ¤ë¤¿¤á¤ËɬÍפÊ
- ¥³¡¼¥É¤Ïɸ½à¤Î Apache ¤Ë¤Ï´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#extendedstatus">ExtendedStatus</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">Status ¤ò»ÈÍѲÄǽ¤Ë¤¹¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#autoupdate">¼«Æ°¹¹¿·</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#machinereadable">µ¡³£Æɤ߼è¤ê²Äǽ¤Ê¥¹¥Æ¡¼¥¿¥¹¥Õ¥¡¥¤¥ë</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Status ¤ò»ÈÍѲÄǽ¤Ë¤¹¤ë</a></h2>
-
-
- <p>foo.com ¥É¥á¥¤¥ó¤«¤é¤Î¥Ö¥é¥¦¥¶¤Î¤ß¤ËÂФ·¤Æ
- ¥¹¥Æ¡¼¥¿¥¹¤ÎÊó¹ð¤ò»ÈÍѲÄǽ¤Ë¤¹¤ë¤Ë¤Ï
- °Ê²¼¤Î¥³¡¼¥É¤ò <code>httpd.conf</code> ÀßÄê¥Õ¥¡¥¤¥ë¤ËÄɲä·¤Þ¤¹</p>
-<div class="example"><p><code>
- &lt;Location /server-status&gt;<br />
- SetHandler server-status<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- &lt;/Location&gt;
-</code></p></div>
-
- <p>¤³¤ì¤Ç¡¢¥µ¡¼¥Ð¤ÎÅý·×¾ðÊó¤ò¥¦¥§¥Ö¥Ö¥é¥¦¥¶¤ò»È¤Ã¤Æ
- <code>http://your.server.name/server-status</code> ¤ò¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤Ë¤è¤ê
- ÃΤ뤳¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="autoupdate" id="autoupdate">¼«Æ°¹¹¿·</a></h2>
-
-
- <p>¥Ö¥é¥¦¥¶¤¬¡Ö¥ê¥Õ¥ì¥·¥å¡×µ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ì¤Ð¡¢¥¹¥Æ¡¼¥¿¥¹¥Ú¡¼¥¸¤ò
- ¼«Æ°Åª¤Ë¹¹¿·¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£N ÉÃËè¤Ë¹¹¿·¤µ¤»¤ë¤¿¤á¤Ë¤Ï
- <code>http://your.server.name/server-status?refresh=N</code>
- ¤È¤¤¤¦¥Ú¡¼¥¸¤ò¥¢¥¯¥»¥¹¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="machinereadable" id="machinereadable">µ¡³£Æɤ߼è¤ê²Äǽ¤Ê¥¹¥Æ¡¼¥¿¥¹¥Õ¥¡¥¤¥ë</a></h2>
-
-
- <p><code>http://your.server.name/server-status?auto</code> ¤ò
- ¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥¹¥Æ¡¼¥¿¥¹¥Õ¥¡¥¤¥ë¤Îµ¡³£Æɤ߼è¤ê²Äǽ¤Ê¥Ð¡¼¥¸¥ç¥ó¤ò
- ÆÀ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ï¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤ë¤È¤­¤ËÊØÍø¤Ç¤¹¡£
- Apache ¤Î <code>/support</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë
- Perl ¥×¥í¥°¥é¥à <code>log_server_status</code> ¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note">
- <strong><code class="module"><a href="../mod/mod_status.html">mod_status</a></code> ¤¬¥µ¡¼¥Ð¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë
- ¾ì¹ç¡¢¥Ï¥ó¥É¥é¤Îµ¡Ç½¤Ï¥Ç¥£¥ì¥¯¥È¥ê<em>Ëè</em>¤Î¥Õ¥¡¥¤¥ë
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢<code>.htaccess</code>) ¤â´Þ¤à<em>¤¹¤Ù¤Æ</em>¤Î
- ÀßÄê¥Õ¥¡¥¤¥ë¤Ç»ÈÍѲÄǽ¤Ë¤Ê¤ë¤³¤È¤Ë¤ÏÃí°Õ¤ò¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¥µ¥¤¥È¤Ë¤è¤Ã¤Æ¤Ï¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë˾¤Þ¤·¤¯¤Ê¤¤·ë²Ì¤ò
- ¤â¤¿¤é¤¹¤³¤È¤¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</strong>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtendedStatus" id="ExtendedStatus">ExtendedStatus</a> <a name="extendedstatus" id="extendedstatus">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>³Æ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ³ÈÄ¥¥¹¥Æ¡¼¥¿¥¹¾ðÊó¤òÊݸ¤¹¤ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ExtendedStatus On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ExtendedStatus Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_status</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>ExtendedStatus ¤Ï Apache 1.3.2 °Ê¹ß¤Ç¤Î¤ß»ÈÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤ÎÀßÄê¤Ï¥µ¡¼¥ÐÁ´ÂΤËÂФ·¤ÆŬÍѤµ¤ì¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈËè¤Ë
- Êѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£³ÈÄ¥¥¹¥Æ¡¼¥¿¥¹¾ðÊó¤Î¼ý½¸¤Ï¥µ¡¼¥Ð¤Î
- Æ°ºî¤òÃÙ¤¯¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_status.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_status.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_status.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_status.html.ko.euc-kr b/docs/manual/mod/mod_status.html.ko.euc-kr
deleted file mode 100644
index 3176c45caa..0000000000
--- a/docs/manual/mod/mod_status.html.ko.euc-kr
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_status - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_status</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_status.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_status.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_status.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¼­¹ö È°µ¿°ú ¼º´É¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>status_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_status.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>Status ¸ðµâÀº ¼­¹ö °ü¸®ÀÚ¿¡°Ô ¼­¹öÀÇ »óŸ¦ º¸¿©ÁØ´Ù.
- ½±°Ô ÀÐÀ» ¼ö ÀÖ´Â HTML ÆäÀÌÁö·Î ÇöÀç ¼­¹öÅë°è¸¦ º¸¿©ÁØ´Ù.
- ÇÊ¿äÇÏ´Ù¸é (Ç¥ÁØÀ» µû¸£´Â ºê¶ó¿ìÀú¿¡¼­) ÆäÀÌÁö¸¦ ÀÚµ¿À¸·Î
- °»½ÅÇÒ ¼ö ÀÖ´Ù. ÇöÀç ¼­¹ö »óŸ¦ ÄÄÇ»ÅÍ°¡ ÀÐÀ» ¼ö ÀÖ´Â
- °£´ÜÇÑ ¸ñ·ÏÀ¸·Î º¸¿©ÁÙ ¼öµµ ÀÖ´Ù.</p>
-
- <p>¾Ë·ÁÁÖ´Â Á¤º¸´Â:</p>
-
- <ul>
- <li>¿äûÀ» ¼­ºñ½ºÇÏ´Â workerÀÇ °³¼ö</li>
-
- <li>½¬°í ÀÖ´Â(idle) workerÀÇ °³¼ö</li>
-
- <li>°¢ workerµéÀÇ »óÅÂ, worker°¡ ó¸®ÇÑ ¿äûÀÇ °³¼ö¿Í
- worker°¡ ¼­ºñ½ºÇÑ Àüü ¹ÙÀÌÆ®¼ö (*)</li>
-
- <li>ÃÑ Á¢±Ù Ƚ¼ö¿Í ¼­ºñ½ºÇÑ ¹ÙÀÌÆ®¼ö (*)</li>
-
- <li>¼­¹ö°¡ ½ÃÀÛȤÀº Àç½ÃÀÛÇÑ ½Ã°£°ú µ¿ÀÛÇÑ ½Ã°£</li>
-
- <li>ÃÊ´ç ¿äû¼ö Æò±Õ, ÃÊ´ç ¼­ºñ½ºÇÑ ¹ÙÀÌÆ®¼ö¿Í ¿äû´ç
- ¹ÙÀÌÆ®¼ö Æò±Õ (*)</li>
-
- <li>ÇöÀç ¾ÆÆÄÄ¡ Àüü¿Í °¢ workerµéÀÇ CPU ºñÀ² (*)</li>
-
- <li>ÇöÀç ó¸®ÇÏ°í Àִ ȣ½ºÆ®¿Í ¿äû (*)</li>
- </ul>
-
- <p>Ç¥ÁØ ¾ÆÆÄÄ¡¿¡´Â "(*)"·Î Ç¥½ÃÇÑ Åë°è¸¦ ¾òÀ» ¼ö ¾ø´Ù.
- ÀÌ Á¤º¸¸¦ º¸·Á¸é ÄÄÆÄÀϽà ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#extendedstatus">ExtendedStatus</a></li>
-</ul>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">Status »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#autoupdate">ÀÚµ¿ °»½Å</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#machinereadable">ÄÄÇ»ÅÍ°¡ ÀÐÀ» ¼ö ÀÖ´Â Status ÆÄÀÏ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Status »ç¿ëÇϱâ</a></h2>
-
-
- <p>foo.com µµ¸ÞÀο¡¼­ Á¢±ÙÇÑ ºê¶ó¿ìÀú¿¡°Ô¸¸ »óŸ¦ º¸¿©ÁÖ·Á¸é
- <code>httpd.conf</code> ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù</p>
-<div class="example"><p><code>
- &lt;Location /server-status&gt;<br />
- SetHandler server-status<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- &lt;/Location&gt;
-</code></p></div>
-
- <p>ÀÌÁ¦ À¥ºê¶ó¿ìÀú·Î
- <code>http://your.server.name/server-status</code> ÆäÀÌÁö¿¡
- Á¢±ÙÇÏ¸é ¼­¹ö Åë°è¸¦ º¼ ¼ö ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="autoupdate" id="autoupdate">ÀÚµ¿ °»½Å</a></h2>
-
-
- <p>ºê¶ó¿ìÀú°¡ "Àç°»½Å"À» Áö¿øÇÑ´Ù¸é status ÆäÀÌÁö¸¦ ÀÚµ¿À¸·Î
- °»½ÅÇÒ ¼ö ÀÖ´Ù. N Ãʸ¶´Ù °»½ÅÇÏ·Á¸é
- <code>http://your.server.name/server-status?refresh=N</code>
- ÆäÀÌÁö¸¦ »ç¿ëÇ϶ó.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="machinereadable" id="machinereadable">ÄÄÇ»ÅÍ°¡ ÀÐÀ» ¼ö ÀÖ´Â Status ÆÄÀÏ</a></h2>
-
-
- <p><code>http://your.server.name/server-status?auto</code>¿¡¼­
- ÄÄÇ»ÅÍ°¡ ½±°Ô ÀÐÀ» ¼ö ÀÖ´Â status ÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ
- Çü½ÄÀº ¾ÆÆÄÄ¡ <code>/support</code> µð·ºÅ丮¿¡ ÀÖ´Â
- <code>log_server_status</code> Perl ÇÁ·Î±×·¥°ú °°ÀÌ ÀÚµ¿À¸·Î
- ½ÇÇàÇÏ´Â ÇÁ·Î±×·¥¿¡ À¯¿ëÇÏ´Ù.</p>
-
- <div class="note">
- <strong><code class="module"><a href="../mod/mod_status.html">mod_status</a></code>¸¦ ¼­¹ö¿Í °°ÀÌ
- ÄÄÆÄÀÏÇÏ¿´´Ù¸é µð·ºÅ丮<em>º°</em> ¼³Á¤ÆÄÀÏÀ» (<em>¿¹¸¦
- µé¾î</em>, <code>.htaccess</code>) Æ÷ÇÔÇÏ¿© <em>¸ðµç</em>
- ¼³Á¤ÆÄÀÏ¿¡¼­ Çڵ鷯¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ »çÀÌÆ®¿¡
- º¸¾È ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.</strong>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ExtendedStatus" id="ExtendedStatus">ExtendedStatus</a> <a name="extendedstatus" id="extendedstatus">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>°¢ ¿äû¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »óÅ Á¤º¸¸¦ ±â·ÏÇÑ´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>ExtendedStatus On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>ExtendedStatus Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_status</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>ExtendedStatus´Â ¾ÆÆÄÄ¡ 1.3.2 ÀÌÈÄ¿¡¸¸ ÀÖ´Ù.</td></tr>
-</table>
- <p>ÀÌ ¼³Á¤Àº ¼­¹ö Àüü¿¡ Àû¿ëµÇ¸ç, °¡»óÈ£½ºÆ®º°·Î Å°°í ²ø
- ¼ö ¾ø´Ù. ÀÚ¼¼ÇÑ »óÅ Á¤º¸¸¦ ¸ðÀ¸¸é ¼­¹ö°¡ ´À·ÁÁú ¼ö ÀÖ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_status.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_status.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_status.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_status.xml b/docs/manual/mod/mod_status.xml
deleted file mode 100644
index f24b65cb52..0000000000
--- a/docs/manual/mod/mod_status.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_status.xml.meta">
-
-<name>mod_status</name>
-<description>Provides information on server activity and
-performance</description>
-<status>Base</status>
-<sourcefile>mod_status.c</sourcefile>
-<identifier>status_module</identifier>
-
-
-<summary>
- <p>The Status module allows a server administrator to find out
- how well their server is performing. A HTML page is presented
- that gives the current server statistics in an easily readable
- form. If required this page can be made to automatically
- refresh (given a compatible browser). Another page gives a
- simple machine-readable list of the current server state.</p>
-
- <p>The details given are:</p>
-
- <ul>
- <li>The number of worker serving requests</li>
-
- <li>The number of idle worker</li>
-
- <li>The status of each worker, the number of requests that
- worker has performed and the total number of bytes served by
- the worker (*)</li>
-
- <li>A total number of accesses and byte count served (*)</li>
-
- <li>The time the server was started/restarted and the time it
- has been running for</li>
-
- <li>Averages giving the number of requests per second, the
- number of bytes served per second and the average number of
- bytes per request (*)</li>
-
- <li>The current percentage CPU used by each worker and in
- total by Apache (*)</li>
-
- <li>The current hosts and requests being processed (*)</li>
- </ul>
-
- <p>A compile-time option must be used to display the details
- marked "(*)" as the instrumentation required for obtaining
- these statistics does not exist within standard Apache.</p>
-</summary>
-
-<section id="enable">
- <title>Enabling Status Support</title>
-
- <p>To enable status reports only for browsers from the foo.com
- domain add this code to your <code>httpd.conf</code>
- configuration file</p>
-<example>
- &lt;Location /server-status&gt;<br />
- SetHandler server-status<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- &lt;/Location&gt;
-</example>
-
- <p>You can now access server statistics by using a Web browser
- to access the page
- <code>http://your.server.name/server-status</code></p>
-</section>
-
-<section id="autoupdate">
-
- <title>Automatic Updates</title>
- <p>You can get the status page to update itself automatically if
- you have a browser that supports "refresh". Access the page
- <code>http://your.server.name/server-status?refresh=N</code> to
- refresh the page every N seconds.</p>
-
-</section>
-
-<section id="machinereadable">
-
- <title>Machine Readable Status File</title>
- <p>A machine-readable version of the status file is available by
- accessing the page
- <code>http://your.server.name/server-status?auto</code>. This
- is useful when automatically run, see the Perl program in the
- <code>/support</code> directory of Apache,
- <code>log_server_status</code>.</p>
-
- <note>
- <strong>It should be noted that if <module>mod_status</module> is
- compiled into the server, its handler capability is available
- in <em>all</em> configuration files, including
- <em>per</em>-directory files (<em>e.g.</em>,
- <code>.htaccess</code>). This may have security-related
- ramifications for your site.</strong>
- </note>
-
-</section>
-
-<directivesynopsis>
-
-<name>ExtendedStatus</name>
-<description>Keep track of extended status information for each
-request</description>
-<syntax>ExtendedStatus On|Off</syntax>
-<default>ExtendedStatus Off</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>ExtendedStatus is only available in Apache 1.3.2 and
-later.</compatibility>
-
-<usage>
- <p>This setting applies to the entire server, and cannot be
- enabled or disabled on a virtualhost-by-virtualhost basis.
- The collection of extended status information can slow down
- the server.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_status.xml.ja b/docs/manual/mod/mod_status.xml.ja
deleted file mode 100644
index 91ba2dc902..0000000000
--- a/docs/manual/mod/mod_status.xml.ja
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<modulesynopsis metafile="mod_status.xml.meta">
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<name>mod_status</name>
-<description>$B%5!<%P$N3hF0>u67$H@-G=$K4X$9$k>pJs$rDs6!$9$k(B</description>
-<status>Base</status>
-<sourcefile>mod_status.c</sourcefile>
-<identifier>status_module</identifier>
-
-
-<summary>
- <p>$B$3$N(B Status $B%b%8%e!<%k$K$h$j%5!<%P4IM}<T$O%5!<%P$,$I$N$/$i$$(B
- $B$N@-G=$GF0:n$7$F$$$k$+$rCN$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
- $B8=;~E@$G$N%5!<%P$NE}7W>pJs$rFI$_$d$9$$7A<0$G8=$7$?(B HTML $B%Z!<%8$,(B
- $BI=<($5$l$^$9!#I,MW$G$"$l$P!"$3$N%Z!<%8$O<+F0E*$K%j%U%l%C%7%e$5$;$k(B
- $B$3$H$b$G$-$^$9(B ($B8_49@-$N$"$k%V%i%&%6$r;HMQ$7$F$$$k>l9g(B)$B!#(B
- $BJL$K!"8=;~E@$G$N%5!<%P$N>uBV$rC1=c$J5!3#FI$_<h$j2DG=$J%j%9%H$G(B
- $B8=$9%Z!<%8$b$"$j$^$9!#(B</p>
-
- <p>$BI=<($5$l$k>pJs$O(B:</p>
-
- <ul>
- <li>$B%j%/%(%9%H$r07$C$F$$$k%o!<%+!<$N?t(B</li>
-
- <li>$B%"%$%I%k(B ($BLuCm(B: $B%j%/%(%9%H$r07$C$F$$$J$$(B) $B%o!<%+!<$N?t(B</li>
-
- <li>$B3F%o!<%+!<$N>uBV!"%o!<%+!<$,07$C$?%j%/%(%9%H$N?t!"(B
- $B%o!<%+!<$,Aw$C$?Am%P%$%H?t(B (*)</li>
-
- <li>$BAm%"%/%;%9?t$HAm%P%$%H?t(B (*)</li>
-
- <li>$B%5!<%P$,5/F0$b$7$/$O:F5/F0$5$l$?;~9o$HF0:n$7$F$$$k;~4V(B</li>
-
- <li>$BJ?6Q$N(B 1 $BIC$"$?$j$N%j%/%(%9%H?t!"(B1 $BIC$"$?$j$NAw$i$l$?%P%$%H?t!"(B
- $B%j%/%(%9%H$"$?$j$N%P%$%H?t(B (*)</li>
-
- <li>$B3F%o!<%+!<$H(B Apache $BA4BN$G;HMQ$5$l$F$$$k(B CPU $B$N3d9g(B (*)</li>
-
- <li>$B8=;~E@$N%[%9%H$H=hM}$5$l$F$$$k%j%/%(%9%H(B (*)</li>
- </ul>
-
- <p>"(*)" $B$NIU$$$F$$$k>pJs$rI=<($9$k$?$a$K$O%3%s%Q%$%k;~$N%*%W%7%g%s(B
- $B$r;HMQ$9$kI,MW$,$"$j$^$9!#$3$l$i$NE}7W>pJs$rF@$k$?$a$KI,MW$J(B
- $B%3!<%I$OI8=`$N(B Apache $B$K$O4^$^$l$F$$$^$;$s!#(B</p>
-</summary>
-
-<section id="enable">
- <title>Status $B$r;HMQ2DG=$K$9$k(B</title>
-
- <p>foo.com $B%I%a%$%s$+$i$N%V%i%&%6$N$_$KBP$7$F(B
- $B%9%F!<%?%9$NJs9p$r;HMQ2DG=$K$9$k$K$O(B
- $B0J2<$N%3!<%I$r(B <code>httpd.conf</code> $B@_Dj%U%!%$%k$KDI2C$7$^$9(B</p>
-<example>
- &lt;Location /server-status&gt;<br />
- SetHandler server-status<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- &lt;/Location&gt;
-</example>
-
- <p>$B$3$l$G!"%5!<%P$NE}7W>pJs$r%&%'%V%V%i%&%6$r;H$C$F(B
- <code>http://your.server.name/server-status</code> $B$r%"%/%;%9$9$k$3$H$K$h$j(B
- $BCN$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
-</section>
-
-<section id="autoupdate">
-
- <title>$B<+F099?7(B</title>
- <p>$B%V%i%&%6$,!V%j%U%l%7%e!W5!G=$r%5%]!<%H$7$F$$$l$P!"%9%F!<%?%9%Z!<%8$r(B
- $B<+F0E*$K99?7$9$k$h$&$K$G$-$^$9!#(BN $BICKh$K99?7$5$;$k$?$a$K$O(B
- <code>http://your.server.name/server-status?refresh=N</code>
- $B$H$$$&%Z!<%8$r%"%/%;%9$7$F$/$@$5$$!#(B</p>
-
-</section>
-
-<section id="machinereadable">
-
- <title>$B5!3#FI$_<h$j2DG=$J%9%F!<%?%9%U%!%$%k(B</title>
- <p><code>http://your.server.name/server-status?auto</code> $B$r(B
- $B%"%/%;%9$9$k$3$H$K$h$j!"%9%F!<%?%9%U%!%$%k$N5!3#FI$_<h$j2DG=$J%P!<%8%g%s$r(B
- $BF@$k$3$H$,$G$-$^$9!#$3$l$O<+F0E*$K<B9T$5$l$k$H$-$KJXMx$G$9!#(B
- Apache $B$N(B <code>/support</code> $B%G%#%l%/%H%j$K$"$k(B
- Perl $B%W%m%0%i%`(B <code>log_server_status</code> $B$r8+$F$/$@$5$$!#(B</p>
-
- <note>
- <strong><module>mod_status</module> $B$,%5!<%P$KAH$_9~$^$l$F$$$k(B
- $B>l9g!"%O%s%I%i$N5!G=$O%G%#%l%/%H%j(B<em>$BKh(B</em>$B$N%U%!%$%k(B
- (<em>$B$9$J$o$A(B</em>$B!"(B<code>.htaccess</code>) $B$b4^$`(B<em>$B$9$Y$F(B</em>$B$N(B
- $B@_Dj%U%!%$%k$G;HMQ2DG=$K$J$k$3$H$K$OCm0U$r$7$F$*$/I,MW$,$"$j$^$9!#(B
- $B$3$l$O!"%5%$%H$K$h$C$F$O%;%-%e%j%F%#$K4X$9$kK>$^$7$/$J$$7k2L$r(B
- $B$b$?$i$9$3$H$,$"$k$+$b$7$l$^$;$s!#(B</strong>
- </note>
-
-</section>
-
-<directivesynopsis>
-
-<name>ExtendedStatus</name>
-<description>$B3F%j%/%(%9%H$KBP$7$F3HD%%9%F!<%?%9>pJs$rJ]B8$9$k(B</description>
-<syntax>ExtendedStatus On|Off</syntax>
-<default>ExtendedStatus Off</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>ExtendedStatus $B$O(B Apache 1.3.2 $B0J9_$G$N$_;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N@_Dj$O%5!<%PA4BN$KBP$7$FE,MQ$5$l!"%P!<%A%c%k%[%9%HKh$K(B
- $BJQ99$9$k$3$H$O$G$-$^$;$s!#3HD%%9%F!<%?%9>pJs$N<}=8$O%5!<%P$N(B
- $BF0:n$rCY$/$9$k$3$H$,$"$j$^$9!#(B</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_status.xml.ko b/docs/manual/mod/mod_status.xml.ko
deleted file mode 100644
index eb9edb0c62..0000000000
--- a/docs/manual/mod/mod_status.xml.ko
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_status.xml.meta">
-
-<name>mod_status</name>
-<description>¼­¹ö È°µ¿°ú ¼º´É¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù</description>
-<status>Base</status>
-<sourcefile>mod_status.c</sourcefile>
-<identifier>status_module</identifier>
-
-
-<summary>
- <p>Status ¸ðµâÀº ¼­¹ö °ü¸®ÀÚ¿¡°Ô ¼­¹öÀÇ »óŸ¦ º¸¿©ÁØ´Ù.
- ½±°Ô ÀÐÀ» ¼ö ÀÖ´Â HTML ÆäÀÌÁö·Î ÇöÀç ¼­¹öÅë°è¸¦ º¸¿©ÁØ´Ù.
- ÇÊ¿äÇÏ´Ù¸é (Ç¥ÁØÀ» µû¸£´Â ºê¶ó¿ìÀú¿¡¼­) ÆäÀÌÁö¸¦ ÀÚµ¿À¸·Î
- °»½ÅÇÒ ¼ö ÀÖ´Ù. ÇöÀç ¼­¹ö »óŸ¦ ÄÄÇ»ÅÍ°¡ ÀÐÀ» ¼ö ÀÖ´Â
- °£´ÜÇÑ ¸ñ·ÏÀ¸·Î º¸¿©ÁÙ ¼öµµ ÀÖ´Ù.</p>
-
- <p>¾Ë·ÁÁÖ´Â Á¤º¸´Â:</p>
-
- <ul>
- <li>¿äûÀ» ¼­ºñ½ºÇÏ´Â workerÀÇ °³¼ö</li>
-
- <li>½¬°í ÀÖ´Â(idle) workerÀÇ °³¼ö</li>
-
- <li>°¢ workerµéÀÇ »óÅÂ, worker°¡ ó¸®ÇÑ ¿äûÀÇ °³¼ö¿Í
- worker°¡ ¼­ºñ½ºÇÑ Àüü ¹ÙÀÌÆ®¼ö (*)</li>
-
- <li>ÃÑ Á¢±Ù Ƚ¼ö¿Í ¼­ºñ½ºÇÑ ¹ÙÀÌÆ®¼ö (*)</li>
-
- <li>¼­¹ö°¡ ½ÃÀÛȤÀº Àç½ÃÀÛÇÑ ½Ã°£°ú µ¿ÀÛÇÑ ½Ã°£</li>
-
- <li>ÃÊ´ç ¿äû¼ö Æò±Õ, ÃÊ´ç ¼­ºñ½ºÇÑ ¹ÙÀÌÆ®¼ö¿Í ¿äû´ç
- ¹ÙÀÌÆ®¼ö Æò±Õ (*)</li>
-
- <li>ÇöÀç ¾ÆÆÄÄ¡ Àüü¿Í °¢ workerµéÀÇ CPU ºñÀ² (*)</li>
-
- <li>ÇöÀç ó¸®ÇÏ°í Àִ ȣ½ºÆ®¿Í ¿äû (*)</li>
- </ul>
-
- <p>Ç¥ÁØ ¾ÆÆÄÄ¡¿¡´Â "(*)"·Î Ç¥½ÃÇÑ Åë°è¸¦ ¾òÀ» ¼ö ¾ø´Ù.
- ÀÌ Á¤º¸¸¦ º¸·Á¸é ÄÄÆÄÀϽà ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-</summary>
-
-<section id="enable">
- <title>Status »ç¿ëÇϱâ</title>
-
- <p>foo.com µµ¸ÞÀο¡¼­ Á¢±ÙÇÑ ºê¶ó¿ìÀú¿¡°Ô¸¸ »óŸ¦ º¸¿©ÁÖ·Á¸é
- <code>httpd.conf</code> ¼³Á¤ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù</p>
-<example>
- &lt;Location /server-status&gt;<br />
- SetHandler server-status<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .foo.com<br />
- &lt;/Location&gt;
-</example>
-
- <p>ÀÌÁ¦ À¥ºê¶ó¿ìÀú·Î
- <code>http://your.server.name/server-status</code> ÆäÀÌÁö¿¡
- Á¢±ÙÇÏ¸é ¼­¹ö Åë°è¸¦ º¼ ¼ö ÀÖ´Ù.</p>
-</section>
-
-<section id="autoupdate">
-
- <title>ÀÚµ¿ °»½Å</title>
- <p>ºê¶ó¿ìÀú°¡ "Àç°»½Å"À» Áö¿øÇÑ´Ù¸é status ÆäÀÌÁö¸¦ ÀÚµ¿À¸·Î
- °»½ÅÇÒ ¼ö ÀÖ´Ù. N Ãʸ¶´Ù °»½ÅÇÏ·Á¸é
- <code>http://your.server.name/server-status?refresh=N</code>
- ÆäÀÌÁö¸¦ »ç¿ëÇ϶ó.</p>
-
-</section>
-
-<section id="machinereadable">
-
- <title>ÄÄÇ»ÅÍ°¡ ÀÐÀ» ¼ö ÀÖ´Â Status ÆÄÀÏ</title>
- <p><code>http://your.server.name/server-status?auto</code>¿¡¼­
- ÄÄÇ»ÅÍ°¡ ½±°Ô ÀÐÀ» ¼ö ÀÖ´Â status ÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ
- Çü½ÄÀº ¾ÆÆÄÄ¡ <code>/support</code> µð·ºÅ丮¿¡ ÀÖ´Â
- <code>log_server_status</code> Perl ÇÁ·Î±×·¥°ú °°ÀÌ ÀÚµ¿À¸·Î
- ½ÇÇàÇÏ´Â ÇÁ·Î±×·¥¿¡ À¯¿ëÇÏ´Ù.</p>
-
- <note>
- <strong><module>mod_status</module>¸¦ ¼­¹ö¿Í °°ÀÌ
- ÄÄÆÄÀÏÇÏ¿´´Ù¸é µð·ºÅ丮<em>º°</em> ¼³Á¤ÆÄÀÏÀ» (<em>¿¹¸¦
- µé¾î</em>, <code>.htaccess</code>) Æ÷ÇÔÇÏ¿© <em>¸ðµç</em>
- ¼³Á¤ÆÄÀÏ¿¡¼­ Çڵ鷯¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ »çÀÌÆ®¿¡
- º¸¾È ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.</strong>
- </note>
-
-</section>
-
-<directivesynopsis>
-
-<name>ExtendedStatus</name>
-<description>°¢ ¿äû¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »óÅ Á¤º¸¸¦ ±â·ÏÇÑ´Ù</description>
-<syntax>ExtendedStatus On|Off</syntax>
-<default>ExtendedStatus Off</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>ExtendedStatus´Â ¾ÆÆÄÄ¡ 1.3.2 ÀÌÈÄ¿¡¸¸ ÀÖ´Ù.</compatibility>
-
-<usage>
- <p>ÀÌ ¼³Á¤Àº ¼­¹ö Àüü¿¡ Àû¿ëµÇ¸ç, °¡»óÈ£½ºÆ®º°·Î Å°°í ²ø
- ¼ö ¾ø´Ù. ÀÚ¼¼ÇÑ »óÅ Á¤º¸¸¦ ¸ðÀ¸¸é ¼­¹ö°¡ ´À·ÁÁú ¼ö ÀÖ´Ù.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_status.xml.meta b/docs/manual/mod/mod_status.xml.meta
deleted file mode 100644
index ac1faf4d3d..0000000000
--- a/docs/manual/mod/mod_status.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_status</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_suexec.html b/docs/manual/mod/mod_suexec.html
deleted file mode 100644
index 4be81b750b..0000000000
--- a/docs/manual/mod/mod_suexec.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_suexec.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_suexec.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_suexec.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_suexec.html.en b/docs/manual/mod/mod_suexec.html.en
deleted file mode 100644
index 69cd74a390..0000000000
--- a/docs/manual/mod/mod_suexec.html.en
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_suexec - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_suexec</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_suexec.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Allows CGI scripts to run as a specified user
-and Group</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>suexec_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_suexec.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module, in combination with the <a href="../programs/suexec.html">suexec support program</a> allows
- CGI scripts to run as a specified user and Group.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#suexecusergroup">SuexecUserGroup</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../suexec.html">SuEXEC support</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>User and group permissions for CGI programs</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SuexecUserGroup <em>User Group</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_suexec</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SuexecUserGroup is only available in 2.0 and
-later.</td></tr>
-</table>
- <p>The <code class="directive">SuexecUserGroup</code> directive allows you
- to specify a user and group for CGI programs to run as. Non-CGI
- requests are still processes with the user specified in the User
- directive. This directive replaces the Apache 1.3 configuration of
- using the User and Group directives inside of VirtualHosts.</p>
-
- <div class="example"><h3>Example</h3><p><code>
-
- SuexecUserGroup nobody nogroup
- </code></p></div>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_suexec.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_suexec.html.ja.euc-jp b/docs/manual/mod/mod_suexec.html.ja.euc-jp
deleted file mode 100644
index 31344ab7a2..0000000000
--- a/docs/manual/mod/mod_suexec.html.ja.euc-jp
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_suexec - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_suexec</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_suexec.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Ç CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>³ÈÄ¥</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>suexec_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_suexec.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 °Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤È <a href="../programs/suexec.html">suexec ¥µ¥Ý¡¼¥È¥×¥í¥°¥é¥à</a>
- ¤Ë¤è¤ê¡¢CGI ¥¹¥¯¥ê¥×¥È¤¬»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Ç
- ¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#suexecusergroup">SuexecUserGroup</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../suexec.html">SuEXEC ¥µ¥Ý¡¼¥È</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>CGI ¥×¥í¥°¥é¥à¤Î¥æ¡¼¥¶¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¡¢¥°¥ë¡¼¥×¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SuexecUserGroup <em>User Group</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>³ÈÄ¥</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_suexec</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>SuexecUserGroup ¤Ï 2.0 °Ê¹ß¤Ç¤Î¤ß»ÈÍѲÄǽ¡£</td></tr>
-</table>
- <p><code class="directive">SuexecUserGroup</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï CGI ¥×¥í¥°¥é¥à
- ¤¬¼Â¹Ô¤µ¤ì¤ë¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£CGI °Ê³°¤Î
- ¥ê¥¯¥¨¥¹¥È¤Ï User ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤Î¤Þ¤Þ¤Ç½èÍý¤µ¤ì¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache 1.3 ¤Ë¤ª¤±¤ë VirtualHosts ¤ÎÃæ¤Ç
- User ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È Group ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦ÍÑË¡¤ÎÂå¤ï¤ê¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
-
- SuexecUserGroup nobody nogroup
- </code></p></div>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_suexec.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_suexec.html.ko.euc-kr b/docs/manual/mod/mod_suexec.html.ko.euc-kr
deleted file mode 100644
index 446d7d722e..0000000000
--- a/docs/manual/mod/mod_suexec.html.ko.euc-kr
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_suexec - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_suexec</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_suexec.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>CGI ½ºÅ©¸³Æ®¸¦ ƯÁ¤ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑÀ¸·Î ½ÇÇàÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>suexec_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_suexec.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>Available in Apache 2.0 and later</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>ÀÌ ¸ðµâÀº <a href="../programs/suexec.html">suexec Áö¿ø
- ÇÁ·Î±×·¥</a>À» »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ƯÁ¤ »ç¿ëÀÚ¿Í ±×·ì
- ±ÇÇÑÀ¸·Î ½ÇÇàÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#suexecusergroup">SuexecUserGroup</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../suexec.html">SuEXEC Áö¿ø</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SuexecUserGroup" id="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup" id="suexecusergroup">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>CGI ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>SuexecUserGroup <em>User Group</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_suexec</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Áö¿ø:</a></th><td>SuexecUserGroupÀº 2.0 ÀÌÈÄ¿¡¸¸ ÀÖ´Ù.</td></tr>
-</table>
- <p><code class="directive">SuexecUserGroup</code> Áö½Ã¾î´Â CGI ÇÁ·Î±×·¥ÀÌ
- »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ìÀ» ¼³Á¤ÇÑ´Ù. CGI°¡ ¾Æ´Ñ ¿äûÀº °è¼Ó
- User Áö½Ã¾î·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ°¡ ó¸®ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â ¾ÆÆÄÄ¡
- 1.3¿¡¼­ VirtualHost ¾È¿¡ »ç¿ëÇÑ User¿Í Group Áö½Ã¾î¸¦
- ´ëüÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
-
- SuexecUserGroup nobody nogroup
- </code></p></div>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_suexec.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_suexec.xml b/docs/manual/mod/mod_suexec.xml
deleted file mode 100644
index 8439f4c8fe..0000000000
--- a/docs/manual/mod/mod_suexec.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_suexec.xml.meta">
-
-<name>mod_suexec</name>
-<description>Allows CGI scripts to run as a specified user
-and Group</description>
-<status>Extension</status>
-<sourcefile>mod_suexec.c</sourcefile>
-<identifier>suexec_module</identifier>
-<compatibility>Available in Apache 2.0 and later</compatibility>
-
-
-<summary>
- <p>This module, in combination with the <a
- href="../programs/suexec.html">suexec support program</a> allows
- CGI scripts to run as a specified user and Group.</p>
-</summary>
-
-<seealso><a href="../suexec.html">SuEXEC support</a></seealso>
-
-<directivesynopsis>
-
-<name>SuexecUserGroup</name>
-<description>User and group permissions for CGI programs</description>
-<syntax>SuexecUserGroup <em>User Group</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>SuexecUserGroup is only available in 2.0 and
-later.</compatibility>
-
-<usage>
- <p>The <directive>SuexecUserGroup</directive> directive allows you
- to specify a user and group for CGI programs to run as. Non-CGI
- requests are still processes with the user specified in the User
- directive. This directive replaces the Apache 1.3 configuration of
- using the User and Group directives inside of VirtualHosts.</p>
-
- <example>
- <title>Example</title>
- SuexecUserGroup nobody nogroup
- </example>
-
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_suexec.xml.ja b/docs/manual/mod/mod_suexec.xml.ja
deleted file mode 100644
index 59c9c74867..0000000000
--- a/docs/manual/mod/mod_suexec.xml.ja
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_suexec.xml.meta">
-
-<name>mod_suexec</name>
-<description>$B;XDj$5$l$?%f!<%6$H%0%k!<%W$G(B CGI $B%9%/%j%W%H$r<B9T$9$k(B</description>
-<status>$B3HD%(B</status>
-<sourcefile>mod_suexec.c</sourcefile>
-<identifier>suexec_module</identifier>
-<compatibility>Apache 2.0 $B0J9_$G;HMQ2DG=(B</compatibility>
-
-
-<summary>
- <p>$B$3$N%b%8%e!<%k$H(B <a
- href="../programs/suexec.html">suexec $B%5%]!<%H%W%m%0%i%`(B</a>
- $B$K$h$j!"(BCGI $B%9%/%j%W%H$,;XDj$5$l$?%f!<%6$H%0%k!<%W$G(B
- $B<B9T$5$l$k$h$&$K$G$-$^$9!#(B</p>
-</summary>
-
-<seealso><a href="../suexec.html">SuEXEC $B%5%]!<%H(B</a></seealso>
-
-<directivesynopsis>
-
-<name>SuexecUserGroup</name>
-<description>CGI $B%W%m%0%i%`$N%f!<%6%Q!<%_%C%7%g%s!"%0%k!<%W%Q!<%_%C%7%g%s(B</description>
-<syntax>SuexecUserGroup <em>User Group</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>SuexecUserGroup $B$O(B 2.0 $B0J9_$G$N$_;HMQ2DG=!#(B</compatibility>
-
-<usage>
- <p><directive>SuexecUserGroup</directive> $B%G%#%l%/%F%#%V$O(B CGI $B%W%m%0%i%`(B
- $B$,<B9T$5$l$k%f!<%6$H%0%k!<%W$r;XDj$G$-$k$h$&$K$7$^$9!#(BCGI $B0J30$N(B
- $B%j%/%(%9%H$O(B User $B%G%#%l%/%F%#%V$G;XDj$5$l$?%f!<%6$N$^$^$G=hM}$5$l$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$O(B Apache 1.3 $B$K$*$1$k(B VirtualHosts $B$NCf$G(B
- User $B%G%#%l%/%F%#%V$H(B Group $B%G%#%l%/%F%#%V$r;H$&MQK!$NBe$o$j$K$J$j$^$9!#(B</p>
-
- <example>
- <title>$BNc(B</title>
- SuexecUserGroup nobody nogroup
- </example>
-
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_suexec.xml.ko b/docs/manual/mod/mod_suexec.xml.ko
deleted file mode 100644
index 3bf359c32b..0000000000
--- a/docs/manual/mod/mod_suexec.xml.ko
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_suexec.xml.meta">
-
-<name>mod_suexec</name>
-<description>CGI ½ºÅ©¸³Æ®¸¦ ƯÁ¤ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑÀ¸·Î ½ÇÇàÇÑ´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_suexec.c</sourcefile>
-<identifier>suexec_module</identifier>
-<compatibility>Available in Apache 2.0 and later</compatibility>
-
-
-<summary>
- <p>ÀÌ ¸ðµâÀº <a href="../programs/suexec.html">suexec Áö¿ø
- ÇÁ·Î±×·¥</a>À» »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ®¸¦ ƯÁ¤ »ç¿ëÀÚ¿Í ±×·ì
- ±ÇÇÑÀ¸·Î ½ÇÇàÇÑ´Ù.</p>
-</summary>
-
-<seealso><a href="../suexec.html">SuEXEC Áö¿ø</a></seealso>
-
-<directivesynopsis>
-
-<name>SuexecUserGroup</name>
-<description>CGI ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑ</description>
-<syntax>SuexecUserGroup <em>User Group</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>SuexecUserGroupÀº 2.0 ÀÌÈÄ¿¡¸¸ ÀÖ´Ù.</compatibility>
-
-<usage>
- <p><directive>SuexecUserGroup</directive> Áö½Ã¾î´Â CGI ÇÁ·Î±×·¥ÀÌ
- »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ìÀ» ¼³Á¤ÇÑ´Ù. CGI°¡ ¾Æ´Ñ ¿äûÀº °è¼Ó
- User Áö½Ã¾î·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ°¡ ó¸®ÇÑ´Ù. ÀÌ Áö½Ã¾î´Â ¾ÆÆÄÄ¡
- 1.3¿¡¼­ VirtualHost ¾È¿¡ »ç¿ëÇÑ User¿Í Group Áö½Ã¾î¸¦
- ´ëüÇÑ´Ù.</p>
-
- <example>
- <title>¿¹Á¦</title>
- SuexecUserGroup nobody nogroup
- </example>
-
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_suexec.xml.meta b/docs/manual/mod/mod_suexec.xml.meta
deleted file mode 100644
index 61ebfdadf7..0000000000
--- a/docs/manual/mod/mod_suexec.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_suexec</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_unique_id.html b/docs/manual/mod/mod_unique_id.html
deleted file mode 100644
index 1dae85cfd3..0000000000
--- a/docs/manual/mod/mod_unique_id.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_unique_id.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_unique_id.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_unique_id.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_unique_id.html.en b/docs/manual/mod/mod_unique_id.html.en
deleted file mode 100644
index fcef3633fe..0000000000
--- a/docs/manual/mod/mod_unique_id.html.en
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_unique_id - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_unique_id</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_unique_id.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_unique_id.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_unique_id.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides an environment variable with a unique
-identifier for each request</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>unique_id_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_unique_id.c</td></tr></table>
-<h3>Summary</h3>
-
-
- <p>This module provides a magic token for each request which is
- guaranteed to be unique across "all" requests under very
- specific conditions. The unique identifier is even unique
- across multiple machines in a properly configured cluster of
- machines. The environment variable <code>UNIQUE_ID</code> is
- set to the identifier for each request. Unique identifiers are
- useful for various reasons which are beyond the scope of this
- document.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#theory">Theory</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theory" id="theory">Theory</a></h2>
-
-
- <p>First a brief recap of how the Apache server works on Unix
- machines. This feature currently isn't supported on Windows NT.
- On Unix machines, Apache creates several children, the children
- process requests one at a time. Each child can serve multiple
- requests in its lifetime. For the purpose of this discussion,
- the children don't share any data with each other. We'll refer
- to the children as httpd processes.</p>
-
- <p>Your website has one or more machines under your
- administrative control, together we'll call them a cluster of
- machines. Each machine can possibly run multiple instances of
- Apache. All of these collectively are considered "the
- universe", and with certain assumptions we'll show that in this
- universe we can generate unique identifiers for each request,
- without extensive communication between machines in the
- cluster.</p>
-
- <p>The machines in your cluster should satisfy these
- requirements. (Even if you have only one machine you should
- synchronize its clock with NTP.)</p>
-
- <ul>
- <li>The machines' times are synchronized via NTP or other
- network time protocol.</li>
-
- <li>The machines' hostnames all differ, such that the module
- can do a hostname lookup on the hostname and receive a
- different IP address for each machine in the cluster.</li>
- </ul>
-
- <p>As far as operating system assumptions go, we assume that
- pids (process ids) fit in 32-bits. If the operating system uses
- more than 32-bits for a pid, the fix is trivial but must be
- performed in the code.</p>
-
- <p>Given those assumptions, at a single point in time we can
- identify any httpd process on any machine in the cluster from
- all other httpd processes. The machine's IP address and the pid
- of the httpd process are sufficient to do this. So in order to
- generate unique identifiers for requests we need only
- distinguish between different points in time.</p>
-
- <p>To distinguish time we will use a Unix timestamp (seconds
- since January 1, 1970 UTC), and a 16-bit counter. The timestamp
- has only one second granularity, so the counter is used to
- represent up to 65536 values during a single second. The
- quadruple <em>( ip_addr, pid, time_stamp, counter )</em> is
- sufficient to enumerate 65536 requests per second per httpd
- process. There are issues however with pid reuse over time, and
- the counter is used to alleviate this issue.</p>
-
- <p>When an httpd child is created, the counter is initialized
- with ( current microseconds divided by 10 ) modulo 65536 (this
- formula was chosen to eliminate some variance problems with the
- low order bits of the microsecond timers on some systems). When
- a unique identifier is generated, the time stamp used is the
- time the request arrived at the web server. The counter is
- incremented every time an identifier is generated (and allowed
- to roll over).</p>
-
- <p>The kernel generates a pid for each process as it forks the
- process, and pids are allowed to roll over (they're 16-bits on
- many Unixes, but newer systems have expanded to 32-bits). So
- over time the same pid will be reused. However unless it is
- reused within the same second, it does not destroy the
- uniqueness of our quadruple. That is, we assume the system does
- not spawn 65536 processes in a one second interval (it may even
- be 32768 processes on some Unixes, but even this isn't likely
- to happen).</p>
-
- <p>Suppose that time repeats itself for some reason. That is,
- suppose that the system's clock is screwed up and it revisits a
- past time (or it is too far forward, is reset correctly, and
- then revisits the future time). In this case we can easily show
- that we can get pid and time stamp reuse. The choice of
- initializer for the counter is intended to help defeat this.
- Note that we really want a random number to initialize the
- counter, but there aren't any readily available numbers on most
- systems (<em>i.e.</em>, you can't use rand() because you need
- to seed the generator, and can't seed it with the time because
- time, at least at one second resolution, has repeated itself).
- This is not a perfect defense.</p>
-
- <p>How good a defense is it? Suppose that one of your machines
- serves at most 500 requests per second (which is a very
- reasonable upper bound at this writing, because systems
- generally do more than just shovel out static files). To do
- that it will require a number of children which depends on how
- many concurrent clients you have. But we'll be pessimistic and
- suppose that a single child is able to serve 500 requests per
- second. There are 1000 possible starting counter values such
- that two sequences of 500 requests overlap. So there is a 1.5%
- chance that if time (at one second resolution) repeats itself
- this child will repeat a counter value, and uniqueness will be
- broken. This was a very pessimistic example, and with real
- world values it's even less likely to occur. If your system is
- such that it's still likely to occur, then perhaps you should
- make the counter 32 bits (by editing the code).</p>
-
- <p>You may be concerned about the clock being "set back" during
- summer daylight savings. However this isn't an issue because
- the times used here are UTC, which "always" go forward. Note
- that x86 based Unixes may need proper configuration for this to
- be true -- they should be configured to assume that the
- motherboard clock is on UTC and compensate appropriately. But
- even still, if you're running NTP then your UTC time will be
- correct very shortly after reboot.</p>
-
- <p>The <code>UNIQUE_ID</code> environment variable is
- constructed by encoding the 112-bit (32-bit IP address, 32 bit
- pid, 32 bit time stamp, 16 bit counter) quadruple using the
- alphabet <code>[A-Za-z0-9@-]</code> in a manner similar to MIME
- base64 encoding, producing 19 characters. The MIME base64
- alphabet is actually <code>[A-Za-z0-9+/]</code> however
- <code>+</code> and <code>/</code> need to be specially encoded
- in URLs, which makes them less desirable. All values are
- encoded in network byte ordering so that the encoding is
- comparable across architectures of different byte ordering. The
- actual ordering of the encoding is: time stamp, IP address,
- pid, counter. This ordering has a purpose, but it should be
- emphasized that applications should not dissect the encoding.
- Applications should treat the entire encoded
- <code>UNIQUE_ID</code> as an opaque token, which can be
- compared against other <code>UNIQUE_ID</code>s for equality
- only.</p>
-
- <p>The ordering was chosen such that it's possible to change
- the encoding in the future without worrying about collision
- with an existing database of <code>UNIQUE_ID</code>s. The new
- encodings should also keep the time stamp as the first element,
- and can otherwise use the same alphabet and bit length. Since
- the time stamps are essentially an increasing sequence, it's
- sufficient to have a <em>flag second</em> in which all machines
- in the cluster stop serving and request, and stop using the old
- encoding format. Afterwards they can resume requests and begin
- issuing the new encodings.</p>
-
- <p>This we believe is a relatively portable solution to this
- problem. It can be extended to multithreaded systems like
- Windows NT, and can grow with future needs. The identifiers
- generated have essentially an infinite life-time because future
- identifiers can be made longer as required. Essentially no
- communication is required between machines in the cluster (only
- NTP synchronization is required, which is low overhead), and no
- communication between httpd processes is required (the
- communication is implicit in the pid value assigned by the
- kernel). In very specific situations the identifier can be
- shortened, but more information needs to be assumed (for
- example the 32-bit IP address is overkill for any site, but
- there is no portable shorter replacement for it). </p>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_unique_id.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_unique_id.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_unique_id.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_unique_id.html.ja.euc-jp b/docs/manual/mod/mod_unique_id.html.ja.euc-jp
deleted file mode 100644
index c42e32e587..0000000000
--- a/docs/manual/mod/mod_unique_id.html.ja.euc-jp
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_unique_id - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_unique_id</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_unique_id.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_unique_id.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_unique_id.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¤½¤ì¤¾¤ì¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë°ì°Õ¤Ê¼±Ê̻ҤÎÆþ¤Ã¤¿´Ä¶­ÊÑ¿ô¤ò
-Ä󶡤¹¤ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>unique_id_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_unique_id.c</td></tr></table>
-<h3>³µÍ×</h3>
-
-
- <p>¤³¤Î¥â¥¸¥å¡¼¥ë¤ÏÈó¾ï¤ËÀ©¸Â¤µ¤ì¤¿¾ò·ï²¼¤Ç¡¢
- ¤½¤ì¤¾¤ì¤Î¥ê¥¯¥¨¥¹¥È¤Ë¡Ö¤¹¤Ù¤Æ¡×¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ
- °ì°Õ¤Ë·è¤Þ¤ë¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤ëËâË¡¤Î¥È¡¼¥¯¥ó¤òÄ󶡤·¤Þ¤¹¡£
- ¤³¤Î°ì°Õ¤Ê¼±Ê̻Ҥϡ¢Å¬ÀÚ¤ËÀßÄꤵ¤ì¤¿¥¯¥é¥¹¥¿¤Ç¤ÏÊ£¿ô¤Î
- ¥Þ¥·¥ó¤Î´Ö¤Ç¤µ¤¨¤â°ì°Õ¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤ì¤¾¤ì¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ´Ä¶­ÊÑ¿ô
- <code>UNIQUE_ID</code> ¤Ë¼±Ê̻Ҥ¬ÀßÄꤵ¤ì¤Þ¤¹¡£
- °ì°Õ¤Ê¼±Ê̻Ҥ¬ÊØÍø¤ÊÍýͳ¤Ï¤¤¤í¤¤¤í¤¢¤ê¤Þ¤¹¤¬¡¢
- ¤³¤Î¥É¥­¥å¥á¥ó¥È¤ÎÌÜŪ¤«¤é¤Ï³°¤ì¤ë¤¿¤á¡¢¤³¤³¤Ç¤ÏÀâÌÀ¤·¤Þ¤»¤ó¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#theory">ÍýÏÀ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theory" id="theory">ÍýÏÀ</a></h2>
-
-
- <p>¤Þ¤º¤Ï¤¸¤á¤Ë¡¢Apache ¥µ¡¼¥Ð¤¬ Unix
- ¥Þ¥·¥ó¤Ç¤É¤Î¤è¤¦¤ËÆ°ºî¤ò¤¹¤ë¤«¤ò´Êñ¤ËÀâÌÀ¤·¤Þ¤¹¡£
- ¤³¤Îµ¡Ç½¤Ï¸½»þÅÀ¤Ç¤Ï Windows NT ¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
- Unix ¥Þ¥·¥ó¤Ç¤Ï Apache ¤Ï¤¤¤¯¤Ä¤«¤Î»Ò¥×¥í¥»¥¹¤òºîÀ®¤·¡¢
- ¤½¤Î»Ò¥×¥í¥»¥¹¤¬°ì¤Ä¤º¤Ä¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤·¤Þ¤¹¡£¤½¤ì¤¾¤ì¤Î»Ò¥×¥í¥»¥¹¤Ï¡¢
- À¸Â¸´ü´ÖÃæ¤ËÊ£¿ô¤Î¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ÎµÄÏÀ¤Ç¤Ï»Ò¥×¥í¥»¥¹´Ö¤Ç¤Ï°ìÀڥǡ¼¥¿¤ò¶¦Í­¤·¤Ê¤¤¤³¤È¤Ë¤·¤Þ¤¹¡£
- °Ê¸å¡¢¤³¤Î»Ò¥×¥í¥»¥¹¤Î¤³¤È¤ò httpd ¥×¥í¥»¥¹¤È¸Æ¤Ó¤Þ¤¹¡£</p>
-
- <p>¤¢¤Ê¤¿¤Î¥¦¥§¥Ö¥µ¥¤¥È¤Ë¤Ï¤¢¤Ê¤¿¤¬´ÉÍý¤¹¤ë¤¤¤¯¤Ä¤«¤Î¥Þ¥·¥ó¤¬¤¢¤ë¤È¤·¤Þ¤¹¡£
- ¤½¤ì¤é¤ò¤Þ¤È¤á¤Æ¥¯¥é¥¹¥¿¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡£¤½¤ì¤¾¤ì¤Î¥Þ¥·¥ó¤ÏÊ£¿ô¤Î
- Apache ¤ò¼Â¹Ô¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤é¤¹¤Ù¤Æ¤ò¤Þ¤È¤á¤¿¤â¤Î¤¬¡Ö±§Ãè¡×¤Ç¤¢¤ë¤È¹Í¤¨¤é¤ì¤Þ¤¹¡£
- ¤¤¤¯¤Ä¤«¤Î²¾Äê¤Î²¼¤Ç¡¢¥¯¥é¥¹¥¿¤Î¥Þ¥·¥ó´Ö¤¬¤¿¤¯¤µ¤óÄÌ¿®¤ò¤¹¤ë¤³¤È¤Ê¤¯¡¢
- ¤³¤Î±§Ãè¤ÎÃæ¤Ç¤½¤ì¤¾¤ì¤Î¥ê¥¯¥¨¥¹¥È¤Ë°ì°Õ¤Ê¼±Ê̻ҤòÀ¸À®¤Ç¤­¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- </p>
-
- <p>¥¯¥é¥¹¥¿¤Ë¤¢¤ë¥Þ¥·¥ó¤Ï°Ê²¼¤ÎÍ×µá¤ò¸«¤¿¤µ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- (¥Þ¥·¥ó¤¬°ì¤Ä¤À¤±¤À¤È¤·¤Æ¤â¡¢NTP ¤Ç»þ·×¤ò¹ç¤ï¤»¤ëÊý¤¬Îɤ¤¤Ç¤¹¡£)</p>
-
- <ul>
- <li>NTP ¤ä¾¤Î¥Í¥Ã¥È¥ï¡¼¥¯¾å¤Ç»þ´Ö¤ò¹ç¤ï¤»¤ë¥×¥í¥È¥³¥ë¤Ë¤è¤Ã¤Æ
- ³Æ¥Þ¥·¥ó¤Î»þ´Ö¤ÎƱ´ü¤¬¼è¤é¤ì¤Æ¤¤¤ë¤³¤È¡£</li>
-
- <li>¥â¥¸¥å¡¼¥ë¤¬¥Û¥¹¥È̾¤ò°ú¤¤¤Æ°ã¤¦ IP
- ¥¢¥É¥ì¥¹¤ò¼õ¤±¼è¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¢
- ¥¯¥é¥¹¥¿¤Î¤½¤ì¤¾¤ì¤Î¥Þ¥·¥ó¤Î¥Û¥¹¥È̾¤¬°ã¤¦¤³¤È¡£</li>
- </ul>
-
- <p>¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ë¤ª¤¤¤Æ¤Ï¡¢pid (¥×¥í¥»¥¹ ID) ¤¬
- 32 ¥Ó¥Ã¥È¤ÎÈÏ°ÏÆâ¤Ç¤¢¤ë¤³¤È¤ò²¾Äꤷ¤Þ¤¹¡£¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î
- pid ¤¬ 32 ¥Ó¥Ã¥È¤òĶ¤¨¤ë¾ì¹ç¤Ï¡¢´Êñ¤Ê½¤Àµ¤Ç¤Ï¤¢¤ê¤Þ¤¹¤¬¡¢
- ¥³¡¼¥É¤òÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤é¤Î²¾Ä꤬Ëþ¤¿¤µ¤ì¤Æ¤¤¤ë¤È¡¢¤¢¤ë»þÅÀ¤Ë¤ª¤¤¤Æ¡¢
- ¥¯¥é¥¹¥¿Æâ¤Î¤É¤Î¥Þ¥·¥ó¤Î¤É¤Î httpd
- ¥×¥í¥»¥¹¤Ç¤â¡¢°ì°Õ¤ËƱÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ï¥Þ¥·¥ó¤Î IP
- ¥¢¥É¥ì¥¹¤È httpd ¥×¥í¥»¥¹¤Î pid ¤Ç½½Ê¬¤Ë¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢¥ê¥¯¥¨¥¹¥È¤Ë°ì°Õ¤Ê¼±Ê̻ҤòÀ¸À®¤¹¤ë¤¿¤á¤Ë¤Ï¡¢
- »þ¹ï¤ò¶èÊ̤¹¤ëɬÍפ¬¤¢¤ë¤À¤±¤Ç¤¹¡£</p>
-
- <p>»þ¹ï¤ò¶èÊ̤¹¤ë¤¿¤á¤Ë¡¢Unix ¤Î¥¿¥¤¥à¥¹¥¿¥ó¥× (UTC ¤Î 1970 ǯ
- 1 ·î 1 Æü¤«¤é¤ÎÉÿô) ¤È¡¢16 ¥Ó¥Ã¥È¤Î¥«¥¦¥ó¥¿¤ò»È¤¤¤Þ¤¹¡£
- ¥¿¥¤¥à¥¹¥¿¥ó¥×¤ÎγÅ٤ϰìÉäǤ¹¤Î¤Ç¡¢°ìÉô֤Π65536
- ¤Þ¤Ç¤ÎÃͤòɽ¸½¤¹¤ë¤¿¤á¤Ë¥«¥¦¥ó¥¿¤ò»ÈÍѤ·¤Þ¤¹¡£»Í¤Ä¤ÎÃÍ
- <em>( ip_addr, pid, time_stamp, counter )</em> ¤Ç³Æ httpd
- ¥×¥í¥»¥¹¤Ç°ìÉÃ¤Î´Ö¤Ë 65536 ¥ê¥¯¥¨¥¹¥È¤ò¿ô¤¨¤¢¤²¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- »þ´Ö¤¬·Ð¤Ä¤È pid ¤¬ºÆÍøÍѤµ¤ì¤ë¤È¤¤¤¦ÌäÂ꤬¤¢¤ê¤Þ¤¹¤¬¡¢
- ¤³¤ÎÌäÂê¤ò²ò·è¤¹¤ë¤¿¤á¤Ë¥«¥¦¥ó¥¿¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <p>httpd ¤Î»Ò¥×¥í¥»¥¹¤¬ºîÀ®¤µ¤ì¤ë¤È¡¢¥«¥¦¥ó¥¿¤Ï
- (¤½¤Î»þÅÀ¤Î¥Þ¥¤¥¯¥íÉà ¡à 10) modulo 65536 ¤Ç½é´ü²½¤µ¤ì¤Þ¤¹
- (¤³¤Î¼°¤Ï¤¤¤¯¤Ä¤«¤Î¥·¥¹¥Æ¥à¤Ë¤¢¤ë¡¢¥Þ¥¤¥¯¥íÉäÎ
- ¥¿¥¤¥Þ¤Î²¼°Ì¥Ó¥Ã¥È¤¬°Û¤Ê¤ë¤È¤¤¤¦ÌäÂê¤ò²ò·è¤¹¤ë¤¿¤á¤ËÁª¤Ð¤ì¤Þ¤·¤¿)¡£
- °ì°Õ¤Ê¼±Ê̻Ҥ¬À¸À®¤µ¤ì¤¿¤È¤­¡¢»ÈÍѤµ¤ì¤ë¥¿¥¤¥à¥¹¥¿¥ó¥×¤Ï
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ë¥ê¥¯¥¨¥¹¥È¤¬ÅþÃ夷¤¿»þ¹ï¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥«¥¦¥ó¥¿¤Ï¼±Ê̻Ҥ¬À¸À®¤µ¤ì¤ë¤¿¤Ó¤ËÁý²Ã¤·¤Þ¤¹
- (¤¢¤Õ¤ì¤¿¾ì¹ç¤Ï 0 ¤ËÌá¤ê¤Þ¤¹)¡£</p>
-
- <p>¥«¡¼¥Í¥ë¤Ï¥×¥í¥»¥¹¤ò¥Õ¥©¡¼¥¯¤¹¤ë¤È¡¢¤½¤ì¤¾¤ì¤Î¥×¥í¥»¥¹¤Î¤¿¤á¤Ë
- pid ¤òÀ¸À®¤·¤Þ¤¹¡£pid ¤Ï·«¤êÊÖ¤µ¤ì¤ë¤³¤È¤¬µö²Ä¤µ¤ì¤Æ¤¤¤Þ¤¹
- (pid ¤ÎÃͤÏ¿¤¯¤Î Unix ¤Ç¤Ï 16 ¥Ó¥Ã¥È¤Ç¤¹¤¬¡¢¿·¤·¤¤¥·¥¹¥Æ¥à¤Ç¤Ï
- 32 ¥Ó¥Ã¥È¤Ë³ÈÄ¥¤µ¤ì¤Æ¤¤¤Þ¤¹)¡£
- ¤Ç¤¹¤«¤é¡¢¤¢¤ëÄøÅ٤λþ´Ö¤¬·Ð²á¤¹¤ë¤ÈƱ¤¸ pid ¤¬ºÆ¤Ó»ÈÍѤµ¤ì¤Þ¤¹¡£
- ¤·¤«¤·¡¢°ìÉÃÆâ¤ËºÆ»ÈÍѤµ¤ì¤Ê¤±¤ì¤Ð¡¢
- »Í¤Ä¤ÎÃͤΰì°ÕÀ­¤ÏÊݤ¿¤ì¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢²æ¡¹¤Ï¥·¥¹¥Æ¥à¤¬°ìÉôÖ
- ¤Ë 65536 ¸Ä¤Î¥×¥í¥»¥¹¤òµ¯Æ°¤·¤Ê¤¤¤È²¾Äꤷ¤Æ¤¤¤Þ¤¹ (¤¤¤¯¤Ä¤«¤Î Unix
- ¤Ç¤Ï 32768 ¥×¥í¥»¥¹¤Ç¤¹¤¬¡¢¤½¤ì¤Ç¤¹¤é¤Û¤È¤ó¤É¤¢¤êÆÀ¤Ê¤¤¤Ç¤·¤ç¤¦)¡£</p>
-
- <p>²¿¤é¤«¤ÎÍýͳ¤Ç¡¢Æ±¤¸»þ¹ï¤¬·«¤êÊÖ¤µ¤ì¤¿¤È¤·¤Þ¤·¤ç¤¦¡£
- ¤Ä¤Þ¤ê¡¢¥·¥¹¥Æ¥à¤Î»þ·×¤¬¶¸¤Ã¤Æ¤¤¤Æ¡¢¤â¤¦°ìÅÙ²áµî¤Î»þ¹ï¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿
- (¤â¤·¤¯¤Ï¿Ê¤ß¤¹¤®¤Æ¤¤¤¿¤È¤­¤Ë¡¢
- Àµ¤·¤¤»þ¹ï¤ËÌᤷ¤¿¤¿¤á¤ËºÆ¤Ó¾­Íè¤Î»þ¹ï¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿) ¤È¤·¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¡¢pid ¤È¥¿¥¤¥à¥¹¥¿¥ó¥×¤¬ºÆ»ÈÍѤµ¤ì¤ë¤³¤È¤¬´Êñ¤Ë¼¨¤µ¤ì¤Þ¤¹¡£
- ¥«¥¦¥ó¥¿½é´ü²½ÍѤδؿô¤Ï¡¢¤³¤ÎÌäÂê¤Î²óÈò¤ò¼ê½õ¤±¤·¤è¤¦¤ÈÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ËÜÅö¤Ï¥«¥¦¥ó¥¿¤Î½é´ü²½¤ò¤¹¤ë¤¿¤á¤Ë¥é¥ó¥À¥à¤Ê¿ô»ú¤ò»È¤¤¤¿¤¤¤Î¤Ç¤¹¤¬¡¢
- ¤Û¤È¤ó¤É¤Î¥·¥¹¥Æ¥à¤Ç¤Ï´Êñ¤Ë»ÈÍѤǤ­¤ë¿ô¤Ï̵¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤
- (<em>¤¹¤Ê¤ï¤Á</em>¡¢rand ()¤Ï»È¤¨¤Þ¤»¤ó¡£rand () ¤Ë¤Ï seed
- ¤òÍ¿¤¨¤ëɬÍפ¬¤¢¤ê¡¢seed ¤Ë¤Ï»þ¹ï¤ò»È¤¨¤Þ¤»¤ó¡£°ìÉÃñ°Ì¤Ç¤Ï¡¢
- ¤½¤Î»þ¹ï¤Ï¤¹¤Ç¤Ë·«¤êÊÖ¤µ¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¹)¡£
- ¤³¤ì¤Ï¡¢´°àú¤ÊÂкö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <p>¤³¤ÎÂкö¤Ï¤É¤Î¤¯¤é¤¤¸ú²Ì¤¬¤¢¤ë¤Ç¤·¤ç¤¦¤«?
- ¤³¤³¤Ç¤Ï¡¢¥Þ¥·¥ó·²¤ÎÃæ¤Î°ì¤Ä¤ÏºÇÂç¤Ç°ìÉÃ¤Ë 500
- ¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¤È²¾Äꤷ¤Þ¤¹ (¤³¤ì¤ò½ñ¤¤¤Æ¤¤¤ë»þÅÀ¤Ç¤ÏÂÅÅö¤Ê¾å¸Â¤Ç¤¹¡£
- Ä̾亮¥¹¥Æ¥à¤¬¤¹¤ë¤³¤È¤ÏÀÅŪ¤Ê¥Õ¥¡¥¤¥ë¤ò¼è¤ê¤À¤¹¤À¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤«¤é)¡£
- ¤½¤ì¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë¡¢¤½¤Î¥Þ¥·¥ó¤ÏʹԤ·¤ÆÍè¤ë¥¯¥é¥¤¥¢¥ó¥È¤Î¿ô¤Ë
- ±þ¤¸¤¿¿ô¤Î»Ò¥×¥í¥»¥¹¤òÍ׵ᤷ¤Þ¤¹¡£
- ¤·¤«¤·¤Ê¤¬¤é¡¢Èá´ÑŪ¤Ë¹Í¤¨¤Æ¡¢°ì¤Ä¤Î»Ò¥×¥í¥»¥¹¤¬°ìÉÃ¤Ë 500
- ¥ê¥¯¥¨¥¹¥È¤ò°·¤¨¤ë¤È¤·¤Þ¤¹¡£¤½¤¦¤¹¤ë¤È¡¢(°ìÉäÎÀºÅ٤ˤª¤¤¤Æ)
- »þ¹ï¤¬Æ±¤¸»þ¤ò·«¤êÊÖ¤¹¤È¡¢¤³¤Î»Ò¥×¥í¥»¥¹¤¬¥«¥¦¥ó¥¿¤ÎÃͤòºÆ¤Ó»È¤¤¡¢
- °ì°ÕÀ­¤¬²õ¤ì¤ë²ÄǽÀ­¤¬ 1.5% ¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤ÏÈó¾ï¤ËÈá´ÑŪ¤ÊÎã¤Ç¡¢¼ÂÀ¤³¦¤ÎÃͤǤϡ¢¤Û¤È¤ó¤Éµ¯¤³¤ê¤½¤¦¤Ë¤¢¤ê¤Þ¤»¤ó¡£
- ¤½¤ì¤Ç¤â¤³¤ì¤¬µ¯¤³¤ë²ÄǽÀ­¤Î¤¢¤ë¤è¤¦¤Ê¥·¥¹¥Æ¥à¤Ê¤é¡¢
- (¥×¥í¥°¥é¥à¥³¡¼¥É¤òÊÔ½¸¤·¤Æ)
- ¥«¥¦¥ó¥¿¤ò 32 ¥Ó¥Ã¥È¤Ë¤¹¤ë¤Î¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
- </p>
-
- <p>¥µ¥Þ¡¼¥¿¥¤¥à¤Ë¤è¤ê»þ·×¤¬¡ÖÌᤵ¤ì¤ë¡×¤³¤È¤òµ¤¤Ë¤·¤Æ¤¤¤ë¿Í¤¬
- ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤³¤³¤Ç»ÈÍѤµ¤ì¤ë»þ´Ö¤Ï UTC ¤Ç¤¢¤ê¡¢
- ¤½¤ì¤Ï¡Ö¾ï¤Ë¡×¿Ê¤à¤Î¤Ç¤³¤³¤Ç¤ÏÌäÂê¤Ë¤Ê¤ê¤Þ¤»¤ó¡£x86 ¾å¤Î Unix
- ¤Ï¤³¤Î¾ò·ï¤òËþ¤¿¤¹¤¿¤á¤ËŬÀÚ¤ÊÀßÄ꤬ɬÍפ«¤â¤·¤ì¤Ê¤¤¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¥Þ¥¶¡¼¥Ü¡¼¥É¤Î»þ·×¤Ï UTC ¤Ë¤Ê¤Ã¤Æ¤¤¤Æ¡¢
- ¾¤Î»þ´Ö¤Ï¤½¤³¤«¤éŬÀÚ¤ËÊäÀµ¤µ¤ì¤ë¤³¤È¤ò²¾Äê¤Ç¤­¤ë¤è¤¦¤Ë
- ÀßÄꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ç¤µ¤¨¡¢NTP
- ¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¤Ð¥ê¥Ö¡¼¥È¸å¤Ë¤¹¤°Àµ¤·¤¤ UTC ¤Î»þ´Ö¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p><code>UNIQUE_ID</code> ´Ä¶­ÊÑ¿ô¤Ï 112 ¥Ó¥Ã¥È (32 ¥Ó¥Ã¥È IP
- ¥¢¥É¥ì¥¹¡¢32 ¥Ó¥Ã¥È pid, 32 ¥Ó¥Ã¥È¥¿¥¤¥à¥¹¥¿¥ó¥×¡¢16
- ¥Ó¥Ã¥È¥«¥¦¥ó¥¿¤Î»Í¤Ä¤ÎÁÈ) ¤ò¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È <code>[A-Za-z0-9@-]</code>
- ¤òÍѤ¤¤Æ MIME ¤Î base64 Éä¹æ²½¤ÈƱÍͤÎÊýË¡¤Ë¤è¤êÉä¹æ²½¤·¡¢19
- ¤Îʸ»ú¤òÀ¸À®¤¹¤ë¤³¤È¤Ë¤è¤êºîÀ®¤µ¤ì¤Þ¤¹¡£MIME ¤Î base64
- ¤Î¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤Ï¼ÂºÝ¤Ï <code>[A-Za-z0-9+/]</code> ¤Ç¤¹¤¬¡¢
- <code>+</code> ¤È <code>/</code> ¤È¤Ï URL
- ¤Ç¤ÏÆÃÊ̤ÊÉä¹æ²½¤¬É¬ÍפʤΤǡ¢¤¢¤Þ¤ê˾¤Þ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£
- Á´¤Æ¤ÎÃͤϥͥåȥ¥¯¥Ð¥¤¥È¥ª¡¼¥À¤ÇÉä¹æ²½¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- Éä¹æ¤Ï°ã¤Ã¤¿¥Ð¥¤¥È¥ª¡¼¥À¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã´Ö¤ÇÈæ³Ó²Äǽ¤Ç¤¹¡£
- ¼ÂºÝ¤ÎÉä¹æ²½¤Î½çÈÖ¤Ï: ¥¿¥¤¥à¥¹¥¿¥ó¥×¡¢IP ¥¢¥É¥ì¥¹¡¢pid,
- ¥«¥¦¥ó¥¿¤Ç¤¹¡£¤³¤Î½ç¤Ë¤ÏÌÜŪ¤¬¤¢¤ê¤Þ¤¹¤¬¡¢
- ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏÉä¹æ¤ò²òÀϤ¹¤ë¤Ù¤­¤Ç¤Ï¤Ê¤¤¤³¤È¤ò¶¯Ä´¤·¤Æ¤ª¤­¤Þ¤¹¡£
- ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏÉä¹æ²½¤µ¤ì¤¿ <code>UNIQUE_ID</code>
- Á´ÂΤòÆ©²áŪ¤Ê¥È¡¼¥¯¥ó¤È¤·¤Æ°·¤¦¤Ù¤­¤Ç¤¹¡£
- <code>UNIQUE_ID</code> ¤Ï¾¤Î <code>UNIQUE_ID</code>
- ¤È¤ÎÅù²ÁÀ­¤òÄ´¤Ù¤ë¤¿¤á¤À¤±¤Ë¤Î¤ß»ÈÍѤǤ­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î½çÈ֤Ͼ­Íè¡¢´û¸¤Î <code>UNIQUE_ID</code>
- ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤È¤Î¾×Æͤò¿´ÇÛ¤¹¤ë¤³¤È¤Ê¤¯Éä¹æ¤òÊѹ¹¤¹¤ë¤³¤È¤¬
- ²Äǽ¤Ë¤Ê¤ë¤è¤¦¤ËÁªÂò¤·¤Æ¤¤¤Þ¤¹¡£
- ¿·¤·¤¤Éä¹æ¤Ï¥¿¥¤¥à¥¹¥¿¥ó¥×¤òºÇ½é¤ÎÍ×ÁǤȤ·¤Æ»Ä¤¹¤Î¤¬Ë¾¤Þ¤·¤¯¡¢
- ¤½¤ì°Ê³°¤ÏƱ¤¸¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤È¥Ó¥Ã¥ÈŤò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¥¿¥¤¥à¥¹¥¿¥ó¥×¤ÏËܼÁŪ¤ËÁý²Ã·ÏÎó¤Ç¤¹¤Î¤Ç¡¢
- ¥¯¥é¥¹¥¿¤ÎÁ´¤Æ¤Î¥Þ¥·¥ó¤¬¥ê¥¯¥¨¥¹¥È¤È¥µ¡¼¥Ðµ¡Ç½¤òÄä»ß¤·¤Æ¡¢
- ¸Å¤¤Éä¹æ²½Êý¼°¤ò»ÈÍѤ¹¤ë¤Î¤ò¤ä¤á¤ë<em>¥Õ¥é¥°ÉÃ</em>¤¬¤¢¤ì¤Ð½½Ê¬¤Ç¤¹¡£
- ¤½¤Î¸å¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤òºÆ³«¤·¡¢
- ¿·¤·¤¤Éä¹æ¤òȯ¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>²æ¡¹¤Ï¤³¤ì¤¬¡¢
- ¤³¤ÎÌäÂê¤ËÂФ¹¤ëÈæ³ÓŪ°Ü¿¢À­¤Î¹â¤¤²ò·èË¡¤À¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£
- Windows NT ¤Î¤è¤¦¤Ê¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Î¥·¥¹¥Æ¥à¤Ë³ÈÄ¥¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤·¡¢
- ¾­ÍèɬÍפˤʤì¤Ð¤µ¤é¤ËÁý¤ä¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ID ¤ÏɬÍפ˱þ¤¸¤ÆŤ¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢À¸À®¤µ¤ì¤¿ ID
- ¤Ï¼Â¼Á¾å¡¢Ìµ¸Â¤ËÍ­¸ú¤Ç¤¹¡£¤Þ¤¿¡¢¥¯¥é¥¹¥¿¤Î¥Þ¥·¥ó´Ö¤ÎÄÌ¿®¤â»ö¼Â¾åɬÍפʤ¯
- (NTP ¤Ë¤è¤ëƱ´ü¤Î¤ß¤¬É¬Íפǡ¢¤³¤ì¤Ï¥ª¡¼¥Ð¥Ø¥Ã¥É¤Ï¤¢¤Þ¤ê¤¢¤ê¤Þ¤»¤ó)¡¢httpd
- ¥×¥í¥»¥¹´Ö¤ÎÄÌ¿®¤âɬÍפ¢¤ê¤Þ¤»¤ó (ÄÌ¿®¤Ï¥«¡¼¥Í¥ë¤Ë¤è¤ê³ä¤êÅö¤Æ¤é¤ì¤¿
- pid ¤ÎÃͤˤè¤ê°ÅÌÛ¤ÎÆâ¤Ë¹Ô¤Ê¤ï¤Æ¤¤¤Þ¤¹)¡£
- ¤µ¤é¤Ë¸Â¤é¤ì¤¿¾õ¶·²¼¤Ç¤Ï¡¢ID ¤Ï¤µ¤é¤Ëû¤¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢
- ¤è¤ê¿¤¯¤Î¾ðÊó¤ò²¾Äꤹ¤ëɬÍפ¬¤Ç¤Æ¤­¤Þ¤¹ (Î㤨¤Ð¡¢32 ¥Ó¥Ã¥È
- IP ¥¢¥É¥ì¥¹¤Ï¤É¤Î¥µ¥¤¥È¤Ë¤ª¤¤¤Æ¤â²á¾ê¤Ê¾ðÊó¤Ç¤¹¤¬¡¢
- ¤½¤ì¤ÎÂå¤ï¤ê¤Ë¤Ê¤ë°Ü¿¢À­¤Î¤¢¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó)¡£</p>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_unique_id.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_unique_id.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_unique_id.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_unique_id.html.ko.euc-kr b/docs/manual/mod/mod_unique_id.html.ko.euc-kr
deleted file mode 100644
index b331cacc67..0000000000
--- a/docs/manual/mod/mod_unique_id.html.ko.euc-kr
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_unique_id - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_unique_id</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_unique_id.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_unique_id.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_unique_id.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>°¢ ¿äû¸¶´Ù À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ °¡Áö´Â ȯ°æº¯¼ö¸¦
-Á¦°øÇÑ´Ù</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>unique_id_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_unique_id.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-
- <p>ÀÌ ¸ðµâÀº ¾î¶² Ưº°ÇÑ »óȲ¿¡¼­µµ "¸ðµç" ¿äûÁß¿¡¼­
- À¯ÀÏÇϵµ·Ï º¸ÀåµÈ ½Äº°ÀÚ(identifier)¸¦ ¸ðµç ¿äû¿¡ Á¦°øÇÑ´Ù.
- ½ÉÁö¾î ÀÌ ½Äº°Àڴ Ưº°ÇÏ°Ô ±¸¼ºÇÑ Å¬·¯½ºÅÍÀÇ ¿©·¯ ÄÄÇ»Å͵é
- Áß¿¡¼­µµ À¯ÀÏÇÏ´Ù. °¢ ¿äû¸¶´Ù ȯ°æº¯¼ö
- <code>UNIQUE_ID</code>¸¦ ¼³Á¤ÇÑ´Ù. À¯ÀÏÇÑ ½Äº°ÀÚ´Â ¿©·¯°¡Áö
- ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¼³¸íÀº ÀÌ ¹®¼­ÀÇ ¹üÀ§¸¦ ³Ñ¾î¼±´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<p>ÀÌ ¸ðµâ¿¡´Â Áö½Ã¾î°¡ ¾ø½À´Ï´Ù.</p>
-<h3>ÁÖÁ¦</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#theory">ÀÌ·Ð</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theory" id="theory">ÀÌ·Ð</a></h2>
-
-
- <p>¸ÕÀú À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡ ¼­¹ö°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö
- °£·«È÷ »ìÆ캸ÀÚ. Windows NT´Â ÇöÀç ÀÌ ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.
- À¯´Ð½º¿¡¼­ ¾ÆÆÄÄ¡´Â ¿©·¯ ÀÚ½ÄÀ» ¸¸µé°í, ÀÚ½Ä ÇÁ·Î¼¼½º´Â
- Çѹø¿¡ ÇÑ ¿äû¾¿ ó¸®ÇÑ´Ù. ÀÚ½ÄÀº ½ÇÇàÁß¿¡ ¿©·¯ ¿äûÀ»
- ó¸®ÇÑ´Ù. ¿©±â¼­ Áß¿äÇÑ °ÍÀº ÀڽĵéÀÌ ¼­·Î ÀڷḦ
- °øÀ¯ÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ¾ÕÀ¸·Î ÀÚ½ÄÀ» httpd ÇÁ·Î¼¼½º¶ó°í
- ÇÑ´Ù.</p>
-
- <p>¿©·¯ ÄÄÇ»ÅÍ·Î À¥»çÀÌÆ®¸¦ ¼­ºñ½ºÇÑ´Ù¸é Ŭ·¯½ºÅÍ(cluster)¶ó°í
- ºÎ¸¥´Ù. °¢ ÄÄÇ»ÅÍ´Â ¿©·¯ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ÀÌµé ¸ðµÎ¸¦
- "¿ìÁÖ"·Î º¸¸é, Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ÄÄÇ»Å͵鰣¿¡ ¸¹Àº Åë½Å¾øÀÌ
- °¢ ¿äû¸¶´Ù ¿ìÁÖ¿¡¼­ À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <p>Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ÄÄÇ»ÅÍ´Â ´ÙÀ½ ¿ä±¸»çÇ×À» ¸¸Á·ÇØ¾ß ÇÑ´Ù.
- (ÄÄÇ»Å͸¦ ÇѴ븸 »ç¿ëÇÏ´õ¶óµµ ÄÄÇ»ÅÍ ½Ã°£À» NTP¿Í µ¿±âÇؾß
- ÇÑ´Ù.)</p>
-
- <ul>
- <li>ÄÄÇ»ÅÍ ½Ã°£Àº NTP³ª ´Ù¸¥ ³×Æ®¿÷ ½Ã°£ ÇÁ·ÎÅäÄÝ°ú
- µ¿±âÈ­µÈ´Ù.</li>
-
- <li>ÄÄÇ»ÅÍÀÇ È£½ºÆ®¸íÀÌ ¸ðµÎ ´Ù¸£´Ù. ±×·¡¼­ ¸ðµâÀÌ
- È£½ºÆ®¸íÀ¸·Î ãÀ¸¸é Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â °¢ ÄÄÇ»Å͸¶´Ù ´Ù¸¥
- IP ÁÖ¼Ò¸¦ ¾ò´Â´Ù.</li>
- </ul>
-
- <p>¿î¿µÃ¼Á¦¿¡¼­ pid (ÇÁ·Î¼¼½º id)°¡ 32ºñÆ®¿¡ µé¾î°£´Ù°í
- °¡Á¤ÇÑ´Ù. ¿î¿µÃ¼Á¦°¡ pid·Î 32ºñÆ® ÀÌ»óÀ» »ç¿ëÇÑ´Ù¸é °£´ÜÇÏÁö¸¸
- Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ÀÌ·± °¡Á¤ÇÏ¿¡ ¿ì¸®´Â ¾î¶² ½ÃÁ¡¿¡¼­ Ŭ·¯½ºÅÍÀÇ ¾î¶² ÄÄÇ»ÅÍ¿¡
- ÀÖ´Â ¾î¶² httpd ÇÁ·Î¼¼½º¸¦ ´Ù¸¥ ¸ðµç httpd ÇÁ·Î¼¼½ºµé°ú
- ±¸º°ÇÒ ¼ö ÀÖ´Ù. ÄÄÇ»ÅÍÀÇ IP ÁÖ¼Ò¿Í httpd ÇÁ·Î¼¼½ºÀÇ pid¸¸À¸·Îµµ
- ÃæºÐÈ÷ ±¸º°ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ¿äû¿¡ ´ëÇØ À¯ÀÏÇÑ ±¸º°ÀÚ¸¦
- ¸¸µå·Á¸é ½Ã°£Â÷¸¦ ±¸º°ÇÒ ¼ö¸¸ ÀÖÀ¸¸é µÈ´Ù.</p>
-
- <p>½Ã°£À» ±¸º°ÇϱâÀ§ÇØ À¯´Ð½º ½Ã°£(timestamp, ¼¼°è Ç¥Áؽ÷Î
- 1970³â 1¿ù 1ÀÏ ÀÌÈÄ Áö³­ ÃÊ)°ú 16ºñÆ® Ä«¿îÅ͸¦ »ç¿ëÇÑ´Ù.
- À¯´Ð½º ½Ã°£Àº ÃÊ´ÜÀ§ÀÌ°í, Ä«¿îÅÍ´Â ÀÏ Ãʵ¿¾È 65536±îÁö
- Áõ°¡ÇÑ´Ù. <em>( ip_addr, pid, time_stamp, counter )</em>
- ¹­À½Àº ¾î¶² httpd ÇÁ·Î¼¼½º¿¡¼­ ÀÏ Ãʵ¿¾È 65536 ¿äûÀ» ±¸º°ÇÒ
- ¼ö ÀÖ´Ù. ±×·¯³ª Ä«¿îÅÍ´Â pid¸¦ Àç»ç¿ëÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇؾß
- ÇÑ´Ù.</p>
-
- <p>httpd ÀÚ½ÄÀ» ¸¸µé¸é Ä«¿îÅÍ´Â ( ÇöÀç ¹Ð¸®ÃÊ ³ª´©±â 10 )À»
- 65536À¸·Î ³ª´« ³ª¸ÓÁö°¡ µÈ´Ù. (¸î¸î ½Ã½ºÅÛÀÇ ¹Ð¸®ÃÊ ½Ã°£¿¡¼­
- ÇÏÀ§ ºñÆ®°¡ ÀÏÄ¡ÇÏÁö¾Ê´Â ¹®Á¦¶§¹®¿¡ ÀÌ °ø½ÄÀ» ¸¸µé¾ú´Ù.)
- À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¸¸µé¶§ »ç¿ëÇÏ´Â ½Ã°£Àº À¥¼­¹ö°¡ ¿äûÀ» ¹ÞÀº
- ½Ã°£ÀÌ´Ù. Ä«¿îÅÍ´Â ½Äº°ÀÚ¸¦ ¸¸µé¶§¸¶´Ù Áõ°¡ÇÑ´Ù (±×¸®°í
- ´Ù½Ã ½ÃÀÛÇÑ´Ù).</p>
-
- <p>Ä¿³ÎÀº ÇÁ·Î¼¼½º¸¦ Æ÷Å©ÇÒ¶§(fork) °¢ ÇÁ·Î¼¼½º¿¡ pid¸¦
- ÇÒ´çÇÏ°í, pid´Â ´Ù½Ã ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. (pid´Â ¸¹Àº À¯´Ð½º¿¡¼­
- 16ºñÆ®ÀÌÁö¸¸, ÃÖ±Ù ½Ã½ºÅÛÀº 32ºñÆ®·Î È®ÀåÇß´Ù.) ±×·¡¼­ ½Ã°£ÀÌ
- Áö³ª¸é °°Àº pid¸¦ Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª °°Àº ½Ã°£¿¡ pid¸¦
- Àç»ç¿ëÇÏÁö ¾Ê´Â´Ù¸é À§ÀÇ ¹­À½Àº À¯ÀÏÇÏ´Ù. Áï, ¿ì¸®´Â ½Ã½ºÅÛÀÌ
- ÀÏÃʵ¿¾È ÇÁ·Î¼¼½º¸¦ 65536°³ ÀÌ»ó ¸¸µéÁö ¾Ê´Â´Ù°í °¡Á¤ÇÑ´Ù.
- (¾î¶² À¯´Ð½º¿¡¼­´Â 32768°³ ÀÌ»ó ÇÁ·Î¼¼½º¸¦ ¸¸µé¸é pid Àç»ç¿ë
- ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÁö¸¸, ÀÌ°ÍÁ¶Â÷µµ ÀϾ °Í°°Áö ¾Ê´Ù.)</p>
-
- <p>½Ã°£ÀÌ ¾î¶² ÀÌÀ¯¿¡¼­°Ç ¹Ýº¹µÈ´Ù°í °¡Á¤Çغ¸ÀÚ. Áï, ½Ã½ºÅÛ
- ½Ã°è°¡ ²¿¿©¼­ ½Ã°£ÀÌ °ú°Å·Î µ¹¾Æ°¡´Â (ȤÀº ½Ã°è°¡ ³Ê¹« ¾Õ¼­°¡¼­
- ¿Ã¹Ù·Î Àç¼³Á¤ÇÑÈÄ ¹Ì·¡¿¡ °°Àº ½Ã°£ÀÌ µÇ´Â) °æ¿ì´Ù. ÀÌ °æ¿ì
- pid¿Í ½Ã°£À» ¸ðµÎ Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù. Ä«¿îÅÍÀÇ ÃʱâÈ­ °ø½ÄÀº
- ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á°í °í¾ÈµÇ¾ú´Ù. ¿ì¸®´Â ½ÇÁ¦ ¹«ÀÛÀ§ ¼ýÀÚ·Î
- Ä«¿îÅ͸¦ ÃʱâÈ­ÇÏ±æ ¿øÇÏÁö¸¸, ¸¹Àº ½Ã½ºÅÛ¿¡¼­ ÀÌ·± ¼ö¸¦
- ½±°Ô ¾òÀ» ¼ö ¾ø´Ù. (<em>¿¹¸¦ µé¾î</em>, seed°¡ ÇÊ¿äÇϱ⶧¹®¿¡
- rand()¸¦ »ç¿ëÇÒ ¼ö ¾ø°í, ½Ã°£Àº ÃÖ¼ÒÇÑ ÀÏÃÊ ´ÜÀ§À̱⶧¹®¿¡
- ½Ã°£À¸·Î seed·Î »ç¿ëÇÒ ¼ö ¾ø´Ù.) Áï ¿Ïº®ÇÑ ÇØ°áÃ¥ÀÌ ¾ø´Ù.</p>
-
- <p>±×·³ ÀÌ ¹æ¹ýÀº ¾ó¸¶³ª ±¦ÂúÀ»±î? ÄÄÇ»ÅÍÁß Çϳª°¡ ¿äûÀ»
- ÃÊ´ç ÃÖ´ë 500°³ (½Ã½ºÅÛÀº ÀϹÝÀûÀ¸·Î Á¤ÀûÀÎ ÆÄÀÏÀ» Àü¼ÛÇÏ´Â
- °Í ÀÌ»óÀÇ ÀÛ¾÷À» ÇϹǷΠÀÌ ±ÛÀ» ¾²´Â ½ÃÁ¡¿¡¼­ »ó´çÈ÷ ³ôÀº
- °ªÀÌ´Ù.) ¼­ºñ½ºÇÑ´Ù°í °¡Á¤ÇÏÀÚ. µ¿½Ã¿¡ ¾ó¸¶¸¸Å­ÀÇ Å¬¶óÀ̾ðÆ®¸¦
- ó¸®Çϴ°¡¿¡ µû¶ó ÀÚ½ÄÀÇ °³¼ö°¡ °áÁ¤µÈ´Ù. ±×·¯³ª ¿ì¸®´Â
- ºñ°üÀûÀ¸·Î ÇÑ ÀÚ½ÄÀÌ ¿äûÀ» ÃÊ´ç 500°³ ó¸®ÇÒ ¼ö ÀÖ´Ù°í
- °¡Á¤ÇÑ´Ù. Àç»ç¿ëÇÑ pid¸¦ °¡Áø ÀÚ½ÄÀÇ 500°³ ¿äû°ú ÀÌÀü ÀÚ½ÄÀÇ
- 500°³ ¿äûÀÇ Ä«¿îÅÍ°ªÀÌ °ãÄ¥ ¼ö ÀÖ´Â Ä«¿îÅÍ ½ÃÀÛ°ª °æ¿ì¼ö´Â
- 1000°³ÀÌ´Ù. ±×·¡¼­ (ÃÊ´ÜÀ§¿¡¼­) ÀÚ½ÄÀÌ Ä«¿îÅÍ°ªÀ» ¹Ýº¹ÇÏ¿©
- À¯ÀϼºÀÌ ±úÁú È®·üÀº 1.5%ÀÌ´Ù. ÀÌ°ÍÀº ¸Å¿ì ºñ°üÀûÀÎ °¡Á¤À̸ç,
- ½ÇÁ¦ ÀÌ·² °æ¿ì´Â »ó´çÈ÷ ´õ ³·´Ù. ±×·¡µµ ½Ã½ºÅÛ¿¡¼­ ÀÌ·±
- ÀÏÀÌ ¹ß»ýÇÒ °Í °°´Ù¸é (¼Ò½º¸¦ ¼öÁ¤ÇÏ¿©) Ä«¿îÅ͸¦ 32ºñÆ®·Î
- ¸¸µé¾î¶ó.</p>
-
- <p>¼¶¸ÓŸÀÓ¶§¹®¿¡ ½Ã°è°¡ "µÚ·Î °¡´Â" °ÍÀ» °ÆÁ¤ÇÒÁöµµ ¸ð¸¥´Ù.
- ±×·¯³ª ¿©±â¼­ »ç¿ëÇÏ´Â ½Ã°£Àº ±¹Á¦ Ç¥ÁؽÃ(UTC), Áï ½Ã°£ÀÌ
- "Ç×»ó" ¾ÕÀ¸·Î °¡¹Ç·Î ¹®Á¦°¡ ¾ø´Ù. x86±â¹Ý À¯´Ð½º¿¡¼­´Â
- ÀûÀýÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù. ¸ÞÀκ¸µå ½Ã°è°¡ UTC¸¦ »ç¿ëÇϵµ·Ï
- ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±×·¯³ª NTP¸¦ »ç¿ëÇÑ´Ù¸é Àç½ÃÀÛÈÄ Á¶±Ý Áö³ª¸é
- UTC ½Ã°£¿¡ ¿Ã¹Ù·Î ¸ÂÃá´Ù.</p>
-
- <p>ȯ°æº¯¼ö <code>UNIQUE_ID</code>´Â MIME base64 ÀÎÄÚµù°ú
- ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î 112ºñÆ® (32ºñÆ® IP ÁÖ¼Ò, 32ºñÆ® pid, 32ºñÆ®
- ½Ã°£, 16ºñÆ® Ä«¿îÅÍ) ¹­À½À» ¾ËÆĺª <code>[A-Za-z0-9@-]</code>·Î
- Ç¥ÇöÇÑ´Ù. ½ÇÁ¦ MIME base64 ¾ËÆĺªÀº
- <code>[A-Za-z0-9+/]</code>ÀÌÁö¸¸ <code>+</code>¿Í
- <code>/</code>´Â URL¿¡¼­ Ưº°ÇÑ Àǹ̷Π»ç¿ëÇϹǷΠÁ¦¿ÜÇß´Ù.
- ¸ðµç °ªÀ» ³×Æ®¿÷ ¹ÙÀÌÆ®¼ø¼­·Î ÀÎÄÚµùÇϱ⶧¹®¿¡ ´Ù¸¥ ¹ÙÀÌÆ®¼ø¼­¸¦
- »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃÄ°£¿¡ °ªÀÌ °°´Ù. ½ÇÁ¦ ÀÎÄÚµù ¼ø¼­´Â
- ½Ã°£, IP ÁÖ¼Ò, pid, Ä«¿îÅÍ ¼ø¼­ÀÌ´Ù. ÀÌ ¼ø¼­¿¡´Â ¾î¶² ¸ñÀûÀÌ
- ÀÖÁö¸¸, ÇÁ·Î±×·¥Àº ÀÎÄÚµù ¼ø¼­¿¡ ÀÇÁ¸ÇÏ¿© °ªµéÀ» ºÐ¼®Çϸé
- ¾ÈµÊÀ» °­Á¶ÇÑ´Ù. ÇÁ·Î±×·¥Àº ÀÎÄÚµùµÈ <code>UNIQUE_ID</code>
- Àüü¸¦ ÇÑ ´ÜÀ§·Î »ý°¢ÇÏ°í, ´Ù¸¥ <code>UNIQUE_ID</code>¿Í
- µ¿ÀÏÇÑÁö¸¸ ºñ±³ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼ø¼­´Â ¾ÕÀ¸·Î ±âÁ¸ÀÇ <code>UNIQUE_ID</code> µ¥ÀÌÅͺ£À̽º¿Í
- Ãæµ¹À» ¿°·ÁÇÏÁö¾Ê°í ÀÎÄÚµùÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï °í¾ÈÇß´Ù.
- »õ·Î¿î ÀÎÄÚµùÀº ù Ç׸ñÀ¸·Î ½Ã°£À» »ç¿ëÇϰųª, °°Àº ¾ËÆĺª°ú
- ºñÆ® ±æÀ̸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ½Ã°£ÀÌ ±âº»ÀûÀ¸·Î Áõ°¡ÇÏ´Â °ªÀ̹ǷÎ
- Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ¸ðµç ÄÄÇ»ÅÍ°¡ ¿äû ¼­ºñ½º¸¦ Áß´ÜÇÏ°í ÀÌÀü
- ÀÎÄÚµù Çü½ÄÀ» ±×¸¸ »ç¿ëÇϱâÀ§ÇØ <em>±âÁØ ÃÊ(flag second)</em>¸¸À¸·Î
- ÃæºÐÇÏ´Ù. ÀÌÈÄ ¿äûÀ» Àç°ÔÇÏ°í »õ·Î¿î ÀÎÄÚµùÀ» ½ÃÀÛÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¿ì¸®´Â ÀÌ ¹æ¹ýÀÌ ÀÌ ¹®Á¦¿¡ ´ëÇÏ¿© »ó´ëÀûÀ¸·Î Æ÷Æð¡´ÉÇÑ
- ÇØ°áÃ¥À̶ó°í ¹Ï´Â´Ù. ÀÌ ¹æ¹ýÀº Windows NT¿Í °°Àº ¸ÖƼ¾²·¹µå
- ½Ã½ºÅÛÀ¸·Î È®ÀåÇÒ ¼ö ÀÖ°í, ¾ÕÀ¸·Î ¿ëµµ¿¡ µû¶ó È®ÀåÇÒ ¼ö
- ÀÖ´Ù. ¹Ì·¡¿¡ ÇÊ¿äÇѸ¸Å­ ´õ ±ä ½Äº°ÀÚ¸¦ ¸¸µé ¼ö Àֱ⶧¹®¿¡
- »ý¼ºÇÑ ½Äº°ÀÚ´Â ±âº»ÀûÀ¸·Î ¿µ¿øÇÑ ¼ö¸íÀ» °¡Áø´Ù. ±âº»ÀûÀ¸·Î
- Ŭ·¯½ºÅÍÀÇ ÄÄÇ»ÅÍµé »çÀÌ¿¡ Åë½ÅÀÌ ÇÊ¿ä¾ø°í (ºÎÇÏ°¡ ÀÛÀº
- NTP µ¿±â¸¸ ÇÊ¿äÇÏ´Ù), httpd ÇÁ·Î¼¼½º »çÀÌ¿¡ Åë½Åµµ ÇÊ¿ä¾ø´Ù
- (Ä¿³ÎÀÌ ºÎ¿©ÇÏ´Â pid°ªÀÌ ¾Ï¹¬ÀûÀÎ Åë½ÅÀÌ´Ù). ¸Å¿ì ƯÀÌÇÑ
- »óȲÀ̶ó¸é ÀνÄÀÚ Å©±â¸¦ ÁÙÀÏ ¼ö ÀÖÁö¸¸ ´õ ¸¹Àº Á¤º¸¸¦
- °¡Á¤ÇØ¾ß ÇÑ´Ù. (¿¹¸¦ µé¾î, ¾î¶² »çÀÌÆ®¿¡¼­ 32ºñÆ® IP ÁÖ¼Ò
- ±¸ºÐÀº ºÒÇÊ¿äÇÏ°Ô Å©Áö¸¸, À̸¦ ÁÙÀÌ´Â ¹æ¹ýÀº »óȲ¿¡ µû¶ó
- ´Ù¸£´Ù.) </p>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_unique_id.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_unique_id.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_unique_id.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_unique_id.xml b/docs/manual/mod/mod_unique_id.xml
deleted file mode 100755
index 6a197a5fcc..0000000000
--- a/docs/manual/mod/mod_unique_id.xml
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_unique_id.xml.meta">
-
-<name>mod_unique_id</name>
-<description>Provides an environment variable with a unique
-identifier for each request</description>
-<status>Extension</status>
-<sourcefile>mod_unique_id.c</sourcefile>
-<identifier>unique_id_module</identifier>
-
-<summary>
-
- <p>This module provides a magic token for each request which is
- guaranteed to be unique across "all" requests under very
- specific conditions. The unique identifier is even unique
- across multiple machines in a properly configured cluster of
- machines. The environment variable <code>UNIQUE_ID</code> is
- set to the identifier for each request. Unique identifiers are
- useful for various reasons which are beyond the scope of this
- document.</p>
-</summary>
-
-<section id="theory">
- <title>Theory</title>
-
- <p>First a brief recap of how the Apache server works on Unix
- machines. This feature currently isn't supported on Windows NT.
- On Unix machines, Apache creates several children, the children
- process requests one at a time. Each child can serve multiple
- requests in its lifetime. For the purpose of this discussion,
- the children don't share any data with each other. We'll refer
- to the children as httpd processes.</p>
-
- <p>Your website has one or more machines under your
- administrative control, together we'll call them a cluster of
- machines. Each machine can possibly run multiple instances of
- Apache. All of these collectively are considered "the
- universe", and with certain assumptions we'll show that in this
- universe we can generate unique identifiers for each request,
- without extensive communication between machines in the
- cluster.</p>
-
- <p>The machines in your cluster should satisfy these
- requirements. (Even if you have only one machine you should
- synchronize its clock with NTP.)</p>
-
- <ul>
- <li>The machines' times are synchronized via NTP or other
- network time protocol.</li>
-
- <li>The machines' hostnames all differ, such that the module
- can do a hostname lookup on the hostname and receive a
- different IP address for each machine in the cluster.</li>
- </ul>
-
- <p>As far as operating system assumptions go, we assume that
- pids (process ids) fit in 32-bits. If the operating system uses
- more than 32-bits for a pid, the fix is trivial but must be
- performed in the code.</p>
-
- <p>Given those assumptions, at a single point in time we can
- identify any httpd process on any machine in the cluster from
- all other httpd processes. The machine's IP address and the pid
- of the httpd process are sufficient to do this. So in order to
- generate unique identifiers for requests we need only
- distinguish between different points in time.</p>
-
- <p>To distinguish time we will use a Unix timestamp (seconds
- since January 1, 1970 UTC), and a 16-bit counter. The timestamp
- has only one second granularity, so the counter is used to
- represent up to 65536 values during a single second. The
- quadruple <em>( ip_addr, pid, time_stamp, counter )</em> is
- sufficient to enumerate 65536 requests per second per httpd
- process. There are issues however with pid reuse over time, and
- the counter is used to alleviate this issue.</p>
-
- <p>When an httpd child is created, the counter is initialized
- with ( current microseconds divided by 10 ) modulo 65536 (this
- formula was chosen to eliminate some variance problems with the
- low order bits of the microsecond timers on some systems). When
- a unique identifier is generated, the time stamp used is the
- time the request arrived at the web server. The counter is
- incremented every time an identifier is generated (and allowed
- to roll over).</p>
-
- <p>The kernel generates a pid for each process as it forks the
- process, and pids are allowed to roll over (they're 16-bits on
- many Unixes, but newer systems have expanded to 32-bits). So
- over time the same pid will be reused. However unless it is
- reused within the same second, it does not destroy the
- uniqueness of our quadruple. That is, we assume the system does
- not spawn 65536 processes in a one second interval (it may even
- be 32768 processes on some Unixes, but even this isn't likely
- to happen).</p>
-
- <p>Suppose that time repeats itself for some reason. That is,
- suppose that the system's clock is screwed up and it revisits a
- past time (or it is too far forward, is reset correctly, and
- then revisits the future time). In this case we can easily show
- that we can get pid and time stamp reuse. The choice of
- initializer for the counter is intended to help defeat this.
- Note that we really want a random number to initialize the
- counter, but there aren't any readily available numbers on most
- systems (<em>i.e.</em>, you can't use rand() because you need
- to seed the generator, and can't seed it with the time because
- time, at least at one second resolution, has repeated itself).
- This is not a perfect defense.</p>
-
- <p>How good a defense is it? Suppose that one of your machines
- serves at most 500 requests per second (which is a very
- reasonable upper bound at this writing, because systems
- generally do more than just shovel out static files). To do
- that it will require a number of children which depends on how
- many concurrent clients you have. But we'll be pessimistic and
- suppose that a single child is able to serve 500 requests per
- second. There are 1000 possible starting counter values such
- that two sequences of 500 requests overlap. So there is a 1.5%
- chance that if time (at one second resolution) repeats itself
- this child will repeat a counter value, and uniqueness will be
- broken. This was a very pessimistic example, and with real
- world values it's even less likely to occur. If your system is
- such that it's still likely to occur, then perhaps you should
- make the counter 32 bits (by editing the code).</p>
-
- <p>You may be concerned about the clock being "set back" during
- summer daylight savings. However this isn't an issue because
- the times used here are UTC, which "always" go forward. Note
- that x86 based Unixes may need proper configuration for this to
- be true -- they should be configured to assume that the
- motherboard clock is on UTC and compensate appropriately. But
- even still, if you're running NTP then your UTC time will be
- correct very shortly after reboot.</p>
-
- <p>The <code>UNIQUE_ID</code> environment variable is
- constructed by encoding the 112-bit (32-bit IP address, 32 bit
- pid, 32 bit time stamp, 16 bit counter) quadruple using the
- alphabet <code>[A-Za-z0-9@-]</code> in a manner similar to MIME
- base64 encoding, producing 19 characters. The MIME base64
- alphabet is actually <code>[A-Za-z0-9+/]</code> however
- <code>+</code> and <code>/</code> need to be specially encoded
- in URLs, which makes them less desirable. All values are
- encoded in network byte ordering so that the encoding is
- comparable across architectures of different byte ordering. The
- actual ordering of the encoding is: time stamp, IP address,
- pid, counter. This ordering has a purpose, but it should be
- emphasized that applications should not dissect the encoding.
- Applications should treat the entire encoded
- <code>UNIQUE_ID</code> as an opaque token, which can be
- compared against other <code>UNIQUE_ID</code>s for equality
- only.</p>
-
- <p>The ordering was chosen such that it's possible to change
- the encoding in the future without worrying about collision
- with an existing database of <code>UNIQUE_ID</code>s. The new
- encodings should also keep the time stamp as the first element,
- and can otherwise use the same alphabet and bit length. Since
- the time stamps are essentially an increasing sequence, it's
- sufficient to have a <em>flag second</em> in which all machines
- in the cluster stop serving and request, and stop using the old
- encoding format. Afterwards they can resume requests and begin
- issuing the new encodings.</p>
-
- <p>This we believe is a relatively portable solution to this
- problem. It can be extended to multithreaded systems like
- Windows NT, and can grow with future needs. The identifiers
- generated have essentially an infinite life-time because future
- identifiers can be made longer as required. Essentially no
- communication is required between machines in the cluster (only
- NTP synchronization is required, which is low overhead), and no
- communication between httpd processes is required (the
- communication is implicit in the pid value assigned by the
- kernel). In very specific situations the identifier can be
- shortened, but more information needs to be assumed (for
- example the 32-bit IP address is overkill for any site, but
- there is no portable shorter replacement for it). </p>
-</section>
-
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_unique_id.xml.ja b/docs/manual/mod/mod_unique_id.xml.ja
deleted file mode 100644
index 7676ffd4bd..0000000000
--- a/docs/manual/mod/mod_unique_id.xml.ja
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_unique_id.xml.meta">
-
-<name>mod_unique_id</name>
-<description>$B$=$l$>$l$N%j%/%(%9%H$KBP$9$k0l0U$J<1JL;R$NF~$C$?4D6-JQ?t$r(B
-$BDs6!$9$k(B</description>
-<status>Extension</status>
-<sourcefile>mod_unique_id.c</sourcefile>
-<identifier>unique_id_module</identifier>
-
-<summary>
-
- <p>$B$3$N%b%8%e!<%k$OHs>o$K@)8B$5$l$?>r7o2<$G!"(B
- $B$=$l$>$l$N%j%/%(%9%H$K!V$9$Y$F!W$N%j%/%(%9%H$KBP$7$F(B
- $B0l0U$K7h$^$k$3$H$,J]>Z$5$l$F$$$kKbK!$N%H!<%/%s$rDs6!$7$^$9!#(B
- $B$3$N0l0U$J<1JL;R$O!"E,@Z$K@_Dj$5$l$?%/%i%9%?$G$OJ#?t$N(B
- $B%^%7%s$N4V$G$5$($b0l0U$K$J$j$^$9!#$=$l$>$l$N%j%/%(%9%H$KBP$7$F4D6-JQ?t(B
- <code>UNIQUE_ID</code> $B$K<1JL;R$,@_Dj$5$l$^$9!#(B
- $B0l0U$J<1JL;R$,JXMx$JM}M3$O$$$m$$$m$"$j$^$9$,!"(B
- $B$3$N%I%-%e%a%s%H$NL\E*$+$i$O30$l$k$?$a!"$3$3$G$O@bL@$7$^$;$s!#(B</p>
-</summary>
-
-<section id="theory">
- <title>$BM}O@(B</title>
-
- <p>$B$^$:$O$8$a$K!"(BApache $B%5!<%P$,(B Unix
- $B%^%7%s$G$I$N$h$&$KF0:n$r$9$k$+$r4JC1$K@bL@$7$^$9!#(B
- $B$3$N5!G=$O8=;~E@$G$O(B Windows NT $B$G$O%5%]!<%H$5$l$F$$$^$;$s!#(B
- Unix $B%^%7%s$G$O(B Apache $B$O$$$/$D$+$N;R%W%m%;%9$r:n@.$7!"(B
- $B$=$N;R%W%m%;%9$,0l$D$:$D%j%/%(%9%H$r=hM}$7$^$9!#$=$l$>$l$N;R%W%m%;%9$O!"(B
- $B@8B84|4VCf$KJ#?t$N%j%/%(%9%H$r07$&$3$H$,$G$-$^$9!#(B
- $B$3$N5DO@$G$O;R%W%m%;%94V$G$O0l@Z%G!<%?$r6&M-$7$J$$$3$H$K$7$^$9!#(B
- $B0J8e!"$3$N;R%W%m%;%9$N$3$H$r(B httpd $B%W%m%;%9$H8F$S$^$9!#(B</p>
-
- <p>$B$"$J$?$N%&%'%V%5%$%H$K$O$"$J$?$,4IM}$9$k$$$/$D$+$N%^%7%s$,$"$k$H$7$^$9!#(B
- $B$=$l$i$r$^$H$a$F%/%i%9%?$H8F$V$3$H$K$7$^$9!#$=$l$>$l$N%^%7%s$OJ#?t$N(B
- Apache $B$r<B9T$9$k$3$H$b$G$-$^$9!#(B
- $B$3$l$i$9$Y$F$r$^$H$a$?$b$N$,!V1'Ch!W$G$"$k$H9M$($i$l$^$9!#(B
- $B$$$/$D$+$N2>Dj$N2<$G!"%/%i%9%?$N%^%7%s4V$,$?$/$5$sDL?.$r$9$k$3$H$J$/!"(B
- $B$3$N1'Ch$NCf$G$=$l$>$l$N%j%/%(%9%H$K0l0U$J<1JL;R$r@8@.$G$-$k$3$H$r<($7$^$9!#(B
- </p>
-
- <p>$B%/%i%9%?$K$"$k%^%7%s$O0J2<$NMW5a$r8+$?$5$J$1$l$P$J$j$^$;$s!#(B
- ($B%^%7%s$,0l$D$@$1$@$H$7$F$b!"(BNTP $B$G;~7W$r9g$o$;$kJ}$,NI$$$G$9!#(B)</p>
-
- <ul>
- <li>NTP $B$dB>$N%M%C%H%o!<%/>e$G;~4V$r9g$o$;$k%W%m%H%3%k$K$h$C$F(B
- $B3F%^%7%s$N;~4V$NF14|$,<h$i$l$F$$$k$3$H!#(B</li>
-
- <li>$B%b%8%e!<%k$,%[%9%HL>$r0z$$$F0c$&(B IP
- $B%"%I%l%9$r<u$1<h$k$3$H$,$G$-$k$h$&$K!"(B
- $B%/%i%9%?$N$=$l$>$l$N%^%7%s$N%[%9%HL>$,0c$&$3$H!#(B</li>
- </ul>
-
- <p>$B%*%Z%l!<%F%#%s%0%7%9%F%`$K$*$$$F$O!"(Bpid ($B%W%m%;%9(B ID) $B$,(B
- 32 $B%S%C%H$NHO0OFb$G$"$k$3$H$r2>Dj$7$^$9!#%*%Z%l!<%F%#%s%0%7%9%F%`$N(B
- pid $B$,(B 32 $B%S%C%H$rD6$($k>l9g$O!"4JC1$J=$@5$G$O$"$j$^$9$,!"(B
- $B%3!<%I$rJQ99$9$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>$B$3$l$i$N2>Dj$,K~$?$5$l$F$$$k$H!"$"$k;~E@$K$*$$$F!"(B
- $B%/%i%9%?Fb$N$I$N%^%7%s$N$I$N(B httpd
- $B%W%m%;%9$G$b!"0l0U$KF1Dj$9$k$3$H$,$G$-$^$9!#$3$l$O%^%7%s$N(B IP
- $B%"%I%l%9$H(B httpd $B%W%m%;%9$N(B pid $B$G==J,$K9T$J$&$3$H$,$G$-$^$9!#(B
- $B$G$9$+$i!"%j%/%(%9%H$K0l0U$J<1JL;R$r@8@.$9$k$?$a$K$O!"(B
- $B;~9o$r6hJL$9$kI,MW$,$"$k$@$1$G$9!#(B</p>
-
- <p>$B;~9o$r6hJL$9$k$?$a$K!"(BUnix $B$N%?%$%`%9%?%s%W(B (UTC $B$N(B 1970 $BG/(B
- 1 $B7n(B 1 $BF|$+$i$NIC?t(B) $B$H!"(B16 $B%S%C%H$N%+%&%s%?$r;H$$$^$9!#(B
- $B%?%$%`%9%?%s%W$NN3EY$O0lIC$G$9$N$G!"0lIC4V$N(B 65536
- $B$^$G$NCM$rI=8=$9$k$?$a$K%+%&%s%?$r;HMQ$7$^$9!#;M$D$NCM(B
- <em>( ip_addr, pid, time_stamp, counter )</em> $B$G3F(B httpd
- $B%W%m%;%9$G0lIC$N4V$K(B 65536 $B%j%/%(%9%H$r?t$($"$2$k$3$H$,$G$-$^$9!#(B
- $B;~4V$,7P$D$H(B pid $B$,:FMxMQ$5$l$k$H$$$&LdBj$,$"$j$^$9$,!"(B
- $B$3$NLdBj$r2r7h$9$k$?$a$K%+%&%s%?$,;HMQ$5$l$^$9!#(B</p>
-
- <p>httpd $B$N;R%W%m%;%9$,:n@.$5$l$k$H!"%+%&%s%?$O(B
- ($B$=$N;~E@$N%^%$%/%mIC(B $B!`(B 10) modulo 65536 $B$G=i4|2=$5$l$^$9(B
- ($B$3$N<0$O$$$/$D$+$N%7%9%F%`$K$"$k!"%^%$%/%mIC$N(B
- $B%?%$%^$N2<0L%S%C%H$,0[$J$k$H$$$&LdBj$r2r7h$9$k$?$a$KA*$P$l$^$7$?(B)$B!#(B
- $B0l0U$J<1JL;R$,@8@.$5$l$?$H$-!";HMQ$5$l$k%?%$%`%9%?%s%W$O(B
- $B%&%'%V%5!<%P$K%j%/%(%9%H$,E~Ce$7$?;~9o$K$J$j$^$9!#(B
- $B%+%&%s%?$O<1JL;R$,@8@.$5$l$k$?$S$KA}2C$7$^$9(B
- ($B$"$U$l$?>l9g$O(B 0 $B$KLa$j$^$9(B)$B!#(B</p>
-
- <p>$B%+!<%M%k$O%W%m%;%9$r%U%)!<%/$9$k$H!"$=$l$>$l$N%W%m%;%9$N$?$a$K(B
- pid $B$r@8@.$7$^$9!#(Bpid $B$O7+$jJV$5$l$k$3$H$,5v2D$5$l$F$$$^$9(B
- (pid $B$NCM$OB?$/$N(B Unix $B$G$O(B 16 $B%S%C%H$G$9$,!"?7$7$$%7%9%F%`$G$O(B
- 32 $B%S%C%H$K3HD%$5$l$F$$$^$9(B)$B!#(B
- $B$G$9$+$i!"$"$kDxEY$N;~4V$,7P2a$9$k$HF1$8(B pid $B$,:F$S;HMQ$5$l$^$9!#(B
- $B$7$+$7!"0lICFb$K:F;HMQ$5$l$J$1$l$P!"(B
- $B;M$D$NCM$N0l0U@-$OJ]$?$l$^$9!#$D$^$j!"2f!9$O%7%9%F%`$,0lIC4V(B
- $B$K(B 65536 $B8D$N%W%m%;%9$r5/F0$7$J$$$H2>Dj$7$F$$$^$9(B ($B$$$/$D$+$N(B Unix
- $B$G$O(B 32768 $B%W%m%;%9$G$9$,!"$=$l$G$9$i$[$H$s$I$"$jF@$J$$$G$7$g$&(B)$B!#(B</p>
-
- <p>$B2?$i$+$NM}M3$G!"F1$8;~9o$,7+$jJV$5$l$?$H$7$^$7$g$&!#(B
- $B$D$^$j!"%7%9%F%`$N;~7W$,68$C$F$$$F!"$b$&0lEY2a5n$N;~9o$K$J$C$F$7$^$C$?(B
- ($B$b$7$/$O?J$_$9$.$F$$$?$H$-$K!"(B
- $B@5$7$$;~9o$KLa$7$?$?$a$K:F$S>-Mh$N;~9o$K$J$C$F$7$^$C$?(B) $B$H$7$^$9!#(B
- $B$3$N>l9g!"(Bpid $B$H%?%$%`%9%?%s%W$,:F;HMQ$5$l$k$3$H$,4JC1$K<($5$l$^$9!#(B
- $B%+%&%s%?=i4|2=MQ$N4X?t$O!"$3$NLdBj$N2sHr$r<j=u$1$7$h$&$HA*Br$5$l$F$$$^$9!#(B
- $BK\Ev$O%+%&%s%?$N=i4|2=$r$9$k$?$a$K%i%s%@%`$J?t;z$r;H$$$?$$$N$G$9$,!"(B
- $B$[$H$s$I$N%7%9%F%`$G$O4JC1$K;HMQ$G$-$k?t$OL5$$$3$H$KCm0U$7$F$/$@$5$$(B
- (<em>$B$9$J$o$A(B</em>$B!"(Brand ()$B$O;H$($^$;$s!#(Brand () $B$K$O(B seed
- $B$rM?$($kI,MW$,$"$j!"(Bseed $B$K$O;~9o$r;H$($^$;$s!#0lICC10L$G$O!"(B
- $B$=$N;~9o$O$9$G$K7+$jJV$5$l$F$$$k$+$i$G$9(B)$B!#(B
- $B$3$l$O!"40`z$JBP:v$G$O$"$j$^$;$s!#(B</p>
-
- <p>$B$3$NBP:v$O$I$N$/$i$$8z2L$,$"$k$G$7$g$&$+(B?
- $B$3$3$G$O!"%^%7%s72$NCf$N0l$D$O:GBg$G0lIC$K(B 500
- $B%j%/%(%9%H$r07$&$H2>Dj$7$^$9(B ($B$3$l$r=q$$$F$$$k;~E@$G$OBEEv$J>e8B$G$9!#(B
- $BDL>o%7%9%F%`$,$9$k$3$H$O@EE*$J%U%!%$%k$r<h$j$@$9$@$1$G$O$"$j$^$;$s$+$i(B)$B!#(B
- $B$=$l$r9T$J$&$?$a$K!"$=$N%^%7%s$OJB9T$7$FMh$k%/%i%$%"%s%H$N?t$K(B
- $B1~$8$??t$N;R%W%m%;%9$rMW5a$7$^$9!#(B
- $B$7$+$7$J$,$i!"Ha4QE*$K9M$($F!"0l$D$N;R%W%m%;%9$,0lIC$K(B 500
- $B%j%/%(%9%H$r07$($k$H$7$^$9!#$=$&$9$k$H!"(B($B0lIC$N@:EY$K$*$$$F(B)
- $B;~9o$,F1$8;~$r7+$jJV$9$H!"$3$N;R%W%m%;%9$,%+%&%s%?$NCM$r:F$S;H$$!"(B
- $B0l0U@-$,2u$l$k2DG=@-$,(B 1.5% $B$"$j$^$9!#(B
- $B$3$l$OHs>o$KHa4QE*$JNc$G!"<B@$3&$NCM$G$O!"$[$H$s$I5/$3$j$=$&$K$"$j$^$;$s!#(B
- $B$=$l$G$b$3$l$,5/$3$k2DG=@-$N$"$k$h$&$J%7%9%F%`$J$i!"(B
- ($B%W%m%0%i%`%3!<%I$rJT=8$7$F(B)
- $B%+%&%s%?$r(B 32 $B%S%C%H$K$9$k$N$,NI$$$G$7$g$&!#(B
- </p>
-
- <p>$B%5%^!<%?%$%`$K$h$j;~7W$,!VLa$5$l$k!W$3$H$r5$$K$7$F$$$k?M$,(B
- $B$$$k$+$b$7$l$^$;$s!#$3$3$G;HMQ$5$l$k;~4V$O(B UTC $B$G$"$j!"(B
- $B$=$l$O!V>o$K!W?J$`$N$G$3$3$G$OLdBj$K$J$j$^$;$s!#(Bx86 $B>e$N(B Unix
- $B$O$3$N>r7o$rK~$?$9$?$a$KE,@Z$J@_Dj$,I,MW$+$b$7$l$J$$$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#%^%6!<%\!<%I$N;~7W$O(B UTC $B$K$J$C$F$$$F!"(B
- $BB>$N;~4V$O$=$3$+$iE,@Z$KJd@5$5$l$k$3$H$r2>Dj$G$-$k$h$&$K(B
- $B@_Dj$5$l$J$1$l$P$J$j$^$;$s!#$=$N$h$&$J>l9g$G$5$(!"(BNTP
- $B$r;H$C$F$$$k$J$i$P%j%V!<%H8e$K$9$0@5$7$$(B UTC $B$N;~4V$K$J$k$G$7$g$&!#(B</p>
-
- <p><code>UNIQUE_ID</code> $B4D6-JQ?t$O(B 112 $B%S%C%H(B (32 $B%S%C%H(B IP
- $B%"%I%l%9!"(B32 $B%S%C%H(B pid, 32 $B%S%C%H%?%$%`%9%?%s%W!"(B16
- $B%S%C%H%+%&%s%?$N;M$D$NAH(B) $B$r%"%k%U%!%Y%C%H(B <code>[A-Za-z0-9@-]</code>
- $B$rMQ$$$F(B MIME $B$N(B base64 $BId9f2=$HF1MM$NJ}K!$K$h$jId9f2=$7!"(B19
- $B$NJ8;z$r@8@.$9$k$3$H$K$h$j:n@.$5$l$^$9!#(BMIME $B$N(B base64
- $B$N%"%k%U%!%Y%C%H$O<B:]$O(B <code>[A-Za-z0-9+/]</code> $B$G$9$,!"(B
- <code>+</code> $B$H(B <code>/</code> $B$H$O(B URL
- $B$G$OFCJL$JId9f2=$,I,MW$J$N$G!"$"$^$jK>$^$7$/$"$j$^$;$s!#(B
- $BA4$F$NCM$O%M%C%H%o!<%/%P%$%H%*!<%@$GId9f2=$5$l$^$9$N$G!"(B
- $BId9f$O0c$C$?%P%$%H%*!<%@$N%"!<%-%F%/%A%c4V$GHf3S2DG=$G$9!#(B
- $B<B:]$NId9f2=$N=gHV$O(B: $B%?%$%`%9%?%s%W!"(BIP $B%"%I%l%9!"(Bpid,
- $B%+%&%s%?$G$9!#$3$N=g$K$OL\E*$,$"$j$^$9$,!"(B
- $B%"%W%j%1!<%7%g%s$OId9f$r2r@O$9$k$Y$-$G$O$J$$$3$H$r6/D4$7$F$*$-$^$9!#(B
- $B%"%W%j%1!<%7%g%s$OId9f2=$5$l$?(B <code>UNIQUE_ID</code>
- $BA4BN$rF)2aE*$J%H!<%/%s$H$7$F07$&$Y$-$G$9!#(B
- <code>UNIQUE_ID</code> $B$OB>$N(B <code>UNIQUE_ID</code>
- $B$H$NEy2A@-$rD4$Y$k$?$a$@$1$K$N$_;HMQ$G$-$^$9!#(B</p>
-
- <p>$B$3$N=gHV$O>-Mh!"4{B8$N(B <code>UNIQUE_ID</code>
- $B$N%G!<%?%Y!<%9$H$N>WFM$r?4G[$9$k$3$H$J$/Id9f$rJQ99$9$k$3$H$,(B
- $B2DG=$K$J$k$h$&$KA*Br$7$F$$$^$9!#(B
- $B?7$7$$Id9f$O%?%$%`%9%?%s%W$r:G=i$NMWAG$H$7$F;D$9$N$,K>$^$7$/!"(B
- $B$=$l0J30$OF1$8%"%k%U%!%Y%C%H$H%S%C%HD9$r;H$&$3$H$,$G$-$^$9!#(B
- $B%?%$%`%9%?%s%W$OK\<AE*$KA}2C7ONs$G$9$N$G!"(B
- $B%/%i%9%?$NA4$F$N%^%7%s$,%j%/%(%9%H$H%5!<%P5!G=$rDd;_$7$F!"(B
- $B8E$$Id9f2=J}<0$r;HMQ$9$k$N$r$d$a$k(B<em>$B%U%i%0IC(B</em>$B$,$"$l$P==J,$G$9!#(B
- $B$=$N8e$O!"%j%/%(%9%H$r:F3+$7!"(B
- $B?7$7$$Id9f$rH/9T$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
-
- <p>$B2f!9$O$3$l$,!"(B
- $B$3$NLdBj$KBP$9$kHf3SE*0\?"@-$N9b$$2r7hK!$@$H9M$($F$$$^$9!#(B
- Windows NT $B$N$h$&$J%^%k%A%9%l%C%I$N%7%9%F%`$K3HD%$9$k$3$H$,$G$-$^$9$7!"(B
- $B>-MhI,MW$K$J$l$P$5$i$KA}$d$9$3$H$b$G$-$^$9!#(B
- ID $B$OI,MW$K1~$8$FD9$/$9$k$3$H$,$G$-$^$9$N$G!"@8@.$5$l$?(B ID
- $B$O<B<A>e!"L58B$KM-8z$G$9!#$^$?!"%/%i%9%?$N%^%7%s4V$NDL?.$b;v<B>eI,MW$J$/(B
- (NTP $B$K$h$kF14|$N$_$,I,MW$G!"$3$l$O%*!<%P%X%C%I$O$"$^$j$"$j$^$;$s(B)$B!"(Bhttpd
- $B%W%m%;%94V$NDL?.$bI,MW$"$j$^$;$s(B ($BDL?.$O%+!<%M%k$K$h$j3d$jEv$F$i$l$?(B
- pid $B$NCM$K$h$j0EL[$NFb$K9T$J$o$F$$$^$9(B)$B!#(B
- $B$5$i$K8B$i$l$?>u672<$G$O!"(BID $B$O$5$i$KC;$/$9$k$3$H$,$G$-$^$9$,!"(B
- $B$h$jB?$/$N>pJs$r2>Dj$9$kI,MW$,$G$F$-$^$9(B ($BNc$($P!"(B32 $B%S%C%H(B
- IP $B%"%I%l%9$O$I$N%5%$%H$K$*$$$F$b2a>j$J>pJs$G$9$,!"(B
- $B$=$l$NBe$o$j$K$J$k0\?"@-$N$"$k$b$N$O$"$j$^$;$s(B)$B!#(B</p>
-</section>
-
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_unique_id.xml.ko b/docs/manual/mod/mod_unique_id.xml.ko
deleted file mode 100644
index 8808e8ea4d..0000000000
--- a/docs/manual/mod/mod_unique_id.xml.ko
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_unique_id.xml.meta">
-
-<name>mod_unique_id</name>
-<description>°¢ ¿äû¸¶´Ù À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ °¡Áö´Â ȯ°æº¯¼ö¸¦
-Á¦°øÇÑ´Ù</description>
-<status>Extension</status>
-<sourcefile>mod_unique_id.c</sourcefile>
-<identifier>unique_id_module</identifier>
-
-<summary>
-
- <p>ÀÌ ¸ðµâÀº ¾î¶² Ưº°ÇÑ »óȲ¿¡¼­µµ "¸ðµç" ¿äûÁß¿¡¼­
- À¯ÀÏÇϵµ·Ï º¸ÀåµÈ ½Äº°ÀÚ(identifier)¸¦ ¸ðµç ¿äû¿¡ Á¦°øÇÑ´Ù.
- ½ÉÁö¾î ÀÌ ½Äº°Àڴ Ưº°ÇÏ°Ô ±¸¼ºÇÑ Å¬·¯½ºÅÍÀÇ ¿©·¯ ÄÄÇ»Å͵é
- Áß¿¡¼­µµ À¯ÀÏÇÏ´Ù. °¢ ¿äû¸¶´Ù ȯ°æº¯¼ö
- <code>UNIQUE_ID</code>¸¦ ¼³Á¤ÇÑ´Ù. À¯ÀÏÇÑ ½Äº°ÀÚ´Â ¿©·¯°¡Áö
- ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¼³¸íÀº ÀÌ ¹®¼­ÀÇ ¹üÀ§¸¦ ³Ñ¾î¼±´Ù.</p>
-</summary>
-
-<section id="theory">
- <title>ÀÌ·Ð</title>
-
- <p>¸ÕÀú À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡ ¼­¹ö°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö
- °£·«È÷ »ìÆ캸ÀÚ. Windows NT´Â ÇöÀç ÀÌ ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.
- À¯´Ð½º¿¡¼­ ¾ÆÆÄÄ¡´Â ¿©·¯ ÀÚ½ÄÀ» ¸¸µé°í, ÀÚ½Ä ÇÁ·Î¼¼½º´Â
- Çѹø¿¡ ÇÑ ¿äû¾¿ ó¸®ÇÑ´Ù. ÀÚ½ÄÀº ½ÇÇàÁß¿¡ ¿©·¯ ¿äûÀ»
- ó¸®ÇÑ´Ù. ¿©±â¼­ Áß¿äÇÑ °ÍÀº ÀڽĵéÀÌ ¼­·Î ÀڷḦ
- °øÀ¯ÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ¾ÕÀ¸·Î ÀÚ½ÄÀ» httpd ÇÁ·Î¼¼½º¶ó°í
- ÇÑ´Ù.</p>
-
- <p>¿©·¯ ÄÄÇ»ÅÍ·Î À¥»çÀÌÆ®¸¦ ¼­ºñ½ºÇÑ´Ù¸é Ŭ·¯½ºÅÍ(cluster)¶ó°í
- ºÎ¸¥´Ù. °¢ ÄÄÇ»ÅÍ´Â ¿©·¯ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ÀÌµé ¸ðµÎ¸¦
- "¿ìÁÖ"·Î º¸¸é, Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ÄÄÇ»Å͵鰣¿¡ ¸¹Àº Åë½Å¾øÀÌ
- °¢ ¿äû¸¶´Ù ¿ìÁÖ¿¡¼­ À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¸¸µé ¼ö ÀÖ´Ù.</p>
-
- <p>Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ÄÄÇ»ÅÍ´Â ´ÙÀ½ ¿ä±¸»çÇ×À» ¸¸Á·ÇØ¾ß ÇÑ´Ù.
- (ÄÄÇ»Å͸¦ ÇѴ븸 »ç¿ëÇÏ´õ¶óµµ ÄÄÇ»ÅÍ ½Ã°£À» NTP¿Í µ¿±âÇؾß
- ÇÑ´Ù.)</p>
-
- <ul>
- <li>ÄÄÇ»ÅÍ ½Ã°£Àº NTP³ª ´Ù¸¥ ³×Æ®¿÷ ½Ã°£ ÇÁ·ÎÅäÄÝ°ú
- µ¿±âÈ­µÈ´Ù.</li>
-
- <li>ÄÄÇ»ÅÍÀÇ È£½ºÆ®¸íÀÌ ¸ðµÎ ´Ù¸£´Ù. ±×·¡¼­ ¸ðµâÀÌ
- È£½ºÆ®¸íÀ¸·Î ãÀ¸¸é Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â °¢ ÄÄÇ»Å͸¶´Ù ´Ù¸¥
- IP ÁÖ¼Ò¸¦ ¾ò´Â´Ù.</li>
- </ul>
-
- <p>¿î¿µÃ¼Á¦¿¡¼­ pid (ÇÁ·Î¼¼½º id)°¡ 32ºñÆ®¿¡ µé¾î°£´Ù°í
- °¡Á¤ÇÑ´Ù. ¿î¿µÃ¼Á¦°¡ pid·Î 32ºñÆ® ÀÌ»óÀ» »ç¿ëÇÑ´Ù¸é °£´ÜÇÏÁö¸¸
- Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ÀÌ·± °¡Á¤ÇÏ¿¡ ¿ì¸®´Â ¾î¶² ½ÃÁ¡¿¡¼­ Ŭ·¯½ºÅÍÀÇ ¾î¶² ÄÄÇ»ÅÍ¿¡
- ÀÖ´Â ¾î¶² httpd ÇÁ·Î¼¼½º¸¦ ´Ù¸¥ ¸ðµç httpd ÇÁ·Î¼¼½ºµé°ú
- ±¸º°ÇÒ ¼ö ÀÖ´Ù. ÄÄÇ»ÅÍÀÇ IP ÁÖ¼Ò¿Í httpd ÇÁ·Î¼¼½ºÀÇ pid¸¸À¸·Îµµ
- ÃæºÐÈ÷ ±¸º°ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ¿äû¿¡ ´ëÇØ À¯ÀÏÇÑ ±¸º°ÀÚ¸¦
- ¸¸µå·Á¸é ½Ã°£Â÷¸¦ ±¸º°ÇÒ ¼ö¸¸ ÀÖÀ¸¸é µÈ´Ù.</p>
-
- <p>½Ã°£À» ±¸º°ÇϱâÀ§ÇØ À¯´Ð½º ½Ã°£(timestamp, ¼¼°è Ç¥Áؽ÷Î
- 1970³â 1¿ù 1ÀÏ ÀÌÈÄ Áö³­ ÃÊ)°ú 16ºñÆ® Ä«¿îÅ͸¦ »ç¿ëÇÑ´Ù.
- À¯´Ð½º ½Ã°£Àº ÃÊ´ÜÀ§ÀÌ°í, Ä«¿îÅÍ´Â ÀÏ Ãʵ¿¾È 65536±îÁö
- Áõ°¡ÇÑ´Ù. <em>( ip_addr, pid, time_stamp, counter )</em>
- ¹­À½Àº ¾î¶² httpd ÇÁ·Î¼¼½º¿¡¼­ ÀÏ Ãʵ¿¾È 65536 ¿äûÀ» ±¸º°ÇÒ
- ¼ö ÀÖ´Ù. ±×·¯³ª Ä«¿îÅÍ´Â pid¸¦ Àç»ç¿ëÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇؾß
- ÇÑ´Ù.</p>
-
- <p>httpd ÀÚ½ÄÀ» ¸¸µé¸é Ä«¿îÅÍ´Â ( ÇöÀç ¹Ð¸®ÃÊ ³ª´©±â 10 )À»
- 65536À¸·Î ³ª´« ³ª¸ÓÁö°¡ µÈ´Ù. (¸î¸î ½Ã½ºÅÛÀÇ ¹Ð¸®ÃÊ ½Ã°£¿¡¼­
- ÇÏÀ§ ºñÆ®°¡ ÀÏÄ¡ÇÏÁö¾Ê´Â ¹®Á¦¶§¹®¿¡ ÀÌ °ø½ÄÀ» ¸¸µé¾ú´Ù.)
- À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¸¸µé¶§ »ç¿ëÇÏ´Â ½Ã°£Àº À¥¼­¹ö°¡ ¿äûÀ» ¹ÞÀº
- ½Ã°£ÀÌ´Ù. Ä«¿îÅÍ´Â ½Äº°ÀÚ¸¦ ¸¸µé¶§¸¶´Ù Áõ°¡ÇÑ´Ù (±×¸®°í
- ´Ù½Ã ½ÃÀÛÇÑ´Ù).</p>
-
- <p>Ä¿³ÎÀº ÇÁ·Î¼¼½º¸¦ Æ÷Å©ÇÒ¶§(fork) °¢ ÇÁ·Î¼¼½º¿¡ pid¸¦
- ÇÒ´çÇÏ°í, pid´Â ´Ù½Ã ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. (pid´Â ¸¹Àº À¯´Ð½º¿¡¼­
- 16ºñÆ®ÀÌÁö¸¸, ÃÖ±Ù ½Ã½ºÅÛÀº 32ºñÆ®·Î È®ÀåÇß´Ù.) ±×·¡¼­ ½Ã°£ÀÌ
- Áö³ª¸é °°Àº pid¸¦ Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª °°Àº ½Ã°£¿¡ pid¸¦
- Àç»ç¿ëÇÏÁö ¾Ê´Â´Ù¸é À§ÀÇ ¹­À½Àº À¯ÀÏÇÏ´Ù. Áï, ¿ì¸®´Â ½Ã½ºÅÛÀÌ
- ÀÏÃʵ¿¾È ÇÁ·Î¼¼½º¸¦ 65536°³ ÀÌ»ó ¸¸µéÁö ¾Ê´Â´Ù°í °¡Á¤ÇÑ´Ù.
- (¾î¶² À¯´Ð½º¿¡¼­´Â 32768°³ ÀÌ»ó ÇÁ·Î¼¼½º¸¦ ¸¸µé¸é pid Àç»ç¿ë
- ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÁö¸¸, ÀÌ°ÍÁ¶Â÷µµ ÀϾ °Í°°Áö ¾Ê´Ù.)</p>
-
- <p>½Ã°£ÀÌ ¾î¶² ÀÌÀ¯¿¡¼­°Ç ¹Ýº¹µÈ´Ù°í °¡Á¤Çغ¸ÀÚ. Áï, ½Ã½ºÅÛ
- ½Ã°è°¡ ²¿¿©¼­ ½Ã°£ÀÌ °ú°Å·Î µ¹¾Æ°¡´Â (ȤÀº ½Ã°è°¡ ³Ê¹« ¾Õ¼­°¡¼­
- ¿Ã¹Ù·Î Àç¼³Á¤ÇÑÈÄ ¹Ì·¡¿¡ °°Àº ½Ã°£ÀÌ µÇ´Â) °æ¿ì´Ù. ÀÌ °æ¿ì
- pid¿Í ½Ã°£À» ¸ðµÎ Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù. Ä«¿îÅÍÀÇ ÃʱâÈ­ °ø½ÄÀº
- ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á°í °í¾ÈµÇ¾ú´Ù. ¿ì¸®´Â ½ÇÁ¦ ¹«ÀÛÀ§ ¼ýÀÚ·Î
- Ä«¿îÅ͸¦ ÃʱâÈ­ÇÏ±æ ¿øÇÏÁö¸¸, ¸¹Àº ½Ã½ºÅÛ¿¡¼­ ÀÌ·± ¼ö¸¦
- ½±°Ô ¾òÀ» ¼ö ¾ø´Ù. (<em>¿¹¸¦ µé¾î</em>, seed°¡ ÇÊ¿äÇϱ⶧¹®¿¡
- rand()¸¦ »ç¿ëÇÒ ¼ö ¾ø°í, ½Ã°£Àº ÃÖ¼ÒÇÑ ÀÏÃÊ ´ÜÀ§À̱⶧¹®¿¡
- ½Ã°£À¸·Î seed·Î »ç¿ëÇÒ ¼ö ¾ø´Ù.) Áï ¿Ïº®ÇÑ ÇØ°áÃ¥ÀÌ ¾ø´Ù.</p>
-
- <p>±×·³ ÀÌ ¹æ¹ýÀº ¾ó¸¶³ª ±¦ÂúÀ»±î? ÄÄÇ»ÅÍÁß Çϳª°¡ ¿äûÀ»
- ÃÊ´ç ÃÖ´ë 500°³ (½Ã½ºÅÛÀº ÀϹÝÀûÀ¸·Î Á¤ÀûÀÎ ÆÄÀÏÀ» Àü¼ÛÇÏ´Â
- °Í ÀÌ»óÀÇ ÀÛ¾÷À» ÇϹǷΠÀÌ ±ÛÀ» ¾²´Â ½ÃÁ¡¿¡¼­ »ó´çÈ÷ ³ôÀº
- °ªÀÌ´Ù.) ¼­ºñ½ºÇÑ´Ù°í °¡Á¤ÇÏÀÚ. µ¿½Ã¿¡ ¾ó¸¶¸¸Å­ÀÇ Å¬¶óÀ̾ðÆ®¸¦
- ó¸®Çϴ°¡¿¡ µû¶ó ÀÚ½ÄÀÇ °³¼ö°¡ °áÁ¤µÈ´Ù. ±×·¯³ª ¿ì¸®´Â
- ºñ°üÀûÀ¸·Î ÇÑ ÀÚ½ÄÀÌ ¿äûÀ» ÃÊ´ç 500°³ ó¸®ÇÒ ¼ö ÀÖ´Ù°í
- °¡Á¤ÇÑ´Ù. Àç»ç¿ëÇÑ pid¸¦ °¡Áø ÀÚ½ÄÀÇ 500°³ ¿äû°ú ÀÌÀü ÀÚ½ÄÀÇ
- 500°³ ¿äûÀÇ Ä«¿îÅÍ°ªÀÌ °ãÄ¥ ¼ö ÀÖ´Â Ä«¿îÅÍ ½ÃÀÛ°ª °æ¿ì¼ö´Â
- 1000°³ÀÌ´Ù. ±×·¡¼­ (ÃÊ´ÜÀ§¿¡¼­) ÀÚ½ÄÀÌ Ä«¿îÅÍ°ªÀ» ¹Ýº¹ÇÏ¿©
- À¯ÀϼºÀÌ ±úÁú È®·üÀº 1.5%ÀÌ´Ù. ÀÌ°ÍÀº ¸Å¿ì ºñ°üÀûÀÎ °¡Á¤À̸ç,
- ½ÇÁ¦ ÀÌ·² °æ¿ì´Â »ó´çÈ÷ ´õ ³·´Ù. ±×·¡µµ ½Ã½ºÅÛ¿¡¼­ ÀÌ·±
- ÀÏÀÌ ¹ß»ýÇÒ °Í °°´Ù¸é (¼Ò½º¸¦ ¼öÁ¤ÇÏ¿©) Ä«¿îÅ͸¦ 32ºñÆ®·Î
- ¸¸µé¾î¶ó.</p>
-
- <p>¼¶¸ÓŸÀÓ¶§¹®¿¡ ½Ã°è°¡ "µÚ·Î °¡´Â" °ÍÀ» °ÆÁ¤ÇÒÁöµµ ¸ð¸¥´Ù.
- ±×·¯³ª ¿©±â¼­ »ç¿ëÇÏ´Â ½Ã°£Àº ±¹Á¦ Ç¥ÁؽÃ(UTC), Áï ½Ã°£ÀÌ
- "Ç×»ó" ¾ÕÀ¸·Î °¡¹Ç·Î ¹®Á¦°¡ ¾ø´Ù. x86±â¹Ý À¯´Ð½º¿¡¼­´Â
- ÀûÀýÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù. ¸ÞÀκ¸µå ½Ã°è°¡ UTC¸¦ »ç¿ëÇϵµ·Ï
- ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±×·¯³ª NTP¸¦ »ç¿ëÇÑ´Ù¸é Àç½ÃÀÛÈÄ Á¶±Ý Áö³ª¸é
- UTC ½Ã°£¿¡ ¿Ã¹Ù·Î ¸ÂÃá´Ù.</p>
-
- <p>ȯ°æº¯¼ö <code>UNIQUE_ID</code>´Â MIME base64 ÀÎÄÚµù°ú
- ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î 112ºñÆ® (32ºñÆ® IP ÁÖ¼Ò, 32ºñÆ® pid, 32ºñÆ®
- ½Ã°£, 16ºñÆ® Ä«¿îÅÍ) ¹­À½À» ¾ËÆĺª <code>[A-Za-z0-9@-]</code>·Î
- Ç¥ÇöÇÑ´Ù. ½ÇÁ¦ MIME base64 ¾ËÆĺªÀº
- <code>[A-Za-z0-9+/]</code>ÀÌÁö¸¸ <code>+</code>¿Í
- <code>/</code>´Â URL¿¡¼­ Ưº°ÇÑ Àǹ̷Π»ç¿ëÇϹǷΠÁ¦¿ÜÇß´Ù.
- ¸ðµç °ªÀ» ³×Æ®¿÷ ¹ÙÀÌÆ®¼ø¼­·Î ÀÎÄÚµùÇϱ⶧¹®¿¡ ´Ù¸¥ ¹ÙÀÌÆ®¼ø¼­¸¦
- »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃÄ°£¿¡ °ªÀÌ °°´Ù. ½ÇÁ¦ ÀÎÄÚµù ¼ø¼­´Â
- ½Ã°£, IP ÁÖ¼Ò, pid, Ä«¿îÅÍ ¼ø¼­ÀÌ´Ù. ÀÌ ¼ø¼­¿¡´Â ¾î¶² ¸ñÀûÀÌ
- ÀÖÁö¸¸, ÇÁ·Î±×·¥Àº ÀÎÄÚµù ¼ø¼­¿¡ ÀÇÁ¸ÇÏ¿© °ªµéÀ» ºÐ¼®Çϸé
- ¾ÈµÊÀ» °­Á¶ÇÑ´Ù. ÇÁ·Î±×·¥Àº ÀÎÄÚµùµÈ <code>UNIQUE_ID</code>
- Àüü¸¦ ÇÑ ´ÜÀ§·Î »ý°¢ÇÏ°í, ´Ù¸¥ <code>UNIQUE_ID</code>¿Í
- µ¿ÀÏÇÑÁö¸¸ ºñ±³ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼ø¼­´Â ¾ÕÀ¸·Î ±âÁ¸ÀÇ <code>UNIQUE_ID</code> µ¥ÀÌÅͺ£À̽º¿Í
- Ãæµ¹À» ¿°·ÁÇÏÁö¾Ê°í ÀÎÄÚµùÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï °í¾ÈÇß´Ù.
- »õ·Î¿î ÀÎÄÚµùÀº ù Ç׸ñÀ¸·Î ½Ã°£À» »ç¿ëÇϰųª, °°Àº ¾ËÆĺª°ú
- ºñÆ® ±æÀ̸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ½Ã°£ÀÌ ±âº»ÀûÀ¸·Î Áõ°¡ÇÏ´Â °ªÀ̹ǷÎ
- Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ¸ðµç ÄÄÇ»ÅÍ°¡ ¿äû ¼­ºñ½º¸¦ Áß´ÜÇÏ°í ÀÌÀü
- ÀÎÄÚµù Çü½ÄÀ» ±×¸¸ »ç¿ëÇϱâÀ§ÇØ <em>±âÁØ ÃÊ(flag second)</em>¸¸À¸·Î
- ÃæºÐÇÏ´Ù. ÀÌÈÄ ¿äûÀ» Àç°ÔÇÏ°í »õ·Î¿î ÀÎÄÚµùÀ» ½ÃÀÛÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¿ì¸®´Â ÀÌ ¹æ¹ýÀÌ ÀÌ ¹®Á¦¿¡ ´ëÇÏ¿© »ó´ëÀûÀ¸·Î Æ÷Æð¡´ÉÇÑ
- ÇØ°áÃ¥À̶ó°í ¹Ï´Â´Ù. ÀÌ ¹æ¹ýÀº Windows NT¿Í °°Àº ¸ÖƼ¾²·¹µå
- ½Ã½ºÅÛÀ¸·Î È®ÀåÇÒ ¼ö ÀÖ°í, ¾ÕÀ¸·Î ¿ëµµ¿¡ µû¶ó È®ÀåÇÒ ¼ö
- ÀÖ´Ù. ¹Ì·¡¿¡ ÇÊ¿äÇѸ¸Å­ ´õ ±ä ½Äº°ÀÚ¸¦ ¸¸µé ¼ö Àֱ⶧¹®¿¡
- »ý¼ºÇÑ ½Äº°ÀÚ´Â ±âº»ÀûÀ¸·Î ¿µ¿øÇÑ ¼ö¸íÀ» °¡Áø´Ù. ±âº»ÀûÀ¸·Î
- Ŭ·¯½ºÅÍÀÇ ÄÄÇ»ÅÍµé »çÀÌ¿¡ Åë½ÅÀÌ ÇÊ¿ä¾ø°í (ºÎÇÏ°¡ ÀÛÀº
- NTP µ¿±â¸¸ ÇÊ¿äÇÏ´Ù), httpd ÇÁ·Î¼¼½º »çÀÌ¿¡ Åë½Åµµ ÇÊ¿ä¾ø´Ù
- (Ä¿³ÎÀÌ ºÎ¿©ÇÏ´Â pid°ªÀÌ ¾Ï¹¬ÀûÀÎ Åë½ÅÀÌ´Ù). ¸Å¿ì ƯÀÌÇÑ
- »óȲÀ̶ó¸é ÀνÄÀÚ Å©±â¸¦ ÁÙÀÏ ¼ö ÀÖÁö¸¸ ´õ ¸¹Àº Á¤º¸¸¦
- °¡Á¤ÇØ¾ß ÇÑ´Ù. (¿¹¸¦ µé¾î, ¾î¶² »çÀÌÆ®¿¡¼­ 32ºñÆ® IP ÁÖ¼Ò
- ±¸ºÐÀº ºÒÇÊ¿äÇÏ°Ô Å©Áö¸¸, À̸¦ ÁÙÀÌ´Â ¹æ¹ýÀº »óȲ¿¡ µû¶ó
- ´Ù¸£´Ù.) </p>
-</section>
-
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_unique_id.xml.meta b/docs/manual/mod/mod_unique_id.xml.meta
deleted file mode 100644
index 06445a1184..0000000000
--- a/docs/manual/mod/mod_unique_id.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_unique_id</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_userdir.html b/docs/manual/mod/mod_userdir.html
deleted file mode 100644
index 897ef83289..0000000000
--- a/docs/manual/mod/mod_userdir.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mod_userdir.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_userdir.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mod_userdir.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_userdir.html.en b/docs/manual/mod/mod_userdir.html.en
deleted file mode 100644
index 3da0c75006..0000000000
--- a/docs/manual/mod/mod_userdir.html.en
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_userdir - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_userdir</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_userdir.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_userdir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_userdir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>User-specific directories</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>userdir_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_userdir.c</td></tr></table>
-<h3>Summary</h3>
-
-<p>This module allows user-specific directories to be accessed using the
-<code>http://example.com/~user/</code> syntax.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../urlmapping.html">Mapping URLs to the
-Filesystem</a></li>
-<li><a href="../howto/public_html.html">public_html
-tutorial</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the user-specific directories</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>UserDir <em>directory-filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>UserDir public_html</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_userdir</td></tr>
-</table>
-
- <p>The <code class="directive">UserDir</code> directive sets the real
- directory in a user's home directory to use when a request for a
- document for a user is received. <em>Directory-filename</em> is
- one of the following:</p>
-
- <ul>
- <li>The name of a directory or a pattern such as those shown
- below.</li>
-
- <li>The keyword <code>disabled</code>. This turns off
- <em>all</em> username-to-directory translations except those
- explicitly named with the <code>enabled</code> keyword (see
- below).</li>
-
- <li>The keyword <code>disabled</code> followed by a
- space-delimited list of usernames. Usernames that appear in
- such a list will <em>never</em> have directory translation
- performed, even if they appear in an <code>enabled</code>
- clause.</li>
-
- <li>The keyword <code>enabled</code> followed by a
- space-delimited list of usernames. These usernames will have
- directory translation performed even if a global disable is
- in effect, but not if they also appear in a
- <code>disabled</code> clause.</li>
- </ul>
-
- <p>If neither the <code>enabled</code> nor the
- <code>disabled</code> keywords appear in the
- <code>Userdir</code> directive, the argument is treated as a
- filename pattern, and is used to turn the name into a directory
- specification. A request for
- <code>http://www.foo.com/~bob/one/two.html</code> will be
- translated to:</p>
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
- <p>The following directives will send redirects to the client:</p>
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table>
-
-<div class="note">
- <strong>Be careful when using this directive; for instance,
- <code>"UserDir ./"</code> would map <code>"/~root"</code> to
- <code>"/"</code> - which is probably undesirable. It is strongly
- recommended that your configuration include a "<code>UserDir
- disabled root</code>" declaration. See also the <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> directive and the <a href="../misc/security_tips.html">Security Tips</a> page for
- more information.</strong>
-</div>
-
-<p>Additional examples:</p>
-
-<p>To allow a few users to have <code>UserDir</code> directories, but
-not anyone else, use the following:</p>
-
-<div class="example"><p><code>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</code></p></div>
-
-<p>To allow most users to have <code>UserDir</code> directories, but
-deny this to a few, use the following:</p>
-
-<div class="example"><p><code>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</code></p></div>
-
-<p>It is also possible to specify alternative user directories.
-If you use a command like:</p>
-<div class="example"><p><code>
-Userdir public_html /usr/web http://www.foo.com/
-</code></p></div>
-<p>With a request for http://www.foo.com/~bob/one/two.html, will try to
-find the page at ~bob/public_html/one/two.html first, then
-/usr/web/bob/one/two.html, and finally it will send a redirect
-to http://www.foo.com/bob/one/two.html.</p>
-<p>If you add a redirect, it must be the last alternative in the list.
-Apache cannot determine if the redirect succeeded or not, so if you have
-the redirect earlier in the list, that will always be the alternative
-that is used.</p>
-
-
-<h3>See also</h3>
-<ul>
-<li><a href="../howto/public_html.html">public_html
-tutorial</a></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_userdir.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_userdir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_userdir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_userdir.html.ja.euc-jp b/docs/manual/mod/mod_userdir.html.ja.euc-jp
deleted file mode 100644
index a9cb2e0756..0000000000
--- a/docs/manual/mod/mod_userdir.html.ja.euc-jp
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_userdir - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë mod_userdir</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_userdir.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_userdir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥æ¡¼¥¶ÀìÍѤΥǥ£¥ì¥¯¥È¥ê¤òÄó¶¡
- </td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>userdir_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mod_userdir.c</td></tr></table>
-<h3>³µÍ×</h3>
-
-<p>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢
-<code>http://example.com/~user/</code>
-¹½Ê¸¤ò»È¤Ã¤Æ¥æ¡¼¥¶ÀìÍѥǥ£¥ì¥¯¥È¥ê¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir</a></li>
-</ul>
-<h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../urlmapping.html">URL ¤«¤é
-¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ø¤Î¥Þ¥Ã¥Ô¥ó¥°</a></li>
-<li><a href="../howto/public_html.html">public_html
-¥Á¥å¡¼¥È¥ê¥¢¥ë</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥æ¡¼¥¶ÀìÍѥǥ£¥ì¥¯¥È¥ê¤Î°ÌÃÖ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>UserDir <em>directory-filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>UserDir public_html</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë, ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mod_userdir</td></tr>
-</table>
-
- <p><code class="directive">UserDir</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥æ¡¼¥¶¤Î¥É¥­¥å¥á¥ó¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤¿»þ¤Ë»È¤¦
- ¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥êÃæ¤Î¡¢¼ÂºÝ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò
- ÀßÄꤷ¤Þ¤¹¡£
- <em>directory-filename</em> ¤Ë¤Ï¼¡¤Î¤É¤ì¤«¤ò»ØÄꤷ¤Þ¤¹:</p>
-
- <ul>
- <li>¥Ç¥£¥ì¥¯¥È¥ê̾¤«²¼¤Ë¼¨¤¹¤è¤¦¤Ê¥Ñ¥¿¡¼¥ó¡£</li>
-
- <li><code>disabled</code> ¥­¡¼¥ï¡¼¥É¡£
- <code>enabled</code> ¥­¡¼¥ï¡¼¥É (²¼µ­»²¾È) ¤ÇÌÀ¼¨Åª¤Ë
- »ØÄꤵ¤ì¤¿¥æ¡¼¥¶°Ê³°¤Î
- <em>Á´¤Æ¤Î</em>¥æ¡¼¥¶Ì¾-¥Ç¥£¥ì¥¯¥È¥êÊÑ´¹¤ò
- ¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£</li>
-
- <li><code>disabled</code> ¥­¡¼¥ï¡¼¥É¤È¡¢¥¹¥Ú¡¼¥¹¶èÀÚ¤ê¤Î¥æ¡¼¥¶Ì¾¥ê¥¹¥È¡£
- ¤³¤Î¥ê¥¹¥ÈÃæ¤Ë´Þ¤Þ¤ì¤ë¥æ¡¼¥¶Ì¾¤ËÂФ·¤Æ¤Ï¡¢¤¿¤È¤¨
- <code>enabled</code> Àá¤Ë¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢
- <em>·è¤·¤Æ</em>¥Ç¥£¥ì¥¯¥È¥êÊÑ´¹¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£</li>
-
- <li><code>enebled</code> ¥­¡¼¥ï¡¼¥É¤È¥¹¥Ú¡¼¥¹¶èÀÚ¤ê¤Î¥æ¡¼¥¶Ì¾¥ê¥¹¥È¡£
- Á´ÂΤǤÏÊÑ´¹¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤È¤¤¤¿¤È¤·¤Æ¤â¡¢
- ¤³¤ì¤é¤Î¥æ¡¼¥¶Ì¾¤Ë¤Ï¥Ç¥£¥ì¥¯¥È¥êÊÑ´¹¤¬¹Ô¤ï¤ì¤Þ¤¹¡£
- ¤¿¤À¤·¡¢<code>disabled</code> Àá¤Ë¤â¤¢¤ì¤ÐÊÑ´¹¤Ï¤µ¤ì¤Þ¤»¤ó¡£
- </li>
- </ul>
-
- <p>¤â¤· <code>enabled</code> ¤â <code>disabled</code>
- ¥­¡¼¥ï¡¼¥É¤â <code>UserDir</code> ¤Ë¸½¤ï¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢
- °ú¿ô¤Ï¥Õ¥¡¥¤¥ë̾¥Ñ¥¿¡¼¥ó¤È¤·¤Æ°·¤ï¤ì¡¢
- ̾Á°¤«¤é¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤ÎÊÑ´¹¤Î»ØÄê¤ò¹Ô¤Ê¤¦»þ¤Ë»È¤ï¤ì¤Þ¤¹¡£
- <code>http://www.foo.com/~bob/one/two.html</code>
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¼¡¤Î¤è¤¦¤ËÊÑ´¹¤µ¤ì¤Þ¤¹:</p>
-
-<table>
-<tr><th>UserDir ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th>
-<th>ÊÑ´¹¸å¤Î¥Ñ¥¹</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
- <p>¼¡¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¥ê¥À¥¤¥ì¥¯¥È¤ò
- Á÷¿®¤·¤Þ¤¹:</p>
-
-<table>
-<tr><th>UserDir ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th>
-<th>ÊÑ´¹¸å¤Î¥Ñ¥¹</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table>
-
-<div class="note">
- <strong>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤È¤­¤ÏÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤;
- "<code>UserDir ./</code>" ¤Ï
- "<code>/~root</code>" ¤«¤é "<code>/</code>" ¤Ø¥Þ¥Ã¥×¤·¤Þ¤¹¤¬¡¢
- ¤³¤ì¤Ï˾¤Þ¤·¤¤Æ°ºî¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£
- "<code>UserDir disabled root</code>" Àë¸À¤ò
- ÀßÄê¤ÎÃæ¤Ë´Þ¤á¤Æ¤ª¤¯¤³¤È¤ò¶¯¤¯¤ªÁ¦¤á¤·¤Þ¤¹¡£
- ÄɲþðÊó¤Ë <code class="directive"><a href="../mod/core.html#directory">Directory</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <a href="../misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£
- Tips</a> ¤Î¥Ú¡¼¥¸¤â¤´Í÷²¼¤µ¤¤¡£</strong>
-</div>
-
-<p>ÄɲäÎÎã:</p>
-
-<p>¾¯¿ô¤Î¥æ¡¼¥¶¤Î¤ß¤¬ <code>UserDir</code>
-¥Ç¥£¥ì¥¯¥È¥ê¤òÍøÍѤ·¡¢¤½¤ì°Ê³°¤Ë¤ÏÍøÍѤµ¤»¤¿¤¯¤Ê¤¤¾ì¹ç¤Ï
-¼¡¤ò»È¤¤¤Þ¤·¤ç¤¦:</p>
-
-<div class="example"><p><code>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</code></p></div>
-
-<p>ÂçÉôʬ¤Î¥æ¡¼¥¶¤Ï <code>UserDir</code> ¥Ç¥£¥ì¥¯¥È¥ê¤òÍøÍѤ¹¤ë¤±¤ì¤É¡¢
-¾¯¿ô¤Î¿Í¤ÏÉÔµö²Ä¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢¼¡¤ò»È¤¤¤Þ¤·¤ç¤¦:</p>
-
-<div class="example"><p><code>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</code></p></div>
-
-<p>¾¤Î¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
-¼¡¤Î¤è¤¦¤Ê¥³¥Þ¥ó¥É¤ò»È¤¦¤È:</p>
-
-<div class="example"><p><code>
-Userdir public_html /usr/web http://www.foo.com/
-</code></p></div>
-
-<p>http://www.foo.com/~bob/one/two.html ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¤Þ¤º
-~bob/public_html/one/two.html ¤Î¥Ú¡¼¥¸¤òÄ´¤Ù¡¢¤½¤Î¼¡¤Ë
-/usr/web/bob/one/two.html ¤òÄ´¤Ù¡¢ºÇ¸å¤Ë http://www.foo.com/bob/one/two.html
-¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ê¤Þ¤¹¡£</p>
-
-<p>¥ê¥À¥¤¥ì¥¯¥È¤ò²Ã¤¨¤ë¾ì¹ç¤Ï¡¢¥ê¥¹¥È¤ÎºÇ¸å¤ÎÁªÂò»è¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
-Apache ¤Ï¥ê¥À¥¤¥ì¥¯¥È¤¬À®¸ù¤¹¤ë¤«¤É¤¦¤«¤ò·è¤á¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤Î¤Ç¡¢
-¥ê¥¹¥È¤ÎÁ°¤ÎÊý¤Ë¥ê¥À¥¤¥ì¥¯¥È¤ò½ñ¤¯¤È¡¢¤½¤ì¤¬É¬¤º»ÈÍѤµ¤ì¤ëÁªÂò»è¤Ë
-¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£</p>
-
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../howto/public_html.html">public_html
-¥Á¥å¡¼¥È¥ê¥¢¥ë</a></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_userdir.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_userdir.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_userdir.html.ko.euc-kr b/docs/manual/mod/mod_userdir.html.ko.euc-kr
deleted file mode 100644
index 25112b02b5..0000000000
--- a/docs/manual/mod/mod_userdir.html.ko.euc-kr
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_userdir - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_userdir</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_userdir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_userdir.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>»ç¿ëÀÚº° µð·ºÅ丮</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>userdir_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_userdir.c</td></tr></table>
-<h3>¿ä¾à</h3>
-
-<p>ÀÌ ¸ðµâÀ» »ç¿ëÇϸé <code>http://example.com/~user/</code> ½ÄÀ¸·Î
-»ç¿ëÀÚº° µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir</a></li>
-</ul>
-<h3>Âü°í</h3>
-<ul class="seealso">
-<li><a href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></li>
-<li><a href="../howto/public_html.html">public_html
-ÅõÅ丮¾ó</a></li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="UserDir" id="UserDir">UserDir</a> <a name="userdir" id="userdir">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>»ç¿ëÀÚº° µð·ºÅ丮 À§Ä¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>UserDir <em>directory-filename</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">±âº»°ª:</a></th><td><code>UserDir public_html</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_userdir</td></tr>
-</table>
-
- <p><code class="directive">UserDir</code> Áö½Ã¾î´Â »ç¿ëÀÚÀÇ ¹®¼­¿¡ ´ëÇÑ
-¿äûÀ» ¹ÞÀ»¶§ »ç¿ëÀÚ È¨µð·ºÅ丮 ¾È¿¡¼­ »ç¿ëÇÒ ½ÇÁ¦ µð·ºÅ丮¸¦
-ÁöÁ¤ÇÑ´Ù. <em>Directory-filename</em>Àº ´ÙÀ½ Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li>¾Æ·¡¿Í °°Àº µð·ºÅ丮¸í ȤÀº ÆÐÅÏ.</li>
-
- <li><code>disabled</code> Å°¿öµå.
-<code>enabled</code> Å°¿öµå·Î (¾Æ·¡ Âü°í) Á÷Á¢ À̸§À» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é
-<em>¸ðµç</em> »ç¿ëÀÚ¸í-µð·ºÅ丮 º¯È¯À» ÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li><code>disabled</code> Å°¿öµå µÚ¿¡ °ø¹éÀ¸·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í ¸ñ·Ï.
-»ç¿ëÀÚ¸íÀÌ <code>enabled</code> ±¸¹®¿¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ, ÀÌ ¸ñ·Ï¿¡
-ÀÖ´Â »ç¿ëÀÚ¸íÀº µð·ºÅ丮 º¯È¯À» ÇÏÁö <em>¾Ê´Â´Ù</em>.</li>
-
- <li><code>enabled</code> Å°¿öµå µÚ¿¡ °ø¹éÀ¸·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í ¸ñ·Ï.
-Àüü disableÀ» »ç¿ëÇÏ°í »ç¿ëÀÚ¸íÀÌ <code>disabled</code> ±¸¹®¿¡
-¾ø´õ¶óµµ, »ç¿ëÀÚ¸íÀ» µð·ºÅ丮 º¯È¯ÇÑ´Ù.</li>
- </ul>
-
- <p><code>Userdir</code> Áö½Ã¾î¿¡ <code>enabled</code>³ª
-<code>disabled</code> Å°¿öµå¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é, ¾Æ±Ô¸ÕÆ®¸¦
-ÆÄÀϸí ÆÐÅÏÀ¸·Î ó¸®ÇÏ¿© µð·ºÅ丮·Î º¯È¯ÇÑ´Ù.
-<code>http://www.foo.com/~bob/one/two.html</code>¿¡ ´ëÇÑ ¿äûÀº
-´ÙÀ½°ú °°ÀÌ º¯È¯µÈ´Ù:</p>
-
-<table>
-<tr><th>»ç¿ëÇÑ UserDir Áö½Ã¾î</th>
-<th>º¯È¯ÇÑ °æ·Î</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
- <p>´ÙÀ½ Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù:</p>
-
-<table>
-<tr><th>»ç¿ëÇÑ UserDir Áö½Ã¾î</th>
-<th>º¯È¯ÇÑ °æ·Î</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table>
-
-<div class="note">
- <strong>ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÒ¶§ ÁÖÀÇÇ϶ó; ¿¹¸¦ µé¾î,
-<code>"UserDir ./"</code>´Â <code>"/~root"</code>¸¦ ¾Æ¸¶µµ ¹Ù¶÷Á÷ÇÏÁö ¾Ê°Ô
-<code>"/"</code>·Î º¯È¯ÇÑ´Ù. ¼³Á¤¿¡ "<code>UserDir
- disabled root</code>"¸¦ Æ÷ÇÔÇÏ±æ °­·ÂÈ÷ ±ÇÇÑ´Ù. ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë·Á¸é
-<code class="directive"><a href="../mod/core.html#directory">Directory</a></code> Áö½Ã¾î¿Í <a href="../misc/security_tips.html">º¸¾È ÆÁ</a>µµ Âü°íÇ϶ó.</strong>
-</div>
-
-<p>Ãß°¡ ¿¹Á¦:</p>
-
-<p>¸î¸î »ç¿ëÀÚ¿¡°Ô¸¸ <code>UserDir</code> µð·ºÅ丮¸¦ Çã¿ëÇÑ´Ù¸é,
-´ÙÀ½°ú °°´Ù:</p>
-
-<div class="example"><p><code>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</code></p></div>
-
-<p>´ëºÎºÐÀÇ »ç¿ëÀÚ¿¡°Ô <code>UserDir</code> µð·ºÅ丮¸¦ Çã¿ëÇÏ°í
-ÀϺθ¸ °ÅºÎÇÑ´Ù¸é, ´ÙÀ½°ú °°´Ù:</p>
-
-<div class="example"><p><code>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</code></p></div>
-
-<p>´Ù¸¥ »ç¿ëÀÚ µð·ºÅ丮¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
-´ÙÀ½°ú °°Àº ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù¸é:</p>
-<div class="example"><p><code>
-Userdir public_html /usr/web http://www.foo.com/
-</code></p></div>
-<p>http://www.foo.com/~bob/one/two.html ¿äûÀ» Çϸé,
-¸ÕÀú ~bob/public_html/one/two.html ÆäÀÌÁö¸¦ ã°í,
-/usr/web/bob/one/two.htmlÀ» ãÀº ÈÄ, ¸¶Áö¸·À¸·Î
-http://www.foo.com/bob/one/two.htmlÀ¸·Î ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù.</p>
-<p>¸®´ÙÀÌ·º¼ÇÀ» »ç¿ëÇÑ´Ù¸é ¸ñ·ÏÀÇ ¸¶Áö¸·¿¡ µÎ¾î¾ß ÇÑ´Ù.
-¾ÆÆÄÄ¡´Â ¸®´ÙÀÌ·º¼ÇÀÌ ¼º°øÇß´ÂÁö ¾Ë ¼ö ¾ø±â¶§¹®¿¡, ¸®´ÙÀÌ·º¼ÇÀ»
-¸ñ·Ï ¾Õ¿¡ µÎ¸é Ç×»ó ¸®´ÙÀÌ·º¼ÇÀ» »ç¿ëÇÏ°Ô µÈ´Ù.</p>
-
-
-<h3>Âü°í</h3>
-<ul>
-<li><a href="../howto/public_html.html">public_html
-ÅõÅ丮¾ó</a></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_userdir.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mod_userdir.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/mod_userdir.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_userdir.xml b/docs/manual/mod/mod_userdir.xml
deleted file mode 100755
index e05b3992ba..0000000000
--- a/docs/manual/mod/mod_userdir.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.14 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_userdir.xml.meta">
-
-<name>mod_userdir</name>
-<description>User-specific directories</description>
-<status>Base</status>
-<sourcefile>mod_userdir.c</sourcefile>
-<identifier>userdir_module</identifier>
-
-<summary>
-<p>This module allows user-specific directories to be accessed using the
-<code>http://example.com/~user/</code> syntax.</p>
-</summary>
-
-<seealso><a href="../urlmapping.html">Mapping URLs to the
-Filesystem</a></seealso>
-<seealso><a href="../howto/public_html.html">public_html
-tutorial</a></seealso>
-
-<directivesynopsis>
-
-<name>UserDir</name>
-<description>Location of the user-specific directories</description>
-<syntax>UserDir <em>directory-filename</em></syntax>
-<default>UserDir public_html</default>
-<contextlist><context>server config</context> <context>virtual
-host</context></contextlist>
-
-<usage>
-
- <p>The <directive>UserDir</directive> directive sets the real
- directory in a user's home directory to use when a request for a
- document for a user is received. <em>Directory-filename</em> is
- one of the following:</p>
-
- <ul>
- <li>The name of a directory or a pattern such as those shown
- below.</li>
-
- <li>The keyword <code>disabled</code>. This turns off
- <em>all</em> username-to-directory translations except those
- explicitly named with the <code>enabled</code> keyword (see
- below).</li>
-
- <li>The keyword <code>disabled</code> followed by a
- space-delimited list of usernames. Usernames that appear in
- such a list will <em>never</em> have directory translation
- performed, even if they appear in an <code>enabled</code>
- clause.</li>
-
- <li>The keyword <code>enabled</code> followed by a
- space-delimited list of usernames. These usernames will have
- directory translation performed even if a global disable is
- in effect, but not if they also appear in a
- <code>disabled</code> clause.</li>
- </ul>
-
- <p>If neither the <code>enabled</code> nor the
- <code>disabled</code> keywords appear in the
- <code>Userdir</code> directive, the argument is treated as a
- filename pattern, and is used to turn the name into a directory
- specification. A request for
- <code>http://www.foo.com/~bob/one/two.html</code> will be
- translated to:</p>
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
- <p>The following directives will send redirects to the client:</p>
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table>
-
-<note>
- <strong>Be careful when using this directive; for instance,
- <code>"UserDir ./"</code> would map <code>"/~root"</code> to
- <code>"/"</code> - which is probably undesirable. It is strongly
- recommended that your configuration include a "<code>UserDir
- disabled root</code>" declaration. See also the <directive
- module="core">Directory</directive> directive and the <a
- href="../misc/security_tips.html">Security Tips</a> page for
- more information.</strong>
-</note>
-
-<p>Additional examples:</p>
-
-<p>To allow a few users to have <code>UserDir</code> directories, but
-not anyone else, use the following:</p>
-
-<example>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</example>
-
-<p>To allow most users to have <code>UserDir</code> directories, but
-deny this to a few, use the following:</p>
-
-<example>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</example>
-
-<p>It is also possible to specify alternative user directories.
-If you use a command like:</p>
-<example>
-Userdir public_html /usr/web http://www.foo.com/
-</example>
-<p>With a request for http://www.foo.com/~bob/one/two.html, will try to
-find the page at ~bob/public_html/one/two.html first, then
-/usr/web/bob/one/two.html, and finally it will send a redirect
-to http://www.foo.com/bob/one/two.html.</p>
-<p>If you add a redirect, it must be the last alternative in the list.
-Apache cannot determine if the redirect succeeded or not, so if you have
-the redirect earlier in the list, that will always be the alternative
-that is used.</p>
-
-</usage>
-
-<seealso><a href="../howto/public_html.html">public_html
-tutorial</a></seealso>
-
-</directivesynopsis>
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_userdir.xml.ja b/docs/manual/mod/mod_userdir.xml.ja
deleted file mode 100644
index cc4c52877d..0000000000
--- a/docs/manual/mod/mod_userdir.xml.ja
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_userdir.xml.meta">
-
-<name>mod_userdir</name>
-<description>$B%f!<%6@lMQ$N%G%#%l%/%H%j$rDs6!(B
- </description>
-<status>Base</status>
-<sourcefile>mod_userdir.c</sourcefile>
-<identifier>userdir_module</identifier>
-
-<summary>
-<p>$B$3$N%b%8%e!<%k$O!"(B
-<code>http://example.com/~user/</code>
-$B9=J8$r;H$C$F%f!<%6@lMQ%G%#%l%/%H%j$K%"%/%;%9$G$-$k$h$&$K$7$^$9!#(B</p>
-</summary>
-
-<seealso><a href="../urlmapping.html">URL $B$+$i(B
-$B%U%!%$%k%7%9%F%`$X$N%^%C%T%s%0(B</a></seealso>
-<seealso><a href="../howto/public_html.html">public_html
-$B%A%e!<%H%j%"%k(B</a></seealso>
-
-<directivesynopsis>
-
-<name>UserDir</name>
-<description>$B%f!<%6@lMQ%G%#%l%/%H%j$N0LCV(B</description>
-<syntax>UserDir <em>directory-filename</em></syntax>
-<default>UserDir public_html</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-
- <p><directive>UserDir</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%f!<%6$N%I%-%e%a%s%H$X$N%j%/%(%9%H$r<u$1$?;~$K;H$&(B
- $B%f!<%6$N%[!<%`%G%#%l%/%H%jCf$N!"<B:]$N%G%#%l%/%H%j$r(B
- $B@_Dj$7$^$9!#(B
- <em>directory-filename</em> $B$K$O<!$N$I$l$+$r;XDj$7$^$9(B:</p>
-
- <ul>
- <li>$B%G%#%l%/%H%jL>$+2<$K<($9$h$&$J%Q%?!<%s!#(B</li>
-
- <li><code>disabled</code> $B%-!<%o!<%I!#(B
- <code>enabled</code> $B%-!<%o!<%I(B ($B2<5-;2>H(B) $B$GL@<(E*$K(B
- $B;XDj$5$l$?%f!<%60J30$N(B
- <em>$BA4$F$N(B</em>$B%f!<%6L>(B-$B%G%#%l%/%H%jJQ49$r(B
- $B$7$J$$$h$&$K$7$^$9!#(B</li>
-
- <li><code>disabled</code> $B%-!<%o!<%I$H!"%9%Z!<%96h@Z$j$N%f!<%6L>%j%9%H!#(B
- $B$3$N%j%9%HCf$K4^$^$l$k%f!<%6L>$KBP$7$F$O!"$?$H$((B
- <code>enabled</code> $B@a$K$"$C$?$H$7$F$b!"(B
- <em>$B7h$7$F(B</em>$B%G%#%l%/%H%jJQ49$O9T$o$l$^$;$s!#(B</li>
-
- <li><code>enebled</code> $B%-!<%o!<%I$H%9%Z!<%96h@Z$j$N%f!<%6L>%j%9%H!#(B
- $BA4BN$G$OJQ49$,L58z$K$J$C$F$$$?$H$$$?$H$7$F$b!"(B
- $B$3$l$i$N%f!<%6L>$K$O%G%#%l%/%H%jJQ49$,9T$o$l$^$9!#(B
- $B$?$@$7!"(B<code>disabled</code> $B@a$K$b$"$l$PJQ49$O$5$l$^$;$s!#(B
- </li>
- </ul>
-
- <p>$B$b$7(B <code>enabled</code> $B$b(B <code>disabled</code>
- $B%-!<%o!<%I$b(B <code>UserDir</code> $B$K8=$o$l$F$$$J$1$l$P!"(B
- $B0z?t$O%U%!%$%kL>%Q%?!<%s$H$7$F07$o$l!"(B
- $BL>A0$+$i%G%#%l%/%H%j$X$NJQ49$N;XDj$r9T$J$&;~$K;H$o$l$^$9!#(B
- <code>http://www.foo.com/~bob/one/two.html</code>
- $B$X$N%j%/%(%9%H$O<!$N$h$&$KJQ49$5$l$^$9(B:</p>
-
-<table>
-<tr><th>UserDir $B%G%#%l%/%F%#%V(B</th>
-<th>$BJQ498e$N%Q%9(B</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
- <p>$B<!$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$KBP$7$F%j%@%$%l%/%H$r(B
- $BAw?.$7$^$9(B:</p>
-
-<table>
-<tr><th>UserDir $B%G%#%l%/%F%#%V(B</th>
-<th>$BJQ498e$N%Q%9(B</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table>
-
-<note>
- <strong>$B$3$N%G%#%l%/%F%#%V$r;H$&$H$-$OCm0U$7$F$/$@$5$$(B;
- "<code>UserDir ./</code>" $B$O(B
- "<code>/~root</code>" $B$+$i(B "<code>/</code>" $B$X%^%C%W$7$^$9$,!"(B
- $B$3$l$OK>$^$7$$F0:n$G$O$J$$$G$7$g$&!#(B
- "<code>UserDir disabled root</code>" $B@k8@$r(B
- $B@_Dj$NCf$K4^$a$F$*$/$3$H$r6/$/$*A&$a$7$^$9!#(B
- $BDI2C>pJs$K(B <directive module="core">Directory</directive>
- $B%G%#%l%/%F%#%V$d(B
- <a href="../misc/security_tips.html">$B%;%-%e%j%F%#(B
- Tips</a> $B$N%Z!<%8$b$4Mw2<$5$$!#(B</strong>
-</note>
-
-<p>$BDI2C$NNc(B:</p>
-
-<p>$B>/?t$N%f!<%6$N$_$,(B <code>UserDir</code>
-$B%G%#%l%/%H%j$rMxMQ$7!"$=$l0J30$K$OMxMQ$5$;$?$/$J$$>l9g$O(B
-$B<!$r;H$$$^$7$g$&(B:</p>
-
-<example>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</example>
-
-<p>$BBgItJ,$N%f!<%6$O(B <code>UserDir</code> $B%G%#%l%/%H%j$rMxMQ$9$k$1$l$I!"(B
-$B>/?t$N?M$OIT5v2D$K$7$?$$>l9g$O!"<!$r;H$$$^$7$g$&(B:</p>
-
-<example>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</example>
-
-<p>$BB>$N%f!<%6%G%#%l%/%H%j$r;XDj$9$k$3$H$b$G$-$^$9!#(B
-$B<!$N$h$&$J%3%^%s%I$r;H$&$H(B:</p>
-
-<example>
-Userdir public_html /usr/web http://www.foo.com/
-</example>
-
-<p>http://www.foo.com/~bob/one/two.html $B$X$N%j%/%(%9%H$O$^$:(B
-~bob/public_html/one/two.html $B$N%Z!<%8$rD4$Y!"$=$N<!$K(B
-/usr/web/bob/one/two.html $B$rD4$Y!":G8e$K(B http://www.foo.com/bob/one/two.html
-$B$X$N%j%@%$%l%/%H$rAw$j$^$9!#(B</p>
-
-<p>$B%j%@%$%l%/%H$r2C$($k>l9g$O!"%j%9%H$N:G8e$NA*Br;h$G$J$1$l$P$J$j$^$;$s!#(B
-Apache $B$O%j%@%$%l%/%H$,@.8y$9$k$+$I$&$+$r7h$a$k$3$H$O$G$-$^$;$s$N$G!"(B
-$B%j%9%H$NA0$NJ}$K%j%@%$%l%/%H$r=q$/$H!"$=$l$,I,$:;HMQ$5$l$kA*Br;h$K(B
-$B$J$C$F$7$^$$$^$9!#(B</p>
-
-</usage>
-
-<seealso><a href="../howto/public_html.html">public_html
-$B%A%e!<%H%j%"%k(B</a></seealso>
-
-</directivesynopsis>
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_userdir.xml.ko b/docs/manual/mod/mod_userdir.xml.ko
deleted file mode 100644
index 0fb0d26e9e..0000000000
--- a/docs/manual/mod/mod_userdir.xml.ko
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_userdir.xml.meta">
-
-<name>mod_userdir</name>
-<description>»ç¿ëÀÚº° µð·ºÅ丮</description>
-<status>Base</status>
-<sourcefile>mod_userdir.c</sourcefile>
-<identifier>userdir_module</identifier>
-
-<summary>
-<p>ÀÌ ¸ðµâÀ» »ç¿ëÇϸé <code>http://example.com/~user/</code> ½ÄÀ¸·Î
-»ç¿ëÀÚº° µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<seealso><a href="../urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></seealso>
-<seealso><a href="../howto/public_html.html">public_html
-ÅõÅ丮¾ó</a></seealso>
-
-<directivesynopsis>
-
-<name>UserDir</name>
-<description>»ç¿ëÀÚº° µð·ºÅ丮 À§Ä¡</description>
-<syntax>UserDir <em>directory-filename</em></syntax>
-<default>UserDir public_html</default>
-<contextlist><context>server config</context> <context>virtual
-host</context></contextlist>
-
-<usage>
-
- <p><directive>UserDir</directive> Áö½Ã¾î´Â »ç¿ëÀÚÀÇ ¹®¼­¿¡ ´ëÇÑ
-¿äûÀ» ¹ÞÀ»¶§ »ç¿ëÀÚ È¨µð·ºÅ丮 ¾È¿¡¼­ »ç¿ëÇÒ ½ÇÁ¦ µð·ºÅ丮¸¦
-ÁöÁ¤ÇÑ´Ù. <em>Directory-filename</em>Àº ´ÙÀ½ Áß ÇϳªÀÌ´Ù:</p>
-
- <ul>
- <li>¾Æ·¡¿Í °°Àº µð·ºÅ丮¸í ȤÀº ÆÐÅÏ.</li>
-
- <li><code>disabled</code> Å°¿öµå.
-<code>enabled</code> Å°¿öµå·Î (¾Æ·¡ Âü°í) Á÷Á¢ À̸§À» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é
-<em>¸ðµç</em> »ç¿ëÀÚ¸í-µð·ºÅ丮 º¯È¯À» ÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li><code>disabled</code> Å°¿öµå µÚ¿¡ °ø¹éÀ¸·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í ¸ñ·Ï.
-»ç¿ëÀÚ¸íÀÌ <code>enabled</code> ±¸¹®¿¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ, ÀÌ ¸ñ·Ï¿¡
-ÀÖ´Â »ç¿ëÀÚ¸íÀº µð·ºÅ丮 º¯È¯À» ÇÏÁö <em>¾Ê´Â´Ù</em>.</li>
-
- <li><code>enabled</code> Å°¿öµå µÚ¿¡ °ø¹éÀ¸·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í ¸ñ·Ï.
-Àüü disableÀ» »ç¿ëÇÏ°í »ç¿ëÀÚ¸íÀÌ <code>disabled</code> ±¸¹®¿¡
-¾ø´õ¶óµµ, »ç¿ëÀÚ¸íÀ» µð·ºÅ丮 º¯È¯ÇÑ´Ù.</li>
- </ul>
-
- <p><code>Userdir</code> Áö½Ã¾î¿¡ <code>enabled</code>³ª
-<code>disabled</code> Å°¿öµå¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é, ¾Æ±Ô¸ÕÆ®¸¦
-ÆÄÀϸí ÆÐÅÏÀ¸·Î ó¸®ÇÏ¿© µð·ºÅ丮·Î º¯È¯ÇÑ´Ù.
-<code>http://www.foo.com/~bob/one/two.html</code>¿¡ ´ëÇÑ ¿äûÀº
-´ÙÀ½°ú °°ÀÌ º¯È¯µÈ´Ù:</p>
-
-<table>
-<tr><th>»ç¿ëÇÑ UserDir Áö½Ã¾î</th>
-<th>º¯È¯ÇÑ °æ·Î</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
- <p>´ÙÀ½ Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù:</p>
-
-<table>
-<tr><th>»ç¿ëÇÑ UserDir Áö½Ã¾î</th>
-<th>º¯È¯ÇÑ °æ·Î</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table>
-
-<note>
- <strong>ÀÌ Áö½Ã¾î¸¦ »ç¿ëÇÒ¶§ ÁÖÀÇÇ϶ó; ¿¹¸¦ µé¾î,
-<code>"UserDir ./"</code>´Â <code>"/~root"</code>¸¦ ¾Æ¸¶µµ ¹Ù¶÷Á÷ÇÏÁö ¾Ê°Ô
-<code>"/"</code>·Î º¯È¯ÇÑ´Ù. ¼³Á¤¿¡ "<code>UserDir
- disabled root</code>"¸¦ Æ÷ÇÔÇÏ±æ °­·ÂÈ÷ ±ÇÇÑ´Ù. ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë·Á¸é
-<directive
- module="core">Directory</directive> Áö½Ã¾î¿Í <a
- href="../misc/security_tips.html">º¸¾È ÆÁ</a>µµ Âü°íÇ϶ó.</strong>
-</note>
-
-<p>Ãß°¡ ¿¹Á¦:</p>
-
-<p>¸î¸î »ç¿ëÀÚ¿¡°Ô¸¸ <code>UserDir</code> µð·ºÅ丮¸¦ Çã¿ëÇÑ´Ù¸é,
-´ÙÀ½°ú °°´Ù:</p>
-
-<example>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</example>
-
-<p>´ëºÎºÐÀÇ »ç¿ëÀÚ¿¡°Ô <code>UserDir</code> µð·ºÅ丮¸¦ Çã¿ëÇÏ°í
-ÀϺθ¸ °ÅºÎÇÑ´Ù¸é, ´ÙÀ½°ú °°´Ù:</p>
-
-<example>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</example>
-
-<p>´Ù¸¥ »ç¿ëÀÚ µð·ºÅ丮¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
-´ÙÀ½°ú °°Àº ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù¸é:</p>
-<example>
-Userdir public_html /usr/web http://www.foo.com/
-</example>
-<p>http://www.foo.com/~bob/one/two.html ¿äûÀ» Çϸé,
-¸ÕÀú ~bob/public_html/one/two.html ÆäÀÌÁö¸¦ ã°í,
-/usr/web/bob/one/two.htmlÀ» ãÀº ÈÄ, ¸¶Áö¸·À¸·Î
-http://www.foo.com/bob/one/two.htmlÀ¸·Î ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù.</p>
-<p>¸®´ÙÀÌ·º¼ÇÀ» »ç¿ëÇÑ´Ù¸é ¸ñ·ÏÀÇ ¸¶Áö¸·¿¡ µÎ¾î¾ß ÇÑ´Ù.
-¾ÆÆÄÄ¡´Â ¸®´ÙÀÌ·º¼ÇÀÌ ¼º°øÇß´ÂÁö ¾Ë ¼ö ¾ø±â¶§¹®¿¡, ¸®´ÙÀÌ·º¼ÇÀ»
-¸ñ·Ï ¾Õ¿¡ µÎ¸é Ç×»ó ¸®´ÙÀÌ·º¼ÇÀ» »ç¿ëÇÏ°Ô µÈ´Ù.</p>
-
-</usage>
-
-<seealso><a href="../howto/public_html.html">public_html
-ÅõÅ丮¾ó</a></seealso>
-
-</directivesynopsis>
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_userdir.xml.meta b/docs/manual/mod/mod_userdir.xml.meta
deleted file mode 100644
index 2597900e60..0000000000
--- a/docs/manual/mod/mod_userdir.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_userdir</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_usertrack.html b/docs/manual/mod/mod_usertrack.html
deleted file mode 100644
index 0d24c8e0df..0000000000
--- a/docs/manual/mod/mod_usertrack.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_usertrack.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_usertrack.html.en b/docs/manual/mod/mod_usertrack.html.en
deleted file mode 100644
index 179adeb141..0000000000
--- a/docs/manual/mod/mod_usertrack.html.en
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_usertrack - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_usertrack</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_usertrack.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>
-<em>Clickstream</em> logging of user activity on a site
-</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>usertrack_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_usertrack.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>Previous releases of Apache have included a module which
- generates a 'clickstream' log of user activity on a site using
- cookies. This was called the "cookies" module, mod_cookies. In
- Apache 1.2 and later this module has been renamed the "user
- tracking" module, mod_usertrack. This module has been
- simplified and new directives added.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#cookiedomain">CookieDomain</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cookieexpires">CookieExpires</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cookiename">CookieName</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cookiestyle">CookieStyle</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cookietracking">CookieTracking</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#logging">Logging</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cookiedate">2-digit or 4-digit dates for cookies?</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="logging" id="logging">Logging</a></h2>
-
-
- <p>Previously, the cookies module (now the user tracking
- module) did its own logging, using the <code class="directive">CookieLog</code>
- directive. In this release, this module does no logging at all.
- Instead, a configurable log format file should be used to log
- user click-streams. This is possible because the logging module
- now allows multiple log files. The cookie itself is logged by
- using the text <code>%{cookie}n</code> in the log file format. For
- example:</p>
-<div class="example"><p><code>
-CustomLog logs/clickstream "%{cookie}n %r %t"
-</code></p></div>
-
- <p>For backward compatibility the configurable log module
- implements the old <code class="directive"><a href="../mod/mod_log_config.html#cookielog">CookieLog</a></code> directive, but this
- should be upgraded to the above <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> directive. </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cookiedate" id="cookiedate">2-digit or 4-digit dates for cookies?</a></h2>
-
-
- <p>(the following is from message
- &lt;022701bda43d$9d32bbb0$1201a8c0@christian.office.sane.com&gt;
- in the new-httpd archives) </p>
-<pre>
-From: "Christian Allen" &lt;christian@sane.com&gt;
-Subject: Re: Apache Y2K bug in mod_usertrack.c
-Date: Tue, 30 Jun 1998 11:41:56 -0400
-
-Did some work with cookies and dug up some info that might be useful.
-
-True, Netscape claims that the correct format NOW is four digit dates, and
-four digit dates do in fact work... for Netscape 4.x (Communicator), that
-is. However, 3.x and below do NOT accept them. It seems that Netscape
-originally had a 2-digit standard, and then with all of the Y2K hype and
-probably a few complaints, changed to a four digit date for Communicator.
-Fortunately, 4.x also understands the 2-digit format, and so the best way to
-ensure that your expiration date is legible to the client's browser is to
-use 2-digit dates.
-
-However, this does not limit expiration dates to the year 2000; if you use
-an expiration year of "13", for example, it is interpreted as 2013, NOT
-1913! In fact, you can use an expiration year of up to "37", and it will be
-understood as "2037" by both MSIE and Netscape versions 3.x and up (not sure
-about versions previous to those). Not sure why Netscape used that
-particular year as its cut-off point, but my guess is that it was in respect
-to UNIX's 2038 problem. Netscape/MSIE 4.x seem to be able to understand
-2-digit years beyond that, at least until "50" for sure (I think they
-understand up until about "70", but not for sure).
-
-Summary: Mozilla 3.x and up understands two digit dates up until "37"
-(2037). Mozilla 4.x understands up until at least "50" (2050) in 2-digit
-form, but also understands 4-digit years, which can probably reach up until
-9999. Your best bet for sending a long-life cookie is to send it for some
-time late in the year "37".
-</pre>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieDomain" id="CookieDomain">CookieDomain</a> <a name="cookiedomain" id="cookiedomain">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The domain to which the tracking cookie applies</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CookieDomain <em>domain</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_usertrack</td></tr>
-</table>
-
- <p>This directive controls the setting of the domain to which
- the tracking cookie applies. If not present, no domain is
- included in the cookie header field.</p>
-
- <p>The domain string <strong>must</strong> begin with a dot, and
- <strong>must</strong> include at least one embedded dot. That is,
- ".foo.com" is legal, but "foo.bar.com" and ".com" are not.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieExpires" id="CookieExpires">CookieExpires</a> <a name="cookieexpires" id="cookieexpires">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Expiry time for the tracking cookie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CookieExpires <em>expiry-period</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_usertrack</td></tr>
-</table>
- <p>When used, this directive sets an expiry time on the cookie
- generated by the usertrack module. The <em>expiry-period</em>
- can be given either as a number of seconds, or in the format
- such as "2 weeks 3 days 7 hours". Valid denominations are:
- years, months, weeks, days, hours, minutes and seconds. If the expiry
- time is in any format other than one number indicating the
- number of seconds, it must be enclosed by double quotes.</p>
-
- <p>If this directive is not used, cookies last only for the
- current browser session.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieName" id="CookieName">CookieName</a> <a name="cookiename" id="cookiename">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the tracking cookie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CookieName <em>token</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CookieName Apache</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_usertrack</td></tr>
-</table>
- <p>This directive allows you to change the name of the cookie
- this module uses for its tracking purposes. By default the
- cookie is named "<code>Apache</code>".</p>
-
- <p>You must specify a valid cookie name; results are
- unpredictable if you use a name containing unusual characters.
- Valid characters include A-Z, a-z, 0-9, "_", and "-".</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieStyle" id="CookieStyle">CookieStyle</a> <a name="cookiestyle" id="cookiestyle">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Format of the cookie header field</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CookieStyle Netscape</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_usertrack</td></tr>
-</table>
- <p>This directive controls the format of the cookie header
- field. The three formats allowed are:</p>
-
- <ul>
- <li><strong>Netscape</strong>, which is the original but now deprecated
- syntax. This is the default, and the syntax Apache has
- historically used.</li>
-
- <li><strong>Cookie</strong> or <strong>RFC2109</strong>, which is the syntax that
- superseded the Netscape syntax.</li>
-
- <li><strong>Cookie2</strong> or <strong>RFC2965</strong>, which is the most
- current cookie syntax.</li>
- </ul>
-
- <p>Not all clients can understand all of these formats. but you
- should use the newest one that is generally acceptable to your
- users' browsers.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CookieTracking" id="CookieTracking">CookieTracking</a> <a name="cookietracking" id="cookietracking">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables tracking cookie</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CookieTracking on|off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>CookieTracking off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_usertrack</td></tr>
-</table>
- <p>When the user track module is compiled in, and
- "CookieTracking on" is set, Apache will start sending a
- user-tracking cookie for all new requests. This directive can
- be used to turn this behavior on or off on a per-server or
- per-directory basis. By default, compiling mod_usertrack will
- not activate cookies. </p>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_usertrack.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_usertrack.xml b/docs/manual/mod/mod_usertrack.xml
deleted file mode 100755
index dc0825eb42..0000000000
--- a/docs/manual/mod/mod_usertrack.xml
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_usertrack.xml.meta">
-<name>mod_usertrack</name>
-<description>
-<em>Clickstream</em> logging of user activity on a site
-</description>
-<status>Extension</status>
-<sourcefile>mod_usertrack.c</sourcefile>
-<identifier>usertrack_module</identifier>
-
-<summary>
- <p>Previous releases of Apache have included a module which
- generates a 'clickstream' log of user activity on a site using
- cookies. This was called the "cookies" module, mod_cookies. In
- Apache 1.2 and later this module has been renamed the "user
- tracking" module, mod_usertrack. This module has been
- simplified and new directives added.</p>
-</summary>
-
-
-<section id="logging">
-<title>Logging</title>
-
- <p>Previously, the cookies module (now the user tracking
- module) did its own logging, using the <directive>CookieLog</directive>
- directive. In this release, this module does no logging at all.
- Instead, a configurable log format file should be used to log
- user click-streams. This is possible because the logging module
- now allows multiple log files. The cookie itself is logged by
- using the text <code>%{cookie}n</code> in the log file format. For
- example:</p>
-<example>
-CustomLog logs/clickstream "%{cookie}n %r %t"
-</example>
-
- <p>For backward compatibility the configurable log module
- implements the old <directive
- module="mod_log_config">CookieLog</directive> directive, but this
- should be upgraded to the above <directive
- module="mod_log_config">CustomLog</directive> directive. </p>
-</section>
-
-<section id="cookiedate">
-<title>2-digit or 4-digit dates for cookies?</title>
-
- <p>(the following is from message
- &lt;022701bda43d$9d32bbb0$1201a8c0@christian.office.sane.com&gt;
- in the new-httpd archives) </p>
-<pre>
-From: "Christian Allen" &lt;christian@sane.com&gt;
-Subject: Re: Apache Y2K bug in mod_usertrack.c
-Date: Tue, 30 Jun 1998 11:41:56 -0400
-
-Did some work with cookies and dug up some info that might be useful.
-
-True, Netscape claims that the correct format NOW is four digit dates, and
-four digit dates do in fact work... for Netscape 4.x (Communicator), that
-is. However, 3.x and below do NOT accept them. It seems that Netscape
-originally had a 2-digit standard, and then with all of the Y2K hype and
-probably a few complaints, changed to a four digit date for Communicator.
-Fortunately, 4.x also understands the 2-digit format, and so the best way to
-ensure that your expiration date is legible to the client's browser is to
-use 2-digit dates.
-
-However, this does not limit expiration dates to the year 2000; if you use
-an expiration year of "13", for example, it is interpreted as 2013, NOT
-1913! In fact, you can use an expiration year of up to "37", and it will be
-understood as "2037" by both MSIE and Netscape versions 3.x and up (not sure
-about versions previous to those). Not sure why Netscape used that
-particular year as its cut-off point, but my guess is that it was in respect
-to UNIX's 2038 problem. Netscape/MSIE 4.x seem to be able to understand
-2-digit years beyond that, at least until "50" for sure (I think they
-understand up until about "70", but not for sure).
-
-Summary: Mozilla 3.x and up understands two digit dates up until "37"
-(2037). Mozilla 4.x understands up until at least "50" (2050) in 2-digit
-form, but also understands 4-digit years, which can probably reach up until
-9999. Your best bet for sending a long-life cookie is to send it for some
-time late in the year "37".
-</pre>
-
-</section>
-
-<directivesynopsis>
-<name>CookieDomain</name>
-<description>The domain to which the tracking cookie applies</description>
-<syntax>CookieDomain <em>domain</em></syntax>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-
- <p>This directive controls the setting of the domain to which
- the tracking cookie applies. If not present, no domain is
- included in the cookie header field.</p>
-
- <p>The domain string <strong>must</strong> begin with a dot, and
- <strong>must</strong> include at least one embedded dot. That is,
- ".foo.com" is legal, but "foo.bar.com" and ".com" are not.</p>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>CookieExpires</name>
-<description>Expiry time for the tracking cookie</description>
-<syntax>CookieExpires <em>expiry-period</em></syntax>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>When used, this directive sets an expiry time on the cookie
- generated by the usertrack module. The <em>expiry-period</em>
- can be given either as a number of seconds, or in the format
- such as "2 weeks 3 days 7 hours". Valid denominations are:
- years, months, weeks, days, hours, minutes and seconds. If the expiry
- time is in any format other than one number indicating the
- number of seconds, it must be enclosed by double quotes.</p>
-
- <p>If this directive is not used, cookies last only for the
- current browser session.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CookieName</name>
-<description>Name of the tracking cookie</description>
-<syntax>CookieName <em>token</em></syntax>
-<default>CookieName Apache</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive allows you to change the name of the cookie
- this module uses for its tracking purposes. By default the
- cookie is named "<code>Apache</code>".</p>
-
- <p>You must specify a valid cookie name; results are
- unpredictable if you use a name containing unusual characters.
- Valid characters include A-Z, a-z, 0-9, "_", and "-".</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CookieStyle</name>
-<description>Format of the cookie header field</description>
-<syntax>CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></syntax>
-<default>CookieStyle Netscape</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>This directive controls the format of the cookie header
- field. The three formats allowed are:</p>
-
- <ul>
- <li><strong>Netscape</strong>, which is the original but now deprecated
- syntax. This is the default, and the syntax Apache has
- historically used.</li>
-
- <li><strong>Cookie</strong> or <strong>RFC2109</strong>, which is the syntax that
- superseded the Netscape syntax.</li>
-
- <li><strong>Cookie2</strong> or <strong>RFC2965</strong>, which is the most
- current cookie syntax.</li>
- </ul>
-
- <p>Not all clients can understand all of these formats. but you
- should use the newest one that is generally acceptable to your
- users' browsers.</p>
-</usage>
-</directivesynopsis>
-
-
-
-<directivesynopsis>
-<name>CookieTracking</name>
-<description>Enables tracking cookie</description>
-<syntax>CookieTracking on|off</syntax>
-<default>CookieTracking off</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
- <p>When the user track module is compiled in, and
- "CookieTracking on" is set, Apache will start sending a
- user-tracking cookie for all new requests. This directive can
- be used to turn this behavior on or off on a per-server or
- per-directory basis. By default, compiling mod_usertrack will
- not activate cookies. </p>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_usertrack.xml.meta b/docs/manual/mod/mod_usertrack.xml.meta
deleted file mode 100644
index 3a21b85d76..0000000000
--- a/docs/manual/mod/mod_usertrack.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_usertrack</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_version.html b/docs/manual/mod/mod_version.html
deleted file mode 100644
index eeaea8be13..0000000000
--- a/docs/manual/mod/mod_version.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mod_version.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mod_version.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/mod_version.html.en b/docs/manual/mod/mod_version.html.en
deleted file mode 100644
index cc5d724b94..0000000000
--- a/docs/manual/mod/mod_version.html.en
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_version - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_version</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_version.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Version dependent configuration</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>version_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_version.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.1 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module is designed for the use in test suites and large
- networks which have to deal with different httpd versions and
- different configurations. It provides a new container -- <code class="directive"><a href="#ifversion">&lt;IfVersion&gt;</a></code>, which
- allows a flexible version checking including numeric comparisons and
- regular expressions.</p>
-
- <div class="example"><h3>Examples</h3><p><code>
- &lt;IfVersion 2.1.0&gt;<br />
- <span class="indent">
- # current httpd version is exactly 2.1.0<br />
- </span>
- &lt;/IfVersion&gt;<br />
- <br />
- &lt;IfVersion &gt;= 2.2&gt;<br />
- <span class="indent">
- # use really new features :-)<br />
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>See below for further possibilities.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#ifversion">&lt;IfVersion&gt;</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfVersion" id="IfVersion">&lt;IfVersion&gt;</a> <a name="ifversion" id="ifversion">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>contains version dependent configuration</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_version</td></tr>
-</table>
- <p>The <code class="directive">&lt;IfVersion&gt;</code> section encloses
- configuration directives which are executed only if the httpd version
- matches the desired criteria. For normal (numeric) comparisons the
- <var>version</var> argument has the format
- <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>, e.g.
- <code>2.1.0</code> or <code>2.2</code>. <var>minor</var> and
- <var>patch</var> are optional. If these numbers are omitted, they are
- assumed to be zero. The following numerical <var>operator</var>s are
- possible:</p>
-
- <table class="bordered"><tr class="header"><th><var>operator</var></th><th>description</th></tr>
-<tr><td><code>=</code> or <code>==</code></td>
- <td>httpd version is equal</td></tr>
-<tr class="odd"><td><code>&gt;</code></td>
- <td>httpd version is greater than</td></tr>
-<tr><td><code>&gt;=</code></td>
- <td>httpd version is greater or equal</td></tr>
-<tr class="odd"><td><code>&lt;</code></td>
- <td>httpd version is less than</td></tr>
-<tr><td><code>&lt;=</code></td>
- <td>httpd version is less or equal</td></tr>
-</table>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;IfVersion &gt;= 2.1&gt;<br />
- <span class="indent">
- # this happens only in versions greater or<br />
- # equal 2.1.0.<br />
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>Besides the numerical comparison it is possible to match a regular
- expression against the httpd version. There are two ways to write it:</p>
-
- <table class="bordered"><tr class="header"><th><var>operator</var></th><th>description</th></tr>
-<tr><td><code>=</code> or <code>==</code></td>
- <td><var>version</var> has the form
- <code>/<var>regex</var>/</code></td></tr>
-<tr class="odd"><td><code>~</code></td>
- <td><var>version</var> has the form
- <code><var>regex</var></code></td></tr>
-</table>
-
- <div class="example"><h3>Example</h3><p><code>
- &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
- <span class="indent">
- # e.g. workaround for buggy versions
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>In order to reverse the meaning, all operators can be preceded by an
- exclamation mark (<code>!</code>):</p>
-
- <div class="example"><p><code>
- &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
- <span class="indent">
- # not for those versions<br />
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>If the <var>operator</var> is omitted, it is assumed to be
- <code>=</code>.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_version.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_version.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_version.html.ko.euc-kr b/docs/manual/mod/mod_version.html.ko.euc-kr
deleted file mode 100644
index 80cae6cc03..0000000000
--- a/docs/manual/mod/mod_version.html.ko.euc-kr
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_version - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="page-content">
-<div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_version</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_version.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¹öÀüº° ¼³Á¤</td></tr>
-<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>version_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¼Ò½ºÆÄÀÏ:</a></th><td>mod_version.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Áö¿ø:</a></th><td>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</td></tr></table>
-<h3>¿ä¾à</h3>
-
- <p>¿©·¯ ´Ù¸¥ À¥¼­¹ö ¹öÀü°ú ±¸¼ºÀ» ´Ù·ç¾î¾ß ÇÒ Å« ³×Æ®¿÷°ú
- Å×½ºÆ®¿ëÀ¸·Î »ç¿ëÇϱâÀ§ÇØ ÀÌ ¸ðµâÀ» ¸¸µé¾ú´Ù. ÀÌ ¸ðµâÀº
- ¼ýÀÚ ºñ±³³ª Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÀÚÀ¯·Î¿î ¹öÀü °Ë»ç°¡ °¡´ÉÇÑ
- <code class="directive"><a href="#ifversion">&lt;IfVersion&gt;</a></code>À»
- Á¦°øÇÑ´Ù.</p>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;IfVersion 2.1.0&gt;<br />
- <span class="indent">
- # ÇöÀç À¥¼­¹ö ¹öÀüÀº Á¤È®È÷ 2.1.0ÀÌ´Ù<br />
- </span>
- &lt;/IfVersion&gt;<br />
- <br />
- &lt;IfVersion &gt;= 2.2&gt;<br />
- <span class="indent">
- # ÁøÂ¥ »õ·Î¿î ±â´ÉÀ» »ç¿ëÇÑ´Ù :-)<br />
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>´Ù¸¥ »ç¿ë¹ýÀº ¾Æ·¡¸¦ Âü°íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><h3 class="directives">Áö½Ã¾îµé</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#ifversion">&lt;IfVersion&gt;</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="IfVersion" id="IfVersion">&lt;IfVersion&gt;</a> <a name="ifversion" id="ifversion">Áö½Ã¾î</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">¼³¸í:</a></th><td>¹öÀüº° ¼³Á¤À» ¹­´Â´Ù</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹®¹ý:</a></th><td><code>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">»ç¿ëÀå¼Ò:</a></th><td>ÁÖ¼­¹ö¼³Á¤, °¡»óÈ£½ºÆ®, directory, .htaccess</td></tr>
-<tr><th><a href="directive-dict.html#Override">Override ¿É¼Ç:</a></th><td>All</td></tr>
-<tr><th><a href="directive-dict.html#Status">»óÅÂ:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">¸ðµâ:</a></th><td>mod_version</td></tr>
-</table>
- <p><code class="directive">&lt;IfVersion&gt;</code> ¼½¼ÇÀº
- À¥¼­¹ö ¹öÀüÀÌ ¿øÇÏ´Â Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ ½ÇÇàÇÒ ¼³Á¤ Áö½Ã¾î¸¦
- ¹­´Â´Ù. ÀϹÝÀûÀÎ (¼ýÀÚ) ºñ±³ÀÇ °æ¿ì <var>version</var> ¾Æ±Ô¸ÕÆ®´Â
- <code>2.1.0</code>À̳ª <code>2.2</code>¿Í °°ÀÌ
- <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>
- Çü½ÄÀÌ´Ù. <var>minor</var>¿Í <var>patch</var>´Â ¾ø¾îµµ µÈ´Ù.
- ÀÌµé ¼ýÀÚ°¡ ¾ø´Ù¸é 0À̶ó°í °¡Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¼ýÀÚ
- <var>operator</var>°¡ °¡´ÉÇÏ´Ù.</p>
-
- <table class="bordered"><tr class="header"><th><var>operator</var></th><th>¼³¸í</th></tr>
-<tr><td><code>=</code> ȤÀº <code>==</code></td>
- <td>µ¿ÀÏÇÑ À¥¼­¹ö ¹öÀü</td></tr>
-<tr class="odd"><td><code>&gt;</code></td>
- <td>º¸´Ù Å« À¥¼­¹ö ¹öÀü</td></tr>
-<tr><td><code>&gt;=</code></td>
- <td>Å©°Å³ª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
-<tr class="odd"><td><code>&lt;</code></td>
- <td>º¸´Ù ÀÛÀº À¥¼­¹ö ¹öÀü</td></tr>
-<tr><td><code>&lt;=</code></td>
- <td>À۰ųª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
-</table>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;IfVersion &gt;= 2.1&gt;<br />
- <span class="indent">
- # ¹öÀüÀÌ 2.1.0 º¸´Ù Å©°Å³ª °°À»¶§¸¸<br />
- # ½ÇÇàÇÑ´Ù.<br />
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>¼ýÀÚ ºñ±³¿Ü¿¡µµ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© À¥¼­¹ö ¹öÀüÀ» ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. ¿©±â¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.</p>
-
- <table class="bordered"><tr class="header"><th><var>operator</var></th><th>¼³¸í</th></tr>
-<tr><td><code>=</code> ȤÀº <code>==</code></td>
- <td><var>version</var>˼
- <code>/<var>regex</var>/</code> Çü½ÄÀÌ´Ù</td></tr>
-<tr class="odd"><td><code>~</code></td>
- <td><var>version</var>˼
- <code><var>regex</var></code> Çü½ÄÀÌ´Ù</td></tr>
-</table>
-
- <div class="example"><h3>¿¹Á¦</h3><p><code>
- &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
- <span class="indent">
- # ¿¹¸¦ µé¾î, ¿©±â¿¡ ¹ö±×°¡ Àִ ƯÁ¤ ¹öÀü¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p>¿¬»êÀÚ ¾Õ¿¡ ´À³¦Ç¥(<code>!</code>)¸¦ ¾²¸é Àǹ̸¦ ¹Ý´ë·Î
- Çؼ®ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
- <span class="indent">
- # ÀÌ ¹öÀüÀÌ ¾Æ´Ï¸é<br />
- </span>
- &lt;/IfVersion&gt;
- </code></p></div>
-
- <p><var>operator</var>¸¦ »ý·«Çϸé <code>=</code>À̶ó°í
- »ý°¢ÇÑ´Ù.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_version.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/mod/mod_version.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_version.xml b/docs/manual/mod/mod_version.xml
deleted file mode 100755
index 5be9527258..0000000000
--- a/docs/manual/mod/mod_version.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.3 $ -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_version.xml.meta">
-<name>mod_version</name>
-<description>Version dependent configuration</description>
-<status>Extension</status>
-<sourcefile>mod_version.c</sourcefile>
-<identifier>version_module</identifier>
-<compatibility>Available in version 2.1 and later</compatibility>
-
-<summary>
- <p>This module is designed for the use in test suites and large
- networks which have to deal with different httpd versions and
- different configurations. It provides a new container -- <directive
- type="section" module="mod_version">IfVersion</directive>, which
- allows a flexible version checking including numeric comparisons and
- regular expressions.</p>
-
- <example><title>Examples</title>
- &lt;IfVersion 2.1.0&gt;<br />
- <indent>
- # current httpd version is exactly 2.1.0<br />
- </indent>
- &lt;/IfVersion&gt;<br />
- <br />
- &lt;IfVersion >= 2.2&gt;<br />
- <indent>
- # use really new features :-)<br />
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>See below for further possibilities.</p>
-</summary>
-
-<directivesynopsis type="section">
-<name>IfVersion</name>
-<description>contains version dependent configuration</description>
-<syntax>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p>The <directive type="section">IfVersion</directive> section encloses
- configuration directives which are executed only if the httpd version
- matches the desired criteria. For normal (numeric) comparisons the
- <var>version</var> argument has the format
- <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>, e.g.
- <code>2.1.0</code> or <code>2.2</code>. <var>minor</var> and
- <var>patch</var> are optional. If these numbers are omitted, they are
- assumed to be zero. The following numerical <var>operator</var>s are
- possible:</p>
-
- <table style="zebra" border="1">
- <tr><th><var>operator</var></th><th>description</th></tr>
- <tr><td><code>=</code> or <code>==</code></td>
- <td>httpd version is equal</td></tr>
- <tr><td><code>&gt;</code></td>
- <td>httpd version is greater than</td></tr>
- <tr><td><code>&gt;=</code></td>
- <td>httpd version is greater or equal</td></tr>
- <tr><td><code>&lt;</code></td>
- <td>httpd version is less than</td></tr>
- <tr><td><code>&lt;=</code></td>
- <td>httpd version is less or equal</td></tr>
- </table>
-
- <example><title>Example</title>
- &lt;IfVersion >= 2.1&gt;<br />
- <indent>
- # this happens only in versions greater or<br />
- # equal 2.1.0.<br />
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>Besides the numerical comparison it is possible to match a regular
- expression against the httpd version. There are two ways to write it:</p>
-
- <table style="zebra" border="1">
- <tr><th><var>operator</var></th><th>description</th></tr>
- <tr><td><code>=</code> or <code>==</code></td>
- <td><var>version</var> has the form
- <code>/<var>regex</var>/</code></td></tr>
- <tr><td><code>~</code></td>
- <td><var>version</var> has the form
- <code><var>regex</var></code></td></tr>
- </table>
-
- <example><title>Example</title>
- &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
- <indent>
- # e.g. workaround for buggy versions
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>In order to reverse the meaning, all operators can be preceded by an
- exclamation mark (<code>!</code>):</p>
-
- <example>
- &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
- <indent>
- # not for those versions<br />
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>If the <var>operator</var> is omitted, it is assumed to be
- <code>=</code>.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_version.xml.ko b/docs/manual/mod/mod_version.xml.ko
deleted file mode 100644
index 5c63c1bc81..0000000000
--- a/docs/manual/mod/mod_version.xml.ko
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.3 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_version.xml.meta">
-<name>mod_version</name>
-<description>¹öÀüº° ¼³Á¤</description>
-<status>Extension</status>
-<sourcefile>mod_version.c</sourcefile>
-<identifier>version_module</identifier>
-<compatibility>¾ÆÆÄÄ¡ 2.1 ÀÌÈĺÎÅÍ</compatibility>
-
-<summary>
- <p>¿©·¯ ´Ù¸¥ À¥¼­¹ö ¹öÀü°ú ±¸¼ºÀ» ´Ù·ç¾î¾ß ÇÒ Å« ³×Æ®¿÷°ú
- Å×½ºÆ®¿ëÀ¸·Î »ç¿ëÇϱâÀ§ÇØ ÀÌ ¸ðµâÀ» ¸¸µé¾ú´Ù. ÀÌ ¸ðµâÀº
- ¼ýÀÚ ºñ±³³ª Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÀÚÀ¯·Î¿î ¹öÀü °Ë»ç°¡ °¡´ÉÇÑ
- <directive type="section" module="mod_version">IfVersion</directive>À»
- Á¦°øÇÑ´Ù.</p>
-
- <example><title>¿¹Á¦</title>
- &lt;IfVersion 2.1.0&gt;<br />
- <indent>
- # ÇöÀç À¥¼­¹ö ¹öÀüÀº Á¤È®È÷ 2.1.0ÀÌ´Ù<br />
- </indent>
- &lt;/IfVersion&gt;<br />
- <br />
- &lt;IfVersion >= 2.2&gt;<br />
- <indent>
- # ÁøÂ¥ »õ·Î¿î ±â´ÉÀ» »ç¿ëÇÑ´Ù :-)<br />
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>´Ù¸¥ »ç¿ë¹ýÀº ¾Æ·¡¸¦ Âü°íÇÑ´Ù.</p>
-</summary>
-
-<directivesynopsis type="section">
-<name>IfVersion</name>
-<description>¹öÀüº° ¼³Á¤À» ¹­´Â´Ù</description>
-<syntax>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>All</override>
-
-<usage>
- <p><directive type="section">IfVersion</directive> ¼½¼ÇÀº
- À¥¼­¹ö ¹öÀüÀÌ ¿øÇÏ´Â Á¶°ÇÀ» ¸¸Á·ÇÒ¶§¸¸ ½ÇÇàÇÒ ¼³Á¤ Áö½Ã¾î¸¦
- ¹­´Â´Ù. ÀϹÝÀûÀÎ (¼ýÀÚ) ºñ±³ÀÇ °æ¿ì <var>version</var> ¾Æ±Ô¸ÕÆ®´Â
- <code>2.1.0</code>À̳ª <code>2.2</code>¿Í °°ÀÌ
- <code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code>
- Çü½ÄÀÌ´Ù. <var>minor</var>¿Í <var>patch</var>´Â ¾ø¾îµµ µÈ´Ù.
- ÀÌµé ¼ýÀÚ°¡ ¾ø´Ù¸é 0À̶ó°í °¡Á¤ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¼ýÀÚ
- <var>operator</var>°¡ °¡´ÉÇÏ´Ù.</p>
-
- <table style="zebra" border="1">
- <tr><th><var>operator</var></th><th>¼³¸í</th></tr>
- <tr><td><code>=</code> ȤÀº <code>==</code></td>
- <td>µ¿ÀÏÇÑ À¥¼­¹ö ¹öÀü</td></tr>
- <tr><td><code>&gt;</code></td>
- <td>º¸´Ù Å« À¥¼­¹ö ¹öÀü</td></tr>
- <tr><td><code>&gt;=</code></td>
- <td>Å©°Å³ª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
- <tr><td><code>&lt;</code></td>
- <td>º¸´Ù ÀÛÀº À¥¼­¹ö ¹öÀü</td></tr>
- <tr><td><code>&lt;=</code></td>
- <td>À۰ųª °°Àº À¥¼­¹ö ¹öÀü</td></tr>
- </table>
-
- <example><title>¿¹Á¦</title>
- &lt;IfVersion >= 2.1&gt;<br />
- <indent>
- # ¹öÀüÀÌ 2.1.0 º¸´Ù Å©°Å³ª °°À»¶§¸¸<br />
- # ½ÇÇàÇÑ´Ù.<br />
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>¼ýÀÚ ºñ±³¿Ü¿¡µµ Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© À¥¼­¹ö ¹öÀüÀ» ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. ¿©±â¿¡´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.</p>
-
- <table style="zebra" border="1">
- <tr><th><var>operator</var></th><th>¼³¸í</th></tr>
- <tr><td><code>=</code> ȤÀº <code>==</code></td>
- <td><var>version</var>˼
- <code>/<var>regex</var>/</code> Çü½ÄÀÌ´Ù</td></tr>
- <tr><td><code>~</code></td>
- <td><var>version</var>˼
- <code><var>regex</var></code> Çü½ÄÀÌ´Ù</td></tr>
- </table>
-
- <example><title>¿¹Á¦</title>
- &lt;IfVersion = /^2.1.[01234]$/&gt;<br />
- <indent>
- # ¿¹¸¦ µé¾î, ¿©±â¿¡ ¹ö±×°¡ Àִ ƯÁ¤ ¹öÀü¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Â´Ù
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p>¿¬»êÀÚ ¾Õ¿¡ ´À³¦Ç¥(<code>!</code>)¸¦ ¾²¸é Àǹ̸¦ ¹Ý´ë·Î
- Çؼ®ÇÑ´Ù.</p>
-
- <example>
- &lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
- <indent>
- # ÀÌ ¹öÀüÀÌ ¾Æ´Ï¸é<br />
- </indent>
- &lt;/IfVersion&gt;
- </example>
-
- <p><var>operator</var>¸¦ »ý·«Çϸé <code>=</code>À̶ó°í
- »ý°¢ÇÑ´Ù.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_version.xml.meta b/docs/manual/mod/mod_version.xml.meta
deleted file mode 100644
index 7e7aed07c8..0000000000
--- a/docs/manual/mod/mod_version.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_version</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mod_vhost_alias.html b/docs/manual/mod/mod_vhost_alias.html
deleted file mode 100644
index 75b549250c..0000000000
--- a/docs/manual/mod/mod_vhost_alias.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mod_vhost_alias.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_vhost_alias.html.en b/docs/manual/mod/mod_vhost_alias.html.en
deleted file mode 100644
index ecc453918d..0000000000
--- a/docs/manual/mod/mod_vhost_alias.html.en
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_vhost_alias - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_vhost_alias</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_vhost_alias.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides for dynamically configured mass virtual
-hosting</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>vhost_alias_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_vhost_alias.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module creates dynamically configured virtual hosts, by
- allowing the IP address and/or the <code>Host:</code> header of
- the HTTP request to be used as part of the pathname to
- determine what files to serve. This allows for easy use of a
- huge number of virtual hosts with similar configurations.</p>
-
- <div class="note"><h3>Note</h3>
- <p>If <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> or <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code> are
- used for translating URIs to filenames, they will override the
- directives of <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> described below. For
- example, the following configuration will map <code>
- /cgi-bin/script.pl</code> to <code>
- /usr/local/apache2/cgi-bin/script.pl</code> in all cases:</p>
-
- <div class="example"><p><code>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/<br />
- VirtualScriptAlias /never/found/%0/cgi-bin/
- </code></p></div>
- </div>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualdocumentroot">VirtualDocumentRoot</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualscriptalias">VirtualScriptAlias</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#virtualscriptaliasip">VirtualScriptAliasIP</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#interpol">Directory Name Interpolation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code></li>
-<li><a href="../vhosts/mass.html">Dynamically configured mass
- virtual hosting</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="interpol" id="interpol">Directory Name Interpolation</a></h2>
-
-
- <p>All the directives in this module interpolate a string into
- a pathname. The interpolated string (henceforth called the
- "name") may be either the server name (see the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>
- directive for details on how this is determined) or the IP
- address of the virtual host on the server in dotted-quad
- format. The interpolation is controlled by specifiers inspired
- by <code>printf</code> which have a number of formats:</p>
-
-<table>
-
-<tr><td><code>%%</code></td>
-<td>insert a <code>%</code></td></tr>
-
-<tr><td><code>%p</code></td>
-<td>insert the port number of the virtual host</td></tr>
-
-<tr><td><code>%N.M</code></td>
-<td>insert (part of) the name</td></tr>
-
-</table>
-
- <p><code>N</code> and <code>M</code> are used to specify
- substrings of the name. <code>N</code> selects from the
- dot-separated components of the name, and <code>M</code>
- selects characters within whatever <code>N</code> has selected.
- <code>M</code> is optional and defaults to zero if it isn't
- present; the dot must be present if and only if <code>M</code>
- is present. The interpretation is as follows:</p>
-
- <table>
-
- <tr><td><code>0</code></td>
- <td>the whole name</td></tr>
-
- <tr><td><code>1</code></td>
- <td>the first part</td></tr>
-
- <tr><td><code>2</code></td>
- <td>the second part</td></tr>
-
- <tr><td><code>-1</code></td>
- <td>the last part</td></tr>
-
- <tr><td><code>-2</code></td>
- <td>the penultimate part</td></tr>
-
- <tr><td><code>2+</code></td>
- <td>the second and all subsequent parts</td></tr>
-
- <tr><td><code>-2+</code></td>
- <td>the penultimate and all preceding parts</td></tr>
-
- <tr><td><code>1+</code> and <code>-1+</code></td>
- <td>the same as <code>0</code></td></tr>
- </table>
-
- <p>If <code>N</code> or <code>M</code> is greater than the number
- of parts available a single underscore is interpolated. </p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
-
-
- <p>For simple name-based virtual hosts you might use the
- following directives in your server configuration file:</p>
-
- <div class="example"><p><code>
- UseCanonicalName Off<br />
- VirtualDocumentRoot /usr/local/apache/vhosts/%0
- </code></p></div>
-
- <p>A request for
- <code>http://www.example.com/directory/file.html</code> will be
- satisfied by the file
- <code>/usr/local/apache/vhosts/www.example.com/directory/file.html</code>.
- </p>
-
- <p>For a very large number of virtual hosts it is a good idea
- to arrange the files to reduce the size of the
- <code>vhosts</code> directory. To do this you might use the
- following in your configuration file:</p>
-
- <div class="example"><p><code>
- UseCanonicalName Off<br />
- VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
- </code></p></div>
-
- <p>A request for
- <code>http://www.domain.example.com/directory/file.html</code>
- will be satisfied by the file
- <code>/usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html</code>.</p>
-
- <p>A more even spread of files can be achieved by hashing from the
- end of the name, for example: </p>
-
-<div class="example"><p><code>
- VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
-</code></p></div>
-
- <p>The example request would come from
- <code>/usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html</code>.</p>
-
- <p>Alternatively you might use: </p>
-
-<div class="example"><p><code>
- VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
-</code></p></div>
-
- <p>The example request would come from
- <code>/usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html</code>.</p>
-
- <p>For IP-based virtual hosting you might use the following in
- your configuration file:</p>
-
- <div class="example"><p><code>
- UseCanonicalName DNS<br />
- VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs<br />
- VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
- </code></p></div>
-
- <p>A request for
- <code>http://www.domain.example.com/directory/file.html</code>
- would be satisfied by the file
- <code>/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html</code>
- if the IP address of <code>www.domain.example.com</code> were
- 10.20.30.40. A request for
- <code>http://www.domain.example.com/cgi-bin/script.pl</code> would
- be satisfied by executing the program
- <code>/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl</code>.</p>
-
- <p>If you want to include the <code>.</code> character in a
- <code>VirtualDocumentRoot</code> directive, but it clashes with
- a <code>%</code> directive, you can work around the problem in
- the following way:</p>
-
-<div class="example"><p><code>
- VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
-</code></p></div>
-
- <p>A request for
- <code>http://www.domain.example.com/directory/file.html</code>
- will be satisfied by the file
- <code>/usr/local/apache/vhosts/domain.example/directory/file.html</code>.</p>
-
- <p>The <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code>
- directives <code>%V</code> and <code>%A</code> are useful
- in conjunction with this module.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualDocumentRoot" id="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot" id="virtualdocumentroot">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualDocumentRoot <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualDocumentRoot none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p>The <code class="directive">VirtualDocumentRoot</code> directive allows you to
- determine where Apache will find your documents based on the
- value of the server name. The result of expanding
- <em>interpolated-directory</em> is used as the root of the
- document tree in a similar manner to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directive's argument.
- If <em>interpolated-directory</em> is <code>none</code> then
- <code class="directive">VirtualDocumentRoot</code> is turned off. This directive
- cannot be used in the same context as <code class="directive"><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></code>.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualDocumentRootIP" id="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip" id="virtualdocumentrootip">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualDocumentRootIP <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualDocumentRootIP none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
-<p>The <code class="directive">VirtualDocumentRootIP</code> directive is like the
- <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code>
- directive, except that it uses the IP address of the server end
- of the connection for directory interpolation instead of the server
- name.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualScriptAlias" id="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias" id="virtualscriptalias">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualScriptAlias <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualScriptAlias none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p>The <code class="directive">VirtualScriptAlias</code> directive allows you to
- determine where Apache will find CGI scripts in a similar
- manner to <code class="directive"><a href="#virtualdocumentroot">VirtualDocumentRoot</a></code> does for other documents. It matches
- requests for URIs starting <code>/cgi-bin/</code>, much like <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- <code>/cgi-bin/</code> would.</p>
-
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="VirtualScriptAliasIP" id="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip" id="virtualscriptaliasip">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>VirtualScriptAliasIP <em>interpolated-directory</em>|none</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>VirtualScriptAliasIP none</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_vhost_alias</td></tr>
-</table>
-
- <p>The <code class="directive">VirtualScriptAliasIP</code> directive is like the
- <code class="directive"><a href="#virtualscriptalias">VirtualScriptAlias</a></code>
- directive, except that it uses the IP address of the server end
- of the connection for directory interpolation instead of the server
- name.</p>
-
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_vhost_alias.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mod_vhost_alias.xml b/docs/manual/mod/mod_vhost_alias.xml
deleted file mode 100644
index 74bf0cf355..0000000000
--- a/docs/manual/mod/mod_vhost_alias.xml
+++ /dev/null
@@ -1,306 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mod_vhost_alias.xml.meta">
-
-<name>mod_vhost_alias</name>
-<description>Provides for dynamically configured mass virtual
-hosting</description>
-<status>Extension</status>
-<sourcefile>mod_vhost_alias.c</sourcefile>
-<identifier>vhost_alias_module</identifier>
-
-<summary>
- <p>This module creates dynamically configured virtual hosts, by
- allowing the IP address and/or the <code>Host:</code> header of
- the HTTP request to be used as part of the pathname to
- determine what files to serve. This allows for easy use of a
- huge number of virtual hosts with similar configurations.</p>
-
- <note><title>Note</title>
- <p>If <module>mod_alias</module> or <module>mod_userdir</module> are
- used for translating URIs to filenames, they will override the
- directives of <module>mod_vhost_alias</module> described below. For
- example, the following configuration will map <code>
- /cgi-bin/script.pl</code> to <code>
- /usr/local/apache2/cgi-bin/script.pl</code> in all cases:</p>
-
- <example>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/<br />
- VirtualScriptAlias /never/found/%0/cgi-bin/
- </example>
- </note>
-</summary>
-
-<seealso><directive module="core">UseCanonicalName</directive></seealso>
-<seealso><a href="../vhosts/mass.html">Dynamically configured mass
- virtual hosting</a></seealso>
-
-<section id="interpol">
- <title>Directory Name Interpolation</title>
-
- <p>All the directives in this module interpolate a string into
- a pathname. The interpolated string (henceforth called the
- "name") may be either the server name (see the <directive
- module="core">UseCanonicalName</directive>
- directive for details on how this is determined) or the IP
- address of the virtual host on the server in dotted-quad
- format. The interpolation is controlled by specifiers inspired
- by <code>printf</code> which have a number of formats:</p>
-
-<table>
-<columnspec><column width=".2"/><column width=".6"/></columnspec>
-<tr><td><code>%%</code></td>
-<td>insert a <code>%</code></td></tr>
-
-<tr><td><code>%p</code></td>
-<td>insert the port number of the virtual host</td></tr>
-
-<tr><td><code>%N.M</code></td>
-<td>insert (part of) the name</td></tr>
-
-</table>
-
- <p><code>N</code> and <code>M</code> are used to specify
- substrings of the name. <code>N</code> selects from the
- dot-separated components of the name, and <code>M</code>
- selects characters within whatever <code>N</code> has selected.
- <code>M</code> is optional and defaults to zero if it isn't
- present; the dot must be present if and only if <code>M</code>
- is present. The interpretation is as follows:</p>
-
- <table>
- <columnspec><column width=".1"/><column width=".4"/></columnspec>
- <tr><td><code>0</code></td>
- <td>the whole name</td></tr>
-
- <tr><td><code>1</code></td>
- <td>the first part</td></tr>
-
- <tr><td><code>2</code></td>
- <td>the second part</td></tr>
-
- <tr><td><code>-1</code></td>
- <td>the last part</td></tr>
-
- <tr><td><code>-2</code></td>
- <td>the penultimate part</td></tr>
-
- <tr><td><code>2+</code></td>
- <td>the second and all subsequent parts</td></tr>
-
- <tr><td><code>-2+</code></td>
- <td>the penultimate and all preceding parts</td></tr>
-
- <tr><td><code>1+</code> and <code>-1+</code></td>
- <td>the same as <code>0</code></td></tr>
- </table>
-
- <p>If <code>N</code> or <code>M</code> is greater than the number
- of parts available a single underscore is interpolated. </p>
-
-</section>
-
-<section id="examples">
- <title>Examples</title>
-
- <p>For simple name-based virtual hosts you might use the
- following directives in your server configuration file:</p>
-
- <example>
- UseCanonicalName Off<br />
- VirtualDocumentRoot /usr/local/apache/vhosts/%0
- </example>
-
- <p>A request for
- <code>http://www.example.com/directory/file.html</code> will be
- satisfied by the file
- <code>/usr/local/apache/vhosts/www.example.com/directory/file.html</code>.
- </p>
-
- <p>For a very large number of virtual hosts it is a good idea
- to arrange the files to reduce the size of the
- <code>vhosts</code> directory. To do this you might use the
- following in your configuration file:</p>
-
- <example>
- UseCanonicalName Off<br />
- VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
- </example>
-
- <p>A request for
- <code>http://www.domain.example.com/directory/file.html</code>
- will be satisfied by the file
- <code>/usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html</code>.</p>
-
- <p>A more even spread of files can be achieved by hashing from the
- end of the name, for example: </p>
-
-<example>
- VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
-</example>
-
- <p>The example request would come from
- <code>/usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html</code>.</p>
-
- <p>Alternatively you might use: </p>
-
-<example>
- VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
-</example>
-
- <p>The example request would come from
- <code>/usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html</code>.</p>
-
- <p>For IP-based virtual hosting you might use the following in
- your configuration file:</p>
-
- <example>
- UseCanonicalName DNS<br />
- VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs<br />
- VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
- </example>
-
- <p>A request for
- <code>http://www.domain.example.com/directory/file.html</code>
- would be satisfied by the file
- <code>/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html</code>
- if the IP address of <code>www.domain.example.com</code> were
- 10.20.30.40. A request for
- <code>http://www.domain.example.com/cgi-bin/script.pl</code> would
- be satisfied by executing the program
- <code>/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl</code>.</p>
-
- <p>If you want to include the <code>.</code> character in a
- <code>VirtualDocumentRoot</code> directive, but it clashes with
- a <code>%</code> directive, you can work around the problem in
- the following way:</p>
-
-<example>
- VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
-</example>
-
- <p>A request for
- <code>http://www.domain.example.com/directory/file.html</code>
- will be satisfied by the file
- <code>/usr/local/apache/vhosts/domain.example/directory/file.html</code>.</p>
-
- <p>The <directive module="mod_log_config">LogFormat</directive>
- directives <code>%V</code> and <code>%A</code> are useful
- in conjunction with this module.</p>
-</section>
-
-<directivesynopsis>
-<name>VirtualDocumentRoot</name>
-<description>Dynamically configure the location of the document root
-for a given virtual host</description>
-<syntax>VirtualDocumentRoot <em>interpolated-directory</em>|none</syntax>
-<default>VirtualDocumentRoot none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-
- <p>The <directive>VirtualDocumentRoot</directive> directive allows you to
- determine where Apache will find your documents based on the
- value of the server name. The result of expanding
- <em>interpolated-directory</em> is used as the root of the
- document tree in a similar manner to the <directive
- module="core">DocumentRoot</directive> directive's argument.
- If <em>interpolated-directory</em> is <code>none</code> then
- <directive>VirtualDocumentRoot</directive> is turned off. This directive
- cannot be used in the same context as <directive
- module="mod_vhost_alias">VirtualDocumentRootIP</directive>.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>VirtualDocumentRootIP</name>
-<description>Dynamically configure the location of the document root
-for a given virtual host</description>
-<syntax>VirtualDocumentRootIP <em>interpolated-directory</em>|none</syntax>
-<default>VirtualDocumentRootIP none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-
-<p>The <directive>VirtualDocumentRootIP</directive> directive is like the
- <directive module="mod_vhost_alias">VirtualDocumentRoot</directive>
- directive, except that it uses the IP address of the server end
- of the connection for directory interpolation instead of the server
- name.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>VirtualScriptAlias</name>
-<description>Dynamically configure the location of the CGI directory for
-a given virtual host</description>
-<syntax>VirtualScriptAlias <em>interpolated-directory</em>|none</syntax>
-<default>VirtualScriptAlias none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-
- <p>The <directive>VirtualScriptAlias</directive> directive allows you to
- determine where Apache will find CGI scripts in a similar
- manner to <directive module="mod_vhost_alias"
- >VirtualDocumentRoot</directive> does for other documents. It matches
- requests for URIs starting <code>/cgi-bin/</code>, much like <directive
- module="mod_alias">ScriptAlias</directive>
- <code>/cgi-bin/</code> would.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>VirtualScriptAliasIP</name>
-<description>Dynamically configure the location of the cgi directory for
-a given virtual host</description>
-<syntax>VirtualScriptAliasIP <em>interpolated-directory</em>|none</syntax>
-<default>VirtualScriptAliasIP none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-
- <p>The <directive>VirtualScriptAliasIP</directive> directive is like the
- <directive module="mod_vhost_alias">VirtualScriptAlias</directive>
- directive, except that it uses the IP address of the server end
- of the connection for directory interpolation instead of the server
- name.</p>
-
- </usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_vhost_alias.xml.meta b/docs/manual/mod/mod_vhost_alias.xml.meta
deleted file mode 100644
index 078861efcd..0000000000
--- a/docs/manual/mod/mod_vhost_alias.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mod_vhost_alias</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/module-dict.html b/docs/manual/mod/module-dict.html
deleted file mode 100644
index 61d6c0f953..0000000000
--- a/docs/manual/mod/module-dict.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: module-dict.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: module-dict.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: module-dict.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/module-dict.html.en b/docs/manual/mod/module-dict.html.en
deleted file mode 100644
index eb58f9798d..0000000000
--- a/docs/manual/mod/module-dict.html.en
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Terms Used to Describe Modules - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Terms Used to Describe Modules</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/module-dict.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/module-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/module-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document describes the terms that are used to describe
- each Apache <a href="./">module</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">Description</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Status">Status</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#SourceFile">Source File</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ModuleIdentifier">Module Identifier</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">Compatibility</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Description" id="Description">Description</a></h2>
-
-<p>A brief description of the purpose of the module.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Status" id="Status">Status</a></h2>
-
- <p>This indicates how tightly bound into the Apache Web server
- the module is; in other words, you may need to recompile the
- server in order to gain access to the module and its
- functionality. Possible values for this attribute are:</p>
-
- <dl>
- <dt>MPM</dt>
-
- <dd>A module with status "MPM" is a <a href="../mpm.html">Multi-Processing Module</a>. Unlike the
- other types of modules, Apache must have one and only one MPM
- in use at any time. This type of module is responsible for
- basic request handling and dispatching.</dd>
-
- <dt>Base</dt>
-
- <dd>A module labeled as having "Base" status is compiled and
- loaded into the server by default, and is therefore normally
- available unless you have taken steps to remove the module
- from your configuration.</dd>
-
- <dt>Extension</dt>
-
- <dd>A module with "Extension" status is not normally compiled
- and loaded into the server. To enable the module and its
- functionality, you may need to change the server build
- configuration files and re-compile Apache.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" status indicates that the module is
- available as part of the Apache kit, but you are on your own
- if you try to use it. The module is being documented for
- completeness, and is not necessarily supported.</dd>
-
- <dt>External</dt>
-
- <dd>Modules which are not included with the base Apache
- distribution ("third-party modules") may use the "External"
- status. We are not responsible for, nor do we support such
- modules.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="SourceFile" id="SourceFile">Source File</a></h2>
-
- <p>This quite simply lists the name of the source file which
- contains the code for the module. This is also the name used by
- the <code class="directive"><a href="../mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
- directive.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ModuleIdentifier" id="ModuleIdentifier">Module Identifier</a></h2>
-
- <p>This is a string which identifies the module for use in the
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive when
- dynamically loading modules. In particular, it is the name of
- the external variable of type module in the source file.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Compatibility" id="Compatibility">Compatibility</a></h2>
-
- <p>If the module was not part of the original Apache version 2
- distribution, the version in which it was introduced should be
- listed here. In addition, if the module is limited to
- particular platforms, the details will be listed here.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/module-dict.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/module-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/module-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/module-dict.html.ja.euc-jp b/docs/manual/mod/module-dict.html.ja.euc-jp
deleted file mode 100644
index fa47a261b0..0000000000
--- a/docs/manual/mod/module-dict.html.ja.euc-jp
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¥â¥¸¥å¡¼¥ë¤Î²òÀâ¤Ç»ÈÍѤ¹¤ëÍѸì - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache ¥â¥¸¥å¡¼¥ë¤Î²òÀâ¤Ç»ÈÍѤ¹¤ëÍѸì</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/module-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/module-dict.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/module-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ï Apache ¤Î³Æ <a href="./">¥â¥¸¥å¡¼¥ë</a> ¤òÀâÌÀ¤¹¤ë¤¿¤á¤Ë
- »È¤ï¤ì¤Æ¤¤¤ëÍѸì¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">ÀâÌÀ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Status">¥¹¥Æ¡¼¥¿¥¹</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">¸ß´¹À­</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Description" id="Description">ÀâÌÀ</a></h2>
-
-<p>¥â¥¸¥å¡¼¥ë¤ÎÌÜŪ¤Îû¤¤ÀâÌÀ¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Status" id="Status">¥¹¥Æ¡¼¥¿¥¹</a></h2>
-
- <p>¤³¤ì¤Ï¡¢¤½¤Î¥â¥¸¥å¡¼¥ë¤¬ Apache
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤Ë¤É¤ì¤¯¤é¤¤Ì©ÀܤËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤«¤ò¼¨¤·¤Þ¤¹¡£
- ¸À¤¤´¹¤¨¤ì¤Ð¡¢¥â¥¸¥å¡¼¥ë¤òÁȤ߹þ¤ß¡¢¤½¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¡¢
- ¥µ¡¼¥Ð¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ë¤«¤â¤·¤ì¤Ê¤¤¤È¤¤¤¦¤³¤È¤ò¼¨¤·¤Þ¤¹¡£
- ¤³¤Î°À­¤¬¼è¤êÆÀ¤ëÃͤϰʲ¼¤Î¤â¤Î¤Ç¤¹:</p>
- <dl>
- <dt>MPM</dt>
-
- <dd>¥¹¥Æ¡¼¥¿¥¹¤¬ "MPM" ¤Î¥â¥¸¥å¡¼¥ë¤Ï<a href="../mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</a>¤Ç¤¹¡£
- ¾¤Î¼ïÎà¤Î¥â¥¸¥å¡¼¥ë¤È¤Ï°ã¤Ã¤Æ¡¢Apache ¤Ï¾ï¤Ë MPM ¤ò°ì¤Ä¤À¤±
- »ÈÍѤ·Â³¤±¤Þ¤¹¡£¤³¤Î¼ïÎà¤Î¥â¥¸¥å¡¼¥ë¤Ï´ðËÜŪ¤Ê¥ê¥¯¥¨¥¹¥È¤Î°·¤¤¤È
- ¥Ç¥£¥¹¥Ñ¥Ã¥Á¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£</dd>
-
- <dt>Base</dt>
-
- <dd>¥¹¥Æ¡¼¥¿¥¹¤¬ "Base"
- ¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤ï¤¶¤ï¤¶ÀßÄ꤫¤é
- ¥â¥¸¥å¡¼¥ë¤òºï½ü¤·¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢Ä̾ï¤ÏÍøÍѲÄǽ¤Ç¤¹¡£
- </dd>
-
- <dt>Extension</dt>
-
- <dd>¥¹¥Æ¡¼¥¿¥¹¤¬ "Extension" ¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤º¡¢¥µ¡¼¥Ð¤Ë¤âÆɤ߹þ¤Þ¤ì¤Þ¤»¤ó¡£
- ¤½¤Î¥â¥¸¥å¡¼¥ë¤È¤½¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢
- ¥µ¡¼¥Ð¤ò¥Ó¥ë¥É¤¹¤ë¤¿¤á¤ÎÀßÄê¤òÊѹ¹¤·¤Æ¡¢Apache
- ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</dd>
- <dt>Experimental</dt>
-
- <dd>¥¹¥Æ¡¼¥¿¥¹¤¬ "Experimental" ¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢
- Apache ÇÛÉÛʪ¤ËƱº­¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢
- »ÈÍѤ¹¤ë¾ì¹ç¤Ï¼«¸ÊÀÕǤ¤Ç¹Ô¤Ê¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
- ¤½¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤â´°À®¤Ë¸þ¤±¤ÆºîÀ®Ãæ¤Ç¤¹¤·¡¢
- ¥µ¥Ý¡¼¥È¤µ¤ì¤ë¤Æ¤¤¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£</dd>
- <dt>External</dt>
-
- <dd>¥¹¥Æ¡¼¥¿¥¹¤¬ "External" ¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢´ðËÜ Apache
- ÇÛÉÛ¤ËƱº­¤µ¤ì¤Þ¤»¤ó ("¥µ¡¼¥É¥Ñ¡¼¥Æ¥£¡¼¥â¥¸¥å¡¼¥ë")¡£
- ¤½¤Î¤¿¤á¡¢²æ¡¹¤ËÀÕǤ¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢
- ¤½¤Î¥â¥¸¥å¡¼¥ë¤Î¥µ¥Ý¡¼¥È¤â¤·¤Æ¤¤¤Þ¤»¤ó¡£</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="SourceFile" id="SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë</a></h2>
-
- <p>¤³¤ì¤Ïñ½ã¤Ë¡¢
- ¤½¤Î¥â¥¸¥å¡¼¥ë¤ËɬÍפʥ³¡¼¥É¤ò´Þ¤à¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÎóµó¤·¤¿¤â¤Î¤Ç¤¹¡£
- ¤³¤ì¤Ï¡¢<code class="directive"><a href="../mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ÈÍѤµ¤ì¤ë̾Á°¤Ç¤â¤¢¤ê¤Þ¤¹¡£
- </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ModuleIdentifier" id="ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò</a></h2>
-
- <p>¤³¤Îʸ»úÎó¤Ï¡¢¥â¥¸¥å¡¼¥ë¤ÎưŪÆɤ߹þ¤ß¤ò¹Ô¤Ê¤¦¤È¤­¤Ë»ÈÍѤ¹¤ë <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤ª¤¤¤Æ»ÈÍѤµ¤ì¤ë¥â¥¸¥å¡¼¥ë¤Î¼±Ê̻ҤǤ¹¡£
- ¾Ü¤·¤¯½ñ¤¯¤È¡¢¥½¡¼¥¹¥Õ¥¡¥¤¥ëÆâ¤Î module ¥¿¥¤¥×¤Î³°ÉôÊÑ¿ô¤Î̾Á°¤Ç¤¹¡£
- </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Compatibility" id="Compatibility">¸ß´¹À­</a></h2>
-
- <p>¤¢¤ë¥â¥¸¥å¡¼¥ë¤¬ Apache ¥Ð¡¼¥¸¥ç¥ó 2
- ¤ÎÇÛÉۤ˴ޤޤì¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
- ¤½¤Î¥â¥¸¥å¡¼¥ë¤¬Æ³Æþ¤µ¤ì¤¿¥Ð¡¼¥¸¥ç¥ó¤¬¤³¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤Þ¤¿¡¢¥â¥¸¥å¡¼¥ë¤¬ÆÃÄê¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤Î¤ß¸ºß¤¹¤ë¤È¤­¤â
- ¾ÜºÙ¤Ï¤³¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/module-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/module-dict.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/module-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/module-dict.html.ko.euc-kr b/docs/manual/mod/module-dict.html.ko.euc-kr
deleted file mode 100644
index 2ce756e8a9..0000000000
--- a/docs/manual/mod/module-dict.html.ko.euc-kr
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¸ðµâÀ» ¼³¸íÇϱâÀ§ÇØ »ç¿ëÇÑ ¿ë¾îµé - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¸ðµâÀ» ¼³¸íÇϱâÀ§ÇØ »ç¿ëÇÑ ¿ë¾îµé</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/module-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/module-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/module-dict.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ <a href="./">¸ðµâ</a>À» ¼³¸íÇϱâÀ§ÇØ
- »ç¿ëÇÑ ¿ë¾î¸¦ ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">¼³¸í</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Status">»óÅÂ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#SourceFile">¼Ò½ºÆÄÀÏ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ModuleIdentifier">¸ðµâ¸í</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">Áö¿ø</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Description" id="Description">¼³¸í</a></h2>
-
-<p>¸ðµâ ¸ñÀû¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸í.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Status" id="Status">»óÅÂ</a></h2>
-
- <p>¸ðµâÀÌ ¾ÆÆÄÄ¡ À¥¼­¹ö¿Í ¾ó¸¶³ª ¹ÐÁ¢È÷ ¿¬°üµÇÀÖ´ÂÁö ³ªÅ¸³½´Ù.
- Áï, ƯÁ¤ ¸ðµâ°ú ¸ðµâÀÇ ±â´ÉÀ» »ç¿ëÇϱâÀ§Çؼ­ ¼­¹ö¸¦ ´Ù½Ã
- ÄÄÆÄÀÏÇØ¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ÀÌ ¼Ó¼ºÀÇ °ªÀº:</p>
-
- <dl>
- <dt>MPM</dt>
-
- <dd>»óÅ°¡ "MPM"ÀÎ ¸ðµâÀº <a href="../mpm.html">´ÙÁßó¸®
- ¸ðµâ</a>ÀÌ´Ù. ´Ù¸¥ Á¾·ùÀÇ ¸ðµâ°ú ´Þ¸® ¾ÆÆÄÄ¡´Â ¿ÀÁ÷ ÇÑ
- MPM¸¸À» »ç¿ëÇÑ´Ù. ÀÌ·± Á¾·ùÀÇ ¸ðµâÀº ±âº»ÀûÀÎ ¿äû 󸮿Í
- ºÐ¹è¸¦ ´ã´çÇÑ´Ù.</dd>
-
- <dt>Base</dt>
-
- <dd>»óÅ°¡ "Base"ÀÎ ¸ðµâÀº ±âº»ÀûÀ¸·Î ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵǹǷÎ,
- ¼³Á¤¿¡¼­ ¸ðµâÀ» Á¦°ÅÇÏÁö ¾Ê´Â ÇÑ º¸Åë »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dt>Extension</dt>
-
- <dd>»óÅ°¡ "Extension"ÀÎ ¸ðµâÀº º¸Åë ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵÇÁö
- ¾Ê´Â´Ù. ¸ðµâ°ú ¸ðµâÀÇ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é ¼­¹ö ÄÄÆÄÀÏ
- ±¸¼ºÆÄÀÏÀ» º¯°æÇÏ°í ¾ÆÆÄÄ¡¸¦ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" »óÅ´ ¸ðµâÀÌ ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖÁö¸¸,
- »ç¿ëÇÏ·Á¸é À§ÇèÀ» °¨¼öÇØ¾ß ÇÑ´Ù. ¸ðµâ¿¡ ´ëÇÑ ¹®¼­°¡ ÀÖÁö¸¸,
- ¸ðµâÀ» Áö¿øÇÑ´Ù´Â ¸»Àº ¾Æ´Ï´Ù.</dd>
-
- <dt>External</dt>
-
- <dd>"External" »óÅ´ ±âº» ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÁö ¾ÊÀº
- ¸ðµâ("Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ")ÀÌ´Ù. ¿ì¸®´Â ÀÌ·± ¸ðµâ¿¡ Ã¥ÀÓÀÌ
- ¾ø°í Áö¿øÇÏÁöµµ ¾Ê´Â´Ù.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="SourceFile" id="SourceFile">¼Ò½ºÆÄÀÏ</a></h2>
-
- <p>°£´ÜÇÏ°Ô ¸»Çؼ­ ¸ðµâ ¼Ò½ºÄڵ尡 ÀÖ´Â ¼Ò½ºÆÄÀϸíÀÌ´Ù.
- <code class="directive"><a href="../mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
- Áö½Ã¾î¿¡¼­ »ç¿ëÇÏ´Â À̸§À̱⵵ ÇÏ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ModuleIdentifier" id="ModuleIdentifier">¸ðµâ¸í</a></h2>
-
- <p>¸ðµâÀ» ÁöĪÇÏ´Â ¹®ÀÚ¿­·Î, ¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¿¡¼­
- »ç¿ëÇÑ´Ù. Á¤È®È÷ ¸»ÇÏ¸é ¼Ò½ºÆÄÀÏ¿¡¼­ module ÇüÀÇ ¿ÜºÎº¯¼ö
- À̸§ÀÌ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="Compatibility" id="Compatibility">Áö¿ø</a></h2>
-
- <p>¸ðµâÀÌ ¿ø·¡ ¾ÆÆÄÄ¡ ¹öÀü 2 ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÁö ¾Ê¾Ò´Ù¸é,
- ¸ðµâÀ» óÀ½ ¼Ò°³ÇÑ ¹öÀüÀ» ¾Ë·ÁÁØ´Ù. ¶Ç, ¸ðµâÀÌ Æ¯Á¤
- Ç÷¡Æû¿ëÀ̶ó¸é »ó¼¼È÷ ¼³¸íÇÑ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/module-dict.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/module-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/module-dict.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/module-dict.xml b/docs/manual/mod/module-dict.xml
deleted file mode 100644
index ed3df65baa..0000000000
--- a/docs/manual/mod/module-dict.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.6 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="module-dict.xml.meta">
-
- <title>Terms Used to Describe Modules</title>
-
-<summary>
- <p>This document describes the terms that are used to describe
- each Apache <a href="./">module</a>.</p>
-</summary>
-
-<section id="Description"><title>Description</title>
-
-<p>A brief description of the purpose of the module.</p>
-</section>
-
-<section id="Status"><title>Status</title>
-
- <p>This indicates how tightly bound into the Apache Web server
- the module is; in other words, you may need to recompile the
- server in order to gain access to the module and its
- functionality. Possible values for this attribute are:</p>
-
- <dl>
- <dt>MPM</dt>
-
- <dd>A module with status "MPM" is a <a
- href="../mpm.html">Multi-Processing Module</a>. Unlike the
- other types of modules, Apache must have one and only one MPM
- in use at any time. This type of module is responsible for
- basic request handling and dispatching.</dd>
-
- <dt>Base</dt>
-
- <dd>A module labeled as having "Base" status is compiled and
- loaded into the server by default, and is therefore normally
- available unless you have taken steps to remove the module
- from your configuration.</dd>
-
- <dt>Extension</dt>
-
- <dd>A module with "Extension" status is not normally compiled
- and loaded into the server. To enable the module and its
- functionality, you may need to change the server build
- configuration files and re-compile Apache.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" status indicates that the module is
- available as part of the Apache kit, but you are on your own
- if you try to use it. The module is being documented for
- completeness, and is not necessarily supported.</dd>
-
- <dt>External</dt>
-
- <dd>Modules which are not included with the base Apache
- distribution ("third-party modules") may use the "External"
- status. We are not responsible for, nor do we support such
- modules.</dd>
- </dl>
-</section>
-
-<section id="SourceFile"><title>Source File</title>
-
- <p>This quite simply lists the name of the source file which
- contains the code for the module. This is also the name used by
- the <directive module="core" type="section">IfModule</directive>
- directive.</p>
-</section>
-
-<section id="ModuleIdentifier"><title>Module Identifier</title>
-
- <p>This is a string which identifies the module for use in the
- <directive module="mod_so">LoadModule</directive> directive when
- dynamically loading modules. In particular, it is the name of
- the external variable of type module in the source file.</p>
-</section>
-
-<section id="Compatibility"><title>Compatibility</title>
-
- <p>If the module was not part of the original Apache version 2
- distribution, the version in which it was introduced should be
- listed here. In addition, if the module is limited to
- particular platforms, the details will be listed here.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/mod/module-dict.xml.ja b/docs/manual/mod/module-dict.xml.ja
deleted file mode 100644
index 75459dcbf4..0000000000
--- a/docs/manual/mod/module-dict.xml.ja
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="module-dict.xml.meta">
-
- <title>Apache $B%b%8%e!<%k$N2r@b$G;HMQ$9$kMQ8l(B</title>
-
-<summary>
- <p>$B$3$NJ8=q$O(B Apache $B$N3F(B <a href="./">$B%b%8%e!<%k(B</a> $B$r@bL@$9$k$?$a$K(B
- $B;H$o$l$F$$$kMQ8l$r@bL@$7$^$9!#(B</p>
-</summary>
-
-<section id="Description"><title>$B@bL@(B</title>
-
-<p>$B%b%8%e!<%k$NL\E*$NC;$$@bL@!#(B</p>
-</section>
-
-<section id="Status"><title>$B%9%F!<%?%9(B</title>
-
- <p>$B$3$l$O!"$=$N%b%8%e!<%k$,(B Apache
- $B%&%'%V%5!<%P$K$I$l$/$i$$L)@\$KAH$_9~$^$l$F$$$k$+$r<($7$^$9!#(B
- $B8@$$49$($l$P!"%b%8%e!<%k$rAH$_9~$_!"$=$N5!G=$rMxMQ$9$k$?$a$K!"(B
- $B%5!<%P$r:F%3%s%Q%$%k$9$kI,MW$,$"$k$+$b$7$l$J$$$H$$$&$3$H$r<($7$^$9!#(B
- $B$3$NB0@-$,<h$jF@$kCM$O0J2<$N$b$N$G$9(B:</p>
- <dl>
- <dt>MPM</dt>
-
- <dd>$B%9%F!<%?%9$,(B "MPM" $B$N%b%8%e!<%k$O(B<a
- href="../mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a>$B$G$9!#(B
- $BB>$N<oN`$N%b%8%e!<%k$H$O0c$C$F!"(BApache $B$O>o$K(B MPM $B$r0l$D$@$1(B
- $B;HMQ$7B3$1$^$9!#$3$N<oN`$N%b%8%e!<%k$O4pK\E*$J%j%/%(%9%H$N07$$$H(B
- $B%G%#%9%Q%C%A$r9T$J$$$^$9!#(B</dd>
-
- <dt>Base</dt>
-
- <dd>$B%9%F!<%?%9$,(B &quot;Base&quot;
- $B$N%b%8%e!<%k$O!"%G%U%)%k%H$G%3%s%Q%$%k$5$l$F$o$6$o$6@_Dj$+$i(B
- $B%b%8%e!<%k$r:o=|$7$F$$$J$$8B$j!"DL>o$OMxMQ2DG=$G$9!#(B
- </dd>
-
- <dt>Extension</dt>
-
- <dd>$B%9%F!<%?%9$,(B &quot;Extension&quot; $B$N%b%8%e!<%k$O!"(B
- $B%G%U%)%k%H$G$O%3%s%Q%$%k$5$l$:!"%5!<%P$K$bFI$_9~$^$l$^$;$s!#(B
- $B$=$N%b%8%e!<%k$H$=$N5!G=$rM-8z$K$9$k$K$O!"(B
- $B%5!<%P$r%S%k%I$9$k$?$a$N@_Dj$rJQ99$7$F!"(BApache
- $B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#(B</dd>
- <dt>Experimental</dt>
-
- <dd>$B%9%F!<%?%9$,(B &quot;Experimental&quot; $B$N%b%8%e!<%k$O!"(B
- Apache $BG[I[J*$KF1:-$5$l$F$$$^$9$,!"(B
- $B;HMQ$9$k>l9g$O<+8J@UG$$G9T$J$&I,MW$,$"$j$^$9!#(B
- $B$=$N%b%8%e!<%k$O!"%I%-%e%a%s%H$b40@.$K8~$1$F:n@.Cf$G$9$7!"(B
- $B%5%]!<%H$5$l$k$F$$$k$H$O8B$j$^$;$s!#(B</dd>
- <dt>External</dt>
-
- <dd>$B%9%F!<%?%9$,(B &quot;External&quot; $B$N%b%8%e!<%k$O!"4pK\(B Apache
- $BG[I[$KF1:-$5$l$^$;$s(B (&quot;$B%5!<%I%Q!<%F%#!<%b%8%e!<%k(B&quot;)$B!#(B
- $B$=$N$?$a!"2f!9$K@UG$$O$"$j$^$;$s$7!"(B
- $B$=$N%b%8%e!<%k$N%5%]!<%H$b$7$F$$$^$;$s!#(B</dd>
- </dl>
-</section>
-
-<section id="SourceFile"><title>$B%=!<%9%U%!%$%k(B</title>
-
- <p>$B$3$l$OC1=c$K!"(B
- $B$=$N%b%8%e!<%k$KI,MW$J%3!<%I$r4^$`%=!<%9%U%!%$%k$NL>A0$rNs5s$7$?$b$N$G$9!#(B
- $B$3$l$O!"(B<directive module="core" type="section">IfModule</directive>
- $B%G%#%l%/%F%#%V$G;HMQ$5$l$kL>A0$G$b$"$j$^$9!#(B
- </p>
-</section>
-
-<section id="ModuleIdentifier"><title>$B%b%8%e!<%k<1JL;R(B</title>
-
- <p>$B$3$NJ8;zNs$O!"%b%8%e!<%k$NF0E*FI$_9~$_$r9T$J$&$H$-$K;HMQ$9$k(B <directive
- module="mod_so">LoadModule</directive>
- $B%G%#%l%/%F%#%V$K$*$$$F;HMQ$5$l$k%b%8%e!<%k$N<1JL;R$G$9!#(B
- $B>\$7$/=q$/$H!"%=!<%9%U%!%$%kFb$N(B module $B%?%$%W$N30ItJQ?t$NL>A0$G$9!#(B
- </p>
-</section>
-
-<section id="Compatibility"><title>$B8_49@-(B</title>
-
- <p>$B$"$k%b%8%e!<%k$,(B Apache $B%P!<%8%g%s(B 2
- $B$NG[I[$K4^$^$l$F$$$J$+$C$?>l9g!"(B
- $B$=$N%b%8%e!<%k$,F3F~$5$l$?%P!<%8%g%s$,$3$3$K=q$+$l$F$$$^$9!#(B
- $B$^$?!"%b%8%e!<%k$,FCDj$N%W%i%C%H%U%)!<%`$K$N$_B8:_$9$k$H$-$b(B
- $B>\:Y$O$3$3$K=q$+$l$F$$$^$9!#(B</p>
-</section>
-</manualpage>
diff --git a/docs/manual/mod/module-dict.xml.ko b/docs/manual/mod/module-dict.xml.ko
deleted file mode 100644
index ff9526fd24..0000000000
--- a/docs/manual/mod/module-dict.xml.ko
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.6 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="module-dict.xml.meta">
-
- <title>¸ðµâÀ» ¼³¸íÇϱâÀ§ÇØ »ç¿ëÇÑ ¿ë¾îµé</title>
-
-<summary>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ <a href="./">¸ðµâ</a>À» ¼³¸íÇϱâÀ§ÇØ
- »ç¿ëÇÑ ¿ë¾î¸¦ ¼³¸íÇÑ´Ù.</p>
-</summary>
-
-<section id="Description"><title>¼³¸í</title>
-
-<p>¸ðµâ ¸ñÀû¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸í.</p>
-</section>
-
-<section id="Status"><title>»óÅÂ</title>
-
- <p>¸ðµâÀÌ ¾ÆÆÄÄ¡ À¥¼­¹ö¿Í ¾ó¸¶³ª ¹ÐÁ¢È÷ ¿¬°üµÇÀÖ´ÂÁö ³ªÅ¸³½´Ù.
- Áï, ƯÁ¤ ¸ðµâ°ú ¸ðµâÀÇ ±â´ÉÀ» »ç¿ëÇϱâÀ§Çؼ­ ¼­¹ö¸¦ ´Ù½Ã
- ÄÄÆÄÀÏÇØ¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ÀÌ ¼Ó¼ºÀÇ °ªÀº:</p>
-
- <dl>
- <dt>MPM</dt>
-
- <dd>»óÅ°¡ "MPM"ÀÎ ¸ðµâÀº <a href="../mpm.html">´ÙÁßó¸®
- ¸ðµâ</a>ÀÌ´Ù. ´Ù¸¥ Á¾·ùÀÇ ¸ðµâ°ú ´Þ¸® ¾ÆÆÄÄ¡´Â ¿ÀÁ÷ ÇÑ
- MPM¸¸À» »ç¿ëÇÑ´Ù. ÀÌ·± Á¾·ùÀÇ ¸ðµâÀº ±âº»ÀûÀÎ ¿äû 󸮿Í
- ºÐ¹è¸¦ ´ã´çÇÑ´Ù.</dd>
-
- <dt>Base</dt>
-
- <dd>»óÅ°¡ "Base"ÀÎ ¸ðµâÀº ±âº»ÀûÀ¸·Î ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵǹǷÎ,
- ¼³Á¤¿¡¼­ ¸ðµâÀ» Á¦°ÅÇÏÁö ¾Ê´Â ÇÑ º¸Åë »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dt>Extension</dt>
-
- <dd>»óÅ°¡ "Extension"ÀÎ ¸ðµâÀº º¸Åë ¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵÇÁö
- ¾Ê´Â´Ù. ¸ðµâ°ú ¸ðµâÀÇ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é ¼­¹ö ÄÄÆÄÀÏ
- ±¸¼ºÆÄÀÏÀ» º¯°æÇÏ°í ¾ÆÆÄÄ¡¸¦ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt>Experimental</dt>
-
- <dd>"Experimental" »óÅ´ ¸ðµâÀÌ ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖÁö¸¸,
- »ç¿ëÇÏ·Á¸é À§ÇèÀ» °¨¼öÇØ¾ß ÇÑ´Ù. ¸ðµâ¿¡ ´ëÇÑ ¹®¼­°¡ ÀÖÁö¸¸,
- ¸ðµâÀ» Áö¿øÇÑ´Ù´Â ¸»Àº ¾Æ´Ï´Ù.</dd>
-
- <dt>External</dt>
-
- <dd>"External" »óÅ´ ±âº» ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÁö ¾ÊÀº
- ¸ðµâ("Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ")ÀÌ´Ù. ¿ì¸®´Â ÀÌ·± ¸ðµâ¿¡ Ã¥ÀÓÀÌ
- ¾ø°í Áö¿øÇÏÁöµµ ¾Ê´Â´Ù.</dd>
- </dl>
-</section>
-
-<section id="SourceFile"><title>¼Ò½ºÆÄÀÏ</title>
-
- <p>°£´ÜÇÏ°Ô ¸»Çؼ­ ¸ðµâ ¼Ò½ºÄڵ尡 ÀÖ´Â ¼Ò½ºÆÄÀϸíÀÌ´Ù.
- <directive module="core" type="section">IfModule</directive>
- Áö½Ã¾î¿¡¼­ »ç¿ëÇÏ´Â À̸§À̱⵵ ÇÏ´Ù.</p>
-</section>
-
-<section id="ModuleIdentifier"><title>¸ðµâ¸í</title>
-
- <p>¸ðµâÀ» ÁöĪÇÏ´Â ¹®ÀÚ¿­·Î, ¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÌ´Â
- <directive module="mod_so">LoadModule</directive> Áö½Ã¾î¿¡¼­
- »ç¿ëÇÑ´Ù. Á¤È®È÷ ¸»ÇÏ¸é ¼Ò½ºÆÄÀÏ¿¡¼­ module ÇüÀÇ ¿ÜºÎº¯¼ö
- À̸§ÀÌ´Ù.</p>
-</section>
-
-<section id="Compatibility"><title>Áö¿ø</title>
-
- <p>¸ðµâÀÌ ¿ø·¡ ¾ÆÆÄÄ¡ ¹öÀü 2 ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÁö ¾Ê¾Ò´Ù¸é,
- ¸ðµâÀ» óÀ½ ¼Ò°³ÇÑ ¹öÀüÀ» ¾Ë·ÁÁØ´Ù. ¶Ç, ¸ðµâÀÌ Æ¯Á¤
- Ç÷¡Æû¿ëÀ̶ó¸é »ó¼¼È÷ ¼³¸íÇÑ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/mod/module-dict.xml.meta b/docs/manual/mod/module-dict.xml.meta
deleted file mode 100644
index dd3e109876..0000000000
--- a/docs/manual/mod/module-dict.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>module-dict</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mpm_common.html b/docs/manual/mod/mpm_common.html
deleted file mode 100644
index f76c5828c5..0000000000
--- a/docs/manual/mod/mpm_common.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mpm_common.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mpm_common.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mpm_common.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mpm_common.html.de b/docs/manual/mod/mpm_common.html.de
deleted file mode 100644
index c270869254..0000000000
--- a/docs/manual/mod/mpm_common.html.de
+++ /dev/null
@@ -1,978 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_common - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Allgemeine Direktiven der Apache-MPMs</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mpm_common.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_common.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_common.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Eine Sammlung von Direktiven, die in mehr als einem
- Multi-Processing-Modul (MPM) implementiert sind.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr></table>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#group">Group</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#listen">Listen</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#listenbacklog">ListenBackLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startservers">StartServers</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#user">User</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AcceptMutex" id="AcceptMutex">AcceptMutex</a>-<a name="acceptmutex" id="acceptmutex">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Vom Apache verwendete Methode zur Serialisierung mehrerer
- Kindprozesse, die Anfragen an Netzwerk-Sockets entgegennehmen.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AcceptMutex Default|<var>Methode</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AcceptMutex Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">AcceptMutex</code> bestimmt die
- Methode, die der Apache zur Serialisierung mehrerer Kindprozesse
- verwendet, welche Anfragen an Netzwerk-Sockets entgegennehmen. Vor
- Apache 2.0 war diese Methode nur zur Kompilierungszeit einstellbar.
- Die optimale Methode ist sehr stark von der Architektur und
- Plattform abhängig. Lesen Sie bitte <a href="../misc/perf-tuning.html">Perfomance-Hinweise</a> für
- weitere Details.</p>
-
- <p>Wenn die Direktive auf <code>Default</code> eingestellt ist, dann
- wird die zur Kompilierungszeit gewählte Voreinstellung verwendet.
- Weitere mögliche Methoden sind unten angegeben. Beachten Sie, dass
- nicht alle Methoden auf allen Plattformen verfügbar sind. Wird
- eine Methode angegeben, die nicht verfügbar ist, dann wird
- eine Nachricht in das Fehlerprotokoll geschrieben, welche die
- verfügbaren Methoden auflistet.</p>
-
- <dl>
- <dt><code>flock</code></dt>
- <dd>verwendet die Systemfunktion <code>flock(2)</code>, um die
- durch die <code class="directive"><a href="#lockfile">LockFile</a></code>-Direktive definierte Datei zu sperren.</dd>
-
- <dt><code>fcntl</code></dt>
- <dd>verwendet die Systemfunktion <code>fcntl(2)</code>, um die
- durch die <code class="directive"><a href="#lockfile">LockFile</a></code>-Direktive definierte Datei zu sperren.</dd>
-
- <dt><code>posixsem</code></dt>
- <dd>verwendet POSIX-kompatible Semaphore, um den Mutex zu
- implementieren.</dd>
-
- <dt><code>pthread</code></dt>
- <dd>verwendet gemäß der POSIX-Thread-Spezifikation
- implementierte POSIX-Mutexe.</dd>
-
- <dt><code>sysvsem</code></dt>
- <dd>verwendet Semaphoren des SysV-Typs, um den Mutex zu
- implementieren.</dd>
- </dl>
-
- <p>Um die bei der Kompilierung gewählte Voreinstellung für
- Ihr System herauszufinden, können Sie Ihr <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> auf <code>debug</code> setzen. Dann wird der
- voreingestellte <code class="directive">AcceptMutex</code> ins <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> geschrieben.</p>
-
- <div class="warning"><h3>Warnung</h3>
- <p>Auf den meisten Systemen stoppt der Server mit der Beantwortung von
- Anfragen, wenn die Option <code>pthread</code> ausgewählt wurde und
- ein Kindprozess unkontrolliert endet während er den
- <code>AcceptCntl</code>-Mutex hält. In diesem Fall muss der Server
- manuell neu gestartet werden, um wieder weiter zu arbeiten.</p>
- <p>Eine Ausnahme stellt Solaris dar, da es einen Mechanismus anbietet, den
- der Apache verwendet und der üblicherweise die Freigabe des Mutex
- erlaubt, nachdem ein Kindprozess, der gerade einen Mutex hält,
- abgestürzt ist.</p>
- <p>Wenn Ihr System die Funktion
- <code>pthread_mutexattr_setrobust_np()</code> bereitstellt, können
- Sie wahrscheinlich die Option <code>pthread</code> problemlos
- verwenden.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a>-<a name="coredumpdirectory" id="coredumpdirectory">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Verzeichnis, in das der Apache zu wechseln versucht, bevor er
- einen Hauptspeicherauszug erstellt</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CoreDumpDirectory <var>Verzeichnis</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für die Voreinstellung siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Dies beeinflusst das Verzeichnis, in welches der Apache zu wechseln
- versucht, bevor er einen Hauptspeicherauszug <span class="transnote">(<em>Anm.d.Ü.:</em> einen
- so genannten Core-Dump)</span> erstellt. Die Voreinstellung ist das
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>-Verzeichnis. Da dieses
- jedoch nicht für den Benutzer beschreibbar sein soll, unter dem
- der Server läuft, werden normalerweise keine
- Hauptspeicherauszüge geschrieben. Wenn Sie zum Debuggen
- einen Hauptspeicherauszug haben möchten, können Sie
- ihn mit dieser Direktive an einem anderen Ort ablegen lassen.</p>
-
- <div class="note"><h3>Hauptspeicherauszüge unter Linux</h3>
- <p>Wenn Apache als <code>root</code> startet und zu einem anderen Benutzer
- wechselt, <em>deaktiviert</em> der Linux-Kernel Hauptspeicherauszüge
- auch dann, wenn der Prozess in dem Verzeichnis schreiben darf. Ab Linux
- 2.4 reaktiviert Apache (ab 2.0.46) Hauptspeicherauszüge wieder,
- jedoch nur dann, wenn Sie explizit
- <code class="directive">CoreDumpDirectory</code> konfigurieren.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableExceptionHook" id="EnableExceptionHook">EnableExceptionHook</a>-<a name="enableexceptionhook" id="enableexceptionhook">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Aktiviert einen Hook, der nach einem Absturz noch
-Ausnahmefehler behandeln lassen kann</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>EnableExceptionHook On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>EnableExceptionHook Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar seit Version 2.0.49</td></tr>
-</table>
- <p>Diese Direktive ist aus Sicherheitsgründen nur verfügbar,
- wenn der Server mit der Option <code>--enable-exception-hook</code>
- konfiguriert wurde. Sie aktiviert einen Hook, der es externen Modulen
- erlaubt, sich dort einzuhängen und nach dem Absturz eines
- Kindprozesses noch Aktionen durchzuführen.</p>
-
- <p>Es existieren bereits zwei Module, <code>mod_whatkilledus</code> und
- <code>mod_backtrace</code>, welche diesen Hook verwenden. Weitere
- Informationen hierzu finden Sie auf Jeff Trawicks <a href="http://www.apache.org/~trawick/exception_hook.html">EnableExceptionHook-Seite</a>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Group" id="Group">Group</a>-<a name="group" id="group">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Benutzergruppe, unter welcher der Server Anfragen
- beantwortet</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Group <var>Unix-Gruppe</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Group #-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Seit Apache 2.0 nur in der globalen Server-Konfiguration
- gültig</td></tr>
-</table>
- <p>Die Direktive <code class="directive">Group</code> bestimmt die
- Benutzergruppe, unter welcher der Server Anfragen beantwortet.
- Um diese Direktive zu verwenden, muss der Server als <code>root</code> gestartet
- werden. Wenn Sie den Server unter einem nicht-root-Benutzer starten,
- wird er nicht zur angegebenen Gruppe wechseln können und statt
- dessen weiter mit der Gruppe des ursprünglichen Benutzers
- laufen. <var>Unix-Gruppe</var> kann sein:</p>
-
- <dl>
- <dt>Ein Gruppenname</dt>
- <dd>Verweist auf die durch den Namen angegebene Gruppe.</dd>
-
- <dt><code>#</code> gefolgt von einer Gruppennummer.</dt>
- <dd>Verweist auf die durch ihre Nummer angegebene Gruppe.</dd>
- </dl>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- Group www-group
- </code></p></div>
-
- <p>Es wird empfohlen, dass Sie eine neue Gruppe speziell zum Betrieb
- des Servers erstellen. Einige Administratoren verwenden den Benutzer
- <code>nobody</code>. Dies ist jedoch nicht immer möglich
- oder gewünscht.</p>
-
- <div class="warning"><h3>Sicherheit</h3>
- <p>Setzen Sie <code class="directive">Group</code> (oder <code class="directive"><a href="#user">User</a></code>) nicht auf <code>root</code>,
- solange Sie nicht ganz genau wissen, was Sie tun und welche Gefahren
- Sie eingehen.</p>
- </div>
-
- <p>Wichtiger Hinweis: Die Verwendung der Direktive innerhalb von
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- wird nicht länger unterstützt. Benutzen Sie <code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> um Ihren Server
- für <a href="mod_suexec.html">suexec</a> einzurichten.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Obwohl die Direktive <code class="directive">Group</code> in den MPMs
- <code class="module"><a href="../mod/beos.html">beos</a></code> und <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> existiert, ist
- sie dort tatsächlich eine Leeranweisung und exisitert nur
- aus Kompatibilitätsgründen.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Listen" id="Listen">Listen</a>-<a name="listen" id="listen">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>IP-Adressen und Ports, an denen der Server lauscht</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Listen [<var>IP-Addresse</var>:]<var>Port</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Seit Apache 2.0 vorgeschrieben</td></tr>
-</table>
- <p>Die Direktive <code class="directive">Listen</code> weist den Apache an,
- nur an den angegebenen IP-Adressen oder Ports zu lauschen.
- Standardmäßig antwortet er auf alle Anfragen an allen
- IP-Interfaces. <code class="directive">Listen</code> ist nun eine notwendige
- Anweisung. Wenn sie nicht in der Konfigurationsdatei enthalten ist,
- wird der Server-Start fehlschlagen. Dies ist eine Änderung
- gegenüber früheren Versionen des Apache.</p>
-
- <p>Die Direktive <code class="directive">Listen</code> weist den Server an,
- ankommende Anfragen am angegebenen Port oder der
- Kombination aus Adresse und Port entgegenzunehmen. Wenn nur eine Portnummer
- angegeben ist, dann lauscht der Server am angegebenen Port an allen
- Interfaces. Wenn sowohl eine IP-Adresse als auch ein Port angegeben
- sind, dann lauscht der Server am angegeben Port und Interface.</p>
-
- <p>Es können mehrere <code class="directive">Listen</code>-Anweisungen
- verwendet werden, um eine Reihe von Adressen und Port anzugeben, an
- denen gelauscht werden soll. Der Server antwortet auf Anfragen von
- jedem der aufgeführten Adressen und Ports.</p>
-
- <p>Um beispielsweise den Server Verbindungen an den beiden Ports 80 und
- 8000 annehmen zu lassen, verwenden Sie:</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>Um den Server Verbindungen an zwei angegebenen Interfaces und Ports
- annehmen zu lassen, verwenden Sie:</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>IPv6-Adressen müssen wie in dem folgenden Beispiel in eckige
- Klammern eingeschlossen werden:</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../dns-caveats.html">DNS-Probleme</a></li>
-<li><a href="../bind.html">Bestimmen, welche Adressen und Ports der
-Apache verwendet</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ListenBackLog" id="ListenBackLog">ListenBackLog</a>-<a name="listenbacklog" id="listenbacklog">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Maximale Länge der Warteschlange schwebender
- Verbindungen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ListenBacklog <var>backlog</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ListenBacklog 511</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die maximale Länge der Warteschlange schwebender Verbindungen.
- Üblicherweise ist keine Feineinstellung notwendig oder sinnvoll,
- auf einigen System kann es jedoch gewünscht sein, diesen Wert bei
- TCP-SYN-Angriffen zu erhöhen. Beachten Sie auch die Beschreibung des
- backlog-Parameters der Systemfunktion <code>listen(2)</code>.</p>
-
- <p>Der Wert wird vom Betriebssystem oft auf eine niedrigere
- Einstellung begrenzt. Dies variiert von Betriebssystem zu Betriebssystem.
- Beachten Sie auch, dass viele Betriebssyteme nicht genau beachten,
- was für backlog angegeben ist, jedoch einen Wert basierend auf der
- Angabe (normalerweiseweise jedoch größer als diese) verwenden.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LockFile" id="LockFile">LockFile</a>-<a name="lockfile" id="lockfile">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Ablageort der Lock-Datei für die Serialisierung von
-entgegengenommenen Anfragen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LockFile <var>Dateiname</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>LockFile logs/accept.lock</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">LockFile</code> legt den Pfad zur
- Lock-Datei fest, die verwendet wird, wenn der Apache mit einer der
- <code class="directive"><a href="#acceptmutex">AcceptMutex</a></code>-Einstellungen
- <code>fcntl</code> oder <code>flock</code> verwendet wird. Die Anweisung
- sollte normalerweise bei der Voreinstellung belassen werden.
- Der Hauptgrund, sie zu ändern, ist, wenn das
- <code>logs</code>-Verzeichnis auf einem per NFS-eingebundenen Laufwerk
- liegt, da <strong>die Lock-Datei auf einer lokalen Platte abgelegt sein
- muss</strong>. Die PID <span class="transnote">(<em>Anm.d.Ü.:</em> Prozess-ID)</span> des
- Hauptserverprozesses wird automatisch an den Dateinamen angehängt.</p>
-
- <div class="warning"><h3>Sicherheit</h3>
- <p>Es ist am besten, die Ablage in einem allgemein <span class="transnote">(<em>Anm.d.Ü.:</em> für
- jedermann)</span> beschreibbaren
- Verzeichnis wie <code>/var/tmp</code> <em>zu vermeiden</em>, da
- ein Denial-of-Servide-Angriff gestartet werden könnte und der
- Server am Start gehindert werden könnte, indem eine Lock-Datei
- mit dem gleichen Namen erstellt wird, wie der Server sie zu erstellen
- versuchen würde.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#acceptmutex">AcceptMutex</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxClients" id="MaxClients">MaxClients</a>-<a name="maxclients" id="maxclients">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Maximale Anzahl der Kindprozesse, die zur Bedienung von Anfragen
- gestartet wird</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxClients <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">MaxClients</code> setzt die Grenze
- für die Anzahl gleichzeitig bedienter Anfragen. Jeder
- Verbindungsversuch oberhalb der <code class="directive">MaxClients</code>-Begrenzung wird üblicherweise in eine
- Warteschlange gestellt, bis zu einer Anzahl basierend auf der
- <code class="directive"><a href="#listenbacklog">ListenBacklog</a></code>-Anweisung.
- Sobald ein Kindprozess am Ende einer anderen Anfrage freigegeben wird,
- wird die Verbindung bedient.</p>
-
- <p>Für Server ohne Thread-Unterstützung (<em>z.B.</em>
- <code class="module"><a href="../mod/prefork.html">prefork</a></code>) wird <code class="directive">MaxClients</code> als
- maximale Anzahl der Kindprozesse verstanden, die zur Bedienung von
- Anfragen gestartet werden. Die Voreinstellung ist <code>256</code>. Um
- diesen Wert zu erhöhen, muss auch <code class="directive"><a href="#serverlimit">ServerLimit</a></code> angehoben werden.</p>
-
- <p>Bei Servern mit Thread-Unterstützung und bei Hybrid-Servern
- (<em>z.B.</em> <code class="module"><a href="../mod/beos.html">beos</a></code> oder <code class="module"><a href="../mod/worker.html">worker</a></code>)
- begrenzt <code class="directive">MaxClients</code> die Gesamtzahl der Threads,
- die für die Bedienung von Anfragen verfügbar sind.
- Die Voreinstellung für <code class="module"><a href="../mod/beos.html">beos</a></code> ist <code>50</code>.
- Bei Hybrid-MPMs ist die Voreinstellung <code>16</code> (<code class="directive"><a href="#serverlimit">ServerLimit</a></code>) multipliziert mit
- dem Wert <code>25</code> (<code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>). Um <code class="directive">MaxClients</code>
- auf einen Wert zu erhöhen, der mehr als 16 Prozesse erfordert,
- müssen Sie daher auch <code class="directive"><a href="#serverlimit">ServerLimit</a></code> anheben.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxMemFree" id="MaxMemFree">MaxMemFree</a>-<a name="maxmemfree" id="maxmemfree">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Maximale Menge des Arbeitsspeichers, den die
- Haupt-Zuteilungsroutine verwalten darf, ohne free()
- aufzurufen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxMemFree <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>MaxMemFree 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">MaxMemFree</code> gibt die maximale
- Menge freier Kilobytes an, welche die Haupt-Zuteilungsroutine verwalten
- darf, ohne <code>free()</code> aufzurufen. Wenn keine Angabe gemacht wird,
- oder Null angegeben ist, wird dieser Wert nicht eingeschränkt.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerChild" id="MaxRequestsPerChild">MaxRequestsPerChild</a>-<a name="maxrequestsperchild" id="maxrequestsperchild">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Obergrenze für die Anzahl von Anfragen, die ein einzelner
- Kindprozess während seines Lebens bearbeitet</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxRequestsPerChild <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>MaxRequestsPerChild 10000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">MaxRequestsPerChild</code> legt die
- Grenze für die Anzahl von Anfragen fest, die ein einzelner
- Kinprozess während seines Lebens bearbeitet. Nach
- <code class="directive">MaxRequestsPerChild</code> Anfragen stirbt der
- Kindprozess. Wenn <code class="directive">MaxRequestsPerChild</code>
- <code>0</code> ist, endet der Prozess niemals.</p>
-
- <div class="note"><h3>Abweichende Voreinstellungen</h3>
- <p>Die Voreinstellung für <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> und
- <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> ist <code>0</code>.</p>
- </div>
-
- <p>Die Begrenzung von <code class="directive">MaxRequestsPerChild</code> auf einen
- Wert ungleich Null hat zwei vorteilhafte Auswirkungen:</p>
-
- <ul>
- <li>sie begrenzt die Menge an Arbeitsspeicher, die ein Prozess
- durch (versehentliche) Speicherlecks verbrauchen kann.</li>
-
- <li>das Festlegen einer endlichen Lebensdauer von Prozessen hilft, die
- Anzahl von Prozessen zu reduzieren, wenn die Serverlast
- zurückgeht.</li>
- </ul>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Bei <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>-Anfragen
- wird nur die erste Anfrage für diese begrenzung gezählt.
- Eigentlich wird nur die Begrenzung für die Anzahl der
- <em>Verbindungen</em> pro Kindprozess geändert.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxSpareThreads" id="MaxSpareThreads">MaxSpareThreads</a>-<a name="maxsparethreads" id="maxsparethreads">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Maximale Anzahl unbeschäftigter Threads</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxSpareThreads <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Maximale Anzahl unbeschäftigter Threads. Die verschiedenen MPMs
- behandeln diese Anweisung unterschiedlich.</p>
-
- <p>Die Voreinstellung für <code class="module"><a href="../mod/perchild.html">perchild</a></code> ist
- <code>MaxSpareThreads 10</code>. Das MPM überwacht die Anzahl der
- unbeschäftigten Threads auf der Basis einzelner Kindprozesse. Wenn
- zu viele unbeschäftigte Threads in einem Kindprozess existieren,
- beendet der Server Threads innerhalb dieses Kindprozesses.</p>
-
- <p>Die Voreinstellung für <code class="module"><a href="../mod/worker.html">worker</a></code>,
- <code class="module"><a href="../mod/leader.html">leader</a></code> und <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> ist
- <code>MaxSpareThreads 250</code>. Diese MPMs behandeln Threads
- auf einer serverweiten Basis. Wenn zu viele unbeschäftigte Threads
- im Server existieren, dann werden solange Kindprozesse beendet, bis
- die Anzahl der unbeschäftigten Threads kleiner als der
- angegebene Wert ist.</p>
-
- <p>Die Voreinstellung für <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ist
- <code>MaxSpareThreads 100</code>. Da dieses MPM nur einen einzigen
- Prozess ausführt, ist die Zählung überschüssiger
- Threads ebenfalls serverweit.</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> and <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> arbeiten
- ähnlich wie <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>. Die Voreinstellung
- für <code class="module"><a href="../mod/beos.html">beos</a></code> ist <code>MaxSpareThreads 50</code>.
- Die Voreinstellung für <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ist
- <code>10</code>.</p>
-
- <div class="note"><h3>Restriktionen</h3>
- <p>Der Wertebereich von <code class="directive">MaxSpareThreads</code>
- ist eingeschränkt. Apache korrigiert den angegebenen Wert
- automatisch gemäß den folgenden Regeln:</p>
- <ul>
- <li><code class="module"><a href="../mod/perchild.html">perchild</a></code> verlangt, dass <code class="directive">MaxSpareThreads</code> kleiner oder gleich <code class="directive"><a href="#threadlimit">ThreadLimit</a></code> ist.</li>
-
- <li><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> verlangt einen Wert größer
- als <code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code>.</li>
-
- <li>Bei <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> und
- <code class="module"><a href="../mod/worker.html">worker</a></code> muss der Wert größer oder gleich
- der Summe aus <code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code> und
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> sein.</li>
- </ul>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code></li>
-<li><code class="directive"><a href="#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MinSpareThreads" id="MinSpareThreads">MinSpareThreads</a>-<a name="minsparethreads" id="minsparethreads">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Minimale Anzahl unbeschäftigter Threads, die zur
- Bedienung von Anfragespitzen zur Verfügung stehen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MinSpareThreads <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Minimale Anzahl unbeschäftigter Threads, um Anfragespitzen
- zu bedienen. Die verschiedenen MPMs behandeln die Anweisung
- unterschiedlich.</p>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> verwendet die Voreinstellung
- <code>MinSpareThreads 5</code> und überwacht die Anzahl der
- unbeschäftigten Threads auf der Basis einzelner Kindprozesse. Wenn
- in einem Kindprozess nicht genügend unbeschäftigte
- Threads vorhanden sind, erstellt der Server neue Threads innerhalb
- dieses Kindprozesses. Wenn Sie also <code class="directive"><a href="../mod/perchild.html#numservers">NumServers</a></code> auf <code>10</code> und <code class="directive">MinSpareThreads</code> auf einen Wert von <code>5</code> setzen,
- haben Sie mindestens 50 unbeschäftigte Threads auf Ihrem
- System.</p>
-
- <p><code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code> und
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> verwenden eine Voreinstellung von
- <code>MinSpareThreads 75</code> und behandeln unbeschäftigte
- Threads auf serverweiter Basis. Wenn nicht genügend
- unbeschäftigte Threads im Server vorhanden sind, dann
- werden solange Kindprozesse erzeugt, bis die Anzahl unbeschäftigter
- Threads größer als der angegebene Wert ist.</p>
-
- <p><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> verwendet die Voreinstellung
- <code>MinSpareThreads 10</code> und verfolgt dies serverweit, da
- es ein Einzelprozess-MPM ist.</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> und <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> arbeiten
- ähnlich wie <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>. Die Voreinstellung
- für <code class="module"><a href="../mod/beos.html">beos</a></code> ist <code>MinSpareThreads 1</code>.
- Die Voreinstellung für <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ist
- <code>5</code>.</p>
-
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#maxsparethreads">MaxSpareThreads</a></code></li>
-<li><code class="directive"><a href="#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="PidFile" id="PidFile">PidFile</a>-<a name="pidfile" id="pidfile">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Datei, in welcher der Server die Prozess-ID des Daemons
-ablegt</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>PidFile <var>Dateiname</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>PidFile logs/httpd.pid</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">PidFile</code> bestimmt die Datei,
- in welcher der Server die Prozess-ID des Daemons ablegt. Wenn der
- Dateiname nicht absolut angegeben wird, wird er relativ zu
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> interpretiert.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- PidFile /var/run/apache.pid
- </code></p></div>
-
- <p>Es ist oft hilfreich, dem Server ein Signal senden zu können,
- damit er seine <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>s und
- <code class="directive"><a href="../mod/mod_log_config.html#transferlog">TransferLog</a></code>s
- schließt und dann neu öffnet und seine
- Konfigurationsdateien neu einliest. Dies kann durch Senden eines
- SIGHUP-Signals (kill -1) an die Prozess-ID geschehen, die im
- <code class="directive">PidFile</code> eingetragen ist.</p>
-
- <p>Die <code class="directive">PidFile</code>-Datei unterliegt den
- gleichen Warnungen über die Ablage von Protokolldateien
- und <a href="../misc/security_tips.html#serverroot">Sicherheit</a>.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Ab Apache 2 wird empfohlen, nur das Skript <a href="../programs/apachectl.html">apachectl</a> zum (Neu-)Starten
- und Stoppen des Servers zu verwenden.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScoreBoardFile" id="ScoreBoardFile">ScoreBoardFile</a>-<a name="scoreboardfile" id="scoreboardfile">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Ablageort der Datei, die zur Speicherung von Daten zur
- Koordinierung der Kindprozesse verwendet wird</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScoreBoardFile <var>Dateipfad</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>ScoreBoardFile logs/apache_status</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Apache verwendet ein Scoreboard zur Kommunikation zwischen
- seinen Eltern- und Kindprozessen. Einige Architekturen erfordern
- eine Datei zur Unterstützung der Kommunikation. Wenn die Datei
- undefiniert bleibt, versucht der Apache zuerst, das Scoreboard im
- Arbeitsspeicher zu erstellen (Verwendung von anonymem Shared-Memory),
- und versucht bei einem Fehlschlag anschließend die Datei auf
- der Festplatte zu erstellen (Verwendung von Datei-basiertem
- Shared-Memory). Die Angabe dieser Direktive veranlaßt den
- Apache stets, die Datei auf der Festplatte zu erstellen.</p>
-
- <div class="example"><h3>Beispiel</h3><p><code>
- ScoreBoardFile /var/run/apache_status
- </code></p></div>
-
- <p>Datei-basiertes Shared-Memory ist für Applikationen von
- Drittanbietern hilfreich, die direkten Zugriff auf das Scoreboard
- benötigen.</p>
-
- <p>Wenn Sie eine <code class="directive">ScoreBoardFile</code>-Anweisung
- verwenden, erreichen Sie eventuell eine höhere Geschwindigkeit, wenn
- Sie die Datei auf einer RAM-Disk ablegen. Achten Sie darauf, die
- gleichen Warnungen wie über die Ablage von Protokolldateien und
- <a href="../misc/security_tips.html">Sicherheit</a> zu beherzigen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../stopping.html">Apache beenden und neu
- starten</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SendBufferSize" id="SendBufferSize">SendBufferSize</a>-<a name="sendbuffersize" id="sendbuffersize">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Größe des TCP-Puffers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SendBufferSize <var>Bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>SendBufferSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Der Server setzt die Größe des TCP-Puffers auf die
- angegebene Anzahl Bytes. Dies ist sehr hilfreich, um Voreinstellungen
- alter Standardbetriebssysteme für Hochgeschwindigkeitsverbindungen
- mit hoher Latenzzeit anzuheben (<em>d.h.</em> 100ms oder so, wie bei
- Interkontinentalverbindungen).</p>
-
- <p>Wird der Wert auf <code>0</code> gesetzt, dann verwendet der Server
- die Voreinstellung des Betriebssystems.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerLimit" id="ServerLimit">ServerLimit</a>-<a name="serverlimit" id="serverlimit">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Obergrenze für die konfigurierbare Anzahl von
- Prozessen</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerLimit <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Bei dem MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> bestimmt die Direktive
- den während der Lebensdauer des Apache-Prozesses maximal
- einstellbaren Wert für <code class="directive"><a href="#maxclients">MaxClients</a></code>. Beim MPM
- <code class="module"><a href="../mod/worker.html">worker</a></code> bestimmt die Direktive in Verbindung mit
- <code class="directive"><a href="#threadlimit">ThreadLimit</a></code> den Maximalwert
- für <code class="directive"><a href="#maxclients">MaxClients</a></code>
- für die Lebensdauer des Apache-Prozesses. Jeder Versuch, diese
- Anweisung während eines Neustarts zu ändern, wird ignoriert.
- <code class="directive"><a href="#maxclients">MaxClients</a></code> kann jedoch
- während eines Neustarts geändert werden.</p>
-
- <p>Lassen Sie besondere Vorsicht bei der Verwendung dieser Direktive
- walten. Wenn <code class="directive">ServerLimit</code> auf einen Wert deutlich
- höher als notwendig gesetzt wird, wird zusätzliches,
- unbenutztes Shared-Memory belegt. Wenn sowohl
- <code class="directive">ServerLimit</code> als auch <code class="directive"><a href="#maxclients">MaxClients</a></code> auf Werte gesetzt werden, die
- größer sind, als das System sie handhaben kann, dann kann
- der Apache möglicherweise nicht starten, oder das System kann
- instabil werden.</p>
-
- <p>Verwenden Sie die Direktive bei dem MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code>
- nur, wenn Sie <code class="directive"><a href="#maxclients">MaxClients</a></code>
- auf mehr als 256 (Voreinstellung) setzen müssen. Setzen Sie den
- Wert nicht höher als den Wert, den Sie für <code class="directive"><a href="#maxclients">MaxClients</a></code> angeben möchten.</p>
-
- <p>Verwenden Sie die Direktive bei <code class="module"><a href="../mod/worker.html">worker</a></code>,
- <code class="module"><a href="../mod/leader.html">leader</a></code> und <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> nur, wenn Ihre
- <code class="directive"><a href="#maxclients">MaxClients</a></code>- und
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>-Einstellungen
- mehr als 16 Serverprozesse (Voreinstellung) erfordern. Setzen Sie den
- Wert dieser Direktive nicht höher, als die Anzahl der Serverprozesse,
- die dafür erforderlich ist, was Sie bei <code class="directive"><a href="#maxclients">MaxClients</a></code> und
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> angeben
- möchten.</p>
-
- <p>Verwenden Sie die Direktive beim MPM <code class="module"><a href="../mod/perchild.html">perchild</a></code> nur,
- wenn Sie <code class="directive"><a href="../mod/perchild.html#numservers">NumServers</a></code> auf einen
- Wert größer als 8 (Voreinstellung) setzen müssen.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Eine feste Begrenzung von <code>ServerLimit 20000</code> ist in den
- Server einkompiliert (bei dem MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> 200000).
- Dies soll unangenehme Effekte durch Tippfehler verhindern.</p>
- </div>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><a href="../stopping.html">Apache beenden und neu
- starten</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="StartServers" id="StartServers">StartServers</a>-<a name="startservers" id="startservers">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Anzahl der Kindprozesse des Servers, die beim Start erstellt
- werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>StartServers <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive <code class="directive">StartServers</code> bestimmt
- die Anzahl der Kindprozesse des Servers, die beim Start erstellt
- werden. Da die Anzahl der Prozesse abhängig von der Last
- dynamisch kontrolliert wird, besteht normalerweise wenig
- Grund für eine Änderung dieses Parameters.</p>
-
- <p>Die Voreinstellung unterscheidet sich von MPM zu MPM. Bei
- <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> und
- <code class="module"><a href="../mod/worker.html">worker</a></code> ist die Voreinstellung
- <code>StartServers 3</code>. Die Voreinstellung bei
- <code class="module"><a href="../mod/prefork.html">prefork</a></code> ist <code>5</code> und bei
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> <code>2</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="StartThreads" id="StartThreads">StartThreads</a>-<a name="startthreads" id="startthreads">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Anzahl der Threads, die beim Start erstellt werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>StartThreads <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code></td></tr>
-</table>
- <p>Anzahl der Threads, die beim Start erstellt werden. Da die Anzahl
- der Threads abhängig von der Last dynamisch kontrolliert wird,
- besteht normalerweise wenig Grund für eine Änderung
- dieses Parameters.</p>
-
- <p>Die Voreinstellung für <code class="module"><a href="../mod/perchild.html">perchild</a></code> ist
- <code>StartThreads 5</code>. Die Direktive setzt während des
- Starts die Anzahl der Threads pro Prozess.</p>
-
- <p>Die Voreinstellung bei <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ist
- <code>StartThreads 50</code>. Da hier lediglich ein einzelner Prozess
- existiert, ist dies die Gesamtzahl der Threads, die beim Start
- erstellt wird, um Anfragen zu bedienen.</p>
-
- <p>Die Voreinstellung für <code class="module"><a href="../mod/beos.html">beos</a></code> ist <code>StartThreads
- 10</code>. Die Einstellung reflektiert ebenfalls die Gesamtzahl der Threads, die
- beim Start erstellt werden, um Anfragen zu bedienen.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadLimit" id="ThreadLimit">ThreadLimit</a>-<a name="threadlimit" id="threadlimit">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Bestimmt die Obergrenze der konfigurierbaren Anzahl von Threads
- pro Kindprozess</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ThreadLimit <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar für <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> ab
- Apache 2.0.41</td></tr>
-</table>
- <p>Die Direktive bestimmt den während der Lebensdauer des
- Apache-Prozesses maximal einstellbaren Wert für
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>. Jeder
- Versuch, diese Direktive während eines Neustarts zu ändern,
- wird ignoriert. <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- kann jedoch während eines Neustarts modifiziert werden bis zu dem
- Wert dieser Anweisung.</p>
-
- <p>Lassen Sie besondere Vorsicht bei der Verwendung dieser Direktive
- walten. Wenn <code class="directive">ThreadLimit</code> auf einen Wert
- deutlich höher als <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> gesetzt wird, wird
- zusätzliches, ungenutztes Shared-Memory belegt. Wenn sowohl
- <code class="directive">ThreadLimit</code> als auch <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> auf Werte gesetzt werden,
- die größer sind, als das System sie handhaben kann, dann kann
- der Apache möglicherweise nicht starten oder das System kann
- instabil werden. Setzen Sie den Wert dieser Direktive nicht höher
- als Ihre größte erwartete Einstellung für
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- während der aktuellen Ausführung des Apache.</p>
-
- <p>Die Voreinstellung für <code class="directive">ThreadLimit</code> ist
- <code>1920</code> wenn sie zusammen mit <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>
- verwendet wird, und <code>64</code> bei der Verwendung mit anderen
- MPMs.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Eine feste Begrenzung von <code>ThreadLimit 20000</code>
- (oder <code>ThreadLimit 15000</code> bei <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>)
- ist in den Server einkompiliert. Dies soll unangenehme Effekte durch
- Tippfehler verhindern.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadsPerChild" id="ThreadsPerChild">ThreadsPerChild</a>-<a name="threadsperchild" id="threadsperchild">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Anzahl der Threads, die mit jedem Kindprozess gestartet
- werden</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ThreadsPerChild <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>Für Details siehe Beschreibung</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Die Direktive legt die Anzahl der Threads fest, die mit jedem
- Kindprozess gestartet werden. Der Kindprozess erstellt diese Threads
- beim Start und erstellt später keine weiteren mehr. Wenn Sie ein
- MPM wie <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> verwenden, wo nur ein
- Kindprozess existiert, dann sollte diese Angabe hoch genug sein,
- die gesamte Last des Servers zu bewältigen. Wenn Sie ein MPM
- wie <code class="module"><a href="../mod/worker.html">worker</a></code> verwenden, wo mehrere Kindprozesse
- existieren, dann sollte die <em>Gesamt</em>zahl der Thread groß
- genug sein, die übliche Last auf dem Server zu bewältigen.</p>
-
- <p>Die Voreinstellung für <code class="directive">ThreadsPerChild</code> ist
- <code>64</code>, wenn <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> verwendet wird, und
- <code>25</code> bei der Verwendung der anderen MPMs.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadStackSize" id="ThreadStackSize">ThreadStackSize</a>-<a name="threadstacksize" id="threadstacksize">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Die Größe des Stacks in Bytes, der von Threads
-verwendet wird, die Client-Verbindungen bearbeiten.</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ThreadStackSize <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>65536 unter NetWare; variiert bei anderen Betriebssystemen.</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar seit Version 2.1</td></tr>
-</table>
- <p>Die Direktive <code class="directive">ThreadStackSize</code> legt die
- Größe des Stacks (für Autodaten) der Threads fest, die
- Client-Verbindungen bearbeiten und Module aufrufen, welche bei der
- Verarbeitung dieser Verbindungen helfen. In den meisten Fällen ist die
- Voreinstellung des Betriebssystems angemessen, doch unter bestimmten
- Umständen kann es sinnvoll sein, den Wert anzupassen:</p>
-
- <ul>
- <li>Auf Plattformen mit einer relativ kleinen Voreingestellung für
- die Größe des Thread-Stacks (z.B. HP-UX) kann der Apache bei
- der Verwendung einiger Drittanbietermodule, die einen relativ hohen Bedarf
- an Speicherplatz haben, abstürzen. Ebendiese Module arbeiten
- möglicherweise problemlos auf anderen Plattformen, wo der
- voreingestellte Thread-Stack größer ist. Derartige
- Abstürze können Sie vermeiden, indem Sie
- <code class="directive">ThreadStackSize</code> auf einen höheren Wert als die
- Betriebssystemvoreinstellung setzen. Eine solche Anpassung ist nur
- notwendig, wenn es vom Anbieter des Moduls so spezifiziert wurde oder die
- Diagnose eines Apache-Absturzes ergeben hat, das die
- Thread-Stackgröße zu klein war.</li>
-
- <li>Auf Plattformen, wo die voreingestellte Thread-Stackgröße
- für die Webserverkonfiguration deutlich größer als
- notwendig ist, kann eine größere Anzahl von Threads pro
- Kindprozess erreicht werden, wenn <code class="directive">ThreadStackSize</code>
- auf einen Wert kleiner als die Betriebssystemvoreinstellung gesetzt wird.
- Da es einzelne Anfragen geben kann, die mehr Stack zur Verarbeitung
- benötigen, sollte eine derartige Korrektur ausschließlich in
- Testumgebungen zum Einsatz kommen, auf denen die gesamte
- Webserververarbeitung ausprobiert werden kann. Eine Änderung der
- Webserverkonfiguration kann den aktuellen Wert der
- <code class="directive">ThreadStackSize</code> ungültig machen.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="User" id="User">User</a>-<a name="user" id="user">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Die Benutzerkennung, unter welcher der Server Anfragen
- beantwortet</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>User <var>Unix-User-ID</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>User #-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Seit Apache 2.0 nur in der globalen Server-Konfiguration
-gültig</td></tr>
-</table>
- <p>Die Direktive <code class="directive">User</code> legt die Benutzerkennung
- fest, mit der der Server Anfragen beantwortet. Um diese Anweisung
- zu verwenden, muss der Server als <code>root</code> gestartet werden.
- Wenn Sie den Server unter einem nicht-root-Benutzer starten, kann
- er nicht zu dem minder privilegierten Benutzer wechseln und wird statt
- dessen weiter mit der ursprünglichen Benutzerkennung laufen.
- Wenn Sie den Server als <code>root</code> starten, dann ist es normal,
- dass der Elternprozess als root weiterläuft.
- <var>Unix-User-ID</var> kann sein:</p>
-
- <dl>
- <dt>Ein Benutzername</dt>
- <dd>Verweist auf den durch Namen angegebenen Benutzer.</dd>
-
- <dt># gefolgt von einer Benutzernummer.</dt>
- <dd>Verweist auf einen durch eine Nummer angegebenen Benutzer.</dd>
- </dl>
-
- <p>Der Benutzer sollte keine Rechte besitzen, die dazu führen,
- dass er in der Lage ist, auf Dateien zuzugreifen, die nicht dafür
- bestimmt sind, für die Außenwelt sichtbar zu sein.
- Gleichermaßen sollte der Benutzer nicht in der Lage sein,
- Code auszuführen, der nicht für HTTP-Anfragen bestimmt ist.
- Es wird empfohlen, einen neuen Benutzer und eine neue Gruppe speziell
- zur Ausführung des Servers zu erstellen. Einige Administratoren
- verwenden den Benutzer <code>nobody</code>. Dies ist jedoch nicht
- immer wünschenswert, da der Benuter <code>nobody</code> andere
- Rechte auf dem System besitzen kann.</p>
-
- <div class="warning"><h3>Sicherheit</h3>
- <p>Setzen Sie <code class="directive">User</code> (oder <code class="directive"><a href="#group">Group</a></code>) nicht auf <code>root</code>,
- solange Sie nicht genau wissen, was Sie tun, und welches die Gefahren
- sind.</p>
- </div>
-
- <p>Beim MPM <code class="module"><a href="../mod/perchild.html">perchild</a></code>, das dafür gedacht ist,
- virtuelle Hosts unter verschiedenen Benutzerkennungen auszuführen,
- bestimmt die Direktive <code class="directive">User</code> die
- Benutzerkennung für den Hauptserver und bildet den Rückfallwert
- für <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Abschnitte ohne eine
- <code class="directive"><a href="../mod/perchild.html#assignuserid">AssignUserID</a></code>-Anweisung.</p>
-
- <p>Wichtiger Hinweis: Die Verwendung dieser Direktive innerhalb von
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> wird
- nicht mehr unterstützt. Benutzen Sie <code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code>, um Ihren Server
- für <a href="../suexec.html">suexec</a> einzurichten.</p>
-
- <div class="note"><h3>Anmerkung</h3>
- <p>Obwohl die Direktive <code class="directive">User</code> in den MPMs
- <code class="module"><a href="../mod/beos.html">beos</a></code> und <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> existiert, ist
- sie dort tatsächlich eine Leeranweisung und exisitert nur
- aus Kompatibilitätsgründen.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mpm_common.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_common.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_common.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_common.html.en b/docs/manual/mod/mpm_common.html.en
deleted file mode 100644
index 006d565c33..0000000000
--- a/docs/manual/mod/mpm_common.html.en
+++ /dev/null
@@ -1,907 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_common - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM Common Directives</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_common.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_common.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>A collection of directives that are implemented by
-more than one multi-processing module (MPM)</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr></table>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#group">Group</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#listen">Listen</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#listenbacklog">ListenBackLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startservers">StartServers</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#user">User</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AcceptMutex" id="AcceptMutex">AcceptMutex</a> <a name="acceptmutex" id="acceptmutex">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Method that Apache uses to serialize multiple children
-accepting requests on network sockets</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AcceptMutex Default|<var>method</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AcceptMutex Default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The <code class="directive">AcceptMutex</code> directives sets the
- method that Apache uses to serialize multiple children accepting
- requests on network sockets. Prior to Apache 2.0, the method was
- selectable only at compile time. The optimal method to use is
- highly architecture and platform dependent. For further details,
- see the <a href="../misc/perf-tuning.html">performance tuning</a>
- documentation.</p>
-
- <p>If this directive is set to <code>Default</code>, then the
- compile-time selected default will be used. Other possible
- methods are listed below. Note that not all methods are
- available on all platforms. If a method is specified which is
- not available, a message will be written to the error log
- listing the available methods.</p>
-
- <dl>
- <dt><code>flock</code></dt>
- <dd>uses the <code>flock(2)</code> system call to lock the
- file defined by the <code class="directive"><a href="#lockfile">LockFile</a></code> directive.</dd>
-
- <dt><code>fcntl</code></dt>
- <dd>uses the <code>fcntl(2)</code> system call to lock the
- file defined by the <code class="directive"><a href="#lockfile">LockFile</a></code> directive.</dd>
-
- <dt><code>posixsem</code></dt>
- <dd>uses POSIX compatible semaphores to implement the mutex.</dd>
-
- <dt><code>pthread</code></dt>
- <dd>uses POSIX mutexes as implemented by the POSIX Threads
- (PThreads) specification.</dd>
-
- <dt><code>sysvsem</code></dt>
- <dd>uses SySV-style semaphores to implement the mutex.</dd>
- </dl>
-
- <p>If you want to find out the compile time chosen default
- for your system, you may set your <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> to <code>debug</code>. Then the default <code class="directive">AcceptMutex</code> will be written into the <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>.</p>
-
- <div class="warning"><h3>Warning</h3>
- <p>On most systems, when the <code>pthread</code> option
- is selected, if a child process terminates abnormally
- while holding the <code>AcceptCntl</code> mutex the
- server will stop responding to requests. When this
- occurs, the server will require a manual restart to
- recover.</p>
- <p>Solaris is a notable exception as it provides a
- mechanism, used by Apache, which usually allows the
- mutex to be recovered after a child process terminates
- abnormally while holding a mutex.</p>
- <p>If your system implements the
- <code>pthread_mutexattr_setrobust_np()</code> function,
- you may be able to use the <code>pthread</code> option safely.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory" id="coredumpdirectory">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directory where Apache attempts to
-switch before dumping core</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CoreDumpDirectory <var>directory</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for the default setting</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>This controls the directory to which Apache attempts to
- switch before dumping core. The default is in the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directory, however
- since this should not be writable by the user the server runs
- as, core dumps won't normally get written. If you want a core
- dump for debugging, you can use this directive to place it in a
- different location.</p>
-
- <div class="note"><h3>Core Dumps on Linux</h3>
- <p>If Apache starts as root and switches to another user, the
- Linux kernel <em>disables</em> core dumps even if the directory is
- writable for the process. Apache (2.0.46 and later) reenables core dumps
- on Linux 2.4 and beyond, but only if you explicitly configure a <code class="directive">CoreDumpDirectory</code>.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="EnableExceptionHook" id="EnableExceptionHook">EnableExceptionHook</a> <a name="enableexceptionhook" id="enableexceptionhook">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables a hook that runs exception handlers
-after a crash</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>EnableExceptionHook On|Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>EnableExceptionHook Off</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.49 and later</td></tr>
-</table>
- <p>For safety reasons this directive is only available if the server was
- configured with the <code>--enable-exception-hook</code> option. It
- enables a hook that allows external modules to plug in and do something
- after a child crashed.</p>
-
- <p>There are already two modules, <code>mod_whatkilledus</code> and
- <code>mod_backtrace</code> that make use of this hook. Please have a
- look at Jeff Trawick's <a href="http://www.apache.org/~trawick/exception_hook.html">EnableExceptionHook site</a> for more information about these.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Group" id="Group">Group</a> <a name="group" id="group">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Group under which the server will answer
-requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Group <var>unix-group</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Group #-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Only valid in global server config since Apache
-2.0</td></tr>
-</table>
- <p>The <code class="directive">Group</code> directive sets the group under
- which the server will answer requests. In order to use this
- directive, the server must be run initially as <code>root</code>. If
- you start the server as a non-root user, it will fail to change to the
- specified group, and will instead continue to run as the group of the
- original user. <var>Unix-group</var> is one of:</p>
-
- <dl>
- <dt>A group name</dt>
- <dd>Refers to the given group by name.</dd>
-
- <dt><code>#</code> followed by a group number.</dt>
- <dd>Refers to a group by its number.</dd>
- </dl>
-
- <div class="example"><h3>Example</h3><p><code>
- Group www-group
- </code></p></div>
-
- <p>It is recommended that you set up a new group specifically for
- running the server. Some admins use user <code>nobody</code>,
- but this is not always possible or desirable.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Don't set <code class="directive">Group</code> (or <code class="directive"><a href="#user">User</a></code>) to <code>root</code> unless
- you know exactly what you are doing, and what the dangers are.</p>
- </div>
-
- <p>Special note: Use of this directive in <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> is no longer supported. To
- configure your server for <a href="mod_suexec.html">suexec</a> use
- <code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code>.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Although the <code class="directive">Group</code> directive is present
- in the <code class="module"><a href="../mod/beos.html">beos</a></code> and <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> MPMs,
- it is actually a no-op there and only exists for compatibility
- reasons.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Listen" id="Listen">Listen</a> <a name="listen" id="listen">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>IP addresses and ports that the server
-listens to</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Listen [<var>IP-address</var>:]<var>portnumber</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Required directive since Apache 2.0</td></tr>
-</table>
- <p>The <code class="directive">Listen</code> directive instructs Apache to
- listen to only specific IP addresses or ports; by default it
- responds to requests on all IP interfaces. <code class="directive">Listen</code>
- is now a required directive. If it is not in the config file, the
- server will fail to start. This is a change from previous versions
- of Apache.</p>
-
- <p>The <code class="directive">Listen</code> directive tells the server to
- accept incoming requests on the specified port or address-and-port
- combination. If only a port number is specified, the server listens to
- the given port on all interfaces. If an IP address is given as well
- as a port, the server will listen on the given port and
- interface.</p>
-
- <p>Multiple <code class="directive">Listen</code> directives may be used to
- specify a number of addresses and ports to listen to. The server will
- respond to requests from any of the listed addresses and ports.</p>
-
- <p>For example, to make the server accept connections on both
- port 80 and port 8000, use:</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>To make the server accept connections on two specified
- interfaces and port numbers, use </p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>IPv6 addresses must be surrounded in square brackets, as in the
- following example:</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../dns-caveats.html">DNS Issues</a></li>
-<li><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ListenBackLog" id="ListenBackLog">ListenBackLog</a> <a name="listenbacklog" id="listenbacklog">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum length of the queue of pending connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ListenBacklog <var>backlog</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ListenBacklog 511</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The maximum length of the queue of pending connections.
- Generally no tuning is needed or desired, however on some
- systems it is desirable to increase this when under a TCP SYN
- flood attack. See the backlog parameter to the
- <code>listen(2)</code> system call.</p>
-
- <p>This will often be limited to a smaller number by the
- operating system. This varies from OS to OS. Also note that
- many OSes do not use exactly what is specified as the backlog,
- but use a number based on (but normally larger than) what is
- set.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LockFile" id="LockFile">LockFile</a> <a name="lockfile" id="lockfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the accept serialization lock file</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>LockFile <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>LockFile logs/accept.lock</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The <code class="directive">LockFile</code> directive sets the path to
- the lockfile used when Apache is used with an <code class="directive"><a href="#acceptmutex">AcceptMutex</a></code> value of either
- <code>fcntl</code> or <code>flock</code>. This directive should
- normally be left at its default value. The main reason for changing
- it is if the <code>logs</code> directory is NFS mounted, since
- <strong>the lockfile must be stored on a local disk</strong>. The PID
- of the main server process is automatically appended to the
- filename.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>It is best to <em>avoid</em> putting this file in a world writable
- directory such as <code>/var/tmp</code> because someone could create
- a denial of service attack and prevent the server from starting by
- creating a lockfile with the same name as the one the server will try
- to create.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#acceptmutex">AcceptMutex</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxClients" id="MaxClients">MaxClients</a> <a name="maxclients" id="maxclients">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of child processes that will be created
-to serve requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxClients <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The <code class="directive">MaxClients</code> directive sets the limit
- on the number of simultaneous requests that will be served. Any
- connection attempts over the <code class="directive">MaxClients</code>
- limit will normally be queued, up to a number based on the
- <code class="directive"><a href="#listenbacklog">ListenBacklog</a></code>
- directive. Once a child process is freed at the end of a different
- request, the connection will then be serviced.</p>
-
- <p>For non-threaded servers (<em>i.e.</em>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>),
- <code class="directive">MaxClients</code> translates into the maximum
- number of child processes that will be launched to serve requests.
- The default value is <code>256</code>; to increase it, you must also raise
- <code class="directive"><a href="#serverlimit">ServerLimit</a></code>.</p>
-
- <p>For threaded and hybrid servers (<em>e.g.</em> <code class="module"><a href="../mod/beos.html">beos</a></code>
- or <code class="module"><a href="../mod/worker.html">worker</a></code>) <code class="directive">MaxClients</code> restricts
- the total number of threads that will be available to serve clients.
- The default value for <code class="module"><a href="../mod/beos.html">beos</a></code> is <code>50</code>. For
- hybrid MPMs the default value is <code>16</code> (<code class="directive"><a href="#serverlimit">ServerLimit</a></code>) multiplied by the value of
- <code>25</code> (<code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>). Therefore, to increase <code class="directive">MaxClients</code> to a value that requires more than 16 processes,
- you must also raise <code class="directive"><a href="#serverlimit">ServerLimit</a></code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxMemFree" id="MaxMemFree">MaxMemFree</a> <a name="maxmemfree" id="maxmemfree">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum amount of memory that the main allocator is allowed
-to hold without calling free()</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxMemFree <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxMemFree 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
- <p>The <code class="directive">MaxMemFree</code> directive sets the
- maximum number of free Kbytes that the main allocator is allowed
- to hold without calling <code>free()</code>. When not set, or when set
- to zero, the threshold will be set to unlimited.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerChild" id="MaxRequestsPerChild">MaxRequestsPerChild</a> <a name="maxrequestsperchild" id="maxrequestsperchild">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit on the number of requests that an individual child server
-will handle during its life</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxRequestsPerChild <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxRequestsPerChild 10000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The <code class="directive">MaxRequestsPerChild</code> directive sets
- the limit on the number of requests that an individual child
- server process will handle. After
- <code class="directive">MaxRequestsPerChild</code> requests, the child
- process will die. If <code class="directive">MaxRequestsPerChild</code> is
- <code>0</code>, then the process will never expire.</p>
-
- <div class="note"><h3>Different default values</h3>
- <p>The default value for <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> and
- <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> is <code>0</code>.</p>
- </div>
-
- <p>Setting <code class="directive">MaxRequestsPerChild</code> to a
- non-zero limit has two beneficial effects:</p>
-
- <ul>
- <li>it limits the amount of memory that process can consume
- by (accidental) memory leakage;</li>
-
- <li>by giving processes a finite lifetime, it helps reduce
- the number of processes when the server load reduces.</li>
- </ul>
-
- <div class="note"><h3>Note</h3>
- <p>For <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code> requests, only
- the first request is counted towards this limit. In effect, it
- changes the behavior to limit the number of <em>connections</em> per
- child.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxSpareThreads" id="MaxSpareThreads">MaxSpareThreads</a> <a name="maxsparethreads" id="maxsparethreads">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of idle threads</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxSpareThreads <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Maximum number of idle threads. Different MPMs deal with this
- directive differently.</p>
-
- <p>For <code class="module"><a href="../mod/perchild.html">perchild</a></code> the default is
- <code>MaxSpareThreads 10</code>. This MPM monitors the number of
- idle threads on a per-child basis. If there are too many idle
- threads in that child, the server will begin to kill threads
- within that child.</p>
-
- <p>For <code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code> and <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> the default is <code>MaxSpareThreads 250</code>.
- These MPMs deal with idle threads on a server-wide basis. If there
- are too many idle threads in the server then child processes are
- killed until the number of idle threads is less than this number.</p>
-
- <p>For <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> the default is
- <code>MaxSpareThreads 100</code>. Since this MPM runs a
- single-process, the spare thread count is also server-wide.</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> and <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> work
- similar to <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>. The default for
- <code class="module"><a href="../mod/beos.html">beos</a></code> is <code>MaxSpareThreads 50</code>. For
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> the default value is <code>10</code>.</p>
-
- <div class="note"><h3>Restrictions</h3>
- <p>The range of the <code class="directive">MaxSpareThreads</code> value
- is restricted. Apache will correct the given value automatically
- according to the following rules:</p>
- <ul>
- <li><code class="module"><a href="../mod/perchild.html">perchild</a></code> requires <code class="directive">MaxSpareThreads</code> to be less or equal than <code class="directive"><a href="#threadlimit">ThreadLimit</a></code>.</li>
-
- <li><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> wants the value to be greater than
- <code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code>.</li>
-
- <li>For <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> and
- <code class="module"><a href="../mod/worker.html">worker</a></code> the value must be greater or equal than
- the sum of <code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code>
- and <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>.</li>
- </ul>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code></li>
-<li><code class="directive"><a href="#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MinSpareThreads" id="MinSpareThreads">MinSpareThreads</a> <a name="minsparethreads" id="minsparethreads">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Minimum number of idle threads available to handle request
-spikes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MinSpareThreads <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Minimum number of idle threads to handle request spikes.
- Different MPMs deal with this directive
- differently.</p>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> uses a default of
- <code>MinSpareThreads 5</code> and monitors the number of idle
- threads on a per-child basis. If there aren't enough idle threads
- in that child, the server will begin to create new threads within
- that child. Thus, if you set <code class="directive"><a href="../mod/perchild.html#numservers">NumServers</a></code> to <code>10</code> and a <code class="directive">MinSpareThreads</code> value of <code>5</code>, you'll have
- at least 50 idle threads on your system.</p>
-
- <p><code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code> and
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> use a default of <code>MinSpareThreads
- 75</code> and deal with idle threads on a server-wide basis. If
- there aren't enough idle threads in the server then child
- processes are created until the number of idle threads is greater
- than number.</p>
-
- <p><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> uses a default of
- <code>MinSpareThreads 10</code> and, since it is a single-process
- MPM, tracks this on a server-wide bases.</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> and <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> work
- similar to <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>. The default for
- <code class="module"><a href="../mod/beos.html">beos</a></code> is <code>MinSpareThreads 1</code>. For
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> the default value is <code>5</code>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#maxsparethreads">MaxSpareThreads</a></code></li>
-<li><code class="directive"><a href="#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="PidFile" id="PidFile">PidFile</a> <a name="pidfile" id="pidfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>File where the server records the process ID
-of the daemon</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>PidFile <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>PidFile logs/httpd.pid</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The <code class="directive">PidFile</code> directive sets the file to
- which the server records the process id of the daemon. If the
- filename is not absolute then it is assumed to be relative to the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- PidFile /var/run/apache.pid
- </code></p></div>
-
- <p>It is often useful to be able to send the server a signal,
- so that it closes and then re-opens its <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> and <code class="directive"><a href="../mod/mod_log_config.html#transferlog">TransferLog</a></code>, and
- re-reads its configuration files. This is done by sending a
- SIGHUP (kill -1) signal to the process id listed in the
- <code class="directive">PidFile</code>.</p>
-
- <p>The <code class="directive">PidFile</code> is subject to the same
- warnings about log file placement and <a href="../misc/security_tips.html#serverroot">security</a>.</p>
-
- <div class="note"><h3>Note</h3>
- <p>As of Apache 2 it is recommended to use only the <a href="../programs/apachectl.html">apachectl</a> script for
- (re-)starting or stopping the server.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScoreBoardFile" id="ScoreBoardFile">ScoreBoardFile</a> <a name="scoreboardfile" id="scoreboardfile">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of the file used to store coordination data for
-the child processes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ScoreBoardFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ScoreBoardFile logs/apache_status</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Apache uses a scoreboard to communicate between its parent
- and child processes. Some architectures require a file to facilitate
- this communication. If the file is left unspecified, Apache first
- attempts to create the scoreboard entirely in memory (using anonymous
- shared memory) and, failing that, will attempt to create the file on
- disk (using file-based shared memory). Specifying this directive causes
- Apache to always create the file on the disk.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- ScoreBoardFile /var/run/apache_status
- </code></p></div>
-
- <p>File-based shared memory is useful for third-party applications
- that require direct access to the scoreboard.</p>
-
- <p>If you use a <code class="directive">ScoreBoardFile</code> then
- you may see improved speed by placing it on a RAM disk. But be
- careful that you heed the same warnings about log file placement
- and <a href="../misc/security_tips.html">security</a>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../stopping.html">Stopping and Restarting
-Apache</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SendBufferSize" id="SendBufferSize">SendBufferSize</a> <a name="sendbuffersize" id="sendbuffersize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>TCP buffer size</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SendBufferSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SendBufferSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The server will set the TCP buffer size to the number of bytes
- specified. Very useful to increase past standard OS defaults on
- high speed high latency (<em>i.e.</em>, 100ms or so, such as
- transcontinental fast pipes).</p>
-
- <p>If set to the value of <code>0</code>, the server will use the
- OS deault.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerLimit" id="ServerLimit">ServerLimit</a> <a name="serverlimit" id="serverlimit">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Upper limit on configurable number of processes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ServerLimit <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>For the <code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM, this directive sets the
- maximum configured value for <code class="directive"><a href="#maxclients">MaxClients</a></code> for the lifetime of the
- Apache process. For the <code class="module"><a href="../mod/worker.html">worker</a></code> MPM, this directive
- in combination with <code class="directive"><a href="#threadlimit">ThreadLimit</a></code> sets
- the maximum configured value for <code class="directive"><a href="#maxclients">MaxClients</a></code> for the lifetime of the
- Apache process. Any attempts to change this directive during a
- restart will be ignored, but <code class="directive"><a href="#maxclients">MaxClients</a></code> can be modified during
- a restart.</p>
-
- <p>Special care must be taken when using this directive. If
- <code class="directive">ServerLimit</code> is set to a value much higher
- than necessary, extra, unused shared memory will be allocated. If
- both <code class="directive">ServerLimit</code> and <code class="directive"><a href="#maxclients">MaxClients</a></code> are set to values
- higher than the system can handle, Apache may not start or the
- system may become unstable.</p>
-
- <p>With the <code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM, use this directive only
- if you need to set <code class="directive"><a href="#maxclients">MaxClients</a></code> higher than 256 (default).
- Do not set the value of this directive any higher than what you
- might want to set <code class="directive"><a href="#maxclients">MaxClients</a></code> to.</p>
-
- <p>With <code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code> and
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> use this directive only
- if your <code class="directive"><a href="#maxclients">MaxClients</a></code> and
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- settings require more than 16 server processes (default). Do not set
- the value of this directive any higher than the number of server
- processes required by what you may want for <code class="directive"><a href="#maxclients ">MaxClients </a></code> and <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>.</p>
-
- <p>With the <code class="module"><a href="../mod/perchild.html">perchild</a></code> MPM, use this directive only
- if you need to set <code class="directive"><a href="../mod/perchild.html#numservers">NumServers</a></code> higher than 8 (default).</p>
-
- <div class="note"><h3>Note</h3>
- <p>There is a hard limit of <code>ServerLimit 20000</code> compiled
- into the server (for the <code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM 200000). This is
- intended to avoid nasty effects caused by typos.</p>
- </div>
-
-<h3>See also</h3>
-<ul>
-<li><a href="../stopping.html">Stopping and Restarting Apache</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="StartServers" id="StartServers">StartServers</a> <a name="startservers" id="startservers">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of child server processes created at startup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>StartServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>The <code class="directive">StartServers</code> directive sets the
- number of child server processes created on startup. As the number
- of processes is dynamically controlled depending on the load,
- there is usually little reason to adjust this parameter.</p>
-
- <p>The default value differs from MPM to MPM. For
- <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> and
- <code class="module"><a href="../mod/worker.html">worker</a></code> the default is <code>StartServers 3</code>.
- For <code class="module"><a href="../mod/prefork.html">prefork</a></code> defaults to <code>5</code> and for
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> to <code>2</code>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="StartThreads" id="StartThreads">StartThreads</a> <a name="startthreads" id="startthreads">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of threads created on startup</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>StartThreads <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code></td></tr>
-</table>
- <p>Number of threads created on startup. As the
- number of threads is dynamically controlled depending on the
- load, there is usually little reason to adjust this
- parameter.</p>
-
- <p>For <code class="module"><a href="../mod/perchild.html">perchild</a></code> the default is <code>StartThreads
- 5</code> and this directive tracks the number of threads per
- process at startup.</p>
-
- <p>For <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> the default is
- <code>StartThreads 50</code> and, since there is only a single
- process, this is the total number of threads created at startup to
- serve requests.</p>
-
- <p>For <code class="module"><a href="../mod/beos.html">beos</a></code> the default is <code>StartThreads
- 10</code>. It also reflects the total number of threads created
- at startup to serve requests.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadLimit" id="ThreadLimit">ThreadLimit</a> <a name="threadlimit" id="threadlimit">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the upper limit on the configurable number of threads
-per child process</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ThreadLimit <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available for <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> in Apache 2.0.41
-and later</td></tr>
-</table>
- <p>This directive sets the maximum configured value for <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> for the lifetime
- of the Apache process. Any attempts to change this directive
- during a restart will be ignored, but <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> can be modified
- during a restart up to the value of this directive.</p>
-
- <p>Special care must be taken when using this directive. If
- <code class="directive">ThreadLimit</code> is set to a value much higher
- than <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>,
- extra unused shared memory will be allocated. If both
- <code class="directive">ThreadLimit</code> and <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> are set to values
- higher than the system can handle, Apache may not start or the
- system may become unstable. Do not set the value of this directive
- any higher than your greatest predicted setting of <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> for the
- current run of Apache.</p>
-
- <p>The default value for <code class="directive">ThreadLimit</code> is
- <code>1920</code> when used with <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> and
- <code>64</code> when used with the others.</p>
-
- <div class="note"><h3>Note</h3>
- <p>There is a hard limit of <code>ThreadLimit 20000</code> (or
- <code>ThreadLimit 15000</code> with <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>)
- compiled into the server. This is intended to avoid nasty effects
- caused by typos.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadsPerChild" id="ThreadsPerChild">ThreadsPerChild</a> <a name="threadsperchild" id="threadsperchild">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of threads created by each child process</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ThreadsPerChild <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>See usage for details</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>This directive sets the number of threads created by each
- child process. The child creates these threads at startup and
- never creates more. If using an MPM like <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>,
- where there is only one child process, this number should be high
- enough to handle the entire load of the server. If using an MPM
- like <code class="module"><a href="../mod/worker.html">worker</a></code>, where there are multiple child processes,
- the <em>total</em> number of threads should be high enough to handle
- the common load on the server.</p>
-
- <p>The default value for <code class="directive">ThreadsPerChild</code> is
- <code>64</code> when used with <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> and
- <code>25</code> when used with the others.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadStackSize" id="ThreadStackSize">ThreadStackSize</a> <a name="threadstacksize" id="threadstacksize">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The size in bytes of the stack used by threads handling
-client connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ThreadStackSize <var>size</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>65536 on NetWare; varies on other operating systems</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.1 and later</td></tr>
-</table>
- <p>The <code class="directive">ThreadStackSize</code> directive sets the
- size of the stack (for autodata) of threads which handle client
- connections and call modules to help process those connections.
- In most cases the operating system default for stack size is
- reasonable, but there are some conditions where it may need to be
- adjusted:</p>
-
- <ul>
- <li>On platforms with a relatively small default thread stack size
- (e.g., HP-UX), Apache may crash when using some third-party modules
- which use a relatively large amount of autodata storage. Those
- same modules may have worked fine on other platforms where the
- default thread stack size is larger. This type of crash is
- resolved by setting <code class="directive">ThreadStackSize</code> to a
- value higher than the operating system default. This type of
- adjustment is necessary only if the provider of the third-party
- module specifies that it is required, or if diagnosis of an Apache
- crash indicates that the thread stack size was too small.</li>
-
- <li>On platforms where the default thread stack size is
- significantly larger than necessary for the web server
- configuration, a higher number of threads per child process
- will be achievable if <code class="directive">ThreadStackSize</code> is
- set to a value lower than the operating system default. This type
- of adjustment should only be made in a test environment which allows
- the full set of web server processing can be exercised, as there
- may be infrequent requests which require more stack to process.
- A change in the web server configuration can invalidate the
- current <code class="directive">ThreadStackSize</code> setting.</li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="User" id="User">User</a> <a name="user" id="user">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The userid under which the server will answer
-requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>User <var>unix-userid</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>User #-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Only valid in global server config since Apache
-2.0</td></tr>
-</table>
- <p>The <code class="directive">User</code> directive sets the user ID as
- which the server will answer requests. In order to use this
- directive, the server must be run initially as <code>root</code>.
- If you start the server as a non-root user, it will fail to change
- to the lesser privileged user, and will instead continue to run as
- that original user. If you do start the server as <code>root</code>,
- then it is normal for the parent process to remain running as root.
- <var>Unix-userid</var> is one of:</p>
-
- <dl>
- <dt>A username</dt>
- <dd>Refers to the given user by name.</dd>
-
- <dt># followed by a user number.</dt>
- <dd>Refers to a user by its number.</dd>
- </dl>
-
- <p>The user should have no privileges that result in it being
- able to access files that are not intended to be visible to the
- outside world, and similarly, the user should not be able to
- execute code that is not meant for HTTP requests. It is
- recommended that you set up a new user and group specifically for
- running the server. Some admins use user <code>nobody</code>, but
- this is not always desirable, since the <code>nobody</code> user
- can have other uses on the system.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Don't set <code class="directive">User</code> (or <code class="directive"><a href="#group">Group</a></code>) to <code>root</code> unless
- you know exactly what you are doing, and what the dangers are.</p>
- </div>
-
- <p>With the <code class="module"><a href="../mod/perchild.html">perchild</a></code> MPM, which is intended to
- server virtual hosts run under different user IDs, the
- <code class="directive">User</code> directive defines the user ID for the
- main server and the fallback for <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> sections without an
- <code class="directive"><a href="../mod/perchild.html#assignuserid">AssignUserID</a></code> directive.</p>
-
- <p>Special note: Use of this directive in <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> is no longer supported. To
- configure your server for <a href="../suexec.html">suexec</a> use
- <code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code>.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Although the <code class="directive">User</code> directive is present
- in the <code class="module"><a href="../mod/beos.html">beos</a></code> and <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> MPMs,
- it is actually a no-op there and only exists for compatibility
- reasons.</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_common.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_common.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_common.html.ja.euc-jp b/docs/manual/mod/mpm_common.html.ja.euc-jp
deleted file mode 100644
index 3c624ea5a5..0000000000
--- a/docs/manual/mod/mpm_common.html.ja.euc-jp
+++ /dev/null
@@ -1,907 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_common - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM ¶¦Ḁ̈ǥ£¥ì¥¯¥Æ¥£¥Ö</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_common.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_common.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<div class="outofdate">This translation may be out of date. Check the
- English version for recent changes.</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>Æó¤Ä°Ê¾å¤Î¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)
-¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥³¥ì¥¯¥·¥ç¥ó</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr></table>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/down.gif" /> <a href="#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#group">Group</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#listen">Listen</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#listenbacklog">ListenBackLog</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startservers">StartServers</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#user">User</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AcceptMutex" id="AcceptMutex">AcceptMutex</a> <a name="acceptmutex" id="acceptmutex">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Ê£¿ô¤Î»Ò¥×¥í¥»¥¹¤¬¥Í¥Ã¥È¥ï¡¼¥¯¥½¥±¥Ã¥È¤Ç¥ê¥¯¥¨¥¹¥È¤ò
-accept ¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤È¤­¤Ë¡¢Apache ¤¬¤½¤ì¤é¤Î»Ò¥×¥í¥»¥¹¤òľÎ󲽤¹¤ë¤¿¤á¤Ë
-»È¤¦ÊýË¡</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>AcceptMutex default|<var>method</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AcceptMutex default</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="directive">AcceptMutex</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥Í¥Ã¥È¥ï¡¼¥¯¥½¥±¥Ã¥È¤Î¥ê¥¯¥¨¥¹¥È¤ò accept ¤·¤è¤¦¤È¤·¤Æ¤¤¤ëÊ£¿ô¤Î»Ò¥×¥í¥»¥¹¤ò
- Apache ¤¬Ä¾Î󲽤¹¤ë¤¿¤á¤Ë»È¤¦ÊýË¡¤òÀßÄꤷ¤Þ¤¹¡£
- Apache 2.0 °ÊÁ°¤Ï¡¢¤³¤Î¥á¥½¥Ã¥É¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¤Î¤ßÁªÂò¤Ç¤­¤Þ¤·¤¿¡£
- ºÇŬ¤ÊÊýË¡¤Ï¡¢¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤ä¥×¥é¥Ã¥È¥Û¡¼¥à¤ËÂ礭¤¯°Í¸¤·¤Þ¤¹¡£
- ¾ÜºÙ¤Ë´Ø¤·¤Æ¤Ï¡¢<a href="../misc/perf-tuning.html">À­Ç½¤Î¥Á¥å¡¼¥Ë¥ó¥°</a>
- ¥É¥­¥å¥á¥ó¥È¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ <code>Default</code>
- ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢¥³¥ó¥Ñ¥¤¥ë»þ¤ËÁªÂò¤µ¤ì¤¿¥Ç¥Õ¥©¥ë¥ÈÃͤ¬»È¤ï¤ì¤Þ¤¹¡£
- ¾¤Î»ÈÍѲÄǽ¤Ê¥á¥½¥Ã¥É¤Î°ìÍ÷¤Ï²¼¤Ë¤¢¤ê¤Þ¤¹¡£
- Á´¤Æ¤Î¥á¥½¥Ã¥É¤¬Á´¤Æ¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç»ÈÍѲÄǽ¤Ç¤¢¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡¢
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- »ÈÍѲÄǽ¤Ç¤Ê¤¤¥á¥½¥Ã¥É¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢
- »ÈÍѲÄǽ¤Ê¥á¥½¥Ã¥É¤Î°ìÍ÷¤ò´Þ¤ó¤À¥á¥Ã¥»¡¼¥¸¤¬
- ¥¨¥é¡¼¥í¥°¤Ë½ÐÎϤµ¤ì¤Þ¤¹¡£</p>
-
- <dl>
- <dt><code>flock</code></dt>
- <dd><code class="directive"><a href="#lockfile">LockFile</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÄêµÁ¤·¤¿¥Õ¥¡¥¤¥ë¤Î¥í¥Ã¥¯¤Ë¡¢
- <code>flock(2)</code> ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤¤¤Þ¤¹¡£</dd>
-
- <dt><code>fcntl</code></dt>
- <dd><code class="directive"><a href="#lockfile">LockFile</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÄêµÁ¤·¤¿¥Õ¥¡¥¤¥ë¤Î¥í¥Ã¥¯¤Ë¡¢
- <code>fcntl(2)</code> ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤¤¤Þ¤¹¡£</dd>
-
- <dt><code>posixsem</code></dt>
- <dd>ÇÓ¾½èÍý¤Î¼ÂÁõ¤Ë POSIX ¸ß´¹¥»¥Þ¥Õ¥©¤ò»ÈÍѤ·¤Þ¤¹</dd>
-
- <dt><code>pthread</code></dt>
- <dd>POSIX Threads (PThreads) µ¬³Ê¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë
- POSIX ÇÓ¾½èÍý¤ò»È¤¤¤Þ¤¹¡£</dd>
-
- <dt><code>sysvsem</code></dt>
- <dd>ÇÓ¾½èÍý¤Î¼ÂÁõ¤Ë SySV ·Á¼°¤Î¥»¥Þ¥Õ¥©¤ò»È¤¤¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥·¥¹¥Æ¥à¤Î¥Ç¥Õ¥©¥ë¥È¤ËÁª¤Ð¤ì¤¿¤â¤Î¤¬²¿¤«¤ò¸«¤¿¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> ¤ò <code>debug</code>
- ¤ËÀßÄꤹ¤ë¤È¤è¤¤¤Ç¤·¤ç¤¦¡£¥Ç¥Õ¥©¥ë¥È¤Î <code class="directive">AcceptMutex</code>
- ¤¬ <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> ¤Ë½ñ¤­¹þ¤Þ¤ì¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>·Ù¹ð</h3>
- <p>¤Û¤È¤ó¤É¤Î¥·¥¹¥Æ¥à¤Ë¤ª¤¤¤Æ¤Ï¡¢<code>pthread</code> ¥ª¥×¥·¥ç¥ó¤¬
- Áª¤Ð¤ì¤Æ¤¤¤ë¤È¡¢»Ò¥×¥í¥»¥¹¤¬ <code>ApacheCntl</code> mutex ¤ò
- ÊÝ»ý¤·¤Æ¤¤¤ë¤È¤­¤Ë°Û¾ï½ªÎ»¤·¤¿¾ì¹ç¡¢¥µ¡¼¥Ð¤Ï¥ê¥¯¥¨¥¹¥È¤Ø¤Î±þÅú¤ò
- Ää»ß¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤³¤ì¤¬È¯À¸¤·¤¿¾ì¹ç¤Ï¡¢¥µ¡¼¥Ð¤òÉüµì¤µ¤»¤ë¤¿¤á¤Ë¤Ï
- ¼êÆ°¤ÇºÆµ¯Æ°¤µ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Solaris ¤ÏÎã³°¤Ç¡¢Apache ¤â»ÈÍѤ·¤Æ¤¤¤ë¡¢»Ò¥×¥í¥»¥¹¤¬ mutex ¤ò
- ÊÝ»ý¤·¤Æ°Û¾ï½ªÎ»¤·¤¿¸å¤Ë mutex ¤òÉüµì¤µ¤»¤ë¤¿¤á¤Îµ¡¹½¤òÄ󶡤ò¤·¤Æ¤¤¤Þ¤¹¡£</p>
- <p>¸æ»ÈÍѤΥ·¥¹¥Æ¥à¤¬ <code>pthread_mutexattr_setrobust_np()</code> ´Ø¿ô¤ò
- ¼ÂÁõ¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢<code>pthread</code> ¥ª¥×¥·¥ç¥ó¤ò°ÂÁ´¤Ë»ÈÍѤǤ­¤ë
- ²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="CoreDumpDirectory" id="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory" id="coredumpdirectory">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>Apache ¤¬¥³¥¢¥À¥ó¥×¤¹¤ëÁ°¤Ë°ÜÆ°¤ò»î¤ß¤ë¥Ç¥£¥ì¥¯¥È¥ê
-</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>CoreDumpDirectory <var>directory</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¤ÏÀâÌÀʸ¤òÆɤó¤Ç¤¯¤À¤µ¤¤</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Apache ¤¬¥³¥¢¥À¥ó¥×¤¹¤ëÁ°¤Ë°ÜÆ°¤ò»î¤ß¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òÀ©¸æ¤·¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹¤¬¡¢¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ï¥µ¡¼¥Ð¤Î¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¥æ¡¼¥¶¸¢¸Â¤Ç
- ½ñ¤­¹þ¤ß²Äǽ¤Ç¤¢¤ë¤Ù¤­¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢Ä̾ï¤Ï¥³¥¢¥À¥ó¥×¤Ï½ñ¤­¹þ¤Þ¤ì¤Þ¤»¤ó¡£
- ¥Ç¥Ð¥Ã¥°¤Î¤¿¤á¤Ë¥³¥¢¥À¥ó¥×¤¬É¬ÍפǤ¢¤ì¤Ð¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¾¤Î°ÌÃ֤˥³¥¢¥À¥ó¥×¤ò½ñ¤­½Ð¤¹¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Linux ¤Ç¤Î¥³¥¢¥À¥ó¥×</h3>
- <p>Apache ¤¬ root ¤È¤·¤Æµ¯Æ°¤µ¤ì¤Æ¡¢Ê̤Υ桼¥¶¤Î¸¢¸Â¤Ë°Ê¹ß¤·¤¿¾ì¹ç¤Ï
- Linux ¤Î¥«¡¼¥Í¥ë¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤¬¥×¥í¥»¥¹¤Î¸¢¸Â¤Ç½ñ¤­¹þ¤ß²Äǽ¤Ê¾ì¹ç¤Ç¤µ¤¨¤â
- ¥³¥¢¥À¥ó¥×¤ò<em>̵¸ú</em>¤Ë¤·¤Þ¤¹¡£Apache (2.0.46 °Ê¹ß) ¤Ï
- Linux 2.4 °Ê¹ß¤Ç¤Ï¥³¥¢¥À¥ó¥×¤ò¹Ô¤Ê¤¦¤è¤¦¤ËºÆ»ØÄꤷ¤Þ¤¹¤¬¡¢¤½¤ì¤Ï
- <code class="directive">CoreDumpDirectory</code> ¤òÌÀ¼¨Åª¤ËÀßÄꤷ¤¿¤È¤­¤Ë
- ¸Â¤ê¤Þ¤¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Group" id="Group">Group</a> <a name="group" id="group">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤Ë½ê°¤¹¤ë¥°¥ë¡¼¥×</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Group <var>unix-group</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>Group #-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 °Ê¹ß¤Ç¡¢¥°¥í¡¼¥Ð¥ëÀßÄê¤Ç¤Î¤ßÍ­¸ú¤Ç¤¹¡£</td></tr>
-</table>
- <p><code class="directive">Group</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢
- ¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤Ë½ê°¤·¤Æ¤ª¤¯¥°¥ë¡¼¥×¤òÀßÄꤷ¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢
- ¥µ¡¼¥Ð¤ÏºÇ½é¤Ë <code>root</code> ¸¢¸Â¤Çµ¯Æ°¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- Èó root ¥æ¡¼¥¶¤Ç¥µ¡¼¥Ð¤òµ¯Æ°¤·¤¿¾ì¹ç¤Ï¡¢»ØÄꤷ¤¿¥°¥ë¡¼¥×¤ËÊѲ½¤Ç¤­¤º¤Ë¡¢
- ·ë²ÌŪ¤Ëµ¯Æ°¤·¤¿¥æ¡¼¥¶¤Î°¤¹¤ë¥°¥ë¡¼¥×¤Ç¼Â¹Ô¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- <var>unix-group</var> ¤Ï¼¡¤Î¤¦¤Á¤Î¤¤¤º¤ì¤«¤Ç¤¹:</p>
-
- <dl>
- <dt>¥°¥ë¡¼¥×̾</dt>
- <dd>¥°¥ë¡¼¥×¤ò̾Á°¤Ç»²¾È¤·¤Þ¤¹</dd>
-
- <dt><code>#</code> ¤Ë³¤¤¤Æ¥°¥ë¡¼¥×ÈÖ¹æ</dt>
- <dd>¥°¥ë¡¼¥×¤ò¤òÈÖ¹æ¤Ç»²¾È¤·¤Þ¤¹¡£</dd>
- </dl>
-
- <div class="example"><h3>Îã</h3><p><code>
- Group www-group
- </code></p></div>
-
- <p>¥µ¡¼¥Ð¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤ËÆÃÄê¤Î¿·¤·¤¤¥°¥ë¡¼¥×¤òÀßÄꤹ¤ë¤³¤È¤ò
- ¤ªÁ¦¤á¤·¤Þ¤¹¡£<code>nobody</code> ¤ò»ÈÍѤ¹¤ë´ÉÍý¼Ô¤â¤¤¤Þ¤¹¤¬¡¢
- ²Äǽ¤Ç¤¢¤Ã¤¿¤ê˾¤Þ¤·¤¤Ìõ¤Ç¤Ïɬ¤º¤·¤â¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p>Àµ³Î¤Ë¤É¤ó¤Ê¤³¤È¤ò¤ä¤Ã¤Æ¤¤¤ë¤Î¤«¡¢¤½¤Î´í¸±À­¤òÃΤé¤Ê¤¤¤Ç¡¢
- <code class="directive">Group</code> (¤ä <code class="directive"><a href="#user">User</a></code>) ¤ò
- <code>root</code> ¤Ë ÀßÄꤷ¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£</p>
- </div>
-
- <p>Æõ­»ö¹à: ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤Ç»ÈÍѤ¹¤ë¤³¤È¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¡£Apache 2.0 ¤Ç
- <a href="../suexec.html">suexec</a> ¤òÀßÄꤷ¤¿¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code>
- ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code class="directive">Group</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="module"><a href="../mod/beos.html">beos</a></code> ¤È <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> MPM
- ¤Ë¤â¸ºß¤·¤Þ¤¹¤¬¡¢¼Â¼ÁŪ¤Ë̵¸ú¤Ç¡¢¸ß´¹À­¤Î¤¿¤á¤À¤±¤Ë¸ºß¤·¤Þ¤¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Listen" id="Listen">Listen</a> <a name="listen" id="listen">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤¬ listen ¤¹¤ëIP ¥¢¥É¥ì¥¹¤È¥Ý¡¼¥ÈÈÖ¹æ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Listen [<var>IP-address</var>:]<var>portnumber</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 ¤«¤éɬÍפʥǥ£¥ì¥¯¥Æ¥£¥Ö</td></tr>
-</table>
- <p><code class="directive">Listen</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache
- ¤¬ÆÃÄê¤Î IP ¥¢¥É¥ì¥¹¤ä¥Ý¡¼¥ÈÈÖ¹æ¤À¤±¤ò listen ¤¹¤ë¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÁ´¤Æ¤Î IP ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤·¤Þ¤¹¡£
- <code class="directive">Listen</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¸½ºß¤Ïɬ¿Ü¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤Ê¤ê¤Þ¤·¤¿¡£
- ¤â¤·ÀßÄê¥Õ¥¡¥¤¥ë¤Ë¤Ê¤±¤ì¤Ð¡¢¥µ¡¼¥Ð¤Ïµ¯Æ°¤Ë¼ºÇÔ¤·¤Þ¤¹¡£
- ¤³¤ì¤Ï°ÊÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Apache ¤«¤éÊѹ¹¤Î¤¢¤Ã¤¿Éôʬ¤Ç¤¹¡£</p>
-
- <p><code class="directive">Listen</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï¡¢ÆÃÄê¤Î¥Ý¡¼¥È¤¢¤ë¤¤¤Ï
- ¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÁȤ߹ç¤ï¤»¤«¤éÆþ¤Ã¤Æ¤¯¤ë¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ
- ±þÅú¤¹¤ë¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
- ¤â¤·¥Ý¡¼¥ÈÈÖ¹æ¤À¤±¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢¥µ¡¼¥Ð¤ÏÁ´¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î
- »ØÄꤵ¤ì¤¿¥Ý¡¼¥ÈÈÖ¹æ¤ËÂФ·¤Æ listen ¤·¤Þ¤¹¡£
- IP ¥¢¥É¥ì¥¹¤¬¥Ý¡¼¥È¤È¤È¤â¤Ë»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï»ØÄꤵ¤ì¤¿¥Ý¡¼¥È¤È¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ËÂФ·¤Æ listen
- ¤·¤Þ¤¹¡£</p>
-
- <p>Ê£¿ô¤Î¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ËÂФ·¤Æ listen ¤¹¤ë¤è¤¦¤Ë¡¢
- Ê£¿ô¤Î <code class="directive">Listen</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤ÏÎóµó¤µ¤ì¤¿¥¢¥É¥ì¥¹¤È¥Ý¡¼¥ÈÁ´¤Æ¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ
- ±þÅú¤·¤Þ¤¹¡£</p>
-
- <p>Î㤨¤Ð¡¢¥µ¡¼¥Ð¤¬ 80 È֥ݡ¼¥È¤È 8000 È֥ݡ¼¥È¤ÎξÊý¤Î
- ¥³¥Í¥¯¥·¥ç¥ó¤ò¼õ¤±Æþ¤ì¤ë¾ì¹ç¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>Æó¤Ä¤ÎÆÃÄê¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¥Ý¡¼¥ÈÈֹ椫¤é¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò
- ¼õ¤±Æþ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>IPv6 ¥¢¥É¥ì¥¹¤Ï³Ñ³ç¸Ì¤Ç°Ï¤Þ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- Î㤨¤Ð¼¡¤ÎÎã¤Î¤è¤¦¤Ë¤Ç¤¹¡£</p>
-
- <div class="example"><p><code>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </code></p></div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../dns-caveats.html">DNS ¤ÎÌäÂê</a></li>
-<li><a href="../bind.html">Apache
-¤¬»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÀßÄê</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ListenBackLog" id="ListenBackLog">ListenBackLog</a> <a name="listenbacklog" id="listenbacklog">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÊÝα¾õÂ֤Υ³¥Í¥¯¥·¥ç¥ó¤Î¥­¥å¡¼¤ÎºÇÂçĹ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ListenBacklog <var>backlog</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ListenBacklog 511</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>ÊÝα¾õÂ֤Υ³¥Í¥¯¥·¥ç¥ó¤Î¥­¥å¡¼¤ÎºÇÂçŤǤ¹¡£
- °ìÈÌŪ¤Ë¤ÏÄ´À°¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¤·¡¢Ä´À°¤Ï˾¤Þ¤·¤¯¤¢¤ê¤Þ¤»¤ó¡£
- ¤·¤«¤·¡¢TCP SYN ¥Õ¥é¥Ã¥É¥¢¥¿¥Ã¥¯¤Î¾õ¶·²¼¤Ë¤ª¤«¤ì¤ë¾ì¹ç¤Ë¡¢
- Áý¤ä¤·¤¿Êý¤¬Ë¾¤Þ¤·¤¤¥·¥¹¥Æ¥à¤â¤¢¤ê¤Þ¤¹¡£
- <code>listen(2)</code> ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î¥Ð¥Ã¥¯¥í¥°¥Ñ¥é¥á¡¼¥¿¤ò
- ¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>¤³¤ÎÃÍ¤Ï OS ¤Ë¤è¤ê¡¢¾®¤µ¤Ê¿ô¤ËÍÞ¤¨¤é¤ì¤Þ¤¹¡£
- ÃÍ¤Ï OS Ëè¤Ë°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿Â¿¤¯¤Î OS ¤Ç¤Ï¡¢
- ¥Ð¥Ã¥¯¥í¥°¤È¤·¤Æ»ØÄꤵ¤ì¤Æ¤¤¤ëÃͤÁ¤ç¤¦¤É¤Þ¤Ç»È¤Ã¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¯¡¢
- ÀßÄꤵ¤ì¤Æ¤¤¤ëÃͤ˴ð¤Å¤¤¤Æ (Ä̾ï¤ÏÀßÄêÃͤè¤ê¤âÂ礭¤ÊÃͤò)
- »È¤Ã¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="LockFile" id="LockFile">LockFile</a> <a name="lockfile" id="lockfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¼õÉÕ¤òľÎ󲽤¹¤ë¤¿¤á¤Î¥í¥Ã¥¯¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>LockFile <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>LockFile logs/accept.lock</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="directive"><a href="#acceptmutex">AcceptMutex</a></code>
- ¤¬ <code>fcntl</code> ¤ä <code>flock</code>
- ¤ËÀßÄꤵ¤ì¤Æ»ÈÍѤµ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¡¢»ÈÍѤµ¤ì¤ë¥í¥Ã¥¯¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹¤ò
- <code class="directive">LockFile</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÄ̾ï¤Ï¤½¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£
- ¼ç¤Ë <code>logs</code> ¥Ç¥£¥ì¥¯¥È¥ê¤¬ NFS
- ¤Ç¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ê¤É¤ËÃͤòÊѤ¨¤Þ¤¹¡£
- ¤Ê¤¼¤Ê¤é<strong>¥í¥Ã¥¯¥Õ¥¡¥¤¥ë¤Ï¥í¡¼¥«¥ë¥Ç¥£¥¹¥¯¤Ë
- Êݸ¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤</strong>¤«¤é¤Ç¤¹¡£
- ¥á¥¤¥ó¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î PID ¤¬¥Õ¥¡¥¤¥ë̾¤Ë¼«Æ°Åª¤ËÉղ䵤ì¤Þ¤¹¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p><code>/var/tmp</code>
- ¤È¤¤¤Ã¤¿¡¢Ã¯¤Ç¤â½ñ¤­¹þ¤á¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥Õ¥¡¥¤¥ë¤ò
- <em>ÃÖ¤«¤Ê¤¤</em>Êý¤¬¤è¤¤¤Ç¤¹¡£¤Ê¤¼¤Ê¤é¡¢¥µ¡¼¥Ð¤¬µ¯Æ°»þ¤ËºîÀ®¤¹¤ë
- ¥í¥Ã¥¯¥Õ¥¡¥¤¥ë¤ÎºîÀ®¼«ÂΤò˸³²¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢
- ï¤Ç¤â¥µ¡¼¥Ó¥¹µñÈÝ¥¢¥¿¥Ã¥¯¤ò°ú¤­µ¯¤³¤¹¤³¤È¤¬¤Ç¤­¤ë¤«¤é¤Ç¤¹¡£</p>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#acceptmutex">AcceptMutex</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxClients" id="MaxClients">MaxClients</a> <a name="maxclients" id="maxclients">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤¿¤á¤ËºîÀ®¤µ¤ì¤ë
-»Ò¥×¥í¥»¥¹¤ÎºÇÂç¸Ä¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MaxClients <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑË¡¤ò¤´Í÷²¼¤µ¤¤¡£</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="directive">MaxClients</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ±þÅú¤¹¤ë¤³¤È¤Î¤Ç¤­¤ëƱ»þ¥ê¥¯¥¨¥¹¥È¿ô¤òÀßÄꤷ¤Þ¤¹¡£
- <code class="directive">MaxClients</code> À©¸Â¿ô¤ò±Û¤¨¤ë¥³¥Í¥¯¥·¥ç¥ó¤ÏÄ̾
- <code class="directive"><a href="#listenbacklog">ListenBacklog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤¿¿ô¤Þ¤Ç¥­¥å¡¼¤ËÆþ¤ê¤Þ¤¹¡£
- ¾¤Î¥ê¥¯¥¨¥¹¥È¤ÎºÇ¸å¤Þ¤Ç㤷¤Æ»Ò¥×¥í¥»¥¹¤¬¶õ¤¯¤È¡¢
- ¼¡¤Î¥³¥Í¥¯¥·¥ç¥ó¤Ë±þÅú¤·¤Þ¤¹¡£</p>
-
- <p>¥¹¥ì¥Ã¥É¤òÍѤ¤¤Ê¤¤¥µ¡¼¥Ð (<em>¤¹¤Ê¤ï¤Á</em> <code class="module"><a href="../mod/prefork.html">prefork</a></code>)
- ¤Ç¤Ï¡¢<code class="directive">MaxClients</code>
- ¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤¿¤á¤Ëµ¯Æ°¤µ¤ì¤ë
- »Ò¥×¥í¥»¥¹¤ÎºÇÂç¿ô¤È¤Ê¤ê¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code>256</code> ¤Ç¡¢¤³¤ì¤òÁý²Ã¤µ¤»¤¿¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="#serverlimit">ServerLimit</a></code>
- ¤ÎÃͤâÁý²Ã¤µ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>¥¹¥ì¥Ã¥É¤òÍѤ¤¤ë¥µ¡¼¥Ð¤ä¡¢¥Ï¥¤¥Ö¥ê¥Ã¥É¥µ¡¼¥Ð (<em>¤¹¤Ê¤ï¤Á</em>
- <code class="module"><a href="../mod/beos.html">beos</a></code> <code class="module"><a href="../mod/worker.html">worker</a></code>)
- ¤Ç¤Ï¡¢<code class="directive">MaxClients</code>
- ¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ë±þÅú¤Ç¤­¤ë¥¹¥ì¥Ã¥É¤ÎÁí¿ô¤òÀ©¸Â¤·¤Þ¤¹¡£
- <code class="module"><a href="../mod/beos.html">beos</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code>50</code> ¤Ç¤¹¡£
- ¥Ï¥¤¥Ö¥ê¥Ã¥É MPM ¤Ç¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï 16
- <code class="directive"><a href="#serverlimit">ServerLimit</a></code>
- ¤Î <code>25</code> ÇÜ (<code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>) ¤Ç¤¹¡£
- <code class="directive">MaxClients</code>
- ¤ò 16 ¥×¥í¥»¥¹°Ê¾åɬÍפÊÃͤޤÇÁý²Ã¤µ¤»¤¿¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="#serverlimit">ServerLimit</a></code>
- ¤âÁý²Ã¤µ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxMemFree" id="MaxMemFree">MaxMemFree</a> <a name="maxmemfree" id="maxmemfree">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>free() ¤¬¸Æ¤Ð¤ì¤Ê¤¤¸Â¤ê¡¢
-¼ç¥á¥â¥ê¥¢¥í¥±¡¼¥¿¤¬ÊÝ»ý¤·Â³¤±¤é¤ì¤ë¥á¥â¥ê¤ÎºÇÂçÎÌ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MaxMemFree <var>KBytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>MaxMemFree 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
- <p><code class="directive">MaxMemFree</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code>free()</code> ¤¬¸Æ¤Ð¤ì¤Ê¤¤¸Â¤ê¡¢
- ¼ç¥¢¥í¥±¡¼¥¿¤¬ÊÝ»ý¤Ç¤­¤ë¶õ¤Î¥á¥â¥ê¤ÎºÇÂçÃͤò¥­¥í¥Ð¥¤¥Èñ°Ì¤ÇÀßÄꤷ¤Þ¤¹¡£
- ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢Îí¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢ÌµÀ©¸Â¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxRequestsPerChild" id="MaxRequestsPerChild">MaxRequestsPerChild</a> <a name="maxrequestsperchild" id="maxrequestsperchild">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¸Ä¡¹¤Î»Ò¥µ¡¼¥Ð¤¬²ÔƯÃæ¤Ë°·¤¦¥ê¥¯¥¨¥¹¥È¿ô¤Î¾å¸Â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MaxRequestsPerChild <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>MaxRequestsPerChild 10000</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="directive">MaxRequestsPerChild</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¸Ä¡¹¤Î»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤¬°·¤¦¤³¤È¤Î¤Ç¤­¤ë¥ê¥¯¥¨¥¹¥È¤ÎÀ©¸Â¿ô¤ò
- ÀßÄꤷ¤Þ¤¹¡£<code class="directive">MaxRequestsPerChild</code>
- ¸Ä¤Î¥ê¥¯¥¨¥¹¥È¤Î¸å¤Ë¡¢»Ò¥×¥í¥»¥¹¤Ï½ªÎ»¤·¤Þ¤¹¡£
- <code class="directive">MaxRequestsPerChild</code> ¤¬ <code>0</code>
- ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¥×¥í¥»¥¹¤Ï´ü¸ÂÀÚ¤ì¤Ë¤è¤ê½ªÎ»¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <div class="note"><h3>¤½¤Î¾¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ</h3>
- <p><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ¤È <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>
- ¤Ç¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code>0</code> ¤Ç¤¹¡£</p>
- </div>
-
- <p><code class="directive">MaxRequestsPerChild</code>
- ¤òÈó¥¼¥í¤ËÀ©¸Â¤¹¤ë¤³¤È¤Ë¤Ï¡¢Æó¤Ä¤ÎÍøÅÀ¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>(¶öȯŪ¤Ê) ¥á¥â¥ê¡¼¥ê¡¼¥¯¤¬µ¯¤³¤Ã¤¿¾ì¹ç¤Ë
- ¥×¥í¥»¥¹¤¬¾ÃÈñ¤¹¤ë¥á¥â¥ê¤ÎÁíÎ̤òÀ©¸Â¤Ç¤­¤ë</li>
-
- <li>¥×¥í¥»¥¹¤ËÍ­¸Â¤Î¥é¥¤¥Õ¥¿¥¤¥à¤òÀßÄꤹ¤ë¤³¤È¤Ç¡¢
- ¥µ¡¼¥ÐÉé²Ù¤¬²¼¤¬¤Ã¤¿»þ¤Ë¥×¥í¥»¥¹¿ô¤ò¾¯¤Ê¤¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë</li>
- </ul>
-
- <div class="note"><h3>Ãí</h3>
- <p><code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code> ¥ê¥¯¥¨¥¹¥È¤Î¾ì¹ç¤Ï¡¢
- °ì¤ÄÌܤΥꥯ¥¨¥¹¥È¤À¤±¤¬¤³¤ÎÀ©¸Â¤Ë³ºÅö¤·¤Þ¤¹¡£
- ¼Â¸úŪ¤Ë¤Ï¡¢°ì¤Ä¤Î»Ò¥×¥í¥»¥¹¤¢¤¿¤ê¤Î<em>¥³¥Í¥¯¥·¥ç¥ó</em>¿ô¤ò
- À©¸Â¤¹¤ë¤è¤¦¤ËµóÆ°¤¬ÊѲ½¤·¤Þ¤¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxSpareThreads" id="MaxSpareThreads">MaxSpareThreads</a> <a name="maxsparethreads" id="maxsparethreads">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤ÎºÇÂç¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MaxSpareThreads <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑË¡¤ò¤´Í÷²¼¤µ¤¤¡£</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>¥¢¥¤¥É¥ë¤Ê¥¹¥ì¥Ã¥É¤ÎºÇÂç¿ô¤Ç¤¹¡£°Û¤Ê¤ë MPM ¤Ç¤Ï¤½¤ì¤¾¤ì¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï°Û¤Ê¤ë¼è¤ê°·¤ï¤ìÊý¤ò¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> ¤Ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ï <code>MaxSpareThreads 10</code> ¤Ç¤¹¡£
- ¤³¤Î MPM ¤Ï¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤ò¡¢¤½¤ì¤¾¤ì¤Î»Ò¥×¥í¥»¥¹¤´¤È¤Ë´Æ»ë¤·¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤Ë¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤¬Â¿¤¹¤®¤ë¾ì¹ç¤Ï¡¢
- ¥µ¡¼¥Ð¤Ï¤½¤Î»Ò¥×¥í¥»¥¹¤Ë´Þ¤Þ¤ì¤ë¥¹¥ì¥Ã¥É¤ò½ªÎ»¤·»Ï¤á¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>,
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> ¤Ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ï <code>MaxSpareThreads 250</code> ¤Ç¤¹¡£
- ¤³¤Î MPM ¤Ï¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤ò¥µ¡¼¥ÐÁ´ÂΤǴƻ뤷¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ç¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤¬Â¿¤¹¤®¤ë¾ì¹ç¤Ï¡¢
- ¤³¤Î¿ô»ú¤è¤ê¤â¾¯¤Ê¤¤¿ô¤Ë¤Ê¤ë¤Þ¤Ç»Ò¥×¥í¥»¥¹¤ò½ªÎ»¤·¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ¤Ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ï <code>MaxSpareThreads 100</code> ¤Ç¤¹¡£
- ¤³¤Î MPM ¤Ï¥·¥ó¥°¥ë¥×¥í¥»¥¹¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- ¥¹¥Ú¥¢¥¹¥ì¥Ã¥É¿ô¤â¥µ¡¼¥ÐÁ´ÂΤǴªÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> ¤È <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ¤Ï
- <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ¤È»÷¤¿µóÆ°¤ò¤·¤Þ¤¹¡£
- <code class="module"><a href="../mod/beos.html">beos</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code>MaxSpareThreads 50</code>
- ¤Ç¤¹¡£<code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code>10</code>
- ¤Ç¤¹¡£</p>
-
- <div class="note"><h3>À©¸Â»ö¹à</h3>
- <p><code class="directive">MaxSpareThreads</code> ¤Î¼è¤ëÃͤˤÏÀ©¸Â¤¬¤¢¤ê¤Þ¤¹¡£
- Apache ¤Ï¼¡¤Îµ¬Â§¤Ë½¾¤Ã¤Æ¼«Æ°Åª¤ËÊäÀµ¤·¤Þ¤¹¡£</p>
- <ul>
- <li><code class="module"><a href="../mod/perchild.html">perchild</a></code> ¤Ç¤Ï¡¢
- <code class="directive">MaxSpareThreads</code> ¤¬
- <code class="directive"><a href="#threadlimit">ThreadLimit</a></code>
- ¤ÈÅù¤·¤¤¤«¤½¤ì°Ê²¼¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</li>
-
- <li><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ¤Ï
- <code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code>
- ¤è¤ê¤âÂ礭¤¤É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</li>
-
- <li><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>,
- <code class="module"><a href="../mod/worker.html">worker</a></code> ¤Ç¤Ï¡¢
- <code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code> ¤È
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤Ç·è¤Þ¤ëÁíϤÈÅù¤·¤¤¤«Â礭¤¤É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</li>
- </ul>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#minsparethreads">MinSpareThreads</a></code></li>
-<li><code class="directive"><a href="#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MinSpareThreads" id="MinSpareThreads">MinSpareThreads</a> <a name="minsparethreads" id="minsparethreads">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë
-¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤ÎºÇ¾®¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MinSpareServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑÊýË¡¤ò¤´Í÷²¼¤µ¤¤¡£</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¥¹¥ì¥Ã¥É¿ô¤ÎºÇ¾®ÃͤǤ¹¡£
- °Û¤Ê¤ë MPM ¤Ç¤Ï¤½¤ì¤¾¤ì¡¢
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï°Û¤Ê¤ë¼è¤ê°·¤ï¤ìÊý¤ò¤·¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> ¤Ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ï <code>MinSpareThreads 5</code> ¤Ç¡¢
- ¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤ò»Ò¥×¥í¥»¥¹Ëè¤Ë´Æ»ë¤·¤Þ¤¹¡£
- ¤â¤·»Ò¥×¥í¥»¥¹¤Ë½½Ê¬¤Ê¿ô¤Î¥¹¥ì¥Ã¥É¤¬¤Ê¤±¤ì¤Ð¡¢
- ¥µ¡¼¥Ð¤Ï¤½¤Î»Ò¥×¥í¥»¥¹¤Ë¿·¤·¤¤¥¹¥ì¥Ã¥É¤òºî¤ê»Ï¤á¤Þ¤¹¡£
- ¤Ç¤¹¤«¤é¡¢<code class="directive"><a href="../mod/perchild.html#numservers">NumServers</a></code>
- ¤ò 10 ¤Ë¡¢<code class="directive">MinSpareThreads</code> ¤ò
- 5 ¤Ë¤·¤¿¾ì¹ç¤Ï¡¢ºÇ¾®¤Ç¤â 50 ¤Î¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤¬
- ¥·¥¹¥Æ¥à¾å¤Ë¤¢¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>,
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> ¤Ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ï <code>MinSpareThreads 75</code> ¤Ç¡¢
- ¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤ò¥µ¡¼¥ÐÁ´ÂΤǴƻ뤷¤Þ¤¹¡£
- ¤â¤·¥µ¡¼¥Ð¤Ë½½Ê¬¤Ê¿ô¤Î¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤¬¤Ê¤±¤ì¤Ð¡¢
- ¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤¬¤³¤Î¿ô¤è¤ê¤âÂ礭¤¯¤Ê¤ë¤Þ¤Ç
- ¿·¤·¤¤»Ò¥×¥í¥»¥¹¤¬À¸À®¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ¤Ç¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Ï <code>MinSpareThreads 10</code> ¤Ç¡¢
- ¥·¥ó¥°¥ë¥×¥í¥»¥¹ MPM ¤Ç¤¹¤Î¤Ç¡¢¥µ¡¼¥ÐÁ´ÂΤǴÉÍý¤µ¤ì¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> ¤È <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ¤Ï¡¢
- <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>¤Ë¤è¤¯»÷¤Æ¤¤¤Þ¤¹¡£
- <code class="module"><a href="../mod/beos.html">beos</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ï <code>MinSpareThreads 1</code>
- ¤Ç¤¹¡£<code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ï
- <code>5</code> ¤Ç¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#maxsparethreads">MaxSpareThreads</a></code></li>
-<li><code class="directive"><a href="#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="PidFile" id="PidFile">PidFile</a> <a name="pidfile" id="pidfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Ç¡¼¥â¥ó¤Î¥×¥í¥»¥¹ ID
-¤ò¥µ¡¼¥Ð¤¬µ­Ï¿¤¹¤ë¤¿¤á¤Î¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>PidFile <var>filename</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>PidFile logs/httpd.pid</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td /></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="directive">PidFile</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¡¢
- ¥Ç¡¼¥â¥ó¤Î¥×¥í¥»¥¹ ID ¤ò¥µ¡¼¥Ð¤¬µ­Ï¿¤¹¤ë¥Õ¥¡¥¤¥ë¤òÀßÄꤷ¤Þ¤¹¡£
- ¥Õ¥¡¥¤¥ë̾¤¬ÀäÂХѥ¹¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- ¤«¤é¤ÎÁêÂÐŪ¤Ê¤â¤Î¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- PidFile /var/run/apache.pid
- </code></p></div>
-
- <p>¥µ¡¼¥Ð¤¬ <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>
- ¤ä <code class="directive"><a href="../mod/mod_log_config.html#transferlog">TransferLog</a></code>
- ¤òÊĤ¸¤Æ³«¤­Ä¾¤·¤¿¤ê¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤ò
- ºÆÆɹþ¤·¤¿¤ê¤µ¤»¤ë¤¿¤á¤Ë¡¢¥µ¡¼¥Ð¤Ë¥·¥°¥Ê¥ë¤òÁ÷¤ë¤³¤È¤¬¤Ç¤­¤ë¤È
- ÊØÍø¤Ê¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï SIGHUP (kill -1) ¥·¥°¥Ê¥ë¤ò <code class="directive">PidFile</code>
- ¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥»¥¹ ID ¤ËÁ÷¤ë¤³¤È¤Ç¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="directive">PidFile</code> ¤Ë¤Ï¡¢¥í¥°¥Õ¥¡¥¤¥ë¤ÎÀßÃÖ°ÌÃÖ¤ä
- <a href="../misc/security_tips.html#serverroot">¥»¥­¥å¥ê¥Æ¥£</a>
- ¤ÈÁ´¤¯Æ±¤¸Ãí°ÕÅÀ¤¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p>Apache 2 ¤Ç¤Ï¡¢
- <a href="../programs/apachectl.html">apachectl</a>
- ¥¹¥¯¥ê¥×¥È¤Î¤ß¤ò»ÈÍѤ·¤Æ¥µ¡¼¥Ð¤Î (ºÆ) µ¯Æ°¤äÄä»ß¤ò
- ¹Ô¤Ê¤¦¤³¤È¤ò¿ä¾©¤·¤Æ¤¤¤Þ¤¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ScoreBoardFile" id="ScoreBoardFile">ScoreBoardFile</a> <a name="scoreboardfile" id="scoreboardfile">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»Ò¥×¥í¥»¥¹¤ÈÏ¢·È¤¹¤ë¤¿¤á¤Î¥Ç¡¼¥¿¤òÊݸ¤¹¤ë
-¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ScoreBoardFile <var>file-path</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>ScoreBoardFile logs/apache_status</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>Apache ¤Ï¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹´Ö¤ÎÄÌ¿®¤Ë¥¹¥³¥¢¥Ü¡¼¥É¤òÍѤ¤¤Þ¤¹¡£
- ¤³¤ÎÄÌ¿®µ¡Ç½¤Ë¥Õ¥¡¥¤¥ë¤òɬÍפȤ¹¤ë¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤â¤¢¤ê¤Þ¤¹¡£
- ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢Apache ¤Ï¤Þ¤º¥á¥â¥ê¾å
- (ƿ̾¶¦Í­¥á¥â¥ê) ¤Ë¥¹¥³¥¢¥Ü¡¼¥É¤òºî¤í¤¦¤È¤·¡¢¤½¤ì¤¬¼ºÇÔ¤¹¤ë¤È
- ¥Ç¥£¥¹¥¯¾å¤Ë¥Õ¥¡¥¤¥ë (¥Õ¥¡¥¤¥ë¥Ù¡¼¥¹¤Î¶¦Í­¥á¥â¥ê) ¤òºî¤í¤¦¤È¤·¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ØÄꤹ¤ë¤È¡¢Apache
- ¤Ïɬ¤º¥Ç¥£¥¹¥¯¤Ë¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¤Þ¤¹¡£</p>
-
- <div class="example"><h3>Îã</h3><p><code>
- ScoreBoardFile /var/run/apache_status
- </code></p></div>
-
- <p>¥Õ¥¡¥¤¥ë¥Ù¡¼¥¹¤Î¶¦Í­¥á¥â¥ê¤Ï¡¢¥µ¡¼¥É¥Ñ¡¼¥Æ¥£¡¼À½¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç
- ¥¹¥³¥¢¥Ü¡¼¥É¤ËľÀÜ¥¢¥¯¥»¥¹¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤ËÌò¤ËΩ¤Á¤Þ¤¹¡£</p>
-
- <p><code class="directive">ScoreBoardFile</code> ¤ò»È¤¦¾ì¹ç¡¢
- RAM ¥Ç¥£¥¹¥¯¾å¤ËÃÖ¤¯¤È¥¹¥Ô¡¼¥É¤¬¸þ¾å¤¹¤ë¤Ç¤·¤ç¤¦¡£
- ¤·¤«¤·¡¢¥í¥°¥Õ¥¡¥¤¥ë¤ÎÀßÃÖ°ÌÃÖ¤ä
- <a href="../misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£</a>
- ¤ÈƱÍͤÎÃí°ÕÅÀ¤¬¤¢¤ë¤Î¤Ç¡¢Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../stopping.html">Apache ¤ÎÄä»ß¤ÈºÆµ¯Æ°</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="SendBufferSize" id="SendBufferSize">SendBufferSize</a> <a name="sendbuffersize" id="sendbuffersize">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>TCP ¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>SendBufferSize <var>bytes</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>SendBufferSize 0</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>¥µ¡¼¥Ð¤Ï TCP ¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤ò»ØÄꤵ¤ì¤¿¥Ð¥¤¥È¿ô¤ËÀßÄꤷ¤Þ¤¹¡£
- ¹â®¤Ç¹â¥ì¥¤¥Æ¥ó¥·¤Ê´Ä¶­¤Ç
- (<em>Îã</em> 100ms ÄøÅÙ¡¢ÂçΦ²£Ãǹâ®ÄÌ¿®Ï©¤Ê¤É)
- ¸Å¤¤°ìÈÌŪ¤Ê OS ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòÁý¤ä¤¹¤Î¤ËÈó¾ï¤ËÊØÍø¤Ç¤¹¡£</p>
-
- <p><code>0</code>¤Ë¤·¤¿¾ì¹ç¡¢OS ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤ¬»ÈÍѤµ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ServerLimit" id="ServerLimit">ServerLimit</a> <a name="serverlimit" id="serverlimit">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÀßÄê²Äǽ¤Ê¥µ¡¼¥Ð¥×¥í¥»¥¹¿ô¤Î¾å¸Â</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ServerLimit <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑË¡¤ò»²¾È</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM ¤Î¾ì¹ç¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- Apache ¥×¥í¥»¥¹²ÔƯÃæ¤Ë¤ª¤±¤ë
- <code class="directive"><a href="#maxclients">MaxClients</a></code>
- ¤ËÀßÄê²Äǽ¤Ê¾å¸ÂÃͤòÀßÄꤹ¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹
- (ÌõÃí: prefork ¤Î¾ì¹ç¤ÏƱ»þ¥¯¥é¥¤¥¢¥ó¥È¿ô = ¥µ¡¼¥Ð¥×¥í¥»¥¹¿ô¤Ê¤Î¤Ç) ¡£
- <code class="module"><a href="../mod/worker.html">worker</a></code> MPM ¤Î¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="directive"><a href="#threadlimit">ThreadLimit</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÈÁȤ߹ç¤ï¤»¤Æ¡¢
- Apache ¥×¥í¥»¥¹²ÔƯÃæ¤Ë¤ª¤±¤ë
- <code class="directive"><a href="#maxclients">MaxClients</a></code>
- ¤ËÀßÄê²Äǽ¤Ê¾å¸ÂÃͤòÀßÄꤹ¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ºÆµ¯Æ°Ãæ¤Ë¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÊѹ¹¤·¤Æ¤â̵»ë¤µ¤ì¤Þ¤¹¤¬¡¢
- <code class="directive"><a href="#maxclients">MaxClients</a></code>
- ¤ÏºÆµ¯Æ°Ãæ¤Ë½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ëºÝ¤ÏÆäËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- <code class="directive">ServerLimit</code> ¤¬É¬Íװʾå¤ËÂ礭¤ÊÃͤË
- ÀßÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢Í¾·×¤Ê̤»ÈÍѶ¦Í­¥á¥â¥ê¤¬³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£
- <code class="directive">ServerLimit</code> ¤È
- <code class="directive"><a href="#maxclients">MaxClients</a></code>
- ¤¬¥·¥¹¥Æ¥à¤Î°·¤¨¤ëÈϰϤò±Û¤¨¤¿ÀßÄêÃͤˤʤäƤ¤¤ë¤È¡¢
- Apache ¤Ïµ¯Æ°¤·¤Ê¤¤¤«¡¢µ¯Æ°¤·¤Æ¤âÉÔ°ÂÄê¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p><code class="module"><a href="../mod/prefork.html">prefork</a></code> MPM ¤Ç¤Ï¡¢
- <code class="directive"><a href="#maxclients">MaxClients</a></code>
- ¤ò 256 (¥Ç¥Õ¥©¥ë¥È) ¤è¤ê¤âÂ礭¤ÊÃͤËÀßÄꤹ¤ëɬÍפ¬¤¢¤ë»þ¤Ë¤À¤±»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
- ´õ˾¤Î <code class="directive"><a href="#maxclients">MaxClients</a></code>
- ¿ô¤È¤¯¤é¤Ù¤Æ¡¢É¬Íװʾå¤ËÂ礭¤ÊÃͤò»ØÄꤹ¤ë¤³¤È¤ÏÈò¤±¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code class="module"><a href="../mod/worker.html">worker</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>,
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> MPM ¤Ç¤Ï¡¢
- <code class="directive"><a href="#maxclients">MaxClients</a></code> ¤È
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤ÎÀßÄê¤Ç 16 ¥µ¡¼¥Ð¥×¥í¥»¥¹ (¥Ç¥Õ¥©¥ë¥È)
- °Ê¾åɬÍפˤʤë¾ì¹ç¤Ë¤Î¤ß»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£´õ˾¤Î
- <code class="directive"><a href="#maxclients ">MaxClients </a></code> ¤È
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤È¤¯¤é¤Ù¤Æ¡¢É¬ÍפȤʤ륵¡¼¥Ð¥×¥í¥»¥¹¿ô°Ê¾å¤ËÂ礭¤ÊÃͤò
- ÀßÄꤹ¤ë¤³¤È¤ÏÈò¤±¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> MPM ¤Ç¤Ï¡¢
- <code class="directive"><a href="../mod/perchild.html#numservers">NumServers</a></code> ¤ò 8 (¥Ç¥Õ¥©¥ë¥È)
- ¤è¤í¤¤¤âÂ礭¤ÊÃͤËÀßÄꤹ¤ëɬÍפ¬¤¢¤ë¤È¤­¤Ë¤Î¤ß»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code>ServerLimit 20000</code> ¤È¤¤¤¦À©¸ÂÉÕ¤­¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ì¤Ï¥¹¥Ú¥ë¥ß¥¹¤Ë¤è¤Ã¤Æ¸í¤Ã¤Æ¹ó¤¤¾õ¶·¤Ë¤Ê¤ë¤Î¤ò¡¢
- ²óÈò¤¹¤ë¤¿¤á¤Î½èÃ֤Ǥ¹¡£</p>
- </div>
-
-<h3>»²¾È</h3>
-<ul>
-<li><a href="../stopping.html">Apache ¤ÎÄä»ß¤ÈºÆµ¯Æ°</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="StartServers" id="StartServers">StartServers</a> <a name="startservers" id="startservers">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>StartServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑÊýË¡¤ò»²¾È</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p><code class="directive">StartServers</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î¿ô¤òÀßÄꤷ¤Þ¤¹¡£
- ¥×¥í¥»¥¹¿ô¤ÏÉé²Ù¤Ë±þ¤¸¤ÆưŪ¤ËÀ©¸æ¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- Ä̾ï¤Ï¤³¤ÎÃͤòÄ´À°¤¹¤ëÍýͳ¤Ï¤¢¤Þ¤ê¤Ê¤¤¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï MPM ¤´¤È¤Ë°Û¤Ê¤ê¤Þ¤¹¡£
- <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>,
- <code class="module"><a href="../mod/worker.html">worker</a></code> ¤Ï <code>StartServers 3</code> ¤Ç¤¹¡£
- <code class="module"><a href="../mod/prefork.html">prefork</a></code> ¤Ï <code>5</code> ¤Ç¡¢
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> ¤Ï <code>2</code> ¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="StartThreads" id="StartThreads">StartThreads</a> <a name="startthreads" id="startthreads">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤Î¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>StartThreads <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑÊýË¡¤ò»²¾È</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code></td></tr>
-</table>
- <p>µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤Î¿ô¤Ç¤¹¡£
- ¥¹¥ì¥Ã¥É¿ô¤ÏÉé²Ù¤Ë±þ¤¸¤ÆưŪ¤ËÀ©¸æ¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
- Ä̾ï¤Ï¤³¤ÎÃͤòÄ´À°¤¹¤ëÍýͳ¤Ï¤¢¤Þ¤ê¤Ê¤¤¤Ç¤·¤ç¤¦¡£</p>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ï
- <code>StartThreads 5</code> ¤Ç¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ïµ¯Æ°»þ¤Ë
- ¥×¥í¥»¥¹Ëè¤Î¥¹¥ì¥Ã¥É¿ô¤òÄÉÀפ·¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ï
- <code>StartThreads 50</code> ¤Ç¡¢
- ¤³¤Î¾ì¹ç¥×¥í¥»¥¹¤Ï°ì¤Ä¤·¤«¤Ê¤¤¤Î¤Ç¡¢
- µ¯Æ°»þ¤Ë¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¥¹¥ì¥Ã¥É¤ÎÁí¿ô¤È¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="../mod/beos.html">beos</a></code> ¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ï <code>StartThreads
- 10</code> ¤Ç¤¹¡£
- ¤Þ¤¿¡¢µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤ÎÁí¿ô¤Ë¤âÈ¿±Ç¤µ¤ì¤Þ¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadLimit" id="ThreadLimit">ThreadLimit</a> <a name="threadlimit" id="threadlimit">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>ÀßÄê²Äǽ¤Ê»Ò¥×¥í¥»¥¹Ëè¤Î¥¹¥ì¥Ã¥É¿ô¤Î¾å¸Â¤ò
-ÀßÄꤷ¤Þ¤¹</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ThreadLimit <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑÊýË¡¤ò»²¾È</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0.41 ¤È¤½¤ì°Ê¹ß¤Î <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>
-¤ÇÍøÍѲÄǽ</td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- Apache ¥×¥í¥»¥¹²ÔƯÃæ¤Ë¤ª¤±¤ë
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤ËÀßÄê²Äǽ¤Ê¾å¸ÂÃͤòÀßÄꤷ¤Þ¤¹¡£ºÆµ¯Æ°»þ¤Ë¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃͤò
- Êѹ¹¤·¤Æ¤â̵»ë¤µ¤ì¤Þ¤¹¤¬¡¢
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤ÏºÆµ¯Æ°Ãæ¤Ë¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿¾å¸ÂÃͤޤÇ
- Êѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ëºÝ¤ÏÆäËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- <code class="directive">ThreadLimit</code> ¤¬
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤è¤ê¤â¤º¤Ã¤ÈÂ礭¤ÊÃͤËÀßÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢
- ;·×¤Ê̤»ÈÍѶ¦Í­¥á¥â¥ê¤¬³ä¤êÅö¤Æ¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
- <code class="directive">ThreadLimit</code> ¤¬
- <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code>
- ¤ÎξÊý¤¬¥·¥¹¥Æ¥à¤Î°·¤¨¤ëÈϰϤòĶ¤¨¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
- Apache ¤Ïµ¯Æ°¤·¤Ê¤¤¤«¡¢µ¯Æ°¤·¤¿¤È¤·¤Æ¤âÉÔ°ÂÄê¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃͤϺ£»ÈÍѤ·¤Æ¤¤¤ë Apache ¤Î <code class="directive"><a href="#threadsperchild">ThreadsPerChild</a></code> ¤ÎͽÁÛ¾å¸ÂÃͤò
- Ķ¤¨¤¿ÃͤˤÏÀßÄꤷ¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- </p>
-
- <p><code class="directive">ThreadLimit</code> ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤÏ
- <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> ¤Î¤È¤­¤Ï 1920 ¤Ç¡¢
- ¾¤Î¾ì¹ç¤Ï 64 ¤Ç¤¹¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code>ThreadLimit 20000</code> (<code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>
- ¤Î¾ì¹ç¤Ï <code>ThreadLimit 15000</code> )
- ¤È¤¤¤¦À©¸ÂÉÕ¤­¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ì¤Ï¥¹¥Ú¥ë¥ß¥¹¤Ë¤è¤Ã¤Æ¸í¤Ã¤Æ¹ó¤¤¾õ¶·¤Ë¤Ê¤ë¤Î¤ò¡¢
- ²óÈò¤¹¤ë¤¿¤á¤Î½èÃ֤Ǥ¹¡£</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ThreadsPerChild" id="ThreadsPerChild">ThreadsPerChild</a> <a name="threadsperchild" id="threadsperchild">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>»Ò¥×¥í¥»¥¹¤½¤ì¤¾¤ì¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>ThreadsPerChild <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>¾ÜºÙ¤Ï»ÈÍÑÊýË¡¤ò»²¾È</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-</table>
- <p>¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¤½¤ì¤¾¤ì¤Î»Ò¥×¥í¥»¥¹¤ÇÀ¸À®¤µ¤ì¤ë
- ¥¹¥ì¥Ã¥É¿ô¤òÀßÄꤷ¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤Ï³«»Ï»þ¤Ë¤³¤ì¤é¤Î¥¹¥ì¥Ã¥É¤òÀ¸À®¤·¤Æ¡¢
- ¤½¤Î¸å¤ÏÀ¸À®¤·¤Þ¤»¤ó¡£<code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code> ¤Î¤è¤¦¤Ê¡¢
- »Ò¥×¥í¥»¥¹¤¬°ì¤Ä¤·¤«¤Ê¤¤¤è¤¦¤Ê MPM ¤òÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¤³¤ÎÃͤϥµ¡¼¥Ð¤ÎÉé²ÙÁ´ÂΤò½½Ê¬¼è¤ê°·¤¨¤ëÄøÅ٤ˡ¢
- Â礭¤¯¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£<code class="module"><a href="../mod/worker.html">worker</a></code> ¤Î¤è¤¦¤Ê¡¢
- »Ò¥×¥í¥»¥¹¤¬Ê£¿ô¤¢¤ë¤è¤¦¤Ê MPM ¤òÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¥µ¡¼¥Ð¤ÎÄ̾ïÉé²Ù¤ò½½Ê¬°·¤¨¤ëÄøÅ٤ˡ¢
- <em>¥¹¥ì¥Ã¥ÉÁí¿ô</em>¤¬Â¿¤¯¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p><code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>¤Ç¤Î <code class="directive">ThreadsPerChild</code>
- ¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï <code>64</code> ¤Ç¡¢Â¾¤Î¾ì¹ç¤Ï
- <code>25</code> ¤Ç¤¹¡£</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="User" id="User">User</a> <a name="user" id="user">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤ËÍѤ¤¤ë¥æ¡¼¥¶ ID</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>User <var>unix-userid</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>User #-1</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td><code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code></td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>Apache 2.0 °Ê¹ß¤Ç¡¢¥°¥í¡¼¥Ð¥ëÀßÄê¤Ç¤Î¤ßÍ­¸ú¤Ç¤¹¡£
-</td></tr>
-</table>
- <p><code class="directive">User</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥µ¡¼¥Ð¤¬¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤ËÍѤ¤¤ë¥æ¡¼¥¶ ID ¤òÀßÄꤷ¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¹¥¿¥ó¥É¥¢¥í¥ó·¿¤Î
- ¥µ¡¼¥Ð¤ÏºÇ½é¤Ë root ¸¢¸Â¤Çµ¯Æ°¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- Èó root ¥æ¡¼¥¶¤Ç¥µ¡¼¥Ð¤òµ¯Æ°¤·¤¿¾ì¹ç¤Ï¡¢
- ¸¢¸Â¤ÎÄ㤤¥æ¡¼¥¶¤Ø¤ÈÊѤï¤ë¤³¤È¤¬¤Ç¤­¤º¡¢
- ·ë¶É¸µ¤Î¥æ¡¼¥¶¤Î¥×¥í¥»¥¹¤È¤·¤Æ¼Â¹Ô¤µ¤ì³¤±¤Þ¤¹¡£
- <code>root</code> ¤Çµ¯Æ°¤·¤¿¾ì¹ç¤Ë¿Æ¥×¥í¥»¥¹¤¬ root
- ¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¤Î¤ÏÀµ¾ï¤ÊÆ°ºî¤Ç¤¹¡£
- <var>Unix-userid</var> ¤Ï¼¡¤Î¤É¤ì¤«¤Ç¤¹¡£</p>
-
- <dl>
- <dt>¥æ¡¼¥¶Ì¾</dt>
- <dd>¥æ¡¼¥¶¤ò̾Á°¤Ç»²¾È¤·¤Þ¤¹¡£</dd>
-
- <dt># ¤Ë³¤¤¤Æ¥æ¡¼¥¶ÈÖ¹æ</dt>
- <dd>¥æ¡¼¥¶¤òÈÖ¹æ¤Ç»²¾È¤·¤Þ¤¹¡£</dd>
- </dl>
-
- <p>¤³¤Î¥æ¡¼¥¶¤Ï¡¢³°Éô¤Ë¸«¤»¤ë¤è¤¦¤Ë°Õ¿Þ¤·¤Æ¤¤¤Ê¤¤¥Õ¥¡¥¤¥ë¤Ë¡¢
- ¥¢¥¯¥»¥¹²Äǽ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤è¤¦¤Ê¸¢¸Â¤ò»ý¤Ä¤Ù¤­¤Ç¤Ï¤Ê¤¤¤Ç¤¹¤·¡¢
- ƱÍÍ¤Ë HTTP ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ±þÅú¤¹¤ë¤è¤¦¤Ë°Õ¿Þ¤·¤Æ¤¤¤Ê¤¤
- ¼Â¹Ô¥³¡¼¥É¤ò¡¢¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ê¸¢¸Â¤ò»ý¤Ä¤Ù¤­¤Ç¤Ï¤Ê¤¤¤Ç¤¹¡£
- ¥µ¡¼¥Ð¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤ËÆÃÄê¤Î¿·¤·¤¤¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤ò
- ÀßÄꤹ¤ë¤³¤È¤ò¤ªÁ¦¤á¤¤¤¿¤·¤Þ¤¹¡£
- <code>nobody</code> ¥æ¡¼¥¶¤ò»ÈÍѤ¹¤ë´ÉÍý¼Ô¤â¤¤¤Þ¤¹¤¬¡¢
- ¤³¤ì¤¬¾ï¤Ë˾¤Þ¤·¤¤¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤Ê¤¼¤Ê¤é <code>nobody</code> ¥æ¡¼¥¶¤Ï¡¢¥·¥¹¥Æ¥à¤Ç
- ¾¤ÎÌò³ä¤òô¤Ã¤Æ¤¤¤ë¤«¤âÃΤì¤Ê¤¤¤«¤é¤Ç¤¹¡£</p>
-
- <div class="warning"><h3>¥»¥­¥å¥ê¥Æ¥£</h3>
- <p>Àµ³Î¤Ë¤É¤ó¤Ê¤³¤È¤ò¤ä¤Ã¤Æ¤¤¤ë¤Î¤«¡¢¤½¤Î´í¸±À­¤òÃΤé¤Ê¤¤¤Ç¡¢
- <code class="directive">User</code> (¤ä <code class="directive"><a href="#group">Group</a></code>) ¤ò <code>root</code> ¤Ë
- ÀßÄꤷ¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£</p>
- </div>
-
- <p><code class="module"><a href="../mod/perchild.html">perchild</a></code> MPM ¤Ç¤Ï¡¢°Û¤Ê¤ë¥æ¡¼¥¶ ID
- ¤ÇÊ£¿ô¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤òÆ°¤«¤¹¤³¤È¤òÌÜŪ¤È¤·¤Æ¤¤¤Þ¤¹¤¬¡¢
- <code class="directive">User</code> ¤Ï¡¢¼ç¥µ¡¼¥Ð¤Î¥æ¡¼¥¶ ID
- ¤È¡¢<code class="directive"><a href="../mod/perchild.html#assignuserid">AssignUserID</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ý¤¿¤Ê¤¤ <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Ø¤Î
- ¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¤È¤òÄêµÁ¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>Æõ­»ö¹à: ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤Ç»ÈÍѤ¹¤ë¤³¤È¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¡£
- <a href="../suexec.html">suexec</a> ¸þ¤±¤Ë¥µ¡¼¥Ð¤òÀßÄꤹ¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- <code class="directive"><a href="../mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code>
- ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p><code class="directive">User</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- <code class="module"><a href="../mod/beos.html">beos</a></code> ¤È <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code> MPM
- ¤Ë¤â¸ºß¤·¤Þ¤¹¤¬¡¢¼Â¼ÁŪ¤Ë̵¸ú¤Ç¡¢¸ß´¹À­¤Î¤¿¤á¤À¤±¤Ë¸ºß¤·¤Þ¤¹¡£</p>
- </div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_common.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_common.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_common.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_common.xml b/docs/manual/mod/mpm_common.xml
deleted file mode 100644
index a44a4f54a3..0000000000
--- a/docs/manual/mod/mpm_common.xml
+++ /dev/null
@@ -1,943 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.41 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_common.xml.meta">
-
-<name>mpm_common</name>
-<description>A collection of directives that are implemented by
-more than one multi-processing module (MPM)</description>
-<status>MPM</status>
-
-<directivesynopsis>
-<name>AcceptMutex</name>
-<description>Method that Apache uses to serialize multiple children
-accepting requests on network sockets</description>
-<syntax>AcceptMutex Default|<var>method</var></syntax>
-<default>AcceptMutex Default</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>The <directive>AcceptMutex</directive> directives sets the
- method that Apache uses to serialize multiple children accepting
- requests on network sockets. Prior to Apache 2.0, the method was
- selectable only at compile time. The optimal method to use is
- highly architecture and platform dependent. For further details,
- see the <a href="../misc/perf-tuning.html">performance tuning</a>
- documentation.</p>
-
- <p>If this directive is set to <code>Default</code>, then the
- compile-time selected default will be used. Other possible
- methods are listed below. Note that not all methods are
- available on all platforms. If a method is specified which is
- not available, a message will be written to the error log
- listing the available methods.</p>
-
- <dl>
- <dt><code>flock</code></dt>
- <dd>uses the <code>flock(2)</code> system call to lock the
- file defined by the <directive module="mpm_common"
- >LockFile</directive> directive.</dd>
-
- <dt><code>fcntl</code></dt>
- <dd>uses the <code>fcntl(2)</code> system call to lock the
- file defined by the <directive module="mpm_common"
- >LockFile</directive> directive.</dd>
-
- <dt><code>posixsem</code></dt>
- <dd>uses POSIX compatible semaphores to implement the mutex.</dd>
-
- <dt><code>pthread</code></dt>
- <dd>uses POSIX mutexes as implemented by the POSIX Threads
- (PThreads) specification.</dd>
-
- <dt><code>sysvsem</code></dt>
- <dd>uses SySV-style semaphores to implement the mutex.</dd>
- </dl>
-
- <p>If you want to find out the compile time chosen default
- for your system, you may set your <directive module="core"
- >LogLevel</directive> to <code>debug</code>. Then the default <directive
- >AcceptMutex</directive> will be written into the <directive
- module="core">ErrorLog</directive>.</p>
-
- <note type="warning"><title>Warning</title>
- <p>On most systems, when the <code>pthread</code> option
- is selected, if a child process terminates abnormally
- while holding the <code>AcceptCntl</code> mutex the
- server will stop responding to requests. When this
- occurs, the server will require a manual restart to
- recover.</p>
- <p>Solaris is a notable exception as it provides a
- mechanism, used by Apache, which usually allows the
- mutex to be recovered after a child process terminates
- abnormally while holding a mutex.</p>
- <p>If your system implements the
- <code>pthread_mutexattr_setrobust_np()</code> function,
- you may be able to use the <code>pthread</code> option safely.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CoreDumpDirectory</name>
-<description>Directory where Apache attempts to
-switch before dumping core</description>
-<syntax>CoreDumpDirectory <var>directory</var></syntax>
-<default>See usage for the default setting</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>This controls the directory to which Apache attempts to
- switch before dumping core. The default is in the
- <directive module="core">ServerRoot</directive> directory, however
- since this should not be writable by the user the server runs
- as, core dumps won't normally get written. If you want a core
- dump for debugging, you can use this directive to place it in a
- different location.</p>
-
- <note><title>Core Dumps on Linux</title>
- <p>If Apache starts as root and switches to another user, the
- Linux kernel <em>disables</em> core dumps even if the directory is
- writable for the process. Apache (2.0.46 and later) reenables core dumps
- on Linux 2.4 and beyond, but only if you explicitly configure a <directive
- >CoreDumpDirectory</directive>.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableExceptionHook</name>
-<description>Enables a hook that runs exception handlers
-after a crash</description>
-<syntax>EnableExceptionHook On|Off</syntax>
-<default>EnableExceptionHook Off</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module>
-<module>worker</module></modulelist>
-<compatibility>Available in version 2.0.49 and later</compatibility>
-
-<usage>
- <p>For safety reasons this directive is only available if the server was
- configured with the <code>--enable-exception-hook</code> option. It
- enables a hook that allows external modules to plug in and do something
- after a child crashed.</p>
-
- <p>There are already two modules, <code>mod_whatkilledus</code> and
- <code>mod_backtrace</code> that make use of this hook. Please have a
- look at Jeff Trawick's <a
- href="http://www.apache.org/~trawick/exception_hook.html"
- >EnableExceptionHook site</a> for more information about these.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Group</name>
-<description>Group under which the server will answer
-requests</description>
-<syntax>Group <var>unix-group</var></syntax>
-<default>Group #-1</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-<compatibility>Only valid in global server config since Apache
-2.0</compatibility>
-
-<usage>
- <p>The <directive>Group</directive> directive sets the group under
- which the server will answer requests. In order to use this
- directive, the server must be run initially as <code>root</code>. If
- you start the server as a non-root user, it will fail to change to the
- specified group, and will instead continue to run as the group of the
- original user. <var>Unix-group</var> is one of:</p>
-
- <dl>
- <dt>A group name</dt>
- <dd>Refers to the given group by name.</dd>
-
- <dt><code>#</code> followed by a group number.</dt>
- <dd>Refers to a group by its number.</dd>
- </dl>
-
- <example><title>Example</title>
- Group www-group
- </example>
-
- <p>It is recommended that you set up a new group specifically for
- running the server. Some admins use user <code>nobody</code>,
- but this is not always possible or desirable.</p>
-
- <note type="warning"><title>Security</title>
- <p>Don't set <directive>Group</directive> (or <directive
- module="mpm_common">User</directive>) to <code>root</code> unless
- you know exactly what you are doing, and what the dangers are.</p>
- </note>
-
- <p>Special note: Use of this directive in <directive module="core"
- type="section">VirtualHost</directive> is no longer supported. To
- configure your server for <a href="mod_suexec.html">suexec</a> use
- <directive module="mod_suexec">SuexecUserGroup</directive>.</p>
-
- <note><title>Note</title>
- <p>Although the <directive>Group</directive> directive is present
- in the <module>beos</module> and <module>mpmt_os2</module> MPMs,
- it is actually a no-op there and only exists for compatibility
- reasons.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>PidFile</name>
-<description>File where the server records the process ID
-of the daemon</description>
-<syntax>PidFile <var>filename</var></syntax>
-<default>PidFile logs/httpd.pid</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>mpmt_os2</module>
-<module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>The <directive>PidFile</directive> directive sets the file to
- which the server records the process id of the daemon. If the
- filename is not absolute then it is assumed to be relative to the
- <directive module="core">ServerRoot</directive>.</p>
-
- <example><title>Example</title>
- PidFile /var/run/apache.pid
- </example>
-
- <p>It is often useful to be able to send the server a signal,
- so that it closes and then re-opens its <directive
- module="core">ErrorLog</directive> and <directive
- module="mod_log_config">TransferLog</directive>, and
- re-reads its configuration files. This is done by sending a
- SIGHUP (kill -1) signal to the process id listed in the
- <directive>PidFile</directive>.</p>
-
- <p>The <directive>PidFile</directive> is subject to the same
- warnings about log file placement and <a
- href="../misc/security_tips.html#serverroot">security</a>.</p>
-
- <note><title>Note</title>
- <p>As of Apache 2 it is recommended to use only the <a
- href="../programs/apachectl.html">apachectl</a> script for
- (re-)starting or stopping the server.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Listen</name>
-<description>IP addresses and ports that the server
-listens to</description>
-<syntax>Listen [<var>IP-address</var>:]<var>portnumber</var></syntax>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Required directive since Apache 2.0</compatibility>
-
-<usage>
- <p>The <directive>Listen</directive> directive instructs Apache to
- listen to only specific IP addresses or ports; by default it
- responds to requests on all IP interfaces. <directive>Listen</directive>
- is now a required directive. If it is not in the config file, the
- server will fail to start. This is a change from previous versions
- of Apache.</p>
-
- <p>The <directive>Listen</directive> directive tells the server to
- accept incoming requests on the specified port or address-and-port
- combination. If only a port number is specified, the server listens to
- the given port on all interfaces. If an IP address is given as well
- as a port, the server will listen on the given port and
- interface.</p>
-
- <p>Multiple <directive>Listen</directive> directives may be used to
- specify a number of addresses and ports to listen to. The server will
- respond to requests from any of the listed addresses and ports.</p>
-
- <p>For example, to make the server accept connections on both
- port 80 and port 8000, use:</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>To make the server accept connections on two specified
- interfaces and port numbers, use </p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>IPv6 addresses must be surrounded in square brackets, as in the
- following example:</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
-</usage>
-<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
-<seealso><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ListenBackLog</name>
-<description>Maximum length of the queue of pending connections</description>
-<syntax>ListenBacklog <var>backlog</var></syntax>
-<default>ListenBacklog 511</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>The maximum length of the queue of pending connections.
- Generally no tuning is needed or desired, however on some
- systems it is desirable to increase this when under a TCP SYN
- flood attack. See the backlog parameter to the
- <code>listen(2)</code> system call.</p>
-
- <p>This will often be limited to a smaller number by the
- operating system. This varies from OS to OS. Also note that
- many OSes do not use exactly what is specified as the backlog,
- but use a number based on (but normally larger than) what is
- set.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LockFile</name>
-<description>Location of the accept serialization lock file</description>
-<syntax>LockFile <var>filename</var></syntax>
-<default>LockFile logs/accept.lock</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>The <directive>LockFile</directive> directive sets the path to
- the lockfile used when Apache is used with an <directive
- module="mpm_common">AcceptMutex</directive> value of either
- <code>fcntl</code> or <code>flock</code>. This directive should
- normally be left at its default value. The main reason for changing
- it is if the <code>logs</code> directory is NFS mounted, since
- <strong>the lockfile must be stored on a local disk</strong>. The PID
- of the main server process is automatically appended to the
- filename.</p>
-
- <note type="warning"><title>Security</title>
- <p>It is best to <em>avoid</em> putting this file in a world writable
- directory such as <code>/var/tmp</code> because someone could create
- a denial of service attack and prevent the server from starting by
- creating a lockfile with the same name as the one the server will try
- to create.</p>
- </note>
-</usage>
-<seealso><directive module="mpm_common">AcceptMutex</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxClients</name>
-<description>Maximum number of child processes that will be created
-to serve requests</description>
-<syntax>MaxClients <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>The <directive>MaxClients</directive> directive sets the limit
- on the number of simultaneous requests that will be served. Any
- connection attempts over the <directive>MaxClients</directive>
- limit will normally be queued, up to a number based on the
- <directive module="mpm_common">ListenBacklog</directive>
- directive. Once a child process is freed at the end of a different
- request, the connection will then be serviced.</p>
-
- <p>For non-threaded servers (<em>i.e.</em>, <module>prefork</module>),
- <directive>MaxClients</directive> translates into the maximum
- number of child processes that will be launched to serve requests.
- The default value is <code>256</code>; to increase it, you must also raise
- <directive module="mpm_common">ServerLimit</directive>.</p>
-
- <p>For threaded and hybrid servers (<em>e.g.</em> <module>beos</module>
- or <module>worker</module>) <directive>MaxClients</directive> restricts
- the total number of threads that will be available to serve clients.
- The default value for <module>beos</module> is <code>50</code>. For
- hybrid MPMs the default value is <code>16</code> (<directive
- module="mpm_common">ServerLimit</directive>) multiplied by the value of
- <code>25</code> (<directive module="mpm_common"
- >ThreadsPerChild</directive>). Therefore, to increase <directive
- >MaxClients</directive> to a value that requires more than 16 processes,
- you must also raise <directive module="mpm_common"
- >ServerLimit</directive>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxMemFree</name>
-<description>Maximum amount of memory that the main allocator is allowed
-to hold without calling <code>free()</code></description>
-<syntax>MaxMemFree <var>KBytes</var></syntax>
-<default>MaxMemFree 0</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>prefork</module>
-<module>threadpool</module><module>worker</module><module>mpm_winnt</module></modulelist>
-
-<usage>
- <p>The <directive>MaxMemFree</directive> directive sets the
- maximum number of free Kbytes that the main allocator is allowed
- to hold without calling <code>free()</code>. When not set, or when set
- to zero, the threshold will be set to unlimited.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerChild</name>
-<description>Limit on the number of requests that an individual child server
-will handle during its life</description>
-<syntax>MaxRequestsPerChild <var>number</var></syntax>
-<default>MaxRequestsPerChild 10000</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_netware</module>
-<module>mpm_winnt</module><module>mpmt_os2</module>
-<module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>The <directive>MaxRequestsPerChild</directive> directive sets
- the limit on the number of requests that an individual child
- server process will handle. After
- <directive>MaxRequestsPerChild</directive> requests, the child
- process will die. If <directive>MaxRequestsPerChild</directive> is
- <code>0</code>, then the process will never expire.</p>
-
- <note><title>Different default values</title>
- <p>The default value for <module>mpm_netware</module> and
- <module>mpm_winnt</module> is <code>0</code>.</p>
- </note>
-
- <p>Setting <directive>MaxRequestsPerChild</directive> to a
- non-zero limit has two beneficial effects:</p>
-
- <ul>
- <li>it limits the amount of memory that process can consume
- by (accidental) memory leakage;</li>
-
- <li>by giving processes a finite lifetime, it helps reduce
- the number of processes when the server load reduces.</li>
- </ul>
-
- <note><title>Note</title>
- <p>For <directive module="core">KeepAlive</directive> requests, only
- the first request is counted towards this limit. In effect, it
- changes the behavior to limit the number of <em>connections</em> per
- child.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareThreads</name>
-<description>Maximum number of idle threads</description>
-<syntax>MaxSpareThreads <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpmt_os2</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Maximum number of idle threads. Different MPMs deal with this
- directive differently.</p>
-
- <p>For <module>perchild</module> the default is
- <code>MaxSpareThreads 10</code>. This MPM monitors the number of
- idle threads on a per-child basis. If there are too many idle
- threads in that child, the server will begin to kill threads
- within that child.</p>
-
- <p>For <module>worker</module>, <module>leader</module> and <module
- >threadpool</module> the default is <code>MaxSpareThreads 250</code>.
- These MPMs deal with idle threads on a server-wide basis. If there
- are too many idle threads in the server then child processes are
- killed until the number of idle threads is less than this number.</p>
-
- <p>For <module>mpm_netware</module> the default is
- <code>MaxSpareThreads 100</code>. Since this MPM runs a
- single-process, the spare thread count is also server-wide.</p>
-
- <p><module>beos</module> and <module>mpmt_os2</module> work
- similar to <module>mpm_netware</module>. The default for
- <module>beos</module> is <code>MaxSpareThreads 50</code>. For
- <module>mpmt_os2</module> the default value is <code>10</code>.</p>
-
- <note><title>Restrictions</title>
- <p>The range of the <directive>MaxSpareThreads</directive> value
- is restricted. Apache will correct the given value automatically
- according to the following rules:</p>
- <ul>
- <li><module>perchild</module> requires <directive
- >MaxSpareThreads</directive> to be less or equal than <directive
- module="mpm_common">ThreadLimit</directive>.</li>
-
- <li><module>mpm_netware</module> wants the value to be greater than
- <directive module="mpm_common">MinSpareThreads</directive>.</li>
-
- <li>For <module>leader</module>, <module>threadpool</module> and
- <module>worker</module> the value must be greater or equal than
- the sum of <directive module="mpm_common">MinSpareThreads</directive>
- and <directive module="mpm_common">ThreadsPerChild</directive>.</li>
- </ul>
- </note>
-</usage>
-<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareThreads</name>
-<description>Minimum number of idle threads available to handle request
-spikes</description>
-<syntax>MinSpareThreads <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpmt_os2</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Minimum number of idle threads to handle request spikes.
- Different MPMs deal with this directive
- differently.</p>
-
- <p><module>perchild</module> uses a default of
- <code>MinSpareThreads 5</code> and monitors the number of idle
- threads on a per-child basis. If there aren't enough idle threads
- in that child, the server will begin to create new threads within
- that child. Thus, if you set <directive module="perchild"
- >NumServers</directive> to <code>10</code> and a <directive
- >MinSpareThreads</directive> value of <code>5</code>, you'll have
- at least 50 idle threads on your system.</p>
-
- <p><module>worker</module>, <module>leader</module> and
- <module>threadpool</module> use a default of <code>MinSpareThreads
- 75</code> and deal with idle threads on a server-wide basis. If
- there aren't enough idle threads in the server then child
- processes are created until the number of idle threads is greater
- than number.</p>
-
- <p><module>mpm_netware</module> uses a default of
- <code>MinSpareThreads 10</code> and, since it is a single-process
- MPM, tracks this on a server-wide bases.</p>
-
- <p><module>beos</module> and <module>mpmt_os2</module> work
- similar to <module>mpm_netware</module>. The default for
- <module>beos</module> is <code>MinSpareThreads 1</code>. For
- <module>mpmt_os2</module> the default value is <code>5</code>.</p>
-</usage>
-<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScoreBoardFile</name>
-<description>Location of the file used to store coordination data for
-the child processes</description>
-<syntax>ScoreBoardFile <var>file-path</var></syntax>
-<default>ScoreBoardFile logs/apache_status</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Apache uses a scoreboard to communicate between its parent
- and child processes. Some architectures require a file to facilitate
- this communication. If the file is left unspecified, Apache first
- attempts to create the scoreboard entirely in memory (using anonymous
- shared memory) and, failing that, will attempt to create the file on
- disk (using file-based shared memory). Specifying this directive causes
- Apache to always create the file on the disk.</p>
-
- <example><title>Example</title>
- ScoreBoardFile /var/run/apache_status
- </example>
-
- <p>File-based shared memory is useful for third-party applications
- that require direct access to the scoreboard.</p>
-
- <p>If you use a <directive>ScoreBoardFile</directive> then
- you may see improved speed by placing it on a RAM disk. But be
- careful that you heed the same warnings about log file placement
- and <a href="../misc/security_tips.html">security</a>.</p>
-</usage>
-<seealso><a href="../stopping.html">Stopping and Restarting
-Apache</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SendBufferSize</name>
-<description>TCP buffer size</description>
-<syntax>SendBufferSize <var>bytes</var></syntax>
-<default>SendBufferSize 0</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>The server will set the TCP buffer size to the number of bytes
- specified. Very useful to increase past standard OS defaults on
- high speed high latency (<em>i.e.</em>, 100ms or so, such as
- transcontinental fast pipes).</p>
-
- <p>If set to the value of <code>0</code>, the server will use the
- OS deault.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerLimit</name>
-<description>Upper limit on configurable number of processes</description>
-<syntax>ServerLimit <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>For the <module>prefork</module> MPM, this directive sets the
- maximum configured value for <directive
- module="mpm_common">MaxClients</directive> for the lifetime of the
- Apache process. For the <module>worker</module> MPM, this directive
- in combination with <directive
- module="mpm_common">ThreadLimit</directive> sets
- the maximum configured value for <directive
- module="mpm_common">MaxClients</directive> for the lifetime of the
- Apache process. Any attempts to change this directive during a
- restart will be ignored, but <directive
- module="mpm_common">MaxClients</directive> can be modified during
- a restart.</p>
-
- <p>Special care must be taken when using this directive. If
- <directive>ServerLimit</directive> is set to a value much higher
- than necessary, extra, unused shared memory will be allocated. If
- both <directive>ServerLimit</directive> and <directive
- module="mpm_common">MaxClients</directive> are set to values
- higher than the system can handle, Apache may not start or the
- system may become unstable.</p>
-
- <p>With the <module>prefork</module> MPM, use this directive only
- if you need to set <directive
- module="mpm_common">MaxClients</directive> higher than 256 (default).
- Do not set the value of this directive any higher than what you
- might want to set <directive
- module="mpm_common">MaxClients</directive> to.</p>
-
- <p>With <module>worker</module>, <module>leader</module> and
- <module>threadpool</module> use this directive only
- if your <directive module="mpm_common">MaxClients</directive> and
- <directive module="mpm_common">ThreadsPerChild</directive>
- settings require more than 16 server processes (default). Do not set
- the value of this directive any higher than the number of server
- processes required by what you may want for <directive
- module="mpm_common">MaxClients </directive> and <directive
- module="mpm_common">ThreadsPerChild</directive>.</p>
-
- <p>With the <module>perchild</module> MPM, use this directive only
- if you need to set <directive
- module="perchild">NumServers</directive> higher than 8 (default).</p>
-
- <note><title>Note</title>
- <p>There is a hard limit of <code>ServerLimit 20000</code> compiled
- into the server (for the <module>prefork</module> MPM 200000). This is
- intended to avoid nasty effects caused by typos.</p>
- </note>
-</usage>
-<seealso><a href="../stopping.html">Stopping and Restarting Apache</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartServers</name>
-<description>Number of child server processes created at startup</description>
-<syntax>StartServers <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpmt_os2</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>The <directive>StartServers</directive> directive sets the
- number of child server processes created on startup. As the number
- of processes is dynamically controlled depending on the load,
- there is usually little reason to adjust this parameter.</p>
-
- <p>The default value differs from MPM to MPM. For
- <module>leader</module>, <module>threadpool</module> and
- <module>worker</module> the default is <code>StartServers 3</code>.
- For <module>prefork</module> defaults to <code>5</code> and for
- <module>mpmt_os2</module> to <code>2</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartThreads</name>
-<description>Number of threads created on startup</description>
-<syntax>StartThreads <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>mpm_netware</module>
-<module>perchild</module></modulelist>
-
-<usage>
- <p>Number of threads created on startup. As the
- number of threads is dynamically controlled depending on the
- load, there is usually little reason to adjust this
- parameter.</p>
-
- <p>For <module>perchild</module> the default is <code>StartThreads
- 5</code> and this directive tracks the number of threads per
- process at startup.</p>
-
- <p>For <module>mpm_netware</module> the default is
- <code>StartThreads 50</code> and, since there is only a single
- process, this is the total number of threads created at startup to
- serve requests.</p>
-
- <p>For <module>beos</module> the default is <code>StartThreads
- 10</code>. It also reflects the total number of threads created
- at startup to serve requests.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadLimit</name>
-<description>Sets the upper limit on the configurable number of threads
-per child process</description>
-<syntax>ThreadLimit <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_winnt</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Available for <module>mpm_winnt</module> in Apache 2.0.41
-and later</compatibility>
-
-<usage>
- <p>This directive sets the maximum configured value for <directive
- module="mpm_common">ThreadsPerChild</directive> for the lifetime
- of the Apache process. Any attempts to change this directive
- during a restart will be ignored, but <directive
- module="mpm_common">ThreadsPerChild</directive> can be modified
- during a restart up to the value of this directive.</p>
-
- <p>Special care must be taken when using this directive. If
- <directive>ThreadLimit</directive> is set to a value much higher
- than <directive module="mpm_common">ThreadsPerChild</directive>,
- extra unused shared memory will be allocated. If both
- <directive>ThreadLimit</directive> and <directive
- module="mpm_common">ThreadsPerChild</directive> are set to values
- higher than the system can handle, Apache may not start or the
- system may become unstable. Do not set the value of this directive
- any higher than your greatest predicted setting of <directive
- module="mpm_common">ThreadsPerChild</directive> for the
- current run of Apache.</p>
-
- <p>The default value for <directive>ThreadLimit</directive> is
- <code>1920</code> when used with <module>mpm_winnt</module> and
- <code>64</code> when used with the others.</p>
-
- <note><title>Note</title>
- <p>There is a hard limit of <code>ThreadLimit 20000</code> (or
- <code>ThreadLimit 15000</code> with <module>mpm_winnt</module>)
- compiled into the server. This is intended to avoid nasty effects
- caused by typos.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadsPerChild</name>
-<description>Number of threads created by each child process</description>
-<syntax>ThreadsPerChild <var>number</var></syntax>
-<default>See usage for details</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_winnt</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>This directive sets the number of threads created by each
- child process. The child creates these threads at startup and
- never creates more. If using an MPM like <module>mpm_winnt</module>,
- where there is only one child process, this number should be high
- enough to handle the entire load of the server. If using an MPM
- like <module>worker</module>, where there are multiple child processes,
- the <em>total</em> number of threads should be high enough to handle
- the common load on the server.</p>
-
- <p>The default value for <directive>ThreadsPerChild</directive> is
- <code>64</code> when used with <module>mpm_winnt</module> and
- <code>25</code> when used with the others.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadStackSize</name>
-<description>The size in bytes of the stack used by threads handling
-client connections</description>
-<syntax>ThreadStackSize <var>size</var></syntax>
-<default>65536 on NetWare; varies on other operating systems</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_netware</module>
-<module>mpm_winnt</module><module>perchild</module>
-<module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Available in Apache 2.1 and later</compatibility>
-
-<usage>
- <p>The <directive>ThreadStackSize</directive> directive sets the
- size of the stack (for autodata) of threads which handle client
- connections and call modules to help process those connections.
- In most cases the operating system default for stack size is
- reasonable, but there are some conditions where it may need to be
- adjusted:</p>
-
- <ul>
- <li>On platforms with a relatively small default thread stack size
- (e.g., HP-UX), Apache may crash when using some third-party modules
- which use a relatively large amount of autodata storage. Those
- same modules may have worked fine on other platforms where the
- default thread stack size is larger. This type of crash is
- resolved by setting <directive>ThreadStackSize</directive> to a
- value higher than the operating system default. This type of
- adjustment is necessary only if the provider of the third-party
- module specifies that it is required, or if diagnosis of an Apache
- crash indicates that the thread stack size was too small.</li>
-
- <li>On platforms where the default thread stack size is
- significantly larger than necessary for the web server
- configuration, a higher number of threads per child process
- will be achievable if <directive>ThreadStackSize</directive> is
- set to a value lower than the operating system default. This type
- of adjustment should only be made in a test environment which allows
- the full set of web server processing can be exercised, as there
- may be infrequent requests which require more stack to process.
- A change in the web server configuration can invalidate the
- current <directive>ThreadStackSize</directive> setting.</li>
- </ul>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>User</name>
-<description>The userid under which the server will answer
-requests</description>
-<syntax>User <var>unix-userid</var></syntax>
-<default>User #-1</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Only valid in global server config since Apache
-2.0</compatibility>
-
-<usage>
- <p>The <directive>User</directive> directive sets the user ID as
- which the server will answer requests. In order to use this
- directive, the server must be run initially as <code>root</code>.
- If you start the server as a non-root user, it will fail to change
- to the lesser privileged user, and will instead continue to run as
- that original user. If you do start the server as <code>root</code>,
- then it is normal for the parent process to remain running as root.
- <var>Unix-userid</var> is one of:</p>
-
- <dl>
- <dt>A username</dt>
- <dd>Refers to the given user by name.</dd>
-
- <dt># followed by a user number.</dt>
- <dd>Refers to a user by its number.</dd>
- </dl>
-
- <p>The user should have no privileges that result in it being
- able to access files that are not intended to be visible to the
- outside world, and similarly, the user should not be able to
- execute code that is not meant for HTTP requests. It is
- recommended that you set up a new user and group specifically for
- running the server. Some admins use user <code>nobody</code>, but
- this is not always desirable, since the <code>nobody</code> user
- can have other uses on the system.</p>
-
- <note type="warning"><title>Security</title>
- <p>Don't set <directive>User</directive> (or <directive
- module="mpm_common">Group</directive>) to <code>root</code> unless
- you know exactly what you are doing, and what the dangers are.</p>
- </note>
-
- <p>With the <module>perchild</module> MPM, which is intended to
- server virtual hosts run under different user IDs, the
- <directive>User</directive> directive defines the user ID for the
- main server and the fallback for <directive type="section"
- module="core">VirtualHost</directive> sections without an
- <directive module="perchild">AssignUserID</directive> directive.</p>
-
- <p>Special note: Use of this directive in <directive module="core"
- type="section">VirtualHost</directive> is no longer supported. To
- configure your server for <a href="../suexec.html">suexec</a> use
- <directive module="mod_suexec">SuexecUserGroup</directive>.</p>
-
- <note><title>Note</title>
- <p>Although the <directive>User</directive> directive is present
- in the <module>beos</module> and <module>mpmt_os2</module> MPMs,
- it is actually a no-op there and only exists for compatibility
- reasons.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_common.xml.de b/docs/manual/mod/mpm_common.xml.de
deleted file mode 100644
index c5971a834f..0000000000
--- a/docs/manual/mod/mpm_common.xml.de
+++ /dev/null
@@ -1,1002 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.41 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_common.xml.meta">
-
-<name>mpm_common</name>
-<description>Eine Sammlung von Direktiven, die in mehr als einem
- Multi-Processing-Modul (MPM) implementiert sind.</description>
-<status>MPM</status>
-
-<directivesynopsis>
-<name>AcceptMutex</name>
-<description>Vom Apache verwendete Methode zur Serialisierung mehrerer
- Kindprozesse, die Anfragen an Netzwerk-Sockets entgegennehmen.</description>
-<syntax>AcceptMutex Default|<var>Methode</var></syntax>
-<default>AcceptMutex Default</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Die Direktive <directive>AcceptMutex</directive> bestimmt die
- Methode, die der Apache zur Serialisierung mehrerer Kindprozesse
- verwendet, welche Anfragen an Netzwerk-Sockets entgegennehmen. Vor
- Apache 2.0 war diese Methode nur zur Kompilierungszeit einstellbar.
- Die optimale Methode ist sehr stark von der Architektur und
- Plattform abh&auml;ngig. Lesen Sie bitte <a
- href="../misc/perf-tuning.html">Perfomance-Hinweise</a> f&uuml;r
- weitere Details.</p>
-
- <p>Wenn die Direktive auf <code>Default</code> eingestellt ist, dann
- wird die zur Kompilierungszeit gew&auml;hlte Voreinstellung verwendet.
- Weitere m&ouml;gliche Methoden sind unten angegeben. Beachten Sie, dass
- nicht alle Methoden auf allen Plattformen verf&uuml;gbar sind. Wird
- eine Methode angegeben, die nicht verf&uuml;gbar ist, dann wird
- eine Nachricht in das Fehlerprotokoll geschrieben, welche die
- verf&uuml;gbaren Methoden auflistet.</p>
-
- <dl>
- <dt><code>flock</code></dt>
- <dd>verwendet die Systemfunktion <code>flock(2)</code>, um die
- durch die <directive module="mpm_common"
- >LockFile</directive>-Direktive definierte Datei zu sperren.</dd>
-
- <dt><code>fcntl</code></dt>
- <dd>verwendet die Systemfunktion <code>fcntl(2)</code>, um die
- durch die <directive module="mpm_common"
- >LockFile</directive>-Direktive definierte Datei zu sperren.</dd>
-
- <dt><code>posixsem</code></dt>
- <dd>verwendet POSIX-kompatible Semaphore, um den Mutex zu
- implementieren.</dd>
-
- <dt><code>pthread</code></dt>
- <dd>verwendet gem&auml;&szlig; der POSIX-Thread-Spezifikation
- implementierte POSIX-Mutexe.</dd>
-
- <dt><code>sysvsem</code></dt>
- <dd>verwendet Semaphoren des SysV-Typs, um den Mutex zu
- implementieren.</dd>
- </dl>
-
- <p>Um die bei der Kompilierung gew&auml;hlte Voreinstellung f&uuml;r
- Ihr System herauszufinden, k&ouml;nnen Sie Ihr <directive module="core"
- >LogLevel</directive> auf <code>debug</code> setzen. Dann wird der
- voreingestellte <directive>AcceptMutex</directive> ins <directive
- module="core">ErrorLog</directive> geschrieben.</p>
-
- <note type="warning"><title>Warnung</title>
- <p>Auf den meisten Systemen stoppt der Server mit der Beantwortung von
- Anfragen, wenn die Option <code>pthread</code> ausgew&auml;hlt wurde und
- ein Kindprozess unkontrolliert endet w&auml;hrend er den
- <code>AcceptCntl</code>-Mutex h&auml;lt. In diesem Fall muss der Server
- manuell neu gestartet werden, um wieder weiter zu arbeiten.</p>
- <p>Eine Ausnahme stellt Solaris dar, da es einen Mechanismus anbietet, den
- der Apache verwendet und der &uuml;blicherweise die Freigabe des Mutex
- erlaubt, nachdem ein Kindprozess, der gerade einen Mutex h&auml;lt,
- abgest&uuml;rzt ist.</p>
- <p>Wenn Ihr System die Funktion
- <code>pthread_mutexattr_setrobust_np()</code> bereitstellt, k&ouml;nnen
- Sie wahrscheinlich die Option <code>pthread</code> problemlos
- verwenden.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CoreDumpDirectory</name>
-<description>Verzeichnis, in das der Apache zu wechseln versucht, bevor er
- einen Hauptspeicherauszug erstellt</description>
-<syntax>CoreDumpDirectory <var>Verzeichnis</var></syntax>
-<default>F&uuml;r die Voreinstellung siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Dies beeinflusst das Verzeichnis, in welches der Apache zu wechseln
- versucht, bevor er einen Hauptspeicherauszug <transnote>einen
- so genannten Core-Dump</transnote> erstellt. Die Voreinstellung ist das
- <directive module="core">ServerRoot</directive>-Verzeichnis. Da dieses
- jedoch nicht f&uuml;r den Benutzer beschreibbar sein soll, unter dem
- der Server l&auml;uft, werden normalerweise keine
- Hauptspeicherausz&uuml;ge geschrieben. Wenn Sie zum Debuggen
- einen Hauptspeicherauszug haben m&ouml;chten, k&ouml;nnen Sie
- ihn mit dieser Direktive an einem anderen Ort ablegen lassen.</p>
-
- <note><title>Hauptspeicherausz&uuml;ge unter Linux</title>
- <p>Wenn Apache als <code>root</code> startet und zu einem anderen Benutzer
- wechselt, <em>deaktiviert</em> der Linux-Kernel Hauptspeicherausz&uuml;ge
- auch dann, wenn der Prozess in dem Verzeichnis schreiben darf. Ab Linux
- 2.4 reaktiviert Apache (ab 2.0.46) Hauptspeicherausz&uuml;ge wieder,
- jedoch nur dann, wenn Sie explizit
- <directive>CoreDumpDirectory</directive> konfigurieren.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>EnableExceptionHook</name>
-<description>Aktiviert einen Hook, der nach einem Absturz noch
-Ausnahmefehler behandeln lassen kann</description>
-<syntax>EnableExceptionHook On|Off</syntax>
-<default>EnableExceptionHook Off</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module>
-<module>worker</module></modulelist>
-<compatibility>Verf&uuml;gbar seit Version 2.0.49</compatibility>
-
-<usage>
- <p>Diese Direktive ist aus Sicherheitsgr&uuml;nden nur verf&uuml;gbar,
- wenn der Server mit der Option <code>--enable-exception-hook</code>
- konfiguriert wurde. Sie aktiviert einen Hook, der es externen Modulen
- erlaubt, sich dort einzuh&auml;ngen und nach dem Absturz eines
- Kindprozesses noch Aktionen durchzuf&uuml;hren.</p>
-
- <p>Es existieren bereits zwei Module, <code>mod_whatkilledus</code> und
- <code>mod_backtrace</code>, welche diesen Hook verwenden. Weitere
- Informationen hierzu finden Sie auf Jeff Trawicks <a
- href="http://www.apache.org/~trawick/exception_hook.html"
- >EnableExceptionHook-Seite</a>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Group</name>
-<description>Benutzergruppe, unter welcher der Server Anfragen
- beantwortet</description>
-<syntax>Group <var>Unix-Gruppe</var></syntax>
-<default>Group #-1</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-<compatibility>Seit Apache 2.0 nur in der globalen Server-Konfiguration
- g&uuml;ltig</compatibility>
-
-<usage>
- <p>Die Direktive <directive>Group</directive> bestimmt die
- Benutzergruppe, unter welcher der Server Anfragen beantwortet.
- Um diese Direktive zu verwenden, muss der Server als <code>root</code> gestartet
- werden. Wenn Sie den Server unter einem nicht-root-Benutzer starten,
- wird er nicht zur angegebenen Gruppe wechseln k&ouml;nnen und statt
- dessen weiter mit der Gruppe des urspr&uuml;nglichen Benutzers
- laufen. <var>Unix-Gruppe</var> kann sein:</p>
-
- <dl>
- <dt>Ein Gruppenname</dt>
- <dd>Verweist auf die durch den Namen angegebene Gruppe.</dd>
-
- <dt><code>#</code> gefolgt von einer Gruppennummer.</dt>
- <dd>Verweist auf die durch ihre Nummer angegebene Gruppe.</dd>
- </dl>
-
- <example><title>Beispiel</title>
- Group www-group
- </example>
-
- <p>Es wird empfohlen, dass Sie eine neue Gruppe speziell zum Betrieb
- des Servers erstellen. Einige Administratoren verwenden den Benutzer
- <code>nobody</code>. Dies ist jedoch nicht immer m&ouml;glich
- oder gew&uuml;nscht.</p>
-
- <note type="warning"><title>Sicherheit</title>
- <p>Setzen Sie <directive>Group</directive> (oder <directive
- module="mpm_common">User</directive>) nicht auf <code>root</code>,
- solange Sie nicht ganz genau wissen, was Sie tun und welche Gefahren
- Sie eingehen.</p>
- </note>
-
- <p>Wichtiger Hinweis: Die Verwendung der Direktive innerhalb von
- <directive module="core" type="section">VirtualHost</directive>
- wird nicht l&auml;nger unterst&uuml;tzt. Benutzen Sie <directive
- module="mod_suexec">SuexecUserGroup</directive> um Ihren Server
- f&uuml;r <a href="mod_suexec.html">suexec</a> einzurichten.</p>
-
- <note><title>Anmerkung</title>
- <p>Obwohl die Direktive <directive>Group</directive> in den MPMs
- <module>beos</module> und <module>mpmt_os2</module> existiert, ist
- sie dort tats&auml;chlich eine Leeranweisung und exisitert nur
- aus Kompatibilit&auml;tsgr&uuml;nden.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>PidFile</name>
-<description>Datei, in welcher der Server die Prozess-ID des Daemons
-ablegt</description>
-<syntax>PidFile <var>Dateiname</var></syntax>
-<default>PidFile logs/httpd.pid</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>mpmt_os2</module>
-<module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Die Direktive <directive>PidFile</directive> bestimmt die Datei,
- in welcher der Server die Prozess-ID des Daemons ablegt. Wenn der
- Dateiname nicht absolut angegeben wird, wird er relativ zu
- <directive module="core">ServerRoot</directive> interpretiert.</p>
-
- <example><title>Beispiel</title>
- PidFile /var/run/apache.pid
- </example>
-
- <p>Es ist oft hilfreich, dem Server ein Signal senden zu k&ouml;nnen,
- damit er seine <directive module="core">ErrorLog</directive>s und
- <directive module="mod_log_config">TransferLog</directive>s
- schlie&szlig;t und dann neu &ouml;ffnet und seine
- Konfigurationsdateien neu einliest. Dies kann durch Senden eines
- SIGHUP-Signals (kill -1) an die Prozess-ID geschehen, die im
- <directive>PidFile</directive> eingetragen ist.</p>
-
- <p>Die <directive>PidFile</directive>-Datei unterliegt den
- gleichen Warnungen &uuml;ber die Ablage von Protokolldateien
- und <a href="../misc/security_tips.html#serverroot">Sicherheit</a>.</p>
-
- <note><title>Anmerkung</title>
- <p>Ab Apache 2 wird empfohlen, nur das Skript <a
- href="../programs/apachectl.html">apachectl</a> zum (Neu-)Starten
- und Stoppen des Servers zu verwenden.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Listen</name>
-<description>IP-Adressen und Ports, an denen der Server lauscht</description>
-<syntax>Listen [<var>IP-Addresse</var>:]<var>Port</var></syntax>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Seit Apache 2.0 vorgeschrieben</compatibility>
-
-<usage>
- <p>Die Direktive <directive>Listen</directive> weist den Apache an,
- nur an den angegebenen IP-Adressen oder Ports zu lauschen.
- Standardm&auml;&szlig;ig antwortet er auf alle Anfragen an allen
- IP-Interfaces. <directive>Listen</directive> ist nun eine notwendige
- Anweisung. Wenn sie nicht in der Konfigurationsdatei enthalten ist,
- wird der Server-Start fehlschlagen. Dies ist eine &Auml;nderung
- gegen&uuml;ber fr&uuml;heren Versionen des Apache.</p>
-
- <p>Die Direktive <directive>Listen</directive> weist den Server an,
- ankommende Anfragen am angegebenen Port oder der
- Kombination aus Adresse und Port entgegenzunehmen. Wenn nur eine Portnummer
- angegeben ist, dann lauscht der Server am angegebenen Port an allen
- Interfaces. Wenn sowohl eine IP-Adresse als auch ein Port angegeben
- sind, dann lauscht der Server am angegeben Port und Interface.</p>
-
- <p>Es k&ouml;nnen mehrere <directive>Listen</directive>-Anweisungen
- verwendet werden, um eine Reihe von Adressen und Port anzugeben, an
- denen gelauscht werden soll. Der Server antwortet auf Anfragen von
- jedem der aufgef&uuml;hrten Adressen und Ports.</p>
-
- <p>Um beispielsweise den Server Verbindungen an den beiden Ports 80 und
- 8000 annehmen zu lassen, verwenden Sie:</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>Um den Server Verbindungen an zwei angegebenen Interfaces und Ports
- annehmen zu lassen, verwenden Sie:</p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>IPv6-Adressen m&uuml;ssen wie in dem folgenden Beispiel in eckige
- Klammern eingeschlossen werden:</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
-</usage>
-<seealso><a href="../dns-caveats.html">DNS-Probleme</a></seealso>
-<seealso><a href="../bind.html">Bestimmen, welche Adressen und Ports der
-Apache verwendet</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ListenBackLog</name>
-<description>Maximale L&auml;nge der Warteschlange schwebender
- Verbindungen</description>
-<syntax>ListenBacklog <var>backlog</var></syntax>
-<default>ListenBacklog 511</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Die maximale L&auml;nge der Warteschlange schwebender Verbindungen.
- &Uuml;blicherweise ist keine Feineinstellung notwendig oder sinnvoll,
- auf einigen System kann es jedoch gew&uuml;nscht sein, diesen Wert bei
- TCP-SYN-Angriffen zu erh&ouml;hen. Beachten Sie auch die Beschreibung des
- backlog-Parameters der Systemfunktion <code>listen(2)</code>.</p>
-
- <p>Der Wert wird vom Betriebssystem oft auf eine niedrigere
- Einstellung begrenzt. Dies variiert von Betriebssystem zu Betriebssystem.
- Beachten Sie auch, dass viele Betriebssyteme nicht genau beachten,
- was f&uuml;r backlog angegeben ist, jedoch einen Wert basierend auf der
- Angabe (normalerweiseweise jedoch gr&ouml;&szlig;er als diese) verwenden.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LockFile</name>
-<description>Ablageort der Lock-Datei f&uuml;r die Serialisierung von
-entgegengenommenen Anfragen</description>
-<syntax>LockFile <var>Dateiname</var></syntax>
-<default>LockFile logs/accept.lock</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Die Direktive <directive>LockFile</directive> legt den Pfad zur
- Lock-Datei fest, die verwendet wird, wenn der Apache mit einer der
- <directive module="mpm_common">AcceptMutex</directive>-Einstellungen
- <code>fcntl</code> oder <code>flock</code> verwendet wird. Die Anweisung
- sollte normalerweise bei der Voreinstellung belassen werden.
- Der Hauptgrund, sie zu &auml;ndern, ist, wenn das
- <code>logs</code>-Verzeichnis auf einem per NFS-eingebundenen Laufwerk
- liegt, da <strong>die Lock-Datei auf einer lokalen Platte abgelegt sein
- muss</strong>. Die PID <transnote>Prozess-ID</transnote> des
- Hauptserverprozesses wird automatisch an den Dateinamen angeh&auml;ngt.</p>
-
- <note type="warning"><title>Sicherheit</title>
- <p>Es ist am besten, die Ablage in einem allgemein <transnote>f&uuml;r
- jedermann</transnote> beschreibbaren
- Verzeichnis wie <code>/var/tmp</code> <em>zu vermeiden</em>, da
- ein Denial-of-Servide-Angriff gestartet werden k&ouml;nnte und der
- Server am Start gehindert werden k&ouml;nnte, indem eine Lock-Datei
- mit dem gleichen Namen erstellt wird, wie der Server sie zu erstellen
- versuchen w&uuml;rde.</p>
- </note>
-</usage>
-<seealso><directive module="mpm_common">AcceptMutex</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxClients</name>
-<description>Maximale Anzahl der Kindprozesse, die zur Bedienung von Anfragen
- gestartet wird</description>
-<syntax>MaxClients <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Die Direktive <directive>MaxClients</directive> setzt die Grenze
- f&uuml;r die Anzahl gleichzeitig bedienter Anfragen. Jeder
- Verbindungsversuch oberhalb der <directive
- >MaxClients</directive>-Begrenzung wird &uuml;blicherweise in eine
- Warteschlange gestellt, bis zu einer Anzahl basierend auf der
- <directive module="mpm_common">ListenBacklog</directive>-Anweisung.
- Sobald ein Kindprozess am Ende einer anderen Anfrage freigegeben wird,
- wird die Verbindung bedient.</p>
-
- <p>F&uuml;r Server ohne Thread-Unterst&uuml;tzung (<em>z.B.</em>
- <module>prefork</module>) wird <directive>MaxClients</directive> als
- maximale Anzahl der Kindprozesse verstanden, die zur Bedienung von
- Anfragen gestartet werden. Die Voreinstellung ist <code>256</code>. Um
- diesen Wert zu erh&ouml;hen, muss auch <directive
- module="mpm_common">ServerLimit</directive> angehoben werden.</p>
-
- <p>Bei Servern mit Thread-Unterst&uuml;tzung und bei Hybrid-Servern
- (<em>z.B.</em> <module>beos</module> oder <module>worker</module>)
- begrenzt <directive>MaxClients</directive> die Gesamtzahl der Threads,
- die f&uuml;r die Bedienung von Anfragen verf&uuml;gbar sind.
- Die Voreinstellung f&uuml;r <module>beos</module> ist <code>50</code>.
- Bei Hybrid-MPMs ist die Voreinstellung <code>16</code> (<directive
- module="mpm_common">ServerLimit</directive>) multipliziert mit
- dem Wert <code>25</code> (<directive module="mpm_common"
- >ThreadsPerChild</directive>). Um <directive>MaxClients</directive>
- auf einen Wert zu erh&ouml;hen, der mehr als 16 Prozesse erfordert,
- m&uuml;ssen Sie daher auch <directive module="mpm_common"
- >ServerLimit</directive> anheben.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxMemFree</name>
-<description>Maximale Menge des Arbeitsspeichers, den die
- Haupt-Zuteilungsroutine verwalten darf, ohne <code>free()</code>
- aufzurufen</description>
-<syntax>MaxMemFree <var>KBytes</var></syntax>
-<default>MaxMemFree 0</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>prefork</module>
-<module>threadpool</module><module>worker</module><module>mpm_winnt</module></modulelist>
-
-<usage>
- <p>Die Direktive <directive>MaxMemFree</directive> gibt die maximale
- Menge freier Kilobytes an, welche die Haupt-Zuteilungsroutine verwalten
- darf, ohne <code>free()</code> aufzurufen. Wenn keine Angabe gemacht wird,
- oder Null angegeben ist, wird dieser Wert nicht eingeschr&auml;nkt.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerChild</name>
-<description>Obergrenze f&uuml;r die Anzahl von Anfragen, die ein einzelner
- Kindprozess w&auml;hrend seines Lebens bearbeitet</description>
-<syntax>MaxRequestsPerChild <var>number</var></syntax>
-<default>MaxRequestsPerChild 10000</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_netware</module>
-<module>mpm_winnt</module><module>mpmt_os2</module>
-<module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Die Direktive <directive>MaxRequestsPerChild</directive> legt die
- Grenze f&uuml;r die Anzahl von Anfragen fest, die ein einzelner
- Kinprozess w&auml;hrend seines Lebens bearbeitet. Nach
- <directive>MaxRequestsPerChild</directive> Anfragen stirbt der
- Kindprozess. Wenn <directive>MaxRequestsPerChild</directive>
- <code>0</code> ist, endet der Prozess niemals.</p>
-
- <note><title>Abweichende Voreinstellungen</title>
- <p>Die Voreinstellung f&uuml;r <module>mpm_netware</module> und
- <module>mpm_winnt</module> ist <code>0</code>.</p>
- </note>
-
- <p>Die Begrenzung von <directive>MaxRequestsPerChild</directive> auf einen
- Wert ungleich Null hat zwei vorteilhafte Auswirkungen:</p>
-
- <ul>
- <li>sie begrenzt die Menge an Arbeitsspeicher, die ein Prozess
- durch (versehentliche) Speicherlecks verbrauchen kann.</li>
-
- <li>das Festlegen einer endlichen Lebensdauer von Prozessen hilft, die
- Anzahl von Prozessen zu reduzieren, wenn die Serverlast
- zur&uuml;ckgeht.</li>
- </ul>
-
- <note><title>Anmerkung</title>
- <p>Bei <directive module="core">KeepAlive</directive>-Anfragen
- wird nur die erste Anfrage f&uuml;r diese begrenzung gez&auml;hlt.
- Eigentlich wird nur die Begrenzung f&uuml;r die Anzahl der
- <em>Verbindungen</em> pro Kindprozess ge&auml;ndert.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareThreads</name>
-<description>Maximale Anzahl unbesch&auml;ftigter Threads</description>
-<syntax>MaxSpareThreads <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpmt_os2</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Maximale Anzahl unbesch&auml;ftigter Threads. Die verschiedenen MPMs
- behandeln diese Anweisung unterschiedlich.</p>
-
- <p>Die Voreinstellung f&uuml;r <module>perchild</module> ist
- <code>MaxSpareThreads 10</code>. Das MPM &uuml;berwacht die Anzahl der
- unbesch&auml;ftigten Threads auf der Basis einzelner Kindprozesse. Wenn
- zu viele unbesch&auml;ftigte Threads in einem Kindprozess existieren,
- beendet der Server Threads innerhalb dieses Kindprozesses.</p>
-
- <p>Die Voreinstellung f&uuml;r <module>worker</module>,
- <module>leader</module> und <module>threadpool</module> ist
- <code>MaxSpareThreads 250</code>. Diese MPMs behandeln Threads
- auf einer serverweiten Basis. Wenn zu viele unbesch&auml;ftigte Threads
- im Server existieren, dann werden solange Kindprozesse beendet, bis
- die Anzahl der unbesch&auml;ftigten Threads kleiner als der
- angegebene Wert ist.</p>
-
- <p>Die Voreinstellung f&uuml;r <module>mpm_netware</module> ist
- <code>MaxSpareThreads 100</code>. Da dieses MPM nur einen einzigen
- Prozess ausf&uuml;hrt, ist die Z&auml;hlung &uuml;bersch&uuml;ssiger
- Threads ebenfalls serverweit.</p>
-
- <p><module>beos</module> and <module>mpmt_os2</module> arbeiten
- &auml;hnlich wie <module>mpm_netware</module>. Die Voreinstellung
- f&uuml;r <module>beos</module> ist <code>MaxSpareThreads 50</code>.
- Die Voreinstellung f&uuml;r <module>mpmt_os2</module> ist
- <code>10</code>.</p>
-
- <note><title>Restriktionen</title>
- <p>Der Wertebereich von <directive>MaxSpareThreads</directive>
- ist eingeschr&auml;nkt. Apache korrigiert den angegebenen Wert
- automatisch gem&auml;&szlig; den folgenden Regeln:</p>
- <ul>
- <li><module>perchild</module> verlangt, dass <directive
- >MaxSpareThreads</directive> kleiner oder gleich <directive
- module="mpm_common">ThreadLimit</directive> ist.</li>
-
- <li><module>mpm_netware</module> verlangt einen Wert gr&ouml;&szlig;er
- als <directive module="mpm_common">MinSpareThreads</directive>.</li>
-
- <li>Bei <module>leader</module>, <module>threadpool</module> und
- <module>worker</module> muss der Wert gr&ouml;&szlig;er oder gleich
- der Summe aus <directive
- module="mpm_common">MinSpareThreads</directive> und
- <directive module="mpm_common">ThreadsPerChild</directive> sein.</li>
- </ul>
- </note>
-</usage>
-<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareThreads</name>
-<description>Minimale Anzahl unbesch&auml;ftigter Threads, die zur
- Bedienung von Anfragespitzen zur Verf&uuml;gung stehen</description>
-<syntax>MinSpareThreads <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpmt_os2</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Minimale Anzahl unbesch&auml;ftigter Threads, um Anfragespitzen
- zu bedienen. Die verschiedenen MPMs behandeln die Anweisung
- unterschiedlich.</p>
-
- <p><module>perchild</module> verwendet die Voreinstellung
- <code>MinSpareThreads 5</code> und &uuml;berwacht die Anzahl der
- unbesch&auml;ftigten Threads auf der Basis einzelner Kindprozesse. Wenn
- in einem Kindprozess nicht gen&uuml;gend unbesch&auml;ftigte
- Threads vorhanden sind, erstellt der Server neue Threads innerhalb
- dieses Kindprozesses. Wenn Sie also <directive module="perchild"
- >NumServers</directive> auf <code>10</code> und <directive
- >MinSpareThreads</directive> auf einen Wert von <code>5</code> setzen,
- haben Sie mindestens 50 unbesch&auml;ftigte Threads auf Ihrem
- System.</p>
-
- <p><module>worker</module>, <module>leader</module> und
- <module>threadpool</module> verwenden eine Voreinstellung von
- <code>MinSpareThreads 75</code> und behandeln unbesch&auml;ftigte
- Threads auf serverweiter Basis. Wenn nicht gen&uuml;gend
- unbesch&auml;ftigte Threads im Server vorhanden sind, dann
- werden solange Kindprozesse erzeugt, bis die Anzahl unbesch&auml;ftigter
- Threads gr&ouml;&szlig;er als der angegebene Wert ist.</p>
-
- <p><module>mpm_netware</module> verwendet die Voreinstellung
- <code>MinSpareThreads 10</code> und verfolgt dies serverweit, da
- es ein Einzelprozess-MPM ist.</p>
-
- <p><module>beos</module> und <module>mpmt_os2</module> arbeiten
- &auml;hnlich wie <module>mpm_netware</module>. Die Voreinstellung
- f&uuml;r <module>beos</module> ist <code>MinSpareThreads 1</code>.
- Die Voreinstellung f&uuml;r <module>mpmt_os2</module> ist
- <code>5</code>.</p>
-
-</usage>
-<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScoreBoardFile</name>
-<description>Ablageort der Datei, die zur Speicherung von Daten zur
- Koordinierung der Kindprozesse verwendet wird</description>
-<syntax>ScoreBoardFile <var>Dateipfad</var></syntax>
-<default>ScoreBoardFile logs/apache_status</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Apache verwendet ein Scoreboard zur Kommunikation zwischen
- seinen Eltern- und Kindprozessen. Einige Architekturen erfordern
- eine Datei zur Unterst&uuml;tzung der Kommunikation. Wenn die Datei
- undefiniert bleibt, versucht der Apache zuerst, das Scoreboard im
- Arbeitsspeicher zu erstellen (Verwendung von anonymem Shared-Memory),
- und versucht bei einem Fehlschlag anschlie&szlig;end die Datei auf
- der Festplatte zu erstellen (Verwendung von Datei-basiertem
- Shared-Memory). Die Angabe dieser Direktive veranla&szlig;t den
- Apache stets, die Datei auf der Festplatte zu erstellen.</p>
-
- <example><title>Beispiel</title>
- ScoreBoardFile /var/run/apache_status
- </example>
-
- <p>Datei-basiertes Shared-Memory ist f&uuml;r Applikationen von
- Drittanbietern hilfreich, die direkten Zugriff auf das Scoreboard
- ben&ouml;tigen.</p>
-
- <p>Wenn Sie eine <directive>ScoreBoardFile</directive>-Anweisung
- verwenden, erreichen Sie eventuell eine h&ouml;here Geschwindigkeit, wenn
- Sie die Datei auf einer RAM-Disk ablegen. Achten Sie darauf, die
- gleichen Warnungen wie &uuml;ber die Ablage von Protokolldateien und
- <a href="../misc/security_tips.html">Sicherheit</a> zu beherzigen.</p>
-</usage>
-<seealso><a href="../stopping.html">Apache beenden und neu
- starten</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SendBufferSize</name>
-<description>Gr&ouml;&szlig;e des TCP-Puffers</description>
-<syntax>SendBufferSize <var>Bytes</var></syntax>
-<default>SendBufferSize 0</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Der Server setzt die Gr&ouml;&szlig;e des TCP-Puffers auf die
- angegebene Anzahl Bytes. Dies ist sehr hilfreich, um Voreinstellungen
- alter Standardbetriebssysteme f&uuml;r Hochgeschwindigkeitsverbindungen
- mit hoher Latenzzeit anzuheben (<em>d.h.</em> 100ms oder so, wie bei
- Interkontinentalverbindungen).</p>
-
- <p>Wird der Wert auf <code>0</code> gesetzt, dann verwendet der Server
- die Voreinstellung des Betriebssystems.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerLimit</name>
-<description>Obergrenze f&uuml;r die konfigurierbare Anzahl von
- Prozessen</description>
-<syntax>ServerLimit <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Bei dem MPM <module>prefork</module> bestimmt die Direktive
- den w&auml;hrend der Lebensdauer des Apache-Prozesses maximal
- einstellbaren Wert f&uuml;r <directive
- module="mpm_common">MaxClients</directive>. Beim MPM
- <module>worker</module> bestimmt die Direktive in Verbindung mit
- <directive module="mpm_common">ThreadLimit</directive> den Maximalwert
- f&uuml;r <directive module="mpm_common">MaxClients</directive>
- f&uuml;r die Lebensdauer des Apache-Prozesses. Jeder Versuch, diese
- Anweisung w&auml;hrend eines Neustarts zu &auml;ndern, wird ignoriert.
- <directive module="mpm_common">MaxClients</directive> kann jedoch
- w&auml;hrend eines Neustarts ge&auml;ndert werden.</p>
-
- <p>Lassen Sie besondere Vorsicht bei der Verwendung dieser Direktive
- walten. Wenn <directive>ServerLimit</directive> auf einen Wert deutlich
- h&ouml;her als notwendig gesetzt wird, wird zus&auml;tzliches,
- unbenutztes Shared-Memory belegt. Wenn sowohl
- <directive>ServerLimit</directive> als auch <directive
- module="mpm_common">MaxClients</directive> auf Werte gesetzt werden, die
- gr&ouml;&szlig;er sind, als das System sie handhaben kann, dann kann
- der Apache m&ouml;glicherweise nicht starten, oder das System kann
- instabil werden.</p>
-
- <p>Verwenden Sie die Direktive bei dem MPM <module>prefork</module>
- nur, wenn Sie <directive module="mpm_common">MaxClients</directive>
- auf mehr als 256 (Voreinstellung) setzen m&uuml;ssen. Setzen Sie den
- Wert nicht h&ouml;her als den Wert, den Sie f&uuml;r <directive
- module="mpm_common">MaxClients</directive> angeben m&ouml;chten.</p>
-
- <p>Verwenden Sie die Direktive bei <module>worker</module>,
- <module>leader</module> und <module>threadpool</module> nur, wenn Ihre
- <directive module="mpm_common">MaxClients</directive>- und
- <directive module="mpm_common">ThreadsPerChild</directive>-Einstellungen
- mehr als 16 Serverprozesse (Voreinstellung) erfordern. Setzen Sie den
- Wert dieser Direktive nicht h&ouml;her, als die Anzahl der Serverprozesse,
- die daf&uuml;r erforderlich ist, was Sie bei <directive
- module="mpm_common">MaxClients</directive> und
- <directive module="mpm_common">ThreadsPerChild</directive> angeben
- m&ouml;chten.</p>
-
- <p>Verwenden Sie die Direktive beim MPM <module>perchild</module> nur,
- wenn Sie <directive module="perchild">NumServers</directive> auf einen
- Wert gr&ouml;&szlig;er als 8 (Voreinstellung) setzen m&uuml;ssen.</p>
-
- <note><title>Anmerkung</title>
- <p>Eine feste Begrenzung von <code>ServerLimit 20000</code> ist in den
- Server einkompiliert (bei dem MPM <module>prefork</module> 200000).
- Dies soll unangenehme Effekte durch Tippfehler verhindern.</p>
- </note>
-</usage>
-<seealso><a href="../stopping.html">Apache beenden und neu
- starten</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartServers</name>
-<description>Anzahl der Kindprozesse des Servers, die beim Start erstellt
- werden</description>
-<syntax>StartServers <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpmt_os2</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>Die Direktive <directive>StartServers</directive> bestimmt
- die Anzahl der Kindprozesse des Servers, die beim Start erstellt
- werden. Da die Anzahl der Prozesse abh&auml;ngig von der Last
- dynamisch kontrolliert wird, besteht normalerweise wenig
- Grund f&uuml;r eine &Auml;nderung dieses Parameters.</p>
-
- <p>Die Voreinstellung unterscheidet sich von MPM zu MPM. Bei
- <module>leader</module>, <module>threadpool</module> und
- <module>worker</module> ist die Voreinstellung
- <code>StartServers 3</code>. Die Voreinstellung bei
- <module>prefork</module> ist <code>5</code> und bei
- <module>mpmt_os2</module> <code>2</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartThreads</name>
-<description>Anzahl der Threads, die beim Start erstellt werden</description>
-<syntax>StartThreads <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>mpm_netware</module>
-<module>perchild</module></modulelist>
-
-<usage>
- <p>Anzahl der Threads, die beim Start erstellt werden. Da die Anzahl
- der Threads abh&auml;ngig von der Last dynamisch kontrolliert wird,
- besteht normalerweise wenig Grund f&uuml;r eine &Auml;nderung
- dieses Parameters.</p>
-
- <p>Die Voreinstellung f&uuml;r <module>perchild</module> ist
- <code>StartThreads 5</code>. Die Direktive setzt w&auml;hrend des
- Starts die Anzahl der Threads pro Prozess.</p>
-
- <p>Die Voreinstellung bei <module>mpm_netware</module> ist
- <code>StartThreads 50</code>. Da hier lediglich ein einzelner Prozess
- existiert, ist dies die Gesamtzahl der Threads, die beim Start
- erstellt wird, um Anfragen zu bedienen.</p>
-
- <p>Die Voreinstellung f&uuml;r <module>beos</module> ist <code>StartThreads
- 10</code>. Die Einstellung reflektiert ebenfalls die Gesamtzahl der Threads, die
- beim Start erstellt werden, um Anfragen zu bedienen.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadLimit</name>
-<description>Bestimmt die Obergrenze der konfigurierbaren Anzahl von Threads
- pro Kindprozess</description>
-<syntax>ThreadLimit <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_winnt</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Verf&uuml;gbar f&uuml;r <module>mpm_winnt</module> ab
- Apache 2.0.41</compatibility>
-
-<usage>
- <p>Die Direktive bestimmt den w&auml;hrend der Lebensdauer des
- Apache-Prozesses maximal einstellbaren Wert f&uuml;r
- <directive module="mpm_common">ThreadsPerChild</directive>. Jeder
- Versuch, diese Direktive w&auml;hrend eines Neustarts zu &auml;ndern,
- wird ignoriert. <directive module="mpm_common">ThreadsPerChild</directive>
- kann jedoch w&auml;hrend eines Neustarts modifiziert werden bis zu dem
- Wert dieser Anweisung.</p>
-
- <p>Lassen Sie besondere Vorsicht bei der Verwendung dieser Direktive
- walten. Wenn <directive>ThreadLimit</directive> auf einen Wert
- deutlich h&ouml;her als <directive
- module="mpm_common">ThreadsPerChild</directive> gesetzt wird, wird
- zus&auml;tzliches, ungenutztes Shared-Memory belegt. Wenn sowohl
- <directive>ThreadLimit</directive> als auch <directive
- module="mpm_common">ThreadsPerChild</directive> auf Werte gesetzt werden,
- die gr&ouml;&szlig;er sind, als das System sie handhaben kann, dann kann
- der Apache m&ouml;glicherweise nicht starten oder das System kann
- instabil werden. Setzen Sie den Wert dieser Direktive nicht h&ouml;her
- als Ihre gr&ouml;&szlig;te erwartete Einstellung f&uuml;r
- <directive module="mpm_common">ThreadsPerChild</directive>
- w&auml;hrend der aktuellen Ausf&uuml;hrung des Apache.</p>
-
- <p>Die Voreinstellung f&uuml;r <directive>ThreadLimit</directive> ist
- <code>1920</code> wenn sie zusammen mit <module>mpm_winnt</module>
- verwendet wird, und <code>64</code> bei der Verwendung mit anderen
- MPMs.</p>
-
- <note><title>Anmerkung</title>
- <p>Eine feste Begrenzung von <code>ThreadLimit 20000</code>
- (oder <code>ThreadLimit 15000</code> bei <module>mpm_winnt</module>)
- ist in den Server einkompiliert. Dies soll unangenehme Effekte durch
- Tippfehler verhindern.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadsPerChild</name>
-<description>Anzahl der Threads, die mit jedem Kindprozess gestartet
- werden</description>
-<syntax>ThreadsPerChild <var>Anzahl</var></syntax>
-<default>F&uuml;r Details siehe Beschreibung</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_winnt</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Die Direktive legt die Anzahl der Threads fest, die mit jedem
- Kindprozess gestartet werden. Der Kindprozess erstellt diese Threads
- beim Start und erstellt sp&auml;ter keine weiteren mehr. Wenn Sie ein
- MPM wie <module>mpm_winnt</module> verwenden, wo nur ein
- Kindprozess existiert, dann sollte diese Angabe hoch genug sein,
- die gesamte Last des Servers zu bew&auml;ltigen. Wenn Sie ein MPM
- wie <module>worker</module> verwenden, wo mehrere Kindprozesse
- existieren, dann sollte die <em>Gesamt</em>zahl der Thread gro&szlig;
- genug sein, die &uuml;bliche Last auf dem Server zu bew&auml;ltigen.</p>
-
- <p>Die Voreinstellung f&uuml;r <directive>ThreadsPerChild</directive> ist
- <code>64</code>, wenn <module>mpm_winnt</module> verwendet wird, und
- <code>25</code> bei der Verwendung der anderen MPMs.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadStackSize</name>
-<description>Die Gr&ouml;&szlig;e des Stacks in Bytes, der von Threads
-verwendet wird, die Client-Verbindungen bearbeiten.</description>
-<syntax>ThreadStackSize <var>size</var></syntax>
-<default>65536 unter NetWare; variiert bei anderen Betriebssystemen.</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_netware</module>
-<module>mpm_winnt</module><module>perchild</module>
-<module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Verf&uuml;gbar seit Version 2.1</compatibility>
-
-<usage>
- <p>Die Direktive <directive>ThreadStackSize</directive> legt die
- Gr&ouml;&szlig;e des Stacks (f&uuml;r Autodaten) der Threads fest, die
- Client-Verbindungen bearbeiten und Module aufrufen, welche bei der
- Verarbeitung dieser Verbindungen helfen. In den meisten F&auml;llen ist die
- Voreinstellung des Betriebssystems angemessen, doch unter bestimmten
- Umst&auml;nden kann es sinnvoll sein, den Wert anzupassen:</p>
-
- <ul>
- <li>Auf Plattformen mit einer relativ kleinen Voreingestellung f&uuml;r
- die Gr&ouml;&szlig;e des Thread-Stacks (z.B. HP-UX) kann der Apache bei
- der Verwendung einiger Drittanbietermodule, die einen relativ hohen Bedarf
- an Speicherplatz haben, abst&uuml;rzen. Ebendiese Module arbeiten
- m&ouml;glicherweise problemlos auf anderen Plattformen, wo der
- voreingestellte Thread-Stack gr&ouml;&szlig;er ist. Derartige
- Abst&uuml;rze k&ouml;nnen Sie vermeiden, indem Sie
- <directive>ThreadStackSize</directive> auf einen h&ouml;heren Wert als die
- Betriebssystemvoreinstellung setzen. Eine solche Anpassung ist nur
- notwendig, wenn es vom Anbieter des Moduls so spezifiziert wurde oder die
- Diagnose eines Apache-Absturzes ergeben hat, das die
- Thread-Stackgr&ouml;&szlig;e zu klein war.</li>
-
- <li>Auf Plattformen, wo die voreingestellte Thread-Stackgr&ouml;&szlig;e
- f&uuml;r die Webserverkonfiguration deutlich gr&ouml;&szlig;er als
- notwendig ist, kann eine gr&ouml;&szlig;ere Anzahl von Threads pro
- Kindprozess erreicht werden, wenn <directive>ThreadStackSize</directive>
- auf einen Wert kleiner als die Betriebssystemvoreinstellung gesetzt wird.
- Da es einzelne Anfragen geben kann, die mehr Stack zur Verarbeitung
- ben&ouml;tigen, sollte eine derartige Korrektur ausschlie&szlig;lich in
- Testumgebungen zum Einsatz kommen, auf denen die gesamte
- Webserververarbeitung ausprobiert werden kann. Eine &Auml;nderung der
- Webserverkonfiguration kann den aktuellen Wert der
- <directive>ThreadStackSize</directive> ung&uuml;ltig machen.</li>
- </ul>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>User</name>
-<description>Die Benutzerkennung, unter welcher der Server Anfragen
- beantwortet</description>
-<syntax>User <var>Unix-User-ID</var></syntax>
-<default>User #-1</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Seit Apache 2.0 nur in der globalen Server-Konfiguration
-g&uuml;ltig</compatibility>
-
-<usage>
- <p>Die Direktive <directive>User</directive> legt die Benutzerkennung
- fest, mit der der Server Anfragen beantwortet. Um diese Anweisung
- zu verwenden, muss der Server als <code>root</code> gestartet werden.
- Wenn Sie den Server unter einem nicht-root-Benutzer starten, kann
- er nicht zu dem minder privilegierten Benutzer wechseln und wird statt
- dessen weiter mit der urspr&uuml;nglichen Benutzerkennung laufen.
- Wenn Sie den Server als <code>root</code> starten, dann ist es normal,
- dass der Elternprozess als root weiterl&auml;uft.
- <var>Unix-User-ID</var> kann sein:</p>
-
- <dl>
- <dt>Ein Benutzername</dt>
- <dd>Verweist auf den durch Namen angegebenen Benutzer.</dd>
-
- <dt># gefolgt von einer Benutzernummer.</dt>
- <dd>Verweist auf einen durch eine Nummer angegebenen Benutzer.</dd>
- </dl>
-
- <p>Der Benutzer sollte keine Rechte besitzen, die dazu f&uuml;hren,
- dass er in der Lage ist, auf Dateien zuzugreifen, die nicht daf&uuml;r
- bestimmt sind, f&uuml;r die Au&szlig;enwelt sichtbar zu sein.
- Gleicherma&szlig;en sollte der Benutzer nicht in der Lage sein,
- Code auszuf&uuml;hren, der nicht f&uuml;r HTTP-Anfragen bestimmt ist.
- Es wird empfohlen, einen neuen Benutzer und eine neue Gruppe speziell
- zur Ausf&uuml;hrung des Servers zu erstellen. Einige Administratoren
- verwenden den Benutzer <code>nobody</code>. Dies ist jedoch nicht
- immer w&uuml;nschenswert, da der Benuter <code>nobody</code> andere
- Rechte auf dem System besitzen kann.</p>
-
- <note type="warning"><title>Sicherheit</title>
- <p>Setzen Sie <directive>User</directive> (oder <directive
- module="mpm_common">Group</directive>) nicht auf <code>root</code>,
- solange Sie nicht genau wissen, was Sie tun, und welches die Gefahren
- sind.</p>
- </note>
-
- <p>Beim MPM <module>perchild</module>, das daf&uuml;r gedacht ist,
- virtuelle Hosts unter verschiedenen Benutzerkennungen auszuf&uuml;hren,
- bestimmt die Direktive <directive>User</directive> die
- Benutzerkennung f&uuml;r den Hauptserver und bildet den R&uuml;ckfallwert
- f&uuml;r <directive type="section"
- module="core">VirtualHost</directive>-Abschnitte ohne eine
- <directive module="perchild">AssignUserID</directive>-Anweisung.</p>
-
- <p>Wichtiger Hinweis: Die Verwendung dieser Direktive innerhalb von
- <directive module="core" type="section">VirtualHost</directive> wird
- nicht mehr unterst&uuml;tzt. Benutzen Sie <directive
- module="mod_suexec">SuexecUserGroup</directive>, um Ihren Server
- f&uuml;r <a href="../suexec.html">suexec</a> einzurichten.</p>
-
- <note><title>Anmerkung</title>
- <p>Obwohl die Direktive <directive>User</directive> in den MPMs
- <module>beos</module> und <module>mpmt_os2</module> existiert, ist
- sie dort tats&auml;chlich eine Leeranweisung und exisitert nur
- aus Kompatibilit&auml;tsgr&uuml;nden.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_common.xml.ja b/docs/manual/mod/mpm_common.xml.ja
deleted file mode 100644
index 9ffdfd78b3..0000000000
--- a/docs/manual/mod/mpm_common.xml.ja
+++ /dev/null
@@ -1,903 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.32 (outdated: 1.41) -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_common.xml.meta">
-
-<name>mpm_common</name>
-<description>$BFs$D0J>e$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
-$B$G<BAu$5$l$F$$$k%G%#%l%/%F%#%V$N%3%l%/%7%g%s(B</description>
-<status>MPM</status>
-
-<directivesynopsis>
-<name>AcceptMutex</name>
-<description>$BJ#?t$N;R%W%m%;%9$,%M%C%H%o!<%/%=%1%C%H$G%j%/%(%9%H$r(B
-accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$?$a$K(B
-$B;H$&J}K!(B</description>
-<syntax>AcceptMutex default|<var>method</var></syntax>
-<default>AcceptMutex default</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p><directive>AcceptMutex</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B%M%C%H%o!<%/%=%1%C%H$N%j%/%(%9%H$r(B accept $B$7$h$&$H$7$F$$$kJ#?t$N;R%W%m%;%9$r(B
- Apache $B$,D>Ns2=$9$k$?$a$K;H$&J}K!$r@_Dj$7$^$9!#(B
- Apache 2.0 $B0JA0$O!"$3$N%a%=%C%I$O%3%s%Q%$%k;~$K$N$_A*Br$G$-$^$7$?!#(B
- $B:GE,$JJ}K!$O!"%"!<%-%F%/%A%c$d%W%i%C%H%[!<%`$KBg$-$/0MB8$7$^$9!#(B
- $B>\:Y$K4X$7$F$O!"(B<a
- href="../misc/perf-tuning.html">$B@-G=$N%A%e!<%K%s%0(B</a>
- $B%I%-%e%a%s%H$r$4Mw2<$5$$!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$,(B <code>Default</code>
- $B$K@_Dj$5$l$F$$$l$P!"%3%s%Q%$%k;~$KA*Br$5$l$?%G%U%)%k%HCM$,;H$o$l$^$9!#(B
- $BB>$N;HMQ2DG=$J%a%=%C%I$N0lMw$O2<$K$"$j$^$9!#(B
- $BA4$F$N%a%=%C%I$,A4$F$N%W%i%C%H%[!<%`$G;HMQ2DG=$G$"$k$o$1$G$O$J$$!"(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B;HMQ2DG=$G$J$$%a%=%C%I$,;XDj$5$l$?>l9g$O!"(B
- $B;HMQ2DG=$J%a%=%C%I$N0lMw$r4^$s$@%a%C%;!<%8$,(B
- $B%(%i!<%m%0$K=PNO$5$l$^$9!#(B</p>
-
- <dl>
- <dt><code>flock</code></dt>
- <dd><directive module="mpm_common">LockFile</directive>
- $B%G%#%l%/%F%#%V$GDj5A$7$?%U%!%$%k$N%m%C%/$K!"(B
- <code>flock(2)</code> $B%7%9%F%`%3!<%k$r;H$$$^$9!#(B</dd>
-
- <dt><code>fcntl</code></dt>
- <dd><directive module="mpm_common">LockFile</directive>
- $B%G%#%l%/%F%#%V$GDj5A$7$?%U%!%$%k$N%m%C%/$K!"(B
- <code>fcntl(2)</code> $B%7%9%F%`%3!<%k$r;H$$$^$9!#(B</dd>
-
- <dt><code>posixsem</code></dt>
- <dd>$BGSB>=hM}$N<BAu$K(B POSIX $B8_49%;%^%U%)$r;HMQ$7$^$9(B</dd>
-
- <dt><code>pthread</code></dt>
- <dd>POSIX Threads (PThreads) $B5,3J$G<BAu$5$l$F$$$k(B
- POSIX $BGSB>=hM}$r;H$$$^$9!#(B</dd>
-
- <dt><code>sysvsem</code></dt>
- <dd>$BGSB>=hM}$N<BAu$K(B SySV $B7A<0$N%;%^%U%)$r;H$$$^$9!#(B</dd>
- </dl>
-
- <p>$B%3%s%Q%$%k;~$K%7%9%F%`$N%G%U%)%k%H$KA*$P$l$?$b$N$,2?$+$r8+$?$$>l9g$O!"(B
- <directive module="core">LogLevel</directive> $B$r(B <code>debug</code>
- $B$K@_Dj$9$k$H$h$$$G$7$g$&!#%G%U%)%k%H$N(B <directive>AcceptMutex</directive>
- $B$,(B <directive module="core">ErrorLog</directive> $B$K=q$-9~$^$l$^$9!#(B</p>
-
- <note type="warning"><title>$B7Y9p(B</title>
- <p>$B$[$H$s$I$N%7%9%F%`$K$*$$$F$O!"(B<code>pthread</code> $B%*%W%7%g%s$,(B
- $BA*$P$l$F$$$k$H!";R%W%m%;%9$,(B <code>ApacheCntl</code> mutex $B$r(B
- $BJ];}$7$F$$$k$H$-$K0[>o=*N;$7$?>l9g!"%5!<%P$O%j%/%(%9%H$X$N1~Ez$r(B
- $BDd;_$7$F$7$^$$$^$9!#$3$l$,H/@8$7$?>l9g$O!"%5!<%P$rI|5l$5$;$k$?$a$K$O(B
- $B<jF0$G:F5/F0$5$;$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>Solaris $B$ONc30$G!"(BApache $B$b;HMQ$7$F$$$k!";R%W%m%;%9$,(B mutex $B$r(B
- $BJ];}$7$F0[>o=*N;$7$?8e$K(B mutex $B$rI|5l$5$;$k$?$a$N5!9=$rDs6!$r$7$F$$$^$9!#(B</p>
- <p>$B8f;HMQ$N%7%9%F%`$,(B <code>pthread_mutexattr_setrobust_np()</code> $B4X?t$r(B
- $B<BAu$7$F$$$k>l9g$O!"(B<code>pthread</code> $B%*%W%7%g%s$r0BA4$K;HMQ$G$-$k(B
- $B2DG=@-$,$"$j$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CoreDumpDirectory</name>
-<description>Apache $B$,%3%"%@%s%W$9$kA0$K0\F0$r;n$_$k%G%#%l%/%H%j(B
-</description>
-<syntax>CoreDumpDirectory <var>directory</var></syntax>
-<default>$B%G%U%)%k%H$N@_Dj$O@bL@J8$rFI$s$G$/$@$5$$(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Apache $B$,%3%"%@%s%W$9$kA0$K0\F0$r;n$_$k%G%#%l%/%H%j$r@)8f$7$^$9!#(B
- $B%G%U%)%k%HCM$O(B <directive module="core">ServerRoot</directive>
- $B%G%#%l%/%H%j$G$9$,!"$3$N%G%#%l%/%H%j$O%5!<%P$N<B9T$5$l$F$$$k%f!<%68"8B$G(B
- $B=q$-9~$_2DG=$G$"$k$Y$-$G$O$J$$$N$G!"DL>o$O%3%"%@%s%W$O=q$-9~$^$l$^$;$s!#(B
- $B%G%P%C%0$N$?$a$K%3%"%@%s%W$,I,MW$G$"$l$P!"(B
- $B$3$N%G%#%l%/%F%#%V$r;H$C$FB>$N0LCV$K%3%"%@%s%W$r=q$-=P$9$h$&$K$G$-$^$9!#(B</p>
-
- <note><title>Linux $B$G$N%3%"%@%s%W(B</title>
- <p>Apache $B$,(B root $B$H$7$F5/F0$5$l$F!"JL$N%f!<%6$N8"8B$K0J9_$7$?>l9g$O(B
- Linux $B$N%+!<%M%k$O%G%#%l%/%H%j$,%W%m%;%9$N8"8B$G=q$-9~$_2DG=$J>l9g$G$5$($b(B
- $B%3%"%@%s%W$r(B<em>$BL58z(B</em>$B$K$7$^$9!#(BApache (2.0.46 $B0J9_(B) $B$O(B
- Linux 2.4 $B0J9_$G$O%3%"%@%s%W$r9T$J$&$h$&$K:F;XDj$7$^$9$,!"$=$l$O(B
- <directive>CoreDumpDirectory</directive> $B$rL@<(E*$K@_Dj$7$?$H$-$K(B
- $B8B$j$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Group</name>
-<description>$B%j%/%(%9%H$K1~Ez$9$k:]$K=jB0$9$k%0%k!<%W(B</description>
-<syntax>Group <var>unix-group</var></syntax>
-<default>Group #-1</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-<compatibility>Apache 2.0 $B0J9_$G!"%0%m!<%P%k@_Dj$G$N$_M-8z$G$9!#(B</compatibility>
-
-<usage>
- <p><directive>Group</directive> $B%G%#%l%/%F%#%V$G!"(B
- $B%j%/%(%9%H$K1~Ez$9$k:]$K=jB0$7$F$*$/%0%k!<%W$r@_Dj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k$?$a$K$O!"(B
- $B%5!<%P$O:G=i$K(B <code>root</code> $B8"8B$G5/F0$5$l$F$$$kI,MW$,$"$j$^$9!#(B
- $BHs(B root $B%f!<%6$G%5!<%P$r5/F0$7$?>l9g$O!";XDj$7$?%0%k!<%W$KJQ2=$G$-$:$K!"(B
- $B7k2LE*$K5/F0$7$?%f!<%6$NB0$9$k%0%k!<%W$G<B9T$5$l$k$3$H$K$J$j$^$9!#(B
- <var>unix-group</var> $B$O<!$N$&$A$N$$$:$l$+$G$9(B:</p>
-
- <dl>
- <dt>$B%0%k!<%WL>(B</dt>
- <dd>$B%0%k!<%W$rL>A0$G;2>H$7$^$9(B</dd>
-
- <dt><code>#</code> $B$KB3$$$F%0%k!<%WHV9f(B</dt>
- <dd>$B%0%k!<%W$r$rHV9f$G;2>H$7$^$9!#(B</dd>
- </dl>
-
- <example><title>$BNc(B</title>
- Group www-group
- </example>
-
- <p>$B%5!<%P$r<B9T$9$k$?$a$KFCDj$N?7$7$$%0%k!<%W$r@_Dj$9$k$3$H$r(B
- $B$*A&$a$7$^$9!#(B<code>nobody</code> $B$r;HMQ$9$k4IM}<T$b$$$^$9$,!"(B
- $B2DG=$G$"$C$?$jK>$^$7$$Lu$G$OI,$:$7$b$"$j$^$;$s!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p>$B@53N$K$I$s$J$3$H$r$d$C$F$$$k$N$+!"$=$N4m81@-$rCN$i$J$$$G!"(B
- <directive>Group</directive> ($B$d(B <directive
- module="mpm_common">User</directive>) $B$r(B
- <code>root</code> $B$K(B $B@_Dj$7$J$$$G$/$@$5$$!#(B</p>
- </note>
-
- <p>$BFC5-;v9`(B: $B$3$N%G%#%l%/%F%#%V$r(B
- <directive module="core" type="section">VirtualHost</directive>
- $B$G;HMQ$9$k$3$H$O%5%]!<%H$5$l$J$/$J$j$^$7$?!#(BApache 2.0 $B$G(B
- <a href="../suexec.html">suexec</a> $B$r@_Dj$7$?$$>l9g$O!"(B
- <directive module="mod_suexec">SuexecUserGroup</directive>
- $B$r;HMQ$7$F$/$@$5$$!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><directive>Group</directive> $B%G%#%l%/%F%#%V$O(B
- <module>beos</module> $B$H(B <module>mpmt_os2</module> MPM
- $B$K$bB8:_$7$^$9$,!"<B<AE*$KL58z$G!"8_49@-$N$?$a$@$1$KB8:_$7$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>PidFile</name>
-<description>$B%G!<%b%s$N%W%m%;%9(B ID
-$B$r%5!<%P$,5-O?$9$k$?$a$N%U%!%$%k(B</description>
-<syntax>PidFile <var>filename</var></syntax>
-<default>PidFile logs/httpd.pid</default>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>mpmt_os2</module>
-<module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p><directive>PidFile</directive> $B%G%#%l%/%F%#%V$G!"(B
- $B%G!<%b%s$N%W%m%;%9(B ID $B$r%5!<%P$,5-O?$9$k%U%!%$%k$r@_Dj$7$^$9!#(B
- $B%U%!%$%kL>$,@dBP%Q%9$G$J$$>l9g$O!"(B
- <directive module="core">ServerRoot</directive>
- $B$+$i$NAjBPE*$J$b$N$H$7$F07$o$l$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- PidFile /var/run/apache.pid
- </example>
-
- <p>$B%5!<%P$,(B <directive module="core">ErrorLog</directive>
- $B$d(B <directive module="mod_log_config">TransferLog</directive>
- $B$rJD$8$F3+$-D>$7$?$j!"@_Dj%U%!%$%k$r(B
- $B:FFI9~$7$?$j$5$;$k$?$a$K!"%5!<%P$K%7%0%J%k$rAw$k$3$H$,$G$-$k$H(B
- $BJXMx$J$3$H$,$"$j$^$9!#(B
- $B$3$l$O(B SIGHUP (kill -1) $B%7%0%J%k$r(B <directive>PidFile</directive>
- $B$K=q$+$l$F$$$k%W%m%;%9(B ID $B$KAw$k$3$H$G$G$-$^$9!#(B</p>
-
- <p><directive>PidFile</directive> $B$K$O!"%m%0%U%!%$%k$N@_CV0LCV$d(B
- <a href="../misc/security_tips.html#serverroot">$B%;%-%e%j%F%#(B</a>
- $B$HA4$/F1$8Cm0UE@$,$"$j$^$9!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p>Apache 2 $B$G$O!"(B
- <a href="../programs/apachectl.html">apachectl</a>
- $B%9%/%j%W%H$N$_$r;HMQ$7$F%5!<%P$N(B ($B:F(B) $B5/F0$dDd;_$r(B
- $B9T$J$&$3$H$r?d>)$7$F$$$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Listen</name>
-<description>$B%5!<%P$,(B listen $B$9$k(BIP $B%"%I%l%9$H%]!<%HHV9f(B</description>
-<syntax>Listen [<var>IP-address</var>:]<var>portnumber</var></syntax>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Apache 2.0 $B$+$iI,MW$J%G%#%l%/%F%#%V(B</compatibility>
-
-<usage>
- <p><directive>Listen</directive> $B%G%#%l%/%F%#%V$O(B Apache
- $B$,FCDj$N(B IP $B%"%I%l%9$d%]!<%HHV9f$@$1$r(B listen $B$9$k$h$&$K;XDj$7$^$9!#(B
- $B%G%U%)%k%H$G$OA4$F$N(B IP $B%$%s%?!<%U%'!<%9$N%j%/%(%9%H$K1~Ez$7$^$9!#(B
- <directive>Listen</directive> $B%G%#%l%/%F%#%V$O(B
- $B8=:_$OI,?\$N%G%#%l%/%F%#%V$H$J$j$^$7$?!#(B
- $B$b$7@_Dj%U%!%$%k$K$J$1$l$P!"%5!<%P$O5/F0$K<:GT$7$^$9!#(B
- $B$3$l$O0JA0$N%P!<%8%g%s$N(B Apache $B$+$iJQ99$N$"$C$?ItJ,$G$9!#(B</p>
-
- <p><directive>Listen</directive> $B%G%#%l%/%F%#%V$G$O!"FCDj$N%]!<%H$"$k$$$O(B
- $B%"%I%l%9$H%]!<%H$NAH$_9g$o$;$+$iF~$C$F$/$k%j%/%(%9%H$KBP$7$F(B
- $B1~Ez$9$k$h$&$K;XDj$7$^$9!#(B
- $B$b$7%]!<%HHV9f$@$1$,;XDj$5$l$?>l9g$O!"%5!<%P$OA4%$%s%?!<%U%'!<%9$N(B
- $B;XDj$5$l$?%]!<%HHV9f$KBP$7$F(B listen $B$7$^$9!#(B
- IP $B%"%I%l%9$,%]!<%H$H$H$b$K;XDj$5$l$?>l9g$O!"(B
- $B%5!<%P$O;XDj$5$l$?%]!<%H$H%$%s%?!<%U%'!<%9$KBP$7$F(B listen
- $B$7$^$9!#(B</p>
-
- <p>$BJ#?t$N%"%I%l%9$H%]!<%H$KBP$7$F(B listen $B$9$k$h$&$K!"(B
- $BJ#?t$N(B <directive>Listen</directive> $B%G%#%l%/%F%#%V$r;H$&$3$H$b$G$-$^$9!#(B
- $B%5!<%P$ONs5s$5$l$?%"%I%l%9$H%]!<%HA4$F$+$i$N%j%/%(%9%H$KBP$7$F(B
- $B1~Ez$7$^$9!#(B</p>
-
- <p>$BNc$($P!"%5!<%P$,(B 80 $BHV%]!<%H$H(B 8000 $BHV%]!<%H$NN>J}$N(B
- $B%3%M%/%7%g%s$r<u$1F~$l$k>l9g$O!"<!$N$h$&$K$7$^$9!#(B</p>
-
- <example>
- Listen 80<br />
- Listen 8000
- </example>
-
- <p>$BFs$D$NFCDj$N%$%s%?!<%U%'!<%9$H%]!<%HHV9f$+$i$N%3%M%/%7%g%s$r(B
- $B<u$1F~$l$k$h$&$K$9$k$K$O!"<!$N$h$&$K$7$^$9!#(B</p>
-
- <example>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </example>
-
- <p>IPv6 $B%"%I%l%9$O3Q3g8L$G0O$^$J$1$l$P$J$j$^$;$s!#(B
- $BNc$($P<!$NNc$N$h$&$K$G$9!#(B</p>
-
- <example>
- Listen [fe80::a00:20ff:fea7:ccea]:80
- </example>
-</usage>
-
-<seealso><a href="../dns-caveats.html">DNS $B$NLdBj(B</a></seealso>
-<seealso><a href="../bind.html">Apache
-$B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ListenBackLog</name>
-<description>$BJ]N1>uBV$N%3%M%/%7%g%s$N%-%e!<$N:GBgD9(B</description>
-<syntax>ListenBacklog <var>backlog</var></syntax>
-<default>ListenBacklog 511</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>$BJ]N1>uBV$N%3%M%/%7%g%s$N%-%e!<$N:GBgD9$G$9!#(B
- $B0lHLE*$K$OD4@0$9$kI,MW$O$"$j$^$;$s$7!"D4@0$OK>$^$7$/$"$j$^$;$s!#(B
- $B$7$+$7!"(BTCP SYN $B%U%i%C%I%"%?%C%/$N>u672<$K$*$+$l$k>l9g$K!"(B
- $BA}$d$7$?J}$,K>$^$7$$%7%9%F%`$b$"$j$^$9!#(B
- <code>listen(2)</code> $B%7%9%F%`%3!<%k$N%P%C%/%m%0%Q%i%a!<%?$r(B
- $B$4Mw2<$5$$!#(B</p>
-
- <p>$B$3$NCM$O(B OS $B$K$h$j!">.$5$J?t$KM^$($i$l$^$9!#(B
- $BCM$O(B OS $BKh$K0[$J$C$F$$$^$9!#$^$?B?$/$N(B OS $B$G$O!"(B
- $B%P%C%/%m%0$H$7$F;XDj$5$l$F$$$kCM$A$g$&$I$^$G;H$C$F$$$k$o$1$G$O$J$/!"(B
- $B@_Dj$5$l$F$$$kCM$K4p$E$$$F(B ($BDL>o$O@_DjCM$h$j$bBg$-$JCM$r(B)
- $B;H$C$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LockFile</name>
-<description>$B<uIU$rD>Ns2=$9$k$?$a$N%m%C%/%U%!%$%k$N0LCV(B</description>
-<syntax>LockFile <var>filename</var></syntax>
-<default>LockFile logs/accept.lock</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p><directive module="mpm_common">AcceptMutex</directive>
- $B$,(B <code>fcntl</code> $B$d(B <code>flock</code>
- $B$K@_Dj$5$l$F;HMQ$5$l$F$$$k>l9g$K!";HMQ$5$l$k%m%C%/%U%!%$%k$X$N%Q%9$r(B
- <directive>LockFile</directive> $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$ODL>o$O$=$N$^$^$K$7$F$*$-$^$9!#(B
- $B<g$K(B <code>logs</code> $B%G%#%l%/%H%j$,(B NFS
- $B$G%^%&%s%H$5$l$F$$$k>l9g$J$I$KCM$rJQ$($^$9!#(B
- $B$J$<$J$i(B<strong>$B%m%C%/%U%!%$%k$O%m!<%+%k%G%#%9%/$K(B
- $BJ]B8$5$l$J$1$l$P$J$i$J$$(B</strong>$B$+$i$G$9!#(B
- $B%a%$%s%5!<%P%W%m%;%9$N(B PID $B$,%U%!%$%kL>$K<+F0E*$KIU2C$5$l$^$9!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p><code>/var/tmp</code>
- $B$H$$$C$?!"C/$G$b=q$-9~$a$k%G%#%l%/%H%j$K%U%!%$%k$r(B
- <em>$BCV$+$J$$(B</em>$BJ}$,$h$$$G$9!#$J$<$J$i!"%5!<%P$,5/F0;~$K:n@.$9$k(B
- $B%m%C%/%U%!%$%k$N:n@.<+BN$rK832$9$k$3$H$K$h$C$F!"(B
- $BC/$G$b%5!<%S%95qH]%"%?%C%/$r0z$-5/$3$9$3$H$,$G$-$k$+$i$G$9!#(B</p>
- </note>
-</usage>
-<seealso><directive module="mpm_common">AcceptMutex</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxClients</name>
-<description>$B%j%/%(%9%H$K1~Ez$9$k$?$a$K:n@.$5$l$k(B
-$B;R%W%m%;%9$N:GBg8D?t(B</description>
-<syntax>MaxClients <var>number</var></syntax>
-<default>$B>\:Y$O;HMQK!$r$4Mw2<$5$$!#(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p><directive>MaxClients</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B1~Ez$9$k$3$H$N$G$-$kF1;~%j%/%(%9%H?t$r@_Dj$7$^$9!#(B
- <directive>MaxClients</directive> $B@)8B?t$r1[$($k%3%M%/%7%g%s$ODL>o!"(B
- <directive module="mpm_common">ListenBacklog</directive>
- $B%G%#%l%/%F%#%V$G@_Dj$7$??t$^$G%-%e!<$KF~$j$^$9!#(B
- $BB>$N%j%/%(%9%H$N:G8e$^$GC#$7$F;R%W%m%;%9$,6u$/$H!"(B
- $B<!$N%3%M%/%7%g%s$K1~Ez$7$^$9!#(B</p>
-
- <p>$B%9%l%C%I$rMQ$$$J$$%5!<%P(B (<em>$B$9$J$o$A(B</em> <module>prefork</module>)
- $B$G$O!"(B<directive>MaxClients</directive>
- $B$O!"%j%/%(%9%H$K1~Ez$9$k$?$a$K5/F0$5$l$k(B
- $B;R%W%m%;%9$N:GBg?t$H$J$j$^$9!#(B
- $B%G%U%)%k%HCM$O(B <code>256</code> $B$G!"$3$l$rA}2C$5$;$?$$>l9g$O!"(B
- <directive module="mpm_common">ServerLimit</directive>
- $B$NCM$bA}2C$5$;$kI,MW$,$"$j$^$9!#(B</p>
-
- <p>$B%9%l%C%I$rMQ$$$k%5!<%P$d!"%O%$%V%j%C%I%5!<%P(B (<em>$B$9$J$o$A(B</em>
- <module>beos</module> <module>worker</module>)
- $B$G$O!"(B<directive>MaxClients</directive>
- $B$O!"%/%i%$%"%s%H$K1~Ez$G$-$k%9%l%C%I$NAm?t$r@)8B$7$^$9!#(B
- <module>beos</module> $B$G$N%G%U%)%k%HCM$O(B <code>50</code> $B$G$9!#(B
- $B%O%$%V%j%C%I(B MPM $B$G$N%G%U%)%k%HCM$O(B 16
- <directive module="mpm_common">ServerLimit</directive>
- $B$N(B <code>25</code> $BG\(B (<directive
- module="mpm_common">ThreadsPerChild</directive>) $B$G$9!#(B
- <directive>MaxClients</directive>
- $B$r(B 16 $B%W%m%;%90J>eI,MW$JCM$^$GA}2C$5$;$?$$>l9g$O!"(B
- <directive module="mpm_common">ServerLimit</directive>
- $B$bA}2C$5$;$kI,MW$,$"$j$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxMemFree</name>
-<description><code>free()</code> $B$,8F$P$l$J$$8B$j!"(B
-$B<g%a%b%j%"%m%1!<%?$,J];}$7B3$1$i$l$k%a%b%j$N:GBgNL(B</description>
-<syntax>MaxMemFree <var>KBytes</var></syntax>
-<default>MaxMemFree 0</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>prefork</module>
-<module>threadpool</module><module>worker</module><module>mpm_winnt</module></modulelist>
-
-<usage>
- <p><directive>MaxMemFree</directive> $B%G%#%l%/%F%#%V$O(B
- <code>free()</code> $B$,8F$P$l$J$$8B$j!"(B
- $B<g%"%m%1!<%?$,J];}$G$-$k6u$N%a%b%j$N:GBgCM$r%-%m%P%$%HC10L$G@_Dj$7$^$9!#(B
- $B@_Dj$5$l$F$$$J$$$+!"Nm$K@_Dj$5$l$F$$$k$H$-$O!"L5@)8B$K$J$j$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerChild</name>
-<description>$B8D!9$N;R%5!<%P$,2TF/Cf$K07$&%j%/%(%9%H?t$N>e8B(B</description>
-<syntax>MaxRequestsPerChild <var>number</var></syntax>
-<default>MaxRequestsPerChild 10000</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_netware</module>
-<module>mpm_winnt</module><module>mpmt_os2</module>
-<module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p><directive>MaxRequestsPerChild</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B8D!9$N;R%5!<%P%W%m%;%9$,07$&$3$H$N$G$-$k%j%/%(%9%H$N@)8B?t$r(B
- $B@_Dj$7$^$9!#(B<directive>MaxRequestsPerChild</directive>
- $B8D$N%j%/%(%9%H$N8e$K!";R%W%m%;%9$O=*N;$7$^$9!#(B
- <directive>MaxRequestsPerChild</directive> $B$,(B <code>0</code>
- $B$K@_Dj$5$l$F$$$k>l9g$O!"%W%m%;%9$O4|8B@Z$l$K$h$j=*N;$9$k$3$H$O$"$j$^$;$s!#(B</p>
-
- <note><title>$B$=$NB>$N%G%U%)%k%HCM(B</title>
- <p><module>mpm_netware</module> $B$H(B <module>mpm_winnt</module>
- $B$G$N%G%U%)%k%HCM$O(B <code>0</code> $B$G$9!#(B</p>
- </note>
-
- <p><directive>MaxRequestsPerChild</directive>
- $B$rHs%<%m$K@)8B$9$k$3$H$K$O!"Fs$D$NMxE@$,$"$j$^$9(B:</p>
-
- <ul>
- <li>($B6vH/E*$J(B) $B%a%b%j!<%j!<%/$,5/$3$C$?>l9g$K(B
- $B%W%m%;%9$,>CHq$9$k%a%b%j$NAmNL$r@)8B$G$-$k(B</li>
-
- <li>$B%W%m%;%9$KM-8B$N%i%$%U%?%$%`$r@_Dj$9$k$3$H$G!"(B
- $B%5!<%PIi2Y$,2<$,$C$?;~$K%W%m%;%9?t$r>/$J$/$9$k$3$H$,$G$-$k(B</li>
- </ul>
-
- <note><title>$BCm(B</title>
- <p><directive module="core">KeepAlive</directive> $B%j%/%(%9%H$N>l9g$O!"(B
- $B0l$DL\$N%j%/%(%9%H$@$1$,$3$N@)8B$K3:Ev$7$^$9!#(B
- $B<B8zE*$K$O!"0l$D$N;R%W%m%;%9$"$?$j$N(B<em>$B%3%M%/%7%g%s(B</em>$B?t$r(B
- $B@)8B$9$k$h$&$K5sF0$,JQ2=$7$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareThreads</name>
-<description>$B%"%$%I%k%9%l%C%I$N:GBg?t(B</description>
-<syntax>MaxSpareThreads <var>number</var></syntax>
-<default>$B>\:Y$O;HMQK!$r$4Mw2<$5$$!#(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpmt_os2</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>$B%"%$%I%k$J%9%l%C%I$N:GBg?t$G$9!#0[$J$k(B MPM $B$G$O$=$l$>$l!"(B
- $B$3$N%G%#%l%/%F%#%V$O0[$J$k<h$j07$o$lJ}$r$5$l$^$9!#(B</p>
-
- <p><module>perchild</module> $B$G$O!"(B
- $B%G%U%)%k%H$O(B <code>MaxSpareThreads 10</code> $B$G$9!#(B
- $B$3$N(B MPM $B$O%"%$%I%k%9%l%C%I?t$r!"$=$l$>$l$N;R%W%m%;%9$4$H$K4F;k$7$^$9!#(B
- $B;R%W%m%;%9$K%"%$%I%k%9%l%C%I$,B?$9$.$k>l9g$O!"(B
- $B%5!<%P$O$=$N;R%W%m%;%9$K4^$^$l$k%9%l%C%I$r=*N;$7;O$a$^$9!#(B</p>
-
- <p><module>worker</module>, <module>leader</module>,
- <module>threadpool</module> $B$G$O!"(B
- $B%G%U%)%k%H$O(B <code>MaxSpareThreads 250</code> $B$G$9!#(B
- $B$3$N(B MPM $B$O%"%$%I%k%9%l%C%I?t$r%5!<%PA4BN$G4F;k$7$^$9!#(B
- $B%5!<%P$G%"%$%I%k%9%l%C%I?t$,B?$9$.$k>l9g$O!"(B
- $B$3$N?t;z$h$j$b>/$J$$?t$K$J$k$^$G;R%W%m%;%9$r=*N;$7$^$9!#(B</p>
-
- <p><module>mpm_netware</module> $B$G$O!"(B
- $B%G%U%)%k%H$O(B <code>MaxSpareThreads 100</code> $B$G$9!#(B
- $B$3$N(B MPM $B$O%7%s%0%k%W%m%;%9$G<B9T$5$l$^$9$N$G!"(B
- $B%9%Z%"%9%l%C%I?t$b%5!<%PA4BN$G4*Dj$7$^$9!#(B</p>
-
- <p><module>beos</module> $B$H(B <module>mpmt_os2</module> $B$O(B
- <module>mpm_netware</module> $B$H;w$?5sF0$r$7$^$9!#(B
- <module>beos</module> $B$G$N%G%U%)%k%HCM$O(B <code>MaxSpareThreads 50</code>
- $B$G$9!#(B<module>mpmt_os2</module> $B$G$N%G%U%)%k%HCM$O(B <code>10</code>
- $B$G$9!#(B</p>
-
- <note><title>$B@)8B;v9`(B</title>
- <p><directive>MaxSpareThreads</directive> $B$N<h$kCM$K$O@)8B$,$"$j$^$9!#(B
- Apache $B$O<!$N5,B'$K=>$C$F<+F0E*$KJd@5$7$^$9!#(B</p>
- <ul>
- <li><module>perchild</module> $B$G$O!"(B
- <directive>MaxSpareThreads</directive> $B$,(B
- <directive module="mpm_common">ThreadLimit</directive>
- $B$HEy$7$$$+$=$l0J2<$G$"$kI,MW$,$"$j$^$9!#(B</li>
-
- <li><module>mpm_netware</module> $B$O(B
- <directive module="mpm_common">MinSpareThreads</directive>
- $B$h$j$bBg$-$$I,MW$,$"$j$^$9!#(B</li>
-
- <li><module>leader</module>, <module>threadpool</module>,
- <module>worker</module> $B$G$O!"(B
- <directive module="mpm_common">MinSpareThreads</directive> $B$H(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$G7h$^$kAmOB$HEy$7$$$+Bg$-$$I,MW$,$"$j$^$9!#(B</li>
- </ul>
- </note>
-</usage>
-<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareThreads</name>
-<description>$B%j%/%(%9%H$K1~Ez$9$k$3$H$N$G$-$k(B
-$B%"%$%I%k%9%l%C%I?t$N:G>.?t(B</description>
-<syntax>MinSpareServers <var>number</var></syntax>
-<default>$B>\:Y$O;HMQJ}K!$r$4Mw2<$5$$!#(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpmt_os2</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p>$B%j%/%(%9%H$K1~Ez$9$k%9%l%C%I?t$N:G>.CM$G$9!#(B
- $B0[$J$k(B MPM $B$G$O$=$l$>$l!"(B
- $B$3$N%G%#%l%/%F%#%V$O0[$J$k<h$j07$o$lJ}$r$7$^$9!#(B</p>
-
- <p><module>perchild</module> $B$G$O!"(B
- $B%G%U%)%k%H$O(B <code>MinSpareThreads 5</code> $B$G!"(B
- $B%"%$%I%k%9%l%C%I?t$r;R%W%m%;%9Kh$K4F;k$7$^$9!#(B
- $B$b$7;R%W%m%;%9$K==J,$J?t$N%9%l%C%I$,$J$1$l$P!"(B
- $B%5!<%P$O$=$N;R%W%m%;%9$K?7$7$$%9%l%C%I$r:n$j;O$a$^$9!#(B
- $B$G$9$+$i!"(B<directive module="perchild">NumServers</directive>
- $B$r(B 10 $B$K!"(B<directive>MinSpareThreads</directive> $B$r(B
- 5 $B$K$7$?>l9g$O!":G>.$G$b(B 50 $B$N%"%$%I%k%9%l%C%I$,(B
- $B%7%9%F%`>e$K$"$k$3$H$K$J$j$^$9!#(B</p>
-
- <p><module>worker</module>, <module>leader</module>,
- <module>threadpool</module> $B$G$O!"(B
- $B%G%U%)%k%H$O(B <code>MinSpareThreads 75</code> $B$G!"(B
- $B%"%$%I%k%9%l%C%I?t$r%5!<%PA4BN$G4F;k$7$^$9!#(B
- $B$b$7%5!<%P$K==J,$J?t$N%"%$%I%k%9%l%C%I$,$J$1$l$P!"(B
- $B%"%$%I%k%9%l%C%I?t$,$3$N?t$h$j$bBg$-$/$J$k$^$G(B
- $B?7$7$$;R%W%m%;%9$,@8@.$5$l$^$9!#(B</p>
-
- <p><module>mpm_netware</module> $B$G$O!"(B
- $B%G%U%)%k%H$O(B <code>MinSpareThreads 10</code> $B$G!"(B
- $B%7%s%0%k%W%m%;%9(B MPM $B$G$9$N$G!"%5!<%PA4BN$G4IM}$5$l$^$9!#(B</p>
-
- <p><module>beos</module> $B$H(B <module>mpmt_os2</module> $B$O!"(B
- <module>mpm_netware</module>$B$K$h$/;w$F$$$^$9!#(B
- <module>beos</module> $B$G$N%G%U%)%k%H$O(B <code>MinSpareThreads 1</code>
- $B$G$9!#(B<module>mpmt_os2</module> $B$G$N%G%U%)%k%H$O(B
- <code>5</code> $B$G$9!#(B</p>
-</usage>
-<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScoreBoardFile</name>
-<description>$B;R%W%m%;%9$HO"7H$9$k$?$a$N%G!<%?$rJ]B8$9$k(B
-$B%U%!%$%k$N0LCV(B</description>
-<syntax>ScoreBoardFile <var>file-path</var></syntax>
-<default>ScoreBoardFile logs/apache_status</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_winnt</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>Apache $B$O?F%W%m%;%9$H;R%W%m%;%94V$NDL?.$K%9%3%"%\!<%I$rMQ$$$^$9!#(B
- $B$3$NDL?.5!G=$K%U%!%$%k$rI,MW$H$9$k%"!<%-%F%/%A%c$b$"$j$^$9!#(B
- $B%U%!%$%k$,;XDj$5$l$F$$$J$1$l$P!"(BApache $B$O$^$:%a%b%j>e(B
- ($BF?L>6&M-%a%b%j(B) $B$K%9%3%"%\!<%I$r:n$m$&$H$7!"$=$l$,<:GT$9$k$H(B
- $B%G%#%9%/>e$K%U%!%$%k(B ($B%U%!%$%k%Y!<%9$N6&M-%a%b%j(B) $B$r:n$m$&$H$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r;XDj$9$k$H!"(BApache
- $B$OI,$:%G%#%9%/$K%U%!%$%k$r@8@.$7$^$9!#(B</p>
-
- <example><title>$BNc(B</title>
- ScoreBoardFile /var/run/apache_status
- </example>
-
- <p>$B%U%!%$%k%Y!<%9$N6&M-%a%b%j$O!"%5!<%I%Q!<%F%#!<@=$N%"%W%j%1!<%7%g%s$G(B
- $B%9%3%"%\!<%I$KD>@\%"%/%;%9$9$kI,MW$,$"$k>l9g$KLr$KN)$A$^$9!#(B</p>
-
- <p><directive>ScoreBoardFile</directive> $B$r;H$&>l9g!"(B
- RAM $B%G%#%9%/>e$KCV$/$H%9%T!<%I$,8~>e$9$k$G$7$g$&!#(B
- $B$7$+$7!"%m%0%U%!%$%k$N@_CV0LCV$d(B
- <a href="../misc/security_tips.html">$B%;%-%e%j%F%#(B</a>
- $B$HF1MM$NCm0UE@$,$"$k$N$G!"Cm0U$7$F$/$@$5$$!#(B</p>
-</usage>
-<seealso><a href="../stopping.html">Apache $B$NDd;_$H:F5/F0(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SendBufferSize</name>
-<description>TCP $B%P%C%U%!%5%$%:(B</description>
-<syntax>SendBufferSize <var>bytes</var></syntax>
-<default>SendBufferSize 0</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>leader</module>
-<module>mpm_netware</module><module>mpm_winnt</module>
-<module>mpmt_os2</module><module>perchild</module><module>prefork</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>$B%5!<%P$O(B TCP $B%P%C%U%!%5%$%:$r;XDj$5$l$?%P%$%H?t$K@_Dj$7$^$9!#(B
- $B9bB.$G9b%l%$%F%s%7$J4D6-$G(B
- (<em>$BNc(B</em> 100ms $BDxEY!"BgN&2#CG9bB.DL?.O)$J$I(B)
- $B8E$$0lHLE*$J(B OS $B$N%G%U%)%k%HCM$rA}$d$9$N$KHs>o$KJXMx$G$9!#(B</p>
-
- <p><code>0</code>$B$K$7$?>l9g!"(BOS $B$N%G%U%)%k%HCM$,;HMQ$5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerLimit</name>
-<description>$B@_Dj2DG=$J%5!<%P%W%m%;%9?t$N>e8B(B</description>
-<syntax>ServerLimit <var>number</var></syntax>
-<default>$B>\:Y$O;HMQK!$r;2>H(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p><module>prefork</module> MPM $B$N>l9g$O!"$3$N%G%#%l%/%F%#%V$O(B
- Apache $B%W%m%;%92TF/Cf$K$*$1$k(B
- <directive module="mpm_common">MaxClients</directive>
- $B$K@_Dj2DG=$J>e8BCM$r@_Dj$9$k$3$H$K$J$j$^$9(B
- ($BLuCm(B: prefork $B$N>l9g$OF1;~%/%i%$%"%s%H?t(B = $B%5!<%P%W%m%;%9?t$J$N$G(B) $B!#(B
- <module>worker</module> MPM $B$N>l9g$K$O!"$3$N%G%#%l%/%F%#%V$O(B
- <directive module="mpm_common">ThreadLimit</directive>
- $B%G%#%l%/%F%#%V$HAH$_9g$o$;$F!"(B
- Apache $B%W%m%;%92TF/Cf$K$*$1$k(B
- <directive module="mpm_common">MaxClients</directive>
- $B$K@_Dj2DG=$J>e8BCM$r@_Dj$9$k$3$H$K$J$j$^$9!#(B
- $B:F5/F0Cf$K$3$N%G%#%l%/%F%#%V$rJQ99$7$F$bL5;k$5$l$^$9$,!"(B
- <directive module="mpm_common">MaxClients</directive>
- $B$O:F5/F0Cf$K=$@5$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k:]$OFC$KCm0U$7$F$/$@$5$$!#(B
- <directive>ServerLimit</directive> $B$,I,MW0J>e$KBg$-$JCM$K(B
- $B@_Dj$5$l$?>l9g$O!"M>7W$JL$;HMQ6&M-%a%b%j$,3d$jEv$F$i$l$^$9!#(B
- <directive>ServerLimit</directive> $B$H(B
- <directive module="mpm_common">MaxClients</directive>
- $B$,%7%9%F%`$N07$($kHO0O$r1[$($?@_DjCM$K$J$C$F$$$k$H!"(B
- Apache $B$O5/F0$7$J$$$+!"5/F0$7$F$bIT0BDj$K$J$k$G$7$g$&!#(B</p>
-
- <p><module>prefork</module> MPM $B$G$O!"(B
- <directive module="mpm_common">MaxClients</directive>
- $B$r(B 256 ($B%G%U%)%k%H(B) $B$h$j$bBg$-$JCM$K@_Dj$9$kI,MW$,$"$k;~$K$@$1;HMQ$7$F$/$@$5$$!#(B
- $B4uK>$N(B <directive module="mpm_common">MaxClients</directive>
- $B?t$H$/$i$Y$F!"I,MW0J>e$KBg$-$JCM$r;XDj$9$k$3$H$OHr$1$F$/$@$5$$!#(B</p>
-
- <p><module>worker</module>, <module>leader</module>,
- <module>threadpool</module> MPM $B$G$O!"(B
- <directive module="mpm_common">MaxClients</directive> $B$H(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$N@_Dj$G(B 16 $B%5!<%P%W%m%;%9(B ($B%G%U%)%k%H(B)
- $B0J>eI,MW$K$J$k>l9g$K$N$_;HMQ$7$F$/$@$5$$!#4uK>$N(B
- <directive module="mpm_common">MaxClients </directive> $B$H(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$H$/$i$Y$F!"I,MW$H$J$k%5!<%P%W%m%;%9?t0J>e$KBg$-$JCM$r(B
- $B@_Dj$9$k$3$H$OHr$1$F$/$@$5$$!#(B</p>
-
- <p><module>perchild</module> MPM $B$G$O!"(B
- <directive module="perchild">NumServers</directive> $B$r(B 8 ($B%G%U%)%k%H(B)
- $B$h$m$$$bBg$-$JCM$K@_Dj$9$kI,MW$,$"$k$H$-$K$N$_;HMQ$7$F$/$@$5$$!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><code>ServerLimit 20000</code> $B$H$$$&@)8BIU$-$G%3%s%Q%$%k$5$l$F$$$^$9!#(B
- $B$3$l$O%9%Z%k%_%9$K$h$C$F8m$C$F9s$$>u67$K$J$k$N$r!"(B
- $B2sHr$9$k$?$a$N=hCV$G$9!#(B</p>
- </note>
-</usage>
-<seealso><a href="../stopping.html">Apache $B$NDd;_$H:F5/F0(B</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartServers</name>
-<description>$B5/F0;~$K@8@.$5$l$k;R%5!<%P%W%m%;%9$N?t(B</description>
-<syntax>StartServers <var>number</var></syntax>
-<default>$B>\:Y$O;HMQJ}K!$r;2>H(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpmt_os2</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-
-<usage>
- <p><directive>StartServers</directive> $B%G%#%l%/%F%#%V$O!"(B
- $B5/F0;~$K@8@.$5$l$k;R%5!<%P%W%m%;%9$N?t$r@_Dj$7$^$9!#(B
- $B%W%m%;%9?t$OIi2Y$K1~$8$FF0E*$K@)8f$5$l$^$9$N$G!"(B
- $BDL>o$O$3$NCM$rD4@0$9$kM}M3$O$"$^$j$J$$$G$7$g$&!#(B</p>
-
- <p>$B%G%U%)%k%HCM$O(B MPM $B$4$H$K0[$J$j$^$9!#(B
- <module>leader</module>, <module>threadpool</module>,
- <module>worker</module> $B$O(B <code>StartServers 3</code> $B$G$9!#(B
- <module>prefork</module> $B$O(B <code>5</code> $B$G!"(B
- <module>mpmt_os2</module> $B$O(B <code>2</code> $B$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartThreads</name>
-<description>$B5/F0;~$K@8@.$5$l$k%9%l%C%I$N?t(B</description>
-<syntax>StartThreads <var>number</var></syntax>
-<default>$B>\:Y$O;HMQJ}K!$r;2>H(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>beos</module><module>mpm_netware</module>
-<module>perchild</module></modulelist>
-
-<usage>
- <p>$B5/F0;~$K@8@.$5$l$k%9%l%C%I$N?t$G$9!#(B
- $B%9%l%C%I?t$OIi2Y$K1~$8$FF0E*$K@)8f$5$l$^$9$N$G!"(B
- $BDL>o$O$3$NCM$rD4@0$9$kM}M3$O$"$^$j$J$$$G$7$g$&!#(B</p>
-
- <p><module>perchild</module> $B$G$N%G%U%)%k%H$O(B
- <code>StartThreads 5</code> $B$G!"$3$N%G%#%l%/%F%#%V$O5/F0;~$K(B
- $B%W%m%;%9Kh$N%9%l%C%I?t$rDI@W$7$^$9!#(B</p>
-
- <p><module>mpm_netware</module> $B$G$N%G%U%)%k%H$O(B
- <code>StartThreads 50</code> $B$G!"(B
- $B$3$N>l9g%W%m%;%9$O0l$D$7$+$J$$$N$G!"(B
- $B5/F0;~$K%j%/%(%9%H$K1~Ez$9$k%9%l%C%I$NAm?t$H$J$j$^$9!#(B</p>
-
- <p><module>beos</module> $B$G$N%G%U%)%k%H$O(B <code>StartThreads
- 10</code> $B$G$9!#(B
- $B$^$?!"5/F0;~$K@8@.$5$l$k%9%l%C%I$NAm?t$K$bH?1G$5$l$^$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadLimit</name>
-<description>$B@_Dj2DG=$J;R%W%m%;%9Kh$N%9%l%C%I?t$N>e8B$r(B
-$B@_Dj$7$^$9(B</description>
-<syntax>ThreadLimit <var>number</var></syntax>
-<default>$B>\:Y$O;HMQJ}K!$r;2>H(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_winnt</module>
-<module>perchild</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Apache 2.0.41 $B$H$=$l0J9_$N(B <module>mpm_winnt</module>
-$B$GMxMQ2DG=(B</compatibility>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O(B
- Apache $B%W%m%;%92TF/Cf$K$*$1$k(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$K@_Dj2DG=$J>e8BCM$r@_Dj$7$^$9!#:F5/F0;~$K$3$N%G%#%l%/%F%#%V$NCM$r(B
- $BJQ99$7$F$bL5;k$5$l$^$9$,!"(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$O:F5/F0Cf$K!"$3$N%G%#%l%/%F%#%V$G;XDj$5$l$?>e8BCM$^$G(B
- $BJQ99$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>$B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k:]$OFC$KCm0U$7$F$/$@$5$$!#(B
- <directive>ThreadLimit</directive> $B$,(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$h$j$b$:$C$HBg$-$JCM$K@_Dj$5$l$?>l9g$O!"(B
- $BM>7W$JL$;HMQ6&M-%a%b%j$,3d$jEv$F$i$l$F$7$^$$$^$9!#(B
- <directive>ThreadLimit</directive> $B$,(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B$NN>J}$,%7%9%F%`$N07$($kHO0O$rD6$($F$$$k>l9g$O!"(B
- Apache $B$O5/F0$7$J$$$+!"5/F0$7$?$H$7$F$bIT0BDj$K$J$k$G$7$g$&!#(B
- $B$3$N%G%#%l%/%F%#%V$NCM$O:#;HMQ$7$F$$$k(B Apache $B$N(B <directive
- module="mpm_common">ThreadsPerChild</directive> $B$NM=A[>e8BCM$r(B
- $BD6$($?CM$K$O@_Dj$7$J$$$G$/$@$5$$!#(B
- </p>
-
- <p><directive>ThreadLimit</directive> $B$N%G%U%)%k%HCM$O(B
- <module>mpm_winnt</module> $B$N$H$-$O(B 1920 $B$G!"(B
- $BB>$N>l9g$O(B 64 $B$G$9!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><code>ThreadLimit 20000</code> (<module>mpm_winnt</module>
- $B$N>l9g$O(B <code>ThreadLimit 15000</code> )
- $B$H$$$&@)8BIU$-$G%3%s%Q%$%k$5$l$F$$$^$9!#(B
- $B$3$l$O%9%Z%k%_%9$K$h$C$F8m$C$F9s$$>u67$K$J$k$N$r!"(B
- $B2sHr$9$k$?$a$N=hCV$G$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadsPerChild</name>
-<description>$B;R%W%m%;%9$=$l$>$l$K@8@.$5$l$k%9%l%C%I?t(B</description>
-<syntax>ThreadsPerChild <var>number</var></syntax>
-<default>$B>\:Y$O;HMQJ}K!$r;2>H(B</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>mpm_winnt</module>
-<module>threadpool</module><module>worker</module></modulelist>
-
-<usage>
- <p>$B$3$N%G%#%l%/%F%#%V$O!"$=$l$>$l$N;R%W%m%;%9$G@8@.$5$l$k(B
- $B%9%l%C%I?t$r@_Dj$7$^$9!#(B
- $B;R%W%m%;%9$O3+;O;~$K$3$l$i$N%9%l%C%I$r@8@.$7$F!"(B
- $B$=$N8e$O@8@.$7$^$;$s!#(B<module>mpm_winnt</module> $B$N$h$&$J!"(B
- $B;R%W%m%;%9$,0l$D$7$+$J$$$h$&$J(B MPM $B$rMxMQ$7$F$$$k$N$G$"$l$P!"(B
- $B$3$NCM$O%5!<%P$NIi2YA4BN$r==J,<h$j07$($kDxEY$K!"(B
- $BBg$-$/$J$1$l$P$J$j$^$;$s!#(B<module>worker</module> $B$N$h$&$J!"(B
- $B;R%W%m%;%9$,J#?t$"$k$h$&$J(B MPM $B$rMxMQ$7$F$$$k$N$G$"$l$P!"(B
- $B%5!<%P$NDL>oIi2Y$r==J,07$($kDxEY$K!"(B
- <em>$B%9%l%C%IAm?t(B</em>$B$,B?$/$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p><module>mpm_winnt</module>$B$G$N(B <directive>ThreadsPerChild</directive>
- $B$N%G%U%)%k%HCM$O(B <code>64</code> $B$G!"B>$N>l9g$O(B
- <code>25</code> $B$G$9!#(B</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>User</name>
-<description>$B%j%/%(%9%H$K1~Ez$9$k:]$KMQ$$$k%f!<%6(B ID</description>
-<syntax>User <var>unix-userid</var></syntax>
-<default>User #-1</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>leader</module><module>perchild</module>
-<module>prefork</module><module>threadpool</module><module>worker</module>
-</modulelist>
-<compatibility>Apache 2.0 $B0J9_$G!"%0%m!<%P%k@_Dj$G$N$_M-8z$G$9!#(B
-</compatibility>
-
-<usage>
- <p><directive>User</directive> $B%G%#%l%/%F%#%V$O(B
- $B%5!<%P$,%j%/%(%9%H$K1~Ez$9$k:]$KMQ$$$k%f!<%6(B ID $B$r@_Dj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k$?$a$K$O!"%9%?%s%I%"%m%s7?$N(B
- $B%5!<%P$O:G=i$K(B root $B8"8B$G5/F0$5$l$F$$$kI,MW$,$"$j$^$9!#(B
- $BHs(B root $B%f!<%6$G%5!<%P$r5/F0$7$?>l9g$O!"(B
- $B8"8B$NDc$$%f!<%6$X$HJQ$o$k$3$H$,$G$-$:!"(B
- $B7k6I85$N%f!<%6$N%W%m%;%9$H$7$F<B9T$5$lB3$1$^$9!#(B
- <code>root</code> $B$G5/F0$7$?>l9g$K?F%W%m%;%9$,(B root
- $B$H$7$F<B9T$5$l$F$$$k$N$O@5>o$JF0:n$G$9!#(B
- <var>Unix-userid</var> $B$O<!$N$I$l$+$G$9!#(B</p>
-
- <dl>
- <dt>$B%f!<%6L>(B</dt>
- <dd>$B%f!<%6$rL>A0$G;2>H$7$^$9!#(B</dd>
-
- <dt># $B$KB3$$$F%f!<%6HV9f(B</dt>
- <dd>$B%f!<%6$rHV9f$G;2>H$7$^$9!#(B</dd>
- </dl>
-
- <p>$B$3$N%f!<%6$O!"30It$K8+$;$k$h$&$K0U?^$7$F$$$J$$%U%!%$%k$K!"(B
- $B%"%/%;%92DG=$K$J$C$F$7$^$&$h$&$J8"8B$r;}$D$Y$-$G$O$J$$$G$9$7!"(B
- $BF1MM$K(B HTTP $B%j%/%(%9%H$KBP$7$F1~Ez$9$k$h$&$K0U?^$7$F$$$J$$(B
- $B<B9T%3!<%I$r!"<B9T$G$-$k$h$&$J8"8B$r;}$D$Y$-$G$O$J$$$G$9!#(B
- $B%5!<%P$r<B9T$9$k$?$a$KFCDj$N?7$7$$%f!<%6$H%0%k!<%W$r(B
- $B@_Dj$9$k$3$H$r$*A&$a$$$?$7$^$9!#(B
- <code>nobody</code> $B%f!<%6$r;HMQ$9$k4IM}<T$b$$$^$9$,!"(B
- $B$3$l$,>o$KK>$^$7$$$o$1$G$O$"$j$^$;$s!#(B
- $B$J$<$J$i(B <code>nobody</code> $B%f!<%6$O!"%7%9%F%`$G(B
- $BB>$NLr3d$rC4$C$F$$$k$+$bCN$l$J$$$+$i$G$9!#(B</p>
-
- <note type="warning"><title>$B%;%-%e%j%F%#(B</title>
- <p>$B@53N$K$I$s$J$3$H$r$d$C$F$$$k$N$+!"$=$N4m81@-$rCN$i$J$$$G!"(B
- <directive>User</directive> ($B$d(B <directive
- module="mpm_common">Group</directive>) $B$r(B <code>root</code> $B$K(B
- $B@_Dj$7$J$$$G$/$@$5$$!#(B</p>
- </note>
-
- <p><module>perchild</module> MPM $B$G$O!"0[$J$k%f!<%6(B ID
- $B$GJ#?t$N%P!<%A%c%k%[%9%H$rF0$+$9$3$H$rL\E*$H$7$F$$$^$9$,!"(B
- <directive>User</directive> $B$O!"<g%5!<%P$N%f!<%6(B ID
- $B$H!"(B<directive module="perchild">AssignUserID</directive>
- $B%G%#%l%/%F%#%V$r;}$?$J$$(B <directive type="section"
- module="core">VirtualHost</directive> $B%;%/%7%g%s$X$N(B
- $B%U%)!<%k%P%C%/$H$rDj5A$9$k$3$H$K$J$j$^$9!#(B</p>
-
- <p>$BFC5-;v9`(B: $B$3$N%G%#%l%/%F%#%V$r(B
- <directive module="core" type="section">VirtualHost</directive>
- $B$G;HMQ$9$k$3$H$O%5%]!<%H$5$l$J$/$J$j$^$7$?!#(B
- <a href="../suexec.html">suexec</a> $B8~$1$K%5!<%P$r@_Dj$9$k$N$G$"$l$P!"(B
- <directive module="mod_suexec">SuexecUserGroup</directive>
- $B$r;HMQ$7$F$/$@$5$$!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p><directive>User</directive> $B%G%#%l%/%F%#%V$O(B
- <module>beos</module> $B$H(B <module>mpmt_os2</module> MPM
- $B$K$bB8:_$7$^$9$,!"<B<AE*$KL58z$G!"8_49@-$N$?$a$@$1$KB8:_$7$^$9!#(B</p>
- </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_common.xml.meta b/docs/manual/mod/mpm_common.xml.meta
deleted file mode 100644
index 98faf643ae..0000000000
--- a/docs/manual/mod/mpm_common.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mpm_common</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant outdated="yes">ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mpm_netware.html b/docs/manual/mod/mpm_netware.html
deleted file mode 100644
index 03b1ca93bb..0000000000
--- a/docs/manual/mod/mpm_netware.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mpm_netware.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mpm_netware.html.en b/docs/manual/mod/mpm_netware.html.en
deleted file mode 100644
index 0f869c077f..0000000000
--- a/docs/manual/mod/mpm_netware.html.en
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_netware - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM netware</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mpm_netware.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_netware_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mpm_netware.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This Multi-Processing Module (MPM) implements an exclusively
- threaded web server that has been optimized for Novell
- NetWare.</p>
-
- <p>The main thread is responsible for launching child
- worker threads which listen for connections and serve them when they
- arrive. Apache always tries to maintain several <dfn>spare</dfn>
- or idle worker threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- child threads to be spawned before their requests can be
- served.</p>
-
- <p>The <code class="directive"><a href="../mod/mpm_common.html#startthreads">StartThreads</a></code>,
- <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code>,
- <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>, and
- <code class="directive"><a href="#maxthreads">MaxThreads</a></code>
- regulate how the main thread creates worker threads to serve
- requests. In general, Apache is very self-regulating, so most
- sites do not need to adjust these directives from their default
- values. Sites with limited memory may need to decrease <code class="directive"><a href="#maxthreads">MaxThreads</a></code> to keep the server from
- thrashing (spawning and terminating idle threads). More information
- about tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
- documentation.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- controls how frequently the server recycles processes by killing old
- ones and launching new ones. On the NetWare OS it is highly
- recommended that this directive remain set to 0. This allows worker
- threads to continue servicing requests indefinitely.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxthreads">MaxThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Setting which addresses and
- ports Apache uses</a>
-</li>
-</ul></div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxThreads" id="MaxThreads">MaxThreads</a> <a name="maxthreads" id="maxthreads">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set the maximum number of worker threads</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxThreads <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxThreads 2048</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mpm_netware</td></tr>
-</table>
- <p>The <code class="directive">MaxThreads</code> directive sets the desired
- maximum number worker threads allowable. The default value is
- also the compiled in hard limit. Therefore it can only be lowered,
- for example:</p>
-
- <div class="example"><p><code>
- MaxThreads 512
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mpm_netware.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_netware.xml b/docs/manual/mod/mpm_netware.xml
deleted file mode 100644
index b3bee71d13..0000000000
--- a/docs/manual/mod/mpm_netware.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_netware.xml.meta">
-<name>mpm_netware</name>
-<description>Multi-Processing Module implementing an exclusively threaded web
- server optimized for Novell NetWare</description>
-<status>MPM</status>
-<sourcefile>mpm_netware.c</sourcefile>
-<identifier>mpm_netware_module</identifier>
-
-<summary>
- <p>This Multi-Processing Module (MPM) implements an exclusively
- threaded web server that has been optimized for Novell
- NetWare.</p>
-
- <p>The main thread is responsible for launching child
- worker threads which listen for connections and serve them when they
- arrive. Apache always tries to maintain several <dfn>spare</dfn>
- or idle worker threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- child threads to be spawned before their requests can be
- served.</p>
-
- <p>The <directive module="mpm_common">StartThreads</directive>,
- <directive module="mpm_common">MinSpareThreads</directive>,
- <directive module="mpm_common">MaxSpareThreads</directive>, and
- <directive module="mpm_netware">MaxThreads</directive>
- regulate how the main thread creates worker threads to serve
- requests. In general, Apache is very self-regulating, so most
- sites do not need to adjust these directives from their default
- values. Sites with limited memory may need to decrease <directive
- module="mpm_netware">MaxThreads</directive> to keep the server from
- thrashing (spawning and terminating idle threads). More information
- about tuning process creation is provided in the <a
- href="../misc/perf-tuning.html">performance hints</a>
- documentation.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- controls how frequently the server recycles processes by killing old
- ones and launching new ones. On the NetWare OS it is highly
- recommended that this directive remain set to 0. This allows worker
- threads to continue servicing requests indefinitely.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and
- ports Apache uses</a>
-</seealso>
-
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxThreads</name>
-<description>Set the maximum number of worker threads</description>
-<syntax>MaxThreads <var>number</var></syntax>
-<default>MaxThreads 2048</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MaxThreads</directive> directive sets the desired
- maximum number worker threads allowable. The default value is
- also the compiled in hard limit. Therefore it can only be lowered,
- for example:</p>
-
- <example>
- MaxThreads 512
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_netware.xml.meta b/docs/manual/mod/mpm_netware.xml.meta
deleted file mode 100644
index 9cc16991d7..0000000000
--- a/docs/manual/mod/mpm_netware.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mpm_netware</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mpm_winnt.html b/docs/manual/mod/mpm_winnt.html
deleted file mode 100644
index c5d89ac935..0000000000
--- a/docs/manual/mod/mpm_winnt.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: mpm_winnt.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mpm_winnt.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mpm_winnt.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/mpm_winnt.html.de b/docs/manual/mod/mpm_winnt.html.de
deleted file mode 100644
index 17770e2ab1..0000000000
--- a/docs/manual/mod/mpm_winnt.html.de
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_winnt - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-MPM winnt</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mpm_winnt.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_winnt.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_winnt.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td> Das Multi-Processing-Modul ist optimiert für
- Windows NT.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Modulbezeichner:</a></th><td>mpm_winnt_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Quelltext-Datei:</a></th><td>mpm_winnt.c</td></tr></table>
-<h3>Zusammenfassung</h3>
-
- <p>Dieses Multi-Processing-Modul (MPM) ist die Voreinstellung
- für das Betriebssystem Windows NT. Es verwendet einen einzelnen
- Steuerprozess, der einen einzelnen Kindprozess startet, welcher
- wiederum Threads zur Bedienung von Anfragen erstellt.</p>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#win32disableacceptex">Win32DisableAcceptEx</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Win32DisableAcceptEx" id="Win32DisableAcceptEx">Win32DisableAcceptEx</a>-<a name="win32disableacceptex" id="win32disableacceptex">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Für die Annahme von Netzwerkverbindungen wird accept() anstelle von AcceptEx() verwendet</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Win32DisableAcceptEx</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>AcceptEx() ist standardmäßig aktiviert. Verwenden Sie diese
-Direktive, um den Gebrauch von AcceptEx() zu deaktivieren.</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>mpm_winnt</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Verfügbar ab Version 2.0.49</td></tr>
-</table>
- <p><code>AcceptEx()</code> ist eine Schnittstelle zu Microsoft Winsock v2,
- die unter bestimmten Umständen einige Leistungsverbesserungen
- gegenüber der <code>accept()</code>-API von BSD bietet. Einige beliebte
- Windows-Produkte, typischerweise Virenscanner oder VPN-Pakete, besitzen
- jedoch Fehler, welche den einwandfreien Betrieb von <code>AcceptEx()</code>
- stören. Wenn Sie einen Fehler wie:</p>
-
- <div class="example"><p><code>
- [error] (730038)An operation was attempted on something that is
- not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
- </code></p></div>
-
- <p>erhalten, sollten Sie diese Direktive verwenden, um den Gebrauch von
- <code>AcceptEx()</code> zu unterbinden.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/mpm_winnt.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_winnt.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_winnt.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_winnt.html.en b/docs/manual/mod/mpm_winnt.html.en
deleted file mode 100644
index 65537728db..0000000000
--- a/docs/manual/mod/mpm_winnt.html.en
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_winnt - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM winnt</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_winnt.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_winnt.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_winnt.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>This Multi-Processing Module is optimized for Windows
-NT.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_winnt_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mpm_winnt.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This Multi-Processing Module (MPM) is the default for the
- Windows NT operating systems. It uses a single control process
- which launches a single child process which in turn creates
- threads to handle requests</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#win32disableacceptex">Win32DisableAcceptEx</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Win32DisableAcceptEx" id="Win32DisableAcceptEx">Win32DisableAcceptEx</a> <a name="win32disableacceptex" id="win32disableacceptex">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use accept() rather than AcceptEx() to accept network connections</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Win32DisableAcceptEx</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AcceptEx() is enabled by default. Use this directive to disable use of
- AcceptEx()</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mpm_winnt</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Version 2.0.49 and later</td></tr>
-</table>
- <p><code>AcceptEx()</code> is a Microsoft WinSock v2 API that provides
- some performance improvements over the use of the BSD style
- <code>accept()</code> API in certain circumstances. Some popular Windows
- products, typically virus scanning or virtual private network
- packages, have bugs that interfere with the proper operation of
- <code>AcceptEx()</code>. If you encounter an error condition like:</p>
-
- <div class="example"><p><code>
- [error] (730038)An operation was attempted on something that is
- not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
- </code></p></div>
-
- <p>you should use this directive to disable the use of
- <code>AcceptEx()</code>.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_winnt.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_winnt.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_winnt.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_winnt.html.ja.euc-jp b/docs/manual/mod/mpm_winnt.html.ja.euc-jp
deleted file mode 100644
index 8c8af7e851..0000000000
--- a/docs/manual/mod/mpm_winnt.html.ja.euc-jp
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpm_winnt - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM winnt</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_winnt.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_winnt.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_winnt.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>Windows NT
-¸þ¤±¤ËºÇŬ²½¤µ¤ì¤¿¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>mpm_winnt_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>mpm_winnt.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)
- ¤Ï Windows NT ¤Ç¤Î¥Ç¥Õ¥©¥ë¥È¤Ë¤Ê¤ê¤Þ¤¹¡£
- °ì¤Ä¤ÎÀ©¸æÍÑ¥×¥í¥»¥¹¤òÍѤ¤¡¢¤³¤ì¤¬°ì¤Ä¤Î»Ò¥×¥í¥»¥¹¤òµ¯Æ°¤·¡¢
- ¤½¤·¤Æ»Ò¥×¥í¥»¥¹¤¬¥ê¥¯¥¨¥¹¥È¤ò¼è¤ê°·¤¦¤¿¤á¤Ë¥¹¥ì¥Ã¥É¤ò
- µ¯Æ°¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#win32disableacceptex">Win32DisableAcceptEx</a></li>
-</ul>
-</div>
-
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="Win32DisableAcceptEx" id="Win32DisableAcceptEx">Win32DisableAcceptEx</a> <a name="win32disableacceptex" id="win32disableacceptex">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥Í¥Ã¥È¥ï¡¼¥¯Àܳ¤Î¼õ¤±ÉÕ¤±¤Ë accept() ¤òAcceptEx ¤ÎÂå¤ï¤ê¤Ë»È¤¦</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>Win32DisableAcceptEx</code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>AcceptEx() ¤Ï¥Ç¥Õ¥©¥ë¥È¤ÇÍ­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£AcceptEx() ¤ò̵¸ú¤Ë¤¹¤ë
-¤¿¤á¤Ë¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹¡£</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>mpm_winnt</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">¸ß´¹À­:</a></th><td>2.0.49 ¥Ð¡¼¥¸¥ç¥ó°Ê¹ß¤Ç»ÈÍѲÄǽ</td></tr>
-</table>
- <p>AcceptEx() ¤Ï Microsoft WinSock v2 API ¤Ç¡¢¾ì¹ç¤Ë¤è¤Ã¤Æ¤Ï
- BSD ·Á¼°¤Î <code>accept()</code> API ¤è¤ê¤â¤è¤¤À­Ç½¤òȯ´ø¤·¤Þ¤¹¡£
- ¤è¤¯»È¤ï¤ì¤Æ¤¤¤ë Windows À½ÉʤÎÃæ¤Ç¡¢Æä˥¦¥£¥ë¥¹¥¹¥­¥ã¥Ê¤ä VPN ¥Ñ¥Ã¥±¡¼¥¸
- ¤ÎÃæ¤Ë¤Ï¡¢¥Ð¥°¤¬¸¶°ø¤Ç <code>AcceptEx()</code> ¤ÎŬÀÚ¤ÊÆ°ºî¤ò˸¤²¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
- °Ê²¼¤Î¤è¤¦¤Ê¥¨¥é¡¼¤ËÁø¶ø¤·¤¿¾ì¹ç¤Ï¡¢¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ
- <code>AcceptEx()</code> ¤ò»ÈÍѤ·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="example"><p><code>
- [error] (730038)An operation was attempted on something that is
- not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
- </code></p></div>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/mpm_winnt.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/mpm_winnt.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/mpm_winnt.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpm_winnt.xml b/docs/manual/mod/mpm_winnt.xml
deleted file mode 100644
index e3b3176d96..0000000000
--- a/docs/manual/mod/mpm_winnt.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.14 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_winnt.xml.meta">
-
-<name>mpm_winnt</name>
-<description>This Multi-Processing Module is optimized for Windows
-NT.</description>
-<status>MPM</status>
-<sourcefile>mpm_winnt.c</sourcefile>
-<identifier>mpm_winnt_module</identifier>
-
-<summary>
- <p>This Multi-Processing Module (MPM) is the default for the
- Windows NT operating systems. It uses a single control process
- which launches a single child process which in turn creates
- threads to handle requests</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Win32DisableAcceptEx</name>
-<description>Use accept() rather than AcceptEx() to accept network connections</description>
-<syntax>Win32DisableAcceptEx</syntax>
-<default>AcceptEx() is enabled by default. Use this directive to disable use of
- AcceptEx()</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>Available in Version 2.0.49 and later</compatibility>
-
-<usage>
- <p><code>AcceptEx()</code> is a Microsoft WinSock v2 API that provides
- some performance improvements over the use of the BSD style
- <code>accept()</code> API in certain circumstances. Some popular Windows
- products, typically virus scanning or virtual private network
- packages, have bugs that interfere with the proper operation of
- <code>AcceptEx()</code>. If you encounter an error condition like:</p>
-
- <example>
- [error] (730038)An operation was attempted on something that is
- not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
- </example>
-
- <p>you should use this directive to disable the use of
- <code>AcceptEx()</code>.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_winnt.xml.de b/docs/manual/mod/mpm_winnt.xml.de
deleted file mode 100644
index 5c9c798214..0000000000
--- a/docs/manual/mod/mpm_winnt.xml.de
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_winnt.xml.meta">
-
-<name>mpm_winnt</name>
-<description> Das Multi-Processing-Modul ist optimiert f&uuml;r
- Windows NT.</description>
-<status>MPM</status>
-<sourcefile>mpm_winnt.c</sourcefile>
-<identifier>mpm_winnt_module</identifier>
-
-<summary>
- <p>Dieses Multi-Processing-Modul (MPM) ist die Voreinstellung
- f&uuml;r das Betriebssystem Windows NT. Es verwendet einen einzelnen
- Steuerprozess, der einen einzelnen Kindprozess startet, welcher
- wiederum Threads zur Bedienung von Anfragen erstellt.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Win32DisableAcceptEx</name>
-<description>F&uuml;r die Annahme von Netzwerkverbindungen wird accept() anstelle von AcceptEx() verwendet</description>
-<syntax>Win32DisableAcceptEx</syntax>
-<default>AcceptEx() ist standardm&auml;&szlig;ig aktiviert. Verwenden Sie diese
-Direktive, um den Gebrauch von AcceptEx() zu deaktivieren.</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>Verf&uuml;gbar ab Version 2.0.49</compatibility>
-
-<usage>
- <p><code>AcceptEx()</code> ist eine Schnittstelle zu Microsoft Winsock v2,
- die unter bestimmten Umst&auml;nden einige Leistungsverbesserungen
- gegen&uuml;ber der <code>accept()</code>-API von BSD bietet. Einige beliebte
- Windows-Produkte, typischerweise Virenscanner oder VPN-Pakete, besitzen
- jedoch Fehler, welche den einwandfreien Betrieb von <code>AcceptEx()</code>
- st&ouml;ren. Wenn Sie einen Fehler wie:</p>
-
- <example>
- [error] (730038)An operation was attempted on something that is
- not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
- </example>
-
- <p>erhalten, sollten Sie diese Direktive verwenden, um den Gebrauch von
- <code>AcceptEx()</code> zu unterbinden.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_winnt.xml.ja b/docs/manual/mod/mpm_winnt.xml.ja
deleted file mode 100644
index cab4046dea..0000000000
--- a/docs/manual/mod/mpm_winnt.xml.ja
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpm_winnt.xml.meta">
-
-<name>mpm_winnt</name>
-<description>Windows NT
-$B8~$1$K:GE,2=$5$l$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</description>
-<status>MPM</status>
-<sourcefile>mpm_winnt.c</sourcefile>
-<identifier>mpm_winnt_module</identifier>
-
-<summary>
- <p>$B$3$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
- $B$O(B Windows NT $B$G$N%G%U%)%k%H$K$J$j$^$9!#(B
- $B0l$D$N@)8fMQ%W%m%;%9$rMQ$$!"$3$l$,0l$D$N;R%W%m%;%9$r5/F0$7!"(B
- $B$=$7$F;R%W%m%;%9$,%j%/%(%9%H$r<h$j07$&$?$a$K%9%l%C%I$r(B
- $B5/F0$7$^$9!#(B</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Win32DisableAcceptEx</name>
-<description>$B%M%C%H%o!<%/@\B3$N<u$1IU$1$K(B accept() $B$r(BAcceptEx $B$NBe$o$j$K;H$&(B</description>
-<syntax>Win32DisableAcceptEx</syntax>
-<default>AcceptEx() $B$O%G%U%)%k%H$GM-8z$K$J$C$F$$$^$9!#(BAcceptEx() $B$rL58z$K$9$k(B
-$B$?$a$K$3$N%G%#%l%/%F%#%V$r;H$$$^$9!#(B</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>2.0.49 $B%P!<%8%g%s0J9_$G;HMQ2DG=(B</compatibility>
-
-<usage>
- <p>AcceptEx() $B$O(B Microsoft WinSock v2 API $B$G!">l9g$K$h$C$F$O(B
- BSD $B7A<0$N(B <code>accept()</code> API $B$h$j$b$h$$@-G=$rH/4x$7$^$9!#(B
- $B$h$/;H$o$l$F$$$k(B Windows $B@=IJ$NCf$G!"FC$K%&%#%k%9%9%-%c%J$d(B VPN $B%Q%C%1!<%8(B
- $B$NCf$K$O!"%P%0$,860x$G(B <code>AcceptEx()</code> $B$NE,@Z$JF0:n$rK8$2$k$b$N$,$"$j$^$9!#(B
- $B0J2<$N$h$&$J%(%i!<$KAx6x$7$?>l9g$O!"$3$N%G%#%l%/%F%#%V$r;HMQ$7$F(B
- <code>AcceptEx()</code> $B$r;HMQ$7$J$$$h$&$K$7$F$/$@$5$$!#(B</p>
-
- <example>
- [error] (730038)An operation was attempted on something that is
- not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
- </example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpm_winnt.xml.meta b/docs/manual/mod/mpm_winnt.xml.meta
deleted file mode 100644
index 3bc778eb44..0000000000
--- a/docs/manual/mod/mpm_winnt.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mpm_winnt</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/mpmt_os2.html b/docs/manual/mod/mpmt_os2.html
deleted file mode 100644
index df2b37dfd3..0000000000
--- a/docs/manual/mod/mpmt_os2.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: mpmt_os2.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mpmt_os2.html.en b/docs/manual/mod/mpmt_os2.html.en
deleted file mode 100644
index 53e10b112e..0000000000
--- a/docs/manual/mod/mpmt_os2.html.en
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mpmt_os2 - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM os2</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mpmt_os2.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Hybrid multi-process, multi-threaded MPM for OS/2</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_mpmt_os2_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mpmt_os2.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>The Server consists of a main, parent process and a small, static
- number of child processes.</p>
-
- <p>The parent process's job is to manage the child processes. This
- involves spawning children as required to ensure there are always
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> processes
- accepting connections.</p>
-
- <p>Each child process consists of a a pool of worker threads and a
- main thread that accepts connections and passes them to the workers via
- a work queue. The worker thread pool is dynamic, managed by a
- maintenance thread so that the number of idle threads is kept between
- <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> and
- <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>See also</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></li>
-</ul></div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mpmt_os2.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/mpmt_os2.xml b/docs/manual/mod/mpmt_os2.xml
deleted file mode 100644
index 99b3324e6d..0000000000
--- a/docs/manual/mod/mpmt_os2.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="mpmt_os2.xml.meta">
-
-<name>mpmt_os2</name>
-<description>Hybrid multi-process, multi-threaded MPM for OS/2</description>
-<status>MPM</status>
-<sourcefile>mpmt_os2.c</sourcefile>
-<identifier>mpm_mpmt_os2_module</identifier>
-
-<summary>
- <p>The Server consists of a main, parent process and a small, static
- number of child processes.</p>
-
- <p>The parent process's job is to manage the child processes. This
- involves spawning children as required to ensure there are always
- <directive module="mpm_common">StartServers</directive> processes
- accepting connections.</p>
-
- <p>Each child process consists of a a pool of worker threads and a
- main thread that accepts connections and passes them to the workers via
- a work queue. The worker thread pool is dynamic, managed by a
- maintenance thread so that the number of idle threads is kept between
- <directive module="mpm_common">MinSpareThreads</directive> and
- <directive module="mpm_common">MaxSpareThreads</directive>.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></seealso>
-
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mpmt_os2.xml.meta b/docs/manual/mod/mpmt_os2.xml.meta
deleted file mode 100644
index 5ffd92955e..0000000000
--- a/docs/manual/mod/mpmt_os2.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mpmt_os2</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/perchild.html b/docs/manual/mod/perchild.html
deleted file mode 100644
index 6659fb364e..0000000000
--- a/docs/manual/mod/perchild.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: perchild.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/perchild.html.en b/docs/manual/mod/perchild.html.en
deleted file mode 100644
index 32743c2920..0000000000
--- a/docs/manual/mod/perchild.html.en
+++ /dev/null
@@ -1,264 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>perchild - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM perchild</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/perchild.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_perchild_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>perchild.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning">
- This module is not functional. Development of this module is not
- complete and is not currently active. Do not use
- <code class="module"><a href="../mod/perchild.html">perchild</a></code> unless you are a programmer willing to
- help fix it.
- </div>
-
- <p>This Multi-Processing Module (MPM) implements a hybrid
- multi-process, multi-threaded web server. A fixed number of
- processes create threads to handle requests. Fluctuations in
- load are handled by increasing or decreasing the number of
- threads in each process.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#assignuserid">AssignUserID</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#childperuserid">ChildPerUserID</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxthreadsperchild">MaxThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#numservers">NumServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startthreads">StartThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">How it works</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">How it works</a></h2>
- <p>A single control process launches the number of child processes
- indicated by the <code class="directive"><a href="#numservers">NumServers</a></code>
- directive at server startup. Each child process creates threads as
- specified in the <code class="directive"><a href="../mod/mpm_common.html#startthreads">StartThreads</a></code> directive.
- The individual threads then
- listen for connections and serve them when they arrive.</p>
-
- <p>Apache always tries to maintain a pool of <dfn>spare</dfn> or
- idle server threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for new
- threads to be created. For each child process, Apache assesses
- the number of idle threads and creates or destroys threads to
- keep this number within the boundaries specified by
- <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code>
- and <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>.
- Since this process is very self-regulating, it is rarely
- necessary to modify these directives from their default values.
- The maximum number of clients that may be served simultaneously
- is determined by multiplying the number of server processes
- that will be created (<code class="directive"><a href="#numservers">NumServers</a></code>) by the maximum
- number of threads created in each process
- (<code class="directive"><a href="../mod/mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></code>).</p>
-
- <p>While the parent process is usually started as root under
- Unix in order to bind to port 80, the child processes and
- threads are launched by Apache as a less-privileged user. The
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> directives are used to
- set the privileges of the Apache child processes. The child
- processes must be able to read all the content that will be
- served, but should have as few privileges beyond that as
- possible. In addition, unless <a href="../suexec.html">suexec</a> is used, these directives also
- set the privileges which will be inherited by CGI scripts.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- controls how frequently the
- server recycles processes by killing old ones and launching new
- ones.</p>
-
- <h3><a name="user-ids" id="user-ids">Working with different user-IDs</a></h3>
- <p>The <code class="module"><a href="../mod/perchild.html">perchild</a></code> MPM adds the extra ability to
- specify that particular processes should serve requests under
- different user-IDs. These user-IDs can then be associated with
- specific virtual hosts. You have to use one <code class="directive"><a href="#childperuserid">ChildPerUserID</a></code> directive for
- every user/group combination you want to be run. Then you can tie
- particular virtual hosts to that user and group IDs.</p>
-
- <p>The following example runs 7 child processes. Two of them are run
- under <code>user1</code>/<code>group1</code>. The next four are run
- under <code>user2</code>/<code>group2</code> and the remaining
- process uses the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>
- of the main server:</p>
-
- <div class="example"><h3>Global config</h3><p><code>
- NumServers 7<br />
- ChildPerUserID user1 group1 2<br />
- ChildPerUserID user2 group2 4
- </code></p></div>
-
- <p>Using unbalanced numbers of processes as above is useful, if the
- particular virtual hosts produce different load. The assignment to
- the virtual hosts is easily done as in the example below. In
- conclusion with the example above the following assumes, that
- <code>server2</code> has to serve about twice of the hits of
- <code>server1</code>.</p>
-
- <div class="example"><h3>Example</h3><p><code>
- NameVirtualHost *<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- ServerName fallbackhost<br />
- # no assignment; use fallback<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- ServerName server1<br />
- AssignUserID user1 group1<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- ServerName server2<br />
- AssignUserID user2 group2<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="AssignUserID" id="AssignUserID">AssignUserID</a> <a name="assignuserid" id="assignuserid">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Tie a virtual host to a user and group ID</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AssignUserID <var>user-id</var> <var>group-id</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>virtual host</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>perchild</td></tr>
-</table>
- <p>Tie a virtual host to a specific user/group combination. Requests
- addressed to the virtual host where this directive appears will be
- served by a process running with the specified user and group ID.</p>
-
- <p>The user and group ID has to be assigned to a number of children
- in the global server config using the <code class="directive"><a href="#childperuserid">ChildPerUserID</a></code> directive. See the section above for a
- <a href="#user-ids">configuration example</a>.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="ChildPerUserID" id="ChildPerUserID">ChildPerUserID</a> <a name="childperuserid" id="childperuserid">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify user ID and group ID for a number of child
-processes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>perchild</td></tr>
-</table>
- <p>Specify a user ID and group ID for a number of child processes.
- The third argument, <var>num-children</var>, is the number of child
- processes to start with the specified user and group. It does
- <em>not</em> represent a specific child number. In order to use this
- directive, the server must be run initially as <code>root</code>.
- If you start the server as a non-root user, it will fail to change
- to the lesser privileged user.</p>
-
- <p>If the total number of child processes, found by totaling all of the
- third arguments to all <code class="directive">ChildPerUserID</code> directives
- in the config file, is less than <code class="directive"><a href="#numservers">NumServers</a></code>, then all remaining children will inherit the
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> settings from the main server.
- See the section above for a <a href="#user-ids">configuration
- example</a>.</p>
-
- <div class="warning"><h3>Security</h3>
- <p>Don't set <var>user-id</var> (or <var>group-id</var>) to
- <code>root</code> unless you know exactly what you are doing, and
- what the dangers are.</p>
- </div>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxThreadsPerChild" id="MaxThreadsPerChild">MaxThreadsPerChild</a> <a name="maxthreadsperchild" id="maxthreadsperchild">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of threads per child process</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxThreadsPerChild <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxThreadsPerChild 64</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>perchild</td></tr>
-</table>
- <p>This directive sets the maximum number of threads that will be
- created in each child process. To increase this value beyond its
- default, it is necessary to change the value of the <code class="directive"><a href="../mod/mpm_common.html#threadlimit">ThreadLimit</a></code> directive and stop and
- re-start the server.</p>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="NumServers" id="NumServers">NumServers</a> <a name="numservers" id="numservers">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Total number of children alive at the same time</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NumServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>NumServers 2</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>perchild</td></tr>
-</table>
- <p>The <code class="directive">NumServers</code> directive determines the number
- of children alive at the same time. This number should be large enough to
- handle the requests for the entire site. To increase this value beyond the
- value of <code>8</code>, it is necessary to change the value of the
- <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code> directive and stop
- and re-start the server. See the section above for a <a href="#user-ids">configuration example</a>.</p>
-
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/perchild.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/perchild.xml b/docs/manual/mod/perchild.xml
deleted file mode 100644
index bad86ec867..0000000000
--- a/docs/manual/mod/perchild.xml
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.16 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="perchild.xml.meta">
-
-<name>perchild</name>
-<description>Multi-Processing Module allowing for daemon processes serving
-requests to be assigned a variety of different userids</description>
-<status>MPM</status>
-<sourcefile>perchild.c</sourcefile>
-<identifier>mpm_perchild_module</identifier>
-
-<summary>
- <note type="warning">
- This module is not functional. Development of this module is not
- complete and is not currently active. Do not use
- <module>perchild</module> unless you are a programmer willing to
- help fix it.
- </note>
-
- <p>This Multi-Processing Module (MPM) implements a hybrid
- multi-process, multi-threaded web server. A fixed number of
- processes create threads to handle requests. Fluctuations in
- load are handled by increasing or decreasing the number of
- threads in each process.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></seealso>
-
-<section id="how-it-works"><title>How it works</title>
- <p>A single control process launches the number of child processes
- indicated by the <directive module="perchild">NumServers</directive>
- directive at server startup. Each child process creates threads as
- specified in the <directive module="mpm_common">StartThreads</directive> directive.
- The individual threads then
- listen for connections and serve them when they arrive.</p>
-
- <p>Apache always tries to maintain a pool of <dfn>spare</dfn> or
- idle server threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for new
- threads to be created. For each child process, Apache assesses
- the number of idle threads and creates or destroys threads to
- keep this number within the boundaries specified by
- <directive module="mpm_common">MinSpareThreads</directive>
- and <directive module="mpm_common">MaxSpareThreads</directive>.
- Since this process is very self-regulating, it is rarely
- necessary to modify these directives from their default values.
- The maximum number of clients that may be served simultaneously
- is determined by multiplying the number of server processes
- that will be created (<directive
- module="perchild">NumServers</directive>) by the maximum
- number of threads created in each process
- (<directive module="mpm_common">MaxThreadsPerChild</directive>).</p>
-
- <p>While the parent process is usually started as root under
- Unix in order to bind to port 80, the child processes and
- threads are launched by Apache as a less-privileged user. The
- <directive module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive> directives are used to
- set the privileges of the Apache child processes. The child
- processes must be able to read all the content that will be
- served, but should have as few privileges beyond that as
- possible. In addition, unless <a
- href="../suexec.html">suexec</a> is used, these directives also
- set the privileges which will be inherited by CGI scripts.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- controls how frequently the
- server recycles processes by killing old ones and launching new
- ones.</p>
-
- <section id="user-ids"><title>Working with different user-IDs</title>
- <p>The <module>perchild</module> MPM adds the extra ability to
- specify that particular processes should serve requests under
- different user-IDs. These user-IDs can then be associated with
- specific virtual hosts. You have to use one <directive
- module="perchild">ChildPerUserID</directive> directive for
- every user/group combination you want to be run. Then you can tie
- particular virtual hosts to that user and group IDs.</p>
-
- <p>The following example runs 7 child processes. Two of them are run
- under <code>user1</code>/<code>group1</code>. The next four are run
- under <code>user2</code>/<code>group2</code> and the remaining
- process uses the <directive module="mpm_common"
- >User</directive> and <directive module="mpm_common">Group</directive>
- of the main server:</p>
-
- <example><title>Global config</title>
- NumServers 7<br />
- ChildPerUserID user1 group1 2<br />
- ChildPerUserID user2 group2 4
- </example>
-
- <p>Using unbalanced numbers of processes as above is useful, if the
- particular virtual hosts produce different load. The assignment to
- the virtual hosts is easily done as in the example below. In
- conclusion with the example above the following assumes, that
- <code>server2</code> has to serve about twice of the hits of
- <code>server1</code>.</p>
-
- <example><title>Example</title>
- NameVirtualHost *<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- ServerName fallbackhost<br />
- # no assignment; use fallback<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- ServerName server1<br />
- AssignUserID user1 group1<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- ServerName server2<br />
- AssignUserID user2 group2<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
- </section>
-</section>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AssignUserID</name>
-<description>Tie a virtual host to a user and group ID</description>
-<syntax>AssignUserID <var>user-id</var> <var>group-id</var></syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
- <p>Tie a virtual host to a specific user/group combination. Requests
- addressed to the virtual host where this directive appears will be
- served by a process running with the specified user and group ID.</p>
-
- <p>The user and group ID has to be assigned to a number of children
- in the global server config using the <directive module="perchild"
- >ChildPerUserID</directive> directive. See the section above for a
- <a href="#user-ids">configuration example</a>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ChildPerUserID</name>
-<description>Specify user ID and group ID for a number of child
-processes</description>
-<syntax>ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Specify a user ID and group ID for a number of child processes.
- The third argument, <var>num-children</var>, is the number of child
- processes to start with the specified user and group. It does
- <em>not</em> represent a specific child number. In order to use this
- directive, the server must be run initially as <code>root</code>.
- If you start the server as a non-root user, it will fail to change
- to the lesser privileged user.</p>
-
- <p>If the total number of child processes, found by totaling all of the
- third arguments to all <directive>ChildPerUserID</directive> directives
- in the config file, is less than <directive module="perchild"
- >NumServers</directive>, then all remaining children will inherit the
- <directive module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive> settings from the main server.
- See the section above for a <a href="#user-ids">configuration
- example</a>.</p>
-
- <note type="warning"><title>Security</title>
- <p>Don't set <var>user-id</var> (or <var>group-id</var>) to
- <code>root</code> unless you know exactly what you are doing, and
- what the dangers are.</p>
- </note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxThreadsPerChild</name>
-<description>Maximum number of threads per child process</description>
-<syntax>MaxThreadsPerChild <var>number</var></syntax>
-<default>MaxThreadsPerChild 64</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>This directive sets the maximum number of threads that will be
- created in each child process. To increase this value beyond its
- default, it is necessary to change the value of the <directive
- module="mpm_common">ThreadLimit</directive> directive and stop and
- re-start the server.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NumServers</name>
-<description>Total number of children alive at the same time</description>
-<syntax>NumServers <var>number</var></syntax>
-<default>NumServers 2</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>NumServers</directive> directive determines the number
- of children alive at the same time. This number should be large enough to
- handle the requests for the entire site. To increase this value beyond the
- value of <code>8</code>, it is necessary to change the value of the
- <directive module="mpm_common">ServerLimit</directive> directive and stop
- and re-start the server. See the section above for a <a href="#user-ids"
- >configuration example</a>.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/perchild.xml.meta b/docs/manual/mod/perchild.xml.meta
deleted file mode 100644
index 0f5b87f6fa..0000000000
--- a/docs/manual/mod/perchild.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>perchild</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/prefork.html b/docs/manual/mod/prefork.html
deleted file mode 100644
index 4676cc4ff3..0000000000
--- a/docs/manual/mod/prefork.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: prefork.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: prefork.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: prefork.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/prefork.html.de b/docs/manual/mod/prefork.html.de
deleted file mode 100644
index 05cc87267d..0000000000
--- a/docs/manual/mod/prefork.html.de
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>prefork - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-MPM prefork</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/prefork.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/prefork.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/prefork.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Implementiert einen im Voraus forkenden Webserver ohne
- Thread-Unterstützung</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Modulbezeichner:</a></th><td>mpm_prefork_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Quelltext-Datei:</a></th><td>prefork.c</td></tr></table>
-<h3>Zusammenfassung</h3>
-
- <p>Dieses Multi-Processing-Modul (MPM) implementiert einen
- im Voraus forkenden Webserver ohne Thread-Unterstützung, der Anfragen
- auf ähnliche Weise behandelt wie der Apache 1.3. Es ist für
- Angebote geeignet, die aus Kompatibilitätsgründen mit
- nicht-Thread-sicheren Bibliotheken Threading vermeiden müssen.
- Es ist außerdem das geeignetste MPM, um jede Anfrage isoliert
- zu bearbeiten, so dass Probleme mit einem einzelnen Prozess keinen
- anderen beeinflussen.</p>
-
- <p>Das MPM ist stark selbstregulierend, so dass es selten
- notwendig ist, seine Konfigurationseinstellungen zu justieren. Das
- Wichtigste ist, dass <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- gross genug ist, so viele gleichzeitige Anfragen zu bedienen, wie Sie
- erwarten, aber klein genug, um sicherzustellen, dass genug physischer
- Arbeitsspeicher für alle Prozesse vorhanden ist.</p>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxspareservers">MaxSpareServers</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#minspareservers">MinSpareServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Themen</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">Arbeitsweise</a></li>
-</ul><h3>Siehe auch</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
- und Ports</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">Arbeitsweise</a></h2>
- <p>Ein einzelner Steuerprozess ist für den Start von
- Kindprozessen verantwortlich, die auf Verbindungen warten und diese
- bedienen, sobald sie eintreffen. Der Apache versucht immer, mehrere
- <dfn>freie</dfn> oder unbeschäftigte Serverprozesse vorzuhalten,
- die zur Bedienung eingehender Anfragen bereit stehen. Auf diese Weise
- müssen Clients nicht darauf warten, dass neue Kindprozesse
- geforkt werden, bevor ihre Anfrage bearbeitet werden kann.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code> und
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> regulieren,
- wie der Elternprozess Kindprozesse zur Bedienung von Anfragen erstellt.
- Im Allgemeinen ist der Apache sehr selbstregulierend, so dass die meisten
- Angebote die Voreinstellung dieser Direktiven nicht verändern
- müssen. Systeme, die mehr als 256 gleichzeitige Anfragen bedienen
- müssen, können <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> erhöhen, während
- Systeme mit begrenztem Arbeitsspeicher möglicherweise
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> heruntersetzen
- müssen, um den Server vor Flatterverhalten (Arbeitsspeicherinhalte auf
- Platte auslagern - und zurück) zu schützen. Weitere
- Informationen zur Feinabstimmung der Prozesserstellung sind in den
- <a href="../misc/perf-tuning.html">Performance-Hinweisen</a> zu
- finden.</p>
-
- <p>Währen der Elternprozess unter Unix normalerweise als
- <code>root</code> gestartet wird, um sich an Port 80 binden zu können,
- werden die Kindprozesse unter einem weniger privilegierten Benutzer
- gestartet. Die Direktiven <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>
- und <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> werden dazu
- verwendet, die Privilegien der Apache-Kindprozesse festzulegen. Die
- Kindprozesse müssen in der Lage sein, alle Inhalte zu lesen, die
- sie ausliefern sollen, sollten darüber hinaus jedoch so wenig wie
- möglich Rechte besitzen.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- bestimmt, wie häufig der Server Prozesse erneuert, indem er alte
- beendet und neue startet.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a>-<a name="maxspareservers" id="maxspareservers">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Maximale Anzahl der unbeschäftigten Kindprozesse des
- Servers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxSpareServers <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>MaxSpareServers 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>prefork</td></tr>
-</table>
- <p>Die Direktive <code class="directive">MaxSpareServers</code> bestimmt das
- gewünschte Maximum an <em>unbeschäftigten</em>
- Kindprozessen des Servers. Ein unbeschäftiger Prozess ist einer, der
- keine Anfrage bedient. Wenn mehr als <code class="directive">MaxSpareServers</code>
- Prozesse unbeschäftigt sind, wird der Elternprozess die
- überschüssigen Prozesse beenden.</p>
-
- <p>Eine Feineinstellung dieses Parameters sollte nur bei sehr
- beschäftigten Angeboten notwendig sein. Es ist nahezu immer eine
- schlechte Idee, den Parameter auf einen hohen Wert zu setzen. Wenn Sie
- versuchen, den Wert niedriger als <code class="directive"><a href="#minspareservers">MinSpareServers</a></code> zu setzen, wird der Apache
- ihn automatisch auf <code class="directive"><a href="#minspareservers">MinSpareServers</a></code> + 1 korrigieren.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#minspareservers">MinSpareServers</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MinSpareServers" id="MinSpareServers">MinSpareServers</a>-<a name="minspareservers" id="minspareservers">Direktive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Beschreibung:</a></th><td>Minimale Anzahl der unbeschäftigten Kindprozesse des
- Servers</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MinSpareServers <var>Anzahl</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Voreinstellung:</a></th><td><code>MinSpareServers 5</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Kontext:</a></th><td>Serverkonfiguration</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>prefork</td></tr>
-</table>
- <p>Die Direktive <code class="directive">MinSpareServers</code> bestimmt das
- gewünschte Minimum der <em>unbeschäftigten</em>
- Kindprozesse des Servers. Ein unbeschäftigter Prozess ist einer, der
- keine Anfrage bedient. Wenn weniger als
- <code class="directive">MinSpareServers</code> Prozesse unbeschäftigt sind,
- dann erstellt der Elternprozess neue mit einer maximalen Rate von 1
- pro Sekunde.</p>
-
- <p>Die Feineinstellung des Parameters sollte nur bei sehr
- beschäftigten Angeboten notwendig sein. Es ist nahezu immer eine
- schlechte ide, den Parameter auf einen hohen Wert zu setzen.</p>
-
-<h3>Siehe auch</h3>
-<ul>
-<li><code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/prefork.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/prefork.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/prefork.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/prefork.html.en b/docs/manual/mod/prefork.html.en
deleted file mode 100644
index 7ede763bec..0000000000
--- a/docs/manual/mod/prefork.html.en
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>prefork - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM prefork</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/prefork.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/prefork.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Implements a non-threaded, pre-forking web server</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_prefork_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>prefork.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This Multi-Processing Module (MPM) implements a non-threaded,
- pre-forking web server that handles requests in a manner similar
- to Apache 1.3. It is appropriate for sites that need to avoid
- threading for compatibility with non-thread-safe libraries. It
- is also the best MPM for isolating each request, so that a problem
- with a single request will not affect any other.</p>
-
- <p>This MPM is very self-regulating, so it is rarely necessary to
- adjust its configuration directives. Most important is that
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> be big enough to
- handle as many simultaneous requests as you expect to receive, but
- small enough to assure that there is enough physical RAM for all
- processes.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxspareservers">MaxSpareServers</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#minspareservers">MinSpareServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">How it Works</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
- <p>A single control process is responsible for launching child
- processes which listen for connections and serve them when they
- arrive. Apache always tries to maintain several <dfn>spare</dfn>
- or idle server processes, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- child processes to be forked before their requests can be
- served.</p>
-
- <p>The <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code>, and
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> regulate how
- the parent process creates children to serve requests. In general,
- Apache is very self-regulating, so most sites do not need to
- adjust these directives from their default values. Sites which
- need to serve more than 256 simultaneous requests may need to
- increase <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>,
- while sites with limited memory may need to decrease <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> to keep the server from
- thrashing (swapping memory to disk and back). More information
- about tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
- documentation.</p>
-
- <p>While the parent process is usually started as <code>root</code>
- under Unix in order to bind to port 80, the child processes are
- launched by Apache as a less-privileged user. The <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> directives are used to set
- the privileges of the Apache child processes. The child processes
- must be able to read all the content that will be served, but
- should have as few privileges beyond that as possible.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- controls how frequently the server recycles processes by killing
- old ones and launching new ones.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers" id="maxspareservers">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of idle child server processes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MaxSpareServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MaxSpareServers 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>prefork</td></tr>
-</table>
- <p>The <code class="directive">MaxSpareServers</code> directive sets the
- desired maximum number of <em>idle</em> child server processes. An
- idle process is one which is not handling a request. If there are
- more than <code class="directive">MaxSpareServers</code> idle, then the
- parent process will kill off the excess processes.</p>
-
- <p>Tuning of this parameter should only be necessary on very
- busy sites. Setting this parameter to a large number is almost
- always a bad idea. If you are trying to set the value lower than
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>, Apache
- will automatically adjust it to <code class="directive">MinSpareServers</code><code> + 1</code>.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#minspareservers">MinSpareServers</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MinSpareServers" id="MinSpareServers">MinSpareServers</a> <a name="minspareservers" id="minspareservers">Directive</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Minimum number of idle child server processes</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>MinSpareServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>MinSpareServers 5</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
-<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>prefork</td></tr>
-</table>
- <p>The <code class="directive">MinSpareServers</code> directive sets the
- desired minimum number of <em>idle</em> child server processes. An
- idle process is one which is not handling a request. If there are
- fewer than <code class="directive">MinSpareServers</code> idle, then the parent
- process creates new children at a maximum rate of 1 per second.</p>
-
- <p>Tuning of this parameter should only be necessary on very
- busy sites. Setting this parameter to a large number is almost
- always a bad idea.</p>
-
-<h3>See also</h3>
-<ul>
-<li><code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/prefork.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/prefork.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/prefork.html.ja.euc-jp b/docs/manual/mod/prefork.html.ja.euc-jp
deleted file mode 100644
index 8dc5c297bb..0000000000
--- a/docs/manual/mod/prefork.html.ja.euc-jp
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>prefork - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM prefork</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/prefork.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/prefork.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥¹¥ì¥Ã¥É¤ò»È¤ï¤º¡¢Àè¹Ô¤·¤Æ fork ¤ò¹Ô¤Ê¤¦¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¼ÂÁõ
-</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>mpm_prefork_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>prefork.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM) ¤Ï¡¢
- Unix ¾å¤Ç¤Î Apache 1.3 ¤Î¥Ç¥Õ¥©¥ë¥È¤ÎµóÆ°¤ÈÈó¾ï¤Ë¤è¤¯»÷¤¿ÊýË¡¤Ç
- ¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤¹¤ë¡¢¥¹¥ì¥Ã¥É¤ò»È¤ï¤º¡¢Àè¹Ô¤·¤Æ fork ¤ò¹Ô¤Ê¤¦
- ¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
- ¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ç¤Ê¤¤¥é¥¤¥Ö¥é¥ê¤È¤Î¸ß´¹À­¤ò¤È¤ë¤¿¤á¤Ë¡¢
- ¥¹¥ì¥Ã¥É¤òÈò¤±¤ëɬÍפΤ¢¤ë¥µ¥¤¥È¤Ç¤Ï¡¢¤³¤Î¥â¥¸¥å¡¼¥ë¤Î»ÈÍѤ¬Å¬ÀڤǤ·¤ç¤¦¡£
- ¤¢¤ë¥ê¥¯¥¨¥¹¥È¤ÇȯÀ¸¤·¤¿ÌäÂ꤬¾¤Î¥ê¥¯¥¨¥¹¥È¤Ë±Æ¶Á¤·¤Ê¤¤¤è¤¦¤Ë¡¢
- ¸Ä¡¹¤Î¥ê¥¯¥¨¥¹¥È¤òñΥ¤¹¤ë¤Î¤Ë¤â¡¢ºÇŬ¤Ê MPM ¤Ç¤¹¡£</p>
-
- <p>¤³¤Î MPM ¤ÏÈó¾ï¤Ë¼«Î§Åª¤Ê¤Î¤Ç¡¢¤³¤Î MPM ¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- Ä´À°¤¹¤ëɬÍפϤۤȤó¤É¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤â¤Ã¤È¤â½ÅÍפʤ³¤È¤Ï¡¢
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- ¤¬¡¢Í½ÁÛ¤µ¤ì¤ëƱ»þ¥ê¥¯¥¨¥¹¥È¿ô¤ò½½Ê¬°·¤¨¤ë¤°¤é¤¤¤ÏÂ礭¤¤¤±¤ì¤É¤â¡¢
- Á´¥×¥í¥»¥¹¤Ë½½Ê¬¤ÊʪÍý¥á¥â¥ê¤¬³Î¼Â¤Ë¹Ô¤­ÅϤëÄøÅ٤ˤϾ®¤µ¤¤Ãͤˤ¹¤ë¡¢
- ¤È¤¤¤¦¤³¤È¤Ç¤¹¡£</p>
-
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#maxspareservers">MaxSpareServers</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#minspareservers">MinSpareServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">Æ°ºîÊýË¡</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Apache
-¤¬»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÀßÄê</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">Æ°ºîÊýË¡</a></h2>
- <p>°ì¤Ä¤Î¥³¥ó¥È¥í¡¼¥ë¥×¥í¥»¥¹¤¬¡¢
- ¥³¥Í¥¯¥·¥ç¥ó¤ËÂФ·¤Æ listen ¤·¤Æ¡¢¤·¤«¤ë¤Ù¤­»þ¤Ë±þÅú¤¹¤ë
- »Ò¥×¥í¥»¥¹¤òµ¯Æ°¤·¤Þ¤¹¡£Apache ¤Ï¾ï¤Ë´ö¤Ä¤«¤Î<dfn>¥¹¥Ú¥¢</dfn>
- ¤«¥¢¥¤¥É¥ë¤Ê¥µ¡¼¥Ð¥×¥í¥»¥¹¤ò°Ý»ý¤·¤Æ¤¤¤Æ¡¢¤½¤ì¤é¤ÏÆþ¤Ã¤Æ¤­¤¿
- ¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤Ç¤­¤ë¤è¤¦¤ËÂÔµ¡¤·¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Ë¤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤¬±þÅú¤µ¤ì¤ëÁ°¤Ë¡¢
- ¿·¤·¤¤»Ò¥×¥í¥»¥¹¤¬ fork ¤µ¤ì¤ë¤Î¤òÂÔ¤¿¤Ê¤¯¤Æ¤â¤è¤¤¤è¤¦¤Ë
- ¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¿Æ¥×¥í¥»¥¹¤¬¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤Î»Ò¥×¥í¥»¥¹¤ò
- ¤É¤Î¤è¤¦¤ËÀ¸À®¤¹¤ë¤«¤Ï¡¢
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>,
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code>,
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- ¤ÇÄ´À°¤·¤Þ¤¹¡£°ìÈÌŪ¤Ë¡¢Apache ¤ÏÈó¾ï¤Ë¼«Î§Åª¤Ê¤Î¤Ç¡¢
- ÂçÄñ¤Î¥µ¥¤¥È¤Ç¤Ï¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥Ç¥Õ¥©¥ë¥ÈÃͤ«¤éÄ´À°¤¹¤ë
- ɬÍפϤʤ¤¤Ç¤·¤ç¤¦¡£
- Ʊ»þ¤Ë 256 ¤òĶ¤¨¤ë¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤·¤Ê¤¤¤È¤¤¤±¤Ê¤¤¥µ¥¤¥È¤Ç¤Ï¡¢
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- ¤òÁý¤ä¤¹É¬Íפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
- °ìÊý¡¢¥á¥â¥ê¤Î¸Â¤é¤ì¤Æ¤¤¤ë¥µ¥¤¥È¤Ç¤Ï¡¢¥¹¥é¥Ã¥·¥ó¥°
- (¥á¥â¥ê¤È¥Ç¥£¥¹¥¯´Ö¤Ç²¿Å٤⥹¥ï¥Ã¥×) ¤¬µ¯¤³¤ë¤Î¤òËɤ°¤¿¤á¤Ë
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- ¤ò¸º¤é¤¹É¬Íפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£¥×¥í¥»¥¹À¸À®¤Î¥Á¥å¡¼¥Ë¥ó¥°¤Ë´Ø¤¹¤ë
- ¾Ü¤·¤¤¾ðÊó¤Ï¡¢<a href="../misc/perf-tuning.html">À­Ç½¤Ë´Ø¤¹¤ë¥Ò¥ó¥È</a>
- ¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Ä̾ï Unix ¤Ç¤Ï¿Æ¥×¥í¥»¥¹¤Ï 80 È֥ݡ¼¥È¤Ë¥Ð¥¤¥ó¥É¤¹¤ë¤¿¤á¤Ë
- <code>root</code> ¤Çµ¯Æ°¤µ¤ì¤Þ¤¹¤¬¡¢»Ò¥×¥í¥»¥¹¤ä¥¹¥ì¥Ã¥É¤Ï
- ¤â¤Ã¤ÈÄ㤤¸¢¸Â¤Î¥æ¡¼¥¶¤Ç Apache ¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤Þ¤¹¡£
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> ¤È
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- Apache ¤Î»Ò¥×¥í¥»¥¹¤Î¸¢¸Â¤òÀßÄꤹ¤ë¤Î¤ËÍѤ¤¤é¤ì¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¥³¥ó¥Æ¥ó¥ÄÁ´¤Æ¤òÆɤá¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¤¬¡¢
- ²Äǽ¤Ê¸Â¤êɬÍ׺Ǿ®¸Â¤Î¸¢¸Â¤Î¤ß¤ò»ý¤Ã¤Æ¤¤¤ë¤è¤¦¤Ë¤¹¤ë¤Ù¤­¤Ç¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- ¤Ï¡¢¸Å¤¤¥×¥í¥»¥¹¤òÄä»ß¤·¤Æ¿·¤·¤¤¥×¥í¥»¥¹¤òµ¯Æ°¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢
- ¤É¤ÎÄøÅÙ¤ÎÉÑÅ٤ǥµ¡¼¥Ð¤¬¥×¥í¥»¥¹¤ò¥ê¥µ¥¤¥¯¥ë¤¹¤ë¤«¤òÀ©¸æ¤·¤Þ¤¹¡£</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MaxSpareServers" id="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers" id="maxspareservers">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¢¥¤¥É¥ë¤Ê»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤ÎºÇÂç¸Ä¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MaxSpareServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>MaxSpareServers 10</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>prefork</td></tr>
-</table>
- <p><code class="directive">MaxSpareServers</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <em>¥¢¥¤¥É¥ë¤Ê</em>»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î´õ˾ºÇÂç¸Ä¿ô¤òÀßÄꤷ¤Þ¤¹¡£
- ¥¢¥¤¥É¥ë¥×¥í¥»¥¹¤È¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤Ê¤¤¥×¥í¥»¥¹¤Ç¤¹¡£
- <code class="directive">MaxSpareServers</code> ¤è¤ê¤â¿¤¤¿ô¤¬¥¢¥¤¥É¥ë¤Ç¤¢¤ì¤Ð¡¢
- ¿Æ¥×¥í¥»¥¹¤ÏĶ²á¥×¥í¥»¥¹¤ò kill ¤·¤Þ¤¹¡£</p>
-
- <p>Èó¾ï¤Ëº®¤ó¤Ç¤¤¤ë¥µ¥¤¥È¤Ç¤Î¤ß¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ò¥Á¥å¡¼¥Ë¥ó¥°¤¹¤ë¤Ù¤­¤Ç¤¹¡£
- ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤òÂ礭¤¯¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¡¢ÂçÄñ¤Î¾ì¹ç¤Ï°­¤¤È¯ÁۤǤ¹¡£
- <code class="directive"><a href="#minspareservers">MinSpareServers</a></code>
- ¤è¤ê¤â¾®¤µ¤¤ÃͤËÀßÄꤷ¤¿¾ì¹ç¡¢<code class="directive">MinSpareServers</code>
- <code>+1</code> ¤Ë¼«Æ°Ä´À°¤µ¤ì¤Þ¤¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#minspareservers">MinSpareServers</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="directive-section"><h2><a name="MinSpareServers" id="MinSpareServers">MinSpareServers</a> <a name="minspareservers" id="minspareservers">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-<table class="directive">
-<tr><th><a href="directive-dict.html#Description">ÀâÌÀ:</a></th><td>¥¢¥¤¥É¥ë¤Ê»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤ÎºÇ¾®¸Ä¿ô</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">¹½Ê¸:</a></th><td><code>MinSpareServers <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">¥Ç¥Õ¥©¥ë¥È:</a></th><td><code>MinSpareServers 5</code></td></tr>
-<tr><th><a href="directive-dict.html#Context">¥³¥ó¥Æ¥­¥¹¥È:</a></th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
-<tr><th><a href="directive-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="directive-dict.html#Module">¥â¥¸¥å¡¼¥ë:</a></th><td>prefork</td></tr>
-</table>
- <p><code class="directive">MaxSpareServers</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <em>¥¢¥¤¥É¥ë¤Ê</em>»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î´õ˾ºÇ¾®¸Ä¿ô¤òÀßÄꤷ¤Þ¤¹¡£
- ¥¢¥¤¥É¥ë¥×¥í¥»¥¹¤È¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤ò°·¤Ã¤Æ¤¤¤Ê¤¤¥×¥í¥»¥¹¤Ç¤¹¡£
- <code class="directive">MinSpareServers</code> ¤è¤ê¤â¾¯¤Ê¤¤¿ô¤¬¥¢¥¤¥É¥ë¤Ç¤¢¤ì¤Ð¡¢
- ¿Æ¥×¥í¥»¥¹¤ÏºÇ¹â¤Ç 1 ÉäˤĤ­ 1 ¸Ä¤Î³ä¹ç¤Ç¿·¤·¤¤»Ò¥×¥í¥»¥¹¤òÀ¸À®¤·¤Þ¤¹¡£</p>
-
- <p>Èó¾ï¤Ëº®¤ó¤Ç¤¤¤ë¥µ¥¤¥È¤Ç¤Î¤ß¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ò¥Á¥å¡¼¥Ë¥ó¥°¤¹¤ë¤Ù¤­¤Ç¤¹¡£
- ¤³¤Î¥Ñ¥é¥á¡¼¥¿¤òÂ礭¤¯¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¡¢ÂçÄñ¤Î¾ì¹ç¤Ï°­¤¤È¯ÁۤǤ¹¡£</p>
-
-<h3>»²¾È</h3>
-<ul>
-<li><code class="directive"><a href="#maxspareservers">MaxSpareServers</a></code></li>
-<li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li>
-</ul>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/prefork.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/prefork.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/prefork.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/prefork.xml b/docs/manual/mod/prefork.xml
deleted file mode 100644
index f1089e3235..0000000000
--- a/docs/manual/mod/prefork.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.16 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="prefork.xml.meta">
-
-<name>prefork</name>
-<description>Implements a non-threaded, pre-forking web server</description>
-<status>MPM</status>
-<sourcefile>prefork.c</sourcefile>
-<identifier>mpm_prefork_module</identifier>
-
-<summary>
- <p>This Multi-Processing Module (MPM) implements a non-threaded,
- pre-forking web server that handles requests in a manner similar
- to Apache 1.3. It is appropriate for sites that need to avoid
- threading for compatibility with non-thread-safe libraries. It
- is also the best MPM for isolating each request, so that a problem
- with a single request will not affect any other.</p>
-
- <p>This MPM is very self-regulating, so it is rarely necessary to
- adjust its configuration directives. Most important is that
- <directive module="mpm_common">MaxClients</directive> be big enough to
- handle as many simultaneous requests as you expect to receive, but
- small enough to assure that there is enough physical RAM for all
- processes.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></seealso>
-
-<section id="how-it-works"><title>How it Works</title>
- <p>A single control process is responsible for launching child
- processes which listen for connections and serve them when they
- arrive. Apache always tries to maintain several <dfn>spare</dfn>
- or idle server processes, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- child processes to be forked before their requests can be
- served.</p>
-
- <p>The <directive module="mpm_common">StartServers</directive>,
- <directive module="prefork">MinSpareServers</directive>,
- <directive module="prefork">MaxSpareServers</directive>, and
- <directive module="mpm_common">MaxClients</directive> regulate how
- the parent process creates children to serve requests. In general,
- Apache is very self-regulating, so most sites do not need to
- adjust these directives from their default values. Sites which
- need to serve more than 256 simultaneous requests may need to
- increase <directive module="mpm_common">MaxClients</directive>,
- while sites with limited memory may need to decrease <directive
- module="mpm_common">MaxClients</directive> to keep the server from
- thrashing (swapping memory to disk and back). More information
- about tuning process creation is provided in the <a
- href="../misc/perf-tuning.html">performance hints</a>
- documentation.</p>
-
- <p>While the parent process is usually started as <code>root</code>
- under Unix in order to bind to port 80, the child processes are
- launched by Apache as a less-privileged user. The <directive
- module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive> directives are used to set
- the privileges of the Apache child processes. The child processes
- must be able to read all the content that will be served, but
- should have as few privileges beyond that as possible.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- controls how frequently the server recycles processes by killing
- old ones and launching new ones.</p>
-</section>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareServers</name>
-<description>Maximum number of idle child server processes</description>
-<syntax>MaxSpareServers <var>number</var></syntax>
-<default>MaxSpareServers 10</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MaxSpareServers</directive> directive sets the
- desired maximum number of <em>idle</em> child server processes. An
- idle process is one which is not handling a request. If there are
- more than <directive>MaxSpareServers</directive> idle, then the
- parent process will kill off the excess processes.</p>
-
- <p>Tuning of this parameter should only be necessary on very
- busy sites. Setting this parameter to a large number is almost
- always a bad idea. If you are trying to set the value lower than
- <directive module="prefork">MinSpareServers</directive>, Apache
- will automatically adjust it to <directive
- >MinSpareServers</directive><code> + 1</code>.</p>
-</usage>
-<seealso><directive module="prefork">MinSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareServers</name>
-<description>Minimum number of idle child server processes</description>
-<syntax>MinSpareServers <var>number</var></syntax>
-<default>MinSpareServers 5</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>The <directive>MinSpareServers</directive> directive sets the
- desired minimum number of <em>idle</em> child server processes. An
- idle process is one which is not handling a request. If there are
- fewer than <directive>MinSpareServers</directive> idle, then the parent
- process creates new children at a maximum rate of 1 per second.</p>
-
- <p>Tuning of this parameter should only be necessary on very
- busy sites. Setting this parameter to a large number is almost
- always a bad idea.</p>
-</usage>
-<seealso><directive module="prefork">MaxSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/prefork.xml.de b/docs/manual/mod/prefork.xml.de
deleted file mode 100644
index c08c21e4c6..0000000000
--- a/docs/manual/mod/prefork.xml.de
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.16 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="prefork.xml.meta">
-
-<name>prefork</name>
-<description>Implementiert einen im Voraus forkenden Webserver ohne
- Thread-Unterst&uuml;tzung</description>
-<status>MPM</status>
-<sourcefile>prefork.c</sourcefile>
-<identifier>mpm_prefork_module</identifier>
-
-<summary>
- <p>Dieses Multi-Processing-Modul (MPM) implementiert einen
- im Voraus forkenden Webserver ohne Thread-Unterst&uuml;tzung, der Anfragen
- auf &auml;hnliche Weise behandelt wie der Apache 1.3. Es ist f&uuml;r
- Angebote geeignet, die aus Kompatibilit&auml;tsgr&uuml;nden mit
- nicht-Thread-sicheren Bibliotheken Threading vermeiden m&uuml;ssen.
- Es ist au&szlig;erdem das geeignetste MPM, um jede Anfrage isoliert
- zu bearbeiten, so dass Probleme mit einem einzelnen Prozess keinen
- anderen beeinflussen.</p>
-
- <p>Das MPM ist stark selbstregulierend, so dass es selten
- notwendig ist, seine Konfigurationseinstellungen zu justieren. Das
- Wichtigste ist, dass <directive module="mpm_common">MaxClients</directive>
- gross genug ist, so viele gleichzeitige Anfragen zu bedienen, wie Sie
- erwarten, aber klein genug, um sicherzustellen, dass genug physischer
- Arbeitsspeicher f&uuml;r alle Prozesse vorhanden ist.</p>
-</summary>
-<seealso><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
- und Ports</a></seealso>
-
-<section id="how-it-works"><title>Arbeitsweise</title>
- <p>Ein einzelner Steuerprozess ist f&uuml;r den Start von
- Kindprozessen verantwortlich, die auf Verbindungen warten und diese
- bedienen, sobald sie eintreffen. Der Apache versucht immer, mehrere
- <dfn>freie</dfn> oder unbesch&auml;ftigte Serverprozesse vorzuhalten,
- die zur Bedienung eingehender Anfragen bereit stehen. Auf diese Weise
- m&uuml;ssen Clients nicht darauf warten, dass neue Kindprozesse
- geforkt werden, bevor ihre Anfrage bearbeitet werden kann.</p>
-
- <p><directive module="mpm_common">StartServers</directive>,
- <directive module="prefork">MinSpareServers</directive>,
- <directive module="prefork">MaxSpareServers</directive> und
- <directive module="mpm_common">MaxClients</directive> regulieren,
- wie der Elternprozess Kindprozesse zur Bedienung von Anfragen erstellt.
- Im Allgemeinen ist der Apache sehr selbstregulierend, so dass die meisten
- Angebote die Voreinstellung dieser Direktiven nicht ver&auml;ndern
- m&uuml;ssen. Systeme, die mehr als 256 gleichzeitige Anfragen bedienen
- m&uuml;ssen, k&ouml;nnen <directive
- module="mpm_common">MaxClients</directive> erh&ouml;hen, w&auml;hrend
- Systeme mit begrenztem Arbeitsspeicher m&ouml;glicherweise
- <directive module="mpm_common">MaxClients</directive> heruntersetzen
- m&uuml;ssen, um den Server vor Flatterverhalten (Arbeitsspeicherinhalte auf
- Platte auslagern - und zur&uuml;ck) zu sch&uuml;tzen. Weitere
- Informationen zur Feinabstimmung der Prozesserstellung sind in den
- <a href="../misc/perf-tuning.html">Performance-Hinweisen</a> zu
- finden.</p>
-
- <p>W&auml;hren der Elternprozess unter Unix normalerweise als
- <code>root</code> gestartet wird, um sich an Port 80 binden zu k&ouml;nnen,
- werden die Kindprozesse unter einem weniger privilegierten Benutzer
- gestartet. Die Direktiven <directive module="mpm_common">User</directive>
- und <directive module="mpm_common">Group</directive> werden dazu
- verwendet, die Privilegien der Apache-Kindprozesse festzulegen. Die
- Kindprozesse m&uuml;ssen in der Lage sein, alle Inhalte zu lesen, die
- sie ausliefern sollen, sollten dar&uuml;ber hinaus jedoch so wenig wie
- m&ouml;glich Rechte besitzen.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- bestimmt, wie h&auml;ufig der Server Prozesse erneuert, indem er alte
- beendet und neue startet.</p>
-</section>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareServers</name>
-<description>Maximale Anzahl der unbesch&auml;ftigten Kindprozesse des
- Servers</description>
-<syntax>MaxSpareServers <var>Anzahl</var></syntax>
-<default>MaxSpareServers 10</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>MaxSpareServers</directive> bestimmt das
- gew&uuml;nschte Maximum an <em>unbesch&auml;ftigten</em>
- Kindprozessen des Servers. Ein unbesch&auml;ftiger Prozess ist einer, der
- keine Anfrage bedient. Wenn mehr als <directive>MaxSpareServers</directive>
- Prozesse unbesch&auml;ftigt sind, wird der Elternprozess die
- &uuml;bersch&uuml;ssigen Prozesse beenden.</p>
-
- <p>Eine Feineinstellung dieses Parameters sollte nur bei sehr
- besch&auml;ftigten Angeboten notwendig sein. Es ist nahezu immer eine
- schlechte Idee, den Parameter auf einen hohen Wert zu setzen. Wenn Sie
- versuchen, den Wert niedriger als <directive
- module="prefork">MinSpareServers</directive> zu setzen, wird der Apache
- ihn automatisch auf <directive
- module="prefork">MinSpareServers</directive> + 1 korrigieren.</p>
-</usage>
-<seealso><directive module="prefork">MinSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareServers</name>
-<description>Minimale Anzahl der unbesch&auml;ftigten Kindprozesse des
- Servers</description>
-<syntax>MinSpareServers <var>Anzahl</var></syntax>
-<default>MinSpareServers 5</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Die Direktive <directive>MinSpareServers</directive> bestimmt das
- gew&uuml;nschte Minimum der <em>unbesch&auml;ftigten</em>
- Kindprozesse des Servers. Ein unbesch&auml;ftigter Prozess ist einer, der
- keine Anfrage bedient. Wenn weniger als
- <directive>MinSpareServers</directive> Prozesse unbesch&auml;ftigt sind,
- dann erstellt der Elternprozess neue mit einer maximalen Rate von 1
- pro Sekunde.</p>
-
- <p>Die Feineinstellung des Parameters sollte nur bei sehr
- besch&auml;ftigten Angeboten notwendig sein. Es ist nahezu immer eine
- schlechte ide, den Parameter auf einen hohen Wert zu setzen.</p>
-</usage>
-<seealso><directive module="prefork">MaxSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/prefork.xml.ja b/docs/manual/mod/prefork.xml.ja
deleted file mode 100644
index deb2543dda..0000000000
--- a/docs/manual/mod/prefork.xml.ja
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.16 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="prefork.xml.meta">
-
-<name>prefork</name>
-<description>$B%9%l%C%I$r;H$o$:!"@h9T$7$F(B fork $B$r9T$J$&%&%'%V%5!<%P$r<BAu(B
-</description>
-<status>MPM</status>
-<sourcefile>prefork.c</sourcefile>
-<identifier>mpm_prefork_module</identifier>
-
-<summary>
- <p>$B$3$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM) $B$O!"(B
- Unix $B>e$G$N(B Apache 1.3 $B$N%G%U%)%k%H$N5sF0$HHs>o$K$h$/;w$?J}K!$G(B
- $B%j%/%(%9%H$r=hM}$9$k!"%9%l%C%I$r;H$o$:!"@h9T$7$F(B fork $B$r9T$J$&(B
- $B%&%'%V%5!<%P$r<BAu$7$F$$$^$9!#(B
- $B%9%l%C%I%;!<%U$G$J$$%i%$%V%i%j$H$N8_49@-$r$H$k$?$a$K!"(B
- $B%9%l%C%I$rHr$1$kI,MW$N$"$k%5%$%H$G$O!"$3$N%b%8%e!<%k$N;HMQ$,E,@Z$G$7$g$&!#(B
- $B$"$k%j%/%(%9%H$GH/@8$7$?LdBj$,B>$N%j%/%(%9%H$K1F6A$7$J$$$h$&$K!"(B
- $B8D!9$N%j%/%(%9%H$rC1N%$9$k$N$K$b!":GE,$J(B MPM $B$G$9!#(B</p>
-
- <p>$B$3$N(B MPM $B$OHs>o$K<+N'E*$J$N$G!"$3$N(B MPM $B$N@_Dj%G%#%l%/%F%#%V$r(B
- $BD4@0$9$kI,MW$O$[$H$s$I$J$$$G$7$g$&!#$b$C$H$b=EMW$J$3$H$O!"(B
- <directive module="mpm_common">MaxClients</directive>
- $B$,!"M=A[$5$l$kF1;~%j%/%(%9%H?t$r==J,07$($k$0$i$$$OBg$-$$$1$l$I$b!"(B
- $BA4%W%m%;%9$K==J,$JJ*M}%a%b%j$,3N<B$K9T$-EO$kDxEY$K$O>.$5$$CM$K$9$k!"(B
- $B$H$$$&$3$H$G$9!#(B</p>
-
-</summary>
-<seealso><a href="../bind.html">Apache
-$B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</a></seealso>
-
-<section id="how-it-works"><title>$BF0:nJ}K!(B</title>
- <p>$B0l$D$N%3%s%H%m!<%k%W%m%;%9$,!"(B
- $B%3%M%/%7%g%s$KBP$7$F(B listen $B$7$F!"$7$+$k$Y$-;~$K1~Ez$9$k(B
- $B;R%W%m%;%9$r5/F0$7$^$9!#(BApache $B$O>o$K4v$D$+$N(B<dfn>$B%9%Z%"(B</dfn>
- $B$+%"%$%I%k$J%5!<%P%W%m%;%9$r0];}$7$F$$$F!"$=$l$i$OF~$C$F$-$?(B
- $B%j%/%(%9%H$K1~Ez$G$-$k$h$&$KBT5!$7$F$$$^$9!#(B
- $B$3$N$h$&$K$7$F%/%i%$%"%s%H$O!"%j%/%(%9%H$,1~Ez$5$l$kA0$K!"(B
- $B?7$7$$;R%W%m%;%9$,(B fork $B$5$l$k$N$rBT$?$J$/$F$b$h$$$h$&$K(B
- $B$J$C$F$$$^$9!#(B</p>
-
- <p>$B?F%W%m%;%9$,%j%/%(%9%H$K1~Ez$9$k$N;R%W%m%;%9$r(B
- $B$I$N$h$&$K@8@.$9$k$+$O!"(B
- <directive module="mpm_common">StartServers</directive>,
- <directive module="prefork">MinSpareServers</directive>,
- <directive module="prefork">MaxSpareServers</directive>,
- <directive module="mpm_common">MaxClients</directive>
- $B$GD4@0$7$^$9!#0lHLE*$K!"(BApache $B$OHs>o$K<+N'E*$J$N$G!"(B
- $BBgDq$N%5%$%H$G$O$3$l$i$N%G%#%l%/%F%#%V$r%G%U%)%k%HCM$+$iD4@0$9$k(B
- $BI,MW$O$J$$$G$7$g$&!#(B
- $BF1;~$K(B 256 $B$rD6$($k%j%/%(%9%H$K1~Ez$7$J$$$H$$$1$J$$%5%$%H$G$O!"(B
- <directive module="mpm_common">MaxClients</directive>
- $B$rA}$d$9I,MW$,$"$k$G$7$g$&!#(B
- $B0lJ}!"%a%b%j$N8B$i$l$F$$$k%5%$%H$G$O!"%9%i%C%7%s%0(B
- ($B%a%b%j$H%G%#%9%/4V$G2?EY$b%9%o%C%W(B) $B$,5/$3$k$N$rKI$0$?$a$K(B
- <directive module="mpm_common">MaxClients</directive>
- $B$r8:$i$9I,MW$,$"$k$G$7$g$&!#%W%m%;%9@8@.$N%A%e!<%K%s%0$K4X$9$k(B
- $B>\$7$$>pJs$O!"(B<a
- href="../misc/perf-tuning.html">$B@-G=$K4X$9$k%R%s%H(B</a>
- $B$K$"$j$^$9!#(B</p>
-
- <p>$BDL>o(B Unix $B$G$O?F%W%m%;%9$O(B 80 $BHV%]!<%H$K%P%$%s%I$9$k$?$a$K(B
- <code>root</code> $B$G5/F0$5$l$^$9$,!";R%W%m%;%9$d%9%l%C%I$O(B
- $B$b$C$HDc$$8"8B$N%f!<%6$G(B Apache $B$K$h$C$F5/F0$5$l$^$9!#(B
- <directive module="mpm_common">User</directive> $B$H(B
- <directive module="mpm_common">Group</directive>
- $B%G%#%l%/%F%#%V$O(B
- Apache $B$N;R%W%m%;%9$N8"8B$r@_Dj$9$k$N$KMQ$$$i$l$^$9!#(B
- $B;R%W%m%;%9$O%/%i%$%"%s%H$KAw$k%3%s%F%s%DA4$F$rFI$a$J$$$H$$$1$^$;$s$,!"(B
- $B2DG=$J8B$jI,MW:G>.8B$N8"8B$N$_$r;}$C$F$$$k$h$&$K$9$k$Y$-$G$9!#(B</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- $B$O!"8E$$%W%m%;%9$rDd;_$7$F?7$7$$%W%m%;%9$r5/F0$9$k$3$H$K$h$C$F!"(B
- $B$I$NDxEY$NIQEY$G%5!<%P$,%W%m%;%9$r%j%5%$%/%k$9$k$+$r@)8f$7$^$9!#(B</p>
-</section>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareServers</name>
-<description>$B%"%$%I%k$J;R%5!<%P%W%m%;%9$N:GBg8D?t(B</description>
-<syntax>MaxSpareServers <var>number</var></syntax>
-<default>MaxSpareServers 10</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>MaxSpareServers</directive> $B%G%#%l%/%F%#%V$O!"(B
- <em>$B%"%$%I%k$J(B</em>$B;R%5!<%P%W%m%;%9$N4uK>:GBg8D?t$r@_Dj$7$^$9!#(B
- $B%"%$%I%k%W%m%;%9$H$O!"%j%/%(%9%H$r07$C$F$$$J$$%W%m%;%9$G$9!#(B
- <directive>MaxSpareServers</directive> $B$h$j$bB?$$?t$,%"%$%I%k$G$"$l$P!"(B
- $B?F%W%m%;%9$OD62a%W%m%;%9$r(B kill $B$7$^$9!#(B</p>
-
- <p>$BHs>o$K:.$s$G$$$k%5%$%H$G$N$_!"$3$N%Q%i%a!<%?$r%A%e!<%K%s%0$9$k$Y$-$G$9!#(B
- $B$3$N%Q%i%a!<%?$rBg$-$/$9$k$H$$$&$3$H$O!"BgDq$N>l9g$O0-$$H/A[$G$9!#(B
- <directive module="prefork">MinSpareServers</directive>
- $B$h$j$b>.$5$$CM$K@_Dj$7$?>l9g!"(B<directive>MinSpareServers</directive>
- <code>+1</code> $B$K<+F0D4@0$5$l$^$9!#(B</p>
-</usage>
-<seealso><directive module="prefork">MinSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareServers</name>
-<description>$B%"%$%I%k$J;R%5!<%P%W%m%;%9$N:G>.8D?t(B</description>
-<syntax>MinSpareServers <var>number</var></syntax>
-<default>MinSpareServers 5</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p><directive>MaxSpareServers</directive> $B%G%#%l%/%F%#%V$O!"(B
- <em>$B%"%$%I%k$J(B</em>$B;R%5!<%P%W%m%;%9$N4uK>:G>.8D?t$r@_Dj$7$^$9!#(B
- $B%"%$%I%k%W%m%;%9$H$O!"%j%/%(%9%H$r07$C$F$$$J$$%W%m%;%9$G$9!#(B
- <directive>MinSpareServers</directive> $B$h$j$b>/$J$$?t$,%"%$%I%k$G$"$l$P!"(B
- $B?F%W%m%;%9$O:G9b$G(B 1 $BIC$K$D$-(B 1 $B8D$N3d9g$G?7$7$$;R%W%m%;%9$r@8@.$7$^$9!#(B</p>
-
- <p>$BHs>o$K:.$s$G$$$k%5%$%H$G$N$_!"$3$N%Q%i%a!<%?$r%A%e!<%K%s%0$9$k$Y$-$G$9!#(B
- $B$3$N%Q%i%a!<%?$rBg$-$/$9$k$H$$$&$3$H$O!"BgDq$N>l9g$O0-$$H/A[$G$9!#(B</p>
-</usage>
-<seealso><directive module="prefork">MaxSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/prefork.xml.meta b/docs/manual/mod/prefork.xml.meta
deleted file mode 100644
index ae83abfd34..0000000000
--- a/docs/manual/mod/prefork.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>prefork</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/quickreference.html b/docs/manual/mod/quickreference.html
deleted file mode 100644
index c2795e8fcf..0000000000
--- a/docs/manual/mod/quickreference.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: quickreference.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: quickreference.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: quickreference.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: quickreference.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: quickreference.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mod/quickreference.html.de b/docs/manual/mod/quickreference.html.de
deleted file mode 100644
index a958d10af3..0000000000
--- a/docs/manual/mod/quickreference.html.de
+++ /dev/null
@@ -1,746 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Kurzreferenz der Direktiven - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index">
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="preamble"><h1>Kurzreferenz der Direktiven</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/quickreference.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Die Kurzreferenz der Direktiven zeigt die Verwendung,
- Voreinstellung, den Status und den Kontext aller
- Apache-Konfigurationsanweisungen. Für weitergehende Informationen
- schauen Sie bitte im <a href="directive-dict.html">Verzeichnis der Direktiven</a>.</p>
-
- <p>Die erste Spalte enthält den Namen und die Verwendung.
- Die zweite Spalte zeigt die Voreinstellung der Direktive, sofern
- eine Voreinstellung existiert. Wenn die Voreinstellung zu breit
- für die Anzeige ist, werden die ersten Buchstaben angegeben,
- gefolgt von einem "+".</p>
-
- <p>Die dritte und vierte Spalte geben den Kontext an, in dem die
- Direktive erlaubt ist, sowie den Status der Direktive entsprechend
- der Legende.</p>
- </div>
-<div id="directive-ref"><table id="legend">
-<tr><td class="letters"><span><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></span></td>
-<td><table>
-
- <tr><th>s</th><td>Serverkonfiguration</td></tr>
- <tr><th>v</th><td>Virtual&nbsp;Host</td></tr>
- <tr><th>d</th><td>Verzeichnis</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table></td>
-<td><table>
-
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Basis</td></tr>
- <tr><th>E</th><td>Erweiterung</td></tr>
- <tr><th>X</th><td>experimentell</td></tr>
- </table></td></tr>
-</table>
-<table class="qref">
-<tr><td><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex Default|<var>Methode</var></a></td><td> Default </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Vom Apache verwendete Methode zur Serialisierung mehrerer
- Kindprozesse, die Anfragen an Netzwerk-Sockets entgegennehmen.</td></tr>
-<tr class="odd"><td><a href="core.html#acceptpathinfo">AcceptPathInfo On|Off|Default</a></td><td> Default </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Ressourcen lassen angehängte Pfadangaben zu</td></tr>
-<tr><td><a href="core.html#accessfilename">AccessFileName <var>Dateiname</var> [<var>Dateiname</var>] ...</a></td><td> .htaccess </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Name der dezentralen Konfigurationsdateien</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#action">Action <var>Aktionsart</var> <var>CGI-Skript</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Aktiviert ein CGI-Skript für einen bestimmten Handler oder
- Content-Type</td></tr>
-<tr><td><a href="mod_autoindex.html#addalt">AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
-icon selected by filename</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate text to display for a file instead of an icon
-selected by MIME-encoding</td></tr>
-<tr><td><a href="mod_autoindex.html#addaltbytype">AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
-icon selected by MIME content-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addcharset">AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the given filename extensions to the specified content
-charset</td></tr>
-<tr><td><a href="core.html#adddefaultcharset">AddDefaultCharset On|Off|<var>Zeichenkodierung</var></a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Standard-Zeichenkodierung für Antworten ohne
-explizit angegebene Zeichenkodierung
-</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#adddescription">AddDescription <var>string file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Description to display for a file</td></tr>
-<tr><td><a href="mod_mime.html#addencoding">AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions to the specified encoding
-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addhandler">AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the filename extensions to the specified
-handler</td></tr>
-<tr><td><a href="mod_autoindex.html#addicon">AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display for a file selected by name</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Icon to display next to files selected by MIME
-content-encoding</td></tr>
-<tr><td><a href="mod_autoindex.html#addiconbytype">AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display next to files selected by MIME
-content-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addinputfilter">AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-client requests</td></tr>
-<tr><td><a href="mod_mime.html#addlanguage">AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extension to the specified content
-language</td></tr>
-<tr class="odd"><td><a href="mod_info.html#addmoduleinfo">AddModuleInfo <var>module-name</var> <var>string</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adds additional information to the module
-information displayed by the server-info handler</td></tr>
-<tr><td><a href="mod_mime.html#addoutputfilter">AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-responses from the server</td></tr>
-<tr class="odd"><td><a href="core.html#addoutputfilterbytype">AddOutputFilterByType <var>Filter</var>[;<var>Filter</var>...]
-<var>MIME-Type</var> [<var>MIME-Type</var>] ...</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">einen Ausgabefilter einem bestimmten MIME-Type
-zuordnen</td></tr>
-<tr><td><a href="mod_mime.html#addtype">AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions onto the specified content
-type</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#alias">Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps URLs to filesystem locations</td></tr>
-<tr><td><a href="mod_alias.html#aliasmatch">AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps URLs to filesystem locations using regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#allow"> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Controls which hosts can access an area of the
-server</td></tr>
-<tr><td><a href="mod_proxy.html#allowconnect">AllowCONNECT <var>port</var> [<var>port</var>] ...</a></td><td> 443 563 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ports that are allowed to <code>CONNECT</code> through the
-proxy</td></tr>
-<tr class="odd"><td><a href="core.html#allowencodedslashes">AllowEncodedSlashes On|Off</a></td><td> Off </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Legt fest, ob kodierte Pfadtrennzeichen in URLs durchgereicht
-werden dürfen</td></tr>
-<tr><td><a href="core.html#allowoverride">AllowOverride All|None|<var>Direktiven-Typ</var>
-[<var>Direktiven-Typ</var>] ...</a></td><td> All </td><td>d</td><td>C</td></tr><tr><td class="descr" colspan="4">Direktiven-Typen, die in <code>.htaccess</code>-Dateien
-erlaubt sind.</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous">Anonymous <var>user</var> [<var>user</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies userIDs that are allowed access without
-password verification</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets whether the password entered will be logged in the
-error log</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies whether blank passwords are allowed</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets whether the userID field may be empty</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether to check the password field for a correctly
-formatted email address</td></tr>
-<tr><td><a href="perchild.html#assignuserid">AssignUserID <var>user-id</var> <var>group-id</var></a></td><td></td><td>v</td><td>M</td></tr><tr><td class="descr" colspan="4">Tie a virtual host to a user and group ID</td></tr>
-<tr class="odd"><td><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization and authentication are passed to
-lower level modules</td></tr>
-<tr><td><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the database file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of a database file containing the list of users and
-passwords for authentication</td></tr>
-<tr><td><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authentication is passed to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm MD5|MD5-sess</a></td><td> MD5 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Selects the algorithm used to calculate the challenge and
-response hashes in digest authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">URIs that are in the same protection space for digest
-authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck On|Off</a></td><td> Off </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables checking of the nonce-count sent by the
-server</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat <var>format</var></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Determines how the nonce is generated</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime <var>seconds</var></a></td><td> 300 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">How long the server nonce is valid</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop none|auth|auth-int [auth|auth-int]</a></td><td> auth </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the quality-of-protection to use in digest
-authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize <var>size</var></a></td><td> 1000 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The amount of shared memory to allocate for keeping track
-of clients</td></tr>
-<tr class="odd"><td><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of a text file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Prevent other authentication modules from
-authenticating the user if this one fails</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN <em>distinguished-name</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Optional DN to use in binding to the LDAP server</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword <em>password</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Password used in conjuction with the bind DN</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig <em>file-path</em></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Language to charset conversion configuration file</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the LDAP server to compare the DNs</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases never|searching|finding|always</a></td><td> Always </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">When will the module de-reference aliases</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapenabled"> AuthLDAPEnabled on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn on or off LDAP authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Allow LDAP authentication to work with MS FrontPage</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute <em>attribute</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">LDAP attributes used to check for group membership</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl <em>url</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL specifying the LDAP search parameters</td></tr>
-<tr><td><a href="core.html#authname">AuthName <var>auth-Bereich</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Autorisierungsbereich zur Verwendung in der
-HTTP-Authentisierung</td></tr>
-<tr class="odd"><td><a href="core.html#authtype">AuthType Basic|Digest</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Art der Authentisierung</td></tr>
-<tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
-passwords for authentication</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization is passed to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets environment variables conditional on HTTP User-Agent
-</td></tr>
-<tr><td><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables conditional on User-Agent without
-respect to case</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire <var>seconds</var></a></td><td> 3600 (one hour) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The default duration to cache a document when no expiry date is specified.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachedirlength">CacheDirLength <var>length</var></a></td><td> 2 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The number of characters in subdirectory names</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels <var>levels</var></a></td><td> 3 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The number of levels of subdirectories in the
-cache.</td></tr>
-<tr><td><a href="mod_cache.html#cachedisable">CacheDisable <var> url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Disable caching of specified URLs</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheenable">CacheEnable <var>cache_type</var> <var>url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enable caching of specified URLs using a specified storage
-manager</td></tr>
-<tr><td><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck On|Off</a></td><td> On </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Indicates if the cache observes Expires dates when seeking
-files</td></tr>
-<tr class="odd"><td><a href="mod_file_cache.html#cachefile">CacheFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Cache a list of file handles at startup time</td></tr>
-<tr><td><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion <var>Percentage</var></a></td><td> 60 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Percentage of document served, after which the server
-will complete caching the file even if the request is cancelled.</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcclean">CacheGcClean <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unchanged cached files that match a
-URL</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily <var>time</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The recurring time each day for garbage collection to be run.
-(24 hour clock)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval <var>hours</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The interval between garbage collection attempts.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage <var>KBytes</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum kilobytes of memory used for garbage
-collection</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unreferenced cached files that match a
-URL.</td></tr>
-<tr><td><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Ignore the fact that the client requested the content not be
-cached.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Ignore the fact that a response has no Last Modified
-header.</td></tr>
-<tr><td><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor <var>float</var></a></td><td> 0.1 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The factor used to compute an expiry date based on the
-LastModified date.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire <var>seconds</var></a></td><td> 86400 (one day) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum time in seconds to cache a document</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize <var>bytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize <var>bytes</var></a></td><td> 1 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr><td><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs On|Off</a></td><td> Off </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Allows content-negotiated documents to be
-cached by proxy servers</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheroot">CacheRoot <var>directory</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The directory root under which cache files are
-stored</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachesize">CacheSize <var>KBytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum amount of disk space that will be used by the
-cache in KBytes</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin <var>?</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum time margin to cache a document</td></tr>
-<tr><td><a href="core.html#cgimapextension">CGIMapExtension <var>CGI-Pfad</var> <var>.Endung</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technik zur Bestimmung des Interpreters für
-CGI-Skripte</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetdefault">CharsetDefault <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Charset to translate into</td></tr>
-<tr><td><a href="mod_charset_lite.html#charsetoptions">CharsetOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoImpl +</td><td>svdh</td><td>X</td></tr><tr><td class="descr" colspan="4">Configures charset translation behavior</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Source charset of files</td></tr>
-<tr><td><a href="mod_speling.html#checkspelling">CheckSpelling on|off</a></td><td> Off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables the spelling
-module</td></tr>
-<tr class="odd"><td><a href="perchild.html#childperuserid">ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Specify user ID and group ID for a number of child
-processes</td></tr>
-<tr><td><a href="core.html#contentdigest">ContentDigest On|Off</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Aktiviert die Generierung von <code>Content-MD5</code>
-HTTP-Response-Headern</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiedomain">CookieDomain <em>domain</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The domain to which the tracking cookie applies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookieexpires">CookieExpires <em>expiry-period</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Expiry time for the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#cookielog">CookieLog <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename for the logging of cookies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookiename">CookieName <em>token</em></a></td><td> Apache </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiestyle">CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></a></td><td> Netscape </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Format of the cookie header field</td></tr>
-<tr><td><a href="mod_usertrack.html#cookietracking">CookieTracking on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables tracking cookie</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory <var>Verzeichnis</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Verzeichnis, in das der Apache zu wechseln versucht, bevor er
- einen Hauptspeicherauszug erstellt</td></tr>
-<tr><td><a href="mod_log_config.html#customlog">CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets filename and format of log file</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#dav" id="D" name="D">Dav On|Off|<var>provider-name</var></a></td><td> Off </td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable WebDAV HTTP methods</td></tr>
-<tr><td><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity on|off</a></td><td> off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow PROPFIND, Depth: Infinity requests</td></tr>
-<tr class="odd"><td><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB <var>file-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr><td><a href="mod_dav_fs.html#davlockdb">DavLockDB <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#davmintimeout">DavMinTimeout <var>seconds</var></a></td><td> 0 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Minimum amount of time the server holds a lock on
-a DAV resource</td></tr>
-<tr><td><a href="mod_autoindex.html#defaulticon">DefaultIcon <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display for files when no specific icon is
-configured</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets all files in the given scope to the specified
-language</td></tr>
-<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-Type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">MIME-Content-Type, der gesendet wird, wenn der Server den Typ
-nicht auf andere Weise ermitteln kann.</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Fragment size to be compressed at one time by zlib</td></tr>
-<tr><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much compression do we apply to the output</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote [<var>type</var>] <var>notename</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Places the compression ratio in a note for logging</td></tr>
-<tr><td><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel <var>value</var></a></td><td> 9 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much memory should be used by zlib for compression</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize <var>value</var></a></td><td> 15 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Zlib compression window size</td></tr>
-<tr><td><a href="mod_authz_host.html#deny"> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Controls which hosts are denied access to the
-server</td></tr>
-<tr class="odd"><td><a href="core.html#directory">&lt;Directory <var>Verzeichnispfad</var>&gt;
-... &lt;/Directory&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Umschließt eine Gruppe von Direktiven, die nur auf
-das genannte Verzeichnis des Dateisystems und Unterverzeichnisse angewendet
-werden</td></tr>
-<tr><td><a href="mod_dir.html#directoryindex">DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</a></td><td> index.html </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">List of resources to look for when the client requests
-a directory</td></tr>
-<tr class="odd"><td><a href="core.html#directorymatch">&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Umschließt eine Gruppe von Direktiven, die auf
- Verzeichnisse des Dateisystems und ihre Unterverzeichnisse abgebildet
- werden, welche auf einen regulären Ausdruck passen</td></tr>
-<tr><td><a href="mod_dir.html#directoryslash">DirectorySlash On|Off</a></td><td> On </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Toggle trailing slash redirects on or off</td></tr>
-<tr class="odd"><td><a href="core.html#documentroot">DocumentRoot <var>Verzeichnis</var></a></td><td> /usr/local/apache/h +</td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Verzeichnis, welches den Haupt-Dokumentenbaum bildet, der im
-Web sichtbar ist.</td></tr>
-<tr><td><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook On|Off</a></td><td> Off </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Aktiviert einen Hook, der nach einem Absturz noch
-Ausnahmefehler behandeln lassen kann</td></tr>
-<tr class="odd"><td><a href="core.html#enablemmap">EnableMMAP On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Verwende Memory-Mapping, um Dateien während der
-Auslieferung zu lesen</td></tr>
-<tr><td><a href="core.html#enablesendfile">EnableSendfile On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Verwende die sendfile-Unterstützung des Kernels, um
-Dateien an den Client auszuliefern</td></tr>
-<tr class="odd"><td><a href="core.html#errordocument">ErrorDocument <var>Fehlercode</var> <var>Dokument</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Das, was der Server im Fehlerfall an den Client
-zurückgibt</td></tr>
-<tr><td><a href="core.html#errorlog"> ErrorLog <var>Dateiname</var>|syslog[:<var>facility</var>]</a></td><td> logs/error_log (Uni +</td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Ablageort, an dem der Server Fehler protokolliert</td></tr>
-<tr class="odd"><td><a href="mod_example.html#example">Example</a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Demonstration directive to illustrate the Apache module
-API</td></tr>
-<tr><td><a href="mod_expires.html#expiresactive">ExpiresActive On|Off</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables generation of <code>Expires</code>
-headers</td></tr>
-<tr class="odd"><td><a href="mod_expires.html#expiresbytype">ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Value of the <code>Expires</code> header configured
-by MIME type</td></tr>
-<tr><td><a href="mod_expires.html#expiresdefault">ExpiresDefault <var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Default algorithm for calculating expiration time</td></tr>
-<tr class="odd"><td><a href="mod_status.html#extendedstatus">ExtendedStatus On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Keep track of extended status information for each
-request</td></tr>
-<tr><td><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine <var>filtername</var> <var>parameters</var></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Define an external filter</td></tr>
-<tr class="odd"><td><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoLogS +</td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> options</td></tr>
-<tr><td><a href="core.html#fileetag" id="F" name="F">FileETag <var>Komponente</var> ...</a></td><td> INode MTime Size </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Dateiattribute, die zur Erstellung des HTTP-Response-Headers
-ETag verwendet werden</td></tr>
-<tr class="odd"><td><a href="core.html#files">&lt;Files <var>Dateiname</var>&gt; ... &lt;/Files&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enthält Direktiven, die sich nur auf passende Dateinamen
-beziehen</td></tr>
-<tr><td><a href="core.html#filesmatch">&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Enthält Direktiven, die für Dateinamen gelten, die
- auf einen regulären Ausdruck passen</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not
-found</td></tr>
-<tr><td><a href="core.html#forcetype">ForceType <var>MIME-Type</var>|None</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Erzwingt die Auslieferung aller passendenden Dateien mit dem
-angegebenen MIME-Content-Type</td></tr>
-<tr class="odd"><td><a href="mod_log_forensic.html#forensiclog">ForensicLog <var>filename</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename of the forensic log</td></tr>
-<tr><td><a href="mpm_common.html#group" id="G" name="G">Group <var>Unix-Gruppe</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Benutzergruppe, unter welcher der Server Anfragen
- beantwortet</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#header" id="H" name="H">Header [<var>condition</var>] set|append|add|unset|echo
-<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP response headers</td></tr>
-<tr><td><a href="mod_autoindex.html#headername">HeaderName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the top
-of the index listing</td></tr>
-<tr class="odd"><td><a href="core.html#hostnamelookups">HostnameLookups On|Off|Double</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Aktiviert DNS-Lookups auf Client-IP-Adressen</td></tr>
-<tr><td><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck On|Off</a></td><td> Off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables logging of the RFC 1413 identity of the remote
-user</td></tr>
-<tr class="odd"><td><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout <var>seconds</var></a></td><td> 30 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the timeout duration for ident requests</td></tr>
-<tr><td><a href="core.html#ifdefine">&lt;IfDefine [!]<var>Parametername</var>&gt; ...
- &lt;/IfDefine&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Schließt Direktiven ein, die nur ausgeführt werden,
-wenn eine Testbedingung beim Start wahr ist</td></tr>
-<tr class="odd"><td><a href="core.html#ifmodule">&lt;IfModule [!]<var>Modulname</var>|<var>Modulbezeichner</var>&gt;
- ... &lt;/IfModule&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Schließt Direktiven ein, die abhängig vom
-Vorhandensein oder Fehlen eines speziellen Moduls ausgeführt
-werden</td></tr>
-<tr><td><a href="mod_version.html#ifversion">&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">contains version dependent configuration</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapbase">ImapBase map|referer|<var>URL</var></a></td><td> http://servername/ </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Default <code>base</code> for imagemap files</td></tr>
-<tr><td><a href="mod_imap.html#imapdefault">ImapDefault error|nocontent|map|referer|<var>URL</var></a></td><td> nocontent </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapmenu">ImapMenu none|formatted|semiformatted|unformatted</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr><td><a href="core.html#include">Include <var>Dateiname</var>|<var>Verzeichnis</var></a></td><td></td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">Fügt andere Konfigurationsdateien innerhalb der
-Server-Konfigurationsdatei ein</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexignore">IndexIgnore <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Adds to the list of files to hide when listing
-a directory</td></tr>
-<tr><td><a href="mod_autoindex.html#indexoptions">IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Various configuration settings for directory
-indexing</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</a></td><td> Ascending Name </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the default ordering of the directory index</td></tr>
-<tr><td><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Adds a CSS stylesheet to the directory index</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</td></tr>
-<tr><td><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery on|off</a></td><td> on </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapicachefile">ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ISAPI .dll files to be loaded at startup</td></tr>
-<tr><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr class="odd"><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Aktiviert persistente HTTP-Verbindungen</td></tr>
-<tr><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>Sekunden</var></a></td><td> 15 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Zeitspanne, die der Server während persistenter Verbindungen
-auf nachfolgende Anfragen wartet</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The precendence of language variants for cases where
-the client does not express a preference</td></tr>
-<tr><td><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum number of entries in the primary LDAP cache</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that cached items remain valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that entries in the operation cache remain
-valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the shared memory chache file</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize <var>bytes</var></a></td><td> 102400 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Size in bytes of the shared-memory cache</td></tr>
-<tr><td><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the file containing the trusted Certificate Authority certificate or database</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType <var>type</var></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies the type of the Certificate Authority file</td></tr>
-<tr><td><a href="core.html#limit">&lt;Limit <var>Methode</var> [<var>Methode</var>] ... &gt; ...
- &lt;/Limit&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Beschränkt die eingeschlossenen Zugriffskontrollen auf
-bestimmte HTTP-Methoden</td></tr>
-<tr class="odd"><td><a href="core.html#limitexcept">&lt;LimitExcept <var>Methode</var> [<var>Methode</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Beschränkt Zugriffskontrollen auf alle HTTP-Methoden
-außer den genannten</td></tr>
-<tr><td><a href="core.html#limitinternalrecursion">LimitInternalRecursion <var>Zahl</var> [<var>Zahl</var>]</a></td><td> 10 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Bestimmt die maximale Anzahl interner Umleitungen und
- verschachtelter Unteranfragen</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestbody">LimitRequestBody <var>Bytes</var></a></td><td> 0 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt die Gesamtgröße des vom Client gesendeten
-HTTP-Request-Body</td></tr>
-<tr><td><a href="core.html#limitrequestfields">LimitRequestFields <var>Anzahl</var></a></td><td> 100 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Begrenzt die Anzahl der HTTP-Request-Header, die vom Client
-entgegengenommen werden</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestfieldsize">LimitRequestFieldsize <var>Bytes</var></a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt die Länge des vom Client gesendeten
-HTTP-Request-Headers</td></tr>
-<tr><td><a href="core.html#limitrequestline">LimitRequestLine <var>Bytes</var></a></td><td> 8190 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Begrenzt die Länge der vom Client entgegengenommenen
-HTTP-Anfragezeile</td></tr>
-<tr class="odd"><td><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody <var>Bytes</var></a></td><td> 1000000 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt die Größe eines XML-basierten
-Request-Bodys</td></tr>
-<tr><td><a href="mpm_common.html#listen">Listen [<var>IP-Addresse</var>:]<var>Port</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">IP-Adressen und Ports, an denen der Server lauscht</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#listenbacklog">ListenBacklog <var>backlog</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximale Länge der Warteschlange schwebender
- Verbindungen</td></tr>
-<tr><td><a href="mod_so.html#loadfile">LoadFile <em>filename</em> [<em>filename</em>] ...</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Link in the named object file or library</td></tr>
-<tr class="odd"><td><a href="mod_so.html#loadmodule">LoadModule <em>module filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Links in the object file or library, and adds to the list
-of active modules</td></tr>
-<tr><td><a href="core.html#location">&lt;Location
- <var>URL-Pfad</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Wendet die enthaltenen Direktiven nur auf die entsprechenden
-URLs an</td></tr>
-<tr class="odd"><td><a href="core.html#locationmatch">&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Wendet die enthaltenen Direktiven nur auf URLs an, die auf
-reguläre Ausdrücke passen</td></tr>
-<tr><td><a href="mpm_common.html#lockfile">LockFile <var>Dateiname</var></a></td><td> logs/accept.lock </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Ablageort der Lock-Datei für die Serialisierung von
-entgegengenommenen Anfragen</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#logformat">LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</a></td><td> "%h %l %u %t \"%r\" +</td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Describes a format for use in a log file</td></tr>
-<tr><td><a href="core.html#loglevel">LogLevel <var>Level</var></a></td><td> warn </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Steuert die Ausführlichkeit des Fehlerprotokolls</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximale Anzahl der Kindprozesse, die zur Bedienung von Anfragen
- gestartet wird</td></tr>
-<tr><td><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests <var>Anzahl</var></a></td><td> 100 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Anzahl der Anfragen, die bei einer persistenten Verbindung
-zulässig sind</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxmemfree">MaxMemFree <var>KBytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximale Menge des Arbeitsspeichers, den die
- Haupt-Zuteilungsroutine verwalten darf, ohne <code>free()</code>
- aufzurufen</td></tr>
-<tr><td><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild <var>number</var></a></td><td> 10000 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Obergrenze für die Anzahl von Anfragen, die ein einzelner
- Kindprozess während seines Lebens bearbeitet</td></tr>
-<tr class="odd"><td><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread <var>Anzahl</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Die maximale Anzahl von Anfragen, die ein einzelner Thread
- während seiner Lebensdauer bedient.</td></tr>
-<tr><td><a href="prefork.html#maxspareservers">MaxSpareServers <var>Anzahl</var></a></td><td> 10 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Maximale Anzahl der unbeschäftigten Kindprozesse des
- Servers</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxsparethreads">MaxSpareThreads <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximale Anzahl unbeschäftigter Threads</td></tr>
-<tr><td><a href="mpm_netware.html#maxthreads">MaxThreads <var>number</var></a></td><td> 2048 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Set the maximum number of worker threads</td></tr>
-<tr class="odd"><td><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild <var>number</var></a></td><td> 64 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of threads per child process</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount <var>value</var></a></td><td> 1009 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum number of objects allowed to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize <var>bytes</var></a></td><td> 10000 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum size (in bytes) of a document allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachesize">MCacheSize <var>KBytes</var></a></td><td> 100 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum amount of memory used by the cache in
-KBytes</td></tr>
-<tr><td><a href="mod_cern_meta.html#metadir">MetaDir <var>directory</var></a></td><td> .web </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the directory to find CERN-style meta information
-files</td></tr>
-<tr class="odd"><td><a href="mod_cern_meta.html#metafiles">MetaFiles on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Activates CERN meta-file processing</td></tr>
-<tr><td><a href="mod_cern_meta.html#metasuffix">MetaSuffix <var>suffix</var></a></td><td> .meta </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">File name suffix for the file containg CERN-style
-meta information</td></tr>
-<tr class="odd"><td><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr><td><a href="prefork.html#minspareservers">MinSpareServers <var>Anzahl</var></a></td><td> 5 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Minimale Anzahl der unbeschäftigten Kindprozesse des
- Servers</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#minsparethreads">MinSpareThreads <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Minimale Anzahl unbeschäftigter Threads, die zur
- Bedienung von Anfragespitzen zur Verfügung stehen</td></tr>
-<tr><td><a href="mod_file_cache.html#mmapfile">MMapFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Map a list of files into memory at startup time</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo On|Off</a></td><td> Off </td><td>d</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Tells <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> to treat <code>path_info</code>
-components as part of the filename</td></tr>
-<tr><td><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</a></td><td> NegotiatedOnly </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">The types of files that will be included when searching for
-a matching file with MultiViews</td></tr>
-<tr class="odd"><td><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost <var>Adresse</var>[:<var>Port</var>]</a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Bestimmt eine IP-Adresse für den Betrieb namensbasierter
-virtueller Hosts</td></tr>
-<tr><td><a href="mod_proxy.html#noproxy">NoProxy <var>host</var> [<var>host</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr class="odd"><td><a href="perchild.html#numservers">NumServers <var>number</var></a></td><td> 2 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Total number of children alive at the same time</td></tr>
-<tr><td><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">List of additional client certificates</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Allows a connection to be upgraded to an SSL connection upon request</td></tr>
-<tr><td><a href="core.html#options" id="O" name="O">Options
- [+|-]<var>Option</var> [[+|-]<var>Option</var>] ...</a></td><td> All </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Definiert, welche Eigenschaften oder Funktionen in einem
-bestimmten Verzeichnis verfügbar sind</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Controls the default access state and the order in which
-<code class="directive">Allow</code> and <code class="directive">Deny</code> are
-evaluated.</td></tr>
-<tr><td><a href="mod_env.html#passenv" id="P" name="P">PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Passes environment variables from the shell</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#pidfile">PidFile <var>Dateiname</var></a></td><td> logs/httpd.pid </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Datei, in welcher der Server die Prozess-ID des Daemons
-ablegt</td></tr>
-<tr><td><a href="mod_echo.html#protocolecho">ProtocolEcho On|Off</a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn the echo server on or off</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxy">&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxybadheader">ProxyBadHeader IsError|Ignore|StartBody</a></td><td> IsError </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determines how to handle bad header lines in a
-response</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyblock">ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Words, hosts, or domains that are banned from being
-proxied</td></tr>
-<tr><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
-header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
-of the index listing</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
-of the current URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
-a different URL</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr class="odd"><td><a href="core.html#require">Require <var>Name</var> [<var>Name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Wählt die authentisierten Benutzer aus, die auf eine
-Ressource zugreifen können</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
-</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
-synchronization</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
-processing</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
-engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td> MaxRedirects=10 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>Sekunden</var>|max [<var>Sekunden</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt den CPU-Verbrauch von Prozessen, die von
-Apache-Kindprozessen gestartet wurden</td></tr>
-<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>Bytes</var>|max [<var>Bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Begrenzt den Speicherverbrauch von Prozessen, die von
-Apache-Kindprozessen gestartet wurden</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>Zahl</var>|max [<var>Zahl</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt die Anzahl der Prozesse, die von Prozessen gestartet
-werden können, der ihrerseits von Apache-Kinprozessen gestartet
-wurden</td></tr>
-<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Zusammenspiel von rechnerbasierter Zugriffskontrolle und
-Benutzerauthentisierung</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>Dateipfad</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Ablageort der Datei, die zur Speicherung von Daten zur
- Koordinierung der Kindprozesse verwendet wird</td></tr>
-<tr><td><a href="mod_actions.html#script">Script <var>Methode</var> <var>CGI-Skript</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Aktiviert ein CGI-Skript für eine bestimmte
- Anfragemethode.</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
-target as a CGI script</td></tr>
-<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</td></tr>
-<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Methode zur Ermittlung des Interpreters von
-CGI-Skripten</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</td></tr>
-<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The name of the socket to use for communication with
-the cgi daemon</td></tr>
-<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>Bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Größe des TCP-Puffers</td></tr>
-<tr><td><a href="core.html#serveradmin">ServerAdmin <var>E-Mail-Adresse</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">E-Mail-Adresse, die der Server in Fehlermeldungen einfügt,
-welche an den Client gesendet werden</td></tr>
-<tr class="odd"><td><a href="core.html#serveralias">ServerAlias <var>Hostname</var> [<var>Hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Alternativer Name für einen Host, der verwendet wird, wenn
-Anfragen einem namensbasierten virtuellen Host zugeordnet werden</td></tr>
-<tr><td><a href="mpm_common.html#serverlimit">ServerLimit <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Obergrenze für die konfigurierbare Anzahl von
- Prozessen</td></tr>
-<tr class="odd"><td><a href="core.html#servername">ServerName
-<var>voll-qualifizierter-Domainname</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Rechnername und Port, die der Server dazu verwendet, sich
-selbst zu identifizieren</td></tr>
-<tr><td><a href="core.html#serverpath">ServerPath <var>URL-Pfad</var></a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">Veralteter URL-Pfad für einen namensbasierten
-virtuellen Host, auf den von einem inkompatiblen Browser zugegriffen
-wird</td></tr>
-<tr class="odd"><td><a href="core.html#serverroot">ServerRoot <var>Verzeichnis</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Basisverzeichnis der Serverinstallation</td></tr>
-<tr><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Konfiguriert die Fußzeile von servergenerierten
-Dokumenten</td></tr>
-<tr class="odd"><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Konfiguriert den HTTP-Response-Header
-<code>Server</code></td></tr>
-<tr><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets environment variables based on attributes of the request
-</td></tr>
-<tr><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables based on attributes of the request
-without respect to case</td></tr>
-<tr class="odd"><td><a href="core.html#sethandler">SetHandler <var>Handlername</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Erzwingt die Verarbeitung aller passenden Dateien durch
-einen Handler</td></tr>
-<tr><td><a href="core.html#setinputfilter">SetInputFilter <var>Filter</var>[;<var>Filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Bestimmt die Filter, die Client-Anfragen und POST-Eingaben
-verarbeiten</td></tr>
-<tr class="odd"><td><a href="core.html#setoutputfilter">SetOutputFilter <var>Filter</var>[;<var>Filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Bestimmt die Filter, die Antworten des Servers verarbeiten</td></tr>
-<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
-error</td></tr>
-<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
-displayed</td></tr>
-<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
-keys</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-proxy handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
-source</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
-boolean expression is true</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
-HTTP request</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
-Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
-in the Session Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Anzahl der Kindprozesse des Servers, die beim Start erstellt
- werden</td></tr>
-<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Anzahl der Threads, die beim Start erstellt werden</td></tr>
-<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
-<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Bestimmt die Obergrenze der konfigurierbaren Anzahl von Threads
- pro Kindprozess</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Anzahl der Threads, die mit jedem Kindprozess gestartet
- werden</td></tr>
-<tr><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Die Größe des Stacks in Bytes, der von Threads
-verwendet wird, die Client-Verbindungen bearbeiten.</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>Sekunden</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Zeitspanne, die der Server auf verschiedene Ereignisse wartet,
-bevor er die Anfrage abbricht</td></tr>
-<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Specify location of a log file</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The location of the <code>mime.types</code> file</td></tr>
-<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes variables from the environment</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|DNS</a></td><td> On </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Bestimmt, wie der Server seinen eigenen Namen und Port
-ermittelt</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>Unix-User-ID</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Die Benutzerkennung, unter welcher der Server Anfragen
- beantwortet</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the user-specific directories</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
- <var>Adresse</var>[:<var>Port</var>] [<var>Adresse</var>[:<var>Port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Enthält Direktiven, die nur auf bestimmte Hostnamen oder
-IP-Adressen angewendet werden</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Für die Annahme von Netzwerkverbindungen wird accept() anstelle von AcceptEx() verwendet</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
-set</td></tr>
-</table></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/quickreference.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/quickreference.html.en b/docs/manual/mod/quickreference.html.en
deleted file mode 100644
index 8690f11deb..0000000000
--- a/docs/manual/mod/quickreference.html.en
+++ /dev/null
@@ -1,727 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Directive Quick Reference - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index">
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="preamble"><h1>Directive Quick Reference</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The directive quick reference shows the usage, default, status,
- and context of each Apache configuration directive. For more
- information about each of these, see the <a href="directive-dict.html">Directive Dictionary</a>.</p>
-
- <p>The first column gives the directive name and usage. The second
- columns shows the default value of the directive, if a default exists.
- If the default is too large to display, the first characters will be
- followed by "+".</p>
-
- <p>The third and fourth columns list the contexts where the directive
- is allowed and the status of the directive according to the legend
- tables below.</p>
- </div>
-<div id="directive-ref"><table id="legend">
-<tr><td class="letters"><span><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></span></td>
-<td><table>
-
- <tr><th>s</th><td>server&nbsp;config</td></tr>
- <tr><th>v</th><td>virtual&nbsp;host</td></tr>
- <tr><th>d</th><td>directory</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table></td>
-<td><table>
-
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extension</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table></td></tr>
-</table>
-<table class="qref">
-<tr><td><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex Default|<var>method</var></a></td><td> Default </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Method that Apache uses to serialize multiple children
-accepting requests on network sockets</td></tr>
-<tr class="odd"><td><a href="core.html#acceptpathinfo">AcceptPathInfo On|Off|Default</a></td><td> Default </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Resources accept trailing pathname information</td></tr>
-<tr><td><a href="core.html#accessfilename">AccessFileName <var>filename</var> [<var>filename</var>] ...</a></td><td> .htaccess </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Name of the distributed configuration file</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#action">Action <var>action-type</var> <var>cgi-script</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular handler or
-content-type</td></tr>
-<tr><td><a href="mod_autoindex.html#addalt">AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
-icon selected by filename</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate text to display for a file instead of an icon
-selected by MIME-encoding</td></tr>
-<tr><td><a href="mod_autoindex.html#addaltbytype">AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
-icon selected by MIME content-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addcharset">AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the given filename extensions to the specified content
-charset</td></tr>
-<tr><td><a href="core.html#adddefaultcharset">AddDefaultCharset On|Off|<var>charset</var></a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Default character set to be added for a
-response without an explicit character set</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#adddescription">AddDescription <var>string file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Description to display for a file</td></tr>
-<tr><td><a href="mod_mime.html#addencoding">AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions to the specified encoding
-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addhandler">AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the filename extensions to the specified
-handler</td></tr>
-<tr><td><a href="mod_autoindex.html#addicon">AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display for a file selected by name</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Icon to display next to files selected by MIME
-content-encoding</td></tr>
-<tr><td><a href="mod_autoindex.html#addiconbytype">AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display next to files selected by MIME
-content-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addinputfilter">AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-client requests</td></tr>
-<tr><td><a href="mod_mime.html#addlanguage">AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extension to the specified content
-language</td></tr>
-<tr class="odd"><td><a href="mod_info.html#addmoduleinfo">AddModuleInfo <var>module-name</var> <var>string</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adds additional information to the module
-information displayed by the server-info handler</td></tr>
-<tr><td><a href="mod_mime.html#addoutputfilter">AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-responses from the server</td></tr>
-<tr class="odd"><td><a href="core.html#addoutputfilterbytype">AddOutputFilterByType <var>filter</var>[;<var>filter</var>...]
-<var>MIME-type</var> [<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">assigns an output filter to a particular MIME-type</td></tr>
-<tr><td><a href="mod_mime.html#addtype">AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions onto the specified content
-type</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#alias">Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps URLs to filesystem locations</td></tr>
-<tr><td><a href="mod_alias.html#aliasmatch">AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps URLs to filesystem locations using regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#allow"> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Controls which hosts can access an area of the
-server</td></tr>
-<tr><td><a href="mod_proxy.html#allowconnect">AllowCONNECT <var>port</var> [<var>port</var>] ...</a></td><td> 443 563 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ports that are allowed to <code>CONNECT</code> through the
-proxy</td></tr>
-<tr class="odd"><td><a href="core.html#allowencodedslashes">AllowEncodedSlashes On|Off</a></td><td> Off </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines whether encoded path separators in URLs are allowed to
-be passed through</td></tr>
-<tr><td><a href="core.html#allowoverride">AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</a></td><td> All </td><td>d</td><td>C</td></tr><tr><td class="descr" colspan="4">Types of directives that are allowed in
-<code>.htaccess</code> files</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous">Anonymous <var>user</var> [<var>user</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies userIDs that are allowed access without
-password verification</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets whether the password entered will be logged in the
-error log</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies whether blank passwords are allowed</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets whether the userID field may be empty</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether to check the password field for a correctly
-formatted email address</td></tr>
-<tr><td><a href="perchild.html#assignuserid">AssignUserID <var>user-id</var> <var>group-id</var></a></td><td></td><td>v</td><td>M</td></tr><tr><td class="descr" colspan="4">Tie a virtual host to a user and group ID</td></tr>
-<tr class="odd"><td><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization and authentication are passed to
-lower level modules</td></tr>
-<tr><td><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the database file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of a database file containing the list of users and
-passwords for authentication</td></tr>
-<tr><td><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authentication is passed to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm MD5|MD5-sess</a></td><td> MD5 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Selects the algorithm used to calculate the challenge and
-response hashes in digest authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">URIs that are in the same protection space for digest
-authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck On|Off</a></td><td> Off </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables checking of the nonce-count sent by the
-server</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat <var>format</var></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Determines how the nonce is generated</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime <var>seconds</var></a></td><td> 300 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">How long the server nonce is valid</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop none|auth|auth-int [auth|auth-int]</a></td><td> auth </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the quality-of-protection to use in digest
-authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize <var>size</var></a></td><td> 1000 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The amount of shared memory to allocate for keeping track
-of clients</td></tr>
-<tr class="odd"><td><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of a text file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Prevent other authentication modules from
-authenticating the user if this one fails</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN <em>distinguished-name</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Optional DN to use in binding to the LDAP server</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword <em>password</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Password used in conjuction with the bind DN</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig <em>file-path</em></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Language to charset conversion configuration file</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the LDAP server to compare the DNs</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases never|searching|finding|always</a></td><td> Always </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">When will the module de-reference aliases</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapenabled"> AuthLDAPEnabled on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn on or off LDAP authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Allow LDAP authentication to work with MS FrontPage</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute <em>attribute</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">LDAP attributes used to check for group membership</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl <em>url</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL specifying the LDAP search parameters</td></tr>
-<tr><td><a href="core.html#authname">AuthName <var>auth-domain</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Authorization realm for use in HTTP
-authentication</td></tr>
-<tr class="odd"><td><a href="core.html#authtype">AuthType Basic|Digest</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
-<tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
-passwords for authentication</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization is passed to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets environment variables conditional on HTTP User-Agent
-</td></tr>
-<tr><td><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables conditional on User-Agent without
-respect to case</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire <var>seconds</var></a></td><td> 3600 (one hour) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The default duration to cache a document when no expiry date is specified.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachedirlength">CacheDirLength <var>length</var></a></td><td> 2 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The number of characters in subdirectory names</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels <var>levels</var></a></td><td> 3 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The number of levels of subdirectories in the
-cache.</td></tr>
-<tr><td><a href="mod_cache.html#cachedisable">CacheDisable <var> url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Disable caching of specified URLs</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheenable">CacheEnable <var>cache_type</var> <var>url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enable caching of specified URLs using a specified storage
-manager</td></tr>
-<tr><td><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck On|Off</a></td><td> On </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Indicates if the cache observes Expires dates when seeking
-files</td></tr>
-<tr class="odd"><td><a href="mod_file_cache.html#cachefile">CacheFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Cache a list of file handles at startup time</td></tr>
-<tr><td><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion <var>Percentage</var></a></td><td> 60 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Percentage of document served, after which the server
-will complete caching the file even if the request is cancelled.</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcclean">CacheGcClean <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unchanged cached files that match a
-URL</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily <var>time</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The recurring time each day for garbage collection to be run.
-(24 hour clock)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval <var>hours</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The interval between garbage collection attempts.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage <var>KBytes</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum kilobytes of memory used for garbage
-collection</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unreferenced cached files that match a
-URL.</td></tr>
-<tr><td><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Ignore the fact that the client requested the content not be
-cached.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Ignore the fact that a response has no Last Modified
-header.</td></tr>
-<tr><td><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor <var>float</var></a></td><td> 0.1 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The factor used to compute an expiry date based on the
-LastModified date.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire <var>seconds</var></a></td><td> 86400 (one day) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum time in seconds to cache a document</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize <var>bytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize <var>bytes</var></a></td><td> 1 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr><td><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs On|Off</a></td><td> Off </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Allows content-negotiated documents to be
-cached by proxy servers</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheroot">CacheRoot <var>directory</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The directory root under which cache files are
-stored</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachesize">CacheSize <var>KBytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum amount of disk space that will be used by the
-cache in KBytes</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin <var>?</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum time margin to cache a document</td></tr>
-<tr><td><a href="core.html#cgimapextension">CGIMapExtension <var>cgi-path</var> <var>.extension</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetdefault">CharsetDefault <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Charset to translate into</td></tr>
-<tr><td><a href="mod_charset_lite.html#charsetoptions">CharsetOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoImpl +</td><td>svdh</td><td>X</td></tr><tr><td class="descr" colspan="4">Configures charset translation behavior</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Source charset of files</td></tr>
-<tr><td><a href="mod_speling.html#checkspelling">CheckSpelling on|off</a></td><td> Off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables the spelling
-module</td></tr>
-<tr class="odd"><td><a href="perchild.html#childperuserid">ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Specify user ID and group ID for a number of child
-processes</td></tr>
-<tr><td><a href="core.html#contentdigest">ContentDigest On|Off</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Enables the generation of <code>Content-MD5</code> HTTP Response
-headers</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiedomain">CookieDomain <em>domain</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The domain to which the tracking cookie applies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookieexpires">CookieExpires <em>expiry-period</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Expiry time for the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#cookielog">CookieLog <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename for the logging of cookies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookiename">CookieName <em>token</em></a></td><td> Apache </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiestyle">CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></a></td><td> Netscape </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Format of the cookie header field</td></tr>
-<tr><td><a href="mod_usertrack.html#cookietracking">CookieTracking on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables tracking cookie</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory <var>directory</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Directory where Apache attempts to
-switch before dumping core</td></tr>
-<tr><td><a href="mod_log_config.html#customlog">CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets filename and format of log file</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#dav" id="D" name="D">Dav On|Off|<var>provider-name</var></a></td><td> Off </td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable WebDAV HTTP methods</td></tr>
-<tr><td><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity on|off</a></td><td> off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow PROPFIND, Depth: Infinity requests</td></tr>
-<tr class="odd"><td><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB <var>file-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr><td><a href="mod_dav_fs.html#davlockdb">DavLockDB <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#davmintimeout">DavMinTimeout <var>seconds</var></a></td><td> 0 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Minimum amount of time the server holds a lock on
-a DAV resource</td></tr>
-<tr><td><a href="mod_autoindex.html#defaulticon">DefaultIcon <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display for files when no specific icon is
-configured</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets all files in the given scope to the specified
-language</td></tr>
-<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">MIME content-type that will be sent if the
-server cannot determine a type in any other way</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Fragment size to be compressed at one time by zlib</td></tr>
-<tr><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much compression do we apply to the output</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote [<var>type</var>] <var>notename</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Places the compression ratio in a note for logging</td></tr>
-<tr><td><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel <var>value</var></a></td><td> 9 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much memory should be used by zlib for compression</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize <var>value</var></a></td><td> 15 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Zlib compression window size</td></tr>
-<tr><td><a href="mod_authz_host.html#deny"> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Controls which hosts are denied access to the
-server</td></tr>
-<tr class="odd"><td><a href="core.html#directory">&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</td></tr>
-<tr><td><a href="mod_dir.html#directoryindex">DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</a></td><td> index.html </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">List of resources to look for when the client requests
-a directory</td></tr>
-<tr class="odd"><td><a href="core.html#directorymatch">&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose directives that apply to
-file-system directories matching a regular expression and their
-subdirectories</td></tr>
-<tr><td><a href="mod_dir.html#directoryslash">DirectorySlash On|Off</a></td><td> On </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Toggle trailing slash redirects on or off</td></tr>
-<tr class="odd"><td><a href="core.html#documentroot">DocumentRoot <var>directory-path</var></a></td><td> /usr/local/apache/h +</td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Directory that forms the main document tree visible
-from the web</td></tr>
-<tr><td><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook On|Off</a></td><td> Off </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Enables a hook that runs exception handlers
-after a crash</td></tr>
-<tr class="odd"><td><a href="core.html#enablemmap">EnableMMAP On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Use memory-mapping to read files during delivery</td></tr>
-<tr><td><a href="core.html#enablesendfile">EnableSendfile On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Use the kernel sendfile support to deliver files to the client</td></tr>
-<tr class="odd"><td><a href="core.html#errordocument">ErrorDocument <var>error-code</var> <var>document</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">What the server will return to the client
-in case of an error</td></tr>
-<tr><td><a href="core.html#errorlog"> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</a></td><td> logs/error_log (Uni +</td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Location where the server will log errors</td></tr>
-<tr class="odd"><td><a href="mod_example.html#example">Example</a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Demonstration directive to illustrate the Apache module
-API</td></tr>
-<tr><td><a href="mod_expires.html#expiresactive">ExpiresActive On|Off</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables generation of <code>Expires</code>
-headers</td></tr>
-<tr class="odd"><td><a href="mod_expires.html#expiresbytype">ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Value of the <code>Expires</code> header configured
-by MIME type</td></tr>
-<tr><td><a href="mod_expires.html#expiresdefault">ExpiresDefault <var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Default algorithm for calculating expiration time</td></tr>
-<tr class="odd"><td><a href="mod_status.html#extendedstatus">ExtendedStatus On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Keep track of extended status information for each
-request</td></tr>
-<tr><td><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine <var>filtername</var> <var>parameters</var></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Define an external filter</td></tr>
-<tr class="odd"><td><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoLogS +</td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> options</td></tr>
-<tr><td><a href="core.html#fileetag" id="F" name="F">FileETag <var>component</var> ...</a></td><td> INode MTime Size </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">File attributes used to create the ETag
-HTTP response header</td></tr>
-<tr class="odd"><td><a href="core.html#files">&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Contains directives that apply to matched
-filenames</td></tr>
-<tr><td><a href="core.html#filesmatch">&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply to regular-expression matched
-filenames</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not
-found</td></tr>
-<tr><td><a href="core.html#forcetype">ForceType <var>MIME-type</var>|None</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Forces all matching files to be served with the specified
-MIME content-type</td></tr>
-<tr class="odd"><td><a href="mod_log_forensic.html#forensiclog">ForensicLog <var>filename</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename of the forensic log</td></tr>
-<tr><td><a href="mpm_common.html#group" id="G" name="G">Group <var>unix-group</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Group under which the server will answer
-requests</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#header" id="H" name="H">Header [<var>condition</var>] set|append|add|unset|echo
-<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP response headers</td></tr>
-<tr><td><a href="mod_autoindex.html#headername">HeaderName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the top
-of the index listing</td></tr>
-<tr class="odd"><td><a href="core.html#hostnamelookups">HostnameLookups On|Off|Double</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enables DNS lookups on client IP addresses</td></tr>
-<tr><td><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck On|Off</a></td><td> Off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables logging of the RFC 1413 identity of the remote
-user</td></tr>
-<tr class="odd"><td><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout <var>seconds</var></a></td><td> 30 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the timeout duration for ident requests</td></tr>
-<tr><td><a href="core.html#ifdefine">&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Encloses directives that will be processed only
-if a test is true at startup</td></tr>
-<tr class="odd"><td><a href="core.html#ifmodule">&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Encloses directives that are processed conditional on the
-presence or absence of a specific module</td></tr>
-<tr><td><a href="mod_version.html#ifversion">&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">contains version dependent configuration</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapbase">ImapBase map|referer|<var>URL</var></a></td><td> http://servername/ </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Default <code>base</code> for imagemap files</td></tr>
-<tr><td><a href="mod_imap.html#imapdefault">ImapDefault error|nocontent|map|referer|<var>URL</var></a></td><td> nocontent </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapmenu">ImapMenu none|formatted|semiformatted|unformatted</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr><td><a href="core.html#include">Include <var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">Includes other configuration files from within
-the server configuration files</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexignore">IndexIgnore <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Adds to the list of files to hide when listing
-a directory</td></tr>
-<tr><td><a href="mod_autoindex.html#indexoptions">IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Various configuration settings for directory
-indexing</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</a></td><td> Ascending Name </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the default ordering of the directory index</td></tr>
-<tr><td><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Adds a CSS stylesheet to the directory index</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</td></tr>
-<tr><td><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery on|off</a></td><td> on </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapicachefile">ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ISAPI .dll files to be loaded at startup</td></tr>
-<tr><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr class="odd"><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enables HTTP persistent connections</td></tr>
-<tr><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>seconds</var></a></td><td> 15 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for subsequent
-requests on a persistent connection</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The precendence of language variants for cases where
-the client does not express a preference</td></tr>
-<tr><td><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum number of entries in the primary LDAP cache</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that cached items remain valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that entries in the operation cache remain
-valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the shared memory chache file</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize <var>bytes</var></a></td><td> 102400 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Size in bytes of the shared-memory cache</td></tr>
-<tr><td><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the file containing the trusted Certificate Authority certificate or database</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType <var>type</var></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies the type of the Certificate Authority file</td></tr>
-<tr><td><a href="core.html#limit">&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Restrict enclosed access controls to only certain HTTP
-methods</td></tr>
-<tr class="odd"><td><a href="core.html#limitexcept">&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Restrict access controls to all HTTP methods
-except the named ones</td></tr>
-<tr><td><a href="core.html#limitinternalrecursion">LimitInternalRecursion <var>number</var> [<var>number</var>]</a></td><td> 10 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Determine maximum number of internal redirects and nested
-subrequests</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestbody">LimitRequestBody <var>bytes</var></a></td><td> 0 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Restricts the total size of the HTTP request body sent
-from the client</td></tr>
-<tr><td><a href="core.html#limitrequestfields">LimitRequestFields <var>number</var></a></td><td> 100 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of HTTP request header fields that
-will be accepted from the client</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestfieldsize">LimitRequestFieldsize <var>bytes</var></a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the size of the HTTP request header allowed from the
-client</td></tr>
-<tr><td><a href="core.html#limitrequestline">LimitRequestLine <var>bytes</var></a></td><td> 8190 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Limit the size of the HTTP request line that will be accepted
-from the client</td></tr>
-<tr class="odd"><td><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody <var>bytes</var></a></td><td> 1000000 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the size of an XML-based request body</td></tr>
-<tr><td><a href="mpm_common.html#listen">Listen [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">IP addresses and ports that the server
-listens to</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#listenbacklog">ListenBacklog <var>backlog</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum length of the queue of pending connections</td></tr>
-<tr><td><a href="mod_so.html#loadfile">LoadFile <em>filename</em> [<em>filename</em>] ...</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Link in the named object file or library</td></tr>
-<tr class="odd"><td><a href="mod_so.html#loadmodule">LoadModule <em>module filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Links in the object file or library, and adds to the list
-of active modules</td></tr>
-<tr><td><a href="core.html#location">&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Applies the enclosed directives only to matching
-URLs</td></tr>
-<tr class="odd"><td><a href="core.html#locationmatch">&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Applies the enclosed directives only to regular-expression
-matching URLs</td></tr>
-<tr><td><a href="mpm_common.html#lockfile">LockFile <var>filename</var></a></td><td> logs/accept.lock </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the accept serialization lock file</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#logformat">LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</a></td><td> "%h %l %u %t \"%r\" +</td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Describes a format for use in a log file</td></tr>
-<tr><td><a href="core.html#loglevel">LogLevel <var>level</var></a></td><td> warn </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Controls the verbosity of the ErrorLog</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of child processes that will be created
-to serve requests</td></tr>
-<tr><td><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests <var>number</var></a></td><td> 100 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Number of requests allowed on a persistent
-connection</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxmemfree">MaxMemFree <var>KBytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of memory that the main allocator is allowed
-to hold without calling <code>free()</code></td></tr>
-<tr><td><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild <var>number</var></a></td><td> 10000 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Limit on the number of requests that an individual child server
-will handle during its life</td></tr>
-<tr class="odd"><td><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread <var>number</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Limit on the number of requests that an individual thread
-will handle during its life</td></tr>
-<tr><td><a href="prefork.html#maxspareservers">MaxSpareServers <var>number</var></a></td><td> 10 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Maximum number of idle child server processes</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxsparethreads">MaxSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of idle threads</td></tr>
-<tr><td><a href="mpm_netware.html#maxthreads">MaxThreads <var>number</var></a></td><td> 2048 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Set the maximum number of worker threads</td></tr>
-<tr class="odd"><td><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild <var>number</var></a></td><td> 64 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of threads per child process</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount <var>value</var></a></td><td> 1009 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum number of objects allowed to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize <var>bytes</var></a></td><td> 10000 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum size (in bytes) of a document allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachesize">MCacheSize <var>KBytes</var></a></td><td> 100 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum amount of memory used by the cache in
-KBytes</td></tr>
-<tr><td><a href="mod_cern_meta.html#metadir">MetaDir <var>directory</var></a></td><td> .web </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the directory to find CERN-style meta information
-files</td></tr>
-<tr class="odd"><td><a href="mod_cern_meta.html#metafiles">MetaFiles on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Activates CERN meta-file processing</td></tr>
-<tr><td><a href="mod_cern_meta.html#metasuffix">MetaSuffix <var>suffix</var></a></td><td> .meta </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">File name suffix for the file containg CERN-style
-meta information</td></tr>
-<tr class="odd"><td><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr><td><a href="prefork.html#minspareservers">MinSpareServers <var>number</var></a></td><td> 5 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Minimum number of idle child server processes</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#minsparethreads">MinSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Minimum number of idle threads available to handle request
-spikes</td></tr>
-<tr><td><a href="mod_file_cache.html#mmapfile">MMapFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Map a list of files into memory at startup time</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo On|Off</a></td><td> Off </td><td>d</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Tells <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> to treat <code>path_info</code>
-components as part of the filename</td></tr>
-<tr><td><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</a></td><td> NegotiatedOnly </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">The types of files that will be included when searching for
-a matching file with MultiViews</td></tr>
-<tr class="odd"><td><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost <var>addr</var>[:<var>port</var>]</a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Designates an IP address for name-virtual
-hosting</td></tr>
-<tr><td><a href="mod_proxy.html#noproxy">NoProxy <var>host</var> [<var>host</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr class="odd"><td><a href="perchild.html#numservers">NumServers <var>number</var></a></td><td> 2 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Total number of children alive at the same time</td></tr>
-<tr><td><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">List of additional client certificates</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Allows a connection to be upgraded to an SSL connection upon request</td></tr>
-<tr><td><a href="core.html#options" id="O" name="O">Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</a></td><td> All </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures what features are available in a particular
-directory</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Controls the default access state and the order in which
-<code class="directive">Allow</code> and <code class="directive">Deny</code> are
-evaluated.</td></tr>
-<tr><td><a href="mod_env.html#passenv" id="P" name="P">PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Passes environment variables from the shell</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#pidfile">PidFile <var>filename</var></a></td><td> logs/httpd.pid </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">File where the server records the process ID
-of the daemon</td></tr>
-<tr><td><a href="mod_echo.html#protocolecho">ProtocolEcho On|Off</a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn the echo server on or off</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxy">&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxybadheader">ProxyBadHeader IsError|Ignore|StartBody</a></td><td> IsError </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determines how to handle bad header lines in a
-response</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyblock">ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Words, hosts, or domains that are banned from being
-proxied</td></tr>
-<tr><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
-header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
-of the index listing</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
-of the current URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
-a different URL</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
-a resource</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
-</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
-synchronization</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
-processing</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
-engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td> MaxRedirects=10 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
-by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
-by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
-processes launched by Apache children</td></tr>
-<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
-user authentication</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
-the child processes</td></tr>
-<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Activates a CGI script for a particular request
-method.</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
-target as a CGI script</td></tr>
-<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</td></tr>
-<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</td></tr>
-<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The name of the socket to use for communication with
-the cgi daemon</td></tr>
-<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP buffer size</td></tr>
-<tr><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Email address that the server includes in error
-messages sent to the client</td></tr>
-<tr class="odd"><td><a href="core.html#serveralias">ServerAlias <var>hostname</var> [<var>hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate names for a host used when matching requests
-to name-virtual hosts</td></tr>
-<tr><td><a href="mpm_common.html#serverlimit">ServerLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Upper limit on configurable number of processes</td></tr>
-<tr class="odd"><td><a href="core.html#servername">ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Hostname and port that the server uses to identify
-itself</td></tr>
-<tr><td><a href="core.html#serverpath">ServerPath <var>URL-path</var></a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">Legacy URL pathname for a name-based virtual host that
-is accessed by an incompatible browser</td></tr>
-<tr class="odd"><td><a href="core.html#serverroot">ServerRoot <var>directory-path</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Base directory for the server installation</td></tr>
-<tr><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures the footer on server-generated documents</td></tr>
-<tr class="odd"><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the <code>Server</code> HTTP response
-header</td></tr>
-<tr><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets environment variables based on attributes of the request
-</td></tr>
-<tr><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables based on attributes of the request
-without respect to case</td></tr>
-<tr class="odd"><td><a href="core.html#sethandler">SetHandler <var>handler-name</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Forces all matching files to be processed by a
-handler</td></tr>
-<tr><td><a href="core.html#setinputfilter">SetInputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process client requests and POST
-input</td></tr>
-<tr class="odd"><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the filters that will process responses from the
-server</td></tr>
-<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
-error</td></tr>
-<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
-displayed</td></tr>
-<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
-keys</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-proxy handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
-source</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
-boolean expression is true</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
-HTTP request</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
-Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
-in the Session Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
-<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
-<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
-<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
-per child process</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
-<tr><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
-client connections</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for
-certain events before failing a request</td></tr>
-<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Specify location of a log file</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The location of the <code>mime.types</code> file</td></tr>
-<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes variables from the environment</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|DNS</a></td><td> On </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures how the server determines its own name and
-port</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The userid under which the server will answer
-requests</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the user-specific directories</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply only to a specific
-hostname or IP address</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Use accept() rather than AcceptEx() to accept network connections</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
-set</td></tr>
-</table></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/quickreference.html.es b/docs/manual/mod/quickreference.html.es
deleted file mode 100644
index 443965e669..0000000000
--- a/docs/manual/mod/quickreference.html.es
+++ /dev/null
@@ -1,730 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Guía Rápida de Referencia de Directivas - Servidor HTTP Apache</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index">
-<div id="page-header">
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="../">Versión 2.1</a> &gt; <a href="./">Módulos</a></div>
-<div id="preamble"><h1>Guía Rápida de Referencia de Directivas</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>La Guía Rápida de Referencia de Directivas muestra el uso, las
- opciones por defecto, el estado y el contexto de cada directiva de
- configuración de Apache. Para más información sobre cada
- directiva, consulte el <a href="directive-dict.html">Diccionario
- de Directivas</a>.</p>
-
- <p>La primera columna muestra el nombre y el uso de la directiva.
- La segunda columna muestra el valor por defecto de la directiva,
- si existe ese valor por defecto. Si el valor por defecto es
- demasiado largo para mostrarlo, el primer caracter va seguido de
- un signo "+".</p>
-
- <p>La tercera y la cuarta columna listan los contextos en los que
- la directiva puede funcionar y el estado de la directiva de
- acuerdo con las notas que detallan más abajo.</p>
- </div>
-<div id="directive-ref"><table id="legend">
-<tr><td class="letters"><span><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></span></td>
-<td><table>
-
- <tr><th>s</th><td>server&nbsp;config</td></tr>
- <tr><th>v</th><td>virtual&nbsp;host</td></tr>
- <tr><th>d</th><td>directory</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table></td>
-<td><table>
-
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extensión</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table></td></tr>
-</table>
-<table class="qref">
-<tr><td><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex Default|<var>method</var></a></td><td> Default </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Method that Apache uses to serialize multiple children
-accepting requests on network sockets</td></tr>
-<tr class="odd"><td><a href="core.html#acceptpathinfo">AcceptPathInfo On|Off|Default</a></td><td> Default </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Resources accept trailing pathname information</td></tr>
-<tr><td><a href="core.html#accessfilename">AccessFileName <var>filename</var> [<var>filename</var>] ...</a></td><td> .htaccess </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Name of the distributed configuration file</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#action">Action <var>action-type</var> <var>cgi-script</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular handler or
-content-type</td></tr>
-<tr><td><a href="mod_autoindex.html#addalt">AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
-icon selected by filename</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate text to display for a file instead of an icon
-selected by MIME-encoding</td></tr>
-<tr><td><a href="mod_autoindex.html#addaltbytype">AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
-icon selected by MIME content-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addcharset">AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the given filename extensions to the specified content
-charset</td></tr>
-<tr><td><a href="core.html#adddefaultcharset">AddDefaultCharset On|Off|<var>charset</var></a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Default character set to be added for a
-response without an explicit character set</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#adddescription">AddDescription <var>string file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Description to display for a file</td></tr>
-<tr><td><a href="mod_mime.html#addencoding">AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions to the specified encoding
-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addhandler">AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the filename extensions to the specified
-handler</td></tr>
-<tr><td><a href="mod_autoindex.html#addicon">AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display for a file selected by name</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Icon to display next to files selected by MIME
-content-encoding</td></tr>
-<tr><td><a href="mod_autoindex.html#addiconbytype">AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display next to files selected by MIME
-content-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addinputfilter">AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-client requests</td></tr>
-<tr><td><a href="mod_mime.html#addlanguage">AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extension to the specified content
-language</td></tr>
-<tr class="odd"><td><a href="mod_info.html#addmoduleinfo">AddModuleInfo <var>module-name</var> <var>string</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adds additional information to the module
-information displayed by the server-info handler</td></tr>
-<tr><td><a href="mod_mime.html#addoutputfilter">AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-responses from the server</td></tr>
-<tr class="odd"><td><a href="core.html#addoutputfilterbytype">AddOutputFilterByType <var>filter</var>[;<var>filter</var>...]
-<var>MIME-type</var> [<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">assigns an output filter to a particular MIME-type</td></tr>
-<tr><td><a href="mod_mime.html#addtype">AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions onto the specified content
-type</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#alias">Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps URLs to filesystem locations</td></tr>
-<tr><td><a href="mod_alias.html#aliasmatch">AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps URLs to filesystem locations using regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#allow"> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Controls which hosts can access an area of the
-server</td></tr>
-<tr><td><a href="mod_proxy.html#allowconnect">AllowCONNECT <var>port</var> [<var>port</var>] ...</a></td><td> 443 563 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ports that are allowed to <code>CONNECT</code> through the
-proxy</td></tr>
-<tr class="odd"><td><a href="core.html#allowencodedslashes">AllowEncodedSlashes On|Off</a></td><td> Off </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines whether encoded path separators in URLs are allowed to
-be passed through</td></tr>
-<tr><td><a href="core.html#allowoverride">AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</a></td><td> All </td><td>d</td><td>C</td></tr><tr><td class="descr" colspan="4">Types of directives that are allowed in
-<code>.htaccess</code> files</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous">Anonymous <var>user</var> [<var>user</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies userIDs that are allowed access without
-password verification</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets whether the password entered will be logged in the
-error log</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies whether blank passwords are allowed</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets whether the userID field may be empty</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether to check the password field for a correctly
-formatted email address</td></tr>
-<tr><td><a href="perchild.html#assignuserid">AssignUserID <var>user-id</var> <var>group-id</var></a></td><td></td><td>v</td><td>M</td></tr><tr><td class="descr" colspan="4">Tie a virtual host to a user and group ID</td></tr>
-<tr class="odd"><td><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization and authentication are passed to
-lower level modules</td></tr>
-<tr><td><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the database file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of a database file containing the list of users and
-passwords for authentication</td></tr>
-<tr><td><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authentication is passed to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm MD5|MD5-sess</a></td><td> MD5 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Selects the algorithm used to calculate the challenge and
-response hashes in digest authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">URIs that are in the same protection space for digest
-authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck On|Off</a></td><td> Off </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables checking of the nonce-count sent by the
-server</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat <var>format</var></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Determines how the nonce is generated</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime <var>seconds</var></a></td><td> 300 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">How long the server nonce is valid</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop none|auth|auth-int [auth|auth-int]</a></td><td> auth </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the quality-of-protection to use in digest
-authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize <var>size</var></a></td><td> 1000 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The amount of shared memory to allocate for keeping track
-of clients</td></tr>
-<tr class="odd"><td><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of a text file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Prevent other authentication modules from
-authenticating the user if this one fails</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN <em>distinguished-name</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Optional DN to use in binding to the LDAP server</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword <em>password</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Password used in conjuction with the bind DN</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig <em>file-path</em></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Language to charset conversion configuration file</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the LDAP server to compare the DNs</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases never|searching|finding|always</a></td><td> Always </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">When will the module de-reference aliases</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapenabled"> AuthLDAPEnabled on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn on or off LDAP authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Allow LDAP authentication to work with MS FrontPage</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute <em>attribute</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">LDAP attributes used to check for group membership</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl <em>url</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL specifying the LDAP search parameters</td></tr>
-<tr><td><a href="core.html#authname">AuthName <var>auth-domain</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Authorization realm for use in HTTP
-authentication</td></tr>
-<tr class="odd"><td><a href="core.html#authtype">AuthType Basic|Digest</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
-<tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets the name of a text file containing the list of users and
-passwords for authentication</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization is passed to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets environment variables conditional on HTTP User-Agent
-</td></tr>
-<tr><td><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables conditional on User-Agent without
-respect to case</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire <var>seconds</var></a></td><td> 3600 (one hour) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The default duration to cache a document when no expiry date is specified.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachedirlength">CacheDirLength <var>length</var></a></td><td> 2 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The number of characters in subdirectory names</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels <var>levels</var></a></td><td> 3 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The number of levels of subdirectories in the
-cache.</td></tr>
-<tr><td><a href="mod_cache.html#cachedisable">CacheDisable <var> url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Disable caching of specified URLs</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheenable">CacheEnable <var>cache_type</var> <var>url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enable caching of specified URLs using a specified storage
-manager</td></tr>
-<tr><td><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck On|Off</a></td><td> On </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Indicates if the cache observes Expires dates when seeking
-files</td></tr>
-<tr class="odd"><td><a href="mod_file_cache.html#cachefile">CacheFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Cache a list of file handles at startup time</td></tr>
-<tr><td><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion <var>Percentage</var></a></td><td> 60 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Percentage of document served, after which the server
-will complete caching the file even if the request is cancelled.</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcclean">CacheGcClean <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unchanged cached files that match a
-URL</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily <var>time</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The recurring time each day for garbage collection to be run.
-(24 hour clock)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval <var>hours</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The interval between garbage collection attempts.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage <var>KBytes</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum kilobytes of memory used for garbage
-collection</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unreferenced cached files that match a
-URL.</td></tr>
-<tr><td><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Ignore the fact that the client requested the content not be
-cached.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Ignore the fact that a response has no Last Modified
-header.</td></tr>
-<tr><td><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor <var>float</var></a></td><td> 0.1 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The factor used to compute an expiry date based on the
-LastModified date.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire <var>seconds</var></a></td><td> 86400 (one day) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum time in seconds to cache a document</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize <var>bytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize <var>bytes</var></a></td><td> 1 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr><td><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs On|Off</a></td><td> Off </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Allows content-negotiated documents to be
-cached by proxy servers</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheroot">CacheRoot <var>directory</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The directory root under which cache files are
-stored</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachesize">CacheSize <var>KBytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum amount of disk space that will be used by the
-cache in KBytes</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin <var>?</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum time margin to cache a document</td></tr>
-<tr><td><a href="core.html#cgimapextension">CGIMapExtension <var>cgi-path</var> <var>.extension</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetdefault">CharsetDefault <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Charset to translate into</td></tr>
-<tr><td><a href="mod_charset_lite.html#charsetoptions">CharsetOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoImpl +</td><td>svdh</td><td>X</td></tr><tr><td class="descr" colspan="4">Configures charset translation behavior</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Source charset of files</td></tr>
-<tr><td><a href="mod_speling.html#checkspelling">CheckSpelling on|off</a></td><td> Off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables the spelling
-module</td></tr>
-<tr class="odd"><td><a href="perchild.html#childperuserid">ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Specify user ID and group ID for a number of child
-processes</td></tr>
-<tr><td><a href="core.html#contentdigest">ContentDigest On|Off</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Enables the generation of <code>Content-MD5</code> HTTP Response
-headers</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiedomain">CookieDomain <em>domain</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The domain to which the tracking cookie applies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookieexpires">CookieExpires <em>expiry-period</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Expiry time for the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#cookielog">CookieLog <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename for the logging of cookies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookiename">CookieName <em>token</em></a></td><td> Apache </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiestyle">CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></a></td><td> Netscape </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Format of the cookie header field</td></tr>
-<tr><td><a href="mod_usertrack.html#cookietracking">CookieTracking on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables tracking cookie</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory <var>directory</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Directory where Apache attempts to
-switch before dumping core</td></tr>
-<tr><td><a href="mod_log_config.html#customlog">CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets filename and format of log file</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#dav" id="D" name="D">Dav On|Off|<var>provider-name</var></a></td><td> Off </td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable WebDAV HTTP methods</td></tr>
-<tr><td><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity on|off</a></td><td> off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow PROPFIND, Depth: Infinity requests</td></tr>
-<tr class="odd"><td><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB <var>file-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr><td><a href="mod_dav_fs.html#davlockdb">DavLockDB <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#davmintimeout">DavMinTimeout <var>seconds</var></a></td><td> 0 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Minimum amount of time the server holds a lock on
-a DAV resource</td></tr>
-<tr><td><a href="mod_autoindex.html#defaulticon">DefaultIcon <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Icon to display for files when no specific icon is
-configured</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets all files in the given scope to the specified
-language</td></tr>
-<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">MIME content-type that will be sent if the
-server cannot determine a type in any other way</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Fragment size to be compressed at one time by zlib</td></tr>
-<tr><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much compression do we apply to the output</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote [<var>type</var>] <var>notename</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Places the compression ratio in a note for logging</td></tr>
-<tr><td><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel <var>value</var></a></td><td> 9 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much memory should be used by zlib for compression</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize <var>value</var></a></td><td> 15 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Zlib compression window size</td></tr>
-<tr><td><a href="mod_authz_host.html#deny"> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Controls which hosts are denied access to the
-server</td></tr>
-<tr class="odd"><td><a href="core.html#directory">&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</td></tr>
-<tr><td><a href="mod_dir.html#directoryindex">DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</a></td><td> index.html </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">List of resources to look for when the client requests
-a directory</td></tr>
-<tr class="odd"><td><a href="core.html#directorymatch">&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose directives that apply to
-file-system directories matching a regular expression and their
-subdirectories</td></tr>
-<tr><td><a href="mod_dir.html#directoryslash">DirectorySlash On|Off</a></td><td> On </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Toggle trailing slash redirects on or off</td></tr>
-<tr class="odd"><td><a href="core.html#documentroot">DocumentRoot <var>directory-path</var></a></td><td> /usr/local/apache/h +</td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Directory that forms the main document tree visible
-from the web</td></tr>
-<tr><td><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook On|Off</a></td><td> Off </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Enables a hook that runs exception handlers
-after a crash</td></tr>
-<tr class="odd"><td><a href="core.html#enablemmap">EnableMMAP On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Use memory-mapping to read files during delivery</td></tr>
-<tr><td><a href="core.html#enablesendfile">EnableSendfile On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Use the kernel sendfile support to deliver files to the client</td></tr>
-<tr class="odd"><td><a href="core.html#errordocument">ErrorDocument <var>error-code</var> <var>document</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">What the server will return to the client
-in case of an error</td></tr>
-<tr><td><a href="core.html#errorlog"> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</a></td><td> logs/error_log (Uni +</td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Location where the server will log errors</td></tr>
-<tr class="odd"><td><a href="mod_example.html#example">Example</a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Demonstration directive to illustrate the Apache module
-API</td></tr>
-<tr><td><a href="mod_expires.html#expiresactive">ExpiresActive On|Off</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables generation of <code>Expires</code>
-headers</td></tr>
-<tr class="odd"><td><a href="mod_expires.html#expiresbytype">ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Value of the <code>Expires</code> header configured
-by MIME type</td></tr>
-<tr><td><a href="mod_expires.html#expiresdefault">ExpiresDefault <var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Default algorithm for calculating expiration time</td></tr>
-<tr class="odd"><td><a href="mod_status.html#extendedstatus">ExtendedStatus On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Keep track of extended status information for each
-request</td></tr>
-<tr><td><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine <var>filtername</var> <var>parameters</var></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Define an external filter</td></tr>
-<tr class="odd"><td><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoLogS +</td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> options</td></tr>
-<tr><td><a href="core.html#fileetag" id="F" name="F">FileETag <var>component</var> ...</a></td><td> INode MTime Size </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">File attributes used to create the ETag
-HTTP response header</td></tr>
-<tr class="odd"><td><a href="core.html#files">&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Contains directives that apply to matched
-filenames</td></tr>
-<tr><td><a href="core.html#filesmatch">&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply to regular-expression matched
-filenames</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not
-found</td></tr>
-<tr><td><a href="core.html#forcetype">ForceType <var>MIME-type</var>|None</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Forces all matching files to be served with the specified
-MIME content-type</td></tr>
-<tr class="odd"><td><a href="mod_log_forensic.html#forensiclog">ForensicLog <var>filename</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename of the forensic log</td></tr>
-<tr><td><a href="mpm_common.html#group" id="G" name="G">Group <var>unix-group</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Group under which the server will answer
-requests</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#header" id="H" name="H">Header [<var>condition</var>] set|append|add|unset|echo
-<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP response headers</td></tr>
-<tr><td><a href="mod_autoindex.html#headername">HeaderName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the top
-of the index listing</td></tr>
-<tr class="odd"><td><a href="core.html#hostnamelookups">HostnameLookups On|Off|Double</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enables DNS lookups on client IP addresses</td></tr>
-<tr><td><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck On|Off</a></td><td> Off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables logging of the RFC 1413 identity of the remote
-user</td></tr>
-<tr class="odd"><td><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout <var>seconds</var></a></td><td> 30 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the timeout duration for ident requests</td></tr>
-<tr><td><a href="core.html#ifdefine">&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Encloses directives that will be processed only
-if a test is true at startup</td></tr>
-<tr class="odd"><td><a href="core.html#ifmodule">&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Encloses directives that are processed conditional on the
-presence or absence of a specific module</td></tr>
-<tr><td><a href="mod_version.html#ifversion">&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">contains version dependent configuration</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapbase">ImapBase map|referer|<var>URL</var></a></td><td> http://servername/ </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Default <code>base</code> for imagemap files</td></tr>
-<tr><td><a href="mod_imap.html#imapdefault">ImapDefault error|nocontent|map|referer|<var>URL</var></a></td><td> nocontent </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapmenu">ImapMenu none|formatted|semiformatted|unformatted</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr><td><a href="core.html#include">Include <var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">Includes other configuration files from within
-the server configuration files</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexignore">IndexIgnore <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Adds to the list of files to hide when listing
-a directory</td></tr>
-<tr><td><a href="mod_autoindex.html#indexoptions">IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Various configuration settings for directory
-indexing</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</a></td><td> Ascending Name </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the default ordering of the directory index</td></tr>
-<tr><td><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Adds a CSS stylesheet to the directory index</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</td></tr>
-<tr><td><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery on|off</a></td><td> on </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapicachefile">ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ISAPI .dll files to be loaded at startup</td></tr>
-<tr><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr class="odd"><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enables HTTP persistent connections</td></tr>
-<tr><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>seconds</var></a></td><td> 15 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for subsequent
-requests on a persistent connection</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The precendence of language variants for cases where
-the client does not express a preference</td></tr>
-<tr><td><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum number of entries in the primary LDAP cache</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that cached items remain valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that entries in the operation cache remain
-valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the shared memory chache file</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize <var>bytes</var></a></td><td> 102400 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Size in bytes of the shared-memory cache</td></tr>
-<tr><td><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the file containing the trusted Certificate Authority certificate or database</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType <var>type</var></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies the type of the Certificate Authority file</td></tr>
-<tr><td><a href="core.html#limit">&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Restrict enclosed access controls to only certain HTTP
-methods</td></tr>
-<tr class="odd"><td><a href="core.html#limitexcept">&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Restrict access controls to all HTTP methods
-except the named ones</td></tr>
-<tr><td><a href="core.html#limitinternalrecursion">LimitInternalRecursion <var>number</var> [<var>number</var>]</a></td><td> 10 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Determine maximum number of internal redirects and nested
-subrequests</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestbody">LimitRequestBody <var>bytes</var></a></td><td> 0 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Restricts the total size of the HTTP request body sent
-from the client</td></tr>
-<tr><td><a href="core.html#limitrequestfields">LimitRequestFields <var>number</var></a></td><td> 100 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of HTTP request header fields that
-will be accepted from the client</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestfieldsize">LimitRequestFieldsize <var>bytes</var></a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the size of the HTTP request header allowed from the
-client</td></tr>
-<tr><td><a href="core.html#limitrequestline">LimitRequestLine <var>bytes</var></a></td><td> 8190 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Limit the size of the HTTP request line that will be accepted
-from the client</td></tr>
-<tr class="odd"><td><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody <var>bytes</var></a></td><td> 1000000 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the size of an XML-based request body</td></tr>
-<tr><td><a href="mpm_common.html#listen">Listen [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">IP addresses and ports that the server
-listens to</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#listenbacklog">ListenBacklog <var>backlog</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum length of the queue of pending connections</td></tr>
-<tr><td><a href="mod_so.html#loadfile">LoadFile <em>filename</em> [<em>filename</em>] ...</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Link in the named object file or library</td></tr>
-<tr class="odd"><td><a href="mod_so.html#loadmodule">LoadModule <em>module filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Links in the object file or library, and adds to the list
-of active modules</td></tr>
-<tr><td><a href="core.html#location">&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Applies the enclosed directives only to matching
-URLs</td></tr>
-<tr class="odd"><td><a href="core.html#locationmatch">&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Applies the enclosed directives only to regular-expression
-matching URLs</td></tr>
-<tr><td><a href="mpm_common.html#lockfile">LockFile <var>filename</var></a></td><td> logs/accept.lock </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the accept serialization lock file</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#logformat">LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</a></td><td> "%h %l %u %t \"%r\" +</td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Describes a format for use in a log file</td></tr>
-<tr><td><a href="core.html#loglevel">LogLevel <var>level</var></a></td><td> warn </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Controls the verbosity of the ErrorLog</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of child processes that will be created
-to serve requests</td></tr>
-<tr><td><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests <var>number</var></a></td><td> 100 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Number of requests allowed on a persistent
-connection</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxmemfree">MaxMemFree <var>KBytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of memory that the main allocator is allowed
-to hold without calling <code>free()</code></td></tr>
-<tr><td><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild <var>number</var></a></td><td> 10000 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Limit on the number of requests that an individual child server
-will handle during its life</td></tr>
-<tr class="odd"><td><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread <var>number</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Limita el número de peticiones que una hebra (thread) puede
-atender durante su vida</td></tr>
-<tr><td><a href="prefork.html#maxspareservers">MaxSpareServers <var>number</var></a></td><td> 10 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Maximum number of idle child server processes</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxsparethreads">MaxSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of idle threads</td></tr>
-<tr><td><a href="mpm_netware.html#maxthreads">MaxThreads <var>number</var></a></td><td> 2048 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Set the maximum number of worker threads</td></tr>
-<tr class="odd"><td><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild <var>number</var></a></td><td> 64 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of threads per child process</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount <var>value</var></a></td><td> 1009 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum number of objects allowed to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize <var>bytes</var></a></td><td> 10000 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum size (in bytes) of a document allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachesize">MCacheSize <var>KBytes</var></a></td><td> 100 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum amount of memory used by the cache in
-KBytes</td></tr>
-<tr><td><a href="mod_cern_meta.html#metadir">MetaDir <var>directory</var></a></td><td> .web </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the directory to find CERN-style meta information
-files</td></tr>
-<tr class="odd"><td><a href="mod_cern_meta.html#metafiles">MetaFiles on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Activates CERN meta-file processing</td></tr>
-<tr><td><a href="mod_cern_meta.html#metasuffix">MetaSuffix <var>suffix</var></a></td><td> .meta </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">File name suffix for the file containg CERN-style
-meta information</td></tr>
-<tr class="odd"><td><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr><td><a href="prefork.html#minspareservers">MinSpareServers <var>number</var></a></td><td> 5 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Minimum number of idle child server processes</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#minsparethreads">MinSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Minimum number of idle threads available to handle request
-spikes</td></tr>
-<tr><td><a href="mod_file_cache.html#mmapfile">MMapFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Map a list of files into memory at startup time</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo On|Off</a></td><td> Off </td><td>d</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Tells <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> to treat <code>path_info</code>
-components as part of the filename</td></tr>
-<tr><td><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</a></td><td> NegotiatedOnly </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">The types of files that will be included when searching for
-a matching file with MultiViews</td></tr>
-<tr class="odd"><td><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost <var>addr</var>[:<var>port</var>]</a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Designates an IP address for name-virtual
-hosting</td></tr>
-<tr><td><a href="mod_proxy.html#noproxy">NoProxy <var>host</var> [<var>host</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr class="odd"><td><a href="perchild.html#numservers">NumServers <var>number</var></a></td><td> 2 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Total number of children alive at the same time</td></tr>
-<tr><td><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">List of additional client certificates</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Allows a connection to be upgraded to an SSL connection upon request</td></tr>
-<tr><td><a href="core.html#options" id="O" name="O">Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</a></td><td> All </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures what features are available in a particular
-directory</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Controls the default access state and the order in which
-<code class="directive">Allow</code> and <code class="directive">Deny</code> are
-evaluated.</td></tr>
-<tr><td><a href="mod_env.html#passenv" id="P" name="P">PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Passes environment variables from the shell</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#pidfile">PidFile <var>filename</var></a></td><td> logs/httpd.pid </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">File where the server records the process ID
-of the daemon</td></tr>
-<tr><td><a href="mod_echo.html#protocolecho">ProtocolEcho On|Off</a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn the echo server on or off</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxy">&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxybadheader">ProxyBadHeader IsError|Ignore|StartBody</a></td><td> IsError </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determines how to handle bad header lines in a
-response</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyblock">ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Words, hosts, or domains that are banned from being
-proxied</td></tr>
-<tr><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
-header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
-of the index listing</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
-of the current URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
-a different URL</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
-a resource</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
-</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
-synchronization</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
-processing</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
-engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td> MaxRedirects=10 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
-by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
-by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
-processes launched by Apache children</td></tr>
-<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
-user authentication</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
-the child processes</td></tr>
-<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Activates a CGI script for a particular request
-method.</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
-target as a CGI script</td></tr>
-<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</td></tr>
-<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</td></tr>
-<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The name of the socket to use for communication with
-the cgi daemon</td></tr>
-<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP buffer size</td></tr>
-<tr><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Email address that the server includes in error
-messages sent to the client</td></tr>
-<tr class="odd"><td><a href="core.html#serveralias">ServerAlias <var>hostname</var> [<var>hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate names for a host used when matching requests
-to name-virtual hosts</td></tr>
-<tr><td><a href="mpm_common.html#serverlimit">ServerLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Upper limit on configurable number of processes</td></tr>
-<tr class="odd"><td><a href="core.html#servername">ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Hostname and port that the server uses to identify
-itself</td></tr>
-<tr><td><a href="core.html#serverpath">ServerPath <var>URL-path</var></a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">Legacy URL pathname for a name-based virtual host that
-is accessed by an incompatible browser</td></tr>
-<tr class="odd"><td><a href="core.html#serverroot">ServerRoot <var>directory-path</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Base directory for the server installation</td></tr>
-<tr><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures the footer on server-generated documents</td></tr>
-<tr class="odd"><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the <code>Server</code> HTTP response
-header</td></tr>
-<tr><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets environment variables based on attributes of the request
-</td></tr>
-<tr><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets environment variables based on attributes of the request
-without respect to case</td></tr>
-<tr class="odd"><td><a href="core.html#sethandler">SetHandler <var>handler-name</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Forces all matching files to be processed by a
-handler</td></tr>
-<tr><td><a href="core.html#setinputfilter">SetInputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process client requests and POST
-input</td></tr>
-<tr class="odd"><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the filters that will process responses from the
-server</td></tr>
-<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
-error</td></tr>
-<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
-displayed</td></tr>
-<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
-keys</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-proxy handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
-source</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
-boolean expression is true</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
-HTTP request</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
-Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
-in the Session Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
-<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
-<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
-<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
-per child process</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
-<tr><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
-client connections</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for
-certain events before failing a request</td></tr>
-<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Specify location of a log file</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The location of the <code>mime.types</code> file</td></tr>
-<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes variables from the environment</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|DNS</a></td><td> On </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures how the server determines its own name and
-port</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The userid under which the server will answer
-requests</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the user-specific directories</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply only to a specific
-hostname or IP address</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Use accept() rather than AcceptEx() to accept network connections</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
-set</td></tr>
-</table></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/quickreference.html.ja.euc-jp b/docs/manual/mod/quickreference.html.ja.euc-jp
deleted file mode 100644
index 4d0ea2038f..0000000000
--- a/docs/manual/mod/quickreference.html.ja.euc-jp
+++ /dev/null
@@ -1,678 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö ¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index">
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="preamble"><h1>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö ¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¥Ç¥£¥ì¥¯¥Æ¥£¥Ö ¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹¤Ç¤Ï¡¢³Æ Apache ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- »ÈÍÑÊýË¡¡¢¥Ç¥Õ¥©¥ë¥ÈÃÍ¡¢¥¹¥Æ¡¼¥¿¥¹¤È¥³¥ó¥Æ¥­¥¹¥È¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£
- ³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¡¢¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ë´Ø¤·¤Æ¤Ï
- <a href="directive-dict.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¼­½ñ</a>¤ò
- ¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>Âè 1 ÎóÌܤϥǥ£¥ì¥¯¥Æ¥£¥Ö¤Î̾Á°¤È»ÈÍÑÊýË¡¤Ç¤¹¡£
- Âè 2 ÎóÌÜ¤Ï (¤â¤·¤¢¤ì¤Ð) ¥Ç¥Õ¥©¥ë¥ÈÃͤȤʤäƤ¤¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃͤ¬Ä¹¤¹¤®¤Æɽ¼¨¤·¤­¤ì¤Ê¤¤¾ì¹ç¤Ï¡¢ºÇ½é¤Îʸ»úÎó¤Î¸å¤í¤Ë
- ¡Ö + ¡×¤¬Â³¤­¤Þ¤¹¡£</p>
-
- <p>Âè 3, 4 Îó¤Ï¡¢²¼¤Îɽ¤ÎÃí¼á¤Ë½¾¤Ã¤Æ¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î»ÈÍѤǤ­¤ë¥³¥ó¥Æ¥­¥¹¥È¤È¡¢
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥¹¥Æ¡¼¥¿¥¹¤¬¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
- </div>
-<div id="directive-ref"><table id="legend">
-<tr><td class="letters"><span><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></span></td>
-<td><table>
-
- <tr><th>s</th><td>¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ë</td></tr>
- <tr><th>v</th><td>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</td></tr>
- <tr><th>d</th><td>¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table></td>
-<td><table>
-
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extension</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table></td></tr>
-</table>
-<table class="qref">
-<tr><td><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex default|<var>method</var></a></td><td> default </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Ê£¿ô¤Î»Ò¥×¥í¥»¥¹¤¬¥Í¥Ã¥È¥ï¡¼¥¯¥½¥±¥Ã¥È¤Ç¥ê¥¯¥¨¥¹¥È¤ò
-accept ¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤È¤­¤Ë¡¢Apache ¤¬¤½¤ì¤é¤Î»Ò¥×¥í¥»¥¹¤òľÎ󲽤¹¤ë¤¿¤á¤Ë
-»È¤¦ÊýË¡</td></tr>
-<tr class="odd"><td><a href="core.html#acceptpathinfo">AcceptPathInfo On|Off|Default</a></td><td> Default </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¸å¤Ë³¤¯¥Ñ¥¹Ì¾¾ðÊó¤ò¼õ¤±ÉÕ¤±¤ë¥ê¥½¡¼¥¹¤Î»ØÄê</td></tr>
-<tr><td><a href="core.html#accessfilename">AccessFileName <var>filename</var> [<var>filename</var>] ...</a></td><td> .htaccess </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">ʬ»¶ÀßÄê¥Õ¥¡¥¤¥ë¤Î̾Á°</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#action">Action <var>action-type</var> <var>cgi-script</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÆÃÄê¤Î¥Ï¥ó¥É¥é¤ä¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ËÂФ·¤Æ CGI ¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤Ë
-ÀßÄê</td></tr>
-<tr><td><a href="mod_autoindex.html#addalt">AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ë
-ɽ¼¨¤µ¤ì¤ë¡¢¥Õ¥¡¥¤¥ë̾¤ÇÁªÂò¤µ¤ì¤¿ÂåÂإƥ­¥¹¥È</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ëɽ¼¨¤µ¤ì¤ë¡¢MIME Éä¹æ²½ÊýË¡¤ÇÁªÂò¤µ¤ì¤¿
-ÂåÂإƥ­¥¹¥È</td></tr>
-<tr><td><a href="mod_autoindex.html#addaltbytype">AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¢¥¤¥³¥ó¤ÎÂå¤ï¤ê¤Ë
-ɽ¼¨¤µ¤ì¤ë¡¢MIME ¥¿¥¤¥×¤ÇÁªÂò¤µ¤ì¤¿ÂåÂإƥ­¥¹¥È</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addcharset">AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿Ê¸»ú¥»¥Ã¥È¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><td><a href="core.html#adddefaultcharset">AddDefaultCharset On|Off|<var>charset</var></a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">ÌÀ¼¨Åª¤Ëʸ»ú¥»¥Ã¥È¤ò»ØÄꤷ¤Æ¤¤¤Ê¤¤±þÅú¤ËÄɲ䵤ì¤ë
-¥Ç¥Õ¥©¥ë¥È¤Îʸ»ú¥»¥Ã¥È</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#adddescription">AddDescription <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æɽ¼¨¤¹¤ëÀâÌÀ</td></tr>
-<tr><td><a href="mod_mime.html#addencoding">AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
-¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addhandler">AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥Ï¥ó¥É¥é¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><td><a href="mod_autoindex.html#addicon">AddIcon <var>icon</var> <var>name</var>
-[<var>name</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤ò̾Á°¤ÇÁªÂò</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤ò MIME
-Éä¹æ²½ÊýË¡¤ÇÁªÂò</td></tr>
-<tr><td><a href="mod_autoindex.html#addiconbytype">AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤ÎÎÙ¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó¤ò
-MIME ¥¿¥¤¥×¤Ë¤è¤Ã¤ÆÁªÂò</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addinputfilter">AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ò¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤¹¤ë
- ¥Õ¥£¥ë¥¿¤Ë¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr><td><a href="mod_mime.html#addlanguage">AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤵ¤ì¤¿¸À¸ì¤Ë¥Þ¥Ã¥×</td></tr>
-<tr class="odd"><td><a href="mod_info.html#addmoduleinfo">AddModuleInfo <var>module-name</var> <var>string</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">server-info ¥Ï¥ó¥É¥é¤Ë¤è¤êɽ¼¨¤µ¤ì¤ë¥â¥¸¥å¡¼¥ë¤Î¾ðÊó¤Ë
-ÄɲäξðÊó¤òÉÕ¤±²Ã¤¨¤ë</td></tr>
-<tr><td><a href="mod_mime.html#addoutputfilter">AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò¥µ¡¼¥Ð¤«¤é¤Î±þÅú¤ò½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤Ë
- ¥Þ¥Ã¥×¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#addoutputfilterbytype">AddOutputFilterByType <var>filter</var>[;<var>filter</var>...] <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME-type ¤Ë½ÐÎÏ¥Õ¥£¥ë¥¿¤ò³ä¤êÅö¤Æ¤ë</td></tr>
-<tr><td><a href="mod_mime.html#addtype">AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë̾¤Î³ÈÄ¥»Ò¤ò»ØÄꤵ¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ë¥Þ¥Ã¥×</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#alias">Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤˥ޥåפ¹¤ë</td></tr>
-<tr><td><a href="mod_alias.html#aliasmatch">AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Àµµ¬É½¸½¤ò»È¤Ã¤Æ URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤˥ޥåפ¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#allow"> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤Î¤¢¤ëÎΰè¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë¥Û¥¹¥È¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr><td><a href="mod_proxy.html#allowconnect">AllowCONNECT <var>port</var> [<var>port</var>] ...</a></td><td> 443 563 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ports that are allowed to <code>CONNECT</code> through the
-proxy</td></tr>
-<tr class="odd"><td><a href="core.html#allowencodedslashes">AllowEncodedSlashes On|Off</a></td><td> Off </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">URL Ãæ¤ÎÉä¹æ²½¤µ¤ì¤¿¥Ñ¥¹Ê¬Î¥Ê¸»ú¤¬Àè¤ËÅÁ¤¨¤é¤ì¤ë¤Î¤òµö²Ä¤¹¤ë¤«¤É¤¦¤«¤ò
-·èÄꤹ¤ë</td></tr>
-<tr><td><a href="core.html#allowoverride">AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</a></td><td> All </td><td>d</td><td>C</td></tr><tr><td class="descr" colspan="4"><code>.htaccess</code> ¤Çµö²Ä¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¼ïÎà</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous">Anonymous <var>user</var> [<var>user</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¥Ñ¥¹¥ï¡¼¥É¤Î¸¡ººÌµ¤·¤Ç¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë userID ¤ò»ØÄꤹ¤ë
-</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤¬¥¨¥é¡¼¥í¥°¤Ë¥í¥®¥ó¥°¤µ¤ì¤ë¤«¤É¤¦¤«¤ò
-ÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¶õ¥Ñ¥¹¥ï¡¼¥É¤òµö²Ä¤¹¤ë¤«¤É¤¦¤«¤ò»ØÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">¶õ userID ¤òµö²Ä¤¹¤ë¤«¤ò»ØÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¥Ñ¥¹¥ï¡¼¥ÉÍó¤¬Àµ¤·¤¤·Á¼°¤ÎÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤Ç¤¢¤ë¤³¤È¤ò
-Ä´¤Ù¤ë¤«¤É¤¦¤«¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="perchild.html#assignuserid">AssignUserID <var>user-id</var> <var>group-id</var></a></td><td></td><td>v</td><td>M</td></tr><tr><td class="descr" colspan="4">Tie a virtual host to a user and group ID</td></tr>
-<tr class="odd"><td><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ǧ¾Ú¤È¾µÇ§¤ò¡¢¤è¤êÄ㤤¥ì¥Ù¥ë¤Î¥â¥¸¥å¡¼¥ë¤Ë°Ü¹Ô¤µ¤»¤ë¤«¤ò
-ÀßÄꤷ¤Þ¤¹¡£</td></tr>
-<tr><td><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">¤³¤Î°ÌÃÖ¤ËÂФ¹¤ëǧ¾Ú¥×¥í¥Ð¥¤¥À¤òÀßÄꤷ¤Þ¤¹¡£</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the database file containing the list
-of user groups for authentication</td></tr>
-<tr><td><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">¥Ñ¥¹¥ï¡¼¥É¤òÊݸ¤¹¤ë¤¿¤á¤ËɬÍפʥǡ¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤Î¼ïÎà¤ò
-ÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">ǧ¾ÚÍѤΥ桼¥¶¤È¥Ñ¥¹¥ï¡¼¥É¤Î¥ê¥¹¥È¤òÊÝ»ý¤·¤Æ¤¤¤ë
-¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë̾¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">¼¡¤ÎÄ㼡¥ì¥Ù¥ë¤Îǧ¾Ú¥â¥¸¥å¡¼¥ë¤ËÀ©¸æ¤òÅϤ¹¤«¤É¤¦¤«¤ò
-ÀßÄꤷ¤Þ¤¹</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm MD5|MD5-sess</a></td><td> MD5 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Selects the algorithm used to calculate the challenge and
-response hashes in digest authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">URIs that are in the same protection space for digest
-authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck On|Off</a></td><td> Off </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables checking of the nonce-count sent by the
-server</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat <var>format</var></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Determines how the nonce is generated</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime <var>seconds</var></a></td><td> 300 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">How long the server nonce is valid</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the authentication provider(s) for this location</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop none|auth|auth-int [auth|auth-int]</a></td><td> auth </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the quality-of-protection to use in digest
-authentication</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize <var>size</var></a></td><td> 1000 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The amount of shared memory to allocate for keeping track
-of clients</td></tr>
-<tr class="odd"><td><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ǧ¾Ú¤Ë»ÈÍѤ¹¤ë¥æ¡¼¥¶¥°¥ë¡¼¥×¤Î°ìÍ÷¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¡¢
-¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Prevent other authentication modules from
-authenticating the user if this one fails</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN <em>distinguished-name</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Optional DN to use in binding to the LDAP server</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword <em>password</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Password used in conjuction with the bind DN</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig <em>file-path</em></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Language to charset conversion configuration file</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the LDAP server to compare the DNs</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases never|searching|finding|always</a></td><td> Always </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">When will the module de-reference aliases</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapenabled"> AuthLDAPEnabled on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn on or off LDAP authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Allow LDAP authentication to work with MS FrontPage</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute <em>attribute</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">LDAP attributes used to check for group membership</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl <em>url</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL specifying the LDAP search parameters</td></tr>
-<tr><td><a href="core.html#authname">AuthName <var>auth-domain</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">HTTP ǧ¾Ú¤Îǧ²ÄÎΰè (ÌõÃí: realm)</td></tr>
-<tr class="odd"><td><a href="core.html#authtype">AuthType Basic|Digest</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥æ¡¼¥¶Ç§¾Ú¤Î¼ïÎà</td></tr>
-<tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">ǧ¾Ú¤Ë»ÈÍѤ¹¤ë¥æ¡¼¥¶¤È¥Ñ¥¹¥ï¡¼¥É¤Î°ìÍ÷¤¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¡¢
-¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the type of database file that is used to
-store passwords</td></tr>
-<tr class="odd"><td><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¾µÇ§¤¬Äã°Ì¤Î¥â¥¸¥å¡¼¥ë¤ËÅϤµ¤ì¤ë¤«¤É¤¦¤«¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">¾µÇ§¤¬²¼°Ì¤Î¥â¥¸¥å¡¼¥ë¤ËÅϤµ¤ì¤ë¤«¤É¤¦¤«¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr><td><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets whether authorization will be passed on to lower level
-modules</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">HTTP User-Agent ¤Ë´ð¤Å¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë
-</td></tr>
-<tr><td><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">HTTP User-Agent ¤Ë´ð¤Å¤¤¤ÆÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¤Ë
-´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire <var>seconds</var></a></td><td> 3600 (one hour) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The default duration to cache a document when no expiry date is specified.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachedirlength">CacheDirLength <var>length</var></a></td><td> 2 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The number of characters in subdirectory names</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels <var>levels</var></a></td><td> 3 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The number of levels of subdirectories in the
-cache.</td></tr>
-<tr><td><a href="mod_cache.html#cachedisable">CacheDisable <var> url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Disable caching of specified URLs</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheenable">CacheEnable <var>cache_type</var> <var>url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Enable caching of specified URLs using a specified storage
-manager</td></tr>
-<tr><td><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck On|Off</a></td><td> On </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Indicates if the cache observes Expires dates when seeking
-files</td></tr>
-<tr class="odd"><td><a href="mod_file_cache.html#cachefile">CacheFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Cache a list of file handles at startup time</td></tr>
-<tr><td><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion <var>Percentage</var></a></td><td> 60 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Percentage of document served, after which the server
-will complete caching the file even if the request is cancelled.</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcclean">CacheGcClean <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unchanged cached files that match a
-URL</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily <var>time</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The recurring time each day for garbage collection to be run.
-(24 hour clock)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval <var>hours</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The interval between garbage collection attempts.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage <var>KBytes</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum kilobytes of memory used for garbage
-collection</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The time to retain unreferenced cached files that match a
-URL.</td></tr>
-<tr><td><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Ignore the fact that the client requested the content not be
-cached.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Ignore the fact that a response has no Last Modified
-header.</td></tr>
-<tr><td><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor <var>float</var></a></td><td> 0.1 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The factor used to compute an expiry date based on the
-LastModified date.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire <var>seconds</var></a></td><td> 86400 (one day) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum time in seconds to cache a document</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize <var>bytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize <var>bytes</var></a></td><td> 1 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be placed in the
-cache</td></tr>
-<tr><td><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs On|Off</a></td><td> Off </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤ò¥×¥í¥­¥·¥µ¡¼¥Ð¤¬
-¥­¥ã¥Ã¥·¥å¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheroot">CacheRoot <var>directory</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The directory root under which cache files are
-stored</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachesize">CacheSize <var>KBytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum amount of disk space that will be used by the
-cache in KBytes</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin <var>?</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum time margin to cache a document</td></tr>
-<tr><td><a href="core.html#cgimapextension">CGIMapExtension <var>cgi-path</var> <var>.extension</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">CGI ¥¹¥¯¥ê¥×¥È¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î°ÌÃÖ¤òÄ´¤Ù¤ë¤¿¤á¤Î¼êË¡</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetdefault">CharsetDefault <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Charset to translate into</td></tr>
-<tr><td><a href="mod_charset_lite.html#charsetoptions">CharsetOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoImpl +</td><td>svdh</td><td>X</td></tr><tr><td class="descr" colspan="4">Configures charset translation behavior</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Source charset of files</td></tr>
-<tr><td><a href="mod_speling.html#checkspelling">CheckSpelling on|off</a></td><td> Off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">spelling ¥â¥¸¥å¡¼¥ë¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="perchild.html#childperuserid">ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Specify user ID and group ID for a number of child
-processes</td></tr>
-<tr><td><a href="core.html#contentdigest">ContentDigest On|Off</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4"><code>Content-MD5</code> HTTP ±þÅú¥Ø¥Ã¥À¤ÎÀ¸À®¤òÍ­¸ú¤Ë¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiedomain">CookieDomain <em>domain</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The domain to which the tracking cookie applies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookieexpires">CookieExpires <em>expiry-period</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Expiry time for the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#cookielog">CookieLog <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥¯¥Ã¥­¥ó¥°¤Î¥í¥®¥ó¥°¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë̾¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_usertrack.html#cookiename">CookieName <em>token</em></a></td><td> Apache </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiestyle">CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></a></td><td> Netscape </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Format of the cookie header field</td></tr>
-<tr><td><a href="mod_usertrack.html#cookietracking">CookieTracking on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables tracking cookie</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory <var>directory</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Apache ¤¬¥³¥¢¥À¥ó¥×¤¹¤ëÁ°¤Ë°ÜÆ°¤ò»î¤ß¤ë¥Ç¥£¥ì¥¯¥È¥ê
-</td></tr>
-<tr><td><a href="mod_log_config.html#customlog">CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥í¥°¥Õ¥¡¥¤¥ë¤Î̾Á°¤È½ñ¼°¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#dav" id="D" name="D">Dav On|Off|<var>provider-name</var></a></td><td> Off </td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">WebDAV HTTP ¥á¥½¥Ã¥É¤òÍ­¸ú¤Ë¤·¤Þ¤¹</td></tr>
-<tr><td><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity on|off</a></td><td> off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">PROPFIND, Depth: Infinity ¥ê¥¯¥¨¥¹¥È¤òµö²Ä¤·¤Þ¤¹</td></tr>
-<tr class="odd"><td><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB <var>file-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr><td><a href="mod_dav_fs.html#davlockdb">DavLockDB <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">DAV ¥í¥Ã¥¯¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î°ÌÃÖ</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#davmintimeout">DavMinTimeout <var>seconds</var></a></td><td> 0 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬ DAV ¥ê¥½¡¼¥¹¤Î¥í¥Ã¥¯¤ò°Ý»ý¤¹¤ëºÇ¾®»þ´Ö¤Ç¤¹¡£
-</td></tr>
-<tr><td><a href="mod_autoindex.html#defaulticon">DefaultIcon <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÆÃÄê¤Î¥¢¥¤¥³¥ó¤¬²¿¤âÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤»þ¤Ë
-¥Õ¥¡¥¤¥ë¤Ëɽ¼¨¤¹¤ë¥¢¥¤¥³¥ó</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¤¢¤ë¥¹¥³¡¼¥×¤Î¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò»ØÄꤵ¤ì¤¿¸À¸ì¤Ë
-ÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò·èÄê¤Ç¤­¤Ê¤¤¤È¤­¤Ë
-Á÷¤é¤ì¤ë MIME ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">zlib ¤¬°ìÅ٤˰µ½Ì¤¹¤ë²ô¤ÎÂ礭¤µ</td></tr>
-<tr><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">½ÐÎϤËÂФ·¤Æ¹Ô¤Ê¤¦°µ½Ì¤ÎÄøÅÙ</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote [<var>type</var>] <var>notename</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¥í¥®¥ó¥°ÍѤ˰µ½ÌÈæ¤ò¥á¥â¤ËÄɲÃ</td></tr>
-<tr><td><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel <var>value</var></a></td><td> 9 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">zlib ¤¬°µ½Ì¤Ë»È¤¦¥á¥â¥ê¤Î¥ì¥Ù¥ë¤ò»ØÄê</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize <var>value</var></a></td><td> 15 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Zlib ¤Î°µ½ÌÍÑ¥¦¥£¥ó¥É¥¦¤ÎÂ礭¤µ</td></tr>
-<tr><td><a href="mod_authz_host.html#deny"> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¥¢¥¯¥»¥¹¤òµñÈݤ¹¤ë¥Û¥¹¥È¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#directory">&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">»ØÄê¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤È¤Î¤ß¤Ë
-ŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><td><a href="mod_dir.html#directoryindex">DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</a></td><td> index.html </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤¬¥Ç¥£¥ì¥¯¥È¥ê¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¤È¤­¤ËÄ´¤Ù¤ë
-¥ê¥½¡¼¥¹¤Î¥ê¥¹¥È</td></tr>
-<tr class="odd"><td><a href="core.html#directorymatch">&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Àµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¤È
-¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤È¤Î¤ß¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><td><a href="mod_dir.html#directoryslash">DirectorySlash On|Off</a></td><td> On </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥Ñ¥¹ËöÈø¤Î¥¹¥é¥Ã¥·¥å¤Ç¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤«¤É¤¦¤«¤Î¥ª¥ó¥ª¥Õ¤ò¥È¥°¥ë¤µ¤»¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#documentroot">DocumentRoot <var>directory-path</var></a></td><td> /usr/local/apache/h +</td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥¦¥§¥Ö¤«¤é¸«¤¨¤ë¥á¥¤¥ó¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼¤Ë¤Ê¤ë
-¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr><td><a href="core.html#enablemmap" id="E" name="E">EnableMMAP On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">ÇÛÁ÷Ãæ¤Ë¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤à¤¿¤á¤Ë¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤ò
-»È¤¦¤«¤É¤¦¤«</td></tr>
-<tr class="odd"><td><a href="core.html#enablesendfile">EnableSendfile On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ø¤ÎÇÛÁ÷»þ¤Ë¥«¡¼¥Í¥ë¤Î sendfile ¥µ¥Ý¡¼¥È¤ò
-»È¤¦¤«¤É¤¦¤«</td></tr>
-<tr><td><a href="core.html#errordocument">ErrorDocument <var>error-code document</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤È¤­¤Ë¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¤â¤Î</td></tr>
-<tr class="odd"><td><a href="core.html#errorlog"> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</a></td><td> logs/error_log (Uni +</td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¥¨¥é¡¼¤ò¥í¥°¼ý½¸¤¹¤ë¾ì½ê</td></tr>
-<tr><td><a href="mod_example.html#example">Example</a></td><td></td><td>svdh</td><td>X</td></tr><tr><td class="descr" colspan="4">Demonstration directive to illustrate the Apache module
-API</td></tr>
-<tr class="odd"><td><a href="mod_expires.html#expiresactive">ExpiresActive On|Off</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4"><code>Expires</code> ¥Ø¥Ã¥À¤ÎÀ¸À®¤òÍ­¸ú¤Ë¤¹¤ë</td></tr>
-<tr><td><a href="mod_expires.html#expiresbytype">ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">MIME ¥¿¥¤¥×¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë <code>Expires</code> ¥Ø¥Ã¥À¤ÎÃÍ</td></tr>
-<tr class="odd"><td><a href="mod_expires.html#expiresdefault">ExpiresDefault <var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">´ü¸ÂÀÚ¤ì´üÆü¤ò·×»»¤¹¤ë¥Ç¥Õ¥©¥ë¥È¥¢¥ë¥´¥ê¥º¥à</td></tr>
-<tr><td><a href="mod_status.html#extendedstatus">ExtendedStatus On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">³Æ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ³ÈÄ¥¥¹¥Æ¡¼¥¿¥¹¾ðÊó¤òÊݸ¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine <var>filtername</var> <var>parameters</var></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Define an external filter</td></tr>
-<tr><td><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoLogS +</td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> options</td></tr>
-<tr class="odd"><td><a href="core.html#fileetag" id="F" name="F">FileETag <var>component</var> ...</a></td><td> INode MTime Size </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">ETag HTTP ±þÅú¥Ø¥Ã¥À¤òºîÀ®¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë
-¥Õ¥¡¥¤¥ë¤Î°À­</td></tr>
-<tr><td><a href="core.html#files">&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë̾¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr class="odd"><td><a href="core.html#filesmatch">&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Àµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë̾¤ËŬÍѤµ¤ì¤ë
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Í×µá¤Ë¹ç¤¦Ã±ÆȤΥɥ­¥å¥á¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ë¹Ô¤Ê¤¦¤³¤È¤ò»ØÄê
-</td></tr>
-<tr class="odd"><td><a href="core.html#forcetype">ForceType <var>MIME-type</var>|None</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¤¹¤Ù¤Æ¤Î¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë¤¬»ØÄê¤Î MIME ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤Ç
-Á÷¤é¤ì¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr><td><a href="mod_log_forensic.html#forensiclog">ForensicLog <var>filename</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets filename of the forensic log</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#group" id="G" name="G">Group <var>unix-group</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤Ë½ê°¤¹¤ë¥°¥ë¡¼¥×</td></tr>
-<tr><td><a href="mod_headers.html#header" id="H" name="H">Header set|append|add|unset|echo <var>header</var>
-[<var>value</var> [env=[!]<var>variable</var>]]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">HTTP ±þÅú¥Ø¥Ã¥À¤ÎÀßÄê</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#headername">HeaderName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">
-¥¤¥ó¥Ç¥Ã¥¯¥¹°ìÍ÷¤ÎÀèƬ¤ËÁÞÆþ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°</td></tr>
-<tr><td><a href="core.html#hostnamelookups">HostnameLookups On|Off|Double</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤Î IP ¥¢¥É¥ì¥¹¤Î DNS ¥ë¥Ã¥¯¥¢¥Ã¥×¤ò
-Í­¸ú¤Ë¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck On|Off</a></td><td> Off </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables logging of the RFC 1413 identity of the remote
-user</td></tr>
-<tr><td><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout <var>seconds</var></a></td><td> 30 </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Determines the timeout duration for ident requests</td></tr>
-<tr class="odd"><td><a href="core.html#ifdefine">&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">µ¯Æ°»þ¤Ë¥Æ¥¹¥È¤¬¿¿¤Ç¤¢¤ë¤È¤­¤Î¤ß¤Ë½èÍý¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
-°Ï¤à</td></tr>
-<tr><td><a href="core.html#ifmodule">&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥â¥¸¥å¡¼¥ë¤Î¸ºß¤¹¤ë¤«¤·¤Ê¤¤¤«¤Ë±þ¤¸¤Æ½èÍý¤µ¤ì¤ë
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à</td></tr>
-<tr class="odd"><td><a href="mod_version.html#ifversion">&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">contains version dependent configuration</td></tr>
-<tr><td><a href="mod_imap.html#imapbase">ImapBase map|referer|<var>URL</var></a></td><td> http://servername/ </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Default <code>base</code> for imagemap files</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapdefault">ImapDefault error|nocontent|map|referer|<var>URL</var></a></td><td> nocontent </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr><td><a href="mod_imap.html#imapmenu">ImapMenu none|formatted|semiformatted|unformatted</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr class="odd"><td><a href="core.html#include">Include <var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥ÐÀßÄê¥Õ¥¡¥¤¥ëÃ椫¤é¾¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ò¼è¤ê¹þ¤à</td></tr>
-<tr><td><a href="mod_autoindex.html#indexignore">IndexIgnore <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤ò¹Ô¤Ê¤¦ºÝ¤Ë̵»ë¤¹¤Ù¤­
-¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤ËÄɲÃ</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexoptions">IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤ÎÍÍ¡¹¤ÊÀßÄê¹àÌÜ
-</td></tr>
-<tr><td><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</a></td><td> Ascending Name </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">
-¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Îɸ½à¤Î½çÈÖÉÕ¤±¤òÀßÄê</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë CSS ¥¹¥¿¥¤¥ë¥·¡¼¥È¤òÄɲ乤ë</td></tr>
-<tr><td><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery on|off</a></td><td> on </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</td></tr>
-<tr><td><a href="mod_isapi.html#isapicachefile">ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">ISAPI .dll files to be loaded at startup</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr><td><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">HTTP ¤Î»ý³Ū¤ÊÀܳ¤òÍ­¸ú¤Ë¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>seconds</var></a></td><td> 15 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">»ý³Ū¤ÊÀܳ¤Ç¼¡¤Î¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤Þ¤Ç¥µ¡¼¥Ð¤¬ÂԤĻþ´Ö</td></tr>
-<tr><td><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤¬Í¥ÀèÅÙ¤ò¼¨¤µ¤Ê¤«¤Ã¤¿¤È¤­¤Î¸À¸ì¤Î variant ¤ÎÍ¥ÀèÅÙ¤ò
-»ØÄê</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of entries in the primary LDAP cache</td></tr>
-<tr><td><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Time that cached items remain valid</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr><td><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Time that entries in the operation cache remain
-valid</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the shared memory chache file</td></tr>
-<tr><td><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize <var>bytes</var></a></td><td> 102400 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Size in bytes of the shared-memory cache</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the file containing the trusted Certificate Authority certificate or database</td></tr>
-<tr><td><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType <var>type</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Specifies the type of the Certificate Authority file</td></tr>
-<tr class="odd"><td><a href="core.html#limit">&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">°Ï¤¤¤ÎÃæ¤Ë¤¢¤ë¥¢¥¯¥»¥¹À©¸æ¤ÎŬÍѤòÆÃÄê¤Î HTTP ¥á¥½¥Ã¥É¤Î¤ß¤Ë
-À©¸Â¤¹¤ë</td></tr>
-<tr><td><a href="core.html#limitexcept">&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">»ØÄꤵ¤ì¤¿¤â¤Î°Ê³°¤Î HTTP ¥á¥½¥Ã¥É¤Ë¥¢¥¯¥»¥¹À©¸æ¤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#limitinternalrecursion">LimitInternalRecursion <var>number</var> [<var>number</var>]</a></td><td> 10 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">ÆâÉô¥ê¥À¥¤¥ì¥¯¥È¤ÈÆþ¤ì»Ò¤Ë¤Ê¤Ã¤¿¥µ¥Ö¥ê¥¯¥¨¥¹¥È¤ÎºÇÂç¿ô¤ò·èÄꤹ¤ë</td></tr>
-<tr><td><a href="core.html#limitrequestbody">LimitRequestBody <var>bytes</var></a></td><td> 0 </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤«¤éÁ÷¤é¤ì¤ë HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ü¥Ç¥£¤Î
-ÁíÎ̤òÀ©¸Â¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestfields">LimitRequestFields <var>number</var></a></td><td> 100 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Î¿ô¤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr><td><a href="core.html#limitrequestfieldsize">LimitRequestFieldsize <var>bytes</var></a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤Î
-¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestline">LimitRequestLine <var>bytes</var></a></td><td> 8190 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î HTTP ¥ê¥¯¥¨¥¹¥È¹Ô¤Î¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr><td><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody <var>bytes</var></a></td><td> 1000000 </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">XML ·Á¼°¤Î¥ê¥¯¥¨¥¹¥È¤Î¥Ü¥Ç¥£¤Î¥µ¥¤¥º¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#listen">Listen [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬ listen ¤¹¤ëIP ¥¢¥É¥ì¥¹¤È¥Ý¡¼¥ÈÈÖ¹æ</td></tr>
-<tr><td><a href="mpm_common.html#listenbacklog">ListenBacklog <var>backlog</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">ÊÝα¾õÂ֤Υ³¥Í¥¯¥·¥ç¥ó¤Î¥­¥å¡¼¤ÎºÇÂçĹ</td></tr>
-<tr class="odd"><td><a href="mod_so.html#loadfile">LoadFile <em>filename</em> [<em>filename</em>] ...</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">»ØÄꤵ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ä¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤¹¤ë</td></tr>
-<tr><td><a href="mod_so.html#loadmodule">LoadModule <em>module filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ä¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·¡¢»ÈÍѥ⥸¥å¡¼¥ë¤Î
-¥ê¥¹¥È¤ËÄɲ乤ë</td></tr>
-<tr class="odd"><td><a href="core.html#location">&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">°Ï¤ó¤À¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥Þ¥Ã¥Á¤¹¤ë URL ¤Î¤ß¤ËŬÍÑ</td></tr>
-<tr><td><a href="core.html#locationmatch">&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">°Ï¤ó¤À¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¤¹¤ë URL ¤Î¤ß¤Ë
-ŬÍÑ</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#lockfile">LockFile <var>filename</var></a></td><td> logs/accept.lock </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¼õÉÕ¤òľÎ󲽤¹¤ë¤¿¤á¤Î¥í¥Ã¥¯¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr><td><a href="mod_log_config.html#logformat">LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</a></td><td> "%h %l %u %t \"%r\" +</td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥í¥°¥Õ¥¡¥¤¥ë¤Ç»ÈÍѤ¹¤ë½ñ¼°¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#loglevel">LogLevel <var>level</var></a></td><td> warn </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">ErrorLog ¤Î¾éĹÀ­¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr><td><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤¿¤á¤ËºîÀ®¤µ¤ì¤ë
-»Ò¥×¥í¥»¥¹¤ÎºÇÂç¸Ä¿ô</td></tr>
-<tr class="odd"><td><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests <var>number</var></a></td><td> 100 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">»ý³Ū¤ÊÀܳ¾å¤Çµö²Ä¤µ¤ì¤ë¥ê¥¯¥¨¥¹¥È¤Î¿ô</td></tr>
-<tr><td><a href="mpm_common.html#maxmemfree">MaxMemFree <var>KBytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4"><code>free()</code> ¤¬¸Æ¤Ð¤ì¤Ê¤¤¸Â¤ê¡¢
-¼ç¥á¥â¥ê¥¢¥í¥±¡¼¥¿¤¬ÊÝ»ý¤·Â³¤±¤é¤ì¤ë¥á¥â¥ê¤ÎºÇÂçÎÌ</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild <var>number</var></a></td><td> 10000 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¸Ä¡¹¤Î»Ò¥µ¡¼¥Ð¤¬²ÔƯÃæ¤Ë°·¤¦¥ê¥¯¥¨¥¹¥È¿ô¤Î¾å¸Â</td></tr>
-<tr><td><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread <var>number</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Limit on the number of requests that an individual thread
-will handle during its life</td></tr>
-<tr class="odd"><td><a href="prefork.html#maxspareservers">MaxSpareServers <var>number</var></a></td><td> 10 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥¢¥¤¥É¥ë¤Ê»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤ÎºÇÂç¸Ä¿ô</td></tr>
-<tr><td><a href="mpm_common.html#maxsparethreads">MaxSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤ÎºÇÂç¿ô</td></tr>
-<tr class="odd"><td><a href="mpm_netware.html#maxthreads">MaxThreads <var>number</var></a></td><td> 2048 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Set the maximum number of worker threads</td></tr>
-<tr><td><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild <var>number</var></a></td><td> 64 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Maximum number of threads per child process</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount <var>value</var></a></td><td> 1009 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum number of objects allowed to be placed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize <var>bytes</var></a></td><td> 10000 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum size (in bytes) of a document allowed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The algorithm used to select documents for removal from the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachesize">MCacheSize <var>KBytes</var></a></td><td> 100 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum amount of memory used by the cache in
-KBytes</td></tr>
-<tr class="odd"><td><a href="mod_cern_meta.html#metadir">MetaDir <var>directory</var></a></td><td> .web </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Name of the directory to find CERN-style meta information
-files</td></tr>
-<tr><td><a href="mod_cern_meta.html#metafiles">MetaFiles on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Activates CERN meta-file processing</td></tr>
-<tr class="odd"><td><a href="mod_cern_meta.html#metasuffix">MetaSuffix <var>suffix</var></a></td><td> .meta </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File name suffix for the file containg CERN-style
-meta information</td></tr>
-<tr><td><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr class="odd"><td><a href="prefork.html#minspareservers">MinSpareServers <var>number</var></a></td><td> 5 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥¢¥¤¥É¥ë¤Ê»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤ÎºÇ¾®¸Ä¿ô</td></tr>
-<tr><td><a href="mpm_common.html#minsparethreads">MinSpareServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë
-¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¿ô¤ÎºÇ¾®¿ô</td></tr>
-<tr class="odd"><td><a href="mod_file_cache.html#mmapfile">MMapFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Map a list of files into memory at startup time</td></tr>
-<tr><td><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo On|Off</a></td><td> Off </td><td>d</td><td /></tr><tr><td class="descr" colspan="4"><code>path_info</code> ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¥Õ¥¡¥¤¥ë̾¤Î°ìÉô¤È¤·¤Æ°·¤¦¤è¤¦¤Ë
-<code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> ¤ËÄÌÃΤ¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</a></td><td> NegotiatedOnly </td><td>svdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">MultiViews ¤Ç¤Î¥Þ¥Ã¥Á¥ó¥°¤Î¸¡º÷¤Ë´Þ¤Þ¤»¤ë
-¥Õ¥¡¥¤¥ë¤Î¥¿¥¤¥×¤ò»ØÄꤹ¤ë</td></tr>
-<tr><td><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost <var>addr</var>[:<var>port</var>]</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¤¿¤á¤Î IP ¥¢¥É¥ì¥¹¤ò»ØÄê</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#noproxy">NoProxy <var>host</var> [<var>host</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr><td><a href="perchild.html#numservers">NumServers <var>number</var></a></td><td> 2 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Total number of children alive at the same time</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">List of additional client certificates</td></tr>
-<tr><td><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Allows a connection to be upgraded to an SSL connection upon request</td></tr>
-<tr class="odd"><td><a href="core.html#options" id="O" name="O">Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</a></td><td> All </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ»ÈÍѲÄǽ¤Êµ¡Ç½¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_authz_host.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥Ç¥Õ¥©¥ë¥È¤Î¥¢¥¯¥»¥¹²Äǽ¤Ê¾õÂ֤ȡ¢<code class="directive">Allow</code> ¤È
-<code class="directive">Deny</code> ¤¬É¾²Á¤µ¤ì¤ë½çÈÖ¤òÀ©¸æ¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_env.html#passenv" id="P" name="P">PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥·¥§¥ë¤«¤é¤Î´Ä¶­ÊÑ¿ô¤òÅϤ¹</td></tr>
-<tr><td><a href="mpm_common.html#pidfile">PidFile <var>filename</var></a></td><td> logs/httpd.pid </td><td /><td>M</td></tr><tr><td class="descr" colspan="4">¥Ç¡¼¥â¥ó¤Î¥×¥í¥»¥¹ ID
-¤ò¥µ¡¼¥Ð¤¬µ­Ï¿¤¹¤ë¤¿¤á¤Î¥Õ¥¡¥¤¥ë</td></tr>
-<tr class="odd"><td><a href="mod_echo.html#protocolecho">ProtocolEcho On|Off</a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¥¨¥³¡¼¥µ¡¼¥Ð¤ÎÍ­¸ú̵¸ú¤òÀßÄꤷ¤Þ¤¹¡£</td></tr>
-<tr><td><a href="mod_proxy.html#proxy">&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to proxied resources</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxybadheader">ProxyBadHeader IsError|Ignore|StartBody</a></td><td> IsError </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determines how to handle bad header lines in a
-response</td></tr>
-<tr><td><a href="mod_proxy.html#proxyblock">ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Words, hosts, or domains that are banned from being
-proxied</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
-header for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥¤¥ó¥Ç¥Ã¥¯¥¹°ìÍ÷¤ÎºÇ¸å¤ËÁÞÆþ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°</td></tr>
-<tr><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤¬°ã¤¦ URL ¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë³°Éô¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤ò
-Á÷¤ë</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¸½ºß¤Î URL ¤Ø¤ÎÀµµ¬É½¸½¤Î¥Þ¥Ã¥Á¤Ë¤è¤ê
-³°Éô¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ë</td></tr>
-<tr><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤¬°ã¤¦ URL ¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë³°Éô¤Ø¤Î±Êµ×Ū¤Ê
-¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ë</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤¬°ã¤¦ URL ¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë³°Éô¤Ø¤Î°ì»þŪ¤Ê
-¥ê¥À¥¤¥ì¥¯¥È¤òÁ÷¤ë</td></tr>
-<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤¹¤Ù¤Æ¤Îʸ»ú¥»¥Ã¥È
-¤ò²ò½ü¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤¹¤Ù¤Æ¤Î¥³¥ó¥Æ¥ó¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
-¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤¹¤Ù¤Æ¤Î¥Ï¥ó¥É¥é¤ò
-²ò½ü¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿ÆþÎÏ¥Õ¥£¥ë¥¿¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¸À¸ì¤ò²ò½ü¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿½ÐÎÏ¥Õ¥£¥ë¥¿¤ò²ò½ü¤¹¤ë</td></tr>
-<tr><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td /></tr><tr><td class="descr" colspan="4">¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×¤ò
-²ò½ü¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">HTTP ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤ÎÀßÄê</td></tr>
-<tr><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">¤É¤Îǧ¾ÚºÑ¤ß¥æ¡¼¥¶¤¬¥ê¥½¡¼¥¹¤ò¥¢¥¯¥»¥¹¤Ç¤­¤ë¤«¤òÁªÂò¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a condition under which rewriting will take place
-</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
-synchronization</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
-processing</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
-engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td> MaxRedirects=10 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¤¿¥×¥í¥»¥¹¤Î CPU ¾ÃÈñÎ̤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¤¿¥×¥í¥»¥¹¤Î¥á¥â¥ê¾ÃÈñÎ̤ò
-À©¸Â¤¹¤ë</td></tr>
-<tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤éµ¯Æ°¤µ¤ì¤¿¥×¥í¥»¥¹¤¬µ¯Æ°¤¹¤ë¥×¥í¥»¥¹¤Î
-¿ô¤òÀ©¸Â¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥Û¥¹¥È¥ì¥Ù¥ë¤Î¥¢¥¯¥»¥¹À©¸æ¤È¥æ¡¼¥¶Ç§¾Ú¤È¤ÎÁê¸ßºîÍѤò»ØÄê</td></tr>
-<tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">»Ò¥×¥í¥»¥¹¤ÈÏ¢·È¤¹¤ë¤¿¤á¤Î¥Ç¡¼¥¿¤òÊݸ¤¹¤ë
-¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÆÃÄê¤Î¥ê¥¯¥¨¥¹¥È¥á¥½¥Ã¥É¤ËÂФ·¤Æ CGI ¥¹¥¯¥ê¥×¥È¤ò
-¼Â¹Ô¤¹¤ë¤è¤¦¤ËÀßÄê</td></tr>
-<tr><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">URL ¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤إޥåפ·¡¢¥Þ¥Ã¥×Àè¤ò
-CGI ¥¹¥¯¥ê¥×¥È¤Ë»ØÄê</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">URL ¤òÀµµ¬É½¸½¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ÌÃ֤إޥåפ·¡¢¥Þ¥Ã¥×Àè¤ò
-CGI ¥¹¥¯¥ê¥×¥È¤Ë»ØÄê</td></tr>
-<tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">CGI ¥¹¥¯¥ê¥×¥È¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î°ÌÃÖ¤òÄ´¤Ù¤ë¤¿¤á¤Î¼êË¡</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">CGI ¥¹¥¯¥ê¥×¥È¤Î¥¨¥é¡¼¥í¥°¥Õ¥¡¥¤¥ë¤Î¾ì½ê</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <em>bytes</em></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥¹¥¯¥ê¥×¥È¥í¥°¤Ëµ­Ï¿¤µ¤ì¤ë PUT ¤ä POST ¥ê¥¯¥¨¥¹¥È¤ÎÆâÍƤξå¸Â</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">CGI ¥¹¥¯¥ê¥×¥È¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ¤Î¾å¸Â</td></tr>
-<tr><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">CGI ¥Ç¡¼¥â¥ó¤È¤ÎÄÌ¿®¤Ë»È¤ï¤ì¤ë¥½¥±¥Ã¥È¤Î̾Á°</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
-<tr><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP ¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º</td></tr>
-<tr class="odd"><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë´Þ¤á¤ëÅŻҥ᡼¥ë¤Î
-¥¢¥É¥ì¥¹</td></tr>
-<tr><td><a href="core.html#serveralias">ServerAlias <var>hostname</var> [<var>hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤ò̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¥Þ¥Ã¥Á¤µ¤»¤Æ¤¤¤ë¤È¤­¤Ë
-»ÈÍѤµ¤ì¤ë¥Û¥¹¥È¤ÎÊÌ̾</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#serverlimit">ServerLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">ÀßÄê²Äǽ¤Ê¥µ¡¼¥Ð¥×¥í¥»¥¹¿ô¤Î¾å¸Â</td></tr>
-<tr><td><a href="core.html#servername">ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤ò¼¨¤¹¤È¤­¤Ë»È¤¦¥Û¥¹¥È̾¤È¥Ý¡¼¥È</td></tr>
-<tr class="odd"><td><a href="core.html#serverpath">ServerPath <var>URL-path</var></a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Èó¸ß´¹¤Î¥Ö¥é¥¦¥¶¤¬Ì¾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¥¢¥¯¥»¥¹¤·¤¿¤È¤­¤Î
-¤¿¤á¤Î¸ß´¹ÍÑ URL ¥Ñ¥¹Ì¾</td></tr>
-<tr><td><a href="core.html#serverroot">ServerRoot <var>directory-path</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¥µ¡¼¥Ð¤Î¥Ù¡¼¥¹¥Ç¥£¥ì¥¯¥È¥ê</td></tr>
-<tr class="odd"><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬À¸À®¤¹¤ë¥É¥­¥å¥á¥ó¥È¤Î¥Õ¥Ã¥¿¤òÀßÄê</td></tr>
-<tr><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Server HTTP ±þÅú¥Ø¥Ã¥À¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Î°À­¤Ë´ð¤Å¤¤¤Æ´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë
-</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Î°À­¤Ë´ð¤Å¤¤¤ÆÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¤Ë´Ä¶­ÊÑ¿ô¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="core.html#sethandler">SetHandler <var>handler-name</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥Þ¥Ã¥Á¤¹¤ë¥Õ¥¡¥¤¥ë¤¬¥Ï¥ó¥É¥é¤Ç½èÍý¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#setinputfilter">SetInputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ä POST ¤ÎÆþÎϤò½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">¥µ¡¼¥Ð¤Î±þÅú¤ò½èÍý¤¹¤ë¥Õ¥£¥ë¥¿¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">include Í×ÁǤò½ªÎ»¤µ¤»¤ëʸ»úÎó</td></tr>
-<tr><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">SSI ¤Î¥¨¥é¡¼¤¬¤¢¤Ã¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">include Í×ÁǤò³«»Ï¤¹¤ëʸ»úÎó</td></tr>
-<tr><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÆüÉÕ¤±¤ò¸½¤¹Ê¸»úÎó¤Î½ñ¼°¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">̤ÄêµÁ¤ÎÊÑ¿ô¤¬ echo ¤µ¤ì¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤ëʸ»úÎó</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslengine">SSLEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
-operations</td></tr>
-<tr><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
-keys</td></tr>
-<tr><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-proxy handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
-Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
-source</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Allow access only when an arbitrarily complex
-boolean expression is true</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Deny access when SSL is not used for the
-HTTP request</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of the global/inter-process SSL Session
-Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Number of seconds before an SSL session expires
-in the Session Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
-Certificate verification</td></tr>
-<tr><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î¿ô</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤Î¿ô</td></tr>
-<tr><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td /></tr><tr><td class="descr" colspan="4">CGI ¥×¥í¥°¥é¥à¤Î¥æ¡¼¥¶¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¡¢¥°¥ë¡¼¥×¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">ÀßÄê²Äǽ¤Ê»Ò¥×¥í¥»¥¹Ëè¤Î¥¹¥ì¥Ã¥É¿ô¤Î¾å¸Â¤ò
-ÀßÄꤷ¤Þ¤¹</td></tr>
-<tr><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">»Ò¥×¥í¥»¥¹¤½¤ì¤¾¤ì¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¿ô</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">³Æ¥¤¥Ù¥ó¥È¤Ë¤Ä¤¤¤Æ¡¢¥ê¥¯¥¨¥¹¥È¤ò¼ºÇÔ¤µ¤»¤ë¤Þ¤Ç¤Ë¥µ¡¼¥Ð¤¬
-ÂԤĻþ´Ö¤òÀßÄê</td></tr>
-<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥í¥°¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤ò»ØÄê</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td /></tr><tr class="odd"><td class="descr" colspan="4"><code>mime.types</code> ¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">´Ä¶­¤«¤éÊÑ¿ô¤ò¼è¤ê½ü¤¯</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|Dns</a></td><td> On </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤Î̾Á°¤È¥Ý¡¼¥È¤ò·èÄꤹ¤ëÊýË¡¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤ËÍѤ¤¤ë¥æ¡¼¥¶ ID</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥æ¡¼¥¶ÀìÍѥǥ£¥ì¥¯¥È¥ê¤Î°ÌÃÖ</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">ÆÃÄê¤Î¥Û¥¹¥È̾¤ä IP ¥¢¥É¥ì¥¹¤Î¤ß¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
-°Ï¤à</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥Í¥Ã¥È¥ï¡¼¥¯Àܳ¤Î¼õ¤±ÉÕ¤±¤Ë accept() ¤òAcceptEx ¤ÎÂå¤ï¤ê¤Ë»È¤¦</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¼Â¹Ô¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
-²òÀϤ¹¤ë</td></tr>
-</table></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/quickreference.html.ko.euc-kr b/docs/manual/mod/quickreference.html.ko.euc-kr
deleted file mode 100644
index 587cceca71..0000000000
--- a/docs/manual/mod/quickreference.html.ko.euc-kr
+++ /dev/null
@@ -1,676 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Áö½Ã¾î ºü¸¥ÂüÁ¶ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="directive-index">
-<div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">¸ðµâ</a></div>
-<div id="preamble"><h1>Áö½Ã¾î ºü¸¥ÂüÁ¶</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ ¼³Á¤Áö½Ã¾î °¢°¢ÀÇ ¿ëµµ, ±âº»°ª, »óÅÂ,
- »ç¿ëÀå¼Ò¸¦ º¸¿©ÁØ´Ù. À̵éÀº <a href="directive-dict.html">Áö½Ã¾î »çÀü</a>¿¡¼­ ¼³¸íÇÑ´Ù.</p>
-
- <p>ù¹ø° ¿­Àº Áö½Ã¾î À̸§°ú ¿ëµµ¸¦ ¾Ë·ÁÁØ´Ù. µÎ¹ø° ¿­Àº
- Áö½Ã¾î¿¡ ±âº»°ªÀÌ ÀÖ´Ù¸é ±âº»°ªÀ» º¸¿©ÁØ´Ù. ¸¸¾à ±âº»°ªÀÌ
- ³Ê¹« ±æ´Ù¸é, "+" ±âÈ£·Î »ý·«ÇßÀ½À» ¾Ë¸°´Ù.</p>
-
- <p>¼¼¹ø°¿Í ³×¹ø° ¿­Àº °¢°¢ ¾Æ·¡ Ç¥¿¡ µû¶ó Áö½Ã¾î¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Â Àå¼Ò¿Í Áö½Ã¾îÀÇ »óŸ¦ ³ªÅ¸³½´Ù.</p>
- </div>
-<div id="directive-ref"><table id="legend">
-<tr><td class="letters"><span><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#G">&nbsp;G&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#K">&nbsp;K&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#O">&nbsp;O&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#T">&nbsp;T&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></span></td>
-<td><table>
-
- <tr><th>s</th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
- <tr><th>v</th><td>°¡»óÈ£½ºÆ®</td></tr>
- <tr><th>d</th><td>directory</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table></td>
-<td><table>
-
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extension</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table></td></tr>
-</table>
-<table class="qref">
-<tr><td><a href="mpm_common.html#acceptmutex" id="A" name="A">AcceptMutex Default|<var>method</var></a></td><td> Default </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Method that Apache uses to serialize multiple children
-accepting requests on network sockets</td></tr>
-<tr class="odd"><td><a href="core.html#acceptpathinfo">AcceptPathInfo On|Off|Default</a></td><td> Default </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Resources accept trailing pathname information</td></tr>
-<tr><td><a href="core.html#accessfilename">AccessFileName <var>filename</var> [<var>filename</var>] ...</a></td><td> .htaccess </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Name of the distributed configuration file</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#action">Action <var>action-type</var> <var>cgi-script</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ƯÁ¤ Çڵ鷯³ª content-type¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
-»ç¿ëÇÑ´Ù</td></tr>
-<tr><td><a href="mod_autoindex.html#addalt">AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÆÄÀϸíÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ ¼³¸í±Û</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">MIME-encodingÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ
-¼³¸í±Û</td></tr>
-<tr><td><a href="mod_autoindex.html#addaltbytype">AddAltByType <var>string</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">MIME content-typeÀ¸·Î ¼±ÅÃÇÑ ¾ÆÀÌÄÜ´ë½Å »ç¿ëÇÒ ÆÄÀÏ
-¼³¸í±Û</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addcharset">AddCharset <var>charset</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the given filename extensions to the specified content
-charset</td></tr>
-<tr><td><a href="core.html#adddefaultcharset">AddDefaultCharset On|Off|<var>charset</var></a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Default character set to be added for a
-response without an explicit character set</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#adddescription">AddDescription <var>string file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÆÄÀÏ¿¡ ´ëÇÑ ¼³¸í</td></tr>
-<tr><td><a href="mod_mime.html#addencoding">AddEncoding <var>MIME-enc</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions to the specified encoding
-type</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addhandler">AddHandler <var>handler-name</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps the filename extensions to the specified
-handler</td></tr>
-<tr><td><a href="mod_autoindex.html#addicon">AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">À̸§À¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
-[<var>MIME-encoding</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-encodingÀ¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr><td><a href="mod_autoindex.html#addiconbytype">AddIconByType <var>icon</var> <var>MIME-type</var>
-[<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">MIME content-typeÀ¸·Î ¼±ÅÃÇÑ ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#addinputfilter">AddInputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-client requests</td></tr>
-<tr><td><a href="mod_mime.html#addlanguage">AddLanguage <var>MIME-lang</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extension to the specified content
-language</td></tr>
-<tr class="odd"><td><a href="mod_info.html#addmoduleinfo">AddModuleInfo <var>module-name</var> <var>string</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adds additional information to the module
-information displayed by the server-info handler</td></tr>
-<tr><td><a href="mod_mime.html#addoutputfilter">AddOutputFilter <var>filter</var>[;<var>filter</var>...]
-<var>extension</var> [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps filename extensions to the filters that will process
-responses from the server</td></tr>
-<tr class="odd"><td><a href="core.html#addoutputfilterbytype">AddOutputFilterByType <var>filter</var>[;<var>filter</var>...]
-<var>MIME-type</var> [<var>MIME-type</var>] ...</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">assigns an output filter to a particular MIME-type</td></tr>
-<tr><td><a href="mod_mime.html#addtype">AddType <var>MIME-type</var> <var>extension</var>
-[<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions onto the specified content
-type</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#alias">Alias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÑ´Ù</td></tr>
-<tr><td><a href="mod_alias.html#aliasmatch">AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ÆÄÀϽýºÅÛ Àå¼Ò·Î
-´ëÀÀÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#allow"> Allow from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¼­¹öÀÇ ÀϺο¡ Á¢±ÙÇÒ ¼ö Àִ ȣ½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_proxy.html#allowconnect">AllowCONNECT <var>port</var> [<var>port</var>] ...</a></td><td> 443 563 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ports that are allowed to <code>CONNECT</code> through the
-proxy</td></tr>
-<tr class="odd"><td><a href="core.html#allowencodedslashes">AllowEncodedSlashes On|Off</a></td><td> Off </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines whether encoded path separators in URLs are allowed to
-be passed through</td></tr>
-<tr><td><a href="core.html#allowoverride">AllowOverride All|None|<var>directive-type</var>
-[<var>directive-type</var>] ...</a></td><td> All </td><td>d</td><td>C</td></tr><tr><td class="descr" colspan="4">Types of directives that are allowed in
-<code>.htaccess</code> files</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous">Anonymous <var>user</var> [<var>user</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¾ÏÈ£°Ë»ç¾øÀÌ Á¢±ÙÀ» Çã¿ëÇÒ »ç¿ëÀÚ ¾ÆÀ̵ðµéÀ»
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_logemail">Anonymous_LogEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">ÀÔ·ÂÇÑ ¾ÏÈ£¸¦ ¿À·ù·Î±×¿¡ ±â·ÏÇÒÁö ¿©ºÎ</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¾ÏÈ£°¡ ¾ø¾îµµ °¡´ÉÇÑÁö ¿©ºÎ</td></tr>
-<tr><td><a href="mod_authn_anon.html#anonymous_nouserid">Anonymous_NoUserID On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">»ç¿ëÀÚ ¾ÆÀ̵𰡠¾ø¾îµµ °¡´ÉÇÏÁö ¿©ºÎ</td></tr>
-<tr class="odd"><td><a href="mod_authn_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail On|Off</a></td><td> Off </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¾ÏÈ£°¡ ¿Ã¹Ù¸¥ Çü½ÄÀÇ ÀüÀÚ¿ìÆí ÁÖ¼ÒÀÎÁö °Ë»ç
-¿©ºÎ</td></tr>
-<tr><td><a href="perchild.html#assignuserid">AssignUserID <var>user-id</var> <var>group-id</var></a></td><td></td><td>v</td><td>M</td></tr><tr><td class="descr" colspan="4">Tie a virtual host to a user and group ID</td></tr>
-<tr class="odd"><td><a href="mod_auth_basic.html#authbasicauthoritative">AuthBasicAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÀÎÁõ°ú ±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ¿¡ ³Ñ°ÜÁÙÁö °áÁ¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_auth_basic.html#authbasicprovider">AuthBasicProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÀÌ À§Ä¡¿¡ ´ëÇÑ ÀÎÁõÁ¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authdbmgroupfile">AuthDBMGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º
-ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_authn_dbm.html#authdbmtype">AuthDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">ÀÎÁõÇÒ »ç¿ëÀÚ¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º
-ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_authn_default.html#authdefaultauthoritative">AuthDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÀÎÁõÀ» Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm MD5|MD5-sess</a></td><td> MD5 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">digest authentication¿¡¼­ challenge¿Í response
-hash¸¦ °è»êÇÏ´Â ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÑ´Ù</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain <var>URI</var> [<var>URI</var>] ...</a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">digest authentication¿¡¼­ °°Àº º¸È£¿µ¿ª¿¡ ¼ÓÇÏ´Â
-URIµé</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck On|Off</a></td><td> Off </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¼­¹ö°¡ º¸³»´Â nonce-count¸¦ °Ë»çÇÒÁö ¿©ºÎ</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat <var>format</var></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">nonce¸¦ ¸¸µå´Â ¹æ¹ýÀ» °áÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime <var>seconds</var></a></td><td> 300 </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¼­¹ö nonce°¡ À¯È¿ÇÑ ±â°£</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestprovider">AuthDigestProvider On|Off|<var>provider-name</var>
-[<var>provider-name</var>] ...</a></td><td> On </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">ÀÌ À§Ä¡¿¡ ´ëÇÑ ÀÎÁõÁ¦°øÀÚ¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop none|auth|auth-int [auth|auth-int]</a></td><td> auth </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">digest authentication°¡ »ç¿ëÇÒ
-º¸È£¼öÁØ(quality-of-protection)À» ÁöÁ¤ÇÑ´Ù.</td></tr>
-<tr><td><a href="mod_auth_digest.html#authdigestshmemsize">AuthDigestShmemSize <var>size</var></a></td><td> 1000 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®¸¦ ÃßÀûÇϱâÀ§ÇØ ÇÒ´çÇÏ´Â °øÀ¯¸Þ¸ð¸®·®</td></tr>
-<tr class="odd"><td><a href="mod_authz_groupfile.html#authgroupfile">AuthGroupFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÀÎÁõ¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ±×·ì ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapauthoritative">AuthLDAPAuthoritative on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Prevent other authentication modules from
-authenticating the user if this one fails</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapbinddn">AuthLDAPBindDN <em>distinguished-name</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Optional DN to use in binding to the LDAP server</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapbindpassword">AuthLDAPBindPassword <em>password</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Password used in conjuction with the bind DN</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapcharsetconfig">AuthLDAPCharsetConfig <em>file-path</em></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Language to charset conversion configuration file</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapcomparednonserver">AuthLDAPCompareDNOnServer on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the LDAP server to compare the DNs</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapdereferencealiases">AuthLDAPDereferenceAliases never|searching|finding|always</a></td><td> Always </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">When will the module de-reference aliases</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapenabled"> AuthLDAPEnabled on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Turn on or off LDAP authentication</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapfrontpagehack">AuthLDAPFrontPageHack on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Allow LDAP authentication to work with MS FrontPage</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapgroupattribute">AuthLDAPGroupAttribute <em>attribute</em></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">LDAP attributes used to check for group membership</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapgroupattributeisdn">AuthLDAPGroupAttributeIsDN on|off</a></td><td> on </td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Use the DN of the client username when checking for
-group membership</td></tr>
-<tr><td><a href="mod_auth_ldap.html#authldapremoteuserisdn">AuthLDAPRemoteUserIsDN on|off</a></td><td> off </td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Use the DN of the client username to set the REMOTE_USER
-environment variable</td></tr>
-<tr class="odd"><td><a href="mod_auth_ldap.html#authldapurl">AuthLDAPUrl <em>url</em></a></td><td></td><td>dh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL specifying the LDAP search parameters</td></tr>
-<tr><td><a href="core.html#authname">AuthName <var>auth-domain</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Authorization realm for use in HTTP
-authentication</td></tr>
-<tr class="odd"><td><a href="core.html#authtype">AuthType Basic|Digest</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Type of user authentication</td></tr>
-<tr><td><a href="mod_authn_file.html#authuserfile">AuthUserFile <var>file-path</var></a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÀÎÁõÇÒ »ç¿ëÀÚ¸í¿Í ¾ÏÈ£ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â ¹®ÀÚÆÄÀϸíÀ»
-ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_authz_dbm.html#authzdbmauthoritative">AuthzDBMAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><td><a href="mod_authz_dbm.html#authzdbmtype">AuthzDBMType default|SDBM|GDBM|NDBM|DB</a></td><td> default </td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">¾ÏÈ£¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_authz_default.html#authzdefaultauthoritative">AuthzDefaultAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><td><a href="mod_authz_groupfile.html#authzgroupfileauthoritative">AuthzGroupFileAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr class="odd"><td><a href="mod_authz_owner.html#authzownerauthoritative">AuthzOwnerAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr><td><a href="mod_authz_user.html#authzuserauthoritative">AuthzUserAuthoritative On|Off</a></td><td> On </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">±ÇÇѺο©¸¦ Àú¼öÁØ ¸ðµâ·Î ³Ñ°ÜÁÙÁö ¿©ºÎ</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#browsermatch" id="B" name="B">BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
-[[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">HTTP User-Agent¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í User-Agent¿¡ µû¶ó ȯ°æº¯¼ö¸¦
-¼³Á¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachedefaultexpire" id="C" name="C">CacheDefaultExpire <var>seconds</var></a></td><td> 3600 (one hour) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¸¸±â½Ã°£À» ÁöÁ¤ÇÏÁö¾ÊÀº ¹®¼­¸¦ ij½¬ÇÒ ±âº» ±â°£.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachedirlength">CacheDirLength <var>length</var></a></td><td> 2 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">ÇÏÀ§µð·ºÅ丮¸íÀÇ ¹®ÀÚ°³¼ö</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachedirlevels">CacheDirLevels <var>levels</var></a></td><td> 3 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">ij½¬ÀÇ ÇÏÀ§µð·ºÅ丮 ±íÀÌ.</td></tr>
-<tr><td><a href="mod_cache.html#cachedisable">CacheDisable <var> url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">ƯÁ¤ URLÀ» ij½¬ÇÏÁö ¾Ê´Â´Ù</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheenable">CacheEnable <var>cache_type</var> <var>url-string</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">ÁöÁ¤ÇÑ ÀúÀå°ü¸®ÀÚ¸¦ »ç¿ëÇÏ¿© ÁöÁ¤ÇÑ URLÀ» ij½¬ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_disk_cache.html#cacheexpirycheck">CacheExpiryCheck On|Off</a></td><td> On </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">ij½¬¿¡¼­ ÆÄÀÏÀ» ãÀ»¶§ ¸¸±â½Ã°£À» °í·ÁÇÒÁö ¿©ºÎ</td></tr>
-<tr class="odd"><td><a href="mod_file_cache.html#cachefile">CacheFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">½ÃÀ۽à ¿©·¯ ÆÄÀÏ ÇÚµéÀ» ij½¬ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_cache.html#cacheforcecompletion">CacheForceCompletion <var>Percentage</var></a></td><td> 60 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">¿äûÀÌ Ãë¼ÒµÇ´õ¶óµµ ¼­¹ö°¡ ÆÄÀÏÀ» °è¼Ó ij½¬ÇϱâÀ§ÇØ
-ÇÊ¿äÇÑ ¹®¼­ÀÇ ¼­ºñ½º·ü.</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcclean">CacheGcClean <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL¿¡ ÇØ´çÇÏ´Â º¯ÇÏÁö¾ÊÀº ij½¬ÆÄÀÏÀ» À¯ÁöÇÒ ½Ã°£</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcdaily">CacheGcDaily <var>time</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">¸ÅÀÏ °¡ºñÁöÄ÷¢Å͸¦ ½ÇÇàÇÒ ¹Ýº¹ ½Ã°£ (24½Ã ½Ã°è)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcinterval">CacheGcInterval <var>hours</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">°¡ºñÁöÄ÷¢Å͸¦ ½ÇÇàÇÏ´Â °£°Ý.</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachegcmemusage">CacheGcMemUsage <var>KBytes</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">°¡ºñÁöÄ÷¢ÅÍ°¡ »ç¿ëÇÒ ÃÖ´ë ¸Þ¸ð¸®·® (kilobyte ´ÜÀ§)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachegcunused">CacheGcUnused <var>hours</var> <var>url-string</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">URL¿¡ ÇØ´çÇÏ´Â ÂüÁ¶µÇÁö¾ÊÀº ij½¬ÆÄÀÏÀ» À¯ÁöÇÒ ±â°£.</td></tr>
-<tr><td><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ij½¬ÇÏÁö¾Ê´Â ³»¿ëÀ» ¿äûÇÔÀ» ¹«½ÃÇÑ´Ù.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod On|Off</a></td><td> Off </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">ÀÀ´ä¿¡ Last Modified Çì´õ°¡ ¾ø´Ù´Â »ç½ÇÀ» ¹«½ÃÇÑ´Ù.</td></tr>
-<tr><td><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor <var>float</var></a></td><td> 0.1 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">LastModified ½Ã°£À¸·Î ¸¸±â½Ã°£À» °è»êÇϴµ¥ »ç¿ëÇÏ´Â
-°è¼ö.</td></tr>
-<tr class="odd"><td><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire <var>seconds</var></a></td><td> 86400 (ÇÏ·ç) </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¹®¼­¸¦ ij½¬ÇÏ´Â ÃÊ´ÜÀ§ ÃÖ´ë½Ã°£</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachemaxfilesize">CacheMaxFileSize <var>bytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">ij½¬¿¡ ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ´ëÅ©±â (¹ÙÀÌÆ® ´ÜÀ§)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheminfilesize">CacheMinFileSize <var>bytes</var></a></td><td> 1 </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">ij½¬¿¡ ÀúÀåÇÒ ¹®¼­ÀÇ ÃÖ¼ÒÅ©±â (¹ÙÀÌÆ® ´ÜÀ§)</td></tr>
-<tr><td><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs On|Off</a></td><td> Off </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Allows content-negotiated documents to be
-cached by proxy servers</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cacheroot">CacheRoot <var>directory</var></a></td><td></td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">ij½¬ ÆÄÀÏÀ» ÀúÀåÇÒ µð·ºÅ丮 root</td></tr>
-<tr><td><a href="mod_disk_cache.html#cachesize">CacheSize <var>KBytes</var></a></td><td> 1000000 </td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">ij½¬·Î »ç¿ëÇÒ ÃÖ´ë µð½ºÅ©°ø°£ (KByte ´ÜÀ§)</td></tr>
-<tr class="odd"><td><a href="mod_disk_cache.html#cachetimemargin">CacheTimeMargin <var>?</var></a></td><td> ? </td><td>sv</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¹®¼­¸¦ ij½¬ÇÒ Ãּҽð£ ÇÑ°è</td></tr>
-<tr><td><a href="core.html#cgimapextension">CGIMapExtension <var>cgi-path</var> <var>.extension</var></a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetdefault">CharsetDefault <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">º¯È¯ÇÒ ¹®ÀÚÁýÇÕ</td></tr>
-<tr><td><a href="mod_charset_lite.html#charsetoptions">CharsetOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoImpl +</td><td>svdh</td><td>X</td></tr><tr><td class="descr" colspan="4">¹®ÀÚÁýÇÕ º¯È¯ ±â´ÉÀ» ¼³Á¤</td></tr>
-<tr class="odd"><td><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc <var>charset</var></a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">ÆÄÀÏ ¿øº»ÀÇ ¹®ÀÚÁýÇÕ</td></tr>
-<tr><td><a href="mod_speling.html#checkspelling">CheckSpelling on|off</a></td><td> Off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">¸ÂÃã¹ý ¸ðµâÀ» »ç¿ëÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="perchild.html#childperuserid">ChildPerUserID <var>user-id</var> <var>group-id</var>
-<var>num-children</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Specify user ID and group ID for a number of child
-processes</td></tr>
-<tr><td><a href="core.html#contentdigest">ContentDigest On|Off</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Enables the generation of <code>Content-MD5</code> HTTP Response
-headers</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiedomain">CookieDomain <em>domain</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The domain to which the tracking cookie applies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookieexpires">CookieExpires <em>expiry-period</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Expiry time for the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#cookielog">CookieLog <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename for the logging of cookies</td></tr>
-<tr><td><a href="mod_usertrack.html#cookiename">CookieName <em>token</em></a></td><td> Apache </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Name of the tracking cookie</td></tr>
-<tr class="odd"><td><a href="mod_usertrack.html#cookiestyle">CookieStyle
- <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></a></td><td> Netscape </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Format of the cookie header field</td></tr>
-<tr><td><a href="mod_usertrack.html#cookietracking">CookieTracking on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables tracking cookie</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory <var>directory</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Directory where Apache attempts to
-switch before dumping core</td></tr>
-<tr><td><a href="mod_log_config.html#customlog">CustomLog <var>file</var>|<var>pipe</var>
-<var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets filename and format of log file</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#dav" id="D" name="D">Dav On|Off|<var>provider-name</var></a></td><td> Off </td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">WebDAV HTTP ¸Þ½áµå¸¦ ½ÃÀÛÇÑ´Ù</td></tr>
-<tr><td><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity on|off</a></td><td> off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">PROPFINDÀÇ Depth: Infinity ¿äûÀ» Çã°¡ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_dav_lock.html#davgenericlockdb">DavGenericLockDB <var>file-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the DAV lock database</td></tr>
-<tr><td><a href="mod_dav_fs.html#davlockdb">DavLockDB <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">DAV Àá±Ý µ¥ÀÌÅͺ£À̽º À§Ä¡</td></tr>
-<tr class="odd"><td><a href="mod_dav.html#davmintimeout">DavMinTimeout <var>seconds</var></a></td><td> 0 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¼­¹ö°¡ DAV ÀÚ¿ø¿¡ ´ëÇØ À¯ÁöÇÒ Àá±ÝÀÇ Ãּҽð£</td></tr>
-<tr><td><a href="mod_autoindex.html#defaulticon">DefaultIcon <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ƯÁ¤ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÏÁö¾ÊÀº ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets all files in the given scope to the specified
-language</td></tr>
-<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">MIME content-type that will be sent if the
-server cannot determine a type in any other way</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">zlibÀÌ Çѹø¿¡ ¾ÐÃàÇÒ Å©±â</td></tr>
-<tr><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ãâ·ÂÀ» ¾î´ÀÁ¤µµ ¾ÐÃàÇϴ°¡</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote [<var>type</var>] <var>notename</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¾ÐÃà·üÀ» ·Î±×¿¡ ±â·ÏÇÑ´Ù</td></tr>
-<tr><td><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel <var>value</var></a></td><td> 9 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">zlibÀÌ ¾ÐÃàÇÒ¶§ »ç¿ëÇÏ´Â ¸Þ¸ð¸®·®</td></tr>
-<tr class="odd"><td><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize <var>value</var></a></td><td> 15 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Zlib ¾ÐÃà window size</td></tr>
-<tr><td><a href="mod_authz_host.html#deny"> Deny from all|<var>host</var>|env=<var>env-variable</var>
-[<var>host</var>|env=<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">¼­¹ö Á¢±ÙÀ» °ÅºÎÇÒ È£½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#directory">&lt;Directory <var>directory-path</var>&gt;
-... &lt;/Directory&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</td></tr>
-<tr><td><a href="mod_dir.html#directoryindex">DirectoryIndex
- <var>local-url</var> [<var>local-url</var>] ...</a></td><td> index.html </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ µð·ºÅ丮¸¦ ¿äûÇÒ¶§ ã¾Æº¼ ÀÚ¿ø ¸ñ·Ï</td></tr>
-<tr class="odd"><td><a href="core.html#directorymatch">&lt;DirectoryMatch <var>regex</var>&gt;
-... &lt;/DirectoryMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose directives that apply to
-file-system directories matching a regular expression and their
-subdirectories</td></tr>
-<tr><td><a href="mod_dir.html#directoryslash">DirectorySlash On|Off</a></td><td> On </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¸¶Áö¸· ½½·¡½¬ ¸®´ÙÀÌ·º¼ÇÀ» Å°°í ²ö´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#documentroot">DocumentRoot <var>directory-path</var></a></td><td> /usr/local/apache/h +</td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Directory that forms the main document tree visible
-from the web</td></tr>
-<tr><td><a href="mpm_common.html#enableexceptionhook" id="E" name="E">EnableExceptionHook On|Off</a></td><td> Off </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Enables a hook that runs exception handlers
-after a crash</td></tr>
-<tr class="odd"><td><a href="core.html#enablemmap">EnableMMAP On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Use memory-mapping to read files during delivery</td></tr>
-<tr><td><a href="core.html#enablesendfile">EnableSendfile On|Off</a></td><td> On </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Use the kernel sendfile support to deliver files to the client</td></tr>
-<tr class="odd"><td><a href="core.html#errordocument">ErrorDocument <var>error-code</var> <var>document</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">What the server will return to the client
-in case of an error</td></tr>
-<tr><td><a href="core.html#errorlog"> ErrorLog <var>file-path</var>|syslog[:<var>facility</var>]</a></td><td> logs/error_log (Uni +</td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Location where the server will log errors</td></tr>
-<tr class="odd"><td><a href="mod_example.html#example">Example</a></td><td></td><td>svdh</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">¾ÆÆÄÄ¡ ¸ðµâ API¸¦ ¼³¸íÇϱâÀ§ÇÑ ¿¹Á¦ Áö½Ã¾î</td></tr>
-<tr><td><a href="mod_expires.html#expiresactive">ExpiresActive On|Off</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4"><code>Expires</code> Çì´õ¸¦ »ý¼ºÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_expires.html#expiresbytype">ExpiresByType <var>MIME-type</var>
-<var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">MIME typeÀ¸·Î <code>Expires</code> Çì´õ°ªÀ» ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_expires.html#expiresdefault">ExpiresDefault <var>&lt;code&gt;seconds</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">¸¸±â½Ã°£À» °è»êÇÏ´Â ±âº» ¾Ë°í¸®Áò</td></tr>
-<tr class="odd"><td><a href="mod_status.html#extendedstatus">ExtendedStatus On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">°¢ ¿äû¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »óÅ Á¤º¸¸¦ ±â·ÏÇÑ´Ù</td></tr>
-<tr><td><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine <var>filtername</var> <var>parameters</var></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">¿ÜºÎ ÇÊÅ͸¦ Á¤ÀÇÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions <var>option</var> [<var>option</var>] ...</a></td><td> DebugLevel=0 NoLogS +</td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4"><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="core.html#fileetag" id="F" name="F">FileETag <var>component</var> ...</a></td><td> INode MTime Size </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">File attributes used to create the ETag
-HTTP response header</td></tr>
-<tr class="odd"><td><a href="core.html#files">&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Contains directives that apply to matched
-filenames</td></tr>
-<tr><td><a href="core.html#filesmatch">&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply to regular-expression matched
-filenames</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not
-found</td></tr>
-<tr><td><a href="core.html#forcetype">ForceType <var>MIME-type</var>|None</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Forces all matching files to be served with the specified
-MIME content-type</td></tr>
-<tr class="odd"><td><a href="mod_log_forensic.html#forensiclog">ForensicLog <var>filename</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets filename of the forensic log</td></tr>
-<tr><td><a href="mpm_common.html#group" id="G" name="G">Group <var>unix-group</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Group under which the server will answer
-requests</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#header" id="H" name="H">Header [<var>condition</var>] set|append|add|unset|echo
-<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP response headers</td></tr>
-<tr><td><a href="mod_autoindex.html#headername">HeaderName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÆÄÀϸñ·Ï À§¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</td></tr>
-<tr class="odd"><td><a href="core.html#hostnamelookups">HostnameLookups On|Off|Double</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enables DNS lookups on client IP addresses</td></tr>
-<tr><td><a href="mod_ident.html#identitycheck" id="I" name="I">IdentityCheck On|Off</a></td><td> Off </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables logging of the RFC 1413 identity of the remote
-user</td></tr>
-<tr class="odd"><td><a href="mod_ident.html#identitychecktimeout">IdentityCheckTimeout <var>seconds</var></a></td><td> 30 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the timeout duration for ident requests</td></tr>
-<tr><td><a href="core.html#ifdefine">&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
- &lt;/IfDefine&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Encloses directives that will be processed only
-if a test is true at startup</td></tr>
-<tr class="odd"><td><a href="core.html#ifmodule">&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
- &lt;/IfModule&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Encloses directives that are processed conditional on the
-presence or absence of a specific module</td></tr>
-<tr><td><a href="mod_version.html#ifversion">&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
-&lt;/IfVersion&gt;</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">¹öÀüº° ¼³Á¤À» ¹­´Â´Ù</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapbase">ImapBase map|referer|<var>URL</var></a></td><td> http://servername/ </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Default <code>base</code> for imagemap files</td></tr>
-<tr><td><a href="mod_imap.html#imapdefault">ImapDefault error|nocontent|map|referer|<var>URL</var></a></td><td> nocontent </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr>
-<tr class="odd"><td><a href="mod_imap.html#imapmenu">ImapMenu none|formatted|semiformatted|unformatted</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action if no coordinates are given when calling
-an imagemap</td></tr>
-<tr><td><a href="core.html#include">Include <var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">Includes other configuration files from within
-the server configuration files</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexignore">IndexIgnore <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">µð·ºÅ丮 ¸ñ·Ï¿¡¼­ ¼û±æ ÆÄÀϸñ·ÏÀ» Ãß°¡ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_autoindex.html#indexoptions">IndexOptions [+|-]<var>option</var> [[+|-]<var>option</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">µð·ºÅ丮 ¸ñ·ÏÀÇ ¿©·¯ ¼³Á¤µé</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault Ascending|Descending
-Name|Date|Size|Description</a></td><td> Ascending Name </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">µð·ºÅ丮 ¸ñ·ÏÀÇ ±âº» ¼ø¼­¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_autoindex.html#indexstylesheet">IndexStyleSheet <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">µð·ºÅ丮 ¸ñ·Ï¿¡ CSS ½ºÅ¸ÀϽ¬Æ®¸¦ Ãß°¡ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the error log</td></tr>
-<tr><td><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery on|off</a></td><td> on </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
-ISAPI extensions to the query field</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapicachefile">ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
-...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ISAPI .dll files to be loaded at startup</td></tr>
-<tr><td><a href="mod_isapi.html#isapifakeasync">ISAPIFakeAsync on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Fake asynchronous support for ISAPI callbacks</td></tr>
-<tr class="odd"><td><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported on|off</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Log unsupported feature requests from ISAPI
-extensions</td></tr>
-<tr><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
-extensions</td></tr>
-<tr class="odd"><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enables HTTP persistent connections</td></tr>
-<tr><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>seconds</var></a></td><td> 15 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for subsequent
-requests on a persistent connection</td></tr>
-<tr class="odd"><td><a href="mod_negotiation.html#languagepriority" id="L" name="L">LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The precendence of language variants for cases where
-the client does not express a preference</td></tr>
-<tr><td><a href="mod_ldap.html#ldapcacheentries">LDAPCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum number of entries in the primary LDAP cache</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapcachettl">LDAPCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that cached items remain valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapopcacheentries">LDAPOpCacheEntries <var>number</var></a></td><td> 1024 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Number of entries used to cache LDAP compare
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapopcachettl">LDAPOpCacheTTL <var>seconds</var></a></td><td> 600 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Time that entries in the operation cache remain
-valid</td></tr>
-<tr><td><a href="mod_ldap.html#ldapsharedcachefile">LDAPSharedCacheFile <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the shared memory chache file</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldapsharedcachesize">LDAPSharedCacheSize <var>bytes</var></a></td><td> 102400 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Size in bytes of the shared-memory cache</td></tr>
-<tr><td><a href="mod_ldap.html#ldaptrustedca">LDAPTrustedCA <var>directory-path/filename</var></a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Sets the file containing the trusted Certificate Authority certificate or database</td></tr>
-<tr class="odd"><td><a href="mod_ldap.html#ldaptrustedcatype">LDAPTrustedCAType <var>type</var></a></td><td></td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Specifies the type of the Certificate Authority file</td></tr>
-<tr><td><a href="core.html#limit">&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/Limit&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Restrict enclosed access controls to only certain HTTP
-methods</td></tr>
-<tr class="odd"><td><a href="core.html#limitexcept">&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
- &lt;/LimitExcept&gt;</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Restrict access controls to all HTTP methods
-except the named ones</td></tr>
-<tr><td><a href="core.html#limitinternalrecursion">LimitInternalRecursion <var>number</var> [<var>number</var>]</a></td><td> 10 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Determine maximum number of internal redirects and nested
-subrequests</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestbody">LimitRequestBody <var>bytes</var></a></td><td> 0 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Restricts the total size of the HTTP request body sent
-from the client</td></tr>
-<tr><td><a href="core.html#limitrequestfields">LimitRequestFields <var>number</var></a></td><td> 100 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of HTTP request header fields that
-will be accepted from the client</td></tr>
-<tr class="odd"><td><a href="core.html#limitrequestfieldsize">LimitRequestFieldsize <var>bytes</var></a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the size of the HTTP request header allowed from the
-client</td></tr>
-<tr><td><a href="core.html#limitrequestline">LimitRequestLine <var>bytes</var></a></td><td> 8190 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Limit the size of the HTTP request line that will be accepted
-from the client</td></tr>
-<tr class="odd"><td><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody <var>bytes</var></a></td><td> 1000000 </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the size of an XML-based request body</td></tr>
-<tr><td><a href="mpm_common.html#listen">Listen [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">IP addresses and ports that the server
-listens to</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#listenbacklog">ListenBacklog <var>backlog</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum length of the queue of pending connections</td></tr>
-<tr><td><a href="mod_so.html#loadfile">LoadFile <em>filename</em> [<em>filename</em>] ...</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">ÁöÁ¤ÇÑ ¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀδÙ</td></tr>
-<tr class="odd"><td><a href="mod_so.html#loadmodule">LoadModule <em>module filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">¸ñÀûÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ ÀоîµéÀÌ°í, »ç¿ë°¡´ÉÇÑ
-¸ðµâ ¸ñ·Ï¿¡ Ãß°¡ÇÑ´Ù</td></tr>
-<tr><td><a href="core.html#location">&lt;Location
- <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Applies the enclosed directives only to matching
-URLs</td></tr>
-<tr class="odd"><td><a href="core.html#locationmatch">&lt;LocationMatch
- <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Applies the enclosed directives only to regular-expression
-matching URLs</td></tr>
-<tr><td><a href="mpm_common.html#lockfile">LockFile <var>filename</var></a></td><td> logs/accept.lock </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the accept serialization lock file</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#logformat">LogFormat <var>format</var>|<var>nickname</var>
-[<var>nickname</var>]</a></td><td> "%h %l %u %t \"%r\" +</td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Describes a format for use in a log file</td></tr>
-<tr><td><a href="core.html#loglevel">LogLevel <var>level</var></a></td><td> warn </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Controls the verbosity of the ErrorLog</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxclients" id="M" name="M">MaxClients <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of child processes that will be created
-to serve requests</td></tr>
-<tr><td><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests <var>number</var></a></td><td> 100 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Number of requests allowed on a persistent
-connection</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxmemfree">MaxMemFree <var>KBytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of memory that the main allocator is allowed
-to hold without calling <code>free()</code></td></tr>
-<tr><td><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild <var>number</var></a></td><td> 10000 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Limit on the number of requests that an individual child server
-will handle during its life</td></tr>
-<tr class="odd"><td><a href="beos.html#maxrequestsperthread">MaxRequestsPerThread <var>number</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">ÇÑ ¾²·¹µå°¡ ½ÇÇàÇÏ´Â µ¿¾È ó¸®ÇÒ ¿äû°³¼ö ÇÑ°è</td></tr>
-<tr><td><a href="prefork.html#maxspareservers">MaxSpareServers <var>number</var></a></td><td> 10 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Maximum number of idle child server processes</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#maxsparethreads">MaxSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of idle threads</td></tr>
-<tr><td><a href="mpm_netware.html#maxthreads">MaxThreads <var>number</var></a></td><td> 2048 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Set the maximum number of worker threads</td></tr>
-<tr class="odd"><td><a href="perchild.html#maxthreadsperchild">MaxThreadsPerChild <var>number</var></a></td><td> 64 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum number of threads per child process</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxobjectcount">MCacheMaxObjectCount <var>value</var></a></td><td> 1009 </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The maximum number of objects allowed to be placed in the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachemaxobjectsize">MCacheMaxObjectSize <var>bytes</var></a></td><td> 10000 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum size (in bytes) of a document allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
-before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
-cache</td></tr>
-<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
-cache</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcachesize">MCacheSize <var>KBytes</var></a></td><td> 100 </td><td>s</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">The maximum amount of memory used by the cache in
-KBytes</td></tr>
-<tr><td><a href="mod_cern_meta.html#metadir">MetaDir <var>directory</var></a></td><td> .web </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">CERN ¸ÞŸÁ¤º¸¸¦ ãÀ» µð·ºÅ丮 À̸§</td></tr>
-<tr class="odd"><td><a href="mod_cern_meta.html#metafiles">MetaFiles on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">CERN ¸ÞŸÆÄÀÏÀ» ó¸®ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_cern_meta.html#metasuffix">MetaSuffix <var>suffix</var></a></td><td> .meta </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">CERN ¸ÞŸÁ¤º¸¸¦ ÀúÀåÇÏ´Â ÆÄÀÏÀÇ Á¢¹Ì»ç</td></tr>
-<tr class="odd"><td><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile <var>file-path</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable MIME-type determination based on file contents
-using the specified magic file</td></tr>
-<tr><td><a href="prefork.html#minspareservers">MinSpareServers <var>number</var></a></td><td> 5 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Minimum number of idle child server processes</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#minsparethreads">MinSpareThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Minimum number of idle threads available to handle request
-spikes</td></tr>
-<tr><td><a href="mod_file_cache.html#mmapfile">MMapFile <var>file-path</var> [<var>file-path</var>] ...</a></td><td></td><td>s</td><td>X</td></tr><tr><td class="descr" colspan="4">½ÃÀ۽à ¿©·¯ ÆÄÀÏÀ» ¸Þ¸ð¸®¿¡ ´ëÀÀÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#modmimeusepathinfo">ModMimeUsePathInfo On|Off</a></td><td> Off </td><td>d</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Tells <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> to treat <code>path_info</code>
-components as part of the filename</td></tr>
-<tr><td><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
-[Handlers|Filters]</a></td><td> NegotiatedOnly </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">The types of files that will be included when searching for
-a matching file with MultiViews</td></tr>
-<tr class="odd"><td><a href="core.html#namevirtualhost" id="N" name="N">NameVirtualHost <var>addr</var>[:<var>port</var>]</a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Designates an IP address for name-virtual
-hosting</td></tr>
-<tr><td><a href="mod_proxy.html#noproxy">NoProxy <var>host</var> [<var>host</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Hosts, domains, or networks that will be connected to
-directly</td></tr>
-<tr class="odd"><td><a href="perchild.html#numservers">NumServers <var>number</var></a></td><td> 2 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Total number of children alive at the same time</td></tr>
-<tr><td><a href="mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts <var>filename</var> [<var>filename</var>] ...</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">List of additional client certificates</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable [<var>IP-address</var>:]<var>portnumber</var></a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Allows a connection to be upgraded to an SSL connection upon request</td></tr>
-<tr><td><a href="core.html#options" id="O" name="O">Options
- [+|-]<var>option</var> [[+|-]<var>option</var>] ...</a></td><td> All </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures what features are available in a particular
-directory</td></tr>
-<tr class="odd"><td><a href="mod_authz_host.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">±âº»ÀûÀ¸·Î Á¢±ÙÀ» Çã¿ëÇÒÁö °ÅºÎÇÒÁö ¿©ºÎ¿Í
-<code class="directive">Allow</code>¿Í <code class="directive">Deny</code>
-󸮼ø¼­¸¦ Á¤ÇÑ´Ù.</td></tr>
-<tr><td><a href="mod_env.html#passenv" id="P" name="P">PassEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">½©¿¡¼­ ȯ°æº¯¼ö¸¦ °¡Á®¿Â´Ù</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#pidfile">PidFile <var>filename</var></a></td><td> logs/httpd.pid </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">File where the server records the process ID
-of the daemon</td></tr>
-<tr><td><a href="mod_echo.html#protocolecho">ProtocolEcho On|Off</a></td><td></td><td>sv</td><td>X</td></tr><tr><td class="descr" colspan="4">echo ¼­¹ö¸¦ Å°°í ²ö´Ù</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxy">&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxybadheader">ProxyBadHeader IsError|Ignore|StartBody</a></td><td> IsError </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determines how to handle bad header lines in a
-response</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyblock">ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
-[<var>word</var>|<var>host</var>|<var>domain</var>] ...</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Words, hosts, or domains that are banned from being
-proxied</td></tr>
-<tr><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
-proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
-through</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
-proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
-request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
-connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
-expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
-header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÆÄÀϸñ·Ï ¸¶Áö¸·¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÇöÀç URLÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ¸é ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
-º¸³½´Ù</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-¿µ±¸ ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
-Àӽà ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
-extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
-extensions</td></tr>
-<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
-a resource</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
-</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
-synchronization</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
-processing</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
-engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td> MaxRedirects=10 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
-by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
-by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
-processes launched by Apache children</td></tr>
-<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
-user authentication</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
-the child processes</td></tr>
-<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">ƯÁ¤ ¿äû¸Þ¼­µå¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
-»ç¿ëÇÑ´Ù.</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÏ°í ´ë»óÀÌ CGI
-½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</td></tr>
-<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î
-´ëÀÀÇÏ°í ´ë»óÀÌ CGI ½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
-scripts</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</td></tr>
-<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</td></tr>
-<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§</td></tr>
-<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP buffer size</td></tr>
-<tr><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Email address that the server includes in error
-messages sent to the client</td></tr>
-<tr class="odd"><td><a href="core.html#serveralias">ServerAlias <var>hostname</var> [<var>hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate names for a host used when matching requests
-to name-virtual hosts</td></tr>
-<tr><td><a href="mpm_common.html#serverlimit">ServerLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Upper limit on configurable number of processes</td></tr>
-<tr class="odd"><td><a href="core.html#servername">ServerName <var>fully-qualified-domain-name</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Hostname and port that the server uses to identify
-itself</td></tr>
-<tr><td><a href="core.html#serverpath">ServerPath <var>URL-path</var></a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">Legacy URL pathname for a name-based virtual host that
-is accessed by an incompatible browser</td></tr>
-<tr class="odd"><td><a href="core.html#serverroot">ServerRoot <var>directory-path</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Base directory for the server installation</td></tr>
-<tr><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures the footer on server-generated documents</td></tr>
-<tr class="odd"><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the <code>Server</code> HTTP response
-header</td></tr>
-<tr><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
- regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
- [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í ¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦
-¼³Á¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#sethandler">SetHandler <var>handler-name</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Forces all matching files to be processed by a
-handler</td></tr>
-<tr><td><a href="core.html#setinputfilter">SetInputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process client requests and POST
-input</td></tr>
-<tr class="odd"><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the filters that will process responses from the
-server</td></tr>
-<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
-error</td></tr>
-<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
-displayed</td></tr>
-<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
-operations</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
-keys</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
-for Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
-Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
-proxy handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
-source</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
-boolean expression is true</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
-HTTP request</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
-Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
-in the Session Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
-Certificate verification</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
-<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
-<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">CGI ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑ</td></tr>
-<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
-per child process</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
-<tr><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
-client connections</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for
-certain events before failing a request</td></tr>
-<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Specify location of a log file</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The location of the <code>mime.types</code> file</td></tr>
-<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ȯ°æº¯¼ö¸¦ Á¦°ÅÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|DNS</a></td><td> On </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures how the server determines its own name and
-port</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The userid under which the server will answer
-requests</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">»ç¿ëÀÚº° µð·ºÅ丮 À§Ä¡</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
-for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
- <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply only to a specific
-hostname or IP address</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Use accept() rather than AcceptEx() to accept network connections</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
-set</td></tr>
-</table></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/quickreference.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/quickreference.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/mod/quickreference.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ja/mod/quickreference.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/mod/quickreference.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/quickreference.xml b/docs/manual/mod/quickreference.xml
deleted file mode 100644
index 21e5f5a8dd..0000000000
--- a/docs/manual/mod/quickreference.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE quickreference SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<quickreference metafile="quickreference.xml.meta">
- <title>Directive Quick Reference</title>
- <summary>
- <p>The directive quick reference shows the usage, default, status,
- and context of each Apache configuration directive. For more
- information about each of these, see the <a
- href="directive-dict.html">Directive Dictionary</a>.</p>
-
- <p>The first column gives the directive name and usage. The second
- columns shows the default value of the directive, if a default exists.
- If the default is too large to display, the first characters will be
- followed by "+".</p>
-
- <p>The third and fourth columns list the contexts where the directive
- is allowed and the status of the directive according to the legend
- tables below.</p>
- </summary>
-
- <legend>
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>s</th><td>server&#160;config</td></tr>
- <tr><th>v</th><td>virtual&#160;host</td></tr>
- <tr><th>d</th><td>directory</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table>
-
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extension</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table>
- </legend>
-</quickreference>
diff --git a/docs/manual/mod/quickreference.xml.de b/docs/manual/mod/quickreference.xml.de
deleted file mode 100644
index 1651a2da05..0000000000
--- a/docs/manual/mod/quickreference.xml.de
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE quickreference SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<quickreference metafile="quickreference.xml.meta">
- <title>Kurzreferenz der Direktiven</title>
- <summary>
- <p>Die Kurzreferenz der Direktiven zeigt die Verwendung,
- Voreinstellung, den Status und den Kontext aller
- Apache-Konfigurationsanweisungen. F&uuml;r weitergehende Informationen
- schauen Sie bitte im <a
- href="directive-dict.html">Verzeichnis der Direktiven</a>.</p>
-
- <p>Die erste Spalte enth&auml;lt den Namen und die Verwendung.
- Die zweite Spalte zeigt die Voreinstellung der Direktive, sofern
- eine Voreinstellung existiert. Wenn die Voreinstellung zu breit
- f&uuml;r die Anzeige ist, werden die ersten Buchstaben angegeben,
- gefolgt von einem "+".</p>
-
- <p>Die dritte und vierte Spalte geben den Kontext an, in dem die
- Direktive erlaubt ist, sowie den Status der Direktive entsprechend
- der Legende.</p>
- </summary>
-
- <legend>
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>s</th><td>Serverkonfiguration</td></tr>
- <tr><th>v</th><td>Virtual&#160;Host</td></tr>
- <tr><th>d</th><td>Verzeichnis</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table>
-
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Basis</td></tr>
- <tr><th>E</th><td>Erweiterung</td></tr>
- <tr><th>X</th><td>experimentell</td></tr>
- </table>
- </legend>
-</quickreference>
diff --git a/docs/manual/mod/quickreference.xml.es b/docs/manual/mod/quickreference.xml.es
deleted file mode 100644
index 4f24510cff..0000000000
--- a/docs/manual/mod/quickreference.xml.es
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE quickreference SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<quickreference metafile="quickreference.xml.meta">
- <title>Gu&#237;a R&#225;pida de Referencia de Directivas</title>
- <summary>
- <p>La Gu&#237;a R&#225;pida de Referencia de Directivas muestra el uso, las
- opciones por defecto, el estado y el contexto de cada directiva de
- configuraci&#243;n de Apache. Para m&#225;s informaci&#243;n sobre cada
- directiva, consulte el <a href="directive-dict.html">Diccionario
- de Directivas</a>.</p>
-
- <p>La primera columna muestra el nombre y el uso de la directiva.
- La segunda columna muestra el valor por defecto de la directiva,
- si existe ese valor por defecto. Si el valor por defecto es
- demasiado largo para mostrarlo, el primer caracter va seguido de
- un signo "+".</p>
-
- <p>La tercera y la cuarta columna listan los contextos en los que
- la directiva puede funcionar y el estado de la directiva de
- acuerdo con las notas que detallan m&#225;s abajo.</p>
- </summary>
-
- <legend>
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>s</th><td>server&#160;config</td></tr>
- <tr><th>v</th><td>virtual&#160;host</td></tr>
- <tr><th>d</th><td>directory</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table>
-
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extensi&#243;n</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table>
- </legend>
-</quickreference>
-
diff --git a/docs/manual/mod/quickreference.xml.ja b/docs/manual/mod/quickreference.xml.ja
deleted file mode 100644
index 2c3a67818d..0000000000
--- a/docs/manual/mod/quickreference.xml.ja
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE quickreference SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<quickreference metafile="quickreference.xml.meta">
- <title>$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</title>
- <summary>
- <p>$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9$G$O!"3F(B Apache $B@_Dj%G%#%l%/%F%#%V$N(B
- $B;HMQJ}K!!"%G%U%)%k%HCM!"%9%F!<%?%9$H%3%s%F%-%9%H$r<($7$F$$$^$9!#(B
- $B3F%G%#%l%/%F%#%V$N!"$h$j>\$7$$>pJs$K4X$7$F$O(B
- <a href="directive-dict.html">$B%G%#%l%/%F%#%V<-=q(B</a>$B$r(B
- $B$4Mw2<$5$$!#(B</p>
-
- <p>$BBh(B 1 $BNsL\$O%G%#%l%/%F%#%V$NL>A0$H;HMQJ}K!$G$9!#(B
- $BBh(B 2 $BNsL\$O(B ($B$b$7$"$l$P(B) $B%G%U%)%k%HCM$H$J$C$F$$$^$9!#(B
- $B%G%U%)%k%HCM$,D9$9$.$FI=<($7$-$l$J$$>l9g$O!":G=i$NJ8;zNs$N8e$m$K(B
- $B!V(B + $B!W$,B3$-$^$9!#(B</p>
-
- <p>$BBh(B 3, 4 $BNs$O!"2<$NI=$NCm<a$K=>$C$F!"(B
- $B%G%#%l%/%F%#%V$N;HMQ$G$-$k%3%s%F%-%9%H$H!"(B
- $B%G%#%l%/%F%#%V$N%9%F!<%?%9$,<($5$l$F$$$^$9!#(B</p>
- </summary>
-
- <legend>
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>s</th><td>$B%5!<%P@_Dj%U%!%$%k(B</td></tr>
- <tr><th>v</th><td>$B%P!<%A%c%k%[%9%H(B</td></tr>
- <tr><th>d</th><td>$B%G%#%l%/%H%j(B</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table>
-
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extension</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table>
- </legend>
-</quickreference>
diff --git a/docs/manual/mod/quickreference.xml.ko b/docs/manual/mod/quickreference.xml.ko
deleted file mode 100644
index 0cb2a12ca5..0000000000
--- a/docs/manual/mod/quickreference.xml.ko
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE quickreference SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<quickreference metafile="quickreference.xml.meta">
- <title>Áö½Ã¾î ºü¸¥ÂüÁ¶</title>
- <summary>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ ¼³Á¤Áö½Ã¾î °¢°¢ÀÇ ¿ëµµ, ±âº»°ª, »óÅÂ,
- »ç¿ëÀå¼Ò¸¦ º¸¿©ÁØ´Ù. À̵éÀº <a
- href="directive-dict.html">Áö½Ã¾î »çÀü</a>¿¡¼­ ¼³¸íÇÑ´Ù.</p>
-
- <p>ù¹ø° ¿­Àº Áö½Ã¾î À̸§°ú ¿ëµµ¸¦ ¾Ë·ÁÁØ´Ù. µÎ¹ø° ¿­Àº
- Áö½Ã¾î¿¡ ±âº»°ªÀÌ ÀÖ´Ù¸é ±âº»°ªÀ» º¸¿©ÁØ´Ù. ¸¸¾à ±âº»°ªÀÌ
- ³Ê¹« ±æ´Ù¸é, "+" ±âÈ£·Î »ý·«ÇßÀ½À» ¾Ë¸°´Ù.</p>
-
- <p>¼¼¹ø°¿Í ³×¹ø° ¿­Àº °¢°¢ ¾Æ·¡ Ç¥¿¡ µû¶ó Áö½Ã¾î¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Â Àå¼Ò¿Í Áö½Ã¾îÀÇ »óŸ¦ ³ªÅ¸³½´Ù.</p>
- </summary>
-
- <legend>
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>s</th><td>ÁÖ¼­¹ö¼³Á¤</td></tr>
- <tr><th>v</th><td>°¡»óÈ£½ºÆ®</td></tr>
- <tr><th>d</th><td>directory</td></tr>
- <tr><th>h</th><td>.htaccess</td></tr>
- </table>
-
- <table>
- <columnspec><column width=".1"/><column width=".2"/></columnspec>
- <tr><th>C</th><td>Core</td></tr>
- <tr><th>M</th><td>MPM</td></tr>
- <tr><th>B</th><td>Base</td></tr>
- <tr><th>E</th><td>Extension</td></tr>
- <tr><th>X</th><td>Experimental</td></tr>
- </table>
- </legend>
-</quickreference>
diff --git a/docs/manual/mod/quickreference.xml.meta b/docs/manual/mod/quickreference.xml.meta
deleted file mode 100644
index 394fdfe0ed..0000000000
--- a/docs/manual/mod/quickreference.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>quickreference</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/threadpool.html b/docs/manual/mod/threadpool.html
deleted file mode 100644
index 1e9bcdac9f..0000000000
--- a/docs/manual/mod/threadpool.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: threadpool.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/threadpool.html.en b/docs/manual/mod/threadpool.html.en
deleted file mode 100644
index 26ed0631c3..0000000000
--- a/docs/manual/mod/threadpool.html.en
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>threadpool - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM threadpool</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/threadpool.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Yet another experimental variant of the standard
-<code class="module"><a href="../mod/worker.html">worker</a></code> MPM</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_threadpool_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>threadpool.c</td></tr></table>
-<h3>Summary</h3>
-
- <div class="warning"><h3>Warning</h3>
- <p>This MPM is a developer playground and highly experimental, so it
- may or may not work as expected.</p>
- </div>
-
- <p>This is an experimental variant of the standard worker MPM.
- Rather than queuing connections like the worker MPM, the
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> MPM queues idle worker threads and
- hands each accepted connection to the next available worker.</p>
-
- <p>The <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> MPM can't match the performance of
- the <code class="module"><a href="../mod/worker.html">worker</a></code> MPM in benchmark testing. As of 2.0.39,
- some of the key load-throtting concepts from the <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> MPM have been incorporated into the <code class="module"><a href="../mod/worker.html">worker</a></code> MPM. The <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> code is useful
- primarily as a research platform. For general-purpose use and for any
- production environments, use <code class="module"><a href="../mod/worker.html">worker</a></code> instead.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-</div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/threadpool.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/threadpool.xml b/docs/manual/mod/threadpool.xml
deleted file mode 100644
index d189cea6bb..0000000000
--- a/docs/manual/mod/threadpool.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="threadpool.xml.meta">
-<name>threadpool</name>
-<description>Yet another experimental variant of the standard
-<module>worker</module> MPM</description>
-<status>MPM</status>
-<sourcefile>threadpool.c</sourcefile>
-<identifier>mpm_threadpool_module</identifier>
-
-<summary>
- <note type="warning"><title>Warning</title>
- <p>This MPM is a developer playground and highly experimental, so it
- may or may not work as expected.</p>
- </note>
-
- <p>This is an experimental variant of the standard worker MPM.
- Rather than queuing connections like the worker MPM, the
- <module>threadpool</module> MPM queues idle worker threads and
- hands each accepted connection to the next available worker.</p>
-
- <p>The <module>threadpool</module> MPM can't match the performance of
- the <module>worker</module> MPM in benchmark testing. As of 2.0.39,
- some of the key load-throtting concepts from the <module
- >threadpool</module> MPM have been incorporated into the <module
- >worker</module> MPM. The <module>threadpool</module> code is useful
- primarily as a research platform. For general-purpose use and for any
- production environments, use <module>worker</module> instead.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/threadpool.xml.meta b/docs/manual/mod/threadpool.xml.meta
deleted file mode 100644
index 195dbfab50..0000000000
--- a/docs/manual/mod/threadpool.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>threadpool</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mod/worker.html b/docs/manual/mod/worker.html
deleted file mode 100644
index 1d429299de..0000000000
--- a/docs/manual/mod/worker.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: worker.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: worker.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: worker.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/mod/worker.html.de b/docs/manual/mod/worker.html.de
deleted file mode 100644
index 3ea4f5ca5c..0000000000
--- a/docs/manual/mod/worker.html.de
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>worker - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Module</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache-MPM worker</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/worker.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/worker.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Beschreibung:</a></th><td>Multi-Processing-Modul, das einen Hybrid-Webserver mit
- Multi-Thread und Multi-Prozess-Unterstützung implementiert</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Modulbezeichner:</a></th><td>mpm_worker_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Quelltext-Datei:</a></th><td>worker.c</td></tr></table>
-<h3>Zusammenfassung</h3>
-
- <p>Dieses Multi-Processing-Modul (MPM) implementiert einen Hybrid-Server
- mit Multi-Thread und Multi-Prozess-Unterstützung. Durch die Verwendung
- von Threads für die Bedienung von Anfragen ist er in der Lage,
- eine große Anzahl von Anfragen mit weniger Systemressourcen als
- ein Prozess-basierter Server zu bedienen. Er behält jedoch viel von
- der Stabilität eines Prozess-basierten Servers bei, indem er
- mehrere Prozesse verfügbar hält, jeden mit etlichen Threads.</p>
-
- <p>Die wichtigsten Direktiven zur Steuerung des MPMs sind <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>, welche die Anzahl
- der Threads beeinflusst, die von jedem Kindprozess verwendet werden, und
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>, welche die
- maximale Gesamtzahl an Threads regelt, die gestartet werden
- können.</p>
-</div>
-<div id="quickview"><h3 class="directives">Direktiven</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Themen</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">Arbeitsweise</a></li>
-</ul><h3>Siehe auch</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
- und Ports</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">Arbeitsweise</a></h2>
- <p>Ein einzelner Steuerprozess (der Elternprozess) ist für den
- Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
- feste Anzahl von Server-Threads, wie durch die <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>-Direktive
- angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
- diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
- eintreffen.</p>
-
- <p>Der Apache versucht immer, einen Vorrat von <dfn>freien</dfn> oder
- unbeschäftigten Threads zu verwalten, die zur Bedienung
- hereinkommender Anfragen bereit stehen. Auf diese Weise brauchen
- Clients nicht auf die Erstellung eines neuen Threads oder Prozesses
- zu warten, bevor ihre Anfrage bedient werden kann. Die Anzahl der
- Prozesse, die anfangs gestartet wird, wird mit der Direktive
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> festgelegt.
- Dann, während des Betriebes, berechnet der Apache die Gesamtzahl
- der unbeschäftigten Threads und forkt oder beendet Prozesse, um diese
- Anzahl innerhalb der durch <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> und <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> angegebenen Grenzen
- zu halten. Da dieser Prozess sehr selbstregulierend ist, ist es nur selten
- notwendig, die Voreinstellung dieser Direktiven zu ändern. Die
- maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
- die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
- Direktive <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> dividiert durch
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>.</p>
-
- <p>Zwei Direktiven legen harte Limits für die Anzahl der aktiven
- Kindprozesse fest und können nur geändert werden, indem der Server
- komplett gestoppt und dann wieder neu gestartet wird. <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code> stellt die obere Grenze für
- die Anzahl der aktiven Kindprozesse dar und muss größer oder
- gleich dem Quotienten aus <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> und <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> sein. <code class="directive"><a href="../mod/mpm_common.html#threadlimit">ThreadLimit</a></code> ist die obere Grenze für
- die Anzahl der Server-Threads und muss größer oder gleich
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> sein. Sofern für
- diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
- allen anderen <code class="module"><a href="../mod/worker.html">worker</a></code>-Direktiven platziert werden.</p>
-
- <p>Neben den normalen aktiven Kindprozessen gibt es möglicherweise noch
- zusätzliche Kindprozesse, welche gerade beendet werden, wo allerdings
- zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
- Obwohl die tatsächlich zu erwartende Anzahl deutlich kleiner ist,
- können bis zu <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- solcher Prozesse auftreten. Dieses Verhalten können Sie vermeiden,
- indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:</p>
-
- <ul>
- <li>setzen Sie den Wert von <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> auf Null</li>
-
- <li>setzen Sie den Wert von <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> auf den gleichen Wert wie <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code></li>
- </ul>
-
- <p>Eine typische Konfiguration der Prozess-Thread-Steuerung für
- das MPM <code class="module"><a href="../mod/worker.html">worker</a></code> könnte wie folgt aussehen:</p>
-
- <div class="example"><p><code>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </code></p></div>
-
- <p>Während der Elternprozess unter Unix normalerweise als
- <code>root</code> gestartet wird, um sich an Port 80 binden zu können,
- werden die Kindprozesse und Threads unter einem weniger privilegierten
- Benutzer gestartet. Die Direktiven <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> und <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> werden dazu verwendet, die
- Privilegien der Apache-Kindprozesse festzulegen. Die Kindprozesse
- müssen in der Lage sein, alle Inhalte zu lesen, die sie ausliefern
- sollen, sollten darüber hinaus jedoch so wenig wie möglich Rechte
- besitzen. Zusätzlich, solange nicht <a href="../suexec.html">suexec</a> verwendet wird, legen diese
- Direktiven auch die Privilegien fest, die von CGI-Skripts
- geerbt werden.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- bestimmt, wie häufig der Server Prozesse erneuert, indem er alte
- beendet und neue startet.</p>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/mod/worker.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/worker.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/worker.html.en b/docs/manual/mod/worker.html.en
deleted file mode 100644
index c99ebd0ee5..0000000000
--- a/docs/manual/mod/worker.html.en
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>worker - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM worker</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/worker.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multi-Processing Module implementing a hybrid
- multi-threaded multi-process web server</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_worker_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>worker.c</td></tr></table>
-<h3>Summary</h3>
-
- <p>This Multi-Processing Module (MPM) implements a hybrid
- multi-process multi-threaded server. By using threads to serve
- requests, it is able to serve a large number of requests with
- less system resources than a process-based server. Yet it
- retains much of the stability of a process-based server by
- keeping multiple processes available, each with many threads.</p>
-
- <p>The most important directives used to control this MPM are
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>, which
- controls the number of threads deployed by each child process and
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>, which
- controls the maximum total number of threads that may be
- launched.</p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>Topics</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">How it Works</a></li>
-</ul><h3>See also</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
- <p>A single control process (the parent) is responsible for launching
- child processes. Each child process creates a fixed number of server
- threads as specified in the <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> directive, as well
- as a listener thread which listens for connections and passes them
- to a server thread for processing when they arrive.</p>
-
- <p>Apache always tries to maintain a pool of <dfn>spare</dfn> or
- idle server threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- threads or processes to be created before their requests can be
- served. The number of processes that will initially launched is
- set by the <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>
- directive. Then during operation, Apache assesses the total number
- of idle threads in all processes, and forks or kills processes to
- keep this number within the boundaries specified by <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> and <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>. Since this
- process is very self-regulating, it is rarely necessary to modify
- these directives from their default values. The maximum number of
- clients that may be served simultaneously (i.e., the maximum total
- number of threads in all processes) is determined by the
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> directive.
- The maximum number of active child processes is determined by
- the <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- directive divided by the <code class="directive"><a href="../mod/mpm_common.html#&#10; threadsperchild">
- ThreadsPerChild</a></code> directive.</p>
-
- <p>Two directives set hard limits on the number of active child
- processes and the number of server threads in a child process,
- and can only be changed by fully stopping the server and then
- starting it again. <code class="directive"><a href="../mod/mpm_common.html#serverlimit&#10; ">ServerLimit
- </a></code> is a hard limit on the number of active child
- processes, and must be greater than or equal to the
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- directive divided by the <code class="directive"><a href="../mod/mpm_common.html#&#10; threadsperchild">
- ThreadsPerChild</a></code> directive.
- <code class="directive"><a href="../mod/mpm_common.html#threadlimit">ThreadLimit</a></code> is a hard
- limit of the number of server threads, and must be greater than
- or equal to the <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> directive. If
- non-default values are specified for these directives, they
- should appear before other <code class="module"><a href="../mod/worker.html">worker</a></code> directives.</p>
-
- <p>In addition to a the set of active child processes, there may
- be additional child processes which are terminating but where at
- least one server thread is still handling an existing client
- connection. Up to <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> terminating processes
- may be present, though the actual number can be expected to be
- much smaller. This behavior can be avoided by disabling the
- termination of individual child processes, which is achieved by
- the following:</p>
-
- <ul>
- <li>set the value of <code class="directive"><a href="../mod/mpm_common.html#&#10; maxrequestsperchild">
- MaxRequestsPerChild</a></code> to zero</li>
-
- <li>set the value of <code class="directive"><a href="../mod/mpm_common.html#&#10; maxsparethreads">
- MaxSpareThreads</a></code> to the same value as
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code></li>
- </ul>
-
- <p>A typical configuration of the process-thread controls in
- the <code class="module"><a href="../mod/worker.html">worker</a></code> MPM could look as follows:</p>
-
- <div class="example"><p><code>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </code></p></div>
-
- <p>While the parent process is usually started as <code>root</code>
- under Unix in order to bind to port 80, the child processes and threads
- are launched by Apache as a less-privileged user. The <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> directives are used to set
- the privileges of the Apache child processes. The child processes
- must be able to read all the content that will be served, but
- should have as few privileges beyond that as possible. In
- addition, unless <a href="../suexec.html">suexec</a> is used,
- these directives also set the privileges which will be inherited
- by CGI scripts.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- controls how frequently the server recycles processes by killing
- old ones and launching new ones.</p>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/worker.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/worker.html.ja.euc-jp b/docs/manual/mod/worker.html.ja.euc-jp
deleted file mode 100644
index da4811268f..0000000000
--- a/docs/manual/mod/worker.html.ja.euc-jp
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>worker - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥â¥¸¥å¡¼¥ë</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache MPM worker</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/worker.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/worker.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤È¥Þ¥ë¥Á¥×¥í¥»¥¹¤Î¥Ï¥¤¥Ö¥ê¥Ã¥É·¿
-¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¼ÂÁõ¤·¤¿¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</td></tr>
-<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>MPM</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>mpm_worker_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">¥½¡¼¥¹¥Õ¥¡¥¤¥ë:</a></th><td>worker.c</td></tr></table>
-<h3>³µÍ×</h3>
-
- <p>¤³¤Î¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)
- ¤Ï¡¢¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤È¥Þ¥ë¥Á¥×¥í¥»¥¹¤Î¥Ï¥¤¥Ö¥ê¥Ã¥É·¿¥µ¡¼¥Ð¤ò
- ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£¥ê¥¯¥¨¥¹¥È¤Î±þÅú¤Ë¥¹¥ì¥Ã¥É¤ò»È¤¦¤È¡¢
- ¥×¥í¥»¥¹¥Ù¡¼¥¹¤Î¥µ¡¼¥Ð¤è¤ê¤â¾¯¤Ê¤¤¥·¥¹¥Æ¥à»ñ¸»¤Ç¡¢
- ¿¤¯¤Î¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤µ¤é¤Ë¡¢Â¿¤¯¤Î¥¹¥ì¥Ã¥É¤ò»ý¤Ã¤¿Ê£¿ô¤Î¥×¥í¥»¥¹¤ò°Ý»ý¤¹¤ë¤³¤È¤Ç¡¢
- ¥×¥í¥»¥¹¥Ù¡¼¥¹¤Î¥µ¡¼¥Ð¤Î»ý¤Ä°ÂÄêÀ­¤òÊÝ»ý¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>¤³¤Î MPM ¤òÀ©¸æ¤¹¤ë¤Î¤Ë»È¤ï¤ì¤ëºÇ¤â½ÅÍפʥǥ£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> ¤È
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> ¤Ç¤¹¡£
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> ¤Ï
- ³Æ»Ò¥×¥í¥»¥¹¤ÇÍÑ°Õ¤µ¤ì¤ë¥¹¥ì¥Ã¥É¿ô¤òÀ©¸æ¤·¤Æ¡¢
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> ¤Ï
- µ¯Æ°¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤ÎÁí¿ô¤ÎºÇÂçÃͤòÀ©¸Â¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><h3 class="directives">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</h3>
-<ul id="toc">
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#acceptmutex">AcceptMutex</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
-<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
-</ul>
-<h3>¥È¥Ô¥Ã¥¯</h3>
-<ul id="topics">
-<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">Æ°ºîÊýË¡</a></li>
-</ul><h3>»²¾È</h3>
-<ul class="seealso">
-<li><a href="../bind.html">Apache
-¤Î»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÀßÄê</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how-it-works" id="how-it-works">Æ°ºîÊýË¡</a></h2>
- <p>°ì¤Ä¤ÎÀ©¸æÍÑ¥×¥í¥»¥¹ (¿Æ) ¤¬»Ò¥×¥í¥»¥¹¤òµ¯Æ°¤·¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤Ï
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄꤵ¤ì¤¿°ìÄê¿ô¤Î¥µ¡¼¥Ð¥¹¥ì¥Ã¥É¤ÈÀܳ¤ò
- listen ¤¹¤ë¥¹¥ì¥Ã¥É¤ò°ì¤Äºî¤ê¤Þ¤¹¡£
- Listener ¥¹¥ì¥Ã¥É¤ÏÀܳ¤¬Í褿¤È¤­¤Ë¥µ¡¼¥Ð¥×¥í¥»¥¹¤ËÅϤ·¤Þ¤¹¡£</p>
-
- <p>Apache ¤Ï<dfn>¥¹¥Ú¥¢¤Î</dfn>¡¢¤Ä¤Þ¤ê¥¢¥¤¥É¥ë¤Ê¥µ¡¼¥Ð¥¹¥ì¥Ã¥É¤Î
- ¥×¡¼¥ë¤ò¾ï¤Ë°Ý»ý¤·¤Æ¤¤¤Æ¡¢¤½¤ì¤é¤ÏÆþ¤Ã¤Æ¤¯¤ë¥ê¥¯¥¨¥¹¥È¤Ë
- Åú¤¨¤é¤ì¤ë¤è¤¦¤ËÂÔµ¡¤·¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Ë¤·¤Æ¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ï¥ê¥¯¥¨¥¹¥È¤Î±þÅú¤¬ÆÀ¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¤¿¤á¤Ë
- ¿·¤·¤¤¥¹¥ì¥Ã¥É¤ä¥×¥í¥»¥¹¤¬À¸À®¤µ¤ì¤ë¤Î¤ò
- ÂÔ¤¿¤Ê¤¯¤Æ¤â¤è¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- µ¯Æ°½é´ü»þ¤Î¥×¥í¥»¥¹Áí¿ô¤Ï¡¢
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤵ¤ì¤Þ¤¹¡£¤½¤Î¸å¤Î²ÔƯÃæ¤Ë¡¢
- Apache ¤ÏÁ´¥×¥í¥»¥¹¤Î¥¢¥¤¥É¥ë¥¹¥ì¥Ã¥É¤Î¹ç·×¿ô¤ò¸«ÀѤâ¤Ã¤Æ¡¢
- <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> ¤È
- <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>
- ¤Ç»ØÄꤵ¤ì¤¿ÈϰϤÎÃæ¤Ë¤³¤Î¿ô¤¬¼ý¤Þ¤ë¤è¤¦¤Ë fork ¤·¤¿¤ê
- kill ¤·¤¿¤ê¤·¤Þ¤¹¡£¤³¤ÎÁàºî¤ÏÈó¾ï¤Ë¼«Î§Åª¤Ê¤Î¤Ç¡¢
- ¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥Ç¥Õ¥©¥ë¥ÈÃͤ«¤éÊѹ¹¤¹¤ëɬÍפÏ
- ¤á¤Ã¤¿¤Ë¤Ê¤¤¤Ç¤·¤ç¤¦¡£
- Ʊ»þ¤Ë±þÅú¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë¥¯¥é¥¤¥¢¥ó¥È¿ô¤ÎºÇÂç¿ô
- (¤Ä¤Þ¤êÁ´¥×¥í¥»¥¹Ãæ¤ÎÁí¥¹¥ì¥Ã¥É¿ô¤ÎºÇÂçÃÍ) ¤Ï
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç·èÄꤵ¤ì¤Þ¤¹¡£
- ³èÆ°Ãæ¤Î»Ò¥×¥í¥»¥¹¿ô¤ÎºÇÂçÃͤÏ
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> ¤ò
- <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> ¤Ç³ä¤Ã¤¿
- ¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>³èÆ°Ãæ¤Î»Ò¥×¥í¥»¥¹¤Î¿ô¤È»Ò¥×¥í¥»¥¹Ãæ¤Î¥µ¡¼¥Ð¥¹¥ì¥Ã¥É¤Î¿ô¤Î±Û¤¨¤é¤ì¤Ê¤¤
- ¾å¸Â¤òÀßÄꤹ¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Æó¤Ä¤¢¤ê¤Þ¤¹¡£¤³¤ì¤é¤Ï¥µ¡¼¥Ð¤ò
- ´°Á´¤ËÄä»ß¤·¤Æ¡¢ºÆµ¯Æ°¤¹¤ë¤³¤È¤Ç¤·¤«Êѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
- <code class="directive"><a href="../mod/mpm_common.html#serverlimit&#10; ">ServerLimit
- </a></code> ¤Ï³èÆ°Ãæ¤Î»Ò¥×¥í¥»¥¹¤Î±Û¤¨¤é¤ì¤Ê¤¤¾å¸Â¤òÀßÄꤷ¡¢
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ÎÃͤò <code class="directive"><a href="../mod/mpm_common.html#&#10; threadsperchild">
- ThreadsPerChild</a></code> ¤ÎÃͤdzä¤Ã¤¿ÃͰʾå¤Ç¤¢¤ë
- ɬÍפ¬¤¢¤ê¤Þ¤¹¡£<code class="directive"><a href="../mod/mpm_common.html#threadlimit">ThreadLimit</a></code> ¤Ï
- ¥µ¡¼¥Ð¥¹¥ì¥Ã¥É¤Î±Û¤¨¤é¤ì¤Ê¤¤¾å¸Â¤Ç¡¢<code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
- ÃͰʾå¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È°Ê³°¤ÎÃͤò»ØÄꤹ¤ë¾ì¹ç¤Ï
- ¾¤Î <code class="module"><a href="../mod/worker.html">worker</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤è¤ê¤âÁ°¤Ë½ñ¤«¤ì¤Æ¤¤¤ë
- ɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>³èÆ°Ãæ¤Î»Ò¥×¥í¥»¥¹·²¤Ë²Ã¤¨¤Æ¡¢¾¯¤Ê¤¯¤È¤â°ì¤Ä¤Î¥µ¡¼¥Ð¥¹¥ì¥Ã¥É¤¬
- ´û¸¤Î¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤ÎÀܳ¤ò°·¤Ã¤Æ¤¤¤ë½ªÎ»¤·¤è¤¦¤È¤·¤Æ¤¤¤ë
- »Ò¥×¥í¥»¥¹¤¬¤¢¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£½ªÎ»Ãæ¤Î¥×¥í¥»¥¹¤Ï <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> ¤Ç»ØÄꤵ¤ì¤¿¿ô¤Þ¤Ç
- ¸ºß¤Ç¤­¤Þ¤¹¤¬¡¢¼ÂºÝ¤Ë´üÂÔ¤µ¤ì¤ë¿ô¤Ï¤º¤Ã¤È¾¯¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£¤³¤Î
- ¿¶Éñ¤¤¤Ï³Æ»Ò¥×¥í¥»¥¹¤ò½ªÎ»¤µ¤»¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç²óÈò¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï°Ê²¼¤ÎÍͤˤ·¤Æ¼Â¸½¤Ç¤­¤Þ¤¹¡£</p>
-
- <ul>
- <li><code class="directive"><a href="../mod/mpm_common.html#&#10; maxrequestsperchild">
- MaxRequestsPerChild</a></code> ¤ÎÃͤò 0 ¤ËÀßÄꤹ¤ë</li>
-
- <li><code class="directive"><a href="../mod/mpm_common.html#&#10; maxsparethreads">
- MaxSpareThreads</a></code> ¤ÎÃͤò
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- ¤ÈƱ¤¸Ãͤˤ¹¤ë</li>
- </ul>
-
- <p><code class="module"><a href="../mod/worker.html">worker</a></code> MPM ¤Îŵ·¿Åª¤Ê¥×¥í¥»¥¹¡¦¥¹¥ì¥Ã¥ÉÀ©¸æ¤Î
- ÀßÄê¤Ç¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </code></p></div>
-
- <p>Ä̾ï Unix ¤Ç¤Ï¿Æ¥×¥í¥»¥¹¤Ï 80 È֥ݡ¼¥È¤Ë¥Ð¥¤¥ó¥É¤¹¤ë¤¿¤á¤Ë
- <code>root</code> ¤Çµ¯Æ°¤µ¤ì¤Þ¤¹¤¬¡¢»Ò¥×¥í¥»¥¹¤ä¥¹¥ì¥Ã¥É¤Ï
- ¤â¤Ã¤ÈÄ㤤¸¢¸Â¤Î¥æ¡¼¥¶¤Ç Apache ¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤Þ¤¹¡£
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> ¤È
- <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- Apache ¤Î»Ò¥×¥í¥»¥¹¤Î¸¢¸Â¤òÀßÄꤹ¤ë¤Î¤ËÍѤ¤¤é¤ì¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤ë¥³¥ó¥Æ¥ó¥ÄÁ´¤Æ¤òÆɤá¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¤¬¡¢
- ²Äǽ¤Ê¸Â¤êɬÍ׺Ǿ®¸Â¤Î¸¢¸Â¤Î¤ß¤ò»ý¤Ã¤Æ¤¤¤ë¤è¤¦¤Ë¤¹¤ë¤Ù¤­¤Ç¤¹¡£
- ¤µ¤é¤Ë¡¢<a href="../suexec.html">suexec</a>
- ¤¬»ÈÍѤµ¤ì¤Æ¤¤¤Ê¤¤¸Â¤ê¡¢¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- CGI ¥¹¥¯¥ê¥×¥È¤Ç·Ñ¾µ¤µ¤ì¤ë¸¢¸Â¤âÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
- ¤Ï¡¢¸Å¤¤¥×¥í¥»¥¹¤òÄä»ß¤·¤Æ¿·¤·¤¤¥×¥í¥»¥¹¤òµ¯Æ°¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢
- ¤É¤ÎÄøÅÙ¤ÎÉÑÅ٤ǥµ¡¼¥Ð¤¬¥×¥í¥»¥¹¤ò¥ê¥µ¥¤¥¯¥ë¤¹¤ë¤«¤òÀ©¸æ¤·¤Þ¤¹¡£</p>
-</div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/mod/worker.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/mod/worker.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/worker.xml b/docs/manual/mod/worker.xml
deleted file mode 100644
index 700821edca..0000000000
--- a/docs/manual/mod/worker.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.19 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="worker.xml.meta">
-<name>worker</name>
-<description>Multi-Processing Module implementing a hybrid
- multi-threaded multi-process web server</description>
-<status>MPM</status>
-<sourcefile>worker.c</sourcefile>
-<identifier>mpm_worker_module</identifier>
-
-<summary>
- <p>This Multi-Processing Module (MPM) implements a hybrid
- multi-process multi-threaded server. By using threads to serve
- requests, it is able to serve a large number of requests with
- less system resources than a process-based server. Yet it
- retains much of the stability of a process-based server by
- keeping multiple processes available, each with many threads.</p>
-
- <p>The most important directives used to control this MPM are
- <directive module="mpm_common">ThreadsPerChild</directive>, which
- controls the number of threads deployed by each child process and
- <directive module="mpm_common">MaxClients</directive>, which
- controls the maximum total number of threads that may be
- launched.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and ports Apache
-uses</a></seealso>
-
-<section id="how-it-works"><title>How it Works</title>
- <p>A single control process (the parent) is responsible for launching
- child processes. Each child process creates a fixed number of server
- threads as specified in the <directive
- module="mpm_common">ThreadsPerChild</directive> directive, as well
- as a listener thread which listens for connections and passes them
- to a server thread for processing when they arrive.</p>
-
- <p>Apache always tries to maintain a pool of <dfn>spare</dfn> or
- idle server threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- threads or processes to be created before their requests can be
- served. The number of processes that will initially launched is
- set by the <directive module="mpm_common">StartServers</directive>
- directive. Then during operation, Apache assesses the total number
- of idle threads in all processes, and forks or kills processes to
- keep this number within the boundaries specified by <directive
- module="mpm_common">MinSpareThreads</directive> and <directive
- module="mpm_common">MaxSpareThreads</directive>. Since this
- process is very self-regulating, it is rarely necessary to modify
- these directives from their default values. The maximum number of
- clients that may be served simultaneously (i.e., the maximum total
- number of threads in all processes) is determined by the
- <directive module="mpm_common">MaxClients</directive> directive.
- The maximum number of active child processes is determined by
- the <directive module="mpm_common">MaxClients</directive>
- directive divided by the <directive module="mpm_common">
- ThreadsPerChild</directive> directive.</p>
-
- <p>Two directives set hard limits on the number of active child
- processes and the number of server threads in a child process,
- and can only be changed by fully stopping the server and then
- starting it again. <directive module="mpm_common">ServerLimit
- </directive> is a hard limit on the number of active child
- processes, and must be greater than or equal to the
- <directive module="mpm_common">MaxClients</directive>
- directive divided by the <directive module="mpm_common">
- ThreadsPerChild</directive> directive.
- <directive module="mpm_common">ThreadLimit</directive> is a hard
- limit of the number of server threads, and must be greater than
- or equal to the <directive
- module="mpm_common">ThreadsPerChild</directive> directive. If
- non-default values are specified for these directives, they
- should appear before other <module>worker</module> directives.</p>
-
- <p>In addition to a the set of active child processes, there may
- be additional child processes which are terminating but where at
- least one server thread is still handling an existing client
- connection. Up to <directive
- module="mpm_common">MaxClients</directive> terminating processes
- may be present, though the actual number can be expected to be
- much smaller. This behavior can be avoided by disabling the
- termination of individual child processes, which is achieved by
- the following:</p>
-
- <ul>
- <li>set the value of <directive module="mpm_common">
- MaxRequestsPerChild</directive> to zero</li>
-
- <li>set the value of <directive module="mpm_common">
- MaxSpareThreads</directive> to the same value as
- <directive module="mpm_common">MaxClients</directive></li>
- </ul>
-
- <p>A typical configuration of the process-thread controls in
- the <module>worker</module> MPM could look as follows:</p>
-
- <example>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </example>
-
- <p>While the parent process is usually started as <code>root</code>
- under Unix in order to bind to port 80, the child processes and threads
- are launched by Apache as a less-privileged user. The <directive
- module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive> directives are used to set
- the privileges of the Apache child processes. The child processes
- must be able to read all the content that will be served, but
- should have as few privileges beyond that as possible. In
- addition, unless <a href="../suexec.html">suexec</a> is used,
- these directives also set the privileges which will be inherited
- by CGI scripts.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- controls how frequently the server recycles processes by killing
- old ones and launching new ones.</p>
-</section>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/worker.xml.de b/docs/manual/mod/worker.xml.de
deleted file mode 100644
index e7a7f77ea3..0000000000
--- a/docs/manual/mod/worker.xml.de
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.19 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="worker.xml.meta">
-<name>worker</name>
-<description>Multi-Processing-Modul, das einen Hybrid-Webserver mit
- Multi-Thread und Multi-Prozess-Unterst&uuml;tzung implementiert</description>
-<status>MPM</status>
-<sourcefile>worker.c</sourcefile>
-<identifier>mpm_worker_module</identifier>
-
-<summary>
- <p>Dieses Multi-Processing-Modul (MPM) implementiert einen Hybrid-Server
- mit Multi-Thread und Multi-Prozess-Unterst&uuml;tzung. Durch die Verwendung
- von Threads f&uuml;r die Bedienung von Anfragen ist er in der Lage,
- eine gro&szlig;e Anzahl von Anfragen mit weniger Systemressourcen als
- ein Prozess-basierter Server zu bedienen. Er beh&auml;lt jedoch viel von
- der Stabilit&auml;t eines Prozess-basierten Servers bei, indem er
- mehrere Prozesse verf&uuml;gbar h&auml;lt, jeden mit etlichen Threads.</p>
-
- <p>Die wichtigsten Direktiven zur Steuerung des MPMs sind <directive
- module="mpm_common">ThreadsPerChild</directive>, welche die Anzahl
- der Threads beeinflusst, die von jedem Kindprozess verwendet werden, und
- <directive module="mpm_common">MaxClients</directive>, welche die
- maximale Gesamtzahl an Threads regelt, die gestartet werden
- k&ouml;nnen.</p>
-</summary>
-<seealso><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
- und Ports</a></seealso>
-
-<section id="how-it-works"><title>Arbeitsweise</title>
- <p>Ein einzelner Steuerprozess (der Elternprozess) ist f&uuml;r den
- Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
- feste Anzahl von Server-Threads, wie durch die <directive
- module="mpm_common">ThreadsPerChild</directive>-Direktive
- angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
- diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
- eintreffen.</p>
-
- <p>Der Apache versucht immer, einen Vorrat von <dfn>freien</dfn> oder
- unbesch&auml;ftigten Threads zu verwalten, die zur Bedienung
- hereinkommender Anfragen bereit stehen. Auf diese Weise brauchen
- Clients nicht auf die Erstellung eines neuen Threads oder Prozesses
- zu warten, bevor ihre Anfrage bedient werden kann. Die Anzahl der
- Prozesse, die anfangs gestartet wird, wird mit der Direktive
- <directive module="mpm_common">StartServers</directive> festgelegt.
- Dann, w&auml;hrend des Betriebes, berechnet der Apache die Gesamtzahl
- der unbesch&auml;ftigten Threads und forkt oder beendet Prozesse, um diese
- Anzahl innerhalb der durch <directive
- module="mpm_common">MinSpareThreads</directive> und <directive
- module="mpm_common">MaxSpareThreads</directive> angegebenen Grenzen
- zu halten. Da dieser Prozess sehr selbstregulierend ist, ist es nur selten
- notwendig, die Voreinstellung dieser Direktiven zu &auml;ndern. Die
- maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
- die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
- Direktive <directive module="mpm_common">MaxClients</directive>
- festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
- <directive module="mpm_common">MaxClients</directive> dividiert durch
- <directive module="mpm_common">ThreadsPerChild</directive>.</p>
-
- <p>Zwei Direktiven legen harte Limits f&uuml;r die Anzahl der aktiven
- Kindprozesse fest und k&ouml;nnen nur ge&auml;ndert werden, indem der Server
- komplett gestoppt und dann wieder neu gestartet wird. <directive
- module="mpm_common">ServerLimit</directive> stellt die obere Grenze f&uuml;r
- die Anzahl der aktiven Kindprozesse dar und muss gr&ouml;&szlig;er oder
- gleich dem Quotienten aus <directive
- module="mpm_common">MaxClients</directive> und <directive
- module="mpm_common">ThreadsPerChild</directive> sein. <directive
- module="mpm_common">ThreadLimit</directive> ist die obere Grenze f&uuml;r
- die Anzahl der Server-Threads und muss gr&ouml;&szlig;er oder gleich
- <directive module="mpm_common">ThreadsPerChild</directive> sein. Sofern f&uuml;r
- diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
- allen anderen <module>worker</module>-Direktiven platziert werden.</p>
-
- <p>Neben den normalen aktiven Kindprozessen gibt es m&ouml;glicherweise noch
- zus&auml;tzliche Kindprozesse, welche gerade beendet werden, wo allerdings
- zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
- Obwohl die tats&auml;chlich zu erwartende Anzahl deutlich kleiner ist,
- k&ouml;nnen bis zu <directive module="mpm_common">MaxClients</directive>
- solcher Prozesse auftreten. Dieses Verhalten k&ouml;nnen Sie vermeiden,
- indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:</p>
-
- <ul>
- <li>setzen Sie den Wert von <directive module="mpm_common"
- >MaxRequestsPerChild</directive> auf Null</li>
-
- <li>setzen Sie den Wert von <directive module="mpm_common"
- >MaxSpareThreads</directive> auf den gleichen Wert wie <directive
- module="mpm_common">MaxClients</directive></li>
- </ul>
-
- <p>Eine typische Konfiguration der Prozess-Thread-Steuerung f&uuml;r
- das MPM <module>worker</module> k&ouml;nnte wie folgt aussehen:</p>
-
- <example>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </example>
-
- <p>W&auml;hrend der Elternprozess unter Unix normalerweise als
- <code>root</code> gestartet wird, um sich an Port 80 binden zu k&ouml;nnen,
- werden die Kindprozesse und Threads unter einem weniger privilegierten
- Benutzer gestartet. Die Direktiven <directive
- module="mpm_common">User</directive> und <directive
- module="mpm_common">Group</directive> werden dazu verwendet, die
- Privilegien der Apache-Kindprozesse festzulegen. Die Kindprozesse
- m&uuml;ssen in der Lage sein, alle Inhalte zu lesen, die sie ausliefern
- sollen, sollten dar&uuml;ber hinaus jedoch so wenig wie m&ouml;glich Rechte
- besitzen. Zus&auml;tzlich, solange nicht <a
- href="../suexec.html">suexec</a> verwendet wird, legen diese
- Direktiven auch die Privilegien fest, die von CGI-Skripts
- geerbt werden.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- bestimmt, wie h&auml;ufig der Server Prozesse erneuert, indem er alte
- beendet und neue startet.</p>
-</section>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/worker.xml.ja b/docs/manual/mod/worker.xml.ja
deleted file mode 100644
index 03ed24be32..0000000000
--- a/docs/manual/mod/worker.xml.ja
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.19 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<modulesynopsis metafile="worker.xml.meta">
-
-<name>worker</name>
-<description>$B%^%k%A%9%l%C%I$H%^%k%A%W%m%;%9$N%O%$%V%j%C%I7?(B
-$B%&%'%V%5!<%P$r<BAu$7$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</description>
-<status>MPM</status>
-<sourcefile>worker.c</sourcefile>
-<identifier>mpm_worker_module</identifier>
-
-<summary>
- <p>$B$3$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
- $B$O!"%^%k%A%9%l%C%I$H%^%k%A%W%m%;%9$N%O%$%V%j%C%I7?%5!<%P$r(B
- $B<BAu$7$F$$$^$9!#%j%/%(%9%H$N1~Ez$K%9%l%C%I$r;H$&$H!"(B
- $B%W%m%;%9%Y!<%9$N%5!<%P$h$j$b>/$J$$%7%9%F%`;q8;$G!"(B
- $BB?$/$N%j%/%(%9%H$K1~Ez$9$k$3$H$,$G$-$^$9!#(B
- $B$5$i$K!"B?$/$N%9%l%C%I$r;}$C$?J#?t$N%W%m%;%9$r0];}$9$k$3$H$G!"(B
- $B%W%m%;%9%Y!<%9$N%5!<%P$N;}$D0BDj@-$rJ];}$7$F$$$^$9!#(B</p>
-
- <p>$B$3$N(B MPM $B$r@)8f$9$k$N$K;H$o$l$k:G$b=EMW$J%G%#%l%/%F%#%V$O!"(B
- <directive module="mpm_common">ThreadsPerChild</directive> $B$H(B
- <directive module="mpm_common">MaxClients</directive> $B$G$9!#(B
- <directive module="mpm_common">ThreadsPerChild</directive> $B$O(B
- $B3F;R%W%m%;%9$GMQ0U$5$l$k%9%l%C%I?t$r@)8f$7$F!"(B
- <directive module="mpm_common">MaxClients</directive> $B$O(B
- $B5/F0$5$l$k%9%l%C%I$NAm?t$N:GBgCM$r@)8B$7$^$9!#(B</p>
-</summary>
-<seealso><a href="../bind.html">Apache
-$B$N;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</a></seealso>
-
-<section id="how-it-works"><title>$BF0:nJ}K!(B</title>
- <p>$B0l$D$N@)8fMQ%W%m%;%9(B ($B?F(B) $B$,;R%W%m%;%9$r5/F0$7$^$9!#(B
- $B;R%W%m%;%9$O(B
- <directive module="mpm_common">ThreadsPerChild</directive>
- $B%G%#%l%/%F%#%V$G;XDj$5$l$?0lDj?t$N%5!<%P%9%l%C%I$H@\B3$r(B
- listen $B$9$k%9%l%C%I$r0l$D:n$j$^$9!#(B
- Listener $B%9%l%C%I$O@\B3$,Mh$?$H$-$K%5!<%P%W%m%;%9$KEO$7$^$9!#(B</p>
-
- <p>Apache $B$O(B<dfn>$B%9%Z%"$N(B</dfn>$B!"$D$^$j%"%$%I%k$J%5!<%P%9%l%C%I$N(B
- $B%W!<%k$r>o$K0];}$7$F$$$F!"$=$l$i$OF~$C$F$/$k%j%/%(%9%H$K(B
- $BEz$($i$l$k$h$&$KBT5!$7$F$$$^$9!#(B
- $B$3$N$h$&$K$7$F!"%/%i%$%"%s%H$O%j%/%(%9%H$N1~Ez$,F@$i$l$k$h$&$K$J$k$?$a$K(B
- $B?7$7$$%9%l%C%I$d%W%m%;%9$,@8@.$5$l$k$N$r(B
- $BBT$?$J$/$F$b$h$$$h$&$K$J$C$F$$$^$9!#(B
- $B5/F0=i4|;~$N%W%m%;%9Am?t$O!"(B
- <directive module="mpm_common">StartServers</directive>
- $B%G%#%l%/%F%#%V$G@_Dj$5$l$^$9!#$=$N8e$N2TF/Cf$K!"(B
- Apache $B$OA4%W%m%;%9$N%"%$%I%k%9%l%C%I$N9g7W?t$r8+@Q$b$C$F!"(B
- <directive module="mpm_common">MinSpareThreads</directive> $B$H(B
- <directive module="mpm_common">MaxSpareThreads</directive>
- $B$G;XDj$5$l$?HO0O$NCf$K$3$N?t$,<}$^$k$h$&$K(B fork $B$7$?$j(B
- kill $B$7$?$j$7$^$9!#$3$NA`:n$OHs>o$K<+N'E*$J$N$G!"(B
- $B$3$l$i$N%G%#%l%/%F%#%V$r%G%U%)%k%HCM$+$iJQ99$9$kI,MW$O(B
- $B$a$C$?$K$J$$$G$7$g$&!#(B
- $BF1;~$K1~Ez$9$k$3$H$N$G$-$k%/%i%$%"%s%H?t$N:GBg?t(B
- ($B$D$^$jA4%W%m%;%9Cf$NAm%9%l%C%I?t$N:GBgCM(B) $B$O(B
- <directive module="mpm_common">MaxClients</directive>
- $B%G%#%l%/%F%#%V$G7hDj$5$l$^$9!#(B
- $B3hF0Cf$N;R%W%m%;%9?t$N:GBgCM$O(B
- <directive module="mpm_common">MaxClients</directive> $B$r(B
- <directive module="mpm_common">ThreadsPerChild</directive> $B$G3d$C$?(B
- $B$b$N$K$J$j$^$9!#(B</p>
-
- <p>$B3hF0Cf$N;R%W%m%;%9$N?t$H;R%W%m%;%9Cf$N%5!<%P%9%l%C%I$N?t$N1[$($i$l$J$$(B
- $B>e8B$r@_Dj$9$k%G%#%l%/%F%#%V$,Fs$D$"$j$^$9!#$3$l$i$O%5!<%P$r(B
- $B40A4$KDd;_$7$F!":F5/F0$9$k$3$H$G$7$+JQ99$9$k$3$H$O$G$-$^$;$s!#(B
- <directive module="mpm_common">ServerLimit
- </directive> $B$O3hF0Cf$N;R%W%m%;%9$N1[$($i$l$J$$>e8B$r@_Dj$7!"(B
- <directive module="mpm_common">MaxClients</directive> $B%G%#%l%/%F%#%V(B
- $B$NCM$r(B <directive module="mpm_common">
- ThreadsPerChild</directive> $B$NCM$G3d$C$?CM0J>e$G$"$k(B
- $BI,MW$,$"$j$^$9!#(B<directive module="mpm_common">ThreadLimit</directive> $B$O(B
- $B%5!<%P%9%l%C%I$N1[$($i$l$J$$>e8B$G!"(B<directive
- module="mpm_common">ThreadsPerChild</directive> $B%G%#%l%/%F%#%V$N(B
- $BCM0J>e$G$"$kI,MW$,$"$j$^$9!#%G%U%)%k%H0J30$NCM$r;XDj$9$k>l9g$O(B
- $BB>$N(B <module>worker</module> $B%G%#%l%/%F%#%V$h$j$bA0$K=q$+$l$F$$$k(B
- $BI,MW$,$"$j$^$9!#(B</p>
-
- <p>$B3hF0Cf$N;R%W%m%;%972$K2C$($F!">/$J$/$H$b0l$D$N%5!<%P%9%l%C%I$,(B
- $B4{B8$N%/%i%$%"%s%H$+$i$N@\B3$r07$C$F$$$k=*N;$7$h$&$H$7$F$$$k(B
- $B;R%W%m%;%9$,$"$k2DG=@-$,$"$j$^$9!#=*N;Cf$N%W%m%;%9$O(B <directive
- module="mpm_common">MaxClients</directive> $B$G;XDj$5$l$??t$^$G(B
- $BB8:_$G$-$^$9$,!"<B:]$K4|BT$5$l$k?t$O$:$C$H>/$J$/$J$j$^$9!#$3$N(B
- $B?6Iq$$$O3F;R%W%m%;%9$r=*N;$5$;$J$$$h$&$K$9$k$3$H$G2sHr$G$-$^$9!#(B
- $B$3$l$O0J2<$NMM$K$7$F<B8=$G$-$^$9!#(B</p>
-
- <ul>
- <li><directive module="mpm_common">
- MaxRequestsPerChild</directive> $B$NCM$r(B 0 $B$K@_Dj$9$k(B</li>
-
- <li><directive module="mpm_common">
- MaxSpareThreads</directive> $B$NCM$r(B
- <directive module="mpm_common">MaxClients</directive>
- $B$HF1$8CM$K$9$k(B</li>
- </ul>
-
- <p><module>worker</module> MPM $B$NE57?E*$J%W%m%;%9!&%9%l%C%I@)8f$N(B
- $B@_Dj$G$O!"<!$N$h$&$K$J$j$^$9!#(B</p>
-
- <example>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </example>
-
- <p>$BDL>o(B Unix $B$G$O?F%W%m%;%9$O(B 80 $BHV%]!<%H$K%P%$%s%I$9$k$?$a$K(B
- <code>root</code> $B$G5/F0$5$l$^$9$,!";R%W%m%;%9$d%9%l%C%I$O(B
- $B$b$C$HDc$$8"8B$N%f!<%6$G(B Apache $B$K$h$C$F5/F0$5$l$^$9!#(B
- <directive module="mpm_common">User</directive> $B$H(B
- <directive module="mpm_common">Group</directive> $B%G%#%l%/%F%#%V$O(B
- Apache $B$N;R%W%m%;%9$N8"8B$r@_Dj$9$k$N$KMQ$$$i$l$^$9!#(B
- $B;R%W%m%;%9$O%/%i%$%"%s%H$KAw$k%3%s%F%s%DA4$F$rFI$a$J$$$H$$$1$^$;$s$,!"(B
- $B2DG=$J8B$jI,MW:G>.8B$N8"8B$N$_$r;}$C$F$$$k$h$&$K$9$k$Y$-$G$9!#(B
- $B$5$i$K!"(B<a href="../suexec.html">suexec</a>
- $B$,;HMQ$5$l$F$$$J$$8B$j!"$3$l$i$N%G%#%l%/%F%#%V$O(B
- CGI $B%9%/%j%W%H$G7Q>5$5$l$k8"8B$b@_Dj$7$^$9!#(B</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- $B$O!"8E$$%W%m%;%9$rDd;_$7$F?7$7$$%W%m%;%9$r5/F0$9$k$3$H$K$h$C$F!"(B
- $B$I$NDxEY$NIQEY$G%5!<%P$,%W%m%;%9$r%j%5%$%/%k$9$k$+$r@)8f$7$^$9!#(B</p>
-</section>
-
-<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/worker.xml.meta b/docs/manual/mod/worker.xml.meta
deleted file mode 100644
index 0fda0aee7f..0000000000
--- a/docs/manual/mod/worker.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>worker</basename>
- <path>/mod/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/mpm.html b/docs/manual/mpm.html
deleted file mode 100644
index cc4f79c32c..0000000000
--- a/docs/manual/mpm.html
+++ /dev/null
@@ -1,15 +0,0 @@
-URI: mpm.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mpm.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mpm.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: mpm.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/mpm.html.en b/docs/manual/mpm.html.en
deleted file mode 100644
index 6e3788afaa..0000000000
--- a/docs/manual/mpm.html.en
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Multi-Processing Modules (MPMs) - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Multi-Processing Modules (MPMs)</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/mpm.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>This document describes what a Multi-Processing Module is and
-how they are used by the Apache HTTP Server.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introduction</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#choosing">Choosing an MPM</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#defaults">MPM Defaults</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Introduction</a></h2>
-
- <p>The Apache HTTP Server is designed to be a powerful and
- flexible web server that can work on a very wide variety of
- platforms in a range of different environments. Different
- platforms and different environments often require different
- features, or may have different ways of implementing the same
- feature most efficiently. Apache has always accommodated a wide
- variety of environments through its modular design. This design
- allows the webmaster to choose which features will be included
- in the server by selecting which modules to load either at
- compile-time or at run-time.</p>
-
- <p>Apache 2.0 extends this modular design to the most basic
- functions of a web server. The server ships with a selection of
- Multi-Processing Modules (MPMs) which are responsible for
- binding to network ports on the machine, accepting requests,
- and dispatching children to handle the requests.</p>
-
- <p>Extending the modular design to this level of the server
- allows two important benefits:</p>
-
- <ul>
- <li>Apache can more cleanly and efficiently support a wide
- variety of operating systems. In particular, the Windows
- version of Apache is now much more efficient, since
- <code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code> can use native
- networking features in place of the POSIX layer used in
- Apache 1.3. This benefit also extends to other operating
- systems that implement specialized MPMs.</li>
-
- <li>The server can be better customized for the needs of the
- particular site. For example, sites that need a great deal of
- scalability can choose to use a threaded MPM like
- <code class="module"><a href="./mod/worker.html">worker</a></code>, while sites requiring
- stability or compatibility with older software can use a
- <code class="module"><a href="./mod/prefork.html">prefork</a></code>. In addition,
- special features like serving different hosts under different
- userids (<code class="module"><a href="./mod/perchild.html">perchild</a></code>) can be
- provided.</li>
- </ul>
-
- <p>At the user level, MPMs appear much like other Apache
- modules. The main difference is that one and only one MPM must
- be loaded into the server at any time. The list of available
- MPMs appears on the <a href="mod/">module index page</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="choosing" id="choosing">Choosing an MPM</a></h2>
-
- <p>MPMs must be chosen during configuration, and compiled into
- the server. Compilers are capable of optimizing a lot of
- functions if threads are used, but only if they know that
- threads are being used. Because some MPMs use threads on Unix
- and others don't, Apache will always perform better if the MPM
- is chosen at configuration time and built into Apache.</p>
-
- <p>To actually choose the desired MPM, use the argument
- --with-mpm= <em>NAME</em> with the ./configure script.
- <em>NAME</em> is the name of the desired MPM.</p>
-
- <p>Once the server has been compiled, it is possible to
- determine which MPM was chosen by using <code>./httpd
- -l</code>. This command will list every module that is compiled
- into the server, including the MPM.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="defaults" id="defaults">MPM Defaults</a></h2>
-
-<p>The following table lists the default MPMs for various operating
-systems. This will be the MPM selected if you do not make another
-choice at compile-time.</p>
-
-<table>
-
-<tr><td>BeOS</td><td><code class="module"><a href="./mod/beos.html">beos</a></code></td></tr>
-<tr><td>Netware</td><td><code class="module"><a href="./mod/mpm_netware.html">mpm_netware</a></code></td></tr>
-<tr><td>OS/2</td><td><code class="module"><a href="./mod/mpmt_os2.html">mpmt_os2</a></code></td></tr>
-<tr><td>Unix</td><td><code class="module"><a href="./mod/prefork.html">prefork</a></code></td></tr>
-<tr><td>Windows</td><td><code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/mpm.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mpm.html.es b/docs/manual/mpm.html.es
deleted file mode 100644
index c6791c3c6f..0000000000
--- a/docs/manual/mpm.html.es
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Módulos de MultiProcesamiento (MPMs) - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Módulos de MultiProcesamiento (MPMs)</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./en/mpm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Este documento describe que es un Módulo de Multiprocesamiento y
-como los usa Apache.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introducción</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#choosing">Cómo Elegir un MPM</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#defaults">MPM por defecto</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Introducción</a></h2>
-
- <p>Apache está diseñado para ser un servidor web potente
- y flexible que pueda funcionar en la más amplia variedad de
- plataformas y entornos. Las diferentes plataformas y los
- diferentes entornos, hacen que a menudo sean necesarias diferentes
- características o funcionalidades, o que una misma
- característica o funcionalidad sea implementada de diferente
- manera para obtener una mayor eficiencia. Apache se ha adaptado
- siempre a una gran variedad de entornos a través de su
- diseño modular. Este diseño permite a los
- administradores de sitios web elegir que características van
- a ser incluidas en el servidor seleccionando que módulos se
- van a cargar, ya sea al compilar o al ejecutar el servidor.</p>
-
- <p>Apache 2.0 extiende este diseño modular hasta las
- funciones más básicas de un servidor web. El servidor
- viene con una serie de Módulos de MultiProcesamiento que son
- responsables de conectar con los puertos de red de la
- máquina, acceptar las peticiones, y generar los procesos hijo
- que se encargan de servirlas.</p>
-
- <p>La extensión del diseño modular a este nivel del
- servidor ofrece dos beneficios importantes:</p>
-
- <ul>
- <li>Apache puede soportar de una forma más fácil y
- eficiente una amplia variedad de sistemas operativos. En
- concreto, la versión de Windows de Apache es mucho más
- eficiente, porque el módulo <code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code>
- puede usar funcionalidades nativas de red en lugar de usar la
- capa POSIX como hace Apache 1.3. Este beneficio se extiende
- también a otros sistemas operativos que implementan sus
- respectivos MPMs.</li>
-
- <li>El servidor puede personalizarse mejor para las necesidades
- de cada sitio web. Por ejemplo, los sitios web que necesitan
- más que nada escalibildad pueden usar un MPM hebrado como
- <code class="module"><a href="./mod/worker.html">worker</a></code>, mientras que los sitios web que
- requieran por encima de otras cosas estabilidad o compatibilidad
- con software antiguo pueden usar
- <code class="module"><a href="./mod/prefork.html">prefork</a></code>. Además, se pueden configurar
- funcionalidades especiales como servir diferentes hosts con
- diferentes identificadores de usuario
- (<code class="module"><a href="./mod/perchild.html">perchild</a></code>).</li>
- </ul>
-
- <p>A nivel de usuario, los MPMs son como cualquier otro
- módulo de Apache. La diferencia más importante es que
- solo un MPM puede estar cargado en el servidor en un determinado
- momento. La lista de MPMs disponibles está en la <a href="mod/">sección índice de Módulos</a>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="choosing" id="choosing">Cómo Elegir un MPM</a></h2>
-
- <p>Los MPMs deben elegirse durante el proceso de
- configuración, y deben ser compilados en el servidor. Los
- compiladores son capaces de optimizar muchas funciones si se usan
- hebras, pero solo si se sabe que se están usando hebras. Como
- algunos MPM usan hebras en Unix y otros no, Apache tendrá un
- mejor rendimiento si el MPM es elegido en el momento de compilar y
- está incorporado en el servidor.</p>
-
- <p>Para elegir el MPM deseado, use el argumento --with-mpm=
- <em>NAME</em> con el script ./configure. <em>NAME</em> es el
- nombre del MPM deseado.</p>
-
- <p>Una vez que el servidor ha sido compilado, es posible
- determinar que MPM ha sido elegido usando <code>./httpd
- -l</code>. Este comando lista todos los módulos compilados en
- el servidor, incluido en MPM.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="defaults" id="defaults">MPM por defecto</a></h2>
-
-<p>En la siguiente tabla se muestran los MPMs por defecto para varios
-sistemas operativos. Estos serán los MPM seleccionados si no se
-especifica lo contrario al compilar.</p>
-
-<table>
-
-<tr><td>BeOS</td><td><code class="module"><a href="./mod/beos.html">beos</a></code></td></tr>
-<tr><td>Netware</td><td><code class="module"><a href="./mod/mpm_netware.html">mpm_netware</a></code></td></tr>
-<tr><td>OS/2</td><td><code class="module"><a href="./mod/mpmt_os2.html">mpmt_os2</a></code></td></tr>
-<tr><td>Unix</td><td><code class="module"><a href="./mod/prefork.html">prefork</a></code></td></tr>
-<tr><td>Windows</td><td><code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./en/mpm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mpm.html.ja.euc-jp b/docs/manual/mpm.html.ja.euc-jp
deleted file mode 100644
index 84e25d05c8..0000000000
--- a/docs/manual/mpm.html.ja.euc-jp
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM) - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/mpm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>¤³¤Îʸ½ñ¤Ç¤Ï¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë¤¬¤É¤Î¤è¤¦¤Ê¤â¤Î¤Ç¡¢
-Apache HTTP ¥µ¡¼¥Ð¤Ç¤É¤Î¤è¤¦¤Ë»ÈÍѤµ¤ì¤ë¤«¤Ë¤Ä¤¤¤Æ²òÀ⤷¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">¤Ï¤¸¤á¤Ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#choosing">MPM ¤òÁª¤Ö</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#defaults">MPM ¥Ç¥Õ¥©¥ë¥ÈÃÍ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">¤Ï¤¸¤á¤Ë</a></h2>
-
- <p>Apache HTTP ¥µ¡¼¥Ð¤Ï°Û¤Ê¤ëÉý¹­¤¤´Ä¶­¡¢Â¿¼ï¿Íͤʥץé¥Ã¥È¥Û¡¼¥à¤Ç
- Æ°ºî¤¹¤ë¤è¤¦¤Ë¡¢¥Ñ¥ï¥Õ¥ë¤Ç½ÀÆðÀ­¤ËÉÙ¤ó¤ÀÀ߷פˤʤäƤ¤¤Þ¤¹¡£
- °Û¤Ê¤ë¥×¥é¥Ã¥È¥Û¡¼¥à¡¦°Û¤Ê¤ë´Ä¶­¤Ç¤Ï¤·¤Ð¤·¤Ð¡¢
- °Û¤Ê¤ëµ¡Ç½¤¬É¬Íפˤʤ俤ꡢ
- Ʊ¤¸µ¡Ç½¤Ç¤â¸úΨ¤Î¤¿¤á¤Ë°Û¤Ê¤ë¼ÂÁõ¤¬É¬Íפˤʤ俤ꤷ¤Þ¤¹¡£
- Apache ¤Ç¤Ï¥â¥¸¥å¡¼¥ë²½¤µ¤ì¤¿À߷פˤè¤êÉý¹­¤¤´Ä¶­¤ËŬ±þ¤·¤Æ¤­¤Þ¤·¤¿¡£
- ¤³¤ÎÀ߷פΤª¤«¤²¤Ç¡¢´ÉÍý¼Ô¤Ï
- ¥³¥ó¥Ñ¥¤¥ë»þ¤Þ¤¿¤Ï¼Â¹Ô»þ¤Ë¤É¤Î¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤¹¤ë¤«Áª¤Ö¤³¤È¤Ë¤è¤Ã¤Æ¡¢
- ¤É¤Îµ¡Ç½¤ò¥µ¡¼¥Ð¤Ë¼è¤ê¹þ¤à¤«ÁªÂò¤¹¤ë¤³¤È¤¬¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Apache 2.0 ¤Ç¤Ï¡¢
- ¤³¤Î¥â¥¸¥å¡¼¥ë²½¤µ¤ì¤¿À߷פò¥µ¡¼¥Ð¤Î´ðËܵ¡Ç½¤Ë¤Þ¤Ç³ÈÄ¥¤·¤Þ¤·¤¿¡£
- ¥µ¡¼¥Ð¤Ë¤ÏÀºÁª¤µ¤ì¤¿¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)
- ¤¬ÉÕ¤¤¤Æ¤­¤Æ¡¢¤³¤ì¤é¤Ï¥Þ¥·¥ó¤Î¥Í¥Ã¥È¥ï¡¼¥¯¥Ý¡¼¥È¤ò¥Ð¥¤¥ó¥É¤·¤¿¤ê¡¢
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤¿¤ê¡¢¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¤è¤¦»Ò¥×¥í¥»¥¹¤Ë³ä¤êÅö¤Æ¤¿¤ê¡¢
- ¤È¤¤¤Ã¤¿Ìò³ä¤ò»ý¤Á¤Þ¤¹¡£</p>
-
- <p>¥â¥¸¥å¡¼¥ë²½¤µ¤ì¤¿À߷פò¥µ¡¼¥Ð¤Î¤³¤Î¥ì¥Ù¥ë¤Þ¤Ç³ÈÄ¥¤¹¤ë¤³¤È¤Ç
- Æó¤Ä¤Î½ÅÍפÊÍøÅÀ¤¬À¸¤Þ¤ì¤Þ¤¹:</p>
-
- <ul>
- <li>Apache ¤ÏÉý¹­¤¤¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ò
- ¤è¤êÈþ¤·¤¯¸úΨŪ¤Ë¥µ¥Ý¡¼¥È¤Ç¤­¤Þ¤¹¡£
- ÆÃ¤Ë Windows ÈǤΠApache ¤Ï¿ïʬ¸úΨŪ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¤Ê¤¼¤Ê¤é <code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code>
- ¤Ë¤è¤Ã¤Æ¡¢Apache 1.3 ¤ÇÍѤ¤¤é¤ì¤Æ¤¤¤¿ POSIX
- ¥ì¥¤¥ä¤ÎÂå¤ï¤ê¤Ë¥Í¥¤¥Æ¥£¥Ö¤Î¥Í¥Ã¥È¥ï¡¼¥¯µ¡Ç½¤ò
- ÍøÍѤǤ­¤ë¤«¤é¤Ç¤¹¡£
- ÆÃÊ̲½¤µ¤ì¤¿ MPM
- ¤ò¼ÂÁõ¤·¤¿Â¾¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¤â¡¢
- ƱÍͤˤ³¤ÎÍøÅÀ¤ÏÀ¸¤Þ¤ì¤Þ¤¹¡£</li>
-
- <li>¥µ¡¼¥Ð¤ÏÆÃÄê¤Î¥µ¥¤¥È¸þ¤±¤Ë¡¢¤è¤ê¾å¼ê¤Ë¥«¥¹¥¿¥Þ¥¤¥º¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð¡¢Èó¾ï¤ËÂ礭¤Ê¥¹¥±¡¼¥é¥Ó¥ê¥Æ¥£¤òɬÍפȤ¹¤ë¥µ¥¤¥È¤Ç¤Ï¡¢
- <code class="module"><a href="./mod/worker.html">worker</a></code> ¤È¤¤¤Ã¤¿¥¹¥ì¥Ã¥É²½¤µ¤ì¤¿
- MPM ¤òÍøÍѤǤ­¤ë°ìÊý¤Ç¡¢°ÂÄêÀ­¤ä¸Å¤¤¥½¥Õ¥È¥¦¥§¥¢¤È¤Î¸ß´¹À­¤ò
- ɬÍפȤ¹¤ë¥µ¥¤¥È¤Ç¤Ï <code class="module"><a href="./mod/prefork.html">prefork</a></code>
- ¤¬ÍøÍѤǤ­¤Þ¤¹¡£¤Þ¤¿¡¢
- °Û¤Ê¤ë¥Û¥¹¥È¤ò°Û¤Ê¤ë¥æ¡¼¥¶ ID ¤ÇÆ°ºî¤µ¤»¤ë
- (<code class="module"><a href="./mod/perchild.html">perchild</a></code>) ¤È¤¤¤Ã¤¿
- ÆÃÊ̤ʵ¡Ç½¤âÄ󶡤Ǥ­¤Þ¤¹¡£</li>
- </ul>
-
- <p>¥æ¡¼¥¶¥ì¥Ù¥ë¤Ç¤Ï¡¢MPM ¤Ï¾¤Î Apache
- ¥â¥¸¥å¡¼¥ë¤ÈƱÅù¤Ë¸«¤¨¤Þ¤¹¡£
- ¼ç¤Ê°ã¤¤¤Ï¡¢¤¤¤Ä¤Ç¤âÍ£°ì¤Î MPM
- ¤¬¥í¡¼¥É¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦ÅÀ¤Ç¤¹¡£
- ÍøÍѲÄǽ¤Ê MPM ¤Ï
- <a href="mod/">module ¥¤¥ó¥Ç¥Ã¥¯¥¹</a>¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="choosing" id="choosing">MPM ¤òÁª¤Ö</a></h2>
-
- <p>MPM ¤ÏÀßÄêÃæ¤ËÁªÂò¤·¤Æ¡¢¥µ¡¼¥ÐÆâÉô¤Ë¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Ê¤±¤ì¤Ð
- ¤Ê¤ê¤Þ¤»¤ó¡£
- ¥³¥ó¥Ñ¥¤¥é¤Ï¡¢¥¹¥ì¥Ã¥É¤¬»ÈÍѤµ¤ì¤Æ¤¤¤ì¤ÐÍÍ¡¹¤Êµ¡Ç½¤òºÇŬ²½¤Ç¤­¤Þ¤¹¤¬¡¢
- ¤½¤â¤½¤â¥¹¥ì¥Ã¥É¤¬»È¤ï¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤òÃΤëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- MPM ¤Ë¤Ï Unix ¾å¤Ç¥¹¥ì¥Ã¥É¤òÍѤ¤¤ë¤â¤Î¤ä¡¢¥¹¥ì¥Ã¥É¤ò¤Þ¤Ã¤¿¤¯
- »È¤ï¤Ê¤¤¤â¤Î¤¬¤¢¤ë¤Î¤Ç¡¢
- Apache ¤Ï¡¢MPM ¤¬ÀßÄêÃæ¤ËÁªÂò¤µ¤ì¤Æ Apache ÆâÉô¤ËÁȤ߹þ¤Þ¤ì¤¿¾ì¹ç¤ÎÊý¤¬
- ¾ï¤Ë¤è¤êÎɤ¤¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤òȯ´ø¤·¤Þ¤¹¡£</p>
-
- <p>˾¤ß¤Î MPM ¤ò¼ÂºÝ¤ËÁª¤Ö¤¿¤á¤Ë¤Ï¡¢./configure ¥¹¥¯¥ê¥×¥È¤Ç
- --with-mpm= <em>NAME</em> °ú¿ô¤òÍѤ¤¤Æ¤¯¤À¤µ¤¤¡£
- <em>NAME</em> ¤Ï˾¤ß¤Î MPM ¤Î̾Á°¤Ç¤¹¡£</p>
-
- <p>¥µ¡¼¥Ð¥³¥ó¥Ñ¥¤¥ë¸å¤Ï¡¢¤É¤Î MPM ¤¬ÁªÂò¤µ¤ì¤¿¤«¤ò
- <code>./httpd -l</code> ¤Ç³Î¤«¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤Î¥³¥Þ¥ó¥É¤Ï¡¢MPM
- ¤ò´Þ¤á¡¢¥µ¡¼¥Ð¤Ë¥³¥ó¥Ñ¥¤¥ë¤ÇÁȤ߹þ¤Þ¤ì¤¿¥â¥¸¥å¡¼¥ëÁ´¤Æ¤ò
- Îóµó¤·¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="defaults" id="defaults">MPM ¥Ç¥Õ¥©¥ë¥ÈÃÍ</a></h2>
-
-<p>¼¡É½¤ËÍÍ¡¹¤Ê OS ¸þ¤±¤Î¥Ç¥Õ¥©¥ë¥È¤Î MPM °ìÍ÷¤ò·ÇºÜ¤·¤Æ¤¤¤Þ¤¹¡£
-¥³¥ó¥Ñ¥¤¥ë»þ¤Ë°Õ¿ÞŪ¤Ë¾¤òÁªÂò¤·¤Ê¤±¤ì¤Ð¡¢¼«Æ°Åª¤Ë¤³¤ì¤é¤Î MPM
-¤¬ÁªÂò¤µ¤ì¤Þ¤¹¡£</p>
-
-<table>
-
-<tr><td>BeOS</td><td><code class="module"><a href="./mod/beos.html">beos</a></code></td></tr>
-<tr><td>Netware</td><td><code class="module"><a href="./mod/mpm_netware.html">mpm_netware</a></code></td></tr>
-<tr><td>OS/2</td><td><code class="module"><a href="./mod/mpmt_os2.html">mpmt_os2</a></code></td></tr>
-<tr><td>Unix</td><td><code class="module"><a href="./mod/prefork.html">prefork</a></code></td></tr>
-<tr><td>Windows</td><td><code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/mpm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mpm.html.ko.euc-kr b/docs/manual/mpm.html.ko.euc-kr
deleted file mode 100644
index 35232c918a..0000000000
--- a/docs/manual/mpm.html.ko.euc-kr
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>´ÙÁßó¸® ¸ðµâ (MPM) - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>´ÙÁßó¸® ¸ðµâ (MPM)</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/mpm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>ÀÌ ¹®¼­´Â ´ÙÁßó¸® ¸ðµâ (Multi-Processing Module)ÀÌ ¹«¾ùÀ̸ç,
-¾ÆÆÄÄ¡ À¥¼­¹ö°¡ À̸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">¼Ò°³</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#choosing">MPM ¼±ÅÃÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#defaults">MPM ±âº»°ª</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">¼Ò°³</a></h2>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ´Ù¾çÇÑ È¯°æÀÇ ´Ù¾çÇÑ Ç÷¡Æû¿¡¼­ µ¿ÀÛÇÒ
- ¼ö ÀÖµµ·Ï °­·ÂÇÏ°í À¯¿¬ÇÏ°Ô ¼³°èµÇ¾ú´Ù. ´Ù¸¥ Ç÷¡Æû°ú ´Ù¸¥
- ȯ°æÀº º¸Åë ´Ù¸¥ ±â´ÉÀ» ¿ä±¸Çϸç, ¾î¶² ±â´ÉÀ» °¡Àå È¿À²ÀûÀ¸·Î
- ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ´Ù¸¦ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ¸ðµâÈ­µÈ ¼³°è·Î ÀÌ·±
- ´Ù¾çÇÑ È¯°æ¿¡ Ç×»ó ÀûÀÀÇØ¿Ô´Ù. ±×·¡¼­ À¥¸¶½ºÅÍ´Â ÄÄÆÄÀϽÃ
- ȤÀº ½ÇÇà½Ã ¾î¶² ¸ðµâÀ» ÀоîµéÀÏÁö ¼±ÅÃÇÏ¿© ¼­¹ö¿¡ Æ÷ÇÔÇÒ
- ±â´ÉÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Apache 2.0Àº ÀÌ·± ¸ðµâÈ­µÈ ¼³°è¸¦ À¥¼­¹öÀÇ °¡Àå ±âº»ÀûÀÎ
- ºÎºÐ¿¡±îÁö È®ÀåÇß´Ù. ¼­¹ö´Â ½Ã½ºÅÛÀÇ ³×Æ®¿÷ Æ÷Æ®¿¡ ¿¬°áÇÏ°í,
- ¿äûÀ» ¹Þ¾ÆµéÀ̸ç, ¹Þ¾ÆµéÀÎ ¿äûÀ» ó¸®ÇϱâÀ§ÇØ Àڽĵ鿡°Ô
- ºÐ¹èÇÏ´Â ´ÙÁßó¸® ¸ðµâ (Multi-Processing Modules, MPMs)À»
- ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼­¹ö¸¦ ÀÌ Á¤µµ·Î ¸ðµâÈ­ÇÏ¸é µÎ°¡Áö Áß¿äÇÑ ÀåÁ¡ÀÌ
- ÀÖ´Ù:</p>
-
- <ul>
- <li><code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code>°¡ Apache 1.3¿¡¼­ »ç¿ëÇÑ
- POSIXÃþ ´ë½Å ÀÚü ³×Æ®¿÷ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â µî,
- ¾ÆÆÄÄ¡´Â ¿©·¯ ´Ù¾çÇÑ ¿î¿µÃ¼Á¦¸¦ ´õ ±ò²ûÇÏ°í È¿À²ÀûÀ¸·Î
- Áö¿øÇÒ ¼ö ÀÖ´Ù. ÀÌ ÀåÁ¡Àº ƯȭµÈ MPMÀ» ±¸ÇöÇÑ ´Ù¸¥
- ¿î¿µÃ¼Á¦¿¡µµ Àû¿ëµÈ´Ù.</li>
-
- <li>¼­¹ö´Â ƯÁ¤ »çÀÌÆ®ÀÇ ¿ä±¸Á¶°Ç¿¡ ´õ ƯȭµÉ ¼ö ÀÖ´Ù.
- ¿¹¸¦ µé¾î ³ôÀº È®Àå°¡´É¼º(scalability)ÀÌ ÇÊ¿äÇÑ »çÀÌÆ®´Â
- <code class="module"><a href="./mod/worker.html">worker</a></code>¿Í °°Àº ¾²·¹µå MPMÀ» »ç¿ëÇÏ°í,
- ¾ÈÁ¤¼º°ú ¿À·¡µÈ ¼ÒÇÁÆ®¿þ¾î¿ÍÀÇ È£È¯¼ºÀÌ ÇÊ¿äÇÑ »çÀÌÆ®´Â
- <code class="module"><a href="./mod/preforking MPM.html">preforking MPM</a></code>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- Ãß°¡·Î ´Ù¸¥ »ç¿ëÀÚ¾ÆÀ̵ð·Î ¿©·¯ È£½ºÆ®¸¦ ¼­ºñ½ºÇÏ´Â
- °Í(<code class="module"><a href="./mod/perchild.html">perchild</a></code>)°ú °°Àº Ưº°ÇÑ ±â´Éµµ
- Á¦°øµÈ´Ù.</li>
- </ul>
-
- <p>»ç¿ëÀÚ°¡ º¸±â¿¡ MPMÀº ´Ù¸¥ ¾ÆÆÄÄ¡ ¸ðµâ°ú °ÅÀÇ ºñ½ÁÇØ
- º¸ÀδÙ. ÁÖµÈ Â÷ÀÌ´Â ¼­¹ö´Â Çѹø¿¡ ¿ÀÁ÷ ÇÑ MPM¸¸À» »ç¿ëÇؾß
- ÇÑ´Ù´Â Á¡ÀÌ´Ù. »ç¿ë°¡´ÉÇÑ MPM ¸ñ·ÏÀº <a href="mod/">¸ðµâ
- ¸ñ·Ï ÆäÀÌÁö</a>¿¡ ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="choosing" id="choosing">MPM ¼±ÅÃÇϱâ</a></h2>
-
- <p>MPMs´Â ±¸¼ºÁß¿¡ ¼±ÅÃÇÏ¿© ¼­¹ö¿¡ ÄÄÆÄÀÏµÇ¾ß ÇÑ´Ù.
- ¾²·¹µå¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÄÄÆÄÀÏ·¯°¡ ¾Ë¸é ¸¹Àº ÇÔ¼ö¸¦
- ÃÖÀûÈ­ÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º¿¡¼­ ¸î¸î MPMÀº ¾²·¹µå¸¦ ¾²°í
- ³ª¸ÓÁö´Â ¾Æ´Ï¹Ç·Î, MPMÀÌ ±¸¼ºÁß¿¡ ¼±ÅÃµÇ¾î ¾ÆÆÄÄ¡¿¡
- ÄÄÆÄÀϵɶ§ ¾ÆÆÄÄ¡´Â ´õ ºü¸¥ ¼Óµµ¸¦ ³½´Ù.</p>
-
- <p>¿øÇÏ´Â MPMÀ» ¼±ÅÃÇÏ·Á¸é ./configure ½ºÅ©¸³Æ®¿¡
- with-mpm= <em>NAME</em> ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇ϶ó. <em>NAME</em>Àº
- ¿øÇÏ´Â MPM À̸§ÀÌ´Ù.</p>
-
- <p>¼­¹ö¸¦ ÄÄÆÄÀÏÇÑÈÄ <code>./httpd -l</code> ¸í·É¾î·Î ¼±ÅÃÇÑ
- MPMÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ ¸í·É¾î´Â MPMÀ» Æ÷ÇÔÇÏ¿© ¼­¹ö¿¡ ÄÄÆÄÀϵÈ
- ¸ðµç ¸ðµâÀ» ¾Ë·ÁÁØ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="defaults" id="defaults">MPM ±âº»°ª</a></h2>
-
-<p>´ÙÀ½ Ç¥´Â ¿©·¯ ¿î¿µÃ¼Á¦ÀÇ ±âº» MPMÀ» º¸¿©ÁØ´Ù. ÄÄÆÄÀϽÃ
-´Ù¸£°Ô ¼±ÅÃÇÏÁö ¾ÊÀ¸¸é ÀÌ MPMÀÌ ¼±ÅõȴÙ.</p>
-
-<table>
-
-<tr><td>BeOS</td><td><code class="module"><a href="./mod/beos.html">beos</a></code></td></tr>
-<tr><td>Netware</td><td><code class="module"><a href="./mod/mpm_netware.html">mpm_netware</a></code></td></tr>
-<tr><td>OS/2</td><td><code class="module"><a href="./mod/mpmt_os2.html">mpmt_os2</a></code></td></tr>
-<tr><td>À¯´Ð½º</td><td><code class="module"><a href="./mod/prefork.html">prefork</a></code></td></tr>
-<tr><td>À©µµ¿ìÁî</td><td><code class="module"><a href="./mod/mpm_winnt.html">mpm_winnt</a></code></td></tr>
-</table>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/mpm.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/mpm.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/mpm.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/mpm.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/mpm.xml b/docs/manual/mpm.xml
deleted file mode 100644
index 74f40d9859..0000000000
--- a/docs/manual/mpm.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="mpm.xml.meta">
-
- <title>Multi-Processing Modules (MPMs)</title>
-
-<summary>
-<p>This document describes what a Multi-Processing Module is and
-how they are used by the Apache HTTP Server.</p>
-</summary>
-
-<section id="introduction"><title>Introduction</title>
-
- <p>The Apache HTTP Server is designed to be a powerful and
- flexible web server that can work on a very wide variety of
- platforms in a range of different environments. Different
- platforms and different environments often require different
- features, or may have different ways of implementing the same
- feature most efficiently. Apache has always accommodated a wide
- variety of environments through its modular design. This design
- allows the webmaster to choose which features will be included
- in the server by selecting which modules to load either at
- compile-time or at run-time.</p>
-
- <p>Apache 2.0 extends this modular design to the most basic
- functions of a web server. The server ships with a selection of
- Multi-Processing Modules (MPMs) which are responsible for
- binding to network ports on the machine, accepting requests,
- and dispatching children to handle the requests.</p>
-
- <p>Extending the modular design to this level of the server
- allows two important benefits:</p>
-
- <ul>
- <li>Apache can more cleanly and efficiently support a wide
- variety of operating systems. In particular, the Windows
- version of Apache is now much more efficient, since
- <module>mpm_winnt</module> can use native
- networking features in place of the POSIX layer used in
- Apache 1.3. This benefit also extends to other operating
- systems that implement specialized MPMs.</li>
-
- <li>The server can be better customized for the needs of the
- particular site. For example, sites that need a great deal of
- scalability can choose to use a threaded MPM like
- <module>worker</module>, while sites requiring
- stability or compatibility with older software can use a
- <module>prefork</module>. In addition,
- special features like serving different hosts under different
- userids (<module>perchild</module>) can be
- provided.</li>
- </ul>
-
- <p>At the user level, MPMs appear much like other Apache
- modules. The main difference is that one and only one MPM must
- be loaded into the server at any time. The list of available
- MPMs appears on the <a href="mod/">module index page</a>.</p>
-
-</section>
-
-<section id="choosing"><title>Choosing an MPM</title>
-
- <p>MPMs must be chosen during configuration, and compiled into
- the server. Compilers are capable of optimizing a lot of
- functions if threads are used, but only if they know that
- threads are being used. Because some MPMs use threads on Unix
- and others don't, Apache will always perform better if the MPM
- is chosen at configuration time and built into Apache.</p>
-
- <p>To actually choose the desired MPM, use the argument
- --with-mpm= <em>NAME</em> with the ./configure script.
- <em>NAME</em> is the name of the desired MPM.</p>
-
- <p>Once the server has been compiled, it is possible to
- determine which MPM was chosen by using <code>./httpd
- -l</code>. This command will list every module that is compiled
- into the server, including the MPM.</p>
-</section>
-
-<section id="defaults"><title>MPM Defaults</title>
-
-<p>The following table lists the default MPMs for various operating
-systems. This will be the MPM selected if you do not make another
-choice at compile-time.</p>
-
-<table>
-<columnspec><column width=".2"/><column width=".2"/></columnspec>
-<tr><td>BeOS</td><td><module>beos</module></td></tr>
-<tr><td>Netware</td><td><module>mpm_netware</module></td></tr>
-<tr><td>OS/2</td><td><module>mpmt_os2</module></td></tr>
-<tr><td>Unix</td><td><module>prefork</module></td></tr>
-<tr><td>Windows</td><td><module>mpm_winnt</module></td></tr>
-</table>
-</section>
-
-</manualpage>
diff --git a/docs/manual/mpm.xml.es b/docs/manual/mpm.xml.es
deleted file mode 100644
index 0202abb824..0000000000
--- a/docs/manual/mpm.xml.es
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="mpm.xml.meta">
-
- <title>M&#243;dulos de MultiProcesamiento (MPMs)</title>
-
-<summary>
-<p>Este documento describe que es un M&#243;dulo de Multiprocesamiento y
-como los usa Apache.</p>
-</summary>
-
-<section id="introduction"><title>Introducci&#243;n</title>
-
- <p>Apache est&#225; dise&#241;ado para ser un servidor web potente
- y flexible que pueda funcionar en la m&#225;s amplia variedad de
- plataformas y entornos. Las diferentes plataformas y los
- diferentes entornos, hacen que a menudo sean necesarias diferentes
- caracter&#237;sticas o funcionalidades, o que una misma
- caracter&#237;stica o funcionalidad sea implementada de diferente
- manera para obtener una mayor eficiencia. Apache se ha adaptado
- siempre a una gran variedad de entornos a trav&#233;s de su
- dise&#241;o modular. Este dise&#241;o permite a los
- administradores de sitios web elegir que caracter&#237;sticas van
- a ser incluidas en el servidor seleccionando que m&#243;dulos se
- van a cargar, ya sea al compilar o al ejecutar el servidor.</p>
-
- <p>Apache 2.0 extiende este dise&#241;o modular hasta las
- funciones m&#225;s b&#225;sicas de un servidor web. El servidor
- viene con una serie de M&#243;dulos de MultiProcesamiento que son
- responsables de conectar con los puertos de red de la
- m&#225;quina, acceptar las peticiones, y generar los procesos hijo
- que se encargan de servirlas.</p>
-
- <p>La extensi&#243;n del dise&#241;o modular a este nivel del
- servidor ofrece dos beneficios importantes:</p>
-
- <ul>
- <li>Apache puede soportar de una forma m&#225;s f&#225;cil y
- eficiente una amplia variedad de sistemas operativos. En
- concreto, la versi&#243;n de Windows de Apache es mucho m&#225;s
- eficiente, porque el m&#243;dulo <module>mpm_winnt</module>
- puede usar funcionalidades nativas de red en lugar de usar la
- capa POSIX como hace Apache 1.3. Este beneficio se extiende
- tambi&#233;n a otros sistemas operativos que implementan sus
- respectivos MPMs.</li>
-
- <li>El servidor puede personalizarse mejor para las necesidades
- de cada sitio web. Por ejemplo, los sitios web que necesitan
- m&#225;s que nada escalibildad pueden usar un MPM hebrado como
- <module>worker</module>, mientras que los sitios web que
- requieran por encima de otras cosas estabilidad o compatibilidad
- con software antiguo pueden usar
- <module>prefork</module>. Adem&#225;s, se pueden configurar
- funcionalidades especiales como servir diferentes hosts con
- diferentes identificadores de usuario
- (<module>perchild</module>).</li>
- </ul>
-
- <p>A nivel de usuario, los MPMs son como cualquier otro
- m&#243;dulo de Apache. La diferencia m&#225;s importante es que
- solo un MPM puede estar cargado en el servidor en un determinado
- momento. La lista de MPMs disponibles est&#225; en la <a
- href="mod/">secci&#243;n &#237;ndice de M&#243;dulos</a>.</p>
-
-</section>
-
-<section id="choosing"><title>C&#243;mo Elegir un MPM</title>
-
- <p>Los MPMs deben elegirse durante el proceso de
- configuraci&#243;n, y deben ser compilados en el servidor. Los
- compiladores son capaces de optimizar muchas funciones si se usan
- hebras, pero solo si se sabe que se est&#225;n usando hebras. Como
- algunos MPM usan hebras en Unix y otros no, Apache tendr&#225; un
- mejor rendimiento si el MPM es elegido en el momento de compilar y
- est&#225; incorporado en el servidor.</p>
-
- <p>Para elegir el MPM deseado, use el argumento --with-mpm=
- <em>NAME</em> con el script ./configure. <em>NAME</em> es el
- nombre del MPM deseado.</p>
-
- <p>Una vez que el servidor ha sido compilado, es posible
- determinar que MPM ha sido elegido usando <code>./httpd
- -l</code>. Este comando lista todos los m&#243;dulos compilados en
- el servidor, incluido en MPM.</p>
-</section>
-
-<section id="defaults"><title>MPM por defecto</title>
-
-<p>En la siguiente tabla se muestran los MPMs por defecto para varios
-sistemas operativos. Estos ser&#225;n los MPM seleccionados si no se
-especifica lo contrario al compilar.</p>
-
-<table>
-<columnspec><column width=".2"/><column width=".2"/></columnspec>
-<tr><td>BeOS</td><td><module>beos</module></td></tr>
-<tr><td>Netware</td><td><module>mpm_netware</module></td></tr>
-<tr><td>OS/2</td><td><module>mpmt_os2</module></td></tr>
-<tr><td>Unix</td><td><module>prefork</module></td></tr>
-<tr><td>Windows</td><td><module>mpm_winnt</module></td></tr>
-</table>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/mpm.xml.ja b/docs/manual/mpm.xml.ja
deleted file mode 100644
index 177bb472fc..0000000000
--- a/docs/manual/mpm.xml.ja
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="mpm.xml.meta">
-
- <title>$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)</title>
-
-<summary>
-<p>$B$3$NJ8=q$G$O%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k$,$I$N$h$&$J$b$N$G!"(B
-Apache HTTP $B%5!<%P$G$I$N$h$&$K;HMQ$5$l$k$+$K$D$$$F2r@b$7$F$$$^$9!#(B</p>
-</summary>
-
-<section id="introduction"><title>$B$O$8$a$K(B</title>
-
- <p>Apache HTTP $B%5!<%P$O0[$J$kI}9-$$4D6-!"B?<oB?MM$J%W%i%C%H%[!<%`$G(B
- $BF0:n$9$k$h$&$K!"%Q%o%U%k$G=@Fp@-$KIY$s$@@_7W$K$J$C$F$$$^$9!#(B
- $B0[$J$k%W%i%C%H%[!<%`!&0[$J$k4D6-$G$O$7$P$7$P!"(B
- $B0[$J$k5!G=$,I,MW$K$J$C$?$j!"(B
- $BF1$85!G=$G$b8zN($N$?$a$K0[$J$k<BAu$,I,MW$K$J$C$?$j$7$^$9!#(B
- Apache $B$G$O%b%8%e!<%k2=$5$l$?@_7W$K$h$jI}9-$$4D6-$KE,1~$7$F$-$^$7$?!#(B
- $B$3$N@_7W$N$*$+$2$G!"4IM}<T$O(B
- $B%3%s%Q%$%k;~$^$?$O<B9T;~$K$I$N%b%8%e!<%k$r%m!<%I$9$k$+A*$V$3$H$K$h$C$F!"(B
- $B$I$N5!G=$r%5!<%P$K<h$j9~$`$+A*Br$9$k$3$H$,$,$G$-$^$9!#(B</p>
-
- <p>Apache 2.0 $B$G$O!"(B
- $B$3$N%b%8%e!<%k2=$5$l$?@_7W$r%5!<%P$N4pK\5!G=$K$^$G3HD%$7$^$7$?!#(B
- $B%5!<%P$K$O@:A*$5$l$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
- $B$,IU$$$F$-$F!"$3$l$i$O%^%7%s$N%M%C%H%o!<%/%]!<%H$r%P%$%s%I$7$?$j!"(B
- $B%j%/%(%9%H$r<u$1IU$1$?$j!"%j%/%(%9%H$r07$&$h$&;R%W%m%;%9$K3d$jEv$F$?$j!"(B
- $B$H$$$C$?Lr3d$r;}$A$^$9!#(B</p>
-
- <p>$B%b%8%e!<%k2=$5$l$?@_7W$r%5!<%P$N$3$N%l%Y%k$^$G3HD%$9$k$3$H$G(B
- $BFs$D$N=EMW$JMxE@$,@8$^$l$^$9(B:</p>
-
- <ul>
- <li>Apache $B$OI}9-$$%*%Z%l!<%F%#%s%0%7%9%F%`$r(B
- $B$h$jH~$7$/8zN(E*$K%5%]!<%H$G$-$^$9!#(B
- $BFC$K(B Windows $BHG$N(B Apache $B$O?oJ,8zN(E*$K$J$j$^$7$?!#(B
- $B$J$<$J$i(B <module>mpm_winnt</module>
- $B$K$h$C$F!"(BApache 1.3 $B$GMQ$$$i$l$F$$$?(B POSIX
- $B%l%$%d$NBe$o$j$K%M%$%F%#%V$N%M%C%H%o!<%/5!G=$r(B
- $BMxMQ$G$-$k$+$i$G$9!#(B
- $BFCJL2=$5$l$?(B MPM
- $B$r<BAu$7$?B>$N%*%Z%l!<%F%#%s%0%7%9%F%`$G$b!"(B
- $BF1MM$K$3$NMxE@$O@8$^$l$^$9!#(B</li>
-
- <li>$B%5!<%P$OFCDj$N%5%$%H8~$1$K!"$h$j>e<j$K%+%9%?%^%$%:$G$-$^$9!#(B
- $BNc$($P!"Hs>o$KBg$-$J%9%1!<%i%S%j%F%#$rI,MW$H$9$k%5%$%H$G$O!"(B
- <module>worker</module> $B$H$$$C$?%9%l%C%I2=$5$l$?(B
- MPM $B$rMxMQ$G$-$k0lJ}$G!"0BDj@-$d8E$$%=%U%H%&%'%"$H$N8_49@-$r(B
- $BI,MW$H$9$k%5%$%H$G$O(B <module>prefork</module>
- $B$,MxMQ$G$-$^$9!#$^$?!"(B
- $B0[$J$k%[%9%H$r0[$J$k%f!<%6(B ID $B$GF0:n$5$;$k(B
- (<module>perchild</module>) $B$H$$$C$?(B
- $BFCJL$J5!G=$bDs6!$G$-$^$9!#(B</li>
- </ul>
-
- <p>$B%f!<%6%l%Y%k$G$O!"(BMPM $B$OB>$N(B Apache
- $B%b%8%e!<%k$HF1Ey$K8+$($^$9!#(B
- $B<g$J0c$$$O!"$$$D$G$bM#0l$N(B MPM
- $B$,%m!<%I$5$l$J$1$l$P$J$i$J$$$H$$$&E@$G$9!#(B
- $BMxMQ2DG=$J(B MPM $B$O(B
- <a href="mod/">module $B%$%s%G%C%/%9(B</a>$B$K$"$j$^$9!#(B</p>
-
-</section>
-
-<section id="choosing"><title>MPM $B$rA*$V(B</title>
-
- <p>MPM $B$O@_DjCf$KA*Br$7$F!"%5!<%PFbIt$K%3%s%Q%$%k$5$l$J$1$l$P(B
- $B$J$j$^$;$s!#(B
- $B%3%s%Q%$%i$O!"%9%l%C%I$,;HMQ$5$l$F$$$l$PMM!9$J5!G=$r:GE,2=$G$-$^$9$,!"(B
- $B$=$b$=$b%9%l%C%I$,;H$o$l$F$$$k$H$$$&$3$H$rCN$kI,MW$,$"$j$^$9!#(B
- MPM $B$K$O(B Unix $B>e$G%9%l%C%I$rMQ$$$k$b$N$d!"%9%l%C%I$r$^$C$?$/(B
- $B;H$o$J$$$b$N$,$"$k$N$G!"(B
- Apache $B$O!"(BMPM $B$,@_DjCf$KA*Br$5$l$F(B Apache $BFbIt$KAH$_9~$^$l$?>l9g$NJ}$,(B
- $B>o$K$h$jNI$$%Q%U%)!<%^%s%9$rH/4x$7$^$9!#(B</p>
-
- <p>$BK>$_$N(B MPM $B$r<B:]$KA*$V$?$a$K$O!"(B./configure $B%9%/%j%W%H$G(B
- --with-mpm= <em>NAME</em> $B0z?t$rMQ$$$F$/$@$5$$!#(B
- <em>NAME</em> $B$OK>$_$N(B MPM $B$NL>A0$G$9!#(B</p>
-
- <p>$B%5!<%P%3%s%Q%$%k8e$O!"$I$N(B MPM $B$,A*Br$5$l$?$+$r(B
- <code>./httpd -l</code> $B$G3N$+$a$k$3$H$,$G$-$^$9!#(B
- $B$3$N%3%^%s%I$O!"(BMPM
- $B$r4^$a!"%5!<%P$K%3%s%Q%$%k$GAH$_9~$^$l$?%b%8%e!<%kA4$F$r(B
- $BNs5s$7$^$9!#(B</p>
-</section>
-
-<section id="defaults"><title>MPM $B%G%U%)%k%HCM(B</title>
-
-<p>$B<!I=$KMM!9$J(B OS $B8~$1$N%G%U%)%k%H$N(B MPM $B0lMw$r7G:\$7$F$$$^$9!#(B
-$B%3%s%Q%$%k;~$K0U?^E*$KB>$rA*Br$7$J$1$l$P!"<+F0E*$K$3$l$i$N(B MPM
-$B$,A*Br$5$l$^$9!#(B</p>
-
-<table>
-<columnspec><column width=".2"/><column width=".2"/></columnspec>
-<tr><td>BeOS</td><td><module>beos</module></td></tr>
-<tr><td>Netware</td><td><module>mpm_netware</module></td></tr>
-<tr><td>OS/2</td><td><module>mpmt_os2</module></td></tr>
-<tr><td>Unix</td><td><module>prefork</module></td></tr>
-<tr><td>Windows</td><td><module>mpm_winnt</module></td></tr>
-</table>
-</section>
-
-</manualpage>
diff --git a/docs/manual/mpm.xml.ko b/docs/manual/mpm.xml.ko
deleted file mode 100644
index 06ca0fadaf..0000000000
--- a/docs/manual/mpm.xml.ko
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="mpm.xml.meta">
-
- <title>´ÙÁßó¸® ¸ðµâ (MPM)</title>
-
-<summary>
-<p>ÀÌ ¹®¼­´Â ´ÙÁßó¸® ¸ðµâ (Multi-Processing Module)ÀÌ ¹«¾ùÀ̸ç,
-¾ÆÆÄÄ¡ À¥¼­¹ö°¡ À̸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ¼³¸íÇÑ´Ù.</p>
-</summary>
-
-<section id="introduction"><title>¼Ò°³</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ´Ù¾çÇÑ È¯°æÀÇ ´Ù¾çÇÑ Ç÷¡Æû¿¡¼­ µ¿ÀÛÇÒ
- ¼ö ÀÖµµ·Ï °­·ÂÇÏ°í À¯¿¬ÇÏ°Ô ¼³°èµÇ¾ú´Ù. ´Ù¸¥ Ç÷¡Æû°ú ´Ù¸¥
- ȯ°æÀº º¸Åë ´Ù¸¥ ±â´ÉÀ» ¿ä±¸Çϸç, ¾î¶² ±â´ÉÀ» °¡Àå È¿À²ÀûÀ¸·Î
- ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ´Ù¸¦ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ¸ðµâÈ­µÈ ¼³°è·Î ÀÌ·±
- ´Ù¾çÇÑ È¯°æ¿¡ Ç×»ó ÀûÀÀÇØ¿Ô´Ù. ±×·¡¼­ À¥¸¶½ºÅÍ´Â ÄÄÆÄÀϽÃ
- ȤÀº ½ÇÇà½Ã ¾î¶² ¸ðµâÀ» ÀоîµéÀÏÁö ¼±ÅÃÇÏ¿© ¼­¹ö¿¡ Æ÷ÇÔÇÒ
- ±â´ÉÀ» °áÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>Apache 2.0Àº ÀÌ·± ¸ðµâÈ­µÈ ¼³°è¸¦ À¥¼­¹öÀÇ °¡Àå ±âº»ÀûÀÎ
- ºÎºÐ¿¡±îÁö È®ÀåÇß´Ù. ¼­¹ö´Â ½Ã½ºÅÛÀÇ ³×Æ®¿÷ Æ÷Æ®¿¡ ¿¬°áÇÏ°í,
- ¿äûÀ» ¹Þ¾ÆµéÀ̸ç, ¹Þ¾ÆµéÀÎ ¿äûÀ» ó¸®ÇϱâÀ§ÇØ Àڽĵ鿡°Ô
- ºÐ¹èÇÏ´Â ´ÙÁßó¸® ¸ðµâ (Multi-Processing Modules, MPMs)À»
- ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¼­¹ö¸¦ ÀÌ Á¤µµ·Î ¸ðµâÈ­ÇÏ¸é µÎ°¡Áö Áß¿äÇÑ ÀåÁ¡ÀÌ
- ÀÖ´Ù:</p>
-
- <ul>
- <li><module>mpm_winnt</module>°¡ Apache 1.3¿¡¼­ »ç¿ëÇÑ
- POSIXÃþ ´ë½Å ÀÚü ³×Æ®¿÷ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â µî,
- ¾ÆÆÄÄ¡´Â ¿©·¯ ´Ù¾çÇÑ ¿î¿µÃ¼Á¦¸¦ ´õ ±ò²ûÇÏ°í È¿À²ÀûÀ¸·Î
- Áö¿øÇÒ ¼ö ÀÖ´Ù. ÀÌ ÀåÁ¡Àº ƯȭµÈ MPMÀ» ±¸ÇöÇÑ ´Ù¸¥
- ¿î¿µÃ¼Á¦¿¡µµ Àû¿ëµÈ´Ù.</li>
-
- <li>¼­¹ö´Â ƯÁ¤ »çÀÌÆ®ÀÇ ¿ä±¸Á¶°Ç¿¡ ´õ ƯȭµÉ ¼ö ÀÖ´Ù.
- ¿¹¸¦ µé¾î ³ôÀº È®Àå°¡´É¼º(scalability)ÀÌ ÇÊ¿äÇÑ »çÀÌÆ®´Â
- <module>worker</module>¿Í °°Àº ¾²·¹µå MPMÀ» »ç¿ëÇÏ°í,
- ¾ÈÁ¤¼º°ú ¿À·¡µÈ ¼ÒÇÁÆ®¿þ¾î¿ÍÀÇ È£È¯¼ºÀÌ ÇÊ¿äÇÑ »çÀÌÆ®´Â
- <module>preforking MPM</module>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- Ãß°¡·Î ´Ù¸¥ »ç¿ëÀÚ¾ÆÀ̵ð·Î ¿©·¯ È£½ºÆ®¸¦ ¼­ºñ½ºÇÏ´Â
- °Í(<module>perchild</module>)°ú °°Àº Ưº°ÇÑ ±â´Éµµ
- Á¦°øµÈ´Ù.</li>
- </ul>
-
- <p>»ç¿ëÀÚ°¡ º¸±â¿¡ MPMÀº ´Ù¸¥ ¾ÆÆÄÄ¡ ¸ðµâ°ú °ÅÀÇ ºñ½ÁÇØ
- º¸ÀδÙ. ÁÖµÈ Â÷ÀÌ´Â ¼­¹ö´Â Çѹø¿¡ ¿ÀÁ÷ ÇÑ MPM¸¸À» »ç¿ëÇؾß
- ÇÑ´Ù´Â Á¡ÀÌ´Ù. »ç¿ë°¡´ÉÇÑ MPM ¸ñ·ÏÀº <a href="mod/">¸ðµâ
- ¸ñ·Ï ÆäÀÌÁö</a>¿¡ ÀÖ´Ù.</p>
-
-</section>
-
-<section id="choosing"><title>MPM ¼±ÅÃÇϱâ</title>
-
- <p>MPMs´Â ±¸¼ºÁß¿¡ ¼±ÅÃÇÏ¿© ¼­¹ö¿¡ ÄÄÆÄÀÏµÇ¾ß ÇÑ´Ù.
- ¾²·¹µå¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÄÄÆÄÀÏ·¯°¡ ¾Ë¸é ¸¹Àº ÇÔ¼ö¸¦
- ÃÖÀûÈ­ÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º¿¡¼­ ¸î¸î MPMÀº ¾²·¹µå¸¦ ¾²°í
- ³ª¸ÓÁö´Â ¾Æ´Ï¹Ç·Î, MPMÀÌ ±¸¼ºÁß¿¡ ¼±ÅÃµÇ¾î ¾ÆÆÄÄ¡¿¡
- ÄÄÆÄÀϵɶ§ ¾ÆÆÄÄ¡´Â ´õ ºü¸¥ ¼Óµµ¸¦ ³½´Ù.</p>
-
- <p>¿øÇÏ´Â MPMÀ» ¼±ÅÃÇÏ·Á¸é ./configure ½ºÅ©¸³Æ®¿¡
- with-mpm= <em>NAME</em> ¾Æ±Ô¸ÕÆ®¸¦ »ç¿ëÇ϶ó. <em>NAME</em>Àº
- ¿øÇÏ´Â MPM À̸§ÀÌ´Ù.</p>
-
- <p>¼­¹ö¸¦ ÄÄÆÄÀÏÇÑÈÄ <code>./httpd -l</code> ¸í·É¾î·Î ¼±ÅÃÇÑ
- MPMÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ ¸í·É¾î´Â MPMÀ» Æ÷ÇÔÇÏ¿© ¼­¹ö¿¡ ÄÄÆÄÀϵÈ
- ¸ðµç ¸ðµâÀ» ¾Ë·ÁÁØ´Ù.</p>
-</section>
-
-<section id="defaults"><title>MPM ±âº»°ª</title>
-
-<p>´ÙÀ½ Ç¥´Â ¿©·¯ ¿î¿µÃ¼Á¦ÀÇ ±âº» MPMÀ» º¸¿©ÁØ´Ù. ÄÄÆÄÀϽÃ
-´Ù¸£°Ô ¼±ÅÃÇÏÁö ¾ÊÀ¸¸é ÀÌ MPMÀÌ ¼±ÅõȴÙ.</p>
-
-<table>
-<columnspec><column width=".2"/><column width=".2"/></columnspec>
-<tr><td>BeOS</td><td><module>beos</module></td></tr>
-<tr><td>Netware</td><td><module>mpm_netware</module></td></tr>
-<tr><td>OS/2</td><td><module>mpmt_os2</module></td></tr>
-<tr><td>À¯´Ð½º</td><td><module>prefork</module></td></tr>
-<tr><td>À©µµ¿ìÁî</td><td><module>mpm_winnt</module></td></tr>
-</table>
-</section>
-
-</manualpage>
diff --git a/docs/manual/mpm.xml.meta b/docs/manual/mpm.xml.meta
deleted file mode 100644
index f7cf22c62d..0000000000
--- a/docs/manual/mpm.xml.meta
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mpm</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/new_features_2_0.html b/docs/manual/new_features_2_0.html
deleted file mode 100644
index ce302525e6..0000000000
--- a/docs/manual/new_features_2_0.html
+++ /dev/null
@@ -1,23 +0,0 @@
-URI: new_features_2_0.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: new_features_2_0.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: new_features_2_0.html.fr
-Content-Language: fr
-Content-type: text/html; charset=ISO-8859-1
-
-URI: new_features_2_0.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: new_features_2_0.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
-
-URI: new_features_2_0.html.ru.koi8-r
-Content-Language: ru
-Content-type: text/html; charset=KOI8-R
diff --git a/docs/manual/new_features_2_0.html.de b/docs/manual/new_features_2_0.html.de
deleted file mode 100644
index fbfdfc0cc7..0000000000
--- a/docs/manual/new_features_2_0.html.de
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Übersicht der neuen Funktionen in Apache 2.0 - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Übersicht der neuen Funktionen in Apache 2.0</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/new_features_2_0.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>Dieses Dokument beschreibt einige der wichtigsten Änderungen
- des Apache HTTP Servers 2.0 gegenüber der Version 1.3.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#core">Core-Erweiterungen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#module">Modul-Erweiterungen</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="upgrading.html">Upgrade von 1.3 auf 2.0</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="core" id="core">Core-Erweiterungen</a></h2>
-
-
- <dl>
- <dt><strong>Unix-Threading</strong></dt>
-
- <dd>Auf Unix-Systemen mit Unterstützung für POSIX-Threads,
- kann Apache jetzt in einem Multi-Process, Multi-Threaded Hybrid-Mode
- gestartet werden. Dies verbessert die Skalierfähigkeit für
- viele, jedoch nicht unbedingt alle Konfigurationen.</dd>
-
- <dt><strong>Neues Build-System</strong></dt>
-
- <dd>Das Build-System wurde komplett auf der Basis von
- <code>autoconf</code> und <code>libtool</code> neu geschrieben. Dadurch
- wird das Apache-Konfigurationssystem dem vieler anderer Packages
- ähnlicher.</dd>
-
- <dt><strong>Multi-Protokoll-Unterstützung</strong></dt>
-
- <dd>Apache stellt jetzt die notwendigen Grundfunktionalitäten
- bereit, um mehrere Protokolle unterstützen und verarbeiten zu
- können. <code class="module"><a href="./mod/mod_echo.html">mod_echo</a></code> wurde hierfür als
- Beispiel geschrieben.</dd>
-
- <dt><strong>Bessere Unterstützung von
- Nicht-Unix-Plattformen</strong></dt>
-
- <dd>Apache 2.0 ist schneller und stabiler auf Nicht-Unix-Plattformen
- wie BeOS, OS/2 und Windows. Mit der Einführung von
- Plattform-spezifischen <a href="mpm.html">Multi-Processing Modulen</a>
- (MPMs) und der Apache Portable Runtime (APR), sind diese Plattformen
- jetzt in ihrem nativen API implementiert, wodurch die Verwendung der
- häufig fehlerbehafteten und schlecht funktionierenden
- POSIX-Emulation-Layer vermieden wird.</dd>
-
- <dt><strong>Neues Apache API</strong></dt>
-
- <dd>Das API für Module hat sich in 2.0 stark verändert.
- Die meisten der Sortierungs-/Prioritätsprobleme von Modulen bei
- 1.3 sollten nun verschwunden sein. In 2.0 wird hiervon vieles
- automatisch durchgeführt. Die Modulsortierung wird jetzt
- über einen pre-hook vorgenommen, um mehr Flexibilität
- zu bieten. Außerdem wurden neue API-Calls hinzugefügt,
- die zusätzliche Modulfähigkeiten zur Verfügung stellen,
- ohne den Apache-Kern anpassen zu müssen.</dd>
-
- <dt><strong>IPv6-Unterstützung</strong></dt>
-
- <dd>Auf Systemen, bei denen die zugrundeliegende Apache Portable
- Runtime-Bibliothek IPv6 unterstützt, bekommt Apache
- standarmäßig IPv6 Listening Sockets. Zusätzlich
- unterstützen die Konfigurationsanweisungen <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>, <code class="directive"><a href="./mod/core.html#namevirtualhost">NameVirtualHost</a></code> und <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> numerische IPv6-Adressangaben
- (z.B., "<code>Listen [fe80::1]:8080</code>").</dd>
-
- <dt><strong>Filterung</strong></dt>
-
- <dd>Apache-Module können jetzt als Filter entwickelt und zur
- Filterung des rein- und rausgehenden Datenstroms des Servers
- eingesetzt werden. Hierdurch kann beispielsweise die Ausgabe von
- CGI-Skripten durch den <code>INCLUDES</code>-Filter von
- <code class="module"><a href="./mod/mod_include.html">mod_include</a></code> bearbeitet werden und so Server-Side
- Include-Anweisungen ausgeführt werden. Das Modul
- <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> erlaubt externen Programmen
- als Filter zu agieren, in der gleichen Weise wie CGI-Programme als
- Eingabe dienen können.</dd>
-
- <dt><strong>Mehrsprachige Fehlermeldungen</strong></dt>
-
- <dd>Fehlermeldungen die an den Browser rausgehen, stehen jetzt als
- SSI-Dokumente in verschiedenen Sprachen zur Verfügung. Sie
- können bei Bedarf durch den Administrator angepasst werden,
- um ein einheitliches Design zu erreichen.</dd>
-
- <dt><strong>Vereinfachte Konfiguration</strong></dt>
-
- <dd>Viele der verwirrenden Konfigurationsanweisungen wurden vereinfacht.
- Die oft für Verwirrung sorgenden <code>Port</code>- und
- <code>BindAddress</code>-Anweisungen wurden entfernt.
- Ausschließlich die <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Anweisung wird nun zum
- Setzen von IP-Addressen und Portnummern benutzt.
- Der Servername und die Portnummer, die für Weiterleitungen und
- zur Erkennung virtueller Server verwendet werden, werden über
- die <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>-Anweisung
- konfiguriert.</dd>
-
- <dt><strong>Native Windows NT Unicode-Unterstützung</strong></dt>
-
- <dd>Apache 2.0 auf Windows NT benutzt jetzt utf-8 für alle
- Dateinamen-Kodierungen. Diese werden direkt auf das zugrundeliegende
- Unicode-Dateisystem abgebildet, wodurch Mehrsprach-Unterstützung
- für alle Windows NT-basierten Installationen, inklusive Windows
- 2000 und Windows XP, zur Verfügung gestellt wird.
- <em>Diese Unterstützung ist nicht auf Windows 95, 98 oder ME
- verfügbar. Hier wird weiterhin die jeweils lokale Codepage des
- Rechners für den Zugriff auf das Dateisystem verwendet.</em></dd>
-
- <dt>Bibliothek für reguläre Ausdrücke aktualisiert</dt>
-
- <dd>Apache 2.0 enthält die <a href="http://www.pcre.org/">"Perl Compatible
- Regular Expression Library"</a> (PCRE).
- Bei der Auswertung aller regulären Ausdrücke wird nun
- die leistungsfähigere Syntax von Perl 5 verwendet.</dd>
-
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="module" id="module">Modul-Erweiterungen</a></h2>
-
-
- <dl>
- <dt><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul ist ein Interface
- zu den von OpenSSL bereitgestellten SSL/TLS
- Verschlüsselungs-Protokollen.</dd>
-
- <dt><code class="module"><a href="./mod/mod_dav.html">mod_dav</a></code></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul implementiert die HTTP
- Distributed Authoring and Versioning (DAV) Spezifikation zur
- Erzeugung und Pflege von Web-Inhalten.</dd>
-
- <dt><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul erlaubt es Browsern, die
- dies unterstützen, eine Komprimierung des Inhaltes vor der
- Auslieferung anzufordern, um so Netzwerk-Bandbreite zu sparen.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_ldap.html">mod_auth_ldap</a></code></dt>
-
- <dd>Neues Modul in Apache 2.0.41. Diese Modul ermöglicht
- die Verwendung einer LDAP-Datenbank zur Speicherung von
- Berechtigungsdaten für die HTTP-Basic-Authentication.
- Ein Begleitmodul, <code class="module"><a href="./mod/mod_ldap.html">mod_ldap</a></code>, stellt einen
- Verbindungs-Pool und die Pufferung von Abfrageergebnissen zur
- Verfügung.
- </dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code></dt>
-
- <dd>Zusätzliche Unterstützung für
- prozessübergreifendes Session-Caching mittels Shared-Memory.
- </dd>
-
- <dt><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></dt>
-
- <dd>Neues Modul in Apache 2.0.
- Dieses experimentelle Modul erlaubt Zeichensatz-Übersetzungen oder
- -Umschlüsselung.</dd>
-
- <dt><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul beinhaltet die
- Funktionalität von <code>mod_mmap_static</code> aus Apache 1.3,
- plus einige weitere Caching-Funktionen.</dd>
-
- <dt><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></dt>
-
- <dd>Dieses Modul ist in Apache 2.0 deutlich flexibler geworden. Es
- kann jetzt die von <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> genutzten Request-Header
- manipulieren und es ist möglich Response-Header auf Basis von
- definierten Bedingungen zu verändern.</dd>
-
- <dt><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></dt>
-
- <dd>Das Proxy Modul wurde komplett neu geschrieben um die
- Möglichkeiten der neuen Filter-Funktionalität
- auszuschöpfen und um einen zuverlässigen Proxy zu haben, der
- den HTTP/1.1-Spezifikationen entspricht. Neue <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- -Konfigurationsabschnitte bieten eine besser lesbare (und intern
- schnellere) Kontrolle der vermittelten Seiten.
- Die überladenen <code>&lt;Directory
- "proxy:..."&gt;</code>-Konfigurationen werden nicht
- mehr unterstützt. Das Modul ist nun in mehrere Module
- unterteilt, die jeweils ein bestimmtes Übertragungsprotokoll
- unterstützen, wie <code>proxy_connect</code>,
- <code>proxy_ftp</code> und <code>proxy_http</code>.</dd>
-
- <dt><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></dt>
-
- <dd>Die neue Konfigurationsanweisung <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
- kann benutzt werden, um sicherzustellen, dass ein Client auf jeden
- Fall ein einzelnes Dokument, anstatt einer NOT ACCEPTABLE- oder
- MULTIPLE CHOICES-Antwort, bekommt. Zusätzlich wurden die
- Negotiation- und Multiview-Algorithmen angepasst um einheitlichere
- Ergebnisse zu liefern. Außerdem wird ein neues
- Type-Map-Format bereitgestellt, das Dokumenteninhalte direkt
- enthalten kann.</dd>
-
- <dt><code class="module"><a href="./mod/mod_autoindex.html">mod_autoindex</a></code></dt>
-
- <dd>Automatisch erzeugte Verzeichnisindizes können zur besseren
- Übersichtlichkeit durch HTML-Tabellen dargestellt werden.
- Genauere Sortierungen, wie Sortierung nach Versionsnummer und
- Wildcard-Filterung des Verzeichnisindizes werden unterstützt.</dd>
-
- <dt><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dt>
-
- <dd>Neue Anweisungen erlauben es, die Standard Start- und Endtags von
- SSI-Elementen zu ändern. Zudem können die Default-Formate
- für Fehlermeldungen und Zeitangaben nun ebenfalls in der
- Serverkonfiguration vorgenommen werden. Auf die Ergebnisse der
- Auswertung und Gruppierung von regulären Ausdrücken (jetzt
- auf Basis der Perl-Syntax für reguläre Ausdrücke) kann
- über die <code class="module"><a href="./mod/mod_include.html">mod_include</a></code> Variablen <code>$0</code>
- bis <code>$9</code> zugegriffen werden.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_dbm.html">mod_auth_dbm</a></code></dt>
-
- <dd>DBM-ähnliche Datenbanken werden jetzt durch die
- Konfigurationsaweisung <code class="directive"><a href="./mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a></code> unterstützt.</dd>
- </dl>
- </div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/new_features_2_0.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.html.en b/docs/manual/new_features_2_0.html.en
deleted file mode 100644
index 6a26f5ee4f..0000000000
--- a/docs/manual/new_features_2_0.html.en
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Overview of new features in Apache 2.0 - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Overview of new features in Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>This document describes some of the major changes between the
- 1.3 and 2.0 versions of the Apache HTTP Server.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#core">Core Enhancements</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#module">Module Enhancements</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="core" id="core">Core Enhancements</a></h2>
-
-
- <dl>
- <dt>Unix Threading</dt>
-
- <dd>On Unix systems with POSIX threads support, Apache can
- now run in a hybrid multiprocess, multithreaded mode. This
- improves scalability for many, but not all configurations.</dd>
-
- <dt>New Build System</dt>
-
- <dd>The build system has been rewritten from scratch to be
- based on <code>autoconf</code> and <code>libtool</code>.
- This makes Apache's configuration system more similar to
- that of other packages.</dd>
-
- <dt>Multiprotocol Support</dt>
-
- <dd>Apache now has some of the infrastructure in place to
- support serving multiple protocols. <code class="module"><a href="./mod/mod_echo.html">mod_echo</a></code> has
- been written as an example.</dd>
-
- <dt>Better support for non-Unix
- platforms</dt>
-
- <dd>Apache 2.0 is faster and more stable on non-Unix
- platforms such as BeOS, OS/2, and Windows. With the
- introduction of platform-specific <a href="mpm.html">multi-processing modules</a> (MPMs) and the
- Apache Portable Runtime (APR), these platforms are now
- implemented in their native API, avoiding the often buggy and
- poorly performing POSIX-emulation layers.</dd>
-
- <dt>New Apache API</dt>
-
- <dd>The API for modules has changed significantly for 2.0.
- Many of the module-ordering/-priority problems from 1.3 should
- be gone. 2.0 does much of this automatically, and module ordering
- is now done per-hook to allow more flexibility. Also, new calls
- have been added that provide additional module capabilities
- without patching the core Apache server.</dd>
-
- <dt>IPv6 Support</dt>
-
- <dd>On systems where IPv6 is supported by the underlying
- Apache Portable Runtime library, Apache gets IPv6 listening
- sockets by default. Additionally, the <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>, <code class="directive"><a href="./mod/core.html#namevirtualhost">NameVirtualHost</a></code>, and <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> directives support
- IPv6 numeric address strings (e.g., "<code>Listen
- [fe80::1]:8080</code>").</dd>
-
- <dt>Filtering</dt>
-
- <dd>Apache modules may now be written as filters which act on
- the stream of content as it is delivered to or from the
- server. This allows, for example, the output of CGI scripts to
- be parsed for Server Side Include directives using the
- <code>INCLUDES</code> filter in <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>. The
- module <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> allows external programs to
- act as filters in much the same way that CGI programs can act as
- handlers.</dd>
-
- <dt>Multilanguage Error Responses</dt>
-
- <dd>Error response messages to the browser are now provided in
- several languages, using SSI documents. They may be customized
- by the administrator to achieve a consistent look and feel.</dd>
-
- <dt>Simplified configuration</dt>
-
- <dd>Many confusing directives have been simplified. The often
- confusing <code>Port</code> and <code>BindAddress</code> directives
- are gone; only the <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- directive is used for IP address binding; the <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> directive specifies the
- server name and port number only for redirection and vhost
- recognition.</dd>
-
- <dt>Native Windows NT Unicode Support</dt>
-
- <dd>Apache 2.0 on Windows NT now uses utf-8 for all filename
- encodings. These directly translate to the underlying Unicode
- file system, providing multilanguage support for all Windows
- NT-based installations, including Windows 2000 and Windows XP.
- <em>This support does not extend to Windows 95, 98 or ME, which
- continue to use the machine's local codepage for filesystem
- access.</em></dd>
-
- <dt>Regular Expression Library Updated</dt>
-
- <dd>Apache 2.0 includes the <a href="http://www.pcre.org/">Perl
- Compatible Regular Expression Library</a> (PCRE). All regular
- expression evaluation now uses the more powerful Perl 5
- syntax.</dd>
-
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="module" id="module">Module Enhancements</a></h2>
-
-
- <dl>
- <dt><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></dt>
-
- <dd>New module in Apache 2.0. This module is an interface
- to the SSL/TLS encryption protocols provided by
- OpenSSL.</dd>
-
- <dt><code class="module"><a href="./mod/mod_dav.html">mod_dav</a></code></dt>
-
- <dd>New module in Apache 2.0. This module implements the HTTP
- Distributed Authoring and Versioning (DAV) specification for
- posting and maintaining web content.</dd>
-
- <dt><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></dt>
-
- <dd>New module in Apache 2.0. This module allows supporting
- browsers to request that content be compressed before delivery,
- saving network bandwidth.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_ldap.html">mod_auth_ldap</a></code></dt>
-
- <dd>New module in Apache 2.0.41. This module allows an LDAP
- database to be used to store credentials for HTTP Basic
- Authentication. A companion module, <code class="module"><a href="./mod/mod_ldap.html">mod_ldap</a></code>
- provides connection pooling and results caching.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code></dt>
-
- <dd>Includes additional support for session caching across
- processes using shared memory.</dd>
-
- <dt><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></dt>
-
- <dd>New module in Apache 2.0. This experimental module allows
- for character set translation or recoding.</dd>
-
- <dt><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></dt>
-
- <dd>New module in Apache 2.0. This module includes the
- functionality of <code>mod_mmap_static</code> in Apache 1.3,
- plus adds further caching abilities.</dd>
-
- <dt><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></dt>
-
- <dd>This module is much more flexible in Apache 2.0. It can now
- modify request headers used by <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, and
- it can conditionally set response headers.</dd>
-
- <dt><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></dt>
-
- <dd>The proxy module has been completely rewritten to take
- advantage of the new filter infrastructure and to implement a
- more reliable, HTTP/1.1 compliant proxy. In addition, new
- <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- configuration sections provide more readable (and internally
- faster) control of proxied sites; overloaded <code>&lt;Directory
- "proxy:..."&gt;</code> configuration are not supported. The module
- is now divided into specific protocol support modules including
- <code>proxy_connect</code>, <code>proxy_ftp</code> and
- <code>proxy_http</code>.</dd>
-
- <dt><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></dt>
-
- <dd>A new <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> directive can be used to assure that
- the client receives a single document in all cases, rather than
- NOT ACCEPTABLE or MULTIPLE CHOICES responses. In addition, the
- negotiation and MultiViews algorithms have been cleaned up to
- provide more consistent results and a new form of type map that
- can include document content is provided.</dd>
-
- <dt><code class="module"><a href="./mod/mod_autoindex.html">mod_autoindex</a></code></dt>
-
- <dd>Autoindex'ed directory listings can now be configured to
- use HTML tables for cleaner formatting, and allow finer-grained
- control of sorting, including version-sorting, and wildcard
- filtering of the directory listing.</dd>
-
- <dt><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dt>
-
- <dd>New directives allow the default start and end tags for SSI elements
- to be changed and allow for error and time format configuration
- to take place in the main configuration file rather than in the
- SSI document. Results from regular expression parsing and grouping
- (now based on Perl's regular expression syntax) can be retrieved
- using <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>'s variables <code>$0</code>
- .. <code>$9</code>.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_dbm.html">mod_auth_dbm</a></code></dt>
-
- <dd>Now supports multiple types of DBM-like databases using the
- <code class="directive"><a href="./mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a></code>
- directive.</dd>
-
- </dl>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.html.fr b/docs/manual/new_features_2_0.html.fr
deleted file mode 100644
index 7bcbdc18bc..0000000000
--- a/docs/manual/new_features_2_0.html.fr
+++ /dev/null
@@ -1,249 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Vue d'ensemble des nouvelles fonctionnalités d'Apache 2.0 - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Vue d'ensemble des nouvelles fonctionnalités d'Apache 2.0</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>Ce document décrit les changements majeurs apportés entre les
- versions 1.3 et 2.0 du serveur HTTP Apache.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#core">Améliorations du Système de Base</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#module">Amélioration des Modules</a></li>
-</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="upgrading.html">Migrer à 2.0 depuis la version 1.3</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="core" id="core">Améliorations du Système de Base</a></h2>
-
-
- <dl>
- <dt>Threading Unix</dt>
-
- <dd>Sur les systèmes Unix qui supportent les threads POSIX, Apache
- peut à présent tourner en mode hybride multi-processus et
- multi-threadé, ce qui augmente l'extensibilité et la performance
- du serveur pour la plupart des configurations.</dd>
-
- <dt>Nouveau Système de Compilation</dt>
-
- <dd>Le processus de compilation a été refait de A à Z;
- il utilise à présent <code>autoconf</code> et <code>libtool</code>,
- ce qui rend la compilation d'Apache plus familière aux utilisateurs
- d'autre logiciels de mème type.</dd>
-
- <dt>Support Multiprotocole</dt>
-
- <dd>Apache dispose désormais de l'infrastructure nécessaire pour supporter
- d'autres protocoles. Le module <code class="module"><a href="./mod/mod_echo.html">mod_echo</a></code> illustre ces
- possibilités.</dd>
-
- <dt>Support amélioré des Plate-formes non-Unix</dt>
-
- <dd>Apache 2.0 se montre plus rapide et plus stable sur les plate-formes
- non Unix, telles BeOS, OS/2, NetWare et Windows. L'apparition des
- <a href="mpm.html">Modules Multi-Processus</a> (MPMs), ainsi que de
- la bibliothèque "Apache Portable Runtime" (APR) permet a Apache de
- tirer parti des API natives de ces plate-formes, sans s'appuyer sur leurs
- couches POSIX souvent boguées et peu optimisées.</dd>
-
- <dt>Nouvelle API Apache</dt>
-
- <dd>L'Interface de Programmation (API) des modules a beaucoup changé
- avec le passage à la version 2.0.
- Les problèmes d'ordre et de priorité des modules, rencontrés
- avec la version 1.3, devraient maintenant être résolus. Apache 2.0
- gère ces problèmes de façon automatique. L'ordre des modules
- est géré au moyen de "crochets" (hooks), ce qui rend la gestion
- flexible. De nouveaux appels ont été également créés
- afin de permettre l'implémentation d'autres fonctions dans les modules,
- sans devoir corriger le noyau du serveur Apache.</dd>
-
- <dt>Support IPv6</dt>
-
- <dd>Sur les systèmes où la bibliothèque Apache Portable Runtime
- supporte IPv6, Apache peut par défaut écouter sur des interfaces
- de connexions IPv6. Les directives <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- <code class="directive"><a href="./mod/core.html#namevirtualhost">NameVirtualHost</a></code> et
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> supportent également
- les adresses IPv6 (comme par exemple, dans "<code>Listen[fe80::1]:8080</code>").</dd>
-
- <dt>Filtering</dt>
-
- <dd>Il est maintenant possible d'écrire des modules Apache pour filtrer
- les flux de données entrant ou sortant du serveur. A titre d'exemple,
- il est possible de filtrer des directives Server Side Include de la sortie
- standard d'un script CGI, au moyen du filtre <code>INCLUDES</code> fourni
- par le module <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>. Le module
- <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> permet quant à lui l'utilisation comme
- filtres de programmes externes à Apache, de la même manière
- qu'on peut utiliser des programmes CGI comme Handlers.</dd>
-
- <dt>Réponses d'Erreurs Multilangues</dt>
-
- <dd>Les messages d'erreur envoyés au navigateur existent à présent en
- plusieurs langues avec des documents SSI. Ces messages peuvent être
- personnalisés par l'administrateur afin de s'intégrer avec le site web.</dd>
-
- <dt>Simplification de la Configuration</dt>
-
- <dd>Beaucoup de directives, auparavant peu claires, ont été simplifiées.
- Les directives <code>Port</code> et <code>BindAddress</code>, souvent
- sources d'incompréhension, ont disparus. Désormais seule la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> sert de liaison pour les
- adresses IP; la directive <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> ne
- précise le nom du serveur et son port que pour les redirections et la
- gestion des hôtes virtuels.</dd>
-
- <dt>Support natif de l'Unicode sous Windows NT</dt>
-
- <dd>Apache 2.0 sur Windows NT utilise à présent l'utf-8 pour tous les
- noms de fichiers. Ces noms de fichiers sont directement traduits vers
- l'encodage Unicode du système de fichiers, ce qui permet le support
- multilangue pour toutes les installations sur la famille NT de Windows, y
- compris Windows 2000 et Windows XP.<em>Ce support n'est pas fonctionnel
- pour Windows 95, 98 ni ME, qui utilisent les pages de code locales pour
- les accès au système de fichiers, comme auparavant.</em></dd>
-
- <dt>Mise à jour de la Bibliothèque d'Expressions Rationnelles</dt>
-
- <dd>Apache 2.0 contient la <a href="http://www.pcre.org/">bibliothèque
- d'expressions rationnelles compatible Perl </a>(Perl Compatible Regular
- Expression Library - PCRE). Toutes les expressions rationnelles sont dont
- gérées avec la syntaxe de Perl 5, plus puissante.</dd>
-
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="module" id="module">Amélioration des Modules</a></h2>
-
-
- <dl>
- <dt><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></dt>
-
- <dd>Apparu dans Apache 2.0, ce module est une interface aux protocoles de
- criffrement SSL/TLS fournis par OpenSSL.</dd>
-
- <dt><code class="module"><a href="./mod/mod_dav.html">mod_dav</a></code></dt>
-
- <dd>Apparu dans Apache 2.0, ce module implémente les spécifications HTTP de
- gestion distribuée de versions et de rédaction (Distributed Authoring and
- Versioning - DAV), destinées à la mise en ligne et à la maintenance des
- contenus Web.</dd>
-
- <dt><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></dt>
-
- <dd>Module apparu dans Apachge 2.0, mod_deflate permet aux navigateurs qui
- le supportent de demander la compression des contenus envoyés par le serveur.
- Cela à l'avantage de réduite l'occupation de la bande passante.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_ldap.html">mod_auth_ldap</a></code></dt>
-
- <dd>Apparu dans Apache 2.0.41, ce module permet aux administrateurs
- d'utiliser un arbre LDAP pour gérer la base d'utilisateurs pour les
- Authentifications Basiques HTTP. Un module voisin,
- <code class="module"><a href="./mod/mod_ldap.html">mod_ldap</a></code>, permet de globaliser les connexions à l'arbre LDAP
- et de garder en mémoire cache ces accès.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code></dt>
-
- <dd>Améliore les fonctions de cache sur une session entre les différents
- processus, en utilisant de la mémoire partagée.</dd>
-
- <dt><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></dt>
-
- <dd>Apparu dans Apache 2.0, ce module expérimental permet la conversion
- et l'enregistrement entre jeux de caractères.</dd>
-
- <dt><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></dt>
-
- <dd>Apparu dans Apache 2.0, ce module implémente les fonctionnalités du
- module <code>mod_mmap_static</code> présent dans Apache 1.3, et offre des
- fonctions plus avancées pour la gestion de la cache.</dd>
-
- <dt><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></dt>
-
- <dd>Ce module gagne beaucoup de flexibilité avec Apache 2.0 : on peut
- désormais l'utiliser pour modifier les en-têtes des requêtes
- utilisés par <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, et peut aussi positionner les
- en-têtes des réponses de manière conditionnelle.</dd>
-
- <dt><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></dt>
-
- <dd>Le module proxy a été réécrit de A à Z. Il tire
- maintenant avantage de la nouvelle infrastructure de filtrage, et implémente
- un mandataire plus fiable, et conforme aux normes HTTP/1.1. De nouvelles
- sections de configuration ajoutées à
- <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- donnent un contrôle plus lisible et un traitement plus rapide des requêtes
- proxifiés; les configurations surcharchées <code>&lt;Directory
- "proxy:..."&gt;</code> ne sont pas supportées. Le module a aussi été
- fragmenté en plusieurs modules qui gérent chacun leur protocole :
- <code>proxy_connect</code>, <code>proxy_ftp</code> et
- <code>proxy_http</code>.</dd>
-
- <dt><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></dt>
-
- <dd>Une nouvelles directive, <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> a été ajoutée,
- elle permet de garantir que le client reçoit un seul document dans tous les
- cas, au lieu de réponses NOT ACCEPTABLE ou MULTIPLE CHOICES. Les
- algorithmes gérant la négociation et les vues multiples (MultiViews) ont
- été nettoyés et donnent des réponses plus logiques. Un nouveau format de
- carte de types (map type) qui peut aussi gérer le contenu de documents a
- aussi été ajouté.</dd>
-
- <dt><code class="module"><a href="./mod/mod_autoindex.html">mod_autoindex</a></code></dt>
-
- <dd>Les listes auto-générés par Autoindex sont à présent
- configurables, et peuvent utiliser des tables HTML pour une mise en forme plus propre.
- L'ordre d'affichage des fichiers est également finement paramètrable,
- comme pour le tri par version, et le filtrage par caractères jokers du
- listage du répertoire.</dd>
-
- <dt><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dt>
-
- <dd>De nouvelles directives permettent de modifier la valeur par défaut
- des drapeaux <em>start</em> et <em>end</em> des éléments SSI. Ces directives
- permettent à la configuration d'affichage de dates et heures d'être
- effectuée dans le fichier de configuration principal, plutôt que dans le
- document SSI. Les réponses données par des recherches par expressions
- rationnelles (qui gèrent à présent les regex Perl) sont
- recupérés au moyen des variables <code>$0</code> à <code>$9</code>.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_dbm.html">mod_auth_dbm</a></code></dt>
-
- <dd>Plusieurs bases de données DBM sont supportées, et sélectionnables
- au moyen de la directive <code class="directive"><a href="./mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a></code>.</dd>
- </dl>
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.html.ja.euc-jp b/docs/manual/new_features_2_0.html.ja.euc-jp
deleted file mode 100644
index 133268f497..0000000000
--- a/docs/manual/new_features_2_0.html.ja.euc-jp
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache 2.0 ¤Î¿·µ¡Ç½¤Î³µÍ× - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache 2.0 ¤Î¿·µ¡Ç½¤Î³µÍ×</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ç¤Ï¡¢Apache HTTP ¥µ¡¼¥Ð¥Ð¡¼¥¸¥ç¥ó 1.3 ¤È 2.0
- ¤Î¼ç¤Ê°ã¤¤¤Ë¤Ä¤¤¤Æµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#core">¥³¥¢µ¡Ç½¤Î³ÈÄ¥</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#module">¥â¥¸¥å¡¼¥ë¤Î³ÈÄ¥</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="upgrading.html">1.3 ¤«¤é 2.0 ¤Ø¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="core" id="core">¥³¥¢µ¡Ç½¤Î³ÈÄ¥</a></h2>
-
-
- <dl>
- <dt>Unix ¤Î¥¹¥ì¥Ã¥É</dt>
-
- <dd>POSIX ¥¹¥ì¥Ã¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë Unix ¥·¥¹¥Æ¥à¾å¤Ç¤Ï¡¢
- Apache ¤Ï¥Þ¥ë¥Á¥×¥í¥»¥¹¡¢¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Î¥Ï¥¤¥Ö¥ê¥Ã¥É¥â¡¼¥É¤Ç
- ¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤ì¤Ë¤è¤ê
- ¿¤¯¤ÎÀßÄê¤Ë¤ª¤¤¤Æ¥¹¥±¡¼¥é¥Ó¥ê¥Æ¥£¤¬¸þ¾å¤·¤Þ¤¹¡£</dd>
-
- <dt>¿·¤·¤¤¥Ó¥ë¥É¥·¥¹¥Æ¥à</dt>
-
- <dd>¥Ó¥ë¥É¥·¥¹¥Æ¥à¤Ï <code>autoconf</code> ¤È <code>libtool</code>
- ¤Ë´ð¤Å¤¤¤¿¤â¤Î¤Ë¤Ê¤ë¤è¤¦¤Ë¡¢
- ¿·¤·¤¯½ñ¤­Ä¾¤µ¤ì¤Þ¤·¤¿¡£¤³¤ì¤Ë¤è¤ê¡¢Apache ¤Î configure ¤Î¥·¥¹¥Æ¥à¤Ï
- ¾¤Î¥Ñ¥Ã¥±¡¼¥¸¤È»÷¤¿¤â¤Î¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt>¥Þ¥ë¥Á¥×¥í¥È¥³¥ë¥µ¥Ý¡¼¥È</dt>
-
- <dd>Apache ¤ËÊ£¿ô¤Î¥×¥í¥È¥³¥ë¤ò°·¤¦¤¿¤á¤Îµ¡¹½¤¬È÷¤ï¤ê¤Þ¤·¤¿¡£
- Îã¤È¤·¤Æ <code class="module"><a href="./mod/mod_echo.html">mod_echo</a></code> ¤¬½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt>Unix °Ê³°¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Î¥µ¥Ý¡¼¥È¤Î²þÁ±</dt>
-
- <dd>Apache 2.0 ¤Ï BeOS¡¢OS/2¡¢Windows ¤Ê¤É¤Î Unix °Ê³°¤Î
- ¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¡¢¤è¤ê®¤¯¡¢¤è¤ê°ÂÄꤷ¤ÆÆ°ºî¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¥×¥é¥Ã¥È¥Õ¥©¡¼¥àÆÃÍ­¤Î <a href="mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë</a> (MPM) ¤È
- Apache Portable Runtime (APR) ¤ÎƳÆþ¤Ë¤è¤ê¡¢
- ¥Í¥¤¥Æ¥£¥ô¤Î API ¤Ç¼ÂÁõ¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¡¢
- ¥Ð¥°¤¬Â¿¤¯¡¢À­Ç½¤Î°­¤¤¤³¤È¤¬Â¿¤¤ POSIX ¥¨¥ß¥å¥ì¡¼¥·¥ç¥ó¥ì¥¤¥ä¤Î»ÈÍѤò
- ²óÈò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿¡£</dd>
-
- <dt>¿·¤·¤¤ Apache API</dt>
-
- <dd>2.0 ¤Ç¤Ï¥â¥¸¥å¡¼¥ë¤Î API ¤¬Â礭¤¯ÊѤï¤ê¤Þ¤·¤¿¡£
- 1.3 ¤Ë¤¢¤Ã¤¿¥â¥¸¥å¡¼¥ë¤Î½çÈÖ/Í¥ÀèÅÙ¤ÎÌäÂê¤Î¿¤¯¤Ï
- ¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£2.0 ¤ÏÍ¥ÀèÅÙ¤ÎÁªÂò¤ò¤Û¤È¤ó¤É¤ò¼«Æ°Åª¤Ë¹Ô¤Ê¤¤¡¢
- ¥â¥¸¥å¡¼¥ë¤Î½çÈ֤Ϥè¤ê½ÀÆðÀ­¤ò¹â¤á¤ë¤¿¤á¤Ë¥Õ¥Ã¥¯Ëè¤Ë¹Ô¤Ê¤ï¤ì¤ë¤è¤¦¤Ë
- ¤Ê¤ê¤Þ¤·¤¿¡£¤Þ¤¿¡¢¥³¥¢ Apache ¥µ¡¼¥Ð¤Ë¥Ñ¥Ã¥Á¤ò¤¢¤Æ¤ë¤³¤È¤Ê¤¯
- ÄɲäΥ⥸¥å¡¼¥ëµ¡Ç½¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¿·¤·¤¤´Ø¿ô¤¬
- Äɲ䵤ì¤Þ¤·¤¿¡£</dd>
-
- <dt>IPv6 ¥µ¥Ý¡¼¥È</dt>
-
- <dd>Apache ¤¬»ÈÍѤ·¤Æ¤¤¤ë Apache Portable Runtime library ¤¬
- IPv6 ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï Apache ¤Ï ¥Ç¥Õ¥©¥ë¥È¤Ç
- IPv6 ¤Î¥½¥±¥Ã¥È¤ò listen ¤·¤Þ¤¹¡£¤µ¤é¤Ë¡¢
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- <code class="directive"><a href="./mod/core.html#namevirtualhost">NameVirtualHost</a></code>,
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code>
- ¤Î³Æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬ IPv6 ¤Î¥¢¥É¥ì¥¹¤ò
- ¥µ¥Ý¡¼¥È¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿ (Î㤨¤Ð¡¢
- "<code>Listen [fe80::1]:8080</code>")¡£</dd>
-
- <dt>¥Õ¥£¥ë¥¿</dt>
-
- <dd>Apache ¤Î¥â¥¸¥å¡¼¥ë¤Ï¥µ¡¼¥Ð¤«¤éÁ÷¤é¤ì¤Æ¤­¤¿¤ê¡¢¥µ¡¼¥Ð¤Ø
- Á÷¤ë¥¹¥È¥ê¡¼¥à¤ËÂФ·¤ÆÆ°ºî¤¹¤ë¥Õ¥£¥ë¥¿¤È¤·¤Æ½ñ¤¯¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë
- ¤Ê¤ê¤Þ¤·¤¿¡£¤³¤ì¤Ë¤è¤ê¡¢Î㤨¤Ð CGI ¥¹¥¯¥ê¥×¥È¤Î½ÐÎϤò
- <code class="module"><a href="./mod/mod_include.html">mod_include</a></code> ¤Î <code>INCLUDES</code> ¥Õ¥£¥ë¥¿¤ò»È¤Ã¤Æ
- Server Side Include ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò²òÀϤ¹¤ë¡¢
- ¤È¤¤¤¦¤è¤¦¤Ê¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£<code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>
- ¤Ç³°Éô¥×¥í¥°¥é¥à¤ò¥Õ¥£¥ë¥¿¤È¤·¤ÆÆ°ºî¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤Ï CGI ¥×¥í¥°¥é¥à¤ò¥Ï¥ó¥É¥é¤È¤·¤ÆÆ°ºî¤µ¤»¤ë¤Î¤È
- ¤è¤¯»÷¤¿ÊýË¡¤Ç¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dt>¿¸À¸ì¥¨¥é¡¼±þÅú</dt>
-
- <dd>¥Ö¥é¥¦¥¶¤Ø¤Î¥¨¥é¡¼±þÅú¤Î¥á¥Ã¥»¡¼¥¸¤¬¡¢SSI ¤Îʸ½ñ¤ò»È¤Ã¤Æ
- Ê£¿ô¤Î¸À¸ì¤ÇÄ󶡤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¸«¤¿¤á¤Î°ì´ÓÀ­¤òÊݤĤ¿¤á¤Ë
- ´ÉÍý¼Ô¤¬¥«¥¹¥¿¥Þ¥¤¥º¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</dd>
-
- <dt>ÀßÄê¤Î´ÊÁDz½</dt>
-
- <dd>¿¤¯¤Îº®Íð¤ò¾·¤­¤¬¤Á¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬´ÊÁDz½¤µ¤ì¤Þ¤·¤¿¡£
- ¤è¤¯º®Íð¤ò°ú¤­µ¯¤³¤·¤Æ¤¤¤¿ <code>Port</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code>Bind</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¡£<code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¤ß¤¬ IP ¥¢¥É¥ì¥¹¤Î¥Ð¥¤¥ó¥É¤Ë»È¤ï¤ì¤Þ¤¹¡£
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï
- ¥ê¥À¥¤¥ì¥¯¥È¤È vhost ¤Îǧ¼±¤Î¤¿¤á¤À¤±¤Ë¥µ¡¼¥Ð¤Î̾Á°¤È¥Ý¡¼¥ÈÈÖ¹æ¤ò
- »ØÄꤷ¤Þ¤¹¡£</dd>
-
- <dt>Windows NT ¤Î¥Í¥¤¥Æ¥£¥ô Unicode ¥µ¥Ý¡¼¥È</dt>
-
- <dd>Windows NT ¾å¤Î Apache 2.0 ¤Ï¥Õ¥¡¥¤¥ë̾¤Îʸ»ú¥¨¥ó¥³¡¼¥ÉÁ´¤Æ¤Ë
- utf-8 ¤ò»È¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤³¤ì¤é¤Ï Unicode ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë
- ľÀÜÊÑ´¹¤µ¤ì¤ë¤Î¤Ç¡¢Windows 2000 ¤È Windows XP ¤ò´Þ¤à¡¢Á´¤Æ¤Î
- Windows NT ·Ï¤Ç¿¸À¸ì¥µ¥Ý¡¼¥È¤¬Ä󶡤µ¤ì¤Þ¤¹¡£
- <em>¤³¤Î¥µ¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥¢¥¯¥»¥¹»þ¤Ë¥í¡¼¥«¥ë¤Î
- ¥³¡¼¥É¥Ú¡¼¥¸¤ò»È¤¦ Windows 95, 98, ME ¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£</em></dd>
-
- <dt>Àµµ¬É½¸½¥é¥¤¥Ö¥é¥ê¤Î¥¢¥Ã¥×¥Ç¡¼¥È</dt>
-
- <dd>Apache 2.0 ¤Ï <a href="http://www.pcre.org/">Perl
- ¸ß´¹Àµµ¬É½¸½¥é¥¤¥Ö¥é¥ê (PCRE) </a>¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£
- Àµµ¬É½¸½¤Îɾ²Á¤Ë¤Ï¡¢¤è¤ê¶¯ÎϤˤʤä¿ Perl 5
- ¹½Ê¸¤ò»ÈÍѤ·¤Þ¤¹¡£</dd>
-
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="module" id="module">¥â¥¸¥å¡¼¥ë¤Î³ÈÄ¥</a></h2>
-
-
- <dl>
- <dt><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></dt>
-
- <dd>Apache 2.0 ¤Î¿·¥â¥¸¥å¡¼¥ë¡£¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï OpenSSL ¤¬
- Ä󶡤¹¤ë SSL/TLS °Å¹æ¥×¥í¥È¥³¥ë¤Ø¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ç¤¹¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_dav.html">mod_dav</a></code></dt>
-
- <dd>Apache 2.0 ¤Î¿·¥â¥¸¥å¡¼¥ë¡£¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¥¦¥§¥Ö¥³¥ó¥Æ¥ó¥Ä¤ò
- Á÷¤ê¡¢°Ý»ý¤¹¤ë¤¿¤á¤Îµ¬³Ê
- HTTP Distributed Authoring and Versioning (DAV) ¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></dt>
-
- <dd>Apache 2.0 ¤Î¿·¥â¥¸¥å¡¼¥ë¡£Á÷¿®Á°¤ËÁ÷¿®ÆâÍƤò°µ½Ì¤·¤Æ
- ¥Í¥Ã¥È¥ï¡¼¥¯ÂÓ°è¤òÀáÌ󤹤롢¤È¤¤¤¦¥ê¥¯¥¨¥¹¥È¤ò¥Ö¥é¥¦¥¶¤¬
- Í×µá¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_ldap.html">mod_auth_ldap</a></code></dt>
-
- <dd>Apache 2.0.41 ¤Î¿·¥â¥¸¥å¡¼¥ë¡£HTTP ´ðËÜǧ¾Ú¤Î¾ÚÌÀ½ñ¤òÊݸ¤¹¤ë¤Î¤Ë¡¢
- LDAP ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò»ÈÍѤǤ­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
- ´ØÏ¢¥â¥¸¥å¡¼¥ë¤Î <code class="module"><a href="./mod/mod_ldap.html">mod_ldap</a></code> ¤Ç¡¢
- ¥³¥Í¥¯¥·¥ç¥ó¤Î¥×¡¼¥ëµ¡Ç½¤È·ë²Ì¤Î¥­¥ã¥Ã¥·¥åµ¡Ç½¤¬Ä󶡤µ¤ì¤Þ¤¹¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code></dt>
-
- <dd>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï¶¦Í­¥á¥â¥ê¤ò»È¤¦¤³¤È¤Ë¤è¤ê¡¢¥×¥í¥»¥¹¤ò¤Þ¤¿¤¤¤À
- ¥»¥Ã¥·¥ç¥ó¤Î¥­¥ã¥Ã¥·¥å¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></dt>
-
- <dd>Apache 2.0 ¤Î¿·¥â¥¸¥å¡¼¥ë¡£¤³¤Î¼Â¸³Åª¤Ê¥â¥¸¥å¡¼¥ë¤Ï
- ¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤ÎÊÑ´¹¤äºÆÉä¹æ²½¤ò²Äǽ¤Ë¤·¤Þ¤¹¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></dt>
-
- <dd>Apache 2.0 ¤Î¿·¥â¥¸¥å¡¼¥ë¡£¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¤Ï¡¢
- Apache 1.3 ¤Ë¤ª¤±¤ë <code>mod_mmap_static</code> µ¡Ç½¤¬´Þ¤Þ¤ì¡¢
- ¤Þ¤¿¡¢ÄɲäΥ­¥ã¥Ã¥·¥åµ¡Ç½¤¬²Ã¤ï¤Ã¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></dt>
-
- <dd>¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï Apache 2.0 ¤ÇÈó¾ï¤Ë½ÀÆðÀ­¤¬
- ¹â¤¯¤Ê¤ê¤Þ¤·¤¿¡£<code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>
- ¤Ç»È¤ï¤ì¤ë¥ê¥¯¥¨¥¹¥È¤Î¥Ø¥Ã¥À¤òÊѹ¹¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¤·¡¢
- ±þÅú¥Ø¥Ã¥À¤ò¾ò·ï¤Ë±þ¤¸¤ÆÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></dt>
-
- <dd>proxy ¥â¥¸¥å¡¼¥ë¤Ï¿·¤·¤¤¥Õ¥£¥ë¥¿¤Îµ¡¹½¤òÍøÍѤ¹¤ë¤¿¤á¤È¡¢
- ¤è¤ê¿®Íê¤Ç¤­¤ë¡¢HTTP/1.1 ¤Ë½àµò¤·¤¿ proxy ¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤Ë
- ´°Á´¤Ë½ñ¤­Ä¾¤µ¤ì¤Þ¤·¤¿¡£¤µ¤é¤Ë¡¢¿·¤·¤¤
- <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- ÀßÄꥻ¥¯¥·¥ç¥ó¤¬proxy ¤µ¤ì¤ë¥µ¥¤¥È¤Î¤è¤êÆɤߤ䤹¤¯ (ÆâÉôŪ¤Ë¤â¤è¤ê®¤¤)
- ÀßÄê¤òÄ󶡤·¤Þ¤¹¡£¥ª¡¼¥Ð¡¼¥í¡¼¥É¤µ¤ì¤¿
- <code>&lt;Directory "proxy:... &gt;</code>
- ÀßÄê¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£¤³¤Î¥â¥¸¥å¡¼¥ë¤Ï <code>proxy_connect</code>,
- <code>proxy_ftp</code>, <code>proxy_http</code>
- ¤È¤¤¤Ã¤¿¡¢ÆÃÄê¤Î¥×¥í¥È¥³¥ë¤ò¥µ¥Ý¡¼¥È¤¹¤ë
- ¥â¥¸¥å¡¼¥ë¤Ëʬ³ä¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></dt>
-
- <dd>¥¯¥é¥¤¥¢¥ó¥È¤¬ NOT ACCEPTABLE ¤ä MULTIPLE CHOICES ±þÅú¤Î
- Âå¤ï¤ê¤Ë¾ï¤ËñÆȤÎʸ½ñ¤ò¼õ¤±¤È¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡¢¿·¤·¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
- ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¤µ¤é¤Ë¡¢¤è¤ê°ì´ÓÀ­¤Î¤¢¤ë·ë²Ì¤òÄ󶡤¹¤ë¤¿¤á¤Ë
- ¥Í¥´¥·¥¨¡¼¥·¥ç¥ó¤È MultiViews ¤Î¥¢¥ë¥´¥ê¥º¥à¤¬²þÁ±¤µ¤ì¡¢
- ʸ½ñ¤ÎÆâÍƤò´Þ¤á¤ë¤³¤È¤Î¤Ç¤­¤ë¡¢¿·¤·¤¤·Á¼°¤Î¥¿¥¤¥×¥Þ¥Ã¥×¤¬
- Ä󶡤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_autoindex.html">mod_autoindex</a></code></dt>
-
- <dd>Autoindex ¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆâÍÆ°ìÍ÷¤¬¡¢
- ¤­¤ì¤¤¤Ëɽ¼¨¤µ¤ì¤ë¤¿¤á¤Ë HTML ¤Î¥Æ¡¼¥Ö¥ë¤ò»È¤¦¤è¤¦¤Ë
- ÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤Þ¤¿¡¢¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤ë¥½¡¼¥Æ¥£¥ó¥°¤Ê¤É¡¢
- ¤è¤êºÙ¤«¤¤¥½¡¼¥Æ¥£¥ó¥°¤ÎÀ©¸æ¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¡¢¥Ç¥£¥ì¥¯¥È¥ê
- ¤ÎÆâÍÆ°ìÍ÷¤ò¥ï¥¤¥ë¥É¥«¡¼¥É¤Ë¤è¤êÁªÊ̤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤â¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dt>
-
- <dd>¿·¤·¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢SSI ¤Î¥Ç¥Õ¥©¥ë¥È¤Î³«»Ï¥¿¥°¤È½ªÎ»¥¿¥°¤ò
- Êѹ¹¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤Þ¤¿¡¢¥¨¥é¡¼¤È»þ¹ï¤Î·Á¼°¤ÎÀßÄ꤬ SSI ¤Î
- ʸ½ñÃæ¤Ç¤Ï¤Ê¤¯¡¢¼çÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¹Ô¤Ê¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- Àµµ¬É½¸½¤Î²òÀϤȥ°¥ë¡¼¥×²½¤Î·ë²Ì (Perl ¤ÎÀµµ¬É½¸½¤Î¹½Ê¸¤Ë
- ´ð¤Å¤¤¤¿¤â¤Î¤Ë¤Ê¤ê¤Þ¤·¤¿) ¤ò <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>
- ¤ÎÊÑ¿ô $0 .. $9 ¤Ë¤è¤ê¼èÆÀ¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_dbm.html">mod_auth_dbm</a></code></dt>
-
- <dd><code class="directive"><a href="./mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¡¢Ê£¿ô¤Î DBM ·¿¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¥µ¥Ý¡¼¥È¤¹¤ë
- ¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</dd>
-
- </dl>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.html.ko.euc-kr b/docs/manual/new_features_2_0.html.ko.euc-kr
deleted file mode 100644
index a850730f43..0000000000
--- a/docs/manual/new_features_2_0.html.ko.euc-kr
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache 2.0ÀÇ »õ·Î¿î ±â´É °³¿ä - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache 2.0ÀÇ »õ·Î¿î ±â´É °³¿ä</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 1.3 ¹öÀü°ú 2.0¹öÀü°£ÀÇ ÁÖµÈ Â÷ÀÌÁ¡À»
- ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#core">ÇÙ½É ºÎºÐ¿¡¼­ ³ª¾ÆÁø Á¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#module">¸ðµâ¿¡¼­ ³ª¾ÆÁø Á¡</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="upgrading.html">1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="core" id="core">ÇÙ½É ºÎºÐ¿¡¼­ ³ª¾ÆÁø Á¡</a></h2>
-
-
- <dl>
- <dt>À¯´Ð½º ¾²·¹µå</dt>
-
- <dd>POSIX ¾²·¹µå¸¦ Áö¿øÇÏ´Â À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦
- ¿©·¯ ÇÁ·Î¼¼½º¿Í ¿©·¯ ¾²·¹µå·Î È¥ÇÕÇؼ­ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- ÀüºÎ´Â ¾Æ´ÏÁö¸¸ ¸¹Àº °æ¿ì È®Àå°¡´É¼º(scalability)À» ³ôÀδÙ.</dd>
-
- <dt>»õ·Î¿î ÄÄÆÄÀÏ ½Ã½ºÅÛ</dt>
-
- <dd>ÄÄÆÄÀÏ ½Ã½ºÅÛÀÌ <code>autoconf</code>¿Í <code>libtool</code>À»
- »ç¿ëÇϵµ·Ï ÀçÀÛ¼ºµÇ¾ú´Ù. ±×·¡¼­ ¾ÆÆÄÄ¡ ±¸¼º ½Ã½ºÅÛÀÌ ´Ù¸¥
- ÆÐÅ°Áöµé°ú Á»´õ ºñ½ÁÇØÁ³´Ù.</dd>
-
- <dt>¿©·¯ ÇÁ·ÎÅäÄÝ Áö¿ø</dt>
-
- <dd>ÀÌÁ¦ ¾ÆÆÄÄ¡´Â ¿©·¯ ÇÁ·ÎÅäÄÝÀ» ¼­ºñ½ºÇÒ ¼ö ÀÖ´Â ±¸Á¶¸¦
- °®Ãè´Ù. <code class="module"><a href="./mod/mod_echo.html">mod_echo</a></code>°¡ ±× ¿¹·Î ÀÛ¼ºµÇ¾ú´Ù.</dd>
-
- <dt>ºñÀ¯´Ð½º Ç÷¡Æû¿¡ ´ëÇÑ ´õ ³ªÀº Áö¿ø</dt>
-
- <dd>Apache 2.0´Â BeOS, OS/2, À©µµ¿ìÁî¿Í °°Àº ºñÀ¯´Ð½º
- Ç÷¡Æû¿¡¼­ ´õ ºü¸£°í ¾ÈÁ¤È­µÇ¾ú´Ù. ÀÌÁ¦ ¾ÆÆÄÄ¡´Â À̵é
- Ç÷¡Æû¿¡¼­ ¹ö±×°¡ ¸¹°í ¼º´ÉÀÌ ´À·È´ø POSIX ȣȯÃþ ´ë½Å
- ÀÚü API·Î ±¸ÇöµÈ Ç÷¡Æû ƯÀ¯ÀÇ <a href="mpm.html">´ÙÁßó¸® ¸ðµâ</a>
- (MPM)°ú Apache Portable Runtime (APR)À» »ç¿ëÇÏ¿© ±¸ÇöµÈ´Ù.</dd>
-
- <dt>»õ·Î¿î ¾ÆÆÄÄ¡ API</dt>
-
- <dd>¸ðµâ API°¡ 2.0¿¡¼­ »ó´çÈ÷ º¯Çß´Ù. 1.3ÀÇ ¿©·¯ ¸ðµâ
- ¼ø¼­¿Í ¿ì¼±¼øÀ§ ¹®Á¦°¡ »ç¶óÁ³´Ù. 2.0Àº À̸¦ ´ëºÎºÐ ÀÚµ¿À¸·Î
- ó¸®Çϸç, ¸ðµâ ¼ø¼­´Â ÀÌÁ¦ ´õ À¯¿¬ÇÑ ÈÅ(hook) ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.
- ¶Ç, ¾ÆÆÄÄ¡ ¼­¹ö ÇÙ½É ºÎºÐÀ» ¼öÁ¤ÇÏÁö ¾Ê°í »õ·Î¿î ¸ðµâ ±â´ÉÀ»
- Á¦°øÇÏ´Â ÇÔ¼ö°¡ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt>IPv6 Áö¿ø</dt>
-
- <dd>ÇÏÀ§ Apache Portable Runtine ¶óÀ̺귯¸®°¡ IPv6¸¦ Áö¿øÇÏ´Â
- ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î IPv6 ¼ÒÄÏÀ» ±â´Ù¸°´Ù. ¶Ç,
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- <code class="directive"><a href="./mod/core.html#namevirtualhost">NameVirtualHost</a></code>,
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> Áö½Ã¾î°¡
- IPv6 ¼ýÀÚ ÁÖ¼Ò¸¦ Áö¿øÇÑ´Ù. (¿¹,
- "<code>Listen [fe80::1]:8080</code>").</dd>
-
- <dt>ÇÊÅ͸µ</dt>
-
- <dd>ÀÌÁ¦ ¾ÆÆÄÄ¡ ¸ðµâÀ» ¼­¹ö·Î ¿À°í°¡´Â È帧¿¡ ´ëÇÑ
- ÇÊÅÍ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>ÀÇ
- <code>INCLUDES</code> ÇÊÅ͸¦ »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ® Ãâ·Â¿¡¼­
- Server Side Include Áö½Ã¾î¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù.
- <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> ¸ðµâÀº CGI ÇÁ·Î±×·¥À»
- Çڵ鷯·Î »ç¿ëÇÏ´Â °Í°ú °°ÀÌ ¿ÜºÎ ÇÁ·Î±×·¥À» ÇÊÅÍ·Î
- »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.</dd>
-
- <dt>´Ù±¹¾î ¿À·ù ÀÀ´ä</dt>
-
- <dd>ºê¶ó¿ìÀú·Î º¸³»´Â ¿À·ù ÀÀ´ä¹®ÀÌ ÀÌÁ¦ SSI ¹®¼­¸¦
- »ç¿ëÇÏ¿© ´Ù±¹¾î·Î Á¦°øµÈ´Ù. °ü¸®ÀÚ´Â ÅëÀÏµÈ ¿Ü°üÀ» À§ÇØ
- ÀÌ ¹®¼­¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dt>°£´ÜÇØÁø ¼³Á¤</dt>
-
- <dd>È¥¶õÀ» ÁÖ´ø ¸¹Àº Áö½Ã¾îµéÀÌ °£´ÜÇØÁ³´Ù. ÀÚÁÖ È¥¶õÀ»
- ÁÖ´ø <code>Port</code>¿Í <code>BindAddress</code> Áö½Ã¾î´Â
- ¾ø¾îÁö°í IP ÁÖ¼Ò ¿¬°á¿¡
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î¸¸À»
- »ç¿ëÇÑ´Ù. <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- Áö½Ã¾î´Â ¸®´ÙÀÌ·º¼Ç°ú °¡»óÈ£½ºÆ® ÀνĿ¡¸¸ »ç¿ëµÉ ¼­¹ö¸í°ú
- Æ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt>Windows NT À¯´ÏÄÚµå ÀÚü Áö¿ø</dt>
-
- <dd>Windows NT¿¡¼­ Apache 2.0Àº ÀÌÁ¦ ¸ðµç ÆÄÀϸí ÀÎÄÚµù¿¡
- utf-8À» »ç¿ëÇÑ´Ù. ÆÄÀϸíÀº ÇÏÀ§ À¯´ÏÄÚµå ÆÄÀϽýºÅÛÀ¸·Î Á÷Á¢
- º¯¿ªµÇ¾î, Windows 2000°ú Windows XP¸¦ Æ÷ÇÔÇÑ ¸ðµç Windows NT±â¹Ý
- ½Ã½ºÅÛ¿¡ ´Ù±¹¾î Áö¿øÀ» Á¦°øÇÑ´Ù. <em>ÀÌ ±â´ÉÀº Windows 95,
- 98, ME¿¡´Â Áö¿øµÇÁö¾Ê°í, ÆÄÀϽýºÅÛ Á¢±Ù¿¡ Àü°ú °°ÀÌ ½Ã½ºÅÛÀÇ
- Áö¿ª ÄÚµåÆäÀÌÁö¸¦ »ç¿ëÇÑ´Ù.</em></dd>
-
- <dt>Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸® Updated</dt>
-
- <dd>Apache 2.0Àº <a href="http://www.pcre.org/">Perlȣȯ
- Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸® (Perl Compatible Regular Expression
- Library)</a> (PCRE)¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌÁ¦ ¸ðµç Á¤±ÔÇ¥Çö½Ä¿¡
- ´õ °­·ÂÇÑ Perl 5 ¹®¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
-
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="module" id="module">¸ðµâ¿¡¼­ ³ª¾ÆÁø Á¡</a></h2>
-
-
- <dl>
- <dt><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº OpenSSLÀÌ
- Á¦°øÇÏ´Â SSL/TLS ¾Ïȣȭ ÇÁ·ÎÅäÄÝÀÇ ÀÎÅ×ÆäÀ̽º´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_dav.html">mod_dav</a></code></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº À¥ÄÁÅÙÃ÷¸¦
- ¿Ã¸®°í °ü¸®ÇϱâÀ§ÇÑ HTTP Distributed Authoring and Versioning
- (DAV) Ç¥ÁØÀ» ±¸ÇöÇÑ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ³×Æ®¿÷ »ç¿ë·®À»
- ÁÙÀ̱âÀ§ÇØ ºê¶ó¿ìÀú¿¡°Ô ÄÁÅÙÃ÷¸¦ ¾ÐÃàÇؼ­ º¸³»¶ó°í ¿äûÇÒ
- ¼ö ÀÖ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_ldap.html">mod_auth_ldap</a></code></dt>
-
- <dd>Apache 2.0.41¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº HTTP
- Basic Authentication¿¡ »ç¿ëÇÏ´Â Á¤º¸¸¦ LDAP µ¥ÀÌÅͺ£À̽º¿¡
- ÀúÀåÇÑ´Ù. °ü·ÃµÈ <code class="module"><a href="./mod/mod_ldap.html">mod_ldap</a></code> ¸ðµâÀº
- ¿¬°áÇ®(connection pool)À» Á¦°øÇÏ°í, °á°ú¸¦ ij½ÌÇÑ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code></dt>
-
- <dd>°øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º°£ ¼¼¼Ç ij½ÌÀ» Áö¿øÇÑ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ½ÇÇèÀûÀÎ ¸ðµâÀº
- ¹®ÀÚÁýÇÕ º¯È¯°ú ¹®ÀÚÁýÇÕ ÀçÀÛ¼º ±â´ÉÀ» Á¦°øÇÑ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº Apache 1.3ÀÇ
- <code>mod_mmap_static</code> ±â´É¿¡ ´õ ³ªÀº ij½¬ ±â´ÉÀ»
- Ãß°¡Çß´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></dt>
-
- <dd>ÀÌ ¸ðµâÀº Apache 2.0¿¡¼­ ´õ À¯¿¬ÇØÁ³´Ù. ÀÌÁ¦
- <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>°¡ »ç¿ëÇÏ´Â ¿äû Çì´õ¸¦ ¼öÁ¤ÇÒ
- ¼ö ÀÖ°í, °æ¿ì¿¡ µû¶ó¼­ ÀÀ´ä Çì´õ¸¦ ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></dt>
-
- <dd>ÀÌ ÇÁ·Ï½Ã ¸ðµâÀº »õ·Î¿î ÇÊÅÍ ±¸Á¶¸¦ ÀÌ¿ëÇÏ°í ´õ ¹ÏÀ»¸¸ÇÑ
- HTTP/1.1 ÇÁ·Ï½Ã¸¦ ±¸ÇöÇϱâÀ§ÇØ ¿ÏÀüÈ÷ ÀçÀÛ¼ºµÇ¾ú´Ù. Ãß°¡·Î
- »õ·Î¿î <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- ¼³Á¤ ¼½¼ÇÀº ÇÁ·Ï½Ã ¼³Á¤À» ´õ ½±°Ô (±×¸®°í ³»ºÎÀûÀ¸·Î ´õ
- ºü¸£°Ô) ¸¸µç´Ù. °ú°Å <code>&lt;Directory "proxy:..."&gt;</code>
- ¼³Á¤Àº ÀÌÁ¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ¸ðµâÀº <code>proxy_connect</code>,
- <code>proxy_ftp</code>, <code>proxy_http</code>¿Í °°ÀÌ
- Áö¿øÇÏ´Â ÇÁ·ÎÅäÄÝ º°·Î ³ª´²Á³´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></dt>
-
- <dd>»õ·Î¿î <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
- Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®°¡ NOT ACCEPTABLEÀ̳ª MULTIPLE CHOICES
- ÀÀ´ä ´ë½Å ¸ðµç °æ¿ì ÇÑ ¹®¼­¸¦ ¹ÞÀ½À» º¸ÀåÇÑ´Ù. Ãß°¡·Î
- Çù»ó ¾Ë°í¸®Áò°ú MultiViews ¾Ë°í¸®ÁòÀÌ ´õ ÀÏ°üµÈ °á°ú¸¦
- ³»µµ·Ï ¼öÁ¤µÇ¾ú°í, ¹®¼­ ³»¿ëÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Â »õ·Î¿î Çü½ÄÀÇ
- type mapÀÌ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_autoindex.html">mod_autoindex</a></code></dt>
-
- <dd>ÀÚµ¿À¸·Î »ý¼ºµÈ µð·ºÅ丮 ¸ñ·ÏÀÌ ÀÌÁ¦ ´õ ±ò²ûÇÑ Çü½ÄÀ»
- À§ÇØ HTML Ç¥¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú°í, ¹öÀü Á¤·ÄÀ» Æ÷ÇÔÇÏ¿©
- Á¤·Ä¼ø¼­¸¦ ÀÚ¼¼È÷ Á¶ÀýÇÒ ¼ö ÀÖÀ¸¸ç, µð·ºÅ丮 ¸ñ·ÏÀ» ¿ÍÀϵåÄ«µå·Î
- °É·¯³¾ ¼ö ÀÖ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dt>
-
- <dd>»õ·Î¿î Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© SSI ¿ä¼ÒÀÇ ±âº» ½ÃÀÛ Å±׿Í
- ¸¶Ä§ ű׸¦ º¯°æÇÒ ¼ö ÀÖ°í, ¿À·ù¿Í ½Ã°£Çü½ÄÀ» SSI ¹®¼­¿Ü¿¡
- ÁÖ ¼³Á¤ÆÄÀÏ¿¡¼­µµ ¼³Á¤ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. mod_include¿¡¼­ (ÀÌÁ¦
- Perl Á¤±ÔÇ¥Çö½Ä ¹®¹ýÀ¸·Î) Á¤±ÔÇ¥Çö½Ä ÆĽ̰ú ±×·ìÀÇ
- °á°ú¸¦ <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>ÀÇ <code>$0</code>
- ... <code>$9</code> º¯¼ö·Î ¾òÀ» ¼ö ÀÖ´Ù.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_dbm.html">mod_auth_dbm</a></code></dt>
-
- <dd>ÀÌÁ¦ <code class="directive"><a href="./mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¿©·¯ DBM·ù µ¥ÀÌÅͺ£À̽º¸¦ Áö¿øÇÑ´Ù.</dd>
-
- </dl>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.html.ru.koi8-r b/docs/manual/new_features_2_0.html.ru.koi8-r
deleted file mode 100644
index 6f99d34ce4..0000000000
--- a/docs/manual/new_features_2_0.html.ru.koi8-r
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="KOI8-R"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ïÂÚÏÒ ÎÏ×ÙÈ ×ÏÚÍÏÖÎÏÓÔÅÊ × Apache 2.0 - HTTP ÓÅÒ×ÅÒ Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">íÏÄÕÌÉ</a> | <a href="./mod/directives.html">äÉÒÅËÔÉ×Ù</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">çÌÏÓÓÁÒÉÊ</a> | <a href="./sitemap.html">ëÁÒÔÁ ÓÁÊÔÁ</a></p>
-<p class="apache">HTTP ÓÅÒ×ÅÒ Apache ÷ÅÒÓÉÑ 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ÓÅÒ×ÅÒ</a> &gt; <a href="http://httpd.apache.org/docs-project/">äÏËÕÍÅÎÔÁÃÉÑ</a> &gt; <a href="./">÷ÅÒÓÉÑ 2.1</a></div><div id="page-content"><div id="preamble"><h1>ïÂÚÏÒ ÎÏ×ÙÈ ×ÏÚÍÏÖÎÏÓÔÅÊ × Apache 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-<div class="outofdate">This translation may be out of date. Check the
- English version for recent changes.</div>
-
- <p>üÔÏÔ ÄÏËÕÍÅÎÔ ÏÐÉÓÙ×ÁÅÔ ÏÓÎÏ×ÎÙÅ ÒÁÚÌÉÞÉÑ ÍÅÖÄÕ ×ÅÒÓÉÑÍÉ 1.3 É 2.0 HTTP ÓÅÒ×ÅÒÁ Apache</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#core">õÌÕÞÛÅÎÉÑ × ÑÄÒÅ ÓÅÒ×ÅÒÁ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#module">õÌÕÞÛÅÎÉÑ × ÍÏÄÕÌÑÈ ÓÅÒ×ÅÒÁ</a></li>
-</ul><h3>óÍ. ÔÁËÖÅ</h3><ul class="seealso"><li><a href="upgrading.html">ðÅÒÅÈÏÄ ÏÔ ×ÅÒÓÉÉ 1.3 Ë ×ÅÒÓÉÉ 2.0</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="core" id="core">õÌÕÞÛÅÎÉÑ × ÑÄÒÅ ÓÅÒ×ÅÒÁ</a></h2>
-
-
- <dl>
- <dt>íÎÏÇÏÐÏÔÏÞÎÏÓÔØ × UNIX</dt>
-
- <dd>îÁ UNIX ÓÉÓÔÅÍÁÈ, ËÏÔÏÒÙÅ ÐÏÄÄÅÒÖÉ×ÁÀÔ ÐÏÔÏËÉ (ÎÉÔÉ) ÓÔÁÎÄÁÒÔÁ POSIX,
- Apache ÔÅÐÅÒØ ÍÏÖÅÔ ×ÙÐÏÌÎÑÔØÓÑ × ÇÉÂÒÉÄÎÏÍ ÍÎÏÇÏÐÒÏÃÅÓÓÏ×Ï -
- ÍÎÏÇÏÐÏÔÏÞÎÏÍ ÒÅÖÉÍÅ. üÔÏ ÓÐÏÓÏÂÓÔ×ÕÅÔ ÒÁÓÛÉÒÑÅÍÏÓÔÉ
- ÓÉÓÔÅÍÙ ÄÌÑ ÍÎÏÇÉÈ, ÎÏ ÎÅ ÄÌÑ ×ÓÅÈ ÓÐÏÓÏÂÏ× ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ.</dd>
-
- <dt>îÏ×ÁÑ ÓÉÓÔÅÍÁ ÓÂÏÒËÉ</dt>
-
- <dd>óÉÓÔÅÍÁ ÓÂÏÒËÉ ÂÙÌÁ ÐÏÌÎÏÓÔØÀ ÉÚÍÅÎÅÎÁ, É ÔÅÐÅÒØ ÏÓÎÏ×Ù×ÁÅÔÓÑ ÎÁ autoconf É libtool.
- üÔÏ ÄÅÌÁÅÔ ÐÒÏÃÅÓÓ ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ Apache ÂÏÌÅÅ ÐÏÈÏÖÉÍ ÎÁ ÐÏÄÏÂÎÙÊ ÐÒÏÃÅÓÓ × ÄÒÕÇÉÈ ÐÒÏÇÒÁÍÍÎÙÈ
- ÐÒÏÄÕËÔÁÈ.</dd>
-
- <dt>ðÏÄÄÅÒÖËÁ ÒÁÚÌÉÞÎÙÈ ÐÒÏÔÏËÏÌÏ×</dt>
-
- <dd>Apache ÔÅÐÅÒØ ÉÍÅÅÔ ÓÐÅÃÉÁÌØÎÕÀ ÉÎÆÒÁÓÔÒÕËÔÕÒÕ,
- ÓÐÏÓÏÂÎÕÀ ÏÂÓÌÕÖÉ×ÁÔØ ÒÁÚÌÉÞÎÙÅ ÐÒÏÔÏËÏÌÙ.
- íÏÄÕÌØ <code class="module"><a href="./mod/mod_echo.html">mod_echo</a></code> ÂÙÌ ÎÁÐÉÓÁÎ × ËÁÞÅÓÔ×Å
- ÐÒÉÍÅÒÁ ÜÔÏÍÕ.</dd>
-
- <dt>õÌÕÞÛÅÎÎÁÑ ÐÏÄÄÅÒÖËÁ ÏÔÌÉÞÎÙÈ ÏÔ UNIX
- ÐÌÁÔÆÏÒÍ</dt>
-
- <dd>Apache 2.0 ÓÔÁÌ ÒÁÂÏÔÁÔØ ÂÙÓÔÒÅÅ É ÎÁÄÅÖÎÅÅ
- ÎÁ ÏÔÌÉÞÎÙÈ ÏÔ UNIX ÐÌÁÔÆÏÒÍÁÈ, ÔÁËÉÈ ËÁË: BeOS,
- OS/2 É Windows. ó ××ÅÄÅÎÉÅÍ ÎÏ×ÙÈ ÓÐÅÃÉÆÉÞÎÙÈ
- ÄÌÑ ËÁÖÄÏÊ ÐÌÁÔÆÏÒÍÙ<a href="mpm.html"> ÍÕÌØÔÉ-ÐÒÏÃÅÓÓÎÙÈ ÍÏÄÕÌÅÊ</a> (MPMs) É
- ÂÉÂÌÉÏÔÅËÉ Apache Portable Runtime (APR), ÜÔÉ ÐÌÁÔÆÏÒÍÙ
- ÔÅÐÅÒØ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ Ó ÐÏÍÏÝØÀ ÉÈ ÓÏÂÓÔ×ÅÎÎÙÈ API, ÞÔÏ
- ÐÏÚ×ÏÌÑÅÔÓÑ ÉÚÂÅÖÁÔØ ××ÅÄÅÎÉÑ ÚÁÞÁÓÔÕÀ ÎÅÐÒÁ×ÉÌØÎÏ ÒÁÂÏÔÁÀÝÉÈ
- ÉÚ-ÚÁ ÂÏÌØÛÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏË POSIX - ÜÍÕÌÉÒÕÀÝÉÈ ÓÌÏÅ×.</dd>
-
- <dt>îÏ×ÙÊ API ÄÌÑ Apache</dt>
-
- <dd>API ÄÌÑ ÎÁÐÉÓÁÎÉÑ ÍÏÄÕÌÅÊ ÚÎÁÞÉÔÅÌØÎÏ ÉÚÍÅÎÉÌÓÑ × ×ÅÒÓÉÉ 2.0
- íÎÏÇÉÅ ÉÚ ÐÒÏÂÌÅÍ ×ÅÒÓÉÉ 1.3, Ó×ÑÚÁÎÎÙÅ Ó ÐÏÒÑÄËÏÍ ÓÌÅÄÏ×ÁÎÉÑ
- ÍÏÄÕÌÅÊ É ÉÈ ÐÒÉÏÒÉÔÅÔÁÍÉ, ÄÏÌÖÎÙ ÉÓÞÅÚÎÕÔØ. ÷ ×ÅÒÓÉÉ 2.0
- ÍÎÏÇÉÅ ÉÚ ÐÏÄÏÂÎÙÈ ×ÅÝÅÊ ÄÅÌÁÀÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ, É ÔÅÐÅÒØ
- ÐÏÒÑÄÏË ÓÌÅÄÏ×ÁÎÉÑ ÍÏÄÕÌÅÊ ÏÐÒÅÄÅÌÑÅÔÓÑ ÐÏÓÒÅÄÓÔ×ÏÍ ÓÐÅÃÉÁÌØÎÙÈ
- ÐÒÏÇÒÁÍÍÎÙÈ ËÒÀÞËÏ× (hooks), ÏÔÞÅÇÏ ÎÁÓÔÒÏÊËÁ ÓÅÒ×ÅÒÁ ÓÔÁÎÏ×ÉÔÓÑ
- ÂÏÌÅÅ ÇÉÂËÏÊ. ôÁËÖÅ ÂÙÌÉ ÄÏÂÁ×ÌÅÎÙ ÎÏ×ÙÅ ÆÕÎËÃÉÉ, ËÏÔÏÒÙÅ
- ÐÒÅÄÏÓÔÁ×ÌÑÀÔ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÍÏÄÕÌÅÊ,
- ÉÚÂÁ×ÌÑÑ ÏÔ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ×ÎÅÓÅÎÉÑ ËÁËÉÈ - ÌÉÂÏ ÉÚÍÅÎÅÎÉÊ × ÑÄÒÏ
- ÓÅÒ×ÅÒÁ.</dd>
-
- <dt>ðÏÄÄÅÒÖËÁ ÐÒÏÔÏËÏÌÁ IPv6</dt>
-
- <dd>îÁ ÓÉÓÔÅÍÁÈ, ÇÄÅ ÐÒÏÔÏËÏÌ IPv6 ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ
- ÂÁÚÏ×ÏÊ ÂÉÂÌÉÏÔÅËÏÊ Apache Portable Runtime, Apache
- ÐÏ ÕÍÏÌÞÁÎÉÀ ÐÏÌÕÞÁÅÔ ×ÏÚÍÏÖÎÏÓÔØ ÓÌÕÛÁÔØ IPv6 ÓÏËÅÔÙ
- (sockets). ÷ ÄÏÂÁ×ÏË Ë ÜÔÏÍÕ ÄÉÒÅËÔÉ×Ù <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>, <code class="directive"><a href="./mod/core.html#namevirtualhost">NameVirtualHost</a></code> É <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> ÍÏÇÕÔ ÒÁÂÏÔÁÔØ Ó ÁÄÒÅÓÎÙÍÉ ÓÔÒÏËÁÍÉ,
- ÚÁÄÁÎÎÙÍÉ × ÆÏÒÍÁÔÅ IPv6 (Ô.Å. ÎÁÐÒÉÍÅÒ "Listen [fe80::1]:8080").</dd>
-
- <dt>éÓÐÏÌØÚÏ×ÁÎÉÅ ÆÉÌØÔÒÏ×</dt>
-
- <dd>íÏÄÕÌÉ Apache ÔÅÐÅÒØ ÍÏÇÕÔ ÂÙÔØ ÎÁÐÉÓÁÎÙ ËÁË ÆÉÌØÔÒÙ,
- ÏÂÒÁÂÁÔÙ×ÁÀÝÉÅ ÐÏÔÏËÉ ÄÁÎÎÙÈ, ËÏÔÏÒÙÅ ÐÒÉÈÏÄÑÔ ÉÌÉ ÕÈÏÄÑÔ
- ÉÚ ÓÅÒ×ÅÒÁ. üÔÏ ÐÏÚ×ÏÌÑÅÔ, Ë ÐÒÉÍÅÒÕ, ÄÁÎÎÙÍ, Ñ×ÌÑÀÝÉÍÓÑ
- ÒÅÚÕÌØÔÁÔÏÍ ÒÁÂÏÔÙ CGI-ÓËÒÉÐÔÁ, ÂÙÔØ ÏÂÒÁÂÏÔÁÎÎÙÍÉ SSI
- ÆÉÌØÔÒÏÍ INCLUDES, ÐÒÅÄÏÓÔÁ×ÌÑÅÍÙÍ ÍÏÄÕÌÅÍ
- <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>. íÏÄÕÌØ <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>
- ÐÏÚ×ÏÌÑÅÔ ×ÎÅÛÎÉÍ ÐÒÏÇÒÁÍÍÁÍ ÉÓÐÏÌÎÑÔØ ÒÏÌØ ÆÉÌØÔÒÏ× ÔÏÞÎÏ ÔÁË ÖÅ
- ËÁË É CGI ÐÒÏÇÒÁÍÍÁÍ ÐÏÚ×ÏÌÑÅÔÓÑ ÄÅÊÓÔ×Ï×ÁÔØ × ËÁÞÅÓÔ×Å
- ÏÂÒÁÂÏÔÞÉËÏ× (handlers).</dd>
-
- <dt>óÏÏÂÝÅÎÉÑ ÏÂ ÏÛÉÂËÁÈ ÎÁ ÒÁÚÎÙÈ ÑÚÙËÁÈ</dt>
-
- <dd>óÏÏÂÝÅÎÉÑ ÏÂ ÏÛÉÂËÁÈ, ÐÏÓÙÌÁÅÍÙÅ ÂÒÁÕÚÅÒÕ, ÔÅÐÅÒØ
- ÐÒÅÄÓÔÁ×ÌÅÎÙ ÎÁ ÎÅÓËÏÌØËÉÈ ÑÚÙËÁÈ É ÉÓÐÏÌØÚÕÀÔ SSI
- ÔÅÈÎÏÌÏÇÉÀ. ïÎÉ ÍÏÇÕÔ ÂÙÔØ ÌÅÇËÏ ÏÔÒÅÄÁËÔÉÒÏ×ÁÎÙ
- ÁÄÍÉÎÉÓÔÒÁÔÏÒÏÍ ÐÏÄ Ó×ÏÉ ÎÕÖÄÙ.</dd>
-
- <dt>õÐÒÏÝÅÎÎÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ</dt>
-
- <dd>íÎÏÇÉÅ ÚÁÐÕÔÁÎÎÙÅ ÄÉÒÅËÔÉ×Ù ÂÙÌÉ ÕÐÒÏÝÅÎÙ. îÁÉÂÏÌÅÅ
- ÓÂÉ×ÁÀÝÉÅ Ó ÔÏÌËÕ Port É BindAddress ÂÙÌÉ ÕÂÒÁÎÙ;
- ÄÌÑ ÐÒÉ×ÑÚËÉ Ë IP ÁÄÒÅÓÕ ÉÓÐÏÌØÚÕÅÔÓÑ ÔÏÌØËÏ ÄÉÒÅËÔÉ×Á
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>; ÄÉÒÅËÔÉ×Á
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> ÏÐÒÅÄÅÌÑÅÔ ÉÍÑ ÓÅÒ×ÅÒÁ É ÎÏÍÅÒ ÐÏÒÔÁ
- ÔÅÐÅÒØ ÔÏÌØËÏ ÄÌÑ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÊ É ÒÁÂÏÔÙ Ó ×ÉÒÔÕÁÌØÎÙÍÉ ÈÏÓÔÁÍÉ.</dd>
-
- <dt>ðÏÄÄÅÒÖËÁ ÀÎÉËÏÄÁ Windows NT</dt>
-
- <dd>Apache 2.0 ÎÁ Windows NT ÔÅÐÅÒØ ÉÓÐÏÌØÚÕÅÔ ËÏÄÉÒÏ×ËÕ utf-8
- ÄÌÑ ÒÁÂÏÔÙ Ó ÉÍÅÎÁÍÉ ÆÁÊÌÏ×. üÔÏ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ
- ÎÉÖÅÌÅÖÁÝÕÀ ÆÁÊÌÏ×ÕÀ ÓÉÓÔÅÍÕ, ÒÁÂÏÔÁÀÝÕÀ × ÆÏÒÍÁÔÅ Unicode,
- ÞÔÏ ÐÒÅÄÏÓÔÁ×ÌÑÅÔ ÐÏÄÄÅÒÖËÕ ÓÅÒ×ÅÒÏÍ ÍÎÏÇÏÑÚÙÞÎÏÓÔÉ ÄÌÑ ×ÓÅÈ NT-
- ÓÉÓÔÅÍ, ×ËÌÀÞÁÑ Windows 2000 É Windows XP.
- <em>üÔÏ ÎÅ ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ ÎÁ ÔÁËÉÅ ÏÐÅÒÁÃÉÏÎÎÙÅ ÓÉÓÔÅÍÙ, ËÁË
- Windows 95, 98 ÉÌÉ ME, ËÏÔÏÒÙÅ ÄÌÑ ÏÂÒÁÝÅÎÉÑ Ë ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÅ
- ÉÓÐÏÌØÚÕÀÔ ÌÏËÁÌØÎÙÅ ÍÁÛÉÎÎÙÅ ËÏÄÏ×ÙÅ ÓÔÒÁÎÉÃÙ.</em></dd>
-
- <dt>îÏ×ÁÑ ÂÉÂÌÉÏÔÅËÁ ÄÌÑ ÒÁÂÏÔÙ Ó ÒÅÇÕÌÑÒÎÙÍÉ ×ÙÒÁÖÅÎÑÍÉ</dt>
-
- <dd>÷ ÓÏÓÔÁ× Apache 2.0 ÂÙÌÁ ×ËÌÀÞÅÎÁ <a href="http://www.pcre.org/">
- ÂÉÂÌÉÏÔÅËÁ ÄÌÑ ÒÁÂÏÔÙ Ó Perl-ÓÏ×ÍÅÓÔÉÍÙÍÉ ÒÅÇÕÌÑÒÎÙÍÉ ×ÙÒÁÖÅÎÑÍÉ</a> (PCRE).
- ÷ÓÅ ÒÅÇÕÌÑÒÎÙÅ ×ÙÒÁÖÅÎÉÑ ÔÅÐÅÒØ ÉÓÐÏÌØÚÕÀÔ ÂÏÌÅÅ ÍÏÝÎÙÊ ÓÉÎÔÁËÓÉÓ Perl 5.</dd>
-
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="module" id="module">õÌÕÞÛÅÎÉÑ × ÍÏÄÕÌÑÈ ÓÅÒ×ÅÒÁ</a></h2>
-
-
- <dl>
- <dt><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ Ñ×ÌÑÅÔÓÑ ÉÎÔÅÒÆÅÊÓÏÍ
- Ë ÐÒÏÔÏËÏÌÁÍ ÛÉÆÒÏ×ÁÎÉÑ SSL/TLS, ÐÒÅÄÏÓÔÁ×ÌÑÅÍÙÍÉ OpenSSL.</dd>
-
- <dt><code class="module"><a href="./mod/mod_dav.html">mod_dav</a></code></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ ×ÎÅÄÒÑÅÔ ÓÐÅÃÉÆÉËÁÃÉÀ
- Distributed Authoring and Versioning (DAV), ÐÏÚ×ÏÌÑÀÝÕÀ ÕÐÒÁ×ÌÑÔØ
- ÓÏÄÅÒÖÉÍÙÍ ÓÁÊÔÁ ÐÏÓÒÅÄÓÔ×ÏÍ ÒÁÓÛÉÒÅÎÎÏÇÏ ÐÒÏÔÏËÏÌÁ HTTP.</dd>
-
- <dt><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ ÐÏÚ×ÏÌÑÅÔ ÂÒÁÕÚÅÒÁÍ, ÐÏÄÄÅÒÖÉ×ÁÀÝÉÍ
- ÄÁÎÎÕÀ ÔÅÈÎÏÌÏÇÉÀ, ÚÁÐÒÁÛÉ×ÁÔØ ÄÁÎÎÙÅ × ÓÖÁÔÏÍ ×ÉÄÅ, ÞÔÏ ÓÏËÒÁÝÁÅÔ ÎÁÇÒÕÚËÕ ÎÁ
- ÓÅÔØ.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_ldap.html">mod_auth_ldap</a></code></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0.41. üÔÏÔ ÍÏÄÕÌØ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÂÁÚÕ ÄÁÎÎÙÈ LDAP
- ÄÌÑ ÈÒÁÎÅÎÉÑ ÉÍÅÎ É ÐÁÒÏÌÅÊ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ÎÅÏÂÈÏÄÉÍÙÈ ÐÒÉ ÁÕÔÅÎÔÉÆÉËÁÃÉÉ ÐÏ ÍÅÔÏÄÕ
- Basic. óÏÐÕÔÓÔ×ÕÀÝÉÊ ÅÍÕ ÍÏÄÕÌØ <code class="module"><a href="./mod/mod_ldap.html">mod_ldap</a></code> ÏÂÅÓÐÅÞÉ×ÁÅÔ ×ÏÚÍÏÖÎÏÓÔØ
- ÓÏÚÄÁÎÉÑ ÏÞÅÒÅÄÅÊ ÐÏÄËÌÀÞÅÎÉÊ (connection pools) É ËÜÛÉÒÏ×ÁÎÉÑ ÒÅÚÕÌØÔÁÔÏ×.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code></dt>
-
- <dd>÷ËÌÀÞÁÅÔ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ ÐÏÄÄÅÒÖËÕ ËÜÛÉÒÏ×ÁÎÉÑ ÓÅÓÓÉÊ
- ÐÒÏÃÅÓÓÁÍÉ, ÂÌÁÇÏÄÁÒÑ ÉÓÐÏÌØÚÏ×ÁÎÉÀ ÏÂÝÅÊ ÏÂÌÁÓÔÉ ÐÁÍÑÔÉ (ÒÁÚÄÅÌÅÎÉÀ
- ÐÁÍÑÔÉ).</dd>
-
- <dt><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ ÍÏÄÕÌØ ÐÏÚ×ÏÌÑÅÔ
- ÏÓÕÝÅÓÔ×ÌÑÔØ ÐÅÒÅ×ÏÄ ÉÚ ÏÄÎÏÇÏ ÎÁÂÏÒÁ ÓÉÍ×ÏÌÏ× (character set) × ÄÒÕÇÏÊ É ÉÚ ÏÄÎÏÊ
- ËÏÄÉÒÏ×ËÉ × ÄÒÕÇÕÀ.</dd>
-
- <dt><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ ×ËÌÀÞÁÅÔ × ÓÅÂÑ
- ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ ÍÏÄÕÌÑ mod_mmap_static ÉÚ Apache 1.3
- ÐÌÀÓ ÎÏ×ÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ËÜÛÉÒÏ×ÁÎÉÑ.</dd>
-
- <dt><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></dt>
-
- <dd>üÔÏÔ ÍÏÄÕÌØ ÓÔÁÌ ÂÏÌÅÅ ÇÉÂËÉÍ × Apache 2.0. ïÎ ÐÏÚ×ÏÌÑÅÔ
- ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ ÚÁÇÏÌÏ×ËÉ ÚÁÐÒÏÓÏ×, ÉÓÐÏÌØÚÕÅÍÙÈ ÍÏÄÕÌÅÍ
- <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, É ÍÏÖÅÔ ×ËÌÀÞÁÔØ × ÏÔ×ÅÔ ÓÅÒ×ÅÒÁ ÚÁÇÏÌÏ×ËÉ ×
- ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÒÁÚÌÉÞÎÙÈ ÕÓÌÏ×ÉÊ.</dd>
-
- <dt><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></dt>
-
- <dd>ðÒÏËÓÉ ÍÏÄÕÌØ ÂÙÌ ÐÏÌÎÏÓÔØÀ ÐÅÒÅÐÉÓÁÎ, É ÔÅÐÅÒØ ×ËÌÀÞÁÅÔ
- × ÓÅÂÑ ÐÒÅÉÍÕÝÅÓÔ×Á ÎÏ×ÏÊ ÆÉÌØÔÒÏ×ÏÊ ÉÎÆÒÁÓÔÒÕËÔÕÒÙ É ÉÓÐÏÌØÚÕÅÔ
- ÂÏÌÅÅ ÎÁÄÅÖÎÕÀ, ÓÏ×ÍÅÓÔÉÍÕÀ Ó HTTP/1.1 ÐÒÏËÓÉ-ÔÅÈÎÏÌÏÇÉÀ. ÷ ÄÏÂÁ×ÏË
- Ë ÜÔÏÍÕ ÂÙÌÁ ××ÅÄÅÎÁ ÎÏ×ÁÑ ÓÅËÃÉÑ <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>, ËÏÔÏÒÕÀ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÈ ÆÁÊÌÁÈ, ÞÔÏ
- ÏÂÅÓÐÅÞÉ×ÁÅÔ ÂÏÌÅÅ ÕÄÏÂÎÙÊ (É ÂÏÌÅÅ ÂÙÓÔÒÙÊ ÄÌÑ ÑÄÒÁ ÓÅÒ×ÅÒÁ) ËÏÎÔÒÏÌØ ÎÁÄ ÓÁÊÔÁÍÉ,
- ÉÓÐÏÌØÚÕÀÝÉÍÉ proxy-ÔÅÈÎÏÌÏÇÉÀ. ðÅÒÅÇÒÕÖÅÎÎÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ &lt;Directory "proxy:..."&gt;
- ÂÏÌÅÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ. íÏÄÕÌØ ÔÅÐÅÒØ ÒÁÚÄÅÌÅÎ ÎÁ ÏÔÄÅÌØÎÙÅ ÓÐÅÃÉÆÉÞÎÙÅ ÍÏÄÕÌÉ,
- ÐÏÄÄÅÒÖÉ×ÁÀÝÉÅ ÒÁÚÌÉÞÎÙÅ ÐÒÏÔÏËÏÌÙ. üÔÉ ÍÏÄÕÌÉ ×ËÌÀÞÁÀÔ × ÓÅÂÑ proxy_connect, proxy_ftp
- É proxy_http.</dd>
-
- <dt><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></dt>
-
- <dd>äÏÂÁ×ÌÅÎÁ ÎÏ×ÁÑ ÄÉÒÅËÔÉ×Á <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>, ÄÌÑ ÔÏÇÏ ÞÔÏÂÙ ×ÍÅÓÔÏ ÏÔ×ÅÔÏ× ÓÅÒ×ÅÒÁ
- NOT ACCEPTABLE ÉÌÉ MULTIPLE CHOICES ×ÓÅÇÄÁ ÐÒÅÄÏÓÔÁ×ÌÑÔØ ÐÏÌØÚÏ×ÁÔÅÌÀ
- ÏÐÒÅÄÅÌÅÎÎÙÊ ÄÏËÕÍÅÎÔ. ÷ ÄÏÐÏÌÎÅÎÉÅ Ë ÜÔÏÍÕ ÁÌÇÏÒÉÔÍÙ
- ÎÅÇÏÃÉÁÃÉÉ (negotiation) É MultiViews ÂÙÌÉ ×ÙÞÉÝÅÎÙ É ÉÓÐÒÁ×ÌÅÎÙ, ÄÌÑ
- ÏÂÅÓÐÅÞÅÎÉÑ ÂÏÌÅÅ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÇÏ ÒÅÚÕÌØÔÁÔÁ, Á ÔÁËÖÅ ÐÏÑ×ÉÌÁÓØ ×ÏÚÍÏÖÎÏÓÔØ
- ×ËÌÀÞÅÎÉÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏÇÏ ÓÏÄÅÒÖÉÍÏÇÏ ÄÏËÕÍÅÎÔÏ× × ËÁÒÔÕ ÔÉÐÏ× (type map).</dd>
-
- <dt><code class="module"><a href="./mod/mod_autoindex.html">mod_autoindex</a></code></dt>
-
- <dd>ìÉÓÔÉÎÇÉ Á×ÔÏÉÎÄÅËÓÉÒÕÅÍÙÈ ËÁÔÁÌÏÇÏ× ÔÅÐÅÒØ ÍÏÇÕÔ ×ÙÄÁ×ÁÔØÓÑ × ×ÉÄÅ
- HTML-ÔÁÂÌÉÃ. ðÏÑ×ÉÌÁÓØ ×ÏÚÍÏÖÎÏÓÔØ ÂÏÌÅÅ ÇÉÂËÏÊ ÓÏÒÔÉÒÏ×ËÉ, ×ËÌÀÞÁÑ ÓÏÒÔÉÒÏ×ËÕ ÐÏ ×ÅÒÓÉÑÍ É
- ÓÏÒÔÉÒÏ×ËÕ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÕÎÉ×ÅÒÓÁÌØÎÙÈ ÓÉÍ×ÏÌÏ× (wildcard).</dd>
-
- <dt><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></dt>
-
- <dd>÷×ÅÄÅÎÙ ÎÏ×ÙÅ ÄÉÒÅËÔÉ×Ù, ËÏÔÏÒÙÅ ÐÏÚ×ÏÌÑÀÔ ÉÚÍÅÎÉÔØ ÎÁÞÁÌØÎÙÊ É ËÏÎÅÞÎÙÊ
- ÔÅÇÉ SSI ÜÌÅÍÅÎÔÏ×, ÚÁÄÁ×ÁÅÍÙÅ ÐÏ ÕÍÏÌÞÁÎÉÀ, Á ÔÁËÖÅ ÐÒÅÄÏÓÔÁ×ÌÑÀÔ ×ÏÚÍÏÖÎÏÓÔØ
- ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ ÆÏÒÍÁÔÁ ÓÏÏÂÝÅÎÉÊ Ï ÏÛÉÂËÁÈ É ×ÒÅÍÅÎÉ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ
- × ÇÌÁ×ÎÏÍ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÍ ÆÁÊÌÅ, Á ÎÅ × SSI ÄÏËÕÍÅÎÔÅ. òÅÚÕÌØÔÁÔÙ
- ÏÂÒÁÂÏÔËÉ ÒÅÇÕÌÑÒÎÙÈ ×ÙÒÁÖÅÎÉÊ (ÔÅÐÅÒØ ÏÓÎÏ×Ù×ÁÀÝÉÈÓÑ ÎÁ ÓÉÎÔÁËÓÉÓÅ
- ÒÅÇÕÌÑÒÎÙÈ ×ÙÒÁÖÅÎÉÊ ÑÚÙËÁ Perl) ÍÏÇÕÔ ÂÙÔØ ÐÏÌÕÞÅÎÙ ÐÒÉ ÐÏÍÏÝÉ ÐÅÒÅÍÅÎÎÙÈ
- $0 .. $9 ÍÏÄÕÌÑ mod_include.</dd>
-
- <dt><code class="module"><a href="./mod/mod_auth_dbm.html">mod_auth_dbm</a></code></dt>
-
- <dd>ôÅÐÅÒØ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÍÎÏÇÏÞÉÓÌÅÎÎÙÅ ÔÉÐÙ DBM-ÐÏÄÏÂÎÙÈ ÂÁÚ ÄÁÎÎÙÈ ÐÏÓÒÅÄÓÔ×ÏÍ
- ÄÉÒÅËÔÉ×Ù <code class="directive"><a href="./mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a></code>.</dd>
-
- </dl>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/new_features_2_0.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/new_features_2_0.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/new_features_2_0.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/new_features_2_0.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/new_features_2_0.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/new_features_2_0.html" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">íÏÄÕÌÉ</a> | <a href="./mod/directives.html">äÉÒÅËÔÉ×Ù</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">çÌÏÓÓÁÒÉÊ</a> | <a href="./sitemap.html">ëÁÒÔÁ ÓÁÊÔÁ</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.xml b/docs/manual/new_features_2_0.xml
deleted file mode 100644
index 6638fa6dcb..0000000000
--- a/docs/manual/new_features_2_0.xml
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="new_features_2_0.xml.meta">
-
-<title>Overview of new features in Apache 2.0</title>
-
-<summary>
- <p>This document describes some of the major changes between the
- 1.3 and 2.0 versions of the Apache HTTP Server.</p>
-</summary>
-
-<seealso><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></seealso>
-
- <section id="core">
- <title>Core Enhancements</title>
-
- <dl>
- <dt>Unix Threading</dt>
-
- <dd>On Unix systems with POSIX threads support, Apache can
- now run in a hybrid multiprocess, multithreaded mode. This
- improves scalability for many, but not all configurations.</dd>
-
- <dt>New Build System</dt>
-
- <dd>The build system has been rewritten from scratch to be
- based on <code>autoconf</code> and <code>libtool</code>.
- This makes Apache's configuration system more similar to
- that of other packages.</dd>
-
- <dt>Multiprotocol Support</dt>
-
- <dd>Apache now has some of the infrastructure in place to
- support serving multiple protocols. <module>mod_echo</module> has
- been written as an example.</dd>
-
- <dt>Better support for non-Unix
- platforms</dt>
-
- <dd>Apache 2.0 is faster and more stable on non-Unix
- platforms such as BeOS, OS/2, and Windows. With the
- introduction of platform-specific <a
- href="mpm.html">multi-processing modules</a> (MPMs) and the
- Apache Portable Runtime (APR), these platforms are now
- implemented in their native API, avoiding the often buggy and
- poorly performing POSIX-emulation layers.</dd>
-
- <dt>New Apache API</dt>
-
- <dd>The API for modules has changed significantly for 2.0.
- Many of the module-ordering/-priority problems from 1.3 should
- be gone. 2.0 does much of this automatically, and module ordering
- is now done per-hook to allow more flexibility. Also, new calls
- have been added that provide additional module capabilities
- without patching the core Apache server.</dd>
-
- <dt>IPv6 Support</dt>
-
- <dd>On systems where IPv6 is supported by the underlying
- Apache Portable Runtime library, Apache gets IPv6 listening
- sockets by default. Additionally, the <directive
- module="mpm_common">Listen</directive>, <directive module="core"
- >NameVirtualHost</directive>, and <directive module="core"
- >VirtualHost</directive> directives support
- IPv6 numeric address strings (e.g., "<code>Listen
- [fe80::1]:8080</code>").</dd>
-
- <dt>Filtering</dt>
-
- <dd>Apache modules may now be written as filters which act on
- the stream of content as it is delivered to or from the
- server. This allows, for example, the output of CGI scripts to
- be parsed for Server Side Include directives using the
- <code>INCLUDES</code> filter in <module>mod_include</module>. The
- module <module>mod_ext_filter</module> allows external programs to
- act as filters in much the same way that CGI programs can act as
- handlers.</dd>
-
- <dt>Multilanguage Error Responses</dt>
-
- <dd>Error response messages to the browser are now provided in
- several languages, using SSI documents. They may be customized
- by the administrator to achieve a consistent look and feel.</dd>
-
- <dt>Simplified configuration</dt>
-
- <dd>Many confusing directives have been simplified. The often
- confusing <code>Port</code> and <code>BindAddress</code> directives
- are gone; only the <directive module="mpm_common">Listen</directive>
- directive is used for IP address binding; the <directive
- module="core">ServerName</directive> directive specifies the
- server name and port number only for redirection and vhost
- recognition.</dd>
-
- <dt>Native Windows NT Unicode Support</dt>
-
- <dd>Apache 2.0 on Windows NT now uses utf-8 for all filename
- encodings. These directly translate to the underlying Unicode
- file system, providing multilanguage support for all Windows
- NT-based installations, including Windows 2000 and Windows XP.
- <em>This support does not extend to Windows 95, 98 or ME, which
- continue to use the machine's local codepage for filesystem
- access.</em></dd>
-
- <dt>Regular Expression Library Updated</dt>
-
- <dd>Apache 2.0 includes the <a href="http://www.pcre.org/">Perl
- Compatible Regular Expression Library</a> (PCRE). All regular
- expression evaluation now uses the more powerful Perl 5
- syntax.</dd>
-
- </dl>
- </section>
-
- <section id="module">
- <title>Module Enhancements</title>
-
- <dl>
- <dt><module>mod_ssl</module></dt>
-
- <dd>New module in Apache 2.0. This module is an interface
- to the SSL/TLS encryption protocols provided by
- OpenSSL.</dd>
-
- <dt><module>mod_dav</module></dt>
-
- <dd>New module in Apache 2.0. This module implements the HTTP
- Distributed Authoring and Versioning (DAV) specification for
- posting and maintaining web content.</dd>
-
- <dt><module>mod_deflate</module></dt>
-
- <dd>New module in Apache 2.0. This module allows supporting
- browsers to request that content be compressed before delivery,
- saving network bandwidth.</dd>
-
- <dt><module>mod_auth_ldap</module></dt>
-
- <dd>New module in Apache 2.0.41. This module allows an LDAP
- database to be used to store credentials for HTTP Basic
- Authentication. A companion module, <module>mod_ldap</module>
- provides connection pooling and results caching.</dd>
-
- <dt><module>mod_auth_digest</module></dt>
-
- <dd>Includes additional support for session caching across
- processes using shared memory.</dd>
-
- <dt><module>mod_charset_lite</module></dt>
-
- <dd>New module in Apache 2.0. This experimental module allows
- for character set translation or recoding.</dd>
-
- <dt><module>mod_file_cache</module></dt>
-
- <dd>New module in Apache 2.0. This module includes the
- functionality of <code>mod_mmap_static</code> in Apache 1.3,
- plus adds further caching abilities.</dd>
-
- <dt><module>mod_headers</module></dt>
-
- <dd>This module is much more flexible in Apache 2.0. It can now
- modify request headers used by <module>mod_proxy</module>, and
- it can conditionally set response headers.</dd>
-
- <dt><module>mod_proxy</module></dt>
-
- <dd>The proxy module has been completely rewritten to take
- advantage of the new filter infrastructure and to implement a
- more reliable, HTTP/1.1 compliant proxy. In addition, new
- <directive module="mod_proxy" type="section">Proxy</directive>
- configuration sections provide more readable (and internally
- faster) control of proxied sites; overloaded <code>&lt;Directory
- "proxy:..."&gt;</code> configuration are not supported. The module
- is now divided into specific protocol support modules including
- <code>proxy_connect</code>, <code>proxy_ftp</code> and
- <code>proxy_http</code>.</dd>
-
- <dt><module>mod_negotiation</module></dt>
-
- <dd>A new <directive module="mod_negotiation"
- >ForceLanguagePriority</directive> directive can be used to assure that
- the client receives a single document in all cases, rather than
- NOT ACCEPTABLE or MULTIPLE CHOICES responses. In addition, the
- negotiation and MultiViews algorithms have been cleaned up to
- provide more consistent results and a new form of type map that
- can include document content is provided.</dd>
-
- <dt><module>mod_autoindex</module></dt>
-
- <dd>Autoindex'ed directory listings can now be configured to
- use HTML tables for cleaner formatting, and allow finer-grained
- control of sorting, including version-sorting, and wildcard
- filtering of the directory listing.</dd>
-
- <dt><module>mod_include</module></dt>
-
- <dd>New directives allow the default start and end tags for SSI elements
- to be changed and allow for error and time format configuration
- to take place in the main configuration file rather than in the
- SSI document. Results from regular expression parsing and grouping
- (now based on Perl's regular expression syntax) can be retrieved
- using <module>mod_include</module>'s variables <code>$0</code>
- .. <code>$9</code>.</dd>
-
- <dt><module>mod_auth_dbm</module></dt>
-
- <dd>Now supports multiple types of DBM-like databases using the
- <directive module="mod_auth_dbm">AuthDBMType</directive>
- directive.</dd>
-
- </dl>
- </section>
-</manualpage>
diff --git a/docs/manual/new_features_2_0.xml.de b/docs/manual/new_features_2_0.xml.de
deleted file mode 100644
index 0dcc678129..0000000000
--- a/docs/manual/new_features_2_0.xml.de
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="new_features_2_0.xml.meta">
-
-<title>&#220;bersicht der neuen Funktionen in Apache 2.0</title>
-
-<summary>
- <p>Dieses Dokument beschreibt einige der wichtigsten &#196;nderungen
- des Apache HTTP Servers 2.0 gegen&#252;ber der Version 1.3.</p>
-</summary>
-
-<seealso><a href="upgrading.html">Upgrade von 1.3 auf 2.0</a></seealso>
-
- <section id="core">
- <title>Core-Erweiterungen</title>
-
- <dl>
- <dt><strong>Unix-Threading</strong></dt>
-
- <dd>Auf Unix-Systemen mit Unterst&#252;tzung f&#252;r POSIX-Threads,
- kann Apache jetzt in einem Multi-Process, Multi-Threaded Hybrid-Mode
- gestartet werden. Dies verbessert die Skalierf&#228;higkeit f&#252;r
- viele, jedoch nicht unbedingt alle Konfigurationen.</dd>
-
- <dt><strong>Neues Build-System</strong></dt>
-
- <dd>Das Build-System wurde komplett auf der Basis von
- <code>autoconf</code> und <code>libtool</code> neu geschrieben. Dadurch
- wird das Apache-Konfigurationssystem dem vieler anderer Packages
- &#228;hnlicher.</dd>
-
- <dt><strong>Multi-Protokoll-Unterst&#252;tzung</strong></dt>
-
- <dd>Apache stellt jetzt die notwendigen Grundfunktionalit&#228;ten
- bereit, um mehrere Protokolle unterst&#252;tzen und verarbeiten zu
- k&#246;nnen. <module>mod_echo</module> wurde hierf&#252;r als
- Beispiel geschrieben.</dd>
-
- <dt><strong>Bessere Unterst&#252;tzung von
- Nicht-Unix-Plattformen</strong></dt>
-
- <dd>Apache 2.0 ist schneller und stabiler auf Nicht-Unix-Plattformen
- wie BeOS, OS/2 und Windows. Mit der Einf&#252;hrung von
- Plattform-spezifischen <a href="mpm.html">Multi-Processing Modulen</a>
- (MPMs) und der Apache Portable Runtime (APR), sind diese Plattformen
- jetzt in ihrem nativen API implementiert, wodurch die Verwendung der
- h&#228;ufig fehlerbehafteten und schlecht funktionierenden
- POSIX-Emulation-Layer vermieden wird.</dd>
-
- <dt><strong>Neues Apache API</strong></dt>
-
- <dd>Das API f&#252;r Module hat sich in 2.0 stark ver&#228;ndert.
- Die meisten der Sortierungs-/Priorit&#228;tsprobleme von Modulen bei
- 1.3 sollten nun verschwunden sein. In 2.0 wird hiervon vieles
- automatisch durchgef&#252;hrt. Die Modulsortierung wird jetzt
- &#252;ber einen pre-hook vorgenommen, um mehr Flexibilit&#228;t
- zu bieten. Au&#223;erdem wurden neue API-Calls hinzugef&#252;gt,
- die zus&#228;tzliche Modulf&#228;higkeiten zur Verf&#252;gung stellen,
- ohne den Apache-Kern anpassen zu m&#252;ssen.</dd>
-
- <dt><strong>IPv6-Unterst&#252;tzung</strong></dt>
-
- <dd>Auf Systemen, bei denen die zugrundeliegende Apache Portable
- Runtime-Bibliothek IPv6 unterst&#252;tzt, bekommt Apache
- standarm&#228;&#223;ig IPv6 Listening Sockets. Zus&#228;tzlich
- unterst&#252;tzen die Konfigurationsanweisungen <directive
- module="mpm_common">Listen</directive>, <directive
- module="core">NameVirtualHost</directive> und <directive
- module="core">VirtualHost</directive> numerische IPv6-Adressangaben
- (z.B., "<code>Listen [fe80::1]:8080</code>").</dd>
-
- <dt><strong>Filterung</strong></dt>
-
- <dd>Apache-Module k&#246;nnen jetzt als Filter entwickelt und zur
- Filterung des rein- und rausgehenden Datenstroms des Servers
- eingesetzt werden. Hierdurch kann beispielsweise die Ausgabe von
- CGI-Skripten durch den <code>INCLUDES</code>-Filter von
- <module>mod_include</module> bearbeitet werden und so Server-Side
- Include-Anweisungen ausgef&#252;hrt werden. Das Modul
- <module>mod_ext_filter</module> erlaubt externen Programmen
- als Filter zu agieren, in der gleichen Weise wie CGI-Programme als
- Eingabe dienen k&#246;nnen.</dd>
-
- <dt><strong>Mehrsprachige Fehlermeldungen</strong></dt>
-
- <dd>Fehlermeldungen die an den Browser rausgehen, stehen jetzt als
- SSI-Dokumente in verschiedenen Sprachen zur Verf&#252;gung. Sie
- k&#246;nnen bei Bedarf durch den Administrator angepasst werden,
- um ein einheitliches Design zu erreichen.</dd>
-
- <dt><strong>Vereinfachte Konfiguration</strong></dt>
-
- <dd>Viele der verwirrenden Konfigurationsanweisungen wurden vereinfacht.
- Die oft f&#252;r Verwirrung sorgenden <code>Port</code>- und
- <code>BindAddress</code>-Anweisungen wurden entfernt.
- Ausschlie&#223;lich die <directive
- module="mpm_common">Listen</directive>-Anweisung wird nun zum
- Setzen von IP-Addressen und Portnummern benutzt.
- Der Servername und die Portnummer, die f&#252;r Weiterleitungen und
- zur Erkennung virtueller Server verwendet werden, werden &#252;ber
- die <directive module="core">ServerName</directive>-Anweisung
- konfiguriert.</dd>
-
- <dt><strong>Native Windows NT Unicode-Unterst&#252;tzung</strong></dt>
-
- <dd>Apache 2.0 auf Windows NT benutzt jetzt utf-8 f&#252;r alle
- Dateinamen-Kodierungen. Diese werden direkt auf das zugrundeliegende
- Unicode-Dateisystem abgebildet, wodurch Mehrsprach-Unterst&#252;tzung
- f&#252;r alle Windows NT-basierten Installationen, inklusive Windows
- 2000 und Windows XP, zur Verf&#252;gung gestellt wird.
- <em>Diese Unterst&#252;tzung ist nicht auf Windows 95, 98 oder ME
- verf&#252;gbar. Hier wird weiterhin die jeweils lokale Codepage des
- Rechners f&#252;r den Zugriff auf das Dateisystem verwendet.</em></dd>
-
- <dt>Bibliothek f&#252;r regul&#228;re Ausdr&#252;cke aktualisiert</dt>
-
- <dd>Apache 2.0 enth&#228;lt die <a
- href="http://www.pcre.org/">"Perl Compatible
- Regular Expression Library"</a> (PCRE).
- Bei der Auswertung aller regul&#228;ren Ausdr&#252;cke wird nun
- die leistungsf&#228;higere Syntax von Perl 5 verwendet.</dd>
-
- </dl>
- </section>
-
- <section id="module">
- <title>Modul-Erweiterungen</title>
-
- <dl>
- <dt><module>mod_ssl</module></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul ist ein Interface
- zu den von OpenSSL bereitgestellten SSL/TLS
- Verschl&#252;sselungs-Protokollen.</dd>
-
- <dt><module>mod_dav</module></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul implementiert die HTTP
- Distributed Authoring and Versioning (DAV) Spezifikation zur
- Erzeugung und Pflege von Web-Inhalten.</dd>
-
- <dt><module>mod_deflate</module></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul erlaubt es Browsern, die
- dies unterst&#252;tzen, eine Komprimierung des Inhaltes vor der
- Auslieferung anzufordern, um so Netzwerk-Bandbreite zu sparen.</dd>
-
- <dt><module>mod_auth_ldap</module></dt>
-
- <dd>Neues Modul in Apache 2.0.41. Diese Modul erm&#246;glicht
- die Verwendung einer LDAP-Datenbank zur Speicherung von
- Berechtigungsdaten f&#252;r die HTTP-Basic-Authentication.
- Ein Begleitmodul, <module>mod_ldap</module>, stellt einen
- Verbindungs-Pool und die Pufferung von Abfrageergebnissen zur
- Verf&#252;gung.
- </dd>
-
- <dt><module>mod_auth_digest</module></dt>
-
- <dd>Zus&#228;tzliche Unterst&#252;tzung f&#252;r
- prozess&#252;bergreifendes Session-Caching mittels Shared-Memory.
- </dd>
-
- <dt><module>mod_charset_lite</module></dt>
-
- <dd>Neues Modul in Apache 2.0.
- Dieses experimentelle Modul erlaubt Zeichensatz-&#220;bersetzungen oder
- -Umschl&#252;sselung.</dd>
-
- <dt><module>mod_file_cache</module></dt>
-
- <dd>Neues Modul in Apache 2.0. Dieses Modul beinhaltet die
- Funktionalit&#228;t von <code>mod_mmap_static</code> aus Apache 1.3,
- plus einige weitere Caching-Funktionen.</dd>
-
- <dt><module>mod_headers</module></dt>
-
- <dd>Dieses Modul ist in Apache 2.0 deutlich flexibler geworden. Es
- kann jetzt die von <module>mod_proxy</module> genutzten Request-Header
- manipulieren und es ist m&#246;glich Response-Header auf Basis von
- definierten Bedingungen zu ver&#228;ndern.</dd>
-
- <dt><module>mod_proxy</module></dt>
-
- <dd>Das Proxy Modul wurde komplett neu geschrieben um die
- M&#246;glichkeiten der neuen Filter-Funktionalit&#228;t
- auszusch&#246;pfen und um einen zuverl&#228;ssigen Proxy zu haben, der
- den HTTP/1.1-Spezifikationen entspricht. Neue <directive
- module="mod_proxy" type="section">Proxy</directive>
- -Konfigurationsabschnitte bieten eine besser lesbare (und intern
- schnellere) Kontrolle der vermittelten Seiten.
- Die &#252;berladenen <code>&lt;Directory
- "proxy:..."&gt;</code>-Konfigurationen werden nicht
- mehr unterst&#252;tzt. Das Modul ist nun in mehrere Module
- unterteilt, die jeweils ein bestimmtes &#220;bertragungsprotokoll
- unterst&#252;tzen, wie <code>proxy_connect</code>,
- <code>proxy_ftp</code> und <code>proxy_http</code>.</dd>
-
- <dt><module>mod_negotiation</module></dt>
-
- <dd>Die neue Konfigurationsanweisung <directive module="mod_negotiation"
- >ForceLanguagePriority</directive>
- kann benutzt werden, um sicherzustellen, dass ein Client auf jeden
- Fall ein einzelnes Dokument, anstatt einer NOT ACCEPTABLE- oder
- MULTIPLE CHOICES-Antwort, bekommt. Zus&#228;tzlich wurden die
- Negotiation- und Multiview-Algorithmen angepasst um einheitlichere
- Ergebnisse zu liefern. Au&#223;erdem wird ein neues
- Type-Map-Format bereitgestellt, das Dokumenteninhalte direkt
- enthalten kann.</dd>
-
- <dt><module>mod_autoindex</module></dt>
-
- <dd>Automatisch erzeugte Verzeichnisindizes k&#246;nnen zur besseren
- &#220;bersichtlichkeit durch HTML-Tabellen dargestellt werden.
- Genauere Sortierungen, wie Sortierung nach Versionsnummer und
- Wildcard-Filterung des Verzeichnisindizes werden unterst&#252;tzt.</dd>
-
- <dt><module>mod_include</module></dt>
-
- <dd>Neue Anweisungen erlauben es, die Standard Start- und Endtags von
- SSI-Elementen zu &#228;ndern. Zudem k&#246;nnen die Default-Formate
- f&#252;r Fehlermeldungen und Zeitangaben nun ebenfalls in der
- Serverkonfiguration vorgenommen werden. Auf die Ergebnisse der
- Auswertung und Gruppierung von regul&#228;ren Ausdr&#252;cken (jetzt
- auf Basis der Perl-Syntax f&#252;r regul&#228;re Ausdr&#252;cke) kann
- &#252;ber die <module>mod_include</module> Variablen <code>$0</code>
- bis <code>$9</code> zugegriffen werden.</dd>
-
- <dt><module>mod_auth_dbm</module></dt>
-
- <dd>DBM-&#228;hnliche Datenbanken werden jetzt durch die
- Konfigurationsaweisung <directive
- module="mod_auth_dbm">AuthDBMType</directive> unterst&#252;tzt.</dd>
- </dl>
- </section>
-</manualpage>
diff --git a/docs/manual/new_features_2_0.xml.fr b/docs/manual/new_features_2_0.xml.fr
deleted file mode 100644
index 038603b3b2..0000000000
--- a/docs/manual/new_features_2_0.xml.fr
+++ /dev/null
@@ -1,237 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="new_features_2_0.xml.meta">
-
- <title>Vue d'ensemble des nouvelles fonctionnalit&#233;s d'Apache 2.0</title>
-
- <summary>
- <p>Ce document d&#233;crit les changements majeurs apport&#233;s entre les
- versions 1.3 et 2.0 du serveur HTTP Apache.</p>
- </summary>
-
- <seealso><a href="upgrading.html">Migrer &#224; 2.0 depuis la version 1.3</a></seealso>
-
- <section id="core">
- <title>Am&#233;liorations du Syst&#232;me de Base</title>
-
- <dl>
- <dt>Threading Unix</dt>
-
- <dd>Sur les syst&#232;mes Unix qui supportent les threads POSIX, Apache
- peut &#224; pr&#233;sent tourner en mode hybride multi-processus et
- multi-thread&#233;, ce qui augmente l'extensibilit&#233; et la performance
- du serveur pour la plupart des configurations.</dd>
-
- <dt>Nouveau Syst&#232;me de Compilation</dt>
-
- <dd>Le processus de compilation a &#233;t&#233; refait de A &#224; Z;
- il utilise &#224; pr&#233;sent <code>autoconf</code> et <code>libtool</code>,
- ce qui rend la compilation d'Apache plus famili&#232;re aux utilisateurs
- d'autre logiciels de m&#232;me type.</dd>
-
- <dt>Support Multiprotocole</dt>
-
- <dd>Apache dispose d&#233;sormais de l'infrastructure n&#233;cessaire pour supporter
- d'autres protocoles. Le module <module>mod_echo</module> illustre ces
- possibilit&#233;s.</dd>
-
- <dt>Support am&#233;lior&#233; des Plate-formes non-Unix</dt>
-
- <dd>Apache 2.0 se montre plus rapide et plus stable sur les plate-formes
- non Unix, telles BeOS, OS/2, NetWare et Windows. L'apparition des
- <a href="mpm.html">Modules Multi-Processus</a> (MPMs), ainsi que de
- la biblioth&#232;que "Apache Portable Runtime" (APR) permet a Apache de
- tirer parti des API natives de ces plate-formes, sans s'appuyer sur leurs
- couches POSIX souvent bogu&#233;es et peu optimis&#233;es.</dd>
-
- <dt>Nouvelle API Apache</dt>
-
- <dd>L'Interface de Programmation (API) des modules a beaucoup chang&#233;
- avec le passage &#224; la version 2.0.
- Les probl&#232;mes d'ordre et de priorit&#233; des modules, rencontr&#233;s
- avec la version 1.3, devraient maintenant &#234;tre r&#233;solus. Apache 2.0
- g&#232;re ces probl&#232;mes de fa&#231;on automatique. L'ordre des modules
- est g&#233;r&#233; au moyen de "crochets" (hooks), ce qui rend la gestion
- flexible. De nouveaux appels ont &#233;t&#233; &#233;galement cr&#233;&#233;s
- afin de permettre l'impl&#233;mentation d'autres fonctions dans les modules,
- sans devoir corriger le noyau du serveur Apache.</dd>
-
- <dt>Support IPv6</dt>
-
- <dd>Sur les syst&#232;mes o&#249; la biblioth&#232;que Apache Portable Runtime
- supporte IPv6, Apache peut par d&#233;faut &#233;couter sur des interfaces
- de connexions IPv6. Les directives <directive module="mpm_common">Listen</directive>,
- <directive module="core">NameVirtualHost</directive> et
- <directive module="core">VirtualHost</directive> supportent &#233;galement
- les adresses IPv6 (comme par exemple, dans "<code>Listen[fe80::1]:8080</code>").</dd>
-
- <dt>Filtering</dt>
-
- <dd>Il est maintenant possible d'&#233;crire des modules Apache pour filtrer
- les flux de donn&#233;es entrant ou sortant du serveur. A titre d'exemple,
- il est possible de filtrer des directives Server Side Include de la sortie
- standard d'un script CGI, au moyen du filtre <code>INCLUDES</code> fourni
- par le module <module>mod_include</module>. Le module
- <module>mod_ext_filter</module> permet quant &#224; lui l'utilisation comme
- filtres de programmes externes &#224; Apache, de la m&#234;me mani&#232;re
- qu'on peut utiliser des programmes CGI comme Handlers.</dd>
-
- <dt>R&#233;ponses d'Erreurs Multilangues</dt>
-
- <dd>Les messages d'erreur envoy&#233;s au navigateur existent &#224; pr&#233;sent en
- plusieurs langues avec des documents SSI. Ces messages peuvent &#234;tre
- personnalis&#233;s par l'administrateur afin de s'int&#233;grer avec le site web.</dd>
-
- <dt>Simplification de la Configuration</dt>
-
- <dd>Beaucoup de directives, auparavant peu claires, ont &#233;t&#233; simplifi&#233;es.
- Les directives <code>Port</code> et <code>BindAddress</code>, souvent
- sources d'incompr&#233;hension, ont disparus. D&#233;sormais seule la directive
- <directive module="mpm_common">Listen</directive> sert de liaison pour les
- adresses IP; la directive <directive module="core">ServerName</directive> ne
- pr&#233;cise le nom du serveur et son port que pour les redirections et la
- gestion des h&#244;tes virtuels.</dd>
-
- <dt>Support natif de l'Unicode sous Windows NT</dt>
-
- <dd>Apache 2.0 sur Windows NT utilise &#224; pr&#233;sent l'utf-8 pour tous les
- noms de fichiers. Ces noms de fichiers sont directement traduits vers
- l'encodage Unicode du syst&#232;me de fichiers, ce qui permet le support
- multilangue pour toutes les installations sur la famille NT de Windows, y
- compris Windows 2000 et Windows XP.<em>Ce support n'est pas fonctionnel
- pour Windows 95, 98 ni ME, qui utilisent les pages de code locales pour
- les acc&#232;s au syst&#232;me de fichiers, comme auparavant.</em></dd>
-
- <dt>Mise &#224; jour de la Biblioth&#232;que d'Expressions Rationnelles</dt>
-
- <dd>Apache 2.0 contient la <a href="http://www.pcre.org/">biblioth&#232;que
- d'expressions rationnelles compatible Perl </a>(Perl Compatible Regular
- Expression Library - PCRE). Toutes les expressions rationnelles sont dont
- g&#233;r&#233;es avec la syntaxe de Perl 5, plus puissante.</dd>
-
- </dl>
- </section>
-
- <section id="module">
- <title>Am&#233;lioration des Modules</title>
-
- <dl>
- <dt><module>mod_ssl</module></dt>
-
- <dd>Apparu dans Apache 2.0, ce module est une interface aux protocoles de
- criffrement SSL/TLS fournis par OpenSSL.</dd>
-
- <dt><module>mod_dav</module></dt>
-
- <dd>Apparu dans Apache 2.0, ce module impl&#233;mente les sp&#233;cifications HTTP de
- gestion distribu&#233;e de versions et de r&#233;daction (Distributed Authoring and
- Versioning - DAV), destin&#233;es &#224; la mise en ligne et &#224; la maintenance des
- contenus Web.</dd>
-
- <dt><module>mod_deflate</module></dt>
-
- <dd>Module apparu dans Apachge 2.0, mod_deflate permet aux navigateurs qui
- le supportent de demander la compression des contenus envoy&#233;s par le serveur.
- Cela &#224; l'avantage de r&#233;duite l'occupation de la bande passante.</dd>
-
- <dt><module>mod_auth_ldap</module></dt>
-
- <dd>Apparu dans Apache 2.0.41, ce module permet aux administrateurs
- d'utiliser un arbre LDAP pour g&#233;rer la base d'utilisateurs pour les
- Authentifications Basiques HTTP. Un module voisin,
- <module>mod_ldap</module>, permet de globaliser les connexions &#224; l'arbre LDAP
- et de garder en m&#233;moire cache ces acc&#232;s.</dd>
-
- <dt><module>mod_auth_digest</module></dt>
-
- <dd>Am&#233;liore les fonctions de cache sur une session entre les diff&#233;rents
- processus, en utilisant de la m&#233;moire partag&#233;e.</dd>
-
- <dt><module>mod_charset_lite</module></dt>
-
- <dd>Apparu dans Apache 2.0, ce module exp&#233;rimental permet la conversion
- et l'enregistrement entre jeux de caract&#232;res.</dd>
-
- <dt><module>mod_file_cache</module></dt>
-
- <dd>Apparu dans Apache 2.0, ce module impl&#233;mente les fonctionnalit&#233;s du
- module <code>mod_mmap_static</code> pr&#233;sent dans Apache 1.3, et offre des
- fonctions plus avanc&#233;es pour la gestion de la cache.</dd>
-
- <dt><module>mod_headers</module></dt>
-
- <dd>Ce module gagne beaucoup de flexibilit&#233; avec Apache 2.0 : on peut
- d&#233;sormais l'utiliser pour modifier les en-t&#234;tes des requ&#234;tes
- utilis&#233;s par <module>mod_proxy</module>, et peut aussi positionner les
- en-t&#234;tes des r&#233;ponses de mani&#232;re conditionnelle.</dd>
-
- <dt><module>mod_proxy</module></dt>
-
- <dd>Le module proxy a &#233;t&#233; r&#233;&#233;crit de A &#224; Z. Il tire
- maintenant avantage de la nouvelle infrastructure de filtrage, et impl&#233;mente
- un mandataire plus fiable, et conforme aux normes HTTP/1.1. De nouvelles
- sections de configuration ajout&#233;es &#224;
- <directive module="mod_proxy" type="section">Proxy</directive>
- donnent un contr&#244;le plus lisible et un traitement plus rapide des requ&#234;tes
- proxifi&#233;s; les configurations surcharch&#233;es <code>&lt;Directory
- "proxy:..."&gt;</code> ne sont pas support&#233;es. Le module a aussi &#233;t&#233;
- fragment&#233; en plusieurs modules qui g&#233;rent chacun leur protocole :
- <code>proxy_connect</code>, <code>proxy_ftp</code> et
- <code>proxy_http</code>.</dd>
-
- <dt><module>mod_negotiation</module></dt>
-
- <dd>Une nouvelles directive, <directive
- module="mod_negotiation">ForceLanguagePriority</directive> a &#233;t&#233; ajout&#233;e,
- elle permet de garantir que le client re&#231;oit un seul document dans tous les
- cas, au lieu de r&#233;ponses NOT ACCEPTABLE ou MULTIPLE CHOICES. Les
- algorithmes g&#233;rant la n&#233;gociation et les vues multiples (MultiViews) ont
- &#233;t&#233; nettoy&#233;s et donnent des r&#233;ponses plus logiques. Un nouveau format de
- carte de types (map type) qui peut aussi g&#233;rer le contenu de documents a
- aussi &#233;t&#233; ajout&#233;.</dd>
-
- <dt><module>mod_autoindex</module></dt>
-
- <dd>Les listes auto-g&#233;n&#233;r&#233;s par Autoindex sont &#224; pr&#233;sent
- configurables, et peuvent utiliser des tables HTML pour une mise en forme plus propre.
- L'ordre d'affichage des fichiers est &#233;galement finement param&#232;trable,
- comme pour le tri par version, et le filtrage par caract&#232;res jokers du
- listage du r&#233;pertoire.</dd>
-
- <dt><module>mod_include</module></dt>
-
- <dd>De nouvelles directives permettent de modifier la valeur par d&#233;faut
- des drapeaux <em>start</em> et <em>end</em> des &#233;l&#233;ments SSI. Ces directives
- permettent &#224; la configuration d'affichage de dates et heures d'&#234;tre
- effectu&#233;e dans le fichier de configuration principal, plut&#244;t que dans le
- document SSI. Les r&#233;ponses donn&#233;es par des recherches par expressions
- rationnelles (qui g&#232;rent &#224; pr&#233;sent les regex Perl) sont
- recup&#233;r&#233;s au moyen des variables <code>$0</code> &#224; <code>$9</code>.</dd>
-
- <dt><module>mod_auth_dbm</module></dt>
-
- <dd>Plusieurs bases de donn&#233;es DBM sont support&#233;es, et s&#233;lectionnables
- au moyen de la directive <directive
- module="mod_auth_dbm">AuthDBMType</directive>.</dd>
- </dl>
- </section>
-</manualpage> \ No newline at end of file
diff --git a/docs/manual/new_features_2_0.xml.ja b/docs/manual/new_features_2_0.xml.ja
deleted file mode 100644
index a31b692f46..0000000000
--- a/docs/manual/new_features_2_0.xml.ja
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="new_features_2_0.xml.meta">
-
-<title>Apache 2.0 $B$N?75!G=$N35MW(B</title>
-
-<summary>
- <p>$B$3$NJ8=q$G$O!"(BApache HTTP $B%5!<%P%P!<%8%g%s(B 1.3 $B$H(B 2.0
- $B$N<g$J0c$$$K$D$$$F5-=R$7$F$$$^$9!#(B</p>
-</summary>
-
-<seealso><a href="upgrading.html">1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B</a></seealso>
-
- <section id="core">
- <title>$B%3%"5!G=$N3HD%(B</title>
-
- <dl>
- <dt>Unix $B$N%9%l%C%I(B</dt>
-
- <dd>POSIX $B%9%l%C%I$r%5%]!<%H$7$F$$$k(B Unix $B%7%9%F%`>e$G$O!"(B
- Apache $B$O%^%k%A%W%m%;%9!"%^%k%A%9%l%C%I$N%O%$%V%j%C%I%b!<%I$G(B
- $B<B9T$G$-$k$h$&$K$J$j$^$7$?!#$3$l$K$h$j(B
- $BB?$/$N@_Dj$K$*$$$F%9%1!<%i%S%j%F%#$,8~>e$7$^$9!#(B</dd>
-
- <dt>$B?7$7$$%S%k%I%7%9%F%`(B</dt>
-
- <dd>$B%S%k%I%7%9%F%`$O(B <code>autoconf</code> $B$H(B <code>libtool</code>
- $B$K4p$E$$$?$b$N$K$J$k$h$&$K!"(B
- $B?7$7$/=q$-D>$5$l$^$7$?!#$3$l$K$h$j!"(BApache $B$N(B configure $B$N%7%9%F%`$O(B
- $BB>$N%Q%C%1!<%8$H;w$?$b$N$K$J$j$^$7$?!#(B</dd>
-
- <dt>$B%^%k%A%W%m%H%3%k%5%]!<%H(B</dt>
-
- <dd>Apache $B$KJ#?t$N%W%m%H%3%k$r07$&$?$a$N5!9=$,Hw$o$j$^$7$?!#(B
- $BNc$H$7$F(B <module>mod_echo</module> $B$,=q$+$l$F$$$^$9!#(B</dd>
-
- <dt>Unix $B0J30$N%W%i%C%H%U%)!<%`$N%5%]!<%H$N2~A1(B</dt>
-
- <dd>Apache 2.0 $B$O(B BeOS$B!"(BOS/2$B!"(BWindows $B$J$I$N(B Unix $B0J30$N(B
- $B%W%i%C%H%U%)!<%`$G!"$h$jB.$/!"$h$j0BDj$7$FF0:n$9$k$h$&$K$J$j$^$7$?!#(B
- $B%W%i%C%H%U%)!<%`FCM-$N(B <a
- href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a> (MPM) $B$H(B
- Apache Portable Runtime (APR) $B$NF3F~$K$h$j!"(B
- $B%M%$%F%#%t$N(B API $B$G<BAu$5$l$k$h$&$K$J$j!"(B
- $B%P%0$,B?$/!"@-G=$N0-$$$3$H$,B?$$(B POSIX $B%(%_%e%l!<%7%g%s%l%$%d$N;HMQ$r(B
- $B2sHr$9$k$3$H$,$G$-$^$7$?!#(B</dd>
-
- <dt>$B?7$7$$(B Apache API</dt>
-
- <dd>2.0 $B$G$O%b%8%e!<%k$N(B API $B$,Bg$-$/JQ$o$j$^$7$?!#(B
- 1.3 $B$K$"$C$?%b%8%e!<%k$N=gHV(B/$BM%@hEY$NLdBj$NB?$/$O(B
- $B$J$/$J$C$F$$$k$O$:$G$9!#(B2.0 $B$OM%@hEY$NA*Br$r$[$H$s$I$r<+F0E*$K9T$J$$!"(B
- $B%b%8%e!<%k$N=gHV$O$h$j=@Fp@-$r9b$a$k$?$a$K%U%C%/Kh$K9T$J$o$l$k$h$&$K(B
- $B$J$j$^$7$?!#$^$?!"%3%"(B Apache $B%5!<%P$K%Q%C%A$r$"$F$k$3$H$J$/(B
- $BDI2C$N%b%8%e!<%k5!G=$rDs6!$9$k$3$H$,$G$-$k$h$&$K?7$7$$4X?t$,(B
- $BDI2C$5$l$^$7$?!#(B</dd>
-
- <dt>IPv6 $B%5%]!<%H(B</dt>
-
- <dd>Apache $B$,;HMQ$7$F$$$k(B Apache Portable Runtime library $B$,(B
- IPv6 $B$r%5%]!<%H$7$F$$$k%7%9%F%`$G$O(B Apache $B$O(B $B%G%U%)%k%H$G(B
- IPv6 $B$N%=%1%C%H$r(B listen $B$7$^$9!#$5$i$K!"(B
- <directive module="mpm_common">Listen</directive>,
- <directive module="core">NameVirtualHost</directive>,
- <directive module="core">VirtualHost</directive>
- $B$N3F%G%#%l%/%F%#%V$,(B IPv6 $B$N%"%I%l%9$r(B
- $B%5%]!<%H$9$k$h$&$K$J$j$^$7$?(B ($BNc$($P!"(B
- "<code>Listen [fe80::1]:8080</code>")$B!#(B</dd>
-
- <dt>$B%U%#%k%?(B</dt>
-
- <dd>Apache $B$N%b%8%e!<%k$O%5!<%P$+$iAw$i$l$F$-$?$j!"%5!<%P$X(B
- $BAw$k%9%H%j!<%`$KBP$7$FF0:n$9$k%U%#%k%?$H$7$F=q$/$3$H$,$G$-$k$h$&$K(B
- $B$J$j$^$7$?!#$3$l$K$h$j!"Nc$($P(B CGI $B%9%/%j%W%H$N=PNO$r(B
- <module>mod_include</module> $B$N(B <code>INCLUDES</code> $B%U%#%k%?$r;H$C$F(B
- Server Side Include $B$N%G%#%l%/%F%#%V$r2r@O$9$k!"(B
- $B$H$$$&$h$&$J$3$H$,2DG=$K$J$j$^$7$?!#(B<module>mod_ext_filter</module>
- $B$G30It%W%m%0%i%`$r%U%#%k%?$H$7$FF0:n$5$;$k$3$H$,$G$-$^$9!#(B
- $B$3$l$O(B CGI $B%W%m%0%i%`$r%O%s%I%i$H$7$FF0:n$5$;$k$N$H(B
- $B$h$/;w$?J}K!$G$G$-$^$9!#(B</dd>
-
- <dt>$BB?8@8l%(%i!<1~Ez(B</dt>
-
- <dd>$B%V%i%&%6$X$N%(%i!<1~Ez$N%a%C%;!<%8$,!"(BSSI $B$NJ8=q$r;H$C$F(B
- $BJ#?t$N8@8l$GDs6!$5$l$k$h$&$K$J$j$^$7$?!#8+$?$a$N0l4S@-$rJ]$D$?$a$K(B
- $B4IM}<T$,%+%9%?%^%$%:$9$k$3$H$b$G$-$^$9!#(B</dd>
-
- <dt>$B@_Dj$N4JAG2=(B</dt>
-
- <dd>$BB?$/$N:.Mp$r>7$-$,$A$J%G%#%l%/%F%#%V$,4JAG2=$5$l$^$7$?!#(B
- $B$h$/:.Mp$r0z$-5/$3$7$F$$$?(B <code>Port</code> $B%G%#%l%/%F%#%V$H(B
- <code>Bind</code> $B%G%#%l%/%F%#%V$O(B
- $B$J$/$J$j$^$7$?!#(B<directive module="mpm_common">Listen</directive>
- $B%G%#%l%/%F%#%V$N$_$,(B IP $B%"%I%l%9$N%P%$%s%I$K;H$o$l$^$9!#(B
- <directive module="core">ServerName</directive> $B%G%#%l%/%F%#%V$G$O(B
- $B%j%@%$%l%/%H$H(B vhost $B$NG'<1$N$?$a$@$1$K%5!<%P$NL>A0$H%]!<%HHV9f$r(B
- $B;XDj$7$^$9!#(B</dd>
-
- <dt>Windows NT $B$N%M%$%F%#%t(B Unicode $B%5%]!<%H(B</dt>
-
- <dd>Windows NT $B>e$N(B Apache 2.0 $B$O%U%!%$%kL>$NJ8;z%(%s%3!<%IA4$F$K(B
- utf-8 $B$r;H$&$h$&$K$J$j$^$7$?!#$3$l$i$O(B Unicode $B%U%!%$%k%7%9%F%`$K(B
- $BD>@\JQ49$5$l$k$N$G!"(BWindows 2000 $B$H(B Windows XP $B$r4^$`!"A4$F$N(B
- Windows NT $B7O$GB?8@8l%5%]!<%H$,Ds6!$5$l$^$9!#(B
- <em>$B$3$N%5%]!<%H$O!"%U%!%$%k%7%9%F%`$N%"%/%;%9;~$K%m!<%+%k$N(B
- $B%3!<%I%Z!<%8$r;H$&(B Windows 95, 98, ME $B$K$OE,MQ$5$l$^$;$s!#(B</em></dd>
-
- <dt>$B@55,I=8=%i%$%V%i%j$N%"%C%W%G!<%H(B</dt>
-
- <dd>Apache 2.0 $B$O(B <a href="http://www.pcre.org/">Perl
- $B8_49@55,I=8=%i%$%V%i%j(B (PCRE) </a>$B$r4^$s$G$$$^$9!#(B
- $B@55,I=8=$NI>2A$K$O!"$h$j6/NO$K$J$C$?(B Perl 5
- $B9=J8$r;HMQ$7$^$9!#(B</dd>
-
- </dl>
- </section>
-
- <section id="module">
- <title>$B%b%8%e!<%k$N3HD%(B</title>
-
- <dl>
- <dt><module>mod_ssl</module></dt>
-
- <dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N%b%8%e!<%k$O(B OpenSSL $B$,(B
- $BDs6!$9$k(B SSL/TLS $B0E9f%W%m%H%3%k$X$N%$%s%?%U%'!<%9$G$9!#(B</dd>
-
- <dt><module>mod_dav</module></dt>
-
- <dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N%b%8%e!<%k$O%&%'%V%3%s%F%s%D$r(B
- $BAw$j!"0];}$9$k$?$a$N5,3J(B
- HTTP Distributed Authoring and Versioning (DAV) $B$r<BAu$7$F$$$^$9!#(B</dd>
-
- <dt><module>mod_deflate</module></dt>
-
- <dd>Apache 2.0 $B$N?7%b%8%e!<%k!#Aw?.A0$KAw?.FbMF$r05=L$7$F(B
- $B%M%C%H%o!<%/BS0h$r@aLs$9$k!"$H$$$&%j%/%(%9%H$r%V%i%&%6$,(B
- $BMW5a$G$-$k$h$&$K$7$^$9!#(B</dd>
-
- <dt><module>mod_auth_ldap</module></dt>
-
- <dd>Apache 2.0.41 $B$N?7%b%8%e!<%k!#(BHTTP $B4pK\G'>Z$N>ZL@=q$rJ]B8$9$k$N$K!"(B
- LDAP $B%G!<%?%Y!<%9$r;HMQ$G$-$k$h$&$K$J$j$^$9!#(B
- $B4XO"%b%8%e!<%k$N(B <module>mod_ldap</module> $B$G!"(B
- $B%3%M%/%7%g%s$N%W!<%k5!G=$H7k2L$N%-%c%C%7%e5!G=$,Ds6!$5$l$^$9!#(B</dd>
-
- <dt><module>mod_auth_digest</module></dt>
-
- <dd>$B$3$N%b%8%e!<%k$O6&M-%a%b%j$r;H$&$3$H$K$h$j!"%W%m%;%9$r$^$?$$$@(B
- $B%;%C%7%g%s$N%-%c%C%7%e$r%5%]!<%H$9$k$h$&$K$J$j$^$7$?!#(B</dd>
-
- <dt><module>mod_charset_lite</module></dt>
-
- <dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N<B83E*$J%b%8%e!<%k$O(B
- $B%-%c%i%/%?%;%C%H$NJQ49$d:FId9f2=$r2DG=$K$7$^$9!#(B</dd>
-
- <dt><module>mod_file_cache</module></dt>
-
- <dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N%b%8%e!<%k$K$O!"(B
- Apache 1.3 $B$K$*$1$k(B <code>mod_mmap_static</code> $B5!G=$,4^$^$l!"(B
- $B$^$?!"DI2C$N%-%c%C%7%e5!G=$,2C$o$C$F$$$^$9!#(B</dd>
-
- <dt><module>mod_headers</module></dt>
-
- <dd>$B$3$N%b%8%e!<%k$O(B Apache 2.0 $B$GHs>o$K=@Fp@-$,(B
- $B9b$/$J$j$^$7$?!#(B<module>mod_proxy</module>
- $B$G;H$o$l$k%j%/%(%9%H$N%X%C%@$rJQ99$G$-$k$h$&$K$J$j$^$7$?$7!"(B
- $B1~Ez%X%C%@$r>r7o$K1~$8$F@_Dj$G$-$k$h$&$K$J$j$^$7$?!#(B</dd>
-
- <dt><module>mod_proxy</module></dt>
-
- <dd>proxy $B%b%8%e!<%k$O?7$7$$%U%#%k%?$N5!9=$rMxMQ$9$k$?$a$H!"(B
- $B$h$j?.Mj$G$-$k!"(BHTTP/1.1 $B$K=`5r$7$?(B proxy $B$r<BAu$9$k$?$a$K(B
- $B40A4$K=q$-D>$5$l$^$7$?!#$5$i$K!"?7$7$$(B
- <directive module="mod_proxy" type="section">Proxy</directive>
- $B@_Dj%;%/%7%g%s$,(Bproxy $B$5$l$k%5%$%H$N$h$jFI$_$d$9$/(B ($BFbItE*$K$b$h$jB.$$(B)
- $B@_Dj$rDs6!$7$^$9!#%*!<%P!<%m!<%I$5$l$?(B
- <code>&lt;Directory "proxy:... &gt;</code>
- $B@_Dj$O%5%]!<%H$5$l$F$$$^$;$s!#$3$N%b%8%e!<%k$O(B <code>proxy_connect</code>,
- <code>proxy_ftp</code>, <code>proxy_http</code>
- $B$H$$$C$?!"FCDj$N%W%m%H%3%k$r%5%]!<%H$9$k(B
- $B%b%8%e!<%k$KJ,3d$5$l$k$h$&$K$J$j$^$7$?!#(B</dd>
-
- <dt><module>mod_negotiation</module></dt>
-
- <dd>$B%/%i%$%"%s%H$,(B NOT ACCEPTABLE $B$d(B MULTIPLE CHOICES $B1~Ez$N(B
- $BBe$o$j$K>o$KC1FH$NJ8=q$r<u$1$H$k$h$&$K$9$k$?$a$K!"?7$7$$%G%#%l%/%F%#%V(B
- <directive module="mod_negotiation">ForceLanguagePriority</directive>
- $B$r;H$&$3$H$,$G$-$k$h$&$K$J$j$^$7$?!#(B
- $B$5$i$K!"$h$j0l4S@-$N$"$k7k2L$rDs6!$9$k$?$a$K(B
- $B%M%4%7%(!<%7%g%s$H(B MultiViews $B$N%"%k%4%j%:%`$,2~A1$5$l!"(B
- $BJ8=q$NFbMF$r4^$a$k$3$H$N$G$-$k!"?7$7$$7A<0$N%?%$%W%^%C%W$,(B
- $BDs6!$5$l$k$h$&$K$J$j$^$7$?!#(B</dd>
-
- <dt><module>mod_autoindex</module></dt>
-
- <dd>Autoindex $B$5$l$k%G%#%l%/%H%j$NFbMF0lMw$,!"(B
- $B$-$l$$$KI=<($5$l$k$?$a$K(B HTML $B$N%F!<%V%k$r;H$&$h$&$K(B
- $B@_Dj$G$-$k$h$&$K$J$j$^$7$?!#$^$?!"%P!<%8%g%s$K$h$k%=!<%F%#%s%0$J$I!"(B
- $B$h$j:Y$+$$%=!<%F%#%s%0$N@)8f$,$G$-$k$h$&$K$J$j!"%G%#%l%/%H%j(B
- $B$NFbMF0lMw$r%o%$%k%I%+!<%I$K$h$jA*JL$9$k$3$H$,$G$-$k$h$&$K$b$J$j$^$7$?!#(B</dd>
-
- <dt><module>mod_include</module></dt>
-
- <dd>$B?7$7$$%G%#%l%/%F%#%V$K$h$j!"(BSSI $B$N%G%U%)%k%H$N3+;O%?%0$H=*N;%?%0$r(B
- $BJQ99$G$-$k$h$&$K$J$j$^$7$?!#$^$?!"%(%i!<$H;~9o$N7A<0$N@_Dj$,(B SSI $B$N(B
- $BJ8=qCf$G$O$J$/!"<g@_Dj%U%!%$%kCf$G9T$J$($k$h$&$K$J$j$^$7$?!#(B
- $B@55,I=8=$N2r@O$H%0%k!<%W2=$N7k2L(B (Perl $B$N@55,I=8=$N9=J8$K(B
- $B4p$E$$$?$b$N$K$J$j$^$7$?(B) $B$r(B <module>mod_include</module>
- $B$NJQ?t(B $0 .. $9 $B$K$h$j<hF@$G$-$k$h$&$K$J$j$^$7$?!#(B</dd>
-
- <dt><module>mod_auth_dbm</module></dt>
-
- <dd><directive module="mod_auth_dbm">AuthDBMType</directive>
- $B%G%#%l%/%F%#%V$K$h$j!"J#?t$N(B DBM $B7?$N%G!<%?%Y!<%9$r%5%]!<%H$9$k(B
- $B$h$&$K$J$j$^$7$?!#(B</dd>
-
- </dl>
- </section>
-</manualpage>
diff --git a/docs/manual/new_features_2_0.xml.ko b/docs/manual/new_features_2_0.xml.ko
deleted file mode 100644
index 1d19a77186..0000000000
--- a/docs/manual/new_features_2_0.xml.ko
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="new_features_2_0.xml.meta">
-
-<title>Apache 2.0ÀÇ »õ·Î¿î ±â´É °³¿ä</title>
-
-<summary>
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 1.3 ¹öÀü°ú 2.0¹öÀü°£ÀÇ ÁÖµÈ Â÷ÀÌÁ¡À»
- ¼³¸íÇÑ´Ù.</p>
-</summary>
-
-<seealso><a href="upgrading.html">1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å</a></seealso>
-
- <section id="core">
- <title>ÇÙ½É ºÎºÐ¿¡¼­ ³ª¾ÆÁø Á¡</title>
-
- <dl>
- <dt>À¯´Ð½º ¾²·¹µå</dt>
-
- <dd>POSIX ¾²·¹µå¸¦ Áö¿øÇÏ´Â À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦
- ¿©·¯ ÇÁ·Î¼¼½º¿Í ¿©·¯ ¾²·¹µå·Î È¥ÇÕÇؼ­ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- ÀüºÎ´Â ¾Æ´ÏÁö¸¸ ¸¹Àº °æ¿ì È®Àå°¡´É¼º(scalability)À» ³ôÀδÙ.</dd>
-
- <dt>»õ·Î¿î ÄÄÆÄÀÏ ½Ã½ºÅÛ</dt>
-
- <dd>ÄÄÆÄÀÏ ½Ã½ºÅÛÀÌ <code>autoconf</code>¿Í <code>libtool</code>À»
- »ç¿ëÇϵµ·Ï ÀçÀÛ¼ºµÇ¾ú´Ù. ±×·¡¼­ ¾ÆÆÄÄ¡ ±¸¼º ½Ã½ºÅÛÀÌ ´Ù¸¥
- ÆÐÅ°Áöµé°ú Á»´õ ºñ½ÁÇØÁ³´Ù.</dd>
-
- <dt>¿©·¯ ÇÁ·ÎÅäÄÝ Áö¿ø</dt>
-
- <dd>ÀÌÁ¦ ¾ÆÆÄÄ¡´Â ¿©·¯ ÇÁ·ÎÅäÄÝÀ» ¼­ºñ½ºÇÒ ¼ö ÀÖ´Â ±¸Á¶¸¦
- °®Ãè´Ù. <module>mod_echo</module>°¡ ±× ¿¹·Î ÀÛ¼ºµÇ¾ú´Ù.</dd>
-
- <dt>ºñÀ¯´Ð½º Ç÷¡Æû¿¡ ´ëÇÑ ´õ ³ªÀº Áö¿ø</dt>
-
- <dd>Apache 2.0´Â BeOS, OS/2, À©µµ¿ìÁî¿Í °°Àº ºñÀ¯´Ð½º
- Ç÷¡Æû¿¡¼­ ´õ ºü¸£°í ¾ÈÁ¤È­µÇ¾ú´Ù. ÀÌÁ¦ ¾ÆÆÄÄ¡´Â À̵é
- Ç÷¡Æû¿¡¼­ ¹ö±×°¡ ¸¹°í ¼º´ÉÀÌ ´À·È´ø POSIX ȣȯÃþ ´ë½Å
- ÀÚü API·Î ±¸ÇöµÈ Ç÷¡Æû ƯÀ¯ÀÇ <a href="mpm.html">´ÙÁßó¸® ¸ðµâ</a>
- (MPM)°ú Apache Portable Runtime (APR)À» »ç¿ëÇÏ¿© ±¸ÇöµÈ´Ù.</dd>
-
- <dt>»õ·Î¿î ¾ÆÆÄÄ¡ API</dt>
-
- <dd>¸ðµâ API°¡ 2.0¿¡¼­ »ó´çÈ÷ º¯Çß´Ù. 1.3ÀÇ ¿©·¯ ¸ðµâ
- ¼ø¼­¿Í ¿ì¼±¼øÀ§ ¹®Á¦°¡ »ç¶óÁ³´Ù. 2.0Àº À̸¦ ´ëºÎºÐ ÀÚµ¿À¸·Î
- ó¸®Çϸç, ¸ðµâ ¼ø¼­´Â ÀÌÁ¦ ´õ À¯¿¬ÇÑ ÈÅ(hook) ´ÜÀ§·Î ÁöÁ¤ÇÑ´Ù.
- ¶Ç, ¾ÆÆÄÄ¡ ¼­¹ö ÇÙ½É ºÎºÐÀ» ¼öÁ¤ÇÏÁö ¾Ê°í »õ·Î¿î ¸ðµâ ±â´ÉÀ»
- Á¦°øÇÏ´Â ÇÔ¼ö°¡ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt>IPv6 Áö¿ø</dt>
-
- <dd>ÇÏÀ§ Apache Portable Runtine ¶óÀ̺귯¸®°¡ IPv6¸¦ Áö¿øÇÏ´Â
- ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡´Â ±âº»ÀûÀ¸·Î IPv6 ¼ÒÄÏÀ» ±â´Ù¸°´Ù. ¶Ç,
- <directive module="mpm_common">Listen</directive>,
- <directive module="core">NameVirtualHost</directive>,
- <directive module="core">VirtualHost</directive> Áö½Ã¾î°¡
- IPv6 ¼ýÀÚ ÁÖ¼Ò¸¦ Áö¿øÇÑ´Ù. (¿¹,
- "<code>Listen [fe80::1]:8080</code>").</dd>
-
- <dt>ÇÊÅ͸µ</dt>
-
- <dd>ÀÌÁ¦ ¾ÆÆÄÄ¡ ¸ðµâÀ» ¼­¹ö·Î ¿À°í°¡´Â È帧¿¡ ´ëÇÑ
- ÇÊÅÍ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î <module>mod_include</module>ÀÇ
- <code>INCLUDES</code> ÇÊÅ͸¦ »ç¿ëÇÏ¿© CGI ½ºÅ©¸³Æ® Ãâ·Â¿¡¼­
- Server Side Include Áö½Ã¾î¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù.
- <module>mod_ext_filter</module> ¸ðµâÀº CGI ÇÁ·Î±×·¥À»
- Çڵ鷯·Î »ç¿ëÇÏ´Â °Í°ú °°ÀÌ ¿ÜºÎ ÇÁ·Î±×·¥À» ÇÊÅÍ·Î
- »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.</dd>
-
- <dt>´Ù±¹¾î ¿À·ù ÀÀ´ä</dt>
-
- <dd>ºê¶ó¿ìÀú·Î º¸³»´Â ¿À·ù ÀÀ´ä¹®ÀÌ ÀÌÁ¦ SSI ¹®¼­¸¦
- »ç¿ëÇÏ¿© ´Ù±¹¾î·Î Á¦°øµÈ´Ù. °ü¸®ÀÚ´Â ÅëÀÏµÈ ¿Ü°üÀ» À§ÇØ
- ÀÌ ¹®¼­¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dt>°£´ÜÇØÁø ¼³Á¤</dt>
-
- <dd>È¥¶õÀ» ÁÖ´ø ¸¹Àº Áö½Ã¾îµéÀÌ °£´ÜÇØÁ³´Ù. ÀÚÁÖ È¥¶õÀ»
- ÁÖ´ø <code>Port</code>¿Í <code>BindAddress</code> Áö½Ã¾î´Â
- ¾ø¾îÁö°í IP ÁÖ¼Ò ¿¬°á¿¡
- <directive module="mpm_common">Listen</directive> Áö½Ã¾î¸¸À»
- »ç¿ëÇÑ´Ù. <directive module="core">ServerName</directive>
- Áö½Ã¾î´Â ¸®´ÙÀÌ·º¼Ç°ú °¡»óÈ£½ºÆ® ÀνĿ¡¸¸ »ç¿ëµÉ ¼­¹ö¸í°ú
- Æ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt>Windows NT À¯´ÏÄÚµå ÀÚü Áö¿ø</dt>
-
- <dd>Windows NT¿¡¼­ Apache 2.0Àº ÀÌÁ¦ ¸ðµç ÆÄÀϸí ÀÎÄÚµù¿¡
- utf-8À» »ç¿ëÇÑ´Ù. ÆÄÀϸíÀº ÇÏÀ§ À¯´ÏÄÚµå ÆÄÀϽýºÅÛÀ¸·Î Á÷Á¢
- º¯¿ªµÇ¾î, Windows 2000°ú Windows XP¸¦ Æ÷ÇÔÇÑ ¸ðµç Windows NT±â¹Ý
- ½Ã½ºÅÛ¿¡ ´Ù±¹¾î Áö¿øÀ» Á¦°øÇÑ´Ù. <em>ÀÌ ±â´ÉÀº Windows 95,
- 98, ME¿¡´Â Áö¿øµÇÁö¾Ê°í, ÆÄÀϽýºÅÛ Á¢±Ù¿¡ Àü°ú °°ÀÌ ½Ã½ºÅÛÀÇ
- Áö¿ª ÄÚµåÆäÀÌÁö¸¦ »ç¿ëÇÑ´Ù.</em></dd>
-
- <dt>Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸® Updated</dt>
-
- <dd>Apache 2.0Àº <a href="http://www.pcre.org/">Perlȣȯ
- Á¤±ÔÇ¥Çö½Ä ¶óÀ̺귯¸® (Perl Compatible Regular Expression
- Library)</a> (PCRE)¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌÁ¦ ¸ðµç Á¤±ÔÇ¥Çö½Ä¿¡
- ´õ °­·ÂÇÑ Perl 5 ¹®¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
-
- </dl>
- </section>
-
- <section id="module">
- <title>¸ðµâ¿¡¼­ ³ª¾ÆÁø Á¡</title>
-
- <dl>
- <dt><module>mod_ssl</module></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº OpenSSLÀÌ
- Á¦°øÇÏ´Â SSL/TLS ¾Ïȣȭ ÇÁ·ÎÅäÄÝÀÇ ÀÎÅ×ÆäÀ̽º´Ù.</dd>
-
- <dt><module>mod_dav</module></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº À¥ÄÁÅÙÃ÷¸¦
- ¿Ã¸®°í °ü¸®ÇϱâÀ§ÇÑ HTTP Distributed Authoring and Versioning
- (DAV) Ç¥ÁØÀ» ±¸ÇöÇÑ´Ù.</dd>
-
- <dt><module>mod_deflate</module></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ³×Æ®¿÷ »ç¿ë·®À»
- ÁÙÀ̱âÀ§ÇØ ºê¶ó¿ìÀú¿¡°Ô ÄÁÅÙÃ÷¸¦ ¾ÐÃàÇؼ­ º¸³»¶ó°í ¿äûÇÒ
- ¼ö ÀÖ´Ù.</dd>
-
- <dt><module>mod_auth_ldap</module></dt>
-
- <dd>Apache 2.0.41¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº HTTP
- Basic Authentication¿¡ »ç¿ëÇÏ´Â Á¤º¸¸¦ LDAP µ¥ÀÌÅͺ£À̽º¿¡
- ÀúÀåÇÑ´Ù. °ü·ÃµÈ <module>mod_ldap</module> ¸ðµâÀº
- ¿¬°áÇ®(connection pool)À» Á¦°øÇÏ°í, °á°ú¸¦ ij½ÌÇÑ´Ù.</dd>
-
- <dt><module>mod_auth_digest</module></dt>
-
- <dd>°øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º°£ ¼¼¼Ç ij½ÌÀ» Áö¿øÇÑ´Ù.</dd>
-
- <dt><module>mod_charset_lite</module></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ½ÇÇèÀûÀÎ ¸ðµâÀº
- ¹®ÀÚÁýÇÕ º¯È¯°ú ¹®ÀÚÁýÇÕ ÀçÀÛ¼º ±â´ÉÀ» Á¦°øÇÑ´Ù.</dd>
-
- <dt><module>mod_file_cache</module></dt>
-
- <dd>Apache 2.0¿¡¼­ »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ ¸ðµâÀº Apache 1.3ÀÇ
- <code>mod_mmap_static</code> ±â´É¿¡ ´õ ³ªÀº ij½¬ ±â´ÉÀ»
- Ãß°¡Çß´Ù.</dd>
-
- <dt><module>mod_headers</module></dt>
-
- <dd>ÀÌ ¸ðµâÀº Apache 2.0¿¡¼­ ´õ À¯¿¬ÇØÁ³´Ù. ÀÌÁ¦
- <module>mod_proxy</module>°¡ »ç¿ëÇÏ´Â ¿äû Çì´õ¸¦ ¼öÁ¤ÇÒ
- ¼ö ÀÖ°í, °æ¿ì¿¡ µû¶ó¼­ ÀÀ´ä Çì´õ¸¦ ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù.</dd>
-
- <dt><module>mod_proxy</module></dt>
-
- <dd>ÀÌ ÇÁ·Ï½Ã ¸ðµâÀº »õ·Î¿î ÇÊÅÍ ±¸Á¶¸¦ ÀÌ¿ëÇÏ°í ´õ ¹ÏÀ»¸¸ÇÑ
- HTTP/1.1 ÇÁ·Ï½Ã¸¦ ±¸ÇöÇϱâÀ§ÇØ ¿ÏÀüÈ÷ ÀçÀÛ¼ºµÇ¾ú´Ù. Ãß°¡·Î
- »õ·Î¿î <directive module="mod_proxy" type="section">Proxy</directive>
- ¼³Á¤ ¼½¼ÇÀº ÇÁ·Ï½Ã ¼³Á¤À» ´õ ½±°Ô (±×¸®°í ³»ºÎÀûÀ¸·Î ´õ
- ºü¸£°Ô) ¸¸µç´Ù. °ú°Å <code>&lt;Directory "proxy:..."&gt;</code>
- ¼³Á¤Àº ÀÌÁ¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ¸ðµâÀº <code>proxy_connect</code>,
- <code>proxy_ftp</code>, <code>proxy_http</code>¿Í °°ÀÌ
- Áö¿øÇÏ´Â ÇÁ·ÎÅäÄÝ º°·Î ³ª´²Á³´Ù.</dd>
-
- <dt><module>mod_negotiation</module></dt>
-
- <dd>»õ·Î¿î <directive
- module="mod_negotiation">ForceLanguagePriority</directive>
- Áö½Ã¾î´Â Ŭ¶óÀ̾ðÆ®°¡ NOT ACCEPTABLEÀ̳ª MULTIPLE CHOICES
- ÀÀ´ä ´ë½Å ¸ðµç °æ¿ì ÇÑ ¹®¼­¸¦ ¹ÞÀ½À» º¸ÀåÇÑ´Ù. Ãß°¡·Î
- Çù»ó ¾Ë°í¸®Áò°ú MultiViews ¾Ë°í¸®ÁòÀÌ ´õ ÀÏ°üµÈ °á°ú¸¦
- ³»µµ·Ï ¼öÁ¤µÇ¾ú°í, ¹®¼­ ³»¿ëÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Â »õ·Î¿î Çü½ÄÀÇ
- type mapÀÌ Ãß°¡µÇ¾ú´Ù.</dd>
-
- <dt><module>mod_autoindex</module></dt>
-
- <dd>ÀÚµ¿À¸·Î »ý¼ºµÈ µð·ºÅ丮 ¸ñ·ÏÀÌ ÀÌÁ¦ ´õ ±ò²ûÇÑ Çü½ÄÀ»
- À§ÇØ HTML Ç¥¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú°í, ¹öÀü Á¤·ÄÀ» Æ÷ÇÔÇÏ¿©
- Á¤·Ä¼ø¼­¸¦ ÀÚ¼¼È÷ Á¶ÀýÇÒ ¼ö ÀÖÀ¸¸ç, µð·ºÅ丮 ¸ñ·ÏÀ» ¿ÍÀϵåÄ«µå·Î
- °É·¯³¾ ¼ö ÀÖ´Ù.</dd>
-
- <dt><module>mod_include</module></dt>
-
- <dd>»õ·Î¿î Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© SSI ¿ä¼ÒÀÇ ±âº» ½ÃÀÛ Å±׿Í
- ¸¶Ä§ ű׸¦ º¯°æÇÒ ¼ö ÀÖ°í, ¿À·ù¿Í ½Ã°£Çü½ÄÀ» SSI ¹®¼­¿Ü¿¡
- ÁÖ ¼³Á¤ÆÄÀÏ¿¡¼­µµ ¼³Á¤ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. mod_include¿¡¼­ (ÀÌÁ¦
- Perl Á¤±ÔÇ¥Çö½Ä ¹®¹ýÀ¸·Î) Á¤±ÔÇ¥Çö½Ä ÆĽ̰ú ±×·ìÀÇ
- °á°ú¸¦ <module>mod_include</module>ÀÇ <code>$0</code>
- ... <code>$9</code> º¯¼ö·Î ¾òÀ» ¼ö ÀÖ´Ù.</dd>
-
- <dt><module>mod_auth_dbm</module></dt>
-
- <dd>ÀÌÁ¦ <directive module="mod_auth_dbm">AuthDBMType</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¿©·¯ DBM·ù µ¥ÀÌÅͺ£À̽º¸¦ Áö¿øÇÑ´Ù.</dd>
-
- </dl>
- </section>
-</manualpage>
diff --git a/docs/manual/new_features_2_0.xml.meta b/docs/manual/new_features_2_0.xml.meta
deleted file mode 100644
index f73c2227e9..0000000000
--- a/docs/manual/new_features_2_0.xml.meta
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>new_features_2_0</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>fr</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- <variant outdated="yes">ru</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/new_features_2_0.xml.ru b/docs/manual/new_features_2_0.xml.ru
deleted file mode 100644
index 0b235894c3..0000000000
--- a/docs/manual/new_features_2_0.xml.ru
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version='1.0' encoding='KOI8-R' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ru.xsl"?>
-<!-- English Revision: 1.3 (outdated: 1.10) -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!--***************************************************-->
-<!-- Translator: Ilia Soldis (rkai@tversu.ru) -->
-<!-- Reviewers: -->
-<!-- Ivan Shvedov (ivan@tversu.ru) -->
-<!-- Arthur Reznikov (art@altair.tversu.ru)-->
-<!--***************************************************-->
-
-<manualpage metafile="new_features_2_0.xml.meta">
-
-<title>ïÂÚÏÒ ÎÏ×ÙÈ ×ÏÚÍÏÖÎÏÓÔÅÊ × Apache 2.0</title>
-
-<summary>
- <p>üÔÏÔ ÄÏËÕÍÅÎÔ ÏÐÉÓÙ×ÁÅÔ ÏÓÎÏ×ÎÙÅ ÒÁÚÌÉÞÉÑ ÍÅÖÄÕ ×ÅÒÓÉÑÍÉ 1.3 É 2.0 HTTP ÓÅÒ×ÅÒÁ Apache</p>
-</summary>
-
-<seealso><a href="upgrading.html">ðÅÒÅÈÏÄ ÏÔ ×ÅÒÓÉÉ 1.3 Ë ×ÅÒÓÉÉ 2.0</a></seealso>
-
- <section id="core">
- <title>õÌÕÞÛÅÎÉÑ × ÑÄÒÅ ÓÅÒ×ÅÒÁ</title>
-
- <dl>
- <dt>íÎÏÇÏÐÏÔÏÞÎÏÓÔØ × UNIX</dt>
-
- <dd>îÁ UNIX ÓÉÓÔÅÍÁÈ, ËÏÔÏÒÙÅ ÐÏÄÄÅÒÖÉ×ÁÀÔ ÐÏÔÏËÉ (ÎÉÔÉ) ÓÔÁÎÄÁÒÔÁ POSIX,
- Apache ÔÅÐÅÒØ ÍÏÖÅÔ ×ÙÐÏÌÎÑÔØÓÑ × ÇÉÂÒÉÄÎÏÍ ÍÎÏÇÏÐÒÏÃÅÓÓÏ×Ï -
- ÍÎÏÇÏÐÏÔÏÞÎÏÍ ÒÅÖÉÍÅ. üÔÏ ÓÐÏÓÏÂÓÔ×ÕÅÔ ÒÁÓÛÉÒÑÅÍÏÓÔÉ
- ÓÉÓÔÅÍÙ ÄÌÑ ÍÎÏÇÉÈ, ÎÏ ÎÅ ÄÌÑ ×ÓÅÈ ÓÐÏÓÏÂÏ× ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ.</dd>
-
- <dt>îÏ×ÁÑ ÓÉÓÔÅÍÁ ÓÂÏÒËÉ</dt>
-
- <dd>óÉÓÔÅÍÁ ÓÂÏÒËÉ ÂÙÌÁ ÐÏÌÎÏÓÔØÀ ÉÚÍÅÎÅÎÁ, É ÔÅÐÅÒØ ÏÓÎÏ×Ù×ÁÅÔÓÑ ÎÁ autoconf É libtool.
- üÔÏ ÄÅÌÁÅÔ ÐÒÏÃÅÓÓ ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ Apache ÂÏÌÅÅ ÐÏÈÏÖÉÍ ÎÁ ÐÏÄÏÂÎÙÊ ÐÒÏÃÅÓÓ × ÄÒÕÇÉÈ ÐÒÏÇÒÁÍÍÎÙÈ
- ÐÒÏÄÕËÔÁÈ.</dd>
-
- <dt>ðÏÄÄÅÒÖËÁ ÒÁÚÌÉÞÎÙÈ ÐÒÏÔÏËÏÌÏ×</dt>
-
- <dd>Apache ÔÅÐÅÒØ ÉÍÅÅÔ ÓÐÅÃÉÁÌØÎÕÀ ÉÎÆÒÁÓÔÒÕËÔÕÒÕ,
- ÓÐÏÓÏÂÎÕÀ ÏÂÓÌÕÖÉ×ÁÔØ ÒÁÚÌÉÞÎÙÅ ÐÒÏÔÏËÏÌÙ.
- íÏÄÕÌØ <module>mod_echo</module> ÂÙÌ ÎÁÐÉÓÁÎ × ËÁÞÅÓÔ×Å
- ÐÒÉÍÅÒÁ ÜÔÏÍÕ.</dd>
-
- <dt>õÌÕÞÛÅÎÎÁÑ ÐÏÄÄÅÒÖËÁ ÏÔÌÉÞÎÙÈ ÏÔ UNIX
- ÐÌÁÔÆÏÒÍ</dt>
-
- <dd>Apache 2.0 ÓÔÁÌ ÒÁÂÏÔÁÔØ ÂÙÓÔÒÅÅ É ÎÁÄÅÖÎÅÅ
- ÎÁ ÏÔÌÉÞÎÙÈ ÏÔ UNIX ÐÌÁÔÆÏÒÍÁÈ, ÔÁËÉÈ ËÁË: BeOS,
- OS/2 É Windows. ó ××ÅÄÅÎÉÅÍ ÎÏ×ÙÈ ÓÐÅÃÉÆÉÞÎÙÈ
- ÄÌÑ ËÁÖÄÏÊ ÐÌÁÔÆÏÒÍÙ<a
- href="mpm.html"> ÍÕÌØÔÉ-ÐÒÏÃÅÓÓÎÙÈ ÍÏÄÕÌÅÊ</a> (MPMs) É
- ÂÉÂÌÉÏÔÅËÉ Apache Portable Runtime (APR), ÜÔÉ ÐÌÁÔÆÏÒÍÙ
- ÔÅÐÅÒØ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ Ó ÐÏÍÏÝØÀ ÉÈ ÓÏÂÓÔ×ÅÎÎÙÈ API, ÞÔÏ
- ÐÏÚ×ÏÌÑÅÔÓÑ ÉÚÂÅÖÁÔØ ××ÅÄÅÎÉÑ ÚÁÞÁÓÔÕÀ ÎÅÐÒÁ×ÉÌØÎÏ ÒÁÂÏÔÁÀÝÉÈ
- ÉÚ-ÚÁ ÂÏÌØÛÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏË POSIX - ÜÍÕÌÉÒÕÀÝÉÈ ÓÌÏÅ×.</dd>
-
- <dt>îÏ×ÙÊ API ÄÌÑ Apache</dt>
-
- <dd>API ÄÌÑ ÎÁÐÉÓÁÎÉÑ ÍÏÄÕÌÅÊ ÚÎÁÞÉÔÅÌØÎÏ ÉÚÍÅÎÉÌÓÑ × ×ÅÒÓÉÉ 2.0
- íÎÏÇÉÅ ÉÚ ÐÒÏÂÌÅÍ ×ÅÒÓÉÉ 1.3, Ó×ÑÚÁÎÎÙÅ Ó ÐÏÒÑÄËÏÍ ÓÌÅÄÏ×ÁÎÉÑ
- ÍÏÄÕÌÅÊ É ÉÈ ÐÒÉÏÒÉÔÅÔÁÍÉ, ÄÏÌÖÎÙ ÉÓÞÅÚÎÕÔØ. ÷ ×ÅÒÓÉÉ 2.0
- ÍÎÏÇÉÅ ÉÚ ÐÏÄÏÂÎÙÈ ×ÅÝÅÊ ÄÅÌÁÀÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ, É ÔÅÐÅÒØ
- ÐÏÒÑÄÏË ÓÌÅÄÏ×ÁÎÉÑ ÍÏÄÕÌÅÊ ÏÐÒÅÄÅÌÑÅÔÓÑ ÐÏÓÒÅÄÓÔ×ÏÍ ÓÐÅÃÉÁÌØÎÙÈ
- ÐÒÏÇÒÁÍÍÎÙÈ ËÒÀÞËÏ× (hooks), ÏÔÞÅÇÏ ÎÁÓÔÒÏÊËÁ ÓÅÒ×ÅÒÁ ÓÔÁÎÏ×ÉÔÓÑ
- ÂÏÌÅÅ ÇÉÂËÏÊ. ôÁËÖÅ ÂÙÌÉ ÄÏÂÁ×ÌÅÎÙ ÎÏ×ÙÅ ÆÕÎËÃÉÉ, ËÏÔÏÒÙÅ
- ÐÒÅÄÏÓÔÁ×ÌÑÀÔ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÍÏÄÕÌÅÊ,
- ÉÚÂÁ×ÌÑÑ ÏÔ ÎÅÏÂÈÏÄÉÍÏÓÔÉ ×ÎÅÓÅÎÉÑ ËÁËÉÈ - ÌÉÂÏ ÉÚÍÅÎÅÎÉÊ × ÑÄÒÏ
- ÓÅÒ×ÅÒÁ.</dd>
-
- <dt>ðÏÄÄÅÒÖËÁ ÐÒÏÔÏËÏÌÁ IPv6</dt>
-
- <dd>îÁ ÓÉÓÔÅÍÁÈ, ÇÄÅ ÐÒÏÔÏËÏÌ IPv6 ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ
- ÂÁÚÏ×ÏÊ ÂÉÂÌÉÏÔÅËÏÊ Apache Portable Runtime, Apache
- ÐÏ ÕÍÏÌÞÁÎÉÀ ÐÏÌÕÞÁÅÔ ×ÏÚÍÏÖÎÏÓÔØ ÓÌÕÛÁÔØ IPv6 ÓÏËÅÔÙ
- (sockets). ÷ ÄÏÂÁ×ÏË Ë ÜÔÏÍÕ ÄÉÒÅËÔÉ×Ù <directive
- module="mpm_common">Listen</directive>, <directive module="core"
- >NameVirtualHost</directive> É <directive module="core"
- >VirtualHost</directive> ÍÏÇÕÔ ÒÁÂÏÔÁÔØ Ó ÁÄÒÅÓÎÙÍÉ ÓÔÒÏËÁÍÉ,
- ÚÁÄÁÎÎÙÍÉ × ÆÏÒÍÁÔÅ IPv6 (Ô.Å. ÎÁÐÒÉÍÅÒ "Listen [fe80::1]:8080").</dd>
-
- <dt>éÓÐÏÌØÚÏ×ÁÎÉÅ ÆÉÌØÔÒÏ×</dt>
-
- <dd>íÏÄÕÌÉ Apache ÔÅÐÅÒØ ÍÏÇÕÔ ÂÙÔØ ÎÁÐÉÓÁÎÙ ËÁË ÆÉÌØÔÒÙ,
- ÏÂÒÁÂÁÔÙ×ÁÀÝÉÅ ÐÏÔÏËÉ ÄÁÎÎÙÈ, ËÏÔÏÒÙÅ ÐÒÉÈÏÄÑÔ ÉÌÉ ÕÈÏÄÑÔ
- ÉÚ ÓÅÒ×ÅÒÁ. üÔÏ ÐÏÚ×ÏÌÑÅÔ, Ë ÐÒÉÍÅÒÕ, ÄÁÎÎÙÍ, Ñ×ÌÑÀÝÉÍÓÑ
- ÒÅÚÕÌØÔÁÔÏÍ ÒÁÂÏÔÙ CGI-ÓËÒÉÐÔÁ, ÂÙÔØ ÏÂÒÁÂÏÔÁÎÎÙÍÉ SSI
- ÆÉÌØÔÒÏÍ INCLUDES, ÐÒÅÄÏÓÔÁ×ÌÑÅÍÙÍ ÍÏÄÕÌÅÍ
- <module>mod_include</module>. íÏÄÕÌØ <module>mod_ext_filter</module>
- ÐÏÚ×ÏÌÑÅÔ ×ÎÅÛÎÉÍ ÐÒÏÇÒÁÍÍÁÍ ÉÓÐÏÌÎÑÔØ ÒÏÌØ ÆÉÌØÔÒÏ× ÔÏÞÎÏ ÔÁË ÖÅ
- ËÁË É CGI ÐÒÏÇÒÁÍÍÁÍ ÐÏÚ×ÏÌÑÅÔÓÑ ÄÅÊÓÔ×Ï×ÁÔØ × ËÁÞÅÓÔ×Å
- ÏÂÒÁÂÏÔÞÉËÏ× (handlers).</dd>
-
- <dt>óÏÏÂÝÅÎÉÑ ÏÂ ÏÛÉÂËÁÈ ÎÁ ÒÁÚÎÙÈ ÑÚÙËÁÈ</dt>
-
- <dd>óÏÏÂÝÅÎÉÑ ÏÂ ÏÛÉÂËÁÈ, ÐÏÓÙÌÁÅÍÙÅ ÂÒÁÕÚÅÒÕ, ÔÅÐÅÒØ
- ÐÒÅÄÓÔÁ×ÌÅÎÙ ÎÁ ÎÅÓËÏÌØËÉÈ ÑÚÙËÁÈ É ÉÓÐÏÌØÚÕÀÔ SSI
- ÔÅÈÎÏÌÏÇÉÀ. ïÎÉ ÍÏÇÕÔ ÂÙÔØ ÌÅÇËÏ ÏÔÒÅÄÁËÔÉÒÏ×ÁÎÙ
- ÁÄÍÉÎÉÓÔÒÁÔÏÒÏÍ ÐÏÄ Ó×ÏÉ ÎÕÖÄÙ.</dd>
-
- <dt>õÐÒÏÝÅÎÎÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ</dt>
-
- <dd>íÎÏÇÉÅ ÚÁÐÕÔÁÎÎÙÅ ÄÉÒÅËÔÉ×Ù ÂÙÌÉ ÕÐÒÏÝÅÎÙ. îÁÉÂÏÌÅÅ
- ÓÂÉ×ÁÀÝÉÅ Ó ÔÏÌËÕ Port É BindAddress ÂÙÌÉ ÕÂÒÁÎÙ;
- ÄÌÑ ÐÒÉ×ÑÚËÉ Ë IP ÁÄÒÅÓÕ ÉÓÐÏÌØÚÕÅÔÓÑ ÔÏÌØËÏ ÄÉÒÅËÔÉ×Á
- <directive module="mpm_common">Listen</directive>; ÄÉÒÅËÔÉ×Á
- <directive module="core">ServerName</directive> ÏÐÒÅÄÅÌÑÅÔ ÉÍÑ ÓÅÒ×ÅÒÁ É ÎÏÍÅÒ ÐÏÒÔÁ
- ÔÅÐÅÒØ ÔÏÌØËÏ ÄÌÑ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÊ É ÒÁÂÏÔÙ Ó ×ÉÒÔÕÁÌØÎÙÍÉ ÈÏÓÔÁÍÉ.</dd>
-
- <dt>ðÏÄÄÅÒÖËÁ ÀÎÉËÏÄÁ Windows NT</dt>
-
- <dd>Apache 2.0 ÎÁ Windows NT ÔÅÐÅÒØ ÉÓÐÏÌØÚÕÅÔ ËÏÄÉÒÏ×ËÕ utf-8
- ÄÌÑ ÒÁÂÏÔÙ Ó ÉÍÅÎÁÍÉ ÆÁÊÌÏ×. üÔÏ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ
- ÎÉÖÅÌÅÖÁÝÕÀ ÆÁÊÌÏ×ÕÀ ÓÉÓÔÅÍÕ, ÒÁÂÏÔÁÀÝÕÀ × ÆÏÒÍÁÔÅ Unicode,
- ÞÔÏ ÐÒÅÄÏÓÔÁ×ÌÑÅÔ ÐÏÄÄÅÒÖËÕ ÓÅÒ×ÅÒÏÍ ÍÎÏÇÏÑÚÙÞÎÏÓÔÉ ÄÌÑ ×ÓÅÈ NT-
- ÓÉÓÔÅÍ, ×ËÌÀÞÁÑ Windows 2000 É Windows XP.
- <em>üÔÏ ÎÅ ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ ÎÁ ÔÁËÉÅ ÏÐÅÒÁÃÉÏÎÎÙÅ ÓÉÓÔÅÍÙ, ËÁË
- Windows 95, 98 ÉÌÉ ME, ËÏÔÏÒÙÅ ÄÌÑ ÏÂÒÁÝÅÎÉÑ Ë ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÅ
- ÉÓÐÏÌØÚÕÀÔ ÌÏËÁÌØÎÙÅ ÍÁÛÉÎÎÙÅ ËÏÄÏ×ÙÅ ÓÔÒÁÎÉÃÙ.</em></dd>
-
- <dt>îÏ×ÁÑ ÂÉÂÌÉÏÔÅËÁ ÄÌÑ ÒÁÂÏÔÙ Ó ÒÅÇÕÌÑÒÎÙÍÉ ×ÙÒÁÖÅÎÑÍÉ</dt>
-
- <dd>÷ ÓÏÓÔÁ× Apache 2.0 ÂÙÌÁ ×ËÌÀÞÅÎÁ <a href="http://www.pcre.org/">
- ÂÉÂÌÉÏÔÅËÁ ÄÌÑ ÒÁÂÏÔÙ Ó Perl-ÓÏ×ÍÅÓÔÉÍÙÍÉ ÒÅÇÕÌÑÒÎÙÍÉ ×ÙÒÁÖÅÎÑÍÉ</a> (PCRE).
- ÷ÓÅ ÒÅÇÕÌÑÒÎÙÅ ×ÙÒÁÖÅÎÉÑ ÔÅÐÅÒØ ÉÓÐÏÌØÚÕÀÔ ÂÏÌÅÅ ÍÏÝÎÙÊ ÓÉÎÔÁËÓÉÓ Perl 5.</dd>
-
- </dl>
- </section>
-
- <section id="module">
- <title>õÌÕÞÛÅÎÉÑ × ÍÏÄÕÌÑÈ ÓÅÒ×ÅÒÁ</title>
-
- <dl>
- <dt><module>mod_ssl</module></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ Ñ×ÌÑÅÔÓÑ ÉÎÔÅÒÆÅÊÓÏÍ
- Ë ÐÒÏÔÏËÏÌÁÍ ÛÉÆÒÏ×ÁÎÉÑ SSL/TLS, ÐÒÅÄÏÓÔÁ×ÌÑÅÍÙÍÉ OpenSSL.</dd>
-
- <dt><module>mod_dav</module></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ ×ÎÅÄÒÑÅÔ ÓÐÅÃÉÆÉËÁÃÉÀ
- Distributed Authoring and Versioning (DAV), ÐÏÚ×ÏÌÑÀÝÕÀ ÕÐÒÁ×ÌÑÔØ
- ÓÏÄÅÒÖÉÍÙÍ ÓÁÊÔÁ ÐÏÓÒÅÄÓÔ×ÏÍ ÒÁÓÛÉÒÅÎÎÏÇÏ ÐÒÏÔÏËÏÌÁ HTTP.</dd>
-
- <dt><module>mod_deflate</module></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ ÐÏÚ×ÏÌÑÅÔ ÂÒÁÕÚÅÒÁÍ, ÐÏÄÄÅÒÖÉ×ÁÀÝÉÍ
- ÄÁÎÎÕÀ ÔÅÈÎÏÌÏÇÉÀ, ÚÁÐÒÁÛÉ×ÁÔØ ÄÁÎÎÙÅ × ÓÖÁÔÏÍ ×ÉÄÅ, ÞÔÏ ÓÏËÒÁÝÁÅÔ ÎÁÇÒÕÚËÕ ÎÁ
- ÓÅÔØ.</dd>
-
- <dt><module>mod_auth_ldap</module></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0.41. üÔÏÔ ÍÏÄÕÌØ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÂÁÚÕ ÄÁÎÎÙÈ LDAP
- ÄÌÑ ÈÒÁÎÅÎÉÑ ÉÍÅÎ É ÐÁÒÏÌÅÊ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ÎÅÏÂÈÏÄÉÍÙÈ ÐÒÉ ÁÕÔÅÎÔÉÆÉËÁÃÉÉ ÐÏ ÍÅÔÏÄÕ
- Basic. óÏÐÕÔÓÔ×ÕÀÝÉÊ ÅÍÕ ÍÏÄÕÌØ <module>mod_ldap</module> ÏÂÅÓÐÅÞÉ×ÁÅÔ ×ÏÚÍÏÖÎÏÓÔØ
- ÓÏÚÄÁÎÉÑ ÏÞÅÒÅÄÅÊ ÐÏÄËÌÀÞÅÎÉÊ (connection pools) É ËÜÛÉÒÏ×ÁÎÉÑ ÒÅÚÕÌØÔÁÔÏ×.</dd>
-
- <dt><module>mod_auth_digest</module></dt>
-
- <dd>÷ËÌÀÞÁÅÔ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ ÐÏÄÄÅÒÖËÕ ËÜÛÉÒÏ×ÁÎÉÑ ÓÅÓÓÉÊ
- ÐÒÏÃÅÓÓÁÍÉ, ÂÌÁÇÏÄÁÒÑ ÉÓÐÏÌØÚÏ×ÁÎÉÀ ÏÂÝÅÊ ÏÂÌÁÓÔÉ ÐÁÍÑÔÉ (ÒÁÚÄÅÌÅÎÉÀ
- ÐÁÍÑÔÉ).</dd>
-
- <dt><module>mod_charset_lite</module></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ ÍÏÄÕÌØ ÐÏÚ×ÏÌÑÅÔ
- ÏÓÕÝÅÓÔ×ÌÑÔØ ÐÅÒÅ×ÏÄ ÉÚ ÏÄÎÏÇÏ ÎÁÂÏÒÁ ÓÉÍ×ÏÌÏ× (character set) × ÄÒÕÇÏÊ É ÉÚ ÏÄÎÏÊ
- ËÏÄÉÒÏ×ËÉ × ÄÒÕÇÕÀ.</dd>
-
- <dt><module>mod_file_cache</module></dt>
-
- <dd>îÏ×ÙÊ ÍÏÄÕÌØ × Apache 2.0. üÔÏÔ ÍÏÄÕÌØ ×ËÌÀÞÁÅÔ × ÓÅÂÑ
- ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ ÍÏÄÕÌÑ mod_mmap_static ÉÚ Apache 1.3
- ÐÌÀÓ ÎÏ×ÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ËÜÛÉÒÏ×ÁÎÉÑ.</dd>
-
- <dt><module>mod_headers</module></dt>
-
- <dd>üÔÏÔ ÍÏÄÕÌØ ÓÔÁÌ ÂÏÌÅÅ ÇÉÂËÉÍ × Apache 2.0. ïÎ ÐÏÚ×ÏÌÑÅÔ
- ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ ÚÁÇÏÌÏ×ËÉ ÚÁÐÒÏÓÏ×, ÉÓÐÏÌØÚÕÅÍÙÈ ÍÏÄÕÌÅÍ
- <module>mod_proxy</module>, É ÍÏÖÅÔ ×ËÌÀÞÁÔØ × ÏÔ×ÅÔ ÓÅÒ×ÅÒÁ ÚÁÇÏÌÏ×ËÉ ×
- ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÒÁÚÌÉÞÎÙÈ ÕÓÌÏ×ÉÊ.</dd>
-
- <dt><module>mod_proxy</module></dt>
-
- <dd>ðÒÏËÓÉ ÍÏÄÕÌØ ÂÙÌ ÐÏÌÎÏÓÔØÀ ÐÅÒÅÐÉÓÁÎ, É ÔÅÐÅÒØ ×ËÌÀÞÁÅÔ
- × ÓÅÂÑ ÐÒÅÉÍÕÝÅÓÔ×Á ÎÏ×ÏÊ ÆÉÌØÔÒÏ×ÏÊ ÉÎÆÒÁÓÔÒÕËÔÕÒÙ É ÉÓÐÏÌØÚÕÅÔ
- ÂÏÌÅÅ ÎÁÄÅÖÎÕÀ, ÓÏ×ÍÅÓÔÉÍÕÀ Ó HTTP/1.1 ÐÒÏËÓÉ-ÔÅÈÎÏÌÏÇÉÀ. ÷ ÄÏÂÁ×ÏË
- Ë ÜÔÏÍÕ ÂÙÌÁ ××ÅÄÅÎÁ ÎÏ×ÁÑ ÓÅËÃÉÑ <directive module="mod_proxy" type="section"
- >Proxy</directive>, ËÏÔÏÒÕÀ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÈ ÆÁÊÌÁÈ, ÞÔÏ
- ÏÂÅÓÐÅÞÉ×ÁÅÔ ÂÏÌÅÅ ÕÄÏÂÎÙÊ (É ÂÏÌÅÅ ÂÙÓÔÒÙÊ ÄÌÑ ÑÄÒÁ ÓÅÒ×ÅÒÁ) ËÏÎÔÒÏÌØ ÎÁÄ ÓÁÊÔÁÍÉ,
- ÉÓÐÏÌØÚÕÀÝÉÍÉ proxy-ÔÅÈÎÏÌÏÇÉÀ. ðÅÒÅÇÒÕÖÅÎÎÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ &lt;Directory "proxy:..."&gt;
- ÂÏÌÅÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ. íÏÄÕÌØ ÔÅÐÅÒØ ÒÁÚÄÅÌÅÎ ÎÁ ÏÔÄÅÌØÎÙÅ ÓÐÅÃÉÆÉÞÎÙÅ ÍÏÄÕÌÉ,
- ÐÏÄÄÅÒÖÉ×ÁÀÝÉÅ ÒÁÚÌÉÞÎÙÅ ÐÒÏÔÏËÏÌÙ. üÔÉ ÍÏÄÕÌÉ ×ËÌÀÞÁÀÔ × ÓÅÂÑ proxy_connect, proxy_ftp
- É proxy_http.</dd>
-
- <dt><module>mod_negotiation</module></dt>
-
- <dd>äÏÂÁ×ÌÅÎÁ ÎÏ×ÁÑ ÄÉÒÅËÔÉ×Á <directive module="mod_negotiation"
- >ForceLanguagePriority</directive>, ÄÌÑ ÔÏÇÏ ÞÔÏÂÙ ×ÍÅÓÔÏ ÏÔ×ÅÔÏ× ÓÅÒ×ÅÒÁ
- NOT ACCEPTABLE ÉÌÉ MULTIPLE CHOICES ×ÓÅÇÄÁ ÐÒÅÄÏÓÔÁ×ÌÑÔØ ÐÏÌØÚÏ×ÁÔÅÌÀ
- ÏÐÒÅÄÅÌÅÎÎÙÊ ÄÏËÕÍÅÎÔ. ÷ ÄÏÐÏÌÎÅÎÉÅ Ë ÜÔÏÍÕ ÁÌÇÏÒÉÔÍÙ
- ÎÅÇÏÃÉÁÃÉÉ (negotiation) É MultiViews ÂÙÌÉ ×ÙÞÉÝÅÎÙ É ÉÓÐÒÁ×ÌÅÎÙ, ÄÌÑ
- ÏÂÅÓÐÅÞÅÎÉÑ ÂÏÌÅÅ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÇÏ ÒÅÚÕÌØÔÁÔÁ, Á ÔÁËÖÅ ÐÏÑ×ÉÌÁÓØ ×ÏÚÍÏÖÎÏÓÔØ
- ×ËÌÀÞÅÎÉÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏÇÏ ÓÏÄÅÒÖÉÍÏÇÏ ÄÏËÕÍÅÎÔÏ× × ËÁÒÔÕ ÔÉÐÏ× (type map).</dd>
-
- <dt><module>mod_autoindex</module></dt>
-
- <dd>ìÉÓÔÉÎÇÉ Á×ÔÏÉÎÄÅËÓÉÒÕÅÍÙÈ ËÁÔÁÌÏÇÏ× ÔÅÐÅÒØ ÍÏÇÕÔ ×ÙÄÁ×ÁÔØÓÑ × ×ÉÄÅ
- HTML-ÔÁÂÌÉÃ. ðÏÑ×ÉÌÁÓØ ×ÏÚÍÏÖÎÏÓÔØ ÂÏÌÅÅ ÇÉÂËÏÊ ÓÏÒÔÉÒÏ×ËÉ, ×ËÌÀÞÁÑ ÓÏÒÔÉÒÏ×ËÕ ÐÏ ×ÅÒÓÉÑÍ É
- ÓÏÒÔÉÒÏ×ËÕ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÕÎÉ×ÅÒÓÁÌØÎÙÈ ÓÉÍ×ÏÌÏ× (wildcard).</dd>
-
- <dt><module>mod_include</module></dt>
-
- <dd>÷×ÅÄÅÎÙ ÎÏ×ÙÅ ÄÉÒÅËÔÉ×Ù, ËÏÔÏÒÙÅ ÐÏÚ×ÏÌÑÀÔ ÉÚÍÅÎÉÔØ ÎÁÞÁÌØÎÙÊ É ËÏÎÅÞÎÙÊ
- ÔÅÇÉ SSI ÜÌÅÍÅÎÔÏ×, ÚÁÄÁ×ÁÅÍÙÅ ÐÏ ÕÍÏÌÞÁÎÉÀ, Á ÔÁËÖÅ ÐÒÅÄÏÓÔÁ×ÌÑÀÔ ×ÏÚÍÏÖÎÏÓÔØ
- ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ ÆÏÒÍÁÔÁ ÓÏÏÂÝÅÎÉÊ Ï ÏÛÉÂËÁÈ É ×ÒÅÍÅÎÉ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ
- × ÇÌÁ×ÎÏÍ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÍ ÆÁÊÌÅ, Á ÎÅ × SSI ÄÏËÕÍÅÎÔÅ. òÅÚÕÌØÔÁÔÙ
- ÏÂÒÁÂÏÔËÉ ÒÅÇÕÌÑÒÎÙÈ ×ÙÒÁÖÅÎÉÊ (ÔÅÐÅÒØ ÏÓÎÏ×Ù×ÁÀÝÉÈÓÑ ÎÁ ÓÉÎÔÁËÓÉÓÅ
- ÒÅÇÕÌÑÒÎÙÈ ×ÙÒÁÖÅÎÉÊ ÑÚÙËÁ Perl) ÍÏÇÕÔ ÂÙÔØ ÐÏÌÕÞÅÎÙ ÐÒÉ ÐÏÍÏÝÉ ÐÅÒÅÍÅÎÎÙÈ
- $0 .. $9 ÍÏÄÕÌÑ mod_include.</dd>
-
- <dt><module>mod_auth_dbm</module></dt>
-
- <dd>ôÅÐÅÒØ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÍÎÏÇÏÞÉÓÌÅÎÎÙÅ ÔÉÐÙ DBM-ÐÏÄÏÂÎÙÈ ÂÁÚ ÄÁÎÎÙÈ ÐÏÓÒÅÄÓÔ×ÏÍ
- ÄÉÒÅËÔÉ×Ù <directive module="mod_auth_dbm">AuthDBMType</directive>.</dd>
-
- </dl>
- </section>
-</manualpage>
diff --git a/docs/manual/platform/.cvsignore b/docs/manual/platform/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/platform/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/platform/ebcdic.html b/docs/manual/platform/ebcdic.html
deleted file mode 100644
index f9b208e49c..0000000000
--- a/docs/manual/platform/ebcdic.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: ebcdic.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: ebcdic.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/platform/ebcdic.html.en b/docs/manual/platform/ebcdic.html.en
deleted file mode 100644
index 4fa7380e05..0000000000
--- a/docs/manual/platform/ebcdic.html.en
+++ /dev/null
@@ -1,584 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>The Apache EBCDIC Port - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>The Apache EBCDIC Port</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/platform/ebcdic.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/ebcdic.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <div class="warning"><strong>Warning:</strong> This document
- has not been updated to take into account changes made in
- the 2.0 version of the Apache HTTP Server. Some of the
- information may still be relevant, but please use it with care.
- </div>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#overview">Overview of the Apache EBCDIC Port</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#design">Design Goals</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#technical">Technical Solution</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#porting">Porting Notes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#document">Document Storage Notes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#modules">Apache Modules' Status</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#third-party">Third Party Modules' Status</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Overview of the Apache EBCDIC Port</a></h2>
-
-
-
- <p>Version 1.3 of the Apache HTTP Server is the first version
- which includes a port to a (non-ASCII) mainframe machine which
- uses the EBCDIC character set as its native codeset.</p>
-
- <p>(It is the SIEMENS family of mainframes running the <a href="http://www.siemens.de/servers/bs2osd/osdbc_us.htm">BS2000/OSD
- operating system</a>. This mainframe OS nowadays features a
- SVR4-derived POSIX subsystem).</p>
-
- <p>The port was started initially to</p>
-
- <ul>
- <li>prove the feasibility of porting <a href="http://dev.apache.org/">the Apache HTTP server</a> to
- this platform</li>
-
- <li>find a "worthy and capable" successor for the venerable
- <a href="http://www.w3.org/Daemon/">CERN-3.0</a> daemon
- (which was ported a couple of years ago), and to</li>
-
- <li>prove that Apache's preforking process model can on this
- platform easily outperform the accept-fork-serve model used
- by CERN by a factor of 5 or more.</li>
- </ul>
-
- <p>This document serves as a rationale to describe some of the
- design decisions of the port to this machine.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="design" id="design">Design Goals</a></h2>
-
-
-
- <p>One objective of the EBCDIC port was to maintain enough
- backwards compatibility with the (EBCDIC) CERN server to make
- the transition to the new server attractive and easy. This
- required the addition of a configurable method to define
- whether a HTML document was stored in ASCII (the only format
- accepted by the old server) or in EBCDIC (the native document
- format in the POSIX subsystem, and therefore the only realistic
- format in which the other POSIX tools like <code>grep</code> or
- <code>sed</code> could operate on the documents). The current
- solution to this is a "pseudo-MIME-format" which is intercepted
- and interpreted by the Apache server (see below). Future versions
- might solve the problem by defining an "ebcdic-handler" for all
- documents which must be converted.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="technical" id="technical">Technical Solution</a></h2>
-
-
-
- <p>Since all Apache input and output is based upon the BUFF
- data type and its methods, the easiest solution was to add the
- conversion to the BUFF handling routines. The conversion must
- be settable at any time, so a BUFF flag was added which defines
- whether a BUFF object has currently enabled conversion or not.
- This flag is modified at several points in the HTTP
- protocol:</p>
-
- <ul>
- <li><strong>set</strong> before a request is received
- (because the request and the request header lines are always
- in ASCII format)</li>
-
- <li><strong>set/unset</strong> when the request body is
- received - depending on the content type of the request body
- (because the request body may contain ASCII text or a binary
- file)</li>
-
- <li><strong>set</strong> before a reply header is sent
- (because the response header lines are always in ASCII
- format)</li>
-
- <li><strong>set/unset</strong> when the response body is sent
- - depending on the content type of the response body (because
- the response body may contain text or a binary file)</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="porting" id="porting">Porting Notes</a></h2>
-
-
-
- <ol>
- <li>
- <p>The relevant changes in the source are <code>#ifdef</code>'ed
- into two categories:</p>
-
- <dl>
- <dt><code><strong>#ifdef
- CHARSET_EBCDIC</strong></code></dt>
-
- <dd>
- <p>Code which is needed for any EBCDIC based machine.
- This includes character translations, differences in
- contiguity of the two character sets, flags which
- indicate which part of the HTTP protocol has to be
- converted and which part doesn't <em>etc.</em></p>
- </dd>
-
- <dt><code><strong>#ifdef _OSD_POSIX</strong></code></dt>
-
- <dd>
- <p>Code which is needed for the SIEMENS BS2000/OSD
- mainframe platform only. This deals with include file
- differences and socket implementation topics which are
- only required on the BS2000/OSD platform.</p>
- </dd>
- </dl>
- </li>
-
- <li>
- <p>The possibility to translate between ASCII and EBCDIC at
- the socket level (on BS2000 POSIX, there is a socket option
- which supports this) was intentionally <em>not</em> chosen,
- because the byte stream at the HTTP protocol level consists
- of a mixture of protocol related strings and non-protocol
- related raw file data. HTTP protocol strings are always
- encoded in ASCII (the <code>GET</code> request, any Header: lines,
- the chunking information <em>etc.</em>) whereas the file transfer
- parts (<em>i.e.</em>, GIF images, CGI output <em>etc.</em>)
- should usually be just "passed through" by the server. This
- separation between "protocol string" and "raw data" is
- reflected in the server code by functions like <code>bgets()</code>
- or <code>rvputs()</code> for strings, and functions like
- <code>bwrite()</code> for binary data. A global translation
- of everything would therefore be inadequate.</p>
-
- <p>(In the case of text files of course, provisions must be
- made so that EBCDIC documents are always served in
- ASCII)</p>
- </li>
-
- <li>
- <p>This port therefore features a built-in protocol level
- conversion for the server-internal strings (which the
- compiler translated to EBCDIC strings) and thus for all
- server-generated documents. The hard coded ASCII escapes
- <code>\012</code> and <code>\015</code> which are ubiquitous
- in the server code are an exception: they are already the binary
- encoding of the ASCII <code>\n</code> and <code>\r</code> and
- must not be converted to ASCII a second time.
- This exception is only relevant for server-generated strings;
- and <em>external</em> EBCDIC documents are not expected to
- contain ASCII newline characters.</p>
- </li>
-
- <li>
- <p>By examining the call hierarchy for the BUFF management
- routines, I added an "ebcdic/ascii conversion layer" which
- would be crossed on every puts/write/get/gets, and a
- conversion flag which allowed enabling/disabling the
- conversions on-the-fly. Usually, a document crosses this
- layer twice from its origin source (a file or CGI output) to
- its destination (the requesting client): <code>file -&gt;
- Apache</code>, and <code>Apache -&gt; client</code>.</p>
-
- <p>The server can now read the header lines of a CGI-script
- output in EBCDIC format, and then find out that the remainder
- of the script's output is in ASCII (like in the case of the
- output of a WWW Counter program: the document body contains a
- GIF image). All header processing is done in the native
- EBCDIC format; the server then determines, based on the type
- of document being served, whether the document body (except
- for the chunking information, of course) is in ASCII already
- or must be converted from EBCDIC.</p>
- </li>
-
- <li>
- <p>For Text documents (MIME types text/plain, text/html
- <em>etc.</em>), an implicit translation to ASCII can be
- used, or (if the users prefer to store some documents in
- raw ASCII form for faster serving, or because the files
- reside on a NFS-mounted directory tree) can be served
- without conversion.</p>
-
- <p><strong>Example:</strong></p>
-
- <p>to serve files with the suffix <code>.ahtml</code> as a
- raw ASCII <code>text/html</code> document without implicit
- conversion (and suffix <code>.ascii</code> as ASCII
- <code>text/plain</code>), use the directives:</p>
-
- <div class="example"><p><code>
- AddType text/x-ascii-html .ahtml <br />
- AddType text/x-ascii-plain .ascii
- </code></p></div>
-
- <p>Similarly, any <code>text/foo</code> MIME type can be
- served as "raw ASCII" by configuring a MIME type
- "<code>text/x-ascii-foo</code>" for it using
- <code>AddType</code>.</p>
- </li>
-
- <li>
- <p>Non-text documents are always served "binary" without
- conversion. This seems to be the most sensible choice for,
- .<em>e.g.</em>, GIF/ZIP/AU file types. This of course
- requires the user to copy them to the mainframe host using
- the "<code>rcp -b</code>" binary switch.</p>
- </li>
-
- <li>
- <p>Server parsed files are always assumed to be in native
- (<em>i.e.</em>, EBCDIC) format as used on the machine, and
- are converted after processing.</p>
- </li>
-
- <li>
- <p>For CGI output, the CGI script determines whether a
- conversion is needed or not: by setting the appropriate
- Content-Type, text files can be converted, or GIF output can
- be passed through unmodified. An example for the latter case
- is the wwwcount program which we ported as well.</p>
- </li>
-
- </ol>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="document" id="document">Document Storage Notes</a></h2>
-
-
-
- <h3><a name="binary" id="binary">Binary Files</a></h3>
-
-
-
- <p>All files with a <code>Content-Type:</code> which does not
- start with <code>text/</code> are regarded as <em>binary
- files</em> by the server and are not subject to any conversion.
- Examples for binary files are GIF images, gzip-compressed files
- and the like.</p>
-
- <p>When exchanging binary files between the mainframe host and
- a Unix machine or Windows PC, be sure to use the ftp "binary"
- (<code>TYPE I</code>) command, or use the
- <code>rcp -b</code> command from the mainframe host (the
- <code>-b</code> switch is not supported in unix
- <code>rcp</code>'s).</p>
-
-
-
- <h3><a name="text" id="text">Text Documents</a></h3>
-
-
-
- <p>The default assumption of the server is that Text Files
- (<em>i.e.</em>, all files whose <code>Content-Type:</code>
- starts with <code>text/</code>) are stored in the native
- character set of the host, EBCDIC.</p>
-
-
-
- <h3><a name="ssi" id="ssi">Server Side Included Documents</a></h3>
-
-
-
- <p>SSI documents must currently be stored in EBCDIC only.
- No provision is made to convert it from ASCII before
- processing.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modules" id="modules">Apache Modules' Status</a></h2>
-
-
-
- <table class="bordered">
- <tr>
- <th>Module</th>
- <th>Status</th>
- <th>Notes</th>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/core.html">core</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_access.html">mod_access</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_actions.html">mod_actions</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_auth.html">mod_auth</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_auth_anon.html">mod_auth_anon</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a></code></td>
- <td class="centered">?</td>
- <td>with own <code>libdb.a</code></td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code></td>
- <td class="centered">?</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code>mod_digest</code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_so.html">mod_so</a></code></td>
- <td class="centered">-</td>
- <td>no shared libs</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_env.html">mod_env</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_example.html">mod_example</a></code></td>
- <td class="centered">-</td>
- <td>(test bed only)</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_info.html">mod_info</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code>mod_log_agent</code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code>mod_log_config</code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_log_referer.html">mod_log_referer</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code></td>
- <td class="centered">?</td>
- <td>not ported yet</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code></td>
- <td class="centered">+</td>
- <td>untested</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_speling.html">mod_speling</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_usertrack.html">mod_usertrack</a></code></td>
- <td class="centered">?</td>
- <td>untested</td>
- </tr>
- </table>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">Third Party Modules' Status</a></h2>
-
-
-
- <table class="bordered">
- <tr>
- <th>Module</th>
- <th>Status</th>
- <th>Notes</th>
- </tr>
-
- <tr>
- <td><code><a href="http://java.apache.org/">mod_jserv</a>
- </code></td>
- <td class="centered">-</td>
- <td>JAVA still being ported.</td>
- </tr>
-
- <tr>
- <td><code><a href="http://www.php.net/">mod_php3</a></code></td>
- <td class="centered">+</td>
- <td><code>mod_php3</code> runs fine, with LDAP and GD
- and FreeType libraries.</td>
- </tr>
-
- <tr>
- <td><code><a href="http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html">mod_put</a></code></td>
- <td class="centered">?</td>
- <td>untested</td>
- </tr>
-
- <tr>
- <td><code><a href="ftp://hachiman.vidya.com/pub/apache/">mod_session</a></code></td>
- <td class="centered">-</td>
- <td>untested</td>
- </tr>
- </table>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/platform/ebcdic.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/ebcdic.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/ebcdic.html.ko.euc-kr b/docs/manual/platform/ebcdic.html.ko.euc-kr
deleted file mode 100644
index 00ff0f5a4d..0000000000
--- a/docs/manual/platform/ebcdic.html.ko.euc-kr
+++ /dev/null
@@ -1,557 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ EBCDIC Æ÷Æà - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ EBCDIC Æ÷ÆÃ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/ebcdic.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/ebcdic.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <div class="warning">ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­
- º¯°æµÈ ³»¿ëÀ» ´ã°íÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸,
- ÁÖÀÇÇؼ­ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
- </div>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#overview">¾ÆÆÄÄ¡ EBCDIC Æ÷Æà °³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#design">¼³°è ¸ñÇ¥</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#technical">±â¼úÀû ÇØ°áÃ¥</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#porting">Æ÷Æÿ¡ ´ëÇؼ­</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#document">¹®¼­ ÀúÀå¿¡ ´ëÇؼ­</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#modules">¾ÆÆÄÄ¡ ¸ðµâÀÇ »óÅÂ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#third-party">Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀÇ »óÅÂ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">¾ÆÆÄÄ¡ EBCDIC Æ÷Æà °³¿ä</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â 1.3 ¹öÀü¶§ óÀ½À¸·Î EBCDIC ¹®ÀÚÁýÇÕÀ»
- ±âº» ¹®ÀÚÁýÇÕÀ¸·Î »ç¿ëÇÏ´Â (ºñ-ASCII) ¸ÞÀÎÇ÷¹ÀÓ ÄÄÇ»ÅÍ·Î
- Æ÷ÆõǾú´Ù.</p>
-
- <p>(<a href="http://www.siemens.de/servers/bs2osd/osdbc_us.htm">BS2000/OSD
- ¿î¿µÃ¼Á¦</a>¸¦ »ç¿ëÇÏ´Â SIEMENS °è¿­ ¸ÞÀÎÇ÷¹ÀÓÀ» ¸»ÇÑ´Ù.
- ÀÌ ¸ÞÀÎÇ÷¹ÀÓ ¿î¿µÃ¼Á¦¿¡´Â ÇöÀç SVR4°è¿­ÀÇ POSIX ÇÏÀ§½Ã½ºÅÛÀÌ
- ÀÖ´Ù).</p>
-
- <p>Æ÷ÆÃÀº óÀ½¿¡ ´ÙÀ½°ú °°Àº ¸ñÀû¿¡¼­ ½ÃÀ۵Ǿú´Ù</p>
-
- <ul>
- <li>ÀÌ Ç÷¹ÆûÀ¸·Îµµ <a href="http://dev.apache.org/">¾ÆÆÄÄ¡
- À¥¼­¹ö</a>¸¦ Æ÷ÆÃÇÒ ¼ö ÀÖ´Ù´Â °¡´É¼ºÀ» º¸À̱âÀ§Çؼ­</li>
-
- <li>(¸î³â Àü¿¡ Æ÷ÆõÈ) ¿À·¡µÈ <a href="http://www.w3.org/Daemon/">CERN-3.0</a> ¼­¹ö¸¦ ´ëüÇÒ
- "¾µ¸¸ÇÏ°í À¯´ÉÇÑ" ÈÄ°èÀÚ¸¦ ã±âÀ§ÇØ</li>
-
- <li>ÀÌ Ç÷¹Æû¿¡¼­ ¾ÆÆÄÄ¡ÀÇ prefork ÇÁ·Î¼¼½º ¹æ½ÄÀÌ CERNÀÇ
- accept-fork-serve ¹æ½Ä º¸´Ù 5¹è ÀÌ»ó ¼º´ÉÀÌ ÁÁÀ½À»
- º¸À̱âÀ§Çؼ­.</li>
- </ul>
-
- <p>ÀÌ ¹®¼­´Â Æ÷Æýà ¿©·¯ ¼³°è»ó °áÁ¤ÀÇ ÀÌÀ¯¸¦ ¼³¸íÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="design" id="design">¼³°è ¸ñÇ¥</a></h2>
-
-
-
- <p>EBCDIC Æ÷ÆÃÀÇ ¸ñÀûÁß Çϳª´Â »õ·Î¿î ¼­¹ö·Î ÀüȯÀ» À¯µµÇÏ°í
- ½±°Ô ÀüȯÇÒ ¼ö ÀÖµµ·Ï °¡´ÉÇÑ (EBCDIC) CERN ¼­¹ö¿Í ȣȯ¼ºÀ»
- À¯ÁöÇÏ´Â °ÍÀÌ´Ù. ±×·¡¼­ HTML ¹®¼­°¡ (ÀÌÀü CERN ¼­¹ö°¡ ÀνÄÇÏ´Â
- À¯ÀÏÇÑ Çü½ÄÀÎ) ASCII¿Í (POSIX ÇÏÀ§½Ã½ºÅÛÀÇ ±âº» ¹®¼­ Çü½Ä.
- ±×·¯¹Ç·Î <code>grep</code>À̳ª <code>sed</code> °°Àº POSIX
- µµ±¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â Çö½ÇÀûÀÎ Çü½ÄÀÎ) EBCDIC Áß ¾î´À Çü½ÄÀÎÁö
- ¼³Á¤ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÇöÀç ÇØ°áÃ¥Àº ¾ÆÆÄÄ¡ ¼­¹ö°¡ Áß°£¿¡¼­
- ¹®¼­¸¦ °¡·Îä¼­ ¹®¼­ÀÇ Çü½ÄÀ» ÆľÇÇÏ´Â "°¡»ó MIME Çü½Ä"ÀÌ´Ù
- (¾Æ·¡ Âü°í). ´ÙÀ½ ¹öÀü¿¡¼­´Â º¯È¯ÇؾßÇÒ ¸ðµç ¹®¼­¿¡
- "ebcdic-handler"¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÒ °ÍÀÌ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="technical" id="technical">±â¼úÀû ÇØ°áÃ¥</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡°¡ BUFF ÀÚ·áÇü°ú ¸Þ½áµå¸¦ »ç¿ëÇÏ¿© ¸ðµç ÀÔÃâ·ÂÀ»
- ÇϹǷΠ°¡Àå ½¬¿î ¹æ¹ýÀº BUFF ó¸® ÇÔ¼ö¿¡ º¯È¯±â´ÉÀ» Ãß°¡ÇÏ´Â
- °ÍÀÌ´Ù. ¾ðÁ¦µçÁö º¯È¯ÇÒ ¼ö ÀÖ¾î¾ß Çϱ⶧¹®¿¡ BUFF °´Ã¼¸¦
- º¯È¯ÇØ¾ß ÇÏ´ÂÁö ¾Ë·ÁÁÖ´Â BUFF Ç¥½Ã¸¦ Ãß°¡Çß´Ù. ÀÌ Ç¥½Ã´Â
- HTTP ÇÁ·ÎÅäÄÝÀÇ ¿©·¯ ´Ü°è¿¡¼­ º¯°æµÉ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>¿äûÀ» ¹Þ±â Àü¿¡ <strong>º¯È¯</strong> (¿äû°ú ¿äûÇì´õ°¡
- Ç×»ó ASCII Çü½ÄÀ̱⠶§¹®¿¡)</li>
-
- <li>¿äû ³»¿ëÀ» ¹Þ¾ÒÀ»¶§ content type¿¡ µû¶ó
- <strong>º¯È¯/º¯È¯¾ÈÇÔ</strong> (¿äû ³»¿ëÀÌ ASCII ¹®ÀÚ³ª
- ¹ÙÀ̳ʸ® ÆÄÀÏÀÎ °æ¿ì º¯È¯ÇØ¾ß Çϱ⶧¹®¿¡)</li>
-
- <li>ÀÀ´äÇì´õ¸¦ º¸³»±â Àü¿¡ <strong>º¯È¯</strong> (ÀÀ´äÇì´õ´Â
- Ç×»ó ASCII Çü½ÄÀ̱⶧¹®¿¡)</li>
-
- <li>ÀÀ´ä ³»¿ëÀ» º¸³¾¶§ content type¿¡ µû¶ó
- <strong>º¯È¯/º¯È¯¾ÈÇÔ</strong> (ÀÀ´ä ³»¿ëÀÌ ¹®ÀÚ ÆÄÀÏÀ̰ųª
- ¹ÙÀ̳ʸ® ÆÄÀÏÀ̱⶧¹®¿¡)</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="porting" id="porting">Æ÷Æÿ¡ ´ëÇؼ­</a></h2>
-
-
-
- <ol>
- <li>
- <p>¼Ò½ºÀÇ º¯È­´Â µÎ°¡Áö <code>#ifdef</code>·Î ±¸ºÐÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt><code><strong>#ifdef
- CHARSET_EBCDIC</strong></code></dt>
-
- <dd>
- <p>¸ðµç EBCDIC±â¹Ý ÄÄÇ»ÅÍ¿¡ ÇÊ¿äÇÑ ÄÚµå. ¹®ÀÚº¯È¯,
- µÎ ¹®ÀÚÁýÇÕ°£ÀÇ ¿¬¼ÓµÈ ¹®ÀÚ°ª Â÷ÀÌ, ¾î¶² HTTP ÇÁ·ÎÅäÄÝ
- ºÎºÐÀÌ º¯È¯µÇ¾ß ÇÏ´ÂÁö¸¦ ¾Ë·ÁÁִ ǥ½Ã <em>µî.</em></p>
- </dd>
-
- <dt><code><strong>#ifdef _OSD_POSIX</strong></code></dt>
-
- <dd>
- <p>SIEMENS BS2000/OSD ¸ÞÀÎÇ÷¹ÀÓ Ç÷¹Æû¿¡¸¸ ÇÊ¿äÇÑ
- ÄÚµå. BS2000/OSD Ç÷¹Æû¿¡¸¸ ÇÊ¿äÇÑ Çì´õÆÄÀÏ Â÷ÀÌ¿Í
- ¼ÒÄÏ ±¸Çö ¹®Á¦¸¦ ´Ù·é´Ù.</p>
- </dd>
- </dl>
- </li>
-
- <li>
- <p>¼ÒÄÏ ¼öÁØ¿¡¼­ ASCII¿Í EBCDIC°£ º¯È­´Â (BS2000 POSIX¿¡´Â
- ÀÌ ±â´ÉÀ» Áö¿øÇÏ´Â ¼ÒÄÏ ¿É¼ÇÀÌ ÀÖ´Ù) HTTP ÇÁ·ÎÅäÄÝ ¼öÁØ¿¡¼­
- Àü¼ÛµÇ´Â ÀÚ·á¿¡ ÇÁ·ÎÅäÄÝ°ü·Ã ¹®ÀÚ¿­°ú ÇÁ·ÎÅäÄÝ°ú ¹«°üÇÑ
- ÀϹÝÆÄÀÏÀÌ ¼¯¿©Àֱ⶧¹®¿¡ ÀǵµÀûÀ¸·Î »ç¿ëÇÏÁö
- <em>¾Ê¾Ò´Ù</em>. HTTP ÇÁ·ÎÅäÄÝ ¹®ÀÚ¿­Àº (<code>GET</code>
- ¿äû, Header: ÁÙ, ±âŸ Á¤º¸ <em>µî.</em>) Ç×»ó ASCII
- Çü½ÄÀÌ°í, ÆÄÀÏÀü¼Û ºÎºÐÀº (<em>Áï</em>, GIF ±×¸², CGI
- Ãâ·Â <em>µî.</em>) ¼­¹ö°¡ Ç×»ó "º¯È¯ÇÏÁö¾Ê°í ±×³É" º¸³»¾ß
- ÇÑ´Ù. ¼­¹ö ÄÚµå´Â "ÇÁ·ÎÅäÄÝ ¹®ÀÚ¿­"°ú "ÀÏ¹Ý ÀÚ·á"¸¦,
- ¹®ÀÚ¿­¿¡´Â <code>bgets()</code>³ª <code>rvputs()</code>,
- ¹ÙÀ̳ʸ® ÀÚ·á¿¡´Â <code>bgets()</code>³ª
- <code>rvputs()</code> ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ±¸º°ÇÑ´Ù. ±×·¯¹Ç·Î
- ¹«Á¶°Ç ¸ðµç °ÍÀ» º¯È¯ÇÏ´Â °ÍÀº ÀûÀýÇÏÁö ¾Ê´Ù.</p>
-
- <p>(¹°·Ð ¹®ÀÚÆÄÀÏÀÇ °æ¿ì EBCDIC ¹®¼­¸¦ Ç×»ó ASCII·Î
- ¼­ºñ½ºÇϵµ·Ï ÁغñÇØ¾ß ÇÑ´Ù)</p>
- </li>
-
- <li>
- <p>±×·¡¼­ Æ÷Æÿ¡´Â (ÄÄÆÄÀÏ·¯°¡ EBCDIC ¹®ÀÚ¿­·Î º¯È¯ÇÑ)
- ¼­¹ö ³»ºÎ ¹®ÀÚ¿­°ú ¼­¹ö°¡ »ý¼ºÇÑ ¹®¼­¸¦ ±âº» ÇÁ·ÎÅäÄÝ
- ¼öÁØ¿¡¼­ º¯È¯ÇÏ´Â ±â´ÉÀÌ ÀÖ´Ù. ¼­¹ö Äڵ忡 »êÀçµÈ ASCII
- escape¹®ÀÚ <code>\012</code>¿Í <code>\015</code>´Â ¿¹¿Ü´Ù:
- À̵éÀÌ ÀÌ¹Ì ASCII <code>\n</code>°ú <code>\r</code>ÀÇ
- ¹ÙÀ̳ʸ® °ªÀ̱⶧¹®¿¡ ASCII·Î µÎ¹ø º¯È¯ÇÏ¸é ¾ÈµÈ´Ù.
- ÀÌ ¿¹¿Ü´Â ¼­¹ö°¡ »ý¼ºÇÑ ¹®ÀÚ¿­¿¡¸¸ Àû¿ëµÈ´Ù; <em>¿ÜºÎ</em>
- EBCDIC ¹®¼­´Â ASCII Áٹٲ޹®ÀÚ¸¦ Æ÷ÇÔÇÏ¸é ¾ÈµÈ´Ù.</p>
- </li>
-
- <li>
- <p>BUFF °ü¸®ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆ캻 ÈÄ ³ª´Â ¸ðµç
- puts/write/get/gets°¡ °ÅÄ¡°ÔµÇ´Â "ebcdic/ascii º¯È¯
- °èÃþ"À» Ãß°¡ÇÏ°í, µ¿ÀûÀ¸·Î º¯È¯À¯¹«¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Â
- º¯È¯ Ç¥½Ã¸¦ Ãß°¡Çß´Ù. ¹®¼­°¡ ¿øº»(ÆÄÀÏÀ̳ª CGI Ãâ·Â)¿¡¼­
- ´ë»ó(¿äûÇÑ Å¬¶óÀ̾ðÆ®)À¸·Î À̵¿ÇÒ¶§ Ç×»ó ÀÌ °èÃþÀ»
- µÎ¹ø Áö³­´Ù: <code>ÆÄÀÏ -&gt; ¾ÆÆÄÄ¡</code>, <code>¾ÆÆÄÄ¡
- -&gt; Ŭ¶óÀ̾ðÆ®</code>.</p>
-
- <p>¼­¹ö´Â ÀÌÁ¦ EBCDIC Çü½ÄÀ¸·Î µÈ CGI ½ºÅ©¸³Æ® Ãâ·ÂÀÇ
- Çì´õÁÙÀ» Àаí, ³ª¸ÓÁö ½ºÅ©¸³Æ® Ãâ·ÂÀÌ ASCIIÀÓÀ» ¾Ë¾Æ³¾
- ¼ö ÀÖ´Ù (WWW ¹æ¹®ÀÚ¼ö¸¦ ¼¼´Â ÇÁ·Î±×·¥°ú °°Àº °æ¿ì: ¹®¼­
- ³»¿ëÀº GIF ±×¸²ÀÌ´Ù). ±âº» EBCDIC Çü½ÄÀ¸·Î ¸ðµç Çì´õ¸¦
- ó¸®ÇÑ´Ù; ±×·± ´ÙÀ½ ¼­ºñ½ºÇÒ ¹®¼­ÀÇ type¿¡ µû¶ó ¼­¹ö´Â
- ¹®¼­ ³»¿ëÀÌ ÀÌ¹Ì ASCIIÀÎÁö ȤÀº EBCDIC¿¡¼­ º¯È¯À» Çؾß
- ÇÏ´ÂÁö °áÁ¤ÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>(MIME typeÀÌ text/plain, text/html <em>µî</em>) ³»¿ëÀÌ
- ÀÏ¹Ý ¹®ÀÚÀÎ ¹®¼­¸¦ ¾Ï¹¬ÀûÀ¸·Î ASCII·Î º¯È¯Çϰųª, (»ç¿ëÀÚ¿¡°Ô
- ºü¸£°Ô ¼­ºñ½ºÇϱâÀ§ÇØ ¹Ì¸® ¹®¼­¸¦ ASCII Çü½ÄÀ¸·Î ÀúÀåÇÏ¿´°Å³ª
- NFS·Î ¸¶¿îÆ®ÇÑ µð·ºÅ丮¿¡ ÆÄÀÏÀÌ ÀÖ´Â °æ¿ì) º¯È¯¾øÀÌ
- ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><strong>¿¹:</strong></p>
-
- <p>À̸§ÀÌ <code>.ahtml</code>·Î ³¡³ª´Â ÆÄÀÏÀ» ¾Ï¹¬ÀûÀÎ
- º¯È¯¾øÀÌ ASCII <code>text/html</code> ¹®¼­·Î (±×¸®°í
- <code>.ascii</code> È®ÀåÀÚ´Â ASCII
- <code>text/plain</code>À¸·Î) ¼­ºñ½ºÇÏ·Á¸é ´ÙÀ½ Áö½Ã¾î¸¦
- »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- AddType text/x-ascii-html .ahtml <br />
- AddType text/x-ascii-plain .ascii
- </code></p></div>
-
- <p>¶Ç, <code>text/foo</code> ½ÄÀÇ MIME typeÀ»
- <code>AddType</code> "<code>text/x-ascii-foo</code>"
- ¼³Á¤ÇÏ¿© "ÀÏ¹Ý ASCII"·Î ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
- </li>
-
- <li>
- <p>³»¿ëÀÌ ÀÏ¹Ý ¹®ÀÚ°¡ ¾Æ´Ñ ¹®¼­´Â º¯È¯¾øÀÌ Ç×»ó "¹ÙÀ̳ʸ®"·Î
- ¼­ºñ½ºÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>, GIF/ZIP/AU ÆÄÀÏÇü½Ä¿¡
- °¡Àå ÀûÇÕÇÑ ¼±ÅÃÀÌ´Ù. ¹°·Ð »ç¿ëÀÚ´Â "<code>rcp -b</code>"
- ¹ÙÀ̳ʸ® ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ¸ÞÀÎÇ÷¹ÀÓ È£½ºÆ®·Î
- º¹»çÇß¾î¾ß ÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>¼­¹öÆÄ½Ì ÆÄÀÏÀº Ç×»ó ÄÄÇ»ÅÍ°¡ »ç¿ëÇÏ´Â ±âº» Çü½ÄÀ¸·Î
- (<em>Áï</em>, EBCDIC) ÀúÀåµÇ¾ú´Ù°í °¡Á¤ÇÏ°í, ó¸®ÈÄ¿¡
- º¯È¯ÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>CGI Ãâ·ÂÀÇ °æ¿ì CGI ½ºÅ©¸³Æ®°¡ º¯È¯ÀÌ ÇÊ¿äÇÑÁö °áÁ¤ÇÑ´Ù:
- ÀûÀýÇÑ Content-TypeÀ» ¼³Á¤ÇÏ¿©, ¹®ÀÚÆÄÀÏÀº º¯È¯ÇÏ°í,
- GIF Ãâ·ÂÀº º¯È¯¾øÀÌ º¸³¾ ¼ö ÀÖ´Ù. ¿ì¸®°¡ Æ÷ÆÃÇÑ wwwcount
- ÇÁ·Î±×·¥ÀÌ ÈÄÀÚÀÇ °æ¿ì´Ù.</p>
- </li>
-
- </ol>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="document" id="document">¹®¼­ ÀúÀå¿¡ ´ëÇؼ­</a></h2>
-
-
-
- <h3><a name="binary" id="binary">¹ÙÀ̳ʸ® ÆÄÀÏ</a></h3>
-
-
-
- <p>¼­¹ö´Â <code>Content-Type:</code>ÀÌ <code>text/</code>·Î
- ½ÃÀÛÇÏ´Â ¾Ê´Â ÆÄÀÏÀ» <em>¹ÙÀ̳ʸ® ÆÄÀÏ</em>·Î °£ÁÖÇÏ¿©
- ¾î¶² º¯È¯µµ ÇÏÁö ¾Ê´Â´Ù. ¹ÙÀ̳ʸ® ÆÄÀÏ¿¡´Â GIF ±×¸², gzipÀ¸·Î
- ¾ÐÃàÇÑ ÆÄÀÏ µîÀÌ ÀÖ´Ù.</p>
-
- <p>¸ÞÀÎÇ÷¹ÀÓ È£½ºÆ®¿Í À¯´Ð½º ȤÀº À©µµ¿ìÁî PC°£¿¡ ¹ÙÀ̳ʸ®
- ÆÄÀÏÀ» Àü¼ÛÇÒ ¶§´Â ftp "binary" (<code>TYPE I</code>) ¸í·É¾î³ª
- ¸ÞÀÎÇ÷¹ÀÓ È£½ºÆ®¿¡¼­ (À¯´Ð½º <code>rcp</code>´Â
- <code>-b</code> ¿É¼ÇÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù) <code>rcp -b</code>
- ¸í·É¾î¸¦ ¹Ýµå½Ã »ç¿ëÇ϶ó.</p>
-
-
-
- <h3><a name="text" id="text">¹®ÀÚ ¹®¼­</a></h3>
-
-
-
- <p>±âº»ÀûÀ¸·Î ¼­¹ö´Â ¹®ÀÚÆÄÀÏÀÌ (<em>Áï</em>,
- <code>Content-Type:</code>ÀÌ <code>text/</code>·Î ½ÃÀÛÇÏ´Â
- ¸ðµç ÆÄÀÏ) È£½ºÆ®ÀÇ ±âº» ¹®ÀÚÁýÇÕÀÎ EBCDICÀ¸·Î ÀúÀåµÇ¾ú´Ù°í
- °¡Á¤ÇÑ´Ù.</p>
-
-
-
- <h3><a name="ssi" id="ssi">Server Side Include ¹®¼­</a></h3>
-
-
-
- <p>SSI ¹®¼­´Â ÇöÀç EBCDIC Çü½ÄÀ¸·Î¸¸ ÀúÀåÇØ¾ß ÇÑ´Ù. ó¸®Çϱâ
- Àü¿¡ ASCII¸¦ º¯È¯ÇÏÁö ¾Ê´Â´Ù.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="modules" id="modules">¾ÆÆÄÄ¡ ¸ðµâÀÇ »óÅÂ</a></h2>
-
-
-
- <table class="bordered">
- <tr>
- <th>¸ðµâ</th>
- <th>»óÅÂ</th>
- <th>ºñ°í</th>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/core.html">core</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_access.html">mod_access</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_actions.html">mod_actions</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_auth.html">mod_auth</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_auth_anon.html">mod_auth_anon</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a></code></td>
- <td class="centered">?</td>
- <td>ÀÚü <code>libdb.a</code>¸¦ »ç¿ëÇÏ¿©</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code></td>
- <td class="centered">?</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code>mod_digest</code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_so.html">mod_so</a></code></td>
- <td class="centered">-</td>
- <td>°øÀ¯¶óÀ̺귯¸®°¡ ¾øÀ½</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_env.html">mod_env</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_example.html">mod_example</a></code></td>
- <td class="centered">-</td>
- <td>(½ÃÇè ´Ü°è)</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_info.html">mod_info</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code>mod_log_agent</code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code>mod_log_config</code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_log_referer.html">mod_log_referer</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code></td>
- <td class="centered">?</td>
- <td>¾ÆÁ÷ Æ÷ÆþȵÊ</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code></td>
- <td class="centered">+</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_speling.html">mod_speling</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></td>
- <td class="centered">+</td>
- <td />
- </tr>
-
- <tr>
- <td><code class="module"><a href="../mod/mod_usertrack.html">mod_usertrack</a></code></td>
- <td class="centered">?</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
- </table>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀÇ »óÅÂ</a></h2>
-
-
-
- <table class="bordered">
- <tr>
- <th>¸ðµâ</th>
- <th>»óÅÂ</th>
- <th>ºñ°í</th>
- </tr>
-
- <tr>
- <td><code><a href="http://java.apache.org/">mod_jserv</a>
- </code></td>
- <td class="centered">-</td>
- <td>JAVA´Â Æ÷ÆÃÁßÀÌ´Ù.</td>
- </tr>
-
- <tr>
- <td><code><a href="http://www.php.net/">mod_php3</a></code></td>
- <td class="centered">+</td>
- <td><code>mod_php3</code>´Â LDAP, GD, FreeType ¶óÀ̺귯¸®¿Í
- ÇÔ²² Àß µ¿ÀÛÇÑ´Ù.</td>
- </tr>
-
- <tr>
- <td><code><a href="http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html">mod_put</a></code></td>
- <td class="centered">?</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
-
- <tr>
- <td><code><a href="ftp://hachiman.vidya.com/pub/apache/">mod_session</a></code></td>
- <td class="centered">-</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
- </table>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/ebcdic.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/ebcdic.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/ebcdic.xml b/docs/manual/platform/ebcdic.xml
deleted file mode 100644
index 1ffd0868fe..0000000000
--- a/docs/manual/platform/ebcdic.xml
+++ /dev/null
@@ -1,578 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ebcdic.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>The Apache EBCDIC Port</title>
-
- <summary>
-
- <note type="warning"><strong>Warning:</strong> This document
- has not been updated to take into account changes made in
- the 2.0 version of the Apache HTTP Server. Some of the
- information may still be relevant, but please use it with care.
- </note>
-
- </summary>
-
- <section id="overview">
-
- <title>Overview of the Apache EBCDIC Port</title>
-
- <p>Version 1.3 of the Apache HTTP Server is the first version
- which includes a port to a (non-ASCII) mainframe machine which
- uses the EBCDIC character set as its native codeset.</p>
-
- <p>(It is the SIEMENS family of mainframes running the <a
- href="http://www.siemens.de/servers/bs2osd/osdbc_us.htm">BS2000/OSD
- operating system</a>. This mainframe OS nowadays features a
- SVR4-derived POSIX subsystem).</p>
-
- <p>The port was started initially to</p>
-
- <ul>
- <li>prove the feasibility of porting <a
- href="http://dev.apache.org/">the Apache HTTP server</a> to
- this platform</li>
-
- <li>find a "worthy and capable" successor for the venerable
- <a href="http://www.w3.org/Daemon/">CERN-3.0</a> daemon
- (which was ported a couple of years ago), and to</li>
-
- <li>prove that Apache's preforking process model can on this
- platform easily outperform the accept-fork-serve model used
- by CERN by a factor of 5 or more.</li>
- </ul>
-
- <p>This document serves as a rationale to describe some of the
- design decisions of the port to this machine.</p>
-
- </section>
-
- <section id="design">
-
- <title>Design Goals</title>
-
- <p>One objective of the EBCDIC port was to maintain enough
- backwards compatibility with the (EBCDIC) CERN server to make
- the transition to the new server attractive and easy. This
- required the addition of a configurable method to define
- whether a HTML document was stored in ASCII (the only format
- accepted by the old server) or in EBCDIC (the native document
- format in the POSIX subsystem, and therefore the only realistic
- format in which the other POSIX tools like <code>grep</code> or
- <code>sed</code> could operate on the documents). The current
- solution to this is a "pseudo-MIME-format" which is intercepted
- and interpreted by the Apache server (see below). Future versions
- might solve the problem by defining an "ebcdic-handler" for all
- documents which must be converted.</p>
-
- </section>
-
- <section id="technical">
-
- <title>Technical Solution</title>
-
- <p>Since all Apache input and output is based upon the BUFF
- data type and its methods, the easiest solution was to add the
- conversion to the BUFF handling routines. The conversion must
- be settable at any time, so a BUFF flag was added which defines
- whether a BUFF object has currently enabled conversion or not.
- This flag is modified at several points in the HTTP
- protocol:</p>
-
- <ul>
- <li><strong>set</strong> before a request is received
- (because the request and the request header lines are always
- in ASCII format)</li>
-
- <li><strong>set/unset</strong> when the request body is
- received - depending on the content type of the request body
- (because the request body may contain ASCII text or a binary
- file)</li>
-
- <li><strong>set</strong> before a reply header is sent
- (because the response header lines are always in ASCII
- format)</li>
-
- <li><strong>set/unset</strong> when the response body is sent
- - depending on the content type of the response body (because
- the response body may contain text or a binary file)</li>
- </ul>
-
- </section>
-
- <section id="porting">
-
- <title>Porting Notes</title>
-
- <ol>
- <li>
- <p>The relevant changes in the source are <code>#ifdef</code>'ed
- into two categories:</p>
-
- <dl>
- <dt><code><strong>#ifdef
- CHARSET_EBCDIC</strong></code></dt>
-
- <dd>
- <p>Code which is needed for any EBCDIC based machine.
- This includes character translations, differences in
- contiguity of the two character sets, flags which
- indicate which part of the HTTP protocol has to be
- converted and which part doesn't <em>etc.</em></p>
- </dd>
-
- <dt><code><strong>#ifdef _OSD_POSIX</strong></code></dt>
-
- <dd>
- <p>Code which is needed for the SIEMENS BS2000/OSD
- mainframe platform only. This deals with include file
- differences and socket implementation topics which are
- only required on the BS2000/OSD platform.</p>
- </dd>
- </dl>
- </li>
-
- <li>
- <p>The possibility to translate between ASCII and EBCDIC at
- the socket level (on BS2000 POSIX, there is a socket option
- which supports this) was intentionally <em>not</em> chosen,
- because the byte stream at the HTTP protocol level consists
- of a mixture of protocol related strings and non-protocol
- related raw file data. HTTP protocol strings are always
- encoded in ASCII (the <code>GET</code> request, any Header: lines,
- the chunking information <em>etc.</em>) whereas the file transfer
- parts (<em>i.e.</em>, GIF images, CGI output <em>etc.</em>)
- should usually be just "passed through" by the server. This
- separation between "protocol string" and "raw data" is
- reflected in the server code by functions like <code>bgets()</code>
- or <code>rvputs()</code> for strings, and functions like
- <code>bwrite()</code> for binary data. A global translation
- of everything would therefore be inadequate.</p>
-
- <p>(In the case of text files of course, provisions must be
- made so that EBCDIC documents are always served in
- ASCII)</p>
- </li>
-
- <li>
- <p>This port therefore features a built-in protocol level
- conversion for the server-internal strings (which the
- compiler translated to EBCDIC strings) and thus for all
- server-generated documents. The hard coded ASCII escapes
- <code>\012</code> and <code>\015</code> which are ubiquitous
- in the server code are an exception: they are already the binary
- encoding of the ASCII <code>\n</code> and <code>\r</code> and
- must not be converted to ASCII a second time.
- This exception is only relevant for server-generated strings;
- and <em>external</em> EBCDIC documents are not expected to
- contain ASCII newline characters.</p>
- </li>
-
- <li>
- <p>By examining the call hierarchy for the BUFF management
- routines, I added an "ebcdic/ascii conversion layer" which
- would be crossed on every puts/write/get/gets, and a
- conversion flag which allowed enabling/disabling the
- conversions on-the-fly. Usually, a document crosses this
- layer twice from its origin source (a file or CGI output) to
- its destination (the requesting client): <code>file -&gt;
- Apache</code>, and <code>Apache -&gt; client</code>.</p>
-
- <p>The server can now read the header lines of a CGI-script
- output in EBCDIC format, and then find out that the remainder
- of the script's output is in ASCII (like in the case of the
- output of a WWW Counter program: the document body contains a
- GIF image). All header processing is done in the native
- EBCDIC format; the server then determines, based on the type
- of document being served, whether the document body (except
- for the chunking information, of course) is in ASCII already
- or must be converted from EBCDIC.</p>
- </li>
-
- <li>
- <p>For Text documents (MIME types text/plain, text/html
- <em>etc.</em>), an implicit translation to ASCII can be
- used, or (if the users prefer to store some documents in
- raw ASCII form for faster serving, or because the files
- reside on a NFS-mounted directory tree) can be served
- without conversion.</p>
-
- <p><strong>Example:</strong></p>
-
- <p>to serve files with the suffix <code>.ahtml</code> as a
- raw ASCII <code>text/html</code> document without implicit
- conversion (and suffix <code>.ascii</code> as ASCII
- <code>text/plain</code>), use the directives:</p>
-
- <example>
- AddType text/x-ascii-html .ahtml <br />
- AddType text/x-ascii-plain .ascii
- </example>
-
- <p>Similarly, any <code>text/foo</code> MIME type can be
- served as "raw ASCII" by configuring a MIME type
- "<code>text/x-ascii-foo</code>" for it using
- <code>AddType</code>.</p>
- </li>
-
- <li>
- <p>Non-text documents are always served "binary" without
- conversion. This seems to be the most sensible choice for,
- .<em>e.g.</em>, GIF/ZIP/AU file types. This of course
- requires the user to copy them to the mainframe host using
- the "<code>rcp -b</code>" binary switch.</p>
- </li>
-
- <li>
- <p>Server parsed files are always assumed to be in native
- (<em>i.e.</em>, EBCDIC) format as used on the machine, and
- are converted after processing.</p>
- </li>
-
- <li>
- <p>For CGI output, the CGI script determines whether a
- conversion is needed or not: by setting the appropriate
- Content-Type, text files can be converted, or GIF output can
- be passed through unmodified. An example for the latter case
- is the wwwcount program which we ported as well.</p>
- </li>
-
- </ol>
-
- </section>
-
- <section id="document">
-
- <title>Document Storage Notes</title>
-
- <section id="binary">
-
- <title>Binary Files</title>
-
- <p>All files with a <code>Content-Type:</code> which does not
- start with <code>text/</code> are regarded as <em>binary
- files</em> by the server and are not subject to any conversion.
- Examples for binary files are GIF images, gzip-compressed files
- and the like.</p>
-
- <p>When exchanging binary files between the mainframe host and
- a Unix machine or Windows PC, be sure to use the ftp "binary"
- (<code>TYPE I</code>) command, or use the
- <code>rcp -b</code> command from the mainframe host (the
- <code>-b</code> switch is not supported in unix
- <code>rcp</code>'s).</p>
-
- </section>
-
- <section id="text">
-
- <title>Text Documents</title>
-
- <p>The default assumption of the server is that Text Files
- (<em>i.e.</em>, all files whose <code>Content-Type:</code>
- starts with <code>text/</code>) are stored in the native
- character set of the host, EBCDIC.</p>
-
- </section>
-
- <section id="ssi">
-
- <title>Server Side Included Documents</title>
-
- <p>SSI documents must currently be stored in EBCDIC only.
- No provision is made to convert it from ASCII before
- processing.</p>
-
- </section>
-
- </section>
-
- <section id="modules">
-
- <title>Apache Modules' Status</title>
-
- <table border="1">
- <tr>
- <th>Module</th>
- <th>Status</th>
- <th>Notes</th>
- </tr>
-
- <tr>
- <td><module>core</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_access</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_actions</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_alias</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_asis</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_auth</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_auth_anon</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_auth_dbm</module></td>
- <td class="centered">?</td>
- <td>with own <code>libdb.a</code></td>
- </tr>
-
- <tr>
- <td><module>mod_autoindex</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_cern_meta</module></td>
- <td class="centered">?</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_cgi</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><code>mod_digest</code></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_dir</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_so</module></td>
- <td class="centered">-</td>
- <td>no shared libs</td>
- </tr>
-
- <tr>
- <td><module>mod_env</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_example</module></td>
- <td class="centered">-</td>
- <td>(test bed only)</td>
- </tr>
-
- <tr>
- <td><module>mod_expires</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_headers</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_imap</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_include</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_info</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><code>mod_log_agent</code></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><code>mod_log_config</code></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_log_referer</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_mime</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_mime_magic</module></td>
- <td class="centered">?</td>
- <td>not ported yet</td>
- </tr>
-
- <tr>
- <td><module>mod_negotiation</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_proxy</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_rewrite</module></td>
- <td class="centered">+</td>
- <td>untested</td>
- </tr>
-
- <tr>
- <td><module>mod_setenvif</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_speling</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_status</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_unique_id</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_userdir</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_usertrack</module></td>
- <td class="centered">?</td>
- <td>untested</td>
- </tr>
- </table>
-
- </section>
-
- <section id="third-party">
-
- <title>Third Party Modules' Status</title>
-
- <table border="1">
- <tr>
- <th>Module</th>
- <th>Status</th>
- <th>Notes</th>
- </tr>
-
- <tr>
- <td><code><a href="http://java.apache.org/">mod_jserv</a>
- </code></td>
- <td class="centered">-</td>
- <td>JAVA still being ported.</td>
- </tr>
-
- <tr>
- <td><code><a href="http://www.php.net/">mod_php3</a></code></td>
- <td class="centered">+</td>
- <td><code>mod_php3</code> runs fine, with LDAP and GD
- and FreeType libraries.</td>
- </tr>
-
- <tr>
- <td><code><a
- href="http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html"
- >mod_put</a></code></td>
- <td class="centered">?</td>
- <td>untested</td>
- </tr>
-
- <tr>
- <td><code><a href="ftp://hachiman.vidya.com/pub/apache/"
- >mod_session</a></code></td>
- <td class="centered">-</td>
- <td>untested</td>
- </tr>
- </table>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/platform/ebcdic.xml.ko b/docs/manual/platform/ebcdic.xml.ko
deleted file mode 100644
index 7a98010f18..0000000000
--- a/docs/manual/platform/ebcdic.xml.ko
+++ /dev/null
@@ -1,551 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ebcdic.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>¾ÆÆÄÄ¡ EBCDIC Æ÷ÆÃ</title>
-
- <summary>
-
- <note type="warning">ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­
- º¯°æµÈ ³»¿ëÀ» ´ã°íÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸,
- ÁÖÀÇÇؼ­ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
- </note>
-
- </summary>
-
- <section id="overview">
-
- <title>¾ÆÆÄÄ¡ EBCDIC Æ÷Æà °³¿ä</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â 1.3 ¹öÀü¶§ óÀ½À¸·Î EBCDIC ¹®ÀÚÁýÇÕÀ»
- ±âº» ¹®ÀÚÁýÇÕÀ¸·Î »ç¿ëÇÏ´Â (ºñ-ASCII) ¸ÞÀÎÇ÷¹ÀÓ ÄÄÇ»ÅÍ·Î
- Æ÷ÆõǾú´Ù.</p>
-
- <p>(<a
- href="http://www.siemens.de/servers/bs2osd/osdbc_us.htm">BS2000/OSD
- ¿î¿µÃ¼Á¦</a>¸¦ »ç¿ëÇÏ´Â SIEMENS °è¿­ ¸ÞÀÎÇ÷¹ÀÓÀ» ¸»ÇÑ´Ù.
- ÀÌ ¸ÞÀÎÇ÷¹ÀÓ ¿î¿µÃ¼Á¦¿¡´Â ÇöÀç SVR4°è¿­ÀÇ POSIX ÇÏÀ§½Ã½ºÅÛÀÌ
- ÀÖ´Ù).</p>
-
- <p>Æ÷ÆÃÀº óÀ½¿¡ ´ÙÀ½°ú °°Àº ¸ñÀû¿¡¼­ ½ÃÀ۵Ǿú´Ù</p>
-
- <ul>
- <li>ÀÌ Ç÷¹ÆûÀ¸·Îµµ <a href="http://dev.apache.org/">¾ÆÆÄÄ¡
- À¥¼­¹ö</a>¸¦ Æ÷ÆÃÇÒ ¼ö ÀÖ´Ù´Â °¡´É¼ºÀ» º¸À̱âÀ§Çؼ­</li>
-
- <li>(¸î³â Àü¿¡ Æ÷ÆõÈ) ¿À·¡µÈ <a
- href="http://www.w3.org/Daemon/">CERN-3.0</a> ¼­¹ö¸¦ ´ëüÇÒ
- "¾µ¸¸ÇÏ°í À¯´ÉÇÑ" ÈÄ°èÀÚ¸¦ ã±âÀ§ÇØ</li>
-
- <li>ÀÌ Ç÷¹Æû¿¡¼­ ¾ÆÆÄÄ¡ÀÇ prefork ÇÁ·Î¼¼½º ¹æ½ÄÀÌ CERNÀÇ
- accept-fork-serve ¹æ½Ä º¸´Ù 5¹è ÀÌ»ó ¼º´ÉÀÌ ÁÁÀ½À»
- º¸À̱âÀ§Çؼ­.</li>
- </ul>
-
- <p>ÀÌ ¹®¼­´Â Æ÷Æýà ¿©·¯ ¼³°è»ó °áÁ¤ÀÇ ÀÌÀ¯¸¦ ¼³¸íÇÑ´Ù.</p>
-
- </section>
-
- <section id="design">
-
- <title>¼³°è ¸ñÇ¥</title>
-
- <p>EBCDIC Æ÷ÆÃÀÇ ¸ñÀûÁß Çϳª´Â »õ·Î¿î ¼­¹ö·Î ÀüȯÀ» À¯µµÇÏ°í
- ½±°Ô ÀüȯÇÒ ¼ö ÀÖµµ·Ï °¡´ÉÇÑ (EBCDIC) CERN ¼­¹ö¿Í ȣȯ¼ºÀ»
- À¯ÁöÇÏ´Â °ÍÀÌ´Ù. ±×·¡¼­ HTML ¹®¼­°¡ (ÀÌÀü CERN ¼­¹ö°¡ ÀνÄÇÏ´Â
- À¯ÀÏÇÑ Çü½ÄÀÎ) ASCII¿Í (POSIX ÇÏÀ§½Ã½ºÅÛÀÇ ±âº» ¹®¼­ Çü½Ä.
- ±×·¯¹Ç·Î <code>grep</code>À̳ª <code>sed</code> °°Àº POSIX
- µµ±¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â Çö½ÇÀûÀÎ Çü½ÄÀÎ) EBCDIC Áß ¾î´À Çü½ÄÀÎÁö
- ¼³Á¤ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÇöÀç ÇØ°áÃ¥Àº ¾ÆÆÄÄ¡ ¼­¹ö°¡ Áß°£¿¡¼­
- ¹®¼­¸¦ °¡·Îä¼­ ¹®¼­ÀÇ Çü½ÄÀ» ÆľÇÇÏ´Â "°¡»ó MIME Çü½Ä"ÀÌ´Ù
- (¾Æ·¡ Âü°í). ´ÙÀ½ ¹öÀü¿¡¼­´Â º¯È¯ÇؾßÇÒ ¸ðµç ¹®¼­¿¡
- "ebcdic-handler"¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÒ °ÍÀÌ´Ù.</p>
-
- </section>
-
- <section id="technical">
-
- <title>±â¼úÀû ÇØ°áÃ¥</title>
-
- <p>¾ÆÆÄÄ¡°¡ BUFF ÀÚ·áÇü°ú ¸Þ½áµå¸¦ »ç¿ëÇÏ¿© ¸ðµç ÀÔÃâ·ÂÀ»
- ÇϹǷΠ°¡Àå ½¬¿î ¹æ¹ýÀº BUFF ó¸® ÇÔ¼ö¿¡ º¯È¯±â´ÉÀ» Ãß°¡ÇÏ´Â
- °ÍÀÌ´Ù. ¾ðÁ¦µçÁö º¯È¯ÇÒ ¼ö ÀÖ¾î¾ß Çϱ⶧¹®¿¡ BUFF °´Ã¼¸¦
- º¯È¯ÇØ¾ß ÇÏ´ÂÁö ¾Ë·ÁÁÖ´Â BUFF Ç¥½Ã¸¦ Ãß°¡Çß´Ù. ÀÌ Ç¥½Ã´Â
- HTTP ÇÁ·ÎÅäÄÝÀÇ ¿©·¯ ´Ü°è¿¡¼­ º¯°æµÉ ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li>¿äûÀ» ¹Þ±â Àü¿¡ <strong>º¯È¯</strong> (¿äû°ú ¿äûÇì´õ°¡
- Ç×»ó ASCII Çü½ÄÀ̱⠶§¹®¿¡)</li>
-
- <li>¿äû ³»¿ëÀ» ¹Þ¾ÒÀ»¶§ content type¿¡ µû¶ó
- <strong>º¯È¯/º¯È¯¾ÈÇÔ</strong> (¿äû ³»¿ëÀÌ ASCII ¹®ÀÚ³ª
- ¹ÙÀ̳ʸ® ÆÄÀÏÀÎ °æ¿ì º¯È¯ÇØ¾ß Çϱ⶧¹®¿¡)</li>
-
- <li>ÀÀ´äÇì´õ¸¦ º¸³»±â Àü¿¡ <strong>º¯È¯</strong> (ÀÀ´äÇì´õ´Â
- Ç×»ó ASCII Çü½ÄÀ̱⶧¹®¿¡)</li>
-
- <li>ÀÀ´ä ³»¿ëÀ» º¸³¾¶§ content type¿¡ µû¶ó
- <strong>º¯È¯/º¯È¯¾ÈÇÔ</strong> (ÀÀ´ä ³»¿ëÀÌ ¹®ÀÚ ÆÄÀÏÀ̰ųª
- ¹ÙÀ̳ʸ® ÆÄÀÏÀ̱⶧¹®¿¡)</li>
- </ul>
-
- </section>
-
- <section id="porting">
-
- <title>Æ÷Æÿ¡ ´ëÇؼ­</title>
-
- <ol>
- <li>
- <p>¼Ò½ºÀÇ º¯È­´Â µÎ°¡Áö <code>#ifdef</code>·Î ±¸ºÐÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt><code><strong>#ifdef
- CHARSET_EBCDIC</strong></code></dt>
-
- <dd>
- <p>¸ðµç EBCDIC±â¹Ý ÄÄÇ»ÅÍ¿¡ ÇÊ¿äÇÑ ÄÚµå. ¹®ÀÚº¯È¯,
- µÎ ¹®ÀÚÁýÇÕ°£ÀÇ ¿¬¼ÓµÈ ¹®ÀÚ°ª Â÷ÀÌ, ¾î¶² HTTP ÇÁ·ÎÅäÄÝ
- ºÎºÐÀÌ º¯È¯µÇ¾ß ÇÏ´ÂÁö¸¦ ¾Ë·ÁÁִ ǥ½Ã <em>µî.</em></p>
- </dd>
-
- <dt><code><strong>#ifdef _OSD_POSIX</strong></code></dt>
-
- <dd>
- <p>SIEMENS BS2000/OSD ¸ÞÀÎÇ÷¹ÀÓ Ç÷¹Æû¿¡¸¸ ÇÊ¿äÇÑ
- ÄÚµå. BS2000/OSD Ç÷¹Æû¿¡¸¸ ÇÊ¿äÇÑ Çì´õÆÄÀÏ Â÷ÀÌ¿Í
- ¼ÒÄÏ ±¸Çö ¹®Á¦¸¦ ´Ù·é´Ù.</p>
- </dd>
- </dl>
- </li>
-
- <li>
- <p>¼ÒÄÏ ¼öÁØ¿¡¼­ ASCII¿Í EBCDIC°£ º¯È­´Â (BS2000 POSIX¿¡´Â
- ÀÌ ±â´ÉÀ» Áö¿øÇÏ´Â ¼ÒÄÏ ¿É¼ÇÀÌ ÀÖ´Ù) HTTP ÇÁ·ÎÅäÄÝ ¼öÁØ¿¡¼­
- Àü¼ÛµÇ´Â ÀÚ·á¿¡ ÇÁ·ÎÅäÄÝ°ü·Ã ¹®ÀÚ¿­°ú ÇÁ·ÎÅäÄÝ°ú ¹«°üÇÑ
- ÀϹÝÆÄÀÏÀÌ ¼¯¿©Àֱ⶧¹®¿¡ ÀǵµÀûÀ¸·Î »ç¿ëÇÏÁö
- <em>¾Ê¾Ò´Ù</em>. HTTP ÇÁ·ÎÅäÄÝ ¹®ÀÚ¿­Àº (<code>GET</code>
- ¿äû, Header: ÁÙ, ±âŸ Á¤º¸ <em>µî.</em>) Ç×»ó ASCII
- Çü½ÄÀÌ°í, ÆÄÀÏÀü¼Û ºÎºÐÀº (<em>Áï</em>, GIF ±×¸², CGI
- Ãâ·Â <em>µî.</em>) ¼­¹ö°¡ Ç×»ó "º¯È¯ÇÏÁö¾Ê°í ±×³É" º¸³»¾ß
- ÇÑ´Ù. ¼­¹ö ÄÚµå´Â "ÇÁ·ÎÅäÄÝ ¹®ÀÚ¿­"°ú "ÀÏ¹Ý ÀÚ·á"¸¦,
- ¹®ÀÚ¿­¿¡´Â <code>bgets()</code>³ª <code>rvputs()</code>,
- ¹ÙÀ̳ʸ® ÀÚ·á¿¡´Â <code>bgets()</code>³ª
- <code>rvputs()</code> ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ±¸º°ÇÑ´Ù. ±×·¯¹Ç·Î
- ¹«Á¶°Ç ¸ðµç °ÍÀ» º¯È¯ÇÏ´Â °ÍÀº ÀûÀýÇÏÁö ¾Ê´Ù.</p>
-
- <p>(¹°·Ð ¹®ÀÚÆÄÀÏÀÇ °æ¿ì EBCDIC ¹®¼­¸¦ Ç×»ó ASCII·Î
- ¼­ºñ½ºÇϵµ·Ï ÁغñÇØ¾ß ÇÑ´Ù)</p>
- </li>
-
- <li>
- <p>±×·¡¼­ Æ÷Æÿ¡´Â (ÄÄÆÄÀÏ·¯°¡ EBCDIC ¹®ÀÚ¿­·Î º¯È¯ÇÑ)
- ¼­¹ö ³»ºÎ ¹®ÀÚ¿­°ú ¼­¹ö°¡ »ý¼ºÇÑ ¹®¼­¸¦ ±âº» ÇÁ·ÎÅäÄÝ
- ¼öÁØ¿¡¼­ º¯È¯ÇÏ´Â ±â´ÉÀÌ ÀÖ´Ù. ¼­¹ö Äڵ忡 »êÀçµÈ ASCII
- escape¹®ÀÚ <code>\012</code>¿Í <code>\015</code>´Â ¿¹¿Ü´Ù:
- À̵éÀÌ ÀÌ¹Ì ASCII <code>\n</code>°ú <code>\r</code>ÀÇ
- ¹ÙÀ̳ʸ® °ªÀ̱⶧¹®¿¡ ASCII·Î µÎ¹ø º¯È¯ÇÏ¸é ¾ÈµÈ´Ù.
- ÀÌ ¿¹¿Ü´Â ¼­¹ö°¡ »ý¼ºÇÑ ¹®ÀÚ¿­¿¡¸¸ Àû¿ëµÈ´Ù; <em>¿ÜºÎ</em>
- EBCDIC ¹®¼­´Â ASCII Áٹٲ޹®ÀÚ¸¦ Æ÷ÇÔÇÏ¸é ¾ÈµÈ´Ù.</p>
- </li>
-
- <li>
- <p>BUFF °ü¸®ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆ캻 ÈÄ ³ª´Â ¸ðµç
- puts/write/get/gets°¡ °ÅÄ¡°ÔµÇ´Â "ebcdic/ascii º¯È¯
- °èÃþ"À» Ãß°¡ÇÏ°í, µ¿ÀûÀ¸·Î º¯È¯À¯¹«¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Â
- º¯È¯ Ç¥½Ã¸¦ Ãß°¡Çß´Ù. ¹®¼­°¡ ¿øº»(ÆÄÀÏÀ̳ª CGI Ãâ·Â)¿¡¼­
- ´ë»ó(¿äûÇÑ Å¬¶óÀ̾ðÆ®)À¸·Î À̵¿ÇÒ¶§ Ç×»ó ÀÌ °èÃþÀ»
- µÎ¹ø Áö³­´Ù: <code>ÆÄÀÏ -&gt; ¾ÆÆÄÄ¡</code>, <code>¾ÆÆÄÄ¡
- -&gt; Ŭ¶óÀ̾ðÆ®</code>.</p>
-
- <p>¼­¹ö´Â ÀÌÁ¦ EBCDIC Çü½ÄÀ¸·Î µÈ CGI ½ºÅ©¸³Æ® Ãâ·ÂÀÇ
- Çì´õÁÙÀ» Àаí, ³ª¸ÓÁö ½ºÅ©¸³Æ® Ãâ·ÂÀÌ ASCIIÀÓÀ» ¾Ë¾Æ³¾
- ¼ö ÀÖ´Ù (WWW ¹æ¹®ÀÚ¼ö¸¦ ¼¼´Â ÇÁ·Î±×·¥°ú °°Àº °æ¿ì: ¹®¼­
- ³»¿ëÀº GIF ±×¸²ÀÌ´Ù). ±âº» EBCDIC Çü½ÄÀ¸·Î ¸ðµç Çì´õ¸¦
- ó¸®ÇÑ´Ù; ±×·± ´ÙÀ½ ¼­ºñ½ºÇÒ ¹®¼­ÀÇ type¿¡ µû¶ó ¼­¹ö´Â
- ¹®¼­ ³»¿ëÀÌ ÀÌ¹Ì ASCIIÀÎÁö ȤÀº EBCDIC¿¡¼­ º¯È¯À» Çؾß
- ÇÏ´ÂÁö °áÁ¤ÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>(MIME typeÀÌ text/plain, text/html <em>µî</em>) ³»¿ëÀÌ
- ÀÏ¹Ý ¹®ÀÚÀÎ ¹®¼­¸¦ ¾Ï¹¬ÀûÀ¸·Î ASCII·Î º¯È¯Çϰųª, (»ç¿ëÀÚ¿¡°Ô
- ºü¸£°Ô ¼­ºñ½ºÇϱâÀ§ÇØ ¹Ì¸® ¹®¼­¸¦ ASCII Çü½ÄÀ¸·Î ÀúÀåÇÏ¿´°Å³ª
- NFS·Î ¸¶¿îÆ®ÇÑ µð·ºÅ丮¿¡ ÆÄÀÏÀÌ ÀÖ´Â °æ¿ì) º¯È¯¾øÀÌ
- ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><strong>¿¹:</strong></p>
-
- <p>À̸§ÀÌ <code>.ahtml</code>·Î ³¡³ª´Â ÆÄÀÏÀ» ¾Ï¹¬ÀûÀÎ
- º¯È¯¾øÀÌ ASCII <code>text/html</code> ¹®¼­·Î (±×¸®°í
- <code>.ascii</code> È®ÀåÀÚ´Â ASCII
- <code>text/plain</code>À¸·Î) ¼­ºñ½ºÇÏ·Á¸é ´ÙÀ½ Áö½Ã¾î¸¦
- »ç¿ëÇÑ´Ù:</p>
-
- <example>
- AddType text/x-ascii-html .ahtml <br />
- AddType text/x-ascii-plain .ascii
- </example>
-
- <p>¶Ç, <code>text/foo</code> ½ÄÀÇ MIME typeÀ»
- <code>AddType</code> "<code>text/x-ascii-foo</code>"
- ¼³Á¤ÇÏ¿© "ÀÏ¹Ý ASCII"·Î ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
- </li>
-
- <li>
- <p>³»¿ëÀÌ ÀÏ¹Ý ¹®ÀÚ°¡ ¾Æ´Ñ ¹®¼­´Â º¯È¯¾øÀÌ Ç×»ó "¹ÙÀ̳ʸ®"·Î
- ¼­ºñ½ºÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>, GIF/ZIP/AU ÆÄÀÏÇü½Ä¿¡
- °¡Àå ÀûÇÕÇÑ ¼±ÅÃÀÌ´Ù. ¹°·Ð »ç¿ëÀÚ´Â "<code>rcp -b</code>"
- ¹ÙÀ̳ʸ® ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ¸ÞÀÎÇ÷¹ÀÓ È£½ºÆ®·Î
- º¹»çÇß¾î¾ß ÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>¼­¹öÆÄ½Ì ÆÄÀÏÀº Ç×»ó ÄÄÇ»ÅÍ°¡ »ç¿ëÇÏ´Â ±âº» Çü½ÄÀ¸·Î
- (<em>Áï</em>, EBCDIC) ÀúÀåµÇ¾ú´Ù°í °¡Á¤ÇÏ°í, ó¸®ÈÄ¿¡
- º¯È¯ÇÑ´Ù.</p>
- </li>
-
- <li>
- <p>CGI Ãâ·ÂÀÇ °æ¿ì CGI ½ºÅ©¸³Æ®°¡ º¯È¯ÀÌ ÇÊ¿äÇÑÁö °áÁ¤ÇÑ´Ù:
- ÀûÀýÇÑ Content-TypeÀ» ¼³Á¤ÇÏ¿©, ¹®ÀÚÆÄÀÏÀº º¯È¯ÇÏ°í,
- GIF Ãâ·ÂÀº º¯È¯¾øÀÌ º¸³¾ ¼ö ÀÖ´Ù. ¿ì¸®°¡ Æ÷ÆÃÇÑ wwwcount
- ÇÁ·Î±×·¥ÀÌ ÈÄÀÚÀÇ °æ¿ì´Ù.</p>
- </li>
-
- </ol>
-
- </section>
-
- <section id="document">
-
- <title>¹®¼­ ÀúÀå¿¡ ´ëÇؼ­</title>
-
- <section id="binary">
-
- <title>¹ÙÀ̳ʸ® ÆÄÀÏ</title>
-
- <p>¼­¹ö´Â <code>Content-Type:</code>ÀÌ <code>text/</code>·Î
- ½ÃÀÛÇÏ´Â ¾Ê´Â ÆÄÀÏÀ» <em>¹ÙÀ̳ʸ® ÆÄÀÏ</em>·Î °£ÁÖÇÏ¿©
- ¾î¶² º¯È¯µµ ÇÏÁö ¾Ê´Â´Ù. ¹ÙÀ̳ʸ® ÆÄÀÏ¿¡´Â GIF ±×¸², gzipÀ¸·Î
- ¾ÐÃàÇÑ ÆÄÀÏ µîÀÌ ÀÖ´Ù.</p>
-
- <p>¸ÞÀÎÇ÷¹ÀÓ È£½ºÆ®¿Í À¯´Ð½º ȤÀº À©µµ¿ìÁî PC°£¿¡ ¹ÙÀ̳ʸ®
- ÆÄÀÏÀ» Àü¼ÛÇÒ ¶§´Â ftp "binary" (<code>TYPE I</code>) ¸í·É¾î³ª
- ¸ÞÀÎÇ÷¹ÀÓ È£½ºÆ®¿¡¼­ (À¯´Ð½º <code>rcp</code>´Â
- <code>-b</code> ¿É¼ÇÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù) <code>rcp -b</code>
- ¸í·É¾î¸¦ ¹Ýµå½Ã »ç¿ëÇ϶ó.</p>
-
- </section>
-
- <section id="text">
-
- <title>¹®ÀÚ ¹®¼­</title>
-
- <p>±âº»ÀûÀ¸·Î ¼­¹ö´Â ¹®ÀÚÆÄÀÏÀÌ (<em>Áï</em>,
- <code>Content-Type:</code>ÀÌ <code>text/</code>·Î ½ÃÀÛÇÏ´Â
- ¸ðµç ÆÄÀÏ) È£½ºÆ®ÀÇ ±âº» ¹®ÀÚÁýÇÕÀÎ EBCDICÀ¸·Î ÀúÀåµÇ¾ú´Ù°í
- °¡Á¤ÇÑ´Ù.</p>
-
- </section>
-
- <section id="ssi">
-
- <title>Server Side Include ¹®¼­</title>
-
- <p>SSI ¹®¼­´Â ÇöÀç EBCDIC Çü½ÄÀ¸·Î¸¸ ÀúÀåÇØ¾ß ÇÑ´Ù. ó¸®Çϱâ
- Àü¿¡ ASCII¸¦ º¯È¯ÇÏÁö ¾Ê´Â´Ù.</p>
-
- </section>
-
- </section>
-
- <section id="modules">
-
- <title>¾ÆÆÄÄ¡ ¸ðµâÀÇ »óÅÂ</title>
-
- <table border="1">
- <tr>
- <th>¸ðµâ</th>
- <th>»óÅÂ</th>
- <th>ºñ°í</th>
- </tr>
-
- <tr>
- <td><module>core</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_access</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_actions</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_alias</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_asis</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_auth</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_auth_anon</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_auth_dbm</module></td>
- <td class="centered">?</td>
- <td>ÀÚü <code>libdb.a</code>¸¦ »ç¿ëÇÏ¿©</td>
- </tr>
-
- <tr>
- <td><module>mod_autoindex</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_cern_meta</module></td>
- <td class="centered">?</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_cgi</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><code>mod_digest</code></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_dir</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_so</module></td>
- <td class="centered">-</td>
- <td>°øÀ¯¶óÀ̺귯¸®°¡ ¾øÀ½</td>
- </tr>
-
- <tr>
- <td><module>mod_env</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_example</module></td>
- <td class="centered">-</td>
- <td>(½ÃÇè ´Ü°è)</td>
- </tr>
-
- <tr>
- <td><module>mod_expires</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_headers</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_imap</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_include</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_info</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><code>mod_log_agent</code></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><code>mod_log_config</code></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_log_referer</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_mime</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_mime_magic</module></td>
- <td class="centered">?</td>
- <td>¾ÆÁ÷ Æ÷ÆþȵÊ</td>
- </tr>
-
- <tr>
- <td><module>mod_negotiation</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_proxy</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_rewrite</module></td>
- <td class="centered">+</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
-
- <tr>
- <td><module>mod_setenvif</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_speling</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_status</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_unique_id</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_userdir</module></td>
- <td class="centered">+</td>
- <td></td>
- </tr>
-
- <tr>
- <td><module>mod_usertrack</module></td>
- <td class="centered">?</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
- </table>
-
- </section>
-
- <section id="third-party">
-
- <title>Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀÇ »óÅÂ</title>
-
- <table border="1">
- <tr>
- <th>¸ðµâ</th>
- <th>»óÅÂ</th>
- <th>ºñ°í</th>
- </tr>
-
- <tr>
- <td><code><a href="http://java.apache.org/">mod_jserv</a>
- </code></td>
- <td class="centered">-</td>
- <td>JAVA´Â Æ÷ÆÃÁßÀÌ´Ù.</td>
- </tr>
-
- <tr>
- <td><code><a href="http://www.php.net/">mod_php3</a></code></td>
- <td class="centered">+</td>
- <td><code>mod_php3</code>´Â LDAP, GD, FreeType ¶óÀ̺귯¸®¿Í
- ÇÔ²² Àß µ¿ÀÛÇÑ´Ù.</td>
- </tr>
-
- <tr>
- <td><code><a
- href="http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html"
- >mod_put</a></code></td>
- <td class="centered">?</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
-
- <tr>
- <td><code><a href="ftp://hachiman.vidya.com/pub/apache/"
- >mod_session</a></code></td>
- <td class="centered">-</td>
- <td>Å×½ºÆ®¾ÈµÊ</td>
- </tr>
- </table>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/platform/ebcdic.xml.meta b/docs/manual/platform/ebcdic.xml.meta
deleted file mode 100644
index 99914fa403..0000000000
--- a/docs/manual/platform/ebcdic.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ebcdic</basename>
- <path>/platform/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/platform/index.html b/docs/manual/platform/index.html
deleted file mode 100644
index 5b7bb86fb2..0000000000
--- a/docs/manual/platform/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/platform/index.html.en b/docs/manual/platform/index.html.en
deleted file mode 100644
index dbaad6daf5..0000000000
--- a/docs/manual/platform/index.html.en
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Platform Specific Notes - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Platform Specific Notes</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/platform/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#win">Microsoft Windows</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#other">Other Platforms</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="win" id="win">Microsoft Windows</a></h2>
-
-
-
- <dl>
- <dt>Using Apache</dt>
- <dd>
- <p>This document explains how to install, configure and run Apache 2.0
- under Microsoft Windows.</p>
-
- <p>See: <a href="windows.html">Using Apache with Microsoft Windows</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Compiling Apache</dt>
- <dd>
- <p>There are many important points before you begin compiling Apache.
- This document explain them.</p>
-
- <p>See: <a href="win_compiling.html">Compiling Apache for Microsoft Windows</a></p>
- </dd>
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">Other Platforms</a></h2>
-
-
-
- <dl>
- <dt>Novell NetWare</dt>
- <dd>
- <p>This document explains how to install, configure and run Apache 2.0
- under Novell NetWare 5.1 and above.</p>
-
- <p>See: <a href="netware.html">Using Apache With Novell NetWare</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>EBCDIC</dt>
- <dd>
- <p>Version 1.3 of the Apache HTTP Server is the first version which
- includes a port to a (non-ASCII) mainframe machine which uses the
- EBCDIC character set as its native codeset.</p>
-
- <div class="warning"><strong>Warning:</strong> This document
- has not been updated to take into account changes made in
- the 2.0 version of the Apache HTTP Server. Some of the
- information may still be relevant, but please use it
- with care.</div>
-
- <p>See: <a href="ebcdic.html">The Apache EBCDIC Port</a></p>
- </dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/platform/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/index.html.ko.euc-kr b/docs/manual/platform/index.html.ko.euc-kr
deleted file mode 100644
index 713205ca6a..0000000000
--- a/docs/manual/platform/index.html.ko.euc-kr
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Ç÷¡Æûº° ¼³¸í - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Ç÷¡Æûº° ¼³¸í</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#win">Microsoft Windows</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#other">±âŸ Ç÷¡Æû</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="win" id="win">Microsoft Windows</a></h2>
-
-
-
- <dl>
- <dt>¾ÆÆÄÄ¡ »ç¿ë¹ý</dt>
- <dd>
- <p>ÀÌ ¹®¼­´Â Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ 2.0À» ¼³Ä¡,
- ¼³Á¤, ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹®¼­: <a href="windows.html">Microsoft Windows¿¡¼­
- ¾ÆÆÄÄ¡ »ç¿ë¹ý</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>¾ÆÆÄÄ¡ ÄÄÆÄÀÏ</dt>
- <dd>
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϱâ Àü¿¡ ÁÖÀÇÇÒ Á¡ÀÌ ¸¹´Ù. ÀÌ ¹®¼­´Â
- ÀÌÁ¡À» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹®¼­: <a href="win_compiling.html">Microsoft Windows¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏ</a></p>
- </dd>
- </dl>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="other" id="other">±âŸ Ç÷¡Æû</a></h2>
-
-
-
- <dl>
- <dt>Novell NetWare</dt>
- <dd>
- <p>ÀÌ ¹®¼­´Â Novell NetWare 5.1 À̻󿡼­ ¾ÆÆÄÄ¡ 2.0À»
- ¼³Ä¡, ¼³Á¤, ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹®¼­: <a href="netware.html">Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡
- »ç¿ëÇϱâ</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>EBCDIC</dt>
- <dd>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â 1.3 ¹öÀü¶§ óÀ½À¸·Î EBCDIC ¹®ÀÚÁýÇÕÀ»
- ±âº» ¹®ÀÚÁýÇÕÀ¸·Î »ç¿ëÇÏ´Â (ºñ-ASCII) ¸ÞÀÎÇ÷¹ÀÓ ÄÄÇ»ÅÍ·Î
- Æ÷ÆõǾú´Ù.</p>
-
- <div class="warning"><strong>°æ°í:</strong> ÀÌ ¹®¼­´Â
- ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ» ´ã°íÀÖÁö ¾Ê´Ù.
- ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</div>
-
- <p>¹®¼­: <a href="ebcdic.html">¾ÆÆÄÄ¡ EBCDIC Æ÷ÆÃ</a></p>
- </dd>
- </dl>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/index.xml b/docs/manual/platform/index.xml
deleted file mode 100644
index 9c7c39228a..0000000000
--- a/docs/manual/platform/index.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>Platform Specific Notes</title>
-
- <section id="win">
-
- <title>Microsoft Windows</title>
-
- <dl>
- <dt>Using Apache</dt>
- <dd>
- <p>This document explains how to install, configure and run Apache 2.0
- under Microsoft Windows.</p>
-
- <p>See: <a href="windows.html">Using Apache with Microsoft Windows</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>Compiling Apache</dt>
- <dd>
- <p>There are many important points before you begin compiling Apache.
- This document explain them.</p>
-
- <p>See: <a href="win_compiling.html"
- >Compiling Apache for Microsoft Windows</a></p>
- </dd>
- </dl>
-
- </section>
-
- <section id="other">
-
- <title>Other Platforms</title>
-
- <dl>
- <dt>Novell NetWare</dt>
- <dd>
- <p>This document explains how to install, configure and run Apache 2.0
- under Novell NetWare 5.1 and above.</p>
-
- <p>See: <a href="netware.html">Using Apache With Novell NetWare</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>EBCDIC</dt>
- <dd>
- <p>Version 1.3 of the Apache HTTP Server is the first version which
- includes a port to a (non-ASCII) mainframe machine which uses the
- EBCDIC character set as its native codeset.</p>
-
- <note type="warning"><strong>Warning:</strong> This document
- has not been updated to take into account changes made in
- the 2.0 version of the Apache HTTP Server. Some of the
- information may still be relevant, but please use it
- with care.</note>
-
- <p>See: <a href="ebcdic.html">The Apache EBCDIC Port</a></p>
- </dd>
- </dl>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/platform/index.xml.ko b/docs/manual/platform/index.xml.ko
deleted file mode 100644
index c15f3669f2..0000000000
--- a/docs/manual/platform/index.xml.ko
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
- <parentdocument href="../"/>
-
- <title>Ç÷¡Æûº° ¼³¸í</title>
-
- <section id="win">
-
- <title>Microsoft Windows</title>
-
- <dl>
- <dt>¾ÆÆÄÄ¡ »ç¿ë¹ý</dt>
- <dd>
- <p>ÀÌ ¹®¼­´Â Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ 2.0À» ¼³Ä¡,
- ¼³Á¤, ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹®¼­: <a href="windows.html">Microsoft Windows¿¡¼­
- ¾ÆÆÄÄ¡ »ç¿ë¹ý</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>¾ÆÆÄÄ¡ ÄÄÆÄÀÏ</dt>
- <dd>
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϱâ Àü¿¡ ÁÖÀÇÇÒ Á¡ÀÌ ¸¹´Ù. ÀÌ ¹®¼­´Â
- ÀÌÁ¡À» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹®¼­: <a href="win_compiling.html"
- >Microsoft Windows¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏ</a></p>
- </dd>
- </dl>
-
- </section>
-
- <section id="other">
-
- <title>±âŸ Ç÷¡Æû</title>
-
- <dl>
- <dt>Novell NetWare</dt>
- <dd>
- <p>ÀÌ ¹®¼­´Â Novell NetWare 5.1 À̻󿡼­ ¾ÆÆÄÄ¡ 2.0À»
- ¼³Ä¡, ¼³Á¤, ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-
- <p>¹®¼­: <a href="netware.html">Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡
- »ç¿ëÇϱâ</a></p>
- </dd>
- </dl>
-
- <dl>
- <dt>EBCDIC</dt>
- <dd>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â 1.3 ¹öÀü¶§ óÀ½À¸·Î EBCDIC ¹®ÀÚÁýÇÕÀ»
- ±âº» ¹®ÀÚÁýÇÕÀ¸·Î »ç¿ëÇÏ´Â (ºñ-ASCII) ¸ÞÀÎÇ÷¹ÀÓ ÄÄÇ»ÅÍ·Î
- Æ÷ÆõǾú´Ù.</p>
-
- <note type="warning"><strong>°æ°í:</strong> ÀÌ ¹®¼­´Â
- ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ» ´ã°íÀÖÁö ¾Ê´Ù.
- ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</note>
-
- <p>¹®¼­: <a href="ebcdic.html">¾ÆÆÄÄ¡ EBCDIC Æ÷ÆÃ</a></p>
- </dd>
- </dl>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/platform/index.xml.meta b/docs/manual/platform/index.xml.meta
deleted file mode 100644
index 3f98921b2b..0000000000
--- a/docs/manual/platform/index.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/platform/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/platform/netware.html b/docs/manual/platform/netware.html
deleted file mode 100644
index cb2d4221d7..0000000000
--- a/docs/manual/platform/netware.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: netware.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: netware.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/platform/netware.html.en b/docs/manual/platform/netware.html.en
deleted file mode 100644
index 696fdb5fed..0000000000
--- a/docs/manual/platform/netware.html.en
+++ /dev/null
@@ -1,589 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Using Apache With Novell NetWare - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Using Apache With Novell NetWare</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/platform/netware.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/netware.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>This document explains how to install, configure and run
- Apache 2.0 under Novell NetWare 6.0 and above. If you find any bugs,
- or wish to contribute in other ways, please use our
- <a href="http://httpd.apache.org/bug_report.html">bug reporting
- page.</a></p>
-
- <p>The bug reporting page and dev-httpd mailing list are <em>not</em>
- provided to answer questions about configuration or running Apache.
- Before you submit a bug report or request, first consult this document, the
- <a href="../faq/">Frequently Asked Questions</a> page and the other
- relevant documentation topics. If you still have a question or problem,
- post it to the <a href="news://developer-forums.novell.com/novell.devsup.webserver">
- novell.devsup.webserver</a> newsgroup, where many Apache users are more than
- willing to answer new and obscure questions about using Apache on NetWare.</p>
-
- <p>Most of this document assumes that you are installing Apache
- from a binary distribution. If you want to compile Apache
- yourself (possibly to help with development, or to track down
- bugs), see the section on <a href="#comp">Compiling Apache for
- NetWare</a> below.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#req">Requirements</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#down">Downloading Apache for NetWare</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#inst">Installing Apache for NetWare</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#run">Running Apache for NetWare</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#use">Configuring Apache for NetWare</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#comp">Compiling Apache for NetWare</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="req" id="req">Requirements</a></h2>
-
-
-
- <p>Apache 2.0 is designed to run on NetWare 6.0 service pack 3
- and above. If you are running a service pack less
- than SP3, you must install the latest
- <a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
- for C (LibC)</a>.</p>
-
- <p>NetWare service packs are available <a href="http://support.novell.com/misc/patlst.htm#nw">here</a>.</p>
-
- <p>Apache 2.0 for NetWare can also be run in a NetWare 5.1 environment
- as long as the latest service pack or the latest version
- of the <a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
- for C (LibC)</a> has been installed . <strong>WARNING:</strong> Apache 2.0
- for NetWare has not been targeted for or tested in this environment.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="down" id="down">Downloading Apache for NetWare</a></h2>
-
-
-
- <p>Information on the latest version of Apache can be found on
- the Apache web server at <a href="http://www.apache.org/">http://www.apache.org/</a>. This
- will list the current release, any more recent alpha or
- beta-test releases, together with details of mirror web and
- anonymous ftp sites. Binary builds of the latest releases of
- Apache 2.0 for NetWare can be downloaded from
- <a href="http://www.apache.org/dist/httpd/binaries/netware">here</a>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inst" id="inst">Installing Apache for NetWare</a></h2>
-
-
-
- <p>There is no Apache install program for NetWare currently. If you
- are building Apache 2.0 for NetWare from source, you will need to
- copy the files over to the server manually.</p>
-
- <p>Follow these steps to install Apache on NetWare from the
- binary download (assuming you will install to
- <code>sys:/apache2</code>):</p>
-
- <ul>
- <li>Unzip the binary download file to the root of the <code>SYS:</code>
- volume (may be installed to any volume)</li>
-
- <li>Edit the <code>httpd.conf</code> file setting <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> and <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> along with any file path values
- to reflect your correct server settings</li>
-
- <li>Add <code>SYS:/APACHE2</code> to the search path, for example:
- <div class="example"><p><code>SEARCH ADD SYS:\APACHE2</code></p></div>
- </li>
-
- </ul>
-
- <p>Follow these steps to install Apache on NetWare manually
- from your own build source (assuming you will install to
- <code>sys:/apache2</code>):</p>
-
- <ul>
- <li>Create a directory called <code>Apache2</code> on a
- NetWare volume</li>
-
- <li>Copy <code>APACHE2.NLM</code>, <code>APRLIB.NLM</code>
- to <code>SYS:/APACHE2</code></li>
-
- <li>Create a directory under <code>SYS:/APACHE2</code>
- called <code>BIN</code></li>
-
- <li>Copy <code>HTDIGEST.NLM</code>, <code>HTPASSWD.NLM</code>,
- <code>HTDBM.NLM</code>, <code>LOGRES.NLM</code>, <code>ROTLOGS.NLM</code>
- to <code>SYS:/APACHE2/BIN</code></li>
-
- <li>Create a directory under <code>SYS:/APACHE2</code>
- called <code>CONF</code></li>
-
- <li>Copy the <code>HTTPD-STD.CONF</code> file to the
- <code>SYS:/APACHE2/CONF</code> directory and rename to
- <code>HTTPD.CONF</code></li>
-
- <li>Copy the <code>MIME.TYPES</code>, <code>CHARSET.CONV</code> and
- <code>MAGIC</code> files to <code>SYS:/APACHE2/CONF</code> directory</li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\ICONS</code>
- to <code>SYS:/APACHE2/ICONS</code></li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\MANUAL</code>
- to <code>SYS:/APACHE2/MANUAL</code></li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\ERROR</code>
- to <code>SYS:/APACHE2/ERROR</code></li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\DOCROOT</code>
- to <code>SYS:/APACHE2/HTDOCS</code></li>
-
- <li>Create the directory <code>SYS:/APACHE2/LOGS</code>
- on the server</li>
-
- <li>Create the directory <code>SYS:/APACHE2/CGI-BIN</code>
- on the server</li>
-
- <li>Create the directory <code>SYS:/APACHE2/MODULES</code>
- and copy all nlm modules into the <code>modules</code> directory</li>
-
- <li>Edit the <code>HTTPD.CONF</code> file searching for all
- <code>@@Value@@</code> markers and replacing them with the
- appropriate setting</li>
-
- <li>Add <code>SYS:/APACHE2</code> to the search path, for example:
- <div class="example"><p><code>SEARCH ADD SYS:\APACHE2</code></p></div>
- </li>
- </ul>
-
- <p>Apache may be installed to other volumes besides the default <code>SYS</code> volume.</p>
-
- <p>During the build process, adding the keyword "install" to the makefile command line
- will automatically produce a complete distribution package under the subdirectory
- <code>DIST</code>. Install Apache by simply copying the distribution that was produced
- by the makfiles to the root of a NetWare volume (see: <a href="#comp">Compiling Apache for
- NetWare</a> below).</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run" id="run">Running Apache for NetWare</a></h2>
-
-
-
- <p>To start Apache just type <code>apache</code> at the
- console. This will load apache in the OS address space. If you
- prefer to load Apache in a protected address space you may
- specify the address space with the load statement as follows:</p>
-
- <div class="example"><p><code>
- load address space = apache2 apache2
- </code></p></div>
-
- <p>This will load Apache into an address space called apache2.
- Running multiple instances of Apache concurrently on NetWare is
- possible by loading each instance into its own protected
- address space.</p>
-
- <p>After starting Apache, it will be listening to port 80
- (unless you changed the <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- directive in the configuration files).
- To connect to the server and access the default page,
- launch a browser and enter the server's name or address. This
- should respond with a welcome page, and a link to the Apache
- manual. If nothing happens or you get an error, look in the
- <code>error_log</code> file in the <code>logs</code>
- directory.</p>
-
- <p>Once your basic installation is working, you should
- configure it properly by editing the files in the
- <code>conf</code> directory.</p>
-
- <p>To unload Apache running in the OS address space just type
- the following at the console:</p>
-
- <div class="example"><p><code>
- unload apache2
- </code></p></div>
-
- <p>or</p>
-
- <div class="example"><p><code>
- apache2 shutdown
- </code></p></div>
-
- <p>If apache is running in a protected address space specify the
- address space in the unload statement:</p>
-
- <div class="example"><p><code>
- unload address space = apache2 apache2
- </code></p></div>
-
- <p>When working with Apache it is important to know how it will
- find the configuration files. You can specify a configuration
- file on the command line in two ways:</p>
-
- <ul>
- <li><code>-f</code> specifies a path to a particular
- configuration file</li>
- </ul>
-
- <div class="example"><p><code>
- apache2 -f "vol:/my server/conf/my.conf"
- </code></p></div>
-
- <div class="example"><p><code>
- apache -f test/test.conf
- </code></p></div>
-
- <p>In these cases, the proper <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- should be set in the configuration file.</p>
-
- <p>If you don't specify a configuration file name with <code>-f</code>,
- Apache will use the file name compiled into the server, usually
- <code>conf/httpd.conf</code>. Invoking Apache with the <code>-V</code>
- switch will display this value labeled as <code>SERVER_CONFIG_FILE</code>.
- Apache will then determine its <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- by trying the following, in this order:</p>
-
- <ul>
- <li>A <code>ServerRoot</code> directive via a
- <code>-C</code> switch.</li>
-
- <li>The <code>-d</code> switch on the command line.</li>
-
- <li>Current working directory</li>
-
- <li>The server root compiled into the server.</li>
- </ul>
-
- <p>The server root compiled into the server is usually <code>sys:/apache2</code>.
- invoking apache with the <code>-V</code> switch will display this value labeled as
- <code>HTTPD_ROOT</code>.</p>
-
- <p>Apache 2.0 for NetWare includes a set of command line directives that can
- be used to modify or display information about the running instance of the
- web server. These directives are only available while Apache is running. Each
- of these directives must be preceded by the keyword <code>APACHE2</code>.</p>
-
- <dl>
- <dt>RESTART</dt>
- <dd>Instructs Apache to terminate all running worker
- threads as they become idle, reread the configuration file and restart each
- worker thread based on the new configuration.</dd>
-
- <dt>VERSION</dt>
- <dd>Displays version information about the currently
- running instance of Apache.</dd>
-
- <dt>MODULES</dt>
- <dd>Displays a list of loaded modules both built-in
- and external.</dd>
-
- <dt>DIRECTIVES</dt>
- <dd>Displays a list of all available directives.</dd>
-
- <dt>SETTINGS</dt>
- <dd>Enables or disables the thread status display
- on the console. When enabled, the state of each running threads is displayed
- on the Apache console screen.</dd>
-
- <dt>SHUTDOWN</dt>
- <dd>Terminates the running instance of the Apache
- web server.</dd>
-
- <dt>HELP</dt>
- <dd>Describes each of the runtime directives.</dd>
- </dl>
-
- <p>By default these directives are issued against the instance of Apache running
- in the OS address space. To issue a directive against a specific instance running
- in a protected address space, include the -p parameter along with the name of the
- address space. For more information type "apache2 Help" on the command line.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="use" id="use">Configuring Apache for NetWare</a></h2>
-
-
-
- <p>Apache is configured by reading configuration files usually stored
- in the <code>conf</code> directory. These are the same as files used
- to configure the Unix version, but there are a few different directives for
- Apache on NetWare. See the <a href="../">Apache
- documentation</a> for all the available directives.</p>
-
- <p>The main differences in Apache for NetWare are:</p>
-
- <ul>
- <li>
- <p>Because Apache for NetWare is multithreaded, it does not
- use a separate process for each request, as Apache does on some Unix
- implementations. Instead there are only threads running: a parent
- thread, and multiple child or worker threads which handle the requests.</p>
-
- <p>Therefore the "process"-management directives are different:</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> -
- Like the Unix directive, this controls how many requests
- a worker thread will serve before exiting. The recommended default,
- <code>MaxRequestsPerChild 0</code>, causes the thread to continue servicing
- request indefinitely. It is recommended on NetWare, unless there is some
- specific reason, that this directive always remain set to <code>0</code>.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#startthreads">StartThreads</a></code> -
- This directive tells the server how many threads it should start initially.
- The recommended default is <code>StartThreads 50</code>.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> -
- This directive instructs the server to spawn additional worker threads
- if the number of idle threads ever falls below this value. The recommended
- default is <code>MinSpareThreads 10</code>.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> -
- This directive instructs the server to begin terminating worker threads
- if the number of idle threads ever exceeds this value. The recommended
- default is <code>MaxSpareThreads 100</code>.</p>
-
- <p><code class="directive"><a href="../mod/mpm_netware.html#maxthreads">MaxThreads</a></code> -
- This directive limits the total number of work threads to a maximum
- value. The recommended default is <code>ThreadsPerChild 250</code>.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code> -
- This directive tells the server what size of stack to use
- for the individual worker thread. The recommended default
- is <code>ThreadStackSize 65536</code>.</p>
- </li>
-
- <li>
- <p>The directives that accept filenames as arguments must use
- NetWare filenames instead of Unix names. However, because Apache
- uses Unix-style names internally, forward slashes must be used
- rather than backslashes. It is recommended that all rooted file paths
- begin with a volume name. If omitted, Apache will assume the
- <code>SYS:</code> volume which may not be correct.</p>
- </li>
-
- <li>
- <p>Apache for NetWare has the ability to load modules at
- runtime, without recompiling the server. If Apache is
- compiled normally, it will install a number of optional
- modules in the <code>\Apache2\modules</code> directory.
- To activate these, or other modules, the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive
- must be used. For example, to active the status module, use
- the following:</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/status.nlm
- </code></p></div>
-
- <p>Information on <a href="../mod/mod_so.html#creating">creating loadable
- modules</a> is also available.</p>
- </li>
- </ul>
-
- <h3><a name="use-add" id="use-add">Additional NetWare specific directives:</a></h3>
-
-
-
- <ul>
- <li><code class="directive"><a href="../mod/core.html#cgimapextension">CGIMapExtension</a></code> -
- This directive maps a CGI file extension to a script interpreter.</li>
- </ul>
- <ul>
- <li><code class="directive"><a href="../mod/mod_nw_ssl.html#securelisten">SecureListen</a></code> -
- Enables SSL encryption for a specified port.</li>
- </ul>
- <ul>
- <li><code class="directive"><a href="../mod/mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></code> -
- Adds trusted certificates that are used to create secure connections to proxied servers.</li>
- </ul>
- <ul>
- <li><code class="directive"><a href="../mod/mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></code> -
- Allow a connection created on the specified address/port to be upgraded to an SSL connection.</li>
- </ul>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="comp" id="comp">Compiling Apache for NetWare</a></h2>
-
-
-
- <p>Compiling Apache requires MetroWerks CodeWarrior 6.x or higher. Once
- Apache has been built, it can be installed to the root of any NetWare
- volume. The default is the <code>sys:/Apache2</code> directory.</p>
-
- <p>Before running the server you must fill out the <code>conf</code>
- directory. Copy the file <code>HTTPD-STD.CONF</code> from the distribution
- <code>conf</code> directory and rename it to <code>HTTPD.CONF</code>.
- Edit the <code>HTTPD.CONF</code> file searching for all <code>@@Value@@</code>
- markers and replacing them with the appropriate setting. Copy over
- the <code>conf/magic</code> and <code>conf/mime.types</code> files as well.
- Alternatively, a complete distribution can be built by including the keyword
- <code>install</code> when invoking the makefiles.</p>
-
- <h3><a name="comp-req" id="comp-req">Requirements:</a></h3>
-
-
-
- <p>The following development tools are required to build
- Apache 2.0 for NetWare:</p>
-
- <ul>
- <li>Metrowerks CodeWarrior 6.0 or higher with the
- <a href="http://developer.novell.com/ndk/cwpdk.htm">NetWare PDK 3.0</a>
- or higher.</li>
-
- <li><a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
- for C (LibC)</a></li>
-
- <li><a href="http://developer.novell.com/ndk/cldap.htm">LDAP Libraries
- for C</a></li>
-
- <li><a href="http://www.gzip.org/zlib/">ZLIB Compression Library source code</a></li>
-
- <li>AWK utility (awk, gawk or similar). AWK can be downloaded from
- <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.
- The utility must be found in your windows path and must be named <code>awk.exe</code>.</li>
-
- <li>To build using the makefiles, you will need GNU make version 3.78.1 (GMake) available at
- <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.</li>
- </ul>
-
-
-
- <h3><a name="comp-make" id="comp-make">Building Apache using the NetWare makefiles:</a></h3>
-
-
-
- <ul>
- <li>Set the environment variable <code>NOVELLLIBC</code> to the
- location of the NetWare Libraries for C SDK, for example:
- <div class="example"><p><code>Set NOVELLLIBC=c:\novell\ndk\libc</code></p></div>
- </li>
-
- <li>Set the environment variable <code>METROWERKS</code> to the
- location where you installed the Metrowerks CodeWarrior compiler,
- for example:
- <div class="example"><p><code>Set METROWERKS=C:\Program Files\Metrowerks\CodeWarrior</code></p></div>
- If you installed to the default location <code>C:\Program
- Files\Metrowerks\CodeWarrior</code>, you don't need to set this.</li>
-
- <li>Set the environment variable <code>LDAPSDK</code> to the
- location where you installed the LDAP Libraries for C, for example:
- <div class="example"><p><code>Set LDAPSDK=c:\Novell\NDK\cldapsdk\NetWare\libc</code></p></div>
- </li>
-
- <li>Set the environment variable <code>ZLIBSDK</code> to the
- location where you installed the source code for the ZLib Library,
- for example:
- <div class="example"><p><code>Set ZLIBSDK=D:\NOVELL\zlib</code></p></div>
- </li>
-
- <li>Set the environment variable <code>AP_WORK</code> to the full path of
- the <code>\httpd-2.0</code> directory.</li>
-
- <li>Set the environment variable <code>APR_WORK</code> to the full path of
- the <code>\httpd-2.0\srclib\apr</code> directory.</li>
-
- <li>Make sure that the path to the AWK utility and the GNU make utility
- (<code>gmake.exe</code>) have been included in the system's
- <code>PATH</code> environment variable.</li>
-
- <li>Download the source code and unzip to an appropriate directory on
- your workstation.</li>
-
- <li>Change directory to <code>\httpd-2.0\srclib\apr-util\uri</code> and build
- <code>GENURI.nlm</code> by running "<code>gmake -f nwgnumakefile</code>".</li>
-
- <li>Copy the file <code>GENURI.nlm</code> to the <code>SYS:</code> volume
- of a NetWare server and run using the following command:
- <div class="example"><p><code>SYS:\genuri &gt; sys:\uri_delims.h</code></p></div>
- </li>
-
- <li>Copy the file <code>uri_delims.h</code> to the directory
- <code>\httpd-2.0\srclib\apr-util\uri</code> on the build machine.</li>
-
- <li>Change directory to <code>\httpd-2.0\srclib\apr</code> and build APR
- by running "<code>gmake -f nwgnumakefile</code>"</li>
-
- <li>Change directory to <code>\httpd-2.0\srclib\pcre</code> and build
- <code>DFTABLES.nlm</code> by running "<code>gmake -f nwgnumakefile</code>"</li>
-
- <li>Change directory to <code>\httpd-2.0\server</code> and build
- <code>GENCHARS.nlm</code> by running "<code>gmake -f nwgnumakefile</code>"</li>
-
- <li>Copy the files <code>GENCHARS.nlm</code> and <code>DFTABLES.nlm</code>
- from their respective directories to the <code>SYS:</code> volume of a
- NetWare server and run them using the following commands:
- <div class="example"><p><code>
- SYS:\genchars &gt; sys:\test_char.h<br />
- SYS:\dftables &gt; sys:\chartables.c<br />
- </code></p></div>
- </li>
-
- <li>Copy the files <code>test_char.h</code> and <code>chartables.c</code>
- to the directory <code>\httpd-2.0\os\netware</code> on the build machine.</li>
-
- <li>Change directory to <code>\httpd-2.0</code> and build Apache by running
- "<code>gmake -f nwgnumakefile</code>". You can create a distribution directory by
- adding an install parameter to the command, for example:
- <div class="example"><p><code>gmake -f nwgnumakefile install</code></p></div>
- </li>
- </ul>
-
-
-
- <h3><a name="comp-add" id="comp-add">Additional make options</a></h3>
-
-
-
- <ul>
- <li><code>gmake -f nwgnumakefile</code><p>Builds release versions of all of the
- binaries and copies them to a <code>\release</code> destination directory.</p></li>
-
- <li><code>gmake -f nwgnumakefile DEBUG=1</code><p>Builds debug versions of all of the
- binaries and copies them to a <code>\debug</code> destination directory.</p></li>
-
- <li><code>gmake -f nwgnumakefile install</code><p>Creates a complete Apache
- distribution with binaries, docs and additional support files in a
- <code>\dist\Apache2</code> directory.</p></li>
-
- <li><code>gmake -f nwgnumakefile installdev</code><p>Same as install but also creates a
- <code>\lib</code> and <code>\include</code> directory in the destination directory
- and copies headers and import files.</p></li>
-
- <li><code>gmake -f nwgnumakefile clean</code><p>Cleans all object files and binaries
- from the <code>\release</code> or <code>\debug</code> build areas depending on whether
- <code>DEBUG</code> has been defined.</p></li>
-
- <li><code>gmake -f nwgnumakefile clobber_all</code><p>Same as clean and also deletes
- the distribution directory if it exists.</p></li>
- </ul>
-
-
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/platform/netware.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/netware.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/netware.html.ko.euc-kr b/docs/manual/platform/netware.html.ko.euc-kr
deleted file mode 100644
index 850f5cef01..0000000000
--- a/docs/manual/platform/netware.html.ko.euc-kr
+++ /dev/null
@@ -1,579 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ëÇϱâ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ëÇϱâ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/netware.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/netware.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>ÀÌ ¹®¼­´Â Novell NetWare 6.0 À̻󿡼­ ¾ÆÆÄÄ¡ 2.0À» ¼³Ä¡,
- ¼³Á¤, ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. ¹ö±×¸¦ ã¾Ò°Å³ª ´Ù¸¥ ¹æ¹ýÀ¸·Î
- µ½°í½Í´Ù¸é, <a href="http://httpd.apache.org/bug_report.html">¹ö±×
- º¸°í ÆäÀÌÁö</a>¸¦ ÀÌ¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <p>¹ö±× º¸°í ÆäÀÌÁö³ª dev-httpd ¸ÞÀϸµ¸®½ºÆ®´Â ¾ÆÆÄÄ¡ ¼³Á¤°ú
- ½ÇÇà¿¡ ´ëÇÑ Áú¹®À» ´äÇÏÁö <em>¾Ê´Â´Ù</em>. ¹ö±×¸¦ º¸°íÇϱâ
- Àü¿¡ ¸ÕÀú ÀÌ ¹®¼­¿Í <a href="../faq/">ÀÚÁÖ ¹°¾îº¸´Â Áú¹®
- (FAQ)</a> ÆäÀÌÁö, ´Ù¸¥ °ü·Ã¹®¼­¸¦ »ìÆìºÁ¶ó. ±×·¡µµ ±Ã±ÝÇÑ
- Á¡À̳ª ¹®Á¦°¡ ÀÖ´Ù¸é, NetWare¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¿¡ ´ëÇÑ ¾î·Æ°í
- »õ·Î¿î Áú¹®À» ´äÇØÁÙ ¸¹Àº ¾ÆÆÄÄ¡ »ç¿ëÀÚ°¡ ÀÖ´Â <a href="news://developer-forums.novell.com/novell.devsup.webserver">
- novell.devsup.webserver</a> ´º½º±×·ì¿¡ ±ÛÀ» ¿Ã¸®±æ ¹Ù¶õ´Ù.</p>
-
- <p>ÀÌ ¹®¼­´Â ¹ÙÀ̳ʸ® ¹èÆ÷º»À¸·Î ¾ÆÆÄÄ¡¸¦ ¼³Ä¡Çß´Ù°í °¡Á¤ÇÑ´Ù.
- (¾Æ¸¶µµ °³¹ß¿¡ µµ¿òÀ» Áְųª ¹ö±×¸¦ ã±âÀ§ÇØ) Á÷Á¢ ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÏ·Á¸é ¾Æ·¡ <a href="#comp">NetWare¿¡¼­ ¾ÆÆÄÄ¡
- ÄÄÆÄÀÏÇϱâ</a> ÀýÀ» Âü°íÇ϶ó.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#req">¿ä±¸Á¶°Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#down">NetWare¿ë ¾ÆÆÄÄ¡ ´Ù¿î¹Þ±â</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#inst">NetWare¿ë ¾ÆÆÄÄ¡ ¼³Ä¡Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#run">NetWare¿ë ¾ÆÆÄÄ¡ ½ÇÇàÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#use">NetWare¿ë ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#comp">Netware¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="req" id="req">¿ä±¸Á¶°Ç</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡ 2.0Àº NetWare 6.0 service pack 3 À̻󿡼­ µ¿ÀÛÇϵµ·Ï
- ¼³°èµÇ¾ú´Ù. SP3º¸´Ù ³·Àº service packÀ» »ç¿ëÇÑ´Ù¸é ÃÖ½Å
- <a href="http://developer.novell.com/ndk/libc.htm">NetWare
- Libraries for C (LibC)</a>¸¦ ¼³Ä¡ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>NetWare service packÀº <a href="http://support.novell.com/misc/patlst.htm#nw">¿©±â</a>¿¡
- ÀÖ´Ù.</p>
-
- <p>ÃֽŠservice packÀ̳ª ÃֽŠ¹öÀü <a href="http://developer.novell.com/ndk/libc.htm">NetWare
- Libraries for C (LibC)</a>¸¦ ¼³Ä¡Çß´Ù¸é NetWare 5.1 ȯ°æ¿¡¼­µµ
- NetWare¿ë ¾ÆÆÄÄ¡ 2.0À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù. <strong>°æ°í:</strong>
- NetWare¿ë ¾ÆÆÄÄ¡ 2.0Àº ÀÌ È¯°æÀ» °í·ÁÇÏÁö ¾Ê¾Ò°í Å×½ºÆ®ÇÏÁö
- ¾Ê¾Ò´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="down" id="down">NetWare¿ë ¾ÆÆÄÄ¡ ´Ù¿î¹Þ±â</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡ ÃֽŠ¹öÀü¿¡ ´ëÇÑ Á¤º¸´Â <a href="http://www.apache.org/">http://www.apache.org/</a>¿¡¼­
- (¾ÆÆÄÄ¡ À¥¼­¹ö) ãÀ» ¼ö ÀÖ´Ù. ¿©±â¿¡´Â ÇöÀç ¹öÀü°ú ÃÖ±Ù
- ¾ËÆÄ/º£Å¸Å×½ºÆ® ¹öÀü, ¹Ì·¯ À¥»çÀÌÆ®¿Í ftp »çÀÌÆ® Á¤º¸°¡
- ÀÖ´Ù. NetWare¿ë ¾ÆÆÄÄ¡ 2.0ÀÇ ÃֽŠ¹ÙÀ̳ʸ® ¹èÆ÷º»Àº <a href="http://www.apache.org/dist/httpd/binaries/netware">¿©±â</a>¿¡¼­
- ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inst" id="inst">NetWare¿ë ¾ÆÆÄÄ¡ ¼³Ä¡Çϱâ</a></h2>
-
-
-
- <p>ÇöÀç NetWare¿ë ¾ÆÆÄÄ¡ ¼³Ä¡ÇÁ·Î±×·¥Àº ¾ø´Ù. NetWare¿ë
- ¾ÆÆÄÄ¡ 2.0 ¼Ò½º¸¦ Á÷Á¢ ÄÄÆÄÀÏÇÑ´Ù¸é ÆÄÀÏÀ» ¼­¹ö·Î Á÷Á¢
- º¹»çÇØÁà¾ß ÇÑ´Ù.</p>
-
- <p>¹ÙÀ̳ʸ®·Î ´Ù¿î¹ÞÀº NetWare¿ë ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ´Â °úÁ¤Àº
- ´ÙÀ½°ú °°´Ù (<code>sys:/apache2</code>¿¡ ¼³Ä¡ÇÑ´Ù°í °¡Á¤ÇÑ´Ù):</p>
-
- <ul>
- <li>¹ÙÀ̳ʸ®·Î ´Ù¿î¹ÞÀº ¾ÐÃàÆÄÀÏÀ» <code>SYS:</code> º¼·ý
- ÃÖ»óÀ§ µð·ºÅ丮¿¡ Ǭ´Ù (´Ù¸¥ º¼·ý¿¡ ¼³Ä¡Çصµ µÈ´Ù)</li>
-
- <li><code>httpd.conf</code> ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿Í <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>°ú ÆÄÀÏ°æ·Î °ªÀ» ¼­¹ö¿¡
- ¾Ë¸Â°Ô ÁöÁ¤ÇÑ´Ù</li>
-
- <li>¿¹¸¦ µé¾î <div class="example"><p><code>SEARCH ADD SYS:\APACHE2</code></p></div>¿Í
- °°ÀÌ °Ë»ö°æ·Î¿¡ <code>SYS:/APACHE2</code>¸¦ Ãß°¡ÇÑ´Ù
- </li>
-
- </ul>
-
- <p>Á÷Á¢ ¼Ò½º¸¦ ÄÄÆÄÀÏÇÑ °æ¿ì NetWare¿¡ ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ´Â
- ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù (<code>sys:/apache2</code>¿¡ ¼³Ä¡ÇÑ´Ù°í
- °¡Á¤ÇÑ´Ù):</p>
-
- <ul>
- <li>NetWare º¼·ý¿¡ <code>Apache2</code>¶ó´Â µð·ºÅ丮¸¦
- ¸¸µç´Ù</li>
-
- <li><code>APACHE2.NLM</code>°ú <code>APRLIB.NLM</code>À»
- <code>SYS:/APACHE2</code>¿¡ º¹»çÇÑ´Ù</li>
-
- <li><code>SYS:/APACHE2</code> ¾Æ·¡¿¡ <code>BIN</code>À̶ó´Â
- µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li><code>HTDIGEST.NLM</code>, <code>HTPASSWD.NLM</code>,
- <code>HTDBM.NLM</code>, <code>LOGRES.NLM</code>,
- <code>ROTLOGS.NLM</code>À» <code>SYS:/APACHE2/BIN</code>¿¡
- º¹»çÇÑ´Ù</li>
-
- <li><code>SYS:/APACHE2</code> ¾Æ·¡¿¡ <code>CONF</code>¶ó´Â
- µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li><code>HTTPD-STD.CONF</code> ÆÄÀÏÀ»
- <code>SYS:/APACHE2/CONF</code>¿¡ º¹»çÇÏ°í ÆÄÀϸíÀ»
- <code>HTTPD.CONF</code>·Î º¯°æÇÑ´Ù</li>
-
- <li><code>MIME.TYPES</code>, <code>CHARSET.CONV</code>,
- <code>MAGIC</code> ÆÄÀÏÀ» <code>SYS:/APACHE2/CONF</code>
- µð·ºÅ丮¿¡ º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\ICONS</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/ICONS</code>·Î º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\MANUAL</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/MANUAL</code>·Î º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\ERROR</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/ERROR</code>·Î º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\DICROOT</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/HTDOCS</code>·Î º¹»çÇÑ´Ù</li>
-
- <li>¼­¹ö¿¡ <code>SYS:/APACHE2/LOGS</code> µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li>¼­¹ö¿¡ <code>SYS:/APACHE2/APACHE2/CGI-BIN</code>À̶õ
- µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li><code>SYS:/APACHE2/MODULES</code> µð·ºÅ丮¸¦ ¸¸µé°í
- ¸ðµç nlm ¸ðµâÀ» <code>modules</code> µð·ºÅ丮·Î º¹»çÇÑ´Ù</li>
-
- <li><code>HTTPD.CONF</code> ÆÄÀÏÀÇ ¸ðµç <code>@@Value@@</code>
- Ç¥½Ã¸¦ ÀûÀýÇÑ ¼³Á¤À¸·Î ´ëüÇÑ´Ù</li>
-
- <li><div class="example"><p><code>SEARCH ADD SYS:\APACHE2</code></p></div> °°ÀÌ °Ë»ö°æ·Î¿¡
- <code>SYS:/APACHE2</code>¸¦ Ãß°¡ÇÑ´Ù
- </li>
- </ul>
-
- <p>±âº» <code>SYS</code> º¼·ýÀÌ ¾Æ´Ñ ´Ù¸¥ º¼·ý¿¡µµ ¾ÆÆÄÄ¡¸¦
- ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>makefile ¸í·É¾î¿¡ "install" Å°¿öµå¸¦ »ç¿ëÇϸé ÄÄÆÄÀϽÃ
- ÀÚµ¿À¸·Î <code>DIST</code> ÇÏÀ§µð·ºÅ丮¿¡ ¿ÏÀüÇÑ ¹èÆ÷º»À»
- ¸¸µç´Ù. makefile·Î ¸¸µç ¹èÆ÷º»À» NetWare º¼·ý ÃÖ»óÀ§ µð·ºÅ丮·Î
- º¹»çÇÏ¸é ¾ÆÆÄÄ¡°¡ ¼³Ä¡µÈ´Ù (¾Æ·¡ <a href="#comp">NetWare¿ë
- ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</a> Âü°í).</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run" id="run">NetWare¿ë ¾ÆÆÄÄ¡ ½ÇÇàÇϱâ</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ·Á¸é Äֿܼ¡¼­ <code>apache</code>¸¦ ÀÔ·ÂÇϸé
- µÈ´Ù. ±×·¯¸é ¿î¿µÃ¼Á¦ ÁÖ¼Ò¿µ¿ª¿¡ ¾ÆÆÄÄ¡¸¦ ÀоîµéÀδÙ.
- º¸È£ÁÖ¼Ò¿µ¿ª¿¡ ¾ÆÆÄÄ¡¸¦ ÀоîµéÀÌ·Á¸é ´ÙÀ½°ú °°ÀÌ load ¸í·É¾î·Î
- ÁÖ¼Ò¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- load address space = apache2 apache2
- </code></p></div>
-
- <p>±×·¯¸é ¾ÆÆÄÄ¡¸¦ apache2¶ó´Â ÁÖ¼Ò¿µ¿ª¿¡ ÀоîµéÀδÙ.
- NetWare´Â ¿©·¯ ¾ÆÆÄÄ¡¸¦ °¢°¢ ´Ù¸¥ º¸È£ÁÖ¼Ò¿µ¿ª¿¡ Àоîµé¿©¼­
- ¿©·¯ ¾ÆÆÄÄ¡¸¦ µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡°¡ ½ÃÀÛÇϸé (¼³Á¤ÆÄÀÏ¿¡¼­ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î¸¦ ¼öÁ¤ÇÏÁö
- ¾Ê´ÂÇÑ) Æ÷Æ® 80¹øÀ» ±â´Ù¸°´Ù. ºê¶ó¿ìÀú¸¦ ½ÃÀÛÇÏ¿© ¼­¹ö¸í
- ȤÀº ¼­¹ö ÁÖ¼Ò¸¦ ÀÔ·ÂÇÏ¸é ¼­¹ö¿¡ Á¢¼ÓÇÏ¿© ±âº»ÆäÀÌÁö¿¡
- Á¢±ÙÇÑ´Ù. ¾ÆÆÄÄ¡ ¼³¸í¼­ ¸µÅ©°¡ Àִ ȯ¿µÆäÀÌÁö°¡ ³ª¿Í¾ß
- ÇÑ´Ù. ¾Æ¹« Àϵµ ¾ø°Å³ª ¿À·ù°¡ ¹ß»ýÇϸé <code>logs</code>
- µð·ºÅ丮¿¡ ÀÖ´Â <code>error_log</code> ÆÄÀÏÀ» »ìÆìºÁ¶ó.</p>
-
- <p>±âº» ¼³Ä¡°¡ µ¿ÀÛÇϸé <code>conf</code> µð·ºÅ丮¿¡ ÀÖ´Â
- ÆÄÀÏÀ» ÀûÀýÈ÷ ¼³Á¤ÇÑ´Ù.</p>
-
- <p>¿î¿µÃ¼Á¦ ÁÖ¼Ò¿µ¿ª¿¡¼­ ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡¸¦ ³»¸±·Á¸é Äֿܼ¡
- ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- unload apache2
- </code></p></div>
-
- <p>ȤÀº</p>
-
- <div class="example"><p><code>
- apache2 shutdown
- </code></p></div>
-
- <p>º¸È£ÁÖ¼Ò¿µ¿ª¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇß´Ù¸é unload ¸í·É¾î¿¡
- ÁÖ¼Ò¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- unload address space = apache2 apache2
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡°¡ ¼³Á¤ÆÄÀÏ À§Ä¡¸¦ ã´Â ¹æ¹ýÀ» ¾Ë¾ÆµÎ¾î¾ß ÇÑ´Ù.
- ¸í·ÉÇà¿¡¼­ ¼³Á¤ÆÄÀÏÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº µÎ°¡Áö´Ù:</p>
-
- <ul>
- <li><code>-f</code>´Â ƯÁ¤ ¼³Á¤ÆÄÀÏ °æ·Î¸¦ ÁöÁ¤ÇÑ´Ù</li>
- </ul>
-
- <div class="example"><p><code>
- apache2 -f "vol:/my server/conf/my.conf"
- </code></p></div>
-
- <div class="example"><p><code>
- apache -f test/test.conf
- </code></p></div>
-
- <p>ÀÌ °æ¿ì ¼³Á¤ÆÄÀÏÀº ¿Ã¹Ù¸¥ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p><code>-f</code>·Î ¼³Á¤ÆÄÀϸíÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, ¾ÆÆÄÄ¡´Â
- ¼­¹ö¿¡ ÄÄÆÄÀÏµÈ ÆÄÀϸíÀ» (º¸Åë <code>conf/httpd.conf</code>)
- »ç¿ëÇÑ´Ù. <code>-V</code> ¿É¼ÇÀ¸·Î ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé
- <code>SERVER_CONFIG_FILE</code>À̶ó´Â Ç׸ñÀ» º¸¿©ÁØ´Ù.
- ¾ÆÆÄÄ¡´Â ´ÙÀ½ ¼ø¼­´ë·Î <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¸¦ ã´Â´Ù:</p>
-
- <ul>
- <li><code>-C</code> ¿É¼ÇÀÇ <code>ServerRoot</code> Áö½Ã¾î.</li>
-
- <li>¸í·ÉÇàÀÇ <code>-d</code> ¿É¼Ç.</li>
-
- <li>ÇöÀç µð·ºÅ丮</li>
-
- <li>¼­¹ö¿¡ ÄÄÆÄÀÏµÈ server root.</li>
- </ul>
-
- <p>¼­¹ö¿¡ ÄÄÆÄÀÏµÈ server root´Â º¸Åë
- <code>sys:/apache2</code>ÀÌ´Ù. <code>-V</code> ¿É¼ÇÀ¸·Î
- ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé <code>HTTPD_ROOT</code>¶ó´Â Ç׸ñÀ» º¸¿©ÁØ´Ù.</p>
-
- <p>NetWare¿ë ¾ÆÆÄÄ¡ 2.0¿¡´Â ½ÇÇàÁßÀÎ À¥¼­¹ö¸¦ Á×À̰ųª Á¤º¸¸¦
- ¾Ë·ÁÁÖ´Â ¸í·ÉÇà Áö½Ã¾î°¡ ÀÖ´Ù. À̵é Áö½Ã¾î´Â ¾ÆÆÄÄ¡ µ¿ÀÛÁß¿¡¸¸
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áö½Ã¾î ¾Õ¿¡´Â <code>APACHE2</code> Å°¿öµå¸¦
- ºÙ¿©¾ß ÇÑ´Ù.</p>
-
- <dl>
- <dt>RESTART</dt>
- <dd>¸ðµç ¾²·¹µå°¡ ½¬´Â »óÅÂÀ϶§ ¾ÆÆÄÄ¡¸¦ Á×ÀÌ°í, ¼³Á¤ÆÄÀÏÀ»
- ´Ù½Ã ÀÐÀºÈÄ »õ·Î¿î ¼³Á¤¿¡ µû¶ó worker ¾²·¹µåµéÀ» Àç½ÃÀÛÇÑ´Ù.</dd>
-
- <dt>VERSION</dt>
- <dd>ÇöÀç ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡ ¹öÀü Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt>MODULES</dt>
- <dd>±âº» ¸ðµâ°ú ¿ÜºÎ ¸ðµâ ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt>DIRECTIVES</dt>
- <dd>¸ðµç Áö½Ã¾î ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt>SETTINGS</dt>
- <dd>Äֿܼ¡ ¾²·¹µå »óÅ ǥ½Ã¸¦ º¸À̰ųª ¾ø¾Ø´Ù. »óŸ¦
- º¸À̸é, ¾ÆÆÄÄ¡ ÄܼÖâ¿¡ µ¿ÀÛÇÏ´Â ¾²·¹µåµéÀÇ »óÅ°¡ ³ª¿Â´Ù.</dd>
-
- <dt>SHUTDOWN</dt>
- <dd>½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ Á×ÀδÙ.</dd>
-
- <dt>HELP</dt>
- <dd>½ÇÇà ¿É¼ÇµéÀ» ¼³¸íÇÑ´Ù.</dd>
- </dl>
-
- <p>±âº»ÀûÀ¸·Î ÀÌ Áö½Ã¾îµéÀº ¿î¿µÃ¼Á¦ ÁÖ¼Ò¿µ¿ª¿¡¼­ ½ÇÇàÁßÀÎ
- ¾ÆÆÄÄ¡¸¦ ´ë»óÀ¸·Î ÇÑ´Ù. ¾ÆÆÄÄ¡°¡ º¸È£ÁÖ¼Ò¿µ¿ª¿¡¼­ ½ÇÇàÁßÀ̶ó¸é,
- -p¿Í ÁÖ¼Ò¿µ¿ª À̸§À» Ãß°¡ÇÑ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é ¸í·ÉÇà¿¡
- "apache2 Help"¸¦ ÀÔ·ÂÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="use" id="use">NetWare¿ë ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡´Â º¸Åë <code>conf</code> µð·ºÅ丮¿¡ ÀÖ´Â ¼³Á¤ÆÄÀÏ·Î
- ¼³Á¤ÇÑ´Ù. ÀÌ ÆÄÀÏÀº À¯´Ð½º¿ë°ú °°Áö¸¸, NetWare¿ë ¾ÆÆÄÄ¡¿¡´Â
- Á¶±Ý ´Ù¸¥ Áö½Ã¾îµéÀÌ ÀÖ´Ù. »ç¿ë°¡´ÉÇÑ ¸ðµç Áö½Ã¾î¿¡ ´ëÇؼ­´Â
- <a href="../">¾ÆÆÄÄ¡ ¹®¼­</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p>NetWare¿ë ¾ÆÆÄÄ¡ÀÇ ÁÖµÈ Â÷ÀÌÁ¡Àº:</p>
-
- <ul>
- <li>
- <p>NetWare¿ë ¾ÆÆÄÄ¡´Â ´ÙÁß¾²·¹µå ¹æ½ÄÀ» »ç¿ëÇϱ⶧¹®¿¡,
- À¯´Ð½º¿Í °°ÀÌ ¿äû¸¶´Ù ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
- ´ë½Å ¿©·¯ ¾²·¹µå¸¦ ½ÇÇàÇÑ´Ù: ºÎ¸ð ¾²·¹µå¿Í ¿äûÀ» ó¸®ÇÏ´Â
- ¿©·¯ ÀÚ½Ä È¤Àº worker ¾²·¹µåµé.</p>
-
- <p>±×·¯¹Ç·Î "ÇÁ·Î¼¼½º"-°ü¸® Áö½Ã¾î°¡ ´Ù¸£´Ù:</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> -
- À¯´Ð½º¿Í °°ÀÌ worker ¾²·¹µå°¡ ¿äûÀ» ¾ó¸¶¸¸Å­ ó¸®ÇÏ°í
- Á×À»Áö¸¦ Á¶Á¤ÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ª
- <code>MaxRequestsPerChild 0</code>À» »ç¿ëÇÏ¸é ¾²·¹µå´Â
- Á×Áö¾Ê°í ¿µ¿øÈ÷ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. Ưº°ÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é
- NetWare¿¡¼­´Â ÀÌ Áö½Ã¾î¸¦ <code>0</code>À¸·Î ¼³Á¤Çϱæ
- ±ÇÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#startthreads">StartThreads</a></code> -
- ÀÌ Áö½Ã¾î´Â ¼­¹ö°¡ óÀ½¿¡ ½ÃÀÛÇÒ ¾²·¹µå °³¼ö¸¦ °áÁ¤ÇÑ´Ù.
- ±ÇÀåÇÏ´Â ±âº»°ªÀº <code>StartThreads 50</code>ÀÌ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> -
- ¼­¹ö´Â ½¬´Â(idle) ¾²·¹µå °³¼ö°¡ ÀÌ °ªº¸´Ù ÀûÀ¸¸é worker
- ¾²·¹µå¸¦ ´õ ¸¸µç´Ù. ±ÇÀåÇÏ´Â ±âº»°ªÀº
- <code>MinSpareThreads 10</code>ÀÌ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> -
- ¼­¹ö´Â ½¬´Â ¾²·¹µå °³¼ö°¡ ÀÌ °ªº¸´Ù ¸¹À¸¸é worker ¾²·¹µå¸¦
- Á×À̱⠽ÃÀÛÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ªÀº
- <code>MaxSpareThreads 100</code>ÀÌ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mpm_netware.html#maxthreads">MaxThreads</a></code> -
- ÀÌ Áö½Ã¾î´Â worker ¾²·¹µåÀÇ ÃÖ´ë °³¼ö¸¦ Á¦ÇÑÇÑ´Ù. ±ÇÀåÇÏ´Â
- ±âº»°ªÀº <code>ThreadsPerChild 250</code>ÀÌ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code> -
- ÇÑ worker ¾²·¹µå°¡ »ç¿ëÇÒ ½ºÅà ũ±â¸¦ Áö½ÃÇÑ´Ù. ±ÇÀåÇÏ´Â
- ±âº»°ªÀº <code>ThreadStackSize 65536</code>ÀÌ´Ù.</p>
- </li>
-
- <li>
- <p>¾Æ±Ô¸ÕÆ®·Î ÆÄÀϸíÀ» ¹Þ´Â Áö½Ã¾î¿¡´Â À¯´Ð½º ÆÄÀϸíÀÌ
- ¾Æ´Ñ NetWare ÆÄÀϸíÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡°¡
- ³»ºÎÀûÀ¸·Î À¯´Ð½º½Ä ÆÄÀϸíÀ» »ç¿ëÇϱ⶧¹®¿¡ ¹é½½·¡½¬
- ´ë½Å ½½·¡½¬¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¸ðµç Àý´ë°æ·Î¿¡ º¼·ý¸íÀ»
- Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù. º¼·ý¸íÀ» »ý·«ÇÏ¸é ¾ÆÆÄÄ¡´Â
- <code>SYS:</code> º¼·ýÀ̶ó°í À߸ø °¡Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
- </li>
-
- <li>
- <p>NetWare¿ë ¾ÆÆÄÄ¡´Â ¼­¹ö¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê°í ½ÇÇàÇÒ¶§
- ¸ðµâÀ» ÀоîµéÀÏ ¼ö ÀÖ´Ù. º¸Åë ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϸé
- <code>\Apache2\modules</code> µð·ºÅ丮¿¡ ¿©·¯ Ãß°¡ ¸ðµâÀ»
- ¼³Ä¡ÇÑ´Ù. À̵é ȤÀº ´Ù¸¥ ¸ðµâÀ» »ç¿ëÇÏ·Á¸é <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- ¿¹¸¦ µé¾î status ¸ðµâÀ» »ç¿ëÇÑ´Ù¸é:</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/status.nlm
- </code></p></div>
-
- <p><a href="../mod/mod_so.html#creating">ÀоîµéÀÏ ¼ö
- ÀÖ´Â ¸ðµâ ¸¸µé±â</a>¿¡ ´ëÇÑ Á¤º¸µµ ÀÖ´Ù.</p>
- </li>
- </ul>
-
- <h3><a name="use-add" id="use-add">ÀÌ¿ÜÀÇ NetWare Àü¿ë Áö½Ã¾îµé:</a></h3>
-
-
-
- <ul>
- <li><code class="directive"><a href="../mod/core.html#cgimapextension">CGIMapExtension</a></code> -
- CGI ÆÄÀÏ È®ÀåÀÚ¸¦ ½ºÅ©¸³Æ® ÀÎÅÍÇÁ¸®ÅÍ¿Í ¿¬°áÇÑ´Ù.</li>
- </ul>
- <ul>
- <li><code class="directive"><a href="../mod/mod_nw_ssl.html#securelisten">SecureListen</a></code> -
- ƯÁ¤ Æ÷Æ®¸¦ SSL ¾ÏȣȭÇÑ´Ù.</li>
- </ul>
- <ul>
- <li><code class="directive"><a href="../mod/mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></code> -
- ÇÁ·Ï½ÃÇÏ´Â ¼­¹ö¿¡ º¸¾È¿¬°áÇÒ¶§ »ç¿ëÇÒ ½Å·ÚÇÏ´Â
- ÀÎÁõ¼­(certificate)¸¦ Ãß°¡ÇÑ´Ù.</li>
- </ul>
- <ul>
- <li><code class="directive"><a href="../mod/mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></code> -
- ƯÁ¤ ÁÖ¼Ò/Æ÷Æ®·Î ¸Î¾îÁø ¿¬°áÀ» SSL ¿¬°á·Î º¯°æÇÒ ¼ö
- ÀÖ´Ù.</li>
- </ul>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="comp" id="comp">Netware¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ·Á¸é MetroWerks CodeWarrior 6.x ÀÌ»óÀÌ
- ÇÊ¿äÇÏ´Ù. ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ¸é ¾î¶² Netware º¼·ý¿¡¶óµµ ¼³Ä¡ÇÒ
- ¼ö ÀÖ´Ù. ±âº»°ªÀº <code>sys:/Apache2</code> µð·ºÅ丮´Ù.</p>
-
- <p>¼­¹ö¸¦ ½ÇÇàÇϱâ Àü¿¡ <code>conf</code> µð·ºÅ丮¸¦ ÀÛ¼ºÇؾß
- ÇÑ´Ù. ¹èÆ÷º»ÀÇ <code>conf</code> µð·ºÅ丮¿¡ ÀÖ´Â
- <code>HTTPD-STD.CONF</code> ÆÄÀϸíÀ» <code>HTTPD.CONF</code>·Î
- º¯°æÇÑ´Ù. <code>HTTPD.CONF</code> ÆÄÀÏ¿¡¼­ <code>@@Value@@</code>
- Ç¥½Ã¸¦ ã¾Æ¼­ ÀûÀýÇÑ ¼³Á¤À¸·Î ´ëüÇÑ´Ù. <code>conf/magic</code>°ú
- <code>conf/mime.types</code> ÆÄÀϵµ º¹»çÇÑ´Ù. ¾Æ´Ï¸é makefileÀ»
- ½ÇÇàÇÒ¶§ <code>install</code> Å°¿öµå¸¦ »ç¿ëÇÏ¸é ¿ÏÀüÇÑ ¹èÆ÷º»À»
- ¸¸µç´Ù.</p>
-
- <h3><a name="comp-req" id="comp-req">¿ä±¸»çÇ×:</a></h3>
-
-
-
- <p>NetWare¿ë ¾ÆÆÄÄ¡ 2.0À» ÄÄÆÄÀÏÇÏ·Á¸é ´ÙÀ½ °³¹ßµµ±¸°¡
- ÇÊ¿äÇÏ´Ù:</p>
-
- <ul>
- <li>Metrowerks CodeWarrior 6.0 ÀÌ»ó°ú <a href="http://developer.novell.com/ndk/cwpdk.htm">NetWare
- PDK 3.0</a> ÀÌ»ó.</li>
-
- <li><a href="http://developer.novell.com/ndk/libc.htm">NetWare
- Libraries for C (LibC)</a></li>
-
- <li><a href="http://developer.novell.com/ndk/cldap.htm">LDAP
- Libraries for C</a></li>
-
- <li><a href="http://www.gzip.org/zlib/">ZLIB ¾ÐÃà ¶óÀ̺귯¸®
- ¼Ò½ºÄÚµå</a></li>
-
- <li>AWK µµ±¸ (awk, gawk µî). AWK´Â <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>¿¡¼­
- ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. µµ±¸¸¦ <code>awk.exe</code>¶õ À̸§À¸·Î
- À©µµ¿ìÁî °æ·Î¿¡ µÎ¾î¾ß ÇÑ´Ù.</li>
-
- <li>makefileÀ» »ç¿ëÇÏ¿© ÄÄÆÄÀÏÇÏ·Á¸é <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>¿¡
- ÀÖ´Â GNU make ¹öÀü 3.78.1 (GMake)ÀÌ ÇÊ¿äÇÏ´Ù.</li>
- </ul>
-
-
-
- <h3><a name="comp-make" id="comp-make">NetWare makefileÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ:</a></h3>
-
-
-
- <ul>
- <li><code>NOVELLLIBC</code> ȯ°æº¯¼ö¸¦
- <div class="example"><p><code>Set NOVELLLIBC=c:\novell\ndk\libc</code></p></div>¿Í
- °°ÀÌ NetWare Libraries for C SDK À§Ä¡·Î ¼³Á¤ÇÑ´Ù.
- </li>
-
- <li><code>METROWERKS</code> ȯ°æº¯¼ö¸¦
- <div class="example"><p><code>Set METROWERKS=C:\Program Files\Metrowerks\CodeWarrior</code></p></div>¿Í
- °°ÀÌ Metrowerks CodeWarrior ÄÄÆÄÀÏ·¯¸¦ ¼³Ä¡ÇÑ À§Ä¡·Î
- ¼³Á¤ÇÑ´Ù. ±âº» À§Ä¡ÀÎ
- <code>C:\Program Files\Metrowerks\CodeWarrior</code>¿¡
- ¼³Ä¡ÇÏ¿´´Ù¸é, ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù.</li>
-
- <li><code>LDAPSDK</code> ȯ°æº¯¼ö¸¦
- <div class="example"><p><code>Set LDAPSDK=c:\Novell\NDK\cldapsdk\NetWare\libc</code></p></div>¿Í
- °°ÀÌ LDAP Libraries for C¸¦ ¼³Ä¡ÇÑ À§Ä¡·Î ¼³Á¤ÇÑ´Ù.
- </li>
-
- <li><code>ZLIBSDK</code> ȯ°æº¯¼ö¸¦
- <div class="example"><p><code>Set ZLIBSDK=D:\NOVELL\zlib</code></p></div>°ú °°ÀÌ
- ZLib ¶óÀ̺귯¸® ¼Ò½ºÄÚµå À§Ä¡·Î ¼³Á¤ÇÑ´Ù.
- </li>
-
- <li><code>AP_WORK</code> ȯ°æº¯¼ö¸¦ <code>\httpd-2.0</code>
- µð·ºÅ丮ÀÇ Àüü °æ·Î·Î ¼³Á¤ÇÑ´Ù.</li>
-
- <li><code>APR_WORK</code> ȯ°æº¯¼ö¸¦
- <code>\httpd-2.0\srclib\apr</code> µð·ºÅ丮ÀÇ Àüü °æ·Î·Î
- ¼³Á¤ÇÑ´Ù.</li>
-
- <li>AWK µµ±¸¿Í GNU make (<code>gmake.exe</code>) µµ±¸°¡
- ½Ã½ºÅÛÀÇ <code>PATH</code> ȯ°æº¯¼ö¿¡ Æ÷ÇÔµÇÀÖ´ÂÁö
- È®ÀÎÇÑ´Ù.</li>
-
- <li>¼Ò½ºÄڵ带 ´Ù¿î¹Þ¾Æ Àû´çÇÑ µð·ºÅ丮¿¡ ¾ÐÃàÀ» Ǭ´Ù.</li>
-
- <li><code>\httpd-2.0\srclib\apr-util\uri</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿©
- <code>GENURI.nlm</code>À» ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li><code>GENURI.nlm</code> ÆÄÀÏÀ» NetWare ¼­¹öÀÇ
- <code>SYS:</code> º¼·ýÀ¸·Î º¹»çÇÏ°í
- <div class="example"><p><code>SYS:\genuri &gt; sys:\uri_delims.h</code></p></div>
- ¸í·ÉÀ» ½ÇÇàÇÑ´Ù.
- </li>
-
- <li><code>uri_delims.h</code> ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â ÄÄÇ»ÅÍÀÇ
- <code>\httpd-2.0\srclib\apr-util\uri</code> µð·ºÅ丮·Î
- º¹»çÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0\srclib\apr</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿© APRÀ»
- ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0\srclib\pcre</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿©
- <code>DFTABLES.nlm</code>À» ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0\server</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿©
- <code>GENCHARS.nlm</code>À» ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li>°¢ µð·ºÅ丮ÀÇ <code>GENCHARS.nlm</code>°ú
- <code>DFTABLES.nlm</code> ÆÄÀÏÀ» NetWare ¼­¹öÀÇ
- <code>SYS:</code> º¼·ýÀ¸·Î º¹»çÇÏ°í ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù:
- <div class="example"><p><code>
- SYS:\genchars &gt; sys:\test_char.h<br />
- SYS:\dftables &gt; sys:\chartables.c<br />
- </code></p></div>
- </li>
-
- <li><code>test_char.h</code>¿Í <code>chartables.c</code>
- ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â ÄÄÇ»ÅÍÀÇ <code>\httpd-2.0\os\netware</code>
- µð·ºÅ丮·Î º¹»çÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿© ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÑ´Ù.
- <div class="example"><p><code>gmake -f nwgnumakefile install</code></p></div>°ú
- °°ÀÌ install ÆĶó¹ÌÅ͸¦ Ãß°¡ÇÏ¸é ¹èÆ÷¿ë µð·ºÅ丮¸¦ ¸¸µé
- ¼ö ÀÖ´Ù.
- </li>
- </ul>
-
-
-
- <h3><a name="comp-add" id="comp-add">Ãß°¡ make ¿É¼Ç</a></h3>
-
-
-
- <ul>
- <li><code>gmake -f nwgnumakefile</code><p>ÀÏ¹Ý ½ÇÇàÆÄÀÏÀ»
- ÄÄÆÄÀÏÇÏ¿© <code>\release</code> µð·ºÅ丮·Î º¹»çÇÑ´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile DEBUG=1</code><p>µð¹ö±×¿ë
- ½ÇÇàÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© <code>\debug</code> µð·ºÅ丮·Î
- º¹»çÇÑ´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile install</code>
- <p><code>\dist\Apache2</code> µð·ºÅ丮¿¡ ½ÇÇàÆÄÀÏ, ¹®¼­,
- Ãß°¡ Áö¿øÆÄÀÏÀ» Æ÷ÇÔÇÑ ¿ÏÀüÇÑ ¾ÆÆÄÄ¡ ¹èÆ÷º»À» ¸¸µç´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile installdev</code>
- <p>install°ú ºñ½ÁÇÏÁö¸¸, <code>\lib</code>°ú
- <code>\include</code> µð·ºÅ丮¸¦ ¸¸µé°í Çì´õÆÄÀÏ°ú import
- ÆÄÀÏÀ» º¹»çÇÑ´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile clean</code>
- <p><code>DEBUG</code> Á¤ÀÇ À¯¹«¿¡ µû¶ó <code>\release</code>³ª
- <code>\debug</code>¿¡ ÀÖ´Â ¿ÀºêÁ§Æ®ÆÄÀÏ°ú ½ÇÇàÆÄÀÏÀ»
- ¸ðµÎ Áö¿î´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile clobber_all</code><p>clean°ú
- ºñ½ÁÇÏÁö¸¸ µð·ºÅ丮µµ Áö¿î´Ù.</p></li>
- </ul>
-
-
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/netware.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/netware.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/netware.xml b/docs/manual/platform/netware.xml
deleted file mode 100644
index 5f82472667..0000000000
--- a/docs/manual/platform/netware.xml
+++ /dev/null
@@ -1,586 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="netware.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Using Apache With Novell NetWare</title>
-
- <summary>
-
- <p>This document explains how to install, configure and run
- Apache 2.0 under Novell NetWare 6.0 and above. If you find any bugs,
- or wish to contribute in other ways, please use our
- <a href="http://httpd.apache.org/bug_report.html">bug reporting
- page.</a></p>
-
- <p>The bug reporting page and dev-httpd mailing list are <em>not</em>
- provided to answer questions about configuration or running Apache.
- Before you submit a bug report or request, first consult this document, the
- <a href="../faq/">Frequently Asked Questions</a> page and the other
- relevant documentation topics. If you still have a question or problem,
- post it to the <a href="news://developer-forums.novell.com/novell.devsup.webserver">
- novell.devsup.webserver</a> newsgroup, where many Apache users are more than
- willing to answer new and obscure questions about using Apache on NetWare.</p>
-
- <p>Most of this document assumes that you are installing Apache
- from a binary distribution. If you want to compile Apache
- yourself (possibly to help with development, or to track down
- bugs), see the section on <a href="#comp">Compiling Apache for
- NetWare</a> below.</p>
-
- </summary>
-
- <section id="req">
-
- <title>Requirements</title>
-
- <p>Apache 2.0 is designed to run on NetWare 6.0 service pack 3
- and above. If you are running a service pack less
- than SP3, you must install the latest
- <a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
- for C (LibC)</a>.</p>
-
- <p>NetWare service packs are available <a
- href="http://support.novell.com/misc/patlst.htm#nw">here</a>.</p>
-
- <p>Apache 2.0 for NetWare can also be run in a NetWare 5.1 environment
- as long as the latest service pack or the latest version
- of the <a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
- for C (LibC)</a> has been installed . <strong>WARNING:</strong> Apache 2.0
- for NetWare has not been targeted for or tested in this environment.</p>
-
- </section>
-
- <section id="down">
-
- <title>Downloading Apache for NetWare</title>
-
- <p>Information on the latest version of Apache can be found on
- the Apache web server at <a
- href="http://www.apache.org/">http://www.apache.org/</a>. This
- will list the current release, any more recent alpha or
- beta-test releases, together with details of mirror web and
- anonymous ftp sites. Binary builds of the latest releases of
- Apache 2.0 for NetWare can be downloaded from
- <a href="http://www.apache.org/dist/httpd/binaries/netware">here</a>.</p>
-
- </section>
-
- <section id="inst">
-
- <title>Installing Apache for NetWare</title>
-
- <p>There is no Apache install program for NetWare currently. If you
- are building Apache 2.0 for NetWare from source, you will need to
- copy the files over to the server manually.</p>
-
- <p>Follow these steps to install Apache on NetWare from the
- binary download (assuming you will install to
- <code>sys:/apache2</code>):</p>
-
- <ul>
- <li>Unzip the binary download file to the root of the <code>SYS:</code>
- volume (may be installed to any volume)</li>
-
- <li>Edit the <code>httpd.conf</code> file setting <directive
- module="core">ServerRoot</directive> and <directive
- module="core">ServerName</directive> along with any file path values
- to reflect your correct server settings</li>
-
- <li>Add <code>SYS:/APACHE2</code> to the search path, for example:
- <example>SEARCH ADD SYS:\APACHE2</example>
- </li>
-
- </ul>
-
- <p>Follow these steps to install Apache on NetWare manually
- from your own build source (assuming you will install to
- <code>sys:/apache2</code>):</p>
-
- <ul>
- <li>Create a directory called <code>Apache2</code> on a
- NetWare volume</li>
-
- <li>Copy <code>APACHE2.NLM</code>, <code>APRLIB.NLM</code>
- to <code>SYS:/APACHE2</code></li>
-
- <li>Create a directory under <code>SYS:/APACHE2</code>
- called <code>BIN</code></li>
-
- <li>Copy <code>HTDIGEST.NLM</code>, <code>HTPASSWD.NLM</code>,
- <code>HTDBM.NLM</code>, <code>LOGRES.NLM</code>, <code>ROTLOGS.NLM</code>
- to <code>SYS:/APACHE2/BIN</code></li>
-
- <li>Create a directory under <code>SYS:/APACHE2</code>
- called <code>CONF</code></li>
-
- <li>Copy the <code>HTTPD-STD.CONF</code> file to the
- <code>SYS:/APACHE2/CONF</code> directory and rename to
- <code>HTTPD.CONF</code></li>
-
- <li>Copy the <code>MIME.TYPES</code>, <code>CHARSET.CONV</code> and
- <code>MAGIC</code> files to <code>SYS:/APACHE2/CONF</code> directory</li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\ICONS</code>
- to <code>SYS:/APACHE2/ICONS</code></li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\MANUAL</code>
- to <code>SYS:/APACHE2/MANUAL</code></li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\ERROR</code>
- to <code>SYS:/APACHE2/ERROR</code></li>
-
- <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\DOCROOT</code>
- to <code>SYS:/APACHE2/HTDOCS</code></li>
-
- <li>Create the directory <code>SYS:/APACHE2/LOGS</code>
- on the server</li>
-
- <li>Create the directory <code>SYS:/APACHE2/CGI-BIN</code>
- on the server</li>
-
- <li>Create the directory <code>SYS:/APACHE2/MODULES</code>
- and copy all nlm modules into the <code>modules</code> directory</li>
-
- <li>Edit the <code>HTTPD.CONF</code> file searching for all
- <code>@@Value@@</code> markers and replacing them with the
- appropriate setting</li>
-
- <li>Add <code>SYS:/APACHE2</code> to the search path, for example:
- <example>SEARCH ADD SYS:\APACHE2</example>
- </li>
- </ul>
-
- <p>Apache may be installed to other volumes besides the default <code>SYS</code> volume.</p>
-
- <p>During the build process, adding the keyword "install" to the makefile command line
- will automatically produce a complete distribution package under the subdirectory
- <code>DIST</code>. Install Apache by simply copying the distribution that was produced
- by the makfiles to the root of a NetWare volume (see: <a href="#comp">Compiling Apache for
- NetWare</a> below).</p>
-
- </section>
-
- <section id="run">
-
- <title>Running Apache for NetWare</title>
-
- <p>To start Apache just type <code>apache</code> at the
- console. This will load apache in the OS address space. If you
- prefer to load Apache in a protected address space you may
- specify the address space with the load statement as follows:</p>
-
- <example>
- load address space = apache2 apache2
- </example>
-
- <p>This will load Apache into an address space called apache2.
- Running multiple instances of Apache concurrently on NetWare is
- possible by loading each instance into its own protected
- address space.</p>
-
- <p>After starting Apache, it will be listening to port 80
- (unless you changed the <directive module="mpm_common">Listen</directive>
- directive in the configuration files).
- To connect to the server and access the default page,
- launch a browser and enter the server's name or address. This
- should respond with a welcome page, and a link to the Apache
- manual. If nothing happens or you get an error, look in the
- <code>error_log</code> file in the <code>logs</code>
- directory.</p>
-
- <p>Once your basic installation is working, you should
- configure it properly by editing the files in the
- <code>conf</code> directory.</p>
-
- <p>To unload Apache running in the OS address space just type
- the following at the console:</p>
-
- <example>
- unload apache2
- </example>
-
- <p>or</p>
-
- <example>
- apache2 shutdown
- </example>
-
- <p>If apache is running in a protected address space specify the
- address space in the unload statement:</p>
-
- <example>
- unload address space = apache2 apache2
- </example>
-
- <p>When working with Apache it is important to know how it will
- find the configuration files. You can specify a configuration
- file on the command line in two ways:</p>
-
- <ul>
- <li><code>-f</code> specifies a path to a particular
- configuration file</li>
- </ul>
-
- <example>
- apache2 -f "vol:/my server/conf/my.conf"
- </example>
-
- <example>
- apache -f test/test.conf
- </example>
-
- <p>In these cases, the proper <directive module="core">ServerRoot</directive>
- should be set in the configuration file.</p>
-
- <p>If you don't specify a configuration file name with <code>-f</code>,
- Apache will use the file name compiled into the server, usually
- <code>conf/httpd.conf</code>. Invoking Apache with the <code>-V</code>
- switch will display this value labeled as <code>SERVER_CONFIG_FILE</code>.
- Apache will then determine its <directive module="core">ServerRoot</directive>
- by trying the following, in this order:</p>
-
- <ul>
- <li>A <code>ServerRoot</code> directive via a
- <code>-C</code> switch.</li>
-
- <li>The <code>-d</code> switch on the command line.</li>
-
- <li>Current working directory</li>
-
- <li>The server root compiled into the server.</li>
- </ul>
-
- <p>The server root compiled into the server is usually <code>sys:/apache2</code>.
- invoking apache with the <code>-V</code> switch will display this value labeled as
- <code>HTTPD_ROOT</code>.</p>
-
- <p>Apache 2.0 for NetWare includes a set of command line directives that can
- be used to modify or display information about the running instance of the
- web server. These directives are only available while Apache is running. Each
- of these directives must be preceded by the keyword <code>APACHE2</code>.</p>
-
- <dl>
- <dt>RESTART</dt>
- <dd>Instructs Apache to terminate all running worker
- threads as they become idle, reread the configuration file and restart each
- worker thread based on the new configuration.</dd>
-
- <dt>VERSION</dt>
- <dd>Displays version information about the currently
- running instance of Apache.</dd>
-
- <dt>MODULES</dt>
- <dd>Displays a list of loaded modules both built-in
- and external.</dd>
-
- <dt>DIRECTIVES</dt>
- <dd>Displays a list of all available directives.</dd>
-
- <dt>SETTINGS</dt>
- <dd>Enables or disables the thread status display
- on the console. When enabled, the state of each running threads is displayed
- on the Apache console screen.</dd>
-
- <dt>SHUTDOWN</dt>
- <dd>Terminates the running instance of the Apache
- web server.</dd>
-
- <dt>HELP</dt>
- <dd>Describes each of the runtime directives.</dd>
- </dl>
-
- <p>By default these directives are issued against the instance of Apache running
- in the OS address space. To issue a directive against a specific instance running
- in a protected address space, include the -p parameter along with the name of the
- address space. For more information type "apache2 Help" on the command line.</p>
-
- </section>
-
- <section id="use">
-
- <title>Configuring Apache for NetWare</title>
-
- <p>Apache is configured by reading configuration files usually stored
- in the <code>conf</code> directory. These are the same as files used
- to configure the Unix version, but there are a few different directives for
- Apache on NetWare. See the <a href="../">Apache
- documentation</a> for all the available directives.</p>
-
- <p>The main differences in Apache for NetWare are:</p>
-
- <ul>
- <li>
- <p>Because Apache for NetWare is multithreaded, it does not
- use a separate process for each request, as Apache does on some Unix
- implementations. Instead there are only threads running: a parent
- thread, and multiple child or worker threads which handle the requests.</p>
-
- <p>Therefore the "process"-management directives are different:</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive> -
- Like the Unix directive, this controls how many requests
- a worker thread will serve before exiting. The recommended default,
- <code>MaxRequestsPerChild 0</code>, causes the thread to continue servicing
- request indefinitely. It is recommended on NetWare, unless there is some
- specific reason, that this directive always remain set to <code>0</code>.</p>
-
- <p><directive module="mpm_common">StartThreads</directive> -
- This directive tells the server how many threads it should start initially.
- The recommended default is <code>StartThreads 50</code>.</p>
-
- <p><directive module="mpm_common">MinSpareThreads</directive> -
- This directive instructs the server to spawn additional worker threads
- if the number of idle threads ever falls below this value. The recommended
- default is <code>MinSpareThreads 10</code>.</p>
-
- <p><directive module="mpm_common">MaxSpareThreads</directive> -
- This directive instructs the server to begin terminating worker threads
- if the number of idle threads ever exceeds this value. The recommended
- default is <code>MaxSpareThreads 100</code>.</p>
-
- <p><directive module="mpm_netware">MaxThreads</directive> -
- This directive limits the total number of work threads to a maximum
- value. The recommended default is <code>ThreadsPerChild 250</code>.</p>
-
- <p><directive module="mpm_common">ThreadStackSize</directive> -
- This directive tells the server what size of stack to use
- for the individual worker thread. The recommended default
- is <code>ThreadStackSize 65536</code>.</p>
- </li>
-
- <li>
- <p>The directives that accept filenames as arguments must use
- NetWare filenames instead of Unix names. However, because Apache
- uses Unix-style names internally, forward slashes must be used
- rather than backslashes. It is recommended that all rooted file paths
- begin with a volume name. If omitted, Apache will assume the
- <code>SYS:</code> volume which may not be correct.</p>
- </li>
-
- <li>
- <p>Apache for NetWare has the ability to load modules at
- runtime, without recompiling the server. If Apache is
- compiled normally, it will install a number of optional
- modules in the <code>\Apache2\modules</code> directory.
- To activate these, or other modules, the <directive
- module="mod_so">LoadModule</directive> directive
- must be used. For example, to active the status module, use
- the following:</p>
-
- <example>
- LoadModule status_module modules/status.nlm
- </example>
-
- <p>Information on <a
- href="../mod/mod_so.html#creating">creating loadable
- modules</a> is also available.</p>
- </li>
- </ul>
-
- <section id="use-add">
-
- <title>Additional NetWare specific directives:</title>
-
- <ul>
- <li><directive module="core">CGIMapExtension</directive> -
- This directive maps a CGI file extension to a script interpreter.</li>
- </ul>
- <ul>
- <li><directive module="mod_nw_ssl">SecureListen</directive> -
- Enables SSL encryption for a specified port.</li>
- </ul>
- <ul>
- <li><directive module="mod_nw_ssl">NWSSLTrustedCerts</directive> -
- Adds trusted certificates that are used to create secure connections to proxied servers.</li>
- </ul>
- <ul>
- <li><directive module="mod_nw_ssl">NWSSLUpgradeable</directive> -
- Allow a connection created on the specified address/port to be upgraded to an SSL connection.</li>
- </ul>
-
- </section>
-
- </section>
-
- <section id="comp">
-
- <title>Compiling Apache for NetWare</title>
-
- <p>Compiling Apache requires MetroWerks CodeWarrior 6.x or higher. Once
- Apache has been built, it can be installed to the root of any NetWare
- volume. The default is the <code>sys:/Apache2</code> directory.</p>
-
- <p>Before running the server you must fill out the <code>conf</code>
- directory. Copy the file <code>HTTPD-STD.CONF</code> from the distribution
- <code>conf</code> directory and rename it to <code>HTTPD.CONF</code>.
- Edit the <code>HTTPD.CONF</code> file searching for all <code>@@Value@@</code>
- markers and replacing them with the appropriate setting. Copy over
- the <code>conf/magic</code> and <code>conf/mime.types</code> files as well.
- Alternatively, a complete distribution can be built by including the keyword
- <code>install</code> when invoking the makefiles.</p>
-
- <section id="comp-req">
-
- <title>Requirements:</title>
-
- <p>The following development tools are required to build
- Apache 2.0 for NetWare:</p>
-
- <ul>
- <li>Metrowerks CodeWarrior 6.0 or higher with the
- <a href="http://developer.novell.com/ndk/cwpdk.htm">NetWare PDK 3.0</a>
- or higher.</li>
-
- <li><a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
- for C (LibC)</a></li>
-
- <li><a href="http://developer.novell.com/ndk/cldap.htm">LDAP Libraries
- for C</a></li>
-
- <li><a href="http://www.gzip.org/zlib/">ZLIB Compression Library source code</a></li>
-
- <li>AWK utility (awk, gawk or similar). AWK can be downloaded from
- <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.
- The utility must be found in your windows path and must be named <code>awk.exe</code>.</li>
-
- <li>To build using the makefiles, you will need GNU make version 3.78.1 (GMake) available at
- <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.</li>
- </ul>
-
- </section>
-
- <section id="comp-make">
-
- <title>Building Apache using the NetWare makefiles:</title>
-
- <ul>
- <li>Set the environment variable <code>NOVELLLIBC</code> to the
- location of the NetWare Libraries for C SDK, for example:
- <example>Set NOVELLLIBC=c:\novell\ndk\libc</example>
- </li>
-
- <li>Set the environment variable <code>METROWERKS</code> to the
- location where you installed the Metrowerks CodeWarrior compiler,
- for example:
- <example>Set METROWERKS=C:\Program Files\Metrowerks\CodeWarrior</example>
- If you installed to the default location <code>C:\Program
- Files\Metrowerks\CodeWarrior</code>, you don't need to set this.</li>
-
- <li>Set the environment variable <code>LDAPSDK</code> to the
- location where you installed the LDAP Libraries for C, for example:
- <example>Set LDAPSDK=c:\Novell\NDK\cldapsdk\NetWare\libc</example>
- </li>
-
- <li>Set the environment variable <code>ZLIBSDK</code> to the
- location where you installed the source code for the ZLib Library,
- for example:
- <example>Set ZLIBSDK=D:\NOVELL\zlib</example>
- </li>
-
- <li>Set the environment variable <code>AP_WORK</code> to the full path of
- the <code>\httpd-2.0</code> directory.</li>
-
- <li>Set the environment variable <code>APR_WORK</code> to the full path of
- the <code>\httpd-2.0\srclib\apr</code> directory.</li>
-
- <li>Make sure that the path to the AWK utility and the GNU make utility
- (<code>gmake.exe</code>) have been included in the system's
- <code>PATH</code> environment variable.</li>
-
- <li>Download the source code and unzip to an appropriate directory on
- your workstation.</li>
-
- <li>Change directory to <code>\httpd-2.0\srclib\apr-util\uri</code> and build
- <code>GENURI.nlm</code> by running "<code>gmake -f nwgnumakefile</code>".</li>
-
- <li>Copy the file <code>GENURI.nlm</code> to the <code>SYS:</code> volume
- of a NetWare server and run using the following command:
- <example>SYS:\genuri &gt; sys:\uri_delims.h</example>
- </li>
-
- <li>Copy the file <code>uri_delims.h</code> to the directory
- <code>\httpd-2.0\srclib\apr-util\uri</code> on the build machine.</li>
-
- <li>Change directory to <code>\httpd-2.0\srclib\apr</code> and build APR
- by running "<code>gmake -f nwgnumakefile</code>"</li>
-
- <li>Change directory to <code>\httpd-2.0\srclib\pcre</code> and build
- <code>DFTABLES.nlm</code> by running "<code>gmake -f nwgnumakefile</code>"</li>
-
- <li>Change directory to <code>\httpd-2.0\server</code> and build
- <code>GENCHARS.nlm</code> by running "<code>gmake -f nwgnumakefile</code>"</li>
-
- <li>Copy the files <code>GENCHARS.nlm</code> and <code>DFTABLES.nlm</code>
- from their respective directories to the <code>SYS:</code> volume of a
- NetWare server and run them using the following commands:
- <example>
- SYS:\genchars &gt; sys:\test_char.h<br />
- SYS:\dftables &gt; sys:\chartables.c<br />
- </example>
- </li>
-
- <li>Copy the files <code>test_char.h</code> and <code>chartables.c</code>
- to the directory <code>\httpd-2.0\os\netware</code> on the build machine.</li>
-
- <li>Change directory to <code>\httpd-2.0</code> and build Apache by running
- "<code>gmake -f nwgnumakefile</code>". You can create a distribution directory by
- adding an install parameter to the command, for example:
- <example>gmake -f nwgnumakefile install</example>
- </li>
- </ul>
-
- </section>
-
- <section id="comp-add">
-
- <title>Additional make options</title>
-
- <ul>
- <li><code>gmake -f nwgnumakefile</code><p>Builds release versions of all of the
- binaries and copies them to a <code>\release</code> destination directory.</p></li>
-
- <li><code>gmake -f nwgnumakefile DEBUG=1</code><p>Builds debug versions of all of the
- binaries and copies them to a <code>\debug</code> destination directory.</p></li>
-
- <li><code>gmake -f nwgnumakefile install</code><p>Creates a complete Apache
- distribution with binaries, docs and additional support files in a
- <code>\dist\Apache2</code> directory.</p></li>
-
- <li><code>gmake -f nwgnumakefile installdev</code><p>Same as install but also creates a
- <code>\lib</code> and <code>\include</code> directory in the destination directory
- and copies headers and import files.</p></li>
-
- <li><code>gmake -f nwgnumakefile clean</code><p>Cleans all object files and binaries
- from the <code>\release</code> or <code>\debug</code> build areas depending on whether
- <code>DEBUG</code> has been defined.</p></li>
-
- <li><code>gmake -f nwgnumakefile clobber_all</code><p>Same as clean and also deletes
- the distribution directory if it exists.</p></li>
- </ul>
-
- </section>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/platform/netware.xml.ko b/docs/manual/platform/netware.xml.ko
deleted file mode 100644
index 1c12f2cb52..0000000000
--- a/docs/manual/platform/netware.xml.ko
+++ /dev/null
@@ -1,591 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="netware.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ëÇϱâ</title>
-
- <summary>
-
- <p>ÀÌ ¹®¼­´Â Novell NetWare 6.0 À̻󿡼­ ¾ÆÆÄÄ¡ 2.0À» ¼³Ä¡,
- ¼³Á¤, ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. ¹ö±×¸¦ ã¾Ò°Å³ª ´Ù¸¥ ¹æ¹ýÀ¸·Î
- µ½°í½Í´Ù¸é, <a href="http://httpd.apache.org/bug_report.html">¹ö±×
- º¸°í ÆäÀÌÁö</a>¸¦ ÀÌ¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <p>¹ö±× º¸°í ÆäÀÌÁö³ª dev-httpd ¸ÞÀϸµ¸®½ºÆ®´Â ¾ÆÆÄÄ¡ ¼³Á¤°ú
- ½ÇÇà¿¡ ´ëÇÑ Áú¹®À» ´äÇÏÁö <em>¾Ê´Â´Ù</em>. ¹ö±×¸¦ º¸°íÇϱâ
- Àü¿¡ ¸ÕÀú ÀÌ ¹®¼­¿Í <a href="../faq/">ÀÚÁÖ ¹°¾îº¸´Â Áú¹®
- (FAQ)</a> ÆäÀÌÁö, ´Ù¸¥ °ü·Ã¹®¼­¸¦ »ìÆìºÁ¶ó. ±×·¡µµ ±Ã±ÝÇÑ
- Á¡À̳ª ¹®Á¦°¡ ÀÖ´Ù¸é, NetWare¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¿¡ ´ëÇÑ ¾î·Æ°í
- »õ·Î¿î Áú¹®À» ´äÇØÁÙ ¸¹Àº ¾ÆÆÄÄ¡ »ç¿ëÀÚ°¡ ÀÖ´Â <a
- href="news://developer-forums.novell.com/novell.devsup.webserver">
- novell.devsup.webserver</a> ´º½º±×·ì¿¡ ±ÛÀ» ¿Ã¸®±æ ¹Ù¶õ´Ù.</p>
-
- <p>ÀÌ ¹®¼­´Â ¹ÙÀ̳ʸ® ¹èÆ÷º»À¸·Î ¾ÆÆÄÄ¡¸¦ ¼³Ä¡Çß´Ù°í °¡Á¤ÇÑ´Ù.
- (¾Æ¸¶µµ °³¹ß¿¡ µµ¿òÀ» Áְųª ¹ö±×¸¦ ã±âÀ§ÇØ) Á÷Á¢ ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÏ·Á¸é ¾Æ·¡ <a href="#comp">NetWare¿¡¼­ ¾ÆÆÄÄ¡
- ÄÄÆÄÀÏÇϱâ</a> ÀýÀ» Âü°íÇ϶ó.</p>
-
- </summary>
-
- <section id="req">
-
- <title>¿ä±¸Á¶°Ç</title>
-
- <p>¾ÆÆÄÄ¡ 2.0Àº NetWare 6.0 service pack 3 À̻󿡼­ µ¿ÀÛÇϵµ·Ï
- ¼³°èµÇ¾ú´Ù. SP3º¸´Ù ³·Àº service packÀ» »ç¿ëÇÑ´Ù¸é ÃÖ½Å
- <a href="http://developer.novell.com/ndk/libc.htm">NetWare
- Libraries for C (LibC)</a>¸¦ ¼³Ä¡ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>NetWare service pack˼ <a
- href="http://support.novell.com/misc/patlst.htm#nw">¿©±â</a>¿¡
- ÀÖ´Ù.</p>
-
- <p>ÃֽŠservice packÀ̳ª ÃֽŠ¹öÀü <a
- href="http://developer.novell.com/ndk/libc.htm">NetWare
- Libraries for C (LibC)</a>¸¦ ¼³Ä¡Çß´Ù¸é NetWare 5.1 ȯ°æ¿¡¼­µµ
- NetWare¿ë ¾ÆÆÄÄ¡ 2.0À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù. <strong>°æ°í:</strong>
- NetWare¿ë ¾ÆÆÄÄ¡ 2.0Àº ÀÌ È¯°æÀ» °í·ÁÇÏÁö ¾Ê¾Ò°í Å×½ºÆ®ÇÏÁö
- ¾Ê¾Ò´Ù.</p>
-
- </section>
-
- <section id="down">
-
- <title>NetWare¿ë ¾ÆÆÄÄ¡ ´Ù¿î¹Þ±â</title>
-
- <p>¾ÆÆÄÄ¡ ÃֽŠ¹öÀü¿¡ ´ëÇÑ Á¤º¸´Â <a
- href="http://www.apache.org/">http://www.apache.org/</a>¿¡¼­
- (¾ÆÆÄÄ¡ À¥¼­¹ö) ãÀ» ¼ö ÀÖ´Ù. ¿©±â¿¡´Â ÇöÀç ¹öÀü°ú ÃÖ±Ù
- ¾ËÆÄ/º£Å¸Å×½ºÆ® ¹öÀü, ¹Ì·¯ À¥»çÀÌÆ®¿Í ftp »çÀÌÆ® Á¤º¸°¡
- ÀÖ´Ù. NetWare¿ë ¾ÆÆÄÄ¡ 2.0ÀÇ ÃֽŠ¹ÙÀ̳ʸ® ¹èÆ÷º»Àº <a
- href="http://www.apache.org/dist/httpd/binaries/netware">¿©±â</a>¿¡¼­
- ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="inst">
-
- <title>NetWare¿ë ¾ÆÆÄÄ¡ ¼³Ä¡Çϱâ</title>
-
- <p>ÇöÀç NetWare¿ë ¾ÆÆÄÄ¡ ¼³Ä¡ÇÁ·Î±×·¥Àº ¾ø´Ù. NetWare¿ë
- ¾ÆÆÄÄ¡ 2.0 ¼Ò½º¸¦ Á÷Á¢ ÄÄÆÄÀÏÇÑ´Ù¸é ÆÄÀÏÀ» ¼­¹ö·Î Á÷Á¢
- º¹»çÇØÁà¾ß ÇÑ´Ù.</p>
-
- <p>¹ÙÀ̳ʸ®·Î ´Ù¿î¹ÞÀº NetWare¿ë ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ´Â °úÁ¤Àº
- ´ÙÀ½°ú °°´Ù (<code>sys:/apache2</code>¿¡ ¼³Ä¡ÇÑ´Ù°í °¡Á¤ÇÑ´Ù):</p>
-
- <ul>
- <li>¹ÙÀ̳ʸ®·Î ´Ù¿î¹ÞÀº ¾ÐÃàÆÄÀÏÀ» <code>SYS:</code> º¼·ý
- ÃÖ»óÀ§ µð·ºÅ丮¿¡ Ǭ´Ù (´Ù¸¥ º¼·ý¿¡ ¼³Ä¡Çصµ µÈ´Ù)</li>
-
- <li><code>httpd.conf</code> ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© <directive
- module="core">ServerRoot</directive>¿Í <directive
- module="core">ServerName</directive>°ú ÆÄÀÏ°æ·Î °ªÀ» ¼­¹ö¿¡
- ¾Ë¸Â°Ô ÁöÁ¤ÇÑ´Ù</li>
-
- <li>¿¹¸¦ µé¾î <example>SEARCH ADD SYS:\APACHE2</example>¿Í
- °°ÀÌ °Ë»ö°æ·Î¿¡ <code>SYS:/APACHE2</code>¸¦ Ãß°¡ÇÑ´Ù
- </li>
-
- </ul>
-
- <p>Á÷Á¢ ¼Ò½º¸¦ ÄÄÆÄÀÏÇÑ °æ¿ì NetWare¿¡ ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ´Â
- ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù (<code>sys:/apache2</code>¿¡ ¼³Ä¡ÇÑ´Ù°í
- °¡Á¤ÇÑ´Ù):</p>
-
- <ul>
- <li>NetWare º¼·ý¿¡ <code>Apache2</code>¶ó´Â µð·ºÅ丮¸¦
- ¸¸µç´Ù</li>
-
- <li><code>APACHE2.NLM</code>°ú <code>APRLIB.NLM</code>À»
- <code>SYS:/APACHE2</code>¿¡ º¹»çÇÑ´Ù</li>
-
- <li><code>SYS:/APACHE2</code> ¾Æ·¡¿¡ <code>BIN</code>À̶ó´Â
- µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li><code>HTDIGEST.NLM</code>, <code>HTPASSWD.NLM</code>,
- <code>HTDBM.NLM</code>, <code>LOGRES.NLM</code>,
- <code>ROTLOGS.NLM</code>À» <code>SYS:/APACHE2/BIN</code>¿¡
- º¹»çÇÑ´Ù</li>
-
- <li><code>SYS:/APACHE2</code> ¾Æ·¡¿¡ <code>CONF</code>¶ó´Â
- µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li><code>HTTPD-STD.CONF</code> ÆÄÀÏÀ»
- <code>SYS:/APACHE2/CONF</code>¿¡ º¹»çÇÏ°í ÆÄÀϸíÀ»
- <code>HTTPD.CONF</code>·Î º¯°æÇÑ´Ù</li>
-
- <li><code>MIME.TYPES</code>, <code>CHARSET.CONV</code>,
- <code>MAGIC</code> ÆÄÀÏÀ» <code>SYS:/APACHE2/CONF</code>
- µð·ºÅ丮¿¡ º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\ICONS</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/ICONS</code>·Î º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\MANUAL</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/MANUAL</code>·Î º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\ERROR</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/ERROR</code>·Î º¹»çÇÑ´Ù</li>
-
- <li><code>\HTTPD-2.0\DOCS\DICROOT</code>¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ°ú
- ÇÏÀ§µð·ºÅ丮¸¦ <code>SYS:/APACHE2/HTDOCS</code>·Î º¹»çÇÑ´Ù</li>
-
- <li>¼­¹ö¿¡ <code>SYS:/APACHE2/LOGS</code> µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li>¼­¹ö¿¡ <code>SYS:/APACHE2/APACHE2/CGI-BIN</code>À̶õ
- µð·ºÅ丮¸¦ ¸¸µç´Ù</li>
-
- <li><code>SYS:/APACHE2/MODULES</code> µð·ºÅ丮¸¦ ¸¸µé°í
- ¸ðµç nlm ¸ðµâÀ» <code>modules</code> µð·ºÅ丮·Î º¹»çÇÑ´Ù</li>
-
- <li><code>HTTPD.CONF</code> ÆÄÀÏÀÇ ¸ðµç <code>@@Value@@</code>
- Ç¥½Ã¸¦ ÀûÀýÇÑ ¼³Á¤À¸·Î ´ëüÇÑ´Ù</li>
-
- <li><example>SEARCH ADD SYS:\APACHE2</example> °°ÀÌ °Ë»ö°æ·Î¿¡
- <code>SYS:/APACHE2</code>¸¦ Ãß°¡ÇÑ´Ù
- </li>
- </ul>
-
- <p>±âº» <code>SYS</code> º¼·ýÀÌ ¾Æ´Ñ ´Ù¸¥ º¼·ý¿¡µµ ¾ÆÆÄÄ¡¸¦
- ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>makefile ¸í·É¾î¿¡ "install" Å°¿öµå¸¦ »ç¿ëÇϸé ÄÄÆÄÀϽÃ
- ÀÚµ¿À¸·Î <code>DIST</code> ÇÏÀ§µð·ºÅ丮¿¡ ¿ÏÀüÇÑ ¹èÆ÷º»À»
- ¸¸µç´Ù. makefile·Î ¸¸µç ¹èÆ÷º»À» NetWare º¼·ý ÃÖ»óÀ§ µð·ºÅ丮·Î
- º¹»çÇÏ¸é ¾ÆÆÄÄ¡°¡ ¼³Ä¡µÈ´Ù (¾Æ·¡ <a href="#comp">NetWare¿ë
- ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</a> Âü°í).</p>
-
- </section>
-
- <section id="run">
-
- <title>NetWare¿ë ¾ÆÆÄÄ¡ ½ÇÇàÇϱâ</title>
-
- <p>¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ·Á¸é Äֿܼ¡¼­ <code>apache</code>¸¦ ÀÔ·ÂÇϸé
- µÈ´Ù. ±×·¯¸é ¿î¿µÃ¼Á¦ ÁÖ¼Ò¿µ¿ª¿¡ ¾ÆÆÄÄ¡¸¦ ÀоîµéÀδÙ.
- º¸È£ÁÖ¼Ò¿µ¿ª¿¡ ¾ÆÆÄÄ¡¸¦ ÀоîµéÀÌ·Á¸é ´ÙÀ½°ú °°ÀÌ load ¸í·É¾î·Î
- ÁÖ¼Ò¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù:</p>
-
- <example>
- load address space = apache2 apache2
- </example>
-
- <p>±×·¯¸é ¾ÆÆÄÄ¡¸¦ apache2¶ó´Â ÁÖ¼Ò¿µ¿ª¿¡ ÀоîµéÀδÙ.
- NetWare´Â ¿©·¯ ¾ÆÆÄÄ¡¸¦ °¢°¢ ´Ù¸¥ º¸È£ÁÖ¼Ò¿µ¿ª¿¡ Àоîµé¿©¼­
- ¿©·¯ ¾ÆÆÄÄ¡¸¦ µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡°¡ ½ÃÀÛÇϸé (¼³Á¤ÆÄÀÏ¿¡¼­ <directive
- module="mpm_common">Listen</directive> Áö½Ã¾î¸¦ ¼öÁ¤ÇÏÁö
- ¾Ê´ÂÇÑ) Æ÷Æ® 80¹øÀ» ±â´Ù¸°´Ù. ºê¶ó¿ìÀú¸¦ ½ÃÀÛÇÏ¿© ¼­¹ö¸í
- ȤÀº ¼­¹ö ÁÖ¼Ò¸¦ ÀÔ·ÂÇÏ¸é ¼­¹ö¿¡ Á¢¼ÓÇÏ¿© ±âº»ÆäÀÌÁö¿¡
- Á¢±ÙÇÑ´Ù. ¾ÆÆÄÄ¡ ¼³¸í¼­ ¸µÅ©°¡ Àִ ȯ¿µÆäÀÌÁö°¡ ³ª¿Í¾ß
- ÇÑ´Ù. ¾Æ¹« Àϵµ ¾ø°Å³ª ¿À·ù°¡ ¹ß»ýÇϸé <code>logs</code>
- µð·ºÅ丮¿¡ ÀÖ´Â <code>error_log</code> ÆÄÀÏÀ» »ìÆìºÁ¶ó.</p>
-
- <p>±âº» ¼³Ä¡°¡ µ¿ÀÛÇϸé <code>conf</code> µð·ºÅ丮¿¡ ÀÖ´Â
- ÆÄÀÏÀ» ÀûÀýÈ÷ ¼³Á¤ÇÑ´Ù.</p>
-
- <p>¿î¿µÃ¼Á¦ ÁÖ¼Ò¿µ¿ª¿¡¼­ ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡¸¦ ³»¸±·Á¸é Äֿܼ¡
- ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù:</p>
-
- <example>
- unload apache2
- </example>
-
- <p>ȤÀº</p>
-
- <example>
- apache2 shutdown
- </example>
-
- <p>º¸È£ÁÖ¼Ò¿µ¿ª¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇß´Ù¸é unload ¸í·É¾î¿¡
- ÁÖ¼Ò¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù:</p>
-
- <example>
- unload address space = apache2 apache2
- </example>
-
- <p>¾ÆÆÄÄ¡°¡ ¼³Á¤ÆÄÀÏ À§Ä¡¸¦ ã´Â ¹æ¹ýÀ» ¾Ë¾ÆµÎ¾î¾ß ÇÑ´Ù.
- ¸í·ÉÇà¿¡¼­ ¼³Á¤ÆÄÀÏÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº µÎ°¡Áö´Ù:</p>
-
- <ul>
- <li><code>-f</code>´Â ƯÁ¤ ¼³Á¤ÆÄÀÏ °æ·Î¸¦ ÁöÁ¤ÇÑ´Ù</li>
- </ul>
-
- <example>
- apache2 -f "vol:/my server/conf/my.conf"
- </example>
-
- <example>
- apache -f test/test.conf
- </example>
-
- <p>ÀÌ °æ¿ì ¼³Á¤ÆÄÀÏÀº ¿Ã¹Ù¸¥ <directive
- module="core">ServerRoot</directive>¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p><code>-f</code>·Î ¼³Á¤ÆÄÀϸíÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, ¾ÆÆÄÄ¡´Â
- ¼­¹ö¿¡ ÄÄÆÄÀÏµÈ ÆÄÀϸíÀ» (º¸Åë <code>conf/httpd.conf</code>)
- »ç¿ëÇÑ´Ù. <code>-V</code> ¿É¼ÇÀ¸·Î ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé
- <code>SERVER_CONFIG_FILE</code>À̶ó´Â Ç׸ñÀ» º¸¿©ÁØ´Ù.
- ¾ÆÆÄÄ¡´Â ´ÙÀ½ ¼ø¼­´ë·Î <directive
- module="core">ServerRoot</directive>¸¦ ã´Â´Ù:</p>
-
- <ul>
- <li><code>-C</code> ¿É¼ÇÀÇ <code>ServerRoot</code> Áö½Ã¾î.</li>
-
- <li>¸í·ÉÇàÀÇ <code>-d</code> ¿É¼Ç.</li>
-
- <li>ÇöÀç µð·ºÅ丮</li>
-
- <li>¼­¹ö¿¡ ÄÄÆÄÀÏµÈ server root.</li>
- </ul>
-
- <p>¼­¹ö¿¡ ÄÄÆÄÀÏµÈ server root´Â º¸Åë
- <code>sys:/apache2</code>ÀÌ´Ù. <code>-V</code> ¿É¼ÇÀ¸·Î
- ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé <code>HTTPD_ROOT</code>¶ó´Â Ç׸ñÀ» º¸¿©ÁØ´Ù.</p>
-
- <p>NetWare¿ë ¾ÆÆÄÄ¡ 2.0¿¡´Â ½ÇÇàÁßÀÎ À¥¼­¹ö¸¦ Á×À̰ųª Á¤º¸¸¦
- ¾Ë·ÁÁÖ´Â ¸í·ÉÇà Áö½Ã¾î°¡ ÀÖ´Ù. À̵é Áö½Ã¾î´Â ¾ÆÆÄÄ¡ µ¿ÀÛÁß¿¡¸¸
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áö½Ã¾î ¾Õ¿¡´Â <code>APACHE2</code> Å°¿öµå¸¦
- ºÙ¿©¾ß ÇÑ´Ù.</p>
-
- <dl>
- <dt>RESTART</dt>
- <dd>¸ðµç ¾²·¹µå°¡ ½¬´Â »óÅÂÀ϶§ ¾ÆÆÄÄ¡¸¦ Á×ÀÌ°í, ¼³Á¤ÆÄÀÏÀ»
- ´Ù½Ã ÀÐÀºÈÄ »õ·Î¿î ¼³Á¤¿¡ µû¶ó worker ¾²·¹µåµéÀ» Àç½ÃÀÛÇÑ´Ù.</dd>
-
- <dt>VERSION</dt>
- <dd>ÇöÀç ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡ ¹öÀü Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt>MODULES</dt>
- <dd>±âº» ¸ðµâ°ú ¿ÜºÎ ¸ðµâ ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt>DIRECTIVES</dt>
- <dd>¸ðµç Áö½Ã¾î ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt>SETTINGS</dt>
- <dd>Äֿܼ¡ ¾²·¹µå »óÅ ǥ½Ã¸¦ º¸À̰ųª ¾ø¾Ø´Ù. »óŸ¦
- º¸À̸é, ¾ÆÆÄÄ¡ ÄܼÖâ¿¡ µ¿ÀÛÇÏ´Â ¾²·¹µåµéÀÇ »óÅ°¡ ³ª¿Â´Ù.</dd>
-
- <dt>SHUTDOWN</dt>
- <dd>½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ Á×ÀδÙ.</dd>
-
- <dt>HELP</dt>
- <dd>½ÇÇà ¿É¼ÇµéÀ» ¼³¸íÇÑ´Ù.</dd>
- </dl>
-
- <p>±âº»ÀûÀ¸·Î ÀÌ Áö½Ã¾îµéÀº ¿î¿µÃ¼Á¦ ÁÖ¼Ò¿µ¿ª¿¡¼­ ½ÇÇàÁßÀÎ
- ¾ÆÆÄÄ¡¸¦ ´ë»óÀ¸·Î ÇÑ´Ù. ¾ÆÆÄÄ¡°¡ º¸È£ÁÖ¼Ò¿µ¿ª¿¡¼­ ½ÇÇàÁßÀ̶ó¸é,
- -p¿Í ÁÖ¼Ò¿µ¿ª À̸§À» Ãß°¡ÇÑ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é ¸í·ÉÇà¿¡
- "apache2 Help"¸¦ ÀÔ·ÂÇÑ´Ù.</p>
-
- </section>
-
- <section id="use">
-
- <title>NetWare¿ë ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</title>
-
- <p>¾ÆÆÄÄ¡´Â º¸Åë <code>conf</code> µð·ºÅ丮¿¡ ÀÖ´Â ¼³Á¤ÆÄÀÏ·Î
- ¼³Á¤ÇÑ´Ù. ÀÌ ÆÄÀÏÀº À¯´Ð½º¿ë°ú °°Áö¸¸, NetWare¿ë ¾ÆÆÄÄ¡¿¡´Â
- Á¶±Ý ´Ù¸¥ Áö½Ã¾îµéÀÌ ÀÖ´Ù. »ç¿ë°¡´ÉÇÑ ¸ðµç Áö½Ã¾î¿¡ ´ëÇؼ­´Â
- <a href="../">¾ÆÆÄÄ¡ ¹®¼­</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p>NetWare¿ë ¾ÆÆÄÄ¡ÀÇ ÁÖµÈ Â÷ÀÌÁ¡Àº:</p>
-
- <ul>
- <li>
- <p>NetWare¿ë ¾ÆÆÄÄ¡´Â ´ÙÁß¾²·¹µå ¹æ½ÄÀ» »ç¿ëÇϱ⶧¹®¿¡,
- À¯´Ð½º¿Í °°ÀÌ ¿äû¸¶´Ù ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
- ´ë½Å ¿©·¯ ¾²·¹µå¸¦ ½ÇÇàÇÑ´Ù: ºÎ¸ð ¾²·¹µå¿Í ¿äûÀ» ó¸®ÇÏ´Â
- ¿©·¯ ÀÚ½Ä È¤Àº worker ¾²·¹µåµé.</p>
-
- <p>±×·¯¹Ç·Î "ÇÁ·Î¼¼½º"-°ü¸® Áö½Ã¾î°¡ ´Ù¸£´Ù:</p>
-
- <p><directive
- module="mpm_common">MaxRequestsPerChild</directive> -
- À¯´Ð½º¿Í °°ÀÌ worker ¾²·¹µå°¡ ¿äûÀ» ¾ó¸¶¸¸Å­ ó¸®ÇÏ°í
- Á×À»Áö¸¦ Á¶Á¤ÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ª
- <code>MaxRequestsPerChild 0</code>À» »ç¿ëÇÏ¸é ¾²·¹µå´Â
- Á×Áö¾Ê°í ¿µ¿øÈ÷ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. Ưº°ÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é
- NetWare¿¡¼­´Â ÀÌ Áö½Ã¾î¸¦ <code>0</code>À¸·Î ¼³Á¤Çϱæ
- ±ÇÇÑ´Ù.</p>
-
- <p><directive module="mpm_common">StartThreads</directive> -
- ÀÌ Áö½Ã¾î´Â ¼­¹ö°¡ óÀ½¿¡ ½ÃÀÛÇÒ ¾²·¹µå °³¼ö¸¦ °áÁ¤ÇÑ´Ù.
- ±ÇÀåÇÏ´Â ±âº»°ªÀº <code>StartThreads 50</code>ÀÌ´Ù.</p>
-
- <p><directive
- module="mpm_common">MinSpareThreads</directive> -
- ¼­¹ö´Â ½¬´Â(idle) ¾²·¹µå °³¼ö°¡ ÀÌ °ªº¸´Ù ÀûÀ¸¸é worker
- ¾²·¹µå¸¦ ´õ ¸¸µç´Ù. ±ÇÀåÇÏ´Â ±âº»°ªÀº
- <code>MinSpareThreads 10</code>ÀÌ´Ù.</p>
-
- <p><directive
- module="mpm_common">MaxSpareThreads</directive> -
- ¼­¹ö´Â ½¬´Â ¾²·¹µå °³¼ö°¡ ÀÌ °ªº¸´Ù ¸¹À¸¸é worker ¾²·¹µå¸¦
- Á×À̱⠽ÃÀÛÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ªÀº
- <code>MaxSpareThreads 100</code>ÀÌ´Ù.</p>
-
- <p><directive module="mpm_netware">MaxThreads</directive> -
- ÀÌ Áö½Ã¾î´Â worker ¾²·¹µåÀÇ ÃÖ´ë °³¼ö¸¦ Á¦ÇÑÇÑ´Ù. ±ÇÀåÇÏ´Â
- ±âº»°ªÀº <code>ThreadsPerChild 250</code>ÀÌ´Ù.</p>
-
- <p><directive
- module="mpm_common">ThreadStackSize</directive> -
- ÇÑ worker ¾²·¹µå°¡ »ç¿ëÇÒ ½ºÅà ũ±â¸¦ Áö½ÃÇÑ´Ù. ±ÇÀåÇÏ´Â
- ±âº»°ªÀº <code>ThreadStackSize 65536</code>ÀÌ´Ù.</p>
- </li>
-
- <li>
- <p>¾Æ±Ô¸ÕÆ®·Î ÆÄÀϸíÀ» ¹Þ´Â Áö½Ã¾î¿¡´Â À¯´Ð½º ÆÄÀϸíÀÌ
- ¾Æ´Ñ NetWare ÆÄÀϸíÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡°¡
- ³»ºÎÀûÀ¸·Î À¯´Ð½º½Ä ÆÄÀϸíÀ» »ç¿ëÇϱ⶧¹®¿¡ ¹é½½·¡½¬
- ´ë½Å ½½·¡½¬¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¸ðµç Àý´ë°æ·Î¿¡ º¼·ý¸íÀ»
- Æ÷ÇÔÇÏ±æ ¹Ù¶õ´Ù. º¼·ý¸íÀ» »ý·«ÇÏ¸é ¾ÆÆÄÄ¡´Â
- <code>SYS:</code> º¼·ýÀ̶ó°í À߸ø °¡Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
- </li>
-
- <li>
- <p>NetWare¿ë ¾ÆÆÄÄ¡´Â ¼­¹ö¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê°í ½ÇÇàÇÒ¶§
- ¸ðµâÀ» ÀоîµéÀÏ ¼ö ÀÖ´Ù. º¸Åë ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϸé
- <code>\Apache2\modules</code> µð·ºÅ丮¿¡ ¿©·¯ Ãß°¡ ¸ðµâÀ»
- ¼³Ä¡ÇÑ´Ù. À̵é ȤÀº ´Ù¸¥ ¸ðµâÀ» »ç¿ëÇÏ·Á¸é <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- ¿¹¸¦ µé¾î status ¸ðµâÀ» »ç¿ëÇÑ´Ù¸é:</p>
-
- <example>
- LoadModule status_module modules/status.nlm
- </example>
-
- <p><a href="../mod/mod_so.html#creating">ÀоîµéÀÏ ¼ö
- ÀÖ´Â ¸ðµâ ¸¸µé±â</a>¿¡ ´ëÇÑ Á¤º¸µµ ÀÖ´Ù.</p>
- </li>
- </ul>
-
- <section id="use-add">
-
- <title>ÀÌ¿ÜÀÇ NetWare Àü¿ë Áö½Ã¾îµé:</title>
-
- <ul>
- <li><directive module="core">CGIMapExtension</directive> -
- CGI ÆÄÀÏ È®ÀåÀÚ¸¦ ½ºÅ©¸³Æ® ÀÎÅÍÇÁ¸®ÅÍ¿Í ¿¬°áÇÑ´Ù.</li>
- </ul>
- <ul>
- <li><directive module="mod_nw_ssl">SecureListen</directive> -
- ƯÁ¤ Æ÷Æ®¸¦ SSL ¾ÏȣȭÇÑ´Ù.</li>
- </ul>
- <ul>
- <li><directive
- module="mod_nw_ssl">NWSSLTrustedCerts</directive> -
- ÇÁ·Ï½ÃÇÏ´Â ¼­¹ö¿¡ º¸¾È¿¬°áÇÒ¶§ »ç¿ëÇÒ ½Å·ÚÇÏ´Â
- ÀÎÁõ¼­(certificate)¸¦ Ãß°¡ÇÑ´Ù.</li>
- </ul>
- <ul>
- <li><directive module="mod_nw_ssl">NWSSLUpgradeable</directive> -
- ƯÁ¤ ÁÖ¼Ò/Æ÷Æ®·Î ¸Î¾îÁø ¿¬°áÀ» SSL ¿¬°á·Î º¯°æÇÒ ¼ö
- ÀÖ´Ù.</li>
- </ul>
-
- </section>
-
- </section>
-
- <section id="comp">
-
- <title>Netware¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</title>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ·Á¸é MetroWerks CodeWarrior 6.x ÀÌ»óÀÌ
- ÇÊ¿äÇÏ´Ù. ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ¸é ¾î¶² Netware º¼·ý¿¡¶óµµ ¼³Ä¡ÇÒ
- ¼ö ÀÖ´Ù. ±âº»°ªÀº <code>sys:/Apache2</code> µð·ºÅ丮´Ù.</p>
-
- <p>¼­¹ö¸¦ ½ÇÇàÇϱâ Àü¿¡ <code>conf</code> µð·ºÅ丮¸¦ ÀÛ¼ºÇؾß
- ÇÑ´Ù. ¹èÆ÷º»ÀÇ <code>conf</code> µð·ºÅ丮¿¡ ÀÖ´Â
- <code>HTTPD-STD.CONF</code> ÆÄÀϸíÀ» <code>HTTPD.CONF</code>·Î
- º¯°æÇÑ´Ù. <code>HTTPD.CONF</code> ÆÄÀÏ¿¡¼­ <code>@@Value@@</code>
- Ç¥½Ã¸¦ ã¾Æ¼­ ÀûÀýÇÑ ¼³Á¤À¸·Î ´ëüÇÑ´Ù. <code>conf/magic</code>°ú
- <code>conf/mime.types</code> ÆÄÀϵµ º¹»çÇÑ´Ù. ¾Æ´Ï¸é makefileÀ»
- ½ÇÇàÇÒ¶§ <code>install</code> Å°¿öµå¸¦ »ç¿ëÇÏ¸é ¿ÏÀüÇÑ ¹èÆ÷º»À»
- ¸¸µç´Ù.</p>
-
- <section id="comp-req">
-
- <title>¿ä±¸»çÇ×:</title>
-
- <p>NetWare¿ë ¾ÆÆÄÄ¡ 2.0À» ÄÄÆÄÀÏÇÏ·Á¸é ´ÙÀ½ °³¹ßµµ±¸°¡
- ÇÊ¿äÇÏ´Ù:</p>
-
- <ul>
- <li>Metrowerks CodeWarrior 6.0 ÀÌ»ó°ú <a
- href="http://developer.novell.com/ndk/cwpdk.htm">NetWare
- PDK 3.0</a> ÀÌ»ó.</li>
-
- <li><a
- href="http://developer.novell.com/ndk/libc.htm">NetWare
- Libraries for C (LibC)</a></li>
-
- <li><a
- href="http://developer.novell.com/ndk/cldap.htm">LDAP
- Libraries for C</a></li>
-
- <li><a href="http://www.gzip.org/zlib/">ZLIB ¾ÐÃà ¶óÀ̺귯¸®
- ¼Ò½ºÄÚµå</a></li>
-
- <li>AWK µµ±¸ (awk, gawk µî). AWK´Â <a
- href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>¿¡¼­
- ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. µµ±¸¸¦ <code>awk.exe</code>¶õ À̸§À¸·Î
- À©µµ¿ìÁî °æ·Î¿¡ µÎ¾î¾ß ÇÑ´Ù.</li>
-
- <li>makefileÀ» »ç¿ëÇÏ¿© ÄÄÆÄÀÏÇÏ·Á¸é <a
- href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>¿¡
- ÀÖ´Â GNU make ¹öÀü 3.78.1 (GMake)ÀÌ ÇÊ¿äÇÏ´Ù.</li>
- </ul>
-
- </section>
-
- <section id="comp-make">
-
- <title>NetWare makefileÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ:</title>
-
- <ul>
- <li><code>NOVELLLIBC</code> ȯ°æº¯¼ö¸¦
- <example>Set NOVELLLIBC=c:\novell\ndk\libc</example>¿Í
- °°ÀÌ NetWare Libraries for C SDK À§Ä¡·Î ¼³Á¤ÇÑ´Ù.
- </li>
-
- <li><code>METROWERKS</code> ȯ°æº¯¼ö¸¦
- <example>Set METROWERKS=C:\Program Files\Metrowerks\CodeWarrior</example>¿Í
- °°ÀÌ Metrowerks CodeWarrior ÄÄÆÄÀÏ·¯¸¦ ¼³Ä¡ÇÑ À§Ä¡·Î
- ¼³Á¤ÇÑ´Ù. ±âº» À§Ä¡ÀÎ
- <code>C:\Program Files\Metrowerks\CodeWarrior</code>¿¡
- ¼³Ä¡ÇÏ¿´´Ù¸é, ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù.</li>
-
- <li><code>LDAPSDK</code> ȯ°æº¯¼ö¸¦
- <example>Set LDAPSDK=c:\Novell\NDK\cldapsdk\NetWare\libc</example>¿Í
- °°ÀÌ LDAP Libraries for C¸¦ ¼³Ä¡ÇÑ À§Ä¡·Î ¼³Á¤ÇÑ´Ù.
- </li>
-
- <li><code>ZLIBSDK</code> ȯ°æº¯¼ö¸¦
- <example>Set ZLIBSDK=D:\NOVELL\zlib</example>°ú °°ÀÌ
- ZLib ¶óÀ̺귯¸® ¼Ò½ºÄÚµå À§Ä¡·Î ¼³Á¤ÇÑ´Ù.
- </li>
-
- <li><code>AP_WORK</code> ȯ°æº¯¼ö¸¦ <code>\httpd-2.0</code>
- µð·ºÅ丮ÀÇ Àüü °æ·Î·Î ¼³Á¤ÇÑ´Ù.</li>
-
- <li><code>APR_WORK</code> ȯ°æº¯¼ö¸¦
- <code>\httpd-2.0\srclib\apr</code> µð·ºÅ丮ÀÇ Àüü °æ·Î·Î
- ¼³Á¤ÇÑ´Ù.</li>
-
- <li>AWK µµ±¸¿Í GNU make (<code>gmake.exe</code>) µµ±¸°¡
- ½Ã½ºÅÛÀÇ <code>PATH</code> ȯ°æº¯¼ö¿¡ Æ÷ÇÔµÇÀÖ´ÂÁö
- È®ÀÎÇÑ´Ù.</li>
-
- <li>¼Ò½ºÄڵ带 ´Ù¿î¹Þ¾Æ Àû´çÇÑ µð·ºÅ丮¿¡ ¾ÐÃàÀ» Ǭ´Ù.</li>
-
- <li><code>\httpd-2.0\srclib\apr-util\uri</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿©
- <code>GENURI.nlm</code>À» ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li><code>GENURI.nlm</code> ÆÄÀÏÀ» NetWare ¼­¹öÀÇ
- <code>SYS:</code> º¼·ýÀ¸·Î º¹»çÇÏ°í
- <example>SYS:\genuri &gt; sys:\uri_delims.h</example>
- ¸í·ÉÀ» ½ÇÇàÇÑ´Ù.
- </li>
-
- <li><code>uri_delims.h</code> ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â ÄÄÇ»ÅÍÀÇ
- <code>\httpd-2.0\srclib\apr-util\uri</code> µð·ºÅ丮·Î
- º¹»çÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0\srclib\apr</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿© APRÀ»
- ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0\srclib\pcre</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿©
- <code>DFTABLES.nlm</code>À» ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0\server</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿©
- <code>GENCHARS.nlm</code>À» ÄÄÆÄÀÏÇÑ´Ù.</li>
-
- <li>°¢ µð·ºÅ丮ÀÇ <code>GENCHARS.nlm</code>°ú
- <code>DFTABLES.nlm</code> ÆÄÀÏÀ» NetWare ¼­¹öÀÇ
- <code>SYS:</code> º¼·ýÀ¸·Î º¹»çÇÏ°í ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù:
- <example>
- SYS:\genchars &gt; sys:\test_char.h<br />
- SYS:\dftables &gt; sys:\chartables.c<br />
- </example>
- </li>
-
- <li><code>test_char.h</code>¿Í <code>chartables.c</code>
- ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ´Â ÄÄÇ»ÅÍÀÇ <code>\httpd-2.0\os\netware</code>
- µð·ºÅ丮·Î º¹»çÇÑ´Ù.</li>
-
- <li><code>\httpd-2.0</code> µð·ºÅ丮¿¡¼­
- "<code>gmake -f nwgnumakefile</code>"À» ½ÇÇàÇÏ¿© ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇÑ´Ù.
- <example>gmake -f nwgnumakefile install</example>°ú
- °°ÀÌ install ÆĶó¹ÌÅ͸¦ Ãß°¡ÇÏ¸é ¹èÆ÷¿ë µð·ºÅ丮¸¦ ¸¸µé
- ¼ö ÀÖ´Ù.
- </li>
- </ul>
-
- </section>
-
- <section id="comp-add">
-
- <title>Ãß°¡ make ¿É¼Ç</title>
-
- <ul>
- <li><code>gmake -f nwgnumakefile</code><p>ÀÏ¹Ý ½ÇÇàÆÄÀÏÀ»
- ÄÄÆÄÀÏÇÏ¿© <code>\release</code> µð·ºÅ丮·Î º¹»çÇÑ´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile DEBUG=1</code><p>µð¹ö±×¿ë
- ½ÇÇàÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© <code>\debug</code> µð·ºÅ丮·Î
- º¹»çÇÑ´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile install</code>
- <p><code>\dist\Apache2</code> µð·ºÅ丮¿¡ ½ÇÇàÆÄÀÏ, ¹®¼­,
- Ãß°¡ Áö¿øÆÄÀÏÀ» Æ÷ÇÔÇÑ ¿ÏÀüÇÑ ¾ÆÆÄÄ¡ ¹èÆ÷º»À» ¸¸µç´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile installdev</code>
- <p>install°ú ºñ½ÁÇÏÁö¸¸, <code>\lib</code>°ú
- <code>\include</code> µð·ºÅ丮¸¦ ¸¸µé°í Çì´õÆÄÀÏ°ú import
- ÆÄÀÏÀ» º¹»çÇÑ´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile clean</code>
- <p><code>DEBUG</code> Á¤ÀÇ À¯¹«¿¡ µû¶ó <code>\release</code>³ª
- <code>\debug</code>¿¡ ÀÖ´Â ¿ÀºêÁ§Æ®ÆÄÀÏ°ú ½ÇÇàÆÄÀÏÀ»
- ¸ðµÎ Áö¿î´Ù.</p></li>
-
- <li><code>gmake -f nwgnumakefile clobber_all</code><p>clean°ú
- ºñ½ÁÇÏÁö¸¸ µð·ºÅ丮µµ Áö¿î´Ù.</p></li>
- </ul>
-
- </section>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/platform/netware.xml.meta b/docs/manual/platform/netware.xml.meta
deleted file mode 100644
index 37cc218704..0000000000
--- a/docs/manual/platform/netware.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>netware</basename>
- <path>/platform/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/platform/perf-hp.html b/docs/manual/platform/perf-hp.html
deleted file mode 100644
index 23995ca460..0000000000
--- a/docs/manual/platform/perf-hp.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: perf-hp.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: perf-hp.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/platform/perf-hp.html.en b/docs/manual/platform/perf-hp.html.en
deleted file mode 100644
index 595e010f9d..0000000000
--- a/docs/manual/platform/perf-hp.html.en
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Running a High-Performance Web Server on HPUX - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Running a High-Performance Web Server on HPUX</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/platform/perf-hp.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/perf-hp.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
-<pre>
-Date: Wed, 05 Nov 1997 16:59:34 -0800
-From: Rick Jones &lt;<a href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>&gt;
-Reply-To: <a href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>
-Organization: Network Performance
-Subject: HP-UX tuning tips
-</pre>
-
- <p>Here are some tuning tips for HP-UX to add to the tuning page.</p>
-
- <p>For HP-UX 9.X: Upgrade to 10.20<br />
- For HP-UX 10.[00|01|10]: Upgrade to 10.20</p>
-
- <p>For HP-UX 10.20:</p>
-
- <p>Install the latest cumulative ARPA Transport Patch. This
- will allow you to configure the size of the TCP connection
- lookup hash table. The default is 256 buckets and must be set
- to a power of two. This is accomplished with adb against the
- *disc* image of the kernel. The variable name is <code>tcp_hash_size</code>.
- Notice that it's critically important that you use "<code>W</code>"
- to write a 32 bit quantity, not "<code>w</code>" to write a 16 bit
- value when patching the disc image because the <code>tcp_hash_size</code>
- variable is a 32 bit quantity.</p>
-
- <p>How to pick the value? Examine the output of <a href="ftp://ftp.cup.hp.com/dist/networking/tools/connhist">ftp://ftp.cup.hp.com/dist/networking/tools/connhist</a>
- and see how many total TCP connections exist on the system. You
- probably want that number divided by the hash table size to be
- reasonably small, say less than 10. Folks can look at HP's
- SPECweb96 disclosures for some common settings. These can be
- found at <a href="http://www.specbench.org/">http://www.specbench.org/</a>.
- If an HP-UX system was performing at 1000 SPECweb96 connections
- per second, the <code>TIME_WAIT</code> time of 60 seconds would mean
- 60,000 TCP "connections" being tracked.</p>
-
- <p>Folks can check their listen queue depths with <a href="ftp://ftp.cup.hp.com/dist/networking/misc/listenq">ftp://ftp.cup.hp.com/dist/networking/misc/listenq</a>.</p>
-
- <p>If folks are running Apache on a PA-8000 based system, they
- should consider "chatr'ing" the Apache executable to have a
- large page size. This would be "<code>chatr +pi L &lt;BINARY&gt;</code>".
- The GID of the running executable must have <code>MLOCK</code> privileges.
- <code>Setprivgrp(1m)</code> should be consulted for assigning
- <code>MLOCK</code>. The change can be validated by running Glance
- and examining the memory regions of the server(s) to make sure that
- they show a non-trivial fraction of the text segment being locked.</p>
-
- <p>If folks are running Apache on MP systems, they might
- consider writing a small program that uses <code>mpctl()</code>
- to bind processes to processors. A simple <code>pid % numcpu</code>
- algorithm is probably sufficient. This might even go into the
- source code.</p>
-
- <p>If folks are concerned about the number of <code>FIN_WAIT_2</code>
- connections, they can use nettune to shrink the value of
- <code>tcp_keepstart</code>. However, they should be careful there -
- certainly do not make it less than oh two to four minutes. If
- <code>tcp_hash_size</code> has been set well, it is probably OK to
- let the <code>FIN_WAIT_2</code>'s take longer to timeout (perhaps
- even the default two hours) - they will not on average have a big
- impact on performance.</p>
-
- <p>There are other things that could go into the code base, but
- that might be left for another email. Feel free to drop me a
- message if you or others are interested.</p>
-
- <p>sincerely,</p>
-
- <p>rick jones</p>
-
- <p><a href="http://www.cup.hp.com/netperf/NetperfPage.html">http://www.cup.hp.com/netperf/NetperfPage.html</a></p>
-
- </div>
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/platform/perf-hp.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/perf-hp.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/perf-hp.html.ko.euc-kr b/docs/manual/platform/perf-hp.html.ko.euc-kr
deleted file mode 100644
index 5dd417a73d..0000000000
--- a/docs/manual/platform/perf-hp.html.ko.euc-kr
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>HPUX¿¡¼­ °í¼º´É À¥¼­¹ö ½ÇÇàÇϱâ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>HPUX¿¡¼­ °í¼º´É À¥¼­¹ö ½ÇÇàÇϱâ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/perf-hp.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/perf-hp.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
-<pre>
-Date: Wed, 05 Nov 1997 16:59:34 -0800
-From: Rick Jones &lt;<a href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>&gt;
-Reply-To: <a href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>
-Organization: Network Performance
-Subject: HP-UX tuning tips
-</pre>
-
- <p>ÀÌ ±ÛÀº ¼º´ÉÇâ»ó ÆäÀÌÁö¿¡ Ãß°¡ÇÒ HP-UX ¼º´ÉÇâ»ó ÆÁÀÌ´Ù.</p>
-
- <p>HP-UX 9.X´Â: 10.20À¸·Î ¾÷±×·¹À̵åÇ϶ó<br />
- HP-UX 10.[00|01|10]Àº: 10.20À¸·Î ¾÷±×·¹À̵åÇ϶ó</p>
-
- <p>HP-UX 10.20˼:</p>
-
- <p>ÃÖ±Ù ARPA Transport ÆÐÄ¡ ¸ðÀ½À» ¼³Ä¡ÇÑ´Ù. ±×·¯¸é TCP
- ¿¬°áã±â Çؽ¬Å×À̺í Å©±â¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº
- 256 °³ÀÌ°í, 2ÀÇ °ÅµìÁ¦°ö°ªÀ¸·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù. adb·Î Ä¿³ÎÀÇ
- *disc* À̹ÌÁö¸¦ ¼öÁ¤ÇÏ¿© ¼³Á¤ÇÑ´Ù. º¯¼ö¸íÀº
- <code>tcp_hash_size</code>ÀÌ´Ù. <code>tcp_hash_size</code>
- º¯¼ö°ªÀÌ 32ºñÆ®À̹ǷΠdisc À̹ÌÁö¸¦ ¼öÁ¤ÇÒ¶§ ¹Ýµå½Ã 16ºñÆ®
- °ªÀ» ±â·ÏÇÏ´Â "<code>w</code>" ´ë½Å 32ºñÆ® °ªÀ» ±â·ÏÇÏ´Â
- "<code>W</code>"¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¾î¶² °ªÀ» °í¸¦±î? <a href="ftp://ftp.cup.hp.com/dist/networking/tools/connhist">ftp://ftp.cup.hp.com/dist/networking/tools/connhist</a>ÀÇ
- °á°ú¸¦ º¸°í, ½Ã½ºÅÛ¿¡ Á¸ÀçÇÏ´Â TCP ¿¬°á ÃÑ°³¼ö¸¦ »ìÆìºÁ¶ó.
- ÀÌ ¼ýÀÚ¸¦ Çؽ¬Å×À̺í Å©±â·Î ³ª´« °ªÀÌ »ó´çÈ÷ (10 ÀÌÇÏ) ÀÛÀ¸¸é
- ÁÁ´Ù. HPÀÇ SPECweb96 °á°ú¿¡¼­ ÀϹÝÀûÀÎ ¼³Á¤À» º¼ ¼ö ÀÖ´Ù.
- °á°ú´Â <a href="http://www.specbench.org/">http://www.specbench.org/</a>¿¡
- ÀÖ´Ù. HP-UX ½Ã½ºÅÛÀÌ ÃÊ´ç 1000¹ø SPECweb96 ¿¬°áÀ» ÇÏ´Â °æ¿ì
- <code>TIME_WAIT</code>°¡ 60Ãʶó¸é 60,000°³ÀÇ TCP "¿¬°á"À»
- ÃßÀûÇÑ´Ù´Â ¶æÀÌ´Ù.</p>
-
- <p><a href="ftp://ftp.cup.hp.com/dist/networking/misc/listenq">ftp://ftp.cup.hp.com/dist/networking/misc/listenq</a>¸¦
- ½ÇÇàÇÏ¿© ½Ã½ºÅÛÀÇ ¿¬°á´ë±âÇà·Ä ±íÀ̸¦ ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <p>PA-8000±â¹Ý ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÑ´Ù¸é, ¾ÆÆÄÄ¡
- ½ÇÇàÆÄÀÏÀÌ Å« ÆäÀÌÁöÅ©±â¸¦ »ç¿ëÇϵµ·Ï "chatr"ÇÑ´Ù. ¸í·ÉÀº
- "<code>chatr +pi L &lt;½ÇÇàÆÄÀÏ&gt;</code>"ÀÌ´Ù. ½ÇÇàÆÄÀÏÀ»
- ½ÇÇàÇÏ´Â GID¿¡ <code>MLOCK</code> ±ÇÇÑÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.
- <code>MLOCK</code> ºÎ¿©¿¡ ´ëÇؼ­´Â <code>Setprivgrp(1m)</code>¸¦
- Âü°íÇ϶ó. ¼öÁ¤ÈÄ Glance¸¦ ½ÇÇàÇÏ¿© ¼­¹öÀÇ ¸Þ¸ð¸®¿µ¿ªÀ» »ìÆ캸¸é
- »ó´çÇÑ text ¼¼±×¸ÕÆ®°¡ Àá°ÜÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>´ÙÁßÇÁ·Î¼¼½º ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÑ´Ù¸é, ÇÁ·Î¼¼½º¸¦
- ÇÁ·Î¼¼½º¿¡ ¹èÁ¤ÇÏ´Â <code>mpctl()</code>¸¦ »ç¿ëÇÑ ÀÛÀº
- ÇÁ·Î±×·¥À» ÀÛ¼ºÇغÁ¶ó. ´Ü¼øÇÑ <code>pid % numcpu</code>
- ¾Ë°í¸®ÁòÀ¸·Îµµ ÃæºÐÇÒ °ÍÀÌ´Ù. ÀÌ ºÎºÐÀº ¾ÕÀ¸·Î ¼Ò½ºÄڵ忡
- Æ÷Ç﵃ ¼ö ÀÖ´Ù.</p>
-
- <p><code>FIN_WAIT_2</code> ¿¬°áÀÇ °³¼ö°¡ °ÆÁ¤½º·´´Ù¸é,
- nettuneÀ» »ç¿ëÇÏ¿© <code>tcp_keepstart</code> °ªÀ» ÁÙÀÏ
- ¼ö ÀÖ´Ù. ±×·¯³ª Á¶½ÉÇØ¾ß ÇÑ´Ù - 4ºÐ º¸´Ù ÀÛ°Ô ¼³Á¤ÇÏÁö ¸¶¶ó.
- <code>tcp_hash_size</code>¸¦ Àß ¼³Á¤ÇÏ¿´´Ù¸é,
- <code>FIN_WAIT_2</code> °ªÀÌ Ä¿µµ (½ÉÁö¾î ±âº»°ªÀÎ 2½Ã°£µµ)
- ¹®Á¦¾ø´Ù - º¸Åë ¼º´É¿¡ Å« ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.</p>
-
- <p>¾ÕÀ¸·Î ¼Ò½ºÄڵ忡 Æ÷Ç﵃ ºÎºÐÀÌ ´õ ÀÖÁö¸¸, ¿©±â¼­ ÁÙÀδÙ.
- °ü½ÉÀÌ ÀÖ´Ù¸é ¸ÞÀÏÀ» ÁÖ±æ ¹Ù¶õ´Ù.</p>
-
- <p>±×·³ À̸¸,</p>
-
- <p>rick jones</p>
-
- <p><a href="http://www.cup.hp.com/netperf/NetperfPage.html">http://www.cup.hp.com/netperf/NetperfPage.html</a></p>
-
- </div>
-</div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/perf-hp.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/perf-hp.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/perf-hp.xml b/docs/manual/platform/perf-hp.xml
deleted file mode 100644
index 025974124d..0000000000
--- a/docs/manual/platform/perf-hp.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="perf-hp.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Running a High-Performance Web Server on HPUX</title>
-
- <summary>
-
-<pre>
-Date: Wed, 05 Nov 1997 16:59:34 -0800
-From: Rick Jones &lt;<a
-href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>&gt;
-Reply-To: <a href="mailto:raj@cup.hp.com"
->raj@cup.hp.com</a>
-Organization: Network Performance
-Subject: HP-UX tuning tips
-</pre>
-
- <p>Here are some tuning tips for HP-UX to add to the tuning page.</p>
-
- <p>For HP-UX 9.X: Upgrade to 10.20<br />
- For HP-UX 10.[00|01|10]: Upgrade to 10.20</p>
-
- <p>For HP-UX 10.20:</p>
-
- <p>Install the latest cumulative ARPA Transport Patch. This
- will allow you to configure the size of the TCP connection
- lookup hash table. The default is 256 buckets and must be set
- to a power of two. This is accomplished with adb against the
- *disc* image of the kernel. The variable name is <code>tcp_hash_size</code>.
- Notice that it's critically important that you use "<code>W</code>"
- to write a 32 bit quantity, not "<code>w</code>" to write a 16 bit
- value when patching the disc image because the <code>tcp_hash_size</code>
- variable is a 32 bit quantity.</p>
-
- <p>How to pick the value? Examine the output of <a
- href="ftp://ftp.cup.hp.com/dist/networking/tools/connhist"
- >ftp://ftp.cup.hp.com/dist/networking/tools/connhist</a>
- and see how many total TCP connections exist on the system. You
- probably want that number divided by the hash table size to be
- reasonably small, say less than 10. Folks can look at HP's
- SPECweb96 disclosures for some common settings. These can be
- found at <a
- href="http://www.specbench.org/">http://www.specbench.org/</a>.
- If an HP-UX system was performing at 1000 SPECweb96 connections
- per second, the <code>TIME_WAIT</code> time of 60 seconds would mean
- 60,000 TCP "connections" being tracked.</p>
-
- <p>Folks can check their listen queue depths with <a
- href="ftp://ftp.cup.hp.com/dist/networking/misc/listenq"
- >ftp://ftp.cup.hp.com/dist/networking/misc/listenq</a>.</p>
-
- <p>If folks are running Apache on a PA-8000 based system, they
- should consider "chatr'ing" the Apache executable to have a
- large page size. This would be "<code>chatr +pi L &lt;BINARY&gt;</code>".
- The GID of the running executable must have <code>MLOCK</code> privileges.
- <code>Setprivgrp(1m)</code> should be consulted for assigning
- <code>MLOCK</code>. The change can be validated by running Glance
- and examining the memory regions of the server(s) to make sure that
- they show a non-trivial fraction of the text segment being locked.</p>
-
- <p>If folks are running Apache on MP systems, they might
- consider writing a small program that uses <code>mpctl()</code>
- to bind processes to processors. A simple <code>pid % numcpu</code>
- algorithm is probably sufficient. This might even go into the
- source code.</p>
-
- <p>If folks are concerned about the number of <code>FIN_WAIT_2</code>
- connections, they can use nettune to shrink the value of
- <code>tcp_keepstart</code>. However, they should be careful there -
- certainly do not make it less than oh two to four minutes. If
- <code>tcp_hash_size</code> has been set well, it is probably OK to
- let the <code>FIN_WAIT_2</code>'s take longer to timeout (perhaps
- even the default two hours) - they will not on average have a big
- impact on performance.</p>
-
- <p>There are other things that could go into the code base, but
- that might be left for another email. Feel free to drop me a
- message if you or others are interested.</p>
-
- <p>sincerely,</p>
-
- <p>rick jones</p>
-
- <p><a href="http://www.cup.hp.com/netperf/NetperfPage.html"
- >http://www.cup.hp.com/netperf/NetperfPage.html</a></p>
-
- </summary>
-
-</manualpage>
-
-
diff --git a/docs/manual/platform/perf-hp.xml.ko b/docs/manual/platform/perf-hp.xml.ko
deleted file mode 100644
index bbcb16ac8e..0000000000
--- a/docs/manual/platform/perf-hp.xml.ko
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="perf-hp.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>HPUX¿¡¼­ °í¼º´É À¥¼­¹ö ½ÇÇàÇϱâ</title>
-
- <summary>
-
-<pre>
-Date: Wed, 05 Nov 1997 16:59:34 -0800
-From: Rick Jones &lt;<a
-href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>&gt;
-Reply-To: <a href="mailto:raj@cup.hp.com"
->raj@cup.hp.com</a>
-Organization: Network Performance
-Subject: HP-UX tuning tips
-</pre>
-
- <p>ÀÌ ±ÛÀº ¼º´ÉÇâ»ó ÆäÀÌÁö¿¡ Ãß°¡ÇÒ HP-UX ¼º´ÉÇâ»ó ÆÁÀÌ´Ù.</p>
-
- <p>HP-UX 9.X´Â: 10.20À¸·Î ¾÷±×·¹À̵åÇ϶ó<br />
- HP-UX 10.[00|01|10]Àº: 10.20À¸·Î ¾÷±×·¹À̵åÇ϶ó</p>
-
- <p>HP-UX 10.20˼:</p>
-
- <p>ÃÖ±Ù ARPA Transport ÆÐÄ¡ ¸ðÀ½À» ¼³Ä¡ÇÑ´Ù. ±×·¯¸é TCP
- ¿¬°áã±â Çؽ¬Å×À̺í Å©±â¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº
- 256 °³ÀÌ°í, 2ÀÇ °ÅµìÁ¦°ö°ªÀ¸·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù. adb·Î Ä¿³ÎÀÇ
- *disc* À̹ÌÁö¸¦ ¼öÁ¤ÇÏ¿© ¼³Á¤ÇÑ´Ù. º¯¼ö¸íÀº
- <code>tcp_hash_size</code>ÀÌ´Ù. <code>tcp_hash_size</code>
- º¯¼ö°ªÀÌ 32ºñÆ®À̹ǷΠdisc À̹ÌÁö¸¦ ¼öÁ¤ÇÒ¶§ ¹Ýµå½Ã 16ºñÆ®
- °ªÀ» ±â·ÏÇÏ´Â "<code>w</code>" ´ë½Å 32ºñÆ® °ªÀ» ±â·ÏÇÏ´Â
- "<code>W</code>"¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¾î¶² °ªÀ» °í¸¦±î? <a
- href="ftp://ftp.cup.hp.com/dist/networking/tools/connhist"
- >ftp://ftp.cup.hp.com/dist/networking/tools/connhist</a>ÀÇ
- °á°ú¸¦ º¸°í, ½Ã½ºÅÛ¿¡ Á¸ÀçÇÏ´Â TCP ¿¬°á ÃÑ°³¼ö¸¦ »ìÆìºÁ¶ó.
- ÀÌ ¼ýÀÚ¸¦ Çؽ¬Å×À̺í Å©±â·Î ³ª´« °ªÀÌ »ó´çÈ÷ (10 ÀÌÇÏ) ÀÛÀ¸¸é
- ÁÁ´Ù. HPÀÇ SPECweb96 °á°ú¿¡¼­ ÀϹÝÀûÀÎ ¼³Á¤À» º¼ ¼ö ÀÖ´Ù.
- °á°ú´Â <a
- href="http://www.specbench.org/">http://www.specbench.org/</a>¿¡
- ÀÖ´Ù. HP-UX ½Ã½ºÅÛÀÌ ÃÊ´ç 1000¹ø SPECweb96 ¿¬°áÀ» ÇÏ´Â °æ¿ì
- <code>TIME_WAIT</code>°¡ 60Ãʶó¸é 60,000°³ÀÇ TCP "¿¬°á"À»
- ÃßÀûÇÑ´Ù´Â ¶æÀÌ´Ù.</p>
-
- <p><a href="ftp://ftp.cup.hp.com/dist/networking/misc/listenq"
- >ftp://ftp.cup.hp.com/dist/networking/misc/listenq</a>¸¦
- ½ÇÇàÇÏ¿© ½Ã½ºÅÛÀÇ ¿¬°á´ë±âÇà·Ä ±íÀ̸¦ ¾Ë ¼ö ÀÖ´Ù.</p>
-
- <p>PA-8000±â¹Ý ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÑ´Ù¸é, ¾ÆÆÄÄ¡
- ½ÇÇàÆÄÀÏÀÌ Å« ÆäÀÌÁöÅ©±â¸¦ »ç¿ëÇϵµ·Ï "chatr"ÇÑ´Ù. ¸í·ÉÀº
- "<code>chatr +pi L &lt;½ÇÇàÆÄÀÏ&gt;</code>"ÀÌ´Ù. ½ÇÇàÆÄÀÏÀ»
- ½ÇÇàÇÏ´Â GID¿¡ <code>MLOCK</code> ±ÇÇÑÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.
- <code>MLOCK</code> ºÎ¿©¿¡ ´ëÇؼ­´Â <code>Setprivgrp(1m)</code>¸¦
- Âü°íÇ϶ó. ¼öÁ¤ÈÄ Glance¸¦ ½ÇÇàÇÏ¿© ¼­¹öÀÇ ¸Þ¸ð¸®¿µ¿ªÀ» »ìÆ캸¸é
- »ó´çÇÑ text ¼¼±×¸ÕÆ®°¡ Àá°ÜÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>´ÙÁßÇÁ·Î¼¼½º ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÑ´Ù¸é, ÇÁ·Î¼¼½º¸¦
- ÇÁ·Î¼¼½º¿¡ ¹èÁ¤ÇÏ´Â <code>mpctl()</code>¸¦ »ç¿ëÇÑ ÀÛÀº
- ÇÁ·Î±×·¥À» ÀÛ¼ºÇغÁ¶ó. ´Ü¼øÇÑ <code>pid % numcpu</code>
- ¾Ë°í¸®ÁòÀ¸·Îµµ ÃæºÐÇÒ °ÍÀÌ´Ù. ÀÌ ºÎºÐÀº ¾ÕÀ¸·Î ¼Ò½ºÄڵ忡
- Æ÷Ç﵃ ¼ö ÀÖ´Ù.</p>
-
- <p><code>FIN_WAIT_2</code> ¿¬°áÀÇ °³¼ö°¡ °ÆÁ¤½º·´´Ù¸é,
- nettuneÀ» »ç¿ëÇÏ¿© <code>tcp_keepstart</code> °ªÀ» ÁÙÀÏ
- ¼ö ÀÖ´Ù. ±×·¯³ª Á¶½ÉÇØ¾ß ÇÑ´Ù - 4ºÐ º¸´Ù ÀÛ°Ô ¼³Á¤ÇÏÁö ¸¶¶ó.
- <code>tcp_hash_size</code>¸¦ Àß ¼³Á¤ÇÏ¿´´Ù¸é,
- <code>FIN_WAIT_2</code> °ªÀÌ Ä¿µµ (½ÉÁö¾î ±âº»°ªÀÎ 2½Ã°£µµ)
- ¹®Á¦¾ø´Ù - º¸Åë ¼º´É¿¡ Å« ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.</p>
-
- <p>¾ÕÀ¸·Î ¼Ò½ºÄڵ忡 Æ÷Ç﵃ ºÎºÐÀÌ ´õ ÀÖÁö¸¸, ¿©±â¼­ ÁÙÀδÙ.
- °ü½ÉÀÌ ÀÖ´Ù¸é ¸ÞÀÏÀ» ÁÖ±æ ¹Ù¶õ´Ù.</p>
-
- <p>±×·³ À̸¸,</p>
-
- <p>rick jones</p>
-
- <p><a href="http://www.cup.hp.com/netperf/NetperfPage.html"
- >http://www.cup.hp.com/netperf/NetperfPage.html</a></p>
-
- </summary>
-
-</manualpage>
-
-
diff --git a/docs/manual/platform/perf-hp.xml.meta b/docs/manual/platform/perf-hp.xml.meta
deleted file mode 100644
index 235aa32801..0000000000
--- a/docs/manual/platform/perf-hp.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>perf-hp</basename>
- <path>/platform/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/platform/win_compiling.html b/docs/manual/platform/win_compiling.html
deleted file mode 100644
index 6f9885da14..0000000000
--- a/docs/manual/platform/win_compiling.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: win_compiling.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: win_compiling.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/platform/win_compiling.html.en b/docs/manual/platform/win_compiling.html.en
deleted file mode 100644
index 4dab55022e..0000000000
--- a/docs/manual/platform/win_compiling.html.en
+++ /dev/null
@@ -1,425 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Compiling Apache for Microsoft Windows - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Compiling Apache for Microsoft Windows</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/platform/win_compiling.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/win_compiling.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>There are many important points before you begin compiling
- Apache. See <a href="windows.html">Using Apache with Microsoft
- Windows</a> before you begin.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#requirements">Requirements</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#commandbuild">Command-Line Build</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#workspacebuild">Developer Studio Workspace IDE Build</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#projectcomponents">Project Components</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">Requirements</a></h2>
-
-
-
- <p>Compiling Apache requires the following environment to be
- properly installed:</p>
-
- <ul>
- <li>
- <p>Disk Space</p>
- <p>Make sure you have at least 50 MB of free disk space
- available. After installation Apache requires approximately
- 10 MB of disk space, plus space for log and cache files,
- which can grow rapidly. The actual disk space requirements
- will vary considerably based on your chosen configuration and
- any third-party modules or libraries.</p>
- </li>
-
- <li>
- <p>Microsoft Visual C++ 5.0 or higher.</p>
- <p>Apache can be built using the command line tools, or from
- within the Visual Studio IDE Workbench. The command line
- build requires the environment to reflect the <code>PATH</code>,
- <code>INCLUDE</code>, <code>LIB</code> and other variables
- that can be configured with the <code>vcvars32</code> batch file:</p>
-
- <div class="example"><p><code>
- "c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
- </code></p></div>
- </li>
-
- <li>
- <p>The Windows Platform SDK.</p>
- <p>Visual C++ 5.0 builds require an updated Microsoft Windows
- Platform SDK to enable some Apache features. For command line
- builds, the Platform SDK environment is prepared by the
- <code>setenv</code> batch file:</p>
-
- <div class="example"><p><code>
- "c:\Program Files\Platform SDK\setenv.bat"
- </code></p></div>
-
- <p>The Platform SDK files distributed with Visual C++ 6.0 and
- later are sufficient, so users of later version may skip
- this requirement.</p>
-
- <div class="note">Note that the Windows Platform SDK update is required
- to enable all supported <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> features.
- Without a recent update, Apache will issue warnings under
- MSVC++ 5.0 that some <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> features
- will be disabled. Look for the update at <a href="http://msdn.microsoft.com/downloads/sdks/platform/platform.asp">http://msdn.microsoft.com/downloads/sdks/platform/platform.asp</a>.</div>
- </li>
-
- <li>
- <p>The awk utility (awk, gawk or similar).</p>
- <p>To install Apache within the build system, several files are
- modified using the <code>awk.exe</code> utility. awk was chosen since it
- is a very small download (compared with Perl or WSH/VB) and
- accomplishes the task of generating files. Brian Kernighan's
- <a href="http://cm.bell-labs.com/cm/cs/who/bwk/">http://cm.bell-labs.com/cm/cs/who/bwk/</a>
- site has a compiled native Win32 binary,
- <a href="http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe">http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe</a> which
- you must save with the name <code>awk.exe</code> rather than
- <code>awk95.exe</code>.</p>
-
- <div class="note">Note that Developer Studio IDE will only find
- <code>awk.exe</code> from the Tools menu Options... Directories
- tab (the Projects - VC++ Directories pane in Developer Studio 7.0)
- listing Executable file paths. Add the path for <code>awk.exe</code>
- to this list, and your system <code>PATH</code> environment variable,
- as needed.</div>
-
- <div class="note">Also note that if you are using Cygwin (<a href="http://www.cygwin.com/">http://www.cygwin.com/</a>) the awk utility is named <code>gawk.exe</code> and
- that the file <code>awk.exe</code> is really a symlink to the <code>gawk.exe</code>
- file. The Windows command shell does not recognize symlinks, and because of that
- building InstallBin will fail. A workaround is to delete <code>awk.exe</code> from
- the cygwin installation and rename <code>gawk.exe</code> to <code>awk.exe</code>.</div>
- </li>
-
- <li>
- <p>[Optional] OpenSSL libraries (for <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>
- and <code>ab.exe</code> with ssl support)</p>
- <p><strong>Caution: there are significant restrictions and
- prohibitions on the use and distribution of strong cryptography
- and patented intellectual property throughout the world.</strong>
- OpenSSL includes strong cryptography controlled by both export
- regulations and domestic law, as well as intellectual property
- protected by patent, in the United States and elsewhere. Neither
- the Apache Software Foundation nor the OpenSSL project can provide
- legal advise regarding possession, use, or distribution of the code
- provided by the OpenSSL project. <strong>Consult your own legal
- counsel, you are responsible for your own actions.</strong></p>
-
- <p>OpenSSL must be installed into a <code>srclib</code> subdirectory named
- <code>openssl</code>, obtained from <a href="http://www.openssl.org/source/">http://www.openssl.org/source/</a>, in order to compile <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>
- or the abs project (<code>ab.exe</code> with SSL support.) To prepare OpenSSL
- for both <code>release</code> and <code>debug</code> builds of Apache, and
- disable the patent protected features in 0.9.7, you might use the following
- build commands:</p>
-
- <div class="example"><p><code>
- perl Configure VC-WIN32<br />
- perl util\mkfiles.pl &gt;MINFO<br />
- perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile<br />
- perl util\mk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile.dbg<br />
- perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea &gt;ms\libeay32.def<br />
- perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea &gt;ms\ssleay32.def<br />
- nmake<br />
- nmake -f makefile.dbg
- </code></p></div>
-
- </li>
-
- <li>
- <p>[Optional] zlib sources (for <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>)</p>
- <p>Zlib must be installed into a <code>srclib</code> subdirectory named
- <code>zlib</code>, however those sources need not be compiled. The build system
- will compile the compression sources directly into the <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>
- module. Zlib can be obtained from <a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a> -- <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> is
- confirmed to build correctly with version 1.1.4.</p>
- </li>
-
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="commandbuild" id="commandbuild">Command-Line Build</a></h2>
-
-
-
- <p>First, unpack the Apache distribution into an appropriate
- directory. Open a command-line prompt and <code>cd</code> to that
- directory.</p>
-
- <p>The master Apache makefile instructions are contained in the
- <code>Makefile.win</code> file. To compile Apache on Windows
- NT, simply use one of the following commands to compiled the
- <code>release</code> or <code>debug</code> build, respectively:</p>
-
- <div class="example"><pre>
-nmake /f Makefile.win _apacher
-
-nmake /f Makefile.win _apached
- </pre></div>
-
- <p>Either command will compile Apache. The latter will include
- debugging information in the resulting files, making it easier
- to find bugs and track down problems.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="workspacebuild" id="workspacebuild">Developer Studio Workspace IDE Build</a></h2>
-
-
-
- <p>Apache can also be compiled using VC++'s Visual Studio
- development environment. To simplify this process, a
- Visual Studio workspace, <code>Apache.dsw</code>, is provided.
- This workspace exposes the entire list of working <code>.dsp</code>
- projects that are required for the complete Apache binary release.
- It includes dependencies between the projects to assure that they
- are built in the appropriate order.</p>
-
- <p>Open the <code>Apache.dsw</code> workspace, and select
- <code>InstallBin</code> (<code>Release</code> or <code>Debug</code> build,
- as desired) as the Active Project. <code>InstallBin</code> causes all
- related project to be built, and then invokes <code>Makefile.win</code> to
- move the compiled executables and dlls. You may personalize the
- <code>INSTDIR=</code> choice by changing <code>InstallBin</code>'s Settings,
- General tab, Build command line entry. <code>INSTDIR</code> defaults to the
- <code>/Apache2</code> directory. If you only want a test compile (without
- installing) you may build the <code>BuildBin</code> project instead.</p>
-
- <p>The <code>.dsp</code> project files are distributed in Visual
- C++ 6.0 format. Visual C++ 5.0 (97) will recognize them. Visual C++
- 7.0 (.net) must convert <code>Apache.dsw</code> plus the <code>.dsp</code>
- files into an <code>Apache.sln</code> plus <code>.msproj</code> files,
- be sure you reconvert the <code>.msproj</code> file if any of the source
- <code>.dsp</code> files change! This is really trivial, just open
- <code>Apache.dsw</code> in the VC++ 7.0 IDE once again.</p>
-
- <p>Visual C++ 7.0 (.net) users should also use the Build
- menu, Configuration Manager dialog to uncheck both the <code>Debug</code>
- and <code>Release</code> Solution modules abs, <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>
- and <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>.
- These modules are built by invoking <code>nmake</code> or the IDE directly
- with the <code>BinBuild</code> target to build those modules explicitly,
- only if the <code>srclib</code> directories <code>openssl</code>
- and/or <code>zlib</code> exist.</p>
-
- <p>Exported <code>.mak</code> files pose a greater hassle, but they are
- required for Visual C++ 5.0 users to build <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>,
- abs (ab with SSL support) and/or <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>.
- VC++ 7.0 (.net) users also benefit, <code>nmake</code> builds
- are faster than <code>binenv</code> builds.
- Build the entire project from within the VC++ 5.0 or 6.0 IDE,
- then use the Project Menu Export for all makefiles.
- You must build the projects first in order to create all dynamic
- auto-generated targets, so that dependencies can be parsed
- correctly. Run the following command to fix the paths so they
- will build anywhere:</p>
-
- <div class="example"><p><code>
- perl srclib\apr\build\fixwin32mak.pl
- </code></p></div>
-
- <p>You must type this command from the <em>top level</em>
- directory of the <code>httpd</code> source tree. Every
- <code>.mak</code> and <code>.dep</code> project file within
- the current directory and below will be corrected, and the
- timestamps adjusted to reflect the <code>.dsp</code>.</p>
-
- <p>If you contribute back a patch that revises project files, we
- must commit project files in Visual Studio 6.0 format. Changes
- should be simple, with minimal compilation and linkage flags that
- will be recognized by all VC++ 5.0 through 7.0 environments.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="projectcomponents" id="projectcomponents">Project Components</a></h2>
-
-
-
- <p>The <code>Apache.dsw</code> workspace and <code>makefile.win</code>
- <code>nmake</code> script both build the <code>.dsp</code> projects
- of the Apache server in the following sequence:</p>
-
- <ol>
- <li><code>srclib\apr\apr.dsp</code></li>
-
- <li><code>srclib\apr\libapr.dsp</code></li>
-
- <li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
-
- <li><code>srclib\apr-util\xml\expat\lib\xml.dsp</code></li>
-
- <li><code>srclib\apr-util\aprutil.dsp</code></li>
-
- <li><code>srclib\apr-util\libaprutil.dsp</code></li>
-
- <li><code>srclib\pcre\dftables.dsp</code></li>
-
- <li><code>srclib\pcre\pcre.dsp</code></li>
-
- <li><code>srclib\pcre\pcreposix.dsp</code></li>
-
- <li><code>server\gen_test_char.dsp</code></li>
-
- <li><code>libhttpd.dsp</code></li>
-
- <li><code>Apache.dsp</code></li>
- </ol>
-
- <p>In addition, the <code>modules\</code> subdirectory tree contains
- project files for the majority of the modules.</p>
-
- <p>The <code>support\</code> directory contains project files for
- additional programs that are not part of the Apache runtime,
- but are used by the administrator to test Apache and maintain
- password and log files. Windows-specific support projects are
- broken out in the <code>support\win32\</code> directory.</p>
-
- <ol>
- <li><code>support\ab.dsp</code></li>
-
- <li><code>support\htdigest.dsp</code></li>
-
- <li><code>support\htpasswd.dsp</code></li>
-
- <li><code>support\logresolve.dsp</code></li>
-
- <li><code>support\rotatelogs.dsp</code></li>
-
- <li><code>support\win32\ApacheMonitor.dsp</code></li>
-
- <li><code>support\win32\wintty.dsp</code></li>
- </ol>
-
- <p>Once Apache has been compiled, it needs to be installed in
- its server root directory. The default is the
- <code>\Apache2</code> directory, of the same drive.</p>
-
- <p>To build and install all the files into the desired folder
- <em>dir</em> automatically, use one of the following
- <code>nmake</code> commands:</p>
-
- <div class="example"><pre>
-nmake /f Makefile.win installr INSTDIR=<em>dir</em>
-
-nmake /f Makefile.win installd INSTDIR=<em>dir</em>
- </pre></div>
-
- <p>The <em>dir</em> argument to <code>INSTDIR</code> gives
- the installation directory; it can be omitted if Apache is
- to be installed into <code>\Apache2</code>.</p>
-
- <p>This will install the following:</p>
-
- <ul>
- <li><code><em>dir</em>\bin\Apache.exe</code> - Apache
- executable</li>
-
- <li><code><em>dir</em>\bin\ApacheMonitor.exe</code> - Service
- monitor taskbar icon utility</li>
-
- <li><code><em>dir</em>\bin\htdigest.exe</code> - Digest auth
- password file utility</li>
-
- <li><code><em>dir</em>\bin\htdbm.exe</code> - SDBM auth
- database password file utility</li>
-
- <li><code><em>dir</em>\bin\htpasswd.exe</code> - Basic auth
- password file utility</li>
-
- <li><code><em>dir</em>\bin\logresolve.exe</code> - Log file
- dns name lookup utility</li>
-
- <li><code><em>dir</em>\bin\rotatelogs.exe</code> - Log file
- cycling utility</li>
-
- <li><code><em>dir</em>\bin\wintty.exe</code> - Console window
- utility</li>
-
- <li><code><em>dir</em>\bin\libapr.dll</code> - Apache
- Portable Runtime shared library</li>
-
- <li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache
- Utility Runtime shared library</li>
-
- <li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache Core
- library</li>
-
- <li><code><em>dir</em>\modules\mod_*.so</code> - Loadable
- Apache modules</li>
-
- <li><code><em>dir</em>\conf</code> - Configuration
- directory</li>
-
- <li><code><em>dir</em>\logs</code> - Empty logging
- directory</li>
-
- <li><code><em>dir</em>\include</code> - C language header
- files</li>
-
- <li><code><em>dir</em>\lib</code> - Link library files</li>
- </ul>
-
- <h3><a name="projectcomponents-warn" id="projectcomponents-warn">Warning about building Apache from the development tree</a></h3>
-
-
-
- <div class="note">Note only the <code>.dsp</code> files are maintained between <code>release</code>
- builds. The <code>.mak</code> files are NOT regenerated, due to the tremendous
- waste of reviewer's time. Therefore, you cannot rely on the <code>NMAKE</code>
- commands above to build revised <code>.dsp</code> project files unless you
- then export all <code>.mak</code> files yourself from the project. This is
- unnecessary if you build from within the Microsoft
- Developer Studio environment.</div>
-
- <div class="note">Also note it is very worthwhile to build the <code>BuildBin</code>
- target project (or the command line <code>_apacher</code> or
- <code>_apached</code> target) prior to exporting the make files.
- Many files are autogenerated in the build process. Only a full
- build provides all of the dependent files required to build proper
- dependency trees for correct build behavior.</div>
-
- <p>In order to create distribution <code>.mak</code> files, always review
- the generated <code>.mak</code> (or <code>.dep</code>) dependencies for
- Platform SDK or other garbage includes. The <code>DevStudio\SharedIDE\bin\</code>
- (VC5) or <code>DevStudio\Common\MSDev98\bin\</code> (VC6) directory contains
- the <code>sysincl.dat</code> file, which must list all exceptions. Update this
- file (including both forward and backslashed paths, such as both
- <code>sys/time.h</code> and <code>sys\time.h</code>) to include such dependencies.
- Including local-install paths in a distributed <code>.mak</code> file will
- cause the build to fail completely. And don't forget to run
- <code>srclib/apr/build/fixwin32mak.pl</code> in order to fix absolute
- paths within the <code>.mak</code> files.</p>
-
-
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/platform/win_compiling.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/win_compiling.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/win_compiling.html.ko.euc-kr b/docs/manual/platform/win_compiling.html.ko.euc-kr
deleted file mode 100644
index 201cf416b6..0000000000
--- a/docs/manual/platform/win_compiling.html.ko.euc-kr
+++ /dev/null
@@ -1,421 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Microsoft Windows¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Microsoft Windows¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/win_compiling.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/win_compiling.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϱâ Àü¿¡ ÁÖÀÇÇÒ Á¡ÀÌ ¸¹´Ù. ¹Ì¸® <a href="windows.html">Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¹ý</a>À»
- Âü°íÇ϶ó.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#requirements">¿ä±¸»çÇ×</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#commandbuild">¸í·ÉÇà¿¡¼­ ÄÄÆÄÀÏÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#workspacebuild">Developer Studio Workspace IDE¿¡¼­ ÄÄÆÄÀÏÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#projectcomponents">ÇÁ·ÎÁ§Æ® ±¸¼º¿ä¼Ò</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">¿ä±¸»çÇ×</a></h2>
-
-
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ·Á¸é ´ÙÀ½ÀÌ Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾ß ÇÑ´Ù:</p>
-
- <ul>
- <li>
- <p>µð½ºÅ© °ø°£</p>
- <p>³²Àº µð½ºÅ© °ø°£ÀÌ ÃÖ¼ÒÇÑ 50 MB´Â µÇ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡
- ¼³Ä¡ÈÄ¿¡´Â »¡¸® Áõ°¡ÇÏ´Â ·Î±×¿Í ij½¬ÆÄÀÏÀ» Á¦¿ÜÇÏ°í
- ¾à 10 MB Á¤µµ°¡ ÇÊ¿äÇÏ´Ù. ½ÇÁ¦ µð½ºÅ© »ç¿ë·®Àº ¼±ÅÃÇÑ
- ±¸¼º°ú Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ ȤÀº ¶óÀ̺귯¸®¿¡ µû¶ó Å©°Ô
- ´Ù¸£´Ù.</p>
- </li>
-
- <li>
- <p>Microsoft Visual C++ 5.0 ÀÌ»ó.</p>
- <p>¾ÆÆÄÄ¡´Â ¸í·ÉÇà µµ±¸¸¦ »ç¿ëÇϰųª Visual Studio IDE
- Workbench ¾È¿¡¼­ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. ¸í·ÉÇà¿¡¼­ ÄÄÆÄÀÏÇÑ´Ù¸é
- <code>vcvars32</code> ¹èÄ¡ÆÄÀÏÀÌ ¼³Á¤ÇÏ´Â <code>PATH</code>,
- <code>INCLUDE</code>, <code>LIB</code> µî ȯ°æº¯¼ö°¡
- ÇÊ¿äÇÏ´Ù:</p>
-
- <div class="example"><p><code>
- "c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
- </code></p></div>
- </li>
-
- <li>
- <p>Windows Platform SDK.</p>
- <p>¾î¶² ¾ÆÆÄÄ¡ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é Visual C++ 5.0¿¡ Ãß°¡·Î
- ÃֽŠMicrosoft Windows Platform SDK°¡ ÇÊ¿äÇÏ´Ù. ¸í·ÉÇà¿¡¼­
- ÄÄÆÄÀÏÇÑ´Ù¸é <code>setenv</code> ¹èÄ¡ÆÄÀÏÀÌ Platform
- SDK ȯ°æÀ» ¸¸µç´Ù:</p>
-
- <div class="example"><p><code>
- "c:\Program Files\Platform SDK\setenv.bat"
- </code></p></div>
-
- <p>Visual C++ 6.0 ÀÌ»ó¿¡ Æ÷ÇÔµÈ Platform SDK ÆÄÀÏÀº
- ÃæºÐÇÏ´Ù. ÀÌ ¹öÀüÀ» »ç¿ëÇÏ´Â »ç¿ëÀÚ´Â ÀÌ °úÁ¤À» »ý·«Çصµ
- µÈ´Ù.</p>
-
- <div class="note">¸ðµç <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> ±â´ÉÀ» »ç¿ëÇÏ·Á¸é
- ÃֽŠWindows Platform SDK°¡ ÇÊ¿äÇÏ´Ù. ÃֽŠ¹öÀüÀÌ ¾Æ´Ï¸é
- MSVC++ 5.0Àº <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code> ±â´ÉÀÇ ÀϺθ¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù°í °æ°íÇÑ´Ù. <a href="http://msdn.microsoft.com/downloads/sdks/platform/platform.asp">http://msdn.microsoft.com/downloads/sdks/platform/platform.asp</a>¿¡
- ÃֽŠ¹öÀüÀÌ ÀÖ´Ù.</div>
- </li>
-
- <li>
- <p>awk µµ±¸ (awk, gawk µî).</p>
- <p>ÄÄÆÄÀÏÇÑ ½Ã½ºÅÛ¿¡ ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ·Á¸é
- <code>awk.exe</code> µµ±¸¸¦ »ç¿ëÇÏ¿© ¿©·¯ ÆÄÀÏÀ» ¼öÁ¤Çؾß
- ÇÑ´Ù. (PerlÀ̳ª WSH/VB°ú ºñ±³ÇÏ¿©) ´Ù¿î¹Þ±â¿¡ ¸Å¿ì ÀÛ°í
- ÆÄÀÏ »ý¼º ÀÛ¾÷ÀÌ °¡´ÉÇÏ¿© awk¸¦ ¼±ÅÃÇß´Ù. Brian KernighanÀÇ
- <a href="http://cm.bell-labs.com/cm/cs/who/bwk/">http://cm.bell-labs.com/cm/cs/who/bwk/</a> »çÀÌÆ®¿¡
- ÄÄÆÄÀÏµÈ Win32 ½ÇÇàÆÄÀÏ <a href="http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe">http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe</a>ÀÌ
- ÀÖ´Ù. À̸§À» <code>awk95.exe</code> ´ë½Å
- <code>awk.exe</code>·Î º¯°æÇØ¾ß ÇÑ´Ù.</p>
-
- <div class="note">Developer Studio IDE´Â Tools ¸Þ´º Options...
- Directories ÅÇÀÇ (Developer Studio 7.0À̶ó¸é Projects
- - VC++ Directories pane) Executable files °æ·Î ¸ñ·Ï¿¡¼­¸¸
- <code>awk.exe</code>¸¦ ã´Â´Ù. ÀÌ ¸ñ·Ï¿¡ <code>awk.exe</code>
- °æ·Î¸¦ Ãß°¡ÇÏ°í, ÇÊ¿äÇÏ´Ù¸é <code>PATH</code> ȯ°æº¯¼ö¿¡µµ
- Ãß°¡ÇÑ´Ù.</div>
-
- <div class="note">CygwinÀ» (<a href="http://www.cygwin.com/">http://www.cygwin.com/</a>) »ç¿ëÇÑ´Ù¸é
- <code>gawk.exe</code>¶ó´Â À̸§À¸·Î awk µµ±¸°¡ ÀÖÀ¸¸ç,
- <code>awk.exe</code> ÆÄÀÏÀº <code>gawk.exe</code> ÆÄÀÏÀÇ
- ½Éº¼¸µÅ©ÀÓÀ» ÁÖÀÇÇ϶ó. Windows ¸í·É ÇÁ·ÒÇÁÆ®°¡ ½Éº¼¸µÅ©¸¦
- ÀνÄÇÏÁö ¸øÇϱ⶧¹®¿¡ InstallBinÀ» ÄÄÆÄÀÏÇÒ¶§ ½ÇÆÐÇÑ´Ù.
- ÇØ°áÃ¥Àº cygwin¿¡¼­ <code>awk.exe</code>¸¦ »èÁ¦ÇÏ°í
- <code>gawk.exe</code> À̸§À» <code>awk.exe</code>·Î
- ¹Ù²Û´Ù.</div>
- </li>
-
- <li>
- <p>[¼±ÅÃÀûÀÎ] OpenSSL ¶óÀ̺귯¸® (<code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>°ú
- <code>ab.exe</code>ÀÇ ssl Áö¿ø¿¡ »ç¿ë)</p>
- <p><strong>ÁÖÀÇ: °­·ÂÇÑ ¾Ïȣȭ¿Í ƯÇã°¡ °É¸° ÁöÀûÀç»ê±ÇÀ»
- Àü¼¼°è¿¡ ¹èÆ÷Çϴµ¥´Â »ó´çÇÑ Á¦¾àÀÌ ÀÖ´Ù.</strong>
- OpenSSLÀº ¹Ì±¹ ¼öÃâ±ÔÁ¦¹ýÀÌ ±ÔÁ¦ÇÏ¸ç ¹Ì±¹°ú ±âŸ Áö¿ª¿¡¼­
- ƯÇã·Î º¸È£µÇ´Â ÁöÀûÀç»ê±ÇÀÎ °­·ÂÇÑ ¾Ïȣȭ¸¦ Æ÷ÇÔÇÑ´Ù.
- Apache Software Foundation°ú OpenSSL ÇÁ·ÎÁ§Æ®´Â OpenSSL
- ÇÁ·ÎÁ§Æ®°¡ Á¦°øÇÏ´Â Äڵ带 ¼ÒÀ¯, »ç¿ë, ¹èÆ÷Çϴµ¥ µû¸¥
- ¹ýÀû ÀÚ¹®À» Á¦°øÇÏÁö ¾Ê´Â´Ù. <strong>Á÷Á¢ ¹ý·ü »ó´ãÀ»
- ¹Þ±æ ¹Ù¶õ´Ù. ´ç½Å ÇൿÀÇ Ã¥ÀÓÀº ´ç½Å¿¡°Ô ÀÖ´Ù.</strong></p>
-
- <p><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>À̳ª (SSLÀ» Áö¿øÇÏ´Â
- <code>ab.exe</code>) abs ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ·Á¸é, OpenSSLÀ»
- <a href="http://www.openssl.org/source/">http://www.openssl.org/source/</a>¿¡¼­ ´Ù¿î¹Þ¾Æ¼­
- <code>srclib</code>ÀÇ <code>openssl</code>À̶ó´Â
- ÇÏÀ§µð·ºÅ丮¿¡ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. <code>release</code>¿Í
- <code>debug</code>·Î ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇϸç 0.9.7
- ¹öÀü¿¡ Àִ ƯÇã°¡ °É¸° ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ¾Æ·¡
- ÄÄÆÄÀÏ ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- perl Configure VC-WIN32<br />
- perl util\mkfiles.pl &gt;MINFO<br />
- perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile<br />
- perl util\mk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile.dbg<br />
- perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea &gt;ms\libeay32.def<br />
- perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea &gt;ms\ssleay32.def<br />
- nmake<br />
- nmake -f makefile.dbg
- </code></p></div>
-
- </li>
-
- <li>
- <p>[¼±ÅÃÀûÀÎ] zlib ¼Ò½º (<code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>¿¡
- »ç¿ë)</p>
- <p>ZlibÀ» <code>srclib</code>ÀÇ <code>zlib</code>¶ó´Â
- ÇÏÀ§µð·ºÅ丮¿¡ ¼³Ä¡ÇØ¾ß ÇÏÁö¸¸, ¼Ò½º¸¦ ¹Ì¸® ÄÄÆÄÀÏÇÒ
- ÇÊ¿ä´Â ¾ø´Ù. ÄÄÆÄÀÏ ½Ã½ºÅÛÀº ÀÌ ¾ÐÃà¼Ò½º¸¦
- <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> ¸ðµâ°ú °°ÀÌ ÄÄÆÄÀÏÇÑ´Ù.
- ZlibÀº <a href="http://www.gzip.org/zlib/">http://www.gzip.org/zlib/</a>¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù --
- <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>´Â 1.1.4 ¹öÀü°ú Á¤»óÀûÀ¸·Î
- ÄÄÆÄÀϵǾú´Ù.</p>
- </li>
-
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="commandbuild" id="commandbuild">¸í·ÉÇà¿¡¼­ ÄÄÆÄÀÏÇϱâ</a></h2>
-
-
-
- <p>¸ÕÀú Àû´çÇÑ µð·ºÅ丮¿¡ ¾ÆÆÄÄ¡ ¹èÆ÷º» ¾ÐÃàÀ» Ǭ´Ù. ¸í·ÉÇà
- ÇÁ·ÒÇÁÆ®¸¦ ¿­°í ±× µð·ºÅ丮·Î <code>cd</code>ÇÑ´Ù.</p>
-
- <p><code>Makefile.win</code> ÆÄÀÏ¿¡ ¾ÆÆÄÄ¡ makefile ¸í·ÉÀÌ
- ÀÖ´Ù. Windows NT¿¡¼­ <code>release</code>¿Í <code>debug</code>
- ÄÄÆÄÀÏÇÏ´Â ¸í·É¾î´Â °¢°¢ ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><pre>
-nmake /f Makefile.win _apacher
-
-nmake /f Makefile.win _apached
- </pre></div>
-
- <p>µÎ ¸í·É¾î ¸ðµÎ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÑ´Ù. ÈÄÀÚ´Â °á°úÆÄÀÏ¿¡
- µð¹ö±ë Á¤º¸¸¦ Æ÷ÇÔÇÏ¿© ¹ö±×¸¦ ã°í ¹®Á¦¸¦ ÃßÀûÇϱ⠽±°Ô
- ÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="workspacebuild" id="workspacebuild">Developer Studio Workspace IDE¿¡¼­ ÄÄÆÄÀÏÇϱâ</a></h2>
-
-
-
- <p>VC++ÀÇ Visual Studio °³¹ß ȯ°æÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ
- ¼öµµ ÀÖ´Ù. °úÁ¤À» ½±°Ô ÇÏ·Á°í Visual Studio workspace
- <code>Apache.dsw</code>¸¦ Á¦°øÇÑ´Ù. ÀÌ workspace´Â ¿ÏÀüÇÑ
- ¾ÆÆÄÄ¡ ¹ÙÀ̳ʸ® ¹èÆ÷º»¿¡ ÇÊ¿äÇÑ <code>.dsp</code> ÇÁ·ÎÁ§Æ®
- ¸ñ·ÏÀ» ´ã°íÀÖ´Ù. ¶Ç, ¾Ë¸ÂÀº ¼ø¼­·Î ÄÄÆÄÀÏÇϱâÀ§ÇÑ ÇÁ·ÎÁ§Æ®°£
- ÀÇÁ¸¼º Á¤º¸µµ Æ÷ÇÔÇÑ´Ù.</p>
-
- <p><code>Apache.dsw</code> workspace¸¦ ¿­°í
- <code>InstallBin</code>À» (<code>Release</code>³ª
- <code>Debug</code> Áß ¿øÇÏ´Â °ÍÀ») Active Project·Î ¼±ÅÃÇÑ´Ù.
- <code>InstallBin</code>Àº °ü·ÃµÈ ¸ðµç ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ°í,
- ÄÄÆÄÀÏµÈ ½ÇÇàÆÄÀÏ°ú dllÀ» ¿Å±â´Â <code>Makefile.win</code>À»
- È£ÃâÇÑ´Ù. <code>InstallBin</code>ÀÇ Settings, General ÅÇ,
- Build command line Ç׸ñÀ» ¼öÁ¤ÇÏ¿© <code>INSTDIR=</code>À»
- º¯°æÇÒ ¼ö ÀÖ´Ù. <code>INSTDIR=</code> ±âº»°ªÀº
- <code>/Apache2</code> µð·ºÅ丮ÀÌ´Ù. (¼³Ä¡ÇÏÁö¾Ê°í) Å×½ºÆ®·Î
- ÄÄÆÄÀϸ¸ Çغ¸·Á¸é ´ë½Å <code>BuildBin</code> ÇÁ·ÎÁ§Æ®¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p><code>.dsp</code> ÇÁ·ÎÁ§Æ® ÆÄÀÏÀº Visual C++ 6.0 Çü½ÄÀÌ´Ù.
- Visual C++ 5.0 (97)¿¡¼­µµ ÀÌ ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Visual
- C++ 7.0 (.net)Àº <code>Apache.dsw</code>¿Í <code>.dsp</code>
- ÆÄÀϵéÀ» <code>Apache.sln</code>°ú <code>.msproj</code>
- ÆÄÀϵé·Î º¯È¯ÇÑ´Ù. <code>.dsp</code> ¼Ò½ºÆÄÀÏÀ» ¼öÁ¤Çϸé
- ¹Ýµå½Ã <code>.msproj</code> ÆÄÀÏ·Î ´Ù½Ã º¯È¯Ç϶ó! ±×³É VC++
- 7.0 IDE¿¡¼­ <code>Apache.dsw</code>¸¦ ´Ù½Ã ¿­±â¸¸ ÇÏ¸é µÈ´Ù.</p>
-
- <p>¶Ç, Visual C++ 7.0 (.net) »ç¿ëÀÚ´Â Build ¸Þ´º, Configuration
- Manager ´ëȭâ¿¡¼­ <code>Debug</code>¿Í <code>Release</code>ÀÇ
- abs, <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>, <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>
- Solution modules ¼±ÅÃÀ» ÇØÁ¦ÇØ¾ß ÇÑ´Ù. <code>srclib</code>¿¡
- <code>openssl</code>À̳ª <code>zlib</code> µð·ºÅ丮°¡ ÀÖ´Â
- °æ¿ì¿¡¸¸ <code>nmake</code>¸¦ ½ÇÇàÇϰųª (ÀÌ ¸ðµâÀ» ¸í½ÃÀûÀ¸·Î
- ÄÄÆÄÀÏÇÏ´Â) IDE <code>BinBuild</code> ´ë»óÀ» »ç¿ëÇÏ¿© ¸ðµâÀ»
- ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ExportÇÑ <code>.mak</code> ÆÄÀϵéÀÌ È¥¶õ½º·´Áö¸¸, Visual
- C++ 5.0 »ç¿ëÀÚ°¡ <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>, abs (SSLÀ» Áö¿øÇÏ´Â
- ab), <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>¸¦ ÄÄÆÄÀÏÇÒ¶§ ÇÊ¿äÇÏ´Ù.
- VC++ 7.0 (.net) »ç¿ëÀÚ¿¡°Ôµµ <code>binenv</code> º¸´Ù
- <code>nmake</code>¸¦ »ç¿ëÇϸé ÄÄÆÄÀÏÀÌ ´õ ºü¸£´Ù. VC++ 5.0À̳ª
- 6.0 IDE¿¡¼­ Àüü ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ°í, Project ¸Þ´ºÀÇ Export
- for all makefiles¸¦ »ç¿ëÇ϶ó. µ¿ÀûÀ¸·Î ÀÚµ¿ »ý¼ºÇÏ´Â ´ë»óÀ»
- ¸ðµÎ ÄÄÆÄÀÏÇÏ°í ¿Ã¹Ù¸¥ ÀÇÁ¸¼º Á¤º¸¸¦ ¾ò±âÀ§Çؼ­´Â ¸ÕÀú
- ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÏ¿© °æ·Î¸¦
- ¼öÁ¤ÇÏ¸é ¾î¶² °æ·Î¿¡¼­µµ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- perl srclib\apr\build\fixwin32mak.pl
- </code></p></div>
-
- <p><code>httpd</code> ¼Ò½º <em>ÃÖ»óÀ§</em> µð·ºÅ丮¿¡¼­
- ¸í·É¾î¸¦ ½ÇÇàÇØ¾ß ÇÑ´Ù. ÇöÀç µð·ºÅ丮¿Í ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â
- ¸ðµç <code>.mak</code>¿Í <code>.dep</code> ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ»
- ¼öÁ¤ÇÏ°í, <code>.dsp</code>¸¦ °í·ÁÇÏ¿© ÆÄÀϽð£À» ¼öÁ¤ÇÑ´Ù.</p>
-
- <p>ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ» ´Ùµë¾î¼­ ÆÐÄ¡¸¦ º¸³½´Ù¸é, ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ»
- Visual Studio 6.0 Çü½ÄÀ¸·Î ¸¸µé¾î¾ß ÇÑ´Ù. º¯°æÀº °£´ÜÇÏ°í,
- VC++ 5.0¿¡¼­ 7.0±îÁö ¸ðµç ȯ°æ¿¡¼­ ÀνÄÇÏ´Â ÃÖ¼ÒÇÑÀÇ ÄÄÆÄÀÏ
- ¿É¼Ç°ú ¸µÄ¿ ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="projectcomponents" id="projectcomponents">ÇÁ·ÎÁ§Æ® ±¸¼º¿ä¼Ò</a></h2>
-
-
-
- <p><code>Apache.dsw</code> workspace¿Í <code>makefile.win</code>
- <code>nmake</code> ½ºÅ©¸³Æ®´Â ´ÙÀ½ ¼ø¼­´ë·Î ¾ÆÆÄÄ¡ ¼­¹ö
- <code>.dsp</code> ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÑ´Ù:</p>
-
- <ol>
- <li><code>srclib\apr\apr.dsp</code></li>
-
- <li><code>srclib\apr\libapr.dsp</code></li>
-
- <li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
-
- <li><code>srclib\apr-util\xml\expat\lib\xml.dsp</code></li>
-
- <li><code>srclib\apr-util\aprutil.dsp</code></li>
-
- <li><code>srclib\apr-util\libaprutil.dsp</code></li>
-
- <li><code>srclib\pcre\dftables.dsp</code></li>
-
- <li><code>srclib\pcre\pcre.dsp</code></li>
-
- <li><code>srclib\pcre\pcreposix.dsp</code></li>
-
- <li><code>server\gen_test_char.dsp</code></li>
-
- <li><code>libhttpd.dsp</code></li>
-
- <li><code>Apache.dsp</code></li>
- </ol>
-
- <p>¶Ç, <code>modules\</code> ÇÏÀ§µð·ºÅ丮 ¾Æ·¡ ´ëºÎºÐÀÇ
- ¸ðµâ¿¡´Â ÇÁ·ÎÁ§Æ®ÆÄÀÏÀÌ ÀÖ´Ù.</p>
-
- <p><code>support\</code> µð·ºÅ丮¿¡´Â ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϴµ¥
- ÇÊ¿äÇÏÁö´Â ¾ÊÁö¸¸, °ü¸®ÀÚ°¡ ¾ÆÆÄÄ¡¸¦ °Ë»çÇϰųª ¾ÏÈ£ÆÄÀÏ°ú
- ·Î±×ÆÄÀÏÀ» °ü¸®Çϴµ¥ »ç¿ëÇÒ Ãß°¡ ÇÁ·Î±×·¥µéÀÇ ÇÁ·ÎÁ§Æ®ÆÄÀÏÀÌ
- ÀÖ´Ù. Windows Àü¿ë Áö¿ø ÇÁ·Î±×·¥Àº <code>support\win32\</code>
- µð·ºÅ丮¿¡ µû·Î ÀÖ´Ù.</p>
-
- <ol>
- <li><code>support\ab.dsp</code></li>
-
- <li><code>support\htdigest.dsp</code></li>
-
- <li><code>support\htpasswd.dsp</code></li>
-
- <li><code>support\logresolve.dsp</code></li>
-
- <li><code>support\rotatelogs.dsp</code></li>
-
- <li><code>support\win32\ApacheMonitor.dsp</code></li>
-
- <li><code>support\win32\wintty.dsp</code></li>
- </ol>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϸé server root µð·ºÅ丮¿¡ ¼³Ä¡ÇØ¾ß ÇÑ´Ù.
- ±âº»°ªÀº °°Àº µð½ºÅ©ÀÇ <code>\Apache2</code> µð·ºÅ丮ÀÌ´Ù.</p>
-
- <p>ÄÄÆÄÀÏÇÏ°í ¸ðµç ÆÄÀÏÀ» ¿øÇÏ´Â Æú´õ <em>dir</em>¿¡ ÀÚµ¿À¸·Î
- ¼³Ä¡ÇÏ·Á¸é ´ÙÀ½ <code>nmake</code> ¸í·É¾îÁß Çϳª¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><pre>
-nmake /f Makefile.win installr INSTDIR=<em>dir</em>
-
-nmake /f Makefile.win installd INSTDIR=<em>dir</em>
- </pre></div>
-
- <p><code>INSTDIR</code>ÀÇ <em>dir</em> ¾Æ±Ô¸ÕÆ®´Â ¼³Ä¡µð·ºÅ丮¸¦
- ¶æÇÑ´Ù. »ý¶ôÇϸé <code>\Apache2</code>¿¡ ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ´Ù.</p>
-
- <p>´ÙÀ½°ú °°ÀÌ ¼³Ä¡ÇÑ´Ù:</p>
-
- <ul>
- <li><code><em>dir</em>\bin\Apache.exe</code> - ¾ÆÆÄÄ¡
- ½ÇÇàÆÄÀÏ</li>
-
- <li><code><em>dir</em>\bin\ApacheMonitor.exe</code> -
- ¼­ºñ½º °¨½Ã¿ë ÀÛ¾÷Ç¥½ÃÁÙ ¾ÆÀÌÄÜ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\htdigest.exe</code> - Digest
- auth ¾ÏÈ£ÆÄÀÏ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\htdbm.exe</code> - SDBM auth
- µ¥ÀÌÅͺ£À̽º ¾ÏÈ£ÆÄÀÏ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\htpasswd.exe</code> - Basic
- auth ¾ÏÈ£ÆÄÀÏ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\logresolve.exe</code> - ·Î±×ÆÄÀÏ¿¡¼­
- dns À̸§À» ã´Â µµ±¸</li>
-
- <li><code><em>dir</em>\bin\rotatelogs.exe</code> - ·Î±×ÆÄÀÏ
- ¼øȯ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\wintty.exe</code> - ÄܼÖâ
- µµ±¸</li>
-
- <li><code><em>dir</em>\bin\libapr.dll</code> - Apache
- Portable Runtime °øÀ¯ ¶óÀ̺귯¸®</li>
-
- <li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache
- Utility Runtime °øÀ¯ ¶óÀ̺귯¸®</li>
-
- <li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache
- Core ¶óÀ̺귯¸®</li>
-
- <li><code><em>dir</em>\modules\mod_*.so</code> - ÀоîµéÀÏ
- ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¸ðµâ</li>
-
- <li><code><em>dir</em>\conf</code> - ¼³Á¤ µð·ºÅ丮</li>
-
- <li><code><em>dir</em>\logs</code> - ºñ¾îÀÖ´Â ·Î±×
- µð·ºÅ丮</li>
-
- <li><code><em>dir</em>\include</code> - C ¾ð¾î Çì´õÆÄÀÏ</li>
-
- <li><code><em>dir</em>\lib</code> - ¸µÅ© ¶óÀ̺귯¸®ÆÄÀÏ</li>
- </ul>
-
- <h3><a name="projectcomponents-warn" id="projectcomponents-warn">°³¹ßÁßÀÎ ¾ÆÆÄÄ¡ ¹öÀüÀ» ÄÄÆÄÀÏÇÒ¶§ °æ°í</a></h3>
-
-
-
- <div class="note"><code>.dsp</code> ÆÄÀÏÀº <code>release</code>¸¶´Ù
- »õ·Î ¸¸µé¾îÁø´Ù. °³¹ßÀÚÀÇ ½Ã°£³¶ºñ¸¦ ¸·±âÀ§ÇØ
- <code>.mak</code> ÆÄÀÏÀº »õ·Î ¸¸µéÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î
- <code>NMAKE</code> ¸í·É¾î¸¦ »ç¿ëÇÏ¿© »õ·Î¿î <code>.dsp</code>
- ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ ¼ö ¾ø´Ù. ÇÁ·ÎÁ§Æ®¿¡¼­ Á÷Á¢ ¸ðµç
- <code>.mak</code> ÆÄÀÏÀ» exportÇØ¾ß ÇÑ´Ù. Microsoft Developer
- Studio ȯ°æ¿¡¼­ ÄÄÆÄÀÏÇÑ´Ù¸é ÀÌ ÀÛ¾÷ÀÌ ÇÊ¿ä¾ø´Ù.</div>
-
- <div class="note">¶Ç, makefileÀ» exportÇϱâ Àü¿¡ <code>BuildBin</code>
- ÇÁ·ÎÁ§Æ®¸¦ (ȤÀº <code>_apacher</code>³ª <code>_apached</code>
- ¸í·ÉÇà ´ë»ó) ÄÄÆÄÀÏÇÏ¸é ¸Å¿ì µµ¿òÀÌ µÈ´Ù. ÄÄÆÄÀÏÁß¿¡ ¸¹Àº
- ÆÄÀÏÀÌ ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù. Àüü¸¦ ÄÄÆÄÀÏÇؾ߸¸ Á¤»óÀûÀ¸·Î
- ÄÄÆÄÀÏÇÒ¶§ ÇÊ¿äÇÑ ÀÇÁ¸ÆÄÀÏÀ» ¸ðµÎ ¸¸µç´Ù.</div>
-
- <p>¹èÆ÷¿ë <code>.mak</code> ÆÄÀÏÀ» ¸¸µå·Á¸é Ç×»ó
- <code>.mak</code> (ȤÀº <code>.dep</code>)¿¡¼­ Platform
- SDK µîÀÇ ÀÇÁ¸¼ºÀ» Á¡°ËÇ϶ó.
- <code>DevStudio\SharedIDE\bin\</code> (VC5)³ª
- <code>DevStudio\Common\MSDev98\bin\</code> (VC6) µð·ºÅ丮¿¡´Â
- ¸ðµç ¿¹¿Ü ¸ñ·ÏÀÌ ´ã±ä <code>sysincl.dat</code> ÆÄÀÏÀÌ
- ÀÖ´Ù. ÀÌ ÆÄÀÏ¿¡ ÀÇÁ¸¼º Á¤º¸¸¦ Ãß°¡ÇÑ´Ù
- (<code>sys/time.h</code>¿Í <code>sys\time.h</code>¿Í °°ÀÌ,
- °æ·Î´Â ½½·¡½¬¸¦ »ç¿ëÇÑ °Í°ú ¹é½½·¡½¬¸¦ »ç¿ëÇÑ °Í ¸ðµÎ¸¦
- Ãß°¡ÇÑ´Ù). ¹èÆ÷ÇÒ <code>.mak</code> ÆÄÀÏ¿¡ ÇöÀç ÄÄÇ»ÅÍ¿¡¸¸
- ÇØ´çÇÏ´Â ¼³Ä¡°æ·Î°¡ ÀÖ´Ù¸é ÄÄÆÄÀÏÀÌ ¿ÏÀüÈ÷ ½ÇÆÐÇÑ´Ù.
- ±×·¯¹Ç·Î <code>srclib/apr/build/fixwin32mak.pl</code>À»
- ½ÇÇàÇØÇÏ¿© <code>.mak</code> ÆÄÀÏ¿¡ ÀÖ´Â Àý´ë°æ·Î¸¦ ¾ø¾Ö¾ß
- ÇÑ´Ù.</p>
-
-
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/win_compiling.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/win_compiling.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/win_compiling.xml b/docs/manual/platform/win_compiling.xml
deleted file mode 100644
index a2b94dd761..0000000000
--- a/docs/manual/platform/win_compiling.xml
+++ /dev/null
@@ -1,425 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="win_compiling.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Compiling Apache for Microsoft Windows</title>
-
- <summary>
-
- <p>There are many important points before you begin compiling
- Apache. See <a href="windows.html">Using Apache with Microsoft
- Windows</a> before you begin.</p>
-
- </summary>
-
- <section id="requirements">
-
- <title>Requirements</title>
-
- <p>Compiling Apache requires the following environment to be
- properly installed:</p>
-
- <ul>
- <li>
- <p>Disk Space</p>
- <p>Make sure you have at least 50 MB of free disk space
- available. After installation Apache requires approximately
- 10 MB of disk space, plus space for log and cache files,
- which can grow rapidly. The actual disk space requirements
- will vary considerably based on your chosen configuration and
- any third-party modules or libraries.</p>
- </li>
-
- <li>
- <p>Microsoft Visual C++ 5.0 or higher.</p>
- <p>Apache can be built using the command line tools, or from
- within the Visual Studio IDE Workbench. The command line
- build requires the environment to reflect the <code>PATH</code>,
- <code>INCLUDE</code>, <code>LIB</code> and other variables
- that can be configured with the <code>vcvars32</code> batch file:</p>
-
- <example>
- "c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
- </example>
- </li>
-
- <li>
- <p>The Windows Platform SDK.</p>
- <p>Visual C++ 5.0 builds require an updated Microsoft Windows
- Platform SDK to enable some Apache features. For command line
- builds, the Platform SDK environment is prepared by the
- <code>setenv</code> batch file:</p>
-
- <example>
- "c:\Program Files\Platform SDK\setenv.bat"
- </example>
-
- <p>The Platform SDK files distributed with Visual C++ 6.0 and
- later are sufficient, so users of later version may skip
- this requirement.</p>
-
- <note>Note that the Windows Platform SDK update is required
- to enable all supported <module>mod_isapi</module> features.
- Without a recent update, Apache will issue warnings under
- MSVC++ 5.0 that some <module>mod_isapi</module> features
- will be disabled. Look for the update at <a
- href="http://msdn.microsoft.com/downloads/sdks/platform/platform.asp"
- >http://msdn.microsoft.com/downloads/sdks/platform/platform.asp</a>.</note>
- </li>
-
- <li>
- <p>The awk utility (awk, gawk or similar).</p>
- <p>To install Apache within the build system, several files are
- modified using the <code>awk.exe</code> utility. awk was chosen since it
- is a very small download (compared with Perl or WSH/VB) and
- accomplishes the task of generating files. Brian Kernighan's
- <a href="http://cm.bell-labs.com/cm/cs/who/bwk/"
- >http://cm.bell-labs.com/cm/cs/who/bwk/</a>
- site has a compiled native Win32 binary,
- <a href="http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe"
- >http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe</a> which
- you must save with the name <code>awk.exe</code> rather than
- <code>awk95.exe</code>.</p>
-
- <note>Note that Developer Studio IDE will only find
- <code>awk.exe</code> from the Tools menu Options... Directories
- tab (the Projects - VC++ Directories pane in Developer Studio 7.0)
- listing Executable file paths. Add the path for <code>awk.exe</code>
- to this list, and your system <code>PATH</code> environment variable,
- as needed.</note>
-
- <note>Also note that if you are using Cygwin (<a href="http://www.cygwin.com/"
- >http://www.cygwin.com/</a>) the awk utility is named <code>gawk.exe</code> and
- that the file <code>awk.exe</code> is really a symlink to the <code>gawk.exe</code>
- file. The Windows command shell does not recognize symlinks, and because of that
- building InstallBin will fail. A workaround is to delete <code>awk.exe</code> from
- the cygwin installation and rename <code>gawk.exe</code> to <code>awk.exe</code>.</note>
- </li>
-
- <li>
- <p>[Optional] OpenSSL libraries (for <module>mod_ssl</module>
- and <code>ab.exe</code> with ssl support)</p>
- <p><strong>Caution: there are significant restrictions and
- prohibitions on the use and distribution of strong cryptography
- and patented intellectual property throughout the world.</strong>
- OpenSSL includes strong cryptography controlled by both export
- regulations and domestic law, as well as intellectual property
- protected by patent, in the United States and elsewhere. Neither
- the Apache Software Foundation nor the OpenSSL project can provide
- legal advise regarding possession, use, or distribution of the code
- provided by the OpenSSL project. <strong>Consult your own legal
- counsel, you are responsible for your own actions.</strong></p>
-
- <p>OpenSSL must be installed into a <code>srclib</code> subdirectory named
- <code>openssl</code>, obtained from <a href="http://www.openssl.org/source/"
- >http://www.openssl.org/source/</a>, in order to compile <module>mod_ssl</module>
- or the abs project (<code>ab.exe</code> with SSL support.) To prepare OpenSSL
- for both <code>release</code> and <code>debug</code> builds of Apache, and
- disable the patent protected features in 0.9.7, you might use the following
- build commands:</p>
-
- <example>
- perl Configure VC-WIN32<br />
- perl util\mkfiles.pl &gt;MINFO<br />
- perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile<br />
- perl util\mk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile.dbg<br />
- perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea &gt;ms\libeay32.def<br />
- perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea &gt;ms\ssleay32.def<br />
- nmake<br />
- nmake -f makefile.dbg
- </example>
-
- </li>
-
- <li>
- <p>[Optional] zlib sources (for <module>mod_deflate</module>)</p>
- <p>Zlib must be installed into a <code>srclib</code> subdirectory named
- <code>zlib</code>, however those sources need not be compiled. The build system
- will compile the compression sources directly into the <module>mod_deflate</module>
- module. Zlib can be obtained from <a href="http://www.gzip.org/zlib/"
- >http://www.gzip.org/zlib/</a> -- <module>mod_deflate</module> is
- confirmed to build correctly with version 1.1.4.</p>
- </li>
-
- </ul>
-
- </section>
-
- <section id="commandbuild">
-
- <title>Command-Line Build</title>
-
- <p>First, unpack the Apache distribution into an appropriate
- directory. Open a command-line prompt and <code>cd</code> to that
- directory.</p>
-
- <p>The master Apache makefile instructions are contained in the
- <code>Makefile.win</code> file. To compile Apache on Windows
- NT, simply use one of the following commands to compiled the
- <code>release</code> or <code>debug</code> build, respectively:</p>
-
- <example><pre>
-nmake /f Makefile.win _apacher
-
-nmake /f Makefile.win _apached
- </pre></example>
-
- <p>Either command will compile Apache. The latter will include
- debugging information in the resulting files, making it easier
- to find bugs and track down problems.</p>
-
- </section>
-
- <section id="workspacebuild">
-
- <title>Developer Studio Workspace IDE Build</title>
-
- <p>Apache can also be compiled using VC++'s Visual Studio
- development environment. To simplify this process, a
- Visual Studio workspace, <code>Apache.dsw</code>, is provided.
- This workspace exposes the entire list of working <code>.dsp</code>
- projects that are required for the complete Apache binary release.
- It includes dependencies between the projects to assure that they
- are built in the appropriate order.</p>
-
- <p>Open the <code>Apache.dsw</code> workspace, and select
- <code>InstallBin</code> (<code>Release</code> or <code>Debug</code> build,
- as desired) as the Active Project. <code>InstallBin</code> causes all
- related project to be built, and then invokes <code>Makefile.win</code> to
- move the compiled executables and dlls. You may personalize the
- <code>INSTDIR=</code> choice by changing <code>InstallBin</code>'s Settings,
- General tab, Build command line entry. <code>INSTDIR</code> defaults to the
- <code>/Apache2</code> directory. If you only want a test compile (without
- installing) you may build the <code>BuildBin</code> project instead.</p>
-
- <p>The <code>.dsp</code> project files are distributed in Visual
- C++ 6.0 format. Visual C++ 5.0 (97) will recognize them. Visual C++
- 7.0 (.net) must convert <code>Apache.dsw</code> plus the <code>.dsp</code>
- files into an <code>Apache.sln</code> plus <code>.msproj</code> files,
- be sure you reconvert the <code>.msproj</code> file if any of the source
- <code>.dsp</code> files change! This is really trivial, just open
- <code>Apache.dsw</code> in the VC++ 7.0 IDE once again.</p>
-
- <p>Visual C++ 7.0 (.net) users should also use the Build
- menu, Configuration Manager dialog to uncheck both the <code>Debug</code>
- and <code>Release</code> Solution modules abs, <module>mod_ssl</module>
- and <module>mod_deflate</module>.
- These modules are built by invoking <code>nmake</code> or the IDE directly
- with the <code>BinBuild</code> target to build those modules explicitly,
- only if the <code>srclib</code> directories <code>openssl</code>
- and/or <code>zlib</code> exist.</p>
-
- <p>Exported <code>.mak</code> files pose a greater hassle, but they are
- required for Visual C++ 5.0 users to build <module>mod_ssl</module>,
- abs (ab with SSL support) and/or <module>mod_deflate</module>.
- VC++ 7.0 (.net) users also benefit, <code>nmake</code> builds
- are faster than <code>binenv</code> builds.
- Build the entire project from within the VC++ 5.0 or 6.0 IDE,
- then use the Project Menu Export for all makefiles.
- You must build the projects first in order to create all dynamic
- auto-generated targets, so that dependencies can be parsed
- correctly. Run the following command to fix the paths so they
- will build anywhere:</p>
-
- <example>
- perl srclib\apr\build\fixwin32mak.pl
- </example>
-
- <p>You must type this command from the <em>top level</em>
- directory of the <code>httpd</code> source tree. Every
- <code>.mak</code> and <code>.dep</code> project file within
- the current directory and below will be corrected, and the
- timestamps adjusted to reflect the <code>.dsp</code>.</p>
-
- <p>If you contribute back a patch that revises project files, we
- must commit project files in Visual Studio 6.0 format. Changes
- should be simple, with minimal compilation and linkage flags that
- will be recognized by all VC++ 5.0 through 7.0 environments.</p>
-
- </section>
-
- <section id="projectcomponents">
-
- <title>Project Components</title>
-
- <p>The <code>Apache.dsw</code> workspace and <code>makefile.win</code>
- <code>nmake</code> script both build the <code>.dsp</code> projects
- of the Apache server in the following sequence:</p>
-
- <ol>
- <li><code>srclib\apr\apr.dsp</code></li>
-
- <li><code>srclib\apr\libapr.dsp</code></li>
-
- <li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
-
- <li><code>srclib\apr-util\xml\expat\lib\xml.dsp</code></li>
-
- <li><code>srclib\apr-util\aprutil.dsp</code></li>
-
- <li><code>srclib\apr-util\libaprutil.dsp</code></li>
-
- <li><code>srclib\pcre\dftables.dsp</code></li>
-
- <li><code>srclib\pcre\pcre.dsp</code></li>
-
- <li><code>srclib\pcre\pcreposix.dsp</code></li>
-
- <li><code>server\gen_test_char.dsp</code></li>
-
- <li><code>libhttpd.dsp</code></li>
-
- <li><code>Apache.dsp</code></li>
- </ol>
-
- <p>In addition, the <code>modules\</code> subdirectory tree contains
- project files for the majority of the modules.</p>
-
- <p>The <code>support\</code> directory contains project files for
- additional programs that are not part of the Apache runtime,
- but are used by the administrator to test Apache and maintain
- password and log files. Windows-specific support projects are
- broken out in the <code>support\win32\</code> directory.</p>
-
- <ol>
- <li><code>support\ab.dsp</code></li>
-
- <li><code>support\htdigest.dsp</code></li>
-
- <li><code>support\htpasswd.dsp</code></li>
-
- <li><code>support\logresolve.dsp</code></li>
-
- <li><code>support\rotatelogs.dsp</code></li>
-
- <li><code>support\win32\ApacheMonitor.dsp</code></li>
-
- <li><code>support\win32\wintty.dsp</code></li>
- </ol>
-
- <p>Once Apache has been compiled, it needs to be installed in
- its server root directory. The default is the
- <code>\Apache2</code> directory, of the same drive.</p>
-
- <p>To build and install all the files into the desired folder
- <em>dir</em> automatically, use one of the following
- <code>nmake</code> commands:</p>
-
- <example><pre>
-nmake /f Makefile.win installr INSTDIR=<em>dir</em>
-
-nmake /f Makefile.win installd INSTDIR=<em>dir</em>
- </pre></example>
-
- <p>The <em>dir</em> argument to <code>INSTDIR</code> gives
- the installation directory; it can be omitted if Apache is
- to be installed into <code>\Apache2</code>.</p>
-
- <p>This will install the following:</p>
-
- <ul>
- <li><code><em>dir</em>\bin\Apache.exe</code> - Apache
- executable</li>
-
- <li><code><em>dir</em>\bin\ApacheMonitor.exe</code> - Service
- monitor taskbar icon utility</li>
-
- <li><code><em>dir</em>\bin\htdigest.exe</code> - Digest auth
- password file utility</li>
-
- <li><code><em>dir</em>\bin\htdbm.exe</code> - SDBM auth
- database password file utility</li>
-
- <li><code><em>dir</em>\bin\htpasswd.exe</code> - Basic auth
- password file utility</li>
-
- <li><code><em>dir</em>\bin\logresolve.exe</code> - Log file
- dns name lookup utility</li>
-
- <li><code><em>dir</em>\bin\rotatelogs.exe</code> - Log file
- cycling utility</li>
-
- <li><code><em>dir</em>\bin\wintty.exe</code> - Console window
- utility</li>
-
- <li><code><em>dir</em>\bin\libapr.dll</code> - Apache
- Portable Runtime shared library</li>
-
- <li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache
- Utility Runtime shared library</li>
-
- <li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache Core
- library</li>
-
- <li><code><em>dir</em>\modules\mod_*.so</code> - Loadable
- Apache modules</li>
-
- <li><code><em>dir</em>\conf</code> - Configuration
- directory</li>
-
- <li><code><em>dir</em>\logs</code> - Empty logging
- directory</li>
-
- <li><code><em>dir</em>\include</code> - C language header
- files</li>
-
- <li><code><em>dir</em>\lib</code> - Link library files</li>
- </ul>
-
- <section id="projectcomponents-warn">
-
- <title>Warning about building Apache from the development tree</title>
-
- <note>Note only the <code>.dsp</code> files are maintained between <code>release</code>
- builds. The <code>.mak</code> files are NOT regenerated, due to the tremendous
- waste of reviewer's time. Therefore, you cannot rely on the <code>NMAKE</code>
- commands above to build revised <code>.dsp</code> project files unless you
- then export all <code>.mak</code> files yourself from the project. This is
- unnecessary if you build from within the Microsoft
- Developer Studio environment.</note>
-
- <note>Also note it is very worthwhile to build the <code>BuildBin</code>
- target project (or the command line <code>_apacher</code> or
- <code>_apached</code> target) prior to exporting the make files.
- Many files are autogenerated in the build process. Only a full
- build provides all of the dependent files required to build proper
- dependency trees for correct build behavior.</note>
-
- <p>In order to create distribution <code>.mak</code> files, always review
- the generated <code>.mak</code> (or <code>.dep</code>) dependencies for
- Platform SDK or other garbage includes. The <code>DevStudio\SharedIDE\bin\</code>
- (VC5) or <code>DevStudio\Common\MSDev98\bin\</code> (VC6) directory contains
- the <code>sysincl.dat</code> file, which must list all exceptions. Update this
- file (including both forward and backslashed paths, such as both
- <code>sys/time.h</code> and <code>sys\time.h</code>) to include such dependencies.
- Including local-install paths in a distributed <code>.mak</code> file will
- cause the build to fail completely. And don't forget to run
- <code>srclib/apr/build/fixwin32mak.pl</code> in order to fix absolute
- paths within the <code>.mak</code> files.</p>
-
- </section>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/platform/win_compiling.xml.ko b/docs/manual/platform/win_compiling.xml.ko
deleted file mode 100644
index 56f04f1d65..0000000000
--- a/docs/manual/platform/win_compiling.xml.ko
+++ /dev/null
@@ -1,423 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="win_compiling.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Microsoft Windows¿ë ¾ÆÆÄÄ¡ ÄÄÆÄÀÏ</title>
-
- <summary>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϱâ Àü¿¡ ÁÖÀÇÇÒ Á¡ÀÌ ¸¹´Ù. ¹Ì¸® <a
- href="windows.html">Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¹ý</a>À»
- Âü°íÇ϶ó.</p>
-
- </summary>
-
- <section id="requirements">
-
- <title>¿ä±¸»çÇ×</title>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ·Á¸é ´ÙÀ½ÀÌ Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾ß ÇÑ´Ù:</p>
-
- <ul>
- <li>
- <p>µð½ºÅ© °ø°£</p>
- <p>³²Àº µð½ºÅ© °ø°£ÀÌ ÃÖ¼ÒÇÑ 50 MB´Â µÇ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡
- ¼³Ä¡ÈÄ¿¡´Â »¡¸® Áõ°¡ÇÏ´Â ·Î±×¿Í ij½¬ÆÄÀÏÀ» Á¦¿ÜÇÏ°í
- ¾à 10 MB Á¤µµ°¡ ÇÊ¿äÇÏ´Ù. ½ÇÁ¦ µð½ºÅ© »ç¿ë·®Àº ¼±ÅÃÇÑ
- ±¸¼º°ú Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ ȤÀº ¶óÀ̺귯¸®¿¡ µû¶ó Å©°Ô
- ´Ù¸£´Ù.</p>
- </li>
-
- <li>
- <p>Microsoft Visual C++ 5.0 ÀÌ»ó.</p>
- <p>¾ÆÆÄÄ¡´Â ¸í·ÉÇà µµ±¸¸¦ »ç¿ëÇϰųª Visual Studio IDE
- Workbench ¾È¿¡¼­ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. ¸í·ÉÇà¿¡¼­ ÄÄÆÄÀÏÇÑ´Ù¸é
- <code>vcvars32</code> ¹èÄ¡ÆÄÀÏÀÌ ¼³Á¤ÇÏ´Â <code>PATH</code>,
- <code>INCLUDE</code>, <code>LIB</code> µî ȯ°æº¯¼ö°¡
- ÇÊ¿äÇÏ´Ù:</p>
-
- <example>
- "c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
- </example>
- </li>
-
- <li>
- <p>Windows Platform SDK.</p>
- <p>¾î¶² ¾ÆÆÄÄ¡ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é Visual C++ 5.0¿¡ Ãß°¡·Î
- ÃֽŠMicrosoft Windows Platform SDK°¡ ÇÊ¿äÇÏ´Ù. ¸í·ÉÇà¿¡¼­
- ÄÄÆÄÀÏÇÑ´Ù¸é <code>setenv</code> ¹èÄ¡ÆÄÀÏÀÌ Platform
- SDK ȯ°æÀ» ¸¸µç´Ù:</p>
-
- <example>
- "c:\Program Files\Platform SDK\setenv.bat"
- </example>
-
- <p>Visual C++ 6.0 ÀÌ»ó¿¡ Æ÷ÇÔµÈ Platform SDK ÆÄÀÏÀº
- ÃæºÐÇÏ´Ù. ÀÌ ¹öÀüÀ» »ç¿ëÇÏ´Â »ç¿ëÀÚ´Â ÀÌ °úÁ¤À» »ý·«Çصµ
- µÈ´Ù.</p>
-
- <note>¸ðµç <module>mod_isapi</module> ±â´ÉÀ» »ç¿ëÇÏ·Á¸é
- ÃֽŠWindows Platform SDK°¡ ÇÊ¿äÇÏ´Ù. ÃֽŠ¹öÀüÀÌ ¾Æ´Ï¸é
- MSVC++ 5.0Àº <module>mod_isapi</module> ±â´ÉÀÇ ÀϺθ¦
- »ç¿ëÇÒ ¼ö ¾ø´Ù°í °æ°íÇÑ´Ù. <a
- href="http://msdn.microsoft.com/downloads/sdks/platform/platform.asp"
- >http://msdn.microsoft.com/downloads/sdks/platform/platform.asp</a>¿¡
- ÃֽŠ¹öÀüÀÌ ÀÖ´Ù.</note>
- </li>
-
- <li>
- <p>awk µµ±¸ (awk, gawk µî).</p>
- <p>ÄÄÆÄÀÏÇÑ ½Ã½ºÅÛ¿¡ ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ·Á¸é
- <code>awk.exe</code> µµ±¸¸¦ »ç¿ëÇÏ¿© ¿©·¯ ÆÄÀÏÀ» ¼öÁ¤Çؾß
- ÇÑ´Ù. (PerlÀ̳ª WSH/VB°ú ºñ±³ÇÏ¿©) ´Ù¿î¹Þ±â¿¡ ¸Å¿ì ÀÛ°í
- ÆÄÀÏ »ý¼º ÀÛ¾÷ÀÌ °¡´ÉÇÏ¿© awk¸¦ ¼±ÅÃÇß´Ù. Brian KernighanÀÇ
- <a href="http://cm.bell-labs.com/cm/cs/who/bwk/"
- >http://cm.bell-labs.com/cm/cs/who/bwk/</a> »çÀÌÆ®¿¡
- ÄÄÆÄÀÏµÈ Win32 ½ÇÇàÆÄÀÏ <a
- href="http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe"
- >http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe</a>ÀÌ
- ÀÖ´Ù. À̸§À» <code>awk95.exe</code> ´ë½Å
- <code>awk.exe</code>·Î º¯°æÇØ¾ß ÇÑ´Ù.</p>
-
- <note>Developer Studio IDE´Â Tools ¸Þ´º Options...
- Directories ÅÇÀÇ (Developer Studio 7.0À̶ó¸é Projects
- - VC++ Directories pane) Executable files °æ·Î ¸ñ·Ï¿¡¼­¸¸
- <code>awk.exe</code>¸¦ ã´Â´Ù. ÀÌ ¸ñ·Ï¿¡ <code>awk.exe</code>
- °æ·Î¸¦ Ãß°¡ÇÏ°í, ÇÊ¿äÇÏ´Ù¸é <code>PATH</code> ȯ°æº¯¼ö¿¡µµ
- Ãß°¡ÇÑ´Ù.</note>
-
- <note>CygwinÀ» (<a href="http://www.cygwin.com/"
- >http://www.cygwin.com/</a>) »ç¿ëÇÑ´Ù¸é
- <code>gawk.exe</code>¶ó´Â À̸§À¸·Î awk µµ±¸°¡ ÀÖÀ¸¸ç,
- <code>awk.exe</code> ÆÄÀÏÀº <code>gawk.exe</code> ÆÄÀÏÀÇ
- ½Éº¼¸µÅ©ÀÓÀ» ÁÖÀÇÇ϶ó. Windows ¸í·É ÇÁ·ÒÇÁÆ®°¡ ½Éº¼¸µÅ©¸¦
- ÀνÄÇÏÁö ¸øÇϱ⶧¹®¿¡ InstallBinÀ» ÄÄÆÄÀÏÇÒ¶§ ½ÇÆÐÇÑ´Ù.
- ÇØ°áÃ¥Àº cygwin¿¡¼­ <code>awk.exe</code>¸¦ »èÁ¦ÇÏ°í
- <code>gawk.exe</code> À̸§À» <code>awk.exe</code>·Î
- ¹Ù²Û´Ù.</note>
- </li>
-
- <li>
- <p>[¼±ÅÃÀûÀÎ] OpenSSL ¶óÀ̺귯¸® (<module>mod_ssl</module>°ú
- <code>ab.exe</code>ÀÇ ssl Áö¿ø¿¡ »ç¿ë)</p>
- <p><strong>ÁÖÀÇ: °­·ÂÇÑ ¾Ïȣȭ¿Í ƯÇã°¡ °É¸° ÁöÀûÀç»ê±ÇÀ»
- Àü¼¼°è¿¡ ¹èÆ÷Çϴµ¥´Â »ó´çÇÑ Á¦¾àÀÌ ÀÖ´Ù.</strong>
- OpenSSLÀº ¹Ì±¹ ¼öÃâ±ÔÁ¦¹ýÀÌ ±ÔÁ¦ÇÏ¸ç ¹Ì±¹°ú ±âŸ Áö¿ª¿¡¼­
- ƯÇã·Î º¸È£µÇ´Â ÁöÀûÀç»ê±ÇÀÎ °­·ÂÇÑ ¾Ïȣȭ¸¦ Æ÷ÇÔÇÑ´Ù.
- Apache Software Foundation°ú OpenSSL ÇÁ·ÎÁ§Æ®´Â OpenSSL
- ÇÁ·ÎÁ§Æ®°¡ Á¦°øÇÏ´Â Äڵ带 ¼ÒÀ¯, »ç¿ë, ¹èÆ÷Çϴµ¥ µû¸¥
- ¹ýÀû ÀÚ¹®À» Á¦°øÇÏÁö ¾Ê´Â´Ù. <strong>Á÷Á¢ ¹ý·ü »ó´ãÀ»
- ¹Þ±æ ¹Ù¶õ´Ù. ´ç½Å ÇൿÀÇ Ã¥ÀÓÀº ´ç½Å¿¡°Ô ÀÖ´Ù.</strong></p>
-
- <p><module>mod_ssl</module>À̳ª (SSLÀ» Áö¿øÇÏ´Â
- <code>ab.exe</code>) abs ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ·Á¸é, OpenSSLÀ»
- <a href="http://www.openssl.org/source/"
- >http://www.openssl.org/source/</a>¿¡¼­ ´Ù¿î¹Þ¾Æ¼­
- <code>srclib</code>ÀÇ <code>openssl</code>À̶ó´Â
- ÇÏÀ§µð·ºÅ丮¿¡ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. <code>release</code>¿Í
- <code>debug</code>·Î ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ¶§ »ç¿ëÇϸç 0.9.7
- ¹öÀü¿¡ Àִ ƯÇã°¡ °É¸° ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ¾Æ·¡
- ÄÄÆÄÀÏ ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <example>
- perl Configure VC-WIN32<br />
- perl util\mkfiles.pl &gt;MINFO<br />
- perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile<br />
- perl util\mk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 &gt;makefile.dbg<br />
- perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea &gt;ms\libeay32.def<br />
- perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea &gt;ms\ssleay32.def<br />
- nmake<br />
- nmake -f makefile.dbg
- </example>
-
- </li>
-
- <li>
- <p>[¼±ÅÃÀûÀÎ] zlib ¼Ò½º (<module>mod_deflate</module>¿¡
- »ç¿ë)</p>
- <p>ZlibÀ» <code>srclib</code>ÀÇ <code>zlib</code>¶ó´Â
- ÇÏÀ§µð·ºÅ丮¿¡ ¼³Ä¡ÇØ¾ß ÇÏÁö¸¸, ¼Ò½º¸¦ ¹Ì¸® ÄÄÆÄÀÏÇÒ
- ÇÊ¿ä´Â ¾ø´Ù. ÄÄÆÄÀÏ ½Ã½ºÅÛÀº ÀÌ ¾ÐÃà¼Ò½º¸¦
- <module>mod_deflate</module> ¸ðµâ°ú °°ÀÌ ÄÄÆÄÀÏÇÑ´Ù.
- Zlib˼ <a href="http://www.gzip.org/zlib/"
- >http://www.gzip.org/zlib/</a>¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù --
- <module>mod_deflate</module>´Â 1.1.4 ¹öÀü°ú Á¤»óÀûÀ¸·Î
- ÄÄÆÄÀϵǾú´Ù.</p>
- </li>
-
- </ul>
-
- </section>
-
- <section id="commandbuild">
-
- <title>¸í·ÉÇà¿¡¼­ ÄÄÆÄÀÏÇϱâ</title>
-
- <p>¸ÕÀú Àû´çÇÑ µð·ºÅ丮¿¡ ¾ÆÆÄÄ¡ ¹èÆ÷º» ¾ÐÃàÀ» Ǭ´Ù. ¸í·ÉÇà
- ÇÁ·ÒÇÁÆ®¸¦ ¿­°í ±× µð·ºÅ丮·Î <code>cd</code>ÇÑ´Ù.</p>
-
- <p><code>Makefile.win</code> ÆÄÀÏ¿¡ ¾ÆÆÄÄ¡ makefile ¸í·ÉÀÌ
- ÀÖ´Ù. Windows NT¿¡¼­ <code>release</code>¿Í <code>debug</code>
- ÄÄÆÄÀÏÇÏ´Â ¸í·É¾î´Â °¢°¢ ´ÙÀ½°ú °°´Ù:</p>
-
- <example><pre>
-nmake /f Makefile.win _apacher
-
-nmake /f Makefile.win _apached
- </pre></example>
-
- <p>µÎ ¸í·É¾î ¸ðµÎ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÑ´Ù. ÈÄÀÚ´Â °á°úÆÄÀÏ¿¡
- µð¹ö±ë Á¤º¸¸¦ Æ÷ÇÔÇÏ¿© ¹ö±×¸¦ ã°í ¹®Á¦¸¦ ÃßÀûÇϱ⠽±°Ô
- ÇÑ´Ù.</p>
-
- </section>
-
- <section id="workspacebuild">
-
- <title>Developer Studio Workspace IDE¿¡¼­ ÄÄÆÄÀÏÇϱâ</title>
-
- <p>VC++ÀÇ Visual Studio °³¹ß ȯ°æÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ
- ¼öµµ ÀÖ´Ù. °úÁ¤À» ½±°Ô ÇÏ·Á°í Visual Studio workspace
- <code>Apache.dsw</code>¸¦ Á¦°øÇÑ´Ù. ÀÌ workspace´Â ¿ÏÀüÇÑ
- ¾ÆÆÄÄ¡ ¹ÙÀ̳ʸ® ¹èÆ÷º»¿¡ ÇÊ¿äÇÑ <code>.dsp</code> ÇÁ·ÎÁ§Æ®
- ¸ñ·ÏÀ» ´ã°íÀÖ´Ù. ¶Ç, ¾Ë¸ÂÀº ¼ø¼­·Î ÄÄÆÄÀÏÇϱâÀ§ÇÑ ÇÁ·ÎÁ§Æ®°£
- ÀÇÁ¸¼º Á¤º¸µµ Æ÷ÇÔÇÑ´Ù.</p>
-
- <p><code>Apache.dsw</code> workspace¸¦ ¿­°í
- <code>InstallBin</code>À» (<code>Release</code>³ª
- <code>Debug</code> Áß ¿øÇÏ´Â °ÍÀ») Active Project·Î ¼±ÅÃÇÑ´Ù.
- <code>InstallBin</code>Àº °ü·ÃµÈ ¸ðµç ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ°í,
- ÄÄÆÄÀÏµÈ ½ÇÇàÆÄÀÏ°ú dllÀ» ¿Å±â´Â <code>Makefile.win</code>À»
- È£ÃâÇÑ´Ù. <code>InstallBin</code>ÀÇ Settings, General ÅÇ,
- Build command line Ç׸ñÀ» ¼öÁ¤ÇÏ¿© <code>INSTDIR=</code>À»
- º¯°æÇÒ ¼ö ÀÖ´Ù. <code>INSTDIR=</code> ±âº»°ªÀº
- <code>/Apache2</code> µð·ºÅ丮ÀÌ´Ù. (¼³Ä¡ÇÏÁö¾Ê°í) Å×½ºÆ®·Î
- ÄÄÆÄÀϸ¸ Çغ¸·Á¸é ´ë½Å <code>BuildBin</code> ÇÁ·ÎÁ§Æ®¸¦
- »ç¿ëÇÑ´Ù.</p>
-
- <p><code>.dsp</code> ÇÁ·ÎÁ§Æ® ÆÄÀÏÀº Visual C++ 6.0 Çü½ÄÀÌ´Ù.
- Visual C++ 5.0 (97)¿¡¼­µµ ÀÌ ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Visual
- C++ 7.0 (.net)Àº <code>Apache.dsw</code>¿Í <code>.dsp</code>
- ÆÄÀϵéÀ» <code>Apache.sln</code>°ú <code>.msproj</code>
- ÆÄÀϵé·Î º¯È¯ÇÑ´Ù. <code>.dsp</code> ¼Ò½ºÆÄÀÏÀ» ¼öÁ¤Çϸé
- ¹Ýµå½Ã <code>.msproj</code> ÆÄÀÏ·Î ´Ù½Ã º¯È¯Ç϶ó! ±×³É VC++
- 7.0 IDE¿¡¼­ <code>Apache.dsw</code>¸¦ ´Ù½Ã ¿­±â¸¸ ÇÏ¸é µÈ´Ù.</p>
-
- <p>¶Ç, Visual C++ 7.0 (.net) »ç¿ëÀÚ´Â Build ¸Þ´º, Configuration
- Manager ´ëȭâ¿¡¼­ <code>Debug</code>¿Í <code>Release</code>ÀÇ
- abs, <module>mod_ssl</module>, <module>mod_deflate</module>
- Solution modules ¼±ÅÃÀ» ÇØÁ¦ÇØ¾ß ÇÑ´Ù. <code>srclib</code>¿¡
- <code>openssl</code>À̳ª <code>zlib</code> µð·ºÅ丮°¡ ÀÖ´Â
- °æ¿ì¿¡¸¸ <code>nmake</code>¸¦ ½ÇÇàÇϰųª (ÀÌ ¸ðµâÀ» ¸í½ÃÀûÀ¸·Î
- ÄÄÆÄÀÏÇÏ´Â) IDE <code>BinBuild</code> ´ë»óÀ» »ç¿ëÇÏ¿© ¸ðµâÀ»
- ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ExportÇÑ <code>.mak</code> ÆÄÀϵéÀÌ È¥¶õ½º·´Áö¸¸, Visual
- C++ 5.0 »ç¿ëÀÚ°¡ <module>mod_ssl</module>, abs (SSLÀ» Áö¿øÇÏ´Â
- ab), <module>mod_deflate</module>¸¦ ÄÄÆÄÀÏÇÒ¶§ ÇÊ¿äÇÏ´Ù.
- VC++ 7.0 (.net) »ç¿ëÀÚ¿¡°Ôµµ <code>binenv</code> º¸´Ù
- <code>nmake</code>¸¦ »ç¿ëÇϸé ÄÄÆÄÀÏÀÌ ´õ ºü¸£´Ù. VC++ 5.0À̳ª
- 6.0 IDE¿¡¼­ Àüü ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ°í, Project ¸Þ´ºÀÇ Export
- for all makefiles¸¦ »ç¿ëÇ϶ó. µ¿ÀûÀ¸·Î ÀÚµ¿ »ý¼ºÇÏ´Â ´ë»óÀ»
- ¸ðµÎ ÄÄÆÄÀÏÇÏ°í ¿Ã¹Ù¸¥ ÀÇÁ¸¼º Á¤º¸¸¦ ¾ò±âÀ§Çؼ­´Â ¸ÕÀú
- ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÏ¿© °æ·Î¸¦
- ¼öÁ¤ÇÏ¸é ¾î¶² °æ·Î¿¡¼­µµ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- perl srclib\apr\build\fixwin32mak.pl
- </example>
-
- <p><code>httpd</code> ¼Ò½º <em>ÃÖ»óÀ§</em> µð·ºÅ丮¿¡¼­
- ¸í·É¾î¸¦ ½ÇÇàÇØ¾ß ÇÑ´Ù. ÇöÀç µð·ºÅ丮¿Í ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â
- ¸ðµç <code>.mak</code>¿Í <code>.dep</code> ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ»
- ¼öÁ¤ÇÏ°í, <code>.dsp</code>¸¦ °í·ÁÇÏ¿© ÆÄÀϽð£À» ¼öÁ¤ÇÑ´Ù.</p>
-
- <p>ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ» ´Ùµë¾î¼­ ÆÐÄ¡¸¦ º¸³½´Ù¸é, ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ»
- Visual Studio 6.0 Çü½ÄÀ¸·Î ¸¸µé¾î¾ß ÇÑ´Ù. º¯°æÀº °£´ÜÇÏ°í,
- VC++ 5.0¿¡¼­ 7.0±îÁö ¸ðµç ȯ°æ¿¡¼­ ÀνÄÇÏ´Â ÃÖ¼ÒÇÑÀÇ ÄÄÆÄÀÏ
- ¿É¼Ç°ú ¸µÄ¿ ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
- </section>
-
- <section id="projectcomponents">
-
- <title>ÇÁ·ÎÁ§Æ® ±¸¼º¿ä¼Ò</title>
-
- <p><code>Apache.dsw</code> workspace¿Í <code>makefile.win</code>
- <code>nmake</code> ½ºÅ©¸³Æ®´Â ´ÙÀ½ ¼ø¼­´ë·Î ¾ÆÆÄÄ¡ ¼­¹ö
- <code>.dsp</code> ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÑ´Ù:</p>
-
- <ol>
- <li><code>srclib\apr\apr.dsp</code></li>
-
- <li><code>srclib\apr\libapr.dsp</code></li>
-
- <li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
-
- <li><code>srclib\apr-util\xml\expat\lib\xml.dsp</code></li>
-
- <li><code>srclib\apr-util\aprutil.dsp</code></li>
-
- <li><code>srclib\apr-util\libaprutil.dsp</code></li>
-
- <li><code>srclib\pcre\dftables.dsp</code></li>
-
- <li><code>srclib\pcre\pcre.dsp</code></li>
-
- <li><code>srclib\pcre\pcreposix.dsp</code></li>
-
- <li><code>server\gen_test_char.dsp</code></li>
-
- <li><code>libhttpd.dsp</code></li>
-
- <li><code>Apache.dsp</code></li>
- </ol>
-
- <p>¶Ç, <code>modules\</code> ÇÏÀ§µð·ºÅ丮 ¾Æ·¡ ´ëºÎºÐÀÇ
- ¸ðµâ¿¡´Â ÇÁ·ÎÁ§Æ®ÆÄÀÏÀÌ ÀÖ´Ù.</p>
-
- <p><code>support\</code> µð·ºÅ丮¿¡´Â ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇϴµ¥
- ÇÊ¿äÇÏÁö´Â ¾ÊÁö¸¸, °ü¸®ÀÚ°¡ ¾ÆÆÄÄ¡¸¦ °Ë»çÇϰųª ¾ÏÈ£ÆÄÀÏ°ú
- ·Î±×ÆÄÀÏÀ» °ü¸®Çϴµ¥ »ç¿ëÇÒ Ãß°¡ ÇÁ·Î±×·¥µéÀÇ ÇÁ·ÎÁ§Æ®ÆÄÀÏÀÌ
- ÀÖ´Ù. Windows Àü¿ë Áö¿ø ÇÁ·Î±×·¥Àº <code>support\win32\</code>
- µð·ºÅ丮¿¡ µû·Î ÀÖ´Ù.</p>
-
- <ol>
- <li><code>support\ab.dsp</code></li>
-
- <li><code>support\htdigest.dsp</code></li>
-
- <li><code>support\htpasswd.dsp</code></li>
-
- <li><code>support\logresolve.dsp</code></li>
-
- <li><code>support\rotatelogs.dsp</code></li>
-
- <li><code>support\win32\ApacheMonitor.dsp</code></li>
-
- <li><code>support\win32\wintty.dsp</code></li>
- </ol>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇϸé server root µð·ºÅ丮¿¡ ¼³Ä¡ÇØ¾ß ÇÑ´Ù.
- ±âº»°ªÀº °°Àº µð½ºÅ©ÀÇ <code>\Apache2</code> µð·ºÅ丮ÀÌ´Ù.</p>
-
- <p>ÄÄÆÄÀÏÇÏ°í ¸ðµç ÆÄÀÏÀ» ¿øÇÏ´Â Æú´õ <em>dir</em>¿¡ ÀÚµ¿À¸·Î
- ¼³Ä¡ÇÏ·Á¸é ´ÙÀ½ <code>nmake</code> ¸í·É¾îÁß Çϳª¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <example><pre>
-nmake /f Makefile.win installr INSTDIR=<em>dir</em>
-
-nmake /f Makefile.win installd INSTDIR=<em>dir</em>
- </pre></example>
-
- <p><code>INSTDIR</code>ÀÇ <em>dir</em> ¾Æ±Ô¸ÕÆ®´Â ¼³Ä¡µð·ºÅ丮¸¦
- ¶æÇÑ´Ù. »ý¶ôÇϸé <code>\Apache2</code>¿¡ ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ´Ù.</p>
-
- <p>´ÙÀ½°ú °°ÀÌ ¼³Ä¡ÇÑ´Ù:</p>
-
- <ul>
- <li><code><em>dir</em>\bin\Apache.exe</code> - ¾ÆÆÄÄ¡
- ½ÇÇàÆÄÀÏ</li>
-
- <li><code><em>dir</em>\bin\ApacheMonitor.exe</code> -
- ¼­ºñ½º °¨½Ã¿ë ÀÛ¾÷Ç¥½ÃÁÙ ¾ÆÀÌÄÜ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\htdigest.exe</code> - Digest
- auth ¾ÏÈ£ÆÄÀÏ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\htdbm.exe</code> - SDBM auth
- µ¥ÀÌÅͺ£À̽º ¾ÏÈ£ÆÄÀÏ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\htpasswd.exe</code> - Basic
- auth ¾ÏÈ£ÆÄÀÏ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\logresolve.exe</code> - ·Î±×ÆÄÀÏ¿¡¼­
- dns À̸§À» ã´Â µµ±¸</li>
-
- <li><code><em>dir</em>\bin\rotatelogs.exe</code> - ·Î±×ÆÄÀÏ
- ¼øȯ µµ±¸</li>
-
- <li><code><em>dir</em>\bin\wintty.exe</code> - ÄܼÖâ
- µµ±¸</li>
-
- <li><code><em>dir</em>\bin\libapr.dll</code> - Apache
- Portable Runtime °øÀ¯ ¶óÀ̺귯¸®</li>
-
- <li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache
- Utility Runtime °øÀ¯ ¶óÀ̺귯¸®</li>
-
- <li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache
- Core ¶óÀ̺귯¸®</li>
-
- <li><code><em>dir</em>\modules\mod_*.so</code> - ÀоîµéÀÏ
- ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¸ðµâ</li>
-
- <li><code><em>dir</em>\conf</code> - ¼³Á¤ µð·ºÅ丮</li>
-
- <li><code><em>dir</em>\logs</code> - ºñ¾îÀÖ´Â ·Î±×
- µð·ºÅ丮</li>
-
- <li><code><em>dir</em>\include</code> - C ¾ð¾î Çì´õÆÄÀÏ</li>
-
- <li><code><em>dir</em>\lib</code> - ¸µÅ© ¶óÀ̺귯¸®ÆÄÀÏ</li>
- </ul>
-
- <section id="projectcomponents-warn">
-
- <title>°³¹ßÁßÀÎ ¾ÆÆÄÄ¡ ¹öÀüÀ» ÄÄÆÄÀÏÇÒ¶§ °æ°í</title>
-
- <note><code>.dsp</code> ÆÄÀÏÀº <code>release</code>¸¶´Ù
- »õ·Î ¸¸µé¾îÁø´Ù. °³¹ßÀÚÀÇ ½Ã°£³¶ºñ¸¦ ¸·±âÀ§ÇØ
- <code>.mak</code> ÆÄÀÏÀº »õ·Î ¸¸µéÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î
- <code>NMAKE</code> ¸í·É¾î¸¦ »ç¿ëÇÏ¿© »õ·Î¿î <code>.dsp</code>
- ÇÁ·ÎÁ§Æ®ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ ¼ö ¾ø´Ù. ÇÁ·ÎÁ§Æ®¿¡¼­ Á÷Á¢ ¸ðµç
- <code>.mak</code> ÆÄÀÏÀ» exportÇØ¾ß ÇÑ´Ù. Microsoft Developer
- Studio ȯ°æ¿¡¼­ ÄÄÆÄÀÏÇÑ´Ù¸é ÀÌ ÀÛ¾÷ÀÌ ÇÊ¿ä¾ø´Ù.</note>
-
- <note>¶Ç, makefileÀ» exportÇϱâ Àü¿¡ <code>BuildBin</code>
- ÇÁ·ÎÁ§Æ®¸¦ (ȤÀº <code>_apacher</code>³ª <code>_apached</code>
- ¸í·ÉÇà ´ë»ó) ÄÄÆÄÀÏÇÏ¸é ¸Å¿ì µµ¿òÀÌ µÈ´Ù. ÄÄÆÄÀÏÁß¿¡ ¸¹Àº
- ÆÄÀÏÀÌ ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù. Àüü¸¦ ÄÄÆÄÀÏÇؾ߸¸ Á¤»óÀûÀ¸·Î
- ÄÄÆÄÀÏÇÒ¶§ ÇÊ¿äÇÑ ÀÇÁ¸ÆÄÀÏÀ» ¸ðµÎ ¸¸µç´Ù.</note>
-
- <p>¹èÆ÷¿ë <code>.mak</code> ÆÄÀÏÀ» ¸¸µå·Á¸é Ç×»ó
- <code>.mak</code> (ȤÀº <code>.dep</code>)¿¡¼­ Platform
- SDK µîÀÇ ÀÇÁ¸¼ºÀ» Á¡°ËÇ϶ó.
- <code>DevStudio\SharedIDE\bin\</code> (VC5)³ª
- <code>DevStudio\Common\MSDev98\bin\</code> (VC6) µð·ºÅ丮¿¡´Â
- ¸ðµç ¿¹¿Ü ¸ñ·ÏÀÌ ´ã±ä <code>sysincl.dat</code> ÆÄÀÏÀÌ
- ÀÖ´Ù. ÀÌ ÆÄÀÏ¿¡ ÀÇÁ¸¼º Á¤º¸¸¦ Ãß°¡ÇÑ´Ù
- (<code>sys/time.h</code>¿Í <code>sys\time.h</code>¿Í °°ÀÌ,
- °æ·Î´Â ½½·¡½¬¸¦ »ç¿ëÇÑ °Í°ú ¹é½½·¡½¬¸¦ »ç¿ëÇÑ °Í ¸ðµÎ¸¦
- Ãß°¡ÇÑ´Ù). ¹èÆ÷ÇÒ <code>.mak</code> ÆÄÀÏ¿¡ ÇöÀç ÄÄÇ»ÅÍ¿¡¸¸
- ÇØ´çÇÏ´Â ¼³Ä¡°æ·Î°¡ ÀÖ´Ù¸é ÄÄÆÄÀÏÀÌ ¿ÏÀüÈ÷ ½ÇÆÐÇÑ´Ù.
- ±×·¯¹Ç·Î <code>srclib/apr/build/fixwin32mak.pl</code>À»
- ½ÇÇàÇØÇÏ¿© <code>.mak</code> ÆÄÀÏ¿¡ ÀÖ´Â Àý´ë°æ·Î¸¦ ¾ø¾Ö¾ß
- ÇÑ´Ù.</p>
-
- </section>
-
- </section>
-
-</manualpage>
-
diff --git a/docs/manual/platform/win_compiling.xml.meta b/docs/manual/platform/win_compiling.xml.meta
deleted file mode 100644
index 4c8e9ad7b2..0000000000
--- a/docs/manual/platform/win_compiling.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>win_compiling</basename>
- <path>/platform/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/platform/windows.html b/docs/manual/platform/windows.html
deleted file mode 100644
index dbcab1c655..0000000000
--- a/docs/manual/platform/windows.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: windows.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: windows.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/platform/windows.html.en b/docs/manual/platform/windows.html.en
deleted file mode 100644
index 122d66303e..0000000000
--- a/docs/manual/platform/windows.html.en
+++ /dev/null
@@ -1,729 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Using Apache with Microsoft Windows - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Using Apache with Microsoft Windows</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/platform/windows.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/windows.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>This document explains how to install, configure and run
- Apache 2.0 under Microsoft Windows. If you find any bugs, or
- wish to contribute in other ways, please use our <a href="http://httpd.apache.org/bug_report.html">bug reporting
- page</a>.</p>
-
- <p>This document assumes that you are installing a binary
- distribution of Apache. If you want to compile Apache yourself
- (possibly to help with development or tracking down bugs),
- see <a href="win_compiling.html">Compiling Apache for Microsoft
- Windows</a>.</p>
-
- <p><strong>Because of the current versioning policies on Microsoft
- Windows operating system families, this document assumes the
- following:</strong></p>
- <ul>
- <li><strong>Windows NT:</strong> This means all versions of
- Windows that are based on the Windows NT kernel. Includes Windows
- NT, Windows 2000, Windows XP and Windows .Net Server 2003.</li>
- <li><strong>Windows 9x:</strong> This means older,
- consumer-oriented versions of Windows. Includes Windows 95 (also
- OSR2), Windows 98 and Windows ME.</li>
- </ul>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#req">Operating System Requirements</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#down">Downloading Apache for Windows</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#inst">Installing Apache for Windows</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cust">Customizing Apache for Windows</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#winsvc">Running Apache as a Service</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#wincons">Running Apache as a Console Application</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#test">Testing the Installation</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="req" id="req">Operating System Requirements</a></h2>
-
-
- <p>The primary Windows platform for running Apache 2.0 is Windows
- NT. The binary installer only works with the x86 family of
- processors, such as Intel and AMD processors. Running Apache on
- Windows 9x is not thoroughly tested, and it is never recommended on
- production systems.
- </p>
-
- <p>On all operating systems, TCP/IP networking must be installed
- and working. If running on Windows 95, the Winsock 2 upgrade must
- be installed. Winsock 2 for Windows 95 can be downloaded from <a href="http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp">here</a>.
- </p>
-
- <p>On Windows NT 4.0, installing Service Pack 6 is strongly
- recommended, as Service Pack 4 created known issues with TCP/IP
- and Winsock integrity that were resolved in later Service Packs.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="down" id="down">Downloading Apache for Windows</a></h2>
-
-
- <p>Information on the latest versions of Apache can be found on the
- web site of the Apache web server at
- <a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>.
- There you will find the current release, as well as more recent alpha
- or beta test versions, and a list of HTTP and FTP mirrors from which
- you can download the Apache web server. Please use a mirror near to
- you for a fast and reliable download.</p>
-
- <p>For Windows installations you should download the version of
- Apache for Windows with the <code>.msi</code> extension. This is a
- single Microsoft Installer file, which contains a ready-to-run
- version of Apache. There is a separate <code>.zip</code> file,
- which contains only the source code. You can compile Apache
- yourself with the Microsoft Visual C++ (Visual Studio) tools.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inst" id="inst">Installing Apache for Windows</a></h2>
-
-
- <p>You need Microsoft Installer 1.2 or above for the installation
- to work. On Windows 9x you can update your Microsoft Installer to
- version 2.0 <a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32831">here</a>
- and on Windows NT 4.0 and 2000 the version 2.0 update can be found
- <a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32832">here</a>.
- Windows XP does not need this update.</p>
-
- <p>Note that you cannot install two versions of Apache 2.0 on the
- same computer with the binary installer. You can, however, install
- a version of the 1.3 series <strong>and</strong> a version of the
- 2.0 series on the same computer without problems. If you need to
- have two different 2.0 versions on the same computer, you have to
- <a href="win_compiling.html">compile and install Apache from the
- source</a>.</p>
-
- <p>Run the Apache <code>.msi</code> file you downloaded above. The
- installation will ask you for these things:</p>
-
- <ol>
- <li><p><strong>Network Domain.</strong> Enter the DNS domain in which
- your server is or will be registered in. For example, if your
- server's full DNS name is <code>server.mydomain.net</code>, you would
- type <code>mydomain.net</code> here.</p></li>
-
- <li><p><strong>Server Name.</strong> Your server's full DNS name.
- From the example above, you would type <code>server.mydomain.net</code>
- here.</p></li>
-
- <li><p><strong>Administrator's Email Address.</strong> Enter the
- server administrator's or webmaster's email address here. This
- address will be displayed along with error messages to the client
- by default.</p></li>
-
- <li><p><strong>For whom to install Apache</strong> Select <code>for
- All Users, on Port 80, as a Service - Recommended</code> if you'd
- like your new Apache to listen at port 80 for incoming traffic.
- It will run as a service (that is, Apache will run even if no one
- is logged in on the server at the moment) Select <code>only for
- the Current User, on Port 8080, when started Manually</code> if
- you'd like to install Apache for your personal experimenting or
- if you already have another WWW server running on port 80.</p></li>
-
- <li><p><strong>The installation type.</strong> Select <code>Typical</code>
- for everything except the source code and libraries for module
- development. With <code>Custom</code> you can specify what to
- install. A full install will require about 13 megabytes of free
- disk space. This does <em>not</em> include the size of your web
- site(s).</p></li>
-
- <li><p><strong>Where to install.</strong> The default path is
- <code>C:\Program Files\Apache Group</code> under which a directory
- called <code>Apache2</code> will be created by default.</p></li>
- </ol>
-
- <p>During the installation, Apache will configure the files in the
- <code>conf</code> subdirectory to reflect the chosen installation
- directory. However, if any of the configuration files in this
- directory already exist, they will not be overwritten. Instead, the
- new copy of the corresponding file will be left with the extension
- <code>.default</code>. So, for example, if <code>conf\httpd.conf</code>
- already exists, it will be renamed as <code>conf\httpd.conf.default</code>.
- After the installation you should manually check to see what new
- settings are in the <code>.default</code> file, and if necessary,
- update your existing configuration file.</p>
-
- <p>Also, if you already have a file called <code>htdocs\index.html</code>,
- it will not be overwritten (and no <code>index.html.default</code>
- will be installed either). This means it should be safe to install
- Apache over an existing installation, although you would have to
- stop the existing running server before doing the installation, and
- then start the new one after the installation is finished.</p>
-
- <p>After installing Apache, you must edit the configuration files
- in the <code>conf</code> subdirectory as required. These files
- will be configured during the installation so that Apache is ready
- to be run from the directory it was installed into, with the
- documents server from the subdirectory <code>htdocs</code>. There
- are lots of other options which you should set before you really
- start using Apache. However, to get started quickly, the files
- should work as installed.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cust" id="cust">Customizing Apache for Windows</a></h2>
-
-
- <p>Apache is configured by the files in the <code>conf</code>
- subdirectory. These are the same files used to configure the Unix
- version, but there are a few different directives for Apache on
- Windows. See the <a href="../mod/directives.html">directive index</a>
- for all the available directives.</p>
-
- <p>The main differences in Apache for Windows are:</p>
- <ul>
- <li><p>Because Apache for Windows is multithreaded, it does not
- use a separate process for each request, as Apache does on Unix.
- Instead there are usually only two Apache processes running: a
- parent process, and a child which handles the requests. Within
- the child process each request is handled by a separate thread.
- </p>
-
- <p>The process management directives are also different:</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>:
- Like the Unix directive, this controls how many requests a single
- child process will serve before exiting. However, unlike on Unix,
- a single process serves all the requests at once, not just one.
- If this is set, it is recommended that a very high number is
- used. The recommended default, <code>MaxRequestsPerChild 0</code>,
- causes the child process to never exit.</p>
-
- <div class="warning"><strong>Warning: The server configuration
- file is reread when a new child process is started. If you have
- modified <code>httpd.conf</code>, the new child may not start or
- you may receive unexpected results.</strong></div>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>:
- This directive is new. It tells the server how many threads it
- should use. This is the maximum number of connections the server
- can handle at once, so be sure to set this number high enough for
- your site if you get a lot of hits. The recommended default is
- <code>ThreadsPerChild 50</code>.</p></li>
-
- <li><p>The directives that accept filenames as arguments must use
- Windows filenames instead of Unix ones. However, because Apache
- uses Unix-style names internally, you must use forward slashes,
- not backslashes. Drive letters can be used; if omitted, the drive
- with the Apache executable will be assumed.</p></li>
-
- <li><p>Apache for Windows contains the ability to load modules at
- runtime, without recompiling the server. If Apache is compiled
- normally, it will install a number of optional modules in the
- <code>\Apache2\modules</code> directory. To activate these or
- other modules, the new <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
- directive must be used. For example, to activate the status
- module, use the following (in addition to the status-activating
- directives in <code>access.conf</code>):</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p>Information on <a href="../mod/mod_so.html#creating">creating
- loadable modules</a> is also available.</p></li>
-
- <li><p>Apache can also load ISAPI (Internet Server Application
- Programming Interface) extensions (i.e. internet server
- applications), such as those used by Microsoft IIS and other
- Windows servers. <a href="../mod/mod_isapi.html">More information
- is available</a>. Note that Apache <strong>cannot</strong> load
- ISAPI Filters.</p></li>
-
- <li><p>When running CGI scripts, the method Apache uses to find
- the interpreter for the script is configurable using the
- <code class="directive"><a href="../mod/core.html#scriptinterpretersource">ScriptInterpreterSource</a></code>
- directive.</p></li>
-
- <li><p>Since it is often difficult to manage files with names
- like <code>.htaccess</code> in Windows, you may find it useful to
- change the name of this per-directory configuration file using
- the <code class="directive"><a href="../mod/core.html#accessfilename">AccessFilename</a></code>
- directive.</p></li>
-
- <li><p>Any errors during Apache startup are logged into the
- Windows event log when running on Windows NT. This mechanism
- acts as a backup for those situations where Apache cannot even
- access the normally used <code>error.log</code> file. You can
- view the Windows event log by using the Event Viewer application
- on Windows NT 4.0, and the Event Viewer MMC snap-in on newer
- versions of Windows.</p>
-
- <div class="note"><strong>Note that there is no startup error logging on
- Windows 9x because no Windows event log exists on those operating
- systems.</strong></div></li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="winsvc" id="winsvc">Running Apache as a Service</a></h2>
-
-
- <p>Apache can be run as a service on Windows NT. There is some
- highly experimental support for similar behavior on Windows 9x.</p>
-
- <p>You can install Apache as a service automatically during the
- installation. If you chose to install for all users, the
- installation will create an Apache service for you. If you specify
- to install for yourself only, you can manually register Apache as a
- service after the installation. You have to be a member of the
- Administrators group for the service installation to succeed.</p>
-
- <p>Apache comes with a utility called the Apache Service Monitor.
- With it you can see and manage the state of all installed Apache
- services on any machine on your network. To be able to manage an
- Apache service with the monitor, you have to first install the
- service (either automatically via the installation or manually).
- </p>
-
- <p>You can install Apache as a Windows NT service as follows from
- the command prompt at the Apache <code>bin</code> subdirectory:</p>
-
- <div class="example"><p><code>
- apache -k install
- </code></p></div>
-
- <p>If you need to specify the name of the service you want to
- install, use the following command. You have to do this if you
- have several different service installations of Apache on your
- computer.</p>
-
- <div class="example"><p><code>
- apache -k install -n "MyServiceName"
- </code></p></div>
-
- <p>If you need to have specifically named configuration files for
- different services, you must use this:</p>
-
- <div class="example"><p><code>
- apache -k install -n "MyServiceName" -f "c:\files\my.conf"
- </code></p></div>
-
- <p>If you use the first command without any special parameters except
- <code>-k install</code>, the service will be called <code>Apache2</code>
- and the configuration will be assumed to be <code>conf\httpd.conf</code>.
- </p>
-
- <p>Removing an Apache service is easy. Just use:</p>
-
- <div class="example"><p><code>
- apache -k uninstall
- </code></p></div>
-
- <p>The specific Apache service to be uninstalled can be specified by using:</p>
-
- <div class="example"><p><code>
- apache -k uninstall -n "MyServiceName"
- </code></p></div>
-
- <p>Normal starting, restarting and shutting down of an Apache
- service is usually done via the Apache Service Monitor, by using
- commands like <code>NET START Apache2</code> and <code>NET STOP
- Apache2</code> or via normal Windows service management. Before
- starting Apache as a service by any means, you should test the
- service's configuration file by using:</p>
-
- <div class="example"><p><code>
- apache -n "MyServiceName" -t
- </code></p></div>
-
- <p>You can control an Apache service by its command line switches,
- too. To start an installed Apache service you'll use this:</p>
-
- <div class="example"><p><code>
- apache -k start
- </code></p></div>
-
- <p>To stop an Apache service via the command line switches, use
- this:</p>
-
- <div class="example"><p><code>
- apache -k stop
- </code></p></div>
-
- <p>or</p>
-
- <div class="example"><p><code>
- apache -k shutdown
- </code></p></div>
-
- <p>You can also restart a running service and force it to reread
- its configuration file by using:</p>
-
- <div class="example"><p><code>
- apache -k restart
- </code></p></div>
-
- <p>By default, all Apache services are registered to run as the
- system user (the <code>LocalSystem</code> account). The
- <code>LocalSystem</code> account has no privileges to your network
- via any Windows-secured mechanism, including the file system, named
- pipes, DCOM, or secure RPC. It has, however, wide privileges locally.
- </p>
-
- <div class="warning"><strong>Never grant any network privileges to
- the <code>LocalSystem</code> account! If you need Apache to be able
- to access network resources, create a separate account for Apache as
- noted below.</strong></div>
-
- <p>You may want to create a separate account for running Apache
- service(s). Especially, if you have to access network resources
- via Apache, this is strongly recommended.</p>
-
- <ol>
- <li>Create a normal domain user account, and be sure to
- memorize its password.</li>
-
- <li>Grant the newly-created user a privilege of <code>Log on
- as a service</code> and <code>Act as part of the operating
- system</code>. On Windows NT 4.0 these privileges are granted via
- User Manager for Domains, but on Windows 2000 and XP you probably
- want to use Group Policy for propagating these settings. You can
- also manually set these via the Local Security Policy MMC snap-in.
- </li>
-
- <li>Confirm that the created account is a member of the Users
- group.</li>
-
- <li>Grant the account read and execute (RX) rights to all document
- and script folders (<code>htdocs</code> and <code>cgi-bin</code>
- for example).</li>
-
- <li>Grant the account change (RWXD) rights to the
- Apache <code>logs</code> directory.</li>
-
- <li>Grant the account read and execute (RX) rights to the
- <code>Apache.exe</code> binary executable.</li>
- </ol>
-
- <div class="note">It is usually a good practice to grant the user the Apache
- service runs as read and execute (RX) access to the whole Apache2
- directory, except the <code>logs</code> subdirectory, where the
- user has to have at least change (RWXD) rights.</div>
-
- <p>If you allow the account to log in as a user and as a service,
- then you can log on with that account and test that the account has the
- privileges to execute the scripts, read the web pages, and that
- you can start Apache in a console window. If this works, and you
- have followed the steps above, Apache should execute as a service
- with no problems.</p>
-
- <div class="note"><strong>Error code 2186</strong> is a good indication that
- you need to review the "Log On As" configuration for the service,
- since Apache cannot access a required network resource. Also, pay
- close attention to the privileges of the user Apache is
- configured to run as.</div>
-
- <p>When starting Apache as a service you may encounter an error
- message from the Windows Service Control Manager. For example,
- if you try to start Apache by using the Services applet in the
- Windows Control Panel, you may get the following message:</p>
-
- <div class="example"><p><code>
- Could not start the Apache2 service on \\COMPUTER <br />
- Error 1067; The process terminated unexpectedly.
- </code></p></div>
-
- <p>You will get this generic error if there is any problem with
- starting the Apache service. In order to see what is really causing
- the problem you should follow the instructions for Running Apache
- for Windows from the Command Prompt.</p>
-
- <p>There is some support for Apache on Windows 9x to behave in a
- similar manner as a service on Windows NT. It is <strong>highly
- experimental</strong>. It is not of production-class reliability,
- and its future is not guaranteed. It can be mostly regarded as
- a risky thing to play with - proceed with caution!</p>
-
- <p>There are some differences between the two kinds of services
- you should be aware of:</p>
-
- <ul>
- <li><p>Apache will attempt to start and if successful it will run
- in the background. If you run the command</p>
-
- <div class="example"><p><code>
- apache -n "MyServiceName" -k start
- </code></p></div>
-
- <p>via a shortcut on your desktop, for example, then if the
- service starts successfully, a console window will flash up but
- it immediately disappears. If Apache detects any errors on startup
- such as incorrect entries in the httpd.conf configuration file,
- the console window will remain visible. This will display an error
- message which will be useful in tracking down the cause of the
- problem.</p></li>
-
- <li><p>Windows 9x does not support <code>NET START</code> or
- <code>NET STOP</code> commands. You must control the Apache
- service on the command prompt via the <code>-k</code> switches.
- </p></li>
-
- <li><p>Apache and Windows 9x offer no support for running Apache
- as a specific user with network privileges. In fact, Windows 9x
- offers no security on the local machine, either. This is the
- simple reason because of which the Apache Software Foundation
- never endorses use of a Windows 9x -based system as a public
- Apache server. The primitive support for Windows 9x exists only
- to assist the user in developing web content and learning the
- Apache server, and perhaps as an intranet server on a secured,
- private network.</p></li>
-
- </ul>
-
- <p>Once you have confirmed that Apache runs correctly as a
- console application you can install, control and uninstall the
- pseudo-service with the same commands as on Windows NT. You can
- also use the Apache Service Monitor to manage Windows 9x
- pseudo-services.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="wincons" id="wincons">Running Apache as a Console Application</a></h2>
-
-
- <p>Running Apache as a service is usually the recommended way to
- use it, but it is sometimes easier to work from the command line
- (on Windows 9x running Apache from the command line is the
- recommended way due to the lack of reliable service support.)</p>
-
- <p>To run Apache from the command line as a console application,
- use the following command:</p>
-
- <div class="example"><p><code>
- apache
- </code></p></div>
-
- <p>Apache will execute, and will remain running until it is stopped
- by pressing Control-C.</p>
-
- <p>You can also run Apache via the shortcut Start Apache in Console
- placed to <code>Start Menu --&gt; Programs --&gt; Apache HTTP Server
- 2.0.xx --&gt; Control Apache Server</code> during the installation.
- This will open a console window and start Apache inside it. If you
- don't have Apache installed as a service, the window will remain
- visible until you stop Apache by pressing Control-C in the console
- window where Apache is running in. The server will exit in a few
- seconds. However, if you do have Apache installed as a service, the
- shortcut starts the service. If the Apache service is running
- already, the shortcut doesn't do anything.</p>
-
- <p>You can tell a running Apache to stop by opening another console
- window and entering:</p>
-
- <div class="example"><p><code>
- apache -k shutdown
- </code></p></div>
-
- <p>This should be preferred over pressing Control-C because this
- lets Apache end any current operations and clean up gracefully.</p>
-
- <p>You can also tell Apache to restart. This forces it to reread
- the configuration file. Any operations in progress are allowed to
- complete without interruption. To restart Apache, use:</p>
-
- <div class="example"><p><code>
- apache -k restart
- </code></p></div>
-
- <div class="note">Note for people familiar with the Unix version of Apache:
- these commands provide a Windows equivalent to <code>kill -TERM
- <em>pid</em></code> and <code>kill -USR1 <em>pid</em></code>. The
- command line option used, <code>-k</code>, was chosen as a reminder
- of the <code>kill</code> command used on Unix.</div>
-
- <p>If the Apache console window closes immediately or unexpectedly
- after startup, open the Command Prompt from the Start Menu --&gt;
- Programs. Change to the folder to which you installed Apache, type
- the command <code>apache</code>, and read the error message. Then
- change to the logs folder, and review the <code>error.log</code>
- file for configuration mistakes. If you accepted the defaults when
- you installed Apache, the commands would be:</p>
-
- <div class="example"><p><code>
- c: <br />
- cd "\Program Files\Apache Group\Apache2\bin" <br />
- apache
- </code></p></div>
-
- <p>Then wait for Apache to stop, or press Control-C. Then enter the
- following:</p>
-
- <div class="example"><p><code>
- cd ..\logs <br />
- more &lt; error.log
- </code></p></div>
-
- <p>When working with Apache it is important to know how it will
- find the configuration file. You can specify a configuration file
- on the command line in two ways:</p>
-
- <ul>
- <li><p><code>-f</code> specifies an absolute or relative path to
- a particular configuration file:</p>
-
- <div class="example"><p><code>
- apache -f "c:\my server files\anotherconfig.conf"
- </code></p></div>
-
- <p>or</p>
-
- <div class="example"><p><code>
- apache -f files\anotherconfig.conf
- </code></p></div></li>
-
- <li><p><code>-n</code> specifies the installed Apache service
- whose configuration file is to be used:</p>
-
- <div class="example"><p><code>
- apache -n "MyServiceName"
- </code></p></div>
- </li>
- </ul>
-
- <p>In both of these cases, the proper
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> should be set in
- the configuration file.</p>
-
- <p>If you don't specify a configuration file with <code>-f</code>
- or <code>-n</code>, Apache will use the file name compiled into the
- server, such as <code>conf\httpd.conf</code>. This built-in path
- is relative to the installation directory. You can verify the compiled
- file name from a value labelled as <code>SERVER_CONFIG_FILE</code> when
- invoking Apache with the <code>-V</code> switch, like this:</p>
-
- <div class="example"><p><code>
- apache -V
- </code></p></div>
-
- <p>Apache will then try to determine its <code class="directive"><a href="../mod/core.html#&#10; serverroot">
- ServerRoot</a></code> by trying the following, in this order:</p>
-
- <ol>
- <li>A <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive
- via the <code>-C</code> command line switch.</li>
-
- <li>The <code>-d</code> switch on the command line.</li>
-
- <li>Current working directory.</li>
-
- <li>A registry entry which was created if you did a binary
- installation.</li>
-
- <li>The server root compiled into the server. This is <code>
- /apache</code> by default, you can verify it by using <code>
- apache -V</code> and looking for a value labelled as
- <code>HTTPD_ROOT</code>.</li>
- </ol>
-
- <p>During the installation, a version-specific registry key is
- created in the Windows registry. The location of this key depends
- on the type of the installation. If you chose to install Apache
- for all users, the key is located under the
- <code>HKEY_LOCAL_MACHINE</code> hive, like this (the version
- numbers will of course vary between different versions of Apache:
- </p>
-
- <div class="example"><p><code>
- HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43
- </code></p></div>
-
- <p>Correspondingly, if you chose to install Apache for the current
- user only, the key is located under the <code>HKEY_CURRENT_USER</code>
- hive, the contents of which are dependent of the user currently
- logged on:</p>
-
- <div class="example"><p><code>
- HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43
- </code></p></div>
-
- <p>This key is compiled into the server and can enable you to test
- new versions without affecting the current version. Of course, you
- must take care not to install the new version in the same
- directory as another version.</p>
-
- <p>If you did not do a binary install, Apache will in some
- scenarios complain about the missing registry key. This warning can
- be ignored if the server was otherwise able to find its
- configuration file.</p>
-
- <p>The value of this key is the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directory which
- contains the <code>conf</code> subdirectory. When Apache starts it
- reads the <code>httpd.conf</code> file from that directory. If
- this file contains a <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- directive which contains a different directory from the one
- obtained from the registry key above, Apache will forget the
- registry key and use the directory from the configuration file. If
- you copy the Apache directory or configuration files to a new
- location it is vital that you update the
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive in the
- <code>httpd.conf</code> file to reflect the new location.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">Testing the Installation</a></h2>
-
-
- <p>After starting Apache (either in a console window or as a
- service) it will be listening on port 80 (unless you changed the
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> directive in the
- configuration files or installed Apache only for the current user).
- To connect to the server and access the default page, launch a
- browser and enter this URL:</p>
-
- <div class="example"><p><code>
- http://localhost/
- </code></p></div>
-
- <p>Apache should respond with a welcome page and a link to the
- Apache manual. If nothing happens or you get an error, look in the
- <code>error.log</code> file in the <code>logs</code> subdirectory.
- If your host is not connected to the net, or if you have serious
- problems with your DNS (Domain Name Service) configuration, you
- may have to use this URL:</p>
-
- <div class="example"><p><code>
- http://127.0.0.1/
- </code></p></div>
-
- <p>Once your basic installation is working, you should configure it
- properly by editing the files in the <code>conf</code> subdirectory.
- Again, if you change the configuration of the Windows NT service
- for Apache, first attempt to start it from the command line to
- make sure that the service starts with no errors.</p>
-
- <p>Because Apache <strong>cannot</strong> share the same port with
- another TCP/IP application, you may need to stop, uninstall or reconfigure
- certain other services before running Apache. These conflicting
- services include other WWW servers and some firewall implementations.
- </p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/platform/windows.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/windows.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/windows.html.ko.euc-kr b/docs/manual/platform/windows.html.ko.euc-kr
deleted file mode 100644
index 70805178fc..0000000000
--- a/docs/manual/platform/windows.html.ko.euc-kr
+++ /dev/null
@@ -1,686 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¹ý - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¹ý</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/windows.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/windows.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>ÀÌ ¹®¼­´Â Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ 2.0À» ¼³Ä¡, ¼³Á¤,
- ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. À߸øµÈ ºÎºÐÀÌ Àְųª ´Ù¸¥ ¹æ¹ýÀ¸·Î
- µµ¿òÀ» ÁÖ·Á¸é, <a href="http://httpd.apache.org/bug_report.html">¹ö±× º¸°í
- ÆäÀÌÁö</a>¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ ¹ÙÀ̳ʸ® ¹èÆ÷º»À» ¼³Ä¡ÇÑ´Ù°í °¡Á¤ÇÑ´Ù.
- (¾Æ¸¶µµ °³¹ß ȤÀº ¹ö±×¸¦ ã±âÀ§ÇØ) Á÷Á¢ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ·Á¸é
- <a href="win_compiling.html">Microsoft Windows¿ë ¾ÆÆÄÄ¡
- ÄÄÆÄÀÏ</a>À» Âü°íÇ϶ó.</p>
-
- <p><strong>ÇöÀç Microsoft Windows ¿î¿µÃ¼Á¦±ºÀÇ ¹öÀü Á¤Ã¥»ó
- ÀÌ ¹®¼­´Â ´ÙÀ½°ú °°ÀÌ ±¸ºÐÇÑ´Ù:</strong></p>
- <ul>
- <li><strong>Windows NT:</strong> Windows NT Ä¿³ÎÀ» ±â¹ÝÀ¸·Î
- ÇÏ´Â ¸ðµç Windows ¹öÀüÀ» ÀǹÌÇÑ´Ù. Windows NT, Windows
- 2000, Windows XP, Windows .Net Server 2003À» ÁöĪÇÑ´Ù.</li>
- <li><strong>Windows 9x:</strong> ¼ÒºñÀÚ Áß½ÉÀÇ ¿À·¡µÈ
- Windows ¹öÀüÀ» ¶æÇÑ´Ù. Windows 95 (OSR2 Æ÷ÇÔ), Windows
- 98, Windows ME¸¦ ÁöĪÇÑ´Ù.</li>
- </ul>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#req">¿î¿µÃ¼Á¦ ¿ä±¸Á¶°Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#down">Windows¿ë ¾ÆÆÄÄ¡ ´Ù¿î·Îµå</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#inst">Windows¿ë ¾ÆÆÄÄ¡ ¼³Ä¡Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cust">Windows¿ë ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#winsvc">¾ÆÆÄÄ¡¸¦ Service·Î ½ÇÇàÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#wincons">¾ÆÆÄÄ¡¸¦ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#test">Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾ú´ÂÁö °Ë»çÇϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="req" id="req">¿î¿µÃ¼Á¦ ¿ä±¸Á¶°Ç</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ 2.0À» ½ÇÇàÇϱâÀ§ÇÑ ±âº» Windows Ç÷¡ÆûÀº Windows
- NTÀÌ´Ù. ¹ÙÀ̳ʸ® ¼³Ä¡ÇÁ·Î±×·¥Àº Intel°ú AMD¿Í °°Àº x86 °³¿­
- ÇÁ·Î¼¼¼­¿¡¼­¸¸ µ¿ÀÛÇÑ´Ù. ¾ÆÆÄÄ¡´Â Windows 9x¿¡¼­ ÃæºÐÈ÷
- °Ë»çÇÏÁö ¾Ê¾Ò±â¶§¹®¿¡ Àý´ë·Î ½ÇÁ¦ ¼­ºñ½º¿¡ »ç¿ëÇÏÁö ¾Ê±æ
- ¹Ù¶õ´Ù.
- </p>
-
- <p>¿î¿µÃ¼Á¦¿¡ ¼³Ä¡ÇÑ TCP/IP ³×Æ®¿öÅ©°¡ µ¿ÀÛÇØ¾ß ÇÑ´Ù. Windows
- 95¿¡¼­ ½ÇÇàÇÑ´Ù¸é, Winsock 2 ¾÷±×·¹À̵带 ¼³Ä¡ÇØ¾ß ÇÑ´Ù.
- Windows 95¿ë Winsock 2´Â <a href="http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp">¿©±â</a>¿¡¼­
- ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù.
- </p>
-
- <p>Windows NT 4.0À» »ç¿ëÇÑ´Ù¸é ¼­ºñ½ºÆÑ 4ÀÇ TCP/IP ¹®Á¦¿Í
- Winsock ¹®Á¦°¡ ´ÙÀ½ ¼­ºñ½ºÆÑ¿¡¼­ ÇØ°áµÇ¾ú±â¶§¹®¿¡, ¼­ºñ½ºÆÑ
- 6À» ¼³Ä¡Çϱæ Àû±Ø ±ÇÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="down" id="down">Windows¿ë ¾ÆÆÄÄ¡ ´Ù¿î·Îµå</a></h2>
-
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö <a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>¿¡¼­
- ¾ÆÆÄÄ¡ ÃֽŠ¹öÀü¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ¿©±â¿¡´Â ÃÖ½Å
- ¹ßÇ¥ÆÇ°ú ¾ËÆÄ È¤Àº º£Å¸ Å×½ºÆ®¹öÀü°ú, ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ´Ù¿î·ÎµåÇÒ
- ¼ö ÀÖ´Â HTTP ¹Ì·¯¿Í FTP ¹Ì·¯ ¸ñ·ÏÀÌ ÀÖ´Ù. ºü¸£°í ¾ÈÁ¤ÇÏ°Ô
- ´Ù¿î¹ÞÀ¸·Á¸é °¡±î¿î ¹Ì·¯¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <p>Windows¿¡ ¼³Ä¡ÇÏ·Á¸é È®ÀåÀÚ°¡ <code>.msi</code>ÀÎ Windows¿ë
- ¾ÆÆÄÄ¡ ¹öÀüÀ» ´Ù¿î¹Þ¾Æ¾ß ÇÑ´Ù. ÀÌ ÆÄÀÏÀº ¸·¹Ù·Î ½ÇÇàÇÒ ¼ö
- ÀÖ´Â ¾ÆÆÄÄ¡¸¦ ÀúÀåÇÑ Microsoft ¼³Ä¡ÆÄÀÏÀÌ´Ù. µû·Î ¼Ò½ºÄڵ常
- ¹­¾îµÐ <code>.zip</code> ÆÄÀÏÀÌ ÀÖ´Ù. Microsoft Visual C++
- (Visual Studio)À» »ç¿ëÇÏ¿© Á÷Á¢ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ ¼öµµ ÀÖ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="inst" id="inst">Windows¿ë ¾ÆÆÄÄ¡ ¼³Ä¡Çϱâ</a></h2>
-
-
- <p>¼³Ä¡ÇÏ·Á¸é Microsoft Installer 1.2 ÀÌ»ó ¹öÀüÀÌ ÇÊ¿äÇÏ´Ù.
- Windows 9x¸¦ »ç¿ëÇÑ´Ù¸é <a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32831">¿©±â</a>¿¡¼­
- Microsoft Installer¸¦ 2.0 ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇÒ ¼ö ÀÖ°í,
- Windows NT 4.0°ú 2000À» »ç¿ëÇÑ´Ù¸é <a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32832">¿©±â</a>¿¡¼­
- 2.0 ¹öÀü ¾÷µ¥ÀÌÆ®¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. Windows XP´Â ¾÷µ¥ÀÌÆ®ÇÒ
- ÇÊ¿ä°¡ ¾ø´Ù.</p>
-
- <p>¹ÙÀ̳ʸ® ¼³Ä¡ÆÄÀϷδ °°Àº ÄÄÇ»ÅÍ¿¡ ¼­·Î ´Ù¸¥ ¾ÆÆÄÄ¡
- 2.0 ¹öÀüÀ» ¼³Ä¡ÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó. ±×·¯³ª 1.3
- ¹öÀü<strong>°ú</strong> 2.0 ¹öÀüÀº °°Àº ÄÄÇ»ÅÍ¿¡ ¾Æ¹« ¹®Á¦¾øÀÌ
- ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. °°Àº ÄÄÇ»ÅÍ¿¡ µÎ°¡Áö ´Ù¸¥ 2.0 ¹öÀüÀ» ¼³Ä¡ÇÏ·Á¸é
- <a href="win_compiling.html">¼Ò½º¸¦ ÄÄÆÄÀÏÇÏ¿© ¾ÆÆÄÄ¡¸¦
- ¼³Ä¡</a>ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>À§¿¡¼­ ´Ù¿î¹ÞÀº ¾ÆÆÄÄ¡ <code>.msi</code> ÆÄÀÏÀ» ½ÇÇàÇÑ´Ù.
- ¼³Ä¡ÇÒ¶§ ´ÙÀ½°ú °°Àº °ÍÀ» ¹°¾îº»´Ù:</p>
-
- <ol>
- <li><p><strong>³×Æ®¿öÅ© µµ¸ÞÀÎ (Network Domain).</strong>
- µî·ÏµÈ ¼­¹öÀÇ DNS µµ¸ÞÀÎÀ» ÀÔ·ÂÇÑ´Ù. ¿¹¸¦ µé¾î, ¼­¹öÀÇ
- Àüü DNS À̸§ÀÌ <code>server.mydomain.net</code>À̶ó¸é
- ¿©±â¿¡ <code>mydomain.net</code>À» ÀÔ·ÂÇÑ´Ù.</p></li>
-
- <li><p><strong>¼­¹ö¸í (Server Name).</strong> ¼­¹öÀÇ Àüü
- DNS À̸§. À§ÀÇ °æ¿ì ¿©±â¿¡ <code>server.mydomain.net</code>À»
- ÀÔ·ÂÇÑ´Ù.</p></li>
-
- <li><p><strong>°ü¸®ÀÚ ÀüÀÚ¿ìÆí ÁÖ¼Ò (Administrator's Email
- Address).</strong> ¿©±â¿¡ ¼­¹ö °ü¸®ÀÚ³ª À¥¸¶½ºÅÍÀÇ ÀüÀÚ¿ìÆí
- ÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ´Ù. ±âº»ÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â ¿À·ù¹®¿¡
- ÀÌ ÁÖ¼Ò¸¦ ±â·ÏÇÑ´Ù.</p></li>
-
- <li><p><strong>»ç¿ëÀÚ ´ë»ó (For whom to install
- Apache)</strong> »õ·Î ¼³Ä¡ÇÏ´Â ¾ÆÆÄÄ¡°¡ 80¹ø Æ÷Æ®¿¡¼­
- ¿äûÀ» ±â´Ù¸®°Ô ÇÏ·Á¸é <code>for All Users, on Port 80,
- as a Service - Recommended</code> (¸ðµç »ç¿ëÀÚ, 80¹ø Æ÷Æ®,
- service·Î - Ãßõ)¸¦ ¼±ÅÃÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇÑ´Ù
- (Áï, ¾ÆÆÄÄ¡´Â ¼­¹ö¿¡ ·Î±×ÀÎÇÑ »ç¶÷ÀÌ ¾ø¾îµµ ½ÇÇàµÈ´Ù).
- °³ÀÎÀûÀ¸·Î Å×½ºÆ®Çغ¸°Å³ª ÀÌ¹Ì 80¹ø Æ÷Æ®¸¦ »ç¿ëÇÏ´Â ´Ù¸¥
- À¥¼­¹ö°¡ ÀÖ´Ù¸é <code>only for the Current User, on Port
- 8080, when started Manually</code> (ÇöÀç »ç¿ëÀÚ¸¸, 8080¹ø
- Æ÷Æ®, Á÷Á¢ ½ÃÀÛ)¸¦ ¼±ÅÃÇÑ´Ù.</p></li>
-
- <li><p><strong>¼³Ä¡ Á¾·ù (The installation type).</strong>
- ¸ðµâ °³¹ß¿¡ ÇÊ¿äÇÑ ¼Ò½ºÄÚµå¿Í ¶óÀ̺귯¸®¸¦ Á¦¿ÜÇÑ ¸ðµç
- °ÍÀ» ¼³Ä¡ÇÏ·Á¸é <code>Typical</code>À» ¼±ÅÃÇÑ´Ù.
- <code>Custom</code>À» ¼±ÅÃÇÏ¸é ¼³Ä¡ÇÒ ³»¿ëÀ» ÁöÁ¤ÇÒ ¼ö
- ÀÖ´Ù. Àüü ¼³Ä¡½Ã µð½ºÅ©¿¡ ºó °ø°£ÀÌ ¾à 13 ¸Þ°¡¹ÙÀÌÆ®
- Á¤µµ ÇÊ¿äÇÏ´Ù. ÀÌ ¼öÄ¡´Â À¥»çÀÌÆ® Å©±â¸¦ <em>Á¦¿ÜÇÑ</em>
- °ÍÀÌ´Ù.</p></li>
-
- <li><p><strong>¼³Ä¡ Àå¼Ò (Where to install).</strong>
- ±âº» °æ·Î´Â <code>C:\Program Files\Apache Group</code>ÀÌ°í,
- ÀÌ°÷¿¡ <code>Apache2</code>¶ó´Â µð·ºÅ丮¸¦ ¸¸µç´Ù.</p></li>
- </ol>
-
- <p>¼³Ä¡ÇÒ µ¿¾È ¾ÆÆÄÄ¡´Â <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀϵéÀ» ¼±ÅÃÇÑ ¼³Ä¡ µð·ºÅ丮¿¡ ¸Â°Ô ±¸¼ºÇÑ´Ù. ±×·¯³ª
- ÀÌ µð·ºÅ丮¿¡ ¼³Á¤ÆÄÀÏÀÌ ÀÌ¹Ì ÀÖ´Ù¸é ±×´ë·Î µÐ´Ù. ´ë½Å,
- ÇØ´ç ÆÄÀÏÀÇ »õ·Î¿î º¹»çº»¿¡ È®ÀåÀÚ <code>.default</code>¸¦
- ºÙÀδÙ. ¿¹¸¦ µé¾î, <code>conf\httpd.conf</code>°¡ ÀÌ¹Ì ÀÖ´Ù¸é
- <code>conf\httpd.conf.default</code>·Î À̸§À» º¯°æÇÑ´Ù.
- ¼³Ä¡ÈÄ <code>.default</code> ÆÄÀÏÀÇ ¼³Á¤À» Á÷Á¢ »ìÆ캸°í,
- ÇÊ¿äÇÏ´Ù¸é ±âÁ¸ ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¶Ç, ÀÌ¹Ì <code>htdocs\index.html</code>À̶ó´Â ÆÄÀÏÀÌ
- ÀÖ´Ù¸é ±×´ë·Î µÐ´Ù (<code>index.html.default</code>¶ó°í
- º¹»çÇÏÁöµµ ¾Ê´Â´Ù). Áï, ±âÁ¸¿¡ ¾ÆÆÄÄ¡°¡ ¼³Ä¡µÇÀÖ´õ¶óµµ ¾ÈÀüÇÏ°Ô
- ¾ÆÆÄÄ¡¸¦ »õ·Î ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ¼³Ä¡Çϱâ Àü¿¡ ¼­¹ö¸¦
- Áß´ÜÇÏ°í, ¼³Ä¡ÈÄ »õ·Î¿î ¼­¹ö¸¦ ½ÃÀÛÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ ¼³Ä¡ÈÄ ÇÊ¿äÇÏ´Ù¸é <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡
- ÀÖ´Â ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ÆÄÀÏÀº ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ µð·ºÅ丮ÀÇ
- <code>htdocs</code> ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ¹®¼­¸¦ ¼­ºñ½ºÇϵµ·Ï
- ¼³Á¤µÇÀÖ´Ù. ½ÇÁ¦·Î ¾ÆÆÄÄ¡¸¦ »ç¿ëÇϱâ Àü¿¡ ¼³Á¤ÇØ¾ß ÇÒ ¿É¼ÇÀÌ
- ¸¹´Ù. ±×·¯³ª »¡¸® ½ÇÇàÇغ¼ ¼ö ÀÖµµ·Ï ±âº» ¼³Á¤ÆÄÀϷεµ µ¿ÀÛÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cust" id="cust">Windows¿ë ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</a></h2>
-
-
- <p>¾ÆÆÄÄ¡´Â <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ·Î
- ¼³Á¤ÇÑ´Ù. ÀÌ ÆÄÀÏÀº À¯´Ð½º¿ë°ú °°Áö¸¸, Windows¿ë ¾ÆÆÄÄ¡
- ƯÀ¯ÀÇ Áö½Ã¾î°¡ ¸î°³ ÀÖ´Ù. »ç¿ë°¡´ÉÇÑ ¸ðµç Áö½Ã¾î¸¦ º¸·Á¸é
- <a href="../mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a>À» Âü°íÇ϶ó.</p>
-
- <p>Windows¿ë ¾ÆÆÄÄ¡ÀÇ ÁÖµÈ Â÷ÀÌÁ¡Àº:</p>
- <ul>
- <li><p>Windows¿ë ¾ÆÆÄÄ¡´Â ´ÙÁß¾²·¹µå ¹æ½ÄÀ» »ç¿ëÇϱ⶧¹®¿¡,
- À¯´Ð½º¿Í ´Þ¸® ¿äû¸¶´Ù ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
- ´ë½Å ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½º´Â Ç×»ó, ºÎ¸ð ÇÁ·Î¼¼½º¿Í ¿äûÀ» ó¸®ÇÏ´Â
- ÀÚ½Ä ÇÁ·Î¼¼½º, 2°³ÀÌ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÖ´Â ¿©·¯ ¾²·¹µåµéÀÌ
- ¿äûµéÀ» ó¸®ÇÑ´Ù.
- </p>
-
- <p>ÇÁ·Î¼¼½º °ü¸® Áö½Ã¾îµµ ´Ù¸£´Ù:</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>: À¯´Ð½º¿Í
- °°ÀÌ, ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¿äûÀ» ¾ó¸¶¸¸Å­ ó¸®ÇÏ°í Á×À»Áö¸¦
- Á¶Á¤ÇÑ´Ù. ±×·¯³ª À¯´Ð½º¿Í ´Þ¸® ÇÁ·Î¼¼½º°¡ Çѹø¿¡ ÇÑ ¿äû¸¸À»
- ó¸®ÇÏÁö¾Ê°í Çѹø¿¡ ¸ðµç ¿äûÀ» ¼­ºñ½ºÇϱ⶧¹®¿¡, ¼³Á¤ÇÑ´Ù¸é
- ¸Å¿ì Å« °ªÀ» ¼³Á¤ÇÏ±æ ±ÇÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ª
- <code>MaxRequestsPerChild 0</code>À» »ç¿ëÇϸé ÀÚ½Ä ÇÁ·Î¼¼½º´Â
- Á×Áö¾Ê°í ¿µ¿øÈ÷ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- <div class="warning"><strong>°æ°í: ÀÚ½Ä ÇÁ·Î¼¼½º´Â »õ·Î
- ½ÃÀÛÇÒ ¶§¸¶´Ù ¼­¹ö¼³Á¤ÆÄÀÏÀ» »õ·Î Àд´Ù.
- <code>httpd.conf</code>¸¦ ¼öÁ¤Çß´Ù¸é, ÀÚ½Ä ÇÁ·Î¼¼½º°¡
- ½ÃÀÛÇÏÁö ¾Ê°Å³ª ¿¹±âÄ¡¾ÊÀº °á°ú°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.</strong></div>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>:
- ÀÌ Áö½Ã¾î´Â »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ Áö½Ã¾î´Â ¼­¹ö°¡ »ç¿ëÇÒ
- ¾²·¹µå °³¼ö¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀÌ ¼­¹ö°¡ Çѹø¿¡ ó¸®ÇÒ ¼ö
- ÀÖ´Â ÃÖ´ë ¿¬°á°³¼öÀ̱⶧¹®¿¡, »çÀÌÆ®¿¡ Á¢¼Ó·®ÀÌ ¸¹´Ù¸é
- ÃæºÐÈ÷ Å« °ªÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ªÀº
- <code>ThreadsPerChild 50</code>ÀÌ´Ù.</p></li>
-
- <li><p>ÆÄÀϸíÀ» ¾Æ±Ô¸ÕÆ®·Î ¹Þ´Â Áö½Ã¾î´Â À¯´Ð½º ÆÄÀϸíÀÌ
- ¾Æ´Ñ Windows ÆÄÀϸíÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡ ³»ºÎ¿¡¼­
- À¯´Ð½º½Ä À̸§À» »ç¿ëÇϱ⶧¹®¿¡ ¹é½½·¡½¬°¡ ¾Æ´Ñ ½½·¡½¬¸¦
- »ç¿ëÇØ¾ß ÇÑ´Ù. µå¶óÀÌºê ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. µå¶óÀ̺긦
- ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾ÆÆÄÄ¡ ½ÇÇàÆÄÀÏÀÌ ÀÖ´Â µå¶óÀ̺긦
- »ç¿ëÇÑ´Ù.</p></li>
-
- <li><p>Windows¿ë ¾ÆÆÄÄ¡´Â ¼­¹ö¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê°í
- ½ÇÇàÁß¿¡ ¸ðµâÀ» ÀоîµéÀÏ ¼ö ÀÖ´Ù. ±âº»°ªÀ¸·Î ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇϸé <code>\Apache2\modules</code> µð·ºÅ丮¿¡ ¿©·¯
- ¼±Åð¡´ÉÇÑ ¸ðµâÀ» ¼³Ä¡ÇÑ´Ù. ÀÌ ¸ðµâ ȤÀº ´Ù¸¥ ¸ðµâÀ»
- »ç¿ëÇÏ·Á¸é »õ·Î »ý±ä <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- ¿¹¸¦ µé¾î, status ¸ðµâÀ» »ç¿ëÇÑ´Ù¸é
- (<code>access.conf</code>¿¡ status°ü·Ã Áö½Ã¾î¿Í ÇÔ²²)
- ¾Æ·¡¿Í °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- LoadModule status_module modules/mod_status.so
- </code></p></div>
-
- <p><a href="../mod/mod_so.html#creating">ÀоîµéÀÏ ¼ö ÀÖ´Â
- ¸ðµâ ¸¸µé±â</a>¿¡ ´ëÇÑ Á¤º¸µµ ÀÖ´Ù.</p></li>
-
- <li><p>¾ÆÆÄÄ¡´Â Microsoft IIS¿Í ´Ù¸¥ Windows ¼­¹ö°¡ »ç¿ëÇÏ´Â
- ISAPI (Internet Server Application Programming Interface)
- È®ÀåÀ» (Áï, ÀÎÅÍ³Ý ¼­¹ö ÇÁ·Î±×·¥) ÀоîµéÀÏ ¼öµµ ÀÖ´Ù.
- <a href="../mod/mod_isapi.html">´õ ÀÚ¼¼ÇÑ Á¤º¸°¡ ÀÖ´Ù</a>.
- ¾ÆÆÄÄ¡´Â ISAPI ÇÊÅ͸¦ ÀоîµéÀÏ ¼ö <strong>¾øÀ½À»</strong>
- ÁÖÀÇÇ϶ó.</p></li>
-
- <li><p>CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ´Ù¸é <code class="directive"><a href="../mod/core.html#scriptinterpretersource">ScriptInterpreterSource</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡°¡ ½ºÅ©¸³Æ®ÀÇ ÀÎÅÍÇÁ¸®Å͸¦ ã´Â ¹æ¹ýÀ»
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p></li>
-
- <li><p>Windows¿¡¼­ <code>.htaccess</code>¿Í °°Àº ÆÄÀϸíÀ»
- ´Ù·ç±â Èûµå¹Ç·Î, <code class="directive"><a href="../mod/core.html#accessfilename">AccessFilename</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ À̸§À» º¯°æÇϸé ÆíÇÏ´Ù.</p></li>
-
- <li><p>Windows NT¶ó¸é ¾ÆÆÄÄ¡ ½ÃÀ۽à ¹ß»ýÇÑ ¿À·ù¸¦ Windows
- À̺¥Æ® ·Î±×¿¡ ±â·ÏÇÑ´Ù. ±×·¡¼­ ¾ÆÆÄÄ¡°¡ º¸Åë »ç¿ëÇÏ´Â
- <code>error.log</code> ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì¿¡ ´ëºñÇÑ´Ù.
- Windows À̺¥Æ® ·Î±×´Â Windows NT 4.0¿¡¼­´Â À̺¥Æ® ºä¾î
- ÇÁ·Î±×·¥À¸·Î, ÃֽŠWindows ¹öÀü¿¡¼­´Â À̺¥Æ® ºä¾î MMC
- ½º³ÀÀο¡¼­ º¼ ¼ö ÀÖ´Ù.</p>
-
- <div class="note"><strong>Windows 9x¿¡´Â Windows À̺¥Æ® ·Î±×°¡ ¾ø±â¶§¹®¿¡
- ½ÃÀ۽à ¹ß»ýÇÑ ¿À·ù¸¦ ±â·ÏÇÏÁö ¾Ê´Â´Ù.</strong></div></li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="winsvc" id="winsvc">¾ÆÆÄÄ¡¸¦ Service·Î ½ÇÇàÇϱâ</a></h2>
-
-
- <p>Windows NT¿¡¼­´Â ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù. Windows
- 9x¿¡´Â ¸Å¿ì ½ÇÇèÀûÀÎ ¹æ¹ýÀ¸·Î ºñ½ÁÇÑ ±â´ÉÀ» Áö¿øÇÑ´Ù.</p>
-
- <p>¼³Ä¡½Ã ÀÚµ¿À¸·Î ¾ÆÆÄÄ¡¸¦ service·Î ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. "¸ðµç
- »ç¿ëÀÚ"¸¦ ¼±ÅÃÇϸé, ¾ÆÆÄÄ¡ service°¡ ¸¸µé¾îÁø´Ù. "ÇöÀç
- »ç¿ëÀÚ¸¸"À» ¼±ÅÃÇÏ´õ¶óµµ ¼³Ä¡ÈÄ Á÷Á¢ ¾ÆÆÄÄ¡¸¦ service·Î
- µî·ÏÇÒ ¼ö ÀÖ´Ù. service¸¦ ¼³Ä¡ÇÏ·Á¸é Administrators ±×·ìÀÇ
- ±¸¼º¿øÀ̾î¾ß ÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡´Â Apache Service Monitor¶ó´Â µµ±¸°¡ ÀÖ´Ù. ÀÌ
- µµ±¸¸¦ »ç¿ëÇÏ¸é ³×Æ®¿÷¿¡ ÀÖ´Â ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡µÈ ¾ÆÆÄÄ¡
- »óŵµ È®ÀÎÇÏ°í °ü¸®ÇÒ ¼ö ÀÖ´Ù. monitor·Î ¾ÆÆÄÄ¡ service¸¦
- °ü¸®ÇÏ·Á¸é ¸ÕÀú service¸¦ (¼³Ä¡½Ã ÀÚµ¿À¸·Î ȤÀº Á÷Á¢) ¼³Ä¡Çؾß
- ÇÑ´Ù.
- </p>
-
- <p>¾ÆÆÄÄ¡ <code>bin</code> ÇÏÀ§µð·ºÅ丮¿¡¼­ ¸í·ÉÇà ÇÁ·ÒÇÁÆ®¿¡
- ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¸é ¾ÆÆÄÄ¡¸¦ Windows NT service·Î ¼³Ä¡ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- apache -k install
- </code></p></div>
-
- <p>¼³Ä¡ÇÒ service À̸§À» ÁöÁ¤ÇÏ°í ½Í´Ù¸é ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù.
- ÄÄÇ»ÅÍ¿¡ ¾ÆÆÄÄ¡°¡ ¿©·¯°³ ¼³Ä¡µÇÀÖ´Ù¸é À̸§À» ´Ù¸£°Ô ÁÖ¾î¾ß
- ÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- apache -k install -n "MyServiceName"
- </code></p></div>
-
- <p>service°¡ »ç¿ëÇÒ ¼³Á¤ÆÄÀÏÀ» Á÷Á¢ ÁöÁ¤ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ
- ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- apache -k install -n "MyServiceName" -f "c:\files\my.conf"
- </code></p></div>
-
- <p><code>-k install</code> ¿Ü¿¡ ´Ù¸¥ ÆĶó¹ÌÅ͸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸¸é, service À̸§Àº <code>Apache2</code>°¡ µÇ°í ¼³Á¤ÆÄÀÏÀº
- <code>conf\httpd.conf</code>°¡ µÈ´Ù.
- </p>
-
- <p>¾ÆÆÄÄ¡ service¸¦ Á¦°ÅÇϱ⠽±´Ù. °£´ÜÈ÷:</p>
-
- <div class="example"><p><code>
- apache -k uninstall
- </code></p></div>
-
- <p>´ÙÀ½°ú °°ÀÌ Á¦°ÅÇÒ ¾ÆÆÄÄ¡ service¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- apache -k uninstall -n "MyServiceName"
- </code></p></div>
-
- <p>º¸Åë ¾ÆÆÄÄ¡ service ½ÃÀÛ, Àç½ÃÀÛ, Á¾·á´Â Apache Service
- Monitor³ª <code>NET START Apache2</code>, <code>NET STOP
- Apache2</code> °°Àº ¸í·É¾î ȤÀº Windows ¼­ºñ½º °ü¸®Ã¢¿¡¼­
- ÇÑ´Ù. ¾î¶² ¹æ¹ýÀ» »ç¿ëÇϵçÁö ¾ÆÆÄÄ¡ service¸¦ ½ÃÀÛÇϱâ Àü¿¡
- ¼³Á¤ÆÄÀÏÀ» °Ë»çÇغÁ¾ß ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- apache -n "MyServiceName" -t
- </code></p></div>
-
- <p>¸í·ÉÇà ¿É¼ÇÀ¸·Îµµ ¾ÆÆÄÄ¡ service¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. ¼³Ä¡ÇÑ
- ¾ÆÆÄÄ¡ serivce¸¦ ½ÃÀÛÇÏ·Á¸é:</p>
-
- <div class="example"><p><code>
- apache -k start
- </code></p></div>
-
- <p>¸í·ÉÇà ¿É¼ÇÀ¸·Î ¾ÆÆÄÄ¡ service¸¦ Á¾·áÇÏ·Á¸é:</p>
-
- <div class="example"><p><code>
- apache -k stop
- </code></p></div>
-
- <p>ȤÀº</p>
-
- <div class="example"><p><code>
- apache -k shutdown
- </code></p></div>
-
- <p>½ÇÇàÁßÀÎ service¸¦ Àç½ÃÀÛÇÏ¿© ¼³Á¤ÆÄÀÏÀ» ´Ù½Ã Àеµ·Ï
- ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- apache -k restart
- </code></p></div>
-
- <p>±âº»ÀûÀ¸·Î ¸ðµç ¾ÆÆÄÄ¡ service´Â ½Ã½ºÅÛ »ç¿ëÀÚ
- (<code>LocalSystem</code> °èÁ¤) ±ÇÇÑÀ¸·Î ½ÇÇàÇϵµ·Ï µî·ÏµÈ´Ù.
- Windows º¸¾È±¸Á¶»ó <code>LocalSystem</code> °èÁ¤Àº ÆÄÀϽýºÅÛ,
- named pipes, DCOM, secure RPC µî ¾î¶² ¹æ¹ýÀ» »ç¿ëÇϵçÁö
- ³×Æ®¿÷¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÇØ´ç ÄÄÇ»ÅÍ¿¡¼­´Â ¸¹Àº ±ÇÇÑÀ»
- °¡Áø´Ù.
- </p>
-
- <div class="warning"><strong><code>LocalSystem</code> °èÁ¤¿¡°Ô
- ³×Æ®¿÷ ±ÇÇÑÀ» Àý´ë·Î ÁÖÁö ¸¶¶ó! ¾ÆÆÄÄ¡°¡ ³×Æ®¿÷ ÀÚ¿ø¿¡ Á¢±ÙÇؾß
- ÇÑ´Ù¸é, ¾Æ·¡¿¡¼­ ¼³¸íÇÏ´Â ¹æ¹ýÀ¸·Î ¾ÆÆÄÄ¡¸¦ À§ÇÑ º°µµÀÇ
- °èÁ¤À» ¸¸µé¾î¶ó.</strong></div>
-
- <p>¾ÆÆÄÄ¡ service¸¦ ½ÇÇàÇϱâÀ§ÇÑ º°µµÀÇ °èÁ¤À» ¸¸µé ¼öµµ
- ÀÖ´Ù. ƯÈ÷ ¾ÆÆÄÄ¡°¡ ³×Æ®¿÷ ÀÚ¿ø¿¡ Á¢±ÙÇØ¾ß ÇÑ´Ù¸é ÀÌ ¹æ¹ýÀ»
- °­·ÂÈ÷ ±ÇÇÑ´Ù.</p>
-
- <ol>
- <li>ÀÏ¹Ý µµ¸ÞÀÎ »ç¿ëÀÚ °èÁ¤À» ¸¸µé°í ¾ÏÈ£¸¦ ±â¾ïÇ϶ó.</li>
-
- <li>»õ·Î ¸¸µç °èÁ¤¿¡ <code>¼­ºñ½º·Î ·Î±×¿Â</code>¿Í
- <code>¿î¿µ üÁ¦ÀÇ ÀϺηΠȰµ¿</code> ±ÇÇÑÀ»
- ºÎ¿©ÇÑ´Ù. Windows NT 4.0¿¡¼­´Â User Manager for Domains¿¡¼­
- ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ°í, Windows 2000°ú XP¿¡¼­´Â ¾Æ¸¶µµ
- "±×·ì Á¤Ã¥"À» »ç¿ëÇØ¾ß ÇÑ´Ù. "·ÎÄà º¸¾È ¼³Á¤" MMC
- ½º³ÀÀο¡¼­ Á÷Á¢ ¼³Á¤ÇØÁÙ ¼öµµ ÀÖ´Ù.
- </li>
-
- <li>»õ·Î ¸¸µç °èÁ¤ÀÌ Users ±×·ì¿¡ ¼ÓÇÏ´ÂÁö È®ÀÎÇÑ´Ù.</li>
-
- <li>¸ðµç ¹®¼­¿Í ½ºÅ©¸³Æ® Æú´õ¿¡ (¿¹¸¦ µé¾î
- <code>htdocs</code>¿Í <code>cgi-bin</code>) ´ëÇØ Àб⠹×
- ½ÇÇà (RX) ±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù.</li>
-
- <li>¾ÆÆÄÄ¡ <code>logs</code> µð·ºÅ丮¿¡ ¼öÁ¤ (RWXD) ±ÇÇÑÀ»
- ºÎ¿©ÇÑ´Ù.</li>
-
- <li><code>Apache.exe</code> ½ÇÇàÆÄÀÏ¿¡ ÀÐ±â ¹× ½ÇÇà (RX)
- ±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù.</li>
- </ol>
-
- <div class="note">¾ÆÆÄÄ¡ service¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿¡°Ô ÃÖ¼ÒÇÑ ¼öÁ¤ (RWXD)
- ±ÇÇÑÀÌ ÇÊ¿äÇÑ <code>logs</code> ÇÏÀ§µð·ºÅ丮¸¦ Á¦¿ÜÇÏ°í
- Apache2 µð·ºÅ丮 Àüü¿¡ ÀÐ±â ¹× ½ÇÇà (RX) ±ÇÇÑÀ» ºÎ¿©ÇÏ´Â
- °ÍÀÌ ÁÁ´Ù.</div>
-
- <p>°èÁ¤¿¡ "·ÎÄà ·Î±×¿Â"°ú "¼­ºñ½º·Î ·Î±×¿Â" ±ÇÇÑÀÌ ÀÖ´Ù¸é,
- ±× °èÁ¤À¸·Î ·Î±×¿ÂÇÏ¿© °èÁ¤ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í À¥ÆäÀÌÁö¸¦
- ÀÐÀ¸¸ç ÄܼÖâ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´ÂÁö °Ë»çÇغ¼ ¼ö
- ÀÖ´Ù. ¿©±â¼­ ¹®Á¦°¡ ¾ø´Ù¸é ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇصµ ¹®Á¦°¡
- ¾ø´Ù.</p>
-
- <div class="note"><strong>Error code 2186</strong>Àº ¾ÆÆÄÄ¡°¡ ÇÊ¿äÇÑ
- ³×Æ®¿÷ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù´Â ¸»·Î serviceÀÇ "·Î±×¿Â"
- ¼³Á¤À» È®ÀÎÇ϶ó. ¶Ç, ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â °èÁ¤ÀÇ ±ÇÇÑÀ»
- »ìÆìºÁ¶ó.</div>
-
- <p>¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇϸé Windows Service Control
- Manager¿¡¼­ ¿À·ù¹®À» º¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, Á¦¾îÆÇ¿¡¼­
- "¼­ºñ½º"¸¦ »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ´Â °æ¿ì ´ÙÀ½°ú °°Àº ¹®±¸°¡
- ³ª¿Ã ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- Could not start the Apache2 service on \\COMPUTER <br />
- Error 1067; The process terminated unexpectedly.
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡ service¸¦ ½ÃÀÛÇÒ¶§ ¹®Á¦°¡ ÀÖÀ¸¸é ÀϹÝÀûÀÎ ÀÌ·±
- ¿À·ù°¡ ³ª¿Â´Ù. ½ÇÁ¦ ¾îµð°¡ ¹®Á¦ÀÎÁö ¾Ë·Á¸é ¾ÆÆÄÄ¡¸¦ ÄܼÖ
- ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇغ¸¶ó.</p>
-
- <p>Windows 9x¿¡¼­ ¾ÆÆÄÄ¡´Â Windows NTÀÇ service¿Í ºñ½ÁÇÑ
- ¹æ¹ýÀ» Áö¿øÇÑ´Ù. ±×·¯³ª <strong>¸Å¿ì ½ÇÇèÀûÀÎ</strong> ±â´ÉÀÌ´Ù.
- ½ÇÁ¦ ¼­ºñ½º¿¡ »ç¿ëÇÒ¸¸Å­ ¾ÈÁ¤ÀûÀÌÁö ¾Ê°í ¾ÕÀ¸·Î °³¼±µÉÁö
- º¸ÀåÇÒ ¼öµµ ¾ø´Ù. À§ÇèÇϹǷΠȤ½Ã³ª »ç¿ëÇÑ´Ù¸é ÁÖÀÇÇؼ­
- »ç¿ëÇØ¾ß ÇÑ´Ù!</p>
-
- <p>µÎ°¡Áö serviceÀÇ Áß¿äÇÑ Â÷ÀÌÁ¡Àº ´ÙÀ½°ú °°´Ù:</p>
-
- <ul>
- <li><p>¾ÆÆÄÄ¡°¡ ¼º°øÀûÀ¸·Î ½ÃÀÛÇÏ¸é ¹è°æ¿¡¼­ ½ÇÇàÇÑ´Ù.
- ¿¹¸¦ µé¾î, µ¥½ºÅ©Å¾¿¡ ¹Ù·Î°¡±â¸¦ ¸¸µé¾î¼­ ´ÙÀ½ ¸í·ÉÀ»
- ½ÇÇàÇÏ´Â °æ¿ì,</p>
-
- <div class="example"><p><code>
- apache -n "MyServiceName" -k start
- </code></p></div>
-
- <p>service°¡ ¼º°øÀûÀ¸·Î ½ÃÀÛÇϸé ÄܼÖâÀÌ »ý°å´Ù°¡ ±Ý¹æ
- »ç¶óÁø´Ù. httpd.conf ¼³Á¤ÆÄÀÏ¿¡ À߸øµÈ ³»¿ëÀÌ ÀÖ´Â µî
- ¾ÆÆÄÄ¡ ½ÃÀ۽à ¿À·ù°¡ ¹ß»ýÇϸé ÄܼÖâÀ» °è¼Ó º¸ÀδÙ. ÄܼÖâÀº
- ¹®Á¦ÀÇ ¿øÀÎÀ» ÆľÇÇϴµ¥ µµ¿òÀ» ÁÖ´Â ¿À·ù¹®À» º¸¿©ÁØ´Ù.</p></li>
-
- <li><p>Windows 9x´Â <code>NET START</code>¿Í <code>NET
- STOP</code> ¸í·É¾î¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ¸í·ÉÇÁ·ÒÇÁÆ®¿¡¼­
- <code>-k</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡ service¸¦ Á¶Á¤Çؾß
- ÇÑ´Ù.
- </p></li>
-
- <li><p>
- ¾ÆÆÄÄ¡¿Í Windows 9x´Â ³×Æ®¿÷ ±ÇÇÑÀ» °¡Áø ƯÁ¤ »ç¿ëÀÚ·Î
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏÁö ¸øÇÑ´Ù. »ç½Ç Windows 9x´Â º¸¾ÈÀ» Á¦°øÇÏÁöµµ
- ¾Ê´Â´Ù. ÀÌ°ÍÀÌ ¹Ù·Î Apache Software FoundationÀÌ Windows
- 9x ½Ã½ºÅÛÀ» °ø°³ À¥¼­¹ö·Î »ç¿ëÇÏ±æ ±ÇÇÏÁö ¾Ê´Â ÀÌÀ¯´Ù.
- »ç¿ëÀÚ°¡ À¥ ÄÁÅÙÃ÷¸¦ °³¹ßÇÏ°í ¾ÆÆÄÄ¡ ¼­¹ö ÇнÀÀ» µ½±âÀ§ÇØ,
- ¾Æ´Ï¸é ¾ÈÀüÇÑ »ç¼³ ³×Æ®¿÷¿¡ À§Ä¡ÇÒ ÀÎÆ®¶ó³Ý ¼­¹ö¸¦ À§ÇØ,
- Windows 9x¸¦ Áö¿øÇÒ »ÓÀÌ´Ù.</p></li>
-
- </ul>
-
- <p>¾ÆÆÄÄ¡°¡ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î µ¿ÀÛÇÔÀ» È®ÀÎÇÏ¿´´Ù¸é Windows
- NT¿¡¼­¿Í °°Àº ¸í·É¾î·Î °¡»ó service¸¦ ¼³Ä¡, Á¶Àý, Á¦°ÅÇÒ
- ¼ö ÀÖ´Ù. ¶Ç, Apache Service Monitor¸¦ »ç¿ëÇÏ¿© Windows 9x
- °¡»ó service¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="wincons" id="wincons">¾ÆÆÄÄ¡¸¦ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇϱâ</a></h2>
-
-
- <p>ÀϹÝÀûÀ¸·Î ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇÏ±æ ±ÇÇÑ´Ù. ±×·¯³ª
- ¸í·ÉÇà¿¡¼­ ½ÇÇàÇÏ´Â°Ô ÆíÇÑ °æ¿ì°¡ ÀÖ´Ù (Windows 9x¿¡¼­´Â
- service¸¦ ¾ÈÁ¤ÀûÀ¸·Î Áö¿øÇÏÁö ¾Ê±â¶§¹®¿¡ ¸í·ÉÇà¿¡¼­ ¾ÆÆÄÄ¡¸¦
- ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ±ÇÇÑ´Ù).</p>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇÏ·Á¸é, ¸í·ÉÇà¿¡¼­ ´ÙÀ½
- ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- apache
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡´Â Control-C¸¦ ´­·¯¼­ Á¤ÁöÇÒ ¶§±îÁö ½ÇÇàµÈ´Ù.</p>
-
- <p>¶Ç, <code>½ÃÀÛ ¸Þ´º --&gt; ÇÁ·Î±×·¥ --&gt; Apache HTTP
- Server 2.0.xx --&gt; Control Apache Server</code>¿¡ ¼³Ä¡µÈ
- Start Apache in Console ¹Ù·Î°¡±â·Î ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- ¹Ù·Î°¡±â¸¦ ½ÇÇàÇϸé ÄܼÖâÀ» ¿­°í ±× ¾È¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÑ´Ù.
- ¾ÆÆÄÄ¡¸¦ service·Î ¼³Ä¡ÇÏÁö ¾Ê¾Ò´Ù¸é, ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â
- ÄܼÖâ¿¡¼­ Control-C¸¦ ´­·¯ ¾ÆÆÄÄ¡¸¦ Áß´ÜÇÒ¶§±îÁö âÀÌ ¶°ÀÖ´Ù.
- ÀÌ °æ¿ì ¼­¹ö´Â ¸îÃʾȿ¡ Á¾·áÇÑ´Ù. ±×·¯³ª, ¾ÆÆÄÄ¡¸¦ service·Î
- ¼³Ä¡ÇÏ¿´´Ù¸é ¹Ù·Î°¡±â´Â service¸¦ ½ÃÀÛÇÑ´Ù. ¾ÆÆÄÄ¡ service°¡
- ÀÌ¹Ì ½ÇÇàÁßÀ̶ó¸é ¹Ù·Î°¡±â´Â ¾Æ¹«Àϵµ ÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>´Ù¸¥ ÄܼÖâÀ» ¿­°í ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¿© ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡¸¦
- Á¾·áÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- apache -k shutdown
- </code></p></div>
-
- <p>ÀÌ ¹æ¹ýÀº ¾ÆÆÄÄ¡°¡ ÇöÀç ÀÛ¾÷À» ¸¶Ä¡°í Á¡ÀÝ°Ô Á¾·áÇÒ ¼ö
- Àֱ⶧¹®¿¡ Control-C º¸´Ù ³´´Ù.</p>
-
- <p>¶Ç, ¾ÆÆÄÄ¡¸¦ Àç½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ¼³Á¤ÆÄÀÏÀ» ´Ù½Ã
- Àд´Ù. ÁøÇàÁßÀÎ ÀÛ¾÷À» Áß°£¿¡ ²÷Áö¾Ê°í ¿Ï·áÇÑ´Ù. ¾ÆÆÄÄ¡¸¦
- Àç½ÃÀÛÇÏ·Á¸é:</p>
-
- <div class="example"><p><code>
- apache -k restart
- </code></p></div>
-
- <div class="note">À¯´Ð½º¿ë ¾ÆÆÄÄ¡¿¡ Àͼ÷ÇÑ »ç¶÷À» À§ÇØ: ÀÌ ¸í·É¾î´Â
- <code>kill -TERM <em>pid</em></code>³ª <code>kill -USR1
- <em>pid</em></code>ÀÇ WindowsÆÇÀÌ´Ù. ¸í·ÉÇà ¿É¼Ç
- <code>-k</code>´Â À¯´Ð½º <code>kill</code> ¸í·É¾î À̸§À»
- º»µû Áö¾ú´Ù.</div>
-
- <p>¾ÆÆÄÄ¡ ÄܼÖâÀÌ Áï½Ã ȤÀº ½ÃÀÛÈÄ °©Àڱ⠴ÝÄ¡¸é ½ÃÀÛ ¸Þ´º
- --&gt; ÇÁ·Î±×·¥ÀÇ ¸í·É ÇÁ·ÒÇÁÆ®¸¦ ½ÇÇàÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ
- Æú´õ·Î °¡¼­ <code>apache</code> ¸í·É¾î¸¦ ½ÇÇàÇغ¸°í ¹ß»ýÇÑ
- ¿À·ù¹®À» »ìÆ캻´Ù. ±×¸®°í logs Æú´õ·Î °¡¼­, ¼³Á¤ÆÄÀÏÀÌ
- À߸øµÇ¾ú´ÂÁö <code>error.log</code> ÆÄÀÏÀ» »ìÆ캻´Ù. ¾ÆÆÄÄ¡¸¦
- ¼³Ä¡ÇÒ¶§ ±âº»°ªÀ» »ç¿ëÇß´Ù¸é ´ÙÀ½°ú °°´Ù:</p>
-
- <div class="example"><p><code>
- c: <br />
- cd "\Program Files\Apache Group\Apache2\bin" <br />
- apache
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡°¡ Á¤ÁöÇÒ ¶§±îÁö ±â´Ù¸®°Å³ª Control-C¸¦ ´©¸¥´Ù.
- ±×¸®°í ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- cd ..\logs <br />
- more &lt; error.log
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡¸¦ ´Ù·ê¶§ ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô ¼³Á¤ÆÄÀÏÀ» ã´ÂÁö ¾Æ´Â
- °ÍÀÌ Áß¿äÇÏ´Ù. µÎ°¡Áö ¹æ¹ýÀ¸·Î ¸í·ÉÇà¿¡¼­ ¼³Á¤ÆÄÀÏÀ» ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li><p><code>-f</code>´Â ¼³Á¤ÆÄÀÏÀÇ Àý´ë°æ·Î ȤÀº »ó´ë°æ·Î¸¦
- ÁöÁ¤ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- apache -f "c:\my server files\anotherconfig.conf"
- </code></p></div>
-
- <p>ȤÀº</p>
-
- <div class="example"><p><code>
- apache -f files\anotherconfig.conf
- </code></p></div></li>
-
- <li><p><code>-n</code>Àº ¾ÆÆÄÄ¡ service¸¦ ¼±ÅÃÇÏ°í, ÇØ´ç
- serviceÀÇ ¼³Á¤ÆÄÀÏÀ» »ç¿ëÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- apache -n "MyServiceName"
- </code></p></div>
- </li>
- </ul>
-
- <p>µÎ °æ¿ì ¸ðµÎ ¼³Á¤ÆÄÀÏÀÌ ÀûÀýÇÑ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p><code>-f</code>³ª <code>-n</code>À¸·Î ¼³Á¤ÆÄÀÏÀ» ÁöÁ¤ÇÏÁö
- ¾ÊÀ¸¸é, ¾ÆÆÄÄ¡´Â <code>conf\httpd.conf</code>¿Í °°ÀÌ ¼­¹ö¿¡
- ÄÄÆÄÀÏµÈ ÆÄÀϸíÀ» »ç¿ëÇÑ´Ù. ÀÌ ±âº» °æ·Î´Â ¼³Ä¡ µð·ºÅ丮¿¡
- »ó´ëÀûÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ <code>-V</code> ¿É¼ÇÀ¸·Î ¾ÆÆÄÄ¡¸¦
- ½ÇÇàÇϸé <code>SERVER_CONFIG_FILE</code>À̶õ Ç׸ñ¿¡¼­ ¼­¹ö°¡
- »ç¿ëÇÒ ¼³Á¤ÆÄÀÏÀ» ¾Ë ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- apache -V
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡´Â ´ÙÀ½ ¼ø¼­´ë·Î <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¸¦ ã´Â´Ù:</p>
-
- <ol>
- <li><code>-C</code> ¸í·ÉÇà ¿É¼Ç¿¡ »ç¿ëÇÑ <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> Áö½Ã¾î.</li>
-
- <li><code>-d</code> ¸í·ÉÇà ¿É¼Ç.</li>
-
- <li>ÇöÀç ÀÛ¾÷ µð·ºÅ丮.</li>
-
- <li>¹ÙÀ̳ʸ® ¼³Ä¡¸¦ Çß´Ù¸é ¼³Ä¡ÇÒ¶§ ¸¸µç registry Ç׸ñ.</li>
-
- <li>¼­¹ö¿¡ ÄÄÆÄÀÏµÈ server root. ±âº»°ªÀº
- <code>/apache</code>ÀÌ°í, <code>apache -V</code>¸¦ ½ÇÇàÇϸé
- <code>HTTPD_ROOT</code>¶ó´Â Ç׸ñ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.</li>
- </ol>
-
- <p>¼³Ä¡ÇÒ¶§ À©µµ¿ìÁî ·¹Áö½ºÆ®¸®¿¡ ¹öÀü ƯÀ¯ÀÇ ·¹Áö½ºÆ®¸®
- Å°¸¦ ¸¸µç´Ù. Å°ÀÇ À§Ä¡´Â ¼³Ä¡ Á¾·ù¿¡ µû¶ó ´Ù¸£´Ù. install
- Apache for all users¸¦ ¼±ÅÃÇÏ¿´´Ù¸é
- <code>HKEY_LOCAL_MACHINE</code> ¾Æ·¡¿¡ ´ÙÀ½°ú °°Àº Å°¸¦
- ¸¸µç´Ù (¹°·Ð ¹öÀü¹øÈ£´Â ¾ÆÆÄÄ¡ ¹öÀü¸¶´Ù ´Ù¸£´Ù):
- </p>
-
- <div class="example"><p><code>
- HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43
- </code></p></div>
-
- <p>"¸ðµç »ç¿ëÀÚ"¸¦ ´ë»óÀ¸·Î ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ¿´´Ù¸é
- <code>HKEY_CURRENT_USER</code> ¾Æ·¡ Å°°¡ »ý±ä´Ù. ³»¿ëÀº
- ÇöÀç ·Î±×¿ÂÇÑ »ç¿ëÀÚ¿¡ µû¶ó ´Ù¸£´Ù:</p>
-
- <div class="example"><p><code>
- HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43
- </code></p></div>
-
- <p>Å° À̸§ÀÌ ¼­¹ö¿¡ ÄÄÆÄÀϵDZ⶧¹®¿¡ ÇöÀç ¹öÀüÀ» °Çµå¸®Áö¾Ê°í
- »õ·Î¿î ¹öÀüÀ» ¼³Ä¡ÇÏ¿© Å×½ºÆ®Çغ¼ ¼ö ÀÖ´Ù. ¹°·Ð »õ ¹öÀüÀ»
- ´Ù¸¥ ¹öÀü°ú °°Àº µð·ºÅ丮¿¡ ¼³Ä¡ÇÏÁö¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¹ÙÀ̳ʸ® ¼³Ä¡¸¦ ÇÏÁö ¾ÊÀº °æ¿ì ¾ÆÆÄÄ¡´Â ·¹Áö½ºÆ®¸® Å°°¡
- ¾ø´Ù°í ºÒÆòÇÒ ¼ö ÀÖ´Ù. ¼­¹ö°¡ ´Ù¸¥ ¹æ¹ýÀ¸·Î ¼³Á¤ÆÄÀÏÀ» ãÀ»
- ¼ö ÀÖ´Ù¸é ÀÌ °æ°í¸¦ ¹«½ÃÇصµ µÈ´Ù.</p>
-
- <p>Å°ÀÇ °ªÀº <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
- µð·ºÅ丮À̸ç, ÀÌ µð·ºÅ丮¿¡ <code>conf</code>¶ó´Â ÇÏÀ§µð·ºÅ丮°¡
- ÀÖ´Ù. ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé ÀÌ ÇÏÀ§µð·ºÅ丮¿¡¼­
- <code>httpd.conf</code> ÆÄÀÏÀ» Àд´Ù. ÀÌ ÆÄÀÏ¿¡ ³ª¿À´Â
- <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> Áö½Ã¾î°¡
- ·¹Áö½ºÆ®¸® Å°¿¡ ³ª¿Â µð·ºÅ丮¿Í ´Ù¸£´Ù¸é, ¾ÆÆÄÄ¡´Â ·¹Áö½ºÆ®¸®¿¡¼­
- ¾òÀº °ªÀ» ¹«½ÃÇÏ°í ¾ÕÀ¸·Î ¼³Á¤ÆÄÀÏ¿¡ ³ª¿Â µð·ºÅ丮¸¦ »ç¿ëÇÑ´Ù.
- ¾ÆÆÄÄ¡ µð·ºÅ丮³ª ¼³Á¤ÆÄÀÏÀ» ´Ù¸¥ Àå¼Ò·Î º¹»çÇÏ¸é ¹Ýµå½Ã
- <code>httpd.conf</code> ÆÄÀÏ¿¡ ÀÖ´Â <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> Áö½Ã¾î¸¦ ±× À§Ä¡·Î
- ¼öÁ¤Ç϶ó.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="test" id="test">Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾ú´ÂÁö °Ë»çÇϱâ</a></h2>
-
-
- <p>(ÄܼÖâÀ̳ª service¸¦ ÅëÇØ) ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé (¼³Á¤ÆÄÀÏÀÇ
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î¸¦
- ¼öÁ¤Çϰųª ¾ÆÆÄÄ¡¸¦ "ÇöÀç »ç¿ëÀÚ¸¸" ´ë»óÀ¸·Î ¼³Ä¡ÇÏÁö ¾Ê´Â
- °æ¿ì) 80¹ø Æ÷Æ®¸¦ ±â´Ù¸°´Ù. ºê¶ó¿ìÀú¸¦ ½ÃÀÛÇÏ°í URLÀ» ÀÔ·ÂÇÏ¿©
- ¼­¹öÀÇ ±âº» ÆäÀÌÁö¿¡ Á¢±ÙÇÏ´Ù:</p>
-
- <div class="example"><p><code>
- http://localhost/
- </code></p></div>
-
- <p>¾ÆÆÄÄ¡´Â ¾ÆÆÄÄ¡ ¼³¸í¼­ ¸µÅ©°¡ Àִ ȯ¿µÆäÀÌÁö¸¦ º¸¿©Áà¾ß
- ÇÑ´Ù. ¾Æ¹« Àϵµ ÀϾÁö ¾Ê°Å³ª ¿À·ù°¡ ³ª¿À¸é, <code>logs</code>
- ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â <code>error.log</code> ÆÄÀÏÀ» »ìÆìºÁ¶ó.
- È£½ºÆ®°¡ ³×Æ®¿÷¿¡ ¿¬°áµÇÀÖÁö ¾Ê°Å³ª DNS (Domain Name Service)
- ¼³Á¤¿¡ ¹®Á¦°¡ ÀÖ´Ù¸é ´ÙÀ½ URLÀ» »ç¿ëÇØ¾ß ÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- http://127.0.0.1/
- </code></p></div>
-
- <p>±âº» ¼³Ä¡°¡ µ¿ÀÛÇϸé <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀÏÀ» ÀûÀýÈ÷ ¼³Á¤ÇÑ´Ù. ¶Ç, Windows NT ¾ÆÆÄÄ¡ service
- ¼³Á¤À» ¼öÁ¤ÇÑ °æ¿ì ¸ÕÀú ¸í·ÉÇà¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ¿© ¿À·ù°¡
- ¹ß»ýÇÏÁö¾Ê´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡°¡ ´Ù¸¥ TCP/IP ÇÁ·Î±×·¥°ú °°Àº Æ÷Æ®¸¦ °øÀ¯ÇÒ ¼ö
- <strong>¾ø±â¶§¹®¿¡</strong> ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϱâ Àü¿¡ ´Ù¸¥
- ¼­ºñ½º¸¦ Áß´Ü, Á¦°Å, Àç¼³Á¤ÇØ¾ß ÇÒÁöµµ ¸ð¸¥´Ù. ´Ù¸¥ À¥¼­¹ö³ª
- ƯÁ¤ ¹æÈ­º® ¼­¹ö½º¿Í Ãæµ¹ÇÒ ¼ö ÀÖ´Ù.
- </p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/platform/windows.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/platform/windows.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/platform/windows.xml b/docs/manual/platform/windows.xml
deleted file mode 100644
index fae5886ae4..0000000000
--- a/docs/manual/platform/windows.xml
+++ /dev/null
@@ -1,721 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="windows.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Using Apache with Microsoft Windows</title>
-
- <summary>
-
- <p>This document explains how to install, configure and run
- Apache 2.0 under Microsoft Windows. If you find any bugs, or
- wish to contribute in other ways, please use our <a
- href="http://httpd.apache.org/bug_report.html">bug reporting
- page</a>.</p>
-
- <p>This document assumes that you are installing a binary
- distribution of Apache. If you want to compile Apache yourself
- (possibly to help with development or tracking down bugs),
- see <a href="win_compiling.html">Compiling Apache for Microsoft
- Windows</a>.</p>
-
- <p><strong>Because of the current versioning policies on Microsoft
- Windows operating system families, this document assumes the
- following:</strong></p>
- <ul>
- <li><strong>Windows NT:</strong> This means all versions of
- Windows that are based on the Windows NT kernel. Includes Windows
- NT, Windows 2000, Windows XP and Windows .Net Server 2003.</li>
- <li><strong>Windows 9x:</strong> This means older,
- consumer-oriented versions of Windows. Includes Windows 95 (also
- OSR2), Windows 98 and Windows ME.</li>
- </ul>
-
- </summary>
-
- <section id="req">
- <title>Operating System Requirements</title>
-
- <p>The primary Windows platform for running Apache 2.0 is Windows
- NT. The binary installer only works with the x86 family of
- processors, such as Intel and AMD processors. Running Apache on
- Windows 9x is not thoroughly tested, and it is never recommended on
- production systems.
- </p>
-
- <p>On all operating systems, TCP/IP networking must be installed
- and working. If running on Windows 95, the Winsock 2 upgrade must
- be installed. Winsock 2 for Windows 95 can be downloaded from <a
- href="http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp">here</a>.
- </p>
-
- <p>On Windows NT 4.0, installing Service Pack 6 is strongly
- recommended, as Service Pack 4 created known issues with TCP/IP
- and Winsock integrity that were resolved in later Service Packs.</p>
- </section>
-
- <section id="down">
- <title>Downloading Apache for Windows</title>
-
- <p>Information on the latest versions of Apache can be found on the
- web site of the Apache web server at
- <a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>.
- There you will find the current release, as well as more recent alpha
- or beta test versions, and a list of HTTP and FTP mirrors from which
- you can download the Apache web server. Please use a mirror near to
- you for a fast and reliable download.</p>
-
- <p>For Windows installations you should download the version of
- Apache for Windows with the <code>.msi</code> extension. This is a
- single Microsoft Installer file, which contains a ready-to-run
- version of Apache. There is a separate <code>.zip</code> file,
- which contains only the source code. You can compile Apache
- yourself with the Microsoft Visual C++ (Visual Studio) tools.</p>
- </section>
-
- <section id="inst">
- <title>Installing Apache for Windows</title>
-
- <p>You need Microsoft Installer 1.2 or above for the installation
- to work. On Windows 9x you can update your Microsoft Installer to
- version 2.0 <a
- href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32831">here</a>
- and on Windows NT 4.0 and 2000 the version 2.0 update can be found
- <a href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32832">here</a>.
- Windows XP does not need this update.</p>
-
- <p>Note that you cannot install two versions of Apache 2.0 on the
- same computer with the binary installer. You can, however, install
- a version of the 1.3 series <strong>and</strong> a version of the
- 2.0 series on the same computer without problems. If you need to
- have two different 2.0 versions on the same computer, you have to
- <a href="win_compiling.html">compile and install Apache from the
- source</a>.</p>
-
- <p>Run the Apache <code>.msi</code> file you downloaded above. The
- installation will ask you for these things:</p>
-
- <ol>
- <li><p><strong>Network Domain.</strong> Enter the DNS domain in which
- your server is or will be registered in. For example, if your
- server's full DNS name is <code>server.mydomain.net</code>, you would
- type <code>mydomain.net</code> here.</p></li>
-
- <li><p><strong>Server Name.</strong> Your server's full DNS name.
- From the example above, you would type <code>server.mydomain.net</code>
- here.</p></li>
-
- <li><p><strong>Administrator's Email Address.</strong> Enter the
- server administrator's or webmaster's email address here. This
- address will be displayed along with error messages to the client
- by default.</p></li>
-
- <li><p><strong>For whom to install Apache</strong> Select <code>for
- All Users, on Port 80, as a Service - Recommended</code> if you'd
- like your new Apache to listen at port 80 for incoming traffic.
- It will run as a service (that is, Apache will run even if no one
- is logged in on the server at the moment) Select <code>only for
- the Current User, on Port 8080, when started Manually</code> if
- you'd like to install Apache for your personal experimenting or
- if you already have another WWW server running on port 80.</p></li>
-
- <li><p><strong>The installation type.</strong> Select <code>Typical</code>
- for everything except the source code and libraries for module
- development. With <code>Custom</code> you can specify what to
- install. A full install will require about 13 megabytes of free
- disk space. This does <em>not</em> include the size of your web
- site(s).</p></li>
-
- <li><p><strong>Where to install.</strong> The default path is
- <code>C:\Program Files\Apache Group</code> under which a directory
- called <code>Apache2</code> will be created by default.</p></li>
- </ol>
-
- <p>During the installation, Apache will configure the files in the
- <code>conf</code> subdirectory to reflect the chosen installation
- directory. However, if any of the configuration files in this
- directory already exist, they will not be overwritten. Instead, the
- new copy of the corresponding file will be left with the extension
- <code>.default</code>. So, for example, if <code>conf\httpd.conf</code>
- already exists, it will be renamed as <code>conf\httpd.conf.default</code>.
- After the installation you should manually check to see what new
- settings are in the <code>.default</code> file, and if necessary,
- update your existing configuration file.</p>
-
- <p>Also, if you already have a file called <code>htdocs\index.html</code>,
- it will not be overwritten (and no <code>index.html.default</code>
- will be installed either). This means it should be safe to install
- Apache over an existing installation, although you would have to
- stop the existing running server before doing the installation, and
- then start the new one after the installation is finished.</p>
-
- <p>After installing Apache, you must edit the configuration files
- in the <code>conf</code> subdirectory as required. These files
- will be configured during the installation so that Apache is ready
- to be run from the directory it was installed into, with the
- documents server from the subdirectory <code>htdocs</code>. There
- are lots of other options which you should set before you really
- start using Apache. However, to get started quickly, the files
- should work as installed.</p>
- </section>
-
- <section id="cust">
- <title>Customizing Apache for Windows</title>
-
- <p>Apache is configured by the files in the <code>conf</code>
- subdirectory. These are the same files used to configure the Unix
- version, but there are a few different directives for Apache on
- Windows. See the <a href="../mod/directives.html">directive index</a>
- for all the available directives.</p>
-
- <p>The main differences in Apache for Windows are:</p>
- <ul>
- <li><p>Because Apache for Windows is multithreaded, it does not
- use a separate process for each request, as Apache does on Unix.
- Instead there are usually only two Apache processes running: a
- parent process, and a child which handles the requests. Within
- the child process each request is handled by a separate thread.
- </p>
-
- <p>The process management directives are also different:</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>:
- Like the Unix directive, this controls how many requests a single
- child process will serve before exiting. However, unlike on Unix,
- a single process serves all the requests at once, not just one.
- If this is set, it is recommended that a very high number is
- used. The recommended default, <code>MaxRequestsPerChild 0</code>,
- causes the child process to never exit.</p>
-
- <note type="warning"><strong>Warning: The server configuration
- file is reread when a new child process is started. If you have
- modified <code>httpd.conf</code>, the new child may not start or
- you may receive unexpected results.</strong></note>
-
- <p><directive module="mpm_common">ThreadsPerChild</directive>:
- This directive is new. It tells the server how many threads it
- should use. This is the maximum number of connections the server
- can handle at once, so be sure to set this number high enough for
- your site if you get a lot of hits. The recommended default is
- <code>ThreadsPerChild 50</code>.</p></li>
-
- <li><p>The directives that accept filenames as arguments must use
- Windows filenames instead of Unix ones. However, because Apache
- uses Unix-style names internally, you must use forward slashes,
- not backslashes. Drive letters can be used; if omitted, the drive
- with the Apache executable will be assumed.</p></li>
-
- <li><p>Apache for Windows contains the ability to load modules at
- runtime, without recompiling the server. If Apache is compiled
- normally, it will install a number of optional modules in the
- <code>\Apache2\modules</code> directory. To activate these or
- other modules, the new <directive module="mod_so">LoadModule</directive>
- directive must be used. For example, to activate the status
- module, use the following (in addition to the status-activating
- directives in <code>access.conf</code>):</p>
-
- <example>
- LoadModule status_module modules/mod_status.so
- </example>
-
- <p>Information on <a href="../mod/mod_so.html#creating">creating
- loadable modules</a> is also available.</p></li>
-
- <li><p>Apache can also load ISAPI (Internet Server Application
- Programming Interface) extensions (i.e. internet server
- applications), such as those used by Microsoft IIS and other
- Windows servers. <a href="../mod/mod_isapi.html">More information
- is available</a>. Note that Apache <strong>cannot</strong> load
- ISAPI Filters.</p></li>
-
- <li><p>When running CGI scripts, the method Apache uses to find
- the interpreter for the script is configurable using the
- <directive module="core">ScriptInterpreterSource</directive>
- directive.</p></li>
-
- <li><p>Since it is often difficult to manage files with names
- like <code>.htaccess</code> in Windows, you may find it useful to
- change the name of this per-directory configuration file using
- the <directive module="core">AccessFilename</directive>
- directive.</p></li>
-
- <li><p>Any errors during Apache startup are logged into the
- Windows event log when running on Windows NT. This mechanism
- acts as a backup for those situations where Apache cannot even
- access the normally used <code>error.log</code> file. You can
- view the Windows event log by using the Event Viewer application
- on Windows NT 4.0, and the Event Viewer MMC snap-in on newer
- versions of Windows.</p>
-
- <note><strong>Note that there is no startup error logging on
- Windows 9x because no Windows event log exists on those operating
- systems.</strong></note></li>
- </ul>
-
- </section>
-
- <section id="winsvc">
- <title>Running Apache as a Service</title>
-
- <p>Apache can be run as a service on Windows NT. There is some
- highly experimental support for similar behavior on Windows 9x.</p>
-
- <p>You can install Apache as a service automatically during the
- installation. If you chose to install for all users, the
- installation will create an Apache service for you. If you specify
- to install for yourself only, you can manually register Apache as a
- service after the installation. You have to be a member of the
- Administrators group for the service installation to succeed.</p>
-
- <p>Apache comes with a utility called the Apache Service Monitor.
- With it you can see and manage the state of all installed Apache
- services on any machine on your network. To be able to manage an
- Apache service with the monitor, you have to first install the
- service (either automatically via the installation or manually).
- </p>
-
- <p>You can install Apache as a Windows NT service as follows from
- the command prompt at the Apache <code>bin</code> subdirectory:</p>
-
- <example>
- apache -k install
- </example>
-
- <p>If you need to specify the name of the service you want to
- install, use the following command. You have to do this if you
- have several different service installations of Apache on your
- computer.</p>
-
- <example>
- apache -k install -n "MyServiceName"
- </example>
-
- <p>If you need to have specifically named configuration files for
- different services, you must use this:</p>
-
- <example>
- apache -k install -n "MyServiceName" -f "c:\files\my.conf"
- </example>
-
- <p>If you use the first command without any special parameters except
- <code>-k install</code>, the service will be called <code>Apache2</code>
- and the configuration will be assumed to be <code>conf\httpd.conf</code>.
- </p>
-
- <p>Removing an Apache service is easy. Just use:</p>
-
- <example>
- apache -k uninstall
- </example>
-
- <p>The specific Apache service to be uninstalled can be specified by using:</p>
-
- <example>
- apache -k uninstall -n "MyServiceName"
- </example>
-
- <p>Normal starting, restarting and shutting down of an Apache
- service is usually done via the Apache Service Monitor, by using
- commands like <code>NET START Apache2</code> and <code>NET STOP
- Apache2</code> or via normal Windows service management. Before
- starting Apache as a service by any means, you should test the
- service's configuration file by using:</p>
-
- <example>
- apache -n "MyServiceName" -t
- </example>
-
- <p>You can control an Apache service by its command line switches,
- too. To start an installed Apache service you'll use this:</p>
-
- <example>
- apache -k start
- </example>
-
- <p>To stop an Apache service via the command line switches, use
- this:</p>
-
- <example>
- apache -k stop
- </example>
-
- <p>or</p>
-
- <example>
- apache -k shutdown
- </example>
-
- <p>You can also restart a running service and force it to reread
- its configuration file by using:</p>
-
- <example>
- apache -k restart
- </example>
-
- <p>By default, all Apache services are registered to run as the
- system user (the <code>LocalSystem</code> account). The
- <code>LocalSystem</code> account has no privileges to your network
- via any Windows-secured mechanism, including the file system, named
- pipes, DCOM, or secure RPC. It has, however, wide privileges locally.
- </p>
-
- <note type="warning"><strong>Never grant any network privileges to
- the <code>LocalSystem</code> account! If you need Apache to be able
- to access network resources, create a separate account for Apache as
- noted below.</strong></note>
-
- <p>You may want to create a separate account for running Apache
- service(s). Especially, if you have to access network resources
- via Apache, this is strongly recommended.</p>
-
- <ol>
- <li>Create a normal domain user account, and be sure to
- memorize its password.</li>
-
- <li>Grant the newly-created user a privilege of <code>Log on
- as a service</code> and <code>Act as part of the operating
- system</code>. On Windows NT 4.0 these privileges are granted via
- User Manager for Domains, but on Windows 2000 and XP you probably
- want to use Group Policy for propagating these settings. You can
- also manually set these via the Local Security Policy MMC snap-in.
- </li>
-
- <li>Confirm that the created account is a member of the Users
- group.</li>
-
- <li>Grant the account read and execute (RX) rights to all document
- and script folders (<code>htdocs</code> and <code>cgi-bin</code>
- for example).</li>
-
- <li>Grant the account change (RWXD) rights to the
- Apache <code>logs</code> directory.</li>
-
- <li>Grant the account read and execute (RX) rights to the
- <code>Apache.exe</code> binary executable.</li>
- </ol>
-
- <note>It is usually a good practice to grant the user the Apache
- service runs as read and execute (RX) access to the whole Apache2
- directory, except the <code>logs</code> subdirectory, where the
- user has to have at least change (RWXD) rights.</note>
-
- <p>If you allow the account to log in as a user and as a service,
- then you can log on with that account and test that the account has the
- privileges to execute the scripts, read the web pages, and that
- you can start Apache in a console window. If this works, and you
- have followed the steps above, Apache should execute as a service
- with no problems.</p>
-
- <note><strong>Error code 2186</strong> is a good indication that
- you need to review the "Log On As" configuration for the service,
- since Apache cannot access a required network resource. Also, pay
- close attention to the privileges of the user Apache is
- configured to run as.</note>
-
- <p>When starting Apache as a service you may encounter an error
- message from the Windows Service Control Manager. For example,
- if you try to start Apache by using the Services applet in the
- Windows Control Panel, you may get the following message:</p>
-
- <example>
- Could not start the Apache2 service on \\COMPUTER <br />
- Error 1067; The process terminated unexpectedly.
- </example>
-
- <p>You will get this generic error if there is any problem with
- starting the Apache service. In order to see what is really causing
- the problem you should follow the instructions for Running Apache
- for Windows from the Command Prompt.</p>
-
- <p>There is some support for Apache on Windows 9x to behave in a
- similar manner as a service on Windows NT. It is <strong>highly
- experimental</strong>. It is not of production-class reliability,
- and its future is not guaranteed. It can be mostly regarded as
- a risky thing to play with - proceed with caution!</p>
-
- <p>There are some differences between the two kinds of services
- you should be aware of:</p>
-
- <ul>
- <li><p>Apache will attempt to start and if successful it will run
- in the background. If you run the command</p>
-
- <example>
- apache -n "MyServiceName" -k start
- </example>
-
- <p>via a shortcut on your desktop, for example, then if the
- service starts successfully, a console window will flash up but
- it immediately disappears. If Apache detects any errors on startup
- such as incorrect entries in the httpd.conf configuration file,
- the console window will remain visible. This will display an error
- message which will be useful in tracking down the cause of the
- problem.</p></li>
-
- <li><p>Windows 9x does not support <code>NET START</code> or
- <code>NET STOP</code> commands. You must control the Apache
- service on the command prompt via the <code>-k</code> switches.
- </p></li>
-
- <li><p>Apache and Windows 9x offer no support for running Apache
- as a specific user with network privileges. In fact, Windows 9x
- offers no security on the local machine, either. This is the
- simple reason because of which the Apache Software Foundation
- never endorses use of a Windows 9x -based system as a public
- Apache server. The primitive support for Windows 9x exists only
- to assist the user in developing web content and learning the
- Apache server, and perhaps as an intranet server on a secured,
- private network.</p></li>
-
- </ul>
-
- <p>Once you have confirmed that Apache runs correctly as a
- console application you can install, control and uninstall the
- pseudo-service with the same commands as on Windows NT. You can
- also use the Apache Service Monitor to manage Windows 9x
- pseudo-services.</p>
-
- </section>
-
- <section id="wincons">
- <title>Running Apache as a Console Application</title>
-
- <p>Running Apache as a service is usually the recommended way to
- use it, but it is sometimes easier to work from the command line
- (on Windows 9x running Apache from the command line is the
- recommended way due to the lack of reliable service support.)</p>
-
- <p>To run Apache from the command line as a console application,
- use the following command:</p>
-
- <example>
- apache
- </example>
-
- <p>Apache will execute, and will remain running until it is stopped
- by pressing Control-C.</p>
-
- <p>You can also run Apache via the shortcut Start Apache in Console
- placed to <code>Start Menu --&gt; Programs --&gt; Apache HTTP Server
- 2.0.xx --&gt; Control Apache Server</code> during the installation.
- This will open a console window and start Apache inside it. If you
- don't have Apache installed as a service, the window will remain
- visible until you stop Apache by pressing Control-C in the console
- window where Apache is running in. The server will exit in a few
- seconds. However, if you do have Apache installed as a service, the
- shortcut starts the service. If the Apache service is running
- already, the shortcut doesn't do anything.</p>
-
- <p>You can tell a running Apache to stop by opening another console
- window and entering:</p>
-
- <example>
- apache -k shutdown
- </example>
-
- <p>This should be preferred over pressing Control-C because this
- lets Apache end any current operations and clean up gracefully.</p>
-
- <p>You can also tell Apache to restart. This forces it to reread
- the configuration file. Any operations in progress are allowed to
- complete without interruption. To restart Apache, use:</p>
-
- <example>
- apache -k restart
- </example>
-
- <note>Note for people familiar with the Unix version of Apache:
- these commands provide a Windows equivalent to <code>kill -TERM
- <em>pid</em></code> and <code>kill -USR1 <em>pid</em></code>. The
- command line option used, <code>-k</code>, was chosen as a reminder
- of the <code>kill</code> command used on Unix.</note>
-
- <p>If the Apache console window closes immediately or unexpectedly
- after startup, open the Command Prompt from the Start Menu --&gt;
- Programs. Change to the folder to which you installed Apache, type
- the command <code>apache</code>, and read the error message. Then
- change to the logs folder, and review the <code>error.log</code>
- file for configuration mistakes. If you accepted the defaults when
- you installed Apache, the commands would be:</p>
-
- <example>
- c: <br />
- cd "\Program Files\Apache Group\Apache2\bin" <br />
- apache
- </example>
-
- <p>Then wait for Apache to stop, or press Control-C. Then enter the
- following:</p>
-
- <example>
- cd ..\logs <br />
- more &lt; error.log
- </example>
-
- <p>When working with Apache it is important to know how it will
- find the configuration file. You can specify a configuration file
- on the command line in two ways:</p>
-
- <ul>
- <li><p><code>-f</code> specifies an absolute or relative path to
- a particular configuration file:</p>
-
- <example>
- apache -f "c:\my server files\anotherconfig.conf"
- </example>
-
- <p>or</p>
-
- <example>
- apache -f files\anotherconfig.conf
- </example></li>
-
- <li><p><code>-n</code> specifies the installed Apache service
- whose configuration file is to be used:</p>
-
- <example>
- apache -n "MyServiceName"
- </example>
- </li>
- </ul>
-
- <p>In both of these cases, the proper
- <directive module="core">ServerRoot</directive> should be set in
- the configuration file.</p>
-
- <p>If you don't specify a configuration file with <code>-f</code>
- or <code>-n</code>, Apache will use the file name compiled into the
- server, such as <code>conf\httpd.conf</code>. This built-in path
- is relative to the installation directory. You can verify the compiled
- file name from a value labelled as <code>SERVER_CONFIG_FILE</code> when
- invoking Apache with the <code>-V</code> switch, like this:</p>
-
- <example>
- apache -V
- </example>
-
- <p>Apache will then try to determine its <directive module="core">
- ServerRoot</directive> by trying the following, in this order:</p>
-
- <ol>
- <li>A <directive module="core">ServerRoot</directive> directive
- via the <code>-C</code> command line switch.</li>
-
- <li>The <code>-d</code> switch on the command line.</li>
-
- <li>Current working directory.</li>
-
- <li>A registry entry which was created if you did a binary
- installation.</li>
-
- <li>The server root compiled into the server. This is <code>
- /apache</code> by default, you can verify it by using <code>
- apache -V</code> and looking for a value labelled as
- <code>HTTPD_ROOT</code>.</li>
- </ol>
-
- <p>During the installation, a version-specific registry key is
- created in the Windows registry. The location of this key depends
- on the type of the installation. If you chose to install Apache
- for all users, the key is located under the
- <code>HKEY_LOCAL_MACHINE</code> hive, like this (the version
- numbers will of course vary between different versions of Apache:
- </p>
-
- <example>
- HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43
- </example>
-
- <p>Correspondingly, if you chose to install Apache for the current
- user only, the key is located under the <code>HKEY_CURRENT_USER</code>
- hive, the contents of which are dependent of the user currently
- logged on:</p>
-
- <example>
- HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43
- </example>
-
- <p>This key is compiled into the server and can enable you to test
- new versions without affecting the current version. Of course, you
- must take care not to install the new version in the same
- directory as another version.</p>
-
- <p>If you did not do a binary install, Apache will in some
- scenarios complain about the missing registry key. This warning can
- be ignored if the server was otherwise able to find its
- configuration file.</p>
-
- <p>The value of this key is the
- <directive module="core">ServerRoot</directive> directory which
- contains the <code>conf</code> subdirectory. When Apache starts it
- reads the <code>httpd.conf</code> file from that directory. If
- this file contains a <directive module="core">ServerRoot</directive>
- directive which contains a different directory from the one
- obtained from the registry key above, Apache will forget the
- registry key and use the directory from the configuration file. If
- you copy the Apache directory or configuration files to a new
- location it is vital that you update the
- <directive module="core">ServerRoot</directive> directive in the
- <code>httpd.conf</code> file to reflect the new location.</p>
-
- </section>
-
- <section id="test">
- <title>Testing the Installation</title>
-
- <p>After starting Apache (either in a console window or as a
- service) it will be listening on port 80 (unless you changed the
- <directive module="mpm_common">Listen</directive> directive in the
- configuration files or installed Apache only for the current user).
- To connect to the server and access the default page, launch a
- browser and enter this URL:</p>
-
- <example>
- http://localhost/
- </example>
-
- <p>Apache should respond with a welcome page and a link to the
- Apache manual. If nothing happens or you get an error, look in the
- <code>error.log</code> file in the <code>logs</code> subdirectory.
- If your host is not connected to the net, or if you have serious
- problems with your DNS (Domain Name Service) configuration, you
- may have to use this URL:</p>
-
- <example>
- http://127.0.0.1/
- </example>
-
- <p>Once your basic installation is working, you should configure it
- properly by editing the files in the <code>conf</code> subdirectory.
- Again, if you change the configuration of the Windows NT service
- for Apache, first attempt to start it from the command line to
- make sure that the service starts with no errors.</p>
-
- <p>Because Apache <strong>cannot</strong> share the same port with
- another TCP/IP application, you may need to stop, uninstall or reconfigure
- certain other services before running Apache. These conflicting
- services include other WWW servers and some firewall implementations.
- </p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/platform/windows.xml.ko b/docs/manual/platform/windows.xml.ko
deleted file mode 100644
index f06f791bd6..0000000000
--- a/docs/manual/platform/windows.xml.ko
+++ /dev/null
@@ -1,688 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="windows.xml.meta">
- <parentdocument href="./">Platform Specific Notes</parentdocument>
-
- <title>Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ »ç¿ë¹ý</title>
-
- <summary>
-
- <p>ÀÌ ¹®¼­´Â Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡ 2.0À» ¼³Ä¡, ¼³Á¤,
- ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. À߸øµÈ ºÎºÐÀÌ Àְųª ´Ù¸¥ ¹æ¹ýÀ¸·Î
- µµ¿òÀ» ÁÖ·Á¸é, <a
- href="http://httpd.apache.org/bug_report.html">¹ö±× º¸°í
- ÆäÀÌÁö</a>¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ ¹ÙÀ̳ʸ® ¹èÆ÷º»À» ¼³Ä¡ÇÑ´Ù°í °¡Á¤ÇÑ´Ù.
- (¾Æ¸¶µµ °³¹ß ȤÀº ¹ö±×¸¦ ã±âÀ§ÇØ) Á÷Á¢ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÏ·Á¸é
- <a href="win_compiling.html">Microsoft Windows¿ë ¾ÆÆÄÄ¡
- ÄÄÆÄÀÏ</a>À» Âü°íÇ϶ó.</p>
-
- <p><strong>ÇöÀç Microsoft Windows ¿î¿µÃ¼Á¦±ºÀÇ ¹öÀü Á¤Ã¥»ó
- ÀÌ ¹®¼­´Â ´ÙÀ½°ú °°ÀÌ ±¸ºÐÇÑ´Ù:</strong></p>
- <ul>
- <li><strong>Windows NT:</strong> Windows NT Ä¿³ÎÀ» ±â¹ÝÀ¸·Î
- ÇÏ´Â ¸ðµç Windows ¹öÀüÀ» ÀǹÌÇÑ´Ù. Windows NT, Windows
- 2000, Windows XP, Windows .Net Server 2003À» ÁöĪÇÑ´Ù.</li>
- <li><strong>Windows 9x:</strong> ¼ÒºñÀÚ Áß½ÉÀÇ ¿À·¡µÈ
- Windows ¹öÀüÀ» ¶æÇÑ´Ù. Windows 95 (OSR2 Æ÷ÇÔ), Windows
- 98, Windows ME¸¦ ÁöĪÇÑ´Ù.</li>
- </ul>
-
- </summary>
-
- <section id="req">
- <title>¿î¿µÃ¼Á¦ ¿ä±¸Á¶°Ç</title>
-
- <p>¾ÆÆÄÄ¡ 2.0À» ½ÇÇàÇϱâÀ§ÇÑ ±âº» Windows Ç÷¡ÆûÀº Windows
- NTÀÌ´Ù. ¹ÙÀ̳ʸ® ¼³Ä¡ÇÁ·Î±×·¥Àº Intel°ú AMD¿Í °°Àº x86 °³¿­
- ÇÁ·Î¼¼¼­¿¡¼­¸¸ µ¿ÀÛÇÑ´Ù. ¾ÆÆÄÄ¡´Â Windows 9x¿¡¼­ ÃæºÐÈ÷
- °Ë»çÇÏÁö ¾Ê¾Ò±â¶§¹®¿¡ Àý´ë·Î ½ÇÁ¦ ¼­ºñ½º¿¡ »ç¿ëÇÏÁö ¾Ê±æ
- ¹Ù¶õ´Ù.
- </p>
-
- <p>¿î¿µÃ¼Á¦¿¡ ¼³Ä¡ÇÑ TCP/IP ³×Æ®¿öÅ©°¡ µ¿ÀÛÇØ¾ß ÇÑ´Ù. Windows
- 95¿¡¼­ ½ÇÇàÇÑ´Ù¸é, Winsock 2 ¾÷±×·¹À̵带 ¼³Ä¡ÇØ¾ß ÇÑ´Ù.
- Windows 95¿ë Winsock 2´Â <a
- href="http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp">¿©±â</a>¿¡¼­
- ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù.
- </p>
-
- <p>Windows NT 4.0À» »ç¿ëÇÑ´Ù¸é ¼­ºñ½ºÆÑ 4ÀÇ TCP/IP ¹®Á¦¿Í
- Winsock ¹®Á¦°¡ ´ÙÀ½ ¼­ºñ½ºÆÑ¿¡¼­ ÇØ°áµÇ¾ú±â¶§¹®¿¡, ¼­ºñ½ºÆÑ
- 6À» ¼³Ä¡Çϱæ Àû±Ø ±ÇÇÑ´Ù.</p>
- </section>
-
- <section id="down">
- <title>Windows¿ë ¾ÆÆÄÄ¡ ´Ù¿î·Îµå</title>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö <a
- href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>¿¡¼­
- ¾ÆÆÄÄ¡ ÃֽŠ¹öÀü¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ¿©±â¿¡´Â ÃÖ½Å
- ¹ßÇ¥ÆÇ°ú ¾ËÆÄ È¤Àº º£Å¸ Å×½ºÆ®¹öÀü°ú, ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ´Ù¿î·ÎµåÇÒ
- ¼ö ÀÖ´Â HTTP ¹Ì·¯¿Í FTP ¹Ì·¯ ¸ñ·ÏÀÌ ÀÖ´Ù. ºü¸£°í ¾ÈÁ¤ÇÏ°Ô
- ´Ù¿î¹ÞÀ¸·Á¸é °¡±î¿î ¹Ì·¯¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.</p>
-
- <p>Windows¿¡ ¼³Ä¡ÇÏ·Á¸é È®ÀåÀÚ°¡ <code>.msi</code>ÀÎ Windows¿ë
- ¾ÆÆÄÄ¡ ¹öÀüÀ» ´Ù¿î¹Þ¾Æ¾ß ÇÑ´Ù. ÀÌ ÆÄÀÏÀº ¸·¹Ù·Î ½ÇÇàÇÒ ¼ö
- ÀÖ´Â ¾ÆÆÄÄ¡¸¦ ÀúÀåÇÑ Microsoft ¼³Ä¡ÆÄÀÏÀÌ´Ù. µû·Î ¼Ò½ºÄڵ常
- ¹­¾îµÐ <code>.zip</code> ÆÄÀÏÀÌ ÀÖ´Ù. Microsoft Visual C++
- (Visual Studio)À» »ç¿ëÇÏ¿© Á÷Á¢ ¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ ¼öµµ ÀÖ´Ù.</p>
- </section>
-
- <section id="inst">
- <title>Windows¿ë ¾ÆÆÄÄ¡ ¼³Ä¡Çϱâ</title>
-
- <p>¼³Ä¡ÇÏ·Á¸é Microsoft Installer 1.2 ÀÌ»ó ¹öÀüÀÌ ÇÊ¿äÇÏ´Ù.
- Windows 9x¸¦ »ç¿ëÇÑ´Ù¸é <a
- href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32831">¿©±â</a>¿¡¼­
- Microsoft Installer¸¦ 2.0 ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇÒ ¼ö ÀÖ°í,
- Windows NT 4.0°ú 2000À» »ç¿ëÇÑ´Ù¸é <a
- href="http://www.microsoft.com/downloads/release.asp?ReleaseID=32832">¿©±â</a>¿¡¼­
- 2.0 ¹öÀü ¾÷µ¥ÀÌÆ®¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. Windows XP´Â ¾÷µ¥ÀÌÆ®ÇÒ
- ÇÊ¿ä°¡ ¾ø´Ù.</p>
-
- <p>¹ÙÀ̳ʸ® ¼³Ä¡ÆÄÀϷδ °°Àº ÄÄÇ»ÅÍ¿¡ ¼­·Î ´Ù¸¥ ¾ÆÆÄÄ¡
- 2.0 ¹öÀüÀ» ¼³Ä¡ÇÒ ¼ö ¾øÀ½À» ÁÖÀÇÇ϶ó. ±×·¯³ª 1.3
- ¹öÀü<strong>°ú</strong> 2.0 ¹öÀüÀº °°Àº ÄÄÇ»ÅÍ¿¡ ¾Æ¹« ¹®Á¦¾øÀÌ
- ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. °°Àº ÄÄÇ»ÅÍ¿¡ µÎ°¡Áö ´Ù¸¥ 2.0 ¹öÀüÀ» ¼³Ä¡ÇÏ·Á¸é
- <a href="win_compiling.html">¼Ò½º¸¦ ÄÄÆÄÀÏÇÏ¿© ¾ÆÆÄÄ¡¸¦
- ¼³Ä¡</a>ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>À§¿¡¼­ ´Ù¿î¹ÞÀº ¾ÆÆÄÄ¡ <code>.msi</code> ÆÄÀÏÀ» ½ÇÇàÇÑ´Ù.
- ¼³Ä¡ÇÒ¶§ ´ÙÀ½°ú °°Àº °ÍÀ» ¹°¾îº»´Ù:</p>
-
- <ol>
- <li><p><strong>³×Æ®¿öÅ© µµ¸ÞÀÎ (Network Domain).</strong>
- µî·ÏµÈ ¼­¹öÀÇ DNS µµ¸ÞÀÎÀ» ÀÔ·ÂÇÑ´Ù. ¿¹¸¦ µé¾î, ¼­¹öÀÇ
- Àüü DNS À̸§ÀÌ <code>server.mydomain.net</code>À̶ó¸é
- ¿©±â¿¡ <code>mydomain.net</code>À» ÀÔ·ÂÇÑ´Ù.</p></li>
-
- <li><p><strong>¼­¹ö¸í (Server Name).</strong> ¼­¹öÀÇ Àüü
- DNS À̸§. À§ÀÇ °æ¿ì ¿©±â¿¡ <code>server.mydomain.net</code>À»
- ÀÔ·ÂÇÑ´Ù.</p></li>
-
- <li><p><strong>°ü¸®ÀÚ ÀüÀÚ¿ìÆí ÁÖ¼Ò (Administrator's Email
- Address).</strong> ¿©±â¿¡ ¼­¹ö °ü¸®ÀÚ³ª À¥¸¶½ºÅÍÀÇ ÀüÀÚ¿ìÆí
- ÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ´Ù. ±âº»ÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»´Â ¿À·ù¹®¿¡
- ÀÌ ÁÖ¼Ò¸¦ ±â·ÏÇÑ´Ù.</p></li>
-
- <li><p><strong>»ç¿ëÀÚ ´ë»ó (For whom to install
- Apache)</strong> »õ·Î ¼³Ä¡ÇÏ´Â ¾ÆÆÄÄ¡°¡ 80¹ø Æ÷Æ®¿¡¼­
- ¿äûÀ» ±â´Ù¸®°Ô ÇÏ·Á¸é <code>for All Users, on Port 80,
- as a Service - Recommended</code> (¸ðµç »ç¿ëÀÚ, 80¹ø Æ÷Æ®,
- service·Î - Ãßõ)¸¦ ¼±ÅÃÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇÑ´Ù
- (Áï, ¾ÆÆÄÄ¡´Â ¼­¹ö¿¡ ·Î±×ÀÎÇÑ »ç¶÷ÀÌ ¾ø¾îµµ ½ÇÇàµÈ´Ù).
- °³ÀÎÀûÀ¸·Î Å×½ºÆ®Çغ¸°Å³ª ÀÌ¹Ì 80¹ø Æ÷Æ®¸¦ »ç¿ëÇÏ´Â ´Ù¸¥
- À¥¼­¹ö°¡ ÀÖ´Ù¸é <code>only for the Current User, on Port
- 8080, when started Manually</code> (ÇöÀç »ç¿ëÀÚ¸¸, 8080¹ø
- Æ÷Æ®, Á÷Á¢ ½ÃÀÛ)¸¦ ¼±ÅÃÇÑ´Ù.</p></li>
-
- <li><p><strong>¼³Ä¡ Á¾·ù (The installation type).</strong>
- ¸ðµâ °³¹ß¿¡ ÇÊ¿äÇÑ ¼Ò½ºÄÚµå¿Í ¶óÀ̺귯¸®¸¦ Á¦¿ÜÇÑ ¸ðµç
- °ÍÀ» ¼³Ä¡ÇÏ·Á¸é <code>Typical</code>À» ¼±ÅÃÇÑ´Ù.
- <code>Custom</code>À» ¼±ÅÃÇÏ¸é ¼³Ä¡ÇÒ ³»¿ëÀ» ÁöÁ¤ÇÒ ¼ö
- ÀÖ´Ù. Àüü ¼³Ä¡½Ã µð½ºÅ©¿¡ ºó °ø°£ÀÌ ¾à 13 ¸Þ°¡¹ÙÀÌÆ®
- Á¤µµ ÇÊ¿äÇÏ´Ù. ÀÌ ¼öÄ¡´Â À¥»çÀÌÆ® Å©±â¸¦ <em>Á¦¿ÜÇÑ</em>
- °ÍÀÌ´Ù.</p></li>
-
- <li><p><strong>¼³Ä¡ Àå¼Ò (Where to install).</strong>
- ±âº» °æ·Î´Â <code>C:\Program Files\Apache Group</code>ÀÌ°í,
- ÀÌ°÷¿¡ <code>Apache2</code>¶ó´Â µð·ºÅ丮¸¦ ¸¸µç´Ù.</p></li>
- </ol>
-
- <p>¼³Ä¡ÇÒ µ¿¾È ¾ÆÆÄÄ¡´Â <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀϵéÀ» ¼±ÅÃÇÑ ¼³Ä¡ µð·ºÅ丮¿¡ ¸Â°Ô ±¸¼ºÇÑ´Ù. ±×·¯³ª
- ÀÌ µð·ºÅ丮¿¡ ¼³Á¤ÆÄÀÏÀÌ ÀÌ¹Ì ÀÖ´Ù¸é ±×´ë·Î µÐ´Ù. ´ë½Å,
- ÇØ´ç ÆÄÀÏÀÇ »õ·Î¿î º¹»çº»¿¡ È®ÀåÀÚ <code>.default</code>¸¦
- ºÙÀδÙ. ¿¹¸¦ µé¾î, <code>conf\httpd.conf</code>°¡ ÀÌ¹Ì ÀÖ´Ù¸é
- <code>conf\httpd.conf.default</code>·Î À̸§À» º¯°æÇÑ´Ù.
- ¼³Ä¡ÈÄ <code>.default</code> ÆÄÀÏÀÇ ¼³Á¤À» Á÷Á¢ »ìÆ캸°í,
- ÇÊ¿äÇÏ´Ù¸é ±âÁ¸ ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¶Ç, ÀÌ¹Ì <code>htdocs\index.html</code>À̶ó´Â ÆÄÀÏÀÌ
- ÀÖ´Ù¸é ±×´ë·Î µÐ´Ù (<code>index.html.default</code>¶ó°í
- º¹»çÇÏÁöµµ ¾Ê´Â´Ù). Áï, ±âÁ¸¿¡ ¾ÆÆÄÄ¡°¡ ¼³Ä¡µÇÀÖ´õ¶óµµ ¾ÈÀüÇÏ°Ô
- ¾ÆÆÄÄ¡¸¦ »õ·Î ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ¼³Ä¡Çϱâ Àü¿¡ ¼­¹ö¸¦
- Áß´ÜÇÏ°í, ¼³Ä¡ÈÄ »õ·Î¿î ¼­¹ö¸¦ ½ÃÀÛÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ ¼³Ä¡ÈÄ ÇÊ¿äÇÏ´Ù¸é <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡
- ÀÖ´Â ¼³Á¤ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ÆÄÀÏÀº ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ µð·ºÅ丮ÀÇ
- <code>htdocs</code> ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ¹®¼­¸¦ ¼­ºñ½ºÇϵµ·Ï
- ¼³Á¤µÇÀÖ´Ù. ½ÇÁ¦·Î ¾ÆÆÄÄ¡¸¦ »ç¿ëÇϱâ Àü¿¡ ¼³Á¤ÇØ¾ß ÇÒ ¿É¼ÇÀÌ
- ¸¹´Ù. ±×·¯³ª »¡¸® ½ÇÇàÇغ¼ ¼ö ÀÖµµ·Ï ±âº» ¼³Á¤ÆÄÀϷεµ µ¿ÀÛÇÑ´Ù.</p>
- </section>
-
- <section id="cust">
- <title>Windows¿ë ¾ÆÆÄÄ¡ ¼³Á¤Çϱâ</title>
-
- <p>¾ÆÆÄÄ¡´Â <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ·Î
- ¼³Á¤ÇÑ´Ù. ÀÌ ÆÄÀÏÀº À¯´Ð½º¿ë°ú °°Áö¸¸, Windows¿ë ¾ÆÆÄÄ¡
- ƯÀ¯ÀÇ Áö½Ã¾î°¡ ¸î°³ ÀÖ´Ù. »ç¿ë°¡´ÉÇÑ ¸ðµç Áö½Ã¾î¸¦ º¸·Á¸é
- <a href="../mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a>À» Âü°íÇ϶ó.</p>
-
- <p>Windows¿ë ¾ÆÆÄÄ¡ÀÇ ÁÖµÈ Â÷ÀÌÁ¡Àº:</p>
- <ul>
- <li><p>Windows¿ë ¾ÆÆÄÄ¡´Â ´ÙÁß¾²·¹µå ¹æ½ÄÀ» »ç¿ëÇϱ⶧¹®¿¡,
- À¯´Ð½º¿Í ´Þ¸® ¿äû¸¶´Ù ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
- ´ë½Å ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½º´Â Ç×»ó, ºÎ¸ð ÇÁ·Î¼¼½º¿Í ¿äûÀ» ó¸®ÇÏ´Â
- ÀÚ½Ä ÇÁ·Î¼¼½º, 2°³ÀÌ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÖ´Â ¿©·¯ ¾²·¹µåµéÀÌ
- ¿äûµéÀ» ó¸®ÇÑ´Ù.
- </p>
-
- <p>ÇÁ·Î¼¼½º °ü¸® Áö½Ã¾îµµ ´Ù¸£´Ù:</p>
-
- <p><directive
- module="mpm_common">MaxRequestsPerChild</directive>: À¯´Ð½º¿Í
- °°ÀÌ, ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¿äûÀ» ¾ó¸¶¸¸Å­ ó¸®ÇÏ°í Á×À»Áö¸¦
- Á¶Á¤ÇÑ´Ù. ±×·¯³ª À¯´Ð½º¿Í ´Þ¸® ÇÁ·Î¼¼½º°¡ Çѹø¿¡ ÇÑ ¿äû¸¸À»
- ó¸®ÇÏÁö¾Ê°í Çѹø¿¡ ¸ðµç ¿äûÀ» ¼­ºñ½ºÇϱ⶧¹®¿¡, ¼³Á¤ÇÑ´Ù¸é
- ¸Å¿ì Å« °ªÀ» ¼³Á¤ÇÏ±æ ±ÇÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ª
- <code>MaxRequestsPerChild 0</code>À» »ç¿ëÇϸé ÀÚ½Ä ÇÁ·Î¼¼½º´Â
- Á×Áö¾Ê°í ¿µ¿øÈ÷ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- <note type="warning"><strong>°æ°í: ÀÚ½Ä ÇÁ·Î¼¼½º´Â »õ·Î
- ½ÃÀÛÇÒ ¶§¸¶´Ù ¼­¹ö¼³Á¤ÆÄÀÏÀ» »õ·Î Àд´Ù.
- <code>httpd.conf</code>¸¦ ¼öÁ¤Çß´Ù¸é, ÀÚ½Ä ÇÁ·Î¼¼½º°¡
- ½ÃÀÛÇÏÁö ¾Ê°Å³ª ¿¹±âÄ¡¾ÊÀº °á°ú°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.</strong></note>
-
- <p><directive module="mpm_common">ThreadsPerChild</directive>:
- ÀÌ Áö½Ã¾î´Â »õ·Î Ãß°¡µÇ¾ú´Ù. ÀÌ Áö½Ã¾î´Â ¼­¹ö°¡ »ç¿ëÇÒ
- ¾²·¹µå °³¼ö¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀÌ ¼­¹ö°¡ Çѹø¿¡ ó¸®ÇÒ ¼ö
- ÀÖ´Â ÃÖ´ë ¿¬°á°³¼öÀ̱⶧¹®¿¡, »çÀÌÆ®¿¡ Á¢¼Ó·®ÀÌ ¸¹´Ù¸é
- ÃæºÐÈ÷ Å« °ªÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±ÇÀåÇÏ´Â ±âº»°ªÀº
- <code>ThreadsPerChild 50</code>ÀÌ´Ù.</p></li>
-
- <li><p>ÆÄÀϸíÀ» ¾Æ±Ô¸ÕÆ®·Î ¹Þ´Â Áö½Ã¾î´Â À¯´Ð½º ÆÄÀϸíÀÌ
- ¾Æ´Ñ Windows ÆÄÀϸíÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¾ÆÆÄÄ¡ ³»ºÎ¿¡¼­
- À¯´Ð½º½Ä À̸§À» »ç¿ëÇϱ⶧¹®¿¡ ¹é½½·¡½¬°¡ ¾Æ´Ñ ½½·¡½¬¸¦
- »ç¿ëÇØ¾ß ÇÑ´Ù. µå¶óÀÌºê ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. µå¶óÀ̺긦
- ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾ÆÆÄÄ¡ ½ÇÇàÆÄÀÏÀÌ ÀÖ´Â µå¶óÀ̺긦
- »ç¿ëÇÑ´Ù.</p></li>
-
- <li><p>Windows¿ë ¾ÆÆÄÄ¡´Â ¼­¹ö¸¦ ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê°í
- ½ÇÇàÁß¿¡ ¸ðµâÀ» ÀоîµéÀÏ ¼ö ÀÖ´Ù. ±âº»°ªÀ¸·Î ¾ÆÆÄÄ¡¸¦
- ÄÄÆÄÀÏÇϸé <code>\Apache2\modules</code> µð·ºÅ丮¿¡ ¿©·¯
- ¼±Åð¡´ÉÇÑ ¸ðµâÀ» ¼³Ä¡ÇÑ´Ù. ÀÌ ¸ðµâ ȤÀº ´Ù¸¥ ¸ðµâÀ»
- »ç¿ëÇÏ·Á¸é »õ·Î »ý±ä <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
- ¿¹¸¦ µé¾î, status ¸ðµâÀ» »ç¿ëÇÑ´Ù¸é
- (<code>access.conf</code>¿¡ status°ü·Ã Áö½Ã¾î¿Í ÇÔ²²)
- ¾Æ·¡¿Í °°ÀÌ ¼³Á¤ÇÑ´Ù:</p>
-
- <example>
- LoadModule status_module modules/mod_status.so
- </example>
-
- <p><a href="../mod/mod_so.html#creating">ÀоîµéÀÏ ¼ö ÀÖ´Â
- ¸ðµâ ¸¸µé±â</a>¿¡ ´ëÇÑ Á¤º¸µµ ÀÖ´Ù.</p></li>
-
- <li><p>¾ÆÆÄÄ¡´Â Microsoft IIS¿Í ´Ù¸¥ Windows ¼­¹ö°¡ »ç¿ëÇÏ´Â
- ISAPI (Internet Server Application Programming Interface)
- È®ÀåÀ» (Áï, ÀÎÅÍ³Ý ¼­¹ö ÇÁ·Î±×·¥) ÀоîµéÀÏ ¼öµµ ÀÖ´Ù.
- <a href="../mod/mod_isapi.html">´õ ÀÚ¼¼ÇÑ Á¤º¸°¡ ÀÖ´Ù</a>.
- ¾ÆÆÄÄ¡´Â ISAPI ÇÊÅ͸¦ ÀоîµéÀÏ ¼ö <strong>¾øÀ½À»</strong>
- ÁÖÀÇÇ϶ó.</p></li>
-
- <li><p>CGI ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ´Ù¸é <directive
- module="core">ScriptInterpreterSource</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡°¡ ½ºÅ©¸³Æ®ÀÇ ÀÎÅÍÇÁ¸®Å͸¦ ã´Â ¹æ¹ýÀ»
- ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p></li>
-
- <li><p>Windows¿¡¼­ <code>.htaccess</code>¿Í °°Àº ÆÄÀϸíÀ»
- ´Ù·ç±â Èûµå¹Ç·Î, <directive
- module="core">AccessFilename</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- µð·ºÅ丮º° ¼³Á¤ÆÄÀÏ À̸§À» º¯°æÇϸé ÆíÇÏ´Ù.</p></li>
-
- <li><p>Windows NT¶ó¸é ¾ÆÆÄÄ¡ ½ÃÀ۽à ¹ß»ýÇÑ ¿À·ù¸¦ Windows
- À̺¥Æ® ·Î±×¿¡ ±â·ÏÇÑ´Ù. ±×·¡¼­ ¾ÆÆÄÄ¡°¡ º¸Åë »ç¿ëÇÏ´Â
- <code>error.log</code> ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì¿¡ ´ëºñÇÑ´Ù.
- Windows À̺¥Æ® ·Î±×´Â Windows NT 4.0¿¡¼­´Â À̺¥Æ® ºä¾î
- ÇÁ·Î±×·¥À¸·Î, ÃֽŠWindows ¹öÀü¿¡¼­´Â À̺¥Æ® ºä¾î MMC
- ½º³ÀÀο¡¼­ º¼ ¼ö ÀÖ´Ù.</p>
-
- <note><strong>Windows 9x¿¡´Â Windows À̺¥Æ® ·Î±×°¡ ¾ø±â¶§¹®¿¡
- ½ÃÀ۽à ¹ß»ýÇÑ ¿À·ù¸¦ ±â·ÏÇÏÁö ¾Ê´Â´Ù.</strong></note></li>
- </ul>
-
- </section>
-
- <section id="winsvc">
- <title>¾ÆÆÄÄ¡¸¦ Service·Î ½ÇÇàÇϱâ</title>
-
- <p>Windows NT¿¡¼­´Â ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù. Windows
- 9x¿¡´Â ¸Å¿ì ½ÇÇèÀûÀÎ ¹æ¹ýÀ¸·Î ºñ½ÁÇÑ ±â´ÉÀ» Áö¿øÇÑ´Ù.</p>
-
- <p>¼³Ä¡½Ã ÀÚµ¿À¸·Î ¾ÆÆÄÄ¡¸¦ service·Î ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. "¸ðµç
- »ç¿ëÀÚ"¸¦ ¼±ÅÃÇϸé, ¾ÆÆÄÄ¡ service°¡ ¸¸µé¾îÁø´Ù. "ÇöÀç
- »ç¿ëÀÚ¸¸"À» ¼±ÅÃÇÏ´õ¶óµµ ¼³Ä¡ÈÄ Á÷Á¢ ¾ÆÆÄÄ¡¸¦ service·Î
- µî·ÏÇÒ ¼ö ÀÖ´Ù. service¸¦ ¼³Ä¡ÇÏ·Á¸é Administrators ±×·ìÀÇ
- ±¸¼º¿øÀ̾î¾ß ÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¿¡´Â Apache Service Monitor¶ó´Â µµ±¸°¡ ÀÖ´Ù. ÀÌ
- µµ±¸¸¦ »ç¿ëÇÏ¸é ³×Æ®¿÷¿¡ ÀÖ´Â ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡µÈ ¾ÆÆÄÄ¡
- »óŵµ È®ÀÎÇÏ°í °ü¸®ÇÒ ¼ö ÀÖ´Ù. monitor·Î ¾ÆÆÄÄ¡ service¸¦
- °ü¸®ÇÏ·Á¸é ¸ÕÀú service¸¦ (¼³Ä¡½Ã ÀÚµ¿À¸·Î ȤÀº Á÷Á¢) ¼³Ä¡Çؾß
- ÇÑ´Ù.
- </p>
-
- <p>¾ÆÆÄÄ¡ <code>bin</code> ÇÏÀ§µð·ºÅ丮¿¡¼­ ¸í·ÉÇà ÇÁ·ÒÇÁÆ®¿¡
- ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¸é ¾ÆÆÄÄ¡¸¦ Windows NT service·Î ¼³Ä¡ÇÑ´Ù:</p>
-
- <example>
- apache -k install
- </example>
-
- <p>¼³Ä¡ÇÒ service À̸§À» ÁöÁ¤ÇÏ°í ½Í´Ù¸é ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù.
- ÄÄÇ»ÅÍ¿¡ ¾ÆÆÄÄ¡°¡ ¿©·¯°³ ¼³Ä¡µÇÀÖ´Ù¸é À̸§À» ´Ù¸£°Ô ÁÖ¾î¾ß
- ÇÑ´Ù.</p>
-
- <example>
- apache -k install -n "MyServiceName"
- </example>
-
- <p>service°¡ »ç¿ëÇÒ ¼³Á¤ÆÄÀÏÀ» Á÷Á¢ ÁöÁ¤ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ
- ÇÑ´Ù:</p>
-
- <example>
- apache -k install -n "MyServiceName" -f "c:\files\my.conf"
- </example>
-
- <p><code>-k install</code> ¿Ü¿¡ ´Ù¸¥ ÆĶó¹ÌÅ͸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸¸é, service À̸§Àº <code>Apache2</code>°¡ µÇ°í ¼³Á¤ÆÄÀÏÀº
- <code>conf\httpd.conf</code>°¡ µÈ´Ù.
- </p>
-
- <p>¾ÆÆÄÄ¡ service¸¦ Á¦°ÅÇϱ⠽±´Ù. °£´ÜÈ÷:</p>
-
- <example>
- apache -k uninstall
- </example>
-
- <p>´ÙÀ½°ú °°ÀÌ Á¦°ÅÇÒ ¾ÆÆÄÄ¡ service¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- apache -k uninstall -n "MyServiceName"
- </example>
-
- <p>º¸Åë ¾ÆÆÄÄ¡ service ½ÃÀÛ, Àç½ÃÀÛ, Á¾·á´Â Apache Service
- Monitor³ª <code>NET START Apache2</code>, <code>NET STOP
- Apache2</code> °°Àº ¸í·É¾î ȤÀº Windows ¼­ºñ½º °ü¸®Ã¢¿¡¼­
- ÇÑ´Ù. ¾î¶² ¹æ¹ýÀ» »ç¿ëÇϵçÁö ¾ÆÆÄÄ¡ service¸¦ ½ÃÀÛÇϱâ Àü¿¡
- ¼³Á¤ÆÄÀÏÀ» °Ë»çÇغÁ¾ß ÇÑ´Ù:</p>
-
- <example>
- apache -n "MyServiceName" -t
- </example>
-
- <p>¸í·ÉÇà ¿É¼ÇÀ¸·Îµµ ¾ÆÆÄÄ¡ service¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. ¼³Ä¡ÇÑ
- ¾ÆÆÄÄ¡ serivce¸¦ ½ÃÀÛÇÏ·Á¸é:</p>
-
- <example>
- apache -k start
- </example>
-
- <p>¸í·ÉÇà ¿É¼ÇÀ¸·Î ¾ÆÆÄÄ¡ service¸¦ Á¾·áÇÏ·Á¸é:</p>
-
- <example>
- apache -k stop
- </example>
-
- <p>ȤÀº</p>
-
- <example>
- apache -k shutdown
- </example>
-
- <p>½ÇÇàÁßÀÎ service¸¦ Àç½ÃÀÛÇÏ¿© ¼³Á¤ÆÄÀÏÀ» ´Ù½Ã Àеµ·Ï
- ÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- apache -k restart
- </example>
-
- <p>±âº»ÀûÀ¸·Î ¸ðµç ¾ÆÆÄÄ¡ service´Â ½Ã½ºÅÛ »ç¿ëÀÚ
- (<code>LocalSystem</code> °èÁ¤) ±ÇÇÑÀ¸·Î ½ÇÇàÇϵµ·Ï µî·ÏµÈ´Ù.
- Windows º¸¾È±¸Á¶»ó <code>LocalSystem</code> °èÁ¤Àº ÆÄÀϽýºÅÛ,
- named pipes, DCOM, secure RPC µî ¾î¶² ¹æ¹ýÀ» »ç¿ëÇϵçÁö
- ³×Æ®¿÷¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÇØ´ç ÄÄÇ»ÅÍ¿¡¼­´Â ¸¹Àº ±ÇÇÑÀ»
- °¡Áø´Ù.
- </p>
-
- <note type="warning"><strong><code>LocalSystem</code> °èÁ¤¿¡°Ô
- ³×Æ®¿÷ ±ÇÇÑÀ» Àý´ë·Î ÁÖÁö ¸¶¶ó! ¾ÆÆÄÄ¡°¡ ³×Æ®¿÷ ÀÚ¿ø¿¡ Á¢±ÙÇؾß
- ÇÑ´Ù¸é, ¾Æ·¡¿¡¼­ ¼³¸íÇÏ´Â ¹æ¹ýÀ¸·Î ¾ÆÆÄÄ¡¸¦ À§ÇÑ º°µµÀÇ
- °èÁ¤À» ¸¸µé¾î¶ó.</strong></note>
-
- <p>¾ÆÆÄÄ¡ service¸¦ ½ÇÇàÇϱâÀ§ÇÑ º°µµÀÇ °èÁ¤À» ¸¸µé ¼öµµ
- ÀÖ´Ù. ƯÈ÷ ¾ÆÆÄÄ¡°¡ ³×Æ®¿÷ ÀÚ¿ø¿¡ Á¢±ÙÇØ¾ß ÇÑ´Ù¸é ÀÌ ¹æ¹ýÀ»
- °­·ÂÈ÷ ±ÇÇÑ´Ù.</p>
-
- <ol>
- <li>ÀÏ¹Ý µµ¸ÞÀÎ »ç¿ëÀÚ °èÁ¤À» ¸¸µé°í ¾ÏÈ£¸¦ ±â¾ïÇ϶ó.</li>
-
- <li>»õ·Î ¸¸µç °èÁ¤¿¡ <code>¼­ºñ½º·Î ·Î±×¿Â</code>¿Í
- <code>¿î¿µ üÁ¦ÀÇ ÀϺηΠȰµ¿</code> ±ÇÇÑÀ»
- ºÎ¿©ÇÑ´Ù. Windows NT 4.0¿¡¼­´Â User Manager for Domains¿¡¼­
- ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ°í, Windows 2000°ú XP¿¡¼­´Â ¾Æ¸¶µµ
- "±×·ì Á¤Ã¥"À» »ç¿ëÇØ¾ß ÇÑ´Ù. "·ÎÄà º¸¾È ¼³Á¤" MMC
- ½º³ÀÀο¡¼­ Á÷Á¢ ¼³Á¤ÇØÁÙ ¼öµµ ÀÖ´Ù.
- </li>
-
- <li>»õ·Î ¸¸µç °èÁ¤ÀÌ Users ±×·ì¿¡ ¼ÓÇÏ´ÂÁö È®ÀÎÇÑ´Ù.</li>
-
- <li>¸ðµç ¹®¼­¿Í ½ºÅ©¸³Æ® Æú´õ¿¡ (¿¹¸¦ µé¾î
- <code>htdocs</code>¿Í <code>cgi-bin</code>) ´ëÇØ Àб⠹×
- ½ÇÇà (RX) ±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù.</li>
-
- <li>¾ÆÆÄÄ¡ <code>logs</code> µð·ºÅ丮¿¡ ¼öÁ¤ (RWXD) ±ÇÇÑÀ»
- ºÎ¿©ÇÑ´Ù.</li>
-
- <li><code>Apache.exe</code> ½ÇÇàÆÄÀÏ¿¡ ÀÐ±â ¹× ½ÇÇà (RX)
- ±ÇÇÑÀ» ºÎ¿©ÇÑ´Ù.</li>
- </ol>
-
- <note>¾ÆÆÄÄ¡ service¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿¡°Ô ÃÖ¼ÒÇÑ ¼öÁ¤ (RWXD)
- ±ÇÇÑÀÌ ÇÊ¿äÇÑ <code>logs</code> ÇÏÀ§µð·ºÅ丮¸¦ Á¦¿ÜÇÏ°í
- Apache2 µð·ºÅ丮 Àüü¿¡ ÀÐ±â ¹× ½ÇÇà (RX) ±ÇÇÑÀ» ºÎ¿©ÇÏ´Â
- °ÍÀÌ ÁÁ´Ù.</note>
-
- <p>°èÁ¤¿¡ "·ÎÄà ·Î±×¿Â"°ú "¼­ºñ½º·Î ·Î±×¿Â" ±ÇÇÑÀÌ ÀÖ´Ù¸é,
- ±× °èÁ¤À¸·Î ·Î±×¿ÂÇÏ¿© °èÁ¤ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í À¥ÆäÀÌÁö¸¦
- ÀÐÀ¸¸ç ÄܼÖâ¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´ÂÁö °Ë»çÇغ¼ ¼ö
- ÀÖ´Ù. ¿©±â¼­ ¹®Á¦°¡ ¾ø´Ù¸é ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇصµ ¹®Á¦°¡
- ¾ø´Ù.</p>
-
- <note><strong>Error code 2186</strong>Àº ¾ÆÆÄÄ¡°¡ ÇÊ¿äÇÑ
- ³×Æ®¿÷ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù´Â ¸»·Î serviceÀÇ "·Î±×¿Â"
- ¼³Á¤À» È®ÀÎÇ϶ó. ¶Ç, ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â °èÁ¤ÀÇ ±ÇÇÑÀ»
- »ìÆìºÁ¶ó.</note>
-
- <p>¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇϸé Windows Service Control
- Manager¿¡¼­ ¿À·ù¹®À» º¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, Á¦¾îÆÇ¿¡¼­
- "¼­ºñ½º"¸¦ »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ´Â °æ¿ì ´ÙÀ½°ú °°Àº ¹®±¸°¡
- ³ª¿Ã ¼ö ÀÖ´Ù:</p>
-
- <example>
- Could not start the Apache2 service on \\COMPUTER <br />
- Error 1067; The process terminated unexpectedly.
- </example>
-
- <p>¾ÆÆÄÄ¡ service¸¦ ½ÃÀÛÇÒ¶§ ¹®Á¦°¡ ÀÖÀ¸¸é ÀϹÝÀûÀÎ ÀÌ·±
- ¿À·ù°¡ ³ª¿Â´Ù. ½ÇÁ¦ ¾îµð°¡ ¹®Á¦ÀÎÁö ¾Ë·Á¸é ¾ÆÆÄÄ¡¸¦ ÄܼÖ
- ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇغ¸¶ó.</p>
-
- <p>Windows 9x¿¡¼­ ¾ÆÆÄÄ¡´Â Windows NTÀÇ service¿Í ºñ½ÁÇÑ
- ¹æ¹ýÀ» Áö¿øÇÑ´Ù. ±×·¯³ª <strong>¸Å¿ì ½ÇÇèÀûÀÎ</strong> ±â´ÉÀÌ´Ù.
- ½ÇÁ¦ ¼­ºñ½º¿¡ »ç¿ëÇÒ¸¸Å­ ¾ÈÁ¤ÀûÀÌÁö ¾Ê°í ¾ÕÀ¸·Î °³¼±µÉÁö
- º¸ÀåÇÒ ¼öµµ ¾ø´Ù. À§ÇèÇϹǷΠȤ½Ã³ª »ç¿ëÇÑ´Ù¸é ÁÖÀÇÇؼ­
- »ç¿ëÇØ¾ß ÇÑ´Ù!</p>
-
- <p>µÎ°¡Áö serviceÀÇ Áß¿äÇÑ Â÷ÀÌÁ¡Àº ´ÙÀ½°ú °°´Ù:</p>
-
- <ul>
- <li><p>¾ÆÆÄÄ¡°¡ ¼º°øÀûÀ¸·Î ½ÃÀÛÇÏ¸é ¹è°æ¿¡¼­ ½ÇÇàÇÑ´Ù.
- ¿¹¸¦ µé¾î, µ¥½ºÅ©Å¾¿¡ ¹Ù·Î°¡±â¸¦ ¸¸µé¾î¼­ ´ÙÀ½ ¸í·ÉÀ»
- ½ÇÇàÇÏ´Â °æ¿ì,</p>
-
- <example>
- apache -n "MyServiceName" -k start
- </example>
-
- <p>service°¡ ¼º°øÀûÀ¸·Î ½ÃÀÛÇϸé ÄܼÖâÀÌ »ý°å´Ù°¡ ±Ý¹æ
- »ç¶óÁø´Ù. httpd.conf ¼³Á¤ÆÄÀÏ¿¡ À߸øµÈ ³»¿ëÀÌ ÀÖ´Â µî
- ¾ÆÆÄÄ¡ ½ÃÀ۽à ¿À·ù°¡ ¹ß»ýÇϸé ÄܼÖâÀ» °è¼Ó º¸ÀδÙ. ÄܼÖâÀº
- ¹®Á¦ÀÇ ¿øÀÎÀ» ÆľÇÇϴµ¥ µµ¿òÀ» ÁÖ´Â ¿À·ù¹®À» º¸¿©ÁØ´Ù.</p></li>
-
- <li><p>Windows 9x´Â <code>NET START</code>¿Í <code>NET
- STOP</code> ¸í·É¾î¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ¸í·ÉÇÁ·ÒÇÁÆ®¿¡¼­
- <code>-k</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¾ÆÆÄÄ¡ service¸¦ Á¶Á¤Çؾß
- ÇÑ´Ù.
- </p></li>
-
- <li><p>
- ¾ÆÆÄÄ¡¿Í Windows 9x´Â ³×Æ®¿÷ ±ÇÇÑÀ» °¡Áø ƯÁ¤ »ç¿ëÀÚ·Î
- ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏÁö ¸øÇÑ´Ù. »ç½Ç Windows 9x´Â º¸¾ÈÀ» Á¦°øÇÏÁöµµ
- ¾Ê´Â´Ù. ÀÌ°ÍÀÌ ¹Ù·Î Apache Software FoundationÀÌ Windows
- 9x ½Ã½ºÅÛÀ» °ø°³ À¥¼­¹ö·Î »ç¿ëÇÏ±æ ±ÇÇÏÁö ¾Ê´Â ÀÌÀ¯´Ù.
- »ç¿ëÀÚ°¡ À¥ ÄÁÅÙÃ÷¸¦ °³¹ßÇÏ°í ¾ÆÆÄÄ¡ ¼­¹ö ÇнÀÀ» µ½±âÀ§ÇØ,
- ¾Æ´Ï¸é ¾ÈÀüÇÑ »ç¼³ ³×Æ®¿÷¿¡ À§Ä¡ÇÒ ÀÎÆ®¶ó³Ý ¼­¹ö¸¦ À§ÇØ,
- Windows 9x¸¦ Áö¿øÇÒ »ÓÀÌ´Ù.</p></li>
-
- </ul>
-
- <p>¾ÆÆÄÄ¡°¡ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î µ¿ÀÛÇÔÀ» È®ÀÎÇÏ¿´´Ù¸é Windows
- NT¿¡¼­¿Í °°Àº ¸í·É¾î·Î °¡»ó service¸¦ ¼³Ä¡, Á¶Àý, Á¦°ÅÇÒ
- ¼ö ÀÖ´Ù. ¶Ç, Apache Service Monitor¸¦ »ç¿ëÇÏ¿© Windows 9x
- °¡»ó service¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="wincons">
- <title>¾ÆÆÄÄ¡¸¦ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇϱâ</title>
-
- <p>ÀϹÝÀûÀ¸·Î ¾ÆÆÄÄ¡¸¦ service·Î ½ÇÇàÇÏ±æ ±ÇÇÑ´Ù. ±×·¯³ª
- ¸í·ÉÇà¿¡¼­ ½ÇÇàÇÏ´Â°Ô ÆíÇÑ °æ¿ì°¡ ÀÖ´Ù (Windows 9x¿¡¼­´Â
- service¸¦ ¾ÈÁ¤ÀûÀ¸·Î Áö¿øÇÏÁö ¾Ê±â¶§¹®¿¡ ¸í·ÉÇà¿¡¼­ ¾ÆÆÄÄ¡¸¦
- ½ÇÇàÇÏ´Â ¹æ¹ýÀ» ±ÇÇÑ´Ù).</p>
-
- <p>¾ÆÆÄÄ¡¸¦ ÄÜ¼Ö ÇÁ·Î±×·¥À¸·Î ½ÇÇàÇÏ·Á¸é, ¸í·ÉÇà¿¡¼­ ´ÙÀ½
- ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù:</p>
-
- <example>
- apache
- </example>
-
- <p>¾ÆÆÄÄ¡´Â Control-C¸¦ ´­·¯¼­ Á¤ÁöÇÒ ¶§±îÁö ½ÇÇàµÈ´Ù.</p>
-
- <p>¶Ç, <code>½ÃÀÛ ¸Þ´º --&gt; ÇÁ·Î±×·¥ --&gt; Apache HTTP
- Server 2.0.xx --&gt; Control Apache Server</code>¿¡ ¼³Ä¡µÈ
- Start Apache in Console ¹Ù·Î°¡±â·Î ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
- ¹Ù·Î°¡±â¸¦ ½ÇÇàÇϸé ÄܼÖâÀ» ¿­°í ±× ¾È¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÑ´Ù.
- ¾ÆÆÄÄ¡¸¦ service·Î ¼³Ä¡ÇÏÁö ¾Ê¾Ò´Ù¸é, ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â
- ÄܼÖâ¿¡¼­ Control-C¸¦ ´­·¯ ¾ÆÆÄÄ¡¸¦ Áß´ÜÇÒ¶§±îÁö âÀÌ ¶°ÀÖ´Ù.
- ÀÌ °æ¿ì ¼­¹ö´Â ¸îÃʾȿ¡ Á¾·áÇÑ´Ù. ±×·¯³ª, ¾ÆÆÄÄ¡¸¦ service·Î
- ¼³Ä¡ÇÏ¿´´Ù¸é ¹Ù·Î°¡±â´Â service¸¦ ½ÃÀÛÇÑ´Ù. ¾ÆÆÄÄ¡ service°¡
- ÀÌ¹Ì ½ÇÇàÁßÀ̶ó¸é ¹Ù·Î°¡±â´Â ¾Æ¹«Àϵµ ÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>´Ù¸¥ ÄܼÖâÀ» ¿­°í ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¿© ½ÇÇàÁßÀÎ ¾ÆÆÄÄ¡¸¦
- Á¾·áÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- apache -k shutdown
- </example>
-
- <p>ÀÌ ¹æ¹ýÀº ¾ÆÆÄÄ¡°¡ ÇöÀç ÀÛ¾÷À» ¸¶Ä¡°í Á¡ÀÝ°Ô Á¾·áÇÒ ¼ö
- Àֱ⶧¹®¿¡ Control-C º¸´Ù ³´´Ù.</p>
-
- <p>¶Ç, ¾ÆÆÄÄ¡¸¦ Àç½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ¼³Á¤ÆÄÀÏÀ» ´Ù½Ã
- Àд´Ù. ÁøÇàÁßÀÎ ÀÛ¾÷À» Áß°£¿¡ ²÷Áö¾Ê°í ¿Ï·áÇÑ´Ù. ¾ÆÆÄÄ¡¸¦
- Àç½ÃÀÛÇÏ·Á¸é:</p>
-
- <example>
- apache -k restart
- </example>
-
- <note>À¯´Ð½º¿ë ¾ÆÆÄÄ¡¿¡ Àͼ÷ÇÑ »ç¶÷À» À§ÇØ: ÀÌ ¸í·É¾î´Â
- <code>kill -TERM <em>pid</em></code>³ª <code>kill -USR1
- <em>pid</em></code>ÀÇ WindowsÆÇÀÌ´Ù. ¸í·ÉÇà ¿É¼Ç
- <code>-k</code>´Â À¯´Ð½º <code>kill</code> ¸í·É¾î À̸§À»
- º»µû Áö¾ú´Ù.</note>
-
- <p>¾ÆÆÄÄ¡ ÄܼÖâÀÌ Áï½Ã ȤÀº ½ÃÀÛÈÄ °©Àڱ⠴ÝÄ¡¸é ½ÃÀÛ ¸Þ´º
- --&gt; ÇÁ·Î±×·¥ÀÇ ¸í·É ÇÁ·ÒÇÁÆ®¸¦ ½ÇÇàÇÑ´Ù. ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÑ
- Æú´õ·Î °¡¼­ <code>apache</code> ¸í·É¾î¸¦ ½ÇÇàÇغ¸°í ¹ß»ýÇÑ
- ¿À·ù¹®À» »ìÆ캻´Ù. ±×¸®°í logs Æú´õ·Î °¡¼­, ¼³Á¤ÆÄÀÏÀÌ
- À߸øµÇ¾ú´ÂÁö <code>error.log</code> ÆÄÀÏÀ» »ìÆ캻´Ù. ¾ÆÆÄÄ¡¸¦
- ¼³Ä¡ÇÒ¶§ ±âº»°ªÀ» »ç¿ëÇß´Ù¸é ´ÙÀ½°ú °°´Ù:</p>
-
- <example>
- c: <br />
- cd "\Program Files\Apache Group\Apache2\bin" <br />
- apache
- </example>
-
- <p>¾ÆÆÄÄ¡°¡ Á¤ÁöÇÒ ¶§±îÁö ±â´Ù¸®°Å³ª Control-C¸¦ ´©¸¥´Ù.
- ±×¸®°í ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù:</p>
-
- <example>
- cd ..\logs <br />
- more &lt; error.log
- </example>
-
- <p>¾ÆÆÄÄ¡¸¦ ´Ù·ê¶§ ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô ¼³Á¤ÆÄÀÏÀ» ã´ÂÁö ¾Æ´Â
- °ÍÀÌ Áß¿äÇÏ´Ù. µÎ°¡Áö ¹æ¹ýÀ¸·Î ¸í·ÉÇà¿¡¼­ ¼³Á¤ÆÄÀÏÀ» ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù:</p>
-
- <ul>
- <li><p><code>-f</code>´Â ¼³Á¤ÆÄÀÏÀÇ Àý´ë°æ·Î ȤÀº »ó´ë°æ·Î¸¦
- ÁöÁ¤ÇÑ´Ù:</p>
-
- <example>
- apache -f "c:\my server files\anotherconfig.conf"
- </example>
-
- <p>ȤÀº</p>
-
- <example>
- apache -f files\anotherconfig.conf
- </example></li>
-
- <li><p><code>-n</code>Àº ¾ÆÆÄÄ¡ service¸¦ ¼±ÅÃÇÏ°í, ÇØ´ç
- serviceÀÇ ¼³Á¤ÆÄÀÏÀ» »ç¿ëÇÑ´Ù:</p>
-
- <example>
- apache -n "MyServiceName"
- </example>
- </li>
- </ul>
-
- <p>µÎ °æ¿ì ¸ðµÎ ¼³Á¤ÆÄÀÏÀÌ ÀûÀýÇÑ <directive
- module="core">ServerRoot</directive>¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p><code>-f</code>³ª <code>-n</code>À¸·Î ¼³Á¤ÆÄÀÏÀ» ÁöÁ¤ÇÏÁö
- ¾ÊÀ¸¸é, ¾ÆÆÄÄ¡´Â <code>conf\httpd.conf</code>¿Í °°ÀÌ ¼­¹ö¿¡
- ÄÄÆÄÀÏµÈ ÆÄÀϸíÀ» »ç¿ëÇÑ´Ù. ÀÌ ±âº» °æ·Î´Â ¼³Ä¡ µð·ºÅ丮¿¡
- »ó´ëÀûÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ <code>-V</code> ¿É¼ÇÀ¸·Î ¾ÆÆÄÄ¡¸¦
- ½ÇÇàÇϸé <code>SERVER_CONFIG_FILE</code>À̶õ Ç׸ñ¿¡¼­ ¼­¹ö°¡
- »ç¿ëÇÒ ¼³Á¤ÆÄÀÏÀ» ¾Ë ¼ö ÀÖ´Ù:</p>
-
- <example>
- apache -V
- </example>
-
- <p>¾ÆÆÄÄ¡´Â ´ÙÀ½ ¼ø¼­´ë·Î <directive
- module="core">ServerRoot</directive>¸¦ ã´Â´Ù:</p>
-
- <ol>
- <li><code>-C</code> ¸í·ÉÇà ¿É¼Ç¿¡ »ç¿ëÇÑ <directive
- module="core">ServerRoot</directive> Áö½Ã¾î.</li>
-
- <li><code>-d</code> ¸í·ÉÇà ¿É¼Ç.</li>
-
- <li>ÇöÀç ÀÛ¾÷ µð·ºÅ丮.</li>
-
- <li>¹ÙÀ̳ʸ® ¼³Ä¡¸¦ Çß´Ù¸é ¼³Ä¡ÇÒ¶§ ¸¸µç registry Ç׸ñ.</li>
-
- <li>¼­¹ö¿¡ ÄÄÆÄÀÏµÈ server root. ±âº»°ªÀº
- <code>/apache</code>ÀÌ°í, <code>apache -V</code>¸¦ ½ÇÇàÇϸé
- <code>HTTPD_ROOT</code>¶ó´Â Ç׸ñ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.</li>
- </ol>
-
- <p>¼³Ä¡ÇÒ¶§ À©µµ¿ìÁî ·¹Áö½ºÆ®¸®¿¡ ¹öÀü ƯÀ¯ÀÇ ·¹Áö½ºÆ®¸®
- Å°¸¦ ¸¸µç´Ù. Å°ÀÇ À§Ä¡´Â ¼³Ä¡ Á¾·ù¿¡ µû¶ó ´Ù¸£´Ù. install
- Apache for all users¸¦ ¼±ÅÃÇÏ¿´´Ù¸é
- <code>HKEY_LOCAL_MACHINE</code> ¾Æ·¡¿¡ ´ÙÀ½°ú °°Àº Å°¸¦
- ¸¸µç´Ù (¹°·Ð ¹öÀü¹øÈ£´Â ¾ÆÆÄÄ¡ ¹öÀü¸¶´Ù ´Ù¸£´Ù):
- </p>
-
- <example>
- HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43
- </example>
-
- <p>"¸ðµç »ç¿ëÀÚ"¸¦ ´ë»óÀ¸·Î ¾ÆÆÄÄ¡¸¦ ¼³Ä¡ÇÏ¿´´Ù¸é
- <code>HKEY_CURRENT_USER</code> ¾Æ·¡ Å°°¡ »ý±ä´Ù. ³»¿ëÀº
- ÇöÀç ·Î±×¿ÂÇÑ »ç¿ëÀÚ¿¡ µû¶ó ´Ù¸£´Ù:</p>
-
- <example>
- HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43
- </example>
-
- <p>Å° À̸§ÀÌ ¼­¹ö¿¡ ÄÄÆÄÀϵDZ⶧¹®¿¡ ÇöÀç ¹öÀüÀ» °Çµå¸®Áö¾Ê°í
- »õ·Î¿î ¹öÀüÀ» ¼³Ä¡ÇÏ¿© Å×½ºÆ®Çغ¼ ¼ö ÀÖ´Ù. ¹°·Ð »õ ¹öÀüÀ»
- ´Ù¸¥ ¹öÀü°ú °°Àº µð·ºÅ丮¿¡ ¼³Ä¡ÇÏÁö¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¹ÙÀ̳ʸ® ¼³Ä¡¸¦ ÇÏÁö ¾ÊÀº °æ¿ì ¾ÆÆÄÄ¡´Â ·¹Áö½ºÆ®¸® Å°°¡
- ¾ø´Ù°í ºÒÆòÇÒ ¼ö ÀÖ´Ù. ¼­¹ö°¡ ´Ù¸¥ ¹æ¹ýÀ¸·Î ¼³Á¤ÆÄÀÏÀ» ãÀ»
- ¼ö ÀÖ´Ù¸é ÀÌ °æ°í¸¦ ¹«½ÃÇصµ µÈ´Ù.</p>
-
- <p>Å°ÀÇ °ªÀº <directive module="core">ServerRoot</directive>
- µð·ºÅ丮À̸ç, ÀÌ µð·ºÅ丮¿¡ <code>conf</code>¶ó´Â ÇÏÀ§µð·ºÅ丮°¡
- ÀÖ´Ù. ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé ÀÌ ÇÏÀ§µð·ºÅ丮¿¡¼­
- <code>httpd.conf</code> ÆÄÀÏÀ» Àд´Ù. ÀÌ ÆÄÀÏ¿¡ ³ª¿À´Â
- <directive module="core">ServerRoot</directive> Áö½Ã¾î°¡
- ·¹Áö½ºÆ®¸® Å°¿¡ ³ª¿Â µð·ºÅ丮¿Í ´Ù¸£´Ù¸é, ¾ÆÆÄÄ¡´Â ·¹Áö½ºÆ®¸®¿¡¼­
- ¾òÀº °ªÀ» ¹«½ÃÇÏ°í ¾ÕÀ¸·Î ¼³Á¤ÆÄÀÏ¿¡ ³ª¿Â µð·ºÅ丮¸¦ »ç¿ëÇÑ´Ù.
- ¾ÆÆÄÄ¡ µð·ºÅ丮³ª ¼³Á¤ÆÄÀÏÀ» ´Ù¸¥ Àå¼Ò·Î º¹»çÇÏ¸é ¹Ýµå½Ã
- <code>httpd.conf</code> ÆÄÀÏ¿¡ ÀÖ´Â <directive
- module="core">ServerRoot</directive> Áö½Ã¾î¸¦ ±× À§Ä¡·Î
- ¼öÁ¤Ç϶ó.</p>
-
- </section>
-
- <section id="test">
- <title>Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾ú´ÂÁö °Ë»çÇϱâ</title>
-
- <p>(ÄܼÖâÀ̳ª service¸¦ ÅëÇØ) ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϸé (¼³Á¤ÆÄÀÏÀÇ
- <directive module="mpm_common">Listen</directive> Áö½Ã¾î¸¦
- ¼öÁ¤Çϰųª ¾ÆÆÄÄ¡¸¦ "ÇöÀç »ç¿ëÀÚ¸¸" ´ë»óÀ¸·Î ¼³Ä¡ÇÏÁö ¾Ê´Â
- °æ¿ì) 80¹ø Æ÷Æ®¸¦ ±â´Ù¸°´Ù. ºê¶ó¿ìÀú¸¦ ½ÃÀÛÇÏ°í URLÀ» ÀÔ·ÂÇÏ¿©
- ¼­¹öÀÇ ±âº» ÆäÀÌÁö¿¡ Á¢±ÙÇÏ´Ù:</p>
-
- <example>
- http://localhost/
- </example>
-
- <p>¾ÆÆÄÄ¡´Â ¾ÆÆÄÄ¡ ¼³¸í¼­ ¸µÅ©°¡ Àִ ȯ¿µÆäÀÌÁö¸¦ º¸¿©Áà¾ß
- ÇÑ´Ù. ¾Æ¹« Àϵµ ÀϾÁö ¾Ê°Å³ª ¿À·ù°¡ ³ª¿À¸é, <code>logs</code>
- ÇÏÀ§µð·ºÅ丮¿¡ ÀÖ´Â <code>error.log</code> ÆÄÀÏÀ» »ìÆìºÁ¶ó.
- È£½ºÆ®°¡ ³×Æ®¿÷¿¡ ¿¬°áµÇÀÖÁö ¾Ê°Å³ª DNS (Domain Name Service)
- ¼³Á¤¿¡ ¹®Á¦°¡ ÀÖ´Ù¸é ´ÙÀ½ URLÀ» »ç¿ëÇØ¾ß ÇÑ´Ù:</p>
-
- <example>
- http://127.0.0.1/
- </example>
-
- <p>±âº» ¼³Ä¡°¡ µ¿ÀÛÇϸé <code>conf</code> ÇÏÀ§µð·ºÅ丮¿¡
- ÀÖ´Â ÆÄÀÏÀ» ÀûÀýÈ÷ ¼³Á¤ÇÑ´Ù. ¶Ç, Windows NT ¾ÆÆÄÄ¡ service
- ¼³Á¤À» ¼öÁ¤ÇÑ °æ¿ì ¸ÕÀú ¸í·ÉÇà¿¡¼­ ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇÏ¿© ¿À·ù°¡
- ¹ß»ýÇÏÁö¾Ê´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡°¡ ´Ù¸¥ TCP/IP ÇÁ·Î±×·¥°ú °°Àº Æ÷Æ®¸¦ °øÀ¯ÇÒ ¼ö
- <strong>¾ø±â¶§¹®¿¡</strong> ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϱâ Àü¿¡ ´Ù¸¥
- ¼­ºñ½º¸¦ Áß´Ü, Á¦°Å, Àç¼³Á¤ÇØ¾ß ÇÒÁöµµ ¸ð¸¥´Ù. ´Ù¸¥ À¥¼­¹ö³ª
- ƯÁ¤ ¹æÈ­º® ¼­¹ö½º¿Í Ãæµ¹ÇÒ ¼ö ÀÖ´Ù.
- </p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/platform/windows.xml.meta b/docs/manual/platform/windows.xml.meta
deleted file mode 100644
index 0c4086a8d9..0000000000
--- a/docs/manual/platform/windows.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>windows</basename>
- <path>/platform/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/.cvsignore b/docs/manual/programs/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/programs/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/programs/ab.html b/docs/manual/programs/ab.html
deleted file mode 100644
index 3ba123c454..0000000000
--- a/docs/manual/programs/ab.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: ab.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: ab.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/ab.html.en b/docs/manual/programs/ab.html.en
deleted file mode 100644
index adbe4952a5..0000000000
--- a/docs/manual/programs/ab.html.en
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ab - Apache HTTP server benchmarking tool - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>ab - Apache HTTP server benchmarking tool</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/ab.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/ab.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>ab</code> is a tool for benchmarking your Apache Hypertext
- Transfer Protocol (HTTP) server. It is designed to give you an impression
- of how your current Apache installation performs. This especially shows
- you how many requests per second your Apache installation is capable of
- serving.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#bugs">Bugs</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>ab</strong>
- [ -<strong>A</strong> <var>auth-username</var>:<var>password</var> ]
- [ -<strong>c</strong> <var>concurrency</var> ]
- [ -<strong>C</strong> <var>cookie-name</var>=<var>value</var> ]
- [ -<strong>d</strong> ]
- [ -<strong>e</strong> <var>csv-file</var> ]
- [ -<strong>g</strong> <var>gnuplot-file</var> ]
- [ -<strong>h</strong> ]
- [ -<strong>H</strong> <var>custom-header</var> ]
- [ -<strong>i</strong> ]
- [ -<strong>k</strong> ]
- [ -<strong>n</strong> <var>requests</var> ]
- [ -<strong>p</strong> <var>POST-file</var> ]
- [ -<strong>P</strong> <var>proxy-auth-username</var>:<var>password</var> ]
- [ -<strong>q</strong> ]
- [ -<strong>s</strong> ]
- [ -<strong>S</strong> ]
- [ -<strong>t</strong> <var>timelimit</var> ]
- [ -<strong>T</strong> <var>content-type</var> ]
- [ -<strong>v</strong> <var>verbosity</var>]
- [ -<strong>V</strong> ]
- [ -<strong>w</strong> ]
- [ -<strong>x</strong> <var>&lt;table&gt;-attributes</var> ]
- [ -<strong>X</strong> <var>proxy</var>[:<var>port</var>] ]
- [ -<strong>y</strong> <var>&lt;tr&gt;-attributes</var> ]
- [ -<strong>z</strong> <var>&lt;td&gt;-attributes</var> ]
- [http://]<var>hostname</var>[:<var>port</var>]/<var>path</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
- <dl>
- <dt><code>-A <var>auth-username</var>:<var>password</var></code></dt>
- <dd>Supply BASIC Authentication credentials to the server. The username and
- password are separated by a single <code>:</code> and sent on the wire
- base64 encoded. The string is sent regardless of whether the server needs
- it (<em>i.e.</em>, has sent an 401 authentication needed).</dd>
-
- <dt><code>-c <var>concurrency</var></code></dt>
- <dd>Number of multiple requests to perform at a time. Default is one
- request at a time.</dd>
-
- <dt><code>-C <var>cookie-name</var>=<var>value</var></code></dt>
- <dd>Add a <code>Cookie:</code> line to the request. The argument is
- typically in the form of a <code><var>name</var>=<var>value</var></code>
- pair. This field is repeatable.</dd>
-
- <dt><code>-d</code></dt>
- <dd>Do not display the "percentage served within XX [ms] table". (legacy
- support).</dd>
-
- <dt><code>-e <var>csv-file</var></code></dt>
- <dd>Write a Comma separated value (CSV) file which contains for each
- percentage (from 1% to 100%) the time (in milliseconds) it took to serve
- that percentage of the requests. This is usually more useful than the
- 'gnuplot' file; as the results are already 'binned'.</dd>
-
- <dt><code>-g <var>gnuplot-file</var></code></dt>
- <dd>Write all measured values out as a 'gnuplot' or TSV (Tab separate
- values) file. This file can easily be imported into packages like Gnuplot,
- IDL, Mathematica, Igor or even Excell. The labels are on the first line of
- the file. </dd>
-
- <dt><code>-h</code></dt>
- <dd>Display usage information.</dd>
-
- <dt><code>-H <var>custom-header</var></code></dt>
- <dd>Append extra headers to the request. The argument is typically in
- the form of a valid header line, containing a colon-separated field-value
- pair (<em>i.e.</em>, <code>"Accept-Encoding: zip/zop;8bit"</code>).</dd>
-
- <dt><code>-i</code></dt>
- <dd>Do <code>HEAD</code> requests instead of <code>GET</code>.</dd>
-
- <dt><code>-k</code></dt>
- <dd>Enable the HTTP KeepAlive feature, <em>i.e.</em>, perform multiple
- requests within one HTTP session. Default is no KeepAlive.</dd>
-
- <dt><code>-n <var>requests</var></code></dt>
- <dd>Number of requests to perform for the benchmarking session. The default
- is to just perform a single request which usually leads to
- non-representative benchmarking results.</dd>
-
- <dt><code>-p <var>POST-file</var></code></dt>
- <dd>File containing data to POST.</dd>
-
- <dt><code>-P <var>proxy-auth-username</var>:<var>password</var></code></dt>
- <dd>Supply BASIC Authentication credentials to a proxy en-route. The
- username and password are separated by a single <code>:</code> and sent on
- the wire base64 encoded. The string is sent regardless of whether the
- proxy needs it (<em>i.e.</em>, has sent an 407 proxy authentication
- needed).</dd>
-
- <dt><code>-q</code></dt>
- <dd>When processing more than 150 requests, <code>ab</code> outputs a
- progress count on <code>stderr</code> every 10% or 100 requests or so. The
- <code>-q</code> flag will suppress these messages.</dd>
-
- <dt><code>-s</code></dt>
- <dd>When compiled in (<code>ab -h</code> will show you) use the SSL
- protected <code>https</code> rather than the <code>http</code> protocol.
- This feature is experimental and <em>very</em> rudimentary. You probably
- do not want to use it.</dd>
-
- <dt><code>-S</code></dt>
- <dd>Do not display the median and standard deviation values, nor display
- the warning/error messages when the average and median are more than
- one or two times the standard deviation apart. And default to the
- min/avg/max values. (legacy support).</dd>
-
- <dt><code>-t <var>timelimit</var></code></dt>
- <dd>Maximum number of seconds to spend for benchmarking. This implies a
- <code>-n 50000</code> internally. Use this to benchmark the server within a
- fixed total amount of time. Per default there is no timelimit.</dd>
-
- <dt><code>-T <var>content-type</var></code></dt>
- <dd>Content-type header to use for POST data.</dd>
-
- <dt><code>-v <var>verbosity</var></code></dt>
- <dd>Set verbosity level - <code>4</code> and above prints information on
- headers, <code>3</code> and above prints response codes (404, 200, etc.),
- <code>2</code> and above prints warnings and info.</dd>
-
- <dt><code>-V</code></dt>
- <dd>Display version number and exit.</dd>
-
- <dt><code>-w</code></dt>
- <dd>Print out results in HTML tables. Default table is two columns wide,
- with a white background.</dd>
-
- <dt><code>-x <var>&lt;table&gt;-attributes</var></code></dt>
- <dd>String to use as attributes for <code>&lt;table&gt;</code>. Attributes
- are inserted <code>&lt;table <var>here</var> &gt;</code>.</dd>
-
- <dt><code>-X <var>proxy</var>[:<var>port</var>]</code></dt>
- <dd>Use a proxy server for the requests.</dd>
-
- <dt><code>-y <var>&lt;tr&gt;-attributes</var></code></dt>
- <dd>String to use as attributes for <code>&lt;tr&gt;</code>.</dd>
-
- <dt><code>-z <var>&lt;td&gt;-attributes</var></code></dt>
- <dd>String to use as attributes for <code>&lt;td&gt;</code>.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="bugs" id="bugs">Bugs</a></h2>
- <p>There are various statically declared buffers of fixed length. Combined
- with the lazy parsing of the command line arguments, the response headers
- from the server and other external inputs, this might bite you.</p>
-
- <p>It does not implement HTTP/1.x fully; only accepts some 'expected' forms
- of responses. The rather heavy use of <code>strstr(3)</code> shows up top
- in profile, which might indicate a performance problem; <em>i.e.</em>, you
- would measure the <code>ab</code> performance rather than the server's.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/ab.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/ab.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/ab.html.ko.euc-kr b/docs/manual/programs/ab.html.ko.euc-kr
deleted file mode 100644
index 203977a446..0000000000
--- a/docs/manual/programs/ab.html.ko.euc-kr
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ab - ¾ÆÆÄÄ¡ À¥¼­¹ö ¼º´É°Ë»ç µµ±¸ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>ab - ¾ÆÆÄÄ¡ À¥¼­¹ö ¼º´É°Ë»ç µµ±¸</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/ab.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/ab.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>ab</code>´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ (HTTP)
- ¼­¹öÀÇ ¼º´ÉÀ» °Ë»çÇÏ´Â(benchmarking) µµ±¸ÀÌ´Ù. ÇöÀç ¾ÆÆÄÄ¡°¡
- ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Ë·ÁÁØ´Ù. ƯÈ÷ ¾ÆÆÄÄ¡°¡ ÇöÀç ÃÊ´ç ¸î°³ÀÇ
- ¿äûÀ» ¼­ºñ½ºÇÏ´ÂÁö ¾Ë·ÁÁØ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#bugs">¹ö±×</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>ab</strong>
- [ -<strong>A</strong> <var>auth-username</var>:<var>password</var> ]
- [ -<strong>c</strong> <var>concurrency</var> ]
- [ -<strong>C</strong> <var>cookie-name</var>=<var>value</var> ]
- [ -<strong>d</strong> ]
- [ -<strong>e</strong> <var>csv-file</var> ]
- [ -<strong>g</strong> <var>gnuplot-file</var> ]
- [ -<strong>h</strong> ]
- [ -<strong>H</strong> <var>custom-header</var> ]
- [ -<strong>i</strong> ]
- [ -<strong>k</strong> ]
- [ -<strong>n</strong> <var>requests</var> ]
- [ -<strong>p</strong> <var>POST-file</var> ]
- [ -<strong>P</strong> <var>proxy-auth-username</var>:<var>password</var> ]
- [ -<strong>q</strong> ]
- [ -<strong>s</strong> ]
- [ -<strong>S</strong> ]
- [ -<strong>t</strong> <var>timelimit</var> ]
- [ -<strong>T</strong> <var>content-type</var> ]
- [ -<strong>v</strong> <var>verbosity</var>]
- [ -<strong>V</strong> ]
- [ -<strong>w</strong> ]
- [ -<strong>x</strong> <var>&lt;table&gt;-attributes</var> ]
- [ -<strong>X</strong> <var>proxy</var>[:<var>port</var>] ]
- [ -<strong>y</strong> <var>&lt;tr&gt;-attributes</var> ]
- [ -<strong>z</strong> <var>&lt;td&gt;-attributes</var> ]
- [http://]<var>hostname</var>[:<var>port</var>]/<var>path</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
- <dl>
- <dt><code>-A <var>auth-username</var>:<var>password</var></code></dt>
- <dd>¼­¹ö¿¡°Ô BASIC Authentication Á¤º¸¸¦ Á¦°øÇÑ´Ù.
- <code>:</code>À¸·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ base64 ÀÎÄÚµùÇÏ¿©
- Àü¼ÛÇÑ´Ù. ¼­¹ö°¡ Á¤º¸¸¦ ¿ä±¸ÇÏ´ÂÁö (<em>¿¹¸¦ µé¾î</em>,
- 401 ÀÎÁõ Çʿ並 º¸³»´ÂÁö) °ü°è¾øÀÌ ¹®ÀÚ¿­À» Àü¼ÛÇÑ´Ù.</dd>
-
- <dt><code>-c <var>concurrency</var></code></dt>
- <dd>µ¿½Ã¿¡ ¿äûÇÏ´Â ¿äû¼ö. ±âº»ÀûÀ¸·Î Çѹø¿¡ ÇÑ ¿äû¸¸À»
- º¸³½´Ù.</dd>
-
- <dt><code>-C <var>cookie-name</var>=<var>value</var></code></dt>
- <dd>¿äû¿¡ <code>Cookie:</code> Çì´õ¸¦ Ãß°¡ÇÑ´Ù. ¾Æ±Ô¸ÕÆ®´Â
- º¸Åë <code><var>name</var>=<var>value</var></code>¿Í °°Àº
- ½ÖÀÌ´Ù. ÀÌ ¿É¼ÇÀº ¿©·¯¹ø »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dt><code>-d</code></dt>
- <dd>"percentage served within XX [ms] table"À» Ãâ·ÂÇÏÁö
- ¾Ê´Â´Ù. (ȣȯ¼ºÀ» À§ÇØ).</dd>
-
- <dt><code>-e <var>csv-file</var></code></dt>
- <dd>¿äûÀ» ó¸®Çϴµ¥ °É¸° (¹Ð¸®ÃÊ ´ÜÀ§) ½Ã°£µéÀÇ (1%¿¡¼­
- 100%) ´©Àû¹éºÐÀ²À» ½°Ç¥·Î ±¸ºÐÇÑ Çü½Ä(CSV)À¸·Î Ãâ·ÂÇÑ´Ù.
- °á°ú¸¦ ÀÌ¹Ì 'Á¤¸®'ÇÏ¿´±â¶§¹®¿¡ 'gnuplot' ÆÄÀϺ¸´Ù º¸Åë ´õ
- À¯¿ëÇÏ´Ù.</dd>
-
- <dt><code>-g <var>gnuplot-file</var></code></dt>
- <dd>ÃøÁ¤ÇÑ ¸ðµç °ªÀ» 'gnuplot' ȤÀº TSV (Tab separate values,
- ÅÇÀ¸·Î ±¸ºÐÇÑ °ª) ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù. Gnuplot, IDL, Mathematica,
- Igor, ½ÉÁö¾î Excell °°Àº ÇÁ·Î±×·¥¿¡¼­µµ ÀÌ·± ÆÄÀÏÀ» ½±°Ô
- ÀÐÀ» ¼ö ÀÖ´Ù. ÆÄÀÏÀÇ Ã¹¹ø° ÁÙ¿¡ Ç׸ñÀ̸§ÀÌ ³ª¿Â´Ù. </dd>
-
- <dt><code>-h</code></dt>
- <dd>»ç¿ë¹ýÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt><code>-H <var>custom-header</var></code></dt>
- <dd>¿äû¿¡ Çì´õ¸¦ Ãß°¡ÇÑ´Ù. ¾Æ±Ô¸ÕÆ®´Â º¸Åë ÄÝ·ÐÀ¸·Î ±¸ºÐÇÑ
- ½ÖÀÎ (<em>¿¹¸¦ µé¾î</em>,
- <code>"Accept-Encoding: zip/zop;8bit"</code>) À¯È¿ÇÑ
- Çì´õÁÙÀÌ´Ù.</dd>
-
- <dt><code>-i</code></dt>
- <dd><code>GET</code> ´ë½Å <code>HEAD</code> ¿äûÀ» ÇÑ´Ù.</dd>
-
- <dt><code>-k</code></dt>
- <dd>HTTP KeepAlive ±â´ÉÀ» »ç¿ëÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>,
- ÇÑ HTTP ¼¼¼Ç¿¡¼­ ¿©·¯ ¿äûÀ» ÇÑ´Ù. ±âº»ÀûÀ¸·Î KeepAlive¸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-n <var>requests</var></code></dt>
- <dd>¼º´ÉÀ» °Ë»çÇϱâÀ§ÇØ º¸³»´Â ¿äû¼ö. ±âº»°ªÀ¸·Î ¿äûÀ»
- Çѹø¸¸ º¸³»±â¶§¹®¿¡ ÀϹÝÀûÀÎ ¼º´É°Ë»ç °á°ú¸¦ ¾òÀ» ¼ö ¾ø´Ù.</dd>
-
- <dt><code>-p <var>POST-file</var></code></dt>
- <dd>POST ÀÚ·á ÆÄÀÏ.</dd>
-
- <dt><code>-P <var>proxy-auth-username</var>:<var>password</var></code></dt>
- <dd>ÇÁ·Ï½Ã¸¦ ÅëÇØ BASIC Authentication Á¤º¸¸¦ Á¦°øÇÑ´Ù.
- <code>:</code>·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ base64 ÀÎÄÚµùÇÏ¿©
- Àü¼ÛÇÑ´Ù. ÇÁ·Ï½Ã°¡ Á¤º¸¸¦ ¿ä±¸ÇÏ´ÂÁö (<em>¿¹¸¦ µé¾î</em>,
- 401 ÀÎÁõ Çʿ並 º¸³»´ÂÁö) °ü°è¾øÀÌ ¹®ÀÚ¿­À» Àü¼ÛÇÑ´Ù.</dd>
-
- <dt><code>-q</code></dt>
- <dd>150°³ ÀÌ»ó ¿äûÀ» º¸³¾¶§ <code>ab</code>´Â 10% ȤÀº
- ¸Å 100 ¿äû´ç <code>Ç¥ÁØ¿À·ù</code>¿¡ ÁøÇà»óȲÀ» Ãâ·ÂÇÑ´Ù.
- <code>-q</code> ¿É¼ÇÀº ÀÌ ¹®±¸¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-s</code></dt>
- <dd>±â´ÉÀ» Ãß°¡ÇÏ¿© ÄÄÆÄÀÏÇÏ¿´´Ù¸é (<code>ab -h</code>·Î
- È®ÀÎÇÒ ¼ö ÀÖ´Ù) <code>http</code> ÇÁ·ÎÅäÄÝ ´ë½Å SSLÀ» »ç¿ëÇÑ
- <code>https</code> ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù. ÀÌ ±â´ÉÀº ½ÇÇèÀûÀÌ°í
- <em>¸Å¿ì</em> ±âÃÊÀûÀÌ´Ù. ¾Æ¸¶µµ »ç¿ëÀ» ²¨·ÁÇÒ °ÍÀÌ´Ù.</dd>
-
- <dt><code>-S</code></dt>
- <dd>Áß°£°ª°ú Ç¥ÁØÆíÂ÷¸¦ Ãâ·ÂÇÏÁö ¾Ê°í, Æò±Õ°ú Áß°£°ªÀÇ Â÷ÀÌ°¡
- Ç¥ÁØÆíÂ÷º¸´Ù Å©´õ¶óµµ °æ°í/¿À·ù¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.
- ÃÖ¼Ò/Æò±Õ/ÃÖ´ë °ªÀ» Ãâ·ÂÇÑ´Ù. (ȣȯ¼ºÀ» À§ÇØ).</dd>
-
- <dt><code>-t <var>timelimit</var></code></dt>
- <dd>¼º´ÉÀ» °Ë»çÇÏ´Â ÃÖ´ë ÃÊ´ÜÀ§ ½Ã°£. ³»ºÎÀûÀ¸·Î
- <code>-n 50000</code>À» °¡Á¤ÇÑ´Ù. Á¤ÇØÁø ½Ã°£µ¿¾È ¼­¹ö ¼º´ÉÀ»
- °Ë»çÇÒ¶§ »ç¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î ½Ã°£Á¦ÇÑ ¾øÀÌ °Ë»çÇÑ´Ù.</dd>
-
- <dt><code>-T <var>content-type</var></code></dt>
- <dd>POST ÀÚ·áÀÇ Content-type Çì´õ.</dd>
-
- <dt><code>-v <var>verbosity</var></code></dt>
- <dd>Ãâ·ÂÀÇ ÀÚ¼¼ÇÔ ¼öÁØÀ» ÁöÁ¤ÇÑ´Ù. <code>4</code> ÀÌ»óÀ̸é
- Çì´õ¿¡ ´ëÇÑ Á¤º¸¸¦, <code>3</code> ÀÌ»óÀ̸é (404, 202, µî)
- ÀÀ´äÄڵ带, <code>2</code> ÀÌ»óÀÌ¸é °æ°í(warning)¿Í
- Á¤º¸(info)¸¦ Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt><code>-V</code></dt>
- <dd>¹öÀüÀ» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.</dd>
-
- <dt><code>-w</code></dt>
- <dd>°á°ú¸¦ HTML Ç¥·Î Ãâ·ÂÇÑ´Ù. ±âº»ÀûÀ¸·Î Ç¥¸¦ Èò ¹è°æ¿¡
- µÎ ¿­·Î ÀÛ¼ºÇÑ´Ù.</dd>
-
- <dt><code>-x <var>&lt;table&gt;-attributes</var></code></dt>
- <dd><code>&lt;table&gt;</code>ÀÇ ¼Ó¼ºÀ¸·Î »ç¿ëÇÒ ¹®ÀÚ¿­.
- ¼Ó¼ºÀ» <code>&lt;table <var>¿©±â¿¡</var> &gt;</code>
- Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-X <var>proxy</var>[:<var>port</var>]</code></dt>
- <dd>ÇÁ·Ï½Ã ¼­¹ö¸¦ »ç¿ëÇÏ¿© ¿äûÇÑ´Ù.</dd>
-
- <dt><code>-y <var>&lt;tr&gt;-attributes</var></code></dt>
- <dd><code>&lt;tr&gt;</code>ÀÇ ¼Ó¼ºÀ¸·Î »ç¿ëÇÒ ¹®ÀÚ¿­.</dd>
-
- <dt><code>-z <var>&lt;td&gt;-attributes</var></code></dt>
- <dd><code>&lt;td&gt;</code>ÀÇ ¼Ó¼ºÀ¸·Î »ç¿ëÇÒ ¹®ÀÚ¿­.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="bugs" id="bugs">¹ö±×</a></h2>
- <p>Á¤ÀûÀ¸·Î ±æÀÌ°¡ °íÁ¤µÈ ¹öÆÛ¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù. ¸í·ÉÇà
- ¾Æ±Ô¸ÕÆ®, ¼­¹öÀÇ ÀÀ´ä Çì´õ, ´Ù¸¥ ¿ÜºÎ ÀԷµéÀ» °°ÀÌ
- ÀоîµéÀ̸鼭 ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ ÇÁ·Î±×·¥Àº HTTP/1.x¸¦ ¿ÏÀüÈ÷ ±¸ÇöÇÏÁö ¾Ê´Â´Ù; ´ÜÁö
- '±â´ëÇÏ´Â' Çü½ÄÀÇ ÀÀ´ä¸¸À» ¹Þ´Â´Ù. <code>strstr(3)</code>À»
- ¸Å¿ì ¸¹ÀÌ »ç¿ë±â¶§¹®¿¡ ¼Óµµ°¡ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù; <em>Áï</em>,
- ¼­¹ö ¼º´Éº¸´Ù´Â <code>ab</code> ¼º´ÉÀ» ÃøÁ¤ÇÏ°Ô µÉ ¼öµµ
- ÀÖ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/ab.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/ab.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/ab.xml b/docs/manual/programs/ab.xml
deleted file mode 100644
index ac56a6cfaf..0000000000
--- a/docs/manual/programs/ab.xml
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ab.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>ab - Apache HTTP server benchmarking tool</title>
-
-<summary>
- <p><code>ab</code> is a tool for benchmarking your Apache Hypertext
- Transfer Protocol (HTTP) server. It is designed to give you an impression
- of how your current Apache installation performs. This especially shows
- you how many requests per second your Apache installation is capable of
- serving.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>ab</strong>
- [ -<strong>A</strong> <var>auth-username</var>:<var>password</var> ]
- [ -<strong>c</strong> <var>concurrency</var> ]
- [ -<strong>C</strong> <var>cookie-name</var>=<var>value</var> ]
- [ -<strong>d</strong> ]
- [ -<strong>e</strong> <var>csv-file</var> ]
- [ -<strong>g</strong> <var>gnuplot-file</var> ]
- [ -<strong>h</strong> ]
- [ -<strong>H</strong> <var>custom-header</var> ]
- [ -<strong>i</strong> ]
- [ -<strong>k</strong> ]
- [ -<strong>n</strong> <var>requests</var> ]
- [ -<strong>p</strong> <var>POST-file</var> ]
- [ -<strong>P</strong> <var>proxy-auth-username</var>:<var>password</var> ]
- [ -<strong>q</strong> ]
- [ -<strong>s</strong> ]
- [ -<strong>S</strong> ]
- [ -<strong>t</strong> <var>timelimit</var> ]
- [ -<strong>T</strong> <var>content-type</var> ]
- [ -<strong>v</strong> <var>verbosity</var>]
- [ -<strong>V</strong> ]
- [ -<strong>w</strong> ]
- [ -<strong>x</strong> <var>&lt;table&gt;-attributes</var> ]
- [ -<strong>X</strong> <var>proxy</var>[:<var>port</var>] ]
- [ -<strong>y</strong> <var>&lt;tr&gt;-attributes</var> ]
- [ -<strong>z</strong> <var>&lt;td&gt;-attributes</var> ]
- [http://]<var>hostname</var>[:<var>port</var>]/<var>path</var></code></p>
-</section>
-
-<section id="options"><title>Options</title>
- <dl>
- <dt><code>-A <var>auth-username</var>:<var>password</var></code></dt>
- <dd>Supply BASIC Authentication credentials to the server. The username and
- password are separated by a single <code>:</code> and sent on the wire
- base64 encoded. The string is sent regardless of whether the server needs
- it (<em>i.e.</em>, has sent an 401 authentication needed).</dd>
-
- <dt><code>-c <var>concurrency</var></code></dt>
- <dd>Number of multiple requests to perform at a time. Default is one
- request at a time.</dd>
-
- <dt><code>-C <var>cookie-name</var>=<var>value</var></code></dt>
- <dd>Add a <code>Cookie:</code> line to the request. The argument is
- typically in the form of a <code><var>name</var>=<var>value</var></code>
- pair. This field is repeatable.</dd>
-
- <dt><code>-d</code></dt>
- <dd>Do not display the "percentage served within XX [ms] table". (legacy
- support).</dd>
-
- <dt><code>-e <var>csv-file</var></code></dt>
- <dd>Write a Comma separated value (CSV) file which contains for each
- percentage (from 1% to 100%) the time (in milliseconds) it took to serve
- that percentage of the requests. This is usually more useful than the
- 'gnuplot' file; as the results are already 'binned'.</dd>
-
- <dt><code>-g <var>gnuplot-file</var></code></dt>
- <dd>Write all measured values out as a 'gnuplot' or TSV (Tab separate
- values) file. This file can easily be imported into packages like Gnuplot,
- IDL, Mathematica, Igor or even Excell. The labels are on the first line of
- the file. </dd>
-
- <dt><code>-h</code></dt>
- <dd>Display usage information.</dd>
-
- <dt><code>-H <var>custom-header</var></code></dt>
- <dd>Append extra headers to the request. The argument is typically in
- the form of a valid header line, containing a colon-separated field-value
- pair (<em>i.e.</em>, <code>"Accept-Encoding: zip/zop;8bit"</code>).</dd>
-
- <dt><code>-i</code></dt>
- <dd>Do <code>HEAD</code> requests instead of <code>GET</code>.</dd>
-
- <dt><code>-k</code></dt>
- <dd>Enable the HTTP KeepAlive feature, <em>i.e.</em>, perform multiple
- requests within one HTTP session. Default is no KeepAlive.</dd>
-
- <dt><code>-n <var>requests</var></code></dt>
- <dd>Number of requests to perform for the benchmarking session. The default
- is to just perform a single request which usually leads to
- non-representative benchmarking results.</dd>
-
- <dt><code>-p <var>POST-file</var></code></dt>
- <dd>File containing data to POST.</dd>
-
- <dt><code>-P <var>proxy-auth-username</var>:<var>password</var></code></dt>
- <dd>Supply BASIC Authentication credentials to a proxy en-route. The
- username and password are separated by a single <code>:</code> and sent on
- the wire base64 encoded. The string is sent regardless of whether the
- proxy needs it (<em>i.e.</em>, has sent an 407 proxy authentication
- needed).</dd>
-
- <dt><code>-q</code></dt>
- <dd>When processing more than 150 requests, <code>ab</code> outputs a
- progress count on <code>stderr</code> every 10% or 100 requests or so. The
- <code>-q</code> flag will suppress these messages.</dd>
-
- <dt><code>-s</code></dt>
- <dd>When compiled in (<code>ab -h</code> will show you) use the SSL
- protected <code>https</code> rather than the <code>http</code> protocol.
- This feature is experimental and <em>very</em> rudimentary. You probably
- do not want to use it.</dd>
-
- <dt><code>-S</code></dt>
- <dd>Do not display the median and standard deviation values, nor display
- the warning/error messages when the average and median are more than
- one or two times the standard deviation apart. And default to the
- min/avg/max values. (legacy support).</dd>
-
- <dt><code>-t <var>timelimit</var></code></dt>
- <dd>Maximum number of seconds to spend for benchmarking. This implies a
- <code>-n 50000</code> internally. Use this to benchmark the server within a
- fixed total amount of time. Per default there is no timelimit.</dd>
-
- <dt><code>-T <var>content-type</var></code></dt>
- <dd>Content-type header to use for POST data.</dd>
-
- <dt><code>-v <var>verbosity</var></code></dt>
- <dd>Set verbosity level - <code>4</code> and above prints information on
- headers, <code>3</code> and above prints response codes (404, 200, etc.),
- <code>2</code> and above prints warnings and info.</dd>
-
- <dt><code>-V</code></dt>
- <dd>Display version number and exit.</dd>
-
- <dt><code>-w</code></dt>
- <dd>Print out results in HTML tables. Default table is two columns wide,
- with a white background.</dd>
-
- <dt><code>-x <var>&lt;table&gt;-attributes</var></code></dt>
- <dd>String to use as attributes for <code>&lt;table&gt;</code>. Attributes
- are inserted <code>&lt;table <var>here</var> &gt;</code>.</dd>
-
- <dt><code>-X <var>proxy</var>[:<var>port</var>]</code></dt>
- <dd>Use a proxy server for the requests.</dd>
-
- <dt><code>-y <var>&lt;tr&gt;-attributes</var></code></dt>
- <dd>String to use as attributes for <code>&lt;tr&gt;</code>.</dd>
-
- <dt><code>-z <var>&lt;td&gt;-attributes</var></code></dt>
- <dd>String to use as attributes for <code>&lt;td&gt;</code>.</dd>
- </dl>
-</section>
-
-<section id="bugs"><title>Bugs</title>
- <p>There are various statically declared buffers of fixed length. Combined
- with the lazy parsing of the command line arguments, the response headers
- from the server and other external inputs, this might bite you.</p>
-
- <p>It does not implement HTTP/1.x fully; only accepts some 'expected' forms
- of responses. The rather heavy use of <code>strstr(3)</code> shows up top
- in profile, which might indicate a performance problem; <em>i.e.</em>, you
- would measure the <code>ab</code> performance rather than the server's.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/ab.xml.ko b/docs/manual/programs/ab.xml.ko
deleted file mode 100644
index 09dda2dba2..0000000000
--- a/docs/manual/programs/ab.xml.ko
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ab.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>ab - ¾ÆÆÄÄ¡ À¥¼­¹ö ¼º´É°Ë»ç µµ±¸</title>
-
-<summary>
- <p><code>ab</code>´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ (HTTP)
- ¼­¹öÀÇ ¼º´ÉÀ» °Ë»çÇÏ´Â(benchmarking) µµ±¸ÀÌ´Ù. ÇöÀç ¾ÆÆÄÄ¡°¡
- ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Ë·ÁÁØ´Ù. ƯÈ÷ ¾ÆÆÄÄ¡°¡ ÇöÀç ÃÊ´ç ¸î°³ÀÇ
- ¿äûÀ» ¼­ºñ½ºÇÏ´ÂÁö ¾Ë·ÁÁØ´Ù.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>ab</strong>
- [ -<strong>A</strong> <var>auth-username</var>:<var>password</var> ]
- [ -<strong>c</strong> <var>concurrency</var> ]
- [ -<strong>C</strong> <var>cookie-name</var>=<var>value</var> ]
- [ -<strong>d</strong> ]
- [ -<strong>e</strong> <var>csv-file</var> ]
- [ -<strong>g</strong> <var>gnuplot-file</var> ]
- [ -<strong>h</strong> ]
- [ -<strong>H</strong> <var>custom-header</var> ]
- [ -<strong>i</strong> ]
- [ -<strong>k</strong> ]
- [ -<strong>n</strong> <var>requests</var> ]
- [ -<strong>p</strong> <var>POST-file</var> ]
- [ -<strong>P</strong> <var>proxy-auth-username</var>:<var>password</var> ]
- [ -<strong>q</strong> ]
- [ -<strong>s</strong> ]
- [ -<strong>S</strong> ]
- [ -<strong>t</strong> <var>timelimit</var> ]
- [ -<strong>T</strong> <var>content-type</var> ]
- [ -<strong>v</strong> <var>verbosity</var>]
- [ -<strong>V</strong> ]
- [ -<strong>w</strong> ]
- [ -<strong>x</strong> <var>&lt;table&gt;-attributes</var> ]
- [ -<strong>X</strong> <var>proxy</var>[:<var>port</var>] ]
- [ -<strong>y</strong> <var>&lt;tr&gt;-attributes</var> ]
- [ -<strong>z</strong> <var>&lt;td&gt;-attributes</var> ]
- [http://]<var>hostname</var>[:<var>port</var>]/<var>path</var></code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
- <dl>
- <dt><code>-A <var>auth-username</var>:<var>password</var></code></dt>
- <dd>¼­¹ö¿¡°Ô BASIC Authentication Á¤º¸¸¦ Á¦°øÇÑ´Ù.
- <code>:</code>À¸·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ base64 ÀÎÄÚµùÇÏ¿©
- Àü¼ÛÇÑ´Ù. ¼­¹ö°¡ Á¤º¸¸¦ ¿ä±¸ÇÏ´ÂÁö (<em>¿¹¸¦ µé¾î</em>,
- 401 ÀÎÁõ Çʿ並 º¸³»´ÂÁö) °ü°è¾øÀÌ ¹®ÀÚ¿­À» Àü¼ÛÇÑ´Ù.</dd>
-
- <dt><code>-c <var>concurrency</var></code></dt>
- <dd>µ¿½Ã¿¡ ¿äûÇÏ´Â ¿äû¼ö. ±âº»ÀûÀ¸·Î Çѹø¿¡ ÇÑ ¿äû¸¸À»
- º¸³½´Ù.</dd>
-
- <dt><code>-C <var>cookie-name</var>=<var>value</var></code></dt>
- <dd>¿äû¿¡ <code>Cookie:</code> Çì´õ¸¦ Ãß°¡ÇÑ´Ù. ¾Æ±Ô¸ÕÆ®´Â
- º¸Åë <code><var>name</var>=<var>value</var></code>¿Í °°Àº
- ½ÖÀÌ´Ù. ÀÌ ¿É¼ÇÀº ¿©·¯¹ø »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
-
- <dt><code>-d</code></dt>
- <dd>"percentage served within XX [ms] table"À» Ãâ·ÂÇÏÁö
- ¾Ê´Â´Ù. (ȣȯ¼ºÀ» À§ÇØ).</dd>
-
- <dt><code>-e <var>csv-file</var></code></dt>
- <dd>¿äûÀ» ó¸®Çϴµ¥ °É¸° (¹Ð¸®ÃÊ ´ÜÀ§) ½Ã°£µéÀÇ (1%¿¡¼­
- 100%) ´©Àû¹éºÐÀ²À» ½°Ç¥·Î ±¸ºÐÇÑ Çü½Ä(CSV)À¸·Î Ãâ·ÂÇÑ´Ù.
- °á°ú¸¦ ÀÌ¹Ì 'Á¤¸®'ÇÏ¿´±â¶§¹®¿¡ 'gnuplot' ÆÄÀϺ¸´Ù º¸Åë ´õ
- À¯¿ëÇÏ´Ù.</dd>
-
- <dt><code>-g <var>gnuplot-file</var></code></dt>
- <dd>ÃøÁ¤ÇÑ ¸ðµç °ªÀ» 'gnuplot' ȤÀº TSV (Tab separate values,
- ÅÇÀ¸·Î ±¸ºÐÇÑ °ª) ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù. Gnuplot, IDL, Mathematica,
- Igor, ½ÉÁö¾î Excell °°Àº ÇÁ·Î±×·¥¿¡¼­µµ ÀÌ·± ÆÄÀÏÀ» ½±°Ô
- ÀÐÀ» ¼ö ÀÖ´Ù. ÆÄÀÏÀÇ Ã¹¹ø° ÁÙ¿¡ Ç׸ñÀ̸§ÀÌ ³ª¿Â´Ù. </dd>
-
- <dt><code>-h</code></dt>
- <dd>»ç¿ë¹ýÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt><code>-H <var>custom-header</var></code></dt>
- <dd>¿äû¿¡ Çì´õ¸¦ Ãß°¡ÇÑ´Ù. ¾Æ±Ô¸ÕÆ®´Â º¸Åë ÄÝ·ÐÀ¸·Î ±¸ºÐÇÑ
- ½ÖÀÎ (<em>¿¹¸¦ µé¾î</em>,
- <code>"Accept-Encoding: zip/zop;8bit"</code>) À¯È¿ÇÑ
- Çì´õÁÙÀÌ´Ù.</dd>
-
- <dt><code>-i</code></dt>
- <dd><code>GET</code> ´ë½Å <code>HEAD</code> ¿äûÀ» ÇÑ´Ù.</dd>
-
- <dt><code>-k</code></dt>
- <dd>HTTP KeepAlive ±â´ÉÀ» »ç¿ëÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>,
- ÇÑ HTTP ¼¼¼Ç¿¡¼­ ¿©·¯ ¿äûÀ» ÇÑ´Ù. ±âº»ÀûÀ¸·Î KeepAlive¸¦
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-n <var>requests</var></code></dt>
- <dd>¼º´ÉÀ» °Ë»çÇϱâÀ§ÇØ º¸³»´Â ¿äû¼ö. ±âº»°ªÀ¸·Î ¿äûÀ»
- Çѹø¸¸ º¸³»±â¶§¹®¿¡ ÀϹÝÀûÀÎ ¼º´É°Ë»ç °á°ú¸¦ ¾òÀ» ¼ö ¾ø´Ù.</dd>
-
- <dt><code>-p <var>POST-file</var></code></dt>
- <dd>POST ÀÚ·á ÆÄÀÏ.</dd>
-
- <dt><code>-P <var>proxy-auth-username</var>:<var>password</var></code></dt>
- <dd>ÇÁ·Ï½Ã¸¦ ÅëÇØ BASIC Authentication Á¤º¸¸¦ Á¦°øÇÑ´Ù.
- <code>:</code>·Î ±¸ºÐÇÑ »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ base64 ÀÎÄÚµùÇÏ¿©
- Àü¼ÛÇÑ´Ù. ÇÁ·Ï½Ã°¡ Á¤º¸¸¦ ¿ä±¸ÇÏ´ÂÁö (<em>¿¹¸¦ µé¾î</em>,
- 401 ÀÎÁõ Çʿ並 º¸³»´ÂÁö) °ü°è¾øÀÌ ¹®ÀÚ¿­À» Àü¼ÛÇÑ´Ù.</dd>
-
- <dt><code>-q</code></dt>
- <dd>150°³ ÀÌ»ó ¿äûÀ» º¸³¾¶§ <code>ab</code>´Â 10% ȤÀº
- ¸Å 100 ¿äû´ç <code>Ç¥ÁØ¿À·ù</code>¿¡ ÁøÇà»óȲÀ» Ãâ·ÂÇÑ´Ù.
- <code>-q</code> ¿É¼ÇÀº ÀÌ ¹®±¸¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-s</code></dt>
- <dd>±â´ÉÀ» Ãß°¡ÇÏ¿© ÄÄÆÄÀÏÇÏ¿´´Ù¸é (<code>ab -h</code>·Î
- È®ÀÎÇÒ ¼ö ÀÖ´Ù) <code>http</code> ÇÁ·ÎÅäÄÝ ´ë½Å SSLÀ» »ç¿ëÇÑ
- <code>https</code> ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù. ÀÌ ±â´ÉÀº ½ÇÇèÀûÀÌ°í
- <em>¸Å¿ì</em> ±âÃÊÀûÀÌ´Ù. ¾Æ¸¶µµ »ç¿ëÀ» ²¨·ÁÇÒ °ÍÀÌ´Ù.</dd>
-
- <dt><code>-S</code></dt>
- <dd>Áß°£°ª°ú Ç¥ÁØÆíÂ÷¸¦ Ãâ·ÂÇÏÁö ¾Ê°í, Æò±Õ°ú Áß°£°ªÀÇ Â÷ÀÌ°¡
- Ç¥ÁØÆíÂ÷º¸´Ù Å©´õ¶óµµ °æ°í/¿À·ù¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.
- ÃÖ¼Ò/Æò±Õ/ÃÖ´ë °ªÀ» Ãâ·ÂÇÑ´Ù. (ȣȯ¼ºÀ» À§ÇØ).</dd>
-
- <dt><code>-t <var>timelimit</var></code></dt>
- <dd>¼º´ÉÀ» °Ë»çÇÏ´Â ÃÖ´ë ÃÊ´ÜÀ§ ½Ã°£. ³»ºÎÀûÀ¸·Î
- <code>-n 50000</code>À» °¡Á¤ÇÑ´Ù. Á¤ÇØÁø ½Ã°£µ¿¾È ¼­¹ö ¼º´ÉÀ»
- °Ë»çÇÒ¶§ »ç¿ëÇÑ´Ù. ±âº»ÀûÀ¸·Î ½Ã°£Á¦ÇÑ ¾øÀÌ °Ë»çÇÑ´Ù.</dd>
-
- <dt><code>-T <var>content-type</var></code></dt>
- <dd>POST ÀÚ·áÀÇ Content-type Çì´õ.</dd>
-
- <dt><code>-v <var>verbosity</var></code></dt>
- <dd>Ãâ·ÂÀÇ ÀÚ¼¼ÇÔ ¼öÁØÀ» ÁöÁ¤ÇÑ´Ù. <code>4</code> ÀÌ»óÀ̸é
- Çì´õ¿¡ ´ëÇÑ Á¤º¸¸¦, <code>3</code> ÀÌ»óÀ̸é (404, 202, µî)
- ÀÀ´äÄڵ带, <code>2</code> ÀÌ»óÀÌ¸é °æ°í(warning)¿Í
- Á¤º¸(info)¸¦ Ãâ·ÂÇÑ´Ù.</dd>
-
- <dt><code>-V</code></dt>
- <dd>¹öÀüÀ» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.</dd>
-
- <dt><code>-w</code></dt>
- <dd>°á°ú¸¦ HTML Ç¥·Î Ãâ·ÂÇÑ´Ù. ±âº»ÀûÀ¸·Î Ç¥¸¦ Èò ¹è°æ¿¡
- µÎ ¿­·Î ÀÛ¼ºÇÑ´Ù.</dd>
-
- <dt><code>-x <var>&lt;table&gt;-attributes</var></code></dt>
- <dd><code>&lt;table&gt;</code>ÀÇ ¼Ó¼ºÀ¸·Î »ç¿ëÇÒ ¹®ÀÚ¿­.
- ¼Ó¼ºÀ» <code>&lt;table <var>¿©±â¿¡</var> &gt;</code>
- Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-X <var>proxy</var>[:<var>port</var>]</code></dt>
- <dd>ÇÁ·Ï½Ã ¼­¹ö¸¦ »ç¿ëÇÏ¿© ¿äûÇÑ´Ù.</dd>
-
- <dt><code>-y <var>&lt;tr&gt;-attributes</var></code></dt>
- <dd><code>&lt;tr&gt;</code>ÀÇ ¼Ó¼ºÀ¸·Î »ç¿ëÇÒ ¹®ÀÚ¿­.</dd>
-
- <dt><code>-z <var>&lt;td&gt;-attributes</var></code></dt>
- <dd><code>&lt;td&gt;</code>ÀÇ ¼Ó¼ºÀ¸·Î »ç¿ëÇÒ ¹®ÀÚ¿­.</dd>
- </dl>
-</section>
-
-<section id="bugs"><title>¹ö±×</title>
- <p>Á¤ÀûÀ¸·Î ±æÀÌ°¡ °íÁ¤µÈ ¹öÆÛ¸¦ ¸¹ÀÌ »ç¿ëÇÑ´Ù. ¸í·ÉÇà
- ¾Æ±Ô¸ÕÆ®, ¼­¹öÀÇ ÀÀ´ä Çì´õ, ´Ù¸¥ ¿ÜºÎ ÀԷµéÀ» °°ÀÌ
- ÀоîµéÀ̸鼭 ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ ÇÁ·Î±×·¥Àº HTTP/1.x¸¦ ¿ÏÀüÈ÷ ±¸ÇöÇÏÁö ¾Ê´Â´Ù; ´ÜÁö
- '±â´ëÇÏ´Â' Çü½ÄÀÇ ÀÀ´ä¸¸À» ¹Þ´Â´Ù. <code>strstr(3)</code>À»
- ¸Å¿ì ¸¹ÀÌ »ç¿ë±â¶§¹®¿¡ ¼Óµµ°¡ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù; <em>Áï</em>,
- ¼­¹ö ¼º´Éº¸´Ù´Â <code>ab</code> ¼º´ÉÀ» ÃøÁ¤ÇÏ°Ô µÉ ¼öµµ
- ÀÖ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/ab.xml.meta b/docs/manual/programs/ab.xml.meta
deleted file mode 100644
index 41fc500462..0000000000
--- a/docs/manual/programs/ab.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ab</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/apachectl.html b/docs/manual/programs/apachectl.html
deleted file mode 100644
index b3966d8d90..0000000000
--- a/docs/manual/programs/apachectl.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: apachectl.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: apachectl.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/apachectl.html.en b/docs/manual/programs/apachectl.html.en
deleted file mode 100644
index bd587e130f..0000000000
--- a/docs/manual/programs/apachectl.html.en
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>apachectl - Apache HTTP Server Control Interface - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>apachectl - Apache HTTP Server Control Interface</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/apachectl.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apachectl.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>apachectl</code> is a front end to the Apache HyperText
- Transfer Protocol (HTTP) server. It is designed to help the
- administrator control the functioning of the Apache
- <a href="httpd.html">httpd</a> daemon.</p>
-
- <p>The <code>apachectl</code> script can operate in two modes.
- First, it can act as a simple front-end to the <code>httpd</code>
- command that simply sets any necessary environment variables and
- then invokes <code>httpd</code>, passing through any command line
- arguments. Second, <code>apachectl</code> can act as a SysV init
- script, taking simple one-word arguments like <code>start</code>,
- <code>restart</code>, and <code>stop</code>, and translating them
- into appropriate signals to <code>httpd</code>.</p>
-
- <p>If your Apache installation uses non-standard paths, you will
- need to edit the <code>apachectl</code> script to set the
- appropriate paths to the <code>httpd</code> binary. You can also
- specify any necessary <code>httpd</code> command line arguments.
- See the comments in the script for details.</p>
-
- <p>The <code>apachectl</code> script returns a 0 exit value on
- success, and &gt;0 if an error occurs. For more details, view
- the comments in the script.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="../invoking.html">Starting Apache</a></li><li><a href="../stopping.html">Stopping Apache</a></li><li><a href="../configuring.html">Configuration Files</a></li><li><a href="../platform/">Platform Docs</a></li><li><a href="httpd.html">httpd</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
-
-<p>When acting in pass-through mode, <code>apachectl</code> can take
-all the arguments available for the <a href="httpd.html">httpd</a>
-binary.</p>
-
-<p><code><strong>apachectl</strong> [ <var>httpd-argument</var> ]</code></p>
-
-<p>When acting in SysV init mode, <code>apachectl</code> takes simple,
-one-word commands, defined below.</p>
-
-<p><code><strong>apachectl</strong> <var>command</var></code></p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
-
-<p>Only the SysV init-style options are defined here. Other arguments
-are defined on the <a href="httpd.html">httpd</a> manual page.</p>
-
-<dl>
-
-<dt><code>start</code></dt>
-
-<dd>Start the Apache <code>httpd</code> daemon. Gives an error if it
-is already running. This is equivalent to <code>apachectl -k
-start</code>.</dd>
-
-<dt><code>stop</code></dt>
-
-<dd>Stops the Apache <code>httpd</code> daemon. This is equivalent to
-<code>apachectl -k stop</code>.</dd>
-
-<dt><code>restart</code></dt>
-
-<dd>Restarts the Apache <code>httpd</code> daemon. If the daemon is
-not running, it is started. This command automatically checks the
-configuration files as in <code>configtest</code> before initiating
-the restart to make sure the daemon doesn't die. This is equivalent
-to <code>apachectl -k restart</code>.</dd>
-
-<dt><code>fullstatus</code></dt>
-
-<dd>Displays a full status report from <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.
-For this to work, you need to have <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> enabled
-on your server and a text-based browser such as <code>lynx</code>
-available on your system. The URL used to access the status report
-can be set by editing the <code>STATUSURL</code> variable in the
-script.</dd>
-
-<dt><code>status</code></dt>
-
-<dd>Displays a brief status report. Similar to the
-<code>fullstatus</code> option, except that the list of requests
-currently being served is omitted.</dd>
-
-<dt><code>graceful</code></dt>
-
-<dd>Gracefully restarts the Apache <code>httpd</code> daemon. If the
-daemon is not running, it is started. This differs from a normal
-restart in that currently open connections are not aborted. A side
-effect is that old log files will not be closed immediately. This
-means that if used in a log rotation script, a substantial delay may
-be necessary to ensure that the old log files are closed before
-processing them. This command automatically checks the configuration
-files as in <code>configtest</code> before initiating the
-restart to make sure Apache doesn't die. This is equivalent to
-<code>apachectl -k graceful</code>.</dd>
-
-<dt><code>configtest</code></dt>
-
-<dd>Run a configuration file syntax test. It parses the configuration
-files and either reports <code>Syntax Ok</code>
-or detailed information about the particular syntax error. This is
-equivalent to <code>apachectl -t</code>.</dd>
-
-</dl>
-
-<p>The following additional option is available, but deprecated.</p>
-
-<dl>
-
-<dt><code>startssl</code></dt>
-
-<dd>This is equivalent to <code>apachectl -k start -DSSL</code>. We
-recommend that you use that command explicitly, or you adjust your
-<code>httpd.conf</code> to remove the <code class="directive"><a href="../mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> section so that SSL will always be
-available.</dd>
-
-</dl>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/apachectl.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apachectl.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/apachectl.html.ko.euc-kr b/docs/manual/programs/apachectl.html.ko.euc-kr
deleted file mode 100644
index b562e4dc57..0000000000
--- a/docs/manual/programs/apachectl.html.ko.euc-kr
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>apachectl - ¾ÆÆÄÄ¡ À¥¼­¹ö Á¶Àý ÀÎÅÍÆäÀ̽º - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>apachectl - ¾ÆÆÄÄ¡ À¥¼­¹ö Á¶Àý ÀÎÅÍÆäÀ̽º</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/apachectl.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apachectl.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>apachectl</code>Àº ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û
- ÇÁ·ÎÅäÄÝ (HTTP) ¼­¹öÀÇ ¾Õ´ÜÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº °ü¸®ÀÚ°¡
- ¾ÆÆÄÄ¡ <a href="httpd.html">httpd</a> µ¥¸óÀ» Á¶Á¤Çϵµ·Ï
- µ½´Â´Ù.</p>
-
- <p><code>apachectl</code> ½ºÅ©¸³Æ®´Â µÎ°¡Áö ¹æ¹ýÀ¸·Î ½ÇÇàÇÑ´Ù.
- ù¹ø° ¹æ¹ýÀº <code>httpd</code>À» ºÎ¸£´Â °£´ÜÇÑ ½ºÅ©¸³Æ®
- ¿ªÇÒÀ» ÇÏ¿©, ÇÊ¿äÇÑ È¯°æº¯¼ö¸¦ ¼³Á¤ÇÏ°í ¹ÞÀº ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®¸¦
- °¡Áö°í <code>httpd</code>¸¦ ½ÇÇàÇÑ´Ù. µÎ¹ø° ¹æ¹ýÀº
- <code>apachectl</code>¸¦ SysV init ½ºÅ©¸³Æ®·Î »ç¿ëÇÏ¿©,
- <code>start</code>, <code>restart</code>, <code>stop</code>
- °°Àº ÇÑ´Ü¾î ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ¾Æ¼­ <code>httpd</code>¿¡°Ô
- ÀûÀýÇÑ ½ÅÈ£¸¦ º¸³½´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¸¦ ÀϹÝÀûÀÎ °æ·Î¿¡ ¼³Ä¡ÇÏÁö ¾Ê¾Ò´Ù¸é, ÀûÀýÇÑ
- <code>httpd</code> °æ·Î·Î <code>apachectl</code> ½ºÅ©¸³Æ®¸¦
- ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ¶Ç, <code>httpd</code> ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®¸¦
- Ãß°¡·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ½ºÅ©¸³Æ®ÀÇ ÁÖ¼®À»
- Âü°íÇ϶ó.</p>
-
- <p><code>apachectl</code> ½ºÅ©¸³Æ®´Â ¼º°ø½Ã Á¾·áÄÚµå 0À»,
- ¿À·ù½Ã &gt;0À» ¹ÝȯÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ½ºÅ©¸³Æ®ÀÇ ÁÖ¼®À»
- Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="../invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></li><li><a href="../stopping.html">¾ÆÆÄÄ¡ Áß´Ü</a></li><li><a href="../configuring.html">¼³Á¤ÆÄÀÏ</a></li><li><a href="../platform/">Ç÷¡Æû ¹®¼­</a></li><li><a href="httpd.html">httpd</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
-
-<p>°£´ÜÇÑ ½ÇÇà ½ºÅ©¸³Æ®·Î µ¿ÀÛÇϸé, <code>apachectl</code>Àº
-<a href="httpd.html">httpd</a> ½ÇÇàÆÄÀÏÀÇ ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ´Â´Ù.</p>
-
-<p><code><strong>apachectl</strong> [ <var>httpd-argument</var> ]</code></p>
-
-<p>SysV init ¹æ½ÄÀ¸·Î µ¿ÀÛÇϸé, <code>apachectl</code>Àº ¾Æ·¡¼­
-¼³¸íÇÒ °£´ÜÇÑ ÇÑ´Ü¾î ¸í·É¾î¸¦ ¹Þ´Â´Ù.</p>
-
-<p><code><strong>apachectl</strong> <var>command</var></code></p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
-
-<p>¿©±â¼­´Â SysV init-½Ä ¿É¼Ç¸¸ ¼³¸íÇÑ´Ù. ´Ù¸¥ ¿É¼ÇÀº <a href="httpd.html">httpd</a> manpage¿¡¼­ ¼³¸íÇÑ´Ù.</p>
-
-<dl>
-
-<dt><code>start</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» ½ÃÀÛÇÑ´Ù. ÀÌ¹Ì ½ÇÇàÁßÀ̶ó¸é
-¿À·ù¸¦ ³½´Ù. <code>apachectl -k start</code>¿Í °°´Ù.</dd>
-
-<dt><code>stop</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» Áß´ÜÇÑ´Ù. <code>apachectl
--k stop</code>°ú °°´Ù.</dd>
-
-<dt><code>restart</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» Àç½ÃÀÛÇÑ´Ù. µ¥¸óÀÌ ½ÇÇàÁßÀÌ
-¾Æ´Ï¶ó¸é, ½ÃÀÛÇÑ´Ù. µ¥¸óÀÌ Àç½ÃÀ۽à ½ÇÆÐÇÏÁö ¾ÊÀ½À» È®ÀÎÇϱâÀ§ÇØ
-Àç½ÃÀÛ Àü¿¡ ÀÚµ¿À¸·Î <code>configtest</code> ¸í·É°ú °°ÀÌ ¼³Á¤ÆÄÀÏÀ»
-°Ë»çÇÑ´Ù. <code>apachectl -k restart</code>¿Í °°´Ù.</dd>
-
-<dt><code>fullstatus</code></dt>
-
-<dd><code class="module"><a href="../mod/mod_status.html">mod_status</a></code>ÀÇ ¸ðµç »óÅ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
-ÀÌ ¸í·ÉÀ» »ç¿ëÇϱâÀ§Çؼ­´Â ¼­¹ö°¡ <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>¸¦
-»ç¿ëÇÏ°í, ½Ã½ºÅÛ¿¡ <code>lynx</code> °°Àº ¹®ÀÚ±â¹Ý ºê¶ó¿ìÀú°¡
-ÇÊ¿äÇÏ´Ù. »óÅ Á¤º¸¿¡ Á¢±ÙÇÏ´Â URLÀº ½ºÅ©¸³Æ®ÀÇ
-<code>STATUSURL</code> º¯¼ö¸¦ ¼öÁ¤ÇÏ¿© ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
-<dt><code>status</code></dt>
-
-<dd>°£´ÜÇÑ »óÅ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. <code>fullstatus</code> ¿É¼Ç°ú
-ºñ½ÁÇÏÁö¸¸, ÇöÀç ¼­ºñ½ºÁßÀÎ ¿äû ¸ñ·ÏÀ» Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.</dd>
-
-<dt><code>graceful</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» Á¡ÀÝ°Ô(gracefully) Àç½ÃÀÛÇÑ´Ù.
-µ¥¸óÀÌ ½ÇÇàÁßÀÌ ¾Æ´Ï¶ó¸é, ½ÃÀÛÇÑ´Ù. ÀϹÝÀûÀÎ Àç½ÃÀÛ°ú ´Þ¸® ÇöÀç
-¿­·ÁÀÖ´Â ¿¬°áÀ» ²÷Áö¾Ê´Â´Ù. ¶Ç, ÀÌÀü ·Î±×ÆÄÀÏÀ» Áï½Ã ´ÝÁö ¾Ê´Â´Ù.
-Áï, ·Î±×¼øȯ ½ºÅ©¸³Æ®¿¡¼­ ÀÌ ¸í·ÉÀ» »ç¿ëÇÑ´Ù¸é, ÀÌÀü ·Î±×ÆÄÀÏÀ»
-ó¸®ÇϱâÀü¿¡ ·Î±×ÆÄÀÏÀ» ´ÝÇûÀ½À» º¸ÀåÇϱâÀ§ÇØ »ó´çÈ÷ ±â´Ù·Á¾ß
-ÇÑ´Ù. ¾ÆÆÄÄ¡°¡ Àç½ÃÀ۽à ½ÇÆÐÇÏÁö ¾ÊÀ½À» È®ÀÎÇϱâÀ§ÇØ Àç½ÃÀÛ
-Àü¿¡ ÀÚµ¿À¸·Î <code>configtest</code> ¸í·É°ú °°ÀÌ ¼³Á¤ÆÄÀÏÀ»
-°Ë»çÇÑ´Ù. <code>apachectl -k graceful</code>°ú °°´Ù.</dd>
-
-<dt><code>configtest</code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀÇ ¹®¹ýÀ» °Ë»çÇÑ´Ù. ¼³Á¤ÆÄÀÏÀ» Àаí <code>Syntax
-Ok</code> ȤÀº ƯÁ¤ ¼³Á¤¿À·ù¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë·ÁÁØ´Ù.
-<code>apachectl -t</code>¿Í °°´Ù.</dd>
-
-</dl>
-
-<p>¾Æ·¡ ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¾ÕÀ¸·Î »ç¶óÁú °ÍÀÌ´Ù.</p>
-
-<dl>
-
-<dt><code>startssl</code></dt>
-
-<dd><code>apachectl -k start -DSSL</code>°ú °°´Ù. ¿ì¸®´Â Á÷Á¢
-¾ÕÀÇ ¸í·É¾î¸¦ »ç¿ëÇϰųª Ç×»ó SSLÀ» »ç¿ëÇϵµ·Ï
-<code>httpd.conf</code>¿¡¼­ <code class="directive"><a href="../mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> ¼½¼ÇÀ» Á¦°ÅÇÏ±æ ±ÇÇÑ´Ù.</dd>
-
-</dl>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/apachectl.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apachectl.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/apachectl.xml b/docs/manual/programs/apachectl.xml
deleted file mode 100644
index 0f46e03034..0000000000
--- a/docs/manual/programs/apachectl.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="apachectl.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>apachectl - Apache HTTP Server Control Interface</title>
-
-<summary>
- <p><code>apachectl</code> is a front end to the Apache HyperText
- Transfer Protocol (HTTP) server. It is designed to help the
- administrator control the functioning of the Apache
- <a href="httpd.html">httpd</a> daemon.</p>
-
- <p>The <code>apachectl</code> script can operate in two modes.
- First, it can act as a simple front-end to the <code>httpd</code>
- command that simply sets any necessary environment variables and
- then invokes <code>httpd</code>, passing through any command line
- arguments. Second, <code>apachectl</code> can act as a SysV init
- script, taking simple one-word arguments like <code>start</code>,
- <code>restart</code>, and <code>stop</code>, and translating them
- into appropriate signals to <code>httpd</code>.</p>
-
- <p>If your Apache installation uses non-standard paths, you will
- need to edit the <code>apachectl</code> script to set the
- appropriate paths to the <code>httpd</code> binary. You can also
- specify any necessary <code>httpd</code> command line arguments.
- See the comments in the script for details.</p>
-
- <p>The <code>apachectl</code> script returns a 0 exit value on
- success, and &gt;0 if an error occurs. For more details, view
- the comments in the script.</p>
-</summary>
-<seealso><a href="../invoking.html">Starting Apache</a></seealso>
-<seealso><a href="../stopping.html">Stopping Apache</a></seealso>
-<seealso><a href="../configuring.html">Configuration Files</a></seealso>
-<seealso><a href="../platform/">Platform Docs</a></seealso>
-<seealso><a href="httpd.html">httpd</a></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
-
-<p>When acting in pass-through mode, <code>apachectl</code> can take
-all the arguments available for the <a href="httpd.html">httpd</a>
-binary.</p>
-
-<p><code><strong>apachectl</strong> [ <var>httpd-argument</var> ]</code></p>
-
-<p>When acting in SysV init mode, <code>apachectl</code> takes simple,
-one-word commands, defined below.</p>
-
-<p><code><strong>apachectl</strong> <var>command</var></code></p>
-
-</section>
-
-<section id="options"><title>Options</title>
-
-<p>Only the SysV init-style options are defined here. Other arguments
-are defined on the <a href="httpd.html">httpd</a> manual page.</p>
-
-<dl>
-
-<dt><code>start</code></dt>
-
-<dd>Start the Apache <code>httpd</code> daemon. Gives an error if it
-is already running. This is equivalent to <code>apachectl -k
-start</code>.</dd>
-
-<dt><code>stop</code></dt>
-
-<dd>Stops the Apache <code>httpd</code> daemon. This is equivalent to
-<code>apachectl -k stop</code>.</dd>
-
-<dt><code>restart</code></dt>
-
-<dd>Restarts the Apache <code>httpd</code> daemon. If the daemon is
-not running, it is started. This command automatically checks the
-configuration files as in <code>configtest</code> before initiating
-the restart to make sure the daemon doesn't die. This is equivalent
-to <code>apachectl -k restart</code>.</dd>
-
-<dt><code>fullstatus</code></dt>
-
-<dd>Displays a full status report from <module>mod_status</module>.
-For this to work, you need to have <module>mod_status</module> enabled
-on your server and a text-based browser such as <code>lynx</code>
-available on your system. The URL used to access the status report
-can be set by editing the <code>STATUSURL</code> variable in the
-script.</dd>
-
-<dt><code>status</code></dt>
-
-<dd>Displays a brief status report. Similar to the
-<code>fullstatus</code> option, except that the list of requests
-currently being served is omitted.</dd>
-
-<dt><code>graceful</code></dt>
-
-<dd>Gracefully restarts the Apache <code>httpd</code> daemon. If the
-daemon is not running, it is started. This differs from a normal
-restart in that currently open connections are not aborted. A side
-effect is that old log files will not be closed immediately. This
-means that if used in a log rotation script, a substantial delay may
-be necessary to ensure that the old log files are closed before
-processing them. This command automatically checks the configuration
-files as in <code>configtest</code> before initiating the
-restart to make sure Apache doesn't die. This is equivalent to
-<code>apachectl -k graceful</code>.</dd>
-
-<dt><code>configtest</code></dt>
-
-<dd>Run a configuration file syntax test. It parses the configuration
-files and either reports <code>Syntax Ok</code>
-or detailed information about the particular syntax error. This is
-equivalent to <code>apachectl -t</code>.</dd>
-
-</dl>
-
-<p>The following additional option is available, but deprecated.</p>
-
-<dl>
-
-<dt><code>startssl</code></dt>
-
-<dd>This is equivalent to <code>apachectl -k start -DSSL</code>. We
-recommend that you use that command explicitly, or you adjust your
-<code>httpd.conf</code> to remove the <directive module="core"
-type="section">IfDefine</directive> section so that SSL will always be
-available.</dd>
-
-</dl>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/apachectl.xml.ko b/docs/manual/programs/apachectl.xml.ko
deleted file mode 100644
index e4a652cfd3..0000000000
--- a/docs/manual/programs/apachectl.xml.ko
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="apachectl.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>apachectl - ¾ÆÆÄÄ¡ À¥¼­¹ö Á¶Àý ÀÎÅÍÆäÀ̽º</title>
-
-<summary>
- <p><code>apachectl</code>Àº ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û
- ÇÁ·ÎÅäÄÝ (HTTP) ¼­¹öÀÇ ¾Õ´ÜÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº °ü¸®ÀÚ°¡
- ¾ÆÆÄÄ¡ <a href="httpd.html">httpd</a> µ¥¸óÀ» Á¶Á¤Çϵµ·Ï
- µ½´Â´Ù.</p>
-
- <p><code>apachectl</code> ½ºÅ©¸³Æ®´Â µÎ°¡Áö ¹æ¹ýÀ¸·Î ½ÇÇàÇÑ´Ù.
- ù¹ø° ¹æ¹ýÀº <code>httpd</code>À» ºÎ¸£´Â °£´ÜÇÑ ½ºÅ©¸³Æ®
- ¿ªÇÒÀ» ÇÏ¿©, ÇÊ¿äÇÑ È¯°æº¯¼ö¸¦ ¼³Á¤ÇÏ°í ¹ÞÀº ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®¸¦
- °¡Áö°í <code>httpd</code>¸¦ ½ÇÇàÇÑ´Ù. µÎ¹ø° ¹æ¹ýÀº
- <code>apachectl</code>¸¦ SysV init ½ºÅ©¸³Æ®·Î »ç¿ëÇÏ¿©,
- <code>start</code>, <code>restart</code>, <code>stop</code>
- °°Àº ÇÑ´Ü¾î ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ¾Æ¼­ <code>httpd</code>¿¡°Ô
- ÀûÀýÇÑ ½ÅÈ£¸¦ º¸³½´Ù.</p>
-
- <p>¾ÆÆÄÄ¡¸¦ ÀϹÝÀûÀÎ °æ·Î¿¡ ¼³Ä¡ÇÏÁö ¾Ê¾Ò´Ù¸é, ÀûÀýÇÑ
- <code>httpd</code> °æ·Î·Î <code>apachectl</code> ½ºÅ©¸³Æ®¸¦
- ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ¶Ç, <code>httpd</code> ¸í·ÉÇà ¾Æ±Ô¸ÕÆ®¸¦
- Ãß°¡·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ½ºÅ©¸³Æ®ÀÇ ÁÖ¼®À»
- Âü°íÇ϶ó.</p>
-
- <p><code>apachectl</code> ½ºÅ©¸³Æ®´Â ¼º°ø½Ã Á¾·áÄÚµå 0À»,
- ¿À·ù½Ã &gt;0À» ¹ÝȯÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ½ºÅ©¸³Æ®ÀÇ ÁÖ¼®À»
- Âü°íÇ϶ó.</p>
-</summary>
-<seealso><a href="../invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></seealso>
-<seealso><a href="../stopping.html">¾ÆÆÄÄ¡ Áß´Ü</a></seealso>
-<seealso><a href="../configuring.html">¼³Á¤ÆÄÀÏ</a></seealso>
-<seealso><a href="../platform/">Ç÷¡Æû ¹®¼­</a></seealso>
-<seealso><a href="httpd.html">httpd</a></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
-
-<p>°£´ÜÇÑ ½ÇÇà ½ºÅ©¸³Æ®·Î µ¿ÀÛÇϸé, <code>apachectl</code>Àº
-<a href="httpd.html">httpd</a> ½ÇÇàÆÄÀÏÀÇ ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ´Â´Ù.</p>
-
-<p><code><strong>apachectl</strong> [ <var>httpd-argument</var> ]</code></p>
-
-<p>SysV init ¹æ½ÄÀ¸·Î µ¿ÀÛÇϸé, <code>apachectl</code>Àº ¾Æ·¡¼­
-¼³¸íÇÒ °£´ÜÇÑ ÇÑ´Ü¾î ¸í·É¾î¸¦ ¹Þ´Â´Ù.</p>
-
-<p><code><strong>apachectl</strong> <var>command</var></code></p>
-
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
-
-<p>¿©±â¼­´Â SysV init-½Ä ¿É¼Ç¸¸ ¼³¸íÇÑ´Ù. ´Ù¸¥ ¿É¼ÇÀº <a
-href="httpd.html">httpd</a> manpage¿¡¼­ ¼³¸íÇÑ´Ù.</p>
-
-<dl>
-
-<dt><code>start</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» ½ÃÀÛÇÑ´Ù. ÀÌ¹Ì ½ÇÇàÁßÀ̶ó¸é
-¿À·ù¸¦ ³½´Ù. <code>apachectl -k start</code>¿Í °°´Ù.</dd>
-
-<dt><code>stop</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» Áß´ÜÇÑ´Ù. <code>apachectl
--k stop</code>°ú °°´Ù.</dd>
-
-<dt><code>restart</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» Àç½ÃÀÛÇÑ´Ù. µ¥¸óÀÌ ½ÇÇàÁßÀÌ
-¾Æ´Ï¶ó¸é, ½ÃÀÛÇÑ´Ù. µ¥¸óÀÌ Àç½ÃÀ۽à ½ÇÆÐÇÏÁö ¾ÊÀ½À» È®ÀÎÇϱâÀ§ÇØ
-Àç½ÃÀÛ Àü¿¡ ÀÚµ¿À¸·Î <code>configtest</code> ¸í·É°ú °°ÀÌ ¼³Á¤ÆÄÀÏÀ»
-°Ë»çÇÑ´Ù. <code>apachectl -k restart</code>¿Í °°´Ù.</dd>
-
-<dt><code>fullstatus</code></dt>
-
-<dd><module>mod_status</module>ÀÇ ¸ðµç »óÅ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
-ÀÌ ¸í·ÉÀ» »ç¿ëÇϱâÀ§Çؼ­´Â ¼­¹ö°¡ <module>mod_status</module>¸¦
-»ç¿ëÇÏ°í, ½Ã½ºÅÛ¿¡ <code>lynx</code> °°Àº ¹®ÀÚ±â¹Ý ºê¶ó¿ìÀú°¡
-ÇÊ¿äÇÏ´Ù. »óÅ Á¤º¸¿¡ Á¢±ÙÇÏ´Â URLÀº ½ºÅ©¸³Æ®ÀÇ
-<code>STATUSURL</code> º¯¼ö¸¦ ¼öÁ¤ÇÏ¿© ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
-<dt><code>status</code></dt>
-
-<dd>°£´ÜÇÑ »óÅ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. <code>fullstatus</code> ¿É¼Ç°ú
-ºñ½ÁÇÏÁö¸¸, ÇöÀç ¼­ºñ½ºÁßÀÎ ¿äû ¸ñ·ÏÀ» Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.</dd>
-
-<dt><code>graceful</code></dt>
-
-<dd>¾ÆÆÄÄ¡ <code>httpd</code> µ¥¸óÀ» Á¡ÀÝ°Ô(gracefully) Àç½ÃÀÛÇÑ´Ù.
-µ¥¸óÀÌ ½ÇÇàÁßÀÌ ¾Æ´Ï¶ó¸é, ½ÃÀÛÇÑ´Ù. ÀϹÝÀûÀÎ Àç½ÃÀÛ°ú ´Þ¸® ÇöÀç
-¿­·ÁÀÖ´Â ¿¬°áÀ» ²÷Áö¾Ê´Â´Ù. ¶Ç, ÀÌÀü ·Î±×ÆÄÀÏÀ» Áï½Ã ´ÝÁö ¾Ê´Â´Ù.
-Áï, ·Î±×¼øȯ ½ºÅ©¸³Æ®¿¡¼­ ÀÌ ¸í·ÉÀ» »ç¿ëÇÑ´Ù¸é, ÀÌÀü ·Î±×ÆÄÀÏÀ»
-ó¸®ÇϱâÀü¿¡ ·Î±×ÆÄÀÏÀ» ´ÝÇûÀ½À» º¸ÀåÇϱâÀ§ÇØ »ó´çÈ÷ ±â´Ù·Á¾ß
-ÇÑ´Ù. ¾ÆÆÄÄ¡°¡ Àç½ÃÀ۽à ½ÇÆÐÇÏÁö ¾ÊÀ½À» È®ÀÎÇϱâÀ§ÇØ Àç½ÃÀÛ
-Àü¿¡ ÀÚµ¿À¸·Î <code>configtest</code> ¸í·É°ú °°ÀÌ ¼³Á¤ÆÄÀÏÀ»
-°Ë»çÇÑ´Ù. <code>apachectl -k graceful</code>°ú °°´Ù.</dd>
-
-<dt><code>configtest</code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀÇ ¹®¹ýÀ» °Ë»çÇÑ´Ù. ¼³Á¤ÆÄÀÏÀ» Àаí <code>Syntax
-Ok</code> ȤÀº ƯÁ¤ ¼³Á¤¿À·ù¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë·ÁÁØ´Ù.
-<code>apachectl -t</code>¿Í °°´Ù.</dd>
-
-</dl>
-
-<p>¾Æ·¡ ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¾ÕÀ¸·Î »ç¶óÁú °ÍÀÌ´Ù.</p>
-
-<dl>
-
-<dt><code>startssl</code></dt>
-
-<dd><code>apachectl -k start -DSSL</code>°ú °°´Ù. ¿ì¸®´Â Á÷Á¢
-¾ÕÀÇ ¸í·É¾î¸¦ »ç¿ëÇϰųª Ç×»ó SSLÀ» »ç¿ëÇϵµ·Ï
-<code>httpd.conf</code>¿¡¼­ <directive module="core"
-type="section">IfDefine</directive> ¼½¼ÇÀ» Á¦°ÅÇÏ±æ ±ÇÇÑ´Ù.</dd>
-
-</dl>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/apachectl.xml.meta b/docs/manual/programs/apachectl.xml.meta
deleted file mode 100644
index 2b40475d4b..0000000000
--- a/docs/manual/programs/apachectl.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>apachectl</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/apxs.html b/docs/manual/programs/apxs.html
deleted file mode 100644
index b6d6d1deba..0000000000
--- a/docs/manual/programs/apxs.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: apxs.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: apxs.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/apxs.html.en b/docs/manual/programs/apxs.html.en
deleted file mode 100644
index efeabc7c2a..0000000000
--- a/docs/manual/programs/apxs.html.en
+++ /dev/null
@@ -1,337 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>apxs - APache eXtenSion tool - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>apxs - APache eXtenSion tool</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/apxs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apxs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>apxs</code> is a tool for building and installing extension
- modules for the Apache HyperText Transfer Protocol (HTTP) server. This is
- achieved by building a dynamic shared object (DSO) from one or more source
- or object <var>files</var> which then can be loaded into the Apache server
- under runtime via the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>
- directive from <code class="module"><a href="../mod/mod_so.html">mod_so</a></code>.</p>
-
- <p>So to use this extension mechanism your platform has to support the DSO
- feature and your Apache <code>httpd</code> binary has to be built with the
- <code class="module"><a href="../mod/mod_so.html">mod_so</a></code> module. The <code>apxs</code> tool automatically
- complains if this is not the case. You can check this yourself by manually
- running the command</p>
-
- <div class="example"><p><code>
- $ httpd -l
- </code></p></div>
-
- <p>The module <code class="module"><a href="../mod/mod_so.html">mod_so</a></code> should be part of the displayed list.
- If these requirements are fulfilled you can easily extend your Apache
- server's functionality by installing your own modules with the DSO mechanism
- by the help of this <code>apxs</code> tool:</p>
-
- <div class="example"><p><code>
- $ apxs -i -a -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </code></p></div>
-
- <p>The arguments <var>files</var> can be any C source file (.c), a object
- file (.o) or even a library archive (.a). The <code>apxs</code> tool
- automatically recognizes these extensions and automatically used the C
- source files for compilation while just using the object and archive files
- for the linking phase. But when using such pre-compiled objects make sure
- they are compiled for position independent code (PIC) to be able to use them
- for a dynamically loaded shared object. For instance with GCC you always
- just have to use <code>-fpic</code>. For other C compilers consult its
- manual page or at watch for the flags <code>apxs</code> uses to compile the
- object files.</p>
-
- <p>For more details about DSO support in Apache read the documentation of
- <code class="module"><a href="../mod/mod_so.html">mod_so</a></code> or perhaps even read the
- <code>src/modules/standard/mod_so.c</code> source file.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="apachectl.html">apachectl</a></li><li><a href="httpd.html">httpd</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>apxs</strong> -<strong>g</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- -<strong>n</strong> <var>modname</var></code></p>
-
- <p><code><strong>apxs</strong> -<strong>q</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- <var>query</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>c</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>o</strong> <var>dsofile</var> ]
- [ -<strong>I</strong> <var>incdir</var> ]
- [ -<strong>D</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>L</strong> <var>libdir</var> ]
- [ -<strong>l</strong> <var>libname</var> ]
- [ -<strong>Wc,</strong><var>compiler-flags</var> ]
- [ -<strong>Wl,</strong><var>linker-flags</var> ]
- <var>files</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>i</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>e</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
- <h3><a name="options.common" id="options.common">Common Options</a></h3>
- <dl>
- <dt><code>-n <var>modname</var></code></dt>
- <dd>This explicitly sets the module name for the <code>-i</code> (install)
- and <code>-g</code> (template generation) option. Use this to explicitly
- specify the module name. For option <code>-g</code> this is required, for
- option <code>-i</code> the <code>apxs</code> tool tries to determine the
- name from the source or (as a fallback) at least by guessing it from the
- filename.</dd>
- </dl>
-
-
- <h3><a name="options.query" id="options.query">Query Options</a></h3>
- <dl>
- <dt><code>-q</code></dt>
- <dd>Performs a query for <code>apxs</code>'s knowledge about certain
- settings. The <var>query</var> parameters can be one or more of the
- following strings: <code>CC</code>, <code>CFLAGS</code>,
- <code>CFLAGS_SHLIB</code>, <code>INCLUDEDIR</code>, <code>LD_SHLIB</code>,
- <code>LDFLAGS_SHLIB</code>, <code>LIBEXECDIR</code>,
- <code>LIBS_SHLIB</code>, <code>SBINDIR</code>, <code>SYSCONFDIR</code>,
- <code>TARGET</code>.
-
- <p>Use this for manually determining settings. For instance use</p>
- <div class="example"><p><code>
- INC=-I`apxs -q INCLUDEDIR`
- </code></p></div>
-
- <p>inside your own Makefiles if you need manual access to Apache's C
- header files.</p></dd>
- </dl>
-
-
- <h3><a name="options.conf" id="options.conf">Configuration Options</a></h3>
- <dl>
- <dt><code>-S <var>name</var>=<var>value</var></code></dt>
- <dd>This option changes the apxs settings described above.</dd>
- </dl>
-
-
- <h3><a name="options.template" id="options.template">Template Generation Options</a></h3>
- <dl>
- <dt><code>-g</code></dt>
- <dd>This generates a subdirectory <var>name</var> (see option
- <code>-n</code>) and there two files: A sample module source file named
- <code>mod_<var>name</var>.c</code> which can be used as a template for
- creating your own modules or as a quick start for playing with the
- apxs mechanism. And a corresponding <code>Makefile</code> for even easier
- build and installing of this module.</dd>
- </dl>
-
-
- <h3><a name="options.dso" id="options.dso">DSO Compilation Options</a></h3>
- <dl>
- <dt><code>-c</code></dt>
- <dd>This indicates the compilation operation. It first compiles the C
- source files (.c) of <var>files</var> into corresponding object files (.o)
- and then builds a dynamically shared object in <var>dsofile</var> by
- linking these object files plus the remaining object files (.o and .a) of
- <var>files</var>. If no <code>-o</code> option is specified the output
- file is guessed from the first filename in <var>files</var> and thus
- usually defaults to <code>mod_<var>name</var>.so</code>.</dd>
-
- <dt><code>-o <var>dsofile</var></code></dt>
- <dd>Explicitly specifies the filename of the created dynamically shared
- object. If not specified and the name cannot be guessed from the
- <var>files</var> list, the fallback name <code>mod_unknown.so</code> is
- used.</dd>
-
- <dt><code>-D <var>name</var>=<var>value</var></code></dt>
- <dd>This option is directly passed through to the compilation command(s).
- Use this to add your own defines to the build process.</dd>
-
- <dt><code>-I <var>incdir</var></code></dt>
- <dd>This option is directly passed through to the compilation command(s).
- Use this to add your own include directories to search to the build
- process.</dd>
-
- <dt><code>-L <var>libdir</var></code></dt>
- <dd>This option is directly passed through to the linker command. Use this
- to add your own library directories to search to the build process.</dd>
-
- <dt><code>-l <var>libname</var></code></dt>
- <dd>This option is directly passed through to the linker command. Use this
- to add your own libraries to search to the build process.</dd>
-
- <dt><code>-Wc,<var>compiler-flags</var></code></dt>
- <dd>This option passes <var>compiler-flags</var> as additional flags to
- the compiler command. Use this to add local compiler-specific options.</dd>
-
- <dt><code>-Wl,<var>linker-flags</var></code></dt>
- <dd>This option passes <var>linker-flags</var> as additional flags to
- the linker command. Use this to add local linker-specific options.</dd>
- </dl>
-
-
- <h3><a name="options.dsoinstall" id="options.dsoinstall">DSO Installation and Configuration Options</a></h3>
-
- <dl>
- <dt><code>-i</code></dt>
- <dd>This indicates the installation operation and installs one or more
- dynamically shared objects into the server's <var>modules</var>
- directory.</dd>
-
- <dt><code>-a</code></dt>
- <dd>This activates the module by automatically adding a corresponding
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> line to Apache's
- <code>httpd.conf</code> configuration file, or by enabling it if it
- already exists.</dd>
-
- <dt><code>-A</code></dt>
- <dd>Same as option <code>-a</code> but the created <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive is prefixed with a hash
- sign (<code>#</code>), <em>i.e.</em>, the module is just prepared for
- later activation but initially disabled.</dd>
-
- <dt><code>-e</code></dt>
- <dd>This indicates the editing operation, which can be used with the
- <code>-a</code> and <code>-A</code> options similarly to the
- <code>-i</code> operation to edit Apache's <code>httpd.conf</code>
- configuration file without attempting to install the module.</dd>
- </dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
- <p>Assume you have an Apache module named <code>mod_foo.c</code> available
- which should extend Apache's server functionality. To accomplish this you
- first have to compile the C source into a shared object suitable for loading
- into the Apache server under runtime via the following command:</p>
-
- <div class="example"><p><code>
- $ apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- $ _
- </code></p></div>
-
- <p>Then you have to update the Apache configuration by making sure a
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive is present to
- load this shared object. To simplify this step <code>apxs</code> provides
- an automatic way to install the shared object in its "modules" directory
- and updating the <code>httpd.conf</code> file accordingly. This can be
- achieved by running:</p>
-
- <div class="example"><p><code>
- $ apxs -i -a mod_foo.c<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ _
- </code></p></div>
-
- <p>This way a line named</p>
-
- <div class="example"><p><code>
- LoadModule foo_module modules/mod_foo.so
- </code></p></div>
-
- <p>is added to the configuration file if still not present. If you want to
- have this disabled per default use the <code>-A</code> option,
- <em>i.e.</em></p>
-
- <div class="example"><p><code>
- $ apxs -i -A mod_foo.c
- </code></p></div>
-
- <p>For a quick test of the apxs mechanism you can create a sample Apache
- module template plus a corresponding Makefile via:</p>
-
- <div class="example"><p><code>
- $ apxs -g -n foo<br />
- Creating [DIR] foo<br />
- Creating [FILE] foo/Makefile<br />
- Creating [FILE] foo/mod_foo.c<br />
- $ _
- </code></p></div>
-
- <p>Then you can immediately compile this sample module into a shared object
- and load it into the Apache server:</p>
-
- <div class="example"><p><code>
- $ cd foo<br />
- $ make all reload<br />
- apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- apxs -i -a -n "foo" mod_foo.so<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </code></p></div>
-
- <p>You can even use <code>apxs</code> to compile complex modules outside the
- Apache source tree, like PHP3:</p>
-
- <div class="example"><p><code>
- $ cd php3<br />
- $ ./configure --with-shared-apache=../apache-1.3<br />
- $ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a<br />
- gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3.c<br />
- ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a<br />
- $ _
- </code></p></div>
-
- <p>because <code>apxs</code> automatically recognized C source files and
- object files. Only C source files are compiled while remaining object
- files are used for the linking phase.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/apxs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apxs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/apxs.html.ko.euc-kr b/docs/manual/programs/apxs.html.ko.euc-kr
deleted file mode 100644
index 0a7d41c29e..0000000000
--- a/docs/manual/programs/apxs.html.ko.euc-kr
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>apxs - APache eXtenSion µµ±¸ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>apxs - APache eXtenSion µµ±¸</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/apxs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apxs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>apxs</code>´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ
- (HTTP) ¼­¹öÀÇ È®Àå¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â µµ±¸ÀÌ´Ù. ÀÌ
- µµ±¸´Â ¿©·¯ ¼Ò½º¿Í ¿ÀºêÁ§Æ®<var>ÆÄÀÏ</var>À» °¡Áö°í,
- <code class="module"><a href="../mod/mod_so.html">mod_so</a></code>ÀÇ <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î·Î ½ÇÇàÁß¿¡
- ¾ÆÆÄÄ¡ ¼­¹ö·Î ÀоîµéÀÏ ¼ö ÀÖ´Â µ¿Àû°øÀ¯°´Ã¼(DSO)¸¦ ¸¸µç´Ù.</p>
-
- <p>±×·¡¼­ ÀÌ·± È®Àå¹æ½ÄÀ» »ç¿ëÇÏ·Á¸é Ç÷¡ÆûÀÌ DSO ±â´ÉÀ»
- Áö¿øÇÏ°í ¾ÆÆÄÄ¡ <code>httpd</code> ½ÇÇàÆÄÀÏÀ»
- <code class="module"><a href="../mod/mod_so.html">mod_so</a></code> ¸ðµâ°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.
- <code>apxs</code> µµ±¸´Â ÀÌ Á¶°ÇÀÌ ¸¸Á·ÇÏÁö¾ÊÀ¸¸é ½ÇÇàÇÏÁö
- ¾Ê´Â´Ù. Á÷Á¢ ¸í·É¾î¸¦ ½ÇÇàÇÏ¿© Á¶°ÇÀÌ ¸¸Á·ÇÏ´ÂÁö ¾Ë¾Æº¼
- ¼ö ÀÖ´Ù</p>
-
- <div class="example"><p><code>
- $ httpd -l
- </code></p></div>
-
- <p>¸ñ·Ï¿¡ <code class="module"><a href="../mod/mod_so.html">mod_so</a></code> ¸ðµâÀÌ ³ª¿Í¾ß ÇÑ´Ù. Á¶°ÇÀ»
- ¸¸Á·Çϸé <code>apxs</code> µµ±¸·Î DSO ¸ðµâÀ» ¼³Ä¡ÇÏ¿©
- ¾ÆÆÄÄ¡¼­¹öÀÇ ±â´ÉÀ» ½±°Ô È®ÀåÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- $ apxs -i -a -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </code></p></div>
-
- <p>¾Æ±Ô¸ÕÆ® <var>files</var>¿¡´Â C ¼Ò½ºÆÄÀÏ (.c) À̳ª
- ¿ÀºêÁ§Æ®ÆÄÀÏ (.o), ¶óÀ̺귯¸®¸ðÀ½ (.a)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- <code>apxs</code> µµ±¸´Â È®ÀåÀÚ¸¦ º¸°í ÀÚµ¿À¸·Î C ¼Ò½ºÆÄÀÏÀº
- ÄÄÆÄÀÏÇÏ°í, ¿ÀºêÁ§Æ®¿Í ¸ðÀ½ÆÄÀÏÀº ¸µÅ©¿¡¸¸ »ç¿ëÇÑ´Ù. ±×·¯³ª
- ÄÄÆÄÀÏÇÑ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ·Á¸é µ¿ÀûÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Â
- °øÀ¯°´Ã¼·Î »ç¿ëÇϱâÀ§ÇØ ¹Ýµå½Ã ¿ÀºêÁ§Æ®¸¦ À§Ä¡µ¶¸³ÄÚµå(PIC,
- position independent code)·Î ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. GCCÀÇ °æ¿ì
- <code>-fpic</code>À» »ç¿ëÇÏ¸é µÈ´Ù. ´Ù¸¥ C ÄÄÆÄÀÏ·¯´Â ¼³¸í¼­¸¦
- Âü°íÇϰųª <code>apxs</code>°¡ ¿ÀºêÁ§Æ®ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ¶§
- »ç¿ëÇÏ´Â ¿É¼ÇÀ» Âü°íÇ϶ó.</p>
-
- <p>¾ÆÆÄÄ¡ÀÇ DSO Áö¿ø¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº
- <code class="module"><a href="../mod/mod_so.html">mod_so</a></code> ¹®¼­¸¦ Âü°íÇϰųª
- <code>src/modules/standard/mod_so.c</code> ¼Ò½ºÆÄÀÏÀ» ÀоîºÁ¶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">¿¹Á¦</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="apachectl.html">apachectl</a></li><li><a href="httpd.html">httpd</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>apxs</strong> -<strong>g</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- -<strong>n</strong> <var>modname</var></code></p>
-
- <p><code><strong>apxs</strong> -<strong>q</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- <var>query</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>c</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>o</strong> <var>dsofile</var> ]
- [ -<strong>I</strong> <var>incdir</var> ]
- [ -<strong>D</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>L</strong> <var>libdir</var> ]
- [ -<strong>l</strong> <var>libname</var> ]
- [ -<strong>Wc,</strong><var>compiler-flags</var> ]
- [ -<strong>Wl,</strong><var>linker-flags</var> ]
- <var>files</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>i</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>e</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
- <h3><a name="options.common" id="options.common">°øÅë ¿É¼Ç</a></h3>
- <dl>
- <dt><code>-n <var>modname</var></code></dt>
- <dd><code>-i</code> (install)°ú <code>-g</code> (template
- generation) ¿É¼ÇÀ» »ç¿ëÇÒ¶§ Á÷Á¢ ¸ðµâ¸íÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¸ðµâ¸íÀ» Á÷Á¢ ÁöÁ¤ÇÑ´Ù. <code>-g</code>
- ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» ¹Ýµå½Ã »ç¿ëÇؾßÇÏ°í,
- <code>-i</code> ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é <code>apxs</code> µµ±¸´Â
- ¼Ò½º³ª (¸¶Áö¸· ½Ãµµ·Î) ÆÄÀϸíÀ» °¡Áö°í À̸§À» ÃßÃøÇÑ´Ù.</dd>
- </dl>
-
-
- <h3><a name="options.query" id="options.query">ÁúÀÇ ¿É¼Ç</a></h3>
- <dl>
- <dt><code>-q</code></dt>
- <dd><code>apxs</code>ÀÇ ¼³Á¤°ªÀ» ¾Ë¾Æ³½´Ù. <var>query</var>¿¡´Â
- ´ÙÀ½À» »ç¿ëÇÒ ¼ö ÀÖ´Ù: <code>CC</code>, <code>CFLAGS</code>,
- <code>CFLAGS_SHLIB</code>, <code>INCLUDEDIR</code>,
- <code>LD_SHLIB</code>, <code>LDFLAGS_SHLIB</code>,
- <code>LIBEXECDIR</code>, <code>LIBS_SHLIB</code>,
- <code>SBINDIR</code>, <code>SYSCONFDIR</code>, <code>TARGET</code>.
-
- <p>¼³Á¤À» Á÷Á¢ ¾Ë¾Æ³¾¶§ »ç¿ëÇÑ´Ù.</p>
- <div class="example"><p><code>
- INC=-I`apxs -q INCLUDEDIR`
- </code></p></div>
-
- <p>¿¹¸¦ µé¾î, ¾ÆÆÄÄ¡ C Çì´õÆÄÀÏÀ» Á÷Á¢ Á¢±ÙÇÑ´Ù¸é
- Makefile¿¡¼­ À§¿Í °°ÀÌ »ç¿ëÇÑ´Ù.</p></dd>
- </dl>
-
-
- <h3><a name="options.conf" id="options.conf">¼³Á¤ ¿É¼Ç</a></h3>
- <dl>
- <dt><code>-S <var>name</var>=<var>value</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀº À§¿¡¼­ ¼³¸íÇÑ apxs ¼³Á¤À» º¯°æÇÑ´Ù.</dd>
- </dl>
-
-
- <h3><a name="options.template" id="options.template">°ßº»(template) »ý¼º ¿É¼Ç</a></h3>
- <dl>
- <dt><code>-g</code></dt>
- <dd>ÇÏÀ§µð·ºÅ丮 <var>name</var>À» ¸¸µé°í (<code>-n</code>
- ¿É¼Ç Âü°í) ±×°÷¿¡ ÆÄÀÏ µÎ°³¸¦ ¸¸µç´Ù: ÇÑ ÆÄÀÏÀº
- <code>mod_<var>name</var>.c</code>¶ó´Â °ßº» ¸ðµâ¼Ò½ºÆÄÀÏ·Î,
- ÀÚ½ÅÀÇ ¸ðµâÀ» ¸¸µé¶§ °ßº»À¸·Î »ç¿ëÇϰųª apxs ±â´ÉÀ»
- ½ÃÇèÇغ¼¶§ »ç¿ëÇÑ´Ù. ´Ù¸¥ ÆÄÀÏÀº ÀÌ ¸ðµâÀ» ½±°Ô ÄÄÆÄÀÏÇÏ°í
- ¼³Ä¡ÇϱâÀ§ÇÑ <code>Makefile</code>ÀÌ´Ù.</dd>
- </dl>
-
-
- <h3><a name="options.dso" id="options.dso">DSO ÄÄÆÄÀÏ ¿É¼Ç</a></h3>
- <dl>
- <dt><code>-c</code></dt>
- <dd>ÄÄÆÄÀÏÀ» Áö½ÃÇÑ´Ù. ¸ÕÀú <var>files</var>¿¡¼­ C
- ¼Ò½ºÆÄÀϵé(.c)À» ¿ÀºêÁ§Æ®ÆÄÀÏ(.o)·Î ÄÄÆÄÀÏÇÏ°í,
- <var>files</var>ÀÇ ³ª¸ÓÁö ¿ÀºêÁ§Æ®ÆÄÀϵé(.o°ú .a)°ú
- ¸µÅ©ÇÏ¿© µ¿Àû°øÀ¯°´Ã¼ <var>dsofile</var>À» ¸¸µç´Ù.
- <code>-o</code> ¿É¼ÇÀ» »ç¿ëÇÏÁö¾ÊÀ¸¸é <var>files</var>ÀÇ
- ù¹ø° ÆÄÀÏ¸í¿¡¼­ À̸§À» ÃßÃøÇÏ¿© º¸Åë
- <code>mod_<var>name</var>.so</code>¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>-o <var>dsofile</var></code></dt>
- <dd>»ý¼ºÇÒ µ¿Àû°øÀ¯°´Ã¼ ÆÄÀϸíÀ» Á÷Á¢ ÁöÁ¤ÇÑ´Ù. À̸§À»
- ÁöÁ¤ÇÏÁö¾Ê°í <var>files</var> ¸ñ·Ï¿¡¼­ À̸§À» ÃßÃøÇÏÁö
- ¸øÇÏ¸é ¸¶Áö¸·À¸·Î <code>mod_unknown.so</code>¸¦ À̸§À¸·Î
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>-D <var>name</var>=<var>value</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ÄÄÆÄÀÏ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ ÀÚ½ÅÀÇ defineÀ» Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-I <var>incdir</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ÄÄÆÄÀÏ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ include¸¦ ãÀ» µð·ºÅ丮¸¦ Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-L <var>libdir</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ¸µÄ¿ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ ¶óÀ̺귯¸®¸¦ ãÀ» µð·ºÅ丮¸¦ Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-l <var>libname</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ¸µÄ¿ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ »ç¿ëÇÒ ¶óÀ̺귯¸®¸¦ Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-Wc,<var>compiler-flags</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀº Ãß°¡ ¿É¼Ç <var>compiler-flags</var>¸¦
- ÄÄÆÄÀÏ ¸í·É¾î·Î Àü´ÞÇÑ´Ù. ÄÄÆÄÀÏ·¯ ƯÀ¯ÀÇ ¿É¼ÇÀ» Ãß°¡ÇÒ¶§
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>-Wl,<var>linker-flags</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀº Ãß°¡ ¿É¼Ç <var>linker-flags</var>¸¦
- ¸µÄ¿ ¸í·É¾î·Î Àü´ÞÇÑ´Ù. ¸µÄ¿ ƯÀ¯ÀÇ ¿É¼ÇÀ» Ãß°¡ÇÒ¶§
- »ç¿ëÇÑ´Ù.</dd>
- </dl>
-
-
- <h3><a name="options.dsoinstall" id="options.dsoinstall">DSO ¼³Ä¡°ú ¼³Á¤ ¿É¼Ç</a></h3>
-
- <dl>
- <dt><code>-i</code></dt>
- <dd>¼³Ä¡¸¦ Áö½ÃÇÑ´Ù. ¿©·¯ µ¿Àû°øÀ¯°´Ã¼¸¦ ¼­¹öÀÇ
- <var>modules</var> µð·ºÅ丮¿¡ ¼³Ä¡ÇÑ´Ù.</dd>
-
- <dt><code>-a</code></dt>
- <dd>¾ÆÆÄÄ¡ <code>httpd.conf</code> ¼³Á¤ÆÄÀÏ¿¡ ÀûÀýÇÑ
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> ÁÙÀ»
- Ãß°¡Çϰųª ÀÌ¹Ì ÀÖ´Ù¸é È°¼ºÈ­ÇÏ¿© ¸ðµâÀ» »ç¿ëÇϵµ·Ï
- ¸¸µç´Ù.</dd>
-
- <dt><code>-A</code></dt>
- <dd><code>-a</code>¿Í ºñ½ÁÇÏÁö¸¸, <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î ¾Õ¿¡
- ¿ì¹°Á¤ÀÚ(<code>#</code>)¸¦ ºÙÀδÙ. <em>Áï</em>, ÇöÀç´Â
- »ç¿ëÇÏÁö¾ÊÁö¸¸ ³ªÁß¿¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸ðµâÀ» ÁغñÇÑ´Ù.</dd>
-
- <dt><code>-e</code></dt>
- <dd>ÆíÁýÀ» Áö½ÃÇÑ´Ù. <code>-a</code> ȤÀº <code>-A</code>
- ¿É¼Ç°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, <code>-i</code> ¸í·É°ú
- ºñ½ÁÇÏÁö¸¸ ¸ðµâÀ» ¼³Ä¡ÇÏÁö¾Ê°í ¾ÆÆÄÄ¡
- <code>httpd.conf</code> ¼³Á¤ÆÄÀϸ¸ ÆíÁýÇÑ´Ù.</dd>
- </dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
- <p>¾ÆÆÄÄ¡¼­¹öÀÇ ±â´ÉÀ» È®ÀåÇÏ´Â <code>mod_foo.c</code>¶ó´Â
- ¾ÆÆÄÄ¡ ¸ðµâÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. ¸ÕÀú ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÏ¿©
- C ¼Ò½º¸¦ ¾ÆÆÄÄ¡ ¼­¹ö°¡ ÀоîµéÀÏ °øÀ¯°´Ã¼·Î ÄÄÆÄÀÏÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- $ apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- $ _
- </code></p></div>
-
- <p>±×¸®°í ÀÌ °øÀ¯°´Ã¼¸¦ ÀоîµéÀÌ´Â <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦ ¾ÆÆÄÄ¡
- ¼³Á¤¿¡ Ãß°¡ÇÑ´Ù. <code>apxs</code>´Â ÀÚµ¿À¸·Î °øÀ¯°´Ã¼¸¦
- "modules" µð·ºÅ丮¿¡ ¼³Ä¡ÇÏ°í <code>httpd.conf</code> ÆÄÀÏÀ»
- ¾Ë¸Â°Ô ¼öÁ¤ÇÏ¿© °£´ÜÈ÷ ÀÛ¾÷À» ¸¶Ä£´Ù. ´ÙÀ½ °°ÀÌ ½ÇÇàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- $ apxs -i -a mod_foo.c<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ _
- </code></p></div>
-
- <p>±×·¯¸é ´ÙÀ½°ú °°Àº ÁÙÀ»</p>
-
- <div class="example"><p><code>
- LoadModule foo_module modules/mod_foo.so
- </code></p></div>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ¾ø´Ù¸é Ãß°¡ÇÑ´Ù. ÀÌ ¼³Á¤À» ±âº»ÀûÀ¸·Î »ç¿ëÇÏÁö
- ¾Ê´Â´Ù¸é <code>-A</code> ¿É¼ÇÀ» »ç¿ëÇÑ´Ù. <em>Áï</em></p>
-
- <div class="example"><p><code>
- $ apxs -i -A mod_foo.c
- </code></p></div>
-
- <p>apxs¸¦ ½±°Ô »ç¿ëÇÏ·Á°í ´ÙÀ½°ú °°ÀÌ ¾ÆÆÄÄ¡ ¸ðµâ °ßº»°ú
- MakefileÀ» ¸¸µé ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- $ apxs -g -n foo<br />
- Creating [DIR] foo<br />
- Creating [FILE] foo/Makefile<br />
- Creating [FILE] foo/mod_foo.c<br />
- $ _
- </code></p></div>
-
- <p>±×·±ÈÄ ¹Ù·Î °ßº» ¸ðµâÀ» °øÀ¯°´Ã¼·Î ÄÄÆÄÀÏÇÏ¿© ¾ÆÆÄÄ¡
- ¼­¹ö°¡ Àеµ·ÏÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- $ cd foo<br />
- $ make all reload<br />
- apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- apxs -i -a -n "foo" mod_foo.so<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </code></p></div>
-
- <p>½ÉÁö¾î ¾ÆÆÄÄ¡ ¼Ò½º ¹Û¿¡¼­ <code>apxs</code>¸¦ »ç¿ëÇÏ¿©
- PHP3¿Í °°ÀÌ º¹ÀâÇÑ ¸ðµâÀ» ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- $ cd php3<br />
- $ ./configure --with-shared-apache=../apache-1.3<br />
- $ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a<br />
- gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3.c<br />
- ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a<br />
- $ _
- </code></p></div>
-
- <p><code>apxs</code>´Â ÀÚµ¿À¸·Î C ¼Ò½ºÆÄÀÏ°ú ¿ÀºêÁ§Æ®ÆÄÀÏÀ»
- ±¸º°ÇÑ´Ù. C ¼Ò½ºÆÄÀϸ¸ ÄÄÆÄÀÏÇÏ°í ³ª¸ÓÁö ¿ÀºêÁ§Æ®ÆÄÀÏÀº
- ¸µÅ©ÇÒ¶§ »ç¿ëÇÑ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/apxs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/apxs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/apxs.xml b/docs/manual/programs/apxs.xml
deleted file mode 100644
index 5535bf5cc0..0000000000
--- a/docs/manual/programs/apxs.xml
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="apxs.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>apxs - APache eXtenSion tool</title>
-
-<summary>
- <p><code>apxs</code> is a tool for building and installing extension
- modules for the Apache HyperText Transfer Protocol (HTTP) server. This is
- achieved by building a dynamic shared object (DSO) from one or more source
- or object <var>files</var> which then can be loaded into the Apache server
- under runtime via the <directive module="mod_so">LoadModule</directive>
- directive from <module>mod_so</module>.</p>
-
- <p>So to use this extension mechanism your platform has to support the DSO
- feature and your Apache <code>httpd</code> binary has to be built with the
- <module>mod_so</module> module. The <code>apxs</code> tool automatically
- complains if this is not the case. You can check this yourself by manually
- running the command</p>
-
- <example>
- $ httpd -l
- </example>
-
- <p>The module <module>mod_so</module> should be part of the displayed list.
- If these requirements are fulfilled you can easily extend your Apache
- server's functionality by installing your own modules with the DSO mechanism
- by the help of this <code>apxs</code> tool:</p>
-
- <example>
- $ apxs -i -a -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </example>
-
- <p>The arguments <var>files</var> can be any C source file (.c), a object
- file (.o) or even a library archive (.a). The <code>apxs</code> tool
- automatically recognizes these extensions and automatically used the C
- source files for compilation while just using the object and archive files
- for the linking phase. But when using such pre-compiled objects make sure
- they are compiled for position independent code (PIC) to be able to use them
- for a dynamically loaded shared object. For instance with GCC you always
- just have to use <code>-fpic</code>. For other C compilers consult its
- manual page or at watch for the flags <code>apxs</code> uses to compile the
- object files.</p>
-
- <p>For more details about DSO support in Apache read the documentation of
- <module>mod_so</module> or perhaps even read the
- <code>src/modules/standard/mod_so.c</code> source file.</p>
-</summary>
-<seealso><a href="apachectl.html">apachectl</a></seealso>
-<seealso><a href="httpd.html">httpd</a></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>apxs</strong> -<strong>g</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- -<strong>n</strong> <var>modname</var></code></p>
-
- <p><code><strong>apxs</strong> -<strong>q</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- <var>query</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>c</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>o</strong> <var>dsofile</var> ]
- [ -<strong>I</strong> <var>incdir</var> ]
- [ -<strong>D</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>L</strong> <var>libdir</var> ]
- [ -<strong>l</strong> <var>libname</var> ]
- [ -<strong>Wc,</strong><var>compiler-flags</var> ]
- [ -<strong>Wl,</strong><var>linker-flags</var> ]
- <var>files</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>i</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>e</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-</section>
-
-<section id="options"><title>Options</title>
- <section id="options.common"><title>Common Options</title>
- <dl>
- <dt><code>-n <var>modname</var></code></dt>
- <dd>This explicitly sets the module name for the <code>-i</code> (install)
- and <code>-g</code> (template generation) option. Use this to explicitly
- specify the module name. For option <code>-g</code> this is required, for
- option <code>-i</code> the <code>apxs</code> tool tries to determine the
- name from the source or (as a fallback) at least by guessing it from the
- filename.</dd>
- </dl>
- </section>
-
- <section id="options.query"><title>Query Options</title>
- <dl>
- <dt><code>-q</code></dt>
- <dd>Performs a query for <code>apxs</code>'s knowledge about certain
- settings. The <var>query</var> parameters can be one or more of the
- following strings: <code>CC</code>, <code>CFLAGS</code>,
- <code>CFLAGS_SHLIB</code>, <code>INCLUDEDIR</code>, <code>LD_SHLIB</code>,
- <code>LDFLAGS_SHLIB</code>, <code>LIBEXECDIR</code>,
- <code>LIBS_SHLIB</code>, <code>SBINDIR</code>, <code>SYSCONFDIR</code>,
- <code>TARGET</code>.
-
- <p>Use this for manually determining settings. For instance use</p>
- <example>
- INC=-I`apxs -q INCLUDEDIR`
- </example>
-
- <p>inside your own Makefiles if you need manual access to Apache's C
- header files.</p></dd>
- </dl>
- </section>
-
- <section id="options.conf"><title>Configuration Options</title>
- <dl>
- <dt><code>-S <var>name</var>=<var>value</var></code></dt>
- <dd>This option changes the apxs settings described above.</dd>
- </dl>
- </section>
-
- <section id="options.template"><title>Template Generation Options</title>
- <dl>
- <dt><code>-g</code></dt>
- <dd>This generates a subdirectory <var>name</var> (see option
- <code>-n</code>) and there two files: A sample module source file named
- <code>mod_<var>name</var>.c</code> which can be used as a template for
- creating your own modules or as a quick start for playing with the
- apxs mechanism. And a corresponding <code>Makefile</code> for even easier
- build and installing of this module.</dd>
- </dl>
- </section>
-
- <section id="options.dso"><title>DSO Compilation Options</title>
- <dl>
- <dt><code>-c</code></dt>
- <dd>This indicates the compilation operation. It first compiles the C
- source files (.c) of <var>files</var> into corresponding object files (.o)
- and then builds a dynamically shared object in <var>dsofile</var> by
- linking these object files plus the remaining object files (.o and .a) of
- <var>files</var>. If no <code>-o</code> option is specified the output
- file is guessed from the first filename in <var>files</var> and thus
- usually defaults to <code>mod_<var>name</var>.so</code>.</dd>
-
- <dt><code>-o <var>dsofile</var></code></dt>
- <dd>Explicitly specifies the filename of the created dynamically shared
- object. If not specified and the name cannot be guessed from the
- <var>files</var> list, the fallback name <code>mod_unknown.so</code> is
- used.</dd>
-
- <dt><code>-D <var>name</var>=<var>value</var></code></dt>
- <dd>This option is directly passed through to the compilation command(s).
- Use this to add your own defines to the build process.</dd>
-
- <dt><code>-I <var>incdir</var></code></dt>
- <dd>This option is directly passed through to the compilation command(s).
- Use this to add your own include directories to search to the build
- process.</dd>
-
- <dt><code>-L <var>libdir</var></code></dt>
- <dd>This option is directly passed through to the linker command. Use this
- to add your own library directories to search to the build process.</dd>
-
- <dt><code>-l <var>libname</var></code></dt>
- <dd>This option is directly passed through to the linker command. Use this
- to add your own libraries to search to the build process.</dd>
-
- <dt><code>-Wc,<var>compiler-flags</var></code></dt>
- <dd>This option passes <var>compiler-flags</var> as additional flags to
- the compiler command. Use this to add local compiler-specific options.</dd>
-
- <dt><code>-Wl,<var>linker-flags</var></code></dt>
- <dd>This option passes <var>linker-flags</var> as additional flags to
- the linker command. Use this to add local linker-specific options.</dd>
- </dl>
- </section>
-
- <section id="options.dsoinstall">
- <title>DSO Installation and Configuration Options</title>
- <dl>
- <dt><code>-i</code></dt>
- <dd>This indicates the installation operation and installs one or more
- dynamically shared objects into the server's <var>modules</var>
- directory.</dd>
-
- <dt><code>-a</code></dt>
- <dd>This activates the module by automatically adding a corresponding
- <directive module="mod_so">LoadModule</directive> line to Apache's
- <code>httpd.conf</code> configuration file, or by enabling it if it
- already exists.</dd>
-
- <dt><code>-A</code></dt>
- <dd>Same as option <code>-a</code> but the created <directive
- module="mod_so">LoadModule</directive> directive is prefixed with a hash
- sign (<code>#</code>), <em>i.e.</em>, the module is just prepared for
- later activation but initially disabled.</dd>
-
- <dt><code>-e</code></dt>
- <dd>This indicates the editing operation, which can be used with the
- <code>-a</code> and <code>-A</code> options similarly to the
- <code>-i</code> operation to edit Apache's <code>httpd.conf</code>
- configuration file without attempting to install the module.</dd>
- </dl>
- </section>
-</section>
-
-<section id="examples"><title>Examples</title>
- <p>Assume you have an Apache module named <code>mod_foo.c</code> available
- which should extend Apache's server functionality. To accomplish this you
- first have to compile the C source into a shared object suitable for loading
- into the Apache server under runtime via the following command:</p>
-
- <example>
- $ apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- $ _
- </example>
-
- <p>Then you have to update the Apache configuration by making sure a
- <directive module="mod_so">LoadModule</directive> directive is present to
- load this shared object. To simplify this step <code>apxs</code> provides
- an automatic way to install the shared object in its "modules" directory
- and updating the <code>httpd.conf</code> file accordingly. This can be
- achieved by running:</p>
-
- <example>
- $ apxs -i -a mod_foo.c<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ _
- </example>
-
- <p>This way a line named</p>
-
- <example>
- LoadModule foo_module modules/mod_foo.so
- </example>
-
- <p>is added to the configuration file if still not present. If you want to
- have this disabled per default use the <code>-A</code> option,
- <em>i.e.</em></p>
-
- <example>
- $ apxs -i -A mod_foo.c
- </example>
-
- <p>For a quick test of the apxs mechanism you can create a sample Apache
- module template plus a corresponding Makefile via:</p>
-
- <example>
- $ apxs -g -n foo<br />
- Creating [DIR] foo<br />
- Creating [FILE] foo/Makefile<br />
- Creating [FILE] foo/mod_foo.c<br />
- $ _
- </example>
-
- <p>Then you can immediately compile this sample module into a shared object
- and load it into the Apache server:</p>
-
- <example>
- $ cd foo<br />
- $ make all reload<br />
- apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- apxs -i -a -n "foo" mod_foo.so<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </example>
-
- <p>You can even use <code>apxs</code> to compile complex modules outside the
- Apache source tree, like PHP3:</p>
-
- <example>
- $ cd php3<br />
- $ ./configure --with-shared-apache=../apache-1.3<br />
- $ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a<br />
- gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3.c<br />
- ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a<br />
- $ _
- </example>
-
- <p>because <code>apxs</code> automatically recognized C source files and
- object files. Only C source files are compiled while remaining object
- files are used for the linking phase.</p>
-</section>
-</manualpage>
diff --git a/docs/manual/programs/apxs.xml.ko b/docs/manual/programs/apxs.xml.ko
deleted file mode 100644
index 367502b294..0000000000
--- a/docs/manual/programs/apxs.xml.ko
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="apxs.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>apxs - APache eXtenSion µµ±¸</title>
-
-<summary>
- <p><code>apxs</code>´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ
- (HTTP) ¼­¹öÀÇ È®Àå¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â µµ±¸ÀÌ´Ù. ÀÌ
- µµ±¸´Â ¿©·¯ ¼Ò½º¿Í ¿ÀºêÁ§Æ®<var>ÆÄÀÏ</var>À» °¡Áö°í,
- <module>mod_so</module>ÀÇ <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î·Î ½ÇÇàÁß¿¡
- ¾ÆÆÄÄ¡ ¼­¹ö·Î ÀоîµéÀÏ ¼ö ÀÖ´Â µ¿Àû°øÀ¯°´Ã¼(DSO)¸¦ ¸¸µç´Ù.</p>
-
- <p>±×·¡¼­ ÀÌ·± È®Àå¹æ½ÄÀ» »ç¿ëÇÏ·Á¸é Ç÷¡ÆûÀÌ DSO ±â´ÉÀ»
- Áö¿øÇÏ°í ¾ÆÆÄÄ¡ <code>httpd</code> ½ÇÇàÆÄÀÏÀ»
- <module>mod_so</module> ¸ðµâ°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.
- <code>apxs</code> µµ±¸´Â ÀÌ Á¶°ÇÀÌ ¸¸Á·ÇÏÁö¾ÊÀ¸¸é ½ÇÇàÇÏÁö
- ¾Ê´Â´Ù. Á÷Á¢ ¸í·É¾î¸¦ ½ÇÇàÇÏ¿© Á¶°ÇÀÌ ¸¸Á·ÇÏ´ÂÁö ¾Ë¾Æº¼
- ¼ö ÀÖ´Ù</p>
-
- <example>
- $ httpd -l
- </example>
-
- <p>¸ñ·Ï¿¡ <module>mod_so</module> ¸ðµâÀÌ ³ª¿Í¾ß ÇÑ´Ù. Á¶°ÇÀ»
- ¸¸Á·Çϸé <code>apxs</code> µµ±¸·Î DSO ¸ðµâÀ» ¼³Ä¡ÇÏ¿©
- ¾ÆÆÄÄ¡¼­¹öÀÇ ±â´ÉÀ» ½±°Ô È®ÀåÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- $ apxs -i -a -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </example>
-
- <p>¾Æ±Ô¸ÕÆ® <var>files</var>¿¡´Â C ¼Ò½ºÆÄÀÏ (.c) À̳ª
- ¿ÀºêÁ§Æ®ÆÄÀÏ (.o), ¶óÀ̺귯¸®¸ðÀ½ (.a)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- <code>apxs</code> µµ±¸´Â È®ÀåÀÚ¸¦ º¸°í ÀÚµ¿À¸·Î C ¼Ò½ºÆÄÀÏÀº
- ÄÄÆÄÀÏÇÏ°í, ¿ÀºêÁ§Æ®¿Í ¸ðÀ½ÆÄÀÏÀº ¸µÅ©¿¡¸¸ »ç¿ëÇÑ´Ù. ±×·¯³ª
- ÄÄÆÄÀÏÇÑ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ·Á¸é µ¿ÀûÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Â
- °øÀ¯°´Ã¼·Î »ç¿ëÇϱâÀ§ÇØ ¹Ýµå½Ã ¿ÀºêÁ§Æ®¸¦ À§Ä¡µ¶¸³ÄÚµå(PIC,
- position independent code)·Î ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. GCCÀÇ °æ¿ì
- <code>-fpic</code>À» »ç¿ëÇÏ¸é µÈ´Ù. ´Ù¸¥ C ÄÄÆÄÀÏ·¯´Â ¼³¸í¼­¸¦
- Âü°íÇϰųª <code>apxs</code>°¡ ¿ÀºêÁ§Æ®ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ¶§
- »ç¿ëÇÏ´Â ¿É¼ÇÀ» Âü°íÇ϶ó.</p>
-
- <p>¾ÆÆÄÄ¡ÀÇ DSO Áö¿ø¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº
- <module>mod_so</module> ¹®¼­¸¦ Âü°íÇϰųª
- <code>src/modules/standard/mod_so.c</code> ¼Ò½ºÆÄÀÏÀ» ÀоîºÁ¶ó.</p>
-</summary>
-<seealso><a href="apachectl.html">apachectl</a></seealso>
-<seealso><a href="httpd.html">httpd</a></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>apxs</strong> -<strong>g</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- -<strong>n</strong> <var>modname</var></code></p>
-
- <p><code><strong>apxs</strong> -<strong>q</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- <var>query</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>c</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>o</strong> <var>dsofile</var> ]
- [ -<strong>I</strong> <var>incdir</var> ]
- [ -<strong>D</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>L</strong> <var>libdir</var> ]
- [ -<strong>l</strong> <var>libname</var> ]
- [ -<strong>Wc,</strong><var>compiler-flags</var> ]
- [ -<strong>Wl,</strong><var>linker-flags</var> ]
- <var>files</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>i</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-
- <p><code><strong>apxs</strong> -<strong>e</strong>
- [ -<strong>S</strong> <var>name</var>=<var>value</var> ]
- [ -<strong>n</strong> <var>modname</var> ]
- [ -<strong>a</strong> ]
- [ -<strong>A</strong> ]
- <var>dso-file</var> ...</code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
- <section id="options.common"><title>°øÅë ¿É¼Ç</title>
- <dl>
- <dt><code>-n <var>modname</var></code></dt>
- <dd><code>-i</code> (install)°ú <code>-g</code> (template
- generation) ¿É¼ÇÀ» »ç¿ëÇÒ¶§ Á÷Á¢ ¸ðµâ¸íÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¸ðµâ¸íÀ» Á÷Á¢ ÁöÁ¤ÇÑ´Ù. <code>-g</code>
- ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» ¹Ýµå½Ã »ç¿ëÇؾßÇÏ°í,
- <code>-i</code> ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é <code>apxs</code> µµ±¸´Â
- ¼Ò½º³ª (¸¶Áö¸· ½Ãµµ·Î) ÆÄÀϸíÀ» °¡Áö°í À̸§À» ÃßÃøÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="options.query"><title>ÁúÀÇ ¿É¼Ç</title>
- <dl>
- <dt><code>-q</code></dt>
- <dd><code>apxs</code>ÀÇ ¼³Á¤°ªÀ» ¾Ë¾Æ³½´Ù. <var>query</var>¿¡´Â
- ´ÙÀ½À» »ç¿ëÇÒ ¼ö ÀÖ´Ù: <code>CC</code>, <code>CFLAGS</code>,
- <code>CFLAGS_SHLIB</code>, <code>INCLUDEDIR</code>,
- <code>LD_SHLIB</code>, <code>LDFLAGS_SHLIB</code>,
- <code>LIBEXECDIR</code>, <code>LIBS_SHLIB</code>,
- <code>SBINDIR</code>, <code>SYSCONFDIR</code>, <code>TARGET</code>.
-
- <p>¼³Á¤À» Á÷Á¢ ¾Ë¾Æ³¾¶§ »ç¿ëÇÑ´Ù.</p>
- <example>
- INC=-I`apxs -q INCLUDEDIR`
- </example>
-
- <p>¿¹¸¦ µé¾î, ¾ÆÆÄÄ¡ C Çì´õÆÄÀÏÀ» Á÷Á¢ Á¢±ÙÇÑ´Ù¸é
- Makefile¿¡¼­ À§¿Í °°ÀÌ »ç¿ëÇÑ´Ù.</p></dd>
- </dl>
- </section>
-
- <section id="options.conf"><title>¼³Á¤ ¿É¼Ç</title>
- <dl>
- <dt><code>-S <var>name</var>=<var>value</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀº À§¿¡¼­ ¼³¸íÇÑ apxs ¼³Á¤À» º¯°æÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="options.template"><title>°ßº»(template) »ý¼º ¿É¼Ç</title>
- <dl>
- <dt><code>-g</code></dt>
- <dd>ÇÏÀ§µð·ºÅ丮 <var>name</var>À» ¸¸µé°í (<code>-n</code>
- ¿É¼Ç Âü°í) ±×°÷¿¡ ÆÄÀÏ µÎ°³¸¦ ¸¸µç´Ù: ÇÑ ÆÄÀÏÀº
- <code>mod_<var>name</var>.c</code>¶ó´Â °ßº» ¸ðµâ¼Ò½ºÆÄÀÏ·Î,
- ÀÚ½ÅÀÇ ¸ðµâÀ» ¸¸µé¶§ °ßº»À¸·Î »ç¿ëÇϰųª apxs ±â´ÉÀ»
- ½ÃÇèÇغ¼¶§ »ç¿ëÇÑ´Ù. ´Ù¸¥ ÆÄÀÏÀº ÀÌ ¸ðµâÀ» ½±°Ô ÄÄÆÄÀÏÇÏ°í
- ¼³Ä¡ÇϱâÀ§ÇÑ <code>Makefile</code>ÀÌ´Ù.</dd>
- </dl>
- </section>
-
- <section id="options.dso"><title>DSO ÄÄÆÄÀÏ ¿É¼Ç</title>
- <dl>
- <dt><code>-c</code></dt>
- <dd>ÄÄÆÄÀÏÀ» Áö½ÃÇÑ´Ù. ¸ÕÀú <var>files</var>¿¡¼­ C
- ¼Ò½ºÆÄÀϵé(.c)À» ¿ÀºêÁ§Æ®ÆÄÀÏ(.o)·Î ÄÄÆÄÀÏÇÏ°í,
- <var>files</var>ÀÇ ³ª¸ÓÁö ¿ÀºêÁ§Æ®ÆÄÀϵé(.o°ú .a)°ú
- ¸µÅ©ÇÏ¿© µ¿Àû°øÀ¯°´Ã¼ <var>dsofile</var>À» ¸¸µç´Ù.
- <code>-o</code> ¿É¼ÇÀ» »ç¿ëÇÏÁö¾ÊÀ¸¸é <var>files</var>ÀÇ
- ù¹ø° ÆÄÀÏ¸í¿¡¼­ À̸§À» ÃßÃøÇÏ¿© º¸Åë
- <code>mod_<var>name</var>.so</code>¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>-o <var>dsofile</var></code></dt>
- <dd>»ý¼ºÇÒ µ¿Àû°øÀ¯°´Ã¼ ÆÄÀϸíÀ» Á÷Á¢ ÁöÁ¤ÇÑ´Ù. À̸§À»
- ÁöÁ¤ÇÏÁö¾Ê°í <var>files</var> ¸ñ·Ï¿¡¼­ À̸§À» ÃßÃøÇÏÁö
- ¸øÇÏ¸é ¸¶Áö¸·À¸·Î <code>mod_unknown.so</code>¸¦ À̸§À¸·Î
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>-D <var>name</var>=<var>value</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ÄÄÆÄÀÏ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ ÀÚ½ÅÀÇ defineÀ» Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-I <var>incdir</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ÄÄÆÄÀÏ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ include¸¦ ãÀ» µð·ºÅ丮¸¦ Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-L <var>libdir</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ¸µÄ¿ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ ¶óÀ̺귯¸®¸¦ ãÀ» µð·ºÅ丮¸¦ Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-l <var>libname</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀ» ¸µÄ¿ ¸í·É¾î·Î Á÷Á¢ Àü´ÞÇÑ´Ù.
- ÄÄÆÄÀ϶§ »ç¿ëÇÒ ¶óÀ̺귯¸®¸¦ Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>-Wc,<var>compiler-flags</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀº Ãß°¡ ¿É¼Ç <var>compiler-flags</var>¸¦
- ÄÄÆÄÀÏ ¸í·É¾î·Î Àü´ÞÇÑ´Ù. ÄÄÆÄÀÏ·¯ ƯÀ¯ÀÇ ¿É¼ÇÀ» Ãß°¡ÇÒ¶§
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>-Wl,<var>linker-flags</var></code></dt>
- <dd>ÀÌ ¿É¼ÇÀº Ãß°¡ ¿É¼Ç <var>linker-flags</var>¸¦
- ¸µÄ¿ ¸í·É¾î·Î Àü´ÞÇÑ´Ù. ¸µÄ¿ ƯÀ¯ÀÇ ¿É¼ÇÀ» Ãß°¡ÇÒ¶§
- »ç¿ëÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="options.dsoinstall">
- <title>DSO ¼³Ä¡°ú ¼³Á¤ ¿É¼Ç</title>
- <dl>
- <dt><code>-i</code></dt>
- <dd>¼³Ä¡¸¦ Áö½ÃÇÑ´Ù. ¿©·¯ µ¿Àû°øÀ¯°´Ã¼¸¦ ¼­¹öÀÇ
- <var>modules</var> µð·ºÅ丮¿¡ ¼³Ä¡ÇÑ´Ù.</dd>
-
- <dt><code>-a</code></dt>
- <dd>¾ÆÆÄÄ¡ <code>httpd.conf</code> ¼³Á¤ÆÄÀÏ¿¡ ÀûÀýÇÑ
- <directive module="mod_so">LoadModule</directive> ÁÙÀ»
- Ãß°¡Çϰųª ÀÌ¹Ì ÀÖ´Ù¸é È°¼ºÈ­ÇÏ¿© ¸ðµâÀ» »ç¿ëÇϵµ·Ï
- ¸¸µç´Ù.</dd>
-
- <dt><code>-A</code></dt>
- <dd><code>-a</code>¿Í ºñ½ÁÇÏÁö¸¸, <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î ¾Õ¿¡
- ¿ì¹°Á¤ÀÚ(<code>#</code>)¸¦ ºÙÀδÙ. <em>Áï</em>, ÇöÀç´Â
- »ç¿ëÇÏÁö¾ÊÁö¸¸ ³ªÁß¿¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸ðµâÀ» ÁغñÇÑ´Ù.</dd>
-
- <dt><code>-e</code></dt>
- <dd>ÆíÁýÀ» Áö½ÃÇÑ´Ù. <code>-a</code> ȤÀº <code>-A</code>
- ¿É¼Ç°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, <code>-i</code> ¸í·É°ú
- ºñ½ÁÇÏÁö¸¸ ¸ðµâÀ» ¼³Ä¡ÇÏÁö¾Ê°í ¾ÆÆÄÄ¡
- <code>httpd.conf</code> ¼³Á¤ÆÄÀϸ¸ ÆíÁýÇÑ´Ù.</dd>
- </dl>
- </section>
-</section>
-
-<section id="examples"><title>¿¹Á¦</title>
- <p>¾ÆÆÄÄ¡¼­¹öÀÇ ±â´ÉÀ» È®ÀåÇÏ´Â <code>mod_foo.c</code>¶ó´Â
- ¾ÆÆÄÄ¡ ¸ðµâÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. ¸ÕÀú ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÏ¿©
- C ¼Ò½º¸¦ ¾ÆÆÄÄ¡ ¼­¹ö°¡ ÀоîµéÀÏ °øÀ¯°´Ã¼·Î ÄÄÆÄÀÏÇÑ´Ù:</p>
-
- <example>
- $ apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- $ _
- </example>
-
- <p>±×¸®°í ÀÌ °øÀ¯°´Ã¼¸¦ ÀоîµéÀÌ´Â <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ ¾ÆÆÄÄ¡
- ¼³Á¤¿¡ Ãß°¡ÇÑ´Ù. <code>apxs</code>´Â ÀÚµ¿À¸·Î °øÀ¯°´Ã¼¸¦
- "modules" µð·ºÅ丮¿¡ ¼³Ä¡ÇÏ°í <code>httpd.conf</code> ÆÄÀÏÀ»
- ¾Ë¸Â°Ô ¼öÁ¤ÇÏ¿© °£´ÜÈ÷ ÀÛ¾÷À» ¸¶Ä£´Ù. ´ÙÀ½ °°ÀÌ ½ÇÇàÇÑ´Ù:</p>
-
- <example>
- $ apxs -i -a mod_foo.c<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- $ _
- </example>
-
- <p>±×·¯¸é ´ÙÀ½°ú °°Àº ÁÙÀ»</p>
-
- <example>
- LoadModule foo_module modules/mod_foo.so
- </example>
-
- <p>¼³Á¤ÆÄÀÏ¿¡ ¾ø´Ù¸é Ãß°¡ÇÑ´Ù. ÀÌ ¼³Á¤À» ±âº»ÀûÀ¸·Î »ç¿ëÇÏÁö
- ¾Ê´Â´Ù¸é <code>-A</code> ¿É¼ÇÀ» »ç¿ëÇÑ´Ù. <em>Áï</em></p>
-
- <example>
- $ apxs -i -A mod_foo.c
- </example>
-
- <p>apxs¸¦ ½±°Ô »ç¿ëÇÏ·Á°í ´ÙÀ½°ú °°ÀÌ ¾ÆÆÄÄ¡ ¸ðµâ °ßº»°ú
- MakefileÀ» ¸¸µé ¼ö ÀÖ´Ù:</p>
-
- <example>
- $ apxs -g -n foo<br />
- Creating [DIR] foo<br />
- Creating [FILE] foo/Makefile<br />
- Creating [FILE] foo/mod_foo.c<br />
- $ _
- </example>
-
- <p>±×·±ÈÄ ¹Ù·Î °ßº» ¸ðµâÀ» °øÀ¯°´Ã¼·Î ÄÄÆÄÀÏÇÏ¿© ¾ÆÆÄÄ¡
- ¼­¹ö°¡ Àеµ·ÏÇÑ´Ù:</p>
-
- <example>
- $ cd foo<br />
- $ make all reload<br />
- apxs -c mod_foo.c<br />
- gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c<br />
- ld -Bshareable -o mod_foo.so mod_foo.o<br />
- apxs -i -a -n "foo" mod_foo.so<br />
- cp mod_foo.so /path/to/apache/modules/mod_foo.so<br />
- chmod 755 /path/to/apache/modules/mod_foo.so<br />
- [activating module `foo' in /path/to/apache/etc/httpd.conf]<br />
- apachectl restart<br />
- /path/to/apache/sbin/apachectl restart: httpd not running, trying to start<br />
- [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module<br />
- /path/to/apache/sbin/apachectl restart: httpd started<br />
- $ _
- </example>
-
- <p>½ÉÁö¾î ¾ÆÆÄÄ¡ ¼Ò½º ¹Û¿¡¼­ <code>apxs</code>¸¦ »ç¿ëÇÏ¿©
- PHP3¿Í °°ÀÌ º¹ÀâÇÑ ¸ðµâÀ» ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù:</p>
-
- <example>
- $ cd php3<br />
- $ ./configure --with-shared-apache=../apache-1.3<br />
- $ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a<br />
- gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3.c<br />
- ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a<br />
- $ _
- </example>
-
- <p><code>apxs</code>´Â ÀÚµ¿À¸·Î C ¼Ò½ºÆÄÀÏ°ú ¿ÀºêÁ§Æ®ÆÄÀÏÀ»
- ±¸º°ÇÑ´Ù. C ¼Ò½ºÆÄÀϸ¸ ÄÄÆÄÀÏÇÏ°í ³ª¸ÓÁö ¿ÀºêÁ§Æ®ÆÄÀÏÀº
- ¸µÅ©ÇÒ¶§ »ç¿ëÇÑ´Ù.</p>
-</section>
-</manualpage>
diff --git a/docs/manual/programs/apxs.xml.meta b/docs/manual/programs/apxs.xml.meta
deleted file mode 100644
index b3c7b6c8f6..0000000000
--- a/docs/manual/programs/apxs.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>apxs</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/configure.html b/docs/manual/programs/configure.html
deleted file mode 100644
index 9f569079b8..0000000000
--- a/docs/manual/programs/configure.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: configure.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: configure.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/configure.html.en b/docs/manual/programs/configure.html.en
deleted file mode 100644
index a7938a4670..0000000000
--- a/docs/manual/programs/configure.html.en
+++ /dev/null
@@ -1,918 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>configure - Configure the source tree - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>configure - Configure the source tree</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/configure.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/configure.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The <code>configure</code> script configures the source tree
- for compiling and installing the Apache HTTP Server on your
- particular platform. Various options allow the compilation of a
- server corresponding to your personal requirements.</p>
-
- <p>This script, included in the root directory of the source
- distribution, is for compilation on Unix and Unix-like systems
- only. For other platforms, see the <a href="../platform/">platform</a> documentation.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#env">Environment variables</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="../install.html">Compiling and Installing</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p>You should call the <code>configure</code> script from within the
- root directory of the distribution.</p>
-
- <p><code><strong>./configure</strong> [<var>OPTION</var>]...
- [<var>VAR</var>=<var>VALUE</var>]...</code></p>
-
- <p>To assign environment variables (e.g. <code>CC</code>,
- <code>CFLAGS</code> ...), specify them as
- <code><var>VAR</var>=<var>VALUE</var></code>. See <a href="#env">below</a>
- for descriptions of some of the useful variables.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
- <ul>
- <li><a href="#configurationoptions">Configuration options</a></li>
- <li><a href="#installationdirectories">Installation directories</a></li>
- <li><a href="#systemtypes">System types</a></li>
- <li><a href="#optionalfeatures">Optional features</a></li>
- <li><a href="#supportopt">Options for support programs</a></li>
- </ul>
-
- <h3><a name="configurationoptions" id="configurationoptions">Configuration options</a></h3>
-
- <p>The following options influence the behavior of
- <code>configure</code> itself.</p>
-
- <dl>
- <dt><code>-C</code></dt>
- <dt><code>--config-cache</code></dt>
- <dd>This is an alias for <code>--cache-file=config.cache</code></dd>
-
- <dt><code>--cache-file=<var>FILE</var></code></dt>
- <dd>The test results will be cached in file <var>FILE</var>.
- This option is disabled by default.</dd>
-
- <dt><code>-h</code></dt>
- <dt><code>--help [short|recursive]</code></dt>
- <dd>Output the help and exit. With the argument <code>short</code> only
- options specific to this package will displayed. The argument
- <code>recursive</code> displays the short help of all the included
- packages.</dd>
-
- <dt><code>-n</code></dt>
- <dt><code>--no-create</code></dt>
- <dd>The <code>configure</code> script is run normally but does
- not create output files. This is useful to check the test results
- before generating makefiles for compilation.</dd>
-
- <dt><code>-q</code></dt>
- <dt><code>--quiet</code></dt>
- <dd>Do not print <code>checking ...</code> messages during the
- configure process.</dd>
-
- <dt><code>--srcdir=<var>DIR</var></code></dt>
- <dd>Defines directory <var>DIR</var> to be the source file directory.
- Default is the directory, where configure is located, or the parent
- directory <code>..</code>.</dd>
-
- <dt><code>--silent</code></dt>
- <dd>Same as <code>--quiet</code></dd>
-
- <dt>-V</dt>
- <dt>--version</dt>
- <dd>Display copyright information and exit.</dd>
- </dl>
-
-
- <h3><a name="installationdirectories" id="installationdirectories">Installation
- directories</a></h3>
-
- <p>These options define the installation directory. The installation
- tree depends on the selected layout.</p>
-
- <dl>
- <dt><code>--prefix=<var>PREFIX</var></code></dt>
- <dd>Install architecture-independent files in <var>PREFIX</var>.
- By default the installation directory is set to
- <code>/usr/local/apache2</code>.</dd>
-
- <dt><code>--exec-prefix=<var>EPREFIX</var></code></dt>
- <dd>Install architecture-dependent files in <var>EPREFIX</var>.
- By default the installation directory is set to the
- <var>PREFIX</var> directory.</dd>
- </dl>
-
- <p>By default, <code>make install</code> will install all the files in
- <code>/usr/local/apache2/bin</code>, <code>/usr/local/apache2/lib</code>
- etc. You can specify an installation prefix other than
- <code>/usr/local/apache2</code> using <code>--prefix</code>,
- for instance <code>--prefix=$HOME</code>.</p>
-
- <h4><a name="layout" id="layout">Define a directory layout</a></h4>
- <dl>
- <dt><code>--enable-layout=<var>LAYOUT</var></code></dt>
- <dd>Configure the source code and build scripts to assume an
- installation tree based on the layout <var>LAYOUT</var>. This allows
- you to separately specify the locations for each type of file within
- the Apache HTTP Server installation. The <code>config.layout</code>
- file contains several example configurations, and you can also create
- your own custom configuration following the examples. The different
- layouts in this file are grouped into <code>&lt;Layout
- FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by name as
- in <code>FOO</code>. The default layout is <code>Apache</code>.</dd>
- </dl>
-
-
- <h4><a name="directoryfinetuning" id="directoryfinetuning">Fine tuning of the installation
- directories</a></h4>
-
- <p>For better control of the installation directories, use the options
- below. Please note that the directory defaults are set by
- <code>autoconf</code> and be overwritten by the corresponding layout
- setting.</p>
-
- <dl>
-
- <dt><code>--bindir=<var>DIR</var></code></dt>
- <dd>Install user executables in <var>DIR</var>. The user executables
- are supporting programs like <code>htpasswd</code>,
- <code>dbmmanage</code>, etc. which are useful for site
- administrators. By default <var>DIR</var> is set to
- <code><var>EPREFIX</var>/bin</code>.</dd>
-
- <dt><code>--datadir=<var>DIR</var></code></dt>
- <dd>Install read-only architecture-independent data in <var>DIR</var>.
- By default <code>datadir</code> is set to
- <code><var>PREFIX</var>/share</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--includedir=<var>DIR</var></code></dt>
- <dd>Install C header files in <var>DIR</var>. By default
- <code>includedir</code> is set to
- <code><var>EPREFIX</var>/include</code>.</dd>
-
- <dt><code>--infodir=<var>DIR</var></code></dt>
- <dd>Install info documentation in <var>DIR</var>.
- By default <code>infodir</code> is set to
- <code><var>PREFIX</var>/info</code>. This option is currently
- unused.</dd>
-
- <dt><code>--libdir=<var>DIR</var></code></dt>
- <dd>Install object code libraries in <var>DIR</var>. By default
- <code>libdir</code> is set to
- <code><var>EPREFIX</var>/lib</code>.</dd>
-
- <dt><code>--libexecdir=<var>DIR</var></code></dt>
- <dd>Install the program executables (i.e., shared modules) in
- <var>DIR</var>. By default <code>libexecdir</code> is set to
- <code><var>EPREFIX</var>/libexec</code>.</dd>
-
- <dt><code>--localstatedir=<var>DIR</var></code></dt>
- <dd>Install modifiable single-machine data in <var>DIR</var>.
- By default <code>localstatedir</code> is set to
- <code><var>PREFIX</var>/var</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--mandir=<var>DIR</var></code></dt>
- <dd>Install the man documentation in <var>DIR</var>. By default
- <code>mandir</code> is set to
- <code><var>EPREFIX</var>/man</code>.</dd>
-
- <dt><code>--oldincludedir=<var>DIR</var></code></dt>
- <dd>Install C header files for non-gcc in <var>DIR</var>.
- By default <code>oldincludedir</code> is set to
- <code>/usr/include</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--sbindir=<var>DIR</var></code></dt>
- <dd>Install the system administrator executables in <var>DIR</var>.
- Those are server programs like <code>httpd</code>,
- <code>apachectl</code>, <code>suexec</code>, etc. which are neccessary
- to run the Apache HTTP Server. By default <code>sbindir</code> is
- set to <code><var>EPREFIX</var>/sbin</code>.</dd>
-
- <dt><code>--sharedstatedir=<var>DIR</var></code></dt>
- <dd>Install modifiable architecture-independent data in <var>DIR</var>.
- By default <code>sharedstatedir</code> is set to
- <code><var>PREFIX</var>/com</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--sysconfdir=<var>DIR</var></code></dt>
- <dd>Install read-only single-machine data like the server configuration
- files <code>httpd.conf</code>, <code>mime.types</code>, etc. in
- <var>DIR</var>. By default <code>sysconfdir</code> is set to
- <code><var>PREFIX</var>/etc</code>.</dd>
- </dl>
-
-
-
- <h3><a name="systemtypes" id="systemtypes">System types</a></h3>
-
- <p>These options are used to cross-compile the Apache HTTP Server to run on
- another system. In normal cases, when building and running the server on
- the same system, these options are not used.</p>
-
- <dl>
- <dt><code>--build=<var>BUILD</var></code></dt>
- <dd>Defines the system type of the system on which the tools are being
- built. It defaults to the result of the script
- <code>config.guess</code>.</dd>
-
- <dt><code>--host=<var>HOST</var></code></dt>
- <dd>Defines the system type of the system on which the server will run.
- <var>HOST</var> defaults to <var>BUILD</var>.</dd>
-
- <dt><code>--target=<var>TARGET</var></code></dt>
- <dd>Configure for building compilers for the system type
- <var>TARGET</var>. It defaults to <var>HOST</var>. This option is
- offered by <code>autoconf</code> and not necessary for the Apache HTTP
- Server.</dd>
- </dl>
-
-
- <h3><a name="optionalfeatures" id="optionalfeatures">Optional Features</a></h3>
-
- <p>These options are used to fine tune the features your HTTP server will
- have.</p>
-
- <h4><a name="generaloptfeat" id="generaloptfeat">General syntax</a></h4>
- <p>Generally you can use the following syntax to enable or disable a
- feature:</p>
-
- <dl>
- <dt><code>--disable-<var>FEATURE</var></code></dt>
- <dd>Do not include <var>FEATURE</var>. This is the same as
- <code>--enable-<var>FEATURE</var>=no</code>.</dd>
-
- <dt><code>--enable-<var>FEATURE</var>[=<var>ARG</var>]</code></dt>
- <dd>Include <var>FEATURE</var>. The default value for <var>ARG</var>
- is <code>yes</code>.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=shared</code></dt>
- <dd>The corresponding module will be build as DSO module.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=static</code></dt>
- <dd>By default enabled modules are linked statically. You can force
- this explicitly.</dd>
- </dl>
-
- <div class="note"><h3>Note</h3>
- <code>configure</code> will not complain about
- <code>--enable-<var>foo</var></code> even if <var>foo</var> doesn't
- exist, so you need to type carefully.
- </div>
-
-
-
- <h4><a name="enabledmodules" id="enabledmodules">Modules enabled by default</a></h4>
- <p>Some modules are compiled by default and have to be disabled
- explicitly. Use the following options to remove discrete modules from
- the compilation process.</p>
-
- <dl>
- <dt><code>--disable-actions</code></dt>
- <dd>Disable action triggering on requests, which is provided by
- <code class="module"><a href="../mod/mod_actions.html">mod_actions</a></code>.</dd>
-
- <dt><code>--disable-alias</code></dt>
- <dd>Disable the mapping of requests to different parts of the
- filesystem, which is provided by <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>.</dd>
-
- <dt><code>--disable-asis</code></dt>
- <dd>Disable support for as-is filetypes, which is provided by
- <code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code>.</dd>
-
- <dt><code>--disable-auth</code></dt>
- <dd>Disable user-based access control provided by
- <code class="module"><a href="../mod/mod_auth.html">mod_auth</a></code>. This module provides for HTTP Basic
- Authentication, where the usernames and passwords are stored in
- plain text files.</dd>
-
- <dt><code>--disable-autoindex</code></dt>
- <dd>Disable the directory listing functionality provided by
- <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>.</dd>
-
- <dt><code>--disable-access</code></dt>
- <dd>Disable host-based access control provided by
- <code class="module"><a href="../mod/mod_access.html">mod_access</a></code>.</dd>
-
- <dt><code>--disable-cgi</code></dt>
- <dd><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, which provides support for CGI scripts,
- is enabled by default when using a non-threaded MPM. Use this
- option to disable CGI support.</dd>
-
- <dt><code>--disable-cgid</code></dt>
- <dd>When using the threaded MPMs <code class="module"><a href="../mod/worker.html">worker</a></code> or
- <code class="module"><a href="../mod/perchild.html">perchild</a></code> support for CGI scripts is provided by
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code> by default. To disable CGI support use
- this option.</dd>
-
- <dt><code>--disable-charset-lite</code></dt>
- <dd>Disable character set translation provided by
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>. This module will be installed by
- default only on EBCDIC systems.</dd>
-
- <dt><code>--disable-dir</code></dt>
- <dd>Disable directory request handling provided by
- <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>.</dd>
-
- <dt><code>--disable-env</code></dt>
- <dd>Enable setting and clearing of environment variables, which is
- provided by <code class="module"><a href="../mod/mod_env.html">mod_env</a></code>.</dd>
-
-
- <dt><code>--disable-http</code></dt>
- <dd>Disable the HTTP protocol handling. The <code>http</code>
- module is a basic one, enabling the server to function as an
- HTTP server. It is only useful to disable it if you want to use
- another protocol module instead. <strong>Don't disable this
- module unless you are really sure what you are doing.</strong>
- <br />
- Note: This module will always be linked statically.</dd>
-
- <dt><code>--disable-imap</code></dt>
- <dd>Disable support for server based imagemaps, which provided by
- <code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code>.</dd>
-
- <dt><code>--disable-include</code></dt>
- <dd>Disable Server Side Includes provided by
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>.</dd>
-
- <dt><code>--disable-log-config</code></dt>
- <dd>Disable the logging configuration provided by
- <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. You won't be able to log requests
- to the server without this module.</dd>
-
- <dt><code>--disable-mime</code></dt>
- <dd><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code> associates the requested filename's
- extensions with the file's behavior and content (mime-type,
- language, character set and encoding). Disabling the mapping of
- file-extensions to MIME is normally not recommended.</dd>
-
- <dt><code>--disable-negotiation</code></dt>
- <dd>Disable content negotiation provided by
- <code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>.</dd>
-
- <dt><code>--disable-setenvif</code></dt>
- <dd>Disable support for basing environment variables on headers,
- which is provided by <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>.</dd>
-
- <dt><code>--disable-status</code></dt>
- <dd>Enable the process/thread monitoring, which is provided by
- <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</dd>
-
- <dt><code>--disable-userdir</code></dt>
- <dd>Disable the mapping of requests to user-specific directories,
- which is provided by <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</dd>
- </dl>
-
-
- <h4><a name="disabledmodules" id="disabledmodules">Modules, disabled by default</a></h4>
- <p>Some modules are compiled by default and have to be enabled
- explicitly or by using the keywords <code>most</code> or
- <code>all</code> (see <code>--enable-mods-shared</code> below for
- further explanation) to be available. Therefore use the options
- below.</p>
-
- <dl>
- <dt><code>--enable-auth-anon</code></dt>
- <dd>Enable anonymous user access provided by
- <code class="module"><a href="../mod/mod_auth_anon.html">mod_auth_anon</a></code>.</dd>
-
- <dt><code>--enable-auth-dbm</code></dt>
- <dd><code class="module"><a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a></code> provides for HTTP Basic
- Authentication, where the usernames and passwords are stored in DBM
- type database files. Use this option to enable the module.</dd>
-
- <dt><code>--enable-auth-digest</code></dt>
- <dd>Enable RFC2617 Digest authentication provided by
- <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>. This module uses plain text files
- to store the credentials.</dd>
-
- <dt><code>--enable-auth-ldap</code></dt>
- <dd>Enable LDAP based authentication provided by
- <code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>.</dd>
-
- <dt><code>--enable-cache</code></dt>
- <dd>Enable dynamic file caching provided by
- <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>. This experimental module may be
- interesting for servers with high load or caching proxy servers. At
- least one storage management module (e.g.
- <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code> or <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>)
- is also necessary.</dd>
-
- <dt><code>--enable-cern-meta</code></dt>
- <dd>Enable the CERN-type meta files support provided by
- <code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code>.</dd>
-
- <dt><code>--enable-charset-lite</code></dt>
- <dd>Enable character set translation provided by
- <code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>. This module will be installed by
- default only on EBCDIC systems. On other systems, you have to enable
- it.</dd>
-
- <dt><code>--enable-dav</code></dt>
- <dd>Enable the WebDAV protocol handling provided by
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>. Support for filesystem resources is
- provided by the seperate module <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>. This
- module is also automatically enabled with
- <code>--enable-dav</code>.<br />
- Note: <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> can only be used together with the
- <code>http</code> protocol module.</dd>
-
- <dt><code>--enable-dav-fs</code></dt>
- <dd>Enable DAV support for filesystem resources, which is provided by
- <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>. This module is a provider for the
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> module, so you should also use
- <code>--enable-dav</code>.</dd>
-
- <dt><code>--enable-dav-lock</code></dt>
- <dd>Enable <code class="module"><a href="../mod/mod_dav_lock.html">mod_dav_lock</a></code> which provides generic DAV
- locking support for backend modules. This module needs at least
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> to function, so you should also use
- <code>--enable-dav</code>.</dd>
-
- <dt><code>--enable-deflate</code></dt>
- <dd>Enable deflate transfer encoding provided by
- <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>.</dd>
-
- <dt><code>--enable-disk-cache</code></dt>
- <dd>Enable disk caching provided by
- <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>.</dd>
-
- <dt><code>--enable-expires</code></dt>
- <dd>Enable Expires header control provided by
- <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code>.</dd>
-
- <dt><code>--enable-ext-filter</code></dt>
- <dd>Enable the external filter support provided by
- <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>.</dd>
-
- <dt><code>--enable-file-cache</code></dt>
- <dd>Enable the file cache provided by
- <code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>.</dd>
-
- <dt><code>--enable-headers</code></dt>
- <dd>Enable control of HTTP headers provided by
- <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>.</dd>
-
- <dt><code>--enable-info</code></dt>
- <dd>Enable the server information provided by
- <code class="module"><a href="../mod/mod_info.html">mod_info</a></code>.</dd>
-
- <dt><code>--enable-ldap</code></dt>
- <dd>Enable LDAP caching and connection pooling services provided by
- <code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>.</dd>
-
- <dt><code>--enable-logio</code></dt>
- <dd>Enable logging of input and output bytes including headers provided
- by <code class="module"><a href="../mod/mod_logio.html">mod_logio</a></code>.</dd>
-
- <dt><code>--enable-mem-cache</code></dt>
- <dd>Enable memory caching provided by
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>.</dd>
-
- <dt><code>--enable-mime-magic</code></dt>
- <dd>Enable automatical determining of MIME types, which is provided by
- <code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code>.</dd>
-
- <dt><code>--enable-isapi</code></dt>
- <dd>Enable the isapi extension support provided by
- <code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code>.</dd>
-
- <dt><code>--enable-proxy</code></dt>
- <dd>Enable the proxy/gateway functionality provided by
- <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. The proxying capabilities for
- <code>CONNECT</code>, <code>FTP</code> and <code>HTTP</code> are
- provided by the seperate modules <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code>,
- <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> and <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.
- These three modules are also automatically enabled with
- <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-proxy-connect</code></dt>
- <dd>Enable proxy support for <code>CONNECT</code> request handling,
- which is provided by <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code>. This module
- is an extension for the <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> module, so you
- should also use <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-proxy-ftp</code></dt>
- <dd>Enable proxy support for <code>FTP</code> requests, which is
- provided by <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>.. This module
- is an extension for the <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> module, so you
- should also use <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-proxy-http</code></dt>
- <dd>Enable proxy support for <code>HTTP</code> requests, which is
- provided by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>. This module
- is an extension for the <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> module, so you
- should also use <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-rewrite</code></dt>
- <dd>Enable rule based URL manipulation provided by
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</dd>
-
- <dt><code>--enable-so</code></dt>
- <dd>Enable DSO capability provided by <code class="module"><a href="../mod/mod_so.html">mod_so</a></code>. This
- module will be automatically enabled if you use the
- <code>--enable-mods-shared</code> option.</dd>
-
- <dt><code>--enable-speling</code></dt>
- <dd>Enable the functionality to correct common URL misspellings, which
- is provided by <code class="module"><a href="../mod/mod_spelling.html">mod_spelling</a></code>.</dd>
-
- <dt><code>--enable-ssl</code></dt>
- <dd>Enable support for SSL/TLS provided by
- <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</dd>
-
- <dt><code>--enable-unique-id</code></dt>
- <dd>Enable the generation of per-request unique ids, which is provided
- by <code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code>.</dd>
-
- <dt><code>--enable-usertrack</code></dt>
- <dd>Enable user-session tracking provided by
- <code class="module"><a href="../mod/mod_usertrack.html">mod_usertrack</a></code>.</dd>
-
- <dt><code>--enable-vhost-alias</code></dt>
- <dd>Enable mass virtual hosting provided by
- <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</dd>
- </dl>
-
-
- <h4><a name="developermodules" id="developermodules">Modules for developers</a></h4>
- <p>The following modules are useful only for developers and testing
- purposes and are disabled by default. Use the following options to
- enable them. If you are not sure whether you need one of these
- modules, omit them.</p>
-
- <dl>
-
- <dt><code>--enable-bucketeer</code></dt>
- <dd>Enable the manipulation filter for buckets, which is provided by
- <code>mod_bucketeer</code>.</dd>
-
-
- <dt><code>--enable-case-filter</code></dt>
- <dd>Enable the example uppercase conversion output filter support of
- <code>mod_case_filter</code>.</dd>
-
-
- <dt><code>--enable-case-filter-in</code></dt>
- <dd>Enable the example uppercase conversion input filter support of
- <code>mod_case_filter_in</code>.</dd>
-
- <dt><code>--enable-echo</code></dt>
- <dd>Enable the ECHO server provided by
- <code class="module"><a href="../mod/mod_echo.html">mod_echo</a></code>.</dd>
-
- <dt><code>--enable-example</code></dt>
- <dd>Enable the example and demo module
- <code class="module"><a href="../mod/mod_example.html">mod_example</a></code>.</dd>
-
-
- <dt><code>--enable-optional-fn-export</code></dt>
- <dd>Enable the example for an optional function exporter, which is
- provided by <code>mod_optional_fn_export</code>.</dd>
-
-
- <dt><code>--enable-optional-fn-import</code></dt>
- <dd>Enable the example for an optional function importer, which is
- provided by <code>mod_optional_fn_import</code>.</dd>
-
-
- <dt><code>--enable-optional-hook-export</code></dt>
- <dd>Enable the example for an optional hook exporter, which is provided
- by <code>mod_optional_hook_export</code>.</dd>
-
-
- <dt><code>--enable-optional-hook-import</code></dt>
- <dd>Enable the example optional hook importer, which is provided by
- <code>mod_optional_hook_import</code>.</dd>
- </dl>
-
-
- <h4><a name="modules" id="modules">MPMs and third-party modules</a></h4>
- <p>To add the necessary Multi Processing Module and additional third-party
- modules use the following options:</p>
-
- <dl>
- <dt><code>--with-module=<var>module-type</var>:<var>module-file</var>
- </code></dt>
- <dd><p>Add a third-party module to the list of statically linked
- modules. The module source file <code><var>module-file</var></code>
- will be searched in the <code>modules/<var>module-type</var></code>
- subdirectory of your Apache HTTP server source tree so it has to be
- placed there before. If it is not found here
- <code>configure</code> is considering <var>module-file</var> to be
- an absolute file path and tries to copy the source file into the
- <var>module-type</var> subdirectory.</p>
- <p>This option is useful to add small external modules consisting of
- one source file. For more complex modules you should read the
- vendor's documentation.</p>
- <div class="note"><h3>Note</h3>
- If you want to build a DSO module instead of a statically linked
- use <a href="apxs.html">apxs</a>.</div>
- </dd>
-
- <dt><code>--with-mpm=MPM</code></dt>
- <dd>Choose the process model for your server. You have to select
- exactly one <a href="../mpm.html">Multi-Processing Module</a>.
- Otherwise the <a href="../mpm.html#defaults">default MPM</a> for
- your operating system will be taken. Possible MPMs are
- <code class="module"><a href="../mod/beos.html">beos</a></code>, <code class="module"><a href="../mod/leader.html">leader</a></code>,
- <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>, <code class="module"><a href="../mod/perchild.html">perchild</a></code>,
- <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/threadpool.html">threadpool</a></code> and
- <code class="module"><a href="../mod/worker.html">worker</a></code>.</dd>
- </dl>
-
-
- <h4><a name="otheroptfeat" id="otheroptfeat">Cumulative and other options</a></h4>
- <dl>
- <dt><code>--enable-maintainer-mode</code></dt>
- <dd>Turn on debugging and compile time warnings.</dd>
-
- <dt><code>--enable-mods-shared=<var>MODULE-LIST</var></code></dt>
- <dd>
- <p>Defines a list of modules to be enabled and build as dynamic
- shared modules. This mean, these module have to be loaded
- dynamically by using the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive.</p>
- <p><var>MODULE-LIST</var> is a space separated list of modulenames
- enclosed by quotation marks. The module names are given without the
- preceding <code>mod_</code>. For example:</p>
- <div class="example"><p><code>
- --enable-mods-shared='headers rewrite dav'
- </code></p></div>
- <p>Additionally you can use the special keywords <code>all</code> and
- <code>most</code>. For example,</p>
- <div class="example"><p><code>
- --enable-mods-shared=most
- </code></p></div>
- <p>will compile most modules and build them as DSO modules.
- </p>
- </dd>
-
- <dt><code>--enable-modules=<var>MODULE-LIST</var></code></dt>
- <dd>This option behaves similar to <code>--enable-mods-shared</code>,
- but will link the given modules statically. This mean, these modules
- will always be present while running <code>httpd</code>. They need
- not be loaded with <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>.</dd>
-
- <dt><code>--enable-v4-mapped</code></dt>
- <dd>Allow IPv6 sockets to handle IPv4 connections.</dd>
-
- <dt><code>--with-port=<var>PORT</var></code></dt>
- <dd>This defines the port on which <code>httpd</code> will listen. This
- port number is used when generating the configuration file
- <code>httpd.conf</code>. The default is 80.</dd>
-
- <dt><code>--with-program-name</code></dt>
- <dd>Define an alternative executable name. The default is
- <code>httpd</code>.</dd>
- </dl>
-
-
-
- <h3><a name="packages" id="packages">Optional packages</a></h3>
- <p>These options are used to define optional packages.</p>
-
- <h4><a name="generalpackages" id="generalpackages">General syntax</a></h4>
- <p>Generally you can use the following syntax to define an optional
- package:</p>
-
- <dl>
- <dt><code>--with-<var>PACKAGE</var>[=<var>ARG</var>]</code></dt>
- <dd>Use the package <var>PACKAGE</var>. The default value for
- <var>ARG</var> is<code>yes</code>.</dd>
-
- <dt><code>--without-<var>PACKAGE</var></code></dt>
- <dd>Do not use the package <var>PACKAGE</var>. This is the same as
- <code>--with-<var>PACKAGE</var>=no</code>. This option is provided by
- <code>autoconf</code> but not very useful for the Apache HTTP
- Server.</dd>
- </dl>
-
-
-
-
- <h4><a name="packageopt" id="packageopt">Specific packages</a></h4>
- <dl>
- <dt><code>--with-apr=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd>The Apache Portable Runtime (APR) is part of the <code>httpd</code>
- source distribution and will automatically be build together with the
- HTTP server. If you want to use an already installed APR instead you
- have to tell <code>configure</code> the path to the
- <code>apr-config</code> script. You may set the absolute path and name
- or the directory to the installed APR. <code>apr-config</code> must
- exists within this directory or the subdirectory
- <code>bin</code>.</dd>
-
- <dt><code>--with-apr-util=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd>The Apache Portable Runtime Utilities (APU) are part of the
- <code>httpd</code> source distribution and will automatically be build
- together with the HTTP server. If you want to use an already installed
- APU instead you have to tell <code>configure</code> the path to the
- <code>apu-config</code> script. You may set the absolute path and name
- or the directory to the installed APU. <code>apu-config</code> must
- exists within this directory or the subdirectory
- <code>bin</code>.</dd>
-
- <dt><code>--with-ssl=<var>DIR</var></code></dt>
- <dd>If <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> has been enabled <code>configure</code>
- searches for an installed OpenSSL. You can set the directory path
- to the SSL/TLS toolkit instead.</dd>
-
- <dt><code>--with-z=<var>DIR</var></code></dt>
- <dd><code>configure</code> searches automatically for an installed
- <code>zlib</code> library if your source configuration requires one
- (e.g., when <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> is enabled). You can set the
- directory path to the compression library instead.</dd>
- </dl>
-
- <p>Several features of the Apache HTTP Server, including
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>'s DBM
- <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> use simple
- key/value databases for quick lookups of information. SDBM is included
- in the APU, so this database is always available. If you would like to
- use other database types, use the following options to enable
- them:</p>
-
- <dl>
- <dt><code>--with-gdbm[=<var>path</var>]</code></dt>
- <dd>If no <var>path</var> is specified, <code>configure</code> will
- search for the include files and libraries of a GNU DBM
- installation in the usual search paths. An explicit
- <var>path</var> will cause <code>configure</code> to look in
- <code><var>path</var>/lib</code> and
- <code><var>path</var>/include</code> for the relevant files.
- Finally, the <var>path</var> may specify specific include and
- library paths separated by a colon.</dd>
-
- <dt><code>--with-ndbm[=<var>path</var>]</code></dt>
- <dd>Like <code>--with-gdbm</code>, bur searches for a New DBM
- installation.</dd>
-
- <dt><code>--with-berkeley-db[=<var>path</var>]</code></dt>
- <dd>Like <code>--with-gdbm</code>, but searches for a Berkeley DB
- installation.</dd>
- </dl>
-
- <div class="note"><h3>Note</h3>
- <p>The DBM options are provided by the APU and passed through to its
- configuration script. They are useless when using an already
- installed APU defined by <code>--with-apr-util</code>.</p>
- <p>You may use more then one DBM implementation together with your
- HTTP server. The appropriated DBM type will be configured within
- the runtime configuration at each time.</p>
- </div>
-
-
-
- <h3><a name="supportopt" id="supportopt">Options for support programs</a></h3>
- <dl>
- <dt><code>--enable-static-support</code></dt>
- <dd>Build a statically linked version of the support binaries. This
- means, a stand-alone executable will be built with all the necessary
- libraries integrated. Otherwise the support binaries are linked
- dynamically by default.</dd>
-
- <dt><code>--enable-suexec</code></dt>
- <dd>Use this option to enable <code><a href="suexec.html">suexec</a></code>, which allows you to set
- uid and gid for spawned processes. <strong>Do not use this
- option unless you understand all the security implications of
- running a suid binary on your server.</strong> Further options
- to configure <code>suexec</code> are described <a href="#suexec">below</a>.</dd> </dl>
-
- <p>It is possible to create a statically linked binary of a single
- support program by using the following options:</p>
-
- <dl>
- <dt><code>--enable-static-ab</code></dt>
- <dd>Build a statically linked version of <code><a href="ab.html">ab</a></code>.</dd>
-
-
- <dt><code>--enable-static-checkgid</code></dt>
- <dd>Build a statically linked version of <code>checkgid</code>.</dd>
-
-
- <dt><code>--enable-static-htdbm</code></dt>
- <dd>Build a statically linked version of <code>htdbm</code>.</dd>
-
- <dt><code>--enable-static-htdigest</code></dt>
- <dd>Build a statically linked version of <code><a href="htdigest.html">htdigest</a></code>.</dd>
-
- <dt><code>--enable-static-htpasswd</code></dt>
- <dd>Build a statically linked version of <code><a href="htpasswd.html">htpasswd</a></code>.</dd>
-
- <dt><code>--enable-static-logresolve</code></dt>
- <dd>Build a statically linked version of <code><a href="logresolve.html">logresolve</a></code>.</dd>
-
- <dt><code>--enable-static-rotatelogs</code></dt>
- <dd>Build a statically linked version of <code><a href="rotatelogs.html">rotatelogs</a></code>.</dd>
- </dl>
-
- <h4><a name="suexec" id="suexec">suexec configuration options</a></h4>
- <p>The following options are used to fine tune the behavior of <code><a href="suexec.html">suexec</a></code>. See <a href="suexec.html#install">Configuring and installing suEXEC</a>
- for further information.</p>
-
- <dl>
- <dt><code>--with-suexec-bin</code></dt>
- <dd>This defines the path to suexec binary. Default is
- <code>--sbindir</code> (see <a href="directoryfinetuning">Fine
- tuning of installation directories</a>).</dd>
-
- <dt><code>--with-suexec-caller</code></dt>
- <dd>This defines the user allowed to call <code>suexec</code>. It should
- be the same as the user under which <code>httpd</code> normally
- runs.</dd>
-
- <dt><code>--with-suexec-docroot</code></dt>
- <dd>This defines the directory tree under which <code>suexec</code>
- access is allowed for executables. Default value is
- <code>--datadir/htdocs</code>.</dd>
-
- <dt><code>--with-suexec-gidmin</code></dt>
- <dd>Define this as the lowest GID allowed to be a target user for
- <code>suexec</code>. The default value is 100.</dd>
-
- <dt><code>--with-suexec-logfile</code></dt>
- <dd>This defines the filename of the <code>suexec</code> logfile. By
- default the logfile is named <code>suexec_log</code> and located in
- <code>--logfiledir</code>.</dd>
-
- <dt><code>--with-suexec-safepath</code></dt>
- <dd>Define the value of the environment variable <code>PATH</code> to
- be set for processes started by <code>suexec</code>. Default value is
- <code>/usr/local/bin:/usr/bin:/bin</code>.</dd>
-
- <dt><code>--with-suexec-userdir</code></dt>
- <dd>This defines the subdirectory under the user's directory that
- contains all executables for which <code>suexec</code> access is
- allowed. This setting is necessary when you want to use
- <code>suexec</code> together with user-specific directories (as
- provided by <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>). The default is
- <code>public_html</code>.</dd>
-
- <dt><code>--with-suexec-uidmin</code></dt>
- <dd>Define this as the lowest UID allowed to be a target user for
- <code>suexec</code>. The default value is 100.</dd>
-
- <dt><code>--with-suexec-umask</code></dt>
- <dd>Set <code>umask</code> for processes started by <code>suexec</code>.
- It defaults to your system settings.</dd>
- </dl>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="env" id="env">Environment variables</a></h2>
- <p>There are some useful environment variables to override the choices made by
- <code>configure</code> or to help it to find libraries and programs with
- nonstandard names or locations.</p>
-
-
- <dl>
- <dt><code>CC</code></dt>
- <dd>Define the C compiler command to be used for compilation.</dd>
-
- <dt><code>CFLAGS</code></dt>
- <dd>Set C compiler flags you want to use for compilation.</dd>
-
- <dt><code>CPP</code></dt>
- <dd>Define the C preprocessor command to be used.</dd>
-
- <dt><code>CPPFLAGS</code></dt>
- <dd>Set C/C++ preprocessor flags, e.g. <code>-I<var>includedir</var></code>
- if you have headers in a nonstandard directory <var>includedir</var>.</dd>
-
- <dt><code>LDFLAGS</code></dt>
- <dd>Set linker flags, e.g. <code>-L<var>libdir</var></code> if you have
- libraries in a nonstandard directory <var>libdir</var>.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/configure.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/configure.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/configure.html.ko.euc-kr b/docs/manual/programs/configure.html.ko.euc-kr
deleted file mode 100644
index f28d97eeae..0000000000
--- a/docs/manual/programs/configure.html.ko.euc-kr
+++ /dev/null
@@ -1,928 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>configure - ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>configure - ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/configure.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/configure.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>configure</code> ½ºÅ©¸³Æ®´Â ƯÁ¤ Ç÷¡Æû¿¡¼­ ¾ÆÆÄÄ¡
- À¥¼­¹ö¸¦ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇϱâÀ§ÇØ ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù. ¿©·¯
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¿øÇÏ´Â ¿ä±¸Á¶°Ç¿¡ ¸Â°Ô ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¼Ò½º ¹èÆ÷º»ÀÇ ÃÖ»óÀ§ µð·ºÅ丮¿¡ ÀÖ´Â ÀÌ ½ºÅ©¸³Æ®´Â À¯´Ð½º¿Í
- À¯´Ð½º·ù ½Ã½ºÅÛ¿¡¼­¸¸ »ç¿ëÇÑ´Ù. ´Ù¸¥ Ç÷¡ÆûÀ» »ç¿ëÇÑ´Ù¸é
- <a href="../platform/">Ç÷¡Æû</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#env">ȯ°æº¯¼ö</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="../install.html">ÄÄÆÄÀÏ°ú ¼³Ä¡</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code>configure</code> ½ºÅ©¸³Æ®´Â ¹èÆ÷º»ÀÇ ÃÖ»óÀ§
- µð·ºÅ丮¿¡¼­ ½ÇÇàÇØ¾ß ÇÑ´Ù.</p>
-
- <p><code><strong>./configure</strong> [<var>OPTION</var>]...
- [<var>VAR</var>=<var>VALUE</var>]...</code></p>
-
- <p>ȯ°æº¯¼ö¸¦ (¿¹¸¦ µé¾î, <code>CC</code>, <code>CFLAGS</code>,
- ...) ÁöÁ¤ÇÏ·Á¸é, <code><var>VAR</var>=<var>VALUE</var></code>¿Í
- °°ÀÌ Áö½ÃÇÑ´Ù. <a href="#env">¾Æ·¡¿¡¼­</a> À¯¿ëÇÑ È¯°æº¯¼öµéÀ»
- ¼³¸íÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
- <ul>
- <li><a href="#configurationoptions">±¸¼º ¿É¼Ç</a></li>
- <li><a href="#installationdirectories">¼³Ä¡ µð·ºÅ丮</a></li>
- <li><a href="#systemtypes">½Ã½ºÅÛ Á¾·ù</a></li>
- <li><a href="#optionalfeatures">±â´É ¼±ÅÃ</a></li>
- <li><a href="#supportopt">Áö¿ø ÇÁ·Î±×·¥À» À§ÇÑ ¿É¼Ç</a></li>
- </ul>
-
- <h3><a name="configurationoptions" id="configurationoptions">±¸¼º ¿É¼Ç</a></h3>
-
- <p>ÀÌ ¿É¼ÇµéÀº <code>configure</code> ÀÚü Çൿ¿¡ ¿µÇâÀ»
- ÁØ´Ù.</p>
-
- <dl>
- <dt><code>-C</code></dt>
- <dt><code>--config-cache</code></dt>
- <dd><code>--cache-file=config.cache</code>¿Í °°´Ù.</dd>
-
- <dt><code>--cache-file=<var>FILE</var></code></dt>
- <dd>°Ë»ç °á°ú¸¦ <var>FILE</var> ÆÄÀÏ¿¡ ij½ÌÇÑ´Ù.
- ±âº»°ªÀº °Ë»ç °á°ú¸¦ ±â·ÏÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-h</code></dt>
- <dt><code>--help [short|recursive]</code></dt>
- <dd>µµ¿ò¸»À» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù. <code>short</code> ¾Æ±Ô¸ÕÆ®´Â
- ÀÌ ÆÐÅ°Áö ƯÀ¯ÀÇ ¿É¼Ç¸¸À» Ãâ·ÂÇÑ´Ù. <code>recursive</code>
- ¾Æ±Ô¸ÕÆ®´Â Æ÷ÇÔµÈ ¸ðµç ÆÐÅ°Áö¿¡ ´ëÇÑ ÂªÀº µµ¿ò¸»À»
- º¸¿©ÁØ´Ù.</dd>
-
- <dt><code>-n</code></dt>
- <dt><code>--no-create</code></dt>
- <dd><code>configure</code> ½ºÅ©¸³Æ®¸¦ Á¤»óÀûÀ¸·Î ½ÇÇàÇÏÁö¸¸,
- Ãâ·ÂÆÄÀÏÀ» ¸¸µéÁö ¾Ê´Â´Ù. ÀÌ ¿É¼ÇÀº ÄÄÆÄÀÏÀ» À§ÇÑ makefileÀ»
- ¸¸µé±â ÀÌÀü¿¡ °Ë»ç °á°ú¸¦ È®ÀÎÇغ¼¶§ À¯¿ëÇÏ´Ù.</dd>
-
- <dt><code>-q</code></dt>
- <dt><code>--quiet</code></dt>
- <dd>½ÇÇàÁß¿¡ <code>checking ...</code> ¹®±¸¸¦ Ãâ·ÂÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--srcdir=<var>DIR</var></code></dt>
- <dd><var>DIR</var> µð·ºÅ丮¸¦ ¼Ò½ºÆÄÀÏ µð·ºÅ丮·Î ÁöÁ¤ÇÑ´Ù.
- ±âº»°ªÀº configure°¡ ÀÖ´Â µð·ºÅ丮 ȤÀº »óÀ§µð·ºÅ丮
- <code>..</code>ÀÌ´Ù.</dd>
-
- <dt><code>--silent</code></dt>
- <dd><code>--quiet</code>¿Í °°´Ù.</dd>
-
- <dt>-V</dt>
- <dt>--version</dt>
- <dd>ÀúÀÛ±Ç Á¤º¸¸¦ Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.</dd>
- </dl>
-
-
- <h3><a name="installationdirectories" id="installationdirectories">¼³Ä¡ µð·ºÅ丮</a></h3>
-
- <p>ÀÌ ¿É¼ÇµéÀº ¼³Ä¡ µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù. ¼³Ä¡ À§Ä¡´Â
- ¼±ÅÃÇÑ ±¸Á¶(layout)¿¡ µû¶ó ´Ù¸£´Ù.</p>
-
- <dl>
- <dt><code>--prefix=<var>PREFIX</var></code></dt>
- <dd>¾ÆÅ°ÅØÃÄ¿¡ µ¶¸³ÀûÀÎ ÆÄÀÏÀ» <var>PREFIX</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- ±âº»°ªÀº <code>/usr/local/apache2</code>ÀÌ´Ù.</dd>
-
- <dt><code>--exec-prefix=<var>EPREFIX</var></code></dt>
- <dd>¾ÆÅ°ÅØÃÄ¿¡ ÀÇÁ¸ÀûÀÎ ÆÄÀÏÀ» <var>EPREFIX</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- ±âº»°ªÀº <var>PREFIX</var> µð·ºÅ丮ÀÌ´Ù.</dd>
- </dl>
-
- <p>±âº»ÀûÀ¸·Î <code>make install</code>Àº
- <code>/usr/local/apache2/bin</code>,
- <code>/usr/local/apache2/lib</code>¿Í °°Àº À§Ä¡¿¡ ¸ðµç
- ÆÄÀÏÀ» ¼³Ä¡ÇÑ´Ù. <code>--prefix=$HOME</code>°ú °°ÀÌ
- <code>--prefix</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿©
- <code>/usr/local/apache2</code> ÀÌ¿ÜÀÇ ¼³Ä¡ »óÀ§µð·ºÅ丮¸¦
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <h4><a name="layout" id="layout">µð·ºÅ丮 ±¸Á¶ ÁöÁ¤</a></h4>
- <dl>
- <dt><code>--enable-layout=<var>LAYOUT</var></code></dt>
- <dd>¼³Ä¡ À§Ä¡¸¦ <var>LAYOUT</var> ±¸Á¶¿¡ µû¸£µµ·Ï
- ¼Ò½ºÄÚµå¿Í ÄÄÆÄÀÏ ½ºÅ©¸³Æ®¸¦ ±¸¼ºÇÑ´Ù. ±¸Á¶¸¦ »ç¿ëÇϸé
- ÆÄÀÏ Á¾·ù¿¡ µû¶ó ¼³Ä¡ À§Ä¡¸¦ µû·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
- <code>config.layout</code> ÆÄÀÏ¿¡ ¿©·¯ ¼³Á¤ ¿¹°¡ ÀÖ°í,
- À̸¦ Âü°íÇÏ¿© Á÷Á¢ ¼³Á¤À» ¸¸µé ¼öµµ ÀÖ´Ù. ÆÄÀÏ¿¡¼­
- °¢ ±¸Á¶´Â <code>&lt;Layout
- FOO&gt;...&lt;/Layout&gt;</code>·Î ±¸ºÐµÇ¸ç, ÀÌ
- ºÎºÐÀº <code>FOO</code>¶ó´Â À̸§ÀÇ ±¸Á¶¸¦ ³ªÅ¸³½´Ù.
- ±¸Á¶ÀÇ ±âº»°ªÀº <code>Apache</code>ÀÌ´Ù.</dd>
- </dl>
-
-
- <h4><a name="directoryfinetuning" id="directoryfinetuning">¼³Ä¡ µð·ºÅ丮ÀÇ
- ÀÚ¼¼ÇÑ Á¶Á¤</a></h4>
-
- <p>¼³Ä¡ µð·ºÅ丮¸¦ ´õ ¼öÁ¤ÇÑ´Ù¸é ¾Æ·¡ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.
- °¢ µð·ºÅ丮ÀÇ ±âº»°ªÀº <code>autoconf</code>°¡ ÁöÁ¤Çϸç,
- ¼±ÅÃÇÑ ±¸Á¶¿¡ µû¶ó ´Ù¸§À» ÁÖÀÇÇ϶ó.</p>
-
- <dl>
-
- <dt><code>--bindir=<var>DIR</var></code></dt>
- <dd>»ç¿ëÀÚ ½ÇÇàÆÄÀÏÀ» <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù. »ç¿ëÀÚ
- ½ÇÇàÆÄÀÏ¿¡´Â »çÀÌÆ® °ü¸®ÀÚ¿¡°Ô À¯¿ëÇÑ
- <code>htpasswd</code>¿Í <code>dbmmanage</code> °°Àº
- Áö¿ø ÇÁ·Î±×·¥µµ Æ÷ÇԵȴÙ. <var>DIR</var>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/bin</code>ÀÌ´Ù.</dd>
-
- <dt><code>--datadir=<var>DIR</var></code></dt>
- <dd>¾ÆÅ°ÅØÃÄ µ¶¸³ÀûÀÎ ÀбâÀü¿ë ÀڷḦ <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>datadir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/share</code>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--includedir=<var>DIR</var></code></dt>
- <dd>C Çì´õÆÄÀÏÀ» <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>includedir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/include</code>ÀÌ´Ù.</dd>
-
- <dt><code>--infodir=<var>DIR</var></code></dt>
- <dd>info ¹®¼­¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>infodir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/info</code>ÀÌ´Ù. ÇöÀç ÀÌ ¿É¼ÇÀº
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--libdir=<var>DIR</var></code></dt>
- <dd>¿ÀºêÁ§Æ®ÄÚµå ¶óÀ̺귯¸®¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>libdir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/lib</code>ÀÌ´Ù.</dd>
-
- <dt><code>--libexecdir=<var>DIR</var></code></dt>
- <dd>ÇÁ·Î±×·¥ ½ÇÇàÆÄÀÏÀ» (Áï, °øÀ¯¸ðµâ) <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>libexecdir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/libexec</code>ÀÌ´Ù.</dd>
-
- <dt><code>--localstatedir=<var>DIR</var></code></dt>
- <dd>º¯°æµÇ´Â ¸Ó½®º° Á¤º¸¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>localstatedir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/var</code>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--mandir=<var>DIR</var></code></dt>
- <dd>man ¹®¼­¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>mandir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/man</code>ÀÌ´Ù.</dd>
-
- <dt><code>--oldincludedir=<var>DIR</var></code></dt>
- <dd>gcc°¡ ¾Æ´Ñ ÄÄÆÄÀÏ·¯¸¦ À§ÇÑ C Çì´õÆÄÀÏÀ» <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>oldincludedir</code>ÀÇ ±âº»°ªÀº
- <code>/usr/include</code>ÀÌ´Ù. <code>autoconf</code>¿¡
- ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--sbindir=<var>DIR</var></code></dt>
- <dd>½Ã½ºÅÛ °ü¸®ÀÚ¿ë ½ÇÇàÆÄÀÏÀ» <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- ½Ã½ºÅÛ °ü¸®ÀÚ¿ë ½ÇÇàÆÄÀÏÀ̶õ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ½ÇÇàÇϴµ¥
- ÇÊ¿äÇÑ <code>httpd</code>, <code>apachectl</code>,
- <code>suexec</code> µî ¼­¹ö ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù.
- <code>sbindir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/sbin</code>ÀÌ´Ù.</dd>
-
- <dt><code>--sharedstatedir=<var>DIR</var></code></dt>
- <dd>º¯°æµÇ´Â ¾ÆÅ°ÅØÃÄ µ¶¸³ÀûÀÎ ÀڷḦ <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>sharedstatedir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/com</code>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--sysconfdir=<var>DIR</var></code></dt>
- <dd>¼­¹ö ¼³Á¤ÆÄÀÏ <code>httpd.conf</code>,
- <code>mime.types</code>¿Í °°Àº ÀбâÀü¿ë ¸Ó½®º° ÀڷḦ
- <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù. <code>sysconfdir</code>ÀÇ
- ±âº»°ªÀº <code><var>PREFIX</var>/etc</code>ÀÌ´Ù.</dd>
- </dl>
-
-
-
- <h3><a name="systemtypes" id="systemtypes">½Ã½ºÅÛ Á¾·ù</a></h3>
-
- <p>´Ù¸¥ ½Ã½ºÅÛ¿¡¼­ ½ÇÇàÇÒ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦
- ±³Â÷ÄÄÆÄÀÏÇϱâ(cross-compile)Çϱâ À§ÇÑ ¿É¼ÇµéÀÌ´Ù. ¼­¹ö¸¦
- ÄÄÆÄÀÏÇÑ ½Ã½ºÅÛ¿¡¼­ ¼­¹ö¸¦ ½ÇÇàÇÏ´Â ÀϹÝÀûÀÎ °æ¿ì, ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-
- <dl>
- <dt><code>--build=<var>BUILD</var></code></dt>
- <dd>µµ±¸¸¦ ÄÄÆÄÀÏÇÏ´Â ½Ã½ºÅÛÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>config.guess</code> ½ºÅ©¸³Æ®ÀÇ °á°úÀÌ´Ù.</dd>
-
- <dt><code>--host=<var>HOST</var></code></dt>
- <dd>¼­¹ö¸¦ ½ÇÇàÇÒ ½Ã½ºÅÛÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. <var>HOST</var>ÀÇ
- ±âº»°ªÀº <var>BUILD</var>ÀÌ´Ù.</dd>
-
- <dt><code>--target=<var>TARGET</var></code></dt>
- <dd><var>TARGET</var> ½Ã½ºÅÛ Á¾·ù¸¦ À§ÇÑ ÄÄÆÄÀÏ·¯¸¦ ¸¸µé¶§
- »ç¿ëÇÑ´Ù. ±âº»°ªÀº <var>HOST</var>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ¾ÆÆÄÄ¡ À¥¼­¹ö¿Í´Â
- °ü·ÃÀÌ ¾ø´Ù.</dd>
- </dl>
-
-
- <h3><a name="optionalfeatures" id="optionalfeatures">±â´É ¼±ÅÃ</a></h3>
-
- <p>ÀÌ ¿É¼ÇÀº À¥¼­¹öÀÇ ¼¼ºÎ ±â´ÉÀ» Á¶ÀýÇÑ´Ù.</p>
-
- <h4><a name="generaloptfeat" id="generaloptfeat">ÀϹÝÀûÀÎ ¹®¹ý</a></h4>
- <p>ÀϹÝÀûÀ¸·Î ´ÙÀ½ ¹®¹ýÀ» »ç¿ëÇÏ¿© ±â´ÉÀ» Æ÷ÇÔÇÏ°í »«´Ù:</p>
-
- <dl>
- <dt><code>--disable-<var>FEATURE</var></code></dt>
- <dd><var>FEATURE</var> ±â´ÉÀ» »«´Ù.
- <code>--enable-<var>FEATURE</var>=no</code>¿Í °°´Ù.</dd>
-
- <dt><code>--enable-<var>FEATURE</var>[=<var>ARG</var>]</code></dt>
- <dd><var>FEATURE</var> ±â´ÉÀ» Æ÷ÇÔÇÑ´Ù. <var>ARG</var>ÀÇ
- ±âº»°ªÀº <code>yes</code>ÀÌ´Ù.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=shared</code></dt>
- <dd>ÇØ´ç ¸ðµâÀ» DSO ¸ðµâ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=static</code></dt>
- <dd>Æ÷ÇÔÇÏ´Â ¸ðµâÀº ±âº»ÀûÀ¸·Î Á¤ÀûÀ¸·Î ¸µÅ©µÈ´Ù. ÀÌ
- ¿É¼ÇÀº ¸í½ÃÀûÀ¸·Î Á¤Àû ¸µÅ©¸¦ °­Á¦ÇÑ´Ù.</dd>
- </dl>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <code>configure</code>´Â <var>foo</var>°¡ ¾ø´Â °æ¿ì
- <code>--enable-<var>foo</var></code>¸¦ »ç¿ëÇصµ ÀÌ »ç½ÇÀ»
- ¾Ë·ÁÁÖÁö ¾ÊÀ¸¹Ç·Î ÁÖÀÇÇؼ­ ÀÔ·ÂÇØ¾ß ÇÑ´Ù.
- </div>
-
-
-
- <h4><a name="enabledmodules" id="enabledmodules">±âº»ÀûÀ¸·Î Æ÷ÇÔÇÏ´Â ¸ðµâ</a></h4>
- <p>¾î¶² ¸ðµâÀº ±âº»ÀûÀ¸·Î ÄÄÆÄÀϵDZ⶧¹®¿¡ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é
- ¸í½ÃÀûÀ¸·Î »©Áà¾ß ÇÑ´Ù. ´ÙÀ½ ¿É¼ÇÀº ƯÁ¤ ¸ðµâÀ» ÄÄÆÄÀÏ
- °úÁ¤¿¡¼­ Á¦¿ÜÇÑ´Ù.</p>
-
- <dl>
- <dt><code>--disable-actions</code></dt>
- <dd><code class="module"><a href="../mod/mod_actions.html">mod_actions</a></code>°¡ Á¦°øÇÏ´Â ¿äû¿¡ ´ëÇÑ
- Çൿ ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-alias</code></dt>
- <dd><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>°¡ Á¦°øÇÏ´Â ¿äûÀ»
- ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐÀ¸·Î ´ëÀÀÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-asis</code></dt>
- <dd><code class="module"><a href="../mod/mod_asis.html">mod_asis</a></code>°¡ Á¦°øÇÏ´Â as-is ÆÄÀÏÇüÀ»
- Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-auth</code></dt>
- <dd><code class="module"><a href="../mod/mod_auth.html">mod_auth</a></code>°¡ Á¦°øÇÏ´Â »ç¿ëÀÚº° Á¢±ÙÁ¦¾î
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀº »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦
- ÀÏ¹Ý ¹®ÀÚÆÄÀÏ¿¡ ÀúÀåÇÏ´Â HTTP Basic Authentication¿¡¼­
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--disable-autoindex</code></dt>
- <dd><code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>°¡ Á¦°øÇÏ´Â µð·ºÅ丮
- ¸ñ·Ï ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-access</code></dt>
- <dd><code class="module"><a href="../mod/mod_access.html">mod_access</a></code>°¡ Á¦°øÇϴ ȣ½ºÆ®º°
- Á¢±ÙÁ¦¾î ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-cgi</code></dt>
- <dd>ºñ¾²·¹µå MPMÀ» »ç¿ëÇÏ´Â °æ¿ì CGI ½ºÅ©¸³Æ®¸¦ Áö¿øÇÏ´Â
- <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>¸¦ ±âº»ÀûÀ¸·Î Æ÷ÇÔÇÑ´Ù. ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇϸé CGI¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-cgid</code></dt>
- <dd>¾²·¹µå MPMÀÎ <code class="module"><a href="../mod/worker.html">worker</a></code>³ª
- <code class="module"><a href="../mod/perchild.html">perchild</a></code>¸¦ »ç¿ëÇÏ´Â °æ¿ì ±âº»ÀûÀ¸·Î
- <code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code>°¡ CGI ½ºÅ©¸³Æ®¸¦ Áö¿øÇÑ´Ù.
- ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé CGI¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-charset-lite</code></dt>
- <dd><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>°¡ Á¦°øÇÏ´Â ¹®ÀÚÁýÇÕ
- º¯È¯ ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀº EBCDIC ½Ã½ºÅÛ¿¡¼­¸¸
- ±âº»ÀûÀ¸·Î Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><code>--disable-dir</code></dt>
- <dd><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>ÀÌ Á¦°øÇÏ´Â µð·ºÅ丮 ¿äû
- ó¸® ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-env</code></dt>
- <dd><code class="module"><a href="../mod/mod_env.html">mod_env</a></code>°¡ Á¦°øÇϴ ȯ°æº¯¼ö ¼³Á¤/ÇØÁ¦
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
-
- <dt><code>--disable-http</code></dt>
- <dd>HTTP ÇÁ·ÎÅäÄÝÀ» ó¸®ÇÏÁö ¾Ê´Â´Ù. <code>http</code>
- ¸ðµâÀº ¼­¹ö°¡ À¥¼­¹ö·Î µ¿ÀÛÇϴµ¥ ±âº»ÀûÀÎ ¸ðµâÀÌ´Ù.
- ´ë½Å ´Ù¸¥ ÇÁ·ÎÅäÄÝ ¸ðµâÀ» »ç¿ëÇÒ °æ¿ì¿¡¸¸ ÀÌ ¸ðµâÀÌ
- À¯¿ëÇÏ´Ù. <strong>ÀÚ½ÅÀÌ ¹«¾ùÀ» ÇÏ´ÂÁö È®½ÇÈ÷ ¾ËÁö
- ¸øÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» »©Áö ¸¶¶ó</strong>
- <br />
- ÁÖÀÇ: ÀÌ ¸ðµâÀº Ç×»ó Á¤ÀûÀ¸·Î ¸µÅ©µÈ´Ù.</dd>
-
- <dt><code>--disable-imap</code></dt>
- <dd><code class="module"><a href="../mod/mod_imap.html">mod_imap</a></code>ÀÌ Á¦°øÇÏ´Â ¼­¹ö±â¹Ý imagemap
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-include</code></dt>
- <dd><code class="module"><a href="../mod/mod_include.html">mod_include</a></code>°¡ Á¦°øÇÏ´Â Server Side
- Includes ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-log-config</code></dt>
- <dd><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>°¡ Á¦°øÇÏ´Â ·Î±×
- ¼³Á¤À» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀÌ ¾øÀ¸¸é ¼­¹öÀÇ ¿äûÀ»
- ·Î±×¿¡ ±â·ÏÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code>--disable-mime</code></dt>
- <dd><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>Àº ¿äûÇÑ ÆÄÀϸíÀÇ È®ÀåÀÚ¿¡
- µû¶ó ÆÄÀÏÀÇ Çൿ°ú ³»¿ë(mime-type, ¾ð¾î, ¹®ÀÚÁýÇÕ,
- ÀÎÄÚµù)À» °áÁ¤ÇÑ´Ù. (ÀÌ ¸ðµâÀ» Á¦°ÅÇÏ¿©) ÆÄÀÏ È®ÀåÀÚ¸¦
- MIME°ú ¿¬°üÇÏÁö ¾Ê´Â °ÍÀ» ÀϹÝÀûÀ¸·Î ÃßõÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-negotiation</code></dt>
- <dd><code class="module"><a href="../mod/mod_negotiation.html">mod_negotiation</a></code>ÀÌ Á¦°øÇÏ´Â ³»¿ëÇù»ó
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-setenvif</code></dt>
- <dd><code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>°¡ Á¦°øÇÏ´Â Çì´õ¿¡
- µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-status</code></dt>
- <dd><code class="module"><a href="../mod/mod_status.html">mod_status</a></code>°¡ Á¦°øÇÏ´Â ÇÁ·Î¼¼½º/¾²·¹µå
- °¨½Ã ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-userdir</code></dt>
- <dd><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>ÀÌ Á¦°øÇÏ´Â ¿äûÀ» »ç¿ëÀÚº°
- µð·ºÅ丮¿¡ ´ëÀÀÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
-
-
- <h4><a name="disabledmodules" id="disabledmodules">±âº»ÀûÀ¸·Î Æ÷ÇÔÇÏÁö ¾Ê´Â ¸ðµâ</a></h4>
- <p>±âº»ÀûÀ¸·Î ÄÄÆÄÀϵǴ ¸ðµâµµ ÀÖÁö¸¸, ¸ðµâÀ» »ç¿ëÇÏ·Á¸é
- Á÷Á¢ ȤÀº <code>most</code>³ª <code>all</code> Å°¿öµå¸¦
- »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î Æ÷ÇÔÇØ¾ß ÇÏ´Â ¸ðµâÀÌ ÀÖ´Ù. ±×·¡¼­
- ¾Æ·¡ ¿É¼ÇµéÀ» »ç¿ëÇÑ´Ù.</p>
-
- <dl>
- <dt><code>--enable-auth-anon</code></dt>
- <dd><code class="module"><a href="../mod/mod_auth_anon.html">mod_auth_anon</a></code>ÀÌ Á¦°øÇÏ´Â À͸í»ç¿ëÀÚ
- Á¢±Ù ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-auth-dbm</code></dt>
- <dd><code class="module"><a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a></code>Àº »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦
- DBMÇü½ÄÀÇ µ¥ÀÌÅͺ£À̽º ÆÄÀÏ¿¡ ÀúÀåÇÏ´Â HTTP Basic
- Authentication¿¡¼­ »ç¿ëÇÑ´Ù. ¸ðµâÀ» »ç¿ëÇÏ·Á¸é ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-auth-digest</code></dt>
- <dd><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>°¡ Á¦°øÇÏ´Â RFC2617
- Digest authenticationÀ» »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº Á¤º¸¸¦
- ÀÏ¹Ý ¹®ÀÚÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù.</dd>
-
- <dt><code>--enable-auth-ldap</code></dt>
- <dd><code class="module"><a href="../mod/mod_auth_ldap.html">mod_auth_ldap</a></code>ÀÌ Á¦°øÇÏ´Â LDAP±â¹Ý
- ÀÎÁõ ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-cache</code></dt>
- <dd><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>°¡ Á¦°øÇÏ´Â µ¿ÀûÀ¸·Î »ý¼ºÇÏ´Â
- ÆÄÀÏÀÇ Ä³½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù. ¸Å¿ì ºÎÇÏ°¡ ¸¹°Å³ª ÇÁ·Ï½Ã
- ¼­¹ö¸¦ ij½ÌÇÏ´Â ¼­¹ö¿¡°Ô ÀÌ ½ÇÇèÀûÀÎ ¸ðµâÀÌ À¯¿ëÇÒ
- ¼ö ÀÖ´Ù. ÃÖ¼ÒÇÑ ÇÑ°¡Áö ÀúÀå°ü¸®¸ðµâ(storage management
- module)À» (¿¹¸¦ µé¾î, <code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>³ª
- <code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>) °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-cern-meta</code></dt>
- <dd><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code>°¡ Á¦°øÇÏ´Â CERN ¸ÞŸÆÄÀÏ
- Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-charset-lite</code></dt>
- <dd><code class="module"><a href="../mod/mod_charset_lite.html">mod_charset_lite</a></code>°¡ Á¦°øÇÏ´Â ¹®ÀÚÁýÇÕ
- º¯È¯ ±â´ÉÀ» »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº EBCDIC ½Ã½ºÅÛ¿¡¼­¸¸
- ±âº»ÀûÀ¸·Î Æ÷ÇԵȴÙ. ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â Á÷Á¢ Æ÷ÇÔ½ÃÄÑÁà¾ß
- ÇÑ´Ù.</dd>
-
- <dt><code>--enable-dav</code></dt>
- <dd><code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>°¡ Á¦°øÇÏ´Â WebDAV ÇÁ·ÎÅäÄÝ
- ó¸® ±â´ÉÀ» »ç¿ëÇÑ´Ù. µ¶¸³µÈ <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>
- ¸ðµâÀÌ ÆÄÀϽýºÅÛ ÀÚ¿øÀ» Áö¿øÇÑ´Ù. ÀÌ ¸ðµâÀº
- <code>--enable-dav</code>¸¦ »ç¿ëÇϸé ÀÚµ¿À¸·Î Æ÷ÇÔÇÑ´Ù.<br />
- ÁÖÀÇ: <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code>´Â <code>http</code>
- ÇÁ·ÎÅäÄÝ ¸ðµâ°ú °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-dav-fs</code></dt>
- <dd><code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code>°¡ Á¦°øÇÏ´Â DAVÀÇ ÆÄÀϽýºÅÛ
- ÀÚ¿ø Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº
- <code class="module"><a href="../mod/mod_dav.html">mod_dav</a></code> ¸ðµâÀ» À§ÇÑ Á¦°øÀÚÀ̱⠶§¹®¿¡
- <code>--enable-dav</code>µµ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-deflate</code></dt>
- <dd><code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>°¡ Á¦°øÇÏ´Â ¾ÐÃàÀü¼Û
- ÀÎÄÚµù ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-disk-cache</code></dt>
- <dd><code class="module"><a href="../mod/mod_disk_cache.html">mod_disk_cache</a></code>°¡ Á¦°øÇÏ´Â µð½ºÅ©
- ij½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-expires</code></dt>
- <dd><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code>°¡ Á¦°øÇÏ´Â Expires
- Çì´õ Á¶Àý ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-ext-filter</code></dt>
- <dd><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>°¡ Á¦°øÇÏ´Â ¿ÜºÎ
- ÇÊÅÍ Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-file-cache</code></dt>
- <dd><code class="module"><a href="../mod/mod_file_cache.html">mod_file_cache</a></code>°¡ Á¦°øÇÏ´Â ÆÄÀÏ
- ij½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-headers</code></dt>
- <dd><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>°¡ Á¦°øÇÏ´Â HTTP Çì´õ
- Á¶Àý ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-info</code></dt>
- <dd><code class="module"><a href="../mod/mod_info.html">mod_info</a></code>°¡ Á¦°øÇÏ´Â ¼­¹öÁ¤º¸ ±â´ÉÀ»
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-ldap</code></dt>
- <dd><code class="module"><a href="../mod/mod_ldap.html">mod_ldap</a></code>ÀÌ Á¦°øÇÏ´Â LDAP ij½Ì°ú
- ¿¬°áÇ® ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-logio</code></dt>
- <dd><code class="module"><a href="../mod/mod_logio.html">mod_logio</a></code>°¡ Á¦°øÇÏ´Â ·Î±×¿¡ Çì´õ¿Í
- ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·ÏÇÏ´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-mem-cache</code></dt>
- <dd><code class="module"><a href="../mod/mod_mem_cache.html">mod_mem_cache</a></code>°¡ Á¦°øÇÏ´Â ¸Þ¸ð¸®
- ij½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-mime-magic</code></dt>
- <dd><code class="module"><a href="../mod/mod_mime_magic.html">mod_mime_magic</a></code>ÀÌ Á¦°øÇÏ´Â MIME
- type ÀÚµ¿ ÀÎ½Ä ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-isapi</code></dt>
- <dd><code class="module"><a href="../mod/mod_isapi.html">mod_isapi</a></code>°¡ Á¦°øÇÏ´Â isapi È®ÀåÀ»
- Áö¿øÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy</code></dt>
- <dd><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>°¡ Á¦°øÇÏ´Â ÇÁ·Ï½Ã/°ÔÀÌÆ®¿þÀÌ
- ±â´ÉÀ» »ç¿ëÇÑ´Ù. <code>CONNECT</code>, <code>FTP</code>,
- <code>HTTP</code>¿¡ ´ëÇÑ ÇÁ·Ï½Ã ±â´ÉÀ» °¢°¢
- <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code>,
- <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>,
- <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
- ¸ðµâÀÌ Á¦°øÇÑ´Ù. <code>--enable-proxy</code>¸¦ »ç¿ëÇϸé
- ÀÌ ¼¼ ¸ðµâÀ» ÀÚµ¿À¸·Î Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy-connect</code></dt>
- <dd><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code>°¡ Á¦°øÇÏ´Â
- <code>CONNECT</code> ¿äû¿¡ ´ëÇÑ ÇÁ·Ï½Ã Áö¿ø ±â´ÉÀ»
- »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> ¸ðµâÀÇ
- È®ÀåÀ̹ǷÎ, <code>--enable-proxy</code>µµ °°ÀÌ »ç¿ëÇؾß
- ÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy-ftp</code></dt>
- <dd><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>°¡ Á¦°øÇÏ´Â
- <code>FTP</code> ¿äû¿¡ ´ëÇÑ ÇÁ·Ï½Ã Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.
- ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> ¸ðµâÀÇ È®ÀåÀ̹ǷÎ,
- <code>--enable-proxy</code>µµ °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy-http</code></dt>
- <dd><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>°¡ Á¦°øÇÏ´Â
- <code>HTTP</code> ¿äû¿¡ ´ëÇÑ ÇÁ·Ï½Ã Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.
- ÀÌ ¸ðµâÀº <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> ¸ðµâÀÇ È®ÀåÀ̹ǷÎ,
- <code>--enable-proxy</code>µµ °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-rewrite</code></dt>
- <dd><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>°¡ Á¦°øÇÏ´Â ±ÔÄ¢±â¹Ý
- URL Á¶ÀÛ ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-so</code></dt>
- <dd><code class="module"><a href="../mod/mod_so.html">mod_so</a></code>°¡ Á¦°øÇÏ´Â DSO ±â´ÉÀ» »ç¿ëÇÑ´Ù.
- <code>--enable-mods-shared</code> ¿É¼ÇÀ» »ç¿ëÇϸé
- ÀÚµ¿À¸·Î ÀÌ ¸ðµâÀ» Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><code>--enable-speling</code></dt>
- <dd><code class="module"><a href="../mod/mod_spelling.html">mod_spelling</a></code>ÀÌ Á¦°øÇÏ´Â URL¿¡¼­
- ÀϹÝÀûÀÎ ¸ÂÃã¹ý ½Ç¼ö¸¦ °íÄ¡´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-ssl</code></dt>
- <dd><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>ÀÌ Á¦°øÇÏ´Â SSL/TLS ±â´ÉÀ»
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-unique-id</code></dt>
- <dd><code class="module"><a href="../mod/mod_unique_id.html">mod_unique_id</a></code>°¡ Á¦°øÇÏ´Â ¿äû¸¶´Ù
- À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¸¸µå´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-usertrack</code></dt>
- <dd><code class="module"><a href="../mod/mod_usertrack.html">mod_usertrack</a></code>ÀÌ Á¦°øÇÏ´Â »ç¿ëÀÚ¼¼¼Ç
- ÃßÀû ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-vhost-alias</code></dt>
- <dd><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>°¡ Á¦°øÇÏ´Â ´ë·®
- °¡»óÈ£½ºÆ® ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
- </dl>
-
-
- <h4><a name="developermodules" id="developermodules">°³¹ßÀÚ¸¦ À§ÇÑ ¸ðµâ</a></h4>
- <p>´ÙÀ½ ¸ðµâÀº Å×½ºÆ®¿ëÀ¸·Î °³¹ßÀÚ¿¡°Ô¸¸ À¯¿ëÇϸç, ±âº»ÀûÀ¸·Î
- Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.
- ÀÌ ¸ðµâÀÌ ÇÊ¿äÇÑÁö È®½ÇÄ¡¾Ê´Ù¸é »ç¿ëÇÏÁö ¸¶¶ó.</p>
-
- <dl>
-
- <dt><code>--enable-bucketeer</code></dt>
- <dd><code>mod_bucketeer</code>°¡ Á¦°øÇÏ´Â ¹öŶ(bucket)
- Á¶ÀÛ ÇÊÅ͸¦ »ç¿ëÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-case-filter</code></dt>
- <dd><code>mod_case_filter</code>ÀÇ ´ë¹®ÀÚº¯È¯ Ãâ·ÂÇÊÅÍ
- °ßº»À» »ç¿ëÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-case-filter-in</code></dt>
- <dd><code>mod_case_filter_in</code>ÀÇ ´ë¹®ÀÚº¯È¯ ÀÔ·ÂÇÊÅÍ
- °ßº»À» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-echo</code></dt>
- <dd><code class="module"><a href="../mod/mod_echo.html">mod_echo</a></code>°¡ Á¦°øÇÏ´Â ECHO ¼­¹ö¸¦
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-example</code></dt>
- <dd>°ßº» ¿¹Á¦¸ðµâÀÎ <code class="module"><a href="../mod/mod_example.html">mod_example</a></code>À»
- »ç¿ëÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-optional-fn-export</code></dt>
- <dd><code>mod_optional_fn_export</code>°¡ Á¦°øÇÏ´Â ¼±ÅÃÀûÀÎ
- ÇÔ¼ö ¿¢½ºÆ÷Æ®(exporter)ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-optional-fn-import</code></dt>
- <dd><code>mod_optional_fn_import</code>°¡ Á¦°øÇÏ´Â ¼±ÅÃÀûÀÎ
- ÇÔ¼ö ÀÓÆ÷Æ®(importer)ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-optional-hook-export</code></dt>
- <dd><code>mod_optional_hook_export</code>°¡ Á¦°øÇÏ´Â
- ¼±ÅÃÀûÀÎ ÈÅ(hook) ¿¢½ºÆ÷Æ®ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-optional-hook-import</code></dt>
- <dd><code>mod_optional_hook_import</code>°¡ Á¦°øÇÏ´Â
- ¼±ÅÃÀûÀÎ ÈÅ ÀÓÆ÷Æ®ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
- </dl>
-
-
- <h4><a name="modules" id="modules">MPM°ú Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ</a></h4>
- <p>´ÙÀ½ ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÇÊ¿äÇÑ ´ÙÁß󸮸ðµâ°ú Á¦»ïÀÚ°¡
- ¸¸µç ¸ðµâÀ» Ãß°¡ÇÑ´Ù:</p>
-
- <dl>
- <dt><code>--with-module=<var>module-type</var>:<var>module-file</var>
- </code></dt>
- <dd><p>Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» Á¤ÀûÀ¸·Î ¸µÅ©ÇÒ ¸ðµâ ¸ñ·Ï¿¡
- Ãß°¡ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö ¼Ò½º Æ®¸®ÀÇ
- <code>modules/<var>module-type</var></code>¿¡¼­ ¸ðµâÀÇ
- ¼Ò½ºÆÄÀÏ <code><var>module-file</var></code>À» ã±â¶§¹®¿¡
- ±×°÷¿¡ ¼Ò½ºÆÄÀÏÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ±×°÷¿¡ ÆÄÀÏÀÌ ¾ø´Ù¸é
- <code>configure</code>´Â <var>module-file</var>ÀÌ
- Àý´ëÆÄÀÏ°æ·Î¶ó°í °¡Á¤ÇÏ°í ¼Ò½ºÆÄÀÏÀ»
- <var>module-type</var> ÇÏÀ§µð·ºÅ丮¿¡ º¹»çÇÏ·Á°í
- ½ÃµµÇÑ´Ù.</p>
- <p>ÀÌ ¿É¼ÇÀº ¼Ò½ºÆÄÀÏÀÌ ÇÑ°³ÀÎ ÀÛÀº ¿ÜºÎ ¸ðµâÀ» Ãß°¡Çϴµ¥
- À¯¿ëÇÏ´Ù. ´õ º¹ÀâÇÑ ¸ðµâÀº °³¹ß»ç°¡ Á¦°øÇÑ ¹®¼­¸¦
- Âü°íÇØ¾ß ÇÑ´Ù.</p>
- <div class="note"><h3>ÁÖÀÇ</h3>
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ¸ðµâÀÌ ¾Æ´Ñ DSO ¸ðµâÀ» ¿øÇÑ´Ù¸é
- <a href="apxs.html">apxs</a>¸¦ »ç¿ëÇ϶ó.</div>
- </dd>
-
- <dt><code>--with-mpm=MPM</code></dt>
- <dd>¼­¹öÀÇ µ¿ÀÛ¹æ½ÄÀ» ¼±ÅÃÇÑ´Ù. Á¤È®È÷ ÇÑ°¡Áö <a href="../mpm.html">´ÙÁß󸮸ðµâ</a>¸¸À» ¼±ÅÃÇØ¾ß ÇÑ´Ù.
- ¼±ÅÃÇÏÁö ¾ÊÀ¸¸é »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦ÀÇ <a href="../mpm.html#defaults">±âº» MPM</a>À» »ç¿ëÇÑ´Ù.
- »ç¿ëÇÒ ¼ö ÀÖ´Â MPM¿¡´Â <code class="module"><a href="../mod/beos.html">beos</a></code>,
- <code class="module"><a href="../mod/leader.html">leader</a></code>, <code class="module"><a href="../mod/mpmt_os2.html">mpmt_os2</a></code>,
- <code class="module"><a href="../mod/perchild.html">perchild</a></code>, <code class="module"><a href="../mod/prefork.html">prefork</a></code>,
- <code class="module"><a href="../mod/threadpool.html">threadpool</a></code>, <code class="module"><a href="../mod/worker.html">worker</a></code>°¡
- ÀÖ´Ù.</dd>
- </dl>
-
-
- <h4><a name="otheroptfeat" id="otheroptfeat">±âŸ ¿É¼Ç</a></h4>
- <dl>
- <dt><code>--enable-maintainer-mode</code></dt>
- <dd>µð¹ö±ë ¸ðµå¿Í ÄÄÆÄÀϽà °æ°í¸¦ ÀÛµ¿ÇÑ´Ù.</dd>
-
- <dt><code>--enable-mods-shared=<var>MODULE-LIST</var></code></dt>
- <dd>
- <p>µ¿Àû°øÀ¯¸ðµâ·Î ÄÄÆÄÀÏÇÒ ¸ðµâ ¸ñ·ÏÀ» ÁöÁ¤ÇÑ´Ù. Áï,
- ÀÌ ¸ðµâµéÀº <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î Àоîµé¿©¾ß ÇÑ´Ù.</p>
- <p><var>MODULE-LIST</var>´Â °ø¹éÀ¸·Î ±¸ºÐÇÑ ¸ðµâ¸íµéÀ»
- µû¿ÈÇ¥·Î ¹­Àº ¸ñ·ÏÀÌ´Ù. ¸ðµâ¸í¿¡¼­ ¾Õ¿¡
- <code>mod_</code>´Â »«´Ù. ¿¹¸¦ µé¾î:</p>
- <div class="example"><p><code>
- --enable-mods-shared='headers rewrite dav'
- </code></p></div>
- <p>¶Ç, Ưº°ÇÑ Å°¿öµå <code>all</code>°ú <code>most</code>¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,</p>
- <div class="example"><p><code>
- --enable-mods-shared=most
- </code></p></div>
- <p>´Â ´ëºÎºÐÀÇ ¸ðµâÀ» DSO ¸ðµâ·Î ÄÄÆÄÀÏÇÑ´Ù.
- </p>
- </dd>
-
- <dt><code>--enable-modules=<var>MODULE-LIST</var></code></dt>
- <dd><code>--enable-mods-shared</code>¿Í ºñ½ÁÇÏÁö¸¸,
- ÀÌ ¿É¼ÇÀº ¿­°ÅÇÑ ¸ðµâµéÀ» Á¤ÀûÀ¸·Î ¸µÅ©ÇÑ´Ù. Áï, ÀÌ
- ¸ðµâµéÀº <code>httpd</code> ½ÇÇàÇÏ¸é ¾ðÁ¦³ª »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>·Î ÀоîµéÀÏ
- ÇÊ¿ä°¡ ¾ø´Ù.</dd>
-
- <dt><code>--enable-v4-mapped</code></dt>
- <dd>IPv6 ¼ÒÄÏÀÌ IPv4 ¿¬°áÀ» ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.</dd>
-
- <dt><code>--with-port=<var>PORT</var></code></dt>
- <dd><code>httpd</code>°¡ ±â´Ù¸± Æ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ
- Æ÷Æ®¹øÈ£´Â ¼³Á¤ÆÄÀÏ <code>httpd.conf</code>¸¦ ¸¸µé¶§
- ¾²ÀδÙ. ±âº»°ªÀº 80ÀÌ´Ù.</dd>
-
- <dt><code>--with-program-name</code></dt>
- <dd>´Ù¸¥ ½ÇÇàÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>httpd</code>ÀÌ´Ù.</dd>
- </dl>
-
-
-
- <h3><a name="packages" id="packages">Ãß°¡ ÆÐÅ°Áö ¼±ÅÃ</a></h3>
- <p>´ÙÀ½ ¿É¼ÇÀº Ãß°¡ ÆÐÅ°Áö¸¦ ¼±ÅÃÇÑ´Ù.</p>
-
- <h4><a name="generalpackages" id="generalpackages">ÀϹÝÀûÀÎ ¹®¹ý</a></h4>
- <p>ÀϹÝÀûÀ¸·Î ´ÙÀ½°ú °°Àº ¹®¹ýÀ» »ç¿ëÇÏ¿© Ãß°¡ ÆÐÅ°Áö¸¦
- ´Ù·é´Ù:</p>
-
- <dl>
- <dt><code>--with-<var>PACKAGE</var>[=<var>ARG</var>]</code></dt>
- <dd>ÆÐÅ°Áö <var>PACKAGE</var>¸¦ »ç¿ëÇÑ´Ù.
- <var>ARG</var>ÀÇ ±âº»°ªÀº <code>yes</code>ÀÌ´Ù.</dd>
-
- <dt><code>--without-<var>PACKAGE</var></code></dt>
- <dd>ÆÐÅ°Áö <var>PACKAGE</var>¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
- <code>--with-<var>PACKAGE</var>=no</code>¿Í °°´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ¾ÆÆÄÄ¡ À¥¼­¹ö¿Í´Â
- °ü°è°¡ ¾ø´Ù.</dd>
- </dl>
-
-
-
-
- <h4><a name="packageopt" id="packageopt">ƯÁ¤ ÆÐÅ°Áö</a></h4>
- <dl>
- <dt><code>--with-apr=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd><code>httpd</code> ¼Ò½º ¹èÆ÷º»¿¡ Æ÷ÇÔµÈ Apache Portable
- Runtime (APR)Àº ÀÚµ¿À¸·Î À¥¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵȴÙ.
- ¸¸¾à ÀÌ¹Ì ¼³Ä¡µÈ APRÀ» ´ë½Å »ç¿ëÇÏ°í ½Í´Ù¸é
- <code>configure</code>¿¡°Ô <code>apr-config</code>
- ½ºÅ©¸³Æ®ÀÇ °æ·Î¸¦ ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. APR°¡ ¼³Ä¡µÈ Àý´ë°æ·Î,
- ÆÄÀϸí, µð·ºÅ丮¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÑ µð·ºÅ丮³ª
- ±× µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮 <code>bin</code>¿¡
- <code>apr-config</code>°¡ ÀÖ¾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--with-apr-util=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd><code>httpd</code> ¼Ò½º ¹èÆ÷º»¿¡ Æ÷ÇÔµÈ Apache Portable
- Runtime Utilities (APU)´Â ÀÚµ¿À¸·Î À¥¼­¹ö¿Í °°ÀÌ
- ÄÄÆÄÀϵȴÙ. ¸¸¾à ÀÌ¹Ì ¼³Ä¡µÈ APUÀ» ´ë½Å »ç¿ëÇÏ°í ½Í´Ù¸é
- <code>configure</code>¿¡°Ô <code>apu-config</code>
- ½ºÅ©¸³Æ®ÀÇ °æ·Î¸¦ ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. APU°¡ ¼³Ä¡µÈ Àý´ë°æ·Î,
- ÆÄÀϸí, µð·ºÅ丮¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÑ µð·ºÅ丮³ª
- ±× µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮 <code>bin</code>¿¡
- <code>apu-config</code>°¡ ÀÖ¾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--with-ssl=<var>DIR</var></code></dt>
- <dd><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>À» »ç¿ëÇÏ´Â °æ¿ì
- <code>configure</code>´Â ¼³Ä¡µÈ OpenSSLÀ» ã´Â´Ù.
- ´ë½Å ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¿© SSL/TLS µµ±¸ÀÇ µð·ºÅ丮°æ·Î¸¦
- ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</dd>
-
- <dt><code>--with-z=<var>DIR</var></code></dt>
- <dd>(<code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>¸¦ »ç¿ëÇÏ´Â °æ¿ì¿Í
- °°ÀÌ) ±¸¼º¿¡ ÇÊ¿äÇÏ´Ù¸é ÀÚµ¿À¸·Î <code>configure</code>´Â
- ¼³Ä¡µÈ <code>zlib</code> ¶óÀ̺귯¸®¸¦ ã´Â´Ù. ´ë½Å
- ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¾ÐÃà ¶óÀ̺귯¸®ÀÇ µð·ºÅ丮°æ·Î¸¦
- ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</dd>
- </dl>
-
- <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>°ú
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>ÀÇ DBM <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> °°Àº ¾ÆÆÄÄ¡
- À¥¼­¹öÀÇ ÀϺΠ±â´ÉÀº Á¤º¸¸¦ »¡¸® ã±âÀ§ÇØ °£´ÜÇÑ Å°/°ª
- µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÑ´Ù. APU¿¡ SDBMÀÌ µé¾îÀ־ ¾ðÁ¦³ª
- ÃÖ¼ÒÇÑ ÀÌ µ¥ÀÌÅͺ£À̽º´Â »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ Á¾·ùÀÇ
- µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ°í ½Í´Ù¸é ¾Æ·¡ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù:</p>
-
- <dl>
- <dt><code>--with-gdbm[=<var>path</var>]</code></dt>
- <dd><var>path</var>¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é,
- <code>configure</code>´Â ÀϹÝÀûÀÎ °Ë»ö°æ·Î¿¡¼­ ¼³Ä¡µÈ
- GNU DBM Çì´õÆÄÀÏ°ú ¶óÀ̺귯¸®¸¦ ã´Â´Ù. Á÷Á¢
- <var>path</var>¸¦ ÁöÁ¤Çϸé <code>configure</code>´Â
- <code><var>path</var>/lib</code>°ú
- <code><var>path</var>/include</code>¿¡¼­ ÇÊ¿äÇÑ ÆÄÀÏÀ»
- ã´Â´Ù. ¸¶Áö¸·À¸·Î <var>path</var>¿¡ Çì´õÆÄÀÏ °æ·Î¿Í
- ¶óÀ̺귯¸® °æ·Î¸¦ ÄÝ·ÐÀ» »çÀÌ¿¡ µÎ°í °°ÀÌ ÀûÀ» ¼ö
- ÀÖ´Ù.</dd>
-
- <dt><code>--with-ndbm[=<var>path</var>]</code></dt>
- <dd><code>--with-gdbm</code>°ú °°Áö¸¸ ¼³Ä¡µÈ New DBMÀ»
- ã´Â´Ù.</dd>
-
- <dt><code>--with-berkeley-db[=<var>path</var>]</code></dt>
- <dd><code>--with-gdbm</code>°ú °°Áö¸¸ ¼³Ä¡µÈ Berkeley
- DB¸¦ ã´Â´Ù.</dd>
- </dl>
-
- <div class="note"><h3>ÁÖÀÇ</h3>
- <p>DBM ¿É¼ÇÀº APU°¡ Á¦°øÇϸç APU ±¸¼º½ºÅ©¸³Æ®·Î Á÷Á¢
- Àü´ÞµÈ´Ù. ±×·¡¼­ <code>--with-apr-util</code>À» »ç¿ëÇÏ¿©
- ÀÌ¹Ì ¼³Ä¡µÈ APU¸¦ »ç¿ëÇÑ´Ù¸é DBM ¿É¼ÇÀº ¼Ò¿ëÀÌ ¾ø´Ù.</p>
- <p>À¥¼­¹ö´Â ¿©·¯ DBM ±¸ÇöÀ» °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ½ÇÇà½Ã
- ÀûÀýÇÑ DBM Á¾·ù¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
- </div>
-
-
-
- <h3><a name="supportopt" id="supportopt">Áö¿ø ÇÁ·Î±×·¥À» À§ÇÑ ¿É¼Ç</a></h3>
- <dl>
- <dt><code>--enable-static-support</code></dt>
- <dd>Áö¿ø ÇÁ·Î±×·¥À» Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ¸¸µç´Ù.
- Áï, ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ¸ðµÎ Æ÷ÇÔÇϵµ·Ï ½ÇÇàÆÄÀÏÀ»
- ÄÄÆÄÀÏÇÑ´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏÁö ¾ÊÀ¸¸é ±âº»°ªÀ¸·Î Áö¿ø
- ÇÁ·Î±×·¥À» µ¿ÀûÀ¸·Î ¸µÅ©ÇÑ´Ù.</dd>
-
- <dt><code>--enable-suexec</code></dt>
- <dd>À¥¼­¹ö°¡ ½ÇÇàÇÏ´Â ÇÁ·Î¼¼½ºÀÇ uid¿Í gid¸¦ ¼³Á¤ÇÏ´Â
- <code><a href="suexec.html">suexec</a></code>¸¦ »ç¿ëÇÏ·Á¸é
- ÀÌ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù. <strong>suid ½ÇÇàÆÄÀÏÀÇ º¸¾È»ó À§ÇèÀ»
- ¸ðµÎ ¾ËÁö ¸øÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏÁö ¸¶¶ó.</strong>
- <code>suexec</code>¸¦ ±¸¼ºÇÏ´Â ¿É¼ÇÀº
- <a href="#suexec">¾Æ·¡¿¡¼­</a> ¼³¸íÇÑ´Ù.</dd>
- </dl>
-
- <p>´ÙÀ½ ¿É¼ÇÀ» »ç¿ëÇÏ¿© Áö¿ø ÇÁ·Î±×·¥º°·Î Á¤ÀûÀ¸·Î ¸µÅ©µÈ
- ½ÇÇàÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt><code>--enable-static-ab</code></dt>
- <dd><code><a href="ab.html">ab</a></code>¸¦ Á¤ÀûÀ¸·Î ¸µÅ©µÈ
- ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-static-checkgid</code></dt>
- <dd><code>checkgid</code>¸¦ Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î
- ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
-
- <dt><code>--enable-static-htdbm</code></dt>
- <dd><code>htdbm</code>À» Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î
- ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-htdigest</code></dt>
- <dd><code><a href="htdigest.html">htdigest</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-htpasswd</code></dt>
- <dd><code><a href="htpasswd.html">htpasswd</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-logresolve</code></dt>
- <dd><code><a href="logresolve.html">logresolve</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-rotatelogs</code></dt>
- <dd><code><a href="rotatelogs.html">rotatelogs</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
- </dl>
-
- <h4><a name="suexec" id="suexec">suexec ¼³Á¤ ¿É¼Ç</a></h4>
- <p>¾Æ·¡ ¿É¼ÇÀº <code><a href="../suexec.html">suexec</a></code>¸¦ ÀÚ¼¼È÷ ¼³Á¤ÇÑ´Ù.
- ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="../suexec.html#install">suEXEC
- ±¸¼º°ú ¼³Ä¡</a>¸¦ Âü°íÇ϶ó.</p>
-
- <dl>
- <dt><code>--with-suexec-bin</code></dt>
- <dd>suexec ½ÇÇàÆÄÀÏÀÇ °æ·Î¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>--sbindir</code>ÀÌ´Ù (<a href="#directoryfinetuning">¼³Ä¡ µð·ºÅ丮ÀÇ ÀÚ¼¼ÇÑ
- Á¶Á¤</a> Âü°í).</dd>
-
- <dt><code>--with-suexec-caller</code></dt>
- <dd><code>suexec</code>¸¦ ½ÇÇàÇÒ »ç¿ëÀÚ¸¦ ÁöÁ¤ÇÑ´Ù.
- ÀÌ »ç¿ëÀÚ´Â º¸Åë <code>httpd</code>¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿Í
- °°¾Æ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-docroot</code></dt>
- <dd><code>suexec</code>´Â ÀÌ ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ µð·ºÅ丮
- ¾Æ·¡¿¡ ÀÖ´Â ½ÇÇàÆÄÀϸ¸À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº
- <code>--datadir/htdocs</code>´Ù.</dd>
-
- <dt><code>--with-suexec-gidmin</code></dt>
- <dd><code>suexec</code>¿¡¼­ ÁöÁ¤°¡´ÉÇÑ ÃÖ¼Ò GID¸¦ ¼³Á¤ÇÑ´Ù.
- ±âº»°ªÀº 100ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-logfile</code></dt>
- <dd><code>suexec</code> ·Î±×ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù. ·Î±×ÆÄÀϸíÀÇ
- ±âº»°ªÀº <code>suexec_log</code>ÀÌ°í,
- <code>--logfiledir</code>¿¡ À§Ä¡ÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-safepath</code></dt>
- <dd><code>suexec</code>°¡ ½ÃÀÛÇÏ´Â ÇÁ·Î¼¼½ºÀÇ
- <code>PATH</code> ȯ°æº¯¼ö°ªÀ» ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>/usr/local/bin:/usr/bin:/bin</code>ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-userdir</code></dt>
- <dd>»ç¿ëÀÚ µð·ºÅ丮¿¡¼­ <code>suexec</code>°¡ Á¢±ÙÇÒ
- ¼ö ÀÖ´Â (½ÇÇàÆÄÀÏÀÌ ÀÖ´Â) ÇÏÀ§µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù.
- ÀÌ ¼³Á¤Àº <code>suexec</code>¿Í
- (<code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>ÀÌ Á¦°øÇÏ´Â) »ç¿ëÀÚº°
- µð·ºÅ丮¸¦ °°ÀÌ »ç¿ëÇÒ¶§ ÇÊ¿äÇÏ´Ù. ±âº»°ªÀº
- <code>public_html</code>ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-uidmin</code></dt>
- <dd><code>suexec</code>¿¡¼­ ÁöÁ¤°¡´ÉÇÑ ÃÖ¼Ò UID¸¦ ¼³Á¤ÇÑ´Ù.
- ±âº»°ªÀº 100ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-umask</code></dt>
- <dd><code>suexec</code>°¡ ½ÇÇàÇÏ´Â ÇÁ·Î¼¼½ºÀÇ
- <code>umask</code>¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ
- ±âº» ¼³Á¤°ú °°´Ù.</dd>
- </dl>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="env" id="env">ȯ°æº¯¼ö</a></h2>
- <p><code>configure</code>ÀÇ ¼±ÅÃÀ» ¹«½ÃÇϰųª °ü·Ê¿Í ´Ù¸¥
- À̸§À̳ª À§Ä¡¿¡ ÀÖ´Â ¶óÀ̺귯¸®¿Í ÇÁ·Î±×·¥À» ãµµ·Ï µµ¿ÍÁÖ´Â
- À¯¿ëÇÑ È¯°æº¯¼öµéÀÌ ÀÖ´Ù.</p>
-
-
- <dl>
- <dt><code>CC</code></dt>
- <dd>ÄÄÆÄÀÏ¿¡ »ç¿ëÇÒ C ÄÄÆÄÀÏ·¯ ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt><code>CFLAGS</code></dt>
- <dd>ÄÄÆÄÀ϶§ »ç¿ëÇÏ±æ ¹Ù¶ó´Â C ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt><code>CPP</code></dt>
- <dd>»ç¿ëÇÒ C ¼±Ã³¸®±â ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt><code>CPPFLAGS</code></dt>
- <dd>C/C++ ¼±Ã³¸®±â ¿É¼Ç. ¿¹¸¦ µé¾î, Çì´õÆÄÀÏÀÌ °ü·Ê¿Í ´Þ¸®
- <var>includedir</var> µð·ºÅ丮¿¡ ÀÖ´Ù¸é
- <code>-I<var>includedir</var></code>À» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>LDFLAGS</code></dt>
- <dd>¸µÄ¿ ¿É¼Ç. ¿¹¸¦ µé¾î, ¶óÀ̺귯¸®°¡ °ü·Ê¿Í ´Þ¸®
- <var>libdir</var> µð·ºÅ丮¿¡ ÀÖ´Ù¸é
- <code>-L<var>libdir</var></code>À» »ç¿ëÇÑ´Ù.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/configure.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/configure.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/configure.xml b/docs/manual/programs/configure.xml
deleted file mode 100644
index e349bc9830..0000000000
--- a/docs/manual/programs/configure.xml
+++ /dev/null
@@ -1,928 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="configure.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>configure - Configure the source tree</title>
-
-<summary>
- <p>The <code>configure</code> script configures the source tree
- for compiling and installing the Apache HTTP Server on your
- particular platform. Various options allow the compilation of a
- server corresponding to your personal requirements.</p>
-
- <p>This script, included in the root directory of the source
- distribution, is for compilation on Unix and Unix-like systems
- only. For other platforms, see the <a
- href="../platform/">platform</a> documentation.</p>
-</summary>
-
-<seealso><a href="../install.html">Compiling and Installing</a></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p>You should call the <code>configure</code> script from within the
- root directory of the distribution.</p>
-
- <p><code><strong>./configure</strong> [<var>OPTION</var>]...
- [<var>VAR</var>=<var>VALUE</var>]...</code></p>
-
- <p>To assign environment variables (e.g. <code>CC</code>,
- <code>CFLAGS</code> ...), specify them as
- <code><var>VAR</var>=<var>VALUE</var></code>. See <a href="#env">below</a>
- for descriptions of some of the useful variables.</p>
-</section>
-
-<section id="options"><title>Options</title>
- <ul>
- <li><a href="#configurationoptions">Configuration options</a></li>
- <li><a href="#installationdirectories">Installation directories</a></li>
- <li><a href="#systemtypes">System types</a></li>
- <li><a href="#optionalfeatures">Optional features</a></li>
- <li><a href="#supportopt">Options for support programs</a></li>
- </ul>
-
- <section id="configurationoptions"><title>Configuration options</title>
-
- <p>The following options influence the behavior of
- <code>configure</code> itself.</p>
-
- <dl>
- <dt><code>-C</code></dt>
- <dt><code>--config-cache</code></dt>
- <dd>This is an alias for <code>--cache-file=config.cache</code></dd>
-
- <dt><code>--cache-file=<var>FILE</var></code></dt>
- <dd>The test results will be cached in file <var>FILE</var>.
- This option is disabled by default.</dd>
-
- <dt><code>-h</code></dt>
- <dt><code>--help [short|recursive]</code></dt>
- <dd>Output the help and exit. With the argument <code>short</code> only
- options specific to this package will displayed. The argument
- <code>recursive</code> displays the short help of all the included
- packages.</dd>
-
- <dt><code>-n</code></dt>
- <dt><code>--no-create</code></dt>
- <dd>The <code>configure</code> script is run normally but does
- not create output files. This is useful to check the test results
- before generating makefiles for compilation.</dd>
-
- <dt><code>-q</code></dt>
- <dt><code>--quiet</code></dt>
- <dd>Do not print <code>checking ...</code> messages during the
- configure process.</dd>
-
- <dt><code>--srcdir=<var>DIR</var></code></dt>
- <dd>Defines directory <var>DIR</var> to be the source file directory.
- Default is the directory, where configure is located, or the parent
- directory <code>..</code>.</dd>
-
- <dt><code>--silent</code></dt>
- <dd>Same as <code>--quiet</code></dd>
-
- <dt>-V</dt>
- <dt>--version</dt>
- <dd>Display copyright information and exit.</dd>
- </dl>
- </section>
-
- <section id="installationdirectories"><title>Installation
- directories</title>
-
- <p>These options define the installation directory. The installation
- tree depends on the selected layout.</p>
-
- <dl>
- <dt><code>--prefix=<var>PREFIX</var></code></dt>
- <dd>Install architecture-independent files in <var>PREFIX</var>.
- By default the installation directory is set to
- <code>/usr/local/apache2</code>.</dd>
-
- <dt><code>--exec-prefix=<var>EPREFIX</var></code></dt>
- <dd>Install architecture-dependent files in <var>EPREFIX</var>.
- By default the installation directory is set to the
- <var>PREFIX</var> directory.</dd>
- </dl>
-
- <p>By default, <code>make install</code> will install all the files in
- <code>/usr/local/apache2/bin</code>, <code>/usr/local/apache2/lib</code>
- etc. You can specify an installation prefix other than
- <code>/usr/local/apache2</code> using <code>--prefix</code>,
- for instance <code>--prefix=$HOME</code>.</p>
-
- <section id="layout"><title>Define a directory layout</title>
- <dl>
- <dt><code>--enable-layout=<var>LAYOUT</var></code></dt>
- <dd>Configure the source code and build scripts to assume an
- installation tree based on the layout <var>LAYOUT</var>. This allows
- you to separately specify the locations for each type of file within
- the Apache HTTP Server installation. The <code>config.layout</code>
- file contains several example configurations, and you can also create
- your own custom configuration following the examples. The different
- layouts in this file are grouped into <code>&lt;Layout
- FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by name as
- in <code>FOO</code>. The default layout is <code>Apache</code>.</dd>
- </dl>
- </section>
-
- <section id="directoryfinetuning"><title>Fine tuning of the installation
- directories</title>
-
- <p>For better control of the installation directories, use the options
- below. Please note that the directory defaults are set by
- <code>autoconf</code> and be overwritten by the corresponding layout
- setting.</p>
-
- <dl>
- <!-- only apr-config and apu-config are installed at bindir.
- everything else is stored at sbindir. ==> clarify/change this -->
- <dt><code>--bindir=<var>DIR</var></code></dt>
- <dd>Install user executables in <var>DIR</var>. The user executables
- are supporting programs like <code>htpasswd</code>,
- <code>dbmmanage</code>, etc. which are useful for site
- administrators. By default <var>DIR</var> is set to
- <code><var>EPREFIX</var>/bin</code>.</dd>
-
- <dt><code>--datadir=<var>DIR</var></code></dt>
- <dd>Install read-only architecture-independent data in <var>DIR</var>.
- By default <code>datadir</code> is set to
- <code><var>PREFIX</var>/share</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--includedir=<var>DIR</var></code></dt>
- <dd>Install C header files in <var>DIR</var>. By default
- <code>includedir</code> is set to
- <code><var>EPREFIX</var>/include</code>.</dd>
-
- <dt><code>--infodir=<var>DIR</var></code></dt>
- <dd>Install info documentation in <var>DIR</var>.
- By default <code>infodir</code> is set to
- <code><var>PREFIX</var>/info</code>. This option is currently
- unused.</dd>
-
- <dt><code>--libdir=<var>DIR</var></code></dt>
- <dd>Install object code libraries in <var>DIR</var>. By default
- <code>libdir</code> is set to
- <code><var>EPREFIX</var>/lib</code>.</dd>
-
- <dt><code>--libexecdir=<var>DIR</var></code></dt>
- <dd>Install the program executables (i.e., shared modules) in
- <var>DIR</var>. By default <code>libexecdir</code> is set to
- <code><var>EPREFIX</var>/libexec</code>.</dd>
-
- <dt><code>--localstatedir=<var>DIR</var></code></dt>
- <dd>Install modifiable single-machine data in <var>DIR</var>.
- By default <code>localstatedir</code> is set to
- <code><var>PREFIX</var>/var</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--mandir=<var>DIR</var></code></dt>
- <dd>Install the man documentation in <var>DIR</var>. By default
- <code>mandir</code> is set to
- <code><var>EPREFIX</var>/man</code>.</dd>
-
- <dt><code>--oldincludedir=<var>DIR</var></code></dt>
- <dd>Install C header files for non-gcc in <var>DIR</var>.
- By default <code>oldincludedir</code> is set to
- <code>/usr/include</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--sbindir=<var>DIR</var></code></dt>
- <dd>Install the system administrator executables in <var>DIR</var>.
- Those are server programs like <code>httpd</code>,
- <code>apachectl</code>, <code>suexec</code>, etc. which are neccessary
- to run the Apache HTTP Server. By default <code>sbindir</code> is
- set to <code><var>EPREFIX</var>/sbin</code>.</dd>
-
- <dt><code>--sharedstatedir=<var>DIR</var></code></dt>
- <dd>Install modifiable architecture-independent data in <var>DIR</var>.
- By default <code>sharedstatedir</code> is set to
- <code><var>PREFIX</var>/com</code>. This option is offered by
- <code>autoconf</code> and currently unused.</dd>
-
- <dt><code>--sysconfdir=<var>DIR</var></code></dt>
- <dd>Install read-only single-machine data like the server configuration
- files <code>httpd.conf</code>, <code>mime.types</code>, etc. in
- <var>DIR</var>. By default <code>sysconfdir</code> is set to
- <code><var>PREFIX</var>/etc</code>.</dd>
- </dl>
- </section>
- </section>
-
- <section id="systemtypes"><title>System types</title>
-
- <p>These options are used to cross-compile the Apache HTTP Server to run on
- another system. In normal cases, when building and running the server on
- the same system, these options are not used.</p>
-
- <dl>
- <dt><code>--build=<var>BUILD</var></code></dt>
- <dd>Defines the system type of the system on which the tools are being
- built. It defaults to the result of the script
- <code>config.guess</code>.</dd>
-
- <dt><code>--host=<var>HOST</var></code></dt>
- <dd>Defines the system type of the system on which the server will run.
- <var>HOST</var> defaults to <var>BUILD</var>.</dd>
-
- <dt><code>--target=<var>TARGET</var></code></dt>
- <dd>Configure for building compilers for the system type
- <var>TARGET</var>. It defaults to <var>HOST</var>. This option is
- offered by <code>autoconf</code> and not necessary for the Apache HTTP
- Server.</dd>
- </dl>
- </section>
-
- <section id="optionalfeatures"><title>Optional Features</title>
-
- <p>These options are used to fine tune the features your HTTP server will
- have.</p>
-
- <section id="generaloptfeat"><title>General syntax</title>
- <p>Generally you can use the following syntax to enable or disable a
- feature:</p>
-
- <dl>
- <dt><code>--disable-<var>FEATURE</var></code></dt>
- <dd>Do not include <var>FEATURE</var>. This is the same as
- <code>--enable-<var>FEATURE</var>=no</code>.</dd>
-
- <dt><code>--enable-<var>FEATURE</var>[=<var>ARG</var>]</code></dt>
- <dd>Include <var>FEATURE</var>. The default value for <var>ARG</var>
- is <code>yes</code>.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=shared</code></dt>
- <dd>The corresponding module will be build as DSO module.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=static</code></dt>
- <dd>By default enabled modules are linked statically. You can force
- this explicitly.</dd>
- </dl>
-
- <note><title>Note</title>
- <code>configure</code> will not complain about
- <code>--enable-<var>foo</var></code> even if <var>foo</var> doesn't
- exist, so you need to type carefully.
- </note>
- </section>
-
- <!-- to do: add better enable-module descriptions and recommendations -->
- <section id="enabledmodules"><title>Modules enabled by default</title>
- <p>Some modules are compiled by default and have to be disabled
- explicitly. Use the following options to remove discrete modules from
- the compilation process.</p>
-
- <dl>
- <dt><code>--disable-actions</code></dt>
- <dd>Disable action triggering on requests, which is provided by
- <module>mod_actions</module>.</dd>
-
- <dt><code>--disable-alias</code></dt>
- <dd>Disable the mapping of requests to different parts of the
- filesystem, which is provided by <module>mod_alias</module>.</dd>
-
- <dt><code>--disable-asis</code></dt>
- <dd>Disable support for as-is filetypes, which is provided by
- <module>mod_asis</module>.</dd>
-
- <dt><code>--disable-auth</code></dt>
- <dd>Disable user-based access control provided by
- <module>mod_auth</module>. This module provides for HTTP Basic
- Authentication, where the usernames and passwords are stored in
- plain text files.</dd>
-
- <dt><code>--disable-autoindex</code></dt>
- <dd>Disable the directory listing functionality provided by
- <module>mod_autoindex</module>.</dd>
-
- <dt><code>--disable-access</code></dt>
- <dd>Disable host-based access control provided by
- <module>mod_access</module>.</dd>
-
- <dt><code>--disable-cgi</code></dt>
- <dd><module>mod_cgi</module>, which provides support for CGI scripts,
- is enabled by default when using a non-threaded MPM. Use this
- option to disable CGI support.</dd>
-
- <dt><code>--disable-cgid</code></dt>
- <dd>When using the threaded MPMs <module>worker</module> or
- <module>perchild</module> support for CGI scripts is provided by
- <module>mod_cgid</module> by default. To disable CGI support use
- this option.</dd>
-
- <dt><code>--disable-charset-lite</code></dt>
- <dd>Disable character set translation provided by
- <module>mod_charset_lite</module>. This module will be installed by
- default only on EBCDIC systems.</dd>
-
- <dt><code>--disable-dir</code></dt>
- <dd>Disable directory request handling provided by
- <module>mod_dir</module>.</dd>
-
- <dt><code>--disable-env</code></dt>
- <dd>Enable setting and clearing of environment variables, which is
- provided by <module>mod_env</module>.</dd>
-
- <!-- configure mentions enable-http, but disable-http would make much
- more sense -->
- <dt><code>--disable-http</code></dt>
- <dd>Disable the HTTP protocol handling. The <code>http</code>
- module is a basic one, enabling the server to function as an
- HTTP server. It is only useful to disable it if you want to use
- another protocol module instead. <strong>Don't disable this
- module unless you are really sure what you are doing.</strong>
- <br/>
- Note: This module will always be linked statically.</dd>
-
- <dt><code>--disable-imap</code></dt>
- <dd>Disable support for server based imagemaps, which provided by
- <module>mod_imap</module>.</dd>
-
- <dt><code>--disable-include</code></dt>
- <dd>Disable Server Side Includes provided by
- <module>mod_include</module>.</dd>
-
- <dt><code>--disable-log-config</code></dt>
- <dd>Disable the logging configuration provided by
- <module>mod_log_config</module>. You won't be able to log requests
- to the server without this module.</dd>
-
- <dt><code>--disable-mime</code></dt>
- <dd><module>mod_mime</module> associates the requested filename's
- extensions with the file's behavior and content (mime-type,
- language, character set and encoding). Disabling the mapping of
- file-extensions to MIME is normally not recommended.</dd>
-
- <dt><code>--disable-negotiation</code></dt>
- <dd>Disable content negotiation provided by
- <module>mod_negotiation</module>.</dd>
-
- <dt><code>--disable-setenvif</code></dt>
- <dd>Disable support for basing environment variables on headers,
- which is provided by <module>mod_setenvif</module>.</dd>
-
- <dt><code>--disable-status</code></dt>
- <dd>Enable the process/thread monitoring, which is provided by
- <module>mod_status</module>.</dd>
-
- <dt><code>--disable-userdir</code></dt>
- <dd>Disable the mapping of requests to user-specific directories,
- which is provided by <module>mod_userdir</module>.</dd>
- </dl>
- </section>
-
- <section id="disabledmodules"><title>Modules, disabled by default</title>
- <p>Some modules are compiled by default and have to be enabled
- explicitly or by using the keywords <code>most</code> or
- <code>all</code> (see <code>--enable-mods-shared</code> below for
- further explanation) to be available. Therefore use the options
- below.</p>
-
- <dl>
- <dt><code>--enable-auth-anon</code></dt>
- <dd>Enable anonymous user access provided by
- <module>mod_auth_anon</module>.</dd>
-
- <dt><code>--enable-auth-dbm</code></dt>
- <dd><module>mod_auth_dbm</module> provides for HTTP Basic
- Authentication, where the usernames and passwords are stored in DBM
- type database files. Use this option to enable the module.</dd>
-
- <dt><code>--enable-auth-digest</code></dt>
- <dd>Enable RFC2617 Digest authentication provided by
- <module>mod_auth_digest</module>. This module uses plain text files
- to store the credentials.</dd>
-
- <dt><code>--enable-auth-ldap</code></dt>
- <dd>Enable LDAP based authentication provided by
- <module>mod_auth_ldap</module>.</dd>
-
- <dt><code>--enable-cache</code></dt>
- <dd>Enable dynamic file caching provided by
- <module>mod_cache</module>. This experimental module may be
- interesting for servers with high load or caching proxy servers. At
- least one storage management module (e.g.
- <module>mod_disk_cache</module> or <module>mod_mem_cache</module>)
- is also necessary.</dd>
-
- <dt><code>--enable-cern-meta</code></dt>
- <dd>Enable the CERN-type meta files support provided by
- <module>mod_cern_meta</module>.</dd>
-
- <dt><code>--enable-charset-lite</code></dt>
- <dd>Enable character set translation provided by
- <module>mod_charset_lite</module>. This module will be installed by
- default only on EBCDIC systems. On other systems, you have to enable
- it.</dd>
-
- <dt><code>--enable-dav</code></dt>
- <dd>Enable the WebDAV protocol handling provided by
- <module>mod_dav</module>. Support for filesystem resources is
- provided by the seperate module <module>mod_dav_fs</module>. This
- module is also automatically enabled with
- <code>--enable-dav</code>.<br/>
- Note: <module>mod_dav</module> can only be used together with the
- <code>http</code> protocol module.</dd>
-
- <dt><code>--enable-dav-fs</code></dt>
- <dd>Enable DAV support for filesystem resources, which is provided by
- <module>mod_dav_fs</module>. This module is a provider for the
- <module>mod_dav</module> module, so you should also use
- <code>--enable-dav</code>.</dd>
-
- <dt><code>--enable-dav-lock</code></dt>
- <dd>Enable <module>mod_dav_lock</module> which provides generic DAV
- locking support for backend modules. This module needs at least
- <module>mod_dav</module> to function, so you should also use
- <code>--enable-dav</code>.</dd>
-
- <dt><code>--enable-deflate</code></dt>
- <dd>Enable deflate transfer encoding provided by
- <module>mod_deflate</module>.</dd>
-
- <dt><code>--enable-disk-cache</code></dt>
- <dd>Enable disk caching provided by
- <module>mod_disk_cache</module>.</dd>
-
- <dt><code>--enable-expires</code></dt>
- <dd>Enable Expires header control provided by
- <module>mod_expires</module>.</dd>
-
- <dt><code>--enable-ext-filter</code></dt>
- <dd>Enable the external filter support provided by
- <module>mod_ext_filter</module>.</dd>
-
- <dt><code>--enable-file-cache</code></dt>
- <dd>Enable the file cache provided by
- <module>mod_file_cache</module>.</dd>
-
- <dt><code>--enable-headers</code></dt>
- <dd>Enable control of HTTP headers provided by
- <module>mod_headers</module>.</dd>
-
- <dt><code>--enable-info</code></dt>
- <dd>Enable the server information provided by
- <module>mod_info</module>.</dd>
-
- <dt><code>--enable-ldap</code></dt>
- <dd>Enable LDAP caching and connection pooling services provided by
- <module>mod_ldap</module>.</dd>
-
- <dt><code>--enable-logio</code></dt>
- <dd>Enable logging of input and output bytes including headers provided
- by <module>mod_logio</module>.</dd>
-
- <dt><code>--enable-mem-cache</code></dt>
- <dd>Enable memory caching provided by
- <module>mod_mem_cache</module>.</dd>
-
- <dt><code>--enable-mime-magic</code></dt>
- <dd>Enable automatical determining of MIME types, which is provided by
- <module>mod_mime_magic</module>.</dd>
-
- <dt><code>--enable-isapi</code></dt>
- <dd>Enable the isapi extension support provided by
- <module>mod_isapi</module>.</dd>
-
- <dt><code>--enable-proxy</code></dt>
- <dd>Enable the proxy/gateway functionality provided by
- <module>mod_proxy</module>. The proxying capabilities for
- <code>CONNECT</code>, <code>FTP</code> and <code>HTTP</code> are
- provided by the seperate modules <module>mod_proxy_connect</module>,
- <module>mod_proxy_ftp</module> and <module>mod_proxy_http</module>.
- These three modules are also automatically enabled with
- <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-proxy-connect</code></dt>
- <dd>Enable proxy support for <code>CONNECT</code> request handling,
- which is provided by <module>mod_proxy_connect</module>. This module
- is an extension for the <module>mod_proxy</module> module, so you
- should also use <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-proxy-ftp</code></dt>
- <dd>Enable proxy support for <code>FTP</code> requests, which is
- provided by <module>mod_proxy_ftp</module>.. This module
- is an extension for the <module>mod_proxy</module> module, so you
- should also use <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-proxy-http</code></dt>
- <dd>Enable proxy support for <code>HTTP</code> requests, which is
- provided by <module>mod_proxy_http</module>. This module
- is an extension for the <module>mod_proxy</module> module, so you
- should also use <code>--enable-proxy</code>.</dd>
-
- <dt><code>--enable-rewrite</code></dt>
- <dd>Enable rule based URL manipulation provided by
- <module>mod_rewrite</module>.</dd>
-
- <dt><code>--enable-so</code></dt>
- <dd>Enable DSO capability provided by <module>mod_so</module>. This
- module will be automatically enabled if you use the
- <code>--enable-mods-shared</code> option.</dd>
-
- <dt><code>--enable-speling</code></dt>
- <dd>Enable the functionality to correct common URL misspellings, which
- is provided by <module>mod_spelling</module>.</dd>
-
- <dt><code>--enable-ssl</code></dt>
- <dd>Enable support for SSL/TLS provided by
- <module>mod_ssl</module>.</dd>
-
- <dt><code>--enable-unique-id</code></dt>
- <dd>Enable the generation of per-request unique ids, which is provided
- by <module>mod_unique_id</module>.</dd>
-
- <dt><code>--enable-usertrack</code></dt>
- <dd>Enable user-session tracking provided by
- <module>mod_usertrack</module>.</dd>
-
- <dt><code>--enable-vhost-alias</code></dt>
- <dd>Enable mass virtual hosting provided by
- <module>mod_vhost_alias</module>.</dd>
- </dl>
- </section>
-
- <section id="developermodules"><title>Modules for developers</title>
- <p>The following modules are useful only for developers and testing
- purposes and are disabled by default. Use the following options to
- enable them. If you are not sure whether you need one of these
- modules, omit them.</p>
-
- <dl>
- <!-- module doc needed -->
- <dt><code>--enable-bucketeer</code></dt>
- <dd>Enable the manipulation filter for buckets, which is provided by
- <code>mod_bucketeer</code>.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-case-filter</code></dt>
- <dd>Enable the example uppercase conversion output filter support of
- <code>mod_case_filter</code>.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-case-filter-in</code></dt>
- <dd>Enable the example uppercase conversion input filter support of
- <code>mod_case_filter_in</code>.</dd>
-
- <dt><code>--enable-echo</code></dt>
- <dd>Enable the ECHO server provided by
- <module>mod_echo</module>.</dd>
-
- <dt><code>--enable-example</code></dt>
- <dd>Enable the example and demo module
- <module>mod_example</module>.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-fn-export</code></dt>
- <dd>Enable the example for an optional function exporter, which is
- provided by <code>mod_optional_fn_export</code>.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-fn-import</code></dt>
- <dd>Enable the example for an optional function importer, which is
- provided by <code>mod_optional_fn_import</code>.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-hook-export</code></dt>
- <dd>Enable the example for an optional hook exporter, which is provided
- by <code>mod_optional_hook_export</code>.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-hook-import</code></dt>
- <dd>Enable the example optional hook importer, which is provided by
- <code>mod_optional_hook_import</code>.</dd>
- </dl>
- </section>
-
- <section id="modules"><title>MPMs and third-party modules</title>
- <p>To add the necessary Multi Processing Module and additional third-party
- modules use the following options:</p>
-
- <dl>
- <dt><code>--with-module=<var>module-type</var>:<var>module-file</var>
- </code></dt>
- <dd><p>Add a third-party module to the list of statically linked
- modules. The module source file <code><var>module-file</var></code>
- will be searched in the <code>modules/<var>module-type</var></code>
- subdirectory of your Apache HTTP server source tree so it has to be
- placed there before. If it is not found here
- <code>configure</code> is considering <var>module-file</var> to be
- an absolute file path and tries to copy the source file into the
- <var>module-type</var> subdirectory.</p>
- <p>This option is useful to add small external modules consisting of
- one source file. For more complex modules you should read the
- vendor's documentation.</p>
- <note><title>Note</title>
- If you want to build a DSO module instead of a statically linked
- use <a href="apxs.html">apxs</a>.</note>
- </dd>
-
- <dt><code>--with-mpm=MPM</code></dt>
- <dd>Choose the process model for your server. You have to select
- exactly one <a href="../mpm.html">Multi-Processing Module</a>.
- Otherwise the <a href="../mpm.html#defaults">default MPM</a> for
- your operating system will be taken. Possible MPMs are
- <module>beos</module>, <module>leader</module>,
- <module>mpmt_os2</module>, <module>perchild</module>,
- <module>prefork</module>, <module>threadpool</module> and
- <module>worker</module>.</dd>
- </dl>
- </section>
-
- <section id="otheroptfeat"><title>Cumulative and other options</title>
- <dl>
- <dt><code>--enable-maintainer-mode</code></dt>
- <dd>Turn on debugging and compile time warnings.</dd>
-
- <dt><code>--enable-mods-shared=<var>MODULE-LIST</var></code></dt>
- <dd>
- <p>Defines a list of modules to be enabled and build as dynamic
- shared modules. This mean, these module have to be loaded
- dynamically by using the <directive
- module="mod_so">LoadModule</directive> directive.</p>
- <p><var>MODULE-LIST</var> is a space separated list of modulenames
- enclosed by quotation marks. The module names are given without the
- preceding <code>mod_</code>. For example:</p>
- <example>
- --enable-mods-shared='headers rewrite dav'
- </example>
- <p>Additionally you can use the special keywords <code>all</code> and
- <code>most</code>. For example,</p>
- <example>
- --enable-mods-shared=most
- </example>
- <p>will compile most modules and build them as DSO modules.
- <!-- See <a href="../install/enabledmodules.html">Overview of
- enabled modules</a> for further information. --></p>
- </dd>
-
- <dt><code>--enable-modules=<var>MODULE-LIST</var></code></dt>
- <dd>This option behaves similar to <code>--enable-mods-shared</code>,
- but will link the given modules statically. This mean, these modules
- will always be present while running <code>httpd</code>. They need
- not be loaded with <directive
- module="mod_so">LoadModule</directive>.</dd>
-
- <dt><code>--enable-v4-mapped</code></dt>
- <dd>Allow IPv6 sockets to handle IPv4 connections.</dd>
-
- <dt><code>--with-port=<var>PORT</var></code></dt>
- <dd>This defines the port on which <code>httpd</code> will listen. This
- port number is used when generating the configuration file
- <code>httpd.conf</code>. The default is 80.</dd>
-
- <dt><code>--with-program-name</code></dt>
- <dd>Define an alternative executable name. The default is
- <code>httpd</code>.</dd>
- </dl>
- </section>
- </section>
-
- <section id="packages"><title>Optional packages</title>
- <p>These options are used to define optional packages.</p>
-
- <section id="generalpackages"><title>General syntax</title>
- <p>Generally you can use the following syntax to define an optional
- package:</p>
-
- <dl>
- <dt><code>--with-<var>PACKAGE</var>[=<var>ARG</var>]</code></dt>
- <dd>Use the package <var>PACKAGE</var>. The default value for
- <var>ARG</var> is<code>yes</code>.</dd>
-
- <dt><code>--without-<var>PACKAGE</var></code></dt>
- <dd>Do not use the package <var>PACKAGE</var>. This is the same as
- <code>--with-<var>PACKAGE</var>=no</code>. This option is provided by
- <code>autoconf</code> but not very useful for the Apache HTTP
- Server.</dd>
- </dl>
- </section>
-
- <!-- options not known are passed to packasges?
- are there other important options for packages? -->
-
- <section id="packageopt"><title>Specific packages</title>
- <dl>
- <dt><code>--with-apr=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd>The Apache Portable Runtime (APR) is part of the <code>httpd</code>
- source distribution and will automatically be build together with the
- HTTP server. If you want to use an already installed APR instead you
- have to tell <code>configure</code> the path to the
- <code>apr-config</code> script. You may set the absolute path and name
- or the directory to the installed APR. <code>apr-config</code> must
- exists within this directory or the subdirectory
- <code>bin</code>.</dd>
-
- <dt><code>--with-apr-util=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd>The Apache Portable Runtime Utilities (APU) are part of the
- <code>httpd</code> source distribution and will automatically be build
- together with the HTTP server. If you want to use an already installed
- APU instead you have to tell <code>configure</code> the path to the
- <code>apu-config</code> script. You may set the absolute path and name
- or the directory to the installed APU. <code>apu-config</code> must
- exists within this directory or the subdirectory
- <code>bin</code>.</dd>
-
- <dt><code>--with-ssl=<var>DIR</var></code></dt>
- <dd>If <module>mod_ssl</module> has been enabled <code>configure</code>
- searches for an installed OpenSSL. You can set the directory path
- to the SSL/TLS toolkit instead.</dd>
-
- <dt><code>--with-z=<var>DIR</var></code></dt>
- <dd><code>configure</code> searches automatically for an installed
- <code>zlib</code> library if your source configuration requires one
- (e.g., when <module>mod_deflate</module> is enabled). You can set the
- directory path to the compression library instead.</dd>
- </dl>
-
- <p>Several features of the Apache HTTP Server, including
- <module>mod_authn_dbm</module> and <module>mod_rewrite</module>'s DBM
- <directive module="mod_rewrite">RewriteMap</directive> use simple
- key/value databases for quick lookups of information. SDBM is included
- in the APU, so this database is always available. If you would like to
- use other database types, use the following options to enable
- them:</p>
-
- <dl>
- <dt><code>--with-gdbm[=<var>path</var>]</code></dt>
- <dd>If no <var>path</var> is specified, <code>configure</code> will
- search for the include files and libraries of a GNU DBM
- installation in the usual search paths. An explicit
- <var>path</var> will cause <code>configure</code> to look in
- <code><var>path</var>/lib</code> and
- <code><var>path</var>/include</code> for the relevant files.
- Finally, the <var>path</var> may specify specific include and
- library paths separated by a colon.</dd>
-
- <dt><code>--with-ndbm[=<var>path</var>]</code></dt>
- <dd>Like <code>--with-gdbm</code>, bur searches for a New DBM
- installation.</dd>
-
- <dt><code>--with-berkeley-db[=<var>path</var>]</code></dt>
- <dd>Like <code>--with-gdbm</code>, but searches for a Berkeley DB
- installation.</dd>
- </dl>
-
- <note><title>Note</title>
- <p>The DBM options are provided by the APU and passed through to its
- configuration script. They are useless when using an already
- installed APU defined by <code>--with-apr-util</code>.</p>
- <p>You may use more then one DBM implementation together with your
- HTTP server. The appropriated DBM type will be configured within
- the runtime configuration at each time.</p>
- </note>
- </section>
- </section>
-
- <section id="supportopt"><title>Options for support programs</title>
- <dl>
- <dt><code>--enable-static-support</code></dt>
- <dd>Build a statically linked version of the support binaries. This
- means, a stand-alone executable will be built with all the necessary
- libraries integrated. Otherwise the support binaries are linked
- dynamically by default.</dd>
-
- <dt><code>--enable-suexec</code></dt>
- <dd>Use this option to enable <code><a
- href="suexec.html">suexec</a></code>, which allows you to set
- uid and gid for spawned processes. <strong>Do not use this
- option unless you understand all the security implications of
- running a suid binary on your server.</strong> Further options
- to configure <code>suexec</code> are described <a
- href="#suexec">below</a>.</dd> </dl>
-
- <p>It is possible to create a statically linked binary of a single
- support program by using the following options:</p>
-
- <dl>
- <dt><code>--enable-static-ab</code></dt>
- <dd>Build a statically linked version of <code><a
- href="ab.html">ab</a></code>.</dd>
-
- <!-- missing documentation for chechgid -->
- <dt><code>--enable-static-checkgid</code></dt>
- <dd>Build a statically linked version of <code>checkgid</code>.</dd>
-
- <!-- missing documentation for htdbm -->
- <dt><code>--enable-static-htdbm</code></dt>
- <dd>Build a statically linked version of <code>htdbm</code>.</dd>
-
- <dt><code>--enable-static-htdigest</code></dt>
- <dd>Build a statically linked version of <code><a
- href="htdigest.html">htdigest</a></code>.</dd>
-
- <dt><code>--enable-static-htpasswd</code></dt>
- <dd>Build a statically linked version of <code><a
- href="htpasswd.html">htpasswd</a></code>.</dd>
-
- <dt><code>--enable-static-logresolve</code></dt>
- <dd>Build a statically linked version of <code><a
- href="logresolve.html">logresolve</a></code>.</dd>
-
- <dt><code>--enable-static-rotatelogs</code></dt>
- <dd>Build a statically linked version of <code><a
- href="rotatelogs.html">rotatelogs</a></code>.</dd>
- </dl>
-
- <section id="suexec"><title>suexec configuration options</title>
- <p>The following options are used to fine tune the behavior of <code><a
- href="suexec.html">suexec</a></code>. See <a
- href="suexec.html#install">Configuring and installing suEXEC</a>
- for further information.</p>
-
- <dl>
- <dt><code>--with-suexec-bin</code></dt>
- <dd>This defines the path to suexec binary. Default is
- <code>--sbindir</code> (see <a href="directoryfinetuning">Fine
- tuning of installation directories</a>).</dd>
-
- <dt><code>--with-suexec-caller</code></dt>
- <dd>This defines the user allowed to call <code>suexec</code>. It should
- be the same as the user under which <code>httpd</code> normally
- runs.</dd>
-
- <dt><code>--with-suexec-docroot</code></dt>
- <dd>This defines the directory tree under which <code>suexec</code>
- access is allowed for executables. Default value is
- <code>--datadir/htdocs</code>.</dd>
-
- <dt><code>--with-suexec-gidmin</code></dt>
- <dd>Define this as the lowest GID allowed to be a target user for
- <code>suexec</code>. The default value is 100.</dd>
-
- <dt><code>--with-suexec-logfile</code></dt>
- <dd>This defines the filename of the <code>suexec</code> logfile. By
- default the logfile is named <code>suexec_log</code> and located in
- <code>--logfiledir</code>.</dd>
-
- <dt><code>--with-suexec-safepath</code></dt>
- <dd>Define the value of the environment variable <code>PATH</code> to
- be set for processes started by <code>suexec</code>. Default value is
- <code>/usr/local/bin:/usr/bin:/bin</code>.</dd>
-
- <dt><code>--with-suexec-userdir</code></dt>
- <dd>This defines the subdirectory under the user's directory that
- contains all executables for which <code>suexec</code> access is
- allowed. This setting is necessary when you want to use
- <code>suexec</code> together with user-specific directories (as
- provided by <module>mod_userdir</module>). The default is
- <code>public_html</code>.</dd>
-
- <dt><code>--with-suexec-uidmin</code></dt>
- <dd>Define this as the lowest UID allowed to be a target user for
- <code>suexec</code>. The default value is 100.</dd>
-
- <dt><code>--with-suexec-umask</code></dt>
- <dd>Set <code>umask</code> for processes started by <code>suexec</code>.
- It defaults to your system settings.</dd>
- </dl>
- </section>
- </section>
-</section>
-
-<section id="env"><title>Environment variables</title>
- <p>There are some useful environment variables to override the choices made by
- <code>configure</code> or to help it to find libraries and programs with
- nonstandard names or locations.</p>
-
- <!-- are these all useful variables? -->
- <dl>
- <dt><code>CC</code></dt>
- <dd>Define the C compiler command to be used for compilation.</dd>
-
- <dt><code>CFLAGS</code></dt>
- <dd>Set C compiler flags you want to use for compilation.</dd>
-
- <dt><code>CPP</code></dt>
- <dd>Define the C preprocessor command to be used.</dd>
-
- <dt><code>CPPFLAGS</code></dt>
- <dd>Set C/C++ preprocessor flags, e.g. <code>-I<var>includedir</var></code>
- if you have headers in a nonstandard directory <var>includedir</var>.</dd>
-
- <dt><code>LDFLAGS</code></dt>
- <dd>Set linker flags, e.g. <code>-L<var>libdir</var></code> if you have
- libraries in a nonstandard directory <var>libdir</var>.</dd>
- </dl>
-</section>
-</manualpage>
diff --git a/docs/manual/programs/configure.xml.ko b/docs/manual/programs/configure.xml.ko
deleted file mode 100644
index 80f4afe833..0000000000
--- a/docs/manual/programs/configure.xml.ko
+++ /dev/null
@@ -1,933 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="configure.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>configure - ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù</title>
-
-<summary>
- <p><code>configure</code> ½ºÅ©¸³Æ®´Â ƯÁ¤ Ç÷¡Æû¿¡¼­ ¾ÆÆÄÄ¡
- À¥¼­¹ö¸¦ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇϱâÀ§ÇØ ¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù. ¿©·¯
- ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¿øÇÏ´Â ¿ä±¸Á¶°Ç¿¡ ¸Â°Ô ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p>¼Ò½º ¹èÆ÷º»ÀÇ ÃÖ»óÀ§ µð·ºÅ丮¿¡ ÀÖ´Â ÀÌ ½ºÅ©¸³Æ®´Â À¯´Ð½º¿Í
- À¯´Ð½º·ù ½Ã½ºÅÛ¿¡¼­¸¸ »ç¿ëÇÑ´Ù. ´Ù¸¥ Ç÷¡ÆûÀ» »ç¿ëÇÑ´Ù¸é
- <a href="../platform/">Ç÷¡Æû</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-</summary>
-
-<seealso><a href="../install.html">ÄÄÆÄÀÏ°ú ¼³Ä¡</a></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code>configure</code> ½ºÅ©¸³Æ®´Â ¹èÆ÷º»ÀÇ ÃÖ»óÀ§
- µð·ºÅ丮¿¡¼­ ½ÇÇàÇØ¾ß ÇÑ´Ù.</p>
-
- <p><code><strong>./configure</strong> [<var>OPTION</var>]...
- [<var>VAR</var>=<var>VALUE</var>]...</code></p>
-
- <p>ȯ°æº¯¼ö¸¦ (¿¹¸¦ µé¾î, <code>CC</code>, <code>CFLAGS</code>,
- ...) ÁöÁ¤ÇÏ·Á¸é, <code><var>VAR</var>=<var>VALUE</var></code>¿Í
- °°ÀÌ Áö½ÃÇÑ´Ù. <a href="#env">¾Æ·¡¿¡¼­</a> À¯¿ëÇÑ È¯°æº¯¼öµéÀ»
- ¼³¸íÇÑ´Ù.</p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
- <ul>
- <li><a href="#configurationoptions">±¸¼º ¿É¼Ç</a></li>
- <li><a href="#installationdirectories">¼³Ä¡ µð·ºÅ丮</a></li>
- <li><a href="#systemtypes">½Ã½ºÅÛ Á¾·ù</a></li>
- <li><a href="#optionalfeatures">±â´É ¼±ÅÃ</a></li>
- <li><a href="#supportopt">Áö¿ø ÇÁ·Î±×·¥À» À§ÇÑ ¿É¼Ç</a></li>
- </ul>
-
- <section id="configurationoptions"><title>±¸¼º ¿É¼Ç</title>
-
- <p>ÀÌ ¿É¼ÇµéÀº <code>configure</code> ÀÚü Çൿ¿¡ ¿µÇâÀ»
- ÁØ´Ù.</p>
-
- <dl>
- <dt><code>-C</code></dt>
- <dt><code>--config-cache</code></dt>
- <dd><code>--cache-file=config.cache</code>¿Í °°´Ù.</dd>
-
- <dt><code>--cache-file=<var>FILE</var></code></dt>
- <dd>°Ë»ç °á°ú¸¦ <var>FILE</var> ÆÄÀÏ¿¡ ij½ÌÇÑ´Ù.
- ±âº»°ªÀº °Ë»ç °á°ú¸¦ ±â·ÏÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-h</code></dt>
- <dt><code>--help [short|recursive]</code></dt>
- <dd>µµ¿ò¸»À» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù. <code>short</code> ¾Æ±Ô¸ÕÆ®´Â
- ÀÌ ÆÐÅ°Áö ƯÀ¯ÀÇ ¿É¼Ç¸¸À» Ãâ·ÂÇÑ´Ù. <code>recursive</code>
- ¾Æ±Ô¸ÕÆ®´Â Æ÷ÇÔµÈ ¸ðµç ÆÐÅ°Áö¿¡ ´ëÇÑ ÂªÀº µµ¿ò¸»À»
- º¸¿©ÁØ´Ù.</dd>
-
- <dt><code>-n</code></dt>
- <dt><code>--no-create</code></dt>
- <dd><code>configure</code> ½ºÅ©¸³Æ®¸¦ Á¤»óÀûÀ¸·Î ½ÇÇàÇÏÁö¸¸,
- Ãâ·ÂÆÄÀÏÀ» ¸¸µéÁö ¾Ê´Â´Ù. ÀÌ ¿É¼ÇÀº ÄÄÆÄÀÏÀ» À§ÇÑ makefileÀ»
- ¸¸µé±â ÀÌÀü¿¡ °Ë»ç °á°ú¸¦ È®ÀÎÇغ¼¶§ À¯¿ëÇÏ´Ù.</dd>
-
- <dt><code>-q</code></dt>
- <dt><code>--quiet</code></dt>
- <dd>½ÇÇàÁß¿¡ <code>checking ...</code> ¹®±¸¸¦ Ãâ·ÂÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--srcdir=<var>DIR</var></code></dt>
- <dd><var>DIR</var> µð·ºÅ丮¸¦ ¼Ò½ºÆÄÀÏ µð·ºÅ丮·Î ÁöÁ¤ÇÑ´Ù.
- ±âº»°ªÀº configure°¡ ÀÖ´Â µð·ºÅ丮 ȤÀº »óÀ§µð·ºÅ丮
- <code>..</code>ÀÌ´Ù.</dd>
-
- <dt><code>--silent</code></dt>
- <dd><code>--quiet</code>¿Í °°´Ù.</dd>
-
- <dt>-V</dt>
- <dt>--version</dt>
- <dd>ÀúÀÛ±Ç Á¤º¸¸¦ Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="installationdirectories"><title>¼³Ä¡ µð·ºÅ丮</title>
-
- <p>ÀÌ ¿É¼ÇµéÀº ¼³Ä¡ µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù. ¼³Ä¡ À§Ä¡´Â
- ¼±ÅÃÇÑ ±¸Á¶(layout)¿¡ µû¶ó ´Ù¸£´Ù.</p>
-
- <dl>
- <dt><code>--prefix=<var>PREFIX</var></code></dt>
- <dd>¾ÆÅ°ÅØÃÄ¿¡ µ¶¸³ÀûÀÎ ÆÄÀÏÀ» <var>PREFIX</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- ±âº»°ªÀº <code>/usr/local/apache2</code>ÀÌ´Ù.</dd>
-
- <dt><code>--exec-prefix=<var>EPREFIX</var></code></dt>
- <dd>¾ÆÅ°ÅØÃÄ¿¡ ÀÇÁ¸ÀûÀÎ ÆÄÀÏÀ» <var>EPREFIX</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- ±âº»°ªÀº <var>PREFIX</var> µð·ºÅ丮ÀÌ´Ù.</dd>
- </dl>
-
- <p>±âº»ÀûÀ¸·Î <code>make install</code>Àº
- <code>/usr/local/apache2/bin</code>,
- <code>/usr/local/apache2/lib</code>¿Í °°Àº À§Ä¡¿¡ ¸ðµç
- ÆÄÀÏÀ» ¼³Ä¡ÇÑ´Ù. <code>--prefix=$HOME</code>°ú °°ÀÌ
- <code>--prefix</code> ¿É¼ÇÀ» »ç¿ëÇÏ¿©
- <code>/usr/local/apache2</code> ÀÌ¿ÜÀÇ ¼³Ä¡ »óÀ§µð·ºÅ丮¸¦
- ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <section id="layout"><title>µð·ºÅ丮 ±¸Á¶ ÁöÁ¤</title>
- <dl>
- <dt><code>--enable-layout=<var>LAYOUT</var></code></dt>
- <dd>¼³Ä¡ À§Ä¡¸¦ <var>LAYOUT</var> ±¸Á¶¿¡ µû¸£µµ·Ï
- ¼Ò½ºÄÚµå¿Í ÄÄÆÄÀÏ ½ºÅ©¸³Æ®¸¦ ±¸¼ºÇÑ´Ù. ±¸Á¶¸¦ »ç¿ëÇϸé
- ÆÄÀÏ Á¾·ù¿¡ µû¶ó ¼³Ä¡ À§Ä¡¸¦ µû·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
- <code>config.layout</code> ÆÄÀÏ¿¡ ¿©·¯ ¼³Á¤ ¿¹°¡ ÀÖ°í,
- À̸¦ Âü°íÇÏ¿© Á÷Á¢ ¼³Á¤À» ¸¸µé ¼öµµ ÀÖ´Ù. ÆÄÀÏ¿¡¼­
- °¢ ±¸Á¶´Â <code>&lt;Layout
- FOO&gt;...&lt;/Layout&gt;</code>·Î ±¸ºÐµÇ¸ç, ÀÌ
- ºÎºÐÀº <code>FOO</code>¶ó´Â À̸§ÀÇ ±¸Á¶¸¦ ³ªÅ¸³½´Ù.
- ±¸Á¶ÀÇ ±âº»°ªÀº <code>Apache</code>ÀÌ´Ù.</dd>
- </dl>
- </section>
-
- <section id="directoryfinetuning"><title>¼³Ä¡ µð·ºÅ丮ÀÇ
- ÀÚ¼¼ÇÑ Á¶Á¤</title>
-
- <p>¼³Ä¡ µð·ºÅ丮¸¦ ´õ ¼öÁ¤ÇÑ´Ù¸é ¾Æ·¡ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.
- °¢ µð·ºÅ丮ÀÇ ±âº»°ªÀº <code>autoconf</code>°¡ ÁöÁ¤Çϸç,
- ¼±ÅÃÇÑ ±¸Á¶¿¡ µû¶ó ´Ù¸§À» ÁÖÀÇÇ϶ó.</p>
-
- <dl>
- <!-- only apr-config and apu-config are installed at bindir.
- everything else is stored at sbindir. ==> clarify/change this -->
- <dt><code>--bindir=<var>DIR</var></code></dt>
- <dd>»ç¿ëÀÚ ½ÇÇàÆÄÀÏÀ» <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù. »ç¿ëÀÚ
- ½ÇÇàÆÄÀÏ¿¡´Â »çÀÌÆ® °ü¸®ÀÚ¿¡°Ô À¯¿ëÇÑ
- <code>htpasswd</code>¿Í <code>dbmmanage</code> °°Àº
- Áö¿ø ÇÁ·Î±×·¥µµ Æ÷ÇԵȴÙ. <var>DIR</var>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/bin</code>ÀÌ´Ù.</dd>
-
- <dt><code>--datadir=<var>DIR</var></code></dt>
- <dd>¾ÆÅ°ÅØÃÄ µ¶¸³ÀûÀÎ ÀбâÀü¿ë ÀڷḦ <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>datadir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/share</code>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--includedir=<var>DIR</var></code></dt>
- <dd>C Çì´õÆÄÀÏÀ» <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>includedir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/include</code>ÀÌ´Ù.</dd>
-
- <dt><code>--infodir=<var>DIR</var></code></dt>
- <dd>info ¹®¼­¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>infodir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/info</code>ÀÌ´Ù. ÇöÀç ÀÌ ¿É¼ÇÀº
- »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--libdir=<var>DIR</var></code></dt>
- <dd>¿ÀºêÁ§Æ®ÄÚµå ¶óÀ̺귯¸®¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>libdir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/lib</code>ÀÌ´Ù.</dd>
-
- <dt><code>--libexecdir=<var>DIR</var></code></dt>
- <dd>ÇÁ·Î±×·¥ ½ÇÇàÆÄÀÏÀ» (Áï, °øÀ¯¸ðµâ) <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>libexecdir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/libexec</code>ÀÌ´Ù.</dd>
-
- <dt><code>--localstatedir=<var>DIR</var></code></dt>
- <dd>º¯°æµÇ´Â ¸Ó½®º° Á¤º¸¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>localstatedir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/var</code>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--mandir=<var>DIR</var></code></dt>
- <dd>man ¹®¼­¸¦ <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- <code>mandir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/man</code>ÀÌ´Ù.</dd>
-
- <dt><code>--oldincludedir=<var>DIR</var></code></dt>
- <dd>gcc°¡ ¾Æ´Ñ ÄÄÆÄÀÏ·¯¸¦ À§ÇÑ C Çì´õÆÄÀÏÀ» <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>oldincludedir</code>ÀÇ ±âº»°ªÀº
- <code>/usr/include</code>ÀÌ´Ù. <code>autoconf</code>¿¡
- ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--sbindir=<var>DIR</var></code></dt>
- <dd>½Ã½ºÅÛ °ü¸®ÀÚ¿ë ½ÇÇàÆÄÀÏÀ» <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù.
- ½Ã½ºÅÛ °ü¸®ÀÚ¿ë ½ÇÇàÆÄÀÏÀ̶õ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ½ÇÇàÇϴµ¥
- ÇÊ¿äÇÑ <code>httpd</code>, <code>apachectl</code>,
- <code>suexec</code> µî ¼­¹ö ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù.
- <code>sbindir</code>ÀÇ ±âº»°ªÀº
- <code><var>EPREFIX</var>/sbin</code>ÀÌ´Ù.</dd>
-
- <dt><code>--sharedstatedir=<var>DIR</var></code></dt>
- <dd>º¯°æµÇ´Â ¾ÆÅ°ÅØÃÄ µ¶¸³ÀûÀÎ ÀڷḦ <var>DIR</var>¿¡
- ¼³Ä¡ÇÑ´Ù. <code>sharedstatedir</code>ÀÇ ±âº»°ªÀº
- <code><var>PREFIX</var>/com</code>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ÇöÀç »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--sysconfdir=<var>DIR</var></code></dt>
- <dd>¼­¹ö ¼³Á¤ÆÄÀÏ <code>httpd.conf</code>,
- <code>mime.types</code>¿Í °°Àº ÀбâÀü¿ë ¸Ó½®º° ÀڷḦ
- <var>DIR</var>¿¡ ¼³Ä¡ÇÑ´Ù. <code>sysconfdir</code>ÀÇ
- ±âº»°ªÀº <code><var>PREFIX</var>/etc</code>ÀÌ´Ù.</dd>
- </dl>
- </section>
- </section>
-
- <section id="systemtypes"><title>½Ã½ºÅÛ Á¾·ù</title>
-
- <p>´Ù¸¥ ½Ã½ºÅÛ¿¡¼­ ½ÇÇàÇÒ ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦
- ±³Â÷ÄÄÆÄÀÏÇϱâ(cross-compile)Çϱâ À§ÇÑ ¿É¼ÇµéÀÌ´Ù. ¼­¹ö¸¦
- ÄÄÆÄÀÏÇÑ ½Ã½ºÅÛ¿¡¼­ ¼­¹ö¸¦ ½ÇÇàÇÏ´Â ÀϹÝÀûÀÎ °æ¿ì, ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</p>
-
- <dl>
- <dt><code>--build=<var>BUILD</var></code></dt>
- <dd>µµ±¸¸¦ ÄÄÆÄÀÏÇÏ´Â ½Ã½ºÅÛÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>config.guess</code> ½ºÅ©¸³Æ®ÀÇ °á°úÀÌ´Ù.</dd>
-
- <dt><code>--host=<var>HOST</var></code></dt>
- <dd>¼­¹ö¸¦ ½ÇÇàÇÒ ½Ã½ºÅÛÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. <var>HOST</var>ÀÇ
- ±âº»°ªÀº <var>BUILD</var>ÀÌ´Ù.</dd>
-
- <dt><code>--target=<var>TARGET</var></code></dt>
- <dd><var>TARGET</var> ½Ã½ºÅÛ Á¾·ù¸¦ À§ÇÑ ÄÄÆÄÀÏ·¯¸¦ ¸¸µé¶§
- »ç¿ëÇÑ´Ù. ±âº»°ªÀº <var>HOST</var>ÀÌ´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ¾ÆÆÄÄ¡ À¥¼­¹ö¿Í´Â
- °ü·ÃÀÌ ¾ø´Ù.</dd>
- </dl>
- </section>
-
- <section id="optionalfeatures"><title>±â´É ¼±ÅÃ</title>
-
- <p>ÀÌ ¿É¼ÇÀº À¥¼­¹öÀÇ ¼¼ºÎ ±â´ÉÀ» Á¶ÀýÇÑ´Ù.</p>
-
- <section id="generaloptfeat"><title>ÀϹÝÀûÀÎ ¹®¹ý</title>
- <p>ÀϹÝÀûÀ¸·Î ´ÙÀ½ ¹®¹ýÀ» »ç¿ëÇÏ¿© ±â´ÉÀ» Æ÷ÇÔÇÏ°í »«´Ù:</p>
-
- <dl>
- <dt><code>--disable-<var>FEATURE</var></code></dt>
- <dd><var>FEATURE</var> ±â´ÉÀ» »«´Ù.
- <code>--enable-<var>FEATURE</var>=no</code>¿Í °°´Ù.</dd>
-
- <dt><code>--enable-<var>FEATURE</var>[=<var>ARG</var>]</code></dt>
- <dd><var>FEATURE</var> ±â´ÉÀ» Æ÷ÇÔÇÑ´Ù. <var>ARG</var>ÀÇ
- ±âº»°ªÀº <code>yes</code>ÀÌ´Ù.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=shared</code></dt>
- <dd>ÇØ´ç ¸ðµâÀ» DSO ¸ðµâ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-<var>MODULE</var>=static</code></dt>
- <dd>Æ÷ÇÔÇÏ´Â ¸ðµâÀº ±âº»ÀûÀ¸·Î Á¤ÀûÀ¸·Î ¸µÅ©µÈ´Ù. ÀÌ
- ¿É¼ÇÀº ¸í½ÃÀûÀ¸·Î Á¤Àû ¸µÅ©¸¦ °­Á¦ÇÑ´Ù.</dd>
- </dl>
-
- <note><title>ÁÖÀÇ</title>
- <code>configure</code>´Â <var>foo</var>°¡ ¾ø´Â °æ¿ì
- <code>--enable-<var>foo</var></code>¸¦ »ç¿ëÇصµ ÀÌ »ç½ÇÀ»
- ¾Ë·ÁÁÖÁö ¾ÊÀ¸¹Ç·Î ÁÖÀÇÇؼ­ ÀÔ·ÂÇØ¾ß ÇÑ´Ù.
- </note>
- </section>
-
- <!-- to do: add better enable-module descriptions and recommendations -->
- <section id="enabledmodules"><title>±âº»ÀûÀ¸·Î Æ÷ÇÔÇÏ´Â ¸ðµâ</title>
- <p>¾î¶² ¸ðµâÀº ±âº»ÀûÀ¸·Î ÄÄÆÄÀϵDZ⶧¹®¿¡ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é
- ¸í½ÃÀûÀ¸·Î »©Áà¾ß ÇÑ´Ù. ´ÙÀ½ ¿É¼ÇÀº ƯÁ¤ ¸ðµâÀ» ÄÄÆÄÀÏ
- °úÁ¤¿¡¼­ Á¦¿ÜÇÑ´Ù.</p>
-
- <dl>
- <dt><code>--disable-actions</code></dt>
- <dd><module>mod_actions</module>°¡ Á¦°øÇÏ´Â ¿äû¿¡ ´ëÇÑ
- Çൿ ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-alias</code></dt>
- <dd><module>mod_alias</module>°¡ Á¦°øÇÏ´Â ¿äûÀ»
- ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐÀ¸·Î ´ëÀÀÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏÁö
- ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-asis</code></dt>
- <dd><module>mod_asis</module>°¡ Á¦°øÇÏ´Â as-is ÆÄÀÏÇüÀ»
- Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-auth</code></dt>
- <dd><module>mod_auth</module>°¡ Á¦°øÇÏ´Â »ç¿ëÀÚº° Á¢±ÙÁ¦¾î
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀº »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦
- ÀÏ¹Ý ¹®ÀÚÆÄÀÏ¿¡ ÀúÀåÇÏ´Â HTTP Basic Authentication¿¡¼­
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--disable-autoindex</code></dt>
- <dd><module>mod_autoindex</module>°¡ Á¦°øÇÏ´Â µð·ºÅ丮
- ¸ñ·Ï ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-access</code></dt>
- <dd><module>mod_access</module>°¡ Á¦°øÇϴ ȣ½ºÆ®º°
- Á¢±ÙÁ¦¾î ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-cgi</code></dt>
- <dd>ºñ¾²·¹µå MPMÀ» »ç¿ëÇÏ´Â °æ¿ì CGI ½ºÅ©¸³Æ®¸¦ Áö¿øÇÏ´Â
- <module>mod_cgi</module>¸¦ ±âº»ÀûÀ¸·Î Æ÷ÇÔÇÑ´Ù. ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇϸé CGI¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-cgid</code></dt>
- <dd>¾²·¹µå MPMÀÎ <module>worker</module>³ª
- <module>perchild</module>¸¦ »ç¿ëÇÏ´Â °æ¿ì ±âº»ÀûÀ¸·Î
- <module>mod_cgid</module>°¡ CGI ½ºÅ©¸³Æ®¸¦ Áö¿øÇÑ´Ù.
- ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé CGI¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-charset-lite</code></dt>
- <dd><module>mod_charset_lite</module>°¡ Á¦°øÇÏ´Â ¹®ÀÚÁýÇÕ
- º¯È¯ ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀº EBCDIC ½Ã½ºÅÛ¿¡¼­¸¸
- ±âº»ÀûÀ¸·Î Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><code>--disable-dir</code></dt>
- <dd><module>mod_dir</module>ÀÌ Á¦°øÇÏ´Â µð·ºÅ丮 ¿äû
- ó¸® ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-env</code></dt>
- <dd><module>mod_env</module>°¡ Á¦°øÇϴ ȯ°æº¯¼ö ¼³Á¤/ÇØÁ¦
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <!-- configure mentions enable-http, but disable-http would make much
- more sense -->
- <dt><code>--disable-http</code></dt>
- <dd>HTTP ÇÁ·ÎÅäÄÝÀ» ó¸®ÇÏÁö ¾Ê´Â´Ù. <code>http</code>
- ¸ðµâÀº ¼­¹ö°¡ À¥¼­¹ö·Î µ¿ÀÛÇϴµ¥ ±âº»ÀûÀÎ ¸ðµâÀÌ´Ù.
- ´ë½Å ´Ù¸¥ ÇÁ·ÎÅäÄÝ ¸ðµâÀ» »ç¿ëÇÒ °æ¿ì¿¡¸¸ ÀÌ ¸ðµâÀÌ
- À¯¿ëÇÏ´Ù. <strong>ÀÚ½ÅÀÌ ¹«¾ùÀ» ÇÏ´ÂÁö È®½ÇÈ÷ ¾ËÁö
- ¸øÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» »©Áö ¸¶¶ó</strong>
- <br/>
- ÁÖÀÇ: ÀÌ ¸ðµâÀº Ç×»ó Á¤ÀûÀ¸·Î ¸µÅ©µÈ´Ù.</dd>
-
- <dt><code>--disable-imap</code></dt>
- <dd><module>mod_imap</module>ÀÌ Á¦°øÇÏ´Â ¼­¹ö±â¹Ý imagemap
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-include</code></dt>
- <dd><module>mod_include</module>°¡ Á¦°øÇÏ´Â Server Side
- Includes ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-log-config</code></dt>
- <dd><module>mod_log_config</module>°¡ Á¦°øÇÏ´Â ·Î±×
- ¼³Á¤À» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀÌ ¾øÀ¸¸é ¼­¹öÀÇ ¿äûÀ»
- ·Î±×¿¡ ±â·ÏÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code>--disable-mime</code></dt>
- <dd><module>mod_mime</module>Àº ¿äûÇÑ ÆÄÀϸíÀÇ È®ÀåÀÚ¿¡
- µû¶ó ÆÄÀÏÀÇ Çൿ°ú ³»¿ë(mime-type, ¾ð¾î, ¹®ÀÚÁýÇÕ,
- ÀÎÄÚµù)À» °áÁ¤ÇÑ´Ù. (ÀÌ ¸ðµâÀ» Á¦°ÅÇÏ¿©) ÆÄÀÏ È®ÀåÀÚ¸¦
- MIME°ú ¿¬°üÇÏÁö ¾Ê´Â °ÍÀ» ÀϹÝÀûÀ¸·Î ÃßõÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-negotiation</code></dt>
- <dd><module>mod_negotiation</module>ÀÌ Á¦°øÇÏ´Â ³»¿ëÇù»ó
- ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-setenvif</code></dt>
- <dd><module>mod_setenvif</module>°¡ Á¦°øÇÏ´Â Çì´õ¿¡
- µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-status</code></dt>
- <dd><module>mod_status</module>°¡ Á¦°øÇÏ´Â ÇÁ·Î¼¼½º/¾²·¹µå
- °¨½Ã ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>--disable-userdir</code></dt>
- <dd><module>mod_userdir</module>ÀÌ Á¦°øÇÏ´Â ¿äûÀ» »ç¿ëÀÚº°
- µð·ºÅ丮¿¡ ´ëÀÀÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.</dd>
- </dl>
- </section>
-
- <section id="disabledmodules"><title>±âº»ÀûÀ¸·Î Æ÷ÇÔÇÏÁö ¾Ê´Â ¸ðµâ</title>
- <p>±âº»ÀûÀ¸·Î ÄÄÆÄÀϵǴ ¸ðµâµµ ÀÖÁö¸¸, ¸ðµâÀ» »ç¿ëÇÏ·Á¸é
- Á÷Á¢ ȤÀº <code>most</code>³ª <code>all</code> Å°¿öµå¸¦
- »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î Æ÷ÇÔÇØ¾ß ÇÏ´Â ¸ðµâÀÌ ÀÖ´Ù. ±×·¡¼­
- ¾Æ·¡ ¿É¼ÇµéÀ» »ç¿ëÇÑ´Ù.</p>
-
- <dl>
- <dt><code>--enable-auth-anon</code></dt>
- <dd><module>mod_auth_anon</module>ÀÌ Á¦°øÇÏ´Â À͸í»ç¿ëÀÚ
- Á¢±Ù ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-auth-dbm</code></dt>
- <dd><module>mod_auth_dbm</module>Àº »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦
- DBMÇü½ÄÀÇ µ¥ÀÌÅͺ£À̽º ÆÄÀÏ¿¡ ÀúÀåÇÏ´Â HTTP Basic
- Authentication¿¡¼­ »ç¿ëÇÑ´Ù. ¸ðµâÀ» »ç¿ëÇÏ·Á¸é ÀÌ
- ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-auth-digest</code></dt>
- <dd><module>mod_auth_digest</module>°¡ Á¦°øÇÏ´Â RFC2617
- Digest authenticationÀ» »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº Á¤º¸¸¦
- ÀÏ¹Ý ¹®ÀÚÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù.</dd>
-
- <dt><code>--enable-auth-ldap</code></dt>
- <dd><module>mod_auth_ldap</module>ÀÌ Á¦°øÇÏ´Â LDAP±â¹Ý
- ÀÎÁõ ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-cache</code></dt>
- <dd><module>mod_cache</module>°¡ Á¦°øÇÏ´Â µ¿ÀûÀ¸·Î »ý¼ºÇÏ´Â
- ÆÄÀÏÀÇ Ä³½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù. ¸Å¿ì ºÎÇÏ°¡ ¸¹°Å³ª ÇÁ·Ï½Ã
- ¼­¹ö¸¦ ij½ÌÇÏ´Â ¼­¹ö¿¡°Ô ÀÌ ½ÇÇèÀûÀÎ ¸ðµâÀÌ À¯¿ëÇÒ
- ¼ö ÀÖ´Ù. ÃÖ¼ÒÇÑ ÇÑ°¡Áö ÀúÀå°ü¸®¸ðµâ(storage management
- module)À» (¿¹¸¦ µé¾î, <module>mod_disk_cache</module>³ª
- <module>mod_mem_cache</module>) °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-cern-meta</code></dt>
- <dd><module>mod_cern_meta</module>°¡ Á¦°øÇÏ´Â CERN ¸ÞŸÆÄÀÏ
- Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-charset-lite</code></dt>
- <dd><module>mod_charset_lite</module>°¡ Á¦°øÇÏ´Â ¹®ÀÚÁýÇÕ
- º¯È¯ ±â´ÉÀ» »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº EBCDIC ½Ã½ºÅÛ¿¡¼­¸¸
- ±âº»ÀûÀ¸·Î Æ÷ÇԵȴÙ. ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â Á÷Á¢ Æ÷ÇÔ½ÃÄÑÁà¾ß
- ÇÑ´Ù.</dd>
-
- <dt><code>--enable-dav</code></dt>
- <dd><module>mod_dav</module>°¡ Á¦°øÇÏ´Â WebDAV ÇÁ·ÎÅäÄÝ
- ó¸® ±â´ÉÀ» »ç¿ëÇÑ´Ù. µ¶¸³µÈ <module>mod_dav_fs</module>
- ¸ðµâÀÌ ÆÄÀϽýºÅÛ ÀÚ¿øÀ» Áö¿øÇÑ´Ù. ÀÌ ¸ðµâÀº
- <code>--enable-dav</code>¸¦ »ç¿ëÇϸé ÀÚµ¿À¸·Î Æ÷ÇÔÇÑ´Ù.<br/>
- ÁÖÀÇ: <module>mod_dav</module>´Â <code>http</code>
- ÇÁ·ÎÅäÄÝ ¸ðµâ°ú °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-dav-fs</code></dt>
- <dd><module>mod_dav_fs</module>°¡ Á¦°øÇÏ´Â DAVÀÇ ÆÄÀϽýºÅÛ
- ÀÚ¿ø Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº
- <module>mod_dav</module> ¸ðµâÀ» À§ÇÑ Á¦°øÀÚÀ̱⠶§¹®¿¡
- <code>--enable-dav</code>µµ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-deflate</code></dt>
- <dd><module>mod_deflate</module>°¡ Á¦°øÇÏ´Â ¾ÐÃàÀü¼Û
- ÀÎÄÚµù ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-disk-cache</code></dt>
- <dd><module>mod_disk_cache</module>°¡ Á¦°øÇÏ´Â µð½ºÅ©
- ij½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-expires</code></dt>
- <dd><module>mod_expires</module>°¡ Á¦°øÇÏ´Â Expires
- Çì´õ Á¶Àý ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-ext-filter</code></dt>
- <dd><module>mod_ext_filter</module>°¡ Á¦°øÇÏ´Â ¿ÜºÎ
- ÇÊÅÍ Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-file-cache</code></dt>
- <dd><module>mod_file_cache</module>°¡ Á¦°øÇÏ´Â ÆÄÀÏ
- ij½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-headers</code></dt>
- <dd><module>mod_headers</module>°¡ Á¦°øÇÏ´Â HTTP Çì´õ
- Á¶Àý ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-info</code></dt>
- <dd><module>mod_info</module>°¡ Á¦°øÇÏ´Â ¼­¹öÁ¤º¸ ±â´ÉÀ»
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-ldap</code></dt>
- <dd><module>mod_ldap</module>ÀÌ Á¦°øÇÏ´Â LDAP ij½Ì°ú
- ¿¬°áÇ® ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-logio</code></dt>
- <dd><module>mod_logio</module>°¡ Á¦°øÇÏ´Â ·Î±×¿¡ Çì´õ¿Í
- ÀÔÃâ·Â ¹ÙÀÌÆ®¼ö¸¦ ±â·ÏÇÏ´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-mem-cache</code></dt>
- <dd><module>mod_mem_cache</module>°¡ Á¦°øÇÏ´Â ¸Þ¸ð¸®
- ij½Ì ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-mime-magic</code></dt>
- <dd><module>mod_mime_magic</module>ÀÌ Á¦°øÇÏ´Â MIME
- type ÀÚµ¿ ÀÎ½Ä ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-isapi</code></dt>
- <dd><module>mod_isapi</module>°¡ Á¦°øÇÏ´Â isapi È®ÀåÀ»
- Áö¿øÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy</code></dt>
- <dd><module>mod_proxy</module>°¡ Á¦°øÇÏ´Â ÇÁ·Ï½Ã/°ÔÀÌÆ®¿þÀÌ
- ±â´ÉÀ» »ç¿ëÇÑ´Ù. <code>CONNECT</code>, <code>FTP</code>,
- <code>HTTP</code>¿¡ ´ëÇÑ ÇÁ·Ï½Ã ±â´ÉÀ» °¢°¢
- <module>mod_proxy_connect</module>,
- <module>mod_proxy_ftp</module>,
- <module>mod_proxy_http</module>
- ¸ðµâÀÌ Á¦°øÇÑ´Ù. <code>--enable-proxy</code>¸¦ »ç¿ëÇϸé
- ÀÌ ¼¼ ¸ðµâÀ» ÀÚµ¿À¸·Î Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy-connect</code></dt>
- <dd><module>mod_proxy_connect</module>°¡ Á¦°øÇÏ´Â
- <code>CONNECT</code> ¿äû¿¡ ´ëÇÑ ÇÁ·Ï½Ã Áö¿ø ±â´ÉÀ»
- »ç¿ëÇÑ´Ù. ÀÌ ¸ðµâÀº <module>mod_proxy</module> ¸ðµâÀÇ
- È®ÀåÀ̹ǷÎ, <code>--enable-proxy</code>µµ °°ÀÌ »ç¿ëÇؾß
- ÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy-ftp</code></dt>
- <dd><module>mod_proxy_ftp</module>°¡ Á¦°øÇÏ´Â
- <code>FTP</code> ¿äû¿¡ ´ëÇÑ ÇÁ·Ï½Ã Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.
- ÀÌ ¸ðµâÀº <module>mod_proxy</module> ¸ðµâÀÇ È®ÀåÀ̹ǷÎ,
- <code>--enable-proxy</code>µµ °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-proxy-http</code></dt>
- <dd><module>mod_proxy_http</module>°¡ Á¦°øÇÏ´Â
- <code>HTTP</code> ¿äû¿¡ ´ëÇÑ ÇÁ·Ï½Ã Áö¿ø ±â´ÉÀ» »ç¿ëÇÑ´Ù.
- ÀÌ ¸ðµâÀº <module>mod_proxy</module> ¸ðµâÀÇ È®ÀåÀ̹ǷÎ,
- <code>--enable-proxy</code>µµ °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--enable-rewrite</code></dt>
- <dd><module>mod_rewrite</module>°¡ Á¦°øÇÏ´Â ±ÔÄ¢±â¹Ý
- URL Á¶ÀÛ ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-so</code></dt>
- <dd><module>mod_so</module>°¡ Á¦°øÇÏ´Â DSO ±â´ÉÀ» »ç¿ëÇÑ´Ù.
- <code>--enable-mods-shared</code> ¿É¼ÇÀ» »ç¿ëÇϸé
- ÀÚµ¿À¸·Î ÀÌ ¸ðµâÀ» Æ÷ÇÔÇÑ´Ù.</dd>
-
- <dt><code>--enable-speling</code></dt>
- <dd><module>mod_spelling</module>ÀÌ Á¦°øÇÏ´Â URL¿¡¼­
- ÀϹÝÀûÀÎ ¸ÂÃã¹ý ½Ç¼ö¸¦ °íÄ¡´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-ssl</code></dt>
- <dd><module>mod_ssl</module>ÀÌ Á¦°øÇÏ´Â SSL/TLS ±â´ÉÀ»
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-unique-id</code></dt>
- <dd><module>mod_unique_id</module>°¡ Á¦°øÇÏ´Â ¿äû¸¶´Ù
- À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¸¸µå´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-usertrack</code></dt>
- <dd><module>mod_usertrack</module>ÀÌ Á¦°øÇÏ´Â »ç¿ëÀÚ¼¼¼Ç
- ÃßÀû ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-vhost-alias</code></dt>
- <dd><module>mod_vhost_alias</module>°¡ Á¦°øÇÏ´Â ´ë·®
- °¡»óÈ£½ºÆ® ±â´ÉÀ» »ç¿ëÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="developermodules"><title>°³¹ßÀÚ¸¦ À§ÇÑ ¸ðµâ</title>
- <p>´ÙÀ½ ¸ðµâÀº Å×½ºÆ®¿ëÀ¸·Î °³¹ßÀÚ¿¡°Ô¸¸ À¯¿ëÇϸç, ±âº»ÀûÀ¸·Î
- Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ÀÌ ¸ðµâÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.
- ÀÌ ¸ðµâÀÌ ÇÊ¿äÇÑÁö È®½ÇÄ¡¾Ê´Ù¸é »ç¿ëÇÏÁö ¸¶¶ó.</p>
-
- <dl>
- <!-- module doc needed -->
- <dt><code>--enable-bucketeer</code></dt>
- <dd><code>mod_bucketeer</code>°¡ Á¦°øÇÏ´Â ¹öŶ(bucket)
- Á¶ÀÛ ÇÊÅ͸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-case-filter</code></dt>
- <dd><code>mod_case_filter</code>ÀÇ ´ë¹®ÀÚº¯È¯ Ãâ·ÂÇÊÅÍ
- °ßº»À» »ç¿ëÇÑ´Ù.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-case-filter-in</code></dt>
- <dd><code>mod_case_filter_in</code>ÀÇ ´ë¹®ÀÚº¯È¯ ÀÔ·ÂÇÊÅÍ
- °ßº»À» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-echo</code></dt>
- <dd><module>mod_echo</module>°¡ Á¦°øÇÏ´Â ECHO ¼­¹ö¸¦
- »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--enable-example</code></dt>
- <dd>°ßº» ¿¹Á¦¸ðµâÀÎ <module>mod_example</module>À»
- »ç¿ëÇÑ´Ù.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-fn-export</code></dt>
- <dd><code>mod_optional_fn_export</code>°¡ Á¦°øÇÏ´Â ¼±ÅÃÀûÀÎ
- ÇÔ¼ö ¿¢½ºÆ÷Æ®(exporter)ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-fn-import</code></dt>
- <dd><code>mod_optional_fn_import</code>°¡ Á¦°øÇÏ´Â ¼±ÅÃÀûÀÎ
- ÇÔ¼ö ÀÓÆ÷Æ®(importer)ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-hook-export</code></dt>
- <dd><code>mod_optional_hook_export</code>°¡ Á¦°øÇÏ´Â
- ¼±ÅÃÀûÀÎ ÈÅ(hook) ¿¢½ºÆ÷Æ®ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <!-- module doc needed -->
- <dt><code>--enable-optional-hook-import</code></dt>
- <dd><code>mod_optional_hook_import</code>°¡ Á¦°øÇÏ´Â
- ¼±ÅÃÀûÀÎ ÈÅ ÀÓÆ÷Æ®ÀÇ ¿¹¸¦ »ç¿ëÇÑ´Ù.</dd>
- </dl>
- </section>
-
- <section id="modules"><title>MPM°ú Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ</title>
- <p>´ÙÀ½ ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÇÊ¿äÇÑ ´ÙÁß󸮸ðµâ°ú Á¦»ïÀÚ°¡
- ¸¸µç ¸ðµâÀ» Ãß°¡ÇÑ´Ù:</p>
-
- <dl>
- <dt><code>--with-module=<var>module-type</var>:<var>module-file</var>
- </code></dt>
- <dd><p>Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» Á¤ÀûÀ¸·Î ¸µÅ©ÇÒ ¸ðµâ ¸ñ·Ï¿¡
- Ãß°¡ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö ¼Ò½º Æ®¸®ÀÇ
- <code>modules/<var>module-type</var></code>¿¡¼­ ¸ðµâÀÇ
- ¼Ò½ºÆÄÀÏ <code><var>module-file</var></code>À» ã±â¶§¹®¿¡
- ±×°÷¿¡ ¼Ò½ºÆÄÀÏÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ±×°÷¿¡ ÆÄÀÏÀÌ ¾ø´Ù¸é
- <code>configure</code>´Â <var>module-file</var>ÀÌ
- Àý´ëÆÄÀÏ°æ·Î¶ó°í °¡Á¤ÇÏ°í ¼Ò½ºÆÄÀÏÀ»
- <var>module-type</var> ÇÏÀ§µð·ºÅ丮¿¡ º¹»çÇÏ·Á°í
- ½ÃµµÇÑ´Ù.</p>
- <p>ÀÌ ¿É¼ÇÀº ¼Ò½ºÆÄÀÏÀÌ ÇÑ°³ÀÎ ÀÛÀº ¿ÜºÎ ¸ðµâÀ» Ãß°¡Çϴµ¥
- À¯¿ëÇÏ´Ù. ´õ º¹ÀâÇÑ ¸ðµâÀº °³¹ß»ç°¡ Á¦°øÇÑ ¹®¼­¸¦
- Âü°íÇØ¾ß ÇÑ´Ù.</p>
- <note><title>ÁÖÀÇ</title>
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ¸ðµâÀÌ ¾Æ´Ñ DSO ¸ðµâÀ» ¿øÇÑ´Ù¸é
- <a href="apxs.html">apxs</a>¸¦ »ç¿ëÇ϶ó.</note>
- </dd>
-
- <dt><code>--with-mpm=MPM</code></dt>
- <dd>¼­¹öÀÇ µ¿ÀÛ¹æ½ÄÀ» ¼±ÅÃÇÑ´Ù. Á¤È®È÷ ÇÑ°¡Áö <a
- href="../mpm.html">´ÙÁß󸮸ðµâ</a>¸¸À» ¼±ÅÃÇØ¾ß ÇÑ´Ù.
- ¼±ÅÃÇÏÁö ¾ÊÀ¸¸é »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦ÀÇ <a
- href="../mpm.html#defaults">±âº» MPM</a>À» »ç¿ëÇÑ´Ù.
- »ç¿ëÇÒ ¼ö ÀÖ´Â MPM¿¡´Â <module>beos</module>,
- <module>leader</module>, <module>mpmt_os2</module>,
- <module>perchild</module>, <module>prefork</module>,
- <module>threadpool</module>, <module>worker</module>°¡
- ÀÖ´Ù.</dd>
- </dl>
- </section>
-
- <section id="otheroptfeat"><title>±âŸ ¿É¼Ç</title>
- <dl>
- <dt><code>--enable-maintainer-mode</code></dt>
- <dd>µð¹ö±ë ¸ðµå¿Í ÄÄÆÄÀϽà °æ°í¸¦ ÀÛµ¿ÇÑ´Ù.</dd>
-
- <dt><code>--enable-mods-shared=<var>MODULE-LIST</var></code></dt>
- <dd>
- <p>µ¿Àû°øÀ¯¸ðµâ·Î ÄÄÆÄÀÏÇÒ ¸ðµâ ¸ñ·ÏÀ» ÁöÁ¤ÇÑ´Ù. Áï,
- ÀÌ ¸ðµâµéÀº <directive
- module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î Àоîµé¿©¾ß ÇÑ´Ù.</p>
- <p><var>MODULE-LIST</var>´Â °ø¹éÀ¸·Î ±¸ºÐÇÑ ¸ðµâ¸íµéÀ»
- µû¿ÈÇ¥·Î ¹­Àº ¸ñ·ÏÀÌ´Ù. ¸ðµâ¸í¿¡¼­ ¾Õ¿¡
- <code>mod_</code>´Â »«´Ù. ¿¹¸¦ µé¾î:</p>
- <example>
- --enable-mods-shared='headers rewrite dav'
- </example>
- <p>¶Ç, Ưº°ÇÑ Å°¿öµå <code>all</code>°ú <code>most</code>¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,</p>
- <example>
- --enable-mods-shared=most
- </example>
- <p>´Â ´ëºÎºÐÀÇ ¸ðµâÀ» DSO ¸ðµâ·Î ÄÄÆÄÀÏÇÑ´Ù.
- <!-- See <a href="../install/enabledmodules.html">Overview of
- enabled modules</a> for further information. --></p>
- </dd>
-
- <dt><code>--enable-modules=<var>MODULE-LIST</var></code></dt>
- <dd><code>--enable-mods-shared</code>¿Í ºñ½ÁÇÏÁö¸¸,
- ÀÌ ¿É¼ÇÀº ¿­°ÅÇÑ ¸ðµâµéÀ» Á¤ÀûÀ¸·Î ¸µÅ©ÇÑ´Ù. Áï, ÀÌ
- ¸ðµâµéÀº <code>httpd</code> ½ÇÇàÇÏ¸é ¾ðÁ¦³ª »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. <directive
- module="mod_so">LoadModule</directive>·Î ÀоîµéÀÏ
- ÇÊ¿ä°¡ ¾ø´Ù.</dd>
-
- <dt><code>--enable-v4-mapped</code></dt>
- <dd>IPv6 ¼ÒÄÏÀÌ IPv4 ¿¬°áÀ» ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.</dd>
-
- <dt><code>--with-port=<var>PORT</var></code></dt>
- <dd><code>httpd</code>°¡ ±â´Ù¸± Æ÷Æ®¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ
- Æ÷Æ®¹øÈ£´Â ¼³Á¤ÆÄÀÏ <code>httpd.conf</code>¸¦ ¸¸µé¶§
- ¾²ÀδÙ. ±âº»°ªÀº 80ÀÌ´Ù.</dd>
-
- <dt><code>--with-program-name</code></dt>
- <dd>´Ù¸¥ ½ÇÇàÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>httpd</code>ÀÌ´Ù.</dd>
- </dl>
- </section>
- </section>
-
- <section id="packages"><title>Ãß°¡ ÆÐÅ°Áö ¼±ÅÃ</title>
- <p>´ÙÀ½ ¿É¼ÇÀº Ãß°¡ ÆÐÅ°Áö¸¦ ¼±ÅÃÇÑ´Ù.</p>
-
- <section id="generalpackages"><title>ÀϹÝÀûÀÎ ¹®¹ý</title>
- <p>ÀϹÝÀûÀ¸·Î ´ÙÀ½°ú °°Àº ¹®¹ýÀ» »ç¿ëÇÏ¿© Ãß°¡ ÆÐÅ°Áö¸¦
- ´Ù·é´Ù:</p>
-
- <dl>
- <dt><code>--with-<var>PACKAGE</var>[=<var>ARG</var>]</code></dt>
- <dd>ÆÐÅ°Áö <var>PACKAGE</var>¸¦ »ç¿ëÇÑ´Ù.
- <var>ARG</var>ÀÇ ±âº»°ªÀº <code>yes</code>ÀÌ´Ù.</dd>
-
- <dt><code>--without-<var>PACKAGE</var></code></dt>
- <dd>ÆÐÅ°Áö <var>PACKAGE</var>¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
- <code>--with-<var>PACKAGE</var>=no</code>¿Í °°´Ù.
- <code>autoconf</code>¿¡ ÀÌ ¿É¼ÇÀÌ ÀÖÁö¸¸ ¾ÆÆÄÄ¡ À¥¼­¹ö¿Í´Â
- °ü°è°¡ ¾ø´Ù.</dd>
- </dl>
- </section>
-
- <!-- options not known are passed to packasges?
- are there other important options for packages? -->
-
- <section id="packageopt"><title>ƯÁ¤ ÆÐÅ°Áö</title>
- <dl>
- <dt><code>--with-apr=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd><code>httpd</code> ¼Ò½º ¹èÆ÷º»¿¡ Æ÷ÇÔµÈ Apache Portable
- Runtime (APR)Àº ÀÚµ¿À¸·Î À¥¼­¹ö¿Í °°ÀÌ ÄÄÆÄÀϵȴÙ.
- ¸¸¾à ÀÌ¹Ì ¼³Ä¡µÈ APRÀ» ´ë½Å »ç¿ëÇÏ°í ½Í´Ù¸é
- <code>configure</code>¿¡°Ô <code>apr-config</code>
- ½ºÅ©¸³Æ®ÀÇ °æ·Î¸¦ ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. APR°¡ ¼³Ä¡µÈ Àý´ë°æ·Î,
- ÆÄÀϸí, µð·ºÅ丮¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÑ µð·ºÅ丮³ª
- ±× µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮 <code>bin</code>¿¡
- <code>apr-config</code>°¡ ÀÖ¾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--with-apr-util=<var>DIR</var>|<var>FILE</var></code></dt>
- <dd><code>httpd</code> ¼Ò½º ¹èÆ÷º»¿¡ Æ÷ÇÔµÈ Apache Portable
- Runtime Utilities (APU)´Â ÀÚµ¿À¸·Î À¥¼­¹ö¿Í °°ÀÌ
- ÄÄÆÄÀϵȴÙ. ¸¸¾à ÀÌ¹Ì ¼³Ä¡µÈ APUÀ» ´ë½Å »ç¿ëÇÏ°í ½Í´Ù¸é
- <code>configure</code>¿¡°Ô <code>apu-config</code>
- ½ºÅ©¸³Æ®ÀÇ °æ·Î¸¦ ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. APU°¡ ¼³Ä¡µÈ Àý´ë°æ·Î,
- ÆÄÀϸí, µð·ºÅ丮¸íÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÑ µð·ºÅ丮³ª
- ±× µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮 <code>bin</code>¿¡
- <code>apu-config</code>°¡ ÀÖ¾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--with-ssl=<var>DIR</var></code></dt>
- <dd><module>mod_ssl</module>À» »ç¿ëÇÏ´Â °æ¿ì
- <code>configure</code>´Â ¼³Ä¡µÈ OpenSSLÀ» ã´Â´Ù.
- ´ë½Å ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¿© SSL/TLS µµ±¸ÀÇ µð·ºÅ丮°æ·Î¸¦
- ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</dd>
-
- <dt><code>--with-z=<var>DIR</var></code></dt>
- <dd>(<module>mod_deflate</module>¸¦ »ç¿ëÇÏ´Â °æ¿ì¿Í
- °°ÀÌ) ±¸¼º¿¡ ÇÊ¿äÇÏ´Ù¸é ÀÚµ¿À¸·Î <code>configure</code>´Â
- ¼³Ä¡µÈ <code>zlib</code> ¶óÀ̺귯¸®¸¦ ã´Â´Ù. ´ë½Å
- ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¾ÐÃà ¶óÀ̺귯¸®ÀÇ µð·ºÅ丮°æ·Î¸¦
- ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù.</dd>
- </dl>
-
- <p><module>mod_authn_dbm</module>°ú
- <module>mod_rewrite</module>ÀÇ DBM <directive
- module="mod_rewrite">RewriteMap</directive> °°Àº ¾ÆÆÄÄ¡
- À¥¼­¹öÀÇ ÀϺΠ±â´ÉÀº Á¤º¸¸¦ »¡¸® ã±âÀ§ÇØ °£´ÜÇÑ Å°/°ª
- µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÑ´Ù. APU¿¡ SDBMÀÌ µé¾îÀ־ ¾ðÁ¦³ª
- ÃÖ¼ÒÇÑ ÀÌ µ¥ÀÌÅͺ£À̽º´Â »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ Á¾·ùÀÇ
- µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ°í ½Í´Ù¸é ¾Æ·¡ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù:</p>
-
- <dl>
- <dt><code>--with-gdbm[=<var>path</var>]</code></dt>
- <dd><var>path</var>¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é,
- <code>configure</code>´Â ÀϹÝÀûÀÎ °Ë»ö°æ·Î¿¡¼­ ¼³Ä¡µÈ
- GNU DBM Çì´õÆÄÀÏ°ú ¶óÀ̺귯¸®¸¦ ã´Â´Ù. Á÷Á¢
- <var>path</var>¸¦ ÁöÁ¤Çϸé <code>configure</code>´Â
- <code><var>path</var>/lib</code>°ú
- <code><var>path</var>/include</code>¿¡¼­ ÇÊ¿äÇÑ ÆÄÀÏÀ»
- ã´Â´Ù. ¸¶Áö¸·À¸·Î <var>path</var>¿¡ Çì´õÆÄÀÏ °æ·Î¿Í
- ¶óÀ̺귯¸® °æ·Î¸¦ ÄÝ·ÐÀ» »çÀÌ¿¡ µÎ°í °°ÀÌ ÀûÀ» ¼ö
- ÀÖ´Ù.</dd>
-
- <dt><code>--with-ndbm[=<var>path</var>]</code></dt>
- <dd><code>--with-gdbm</code>°ú °°Áö¸¸ ¼³Ä¡µÈ New DBMÀ»
- ã´Â´Ù.</dd>
-
- <dt><code>--with-berkeley-db[=<var>path</var>]</code></dt>
- <dd><code>--with-gdbm</code>°ú °°Áö¸¸ ¼³Ä¡µÈ Berkeley
- DB¸¦ ã´Â´Ù.</dd>
- </dl>
-
- <note><title>ÁÖÀÇ</title>
- <p>DBM ¿É¼ÇÀº APU°¡ Á¦°øÇϸç APU ±¸¼º½ºÅ©¸³Æ®·Î Á÷Á¢
- Àü´ÞµÈ´Ù. ±×·¡¼­ <code>--with-apr-util</code>À» »ç¿ëÇÏ¿©
- ÀÌ¹Ì ¼³Ä¡µÈ APU¸¦ »ç¿ëÇÑ´Ù¸é DBM ¿É¼ÇÀº ¼Ò¿ëÀÌ ¾ø´Ù.</p>
- <p>À¥¼­¹ö´Â ¿©·¯ DBM ±¸ÇöÀ» °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ½ÇÇà½Ã
- ÀûÀýÇÑ DBM Á¾·ù¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</p>
- </note>
- </section>
- </section>
-
- <section id="supportopt"><title>Áö¿ø ÇÁ·Î±×·¥À» À§ÇÑ ¿É¼Ç</title>
- <dl>
- <dt><code>--enable-static-support</code></dt>
- <dd>Áö¿ø ÇÁ·Î±×·¥À» Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ¸¸µç´Ù.
- Áï, ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ¸ðµÎ Æ÷ÇÔÇϵµ·Ï ½ÇÇàÆÄÀÏÀ»
- ÄÄÆÄÀÏÇÑ´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏÁö ¾ÊÀ¸¸é ±âº»°ªÀ¸·Î Áö¿ø
- ÇÁ·Î±×·¥À» µ¿ÀûÀ¸·Î ¸µÅ©ÇÑ´Ù.</dd>
-
- <dt><code>--enable-suexec</code></dt>
- <dd>À¥¼­¹ö°¡ ½ÇÇàÇÏ´Â ÇÁ·Î¼¼½ºÀÇ uid¿Í gid¸¦ ¼³Á¤ÇÏ´Â
- <code><a href="suexec.html">suexec</a></code>¸¦ »ç¿ëÇÏ·Á¸é
- ÀÌ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù. <strong>suid ½ÇÇàÆÄÀÏÀÇ º¸¾È»ó À§ÇèÀ»
- ¸ðµÎ ¾ËÁö ¸øÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» »ç¿ëÇÏÁö ¸¶¶ó.</strong>
- <code>suexec</code>¸¦ ±¸¼ºÇÏ´Â ¿É¼ÇÀº
- <a href="#suexec">¾Æ·¡¿¡¼­</a> ¼³¸íÇÑ´Ù.</dd>
- </dl>
-
- <p>´ÙÀ½ ¿É¼ÇÀ» »ç¿ëÇÏ¿© Áö¿ø ÇÁ·Î±×·¥º°·Î Á¤ÀûÀ¸·Î ¸µÅ©µÈ
- ½ÇÇàÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù:</p>
-
- <dl>
- <dt><code>--enable-static-ab</code></dt>
- <dd><code><a href="ab.html">ab</a></code>¸¦ Á¤ÀûÀ¸·Î ¸µÅ©µÈ
- ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <!-- missing documentation for chechgid -->
- <dt><code>--enable-static-checkgid</code></dt>
- <dd><code>checkgid</code>¸¦ Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î
- ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <!-- missing documentation for htdbm -->
- <dt><code>--enable-static-htdbm</code></dt>
- <dd><code>htdbm</code>À» Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î
- ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-htdigest</code></dt>
- <dd><code><a href="htdigest.html">htdigest</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-htpasswd</code></dt>
- <dd><code><a href="htpasswd.html">htpasswd</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-logresolve</code></dt>
- <dd><code><a href="logresolve.html">logresolve</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
-
- <dt><code>--enable-static-rotatelogs</code></dt>
- <dd><code><a href="rotatelogs.html">rotatelogs</a></code>¸¦
- Á¤ÀûÀ¸·Î ¸µÅ©µÈ ½ÇÇàÆÄÀÏ·Î ÄÄÆÄÀÏÇÑ´Ù.</dd>
- </dl>
-
- <section id="suexec"><title>suexec ¼³Á¤ ¿É¼Ç</title>
- <p>¾Æ·¡ ¿É¼ÇÀº <code><a
- href="../suexec.html">suexec</a></code>¸¦ ÀÚ¼¼È÷ ¼³Á¤ÇÑ´Ù.
- ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="../suexec.html#install">suEXEC
- ±¸¼º°ú ¼³Ä¡</a>¸¦ Âü°íÇ϶ó.</p>
-
- <dl>
- <dt><code>--with-suexec-bin</code></dt>
- <dd>suexec ½ÇÇàÆÄÀÏÀÇ °æ·Î¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>--sbindir</code>ÀÌ´Ù (<a
- href="#directoryfinetuning">¼³Ä¡ µð·ºÅ丮ÀÇ ÀÚ¼¼ÇÑ
- Á¶Á¤</a> Âü°í).</dd>
-
- <dt><code>--with-suexec-caller</code></dt>
- <dd><code>suexec</code>¸¦ ½ÇÇàÇÒ »ç¿ëÀÚ¸¦ ÁöÁ¤ÇÑ´Ù.
- ÀÌ »ç¿ëÀÚ´Â º¸Åë <code>httpd</code>¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿Í
- °°¾Æ¾ß ÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-docroot</code></dt>
- <dd><code>suexec</code>´Â ÀÌ ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ µð·ºÅ丮
- ¾Æ·¡¿¡ ÀÖ´Â ½ÇÇàÆÄÀϸ¸À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº
- <code>--datadir/htdocs</code>´Ù.</dd>
-
- <dt><code>--with-suexec-gidmin</code></dt>
- <dd><code>suexec</code>¿¡¼­ ÁöÁ¤°¡´ÉÇÑ ÃÖ¼Ò GID¸¦ ¼³Á¤ÇÑ´Ù.
- ±âº»°ªÀº 100ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-logfile</code></dt>
- <dd><code>suexec</code> ·Î±×ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù. ·Î±×ÆÄÀϸíÀÇ
- ±âº»°ªÀº <code>suexec_log</code>ÀÌ°í,
- <code>--logfiledir</code>¿¡ À§Ä¡ÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-safepath</code></dt>
- <dd><code>suexec</code>°¡ ½ÃÀÛÇÏ´Â ÇÁ·Î¼¼½ºÀÇ
- <code>PATH</code> ȯ°æº¯¼ö°ªÀ» ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº
- <code>/usr/local/bin:/usr/bin:/bin</code>ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-userdir</code></dt>
- <dd>»ç¿ëÀÚ µð·ºÅ丮¿¡¼­ <code>suexec</code>°¡ Á¢±ÙÇÒ
- ¼ö ÀÖ´Â (½ÇÇàÆÄÀÏÀÌ ÀÖ´Â) ÇÏÀ§µð·ºÅ丮¸¦ ÁöÁ¤ÇÑ´Ù.
- ÀÌ ¼³Á¤Àº <code>suexec</code>¿Í
- (<module>mod_userdir</module>ÀÌ Á¦°øÇÏ´Â) »ç¿ëÀÚº°
- µð·ºÅ丮¸¦ °°ÀÌ »ç¿ëÇÒ¶§ ÇÊ¿äÇÏ´Ù. ±âº»°ªÀº
- <code>public_html</code>ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-uidmin</code></dt>
- <dd><code>suexec</code>¿¡¼­ ÁöÁ¤°¡´ÉÇÑ ÃÖ¼Ò UID¸¦ ¼³Á¤ÇÑ´Ù.
- ±âº»°ªÀº 100ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-umask</code></dt>
- <dd><code>suexec</code>°¡ ½ÇÇàÇÏ´Â ÇÁ·Î¼¼½ºÀÇ
- <code>umask</code>¸¦ ÁöÁ¤ÇÑ´Ù. ±âº»°ªÀº »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ
- ±âº» ¼³Á¤°ú °°´Ù.</dd>
- </dl>
- </section>
- </section>
-</section>
-
-<section id="env"><title>ȯ°æº¯¼ö</title>
- <p><code>configure</code>ÀÇ ¼±ÅÃÀ» ¹«½ÃÇϰųª °ü·Ê¿Í ´Ù¸¥
- À̸§À̳ª À§Ä¡¿¡ ÀÖ´Â ¶óÀ̺귯¸®¿Í ÇÁ·Î±×·¥À» ãµµ·Ï µµ¿ÍÁÖ´Â
- À¯¿ëÇÑ È¯°æº¯¼öµéÀÌ ÀÖ´Ù.</p>
-
- <!-- are these all useful variables? -->
- <dl>
- <dt><code>CC</code></dt>
- <dd>ÄÄÆÄÀÏ¿¡ »ç¿ëÇÒ C ÄÄÆÄÀÏ·¯ ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt><code>CFLAGS</code></dt>
- <dd>ÄÄÆÄÀ϶§ »ç¿ëÇÏ±æ ¹Ù¶ó´Â C ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt><code>CPP</code></dt>
- <dd>»ç¿ëÇÒ C ¼±Ã³¸®±â ¸í·É¾î¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
- <dt><code>CPPFLAGS</code></dt>
- <dd>C/C++ ¼±Ã³¸®±â ¿É¼Ç. ¿¹¸¦ µé¾î, Çì´õÆÄÀÏÀÌ °ü·Ê¿Í ´Þ¸®
- <var>includedir</var> µð·ºÅ丮¿¡ ÀÖ´Ù¸é
- <code>-I<var>includedir</var></code>À» »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>LDFLAGS</code></dt>
- <dd>¸µÄ¿ ¿É¼Ç. ¿¹¸¦ µé¾î, ¶óÀ̺귯¸®°¡ °ü·Ê¿Í ´Þ¸®
- <var>libdir</var> µð·ºÅ丮¿¡ ÀÖ´Ù¸é
- <code>-L<var>libdir</var></code>À» »ç¿ëÇÑ´Ù.</dd>
- </dl>
-</section>
-</manualpage>
diff --git a/docs/manual/programs/configure.xml.meta b/docs/manual/programs/configure.xml.meta
deleted file mode 100644
index 61da38b508..0000000000
--- a/docs/manual/programs/configure.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>configure</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/dbmmanage.html b/docs/manual/programs/dbmmanage.html
deleted file mode 100644
index 443de47d70..0000000000
--- a/docs/manual/programs/dbmmanage.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: dbmmanage.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: dbmmanage.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/dbmmanage.html.en b/docs/manual/programs/dbmmanage.html.en
deleted file mode 100644
index 5e8f8ca6f1..0000000000
--- a/docs/manual/programs/dbmmanage.html.en
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>dbmmanage - Manage user authentication files in DBM format - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>dbmmanage - Manage user authentication files in DBM format</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/dbmmanage.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/dbmmanage.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>dbmmanage</code> is used to create and update the DBM format files
- used to store usernames and password for basic authentication of HTTP users.
- Resources available from the Apache HTTP server can be restricted to just
- the users listed in the files created by <code>dbmmanage</code>. This
- program can only be used when the usernames are stored in a DBM file. To
- use a flat-file database see <a href="htpasswd.html">htpasswd</a>.</p>
-
- <p>This manual page only lists the command line arguments. For details of
- the directives necessary to configure user authentication in
- <a href="httpd.html">httpd</a> see the httpd manual, which is part of
- the Apache distribution or can be found at <a href="http://httpd.apache.org/">http://httpd.apache.org/</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#bugs">Bugs</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li><li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li><li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>dbmmanage</strong> [ <var>encoding</var> ]
- <var>filename</var> add|adduser|check|delete|update
- <var>username</var>
- [ <var>encpasswd</var>
- [ <var>group</var>[,<var>group</var>...]
- [ <var>comment</var> ] ] ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var>
- view [ <var>username</var> ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var> import</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
- <dl>
- <dt><code><var>filename</var></code></dt>
- <dd>The filename of the DBM format file. Usually without the extension
- <code>.db</code>, <code>.pag</code>, or <code>.dir</code>.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>The user for which the operations are performed. The <var>username</var>
- may not contain a colon (<code>:</code>).</dd>
-
- <dt><code><var>encpasswd</var></code></dt>
- <dd>This is the already encrypted password to use for the
- <code>update</code> and <code>add</code> commands. You may use a hyphen
- (<code>-</code>) if you want to get prompted for the password, but fill
- in the fields afterwards. Additionally when using the <code>update</code>
- command, a period (<code>.</code>) keeps the original password
- untouched.</dd>
-
- <dt><code><var>group</var></code></dt>
- <dd>A group, which the user is member of. A groupname may not contain a
- colon (<code>:</code>). You may use a hyphen (<code>-</code>) if you don't
- want to assign the user to a group, but fill in the comment field.
- Additionally when using the <code>update</code> command, a period
- (<code>.</code>) keeps the original groups untouched.</dd>
-
- <dt><code><var>comment</var></code></dt>
- <dd>This is the place for your opaque comments about the user, like
- realname, mailaddress or such things. The server will ignore this
- field.</dd>
- </dl>
-
- <h3><a name="options.encodings" id="options.encodings">Encodings</a></h3>
- <dl>
- <dt><code>-d</code></dt>
- <dd>crypt encryption (default, except on Win32, Netware)</dd>
-
- <dt><code>-m</code></dt>
- <dd>MD5 encryption (default on Win32, Netware)</dd>
-
- <dt><code>-s</code></dt>
- <dd>SHA1 encryption</dd>
-
- <dt><code>-p</code></dt>
- <dd>plaintext (<em>not recommended</em>)</dd>
- </dl>
-
-
- <h3><a name="options.commands" id="options.commands">Commands</a></h3>
- <dl>
- <dt><code>add</code></dt>
- <dd>Adds an entry for <var>username</var> to <var>filename</var> using the
- encrypted password <var>encpasswd</var>.</dd>
-
- <dt><code>adduser</code></dt>
- <dd>Asks for a password and then adds an entry for <var>username</var> to
- <var>filename</var>.</dd>
-
- <dt><code>check</code></dt>
- <dd>Asks for a password and then checks if <var>username</var> is in
- <var>filename</var> and if it's password matches the specified one.</dd>
-
- <dt><code>delete</code></dt>
- <dd>Deletes the <var>username</var> entry from <var>filename</var>.</dd>
-
- <dt><code>import</code></dt>
- <dd>Reads <code><var>username</var>:<var>password</var></code> entries
- (one per line) from <code>STDIN</code> and adds them to
- <var>filename</var>. The passwords already have to be crypted.</dd>
-
- <dt><code>update</code></dt>
- <dd>Same as the <code>adduser</code> command, except that it makes
- sure <var>username</var> already exists in <var>filename</var>.</dd>
-
- <dt><code>view</code></dt>
- <dd>Just displays the contents of the DBM file. If you specify a
- <var>username</var>, it displays the particular record only.</dd>
- </dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="bugs" id="bugs">Bugs</a></h2>
- <p>One should be aware that there are a number of different DBM file formats
- in existence, and with all likelihood, libraries for more than one format
- may exist on your system. The three primary examples are SDBM, NDBM, the GNU
- project's GDBM, and Berkeley DB 2. Unfortunately, all these libraries use
- different file formats, and you must make sure that the file format used
- by <var>filename</var> is the same format that <code>dbmmanage</code>
- expects to see. <code>dbmmanage</code> currently has no way of determining
- what type of DBM file it is looking at. If used against the wrong format,
- will simply return nothing, or may create a different DBM file with a
- different name, or at worst, it may corrupt the DBM file if you were
- attempting to write to it.</p>
-
- <p><code>dbmmanage</code> has a list of DBM format preferences, defined by
- the <code>@AnyDBM::ISA</code> array near the beginning of the program. Since
- we prefer the Berkeley DB 2 file format, the order in which
- <code>dbmmanage</code> will look for system libraries is Berkeley DB 2,
- then NDBM, then GDBM and then SDBM. The first library found will be the
- library <code>dbmmanage</code> will attempt to use for all DBM file
- transactions. This ordering is slightly different than the standard
- <code>@AnyDBM::ISA</code> ordering in Perl, as well as the ordering used by
- the simple <code>dbmopen()</code> call in Perl, so if you use any other
- utilities to manage your DBM files, they must also follow this preference
- ordering. Similar care must be taken if using programs in other languages,
- like C, to access these files.</p>
-
- <p>One can usually use the <code>file</code> program supplied with most
- Unix systems to see what format a DBM file is in.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/dbmmanage.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/dbmmanage.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/dbmmanage.html.ko.euc-kr b/docs/manual/programs/dbmmanage.html.ko.euc-kr
deleted file mode 100644
index fbe151c351..0000000000
--- a/docs/manual/programs/dbmmanage.html.ko.euc-kr
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>dbmmanage - DBM Çü½ÄÀÇ »ç¿ëÀÚÀÎÁõ ÆÄÀÏÀ» °ü¸®ÇÑ´Ù - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>dbmmanage - DBM Çü½ÄÀÇ »ç¿ëÀÚÀÎÁõ ÆÄÀÏÀ» °ü¸®ÇÑ´Ù</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/dbmmanage.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/dbmmanage.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>dbmmanage</code>´Â HTTP basic authentication¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â DBMÇü½ÄÀÇ ÆÄÀÏÀ» ¸¸µé°í
- ¼öÁ¤ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÚ¿øÀ» <code>dbmmanage</code>·Î
- ¸¸µç ÆÄÀÏ¿¡ ±â·ÏÇÑ »ç¿ëÀÚ¿¡°Ô¸¸ º¸¿©ÁÙ ¼ö ÀÖ´Ù. »ç¿ëÀÚ¸íÀÌ
- DBM ÆÄÀÏ¿¡ ±â·ÏµÇÀÖÀ»¶§¸¸ ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ÀϹÝÆÄÀÏÀ» µ¥ÀÌÅͺ£À̽º·Î »ç¿ëÇÏ·Á¸é <a href="htpasswd.html">htpasswd</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p>ÀÌ manpage´Â ¸í·ÉÇà ¿É¼Ç¸¸À» ¼³¸íÇÑ´Ù. <a href="httpd.html">httpd</a>¿¡¼­ »ç¿ëÀÚÀÎÁõÀ» ¼³Á¤ÇÏ´Â Áö½Ã¾î¿¡
- ´ëÇÑ ¼³¸íÀº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖ°í <a href="http://httpd.apache.org">http://httpd.apache.org/</a>¿¡¼­µµ
- º¼ ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦ Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#bugs">¹ö±×</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li><li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li><li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>dbmmanage</strong> [ <var>encoding</var> ]
- <var>filename</var> add|adduser|check|delete|update
- <var>username</var>
- [ <var>encpasswd</var>
- [ <var>group</var>[,<var>group</var>...]
- [ <var>comment</var> ] ] ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var>
- view [ <var>username</var> ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var> import</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
- <dl>
- <dt><code><var>filename</var></code></dt>
- <dd>DBMÇü½Ä ÆÄÀÏÀÇ ÆÄÀϸí. º¸Åë <code>.db</code>,
- <code>.pag</code>, <code>.dir</code> È®ÀåÀÚ¸¦ »«´Ù.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>ÀÛ¾÷ÇÒ »ç¿ëÀÚ¸í. <var>username</var>¿¡ ÄÝ·Ð(<code>:</code>)À»
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code><var>encpasswd</var></code></dt>
- <dd><code>update</code>³ª <code>add</code> ¸í·É¿¡ »ç¿ëÇÒ
- ÀÌ¹Ì ¾ÏȣȭµÈ ¾ÏÈ£ÀÌ´Ù. ¾ÏÈ£¸¦ ³ªÁß¿¡ ÁöÁ¤ÇÏ°í ½ÍÀº °æ¿ì
- »©±â±âÈ£(<code>-</code>)¸¦ »ç¿ëÇÑ´Ù. ¶Ç, <code>update</code>
- ¸í·ÉÀ» »ç¿ëÇÒ¶§ ¸¶Ä§Ç¥(<code>.</code>)¸¦ »ç¿ëÇÏ¸é ¿ø·¡
- ¾ÏÈ£¸¦ ±×´ë·Î µÐ´Ù.</dd>
-
- <dt><code><var>group</var></code></dt>
- <dd>»ç¿ëÀÚ°¡ ¼ÓÇÑ ±×·ì. ±×·ì¸í¿¡ ÄÝ·Ð(<code>:</code>)À»
- »ç¿ëÇÒ ¼ö ¾ø´Ù. »ç¿ëÀÚ¸¦ ±×·ì¿¡ Ãß°¡ÇÏÁö´Â ¾ÊÁö¸¸ ¼³¸í¶õÀ»
- ä¿ì°í ½Í´Ù¸é »©±â±âÈ£(<code>-</code>)¸¦ »ç¿ëÇÑ´Ù. ¶Ç,
- <code>update</code> ¸í·ÉÀ» »ç¿ëÇÒ¶§ ¸¶Ä§Ç¥(<code>.</code>)¸¦
- »ç¿ëÇÑ´Ù¸é ¿ø·¡ ±×·ìÀ» ±×´ë·Î µÐ´Ù.</dd>
-
- <dt><code><var>comment</var></code></dt>
- <dd>½ÇÁ¦ À̸§, ¸ÞÀÏ ÁÖ¼Ò µî »ç¿ëÀÚ¿¡ ´ëÇÑ ¼³¸íÀ» Àû´Â ¶õÀÌ´Ù.
- ¼­¹ö´Â ÀÌ Ç׸ñÀ» ¹«½ÃÇÑ´Ù.</dd>
- </dl>
-
- <h3><a name="options.encodings" id="options.encodings">ÀÎÄÚµù</a></h3>
- <dl>
- <dt><code>-d</code></dt>
- <dd>crypt ¾Ïȣȭ (Win32³ª Netware°¡ ¾Æ´Ï¶ó¸é ±âº»°ª)</dd>
-
- <dt><code>-m</code></dt>
- <dd>MD5 ¾Ïȣȭ (Win32°ú Netware¿¡¼­ ±âº»°ª)</dd>
-
- <dt><code>-s</code></dt>
- <dd>SHA1 ¾Ïȣȭ</dd>
-
- <dt><code>-p</code></dt>
- <dd>¾ÏÈ£¸¦ ±×´ë·Î ±â·Ï (<em>ÃßõÇÏÁö ¾ÊÀ½</em>)</dd>
- </dl>
-
-
- <h3><a name="options.commands" id="options.commands">¸í·É</a></h3>
- <dl>
- <dt><code>add</code></dt>
- <dd>¾ÏȣȭµÈ ¾ÏÈ£ <var>encpasswd</var>¸¦ »ç¿ëÇÏ¿©
- <var>filename</var>¿¡ <var>username</var> Ç׸ñÀ» Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>adduser</code></dt>
- <dd>¾ÏÈ£¸¦ ¹°¾îº¸°í <var>filename</var>¿¡
- <var>username</var> Ç׸ñÀ» Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>check</code></dt>
- <dd>¾ÏÈ£¸¦ ¹°¾îº»ÈÄ <var>filename</var>¿¡
- <var>username</var>ÀÌ ÀÖ°í ¾ÏÈ£°¡ ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇÑ´Ù.</dd>
-
- <dt><code>delete</code></dt>
- <dd><var>filename</var>¿¡¼­ <var>username</var> Ç׸ñÀ»
- »èÁ¦ÇÑ´Ù.</dd>
-
- <dt><code>import</code></dt>
- <dd><code>STDIN</code>¿¡¼­
- <code><var>username</var>:<var>password</var></code> Ç׸ñÀ»
- (ÇÑÁÙ¿¡ Çϳª¾¿) Àо <var>filename</var>¿¡ Ãß°¡ÇÑ´Ù.
- ¾ÏÈ£´Â ÀÌ¹Ì ¾ÏȣȭµÇÀÖ¾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>update</code></dt>
- <dd><code>adduser</code> ¸í·É°ú ºñ½ÁÇÏÁö¸¸,
- <var>filename</var>¿¡ ÀÌ¹Ì <var>username</var>ÀÌ ÀÖ´ÂÁö
- È®ÀÎÇÑ´Ù.</dd>
-
- <dt><code>view</code></dt>
- <dd>DBM ÆÄÀÏ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù. <var>username</var>À»
- ÁöÁ¤Çϸé ƯÁ¤ Ç׸ñ¸¸À» Ãâ·ÂÇÑ´Ù.</dd>
- </dl>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="bugs" id="bugs">¹ö±×</a></h2>
- <p>¿©·¯ ´Ù¸¥ DBM ÆÄÀÏÇü½ÄµéÀÌ ÀÖ°í ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡ ¿©·¯
- Çü½Ä¿¡ ´ëÇÑ ºñ½ÁÇÑ ¶óÀ̺귯¸®µéÀÌ ÀÖÀ½À» ÁÖÀÇÇØ¾ß ÇÑ´Ù.
- °¡Àå ´ëÇ¥ÀûÀÎ ³×°¡Áö°¡ SDBM, NDBM, GNU ÇÁ·ÎÁ§Æ®ÀÇ GDBM,
- Berkeley DB 2ÀÌ´Ù. ºÒÇàÈ÷µµ ÀÌ ¶óÀ̺귯¸®µéÀº ¸ðµÎ ´Ù¸¥
- ÆÄÀÏÇü½ÄÀ» »ç¿ëÇÑ´Ù. ±×·¡¼­ <var>filename</var>ÀÌ »ç¿ëÇÏ´Â
- ÆÄÀÏÇü½ÄÀÌ <code>dbmmanage</code>°¡ ¿øÇÏ´Â Çü½Ä°ú °°ÀºÁö
- È®ÀÎÇØ¾ß ÇÑ´Ù. <code>dbmmanage</code>´Â DBM ÆÄÀÏÀÇ Çü½ÄÀ»
- ¾Ë¾Æ³»Áö ¸øÇÑ´Ù. ´Ù¸¥ Çü½ÄÀ» »ç¿ëÇÏ¸é ¾Æ¹«Àϵµ ÇÏÁö ¾Ê°Å³ª,
- ´Ù¸§ À̸§ÀÇ DBM ÆÄÀÏÀ» ¸¸µé°Å³ª, ÃÖ¾ÇÀÇ °æ¿ì ÆÄÀÏÀ» ±â·ÏÇÏ¿©
- DBM ÆÄÀÏÀ» ¸ÁÄ¥ ¼ö ÀÖ´Ù.</p>
-
- <p><code>dbmmanage</code> ÇÁ·Î±×·¥ ¾ÕºÎºÐ¿¡ ÀÖ´Â
- <code>@AnyDBM::ISA</code> ¹è¿­ÀÌ DBMÇü½Ä ¼±È£¼ø¼­ÀÌ´Ù.
- ¿ì¸®´Â Berkeley DB 2 ÆÄÀÏÇü½ÄÀ» ¼±È£ÇϹǷÎ
- <code>dbmmanage</code>°¡ ½Ã½ºÅÛ ¶óÀ̺귯¸®¸¦ ã´Â ¼ø¼­´Â
- Berkeley DB 2, NDBM, GDBM, SDBM ¼øÀÌ´Ù. <code>dbmmanage</code>´Â
- Á¦ÀÏ ¸ÕÀú ãÀº ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ¸ðµç DBM ÆÄÀÏ ÀÛ¾÷À»
- ÇÑ´Ù. ÀÌ ¼ø¼­´Â PerlÀÇ °£´ÜÇÑ <code>dbmopen()</code> È£ÃâÀÌ
- »ç¿ëÇÏ´Â ¼ø¼­³ª PerlÀÇ Ç¥ÁØ <code>@AnyDBM::ISA</code> ¼ø¼­¿Í
- Á¶±Ý ´Ù¸£´Ù. ±×·¡¼­ ´Ù¸¥ µµ±¸¸¦ »ç¿ëÇÏ¿© DBM ÆÄÀÏÀ» °ü¸®ÇÑ´Ù¸é
- ÀÌ ¼ø¼­¸¦ µû¶ó¾ß ÇÑ´Ù. C¿Í °°ÀÌ ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºÇÑ ÇÁ·Î±×·¥À»
- »ç¿ëÇÏ¿© ÆÄÀÏÀ» ´Ù·ç´Â °æ¿ì¿¡µµ ¸¶Âù°¡Áö´Ù.</p>
-
- <p>´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ <code>file</code> ÇÁ·Î±×·¥À¸·Î
- DBM ÆÄÀÏÇü½ÄÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/dbmmanage.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/dbmmanage.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/dbmmanage.xml b/docs/manual/programs/dbmmanage.xml
deleted file mode 100644
index e13f64a7f3..0000000000
--- a/docs/manual/programs/dbmmanage.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dbmmanage.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>dbmmanage - Manage user authentication files in DBM format</title>
-
-<summary>
- <p><code>dbmmanage</code> is used to create and update the DBM format files
- used to store usernames and password for basic authentication of HTTP users.
- Resources available from the Apache HTTP server can be restricted to just
- the users listed in the files created by <code>dbmmanage</code>. This
- program can only be used when the usernames are stored in a DBM file. To
- use a flat-file database see <a href="htpasswd.html">htpasswd</a>.</p>
-
- <p>This manual page only lists the command line arguments. For details of
- the directives necessary to configure user authentication in
- <a href="httpd.html">httpd</a> see the httpd manual, which is part of
- the Apache distribution or can be found at <a
- href="http://httpd.apache.org/">http://httpd.apache.org/</a>.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-<seealso><module>mod_authn_dbm</module></seealso>
-<seealso><module>mod_authz_dbm</module></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>dbmmanage</strong> [ <var>encoding</var> ]
- <var>filename</var> add|adduser|check|delete|update
- <var>username</var>
- [ <var>encpasswd</var>
- [ <var>group</var>[,<var>group</var>...]
- [ <var>comment</var> ] ] ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var>
- view [ <var>username</var> ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var> import</code></p>
-</section>
-
-<section id="options"><title>Options</title>
- <dl>
- <dt><code><var>filename</var></code></dt>
- <dd>The filename of the DBM format file. Usually without the extension
- <code>.db</code>, <code>.pag</code>, or <code>.dir</code>.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>The user for which the operations are performed. The <var>username</var>
- may not contain a colon (<code>:</code>).</dd>
-
- <dt><code><var>encpasswd</var></code></dt>
- <dd>This is the already encrypted password to use for the
- <code>update</code> and <code>add</code> commands. You may use a hyphen
- (<code>-</code>) if you want to get prompted for the password, but fill
- in the fields afterwards. Additionally when using the <code>update</code>
- command, a period (<code>.</code>) keeps the original password
- untouched.</dd>
-
- <dt><code><var>group</var></code></dt>
- <dd>A group, which the user is member of. A groupname may not contain a
- colon (<code>:</code>). You may use a hyphen (<code>-</code>) if you don't
- want to assign the user to a group, but fill in the comment field.
- Additionally when using the <code>update</code> command, a period
- (<code>.</code>) keeps the original groups untouched.</dd>
-
- <dt><code><var>comment</var></code></dt>
- <dd>This is the place for your opaque comments about the user, like
- realname, mailaddress or such things. The server will ignore this
- field.</dd>
- </dl>
-
- <section id="options.encodings"><title>Encodings</title>
- <dl>
- <dt><code>-d</code></dt>
- <dd>crypt encryption (default, except on Win32, Netware)</dd>
-
- <dt><code>-m</code></dt>
- <dd>MD5 encryption (default on Win32, Netware)</dd>
-
- <dt><code>-s</code></dt>
- <dd>SHA1 encryption</dd>
-
- <dt><code>-p</code></dt>
- <dd>plaintext (<em>not recommended</em>)</dd>
- </dl>
- </section>
-
- <section id="options.commands"><title>Commands</title>
- <dl>
- <dt><code>add</code></dt>
- <dd>Adds an entry for <var>username</var> to <var>filename</var> using the
- encrypted password <var>encpasswd</var>.</dd>
-
- <dt><code>adduser</code></dt>
- <dd>Asks for a password and then adds an entry for <var>username</var> to
- <var>filename</var>.</dd>
-
- <dt><code>check</code></dt>
- <dd>Asks for a password and then checks if <var>username</var> is in
- <var>filename</var> and if it's password matches the specified one.</dd>
-
- <dt><code>delete</code></dt>
- <dd>Deletes the <var>username</var> entry from <var>filename</var>.</dd>
-
- <dt><code>import</code></dt>
- <dd>Reads <code><var>username</var>:<var>password</var></code> entries
- (one per line) from <code>STDIN</code> and adds them to
- <var>filename</var>. The passwords already have to be crypted.</dd>
-
- <dt><code>update</code></dt>
- <dd>Same as the <code>adduser</code> command, except that it makes
- sure <var>username</var> already exists in <var>filename</var>.</dd>
-
- <dt><code>view</code></dt>
- <dd>Just displays the contents of the DBM file. If you specify a
- <var>username</var>, it displays the particular record only.</dd>
- </dl>
- </section>
-</section>
-
-<section id="bugs"><title>Bugs</title>
- <p>One should be aware that there are a number of different DBM file formats
- in existence, and with all likelihood, libraries for more than one format
- may exist on your system. The three primary examples are SDBM, NDBM, the GNU
- project's GDBM, and Berkeley DB 2. Unfortunately, all these libraries use
- different file formats, and you must make sure that the file format used
- by <var>filename</var> is the same format that <code>dbmmanage</code>
- expects to see. <code>dbmmanage</code> currently has no way of determining
- what type of DBM file it is looking at. If used against the wrong format,
- will simply return nothing, or may create a different DBM file with a
- different name, or at worst, it may corrupt the DBM file if you were
- attempting to write to it.</p>
-
- <p><code>dbmmanage</code> has a list of DBM format preferences, defined by
- the <code>@AnyDBM::ISA</code> array near the beginning of the program. Since
- we prefer the Berkeley DB 2 file format, the order in which
- <code>dbmmanage</code> will look for system libraries is Berkeley DB 2,
- then NDBM, then GDBM and then SDBM. The first library found will be the
- library <code>dbmmanage</code> will attempt to use for all DBM file
- transactions. This ordering is slightly different than the standard
- <code>@AnyDBM::ISA</code> ordering in Perl, as well as the ordering used by
- the simple <code>dbmopen()</code> call in Perl, so if you use any other
- utilities to manage your DBM files, they must also follow this preference
- ordering. Similar care must be taken if using programs in other languages,
- like C, to access these files.</p>
-
- <p>One can usually use the <code>file</code> program supplied with most
- Unix systems to see what format a DBM file is in.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/dbmmanage.xml.ko b/docs/manual/programs/dbmmanage.xml.ko
deleted file mode 100644
index 8094b458ca..0000000000
--- a/docs/manual/programs/dbmmanage.xml.ko
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="dbmmanage.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>dbmmanage - DBM Çü½ÄÀÇ »ç¿ëÀÚÀÎÁõ ÆÄÀÏÀ» °ü¸®ÇÑ´Ù</title>
-
-<summary>
- <p><code>dbmmanage</code>´Â HTTP basic authentication¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â DBMÇü½ÄÀÇ ÆÄÀÏÀ» ¸¸µé°í
- ¼öÁ¤ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÚ¿øÀ» <code>dbmmanage</code>·Î
- ¸¸µç ÆÄÀÏ¿¡ ±â·ÏÇÑ »ç¿ëÀÚ¿¡°Ô¸¸ º¸¿©ÁÙ ¼ö ÀÖ´Ù. »ç¿ëÀÚ¸íÀÌ
- DBM ÆÄÀÏ¿¡ ±â·ÏµÇÀÖÀ»¶§¸¸ ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- ÀϹÝÆÄÀÏÀ» µ¥ÀÌÅͺ£À̽º·Î »ç¿ëÇÏ·Á¸é <a
- href="htpasswd.html">htpasswd</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p>ÀÌ manpage´Â ¸í·ÉÇà ¿É¼Ç¸¸À» ¼³¸íÇÑ´Ù. <a
- href="httpd.html">httpd</a>¿¡¼­ »ç¿ëÀÚÀÎÁõÀ» ¼³Á¤ÇÏ´Â Áö½Ã¾î¿¡
- ´ëÇÑ ¼³¸íÀº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖ°í <a
- href="http://httpd.apache.org">http://httpd.apache.org/</a>¿¡¼­µµ
- º¼ ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦ Âü°íÇ϶ó.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-<seealso><module>mod_authn_dbm</module></seealso>
-<seealso><module>mod_authz_dbm</module></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>dbmmanage</strong> [ <var>encoding</var> ]
- <var>filename</var> add|adduser|check|delete|update
- <var>username</var>
- [ <var>encpasswd</var>
- [ <var>group</var>[,<var>group</var>...]
- [ <var>comment</var> ] ] ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var>
- view [ <var>username</var> ]</code></p>
-
- <p><code><strong>dbmmanage</strong> <var>filename</var> import</code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
- <dl>
- <dt><code><var>filename</var></code></dt>
- <dd>DBMÇü½Ä ÆÄÀÏÀÇ ÆÄÀϸí. º¸Åë <code>.db</code>,
- <code>.pag</code>, <code>.dir</code> È®ÀåÀÚ¸¦ »«´Ù.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>ÀÛ¾÷ÇÒ »ç¿ëÀÚ¸í. <var>username</var>¿¡ ÄÝ·Ð(<code>:</code>)À»
- »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code><var>encpasswd</var></code></dt>
- <dd><code>update</code>³ª <code>add</code> ¸í·É¿¡ »ç¿ëÇÒ
- ÀÌ¹Ì ¾ÏȣȭµÈ ¾ÏÈ£ÀÌ´Ù. ¾ÏÈ£¸¦ ³ªÁß¿¡ ÁöÁ¤ÇÏ°í ½ÍÀº °æ¿ì
- »©±â±âÈ£(<code>-</code>)¸¦ »ç¿ëÇÑ´Ù. ¶Ç, <code>update</code>
- ¸í·ÉÀ» »ç¿ëÇÒ¶§ ¸¶Ä§Ç¥(<code>.</code>)¸¦ »ç¿ëÇÏ¸é ¿ø·¡
- ¾ÏÈ£¸¦ ±×´ë·Î µÐ´Ù.</dd>
-
- <dt><code><var>group</var></code></dt>
- <dd>»ç¿ëÀÚ°¡ ¼ÓÇÑ ±×·ì. ±×·ì¸í¿¡ ÄÝ·Ð(<code>:</code>)À»
- »ç¿ëÇÒ ¼ö ¾ø´Ù. »ç¿ëÀÚ¸¦ ±×·ì¿¡ Ãß°¡ÇÏÁö´Â ¾ÊÁö¸¸ ¼³¸í¶õÀ»
- ä¿ì°í ½Í´Ù¸é »©±â±âÈ£(<code>-</code>)¸¦ »ç¿ëÇÑ´Ù. ¶Ç,
- <code>update</code> ¸í·ÉÀ» »ç¿ëÇÒ¶§ ¸¶Ä§Ç¥(<code>.</code>)¸¦
- »ç¿ëÇÑ´Ù¸é ¿ø·¡ ±×·ìÀ» ±×´ë·Î µÐ´Ù.</dd>
-
- <dt><code><var>comment</var></code></dt>
- <dd>½ÇÁ¦ À̸§, ¸ÞÀÏ ÁÖ¼Ò µî »ç¿ëÀÚ¿¡ ´ëÇÑ ¼³¸íÀ» Àû´Â ¶õÀÌ´Ù.
- ¼­¹ö´Â ÀÌ Ç׸ñÀ» ¹«½ÃÇÑ´Ù.</dd>
- </dl>
-
- <section id="options.encodings"><title>ÀÎÄÚµù</title>
- <dl>
- <dt><code>-d</code></dt>
- <dd>crypt ¾Ïȣȭ (Win32³ª Netware°¡ ¾Æ´Ï¶ó¸é ±âº»°ª)</dd>
-
- <dt><code>-m</code></dt>
- <dd>MD5 ¾Ïȣȭ (Win32°ú Netware¿¡¼­ ±âº»°ª)</dd>
-
- <dt><code>-s</code></dt>
- <dd>SHA1 ¾Ïȣȭ</dd>
-
- <dt><code>-p</code></dt>
- <dd>¾ÏÈ£¸¦ ±×´ë·Î ±â·Ï (<em>ÃßõÇÏÁö ¾ÊÀ½</em>)</dd>
- </dl>
- </section>
-
- <section id="options.commands"><title>¸í·É</title>
- <dl>
- <dt><code>add</code></dt>
- <dd>¾ÏȣȭµÈ ¾ÏÈ£ <var>encpasswd</var>¸¦ »ç¿ëÇÏ¿©
- <var>filename</var>¿¡ <var>username</var> Ç׸ñÀ» Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>adduser</code></dt>
- <dd>¾ÏÈ£¸¦ ¹°¾îº¸°í <var>filename</var>¿¡
- <var>username</var> Ç׸ñÀ» Ãß°¡ÇÑ´Ù.</dd>
-
- <dt><code>check</code></dt>
- <dd>¾ÏÈ£¸¦ ¹°¾îº»ÈÄ <var>filename</var>¿¡
- <var>username</var>ÀÌ ÀÖ°í ¾ÏÈ£°¡ ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇÑ´Ù.</dd>
-
- <dt><code>delete</code></dt>
- <dd><var>filename</var>¿¡¼­ <var>username</var> Ç׸ñÀ»
- »èÁ¦ÇÑ´Ù.</dd>
-
- <dt><code>import</code></dt>
- <dd><code>STDIN</code>¿¡¼­
- <code><var>username</var>:<var>password</var></code> Ç׸ñÀ»
- (ÇÑÁÙ¿¡ Çϳª¾¿) Àо <var>filename</var>¿¡ Ãß°¡ÇÑ´Ù.
- ¾ÏÈ£´Â ÀÌ¹Ì ¾ÏȣȭµÇÀÖ¾î¾ß ÇÑ´Ù.</dd>
-
- <dt><code>update</code></dt>
- <dd><code>adduser</code> ¸í·É°ú ºñ½ÁÇÏÁö¸¸,
- <var>filename</var>¿¡ ÀÌ¹Ì <var>username</var>ÀÌ ÀÖ´ÂÁö
- È®ÀÎÇÑ´Ù.</dd>
-
- <dt><code>view</code></dt>
- <dd>DBM ÆÄÀÏ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù. <var>username</var>À»
- ÁöÁ¤Çϸé ƯÁ¤ Ç׸ñ¸¸À» Ãâ·ÂÇÑ´Ù.</dd>
- </dl>
- </section>
-</section>
-
-<section id="bugs"><title>¹ö±×</title>
- <p>¿©·¯ ´Ù¸¥ DBM ÆÄÀÏÇü½ÄµéÀÌ ÀÖ°í ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡ ¿©·¯
- Çü½Ä¿¡ ´ëÇÑ ºñ½ÁÇÑ ¶óÀ̺귯¸®µéÀÌ ÀÖÀ½À» ÁÖÀÇÇØ¾ß ÇÑ´Ù.
- °¡Àå ´ëÇ¥ÀûÀÎ ³×°¡Áö°¡ SDBM, NDBM, GNU ÇÁ·ÎÁ§Æ®ÀÇ GDBM,
- Berkeley DB 2ÀÌ´Ù. ºÒÇàÈ÷µµ ÀÌ ¶óÀ̺귯¸®µéÀº ¸ðµÎ ´Ù¸¥
- ÆÄÀÏÇü½ÄÀ» »ç¿ëÇÑ´Ù. ±×·¡¼­ <var>filename</var>ÀÌ »ç¿ëÇÏ´Â
- ÆÄÀÏÇü½ÄÀÌ <code>dbmmanage</code>°¡ ¿øÇÏ´Â Çü½Ä°ú °°ÀºÁö
- È®ÀÎÇØ¾ß ÇÑ´Ù. <code>dbmmanage</code>´Â DBM ÆÄÀÏÀÇ Çü½ÄÀ»
- ¾Ë¾Æ³»Áö ¸øÇÑ´Ù. ´Ù¸¥ Çü½ÄÀ» »ç¿ëÇÏ¸é ¾Æ¹«Àϵµ ÇÏÁö ¾Ê°Å³ª,
- ´Ù¸§ À̸§ÀÇ DBM ÆÄÀÏÀ» ¸¸µé°Å³ª, ÃÖ¾ÇÀÇ °æ¿ì ÆÄÀÏÀ» ±â·ÏÇÏ¿©
- DBM ÆÄÀÏÀ» ¸ÁÄ¥ ¼ö ÀÖ´Ù.</p>
-
- <p><code>dbmmanage</code> ÇÁ·Î±×·¥ ¾ÕºÎºÐ¿¡ ÀÖ´Â
- <code>@AnyDBM::ISA</code> ¹è¿­ÀÌ DBMÇü½Ä ¼±È£¼ø¼­ÀÌ´Ù.
- ¿ì¸®´Â Berkeley DB 2 ÆÄÀÏÇü½ÄÀ» ¼±È£ÇϹǷÎ
- <code>dbmmanage</code>°¡ ½Ã½ºÅÛ ¶óÀ̺귯¸®¸¦ ã´Â ¼ø¼­´Â
- Berkeley DB 2, NDBM, GDBM, SDBM ¼øÀÌ´Ù. <code>dbmmanage</code>´Â
- Á¦ÀÏ ¸ÕÀú ãÀº ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ¸ðµç DBM ÆÄÀÏ ÀÛ¾÷À»
- ÇÑ´Ù. ÀÌ ¼ø¼­´Â PerlÀÇ °£´ÜÇÑ <code>dbmopen()</code> È£ÃâÀÌ
- »ç¿ëÇÏ´Â ¼ø¼­³ª PerlÀÇ Ç¥ÁØ <code>@AnyDBM::ISA</code> ¼ø¼­¿Í
- Á¶±Ý ´Ù¸£´Ù. ±×·¡¼­ ´Ù¸¥ µµ±¸¸¦ »ç¿ëÇÏ¿© DBM ÆÄÀÏÀ» °ü¸®ÇÑ´Ù¸é
- ÀÌ ¼ø¼­¸¦ µû¶ó¾ß ÇÑ´Ù. C¿Í °°ÀÌ ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºÇÑ ÇÁ·Î±×·¥À»
- »ç¿ëÇÏ¿© ÆÄÀÏÀ» ´Ù·ç´Â °æ¿ì¿¡µµ ¸¶Âù°¡Áö´Ù.</p>
-
- <p>´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ <code>file</code> ÇÁ·Î±×·¥À¸·Î
- DBM ÆÄÀÏÇü½ÄÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/dbmmanage.xml.meta b/docs/manual/programs/dbmmanage.xml.meta
deleted file mode 100644
index 6b981e449c..0000000000
--- a/docs/manual/programs/dbmmanage.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>dbmmanage</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/htdigest.html b/docs/manual/programs/htdigest.html
deleted file mode 100644
index bb29be39ca..0000000000
--- a/docs/manual/programs/htdigest.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: htdigest.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: htdigest.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/htdigest.html.en b/docs/manual/programs/htdigest.html.en
deleted file mode 100644
index 0c448c6318..0000000000
--- a/docs/manual/programs/htdigest.html.en
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>htdigest - manage user files for digest authentication - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>htdigest - manage user files for digest authentication</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/htdigest.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htdigest.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>htdigest</code> is used to create and update the flat-files used
- to store usernames, realm and password for digest authentication of HTTP
- users. Resources available from the Apache HTTP server can be restricted
- to just the users listed in the files created by <code>htdigest</code>.</p>
-
- <p>This manual page only lists the command line arguments. For details of
- the directives necessary to configure digest authentication in
- <a href="httpd.html">httpd</a> see the Apache manual, which is part
- of the Apache distribution or can be found at
- <a href="http://httpd.apache.org/">http://httpd.apache.org/</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li><li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>htdigest</strong> [ -<strong>c</strong> ]
- <var>passwdfile</var> <var>realm</var> <var>username</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
- <dl>
- <dt><code>-c</code></dt>
- <dd>Create the <var>passwdfile</var>. If <var>passwdfile</var> already
- exists, it is deleted first.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>Name of the file to contain the username, realm and password. If
- <code>-c</code> is given, this file is created if it does not already
- exist, or deleted and recreated if it does exist.</dd>
-
- <dt><code><var>realm</var></code></dt>
- <dd>The realm name to which the user name belongs.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>The user name to create or update in <var>passwdfile</var>. If
- <var>username</var> does not exist is this file, an entry is added. If it
- does exist, the password is changed.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/htdigest.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htdigest.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/htdigest.html.ko.euc-kr b/docs/manual/programs/htdigest.html.ko.euc-kr
deleted file mode 100644
index 495aa9b419..0000000000
--- a/docs/manual/programs/htdigest.html.ko.euc-kr
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>htdigest - digest authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚÆÄÀÏÀ»
-°ü¸®ÇÑ´Ù - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>htdigest - digest authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚÆÄÀÏÀ»
-°ü¸®ÇÑ´Ù</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/htdigest.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htdigest.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>htdigest</code>´Â HTTP »ç¿ëÀÚÀÇ digest authentication¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ¸í, ¿µ¿ª, ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÀϹÝÆÄÀÏÀ» ¸¸µé°í
- ¼öÁ¤ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÚ¿øÀ» <code>htdigest</code>·Î
- ¸¸µç ÆÄÀÏ¿¡ ±â·ÏÇÑ »ç¿ëÀÚ¿¡°Ô¸¸ º¸¿©ÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ manpage´Â ¸í·ÉÇà ¿É¼Ç¸¸À» ¼³¸íÇÑ´Ù. <a href="httpd.html">httpd</a>¿¡¼­ digest authenticationÀ»
- ¼³Á¤ÇÏ´Â Áö½Ã¾î¿¡ ´ëÇÑ ¼³¸íÀº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖ°í
- <a href="http://httpd.apache.org">http://httpd.apache.org/</a>¿¡¼­µµ
- º¼ ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦ Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li><li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>htdigest</strong> [ -<strong>c</strong> ]
- <var>passwdfile</var> <var>realm</var> <var>username</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
- <dl>
- <dt><code>-c</code></dt>
- <dd><var>passwdfile</var>À» ¸¸µç´Ù. <var>passwdfile</var>ÀÌ
- ÀÌ¹Ì ÀÖ´Ù¸é ¸ÕÀú Áö¿ì°í ¸¸µç´Ù.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>»ç¿ëÀÚ¸í, ¿µ¿ª, ¾ÏÈ£¸¦ ÀúÀåÇÒ ÆÄÀϸí. <code>-c</code>¸¦
- °°ÀÌ »ç¿ëÇÑ °æ¿ì ÆÄÀÏÀÌ ¾ø´Ù¸é ¸¸µé°í, ÀÖ´Ù¸é ÆÄÀÏÀ» Áö¿ì°í
- ´Ù½Ã ¸¸µç´Ù.</dd>
-
- <dt><code><var>realm</var></code></dt>
- <dd>»ç¿ëÀÚ¸íÀÌ ¼ÓÇÑ ¿µ¿ªÀ̸§.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd><var>passwdfile</var>¿¡ ¸¸µé°Å³ª ¼öÁ¤ÇÒ »ç¿ëÀÚ¸í. ÆÄÀÏ¿¡
- <var>username</var>ÀÌ ¾ø´Ù¸é Ç׸ñÀ» Ãß°¡ÇÑ´Ù. ÀÖ´Ù¸é ¾ÏÈ£¸¦
- ¼öÁ¤ÇÑ´Ù.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/htdigest.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htdigest.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/htdigest.xml b/docs/manual/programs/htdigest.xml
deleted file mode 100644
index 9263c8305d..0000000000
--- a/docs/manual/programs/htdigest.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htdigest.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>htdigest - manage user files for digest authentication</title>
-
-<summary>
- <p><code>htdigest</code> is used to create and update the flat-files used
- to store usernames, realm and password for digest authentication of HTTP
- users. Resources available from the Apache HTTP server can be restricted
- to just the users listed in the files created by <code>htdigest</code>.</p>
-
- <p>This manual page only lists the command line arguments. For details of
- the directives necessary to configure digest authentication in
- <a href="httpd.html">httpd</a> see the Apache manual, which is part
- of the Apache distribution or can be found at
- <a href="http://httpd.apache.org/">http://httpd.apache.org/</a>.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-<seealso><module>mod_auth_digest</module></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>htdigest</strong> [ -<strong>c</strong> ]
- <var>passwdfile</var> <var>realm</var> <var>username</var></code></p>
-</section>
-
-<section id="options"><title>Options</title>
- <dl>
- <dt><code>-c</code></dt>
- <dd>Create the <var>passwdfile</var>. If <var>passwdfile</var> already
- exists, it is deleted first.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>Name of the file to contain the username, realm and password. If
- <code>-c</code> is given, this file is created if it does not already
- exist, or deleted and recreated if it does exist.</dd>
-
- <dt><code><var>realm</var></code></dt>
- <dd>The realm name to which the user name belongs.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>The user name to create or update in <var>passwdfile</var>. If
- <var>username</var> does not exist is this file, an entry is added. If it
- does exist, the password is changed.</dd>
- </dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/htdigest.xml.ko b/docs/manual/programs/htdigest.xml.ko
deleted file mode 100644
index df0b4186ec..0000000000
--- a/docs/manual/programs/htdigest.xml.ko
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htdigest.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>htdigest - digest authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚÆÄÀÏÀ»
-°ü¸®ÇÑ´Ù</title>
-
-<summary>
- <p><code>htdigest</code>´Â HTTP »ç¿ëÀÚÀÇ digest authentication¿¡
- »ç¿ëÇÒ »ç¿ëÀÚ¸í, ¿µ¿ª, ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÀϹÝÆÄÀÏÀ» ¸¸µé°í
- ¼öÁ¤ÇÑ´Ù. ¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÚ¿øÀ» <code>htdigest</code>·Î
- ¸¸µç ÆÄÀÏ¿¡ ±â·ÏÇÑ »ç¿ëÀÚ¿¡°Ô¸¸ º¸¿©ÁÙ ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ manpage´Â ¸í·ÉÇà ¿É¼Ç¸¸À» ¼³¸íÇÑ´Ù. <a
- href="httpd.html">httpd</a>¿¡¼­ digest authenticationÀ»
- ¼³Á¤ÇÏ´Â Áö½Ã¾î¿¡ ´ëÇÑ ¼³¸íÀº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖ°í
- <a href="http://httpd.apache.org">http://httpd.apache.org/</a>¿¡¼­µµ
- º¼ ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦ Âü°íÇ϶ó.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-<seealso><module>mod_auth_digest</module></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>htdigest</strong> [ -<strong>c</strong> ]
- <var>passwdfile</var> <var>realm</var> <var>username</var></code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
- <dl>
- <dt><code>-c</code></dt>
- <dd><var>passwdfile</var>À» ¸¸µç´Ù. <var>passwdfile</var>ÀÌ
- ÀÌ¹Ì ÀÖ´Ù¸é ¸ÕÀú Áö¿ì°í ¸¸µç´Ù.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>»ç¿ëÀÚ¸í, ¿µ¿ª, ¾ÏÈ£¸¦ ÀúÀåÇÒ ÆÄÀϸí. <code>-c</code>¸¦
- °°ÀÌ »ç¿ëÇÑ °æ¿ì ÆÄÀÏÀÌ ¾ø´Ù¸é ¸¸µé°í, ÀÖ´Ù¸é ÆÄÀÏÀ» Áö¿ì°í
- ´Ù½Ã ¸¸µç´Ù.</dd>
-
- <dt><code><var>realm</var></code></dt>
- <dd>»ç¿ëÀÚ¸íÀÌ ¼ÓÇÑ ¿µ¿ªÀ̸§.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd><var>passwdfile</var>¿¡ ¸¸µé°Å³ª ¼öÁ¤ÇÒ »ç¿ëÀÚ¸í. ÆÄÀÏ¿¡
- <var>username</var>ÀÌ ¾ø´Ù¸é Ç׸ñÀ» Ãß°¡ÇÑ´Ù. ÀÖ´Ù¸é ¾ÏÈ£¸¦
- ¼öÁ¤ÇÑ´Ù.</dd>
- </dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/htdigest.xml.meta b/docs/manual/programs/htdigest.xml.meta
deleted file mode 100644
index b13e6d0941..0000000000
--- a/docs/manual/programs/htdigest.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>htdigest</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/htpasswd.html b/docs/manual/programs/htpasswd.html
deleted file mode 100644
index 5462afe3c6..0000000000
--- a/docs/manual/programs/htpasswd.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: htpasswd.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: htpasswd.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/htpasswd.html.en b/docs/manual/programs/htpasswd.html.en
deleted file mode 100644
index 0bebb26195..0000000000
--- a/docs/manual/programs/htpasswd.html.en
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>htpasswd - Manage user files for basic authentication - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>htpasswd - Manage user files for basic authentication</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/htpasswd.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htpasswd.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>htpasswd</code> is used to create and update the flat-files used to
- store usernames and password for basic authentication of HTTP users. If
- <code>htpasswd</code> cannot access a file, such as not being able to write
- to the output file or not being able to read the file in order to update it,
- it returns an error status and makes no changes.</p>
-
- <p>Resources available from the Apache HTTP server can be restricted to
- just the users listed in the files created by <code>htpasswd</code>. This
- program can only manage usernames and passwords stored in a flat-file. It
- can encrypt and display password information for use in other types of data
- stores, though. To use a DBM database see <a href="dbmmanage.html">dbmmanage</a>.</p>
-
- <p><code>htpasswd</code> encrypts passwords using either a version of MD5
- modified for Apache, or the system's <code>crypt()</code> routine. Files
- managed by <code>htpasswd</code> may contain both types of passwords; some
- user records may have MD5-encrypted passwords while others in the same file
- may have passwords encrypted with <code>crypt()</code>.</p>
-
- <p>This manual page only lists the command line arguments. For details of
- the directives necessary to configure user authentication in
- <a href="httpd.html">httpd</a> see the Apache manual, which is part of the
- Apache distribution or can be found at <a href="http://httpd.apache.org">http://httpd.apache.org/</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#exit">Exit Status</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">Security Considerations</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#restrictions">Restrictions</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li><li>The scripts in support/SHA1 which come with the
-distribution.</li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>htpasswd</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>b</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>p</strong> |
- -<strong>s</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var>
- <var>password</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>n</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>nb</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var> <var>password</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
- <dl>
- <dt><code>-b</code></dt>
- <dd>Use batch mode; <em>i.e.</em>, get the password from the command line
- rather than prompting for it. This option should be used with extreme care,
- since <strong>the password is clearly visible</strong> on the command
- line.</dd>
-
- <dt><code>-c</code></dt>
- <dd>Create the <var>passwdfile</var>. If <var>passwdfile</var> already
- exists, it is rewritten and truncated. This option cannot be combined with
- the <code>-n</code> option.</dd>
-
- <dt><code>-n</code></dt>
- <dd>Display the results on standard output rather than updating a file.
- This is useful for generating password records acceptable to Apache for
- inclusion in non-text data stores. This option changes the syntax of the
- command line, since the <var>passwdfile</var> argument (usually the first
- one) is omitted. It cannot be combined with the <code>-c</code> option.</dd>
-
- <dt><code>-m</code></dt>
- <dd>Use MD5 encryption for passwords. On Windows, Netware and TPF, this is
- the default.</dd>
-
- <dt><code>-d</code></dt>
- <dd>Use <code>crypt()</code> encryption for passwords. The default on all
- platforms but Windows, Netware and TPF. Though possibly supported by
- <code>htpasswd</code> on all platforms, it is not supported by the
- <a href="httpd.html">httpd</a> server on Windows, Netware and TPF.</dd>
-
- <dt><code>-s</code></dt>
- <dd>Use SHA encryption for passwords. Facilitates migration from/to Netscape
- servers using the LDAP Directory Interchange Format (ldif).</dd>
-
- <dt><code>-p</code></dt>
- <dd>Use plaintext passwords. Though <code>htpasswd</code> will support
- creation on all platforms, the <a href="httpd.html">httpd</a> daemon will
- only accept plain text passwords on Windows, Netware and TPF.</dd>
-
- <dt><code>-D</code></dt>
- <dd>Delete user. If the username exists in the specified htpasswd file, it
- will be deleted.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>Name of the file to contain the user name and password. If
- <code>-c</code> is given, this file is created if it does not already exist,
- or rewritten and truncated if it does exist.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>The username to create or update in <var>passwdfile</var>. If
- <var>username</var> does not exist in this file, an entry is added. If it
- does exist, the password is changed.</dd>
-
- <dt><code><var>password</var></code></dt>
- <dd>The plaintext password to be encrypted and stored in the file. Only
- used with the <code>-b</code> flag.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exit" id="exit">Exit Status</a></h2>
- <p><code>htpasswd</code> returns a zero status ("true") if the username and
- password have been successfully added or updated in the
- <var>passwdfile</var>. <code>htpasswd</code> returns <code>1</code> if it
- encounters some problem accessing files, <code>2</code> if there was a
- syntax problem with the command line, <code>3</code> if the password was
- entered interactively and the verification entry didn't match,
- <code>4</code> if its operation was interrupted, <code>5</code> if a value
- is too long (username, filename, password, or final computed record),
- <code>6</code> if the username contains illegal characters (see the
- <a href="#restrictions">Restrictions section</a>), and <code>7</code>
- if the file is not a valid password file.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Examples</a></h2>
- <div class="example"><p><code>
- htpasswd /usr/local/etc/apache/.htpasswd-users jsmith
- </code></p></div>
-
- <p>Adds or modifies the password for user <code>jsmith</code>. The user
- is prompted for the password. If executed on a Windows system, the password
- will be encrypted using the modified Apache MD5 algorithm; otherwise, the
- system's <code>crypt()</code> routine will be used. If the file does not
- exist, <code>htpasswd</code> will do nothing except return an error.</p>
-
- <div class="example"><p><code>
- htpasswd -c /home/doe/public_html/.htpasswd jane
- </code></p></div>
-
- <p>Creates a new file and stores a record in it for user <code>jane</code>.
- The user is prompted for the password. If the file exists and cannot be
- read, or cannot be written, it is not altered and <code>htpasswd</code>
- will display a message and return an error status.</p>
-
- <div class="example"><p><code>
- htpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve
- </code></p></div>
-
- <p>Encrypts the password from the command line (<code>Pwd4Steve</code>)
- using the MD5 algorithm, and stores it in the specified file.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">Security Considerations</a></h2>
- <p>Web password files such as those managed by <code>htpasswd</code> should
- <em>not</em> be within the Web server's URI space -- that is, they should
- not be fetchable with a browser.</p>
-
- <p>The use of the <code>-b</code> option is discouraged, since when it is
- used the unencrypted password appears on the command line.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="restrictions" id="restrictions">Restrictions</a></h2>
- <p>On the Windows and MPE platforms, passwords encrypted with
- <code>htpasswd</code> are limited to no more than <code>255</code>
- characters in length. Longer passwords will be truncated to 255
- characters.</p>
-
- <p>The MD5 algorithm used by <code>htpasswd</code> is specific to the Apache
- software; passwords encrypted using it will not be usable with other Web
- servers.</p>
-
- <p>Usernames are limited to <code>255</code> bytes and may not include the
- character <code>:</code>.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/htpasswd.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htpasswd.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/htpasswd.html.ko.euc-kr b/docs/manual/programs/htpasswd.html.ko.euc-kr
deleted file mode 100644
index 2b82d4ab74..0000000000
--- a/docs/manual/programs/htpasswd.html.ko.euc-kr
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>htpasswd - basic authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚÆÄÀÏÀ»
- °ü¸®ÇÑ´Ù - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>htpasswd - basic authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚÆÄÀÏÀ»
- °ü¸®ÇÑ´Ù</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/htpasswd.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htpasswd.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>htpasswd</code>´Â HTTP basic authentication¿¡ »ç¿ëÇÒ
- »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÀϹÝÆÄÀÏÀ» »ý¼ºÇÏ°í ¼öÁ¤ÇÑ´Ù.
- <code>htpasswd</code>°¡ ÆÄÀÏÀ» ¾²°Å³ª ÀÐÀ» ¼ö ¾ø´Ù¸é,
- ¿À·ù»óŸ¦ ¹ÝȯÇÏ°í ¾Æ¹«°Íµµ ¼öÁ¤ÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÚ¿øÀ» <code>htpasswd</code>·Î ¸¸µç ÆÄÀÏ¿¡
- ±â·ÏÇÑ »ç¿ëÀÚ¿¡°Ô¸¸ º¸¿©ÁÙ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº »ç¿ëÀÚ¸í°ú
- ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÀÏ¹Ý ÆÄÀÏÀ» °ü¸®ÇÑ´Ù. ±×·¯³ª ´Ù¸¥ ÀÚ·áÀúÀå
- ¹æ½ÄÀ» À§ÇØ ¾ÏÈ£ Á¤º¸¸¦ ¾ÏȣȭÇÏ¿© ÀúÀåÇÒ ¼ö ÀÖ´Ù. DBM
- µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ·Á¸é <a href="dbmmanage.html">dbmmanage</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p><code>htpasswd</code>´Â ¾ÆÆÄÄ¡ ƯÀ¯ÀÇ MD5 ȤÀº ½Ã½ºÅÛÀÇ
- <code>crypt()</code>¸¦ »ç¿ëÇÏ¿© ¾ÏÈ£¸¦ ¾ÏȣȭÇÑ´Ù.
- <code>htpasswd</code>°¡ °ü¸®ÇÏ´Â ÆÄÀÏÀº µÎ Á¾·ùÀÇ ¾ÏÈ£¸¦
- ¸ðµÎ ÀúÀåÇÒ ¼ö ÀÖ´Ù. Áï, °°Àº ÆÄÀÏ¿¡ MD5·Î ¾ÏȣȭÇÑ ¾ÏÈ£¸¦
- »ç¿ëÇÏ´Â »ç¿ëÀÚ¿Í <code>crypt()</code>·Î ¾ÏȣȭÇÑ ¾ÏÈ£¸¦
- »ç¿ëÇÏ´Â »ç¿ëÀÚ Á¤º¸ ¸ðµÎ ³ª¿Ã ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ manpage´Â ¸í·ÉÇà ¿É¼Ç¸¸À» ¼³¸íÇÑ´Ù. <a href="httpd.html">httpd</a>¿¡¼­ »ç¿ëÀÚÀÎÁõÀ» ¼³Á¤ÇÏ´Â Áö½Ã¾î¿¡
- ´ëÇÑ ¼³¸íÀº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖ°í <a href="http://httpd.apache.org">http://httpd.apache.org/</a>¿¡¼­µµ
- º¼ ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦ Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#exit">Á¾·áÄÚµå</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#examples">¿¹Á¦</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#security">º¸¾È»ó °í·ÁÇÒ Á¡</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#restrictions">Á¦ÇÑ</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="httpd.html">httpd</a></li><li>¹èÆ÷º»¿¡´Â SHA1À» Áö¿øÇÏ´Â ½ºÅ©¸³Æ®µµ ÀÖ´Ù.</li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>htpasswd</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>b</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>p</strong> |
- -<strong>s</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var>
- <var>password</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>n</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>nb</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var> <var>password</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
- <dl>
- <dt><code>-b</code></dt>
- <dd>¹èÄ¡(batch) ¸ðµå¸¦ »ç¿ëÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>, ¾ÏÈ£¸¦
- ¹°¾îº¸Áö¾Ê°í ¸í·ÉÇà¿¡¼­ ¹Þ´Â´Ù. ¸í·ÉÇà¿¡ <strong>¾ÏÈ£°¡
- Á÷Á¢ µå·¯³ª¹Ç·Î</strong>, ÀÌ ¿É¼ÇÀº ¸Å¿ì Á¶½ÉÇؼ­ »ç¿ëÇؾß
- ÇÑ´Ù.</dd>
-
- <dt><code>-c</code></dt>
- <dd><var>passwdfile</var>À» ¸¸µç´Ù. <var>passwdfile</var>ÀÌ
- ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é, µ¤¾î¾´´Ù. ÀÌ ¿É¼ÇÀ» <code>-n</code> ¿É¼Ç°ú
- °°ÀÌ »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code>-n</code></dt>
- <dd>ÆÄÀÏÀ» ¼öÁ¤ÇÏÁö¾Ê°í °á°ú¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î Ãâ·ÂÇÑ´Ù.
- ¾ÆÆÄÄ¡°¡ ¹®¼­ÀÌ¿ÜÀÇ °÷¿¡ »ý¼ºÇÑ ¾ÏÈ£¸¦ ÀúÀåÇÒ¶§ À¯¿ëÇÏ´Ù.
- (Ç×»ó ù¹ø° ¾Æ±Ô¸ÕÆ®ÀÎ) <var>passwdfile</var> ¾Æ±Ô¸ÕÆ®°¡
- ¾ø±â¶§¹®¿¡ ¸í·ÉÇà ¹®¹ýÀÌ ´Ù¸£´Ù. <code>-c</code> ¿É¼Ç°ú
- °°ÀÌ »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code>-m</code></dt>
- <dd>MD5¸¦ »ç¿ëÇÏ¿© ¾ÏÈ£¸¦ ¾ÏȣȭÇÑ´Ù. Windows, Netware,
- TPF¿¡¼­ ±âº»°ªÀÌ´Ù.</dd>
-
- <dt><code>-d</code></dt>
- <dd><code>crypt()</code>¸¦ »ç¿ëÇÏ¿© ¾ÏÈ£¸¦ ¾ÏȣȭÇÑ´Ù.
- Windows, Netware, TPF¸¦ Á¦¿ÜÇÑ ¸ðµç Ç÷¡Æû¿¡¼­ ±âº»°ªÀÌ´Ù.
- ¸ðµç Ç÷¡ÆûÀÇ <code>htpasswd</code>°¡ ÀÌ Çü½ÄÀ» Áö¿øÇÒ ¼ö´Â
- ÀÖÁö¸¸, Windows, Netware, TPFÀÇ <a href="httpd.html">httpd</a>
- ¼­¹ö´Â ÀÌ Çü½ÄÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-s</code></dt>
- <dd>¾ÏÈ£¸¦ SHA ¾ÏȣȭÇÑ´Ù. LDAP µð·ºÅ丮±³È¯Çü½Ä(ldif)À»
- »ç¿ëÇÏ¿© Netscape ¼­¹ö·Î Á¤º¸¸¦ º¸³»°Å³ª °ÅÁ®¿Ã¶§ À¯¿ëÇÏ´Ù.</dd>
-
- <dt><code>-p</code></dt>
- <dd>¾ÏÈ£¸¦ ±×´ë·Î »ç¿ëÇÑ´Ù. ¸ðµç Ç÷¡ÆûÀÇ <code>htpasswd</code>°¡
- Áö¿øÇÏÁö¸¸, Windows, Netware, TPFÀÇ <a href="httpd.html">httpd</a>
- µ¥¸ó¸¸ÀÌ ÀÏ¹Ý ¾ÏÈ£¸¦ ¹Þ´Â´Ù.</dd>
-
- <dt><code>-D</code></dt>
- <dd>»ç¿ëÀÚ¸¦ »èÁ¦ÇÑ´Ù. htpasswd ÆÄÀÏ¿¡ »ç¿ëÀÚ¸íÀÌ ÀÖ´Ù¸é
- »èÁ¦ÇÑ´Ù.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>»ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÆÄÀϸí. <code>-c</code>¸¦
- »ç¿ëÇÑ °æ¿ì ÆÄÀÏÀÌ ¾ø´Ù¸é »õ·Î ¸¸µé°í, ÀÖ´Ù¸é µ¤¾î¾´´Ù.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd><var>passwdfile</var>¿¡ ¸¸µé°Å³ª ¼öÁ¤ÇÒ »ç¿ëÀÚ¸í.
- <var>username</var>ÀÌ ÀÌ ÆÄÀÏ¿¡ ¾ø´Ù¸é Ç׸ñÀ» Ãß°¡ÇÑ´Ù.
- ÀÖ´Ù¸é ¾ÏÈ£¸¦ ¼öÁ¤ÇÑ´Ù.</dd>
-
- <dt><code><var>password</var></code></dt>
- <dd>¾ÏȣȭÇÏ¿© ÆÄÀÏ¿¡ ÀúÀåÇÒ ¾ÏÈ£. ¿ÀÁ÷ <code>-b</code>
- ¿É¼Ç°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
- </dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exit" id="exit">Á¾·áÄÚµå</a></h2>
- <p><code>htpasswd</code>´Â <var>passwdfile</var>¿¡ »ç¿ëÀÚ¸í°ú
- ¾ÏÈ£¸¦ ¼º°øÀûÀ¸·Î Ãß°¡Çϰųª ¼öÁ¤ÇÑ °æ¿ì ("Âü") Á¾·áÄÚµå
- 0À» ¹ÝȯÇÑ´Ù. <code>htpasswd</code>´Â ÆÄÀÏ¿¡ Á¢±ÙÇÒ¶§ ¹®Á¦°¡
- ¹ß»ýÇÑ °æ¿ì <code>1</code>À», ¸í·ÉÇà Çü½ÄÀÌ À߸øµÈ °æ¿ì
- <code>2</code>¸¦, ÀÔ·ÂÇÑ ¾ÏÈ£¿Í È®ÀÎÂ÷ ´Ù½Ã ÀÔ·ÂÇÑ °ªÀÌ
- ÀÏÄ¡ÇÏÁö ¾ÊÀº °æ¿ì <code>3</code>À», ¸í·ÉÀÌ Áß´ÜµÈ °æ¿ì
- <code>4</code>¸¦, (»ç¿ëÀÚ¸í, ÆÄÀϸí, ¾ÏÈ£, ÃÖÁ¾ °è»ê°á°ú)
- °ªÀÌ ³Ê¹« ±ä °æ¿ì <code>5</code>¸¦, »ç¿ëÀÚ¸í¿¡ Çã¿ëÇÏÁö¾Ê´Â
- ¹®ÀÚ°¡ Æ÷ÇÔµÈ °æ¿ì <a href="#restrictions">Á¦ÇÑ Àý</a> Âü°í)
- <code>6</code>¸¦, ÆÄÀÏÀÌ ¿Ã¹Ù¸¥ ¾ÏÈ£ÆÄÀÏÀÌ ¾Æ´Ñ °æ¿ì
- <code>7</code>À» ¹ÝȯÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">¿¹Á¦</a></h2>
- <div class="example"><p><code>
- htpasswd /usr/local/etc/apache/.htpasswd-users jsmith
- </code></p></div>
-
- <p>»ç¿ëÀÚ <code>jsmith</code>ÀÇ ¾ÏÈ£¸¦ Ãß°¡Çϰųª ¼öÁ¤ÇÑ´Ù.
- »ç¿ëÀÚ¿¡°Ô ¾ÏÈ£¸¦ ¹°¾îº»´Ù. Windows ½Ã½ºÅÛ¿¡¼­ ½ÇÇàÇϸé
- ¾ÏÈ£¸¦ ¾ÆÆÄÄ¡ ƯÀ¯ÀÇ MD5 ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ¾ÏȣȭÇÏ°í,
- ¾Æ´Ï¸é ½Ã½ºÅÛÀÇ <code>crypt()</code> ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÆÄÀÏÀÌ
- ¾ø´Ù¸é <code>htpasswd</code>´Â ¾Æ¹« Àϵµ ÇÏÁö¾Ê°í ¿À·ù¸¦
- ³½´Ù.</p>
-
- <div class="example"><p><code>
- htpasswd -c /home/doe/public_html/.htpasswd jane
- </code></p></div>
-
- <p>»õ·Î ÆÄÀÏÀ» ¸¸µé°í ±× ÆÄÀÏ¿¡ »ç¿ëÀÚ <code>jane</code>À»
- Ãß°¡ÇÑ´Ù. »ç¿ëÀÚ¿¡°Ô ¾ÏÈ£¸¦ ¹°¾îº»´Ù. ÆÄÀÏÀÌ ÀÖÁö¸¸ Àаųª
- ¾µ ¼ö ¾ø´Ù¸é, <code>htpasswd</code>´Â ÆÄÀÏÀ» ¼öÁ¤ÇÏÁö¾Ê°í
- ¹®±¸¸¦ Ãâ·ÂÇÑÈÄ ¿À·ù»óŸ¦ ¹ÝȯÇÑ´Ù.</p>
-
- <div class="example"><p><code>
- htpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve
- </code></p></div>
-
- <p>¸í·ÉÇàÀÇ ¾ÏÈ£(<code>Pwd4Steve</code>)¸¦ MD5 ¾Ë°í¸®ÁòÀ¸·Î
- ¾ÏȣȭÇÏ¿© ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="security" id="security">º¸¾È»ó °í·ÁÇÒ Á¡</a></h2>
- <p><code>htpasswd</code> µîÀÌ °ü¸®ÇÏ´Â À¥ ¾ÏÈ£ÆÄÀÏÀÌ À¥¼­¹öÀÇ
- URI °ø°£¿¡ ÀÖÀ¸¸é <em>¾ÈµÈ´Ù</em>. Áï, ºê¶ó¿ìÀú°¡ ÀÌ ÆÄÀÏÀ»
- º¼ ¼ö ¾ø¾î¾ß ÇÑ´Ù.</p>
-
- <p>¸í·ÉÇà¿¡ ¾ÏȣȭÇÏÁö¾ÊÀº ¾ÏÈ£¸¦ »ç¿ëÇϱ⶧¹®¿¡ <code>-b</code>
- ¿É¼ÇÀ» ÃßõÇÏÁö ¾Ê´Â´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="restrictions" id="restrictions">Á¦ÇÑ</a></h2>
- <p>Windows¿Í MPE Ç÷¡ÆûÀº <code>htpasswd</code>°¡ ¾ÏȣȭÇÏ´Â
- ¾ÏÈ£ÀÇ ±æÀ̸¦ <code>255</code> ¹®ÀÚ·Î Á¦ÇÑÇÑ´Ù. ´õ ±ä ¾ÏÈ£´Â
- 255ÀÚ¿¡¼­ ©¸°´Ù.</p>
-
- <p><code>htpasswd</code>°¡ »ç¿ëÇÏ´Â MD5 ¾Ë°í¸®ÁòÀº ¾ÆÆÄÄ¡
- ¼ÒÇÁÆ®¿þ¾î ƯÀ¯ÀÇ °ÍÀÌ´Ù. À̸¦ »ç¿ëÇÏ¿© ¾ÏȣȭÇÑ ¾ÏÈ£¸¦
- ´Ù¸¥ À¥¼­¹ö¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <p>»ç¿ëÀÚ¸íÀº <code>255</code> ¹ÙÀÌÆ®·Î Á¦Çѵǰí <code>:</code>
- ¹®ÀÚ¸¦ Æ÷ÇÔÇÒ ¼ö ¾ø´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/htpasswd.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/htpasswd.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/htpasswd.xml b/docs/manual/programs/htpasswd.xml
deleted file mode 100644
index cbfae726a1..0000000000
--- a/docs/manual/programs/htpasswd.xml
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htpasswd.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>htpasswd - Manage user files for basic authentication</title>
-
-<summary>
- <p><code>htpasswd</code> is used to create and update the flat-files used to
- store usernames and password for basic authentication of HTTP users. If
- <code>htpasswd</code> cannot access a file, such as not being able to write
- to the output file or not being able to read the file in order to update it,
- it returns an error status and makes no changes.</p>
-
- <p>Resources available from the Apache HTTP server can be restricted to
- just the users listed in the files created by <code>htpasswd</code>. This
- program can only manage usernames and passwords stored in a flat-file. It
- can encrypt and display password information for use in other types of data
- stores, though. To use a DBM database see <a
- href="dbmmanage.html">dbmmanage</a>.</p>
-
- <p><code>htpasswd</code> encrypts passwords using either a version of MD5
- modified for Apache, or the system's <code>crypt()</code> routine. Files
- managed by <code>htpasswd</code> may contain both types of passwords; some
- user records may have MD5-encrypted passwords while others in the same file
- may have passwords encrypted with <code>crypt()</code>.</p>
-
- <p>This manual page only lists the command line arguments. For details of
- the directives necessary to configure user authentication in
- <a href="httpd.html">httpd</a> see the Apache manual, which is part of the
- Apache distribution or can be found at <a href="http://httpd.apache.org"
- >http://httpd.apache.org/</a>.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-<seealso>The scripts in support/SHA1 which come with the
-distribution.</seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>htpasswd</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>b</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>p</strong> |
- -<strong>s</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var>
- <var>password</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>n</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>nb</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var> <var>password</var></code></p>
-</section>
-
-<section id="options"><title>Options</title>
- <dl>
- <dt><code>-b</code></dt>
- <dd>Use batch mode; <em>i.e.</em>, get the password from the command line
- rather than prompting for it. This option should be used with extreme care,
- since <strong>the password is clearly visible</strong> on the command
- line.</dd>
-
- <dt><code>-c</code></dt>
- <dd>Create the <var>passwdfile</var>. If <var>passwdfile</var> already
- exists, it is rewritten and truncated. This option cannot be combined with
- the <code>-n</code> option.</dd>
-
- <dt><code>-n</code></dt>
- <dd>Display the results on standard output rather than updating a file.
- This is useful for generating password records acceptable to Apache for
- inclusion in non-text data stores. This option changes the syntax of the
- command line, since the <var>passwdfile</var> argument (usually the first
- one) is omitted. It cannot be combined with the <code>-c</code> option.</dd>
-
- <dt><code>-m</code></dt>
- <dd>Use MD5 encryption for passwords. On Windows, Netware and TPF, this is
- the default.</dd>
-
- <dt><code>-d</code></dt>
- <dd>Use <code>crypt()</code> encryption for passwords. The default on all
- platforms but Windows, Netware and TPF. Though possibly supported by
- <code>htpasswd</code> on all platforms, it is not supported by the
- <a href="httpd.html">httpd</a> server on Windows, Netware and TPF.</dd>
-
- <dt><code>-s</code></dt>
- <dd>Use SHA encryption for passwords. Facilitates migration from/to Netscape
- servers using the LDAP Directory Interchange Format (ldif).</dd>
-
- <dt><code>-p</code></dt>
- <dd>Use plaintext passwords. Though <code>htpasswd</code> will support
- creation on all platforms, the <a href="httpd.html">httpd</a> daemon will
- only accept plain text passwords on Windows, Netware and TPF.</dd>
-
- <dt><code>-D</code></dt>
- <dd>Delete user. If the username exists in the specified htpasswd file, it
- will be deleted.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>Name of the file to contain the user name and password. If
- <code>-c</code> is given, this file is created if it does not already exist,
- or rewritten and truncated if it does exist.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd>The username to create or update in <var>passwdfile</var>. If
- <var>username</var> does not exist in this file, an entry is added. If it
- does exist, the password is changed.</dd>
-
- <dt><code><var>password</var></code></dt>
- <dd>The plaintext password to be encrypted and stored in the file. Only
- used with the <code>-b</code> flag.</dd>
- </dl>
-</section>
-
-<section id="exit"><title>Exit Status</title>
- <p><code>htpasswd</code> returns a zero status ("true") if the username and
- password have been successfully added or updated in the
- <var>passwdfile</var>. <code>htpasswd</code> returns <code>1</code> if it
- encounters some problem accessing files, <code>2</code> if there was a
- syntax problem with the command line, <code>3</code> if the password was
- entered interactively and the verification entry didn't match,
- <code>4</code> if its operation was interrupted, <code>5</code> if a value
- is too long (username, filename, password, or final computed record),
- <code>6</code> if the username contains illegal characters (see the
- <a href="#restrictions">Restrictions section</a>), and <code>7</code>
- if the file is not a valid password file.</p>
-</section>
-
-<section id="examples"><title>Examples</title>
- <example>
- htpasswd /usr/local/etc/apache/.htpasswd-users jsmith
- </example>
-
- <p>Adds or modifies the password for user <code>jsmith</code>. The user
- is prompted for the password. If executed on a Windows system, the password
- will be encrypted using the modified Apache MD5 algorithm; otherwise, the
- system's <code>crypt()</code> routine will be used. If the file does not
- exist, <code>htpasswd</code> will do nothing except return an error.</p>
-
- <example>
- htpasswd -c /home/doe/public_html/.htpasswd jane
- </example>
-
- <p>Creates a new file and stores a record in it for user <code>jane</code>.
- The user is prompted for the password. If the file exists and cannot be
- read, or cannot be written, it is not altered and <code>htpasswd</code>
- will display a message and return an error status.</p>
-
- <example>
- htpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve
- </example>
-
- <p>Encrypts the password from the command line (<code>Pwd4Steve</code>)
- using the MD5 algorithm, and stores it in the specified file.</p>
-</section>
-
-<section id="security"><title>Security Considerations</title>
- <p>Web password files such as those managed by <code>htpasswd</code> should
- <em>not</em> be within the Web server's URI space -- that is, they should
- not be fetchable with a browser.</p>
-
- <p>The use of the <code>-b</code> option is discouraged, since when it is
- used the unencrypted password appears on the command line.</p>
-</section>
-
-<section id="restrictions"><title>Restrictions</title>
- <p>On the Windows and MPE platforms, passwords encrypted with
- <code>htpasswd</code> are limited to no more than <code>255</code>
- characters in length. Longer passwords will be truncated to 255
- characters.</p>
-
- <p>The MD5 algorithm used by <code>htpasswd</code> is specific to the Apache
- software; passwords encrypted using it will not be usable with other Web
- servers.</p>
-
- <p>Usernames are limited to <code>255</code> bytes and may not include the
- character <code>:</code>.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/htpasswd.xml.ko b/docs/manual/programs/htpasswd.xml.ko
deleted file mode 100644
index f2f55bb174..0000000000
--- a/docs/manual/programs/htpasswd.xml.ko
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="htpasswd.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>htpasswd - basic authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚÆÄÀÏÀ»
- °ü¸®ÇÑ´Ù</title>
-
-<summary>
- <p><code>htpasswd</code>´Â HTTP basic authentication¿¡ »ç¿ëÇÒ
- »ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÀϹÝÆÄÀÏÀ» »ý¼ºÇÏ°í ¼öÁ¤ÇÑ´Ù.
- <code>htpasswd</code>°¡ ÆÄÀÏÀ» ¾²°Å³ª ÀÐÀ» ¼ö ¾ø´Ù¸é,
- ¿À·ù»óŸ¦ ¹ÝȯÇÏ°í ¾Æ¹«°Íµµ ¼öÁ¤ÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â ÀÚ¿øÀ» <code>htpasswd</code>·Î ¸¸µç ÆÄÀÏ¿¡
- ±â·ÏÇÑ »ç¿ëÀÚ¿¡°Ô¸¸ º¸¿©ÁÙ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº »ç¿ëÀÚ¸í°ú
- ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÀÏ¹Ý ÆÄÀÏÀ» °ü¸®ÇÑ´Ù. ±×·¯³ª ´Ù¸¥ ÀÚ·áÀúÀå
- ¹æ½ÄÀ» À§ÇØ ¾ÏÈ£ Á¤º¸¸¦ ¾ÏȣȭÇÏ¿© ÀúÀåÇÒ ¼ö ÀÖ´Ù. DBM
- µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ·Á¸é <a
- href="dbmmanage.html">dbmmanage</a>¸¦ Âü°íÇ϶ó.</p>
-
- <p><code>htpasswd</code>´Â ¾ÆÆÄÄ¡ ƯÀ¯ÀÇ MD5 ȤÀº ½Ã½ºÅÛÀÇ
- <code>crypt()</code>¸¦ »ç¿ëÇÏ¿© ¾ÏÈ£¸¦ ¾ÏȣȭÇÑ´Ù.
- <code>htpasswd</code>°¡ °ü¸®ÇÏ´Â ÆÄÀÏÀº µÎ Á¾·ùÀÇ ¾ÏÈ£¸¦
- ¸ðµÎ ÀúÀåÇÒ ¼ö ÀÖ´Ù. Áï, °°Àº ÆÄÀÏ¿¡ MD5·Î ¾ÏȣȭÇÑ ¾ÏÈ£¸¦
- »ç¿ëÇÏ´Â »ç¿ëÀÚ¿Í <code>crypt()</code>·Î ¾ÏȣȭÇÑ ¾ÏÈ£¸¦
- »ç¿ëÇÏ´Â »ç¿ëÀÚ Á¤º¸ ¸ðµÎ ³ª¿Ã ¼ö ÀÖ´Ù.</p>
-
- <p>ÀÌ manpage´Â ¸í·ÉÇà ¿É¼Ç¸¸À» ¼³¸íÇÑ´Ù. <a
- href="httpd.html">httpd</a>¿¡¼­ »ç¿ëÀÚÀÎÁõÀ» ¼³Á¤ÇÏ´Â Áö½Ã¾î¿¡
- ´ëÇÑ ¼³¸íÀº ¾ÆÆÄÄ¡ ¹èÆ÷º»¿¡ Æ÷ÇÔµÇÀÖ°í <a
- href="http://httpd.apache.org">http://httpd.apache.org/</a>¿¡¼­µµ
- º¼ ¼ö ÀÖ´Â ¾ÆÆÄÄ¡ ¼³¸í¼­¸¦ Âü°íÇ϶ó.</p>
-</summary>
-<seealso><a href="httpd.html">httpd</a></seealso>
-<seealso>¹èÆ÷º»¿¡´Â SHA1À» Áö¿øÇÏ´Â ½ºÅ©¸³Æ®µµ ÀÖ´Ù.</seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>htpasswd</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>b</strong>
- [ -<strong>c</strong> ]
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>p</strong> |
- -<strong>s</strong> ]
- [ -<strong>D</strong> ] <var>passwdfile</var> <var>username</var>
- <var>password</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>n</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var></code></p>
-
- <p><code><strong>htpasswd</strong> -<strong>nb</strong>
- [ -<strong>m</strong> |
- -<strong>d</strong> |
- -<strong>s</strong> |
- -<strong>p</strong> ] <var>username</var> <var>password</var></code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
- <dl>
- <dt><code>-b</code></dt>
- <dd>¹èÄ¡(batch) ¸ðµå¸¦ »ç¿ëÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>, ¾ÏÈ£¸¦
- ¹°¾îº¸Áö¾Ê°í ¸í·ÉÇà¿¡¼­ ¹Þ´Â´Ù. ¸í·ÉÇà¿¡ <strong>¾ÏÈ£°¡
- Á÷Á¢ µå·¯³ª¹Ç·Î</strong>, ÀÌ ¿É¼ÇÀº ¸Å¿ì Á¶½ÉÇؼ­ »ç¿ëÇؾß
- ÇÑ´Ù.</dd>
-
- <dt><code>-c</code></dt>
- <dd><var>passwdfile</var>À» ¸¸µç´Ù. <var>passwdfile</var>ÀÌ
- ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é, µ¤¾î¾´´Ù. ÀÌ ¿É¼ÇÀ» <code>-n</code> ¿É¼Ç°ú
- °°ÀÌ »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code>-n</code></dt>
- <dd>ÆÄÀÏÀ» ¼öÁ¤ÇÏÁö¾Ê°í °á°ú¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î Ãâ·ÂÇÑ´Ù.
- ¾ÆÆÄÄ¡°¡ ¹®¼­ÀÌ¿ÜÀÇ °÷¿¡ »ý¼ºÇÑ ¾ÏÈ£¸¦ ÀúÀåÇÒ¶§ À¯¿ëÇÏ´Ù.
- (Ç×»ó ù¹ø° ¾Æ±Ô¸ÕÆ®ÀÎ) <var>passwdfile</var> ¾Æ±Ô¸ÕÆ®°¡
- ¾ø±â¶§¹®¿¡ ¸í·ÉÇà ¹®¹ýÀÌ ´Ù¸£´Ù. <code>-c</code> ¿É¼Ç°ú
- °°ÀÌ »ç¿ëÇÒ ¼ö ¾ø´Ù.</dd>
-
- <dt><code>-m</code></dt>
- <dd>MD5¸¦ »ç¿ëÇÏ¿© ¾ÏÈ£¸¦ ¾ÏȣȭÇÑ´Ù. Windows, Netware,
- TPF¿¡¼­ ±âº»°ªÀÌ´Ù.</dd>
-
- <dt><code>-d</code></dt>
- <dd><code>crypt()</code>¸¦ »ç¿ëÇÏ¿© ¾ÏÈ£¸¦ ¾ÏȣȭÇÑ´Ù.
- Windows, Netware, TPF¸¦ Á¦¿ÜÇÑ ¸ðµç Ç÷¡Æû¿¡¼­ ±âº»°ªÀÌ´Ù.
- ¸ðµç Ç÷¡ÆûÀÇ <code>htpasswd</code>°¡ ÀÌ Çü½ÄÀ» Áö¿øÇÒ ¼ö´Â
- ÀÖÁö¸¸, Windows, Netware, TPFÀÇ <a href="httpd.html">httpd</a>
- ¼­¹ö´Â ÀÌ Çü½ÄÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.</dd>
-
- <dt><code>-s</code></dt>
- <dd>¾ÏÈ£¸¦ SHA ¾ÏȣȭÇÑ´Ù. LDAP µð·ºÅ丮±³È¯Çü½Ä(ldif)À»
- »ç¿ëÇÏ¿© Netscape ¼­¹ö·Î Á¤º¸¸¦ º¸³»°Å³ª °ÅÁ®¿Ã¶§ À¯¿ëÇÏ´Ù.</dd>
-
- <dt><code>-p</code></dt>
- <dd>¾ÏÈ£¸¦ ±×´ë·Î »ç¿ëÇÑ´Ù. ¸ðµç Ç÷¡ÆûÀÇ <code>htpasswd</code>°¡
- Áö¿øÇÏÁö¸¸, Windows, Netware, TPFÀÇ <a href="httpd.html">httpd</a>
- µ¥¸ó¸¸ÀÌ ÀÏ¹Ý ¾ÏÈ£¸¦ ¹Þ´Â´Ù.</dd>
-
- <dt><code>-D</code></dt>
- <dd>»ç¿ëÀÚ¸¦ »èÁ¦ÇÑ´Ù. htpasswd ÆÄÀÏ¿¡ »ç¿ëÀÚ¸íÀÌ ÀÖ´Ù¸é
- »èÁ¦ÇÑ´Ù.</dd>
-
- <dt><code><var>passwdfile</var></code></dt>
- <dd>»ç¿ëÀÚ¸í°ú ¾ÏÈ£¸¦ ÀúÀåÇÏ´Â ÆÄÀϸí. <code>-c</code>¸¦
- »ç¿ëÇÑ °æ¿ì ÆÄÀÏÀÌ ¾ø´Ù¸é »õ·Î ¸¸µé°í, ÀÖ´Ù¸é µ¤¾î¾´´Ù.</dd>
-
- <dt><code><var>username</var></code></dt>
- <dd><var>passwdfile</var>¿¡ ¸¸µé°Å³ª ¼öÁ¤ÇÒ »ç¿ëÀÚ¸í.
- <var>username</var>ÀÌ ÀÌ ÆÄÀÏ¿¡ ¾ø´Ù¸é Ç׸ñÀ» Ãß°¡ÇÑ´Ù.
- ÀÖ´Ù¸é ¾ÏÈ£¸¦ ¼öÁ¤ÇÑ´Ù.</dd>
-
- <dt><code><var>password</var></code></dt>
- <dd>¾ÏȣȭÇÏ¿© ÆÄÀÏ¿¡ ÀúÀåÇÒ ¾ÏÈ£. ¿ÀÁ÷ <code>-b</code>
- ¿É¼Ç°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</dd>
- </dl>
-</section>
-
-<section id="exit"><title>Á¾·áÄÚµå</title>
- <p><code>htpasswd</code>´Â <var>passwdfile</var>¿¡ »ç¿ëÀÚ¸í°ú
- ¾ÏÈ£¸¦ ¼º°øÀûÀ¸·Î Ãß°¡Çϰųª ¼öÁ¤ÇÑ °æ¿ì ("Âü") Á¾·áÄÚµå
- 0À» ¹ÝȯÇÑ´Ù. <code>htpasswd</code>´Â ÆÄÀÏ¿¡ Á¢±ÙÇÒ¶§ ¹®Á¦°¡
- ¹ß»ýÇÑ °æ¿ì <code>1</code>À», ¸í·ÉÇà Çü½ÄÀÌ À߸øµÈ °æ¿ì
- <code>2</code>¸¦, ÀÔ·ÂÇÑ ¾ÏÈ£¿Í È®ÀÎÂ÷ ´Ù½Ã ÀÔ·ÂÇÑ °ªÀÌ
- ÀÏÄ¡ÇÏÁö ¾ÊÀº °æ¿ì <code>3</code>À», ¸í·ÉÀÌ Áß´ÜµÈ °æ¿ì
- <code>4</code>¸¦, (»ç¿ëÀÚ¸í, ÆÄÀϸí, ¾ÏÈ£, ÃÖÁ¾ °è»ê°á°ú)
- °ªÀÌ ³Ê¹« ±ä °æ¿ì <code>5</code>¸¦, »ç¿ëÀÚ¸í¿¡ Çã¿ëÇÏÁö¾Ê´Â
- ¹®ÀÚ°¡ Æ÷ÇÔµÈ °æ¿ì <a href="#restrictions">Á¦ÇÑ Àý</a> Âü°í)
- <code>6</code>¸¦, ÆÄÀÏÀÌ ¿Ã¹Ù¸¥ ¾ÏÈ£ÆÄÀÏÀÌ ¾Æ´Ñ °æ¿ì
- <code>7</code>À» ¹ÝȯÇÑ´Ù.</p>
-</section>
-
-<section id="examples"><title>¿¹Á¦</title>
- <example>
- htpasswd /usr/local/etc/apache/.htpasswd-users jsmith
- </example>
-
- <p>»ç¿ëÀÚ <code>jsmith</code>ÀÇ ¾ÏÈ£¸¦ Ãß°¡Çϰųª ¼öÁ¤ÇÑ´Ù.
- »ç¿ëÀÚ¿¡°Ô ¾ÏÈ£¸¦ ¹°¾îº»´Ù. Windows ½Ã½ºÅÛ¿¡¼­ ½ÇÇàÇϸé
- ¾ÏÈ£¸¦ ¾ÆÆÄÄ¡ ƯÀ¯ÀÇ MD5 ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ¾ÏȣȭÇÏ°í,
- ¾Æ´Ï¸é ½Ã½ºÅÛÀÇ <code>crypt()</code> ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÆÄÀÏÀÌ
- ¾ø´Ù¸é <code>htpasswd</code>´Â ¾Æ¹« Àϵµ ÇÏÁö¾Ê°í ¿À·ù¸¦
- ³½´Ù.</p>
-
- <example>
- htpasswd -c /home/doe/public_html/.htpasswd jane
- </example>
-
- <p>»õ·Î ÆÄÀÏÀ» ¸¸µé°í ±× ÆÄÀÏ¿¡ »ç¿ëÀÚ <code>jane</code>À»
- Ãß°¡ÇÑ´Ù. »ç¿ëÀÚ¿¡°Ô ¾ÏÈ£¸¦ ¹°¾îº»´Ù. ÆÄÀÏÀÌ ÀÖÁö¸¸ Àаųª
- ¾µ ¼ö ¾ø´Ù¸é, <code>htpasswd</code>´Â ÆÄÀÏÀ» ¼öÁ¤ÇÏÁö¾Ê°í
- ¹®±¸¸¦ Ãâ·ÂÇÑÈÄ ¿À·ù»óŸ¦ ¹ÝȯÇÑ´Ù.</p>
-
- <example>
- htpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve
- </example>
-
- <p>¸í·ÉÇàÀÇ ¾ÏÈ£(<code>Pwd4Steve</code>)¸¦ MD5 ¾Ë°í¸®ÁòÀ¸·Î
- ¾ÏȣȭÇÏ¿© ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù.</p>
-</section>
-
-<section id="security"><title>º¸¾È»ó °í·ÁÇÒ Á¡</title>
- <p><code>htpasswd</code> µîÀÌ °ü¸®ÇÏ´Â À¥ ¾ÏÈ£ÆÄÀÏÀÌ À¥¼­¹öÀÇ
- URI °ø°£¿¡ ÀÖÀ¸¸é <em>¾ÈµÈ´Ù</em>. Áï, ºê¶ó¿ìÀú°¡ ÀÌ ÆÄÀÏÀ»
- º¼ ¼ö ¾ø¾î¾ß ÇÑ´Ù.</p>
-
- <p>¸í·ÉÇà¿¡ ¾ÏȣȭÇÏÁö¾ÊÀº ¾ÏÈ£¸¦ »ç¿ëÇϱ⶧¹®¿¡ <code>-b</code>
- ¿É¼ÇÀ» ÃßõÇÏÁö ¾Ê´Â´Ù.</p>
-</section>
-
-<section id="restrictions"><title>Á¦ÇÑ</title>
- <p>Windows¿Í MPE Ç÷¡ÆûÀº <code>htpasswd</code>°¡ ¾ÏȣȭÇÏ´Â
- ¾ÏÈ£ÀÇ ±æÀ̸¦ <code>255</code> ¹®ÀÚ·Î Á¦ÇÑÇÑ´Ù. ´õ ±ä ¾ÏÈ£´Â
- 255ÀÚ¿¡¼­ ©¸°´Ù.</p>
-
- <p><code>htpasswd</code>°¡ »ç¿ëÇÏ´Â MD5 ¾Ë°í¸®ÁòÀº ¾ÆÆÄÄ¡
- ¼ÒÇÁÆ®¿þ¾î ƯÀ¯ÀÇ °ÍÀÌ´Ù. À̸¦ »ç¿ëÇÏ¿© ¾ÏȣȭÇÑ ¾ÏÈ£¸¦
- ´Ù¸¥ À¥¼­¹ö¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.</p>
-
- <p>»ç¿ëÀÚ¸íÀº <code>255</code> ¹ÙÀÌÆ®·Î Á¦Çѵǰí <code>:</code>
- ¹®ÀÚ¸¦ Æ÷ÇÔÇÒ ¼ö ¾ø´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/htpasswd.xml.meta b/docs/manual/programs/htpasswd.xml.meta
deleted file mode 100644
index 739310d8ad..0000000000
--- a/docs/manual/programs/htpasswd.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>htpasswd</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/httpd.html b/docs/manual/programs/httpd.html
deleted file mode 100644
index 7d7ff916d3..0000000000
--- a/docs/manual/programs/httpd.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: httpd.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: httpd.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/httpd.html.en b/docs/manual/programs/httpd.html.en
deleted file mode 100644
index af5db611d5..0000000000
--- a/docs/manual/programs/httpd.html.en
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>httpd - Apache Hypertext Transfer Protocol Server - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>httpd - Apache Hypertext Transfer Protocol Server</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/httpd.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/httpd.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>httpd</code> is the Apache HyperText Transfer Protocol
- (HTTP) server program. It is designed to be run as a standalone
- daemon process. When used like this it will create a pool of
- child processes or threads to handle requests.</p>
-
- <p>In general, <code>httpd</code> should not be invoked directly,
- but rather should be invoked via <a href="apachectl.html">apachectl</a> on Unix-based systems or <a href="../platform/windows.html#winsvc">as a service on Windows NT,
- 2000 and XP</a> and <a href="../platform/windows.html#wincons">as
- a console application on Windows 9x and ME</a>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="../invoking.html">Starting Apache</a></li><li><a href="../stopping.html">Stopping Apache</a></li><li><a href="../configuring.html">Configuration Files</a></li><li><a href="../platform/">Platform-specific Documentation</a></li><li><a href="apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>httpd</strong> [ -<strong>d</strong>
- <var>serverroot</var> ] [ -<strong>f</strong> <var>config</var> ]
- [ -<strong>C</strong> <var>directive</var> ] [ -<strong>c</strong>
- <var>directive</var> ] [ -<strong>D</strong> <var>parameter</var> ]
- [ -<strong>e</strong> <var>level</var> ] [ -<strong>E</strong>
- <var>file</var> ] [ <strong>-k</strong> start|restart|graceful|stop ]
- [ -<strong>R</strong> <var>directory</var> ] [ -<strong>h</strong> ]
- [ -<strong>l</strong> ] [ -<strong>L</strong> ] [ -<strong>S</strong> ]
- [ -<strong>t</strong> ] [ -<strong>v</strong> ] [ -<strong>V</strong> ]
- [ -<strong>X</strong> ] [ -<strong>M</strong> ]</code></p>
-
- <p>On <a href="../platform/windows.html">Windows systems</a>, the
- following additional arguments are available:</p>
-
- <p><code><strong>httpd</strong> [ -<strong>k</strong>
- install|config|uninstall ] [ -<strong>n</strong> <var>name</var> ]
- [ -<strong>w</strong> ]</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
-
-<dl>
-<dt><code>-d <var>serverroot</var></code></dt>
-
-<dd>Set the initial value for the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> directive to
-<var>serverroot</var>. This can be overridden by the ServerRoot
-directive in the configuration file. The default is
-<code>/usr/local/apache2</code>.</dd>
-
-<dt><code>-f <var>config</var></code></dt>
-
-<dd>Uses the directives in the file <var>config</var> on startup. If
-<var>config</var> does not begin with a /, then it is taken to be a
-path relative to the <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>. The default is
-<code>conf/httpd.conf</code>.</dd>
-
-<dt><code>-k <code>start|restart|graceful|stop</code></code></dt>
-
-<dd>Signals <code>httpd</code> to start, restart, or stop. See <a href="../stopping.html">Stopping Apache</a> for more information.</dd>
-
-<dt><code>-C <var>directive</var></code></dt>
-
-<dd>Process the configuration <var>directive</var> before reading
-config files.</dd>
-
-<dt><code>-c <var>directive</var></code></dt>
-
-<dd>Process the configuration <var>directive</var> after reading config
-files.</dd>
-
-
-<dt><code>-D <var>parameter</var></code></dt>
-
-<dd>Sets a configuration <var>parameter </var>which can be used with
-<code class="directive"><a href="../mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> sections
-in the configuration files to conditionally skip or process
-commands at server startup and restart.</dd>
-
-<dt><code>-e <var>level</var></code></dt>
-
-<dd>Sets the <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> to
-<var>level</var> during server startup. This is useful for
-temporarily increasing the verbosity of the error messages to find
-problems during startup.</dd>
-
-<dt><code>-E <var>file</var></code></dt>
-
-<dd>Send error messages during server startup to <var>file</var>.</dd>
-
-<dt><code>-R <var>directory</var></code></dt>
-
-<dd>When the server is compiled using the <code>SHARED_CORE</code>
-rule, this specifies the <var>directory</var> for the shared
-object files.</dd>
-
-<dt><code>-h</code></dt>
-
-<dd>Output a short summary of available command line options.</dd>
-
-<dt><code>-l</code></dt>
-
-<dd>Output a list of modules compiled into the server. This will
-<strong>not</strong> list dynamically loaded modules included using
-the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive.</dd>
-
-<dt><code>-L</code></dt>
-
-<dd>Output a list of directives together with expected arguments and
-places where the directive is valid.</dd>
-
-<dt><code>-M</code></dt>
-
-<dd>Dump a list of loaded Static and Shared Modules.</dd>
-
-<dt><code>-S</code></dt>
-
-<dd>Show the settings as parsed from the config file (currently only
-shows the virtualhost settings).</dd>
-
-<dt><code>-t</code></dt>
-
-<dd>Run syntax tests for configuration files only. The program
-immediately exits after these syntax parsing tests with either a return code
-of 0 (Syntax OK) or return code not equal to 0 (Syntax Error). If -D
-<var>DUMP</var>_<var>VHOSTS </var>is also set, details of the virtual host
-configuration will be printed. If -D <var>DUMP</var>_<var>MODULES </var> is
-set, all loaded modules will be printed.</dd>
-
-<dt><code>-v</code></dt>
-
-<dd>Print the version of <code>httpd</code>, and then exit.</dd>
-
-<dt><code>-V</code></dt>
-
-<dd>Print the version and build parameters of <code>httpd</code>, and
-then exit.</dd>
-
-<dt><code>-X</code></dt>
-
-<dd>Run httpd in debug mode. Only one worker will be started and the
-server will not detach from the console.</dd>
-
-</dl>
-
-<p>The following arguments are available only on the <a href="../platform/windows.html">Windows platform</a>:</p>
-
-<dl>
-
-<dt><code>-k install|config|uninstall</code></dt>
-
-<dd>Install Apache as a Windows NT service; change startup options for
-the Apache service; and uninstall the Apache service.</dd>
-
-<dt><code>-n <var>name</var></code></dt>
-
-<dd>The <var>name</var> of the Apache service to signal.</dd>
-
-<dt><code>-w</code></dt>
-
-<dd>Keep the console window open on error so that the error message can
-be read.</dd>
-
-</dl>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/httpd.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/httpd.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/httpd.html.ko.euc-kr b/docs/manual/programs/httpd.html.ko.euc-kr
deleted file mode 100644
index b4d73c7e3a..0000000000
--- a/docs/manual/programs/httpd.html.ko.euc-kr
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>httpd - ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ ¼­¹ö - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>httpd - ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ ¼­¹ö</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/httpd.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/httpd.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>httpd</code>´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ
- (HTTP) ¼­¹ö ÇÁ·Î±×·¥ÀÌ´Ù. ÀÚü(standalone) µ¥¸ó ÇÁ·Î¼¼½º·Î
- ½ÇÇàÇϵµ·Ï ¼³°èµÇ¾ú´Ù. ¿øÇÑ´Ù¸é ¿äûÀ» ó¸®ÇϱâÀ§ÇØ ÀÚ½Ä
- ÇÁ·Î¼¼½º¿Í ¾²·¹µåµéÀ» ¸¸µç´Ù.</p>
-
- <p>ÀϹÝÀûÀ¸·Î <code>httpd</code>¸¦ Á÷Á¢ ½ÇÇàÇϱ⺸´Ù´Â
- À¯´Ð½º±â¹Ý ½Ã½ºÅÛ¿¡¼­´Â <a href="apachectl.html">apachectl</a>À» ÅëÇØ, <a href="../platform/windows.html#winsvc">2000, XP¿¡¼­´Â
- ¼­ºñ½º·Î</a>, <a href="../platform/windows.html#wincons">Windows
- 9x¿Í ME¿¡¼­´Â ÄÝ¼Ö ÇÁ·Î±×·¥À¸·Î</a> ½ÇÇàÇØ¾ß ÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="../invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></li><li><a href="../stopping.html">¾ÆÆÄÄ¡ Áß´Ü</a></li><li><a href="../configuring.html">¼³Á¤ÆÄÀÏ</a></li><li><a href="../platform/">Ç÷¡Æûº° ¹®¼­</a></li><li><a href="apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>httpd</strong> [ -<strong>d</strong>
- <var>serverroot</var> ] [ -<strong>f</strong> <var>config</var> ]
- [ -<strong>C</strong> <var>directive</var> ] [ -<strong>c</strong>
- <var>directive</var> ] [ -<strong>D</strong> <var>parameter</var> ]
- [ -<strong>e</strong> <var>level</var> ] [ -<strong>E</strong>
- <var>file</var> ] [ <strong>-k</strong> start|restart|graceful|stop ]
- [ -<strong>R</strong> <var>directory</var> ] [ -<strong>h</strong> ]
- [ -<strong>l</strong> ] [ -<strong>L</strong> ] [ -<strong>S</strong> ]
- [ -<strong>t</strong> ] [ -<strong>v</strong> ] [ -<strong>V</strong> ]
- [ -<strong>X</strong> ] [ -<strong>M</strong> ]</code></p>
-
- <p><a href="../platform/windows.html">Windows ½Ã½ºÅÛ</a>¿¡¼­´Â
- ´ÙÀ½ ¾Æ±Ô¸ÕÆ®¸¦ Ãß°¡·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
- <p><code><strong>httpd</strong> [ -<strong>k</strong>
- install|config|uninstall ] [ -<strong>n</strong> <var>name</var> ]
- [ -<strong>w</strong> ]</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
-
-<dl>
-<dt><code>-d <var>serverroot</var></code></dt>
-
-<dd><code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> Áö½Ã¾îÀÇ
-±âº»°ªÀ» <var>serverroot</var>·Î ¼³Á¤ÇÑ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­ ServerRoot
-Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀÌ °ªÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº
-<code>/usr/local/apache2</code>ÀÌ´Ù.</dd>
-
-<dt><code>-f <var>config</var></code></dt>
-
-<dd>½ÃÀÛÇÒ¶§ <var>config</var> ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
-<var>config</var>°¡ /·Î ½ÃÀÛÇÏÁö ¾ÊÀ¸¸é <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>¿¡ »ó´ë°æ·ÎÀÌ´Ù. ±âº»°ªÀº
-<code>conf/httpd.conf</code>ÀÌ´Ù.</dd>
-
-<dt><code>-k <code>start|restart|graceful|stop</code></code></dt>
-
-<dd><code>httpd</code>¸¦ ½ÃÀÛ, Àç½ÃÀÛ, Áß´ÜÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â
-<a href="../stopping.html">¾ÆÆÄÄ¡ Áß´ÜÇϱâ</a>¸¦ Âü°íÇ϶ó.</dd>
-
-<dt><code>-C <var>directive</var></code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀ» ÀбâÀü¿¡ <var>directive</var> Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù.</dd>
-
-<dt><code>-c <var>directive</var></code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀ» ÀбâÀü¿¡ <var>directive</var> Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù.</dd>
-
-
-<dt><code>-D <var>parameter</var></code></dt>
-
-<dd>¼­¹ö ½ÃÀÛ È¤Àº Àç½ÃÀ۽à ¼±ÅÃÀûÀ¸·Î ¸í·É¾î¸¦ ó¸®ÇϱâÀ§ÇØ
-¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>
-¼½¼Ç¿¡ »ç¿ëÇÒ <var>parameter</var>¸¦ ¼³Á¤ÇÑ´Ù.</dd>
-
-<dt><code>-e <var>level</var></code></dt>
-
-<dd>¼­¹ö°¡ ½ÃÀÛÇϴµ¿¾È <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>À»
-<var>level</var>·Î ¼³Á¤ÇÑ´Ù. ÀÌ´Â ½ÃÀÛÁß ¹®Á¦¸¦ ã±âÀ§ÇØ Àá½Ã
-´õ ÀÚ¼¼ÇÑ ¿À·ù¹®À» ¾òÀ»¶§ À¯¿ëÇÏ´Ù.</dd>
-
-<dt><code>-E <var>file</var></code></dt>
-
-<dd>¼­¹ö°¡ ½ÃÀÛÇϴµ¿¾È <var>file</var>·Î ¿À·ù¹®À» º¸³½´Ù.</dd>
-
-<dt><code>-R <var>directory</var></code></dt>
-
-<dd>¼­¹ö¸¦ <code>SHARED_CORE</code> ±ÔÄ¢À» »ç¿ëÇÏ¿© ÄÄÆÄÀÏÇÑ
-°æ¿ì °øÀ¯¿ÀºêÁ§Æ®ÆÄÀÏ <var>directory</var>¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
-<dt><code>-h</code></dt>
-
-<dd>»ç¿ëÇÒ ¼ö ÀÖ´Â ¸í·ÉÇà ¿É¼ÇµéÀÇ ÂªÀº ¿ä¾àÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-l</code></dt>
-
-<dd>¼­¹ö¿¡ °°ÀÌ ÄÄÆÄÀÏÇÑ ¸ðµâ ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù. <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î
-ÀоîµéÀÌ´Â ¸ðµâÀº Ãâ·ÂÇÏÁö <strong>¾Ê´Â´Ù</strong>.</dd>
-
-<dt><code>-L</code></dt>
-
-<dd>Áö½Ã¾î ¸ñ·ÏÀ» Áö½Ã¾î°¡ ¹Þ´Â ¾Æ±Ô¸ÕÆ®¿Í Áö½Ã¾î »ç¿ëÀå¼Ò¿Í
-°°ÀÌ Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-M</code></dt>
-
-<dd>ÀоîµéÀÎ Á¤Àû ¸ðµâ°ú °øÀ¯ ¸ðµâ ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-S</code></dt>
-
-<dd>¼³Á¤ÆÄÀÏ¿¡¼­ ÀоîµéÀÎ ¼³Á¤À» º¸¿©ÁØ´Ù (ÇöÀç´Â °¡»óÈ£½ºÆ®
-¼³Á¤¸¸À» º¸¿©ÁØ´Ù).</dd>
-
-<dt><code>-t</code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀÇ ¹®¹ý°Ë»ç¸¸ ÇÑ´Ù. ÇÁ·Î±×·¥Àº ¹®¹ýÀ» °Ë»çÇÑÈÄ
-(¹®¹ýÀÌ ¿Ã¹Ù¸¥ °æ¿ì) 0À̳ª (¹®¹ý¿¡ ¹®Á¦°¡ ÀÖ´Â °æ¿ì) 0ÀÌ ¾Æ´Ñ
-Á¾·áÄÚµå·Î Áï½Ã Á¾·áÇÑ´Ù. -D <var>DUMP</var>_<var>VHOSTS</var>À»
-»ç¿ëÇÏ¸é °¡»óÈ£½ºÆ® ¼³Á¤À» ÀÚ¼¼È÷ Ãâ·ÂÇÑ´Ù. -D
-<var>DUMP</var>_<var>MODULES</var>¸¦ »ç¿ëÇϸé ÀоîµéÀÎ ¸ðµâ
-¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-v</code></dt>
-
-<dd><code>httpd</code>ÀÇ ¹öÀüÀ» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.</dd>
-
-<dt><code>-V</code></dt>
-
-<dd><code>httpd</code>ÀÇ ¹öÀü°ú ÄÄÆÄÀÏ ÆĶó¹ÌÅ͸¦ Ãâ·ÂÇÏ°í
-Á¾·áÇÑ´Ù.</dd>
-
-<dt><code>-X</code></dt>
-
-<dd>µð¹ö±× »óÅ·ΠÀ¥¼­¹ö¸¦ ½ÇÇàÇÑ´Ù. ¿ÀÁ÷ ÇÑ ÇÁ·Î¼¼½º³ª ¾²·¹µå·Î¸¸
-¼­ºñ½ºÇÏ°í, ¼­¹ö´Â Äֿܼ¡¼­ ¶³¾îÁöÁö ¾Ê´Â´Ù.</dd>
-
-</dl>
-
-<p>´ÙÀ½ ¾Æ±Ô¸ÕÆ®´Â <a href="../platform/windows.html">Windows
-Ç÷¡Æû</a>¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
-<dl>
-
-<dt><code>-k install|config|uninstall</code></dt>
-
-<dd>¾ÆÆÄÄ¡¸¦ Windows NT ¼­ºñ½º·Î ¼³Ä¡ÇÑ´Ù; ¾ÆÆÄÄ¡ ¼­ºñ½ºÀÇ ½ÃÀÛ
-¿É¼ÇÀ» ¼öÁ¤ÇÑ´Ù; ¾ÆÆÄÄ¡ ¼­ºñ½º ¼³Ä¡¸¦ Áö¿î´Ù.</dd>
-
-<dt><code>-n <var>name</var></code></dt>
-
-<dd>¾ÆÆÄÄ¡ ¼­ºñ½ºÀÇ <var>name</var>.</dd>
-
-<dt><code>-w</code></dt>
-
-<dd>¿À·ù°¡ ¹ß»ýÇϸé ÄܼÖâÀ» ¿­¾î¼­ ¿À·ù¹®À» º¸¿©ÁØ´Ù.</dd>
-
-</dl>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/httpd.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/httpd.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/httpd.xml b/docs/manual/programs/httpd.xml
deleted file mode 100644
index 02421f5703..0000000000
--- a/docs/manual/programs/httpd.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="httpd.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>httpd - Apache Hypertext Transfer Protocol Server</title>
-
-<summary>
- <p><code>httpd</code> is the Apache HyperText Transfer Protocol
- (HTTP) server program. It is designed to be run as a standalone
- daemon process. When used like this it will create a pool of
- child processes or threads to handle requests.</p>
-
- <p>In general, <code>httpd</code> should not be invoked directly,
- but rather should be invoked via <a
- href="apachectl.html">apachectl</a> on Unix-based systems or <a
- href="../platform/windows.html#winsvc">as a service on Windows NT,
- 2000 and XP</a> and <a href="../platform/windows.html#wincons">as
- a console application on Windows 9x and ME</a>.</p>
-</summary>
-
-<seealso><a href="../invoking.html">Starting Apache</a></seealso>
-<seealso><a href="../stopping.html">Stopping Apache</a></seealso>
-<seealso><a href="../configuring.html">Configuration Files</a></seealso>
-<seealso><a href="../platform/">Platform-specific Documentation</a></seealso>
-<seealso><a href="apachectl.html">apachectl</a></seealso>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>httpd</strong> [ -<strong>d</strong>
- <var>serverroot</var> ] [ -<strong>f</strong> <var>config</var> ]
- [ -<strong>C</strong> <var>directive</var> ] [ -<strong>c</strong>
- <var>directive</var> ] [ -<strong>D</strong> <var>parameter</var> ]
- [ -<strong>e</strong> <var>level</var> ] [ -<strong>E</strong>
- <var>file</var> ] [ <strong>-k</strong> start|restart|graceful|stop ]
- [ -<strong>R</strong> <var>directory</var> ] [ -<strong>h</strong> ]
- [ -<strong>l</strong> ] [ -<strong>L</strong> ] [ -<strong>S</strong> ]
- [ -<strong>t</strong> ] [ -<strong>v</strong> ] [ -<strong>V</strong> ]
- [ -<strong>X</strong> ] [ -<strong>M</strong> ]</code></p>
-
- <p>On <a href="../platform/windows.html">Windows systems</a>, the
- following additional arguments are available:</p>
-
- <p><code><strong>httpd</strong> [ -<strong>k</strong>
- install|config|uninstall ] [ -<strong>n</strong> <var>name</var> ]
- [ -<strong>w</strong> ]</code></p>
-</section>
-
-<section id="options"><title>Options</title>
-
-<dl>
-<dt><code>-d <var>serverroot</var></code></dt>
-
-<dd>Set the initial value for the <directive
-module="core">ServerRoot</directive> directive to
-<var>serverroot</var>. This can be overridden by the ServerRoot
-directive in the configuration file. The default is
-<code>/usr/local/apache2</code>.</dd>
-
-<dt><code>-f <var>config</var></code></dt>
-
-<dd>Uses the directives in the file <var>config</var> on startup. If
-<var>config</var> does not begin with a /, then it is taken to be a
-path relative to the <directive
-module="core">ServerRoot</directive>. The default is
-<code>conf/httpd.conf</code>.</dd>
-
-<dt><code>-k <code>start|restart|graceful|stop</code></code></dt>
-
-<dd>Signals <code>httpd</code> to start, restart, or stop. See <a
-href="../stopping.html">Stopping Apache</a> for more information.</dd>
-
-<dt><code>-C <var>directive</var></code></dt>
-
-<dd>Process the configuration <var>directive</var> before reading
-config files.</dd>
-
-<dt><code>-c <var>directive</var></code></dt>
-
-<dd>Process the configuration <var>directive</var> after reading config
-files.</dd>
-
-
-<dt><code>-D <var>parameter</var></code></dt>
-
-<dd>Sets a configuration <var>parameter </var>which can be used with
-<directive type="section" module="core">IfDefine</directive> sections
-in the configuration files to conditionally skip or process
-commands at server startup and restart.</dd>
-
-<dt><code>-e <var>level</var></code></dt>
-
-<dd>Sets the <directive module="core">LogLevel</directive> to
-<var>level</var> during server startup. This is useful for
-temporarily increasing the verbosity of the error messages to find
-problems during startup.</dd>
-
-<dt><code>-E <var>file</var></code></dt>
-
-<dd>Send error messages during server startup to <var>file</var>.</dd>
-
-<dt><code>-R <var>directory</var></code></dt>
-
-<dd>When the server is compiled using the <code>SHARED_CORE</code>
-rule, this specifies the <var>directory</var> for the shared
-object files.</dd>
-
-<dt><code>-h</code></dt>
-
-<dd>Output a short summary of available command line options.</dd>
-
-<dt><code>-l</code></dt>
-
-<dd>Output a list of modules compiled into the server. This will
-<strong>not</strong> list dynamically loaded modules included using
-the <directive module="mod_so">LoadModule</directive> directive.</dd>
-
-<dt><code>-L</code></dt>
-
-<dd>Output a list of directives together with expected arguments and
-places where the directive is valid.</dd>
-
-<dt><code>-M</code></dt>
-
-<dd>Dump a list of loaded Static and Shared Modules.</dd>
-
-<dt><code>-S</code></dt>
-
-<dd>Show the settings as parsed from the config file (currently only
-shows the virtualhost settings).</dd>
-
-<dt><code>-t</code></dt>
-
-<dd>Run syntax tests for configuration files only. The program
-immediately exits after these syntax parsing tests with either a return code
-of 0 (Syntax OK) or return code not equal to 0 (Syntax Error). If -D
-<var>DUMP</var>_<var>VHOSTS </var>is also set, details of the virtual host
-configuration will be printed. If -D <var>DUMP</var>_<var>MODULES </var> is
-set, all loaded modules will be printed.</dd>
-
-<dt><code>-v</code></dt>
-
-<dd>Print the version of <code>httpd</code>, and then exit.</dd>
-
-<dt><code>-V</code></dt>
-
-<dd>Print the version and build parameters of <code>httpd</code>, and
-then exit.</dd>
-
-<dt><code>-X</code></dt>
-
-<dd>Run httpd in debug mode. Only one worker will be started and the
-server will not detach from the console.</dd>
-
-</dl>
-
-<p>The following arguments are available only on the <a
-href="../platform/windows.html">Windows platform</a>:</p>
-
-<dl>
-
-<dt><code>-k install|config|uninstall</code></dt>
-
-<dd>Install Apache as a Windows NT service; change startup options for
-the Apache service; and uninstall the Apache service.</dd>
-
-<dt><code>-n <var>name</var></code></dt>
-
-<dd>The <var>name</var> of the Apache service to signal.</dd>
-
-<dt><code>-w</code></dt>
-
-<dd>Keep the console window open on error so that the error message can
-be read.</dd>
-
-</dl>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/httpd.xml.ko b/docs/manual/programs/httpd.xml.ko
deleted file mode 100644
index 5929e86482..0000000000
--- a/docs/manual/programs/httpd.xml.ko
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="httpd.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>httpd - ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ ¼­¹ö</title>
-
-<summary>
- <p><code>httpd</code>´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ
- (HTTP) ¼­¹ö ÇÁ·Î±×·¥ÀÌ´Ù. ÀÚü(standalone) µ¥¸ó ÇÁ·Î¼¼½º·Î
- ½ÇÇàÇϵµ·Ï ¼³°èµÇ¾ú´Ù. ¿øÇÑ´Ù¸é ¿äûÀ» ó¸®ÇϱâÀ§ÇØ ÀÚ½Ä
- ÇÁ·Î¼¼½º¿Í ¾²·¹µåµéÀ» ¸¸µç´Ù.</p>
-
- <p>ÀϹÝÀûÀ¸·Î <code>httpd</code>¸¦ Á÷Á¢ ½ÇÇàÇϱ⺸´Ù´Â
- À¯´Ð½º±â¹Ý ½Ã½ºÅÛ¿¡¼­´Â <a
- href="apachectl.html">apachectl</a>À» ÅëÇØ, <a
- href="../platform/windows.html#winsvc">2000, XP¿¡¼­´Â
- ¼­ºñ½º·Î</a>, <a href="../platform/windows.html#wincons">Windows
- 9x¿Í ME¿¡¼­´Â ÄÝ¼Ö ÇÁ·Î±×·¥À¸·Î</a> ½ÇÇàÇØ¾ß ÇÑ´Ù.</p>
-</summary>
-
-<seealso><a href="../invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></seealso>
-<seealso><a href="../stopping.html">¾ÆÆÄÄ¡ Áß´Ü</a></seealso>
-<seealso><a href="../configuring.html">¼³Á¤ÆÄÀÏ</a></seealso>
-<seealso><a href="../platform/">Ç÷¡Æûº° ¹®¼­</a></seealso>
-<seealso><a href="apachectl.html">apachectl</a></seealso>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>httpd</strong> [ -<strong>d</strong>
- <var>serverroot</var> ] [ -<strong>f</strong> <var>config</var> ]
- [ -<strong>C</strong> <var>directive</var> ] [ -<strong>c</strong>
- <var>directive</var> ] [ -<strong>D</strong> <var>parameter</var> ]
- [ -<strong>e</strong> <var>level</var> ] [ -<strong>E</strong>
- <var>file</var> ] [ <strong>-k</strong> start|restart|graceful|stop ]
- [ -<strong>R</strong> <var>directory</var> ] [ -<strong>h</strong> ]
- [ -<strong>l</strong> ] [ -<strong>L</strong> ] [ -<strong>S</strong> ]
- [ -<strong>t</strong> ] [ -<strong>v</strong> ] [ -<strong>V</strong> ]
- [ -<strong>X</strong> ] [ -<strong>M</strong> ]</code></p>
-
- <p><a href="../platform/windows.html">Windows ½Ã½ºÅÛ</a>¿¡¼­´Â
- ´ÙÀ½ ¾Æ±Ô¸ÕÆ®¸¦ Ãß°¡·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
- <p><code><strong>httpd</strong> [ -<strong>k</strong>
- install|config|uninstall ] [ -<strong>n</strong> <var>name</var> ]
- [ -<strong>w</strong> ]</code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
-
-<dl>
-<dt><code>-d <var>serverroot</var></code></dt>
-
-<dd><directive module="core">ServerRoot</directive> Áö½Ã¾îÀÇ
-±âº»°ªÀ» <var>serverroot</var>·Î ¼³Á¤ÇÑ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­ ServerRoot
-Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀÌ °ªÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ±âº»°ªÀº
-<code>/usr/local/apache2</code>ÀÌ´Ù.</dd>
-
-<dt><code>-f <var>config</var></code></dt>
-
-<dd>½ÃÀÛÇÒ¶§ <var>config</var> ÆÄÀÏ¿¡ ÀÖ´Â Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.
-<var>config</var>°¡ /·Î ½ÃÀÛÇÏÁö ¾ÊÀ¸¸é <directive
-module="core">ServerRoot</directive>¿¡ »ó´ë°æ·ÎÀÌ´Ù. ±âº»°ªÀº
-<code>conf/httpd.conf</code>ÀÌ´Ù.</dd>
-
-<dt><code>-k <code>start|restart|graceful|stop</code></code></dt>
-
-<dd><code>httpd</code>¸¦ ½ÃÀÛ, Àç½ÃÀÛ, Áß´ÜÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â
-<a href="../stopping.html">¾ÆÆÄÄ¡ Áß´ÜÇϱâ</a>¸¦ Âü°íÇ϶ó.</dd>
-
-<dt><code>-C <var>directive</var></code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀ» ÀбâÀü¿¡ <var>directive</var> Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù.</dd>
-
-<dt><code>-c <var>directive</var></code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀ» ÀбâÀü¿¡ <var>directive</var> Áö½Ã¾î¸¦ ó¸®ÇÑ´Ù.</dd>
-
-
-<dt><code>-D <var>parameter</var></code></dt>
-
-<dd>¼­¹ö ½ÃÀÛ È¤Àº Àç½ÃÀ۽à ¼±ÅÃÀûÀ¸·Î ¸í·É¾î¸¦ ó¸®ÇϱâÀ§ÇØ
-¼³Á¤ÆÄÀÏÀÇ <directive type="section" module="core">IfDefine</directive>
-¼½¼Ç¿¡ »ç¿ëÇÒ <var>parameter</var>¸¦ ¼³Á¤ÇÑ´Ù.</dd>
-
-<dt><code>-e <var>level</var></code></dt>
-
-<dd>¼­¹ö°¡ ½ÃÀÛÇϴµ¿¾È <directive module="core">LogLevel</directive>À»
-<var>level</var>·Î ¼³Á¤ÇÑ´Ù. ÀÌ´Â ½ÃÀÛÁß ¹®Á¦¸¦ ã±âÀ§ÇØ Àá½Ã
-´õ ÀÚ¼¼ÇÑ ¿À·ù¹®À» ¾òÀ»¶§ À¯¿ëÇÏ´Ù.</dd>
-
-<dt><code>-E <var>file</var></code></dt>
-
-<dd>¼­¹ö°¡ ½ÃÀÛÇϴµ¿¾È <var>file</var>·Î ¿À·ù¹®À» º¸³½´Ù.</dd>
-
-<dt><code>-R <var>directory</var></code></dt>
-
-<dd>¼­¹ö¸¦ <code>SHARED_CORE</code> ±ÔÄ¢À» »ç¿ëÇÏ¿© ÄÄÆÄÀÏÇÑ
-°æ¿ì °øÀ¯¿ÀºêÁ§Æ®ÆÄÀÏ <var>directory</var>¸¦ ÁöÁ¤ÇÑ´Ù.</dd>
-
-<dt><code>-h</code></dt>
-
-<dd>»ç¿ëÇÒ ¼ö ÀÖ´Â ¸í·ÉÇà ¿É¼ÇµéÀÇ ÂªÀº ¿ä¾àÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-l</code></dt>
-
-<dd>¼­¹ö¿¡ °°ÀÌ ÄÄÆÄÀÏÇÑ ¸ðµâ ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù. <directive
-module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î
-ÀоîµéÀÌ´Â ¸ðµâÀº Ãâ·ÂÇÏÁö <strong>¾Ê´Â´Ù</strong>.</dd>
-
-<dt><code>-L</code></dt>
-
-<dd>Áö½Ã¾î ¸ñ·ÏÀ» Áö½Ã¾î°¡ ¹Þ´Â ¾Æ±Ô¸ÕÆ®¿Í Áö½Ã¾î »ç¿ëÀå¼Ò¿Í
-°°ÀÌ Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-M</code></dt>
-
-<dd>ÀоîµéÀÎ Á¤Àû ¸ðµâ°ú °øÀ¯ ¸ðµâ ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-S</code></dt>
-
-<dd>¼³Á¤ÆÄÀÏ¿¡¼­ ÀоîµéÀÎ ¼³Á¤À» º¸¿©ÁØ´Ù (ÇöÀç´Â °¡»óÈ£½ºÆ®
-¼³Á¤¸¸À» º¸¿©ÁØ´Ù).</dd>
-
-<dt><code>-t</code></dt>
-
-<dd>¼³Á¤ÆÄÀÏÀÇ ¹®¹ý°Ë»ç¸¸ ÇÑ´Ù. ÇÁ·Î±×·¥Àº ¹®¹ýÀ» °Ë»çÇÑÈÄ
-(¹®¹ýÀÌ ¿Ã¹Ù¸¥ °æ¿ì) 0À̳ª (¹®¹ý¿¡ ¹®Á¦°¡ ÀÖ´Â °æ¿ì) 0ÀÌ ¾Æ´Ñ
-Á¾·áÄÚµå·Î Áï½Ã Á¾·áÇÑ´Ù. -D <var>DUMP</var>_<var>VHOSTS</var>À»
-»ç¿ëÇÏ¸é °¡»óÈ£½ºÆ® ¼³Á¤À» ÀÚ¼¼È÷ Ãâ·ÂÇÑ´Ù. -D
-<var>DUMP</var>_<var>MODULES</var>¸¦ »ç¿ëÇϸé ÀоîµéÀÎ ¸ðµâ
-¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù.</dd>
-
-<dt><code>-v</code></dt>
-
-<dd><code>httpd</code>ÀÇ ¹öÀüÀ» Ãâ·ÂÇÏ°í Á¾·áÇÑ´Ù.</dd>
-
-<dt><code>-V</code></dt>
-
-<dd><code>httpd</code>ÀÇ ¹öÀü°ú ÄÄÆÄÀÏ ÆĶó¹ÌÅ͸¦ Ãâ·ÂÇÏ°í
-Á¾·áÇÑ´Ù.</dd>
-
-<dt><code>-X</code></dt>
-
-<dd>µð¹ö±× »óÅ·ΠÀ¥¼­¹ö¸¦ ½ÇÇàÇÑ´Ù. ¿ÀÁ÷ ÇÑ ÇÁ·Î¼¼½º³ª ¾²·¹µå·Î¸¸
-¼­ºñ½ºÇÏ°í, ¼­¹ö´Â Äֿܼ¡¼­ ¶³¾îÁöÁö ¾Ê´Â´Ù.</dd>
-
-</dl>
-
-<p>´ÙÀ½ ¾Æ±Ô¸ÕÆ®´Â <a href="../platform/windows.html">Windows
-Ç÷¡Æû</a>¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù:</p>
-
-<dl>
-
-<dt><code>-k install|config|uninstall</code></dt>
-
-<dd>¾ÆÆÄÄ¡¸¦ Windows NT ¼­ºñ½º·Î ¼³Ä¡ÇÑ´Ù; ¾ÆÆÄÄ¡ ¼­ºñ½ºÀÇ ½ÃÀÛ
-¿É¼ÇÀ» ¼öÁ¤ÇÑ´Ù; ¾ÆÆÄÄ¡ ¼­ºñ½º ¼³Ä¡¸¦ Áö¿î´Ù.</dd>
-
-<dt><code>-n <var>name</var></code></dt>
-
-<dd>¾ÆÆÄÄ¡ ¼­ºñ½ºÀÇ <var>name</var>.</dd>
-
-<dt><code>-w</code></dt>
-
-<dd>¿À·ù°¡ ¹ß»ýÇϸé ÄܼÖâÀ» ¿­¾î¼­ ¿À·ù¹®À» º¸¿©ÁØ´Ù.</dd>
-
-</dl>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/httpd.xml.meta b/docs/manual/programs/httpd.xml.meta
deleted file mode 100644
index c41c79d11c..0000000000
--- a/docs/manual/programs/httpd.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>httpd</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/index.html b/docs/manual/programs/index.html
deleted file mode 100755
index 37d824cf97..0000000000
--- a/docs/manual/programs/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/index.html.en b/docs/manual/programs/index.html.en
deleted file mode 100644
index dda72c3dba..0000000000
--- a/docs/manual/programs/index.html.en
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Server and Supporting Programs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Server and Supporting Programs</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/programs/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/programs/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This page documents all the executable programs included
- with the Apache HTTP Server.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="index" id="index">Index</a></h2>
-
- <dl>
- <dt><a href="httpd.html">httpd</a></dt>
-
- <dd>Apache hypertext transfer protocol server</dd>
-
- <dt><a href="apachectl.html">apachectl</a></dt>
-
- <dd>Apache HTTP server control interface</dd>
-
- <dt><a href="ab.html">ab</a></dt>
-
- <dd>Apache HTTP server benchmarking tool</dd>
-
- <dt><a href="apxs.html">apxs</a></dt>
-
- <dd>APache eXtenSion tool</dd>
-
- <dt><a href="configure.html">configure</a></dt>
-
- <dd>Configure the source tree</dd>
-
- <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
- <dd>Create and update user authentication files in DBM format
- for basic authentication</dd>
-
- <dt><a href="htdigest.html">htdigest</a></dt>
-
- <dd>Create and update user authentication files for digest
- authentication</dd>
-
- <dt><a href="htpasswd.html">htpasswd</a></dt>
-
- <dd>Create and update user authentication files for basic
- authentication</dd>
-
- <dt><a href="logresolve.html">logresolve</a></dt>
-
- <dd>Resolve hostnames for IP-addresses in Apache
- logfiles</dd>
-
- <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
- <dd>Rotate Apache logs without having to kill the server</dd>
-
- <dt><a href="suexec.html">suexec</a></dt>
-
- <dd>Switch User For Exec</dd>
-
- <dt><a href="other.html">Other Programs</a></dt>
- <dd>Support tools with no own manual page.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/programs/" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/programs/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/index.html.es b/docs/manual/programs/index.html.es
deleted file mode 100644
index 099b191ec4..0000000000
--- a/docs/manual/programs/index.html.es
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>El Servidor Apache y Programas de Soporte - Servidor HTTP Apache</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="../">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>El Servidor Apache y Programas de Soporte</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="../en/programs/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/programs/" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/programs/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Esta página contiene toda la documentación sobre los programas
- ejecutables incluidos en el servidor Apache.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="index" id="index">Índice</a></h2>
-
- <dl>
- <dt><a href="httpd.html">httpd</a></dt>
-
- <dd>Servidor Apache del Protocolo de Transmisión de
- Hipertexto (HTTP)</dd>
-
- <dt><a href="apachectl.html">apachectl</a></dt>
-
- <dd>Interfaz de control del servidor HTTP Apache </dd>
-
- <dt><a href="ab.html">ab</a></dt>
-
- <dd>Herramienta de benchmarking del Servidor HTTP Apache</dd>
-
- <dt><a href="apxs.html">apxs</a></dt>
-
- <dd>Herramienta de Extensión de Apache</dd>
-
- <dt><a href="configure.html">configure</a></dt>
-
- <dd>Configuración de la estructura de directorios de Apache</dd>
-
- <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
- <dd>Crea y actualiza los archivos de autentificación de usuarios
- en formato DBM para autentificación básica</dd>
-
- <dt><a href="htdigest.html">htdigest</a></dt>
-
- <dd>Crea y actualiza los ficheros de autentificación de usuarios
- para autentificación tipo digest</dd>
-
- <dt><a href="htpasswd.html">htpasswd</a></dt>
-
- <dd>Crea y actualiza los ficheros de autentificación de usuarios
- para autentificación básica</dd>
-
- <dt><a href="logresolve.html">logresolve</a></dt>
-
- <dd>Resuelve los nombres de host para direcciones IP que estén
- en los ficheros log de Apache</dd>
-
- <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
- <dd>Renueva los logs de Apache sin parar el servidor</dd>
-
- <dt><a href="suexec.html">suexec</a></dt>
-
- <dd>Switch User For Exec. Programa para cambiar la identidad de
- usuario con la que se ejecuta un CGI</dd>
-
- <dt><a href="other.html">Otros Programas</a></dt>
- <dd>Herramientas de soporte sin sección propia en la
- documentación.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="../en/programs/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/programs/" title="Español">&nbsp;es&nbsp;</a> |
-<a href="../ko/programs/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="../faq/">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/index.html.ko.euc-kr b/docs/manual/programs/index.html.ko.euc-kr
deleted file mode 100644
index 788e985f1b..0000000000
--- a/docs/manual/programs/index.html.ko.euc-kr
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/programs/" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ko/programs/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ Æ÷ÇÔµÈ ÇÁ·Î±×·¥µéÀÌ´Ù.</p>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="index" id="index">¸ñ·Ï</a></h2>
-
- <dl>
- <dt><a href="httpd.html">httpd</a></dt>
-
- <dd>¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ ¼­¹ö</dd>
-
- <dt><a href="apachectl.html">apachectl</a></dt>
-
- <dd>¾ÆÆÄÄ¡ À¥¼­¹ö Á¶Àý ÀÎÅÍÆäÀ̽º</dd>
-
- <dt><a href="ab.html">ab</a></dt>
-
- <dd>¾ÆÆÄÄ¡ À¥¼­¹ö ¼º´É°Ë»ç µµ±¸</dd>
-
- <dt><a href="apxs.html">apxs</a></dt>
-
- <dd>¾ÆÆÄÄ¡ È®Àå µµ±¸ (APache eXtenSion tool)</dd>
-
- <dt><a href="configure.html">configure</a></dt>
-
- <dd>¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù</dd>
-
- <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
- <dd>basic authentication¿¡ »ç¿ëÇÒ DBM Çü½ÄÀÇ »ç¿ëÀÚ
- ÀÎÁõÆÄÀÏÀ» ¸¸µé°í ¼öÁ¤ÇÑ´Ù</dd>
-
- <dt><a href="htdigest.html">htdigest</a></dt>
-
- <dd>digest authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ÀÎÁõÆÄÀÏÀ»
- ¸¸µé°í ¼öÁ¤ÇÑ´Ù</dd>
-
- <dt><a href="htpasswd.html">htpasswd</a></dt>
-
- <dd>basic authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ÀÎÁõÆÄÀÏÀ» ¸¸µé°í
- ¼öÁ¤ÇÑ´Ù</dd>
-
- <dt><a href="logresolve.html">logresolve</a></dt>
-
- <dd>¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀÇ IP-ÁÖ¼Ò¸¦ È£½ºÆ®¸íÀ¸·Î º¯È¯ÇÑ´Ù</dd>
-
- <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
- <dd>¼­¹ö¸¦ Á×ÀÌÁö¾Ê°í ¾ÆÆÄÄ¡ ·Î±×¸¦ ¼øȯÇÑ´Ù</dd>
-
- <dt><a href="suexec.html">suexec</a></dt>
-
- <dd>½ÇÇàÀ» À§ÇØ »ç¿ëÀÚ¸¦ º¯°æÇÑ´Ù (Switch User For Exec)</dd>
-
- <dt><a href="other.html">´Ù¸¥ ÇÁ·Î±×·¥µé</a></dt>
- <dd>manpage°¡ ¾ø´Â Áö¿ø µµ±¸µé.</dd>
- </dl>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../es/programs/" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="../ko/programs/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/index.xml b/docs/manual/programs/index.xml
deleted file mode 100644
index 0ae900a0ac..0000000000
--- a/docs/manual/programs/index.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>Server and Supporting Programs</title>
-
-<summary>
- <p>This page documents all the executable programs included
- with the Apache HTTP Server.</p>
-</summary>
-
-<section id="index"><title>Index</title>
-
- <dl>
- <dt><a href="httpd.html">httpd</a></dt>
-
- <dd>Apache hypertext transfer protocol server</dd>
-
- <dt><a href="apachectl.html">apachectl</a></dt>
-
- <dd>Apache HTTP server control interface</dd>
-
- <dt><a href="ab.html">ab</a></dt>
-
- <dd>Apache HTTP server benchmarking tool</dd>
-
- <dt><a href="apxs.html">apxs</a></dt>
-
- <dd>APache eXtenSion tool</dd>
-
- <dt><a href="configure.html">configure</a></dt>
-
- <dd>Configure the source tree</dd>
-
- <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
- <dd>Create and update user authentication files in DBM format
- for basic authentication</dd>
-
- <dt><a href="htdigest.html">htdigest</a></dt>
-
- <dd>Create and update user authentication files for digest
- authentication</dd>
-
- <dt><a href="htpasswd.html">htpasswd</a></dt>
-
- <dd>Create and update user authentication files for basic
- authentication</dd>
-
- <dt><a href="logresolve.html">logresolve</a></dt>
-
- <dd>Resolve hostnames for IP-addresses in Apache
- logfiles</dd>
-
- <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
- <dd>Rotate Apache logs without having to kill the server</dd>
-
- <dt><a href="suexec.html">suexec</a></dt>
-
- <dd>Switch User For Exec</dd>
-
- <dt><a href="other.html">Other Programs</a></dt>
- <dd>Support tools with no own manual page.</dd>
- </dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/index.xml.es b/docs/manual/programs/index.xml.es
deleted file mode 100644
index 8426524f64..0000000000
--- a/docs/manual/programs/index.xml.es
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>El Servidor Apache y Programas de Soporte</title>
-
-<summary>
- <p>Esta p&#225;gina contiene toda la documentaci&#243;n sobre los programas
- ejecutables incluidos en el servidor Apache.</p>
-</summary>
-
-<section id="index"><title>&#205;ndice</title>
-
- <dl>
- <dt><a href="httpd.html">httpd</a></dt>
-
- <dd>Servidor Apache del Protocolo de Transmisi&#243;n de
- Hipertexto (HTTP)</dd>
-
- <dt><a href="apachectl.html">apachectl</a></dt>
-
- <dd>Interfaz de control del servidor HTTP Apache </dd>
-
- <dt><a href="ab.html">ab</a></dt>
-
- <dd>Herramienta de benchmarking del Servidor HTTP Apache</dd>
-
- <dt><a href="apxs.html">apxs</a></dt>
-
- <dd>Herramienta de Extensi&#243;n de Apache</dd>
-
- <dt><a href="configure.html">configure</a></dt>
-
- <dd>Configuraci&#243;n de la estructura de directorios de Apache</dd>
-
- <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
- <dd>Crea y actualiza los archivos de autentificaci&#243;n de usuarios
- en formato DBM para autentificaci&#243;n b&#225;sica</dd>
-
- <dt><a href="htdigest.html">htdigest</a></dt>
-
- <dd>Crea y actualiza los ficheros de autentificaci&#243;n de usuarios
- para autentificaci&#243;n tipo digest</dd>
-
- <dt><a href="htpasswd.html">htpasswd</a></dt>
-
- <dd>Crea y actualiza los ficheros de autentificaci&#243;n de usuarios
- para autentificaci&#243;n b&#225;sica</dd>
-
- <dt><a href="logresolve.html">logresolve</a></dt>
-
- <dd>Resuelve los nombres de host para direcciones IP que est&#233;n
- en los ficheros log de Apache</dd>
-
- <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
- <dd>Renueva los logs de Apache sin parar el servidor</dd>
-
- <dt><a href="suexec.html">suexec</a></dt>
-
- <dd>Switch User For Exec. Programa para cambiar la identidad de
- usuario con la que se ejecuta un CGI</dd>
-
- <dt><a href="other.html">Otros Programas</a></dt>
- <dd>Herramientas de soporte sin secci&#243;n propia en la
- documentaci&#243;n.</dd>
- </dl>
-</section>
-
-</manualpage>
-
-
diff --git a/docs/manual/programs/index.xml.ko b/docs/manual/programs/index.xml.ko
deleted file mode 100644
index 7a08f7ea97..0000000000
--- a/docs/manual/programs/index.xml.ko
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</title>
-
-<summary>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ Æ÷ÇÔµÈ ÇÁ·Î±×·¥µéÀÌ´Ù.</p>
-</summary>
-
-<section id="index"><title>¸ñ·Ï</title>
-
- <dl>
- <dt><a href="httpd.html">httpd</a></dt>
-
- <dd>¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ ¼­¹ö</dd>
-
- <dt><a href="apachectl.html">apachectl</a></dt>
-
- <dd>¾ÆÆÄÄ¡ À¥¼­¹ö Á¶Àý ÀÎÅÍÆäÀ̽º</dd>
-
- <dt><a href="ab.html">ab</a></dt>
-
- <dd>¾ÆÆÄÄ¡ À¥¼­¹ö ¼º´É°Ë»ç µµ±¸</dd>
-
- <dt><a href="apxs.html">apxs</a></dt>
-
- <dd>¾ÆÆÄÄ¡ È®Àå µµ±¸ (APache eXtenSion tool)</dd>
-
- <dt><a href="configure.html">configure</a></dt>
-
- <dd>¼Ò½º Æ®¸®¸¦ ±¸¼ºÇÑ´Ù</dd>
-
- <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
- <dd>basic authentication¿¡ »ç¿ëÇÒ DBM Çü½ÄÀÇ »ç¿ëÀÚ
- ÀÎÁõÆÄÀÏÀ» ¸¸µé°í ¼öÁ¤ÇÑ´Ù</dd>
-
- <dt><a href="htdigest.html">htdigest</a></dt>
-
- <dd>digest authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ÀÎÁõÆÄÀÏÀ»
- ¸¸µé°í ¼öÁ¤ÇÑ´Ù</dd>
-
- <dt><a href="htpasswd.html">htpasswd</a></dt>
-
- <dd>basic authentication¿¡ »ç¿ëÇÒ »ç¿ëÀÚ ÀÎÁõÆÄÀÏÀ» ¸¸µé°í
- ¼öÁ¤ÇÑ´Ù</dd>
-
- <dt><a href="logresolve.html">logresolve</a></dt>
-
- <dd>¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀÇ IP-ÁÖ¼Ò¸¦ È£½ºÆ®¸íÀ¸·Î º¯È¯ÇÑ´Ù</dd>
-
- <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
- <dd>¼­¹ö¸¦ Á×ÀÌÁö¾Ê°í ¾ÆÆÄÄ¡ ·Î±×¸¦ ¼øȯÇÑ´Ù</dd>
-
- <dt><a href="suexec.html">suexec</a></dt>
-
- <dd>½ÇÇàÀ» À§ÇØ »ç¿ëÀÚ¸¦ º¯°æÇÑ´Ù (Switch User For Exec)</dd>
-
- <dt><a href="other.html">´Ù¸¥ ÇÁ·Î±×·¥µé</a></dt>
- <dd>manpage°¡ ¾ø´Â Áö¿ø µµ±¸µé.</dd>
- </dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/index.xml.meta b/docs/manual/programs/index.xml.meta
deleted file mode 100644
index 4f2f94c82c..0000000000
--- a/docs/manual/programs/index.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/logresolve.html b/docs/manual/programs/logresolve.html
deleted file mode 100644
index 6c1b8a70bb..0000000000
--- a/docs/manual/programs/logresolve.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: logresolve.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: logresolve.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/logresolve.html.en b/docs/manual/programs/logresolve.html.en
deleted file mode 100644
index d4bc8889e3..0000000000
--- a/docs/manual/programs/logresolve.html.en
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>logresolve - Resolve IP-addresses to hostnames in Apache
- log files - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>logresolve - Resolve IP-addresses to hostnames in Apache
- log files</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/logresolve.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/logresolve.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>logresolve</code> is a post-processing program to
- resolve IP-addresses in Apache's access logfiles. To minimize
- impact on your nameserver, logresolve has its very own internal
- hash-table cache. This means that each IP number will only be
- looked up the first time it is found in the log file.</p>
-
- <p>Takes an Apache log file on standard input. The IP addresses
- must be the first thing on each line and must be seperated from
- the remainder of the line by a space.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
-
- <p><code><strong>logresolve</strong> [ -<strong>s</strong>
- <var>filename</var> ] [ -<strong>c</strong> ] &lt;
- <var>access_log</var> &gt; <var>access_log.new</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
-
-<dl>
-
-<dt><code>-s <var>filename</var></code></dt>
-
-<dd>Specifies a filename to record statistics.</dd>
-
-<dt><code>-c</code></dt>
-
-<dd>This causes <code>logresolve</code> to apply some DNS checks:
-after finding the hostname from the IP address, it looks up the IP
-addresses for the hostname and checks that one of these matches the
-original address.</dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/logresolve.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/logresolve.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/logresolve.html.ko.euc-kr b/docs/manual/programs/logresolve.html.ko.euc-kr
deleted file mode 100644
index 9c50178645..0000000000
--- a/docs/manual/programs/logresolve.html.ko.euc-kr
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>logresolve - ¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀÇ IP-ÁÖ¼Ò¸¦ È£½ºÆ®¸íÀ¸·Î
- º¯È¯ÇÑ´Ù - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>logresolve - ¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀÇ IP-ÁÖ¼Ò¸¦ È£½ºÆ®¸íÀ¸·Î
- º¯È¯ÇÑ´Ù</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/logresolve.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/logresolve.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>logresolve</code>´Â ¾ÆÆÄÄ¡ Á¢±Ù·Î±×ÆÄÀÏ¿¡ ÀÖ´Â
- IP-ÁÖ¼Ò¸¦ ã´Â ÈÄó¸® ÇÁ·Î±×·¥ÀÌ´Ù. ³×ÀÓ¼­¹öÀÇ ºÎÇϸ¦
- ÃÖ¼ÒÈ­ÇϱâÀ§ÇØ logresolve´Â ³»ºÎÀûÀ¸·Î Çؽ¬Å×À̺í ij½¬¸¦
- »ç¿ëÇÑ´Ù. Áï, IP ÁÖ¼Ò°¡ ·Î±×ÆÄÀÏ¿¡ óÀ½ ³ª¿Ã¶§¸¸ ã´Â´Ù.</p>
-
- <p>Ç¥ÁØÀÔ·ÂÀ¸·Î ¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀ» Àд´Ù. °¢ ÁÙÀÇ Ã¹¹ø°
- Ç׸ñÀÌ IP ÁÖ¼ÒÀÌ°í, ³ª¸ÓÁö ºÎºÐ°ú °ø¹éÀ¸·Î ±¸ºÐµÇ¾ß ÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
-
- <p><code><strong>logresolve</strong> [ -<strong>s</strong>
- <var>filename</var> ] [ -<strong>c</strong> ] &lt;
- <var>access_log</var> &gt; <var>access_log.new</var></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
-
-<dl>
-
-<dt><code>-s <var>filename</var></code></dt>
-
-<dd>Åë°è¸¦ ±â·ÏÇÒ ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.</dd>
-
-<dt><code>-c</code></dt>
-
-<dd><code>logresolve</code>°¡ ¸î°¡Áö DNS °Ë»ç¸¦ Çϵµ·Ï ÇÑ´Ù:
-IP ÁּҷΠȣ½ºÆ®¸íÀ» ãÀºÈÄ ±× È£½ºÆ®¸íÀ¸·Î ´Ù½Ã IP ÁÖ¼ÒµéÀ»
-ã¾Æ¼­ ±×Áß Çϳª°¡ ¿ø·¡ ÁÖ¼Ò¿Í ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇÑ´Ù.</dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/logresolve.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/logresolve.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/logresolve.xml b/docs/manual/programs/logresolve.xml
deleted file mode 100644
index 43ebfe9cd9..0000000000
--- a/docs/manual/programs/logresolve.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="logresolve.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>logresolve - Resolve IP-addresses to hostnames in Apache
- log files</title>
-
-<summary>
- <p><code>logresolve</code> is a post-processing program to
- resolve IP-addresses in Apache's access logfiles. To minimize
- impact on your nameserver, logresolve has its very own internal
- hash-table cache. This means that each IP number will only be
- looked up the first time it is found in the log file.</p>
-
- <p>Takes an Apache log file on standard input. The IP addresses
- must be the first thing on each line and must be seperated from
- the remainder of the line by a space.</p>
-</summary>
-
-<section id="synopsis"><title>Synopsis</title>
-
- <p><code><strong>logresolve</strong> [ -<strong>s</strong>
- <var>filename</var> ] [ -<strong>c</strong> ] &lt;
- <var>access_log</var> &gt; <var>access_log.new</var></code></p>
-</section>
-
-
-<section id="options"><title>Options</title>
-
-<dl>
-
-<dt><code>-s <var>filename</var></code></dt>
-
-<dd>Specifies a filename to record statistics.</dd>
-
-<dt><code>-c</code></dt>
-
-<dd>This causes <code>logresolve</code> to apply some DNS checks:
-after finding the hostname from the IP address, it looks up the IP
-addresses for the hostname and checks that one of these matches the
-original address.</dd>
-
-</dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/logresolve.xml.ko b/docs/manual/programs/logresolve.xml.ko
deleted file mode 100644
index 24210e1cfd..0000000000
--- a/docs/manual/programs/logresolve.xml.ko
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="logresolve.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>logresolve - ¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀÇ IP-ÁÖ¼Ò¸¦ È£½ºÆ®¸íÀ¸·Î
- º¯È¯ÇÑ´Ù</title>
-
-<summary>
- <p><code>logresolve</code>´Â ¾ÆÆÄÄ¡ Á¢±Ù·Î±×ÆÄÀÏ¿¡ ÀÖ´Â
- IP-ÁÖ¼Ò¸¦ ã´Â ÈÄó¸® ÇÁ·Î±×·¥ÀÌ´Ù. ³×ÀÓ¼­¹öÀÇ ºÎÇϸ¦
- ÃÖ¼ÒÈ­ÇϱâÀ§ÇØ logresolve´Â ³»ºÎÀûÀ¸·Î Çؽ¬Å×À̺í ij½¬¸¦
- »ç¿ëÇÑ´Ù. Áï, IP ÁÖ¼Ò°¡ ·Î±×ÆÄÀÏ¿¡ óÀ½ ³ª¿Ã¶§¸¸ ã´Â´Ù.</p>
-
- <p>Ç¥ÁØÀÔ·ÂÀ¸·Î ¾ÆÆÄÄ¡ ·Î±×ÆÄÀÏÀ» Àд´Ù. °¢ ÁÙÀÇ Ã¹¹ø°
- Ç׸ñÀÌ IP ÁÖ¼ÒÀÌ°í, ³ª¸ÓÁö ºÎºÐ°ú °ø¹éÀ¸·Î ±¸ºÐµÇ¾ß ÇÑ´Ù.</p>
-</summary>
-
-<section id="synopsis"><title>°³¿ä</title>
-
- <p><code><strong>logresolve</strong> [ -<strong>s</strong>
- <var>filename</var> ] [ -<strong>c</strong> ] &lt;
- <var>access_log</var> &gt; <var>access_log.new</var></code></p>
-</section>
-
-
-<section id="options"><title>¿É¼Ç</title>
-
-<dl>
-
-<dt><code>-s <var>filename</var></code></dt>
-
-<dd>Åë°è¸¦ ±â·ÏÇÒ ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù.</dd>
-
-<dt><code>-c</code></dt>
-
-<dd><code>logresolve</code>°¡ ¸î°¡Áö DNS °Ë»ç¸¦ Çϵµ·Ï ÇÑ´Ù:
-IP ÁּҷΠȣ½ºÆ®¸íÀ» ãÀºÈÄ ±× È£½ºÆ®¸íÀ¸·Î ´Ù½Ã IP ÁÖ¼ÒµéÀ»
-ã¾Æ¼­ ±×Áß Çϳª°¡ ¿ø·¡ ÁÖ¼Ò¿Í ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇÑ´Ù.</dd>
-
-</dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/logresolve.xml.meta b/docs/manual/programs/logresolve.xml.meta
deleted file mode 100644
index 7e0922e7db..0000000000
--- a/docs/manual/programs/logresolve.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>logresolve</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/other.html b/docs/manual/programs/other.html
deleted file mode 100755
index 2f9477404b..0000000000
--- a/docs/manual/programs/other.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: other.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: other.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/other.html.en b/docs/manual/programs/other.html.en
deleted file mode 100644
index 2f4113d8eb..0000000000
--- a/docs/manual/programs/other.html.en
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Other Programs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>Other Programs</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/other.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/other.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The following programs are simple support programs included with the
- Apache HTTP Server which do not have their own manual pages. They are not
- installed automatically. You can find them after the configuration process
- in the <code>support/</code> directory.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#log_server_status">log_server_status</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#split-logfile">split-logfile</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="log_server_status" id="log_server_status">log_server_status</a></h2>
- <p>This perl script is designed to be run at a frequent interval by
- something like cron. It connects to the server and downloads the status
- information. It reformats the information to a single line and logs it to
- a file. Adjust the variables at the top of the script to specify the
- location of the resulting logfile.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="split-logfile" id="split-logfile">split-logfile</a></h2>
- <p>This perl script will take a combined Web server access log file and
- break its contents into separate files. It assumes that the first field of
- each line is the virtual host identity (put there by "<code>%v</code>"), and
- that the logfiles should be named that + "<code>.log</code>" in the current
- directory.</p>
-
- <p>The combined log file is read from stdin. Records read will be appended
- to any existing log files.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/other.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/other.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/other.html.ko.euc-kr b/docs/manual/programs/other.html.ko.euc-kr
deleted file mode 100644
index 11ddee4d82..0000000000
--- a/docs/manual/programs/other.html.ko.euc-kr
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Other Programs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>Other Programs</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/other.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/other.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>´ÙÀ½Àº °£´ÜÇÏ¿© manpage°¡ ¾ø´Â, ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ Æ÷ÇÔµÈ
- Áö¿ø ÇÁ·Î±×·¥µéÀÌ´Ù. ÀÚµ¿À¸·Î À̵éÀ» ¼³Ä¡ÇÏÁö ¾Ê´Â´Ù.
- ±¸¼º°úÁ¤ÈÄ <code>support/</code> µð·ºÅ丮¿¡¼­ ÀÌ ÇÁ·Î±×·¥µéÀ»
- ãÀ» ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#log_server_status">log_server_status</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#split-logfile">split-logfile</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="log_server_status" id="log_server_status">log_server_status</a></h2>
- <p>ÀÌ perl ½ºÅ©¸³Æ®´Â cron µî¿¡¼­ ÀÚÁÖ ½ÇÇàÇϵµ·Ï ¼³°èµÇ¾ú´Ù.
- ÀÌ ½ºÅ©¸³Æ®¸¦ ¼­¹ö¿¡ ¿¬°áÇÏ¿© »óÅ Á¤º¸¸¦ ´Ù¿î·ÎµåÇÑ´Ù.
- ±×·±ÈÄ ÀÌ Á¤º¸¸¦ ÇÑÁÙ·Î Á¤¸®ÇÏ¿© ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù. ·Î±×ÆÄÀÏÀÇ
- À§Ä¡¸¦ ÁöÁ¤ÇÏ·Á¸é ½ºÅ©¸³Æ® ¾ÕºÎºÐÀÇ º¯¼ö¸¦ ¼öÁ¤ÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="split-logfile" id="split-logfile">split-logfile</a></h2>
- <p>ÀÌ perl ½ºÅ©¸³Æ®´Â °áÇÕµÈ À¥¼­¹ö Á¢±Ù·Î±×ÆÄÀÏÀÇ ³»¿ëÀ»
- ¿©·¯ ÆÄÀÏ·Î ³ª´«´Ù. °¢ ÁÙÀÇ Ã¹¹ø° Ç׸ñÀÌ ("<code>%v</code>"·Î
- Ãß°¡ÇÑ) °¡»óÈ£½ºÆ® Á¤º¸ÀÌ°í, ·Î±×ÆÄÀϸíÀº ÇöÀç µð·ºÅ丮¿¡
- °¡»óÈ£½ºÆ®¸í + "<code>.log</code>"¶ó°í °¡Á¤ÇÑ´Ù.</p>
-
- <p>°áÇÕµÈ ·Î±×ÆÄÀÏÀ» Ç¥ÁØÀÔ·ÂÀ¸·Î Àд´Ù. ÀÐÀº ³»¿ëÀ» ±âÁ¸ÀÇ
- ·Î±×ÆÄÀϵ鿡 Ãß°¡ÇÑ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/other.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/other.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/other.xml b/docs/manual/programs/other.xml
deleted file mode 100644
index a567a4e094..0000000000
--- a/docs/manual/programs/other.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.4 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="other.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>Other Programs</title>
-
-<summary>
- <p>The following programs are simple support programs included with the
- Apache HTTP Server which do not have their own manual pages. They are not
- installed automatically. You can find them after the configuration process
- in the <code>support/</code> directory.</p>
-</summary>
-
-<section id="log_server_status"><title>log_server_status</title>
- <p>This perl script is designed to be run at a frequent interval by
- something like cron. It connects to the server and downloads the status
- information. It reformats the information to a single line and logs it to
- a file. Adjust the variables at the top of the script to specify the
- location of the resulting logfile.</p>
-</section>
-
-<section id="split-logfile"><title>split-logfile</title>
- <p>This perl script will take a combined Web server access log file and
- break its contents into separate files. It assumes that the first field of
- each line is the virtual host identity (put there by "<code>%v</code>"), and
- that the logfiles should be named that + "<code>.log</code>" in the current
- directory.</p>
-
- <p>The combined log file is read from stdin. Records read will be appended
- to any existing log files.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/other.xml.ko b/docs/manual/programs/other.xml.ko
deleted file mode 100644
index 053c2dbee6..0000000000
--- a/docs/manual/programs/other.xml.ko
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.4 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="other.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>Other Programs</title>
-
-<summary>
- <p>´ÙÀ½Àº °£´ÜÇÏ¿© manpage°¡ ¾ø´Â, ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡ Æ÷ÇÔµÈ
- Áö¿ø ÇÁ·Î±×·¥µéÀÌ´Ù. ÀÚµ¿À¸·Î À̵éÀ» ¼³Ä¡ÇÏÁö ¾Ê´Â´Ù.
- ±¸¼º°úÁ¤ÈÄ <code>support/</code> µð·ºÅ丮¿¡¼­ ÀÌ ÇÁ·Î±×·¥µéÀ»
- ãÀ» ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<section id="log_server_status"><title>log_server_status</title>
- <p>ÀÌ perl ½ºÅ©¸³Æ®´Â cron µî¿¡¼­ ÀÚÁÖ ½ÇÇàÇϵµ·Ï ¼³°èµÇ¾ú´Ù.
- ÀÌ ½ºÅ©¸³Æ®¸¦ ¼­¹ö¿¡ ¿¬°áÇÏ¿© »óÅ Á¤º¸¸¦ ´Ù¿î·ÎµåÇÑ´Ù.
- ±×·±ÈÄ ÀÌ Á¤º¸¸¦ ÇÑÁÙ·Î Á¤¸®ÇÏ¿© ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù. ·Î±×ÆÄÀÏÀÇ
- À§Ä¡¸¦ ÁöÁ¤ÇÏ·Á¸é ½ºÅ©¸³Æ® ¾ÕºÎºÐÀÇ º¯¼ö¸¦ ¼öÁ¤ÇÑ´Ù.</p>
-</section>
-
-<section id="split-logfile"><title>split-logfile</title>
- <p>ÀÌ perl ½ºÅ©¸³Æ®´Â °áÇÕµÈ À¥¼­¹ö Á¢±Ù·Î±×ÆÄÀÏÀÇ ³»¿ëÀ»
- ¿©·¯ ÆÄÀÏ·Î ³ª´«´Ù. °¢ ÁÙÀÇ Ã¹¹ø° Ç׸ñÀÌ ("<code>%v</code>"·Î
- Ãß°¡ÇÑ) °¡»óÈ£½ºÆ® Á¤º¸ÀÌ°í, ·Î±×ÆÄÀϸíÀº ÇöÀç µð·ºÅ丮¿¡
- °¡»óÈ£½ºÆ®¸í + "<code>.log</code>"¶ó°í °¡Á¤ÇÑ´Ù.</p>
-
- <p>°áÇÕµÈ ·Î±×ÆÄÀÏÀ» Ç¥ÁØÀÔ·ÂÀ¸·Î Àд´Ù. ÀÐÀº ³»¿ëÀ» ±âÁ¸ÀÇ
- ·Î±×ÆÄÀϵ鿡 Ãß°¡ÇÑ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/other.xml.meta b/docs/manual/programs/other.xml.meta
deleted file mode 100644
index 172b973c63..0000000000
--- a/docs/manual/programs/other.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>other</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/rotatelogs.html b/docs/manual/programs/rotatelogs.html
deleted file mode 100644
index d4b500ffa0..0000000000
--- a/docs/manual/programs/rotatelogs.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: rotatelogs.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: rotatelogs.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/rotatelogs.html.en b/docs/manual/programs/rotatelogs.html.en
deleted file mode 100644
index fa22d7ba23..0000000000
--- a/docs/manual/programs/rotatelogs.html.en
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>rotatelogs - Piped logging program to rotate Apache logs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>rotatelogs - Piped logging program to rotate Apache logs</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/rotatelogs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/rotatelogs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>rotatelogs</code> is a simple program for use in
- conjunction with Apache's piped logfile feature. For example:</p>
-
-<div class="example"><p><code>
- CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-</code></p></div>
-
- <p>This creates the files /var/logs/logfile.nnnn where nnnn is
- the system time at which the log nominally starts (this time
- will always be a multiple of the rotation time, so you can
- synchronize cron scripts with it). At the end of each rotation
- time (here after 24 hours) a new log is started.</p>
-
-<div class="example"><p><code>
- CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
-</code></p></div>
-
- <p>This configuration will rotate the logfile whenever it reaches
- a size of 5 megabytes.</p>
-
-<div class="example"><p><code>
- ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
-</code></p></div>
- <p>This configuration will rotate the error logfile whenever it
- reaches a size of 5 megabytes, and the suffix to the logfile name
- will be created of the form
- <code>errorlog.YYYY-mm-dd-HH_MM_SS</code>.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#portability">Portability</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
-
- <p><code><strong>rotatelogs</strong>
- [ -<strong>l</strong> ]
- <var>logfile</var>
- [ <var>rotationtime</var> [ <var>offset</var> ]] |
- [ <var>filesize</var>M ]</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
-
-<dl>
-
-<dt><code>-l</code></dt>
-<dd>Causes the use of local time rather than GMT as the base for the
-interval. Note that using <code>-l</code> in an environment which changes the
-GMT offset (such as for BST or DST) can lead to unpredictable results!</dd>
-
-<dt><code><var>logfile</var></code></dt>
-
-<dd>The path plus basename of the logfile. If <var>logfile</var>
-includes any '%' characters, it is treated as a format string for
-<code>strftime(3)</code>. Otherwise, the suffix
-<var>.nnnnnnnnnn</var> is automatically added and is the time in
-seconds. Both formats compute the start time from the beginning of
-the current period.</dd>
-
-<dt><code><var>rotationtime</var></code></dt>
-
-<dd>The time between log file rotations in seconds.</dd>
-
-<dt><code><var>offset</var></code></dt>
-
-<dd>The number of minutes offset from UTC. If omitted, zero is
-assumed and UTC is used. For example, to use local time in the zone
-UTC -5 hours, specify a value of <code>-300</code> for this argument.</dd>
-
-<dt><code><var>filesize</var>M</code></dt>
-
-<dd>The maximum file size in megabytes followed by the letter
-<code>M</code> to specify size rather than time. Use this parameter
-in place of both rotationtime and offset.</dd>
-</dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="portability" id="portability">Portability</a></h2>
-
-<p>The following logfile format string substitutions should be
-supported by all <code>strftime(3)</code> implementations, see
-the <code>strftime(3)</code> man page for library-specific
-extensions.</p>
-
-<table class="bordered"><tr><td><code>%A</code></td><td>full weekday name (localized)</td></tr>
-<tr class="odd"><td><code>%a</code></td><td>3-character weekday name (localized)</td></tr>
-<tr><td><code>%B</code></td><td>full month name (localized)</td></tr>
-<tr class="odd"><td><code>%b</code></td><td>3-character month name (localized)</td></tr>
-<tr><td><code>%c</code></td><td>date and time (localized)</td></tr>
-<tr class="odd"><td><code>%d</code></td><td>2-digit day of month</td></tr>
-<tr><td><code>%H</code></td><td>2-digit hour (24 hour clock)</td></tr>
-<tr class="odd"><td><code>%I</code></td><td>2-digit hour (12 hour clock)</td></tr>
-<tr><td><code>%j</code></td><td>3-digit day of year</td></tr>
-<tr class="odd"><td><code>%M</code></td><td>2-digit minute</td></tr>
-<tr><td><code>%m</code></td><td>2-digit month</td></tr>
-<tr class="odd"><td><code>%p</code></td><td>am/pm of 12 hour clock (localized)</td></tr>
-<tr><td><code>%S</code></td><td>2-digit second</td></tr>
-<tr class="odd"><td><code>%U</code></td><td>2-digit week of year
-(Sunday first day of week)</td></tr>
-<tr><td><code>%W</code></td><td>2-digit week of year
-(Monday first day of week)</td></tr>
-<tr class="odd"><td><code>%w</code></td><td>1-digit weekday
-(Sunday first day of week)</td></tr>
-<tr><td><code>%X</code></td><td>time (localized)</td></tr>
-<tr class="odd"><td><code>%x</code></td><td>date (localized)</td></tr>
-<tr><td><code>%Y</code></td><td>4-digit year</td></tr>
-<tr class="odd"><td><code>%y</code></td><td>2-digit year</td></tr>
-<tr><td><code>%Z</code></td><td>time zone name</td></tr>
-<tr class="odd"><td><code>%%</code></td><td>literal `%'</td></tr>
-</table>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/rotatelogs.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/rotatelogs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/rotatelogs.html.ko.euc-kr b/docs/manual/programs/rotatelogs.html.ko.euc-kr
deleted file mode 100644
index 458a296fd4..0000000000
--- a/docs/manual/programs/rotatelogs.html.ko.euc-kr
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>rotatelogs - ¾ÆÆÄÄ¡ ·Î±×¸¦ ¼øȯÇϱâÀ§ÇØ ÆÄÀÌÇÁ·Î ¿¬°áÇÒ
- ·Î±× ÇÁ·Î±×·¥ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>rotatelogs - ¾ÆÆÄÄ¡ ·Î±×¸¦ ¼øȯÇϱâÀ§ÇØ ÆÄÀÌÇÁ·Î ¿¬°áÇÒ
- ·Î±× ÇÁ·Î±×·¥</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/rotatelogs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/rotatelogs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>rotatelogs</code>´Â ¾ÆÆÄÄ¡ÀÇ ÆÄÀÌÇÁ ·Î±×ÆÄÀÏ ±â´ÉÀ»
- À§ÇÑ °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ¿¹¸¦ µé¾î:</p>
-
-<div class="example"><p><code>
- CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-</code></p></div>
-
- <p>±×·¯¸é /var/logs/logfile.nnnn ÆÄÀÏÀ» ¸¸µç´Ù. nnnnÀº
- ·Î±×¸¦ ½ÃÀÛÇÑ ½Ã½ºÅ۽ð£ÀÌ´Ù (ÀÌ ½Ã°£Àº Ç×»ó ¼øȯ±â°£ÀÇ
- ¹è¼öÀÌ´Ù. ±×·¡¼­ cron ½ºÅ©¸³Æ®·Î ó¸®Çϱ⠽±´Ù). ¼øȯ±â°£
- (¿©±â¼­´Â 24 ½Ã°£) ¸¶´Ù »õ·Î¿î ·Î±×¸¦ ½ÃÀÛÇÑ´Ù.</p>
-
-<div class="example"><p><code>
- CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
-</code></p></div>
-
- <p>ÀÌ ¼³Á¤Àº ·Î±×ÆÄÀÏ Å©±â°¡ 5 ¸Þ°¡¹ÙÀÌÆ®°¡ µÉ¶§¸¶´Ù
- ¼øȯÇÑ´Ù.</p>
-
-<div class="example"><p><code>
- ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
-</code></p></div>
- <p>ÀÌ ¼³Á¤Àº ¿À·ù·Î±× ÆÄÀÏ Å©±â°¡ 5 ¸Þ°¡¹ÙÀÌÆ®°¡ µÉ¶§¸¶´Ù
- <code>errorlog.YYYY-mm-dd-HH_MM_SS</code>¿Í °°Àº ÆÄÀÏÀ»
- ¸¸µé¾î¼­ ¿À·ù·Î±× ÆÄÀÏÀ» ¼øȯÇÑ´Ù.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#portability">Æ÷Æð¡´É¼º</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
-
- <p><code><strong>rotatelogs</strong>
- [ -<strong>l</strong> ]
- <var>logfile</var>
- [ <var>rotationtime</var> [ <var>offset</var> ]] |
- [ <var>filesize</var>M ]</code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
-
-<dl>
-
-<dt><code>-l</code></dt>
-<dd>¼øȯÁÖ±â·Î GMT ´ë½Å Áö¿ª½Ã°£À» »ç¿ëÇÑ´Ù. (BST³ª DST¿Í °°ÀÌ)
-GMT ½Ã°£Â÷°¡ º¯Çϴ ȯ°æ¿¡¼­ <code>-l</code>À» »ç¿ëÇÏ¸é ¿¹±âÄ¡
-¾ÊÀº °á°ú°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù!</dd>
-
-<dt><code><var>logfile</var></code></dt>
-
-<dd>·Î±×ÆÄÀÏÀÇ °æ·Î¿Í À̸§. <var>logfile</var>¿¡ '%' ¹®ÀÚ°¡
-ÀÖ´Ù¸é <code>strftime(3)</code>ÀÇ Çü½Ä¹®ÀÚ¿­°ú °°ÀÌ Ã³¸®ÇÑ´Ù.
-'%' ¹®ÀÚ°¡ ¾ø´Ù¸é µÚ¿¡ ÃÊ´ÜÀ§ ½Ã°£ <var>.nnnnnnnnnn</var>À»
-ÀÚµ¿À¸·Î ºÙÀδÙ. µÎ Çü½Ä ¸ðµÎ ÇöÀç ±â°£ºÎÅÍ ½ÃÀ۽ð£À» °è»êÇÑ´Ù.</dd>
-
-<dt><code><var>rotationtime</var></code></dt>
-
-<dd>·Î±×ÆÄÀÏÀ» ¼øȯÇÒ ÃÊ´ÜÀ§ ½Ã°£.</dd>
-
-<dt><code><var>offset</var></code></dt>
-
-<dd>UTC¿¡¼­ ºÐ´ÜÀ§ ½Ã°£Â÷ÀÌ. »ý·«Çϸé 0À¸·Î °¡Á¤ÇÏ¿© UTC¸¦
-»ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, UTC -5 ½Ã°£´ëÀÇ Áö¿ª½Ã°£À» »ç¿ëÇÑ´Ù¸é
-¾Æ±Ô¸ÕÆ®·Î <code>-300</code>À» ÁöÁ¤ÇÑ´Ù.</dd>
-
-<dt><code><var>filesize</var>M</code></dt>
-
-<dd>½Ã°£ÀÌ ¾Æ´Ñ Å©±â¸¦ ÁöÁ¤ÇÒ¶§ ¸Þ°¡¹ÙÀÌÆ®´ÜÀ§ ÃÖ´ë ÆÄÀÏÅ©±â
-µÚ¿¡ <code>M</code>À» ºÙÀδÙ. rotationtime°ú offset ´ë½Å ÀÌ
-ÆĶó¹ÌÅ͸¦ »ç¿ëÇÑ´Ù.</dd>
-</dl>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="portability" id="portability">Æ÷Æð¡´É¼º</a></h2>
-
-<p>´ÙÀ½ ·Î±×ÆÄÀÏ Çü½Ä¹®ÀÚ¿­ Ç¥ÇöÀº ¸ðµç <code>strftime(3)</code>
-±¸ÇöÀÌ Áö¿øÇØ¾ß ÇÑ´Ù. ¶óÀ̺귯¸® ƯÀ¯ÀÇ È®ÀåÀº
-<code>strftime(3)</code> manpage¸¦ Âü°íÇ϶ó.</p>
-
-<table class="bordered"><tr><td><code>%A</code></td><td>(Áö¿ªÈ­µÈ) ¿ÏÀüÇÑ ¿äÀÏ À̸§</td></tr>
-<tr class="odd"><td><code>%a</code></td><td>(Áö¿ªÈ­µÈ) 3-¹®ÀÚ ¿äÀÏ À̸§</td></tr>
-<tr><td><code>%B</code></td><td>(Áö¿ªÈ­µÈ) ¿ÏÀüÇÑ ´Þ À̸§</td></tr>
-<tr class="odd"><td><code>%b</code></td><td>(Áö¿ªÈ­µÈ) 3-¹®ÀÚ ´Þ À̸§</td></tr>
-<tr><td><code>%c</code></td><td>(Áö¿ªÈ­µÈ) ³¯Â¥¿Í ½Ã°£</td></tr>
-<tr class="odd"><td><code>%d</code></td><td>2-ÀÚ¸® ÀÏ</td></tr>
-<tr><td><code>%H</code></td><td>2-ÀÚ¸® ½Ã°£ (24 ½Ã°£ ½Ã°è)</td></tr>
-<tr class="odd"><td><code>%I</code></td><td>2-ÀÚ¸® ½Ã°£ (12 ½Ã°£ ½Ã°è)</td></tr>
-<tr><td><code>%j</code></td><td>3-ÀÚ¸® ³¯Â¥¼ö</td></tr>
-<tr class="odd"><td><code>%M</code></td><td>2-ÀÚ¸® ºÐ</td></tr>
-<tr><td><code>%m</code></td><td>2-ÀÚ¸® ´Þ</td></tr>
-<tr class="odd"><td><code>%p</code></td><td>(Áö¿ªÈ­µÈ) 12 ½Ã°£ ½Ã°èÀÇ am/pm</td></tr>
-<tr><td><code>%S</code></td><td>2-ÀÚ¸® ÃÊ</td></tr>
-<tr class="odd"><td><code>%U</code></td><td>2-ÀÚ¸® ÁÖÀϼö (ÁÖÀÇ Ã¹¹øÀç ³¯Àº
-ÀÏ¿äÀÏ)</td></tr>
-<tr><td><code>%W</code></td><td>2-ÀÚ¸® ÁÖÀϼö (ÁÖÀÇ Ã¹¹øÀç ³¯Àº
-¿ù¿äÀÏ)</td></tr>
-<tr class="odd"><td><code>%w</code></td><td>1-ÀÚ¸® ¿äÀϼö (ÁÖÀÇ Ã¹¹ø° ³¯Àº
-ÀÏ¿äÀÏ)</td></tr>
-<tr><td><code>%X</code></td><td>(Áö¿ªÈ­µÈ) ½Ã°£</td></tr>
-<tr class="odd"><td><code>%x</code></td><td>(Áö¿ªÈ­µÈ) ³¯Â¥</td></tr>
-<tr><td><code>%Y</code></td><td>4-ÀÚ¸® ¿¬µµ</td></tr>
-<tr class="odd"><td><code>%y</code></td><td>2-ÀÚ¸® ¿¬µµ</td></tr>
-<tr><td><code>%Z</code></td><td>½Ã°£´ë À̸§</td></tr>
-<tr class="odd"><td><code>%%</code></td><td>¹®ÀÚ±×´ë·Î `%'</td></tr>
-</table>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/rotatelogs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/rotatelogs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/rotatelogs.xml b/docs/manual/programs/rotatelogs.xml
deleted file mode 100644
index 6ade81ba58..0000000000
--- a/docs/manual/programs/rotatelogs.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="rotatelogs.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>rotatelogs - Piped logging program to rotate Apache logs</title>
-
-<summary>
- <p><code>rotatelogs</code> is a simple program for use in
- conjunction with Apache's piped logfile feature. For example:</p>
-
-<example>
- CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-</example>
-
- <p>This creates the files /var/logs/logfile.nnnn where nnnn is
- the system time at which the log nominally starts (this time
- will always be a multiple of the rotation time, so you can
- synchronize cron scripts with it). At the end of each rotation
- time (here after 24 hours) a new log is started.</p>
-
-<example>
- CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
-</example>
-
- <p>This configuration will rotate the logfile whenever it reaches
- a size of 5 megabytes.</p>
-
-<example>
- ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
-</example>
- <p>This configuration will rotate the error logfile whenever it
- reaches a size of 5 megabytes, and the suffix to the logfile name
- will be created of the form
- <code>errorlog.YYYY-mm-dd-HH_MM_SS</code>.</p>
-
-</summary>
-
-<section id="synopsis"><title>Synopsis</title>
-
- <p><code><strong>rotatelogs</strong>
- [ -<strong>l</strong> ]
- <var>logfile</var>
- [ <var>rotationtime</var> [ <var>offset</var> ]] |
- [ <var>filesize</var>M ]</code></p>
-</section>
-
-<section id="options"><title>Options</title>
-
-<dl>
-
-<dt><code>-l</code></dt>
-<dd>Causes the use of local time rather than GMT as the base for the
-interval. Note that using <code>-l</code> in an environment which changes the
-GMT offset (such as for BST or DST) can lead to unpredictable results!</dd>
-
-<dt><code><var>logfile</var></code></dt>
-
-<dd>The path plus basename of the logfile. If <var>logfile</var>
-includes any '%' characters, it is treated as a format string for
-<code>strftime(3)</code>. Otherwise, the suffix
-<var>.nnnnnnnnnn</var> is automatically added and is the time in
-seconds. Both formats compute the start time from the beginning of
-the current period.</dd>
-
-<dt><code><var>rotationtime</var></code></dt>
-
-<dd>The time between log file rotations in seconds.</dd>
-
-<dt><code><var>offset</var></code></dt>
-
-<dd>The number of minutes offset from UTC. If omitted, zero is
-assumed and UTC is used. For example, to use local time in the zone
-UTC -5 hours, specify a value of <code>-300</code> for this argument.</dd>
-
-<dt><code><var>filesize</var>M</code></dt>
-
-<dd>The maximum file size in megabytes followed by the letter
-<code>M</code> to specify size rather than time. Use this parameter
-in place of both rotationtime and offset.</dd>
-</dl>
-</section>
-
-<section id="portability"><title>Portability</title>
-
-<p>The following logfile format string substitutions should be
-supported by all <code>strftime(3)</code> implementations, see
-the <code>strftime(3)</code> man page for library-specific
-extensions.</p>
-
-<table border="1" style="zebra">
-<tr><td><code>%A</code></td><td>full weekday name (localized)</td></tr>
-<tr><td><code>%a</code></td><td>3-character weekday name (localized)</td></tr>
-<tr><td><code>%B</code></td><td>full month name (localized)</td></tr>
-<tr><td><code>%b</code></td><td>3-character month name (localized)</td></tr>
-<tr><td><code>%c</code></td><td>date and time (localized)</td></tr>
-<tr><td><code>%d</code></td><td>2-digit day of month</td></tr>
-<tr><td><code>%H</code></td><td>2-digit hour (24 hour clock)</td></tr>
-<tr><td><code>%I</code></td><td>2-digit hour (12 hour clock)</td></tr>
-<tr><td><code>%j</code></td><td>3-digit day of year</td></tr>
-<tr><td><code>%M</code></td><td>2-digit minute</td></tr>
-<tr><td><code>%m</code></td><td>2-digit month</td></tr>
-<tr><td><code>%p</code></td><td>am/pm of 12 hour clock (localized)</td></tr>
-<tr><td><code>%S</code></td><td>2-digit second</td></tr>
-<tr><td><code>%U</code></td><td>2-digit week of year
-(Sunday first day of week)</td></tr>
-<tr><td><code>%W</code></td><td>2-digit week of year
-(Monday first day of week)</td></tr>
-<tr><td><code>%w</code></td><td>1-digit weekday
-(Sunday first day of week)</td></tr>
-<tr><td><code>%X</code></td><td>time (localized)</td></tr>
-<tr><td><code>%x</code></td><td>date (localized)</td></tr>
-<tr><td><code>%Y</code></td><td>4-digit year</td></tr>
-<tr><td><code>%y</code></td><td>2-digit year</td></tr>
-<tr><td><code>%Z</code></td><td>time zone name</td></tr>
-<tr><td><code>%%</code></td><td>literal `%'</td></tr>
-</table>
-
-</section>
-</manualpage>
diff --git a/docs/manual/programs/rotatelogs.xml.ko b/docs/manual/programs/rotatelogs.xml.ko
deleted file mode 100644
index e882c41e6a..0000000000
--- a/docs/manual/programs/rotatelogs.xml.ko
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="rotatelogs.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
- <title>rotatelogs - ¾ÆÆÄÄ¡ ·Î±×¸¦ ¼øȯÇϱâÀ§ÇØ ÆÄÀÌÇÁ·Î ¿¬°áÇÒ
- ·Î±× ÇÁ·Î±×·¥</title>
-
-<summary>
- <p><code>rotatelogs</code>´Â ¾ÆÆÄÄ¡ÀÇ ÆÄÀÌÇÁ ·Î±×ÆÄÀÏ ±â´ÉÀ»
- À§ÇÑ °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ¿¹¸¦ µé¾î:</p>
-
-<example>
- CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-</example>
-
- <p>±×·¯¸é /var/logs/logfile.nnnn ÆÄÀÏÀ» ¸¸µç´Ù. nnnnÀº
- ·Î±×¸¦ ½ÃÀÛÇÑ ½Ã½ºÅ۽ð£ÀÌ´Ù (ÀÌ ½Ã°£Àº Ç×»ó ¼øȯ±â°£ÀÇ
- ¹è¼öÀÌ´Ù. ±×·¡¼­ cron ½ºÅ©¸³Æ®·Î ó¸®Çϱ⠽±´Ù). ¼øȯ±â°£
- (¿©±â¼­´Â 24 ½Ã°£) ¸¶´Ù »õ·Î¿î ·Î±×¸¦ ½ÃÀÛÇÑ´Ù.</p>
-
-<example>
- CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
-</example>
-
- <p>ÀÌ ¼³Á¤Àº ·Î±×ÆÄÀÏ Å©±â°¡ 5 ¸Þ°¡¹ÙÀÌÆ®°¡ µÉ¶§¸¶´Ù
- ¼øȯÇÑ´Ù.</p>
-
-<example>
- ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
-</example>
- <p>ÀÌ ¼³Á¤Àº ¿À·ù·Î±× ÆÄÀÏ Å©±â°¡ 5 ¸Þ°¡¹ÙÀÌÆ®°¡ µÉ¶§¸¶´Ù
- <code>errorlog.YYYY-mm-dd-HH_MM_SS</code>¿Í °°Àº ÆÄÀÏÀ»
- ¸¸µé¾î¼­ ¿À·ù·Î±× ÆÄÀÏÀ» ¼øȯÇÑ´Ù.</p>
-
-</summary>
-
-<section id="synopsis"><title>°³¿ä</title>
-
- <p><code><strong>rotatelogs</strong>
- [ -<strong>l</strong> ]
- <var>logfile</var>
- [ <var>rotationtime</var> [ <var>offset</var> ]] |
- [ <var>filesize</var>M ]</code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
-
-<dl>
-
-<dt><code>-l</code></dt>
-<dd>¼øȯÁÖ±â·Î GMT ´ë½Å Áö¿ª½Ã°£À» »ç¿ëÇÑ´Ù. (BST³ª DST¿Í °°ÀÌ)
-GMT ½Ã°£Â÷°¡ º¯Çϴ ȯ°æ¿¡¼­ <code>-l</code>À» »ç¿ëÇÏ¸é ¿¹±âÄ¡
-¾ÊÀº °á°ú°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù!</dd>
-
-<dt><code><var>logfile</var></code></dt>
-
-<dd>·Î±×ÆÄÀÏÀÇ °æ·Î¿Í À̸§. <var>logfile</var>¿¡ '%' ¹®ÀÚ°¡
-ÀÖ´Ù¸é <code>strftime(3)</code>ÀÇ Çü½Ä¹®ÀÚ¿­°ú °°ÀÌ Ã³¸®ÇÑ´Ù.
-'%' ¹®ÀÚ°¡ ¾ø´Ù¸é µÚ¿¡ ÃÊ´ÜÀ§ ½Ã°£ <var>.nnnnnnnnnn</var>À»
-ÀÚµ¿À¸·Î ºÙÀδÙ. µÎ Çü½Ä ¸ðµÎ ÇöÀç ±â°£ºÎÅÍ ½ÃÀ۽ð£À» °è»êÇÑ´Ù.</dd>
-
-<dt><code><var>rotationtime</var></code></dt>
-
-<dd>·Î±×ÆÄÀÏÀ» ¼øȯÇÒ ÃÊ´ÜÀ§ ½Ã°£.</dd>
-
-<dt><code><var>offset</var></code></dt>
-
-<dd>UTC¿¡¼­ ºÐ´ÜÀ§ ½Ã°£Â÷ÀÌ. »ý·«Çϸé 0À¸·Î °¡Á¤ÇÏ¿© UTC¸¦
-»ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, UTC -5 ½Ã°£´ëÀÇ Áö¿ª½Ã°£À» »ç¿ëÇÑ´Ù¸é
-¾Æ±Ô¸ÕÆ®·Î <code>-300</code>À» ÁöÁ¤ÇÑ´Ù.</dd>
-
-<dt><code><var>filesize</var>M</code></dt>
-
-<dd>½Ã°£ÀÌ ¾Æ´Ñ Å©±â¸¦ ÁöÁ¤ÇÒ¶§ ¸Þ°¡¹ÙÀÌÆ®´ÜÀ§ ÃÖ´ë ÆÄÀÏÅ©±â
-µÚ¿¡ <code>M</code>À» ºÙÀδÙ. rotationtime°ú offset ´ë½Å ÀÌ
-ÆĶó¹ÌÅ͸¦ »ç¿ëÇÑ´Ù.</dd>
-</dl>
-</section>
-
-<section id="portability"><title>Æ÷Æð¡´É¼º</title>
-
-<p>´ÙÀ½ ·Î±×ÆÄÀÏ Çü½Ä¹®ÀÚ¿­ Ç¥ÇöÀº ¸ðµç <code>strftime(3)</code>
-±¸ÇöÀÌ Áö¿øÇØ¾ß ÇÑ´Ù. ¶óÀ̺귯¸® ƯÀ¯ÀÇ È®ÀåÀº
-<code>strftime(3)</code> manpage¸¦ Âü°íÇ϶ó.</p>
-
-<table border="1" style="zebra">
-<tr><td><code>%A</code></td><td>(Áö¿ªÈ­µÈ) ¿ÏÀüÇÑ ¿äÀÏ À̸§</td></tr>
-<tr><td><code>%a</code></td><td>(Áö¿ªÈ­µÈ) 3-¹®ÀÚ ¿äÀÏ À̸§</td></tr>
-<tr><td><code>%B</code></td><td>(Áö¿ªÈ­µÈ) ¿ÏÀüÇÑ ´Þ À̸§</td></tr>
-<tr><td><code>%b</code></td><td>(Áö¿ªÈ­µÈ) 3-¹®ÀÚ ´Þ À̸§</td></tr>
-<tr><td><code>%c</code></td><td>(Áö¿ªÈ­µÈ) ³¯Â¥¿Í ½Ã°£</td></tr>
-<tr><td><code>%d</code></td><td>2-ÀÚ¸® ÀÏ</td></tr>
-<tr><td><code>%H</code></td><td>2-ÀÚ¸® ½Ã°£ (24 ½Ã°£ ½Ã°è)</td></tr>
-<tr><td><code>%I</code></td><td>2-ÀÚ¸® ½Ã°£ (12 ½Ã°£ ½Ã°è)</td></tr>
-<tr><td><code>%j</code></td><td>3-ÀÚ¸® ³¯Â¥¼ö</td></tr>
-<tr><td><code>%M</code></td><td>2-ÀÚ¸® ºÐ</td></tr>
-<tr><td><code>%m</code></td><td>2-ÀÚ¸® ´Þ</td></tr>
-<tr><td><code>%p</code></td><td>(Áö¿ªÈ­µÈ) 12 ½Ã°£ ½Ã°èÀÇ am/pm</td></tr>
-<tr><td><code>%S</code></td><td>2-ÀÚ¸® ÃÊ</td></tr>
-<tr><td><code>%U</code></td><td>2-ÀÚ¸® ÁÖÀϼö (ÁÖÀÇ Ã¹¹øÀç ³¯Àº
-ÀÏ¿äÀÏ)</td></tr>
-<tr><td><code>%W</code></td><td>2-ÀÚ¸® ÁÖÀϼö (ÁÖÀÇ Ã¹¹øÀç ³¯Àº
-¿ù¿äÀÏ)</td></tr>
-<tr><td><code>%w</code></td><td>1-ÀÚ¸® ¿äÀϼö (ÁÖÀÇ Ã¹¹ø° ³¯Àº
-ÀÏ¿äÀÏ)</td></tr>
-<tr><td><code>%X</code></td><td>(Áö¿ªÈ­µÈ) ½Ã°£</td></tr>
-<tr><td><code>%x</code></td><td>(Áö¿ªÈ­µÈ) ³¯Â¥</td></tr>
-<tr><td><code>%Y</code></td><td>4-ÀÚ¸® ¿¬µµ</td></tr>
-<tr><td><code>%y</code></td><td>2-ÀÚ¸® ¿¬µµ</td></tr>
-<tr><td><code>%Z</code></td><td>½Ã°£´ë À̸§</td></tr>
-<tr><td><code>%%</code></td><td>¹®ÀÚ±×´ë·Î `%'</td></tr>
-</table>
-
-</section>
-</manualpage>
diff --git a/docs/manual/programs/rotatelogs.xml.meta b/docs/manual/programs/rotatelogs.xml.meta
deleted file mode 100644
index 6426888332..0000000000
--- a/docs/manual/programs/rotatelogs.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>rotatelogs</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/programs/suexec.html b/docs/manual/programs/suexec.html
deleted file mode 100644
index f9408988ff..0000000000
--- a/docs/manual/programs/suexec.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: suexec.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: suexec.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/programs/suexec.html.en b/docs/manual/programs/suexec.html.en
deleted file mode 100644
index 961d416802..0000000000
--- a/docs/manual/programs/suexec.html.en
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>suexec - Switch user before executing external programs - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>suexec - Switch user before executing external programs</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/programs/suexec.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><code>suexec</code> is used by the Apache HTTP Server to switch
- to another user before executing CGI programs. In order to achieve this,
- it must run as <code>root</code>. Since the HTTP daemon normally doesn't
- run as <code>root</code>, the <code>suexec</code> executable needs the
- setuid bit set and must be owned by <code>root</code>. It should never be
- writable for any other person than <code>root</code>.</p>
-
- <p>For further information about the concepts and and the security model
- of suexec please refer to the suexec documentation (<a href="http://httpd.apache.org/docs-2.1/suexec.html">http://httpd.apache.org/docs-2.1/suexec.html</a>).</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">Synopsis</a></h2>
- <p><code><strong>suexec</strong> -<strong>V</strong></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">Options</a></h2>
-
-<dl>
-<dt><code>-V</code></dt>
-
-<dd>If you are <code>root</code>, this option displays the compile options of
-<code>suexec</code>. For security reasons all configuration options are
-changeable only at compile time.</dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/programs/suexec.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/suexec.html.ko.euc-kr b/docs/manual/programs/suexec.html.ko.euc-kr
deleted file mode 100644
index c9b00d9acf..0000000000
--- a/docs/manual/programs/suexec.html.ko.euc-kr
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>suexec - ¿ÜºÎ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ Àü¿¡ »ç¿ëÀÚ¸¦ º¯°æÇÑ´Ù - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Programs</a></div><div id="page-content"><div id="preamble"><h1>suexec - ¿ÜºÎ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ Àü¿¡ »ç¿ëÀÚ¸¦ º¯°æÇÑ´Ù</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/suexec.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â CGI ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ Àü¿¡ ´Ù¸¥ »ç¿ëÀÚ·Î
- ÀüȯÇϱâÀ§ÇØ <code>suexec</code>¸¦ »ç¿ëÇÑ´Ù. À̸¦ »ç¿ëÇÏ·Á¸é
- ¼­¹ö¸¦ <code>root</code> °èÁ¤À¸·Î ½ÇÇàÇØ¾ß ÇÑ´Ù. º¸Åë À¥
- µ¥¸óÀ» <code>root</code> °èÁ¤À¸·Î ½ÇÇàÇÏÁö ¾Ê±â¶§¹®¿¡
- <code>suexec</code> ½ÇÇàÆÄÀÏ¿¡ setuid ºñÆ®¸¦ ¼³Á¤ÇÏ°í
- <code>root</code>°¡ ¼ÒÀ¯ÁÖÀ̾î¾ß ÇÑ´Ù. <code>root</code>ÀÌ¿ÜÀÇ
- ´Ù¸¥ »ç¿ëÀÚ°¡ ¾²±â±ÇÇÑÀ» °¡Áö¸é ¾ÈµÈ´Ù.</p>
-
- <p>suexecÀÇ °³³ä°ú º¸¾È¸ðµ¨¿¡ ´ëÇÑ Á¤º¸´Â suexec ¹®¼­¸¦
- (<a href="http://httpd.apache.org/docs-2.1/suexec.html">http://httpd.apache.org/docs-2.1/suexec.html</a>) Âü°íÇ϶ó.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#options">¿É¼Ç</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="synopsis" id="synopsis">°³¿ä</a></h2>
- <p><code><strong>suexec</strong> -<strong>V</strong></code></p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="options" id="options">¿É¼Ç</a></h2>
-
-<dl>
-<dt><code>-V</code></dt>
-
-<dd><code>root</code>°¡ ½ÇÇàÇϸé <code>suexec</code>ÀÇ ÄÄÆÄÀÏ
-¿É¼ÇÀ» Ãâ·ÂÇÑ´Ù. º¸¾È»ó ÀÌÀ¯·Î ¸ðµç ¼³Á¤¿É¼ÇÀº ÄÄÆÄÀÏÇÒ ¶§¸¸
-ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/programs/suexec.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/programs/suexec.xml b/docs/manual/programs/suexec.xml
deleted file mode 100644
index 1c0e0c5784..0000000000
--- a/docs/manual/programs/suexec.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.5 $ -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="suexec.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>suexec - Switch user before executing external programs</title>
-
-<summary>
- <p><code>suexec</code> is used by the Apache HTTP Server to switch
- to another user before executing CGI programs. In order to achieve this,
- it must run as <code>root</code>. Since the HTTP daemon normally doesn't
- run as <code>root</code>, the <code>suexec</code> executable needs the
- setuid bit set and must be owned by <code>root</code>. It should never be
- writable for any other person than <code>root</code>.</p>
-
- <p>For further information about the concepts and and the security model
- of suexec please refer to the suexec documentation (<a
- href="http://httpd.apache.org/docs-2.1/suexec.html"
- >http://httpd.apache.org/docs-2.1/suexec.html</a>).</p>
-</summary>
-
-<section id="synopsis"><title>Synopsis</title>
- <p><code><strong>suexec</strong> -<strong>V</strong></code></p>
-</section>
-
-<section id="options"><title>Options</title>
-
-<dl>
-<dt><code>-V</code></dt>
-
-<dd>If you are <code>root</code>, this option displays the compile options of
-<code>suexec</code>. For security reasons all configuration options are
-changeable only at compile time.</dd>
-
-</dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/suexec.xml.ko b/docs/manual/programs/suexec.xml.ko
deleted file mode 100644
index e9037051fd..0000000000
--- a/docs/manual/programs/suexec.xml.ko
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.5 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="suexec.xml.meta">
-<parentdocument href="./">Programs</parentdocument>
-
-<title>suexec - ¿ÜºÎ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ Àü¿¡ »ç¿ëÀÚ¸¦ º¯°æÇÑ´Ù</title>
-
-<summary>
- <p>¾ÆÆÄÄ¡ À¥¼­¹ö´Â CGI ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ Àü¿¡ ´Ù¸¥ »ç¿ëÀÚ·Î
- ÀüȯÇϱâÀ§ÇØ <code>suexec</code>¸¦ »ç¿ëÇÑ´Ù. À̸¦ »ç¿ëÇÏ·Á¸é
- ¼­¹ö¸¦ <code>root</code> °èÁ¤À¸·Î ½ÇÇàÇØ¾ß ÇÑ´Ù. º¸Åë À¥
- µ¥¸óÀ» <code>root</code> °èÁ¤À¸·Î ½ÇÇàÇÏÁö ¾Ê±â¶§¹®¿¡
- <code>suexec</code> ½ÇÇàÆÄÀÏ¿¡ setuid ºñÆ®¸¦ ¼³Á¤ÇÏ°í
- <code>root</code>°¡ ¼ÒÀ¯ÁÖÀ̾î¾ß ÇÑ´Ù. <code>root</code>ÀÌ¿ÜÀÇ
- ´Ù¸¥ »ç¿ëÀÚ°¡ ¾²±â±ÇÇÑÀ» °¡Áö¸é ¾ÈµÈ´Ù.</p>
-
- <p>suexecÀÇ °³³ä°ú º¸¾È¸ðµ¨¿¡ ´ëÇÑ Á¤º¸´Â suexec ¹®¼­¸¦
- (<a href="http://httpd.apache.org/docs-2.1/suexec.html"
- >http://httpd.apache.org/docs-2.1/suexec.html</a>) Âü°íÇ϶ó.</p>
-</summary>
-
-<section id="synopsis"><title>°³¿ä</title>
- <p><code><strong>suexec</strong> -<strong>V</strong></code></p>
-</section>
-
-<section id="options"><title>¿É¼Ç</title>
-
-<dl>
-<dt><code>-V</code></dt>
-
-<dd><code>root</code>°¡ ½ÇÇàÇϸé <code>suexec</code>ÀÇ ÄÄÆÄÀÏ
-¿É¼ÇÀ» Ãâ·ÂÇÑ´Ù. º¸¾È»ó ÀÌÀ¯·Î ¸ðµç ¼³Á¤¿É¼ÇÀº ÄÄÆÄÀÏÇÒ ¶§¸¸
-ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.</dd>
-
-</dl>
-</section>
-
-</manualpage>
diff --git a/docs/manual/programs/suexec.xml.meta b/docs/manual/programs/suexec.xml.meta
deleted file mode 100644
index 6e2dd4fe0c..0000000000
--- a/docs/manual/programs/suexec.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>suexec</basename>
- <path>/programs/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/sections.html b/docs/manual/sections.html
deleted file mode 100644
index 02645f01bf..0000000000
--- a/docs/manual/sections.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: sections.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: sections.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: sections.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/sections.html.en b/docs/manual/sections.html.en
deleted file mode 100644
index 6397e845f4..0000000000
--- a/docs/manual/sections.html.en
+++ /dev/null
@@ -1,458 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Configuration Sections - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Configuration Sections</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/sections.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
- <p>Directives in the <a href="configuring.html">configuration files</a> may apply to the
-entire server, or they may be restricted to apply only to particular
-directories, files, hosts, or URLs. This document describes how to
-use configuration section containers or <code>.htaccess</code> files
-to change the scope of other configuration directives.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#types">Types of Configuration Section Containers</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#file-and-web">Filesystem and Webspace</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Virtual Hosts</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#proxy">Proxy</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#whatwhere">What Directives are Allowed?</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#mergin">How the sections are merged</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="types" id="types">Types of Configuration Section Containers</a></h2>
-
-<table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
-<p>There are two basic types of containers. Most containers are
-evaluated for each request. The enclosed directives are applied only
-for those requests that match the containers. The <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> and <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> containers, on the
-other hand, are evaluated only at server startup and restart. If
-their conditions are true at startup, then the enclosed directives
-will apply to all requests. If the conditions are not true, the
-enclosed directives will be ignored.</p>
-
-<p>The <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> directive
-encloses directives that will only be applied if an appropriate
-parameter is defined on the <code>httpd</code> command line. For example,
-with the following configuration, all requests will be redirected
-to another site only if the server is started using
-<code>httpd -DClosedForNow</code>:</p>
-
-<div class="example"><p><code>
-&lt;IfDefine ClosedForNow&gt;<br />
-Redirect / http://otherserver.example.com/<br />
-&lt;/IfDefine&gt;
-</code></p></div>
-
-<p>The <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
-directive is very similar, except it encloses directives that will
-only be applied if a particular module is available in the server.
-The module must either be statically compiled in the server, or it
-must be dynamically compiled and its <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> line must be earlier in the
-configuration file. This directive should only be used if you need
-your configuration file to work whether or not certain modules are
-installed. It should not be used to enclose directives that you want
-to work all the time, because it can suppress useful error messages
-about missing modules.</p>
-
-<p>In the following example, the <code class="directive"><a href="./mod/mod_mime_magic.html#mimemagicfiles">MimeMagicFiles</a></code> directive will be
-applied only if <code class="module"><a href="./mod/mod_mime_magic.html">mod_mime_magic</a></code> is available.</p>
-
-<div class="example"><p><code>
-&lt;IfModule mod_mime_magic.c&gt;<br />
-MimeMagicFile conf/magic<br />
-&lt;/IfModule&gt;
-</code></p></div>
-
-<p>Both <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>
-and <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
-can apply negative conditions by preceding their test with "!".
-Also, these sections can be nested to achieve more complex
-restrictions.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="file-and-web" id="file-and-web">Filesystem and Webspace</a></h2>
-
-<p>The most commonly used configuration section containers are the
-ones that change the configuration of particular places in the
-filesystem or webspace. First, it is important to understand the
-difference between the two. The filesystem is the view of your disks
-as seen by your operating system. For example, in a default install,
-Apache resides at <code>/usr/local/apache2</code> in the Unix
-filesystem or <code>"c:/Program Files/Apache Group/Apache2"</code> in
-the Windows filesystem. (Note that forward slashes should always be
-used as the path separator in Apache, even for Windows.) In contrast,
-the webspace is the view of your site as delivered by the web server
-and seen by the client. So the path <code>/dir/</code> in the
-webspace corresponds to the path
-<code>/usr/local/apache2/htdocs/dir/</code> in the filesystem of a
-default Apache install on Unix. The webspace need not map directly to
-the filesystem, since webpages may be generated dynamically
-from databases or other locations.</p>
-
-<h3><a name="filesystem" id="filesystem">Filesystem Containers</a></h3>
-
-<p>The <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-and <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
-directives, along with their regex counterparts, apply directives to
-parts of the filesystem. Directives enclosed in a <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> section apply to
-the named filesystem directory and all subdirectories of that
-directory. The same effect can be obtained using <a href="howto/htaccess.html">.htaccess files</a>. For example, in the
-following configuration, directory indexes will be enabled for the
-<code>/var/web/dir1</code> directory and all subdirectories.</p>
-
-<div class="example"><p><code>
-&lt;Directory /var/web/dir1&gt;<br />
-Options +Indexes<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-<p>Directives enclosed in a <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> section apply to any file with
-the specified name, regardless of what directory it lies in.
-So for example, the following configuration directives will,
-when placed in the main section of the configuration file,
-deny access to any file named <code>private.html</code> regardless
-of where it is found.</p>
-
-<div class="example"><p><code>
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;
-</code></p></div>
-
-<p>To address files found in a particular part of the filesystem, the
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> and
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> sections
-can be combined. For example, the following configuration will deny
-access to <code>/var/web/dir1/private.html</code>,
-<code>/var/web/dir1/subdir2/private.html</code>,
-<code>/var/web/dir1/subdir3/private.html</code>, and any other instance
-of <code>private.html</code> found under the <code>/var/web/dir1/</code>
-directory.</p>
-
-<div class="example"><p><code>
-&lt;Directory /var/web/dir1&gt;<br />
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-
-<h3><a name="webspace" id="webspace">Webspace Containers</a></h3>
-
-<p>The <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-directive and its regex counterpart, on the other hand, change the
-configuration for content in the webspace. For example, the following
-configuration prevents access to any URL-path that begins in /private.
-In particular, it will apply to requests for
-<code>http://yoursite.example.com/private</code>,
-<code>http://yoursite.example.com/private123</code>, and
-<code>http://yoursite.example.com/private/dir/file.html</code> as well
-as any other requests starting with the <code>/private</code> string.</p>
-
-<div class="example"><p><code>
-&lt;Location /private&gt;<br />
-Order Allow,Deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</code></p></div>
-
-<p>The <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-directive need not have anything to do with the filesystem.
-For example, the following example shows how to map a particular
-URL to an internal Apache handler provided by <code class="module"><a href="./mod/mod_status.html">mod_status</a></code>.
-No file called <code>server-status</code> needs to exist in the
-filesystem.</p>
-
-<div class="example"><p><code>
-&lt;Location /server-status&gt;<br />
-SetHandler server-status<br />
-&lt;/Location&gt;
-</code></p></div>
-
-
-<h3><a name="wildcards" id="wildcards">Wildcards and Regular Expressions</a></h3>
-
-<p>The <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, and
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-directives can each use shell-style wildcard characters as in
-<code>fnmatch</code> from the C standard library. The character "*"
-matches any sequence of characters, "?" matches any single character,
-and "[<em>seq</em>]" matches any character in <em>seq</em>. The "/"
-character will not be matched by any wildcard; it must be specified
-explicitly.</p>
-
-<p>If even more flexible matching is required, each
-container has a regular-expression (regex) counterpart <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, and <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> that allow
-perl-compatible
-<a href="glossary.html#regex">regular expressions</a>
-to be used in choosing the matches. But see the section below on
-configuration merging to find out how using regex sections will change
-how directives are applied.</p>
-
-<p>A non-regex wildcard section that changes the configuration of
-all user directories could look as follows:</p>
-
-<div class="example"><p><code>
-&lt;Directory /home/*/public_html&gt;<br />
-Options Indexes<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-<p>Using regex sections, we can deny access to many types of image files
-at once:</p>
-<div class="example"><p><code>
-&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/FilesMatch&gt;
-</code></p></div>
-
-
-
-<h3><a name="whichwhen" id="whichwhen">What to use When</a></h3>
-
-<p>Choosing between filesystem containers and webspace containers is
-actually quite easy. When applying directives to objects that reside
-in the filesystem always use <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> or <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>. When applying directives to objects
-that do not reside in the filesystem (such as a webpage generated from
-a database), use <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>.</p>
-
-<p>It is important to never use <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> when trying to restrict
-access to objects in the filesystem. This is because many
-different webspace locations (URLs) could map to the same filesystem
-location, allowing your restrictions to be circumvented.
-For example, consider the following configuration:</p>
-
-<div class="example"><p><code>
-&lt;Location /dir/&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</code></p></div>
-
-<p>This works fine if the request is for
-<code>http://yoursite.example.com/dir/</code>. But what if you are on
-a case-insensitive filesystem? Then your restriction could be easily
-circumvented by requesting
-<code>http://yoursite.example.com/DIR/</code>. The <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> directive, in
-contrast, will apply to any content served from that location,
-regardless of how it is called. (An exception is filesystem links.
-The same directory can be placed in more than one part of the
-filesystem using symbolic links. The <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> directive will follow the symbolic
-link without resetting the pathname. Therefore, for the highest level
-of security, symbolic links should be disabled with the appropriate
-<code class="directive"><a href="./mod/core.html#options">Options</a></code> directive.)</p>
-
-<p>If you are, perhaps, thinking that none of this applies to you
-because you use a case-sensitive filesystem, remember that there are
-many other ways to map multiple webspace locations to the same
-filesystem location. Therefore you should always use the filesystem
-containers when you can. There is, however, one exception to this
-rule. Putting configuration restrictions in a <code>&lt;Location
-/&gt;</code> section is perfectly safe because this section will apply
-to all requests regardless of the specific URL.</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">Virtual Hosts</a></h2>
-
-<p>The <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
-container encloses directives that apply to specific hosts.
-This is useful when serving multiple hosts from the same machine
-with a different configuration for each. For more information,
-see the <a href="vhosts/">Virtual Host Documentation</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">Proxy</a></h2>
-
-<p>The <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
-and <code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>
-containers apply enclosed configuration directives only
-to sites accessed through <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>'s proxy server
-that match the specified URL. For example, the following configuration
-will prevent the proxy server from being used to access the
-<code>cnn.com</code> website.</p>
-
-<div class="example"><p><code>
-&lt;Proxy http://cnn.com/*&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Proxy&gt;
-</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="whatwhere" id="whatwhere">What Directives are Allowed?</a></h2>
-
-<p>To find out what directives are allowed in what types of
-configuration sections, check the <a href="mod/directive-dict.html#Context">Context</a> of the directive.
-Everything that is allowed in
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-sections is also syntactically allowed in
-<code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>,
-and <code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>
-sections. There are some exceptions, however:</p>
-
-<ul>
-<li>The <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> directive
-works only in <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-sections.</li>
-
-<li>The <code>FollowSymLinks</code> and
-<code>SymLinksIfOwnerMatch</code> <code class="directive"><a href="./mod/core.html#options">Options</a></code> work only in <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> sections or
-<code>.htaccess</code> files.</li>
-
-<li>The <code class="directive"><a href="./mod/core.html#options">Options</a></code> directive cannot
-be used in <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
-and <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>
-sections.</li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mergin" id="mergin">How the sections are merged</a></h2>
-
-<p>The configuration sections are applied in a very particular order.
-Since this can have important effects on how configuration directives
-are interpreted, it is important to understand how this works.</p>
-
- <p>The order of merging is:</p>
-
- <ol>
- <li> <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> (except regular expressions)
- and <code>.htaccess</code> done simultaneously (with
- <code>.htaccess</code>, if allowed, overriding
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>)</li>
-
- <li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>
- (and <code>&lt;Directory ~&gt;</code>)</li>
-
- <li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> and <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code> done
- simultaneously</li>
-
- <li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
- and <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> done simultaneously</li>
- </ol>
-
- <p>Apart from <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, each group is processed in
- the order that they appear in the configuration files. <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> (group 1 above)
- is processed in the order shortest directory component to longest.
- So for example, <code>&lt;Directory /var/web/dir&gt;</code> will
- be processed before <code>&lt;Directory
- /var/web/dir/subdir&gt;</code>. If multiple <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> sections apply
- to the same directory they are processed in the configuration file
- order. Configurations included via the <code class="directive"><a href="./mod/core.html#include">Include</a></code> directive will be treated as if
- they were inside the including file at the location of the
- <code class="directive"><a href="./mod/core.html#include">Include</a></code> directive.</p>
-
- <p>Sections inside <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> sections
- are applied <em>after</em> the corresponding sections outside
- the virtual host definition. This allows virtual hosts to
- override the main server configuration.</p>
-
- <p>When the request is served by <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, the
- <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- container takes the place of the <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> container in the processing
- order.</p>
-
- <p>Later sections override earlier ones.</p>
-
-<div class="note"><h3>Technical Note</h3>
- There is actually a
- <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>
- sequence performed just before the name translation phase
- (where <code>Aliases</code> and <code>DocumentRoots</code>
- are used to map URLs to filenames). The results of this
- sequence are completely thrown away after the translation has
- completed.
-</div>
-
-<h3><a name="merge-examples" id="merge-examples">Some Examples</a></h3>
-
-<p>Below is an artificial example to show the order of
-merging. Assuming they all apply to the request, the directives in
-this example will be applied in the order A &gt; B &gt; C &gt; D &gt;
-E.</p>
-
-<div class="example"><p><code>
-&lt;Location /&gt;<br />
-E<br />
-&lt;/Location&gt;<br />
-<br />
-&lt;Files f.html&gt;<br />
-D<br />
-&lt;/Files&gt;<br />
-<br />
-&lt;VirtualHost *&gt;<br />
-&lt;Directory /a/b&gt;<br />
-B<br />
-&lt;/Directory&gt;<br />
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;DirectoryMatch "^.*b$"&gt;<br />
-C<br />
-&lt;/DirectoryMatch&gt;<br />
-<br />
-&lt;Directory /a/b&gt;<br />
-A<br />
-&lt;/Directory&gt;<br />
-<br />
-</code></p></div>
-
-<p>For a more concrete example, consider the following. Regardless of
-any access restrictions placed in <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> sections, the <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> section will be
-evaluated last and will allow unrestricted access to the server. In
-other words, order of merging is important, so be careful!</p>
-
-<div class="example"><p><code>
-&lt;Location /&gt;<br />
-Order deny,allow<br />
-Allow from all<br />
-&lt;/Location&gt;<br />
-<br />
-# Woops! This &lt;Directory&gt; section will have no effect<br />
-&lt;Directory /&gt;<br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/sections.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sections.html.ja.euc-jp b/docs/manual/sections.html.ja.euc-jp
deleted file mode 100644
index 1aa78d77e6..0000000000
--- a/docs/manual/sections.html.ja.euc-jp
+++ /dev/null
@@ -1,466 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥»¥¯¥·¥ç¥ó¤ÎÀßÄê - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥»¥¯¥·¥ç¥ó¤ÎÀßÄê</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/sections.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
- <p><a href="configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a>Ãæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-¥µ¡¼¥ÐÁ´ÂΤËŬÍѤµ¤ì¤¿¤ê¡¢ÆÃÄê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ä¥Õ¥¡¥¤¥ë¡¢¥Û¥¹¥È¡¢URL ¤Ë¤Î¤ß
-ŬÍѤµ¤ì¤ë¤è¤¦¤ËÀ©¸Â¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤Îʸ½ñ¤ÏÀßÄêÍѤΥ»¥¯¥·¥ç¥ó¤Î
-¥³¥ó¥Æ¥Ê¤ä <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¾¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î
-¥¹¥³¡¼¥×¤òÊѹ¹¤¹¤ëÊýË¡¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#types">ÀßÄêÍÑ¥»¥¯¥·¥ç¥ó¥³¥ó¥Æ¥Ê¤Î¼ïÎà</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#file-and-web">¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤È¥¦¥§¥Ö¶õ´Ö</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#proxy">¥×¥í¥¯¥·</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#whatwhere">¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»È¤¨¤ë¤Î?</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#mergin">¥»¥¯¥·¥ç¥ó¤Î¥Þ¡¼¥¸ÊýË¡</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="types" id="types">ÀßÄêÍÑ¥»¥¯¥·¥ç¥ó¥³¥ó¥Æ¥Ê¤Î¼ïÎà</a></h2>
-
-<table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
-<p>¥³¥ó¥Æ¥Ê¤Ë¤ÏÆó¤Ä¤Î´ðËܤȤʤë¼ïÎब¤¢¤ê¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¥³¥ó¥Æ¥Ê¤Ï
-³Æ¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æɾ²Á¤µ¤ì¤Þ¤¹¡£¤½¤Î¾ì¹ç¡¢¥³¥ó¥Æ¥ÊÃæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-¥³¥ó¥Æ¥Ê¤Ë¥Þ¥Ã¥Á¤¹¤ë¥ê¥¯¥¨¥¹¥È¤Ë¤Î¤ßŬÍѤµ¤ì¤Þ¤¹¡£
-°ìÊý¡¢<code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> ¥³¥ó¥Æ¥Ê¤È <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> ¥³¥ó¥Æ¥Ê¤Ï
-¥µ¡¼¥Ð¤Îµ¯Æ°»þ¤ÈºÆµ¯Æ°»þ¤Ë¤Î¤ßɾ²Á¤µ¤ì¤Þ¤¹¡£µ¯Æ°»þ¤Ë¾ò·ï¤¬¿¿¤Ç¤¢¤ì¤Ð¡¢
-¥³¥ó¥Æ¥ÊÃæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤ËŬÍѤµ¤ì¤Þ¤¹¡£¾ò·ï¤¬
-µ¶¤Ç¤¢¤ì¤Ð¡¢¥³¥ó¥Æ¥ÊÃæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£</p>
-
-<p><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-<code>httpd</code> ¥³¥Þ¥ó¥É¥é¥¤¥ó¤ÇŬÀڤʥѥé¥á¡¼¥¿¤¬ÄêµÁ¤µ¤ì¤¿¤È¤­¤Ë¤Î¤ß
-ŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤¤¤Þ¤¹¡£Î㤨¤Ð¼¡¤ÎÀßÄê¤Ç¤Ï¡¢¥µ¡¼¥Ð¤¬
-<code>httpd -DClosedForNow</code> ¤ò»È¤Ã¤Æµ¯Æ°¤µ¤ì¤¿¤È¤­¤À¤±¤¹¤Ù¤Æ¤Î
-¥ê¥¯¥¨¥¹¥È¤òÊ̤Υµ¥¤¥È¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹:</p>
-
-<div class="example"><p><code>
-&lt;IfDefine ClosedForNow&gt;<br />
-Redirect / http://otherserver.example.com/<br />
-&lt;/IfDefine&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> ¤Ï
-Èó¾ï¤Ë»÷¤Æ¤¤¤Þ¤¹¤¬¡¢Âå¤ï¤ê¤Ë¥µ¡¼¥Ð¾å¤Ç¥â¥¸¥å¡¼¥ë¤¬»ÈÍѲÄǽ¤Ê¾ì¹ç¤Ë¤Î¤ß
-ŬÍѲÄǽ¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤¤¤Þ¤¹¡£¥â¥¸¥å¡¼¥ë¤Ï¥µ¡¼¥Ð¤Ë
-ÀÅŪ¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤«¡¢Æ°Åª¤ËÁȤ߹þ¤à¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Æ¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç
-<code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> ¤Î¹Ô¤¬¤è¤êÁ°¤Î
-Éôʬ¤Ë½ñ¤«¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏÆÃÄê¤Î¥â¥¸¥å¡¼¥ë¤Î
-¸ºß¤Ë´Ø¤ï¤é¤ºÀßÄê¥Õ¥¡¥¤¥ë¤¬Æ°ºî¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ß»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
-¾ï¤ËÆ°ºî¤·¤ÆÍߤ·¤¤¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò°Ï¤à¤¿¤á¤Ë»È¤¦¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
-¸ºß¤·¤Ê¤¤¥â¥¸¥å¡¼¥ë¤Ë´Ø¤¹¤ëÍ­ÍѤʥ¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ÎȯÀ¸¤òÍÞÀ©¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¤Î¤Ç¡£
-</p>
-
-<p>¼¡¤ÎÎã¤Ç¤Ï¡¢<code class="module"><a href="./mod/mod_mime_magic.html">mod_mime_magic</a></code> ¤¬¤¢¤ë¤È¤­¤Ë¤Î¤ß <code class="directive"><a href="./mod/mod_mime_magic.html#mimemagicfiles">MimeMagicFiles</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
-ŬÍѤµ¤ì¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;IfModule mod_mime_magic.c&gt;<br />
-MimeMagicFile conf/magic<br />
-&lt;/IfModule&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
-<code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-¥Æ¥¹¥È¤ÎÁ°¤Ë "!" ¤òÉÕ¤±¤ë¤³¤È¤ÇÈÝÄê¤Î¾ò·ï¤òŬÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-¤Þ¤¿¡¢¤³¤ì¤é¤Î¥»¥¯¥·¥ç¥ó¤Ï¤è¤êÊ£»¨¤ÊÀ©¸Â¤ò²Ý¤¹¤¿¤á¤ËÆþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="file-and-web" id="file-and-web">¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤È¥¦¥§¥Ö¶õ´Ö</a></h2>
-
-<p>ºÇ¤â¤è¤¯»È¤ï¤ì¤ëÀßÄê¤Î¥»¥¯¥·¥ç¥ó¥³¥ó¥Æ¥Ê¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ä¥¦¥§¥Ö¶õ´Ö¤Î
-ÆÃÄê¤Î¾ì½ê¤ÎÀßÄê¤òÊѹ¹¤¹¤ë¤â¤Î¤Ç¤¹¡£¤Þ¤º¡¢¤³¤ÎÆó¤Ä¤Î°ã¤¤¤òÍý²ò¤¹¤ë¤³¤È¤¬
-ÂçÀڤǤ¹¡£¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤é¸«¤¿¥Ç¥£¥¹¥¯¤ÎÆâÍƤǤ¹¡£
-¤¿¤È¤¨¤Ð¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤Ï Apache ¤Ï Unix ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ç¤Ï
-<code>/usr/local/apache2</code> ¤Ë¡¢Windows ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ç¤Ï
-<code>"c:/Program Files/Apache Group/Apache2"</code> ¤Ë¸ºß¤·¤Þ¤¹¡£
-(Apache ¤Ç¤Ï Windows ¤Ç¤â¥Ñ¥¹¥»¥Ñ¥ì¡¼¥¿¤È¤·¤Æ¥¹¥é¥Ã¥·¥å¤ò»È¤¦¤³¤È¤Ë
-µ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£) ÂоÈŪ¤Ë¡¢¥¦¥§¥Ö¶õ´Ö¤Ï¤¢¤Ê¤¿¤Î¥µ¥¤¥È¤ò
-¥¦¥§¥Ö¥µ¡¼¥Ð¤«¤éÇÛ¿®¤µ¤ì¤ë¤â¤Î¤È¤·¤Æ¸«¤¿¤â¤Î¤Ç¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ë¸«¤¨¤ë¤â¤Î¤Ç¤¹¡£
-¥Ç¥Õ¥©¥ë¥È¤Î Unix ¾å¤Î Apache ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤Ï¥¦¥§¥Ö¶õ´Ö¤Î
-<code>/dir/</code> ¤È¤¤¤¦¥Ñ¥¹¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î
-<code>/usr/local/apache2/htdocs/dir/</code> ¤È¤¤¤¦¥Ñ¥¹¤ËÂбþ¤·¤Þ¤¹¡£
-¥¦¥§¥Ö¥Ú¡¼¥¸¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤ä¾¤Î¾ì½ê¤«¤éưŪ¤ËÀ¸À®¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢
-¥¦¥§¥Ö¶õ´Ö¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ËľÀܥޥåפ¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£</p>
-
-<h3><a name="filesystem" id="filesystem">¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥³¥ó¥Æ¥Ê</a></h3>
-
-<p><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢¤½¤ì¤È
-¤½¤ì¤é¤ÎÀµµ¬É½¸½ÈǤϥǥ£¥ì¥¯¥Æ¥£¥Ö¤ò¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î°ìÉôʬ¤ËÂФ·¤ÆŬÍѤ·¤Þ¤¹¡£
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Î
-Ãæ¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤È¤½¤Î¤¹¤Ù¤Æ¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë
-ŬÍѤµ¤ì¤Þ¤¹¡£<a href="howto/htaccess.html">.htaccess ¥Õ¥¡¥¤¥ë</a>¤ò
-»È¤¦¤³¤È¤Ç¤âƱ¤¸¸ú²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¡¢¼¡¤ÎÀßÄê¤Ç¤Ï
-<code>/var/web/dir1</code> ¤È¤¹¤Ù¤Æ¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ
-¥Ç¥£¥ì¥¯¥È¥ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Directory /var/web/dir1&gt;<br />
-Options +Indexes<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤Î
-Ãæ¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤É¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë¤«¤Ë´Ø¤ï¤é¤º¡¢»ØÄꤵ¤ì¤¿Ì¾Á°¤Î
-¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤ËŬÍѤµ¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤éÎ㤨¤Ð°Ê²¼¤ÎÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬
-ÀßÄê¥Õ¥¡¥¤¥ë¤Î¼ç¥»¥¯¥·¥ç¥ó¤Ë½ñ¤«¤ì¤¿¤È¤­¤Ë¤Ï¡¢¤¹¤Ù¤Æ¤Î¾ì½ê¤Î
-<code>private.html</code> ¤È¤¤¤¦Ì¾Á°¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î¥¢¥¯¥»¥¹¤òµñÈݤ·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;
-</code></p></div>
-
-<p>¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎÆÃÄê¤Î¾ì½ê¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¤¿¤á¤Ë¡¢
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤È
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤ò
-ÁȤ߹ç¤ï¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¡¢¼¡¤ÎÀßÄê¤Ç¤Ï
-<code>/var/web/dir1/private.html</code>,
-<code>/var/web/dir1/subdir2/private.html</code>,
-<code>/var/web/dir1/subdir3/private.html</code> ¤Ê¤É¡¢
-<code>/var/web/dir1/</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë¤¢¤ë¤¹¤Ù¤Æ¤Î
-<code>private.html</code> ¤Ø¤Î¥¢¥¯¥»¥¹¤òµñÈݤ·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Directory /var/web/dir1&gt;<br />
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-
-<h3><a name="webspace" id="webspace">¥¦¥§¥Ö¶õ´Ö¥³¥ó¥Æ¥Ê</a></h3>
-
-<p>°ìÊý¡¢<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¤½¤ÎÀµµ¬É½¸½ÈǤϥ¦¥§¥Ö¶õ´Ö¾å¤ÎÆâÍƤËÂФ·¤ÆÀßÄê¤òÊѹ¹¤·¤Þ¤¹¡£
-¤¿¤È¤¨¤Ð¡¢¼¡¤ÎÀßÄê¤Ç¤Ï /private ¤Ç»Ï¤Þ¤ë URL ¥Ñ¥¹¤Ø¤Î¥¢¥¯¥»¥¹¤òÀ©¸Â¤·¤Þ¤¹¡£
-¶ñÂÎŪ¤Ë¤Ï¡¢
-<code>http://yoursite.example.com/private</code>,
-<code>http://yoursite.example.com/private123</code>,
-<code>http://yoursite.example.com/private/dir/file.html</code>
-¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ä¡¢
-¾¤ÎƱÍÍ¤Ë <code>/private</code> ʸ»úÎó¤Ç»Ï¤Þ¤ë¥ê¥¯¥¨¥¹¥È¤Ë
-ŬÍѤµ¤ì¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Location /private&gt;<br />
-Order Allow,Deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤È´Ø·¸¤¢¤ëɬÍפ¬Á´¤¯¤¢¤ê¤Þ¤»¤ó¡£
-¤¿¤È¤¨¤Ð¼¡¤ÎÎã¤Ç¤Ï¡¢¤É¤Î¤è¤¦¤Ë¤·¤ÆÆÃÄê¤Î URL ¤ò
-<code class="module"><a href="./mod/mod_status.html">mod_status</a></code>¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë Apache
-ÆâÉô¥Ï¥ó¥É¥é¤Ë¥Þ¥Ã¥×¤¹¤ë¤«¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë
-<code>server-status</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£</p>
-
-<div class="example"><p><code>
-&lt;Location /server-status&gt;<br />
-SetHandler server-status<br />
-&lt;/Location&gt;
-</code></p></div>
-
-
-<h3><a name="wildcards" id="wildcards">¥ï¥¤¥ë¥É¥«¡¼¥É¤ÈÀµµ¬É½¸½</a></h3>
-
-<p><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï¡¢ C ɸ½à¥é¥¤¥Ö¥é¥ê¤Î <code>fnmatch</code> ¤Î¤è¤¦¤Ë
-shell ¥¹¥¿¥¤¥ë¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¥­¥ã¥é¥¯¥¿¤¬»ÈÍѤǤ­¤Þ¤¹¡£
-"*" ʸ»ú¤ÏǤ°Õ¤Îʸ»úÎó¤Ë¥Þ¥Ã¥Á¤·¡¢"?" ʸ»ú¤ÏǤ°Õ¤Î 1 ʸ»ú¤Ë¥Þ¥Ã¥Á¤·¡¢
-"[<em>seq</em>]" ¤Ï <em>seq</em> ¤ÎǤ°Õ¤Îʸ»ú¤Ë¥Þ¥Ã¥Á¤·¤Þ¤¹¡£
-"/" ʸ»ú¤Ï¤É¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¤Ç¤â¥Þ¥Ã¥Á¤µ¤ì¤Þ¤»¤ó¡£
-ÌÀ¼¨Åª¤Ë»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-<p>¤³¤ì¤è¤ê½ÀÆð¤Ê¥Þ¥Ã¥Á¥ó¥°¤¬É¬Íפʾì¹ç¤Ï¡¢¤³¤ì¤é¤Î¥³¥ó¥Æ¥Ê¤ËÀµµ¬É½¸½
-(regex) ÈǤǤ¢¤ë
-<code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
-¤¬¤¢¤ê¡¢¥Þ¥Ã¥Á¤òÁªÂò¤¹¤ë¤Î¤Ë perl ¸ß´¹<a href="glossary.html#regex">Àµµ¬É½¸½</a>¤ò»ÈÍѤǤ­¤Þ¤¹¡£¤·¤«¤·¡¢¼¡¤ÎÀßÄê¤Î¥Þ¡¼¥¸¤ËÌܤòÄ̤·¤Æ¡¢
-regex ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎŬÍѤ¬¤É¤Î¤è¤¦¤Ë
-ÊѲ½¤¹¤ë¤«ÇÄ°®¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-<p>Á´¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê¤ÎÀßÄê¤òÊѹ¹¤¹¤ë¡¢Èó regex
-¥ï¥¤¥ë¥É¥«¡¼¥É¥»¥¯¥·¥ç¥ó¤Ï¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Directory /home/*/public_html&gt;<br />
-Options Indexes<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-<p>regex ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢²èÁü¥Õ¥¡¥¤¥ë¤Î¿¤¯¤Î¥¿¥¤¥×¤ËÂФ¹¤ë
-¥¢¥¯¥»¥¹¤ò°ìÅ٤˵ñÈݤǤ­¤Þ¤¹¡£</p>
-<div class="example"><p><code>
-&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/FilesMatch&gt;
-</code></p></div>
-
-
-
-<h3><a name="whichwhen" id="whichwhen">¤¤¤Ä²¿¤ò»È¤¦¤«</a></h3>
-
-<p>¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥³¥ó¥Æ¥Ê¤È¥¦¥§¥Ö¶õ´Ö¥³¥ó¥Æ¥Ê¤ò»È¤¤Ê¬¤±¤ë¤Î¤Ï¡¢
-¼ÂºÝ¤Ë¤ÏÈó¾ï¤Ë´Êñ¤Ç¤¹¡£¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë
-¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òŬ±þ¤¹¤ë¾ì¹ç¤Ï¡¢É¬¤º
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¤«
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
-¤ò»ÈÍѤ·¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë°Í¸¤·¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È
-(¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤éÀ¸À®¤µ¤ì¤ë¥¦¥§¥Ö¥Ú¡¼¥¸¤Ê¤É)
-¤Ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òŬÍѤ¹¤ëºÝ¤Ë¤Ï¡¢
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-¤ò»ÈÍѤ·¤Þ¤¹¡£</p>
-
-<p>¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥¢¥¯¥»¥¹¤òÀ©¸Â¤¹¤ë¤¿¤á¤Ë¡¢
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-¤ò·è¤·¤Æ»ÈÍѤʤ¤¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£
-Ʊ°ì¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à°ÌÃ֤˥ޥåפ·¤Æ¤¤¤ë¡¢¥¦¥§¥Ö¶õ´Ö°ÌÃÖ (URL)
-¤¬Â¿¿ô¤¢¤Ã¤Æ¡¢ÀßÄꤷ¤¿À©¸Â¤ò±ª²ó¤µ¤ì¤Æ¤·¤Þ¤¦¤«¤â¤·¤ì¤Ê¤¤¤«¤é¤Ç¤¹¡£
-Î㤨¤Ð¼¡¤ÎÀßÄê¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£</p>
-
-<div class="example"><p><code>
-&lt;Location /dir/&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</code></p></div>
-
-<p><code>http://yoursite.example.com/dir/</code>
-¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ç¤Ï¾å¼ê¤¯Æ°ºî¤·¤Þ¤¹¡£¤·¤«¤·Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤
-¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»È¤Ã¤Æ¤¤¤¿¤é¤É¤¦¤Ê¤ë¤Ç¤·¤ç¤¦?
-<code>http://yoursite.example.com/DIR/</code>
-¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ç´Êñ¤Ë¥¢¥¯¥»¥¹À©¸Â¤ò±ª²ó¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤³¤ì¤ËÂФ·¤Æ
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤È¡¢¤É¤Î¤è¤¦¤Ë¸Æ¤Ó½Ð¤µ¤ì¤¿¤«¤Ë´Ø¤ï¤é¤º
-¤½¤Î¾ì½ê¤«¤éÄ󶡤µ¤ì¤ëÆâÍƤËŬÍѤµ¤ì¤Þ¤¹¡£
-(Îã³°¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥ê¥ó¥¯¤Ç¤¹¡£¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò»È¤Ã¤Æ¡¢
-Ʊ°ì¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ËÀßÃ֤Ǥ­¤Þ¤¹¡£
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ñ¥¹Ì¾¤ò¥ê¥»¥Ã¥È¤¹¤ë¤³¤È¤Ê¤¯¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò
-é¤ê¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¹âÅ٤ʥ»¥­¥å¥ê¥Æ¥£¤¬Í׵ᤵ¤ì¤ë¾ì¹ç¤Ï¡¢
-ŬÀÚ¤Ë <code class="directive"><a href="./mod/core.html#options">Options</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ·¤Æ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò̵¸ú¤Ë¤¹¤ë¤Ù¤­¤Ç¤¹¡£)</p>
-
-<p>Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤¹¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»ÈÍѤ·¤Æ¤¤¤ë¤«¤é¾åµ­¤Î¤³¤È¤Ï
-̵´Ø·¸¤À¤È»×¤ï¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢
-Ʊ°ì¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à°ÌÃÖ¤ËÊ£¿ô¤Î¥¦¥§¥Ö¶õ´Ö°ÌÃÖ¤ò¥Þ¥Ã¥×¤¹¤ëÊýË¡¤Ï¡¢
-¾¤Ë¤¤¤¯¤é¤Ç¤â¤¢¤ë¤È¤¤¤¦¤³¤È¤ò³Ð¤¨¤Æ¤¤¤Æ¤¯¤À¤µ¤¤¡£
-¤Ç¤¹¤«¤é¤Ç¤­¤ë¸Â¤ê¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥³¥ó¥Æ¥Ê¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
-¤·¤«¤·¤Ê¤¬¤é°ì¤Ä¤À¤±Îã³°¤¬¤¢¤ê¤Þ¤¹¡£
-<code>&lt;Location /&gt;</code> ¥»¥¯¥·¥ç¥ó¤Ï¤É¤ó¤Ê URL
-¤Ë¤â´Ø¤ï¤é¤ºÅ¬ÍѤµ¤ì¤ë¤Î¤Ç¡¢´°Á´¤Ë°ÂÁ´¤Ç¤¹¡£</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></h2>
-
-<p><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
-¥³¥ó¥Æ¥Ê¤ÏÆÃÄê¤Î¥Û¥¹¥È¤ËŬÍѤ¹¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò³ÊǼ¤·¤Þ¤¹¡£
-°ìÂæ¤Î¥Þ¥·¥ó¤ÇÊ£¿ô¤Î¥Û¥¹¥È¤ò°Û¤Ê¤ëÀßÄê¤ÇÄ󶡤·¤¿¤¤¤È¤­¤ËÍ­ÍѤǤ¹¡£
-¾ÜºÙ¤Ë´Ø¤·¤Æ¤Ï<a href="vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¥É¥­¥å¥á¥ó¥È</a>¤ò
-¤´Í÷²¼¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">¥×¥í¥¯¥·</a></h2>
-
-<p><code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
-¤È <code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>
-¥³¥ó¥Æ¥Ê¤Ï¡¢ÆÃÄê¤Î URL ¤Ë¥Þ¥Ã¥Á¤¹¤ë <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>
-¥×¥í¥¯¥·¥µ¡¼¥Ð¤ò·Ðͳ¤·¤Æ¥¢¥¯¥»¥¹¤·¤¿¥µ¥¤¥È¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤ë
-ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò³ÊǼ¤·¤Þ¤¹¡£Î㤨¤Ð¼¡¤ÎÀßÄê¤Ï¡¢<code>cnn.com</code>
-¥¦¥§¥Ö¥µ¥¤¥È¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¥×¥í¥¯¥·¥µ¡¼¥Ð¤ò
-À©¸Â¤·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Proxy http://cnn.com/*&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Proxy&gt;
-</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="whatwhere" id="whatwhere">¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»È¤¨¤ë¤Î?</a></h2>
-
-<p>¤É¤Î¥¿¥¤¥×¤ÎÀßÄꥻ¥¯¥·¥ç¥ó¤Ç¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»ÈÍѤǤ­¤ë¤«¤Ï¡¢
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î <a href="mod/directive-dict.html#Context">Context</a>
-¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¤Ç»ÈÍѲÄǽ¤Ê¤â¤Î¤ÏÁ´¤Æ¡¢Æ±ÍͤË
-<code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>,
-<code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>,
-<code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤Ç»ÈÍѲÄǽ¤Ç¤¹¡£¤·¤«¤·¤Ê¤¬¤é´ö¤Ä¤«Îã³°¤â¸ºß¤·¤Þ¤¹¡£</p>
-
-<ul>
-<li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤Ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£</li>
-
-<li><code>FollowSymLinks</code> ¤È <code>SymLinksIfOwnerMatch</code> ¤Î
-<code class="directive"><a href="./mod/core.html#options">Options</a></code> ¤Ï¡¢
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤« <code>.htaccess</code> ¥Õ¥¡¥¤¥ë¤Ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£</li>
-
-<li><code class="directive"><a href="./mod/core.html#options">Options</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
-¤È <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤Ç¤Ï»ÈÍѤǤ­¤Þ¤»¤ó¡£</li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mergin" id="mergin">¥»¥¯¥·¥ç¥ó¤Î¥Þ¡¼¥¸ÊýË¡</a></h2>
-
- <p>¥Þ¡¼¥¸¤Î½çÈ֤ϰʲ¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹:</p>
-
- <ol>
- <li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> (Àµµ¬É½¸½Ìµ¤·) ¤È
- <code>.htaccess</code> ¤òƱ»þ¤Ë (<code>.htaccess</code> ¤¬µö²Ä¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢¤½¤ì¤¬
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¤ò¾å½ñ¤­¤·¤Þ¤¹)
- </li>
-
- <li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>
- (¤È <code>&lt;Directory ~&gt;</code></li>
-
- <li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> ¤È
- <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code> ¤òƱ»þ¤Ë</li>
-
- <li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> ¤È
- <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> ¤òƱ»þ¤Ë</li>
- </ol>
-
- <p><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
- °Ê³°¤Ï¡¢¤½¤ì¤¾¤ì¤Î¥°¥ë¡¼¥×¤ÏÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸½¤ì¤¿½çÈ֤˽èÍý¤µ¤ì¤Þ¤¹¡£
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> (¾å¤Î¥°¥ë¡¼¥× 1)
- ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤¬Ã»¤¤¤â¤Î¤«¤éŤ¤¤â¤Î¤Ø¤È½èÍý¤µ¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢
- Î㤨¤Ð <code>&lt;Directory /var/web/dir1&gt;</code> ¤Ï
- <code>&lt;Directory /var/web/dir/subdir&gt;</code> ¤ÎÁ°¤Ë½èÍý¤µ¤ì¤Þ¤¹¡£Ê£¿ô¤Î
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¥»¥¯¥·¥ç¥ó¤¬
- Ʊ¤¸¥Ç¥£¥ì¥¯¥È¥ê¤Ë
- ŬÍѤµ¤ì¤ë¾ì¹ç¤Ï¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Î½çÈ֤˽¾¤Ã¤Æ½èÍý¤µ¤ì¤Þ¤¹¡£
- <code class="directive"><a href="./mod/core.html#include">Include</a></code>
- ¤Ë¤è¤Ã¤ÆÁÞÆþ¤µ¤ì¤¿ÀßÄê¤Ï ÁÞÆþ¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Î
- <code class="directive"><a href="./mod/core.html#include">Include</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ÌÃ֤ˤ¢¤Ã¤¿¤«¤Î¤è¤¦¤Ë°·¤ï¤ì¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¥»¥¯¥·¥ç¥óÃæ¤Î¥»¥¯¥·¥ç¥ó¤Ï
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÄêµÁ¤Î³°Â¦¤ÎÂбþ¤¹¤ë¥»¥¯¥·¥ç¥ó¤Î
- <em>¸å</em>¤ËŬÍѤµ¤ì¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬
- ¥á¥¤¥ó¤Î¥µ¡¼¥ÐÀßÄê¤ò¾å½ñ¤­¤Ç¤­¤ë¤è¤¦¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> ¤Ç¥ê¥¯¥¨¥¹¥È¤¬½èÍý¤µ¤ì¤ë¾ì¹ç¤Ï¡¢
- ½èÍý½çÈ֤Τ¦¤Á¡¢<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¥³¥ó¥Æ¥Ê¤ÎÉôʬ¤¬
- <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- ¥³¥ó¥Æ¥Ê¤Ë¼è¤Ã¤ÆÂå¤ï¤é¤ì¤Þ¤¹¡£</p>
-
- <p>¸å¤Î¥»¥¯¥·¥ç¥ó¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬Á°¤Î¥»¥¯¥·¥ç¥ó¤Î¤â¤Î¤ò¾å½ñ¤­¤·¤Þ¤¹¡£</p>
-
-
-<div class="note"><h3>µ»½Ñ¥á¥â</h3>
- ¼ÂºÝ¤Ë¤Ï¡¢Ì¾Á°¤òÊÑ´¹¤¹¤ëÃʳ¬ (URL
- ¤ò¥Õ¥¡¥¤¥ë̾¤Ë¥Þ¥Ã¥×¤¹¤ë¤¿¤á¤Ë <code>Alias</code> ¤ä
- <code>DocumentRoot</code> ¤¬»ÈÍѤµ¤ì¤ë¤È¤³¤í) ¤ÎľÁ°¤Ë
- <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>/<code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
- ¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- ¤³¤ì¤é¤òŬÍѤ·¤¿·ë²Ì¤ÏÊÑ´¹¤¬½ª¤ï¤Ã¤¿¸å¤Ë´°Á´¤Ë¼Î¤Æ¤é¤ì¤Þ¤¹¡£
-</div>
-<h3><a name="merge-examples" id="merge-examples">Îã</a></h3>
-
-<p>¼¡¤Ï¥Þ¡¼¥¸¤Î½çÈÖ¤ò¼¨¤¹¤¿¤á¤Î×ó°ÕŪ¤ÊÎã¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
-¥ê¥¯¥¨¥¹¥ÈÁ´¤Æ¤ËŬÍѤµ¤ì¤ë¤È¤·¤Æ¡¢ËÜÎã¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-A &gt; B &gt; C &gt; D &gt; E ¤Î½çÈÖ¤ËŬÍѤµ¤ì¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-&lt;Location /&gt;<br />
-E<br />
-&lt;/Location&gt;<br />
-<br />
-&lt;Files f.html&gt;<br />
-D<br />
-&lt;/Files&gt;<br />
-<br />
-&lt;VirtualHost *&gt;<br />
-&lt;Directory /a/b&gt;<br />
-B<br />
-&lt;/Directory&gt;<br />
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;DirectoryMatch "^.*b$"&gt;<br />
-C<br />
-&lt;/DirectoryMatch&gt;<br />
-<br />
-&lt;Directory /a/b&gt;<br />
-A<br />
-&lt;/Directory&gt;<br />
-<br />
-</code></p></div>
-
-<p>¤â¤Ã¤È¶ñÂÎŪ¤Ê¡¢¼¡¤ÎÎã¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤ËÀßÃÖ¤µ¤ì¤¿¥¢¥¯¥»¥¹À©¸Â¤Ë´Ø¤ï¤é¤º¡¢
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-¥»¥¯¥·¥ç¥ó¤¬ºÇ¸å¤Ëɾ²Á¤µ¤ì¤Æ¡¢¥µ¡¼¥Ð¤Ø¤Î¥¢¥¯¥»¥¹¤ÏÀ©¸Â¤µ¤ì¤Þ¤»¤ó¡£
-¸À¤¤´¹¤¨¤ì¤Ð¡¢¥Þ¡¼¥¸¤Î½çÈ֤ϽÅÍפǡ¢Ãí°Õ¤·¤Æ»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤!</p>
-
-<div class="example"><p><code>
-&lt;Location /&gt;<br />
-Order deny,allow<br />
-Allow from all<br />
-&lt;/Location&gt;<br />
-<br />
-# Woops! This &lt;Directory&gt; section will have no effect<br />
-&lt;Directory /&gt;<br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/sections.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sections.html.ko.euc-kr b/docs/manual/sections.html.ko.euc-kr
deleted file mode 100644
index 26fbb63dbd..0000000000
--- a/docs/manual/sections.html.ko.euc-kr
+++ /dev/null
@@ -1,420 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¼½¼Ç ¼³Á¤ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¼½¼Ç ¼³Á¤</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sections.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
- <p><a href="configuring.html">¼³Á¤ÆÄÀÏ</a>¿¡ ÀÖ´Â
-Áö½Ã¾î´Â ¼­¹ö Àüü¿¡ Àû¿ëµÇ°Å³ª, ƯÁ¤ µð·ºÅ丮, ÆÄÀÏ, È£½ºÆ®,
-URL¿¡¸¸ Àû¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ´Ù¸¥ Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦
-Á¦ÇÑÇϱâÀ§ÇØ ¼³Á¤ ¼½¼ÇÀ̳ª <code>.htaccess</code> ÆÄÀÏÀ»
-»ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#types">¼³Á¤ ¼½¼ÇÀÇ Á¾·ù</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#file-and-web">ÆÄÀϽýºÅÛ°ú À¥°ø°£</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">°¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#proxy">ÇÁ·Ï½Ã</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#whatwhere">¾È¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö
-ÀÖ³ª?</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#mergin">¼½¼ÇµéÀÌ °áÇÕÇÏ´Â ¹æ¹ý</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="types" id="types">¼³Á¤ ¼½¼ÇÀÇ Á¾·ù</a></h2>
-
-<table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
-<p>¼½¼Ç¿¡´Â µÎ°¡Áö Á¾·ù°¡ ÀÖ´Ù. ´ëºÎºÐÀº ¸Å¿äû¸¶´Ù 󸮵ȴÙ.
-ÇØ´çÇÏ´Â ¿äû¿¡¸¸ ¾È¿¡ Æ÷ÇÔÇÑ Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ¹Ý´ë·Î, <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>°ú <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>Àº ¼­¹ö°¡
-½ÃÀÛÇÒ¶§¿Í ²¨Áú¶§¸¸ ó¸®ÇÑ´Ù. ½ÃÀÛÇÒ¶§ »óÅ°¡ ÂüÀÌ¸é ¾È¿¡ ÀÖ´Â
-Áö½Ã¾î°¡ ¸ðµç ¿äû¿¡ Àû¿ëµÈ´Ù. ÂüÀÌ ¾Æ´Ï¸é ¾È¿¡ ÀÖ´Â Áö½Ã¾î´Â
-¹«½ÃÇÑ´Ù.</p>
-
-<p><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>
-Áö½Ã¾î´Â <code>httpd</code> ¸í·ÉÇà¿¡ ÀûÀýÇÑ ÆĶó¹ÌÅÍ°¡ ÀÖ´Â
-°æ¿ì¿¡¸¸ ¾È¿¡ Æ÷ÇÔÇÑ Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é,
-¼­¹ö¸¦ <code>httpd -DClosedForNow</code>·Î ½ÃÀÛÇÒ °æ¿ì¿¡¸¸
-¸ðµç ¿äûÀÌ ´Ù¸¥ »çÀÌÆ®·Î ¸®´ÙÀÌ·º¼ÇµÈ´Ù:</p>
-
-<div class="example"><p><code>
-&lt;IfDefine ClosedForNow&gt;<br />
-Redirect / http://otherserver.example.com/<br />
-&lt;/IfDefine&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
-Áö½Ã¾îµµ ƯÁ¤ ¸ðµâÀÌ ¼­¹ö¿¡ Æ÷ÇÔµÈ °æ¿ì¿¡¸¸ ¾È¿¡ µç Áö½Ã¾î¸¦
-Àû¿ëÇÑ´Ù´Â Á¡À» Á¦¿ÜÇÏ°í´Â ¸Å¿ì ºñ½ÁÇÏ´Ù. ¸ðµâÀ» ¼­¹ö¿¡ Á¤ÀûÀ¸·Î
-ÄÄÆÄÀÏÇϰųª µ¿ÀûÀ¸·Î ÄÄÆÄÀÏÇÑÈÄ ¼³Á¤ÆÄÀÏ ¾Õ¿¡ <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> ÁÙÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ
-Áö½Ã¾î´Â ƯÁ¤ ¸ðµâÀÇ ¼³Ä¡À¯¹«¿¡ µû¶ó ¼³Á¤ÆÄÀÏÀÌ ´Ù¸¦ ÇÊ¿ä°¡
-ÀÖÀ»¶§¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù. ¸ðµâÀÌ ¾ø´Â °æ¿ì À¯¿ëÇÑ ¿À·ù¹®ÀÌ ³ª¿ÀÁö¾ÊÀ»
-¼ö Àֱ⠶§¹®¿¡ ¾ðÁ¦³ª »ç¿ëÇÏ±æ ¿øÇÏ´Â Áö½Ã¾î¸¦ ¾È¿¡ µÎ¸é ¾ÈµÈ´Ù.</p>
-
-<p>´ÙÀ½ ¿¹¿¡¼­ <code class="module"><a href="./mod/mod_mime_magic.html">mod_mime_magic</a></code>ÀÌ ÀÖÀ»¶§¸¸ <code class="directive"><a href="./mod/mod_mime_magic.html#mimemagicfiles">MimeMagicFiles</a></code> Áö½Ã¾î¸¦
-ó¸®ÇÑ´Ù.</p>
-
-<div class="example"><p><code>
-&lt;IfModule mod_mime_magic.c&gt;<br />
-MimeMagicFile conf/magic<br />
-&lt;/IfModule&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>°ú
-<code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>ÀÇ
-°Ë»ç ¾Õ¿¡ "!"À» ºÙ¿© Á¶°ÇÀ» ¿ªÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. ¶Ç, ¿©·¯ ¼½¼ÇµéÀ»
-°ãÃļ­ »ç¿ëÇÏ¿© ´õ º¹ÀâÇÑ È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="file-and-web" id="file-and-web">ÆÄÀϽýºÅÛ°ú À¥°ø°£</a></h2>
-
-<p>°¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ¼³Á¤ ¼½¼ÇÀº ÆÄÀϽýºÅÛ°ú À¥°ø°£(webspace)ÀÇ
-ƯÁ¤ Àå¼Ò¿¡ ´ëÇÑ ¼³Á¤À» º¯°æÇÏ´Â °ÍµéÀÌ´Ù. ¸ÕÀú ÀÌ µÑÀÇ Â÷À̸¦
-ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ÆÄÀϽýºÅÛÀº ¿î¿µÃ¼Á¦ ÀÔÀå¿¡¼­ µð½ºÅ©¸¦
-º¸´Â °üÁ¡ÀÌ´Ù. ¿¹¸¦ µé¾î, ±âº»°ªÀ¸·Î ¾ÆÆÄÄ¡¸¦ ¼³Ä¡¸¦ Çϸé À¯´Ð½º
-ÆÄÀϽýºÅÛÀÇ °æ¿ì <code>/usr/local/apache2</code>, À©µµ¿ìÁî
-ÆÄÀϽýºÅÛÀÇ °æ¿ì <code>"c:/Program Files/Apache
-Group/Apache2"</code>¿¡ ¼³Ä¡µÈ´Ù. (¾ÆÆÄÄ¡´Â À©µµ¿ìÁî¿¡¼­ Á¶Â÷
-Ç×»ó, ¿ª½½·¡½¬°¡ ¾Æ´Ñ, ½½·¡½¬¸¦ »ç¿ëÇÔÀ» ÁÖÀÇÇ϶ó.) ¹Ý´ë·Î
-À¥°ø°£Àº À¥¼­¹ö°¡ Á¦°øÇÏ°í Ŭ¶óÀ̾ðÆ®°¡ º¸°ÔµÉ »çÀÌÆ®ÀÇ °üÁ¡ÀÌ´Ù.
-±×·¡¼­ À¯´Ð½º¿¡¼­ ±âº» ¾ÆÆÄÄ¡ ¼³Ä¡¸¦ ÇÑ °æ¿ì À¥°æ·ÎÀÇ °æ·Î
-<code>/dir/</code>Àº ÆÄÀϽýºÅÛ °æ·Î
-<code>/usr/local/apache2/htdocs/dir/</code>¿¡ ÇØ´çÇÑ´Ù. À¥°ø°£Àº
-µ¥ÀÌŸº£À̽º µî¿¡¼­ µ¿ÀûÀ¸·Î »ý¼ºµÉ ¼ö Àֱ⶧¹®¿¡ ¹Ýµå½Ã
-ÆÄÀϽýºÅÛ¿¡ Á÷Á¢ ´ëÀÀµÉ ÇÊ¿ä´Â ¾ø´Ù.</p>
-
-<h3><a name="filesystem" id="filesystem">ÆÄÀϽýºÅÛ ¼½¼Ç</a></h3>
-
-<p><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>¿Í
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> Áö½Ã¾î¿Í
-Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ´Â Áö½Ã¾î´Â ÆÄÀϽýºÅÛÀÇ Æ¯Á¤ ºÎºÐ¿¡ Áö½Ã¾î¸¦
-Àû¿ëÇÑ´Ù. <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> Áö½Ã¾î¿¡ Æ÷ÇÔµÈ Áö½Ã¾îµéÀº
-ÁöÁ¤ÇÑ ÆÄÀϽýºÅÛ µð·ºÅ丮¿Í ±× ÇÏÀ§ µð·ºÅ丮¿¡ Àû¿ëµÈ´Ù. <a href="howto/htaccess.html">.htaccess ÆÄÀÏ</a>À» »ç¿ëÇصµ °á°ú´Â
-°°´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, µð·ºÅ丮 ¸ñ·Ï(index)ÀÌ
-<code>/var/web/dir1</code> ÀÌÇÏ µð·ºÅ丮¿¡¼­ µð·ºÅ丮 ¸ñ·Ï(index)ÀÌ
-°¡´ÉÇÏ´Ù.</p>
-
-<div class="example"><p><code>
-&lt;Directory /var/web/dir1&gt;<br />
-Options +Indexes<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> ¼½¼Ç¿¡ Æ÷ÇÔµÈ Áö½Ã¾îµéÀº ¾î¶²
-µð·ºÅ丮¿¡ ÀÖ´ÂÁö °ü°è¾øÀÌ ÁöÁ¤ÇÑ À̸§À» °¡Áø ÆÄÀÏ¿¡ Àû¿ëµÈ´Ù.
-¼³Á¤ÆÄÀÏÀÇ ÁÖ¼³Á¤ºÎºÐ¿¡ ÀÖ´Â ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, Àå¼Ò¿Í
-°ü°è¾øÀÌ <code>private.html</code>À̶õ À̸§À» ÇÑ ÆÄÀÏÀÇ Á¢±ÙÀ»
-°ÅºÎÇÑ´Ù.</p>
-
-<div class="example"><p><code>
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;
-</code></p></div>
-
-<p>ÆÄÀϽýºÅÛÀÇ Æ¯Á¤ ºÎºÐ¿¡ ÀÖ´Â ÆÄÀÏÀ» ÁöĪÇϱâÀ§ÇØ <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>¿Í <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼ÇÀ» °°ÀÌ
-»ç¿ëÇÑ´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é,
-<code>/var/web/dir1/private.html</code>,
-<code>/var/web/dir1/subdir2/private.html</code>,
-<code>/var/web/dir1/subdir3/private.html</code> °°ÀÌ
-<code>/var/web/dir1/</code> µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â À̸§ÀÌ
-<code>private.html</code>ÀÎ ÆÄÀÏÀÇ Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
-<div class="example"><p><code>
-&lt;Directory /var/web/dir1&gt;<br />
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-
-<h3><a name="webspace" id="webspace">À¥°ø°£ ¼½¼Ç</a></h3>
-
-<p><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-Áö½Ã¾î¿Í ÀÌ¿¡ ÇØ´çÇÏ´Â Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ´Â Áö½Ã¾î´Â ¹Ý´ë·Î
-ƯÁ¤ À¥°ø°£ÀÇ ¼³Á¤À» ¹Ù²Û´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, /privateÀ¸·Î
-½ÃÀÛÇÏ´Â URL-°æ·ÎÀÇ Á¢±ÙÀÌ °ÅºÎµÈ´Ù. ¿©±â¿¡´Â
-<code>http://yoursite.example.com/private</code>,
-<code>http://yoursite.example.com/private123</code>,
-<code>http://yoursite.example.com/private/dir/file.html</code>
-°°ÀÌ <code>/private</code> ¹®ÀÚ¿­·Î ½ÃÀÛÇÏ´Â ¿äûÀÌ ÇØ´çµÈ´Ù.</p>
-
-<div class="example"><p><code>
-&lt;Location /private&gt;<br />
-Order Allow,Deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-Áö½Ã¾î´Â ÆÄÀϽýºÅÛ¿¡ ´ëÀÀÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½ ¿¹´Â ¾î¶»°Ô ƯÁ¤
-URLÀ» <code class="module"><a href="./mod/mod_status.html">mod_status</a></code>°¡ Á¦°øÇÏ´Â ¾ÆÆÄÄ¡ ³»ºÎ Çڵ鷯·Î
-´ëÀÀ½ÃÅ°´ÂÁö¸¦ º¸¿©ÁØ´Ù. ÆÄÀϽýºÅÛ¿¡ <code>server-status</code>¶ó´Â
-ÆÄÀÏÀº ÇÊ¿ä¾ø´Ù.</p>
-
-<div class="example"><p><code>
-&lt;Location /server-status&gt;<br />
-SetHandler server-status<br />
-&lt;/Location&gt;
-</code></p></div>
-
-
-<h3><a name="wildcards" id="wildcards">¿ÍÀϵåÄ«µå¿Í Á¤±ÔÇ¥Çö½Ä</a></h3>
-
-<p><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>,
-<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
-Áö½Ã¾î¿¡¼­ C Ç¥ÁØ ÆÄÀ̺귯¸®ÀÇ <code>fnmatch</code>¿Í °°Àº
-½©¿¡¼­ »ç¿ëÇÏ´Â ¿ÍÀϵåÄ«µå ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
-"*" ¹®ÀÚ´Â ¾î¶² ¹®ÀÚ¿­ÀÌ¶óµµ ³ªÅ¸³»°í, "?" ¹®ÀÚ´Â ¾î¶² ¹®ÀÚ ÇÑ°³¸¦
-³ªÅ¸³»¸ç, "[<em>seq</em>]"´Â <em>seq</em> Áß¿¡ ÇÑ ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù.
-¾î¶² ¿ÍÀϵåÄ«µåµµ "/" ¹®ÀÚ¸¦ ³ªÅ¸³»Áö´Â ¸øÇÑ´Ù. ±×·¡¼­ ÀÌ ¹®ÀÚ´Â
-Á÷Á¢ »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
-<p>´õ À¯¿¬ÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇϸé perlȣȯ <a href="glossary.html#regex">Á¤±ÔÇ¥Çö½Ä</a>À» »ç¿ëÇÏ´Â <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>¸¦ »ç¿ëÇÒ
-¼ö ÀÖ´Ù. ±×·¯³ª ¾Æ·¡ ¼³Á¤ÀÇ °áÇÕ¿¡ °üÇÑ Àý¿¡¼­ Á¤±ÔÇ¥Çö½Ä ¼½¼ÇÀ»
-»ç¿ëÇϸé Áö½Ã¾î°¡ Àû¿ëµÇ´Â ¹æ¹ýÀÌ ¾î¶»°Ô º¯ÇÏ´ÂÁö »ìÆìºÁ¶ó.</p>
-
-<p>¸ðµç »ç¿ëÀÚ µð·ºÅ丮 ¼³Á¤À» º¯°æÇÏ´Â ºñÁ¤±ÔÇ¥Çö½Ä ¿ÍÀϵåÄ«µå
-¼½¼ÇÀº ´ÙÀ½°ú °°´Ù:</p>
-
-<div class="example"><p><code>
-&lt;Directory /home/*/public_html&gt;<br />
-Options Indexes<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-<p>Á¤±ÔÇ¥Çö½Ä ¼½¼ÇÀ» »ç¿ëÇÏ¿© Çѹø¿¡ ¿©·¯ Á¾·ùÀÇ ±×¸²ÆÄÀÏ¿¡
-´ëÇÑ Á¢±ÙÀ» °ÅºÎÇÒ ¼ö ÀÖ´Ù:</p>
-<div class="example"><p><code>
-&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/FilesMatch&gt;
-</code></p></div>
-
-
-
-<h3><a name="whichwhen" id="whichwhen">¹«¾ùÀ» »ç¿ëÇϳª</a></h3>
-
-<p>ÆÄÀϽýºÅÛ ¼½¼Ç°ú À¥°ø°£ ¼½¼Ç Áß Çϳª¸¦ ¼±ÅÃÇÏ´Â °ÍÀº ½ÇÁ¦·Î
-¸Å¿ì ½±´Ù. ÆÄÀϽýºÅÛ¿¡ ÀÖ´Â °´Ã¼¿¡ Áö½Ã¾î¸¦ Àû¿ëÇÒ¶§´Â Ç×»ó
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>³ª
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>¸¦
-»ç¿ëÇÑ´Ù. (µ¥ÀÌŸº£À̽º¿¡¼­ »ý¼ºÇÑ À¥ÆäÀÌÁö¿Í °°ÀÌ) ÆÄÀϽýºÅÛ¿¡
-ÀÖÁö ¾Ê´Â °´Ã¼¿¡ Áö½Ã¾î¸¦ Àû¿ëÇÒ¶§´Â <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>À» »ç¿ëÇÑ´Ù.</p>
-
-<p>ÆÄÀϽýºÅÛ¿¡ ÀÖ´Â °´Ã¼ÀÇ Á¢±ÙÀ» Á¦ÇÑÇϱâÀ§ÇØ <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>À» »ç¿ëÇϸé
-Àý´ë ¾ÈµÈ´Ù. ¿©·¯ ´Ù¸¥ À¥°ø°£ Àå¼Ò(URL)°¡ °°Àº ÆÄÀϽýºÅÛ Àå¼Ò¿¡
-´ëÀÀµÉ ¼ö ÀÖÀ¸¹Ç·Î, °É¾îµÐ Á¦ÇÑÀ» ¿ìȸÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ´ÙÀ½
-¼³Á¤ÀÇ ¿¹¸¦ »ìÆ캸ÀÚ:</p>
-
-<div class="example"><p><code>
-&lt;Location /dir/&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</code></p></div>
-
-<p>ÀÌ ¼³Á¤Àº <code>http://yoursite.example.com/dir/</code>À»
-¿äûÇÑ´Ù¸é Àß ÀÛµ¿ÇÑ´Ù. ±×·¯³ª ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê´Â ÆÄÀϽýºÅÛÀ»
-»ç¿ëÇÑ´Ù¸é ¾î¶»°ÔµÇ³ª?
-<code>http://yoursite.example.com/DIR/</code>À» ¿äûÇÏ¿© ½±°Ô
-Á¦ÇÑÀ» ¿ìȸÇÒ ¼ö ÀÖ´Ù. ¹Ý´ë·Î <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> Áö½Ã¾î´Â ¾î¶»°Ô ¿äûÇÏ¿´´ÂÁö
-°ü°è¾øÀÌ ±× Àå¼Ò¿¡¼­ ¼­ºñ½ºµÇ´Â ³»¿ë¿¡ Àû¿ëµÈ´Ù. (¿¹¿Ü´Â ÆÄÀϽýºÅÛ
-¸µÅ©¸¦ »ç¿ëÇÏ´Â °æ¿ì´Ù. ½Éº¼¸µÅ©¸¦ »ç¿ëÇÏ¿© ÇÑ µð·ºÅ丮¸¦
-ÆÄÀϽýºÅÛÀÇ ¿©·¯ Àå¼Ò¿¡ µÑ ¼ö ÀÖ´Ù. <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> Áö½Ã¾î´Â ½Éº¼¸µÅ©¸¦ µû¶ó°£´Ù.
-±×·¯¹Ç·Î ³ôÀº ¼öÁØÀÇ º¸¾ÈÀ» À§Çؼ­´Â ÀûÀýÇÑ <code class="directive"><a href="./mod/core.html#options">Options</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ½Éº¼¸µÅ©¸¦
-¹«½ÃÇØ¾ß ÇÑ´Ù.)</p>
-
-<p>¾Æ¸¶µµ ´ç½ÅÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â ÆÄÀϽýºÅÛÀ» »ç¿ëÇϹǷÎ
-ÀÌ·± ÀÏÀÌ ÀϾÁö ¾Ê´Â´Ù°í »ý°¢ÇÒÁöµµ ¸ð¸¥´Ù. ±×·¯³ª ´Ù¸¥
-¹æ¹ýÀ¸·Îµµ ¿©·¯ À¥°ø°£ À§Ä¡°¡ ÇÑ ÆÄÀϽýºÅÛ À§Ä¡¿¡ ´ëÀÀµÉ ¼ö
-ÀÖÀ½À» ±â¾ïÇ϶ó. ±×·¡¼­ °¡´ÉÇϸé Ç×»ó ÆÄÀϽýºÅÛ ¼½¼ÇÀ» »ç¿ëÇؾß
-ÇÑ´Ù. ±×·¯³ª ÀÌ ±ÔÄ¢¿¡ ¿¹¿Ü°¡ Çϳª ÀÖ´Ù. ¼³Á¤ Á¦ÇÑÀ»
-<code>&lt;Location /&gt;</code> ¼½¼Ç¿¡ µÎ¸é ÀÌ ¼½¼ÇÀÌ Æ¯Á¤
-URLÀÌ ¾Æ´Ñ ¸ðµç ¿äû¿¡ Àû¿ëµÇ¹Ç·Î ¿Ïº®ÇÏ°Ô ¾ÈÀüÇÏ´Ù.</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="virtualhost" id="virtualhost">°¡»óÈ£½ºÆ®</a></h2>
-
-<p><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
-¼½¼ÇÀº ƯÁ¤ È£½ºÆ®¿¡ Àû¿ëµÇ´Â Áö½Ã¾îµéÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ´Â ÇÑ
-ÄÄÇ»ÅÍ¿¡¼­ °¢°¢ ´Ù¸¥ ¼³Á¤À» »ç¿ëÇÑ ¿©·¯ È£½ºÆ®¸¦ ¼­ºñ½ºÇÒ¶§
-À¯¿ëÇÏ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="vhosts/">°¡»óÈ£½ºÆ® ¹®¼­</a>¸¦
-Âü°íÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">ÇÁ·Ï½Ã</a></h2>
-
-<p><code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>¿Í
-<code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>
-¼½¼ÇÀº ÁöÁ¤ÇÑ URL¿¡ ´ëÇØ <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> ÇÁ·Ï½Ã ¼­¹ö¸¦
-°ÅÃÄ Á¢±ÙÇÏ´Â °æ¿ì¿¡¸¸ Àû¿ëµÈ´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, ÇÁ·Ï½Ã
-¼­¹ö¸¦ ÅëÇØ <code>cnn.com</code> À¥»çÀÌÆ®¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù.</p>
-
-<div class="example"><p><code>
-&lt;Proxy http://cnn.com/*&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Proxy&gt;
-</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="whatwhere" id="whatwhere">¾È¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö
-ÀÖ³ª?</a></h2>
-
-<p>¾î¶² ¼³Á¤ ¼½¼Ç¾È¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Áö½Ã¾î¸¦ ¾Ë·Á¸é Áö½Ã¾îÀÇ
-<a href="mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦ È®ÀÎÇ϶ó.
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>¿¡¼­
-»ç¿ë°¡´ÉÇÑ Áö½Ã¾î´Â <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>, <code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code> ¼½¼Ç¿¡¼­µµ »ç¿ë°¡´ÉÇÏ´Ù.
-±×·¯³ª, ¿¹¿Ü°¡ ÀÖ´Ù:</p>
-
-<ul>
-<li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> Áö½Ã¾î´Â
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¼½¼Ç¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</li>
-
-<li><code>FollowSymLinks</code>, <code>SymLinksIfOwnerMatch</code>,
-<code class="directive"><a href="./mod/core.html#options">Options</a></code>´Â <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼ÇÀ̳ª
-<code>.htaccess</code> ÆÄÀÏ¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</li>
-
-<li><code class="directive"><a href="./mod/core.html#options">Options</a></code> Áö½Ã¾î´Â
-<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>°ú
-<code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>
-¼½¼Ç¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.</li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mergin" id="mergin">¼½¼ÇµéÀÌ °áÇÕÇÏ´Â ¹æ¹ý</a></h2>
-
-<p>¼³Á¤ ¼½¼ÇÀº ¸Å¿ì Ưº°ÇÑ ¹æ¹ýÀ¸·Î Àû¿ëµÈ´Ù. ÀÌ ¼ø¼­°¡ ¼³Á¤
-Áö½Ã¾î¸¦ Çؼ®ÇÏ´Â ¹æ¹ý¿¡ Áß¿äÇÑ ¿µÇâÀ» Áֱ⶧¹®¿¡ ÀÌ ¹æ¹ýÀ»
-ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.</p>
-
- <p>°áÇÕÇÏ´Â ¼ø¼­´Â:</p>
-
- <ol>
- <li> (Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏÁö¾Ê´Â) <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>¿Í <code>.htaccess</code>´Â
- µ¿½Ã¿¡ ÀϾ´Ù (°æ¿ì¿¡ µû¶ó <code>.htaccess</code>ÀÌ
- <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>¸¦
- ¹«½ÃÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ´Ù)</li>
-
- <li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code> (±×¸®°í
- <code>&lt;Directory ~&gt;</code>)</li>
-
- <li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>¿Í <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>´Â µ¿½Ã¿¡ ÀϾ´Ù</li>
-
- <li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>°ú <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>´Â µ¿½Ã¿¡ ÀϾ´Ù</li>
- </ol>
-
- <p><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>¸¦ Á¦¿ÜÇÏ°í °¢ ¼½¼ÇµéÀ»
- ¼³Á¤ÆÄÀÏ¿¡ ³ª¿Â ¼ø¼­´ë·Î 󸮵ȴÙ. (À§ÀÇ ¼ø¼­ 1) <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>´Â µð·ºÅ丮
- ³»¿ëÀÌ °¡Àå ªÀº °Í¿¡¼­ ±äÂÊÀ¸·Î 󸮵ȴÙ. ±×·¡¼­ ¿¹¸¦ µé¾î,
- <code>&lt;Directory /var/web/dir&gt;</code>À»
- <code>&lt;Directory /var/web/dir/subdir&gt;</code> ÀÌÀü¿¡
- ó¸®ÇÑ´Ù. °°Àº µð·ºÅ丮¸¦ ÁöĪÇÏ´Â ¿©·¯ <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼ÇÀÌ
- ÀÖ´Ù¸é À̵éÀ» ¼³Á¤ÆÄÀÏ ¼ø¼­´ë·Î ó¸®ÇÑ´Ù. <code class="directive"><a href="./mod/core.html#include">Include</a></code> Áö½Ã¾î·Î Æ÷ÇÔÇÑ ¼³Á¤Àº
- <code class="directive"><a href="./mod/core.html#include">Include</a></code> Áö½Ã¾î À§Ä¡¿¡
- Æ÷ÇÔÇÑ ÆÄÀÏ ³»¿ëÀÌ ÀÖ´Â °Íó·³ ó¸®ÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¼½¼Ç ¾È¿¡ Æ÷ÇÔµÈ ¼½¼ÇÀº
- °¡»óÈ£½ºÆ® Á¤ÀÇ ¹Û¿¡ ÀÖ´Â ÇØ´ç ¼½¼Ç <em>ÀÌÈÄ¿¡</em> Àû¿ëµÈ´Ù.
- ±×·¡¼­ °¡»óÈ£½ºÆ® ¾È¿¡¼­ ÁÖ¼­¹öÀÇ ¼³Á¤»çÇ×À» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>°¡ ¿äû ¼­ºñ½ºÇÒ¶§, <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> ¼½¼ÇÀÇ
- 󸮼ø¼­´Â <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ¼½¼Ç°ú °°´Ù.</p>
-
- <p>´ÙÀ½¿¡ ³ª¿À´Â ¼½¼ÇÀº ÀÌÀü ¼½¼ÇÀÇ °á°ú¸¦ ¼öÁ¤ÇÑ´Ù.</p>
-
-<div class="note"><h3>±â¼úÀû ÁÖÀÇ</h3>
- ½ÇÁ¦·Î
- <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>´Â
- (<code>Aliases</code>¿Í <code>DocumentRoot</code>¸¦ »ç¿ëÇÏ¿©
- URLÀ» ÆÄÀϸíÀ¸·Î º¯È¯ÇÏ´Â) À̸§¹ø¿ª ´Ü°è ÀÌÀü¿¡ 󸮵ȴÙ.
- º¯¿ªÀÌ ³¡³­ ÀÌÈÄ¿¡´Â ¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù.
-</div>
-
-<h3><a name="merge-examples" id="merge-examples">¿¹Á¦</a></h3>
-
-<p>´ÙÀ½Àº °ãÇÕÇÏ´Â ¼ø¼­¸¦ ¼³¸íÇÏ´Â ¿¹´Ù. ÀÌµé ¸ðµÎ ¿äû¿¡
-Àû¿ëµÈ´Ù°í °¡Á¤Çϸé Áö½Ã¾î´Â A &gt; B &gt; C &gt; D &gt; E
-¼ø¼­·Î 󸮵ȴÙ.</p>
-
-<div class="example"><p><code>
-&lt;Location /&gt;<br />
-E<br />
-&lt;/Location&gt;<br />
-<br />
-&lt;Files f.html&gt;<br />
-D<br />
-&lt;/Files&gt;<br />
-<br />
-&lt;VirtualHost *&gt;<br />
-&lt;Directory /a/b&gt;<br />
-B<br />
-&lt;/Directory&gt;<br />
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;DirectoryMatch "^.*b$"&gt;<br />
-C<br />
-&lt;/DirectoryMatch&gt;<br />
-<br />
-&lt;Directory /a/b&gt;<br />
-A<br />
-&lt;/Directory&gt;<br />
-<br />
-</code></p></div>
-
-<p>´õ Çö½ÇÀûÀÎ ¿¹´Â ´ÙÀ½°ú °°´Ù. <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> ¼½¼ÇÀ» ³ªÁß¿¡ ó¸®ÇϹǷÎ
-<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
-¼½¼Ç¿¡ ÀÖ´Â Á¢±ÙÁ¦ÇÑ°ú °ü°è¾øÀÌ ¼­¹ö¿¡ ¹«Á¦ÇÑ Á¢±ÙÀ» °¡´ÉÇÏ´Ù.
-Áï, °áÇÕÇÏ´Â ¼ø¼­´Â Áß¿äÇϹǷΠÁÖÀÇÇ϶ó!</p>
-
-<div class="example"><p><code>
-&lt;Location /&gt;<br />
-Order deny,allow<br />
-Allow from all<br />
-&lt;/Location&gt;<br />
-<br />
-# ¾Ç! ÀÌ &lt;Directory&gt; ¼½¼ÇÀº ¾Æ¹«·± È¿°ú°¡ ¾ø´Ù<br />
-&lt;Directory /&gt;<br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
-&lt;/Directory&gt;
-</code></p></div>
-
-
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sections.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sections.xml b/docs/manual/sections.xml
deleted file mode 100644
index 070c465a24..0000000000
--- a/docs/manual/sections.xml
+++ /dev/null
@@ -1,495 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="sections.xml.meta">
-
-<title>Configuration Sections</title>
-
-<summary> <p>Directives in the <a
-href="configuring.html">configuration files</a> may apply to the
-entire server, or they may be restricted to apply only to particular
-directories, files, hosts, or URLs. This document describes how to
-use configuration section containers or <code>.htaccess</code> files
-to change the scope of other configuration directives.</p>
-</summary>
-
-<section id="types"><title>Types of Configuration Section Containers</title>
-
-<related>
-<modulelist>
-<module>core</module>
-<module>mod_proxy</module>
-</modulelist>
-<directivelist>
-<directive type="section" module="core">Directory</directive>
-<directive type="section" module="core">DirectoryMatch</directive>
-<directive type="section" module="core">Files</directive>
-<directive type="section" module="core">FilesMatch</directive>
-<directive type="section" module="core">IfDefine</directive>
-<directive type="section" module="core">IfModule</directive>
-<directive type="section" module="core">Location</directive>
-<directive type="section" module="core">LocationMatch</directive>
-<directive type="section" module="mod_proxy">Proxy</directive>
-<directive type="section" module="mod_proxy">ProxyMatch</directive>
-<directive type="section" module="core">VirtualHost</directive>
-</directivelist>
-</related>
-
-<p>There are two basic types of containers. Most containers are
-evaluated for each request. The enclosed directives are applied only
-for those requests that match the containers. The <directive
-type="section" module="core">IfDefine</directive> and <directive
-type="section" module="core">IfModule</directive> containers, on the
-other hand, are evaluated only at server startup and restart. If
-their conditions are true at startup, then the enclosed directives
-will apply to all requests. If the conditions are not true, the
-enclosed directives will be ignored.</p>
-
-<p>The <directive type="section" module="core">IfDefine</directive> directive
-encloses directives that will only be applied if an appropriate
-parameter is defined on the <code>httpd</code> command line. For example,
-with the following configuration, all requests will be redirected
-to another site only if the server is started using
-<code>httpd -DClosedForNow</code>:</p>
-
-<example>
-&lt;IfDefine ClosedForNow&gt;<br />
-Redirect / http://otherserver.example.com/<br />
-&lt;/IfDefine&gt;
-</example>
-
-<p>The <directive type="section" module="core">IfModule</directive>
-directive is very similar, except it encloses directives that will
-only be applied if a particular module is available in the server.
-The module must either be statically compiled in the server, or it
-must be dynamically compiled and its <directive
-module="mod_so">LoadModule</directive> line must be earlier in the
-configuration file. This directive should only be used if you need
-your configuration file to work whether or not certain modules are
-installed. It should not be used to enclose directives that you want
-to work all the time, because it can suppress useful error messages
-about missing modules.</p>
-
-<p>In the following example, the <directive
-module="mod_mime_magic">MimeMagicFiles</directive> directive will be
-applied only if <module>mod_mime_magic</module> is available.</p>
-
-<example>
-&lt;IfModule mod_mime_magic.c&gt;<br />
-MimeMagicFile conf/magic<br />
-&lt;/IfModule&gt;
-</example>
-
-<p>Both <directive type="section" module="core">IfDefine</directive>
-and <directive type="section" module="core">IfModule</directive>
-can apply negative conditions by preceding their test with "!".
-Also, these sections can be nested to achieve more complex
-restrictions.</p>
-</section>
-
-<section id="file-and-web"><title>Filesystem and Webspace</title>
-
-<p>The most commonly used configuration section containers are the
-ones that change the configuration of particular places in the
-filesystem or webspace. First, it is important to understand the
-difference between the two. The filesystem is the view of your disks
-as seen by your operating system. For example, in a default install,
-Apache resides at <code>/usr/local/apache2</code> in the Unix
-filesystem or <code>"c:/Program Files/Apache Group/Apache2"</code> in
-the Windows filesystem. (Note that forward slashes should always be
-used as the path separator in Apache, even for Windows.) In contrast,
-the webspace is the view of your site as delivered by the web server
-and seen by the client. So the path <code>/dir/</code> in the
-webspace corresponds to the path
-<code>/usr/local/apache2/htdocs/dir/</code> in the filesystem of a
-default Apache install on Unix. The webspace need not map directly to
-the filesystem, since webpages may be generated dynamically
-from databases or other locations.</p>
-
-<section id="filesystem"><title>Filesystem Containers</title>
-
-<p>The <directive type="section" module="core">Directory</directive>
-and <directive type="section" module="core">Files</directive>
-directives, along with their regex counterparts, apply directives to
-parts of the filesystem. Directives enclosed in a <directive
-type="section" module="core">Directory</directive> section apply to
-the named filesystem directory and all subdirectories of that
-directory. The same effect can be obtained using <a
-href="howto/htaccess.html">.htaccess files</a>. For example, in the
-following configuration, directory indexes will be enabled for the
-<code>/var/web/dir1</code> directory and all subdirectories.</p>
-
-<example>
-&lt;Directory /var/web/dir1&gt;<br />
-Options +Indexes<br />
-&lt;/Directory&gt;
-</example>
-
-<p>Directives enclosed in a <directive type="section"
-module="core">Files</directive> section apply to any file with
-the specified name, regardless of what directory it lies in.
-So for example, the following configuration directives will,
-when placed in the main section of the configuration file,
-deny access to any file named <code>private.html</code> regardless
-of where it is found.</p>
-
-<example>
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;
-</example>
-
-<p>To address files found in a particular part of the filesystem, the
-<directive type="section" module="core">Files</directive> and
-<directive type="section" module="core">Directory</directive> sections
-can be combined. For example, the following configuration will deny
-access to <code>/var/web/dir1/private.html</code>,
-<code>/var/web/dir1/subdir2/private.html</code>,
-<code>/var/web/dir1/subdir3/private.html</code>, and any other instance
-of <code>private.html</code> found under the <code>/var/web/dir1/</code>
-directory.</p>
-
-<example>
-&lt;Directory /var/web/dir1&gt;<br />
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;<br />
-&lt;/Directory&gt;
-</example>
-</section>
-
-<section id="webspace"><title>Webspace Containers</title>
-
-<p>The <directive type="section" module="core">Location</directive>
-directive and its regex counterpart, on the other hand, change the
-configuration for content in the webspace. For example, the following
-configuration prevents access to any URL-path that begins in /private.
-In particular, it will apply to requests for
-<code>http://yoursite.example.com/private</code>,
-<code>http://yoursite.example.com/private123</code>, and
-<code>http://yoursite.example.com/private/dir/file.html</code> as well
-as any other requests starting with the <code>/private</code> string.</p>
-
-<example>
-&lt;Location /private&gt;<br />
-Order Allow,Deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</example>
-
-<p>The <directive type="section" module="core">Location</directive>
-directive need not have anything to do with the filesystem.
-For example, the following example shows how to map a particular
-URL to an internal Apache handler provided by <module>mod_status</module>.
-No file called <code>server-status</code> needs to exist in the
-filesystem.</p>
-
-<example>
-&lt;Location /server-status&gt;<br />
-SetHandler server-status<br />
-&lt;/Location&gt;
-</example>
-</section>
-
-<section id="wildcards"><title>Wildcards and Regular Expressions</title>
-
-<p>The <directive type="section" module="core">Directory</directive>,
-<directive type="section" module="core">Files</directive>, and
-<directive type="section" module="core">Location</directive>
-directives can each use shell-style wildcard characters as in
-<code>fnmatch</code> from the C standard library. The character "*"
-matches any sequence of characters, "?" matches any single character,
-and "[<em>seq</em>]" matches any character in <em>seq</em>. The "/"
-character will not be matched by any wildcard; it must be specified
-explicitly.</p>
-
-<p>If even more flexible matching is required, each
-container has a regular-expression (regex) counterpart <directive
-type="section" module="core">DirectoryMatch</directive>, <directive
-type="section" module="core">FilesMatch</directive>, and <directive
-type="section" module="core">LocationMatch</directive> that allow
-perl-compatible
-<a href="glossary.html#regex">regular expressions</a>
-to be used in choosing the matches. But see the section below on
-configuration merging to find out how using regex sections will change
-how directives are applied.</p>
-
-<p>A non-regex wildcard section that changes the configuration of
-all user directories could look as follows:</p>
-
-<example>
-&lt;Directory /home/*/public_html&gt;<br />
-Options Indexes<br />
-&lt;/Directory&gt;
-</example>
-
-<p>Using regex sections, we can deny access to many types of image files
-at once:</p>
-<example>
-&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/FilesMatch&gt;
-</example>
-
-</section>
-
-<section id="whichwhen"><title>What to use When</title>
-
-<p>Choosing between filesystem containers and webspace containers is
-actually quite easy. When applying directives to objects that reside
-in the filesystem always use <directive type="section"
-module="core">Directory</directive> or <directive type="section"
-module="core">Files</directive>. When applying directives to objects
-that do not reside in the filesystem (such as a webpage generated from
-a database), use <directive type="section"
-module="core">Location</directive>.</p>
-
-<p>It is important to never use <directive type="section"
-module="core">Location</directive> when trying to restrict
-access to objects in the filesystem. This is because many
-different webspace locations (URLs) could map to the same filesystem
-location, allowing your restrictions to be circumvented.
-For example, consider the following configuration:</p>
-
-<example>
-&lt;Location /dir/&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</example>
-
-<p>This works fine if the request is for
-<code>http://yoursite.example.com/dir/</code>. But what if you are on
-a case-insensitive filesystem? Then your restriction could be easily
-circumvented by requesting
-<code>http://yoursite.example.com/DIR/</code>. The <directive
-type="section" module="core">Directory</directive> directive, in
-contrast, will apply to any content served from that location,
-regardless of how it is called. (An exception is filesystem links.
-The same directory can be placed in more than one part of the
-filesystem using symbolic links. The <directive type="section"
-module="core">Directory</directive> directive will follow the symbolic
-link without resetting the pathname. Therefore, for the highest level
-of security, symbolic links should be disabled with the appropriate
-<directive module="core">Options</directive> directive.)</p>
-
-<p>If you are, perhaps, thinking that none of this applies to you
-because you use a case-sensitive filesystem, remember that there are
-many other ways to map multiple webspace locations to the same
-filesystem location. Therefore you should always use the filesystem
-containers when you can. There is, however, one exception to this
-rule. Putting configuration restrictions in a <code>&lt;Location
-/&gt;</code> section is perfectly safe because this section will apply
-to all requests regardless of the specific URL.</p>
-</section>
-
-</section>
-
-<section id="virtualhost"><title>Virtual Hosts</title>
-
-<p>The <directive type="section" module="core">VirtualHost</directive>
-container encloses directives that apply to specific hosts.
-This is useful when serving multiple hosts from the same machine
-with a different configuration for each. For more information,
-see the <a href="vhosts/">Virtual Host Documentation</a>.</p>
-</section>
-
-<section id="proxy"><title>Proxy</title>
-
-<p>The <directive type="section" module="mod_proxy">Proxy</directive>
-and <directive type="section" module="mod_proxy">ProxyMatch</directive>
-containers apply enclosed configuration directives only
-to sites accessed through <module>mod_proxy</module>'s proxy server
-that match the specified URL. For example, the following configuration
-will prevent the proxy server from being used to access the
-<code>cnn.com</code> website.</p>
-
-<example>
-&lt;Proxy http://cnn.com/*&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Proxy&gt;
-</example>
-</section>
-
-<section id="whatwhere"><title>What Directives are Allowed?</title>
-
-<p>To find out what directives are allowed in what types of
-configuration sections, check the <a
-href="mod/directive-dict.html#Context">Context</a> of the directive.
-Everything that is allowed in
-<directive type="section" module="core">Directory</directive>
-sections is also syntactically allowed in
-<directive type="section" module="core">DirectoryMatch</directive>,
-<directive type="section" module="core">Files</directive>,
-<directive type="section" module="core">FilesMatch</directive>,
-<directive type="section" module="core">Location</directive>,
-<directive type="section" module="core">LocationMatch</directive>,
-<directive type="section" module="mod_proxy">Proxy</directive>,
-and <directive type="section" module="mod_proxy">ProxyMatch</directive>
-sections. There are some exceptions, however:</p>
-
-<ul>
-<li>The <directive module="core">AllowOverride</directive> directive
-works only in <directive type="section" module="core">Directory</directive>
-sections.</li>
-
-<li>The <code>FollowSymLinks</code> and
-<code>SymLinksIfOwnerMatch</code> <directive
-module="core">Options</directive> work only in <directive
-type="section" module="core">Directory</directive> sections or
-<code>.htaccess</code> files.</li>
-
-<li>The <directive module="core">Options</directive> directive cannot
-be used in <directive type="section" module="core">Files</directive>
-and <directive type="section" module="core">FilesMatch</directive>
-sections.</li>
-</ul>
-</section>
-
-<section id="mergin"><title>How the sections are merged</title>
-
-<p>The configuration sections are applied in a very particular order.
-Since this can have important effects on how configuration directives
-are interpreted, it is important to understand how this works.</p>
-
- <p>The order of merging is:</p>
-
- <ol>
- <li> <directive type="section"
- module="core">Directory</directive> (except regular expressions)
- and <code>.htaccess</code> done simultaneously (with
- <code>.htaccess</code>, if allowed, overriding
- <directive type="section" module="core">Directory</directive>)</li>
-
- <li><directive type="section" module="core">DirectoryMatch</directive>
- (and <code>&lt;Directory ~&gt;</code>)</li>
-
- <li><directive type="section"
- module="core">Files</directive> and <directive
- type="section" module="core">FilesMatch</directive> done
- simultaneously</li>
-
- <li><directive type="section" module="core">Location</directive>
- and <directive type="section"
- module="core">LocationMatch</directive> done simultaneously</li>
- </ol>
-
- <p>Apart from <directive type="section"
- module="core">Directory</directive>, each group is processed in
- the order that they appear in the configuration files. <directive
- type="section" module="core">Directory</directive> (group 1 above)
- is processed in the order shortest directory component to longest.
- So for example, <code>&lt;Directory /var/web/dir&gt;</code> will
- be processed before <code>&lt;Directory
- /var/web/dir/subdir&gt;</code>. If multiple <directive
- type="section" module="core">Directory</directive> sections apply
- to the same directory they are processed in the configuration file
- order. Configurations included via the <directive
- module="core">Include</directive> directive will be treated as if
- they were inside the including file at the location of the
- <directive module="core">Include</directive> directive.</p>
-
- <p>Sections inside <directive type="section"
- module="core">VirtualHost</directive> sections
- are applied <em>after</em> the corresponding sections outside
- the virtual host definition. This allows virtual hosts to
- override the main server configuration.</p>
-
- <p>When the request is served by <module>mod_proxy</module>, the
- <directive module="mod_proxy" type="section">Proxy</directive>
- container takes the place of the <directive module="core"
- type="section">Directory</directive> container in the processing
- order.</p>
-
- <p>Later sections override earlier ones.</p>
-
-<note><title>Technical Note</title>
- There is actually a
- <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>
- sequence performed just before the name translation phase
- (where <code>Aliases</code> and <code>DocumentRoots</code>
- are used to map URLs to filenames). The results of this
- sequence are completely thrown away after the translation has
- completed.
-</note>
-
-<section id="merge-examples"><title>Some Examples</title>
-
-<p>Below is an artificial example to show the order of
-merging. Assuming they all apply to the request, the directives in
-this example will be applied in the order A &gt; B &gt; C &gt; D &gt;
-E.</p>
-
-<example>
-&lt;Location /&gt;<br />
-E<br />
-&lt;/Location&gt;<br />
-<br />
-&lt;Files f.html&gt;<br />
-D<br />
-&lt;/Files&gt;<br />
-<br />
-&lt;VirtualHost *&gt;<br />
-&lt;Directory /a/b&gt;<br />
-B<br />
-&lt;/Directory&gt;<br />
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;DirectoryMatch "^.*b$"&gt;<br />
-C<br />
-&lt;/DirectoryMatch&gt;<br />
-<br />
-&lt;Directory /a/b&gt;<br />
-A<br />
-&lt;/Directory&gt;<br />
-<br />
-</example>
-
-<p>For a more concrete example, consider the following. Regardless of
-any access restrictions placed in <directive module="core"
-type="section">Directory</directive> sections, the <directive
-module="core" type="section">Location</directive> section will be
-evaluated last and will allow unrestricted access to the server. In
-other words, order of merging is important, so be careful!</p>
-
-<example>
-&lt;Location /&gt;<br />
-Order deny,allow<br />
-Allow from all<br />
-&lt;/Location&gt;<br />
-<br />
-# Woops! This &lt;Directory&gt; section will have no effect<br />
-&lt;Directory /&gt;<br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
-&lt;/Directory&gt;
-</example>
-
-</section>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/sections.xml.ja b/docs/manual/sections.xml.ja
deleted file mode 100644
index 984339f440..0000000000
--- a/docs/manual/sections.xml.ja
+++ /dev/null
@@ -1,478 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="sections.xml.meta">
-
-<title>$B%;%/%7%g%s$N@_Dj(B</title>
-
-<summary> <p><a href="configuring.html">$B@_Dj%U%!%$%k(B</a>$BCf$N%G%#%l%/%F%#%V$O(B
-$B%5!<%PA4BN$KE,MQ$5$l$?$j!"FCDj$N%G%#%l%/%H%j$d%U%!%$%k!"%[%9%H!"(BURL $B$K$N$_(B
-$BE,MQ$5$l$k$h$&$K@)8B$7$?$j$9$k$3$H$,$G$-$^$9!#$3$NJ8=q$O@_DjMQ$N%;%/%7%g%s$N(B
-$B%3%s%F%J$d(B <code>.htaccess</code> $B%U%!%$%k$r;H$C$FB>$N@_Dj%G%#%l%/%F%#%V$N(B
-$B%9%3!<%W$rJQ99$9$kJ}K!$r@bL@$7$^$9!#(B</p>
-</summary>
-
-<section id="types"><title>$B@_DjMQ%;%/%7%g%s%3%s%F%J$N<oN`(B</title>
-
-<related>
-<modulelist>
-<module>core</module>
-<module>mod_proxy</module>
-</modulelist>
-<directivelist>
-<directive type="section" module="core">Directory</directive>
-<directive type="section" module="core">DirectoryMatch</directive>
-<directive type="section" module="core">Files</directive>
-<directive type="section" module="core">FilesMatch</directive>
-<directive type="section" module="core">IfDefine</directive>
-<directive type="section" module="core">IfModule</directive>
-<directive type="section" module="core">Location</directive>
-<directive type="section" module="core">LocationMatch</directive>
-<directive type="section" module="mod_proxy">Proxy</directive>
-<directive type="section" module="mod_proxy">ProxyMatch</directive>
-<directive type="section" module="core">VirtualHost</directive>
-</directivelist>
-</related>
-
-<p>$B%3%s%F%J$K$OFs$D$N4pK\$H$J$k<oN`$,$"$j$^$9!#$[$H$s$I$N%3%s%F%J$O(B
-$B3F%j%/%(%9%H$KBP$7$FI>2A$5$l$^$9!#$=$N>l9g!"%3%s%F%JCf$N%G%#%l%/%F%#%V$O(B
-$B%3%s%F%J$K%^%C%A$9$k%j%/%(%9%H$K$N$_E,MQ$5$l$^$9!#(B
-$B0lJ}!"(B<directive type="section"
- module="core">IfDefine</directive> $B%3%s%F%J$H(B <directive
-type="section" module="core">IfModule</directive> $B%3%s%F%J$O(B
-$B%5!<%P$N5/F0;~$H:F5/F0;~$K$N$_I>2A$5$l$^$9!#5/F0;~$K>r7o$,??$G$"$l$P!"(B
-$B%3%s%F%JCf$N%G%#%l%/%F%#%V$O$9$Y$F$N%j%/%(%9%H$KE,MQ$5$l$^$9!#>r7o$,(B
-$B56$G$"$l$P!"%3%s%F%JCf$N%G%#%l%/%F%#%V$OL5;k$5$l$^$9!#(B</p>
-
-<p><directive type="section" module="core">IfDefine</directive> $B%G%#%l%/%F%#%V$O(B
-<code>httpd</code> $B%3%^%s%I%i%$%s$GE,@Z$J%Q%i%a!<%?$,Dj5A$5$l$?$H$-$K$N$_(B
-$BE,MQ$5$l$k%G%#%l%/%F%#%V$r0O$$$^$9!#Nc$($P<!$N@_Dj$G$O!"%5!<%P$,(B
-<code>httpd -DClosedForNow</code> $B$r;H$C$F5/F0$5$l$?$H$-$@$1$9$Y$F$N(B
-$B%j%/%(%9%H$rJL$N%5%$%H$K%j%@%$%l%/%H$7$^$9(B:</p>
-
-<example>
-&lt;IfDefine ClosedForNow&gt;<br />
-Redirect / http://otherserver.example.com/<br />
-&lt;/IfDefine&gt;
-</example>
-
-<p><directive type="section" module="core">IfModule</directive> $B$O(B
-$BHs>o$K;w$F$$$^$9$,!"Be$o$j$K%5!<%P>e$G%b%8%e!<%k$,;HMQ2DG=$J>l9g$K$N$_(B
-$BE,MQ2DG=$J%G%#%l%/%F%#%V$r0O$$$^$9!#%b%8%e!<%k$O%5!<%P$K(B
-$B@EE*$KAH$_9~$^$l$F$$$k$+!"F0E*$KAH$_9~$`$h$&$K$J$C$F$$$F!"@_Dj%U%!%$%kCf$G(B
-<directive module="mod_so">LoadModule</directive> $B$N9T$,$h$jA0$N(B
-$BItJ,$K=q$+$l$F$$$kI,MW$,$"$j$^$9!#$3$N%G%#%l%/%F%#%V$OFCDj$N%b%8%e!<%k$N(B
-$BB8:_$K4X$o$i$:@_Dj%U%!%$%k$,F0:n$9$kI,MW$,$"$k>l9g$K$N$_;H$C$F$/$@$5$$!#(B
-$B>o$KF0:n$7$FM_$7$$%G%#%l%/%F%#%V$r0O$`$?$a$K;H$&$Y$-$G$O$"$j$^$;$s!#(B
-$BB8:_$7$J$$%b%8%e!<%k$K4X$9$kM-MQ$J%(%i!<%a%C%;!<%8$NH/@8$rM^@)$7$F$7$^$$$^$9$N$G!#(B
-</p>
-
-<p>$B<!$NNc$G$O!"(B<module>mod_mime_magic</module> $B$,$"$k$H$-$K$N$_(B <directive
-module="mod_mime_magic">MimeMagicFiles</directive> $B%G%#%l%/%F%#%V$,(B
-$BE,MQ$5$l$^$9!#(B</p>
-
-<example>
-&lt;IfModule mod_mime_magic.c&gt;<br />
-MimeMagicFile conf/magic<br />
-&lt;/IfModule&gt;
-</example>
-
-<p><directive type="section" module="core">IfDefine</directive> $B%G%#%l%/%F%#%V$H(B
-<directive type="section" module="core">IfModule</directive> $B%G%#%l%/%F%#%V$O(B
-$B%F%9%H$NA0$K(B "!" $B$rIU$1$k$3$H$GH]Dj$N>r7o$rE,MQ$9$k$3$H$,$G$-$^$9!#(B
-$B$^$?!"$3$l$i$N%;%/%7%g%s$O$h$jJ#;($J@)8B$r2]$9$?$a$KF~$l;R$K$9$k$3$H$,$G$-$^$9!#(B
-</p>
-</section>
-
-<section id="file-and-web"><title>$B%U%!%$%k%7%9%F%`$H%&%'%V6u4V(B</title>
-
-<p>$B:G$b$h$/;H$o$l$k@_Dj$N%;%/%7%g%s%3%s%F%J$O%U%!%$%k%7%9%F%`$d%&%'%V6u4V$N(B
-$BFCDj$N>l=j$N@_Dj$rJQ99$9$k$b$N$G$9!#$^$:!"$3$NFs$D$N0c$$$rM}2r$9$k$3$H$,(B
-$BBg@Z$G$9!#%U%!%$%k%7%9%F%`$O%*%Z%l!<%F%#%s%0%7%9%F%`$+$i8+$?%G%#%9%/$NFbMF$G$9!#(B
-$B$?$H$($P!"%G%U%)%k%H$N%$%s%9%H!<%k$G$O(B Apache $B$O(B Unix $B%U%!%$%k%7%9%F%`$G$O(B
-<code>/usr/local/apache2</code> $B$K!"(BWindows $B%U%!%$%k%7%9%F%`$G$O(B
-<code>"c:/Program Files/Apache Group/Apache2"</code> $B$KB8:_$7$^$9!#(B
-(Apache $B$G$O(B Windows $B$G$b%Q%9%;%Q%l!<%?$H$7$F%9%i%C%7%e$r;H$&$3$H$K(B
-$B5$$r$D$1$F$/$@$5$$!#(B) $BBP>HE*$K!"%&%'%V6u4V$O$"$J$?$N%5%$%H$r(B
-$B%&%'%V%5!<%P$+$iG[?.$5$l$k$b$N$H$7$F8+$?$b$N$G!"%/%i%$%"%s%H$K8+$($k$b$N$G$9!#(B
-$B%G%U%)%k%H$N(B Unix $B>e$N(B Apache $B$N%$%s%9%H!<%k$G$O%&%'%V6u4V$N(B
-<code>/dir/</code> $B$H$$$&%Q%9$O%U%!%$%k%7%9%F%`$N(B
-<code>/usr/local/apache2/htdocs/dir/</code> $B$H$$$&%Q%9$KBP1~$7$^$9!#(B
-$B%&%'%V%Z!<%8$O%G!<%?%Y!<%9$dB>$N>l=j$+$iF0E*$K@8@.$9$k$3$H$b$G$-$^$9$N$G!"(B
-$B%&%'%V6u4V$O%U%!%$%k%7%9%F%`$KD>@\%^%C%W$9$kI,MW$O$"$j$^$;$s!#(B</p>
-
-<section id="filesystem"><title>$B%U%!%$%k%7%9%F%`%3%s%F%J(B</title>
-
-<p><directive type="section" module="core">Directory</directive> $B%G%#%l%/%F%#%V$H(B
-<directive type="section" module="core">Files</directive> $B%G%#%l%/%F%#%V!"$=$l$H(B
-$B$=$l$i$N@55,I=8=HG$O%G%#%l%/%F%#%V$r%U%!%$%k%7%9%F%`$N0lItJ,$KBP$7$FE,MQ$7$^$9!#(B
-<directive type="section" module="core">Directory</directive> $B%;%/%7%g%s$N(B
-$BCf$N%G%#%l%/%F%#%V$O;XDj$5$l$?%G%#%l%/%H%j$H$=$N$9$Y$F$N%5%V%G%#%l%/%H%j$K(B
-$BE,MQ$5$l$^$9!#(B<a href="howto/htaccess.html">.htaccess $B%U%!%$%k(B</a>$B$r(B
-$B;H$&$3$H$G$bF1$88z2L$rF@$k$3$H$,$G$-$^$9!#Nc$($P!"<!$N@_Dj$G$O(B
-<code>/var/web/dir1</code> $B$H$9$Y$F$N%5%V%G%#%l%/%H%j$KBP$7$F(B
-$B%G%#%l%/%H%j%$%s%G%C%/%9$r9T$J$$$^$9!#(B</p>
-
-<example>
-&lt;Directory /var/web/dir1&gt;<br />
-Options +Indexes<br />
-&lt;/Directory&gt;
-</example>
-
-<p><directive type="section" module="core">Files</directive> $B%;%/%7%g%s$N(B
-$BCf$K$"$k%G%#%l%/%F%#%V$O$I$N%G%#%l%/%H%j$K$"$k$+$K4X$o$i$:!";XDj$5$l$?L>A0$N(B
-$B$9$Y$F$N%U%!%$%k$KE,MQ$5$l$^$9!#$G$9$+$iNc$($P0J2<$N@_Dj%G%#%l%/%F%#%V$,(B
-$B@_Dj%U%!%$%k$N<g%;%/%7%g%s$K=q$+$l$?$H$-$K$O!"$9$Y$F$N>l=j$N(B
-<code>private.html</code> $B$H$$$&L>A0$N%U%!%$%k$X$N%"%/%;%9$r5qH]$7$^$9!#(B</p>
-
-<example>
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;
-</example>
-
-<p>$B%U%!%$%k%7%9%F%`$NFCDj$N>l=j$K$"$k%U%!%$%k$r;XDj$9$k$?$a$K!"(B
-<directive type="section" module="core">Files</directive> $B%;%/%7%g%s$H(B
-<directive type="section" module="core">Directory</directive> $B%;%/%7%g%s$r(B
-$BAH$_9g$o$;$k$3$H$,$G$-$^$9!#Nc$($P!"<!$N@_Dj$G$O(B
-<code>/var/web/dir1/private.html</code>,
-<code>/var/web/dir1/subdir2/private.html</code>,
-<code>/var/web/dir1/subdir3/private.html</code> $B$J$I!"(B
-<code>/var/web/dir1/</code> $B%G%#%l%/%H%j$N2<$K$"$k$9$Y$F$N(B
-<code>private.html</code> $B$X$N%"%/%;%9$r5qH]$7$^$9!#(B</p>
-
-<example>
-&lt;Directory /var/web/dir1&gt;<br />
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;<br />
-&lt;/Directory&gt;
-</example>
-</section>
-
-<section id="webspace"><title>$B%&%'%V6u4V%3%s%F%J(B</title>
-
-<p>$B0lJ}!"(B<directive type="section" module="core">Location</directive>
-$B%G%#%l%/%F%#%V$H$=$N@55,I=8=HG$O%&%'%V6u4V>e$NFbMF$KBP$7$F@_Dj$rJQ99$7$^$9!#(B
-$B$?$H$($P!"<!$N@_Dj$G$O(B /private $B$G;O$^$k(B URL $B%Q%9$X$N%"%/%;%9$r@)8B$7$^$9!#(B
-$B6qBNE*$K$O!"(B
-<code>http://yoursite.example.com/private</code>,
-<code>http://yoursite.example.com/private123</code>,
-<code>http://yoursite.example.com/private/dir/file.html</code>
-$B$X$N%j%/%(%9%H$d!"(B
-$BB>$NF1MM$K(B <code>/private</code> $BJ8;zNs$G;O$^$k%j%/%(%9%H$K(B
-$BE,MQ$5$l$^$9!#(B</p>
-
-<example>
-&lt;Location /private&gt;<br />
-Order Allow,Deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</example>
-
-<p><directive type="section" module="core">Location</directive>
-$B%G%#%l%/%F%#%V$O%U%!%$%k%7%9%F%`$H4X78$"$kI,MW$,A4$/$"$j$^$;$s!#(B
-$B$?$H$($P<!$NNc$G$O!"$I$N$h$&$K$7$FFCDj$N(B URL $B$r(B
-<module>mod_status</module>$B$GDs6!$5$l$F$$$k(B Apache
-$BFbIt%O%s%I%i$K%^%C%W$9$k$+$r<($7$F$$$^$9!#%U%!%$%k%7%9%F%`$K(B
-<code>server-status</code> $B$H$$$&%U%!%$%k$,B8:_$9$kI,MW$O$"$j$^$;$s!#(B</p>
-
-<example>
-&lt;Location /server-status&gt;<br />
-SetHandler server-status<br />
-&lt;/Location&gt;
-</example>
-</section>
-
-<section id="wildcards"><title>$B%o%$%k%I%+!<%I$H@55,I=8=(B</title>
-
-<p><directive type="section" module="core">Directory</directive>,
-<directive type="section" module="core">Files</directive>,
-<directive type="section" module="core">Location</directive>
-$B%G%#%l%/%F%#%V$G$O!"(B C $BI8=`%i%$%V%i%j$N(B <code>fnmatch</code> $B$N$h$&$K(B
-shell $B%9%?%$%k$N%o%$%k%I%+!<%I%-%c%i%/%?$,;HMQ$G$-$^$9!#(B
-"*" $BJ8;z$OG$0U$NJ8;zNs$K%^%C%A$7!"(B"?" $BJ8;z$OG$0U$N(B 1 $BJ8;z$K%^%C%A$7!"(B
-"[<em>seq</em>]" $B$O(B <em>seq</em> $B$NG$0U$NJ8;z$K%^%C%A$7$^$9!#(B
-"/" $BJ8;z$O$I$N%o%$%k%I%+!<%I$G$b%^%C%A$5$l$^$;$s!#(B
-$BL@<(E*$K;XDj$9$kI,MW$,$"$j$^$9!#(B</p>
-
-<p>$B$3$l$h$j=@Fp$J%^%C%A%s%0$,I,MW$J>l9g$O!"$3$l$i$N%3%s%F%J$K@55,I=8=(B
-(regex) $BHG$G$"$k(B
-<directive type="section" module="core">DirectoryMatch</directive>,
-<directive type="section" module="core">FilesMatch</directive>,
-<directive type="section" module="core">LocationMatch</directive>
-$B$,$"$j!"%^%C%A$rA*Br$9$k$N$K(B perl $B8_49(B<a href="glossary.html#regex"
->$B@55,I=8=(B</a>$B$r;HMQ$G$-$^$9!#$7$+$7!"<!$N@_Dj$N%^!<%8$KL\$rDL$7$F!"(B
-regex $B%;%/%7%g%s$r;HMQ$9$k$3$H$G!"%G%#%l%/%F%#%V$NE,MQ$,$I$N$h$&$K(B
-$BJQ2=$9$k$+GD0.$7$F$*$$$F$/$@$5$$!#(B</p>
-
-<p>$BA4%f!<%6%G%#%l%/%H%j$N@_Dj$rJQ99$9$k!"Hs(B regex
-$B%o%$%k%I%+!<%I%;%/%7%g%s$O<!$N$h$&$K$J$j$^$9!#(B</p>
-
-<example>
-&lt;Directory /home/*/public_html&gt;<br />
-Options Indexes<br />
-&lt;/Directory&gt;
-</example>
-
-<p>regex $B%;%/%7%g%s$r;HMQ$9$k$3$H$G!"2hA|%U%!%$%k$NB?$/$N%?%$%W$KBP$9$k(B
-$B%"%/%;%9$r0lEY$K5qH]$G$-$^$9!#(B</p>
-<example>
-&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/FilesMatch&gt;
-</example>
-
-</section>
-
-<section id="whichwhen"><title>$B$$$D2?$r;H$&$+(B</title>
-
-<p>$B%U%!%$%k%7%9%F%`%3%s%F%J$H%&%'%V6u4V%3%s%F%J$r;H$$J,$1$k$N$O!"(B
-$B<B:]$K$OHs>o$K4JC1$G$9!#%U%!%$%k%7%9%F%`$K0MB8$9$k(B
-$B%*%V%8%'%/%H$K%G%#%l%/%F%#%V$rE,1~$9$k>l9g$O!"I,$:(B
-<directive type="section" module="core">Directory</directive> $B$+(B
-<directive type="section" module="core">Files</directive>
-$B$r;HMQ$7$^$9!#%U%!%$%k%7%9%F%`$K0MB8$7$J$$%*%V%8%'%/%H(B
-($B%G!<%?%Y!<%9$+$i@8@.$5$l$k%&%'%V%Z!<%8$J$I(B)
-$B$K%G%#%l%/%F%#%V$rE,MQ$9$k:]$K$O!"(B
-<directive type="section" module="core">Location</directive>
-$B$r;HMQ$7$^$9!#(B</p>
-
-<p>$B%U%!%$%k%7%9%F%`>e$N%*%V%8%'%/%H$X$N%"%/%;%9$r@)8B$9$k$?$a$K!"(B
-<directive type="section" module="core">Location</directive>
-$B$r7h$7$F;HMQ$J$$$h$&$K$7$^$7$g$&!#(B
-$BF10l$N%U%!%$%k%7%9%F%`0LCV$K%^%C%W$7$F$$$k!"%&%'%V6u4V0LCV(B (URL)
-$B$,B??t$"$C$F!"@_Dj$7$?@)8B$r1*2s$5$l$F$7$^$&$+$b$7$l$J$$$+$i$G$9!#(B
-$BNc$($P<!$N@_Dj$r9M$($F$_$^$7$g$&!#(B</p>
-
-<example>
-&lt;Location /dir/&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</example>
-
-<p><code>http://yoursite.example.com/dir/</code>
-$B$X$N%j%/%(%9%H$G$O>e<j$/F0:n$7$^$9!#$7$+$7BgJ8;z>.J8;z$r6hJL$7$J$$(B
-$B%U%!%$%k%7%9%F%`$r;H$C$F$$$?$i$I$&$J$k$G$7$g$&(B?
-<code>http://yoursite.example.com/DIR/</code>
-$B$X$N%j%/%(%9%H$G4JC1$K%"%/%;%9@)8B$r1*2s$5$l$F$7$^$$$^$9!#$3$l$KBP$7$F(B
-<directive type="section" module="core">Directory</directive>
-$B%G%#%l%/%F%#%V$r;HMQ$9$k$H!"$I$N$h$&$K8F$S=P$5$l$?$+$K4X$o$i$:(B
-$B$=$N>l=j$+$iDs6!$5$l$kFbMF$KE,MQ$5$l$^$9!#(B
-($BNc30$O%U%!%$%k%7%9%F%`$N%j%s%/$G$9!#%7%s%\%j%C%/%j%s%/$r;H$C$F!"(B
-$BF10l$N%G%#%l%/%H%j$rJ#?t$N%U%!%$%k%7%9%F%`$K@_CV$G$-$^$9!#(B
-<directive type="section" module="core">Directory</directive>
-$B%G%#%l%/%F%#%V$O%Q%9L>$r%j%;%C%H$9$k$3$H$J$/%7%s%\%j%C%/%j%s%/$r(B
-$BC)$j$^$9!#$G$9$+$i!"9bEY$J%;%-%e%j%F%#$,MW5a$5$l$k>l9g$O!"(B
-$BE,@Z$K(B <directive module="core">Options</directive>
-$B%G%#%l%/%F%#%V$r;HMQ$7$F%7%s%\%j%C%/%j%s%/$rL58z$K$9$k$Y$-$G$9!#(B)</p>
-
-<p>$BBgJ8;z>.J8;z$r6hJL$9$k%U%!%$%k%7%9%F%`$r;HMQ$7$F$$$k$+$i>e5-$N$3$H$O(B
-$BL54X78$@$H;W$o$l$k$+$b$7$l$^$;$s$,!"(B
-$BF10l$N%U%!%$%k%7%9%F%`0LCV$KJ#?t$N%&%'%V6u4V0LCV$r%^%C%W$9$kJ}K!$O!"(B
-$BB>$K$$$/$i$G$b$"$k$H$$$&$3$H$r3P$($F$$$F$/$@$5$$!#(B
-$B$G$9$+$i$G$-$k8B$j%U%!%$%k%7%9%F%`%3%s%F%J$r;HMQ$7$F$/$@$5$$!#(B
-$B$7$+$7$J$,$i0l$D$@$1Nc30$,$"$j$^$9!#(B
-<code>&lt;Location /&gt;</code> $B%;%/%7%g%s$O$I$s$J(B URL
-$B$K$b4X$o$i$:E,MQ$5$l$k$N$G!"40A4$K0BA4$G$9!#(B</p>
-</section>
-
-</section>
-
-<section id="virtualhost"><title>$B%P!<%A%c%k%[%9%H(B</title>
-
-<p><directive type="section" module="core">VirtualHost</directive>
-$B%3%s%F%J$OFCDj$N%[%9%H$KE,MQ$9$k%G%#%l%/%F%#%V$r3JG<$7$^$9!#(B
-$B0lBf$N%^%7%s$GJ#?t$N%[%9%H$r0[$J$k@_Dj$GDs6!$7$?$$$H$-$KM-MQ$G$9!#(B
-$B>\:Y$K4X$7$F$O(B<a href="vhosts/">$B%P!<%A%c%k%[%9%H%I%-%e%a%s%H(B</a>$B$r(B
-$B$4Mw2<$5$$!#(B</p>
-</section>
-
-<section id="proxy"><title>$B%W%m%/%7(B</title>
-
-<p><directive type="section" module="mod_proxy">Proxy</directive>
-$B$H(B <directive type="section" module="mod_proxy">ProxyMatch</directive>
-$B%3%s%F%J$O!"FCDj$N(B URL $B$K%^%C%A$9$k(B <module>mod_proxy</module>
-$B%W%m%/%7%5!<%P$r7PM3$7$F%"%/%;%9$7$?%5%$%H$KBP$7$F$N$_E,MQ$5$l$k(B
-$B@_Dj%G%#%l%/%F%#%V$r3JG<$7$^$9!#Nc$($P<!$N@_Dj$O!"(B<code>cnn.com</code>
-$B%&%'%V%5%$%H$K%"%/%;%9$9$k$?$a$KMQ$$$i$l$k%W%m%/%7%5!<%P$r(B
-$B@)8B$7$^$9!#(B</p>
-
-<example>
-&lt;Proxy http://cnn.com/*&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Proxy&gt;
-</example>
-</section>
-
-<section id="whatwhere"><title>$B$I$N%G%#%l%/%F%#%V$,;H$($k$N(B?</title>
-
-<p>$B$I$N%?%$%W$N@_Dj%;%/%7%g%s$G$I$N%G%#%l%/%F%#%V$,;HMQ$G$-$k$+$O!"(B
-$B%G%#%l%/%F%#%V$N(B <a href="mod/directive-dict.html#Context">Context</a>
-$B$r8+$F$/$@$5$$!#(B
-<directive type="section" module="core">Directory</directive>
-$B$G;HMQ2DG=$J$b$N$OA4$F!"F1MM$K(B
-<directive type="section" module="core">DirectoryMatch</directive>,
-<directive type="section" module="core">Files</directive>,
-<directive type="section" module="core">FilesMatch</directive>,
-<directive type="section" module="core">Location</directive>,
-<directive type="section" module="core">LocationMatch</directive>,
-<directive type="section" module="mod_proxy">Proxy</directive>,
-<directive type="section" module="mod_proxy">ProxyMatch</directive>
-$B%;%/%7%g%s$G;HMQ2DG=$G$9!#$7$+$7$J$,$i4v$D$+Nc30$bB8:_$7$^$9!#(B</p>
-
-<ul>
-<li><directive module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$O(B
-<directive type="section" module="core">Directory</directive>
-$B%;%/%7%g%s$G$N$_;HMQ2DG=$G$9!#(B</li>
-
-<li><code>FollowSymLinks</code> $B$H(B <code>SymLinksIfOwnerMatch</code> $B$N(B
-<directive module="core">Options</directive> $B$O!"(B
-<directive type="section" module="core">Directory</directive>
-$B%;%/%7%g%s$+(B <code>.htaccess</code> $B%U%!%$%k$G$N$_;HMQ2DG=$G$9!#(B</li>
-
-<li><directive module="core">Options</directive> $B%G%#%l%/%F%#%V$O!"(B
-<directive type="section" module="core">Files</directive>
-$B$H(B <directive type="section" module="core">FilesMatch</directive>
-$B%;%/%7%g%s$G$O;HMQ$G$-$^$;$s!#(B</li>
-</ul>
-</section>
-
-<section id="mergin"><title>$B%;%/%7%g%s$N%^!<%8J}K!(B</title>
-
- <p>$B%^!<%8$N=gHV$O0J2<$N$h$&$K$J$C$F$$$^$9(B:</p>
-
- <ol>
- <li><directive
- type="section" module="core">Directory</directive> ($B@55,I=8=L5$7(B) $B$H(B
- <code>.htaccess</code> $B$rF1;~$K(B (<code>.htaccess</code> $B$,5v2D$5$l$F$$$l$P!"$=$l$,(B
- <directive type="section" module="core">Directory</directive> $B$r>e=q$-$7$^$9(B)
- </li>
-
- <li><directive type="section" module="core">DirectoryMatch</directive>
- ($B$H(B <code>&lt;Directory ~&gt;</code></li>
-
- <li><directive type="section" module="core">Files</directive> $B$H(B
- <directive type="section" module="core">FilesMatch</directive> $B$rF1;~$K(B</li>
-
- <li><directive type="section" module="core">Location</directive> $B$H(B
- <directive type="section" module="core">LocationMatch</directive> $B$rF1;~$K(B</li>
- </ol>
-
- <p><directive type="section" module="core">Directory</directive>
- $B0J30$O!"$=$l$>$l$N%0%k!<%W$O@_Dj%U%!%$%k$K8=$l$?=gHV$K=hM}$5$l$^$9!#(B
- <directive type="section" module="core">Directory</directive> ($B>e$N%0%k!<%W(B 1)
- $B$O%G%#%l%/%H%j$,C;$$$b$N$+$iD9$$$b$N$X$H=hM}$5$l$^$9!#$G$9$+$i!"(B
- $BNc$($P(B <code>&lt;Directory /var/web/dir1&gt;</code> $B$O(B
- <code>&lt;Directory /var/web/dir/subdir&gt;</code> $B$NA0$K=hM}$5$l$^$9!#J#?t$N(B
- <directive
- type="section" module="core">Directory</directive> $B%;%/%7%g%s$,(B
- $BF1$8%G%#%l%/%H%j$K(B
- $BE,MQ$5$l$k>l9g$O!"@_Dj%U%!%$%kCf$N=gHV$K=>$C$F=hM}$5$l$^$9!#(B
- <directive module="core">Include</directive>
- $B$K$h$C$FA^F~$5$l$?@_Dj$O(B $BA^F~$7$F$$$k%U%!%$%k$N(B
- <directive module="core">Include</directive>
- $B%G%#%l%/%F%#%V$N0LCV$K$"$C$?$+$N$h$&$K07$o$l$^$9!#(B</p>
-
- <p><directive type="section"
- module="core">VirtualHost</directive> $B%;%/%7%g%sCf$N%;%/%7%g%s$O(B
- $B%P!<%A%c%k%[%9%H$NDj5A$N30B&$NBP1~$9$k%;%/%7%g%s$N(B
- <em>$B8e(B</em>$B$KE,MQ$5$l$^$9!#$3$l$K$h$j%P!<%A%c%k%[%9%H$,(B
- $B%a%$%s$N%5!<%P@_Dj$r>e=q$-$G$-$k$h$&$J$j$^$9!#(B</p>
-
- <p><module>mod_proxy</module> $B$G%j%/%(%9%H$,=hM}$5$l$k>l9g$O!"(B
- $B=hM}=gHV$N$&$A!"(B<directive module="core"
- type="section">Directory</directive> $B%3%s%F%J$NItJ,$,(B
- <directive module="mod_proxy" type="section">Proxy</directive>
- $B%3%s%F%J$K<h$C$FBe$o$i$l$^$9!#(B</p>
-
- <p>$B8e$N%;%/%7%g%s$N%G%#%l%/%F%#%V$,A0$N%;%/%7%g%s$N$b$N$r>e=q$-$7$^$9!#(B</p>
-
-
-<note><title>$B5;=Q%a%b(B</title>
- $B<B:]$K$O!"L>A0$rJQ49$9$kCJ3,(B (URL
- $B$r%U%!%$%kL>$K%^%C%W$9$k$?$a$K(B <code>Alias</code> $B$d(B
- <code>DocumentRoot</code> $B$,;HMQ$5$l$k$H$3$m(B) $B$ND>A0$K(B
- <directive type="section" module="core">Location</directive>/<directive type="section" module="core">LocationMatch</directive>
- $B$,9T$J$o$l$^$9!#(B
- $B$3$l$i$rE,MQ$7$?7k2L$OJQ49$,=*$o$C$?8e$K40A4$K<N$F$i$l$^$9!#(B
-</note>
-<section id="merge-examples"><title>$BNc(B</title>
-
-<p>$B<!$O%^!<%8$N=gHV$r<($9$?$a$NWs0UE*$JNc$K$J$C$F$$$^$9!#(B
-$B%j%/%(%9%HA4$F$KE,MQ$5$l$k$H$7$F!"K\Nc$N%G%#%l%/%F%#%V$O(B
-A &gt; B &gt; C &gt; D &gt; E $B$N=gHV$KE,MQ$5$l$^$9!#(B</p>
-
-<example>
-&lt;Location /&gt;<br />
-E<br />
-&lt;/Location&gt;<br />
-<br />
-&lt;Files f.html&gt;<br />
-D<br />
-&lt;/Files&gt;<br />
-<br />
-&lt;VirtualHost *&gt;<br />
-&lt;Directory /a/b&gt;<br />
-B<br />
-&lt;/Directory&gt;<br />
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;DirectoryMatch "^.*b$"&gt;<br />
-C<br />
-&lt;/DirectoryMatch&gt;<br />
-<br />
-&lt;Directory /a/b&gt;<br />
-A<br />
-&lt;/Directory&gt;<br />
-<br />
-</example>
-
-<p>$B$b$C$H6qBNE*$J!"<!$NNc$r9M$($F$_$^$7$g$&!#(B
-<directive module="core" type="section">Directory</directive>
-$B%;%/%7%g%s$K@_CV$5$l$?%"%/%;%9@)8B$K4X$o$i$:!"(B
-<directive module="core" type="section">Location</directive>
-$B%;%/%7%g%s$,:G8e$KI>2A$5$l$F!"%5!<%P$X$N%"%/%;%9$O@)8B$5$l$^$;$s!#(B
-$B8@$$49$($l$P!"%^!<%8$N=gHV$O=EMW$G!"Cm0U$7$F;HMQ$7$F$/$@$5$$(B!</p>
-
-<example>
-&lt;Location /&gt;<br />
-Order deny,allow<br />
-Allow from all<br />
-&lt;/Location&gt;<br />
-<br />
-# Woops! This &lt;Directory&gt; section will have no effect<br />
-&lt;Directory /&gt;<br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
-&lt;/Directory&gt;
-</example>
-
-</section>
-
-</section>
-</manualpage>
diff --git a/docs/manual/sections.xml.ko b/docs/manual/sections.xml.ko
deleted file mode 100644
index 68c0b88d19..0000000000
--- a/docs/manual/sections.xml.ko
+++ /dev/null
@@ -1,464 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="sections.xml.meta">
-
-<title>¼½¼Ç ¼³Á¤</title>
-
-<summary> <p><a href="configuring.html">¼³Á¤ÆÄÀÏ</a>¿¡ ÀÖ´Â
-Áö½Ã¾î´Â ¼­¹ö Àüü¿¡ Àû¿ëµÇ°Å³ª, ƯÁ¤ µð·ºÅ丮, ÆÄÀÏ, È£½ºÆ®,
-URL¿¡¸¸ Àû¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ´Ù¸¥ Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦
-Á¦ÇÑÇϱâÀ§ÇØ ¼³Á¤ ¼½¼ÇÀ̳ª <code>.htaccess</code> ÆÄÀÏÀ»
-»ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.</p>
-</summary>
-
-<section id="types"><title>¼³Á¤ ¼½¼ÇÀÇ Á¾·ù</title>
-
-<related>
-<modulelist>
-<module>core</module>
-<module>mod_proxy</module>
-</modulelist>
-<directivelist>
-<directive type="section" module="core">Directory</directive>
-<directive type="section" module="core">DirectoryMatch</directive>
-<directive type="section" module="core">Files</directive>
-<directive type="section" module="core">FilesMatch</directive>
-<directive type="section" module="core">IfDefine</directive>
-<directive type="section" module="core">IfModule</directive>
-<directive type="section" module="core">Location</directive>
-<directive type="section" module="core">LocationMatch</directive>
-<directive type="section" module="mod_proxy">Proxy</directive>
-<directive type="section" module="mod_proxy">ProxyMatch</directive>
-<directive type="section" module="core">VirtualHost</directive>
-</directivelist>
-</related>
-
-<p>¼½¼Ç¿¡´Â µÎ°¡Áö Á¾·ù°¡ ÀÖ´Ù. ´ëºÎºÐÀº ¸Å¿äû¸¶´Ù 󸮵ȴÙ.
-ÇØ´çÇÏ´Â ¿äû¿¡¸¸ ¾È¿¡ Æ÷ÇÔÇÑ Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ¹Ý´ë·Î, <directive
-type="section" module="core">IfDefine</directive>°ú <directive
-type="section" module="core">IfModule</directive>Àº ¼­¹ö°¡
-½ÃÀÛÇÒ¶§¿Í ²¨Áú¶§¸¸ ó¸®ÇÑ´Ù. ½ÃÀÛÇÒ¶§ »óÅ°¡ ÂüÀÌ¸é ¾È¿¡ ÀÖ´Â
-Áö½Ã¾î°¡ ¸ðµç ¿äû¿¡ Àû¿ëµÈ´Ù. ÂüÀÌ ¾Æ´Ï¸é ¾È¿¡ ÀÖ´Â Áö½Ã¾î´Â
-¹«½ÃÇÑ´Ù.</p>
-
-<p><directive type="section" module="core">IfDefine</directive>
-Áö½Ã¾î´Â <code>httpd</code> ¸í·ÉÇà¿¡ ÀûÀýÇÑ ÆĶó¹ÌÅÍ°¡ ÀÖ´Â
-°æ¿ì¿¡¸¸ ¾È¿¡ Æ÷ÇÔÇÑ Áö½Ã¾î¸¦ Àû¿ëÇÑ´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é,
-¼­¹ö¸¦ <code>httpd -DClosedForNow</code>·Î ½ÃÀÛÇÒ °æ¿ì¿¡¸¸
-¸ðµç ¿äûÀÌ ´Ù¸¥ »çÀÌÆ®·Î ¸®´ÙÀÌ·º¼ÇµÈ´Ù:</p>
-
-<example>
-&lt;IfDefine ClosedForNow&gt;<br />
-Redirect / http://otherserver.example.com/<br />
-&lt;/IfDefine&gt;
-</example>
-
-<p><directive type="section" module="core">IfModule</directive>
-Áö½Ã¾îµµ ƯÁ¤ ¸ðµâÀÌ ¼­¹ö¿¡ Æ÷ÇÔµÈ °æ¿ì¿¡¸¸ ¾È¿¡ µç Áö½Ã¾î¸¦
-Àû¿ëÇÑ´Ù´Â Á¡À» Á¦¿ÜÇÏ°í´Â ¸Å¿ì ºñ½ÁÇÏ´Ù. ¸ðµâÀ» ¼­¹ö¿¡ Á¤ÀûÀ¸·Î
-ÄÄÆÄÀÏÇϰųª µ¿ÀûÀ¸·Î ÄÄÆÄÀÏÇÑÈÄ ¼³Á¤ÆÄÀÏ ¾Õ¿¡ <directive
-module="mod_so">LoadModule</directive> ÁÙÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ
-Áö½Ã¾î´Â ƯÁ¤ ¸ðµâÀÇ ¼³Ä¡À¯¹«¿¡ µû¶ó ¼³Á¤ÆÄÀÏÀÌ ´Ù¸¦ ÇÊ¿ä°¡
-ÀÖÀ»¶§¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù. ¸ðµâÀÌ ¾ø´Â °æ¿ì À¯¿ëÇÑ ¿À·ù¹®ÀÌ ³ª¿ÀÁö¾ÊÀ»
-¼ö Àֱ⠶§¹®¿¡ ¾ðÁ¦³ª »ç¿ëÇÏ±æ ¿øÇÏ´Â Áö½Ã¾î¸¦ ¾È¿¡ µÎ¸é ¾ÈµÈ´Ù.</p>
-
-<p>´ÙÀ½ ¿¹¿¡¼­ <module>mod_mime_magic</module>ÀÌ ÀÖÀ»¶§¸¸ <directive
-module="mod_mime_magic">MimeMagicFiles</directive> Áö½Ã¾î¸¦
-ó¸®ÇÑ´Ù.</p>
-
-<example>
-&lt;IfModule mod_mime_magic.c&gt;<br />
-MimeMagicFile conf/magic<br />
-&lt;/IfModule&gt;
-</example>
-
-<p><directive type="section" module="core">IfDefine</directive>°ú
-<directive type="section" module="core">IfModule</directive>ÀÇ
-°Ë»ç ¾Õ¿¡ "!"À» ºÙ¿© Á¶°ÇÀ» ¿ªÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. ¶Ç, ¿©·¯ ¼½¼ÇµéÀ»
-°ãÃļ­ »ç¿ëÇÏ¿© ´õ º¹ÀâÇÑ È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù.</p>
-</section>
-
-<section id="file-and-web"><title>ÆÄÀϽýºÅÛ°ú À¥°ø°£</title>
-
-<p>°¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ¼³Á¤ ¼½¼ÇÀº ÆÄÀϽýºÅÛ°ú À¥°ø°£(webspace)ÀÇ
-ƯÁ¤ Àå¼Ò¿¡ ´ëÇÑ ¼³Á¤À» º¯°æÇÏ´Â °ÍµéÀÌ´Ù. ¸ÕÀú ÀÌ µÑÀÇ Â÷À̸¦
-ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ÆÄÀϽýºÅÛÀº ¿î¿µÃ¼Á¦ ÀÔÀå¿¡¼­ µð½ºÅ©¸¦
-º¸´Â °üÁ¡ÀÌ´Ù. ¿¹¸¦ µé¾î, ±âº»°ªÀ¸·Î ¾ÆÆÄÄ¡¸¦ ¼³Ä¡¸¦ Çϸé À¯´Ð½º
-ÆÄÀϽýºÅÛÀÇ °æ¿ì <code>/usr/local/apache2</code>, À©µµ¿ìÁî
-ÆÄÀϽýºÅÛÀÇ °æ¿ì <code>"c:/Program Files/Apache
-Group/Apache2"</code>¿¡ ¼³Ä¡µÈ´Ù. (¾ÆÆÄÄ¡´Â À©µµ¿ìÁî¿¡¼­ Á¶Â÷
-Ç×»ó, ¿ª½½·¡½¬°¡ ¾Æ´Ñ, ½½·¡½¬¸¦ »ç¿ëÇÔÀ» ÁÖÀÇÇ϶ó.) ¹Ý´ë·Î
-À¥°ø°£Àº À¥¼­¹ö°¡ Á¦°øÇÏ°í Ŭ¶óÀ̾ðÆ®°¡ º¸°ÔµÉ »çÀÌÆ®ÀÇ °üÁ¡ÀÌ´Ù.
-±×·¡¼­ À¯´Ð½º¿¡¼­ ±âº» ¾ÆÆÄÄ¡ ¼³Ä¡¸¦ ÇÑ °æ¿ì À¥°æ·ÎÀÇ °æ·Î
-<code>/dir/</code>Àº ÆÄÀϽýºÅÛ °æ·Î
-<code>/usr/local/apache2/htdocs/dir/</code>¿¡ ÇØ´çÇÑ´Ù. À¥°ø°£Àº
-µ¥ÀÌŸº£À̽º µî¿¡¼­ µ¿ÀûÀ¸·Î »ý¼ºµÉ ¼ö Àֱ⶧¹®¿¡ ¹Ýµå½Ã
-ÆÄÀϽýºÅÛ¿¡ Á÷Á¢ ´ëÀÀµÉ ÇÊ¿ä´Â ¾ø´Ù.</p>
-
-<section id="filesystem"><title>ÆÄÀϽýºÅÛ ¼½¼Ç</title>
-
-<p><directive type="section" module="core">Directory</directive>¿Í
-<directive type="section" module="core">Files</directive> Áö½Ã¾î¿Í
-Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ´Â Áö½Ã¾î´Â ÆÄÀϽýºÅÛÀÇ Æ¯Á¤ ºÎºÐ¿¡ Áö½Ã¾î¸¦
-Àû¿ëÇÑ´Ù. <directive type="section"
-module="core">Directory</directive> Áö½Ã¾î¿¡ Æ÷ÇÔµÈ Áö½Ã¾îµéÀº
-ÁöÁ¤ÇÑ ÆÄÀϽýºÅÛ µð·ºÅ丮¿Í ±× ÇÏÀ§ µð·ºÅ丮¿¡ Àû¿ëµÈ´Ù. <a
-href="howto/htaccess.html">.htaccess ÆÄÀÏ</a>À» »ç¿ëÇصµ °á°ú´Â
-°°´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, µð·ºÅ丮 ¸ñ·Ï(index)ÀÌ
-<code>/var/web/dir1</code> ÀÌÇÏ µð·ºÅ丮¿¡¼­ µð·ºÅ丮 ¸ñ·Ï(index)ÀÌ
-°¡´ÉÇÏ´Ù.</p>
-
-<example>
-&lt;Directory /var/web/dir1&gt;<br />
-Options +Indexes<br />
-&lt;/Directory&gt;
-</example>
-
-<p><directive type="section"
-module="core">Files</directive> ¼½¼Ç¿¡ Æ÷ÇÔµÈ Áö½Ã¾îµéÀº ¾î¶²
-µð·ºÅ丮¿¡ ÀÖ´ÂÁö °ü°è¾øÀÌ ÁöÁ¤ÇÑ À̸§À» °¡Áø ÆÄÀÏ¿¡ Àû¿ëµÈ´Ù.
-¼³Á¤ÆÄÀÏÀÇ ÁÖ¼³Á¤ºÎºÐ¿¡ ÀÖ´Â ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, Àå¼Ò¿Í
-°ü°è¾øÀÌ <code>private.html</code>À̶õ À̸§À» ÇÑ ÆÄÀÏÀÇ Á¢±ÙÀ»
-°ÅºÎÇÑ´Ù.</p>
-
-<example>
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;
-</example>
-
-<p>ÆÄÀϽýºÅÛÀÇ Æ¯Á¤ ºÎºÐ¿¡ ÀÖ´Â ÆÄÀÏÀ» ÁöĪÇϱâÀ§ÇØ <directive
-type="section" module="core">Files</directive>¿Í <directive
-type="section" module="core">Directory</directive> ¼½¼ÇÀ» °°ÀÌ
-»ç¿ëÇÑ´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é,
-<code>/var/web/dir1/private.html</code>,
-<code>/var/web/dir1/subdir2/private.html</code>,
-<code>/var/web/dir1/subdir3/private.html</code> °°ÀÌ
-<code>/var/web/dir1/</code> µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â À̸§ÀÌ
-<code>private.html</code>ÀÎ ÆÄÀÏÀÇ Á¢±ÙÀ» °ÅºÎÇÑ´Ù.</p>
-
-<example>
-&lt;Directory /var/web/dir1&gt;<br />
-&lt;Files private.html&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Files&gt;<br />
-&lt;/Directory&gt;
-</example>
-</section>
-
-<section id="webspace"><title>À¥°ø°£ ¼½¼Ç</title>
-
-<p><directive type="section" module="core">Location</directive>
-Áö½Ã¾î¿Í ÀÌ¿¡ ÇØ´çÇÏ´Â Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ´Â Áö½Ã¾î´Â ¹Ý´ë·Î
-ƯÁ¤ À¥°ø°£ÀÇ ¼³Á¤À» ¹Ù²Û´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, /privateÀ¸·Î
-½ÃÀÛÇÏ´Â URL-°æ·ÎÀÇ Á¢±ÙÀÌ °ÅºÎµÈ´Ù. ¿©±â¿¡´Â
-<code>http://yoursite.example.com/private</code>,
-<code>http://yoursite.example.com/private123</code>,
-<code>http://yoursite.example.com/private/dir/file.html</code>
-°°ÀÌ <code>/private</code> ¹®ÀÚ¿­·Î ½ÃÀÛÇÏ´Â ¿äûÀÌ ÇØ´çµÈ´Ù.</p>
-
-<example>
-&lt;Location /private&gt;<br />
-Order Allow,Deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</example>
-
-<p><directive type="section" module="core">Location</directive>
-Áö½Ã¾î´Â ÆÄÀϽýºÅÛ¿¡ ´ëÀÀÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½ ¿¹´Â ¾î¶»°Ô ƯÁ¤
-URLÀ» <module>mod_status</module>°¡ Á¦°øÇÏ´Â ¾ÆÆÄÄ¡ ³»ºÎ Çڵ鷯·Î
-´ëÀÀ½ÃÅ°´ÂÁö¸¦ º¸¿©ÁØ´Ù. ÆÄÀϽýºÅÛ¿¡ <code>server-status</code>¶ó´Â
-ÆÄÀÏÀº ÇÊ¿ä¾ø´Ù.</p>
-
-<example>
-&lt;Location /server-status&gt;<br />
-SetHandler server-status<br />
-&lt;/Location&gt;
-</example>
-</section>
-
-<section id="wildcards"><title>¿ÍÀϵåÄ«µå¿Í Á¤±ÔÇ¥Çö½Ä</title>
-
-<p><directive type="section" module="core">Directory</directive>,
-<directive type="section" module="core">Files</directive>,
-<directive type="section" module="core">Location</directive>
-Áö½Ã¾î¿¡¼­ C Ç¥ÁØ ÆÄÀ̺귯¸®ÀÇ <code>fnmatch</code>¿Í °°Àº
-½©¿¡¼­ »ç¿ëÇÏ´Â ¿ÍÀϵåÄ«µå ¹®ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
-"*" ¹®ÀÚ´Â ¾î¶² ¹®ÀÚ¿­ÀÌ¶óµµ ³ªÅ¸³»°í, "?" ¹®ÀÚ´Â ¾î¶² ¹®ÀÚ ÇÑ°³¸¦
-³ªÅ¸³»¸ç, "[<em>seq</em>]"´Â <em>seq</em> Áß¿¡ ÇÑ ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù.
-¾î¶² ¿ÍÀϵåÄ«µåµµ "/" ¹®ÀÚ¸¦ ³ªÅ¸³»Áö´Â ¸øÇÑ´Ù. ±×·¡¼­ ÀÌ ¹®ÀÚ´Â
-Á÷Á¢ »ç¿ëÇØ¾ß ÇÑ´Ù.</p>
-
-<p>´õ À¯¿¬ÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇϸé perlȣȯ <a
-href="glossary.html#regex">Á¤±ÔÇ¥Çö½Ä</a>À» »ç¿ëÇÏ´Â <directive
-type="section" module="core">DirectoryMatch</directive>, <directive
-type="section" module="core">FilesMatch</directive>, <directive
-type="section" module="core">LocationMatch</directive>¸¦ »ç¿ëÇÒ
-¼ö ÀÖ´Ù. ±×·¯³ª ¾Æ·¡ ¼³Á¤ÀÇ °áÇÕ¿¡ °üÇÑ Àý¿¡¼­ Á¤±ÔÇ¥Çö½Ä ¼½¼ÇÀ»
-»ç¿ëÇϸé Áö½Ã¾î°¡ Àû¿ëµÇ´Â ¹æ¹ýÀÌ ¾î¶»°Ô º¯ÇÏ´ÂÁö »ìÆìºÁ¶ó.</p>
-
-<p>¸ðµç »ç¿ëÀÚ µð·ºÅ丮 ¼³Á¤À» º¯°æÇÏ´Â ºñÁ¤±ÔÇ¥Çö½Ä ¿ÍÀϵåÄ«µå
-¼½¼ÇÀº ´ÙÀ½°ú °°´Ù:</p>
-
-<example>
-&lt;Directory /home/*/public_html&gt;<br />
-Options Indexes<br />
-&lt;/Directory&gt;
-</example>
-
-<p>Á¤±ÔÇ¥Çö½Ä ¼½¼ÇÀ» »ç¿ëÇÏ¿© Çѹø¿¡ ¿©·¯ Á¾·ùÀÇ ±×¸²ÆÄÀÏ¿¡
-´ëÇÑ Á¢±ÙÀ» °ÅºÎÇÒ ¼ö ÀÖ´Ù:</p>
-<example>
-&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/FilesMatch&gt;
-</example>
-
-</section>
-
-<section id="whichwhen"><title>¹«¾ùÀ» »ç¿ëÇϳª</title>
-
-<p>ÆÄÀϽýºÅÛ ¼½¼Ç°ú À¥°ø°£ ¼½¼Ç Áß Çϳª¸¦ ¼±ÅÃÇÏ´Â °ÍÀº ½ÇÁ¦·Î
-¸Å¿ì ½±´Ù. ÆÄÀϽýºÅÛ¿¡ ÀÖ´Â °´Ã¼¿¡ Áö½Ã¾î¸¦ Àû¿ëÇÒ¶§´Â Ç×»ó
-<directive type="section" module="core">Directory</directive>³ª
-<directive type="section" module="core">Files</directive>¸¦
-»ç¿ëÇÑ´Ù. (µ¥ÀÌŸº£À̽º¿¡¼­ »ý¼ºÇÑ À¥ÆäÀÌÁö¿Í °°ÀÌ) ÆÄÀϽýºÅÛ¿¡
-ÀÖÁö ¾Ê´Â °´Ã¼¿¡ Áö½Ã¾î¸¦ Àû¿ëÇÒ¶§´Â <directive type="section"
-module="core">Location</directive>À» »ç¿ëÇÑ´Ù.</p>
-
-<p>ÆÄÀϽýºÅÛ¿¡ ÀÖ´Â °´Ã¼ÀÇ Á¢±ÙÀ» Á¦ÇÑÇϱâÀ§ÇØ <directive
-type="section" module="core">Location</directive>À» »ç¿ëÇϸé
-Àý´ë ¾ÈµÈ´Ù. ¿©·¯ ´Ù¸¥ À¥°ø°£ Àå¼Ò(URL)°¡ °°Àº ÆÄÀϽýºÅÛ Àå¼Ò¿¡
-´ëÀÀµÉ ¼ö ÀÖÀ¸¹Ç·Î, °É¾îµÐ Á¦ÇÑÀ» ¿ìȸÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ´ÙÀ½
-¼³Á¤ÀÇ ¿¹¸¦ »ìÆ캸ÀÚ:</p>
-
-<example>
-&lt;Location /dir/&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Location&gt;
-</example>
-
-<p>ÀÌ ¼³Á¤Àº <code>http://yoursite.example.com/dir/</code>À»
-¿äûÇÑ´Ù¸é Àß ÀÛµ¿ÇÑ´Ù. ±×·¯³ª ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê´Â ÆÄÀϽýºÅÛÀ»
-»ç¿ëÇÑ´Ù¸é ¾î¶»°ÔµÇ³ª?
-<code>http://yoursite.example.com/DIR/</code>À» ¿äûÇÏ¿© ½±°Ô
-Á¦ÇÑÀ» ¿ìȸÇÒ ¼ö ÀÖ´Ù. ¹Ý´ë·Î <directive type="section"
-module="core">Directory</directive> Áö½Ã¾î´Â ¾î¶»°Ô ¿äûÇÏ¿´´ÂÁö
-°ü°è¾øÀÌ ±× Àå¼Ò¿¡¼­ ¼­ºñ½ºµÇ´Â ³»¿ë¿¡ Àû¿ëµÈ´Ù. (¿¹¿Ü´Â ÆÄÀϽýºÅÛ
-¸µÅ©¸¦ »ç¿ëÇÏ´Â °æ¿ì´Ù. ½Éº¼¸µÅ©¸¦ »ç¿ëÇÏ¿© ÇÑ µð·ºÅ丮¸¦
-ÆÄÀϽýºÅÛÀÇ ¿©·¯ Àå¼Ò¿¡ µÑ ¼ö ÀÖ´Ù. <directive type="section"
-module="core">Directory</directive> Áö½Ã¾î´Â ½Éº¼¸µÅ©¸¦ µû¶ó°£´Ù.
-±×·¯¹Ç·Î ³ôÀº ¼öÁØÀÇ º¸¾ÈÀ» À§Çؼ­´Â ÀûÀýÇÑ <directive
-module="core">Options</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ½Éº¼¸µÅ©¸¦
-¹«½ÃÇØ¾ß ÇÑ´Ù.)</p>
-
-<p>¾Æ¸¶µµ ´ç½ÅÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â ÆÄÀϽýºÅÛÀ» »ç¿ëÇϹǷÎ
-ÀÌ·± ÀÏÀÌ ÀϾÁö ¾Ê´Â´Ù°í »ý°¢ÇÒÁöµµ ¸ð¸¥´Ù. ±×·¯³ª ´Ù¸¥
-¹æ¹ýÀ¸·Îµµ ¿©·¯ À¥°ø°£ À§Ä¡°¡ ÇÑ ÆÄÀϽýºÅÛ À§Ä¡¿¡ ´ëÀÀµÉ ¼ö
-ÀÖÀ½À» ±â¾ïÇ϶ó. ±×·¡¼­ °¡´ÉÇϸé Ç×»ó ÆÄÀϽýºÅÛ ¼½¼ÇÀ» »ç¿ëÇؾß
-ÇÑ´Ù. ±×·¯³ª ÀÌ ±ÔÄ¢¿¡ ¿¹¿Ü°¡ Çϳª ÀÖ´Ù. ¼³Á¤ Á¦ÇÑÀ»
-<code>&lt;Location /&gt;</code> ¼½¼Ç¿¡ µÎ¸é ÀÌ ¼½¼ÇÀÌ Æ¯Á¤
-URLÀÌ ¾Æ´Ñ ¸ðµç ¿äû¿¡ Àû¿ëµÇ¹Ç·Î ¿Ïº®ÇÏ°Ô ¾ÈÀüÇÏ´Ù.</p>
-</section>
-
-</section>
-
-<section id="virtualhost"><title>°¡»óÈ£½ºÆ®</title>
-
-<p><directive type="section" module="core">VirtualHost</directive>
-¼½¼ÇÀº ƯÁ¤ È£½ºÆ®¿¡ Àû¿ëµÇ´Â Áö½Ã¾îµéÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ´Â ÇÑ
-ÄÄÇ»ÅÍ¿¡¼­ °¢°¢ ´Ù¸¥ ¼³Á¤À» »ç¿ëÇÑ ¿©·¯ È£½ºÆ®¸¦ ¼­ºñ½ºÇÒ¶§
-À¯¿ëÇÏ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="vhosts/">°¡»óÈ£½ºÆ® ¹®¼­</a>¸¦
-Âü°íÇ϶ó.</p>
-</section>
-
-<section id="proxy"><title>ÇÁ·Ï½Ã</title>
-
-<p><directive type="section" module="mod_proxy">Proxy</directive>¿Í
-<directive type="section" module="mod_proxy">ProxyMatch</directive>
-¼½¼ÇÀº ÁöÁ¤ÇÑ URL¿¡ ´ëÇØ <module>mod_proxy</module> ÇÁ·Ï½Ã ¼­¹ö¸¦
-°ÅÃÄ Á¢±ÙÇÏ´Â °æ¿ì¿¡¸¸ Àû¿ëµÈ´Ù. ´ÙÀ½ ¼³Á¤À» ¿¹·Î µé¸é, ÇÁ·Ï½Ã
-¼­¹ö¸¦ ÅëÇØ <code>cnn.com</code> À¥»çÀÌÆ®¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù.</p>
-
-<example>
-&lt;Proxy http://cnn.com/*&gt;<br />
-Order allow,deny<br />
-Deny from all<br />
-&lt;/Proxy&gt;
-</example>
-</section>
-
-<section id="whatwhere"><title>¾È¿¡ ¾î¶² Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö
-ÀÖ³ª?</title>
-
-<p>¾î¶² ¼³Á¤ ¼½¼Ç¾È¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Áö½Ã¾î¸¦ ¾Ë·Á¸é Áö½Ã¾îÀÇ
-<a href="mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦ È®ÀÎÇ϶ó.
-<directive type="section" module="core">Directory</directive>¿¡¼­
-»ç¿ë°¡´ÉÇÑ Áö½Ã¾î´Â <directive type="section"
-module="core">DirectoryMatch</directive>, <directive type="section"
-module="core">Files</directive>, <directive type="section"
-module="core">FilesMatch</directive>, <directive type="section"
-module="core">Location</directive>, <directive type="section"
-module="core">LocationMatch</directive>, <directive type="section"
-module="mod_proxy">Proxy</directive>, <directive type="section"
-module="mod_proxy">ProxyMatch</directive> ¼½¼Ç¿¡¼­µµ »ç¿ë°¡´ÉÇÏ´Ù.
-±×·¯³ª, ¿¹¿Ü°¡ ÀÖ´Ù:</p>
-
-<ul>
-<li><directive module="core">AllowOverride</directive> Áö½Ã¾î´Â
-<directive type="section" module="core">Directory</directive>
-¼½¼Ç¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</li>
-
-<li><code>FollowSymLinks</code>, <code>SymLinksIfOwnerMatch</code>,
-<directive module="core">Options</directive>´Â <directive
-type="section" module="core">Directory</directive> ¼½¼ÇÀ̳ª
-<code>.htaccess</code> ÆÄÀÏ¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</li>
-
-<li><directive module="core">Options</directive> Áö½Ã¾î´Â
-<directive type="section" module="core">Files</directive>°ú
-<directive type="section" module="core">FilesMatch</directive>
-¼½¼Ç¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù.</li>
-</ul>
-</section>
-
-<section id="mergin"><title>¼½¼ÇµéÀÌ °áÇÕÇÏ´Â ¹æ¹ý</title>
-
-<p>¼³Á¤ ¼½¼ÇÀº ¸Å¿ì Ưº°ÇÑ ¹æ¹ýÀ¸·Î Àû¿ëµÈ´Ù. ÀÌ ¼ø¼­°¡ ¼³Á¤
-Áö½Ã¾î¸¦ Çؼ®ÇÏ´Â ¹æ¹ý¿¡ Áß¿äÇÑ ¿µÇâÀ» Áֱ⶧¹®¿¡ ÀÌ ¹æ¹ýÀ»
-ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.</p>
-
- <p>°áÇÕÇÏ´Â ¼ø¼­´Â:</p>
-
- <ol>
- <li> (Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏÁö¾Ê´Â) <directive type="section"
- module="core">Directory</directive>¿Í <code>.htaccess</code>´Â
- µ¿½Ã¿¡ ÀϾ´Ù (°æ¿ì¿¡ µû¶ó <code>.htaccess</code>ÀÌ
- <directive type="section" module="core">Directory</directive>¸¦
- ¹«½ÃÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ´Ù)</li>
-
- <li><directive type="section"
- module="core">DirectoryMatch</directive> (±×¸®°í
- <code>&lt;Directory ~&gt;</code>)</li>
-
- <li><directive type="section"
- module="core">Files</directive>¿Í <directive type="section"
- module="core">FilesMatch</directive>´Â µ¿½Ã¿¡ ÀϾ´Ù</li>
-
- <li><directive type="section"
- module="core">Location</directive>°ú <directive type="section"
- module="core">LocationMatch</directive>´Â µ¿½Ã¿¡ ÀϾ´Ù</li>
- </ol>
-
- <p><directive type="section"
- module="core">Directory</directive>¸¦ Á¦¿ÜÇÏ°í °¢ ¼½¼ÇµéÀ»
- ¼³Á¤ÆÄÀÏ¿¡ ³ª¿Â ¼ø¼­´ë·Î 󸮵ȴÙ. (À§ÀÇ ¼ø¼­ 1) <directive
- type="section" module="core">Directory</directive>´Â µð·ºÅ丮
- ³»¿ëÀÌ °¡Àå ªÀº °Í¿¡¼­ ±äÂÊÀ¸·Î 󸮵ȴÙ. ±×·¡¼­ ¿¹¸¦ µé¾î,
- <code>&lt;Directory /var/web/dir&gt;</code>À»
- <code>&lt;Directory /var/web/dir/subdir&gt;</code> ÀÌÀü¿¡
- ó¸®ÇÑ´Ù. °°Àº µð·ºÅ丮¸¦ ÁöĪÇÏ´Â ¿©·¯ <directive
- type="section" module="core">Directory</directive> ¼½¼ÇÀÌ
- ÀÖ´Ù¸é À̵éÀ» ¼³Á¤ÆÄÀÏ ¼ø¼­´ë·Î ó¸®ÇÑ´Ù. <directive
- module="core">Include</directive> Áö½Ã¾î·Î Æ÷ÇÔÇÑ ¼³Á¤Àº
- <directive module="core">Include</directive> Áö½Ã¾î À§Ä¡¿¡
- Æ÷ÇÔÇÑ ÆÄÀÏ ³»¿ëÀÌ ÀÖ´Â °Íó·³ ó¸®ÇÑ´Ù.</p>
-
- <p><directive type="section"
- module="core">VirtualHost</directive> ¼½¼Ç ¾È¿¡ Æ÷ÇÔµÈ ¼½¼ÇÀº
- °¡»óÈ£½ºÆ® Á¤ÀÇ ¹Û¿¡ ÀÖ´Â ÇØ´ç ¼½¼Ç <em>ÀÌÈÄ¿¡</em> Àû¿ëµÈ´Ù.
- ±×·¡¼­ °¡»óÈ£½ºÆ® ¾È¿¡¼­ ÁÖ¼­¹öÀÇ ¼³Á¤»çÇ×À» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><module>mod_proxy</module>°¡ ¿äû ¼­ºñ½ºÇÒ¶§, <directive
- module="mod_proxy" type="section">Proxy</directive> ¼½¼ÇÀÇ
- 󸮼ø¼­´Â <directive module="core"
- type="section">Directory</directive> ¼½¼Ç°ú °°´Ù.</p>
-
- <p>´ÙÀ½¿¡ ³ª¿À´Â ¼½¼ÇÀº ÀÌÀü ¼½¼ÇÀÇ °á°ú¸¦ ¼öÁ¤ÇÑ´Ù.</p>
-
-<note><title>±â¼úÀû ÁÖÀÇ</title>
- ½ÇÁ¦·Î
- <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>´Â
- (<code>Aliases</code>¿Í <code>DocumentRoot</code>¸¦ »ç¿ëÇÏ¿©
- URLÀ» ÆÄÀϸíÀ¸·Î º¯È¯ÇÏ´Â) À̸§¹ø¿ª ´Ü°è ÀÌÀü¿¡ 󸮵ȴÙ.
- º¯¿ªÀÌ ³¡³­ ÀÌÈÄ¿¡´Â ¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù.
-</note>
-
-<section id="merge-examples"><title>¿¹Á¦</title>
-
-<p>´ÙÀ½Àº °ãÇÕÇÏ´Â ¼ø¼­¸¦ ¼³¸íÇÏ´Â ¿¹´Ù. ÀÌµé ¸ðµÎ ¿äû¿¡
-Àû¿ëµÈ´Ù°í °¡Á¤Çϸé Áö½Ã¾î´Â A &gt; B &gt; C &gt; D &gt; E
-¼ø¼­·Î 󸮵ȴÙ.</p>
-
-<example>
-&lt;Location /&gt;<br />
-E<br />
-&lt;/Location&gt;<br />
-<br />
-&lt;Files f.html&gt;<br />
-D<br />
-&lt;/Files&gt;<br />
-<br />
-&lt;VirtualHost *&gt;<br />
-&lt;Directory /a/b&gt;<br />
-B<br />
-&lt;/Directory&gt;<br />
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;DirectoryMatch "^.*b$"&gt;<br />
-C<br />
-&lt;/DirectoryMatch&gt;<br />
-<br />
-&lt;Directory /a/b&gt;<br />
-A<br />
-&lt;/Directory&gt;<br />
-<br />
-</example>
-
-<p>´õ Çö½ÇÀûÀÎ ¿¹´Â ´ÙÀ½°ú °°´Ù. <directive module="core"
-type="section">Location</directive> ¼½¼ÇÀ» ³ªÁß¿¡ ó¸®ÇϹǷÎ
-<directive module="core" type="section">Directory</directive>
-¼½¼Ç¿¡ ÀÖ´Â Á¢±ÙÁ¦ÇÑ°ú °ü°è¾øÀÌ ¼­¹ö¿¡ ¹«Á¦ÇÑ Á¢±ÙÀ» °¡´ÉÇÏ´Ù.
-Áï, °áÇÕÇÏ´Â ¼ø¼­´Â Áß¿äÇϹǷΠÁÖÀÇÇ϶ó!</p>
-
-<example>
-&lt;Location /&gt;<br />
-Order deny,allow<br />
-Allow from all<br />
-&lt;/Location&gt;<br />
-<br />
-# ¾Ç! ÀÌ &lt;Directory&gt; ¼½¼ÇÀº ¾Æ¹«·± È¿°ú°¡ ¾ø´Ù<br />
-&lt;Directory /&gt;<br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
-&lt;/Directory&gt;
-</example>
-
-</section>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/sections.xml.meta b/docs/manual/sections.xml.meta
deleted file mode 100644
index ff7cc7e5bc..0000000000
--- a/docs/manual/sections.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>sections</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/server-wide.html b/docs/manual/server-wide.html
deleted file mode 100644
index d43014c0f6..0000000000
--- a/docs/manual/server-wide.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: server-wide.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: server-wide.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: server-wide.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/server-wide.html.en b/docs/manual/server-wide.html.en
deleted file mode 100644
index c023a72ab1..0000000000
--- a/docs/manual/server-wide.html.en
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Server-Wide Configuration - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Server-Wide Configuration</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/server-wide.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/server-wide.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/server-wide.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>This document explains some of the directives provided by
-the <code class="module"><a href="./mod/core.html">core</a></code> server which are used to configure
-the basic operations of the server.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#identification">Server Identification</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#locations">File Locations</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#resource">Limiting Resource Usage</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="identification" id="identification">Server Identification</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code></li><li><code class="directive"><a href="./mod/core.html#serversignature">ServerSignature</a></code></li><li><code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code></li><li><code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code></li></ul></td></tr></table>
-
- <p>The <code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code> and
- <code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code> directives
- control what information about the server will be presented
- in server-generated documents such as error messages. The
- <code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code> directive
- sets the value of the Server HTTP response header field.</p>
-
- <p>The <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> and
- <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code>
- directives are used by the server to determine how to construct
- self-referential URLs. For example, when a client requests a
- directory, but does not include the trailing slash in the
- directory name, Apache must redirect the client to the full
- name including the trailing slash so that the client will
- correctly resolve relative references in the document.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="locations" id="locations">File Locations</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#lockfile">LockFile</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code></li><li><code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code></li></ul></td></tr></table>
-
- <p>These directives control the locations of the various files
- that Apache needs for proper operation. When the pathname used
- does not begin with a slash (/), the files are located relative
- to the <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>. Be careful
- about locating files in paths which are writable by non-root users.
- See the <a href="misc/security_tips.html#serverroot">security tips</a>
- documentation for more details.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="resource" id="resource">Limiting Resource Usage</a></h2>
-
-
- <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#limitrequestbody">LimitRequestBody</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestfields">LimitRequestFields</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestfieldsize">LimitRequestFieldsize</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestline">LimitRequestLine</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitcpu">RLimitCPU</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitmem">RLimitMEM</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitnproc">RLimitNPROC</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code></li></ul></td></tr></table>
-
- <p>The <code class="directive">LimitRequest</code>*
- directives are used to place limits on the amount of resources
- Apache will use in reading requests from clients. By limiting
- these values, some kinds of denial of service attacks can be
- mitigated.</p>
-
- <p>The <code class="directive">RLimit</code>* directives
- are used to limit the amount of resources which can be used by
- processes forked off from the Apache children. In particular,
- this will control resources used by CGI scripts and SSI exec
- commands.</p>
-
- <p>The <code class="directive"><a href="./mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code>
- directive is used with some platforms to control the stack size.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/server-wide.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/server-wide.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/server-wide.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/server-wide.html.ja.euc-jp b/docs/manual/server-wide.html.ja.euc-jp
deleted file mode 100644
index be0cb36081..0000000000
--- a/docs/manual/server-wide.html.ja.euc-jp
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥µ¡¼¥ÐÁ´ÂΤÎÀßÄê - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>¥µ¡¼¥ÐÁ´ÂΤÎÀßÄê</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/server-wide.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/server-wide.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/server-wide.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ç¤Ï<code class="module"><a href="./mod/core.html">core</a></code>
-¥µ¡¼¥Ð¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃæ¤Ç¡¢
-´ðËÜÆ°ºî¤òÀßÄꤹ¤ë¤¿¤á¤Î¤â¤Î¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#identification">¥µ¡¼¥Ð ID</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#locations">¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#resource">¥ê¥½¡¼¥¹¤ÎÀ©¸Â</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="identification" id="identification">¥µ¡¼¥Ð ID</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code></li><li><code class="directive"><a href="./mod/core.html#serversignature">ServerSignature</a></code></li><li><code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code></li><li><code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code></li></ul></td></tr></table>
-
- <p><code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ê¤É¤Î¥µ¡¼¥Ð¤¬ºî¤ë¥É¥­¥å¥á¥ó¥È¤Ë¡¢
- ¤É¤Î¤è¤¦¤Ê¥µ¡¼¥Ð¤Î¾ðÊó¤òɽ¼¨¤¹¤ë¤«¤òÀ©¸æ¤·¤Þ¤¹¡£
- <code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Server HTTP
- ¥ì¥¹¥Ý¥ó¥¹¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ÎÃͤòÀßÄꤷ¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="./mod/core.html#servername">ServerName</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤ò»²¾È¤¹¤ë URL
- ¤òºî¤ë¤È¤­¤Ë»È¤ï¤ì¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬¥Ç¥£¥ì¥¯¥È¥ê¤òÍ׵ᤷ¤Æ¡¢
- ¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ÎºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å¤¬ÉÕ¤¤¤Æ¤¤¤Ê¤¤¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢
- ¥É¥­¥å¥á¥ó¥È¤ÎÁêÂÐŪ¤Ê»²¾È¤òÀµ¤·¤¯²ò·è¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡¢
- Apache ¤ÏºÇ¸å¤Î¥¹¥é¥Ã¥·¥å¤ò´Þ¤ó¤À´°Á´¤Ê¥Ñ¥¹¤Ë¥¯¥é¥¤¥¢¥ó¥È¤ò
- ¥ê¥À¥¤¥ì¥¯¥È¤µ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="locations" id="locations">¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#lockfile">LockFile</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code></li><li><code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code></li></ul></td></tr></table>
-
- <p>¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache
- ¤¬Å¬ÀÚ¤ÊÆ°ºî¤ò¤¹¤ë¤¿¤á¤ËɬÍפʳƼï¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤òÀ©¸æ¤·¤Þ¤¹¡£
- ¥Ñ¥¹¤¬¥¹¥é¥Ã¥·¥å (/) ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¡¢¥Õ¥¡¥¤¥ë¤Ï
- <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code> ¤«¤é¤ÎÁêÂХѥ¹¤È¤·¤Æ
- õ¤µ¤ì¤Þ¤¹¡£root
- °Ê³°¤Î¥æ¡¼¥¶¤¬½ñ¤­¹þ¤ß²Äǽ¤Ê¥Ñ¥¹¤Ë¥Õ¥¡¥¤¥ë¤òÃÖ¤¯¾ì¹ç¤ÏÃí°Õ¤¬É¬ÍפǤ¹¡£
- ¾ÜºÙ¤Ï<a href="misc/security_tips.html#serverroot">¡Ö¥»¥­¥å¥ê¥Æ¥£¾ðÊó¡×</a>
- ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="resource" id="resource">¥ê¥½¡¼¥¹¤ÎÀ©¸Â</a></h2>
-
-
- <table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#limitrequestbody">LimitRequestBody</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestfields">LimitRequestFields</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestfieldsize">LimitRequestFieldsize</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestline">LimitRequestLine</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitcpu">RLimitCPU</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitmem">RLimitMEM</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitnproc">RLimitNPROC</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code></li></ul></td></tr></table>
-
- <p><code class="directive">LimitRequest</code>* ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache
- ¤¬¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥ê¥¯¥¨¥¹¥ÈÆɤ߹þ¤ß¤Ç»È¤¦
- ¥ê¥½¡¼¥¹¤òÀ©¸Â¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£¤³¤ì¤é¤ÎÃͤòÀ©¸Â¤¹¤ë¤³¤È¤Ç¡¢
- ¤¤¤¯¤Ä¤«¤Î¥µ¡¼¥Ó¥¹µñÈݹ¶·â¤Ï±Æ¶Á¤òϤ餲¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p><code class="directive">RLimit</code>* ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢Apache ¤Î»Ò¥×¥í¥»¥¹¤«¤é
- fork ¤µ¤ì¤¿¥×¥í¥»¥¹¤¬»ÈÍѤ¹¤ë¥ê¥½¡¼¥¹¤òÀ©¸Â¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£
- Æäˡ¢¤³¤ì¤Ï CGI ¥¹¥¯¥ê¥×¥È¤È SSI exec
- ¥³¥Þ¥ó¥É¤Ç»È¤ï¤ì¤ë¥ê¥½¡¼¥¹¤òÀ©¸æ¤·¤Þ¤¹¡£</p>
-
- <p><code class="directive"><a href="./mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code> ¤Ï Netware
- ¤Ç¤Î¤ß¡¢¥¹¥¿¥Ã¥¯¤ÎÂ礭¤µ¤òÀ©¸æ¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/server-wide.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/server-wide.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/server-wide.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/server-wide.html.ko.euc-kr b/docs/manual/server-wide.html.ko.euc-kr
deleted file mode 100644
index 05ae5ffb8e..0000000000
--- a/docs/manual/server-wide.html.ko.euc-kr
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¼­¹ö Àü¿ª ¼³Á¤ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¼­¹ö Àü¿ª ¼³Á¤</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/server-wide.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/server-wide.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/server-wide.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>ÀÌ ¹®¼­´Â <code class="module"><a href="./mod/core.html">core</a></code> ¼­¹ö°¡ ¼­¹öÀÇ ±âº» ÇൿÀ»
-¼³Á¤ÇϱâÀ§ÇØ Á¦°øÇÏ´Â Áö½Ã¾îÁß ÀϺθ¦ ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#identification">¼­¹ö ½Äº°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#locations">ÆÄÀÏ À§Ä¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#resource">ÀÚ¿ø»ç¿ë Á¦ÇÑ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="identification" id="identification">¼­¹ö ½Äº°</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code></li><li><code class="directive"><a href="./mod/core.html#serversignature">ServerSignature</a></code></li><li><code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code></li><li><code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code></li></ul></td></tr></table>
-
- <p><code class="directive"><a href="./mod/core.html#serveradmin">ServerAdmin</a></code>°ú
- <code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code> Áö½Ã¾î´Â
- ¿À·ù¹® µî ¼­¹ö°¡ »ý¼ºÇÏ´Â ¹®¼­¿¡ ³ª¿Ã ¼­¹ö¿¡ ´ëÇÑ Á¤º¸¸¦
- ¼³Á¤ÇÑ´Ù. <code class="directive"><a href="./mod/core.html#servertokens">ServerTokens</a></code>
- Áö½Ã¾î´Â ¼­¹ö HTTP ÀÀ´ä Çì´õ¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- <p>¼­¹ö´Â <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>°ú
- <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀÚ±âÂüÁ¶ URLÀ» ¸¸µç´Ù. ¿¹¸¦ µé¾î,
- Ŭ¶óÀ̾ðÆ®°¡ µð·ºÅ丮¸¦ ¿äûÇßÁö¸¸ µð·ºÅ丮¸í µÚ¿¡ ½½·¡½¬¸¦
- ºÙÀÌÁö¾ÊÀº °æ¿ì ¾ÆÆÄÄ¡´Â µÚ¿¡ ½½·¡½¬¸¦ ºÙÀÎ Àüü À̸§À»
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·ºÆ®ÇÏ¿©, Ŭ¶óÀ̾ðÆ®°¡ ¹®¼­ÀÇ »ó´ëÂüÁ¶¸¦
- ¿Ã¹Ù·Î ã°Ô ÇÑ´Ù.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="locations" id="locations">ÆÄÀÏ À§Ä¡</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#lockfile">LockFile</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code></li><li><code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code></li></ul></td></tr></table>
-
- <p>ÀÌ Áö½Ã¾îµéÀº ¾ÆÆÄÄ¡°¡ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ
- ¿©·¯ ÆÄÀϵéÀÇ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù. °æ·Î¸íÀÌ ½½·¡½¬(/)·Î ½ÃÀÛÇÏÁö
- ¾ÊÀ¸¸é, <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>¿¡
- »ó´ëÀûÀÎ ÆÄÀÏÀ» ã´Â´Ù. root°¡ ¾Æ´Ñ »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀÌ
- ÀÖ´Â °æ·Î¿¡ ÆÄÀÏÀ» µÎÁö¾Êµµ·Ï Á¶½ÉÇضó. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â
- <a href="misc/security_tips.html#serverroot">º¸¾È ÆÁ</a>
- ¹®¼­¸¦ Âü°íÇ϶ó.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="resource" id="resource">ÀÚ¿ø»ç¿ë Á¦ÇÑ</a></h2>
-
-
- <table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#limitrequestbody">LimitRequestBody</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestfields">LimitRequestFields</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestfieldsize">LimitRequestFieldsize</a></code></li><li><code class="directive"><a href="./mod/core.html#limitrequestline">LimitRequestLine</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitcpu">RLimitCPU</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitmem">RLimitMEM</a></code></li><li><code class="directive"><a href="./mod/core.html#rlimitnproc">RLimitNPROC</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code></li></ul></td></tr></table>
-
- <p><code class="directive">LimitRequest</code>* Áö½Ã¾î´Â ¾ÆÆÄÄ¡°¡
- Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ÀÐÀ» ¶§ »ç¿ëÇÒ ÀÚ¿ø·®À» Á¦ÇÑÇÑ´Ù. ÀÌ·±
- °ªµéÀ» Á¦ÇÑÇÏ¿© ¼­ºñ½º°ÅºÎ(denial of service)·ù °ø°ÝÀ»
- ÁÙÀÏ ¼ö ÀÖ´Ù.</p>
-
- <p><code class="directive">RLimit</code>* Áö½Ã¾î´Â ¾ÆÆÄÄ¡ ÀÚ½ÄÀÌ
- »ý¼ºÇÏ´Â ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ÀÚ¿ø·®À» Á¦ÇÑÇÑ´Ù. ƯÈ÷ CGI
- ½ºÅ©¸³Æ®³ª SSI exec ¸í·É¾î°¡ »ç¿ëÇÒ ÀÚ¿øÀ» Á¦ÇÑÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="./mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code>
- Áö½Ã¾î´Â ½ºÅà ũ±â¸¦ Á¶ÀýÇϱâÀ§ÇØ Netware¿¡¼­¸¸ »ç¿ëÇÑ´Ù.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/server-wide.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/server-wide.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/server-wide.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/server-wide.xml b/docs/manual/server-wide.xml
deleted file mode 100644
index 24a8c005e3..0000000000
--- a/docs/manual/server-wide.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.7 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="server-wide.xml.meta">
-
- <title>Server-Wide Configuration</title>
-
-<summary>
-<p>This document explains some of the directives provided by
-the <module>core</module> server which are used to configure
-the basic operations of the server.</p>
-</summary>
-
- <section id="identification">
- <title>Server Identification</title>
-
- <related>
- <directivelist>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerAdmin</directive>
- <directive module="core">ServerSignature</directive>
- <directive module="core">ServerTokens</directive>
- <directive module="core">UseCanonicalName</directive>
- </directivelist>
- </related>
-
- <p>The <directive module="core">ServerAdmin</directive> and
- <directive module="core">ServerTokens</directive> directives
- control what information about the server will be presented
- in server-generated documents such as error messages. The
- <directive module="core">ServerTokens</directive> directive
- sets the value of the Server HTTP response header field.</p>
-
- <p>The <directive module="core">ServerName</directive> and
- <directive module="core">UseCanonicalName</directive>
- directives are used by the server to determine how to construct
- self-referential URLs. For example, when a client requests a
- directory, but does not include the trailing slash in the
- directory name, Apache must redirect the client to the full
- name including the trailing slash so that the client will
- correctly resolve relative references in the document.</p>
- </section>
-
- <section id="locations">
- <title>File Locations</title>
-
- <related>
- <directivelist>
- <directive module="mpm_common">CoreDumpDirectory</directive>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">ErrorLog</directive>
- <directive module="mpm_common">LockFile</directive>
- <directive module="mpm_common">PidFile</directive>
- <directive module="mpm_common">ScoreBoardFile</directive>
- <directive module="core">ServerRoot</directive>
- </directivelist>
- </related>
-
- <p>These directives control the locations of the various files
- that Apache needs for proper operation. When the pathname used
- does not begin with a slash (/), the files are located relative
- to the <directive module="core">ServerRoot</directive>. Be careful
- about locating files in paths which are writable by non-root users.
- See the <a href="misc/security_tips.html#serverroot">security tips</a>
- documentation for more details.</p>
- </section>
-
- <section id="resource">
- <title>Limiting Resource Usage</title>
-
- <related>
- <directivelist>
- <directive module="core">LimitRequestBody</directive>
- <directive module="core">LimitRequestFields</directive>
- <directive module="core">LimitRequestFieldsize</directive>
- <directive module="core">LimitRequestLine</directive>
- <directive module="core">RLimitCPU</directive>
- <directive module="core">RLimitMEM</directive>
- <directive module="core">RLimitNPROC</directive>
- <directive module="mpm_common">ThreadStackSize</directive>
- </directivelist>
- </related>
-
- <p>The <directive>LimitRequest</directive>*
- directives are used to place limits on the amount of resources
- Apache will use in reading requests from clients. By limiting
- these values, some kinds of denial of service attacks can be
- mitigated.</p>
-
- <p>The <directive>RLimit</directive>* directives
- are used to limit the amount of resources which can be used by
- processes forked off from the Apache children. In particular,
- this will control resources used by CGI scripts and SSI exec
- commands.</p>
-
- <p>The <directive module="mpm_common">ThreadStackSize</directive>
- directive is used with some platforms to control the stack size.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/server-wide.xml.ja b/docs/manual/server-wide.xml.ja
deleted file mode 100644
index 4c7dae8998..0000000000
--- a/docs/manual/server-wide.xml.ja
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="server-wide.xml.meta">
-
- <title>$B%5!<%PA4BN$N@_Dj(B</title>
-
-<summary>
-<p>$B$3$N%I%-%e%a%s%H$G$O(B<module>core</module>
-$B%5!<%P$N%G%#%l%/%F%#%V$NCf$G!"(B
-$B4pK\F0:n$r@_Dj$9$k$?$a$N$b$N$r@bL@$7$^$9!#(B</p>
-</summary>
-
- <section id="identification">
- <title>$B%5!<%P(B ID</title>
-
- <related>
- <directivelist>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerAdmin</directive>
- <directive module="core">ServerSignature</directive>
- <directive module="core">ServerTokens</directive>
- <directive module="core">UseCanonicalName</directive>
- </directivelist>
- </related>
-
- <p><directive module="core">ServerAdmin</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="core">ServerTokens</directive>
- $B%G%#%l%/%F%#%V$O!"%(%i!<%a%C%;!<%8$J$I$N%5!<%P$,:n$k%I%-%e%a%s%H$K!"(B
- $B$I$N$h$&$J%5!<%P$N>pJs$rI=<($9$k$+$r@)8f$7$^$9!#(B
- <directive module="core">ServerTokens</directive> $B%G%#%l%/%F%#%V$O!"(BServer HTTP
- $B%l%9%]%s%9%X%C%@%U%#!<%k%I$NCM$r@_Dj$7$^$9!#(B</p>
-
- <p><directive module="core">ServerName</directive> $B%G%#%l%/%F%#%V$H(B
- <directive module="core">UseCanonicalName</directive>
- $B%G%#%l%/%F%#%V$O!"%5!<%P$,<+J,<+?H$r;2>H$9$k(B URL
- $B$r:n$k$H$-$K;H$o$l$^$9!#(B
- $B$?$H$($P!"%/%i%$%"%s%H$,%G%#%l%/%H%j$rMW5a$7$F!"(B
- $B$=$N%G%#%l%/%H%jL>$N:G8e$K%9%i%C%7%e$,IU$$$F$$$J$$$h$&$J>l9g$K$O!"(B
- $B%I%-%e%a%s%H$NAjBPE*$J;2>H$r@5$7$/2r7h$G$-$k$h$&$K$9$k$?$a$K!"(B
- Apache $B$O:G8e$N%9%i%C%7%e$r4^$s$@40A4$J%Q%9$K%/%i%$%"%s%H$r(B
- $B%j%@%$%l%/%H$5$;$kI,MW$,$"$j$^$9!#(B</p>
- </section>
-
- <section id="locations">
- <title>$B%U%!%$%k$N0LCV(B</title>
-
- <related>
- <directivelist>
- <directive module="mpm_common">CoreDumpDirectory</directive>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">ErrorLog</directive>
- <directive module="mpm_common">LockFile</directive>
- <directive module="mpm_common">PidFile</directive>
- <directive module="mpm_common">ScoreBoardFile</directive>
- <directive module="core">ServerRoot</directive>
- </directivelist>
- </related>
-
- <p>$B$3$l$i$N%G%#%l%/%F%#%V$O(B Apache
- $B$,E,@Z$JF0:n$r$9$k$?$a$KI,MW$J3F<o%U%!%$%k$N0LCV$r@)8f$7$^$9!#(B
- $B%Q%9$,%9%i%C%7%e(B (/) $B$G;O$^$C$F$$$J$$$H$-$O!"%U%!%$%k$O(B
- <directive module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$7$F(B
- $BC5$5$l$^$9!#(Broot
- $B0J30$N%f!<%6$,=q$-9~$_2DG=$J%Q%9$K%U%!%$%k$rCV$/>l9g$OCm0U$,I,MW$G$9!#(B
- $B>\:Y$O(B<a href="misc/security_tips.html#serverroot">$B!V%;%-%e%j%F%#>pJs!W(B</a>
- $B$r;2>H$7$F$/$@$5$$!#(B</p>
- </section>
-
- <section id="resource">
- <title>$B%j%=!<%9$N@)8B(B</title>
-
- <related>
- <directivelist>
- <directive module="core">LimitRequestBody</directive>
- <directive module="core">LimitRequestFields</directive>
- <directive module="core">LimitRequestFieldsize</directive>
- <directive module="core">LimitRequestLine</directive>
- <directive module="core">RLimitCPU</directive>
- <directive module="core">RLimitMEM</directive>
- <directive module="core">RLimitNPROC</directive>
- <directive module="mpm_common">ThreadStackSize</directive>
- </directivelist>
- </related>
-
- <p><directive>LimitRequest</directive>* $B%G%#%l%/%F%#%V$O(B Apache
- $B$,%/%i%$%"%s%H$+$i$N%j%/%(%9%HFI$_9~$_$G;H$&(B
- $B%j%=!<%9$r@)8B$9$k$?$a$K;H$o$l$^$9!#$3$l$i$NCM$r@)8B$9$k$3$H$G!"(B
- $B$$$/$D$+$N%5!<%S%95qH]967b$O1F6A$rOB$i$2$k$3$H$,$G$-$^$9!#(B</p>
-
- <p><directive>RLimit</directive>* $B%G%#%l%/%F%#%V$O!"(BApache $B$N;R%W%m%;%9$+$i(B
- fork $B$5$l$?%W%m%;%9$,;HMQ$9$k%j%=!<%9$r@)8B$9$k$?$a$K;H$o$l$^$9!#(B
- $BFC$K!"$3$l$O(B CGI $B%9%/%j%W%H$H(B SSI exec
- $B%3%^%s%I$G;H$o$l$k%j%=!<%9$r@)8f$7$^$9!#(B</p>
-
- <p><directive module="mpm_common">ThreadStackSize</directive> $B$O(B Netware
- $B$G$N$_!"%9%?%C%/$NBg$-$5$r@)8f$9$k$?$a$K;H$o$l$^$9!#(B</p>
- </section>
-</manualpage>
diff --git a/docs/manual/server-wide.xml.ko b/docs/manual/server-wide.xml.ko
deleted file mode 100644
index d3e2c0bd67..0000000000
--- a/docs/manual/server-wide.xml.ko
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.7 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="server-wide.xml.meta">
-
- <title>¼­¹ö Àü¿ª ¼³Á¤</title>
-
-<summary>
-<p>ÀÌ ¹®¼­´Â <module>core</module> ¼­¹ö°¡ ¼­¹öÀÇ ±âº» ÇൿÀ»
-¼³Á¤ÇϱâÀ§ÇØ Á¦°øÇÏ´Â Áö½Ã¾îÁß ÀϺθ¦ ¼³¸íÇÑ´Ù.</p>
-</summary>
-
- <section id="identification">
- <title>¼­¹ö ½Äº°</title>
-
- <related>
- <directivelist>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerAdmin</directive>
- <directive module="core">ServerSignature</directive>
- <directive module="core">ServerTokens</directive>
- <directive module="core">UseCanonicalName</directive>
- </directivelist>
- </related>
-
- <p><directive module="core">ServerAdmin</directive>°ú
- <directive module="core">ServerTokens</directive> Áö½Ã¾î´Â
- ¿À·ù¹® µî ¼­¹ö°¡ »ý¼ºÇÏ´Â ¹®¼­¿¡ ³ª¿Ã ¼­¹ö¿¡ ´ëÇÑ Á¤º¸¸¦
- ¼³Á¤ÇÑ´Ù. <directive module="core">ServerTokens</directive>
- Áö½Ã¾î´Â ¼­¹ö HTTP ÀÀ´ä Çì´õ¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- <p>¼­¹ö´Â <directive module="core">ServerName</directive>°ú
- <directive module="core">UseCanonicalName</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÀÚ±âÂüÁ¶ URLÀ» ¸¸µç´Ù. ¿¹¸¦ µé¾î,
- Ŭ¶óÀ̾ðÆ®°¡ µð·ºÅ丮¸¦ ¿äûÇßÁö¸¸ µð·ºÅ丮¸í µÚ¿¡ ½½·¡½¬¸¦
- ºÙÀÌÁö¾ÊÀº °æ¿ì ¾ÆÆÄÄ¡´Â µÚ¿¡ ½½·¡½¬¸¦ ºÙÀÎ Àüü À̸§À»
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸®´ÙÀÌ·ºÆ®ÇÏ¿©, Ŭ¶óÀ̾ðÆ®°¡ ¹®¼­ÀÇ »ó´ëÂüÁ¶¸¦
- ¿Ã¹Ù·Î ã°Ô ÇÑ´Ù.</p>
- </section>
-
- <section id="locations">
- <title>ÆÄÀÏ À§Ä¡</title>
-
- <related>
- <directivelist>
- <directive module="mpm_common">CoreDumpDirectory</directive>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">ErrorLog</directive>
- <directive module="mpm_common">LockFile</directive>
- <directive module="mpm_common">PidFile</directive>
- <directive module="mpm_common">ScoreBoardFile</directive>
- <directive module="core">ServerRoot</directive>
- </directivelist>
- </related>
-
- <p>ÀÌ Áö½Ã¾îµéÀº ¾ÆÆÄÄ¡°¡ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϱâÀ§ÇØ ÇÊ¿äÇÑ
- ¿©·¯ ÆÄÀϵéÀÇ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù. °æ·Î¸íÀÌ ½½·¡½¬(/)·Î ½ÃÀÛÇÏÁö
- ¾ÊÀ¸¸é, <directive module="core">ServerRoot</directive>¿¡
- »ó´ëÀûÀÎ ÆÄÀÏÀ» ã´Â´Ù. root°¡ ¾Æ´Ñ »ç¿ëÀÚ¿¡°Ô ¾²±â±ÇÇÑÀÌ
- ÀÖ´Â °æ·Î¿¡ ÆÄÀÏÀ» µÎÁö¾Êµµ·Ï Á¶½ÉÇضó. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â
- <a href="misc/security_tips.html#serverroot">º¸¾È ÆÁ</a>
- ¹®¼­¸¦ Âü°íÇ϶ó.</p>
- </section>
-
- <section id="resource">
- <title>ÀÚ¿ø»ç¿ë Á¦ÇÑ</title>
-
- <related>
- <directivelist>
- <directive module="core">LimitRequestBody</directive>
- <directive module="core">LimitRequestFields</directive>
- <directive module="core">LimitRequestFieldsize</directive>
- <directive module="core">LimitRequestLine</directive>
- <directive module="core">RLimitCPU</directive>
- <directive module="core">RLimitMEM</directive>
- <directive module="core">RLimitNPROC</directive>
- <directive module="mpm_common">ThreadStackSize</directive>
- </directivelist>
- </related>
-
- <p><directive>LimitRequest</directive>* Áö½Ã¾î´Â ¾ÆÆÄÄ¡°¡
- Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ÀÐÀ» ¶§ »ç¿ëÇÒ ÀÚ¿ø·®À» Á¦ÇÑÇÑ´Ù. ÀÌ·±
- °ªµéÀ» Á¦ÇÑÇÏ¿© ¼­ºñ½º°ÅºÎ(denial of service)·ù °ø°ÝÀ»
- ÁÙÀÏ ¼ö ÀÖ´Ù.</p>
-
- <p><directive>RLimit</directive>* Áö½Ã¾î´Â ¾ÆÆÄÄ¡ ÀÚ½ÄÀÌ
- »ý¼ºÇÏ´Â ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ÀÚ¿ø·®À» Á¦ÇÑÇÑ´Ù. ƯÈ÷ CGI
- ½ºÅ©¸³Æ®³ª SSI exec ¸í·É¾î°¡ »ç¿ëÇÒ ÀÚ¿øÀ» Á¦ÇÑÇÑ´Ù.</p>
-
- <p><directive module="mpm_common">ThreadStackSize</directive>
- Áö½Ã¾î´Â ½ºÅà ũ±â¸¦ Á¶ÀýÇϱâÀ§ÇØ Netware¿¡¼­¸¸ »ç¿ëÇÑ´Ù.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/server-wide.xml.meta b/docs/manual/server-wide.xml.meta
deleted file mode 100644
index 2c1fe78d4a..0000000000
--- a/docs/manual/server-wide.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>server-wide</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/sitemap.html b/docs/manual/sitemap.html
deleted file mode 100644
index 84947e10e6..0000000000
--- a/docs/manual/sitemap.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: sitemap.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: sitemap.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: sitemap.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: sitemap.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: sitemap.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/sitemap.html.de b/docs/manual/sitemap.html.de
deleted file mode 100644
index 812d800ccc..0000000000
--- a/docs/manual/sitemap.html.de
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Seitenindex - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div>
-<div id="page-content"><div id="preamble"><h1>Seitenindex</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/sitemap.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Diese Seite verzeichnet die zur Zeit verfügbaren Dokumente der
-<a href="./">Dokumentation zum Apache HTTP Server Version 2.1</a>.</p>
-</div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="./images/down.gif" /> <a href="#release">Hinweise zur Version</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Bedienung des Apache HTTP Servers</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">Apache-Dokumentation zu virtuellen Hosts</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#faq">Häufig gestellte Fragen (FAQ)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ssl">SSL/TLS-Verschlüsselung des Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#howto">Praxis / Anleitungen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#platform">Plattform-spezifische Anmerkungen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programs">Apache HTTP Server und Hilfsprogramme</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Weitere Apache-Dokumentationen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">Apache-Module</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#developer">Dokumentation für Entwickler</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#index">Glossar und Index</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="release" id="release">Hinweise zur Version</a></h2>
-<ul><li><a href="upgrading.html">Upgrade von 1.3 auf 2.0</a></li>
-<li><a href="new_features_2_0.html">Neue Funktionen in Version 2.0</a></li>
-<li><a href="license.html">Apache-Lizenz</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="using" id="using">Bedienung des Apache HTTP Servers</a></h2>
-<ul><li><a href="install.html">Kompilieren und Installieren</a></li>
-<li><a href="invoking.html">Apache starten</a></li>
-<li><a href="stopping.html">Beenden und Neustarten des Servers</a></li>
-<li><a href="configuring.html">Konfigurationsdateien</a></li>
-<li><a href="sections.html">Konfigurationsabschnitte</a></li>
-<li><a href="server-wide.html">Serverweite Konfiguration</a></li>
-<li><a href="logs.html">Log-Dateien</a></li>
-<li><a href="urlmapping.html">URLs auf das Dateisystem abbilden</a></li>
-<li><a href="misc/security_tips.html">Tipps zur Sicherheit</a></li>
-<li><a href="dso.html">Dynamic Shared Object (DSO)</a></li>
-<li><a href="content-negotiation.html">Content Negotiation</a></li>
-<li><a href="custom-error.html">Individuelle Fehlermeldungen</a></li>
-<li><a href="bind.html">Bestimmen der vom Apache verwendeten Adressen und Ports</a></li>
-<li><a href="mpm.html">Multi-Processing-Module (MPMs)</a></li>
-<li><a href="env.html">Umgebungsvariablen</a></li>
-<li><a href="handler.html">Handler</a></li>
-<li><a href="filter.html">Filter</a></li>
-<li><a href="suexec.html">suEXEC Unterstützung</a></li>
-<li><a href="misc/perf-tuning.html">Performance-Hinweise</a></li>
-<li><a href="misc/rewriteguide.html">Einführung in die URL-Manipulation</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="vhosts" id="vhosts">Apache-Dokumentation zu virtuellen Hosts</a></h2>
-<ul><li class="separate"><a href="vhosts/">Übersicht</a></li>
-<li><a href="vhosts/name-based.html">Namensbasierte virtuelle Hosts</a></li>
-<li><a href="vhosts/ip-based.html">IP-basierte virtuelle Hosts</a></li>
-<li><a href="vhosts/mass.html">Dynamisch konfiguriertes Massen-Virtual-Hosting</a></li>
-<li><a href="vhosts/examples.html">Beispiele für virtuelle Hosts in
- typischen Installationen</a></li>
-<li><a href="vhosts/details.html">Tiefergehende Erörterung der Zuweisung
- virtueller Hosts</a></li>
-<li><a href="vhosts/fd-limits.html">Datei-Deskriptor-Begrenzungen</a></li>
-<li><a href="dns-caveats.html">Probleme bezüglich DNS und Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="faq" id="faq">Häufig gestellte Fragen (FAQ)</a></h2>
-<ul><li><a href="faq/">Übersicht</a></li>
-<li><a href="faq/support.html">Support</a></li>
-<li><a href="faq/error.html">Fehlermeldungen</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="ssl" id="ssl">SSL/TLS-Verschlüsselung des Apache</a></h2>
-<ul><li class="separate"><a href="ssl/">Übersicht</a></li>
-<li><a href="ssl/ssl_intro.html">SSL/TLS-Verschlüsselung: Einführung</a></li>
-<li><a href="ssl/ssl_compat.html">SSL/TLS-Verschlüsselung: Kompatibilität</a></li>
-<li><a href="ssl/ssl_howto.html">SSL/TLS-Verschlüsselung: Praxis</a></li>
-<li><a href="ssl/ssl_faq.html">SSL/TLS-Verschlüsselung: FAQ</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="howto" id="howto">Praxis / Anleitungen</a></h2>
-<ul><li class="separate"><a href="howto/">Übersicht</a></li>
-<li><a href="howto/auth.html">Authentisierung, Autorisierung und Zugriffskontrolle</a></li>
-<li><a href="howto/cgi.html">Dynamische Inhalte mit CGI</a></li>
-<li><a href="howto/ssi.html">Einführung in Server Side Includes</a></li>
-<li><a href="howto/htaccess.html">.htaccess-Dateien</a></li>
-<li><a href="howto/public_html.html">Web-Verzeichnisse für Benutzer</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="platform" id="platform">Plattform-spezifische Anmerkungen</a></h2>
-<ul><li class="separate"><a href="platform/">Übersicht</a></li>
-<li><a href="platform/windows.html">Apache unter Microsoft
-Windows einsetzen</a></li>
-<li><a href="platform/win_compiling.html">Kompilieren des Apache für
-Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Apache unter Novell NetWare einsetzen</a></li>
-<li><a href="platform/perf-hp.html">Einen Hochleistungs-Web-Server auf
-HPUX betreiben</a></li>
-<li><a href="platform/ebcdic.html">Die Apache EBCDIC-Portierung</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="programs" id="programs">Apache HTTP Server und Hilfsprogramme</a></h2>
-<ul><li class="separate"><a href="programs/">Übersicht</a></li>
-<li><a href="programs/httpd.html">httpd</a></li>
-<li><a href="programs/ab.html">ab</a></li>
-<li><a href="programs/apachectl.html">apachectl</a></li>
-<li><a href="programs/apxs.html">apxs</a></li>
-<li><a href="programs/configure.html">configure</a></li>
-<li><a href="programs/dbmmanage.html">dbmmanage</a></li>
-<li><a href="programs/htdigest.html">htdigest</a></li>
-<li><a href="programs/htpasswd.html">htpasswd</a></li>
-<li><a href="programs/logresolve.html">logresolve</a></li>
-<li><a href="programs/rotatelogs.html">rotatelogs</a></li>
-<li><a href="programs/suexec.html">suexec</a></li>
-<li><a href="programs/other.html">Sonstige Programme</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="misc" id="misc">Weitere Apache-Dokumentationen</a></h2>
-<ul><li class="separate"><a href="misc/">Übersicht</a></li>
-<li><a href="cgi_path.html">PATH_INFO-Änderungen in der CGI-Umgebung</a></li>
-<li><a href="misc/relevant_standards.html">Wichtige Standards</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="modules" id="modules">Apache-Module</a></h2>
-<ul><li><a href="mod/module-dict.html">Erklärung der Fachbegriffe zu Apache-Modulen</a></li>
-<li><a href="mod/directive-dict.html">Erklärung der Fachbegriffe zu Apache-Direktiven</a></li>
-</ul><ul><li><a href="mod/core.html">Apache-Kernfunktionen</a></li>
-<li><a href="mod/mpm_common.html">Allgemeine Direktiven der Apache-MPMs</a></li>
-<li><a href="mod/beos.html">Apache-MPM beos</a></li>
-<li><a href="mod/leader.html">Apache-MPM leader</a></li>
-<li><a href="mod/mpm_netware.html">Apache-MPM netware</a></li>
-<li><a href="mod/mpmt_os2.html">Apache-MPM os2</a></li>
-<li><a href="mod/perchild.html">Apache-MPM perchild</a></li>
-<li><a href="mod/prefork.html">Apache-MPM prefork</a></li>
-<li><a href="mod/threadpool.html">Apache-MPM threadpool</a></li>
-<li><a href="mod/mpm_winnt.html">Apache-MPM winnt</a></li>
-<li><a href="mod/worker.html">Apache-MPM worker</a></li>
-</ul><ul><li><a href="mod/mod_actions.html">Apache-Modul mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Apache-Modul mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Apache-Modul mod_asis</a></li>
-<li><a href="mod/mod_auth_basic.html">Apache-Modul mod_auth_basic</a></li>
-<li><a href="mod/mod_auth_digest.html">Apache-Modul mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">Apache-Modul mod_auth_ldap</a></li>
-<li><a href="mod/mod_authn_anon.html">Apache-Modul mod_authn_anon</a></li>
-<li><a href="mod/mod_authn_dbm.html">Apache-Modul mod_authn_dbm</a></li>
-<li><a href="mod/mod_authn_default.html">Apache-Modul mod_authn_default</a></li>
-<li><a href="mod/mod_authn_file.html">Apache-Modul mod_authn_file</a></li>
-<li><a href="mod/mod_authz_dbm.html">Apache-Modul mod_authz_dbm</a></li>
-<li><a href="mod/mod_authz_default.html">Apache-Modul mod_authz_default</a></li>
-<li><a href="mod/mod_authz_groupfile.html">Apache-Modul mod_authz_groupfile</a></li>
-<li><a href="mod/mod_authz_host.html">Apache-Modul mod_authz_host</a></li>
-<li><a href="mod/mod_authz_owner.html">Apache-Modul mod_authz_owner</a></li>
-<li><a href="mod/mod_authz_user.html">Apache-Modul mod_authz_user</a></li>
-<li><a href="mod/mod_autoindex.html">Apache-Modul mod_autoindex</a></li>
-<li><a href="mod/mod_cache.html">Apache-Modul mod_cache</a></li>
-<li><a href="mod/mod_cern_meta.html">Apache-Modul mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Apache-Modul mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Apache-Modul mod_cgid</a></li>
-<li><a href="mod/mod_charset_lite.html">Apache-Modul mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Apache-Modul mod_dav</a></li>
-<li><a href="mod/mod_dav_fs.html">Apache-Modul mod_dav_fs</a></li>
-<li><a href="mod/mod_dav_lock.html">Apache-Modul mod_dav_lock</a></li>
-<li><a href="mod/mod_deflate.html">Apache-Modul mod_deflate</a></li>
-<li><a href="mod/mod_dir.html">Apache-Modul mod_dir</a></li>
-<li><a href="mod/mod_disk_cache.html">Apache-Modul mod_disk_cache</a></li>
-<li><a href="mod/mod_echo.html">Apache-Modul mod_echo</a></li>
-<li><a href="mod/mod_env.html">Apache-Modul mod_env</a></li>
-<li><a href="mod/mod_example.html">Apache-Modul mod_example</a></li>
-<li><a href="mod/mod_expires.html">Apache-Modul mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Apache-Modul mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Apache-Modul mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">Apache-Modul mod_headers</a></li>
-<li><a href="mod/mod_ident.html">Apache-Modul mod_ident</a></li>
-<li><a href="mod/mod_imap.html">Apache-Modul mod_imap</a></li>
-<li><a href="mod/mod_include.html">Apache-Modul mod_include</a></li>
-<li><a href="mod/mod_info.html">Apache-Modul mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Apache-Modul mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">Apache-Modul mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Apache-Modul mod_log_config</a></li>
-<li><a href="mod/mod_log_forensic.html">Apache-Modul mod_log_forensic</a></li>
-<li><a href="mod/mod_logio.html">Apache-Modul mod_logio</a></li>
-<li><a href="mod/mod_mem_cache.html">Apache-Modul mod_mem_cache</a></li>
-<li><a href="mod/mod_mime.html">Apache-Modul mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Apache-Modul mod_mime_magic</a></li>
-<li><a href="mod/mod_negotiation.html">Apache-Modul mod_negotiation</a></li>
-<li><a href="mod/mod_nw_ssl.html">Apache-Modul mod_nw_ssl</a></li>
-<li><a href="mod/mod_proxy.html">Apache-Modul mod_proxy</a></li>
-<li><a href="mod/mod_proxy_connect.html">Apache-Modul mod_proxy_connect</a></li>
-<li><a href="mod/mod_proxy_ftp.html">Apache-Modul mod_proxy_ftp</a></li>
-<li><a href="mod/mod_proxy_http.html">Apache-Modul mod_proxy_http</a></li>
-<li><a href="mod/mod_rewrite.html">Apache-Modul mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">Apache-Modul mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">Apache-Modul mod_so</a></li>
-<li><a href="mod/mod_speling.html">Apache-Modul mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Apache-Modul mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Apache-Modul mod_status</a></li>
-<li><a href="mod/mod_suexec.html">Apache-Modul mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Apache-Modul mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">Apache-Modul mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Apache-Modul mod_usertrack</a></li>
-<li><a href="mod/mod_version.html">Apache-Modul mod_version</a></li>
-<li><a href="mod/mod_vhost_alias.html">Apache-Modul mod_vhost_alias</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="developer" id="developer">Dokumentation für Entwickler</a></h2>
-<ul><li class="separate"><a href="developer/">Übersicht</a></li>
-<li><a href="developer/API.html">Anmerkungen zur Apache-API</a></li>
-<li><a href="developer/debugging.html">Debuggen der Speicher-Belegung in der APR </a></li>
-<li><a href="developer/documenting.html">Apache 2.0 dokumentieren</a></li>
-<li><a href="developer/hooks.html">Hook-Funktionen des Apache 2.0 </a></li>
-<li><a href="developer/modules.html">Module von Apache 1.3 nach Apache 2.0 konvertieren</a></li>
-<li><a href="developer/request.html">Verarbeitung der Anfragen im Apache 2.0</a></li>
-<li><a href="developer/filters.html">Wie Filter im Apache 2.0 arbeiten</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="index" id="index">Glossar und Index</a></h2>
-<ul><li><a href="glossary.html">Glossar</a></li>
-<li><a href="mod/">Modul-Index</a></li>
-<li><a href="mod/directives.html">Direktiven-Index</a></li>
-<li><a href="mod/quickreference.html">Kurzreferenz der Direktiven</a></li>
-</ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/sitemap.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sitemap.html.en b/docs/manual/sitemap.html.en
deleted file mode 100644
index 4007cee46d..0000000000
--- a/docs/manual/sitemap.html.en
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Sitemap - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div>
-<div id="page-content"><div id="preamble"><h1>Sitemap</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>This page lists the currently available documents of the
-<a href="./">Apache HTTP Server Version 2.1 Documentation</a>.</p>
-</div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="./images/down.gif" /> <a href="#release">Release Notes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Using the Apache HTTP Server</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">Apache Virtual Host documentation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#faq">Apache Server Frequently Asked Questions</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ssl">Apache SSL/TLS Encryption</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#howto">Guides, Tutorials, and HowTos</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#platform">Platform-specific Notes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programs">Apache HTTP Server and Supporting Programs</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Apache Miscellaneous Documentation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">Apache modules</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#developer">Developer Documentation</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#index">Glossary and Index</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="release" id="release">Release Notes</a></h2>
-<ul><li><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></li>
-<li><a href="new_features_2_0.html">New features with Apache 2.0</a></li>
-<li><a href="license.html">Apache License</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="using" id="using">Using the Apache HTTP Server</a></h2>
-<ul><li><a href="install.html">Compiling and Installing Apache</a></li>
-<li><a href="invoking.html">Starting Apache</a></li>
-<li><a href="stopping.html">Stopping and Restarting the Server</a></li>
-<li><a href="configuring.html">Configuration Files</a></li>
-<li><a href="sections.html">How Directory, Location and Files sections work</a></li>
-<li><a href="server-wide.html">Server-Wide Configuration</a></li>
-<li><a href="logs.html">Log Files</a></li>
-<li><a href="urlmapping.html">Mapping URLs to Filesystem Locations</a></li>
-<li><a href="misc/security_tips.html">Security Tips</a></li>
-<li><a href="dso.html">Dynamic Shared Object (DSO) support</a></li>
-<li><a href="content-negotiation.html">Content Negotiation</a></li>
-<li><a href="custom-error.html">Custom error responses</a></li>
-<li><a href="bind.html">Setting which addresses and ports Apache uses</a></li>
-<li><a href="mpm.html">Multi-Processing Modules (MPMs)</a></li>
-<li><a href="env.html">Environment Variables in Apache</a></li>
-<li><a href="handler.html">Apache's Handler Use</a></li>
-<li><a href="filter.html">Filters</a></li>
-<li><a href="suexec.html">suEXEC Support</a></li>
-<li><a href="misc/perf-tuning.html">Performance Hints</a></li>
-<li><a href="misc/rewriteguide.html">URL Rewriting Guide</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="vhosts" id="vhosts">Apache Virtual Host documentation</a></h2>
-<ul><li class="separate"><a href="vhosts/">Overview</a></li>
-<li><a href="vhosts/name-based.html">Name-based Virtual Hosts</a></li>
-<li><a href="vhosts/ip-based.html">IP-based Virtual Host Support</a></li>
-<li><a href="vhosts/mass.html">Dynamically configured mass virtual hosting</a></li>
-<li><a href="vhosts/examples.html">VirtualHost Examples</a></li>
-<li><a href="vhosts/details.html">An In-Depth Discussion of Virtual Host Matching</a></li>
-<li><a href="vhosts/fd-limits.html">File descriptor limitations</a></li>
-<li><a href="dns-caveats.html">Issues Regarding DNS and Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="faq" id="faq">Apache Server Frequently Asked Questions</a></h2>
-<ul><li><a href="faq/">Overview</a></li>
-<li><a href="faq/support.html">Support</a></li>
-<li><a href="faq/error.html">Error Messages</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="ssl" id="ssl">Apache SSL/TLS Encryption</a></h2>
-<ul><li class="separate"><a href="ssl/">Overview</a></li>
-<li><a href="ssl/ssl_intro.html">SSL/TLS Encryption: An Introduction</a></li>
-<li><a href="ssl/ssl_compat.html">SSL/TLS Encryption: Compatibility</a></li>
-<li><a href="ssl/ssl_howto.html">SSL/TLS Encryption: How-To</a></li>
-<li><a href="ssl/ssl_faq.html">SSL/TLS Encryption: FAQ</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="howto" id="howto">Guides, Tutorials, and HowTos</a></h2>
-<ul><li class="separate"><a href="howto/">Overview</a></li>
-<li><a href="howto/auth.html">Authentication</a></li>
-<li><a href="howto/cgi.html">Dynamic Content with CGI</a></li>
-<li><a href="howto/ssi.html">Introduction to Server Side Includes</a></li>
-<li><a href="howto/htaccess.html">.htaccess files</a></li>
-<li><a href="howto/public_html.html">Per-user web directories</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="platform" id="platform">Platform-specific Notes</a></h2>
-<ul><li class="separate"><a href="platform/">Overview</a></li>
-<li><a href="platform/windows.html">Using Apache with Microsoft
-Windows</a></li>
-<li><a href="platform/win_compiling.html">Compiling Apache for
-Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Using Apache with Novell NetWare</a></li>
-<li><a href="platform/perf-hp.html">Running a High-Performance Web
-Server on HPUX</a></li>
-<li><a href="platform/ebcdic.html">The Apache EBCDIC Port</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="programs" id="programs">Apache HTTP Server and Supporting Programs</a></h2>
-<ul><li class="separate"><a href="programs/">Overview</a></li>
-<li><a href="programs/httpd.html">Manual Page: httpd</a></li>
-<li><a href="programs/ab.html">Manual Page: ab</a></li>
-<li><a href="programs/apachectl.html">Manual Page: apachectl</a></li>
-<li><a href="programs/apxs.html">Manual Page: apxs</a></li>
-<li><a href="programs/configure.html">Manual Page: configure</a></li>
-<li><a href="programs/dbmmanage.html">Manual Page: dbmmanage</a></li>
-<li><a href="programs/htdigest.html">Manual Page: htdigest</a></li>
-<li><a href="programs/htpasswd.html">Manual Page: htpasswd</a></li>
-<li><a href="programs/logresolve.html">Manual Page: logresolve</a></li>
-<li><a href="programs/rotatelogs.html">Manual Page: rotatelogs</a></li>
-<li><a href="programs/suexec.html">Manual Page: suexec</a></li>
-<li><a href="programs/other.html">Other Programs</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="misc" id="misc">Apache Miscellaneous Documentation</a></h2>
-<ul><li class="separate"><a href="misc/">Overview</a></li>
-<li><a href="cgi_path.html">PATH_INFO Changes in the CGI Environment</a></li>
-<li><a href="misc/relevant_standards.html">Relevant Standards</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="modules" id="modules">Apache modules</a></h2>
-<ul><li><a href="mod/module-dict.html">Definitions of terms used to describe Apache modules</a></li>
-<li><a href="mod/directive-dict.html">Definitions of terms used to describe Apache directives</a></li>
-</ul><ul><li><a href="mod/core.html">Apache Core Features</a></li>
-<li><a href="mod/mpm_common.html">Apache MPM Common Directives</a></li>
-<li><a href="mod/beos.html">Apache MPM beos</a></li>
-<li><a href="mod/leader.html">Apache MPM leader</a></li>
-<li><a href="mod/mpm_netware.html">Apache MPM netware</a></li>
-<li><a href="mod/mpmt_os2.html">Apache MPM os2</a></li>
-<li><a href="mod/perchild.html">Apache MPM perchild</a></li>
-<li><a href="mod/prefork.html">Apache MPM prefork</a></li>
-<li><a href="mod/threadpool.html">Apache MPM threadpool</a></li>
-<li><a href="mod/mpm_winnt.html">Apache MPM winnt</a></li>
-<li><a href="mod/worker.html">Apache MPM worker</a></li>
-</ul><ul><li><a href="mod/mod_actions.html">Apache Module mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Apache Module mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Apache Module mod_asis</a></li>
-<li><a href="mod/mod_auth_basic.html">Apache Module mod_auth_basic</a></li>
-<li><a href="mod/mod_auth_digest.html">Apache Module mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">Apache Module mod_auth_ldap</a></li>
-<li><a href="mod/mod_authn_anon.html">Apache Module mod_authn_anon</a></li>
-<li><a href="mod/mod_authn_dbm.html">Apache Module mod_authn_dbm</a></li>
-<li><a href="mod/mod_authn_default.html">Apache Module mod_authn_default</a></li>
-<li><a href="mod/mod_authn_file.html">Apache Module mod_authn_file</a></li>
-<li><a href="mod/mod_authz_dbm.html">Apache Module mod_authz_dbm</a></li>
-<li><a href="mod/mod_authz_default.html">Apache Module mod_authz_default</a></li>
-<li><a href="mod/mod_authz_groupfile.html">Apache Module mod_authz_groupfile</a></li>
-<li><a href="mod/mod_authz_host.html">Apache Module mod_authz_host</a></li>
-<li><a href="mod/mod_authz_owner.html">Apache Module mod_authz_owner</a></li>
-<li><a href="mod/mod_authz_user.html">Apache Module mod_authz_user</a></li>
-<li><a href="mod/mod_autoindex.html">Apache Module mod_autoindex</a></li>
-<li><a href="mod/mod_cache.html">Apache Module mod_cache</a></li>
-<li><a href="mod/mod_cern_meta.html">Apache Module mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Apache Module mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Apache Module mod_cgid</a></li>
-<li><a href="mod/mod_charset_lite.html">Apache Module mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Apache Module mod_dav</a></li>
-<li><a href="mod/mod_dav_fs.html">Apache Module mod_dav_fs</a></li>
-<li><a href="mod/mod_dav_lock.html">Apache Module mod_dav_lock</a></li>
-<li><a href="mod/mod_deflate.html">Apache Module mod_deflate</a></li>
-<li><a href="mod/mod_dir.html">Apache Module mod_dir</a></li>
-<li><a href="mod/mod_disk_cache.html">Apache Module mod_disk_cache</a></li>
-<li><a href="mod/mod_echo.html">Apache Module mod_echo</a></li>
-<li><a href="mod/mod_env.html">Apache Module mod_env</a></li>
-<li><a href="mod/mod_example.html">Apache Module mod_example</a></li>
-<li><a href="mod/mod_expires.html">Apache Module mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Apache Module mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Apache Module mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">Apache Module mod_headers</a></li>
-<li><a href="mod/mod_ident.html">Apache Module mod_ident</a></li>
-<li><a href="mod/mod_imap.html">Apache Module mod_imap</a></li>
-<li><a href="mod/mod_include.html">Apache Module mod_include</a></li>
-<li><a href="mod/mod_info.html">Apache Module mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Apache Module mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">Apache Module mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Apache Module mod_log_config</a></li>
-<li><a href="mod/mod_log_forensic.html">Apache Module mod_log_forensic</a></li>
-<li><a href="mod/mod_logio.html">Apache Module mod_logio</a></li>
-<li><a href="mod/mod_mem_cache.html">Apache Module mod_mem_cache</a></li>
-<li><a href="mod/mod_mime.html">Apache Module mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Apache Module mod_mime_magic</a></li>
-<li><a href="mod/mod_negotiation.html">Apache Module mod_negotiation</a></li>
-<li><a href="mod/mod_nw_ssl.html">Apache Module mod_nw_ssl</a></li>
-<li><a href="mod/mod_proxy.html">Apache Module mod_proxy</a></li>
-<li><a href="mod/mod_proxy_connect.html">Apache Module mod_proxy_connect</a></li>
-<li><a href="mod/mod_proxy_ftp.html">Apache Module mod_proxy_ftp</a></li>
-<li><a href="mod/mod_proxy_http.html">Apache Module mod_proxy_http</a></li>
-<li><a href="mod/mod_rewrite.html">Apache Module mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">Apache Module mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">Apache Module mod_so</a></li>
-<li><a href="mod/mod_speling.html">Apache Module mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Apache Module mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Apache Module mod_status</a></li>
-<li><a href="mod/mod_suexec.html">Apache Module mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Apache Module mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">Apache Module mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Apache Module mod_usertrack</a></li>
-<li><a href="mod/mod_version.html">Apache Module mod_version</a></li>
-<li><a href="mod/mod_vhost_alias.html">Apache Module mod_vhost_alias</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="developer" id="developer">Developer Documentation</a></h2>
-<ul><li class="separate"><a href="developer/">Overview</a></li>
-<li><a href="developer/API.html">Apache API notes</a></li>
-<li><a href="developer/debugging.html">Debugging Memory Allocation in APR</a></li>
-<li><a href="developer/documenting.html">Documenting Apache 2.0</a></li>
-<li><a href="developer/hooks.html">Apache 2.0 Hook Functions</a></li>
-<li><a href="developer/modules.html">Converting Modules from Apache 1.3 to Apache 2.0</a></li>
-<li><a href="developer/request.html">Request Processing in Apache 2.0</a></li>
-<li><a href="developer/filters.html">How Filters Work in Apache 2.0</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="index" id="index">Glossary and Index</a></h2>
-<ul><li><a href="glossary.html">Glossary</a></li>
-<li><a href="mod/">Module index</a></li>
-<li><a href="mod/directives.html">Directive index</a></li>
-<li><a href="mod/quickreference.html">Directive Quick-Reference</a></li>
-</ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sitemap.html.es b/docs/manual/sitemap.html.es
deleted file mode 100644
index 2a84a3f0be..0000000000
--- a/docs/manual/sitemap.html.es
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Mapa de este sitio web - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div>
-<div id="page-content"><div id="preamble"><h1>Mapa de este sitio web</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>Esta página contiene la lista con los documentos actualmente
-disponibles de la <a href="./">Versión 2.1 de la Documentación del
-Servidor HTTP Apache</a>.</p>
-</div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="./images/down.gif" /> <a href="#release">Notas de la Versión</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Funcionamiento del Servidor HTTP Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">Documuentación sobre Hosting Virtual en Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#faq">Preguntas Más Frecuentes sobre Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ssl">Encriptado SSL/TLS con Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#howto">Guías, Tutoriales, y HowTos</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#platform">Notas específicas sobre plataformas</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programs">Programas de soporte y el Servidor HTTP Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Documentación adicional sobre Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">Módulos de Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#developer">Documentación para desarrolladores</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#index">Glosario e Índice</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="release" id="release">Notas de la Versión</a></h2>
-<ul><li><a href="upgrading.html">Pasar a usar Apache 2.0 desde Apache 1.3</a></li>
-<li><a href="new_features_2_0.html">Nuevas funcionalidades de Apache 2.0</a></li>
-<li><a href="license.html">Licencia Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="using" id="using">Funcionamiento del Servidor HTTP Apache</a></h2>
-<ul><li><a href="install.html">Compilación e Instalación de Apache</a></li>
-<li><a href="invoking.html">Iniciar Apache</a></li>
-<li><a href="stopping.html">Parar y reiniciar Apache</a></li>
-<li><a href="configuring.html">Ficheros de Configuración</a></li>
-<li><a href="sections.html">Funcionamiento de las secciones Directory, Location y Files</a></li>
-<li><a href="server-wide.html">Configuración Básica de Apache</a></li>
-<li><a href="logs.html">Archivos Log</a></li>
-<li><a href="urlmapping.html">Mapear URLs a ubicaciones de un sistema de ficheros</a></li>
-<li><a href="misc/security_tips.html">Consejos de Seguridad</a></li>
-<li><a href="dso.html">Soporte de Objetos Dinámicos Compartidos (DSO)</a></li>
-<li><a href="content-negotiation.html">Negociación de Contenido</a></li>
-<li><a href="custom-error.html">Mensajes de Error Personalizados</a></li>
-<li><a href="bind.html">Fijar las direcciones y los puertos que usa Apache</a></li>
-<li><a href="mpm.html">Módulos de Multiproceso (MPMs)</a></li>
-<li><a href="env.html">Variables de entorno en Apache</a></li>
-<li><a href="handler.html">El uso de Handlers en Apache</a></li>
-<li><a href="filter.html">Filtros</a></li>
-<li><a href="suexec.html">Soporte de suEXEC</a></li>
-<li><a href="misc/perf-tuning.html">Rendimiento del servidor</a></li>
-<li><a href="misc/rewriteguide.html">Documentación adicional sobre mod_rewrite</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="vhosts" id="vhosts">Documuentación sobre Hosting Virtual en Apache</a></h2>
-<ul><li class="separate"><a href="vhosts/">Visión General</a></li>
-<li><a href="vhosts/name-based.html">Hosting Virtual basado en nombres</a></li>
-<li><a href="vhosts/ip-based.html">Soporte de Hosting Virtual Basado en IPs</a></li>
-<li><a href="vhosts/mass.html">Configurar de forma Dinámica el Hosting Virtual masivo en Apache</a></li>
-<li><a href="vhosts/examples.html">Ejemplos de Hosting Virtual</a></li>
-<li><a href="vhosts/details.html">Discusión en profundidad sobre los tipos de Hosting Virtual</a></li>
-<li><a href="vhosts/fd-limits.html">Limitaciones de los descriptores de ficheros</a></li>
-<li><a href="dns-caveats.html">Asuntos relacionados con DNS y Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="faq" id="faq">Preguntas Más Frecuentes sobre Apache</a></h2>
-<ul><li><a href="faq/">Visión General</a></li>
-<li><a href="faq/support.html">Soporte</a></li>
-<li><a href="faq/error.html">Mensajes de error</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="ssl" id="ssl">Encriptado SSL/TLS con Apache</a></h2>
-<ul><li class="separate"><a href="ssl/">Visión General</a></li>
-<li><a href="ssl/ssl_intro.html">Encriptado SSL/TLS: Introducción</a></li>
-<li><a href="ssl/ssl_compat.html">Encriptado SSL/TLS: Compatibilidad</a></li>
-<li><a href="ssl/ssl_howto.html">Encriptado SSL/TLS: How-To</a></li>
-<li><a href="ssl/ssl_faq.html">Encriptado SSL/TLS: Preguntas Frecuentes</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="howto" id="howto">Guías, Tutoriales, y HowTos</a></h2>
-<ul><li class="separate"><a href="howto/">Visión General</a></li>
-<li><a href="howto/auth.html">Autentificación</a></li>
-<li><a href="howto/cgi.html">Contenido Dinámico con CGIs</a></li>
-<li><a href="howto/ssi.html">Introducción a Server Side Includes</a></li>
-<li><a href="howto/htaccess.html">Archivos .htaccess</a></li>
-<li><a href="howto/public_html.html">Directorios web para cada usuario</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="platform" id="platform">Notas específicas sobre plataformas</a></h2>
-<ul><li class="separate"><a href="platform/">Visión General</a></li>
-<li><a href="platform/windows.html">Usar Apache con Microsoft Windows</a></li>
-<li><a href="platform/win_compiling.html">Compilar Apache para
-Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Usar
-Apache con Novell NetWare</a></li>
-<li><a href="platform/perf-hp.html">Servidor Web de alto rendimiento con
-HPUX</a></li>
-<li><a href="platform/ebcdic.html">La versión EBCDIC de
-Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="programs" id="programs">Programas de soporte y el Servidor HTTP Apache</a></h2>
-<ul><li class="separate"><a href="programs/">Visión General</a></li>
-<li><a href="programs/httpd.html">Página de Ayuda: httpd</a></li>
-<li><a href="programs/ab.html">Página de Ayuda: ab</a></li>
-<li><a href="programs/apachectl.html">Página de Ayuda: apachectl</a></li>
-<li><a href="programs/apxs.html">Página de Ayuda: apxs</a></li>
-<li><a href="programs/configure.html">Página de Ayuda: configure</a></li>
-<li><a href="programs/dbmmanage.html">Página de Ayuda: dbmmanage</a></li>
-<li><a href="programs/htdigest.html">Página de Ayuda: htdigest</a></li>
-<li><a href="programs/htpasswd.html">Página de Ayuda: htpasswd</a></li>
-<li><a href="programs/logresolve.html">Página de Ayuda: logresolve</a></li>
-<li><a href="programs/rotatelogs.html">Página de Ayuda: rotatelogs</a></li>
-<li><a href="programs/suexec.html">Página de Ayuda: suexec</a></li>
-<li><a href="programs/other.html">Otros Programas</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="misc" id="misc">Documentación adicional sobre Apache</a></h2>
-<ul><li class="separate"><a href="misc/">Visión General</a></li>
-<li><a href="cgi_path.html">Cambios en PATH_INFO en el entorno CGI</a></li>
-<li><a href="misc/relevant_standards.html">Estándares Importantes</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="modules" id="modules">Módulos de Apache</a></h2>
-<ul><li><a href="mod/module-dict.html">Definiciones de términos usados
-para describir los módulos de Apache</a></li>
-<li><a href="mod/directive-dict.html">Definiciones de términos
-usados para describir las directivas de Apache</a></li>
-</ul><ul><li><a href="mod/core.html">Funcionalidad Básica de Apache</a></li>
-<li><a href="mod/mpm_common.html">Directivas Comunes de los MPM de
- Apache</a></li>
-<li><a href="mod/beos.html">MPM de Apache beos</a></li>
-<li><a href="mod/leader.html">MPM de Apache leader</a></li>
-<li><a href="mod/mpm_netware.html">MPM de Apache netware</a></li>
-<li><a href="mod/mpmt_os2.html">MPM de Apache os2</a></li>
-<li><a href="mod/perchild.html">MPM de Apache perchild</a></li>
-<li><a href="mod/prefork.html">MPM de Apache prefork</a></li>
-<li><a href="mod/threadpool.html">MPM de Apache threadpool</a></li>
-<li><a href="mod/mpm_winnt.html">MPM de Apache winnt</a></li>
-<li><a href="mod/worker.html">MPM de Apache worker</a></li>
-</ul><ul><li><a href="mod/mod_actions.html">Módulo Apache mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Módulo Apache mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Módulo Apache mod_asis</a></li>
-<li><a href="mod/mod_auth_basic.html">Módulo Apache mod_auth_basic</a></li>
-<li><a href="mod/mod_auth_digest.html">Módulo Apache mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">Módulo Apache mod_auth_ldap</a></li>
-<li><a href="mod/mod_authn_anon.html">Módulo Apache mod_authn_anon</a></li>
-<li><a href="mod/mod_authn_dbm.html">Módulo Apache mod_authn_dbm</a></li>
-<li><a href="mod/mod_authn_default.html">Módulo Apache mod_authn_default</a></li>
-<li><a href="mod/mod_authn_file.html">Módulo Apache mod_authn_file</a></li>
-<li><a href="mod/mod_authz_dbm.html">Módulo Apache mod_authz_dbm</a></li>
-<li><a href="mod/mod_authz_default.html">Módulo Apache mod_authz_default</a></li>
-<li><a href="mod/mod_authz_groupfile.html">Módulo Apache mod_authz_groupfile</a></li>
-<li><a href="mod/mod_authz_host.html">Módulo Apache mod_authz_host</a></li>
-<li><a href="mod/mod_authz_owner.html">Módulo Apache mod_authz_owner</a></li>
-<li><a href="mod/mod_authz_user.html">Módulo Apache mod_authz_user</a></li>
-<li><a href="mod/mod_autoindex.html">Módulo Apache mod_autoindex</a></li>
-<li><a href="mod/mod_cache.html">Módulo Apache mod_cache</a></li>
-<li><a href="mod/mod_cern_meta.html">Módulo Apache mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Módulo Apache mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Módulo Apache mod_cgid</a></li>
-<li><a href="mod/mod_charset_lite.html">Módulo Apache mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Módulo Apache mod_dav</a></li>
-<li><a href="mod/mod_dav_fs.html">Módulo Apache mod_dav_fs</a></li>
-<li><a href="mod/mod_dav_lock.html">Módulo Apache mod_dav_lock</a></li>
-<li><a href="mod/mod_deflate.html">Módulo Apache mod_deflate</a></li>
-<li><a href="mod/mod_dir.html">Módulo Apache mod_dir</a></li>
-<li><a href="mod/mod_disk_cache.html">Módulo Apache mod_disk_cache</a></li>
-<li><a href="mod/mod_echo.html">Módulo Apache mod_echo</a></li>
-<li><a href="mod/mod_env.html">Módulo Apache mod_env</a></li>
-<li><a href="mod/mod_example.html">Módulo Apache mod_example</a></li>
-<li><a href="mod/mod_expires.html">Módulo Apache mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Módulo Apache mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Módulo Apache mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">Módulo Apache mod_headers</a></li>
-<li><a href="mod/mod_ident.html">Módulo Apache mod_ident</a></li>
-<li><a href="mod/mod_imap.html">Módulo Apache mod_imap</a></li>
-<li><a href="mod/mod_include.html">Módulo Apache mod_include</a></li>
-<li><a href="mod/mod_info.html">Módulo Apache mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Módulo Apache mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">Módulo Apache mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Módulo Apache mod_log_config</a></li>
-<li><a href="mod/mod_log_forensic.html">Módulo Apache mod_log_forensic</a></li>
-<li><a href="mod/mod_logio.html">Módulo Apache mod_logio</a></li>
-<li><a href="mod/mod_mem_cache.html">Módulo Apache mod_mem_cache</a></li>
-<li><a href="mod/mod_mime.html">Módulo Apache mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Módulo Apache mod_mime_magic</a></li>
-<li><a href="mod/mod_negotiation.html">Módulo Apache mod_negotiation</a></li>
-<li><a href="mod/mod_nw_ssl.html">Módulo Apache mod_nw_ssl</a></li>
-<li><a href="mod/mod_proxy.html">Módulo Apache mod_proxy</a></li>
-<li><a href="mod/mod_proxy_connect.html">Módulo Apache mod_proxy_connect</a></li>
-<li><a href="mod/mod_proxy_ftp.html">Módulo Apache mod_proxy_ftp</a></li>
-<li><a href="mod/mod_proxy_http.html">Módulo Apache mod_proxy_http</a></li>
-<li><a href="mod/mod_rewrite.html">Módulo Apache mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">Módulo Apache mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">Módulo Apache mod_so</a></li>
-<li><a href="mod/mod_speling.html">Módulo Apache mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Módulo Apache mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Módulo Apache mod_status</a></li>
-<li><a href="mod/mod_suexec.html">Módulo Apache mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Módulo Apache mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">Módulo Apache mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Módulo Apache mod_usertrack</a></li>
-<li><a href="mod/mod_version.html">Módulo Apache mod_version</a></li>
-<li><a href="mod/mod_vhost_alias.html">Módulo Apache mod_vhost_alias</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="developer" id="developer">Documentación para desarrolladores</a></h2>
-<ul><li class="separate"><a href="developer/">Visión General</a></li>
-<li><a href="developer/API.html">Notas sobre la API de Apache</a></li>
-<li><a href="developer/debugging.html">Debugging la Reserva de Memoria en APR</a></li>
-<li><a href="developer/documenting.html">Documentando Apache 2.0</a></li>
-<li><a href="developer/hooks.html">Funciones Hook de Apache 2.0</a></li>
-<li><a href="developer/modules.html">Convertir Módulos de Apache 1.3 a Apache 2.0</a></li>
-<li><a href="developer/request.html">Procesamiento de Peticiones en Apache 2.0</a></li>
-<li><a href="developer/filters.html">Funcionamiento de los filtros en Apache 2.0</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="index" id="index">Glosario e Índice</a></h2>
-<ul><li><a href="glossary.html">Glosario</a></li>
-<li><a href="mod/">Índice de Módulos</a></li>
-<li><a href="mod/directives.html">Índice de Directivas</a></li>
-<li><a href="mod/quickreference.html">Guía Rápida de
-Referencia de Directivas</a></li>
-</ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sitemap.html.ja.euc-jp b/docs/manual/sitemap.html.ja.euc-jp
deleted file mode 100644
index 0bb7da7d22..0000000000
--- a/docs/manual/sitemap.html.ja.euc-jp
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Site Map - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div>
-<div id="page-content"><div id="preamble"><h1>Site Map</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>¤³¤Î¥Ú¡¼¥¸¤Ï¸½»þÅÀ¤ÇÍøÍѲÄǽ¤Ê
-<a href="./">Apache HTTP ¥µ¡¼¥Ð¥Ð¡¼¥¸¥ç¥ó 2.1 ¤Î¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a>
-¤Î°ìÍ÷¤Ç¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="./images/down.gif" /> <a href="#release">¥ê¥ê¡¼¥¹¤Î¥á¥â</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Apache HTTP ¥µ¡¼¥Ð¤Î»ÈÍÑ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¥É¥­¥å¥á¥ó¥È</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#faq">Apache ¥µ¡¼¥Ð¤Î¤è¤¯¤¢¤ë¼ÁÌä</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ssl">Apache ¤Î SSL/TLS °Å¹æ²½</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#howto">¥¬¥¤¥É¡¢¥Á¥å¡¼¥È¥ê¥¢¥ë¡¢¥Ï¥¦¥Ä¡¼</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#platform">¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¸ÇÍ­¤Î¾ðÊó</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programs">Apache HTTP ¥µ¡¼¥Ð¤È¥µ¥Ý¡¼¥È¥×¥í¥°¥é¥à</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Apache ¤½¤Î¾</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">Apache ¥â¥¸¥å¡¼¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#developer">³«È¯¼Ô¤Î¤¿¤á¤Î¥É¥­¥å¥á¥ó¥È</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#index">ÍѸ콸¤Èº÷°ú</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="release" id="release">¥ê¥ê¡¼¥¹¤Î¥á¥â</a></h2>
-<ul><li><a href="upgrading.html">1.3 ¤«¤é 2.0 ¤Ø¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É</a></li>
-<li><a href="new_features_2_0.html">Apache 2.0 ¤Î¿·µ¡Ç½</a></li>
-<li><a href="license.html">Apache License</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="using" id="using">Apache HTTP ¥µ¡¼¥Ð¤Î»ÈÍÑ</a></h2>
-<ul><li><a href="install.html">Apache ¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë</a></li>
-<li><a href="invoking.html">Apache ¤Îµ¯Æ°</a></li>
-<li><a href="stopping.html">¥µ¡¼¥Ð¤ÎÄä»ß¤ÈºÆµ¯Æ°</a></li>
-<li><a href="configuring.html">ÀßÄê¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="sections.html">Directory, Location, Files ¥»¥¯¥·¥ç¥ó¤ÎÆ°ºîÊýË¡</a></li>
-<li><a href="server-wide.html">¥µ¡¼¥ÐÁ´ÂΤÎÀßÄê</a></li>
-<li><a href="logs.html">¥í¥°¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="urlmapping.html">URL ¤«¤é¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î°ÌÃ֤ؤΥޥå×</a></li>
-<li><a href="misc/security_tips.html">¥»¥­¥å¥ê¥Æ¥£¤Î¥³¥Ä</a></li>
-<li><a href="dso.html">ưŪ¶¦Í­¥ª¥Ö¥¸¥§¥¯¥È (DSO) ¥µ¥Ý¡¼¥È</a></li>
-<li><a href="content-negotiation.html">¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</a></li>
-<li><a href="custom-error.html">¥«¥¹¥¿¥à¥¨¥é¡¼¥ì¥¹¥Ý¥ó¥¹</a></li>
-<li><a href="bind.html">Apache ¤¬»ÈÍѤ¹¤ë¥¢¥É¥ì¥¹¤È¥Ý¡¼¥È¤ÎÀßÄê</a></li>
-<li><a href="mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°¥â¥¸¥å¡¼¥ë (MPM)</a></li>
-<li><a href="env.html">Apache ¤Ë¤ª¤±¤ë´Ä¶­ÊÑ¿ô</a></li>
-<li><a href="handler.html">Apache ¤Î¥Ï¥ó¥É¥é¤Î»ÈÍÑ</a></li>
-<li><a href="filter.html">¥Õ¥£¥ë¥¿</a></li>
-<li><a href="suexec.html">suEXEC ¥µ¥Ý¡¼¥È</a></li>
-<li><a href="misc/perf-tuning.html">À­Ç½¤Ë´Ø¤¹¤ë¥Ò¥ó¥È</a></li>
-<li><a href="misc/rewriteguide.html">URL ¥ê¥é¥¤¥È¥¬¥¤¥É</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="vhosts" id="vhosts">Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¥É¥­¥å¥á¥ó¥È</a></h2>
-<ul><li class="separate"><a href="vhosts/">³µÎ¬</a></li>
-<li><a href="vhosts/name-based.html">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li>
-<li><a href="vhosts/ip-based.html">IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥µ¥Ý¡¼¥È</a></li>
-<li><a href="vhosts/mass.html">ưŪ¤ËÀßÄꤵ¤ì¤¿Â絬ÌϥС¼¥Á¥ã¥ë¥Û¥¹¥È</a></li>
-<li><a href="vhosts/examples.html">VirtualHost ¤ÎÎã</a></li>
-<li><a href="vhosts/details.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Þ¥Ã¥Á¥ó¥°¤Î¾Ü¤·¤¤ÀâÌÀ</a></li>
-<li><a href="vhosts/fd-limits.html">¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¸Â³¦</a></li>
-<li><a href="dns-caveats.html">DNS ¤È Apache ¤È¤Ë´Ø·¸¤¹¤ëÌäÂê</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="faq" id="faq">Apache ¥µ¡¼¥Ð¤Î¤è¤¯¤¢¤ë¼ÁÌä</a></h2>
-<ul><li><a href="faq/">³µÎ¬</a></li>
-<li><a href="faq/support.html">¥µ¥Ý¡¼¥È</a></li>
-<li><a href="faq/error.html">¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="ssl" id="ssl">Apache ¤Î SSL/TLS °Å¹æ²½</a></h2>
-<ul><li class="separate"><a href="ssl/">³µÎ¬</a></li>
-<li><a href="ssl/ssl_intro.html">SSL/TLS °Å¹æ²½: ÆþÌç</a></li>
-<li><a href="ssl/ssl_compat.html">SSL/TLS °Å¹æ²½: ¸ß´¹À­</a></li>
-<li><a href="ssl/ssl_howto.html">SSL/TLS °Å¹æ²½: ¥Ï¥¦¥Ä¡¼</a></li>
-<li><a href="ssl/ssl_faq.html">SSL/TLS °Å¹æ²½: FAQ</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="howto" id="howto">¥¬¥¤¥É¡¢¥Á¥å¡¼¥È¥ê¥¢¥ë¡¢¥Ï¥¦¥Ä¡¼</a></h2>
-<ul><li class="separate"><a href="howto/">³µÎ¬</a></li>
-<li><a href="howto/auth.html">ǧ¾Ú</a></li>
-<li><a href="howto/cgi.html">CGI ¤Ë¤è¤ëưŪ¥³¥ó¥Æ¥ó¥Ä</a></li>
-<li><a href="howto/ssi.html">Server Side Includes ÆþÌç</a></li>
-<li><a href="howto/htaccess.html">.htaccess ¥Õ¥¡¥¤¥ë</a></li>
-<li><a href="howto/public_html.html">¥æ¡¼¥¶Ëè¤Î¥¦¥§¥Ö¥Ç¥£¥ì¥¯¥È¥ê</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="platform" id="platform">¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¸ÇÍ­¤Î¾ðÊó</a></h2>
-<ul><li class="separate"><a href="platform/">³µÎ¬</a></li>
-<li><a href="platform/windows.html">Microsoft Windows ¤Ç¤Î Apache ¤Î»ÈÍÑ</a></li>
-<li><a href="platform/win_compiling.html">Microsoft Windows ¤Ç¤Î Apache
-¤Î¥³¥ó¥Ñ¥¤¥ë</a></li>
-<li><a href="platform/netware.html">Novell NetWare ¤Ç Apache ¤ò»È¤¦</a></li>
-<li><a href="platform/perf-hp.html">HPUX ¤Ç¹âÀ­Ç½¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¼Â¹Ô¤¹¤ë</a></li>
-<li><a href="platform/ebcdic.html">EBCDIC ÈÇ Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="programs" id="programs">Apache HTTP ¥µ¡¼¥Ð¤È¥µ¥Ý¡¼¥È¥×¥í¥°¥é¥à</a></h2>
-<ul><li class="separate"><a href="programs/">³µÎ¬</a></li>
-<li><a href="programs/httpd.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: httpd</a></li>
-<li><a href="programs/ab.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: ab</a></li>
-<li><a href="programs/apachectl.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: apachectl</a></li>
-<li><a href="programs/apxs.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: apxs</a></li>
-<li><a href="programs/configure.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: configure</a></li>
-<li><a href="programs/dbmmanage.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: dbmmanage</a></li>
-<li><a href="programs/htdigest.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: htdigest</a></li>
-<li><a href="programs/htpasswd.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: htpasswd</a></li>
-<li><a href="programs/logresolve.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: logresolve</a></li>
-<li><a href="programs/rotatelogs.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: rotatelogs</a></li>
-<li><a href="programs/suexec.html">¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸: suexec</a></li>
-<li><a href="programs/other.html">¾¤Î¥×¥í¥°¥é¥à</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="misc" id="misc">Apache ¤½¤Î¾</a></h2>
-<ul><li class="separate"><a href="misc/">³µÎ¬</a></li>
-<li><a href="cgi_path.html">CGI ´Ä¶­¤Î PATH_INFO ¤ÎÊѹ¹</a></li>
-<li><a href="misc/relevant_standards.html">´ØÏ¢¤¹¤ëɸ½àµ¬³Ê</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="modules" id="modules">Apache ¥â¥¸¥å¡¼¥ë</a></h2>
-<ul><li><a href="mod/module-dict.html">Apache ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀâÌÀ¤Ë»È¤ï¤ì¤ëÍѸì</a></li>
-<li><a href="mod/directive-dict.html">Apache ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀâÌÀ¤Ë»È¤ï¤ì¤ëÍѸì</a></li>
-</ul><ul><li><a href="mod/core.html">Apache ¥³¥¢µ¡Ç½</a></li>
-<li><a href="mod/mpm_common.html">Apache MPM ¶¦Ḁ̈ǥ£¥ì¥¯¥Æ¥£¥Ö</a></li>
-<li><a href="mod/beos.html">Apache MPM beos</a></li>
-<li><a href="mod/leader.html">Apache MPM leader</a></li>
-<li><a href="mod/mpm_netware.html">Apache MPM netware</a></li>
-<li><a href="mod/mpmt_os2.html">Apache MPM os2</a></li>
-<li><a href="mod/perchild.html">Apache MPM perchild</a></li>
-<li><a href="mod/prefork.html">Apache MPM prefork</a></li>
-<li><a href="mod/threadpool.html">Apache MPM threadpool</a></li>
-<li><a href="mod/mpm_winnt.html">Apache MPM winnt</a></li>
-<li><a href="mod/worker.html">Apache MPM worker</a></li>
-</ul><ul><li><a href="mod/mod_actions.html">Apache ¥â¥¸¥å¡¼¥ë mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Apache ¥â¥¸¥å¡¼¥ë mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Apache ¥â¥¸¥å¡¼¥ë mod_asis</a></li>
-<li><a href="mod/mod_auth_basic.html">Apache ¥â¥¸¥å¡¼¥ë mod_auth_basic</a></li>
-<li><a href="mod/mod_auth_digest.html">Apache ¥â¥¸¥å¡¼¥ë mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">Apache ¥â¥¸¥å¡¼¥ë mod_auth_ldap</a></li>
-<li><a href="mod/mod_authn_anon.html">Apache ¥â¥¸¥å¡¼¥ë mod_authn_anon</a></li>
-<li><a href="mod/mod_authn_dbm.html">Apache ¥â¥¸¥å¡¼¥ë mod_authn_dbm</a></li>
-<li><a href="mod/mod_authn_default.html">Apache ¥â¥¸¥å¡¼¥ë mod_authn_default</a></li>
-<li><a href="mod/mod_authn_file.html">Apache ¥â¥¸¥å¡¼¥ë mod_authn_file</a></li>
-<li><a href="mod/mod_authz_dbm.html">Apache ¥â¥¸¥å¡¼¥ë mod_authz_dbm</a></li>
-<li><a href="mod/mod_authz_default.html">Apache ¥â¥¸¥å¡¼¥ë mod_authz_default</a></li>
-<li><a href="mod/mod_authz_groupfile.html">Apache ¥â¥¸¥å¡¼¥ë mod_authz_groupfile</a></li>
-<li><a href="mod/mod_authz_host.html">Apache ¥â¥¸¥å¡¼¥ë mod_authz_host</a></li>
-<li><a href="mod/mod_authz_owner.html">Apache ¥â¥¸¥å¡¼¥ë mod_authz_owner</a></li>
-<li><a href="mod/mod_authz_user.html">Apache ¥â¥¸¥å¡¼¥ë mod_authz_user</a></li>
-<li><a href="mod/mod_autoindex.html">Apache ¥â¥¸¥å¡¼¥ë mod_autoindex</a></li>
-<li><a href="mod/mod_cache.html">Apache ¥â¥¸¥å¡¼¥ë mod_cache</a></li>
-<li><a href="mod/mod_cern_meta.html">Apache ¥â¥¸¥å¡¼¥ë mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Apache ¥â¥¸¥å¡¼¥ë mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Apache ¥â¥¸¥å¡¼¥ë mod_cgid</a></li>
-<li><a href="mod/mod_charset_lite.html">Apache ¥â¥¸¥å¡¼¥ë mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Apache ¥â¥¸¥å¡¼¥ë mod_dav</a></li>
-<li><a href="mod/mod_dav_fs.html">Apache ¥â¥¸¥å¡¼¥ë mod_dav_fs</a></li>
-<li><a href="mod/mod_dav_lock.html">Apache ¥â¥¸¥å¡¼¥ë mod_dav_lock</a></li>
-<li><a href="mod/mod_deflate.html">Apache ¥â¥¸¥å¡¼¥ë mod_deflate</a></li>
-<li><a href="mod/mod_dir.html">Apache ¥â¥¸¥å¡¼¥ë mod_dir</a></li>
-<li><a href="mod/mod_disk_cache.html">Apache ¥â¥¸¥å¡¼¥ë mod_disk_cache</a></li>
-<li><a href="mod/mod_echo.html">Apache ¥â¥¸¥å¡¼¥ë mod_echo</a></li>
-<li><a href="mod/mod_env.html">Apache ¥â¥¸¥å¡¼¥ë mod_env</a></li>
-<li><a href="mod/mod_example.html">Apache ¥â¥¸¥å¡¼¥ë mod_example</a></li>
-<li><a href="mod/mod_expires.html">Apache ¥â¥¸¥å¡¼¥ë mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Apache ¥â¥¸¥å¡¼¥ë mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Apache ¥â¥¸¥å¡¼¥ë mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">Apache ¥â¥¸¥å¡¼¥ë mod_headers</a></li>
-<li><a href="mod/mod_ident.html">Apache ¥â¥¸¥å¡¼¥ë mod_ident</a></li>
-<li><a href="mod/mod_imap.html">Apache ¥â¥¸¥å¡¼¥ë mod_imap</a></li>
-<li><a href="mod/mod_include.html">Apache ¥â¥¸¥å¡¼¥ë mod_include</a></li>
-<li><a href="mod/mod_info.html">Apache ¥â¥¸¥å¡¼¥ë mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Apache ¥â¥¸¥å¡¼¥ë mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">Apache ¥â¥¸¥å¡¼¥ë mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Apache ¥â¥¸¥å¡¼¥ë mod_log_config</a></li>
-<li><a href="mod/mod_log_forensic.html">Apache ¥â¥¸¥å¡¼¥ë mod_log_forensic</a></li>
-<li><a href="mod/mod_logio.html">Apache ¥â¥¸¥å¡¼¥ë mod_logio</a></li>
-<li><a href="mod/mod_mem_cache.html">Apache ¥â¥¸¥å¡¼¥ë mod_mem_cache</a></li>
-<li><a href="mod/mod_mime.html">Apache ¥â¥¸¥å¡¼¥ë mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Apache ¥â¥¸¥å¡¼¥ë mod_mime_magic</a></li>
-<li><a href="mod/mod_negotiation.html">Apache ¥â¥¸¥å¡¼¥ë mod_negotiation</a></li>
-<li><a href="mod/mod_nw_ssl.html">Apache ¥â¥¸¥å¡¼¥ë mod_nw_ssl</a></li>
-<li><a href="mod/mod_proxy.html">Apache ¥â¥¸¥å¡¼¥ë mod_proxy</a></li>
-<li><a href="mod/mod_proxy_connect.html">Apache ¥â¥¸¥å¡¼¥ë mod_proxy_connect</a></li>
-<li><a href="mod/mod_proxy_ftp.html">Apache ¥â¥¸¥å¡¼¥ë mod_proxy_ftp</a></li>
-<li><a href="mod/mod_proxy_http.html">Apache ¥â¥¸¥å¡¼¥ë mod_proxy_http</a></li>
-<li><a href="mod/mod_rewrite.html">Apache ¥â¥¸¥å¡¼¥ë mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">Apache ¥â¥¸¥å¡¼¥ë mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">Apache ¥â¥¸¥å¡¼¥ë mod_so</a></li>
-<li><a href="mod/mod_speling.html">Apache ¥â¥¸¥å¡¼¥ë mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Apache ¥â¥¸¥å¡¼¥ë mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Apache ¥â¥¸¥å¡¼¥ë mod_status</a></li>
-<li><a href="mod/mod_suexec.html">Apache ¥â¥¸¥å¡¼¥ë mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Apache ¥â¥¸¥å¡¼¥ë mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">Apache ¥â¥¸¥å¡¼¥ë mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Apache ¥â¥¸¥å¡¼¥ë mod_usertrack</a></li>
-<li><a href="mod/mod_version.html">Apache ¥â¥¸¥å¡¼¥ë mod_version</a></li>
-<li><a href="mod/mod_vhost_alias.html">Apache ¥â¥¸¥å¡¼¥ë mod_vhost_alias</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="developer" id="developer">³«È¯¼Ô¤Î¤¿¤á¤Î¥É¥­¥å¥á¥ó¥È</a></h2>
-<ul><li class="separate"><a href="developer/">³µÎ¬</a></li>
-<li><a href="developer/API.html">Apache API ¥á¥â</a></li>
-<li><a href="developer/debugging.html">APR
-¤Î¥á¥â¥ê¥¢¥í¥±¡¼¥·¥ç¥ó¤Î¥Ç¥Ð¥Ã¥°</a></li>
-<li><a href="developer/documenting.html">Apache 2.0 ¤ÎÀâÌÀ¤ò½ñ¤¯</a></li>
-<li><a href="developer/hooks.html">Apache 2.0 ¥Õ¥Ã¥¯´Ø¿ô</a></li>
-<li><a href="developer/modules.html">Apache 1.3 ¤«¤é Apache 2.0 ¤Ë¥â¥¸¥å¡¼¥ë¤ò
-°Ü¿¢¤¹¤ë</a></li>
-<li><a href="developer/request.html">Apache 2.0 ¤Î¥ê¥¯¥¨¥¹¥È½èÍý</a></li>
-<li><a href="developer/filters.html">Apache 2.0 ¤Î¥Õ¥£¥ë¥¿¤ÎÆ°ºî¤Î»ÅÊý</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="index" id="index">ÍѸ콸¤Èº÷°ú</a></h2>
-<ul><li><a href="glossary.html">ÍѸ콸</a></li>
-<li><a href="mod/">¥â¥¸¥å¡¼¥ëº÷°ú</a></li>
-<li><a href="mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Öº÷°ú</a></li>
-<li><a href="mod/quickreference.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö ¥¯¥¤¥Ã¥¯¥ê¥Õ¥¡¥ì¥ó¥¹</a></li>
-</ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sitemap.html.ko.euc-kr b/docs/manual/sitemap.html.ko.euc-kr
deleted file mode 100644
index f625e576bd..0000000000
--- a/docs/manual/sitemap.html.ko.euc-kr
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>»çÀÌÆ®¸Ê - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div>
-<div id="page-content"><div id="preamble"><h1>»çÀÌÆ®¸Ê</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-<p>ÀÌ ÆäÀÌÁö´Â ÇöÀç
-<a href="./">Apache HTTP Server Version 2.1 ¹®¼­</a> ¸ñ·ÏÀ»
-º¸¿©ÁØ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="./images/down.gif" /> <a href="#release">¹ßÇ¥¹®</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">¾ÆÆÄÄ¡ À¥¼­¹ö »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#faq">¾ÆÆÄÄ¡ ¼­¹ö¿¡ ´ëÇØ ÀÚÁÖ ¹°¾îº¸´Â Áú¹®</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ssl">¾ÆÆÄÄ¡ SSL/TLS ¾Ïȣȭ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#howto">Áöħ¼­, ÅõÅ丮¾ó, HowTo</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#platform">Ç÷¡Æûº° ¼³¸í</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programs">¾ÆÆÄÄ¡ À¥¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">±âŸ ¾ÆÆÄÄ¡ ¹®¼­</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">¾ÆÆÄÄ¡ ¸ðµâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#developer">°³¹ßÀÚ ¹®¼­</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#index">¿ë¾î¿Í »öÀÎ</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="release" id="release">¹ßÇ¥¹®</a></h2>
-<ul><li><a href="upgrading.html">1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å</a></li>
-<li><a href="new_features_2_0.html">¾ÆÆÄÄ¡ 2.0ÀÇ »õ·Î¿î ±â´É</a></li>
-<li><a href="license.html">¾ÆÆÄÄ¡ ¶óÀ̼±½º</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="using" id="using">¾ÆÆÄÄ¡ À¥¼­¹ö »ç¿ëÇϱâ</a></h2>
-<ul><li><a href="install.html">¾ÆÆÄÄ¡ ÄÄÆÄÀÏ°ú ¼³Ä¡</a></li>
-<li><a href="invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</a></li>
-<li><a href="stopping.html">¼­¹ö Áß´Ü°ú Àç½ÃÀÛ</a></li>
-<li><a href="configuring.html">¼³Á¤ÆÄÀÏ</a></li>
-<li><a href="sections.html">¾î¶»°Ô Directory, Location, Files ¼½¼ÇÀÌ
-µ¿ÀÛÇϳª</a></li>
-<li><a href="server-wide.html">¼­¹ö Àü¿ª ¼³Á¤</a></li>
-<li><a href="logs.html">·Î±×ÆÄÀÏ</a></li>
-<li><a href="urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</a></li>
-<li><a href="misc/security_tips.html">º¸¾È ÆÁ</a></li>
-<li><a href="dso.html">µ¿Àû°øÀ¯°´Ã¼ (DSO) Áö¿ø</a></li>
-<li><a href="content-negotiation.html">³»¿ëÇù»ó (content negotiation)</a></li>
-<li><a href="custom-error.html">»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä</a></li>
-<li><a href="bind.html">¾ÆÆÄÄ¡°¡ »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤</a></li>
-<li><a href="mpm.html">´ÙÁß󸮸ðµâ (MPM)</a></li>
-<li><a href="env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</a></li>
-<li><a href="handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</a></li>
-<li><a href="filter.html">ÇÊÅÍ</a></li>
-<li><a href="suexec.html">suEXEC Áö¿ø</a></li>
-<li><a href="misc/perf-tuning.html">¼º´ÉÇâ»ó ÈùÆ®</a></li>
-<li><a href="misc/rewriteguide.html">URL ÀçÀÛ¼º(rewriting) Áöħ¼­</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="vhosts" id="vhosts">¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</a></h2>
-<ul><li class="separate"><a href="vhosts/">°³¿ä</a></li>
-<li><a href="vhosts/name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ®</a></li>
-<li><a href="vhosts/ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</a></li>
-<li><a href="vhosts/mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ</a></li>
-<li><a href="vhosts/examples.html">°¡»óÈ£½ºÆ® ¿¹</a></li>
-<li><a href="vhosts/details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</a></li>
-<li><a href="vhosts/fd-limits.html">ÆÄÀϱâ¼úÀÚ(file descriptor) ÇÑ°è</a></li>
-<li><a href="dns-caveats.html">DNS¿Í ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ »çÇ×</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="faq" id="faq">¾ÆÆÄÄ¡ ¼­¹ö¿¡ ´ëÇØ ÀÚÁÖ ¹°¾îº¸´Â Áú¹®</a></h2>
-<ul><li><a href="faq/">°³¿ä</a></li>
-<li><a href="faq/support.html">Áö¿ø</a></li>
-<li><a href="faq/error.html">¿À·ù¹®</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="ssl" id="ssl">¾ÆÆÄÄ¡ SSL/TLS ¾Ïȣȭ</a></h2>
-<ul><li class="separate"><a href="ssl/">¼Ò°³</a></li>
-<li><a href="ssl/ssl_intro.html">SSL/TLS ¾Ïȣȭ: ¼Ò°³</a></li>
-<li><a href="ssl/ssl_compat.html">SSL/TLS ¾Ïȣȭ: ȣȯ¼º</a></li>
-<li><a href="ssl/ssl_howto.html">SSL/TLS ¾Ïȣȭ: How-To</a></li>
-<li><a href="ssl/ssl_faq.html">SSL/TLS ¾Ïȣȭ: FAQ</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="howto" id="howto">Áöħ¼­, ÅõÅ丮¾ó, HowTo</a></h2>
-<ul><li class="separate"><a href="howto/">°³¿ä</a></li>
-<li><a href="howto/auth.html">ÀÎÁõ</a></li>
-<li><a href="howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</a></li>
-<li><a href="howto/ssi.html">Server Side Includes ¼Ò°³</a></li>
-<li><a href="howto/htaccess.html">.htaccess ÆÄÀÏ</a></li>
-<li><a href="howto/public_html.html">»ç¿ëÀÚº° À¥µð·ºÅ丮</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="platform" id="platform">Ç÷¡Æûº° ¼³¸í</a></h2>
-<ul><li class="separate"><a href="platform/">°³¿ä</a></li>
-<li><a href="platform/windows.html">Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡
-»ç¿ëÇϱâ</a></li>
-<li><a href="platform/win_compiling.html">Microsoft Windows¿¡¼­
-¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</a></li>
-<li><a href="platform/netware.html">Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡
-»ç¿ëÇϱâ</a></li>
-<li><a href="platform/perf-hp.html">HPUX¿¡¼­ °í¼º´É À¥¼­¹ö
-½ÇÇàÇϱâ</a></li>
-<li><a href="platform/ebcdic.html">¾ÆÆÄÄ¡ EBCDIC Æ÷ÆÃ</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="programs" id="programs">¾ÆÆÄÄ¡ À¥¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</a></h2>
-<ul><li class="separate"><a href="programs/">°³¿ä</a></li>
-<li><a href="programs/httpd.html">Manpage: httpd</a></li>
-<li><a href="programs/ab.html">Manpage: ab</a></li>
-<li><a href="programs/apachectl.html">Manpage: apachectl</a></li>
-<li><a href="programs/apxs.html">Manpage: apxs</a></li>
-<li><a href="programs/configure.html">Manpage: configure</a></li>
-<li><a href="programs/dbmmanage.html">Manpage: dbmmanage</a></li>
-<li><a href="programs/htdigest.html">Manpage: htdigest</a></li>
-<li><a href="programs/htpasswd.html">Manpage: htpasswd</a></li>
-<li><a href="programs/logresolve.html">Manpage: logresolve</a></li>
-<li><a href="programs/rotatelogs.html">Manpage: rotatelogs</a></li>
-<li><a href="programs/suexec.html">Manpage: suexec</a></li>
-<li><a href="programs/other.html">´Ù¸¥ ÇÁ·Î±×·¥µé</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="misc" id="misc">±âŸ ¾ÆÆÄÄ¡ ¹®¼­</a></h2>
-<ul><li class="separate"><a href="misc/">°³¿ä</a></li>
-<li><a href="cgi_path.html">CGI ȯ°æ¿¡¼­ PATH_INFOÀÇ º¯È­</a></li>
-<li><a href="misc/relevant_standards.html">°ü·ÃµÈ Ç¥Áصé</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="modules" id="modules">¾ÆÆÄÄ¡ ¸ðµâ</a></h2>
-<ul><li><a href="mod/module-dict.html">¾ÆÆÄÄ¡ ¸ðµâÀ» ¼³¸íÇϴµ¥ »ç¿ëÇÑ
-¿ë¾îÁ¤ÀÇ</a></li>
-<li><a href="mod/directive-dict.html">¾ÆÆÄÄ¡ Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥
-»ç¿ëÇÑ ¿ë¾îÁ¤ÀÇ</a></li>
-</ul><ul><li><a href="mod/core.html">¾ÆÆÄÄ¡ ÇÙ½É ±â´É</a></li>
-<li><a href="mod/mpm_common.html">¾ÆÆÄÄ¡ MPM °øÅë Áö½Ã¾î</a></li>
-<li><a href="mod/beos.html">¾ÆÆÄÄ¡ MPM beos</a></li>
-<li><a href="mod/leader.html">¾ÆÆÄÄ¡ MPM leader</a></li>
-<li><a href="mod/mpm_netware.html">¾ÆÆÄÄ¡ MPM netware</a></li>
-<li><a href="mod/mpmt_os2.html">¾ÆÆÄÄ¡ MPM os2</a></li>
-<li><a href="mod/perchild.html">¾ÆÆÄÄ¡ MPM perchild</a></li>
-<li><a href="mod/prefork.html">¾ÆÆÄÄ¡ MPM prefork</a></li>
-<li><a href="mod/threadpool.html">¾ÆÆÄÄ¡ MPM threadpool</a></li>
-<li><a href="mod/mpm_winnt.html">¾ÆÆÄÄ¡ MPM winnt</a></li>
-<li><a href="mod/worker.html">¾ÆÆÄÄ¡ MPM worker</a></li>
-</ul><ul><li><a href="mod/mod_actions.html">¾ÆÆÄÄ¡ ¸ðµâ mod_actions</a></li>
-<li><a href="mod/mod_alias.html">¾ÆÆÄÄ¡ ¸ðµâ mod_alias</a></li>
-<li><a href="mod/mod_asis.html">¾ÆÆÄÄ¡ ¸ðµâ mod_asis</a></li>
-<li><a href="mod/mod_auth_basic.html">¾ÆÆÄÄ¡ ¸ðµâ mod_auth_basic</a></li>
-<li><a href="mod/mod_auth_digest.html">¾ÆÆÄÄ¡ ¸ðµâ mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">¾ÆÆÄÄ¡ ¸ðµâ mod_auth_ldap</a></li>
-<li><a href="mod/mod_authn_anon.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_anon</a></li>
-<li><a href="mod/mod_authn_dbm.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_dbm</a></li>
-<li><a href="mod/mod_authn_default.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_default</a></li>
-<li><a href="mod/mod_authn_file.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authn_file</a></li>
-<li><a href="mod/mod_authz_dbm.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_dbm</a></li>
-<li><a href="mod/mod_authz_default.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_default</a></li>
-<li><a href="mod/mod_authz_groupfile.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_groupfile</a></li>
-<li><a href="mod/mod_authz_host.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_host</a></li>
-<li><a href="mod/mod_authz_owner.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_owner</a></li>
-<li><a href="mod/mod_authz_user.html">¾ÆÆÄÄ¡ ¸ðµâ mod_authz_user</a></li>
-<li><a href="mod/mod_autoindex.html">¾ÆÆÄÄ¡ ¸ðµâ mod_autoindex</a></li>
-<li><a href="mod/mod_cache.html">¾ÆÆÄÄ¡ ¸ðµâ mod_cache</a></li>
-<li><a href="mod/mod_cern_meta.html">¾ÆÆÄÄ¡ ¸ðµâ mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">¾ÆÆÄÄ¡ ¸ðµâ mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">¾ÆÆÄÄ¡ ¸ðµâ mod_cgid</a></li>
-<li><a href="mod/mod_charset_lite.html">¾ÆÆÄÄ¡ ¸ðµâ mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">¾ÆÆÄÄ¡ ¸ðµâ mod_dav</a></li>
-<li><a href="mod/mod_dav_fs.html">¾ÆÆÄÄ¡ ¸ðµâ mod_dav_fs</a></li>
-<li><a href="mod/mod_dav_lock.html">¾ÆÆÄÄ¡ ¸ðµâ mod_dav_lock</a></li>
-<li><a href="mod/mod_deflate.html">¾ÆÆÄÄ¡ ¸ðµâ mod_deflate</a></li>
-<li><a href="mod/mod_dir.html">¾ÆÆÄÄ¡ ¸ðµâ mod_dir</a></li>
-<li><a href="mod/mod_disk_cache.html">¾ÆÆÄÄ¡ ¸ðµâ mod_disk_cache</a></li>
-<li><a href="mod/mod_echo.html">¾ÆÆÄÄ¡ ¸ðµâ mod_echo</a></li>
-<li><a href="mod/mod_env.html">¾ÆÆÄÄ¡ ¸ðµâ mod_env</a></li>
-<li><a href="mod/mod_example.html">¾ÆÆÄÄ¡ ¸ðµâ mod_example</a></li>
-<li><a href="mod/mod_expires.html">¾ÆÆÄÄ¡ ¸ðµâ mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">¾ÆÆÄÄ¡ ¸ðµâ mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">¾ÆÆÄÄ¡ ¸ðµâ mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">¾ÆÆÄÄ¡ ¸ðµâ mod_headers</a></li>
-<li><a href="mod/mod_ident.html">¾ÆÆÄÄ¡ ¸ðµâ mod_ident</a></li>
-<li><a href="mod/mod_imap.html">¾ÆÆÄÄ¡ ¸ðµâ mod_imap</a></li>
-<li><a href="mod/mod_include.html">¾ÆÆÄÄ¡ ¸ðµâ mod_include</a></li>
-<li><a href="mod/mod_info.html">¾ÆÆÄÄ¡ ¸ðµâ mod_info</a></li>
-<li><a href="mod/mod_isapi.html">¾ÆÆÄÄ¡ ¸ðµâ mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">¾ÆÆÄÄ¡ ¸ðµâ mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">¾ÆÆÄÄ¡ ¸ðµâ mod_log_config</a></li>
-<li><a href="mod/mod_log_forensic.html">¾ÆÆÄÄ¡ ¸ðµâ mod_log_forensic</a></li>
-<li><a href="mod/mod_logio.html">¾ÆÆÄÄ¡ ¸ðµâ mod_logio</a></li>
-<li><a href="mod/mod_mem_cache.html">¾ÆÆÄÄ¡ ¸ðµâ mod_mem_cache</a></li>
-<li><a href="mod/mod_mime.html">¾ÆÆÄÄ¡ ¸ðµâ mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">¾ÆÆÄÄ¡ ¸ðµâ mod_mime_magic</a></li>
-<li><a href="mod/mod_negotiation.html">¾ÆÆÄÄ¡ ¸ðµâ mod_negotiation</a></li>
-<li><a href="mod/mod_nw_ssl.html">¾ÆÆÄÄ¡ ¸ðµâ mod_nw_ssl</a></li>
-<li><a href="mod/mod_proxy.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy</a></li>
-<li><a href="mod/mod_proxy_connect.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy_connect</a></li>
-<li><a href="mod/mod_proxy_ftp.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy_ftp</a></li>
-<li><a href="mod/mod_proxy_http.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy_http</a></li>
-<li><a href="mod/mod_rewrite.html">¾ÆÆÄÄ¡ ¸ðµâ mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">¾ÆÆÄÄ¡ ¸ðµâ mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">¾ÆÆÄÄ¡ ¸ðµâ mod_so</a></li>
-<li><a href="mod/mod_speling.html">¾ÆÆÄÄ¡ ¸ðµâ mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">¾ÆÆÄÄ¡ ¸ðµâ mod_ssl</a></li>
-<li><a href="mod/mod_status.html">¾ÆÆÄÄ¡ ¸ðµâ mod_status</a></li>
-<li><a href="mod/mod_suexec.html">¾ÆÆÄÄ¡ ¸ðµâ mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">¾ÆÆÄÄ¡ ¸ðµâ mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">¾ÆÆÄÄ¡ ¸ðµâ mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">¾ÆÆÄÄ¡ ¸ðµâ mod_usertrack</a></li>
-<li><a href="mod/mod_version.html">¾ÆÆÄÄ¡ ¸ðµâ mod_version</a></li>
-<li><a href="mod/mod_vhost_alias.html">¾ÆÆÄÄ¡ ¸ðµâ mod_vhost_alias</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="developer" id="developer">°³¹ßÀÚ ¹®¼­</a></h2>
-<ul><li class="separate"><a href="developer/">°³¿ä</a></li>
-<li><a href="developer/API.html">Apache API ¼³¸í</a></li>
-<li><a href="developer/debugging.html">APRÀÇ ¸Þ¸ð¸®ÇÒ´ç µð¹ö±ë</a></li>
-<li><a href="developer/documenting.html">Apache 2.0 ¹®¼­È­</a></li>
-<li><a href="developer/hooks.html">Apache 2.0 ÈÅ(hook) ÇÔ¼ö</a></li>
-<li><a href="developer/modules.html">Apache 1.3¿¡¼­ Apache 2.0À¸·Î
-¸ðµâÀ» ¼öÁ¤Çϱâ</a></li>
-<li><a href="developer/request.html">Apache 2.0ÀÇ ¿äûó¸®</a></li>
-<li><a href="developer/filters.html">Apache 2.0ÀÇ ÇÊÅÍ µ¿ÀÛ¹ý</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="index" id="index">¿ë¾î¿Í »öÀÎ</a></h2>
-<ul><li><a href="glossary.html">¿ë¾î</a></li>
-<li><a href="mod/">¸ðµâ ¸ñ·Ï</a></li>
-<li><a href="mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a></li>
-<li><a href="mod/quickreference.html">Áö½Ã¾î ºü¸¥ÂüÁ¶</a></li>
-</ul>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/sitemap.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/sitemap.xml b/docs/manual/sitemap.xml
deleted file mode 100644
index 2f304f39a7..0000000000
--- a/docs/manual/sitemap.xml
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE sitemap SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.37 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<sitemap metafile="sitemap.xml.meta">
-
- <title>Sitemap</title>
-
-<summary>
-<p>This page lists the currently available documents of the
-<a href="./">Apache HTTP Server Version 2.1 Documentation</a>.</p>
-</summary>
-
-<category id="release">
-<title>Release Notes</title>
-<page href="upgrading.html">Upgrading to 2.0 from 1.3</page>
-<page href="new_features_2_0.html">New features with Apache 2.0</page>
-<page href="license.html">Apache License</page>
-</category>
-
-<category id="using">
-<title>Using the Apache HTTP Server</title>
-<page href="install.html">Compiling and Installing Apache</page>
-<page href="invoking.html">Starting Apache</page>
-<page href="stopping.html">Stopping and Restarting the Server</page>
-<page href="configuring.html">Configuration Files</page>
-<page href="sections.html">How Directory, Location and Files sections work</page>
-<page href="server-wide.html">Server-Wide Configuration</page>
-<page href="logs.html">Log Files</page>
-<page href="urlmapping.html">Mapping URLs to Filesystem Locations</page>
-<page href="misc/security_tips.html">Security Tips</page>
-<page href="dso.html">Dynamic Shared Object (DSO) support</page>
-<page href="content-negotiation.html">Content Negotiation</page>
-<page href="custom-error.html">Custom error responses</page>
-<page href="bind.html">Setting which addresses and ports Apache uses</page>
-<page href="mpm.html">Multi-Processing Modules (MPMs)</page>
-<page href="env.html">Environment Variables in Apache</page>
-<page href="handler.html">Apache's Handler Use</page>
-<page href="filter.html">Filters</page>
-<page href="suexec.html">suEXEC Support</page>
-<page href="misc/perf-tuning.html">Performance Hints</page>
-<page href="misc/rewriteguide.html">URL Rewriting Guide</page>
-</category>
-
-<category id="vhosts">
-<title>Apache Virtual Host documentation</title>
-<page separate="yes" href="vhosts/">Overview</page>
-<page href="vhosts/name-based.html">Name-based Virtual Hosts</page>
-<page href="vhosts/ip-based.html">IP-based Virtual Host Support</page>
-<page href="vhosts/mass.html">Dynamically configured mass virtual hosting</page>
-<page href="vhosts/examples.html">VirtualHost Examples</page>
-<page href="vhosts/details.html">An In-Depth Discussion of Virtual Host Matching</page>
-<page href="vhosts/fd-limits.html">File descriptor limitations</page>
-<page href="dns-caveats.html">Issues Regarding DNS and Apache</page>
-</category>
-
-<category id="faq">
-<title>Apache Server Frequently Asked Questions</title>
-<page href="faq/">Overview</page>
-<page href="faq/support.html">Support</page>
-<page href="faq/error.html">Error Messages</page>
-</category>
-
-<category id="ssl">
-<title>Apache SSL/TLS Encryption</title>
-<page separate="yes" href="ssl/">Overview</page>
-<page href="ssl/ssl_intro.html">SSL/TLS Encryption: An Introduction</page>
-<page href="ssl/ssl_compat.html">SSL/TLS Encryption: Compatibility</page>
-<page href="ssl/ssl_howto.html">SSL/TLS Encryption: How-To</page>
-<page href="ssl/ssl_faq.html">SSL/TLS Encryption: FAQ</page>
-</category>
-
-<category id="howto">
-<title>Guides, Tutorials, and HowTos</title>
-<page separate="yes" href="howto/">Overview</page>
-<page href="howto/auth.html">Authentication</page>
-<page href="howto/cgi.html">Dynamic Content with CGI</page>
-<page href="howto/ssi.html">Introduction to Server Side Includes</page>
-<page href="howto/htaccess.html">.htaccess files</page>
-<page href="howto/public_html.html">Per-user web directories</page>
-</category>
-
-<category id="platform">
-<title>Platform-specific Notes</title>
-<page separate="yes" href="platform/">Overview</page>
-<page href="platform/windows.html">Using Apache with Microsoft
-Windows</page>
-<page href="platform/win_compiling.html">Compiling Apache for
-Microsoft Windows</page>
-<page href="platform/netware.html">Using Apache with Novell NetWare</page>
-<page href="platform/perf-hp.html">Running a High-Performance Web
-Server on HPUX</page>
-<page href="platform/ebcdic.html">The Apache EBCDIC Port</page>
-</category>
-
-<category id="programs">
-<title>Apache HTTP Server and Supporting Programs</title>
-<page separate="yes" href="programs/">Overview</page>
-<page href="programs/httpd.html">Manual Page: httpd</page>
-<page href="programs/ab.html">Manual Page: ab</page>
-<page href="programs/apachectl.html">Manual Page: apachectl</page>
-<page href="programs/apxs.html">Manual Page: apxs</page>
-<page href="programs/configure.html">Manual Page: configure</page>
-<page href="programs/dbmmanage.html">Manual Page: dbmmanage</page>
-<page href="programs/htdigest.html">Manual Page: htdigest</page>
-<page href="programs/htpasswd.html">Manual Page: htpasswd</page>
-<page href="programs/logresolve.html">Manual Page: logresolve</page>
-<page href="programs/rotatelogs.html">Manual Page: rotatelogs</page>
-<page href="programs/suexec.html">Manual Page: suexec</page>
-<page href="programs/other.html">Other Programs</page>
-</category>
-
-<category id="misc">
-<title>Apache Miscellaneous Documentation</title>
-<page separate="yes" href="misc/">Overview</page>
-<page href="cgi_path.html">PATH_INFO Changes in the CGI Environment</page>
-<page href="misc/relevant_standards.html">Relevant Standards</page>
-</category>
-
-<category id="modules">
-<title>Apache modules</title>
-<page href="mod/module-dict.html">Definitions of terms used to describe Apache modules</page>
-<page href="mod/directive-dict.html">Definitions of terms used to describe Apache directives</page>
-</category>
-
-<category id="developer">
-<title>Developer Documentation</title>
-<page separate="yes" href="developer/">Overview</page>
-<page href="developer/API.html">Apache API notes</page>
-<page href="developer/debugging.html">Debugging Memory Allocation in APR</page>
-<page href="developer/documenting.html">Documenting Apache 2.0</page>
-<page href="developer/hooks.html">Apache 2.0 Hook Functions</page>
-<page href="developer/modules.html">Converting Modules from Apache 1.3 to Apache 2.0</page>
-<page href="developer/request.html">Request Processing in Apache 2.0</page>
-<page href="developer/filters.html">How Filters Work in Apache 2.0</page>
-</category>
-
-<category id="index">
-<title>Glossary and Index</title>
-<page href="glossary.html">Glossary</page>
-<page href="mod/">Module index</page>
-<page href="mod/directives.html">Directive index</page>
-<page href="mod/quickreference.html">Directive Quick-Reference</page>
-</category>
-
-</sitemap>
diff --git a/docs/manual/sitemap.xml.de b/docs/manual/sitemap.xml.de
deleted file mode 100644
index f55f8ffc35..0000000000
--- a/docs/manual/sitemap.xml.de
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE sitemap SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.37 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<sitemap metafile="sitemap.xml.meta">
-
- <title>Seitenindex</title>
-
-<summary>
-<p>Diese Seite verzeichnet die zur Zeit verf&#252;gbaren Dokumente der
-<a href="./">Dokumentation zum Apache HTTP Server Version 2.1</a>.</p>
-</summary>
-
-<category id="release">
-<title>Hinweise zur Version</title>
-<page href="upgrading.html">Upgrade von 1.3 auf 2.0</page>
-<page href="new_features_2_0.html">Neue Funktionen in Version 2.0</page>
-<page href="license.html">Apache-Lizenz</page>
-</category>
-
-<category id="using">
-<title>Bedienung des Apache HTTP Servers</title>
-<page href="install.html">Kompilieren und Installieren</page>
-<page href="invoking.html">Apache starten</page>
-<page href="stopping.html">Beenden und Neustarten des Servers</page>
-<page href="configuring.html">Konfigurationsdateien</page>
-<page href="sections.html">Konfigurationsabschnitte</page>
-<page href="server-wide.html">Serverweite Konfiguration</page>
-<page href="logs.html">Log-Dateien</page>
-<page href="urlmapping.html">URLs auf das Dateisystem abbilden</page>
-<page href="misc/security_tips.html">Tipps zur Sicherheit</page>
-<page href="dso.html">Dynamic Shared Object (DSO)</page>
-<page href="content-negotiation.html">Content Negotiation</page>
-<page href="custom-error.html">Individuelle Fehlermeldungen</page>
-<page href="bind.html">Bestimmen der vom Apache verwendeten Adressen und Ports</page>
-<page href="mpm.html">Multi-Processing-Module (MPMs)</page>
-<page href="env.html">Umgebungsvariablen</page>
-<page href="handler.html">Handler</page>
-<page href="filter.html">Filter</page>
-<page href="suexec.html">suEXEC Unterst&#252;tzung</page>
-<page href="misc/perf-tuning.html">Performance-Hinweise</page>
-<page href="misc/rewriteguide.html">Einf&#252;hrung in die URL-Manipulation</page>
-</category>
-
-<category id="vhosts">
-<title>Apache-Dokumentation zu virtuellen Hosts</title>
-<page separate="yes" href="vhosts/">&#220;bersicht</page>
-<page href="vhosts/name-based.html">Namensbasierte virtuelle Hosts</page>
-<page href="vhosts/ip-based.html">IP-basierte virtuelle Hosts</page>
-<page href="vhosts/mass.html">Dynamisch konfiguriertes Massen-Virtual-Hosting</page>
-<page href="vhosts/examples.html">Beispiele f&uuml;r virtuelle Hosts in
- typischen Installationen</page>
-<page href="vhosts/details.html">Tiefergehende Er&ouml;rterung der Zuweisung
- virtueller Hosts</page>
-<page href="vhosts/fd-limits.html">Datei-Deskriptor-Begrenzungen</page>
-<page href="dns-caveats.html">Probleme bez&#252;glich DNS und Apache</page>
-</category>
-
-
-<category id="faq">
-<title>H&#228;ufig gestellte Fragen (FAQ)</title>
-<page href="faq/">&#220;bersicht</page>
-<page href="faq/support.html">Support</page>
-<page href="faq/error.html">Fehlermeldungen</page>
-</category>
-
-<category id="ssl">
-<title>SSL/TLS-Verschl&#252;sselung des Apache</title>
-<page separate="yes" href="ssl/">&#220;bersicht</page>
-<page href="ssl/ssl_intro.html">SSL/TLS-Verschl&#252;sselung: Einf&#252;hrung</page>
-<page href="ssl/ssl_compat.html">SSL/TLS-Verschl&#252;sselung: Kompatibilit&#228;t</page>
-<page href="ssl/ssl_howto.html">SSL/TLS-Verschl&#252;sselung: Praxis</page>
-<page href="ssl/ssl_faq.html">SSL/TLS-Verschl&#252;sselung: FAQ</page>
-</category>
-
-<category id="howto">
-<title>Praxis / Anleitungen</title>
-<page separate="yes" href="howto/">&#220;bersicht</page>
-<page href="howto/auth.html">Authentisierung, Autorisierung und Zugriffskontrolle</page>
-<page href="howto/cgi.html">Dynamische Inhalte mit CGI</page>
-<page href="howto/ssi.html">Einf&#252;hrung in Server Side Includes</page>
-<page href="howto/htaccess.html">.htaccess-Dateien</page>
-<page href="howto/public_html.html">Web-Verzeichnisse f&#252;r Benutzer</page>
-</category>
-
-<category id="platform">
-<title>Plattform-spezifische Anmerkungen</title>
-<page separate="yes" href="platform/">&#220;bersicht</page>
-<page href="platform/windows.html">Apache unter Microsoft
-Windows einsetzen</page>
-<page href="platform/win_compiling.html">Kompilieren des Apache f&#252;r
-Microsoft Windows</page>
-<page href="platform/netware.html">Apache unter Novell NetWare einsetzen</page>
-<page href="platform/perf-hp.html">Einen Hochleistungs-Web-Server auf
-HPUX betreiben</page>
-<page href="platform/ebcdic.html">Die Apache EBCDIC-Portierung</page>
-</category>
-
-<category id="programs">
-<title>Apache HTTP Server und Hilfsprogramme</title>
-<page separate="yes" href="programs/">&#220;bersicht</page>
-<page href="programs/httpd.html">httpd</page>
-<page href="programs/ab.html">ab</page>
-<page href="programs/apachectl.html">apachectl</page>
-<page href="programs/apxs.html">apxs</page>
-<page href="programs/configure.html">configure</page>
-<page href="programs/dbmmanage.html">dbmmanage</page>
-<page href="programs/htdigest.html">htdigest</page>
-<page href="programs/htpasswd.html">htpasswd</page>
-<page href="programs/logresolve.html">logresolve</page>
-<page href="programs/rotatelogs.html">rotatelogs</page>
-<page href="programs/suexec.html">suexec</page>
-<page href="programs/other.html">Sonstige Programme</page>
-</category>
-
-<category id="misc">
-<title>Weitere Apache-Dokumentationen</title>
-<page separate="yes" href="misc/">&#220;bersicht</page>
-<page href="cgi_path.html">PATH_INFO-&#196;nderungen in der CGI-Umgebung</page>
-<page href="misc/relevant_standards.html">Wichtige Standards</page>
-</category>
-
-<category id="modules">
-<title>Apache-Module</title>
-<page href="mod/module-dict.html">Erkl&#228;rung der Fachbegriffe zu Apache-Modulen</page>
-<page href="mod/directive-dict.html">Erkl&#228;rung der Fachbegriffe zu Apache-Direktiven</page>
-</category>
-
-<category id="developer">
-<title>Dokumentation f&#252;r Entwickler</title>
-<page separate="yes" href="developer/">&#220;bersicht</page>
-<page href="developer/API.html">Anmerkungen zur Apache-API</page>
-<page href="developer/debugging.html">Debuggen der Speicher-Belegung in der APR </page>
-<page href="developer/documenting.html">Apache 2.0 dokumentieren</page>
-<page href="developer/hooks.html">Hook-Funktionen des Apache 2.0 </page>
-<page href="developer/modules.html">Module von Apache 1.3 nach Apache 2.0 konvertieren</page>
-<page href="developer/request.html">Verarbeitung der Anfragen im Apache 2.0</page>
-<page href="developer/filters.html">Wie Filter im Apache 2.0 arbeiten</page>
-</category>
-
-<category id="index"><title>Glossar und Index</title>
-<page href="glossary.html">Glossar</page>
-<page href="mod/">Modul-Index</page>
-<page href="mod/directives.html">Direktiven-Index</page>
-<page href="mod/quickreference.html">Kurzreferenz der Direktiven</page>
-</category>
-
-</sitemap>
diff --git a/docs/manual/sitemap.xml.es b/docs/manual/sitemap.xml.es
deleted file mode 100644
index 71b3a7797d..0000000000
--- a/docs/manual/sitemap.xml.es
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE sitemap SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.37 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<sitemap metafile="sitemap.xml.meta">
-
- <title>Mapa de este sitio web</title>
-
-<summary>
-<p>Esta p&#225;gina contiene la lista con los documentos actualmente
-disponibles de la <a href="./">Versi&#243;n 2.1 de la Documentaci&#243;n del
-Servidor HTTP Apache</a>.</p>
-</summary>
-
-<category id="release">
-<title>Notas de la Versi&#243;n</title>
-<page href="upgrading.html">Pasar a usar Apache 2.0 desde Apache 1.3</page>
-<page href="new_features_2_0.html">Nuevas funcionalidades de Apache 2.0</page>
-<page href="license.html">Licencia Apache</page>
-</category>
-
-<category id="using">
-<title>Funcionamiento del Servidor HTTP Apache</title>
-<page href="install.html">Compilaci&#243;n e Instalaci&#243;n de Apache</page>
-<page href="invoking.html">Iniciar Apache</page>
-<page href="stopping.html">Parar y reiniciar Apache</page>
-<page href="configuring.html">Ficheros de Configuraci&#243;n</page>
-<page href="sections.html">Funcionamiento de las secciones Directory, Location y Files</page>
-<page href="server-wide.html">Configuraci&#243;n B&#225;sica de Apache</page>
-<page href="logs.html">Archivos Log</page>
-<page href="urlmapping.html">Mapear URLs a ubicaciones de un sistema de ficheros</page>
-<page href="misc/security_tips.html">Consejos de Seguridad</page>
-<page href="dso.html">Soporte de Objetos Din&#225;micos Compartidos (DSO)</page>
-<page href="content-negotiation.html">Negociaci&#243;n de Contenido</page>
-<page href="custom-error.html">Mensajes de Error Personalizados</page>
-<page href="bind.html">Fijar las direcciones y los puertos que usa Apache</page>
-<page href="mpm.html">M&#243;dulos de Multiproceso (MPMs)</page>
-<page href="env.html">Variables de entorno en Apache</page>
-<page href="handler.html">El uso de Handlers en Apache</page>
-<page href="filter.html">Filtros</page>
-<page href="suexec.html">Soporte de suEXEC</page>
-<page href="misc/perf-tuning.html">Rendimiento del servidor</page>
-<page href="misc/rewriteguide.html">Documentaci&#243;n adicional sobre mod_rewrite</page>
-</category>
-
-<category id="vhosts">
-<title>Documuentaci&#243;n sobre Hosting Virtual en Apache</title>
-<page separate="yes" href="vhosts/">Visi&#243;n General</page>
-<page href="vhosts/name-based.html">Hosting Virtual basado en nombres</page>
-<page href="vhosts/ip-based.html">Soporte de Hosting Virtual Basado en IPs</page>
-<page href="vhosts/mass.html">Configurar de forma Din&#225;mica el Hosting Virtual masivo en Apache</page>
-<page href="vhosts/examples.html">Ejemplos de Hosting Virtual</page>
-<page href="vhosts/details.html">Discusi&#243;n en profundidad sobre los tipos de Hosting Virtual</page>
-<page href="vhosts/fd-limits.html">Limitaciones de los descriptores de ficheros</page>
-<page href="dns-caveats.html">Asuntos relacionados con DNS y Apache</page>
-</category>
-
-<category id="faq">
-<title>Preguntas M&#225;s Frecuentes sobre Apache</title>
-<page href="faq/">Visi&#243;n General</page>
-<page href="faq/support.html">Soporte</page>
-<page href="faq/error.html">Mensajes de error</page>
-</category>
-
-<category id="ssl">
-<title>Encriptado SSL/TLS con Apache</title>
-<page separate="yes" href="ssl/">Visi&#243;n General</page>
-<page href="ssl/ssl_intro.html">Encriptado SSL/TLS: Introducci&#243;n</page>
-<page href="ssl/ssl_compat.html">Encriptado SSL/TLS: Compatibilidad</page>
-<page href="ssl/ssl_howto.html">Encriptado SSL/TLS: How-To</page>
-<page href="ssl/ssl_faq.html">Encriptado SSL/TLS: Preguntas Frecuentes</page>
-</category>
-
-<category id="howto">
-<title>Gu&#237;as, Tutoriales, y HowTos</title>
-<page separate="yes" href="howto/">Visi&#243;n General</page>
-<page href="howto/auth.html">Autentificaci&#243;n</page>
-<page href="howto/cgi.html">Contenido Din&#225;mico con CGIs</page>
-<page href="howto/ssi.html">Introducci&#243;n a Server Side Includes</page>
-<page href="howto/htaccess.html">Archivos .htaccess</page>
-<page href="howto/public_html.html">Directorios web para cada usuario</page>
-</category>
-
-<category id="platform">
-<title>Notas espec&#237;ficas sobre plataformas</title> <page separate="yes"
-href="platform/">Visi&#243;n General</page> <page
-href="platform/windows.html">Usar Apache con Microsoft Windows</page>
-<page href="platform/win_compiling.html">Compilar Apache para
-Microsoft Windows</page> <page href="platform/netware.html">Usar
-Apache con Novell NetWare</page> <page
-href="platform/perf-hp.html">Servidor Web de alto rendimiento con
-HPUX</page> <page href="platform/ebcdic.html">La versi&#243;n EBCDIC de
-Apache</page>
-</category>
-
-<category id="programs">
-<title>Programas de soporte y el Servidor HTTP Apache</title>
-<page separate="yes" href="programs/">Visi&#243;n General</page>
-<page href="programs/httpd.html">P&#225;gina de Ayuda: httpd</page>
-<page href="programs/ab.html">P&#225;gina de Ayuda: ab</page>
-<page href="programs/apachectl.html">P&#225;gina de Ayuda: apachectl</page>
-<page href="programs/apxs.html">P&#225;gina de Ayuda: apxs</page>
-<page href="programs/configure.html">P&#225;gina de Ayuda: configure</page>
-<page href="programs/dbmmanage.html">P&#225;gina de Ayuda: dbmmanage</page>
-<page href="programs/htdigest.html">P&#225;gina de Ayuda: htdigest</page>
-<page href="programs/htpasswd.html">P&#225;gina de Ayuda: htpasswd</page>
-<page href="programs/logresolve.html">P&#225;gina de Ayuda: logresolve</page>
-<page href="programs/rotatelogs.html">P&#225;gina de Ayuda: rotatelogs</page>
-<page href="programs/suexec.html">P&#225;gina de Ayuda: suexec</page>
-<page href="programs/other.html">Otros Programas</page>
-</category>
-
-<category id="misc">
-<title>Documentaci&#243;n adicional sobre Apache</title>
-<page separate="yes" href="misc/">Visi&#243;n General</page>
-<page href="cgi_path.html">Cambios en PATH_INFO en el entorno CGI</page>
-<page href="misc/relevant_standards.html">Est&#225;ndares Importantes</page>
-</category>
-
-<category id="modules">
-<title>M&#243;dulos de Apache</title>
-<page href="mod/module-dict.html">Definiciones de t&#233;rminos usados
-para describir los m&#243;dulos de Apache</page>
-<page href="mod/directive-dict.html">Definiciones de t&#233;rminos
-usados para describir las directivas de Apache</page>
-</category>
-
-<category id="developer">
-<title>Documentaci&#243;n para desarrolladores</title>
-<page separate="yes" href="developer/">Visi&#243;n General</page>
-<page href="developer/API.html">Notas sobre la API de Apache</page>
-<page href="developer/debugging.html">Debugging la Reserva de Memoria en APR</page>
-<page href="developer/documenting.html">Documentando Apache 2.0</page>
-<page href="developer/hooks.html">Funciones Hook de Apache 2.0</page>
-<page href="developer/modules.html">Convertir M&#243;dulos de Apache 1.3 a Apache 2.0</page>
-<page href="developer/request.html">Procesamiento de Peticiones en Apache 2.0</page>
-<page href="developer/filters.html">Funcionamiento de los filtros en Apache 2.0</page>
-</category>
-
-<category id="index">
-<title>Glosario e &#205;ndice</title>
-<page href="glossary.html">Glosario</page>
-<page href="mod/">&#205;ndice de M&#243;dulos</page>
-<page href="mod/directives.html">&#205;ndice de Directivas</page>
-<page href="mod/quickreference.html">Gu&#237;a R&#225;pida de
-Referencia de Directivas</page>
-</category>
-
-</sitemap>
-
diff --git a/docs/manual/sitemap.xml.ja b/docs/manual/sitemap.xml.ja
deleted file mode 100644
index 8a799ea861..0000000000
--- a/docs/manual/sitemap.xml.ja
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE sitemap SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.37 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<sitemap metafile="sitemap.xml.meta">
-
- <title>Site Map</title>
-
-<summary>
-<p>$B$3$N%Z!<%8$O8=;~E@$GMxMQ2DG=$J(B
-<a href="./">Apache HTTP $B%5!<%P%P!<%8%g%s(B 2.1 $B$N%I%-%e%a%s%F!<%7%g%s(B</a>
-$B$N0lMw$G$9!#(B</p>
-</summary>
-
-<category id="release">
-<title>$B%j%j!<%9$N%a%b(B</title>
-<page href="upgrading.html">1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B</page>
-<page href="new_features_2_0.html">Apache 2.0 $B$N?75!G=(B</page>
-<page href="license.html">Apache License</page>
-</category>
-
-<category id="using">
-<title>Apache HTTP $B%5!<%P$N;HMQ(B</title>
-<page href="install.html">Apache $B$N%3%s%Q%$%k$H%$%s%9%H!<%k(B</page>
-<page href="invoking.html">Apache $B$N5/F0(B</page>
-<page href="stopping.html">$B%5!<%P$NDd;_$H:F5/F0(B</page>
-<page href="configuring.html">$B@_Dj%U%!%$%k(B</page>
-<page href="sections.html">Directory, Location, Files $B%;%/%7%g%s$NF0:nJ}K!(B</page>
-<page href="server-wide.html">$B%5!<%PA4BN$N@_Dj(B</page>
-<page href="logs.html">$B%m%0%U%!%$%k(B</page>
-<page href="urlmapping.html">URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%W(B</page>
-<page href="misc/security_tips.html">$B%;%-%e%j%F%#$N%3%D(B</page>
-<page href="dso.html">$BF0E*6&M-%*%V%8%'%/%H(B (DSO) $B%5%]!<%H(B</page>
-<page href="content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</page>
-<page href="custom-error.html">$B%+%9%?%`%(%i!<%l%9%]%s%9(B</page>
-<page href="bind.html">Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</page>
-<page href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)</page>
-<page href="env.html">Apache $B$K$*$1$k4D6-JQ?t(B</page>
-<page href="handler.html">Apache $B$N%O%s%I%i$N;HMQ(B</page>
-<page href="filter.html">$B%U%#%k%?(B</page>
-<page href="suexec.html">suEXEC $B%5%]!<%H(B</page>
-<page href="misc/perf-tuning.html">$B@-G=$K4X$9$k%R%s%H(B</page>
-<page href="misc/rewriteguide.html">URL $B%j%i%$%H%,%$%I(B</page>
-</category>
-
-<category id="vhosts">
-<title>Apache $B%P!<%A%c%k%[%9%H%I%-%e%a%s%H(B</title>
-<page separate="yes" href="vhosts/">$B35N,(B</page>
-<page href="vhosts/name-based.html">$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B</page>
-<page href="vhosts/ip-based.html">IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$N%5%]!<%H(B</page>
-<page href="vhosts/mass.html">$BF0E*$K@_Dj$5$l$?Bg5,LO%P!<%A%c%k%[%9%H(B</page>
-<page href="vhosts/examples.html">VirtualHost $B$NNc(B</page>
-<page href="vhosts/details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$N>\$7$$@bL@(B</page>
-<page href="vhosts/fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</page>
-<page href="dns-caveats.html">DNS $B$H(B Apache $B$H$K4X78$9$kLdBj(B</page>
-</category>
-
-<category id="faq">
-<title>Apache $B%5!<%P$N$h$/$"$k<ALd(B</title>
-<page href="faq/">$B35N,(B</page>
-<page href="faq/support.html">$B%5%]!<%H(B</page>
-<page href="faq/error.html">$B%(%i!<%a%C%;!<%8(B</page>
-</category>
-
-<category id="ssl">
-<title>Apache $B$N(B SSL/TLS $B0E9f2=(B</title>
-<page separate="yes" href="ssl/">$B35N,(B</page>
-<page href="ssl/ssl_intro.html">SSL/TLS $B0E9f2=(B: $BF~Lg(B</page>
-<page href="ssl/ssl_compat.html">SSL/TLS $B0E9f2=(B: $B8_49@-(B</page>
-<page href="ssl/ssl_howto.html">SSL/TLS $B0E9f2=(B: $B%O%&%D!<(B</page>
-<page href="ssl/ssl_faq.html">SSL/TLS $B0E9f2=(B: FAQ</page>
-</category>
-
-<category id="howto">
-<title>$B%,%$%I!"%A%e!<%H%j%"%k!"%O%&%D!<(B</title>
-<page separate="yes" href="howto/">$B35N,(B</page>
-<page href="howto/auth.html">$BG'>Z(B</page>
-<page href="howto/cgi.html">CGI $B$K$h$kF0E*%3%s%F%s%D(B</page>
-<page href="howto/ssi.html">Server Side Includes $BF~Lg(B</page>
-<page href="howto/htaccess.html">.htaccess $B%U%!%$%k(B</page>
-<page href="howto/public_html.html">$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</page>
-</category>
-
-<category id="platform">
-<title>$B%W%i%C%H%U%)!<%`8GM-$N>pJs(B</title>
-<page separate="yes" href="platform/">$B35N,(B</page>
-<page href="platform/windows.html">Microsoft Windows $B$G$N(B Apache $B$N;HMQ(B</page>
-<page href="platform/win_compiling.html">Microsoft Windows $B$G$N(B Apache
-$B$N%3%s%Q%$%k(B</page>
-<page href="platform/netware.html">Novell NetWare $B$G(B Apache $B$r;H$&(B</page>
-<page href="platform/perf-hp.html">HPUX $B$G9b@-G=%&%'%V%5!<%P$r<B9T$9$k(B</page>
-<page href="platform/ebcdic.html">EBCDIC $BHG(B Apache</page>
-</category>
-
-<category id="programs">
-<title>Apache HTTP $B%5!<%P$H%5%]!<%H%W%m%0%i%`(B</title>
-<page separate="yes" href="programs/">$B35N,(B</page>
-<page href="programs/httpd.html">$B%^%K%e%"%k%Z!<%8(B: httpd</page>
-<page href="programs/ab.html">$B%^%K%e%"%k%Z!<%8(B: ab</page>
-<page href="programs/apachectl.html">$B%^%K%e%"%k%Z!<%8(B: apachectl</page>
-<page href="programs/apxs.html">$B%^%K%e%"%k%Z!<%8(B: apxs</page>
-<page href="programs/configure.html">$B%^%K%e%"%k%Z!<%8(B: configure</page>
-<page href="programs/dbmmanage.html">$B%^%K%e%"%k%Z!<%8(B: dbmmanage</page>
-<page href="programs/htdigest.html">$B%^%K%e%"%k%Z!<%8(B: htdigest</page>
-<page href="programs/htpasswd.html">$B%^%K%e%"%k%Z!<%8(B: htpasswd</page>
-<page href="programs/logresolve.html">$B%^%K%e%"%k%Z!<%8(B: logresolve</page>
-<page href="programs/rotatelogs.html">$B%^%K%e%"%k%Z!<%8(B: rotatelogs</page>
-<page href="programs/suexec.html">$B%^%K%e%"%k%Z!<%8(B: suexec</page>
-<page href="programs/other.html">$BB>$N%W%m%0%i%`(B</page>
-</category>
-
-<category id="misc">
-<title>Apache $B$=$NB>(B</title>
-<page separate="yes" href="misc/">$B35N,(B</page>
-<page href="cgi_path.html">CGI $B4D6-$N(B PATH_INFO $B$NJQ99(B</page>
-<page href="misc/relevant_standards.html">$B4XO"$9$kI8=`5,3J(B</page>
-</category>
-
-<category id="modules">
-<title>Apache $B%b%8%e!<%k(B</title>
-<page href="mod/module-dict.html">Apache $B%G%#%l%/%F%#%V$N@bL@$K;H$o$l$kMQ8l(B</page>
-<page href="mod/directive-dict.html">Apache $B%G%#%l%/%F%#%V$r@bL@$K;H$o$l$kMQ8l(B</page>
-</category>
-
-<category id="developer">
-<title>$B3+H/<T$N$?$a$N%I%-%e%a%s%H(B</title>
-<page separate="yes" href="developer/">$B35N,(B</page>
-<page href="developer/API.html">Apache API $B%a%b(B</page>
-<page href="developer/debugging.html">APR
-$B$N%a%b%j%"%m%1!<%7%g%s$N%G%P%C%0(B</page>
-<page href="developer/documenting.html">Apache 2.0 $B$N@bL@$r=q$/(B</page>
-<page href="developer/hooks.html">Apache 2.0 $B%U%C%/4X?t(B</page>
-<page href="developer/modules.html">Apache 1.3 $B$+$i(B Apache 2.0 $B$K%b%8%e!<%k$r(B
-$B0\?"$9$k(B</page>
-<page href="developer/request.html">Apache 2.0 $B$N%j%/%(%9%H=hM}(B</page>
-<page href="developer/filters.html">Apache 2.0 $B$N%U%#%k%?$NF0:n$N;EJ}(B</page>
-</category>
-
-<category id="index">
-<title>$BMQ8l=8$H:w0z(B</title>
-<page href="glossary.html">$BMQ8l=8(B</page>
-<page href="mod/">$B%b%8%e!<%k:w0z(B</page>
-<page href="mod/directives.html">$B%G%#%l%/%F%#%V:w0z(B</page>
-<page href="mod/quickreference.html">$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</page>
-</category>
-
-</sitemap>
diff --git a/docs/manual/sitemap.xml.ko b/docs/manual/sitemap.xml.ko
deleted file mode 100644
index c4402d654d..0000000000
--- a/docs/manual/sitemap.xml.ko
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE sitemap SYSTEM "./style/sitemap.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.37 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<sitemap metafile="sitemap.xml.meta">
-
- <title>»çÀÌÆ®¸Ê</title>
-
-<summary>
-<p>ÀÌ ÆäÀÌÁö´Â ÇöÀç
-<a href="./">Apache HTTP Server Version 2.1 ¹®¼­</a> ¸ñ·ÏÀ»
-º¸¿©ÁØ´Ù.</p>
-</summary>
-
-<category id="release">
-<title>¹ßÇ¥¹®</title>
-<page href="upgrading.html">1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å</page>
-<page href="new_features_2_0.html">¾ÆÆÄÄ¡ 2.0ÀÇ »õ·Î¿î ±â´É</page>
-<page href="license.html">¾ÆÆÄÄ¡ ¶óÀ̼±½º</page>
-</category>
-
-<category id="using">
-<title>¾ÆÆÄÄ¡ À¥¼­¹ö »ç¿ëÇϱâ</title>
-<page href="install.html">¾ÆÆÄÄ¡ ÄÄÆÄÀÏ°ú ¼³Ä¡</page>
-<page href="invoking.html">¾ÆÆÄÄ¡ ½ÃÀÛ</page>
-<page href="stopping.html">¼­¹ö Áß´Ü°ú Àç½ÃÀÛ</page>
-<page href="configuring.html">¼³Á¤ÆÄÀÏ</page>
-<page href="sections.html">¾î¶»°Ô Directory, Location, Files ¼½¼ÇÀÌ
-µ¿ÀÛÇϳª</page>
-<page href="server-wide.html">¼­¹ö Àü¿ª ¼³Á¤</page>
-<page href="logs.html">·Î±×ÆÄÀÏ</page>
-<page href="urlmapping.html">URLÀ» ÆÄÀϽýºÅÛ¿¡ ´ëÀÀ</page>
-<page href="misc/security_tips.html">º¸¾È ÆÁ</page>
-<page href="dso.html">µ¿Àû°øÀ¯°´Ã¼ (DSO) Áö¿ø</page>
-<page href="content-negotiation.html">³»¿ëÇù»ó (content negotiation)</page>
-<page href="custom-error.html">»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä</page>
-<page href="bind.html">¾ÆÆÄÄ¡°¡ »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ® ÁöÁ¤</page>
-<page href="mpm.html">´ÙÁß󸮸ðµâ (MPM)</page>
-<page href="env.html">¾ÆÆÄÄ¡ÀÇ È¯°æº¯¼ö</page>
-<page href="handler.html">¾ÆÆÄÄ¡¿¡¼­ Çڵ鷯 »ç¿ë</page>
-<page href="filter.html">ÇÊÅÍ</page>
-<page href="suexec.html">suEXEC Áö¿ø</page>
-<page href="misc/perf-tuning.html">¼º´ÉÇâ»ó ÈùÆ®</page>
-<page href="misc/rewriteguide.html">URL ÀçÀÛ¼º(rewriting) Áöħ¼­</page>
-</category>
-
-<category id="vhosts">
-<title>¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</title>
-<page separate="yes" href="vhosts/">°³¿ä</page>
-<page href="vhosts/name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ®</page>
-<page href="vhosts/ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</page>
-<page href="vhosts/mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ</page>
-<page href="vhosts/examples.html">°¡»óÈ£½ºÆ® ¿¹</page>
-<page href="vhosts/details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</page>
-<page href="vhosts/fd-limits.html">ÆÄÀϱâ¼úÀÚ(file descriptor) ÇÑ°è</page>
-<page href="dns-caveats.html">DNS¿Í ¾ÆÆÄÄ¡¿Í °ü·ÃµÈ »çÇ×</page>
-</category>
-
-<category id="faq">
-<title>¾ÆÆÄÄ¡ ¼­¹ö¿¡ ´ëÇØ ÀÚÁÖ ¹°¾îº¸´Â Áú¹®</title>
-<page href="faq/">°³¿ä</page>
-<page href="faq/support.html">Áö¿ø</page>
-<page href="faq/error.html">¿À·ù¹®</page>
-</category>
-
-<category id="ssl">
-<title>¾ÆÆÄÄ¡ SSL/TLS ¾Ïȣȭ</title>
-<page separate="yes" href="ssl/">¼Ò°³</page>
-<page href="ssl/ssl_intro.html">SSL/TLS ¾Ïȣȭ: ¼Ò°³</page>
-<page href="ssl/ssl_compat.html">SSL/TLS ¾Ïȣȭ: ȣȯ¼º</page>
-<page href="ssl/ssl_howto.html">SSL/TLS ¾Ïȣȭ: How-To</page>
-<page href="ssl/ssl_faq.html">SSL/TLS ¾Ïȣȭ: FAQ</page>
-</category>
-
-<category id="howto">
-<title>Áöħ¼­, ÅõÅ丮¾ó, HowTo</title>
-<page separate="yes" href="howto/">°³¿ä</page>
-<page href="howto/auth.html">ÀÎÁõ</page>
-<page href="howto/cgi.html">CGI·Î µ¿Àû ÆäÀÌÁö »ý¼º</page>
-<page href="howto/ssi.html">Server Side Includes ¼Ò°³</page>
-<page href="howto/htaccess.html">.htaccess ÆÄÀÏ</page>
-<page href="howto/public_html.html">»ç¿ëÀÚº° À¥µð·ºÅ丮</page>
-</category>
-
-<category id="platform">
-<title>Ç÷¡Æûº° ¼³¸í</title>
-<page separate="yes" href="platform/">°³¿ä</page>
-<page href="platform/windows.html">Microsoft Windows¿¡¼­ ¾ÆÆÄÄ¡
-»ç¿ëÇϱâ</page>
-<page href="platform/win_compiling.html">Microsoft Windows¿¡¼­
-¾ÆÆÄÄ¡ ÄÄÆÄÀÏÇϱâ</page>
-<page href="platform/netware.html">Novell NetWare¿¡¼­ ¾ÆÆÄÄ¡
-»ç¿ëÇϱâ</page>
-<page href="platform/perf-hp.html">HPUX¿¡¼­ °í¼º´É À¥¼­¹ö
-½ÇÇàÇϱâ</page>
-<page href="platform/ebcdic.html">¾ÆÆÄÄ¡ EBCDIC Æ÷ÆÃ</page>
-</category>
-
-<category id="programs">
-<title>¾ÆÆÄÄ¡ À¥¼­¹ö¿Í Áö¿ø ÇÁ·Î±×·¥</title>
-<page separate="yes" href="programs/">°³¿ä</page>
-<page href="programs/httpd.html">Manpage: httpd</page>
-<page href="programs/ab.html">Manpage: ab</page>
-<page href="programs/apachectl.html">Manpage: apachectl</page>
-<page href="programs/apxs.html">Manpage: apxs</page>
-<page href="programs/configure.html">Manpage: configure</page>
-<page href="programs/dbmmanage.html">Manpage: dbmmanage</page>
-<page href="programs/htdigest.html">Manpage: htdigest</page>
-<page href="programs/htpasswd.html">Manpage: htpasswd</page>
-<page href="programs/logresolve.html">Manpage: logresolve</page>
-<page href="programs/rotatelogs.html">Manpage: rotatelogs</page>
-<page href="programs/suexec.html">Manpage: suexec</page>
-<page href="programs/other.html">´Ù¸¥ ÇÁ·Î±×·¥µé</page>
-</category>
-
-<category id="misc">
-<title>±âŸ ¾ÆÆÄÄ¡ ¹®¼­</title>
-<page separate="yes" href="misc/">°³¿ä</page>
-<page href="cgi_path.html">CGI ȯ°æ¿¡¼­ PATH_INFOÀÇ º¯È­</page>
-<page href="misc/relevant_standards.html">°ü·ÃµÈ Ç¥Áصé</page>
-</category>
-
-<category id="modules">
-<title>¾ÆÆÄÄ¡ ¸ðµâ</title>
-<page href="mod/module-dict.html">¾ÆÆÄÄ¡ ¸ðµâÀ» ¼³¸íÇϴµ¥ »ç¿ëÇÑ
-¿ë¾îÁ¤ÀÇ</page>
-<page href="mod/directive-dict.html">¾ÆÆÄÄ¡ Áö½Ã¾î¸¦ ¼³¸íÇϴµ¥
-»ç¿ëÇÑ ¿ë¾îÁ¤ÀÇ</page>
-</category>
-
-<category id="developer">
-<title>°³¹ßÀÚ ¹®¼­</title>
-<page separate="yes" href="developer/">°³¿ä</page>
-<page href="developer/API.html">Apache API ¼³¸í</page>
-<page href="developer/debugging.html">APRÀÇ ¸Þ¸ð¸®ÇÒ´ç µð¹ö±ë</page>
-<page href="developer/documenting.html">Apache 2.0 ¹®¼­È­</page>
-<page href="developer/hooks.html">Apache 2.0 ÈÅ(hook) ÇÔ¼ö</page>
-<page href="developer/modules.html">Apache 1.3¿¡¼­ Apache 2.0À¸·Î
-¸ðµâÀ» ¼öÁ¤Çϱâ</page>
-<page href="developer/request.html">Apache 2.0ÀÇ ¿äûó¸®</page>
-<page href="developer/filters.html">Apache 2.0ÀÇ ÇÊÅÍ µ¿ÀÛ¹ý</page>
-</category>
-
-<category id="index">
-<title>¿ë¾î¿Í »öÀÎ</title>
-<page href="glossary.html">¿ë¾î</page>
-<page href="mod/">¸ðµâ ¸ñ·Ï</page>
-<page href="mod/directives.html">Áö½Ã¾î ¸ñ·Ï</page>
-<page href="mod/quickreference.html">Áö½Ã¾î ºü¸¥ÂüÁ¶</page>
-</category>
-
-</sitemap>
diff --git a/docs/manual/sitemap.xml.meta b/docs/manual/sitemap.xml.meta
deleted file mode 100644
index f1d0af807a..0000000000
--- a/docs/manual/sitemap.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>sitemap</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/ssl/.cvsignore b/docs/manual/ssl/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/ssl/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/ssl/index.html b/docs/manual/ssl/index.html
deleted file mode 100644
index 39629cac71..0000000000
--- a/docs/manual/ssl/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/ssl/index.html.en b/docs/manual/ssl/index.html.en
deleted file mode 100644
index 494b398207..0000000000
--- a/docs/manual/ssl/index.html.en
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache SSL/TLS Encryption - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache SSL/TLS Encryption</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-
-<p>The Apache HTTP Server module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>
-provides an interface to the <a href="http://www.openssl.org/">OpenSSL</a> library, which provides
-Strong Encryption using the Secure Sockets Layer and Transport Layer
-Security protocols. The module and this documentation are based on
-Ralf S. Engelschall's mod_ssl project.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#documentation">Documentation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mod-ssl">mod_ssl</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="documentation" id="documentation">Documentation</a></h2>
-<ul>
-<li><a href="ssl_intro.html">Introduction</a></li>
-<li><a href="ssl_compat.html">Compatibility</a></li>
-<li><a href="ssl_howto.html">How-To</a></li>
-<li><a href="ssl_faq.html">Frequently Asked Questions</a></li>
-<li><a href="../glossary.html">Glossary</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mod-ssl" id="mod-ssl">mod_ssl</a></h2>
-<p>Extensive documentation on the directives and environment variables
-provided by this module is provided in the <a href="../mod/mod_ssl.html">mod_ssl reference documentation</a>.
-</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/index.html.ja.euc-jp b/docs/manual/ssl/index.html.ja.euc-jp
deleted file mode 100644
index 306685461c..0000000000
--- a/docs/manual/ssl/index.html.ja.euc-jp
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¤Î SSL/TLS °Å¹æ²½ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache ¤Î SSL/TLS °Å¹æ²½</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-
-<p>Apache HTTP ¥µ¡¼¥Ð¥â¥¸¥å¡¼¥ë <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ¤¬
-<a href="http://www.openssl.org/">OpenSSL</a>
-¥é¥¤¥Ö¥é¥ê¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄ󶡤·¤Æ¤¤¤Þ¤¹¤¬¡¢¤³¤ì¤Ï
-Secure Sockts Layer ¤È Transport Layer Security
-¥×¥í¥È¥³¥ë¤òÍѤ¤¤¿¶¯ÎϤʰŹ沽¤òÄ󶡤·¤Þ¤¹¡£
-¤³¤Î¥â¥¸¥å¡¼¥ë¤ä¤³¤Îʸ½ñ¤Ï Ralf S. Engelschall ¤Î mod_ssl
-¥×¥í¥¸¥§¥¯¥È¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#documentation">Documentation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mod-ssl">mod_ssl</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="documentation" id="documentation">Documentation</a></h2>
-<ul>
-<li><a href="ssl_intro.html">¤Ï¤¸¤á¤Ë</a></li>
-<li><a href="ssl_compat.html">¸ß´¹À­</a></li>
-<li><a href="ssl_howto.html">How-To</a></li>
-<li><a href="ssl_faq.html">¤è¤¯¤¢¤ë¼ÁÌä</a></li>
-<li><a href="../glossary.html">ÍѸì</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mod-ssl" id="mod-ssl">mod_ssl</a></h2>
-<p>¤³¤Î¥â¥¸¥å¡¼¥ë¤ÇÄ󶡤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä´Ä¶­ÊÑ¿ô¤Ë´Ø¤¹¤ë
-¾Ü¤·¤¤Ê¸½ñ¤Ï¡¢<a href="../mod/mod_ssl.html">mod_ssl
-¥ê¥Õ¥¡¥ì¥ó¥¹</a>¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/index.xml b/docs/manual/ssl/index.xml
deleted file mode 100644
index 4b8391ddb1..0000000000
--- a/docs/manual/ssl/index.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>Apache SSL/TLS Encryption</title>
-
-<summary>
-<p>The Apache HTTP Server module <module>mod_ssl</module>
-provides an interface to the <a
-href="http://www.openssl.org/">OpenSSL</a> library, which provides
-Strong Encryption using the Secure Sockets Layer and Transport Layer
-Security protocols. The module and this documentation are based on
-Ralf S. Engelschall's mod_ssl project.</p>
-</summary>
-
-<section id="documentation"><title>Documentation</title>
-<ul>
-<li><a href="ssl_intro.html">Introduction</a></li>
-<li><a href="ssl_compat.html">Compatibility</a></li>
-<li><a href="ssl_howto.html">How-To</a></li>
-<li><a href="ssl_faq.html">Frequently Asked Questions</a></li>
-<li><a href="../glossary.html">Glossary</a></li>
-</ul>
-</section>
-
-<section id="mod-ssl"><title>mod_ssl</title>
-<p>Extensive documentation on the directives and environment variables
-provided by this module is provided in the <a
-href="../mod/mod_ssl.html">mod_ssl reference documentation</a>.
-</p>
-</section>
-
-</manualpage>
-
-
diff --git a/docs/manual/ssl/index.xml.ja b/docs/manual/ssl/index.xml.ja
deleted file mode 100644
index 76c22e22b6..0000000000
--- a/docs/manual/ssl/index.xml.ja
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>Apache $B$N(B SSL/TLS $B0E9f2=(B</title>
-
-<summary>
-<p>Apache HTTP $B%5!<%P%b%8%e!<%k(B <module>mod_ssl</module> $B$,(B
-<a href="http://www.openssl.org/">OpenSSL</a>
-$B%i%$%V%i%j$X$N%$%s%?!<%U%'!<%9$rDs6!$7$F$$$^$9$,!"$3$l$O(B
-Secure Sockts Layer $B$H(B Transport Layer Security
-$B%W%m%H%3%k$rMQ$$$?6/NO$J0E9f2=$rDs6!$7$^$9!#(B
-$B$3$N%b%8%e!<%k$d$3$NJ8=q$O(B Ralf S. Engelschall $B$N(B mod_ssl
-$B%W%m%8%'%/%H$K4p$E$$$F$$$^$9!#(B</p>
-</summary>
-
-<section id="documentation"><title>Documentation</title>
-<ul>
-<li><a href="ssl_intro.html">$B$O$8$a$K(B</a></li>
-<li><a href="ssl_compat.html">$B8_49@-(B</a></li>
-<li><a href="ssl_howto.html">How-To</a></li>
-<li><a href="ssl_faq.html">$B$h$/$"$k<ALd(B</a></li>
-<li><a href="../glossary.html">$BMQ8l(B</a></li>
-</ul>
-</section>
-
-<section id="mod-ssl"><title>mod_ssl</title>
-<p>$B$3$N%b%8%e!<%k$GDs6!$5$l$k%G%#%l%/%F%#%V$d4D6-JQ?t$K4X$9$k(B
-$B>\$7$$J8=q$O!"(B<a href="../mod/mod_ssl.html">mod_ssl
-$B%j%U%!%l%s%9(B</a>$B$r$4Mw2<$5$$!#(B</p>
-</section>
-
-</manualpage>
-
-
diff --git a/docs/manual/ssl/index.xml.meta b/docs/manual/ssl/index.xml.meta
deleted file mode 100644
index 0ab0329f78..0000000000
--- a/docs/manual/ssl/index.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/ssl/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/ssl/ssl_compat.html b/docs/manual/ssl/ssl_compat.html
deleted file mode 100644
index 3a8ed1be8b..0000000000
--- a/docs/manual/ssl/ssl_compat.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: ssl_compat.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/ssl/ssl_compat.html.en b/docs/manual/ssl/ssl_compat.html.en
deleted file mode 100644
index c21e27c410..0000000000
--- a/docs/manual/ssl/ssl_compat.html.en
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>SSL/TLS Strong Encryption: Compatibility - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>SSL/TLS Strong Encryption: Compatibility</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_compat.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
-<blockquote>
-<p>All PCs are compatible. But some of
-them are more compatible than others.</p>
-<p class="cite">-- <cite>Unknown</cite></p>
-</blockquote>
-
-<p>
-This page covers backwards compatibility between mod_ssl and other
-SSL solutions. mod_ssl is not the only SSL solution for Apache; four
-additional products are (or were) also available: Ben Laurie's freely
-available <a href="http://www.apache-ssl.org/">Apache-SSL</a> (from
-where mod_ssl were originally derived in 1998), Red Hat's commercial
-<a href="http://www.redhat.com/products/product-details.phtml?id=rhsa">Secure
-Web Server</a> (which was based on mod_ssl), Covalent's commercial <a href="http://www.covalent.net/">Raven SSL Module</a> (also based on
-mod_ssl) and finally C2Net's (now Red Hat's) commercial product <a href="http://www.redhat.com/explore/stronghold/">Stronghold</a> (based
-on a different evolution branch named Sioux up to Stronghold 2.x and
-based on mod_ssl since Stronghold 3.x).</p>
-
-<p>
-mod_ssl mostly provides a superset of the functionality of all the other
-solutions, so it's simple to migrate from one of the older modules to
-mod_ssl. The configuration directives and environment variable names
-used by the older SSL solutions vary from those used in mod_ssl;
-mapping tables are included here to give the equivalents used by mod_ssl.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#configuration">Configuration Directives</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#variables">Environment Variables</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#customlog">Custom Log Functions</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuration" id="configuration">Configuration Directives</a></h2>
-<p>The mapping between configuration directives used by Apache-SSL
-1.x and mod_ssl 2.0.x is given in <a href="#table1">Table
-1</a>. The mapping from Sioux 1.x and Stronghold 2.x is only partial
-because of special functionality in these interfaces which mod_ssl
-doesn't provide.</p>
-
-
-<h3><a name="table1" id="table1">Table 1: Configuration Directive Mapping</a></h3>
-
-<table><tr class="header"><th>Old Directive</th><th>mod_ssl Directive</th><th>Comment</th></tr>
-<tr class="header"><th colspan="3">Apache-SSL 1.x &amp; mod_ssl 2.0.x compatibility:</th></tr>
-<tr><td><code>SSLEnable</code></td><td><code>SSLEngine on</code></td><td>compactified</td></tr>
-<tr class="odd"><td><code>SSLDisable</code></td><td><code>SSLEngine off</code></td><td>compactified</td></tr>
-<tr><td><code>SSLLogFile</code> <em>file</em></td><td><code>SSLLog</code> <em>file</em></td><td>compactified</td></tr>
-<tr class="odd"><td><code>SSLRequiredCiphers</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr><td><code>SSLRequireCipher</code> <em>c1</em> ...</td><td><code>SSLRequire %{SSL_CIPHER} in {"</code><em>c1</em><code>",
-...}</code></td><td>generalized</td></tr>
-<tr class="odd"><td><code>SSLBanCipher</code> <em>c1</em> ...</td><td><code>SSLRequire not (%{SSL_CIPHER} in {"</code><em>c1</em><code>",
-...})</code></td><td>generalized</td></tr>
-<tr><td><code>SSLFakeBasicAuth</code></td><td><code>SSLOptions +FakeBasicAuth</code></td><td>merged</td></tr>
-<tr class="odd"><td><code>SSLCacheServerPath</code> <em>dir</em></td><td>-</td><td>functionality removed</td></tr>
-<tr><td><code>SSLCacheServerPort</code> <em>integer</em></td><td>-</td><td>functionality removed</td></tr>
-<tr class="header"><th colspan="3">Apache-SSL 1.x compatibility:</th></tr>
-<tr class="odd"><td><code>SSLExportClientCertificates</code></td><td><code>SSLOptions +ExportCertData</code></td><td>merged</td></tr>
-<tr><td><code>SSLCacheServerRunDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr class="header"><th colspan="3">Sioux 1.x compatibility:</th></tr>
-<tr class="odd"><td><code>SSL_CertFile</code> <em>file</em></td><td><code>SSLCertificateFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_KeyFile</code> <em>file</em></td><td><code>SSLCertificateKeyFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CipherSuite</code> <em>arg</em></td><td><code>SSLCipherSuite</code> <em>arg</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_X509VerifyDir</code> <em>arg</em></td><td><code>SSLCACertificatePath</code> <em>arg</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_Log</code> <em>file</em></td><td><code>SSLLogFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_Connect</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_ClientAuth</code> <em>arg</em></td><td><code>SSLVerifyClient</code> <em>arg</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_X509VerifyDepth</code> <em>arg</em></td><td><code>SSLVerifyDepth</code> <em>arg</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_FetchKeyPhraseFrom</code> <em>arg</em></td><td>-</td><td>not directly mappable; use SSLPassPhraseDialog</td></tr>
-<tr><td><code>SSL_SessionDir</code> <em>dir</em></td><td>-</td><td>not directly mappable; use SSLSessionCache</td></tr>
-<tr class="odd"><td><code>SSL_Require</code> <em>expr</em></td><td>-</td><td>not directly mappable; use SSLRequire</td></tr>
-<tr><td><code>SSL_CertFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr class="odd"><td><code>SSL_KeyFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSL_X509VerifyPolicy</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr class="odd"><td><code>SSL_LogX509Attributes</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr class="header"><th colspan="3">Stronghold 2.x compatibility:</th></tr>
-<tr><td><code>StrongholdAccelerator</code> <em>engine</em></td><td><code>SSLCryptoDevice</code> <em>engine</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>StrongholdKey</code> <em>dir</em></td><td>-</td><td>functionality not needed</td></tr>
-<tr><td><code>StrongholdLicenseFile</code> <em>dir</em></td><td>-</td><td>functionality not needed</td></tr>
-<tr class="odd"><td><code>SSLFlag</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr><td><code>SSLSessionLockFile</code> <em>file</em></td><td><code>SSLMutex</code> <em>file</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSLCipherList</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr><td><code>RequireSSL</code></td><td><code>SSLRequireSSL</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSLErrorFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSLRoot</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr class="odd"><td><code>SSL_CertificateLogDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>AuthCertDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr class="odd"><td><code>SSL_Group</code> <em>name</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSLProxyMachineCertPath</code> <em>dir</em></td><td><code>SSLProxyMachineCertificatePath</code> <em>dir</em></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSLProxyMachineCertFile</code> <em>file</em></td><td><code>SSLProxyMachineCertificateFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr><td><code>SSLProxyCipherList</code> <em>spec</em></td><td><code>SSLProxyCipherSpec</code> <em>spec</em></td><td>renamed</td></tr>
-</table>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="variables" id="variables">Environment Variables</a></h2>
-
-<p>The mapping between environment variable names used by the older
-SSL solutions and the names used by mod_ssl is given in <a href="#table2">Table 2</a>.</p>
-
-<h3><a name="table2" id="table2">Table 2: Environment Variable Derivation</a></h3>
-
-<table><tr class="header"><th>Old Variable</th><th>mod_ssl Variable</th><th>Comment</th></tr>
-<tr><td><code>SSL_PROTOCOL_VERSION</code></td><td><code>SSL_PROTOCOL</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr><td><code>HTTPS_SECRETKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>HTTPS_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>HTTPS_CIPHER</code></td><td><code>SSL_CIPHER</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>HTTPS_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_CERTIFICATE</code></td><td><code>SSL_SERVER_CERT</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_CERT_START</code></td><td><code>SSL_SERVER_V_START</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_CERT_END</code></td><td><code>SSL_SERVER_V_END</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_CERT_SERIAL</code></td><td><code>SSL_SERVER_M_SERIAL</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_SIGNATURE_ALGORITHM</code></td><td><code>SSL_SERVER_A_SIG</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_DN</code></td><td><code>SSL_SERVER_S_DN</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_CN</code></td><td><code>SSL_SERVER_S_DN_CN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_EMAIL</code></td><td><code>SSL_SERVER_S_DN_Email</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_O</code></td><td><code>SSL_SERVER_S_DN_O</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_OU</code></td><td><code>SSL_SERVER_S_DN_OU</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_C</code></td><td><code>SSL_SERVER_S_DN_C</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_SP</code></td><td><code>SSL_SERVER_S_DN_SP</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_L</code></td><td><code>SSL_SERVER_S_DN_L</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IDN</code></td><td><code>SSL_SERVER_I_DN</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_ICN</code></td><td><code>SSL_SERVER_I_DN_CN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IEMAIL</code></td><td><code>SSL_SERVER_I_DN_Email</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_IO</code></td><td><code>SSL_SERVER_I_DN_O</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IOU</code></td><td><code>SSL_SERVER_I_DN_OU</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_IC</code></td><td><code>SSL_SERVER_I_DN_C</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_ISP</code></td><td><code>SSL_SERVER_I_DN_SP</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_IL</code></td><td><code>SSL_SERVER_I_DN_L</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CERTIFICATE</code></td><td><code>SSL_CLIENT_CERT</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_CERT_START</code></td><td><code>SSL_CLIENT_V_START</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_END</code></td><td><code>SSL_CLIENT_V_END</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_CERT_SERIAL</code></td><td><code>SSL_CLIENT_M_SERIAL</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_SIGNATURE_ALGORITHM</code></td><td><code>SSL_CLIENT_A_SIG</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_DN</code></td><td><code>SSL_CLIENT_S_DN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CN</code></td><td><code>SSL_CLIENT_S_DN_CN</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_EMAIL</code></td><td><code>SSL_CLIENT_S_DN_Email</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_O</code></td><td><code>SSL_CLIENT_S_DN_O</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_OU</code></td><td><code>SSL_CLIENT_S_DN_OU</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_C</code></td><td><code>SSL_CLIENT_S_DN_C</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_SP</code></td><td><code>SSL_CLIENT_S_DN_SP</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_L</code></td><td><code>SSL_CLIENT_S_DN_L</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_IDN</code></td><td><code>SSL_CLIENT_I_DN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_ICN</code></td><td><code>SSL_CLIENT_I_DN_CN</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_IEMAIL</code></td><td><code>SSL_CLIENT_I_DN_Email</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IO</code></td><td><code>SSL_CLIENT_I_DN_O</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_IOU</code></td><td><code>SSL_CLIENT_I_DN_OU</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IC</code></td><td><code>SSL_CLIENT_I_DN_C</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_ISP</code></td><td><code>SSL_CLIENT_I_DN_SP</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IL</code></td><td><code>SSL_CLIENT_I_DN_L</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_SECKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr class="odd"><td><code>SSL_STRONG_CRYPTO</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_SESSIONDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_CERTIFICATELOGDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_CERTFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEYFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr class="odd"><td><code>SSL_SERVER_KEYFILETYPE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr class="odd"><td><code>SSL_CLIENT_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-</table>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="customlog" id="customlog">Custom Log Functions</a></h2>
-<p>
-When mod_ssl is enabled, additional functions exist for the <a href="../mod/mod_log_config.html#formats">Custom Log Format</a> of
-<code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> as documented in the Reference
-Chapter. Beside the ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables provided
-by any module, an additional Cryptography
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-exists for backward compatibility. The currently implemented function calls
-are listed in <a href="#table3">Table 3</a>.</p>
-
-<h3><a name="table3" id="table3">Table 3: Custom Log Cryptography Function</a></h3>
-
-<table>
-
-<tr><th>Function Call</th><th>Description</th></tr>
-
-<tr><td><code>%...{version}c</code></td> <td>SSL protocol version</td></tr>
-<tr><td><code>%...{cipher}c</code></td> <td>SSL cipher</td></tr>
-<tr><td><code>%...{subjectdn}c</code></td> <td>Client Certificate Subject Distinguished Name</td></tr>
-<tr><td><code>%...{issuerdn}c</code></td> <td>Client Certificate Issuer Distinguished Name</td></tr>
-<tr><td><code>%...{errcode}c</code></td> <td>Certificate Verification Error (numerical)</td></tr>
-
-<tr><td><code>%...{errstr}c</code></td> <td>Certificate Verification Error (string)</td></tr>
-</table>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_compat.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/ssl_compat.xml b/docs/manual/ssl/ssl_compat.xml
deleted file mode 100644
index 3a7a8e88e6..0000000000
--- a/docs/manual/ssl/ssl_compat.xml
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssl_compat.xml.meta">
-<parentdocument href="./">SSL/TLS</parentdocument>
-
- <title>SSL/TLS Strong Encryption: Compatibility</title>
-
-<summary>
-<blockquote>
-<p>All PCs are compatible. But some of
-them are more compatible than others.</p>
-<p class="cite">-- <cite>Unknown</cite></p>
-</blockquote>
-
-<p>
-This page covers backwards compatibility between mod_ssl and other
-SSL solutions. mod_ssl is not the only SSL solution for Apache; four
-additional products are (or were) also available: Ben Laurie's freely
-available <a href="http://www.apache-ssl.org/">Apache-SSL</a> (from
-where mod_ssl were originally derived in 1998), Red Hat's commercial
-<a
-href="http://www.redhat.com/products/product-details.phtml?id=rhsa">Secure
-Web Server</a> (which was based on mod_ssl), Covalent's commercial <a
-href="http://www.covalent.net/">Raven SSL Module</a> (also based on
-mod_ssl) and finally C2Net's (now Red Hat's) commercial product <a
-href="http://www.redhat.com/explore/stronghold/">Stronghold</a> (based
-on a different evolution branch named Sioux up to Stronghold 2.x and
-based on mod_ssl since Stronghold 3.x).</p>
-
-<p>
-mod_ssl mostly provides a superset of the functionality of all the other
-solutions, so it's simple to migrate from one of the older modules to
-mod_ssl. The configuration directives and environment variable names
-used by the older SSL solutions vary from those used in mod_ssl;
-mapping tables are included here to give the equivalents used by mod_ssl.</p>
-</summary>
-
-<section id="configuration"><title>Configuration Directives</title>
-<p>The mapping between configuration directives used by Apache-SSL
-1.x and mod_ssl 2.0.x is given in <a href="#table1">Table
-1</a>. The mapping from Sioux 1.x and Stronghold 2.x is only partial
-because of special functionality in these interfaces which mod_ssl
-doesn't provide.</p>
-
-
-<section id="table1">
-<title>Table 1: Configuration Directive Mapping</title>
-<table style="zebra">
-<columnspec><column width=".32"/><column width=".32"/>
-<column width=".32"/></columnspec>
-<tr><th>Old Directive</th><th>mod_ssl Directive</th><th>Comment</th></tr>
-
-<tr><th colspan="3">Apache-SSL 1.x &amp; mod_ssl 2.0.x compatibility:</th></tr>
-<tr><td><code>SSLEnable</code></td><td><code>SSLEngine on</code></td><td>compactified</td></tr>
-<tr><td><code>SSLDisable</code></td><td><code>SSLEngine off</code></td><td>compactified</td></tr>
-<tr><td><code>SSLLogFile</code> <em>file</em></td><td><code>SSLLog</code> <em>file</em></td><td>compactified</td></tr>
-
-<tr><td><code>SSLRequiredCiphers</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr><td><code>SSLRequireCipher</code> <em>c1</em> ...</td><td><code>SSLRequire %{SSL_CIPHER} in {"</code><em>c1</em><code>",
-...}</code></td><td>generalized</td></tr>
-
-<tr><td><code>SSLBanCipher</code> <em>c1</em> ...</td><td><code>SSLRequire not (%{SSL_CIPHER} in {"</code><em>c1</em><code>",
-...})</code></td><td>generalized</td></tr>
-<tr><td><code>SSLFakeBasicAuth</code></td><td><code>SSLOptions +FakeBasicAuth</code></td><td>merged</td></tr>
-<tr><td><code>SSLCacheServerPath</code> <em>dir</em></td><td>-</td><td>functionality removed</td></tr>
-
-<tr><td><code>SSLCacheServerPort</code> <em>integer</em></td><td>-</td><td>functionality removed</td></tr>
-<tr><th colspan="3">Apache-SSL 1.x compatibility:</th></tr>
-<tr><td><code>SSLExportClientCertificates</code></td><td><code>SSLOptions +ExportCertData</code></td><td>merged</td></tr>
-<tr><td><code>SSLCacheServerRunDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-
-<tr><th colspan="3">Sioux 1.x compatibility:</th></tr>
-<tr><td><code>SSL_CertFile</code> <em>file</em></td><td><code>SSLCertificateFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_KeyFile</code> <em>file</em></td><td><code>SSLCertificateKeyFile</code> <em>file</em></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_CipherSuite</code> <em>arg</em></td><td><code>SSLCipherSuite</code> <em>arg</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_X509VerifyDir</code> <em>arg</em></td><td><code>SSLCACertificatePath</code> <em>arg</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_Log</code> <em>file</em></td><td><code>SSLLogFile</code> <em>file</em></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_Connect</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_ClientAuth</code> <em>arg</em></td><td><code>SSLVerifyClient</code> <em>arg</em></td><td>renamed</td></tr>
-<tr><td><code>SSL_X509VerifyDepth</code> <em>arg</em></td><td><code>SSLVerifyDepth</code> <em>arg</em></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_FetchKeyPhraseFrom</code> <em>arg</em></td><td>-</td><td>not directly mappable; use SSLPassPhraseDialog</td></tr>
-<tr><td><code>SSL_SessionDir</code> <em>dir</em></td><td>-</td><td>not directly mappable; use SSLSessionCache</td></tr>
-<tr><td><code>SSL_Require</code> <em>expr</em></td><td>-</td><td>not directly mappable; use SSLRequire</td></tr>
-
-<tr><td><code>SSL_CertFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSL_KeyFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSL_X509VerifyPolicy</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-
-<tr><td><code>SSL_LogX509Attributes</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><th colspan="3">Stronghold 2.x compatibility:</th></tr>
-<tr><td><code>StrongholdAccelerator</code> <em>engine</em></td><td><code>SSLCryptoDevice</code> <em>engine</em></td><td>renamed</td></tr>
-<tr><td><code>StrongholdKey</code> <em>dir</em></td><td>-</td><td>functionality not needed</td></tr>
-
-<tr><td><code>StrongholdLicenseFile</code> <em>dir</em></td><td>-</td><td>functionality not needed</td></tr>
-<tr><td><code>SSLFlag</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr><td><code>SSLSessionLockFile</code> <em>file</em></td><td><code>SSLMutex</code> <em>file</em></td><td>renamed</td></tr>
-
-<tr><td><code>SSLCipherList</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr><td><code>RequireSSL</code></td><td><code>SSLRequireSSL</code></td><td>renamed</td></tr>
-<tr><td><code>SSLErrorFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-
-<tr><td><code>SSLRoot</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSL_CertificateLogDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>AuthCertDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-
-<tr><td><code>SSL_Group</code> <em>name</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr><td><code>SSLProxyMachineCertPath</code> <em>dir</em></td><td><code>SSLProxyMachineCertificatePath</code> <em>dir</em></td><td>renamed</td></tr>
-<tr><td><code>SSLProxyMachineCertFile</code> <em>file</em></td><td><code>SSLProxyMachineCertificateFile</code> <em>file</em></td><td>renamed</td></tr>
-
-<tr><td><code>SSLProxyCipherList</code> <em>spec</em></td><td><code>SSLProxyCipherSpec</code> <em>spec</em></td><td>renamed</td></tr>
-</table>
-</section>
-</section>
-
-<section id="variables"><title>Environment Variables</title>
-
-<p>The mapping between environment variable names used by the older
-SSL solutions and the names used by mod_ssl is given in <a
-href="#table2">Table 2</a>.</p>
-
-<section id="table2">
-<title>Table 2: Environment Variable Derivation</title>
-<table style="zebra">
-<columnspec><column width=".38"/><column width=".38"/>
-<column width=".2"/></columnspec>
-<tr><th>Old Variable</th><th>mod_ssl Variable</th><th>Comment</th></tr>
-
-<tr><td><code>SSL_PROTOCOL_VERSION</code></td><td><code>SSL_PROTOCOL</code></td><td>renamed</td></tr>
-<tr><td><code>SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr><td><code>HTTPS_SECRETKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>HTTPS_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>HTTPS_CIPHER</code></td><td><code>SSL_CIPHER</code></td><td>renamed</td></tr>
-
-<tr><td><code>HTTPS_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_CERTIFICATE</code></td><td><code>SSL_SERVER_CERT</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_CERT_START</code></td><td><code>SSL_SERVER_V_START</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_CERT_END</code></td><td><code>SSL_SERVER_V_END</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_SERVER_CERT_SERIAL</code></td><td><code>SSL_SERVER_M_SERIAL</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_SIGNATURE_ALGORITHM</code></td><td><code>SSL_SERVER_A_SIG</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_DN</code></td><td><code>SSL_SERVER_S_DN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_CN</code></td><td><code>SSL_SERVER_S_DN_CN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_EMAIL</code></td><td><code>SSL_SERVER_S_DN_Email</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_SERVER_O</code></td><td><code>SSL_SERVER_S_DN_O</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_OU</code></td><td><code>SSL_SERVER_S_DN_OU</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_C</code></td><td><code>SSL_SERVER_S_DN_C</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_SP</code></td><td><code>SSL_SERVER_S_DN_SP</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_L</code></td><td><code>SSL_SERVER_S_DN_L</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_SERVER_IDN</code></td><td><code>SSL_SERVER_I_DN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_ICN</code></td><td><code>SSL_SERVER_I_DN_CN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IEMAIL</code></td><td><code>SSL_SERVER_I_DN_Email</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IO</code></td><td><code>SSL_SERVER_I_DN_O</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IOU</code></td><td><code>SSL_SERVER_I_DN_OU</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_SERVER_IC</code></td><td><code>SSL_SERVER_I_DN_C</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_ISP</code></td><td><code>SSL_SERVER_I_DN_SP</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SERVER_IL</code></td><td><code>SSL_SERVER_I_DN_L</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CERTIFICATE</code></td><td><code>SSL_CLIENT_CERT</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_START</code></td><td><code>SSL_CLIENT_V_START</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_CLIENT_CERT_END</code></td><td><code>SSL_CLIENT_V_END</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CERT_SERIAL</code></td><td><code>SSL_CLIENT_M_SERIAL</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_SIGNATURE_ALGORITHM</code></td><td><code>SSL_CLIENT_A_SIG</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_DN</code></td><td><code>SSL_CLIENT_S_DN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_CN</code></td><td><code>SSL_CLIENT_S_DN_CN</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_CLIENT_EMAIL</code></td><td><code>SSL_CLIENT_S_DN_Email</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_O</code></td><td><code>SSL_CLIENT_S_DN_O</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_OU</code></td><td><code>SSL_CLIENT_S_DN_OU</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_C</code></td><td><code>SSL_CLIENT_S_DN_C</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_SP</code></td><td><code>SSL_CLIENT_S_DN_SP</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_CLIENT_L</code></td><td><code>SSL_CLIENT_S_DN_L</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IDN</code></td><td><code>SSL_CLIENT_I_DN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_ICN</code></td><td><code>SSL_CLIENT_I_DN_CN</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IEMAIL</code></td><td><code>SSL_CLIENT_I_DN_Email</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IO</code></td><td><code>SSL_CLIENT_I_DN_O</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_CLIENT_IOU</code></td><td><code>SSL_CLIENT_I_DN_OU</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IC</code></td><td><code>SSL_CLIENT_I_DN_C</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_ISP</code></td><td><code>SSL_CLIENT_I_DN_SP</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_CLIENT_IL</code></td><td><code>SSL_CLIENT_I_DN_L</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-
-<tr><td><code>SSL_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SECKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr><td><code>SSL_STRONG_CRYPTO</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-
-<tr><td><code>SSL_SERVER_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_SESSIONDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_CERTIFICATELOGDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_CERTFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-
-<tr><td><code>SSL_SERVER_KEYFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_SERVER_KEYFILETYPE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr><td><code>SSL_CLIENT_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-</table>
-</section>
-</section>
-
-<section id="customlog"><title>Custom Log Functions</title>
-<p>
-When mod_ssl is enabled, additional functions exist for the <a
-href="../mod/mod_log_config.html#formats">Custom Log Format</a> of
-<module>mod_log_config</module> as documented in the Reference
-Chapter. Beside the ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables provided
-by any module, an additional Cryptography
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-exists for backward compatibility. The currently implemented function calls
-are listed in <a href="#table3">Table 3</a>.</p>
-
-<section id="table3">
-<title>Table 3: Custom Log Cryptography Function</title>
-<table>
-<columnspec><column width=".2"/><column width=".4"/></columnspec>
-<tr><th>Function Call</th><th>Description</th></tr>
-
-<tr><td><code>%...{version}c</code></td> <td>SSL protocol version</td></tr>
-<tr><td><code>%...{cipher}c</code></td> <td>SSL cipher</td></tr>
-<tr><td><code>%...{subjectdn}c</code></td> <td>Client Certificate Subject Distinguished Name</td></tr>
-<tr><td><code>%...{issuerdn}c</code></td> <td>Client Certificate Issuer Distinguished Name</td></tr>
-<tr><td><code>%...{errcode}c</code></td> <td>Certificate Verification Error (numerical)</td></tr>
-
-<tr><td><code>%...{errstr}c</code></td> <td>Certificate Verification Error (string)</td></tr>
-</table>
-</section>
-</section>
-
-</manualpage>
diff --git a/docs/manual/ssl/ssl_compat.xml.meta b/docs/manual/ssl/ssl_compat.xml.meta
deleted file mode 100644
index a374a6187b..0000000000
--- a/docs/manual/ssl/ssl_compat.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ssl_compat</basename>
- <path>/ssl/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/ssl/ssl_faq.html b/docs/manual/ssl/ssl_faq.html
deleted file mode 100644
index c6d2ea13b9..0000000000
--- a/docs/manual/ssl/ssl_faq.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: ssl_faq.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/ssl/ssl_faq.html.en b/docs/manual/ssl/ssl_faq.html.en
deleted file mode 100644
index 044c03f645..0000000000
--- a/docs/manual/ssl/ssl_faq.html.en
+++ /dev/null
@@ -1,1017 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>SSL/TLS Strong Encryption: FAQ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>SSL/TLS Strong Encryption: FAQ</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_faq.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
-<blockquote>
-<p>The wise man doesn't give the right answers,
-he poses the right questions.</p>
-<p class="cite">-- <cite>Claude Levi-Strauss</cite></p>
-
-</blockquote>
-<p>This chapter is a collection of frequently asked questions (FAQ) and
-corresponding answers following the popular USENET tradition. Most of these
-questions occurred on the Newsgroup <code><a href="news:comp.infosystems.www.servers.unix">comp.infosystems.www.servers.unix</a></code> or the mod_ssl Support
-Mailing List <code><a href="mailto:modssl-users@modssl.org">modssl-users@modssl.org</a></code>. They are collected at this place
-to avoid answering the same questions over and over.</p>
-
-<p>Please read this chapter at least once when installing mod_ssl or at least
-search for your problem here before submitting a problem report to the
-author.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#about">About The Module</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#installation">About Installation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#aboutconfig">About Configuration</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#aboutcerts">About Certificates</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#aboutssl">About SSL Protocol</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#support">About Support</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="about" id="about">About The Module</a></h2>
-<ul>
-<li><a href="#history">What is the history of mod_ssl?</a></li>
-<li><a href="#y2k">mod_ssl and Year 2000?</a></li>
-<li><a href="#wassenaar">mod_ssl and Wassenaar Arrangement?</a></li>
-</ul>
-
-<h3><a name="history" id="history">What is the history of mod_ssl?</a></h3>
-<p>The mod_ssl v1 package was initially created in April 1998 by <a href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> via porting <a href="mailto:ben@algroup.co.uk">Ben Laurie</a>'s <a href="http://www.apache-ssl.org/">Apache-SSL</a> 1.17 source patches for
- Apache 1.2.6 to Apache 1.3b6. Because of conflicts with Ben
- Laurie's development cycle it then was re-assembled from scratch for
- Apache 1.3.0 by merging the old mod_ssl 1.x with the newer Apache-SSL
- 1.18. From this point on mod_ssl lived its own life as mod_ssl v2. The
- first publicly released version was mod_ssl 2.0.0 from August 10th,
- 1998. As of this writing (August 1999) the current mod_ssl version
- is 2.4.0.</p>
-
-
- <p>After one year of very active development with over 1000 working hours and
- over 40 releases mod_ssl reached its current state. The result is an
- already very clean source base implementing a very rich functionality.
- The code size increased by a factor of 4 to currently a total of over
- 10.000 lines of ANSI C consisting of approx. 70% code and 30% code
- documentation. From the original Apache-SSL code currently approx. 5% is
- remaining only.</p>
-
- <p>After the US export restrictions for cryptographic software were
- opened, mod_ssl was integrated into the code base of Apache V2 in 2001.</p>
-
-
-<h3><a name="y2k" id="y2k">Is mod_ssl Year 2000 compliant?</a></h3>
-<p>Yes, mod_ssl is Year 2000 compliant.</p>
-
- <p>Because first mod_ssl internally never stores years as two digits.
- Instead it always uses the ANSI C &amp; POSIX numerical data type
- <code>time_t</code> type, which on almost all Unix platforms at the moment
- is a <code>signed long</code> (usually 32-bits) representing seconds since
- epoch of January 1st, 1970, 00:00 UTC. This signed value overflows in
- early January 2038 and not in the year 2000. Second, date and time
- presentations (for instance the variable ``<code>%{TIME_YEAR}</code>'')
- are done with full year value instead of abbreviating to two digits.</p>
-
-
- <p>Additionally according to a <a href="http://www.apache.org/docs/misc/FAQ.html#year2000">Year 2000
- statement</a> from the Apache Group, the Apache webserver is Year 2000
- compliant, too. But whether OpenSSL or the underlying Operating System
- (either a Unix or Win32 platform) is Year 2000 compliant is a different
- question which cannot be answered here.</p>
-
-
-<h3><a name="wassenaar" id="wassenaar">What about mod_ssl and the Wassenaar Arrangement?</a></h3>
-<p>First, let us explain what <dfn>Wassenaar</dfn> and its <dfn>Arrangement on
- Export Controls for Conventional Arms and Dual-Use Goods and
- Technologies</dfn> is: This is a international regime, established 1995, to
- control trade in conventional arms and dual-use goods and technology. It
- replaced the previous <dfn>CoCom</dfn> regime. 33 countries are signatories:
- Argentina, Australia, Austria, Belgium, Bulgaria, Canada, Czech Republic,
- Denmark, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Japan,
- Luxembourg, the Netherlands, New Zealand, Norway, Poland, Portugal, Republic
- of Korea, Romania, Russian Federation, Slovak Republic, Spain, Sweden,
- Switzerland, Turkey, Ukraine, the United Kingdom and the United States. For more
- details look at <a href="http://www.wassenaar.org/">http://www.wassenaar.org/</a>.</p>
-
-
- <p>In short: The aim of the Wassenaar Arrangement is to prevent the build up
- of military capabilities that threaten regional and international security
- and stability. The Wassenaar Arrangement controls the export of
- cryptography as a dual-use good, i.e., one that has both military and
- civilian applications. However, the Wassenaar Arrangement also provides an
- exemption from export controls for mass-market software and free software.</p>
-
- <p>In the current Wassenaar <cite>List of Dual Use Goods and Technologies And
- Munitions</cite>, under <q>GENERAL SOFTWARE NOTE (GSN)</q> it says
- <q>The Lists do not control "software" which is either: 1. [...] 2. "in
- the public domain".</q> And under <q>DEFINITIONS OF TERMS USED IN
- THESE LISTS</q> one can find the definition: <q>In the public
- domain": This means "technology" or "software" which has been made
- available without restrictions upon its further dissemination. N.B.
- Copyright restrictions do not remove "technology" or "software" from being
- "in the public domain".</q></p>
-
- <p>So, both mod_ssl and OpenSSL are <q>in the public domain</q> for the purposes
- of the Wassenaar Agreement and its <q>List of Dual Use Goods and
- Technologies And Munitions List</q>.</p>
-
- <p>So, mod_ssl and OpenSSL are not affected by the Wassenaar Agreement.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="installation" id="installation">About Installation</a></h2>
-<ul>
-<li><a href="#coredump">Core dumps for HTTPS requests?</a></li>
-<li><a href="#mutex">Permission problem on SSLMutex</a></li>
-<li><a href="#mm">Shared memory and process size?</a></li>
-<li><a href="#entropy">PRNG and not enough entropy?</a></li>
-</ul>
-
-<h3><a name="coredump" id="coredump">When I access my website the first time via HTTPS I get a core dump?</a></h3>
-<p>There can be a lot of reasons why a core dump can occur, of course.
- Ranging from buggy third-party modules, over buggy vendor libraries up to
- a buggy mod_ssl version. But the above situation is often caused by old or
- broken vendor DBM libraries. To solve it either build mod_ssl with the
- built-in SDBM library (specify <code>--enable-rule=SSL_SDBM</code> at the
- APACI command line) or switch from <code>SSLSessionCache dbm:</code> to the
- newer <code>SSLSessionCache shm:</code>'' variant (after you have rebuilt
- Apache with MM, of course).</p>
-
-
-<h3><a name="mutex" id="mutex">When I startup Apache I get permission errors related to SSLMutex?</a></h3>
-<p>When you receive entries like ``<code>mod_ssl: Child could not open
- SSLMutex lockfile /opt/apache/logs/ssl_mutex.18332 (System error follows)
- [...] System: Permission denied (errno: 13)</code>'' this is usually
- caused by to restrictive permissions on the <em>parent</em> directories.
- Make sure that all parent directories (here <code>/opt</code>,
- <code>/opt/apache</code> and <code>/opt/apache/logs</code>) have the x-bit
- set at least for the UID under which Apache's children are running (see
- the <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> directive of Apache).</p>
-
-
-<h3><a name="mm" id="mm">When I use the MM library and the shared memory cache each process grows
-1.5MB according to `top' although I specified 512000 as the cache size?</a></h3>
-<p>The additional 1MB are caused by the global shared memory pool Apache
- allocates for all modules and which is not used by mod_ssl for
- various reasons. So the actually allocated shared memory is always
- 1MB more than what you specify on <code class="directive"><a href="../mod/mod_ssl.html#sslsessioncache">SSLSessionCache</a></code>.
- But don't be confused by the display of `top': although is
- indicates that <em>each</em> process grow, this is not reality, of
- course. Instead the additional memory consumption is shared by
- all processes, i.e. the 1.5MB are allocated only once per Apache
- instance and not once per Apache server process.</p>
-
-
-<h3><a name="entropy" id="entropy">When I fire up the server, mod_ssl stops with the error
-"Failed to generate temporary 512 bit RSA private key", why?</a></h3>
-<p>Cryptographic software needs a source of unpredictable data
- to work correctly. Many open source operating systems provide
- a "randomness device" that serves this purpose (usually named
- <code>/dev/random</code>). On other systems, applications have to
- seed the OpenSSL Pseudo Random Number Generator (PRNG) manually with
- appropriate data before generating keys or performing public key
- encryption. As of version 0.9.5, the OpenSSL functions that need
- randomness report an error if the PRNG has not been seeded with
- at least 128 bits of randomness. So mod_ssl has to provide enough
- entropy to the PRNG to work correctly. For this one has to use the
- <code>SSLRandomSeed</code> directives.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="aboutconfig" id="aboutconfig">About Configuration</a></h2>
-<ul>
-<li><a href="#parallel">HTTP and HTTPS with a single server?</a></li>
-<li><a href="#ports">Where is the HTTPS port?</a></li>
-<li><a href="#httpstest">How to test HTTPS manually?</a></li>
-<li><a href="#hang">Why does my connection hang?</a></li>
-<li><a href="#refused">Why do I get connection refused?</a></li>
-<li><a href="#envvars">Why are the <code>SSL_XXX</code> variables missing?</a></li>
-<li><a href="#relative">How to switch with relative hyperlinks?</a></li>
-</ul>
-
-<h3><a name="parallel" id="parallel">Is it possible to provide HTTP and HTTPS with a single server?</a></h3>
-<p>Yes, HTTP and HTTPS use different server ports, so there is no direct
- conflict between them. Either run two separate server instances (one binds
- to port 80, the other to port 443) or even use Apache's elegant virtual
- hosting facility where you can easily create two virtual servers which
- Apache dispatches: one responding to port 80 and speaking HTTP and one
- responding to port 443 speaking HTTPS.</p>
-
-
-<h3><a name="ports" id="ports">I know that HTTP is on port 80, but where is HTTPS?</a></h3>
-<p>You can run HTTPS on any port, but the standards specify port 443, which
- is where any HTTPS compliant browser will look by default. You can force
- your browser to look on a different port by specifying it in the URL like
- this (for port 666): <code>https://secure.server.dom:666/</code></p>
-
-
-<h3><a name="httpstest" id="httpstest">How can I speak HTTPS manually for testing purposes?</a></h3>
- <p>While you usually just use</p>
-
- <div class="example"><p><code>$ telnet localhost 80<br />
- GET / HTTP/1.0</code></p></div>
-
-
- <p>for simple testing the HTTP protocol of Apache, it's not so easy for
- HTTPS because of the SSL protocol between TCP and HTTP. But with the
- help of OpenSSL's <code>s_client</code> command you can do a similar
- check even for HTTPS:</p>
-
- <div class="example"><p><code>$ openssl s_client -connect localhost:443 -state -debug<br />
- GET / HTTP/1.0</code></p></div>
-
- <p>Before the actual HTTP response you receive detailed information about the
- SSL handshake. For a more general command line client which directly
- understands both the HTTP and HTTPS scheme, can perform GET and POST
- methods, can use a proxy, supports byte ranges, etc. you should have a
- look at nifty <a href="http://curl.haxx.se/">cURL</a>
- tool. With it you can directly check if your Apache is running fine on
- Port 80 and 443 as following:</p>
-
- <div class="example"><p><code>$ curl http://localhost/<br />
- $ curl https://localhost/</code></p></div>
-
-
-<h3><a name="hang" id="hang">Why does the connection hang when I connect to my SSL-aware Apache server?</a></h3>
-<p>Because you connected with HTTP to the HTTPS port, i.e. you used an URL of
- the form ``<code>http://</code>'' instead of ``<code>https://</code>''.
- This also happens the other way round when you connect via HTTPS to a HTTP
- port, i.e. when you try to use ``<code>https://</code>'' on a server that
- doesn't support SSL (on this port). Make sure you are connecting to a
- virtual server that supports SSL, which is probably the IP associated with
- your hostname, not localhost (127.0.0.1).</p>
-
-
-<h3><a name="refused" id="refused">Why do I get ``Connection Refused'' messages when trying to access my freshly
-installed Apache+mod_ssl server via HTTPS?</a></h3>
-<p>There can be various reasons. Some of the common mistakes is that people
- start Apache with just ``<code>apachectl start</code>'' (or
- ``<code>httpd</code>'') instead of ``<code>apachectl startssl</code>'' (or
- ``<code>httpd -DSSL</code>''. Or you're configuration is not correct. At
- least make sure that your <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
- directives match your <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- directives. And if all fails, please do yourself a favor and start over with the
- default configuration mod_ssl provides you.</p>
-
-
-<h3><a name="envvars" id="envvars">In my CGI programs and SSI scripts the various documented
-<code>SSL_XXX</code> variables do not exist. Why?</a></h3>
-<p>Just make sure you have ``<code>SSLOptions +StdEnvVars</code>''
- enabled for the context of your CGI/SSI requests.</p>
-
-
-<h3><a name="relative" id="relative">How can I use relative hyperlinks to switch between HTTP and
-HTTPS?</a></h3>
-
- <p>Usually you have to use fully-qualified hyperlinks because
- you have to change the URL scheme. But with the help of some URL
- manipulations through mod_rewrite you can achieve the same effect while
- you still can use relative URLs:</p>
- <div class="example"><p><code>
- RewriteEngine on<br />
- RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L]<br />
- RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]
- </code></p></div>
-
- <p>This rewrite ruleset lets you use hyperlinks of the form
- <code>&lt;a href="document.html:SSL"&gt;</code></p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="aboutcerts" id="aboutcerts">About Certificates</a></h2>
-<ul>
-<li><a href="#keyscerts">What are Keys, CSRs and Certs?</a></li>
-<li><a href="#startup">Difference on startup?</a></li>
-<li><a href="#realcert">How to create a real cert?</a></li>
-<li><a href="#ownca">How to create my own CA?</a></li>
-<li><a href="#passphrase">How to change a pass phrase?</a></li>
-<li><a href="#removepassphrase">How to remove a pass phrase?</a></li>
-<li><a href="#verify">How to verify a key/cert pair?</a></li>
-<li><a href="#badcert">Bad Certificate Error?</a></li>
-<li><a href="#keysize">Why does a 2048-bit key not work?</a></li>
-<li><a href="#hashsymlinks">Why is client auth broken?</a></li>
-<li><a href="#pemder">How to convert from PEM to DER?</a></li>
-<li><a href="#verisign">Verisign and the magic getca program?</a></li>
-<li><a href="#sgc">Global IDs or SGC?</a></li>
-<li><a href="#gid">Global IDs and Cert Chain?</a></li>
-</ul>
-
-<h3><a name="keyscerts" id="keyscerts">What are RSA Private Keys, CSRs and Certificates?</a></h3>
-<p>The RSA private key file is a digital file that you can use to decrypt
- messages sent to you. It has a public component which you distribute (via
- your Certificate file) which allows people to encrypt those messages to
- you. A Certificate Signing Request (CSR) is a digital file which contains
- your public key and your name. You send the CSR to a Certifying Authority
- (CA) to be converted into a real Certificate. A Certificate contains your
- RSA public key, your name, the name of the CA, and is digitally signed by
- your CA. Browsers that know the CA can verify the signature on that
- Certificate, thereby obtaining your RSA public key. That enables them to
- send messages which only you can decrypt.
- See the <a href="ssl_intro.html">Introduction</a> chapter for a general
- description of the SSL protocol.</p>
-
-
-<h3><a name="startup" id="startup">Seems like there is a difference on startup between the original Apache and an SSL-aware Apache?</a></h3>
-<p>Yes, in general, starting Apache with a built-in mod_ssl is just like
- starting an unencumbered Apache, except for the fact that when you have a
- pass phrase on your SSL private key file. Then a startup dialog pops up
- asking you to enter the pass phrase.</p>
-
- <p>To type in the pass phrase manually when starting the server can be
- problematic, for instance when starting the server from the system boot
- scripts. As an alternative to this situation you can follow the steps
- below under ``How can I get rid of the pass-phrase dialog at Apache
- startup time?''.</p>
-
-
-<h3><a name="realcert" id="realcert">Ok, I've got my server installed and want to create a real SSL
-server Certificate for it. How do I do it?</a></h3>
-<p>Here is a step-by-step description:</p>
-
- <ol>
- <li>Make sure OpenSSL is really installed and in your <code>PATH</code>.
- But some commands even work ok when you just run the
- ``<code>openssl</code>'' program from within the OpenSSL source tree as
- ``<code>./apps/openssl</code>''.<br />
-
- <br />
- </li>
- <li>Create a RSA private key for your Apache server
- (will be Triple-DES encrypted and PEM formatted):<br />
- <br />
- <code><strong>$ openssl genrsa -des3 -out server.key 1024</strong></code><br />
- <br />
- Please backup this <code>server.key</code> file and remember the
- pass-phrase you had to enter at a secure location.
- You can see the details of this RSA private key via the command:<br />
-
- <br />
- <code><strong>$ openssl rsa -noout -text -in server.key</strong></code><br />
- <br />
- And you could create a decrypted PEM version (not recommended)
- of this RSA private key via:<br />
- <br />
- <code><strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></code><br />
- <br />
-
- </li>
- <li>Create a Certificate Signing Request (CSR) with the server RSA private
- key (output will be PEM formatted):<br />
- <br />
- <code><strong>$ openssl req -new -key server.key -out server.csr</strong></code><br />
- <br />
- Make sure you enter the FQDN ("Fully Qualified Domain Name") of the
- server when OpenSSL prompts you for the "CommonName", i.e. when you
- generate a CSR for a website which will be later accessed via
- <code>https://www.foo.dom/</code>, enter "www.foo.dom" here.
- You can see the details of this CSR via the command<br />
-
- <br />
- <code><strong>$ openssl req -noout -text -in server.csr</strong></code><br />
- <br />
- </li>
- <li>You now have to send this Certificate Signing Request (CSR) to
- a Certifying Authority (CA) for signing. The result is then a real
- Certificate which can be used for Apache. Here you have two options:
- First you can let the CSR sign by a commercial CA like Verisign or
- Thawte. Then you usually have to post the CSR into a web form, pay for
- the signing and await the signed Certificate you then can store into a
- server.crt file. For more information about commercial CAs have a look
- at the following locations:<br />
- <br />
- <ol>
- <li> Verisign<br />
-
- <a href="http://digitalid.verisign.com/server/apacheNotice.htm">
- http://digitalid.verisign.com/server/apacheNotice.htm
- </a>
- </li>
- <li> Thawte Consulting<br />
- <a href="http://www.thawte.com/certs/server/request.html">
- http://www.thawte.com/certs/server/request.html
- </a>
- </li>
-
- <li> CertiSign Certificadora Digital Ltda.<br />
- <a href="http://www.certisign.com.br">
- http://www.certisign.com.br
- </a>
- </li>
- <li> IKS GmbH<br />
- <a href="http://www.iks-jena.de/produkte/ca/">
-
- http://www.iks-jena.de/produkte/ca/
- </a>
- </li>
- <li> Uptime Commerce Ltd.<br />
- <a href="http://www.uptimecommerce.com">
- http://www.uptimecommerce.com
- </a>
- </li>
- <li> BelSign NV/SA<br />
-
- <a href="http://www.belsign.be">
- http://www.belsign.be
- </a>
- </li>
- </ol>
-
- Second you can use your own CA and now have to sign the CSR yourself by
- this CA. Read the next answer in this FAQ on how to sign a CSR with
- your CA yourself.
- You can see the details of the received Certificate via the command:<br />
- <br />
- <code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
-
- </li>
- <li>Now you have two files: <code>server.key</code> and
- <code>server.crt</code>. These now can be used as following inside your
- Apache's <code>httpd.conf</code> file:
- <pre>
- SSLCertificateFile /path/to/this/server.crt
- SSLCertificateKeyFile /path/to/this/server.key
- </pre>
- The <code>server.csr</code> file is no longer needed.
- </li>
-
- </ol>
-
-
-<h3><a name="ownca" id="ownca">How can I create and use my own Certificate Authority (CA)?</a></h3>
- <p>The short answer is to use the <code>CA.sh</code> or <code>CA.pl</code>
-
- script provided by OpenSSL. The long and manual answer is this:</p>
-
- <ol>
- <li>Create a RSA private key for your CA
- (will be Triple-DES encrypted and PEM formatted):<br />
- <br />
- <code><strong>$ openssl genrsa -des3 -out ca.key 1024</strong></code><br />
- <br />
- Please backup this <code>ca.key</code> file and remember the
- pass-phrase you currently entered at a secure location.
- You can see the details of this RSA private key via the command<br />
-
- <br />
- <code><strong>$ openssl rsa -noout -text -in ca.key</strong></code><br />
- <br />
- And you can create a decrypted PEM version (not recommended) of this
- private key via:<br />
- <br />
- <code><strong>$ openssl rsa -in ca.key -out ca.key.unsecure</strong></code><br />
- <br />
-
- </li>
- <li>Create a self-signed CA Certificate (X509 structure)
- with the RSA key of the CA (output will be PEM formatted):<br />
- <br />
- <code><strong>$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt</strong></code><br />
- <br />
- You can see the details of this Certificate via the command:<br />
- <br />
-
- <code><strong>$ openssl x509 -noout -text -in ca.crt</strong></code><br />
- <br />
- </li>
- <li>Prepare a script for signing which is needed because
- the ``<code>openssl ca</code>'' command has some strange requirements
- and the default OpenSSL config doesn't allow one easily to use
- ``<code>openssl ca</code>'' directly. So a script named
- <code>sign.sh</code> is distributed with the mod_ssl distribution
- (subdir <code>pkg.contrib/</code>). Use this script for signing.
- </li>
-
- <li>Now you can use this CA to sign server CSR's in order to create real
- SSL Certificates for use inside an Apache webserver (assuming
- you already have a <code>server.csr</code> at hand):<br />
- <br />
- <code><strong>$ ./sign.sh server.csr</strong></code><br />
- <br />
- This signs the server CSR and results in a <code>server.crt</code> file.<br />
-
- </li>
- </ol>
-
-
-
-<h3><a name="passphrase" id="passphrase">How can I change the pass-phrase on my private key file?</a></h3>
-<p>You simply have to read it with the old pass-phrase and write it again
- by specifying the new pass-phrase. You can accomplish this with the following
- commands:</p>
-
-
- <p><code><strong>$ openssl rsa -des3 -in server.key -out server.key.new</strong></code><br />
- <code><strong>$ mv server.key.new server.key</strong></code><br /></p>
-
- <p>Here you're asked two times for a PEM pass-phrase. At the first
- prompt enter the old pass-phrase and at the second prompt
- enter the new pass-phrase.</p>
-
-
-<h3><a name="removepassphrase" id="removepassphrase">How can I get rid of the pass-phrase dialog at Apache startup time?</a></h3>
-<p>The reason why this dialog pops up at startup and every re-start
- is that the RSA private key inside your server.key file is stored in
- encrypted format for security reasons. The pass-phrase is needed to be
- able to read and parse this file. When you can be sure that your server is
- secure enough you perform two steps:</p>
-
- <ol>
- <li>Remove the encryption from the RSA private key (while
- preserving the original file):<br />
- <br />
- <code><strong>$ cp server.key server.key.org</strong></code><br />
- <code><strong>$ openssl rsa -in server.key.org -out server.key</strong></code><br />
-
- <br />
- </li>
- <li>Make sure the server.key file is now only readable by root:<br />
- <br />
- <code><strong>$ chmod 400 server.key</strong></code><br />
- <br />
- </li>
- </ol>
-
- <p>Now <code>server.key</code> will contain an unencrypted copy of the key.
- If you point your server at this file it will not prompt you for a
- pass-phrase. HOWEVER, if anyone gets this key they will be able to
- impersonate you on the net. PLEASE make sure that the permissions on that
- file are really such that only root or the web server user can read it
- (preferably get your web server to start as root but run as another
- server, and have the key readable only by root).</p>
-
- <p>As an alternative approach you can use the ``<code>SSLPassPhraseDialog
- exec:/path/to/program</code>'' facility. But keep in mind that this is
- neither more nor less secure, of course.</p>
-
-
-<h3><a name="verify" id="verify">How do I verify that a private key matches its Certificate?</a></h3>
-<p>The private key contains a series of numbers. Two of those numbers form
- the "public key", the others are part of your "private key". The "public
- key" bits are also embedded in your Certificate (we get them from your
- CSR). To check that the public key in your cert matches the public
- portion of your private key, you need to view the cert and the key and
- compare the numbers. To view the Certificate and the key run the
- commands:</p>
-
- <p><code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
- <code><strong>$ openssl rsa -noout -text -in server.key</strong></code></p>
-
- <p>The `modulus' and the `public exponent' portions in the key and the
- Certificate must match. But since the public exponent is usually 65537
- and it's bothering comparing long modulus you can use the following
- approach:</p>
-
-
- <p><code><strong>$ openssl x509 -noout -modulus -in server.crt | openssl md5</strong></code><br />
- <code><strong>$ openssl rsa -noout -modulus -in server.key | openssl md5</strong></code></p>
-
- <p>And then compare these really shorter numbers. With overwhelming
- probability they will differ if the keys are different. BTW, if I want to
- check to which key or certificate a particular CSR belongs you can compute</p>
-
- <p><code><strong>$ openssl req -noout -modulus -in server.csr | openssl md5</strong></code></p>
-
-
-<h3><a name="badcert" id="badcert">What does it mean when my connections fail with an "alert bad certificate"
-error?</a></h3>
-<p>Usually when you see errors like <code>OpenSSL: error:14094412: SSL
- routines:SSL3_READ_BYTES:sslv3 alert bad certificate</code> in the SSL
- logfile, this means that the browser was unable to handle the server
- certificate/private-key which perhaps contain a RSA-key not equal to 1024
- bits. For instance Netscape Navigator 3.x is one of those browsers.</p>
-
-
-<h3><a name="keysize" id="keysize">Why does my 2048-bit private key not work?</a></h3>
-<p>The private key sizes for SSL must be either 512 or 1024 for compatibility
- with certain web browsers. A keysize of 1024 bits is recommended because
- keys larger than 1024 bits are incompatible with some versions of Netscape
- Navigator and Microsoft Internet Explorer, and with other browsers that
- use RSA's BSAFE cryptography toolkit.</p>
-
-
-<h3><a name="hashsymlinks" id="hashsymlinks">Why is client authentication broken after upgrading from
-SSLeay version 0.8 to 0.9?</a></h3>
-<p>The CA certificates under the path you configured with
- <code>SSLCACertificatePath</code> are found by SSLeay through hash
- symlinks. These hash values are generated by the `<code>openssl x509 -noout
- -hash</code>' command. But the algorithm used to calculate the hash for a
- certificate has changed between SSLeay 0.8 and 0.9. So you have to remove
- all old hash symlinks and re-create new ones after upgrading. Use the
- <code>Makefile</code> mod_ssl placed into this directory.</p>
-
-
-<h3><a name="pemder" id="pemder">How can I convert a certificate from PEM to DER format?</a></h3>
-<p>The default certificate format for SSLeay/OpenSSL is PEM, which actually
- is Base64 encoded DER with header and footer lines. For some applications
- (e.g. Microsoft Internet Explorer) you need the certificate in plain DER
- format. You can convert a PEM file <code>cert.pem</code> into the
- corresponding DER file <code>cert.der</code> with the following command:
- <code><strong>$ openssl x509 -in cert.pem -out cert.der -outform DER</strong></code></p>
-
-
-<h3><a name="verisign" id="verisign">I try to install a Verisign certificate. Why can't I find neither the
-<code>getca</code> nor <code>getverisign</code> programs Verisign mentions?</a></h3>
-<p>This is because Verisign has never provided specific instructions
- for Apache+mod_ssl. Rather they tell you what you should do
- if you were using C2Net's Stronghold (a commercial Apache
- based server with SSL support). The only thing you have to do
- is to save the certificate into a file and give the name of
- that file to the <code>SSLCertificateFile</code> directive.
- Remember that you need to give the key file in as well (see
- <code>SSLCertificateKeyFile</code> directive). For a better
- CA-related overview on SSL certificate fiddling you can look at <a href="http://www.thawte.com/html/SUPPORT/server/softwaredocs/modssl.html">Thawte's mod_ssl instructions</a>.</p>
-
-
-<h3><a name="sgc" id="sgc">Can I use the Server Gated Cryptography (SGC) facility (aka Verisign Global
-ID) also with mod_ssl?</a></h3>
-<p>Yes, mod_ssl since version 2.1 supports the SGC facility. You don't have
- to configure anything special for this, just use a Global ID as your
- server certificate. The <em>step up</em> of the clients are then
- automatically handled by mod_ssl under run-time. For details please read
- the <code>README.GlobalID</code> document in the mod_ssl distribution.</p>
-
-
-<h3><a name="gid" id="gid">After I have installed my new Verisign Global ID server certificate, the
-browsers complain that they cannot verify the server certificate?</a></h3>
-<p>That is because Verisign uses an intermediate CA certificate between
- the root CA certificate (which is installed in the browsers) and
- the server certificate (which you installed in the server). You
- should have received this additional CA certificate from Verisign.
- If not, complain to them. Then configure this certificate with the
- <code>SSLCertificateChainFile</code> directive in the server. This
- makes sure the intermediate CA certificate is send to the browser
- and this way fills the gap in the certificate chain.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="aboutssl" id="aboutssl">About SSL Protocol</a></h2>
-<ul>
-<li><a href="#random">Random SSL errors under heavy load?</a></li>
-<li><a href="#load">Why has the server a higher load?</a></li>
-<li><a href="#establishing">Why are connections horribly slow?</a></li>
-<li><a href="#ciphers">Which ciphers are supported?</a></li>
-<li><a href="#adh">How to use Anonymous-DH ciphers</a></li>
-<li><a href="#sharedciphers">Why do I get 'no shared ciphers'?</a></li>
-<li><a href="#vhosts">HTTPS and name-based vhosts</a></li>
-<li><a href="#vhosts2">Why is it not possible to use Name-Based Virtual
-Hosting to identify different SSL virtual hosts?</a></li>
-<li><a href="#lockicon">The lock icon in Netscape locks very late</a></li>
-<li><a href="#msie">Why do I get I/O errors with MSIE clients?</a></li>
-<li><a href="#nn">Why do I get I/O errors with NS clients?</a></li>
-</ul>
-
-<h3><a name="random" id="random">Why do I get lots of random SSL protocol errors under heavy server load?</a></h3>
-<p>There can be a number of reasons for this, but the main one
- is problems with the SSL session Cache specified by the
- <code class="directive"><a href="../mod/mod_ssl.html#sslsessioncache">SSLSessionCache</a></code> directive. The DBM session
- cache is most likely the source of the problem, so trying the SHM session cache or
- no cache at all may help.</p>
-
-
-<h3><a name="load" id="load">Why has my webserver a higher load now that I run SSL there?</a></h3>
-<p>Because SSL uses strong cryptographic encryption and this needs a lot of
- number crunching. And because when you request a webpage via HTTPS even
- the images are transferred encrypted. So, when you have a lot of HTTPS
- traffic the load increases.</p>
-
-
-<h3><a name="establishing" id="establishing">Often HTTPS connections to my server require up to 30 seconds for establishing
-the connection, although sometimes it works faster?</a></h3>
-<p>Usually this is caused by using a <code>/dev/random</code> device for
- <code>SSLRandomSeed</code> which is blocking in read(2) calls if not
- enough entropy is available. Read more about this problem in the reference
- chapter under <code>SSLRandomSeed</code>.</p>
-
-
-<h3><a name="ciphers" id="ciphers">What SSL Ciphers are supported by mod_ssl?</a></h3>
-<p>Usually just all SSL ciphers which are supported by the
- version of OpenSSL in use (can depend on the way you built
- OpenSSL). Typically this at least includes the following:</p>
-
- <ol>
- <li>RC4 with MD5</li>
-
- <li>RC4 with MD5 (export version restricted to 40-bit key)</li>
- <li>RC2 with MD5</li>
- <li>RC2 with MD5 (export version restricted to 40-bit key)</li>
- <li>IDEA with MD5</li>
- <li>DES with MD5</li>
- <li>Triple-DES with MD5</li>
-
- </ol>
-
- <p>To determine the actual list of supported ciphers you can
- run the following command:</p>
- <div class="example"><p><code>$ openssl ciphers -v</code></p></div>
-
-
-<h3><a name="adh" id="adh">I want to use Anonymous Diffie-Hellman (ADH) ciphers, but I always get ``no
-shared cipher'' errors?</a></h3>
-<p>In order to use Anonymous Diffie-Hellman (ADH) ciphers, it is not enough
- to just put ``<code>ADH</code>'' into your <code>SSLCipherSuite</code>.
- Additionally you have to build OpenSSL with
- ``<code>-DSSL_ALLOW_ADH</code>''. Because per default OpenSSL does not
- allow ADH ciphers for security reasons. So if you are actually enabling
- these ciphers make sure you are informed about the side-effects.</p>
-
-
-<h3><a name="sharedciphers" id="sharedciphers">I always just get a 'no shared ciphers' error if
-I try to connect to my freshly installed server?</a></h3>
-<p>Either you have messed up your <code>SSLCipherSuite</code>
- directive (compare it with the pre-configured example in
- <code>httpd.conf-dist</code>) or you have chosen the DSA/DH
- algorithms instead of RSA when you generated your private key
- and ignored or overlooked the warnings. If you have chosen
- DSA/DH, then your server no longer speaks RSA-based SSL ciphers
- (at least not until you also configure an additional RSA-based
- certificate/key pair). But current browsers like NS or IE only speak
- RSA ciphers. The result is the "no shared ciphers" error. To fix
- this, regenerate your server certificate/key pair and this time
- choose the RSA algorithm.</p>
-
-
-<h3><a name="vhosts" id="vhosts">Why can't I use SSL with name-based/non-IP-based virtual hosts?</a></h3>
-<p>The reason is very technical. Actually it's some sort of a chicken and
- egg problem: The SSL protocol layer stays below the HTTP protocol layer
- and encapsulates HTTP. When an SSL connection (HTTPS) is established
- Apache/mod_ssl has to negotiate the SSL protocol parameters with the
- client. For this mod_ssl has to consult the configuration of the virtual
- server (for instance it has to look for the cipher suite, the server
- certificate, etc.). But in order to dispatch to the correct virtual server
- Apache has to know the <code>Host</code> HTTP header field. For this the
- HTTP request header has to be read. This cannot be done before the SSL
- handshake is finished. But the information is already needed at the SSL
- handshake phase. Bingo!</p>
-
-
-<h3><a name="vhosts2" id="vhosts2">Why is it not possible to use Name-Based
-Virtual Hosting to identify different SSL virtual hosts?</a></h3>
- <p>Name-Based Virtual Hosting is a very popular method of identifying
- different virtual hosts. It allows you to use the same IP address and
- the same port number for many different sites. When people move on to
- SSL, it seems natural to assume that the same method can be used to have
- lots of different SSL virtual hosts on the same server.</p>
-
- <p>It comes as rather a shock to learn that it is impossible.</p>
-
- <p>The reason is that the SSL protocol is a separate layer which
- encapsulates the HTTP protocol. So the problem is that the SSL session
- is a separate transaction that takes place before the HTTP session even
- starts. Therefore all the server receives is an SSL request on IP
- address X and port Y (usually 443). Since the SSL request does not
- contain any Host: field, the server has no way to decide which SSL
- virtual host to use. Usually, it will just use the first one it finds
- that matches the port and IP address.</p>
-
- <p>You can, of course, use Name-Based Virtual Hosting to identify many
- non-SSL virtual hosts (all on port 80, for example) and then you can
- have no more than 1 SSL virtual host (on port 443). But if you do this,
- you must make sure to put the non-SSL port number on the NameVirtualHost
- directive, e.g.</p>
-
- <div class="example"><p><code>
- NameVirtualHost 192.168.1.1:80
- </code></p></div>
-
- <p>Other workaround solutions are: </p>
-
- <p>Use separate IP addresses for different SSL hosts.
- Use different port numbers for different SSL hosts.</p>
-
-
-<h3><a name="lockicon" id="lockicon">When I use Basic Authentication over HTTPS the lock icon in Netscape browsers
-still shows the unlocked state when the dialog pops up. Does this mean the
-username/password is still transmitted unencrypted?</a></h3>
-<p>No, the username/password is already transmitted encrypted. The icon in
- Netscape browsers is just not really synchronized with the SSL/TLS layer
- (it toggles to the locked state when the first part of the actual webpage
- data is transferred which is not quite correct) and this way confuses
- people. The Basic Authentication facility is part of the HTTP layer and
- this layer is above the SSL/TLS layer in HTTPS. And before any HTTP data
- communication takes place in HTTPS the SSL/TLS layer has already done the
- handshake phase and switched to encrypted communication. So, don't get
- confused by this icon.</p>
-
-
-<h3><a name="msie" id="msie">When I connect via HTTPS to an Apache+mod_ssl+OpenSSL server with Microsoft Internet
-Explorer (MSIE) I get various I/O errors. What is the reason?</a></h3>
-<p>The first reason is that the SSL implementation in some MSIE versions has
- some subtle bugs related to the HTTP keep-alive facility and the SSL close
- notify alerts on socket connection close. Additionally the interaction
- between SSL and HTTP/1.1 features are problematic with some MSIE versions,
- too. You've to work-around these problems by forcing
- Apache+mod_ssl+OpenSSL to not use HTTP/1.1, keep-alive connections or
- sending the SSL close notify messages to MSIE clients. This can be done by
- using the following directive in your SSL-aware virtual host section:</p>
- <div class="example"><p><code>
- SetEnvIf User-Agent ".*MSIE.*" \<br />
- nokeepalive ssl-unclean-shutdown \<br />
- downgrade-1.0 force-response-1.0
- </code></p></div>
- <p>Additionally it is known some MSIE versions have also problems
- with particular ciphers. Unfortunately one cannot workaround these
- bugs only for those MSIE particular clients, because the ciphers
- are already used in the SSL handshake phase. So a MSIE-specific
- <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> doesn't work
- to solve these problems. Instead one has to do more drastic
- adjustments to the global parameters. But before you decide to do
- this, make sure your clients really have problems. If not, do not
- do this, because it affects all(!) your clients, i.e., also your
- non-MSIE clients.</p>
-
- <p>The next problem is that 56bit export versions of MSIE 5.x browsers have a
- broken SSLv3 implementation which badly interacts with OpenSSL versions
- greater than 0.9.4. You can either accept this and force your clients to
- upgrade their browsers, or you downgrade to OpenSSL 0.9.4 (hmmm), or you
- can decide to workaround it by accepting the drawback that your workaround
- will horribly affect also other browsers:</p>
- <div class="example"><p><code>SSLProtocol all -SSLv3</code></p></div>
- <p>This completely disables the SSLv3 protocol and lets those browsers work.
- But usually this is an even less acceptable workaround. A more reasonable
- workaround is to address the problem more closely and disable only the
- ciphers which cause trouble.</p>
- <div class="example"><p><code>SSLCipherSuite
- ALL:!ADH:<strong>!EXPORT56</strong>:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>
- </p></div>
-
- <p>This also lets the broken MSIE versions work, but only removes the
- newer 56bit TLS ciphers.</p>
-
- <p>Another problem with MSIE 5.x clients is that they refuse to connect to
- URLs of the form <code>https://12.34.56.78/</code> (IP-addresses are used
- instead of the hostname), if the server is using the Server Gated
- Cryptography (SGC) facility. This can only be avoided by using the fully
- qualified domain name (FQDN) of the website in hyperlinks instead, because
- MSIE 5.x has an error in the way it handles the SGC negotiation.</p>
-
- <p>And finally there are versions of MSIE which seem to require that
- an SSL session can be reused (a totally non standard-conforming
- behaviour, of course). Connection with those MSIE versions only work
- if a SSL session cache is used. So, as a work-around, make sure you
- are using a session cache (see <code class="directive"><a href="../mod/mod_ssl.html#sslsessioncache">SSLSessionCache</a></code> directive).</p>
-
-
-<h3><a name="nn" id="nn">When I connect via HTTPS to an Apache+mod_ssl server with Netscape Navigator I
-get I/O errors and the message "Netscape has encountered bad data from the
-server" What's the reason?</a></h3>
-<p>
- The problem usually is that you had created a new server certificate with
- the same DN, but you had told your browser to accept forever the old
- server certificate. Once you clear the entry in your browser for the old
- certificate, everything usually will work fine. Netscape's SSL
- implementation is correct, so when you encounter I/O errors with Netscape
- Navigator it is most of the time caused by the configured certificates.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">About Support</a></h2>
-<ul>
-<li><a href="#resources">Resources in case of problems?</a></li>
-<li><a href="#contact">Support in case of problems?</a></li>
-<li><a href="#reportdetails">How to write a problem report?</a></li>
-<li><a href="#coredumphelp">I got a core dump, can you help me?</a></li>
-<li><a href="#backtrace">How to get a backtrace?</a></li>
-</ul>
-
-<h3><a name="resources" id="resources">What information resources are available in case of mod_ssl problems?</a></h3>
-<p>The following information resources are available.
- In case of problems you should search here first.</p>
-
- <dl>
- <dt>Answers in the User Manual's F.A.Q. List (this)</dt>
- <dd><a href="http://httpd.apache.org/docs-2.1/ssl/ssl_faq.html">
- http://httpd.apache.org/docs-2.1/ssl/ssl_faq.html</a><br />
- First look inside the F.A.Q. (this text), perhaps your problem is such
- popular that it was already answered a lot of times in the past.
- </dd>
- <dt>Postings from the modssl-users Support Mailing List
- <a href="http://www.modssl.org/support/">http://www.modssl.org/support/</a></dt>
- <dd>Second search for your problem in one of the existing archives of the
- modssl-users mailing list. Perhaps your problem popped up at least once for
- another user, too.
- </dd>
- </dl>
-
-
-<h3><a name="contact" id="contact">What support contacts are available in case of mod_ssl problems?</a></h3>
- <p>The following lists all support possibilities for mod_ssl, in order of
- preference, i.e. start in this order and do not pick the support possibility
- you just like most, please.</p>
-
- <ol>
- <li><em>Write a Problem Report into the Bug Database</em><br />
- <a href="http://www.modssl.org/support/bugdb/">
- http://www.modssl.org/support/bugdb/</a><br />
- This is the preferred way of submitting your problem report, because this
- way it gets filed into the bug database (it cannot be lost) <em>and</em>
- send to the modssl-users mailing list (others see the current problems and
- learn from answers).
- </li>
-
- <li><em>Write a Problem Report to the modssl-users Support Mailing List</em><br />
- <a href="mailto:modssl-users@modssl.org">
- modssl-users@modssl.org</a><br />
- This is the second way of submitting your problem report. You have to
- subscribe to the list first, but then you can easily discuss your problem
- with both the author and the whole mod_ssl user community.
- </li>
- </ol>
-
-
-<h3><a name="reportdetails" id="reportdetails">What information and details should I
- provide when writing a bug report?</a></h3>
-<p>You have to at least always provide the following information:</p>
-
- <dl>
- <dt>Apache and OpenSSL version information</dt>
- <dd>The Apache version can be determined
- by running ``<code>httpd -v</code>''. The OpenSSL version can be
- determined by running ``<code>openssl version</code>''. Alternatively when
- you have Lynx installed you can run the command ``<code>lynx -mime_header
- http://localhost/ | grep Server</code>'' to determine all information in a
- single step.
- </dd>
-
- <dt>The details on how you built and installed Apache+mod_ssl+OpenSSL</dt>
- <dd>For this you can provide a logfile of your terminal session which shows
- the configuration and install steps. Alternatively you can at least
- provide the <code>configure</code> command line you used.
- </dd>
-
- <dt>In case of core dumps please include a Backtrace</dt>
- <dd>In case your Apache+mod_ssl+OpenSSL should really dump core please attach
- a stack-frame ``backtrace'' (see the next question on how to get it).
- Without this information the reason for your core dump cannot be found.
- So you have to provide the backtrace, please.
- </dd>
-
- <dt>A detailed description of your problem</dt>
- <dd>Don't laugh, I'm totally serious. I already got a lot of problem reports
- where the people not really said what's the actual problem is. So, in your
- own interest (you want the problem be solved, don't you?) include as much
- details as possible, please. But start with the essentials first, of
- course.
- </dd>
- </dl>
-
-
-<h3><a name="coredumphelp" id="coredumphelp">I got a core dump, can you help me?</a></h3>
-<p>In general no, at least not unless you provide more details about the code
- location where Apache dumped core. What is usually always required in
- order to help you is a backtrace (see next question). Without this
- information it is mostly impossible to find the problem and help you in
- fixing it.</p>
-
-
-<h3><a name="backtrace" id="backtrace">Ok, I got a core dump but how do I get a backtrace to find out the reason for it?</a></h3>
-<p>Follow the following steps:</p>
- <ol>
- <li>Make sure you have debugging symbols available in at least
- Apache. On platforms where you use GCC/GDB you have to build
- Apache+mod_ssl with ``<code>OPTIM="-g -ggdb3"</code>'' to achieve this. On
- other platforms at least ``<code>OPTIM="-g"</code>'' is needed.
- </li>
-
- <li>Startup the server and try to produce the core-dump. For this you perhaps
- want to use a directive like ``<code>CoreDumpDirectory /tmp</code>'' to
- make sure that the core-dump file can be written. You then should get a
- <code>/tmp/core</code> or <code>/tmp/httpd.core</code> file. When you
- don't get this, try to run your server under an UID != 0 (root), because
- most "current" kernels do not allow a process to dump core after it has
- done a <code>setuid()</code> (unless it does an <code>exec()</code>) for
- security reasons (there can be privileged information left over in
- memory). Additionally you can run ``<code>/path/to/httpd -X</code>''
- manually to force Apache to not fork.
- </li>
-
- <li>Analyze the core-dump. For this run <code>gdb /path/to/httpd
- /tmp/httpd.core</code> or a similar command has to run. In GDB you then
- just have to enter the <code>bt</code> command and, voila, you get the
- backtrace. For other debuggers consult your local debugger manual. Send
- this backtrace to the author.
- </li>
- </ol>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_faq.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/ssl_faq.xml b/docs/manual/ssl/ssl_faq.xml
deleted file mode 100644
index d19e5f8eeb..0000000000
--- a/docs/manual/ssl/ssl_faq.xml
+++ /dev/null
@@ -1,1023 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.19 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssl_faq.xml.meta">
-<parentdocument href="./">SSL/TLS</parentdocument>
-
- <title>SSL/TLS Strong Encryption: FAQ</title>
-
-<summary>
-<blockquote>
-<p>The wise man doesn't give the right answers,
-he poses the right questions.</p>
-<p class="cite">-- <cite>Claude Levi-Strauss</cite></p>
-
-</blockquote>
-<p>This chapter is a collection of frequently asked questions (FAQ) and
-corresponding answers following the popular USENET tradition. Most of these
-questions occurred on the Newsgroup <code><a href="news:comp.infosystems.www.servers.unix"
->comp.infosystems.www.servers.unix</a></code> or the mod_ssl Support
-Mailing List <code><a href="mailto:modssl-users@modssl.org"
->modssl-users@modssl.org</a></code>. They are collected at this place
-to avoid answering the same questions over and over.</p>
-
-<p>Please read this chapter at least once when installing mod_ssl or at least
-search for your problem here before submitting a problem report to the
-author.</p>
-</summary>
-
-<section id="about"><title>About The Module</title>
-<ul>
-<li><a href="#history">What is the history of mod_ssl?</a></li>
-<li><a href="#y2k">mod_ssl and Year 2000?</a></li>
-<li><a href="#wassenaar">mod_ssl and Wassenaar Arrangement?</a></li>
-</ul>
-
-<section id="history"><title>What is the history of mod_ssl?</title>
-<p>The mod_ssl v1 package was initially created in April 1998 by <a
- href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> via porting <a
- href="mailto:ben@algroup.co.uk">Ben Laurie</a>'s <a
- href="http://www.apache-ssl.org/">Apache-SSL</a> 1.17 source patches for
- Apache 1.2.6 to Apache 1.3b6. Because of conflicts with Ben
- Laurie's development cycle it then was re-assembled from scratch for
- Apache 1.3.0 by merging the old mod_ssl 1.x with the newer Apache-SSL
- 1.18. From this point on mod_ssl lived its own life as mod_ssl v2. The
- first publicly released version was mod_ssl 2.0.0 from August 10th,
- 1998. As of this writing (August 1999) the current mod_ssl version
- is 2.4.0.</p>
-
-
- <p>After one year of very active development with over 1000 working hours and
- over 40 releases mod_ssl reached its current state. The result is an
- already very clean source base implementing a very rich functionality.
- The code size increased by a factor of 4 to currently a total of over
- 10.000 lines of ANSI C consisting of approx. 70% code and 30% code
- documentation. From the original Apache-SSL code currently approx. 5% is
- remaining only.</p>
-
- <p>After the US export restrictions for cryptographic software were
- opened, mod_ssl was integrated into the code base of Apache V2 in 2001.</p>
-</section>
-
-<section id="y2k"><title>Is mod_ssl Year 2000 compliant?</title>
-<p>Yes, mod_ssl is Year 2000 compliant.</p>
-
- <p>Because first mod_ssl internally never stores years as two digits.
- Instead it always uses the ANSI C &amp; POSIX numerical data type
- <code>time_t</code> type, which on almost all Unix platforms at the moment
- is a <code>signed long</code> (usually 32-bits) representing seconds since
- epoch of January 1st, 1970, 00:00 UTC. This signed value overflows in
- early January 2038 and not in the year 2000. Second, date and time
- presentations (for instance the variable ``<code>%{TIME_YEAR}</code>'')
- are done with full year value instead of abbreviating to two digits.</p>
-
-
- <p>Additionally according to a <a
- href="http://www.apache.org/docs/misc/FAQ.html#year2000">Year 2000
- statement</a> from the Apache Group, the Apache webserver is Year 2000
- compliant, too. But whether OpenSSL or the underlying Operating System
- (either a Unix or Win32 platform) is Year 2000 compliant is a different
- question which cannot be answered here.</p>
-</section>
-
-<section id="wassenaar"><title>What about mod_ssl and the Wassenaar Arrangement?</title>
-<p>First, let us explain what <dfn>Wassenaar</dfn> and its <dfn>Arrangement on
- Export Controls for Conventional Arms and Dual-Use Goods and
- Technologies</dfn> is: This is a international regime, established 1995, to
- control trade in conventional arms and dual-use goods and technology. It
- replaced the previous <dfn>CoCom</dfn> regime. 33 countries are signatories:
- Argentina, Australia, Austria, Belgium, Bulgaria, Canada, Czech Republic,
- Denmark, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Japan,
- Luxembourg, the Netherlands, New Zealand, Norway, Poland, Portugal, Republic
- of Korea, Romania, Russian Federation, Slovak Republic, Spain, Sweden,
- Switzerland, Turkey, Ukraine, the United Kingdom and the United States. For more
- details look at <a
- href="http://www.wassenaar.org/">http://www.wassenaar.org/</a>.</p>
-
-
- <p>In short: The aim of the Wassenaar Arrangement is to prevent the build up
- of military capabilities that threaten regional and international security
- and stability. The Wassenaar Arrangement controls the export of
- cryptography as a dual-use good, i.e., one that has both military and
- civilian applications. However, the Wassenaar Arrangement also provides an
- exemption from export controls for mass-market software and free software.</p>
-
- <p>In the current Wassenaar <cite>List of Dual Use Goods and Technologies And
- Munitions</cite>, under <q>GENERAL SOFTWARE NOTE (GSN)</q> it says
- <q>The Lists do not control "software" which is either: 1. [...] 2. "in
- the public domain".</q> And under <q>DEFINITIONS OF TERMS USED IN
- THESE LISTS</q> one can find the definition: <q>In the public
- domain": This means "technology" or "software" which has been made
- available without restrictions upon its further dissemination. N.B.
- Copyright restrictions do not remove "technology" or "software" from being
- "in the public domain".</q></p>
-
- <p>So, both mod_ssl and OpenSSL are <q>in the public domain</q> for the purposes
- of the Wassenaar Agreement and its <q>List of Dual Use Goods and
- Technologies And Munitions List</q>.</p>
-
- <p>So, mod_ssl and OpenSSL are not affected by the Wassenaar Agreement.</p>
-</section>
-</section>
-<!-- /about -->
-
-<section id="installation"><title>About Installation</title>
-<ul>
-<li><a href="#coredump">Core dumps for HTTPS requests?</a></li>
-<li><a href="#mutex">Permission problem on SSLMutex</a></li>
-<li><a href="#mm">Shared memory and process size?</a></li>
-<li><a href="#entropy">PRNG and not enough entropy?</a></li>
-</ul>
-
-<section id="coredump"><title>When I access my website the first time via HTTPS I get a core dump?</title>
-<p>There can be a lot of reasons why a core dump can occur, of course.
- Ranging from buggy third-party modules, over buggy vendor libraries up to
- a buggy mod_ssl version. But the above situation is often caused by old or
- broken vendor DBM libraries. To solve it either build mod_ssl with the
- built-in SDBM library (specify <code>--enable-rule=SSL_SDBM</code> at the
- APACI command line) or switch from <code>SSLSessionCache dbm:</code> to the
- newer <code>SSLSessionCache shm:</code>'' variant (after you have rebuilt
- Apache with MM, of course).</p>
-</section>
-
-<section id="mutex"><title>When I startup Apache I get permission errors related to SSLMutex?</title>
-<p>When you receive entries like ``<code>mod_ssl: Child could not open
- SSLMutex lockfile /opt/apache/logs/ssl_mutex.18332 (System error follows)
- [...] System: Permission denied (errno: 13)</code>'' this is usually
- caused by to restrictive permissions on the <em>parent</em> directories.
- Make sure that all parent directories (here <code>/opt</code>,
- <code>/opt/apache</code> and <code>/opt/apache/logs</code>) have the x-bit
- set at least for the UID under which Apache's children are running (see
- the <directive module="mpm_common">User</directive> directive of Apache).</p>
-</section>
-
-<section id="mm"><title>When I use the MM library and the shared memory cache each process grows
-1.5MB according to `top' although I specified 512000 as the cache size?</title>
-<p>The additional 1MB are caused by the global shared memory pool Apache
- allocates for all modules and which is not used by mod_ssl for
- various reasons. So the actually allocated shared memory is always
- 1MB more than what you specify on <directive module="mod_ssl">SSLSessionCache</directive>.
- But don't be confused by the display of `top': although is
- indicates that <em>each</em> process grow, this is not reality, of
- course. Instead the additional memory consumption is shared by
- all processes, i.e. the 1.5MB are allocated only once per Apache
- instance and not once per Apache server process.</p>
-</section>
-
-<section id="entropy"><title>When I fire up the server, mod_ssl stops with the error
-"Failed to generate temporary 512 bit RSA private key", why?</title>
-<p>Cryptographic software needs a source of unpredictable data
- to work correctly. Many open source operating systems provide
- a "randomness device" that serves this purpose (usually named
- <code>/dev/random</code>). On other systems, applications have to
- seed the OpenSSL Pseudo Random Number Generator (PRNG) manually with
- appropriate data before generating keys or performing public key
- encryption. As of version 0.9.5, the OpenSSL functions that need
- randomness report an error if the PRNG has not been seeded with
- at least 128 bits of randomness. So mod_ssl has to provide enough
- entropy to the PRNG to work correctly. For this one has to use the
- <code>SSLRandomSeed</code> directives.</p>
-</section>
-</section>
-<!-- /installation -->
-
-<section id="aboutconfig"><title>About Configuration</title>
-<ul>
-<li><a href="#parallel">HTTP and HTTPS with a single server?</a></li>
-<li><a href="#ports">Where is the HTTPS port?</a></li>
-<li><a href="#httpstest">How to test HTTPS manually?</a></li>
-<li><a href="#hang">Why does my connection hang?</a></li>
-<li><a href="#refused">Why do I get connection refused?</a></li>
-<li><a href="#envvars">Why are the <code>SSL_XXX</code> variables missing?</a></li>
-<li><a href="#relative">How to switch with relative hyperlinks?</a></li>
-</ul>
-
-<section id="parallel"><title>Is it possible to provide HTTP and HTTPS with a single server?</title>
-<p>Yes, HTTP and HTTPS use different server ports, so there is no direct
- conflict between them. Either run two separate server instances (one binds
- to port 80, the other to port 443) or even use Apache's elegant virtual
- hosting facility where you can easily create two virtual servers which
- Apache dispatches: one responding to port 80 and speaking HTTP and one
- responding to port 443 speaking HTTPS.</p>
-</section>
-
-<section id="ports"><title>I know that HTTP is on port 80, but where is HTTPS?</title>
-<p>You can run HTTPS on any port, but the standards specify port 443, which
- is where any HTTPS compliant browser will look by default. You can force
- your browser to look on a different port by specifying it in the URL like
- this (for port 666): <code>https://secure.server.dom:666/</code></p>
-</section>
-
-<section id="httpstest"><title>How can I speak HTTPS manually for testing purposes?</title>
- <p>While you usually just use</p>
-
- <example>$ telnet localhost 80<br />
- GET / HTTP/1.0</example>
-
-
- <p>for simple testing the HTTP protocol of Apache, it's not so easy for
- HTTPS because of the SSL protocol between TCP and HTTP. But with the
- help of OpenSSL's <code>s_client</code> command you can do a similar
- check even for HTTPS:</p>
-
- <example>$ openssl s_client -connect localhost:443 -state -debug<br />
- GET / HTTP/1.0</example>
-
- <p>Before the actual HTTP response you receive detailed information about the
- SSL handshake. For a more general command line client which directly
- understands both the HTTP and HTTPS scheme, can perform GET and POST
- methods, can use a proxy, supports byte ranges, etc. you should have a
- look at nifty <a href="http://curl.haxx.se/">cURL</a>
- tool. With it you can directly check if your Apache is running fine on
- Port 80 and 443 as following:</p>
-
- <example>$ curl http://localhost/<br />
- $ curl https://localhost/</example>
-</section>
-
-<section id="hang"><title>Why does the connection hang when I connect to my SSL-aware Apache server?</title>
-<p>Because you connected with HTTP to the HTTPS port, i.e. you used an URL of
- the form ``<code>http://</code>'' instead of ``<code>https://</code>''.
- This also happens the other way round when you connect via HTTPS to a HTTP
- port, i.e. when you try to use ``<code>https://</code>'' on a server that
- doesn't support SSL (on this port). Make sure you are connecting to a
- virtual server that supports SSL, which is probably the IP associated with
- your hostname, not localhost (127.0.0.1).</p>
-</section>
-
-<section id="refused"><title>Why do I get ``Connection Refused'' messages when trying to access my freshly
-installed Apache+mod_ssl server via HTTPS?</title>
-<p>There can be various reasons. Some of the common mistakes is that people
- start Apache with just ``<code>apachectl start</code>'' (or
- ``<code>httpd</code>'') instead of ``<code>apachectl startssl</code>'' (or
- ``<code>httpd -DSSL</code>''. Or you're configuration is not correct. At
- least make sure that your <directive module="mpm_common">Listen</directive>
- directives match your <directive type="section" module="core">VirtualHost</directive>
- directives. And if all fails, please do yourself a favor and start over with the
- default configuration mod_ssl provides you.</p>
-</section>
-
-<section id="envvars"><title>In my CGI programs and SSI scripts the various documented
-<code>SSL_XXX</code> variables do not exist. Why?</title>
-<p>Just make sure you have ``<code>SSLOptions +StdEnvVars</code>''
- enabled for the context of your CGI/SSI requests.</p>
-</section>
-
-<section id="relative">
-<title>How can I use relative hyperlinks to switch between HTTP and
-HTTPS?</title>
- <p>Usually you have to use fully-qualified hyperlinks because
- you have to change the URL scheme. But with the help of some URL
- manipulations through mod_rewrite you can achieve the same effect while
- you still can use relative URLs:</p>
- <example>
- RewriteEngine on<br />
- RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L]<br />
- RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]
- </example>
-
- <p>This rewrite ruleset lets you use hyperlinks of the form
- <code>&lt;a href="document.html:SSL"&gt;</code></p>
-</section>
-</section>
-<!-- configuration -->
-
-<section id="aboutcerts"><title>About Certificates</title>
-<ul>
-<li><a href="#keyscerts">What are Keys, CSRs and Certs?</a></li>
-<li><a href="#startup">Difference on startup?</a></li>
-<li><a href="#realcert">How to create a real cert?</a></li>
-<li><a href="#ownca">How to create my own CA?</a></li>
-<li><a href="#passphrase">How to change a pass phrase?</a></li>
-<li><a href="#removepassphrase">How to remove a pass phrase?</a></li>
-<li><a href="#verify">How to verify a key/cert pair?</a></li>
-<li><a href="#badcert">Bad Certificate Error?</a></li>
-<li><a href="#keysize">Why does a 2048-bit key not work?</a></li>
-<li><a href="#hashsymlinks">Why is client auth broken?</a></li>
-<li><a href="#pemder">How to convert from PEM to DER?</a></li>
-<li><a href="#verisign">Verisign and the magic getca program?</a></li>
-<li><a href="#sgc">Global IDs or SGC?</a></li>
-<li><a href="#gid">Global IDs and Cert Chain?</a></li>
-</ul>
-
-<section id="keyscerts"><title>What are RSA Private Keys, CSRs and Certificates?</title>
-<p>The RSA private key file is a digital file that you can use to decrypt
- messages sent to you. It has a public component which you distribute (via
- your Certificate file) which allows people to encrypt those messages to
- you. A Certificate Signing Request (CSR) is a digital file which contains
- your public key and your name. You send the CSR to a Certifying Authority
- (CA) to be converted into a real Certificate. A Certificate contains your
- RSA public key, your name, the name of the CA, and is digitally signed by
- your CA. Browsers that know the CA can verify the signature on that
- Certificate, thereby obtaining your RSA public key. That enables them to
- send messages which only you can decrypt.
- See the <a href="ssl_intro.html">Introduction</a> chapter for a general
- description of the SSL protocol.</p>
-</section>
-
-<section id="startup"><title>Seems like there is a difference on startup between the original Apache and an SSL-aware Apache?</title>
-<p>Yes, in general, starting Apache with a built-in mod_ssl is just like
- starting an unencumbered Apache, except for the fact that when you have a
- pass phrase on your SSL private key file. Then a startup dialog pops up
- asking you to enter the pass phrase.</p>
-
- <p>To type in the pass phrase manually when starting the server can be
- problematic, for instance when starting the server from the system boot
- scripts. As an alternative to this situation you can follow the steps
- below under ``How can I get rid of the pass-phrase dialog at Apache
- startup time?''.</p>
-</section>
-
-<section id="realcert"><title>Ok, I've got my server installed and want to create a real SSL
-server Certificate for it. How do I do it?</title>
-<p>Here is a step-by-step description:</p>
-
- <ol>
- <li>Make sure OpenSSL is really installed and in your <code>PATH</code>.
- But some commands even work ok when you just run the
- ``<code>openssl</code>'' program from within the OpenSSL source tree as
- ``<code>./apps/openssl</code>''.<br />
-
- <br />
- </li>
- <li>Create a RSA private key for your Apache server
- (will be Triple-DES encrypted and PEM formatted):<br />
- <br />
- <code><strong>$ openssl genrsa -des3 -out server.key 1024</strong></code><br />
- <br />
- Please backup this <code>server.key</code> file and remember the
- pass-phrase you had to enter at a secure location.
- You can see the details of this RSA private key via the command:<br />
-
- <br />
- <code><strong>$ openssl rsa -noout -text -in server.key</strong></code><br />
- <br />
- And you could create a decrypted PEM version (not recommended)
- of this RSA private key via:<br />
- <br />
- <code><strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></code><br />
- <br />
-
- </li>
- <li>Create a Certificate Signing Request (CSR) with the server RSA private
- key (output will be PEM formatted):<br />
- <br />
- <code><strong>$ openssl req -new -key server.key -out server.csr</strong></code><br />
- <br />
- Make sure you enter the FQDN ("Fully Qualified Domain Name") of the
- server when OpenSSL prompts you for the "CommonName", i.e. when you
- generate a CSR for a website which will be later accessed via
- <code>https://www.foo.dom/</code>, enter "www.foo.dom" here.
- You can see the details of this CSR via the command<br />
-
- <br />
- <code><strong>$ openssl req -noout -text -in server.csr</strong></code><br />
- <br />
- </li>
- <li>You now have to send this Certificate Signing Request (CSR) to
- a Certifying Authority (CA) for signing. The result is then a real
- Certificate which can be used for Apache. Here you have two options:
- First you can let the CSR sign by a commercial CA like Verisign or
- Thawte. Then you usually have to post the CSR into a web form, pay for
- the signing and await the signed Certificate you then can store into a
- server.crt file. For more information about commercial CAs have a look
- at the following locations:<br />
- <br />
- <ol>
- <li> Verisign<br />
-
- <a href="http://digitalid.verisign.com/server/apacheNotice.htm">
- http://digitalid.verisign.com/server/apacheNotice.htm
- </a>
- </li>
- <li> Thawte Consulting<br />
- <a href="http://www.thawte.com/certs/server/request.html">
- http://www.thawte.com/certs/server/request.html
- </a>
- </li>
-
- <li> CertiSign Certificadora Digital Ltda.<br />
- <a href="http://www.certisign.com.br">
- http://www.certisign.com.br
- </a>
- </li>
- <li> IKS GmbH<br />
- <a href="http://www.iks-jena.de/produkte/ca/">
-
- http://www.iks-jena.de/produkte/ca/
- </a>
- </li>
- <li> Uptime Commerce Ltd.<br />
- <a href="http://www.uptimecommerce.com">
- http://www.uptimecommerce.com
- </a>
- </li>
- <li> BelSign NV/SA<br />
-
- <a href="http://www.belsign.be">
- http://www.belsign.be
- </a>
- </li>
- </ol>
-
- Second you can use your own CA and now have to sign the CSR yourself by
- this CA. Read the next answer in this FAQ on how to sign a CSR with
- your CA yourself.
- You can see the details of the received Certificate via the command:<br />
- <br />
- <code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
-
- </li>
- <li>Now you have two files: <code>server.key</code> and
- <code>server.crt</code>. These now can be used as following inside your
- Apache's <code>httpd.conf</code> file:
- <pre>
- SSLCertificateFile /path/to/this/server.crt
- SSLCertificateKeyFile /path/to/this/server.key
- </pre>
- The <code>server.csr</code> file is no longer needed.
- </li>
-
- </ol>
-</section>
-
-<section id="ownca"><title>How can I create and use my own Certificate Authority (CA)?</title>
- <p>The short answer is to use the <code>CA.sh</code> or <code>CA.pl</code>
-
- script provided by OpenSSL. The long and manual answer is this:</p>
-
- <ol>
- <li>Create a RSA private key for your CA
- (will be Triple-DES encrypted and PEM formatted):<br />
- <br />
- <code><strong>$ openssl genrsa -des3 -out ca.key 1024</strong></code><br />
- <br />
- Please backup this <code>ca.key</code> file and remember the
- pass-phrase you currently entered at a secure location.
- You can see the details of this RSA private key via the command<br />
-
- <br />
- <code><strong>$ openssl rsa -noout -text -in ca.key</strong></code><br />
- <br />
- And you can create a decrypted PEM version (not recommended) of this
- private key via:<br />
- <br />
- <code><strong>$ openssl rsa -in ca.key -out ca.key.unsecure</strong></code><br />
- <br />
-
- </li>
- <li>Create a self-signed CA Certificate (X509 structure)
- with the RSA key of the CA (output will be PEM formatted):<br />
- <br />
- <code><strong>$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt</strong></code><br />
- <br />
- You can see the details of this Certificate via the command:<br />
- <br />
-
- <code><strong>$ openssl x509 -noout -text -in ca.crt</strong></code><br />
- <br />
- </li>
- <li>Prepare a script for signing which is needed because
- the ``<code>openssl ca</code>'' command has some strange requirements
- and the default OpenSSL config doesn't allow one easily to use
- ``<code>openssl ca</code>'' directly. So a script named
- <code>sign.sh</code> is distributed with the mod_ssl distribution
- (subdir <code>pkg.contrib/</code>). Use this script for signing.
- </li>
-
- <li>Now you can use this CA to sign server CSR's in order to create real
- SSL Certificates for use inside an Apache webserver (assuming
- you already have a <code>server.csr</code> at hand):<br />
- <br />
- <code><strong>$ ./sign.sh server.csr</strong></code><br />
- <br />
- This signs the server CSR and results in a <code>server.crt</code> file.<br />
-
- </li>
- </ol>
-
-</section>
-
-<section id="passphrase"><title>How can I change the pass-phrase on my private key file?</title>
-<p>You simply have to read it with the old pass-phrase and write it again
- by specifying the new pass-phrase. You can accomplish this with the following
- commands:</p>
-
-
- <p><code><strong>$ openssl rsa -des3 -in server.key -out server.key.new</strong></code><br />
- <code><strong>$ mv server.key.new server.key</strong></code><br /></p>
-
- <p>Here you're asked two times for a PEM pass-phrase. At the first
- prompt enter the old pass-phrase and at the second prompt
- enter the new pass-phrase.</p>
-</section>
-
-<section id="removepassphrase"><title>How can I get rid of the pass-phrase dialog at Apache startup time?</title>
-<p>The reason why this dialog pops up at startup and every re-start
- is that the RSA private key inside your server.key file is stored in
- encrypted format for security reasons. The pass-phrase is needed to be
- able to read and parse this file. When you can be sure that your server is
- secure enough you perform two steps:</p>
-
- <ol>
- <li>Remove the encryption from the RSA private key (while
- preserving the original file):<br />
- <br />
- <code><strong>$ cp server.key server.key.org</strong></code><br />
- <code><strong>$ openssl rsa -in server.key.org -out server.key</strong></code><br />
-
- <br />
- </li>
- <li>Make sure the server.key file is now only readable by root:<br />
- <br />
- <code><strong>$ chmod 400 server.key</strong></code><br />
- <br />
- </li>
- </ol>
-
- <p>Now <code>server.key</code> will contain an unencrypted copy of the key.
- If you point your server at this file it will not prompt you for a
- pass-phrase. HOWEVER, if anyone gets this key they will be able to
- impersonate you on the net. PLEASE make sure that the permissions on that
- file are really such that only root or the web server user can read it
- (preferably get your web server to start as root but run as another
- server, and have the key readable only by root).</p>
-
- <p>As an alternative approach you can use the ``<code>SSLPassPhraseDialog
- exec:/path/to/program</code>'' facility. But keep in mind that this is
- neither more nor less secure, of course.</p>
-</section>
-
-<section id="verify"><title>How do I verify that a private key matches its Certificate?</title>
-<p>The private key contains a series of numbers. Two of those numbers form
- the "public key", the others are part of your "private key". The "public
- key" bits are also embedded in your Certificate (we get them from your
- CSR). To check that the public key in your cert matches the public
- portion of your private key, you need to view the cert and the key and
- compare the numbers. To view the Certificate and the key run the
- commands:</p>
-
- <p><code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br />
- <code><strong>$ openssl rsa -noout -text -in server.key</strong></code></p>
-
- <p>The `modulus' and the `public exponent' portions in the key and the
- Certificate must match. But since the public exponent is usually 65537
- and it's bothering comparing long modulus you can use the following
- approach:</p>
-
-
- <p><code><strong>$ openssl x509 -noout -modulus -in server.crt | openssl md5</strong></code><br />
- <code><strong>$ openssl rsa -noout -modulus -in server.key | openssl md5</strong></code></p>
-
- <p>And then compare these really shorter numbers. With overwhelming
- probability they will differ if the keys are different. BTW, if I want to
- check to which key or certificate a particular CSR belongs you can compute</p>
-
- <p><code><strong>$ openssl req -noout -modulus -in server.csr | openssl md5</strong></code></p>
-</section>
-
-<section id="badcert"><title>What does it mean when my connections fail with an "alert bad certificate"
-error?</title>
-<p>Usually when you see errors like <code>OpenSSL: error:14094412: SSL
- routines:SSL3_READ_BYTES:sslv3 alert bad certificate</code> in the SSL
- logfile, this means that the browser was unable to handle the server
- certificate/private-key which perhaps contain a RSA-key not equal to 1024
- bits. For instance Netscape Navigator 3.x is one of those browsers.</p>
-</section>
-
-<section id="keysize"><title>Why does my 2048-bit private key not work?</title>
-<p>The private key sizes for SSL must be either 512 or 1024 for compatibility
- with certain web browsers. A keysize of 1024 bits is recommended because
- keys larger than 1024 bits are incompatible with some versions of Netscape
- Navigator and Microsoft Internet Explorer, and with other browsers that
- use RSA's BSAFE cryptography toolkit.</p>
-</section>
-
-<section id="hashsymlinks"><title>Why is client authentication broken after upgrading from
-SSLeay version 0.8 to 0.9?</title>
-<p>The CA certificates under the path you configured with
- <code>SSLCACertificatePath</code> are found by SSLeay through hash
- symlinks. These hash values are generated by the `<code>openssl x509 -noout
- -hash</code>' command. But the algorithm used to calculate the hash for a
- certificate has changed between SSLeay 0.8 and 0.9. So you have to remove
- all old hash symlinks and re-create new ones after upgrading. Use the
- <code>Makefile</code> mod_ssl placed into this directory.</p>
-</section>
-
-<section id="pemder"><title>How can I convert a certificate from PEM to DER format?</title>
-<p>The default certificate format for SSLeay/OpenSSL is PEM, which actually
- is Base64 encoded DER with header and footer lines. For some applications
- (e.g. Microsoft Internet Explorer) you need the certificate in plain DER
- format. You can convert a PEM file <code>cert.pem</code> into the
- corresponding DER file <code>cert.der</code> with the following command:
- <code><strong>$ openssl x509 -in cert.pem -out cert.der -outform DER</strong></code></p>
-</section>
-
-<section id="verisign"><title>I try to install a Verisign certificate. Why can't I find neither the
-<code>getca</code> nor <code>getverisign</code> programs Verisign mentions?</title>
-<p>This is because Verisign has never provided specific instructions
- for Apache+mod_ssl. Rather they tell you what you should do
- if you were using C2Net's Stronghold (a commercial Apache
- based server with SSL support). The only thing you have to do
- is to save the certificate into a file and give the name of
- that file to the <code>SSLCertificateFile</code> directive.
- Remember that you need to give the key file in as well (see
- <code>SSLCertificateKeyFile</code> directive). For a better
- CA-related overview on SSL certificate fiddling you can look at <a
- href="http://www.thawte.com/html/SUPPORT/server/softwaredocs/modssl.html">Thawte's mod_ssl instructions</a>.</p>
-</section>
-
-<section id="sgc"><title>Can I use the Server Gated Cryptography (SGC) facility (aka Verisign Global
-ID) also with mod_ssl?</title>
-<p>Yes, mod_ssl since version 2.1 supports the SGC facility. You don't have
- to configure anything special for this, just use a Global ID as your
- server certificate. The <em>step up</em> of the clients are then
- automatically handled by mod_ssl under run-time. For details please read
- the <code>README.GlobalID</code> document in the mod_ssl distribution.</p>
-</section>
-
-<section id="gid"><title>After I have installed my new Verisign Global ID server certificate, the
-browsers complain that they cannot verify the server certificate?</title>
-<p>That is because Verisign uses an intermediate CA certificate between
- the root CA certificate (which is installed in the browsers) and
- the server certificate (which you installed in the server). You
- should have received this additional CA certificate from Verisign.
- If not, complain to them. Then configure this certificate with the
- <code>SSLCertificateChainFile</code> directive in the server. This
- makes sure the intermediate CA certificate is send to the browser
- and this way fills the gap in the certificate chain.</p>
-</section>
-</section>
-<!-- /certs -->
-
-<section id="aboutssl"><title>About SSL Protocol</title>
-<ul>
-<li><a href="#random">Random SSL errors under heavy load?</a></li>
-<li><a href="#load">Why has the server a higher load?</a></li>
-<li><a href="#establishing">Why are connections horribly slow?</a></li>
-<li><a href="#ciphers">Which ciphers are supported?</a></li>
-<li><a href="#adh">How to use Anonymous-DH ciphers</a></li>
-<li><a href="#sharedciphers">Why do I get 'no shared ciphers'?</a></li>
-<li><a href="#vhosts">HTTPS and name-based vhosts</a></li>
-<li><a href="#vhosts2">Why is it not possible to use Name-Based Virtual
-Hosting to identify different SSL virtual hosts?</a></li>
-<li><a href="#lockicon">The lock icon in Netscape locks very late</a></li>
-<li><a href="#msie">Why do I get I/O errors with MSIE clients?</a></li>
-<li><a href="#nn">Why do I get I/O errors with NS clients?</a></li>
-</ul>
-
-<section id="random"><title>Why do I get lots of random SSL protocol errors under heavy server load?</title>
-<p>There can be a number of reasons for this, but the main one
- is problems with the SSL session Cache specified by the
- <directive module="mod_ssl">SSLSessionCache</directive> directive. The DBM session
- cache is most likely the source of the problem, so trying the SHM session cache or
- no cache at all may help.</p>
-</section>
-
-<section id="load"><title>Why has my webserver a higher load now that I run SSL there?</title>
-<p>Because SSL uses strong cryptographic encryption and this needs a lot of
- number crunching. And because when you request a webpage via HTTPS even
- the images are transferred encrypted. So, when you have a lot of HTTPS
- traffic the load increases.</p>
-</section>
-
-<section id="establishing"><title>Often HTTPS connections to my server require up to 30 seconds for establishing
-the connection, although sometimes it works faster?</title>
-<p>Usually this is caused by using a <code>/dev/random</code> device for
- <code>SSLRandomSeed</code> which is blocking in read(2) calls if not
- enough entropy is available. Read more about this problem in the reference
- chapter under <code>SSLRandomSeed</code>.</p>
-</section>
-
-<section id="ciphers"><title>What SSL Ciphers are supported by mod_ssl?</title>
-<p>Usually just all SSL ciphers which are supported by the
- version of OpenSSL in use (can depend on the way you built
- OpenSSL). Typically this at least includes the following:</p>
-
- <ol>
- <li>RC4 with MD5</li>
-
- <li>RC4 with MD5 (export version restricted to 40-bit key)</li>
- <li>RC2 with MD5</li>
- <li>RC2 with MD5 (export version restricted to 40-bit key)</li>
- <li>IDEA with MD5</li>
- <li>DES with MD5</li>
- <li>Triple-DES with MD5</li>
-
- </ol>
-
- <p>To determine the actual list of supported ciphers you can
- run the following command:</p>
- <example>$ openssl ciphers -v</example>
-</section>
-
-<section id="adh"><title>I want to use Anonymous Diffie-Hellman (ADH) ciphers, but I always get ``no
-shared cipher'' errors?</title>
-<p>In order to use Anonymous Diffie-Hellman (ADH) ciphers, it is not enough
- to just put ``<code>ADH</code>'' into your <code>SSLCipherSuite</code>.
- Additionally you have to build OpenSSL with
- ``<code>-DSSL_ALLOW_ADH</code>''. Because per default OpenSSL does not
- allow ADH ciphers for security reasons. So if you are actually enabling
- these ciphers make sure you are informed about the side-effects.</p>
-</section>
-
-<section id="sharedciphers"><title>I always just get a 'no shared ciphers' error if
-I try to connect to my freshly installed server?</title>
-<p>Either you have messed up your <code>SSLCipherSuite</code>
- directive (compare it with the pre-configured example in
- <code>httpd.conf-dist</code>) or you have chosen the DSA/DH
- algorithms instead of RSA when you generated your private key
- and ignored or overlooked the warnings. If you have chosen
- DSA/DH, then your server no longer speaks RSA-based SSL ciphers
- (at least not until you also configure an additional RSA-based
- certificate/key pair). But current browsers like NS or IE only speak
- RSA ciphers. The result is the "no shared ciphers" error. To fix
- this, regenerate your server certificate/key pair and this time
- choose the RSA algorithm.</p>
-</section>
-
-<section id="vhosts"><title>Why can't I use SSL with name-based/non-IP-based virtual hosts?</title>
-<p>The reason is very technical. Actually it's some sort of a chicken and
- egg problem: The SSL protocol layer stays below the HTTP protocol layer
- and encapsulates HTTP. When an SSL connection (HTTPS) is established
- Apache/mod_ssl has to negotiate the SSL protocol parameters with the
- client. For this mod_ssl has to consult the configuration of the virtual
- server (for instance it has to look for the cipher suite, the server
- certificate, etc.). But in order to dispatch to the correct virtual server
- Apache has to know the <code>Host</code> HTTP header field. For this the
- HTTP request header has to be read. This cannot be done before the SSL
- handshake is finished. But the information is already needed at the SSL
- handshake phase. Bingo!</p>
-</section>
-
-<section id="vhosts2"><title>Why is it not possible to use Name-Based
-Virtual Hosting to identify different SSL virtual hosts?</title>
- <p>Name-Based Virtual Hosting is a very popular method of identifying
- different virtual hosts. It allows you to use the same IP address and
- the same port number for many different sites. When people move on to
- SSL, it seems natural to assume that the same method can be used to have
- lots of different SSL virtual hosts on the same server.</p>
-
- <p>It comes as rather a shock to learn that it is impossible.</p>
-
- <p>The reason is that the SSL protocol is a separate layer which
- encapsulates the HTTP protocol. So the problem is that the SSL session
- is a separate transaction that takes place before the HTTP session even
- starts. Therefore all the server receives is an SSL request on IP
- address X and port Y (usually 443). Since the SSL request does not
- contain any Host: field, the server has no way to decide which SSL
- virtual host to use. Usually, it will just use the first one it finds
- that matches the port and IP address.</p>
-
- <p>You can, of course, use Name-Based Virtual Hosting to identify many
- non-SSL virtual hosts (all on port 80, for example) and then you can
- have no more than 1 SSL virtual host (on port 443). But if you do this,
- you must make sure to put the non-SSL port number on the NameVirtualHost
- directive, e.g.</p>
-
- <example>
- NameVirtualHost 192.168.1.1:80
- </example>
-
- <p>Other workaround solutions are: </p>
-
- <p>Use separate IP addresses for different SSL hosts.
- Use different port numbers for different SSL hosts.</p>
-</section>
-
-<section id="lockicon"><title>When I use Basic Authentication over HTTPS the lock icon in Netscape browsers
-still shows the unlocked state when the dialog pops up. Does this mean the
-username/password is still transmitted unencrypted?</title>
-<p>No, the username/password is already transmitted encrypted. The icon in
- Netscape browsers is just not really synchronized with the SSL/TLS layer
- (it toggles to the locked state when the first part of the actual webpage
- data is transferred which is not quite correct) and this way confuses
- people. The Basic Authentication facility is part of the HTTP layer and
- this layer is above the SSL/TLS layer in HTTPS. And before any HTTP data
- communication takes place in HTTPS the SSL/TLS layer has already done the
- handshake phase and switched to encrypted communication. So, don't get
- confused by this icon.</p>
-</section>
-
-<section id="msie"><title>When I connect via HTTPS to an Apache+mod_ssl+OpenSSL server with Microsoft Internet
-Explorer (MSIE) I get various I/O errors. What is the reason?</title>
-<p>The first reason is that the SSL implementation in some MSIE versions has
- some subtle bugs related to the HTTP keep-alive facility and the SSL close
- notify alerts on socket connection close. Additionally the interaction
- between SSL and HTTP/1.1 features are problematic with some MSIE versions,
- too. You've to work-around these problems by forcing
- Apache+mod_ssl+OpenSSL to not use HTTP/1.1, keep-alive connections or
- sending the SSL close notify messages to MSIE clients. This can be done by
- using the following directive in your SSL-aware virtual host section:</p>
- <example>
- SetEnvIf User-Agent ".*MSIE.*" \<br />
- nokeepalive ssl-unclean-shutdown \<br />
- downgrade-1.0 force-response-1.0
- </example>
- <p>Additionally it is known some MSIE versions have also problems
- with particular ciphers. Unfortunately one cannot workaround these
- bugs only for those MSIE particular clients, because the ciphers
- are already used in the SSL handshake phase. So a MSIE-specific
- <directive module="mod_setenvif">SetEnvIf</directive> doesn't work
- to solve these problems. Instead one has to do more drastic
- adjustments to the global parameters. But before you decide to do
- this, make sure your clients really have problems. If not, do not
- do this, because it affects all(!) your clients, i.e., also your
- non-MSIE clients.</p>
-
- <p>The next problem is that 56bit export versions of MSIE 5.x browsers have a
- broken SSLv3 implementation which badly interacts with OpenSSL versions
- greater than 0.9.4. You can either accept this and force your clients to
- upgrade their browsers, or you downgrade to OpenSSL 0.9.4 (hmmm), or you
- can decide to workaround it by accepting the drawback that your workaround
- will horribly affect also other browsers:</p>
- <example>SSLProtocol all -SSLv3</example>
- <p>This completely disables the SSLv3 protocol and lets those browsers work.
- But usually this is an even less acceptable workaround. A more reasonable
- workaround is to address the problem more closely and disable only the
- ciphers which cause trouble.</p>
- <example><p><code>SSLCipherSuite
- ALL:!ADH:<strong>!EXPORT56</strong>:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>
- </p></example>
-
- <p>This also lets the broken MSIE versions work, but only removes the
- newer 56bit TLS ciphers.</p>
-
- <p>Another problem with MSIE 5.x clients is that they refuse to connect to
- URLs of the form <code>https://12.34.56.78/</code> (IP-addresses are used
- instead of the hostname), if the server is using the Server Gated
- Cryptography (SGC) facility. This can only be avoided by using the fully
- qualified domain name (FQDN) of the website in hyperlinks instead, because
- MSIE 5.x has an error in the way it handles the SGC negotiation.</p>
-
- <p>And finally there are versions of MSIE which seem to require that
- an SSL session can be reused (a totally non standard-conforming
- behaviour, of course). Connection with those MSIE versions only work
- if a SSL session cache is used. So, as a work-around, make sure you
- are using a session cache (see <directive module="mod_ssl"
- >SSLSessionCache</directive> directive).</p>
-</section>
-
-<section id="nn"><title>When I connect via HTTPS to an Apache+mod_ssl server with Netscape Navigator I
-get I/O errors and the message "Netscape has encountered bad data from the
-server" What's the reason?</title>
-<p>
- The problem usually is that you had created a new server certificate with
- the same DN, but you had told your browser to accept forever the old
- server certificate. Once you clear the entry in your browser for the old
- certificate, everything usually will work fine. Netscape's SSL
- implementation is correct, so when you encounter I/O errors with Netscape
- Navigator it is most of the time caused by the configured certificates.</p>
-</section>
-</section>
-<!-- /aboutssl -->
-
-<section id="support"><title>About Support</title>
-<ul>
-<li><a href="#resources">Resources in case of problems?</a></li>
-<li><a href="#contact">Support in case of problems?</a></li>
-<li><a href="#reportdetails">How to write a problem report?</a></li>
-<li><a href="#coredumphelp">I got a core dump, can you help me?</a></li>
-<li><a href="#backtrace">How to get a backtrace?</a></li>
-</ul>
-
-<section id="resources"><title>What information resources are available in case of mod_ssl problems?</title>
-<p>The following information resources are available.
- In case of problems you should search here first.</p>
-
- <dl>
- <dt>Answers in the User Manual's F.A.Q. List (this)</dt>
- <dd><a href="http://httpd.apache.org/docs-2.1/ssl/ssl_faq.html">
- http://httpd.apache.org/docs-2.1/ssl/ssl_faq.html</a><br />
- First look inside the F.A.Q. (this text), perhaps your problem is such
- popular that it was already answered a lot of times in the past.
- </dd>
- <dt>Postings from the modssl-users Support Mailing List
- <a href="http://www.modssl.org/support/"
- >http://www.modssl.org/support/</a></dt>
- <dd>Second search for your problem in one of the existing archives of the
- modssl-users mailing list. Perhaps your problem popped up at least once for
- another user, too.
- </dd>
- </dl>
-</section>
-
-<section id="contact"><title>What support contacts are available in case of mod_ssl problems?</title>
- <p>The following lists all support possibilities for mod_ssl, in order of
- preference, i.e. start in this order and do not pick the support possibility
- you just like most, please.</p>
-
- <ol>
- <li><em>Write a Problem Report into the Bug Database</em><br />
- <a href="http://www.modssl.org/support/bugdb/">
- http://www.modssl.org/support/bugdb/</a><br />
- This is the preferred way of submitting your problem report, because this
- way it gets filed into the bug database (it cannot be lost) <em>and</em>
- send to the modssl-users mailing list (others see the current problems and
- learn from answers).
- </li>
-
- <li><em>Write a Problem Report to the modssl-users Support Mailing List</em><br />
- <a href="mailto:modssl-users@modssl.org">
- modssl-users@modssl.org</a><br />
- This is the second way of submitting your problem report. You have to
- subscribe to the list first, but then you can easily discuss your problem
- with both the author and the whole mod_ssl user community.
- </li>
- </ol>
-</section>
-
-<section id="reportdetails"><title>What information and details should I
- provide when writing a bug report?</title>
-<p>You have to at least always provide the following information:</p>
-
- <dl>
- <dt>Apache and OpenSSL version information</dt>
- <dd>The Apache version can be determined
- by running ``<code>httpd -v</code>''. The OpenSSL version can be
- determined by running ``<code>openssl version</code>''. Alternatively when
- you have Lynx installed you can run the command ``<code>lynx -mime_header
- http://localhost/ | grep Server</code>'' to determine all information in a
- single step.
- </dd>
-
- <dt>The details on how you built and installed Apache+mod_ssl+OpenSSL</dt>
- <dd>For this you can provide a logfile of your terminal session which shows
- the configuration and install steps. Alternatively you can at least
- provide the <code>configure</code> command line you used.
- </dd>
-
- <dt>In case of core dumps please include a Backtrace</dt>
- <dd>In case your Apache+mod_ssl+OpenSSL should really dump core please attach
- a stack-frame ``backtrace'' (see the next question on how to get it).
- Without this information the reason for your core dump cannot be found.
- So you have to provide the backtrace, please.
- </dd>
-
- <dt>A detailed description of your problem</dt>
- <dd>Don't laugh, I'm totally serious. I already got a lot of problem reports
- where the people not really said what's the actual problem is. So, in your
- own interest (you want the problem be solved, don't you?) include as much
- details as possible, please. But start with the essentials first, of
- course.
- </dd>
- </dl>
-</section>
-
-<section id="coredumphelp"><title>I got a core dump, can you help me?</title>
-<p>In general no, at least not unless you provide more details about the code
- location where Apache dumped core. What is usually always required in
- order to help you is a backtrace (see next question). Without this
- information it is mostly impossible to find the problem and help you in
- fixing it.</p>
-</section>
-
-<section id="backtrace"><title>Ok, I got a core dump but how do I get a backtrace to find out the reason for it?</title>
-<p>Follow the following steps:</p>
- <ol>
- <li>Make sure you have debugging symbols available in at least
- Apache. On platforms where you use GCC/GDB you have to build
- Apache+mod_ssl with ``<code>OPTIM="-g -ggdb3"</code>'' to achieve this. On
- other platforms at least ``<code>OPTIM="-g"</code>'' is needed.
- </li>
-
- <li>Startup the server and try to produce the core-dump. For this you perhaps
- want to use a directive like ``<code>CoreDumpDirectory /tmp</code>'' to
- make sure that the core-dump file can be written. You then should get a
- <code>/tmp/core</code> or <code>/tmp/httpd.core</code> file. When you
- don't get this, try to run your server under an UID != 0 (root), because
- most "current" kernels do not allow a process to dump core after it has
- done a <code>setuid()</code> (unless it does an <code>exec()</code>) for
- security reasons (there can be privileged information left over in
- memory). Additionally you can run ``<code>/path/to/httpd -X</code>''
- manually to force Apache to not fork.
- </li>
-
- <li>Analyze the core-dump. For this run <code>gdb /path/to/httpd
- /tmp/httpd.core</code> or a similar command has to run. In GDB you then
- just have to enter the <code>bt</code> command and, voila, you get the
- backtrace. For other debuggers consult your local debugger manual. Send
- this backtrace to the author.
- </li>
- </ol>
-</section>
-</section>
-</manualpage>
diff --git a/docs/manual/ssl/ssl_faq.xml.meta b/docs/manual/ssl/ssl_faq.xml.meta
deleted file mode 100644
index 400d91e74a..0000000000
--- a/docs/manual/ssl/ssl_faq.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ssl_faq</basename>
- <path>/ssl/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/ssl/ssl_howto.html b/docs/manual/ssl/ssl_howto.html
deleted file mode 100644
index ca42f094cf..0000000000
--- a/docs/manual/ssl/ssl_howto.html
+++ /dev/null
@@ -1,3 +0,0 @@
-URI: ssl_howto.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/ssl/ssl_howto.html.en b/docs/manual/ssl/ssl_howto.html.en
deleted file mode 100644
index 621dcc0229..0000000000
--- a/docs/manual/ssl/ssl_howto.html.en
+++ /dev/null
@@ -1,282 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>SSL/TLS Strong Encryption: How-To - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>SSL/TLS Strong Encryption: How-To</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_howto.html" title="English">&nbsp;en&nbsp;</a></p>
-</div>
-
-<blockquote>
-<p>The solution of this problem is trivial
-and is left as an exercise for the reader.</p>
-
-<p class="cite">-- <cite>Standard textbook cookie</cite></p>
-</blockquote>
-
-<p>How to solve particular security constraints for an SSL-aware
-webserver is not always obvious because of the coherences between SSL,
-HTTP and Apache's way of processing requests. This chapter gives
-instructions on how to solve such typical situations. Treat is as a first
-step to find out the final solution, but always try to understand the
-stuff before you use it. Nothing is worse than using a security solution
-without knowing its restrictions and coherences.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#ciphersuites">Cipher Suites and Enforced Strong Security</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#accesscontrol">Client Authentication and Access Control</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ciphersuites" id="ciphersuites">Cipher Suites and Enforced Strong Security</a></h2>
-
-<ul>
-<li><a href="#realssl">SSLv2 only server</a></li>
-<li><a href="#onlystrong">strong encryption only server</a></li>
-<li><a href="#upgradeenc">server gated cryptography</a></li>
-<li><a href="#strongurl">stronger per-directory requirements</a></li>
-</ul>
-
-<h3><a name="realssl" id="realssl">How can I create a real SSLv2-only server?</a></h3>
-
- <p>The following creates an SSL server which speaks only the SSLv2 protocol and
- its ciphers.</p>
-
- <div class="example"><h3>httpd.conf</h3><p><code>
- SSLProtocol -all +SSLv2<br />
- SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP<br />
- </code></p></div>
-
-
-<h3><a name="onlystrong" id="onlystrong">How can I create an SSL server which accepts strong encryption
-only?</a></h3>
-
- <p>The following enables only the seven strongest ciphers:</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- SSLProtocol all<br />
- SSLCipherSuite HIGH:MEDIUM<br />
- </code></p></div>
-
-
-<h3><a name="upgradeenc" id="upgradeenc">How can I create an SSL server which accepts strong encryption
-only, but allows export browsers to upgrade to stronger encryption?</a></h3>
-
- <p>This facility is called Server Gated Cryptography (SGC) and details
- you can find in the <code>README.GlobalID</code> document in the
- mod_ssl distribution. In short: The server has a Global ID server
- certificate, signed by a special CA certificate from Verisign which
- enables strong encryption in export browsers. This works as following:
- The browser connects with an export cipher, the server sends its Global
- ID certificate, the browser verifies it and subsequently upgrades the
- cipher suite before any HTTP communication takes place. The question
- now is: How can we allow this upgrade, but enforce strong encryption.
- Or in other words: Browser either have to initially connect with
- strong encryption or have to upgrade to strong encryption, but are
- not allowed to keep the export ciphers. The following does the trick:</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- # allow all ciphers for the initial handshake,<br />
- # so export browsers can upgrade via SGC facility<br />
- SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br />
- <br />
- &lt;Directory /usr/local/apache2/htdocs&gt;<br />
- # but finally deny all browsers which haven't upgraded<br />
- SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128<br />
- &lt;/Directory&gt;
- </code></p></div>
-
-
-<h3><a name="strongurl" id="strongurl">How can I create an SSL server which accepts all types of ciphers
-in general, but requires a strong ciphers for access to a particular
-URL?</a></h3>
-
- <p>Obviously you cannot just use a server-wide <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> which restricts the
- ciphers to the strong variants. But mod_ssl allows you to reconfigure
- the cipher suite in per-directory context and automatically forces
- a renegotiation of the SSL parameters to meet the new configuration.
- So, the solution is:</p>
- <div class="example"><p><code>
- # be liberal in general<br />
- SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br />
- <br />
- &lt;Location /strong/area&gt;<br />
- # but https://hostname/strong/area/ and below<br />
- # requires strong ciphers<br />
- SSLCipherSuite HIGH:MEDIUM<br />
- &lt;/Location&gt;
- </code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="accesscontrol" id="accesscontrol">Client Authentication and Access Control</a></h2>
-
-<ul>
-<li><a href="#allclients">simple certificate-based client authentication</a></li>
-<li><a href="#arbitraryclients">selective certificate-based client authentication</a></li>
-<li><a href="#certauthenticate">particular certificate-based client authentication</a></li>
-<li><a href="#intranet">intranet vs. internet authentication</a></li>
-</ul>
-
-<h3><a name="allclients" id="allclients">How can I authenticate clients based on certificates when I know
-all my clients?</a></h3>
-
- <p>When you know your user community (i.e. a closed user group
- situation), as it's the case for instance in an Intranet, you can
- use plain certificate authentication. All you have to do is to
- create client certificates signed by your own CA certificate
- <code>ca.crt</code> and then verify the clients against this
- certificate.</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- # require a client certificate which has to be directly<br />
- # signed by our CA certificate in ca.crt<br />
- SSLVerifyClient require<br />
- SSLVerifyDepth 1<br />
- SSLCACertificateFile conf/ssl.crt/ca.crt
- </code></p></div>
-
-
-<h3><a name="arbitraryclients" id="arbitraryclients">How can I authenticate my clients for a particular URL based on
-certificates but still allow arbitrary clients to access the remaining
-parts of the server?</a></h3>
-
- <p>For this we again use the per-directory reconfiguration feature
- of <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>:</p>
-
- <div class="example"><h3>httpd.conf</h3><p><code>
- SSLVerifyClient none<br />
- SSLCACertificateFile conf/ssl.crt/ca.crt<br />
- <br />
- &lt;Location /secure/area&gt;<br />
- SSLVerifyClient require<br />
- SSLVerifyDepth 1<br />
- &lt;/Location&gt;<br />
- </code></p></div>
-
-
-<h3><a name="certauthenticate" id="certauthenticate">How can I authenticate only particular clients for a some URLs based
-on certificates but still allow arbitrary clients to access the remaining
-parts of the server?</a></h3>
-
- <p>The key is to check for various ingredients of the client certificate.
- Usually this means to check the whole or part of the Distinguished
- Name (DN) of the Subject. For this two methods exists: The <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> based variant and the <code class="directive"><a href="../mod/mod_ssl.html#sslrequire">SSLRequire</a></code> variant. The first method is
- good when the clients are of totally different type, i.e. when their
- DNs have no common fields (usually the organisation, etc.). In this
- case you've to establish a password database containing <em>all</em>
- clients. The second method is better when your clients are all part of
- a common hierarchy which is encoded into the DN. Then you can match
- them more easily.</p>
-
- <p>The first method:</p>
- <div class="example"><h3>httpd.conf</h3><pre>
-SSLVerifyClient none
-&lt;Directory /usr/local/apache2/htdocs/secure/area&gt;
-
-SSLVerifyClient require
-SSLVerifyDepth 5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions +FakeBasicAuth
-SSLRequireSSL
-AuthName "Snake Oil Authentication"
-AuthType Basic
-AuthBasicProvider file
-AuthUserFile /usr/local/apache2/conf/httpd.passwd
-require valid-user
-&lt;/Directory&gt;</pre></div>
-
- <div class="example"><h3>httpd.passwd</h3><pre>
-/C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
-/C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
-/C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA</pre></div>
-
- <p>The second method:</p>
-
- <div class="example"><h3>httpd.conf</h3><pre>
-SSLVerifyClient none
-&lt;Directory /usr/local/apache2/htdocs/secure/area&gt;
-
- SSLVerifyClient require
- SSLVerifyDepth 5
- SSLCACertificateFile conf/ssl.crt/ca.crt
- SSLCACertificatePath conf/ssl.crt
- SSLOptions +FakeBasicAuth
- SSLRequireSSL
- SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
- and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
-&lt;/Directory&gt;</pre></div>
-
-
-<h3><a name="intranet" id="intranet">How can I require HTTPS with strong ciphers and either basic
-authentication or client certificates for access to a subarea on the
-Intranet website for clients coming from the Internet but still allow
-plain HTTP access for clients on the Intranet?</a></h3>
-
- <p>Let us assume the Intranet can be distinguished through the IP
- network 192.160.1.0/24 and the subarea on the Intranet website has
- the URL <code>/subarea</code>. Then configure the following outside
- your HTTPS virtual host (so it applies to both HTTPS and HTTP):</p>
-
- <div class="example"><h3>httpd.conf</h3><pre>
-SSLCACertificateFile conf/ssl.crt/company-ca.crt
-
-&lt;Directory /usr/local/apache2/htdocs&gt;
-# Outside the subarea only Intranet access is granted
-Order deny,allow
-Deny from all
-Allow from 192.168.1.0/24
-&lt;/Directory&gt;
-
-&lt;Directory /usr/local/apache2/htdocs/subarea&gt;
-# Inside the subarea any Intranet access is allowed
-# but from the Internet only HTTPS + Strong-Cipher + Password
-# or the alternative HTTPS + Strong-Cipher + Client-Certificate
-
-# If HTTPS is used, make sure a strong cipher is used.
-# Additionally allow client certs as alternative to basic auth.
-SSLVerifyClient optional
-SSLVerifyDepth 1
-SSLOptions +FakeBasicAuth +StrictRequire
-SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
-
-# Force clients from the Internet to use HTTPS
-RewriteEngine on
-RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
-RewriteCond %{HTTPS} !=on
-RewriteRule .* - [F]
-
-# Allow Network Access and/or Basic Auth
-Satisfy any
-
-# Network Access Control
-Order deny,allow
-Deny from all
-Allow 192.168.1.0/24
-
-# HTTP Basic Authentication
-AuthType basic
-AuthName "Protected Intranet Area"
-AuthBasicProvider file
-AuthUserFile conf/protected.passwd
-Require valid-user
-&lt;/Directory&gt;</pre></div>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_howto.html" title="English">&nbsp;en&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/ssl_howto.xml b/docs/manual/ssl/ssl_howto.xml
deleted file mode 100644
index 1bb88aa13d..0000000000
--- a/docs/manual/ssl/ssl_howto.xml
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssl_howto.xml.meta">
-<parentdocument href="./">SSL/TLS</parentdocument>
-
- <title>SSL/TLS Strong Encryption: How-To</title>
-
-<summary>
-<blockquote>
-<p>The solution of this problem is trivial
-and is left as an exercise for the reader.</p>
-
-<p class="cite">-- <cite>Standard textbook cookie</cite></p>
-</blockquote>
-
-<p>How to solve particular security constraints for an SSL-aware
-webserver is not always obvious because of the coherences between SSL,
-HTTP and Apache's way of processing requests. This chapter gives
-instructions on how to solve such typical situations. Treat is as a first
-step to find out the final solution, but always try to understand the
-stuff before you use it. Nothing is worse than using a security solution
-without knowing its restrictions and coherences.</p>
-</summary>
-
-<section id="ciphersuites">
-<title>Cipher Suites and Enforced Strong Security</title>
-<ul>
-<li><a href="#realssl">SSLv2 only server</a></li>
-<li><a href="#onlystrong">strong encryption only server</a></li>
-<li><a href="#upgradeenc">server gated cryptography</a></li>
-<li><a href="#strongurl">stronger per-directory requirements</a></li>
-</ul>
-
-<section id="realssl">
-<title>How can I create a real SSLv2-only server?</title>
- <p>The following creates an SSL server which speaks only the SSLv2 protocol and
- its ciphers.</p>
-
- <example><title>httpd.conf</title>
- SSLProtocol -all +SSLv2<br />
- SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP<br />
- </example>
-</section>
-
-<section id="onlystrong">
-<title>How can I create an SSL server which accepts strong encryption
-only?</title>
- <p>The following enables only the seven strongest ciphers:</p>
- <example><title>httpd.conf</title>
- SSLProtocol all<br />
- SSLCipherSuite HIGH:MEDIUM<br />
- </example>
-</section>
-
-<section id="upgradeenc">
-<title>How can I create an SSL server which accepts strong encryption
-only, but allows export browsers to upgrade to stronger encryption?</title>
- <p>This facility is called Server Gated Cryptography (SGC) and details
- you can find in the <code>README.GlobalID</code> document in the
- mod_ssl distribution. In short: The server has a Global ID server
- certificate, signed by a special CA certificate from Verisign which
- enables strong encryption in export browsers. This works as following:
- The browser connects with an export cipher, the server sends its Global
- ID certificate, the browser verifies it and subsequently upgrades the
- cipher suite before any HTTP communication takes place. The question
- now is: How can we allow this upgrade, but enforce strong encryption.
- Or in other words: Browser either have to initially connect with
- strong encryption or have to upgrade to strong encryption, but are
- not allowed to keep the export ciphers. The following does the trick:</p>
- <example><title>httpd.conf</title>
- # allow all ciphers for the initial handshake,<br />
- # so export browsers can upgrade via SGC facility<br />
- SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br />
- <br />
- &lt;Directory /usr/local/apache2/htdocs&gt;<br />
- # but finally deny all browsers which haven't upgraded<br />
- SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128<br />
- &lt;/Directory&gt;
- </example>
-</section>
-
-<section id="strongurl">
-<title>How can I create an SSL server which accepts all types of ciphers
-in general, but requires a strong ciphers for access to a particular
-URL?</title>
- <p>Obviously you cannot just use a server-wide <directive
- module="mod_ssl">SSLCipherSuite</directive> which restricts the
- ciphers to the strong variants. But mod_ssl allows you to reconfigure
- the cipher suite in per-directory context and automatically forces
- a renegotiation of the SSL parameters to meet the new configuration.
- So, the solution is:</p>
- <example>
- # be liberal in general<br />
- SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL<br />
- <br />
- &lt;Location /strong/area&gt;<br />
- # but https://hostname/strong/area/ and below<br />
- # requires strong ciphers<br />
- SSLCipherSuite HIGH:MEDIUM<br />
- &lt;/Location&gt;
- </example>
-</section>
-</section>
-<!-- /ciphersuites -->
-
-<section id="accesscontrol">
-<title>Client Authentication and Access Control</title>
-<ul>
-<li><a href="#allclients">simple certificate-based client authentication</a></li>
-<li><a href="#arbitraryclients">selective certificate-based client authentication</a></li>
-<li><a href="#certauthenticate">particular certificate-based client authentication</a></li>
-<li><a href="#intranet">intranet vs. internet authentication</a></li>
-</ul>
-
-<section id="allclients">
-<title>How can I authenticate clients based on certificates when I know
-all my clients?</title>
- <p>When you know your user community (i.e. a closed user group
- situation), as it's the case for instance in an Intranet, you can
- use plain certificate authentication. All you have to do is to
- create client certificates signed by your own CA certificate
- <code>ca.crt</code> and then verify the clients against this
- certificate.</p>
- <example><title>httpd.conf</title>
- # require a client certificate which has to be directly<br />
- # signed by our CA certificate in ca.crt<br />
- SSLVerifyClient require<br />
- SSLVerifyDepth 1<br />
- SSLCACertificateFile conf/ssl.crt/ca.crt
- </example>
-</section>
-
-<section id="arbitraryclients">
-<title>How can I authenticate my clients for a particular URL based on
-certificates but still allow arbitrary clients to access the remaining
-parts of the server?</title>
- <p>For this we again use the per-directory reconfiguration feature
- of <module>mod_ssl</module>:</p>
-
- <example><title>httpd.conf</title>
- SSLVerifyClient none<br />
- SSLCACertificateFile conf/ssl.crt/ca.crt<br />
- <br />
- &lt;Location /secure/area&gt;<br />
- SSLVerifyClient require<br />
- SSLVerifyDepth 1<br />
- &lt;/Location&gt;<br />
- </example>
-</section>
-
-<section id="certauthenticate">
-<title>How can I authenticate only particular clients for a some URLs based
-on certificates but still allow arbitrary clients to access the remaining
-parts of the server?</title>
- <p>The key is to check for various ingredients of the client certificate.
- Usually this means to check the whole or part of the Distinguished
- Name (DN) of the Subject. For this two methods exists: The <module
- >mod_auth_basic</module> based variant and the <directive
- module="mod_ssl">SSLRequire</directive> variant. The first method is
- good when the clients are of totally different type, i.e. when their
- DNs have no common fields (usually the organisation, etc.). In this
- case you've to establish a password database containing <em>all</em>
- clients. The second method is better when your clients are all part of
- a common hierarchy which is encoded into the DN. Then you can match
- them more easily.</p>
-
- <p>The first method:</p>
- <example><title>httpd.conf</title><pre>
-SSLVerifyClient none
-&lt;Directory /usr/local/apache2/htdocs/secure/area&gt;
-
-SSLVerifyClient require
-SSLVerifyDepth 5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions +FakeBasicAuth
-SSLRequireSSL
-AuthName "Snake Oil Authentication"
-AuthType Basic
-AuthBasicProvider file
-AuthUserFile /usr/local/apache2/conf/httpd.passwd
-require valid-user
-&lt;/Directory&gt;</pre>
- </example>
-
- <example><title>httpd.passwd</title><pre>
-/C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
-/C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
-/C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA</pre>
- </example>
-
- <p>The second method:</p>
-
- <example><title>httpd.conf</title><pre>
-SSLVerifyClient none
-&lt;Directory /usr/local/apache2/htdocs/secure/area&gt;
-
- SSLVerifyClient require
- SSLVerifyDepth 5
- SSLCACertificateFile conf/ssl.crt/ca.crt
- SSLCACertificatePath conf/ssl.crt
- SSLOptions +FakeBasicAuth
- SSLRequireSSL
- SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
- and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
-&lt;/Directory&gt;</pre>
- </example>
-</section>
-
-<section id="intranet">
-<title>How can I require HTTPS with strong ciphers and either basic
-authentication or client certificates for access to a subarea on the
-Intranet website for clients coming from the Internet but still allow
-plain HTTP access for clients on the Intranet?</title>
- <p>Let us assume the Intranet can be distinguished through the IP
- network 192.160.1.0/24 and the subarea on the Intranet website has
- the URL <code>/subarea</code>. Then configure the following outside
- your HTTPS virtual host (so it applies to both HTTPS and HTTP):</p>
-
- <example><title>httpd.conf</title><pre>
-SSLCACertificateFile conf/ssl.crt/company-ca.crt
-
-&lt;Directory /usr/local/apache2/htdocs&gt;
-# Outside the subarea only Intranet access is granted
-Order deny,allow
-Deny from all
-Allow from 192.168.1.0/24
-&lt;/Directory&gt;
-
-&lt;Directory /usr/local/apache2/htdocs/subarea&gt;
-# Inside the subarea any Intranet access is allowed
-# but from the Internet only HTTPS + Strong-Cipher + Password
-# or the alternative HTTPS + Strong-Cipher + Client-Certificate
-
-# If HTTPS is used, make sure a strong cipher is used.
-# Additionally allow client certs as alternative to basic auth.
-SSLVerifyClient optional
-SSLVerifyDepth 1
-SSLOptions +FakeBasicAuth +StrictRequire
-SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
-
-# Force clients from the Internet to use HTTPS
-RewriteEngine on
-RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
-RewriteCond %{HTTPS} !=on
-RewriteRule .* - [F]
-
-# Allow Network Access and/or Basic Auth
-Satisfy any
-
-# Network Access Control
-Order deny,allow
-Deny from all
-Allow 192.168.1.0/24
-
-# HTTP Basic Authentication
-AuthType basic
-AuthName "Protected Intranet Area"
-AuthBasicProvider file
-AuthUserFile conf/protected.passwd
-Require valid-user
-&lt;/Directory&gt;</pre>
- </example>
-</section>
-</section>
-<!-- /access control -->
-
-</manualpage>
-
-
-
diff --git a/docs/manual/ssl/ssl_howto.xml.meta b/docs/manual/ssl/ssl_howto.xml.meta
deleted file mode 100644
index 5e89167c91..0000000000
--- a/docs/manual/ssl/ssl_howto.xml.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ssl_howto</basename>
- <path>/ssl/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/ssl/ssl_intro.html b/docs/manual/ssl/ssl_intro.html
deleted file mode 100644
index 263c0f2177..0000000000
--- a/docs/manual/ssl/ssl_intro.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: ssl_intro.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: ssl_intro.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/ssl/ssl_intro.html.en b/docs/manual/ssl/ssl_intro.html.en
deleted file mode 100644
index 9be285ebba..0000000000
--- a/docs/manual/ssl/ssl_intro.html.en
+++ /dev/null
@@ -1,641 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>SSL/TLS Strong Encryption: An Introduction - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>SSL/TLS Strong Encryption: An Introduction</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_intro.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/ssl_intro.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-
-<blockquote>
-<p>The nice thing about standards is that there are so many to choose
-from. And if you really don't like all the standards you just have to
-wait another year until the one arises you are looking for.</p>
-
-<p class="cite">-- <cite>A. Tanenbaum</cite>, "Introduction to
-Computer Networks"</p>
-</blockquote>
-
-<p>As an introduction this chapter is aimed at readers who are familiar
-with the Web, HTTP, and Apache, but are not security experts. It is not
-intended to be a definitive guide to the SSL protocol, nor does it discuss
-specific techniques for managing certificates in an organization, or the
-important legal issues of patents and import and export restrictions.
-Rather, it is intended to provide a common background to mod_ssl users by
-pulling together various concepts, definitions, and examples as a starting
-point for further exploration.</p>
-
-<p>The presented content is mainly derived, with permission by the author,
-from the article <a href="http://home.earthlink.net/~fjhirsch/Papers/wwwj/article.html">Introducing
-SSL and Certificates using SSLeay</a> from <a href="http://home.earthlink.net/~fjhirsch/">Frederick J. Hirsch</a>, of The
-Open Group Research Institute, which was published in <a href="http://www.ora.com/catalog/wjsum97/">Web Security: A Matter of
-Trust</a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997.
-Please send any positive feedback to <a href="mailto:hirsch@fjhirsch.com">Frederick Hirsch</a> (the original
-article author) and all negative feedback to <a href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> (the
-<code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> author).</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#cryptographictech">Cryptographic Techniques</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#certificates">Certificates</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssl">Secure Sockets Layer (SSL)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#references">References</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cryptographictech" id="cryptographictech">Cryptographic Techniques</a></h2>
-
-<p>Understanding SSL requires an understanding of cryptographic
-algorithms, message digest functions (aka. one-way or hash functions), and
-digital signatures. These techniques are the subject of entire books (see
-for instance [<a href="#AC96">AC96</a>]) and provide the basis for privacy,
-integrity, and authentication.</p>
-
-<h3><a name="cryptographicalgo" id="cryptographicalgo">Cryptographic Algorithms</a></h3>
-
- <p>Suppose Alice wants to send a message to her bank to transfer some
- money. Alice would like the message to be private, since it will
- include information such as her account number and transfer amount. One
- solution is to use a cryptographic algorithm, a technique that would
- transform her message into an encrypted form, unreadable except by
- those it is intended for. Once in this form, the message may only be
- interpreted through the use of a secret key. Without the key the
- message is useless: good cryptographic algorithms make it so difficult
- for intruders to decode the original text that it isn't worth their
- effort.</p>
-
- <p>There are two categories of cryptographic algorithms: conventional
- and public key.</p>
-
- <dl>
- <dt>Conventional cryptography</dt>
- <dd>also known as symmetric cryptography, requires the sender and
- receiver to share a key: a secret piece of information that may be
- used to encrypt or decrypt a message. If this key is secret, then
- nobody other than the sender or receiver may read the message. If
- Alice and the bank know a secret key, then they may send each other
- private messages. The task of privately choosing a key before
- communicating, however, can be problematic.</dd>
-
- <dt>Public key cryptography</dt>
- <dd>also known as asymmetric cryptography, solves the key exchange
- problem by defining an algorithm which uses two keys, each of which
- may be used to encrypt a message. If one key is used to encrypt a
- message then the other must be used to decrypt it. This makes it
- possible to receive secure messages by simply publishing one key
- (the public key) and keeping the other secret (the private key).</dd>
- </dl>
-
- <p>Anyone may encrypt a message using the public key, but only the
- owner of the private key will be able to read it. In this way, Alice
- may send private messages to the owner of a key-pair (the bank), by
- encrypting it using their public key. Only the bank will be able to
- decrypt it.</p>
-
-
-<h3><a name="messagedigests" id="messagedigests">Message Digests</a></h3>
-
- <p>Although Alice may encrypt her message to make it private, there
- is still a concern that someone might modify her original message or
- substitute it with a different one, in order to transfer the money
- to themselves, for instance. One way of guaranteeing the integrity
- of Alice's message is to create a concise summary of her message and
- send this to the bank as well. Upon receipt of the message, the bank
- creates its own summary and compares it with the one Alice sent. If
- they agree then the message was received intact.</p>
-
- <p>A summary such as this is called a <dfn>message digest</dfn>, <em>one-way
-function</em> or <em>hash function</em>. Message digests are used to create
-short, fixed-length representations of longer, variable-length messages.
-Digest algorithms are designed to produce unique digests for different
-messages. Message digests are designed to make it too difficult to determine
-the message from the digest, and also impossible to find two different
-messages which create the same digest -- thus eliminating the possibility of
-substituting one message for another while maintaining the same digest.</p>
-<p>Another challenge that Alice faces is finding a way to send the digest to the
-bank securely; when this is achieved, the integrity of the associated message
-is assured. One way to do this is to include the digest in a digital
-signature.</p>
-
-
-<h3><a name="digitalsignatures" id="digitalsignatures">Digital Signatures</a></h3>
-<p>When Alice sends a message to the bank, the bank needs to ensure that the
-message is really from her, so an intruder does not request a transaction
-involving her account. A <em>digital signature</em>, created by Alice and
-included with the message, serves this purpose.</p>
-
-<p>Digital signatures are created by encrypting a digest of the message,
-and other information (such as a sequence number) with the sender's
-private key. Though anyone may <em>decrypt</em> the signature using the public
-key, only the signer knows the private key. This means that only they may
-have signed it. Including the digest in the signature means the signature is
-only good for that message; it also ensures the integrity of the message since
-no one can change the digest and still sign it.</p>
-<p>To guard against interception and reuse of the signature by an intruder at a
-later date, the signature contains a unique sequence number. This protects
-the bank from a fraudulent claim from Alice that she did not send the message
--- only she could have signed it (non-repudiation).</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="certificates" id="certificates">Certificates</a></h2>
-
-<p>Although Alice could have sent a private message to the bank, signed
-it, and ensured the integrity of the message, she still needs to be sure
-that she is really communicating with the bank. This means that she needs
-to be sure that the public key she is using corresponds to the bank's
-private key. Similarly, the bank also needs to verify that the message
-signature really corresponds to Alice's signature.</p>
-
-<p>If each party has a certificate which validates the other's identity,
-confirms the public key, and is signed by a trusted agency, then they both
-will be assured that they are communicating with whom they think they are.
-Such a trusted agency is called a <em>Certificate Authority</em>, and
-certificates are used for authentication.</p>
-
-<h3><a name="certificatecontents" id="certificatecontents">Certificate Contents</a></h3>
-
- <p>A certificate associates a public key with the real identity of
- an individual, server, or other entity, known as the subject. As
- shown in <a href="#table1">Table 1</a>, information about the subject
- includes identifying information (the distinguished name), and the
- public key. It also includes the identification and signature of the
- Certificate Authority that issued the certificate, and the period of
- time during which the certificate is valid. It may have additional
- information (or extensions) as well as administrative information
- for the Certificate Authority's use, such as a serial number.</p>
-
- <h4><a name="table1" id="table1">Table 1: Certificate Information</a></h4>
-
- <table>
-
- <tr><th>Subject</th>
- <td>Distinguished Name, Public Key</td></tr>
- <tr><th>Issuer</th>
- <td>Distinguished Name, Signature</td></tr>
- <tr><th>Period of Validity</th>
- <td>Not Before Date, Not After Date</td></tr>
- <tr><th>Administrative Information</th>
- <td>Version, Serial Number</td></tr>
- <tr><th>Extended Information</th>
- <td>Basic Constraints, Netscape Flags, etc.</td></tr>
- </table>
-
-
- <p>A distinguished name is used to provide an identity in a specific
- context -- for instance, an individual might have a personal
- certificate as well as one for their identity as an employee.
- Distinguished names are defined by the X.509 standard [<a href="#X509">X509</a>], which defines the fields, field names, and
- abbreviations used to refer to the fields (see <a href="#table2">Table
- 2</a>).</p>
-
- <h4><a name="table2" id="table2">Table 2: Distinguished Name Information</a></h4>
-
- <table class="bordered">
-
- <tr><th>DN Field</th>
- <th>Abbrev.</th>
- <th>Description</th>
- <th>Example</th></tr>
- <tr><td>Common Name</td>
- <td>CN</td>
- <td>Name being certified</td>
- <td>CN=Joe Average</td></tr>
- <tr><td>Organization or Company</td>
- <td>O</td>
- <td>Name is associated with this<br />organization</td>
- <td>O=Snake Oil, Ltd.</td></tr>
- <tr><td>Organizational Unit</td>
- <td>OU</td>
- <td>Name is associated with this <br />organization unit, such
- as a department</td>
- <td>OU=Research Institute</td></tr>
- <tr><td>City/Locality</td>
- <td>L</td>
- <td>Name is located in this City</td>
- <td>L=Snake City</td></tr>
- <tr><td>State/Province</td>
- <td>ST</td>
- <td>Name is located in this State/Province</td>
- <td>ST=Desert</td></tr>
- <tr><td>Country</td>
- <td>C</td>
- <td>Name is located in this Country (ISO code)</td>
- <td>C=XZ</td></tr>
- </table>
-
-
- <p>A Certificate Authority may define a policy specifying which
- distinguished field names are optional, and which are required. It
- may also place requirements upon the field contents, as may users of
- certificates. As an example, a Netscape browser requires that the
- Common Name for a certificate representing a server has a name which
- matches a wildcard pattern for the domain name of that server, such
- as <code>*.snakeoil.com</code>.</p>
-
- <p>The binary format of a certificate is defined using the ASN.1
- notation [<a href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>]. This
- notation defines how to specify the contents, and encoding rules
- define how this information is translated into binary form. The binary
- encoding of the certificate is defined using Distinguished Encoding
- Rules (DER), which are based on the more general Basic Encoding Rules
- (BER). For those transmissions which cannot handle binary, the binary
- form may be translated into an ASCII form by using Base64 encoding
- [<a href="#MIME">MIME</a>]. This encoded version is called PEM encoded
- (the name comes from "Privacy Enhanced Mail"), when placed between
- begin and end delimiter lines as illustrated in the following
- example.</p>
-
- <div class="example"><h3>Example of a PEM-encoded certificate (snakeoil.crt)</h3><pre>-----BEGIN CERTIFICATE-----
-MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
-FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
-A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
-cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
-bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
-MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
-a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
-cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
-AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
-vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
-lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
-HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
-gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
-2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
-dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
------END CERTIFICATE-----</pre></div>
-
-
-<h3><a name="certificateauthorities" id="certificateauthorities">Certificate Authorities</a></h3>
-
- <p>By first verifying the information in a certificate request
- before granting the certificate, the Certificate Authority assures
- the identity of the private key owner of a key-pair. For instance,
- if Alice requests a personal certificate, the Certificate Authority
- must first make sure that Alice really is the person the certificate
- request claims.</p>
-
- <h4><a name="certificatechains" id="certificatechains">Certificate Chains</a></h4>
-
- <p>A Certificate Authority may also issue a certificate for
- another Certificate Authority. When examining a certificate,
- Alice may need to examine the certificate of the issuer, for each
- parent Certificate Authority, until reaching one which she has
- confidence in. She may decide to trust only certificates with a
- limited chain of issuers, to reduce her risk of a "bad" certificate
- in the chain.</p>
-
-
- <h4><a name="rootlevelca" id="rootlevelca">Creating a Root-Level CA</a></h4>
-
- <p>As noted earlier, each certificate requires an issuer to assert
- the validity of the identity of the certificate subject, up to
- the top-level Certificate Authority (CA). This presents a problem:
- Since this is who vouches for the certificate of the top-level
- authority, which has no issuer? In this unique case, the
- certificate is "self-signed", so the issuer of the certificate is
- the same as the subject. As a result, one must exercise extra care
- in trusting a self-signed certificate. The wide publication of a
- public key by the root authority reduces the risk in trusting this
- key -- it would be obvious if someone else publicized a key
- claiming to be the authority. Browsers are preconfigured to trust
- well-known certificate authorities.</p>
-
- <p>A number of companies, such as <a href="http://www.thawte.com/">Thawte</a> and <a href="http://www.verisign.com/">VeriSign</a>
- have established themselves as Certificate Authorities. These
- companies provide the following services:</p>
-
- <ul>
- <li>Verifying certificate requests</li>
- <li>Processing certificate requests</li>
- <li>Issuing and managing certificates</li>
- </ul>
-
- <p>It is also possible to create your own Certificate Authority.
- Although risky in the Internet environment, it may be useful
- within an Intranet where the organization can easily verify the
- identities of individuals and servers.</p>
-
-
- <h4><a name="certificatemanagement" id="certificatemanagement">Certificate Management</a></h4>
-
- <p>Establishing a Certificate Authority is a responsibility which
- requires a solid administrative, technical, and management
- framework. Certificate Authorities not only issue certificates,
- they also manage them -- that is, they determine how long
- certificates are valid, they renew them, and they keep lists of
- certificates that have already been issued but are no longer valid
- (Certificate Revocation Lists, or CRLs). Say Alice is entitled to
- a certificate as an employee of a company. Say too, that the
- certificate needs to be revoked when Alice leaves the company. Since
- certificates are objects that get passed around, it is impossible
- to tell from the certificate alone that it has been revoked. When
- examining certificates for validity, therefore, it is necessary to
- contact the issuing Certificate Authority to check CRLs -- this
- is not usually an automated part of the process.</p>
-
- <div class="note"><h3>Note</h3>
- <p>If you use a Certificate Authority that is not configured into
- browsers by default, it is necessary to load the Certificate
- Authority certificate into the browser, enabling the browser to
- validate server certificates signed by that Certificate Authority.
- Doing so may be dangerous, since once loaded, the browser will
- accept all certificates signed by that Certificate Authority.</p>
- </div>
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssl" id="ssl">Secure Sockets Layer (SSL)</a></h2>
-
-<p>The Secure Sockets Layer protocol is a protocol layer which may be
-placed between a reliable connection-oriented network layer protocol
-(e.g. TCP/IP) and the application protocol layer (e.g. HTTP). SSL provides
-for secure communication between client and server by allowing mutual
-authentication, the use of digital signatures for integrity, and encryption
-for privacy.</p>
-
-<p>The protocol is designed to support a range of choices for specific
-algorithms used for cryptography, digests, and signatures. This allows
-algorithm selection for specific servers to be made based on legal, export
-or other concerns, and also enables the protocol to take advantage of new
-algorithms. Choices are negotiated between client and server at the start
-of establishing a protocol session.</p>
-
-<h3><a name="table4" id="table4">Table 4: Versions of the SSL protocol</a></h3>
-
- <table class="bordered">
-
- <tr><th>Version</th>
- <th>Source</th>
- <th>Description</th>
- <th>Browser Support</th></tr>
- <tr><td>SSL v2.0</td>
- <td>Vendor Standard (from Netscape Corp.) [<a href="#SSL2">SSL2</a>]</td>
- <td>First SSL protocol for which implementations exists</td>
- <td>- NS Navigator 1.x/2.x<br />
- - MS IE 3.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>SSL v3.0</td>
- <td>Expired Internet Draft (from Netscape Corp.) [<a href="#SSL3">SSL3</a>]</td>
- <td>Revisions to prevent specific security attacks, add non-RSA
- ciphers, and support for certificate chains</td>
- <td>- NS Navigator 2.x/3.x/4.x<br />
- - MS IE 3.x/4.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>TLS v1.0</td>
- <td>Proposed Internet Standard (from IETF) [<a href="#TLS1">TLS1</a>]</td>
- <td>Revision of SSL 3.0 to update the MAC layer to HMAC, add block
- padding for block ciphers, message order standardization and more
- alert messages.</td>
- <td>- Lynx/2.8+OpenSSL</td></tr>
- </table>
-
-
-<p>There are a number of versions of the SSL protocol, as shown in
-<a href="#table4">Table 4</a>. As noted there, one of the benefits in
-SSL 3.0 is that it adds support of certificate chain loading. This feature
-allows a server to pass a server certificate along with issuer certificates
-to the browser. Chain loading also permits the browser to validate the
-server certificate, even if Certificate Authority certificates are not
-installed for the intermediate issuers, since they are included in the
-certificate chain. SSL 3.0 is the basis for the Transport Layer Security
-[<a href="#TLS1">TLS</a>] protocol standard, currently in development by
-the Internet Engineering Task Force (IETF).</p>
-
-<h3><a name="session" id="session">Session Establishment</a></h3>
-
- <p>The SSL session is established by following a handshake sequence
- between client and server, as shown in <a href="#figure1">Figure 1</a>. This sequence may vary, depending on whether the server
- is configured to provide a server certificate or request a client
- certificate. Though cases exist where additional handshake steps
- are required for management of cipher information, this article
- summarizes one common scenario: see the SSL specification for the full
- range of possibilities.</p>
-
- <div class="note"><h3>Note</h3>
- <p>Once an SSL session has been established it may be reused, thus
- avoiding the performance penalty of repeating the many steps needed
- to start a session. For this the server assigns each SSL session a
- unique session identifier which is cached in the server and which the
- client can use on forthcoming connections to reduce the handshake
- (until the session identifer expires in the cache of the server).</p>
- </div>
-
- <p class="figure">
- <img src="ssl_intro_fig1.gif" alt="" width="423" height="327" /><br />
- <a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Simplified SSL
- Handshake Sequence</p>
-
- <p>The elements of the handshake sequence, as used by the client and
- server, are listed below:</p>
-
- <ol>
- <li>Negotiate the Cipher Suite to be used during data transfer</li>
- <li>Establish and share a session key between client and server</li>
- <li>Optionally authenticate the server to the client</li>
- <li>Optionally authenticate the client to the server</li>
- </ol>
-
- <p>The first step, Cipher Suite Negotiation, allows the client and
- server to choose a Cipher Suite supportable by both of them. The SSL3.0
- protocol specification defines 31 Cipher Suites. A Cipher Suite is
- defined by the following components:</p>
-
- <ul>
- <li>Key Exchange Method</li>
- <li>Cipher for Data Transfer</li>
- <li>Message Digest for creating the Message Authentication Code (MAC)</li>
- </ul>
-
- <p>These three elements are described in the sections that follow.</p>
-
-
-<h3><a name="keyexchange" id="keyexchange">Key Exchange Method</a></h3>
-
- <p>The key exchange method defines how the shared secret symmetric
- cryptography key used for application data transfer will be agreed
- upon by client and server. SSL 2.0 uses RSA key exchange only, while
- SSL 3.0 supports a choice of key exchange algorithms including the
- RSA key exchange when certificates are used, and Diffie-Hellman key
- exchange for exchanging keys without certificates and without prior
- communication between client and server.</p>
-
- <p>One variable in the choice of key exchange methods is digital
- signatures -- whether or not to use them, and if so, what kind of
- signatures to use. Signing with a private key provides assurance
- against a man-in-the-middle-attack during the information exchange
- used in generating the shared key [<a href="#AC96">AC96</a>, p516].</p>
-
-
-<h3><a name="ciphertransfer" id="ciphertransfer">Cipher for Data Transfer</a></h3>
-
- <p>SSL uses the conventional cryptography algorithm (symmetric
- cryptography) described earlier for encrypting messages in a session.
- There are nine choices, including the choice to perform no
- encryption:</p>
-
- <ul>
- <li>No encryption</li>
- <li>Stream Ciphers
- <ul>
- <li>RC4 with 40-bit keys</li>
- <li>RC4 with 128-bit keys</li>
- </ul></li>
- <li>CBC Block Ciphers
- <ul><li>RC2 with 40 bit key</li>
- <li>DES with 40 bit key</li>
- <li>DES with 56 bit key</li>
- <li>Triple-DES with 168 bit key</li>
- <li>Idea (128 bit key)</li>
- <li>Fortezza (96 bit key)</li>
- </ul></li>
- </ul>
-
- <p>Here "CBC" refers to Cipher Block Chaining, which means that a
- portion of the previously encrypted cipher text is used in the
- encryption of the current block. "DES" refers to the Data Encryption
- Standard [<a href="#AC96">AC96</a>, ch12], which has a number of
- variants (including DES40 and 3DES_EDE). "Idea" is one of the best
- and cryptographically strongest available algorithms, and "RC2" is
- a proprietary algorithm from RSA DSI [<a href="#AC96">AC96</a>,
- ch13].</p>
-
-
-<h3><a name="digestfuntion" id="digestfuntion">Digest Function</a></h3>
-
- <p>The choice of digest function determines how a digest is created
- from a record unit. SSL supports the following:</p>
-
- <ul>
- <li>No digest (Null choice)</li>
- <li>MD5, a 128-bit hash</li>
- <li>Secure Hash Algorithm (SHA-1), a 160-bit hash</li>
- </ul>
-
- <p>The message digest is used to create a Message Authentication Code
- (MAC) which is encrypted with the message to provide integrity and to
- prevent against replay attacks.</p>
-
-
-<h3><a name="handshake" id="handshake">Handshake Sequence Protocol</a></h3>
-
- <p>The handshake sequence uses three protocols:</p>
-
- <ul>
- <li>The <dfn>SSL Handshake Protocol</dfn>
- for performing the client and server SSL session establishment.</li>
- <li>The <dfn>SSL Change Cipher Spec Protocol</dfn> for actually
- establishing agreement on the Cipher Suite for the session.</li>
- <li>The <dfn>SSL Alert Protocol</dfn> for conveying SSL error
- messages between client and server.</li>
- </ul>
-
- <p>These protocols, as well as application protocol data, are
- encapsulated in the <dfn>SSL Record Protocol</dfn>, as shown in
- <a href="#figure2">Figure 2</a>. An encapsulated protocol is
- transferred as data by the lower layer protocol, which does not
- examine the data. The encapsulated protocol has no knowledge of the
- underlying protocol.</p>
-
- <p class="figure">
- <img src="ssl_intro_fig2.gif" alt="" width="428" height="217" /><br />
- <a id="figure2" name="figure2"><dfn>Figure 2</dfn></a>: SSL Protocol Stack
- </p>
-
- <p>The encapsulation of SSL control protocols by the record protocol
- means that if an active session is renegotiated the control protocols
- will be transmitted securely. If there were no session before, then
- the Null cipher suite is used, which means there is no encryption and
- messages have no integrity digests until the session has been
- established.</p>
-
-
-<h3><a name="datatransfer" id="datatransfer">Data Transfer</a></h3>
-
- <p>The SSL Record Protocol, shown in <a href="#figure3">Figure 3</a>,
- is used to transfer application and SSL Control data between the
- client and server, possibly fragmenting this data into smaller units,
- or combining multiple higher level protocol data messages into single
- units. It may compress, attach digest signatures, and encrypt these
- units before transmitting them using the underlying reliable transport
- protocol (Note: currently all major SSL implementations lack support
- for compression).</p>
-
- <p class="figure">
- <img src="ssl_intro_fig3.gif" alt="" width="423" height="323" /><br />
- <a id="figure3" name="figure3"><dfn>Figure 3</dfn></a>: SSL Record Protocol
- </p>
-
-
-<h3><a name="securehttp" id="securehttp">Securing HTTP Communication</a></h3>
-
- <p>One common use of SSL is to secure Web HTTP communication between
- a browser and a webserver. This case does not preclude the use of
- non-secured HTTP. The secure version is mainly plain HTTP over SSL
- (named HTTPS), but with one major difference: it uses the URL scheme
- <code>https</code> rather than <code>http</code> and a different
- server port (by default 443). This mainly is what <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> provides to you for the Apache webserver...</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="references" id="references">References</a></h2>
-
-<dl>
-<dt><a id="AC96" name="AC96">[AC96]</a></dt>
-<dd>Bruce Schneier, <q>Applied Cryptography</q>, 2nd Edition, Wiley,
-1996. See <a href="http://www.counterpane.com/">http://www.counterpane.com/</a> for various other materials by Bruce
-Schneier.</dd>
-
-<dt><a id="X208" name="X208">[X208]</a></dt>
-<dd>ITU-T Recommendation X.208, <q>Specification of Abstract Syntax Notation
-One (ASN.1)</q>, 1988. See for instance <a href="http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I">http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I</a>.
-</dd>
-
-<dt><a id="X509" name="X509">[X509]</a></dt>
-<dd>ITU-T Recommendation X.509, <q>The Directory - Authentication
-Framework</q>. See for instance <a href="http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509">http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509</a>.
-</dd>
-
-<dt><a id="PKCS" name="PKCS">[PKCS]</a></dt>
-<dd><q>Public Key Cryptography Standards (PKCS)</q>,
-RSA Laboratories Technical Notes, See <a href="http://www.rsasecurity.com/rsalabs/pkcs/">http://www.rsasecurity.com/rsalabs/pkcs/</a>.</dd>
-
-<dt><a id="MIME" name="MIME">[MIME]</a></dt>
-<dd>N. Freed, N. Borenstein, <q>Multipurpose Internet Mail Extensions
-(MIME) Part One: Format of Internet Message Bodies</q>, RFC2045.
-See for instance <a href="http://ietf.org/rfc/rfc2045.txt">http://ietf.org/rfc/rfc2045.txt</a>.</dd>
-
-<dt><a id="SSL2" name="SSL2">[SSL2]</a></dt>
-<dd>Kipp E.B. Hickman, <q>The SSL Protocol</q>, 1995. See <a href="http://www.netscape.com/eng/security/SSL_2.html">http://www.netscape.com/eng/security/SSL_2.html</a>.</dd>
-
-<dt><a id="SSL3" name="SSL3">[SSL3]</a></dt>
-<dd>Alan O. Freier, Philip Karlton, Paul C. Kocher, <q>The SSL Protocol
-Version 3.0</q>, 1996. See <a href="http://www.netscape.com/eng/ssl3/draft302.txt">http://www.netscape.com/eng/ssl3/draft302.txt</a>.</dd>
-
-<dt><a id="TLS1" name="TLS1">[TLS1]</a></dt>
-<dd>Tim Dierks, Christopher Allen, <q>The TLS Protocol Version 1.0</q>,
-1999. See <a href="http://ietf.org/rfc/rfc2246.txt">http://ietf.org/rfc/rfc2246.txt</a>.</dd>
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_intro.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/ssl_intro.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/ssl_intro.html.ja.euc-jp b/docs/manual/ssl/ssl_intro.html.ja.euc-jp
deleted file mode 100644
index d75c135920..0000000000
--- a/docs/manual/ssl/ssl_intro.html.ja.euc-jp
+++ /dev/null
@@ -1,695 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>SSL/TLS °Å¹æ²½: ¤Ï¤¸¤á¤Ë - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">SSL/TLS</a></div><div id="page-content"><div id="preamble"><h1>SSL/TLS °Å¹æ²½: ¤Ï¤¸¤á¤Ë</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_intro.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/ssl_intro.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div>
-
-<blockquote>
-<p>ɸ½àµ¬³Ê¤ÎÎɤ¤½ê¤Ï¡¢¤¿¤¯¤µ¤ó¤Îµ¬³Ê¤«¤éÁª¤Ù¤ë¤È¤¤¤¦¤³¤È¤À¡£
-¤½¤·¤Æ¡¢¤â¤·ËÜÅö¤Ë¤É¤Îµ¬³Ê¤âµ¤¤ËÆþ¤é¤Ê¤±¤ì¤Ð¡¢
-°ìǯÂԤĤÀ¤±¤Çõ¤·¤Æ¤¤¤¿µ¬³Ê¤¬¸½¤ì¤ë¡£</p>
-
-<p class="cite">-- <cite>A. Tanenbaum</cite>, "Introduction to
-Computer Networks"</p>
-</blockquote>
-
-<p>
-ÆþÌç¤È¤¤¤¦¤³¤È¤Ç¡¢¤³¤Î¾Ï¤Ï Web¡¢HTTP¡¢Apache ¤ËÄ̤¸¤Æ¤¤¤ë
-ÆɼԸþ¤±¤Ç¤¹¤¬¡¢¥»¥­¥å¥ê¥Æ¥£ÀìÌç²È¸þ¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
-SSL ¥×¥í¥È¥³¥ë¤Î·èÄêŪ¤Ê¼ê°ú¤­¤Ç¤¢¤ë¤Ä¤â¤ê¤Ï¤¢¤ê¤Þ¤»¤ó¡£
-¤Þ¤¿¡¢ÁÈ¿¥Æâ¤Îǧ¾Ú´ÉÍý¤Î¤¿¤á¤ÎÆÃÄê¤Î¥Æ¥¯¥Ë¥Ã¥¯¤ä¡¢
-Æõö¤äÍ¢½Ðµ¬À©¤Ê¤É¤Î½ÅÍפÊˡŪ¤ÊÌäÂê¤Ë¤Ä¤¤¤Æ¤â°·¤¤¤Þ¤»¤ó¡£
-¤à¤·¤í¡¢¹¹¤Ê¤ë¸¦µæ¤Ø¤Î½ÐȯÅÀ¤È¤·¤Æ¿§¡¹¤Ê³µÇ°¡¢ÄêµÁ¡¢Îã¤òʤ٤뤳¤È¤Ç
- mod_ssl ¤Î¥æ¡¼¥¶¤Ë´ðÁÃÃ챤òÄ󶡤¹¤ë»ö¤òÌÜŪ¤È¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
-<p>¤³¤³¤Ë¼¨¤µ¤ì¤¿ÆâÍƤϼç¤Ë¡¢¸¶Ãø¼Ô¤Îµö²Ä¤Î²¼
-The Open Group Research Institute ¤Î <a href="http://home.earthlink.net/~fjhirsch/">Frederick J. Hirsch</a>
- »á¤Îµ­»ö <a href="http://home.earthlink.net/~fjhirsch/Papers/wwwj/article.html">
-Introducing SSL and Certificates using SSLeay</a> ¤ò´ð¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
-»á¤Îµ­»ö¤Ï <a href="http://www.ora.com/catalog/wjsum97/">Web Security: A Matter of
-Trust</a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997
-¤Ë·ÇºÜ¤µ¤ì¤Þ¤·¤¿¡£
-¹ÎÄêŪ¤Ê°Õ¸«¤Ï <a href="mailto:hirsch@fjhirsch.com">Frederick Hirsch</a> »á
- (¸µµ­»ö¤ÎÃø¼Ô) ¤ØÁ´¤Æ¤Î¶ì¾ð¤Ï <a href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> (
-<code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ¤Îºî¼Ô) ¤Ø¤ª´ê¤¤¤·¤Þ¤¹¡£
-[ÌõÃí: Ìõ¤Ë¤Ä¤¤¤Æ¤Ï <a href="mailto:apache-docs@ml.apache.or.jp">
-Apache ¥É¥­¥å¥á¥ó¥ÈËÝÌõ¥×¥í¥¸¥§¥¯¥È</a>
-¤Ø¤ª´ê¤¤¤·¤Þ¤¹¡£]</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#cryptographictech">°Å¹æ²½µ»½Ñ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#certificates">¾ÚÌÀ½ñ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssl">Secure Sockets Layer (SSL)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#references">»²¹Íʸ¸¥</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cryptographictech" id="cryptographictech">°Å¹æ²½µ»½Ñ</a></h2>
-
-<p>SSL ¤òÍý²ò¤¹¤ë¤Ë¤Ï¡¢°Å¹æ¥¢¥ë¥´¥ê¥º¥à¡¢
-¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È´Ø¿ô(ÊÌ̾: °ìÊý¸þ´Ø¿ô¡¢¥Ï¥Ã¥·¥å´Ø¿ô)¡¢
-ÅŻҽð̾¤Ê¤É¤Ø¤ÎÍý²ò¤¬É¬ÍפǤ¹¡£
-¤³¤ì¤é¤Îµ»½Ñ¤ÏËܤ¬´Ý¤´¤ÈɬÍפÊÂêÌܤÇ
-(Î㤨¤Ð [<a href="#AC96">AC96</a>] ¤ò»²¾È)¡¢
-¥×¥é¥¤¥Ð¥·¡¼¡¢¿®ÍÑ¡¢Ç§¾Ú¤Ê¤É¤Îµ»½Ñ¤Î´ðÁäȤʤäƤ¤¤Þ¤¹¡£</p>
-
-<h3><a name="cryptographicalgo" id="cryptographicalgo">°Å¹æ¥¢¥ë¥´¥ê¥º¥à</a></h3>
-
- <p>Î㤨¤Ð¡¢¥¢¥ê¥¹¤¬Á÷¶â¤Î¤¿¤á¤Ë¶ä¹Ô¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ê¤¿¤¤¤È¤·¤Þ¤¹¡£
- ¸ýºÂÈÖ¹æ¤äÁ÷¶â¤Î¶â³Û¤¬´Þ¤Þ¤ì¤ë¤¿¤á¡¢
- ¥¢¥ê¥¹¤Ï¤½¤Î¥á¥Ã¥»¡¼¥¸¤òÈëÌ©¤Ë¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£
- ²ò·èÊýË¡¤Î°ì¤Ä¤Ï°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤ò»È¤Ã¤Æ¡¢¥á¥Ã¥»¡¼¥¸¤ò
- Æɤޤ»¤¿¤¤¿Í°Ê³°¤ÏÆɤळ¤È¤¬¤Ç¤­¤Ê¤¤°Å¹æ²½¤µ¤ì¤¿
- ·ÁÂÖ¤ËÊѤ¨¤Æ¤·¤Þ¤¦¤³¤È¤Ç¤¹¡£
- ¤½¤Î·ÁÂ֤ˤʤë¤È¡¢
- ¥á¥Ã¥»¡¼¥¸¤ÏÈëÌ©¤Î¸°¤Ë¤è¤Ã¤Æ¤Î¤ß²ò¼á¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¸°¤Ê¤·¤Ç¤Ï¡¢¥á¥Ã¥»¡¼¥¸¤ÏÌò¤ËΩ¤Á¤Þ¤»¤ó¡£
- Îɤ¤°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤Ï¡¢¿¯Æþ¼Ô¤¬¸µ¤Î¥Æ¥­¥¹¥È¤ò²òÆɤ¹¤ë¤³¤È¤ò
- Èó¾ï¤ËÆñ¤·¤¯¤¹¤ë¤¿¤á¡¢ÅØÎϤ¬³ä¤Ë¹ç¤ï¤Ê¤¯¤µ¤»¤Þ¤¹¡£</p>
-
- <p>°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤Ë¤Ï
- ½¾Íè·¿¤È¸ø³«¸°¤ÎÆó¤Ä¤Î¼ïÎब¤¢¤ê¤Þ¤¹¡£</p>
-
- <dl>
- <dt>½¾Íè·¿°Å¹æ</dt>
- <dd>ÂоΰŹæ¤È¤·¤Æ¤âÃΤé¤ì¡¢
- Á÷¿®¼Ô¤È¼õ¿®¼Ô¤¬¸°¤ò¶¦Í­¤¹¤ë¤³¤È¤¬É¬ÍפǤ¹¡£
- ¸°¤È¤Ï¡¢¥á¥Ã¥»¡¼¥¸¤ò°Å¹æ²½¤·¤¿¤êÉü¹æ¤¹¤ë¤Î¤Ë»È¤ï¤ì¤ëÈëÌ©
- ¤Î¾ðÊó¤Î¤³¤È¤Ç¤¹¡£
- ¤â¤·¡¢¤³¤Î¸°¤¬ÈëÌ©¤Ê¤é¡¢Á÷¿®¼Ô¤È¼õ¿®¼Ô°Ê³°¤Ïï¤â¥á¥Ã¥»¡¼¥¸¤òÆÉ
- ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£
- ¤â¤·¤â¡¢¥¢¥ê¥¹¤È¶ä¹Ô¤¬ÈëÌ©¤Î¸°¤òÃΤäƤ¤¤ë¤Ê¤é¡¢
- Èà¤é¤Ï¤ª¸ß¤¤¤ËÈëÌ©¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ë¤³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£
- ¤¿¤À¤·¡¢»öÁ°¤ËÆâÌ©¤Ë¸°¤òÁª¤Ö¤È¤¤¤¦»Å»ö¤ÏÌäÂê¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£</dd>
-
- <dt>¸ø³«¸°°Å¹æ</dt>
- <dd>ÈóÂоΰŹæ¤È¤·¤Æ¤âÃΤé¤ì¡¢
- ¥á¥Ã¥»¡¼¥¸¤ò°Å¹æ²½¤¹¤ë¤³¤È¤Î¤Ç¤­¤ëÆó¤Ä¤Î¸°
- ¤ò»ÈÍѤ¹¤ë¥¢¥ë¥´¥ê¥º¥à¤òÄêµÁ¤¹¤ë¤³¤È¤Ç¸°¤Î¤ä¤ê¼è¤ê¤ÎÌäÂê¤ò²ò·è
- ¤·¤Þ¤¹¡£
- ¤â¤·¡¢¤¢¤ë¸°¤¬°Å¹æ²½¤Ë»È¤ï¤ì¤¿¤Ê¤é¡¢
- ¤â¤¦ÊÒÊý¤Î¸°¤ÇÉü¹æ¤·¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£
- ¤³¤ÎÊý¼°¤Ë¤è¤Ã¤Æ¡¢°ì¤Ä¤Î¸°¤ò¸øɽ¤·¤Æ(¸ø³«¸°)¡¢
- ¤â¤¦ÊÒÊý¤òÈëÌ©¤Ë¤·¤Æ¤ª¤¯(ÈëÌ©¸°)¤À¤±¤Ç¡¢
- °ÂÁ´¤Ê¥á¥Ã¥»¡¼¥¸¤ò¼õ¤±¼è¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</dd>
- </dl>
-
- <p>ï¤â¤¬°Å¹æ²½¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò¸ø³«¸°¤Ë¤è¤Ã¤Æ°Å¹æ²½
- ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢ÈëÌ©¸°¤Î»ý¤Á¼ç¤À¤±¤¬¤½¤ì¤òÆɤळ¤È¤¬
- ¤Ç¤­¤Þ¤¹¡£
- ¤³¤ÎÊýË¡¤Ç¡¢¶ä¹Ô¤Î¸ø³«¸°¤ò»È¤Ã¤Æ°Å¹æ²½¤¹¤ë¤³¤È¤Ç¡¢
- ¥¢¥ê¥¹¤ÏÈëÌ©¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¶ä¹Ô¤Î¤ß¤¬Éü¹æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
-
-<h3><a name="messagedigests" id="messagedigests">¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È</a></h3>
-
- <p>¥¢¥ê¥¹¤Ï¥á¥Ã¥»¡¼¥¸¤òÈëÌ©¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢
- 狼¤¬Î㤨¤Ð¼«Ê¬¤ËÁ÷¶â¤¹¤ë¤è¤¦¤Ë¥á¥Ã¥»¡¼¥¸¤òÊѹ¹¤·¤¿¤ê¡¢
- Ê̤Τâ¤Î¤ËÃÖ¤­´¹¤¨¤Æ¤·¤Þ¤¦¤«¤â¤·¤ì¤Ê¤¤¤È¤¤¤¦ÌäÂ꤬¤¢¤ê¤Þ¤¹¡£
- ¥¢¥ê¥¹¤Î¥á¥Ã¥»¡¼¥¸¤Î¿®ÍѤòÊݾڤ¹¤ëÊýË¡¤Î°ì¤Ä¤Ï¡¢
- ¥á¥Ã¥»¡¼¥¸¤Î´Ê·é¤Ê¥À¥¤¥¸¥§¥¹¥È¤òºî¤Ã¤Æ¡¢¤½¤ì¤â¶ä¹Ô¤ËÁ÷¤ë¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£
- ¥á¥Ã¥»¡¼¥¸¤ò¼õ¤±¼è¤ë¤È¶ä¹Ô¤â¥À¥¤¥¸¥§¥¹¥È¤òºîÀ®¤·¡¢
- ¥¢¥ê¥¹¤¬Á÷¤Ã¤¿¤â¤Î¤ÈÈæ¤Ù¤Þ¤¹¡£¤â¤·°ìÃפ·¤¿¤Ê¤é¡¢
- ¼õ¤±¼è¤Ã¤¿¥á¥Ã¥»¡¼¥¸¤Ï̵½ý¤À¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p>¤³¤Î¤è¤¦¤ÊÍ×Ìó¤Ï<dfn>¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È</dfn>¡¢
- <em>°ìÊý¹Ô´Ø¿ô</em>¡¢¤Þ¤¿¤Ï<em>¥Ï¥Ã¥·¥å´Ø¿ô</em>¤È¸Æ¤Ð¤ì¤Þ¤¹¡£
- ¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È¤ÏŤ¤²ÄÊÑĹ¤Î¥á¥Ã¥»¡¼¥¸¤«¤é
- û¤¤¸ÇÄêŤÎɽ¸½¤òºî¤ë¤Î¤Ë»È¤ï¤ì¤Þ¤¹¡£
- ¥À¥¤¥¸¥§¥¹¥È¥¢¥ë¥´¥ê¥º¥à¤Ï¥á¥Ã¥»¡¼¥¸¤«¤é
- °ì°Õ¤Ê¥À¥¤¥¸¥§¥¹¥È¤òÀ¸À®¤¹¤ë¤è¤¦¤Ëºî¤é¤ì¤Æ¤¤¤Þ¤¹¡£
- ¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È¤Ï¥À¥¤¥¸¥§¥¹¥È¤«¤é¸µ¤Î¥á¥Ã¥»¡¼¥¸¤ò
- ȽÄꤹ¤ë¤Î¤¬¤È¤Æ¤âÆñ¤·¤¤¤è¤¦¤Ë¤Ç¤­¤Æ¤¤¤Þ¤¹¡£
- ¤Þ¤¿¡¢Æ±¤¸Í×Ìó¤òºîÀ®¤¹¤ëÆó¤Ä¤Î¥á¥Ã¥»¡¼¥¸¤òõ¤¹¤Î¤ÏÉÔ²Äǽ¤Ç¤¹¡£
- ¤è¤Ã¤Æ¡¢Æ±¤¸Í×Ìó¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÃÖ¤­´¹¤¨¤ë¤È¤¤¤¦
- ²ÄǽÀ­¤òÇÓ½ü¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
-<p>¥¢¥ê¥¹¤Ø¤Î¤â¤¦°ì¤Ä¤ÎÌäÂê¤Ï¡¢¤³¤Î¥À¥¤¥¸¥§¥¹¥È¤ò°ÂÁ´¤ËÁ÷¤ëÊýË¡¤òõ¤¹¤³¤È¤Ç¤¹¡£
-¤³¤ì¤¬¤Ç¤­¤ì¤Ð¡¢¥á¥Ã¥»¡¼¥¸¤Î¿®ÍѤ¬Êݾڤµ¤ì¤Þ¤¹¡£
-°ì¤Ä¤ÎÊýË¡¤Ï¤³¤Î¥À¥¤¥¸¥§¥¹¥È¤ËÅŻҽð̾¤ò´Þ¤à¤³¤È¤Ç¤¹¡£</p>
-
-
-<h3><a name="digitalsignatures" id="digitalsignatures">ÅŻҽð̾</a></h3>
-<p>¥¢¥ê¥¹¤¬¶ä¹Ô¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¤Ã¤¿¤È¤­¡¢¶ä¹Ô¤Ï¡¢
-¿¯Æþ¼Ô¤¬Èà½÷¤Ë¤Ê¤ê¤¹¤Þ¤·¤ÆÈà½÷¤Î¸ýºÂ¤Ø¤Î¼è°ú¤ò¿½ÀÁ¤·¤Æ¤¤¤Ê¤¤¤«¡¢
-¥á¥Ã¥»¡¼¥¸¤¬ËÜÅö¤ËÈà½÷¤«¤é¤Î¤â¤Î¤«³Î¼Â¤Ëʬ¤«¤é¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£
-¥¢¥ê¥¹¤Ë¤è¤Ã¤ÆºîÀ®¤µ¤ì¡¢¥á¥Ã¥»¡¼¥¸¤Ë´Þ¤Þ¤ì¤¿
-<em>ÅŻҽð̾</em>¤¬¤³¤³¤ÇÌò¤ËΩ¤Á¤Þ¤¹¡£</p>
-
-<p>ÅŻҽð̾¤Ï¥á¥Ã¥»¡¼¥¸¤Î¥À¥¤¥¸¥§¥¹¥È¤ä¤½¤Î¾¤Î¾ðÊó(½èÍýÈÖ¹æ¤Ê¤É)¤ò
-Á÷¿®¼Ô¤ÎÈëÌ©¸°¤Ç°Å¹æ²½¤¹¤ë¤³¤È¤Çºî¤é¤ì¤Þ¤¹¡£
-ï¤â¤¬¸ø³«¸°¤ò»È¤Ã¤Æ½ð̾¤ò<em>Éü¹æ</em>¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢
-½ð̾¼Ô¤Î¤ß¤¬ÈëÌ©¸°¤òÃΤäƤ¤¤Þ¤¹¡£
-¤³¤ì¤Ï¡¢Èà¤é¤Î¤ß¤¬½ð̾¤·¤¨¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
-¥À¥¤¥¸¥§¥¹¥È¤òÅŻҽð̾¤Ë´Þ¤à¤³¤È¤Ï¡¢
-¤½¤Î½ð̾¤¬¤½¤Î¥á¥Ã¥»¡¼¥¸¤Î¤ß¤ËÍ­¸ú¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
-¤³¤ì¤Ï¡¢Ã¯¤â¥À¥¤¥¸¥§¥¹¥È¤òÊѤ¨¤Æ½ð̾¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤¿¤á¡¢
-¥á¥Ã¥»¡¼¥¸¤Î¿®ÍѤâÊݾڤ·¤Þ¤¹¡£</p>
-
-<p>¿¯Æþ¼Ô¤¬½ð̾¤ò˵¼õ¤·¤Æ¸åÆü¤ËºÆÍøÍѤ¹¤ë¤Î¤òËɤ°¤¿¤á
-ÅŻҽð̾¤Ë¤Ï°ì°Õ¤Ê½èÍýÈֹ椬´Þ¤Þ¤ì¤Þ¤¹¡£
-¤³¤ì¤Ï¡¢¥¢¥ê¥¹¤¬¤½¤ó¤Ê¥á¥Ã¥»¡¼¥¸¤ÏÁ÷¤Ã¤Æ¤¤¤Ê¤¤¤È¸À¤¦º¾µ½
-¤«¤é¶ä¹Ô¤ò¼é¤ê¤Þ¤¹¡£
-Èà½÷¤À¤±¤¬½ð̾¤·¤¨¤¿¤«¤é¤Ç¤¹¡£(ÈÝǧËÉ»ß)</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="certificates" id="certificates">¾ÚÌÀ½ñ</a></h2>
-
-<p>¥¢¥ê¥¹¤ÏÈëÌ©¤Î¥á¥Ã¥»¡¼¥¸¤ò¶ä¹Ô¤ËÁ÷¤ê¡¢
-½ð̾¤ò¤·¤Æ¡¢¥á¥Ã¥»¡¼¥¸¤Î¿®ÍѤòÊݾڤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤ª¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¤¬¡¢
-ÄÌ¿®¤·¤Æ¤¤¤ëÁê¼ê¤¬ËÜÅö¤Ë¶ä¹Ô¤Ê¤Î¤«³Î¤«¤á¤Ê¤¯¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
-¤³¤ì¤Ï¡¢Èà½÷¤¬»È¤¦¸ø³«¸°¤¬¶ä¹Ô¤ÎÈëÌ©¸°¤ÈÂФˤʤäƤ¤¤ë¤â¤Î¤«¡¢
-Èà½÷¤Ï³Î¤«¤á¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
-ƱÍͤˡ¢¶ä¹Ô¤Ï¥á¥Ã¥»¡¼¥¸¤Î½ð̾¤¬ËÜÅö¤Ë¥¢¥ê¥¹¤Î½ð̾¤«³Îǧ¤¹¤ëɬÍפ¬
-¤¢¤ê¤Þ¤¹¡£</p>
-
-<p>¤â¤·Î¾¼Ô¤Ë¿È¸µ¤ò¾ÚÌÀ¤·¡¢¸ø³«¸°¤ò³Îǧ¤·¡¢¤Þ¤¿¿®Íꤵ¤ì¤¿µ¡´Ø¤¬½ð̾
-¤·¤¿¾ÚÌÀ½ñ¤¬¤¢¤ì¤Ð¡¢Î¾¼Ô¤È¤âÄÌ¿®Áê¼ê¤Ë¤Ä¤¤¤ÆÀµ¤·¤¤Áê¼ê¤À¤È
-³Î¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-¤½¤Î¤è¤¦¤Ê¿®Íꤵ¤ì¤¿µ¡´Ø¤Ï<em>ǧ¾Ú¶É</em>
- (Certificate Authority ¤Þ¤¿¤Ï CA) ¤È¸Æ¤Ð¤ì¡¢
-¾ÚÌÀ½ñ (certificate) ¤¬Ç§¾Ú (authentication) ¤Ë»È¤ï¤ì¤Þ¤¹¡£</p>
-
-<h3><a name="certificatecontents" id="certificatecontents">¾ÚÌÀ½ñ¤ÎÆâÍÆ</a></h3>
-
- <p>¾ÚÌÀ½ñ¤Ï¸ø³«¸°¤È¸Ä¿Í¡¢¥µ¡¼¥Ð¡¢¤½¤Î¾¤Î¼çÂΤμºߤοȸµ¤ò
- ´ØÏ¢ÉÕ¤±¤Þ¤¹¡£
- <a href="#table1">ɽ1</a>¤Ë¼¨¤µ¤ì¤ë¤è¤¦¤Ë¾ÚÌÀÂоݤξðÊó¤Ï
- ¿È¸µ¾ÚÌÀ¤Î¾ðÊó(¼±ÊÌ̾)¤È¸ø³«¸°¤¬´Þ¤Þ¤ì¤Þ¤¹¡£
- ¾ÚÌÀ½ñ¤Ï¤Þ¤¿¡¢Ç§¾Ú¶É¤Î¿È¸µ¾ÚÌÀ¤È½ð̾¡¢¤½¤·¤Æ¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü´Ö¤ò
- ´Þ¤ß¤Þ¤¹¡£
- ¥·¥ê¥¢¥ë¥Ê¥ó¥Ð¡¼¤Ê¤É¤Îǧ¾Ú¶É¤Î´ÉÍý¾å¤Î¾ðÊó¤ä
- ¤½¤Î¾¤ÎÄɲäξðÊ󤬴ޤޤì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <h4><a name="table1" id="table1">ɽ1: ¾ÚÌÀ½ñ¾ðÊó</a></h4>
-
- <table>
-
- <tr><th>¾ÚÌÀÂоÝ</th>
- <td>¼±ÊÌ̾¡¢¸ø³«¸°</td></tr>
- <tr><th>ȯ¹Ô¼Ô</th>
- <td>¼±ÊÌ̾¡¢¸ø³«¸°</td></tr>
- <tr><th>Í­¸ú´ü´Ö</th>
- <td>³«»ÏÆü¡¢¼º¸úÆü</td></tr>
- <tr><th>´ÉÍý¾ðÊó</th>
- <td>¥Ð¡¼¥¸¥ç¥ó¡¢¥·¥ê¥¢¥ë¥Ê¥ó¥Ð¡¼</td></tr>
- <tr><th>³ÈÄ¥¾ðÊó</th>
- <td>´ðËÜŪ¤ÊÀ©Ì󡢥ͥåȥ¹¥±¡¼¥×¥Õ¥é¥Ã¥°¡¢¤½¤Î¾</td></tr>
- </table>
-
-
- <p>¼±ÊÌ̾(¥Ç¥£¥¹¥Æ¥£¥ó¥°¥¤¥Ã¥·¥å¡¦¥Í¡¼¥à)¤ÏÆÃÄê¤Î¾õ¶·¤Ë¤ª¤±¤ë
- ¿Èʬ¾ÚÌÀ¤òÄ󶡤¹¤ë¤Î¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£Î㤨¤Ð¡¢¤¢¤ë¿Í¤Ï
- »äÍѤȲñ¼Ò¤È¤ÇÊÌ¡¹¤Î¿Èʬ¾ÚÌÀ¤ò»ý¤Ä¤«¤â¤·¤ì¤Þ¤»¤ó¡£
-
- ¼±ÊÌ̾¤Ï X.509 ɸ½àµ¬³Ê [<a href="#X509">X509</a>] ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- X.509 ɸ½àµ¬³Ê¤Ï¡¢¹àÌÜ¡¢¹àÌÜ̾¡¢¤½¤·¤Æ¹àÌܤÎά¾Î¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£(<a href="#table2">ɽ
- 2</a> »²¾È)</p>
-
- <h4><a name="table2" id="table2">ɽ 2: ¼±ÊÌ̾¾ðÊó</a></h4>
-
- <table class="bordered">
-
- <tr><th>¼±ÊÌ̾¹àÌÜ</th>
- <th>ά¾Î</th>
- <th>ÀâÌÀ</th>
- <th>Îã</th></tr>
- <tr><td>Common Name (¥³¥â¥ó¥Í¡¼¥à)</td>
- <td>CN</td>
- <td>ǧ¾Ú¤µ¤ì¤ë̾Á°<br />
- SSLÀܳ¤¹¤ëURL</td>
- <td>CN=www.example.com</td></tr>
- <tr><td>Organization or Company (ÁÈ¿¥Ì¾)</td>
- <td>O</td>
- <td>ÃÄÂΤÎÀµ¼°±Ñ¸ìÁÈ¿¥Ì¾</td>
- <td>O=Example Japan K.K.</td></tr>
- <tr><td>Organizational Unit (ÉôÌç̾)</td>
- <td>OU</td>
- <td>Éô½ð̾¤Ê¤É</td>
- <td>OU=Customer Service</td></tr>
- <tr><td>City/Locality (»Ô¶èĮ¼)</td>
- <td>L</td>
- <td>½êºß¤·¤Æ¤ë»Ô¶èĮ¼</td>
- <td>L=Sapporo</td></tr>
- <tr><td>State/Province (ÅÔÆ»Éܸ©)</td>
- <td>ST</td>
- <td>½êºß¤·¤Æ¤ëÅÔÆ»Éܸ©</td>
- <td>ST=Hokkaido</td></tr>
- <tr><td>Country(¹ñ)</td>
- <td>C</td>
- <td>½êºß¤·¤Æ¤¤¤ë¹ñ̾¤Î ISO ¥³¡¼¥É<br />
- ÆüËܤξì¹ç JP
- </td>
- <td>C=JP</td></tr>
- </table>
-
-
- <p>ǧ¾Ú¶É¤Ï¤É¤Î¹àÌܤ¬¾Êά²Äǽ¤Ç¤É¤ì¤¬É¬¿Ü¤«¤ÎÊý¿Ë¤òÄêµÁ¤¹¤ë
- ¤«¤â¤·¤ì¤Þ¤»¤ó¡£¹àÌܤÎÆâÍƤˤĤ¤¤Æ¤âǧ¾Ú¶É¤ä¾ÚÌÀ½ñ¤Î¥æ¡¼¥¶¤«¤é¤Î
- Í׷郎¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- Î㤨¤Ð¡¢¥Í¥Ã¥È¥¹¥±¡¼¥×¤Î¥Ö¥é¥¦¥¶¤Ï¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤Î
- Common Name (¥³¥â¥ó¥Í¡¼¥à)¤¬¥µ¡¼¥Ð¤Î¥É¥á¥¤¥ó̾¤Î
- <code>*.example.com</code>
- ¤È¤¤¤¦¤è¤¦¤Ê¥ï¥¤¥ë¥É¥«¡¼¥É¤Î¥Ñ¥¿¡¼¥ó¤Ë¥Þ¥Ã¥Á¤¹¤ë¤³¤È
- ¤òÍ׵ᤷ¤Þ¤¹¡£</p>
-
- <p>¥Ð¥¤¥Ê¥ê·Á¼°¤Î¾ÚÌÀ½ñ¤Ï ASN.1 ɽµ­Ë¡
- [<a href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>] ¤Ç
- ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Îɽµ­Ë¡¤ÏÆâÍƤò¤É¤Î¤è¤¦¤Ëµ­½Ò¤¹¤ë¤«¤òÄêµÁ¤·¡¢
- Éä¹æ²½¤Îµ¬Ä꤬¤³¤Î¾ðÊ󤬤ɤΤ褦¤Ë¥Ð¥¤¥Ê¥ê·Á¼°¤ËÊÑ´¹¤µ¤ì¤ë¤«¤ò
- ÄêµÁ¤·¤Þ¤¹¡£
- ¾ÚÌÀ½ñ¤Î¥Ð¥¤¥Ê¥êÉä¹æ²½¤Ï Distinguished Encoding
- Rules (DER) ¤ÇÄêµÁ¤µ¤ì¡¢¤½¤ì¤Ï¤è¤ê°ìÈÌŪ¤Ê Basic Encoding Rules
- (BER) ¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¡£
- ¥Ð¥¤¥Ê¥ê·Á¼°¤ò°·¤¦¤³¤È¤Î¤Ç¤­¤Ê¤¤Á÷¿®¤Ç¤Ï¡¢
- ¥Ð¥¤¥Ê¥ê·Á¼°¤Ï Base64 Éä¹æ²½ [<a href="#MIME">MIME</a>] ¤Ç
- ASCII ·Á¼°¤ËÊÑ´¹¤µ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤ËÉä¹æ²½¤µ¤ì¡¢°Ê²¼¤ÎÎã¤Ë¼¨¤µ¤ì¤ë¤è¤¦¤Ë¶èÀÚ¤ê¹Ô¤Ë
- ¶´¤Þ¤ì¤¿¤â¤Î¤Ï PEM Éä¹æ²½¤µ¤ì¤¿¤È¸À¤¤¤Þ¤¹¡£
- (PEM ¤Î̾Á°¤Ï "Privacy Enhanced Mail" ¤ËͳÍ褷¤Þ¤¹)</p>
-
- <div class="example"><h3>PEM Éä¹æ²½¤µ¤ì¤¿¾ÚÌÀ½ñ¤ÎÎã (example.crt)</h3><pre>-----BEGIN CERTIFICATE-----
-MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
-FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
-A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
-cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
-bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
-MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
-a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
-cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
-AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
-vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
-lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
-HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
-gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
-2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
-dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
------END CERTIFICATE-----</pre></div>
-
-
-<h3><a name="certificateauthorities" id="certificateauthorities">ǧ¾Ú¶É</a></h3>
-
- <p>¤Þ¤º¾ÚÌÀ½ñ¤Î¿½ÀÁ¤Î¾ðÊó¤ò³Îǧ¤¹¤ë¤³¤È¤Ç¡¢
- ǧ¾Ú¶É¤ÏÈëÌ©¸°¤Î»ý¤Á¼ç¤Î¿È¸µ¤òÊݾڤ·¤Þ¤¹¡£
- Î㤨¤Ð¡¢¥¢¥ê¥¹¤¬¸Ä¿Í¾ÚÌÀ½ñ¤ò¿½ÀÁ¤·¤¿¤È¤¹¤ë¤È¡¢
- ǧ¾Ú¶É¤Ï¥¢¥ê¥¹¤¬¾ÚÌÀ½ñ¤Î¿½ÀÁ¤¬¼çÄ¥¤¹¤ëÄ̤ê¤Î
- ¿Íʪ¤À¤È¤¤¤¦¤³¤È¤ò³Îǧ¤·¤Ê¤¯¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£</p>
-
- <h4><a name="certificatechains" id="certificatechains">¾ÚÌÀ½ñ³¬Áع½Â¤</a></h4>
-
- <p>ǧ¾Ú¶É¤Ï¾¤Îǧ¾Ú¶É¤Ø¤Î¾ÚÌÀ½ñ¤òȯ¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ̤ÃΤξÚÌÀ½ñ¤òÄ´¤Ù¤ë»þ¤Ë¡¢¥¢¥ê¥¹¤Ï¤½¤Î¾ÚÌÀ½ñ¤Îȯ¹Ô¼Ô
- ¤Ë¼«¿®¤¬»ý¤Æ¤ë¤Þ¤Ç¡¢È¯¹Ô¼Ô¤Î¾ÚÌÀ½ñ¤ò
- ¤½¤Î¾å°Ì³¬ÁؤÎǧ¾Ú¶É¤ò¤¿¤É¤Ã¤ÆÄ´¤Ù¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¡Ö°­¼Á¤Ê¡×¾ÚÌÀ½ñ¤Î´í¸±À­¤ò¸º¤é¤¹¤¿¤á¡¢
- Èà½÷¤Ï¸Â¤é¤ì¤¿Ï¢º¿¤Îȯ¹Ô¼Ô¤Î¤ß¿®Íꤹ¤ë¤è¤¦¤Ë
- ·è¤á¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-
-
- <h4><a name="rootlevelca" id="rootlevelca">ºÇ¾å°Ìǧ¾Ú¶É¤ÎºîÀ®</a></h4>
-
- <p>Á°¤Ë½Ò¤Ù¤¿¤è¤¦¤Ë¡¢Á´¤Æ¤Î¾ÚÌÀ½ñ¤Ë¤Ä¤¤¤Æ¡¢
- ºÇ¾å°Ì¤Îǧ¾Ú¶É(CA)¤Þ¤Ç¤½¤ì¤¾¤ì¤Îȯ¹Ô¼Ô¤¬
- Âоݤοȸµ¾ÚÌÀ¤ÎÍ­¸úÀ­¤òÌÀ¤é¤«¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ÌäÂê¤Ï¡¢Ã¯¤¬¤½¤ÎºÇ¾å°Ì¤Îǧ¾Úµ¡´Ø¤Î¾ÚÌÀ½ñ¤òÊݾڤ¹¤ë¤Î¤«¡¢
- ¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
- ¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¸Â¤ê¡¢¾ÚÌÀ½ñ¤Ï¡Ö¼«¸Ê½ð̾¡×¤µ¤ì¤Þ¤¹¡£
- ¤Ä¤Þ¤ê¡¢¾ÚÌÀ½ñ¤Îȯ¹Ô¼Ô¤È¾ÚÌÀÂоݤ¬Æ±¤¸¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤½¤Î·ë²Ì¡¢¼«¸Ê½ð̾¤µ¤ì¤¿¾ÚÌÀ½ñ¤ò¿®ÍѤ¹¤ë¤Ë¤Ï
- ºÙ¿´¤ÎÃí°Õ¤¬É¬ÍפǤ¹¡£
- ºÇ¾å°Ìǧ¾Ú¶É¤¬¸ø³«¸°¤ò¹­¤¯¸øɽ¤¹¤ë¤³¤È¤Ç¡¢
- ¤½¤Î¸°¤ò¿®Íꤹ¤ë¥ê¥¹¥¯¤òÄ㤯¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤â¤·¡¢Â¾¿Í¤¬¤½¤Îǧ¾Ú¶É¤Ë¤Ê¤ê¤¹¤Þ¤·¤¿»þ¤Ë¡¢¤½¤ì¤¬Ïª¸«¤·¤ä
- ¤¹¤¤¤«¤é¤Ç¤¹¡£
- ¿¤¯¤Î¥Ö¥é¥¦¥¶¤Ïͭ̾¤Êǧ¾Ú¶É¤ò¿®Íꤹ¤ë¤è¤¦¤Ë
- ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p><a href="http://www.thawte.com/">Thawte</a>
- ¤ä <a href="http://www.verisign.com/">VeriSign</a>
- ¤Î¤è¤¦¤Ê¿¤¯¤Î²ñ¼Ò¤¬Ç§¾Ú¶É¤È¤·¤Æ³«Àߤ·¤Þ¤·¤¿¡£
- ¤³¤Î¤è¤¦¤Ê²ñ¼Ò¤Ï°Ê²¼¤Î¥µ¡¼¥Ó¥¹¤òÄ󶡤·¤Þ¤¹:</p>
-
- <ul>
- <li>¾ÚÌÀ½ñ¿½ÀÁ¤Î³Îǧ</li>
- <li>¾ÚÌÀ½ñ¿½ÀÁ¤Î½èÍý</li>
- <li>¾ÚÌÀ½ñ¤Îȯ¹Ô¤È´ÉÍý</li>
- </ul>
-
- <p>¼«Ê¬¤Çǧ¾Ú¶É¤òºî¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
- ¥¤¥ó¥¿¡¼¥Í¥Ã¥È´Ä¶­¤Ç¤Ï´í¸±¤Ç¤¹¤¬¡¢
- ¸Ä¿Í¤ä¥µ¡¼¥Ð¤Î¿È¸µ¾ÚÌÀ¤¬´Êñ¤Ë¹Ô¤¨¤ëÁÈ¿¥¤Î
- ¥¤¥ó¥È¥é¥Í¥Ã¥ÈÆâ¤Ç¤ÏÌò¤ËΩ¤Ä¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
-
- <h4><a name="certificatemanagement" id="certificatemanagement">¾ÚÌÀ½ñ´ÉÍý</a></h4>
-
- <p>ǧ¾Ú¶É¤Î³«ÀߤÏÅ°Ä줷¤¿´ÉÍý¡¢µ»½Ñ¡¢±¿ÍѤÎÂÎÀ©¤òɬÍפȤ¹¤ë
- ÀÕǤ¤Î¤¢¤ë»Å»ö¤Ç¤¹¡£
- ǧ¾Ú¶É¤Ï¾ÚÌÀ½ñ¤òȯ¹Ô¤¹¤ë¤À¤±¤Ç¤Ê¤¯¡¢
- ´ÉÍý¤â¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¶ñÂÎŪ¤Ë¤Ï¡¢¾ÚÌÀ½ñ¤¬¤¤¤Ä¤Þ¤ÇÍ­¸ú¤«¤ò·èÄꤷ¡¢¹¹¿·¤·¡¢
- ¤Þ¤¿´û¤Ëȯ¹Ô¤µ¤ì¤¿¤¬¼º¸ú¤·¤¿¾ÚÌÀ½ñ¤Î¥ê¥¹¥È
- (Certificate Revocation Lists ¤Þ¤¿¤Ï CRL)
- ¤ò´ÉÍý¤·¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£
- Î㤨¤Ð¡¢¥¢¥ê¥¹¤¬²ñ¼Ò¤«¤é¼Ò°÷¤È¤·¤Æ¾ÚÌÀ½ñ¤òÍ¿¤¨¤é¤ì¤¿¤È¤·¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¥¢¥ê¥¹¤¬²ñ¼Ò¤ò¼­¤á¤ë¤È¤­¤Ë¤Ï¾ÚÌÀ½ñ¤ò¼è¤ê¾Ã¤µ¤Ê¤±¤ì¤Ð
- ¤¤¤±¤Ê¤¤¤È¤·¤Þ¤¹¡£
- ¾ÚÌÀ½ñ¤Ï¼¡¡¹¤È¿Í¤ËÅϤµ¤ì¤Æ¤¤¤¯¤â¤Î¤Ê¤Î¤Ç¡¢
- ¾ÚÌÀ½ñ¤½¤Î¤â¤Î¤«¤é¡¢¤½¤ì¤¬¼è¤ê¾Ã¤µ¤ì¤¿¤«È½ÃǤ¹¤ë¤³¤È¤Ï
- ÉÔ²Äǽ¤Ç¤¹¡£
- ¤è¤Ã¤Æ¡¢¾ÚÌÀ½ñ¤ÎÍ­¸úÀ­¤òÄ´¤Ù¤ë¤È¤­¤Ë¤Ï¡¢
- ǧ¾Ú¶É¤ËÏ¢Íí¤·¤Æ CRL ¤ò¾È¹ç¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ÉáÄ̤³¤Î²áÄø¤Ï¼«Æ°²½¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p>¥Ç¥Õ¥©¥ë¥È¤Ç¥Ö¥é¥¦¥¶¤ËÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤Ç§¾Ú¶É¤ò»È¤Ã¤¿¾ì¹ç¡¢
- ǧ¾Ú¶É¤Î¾ÚÌÀ½ñ¤ò¥Ö¥é¥¦¥¶¤ËÆɤ߹þ¤ó¤Ç¡¢
- ¥Ö¥é¥¦¥¶¤¬¤½¤Îǧ¾Ú¶É¤Ë¤è¤Ã¤Æ½ð̾¤µ¤ì¤¿¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤ò
- Í­¸ú²½¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- °ìÅÙÆɤ߹þ¤Þ¤ì¤ë¤È¡¢¤½¤Îǧ¾Ú¶É¤Ë¤è¤Ã¤Æ½ð̾¤µ¤ì¤¿Á´¤Æ¤Î
- ¾ÚÌÀ½ñ¤ò¼õ¤±Æþ¤ì¤ë¤¿¤á¡¢´í¸±¤òȼ¤¤¤Þ¤¹¡£</p>
- </div>
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssl" id="ssl">Secure Sockets Layer (SSL)</a></h2>
-
-<p>Secure Sockets Layer ¥×¥í¥È¥³¥ë¤Ï¿®ÍêÀ­¤Î¤¢¤ë¥³¥Í¥¯¥·¥ç¥ó·¿¤Î
-¥Í¥Ã¥È¥ï¡¼¥¯ÁؤΥץí¥È¥³¥ë(Î㤨¤Ð¡¢TCP/IP)¤È
-¥¢¥×¥ê¥±¡¼¥·¥ç¥óÁؤΥץí¥È¥³¥ë(Î㤨¤Ð¡¢HTTP)
-¤Î´Ö¤ËÃÖ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-SSL ¤Ï¡¢Áê¸ßǧ¾Ú¤Ë¤è¤Ã¤Æ¥µ¡¼¥Ð¤È¥¯¥é¥¤¥¢¥ó¥È´Ö¤Î°ÂÁ´¤ÊÄÌ¿®¤ò¡¢
-ÅŻҽð̾¤Ë¤è¤Ã¤Æ¥Ç¡¼¥¿¤Î´°Á´À­¤ò¡¢
-¤½¤·¤Æ°Å¹æ²½¤Ë¤è¤Ã¤Æ¥×¥é¥¤¥Ð¥·¤òÄ󶡤·¤Þ¤¹¡£</p>
-
-<p>SSL ¥×¥í¥È¥³¥ë¤Ï°Å¹æ²½¡¢¥À¥¤¥¸¥§¥¹¥È¡¢ÅŻҽð̾¤Ë¤Ä¤¤¤Æ¡¢
-ÍÍ¡¹¤Ê¥¢¥ë¥´¥ê¥º¥à¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤è¤¦¤Ë¤Ç¤­¤Æ¤¤¤Þ¤¹¡£
-¤³¤¦¤¹¤ë¤³¤È¤Ç¡¢Ë¡¤äÍ¢½Ð¤Îµ¬À©¤ò¹Íθ¤ËÆþ¤ì¤Æ¡¢¥µ¡¼¥Ð¤Ë¹ç¤ï¤»¤¿
-¥¢¥ë¥´¥ê¥º¥à¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¡¢¤Þ¤¿¡¢¿·¤·¤¤¥¢¥ë¥´¥ê¥º¥à¤ò
-ÍøÍѤ·¤Æ¤¤¤¯¤³¤È¤â²Äǽ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
-¥¢¥ë¥´¥ê¥º¥à¤ÎÁªÂò¤Ï¥×¥í¥È¥³¥ë¥»¥Ã¥·¥ç¥ó³«»Ï»þ¤Ë
-¥µ¡¼¥Ð¤È¥¯¥é¥¤¥¢¥ó¥È´Ö¤Ç¼è¤ê·è¤á¤é¤ì¤Þ¤¹¡£</p>
-
-<h3><a name="table4" id="table4">ɽ4: SSL ¥×¥í¥È¥³¥ë¤Î¥Ð¡¼¥¸¥ç¥ó</a></h3>
-
- <table class="bordered">
-
- <tr><th>¥Ð¡¼¥¸¥ç¥ó</th>
- <th>½Ðŵ</th>
- <th>ÀâÌÀ</th>
- <th>¥Ö¥é¥¦¥¶¤Î¥µ¥Ý¡¼¥È</th></tr>
- <tr><td>SSL v2.0</td>
- <td>Vendor Standard (Netscape Corp. ¤è¤ê) [<a href="#SSL2">SSL2</a>]</td>
- <td>¼ÂÁõ¤¬¸½Â¸¤¹¤ë½é¤á¤Æ¤Î SSL ¥×¥í¥È¥³¥ë</td>
- <td>- NS Navigator 1.x/2.x<br />
- - MS IE 3.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>SSL v3.0</td>
- <td>Expired Internet Draft (Netscape Corp. ¤è¤ê) [<a href="#SSL3">SSL3</a>]</td>
- <td>ÆÃÄê¤Î¥»¥­¥å¥ê¥Æ¥£¹¶·â¤òËɤ°¤¿¤á¤Î²þÄû¡¢
- ÈóRSA °Å¹æ¤ÎÄɲᢾÚÌÀ½ñ³¬Áع½Â¤¤Î¥µ¥Ý¡¼¥È</td>
- <td>- NS Navigator 2.x/3.x/4.x<br />
- - MS IE 3.x/4.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>TLS v1.0</td>
- <td>Proposed Internet Standard (IETF ¤è¤ê) [<a href="#TLS1">TLS1</a>]</td>
- <td>MAC ¥ì¥¤¥ä¤ò HMAC ¤Ø¹¹¿·¡¢¥Ö¥í¥Ã¥¯°Å¹æ¤Î block
- padding¡¢¥á¥Ã¥»¡¼¥¸½ç½ø¤Îɸ½à²½¡¢·Ù¹ðʸ¤Î½¼¼Â¤Ê¤É¤Î¤¿¤á
- SSL 3.0 ¤ò²þÄû¡£</td>
- <td>- Lynx/2.8+OpenSSL</td></tr>
- </table>
-
-
-<p><a href="#table4">ɽ4</a>¤Ë¼¨¤µ¤ì¤ë¤È¤ª¤ê¡¢SSL ¥×¥í¥È¥³¥ë¤Ë¤Ï
-¤¤¤¯¤Ä¤â¤Î¥Ð¡¼¥¸¥ç¥ó¤¬¤¢¤ê¤Þ¤¹¡£
-ɽ¤Ë¤â½ñ¤«¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢SSL 3.0 ¤ÎÍøÅÀ¤Î°ì¤Ä¤Ï
-¾ÚÌÀ½ñ³¬Áع½Â¤¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤³¤È¤Ç¤¹¡£
-¤³¤Îµ¡Ç½¤Ë¤è¤Ã¤Æ¡¢¥µ¡¼¥Ð¤Ï¼«Ê¬¤Î¾ÚÌÀ½ñ¤Ë²Ã¤¨¤Æ¡¢
-ȯ¹Ô¼Ô¤Î¾ÚÌÀ½ñ¤ò¥Ö¥é¥¦¥¶¤ËÅϤ¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-¾ÚÌÀ½ñ³¬Áع½Â¤¤Ë¤è¤Ã¤Æ¡¢
-¥Ö¥é¥¦¥¶¤Ëȯ¹Ô¼Ô¤Î¾ÚÌÀ½ñ¤¬Ä¾ÀÜÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¯¤Æ¤â¡¢
-³¬ÁؤÎÃæ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ì¤Ð¡¢
-¥Ö¥é¥¦¥¶¤Ï¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤òÍ­¸ú²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
-SSL 3.0 ¤Ï¸½ºß Internet Engineering Task Force (IETF)
-¤Ë¤è¤Ã¤Æ³«È¯¤µ¤ì¤Æ¤¤¤ë Transport Layer Security
-[<a href="#TLS1">TLS</a>] ¥×¥í¥È¥³¥ëɸ½àµ¬³Ê¤Î´ðÁäȤʤäƤ¤¤Þ¤¹¡£</p>
-
-<h3><a name="session" id="session">¥»¥Ã¥·¥ç¥ó¤Î³ÎΩ</a></h3>
-
- <p><a href="#figure1">¿Þ1</a>¤Ç¼¨¤µ¤ì¤ë¤è¤¦¤Ë¡¢
- ¥»¥Ã¥·¥ç¥ó¤Î³ÎΩ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð´Ö¤Î
- ¥Ï¥ó¥É¥·¥§¡¼¥¯¥·¡¼¥¯¥¨¥ó¥¹¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤¬¾ÚÌÀ½ñ¤òÄ󶡤¹¤ë¤«¡¢¥¯¥é¥¤¥¢¥ó¥È¤Î¾ÚÌÀ½ñ¤ò¥ê¥¯¥¨¥¹¥È¤¹¤ë¤«
- ¤È¤¤¤¦¥µ¡¼¥Ð¤ÎÀßÄê¤Ë¤è¤ê¡¢¤³¤Î¥·¡¼¥¯¥¨¥ó¥¹¤Ï°Û¤Ê¤ë¤â¤Î¤È¤Ê¤ê¤Þ¤¹¡£
- °Å¹æ¾ðÊó¤Î´ÉÍý¤Î¤¿¤á¤Ë¡¢ÄɲäΥϥó¥É¥·¥§¡¼¥¯²áÄø¤¬É¬Íפˤʤë
- ¾ì¹ç¤â¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤Îµ­»ö¤Ç¤Ï
- ¤è¤¯¤¢¤ë¥·¥Ê¥ê¥ª¤ò¼êû¤ËÀâÌÀ¤·¤Þ¤¹¡£
- Á´¤Æ¤Î²ÄǽÀ­¤Ë¤Ä¤¤¤Ï¡¢SSL »ÅÍͽñ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note"><h3>Ãí°Õ</h3>
- <p>°ìÅÙ SSL ¥»¥Ã¥·¥ç¥ó¤¬³ÎΩ¤¹¤ë¤È¡¢¥»¥Ã¥·¥ç¥ó¤òºÆÍøÍѤ¹¤ë¤³¤È¤Ç¡¢
- ¥»¥Ã¥·¥ç¥ó¤ò³«»Ï¤¹¤ë¤¿¤á¤Î¿¤¯¤Î²áÄø¤ò·«¤êÊÖ¤¹¤È¤¤¤¦
- ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Î»¼º¤òËɤ®¤Þ¤¹¡£
- ¤½¤Î¤¿¤á¡¢¥µ¡¼¥Ð¤ÏÁ´¤Æ¤Î¥»¥Ã¥·¥ç¥ó¤Ë°ì°Õ¤Ê¥»¥Ã¥·¥ç¥ó¼±ÊÌ̾¤ò
- ³ä¤êÅö¤Æ¡¢¥µ¡¼¥Ð¤Ë¥­¥ã¥Ã¥·¥å¤·¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ï¼¡²ó¤«¤é
- (¼±ÊÌ̾¤¬¥µ¡¼¥Ð¤Î¥­¥ã¥Ã¥·¥å¤Ç´ü¸ÂÀÚ¤ì¤Ë¤Ê¤ë¤Þ¤Ç¤Ï)
- ¥Ï¥ó¥É¥·¥§¡¼¥¯¤Ê¤·¤ÇÀܳ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
- </div>
-
- <p class="figure">
- <img src="ssl_intro_fig1.gif" alt="" width="423" height="327" /><br />
- <a id="figure1" name="figure1"><dfn>¿Þ1</dfn></a>: SSL
- ¥Ï¥ó¥É¥·¥§¡¼¥¯¥·¡¼¥¯¥¨¥ó¥¹³µÎ¬</p>
-
- <p>¥µ¡¼¥Ð¤È¥¯¥é¥¤¥¢¥ó¥È¤Ç»È¤ï¤ì¤ë
- ¥Ï¥ó¥É¥·¥§¡¼¥¯¥·¡¼¥¯¥¨¥ó¥¹¤ÎÍ×ÁǤò°Ê²¼¤Ë¼¨¤·¤Þ¤¹:</p>
-
- <ol>
- <li>¥Ç¡¼¥¿ÄÌ¿®¤Ë»È¤ï¤ì¤ë°Å¹æ¥¹¥¤¡¼¥È¤Î¼è¤ê·è¤á</li>
- <li>¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð´Ö¤Ç¤Î¥»¥Ã¥·¥ç¥ó¸°¤Î³ÎΩ¤È¶¦Í­</li>
- <li>¥ª¥×¥·¥ç¥ó¤È¤·¤Æ¡¢¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ¹¤ë¥µ¡¼¥Ð¤Îǧ¾Ú</li>
- <li>¥ª¥×¥·¥ç¥ó¤È¤·¤Æ¡¢¥µ¡¼¥Ð¤ËÂФ¹¤ë¥¯¥é¥¤¥¢¥ó¥È¤Îǧ¾Ú</li>
- </ol>
-
- <p>Âè°ì¥¹¥Æ¥Ã¥×¤Î°Å¹æ¥¹¥¤¡¼¥È¼è¤ê·è¤á¤Ë¤è¤Ã¤Æ¡¢
- ¥µ¡¼¥Ð¤È¥¯¥é¥¤¥¢¥ó¥È¤Ï¤½¤ì¤¾¤ì¤Ë¤¢¤Ã¤¿
- °Å¹æ¥¹¥¤¡¼¥È¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- SSL3.0 ¥×¥í¥È¥³¥ë¤Î»ÅÍͽñ¤Ï 31 ¤Î°Å¹æ¥¹¥¤¡¼¥È¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
- °Å¹æ¥¹¥¤¡¼¥È¤Ï°Ê²¼¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ë¤è¤êÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹:</p>
-
- <ul>
- <li>¸°¤Î¸ò´¹¼êÃÊ</li>
- <li>¥Ç¡¼¥¿ÄÌ¿®¤Î°Å¹æ½Ñ</li>
- <li>Message Authentication Code (MAC) ºîÀ®¤Î¤¿¤á¤Î
- ¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È</li>
- </ul>
-
- <p>¤³¤ì¤é¤Î»°¤Ä¤ÎÍ×ÁǤϰʲ¼¤Î¥»¥¯¥·¥ç¥ó¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-
-
-<h3><a name="keyexchange" id="keyexchange">¸°¤Î¸ò´¹¼êÃÊ</a></h3>
-
- <p>¸°¤Î¸ò´¹¼êÃʤϥ¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥Ç¡¼¥¿ÄÌ¿®¤Ë»È¤ï¤ì¡¢
- ¶¦Í­¤µ¤ì¤ëÂоΰŹ渰¤ò¤É¤Î¤è¤¦¤Ë¤¬¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤Ç
- ¼è¤ê·è¤á¤ë¤«¤òÄêµÁ¤·¤Þ¤¹¡£
- SSL 2.0 ¤Ï RSA ¸°¸ò´¹¤·¤«»È¤¤¤Þ¤»¤ó¤¬¡¢
- SSL 3.0 ¤Ï¾ÚÌÀ½ñ¤¬»È¤ï¤ì¤ë¤È¤­¤Ï RSA ¸°¸ò´¹¤ò»È¤¤¡¢
- ¾ÚÌÀ½ñ¤¬Ìµ¤¯¡¢¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤Î»öÁ°¤ÎÄÌ¿®¤¬Ìµ¤¤¾ì¹ç¤Ï
- Diffie-Hellman ¸°¸ò´¹¤ò»È¤¦
- ¤Ê¤ÉÍÍ¡¹¤Ê¸°¸ò´¹¥¢¥ë¥´¥ê¥º¥à¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£</p>
-
- <p>¸°¤Î¸ò´¹ÊýË¡¤Ë¤ª¤±¤ë°ì¤Ä¤ÎÁªÂò»è¤ÏÅŻҽð̾¤Ç¤¹¡£
- ÅŻҽð̾¤ò»È¤¦¤«¤É¤¦¤«¡¢¤Þ¤¿¡¢
- ¤É¤Î¼ïÎà¤Î½ð̾¤ò»È¤¦¤«¤È¤¤¤¦ÁªÂò¤¬¤¢¤ê¤Þ¤¹¡£
- ÈëÌ©¸°¤Ç½ð̾¤¹¤ë¤³¤È¤Ç¶¦Í­¸°¤òÀ¸À®¤¹¤·¡¢¾ðÊó¸ò´¹¤¹¤ë»þ¤Î
- ¥Þ¥ó¡¦¥¤¥ó¡¦¥¶¡¦¥ß¥É¥ë¹¶·â¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- [<a href="#AC96">AC96</a>, p516]</p>
-
-
-<h3><a name="ciphertransfer" id="ciphertransfer">¥Ç¡¼¥¿ÄÌ¿®¤Î°Å¹æ½Ñ</a></h3>
-
- <p>SSL ¤Ï¥»¥Ã¥·¥ç¥ó¤Î¥á¥Ã¥»¡¼¥¸¤Î°Å¹æ²½¤ËÁ°½Ò¤·¤¿
- ½¾Íè·¿°Å¹æ(ÂоΰŹæ)¤òÍѤ¤¤Þ¤¹¡£
- °Å¹æ²½¤·¤Ê¤¤¤È¤¤¤¦ÁªÂò»è¤â´Þ¤á¶å¤Ä¤ÎÁªÂò»è¤¬¤¢¤ê¤Þ¤¹:</p>
-
- <ul>
- <li>°Å¹æ²½¤Ê¤·</li>
- <li>¥¹¥È¥ê¡¼¥à°Å¹æ
- <ul>
- <li>40-bit ¸°¤Ç¤Î RC4</li>
- <li>128-bit ¸°¤Ç¤Î RC4</li>
- </ul></li>
- <li>CBC ¥Ö¥í¥Ã¥¯°Å¹æ
- <ul><li>40 bit ¸°¤Ç¤Î RC2</li>
- <li>40 bit ¸°¤Ç¤Î DES</li>
- <li>56 bit ¸°¤Ç¤Î DES</li>
- <li>168 bit ¸°¤Ç¤Î Triple-DES</li>
- <li>Idea (128 bit ¸°)</li>
- <li>Fortezza (96 bit ¸°)</li>
- </ul></li>
- </ul>
-
- <p>¤³¤³¤Ç¤Î CBC ¤È¤Ï°Å¹æ¥Ö¥í¥Ã¥¯Ï¢º¿ (Cipher Block Chaining)
- ¤Îά¤Ç¡¢°ì¤ÄÁ°¤Î°Å¹æ²½¤µ¤ì¤¿°Å¹æʸ¤Î°ìÉô¤¬
- ¥Ö¥í¥Ã¥¯¤Î°Å¹æ²½¤Ë»È¤ï¤ì¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- DES ¤Ï¥Ç¡¼¥¿°Å¹æ²½É¸½àµ¬³Ê (Data Encryption Standard)
- [<a href="#AC96">AC96</a>, ch12] ¤Îά¤Ç¡¢
- DES40 ¤ä 3DES_EDE ¤ò´Þ¤à¤¤¤¯¤Ä¤â¤Î¼ïÎब¤¢¤ê¤Þ¤¹¡£
- Idea ¤ÏºÇ¹â¤Ê¤â¤Î¤Î°ì¤Ä¤Ç¡¢°Å¹æ½ÑŪ¤Ë¤Ï¸½ºß¤¢¤ëÃæ¤Ç
- ºÇ¤â¶¯ÎϤʤâ¤Î¤Ç¤¹¡£
- RC2 ¤Ï RSA DSI ¤Ë¤è¤ëÆÈÀêŪ¤Ê¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£
- [<a href="#AC96">AC96</a>,
- ch13]</p>
-
-
-<h3><a name="digestfuntion" id="digestfuntion">¥À¥¤¥¸¥§¥¹¥È´Ø¿ô</a></h3>
-
- <p>
- ¥À¥¤¥¸¥§¥¹¥È´Ø¿ô¤ÎÁªÂò¤Ï¥ì¥³¡¼¥É¥æ¥Ë¥Ã¥È¤«¤é¤É¤Î¤è¤¦¤Ë¥À¥¤¥¸¥§¥¹¥È¤¬À¸À®¤µ¤ì¤ë¤«¤ò·èÄꤷ¤Þ¤¹¡£
- SSL ¤Ï°Ê²¼¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹:</p>
-
- <ul>
- <li>¥À¥¤¥¸¥§¥¹¥È¤Ê¤·</li>
- <li>MD5 (128-bit ¥Ï¥Ã¥·¥å)</li>
- <li>Secure Hash Algorithm (SHA-1) (160-bit ¥Ï¥Ã¥·¥å)</li>
- </ul>
-
- <p>¥á¥Ã¥»¡¼¥¸¥À¥¤¥¸¥§¥¹¥È¤Ï Message Authentication Code (MAC)
- ¤ÎÀ¸À®¤Ë»È¤ï¤ì¡¢¥á¥Ã¥»¡¼¥¸¤È¶¦¤Ë°Å¹æ²½¤µ¤ì¡¢¥á¥Ã¥»¡¼¥¸¤Î¿®ÍѤò
- Ä󶡤·¡¢¥ê¥×¥ì¥¤¹¶·â¤òËɤ®¤Þ¤¹¡£</p>
-
-
-<h3><a name="handshake" id="handshake">¥Ï¥ó¥É¥·¥§¡¼¥¯¥·¡¼¥¯¥¨¥ó¥¹¥×¥í¥È¥³¥ë</a></h3>
-
- <p>¥Ï¥ó¥É¥·¥§¡¼¥¯¥·¡¼¥¯¥¨¥ó¥¹¤Ï»°¤Ä¤Î¥×¥í¥È¥³¥ë¤ò»È¤¤¤Þ¤¹:</p>
-
- <ul>
- <li><dfn>SSL ¥Ï¥ó¥É¥·¥§¡¼¥¯¥×¥í¥È¥³¥ë</dfn>¤Ï
- ¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð´Ö¤Ç¤Î SSL ¥»¥Ã¥·¥ç¥ó¤Î³ÎΩ¤Ë»È¤ï¤ì¤Þ¤¹¡£</li>
- <li><dfn>SSL °Å¹æ»ÅÍÍÊѹ¹¥×¥í¥È¥³¥ë</dfn>¤Ï
- ¥»¥Ã¥·¥ç¥ó¤Ç¤Î°Å¹æ¥¹¥¤¡¼¥È¤Î¼è¤ê·è¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£</li>
- <li><dfn>SSL ·Ù¹ð¥×¥í¥È¥³¥ë</dfn>¤Ï
- ¥¯¥é¥¤¥¢¥ó¥È¥µ¡¼¥Ð´Ö¤Ç SSL ¥¨¥é¡¼¤òÅÁ㤹¤ë¤Î¤Ë»È¤ï¤ì¤Þ¤¹¡£</li>
- </ul>
-
- <p>»°¤Ä¤Î¥×¥í¥È¥³¥ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥È¥³¥ë¥Ç¡¼¥¿¤È¤È¤â¤Ë¡¢
- <a href="#figure2">¿Þ2</a>¤Ë¼¨¤¹¤È¤ª¤ê <dfn>SSL ¥ì¥³¡¼¥É¥×¥í¥È¥³¥ë</dfn>
- ¤Ç¥«¥×¥»¥ë²½¤µ¤ì¤Þ¤¹¡£
- ¥«¥×¥»¥ë²½¤µ¤ì¤¿¥×¥í¥È¥³¥ë¤Ï¥Ç¡¼¥¿¤ò¸¡ºº¤·¤Ê¤¤
- ²¼ÁؤΥץí¥È¥³¥ë¤Ë¤è¤Ã¤Æ¥Ç¡¼¥¿¤È¤·¤ÆÅÁ㤵¤ì¤Þ¤¹¡£
- ¥«¥×¥»¥ë²½¤µ¤ì¤¿¥×¥í¥È¥³¥ë¤Ï²¼ÁؤΥץí¥È¥³¥ë¤Ë´Ø¤·¤Æ°ìÀÚ´ØÃΤ·¤Þ¤»¤ó¡£</p>
-
- <p class="figure">
- <img src="ssl_intro_fig2.gif" alt="" width="428" height="217" /><br />
- <a id="figure2" name="figure2"><dfn>¿Þ2</dfn></a>: SSL ¥×¥í¥È¥³¥ë¥¹¥¿¥Ã¥¯
- </p>
-
- <p>
- ¥ì¥³¡¼¥É¥×¥í¥È¥³¥ë¤Ë¤è¤ë SSL ¥³¥ó¥È¥í¡¼¥ë¥×¥í¥È¥³¥ë¤Î¥«¥×¥»¥ë²½¤Ï¡¢
- ¥¢¥¯¥Æ¥£¥Ö¤Ê¥»¥Ã¥·¥ç¥ó¤ÎÆó²óÌܤÎÄÌ¿®¤¬¤¢¤Ã¤¿¾ì¹ç¡¢
- ¥³¥ó¥È¥í¡¼¥ë¥×¥í¥È¥³¥ë¤¬°ÂÁ´¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
- ´û¤Ë¥»¥Ã¥·¥ç¥ó¤¬Ìµ¤¤¾ì¹ç¤Ï¡¢Null °Å¹æ¥¹¥¤¡¼¥È¤¬»È¤ï¤ì¡¢
- °Å¹æ²½¤Ï¹Ô¤Ê¤ï¤ì¤º¡¢¥»¥Ã¥·¥ç¥ó¤¬³ÎΩ¤¹¤ë¤Þ¤Ç¤Ï
- ¥À¥¤¥¸¥§¥¹¥È¤â̵¤¤¾õÂ֤Ȥʤê¤Þ¤¹¡£</p>
-
-
-<h3><a name="datatransfer" id="datatransfer">¥Ç¡¼¥¿ÄÌ¿®</a></h3>
-
- <p><a href="#figure3">¿Þ3</a>¤Ë¼¨¤µ¤ì¤ë SSL ¥ì¥³¡¼¥É¥×¥í¥È¥³¥ë
- ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð´Ö¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ä
- SSL ¥³¥ó¥È¥í¡¼¥ë¥Ç¡¼¥¿¤ÎÄÌ¿®¤Ë»È¤ï¤ì¤Þ¤¹¡£
- ¤³¤Î¥Ç¡¼¥¿¤Ï¤è¤ê¾®¤µ¤¤¥æ¥Ë¥Ã¥È¤Ëʬ¤±¤é¤ì¤¿¤ê¡¢
- ¤¤¤¯¤Ä¤«¤Î¹âµé¥×¥í¥È¥³¥ë¤ò¤Þ¤È¤á¤Æ°ì¥æ¥Ë¥Ã¥È¤È¤·¤ÆÄÌ¿®¤¬
- ¹Ô¤Ê¤ï¤ì¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£
- ¥Ç¡¼¥¿¤ò°µ½Ì¤·¡¢¥À¥¤¥¸¥§¥¹¥È½ð̾¤òźÉÕ¤·¤Æ¡¢
- ¤³¤ì¤é¤Î¥æ¥Ë¥Ã¥È¤ò°Å¹æ²½¤·¤¿¤Î¤Á¡¢¥Ù¡¼¥¹¤È¤Ê¤Ã¤Æ¤¤¤ë
- ¿®ÍêÀ­¤Î¤¢¤ë¥È¥é¥ó¥¹¥Ý¡¼¥È¥×¥í¥È¥³¥ë¤òÍѤ¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- (Ãí°Õ: ¸½ºß¥á¥¸¥ã¡¼¤Ê SLL ¼ÂÁõ¤Ç°µ½Ì¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó)</p>
-
- <p class="figure">
- <img src="ssl_intro_fig3.gif" alt="" width="423" height="323" /><br />
- <a id="figure3" name="figure3"><dfn>¿Þ 3</dfn></a>: SSL ¥ì¥³¡¼¥É¥×¥í¥È¥³¥ë
- </p>
-
-
-<h3><a name="securehttp" id="securehttp">HTTP ÄÌ¿®¤Î°ÂÁ´²½</a></h3>
-
- <p>¤è¤¯¤¢¤ë SSL ¤Î»È¤¤Êý¤Ï¥Ö¥é¥¦¥¶¤È¥¦¥§¥Ö¥µ¡¼¥Ð´Ö¤Î HTTP ÄÌ¿®
- ¤Î°ÂÁ´²½¤Ç¤¹¡£
- ¤³¤ì¤Ï¡¢½¾Íè¤Î°ÂÁ´¤Ç¤Ï¤Ê¤¤ HTTP ¤Î»ÈÍѤò½ü³°¤¹¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- °ÂÁ´²½¤µ¤ì¤¿¤â¤Î¤Ï¼ç¤Ë SSH ¾å¤ÎÉáÄ̤ΠHTTP ¤Ç¡¢HTTPS ¤È¸Æ¤Ð¤ì¤Þ¤¹¡£
- Â礭¤Ê°ã¤¤¤Ï¡¢URL ¥¹¥­¡¼¥à¤Ë <code>http</code> ¤ÎÂå¤ï¤ê¤Ë <code>https</code>
- ¤òÍѤ¤¡¢¥µ¡¼¥Ð¤¬Ê̤Υݡ¼¥È¤ò»È¤¦¤³¤È¤Ç¤¹ (¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï443)¡£
- ¤³¤ì¤¬¼ç¤Ë <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ¤¬ Apache ¥¦¥§¥Ö¥µ¡¼¥Ð¤ËÄ󶡤¹¤ëµ¡Ç½¤Ç¤¹¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="references" id="references">»²¹Íʸ¸¥</a></h2>
-
-<dl>
-<dt><a id="AC96" name="AC96">[AC96]</a></dt>
-<dd>Bruce Schneier, <q>Applied Cryptography</q>, 2nd Edition, Wiley,
-1996. See <a href="http://www.counterpane.com/">http://www.counterpane.com/</a> for various other materials by Bruce
-Schneier.</dd>
-
-<dt><a id="X208" name="X208">[X208]</a></dt>
-<dd>ITU-T Recommendation X.208, <q>Specification of Abstract Syntax Notation
-One (ASN.1)</q>, 1988. See for instance <a href="http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I">http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I</a>.
-</dd>
-
-<dt><a id="X509" name="X509">[X509]</a></dt>
-<dd>ITU-T Recommendation X.509, <q>The Directory - Authentication
-Framework</q>. See for instance <a href="http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509">http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509</a>.
-</dd>
-
-<dt><a id="PKCS" name="PKCS">[PKCS]</a></dt>
-<dd><q>Public Key Cryptography Standards (PKCS)</q>,
-RSA Laboratories Technical Notes, See <a href="http://www.rsasecurity.com/rsalabs/pkcs/">http://www.rsasecurity.com/rsalabs/pkcs/</a>.</dd>
-
-<dt><a id="MIME" name="MIME">[MIME]</a></dt>
-<dd>N. Freed, N. Borenstein, <q>Multipurpose Internet Mail Extensions
-(MIME) Part One: Format of Internet Message Bodies</q>, RFC2045.
-See for instance <a href="http://ietf.org/rfc/rfc2045.txt">http://ietf.org/rfc/rfc2045.txt</a>.</dd>
-
-<dt><a id="SSL2" name="SSL2">[SSL2]</a></dt>
-<dd>Kipp E.B. Hickman, <q>The SSL Protocol</q>, 1995. See <a href="http://www.netscape.com/eng/security/SSL_2.html">http://www.netscape.com/eng/security/SSL_2.html</a>.</dd>
-
-<dt><a id="SSL3" name="SSL3">[SSL3]</a></dt>
-<dd>Alan O. Freier, Philip Karlton, Paul C. Kocher, <q>The SSL Protocol
-Version 3.0</q>, 1996. See <a href="http://www.netscape.com/eng/ssl3/draft302.txt">http://www.netscape.com/eng/ssl3/draft302.txt</a>.</dd>
-
-<dt><a id="TLS1" name="TLS1">[TLS1]</a></dt>
-<dd>Tim Dierks, Christopher Allen, <q>The TLS Protocol Version 1.0</q>,
-1999. See <a href="http://ietf.org/rfc/rfc2246.txt">http://ietf.org/rfc/rfc2246.txt</a>.</dd>
-</dl>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/ssl/ssl_intro.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/ssl/ssl_intro.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/ssl/ssl_intro.xml b/docs/manual/ssl/ssl_intro.xml
deleted file mode 100644
index e2434d7a0e..0000000000
--- a/docs/manual/ssl/ssl_intro.xml
+++ /dev/null
@@ -1,668 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssl_intro.xml.meta">
-<parentdocument href="./">SSL/TLS</parentdocument>
-
- <title>SSL/TLS Strong Encryption: An Introduction</title>
-
-<summary>
-<blockquote>
-<p>The nice thing about standards is that there are so many to choose
-from. And if you really don't like all the standards you just have to
-wait another year until the one arises you are looking for.</p>
-
-<p class="cite">-- <cite>A. Tanenbaum</cite>, "Introduction to
-Computer Networks"</p>
-</blockquote>
-
-<p>As an introduction this chapter is aimed at readers who are familiar
-with the Web, HTTP, and Apache, but are not security experts. It is not
-intended to be a definitive guide to the SSL protocol, nor does it discuss
-specific techniques for managing certificates in an organization, or the
-important legal issues of patents and import and export restrictions.
-Rather, it is intended to provide a common background to mod_ssl users by
-pulling together various concepts, definitions, and examples as a starting
-point for further exploration.</p>
-
-<p>The presented content is mainly derived, with permission by the author,
-from the article <a
-href="http://home.earthlink.net/~fjhirsch/Papers/wwwj/article.html">Introducing
-SSL and Certificates using SSLeay</a> from <a
-href="http://home.earthlink.net/~fjhirsch/">Frederick J. Hirsch</a>, of The
-Open Group Research Institute, which was published in <a
-href="http://www.ora.com/catalog/wjsum97/">Web Security: A Matter of
-Trust</a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997.
-Please send any positive feedback to <a
-href="mailto:hirsch@fjhirsch.com">Frederick Hirsch</a> (the original
-article author) and all negative feedback to <a
-href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> (the
-<module>mod_ssl</module> author).</p>
-</summary>
-
-<section id="cryptographictech">
-<title>Cryptographic Techniques</title>
-<p>Understanding SSL requires an understanding of cryptographic
-algorithms, message digest functions (aka. one-way or hash functions), and
-digital signatures. These techniques are the subject of entire books (see
-for instance [<a href="#AC96">AC96</a>]) and provide the basis for privacy,
-integrity, and authentication.</p>
-
-<section id="cryptographicalgo">
-<title>Cryptographic Algorithms</title>
- <p>Suppose Alice wants to send a message to her bank to transfer some
- money. Alice would like the message to be private, since it will
- include information such as her account number and transfer amount. One
- solution is to use a cryptographic algorithm, a technique that would
- transform her message into an encrypted form, unreadable except by
- those it is intended for. Once in this form, the message may only be
- interpreted through the use of a secret key. Without the key the
- message is useless: good cryptographic algorithms make it so difficult
- for intruders to decode the original text that it isn't worth their
- effort.</p>
-
- <p>There are two categories of cryptographic algorithms: conventional
- and public key.</p>
-
- <dl>
- <dt>Conventional cryptography</dt>
- <dd>also known as symmetric cryptography, requires the sender and
- receiver to share a key: a secret piece of information that may be
- used to encrypt or decrypt a message. If this key is secret, then
- nobody other than the sender or receiver may read the message. If
- Alice and the bank know a secret key, then they may send each other
- private messages. The task of privately choosing a key before
- communicating, however, can be problematic.</dd>
-
- <dt>Public key cryptography</dt>
- <dd>also known as asymmetric cryptography, solves the key exchange
- problem by defining an algorithm which uses two keys, each of which
- may be used to encrypt a message. If one key is used to encrypt a
- message then the other must be used to decrypt it. This makes it
- possible to receive secure messages by simply publishing one key
- (the public key) and keeping the other secret (the private key).</dd>
- </dl>
-
- <p>Anyone may encrypt a message using the public key, but only the
- owner of the private key will be able to read it. In this way, Alice
- may send private messages to the owner of a key-pair (the bank), by
- encrypting it using their public key. Only the bank will be able to
- decrypt it.</p>
-</section>
-
-<section id="messagedigests">
-<title>Message Digests</title>
- <p>Although Alice may encrypt her message to make it private, there
- is still a concern that someone might modify her original message or
- substitute it with a different one, in order to transfer the money
- to themselves, for instance. One way of guaranteeing the integrity
- of Alice's message is to create a concise summary of her message and
- send this to the bank as well. Upon receipt of the message, the bank
- creates its own summary and compares it with the one Alice sent. If
- they agree then the message was received intact.</p>
-
- <p>A summary such as this is called a <dfn>message digest</dfn>, <em>one-way
-function</em> or <em>hash function</em>. Message digests are used to create
-short, fixed-length representations of longer, variable-length messages.
-Digest algorithms are designed to produce unique digests for different
-messages. Message digests are designed to make it too difficult to determine
-the message from the digest, and also impossible to find two different
-messages which create the same digest -- thus eliminating the possibility of
-substituting one message for another while maintaining the same digest.</p>
-<p>Another challenge that Alice faces is finding a way to send the digest to the
-bank securely; when this is achieved, the integrity of the associated message
-is assured. One way to do this is to include the digest in a digital
-signature.</p>
-</section>
-
-<section id="digitalsignatures"><title>Digital Signatures</title>
-<p>When Alice sends a message to the bank, the bank needs to ensure that the
-message is really from her, so an intruder does not request a transaction
-involving her account. A <em>digital signature</em>, created by Alice and
-included with the message, serves this purpose.</p>
-
-<p>Digital signatures are created by encrypting a digest of the message,
-and other information (such as a sequence number) with the sender's
-private key. Though anyone may <em>decrypt</em> the signature using the public
-key, only the signer knows the private key. This means that only they may
-have signed it. Including the digest in the signature means the signature is
-only good for that message; it also ensures the integrity of the message since
-no one can change the digest and still sign it.</p>
-<p>To guard against interception and reuse of the signature by an intruder at a
-later date, the signature contains a unique sequence number. This protects
-the bank from a fraudulent claim from Alice that she did not send the message
--- only she could have signed it (non-repudiation).</p>
-</section>
-</section>
-<!-- /cryptographictech -->
-
-<section id="certificates">
-<title>Certificates</title>
-<p>Although Alice could have sent a private message to the bank, signed
-it, and ensured the integrity of the message, she still needs to be sure
-that she is really communicating with the bank. This means that she needs
-to be sure that the public key she is using corresponds to the bank's
-private key. Similarly, the bank also needs to verify that the message
-signature really corresponds to Alice's signature.</p>
-
-<p>If each party has a certificate which validates the other's identity,
-confirms the public key, and is signed by a trusted agency, then they both
-will be assured that they are communicating with whom they think they are.
-Such a trusted agency is called a <em>Certificate Authority</em>, and
-certificates are used for authentication.</p>
-
-<section id="certificatecontents">
-<title>Certificate Contents</title>
- <p>A certificate associates a public key with the real identity of
- an individual, server, or other entity, known as the subject. As
- shown in <a href="#table1">Table 1</a>, information about the subject
- includes identifying information (the distinguished name), and the
- public key. It also includes the identification and signature of the
- Certificate Authority that issued the certificate, and the period of
- time during which the certificate is valid. It may have additional
- information (or extensions) as well as administrative information
- for the Certificate Authority's use, such as a serial number.</p>
-
- <section id="table1">
- <title>Table 1: Certificate Information</title>
- <table>
- <columnspec><column width=".35"/><column width=".35"/>
- </columnspec>
- <tr><th>Subject</th>
- <td>Distinguished Name, Public Key</td></tr>
- <tr><th>Issuer</th>
- <td>Distinguished Name, Signature</td></tr>
- <tr><th>Period of Validity</th>
- <td>Not Before Date, Not After Date</td></tr>
- <tr><th>Administrative Information</th>
- <td>Version, Serial Number</td></tr>
- <tr><th>Extended Information</th>
- <td>Basic Constraints, Netscape Flags, etc.</td></tr>
- </table>
- </section>
-
- <p>A distinguished name is used to provide an identity in a specific
- context -- for instance, an individual might have a personal
- certificate as well as one for their identity as an employee.
- Distinguished names are defined by the X.509 standard [<a
- href="#X509">X509</a>], which defines the fields, field names, and
- abbreviations used to refer to the fields (see <a href="#table2">Table
- 2</a>).</p>
-
- <section id="table2">
- <title>Table 2: Distinguished Name Information</title>
- <table border="1">
- <columnspec><column width=".25"/><column width=".15"/>
- <column width=".3"/><column width=".25"/></columnspec>
- <tr><th>DN Field</th>
- <th>Abbrev.</th>
- <th>Description</th>
- <th>Example</th></tr>
- <tr><td>Common Name</td>
- <td>CN</td>
- <td>Name being certified</td>
- <td>CN=Joe Average</td></tr>
- <tr><td>Organization or Company</td>
- <td>O</td>
- <td>Name is associated with this<br />organization</td>
- <td>O=Snake Oil, Ltd.</td></tr>
- <tr><td>Organizational Unit</td>
- <td>OU</td>
- <td>Name is associated with this <br />organization unit, such
- as a department</td>
- <td>OU=Research Institute</td></tr>
- <tr><td>City/Locality</td>
- <td>L</td>
- <td>Name is located in this City</td>
- <td>L=Snake City</td></tr>
- <tr><td>State/Province</td>
- <td>ST</td>
- <td>Name is located in this State/Province</td>
- <td>ST=Desert</td></tr>
- <tr><td>Country</td>
- <td>C</td>
- <td>Name is located in this Country (ISO code)</td>
- <td>C=XZ</td></tr>
- </table>
- </section>
-
- <p>A Certificate Authority may define a policy specifying which
- distinguished field names are optional, and which are required. It
- may also place requirements upon the field contents, as may users of
- certificates. As an example, a Netscape browser requires that the
- Common Name for a certificate representing a server has a name which
- matches a wildcard pattern for the domain name of that server, such
- as <code>*.snakeoil.com</code>.</p>
-
- <p>The binary format of a certificate is defined using the ASN.1
- notation [<a href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>]. This
- notation defines how to specify the contents, and encoding rules
- define how this information is translated into binary form. The binary
- encoding of the certificate is defined using Distinguished Encoding
- Rules (DER), which are based on the more general Basic Encoding Rules
- (BER). For those transmissions which cannot handle binary, the binary
- form may be translated into an ASCII form by using Base64 encoding
- [<a href="#MIME">MIME</a>]. This encoded version is called PEM encoded
- (the name comes from "Privacy Enhanced Mail"), when placed between
- begin and end delimiter lines as illustrated in the following
- example.</p>
-
- <example>
- <title>Example of a PEM-encoded certificate (snakeoil.crt)</title>
- <pre>-----BEGIN CERTIFICATE-----
-MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
-FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
-A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
-cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
-bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
-MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
-a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
-cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
-AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
-vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
-lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
-HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
-gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
-2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
-dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
------END CERTIFICATE-----</pre>
- </example>
-</section>
-
-<section id="certificateauthorities">
-<title>Certificate Authorities</title>
- <p>By first verifying the information in a certificate request
- before granting the certificate, the Certificate Authority assures
- the identity of the private key owner of a key-pair. For instance,
- if Alice requests a personal certificate, the Certificate Authority
- must first make sure that Alice really is the person the certificate
- request claims.</p>
-
- <section id="certificatechains">
- <title>Certificate Chains</title>
- <p>A Certificate Authority may also issue a certificate for
- another Certificate Authority. When examining a certificate,
- Alice may need to examine the certificate of the issuer, for each
- parent Certificate Authority, until reaching one which she has
- confidence in. She may decide to trust only certificates with a
- limited chain of issuers, to reduce her risk of a "bad" certificate
- in the chain.</p>
- </section>
-
- <section id="rootlevelca">
- <title>Creating a Root-Level CA</title>
- <p>As noted earlier, each certificate requires an issuer to assert
- the validity of the identity of the certificate subject, up to
- the top-level Certificate Authority (CA). This presents a problem:
- Since this is who vouches for the certificate of the top-level
- authority, which has no issuer? In this unique case, the
- certificate is "self-signed", so the issuer of the certificate is
- the same as the subject. As a result, one must exercise extra care
- in trusting a self-signed certificate. The wide publication of a
- public key by the root authority reduces the risk in trusting this
- key -- it would be obvious if someone else publicized a key
- claiming to be the authority. Browsers are preconfigured to trust
- well-known certificate authorities.</p>
-
- <p>A number of companies, such as <a href="http://www.thawte.com/"
- >Thawte</a> and <a href="http://www.verisign.com/">VeriSign</a>
- have established themselves as Certificate Authorities. These
- companies provide the following services:</p>
-
- <ul>
- <li>Verifying certificate requests</li>
- <li>Processing certificate requests</li>
- <li>Issuing and managing certificates</li>
- </ul>
-
- <p>It is also possible to create your own Certificate Authority.
- Although risky in the Internet environment, it may be useful
- within an Intranet where the organization can easily verify the
- identities of individuals and servers.</p>
- </section>
-
- <section id="certificatemanagement">
- <title>Certificate Management</title>
- <p>Establishing a Certificate Authority is a responsibility which
- requires a solid administrative, technical, and management
- framework. Certificate Authorities not only issue certificates,
- they also manage them -- that is, they determine how long
- certificates are valid, they renew them, and they keep lists of
- certificates that have already been issued but are no longer valid
- (Certificate Revocation Lists, or CRLs). Say Alice is entitled to
- a certificate as an employee of a company. Say too, that the
- certificate needs to be revoked when Alice leaves the company. Since
- certificates are objects that get passed around, it is impossible
- to tell from the certificate alone that it has been revoked. When
- examining certificates for validity, therefore, it is necessary to
- contact the issuing Certificate Authority to check CRLs -- this
- is not usually an automated part of the process.</p>
-
- <note><title>Note</title>
- <p>If you use a Certificate Authority that is not configured into
- browsers by default, it is necessary to load the Certificate
- Authority certificate into the browser, enabling the browser to
- validate server certificates signed by that Certificate Authority.
- Doing so may be dangerous, since once loaded, the browser will
- accept all certificates signed by that Certificate Authority.</p>
- </note>
- </section>
-</section>
-<!-- /certificateauthorities -->
-</section>
-<!-- /certificates -->
-
-<section id="ssl">
-<title>Secure Sockets Layer (SSL)</title>
-<p>The Secure Sockets Layer protocol is a protocol layer which may be
-placed between a reliable connection-oriented network layer protocol
-(e.g. TCP/IP) and the application protocol layer (e.g. HTTP). SSL provides
-for secure communication between client and server by allowing mutual
-authentication, the use of digital signatures for integrity, and encryption
-for privacy.</p>
-
-<p>The protocol is designed to support a range of choices for specific
-algorithms used for cryptography, digests, and signatures. This allows
-algorithm selection for specific servers to be made based on legal, export
-or other concerns, and also enables the protocol to take advantage of new
-algorithms. Choices are negotiated between client and server at the start
-of establishing a protocol session.</p>
-
-<section id="table4">
-<title>Table 4: Versions of the SSL protocol</title>
- <table border="1">
- <columnspec><column width=".15"/><column width=".2"/>
- <column width=".30"/><column width=".25"/></columnspec>
- <tr><th>Version</th>
- <th>Source</th>
- <th>Description</th>
- <th>Browser Support</th></tr>
- <tr><td>SSL v2.0</td>
- <td>Vendor Standard (from Netscape Corp.) [<a href="#SSL2"
- >SSL2</a>]</td>
- <td>First SSL protocol for which implementations exists</td>
- <td>- NS Navigator 1.x/2.x<br />
- - MS IE 3.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>SSL v3.0</td>
- <td>Expired Internet Draft (from Netscape Corp.) [<a href="#SSL3"
- >SSL3</a>]</td>
- <td>Revisions to prevent specific security attacks, add non-RSA
- ciphers, and support for certificate chains</td>
- <td>- NS Navigator 2.x/3.x/4.x<br />
- - MS IE 3.x/4.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>TLS v1.0</td>
- <td>Proposed Internet Standard (from IETF) [<a href="#TLS1"
- >TLS1</a>]</td>
- <td>Revision of SSL 3.0 to update the MAC layer to HMAC, add block
- padding for block ciphers, message order standardization and more
- alert messages.</td>
- <td>- Lynx/2.8+OpenSSL</td></tr>
- </table>
-</section>
-
-<p>There are a number of versions of the SSL protocol, as shown in
-<a href="#table4">Table 4</a>. As noted there, one of the benefits in
-SSL 3.0 is that it adds support of certificate chain loading. This feature
-allows a server to pass a server certificate along with issuer certificates
-to the browser. Chain loading also permits the browser to validate the
-server certificate, even if Certificate Authority certificates are not
-installed for the intermediate issuers, since they are included in the
-certificate chain. SSL 3.0 is the basis for the Transport Layer Security
-[<a href="#TLS1">TLS</a>] protocol standard, currently in development by
-the Internet Engineering Task Force (IETF).</p>
-
-<section id="session">
-<title>Session Establishment</title>
- <p>The SSL session is established by following a handshake sequence
- between client and server, as shown in <a href="#figure1"
- >Figure 1</a>. This sequence may vary, depending on whether the server
- is configured to provide a server certificate or request a client
- certificate. Though cases exist where additional handshake steps
- are required for management of cipher information, this article
- summarizes one common scenario: see the SSL specification for the full
- range of possibilities.</p>
-
- <note><title>Note</title>
- <p>Once an SSL session has been established it may be reused, thus
- avoiding the performance penalty of repeating the many steps needed
- to start a session. For this the server assigns each SSL session a
- unique session identifier which is cached in the server and which the
- client can use on forthcoming connections to reduce the handshake
- (until the session identifer expires in the cache of the server).</p>
- </note>
-
- <p class="figure">
- <img src="ssl_intro_fig1.gif" alt="" width="423" height="327" /><br />
- <a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Simplified SSL
- Handshake Sequence</p>
-
- <p>The elements of the handshake sequence, as used by the client and
- server, are listed below:</p>
-
- <ol>
- <li>Negotiate the Cipher Suite to be used during data transfer</li>
- <li>Establish and share a session key between client and server</li>
- <li>Optionally authenticate the server to the client</li>
- <li>Optionally authenticate the client to the server</li>
- </ol>
-
- <p>The first step, Cipher Suite Negotiation, allows the client and
- server to choose a Cipher Suite supportable by both of them. The SSL3.0
- protocol specification defines 31 Cipher Suites. A Cipher Suite is
- defined by the following components:</p>
-
- <ul>
- <li>Key Exchange Method</li>
- <li>Cipher for Data Transfer</li>
- <li>Message Digest for creating the Message Authentication Code (MAC)</li>
- </ul>
-
- <p>These three elements are described in the sections that follow.</p>
-</section>
-
-<section id="keyexchange">
-<title>Key Exchange Method</title>
- <p>The key exchange method defines how the shared secret symmetric
- cryptography key used for application data transfer will be agreed
- upon by client and server. SSL 2.0 uses RSA key exchange only, while
- SSL 3.0 supports a choice of key exchange algorithms including the
- RSA key exchange when certificates are used, and Diffie-Hellman key
- exchange for exchanging keys without certificates and without prior
- communication between client and server.</p>
-
- <p>One variable in the choice of key exchange methods is digital
- signatures -- whether or not to use them, and if so, what kind of
- signatures to use. Signing with a private key provides assurance
- against a man-in-the-middle-attack during the information exchange
- used in generating the shared key [<a href="#AC96">AC96</a>, p516].</p>
-</section>
-
-<section id="ciphertransfer">
-<title>Cipher for Data Transfer</title>
- <p>SSL uses the conventional cryptography algorithm (symmetric
- cryptography) described earlier for encrypting messages in a session.
- There are nine choices, including the choice to perform no
- encryption:</p>
-
- <ul>
- <li>No encryption</li>
- <li>Stream Ciphers
- <ul>
- <li>RC4 with 40-bit keys</li>
- <li>RC4 with 128-bit keys</li>
- </ul></li>
- <li>CBC Block Ciphers
- <ul><li>RC2 with 40 bit key</li>
- <li>DES with 40 bit key</li>
- <li>DES with 56 bit key</li>
- <li>Triple-DES with 168 bit key</li>
- <li>Idea (128 bit key)</li>
- <li>Fortezza (96 bit key)</li>
- </ul></li>
- </ul>
-
- <p>Here "CBC" refers to Cipher Block Chaining, which means that a
- portion of the previously encrypted cipher text is used in the
- encryption of the current block. "DES" refers to the Data Encryption
- Standard [<a href="#AC96">AC96</a>, ch12], which has a number of
- variants (including DES40 and 3DES_EDE). "Idea" is one of the best
- and cryptographically strongest available algorithms, and "RC2" is
- a proprietary algorithm from RSA DSI [<a href="#AC96">AC96</a>,
- ch13].</p>
-</section>
-
-<section id="digestfuntion">
-<title>Digest Function</title>
- <p>The choice of digest function determines how a digest is created
- from a record unit. SSL supports the following:</p>
-
- <ul>
- <li>No digest (Null choice)</li>
- <li>MD5, a 128-bit hash</li>
- <li>Secure Hash Algorithm (SHA-1), a 160-bit hash</li>
- </ul>
-
- <p>The message digest is used to create a Message Authentication Code
- (MAC) which is encrypted with the message to provide integrity and to
- prevent against replay attacks.</p>
-</section>
-
-<section id="handshake">
-<title>Handshake Sequence Protocol</title>
- <p>The handshake sequence uses three protocols:</p>
-
- <ul>
- <li>The <dfn>SSL Handshake Protocol</dfn>
- for performing the client and server SSL session establishment.</li>
- <li>The <dfn>SSL Change Cipher Spec Protocol</dfn> for actually
- establishing agreement on the Cipher Suite for the session.</li>
- <li>The <dfn>SSL Alert Protocol</dfn> for conveying SSL error
- messages between client and server.</li>
- </ul>
-
- <p>These protocols, as well as application protocol data, are
- encapsulated in the <dfn>SSL Record Protocol</dfn>, as shown in
- <a href="#figure2">Figure 2</a>. An encapsulated protocol is
- transferred as data by the lower layer protocol, which does not
- examine the data. The encapsulated protocol has no knowledge of the
- underlying protocol.</p>
-
- <p class="figure">
- <img src="ssl_intro_fig2.gif" alt="" width="428" height="217" /><br />
- <a id="figure2" name="figure2"><dfn>Figure 2</dfn></a>: SSL Protocol Stack
- </p>
-
- <p>The encapsulation of SSL control protocols by the record protocol
- means that if an active session is renegotiated the control protocols
- will be transmitted securely. If there were no session before, then
- the Null cipher suite is used, which means there is no encryption and
- messages have no integrity digests until the session has been
- established.</p>
-</section>
-
-<section id="datatransfer">
-<title>Data Transfer</title>
- <p>The SSL Record Protocol, shown in <a href="#figure3">Figure 3</a>,
- is used to transfer application and SSL Control data between the
- client and server, possibly fragmenting this data into smaller units,
- or combining multiple higher level protocol data messages into single
- units. It may compress, attach digest signatures, and encrypt these
- units before transmitting them using the underlying reliable transport
- protocol (Note: currently all major SSL implementations lack support
- for compression).</p>
-
- <p class="figure">
- <img src="ssl_intro_fig3.gif" alt="" width="423" height="323" /><br />
- <a id="figure3" name="figure3"><dfn>Figure 3</dfn></a>: SSL Record Protocol
- </p>
-</section>
-
-<section id="securehttp">
-<title>Securing HTTP Communication</title>
- <p>One common use of SSL is to secure Web HTTP communication between
- a browser and a webserver. This case does not preclude the use of
- non-secured HTTP. The secure version is mainly plain HTTP over SSL
- (named HTTPS), but with one major difference: it uses the URL scheme
- <code>https</code> rather than <code>http</code> and a different
- server port (by default 443). This mainly is what <module
- >mod_ssl</module> provides to you for the Apache webserver...</p>
-</section>
-</section>
-<!-- /ssl -->
-
-<section id="references">
-<title>References</title>
-<dl>
-<dt><a id="AC96" name="AC96">[AC96]</a></dt>
-<dd>Bruce Schneier, <q>Applied Cryptography</q>, 2nd Edition, Wiley,
-1996. See <a href="http://www.counterpane.com/"
->http://www.counterpane.com/</a> for various other materials by Bruce
-Schneier.</dd>
-
-<dt><a id="X208" name="X208">[X208]</a></dt>
-<dd>ITU-T Recommendation X.208, <q>Specification of Abstract Syntax Notation
-One (ASN.1)</q>, 1988. See for instance <a
-href="http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I"
->http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I</a>.
-</dd>
-
-<dt><a id="X509" name="X509">[X509]</a></dt>
-<dd>ITU-T Recommendation X.509, <q>The Directory - Authentication
-Framework</q>. See for instance <a
-href="http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509"
->http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509</a>.
-</dd>
-
-<dt><a id="PKCS" name="PKCS">[PKCS]</a></dt>
-<dd><q>Public Key Cryptography Standards (PKCS)</q>,
-RSA Laboratories Technical Notes, See <a
-href="http://www.rsasecurity.com/rsalabs/pkcs/"
->http://www.rsasecurity.com/rsalabs/pkcs/</a>.</dd>
-
-<dt><a id="MIME" name="MIME">[MIME]</a></dt>
-<dd>N. Freed, N. Borenstein, <q>Multipurpose Internet Mail Extensions
-(MIME) Part One: Format of Internet Message Bodies</q>, RFC2045.
-See for instance <a href="http://ietf.org/rfc/rfc2045.txt"
->http://ietf.org/rfc/rfc2045.txt</a>.</dd>
-
-<dt><a id="SSL2" name="SSL2">[SSL2]</a></dt>
-<dd>Kipp E.B. Hickman, <q>The SSL Protocol</q>, 1995. See <a
-href="http://www.netscape.com/eng/security/SSL_2.html"
->http://www.netscape.com/eng/security/SSL_2.html</a>.</dd>
-
-<dt><a id="SSL3" name="SSL3">[SSL3]</a></dt>
-<dd>Alan O. Freier, Philip Karlton, Paul C. Kocher, <q>The SSL Protocol
-Version 3.0</q>, 1996. See <a
-href="http://www.netscape.com/eng/ssl3/draft302.txt"
->http://www.netscape.com/eng/ssl3/draft302.txt</a>.</dd>
-
-<dt><a id="TLS1" name="TLS1">[TLS1]</a></dt>
-<dd>Tim Dierks, Christopher Allen, <q>The TLS Protocol Version 1.0</q>,
-1999. See <a href="http://ietf.org/rfc/rfc2246.txt"
->http://ietf.org/rfc/rfc2246.txt</a>.</dd>
-</dl>
-</section>
-<!-- /references -->
-
-</manualpage>
diff --git a/docs/manual/ssl/ssl_intro.xml.ja b/docs/manual/ssl/ssl_intro.xml.ja
deleted file mode 100644
index d39bb73d55..0000000000
--- a/docs/manual/ssl/ssl_intro.xml.ja
+++ /dev/null
@@ -1,722 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.10 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ssl_intro.xml.meta">
-<parentdocument href="./">SSL/TLS</parentdocument>
-
- <title>SSL/TLS $B0E9f2=(B: $B$O$8$a$K(B</title>
-
-<summary>
-<blockquote>
-<p>$BI8=`5,3J$NNI$$=j$O!"$?$/$5$s$N5,3J$+$iA*$Y$k$H$$$&$3$H$@!#(B
-$B$=$7$F!"$b$7K\Ev$K$I$N5,3J$b5$$KF~$i$J$1$l$P!"(B
-$B0lG/BT$D$@$1$GC5$7$F$$$?5,3J$,8=$l$k!#(B</p>
-
-<p class="cite">-- <cite>A. Tanenbaum</cite>, "Introduction to
-Computer Networks"</p>
-</blockquote>
-
-<p>
-$BF~Lg$H$$$&$3$H$G!"$3$N>O$O(B Web$B!"(BHTTP$B!"(BApache $B$KDL$8$F$$$k(B
-$BFI<T8~$1$G$9$,!"%;%-%e%j%F%#@lLg2H8~$1$G$O$"$j$^$;$s!#(B
-SSL $B%W%m%H%3%k$N7hDjE*$J<j0z$-$G$"$k$D$b$j$O$"$j$^$;$s!#(B
-$B$^$?!"AH?%Fb$NG'>Z4IM}$N$?$a$NFCDj$N%F%/%K%C%/$d!"(B
-$BFC5v$dM"=P5,@)$J$I$N=EMW$JK!E*$JLdBj$K$D$$$F$b07$$$^$;$s!#(B
-$B$`$7$m!"99$J$k8&5f$X$N=PH/E@$H$7$F?'!9$J35G0!"Dj5A!"Nc$rJB$Y$k$3$H$G(B
- mod_ssl $B$N%f!<%6$K4pACCN<1$rDs6!$9$k;v$rL\E*$H$7$F$$$^$9!#(B</p>
-
-<p>$B$3$3$K<($5$l$?FbMF$O<g$K!"86Cx<T$N5v2D$N2<(B
-The Open Group Research Institute $B$N(B <a
-href="http://home.earthlink.net/~fjhirsch/">Frederick J. Hirsch</a>
- $B;a$N5-;v(B <a
-href="http://home.earthlink.net/~fjhirsch/Papers/wwwj/article.html">
-Introducing SSL and Certificates using SSLeay</a> $B$r4p$K$7$F$$$^$9!#(B
-$B;a$N5-;v$O(B <a
-href="http://www.ora.com/catalog/wjsum97/">Web Security: A Matter of
-Trust</a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997
-$B$K7G:\$5$l$^$7$?!#(B
-$B9NDjE*$J0U8+$O(B <a
-href="mailto:hirsch@fjhirsch.com">Frederick Hirsch</a> $B;a(B
- ($B855-;v$NCx<T(B) $B$XA4$F$N6l>p$O(B <a
-href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> (
-<module>mod_ssl</module> $B$N:n<T(B) $B$X$*4j$$$7$^$9!#(B
-[$BLuCm(B: $BLu$K$D$$$F$O(B <a
-href="mailto:apache-docs@ml.apache.or.jp">
-Apache $B%I%-%e%a%s%HK]Lu%W%m%8%'%/%H(B</a>
-$B$X$*4j$$$7$^$9!#(B]</p>
-</summary>
-
-<section id="cryptographictech">
-<title>$B0E9f2=5;=Q(B</title>
-<p>SSL $B$rM}2r$9$k$K$O!"0E9f%"%k%4%j%:%`!"(B
-$B%a%C%;!<%8%@%$%8%'%9%H4X?t(B($BJLL>(B: $B0lJ}8~4X?t!"%O%C%7%e4X?t(B)$B!"(B
-$BEE;R=pL>$J$I$X$NM}2r$,I,MW$G$9!#(B
-$B$3$l$i$N5;=Q$OK\$,4]$4$HI,MW$JBjL\$G(B
-($BNc$($P(B [<a href="#AC96">AC96</a>] $B$r;2>H(B)$B!"(B
-$B%W%i%$%P%7!<!"?.MQ!"G'>Z$J$I$N5;=Q$N4pAC$H$J$C$F$$$^$9!#(B</p>
-
-<section id="cryptographicalgo">
-<title>$B0E9f%"%k%4%j%:%`(B</title>
- <p>$BNc$($P!"%"%j%9$,Aw6b$N$?$a$K6d9T$K%a%C%;!<%8$rAw$j$?$$$H$7$^$9!#(B
- $B8}:BHV9f$dAw6b$N6b3[$,4^$^$l$k$?$a!"(B
- $B%"%j%9$O$=$N%a%C%;!<%8$rHkL)$K$7$?$$$H;W$$$^$9!#(B
- $B2r7hJ}K!$N0l$D$O0E9f%"%k%4%j%:%`$r;H$C$F!"%a%C%;!<%8$r(B
- $BFI$^$;$?$$?M0J30$OFI$`$3$H$,$G$-$J$$0E9f2=$5$l$?(B
- $B7ABV$KJQ$($F$7$^$&$3$H$G$9!#(B
- $B$=$N7ABV$K$J$k$H!"(B
- $B%a%C%;!<%8$OHkL)$N80$K$h$C$F$N$_2r<a$9$k$3$H$,$G$-$^$9!#(B
- $B80$J$7$G$O!"%a%C%;!<%8$OLr$KN)$A$^$;$s!#(B
- $BNI$$0E9f%"%k%4%j%:%`$O!"?/F~<T$,85$N%F%-%9%H$r2rFI$9$k$3$H$r(B
- $BHs>o$KFq$7$/$9$k$?$a!"EXNO$,3d$K9g$o$J$/$5$;$^$9!#(B</p>
-
- <p>$B0E9f%"%k%4%j%:%`$K$O(B
- $B=>Mh7?$H8x3+80$NFs$D$N<oN`$,$"$j$^$9!#(B</p>
-
- <dl>
- <dt>$B=>Mh7?0E9f(B</dt>
- <dd>$BBP>N0E9f$H$7$F$bCN$i$l!"(B
- $BAw?.<T$H<u?.<T$,80$r6&M-$9$k$3$H$,I,MW$G$9!#(B
- $B80$H$O!"%a%C%;!<%8$r0E9f2=$7$?$jI|9f$9$k$N$K;H$o$l$kHkL)(B
- $B$N>pJs$N$3$H$G$9!#(B
- $B$b$7!"$3$N80$,HkL)$J$i!"Aw?.<T$H<u?.<T0J30$OC/$b%a%C%;!<%8$rFI(B
- $B$`$3$H$,$G$-$^$;$s!#(B
- $B$b$7$b!"%"%j%9$H6d9T$,HkL)$N80$rCN$C$F$$$k$J$i!"(B
- $BH`$i$O$*8_$$$KHkL)$N%a%C%;!<%8$rAw$k$3$H$,$G$-$k$G$7$g$&!#(B
- $B$?$@$7!";vA0$KFbL)$K80$rA*$V$H$$$&;E;v$OLdBj$r4^$s$G$$$^$9!#(B</dd>
-
- <dt>$B8x3+800E9f(B</dt>
- <dd>$BHsBP>N0E9f$H$7$F$bCN$i$l!"(B
- $B%a%C%;!<%8$r0E9f2=$9$k$3$H$N$G$-$kFs$D$N80(B
- $B$r;HMQ$9$k%"%k%4%j%:%`$rDj5A$9$k$3$H$G80$N$d$j<h$j$NLdBj$r2r7h(B
- $B$7$^$9!#(B
- $B$b$7!"$"$k80$,0E9f2=$K;H$o$l$?$J$i!"(B
- $B$b$&JRJ}$N80$GI|9f$7$J$1$l$P$$$1$^$;$s!#(B
- $B$3$NJ}<0$K$h$C$F!"0l$D$N80$r8xI=$7$F(B($B8x3+80(B)$B!"(B
- $B$b$&JRJ}$rHkL)$K$7$F$*$/(B($BHkL)80(B)$B$@$1$G!"(B
- $B0BA4$J%a%C%;!<%8$r<u$1<h$k$3$H$,$G$-$^$9!#(B</dd>
- </dl>
-
- <p>$BC/$b$,0E9f2=$5$l$?%a%C%;!<%8$r8x3+80$K$h$C$F0E9f2=(B
- $B$9$k$3$H$,$G$-$^$9$,!"HkL)80$N;}$A<g$@$1$,$=$l$rFI$`$3$H$,(B
- $B$G$-$^$9!#(B
- $B$3$NJ}K!$G!"6d9T$N8x3+80$r;H$C$F0E9f2=$9$k$3$H$G!"(B
- $B%"%j%9$OHkL)$N%a%C%;!<%8$rAw$k$3$H$,$G$-$^$9!#(B
- $B6d9T$N$_$,I|9f$9$k$3$H$,$G$-$^$9!#(B</p>
-</section>
-
-<section id="messagedigests">
-<title>$B%a%C%;!<%8%@%$%8%'%9%H(B</title>
- <p>$B%"%j%9$O%a%C%;!<%8$rHkL)$K$9$k$3$H$,$G$-$^$9$,!"(B
- $BC/$+$,Nc$($P<+J,$KAw6b$9$k$h$&$K%a%C%;!<%8$rJQ99$7$?$j!"(B
- $BJL$N$b$N$KCV$-49$($F$7$^$&$+$b$7$l$J$$$H$$$&LdBj$,$"$j$^$9!#(B
- $B%"%j%9$N%a%C%;!<%8$N?.MQ$rJ]>Z$9$kJ}K!$N0l$D$O!"(B
- $B%a%C%;!<%8$N4J7i$J%@%$%8%'%9%H$r:n$C$F!"$=$l$b6d9T$KAw$k$H$$$&$b$N$G$9!#(B
- $B%a%C%;!<%8$r<u$1<h$k$H6d9T$b%@%$%8%'%9%H$r:n@.$7!"(B
- $B%"%j%9$,Aw$C$?$b$N$HHf$Y$^$9!#$b$70lCW$7$?$J$i!"(B
- $B<u$1<h$C$?%a%C%;!<%8$OL5=}$@$H$$$&$3$H$K$J$j$^$9!#(B</p>
-
- <p>$B$3$N$h$&$JMWLs$O(B<dfn>$B%a%C%;!<%8%@%$%8%'%9%H(B</dfn>$B!"(B
- <em>$B0lJ}9T4X?t(B</em>$B!"$^$?$O(B<em>$B%O%C%7%e4X?t(B</em>$B$H8F$P$l$^$9!#(B
- $B%a%C%;!<%8%@%$%8%'%9%H$OD9$$2DJQD9$N%a%C%;!<%8$+$i(B
- $BC;$$8GDjD9$NI=8=$r:n$k$N$K;H$o$l$^$9!#(B
- $B%@%$%8%'%9%H%"%k%4%j%:%`$O%a%C%;!<%8$+$i(B
- $B0l0U$J%@%$%8%'%9%H$r@8@.$9$k$h$&$K:n$i$l$F$$$^$9!#(B
- $B%a%C%;!<%8%@%$%8%'%9%H$O%@%$%8%'%9%H$+$i85$N%a%C%;!<%8$r(B
- $BH=Dj$9$k$N$,$H$F$bFq$7$$$h$&$K$G$-$F$$$^$9!#(B
- $B$^$?!"F1$8MWLs$r:n@.$9$kFs$D$N%a%C%;!<%8$rC5$9$N$OIT2DG=$G$9!#(B
- $B$h$C$F!"F1$8MWLs$r;H$C$F%a%C%;!<%8$rCV$-49$($k$H$$$&(B
- $B2DG=@-$rGS=|$7$F$$$^$9!#(B</p>
-
-<p>$B%"%j%9$X$N$b$&0l$D$NLdBj$O!"$3$N%@%$%8%'%9%H$r0BA4$KAw$kJ}K!$rC5$9$3$H$G$9!#(B
-$B$3$l$,$G$-$l$P!"%a%C%;!<%8$N?.MQ$,J]>Z$5$l$^$9!#(B
-$B0l$D$NJ}K!$O$3$N%@%$%8%'%9%H$KEE;R=pL>$r4^$`$3$H$G$9!#(B</p>
-</section>
-
-<section id="digitalsignatures"><title>$BEE;R=pL>(B</title>
-<p>$B%"%j%9$,6d9T$K%a%C%;!<%8$rAw$C$?$H$-!"6d9T$O!"(B
-$B?/F~<T$,H`=w$K$J$j$9$^$7$FH`=w$N8}:B$X$N<h0z$r?=@A$7$F$$$J$$$+!"(B
-$B%a%C%;!<%8$,K\Ev$KH`=w$+$i$N$b$N$+3N<B$KJ,$+$i$J$1$l$P$$$1$^$;$s!#(B
-$B%"%j%9$K$h$C$F:n@.$5$l!"%a%C%;!<%8$K4^$^$l$?(B
-<em>$BEE;R=pL>(B</em>$B$,$3$3$GLr$KN)$A$^$9!#(B</p>
-
-<p>$BEE;R=pL>$O%a%C%;!<%8$N%@%$%8%'%9%H$d$=$NB>$N>pJs(B($B=hM}HV9f$J$I(B)$B$r(B
-$BAw?.<T$NHkL)80$G0E9f2=$9$k$3$H$G:n$i$l$^$9!#(B
-$BC/$b$,8x3+80$r;H$C$F=pL>$r(B<em>$BI|9f(B</em>$B$9$k$3$H$,$G$-$^$9$,!"(B
-$B=pL><T$N$_$,HkL)80$rCN$C$F$$$^$9!#(B
-$B$3$l$O!"H`$i$N$_$,=pL>$7$($?$3$H$r0UL#$7$^$9!#(B
-$B%@%$%8%'%9%H$rEE;R=pL>$K4^$`$3$H$O!"(B
-$B$=$N=pL>$,$=$N%a%C%;!<%8$N$_$KM-8z$G$"$k$3$H$r0UL#$7$^$9!#(B
-$B$3$l$O!"C/$b%@%$%8%'%9%H$rJQ$($F=pL>$r$9$k$3$H$,$G$-$J$$$?$a!"(B
-$B%a%C%;!<%8$N?.MQ$bJ]>Z$7$^$9!#(B</p>
-
-<p>$B?/F~<T$,=pL>$rK5<u$7$F8eF|$K:FMxMQ$9$k$N$rKI$0$?$a(B
-$BEE;R=pL>$K$O0l0U$J=hM}HV9f$,4^$^$l$^$9!#(B
-$B$3$l$O!"%"%j%9$,$=$s$J%a%C%;!<%8$OAw$C$F$$$J$$$H8@$&:>5=(B
-$B$+$i6d9T$r<i$j$^$9!#(B
-$BH`=w$@$1$,=pL>$7$($?$+$i$G$9!#(B($BH]G'KI;_(B)</p>
-</section>
-</section>
-<!-- /cryptographictech -->
-
-<section id="certificates">
-<title>$B>ZL@=q(B</title>
-<p>$B%"%j%9$OHkL)$N%a%C%;!<%8$r6d9T$KAw$j!"(B
-$B=pL>$r$7$F!"%a%C%;!<%8$N?.MQ$rJ]>Z$9$k$3$H$,$G$-$k$*$&$K$J$j$^$7$?$,!"(B
-$BDL?.$7$F$$$kAj<j$,K\Ev$K6d9T$J$N$+3N$+$a$J$/$F$O$$$1$^$;$s!#(B
-$B$3$l$O!"H`=w$,;H$&8x3+80$,6d9T$NHkL)80$HBP$K$J$C$F$$$k$b$N$+!"(B
-$BH`=w$O3N$+$a$J$/$F$O$$$1$J$$$H$$$&$3$H$r0UL#$7$^$9!#(B
-$BF1MM$K!"6d9T$O%a%C%;!<%8$N=pL>$,K\Ev$K%"%j%9$N=pL>$+3NG'$9$kI,MW$,(B
-$B$"$j$^$9!#(B</p>
-
-<p>$B$b$7N><T$K?H85$r>ZL@$7!"8x3+80$r3NG'$7!"$^$??.Mj$5$l$?5!4X$,=pL>(B
-$B$7$?>ZL@=q$,$"$l$P!"N><T$H$bDL?.Aj<j$K$D$$$F@5$7$$Aj<j$@$H(B
-$B3N?.$9$k$3$H$,$G$-$^$9!#(B
-$B$=$N$h$&$J?.Mj$5$l$?5!4X$O(B<em>$BG'>Z6I(B</em>
- (Certificate Authority $B$^$?$O(B CA) $B$H8F$P$l!"(B
-$B>ZL@=q(B (certificate) $B$,G'>Z(B (authentication) $B$K;H$o$l$^$9!#(B</p>
-
-<section id="certificatecontents">
-<title>$B>ZL@=q$NFbMF(B</title>
- <p>$B>ZL@=q$O8x3+80$H8D?M!"%5!<%P!"$=$NB>$N<gBN$N<B:_$N?H85$r(B
- $B4XO"IU$1$^$9!#(B
- <a href="#table1">$BI=(B1</a>$B$K<($5$l$k$h$&$K>ZL@BP>]$N>pJs$O(B
- $B?H85>ZL@$N>pJs(B($B<1JLL>(B)$B$H8x3+80$,4^$^$l$^$9!#(B
- $B>ZL@=q$O$^$?!"G'>Z6I$N?H85>ZL@$H=pL>!"$=$7$F>ZL@=q$NM-8z4|4V$r(B
- $B4^$_$^$9!#(B
- $B%7%j%"%k%J%s%P!<$J$I$NG'>Z6I$N4IM}>e$N>pJs$d(B
- $B$=$NB>$NDI2C$N>pJs$,4^$^$l$F$$$k$+$b$7$l$^$;$s!#(B</p>
-
- <section id="table1">
- <title>$BI=(B1: $B>ZL@=q>pJs(B</title>
- <table>
- <columnspec><column width=".35"/><column width=".35"/>
- </columnspec>
- <tr><th>$B>ZL@BP>](B</th>
- <td>$B<1JLL>!"8x3+80(B</td></tr>
- <tr><th>$BH/9T<T(B</th>
- <td>$B<1JLL>!"8x3+80(B</td></tr>
- <tr><th>$BM-8z4|4V(B</th>
- <td>$B3+;OF|!"<:8zF|(B</td></tr>
- <tr><th>$B4IM}>pJs(B</th>
- <td>$B%P!<%8%g%s!"%7%j%"%k%J%s%P!<(B</td></tr>
- <tr><th>$B3HD%>pJs(B</th>
- <td>$B4pK\E*$J@)Ls!"%M%C%H%9%1!<%W%U%i%C%0!"$=$NB>(B</td></tr>
- </table>
- </section>
-
- <p>$B<1JLL>(B($B%G%#%9%F%#%s%0%$%C%7%e!&%M!<%`(B)$B$OFCDj$N>u67$K$*$1$k(B
- $B?HJ,>ZL@$rDs6!$9$k$N$K;H$o$l$F$$$^$9!#Nc$($P!"$"$k?M$O(B
- $B;dMQ$H2q<R$H$GJL!9$N?HJ,>ZL@$r;}$D$+$b$7$l$^$;$s!#(B
-
- $B<1JLL>$O(B X.509 $BI8=`5,3J(B [<a
- href="#X509">X509</a>] $B$GDj5A$5$l$F$$$^$9!#(B
- X.509 $BI8=`5,3J$O!"9`L\!"9`L\L>!"$=$7$F9`L\$NN,>N$rDj5A$7$F$$$^$9!#(B(<a href="#table2">$BI=(B
- 2</a> $B;2>H(B)</p>
-
- <section id="table2">
- <title>$BI=(B 2: $B<1JLL>>pJs(B</title>
- <table border="1">
- <columnspec><column width=".25"/><column width=".15"/>
- <column width=".3"/><column width=".25"/></columnspec>
- <tr><th>$B<1JLL>9`L\(B</th>
- <th>$BN,>N(B</th>
- <th>$B@bL@(B</th>
- <th>$BNc(B</th></tr>
- <tr><td>Common Name ($B%3%b%s%M!<%`(B)</td>
- <td>CN</td>
- <td>$BG'>Z$5$l$kL>A0(B<br />
- SSL$B@\B3$9$k(BURL</td>
- <td>CN=www.example.com</td></tr>
- <tr><td>Organization or Company ($BAH?%L>(B)</td>
- <td>O</td>
- <td>$BCDBN$N@5<01Q8lAH?%L>(B</td>
- <td>O=Example Japan K.K.</td></tr>
- <tr><td>Organizational Unit ($BItLgL>(B)</td>
- <td>OU</td>
- <td>$BIt=pL>$J$I(B</td>
- <td>OU=Customer Service</td></tr>
- <tr><td>City/Locality ($B;T6hD.B<(B)</td>
- <td>L</td>
- <td>$B=j:_$7$F$k;T6hD.B<(B</td>
- <td>L=Sapporo</td></tr>
- <tr><td>State/Province ($BETF;I\8)(B)</td>
- <td>ST</td>
- <td>$B=j:_$7$F$kETF;I\8)(B</td>
- <td>ST=Hokkaido</td></tr>
- <tr><td>Country($B9q(B)</td>
- <td>C</td>
- <td>$B=j:_$7$F$$$k9qL>$N(B ISO $B%3!<%I(B<br />
- $BF|K\$N>l9g(B JP
- </td>
- <td>C=JP</td></tr>
- </table>
- </section>
-
- <p>$BG'>Z6I$O$I$N9`L\$,>JN,2DG=$G$I$l$,I,?\$+$NJ}?K$rDj5A$9$k(B
- $B$+$b$7$l$^$;$s!#9`L\$NFbMF$K$D$$$F$bG'>Z6I$d>ZL@=q$N%f!<%6$+$i$N(B
- $BMW7o$,$"$k$+$b$7$l$^$;$s!#(B
- $BNc$($P!"%M%C%H%9%1!<%W$N%V%i%&%6$O%5!<%P$N>ZL@=q$N(B
- Common Name ($B%3%b%s%M!<%`(B)$B$,%5!<%P$N%I%a%$%sL>$N(B
- <code>*.example.com</code>
- $B$H$$$&$h$&$J%o%$%k%I%+!<%I$N%Q%?!<%s$K%^%C%A$9$k$3$H(B
- $B$rMW5a$7$^$9!#(B</p>
-
- <p>$B%P%$%J%j7A<0$N>ZL@=q$O(B ASN.1 $BI=5-K!(B
- [<a href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>] $B$G(B
- $BDj5A$5$l$F$$$^$9!#(B
- $B$3$NI=5-K!$OFbMF$r$I$N$h$&$K5-=R$9$k$+$rDj5A$7!"(B
- $BId9f2=$N5,Dj$,$3$N>pJs$,$I$N$h$&$K%P%$%J%j7A<0$KJQ49$5$l$k$+$r(B
- $BDj5A$7$^$9!#(B
- $B>ZL@=q$N%P%$%J%jId9f2=$O(B Distinguished Encoding
- Rules (DER) $B$GDj5A$5$l!"$=$l$O$h$j0lHLE*$J(B Basic Encoding Rules
- (BER) $B$K4p$E$$$F$$$^$9!#(B
- $B%P%$%J%j7A<0$r07$&$3$H$N$G$-$J$$Aw?.$G$O!"(B
- $B%P%$%J%j7A<0$O(B Base64 $BId9f2=(B [<a href="#MIME">MIME</a>] $B$G(B
- ASCII $B7A<0$KJQ49$5$l$k$3$H$,$"$j$^$9!#(B
- $B$3$N$h$&$KId9f2=$5$l!"0J2<$NNc$K<($5$l$k$h$&$K6h@Z$j9T$K(B
- $B64$^$l$?$b$N$O(B PEM $BId9f2=$5$l$?$H8@$$$^$9!#(B
- (PEM $B$NL>A0$O(B "Privacy Enhanced Mail" $B$KM3Mh$7$^$9(B)</p>
-
- <example>
- <title>PEM $BId9f2=$5$l$?>ZL@=q$NNc(B (example.crt)</title>
- <pre>-----BEGIN CERTIFICATE-----
-MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
-FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
-A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
-cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
-bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
-MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
-a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
-cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
-AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
-vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
-lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
-HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
-gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
-2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
-dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
------END CERTIFICATE-----</pre>
- </example>
-</section>
-
-<section id="certificateauthorities">
-<title>$BG'>Z6I(B</title>
- <p>$B$^$:>ZL@=q$N?=@A$N>pJs$r3NG'$9$k$3$H$G!"(B
- $BG'>Z6I$OHkL)80$N;}$A<g$N?H85$rJ]>Z$7$^$9!#(B
- $BNc$($P!"%"%j%9$,8D?M>ZL@=q$r?=@A$7$?$H$9$k$H!"(B
- $BG'>Z6I$O%"%j%9$,>ZL@=q$N?=@A$,<gD%$9$kDL$j$N(B
- $B?MJ*$@$H$$$&$3$H$r3NG'$7$J$/$F$O$$$1$^$;$s!#(B</p>
-
- <section id="certificatechains">
- <title>$B>ZL@=q3,AX9=B$(B</title>
- <p>$BG'>Z6I$OB>$NG'>Z6I$X$N>ZL@=q$rH/9T$9$k$3$H$,$G$-$^$9!#(B
- $BL$CN$N>ZL@=q$rD4$Y$k;~$K!"%"%j%9$O$=$N>ZL@=q$NH/9T<T(B
- $B$K<+?.$,;}$F$k$^$G!"H/9T<T$N>ZL@=q$r(B
- $B$=$N>e0L3,AX$NG'>Z6I$r$?$I$C$FD4$Y$kI,MW$,$"$j$^$9!#(B
- $B!V0-<A$J!W>ZL@=q$N4m81@-$r8:$i$9$?$a!"(B
- $BH`=w$O8B$i$l$?O":?$NH/9T<T$N$_?.Mj$9$k$h$&$K(B
- $B7h$a$k$3$H$b$G$-$^$9!#(B</p>
- </section>
-
- <section id="rootlevelca">
- <title>$B:G>e0LG'>Z6I$N:n@.(B</title>
- <p>$BA0$K=R$Y$?$h$&$K!"A4$F$N>ZL@=q$K$D$$$F!"(B
- $B:G>e0L$NG'>Z6I(B(CA)$B$^$G$=$l$>$l$NH/9T<T$,(B
- $BBP>]$N?H85>ZL@$NM-8z@-$rL@$i$+$K$9$kI,MW$,$"$j$^$9!#(B
- $BLdBj$O!"C/$,$=$N:G>e0L$NG'>Z5!4X$N>ZL@=q$rJ]>Z$9$k$N$+!"(B
- $B$H$$$&$3$H$G$9!#(B
- $B$3$N$h$&$J>l9g$K8B$j!">ZL@=q$O!V<+8J=pL>!W$5$l$^$9!#(B
- $B$D$^$j!">ZL@=q$NH/9T<T$H>ZL@BP>]$,F1$8$H$$$&$3$H$K$J$j$^$9!#(B
- $B$=$N7k2L!"<+8J=pL>$5$l$?>ZL@=q$r?.MQ$9$k$K$O(B
- $B:Y?4$NCm0U$,I,MW$G$9!#(B
- $B:G>e0LG'>Z6I$,8x3+80$r9-$/8xI=$9$k$3$H$G!"(B
- $B$=$N80$r?.Mj$9$k%j%9%/$rDc$/$9$k$3$H$,$G$-$^$9!#(B
- $B$b$7!"B>?M$,$=$NG'>Z6I$K$J$j$9$^$7$?;~$K!"$=$l$,O*8+$7$d(B
- $B$9$$$+$i$G$9!#(B
- $BB?$/$N%V%i%&%6$OM-L>$JG'>Z6I$r?.Mj$9$k$h$&$K(B
- $B@_Dj$5$l$F$$$^$9!#(B</p>
-
- <p><a href="http://www.thawte.com/">Thawte</a>
- $B$d(B <a href="http://www.verisign.com/">VeriSign</a>
- $B$N$h$&$JB?$/$N2q<R$,G'>Z6I$H$7$F3+@_$7$^$7$?!#(B
- $B$3$N$h$&$J2q<R$O0J2<$N%5!<%S%9$rDs6!$7$^$9(B:</p>
-
- <ul>
- <li>$B>ZL@=q?=@A$N3NG'(B</li>
- <li>$B>ZL@=q?=@A$N=hM}(B</li>
- <li>$B>ZL@=q$NH/9T$H4IM}(B</li>
- </ul>
-
- <p>$B<+J,$GG'>Z6I$r:n$k$3$H$b2DG=$G$9!#(B
- $B%$%s%?!<%M%C%H4D6-$G$O4m81$G$9$,!"(B
- $B8D?M$d%5!<%P$N?H85>ZL@$,4JC1$K9T$($kAH?%$N(B
- $B%$%s%H%i%M%C%HFb$G$OLr$KN)$D$+$b$7$l$^$;$s!#(B</p>
- </section>
-
- <section id="certificatemanagement">
- <title>$B>ZL@=q4IM}(B</title>
- <p>$BG'>Z6I$N3+@_$OE0Dl$7$?4IM}!"5;=Q!"1?MQ$NBN@)$rI,MW$H$9$k(B
- $B@UG$$N$"$k;E;v$G$9!#(B
- $BG'>Z6I$O>ZL@=q$rH/9T$9$k$@$1$G$J$/!"(B
- $B4IM}$b$7$J$1$l$P$J$j$^$;$s!#(B
- $B6qBNE*$K$O!">ZL@=q$,$$$D$^$GM-8z$+$r7hDj$7!"99?7$7!"(B
- $B$^$?4{$KH/9T$5$l$?$,<:8z$7$?>ZL@=q$N%j%9%H(B
- (Certificate Revocation Lists $B$^$?$O(B CRL)
- $B$r4IM}$7$J$1$l$P$$$1$^$;$s!#(B
- $BNc$($P!"%"%j%9$,2q<R$+$i<R0w$H$7$F>ZL@=q$rM?$($i$l$?$H$7$^$9!#(B
- $B$=$7$F!"%"%j%9$,2q<R$r<-$a$k$H$-$K$O>ZL@=q$r<h$j>C$5$J$1$l$P(B
- $B$$$1$J$$$H$7$^$9!#(B
- $B>ZL@=q$O<!!9$H?M$KEO$5$l$F$$$/$b$N$J$N$G!"(B
- $B>ZL@=q$=$N$b$N$+$i!"$=$l$,<h$j>C$5$l$?$+H=CG$9$k$3$H$O(B
- $BIT2DG=$G$9!#(B
- $B$h$C$F!">ZL@=q$NM-8z@-$rD4$Y$k$H$-$K$O!"(B
- $BG'>Z6I$KO"Mm$7$F(B CRL $B$r>H9g$9$kI,MW$,$"$j$^$9!#(B
- $BIaDL$3$N2aDx$O<+F02=$5$l$F$$$k$b$N$G$O$"$j$^$;$s!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p>$B%G%U%)%k%H$G%V%i%&%6$K@_Dj$5$l$F$$$J$$G'>Z6I$r;H$C$?>l9g!"(B
- $BG'>Z6I$N>ZL@=q$r%V%i%&%6$KFI$_9~$s$G!"(B
- $B%V%i%&%6$,$=$NG'>Z6I$K$h$C$F=pL>$5$l$?%5!<%P$N>ZL@=q$r(B
- $BM-8z2=$9$kI,MW$,$"$j$^$9!#(B
- $B0lEYFI$_9~$^$l$k$H!"$=$NG'>Z6I$K$h$C$F=pL>$5$l$?A4$F$N(B
- $B>ZL@=q$r<u$1F~$l$k$?$a!"4m81$rH<$$$^$9!#(B</p>
- </note>
- </section>
-</section>
-<!-- /certificateauthorities -->
-</section>
-<!-- /certificates -->
-
-<section id="ssl">
-<title>Secure Sockets Layer (SSL)</title>
-<p>Secure Sockets Layer $B%W%m%H%3%k$O?.Mj@-$N$"$k%3%M%/%7%g%s7?$N(B
-$B%M%C%H%o!<%/AX$N%W%m%H%3%k(B($BNc$($P!"(BTCP/IP)$B$H(B
-$B%"%W%j%1!<%7%g%sAX$N%W%m%H%3%k(B($BNc$($P!"(BHTTP)
-$B$N4V$KCV$/$3$H$,$G$-$^$9!#(B
-SSL $B$O!"Aj8_G'>Z$K$h$C$F%5!<%P$H%/%i%$%"%s%H4V$N0BA4$JDL?.$r!"(B
-$BEE;R=pL>$K$h$C$F%G!<%?$N40A4@-$r!"(B
-$B$=$7$F0E9f2=$K$h$C$F%W%i%$%P%7$rDs6!$7$^$9!#(B</p>
-
-<p>SSL $B%W%m%H%3%k$O0E9f2=!"%@%$%8%'%9%H!"EE;R=pL>$K$D$$$F!"(B
-$BMM!9$J%"%k%4%j%:%`$r%5%]!<%H$9$k$h$&$K$G$-$F$$$^$9!#(B
-$B$3$&$9$k$3$H$G!"K!$dM"=P$N5,@)$r9MN8$KF~$l$F!"%5!<%P$K9g$o$;$?(B
-$B%"%k%4%j%:%`$rA*$V$3$H$,$G$-!"$^$?!"?7$7$$%"%k%4%j%:%`$r(B
-$BMxMQ$7$F$$$/$3$H$b2DG=$K$7$F$$$^$9!#(B
-$B%"%k%4%j%:%`$NA*Br$O%W%m%H%3%k%;%C%7%g%s3+;O;~$K(B
-$B%5!<%P$H%/%i%$%"%s%H4V$G<h$j7h$a$i$l$^$9!#(B</p>
-
-<section id="table4">
-<title>$BI=(B4: SSL $B%W%m%H%3%k$N%P!<%8%g%s(B</title>
- <table border="1">
- <columnspec><column width=".15"/><column width=".2"/>
- <column width=".30"/><column width=".25"/></columnspec>
- <tr><th>$B%P!<%8%g%s(B</th>
- <th>$B=PE5(B</th>
- <th>$B@bL@(B</th>
- <th>$B%V%i%&%6$N%5%]!<%H(B</th></tr>
- <tr><td>SSL v2.0</td>
- <td>Vendor Standard (Netscape Corp. $B$h$j(B) [<a href="#SSL2"
- >SSL2</a>]</td>
- <td>$B<BAu$,8=B8$9$k=i$a$F$N(B SSL $B%W%m%H%3%k(B</td>
- <td>- NS Navigator 1.x/2.x<br />
- - MS IE 3.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>SSL v3.0</td>
- <td>Expired Internet Draft (Netscape Corp. $B$h$j(B) [<a href="#SSL3"
- >SSL3</a>]</td>
- <td>$BFCDj$N%;%-%e%j%F%#967b$rKI$0$?$a$N2~D{!"(B
- $BHs(BRSA $B0E9f$NDI2C!">ZL@=q3,AX9=B$$N%5%]!<%H(B</td>
- <td>- NS Navigator 2.x/3.x/4.x<br />
- - MS IE 3.x/4.x<br />
- - Lynx/2.8+OpenSSL</td></tr>
- <tr><td>TLS v1.0</td>
- <td>Proposed Internet Standard (IETF $B$h$j(B) [<a href="#TLS1"
- >TLS1</a>]</td>
- <td>MAC $B%l%$%d$r(B HMAC $B$X99?7!"%V%m%C%/0E9f$N(B block
- padding$B!"%a%C%;!<%8=g=x$NI8=`2=!"7Y9pJ8$N=<<B$J$I$N$?$a(B
- SSL 3.0 $B$r2~D{!#(B</td>
- <td>- Lynx/2.8+OpenSSL</td></tr>
- </table>
-</section>
-
-<p><a href="#table4">$BI=(B4</a>$B$K<($5$l$k$H$*$j!"(BSSL $B%W%m%H%3%k$K$O(B
-$B$$$/$D$b$N%P!<%8%g%s$,$"$j$^$9!#(B
-$BI=$K$b=q$+$l$F$$$k$h$&$K!"(BSSL 3.0 $B$NMxE@$N0l$D$O(B
-$B>ZL@=q3,AX9=B$$r%5%]!<%H$9$k$3$H$G$9!#(B
-$B$3$N5!G=$K$h$C$F!"%5!<%P$O<+J,$N>ZL@=q$K2C$($F!"(B
-$BH/9T<T$N>ZL@=q$r%V%i%&%6$KEO$9$3$H$,$G$-$^$9!#(B
-$B>ZL@=q3,AX9=B$$K$h$C$F!"(B
-$B%V%i%&%6$KH/9T<T$N>ZL@=q$,D>@\EPO?$5$l$F$$$J$/$F$b!"(B
-$B3,AX$NCf$K4^$^$l$F$$$l$P!"(B
-$B%V%i%&%6$O%5!<%P$N>ZL@=q$rM-8z2=$9$k$3$H$,$G$-$^$9!#(B
-SSL 3.0 $B$O8=:_(B Internet Engineering Task Force (IETF)
-$B$K$h$C$F3+H/$5$l$F$$$k(B Transport Layer Security
-[<a href="#TLS1">TLS</a>] $B%W%m%H%3%kI8=`5,3J$N4pAC$H$J$C$F$$$^$9!#(B</p>
-
-<section id="session">
-<title>$B%;%C%7%g%s$N3NN)(B</title>
- <p><a href="#figure1">$B?^(B1</a>$B$G<($5$l$k$h$&$K!"(B
- $B%;%C%7%g%s$N3NN)$O%/%i%$%"%s%H$H%5!<%P4V$N(B
- $B%O%s%I%7%'!<%/%7!<%/%(%s%9$K$h$C$F9T$J$o$l$^$9!#(B
- $B%5!<%P$,>ZL@=q$rDs6!$9$k$+!"%/%i%$%"%s%H$N>ZL@=q$r%j%/%(%9%H$9$k$+(B
- $B$H$$$&%5!<%P$N@_Dj$K$h$j!"$3$N%7!<%/%(%s%9$O0[$J$k$b$N$H$J$j$^$9!#(B
- $B0E9f>pJs$N4IM}$N$?$a$K!"DI2C$N%O%s%I%7%'!<%/2aDx$,I,MW$K$J$k(B
- $B>l9g$b$"$j$^$9$,!"$3$N5-;v$G$O(B
- $B$h$/$"$k%7%J%j%*$r<jC;$K@bL@$7$^$9!#(B
- $BA4$F$N2DG=@-$K$D$$$O!"(BSSL $B;EMM=q$r;2>H$7$F$/$@$5$$!#(B</p>
-
- <note><title>$BCm0U(B</title>
- <p>$B0lEY(B SSL $B%;%C%7%g%s$,3NN)$9$k$H!"%;%C%7%g%s$r:FMxMQ$9$k$3$H$G!"(B
- $B%;%C%7%g%s$r3+;O$9$k$?$a$NB?$/$N2aDx$r7+$jJV$9$H$$$&(B
- $B%Q%U%)!<%^%s%9$NB;<:$rKI$.$^$9!#(B
- $B$=$N$?$a!"%5!<%P$OA4$F$N%;%C%7%g%s$K0l0U$J%;%C%7%g%s<1JLL>$r(B
- $B3d$jEv$F!"%5!<%P$K%-%c%C%7%e$7!"%/%i%$%"%s%H$O<!2s$+$i(B
- ($B<1JLL>$,%5!<%P$N%-%c%C%7%e$G4|8B@Z$l$K$J$k$^$G$O(B)
- $B%O%s%I%7%'!<%/$J$7$G@\B3$9$k$3$H$,$G$-$^$9!#(B</p>
- </note>
-
- <p class="figure">
- <img
- src="ssl_intro_fig1.gif" alt="" width="423" height="327" /><br />
- <a id="figure1" name="figure1"><dfn>$B?^(B1</dfn></a>: SSL
- $B%O%s%I%7%'!<%/%7!<%/%(%s%935N,(B</p>
-
- <p>$B%5!<%P$H%/%i%$%"%s%H$G;H$o$l$k(B
- $B%O%s%I%7%'!<%/%7!<%/%(%s%9$NMWAG$r0J2<$K<($7$^$9(B:</p>
-
- <ol>
- <li>$B%G!<%?DL?.$K;H$o$l$k0E9f%9%$!<%H$N<h$j7h$a(B</li>
- <li>$B%/%i%$%"%s%H$H%5!<%P4V$G$N%;%C%7%g%s80$N3NN)$H6&M-(B</li>
- <li>$B%*%W%7%g%s$H$7$F!"%/%i%$%"%s%H$KBP$9$k%5!<%P$NG'>Z(B</li>
- <li>$B%*%W%7%g%s$H$7$F!"%5!<%P$KBP$9$k%/%i%$%"%s%H$NG'>Z(B</li>
- </ol>
-
- <p>$BBh0l%9%F%C%W$N0E9f%9%$!<%H<h$j7h$a$K$h$C$F!"(B
- $B%5!<%P$H%/%i%$%"%s%H$O$=$l$>$l$K$"$C$?(B
- $B0E9f%9%$!<%H$rA*$V$3$H$,$G$-$^$9!#(B
- SSL3.0 $B%W%m%H%3%k$N;EMM=q$O(B 31 $B$N0E9f%9%$!<%H$rDj5A$7$F$$$^$9!#(B
- $B0E9f%9%$!<%H$O0J2<$N%3%s%]!<%M%s%H$K$h$jDj5A$5$l$F$$$^$9(B:</p>
-
- <ul>
- <li>$B80$N8r49<jCJ(B</li>
- <li>$B%G!<%?DL?.$N0E9f=Q(B</li>
- <li>Message Authentication Code (MAC) $B:n@.$N$?$a$N(B
- $B%a%C%;!<%8%@%$%8%'%9%H(B</li>
- </ul>
-
- <p>$B$3$l$i$N;0$D$NMWAG$O0J2<$N%;%/%7%g%s$G@bL@$5$l$F$$$^$9!#(B</p>
-</section>
-
-<section id="keyexchange">
-<title>$B80$N8r49<jCJ(B</title>
- <p>$B80$N8r49<jCJ$O%"%W%j%1!<%7%g%s$N%G!<%?DL?.$K;H$o$l!"(B
- $B6&M-$5$l$kBP>N0E9f80$r$I$N$h$&$K$,%/%i%$%"%s%H$H%5!<%P$G(B
- $B<h$j7h$a$k$+$rDj5A$7$^$9!#(B
- SSL 2.0 $B$O(B RSA $B808r49$7$+;H$$$^$;$s$,!"(B
- SSL 3.0 $B$O>ZL@=q$,;H$o$l$k$H$-$O(B RSA $B808r49$r;H$$!"(B
- $B>ZL@=q$,L5$/!"%/%i%$%"%s%H$H%5!<%P$N;vA0$NDL?.$,L5$$>l9g$O(B
- Diffie-Hellman $B808r49$r;H$&(B
- $B$J$IMM!9$J808r49%"%k%4%j%:%`$r%5%]!<%H$7$^$9!#(B</p>
-
- <p>$B80$N8r49J}K!$K$*$1$k0l$D$NA*Br;h$OEE;R=pL>$G$9!#(B
- $BEE;R=pL>$r;H$&$+$I$&$+!"$^$?!"(B
- $B$I$N<oN`$N=pL>$r;H$&$+$H$$$&A*Br$,$"$j$^$9!#(B
- $BHkL)80$G=pL>$9$k$3$H$G6&M-80$r@8@.$9$7!">pJs8r49$9$k;~$N(B
- $B%^%s!&%$%s!&%6!&%_%I%k967b$rKI$0$3$H$,$G$-$^$9!#(B
- [<a href="#AC96">AC96</a>, p516]</p>
-</section>
-
-<section id="ciphertransfer">
-<title>$B%G!<%?DL?.$N0E9f=Q(B</title>
- <p>SSL $B$O%;%C%7%g%s$N%a%C%;!<%8$N0E9f2=$KA0=R$7$?(B
- $B=>Mh7?0E9f(B($BBP>N0E9f(B)$B$rMQ$$$^$9!#(B
- $B0E9f2=$7$J$$$H$$$&A*Br;h$b4^$a6e$D$NA*Br;h$,$"$j$^$9(B:</p>
-
- <ul>
- <li>$B0E9f2=$J$7(B</li>
- <li>$B%9%H%j!<%`0E9f(B
- <ul>
- <li>40-bit $B80$G$N(B RC4</li>
- <li>128-bit $B80$G$N(B RC4</li>
- </ul></li>
- <li>CBC $B%V%m%C%/0E9f(B
- <ul><li>40 bit $B80$G$N(B RC2</li>
- <li>40 bit $B80$G$N(B DES</li>
- <li>56 bit $B80$G$N(B DES</li>
- <li>168 bit $B80$G$N(B Triple-DES</li>
- <li>Idea (128 bit $B80(B)</li>
- <li>Fortezza (96 bit $B80(B)</li>
- </ul></li>
- </ul>
-
- <p>$B$3$3$G$N(B CBC $B$H$O0E9f%V%m%C%/O":?(B (Cipher Block Chaining)
- $B$NN,$G!"0l$DA0$N0E9f2=$5$l$?0E9fJ8$N0lIt$,(B
- $B%V%m%C%/$N0E9f2=$K;H$o$l$k$3$H$r0UL#$7$^$9!#(B
- DES $B$O%G!<%?0E9f2=I8=`5,3J(B (Data Encryption Standard)
- [<a href="#AC96">AC96</a>, ch12] $B$NN,$G!"(B
- DES40 $B$d(B 3DES_EDE $B$r4^$`$$$/$D$b$N<oN`$,$"$j$^$9!#(B
- Idea $B$O:G9b$J$b$N$N0l$D$G!"0E9f=QE*$K$O8=:_$"$kCf$G(B
- $B:G$b6/NO$J$b$N$G$9!#(B
- RC2 $B$O(B RSA DSI $B$K$h$kFH@jE*$J%"%k%4%j%:%`$G$9!#(B
- [<a href="#AC96">AC96</a>,
- ch13]</p>
-</section>
-
-<section id="digestfuntion">
-<title>$B%@%$%8%'%9%H4X?t(B</title>
- <p>
- $B%@%$%8%'%9%H4X?t$NA*Br$O%l%3!<%I%f%K%C%H$+$i$I$N$h$&$K%@%$%8%'%9%H$,@8@.$5$l$k$+$r7hDj$7$^$9!#(B
- SSL $B$O0J2<$r%5%]!<%H$7$^$9(B:</p>
-
- <ul>
- <li>$B%@%$%8%'%9%H$J$7(B</li>
- <li>MD5 (128-bit $B%O%C%7%e(B)</li>
- <li>Secure Hash Algorithm (SHA-1) (160-bit $B%O%C%7%e(B)</li>
- </ul>
-
- <p>$B%a%C%;!<%8%@%$%8%'%9%H$O(B Message Authentication Code (MAC)
- $B$N@8@.$K;H$o$l!"%a%C%;!<%8$H6&$K0E9f2=$5$l!"%a%C%;!<%8$N?.MQ$r(B
- $BDs6!$7!"%j%W%l%$967b$rKI$.$^$9!#(B</p>
-</section>
-
-<section id="handshake">
-<title>$B%O%s%I%7%'!<%/%7!<%/%(%s%9%W%m%H%3%k(B</title>
- <p>$B%O%s%I%7%'!<%/%7!<%/%(%s%9$O;0$D$N%W%m%H%3%k$r;H$$$^$9(B:</p>
-
- <ul>
- <li><dfn>SSL $B%O%s%I%7%'!<%/%W%m%H%3%k(B</dfn>$B$O(B
- $B%/%i%$%"%s%H$H%5!<%P4V$G$N(B SSL $B%;%C%7%g%s$N3NN)$K;H$o$l$^$9!#(B</li>
- <li><dfn>SSL $B0E9f;EMMJQ99%W%m%H%3%k(B</dfn>$B$O(B
- $B%;%C%7%g%s$G$N0E9f%9%$!<%H$N<h$j7h$a$K;H$o$l$^$9!#(B</li>
- <li><dfn>SSL $B7Y9p%W%m%H%3%k(B</dfn>$B$O(B
- $B%/%i%$%"%s%H%5!<%P4V$G(B SSL $B%(%i!<$rEAC#$9$k$N$K;H$o$l$^$9!#(B</li>
- </ul>
-
- <p>$B;0$D$N%W%m%H%3%k$O!"%"%W%j%1!<%7%g%s%W%m%H%3%k%G!<%?$H$H$b$K!"(B
- <a href="#figure2">$B?^(B2</a>$B$K<($9$H$*$j(B <dfn>SSL $B%l%3!<%I%W%m%H%3%k(B</dfn>
- $B$G%+%W%;%k2=$5$l$^$9!#(B
- $B%+%W%;%k2=$5$l$?%W%m%H%3%k$O%G!<%?$r8!::$7$J$$(B
- $B2<AX$N%W%m%H%3%k$K$h$C$F%G!<%?$H$7$FEAC#$5$l$^$9!#(B
- $B%+%W%;%k2=$5$l$?%W%m%H%3%k$O2<AX$N%W%m%H%3%k$K4X$7$F0l@Z4XCN$7$^$;$s!#(B</p>
-
- <p class="figure">
- <img src="ssl_intro_fig2.gif" alt="" width="428" height="217" /><br />
- <a id="figure2" name="figure2"><dfn>$B?^(B2</dfn></a>: SSL $B%W%m%H%3%k%9%?%C%/(B
- </p>
-
- <p>
- $B%l%3!<%I%W%m%H%3%k$K$h$k(B SSL $B%3%s%H%m!<%k%W%m%H%3%k$N%+%W%;%k2=$O!"(B
- $B%"%/%F%#%V$J%;%C%7%g%s$NFs2sL\$NDL?.$,$"$C$?>l9g!"(B
- $B%3%s%H%m!<%k%W%m%H%3%k$,0BA4$G$"$k$3$H$r0UL#$7$^$9!#(B
- $B4{$K%;%C%7%g%s$,L5$$>l9g$O!"(BNull $B0E9f%9%$!<%H$,;H$o$l!"(B
- $B0E9f2=$O9T$J$o$l$:!"%;%C%7%g%s$,3NN)$9$k$^$G$O(B
- $B%@%$%8%'%9%H$bL5$$>uBV$H$J$j$^$9!#(B</p>
-</section>
-
-<section id="datatransfer">
-<title>$B%G!<%?DL?.(B</title>
- <p><a href="#figure3">$B?^(B3</a>$B$K<($5$l$k(B SSL $B%l%3!<%I%W%m%H%3%k(B
- $B$O%/%i%$%"%s%H$H%5!<%P4V$N%"%W%j%1!<%7%g%s$d(B
- SSL $B%3%s%H%m!<%k%G!<%?$NDL?.$K;H$o$l$^$9!#(B
- $B$3$N%G!<%?$O$h$j>.$5$$%f%K%C%H$KJ,$1$i$l$?$j!"(B
- $B$$$/$D$+$N9b5i%W%m%H%3%k$r$^$H$a$F0l%f%K%C%H$H$7$FDL?.$,(B
- $B9T$J$o$l$k$3$H$b$"$j$^$9!#(B
- $B%G!<%?$r05=L$7!"%@%$%8%'%9%H=pL>$rE:IU$7$F!"(B
- $B$3$l$i$N%f%K%C%H$r0E9f2=$7$?$N$A!"%Y!<%9$H$J$C$F$$$k(B
- $B?.Mj@-$N$"$k%H%i%s%9%]!<%H%W%m%H%3%k$rMQ$$$k$+$b$7$l$^$;$s!#(B
- ($BCm0U(B: $B8=:_%a%8%c!<$J(B SLL $B<BAu$G05=L$r%5%]!<%H$7$F$$$k$b$N$O$"$j$^$;$s(B)</p>
-
- <p class="figure">
- <img src="ssl_intro_fig3.gif" alt="" width="423" height="323" /><br />
- <a id="figure3" name="figure3"><dfn>$B?^(B 3</dfn></a>: SSL $B%l%3!<%I%W%m%H%3%k(B
- </p>
-</section>
-
-<section id="securehttp">
-<title>HTTP $BDL?.$N0BA42=(B</title>
- <p>$B$h$/$"$k(B SSL $B$N;H$$J}$O%V%i%&%6$H%&%'%V%5!<%P4V$N(B HTTP $BDL?.(B
- $B$N0BA42=$G$9!#(B
- $B$3$l$O!"=>Mh$N0BA4$G$O$J$$(B HTTP $B$N;HMQ$r=|30$9$k$b$N$G$O$"$j$^$;$s!#(B
- $B0BA42=$5$l$?$b$N$O<g$K(B SSH $B>e$NIaDL$N(B HTTP $B$G!"(BHTTPS $B$H8F$P$l$^$9!#(B
- $BBg$-$J0c$$$O!"(BURL $B%9%-!<%`$K(B <code>http</code> $B$NBe$o$j$K(B <code>https</code>
- $B$rMQ$$!"%5!<%P$,JL$N%]!<%H$r;H$&$3$H$G$9(B ($B%G%U%)%k%H$G$O(B443)$B!#(B
- $B$3$l$,<g$K(B <module
- >mod_ssl</module> $B$,(B Apache $B%&%'%V%5!<%P$KDs6!$9$k5!G=$G$9!#(B</p>
-</section>
-</section>
-<!-- /ssl -->
-
-<section id="references">
-<title>$B;29MJ88%(B</title>
-<dl>
-<dt><a id="AC96" name="AC96">[AC96]</a></dt>
-<dd>Bruce Schneier, <q>Applied Cryptography</q>, 2nd Edition, Wiley,
-1996. See <a href="http://www.counterpane.com/"
->http://www.counterpane.com/</a> for various other materials by Bruce
-Schneier.</dd>
-
-<dt><a id="X208" name="X208">[X208]</a></dt>
-<dd>ITU-T Recommendation X.208, <q>Specification of Abstract Syntax Notation
-One (ASN.1)</q>, 1988. See for instance <a
-href="http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I"
->http://www.itu.int/rec/recommendation.asp?type=items&amp;lang=e&amp;parent=T-REC-X.208-198811-I</a>.
-</dd>
-
-<dt><a id="X509" name="X509">[X509]</a></dt>
-<dd>ITU-T Recommendation X.509, <q>The Directory - Authentication
-Framework</q>. See for instance <a
-href="http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509"
->http://www.itu.int/rec/recommendation.asp?type=folders&amp;lang=e&amp;parent=T-REC-X.509</a>.
-</dd>
-
-<dt><a id="PKCS" name="PKCS">[PKCS]</a></dt>
-<dd><q>Public Key Cryptography Standards (PKCS)</q>,
-RSA Laboratories Technical Notes, See <a
-href="http://www.rsasecurity.com/rsalabs/pkcs/"
->http://www.rsasecurity.com/rsalabs/pkcs/</a>.</dd>
-
-<dt><a id="MIME" name="MIME">[MIME]</a></dt>
-<dd>N. Freed, N. Borenstein, <q>Multipurpose Internet Mail Extensions
-(MIME) Part One: Format of Internet Message Bodies</q>, RFC2045.
-See for instance <a href="http://ietf.org/rfc/rfc2045.txt"
->http://ietf.org/rfc/rfc2045.txt</a>.</dd>
-
-<dt><a id="SSL2" name="SSL2">[SSL2]</a></dt>
-<dd>Kipp E.B. Hickman, <q>The SSL Protocol</q>, 1995. See <a
-href="http://www.netscape.com/eng/security/SSL_2.html"
->http://www.netscape.com/eng/security/SSL_2.html</a>.</dd>
-
-<dt><a id="SSL3" name="SSL3">[SSL3]</a></dt>
-<dd>Alan O. Freier, Philip Karlton, Paul C. Kocher, <q>The SSL Protocol
-Version 3.0</q>, 1996. See <a
-href="http://www.netscape.com/eng/ssl3/draft302.txt"
->http://www.netscape.com/eng/ssl3/draft302.txt</a>.</dd>
-
-<dt><a id="TLS1" name="TLS1">[TLS1]</a></dt>
-<dd>Tim Dierks, Christopher Allen, <q>The TLS Protocol Version 1.0</q>,
-1999. See <a href="http://ietf.org/rfc/rfc2246.txt"
->http://ietf.org/rfc/rfc2246.txt</a>.</dd>
-</dl>
-</section>
-<!-- /references -->
-
-</manualpage>
diff --git a/docs/manual/ssl/ssl_intro.xml.meta b/docs/manual/ssl/ssl_intro.xml.meta
deleted file mode 100644
index da798513f9..0000000000
--- a/docs/manual/ssl/ssl_intro.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ssl_intro</basename>
- <path>/ssl/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/ssl/ssl_intro_fig1.gif b/docs/manual/ssl/ssl_intro_fig1.gif
deleted file mode 100644
index 3c209864f1..0000000000
--- a/docs/manual/ssl/ssl_intro_fig1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig1.png b/docs/manual/ssl/ssl_intro_fig1.png
deleted file mode 100644
index e599d239e5..0000000000
--- a/docs/manual/ssl/ssl_intro_fig1.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig2.gif b/docs/manual/ssl/ssl_intro_fig2.gif
deleted file mode 100644
index 26b295a67b..0000000000
--- a/docs/manual/ssl/ssl_intro_fig2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig2.png b/docs/manual/ssl/ssl_intro_fig2.png
deleted file mode 100644
index c540f48a59..0000000000
--- a/docs/manual/ssl/ssl_intro_fig2.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig3.gif b/docs/manual/ssl/ssl_intro_fig3.gif
deleted file mode 100644
index 00a975b5a4..0000000000
--- a/docs/manual/ssl/ssl_intro_fig3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig3.png b/docs/manual/ssl/ssl_intro_fig3.png
deleted file mode 100644
index d71a1cba98..0000000000
--- a/docs/manual/ssl/ssl_intro_fig3.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/stopping.html b/docs/manual/stopping.html
deleted file mode 100644
index ceae360810..0000000000
--- a/docs/manual/stopping.html
+++ /dev/null
@@ -1,19 +0,0 @@
-URI: stopping.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: stopping.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: stopping.html.es
-Content-Language: es
-Content-type: text/html; charset=ISO-8859-1
-
-URI: stopping.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: stopping.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/stopping.html.de b/docs/manual/stopping.html.de
deleted file mode 100644
index e261038959..0000000000
--- a/docs/manual/stopping.html.de
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Beenden und Neustarten - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Beenden und Neustarten</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/stopping.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Dieses Dokument umfasst das Beenden und Neustarten des
- Apache auf Unix-ähnlichen Systemen. Anwender von Windows NT, 2000
- und XP sollten <a href="platform/windows.html#winsvc">Betreiben
- des Apache als Dienst</a> lesen, während hingegen Anwender von
- Windows 9x sowie ME <a href="platform/windows.html#wincons">Betreiben
- des Apache als Konsolenanwendung</a> lesen sollten, um mehr Informationen
- zur Handhabung des Apache auf diesen Systemen zu erhalten.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Einleitung</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#term">Beenden</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#graceful">Unterbrechungsfreier Neustart</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#hup">Neustarten</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#race">Anhang: Signale und Wettkampfsituationen</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Einleitung</a></h2>
-
- <p>Um den Apache zu stoppen oder neu zu starten, müssen Sie
- ein Signal an den laufenden <code>httpd</code>-Prozess senden. Es gibt
- zwei Möglichkeiten, diese Signale zu senden. Zum einen können
- Sie den Unix-Befehl <code>kill</code> verwenden, um den Prozessen
- direkt Signale zu senden. Sie werden feststellen, dass auf Ihrem
- System mehrere <code>httpd</code>-Programme laufen. Sie sollten jedoch
- nicht jedem dieser Prozesse ein Signal senden, sondern nur dem
- Elternprozess, dessen PID im <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> steht. Das heißt, Sie
- sollten es niemals nötig haben, einem anderen Prozess, als dem
- Elternprozess, ein Signal zu senden. Es gibt drei Signale, die Sie an den
- Elternprozess senden können: <code><a href="#term">TERM</a></code>,
- <code><a href="#hup">HUP</a></code> und
- <code><a href="#graceful">USR1</a></code>, die nachfolgend beschrieben
- werden.</p>
-
- <p>Um dem Elternprozess ein Signal zu senden, verwenden Sie einen
- Befehl wie z.B.:</p>
-
- <div class="example"><p><code>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</code></p></div>
-
- <p>Die zweite Methode, dem <code>httpd</code>-Prozess zu signalisieren,
- ist die Verwendung der <code>-k</code>-Befehlszeilenoptionen
- <code>stop</code>, <code>restart</code> und <code>graceful</code>, wie
- unten beschrieben. Dies sind Argumente des <a href="programs/httpd.html">httpd</a>-Programms, es wird jedoch
- empfohlen, sie unter Verwendung des Steuerskripts <a href="programs/apachectl.html">apachectl</a> zu senden, welches diese
- an <code>httpd</code> durchreicht.</p>
-
- <p>Nachdem Sie <code>httpd</code> signalisiert haben, können Sie
- dessen Fortschritt beobachten, indem Sie eingeben:</p>
-
- <div class="example"><p><code>tail -f /usr/local/apache2/logs/error_log</code></p></div>
-
- <p>Passen Sie diese Beispiele entsprechend Ihren <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>- und <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>-Einstellungen an.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="term" id="term">Beenden</a></h2>
-
- <dl><dt>Signal: TERM</dt>
- <dd><code>apachectl -k stop</code></dd>
- </dl>
-
- <p>Das Senden des <code>TERM</code>- oder <code>stop</code>-Signals an
- den Elternprozess veranlasst diesen, sofort zu versuchen, alle seine
- Kindprozesse zu beenden. Es kann einige Sekunden dauern, bis alle
- Kindprozesse komplett beendet sind. Danach beendet sich der Elternprozess
- selbst. Alle gerade bearbeiteten Anfragen werden abgebrochen.
- Es werden keine weiteren Anfragen mehr bedient.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="graceful" id="graceful">Unterbrechungsfreier Neustart</a></h2>
-
- <dl><dt>Signal: USR1</dt>
- <dd><code>apachectl -k graceful</code></dd>
- </dl>
-
- <p>Das <code>USR1</code>- oder <code>graceful</code>-Signal
- veranlasst den Elternprozess, die Kinder <em>anzuweisen</em>, sich
- nach Abschluß ihrer momentanen bearbeiteten Anfrage zu beenden
- (oder sich sofort zu beenden, wenn sie gerade keine Anfrage bedienen).
- Der Elternprozess liest seine Konfigurationsdateien erneut ein und
- öffnet seine Logdateien neu. Wenn ein Kindprozess stirbt,
- ersetzt der Elternprozess ihn durch ein Kind der neuen
- Konfigurations-<em>Generation</em>. Dieses beginnt sofort damit,
- neue Anfragen zu bedienen.</p>
-
- <div class="note">Auf bestimmten Plattformen, welche kein <code>USR1</code>
- für einen unterbrechungsfreien Neustart erlauben, kann ein
- alternatives Signal verwendet werden (wie z.B.
- <code>WINCH</code>). Der Befehl <code>apachectl graceful</code>
- sendet das jeweils richtige Signal für Ihre Platform.</div>
-
- <p>Der Code ist dafür ausgelegt, stets die MPM-Direktiven
- zur Prozesssteuerung zu beachten, so dass die Anzahl der Prozesse
- und Threads, die zur Bedienung der Clients bereitstehen, während
- des Neustarts auf die entsprechenden Werte gesetzt werden.
- Weiterhin wird <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code>
- auf folgende Art und Weise interpretiert: Wenn nach einer Sekunde
- nicht mindestens <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code>
- neue Kindprozesse erstellt wurden, dann werden, um den Durchsatz zu
- beschleunigen, entsprechend weitere erstellt. Auf diese Weise versucht
- der Code sowohl die Anzahl der Kinder entsprechend der Serverlast
- anzupassen als auch Ihre Wünsche hinsichtlich des Parameters
- <code class="directive">StartServers</code> zu berücksichtigen.</p>
-
- <p>Benutzer von <code class="module"><a href="./mod/mod_status.html">mod_status</a></code> werden feststellen,
- dass die Serverstatistiken <strong>nicht</strong> auf Null
- zurückgesetzt werden, wenn ein <code>USR1</code> gesendet
- wurde. Der Code wurde so geschrieben, dass sowohl die Zeit minimiert
- wird, in der der Server nicht in der Lage ist, neue Anfragen zu
- bedienen (diese werden vom Betriebssystem in eine Warteschlange
- gestellt, so dass sie auf keinen Fall verloren gehen) als auch
- Ihre Parameter zur Feinabstimmung berücksichtigt werden.
- Um dies zu erreichen, muss die <em>Statustabelle</em> (Scoreboard),
- die dazu verwendet wird, alle Kinder über mehrere Generationen
- zu verfolgen, erhalten bleiben.</p>
-
- <p>Das Statusmodul benutzt außerdem ein <code>G</code>, um
- diejenigen Kinder zu kennzeichen, die noch immer Anfragen bedienen,
- welche gestartet wurden, bevor ein unterbrechungsfreier Neustart
- veranlaßt wurde.</p>
-
- <p>Derzeit gibt es keine Möglichkeit für ein
- Log-Rotationsskript, das <code>USR1</code> verwendet, sicher
- festzustellen, dass alle Kinder, die in ein vor dem Neustart
- geöffnetes Log schreiben, beendet sind. Wir schlagen vor, dass
- Sie nach dem Senden des Signals <code>USR1</code> eine angemessene
- Zeitspanne warten, bevor Sie das alte Log anfassen. Wenn beispielsweise
- die meisten Ihrer Zugriffe bei Benutzern mit niedriger Bandbreite
- weniger als 10 Minuten für eine vollständige Antwort
- benötigen, dann könnten Sie 15 Minuten warten, bevor Sie auf
- das alte Log zugreifen.</p>
-
- <div class="note">Wenn Ihre Konfigurationsdatei Fehler enthält, während
- Sie einen Neustart anweisen, dann wird Ihr Elternprozess nicht neu starten,
- sondern sich mit einem Fehler beenden. Im Falle eines unterbrechungsfreien
- Neustarts läßt er die Kinder weiterlaufen, wenn er sich beendet.
- (Dies sind die Kinder, die sich "sanft beenden", indem sie ihre letzte
- Anfrage erledigen.) Das verursacht Probleme, wenn Sie versuchen,
- den Server neu zu starten -- er ist nicht in der Lage, sich an die Ports zu
- binden, an denen er lauschen soll. Bevor Sie einen Neustart
- durchführen, können Sie die Syntax der Konfigurationsdateien
- mit dem Befehlszeilenargument <code>-t</code> überprüfen
- (siehe auch <a href="programs/httpd.html">httpd</a>). Das garantiert
- allerdings nicht, dass der Server korrekt starten wird. Um sowohl die
- Syntax als auch die Semantik der Konfigurationsdateien zu prüfen,
- können Sie versuchen, <code>httpd</code> als nicht-root-Benutzer
- zu starten. Wenn dabei keine Fehler auftreten, wird er versuchen, seine
- Sockets und Logdateien zu öffnen und fehlschlagen, da er nicht root
- ist (oder weil sich der gegenwärtig laufende <code>httpd</code>
- bereits diese Ports gebunden hat). Wenn er aus einem anderen Grund
- fehlschlägt, dann liegt wahrscheinlich ein Konfigurationsfehler vor.
- Der Fehler sollte behoben werden, bevor der unterbrechungsfreie Neustart
- angewiesen wird.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hup" id="hup">Neustarten</a></h2>
-
- <dl><dt>Signal: HUP</dt>
- <dd><code>apachectl -k restart</code></dd>
- </dl>
-
- <p>Das Senden des Signals <code>HUP</code> oder <code>restart</code>
- veranlaßt den Elternprozess, wie bei <code>TERM</code> alle seine
- Kinder zu beenden. Der Elternprozess beendet sich jedoch nicht. Er liest
- seine Konfigurationsdateien neu ein und öffnet alle Logdateien
- erneut. Dann erzeugt er einen neuen Satz Kindprozesse und setzt die
- Bedienung von Zugriffen fort.</p>
-
- <p>Benutzer von <code class="module"><a href="./mod/mod_status.html">mod_status</a></code> werden feststellen, dass
- die Serverstatistiken auf Null gesetzt werden, wenn ein <code>HUP</code>
- gesendet wurde.</p>
-
- <div class="note">Wenn Ihre Konfigurationsdatei einen Fehler enthält,
- während Sie einen Neustart anweisen, dann wird Ihr Elternprozess
- nicht neu starten, sondern sich mit einem Fehler beenden. Lesen Sie oben,
- wie Sie das vermeiden können.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="race" id="race">Anhang: Signale und Wettkampfsituationen</a></h2>
-
- <p>Vor der Version 1.2b9 des Apache existierten verschiedene
- <em>Wettkampfsituationen</em> (race conditions), die den Neustart und
- die Signale beeinflußt haben. (Eine einfache Beschreibung einer
- Wettkampfsituation lautet: es ist ein zeitabhängiges Problem; wenn
- etwas zum falschen Zeitpunkt erfolgt, wird es sich nicht wie erwartet
- verhalten.) Bei Architekturen mit dem "richtigen" Funktionsumfang
- haben wir so viele eliminiert wie wir nur konnten. Dennoch
- sollte beachtet werden, dass noch immer Wettkampfsituationen auf
- bestimmten Architekturen existieren.</p>
-
- <p>Bei Architekturen, die ein <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code> auf Platte verwenden,
- besteht die Gefahr, dass die Statustabelle beschädigt wird.
- Das kann zu "bind: Address already in use" ("bind: Adresse wird
- bereits verwendet", nach einem <code>HUP</code>) oder "long lost
- child came home!" ("Der verlorene Sohn ist heimgekehrt", nach einem
- <code>USR1</code>) führen. Ersteres ist ein schwerer Fehler,
- wärend letzteres lediglich bewirkt, dass der Server einen Eintrag
- in der Statustabelle verliert. So kann es ratsam sein, unterbrechungsfreie
- Neustarts zusammen mit einem gelegentlichen harten Neustart zu verwenden.
- Diese Probleme lassen sich nur sehr schwer umgehen, aber
- glücklicherweise benötigen die meisten Architekturen keine
- Statustabelle in Form einer Datei. Bitte lesen Sie für Architekturen,
- die sie benötigen, die Dokumentation zu <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code>.</p>
-
- <p>Alle Architekturen haben in jedem Kindprozess eine kleine
- Wettkampfsituation, welche die zweite und nachfolgende Anfragen
- einer persistenten HTTP-Verbindung (KeepAlive) umfaßt. Der Prozess
- kann nach dem Lesen der Anfragezeile aber vor dem Lesen der Anfrage-Header
- enden. Es existiert eine Korrektur, die für 1.2 zu spät kam.
- Theoretisch sollte das kein Problem darstellen, da
- der KeepAlive-Client derartige Ereignisse aufgrund von
- Netzwerk-Latenzzeiten und Auszeiten des Servers erwarten sollte.
- In der Praxis scheint keiner von beiden beeinflußt zu werden
- -- in einem Testfall wurde der Server zwanzig mal
- pro Sekunde neu gestartet, während Clients das Angebot abgegrast
- haben, ohne kaputte Bilder oder leere Dokumente zu erhalten.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/stopping.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/stopping.html.en b/docs/manual/stopping.html.en
deleted file mode 100644
index 1e67a4201f..0000000000
--- a/docs/manual/stopping.html.en
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Stopping and Restarting - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Stopping and Restarting</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document covers stopping and restarting Apache on
- Unix-like systems. Windows NT, 2000 and XP users should see
- <a href="platform/windows.html#winsvc">Running Apache as a
- Service</a> and Windows 9x and ME users should see <a href="platform/windows.html#wincons">Running Apache as a
- Console Application</a> for information on how to control
- Apache on those platforms.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introduction</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#term">Stop Now</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#graceful">Graceful Restart</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#hup">Restart Now</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#race">Appendix: signals and race conditions</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Introduction</a></h2>
-
- <p>In order to stop or restart Apache, you must send a signal to
- the running <code>httpd</code> processes. There are two ways to
- send the signals. First, you can use the unix <code>kill</code>
- command to directly send signals to the processes. You will
- notice many <code>httpd</code> executables running on your system,
- but you should not send signals to any of them except the parent,
- whose pid is in the <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>. That is to say you
- shouldn't ever need to send signals to any process except the
- parent. There are three signals that you can send the parent:
- <code><a href="#term">TERM</a></code>,
- <code><a href="#hup">HUP</a></code>, and
- <code><a href="#graceful">USR1</a></code>, which
- will be described in a moment.</p>
-
- <p>To send a signal to the parent you should issue a command
- such as:</p>
-
-<div class="example"><p><code>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</code></p></div>
-
- <p>The second method of signaling the <code>httpd</code> processes
- is to use the <code>-k</code> command line options: <code>stop</code>,
- <code>restart</code>, and <code>graceful</code>,
- as described below. These are arguments to the <a href="programs/httpd.html">httpd</a> binary, but we recommend that
- you send them using the <a href="programs/apachectl.html">apachectl</a> control script, which
- will pass them through to <code>httpd</code>.</p>
-
- <p>After you have signaled <code>httpd</code>, you can read about
- its progress by issuing:</p>
-
-<div class="example"><p><code>tail -f /usr/local/apache2/logs/error_log</code></p></div>
-
- <p>Modify those examples to match your <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code> and <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> settings.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="term" id="term">Stop Now</a></h2>
-
-<dl><dt>Signal: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p>Sending the <code>TERM</code> or <code>stop</code> signal to
- the parent causes it to immediately attempt to kill off all of its
- children. It may take it several seconds to complete killing off
- its children. Then the parent itself exits. Any requests in
- progress are terminated, and no further requests are served.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="graceful" id="graceful">Graceful Restart</a></h2>
-
-<dl><dt>Signal: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p>The <code>USR1</code> or <code>graceful</code> signal causes
- the parent process to <em>advise</em> the children to exit after
- their current request (or to exit immediately if they're not
- serving anything). The parent re-reads its configuration files and
- re-opens its log files. As each child dies off the parent replaces
- it with a child from the new <em>generation</em> of the
- configuration, which begins serving new requests immediately.</p>
-
- <div class="note">On certain platforms that do not allow <code>USR1</code> to
- be used for a graceful restart, an alternative signal may be used (such
- as <code>WINCH</code>). The command <code>apachectl graceful</code>
- will send the right signal for your platform.</div>
-
- <p>This code is designed to always respect the process control
- directive of the MPMs, so the number of processes and threads
- available to serve clients will be maintained at the appropriate
- values throughout the restart process. Furthermore, it respects
- <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code> in the
- following manner: if after one second at least <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code> new children have not
- been created, then create enough to pick up the slack. Hence the
- code tries to maintain both the number of children appropriate for
- the current load on the server, and respect your wishes with the
- <code class="directive">StartServers</code> parameter.</p>
-
- <p>Users of the <code class="module"><a href="./mod/mod_status.html">mod_status</a></code>
- will notice that the server statistics are <strong>not</strong>
- set to zero when a <code>USR1</code> is sent. The code was
- written to both minimize the time in which the server is unable
- to serve new requests (they will be queued up by the operating
- system, so they're not lost in any event) and to respect your
- tuning parameters. In order to do this it has to keep the
- <em>scoreboard</em> used to keep track of all children across
- generations.</p>
-
- <p>The status module will also use a <code>G</code> to indicate
- those children which are still serving requests started before
- the graceful restart was given.</p>
-
- <p>At present there is no way for a log rotation script using
- <code>USR1</code> to know for certain that all children writing
- the pre-restart log have finished. We suggest that you use a
- suitable delay after sending the <code>USR1</code> signal
- before you do anything with the old log. For example if most of
- your hits take less than 10 minutes to complete for users on
- low bandwidth links then you could wait 15 minutes before doing
- anything with the old log.</p>
-
- <div class="note">If your configuration file has errors
- in it when you issue a restart then your parent will not
- restart, it will exit with an error. In the case of graceful
- restarts it will also leave children running when it exits.
- (These are the children which are "gracefully exiting" by
- handling their last request.) This will cause problems if you
- attempt to restart the server -- it will not be able to bind to
- its listening ports. Before doing a restart, you can check the
- syntax of the configuration files with the <code>-t</code>
- command line argument (see <a href="programs/httpd.html">httpd</a>). This still will not
- guarantee that the server will restart correctly. To check the
- semantics of the configuration files as well as the syntax, you
- can try starting <code>httpd</code> as a non-root user. If there are no
- errors it will attempt to open its sockets and logs and fail
- because it's not root (or because the currently running <code>httpd</code>
- already has those ports bound). If it fails for any other
- reason then it's probably a config file error and the error
- should be fixed before issuing the graceful restart.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hup" id="hup">Restart Now</a></h2>
-
-<dl><dt>Signal: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p>Sending the <code>HUP</code> or <code>restart</code> signal to
- the parent causes it to kill off its children like in
- <code>TERM</code>, but the parent doesn't exit. It re-reads its
- configuration files, and re-opens any log files. Then it spawns a
- new set of children and continues serving hits.</p>
-
- <p>Users of <code class="module"><a href="./mod/mod_status.html">mod_status</a></code>
- will notice that the server statistics are set to zero when a
- <code>HUP</code> is sent.</p>
-
-<div class="note">If your configuration file has errors in it when you issue a
-restart then your parent will not restart, it will exit with an
-error. See above for a method of avoiding this.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="race" id="race">Appendix: signals and race conditions</a></h2>
-
- <p>Prior to Apache 1.2b9 there were several <em>race
- conditions</em> involving the restart and die signals (a simple
- description of race condition is: a time-sensitive problem, as
- in if something happens at just the wrong time it won't behave
- as expected). For those architectures that have the "right"
- feature set we have eliminated as many as we can. But it should
- be noted that there still do exist race conditions on certain
- architectures.</p>
-
- <p>Architectures that use an on disk <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code> have the potential
- to corrupt their scoreboards. This can result in the "bind:
- Address already in use" (after <code>HUP</code>) or "long lost
- child came home!" (after <code>USR1</code>). The former is a fatal
- error, while the latter just causes the server to lose a
- scoreboard slot. So it might be advisable to use graceful
- restarts, with an occasional hard restart. These problems are very
- difficult to work around, but fortunately most architectures do
- not require a scoreboard file. See the <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code> documentation for a
- architecture uses it.</p>
-
- <p>All architectures have a small race condition in each child
- involving the second and subsequent requests on a persistent
- HTTP connection (KeepAlive). It may exit after reading the
- request line but before reading any of the request headers.
- There is a fix that was discovered too late to make 1.2. In
- theory this isn't an issue because the KeepAlive client has to
- expect these events because of network latencies and server
- timeouts. In practice it doesn't seem to affect anything either
- -- in a test case the server was restarted twenty times per
- second and clients successfully browsed the site without
- getting broken images or empty documents. </p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/stopping.html.es b/docs/manual/stopping.html.es
deleted file mode 100644
index 43dbc34f7c..0000000000
--- a/docs/manual/stopping.html.es
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Iniciar y Parar el servidor Apache - Servidor HTTP Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p>
-<p class="apache">Versión 2.1 del Servidor HTTP Apache</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentación</a> &gt; <a href="./">Versión 2.1</a></div><div id="page-content"><div id="preamble"><h1>Iniciar y Parar el servidor Apache</h1>
-<div class="toplang">
-<p><span>Idiomas disponibles: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Este documento explica como iniciar y parar el servidor Apache
- en sistemas tipo Unix. Los usuarios de Windows NT, 2000 y XP
- deben consultar la sección <a href="platform/windows.html#winsvc">Ejecutar Apache como un
- servicio</a> y los usuario de Windows 9x y ME deben consultar <a href="platform/windows.html#wincons">Ejecutar Apache como una
- Aplicación de Consola</a> para obtener información
- sobre como controlar Apache en esas plataformas.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introducción</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#term">Parar Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#graceful">Reinicio Graceful</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#hup">Reiniciar Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#race">Apéndice: señales y race conditions</a></li>
-</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Introducción</a></h2>
-
- <p>Para parar y reiniciar Apache, hay que enviar la señal
- apropiada al proceso padre <code>httpd</code> que se esté
- ejecutando. Hay dos maneras de enviar estas señales. En
- primer lugar, puede usar el comando de Unix <code>kill</code> que
- envía señales directamente a los procesos. Puede que
- tenga varios procesos <code>httpd</code> ejecutandose en su
- sistema, pero las señales deben enviarse solamente al proceso
- padre, cuyo pid está especificado en la directiva <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>. Esto quiere decir que no
- debe necesitar enviar señales a ningún proceso excepto
- al proceso padre. Hay tres señales que puede enviar al
- proceso padre: <code><a href="#term">TERM</a></code>, <code><a href="#hup">HUP</a></code>, y <code><a href="#graceful">USR1</a></code>, que van a ser descritas a
- continuación.</p>
-
- <p>Para enviar una señal al proceso padre debe escribir un
- comando como el que se muestra en el ejemplo:</p>
-
-<div class="example"><p><code>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</code></p></div>
-
- <p>La segunda manera de enviar señales a los procesos
- <code>httpd</code> es usando las opciones de línea de
- comandos <code>-k</code>: <code>stop</code>, <code>restart</code>,
- y <code>graceful</code>, como se muestra más abajo. Estas
- opciones se le pueden pasar al binario <a href="programs/httpd.html">httpd</a>, pero se recomienda que se
- pasen al script de control <a href="programs/apachectl.html">apachectl</a>, que a su vez los
- pasará a <code>httpd</code>.</p>
-
- <p>Después de haber enviado las señales que desee a
- <code>httpd</code>, puede ver como progresa el proceso
- escribiendo:</p>
-
-<div class="example"><p><code>tail -f /usr/local/apache2/logs/error_log</code></p></div>
-
- <p>Modifique estos ejemplos para que coincidan con la
- configuración que tenga especificada en las directivas
- <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code> y <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> en su fichero principal de
- configuración.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="term" id="term">Parar Apache</a></h2>
-
-<dl><dt>Señal: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p>Enviar las señales <code>TERM</code> o <code>stop</code>
- al proceso padre hace que se intenten eliminar todos los procesos
- hijo inmediatamente. Esto puede tardar algunos minutos. Una vez
- que hayan terminado todos los procesos hijo, terminará el
- proceso padre. Cualquier petición en proceso terminará
- inmediatanmente, y ninguna petición posterior será
- atendida.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="graceful" id="graceful">Reinicio Graceful</a></h2>
-
-<dl><dt>Señal: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p>Las señales <code>USR1</code> o <code>graceful</code>
- hacen que el proceso padre <em>indique</em> a sus hijos que
- terminen después de servir la petición que estén
- atendiendo en ese momento (o de inmediato si no están
- sirviendo ninguna petición). El proceso padre lee de nuevo
- sus ficheros de configuración y vuelve a abrir sus ficheros
- log. Conforme cada hijo va terminando, el proceso padre lo va
- sustituyendo con un hijo de una nueva <em>generación</em> con
- la nueva configuración, que empeciezan a servir peticiones
- inmediatamente.</p>
-
- <div class="note">En algunas plataformas que no permiten usar
- <code>USR1</code> para reinicios graceful, puede usarse una
- señal alternativa (como <code>WINCH</code>). Tambien puede
- usar <code>apachectl graceful</code> y el script de control
- enviará la señal adecuada para su plataforma.</div>
-
- <p>Apache está diseñado para respetar en todo momento la
- directiva de control de procesos de los MPM, así como para
- que el número de procesos y hebras disponibles para servir a
- los clientes se mantenga en los valores adecuados durante el
- proceso de reinicio. Aún más, está diseñado
- para respetar la directiva <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code> de la siguiente
- manera: si después de al menos un segundo el nuevo hijo de la
- directiva <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code>
- no ha sido creado, entonces crea los suficientes para se atienda
- el trabajo que queda por hacer. Así, se intenta mantener
- tanto el número de hijos adecuado para el trabajo que el
- servidor tenga en ese momento, como respetar la configuración
- determinada por los parámetros de la directiva
- <code class="directive">StartServers</code>.</p>
-
- <p>Los usuarios del módulo <code class="module"><a href="./mod/mod_status.html">mod_status</a></code>
- notarán que las estadísticas del servidor
- <strong>no</strong> se ponen a cero cuando se usa la señal
- <code>USR1</code>. Apache fue escrito tanto para minimizar el
- tiempo en el que el servidor no puede servir nuevas peticiones
- (que se pondrán en cola por el sistema operativo, de modo que
- se no se pierda ningún evento), como para respetar sus
- parámetros de ajuste. Para hacer esto, tiene que guardar el
- <em>scoreboard</em> usado para llevar el registro de los procesos
- hijo a través de las distintas generaciones.</p>
-
- <p>El mod_status también usa una <code>G</code> para indicar
- que esos hijos están todavía sirviendo peticiones
- previas al reinicio graceful.</p>
-
- <p>Actualmente no existe ninguna manera de que un script con un
- log de rotación usando <code>USR1</code> sepa con seguridad
- que todos los hijos que se registraron en el log con anterioridad
- al reinicio han terminado. Se aconseja que se use un retardo
- adecuado después de enviar la señal <code>USR1</code>
- antes de hacer nada con el log antiguo. Por ejemplo, si la mayor
- parte las visitas que recibe de usuarios que tienen conexiones de
- baja velocidad tardan menos de 10 minutos en completarse, entoces
- espere 15 minutos antes de hacer nada con el log antiguo.</p>
-
- <div class="note">Si su fichero de configuración tiene errores cuando
- haga el reinicio, entonces el proceso padre no se reinciciará
- y terminará con un error. En caso de un reinicio graceful,
- también dejará a los procesos hijo ejecutandose mientras
- existan. (Estos son los hijos de los que se está saliendo de
- forma graceful y que están sirviendo sus últimas
- peticiones.) Esto provocará problemas si intenta reiniciar el
- servidor -- no será posible conectarse a la lista de puertos
- de escucha. Antes de reiniciar, puede comprobar que la sintaxis de
- sus ficheros de configuracion es correcta con la opción de
- línea de comandos <code>-t</code> (consulte <a href="programs/httpd.html">httpd</a>). No obstante, esto no
- garantiza que el servidor se reinicie correctamente. Para
- comprobar que no hay errores en los ficheros de
- configuración, puede intentar iniciar <code>httpd</code> con
- un usuario diferente a root. Si no hay errores, intentará
- abrir sus sockets y logs y fallará porque el usuario no es
- root (o porque el <code>httpd</code> que se está ejecutando
- en ese momento ya está conectado a esos puertos). Si falla
- por cualquier otra razón, entonces casi seguro que hay
- algún error en alguno de los ficheros de configuración y
- debe corregir ese o esos errores antes de hacer un reinicio
- graceful.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hup" id="hup">Reiniciar Apache</a></h2>
-
-<dl><dt>Señal: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p>El envío de las señales <code>HUP</code> o
- <code>restart</code> al proceso padre hace que los procesos hijo
- terminen como si le enviá ramos la señal
- <code>TERM</code>, para eliminar el proceso padre. La diferencia
- está en que estas señales vuelven a leer los archivos de
- configuración y vuelven a abrir los ficheros log. Se genera
- un nuevo conjunto de hijos y se continúa sirviendo
- peticiones.</p>
-
- <p>Los usuarios del módulo <code class="module"><a href="./mod/mod_status.html">mod_status</a></code>
- notarán que las estadísticas del servidor se ponen a
- cero cuando se envía la señal <code>HUP</code>.</p>
-
-<div class="note">Si su fichero de configuración contiene errores, cuando
-intente reiniciar, el proceso padre del servidor no se
-reiniciará, sino que terminará con un error. Consulte
-más arriba cómo puede solucionar este problema.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="race" id="race">Apéndice: señales y race conditions</a></h2>
-
- <p>Con anterioridad a la versión de Apache 1.2b9 había
- varias <em>race conditions</em> implicadas en las señales
- para parar y reiniciar procesos (una descripción sencilla de
- una race condition es: un problema relacionado con el momento en
- que suceden las cosas, como si algo sucediera en momento en que no
- debe, y entonces el resultado esperado no se corresponde con el
- obtenido). Para aquellas arquitecturas que tienen el conjunto de
- características "adecuadas", se han eliminado tantas race
- conditions como ha sido posible. Pero hay que tener en cuenta que
- todavía existen race conditions en algunas arquitecturas.</p>
-
- <p>En las arquitecturas que usan un <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code> en disco, existe la
- posibilidad de que se corrompan los scoreboards. Esto puede hacer
- que se produzca el error "bind: Address already in use"
- (después de usar<code>HUP</code>) o el error "long lost child
- came home!" (después de usar <code>USR1</code>). En el
- primer caso se trata de un error irrecuperable, mientras que en el
- segundo, solo ocurre que el servidor pierde un slot del
- scoreboard. Por lo tanto, sería aconsejable usar reinicios
- graceful, y solo hacer reinicios normales de forma
- ocasional. Estos problemas son bastante complicados de solucionar,
- pero afortunadamente casi ninguna arquitectura necesita un fichero
- scoreboard. Consulte la documentación de la directiva
- <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code> para ver
- las arquitecturas que la usan.</p>
-
- <p>Todas las arquitecturas tienen una pequeña race condition
- en cada proceso hijo implicada en la segunda y subsiguientes
- peticiones en una conexión HTTP persistente
- (KeepAlive). Puede ser que el servidor termine después de
- leer la línea de petición pero antes de leer cualquiera
- de las cebeceras de petición. Hay una solución que fue
- descubierta demasiado tarde para la incluirla en versión
- 1.2. En teoria esto no debe suponer ningún problema porque el
- cliente KeepAlive ha de esperar que estas cosas pasen debido a los
- retardos de red y a los timeouts que a veces dan los
- servidores. En la practica, parece que no afecta a nada más
- -- en una sesión de pruebas, un servidor se reinició
- veinte veces por segundo y los clientes pudieron navegar sin
- problemas por el sitio web sin encontrar problemas ni para
- descargar una sola imagen ni encontrar un solo enlace roto. </p>
-</div></div>
-<div class="bottomlang">
-<p><span>Idiomas disponibles: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" title="Español">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Módulos</a> | <a href="./mod/directives.html">Directivas</a> | <a href="./faq/">Preguntas Frecuentes</a> | <a href="./glossary.html">Glosario</a> | <a href="./sitemap.html">Mapa de este sitio web</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/stopping.html.ja.euc-jp b/docs/manual/stopping.html.ja.euc-jp
deleted file mode 100644
index b9d7032ced..0000000000
--- a/docs/manual/stopping.html.ja.euc-jp
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Ää»ß¤ÈºÆµ¯Æ° - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Ää»ß¤ÈºÆµ¯Æ°</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ç¤Ï Unix ¤ËÎà»÷¤·¤¿¥·¥¹¥Æ¥à¤Ç¤Î
- Apache ¤ÎÄä»ß¤ÈºÆµ¯Æ°¤Ë¤Ä¤¤¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹¡£
- Windows NT, 2000, XP ¥æ¡¼¥¶¤Ï<a href="platform/windows.html#winsvc">¥µ¡¼¥Ó¥¹¤È¤·¤Æ
- Apache ¤ò¼Â¹Ô¤¹¤ë</a>¤Ç¡¢Windows 9x, ME¥æ¡¼¥¶¤Ï<a href="platform/windows.html#wincons">¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤È¤·¤Æ
- Apache ¤ò¼Â¹Ô¤¹¤ë</a>¤Ç¡¢
- ¤³¤ì¤é¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Î»ÈÍÑÊýË¡¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#term">µÞ¤ÊÄä»ß</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#graceful">´Ë¤ä¤«¤ÊºÆµ¯Æ°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#hup">µÞ¤ÊºÆµ¯Æ°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#race">ÉÕÏ¿: ¥·¥°¥Ê¥ë¤È¶¥¹ç¾õÂÖ</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó</a></h2>
-
- <p>Apache ¤òÄä»ß¤·¤¿¤êºÆµ¯Æ°¤·¤¿¤ê¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë
- <code>httpd</code> ¥×¥í¥»¥¹¤Ë¥·¥°¥Ê¥ë¤òÁ÷¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¥·¥°¥Ê¥ë¤òÁ÷¤ë¤Ë¤ÏÆó¤Ä¤ÎÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£
- °ì¤ÄÌÜ¤Ï¥×¥í¥»¥¹¤ËľÀÜ¥·¥°¥Ê¥ë¤òÁ÷¤ë unix ¤Î <code>kill</code>
- ¥³¥Þ¥ó¥É¤ò»ÈÍѤ¹¤ëÊýË¡¤Ç¤¹¡£
- ¥·¥¹¥Æ¥à¤ò¸«¤ì¤Ð¤¿¤¯¤µ¤ó¤Î <code>httpd</code> ¤¬
- ¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¤Î¤Ëµ¤¤¬ÉÕ¤¯¤Ç¤·¤ç¤¦¤¬¡¢¥·¥°¥Ê¥ë¤òÁ÷¤ë¤Î¤Ï
- ¿Æ¥×¥í¥»¥¹¤À¤±¤Ç¡¢¤½¤ì°Ê³°¤Î¸Ä¡¹¤Î¥×¥í¥»¥¹¤Ë¤Ï
- ¥·¥°¥Ê¥ë¤òÁ÷¤é¤Ê¤¤¤Ç²¼¤µ¤¤¡£¤½¤Î¿Æ¥×¥í¥»¥¹¤Î pid ¤Ï
- <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>
- ¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¤Ä¤Þ¤ê¡¢¿Æ°Ê³°¤Î¥×¥í¥»¥¹¤Ë
- ¥·¥°¥Ê¥ë¤òÁ÷¤ëɬÍפ¹¤é¤Ê¤¤¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
- ¿Æ¥×¥í¥»¥¹¤ËÁ÷¤ë¤³¤È¤¬¤Ç¤­¤ë 3 ¼ïÎà¤Î¥·¥°¥Ê¥ë¤¬¤¢¤ê¤Þ¤¹:
- <code><a href="#term">TERM</a></code>,
- <code><a href="#hup">HUP</a></code>,
- <code><a href="#graceful">USR1</a></code>
- ¤Ç¤¹¡£¤³¤ì¤é¤ÎÀâÌÀ¤Ë¤Ä¤¤¤Æ¤Ï³¤­¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>¿Æ¥×¥í¥»¥¹¤Ë¥·¥°¥Ê¥ë¤òÁ÷¤ë¤Ë¤Ï¡¢
- ¼¡¤Î¤è¤¦¤Ê¥³¥Þ¥ó¥É¤òȯ¹Ô¤·¤Æ²¼¤µ¤¤:</p>
-
-<div class="example"><p><code>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</code></p></div>
-
- <p><code>httpd</code> ¥×¥í¥»¥¹¤Ë¥·¥°¥Ê¥ë¤òÁ÷¤ë 2 ÈÖÌܤÎÊýË¡¤Ï
- <code>-k</code> ¤È¤¤¤¦¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¤¹¡£
- ²¼¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢<code>stop</code>, <code>restart</code>,
- <code>graceful</code> ¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤é¤Ï <a href="programs/httpd.html">httpd</a> ¤Î°ú¿ô¤Ç¤¹¤¬¡¢
- À©¸æÍѤΥ¹¥¯¥ê¥×¥È <a href="programs/apachectl.html">apachectl</a> ¤ò
- »È¤¦¤³¤È¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£<a href="programs/apachectl.html">apachectl</a> ¤Ï¤½¤ì¤é¤Î°ú¿ô¤ò¤½¤Î¤Þ¤Þ
- <code>httpd</code> ¤ËÅϤ·¤Þ¤¹¡£</p>
-
- <p><code>httpd</code> ¤Ë¥·¥°¥Ê¥ë¤òÁ÷¤Ã¤¿¸å¡¢
- ¼Â¹Ô¾õ¶·¤ò¼¡¤Î¥³¥Þ¥ó¥É¤ÇÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
-<div class="example"><p><code>tail -f /usr/local/apache2/logs/error_log</code></p></div>
- <p>¤³¤³¤Ëµó¤²¤¿Îã¤Ï¡¢³Æ¼«¤Î
- <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>
- ¤È
- <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>
- ¤ÎÀßÄê¤ËŬ¹ç¤¹¤ë¤è¤¦¤ËŬµ¹½¤Àµ¤·¤Æ²¼¤µ¤¤¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="term" id="term">µÞ¤ÊÄä»ß</a></h2>
-
-<dl><dt>¥·¥°¥Ê¥ë: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p><code>TERM</code> ¤¢¤ë¤¤¤Ï <code>stop</code>
- ¥·¥°¥Ê¥ë¤ò¿Æ¥×¥í¥»¥¹¤ËÁ÷¤ë¤È¡¢Â¨ºÂ¤Ë»Ò¥×¥í¥»¥¹Á´¤Æ¤ò kill ¤·¤è¤¦¤È¤·¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤ò´°Á´¤Ë kill ¤·½ª¤ï¤ë¤Þ¤Ç¤Ë¿ôÉ䫤«¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¤½¤Î¸å¡¢¿Æ¥×¥í¥»¥¹¼«¿È¤¬½ªÎ»¤·¤Þ¤¹¡£
- ½èÍýÃæ¤Î¥ê¥¯¥¨¥¹¥È¤ÏÁ´¤ÆÄä»ß¤µ¤ì¡¢¤â¤Ï¤ä¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë
- ±þÅú¤Ï¤µ¤ì¤Þ¤»¤ó¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="graceful" id="graceful">´Ë¤ä¤«¤ÊºÆµ¯Æ°</a></h2>
-
-<dl><dt>¥·¥°¥Ê¥ë: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p>¿Æ¥×¥í¥»¥¹¤Ï <code>USR1</code> ¤¢¤ë¤¤¤Ï <code>graceful</code>
- ¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤ë¤È¡¢»Ò¥×¥í¥»¥¹¤Ë¸½ºß¤Î¥ê¥¯¥¨¥¹¥È¤Î½èÍý¤Î¸å¤Ë½ªÎ»¤¹¤ë
- (¤¢¤ë¤¤¤Ï²¿¤â¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤¹¤°¤Ë½ªÎ»¤¹¤ë)
- ¤è¤¦¤Ë<em>½õ¸À</em>¤·¤Þ¤¹¡£
- ¿Æ¥×¥í¥»¥¹¤ÏÀßÄê¥Õ¥¡¥¤¥ë¤òºÆÆɹþ¤·¤Æ¡¢¥í¥°¥Õ¥¡¥¤¥ë¤ò³«¤­Ä¾¤·¤Þ¤¹¡£
- »Ò¥×¥í¥»¥¹¤¬½ù¡¹¤Ë¤Ê¤¯¤Ê¤ë¤Ë½¾¤Ã¤Æ¡¢
- ¿·¤·¤¤<em>À¤Âå</em>¤ÎÀßÄê¤Ë¤è¤ë»Ò¥×¥í¥»¥¹¤ËÃÖ¤­´¹¤¨¤Æ¤¤¤­¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¤³¤ì¤é¤¬¿·¤¿¤Ê¥ê¥¯¥¨¥¹¥È¤Ë¨ºÂ¤Ë±þÅú¤·»Ï¤á¤Þ¤¹¡£</p>
-
- <div class="note">ÆÃÄê¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Ï <code>USR1</code>
- ¤ò´Ë¤ä¤«¤ÊºÆµ¯Æ°¤Î¤¿¤á¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤Î¥·¥°¥Ê¥ë
- (Î㤨¤Ð WINCH) ¤¬»ÈÍѤǤ­¤ë¤Ç¤·¤ç¤¦¡£
- <code>apachectl graceful</code>
- ¤È¤¤¤¦¥³¥Þ¥ó¥É¤Ï¥×¥é¥Ã¥È¥Û¡¼¥à¤Ë¹ç¤Ã¤¿¥·¥°¥Ê¥ë¤òÁ÷¤ê¤Þ¤¹¡£</div>
-
- <p>¤³¤Î¥³¡¼¥É¤Ï¾ï¤Ë
- MPM ¤Î¥×¥í¥»¥¹À©¸æ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÀßÄê¤ò½Å»ë¤·¤Þ¤¹¤Î¤Ç¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤Î¥ê¥¯¥¨¥¹¥È¤ò°·¤¦¥×¥í¥»¥¹¤È¥¹¥ì¥Ã¥É¤Î¿ô¤òºÆµ¯Æ°¤Î½èÍýÃæ¤â
- ŬÀÚ¤ÊÃͤ˰ݻý¤µ¤ì¤Þ¤¹¡£¡£¤Þ¤¿¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Æ
- <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code>
- ¤ò¼é¤ê¤Þ¤¹:
- ¾¯¤Ê¤¯¤È¤â 1 Éøå¤Ë <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code> ¸Ä¤Î¿·¤·¤¤»Ò¥×¥í¥»¥¹¤¬
- À¸À®¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¤½¤Î¿ô¤Ë¤Ê¤ë¤è¤¦¤ËŬµ¹¥×¥í¥»¥¹¤òÀ¸À®¤·¤Þ¤¹¡£
- ¤³¤ÎµóÆ°¤Ï¸½ºß¤ÎÉé²Ù¤ËÂФ·¤ÆŬÀÚ¤Ê»Ò¥×¥í¥»¥¹¤Î¿ô¤È
- <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code> ¥Ñ¥é¥á¡¼¥¿¤Ç¤Î
- ´õ˾¤Î¿ô¤ÎξÊý¤ò°Ý»ý¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="./mod/mod_status.html">mod_status</a></code> ¤ò
- »ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢<code>USR1</code> ¥·¥°¥Ê¥ë¤¬Á÷¤é¤ì¤¿ºÝ¤Ë
- ¥µ¡¼¥ÐÅý·×¤¬¥¼¥í¤Ë<strong>ÀßÄꤵ¤ì¤Ê¤¤</strong>¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
- ¥µ¡¼¥Ð¤¬¿·¤·¤¤¥ê¥¯¥¨¥¹¥È¤Ë±þÅúÉÔǽ¤Ê»þ´Ö¤òºÇ¾®¤Ë¤¹¤ë¤è¤¦¤Ë
- (¥ê¥¯¥¨¥¹¥È¤Ï OS ¤Ë¤è¤Ã¤Æ¥­¥å¡¼¤ËÄɲ䵤ì¤ë¤Î¤ÇÀäÂФËʶ¼º¤Ï¤·¤Þ¤»¤ó)¡¢
- ¤Þ¤¿Æ±»þ¤Ë¡¢´õ˾¤Î¥Á¥å¡¼¥Ë¥ó¥°¥Ñ¥é¥á¡¼¥¿¤ò¼é¤ë¤è¤¦¤Ë
- ¥³¡¼¥É¤Ï½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤³¤Î¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡¢À¤Âå¤ò¤Þ¤¿¤¬¤Ã¤¿Á´»Ò¥×¥í¥»¥¹¤ÎÄÉÀפ˻Ȥï¤ì¤Æ¤¤¤ë
- <em>¥¹¥³¥¢¥Ü¡¼¥É</em>¤ò°Ý»ý¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>status ¥â¥¸¥å¡¼¥ë¤Ï¡¢´Ë¤ä¤«¤ÊºÆµ¯Æ°°ÊÁ°¤«¤é³«»Ï¤·¤Æ
- ¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤·Â³¤±¤Æ¤¤¤ë»Ò¥×¥í¥»¥¹¤òÆÃÄꤹ¤ë¤¿¤á¤Ë¡¢
- <code>G</code> ¤ò»È¤¦¤³¤È¤â¤·¤Þ¤¹¡£</p>
-
- <p>¸½ºß¡¢<code>USR1</code> ¤ò»È¤¦¥í¥°°ÜÆ°¥¹¥¯¥ê¥×¥È¤Ç¤Ï¡¢
- ºÆµ¯Æ°Á°¤Î»Ò¥×¥í¥»¥¹¤¬¥í¥°¤ò½ñ¤­½ª¤ï¤Ã¤¿¤³¤È¤ò³Î¾Ú¤¹¤ëÊýË¡¤¬
- ¤¢¤ê¤Þ¤»¤ó¡£¸Å¤¤¥í¥°¤ËÂФ·¤Æ²¿¤«¤¹¤ëÁ°¤Ë¡¢
- <code>USR1</code> ¥·¥°¥Ê¥ë¤òÁ÷¤Ã¤¿¸å¤¤¤¯¤é¤«Å¬Åö¤Ê»þ´ÖÂԤĤ³¤È¤ò
- Äó°Æ¤·¤Þ¤¹¡£Î㤨¤Ð¡¢ÂÓ°è¤Î¶¹¤¤ÄÌ¿®Ï©¤Î¥æ¡¼¥¶¤Î¥ê¥¯¥¨¥¹¥È¤Î¤Û¤È¤ó¤É¤¬ 10
- ʬ°Ê²¼¤Ç´°Î»¤·¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤¬Ê¬¤«¤Ã¤Æ¤¤¤ì¤Ð¡¢
- ¸Å¤¤¥í¥°¤Ë²¿¤«¤¹¤ëÁ°¤Ë 15 ʬÂԤĤȤ¤¤¦¤³¤È¤Ç¤¹¡£</p>
-
- <div class="note">ºÆµ¯Æ°»þ¤ËÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸í¤ê¤¬¤¢¤ë¤È¡¢
- ¿Æ¥×¥í¥»¥¹¤ÏºÆµ¯Æ°¤»¤º¤Ë¥¨¥é¡¼¤È¤È¤â¤Ë½ªÎ»¤·¤Þ¤¹¡£
- ´Ë¤ä¤«¤ÊºÆµ¯Æ°¤Î¾ì¹ç¤Ï¡¢¿Æ¥×¥í¥»¥¹¤¬½ªÎ»¤·¤¿¸å¤Ç¤â»Ò¥×¥í¥»¥¹¤¬
- ¼Â¹Ô¤µ¤ì¤¿¤Þ¤ÞÊüÃÖ¤µ¤ì¤¿¤ê¤â¤·¤Þ¤¹¡£
- (ºÇ¸å¤Î¥ê¥¯¥¨¥¹¥È¤ò½èÍý¤·¤¿¸å¡Ö´Ë¤ä¤«¤Ë½ªÎ»¡×¤¹¤ë
- »Ò¥×¥í¥»¥¹¤È¤Ê¤ê¤Þ¤¹¡£)
- ¥µ¡¼¥Ð¤òºÆµ¯Æ°¤¹¤ëºÝ¤Ë¡¢¤³¤ì¤¬ÌäÂê¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó
- -- ¥µ¡¼¥Ð¤Ï listen ¤¹¤ë¥Ý¡¼¥È¤Ë¥Ð¥¤¥ó¥É¤Ç¤­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ºÆµ¯Æ°¤¹¤ëÁ°¤Ë¡¢ÀßÄê¥Õ¥¡¥¤¥ë¤Î¹½Ê¸¤ò <code>-t</code>
- ¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô
- (<a href="programs/httpd.html">httpd</a> ¤ò¤´Í÷²¼¤µ¤¤)
- ¤ò»È¤Ã¤Æ¸¡¾Ú¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ÀßÄê¥Õ¥¡¥¤¥ë¤Î°Ọ̃Ū¤ÊÆâÍƤò¹½Ê¸¤ÈƱÍͤ˸¡¾Ú¤·¤¿¤¤¾ì¹ç¤Ï¡¢
- Èó root ¥æ¡¼¥¶¤Ç <code>httpd</code> ¤òµ¯Æ°¤·¤è¤¦¤È¤¹¤ì¤Ð¤ï¤«¤ê¤Þ¤¹¡£
- ¤â¤·¥¨¥é¡¼¤¬¤Ê¤±¤ì¤Ð¡¢¥½¥±¥Ã¥È¤ä¥í¥°¤ò³«¤³¤¦¤È¤·¤Æ
- root ¤Ç¤Ê¤¤¤¿¤á
- (¤â¤·¤¯¤Ï¼Â¹ÔÃæ¤Î <code>httpd</code>
- ¤¬´û¤ËɬÍפʥݡ¼¥È¤Ë¥Ð¥¤¥ó¥É¤·¤Æ¤¤¤ë¤¿¤á)
- ¤Ë¼ºÇÔ¤¹¤ë¤Ç¤·¤ç¤¦¡£
- ¤³¤ì°Ê³°¤ÎÍýͳ¤Çµ¯Æ°¤Ë¼ºÇÔ¤·¤¿¤Î¤Ç¤¢¤ì¤Ð¡¢
- ¤½¤ì¤ÏÀßÄê¥Õ¥¡¥¤¥ë¤Î¥¨¥é¡¼¤Ç¡¢
- ´Ë¤ä¤«¤ÊºÆµ¯Æ°¤ò¹Ô¤¦Á°¤Ë¤½¤Î¸í¤ê¤ò½¤Àµ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hup" id="hup">µÞ¤ÊºÆµ¯Æ°</a></h2>
-
-<dl><dt>¥·¥°¥Ê¥ë: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p><code>HUP</code> ¤¢¤ë¤¤¤Ï <code>restart</code> ¥·¥°¥Ê¥ë¤ò¿Æ¥×¥í¥»¥¹¤ËÁ÷¤ë¤È¡¢
- <code>TERM</code> ¤ÈƱÍÍ¤Ë»Ò¥×¥í¥»¥¹¤ò kill ¤·¤Þ¤¹¤¬¡¢
- ¿Æ¥×¥í¥»¥¹¤Ï½ªÎ»¤·¤Þ¤»¤ó¡£
- ÀßÄê¥Õ¥¡¥¤¥ë¤òºÆÆɹþ¤·¤Æ¡¢¥í¥°¥Õ¥¡¥¤¥ëÁ´¤Æ¤ò³«¤­Ä¾¤·¤Þ¤¹¡£
- ¤½¤Î¸å¡¢¿·¤·¤¤»Ò¥×¥í¥»¥¹¤òµ¯Æ°¤·¤Æ±þÅú¤ò³¤±¤Þ¤¹¡£</p>
-
- <p><code class="module"><a href="./mod/mod_status.html">mod_status</a></code>
- ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢<code>HUP</code> ¤¬Á÷¤é¤ì¤¿¾ì¹ç¤Ë
- ¥µ¡¼¥ÐÅý·×¤¬¥¼¥í¤ËÀßÄꤵ¤ì¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <div class="note">ºÆµ¯Æ°»þ¤ËÀßÄê¥Õ¥¡¥¤¥ë¤Ë¸í¤ê¤¬¤¢¤ë¤È¡¢
- ¿Æ¥×¥í¥»¥¹¤ÏºÆµ¯Æ°¤»¤º¤Ë¥¨¥é¡¼¤È¤È¤â¤Ë½ªÎ»¤·¤Þ¤¹¡£
- ¤³¤ì¤òÈò¤±¤ë¤Ë¤Ï¼¡¤ÎÊýË¡¤ò¤´Í÷²¼¤µ¤¤¡£</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="race" id="race">ÉÕÏ¿: ¥·¥°¥Ê¥ë¤È¶¥¹ç¾õÂÖ</a></h2>
-
- <p>Apache 1.2b9 °ÊÁ°¤Ï¡¢ºÆµ¯Æ°¤äÄä»ß¤Î¥·¥°¥Ê¥ë¤ò´Þ¤à<em>¶¥¹ç¾õÂÖ</em>
- (¶¥¹ç¾õÂÖ¤ò´Êñ¤ËÀâÌÀ¤¹¤ë¤È: ¥¿¥¤¥ß¥ó¤Ë¥°¤è¤ëÌäÂê¤Ç¡¢
- ¶ñ¹ç¤Î°­¤¤»þ´ÖÂӤˤÁ¤ç¤¦¤É²¿¤«¤¬µ¯¤³¤ë¤ÈͽÁÛ³°¤ÎÆ°ºî¤ò¤¹¤ë
- ¤è¤¦¤Ê¤³¤È¤ò»Ø¤·¤Þ¤¹) ¤¬¤¢¤ê¤Þ¤·¤¿¡£
- ¡ÖÀµ¤·¤¤¡×µ¡Ç½¤ò»ý¤Ã¤Æ¤¤¤ë¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ï¡¢¤Ç¤­¤ë¤À¤±
- ¤³¤Î¤è¤¦¤Ê¤³¤È¤¬µ¯¤³¤é¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
- ¤·¤«¤·¡¢¤¢¤ë¼ï¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ï¶¥¹ç¾õÂÖ¤Ï̤¤À³Î¼Â¤Ëµ¯¤³¤ê¤¨¤ë
- ¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <p>¥Ç¥£¥¹¥¯¾å¤Ç
- <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code>
- ¤ò»ÈÍѤ·¤Æ¤¤¤ë¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ï¡¢
- ÀøºßŪ¤Ë¥¹¥³¥¢¥Ü¡¼¥É¤¬²õ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
- ¥¹¥³¥¢¥Ü¡¼¥É¤¬²õ¤ì¤¿¾ì¹ç¤Ï¡¢
- "bind: Address already in use" (<code>HUP</code> ¸å) ¤ä
- "long lost child came home!" (<code>USR1</code> ¸å)
- ¤È¤¤¤Ã¤¿·ë²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£
- Á°¼Ô¤ÏÃ×̿Ū¤Ê¥¨¥é¡¼¤Ç¤¹¤¬¡¢
- ¸å¼Ô¤Ï¥¹¥³¥¢¥Ü¡¼¥É¥¹¥í¥Ã¥È¤ò¼º¤¦¤À¤±¤Ç¤¹¡£
- ¤Ç¤¹¤«¤é´Ë¤ä¤«¤ÊºÆµ¯Æ°¤Ï¡¢¤¿¤Þ¤Ë³Î¼Â¤ÊºÆµ¯Æ° (HUP)
- ¤âÊ»ÍѤ·¤Æ»È¤Ã¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
- ¤³¤ì¤é¤ÎÌäÂê¤ò¹îÉþ¤¹¤ë¤Î¤ÏÈó¾ï¤ËÆñ¤·¤¤¤Î¤Ç¤¹¤¬¡¢
- ¹¬¤¤¤Ê¤³¤È¤ËÂçÉôʬ¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ï¥¹¥³¥¢¥Ü¡¼¥É¤Î¥Õ¥¡¥¤¥ë¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£
- ¤³¤ì¤ò»ÈÍѤ¹¤ë¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ï¡¢
- <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code>
- ¤ò¤´Í÷²¼¤µ¤¤¡£</p>
-
- <p>Á´¤Æ¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤ª¤¤¤Æ¡¢¸Ä¡¹¤Î»Ò¥×¥í¥»¥¹¤Ç
- ·Ñ³Ū¤Ê HTTP ¥³¥Í¥¯¥·¥ç¥ó (KeepAlive)
- ¤Ë´Ø¤¹¤ë¾®¤µ¤Ê¶¥¹ç¾õÂÖ¤¬µ¯¤³¤ê¤¨¤Þ¤¹¡£
- ¥ê¥¯¥¨¥¹¥È¹Ô¤òÆɤó¤À¸å¡¢¤½¤·¤Æ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤òÆɤàÁ°¤Ë
- »Ò¥×¥í¥»¥¹¤Ï½ªÎ»¤¹¤ë¤«¤âÃΤì¤Þ¤»¤ó¡£
- ¤³¤ì¤ËÂФ¹¤ë½¤Àµ¤¬¤¢¤ê¤Þ¤¹¤¬ 1.2 ¤Ç½¤Àµ¤¹¤ë¤Ë¤Ïȯ¸«¤¬ÃÙ¤¹¤®¤Þ¤·¤¿¡£
- ÍýÏÀŪ¤Ë¤Ï¡¢¤³¤ì¤ÏÌäÂê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
- ¤Ê¤¼¤Ê¤é KeepAlive ¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ï¡¢¥Í¥Ã¥È¥ï¡¼¥¯ÃÙ±ä¤ä
- ¥µ¡¼¥Ð¤Î¥¿¥¤¥à¥¢¥¦¥È¤Ê¤É¤ËÈ÷¤¨¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤«¤é¤Ç¤¹¡£
- ¼ÂºÝ¤Ë¤â²¿¤«±Æ¶Á¤¬¤¢¤ë¤è¤¦¤Ë¤Ï¸«¤¨¤Þ¤»¤ó
- -- ¥Æ¥¹¥È¥±¡¼¥¹¤Ç¥µ¡¼¥Ð¤ò 1 ÉÃ´Ö¤Ë 20 ²óºÆµ¯Æ°¤·¤Æ¤â
- ¥¯¥é¥¤¥¢¥ó¥È¤Ï²õ¤ì¤¿²èÁü¤ä¶õ¤Î¥É¥­¥å¥á¥ó¥È¤ò¼õ¤±¼è¤ë¤³¤È¤Ê¤¯
- Àµ¾ï¤Ë±ÜÍ÷¤Ç¤­¤Æ¤¤¤Þ¤¹¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Espa«Ðol">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/stopping.html.ko.euc-kr b/docs/manual/stopping.html.ko.euc-kr
deleted file mode 100644
index 4365ffbb4f..0000000000
--- a/docs/manual/stopping.html.ko.euc-kr
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Áß´Ü°ú Àç½ÃÀÛ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Áß´Ü°ú Àç½ÃÀÛ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â À¯´Ð½º·ù ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ Áß´ÜÇÏ°í Àç½ÃÀÛÇÏ´Â
- ³»¿ëÀ» ´ã°íÀÖ´Ù. À©µµ¿ìÁî NT, 2000, XP »ç¿ëÀÚ´Â <a href="platform/windows.html#winsvc">¼­ºñ½º·Î ¾ÆÆÄÄ¡
- ½ÇÇàÇϱâ</a>¿¡¼­, À©µµ¿ìÁî 9x¿Í ME »ç¿ëÀÚ´Â <a href="platform/windows.html#wincons">ÄÝ¼Ö ÇÁ·Î±×·¥À¸·Î
- ¾ÆÆÄÄ¡ ½ÇÇàÇϱâ</a>¿¡¼­ Ç÷¡Æûº° ¾ÆÆÄÄ¡ Á¶ÀÛ¹ýÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">¼Ò°³</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#term">´çÀå Áß´Ü</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#graceful">Á¡ÀÝÀº Àç½ÃÀÛ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#hup">´çÀå Àç½ÃÀÛ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#race">ºÎ·Ï: ½Ã±×³Î°ú ·¹À̽º ÄÁµð¼Ç</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="programs/httpd.html">httpd</a></li><li><a href="programs/apachectl.html">apachectl</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">¼Ò°³</a></h2>
-
- <p>¾ÆÆÄÄ¡¸¦ Áß´ÜÇÏ°í Àç½ÃÀÛÇÏ·Á¸é ½ÇÇàÇÏ°í ÀÖ´Â
- <code>httpd</code> ÇÁ·Î¼¼½º¿¡ ½Ã±×³ÎÀ» º¸³»¾ß ÇÑ´Ù. ½Ã±×³ÎÀ»
- º¸³»´Â ¹æ¹ýÀº µÎ°¡Áö´Ù. Çϳª´Â À¯´Ð½º <code>kill</code>
- ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º¿¡ Á÷Á¢ ½Ã±×³ÎÀ» º¸³»´Â ¹æ¹ýÀÌ´Ù.
- ½Ã½ºÅÛ¿¡ ¸¹Àº <code>httpd</code>°¡ ½ÇÇàµÇÁö¸¸, <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>¿¡ pid°¡ ±â·ÏµÈ ºÎ¸ð¿Ü¿¡
- ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ½Ã±×³Î(signal)À» º¸³»¸é ¾ÈµÈ´Ù. Áï, ºÎ¸ðÀÌ¿Ü¿¡
- ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ½Ã±×³ÎÀ» º¸³¾ ÇÊ¿ä°¡ ¾ø´Ù´Â ¸»ÀÌ´Ù. ºÎ¸ð¿¡°Ô
- º¸³¾ ¼ö ÀÖ´Â ½Ã±×³ÎÀº ¼¼°¡Áö·Î, ÀÌÁ¦ ¼³¸íÇÒ <code><a href="#term">TERM</a></code>, <code><a href="#hup">HUP</a></code>, <code><a href="#graceful">USR1</a></code>ÀÌ´Ù.</p>
-
- <p>´ÙÀ½°ú °°ÀÌ ºÎ¸ð¿¡°Ô ½Ã±×³ÎÀ» º¸³½´Ù:</p>
-
-<div class="example"><p><code>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</code></p></div>
-
- <p><code>httpd</code> ÇÁ·Î¼¼½º¿¡°Ô ½Ã±×³ÎÀ» º¸³»´Â ´Ù¸¥ ¹æ¹ýÀº
- ¸í·ÉÇà ¿É¼Ç <code>-k</code>¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¾Æ·¡¼­ ¼³¸íÇÒ
- <code>stop</code>, <code>restart</code>, <code>graceful</code>˼
- <a href="programs/httpd.html">httpd</a> ½ÇÇàÆÄÀÏÀÇ ¾Æ±Ô¸ÕÆ®µéÀÌ´Ù.
- ±×·¯³ª ÀÌ ¾Æ±Ô¸ÕÆ®µé·Î <code>httpd</code>¸¦ ½ÇÇàÇÏ´Â, <a href="programs/apachectl.html">apachectl</a> ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÏ±æ ±ÇÇÑ´Ù.</p>
-
- <p><code>httpd</code>¿¡ ½Ã±×³ÎÀ» º¸³½ÈÄ, ´ÙÀ½ ¸í·É¾î·Î
- ÁøÇà»óȲÀ» ¾Ë ¼ö ÀÖ´Ù:</p>
-
-<div class="example"><p><code>tail -f /usr/local/apache2/logs/error_log</code></p></div>
-
- <p>À§ ¿¹¸¦ ´ç½ÅÀÇ <code class="directive"><a href="./mod/core.html#serverroot">ServerRoot</a></code>¿Í <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code> ¼³Á¤¿¡ ¾Ë¸Â°Ô ¼öÁ¤Ç϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="term" id="term">´çÀå Áß´Ü</a></h2>
-
-<dl><dt>½Ã±×³Î: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p><code>TERM</code>À̳ª <code>stop</code> ½Ã±×³ÎÀ» ºÎ¸ð¿¡°Ô
- º¸³»¸é Áï½Ã ¸ðµç ÀÚ½ÄÀ» Á×ÀδÙ. ÀÚ½ÄÀ» ¿ÏÀüÈ÷ Á×À̴µ¥´Â
- ¸î ÃÊ°¡ °É¸± ¼ö ÀÖ´Ù. ±×·±ÈÄ ºÎ¸ð°¡ Á¾·áÇÑ´Ù. ó¸®ÁßÀÎ ¿äûÀº
- Áߴܵǰí, ´õ ÀÌ»ó ¿äûÀ» ¹ÞÁö¾Ê´Â´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="graceful" id="graceful">Á¡ÀÝÀº Àç½ÃÀÛ</a></h2>
-
-<dl><dt>½Ã±×³Î: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p><code>USR1</code>À̳ª <code>graceful</code> ½Ã±×³ÎÀ»
- ºÎ¸ð¿¡°Ô º¸³»¸é ºÎ¸ð ÇÁ·Î¼¼½º´Â Àڽĵ鿡°Ô ÇöÀç ¿äûÀ»
- ó¸®ÇÑÈÄ Á¾·áÇ϶ó°í (ȤÀº ÇöÀç ¾Æ¹«°Íµµ ó¸®ÇÏÁö ¾Ê´Ù¸é
- Áï½Ã Á¾·áÇ϶ó°í) <em>Á¶¾ðÇÑ´Ù</em>. ºÎ¸ð´Â ¼³Á¤ÆÄÀÏÀ»
- ´Ù½ÃÀÐ°í ·Î±×ÆÄÀϵµ ´Ù½Ã ¿¬´Ù. ÀÚ½ÄÀÌ Á×À»¶§¸¶´Ù ºÎ¸ð´Â
- Á×Àº ÀڽĴë½Å »õ·Î¿î ¼³Á¤ <em>¼¼´ë</em>¿¡ ±âÃÊÇÑ ÀÚ½ÄÀ»
- ½ÇÇàÇÏ¿© Áï½Ã ¿äûÀ» ó¸®ÇÏ°Ô ÇÑ´Ù.</p>
-
- <div class="note">Á¡ÀÝÀº Àç½ÃÀÛ(graceful restart)À¸·Î <code>USR1</code>À»
- »ç¿ëÇÒ ¼ö ¾ø´Â Ç÷¡Æû¿¡¼­´Â ´ë½Å (<code>WINCH</code>¿Í °°Àº)
- ´Ù¸¥ ½Ã±×³ÎÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <code>apachectl graceful</code>Àº
- Ç÷¡Æû¿¡ ¾Ë¸ÂÀº ½Ã±×³ÎÀ» º¸³½´Ù.</div>
-
- <p>Á¡ÀÝÀº Àç½ÃÀÛÀº Ç×»ó MPMÀÇ ÇÁ·Î¼¼½º Á¶Àý Áö½Ã¾î ¼³Á¤À»
- °í·ÁÇÏ¿©, Àç½ÃÀÛµ¿¾È Ŭ¶óÀ̾ðÆ®¸¦ ¼­ºñ½ºÇÏ´Â ÇÁ·Î¼¼½º³ª ¾²·¹µå°¡
- Àû´çÇÑ ¼ö¸¦ À¯ÁöÇϵµ·Ï ¼³°èµÇ¾ú´Ù. °Ô´Ù°¡ <code class="directive"><a href="./mod/mpm_common.html#startservers">StartServers</a></code>´Â, ÀÏÃÊ ÈÄ
- ÃÖ¼ÒÇÑ StartServers¸¸Å­ »õ·Î¿î ÀÚ½ÄÀÌ ¾È¸¸µé¾îÁö¸é ÀÚ½ÄÀÌ
- StartServers °³°¡ µÇµµ·Ï »õ·Î ¸¸µç´Ù. Áï, ÇÁ·Î±×·¥Àº ¼­¹öÀÇ
- ÇöÀç ºÎÇÏ¿¡ ¾Ë¸ÂÀº ÀÚ½ÄÀÇ °³¼ö¸¦ À¯ÁöÇϸç,
- <code class="directive">StartServers</code> ÆĶó¹ÌÅÍ·Î ÁöÁ¤ÇÑ ´ç½ÅÀÇ
- ±â´ë¸¦ Á¸ÁßÇÑ´Ù.</p>
-
- <p><code class="module"><a href="./mod/mod_status.html">mod_status</a></code> »ç¿ëÀÚ´Â <code>USR1</code>À»
- ¹ÞÀ»¶§ ¼­¹ö Åë°è°¡ 0ÀÌ µÇÁö <strong>¾ÊÀ½À»</strong> ºÃÀ»
- °ÍÀÌ´Ù. ¼­¹ö´Â »õ·Î¿î ¿äûÀ» (¿î¿µÃ¼Á¦´Â À̵éÀ» Å¥¿¡ ´ã¾Æ¼­
- ¾î¶² °æ¿ì¿¡µµ ÀÒ¾î¹ö¸®Áö ¾Ê´Â´Ù) ó¸®ÇÏÁö ¸øÇÏ´Â ½Ã°£À»
- ÃÖ¼ÒÈ­ÇÏ°í ´ç½ÅÀÇ Æ©´× ÆĶó¹ÌÅ͸¦ Á¸ÁßÇϵµ·Ï ¸¸µé¾îÁ³´Ù.
- À̸¦ À§ÇØ ¼¼´ë°£ ¸ðµç ÀÚ½ÄÀ» ±â·ÏÇÏ´Â <em>scoreboard</em>¸¦
- À¯ÁöÇÑ´Ù.</p>
-
- <p>status ¸ðµâÀº ¶ÇÇÑ Á¡ÀÝÀº Àç½ÃÀÛ Àü¿¡ ½ÃÀÛÇÏ¿© ¾ÆÁ÷µµ
- ¿äûÀ» ó¸®ÇÏ°í ÀÖ´Â ÀÚ½ÄÀ» <code>G</code>·Î ¾Ë·ÁÁØ´Ù.</p>
-
- <p>ÇöÀç·Î´Â <code>USR1</code>À» »ç¿ëÇÏ´Â ·Î±×¼øȯ ½ºÅ©¸³Æ®°¡
- Àç½ÃÀÛÀü¿¡ ¸ðµç ÀÚ½ÄÀÌ ·Î±×ÀÛ¼ºÀ» ¸¶ÃÆ´ÂÁö ¾Ë ¼ö ÀÖ´Â
- ¹æ¹ýÀÌ ¾ø´Ù. ¿ì¸®´Â <code>USR1</code> ½Ã±×³ÎÀ» º¸³»°í
- Àû´çÇÑ ½Ã°£ÀÌ Áö³­ÈÄ ÀÌÀü ·Î±×¸¦ ´Ù·çµµ·Ï Á¦¾ÈÇÑ´Ù. ¿¹¸¦
- µé¾î ³·Àº ´ë¿ªÆø »ç¿ëÀÚÀÇ °æ¿ì Á¢¼Ó ´ëºÎºÐÀÌ ¸¶Ä¡´Âµ¥ 10ºÐÀÌ
- ¾È°É¸°´Ù¸é, ÀÌÀü ·Î±×¸¦ ´Ù·ç±âÀü¿¡ 15ºÐ ±â´Ù¸°´Ù.</p>
-
- <div class="note">¼³Á¤ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖ´Ù¸é Àç½ÃÀ۽à ºÎ¸ð´Â Àç½ÃÀÛÇÏÁö
- ¾Ê°í ¿À·ù¸¦ ³»¸ç Á¾·áÇÑ´Ù. ¶Ç, Á¡ÀÝÀº Àç½ÃÀÛÀÇ °æ¿ì Á¾·áÇÒ¶§
- ÀÚ½ÄÀÌ ½ÇÇàµÇµµ·Ï ³öµÐ´Ù. (ÀڽĵéÀº ÀÚ½ÅÀÇ ¸¶Áö¸· ¿äûÀ»
- ó¸®ÇÏ°í "Á¡ÀÝ°Ô Á¾·áÇÑ´Ù".) ÀÌ´Â ¼­¹ö¸¦ Àç½ÃÀÛÇÒ¶§
- ¹®Á¦°¡ µÈ´Ù. ¼­¹ö´Â ÀÚ½ÅÀÌ ±â´Ù¸± Æ÷Æ®¿¡ ¿¬°áÇÏÁö ¸øÇÑ´Ù.
- Àç½ÃÀÛÀü¿¡ <code>-t</code> ¸í·ÉÇà ¿É¼Ç(<a href="programs/httpd.html">httpd</a> Âü°í)À¸·Î ¼³Á¤ÆÄÀÏ
- ¹®¹ýÀ» °Ë»çÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ·± °Ë»çµµ ¼­¹ö°¡ ¿Ã¹Ù·Î
- Àç½ÃÀÛÇÒÁö¸¦ º¸ÀåÇÏÁö ¸øÇÑ´Ù. ¼³Á¤ÆÄÀÏÀÇ ¹®¹ýÀÌ ¾Æ´Ñ Àǹ̸¦
- °Ë»çÇÏ·Á¸é root°¡ ¾Æ´Ñ »ç¿ëÀÚ·Î <code>httpd</code>¸¦ ½ÃÀÛÇغ¼ ¼ö ÀÖ´Ù.
- root°¡ ¾Æ´Ï±â¶§¹®¿¡ (¾Æ´Ï¸é ÇöÀç ±× Æ÷Æ®¸¦ »ç¿ëÇÏ´Â
- <code>httpd</code>°¡ ½ÇÇàµÇ±â¶§¹®¿¡) ¿À·ù°¡ ¾ø´Ù¸é ¼ÒÄÏ°ú
- ·Î±×ÆÄÀÏÀ» ¿­·Á°í ½ÃµµÇÏ´Â °úÁ¤¿¡¼­ ½ÇÆÐÇÒ °ÍÀÌ´Ù. ´Ù¸¥
- ÀÌÀ¯¶§¹®¿¡ ½ÇÆÐÇÑ´Ù¸é ¾Æ¸¶µµ ¼³Á¤ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖÀ» °ÍÀÌ´Ù.
- Á¡ÀÝÀº Àç½ÃÀÛÀ» ÇϱâÀü¿¡ ¿À·ù¸¦ °íÃľßÇÑ´Ù.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hup" id="hup">´çÀå Àç½ÃÀÛ</a></h2>
-
-<dl><dt>½Ã±×³Î: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p><code>HUP</code>À̳ª <code>restart</code> ½Ã±×³ÎÀ»
- ºÎ¸ð¿¡°Ô º¸³»¸é <code>TERM</code>°ú °°ÀÌ ¸ðµç ÀÚ½ÄÀ»
- Á×ÀÌÁö¸¸ ºÎ¸ð´Â Á¾·áÇÏÁö ¾Ê´Â´Ù. ºÎ¸ð´Â ¼³Á¤ÆÄÀÏÀ» ´Ù½ÃÀаí
- ·Î±×ÆÄÀÏÀ» ´Ù½Ã ¿¬´Ù. ±×¸®°í »õ·Î¿î ÀڽĵéÀ» ¸¸µé°í ¼­ºñ½º¸¦
- °è¼ÓÇÑ´Ù.</p>
-
- <p><code class="module"><a href="./mod/mod_status.html">mod_status</a></code> »ç¿ëÀÚ´Â <code>HUP</code>¸¦
- º¸³»¸é ¼­¹ö Åë°è°¡ 0ÀÌ µÊÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-
-<div class="note">¼³Á¤ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖ´Ù¸é Àç½ÃÀÛÀ» Çصµ ºÎ¸ð´Â Àç½ÃÀÛÇÏÁö
-¾Ê°í ¿À·ù¸¦ ³»¸ç Á¾·áÇÒ °ÍÀÌ´Ù. À̸¦ ÇÇÇÏ´Â ¹æ¹ýÀº À§¸¦ Âü°íÇ϶ó.</div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="race" id="race">ºÎ·Ï: ½Ã±×³Î°ú ·¹À̽º ÄÁµð¼Ç</a></h2>
-
- <p>Apache 1.2b9 ÀÌÀü¿¡´Â Àç½ÃÀÛ°ú Á¾·á ½Ã±×³Î¿¡ °ü°èµÈ
- <em>·¹À̽º ÄÁµð¼Ç(race condition)</em>ÀÌ ÀÖ¾ú´Ù. (·¹À̽º
- ÄÁµð¼ÇÀº °£´ÜÇÑ ¼³¸íÇÏÀÚ¸é, ¾î¶² ÀÏÀÌ À߸øµÈ¶§ ÀϾ¼­
- ±â´ëÇÑ´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â ½Ã°£¿¡ ¹Î°¨ÇÑ ¹®Á¦´Ù.) "¿Ã¹Ù¸¥"
- ±â´ÉÀÌ ÀÖ´Â ¾ÆÅ°ÅØÃÄ¿¡¼­ ¿ì¸®´Â ÀÌ·± ¹®Á¦¸¦ ÃÖ´ëÇÑ ÇØ°áÇß´Ù.
- ±×·¯³ª ¾î¶² ¾ÆÅ°ÅØÃÄ¿¡´Â ¾ÆÁ÷µµ ·¹À̽º ÄÁµð¼ÇÀÌ Á¸ÀçÇÔÀ»
- ÁÖÀÇÇ϶ó.</p>
-
- <p><code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code>À»
- µð½ºÅ©¿¡ ÀúÀåÇÏ´Â ¾ÆÅ°ÅØÃÄ´Â scoreboard¸¦ ¸Á°¡Æ®¸± °¡´É¼ºÀÌ
- ÀÖ´Ù. ±×·¯¸é (<code>HUP</code>ÈÄ) "bind: Address already in use"
- ȤÀº (<code>USR1</code> ÈÄ) "long lost child came home!"ÀÌ
- ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀüÀÚ´Â ½É°¢ÇÑ ¿À·ùÀÌ°í, ÈÄÀÚ´Â ´ÜÁö ¼­¹ö°¡
- scoreboard slotÀ» ÀÒ°Ô ¸¸µç´Ù. ±×·¡¼­ °­Á¦ Àç½ÃÀÛÀ» ÁÙÀÌ°í
- Á¡ÀÝÀº Àç½ÃÀÛÀ» »ç¿ëÇϱæ ÃßõÇÑ´Ù. ÀÌ ¹®Á¦´Â ÇØ°áÇϱ⠸ſì
- Èûµé´Ù. ±×·¯³ª ´ÙÇàÈ÷µµ ´ëºÎºÐÀÇ ¾ÆÅ°ÅØÃÄ´Â scoreboard·Î ÆÄÀÏÀ»
- »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÆÄÀÏÀ» »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃĶó¸é <code class="directive"><a href="./mod/mpm_common.html#scoreboardfile">ScoreBoardFile</a></code> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- <p>¸ðµç ¾ÆÅ°ÅØÃÄ¿¡´Â Áö¼ÓµÇ´Â HTTP ¿¬°á (KeepAlive)¿¡¼­
- µÎ¹ø° ÀÌÈÄ ¿äûÀ» ó¸®ÇÏ´Â ÀڽĿ¡ ¾à°£ÀÇ ·¹À̽º ÄÁµð¼ÇÀÌ
- ÀÖ´Ù. ÀÚ½ÄÀº ¿äûÁÙÀ» ÀÐÀº ÈÄ ¿äû Çì´õ¸¦ ÀбâÀü¿¡ Á¾·áÇÒ ¼ö
- ÀÖ´Ù. ÀÌ ¹®Á¦´Â ³Ê¹« ´Ê°Ô ¹ß°ßÇÏ¿© 1.2 ¹öÀüÀÌ ³ª¿ÂÈÄ¿¡¾ß
- ¼öÁ¤µÇ¾ú´Ù. ±×·¯³ª ³×Æ®¿÷ Áö¿¬À̳ª ¼­¹ö ½Ã°£Á¦ÇѶ§¹®¿¡ KeepAlive
- Ŭ¶óÀ̾ðÆ®´Â ÀÌ·± °æ¿ì¸¦ ¿¹»óÇؾßÇϱ⠶§¹®¿¡ ÀÌ·Ð»ó ¹®Á¦´Â
- ¾ÈµÈ´Ù. ½ÇÁ¦·Î ¼­¹ö¸¦ °Ë»çÇϱâÀ§ÇØ ÀÏÃÊ¿¡ 20¹ø Àç½ÃÀÛÇÏ´Â µ¿¾È
- Ŭ¶óÀ̾ðÆ®°¡ ±úÁø ±×¸²À̳ª ºó ¹®¼­¾øÀÌ »çÀÌÆ®¸¦ ¼º°øÀûÀ¸·Î
- ÀоîµéÀÌ±æ ±â´ëÇÏÁö ¾Ê´Â´Ù¸é ¹®Á¦°¡ ¾ÈµÈ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/stopping.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/stopping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./es/stopping.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
-<a href="./ja/stopping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/stopping.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/stopping.xml b/docs/manual/stopping.xml
deleted file mode 100644
index 1fa9a380aa..0000000000
--- a/docs/manual/stopping.xml
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.12 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="stopping.xml.meta">
-
- <title>Stopping and Restarting</title>
-
-<summary>
- <p>This document covers stopping and restarting Apache on
- Unix-like systems. Windows NT, 2000 and XP users should see
- <a href="platform/windows.html#winsvc">Running Apache as a
- Service</a> and Windows 9x and ME users should see <a
- href="platform/windows.html#wincons">Running Apache as a
- Console Application</a> for information on how to control
- Apache on those platforms.</p>
-</summary>
-
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="introduction"><title>Introduction</title>
-
- <p>In order to stop or restart Apache, you must send a signal to
- the running <code>httpd</code> processes. There are two ways to
- send the signals. First, you can use the unix <code>kill</code>
- command to directly send signals to the processes. You will
- notice many <code>httpd</code> executables running on your system,
- but you should not send signals to any of them except the parent,
- whose pid is in the <directive
- module="mpm_common">PidFile</directive>. That is to say you
- shouldn't ever need to send signals to any process except the
- parent. There are three signals that you can send the parent:
- <code><a href="#term">TERM</a></code>,
- <code><a href="#hup">HUP</a></code>, and
- <code><a href="#graceful">USR1</a></code>, which
- will be described in a moment.</p>
-
- <p>To send a signal to the parent you should issue a command
- such as:</p>
-
-<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
-
- <p>The second method of signaling the <code>httpd</code> processes
- is to use the <code>-k</code> command line options: <code>stop</code>,
- <code>restart</code>, and <code>graceful</code>,
- as described below. These are arguments to the <a
- href="programs/httpd.html">httpd</a> binary, but we recommend that
- you send them using the <a
- href="programs/apachectl.html">apachectl</a> control script, which
- will pass them through to <code>httpd</code>.</p>
-
- <p>After you have signaled <code>httpd</code>, you can read about
- its progress by issuing:</p>
-
-<example>tail -f /usr/local/apache2/logs/error_log</example>
-
- <p>Modify those examples to match your <directive
- module="core">ServerRoot</directive> and <directive
- module="mpm_common">PidFile</directive> settings.</p>
-</section>
-
-<section id="term"><title>Stop Now</title>
-
-<dl><dt>Signal: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p>Sending the <code>TERM</code> or <code>stop</code> signal to
- the parent causes it to immediately attempt to kill off all of its
- children. It may take it several seconds to complete killing off
- its children. Then the parent itself exits. Any requests in
- progress are terminated, and no further requests are served.</p>
-</section>
-
-<section id="graceful"><title>Graceful Restart</title>
-
-<dl><dt>Signal: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p>The <code>USR1</code> or <code>graceful</code> signal causes
- the parent process to <em>advise</em> the children to exit after
- their current request (or to exit immediately if they're not
- serving anything). The parent re-reads its configuration files and
- re-opens its log files. As each child dies off the parent replaces
- it with a child from the new <em>generation</em> of the
- configuration, which begins serving new requests immediately.</p>
-
- <note>On certain platforms that do not allow <code>USR1</code> to
- be used for a graceful restart, an alternative signal may be used (such
- as <code>WINCH</code>). The command <code>apachectl graceful</code>
- will send the right signal for your platform.</note>
-
- <p>This code is designed to always respect the process control
- directive of the MPMs, so the number of processes and threads
- available to serve clients will be maintained at the appropriate
- values throughout the restart process. Furthermore, it respects
- <directive module="mpm_common">StartServers</directive> in the
- following manner: if after one second at least <directive
- module="mpm_common">StartServers</directive> new children have not
- been created, then create enough to pick up the slack. Hence the
- code tries to maintain both the number of children appropriate for
- the current load on the server, and respect your wishes with the
- <directive>StartServers</directive> parameter.</p>
-
- <p>Users of the <module>mod_status</module>
- will notice that the server statistics are <strong>not</strong>
- set to zero when a <code>USR1</code> is sent. The code was
- written to both minimize the time in which the server is unable
- to serve new requests (they will be queued up by the operating
- system, so they're not lost in any event) and to respect your
- tuning parameters. In order to do this it has to keep the
- <em>scoreboard</em> used to keep track of all children across
- generations.</p>
-
- <p>The status module will also use a <code>G</code> to indicate
- those children which are still serving requests started before
- the graceful restart was given.</p>
-
- <p>At present there is no way for a log rotation script using
- <code>USR1</code> to know for certain that all children writing
- the pre-restart log have finished. We suggest that you use a
- suitable delay after sending the <code>USR1</code> signal
- before you do anything with the old log. For example if most of
- your hits take less than 10 minutes to complete for users on
- low bandwidth links then you could wait 15 minutes before doing
- anything with the old log.</p>
-
- <note>If your configuration file has errors
- in it when you issue a restart then your parent will not
- restart, it will exit with an error. In the case of graceful
- restarts it will also leave children running when it exits.
- (These are the children which are "gracefully exiting" by
- handling their last request.) This will cause problems if you
- attempt to restart the server -- it will not be able to bind to
- its listening ports. Before doing a restart, you can check the
- syntax of the configuration files with the <code>-t</code>
- command line argument (see <a
- href="programs/httpd.html">httpd</a>). This still will not
- guarantee that the server will restart correctly. To check the
- semantics of the configuration files as well as the syntax, you
- can try starting <code>httpd</code> as a non-root user. If there are no
- errors it will attempt to open its sockets and logs and fail
- because it's not root (or because the currently running <code>httpd</code>
- already has those ports bound). If it fails for any other
- reason then it's probably a config file error and the error
- should be fixed before issuing the graceful restart.</note>
-</section>
-
-<section id="hup"><title>Restart Now</title>
-
-<dl><dt>Signal: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p>Sending the <code>HUP</code> or <code>restart</code> signal to
- the parent causes it to kill off its children like in
- <code>TERM</code>, but the parent doesn't exit. It re-reads its
- configuration files, and re-opens any log files. Then it spawns a
- new set of children and continues serving hits.</p>
-
- <p>Users of <module>mod_status</module>
- will notice that the server statistics are set to zero when a
- <code>HUP</code> is sent.</p>
-
-<note>If your configuration file has errors in it when you issue a
-restart then your parent will not restart, it will exit with an
-error. See above for a method of avoiding this.</note>
-</section>
-
-<section id="race"><title>Appendix: signals and race conditions</title>
-
- <p>Prior to Apache 1.2b9 there were several <em>race
- conditions</em> involving the restart and die signals (a simple
- description of race condition is: a time-sensitive problem, as
- in if something happens at just the wrong time it won't behave
- as expected). For those architectures that have the "right"
- feature set we have eliminated as many as we can. But it should
- be noted that there still do exist race conditions on certain
- architectures.</p>
-
- <p>Architectures that use an on disk <directive
- module="mpm_common">ScoreBoardFile</directive> have the potential
- to corrupt their scoreboards. This can result in the "bind:
- Address already in use" (after <code>HUP</code>) or "long lost
- child came home!" (after <code>USR1</code>). The former is a fatal
- error, while the latter just causes the server to lose a
- scoreboard slot. So it might be advisable to use graceful
- restarts, with an occasional hard restart. These problems are very
- difficult to work around, but fortunately most architectures do
- not require a scoreboard file. See the <directive
- module="mpm_common">ScoreBoardFile</directive> documentation for a
- architecture uses it.</p>
-
- <p>All architectures have a small race condition in each child
- involving the second and subsequent requests on a persistent
- HTTP connection (KeepAlive). It may exit after reading the
- request line but before reading any of the request headers.
- There is a fix that was discovered too late to make 1.2. In
- theory this isn't an issue because the KeepAlive client has to
- expect these events because of network latencies and server
- timeouts. In practice it doesn't seem to affect anything either
- -- in a test case the server was restarted twenty times per
- second and clients successfully browsed the site without
- getting broken images or empty documents. </p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/stopping.xml.de b/docs/manual/stopping.xml.de
deleted file mode 100644
index 3ee5fceed5..0000000000
--- a/docs/manual/stopping.xml.de
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="stopping.xml.meta">
-
- <title>Beenden und Neustarten</title>
-
-<summary>
- <p>Dieses Dokument umfasst das Beenden und Neustarten des
- Apache auf Unix-&#228;hnlichen Systemen. Anwender von Windows NT, 2000
- und XP sollten <a href="platform/windows.html#winsvc">Betreiben
- des Apache als Dienst</a> lesen, w&auml;hrend hingegen Anwender von
- Windows 9x sowie ME <a href="platform/windows.html#wincons">Betreiben
- des Apache als Konsolenanwendung</a> lesen sollten, um mehr Informationen
- zur Handhabung des Apache auf diesen Systemen zu erhalten.</p>
-</summary>
-
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="introduction"><title>Einleitung</title>
-
- <p>Um den Apache zu stoppen oder neu zu starten, m&#252;ssen Sie
- ein Signal an den laufenden <code>httpd</code>-Prozess senden. Es gibt
- zwei M&#246;glichkeiten, diese Signale zu senden. Zum einen k&#246;nnen
- Sie den Unix-Befehl <code>kill</code> verwenden, um den Prozessen
- direkt Signale zu senden. Sie werden feststellen, dass auf Ihrem
- System mehrere <code>httpd</code>-Programme laufen. Sie sollten jedoch
- nicht jedem dieser Prozesse ein Signal senden, sondern nur dem
- Elternprozess, dessen PID im <directive
- module="mpm_common">PidFile</directive> steht. Das hei&#223;t, Sie
- sollten es niemals n&#246;tig haben, einem anderen Prozess, als dem
- Elternprozess, ein Signal zu senden. Es gibt drei Signale, die Sie an den
- Elternprozess senden k&#246;nnen: <code><a href="#term">TERM</a></code>,
- <code><a href="#hup">HUP</a></code> und
- <code><a href="#graceful">USR1</a></code>, die nachfolgend beschrieben
- werden.</p>
-
- <p>Um dem Elternprozess ein Signal zu senden, verwenden Sie einen
- Befehl wie z.B.:</p>
-
- <example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
-
- <p>Die zweite Methode, dem <code>httpd</code>-Prozess zu signalisieren,
- ist die Verwendung der <code>-k</code>-Befehlszeilenoptionen
- <code>stop</code>, <code>restart</code> und <code>graceful</code>, wie
- unten beschrieben. Dies sind Argumente des <a
- href="programs/httpd.html">httpd</a>-Programms, es wird jedoch
- empfohlen, sie unter Verwendung des Steuerskripts <a
- href="programs/apachectl.html">apachectl</a> zu senden, welches diese
- an <code>httpd</code> durchreicht.</p>
-
- <p>Nachdem Sie <code>httpd</code> signalisiert haben, k&#246;nnen Sie
- dessen Fortschritt beobachten, indem Sie eingeben:</p>
-
- <example>tail -f /usr/local/apache2/logs/error_log</example>
-
- <p>Passen Sie diese Beispiele entsprechend Ihren <directive
- module="core">ServerRoot</directive>- und <directive
- module="mpm_common">PidFile</directive>-Einstellungen an.</p>
-</section>
-
-<section id="term"><title>Beenden</title>
-
- <dl><dt>Signal: TERM</dt>
- <dd><code>apachectl -k stop</code></dd>
- </dl>
-
- <p>Das Senden des <code>TERM</code>- oder <code>stop</code>-Signals an
- den Elternprozess veranlasst diesen, sofort zu versuchen, alle seine
- Kindprozesse zu beenden. Es kann einige Sekunden dauern, bis alle
- Kindprozesse komplett beendet sind. Danach beendet sich der Elternprozess
- selbst. Alle gerade bearbeiteten Anfragen werden abgebrochen.
- Es werden keine weiteren Anfragen mehr bedient.</p>
-</section>
-
-<section id="graceful"><title>Unterbrechungsfreier Neustart</title>
-
- <dl><dt>Signal: USR1</dt>
- <dd><code>apachectl -k graceful</code></dd>
- </dl>
-
- <p>Das <code>USR1</code>- oder <code>graceful</code>-Signal
- veranlasst den Elternprozess, die Kinder <em>anzuweisen</em>, sich
- nach Abschlu&#223; ihrer momentanen bearbeiteten Anfrage zu beenden
- (oder sich sofort zu beenden, wenn sie gerade keine Anfrage bedienen).
- Der Elternprozess liest seine Konfigurationsdateien erneut ein und
- &#246;ffnet seine Logdateien neu. Wenn ein Kindprozess stirbt,
- ersetzt der Elternprozess ihn durch ein Kind der neuen
- Konfigurations-<em>Generation</em>. Dieses beginnt sofort damit,
- neue Anfragen zu bedienen.</p>
-
- <note>Auf bestimmten Plattformen, welche kein <code>USR1</code>
- f&#252;r einen unterbrechungsfreien Neustart erlauben, kann ein
- alternatives Signal verwendet werden (wie z.B.
- <code>WINCH</code>). Der Befehl <code>apachectl graceful</code>
- sendet das jeweils richtige Signal f&#252;r Ihre Platform.</note>
-
- <p>Der Code ist daf&#252;r ausgelegt, stets die MPM-Direktiven
- zur Prozesssteuerung zu beachten, so dass die Anzahl der Prozesse
- und Threads, die zur Bedienung der Clients bereitstehen, w&#228;hrend
- des Neustarts auf die entsprechenden Werte gesetzt werden.
- Weiterhin wird <directive module="mpm_common">StartServers</directive>
- auf folgende Art und Weise interpretiert: Wenn nach einer Sekunde
- nicht mindestens <directive module="mpm_common">StartServers</directive>
- neue Kindprozesse erstellt wurden, dann werden, um den Durchsatz zu
- beschleunigen, entsprechend weitere erstellt. Auf diese Weise versucht
- der Code sowohl die Anzahl der Kinder entsprechend der Serverlast
- anzupassen als auch Ihre W&#252;nsche hinsichtlich des Parameters
- <directive>StartServers</directive> zu ber&#252;cksichtigen.</p>
-
- <p>Benutzer von <module>mod_status</module> werden feststellen,
- dass die Serverstatistiken <strong>nicht</strong> auf Null
- zur&#252;ckgesetzt werden, wenn ein <code>USR1</code> gesendet
- wurde. Der Code wurde so geschrieben, dass sowohl die Zeit minimiert
- wird, in der der Server nicht in der Lage ist, neue Anfragen zu
- bedienen (diese werden vom Betriebssystem in eine Warteschlange
- gestellt, so dass sie auf keinen Fall verloren gehen) als auch
- Ihre Parameter zur Feinabstimmung ber&#252;cksichtigt werden.
- Um dies zu erreichen, muss die <em>Statustabelle</em> (Scoreboard),
- die dazu verwendet wird, alle Kinder &#252;ber mehrere Generationen
- zu verfolgen, erhalten bleiben.</p>
-
- <p>Das Statusmodul benutzt au&#223;erdem ein <code>G</code>, um
- diejenigen Kinder zu kennzeichen, die noch immer Anfragen bedienen,
- welche gestartet wurden, bevor ein unterbrechungsfreier Neustart
- veranla&#223;t wurde.</p>
-
- <p>Derzeit gibt es keine M&#246;glichkeit f&#252;r ein
- Log-Rotationsskript, das <code>USR1</code> verwendet, sicher
- festzustellen, dass alle Kinder, die in ein vor dem Neustart
- ge&#246;ffnetes Log schreiben, beendet sind. Wir schlagen vor, dass
- Sie nach dem Senden des Signals <code>USR1</code> eine angemessene
- Zeitspanne warten, bevor Sie das alte Log anfassen. Wenn beispielsweise
- die meisten Ihrer Zugriffe bei Benutzern mit niedriger Bandbreite
- weniger als 10 Minuten f&#252;r eine vollst&#228;ndige Antwort
- ben&#246;tigen, dann k&#246;nnten Sie 15 Minuten warten, bevor Sie auf
- das alte Log zugreifen.</p>
-
- <note>Wenn Ihre Konfigurationsdatei Fehler enth&#228;lt, w&#228;hrend
- Sie einen Neustart anweisen, dann wird Ihr Elternprozess nicht neu starten,
- sondern sich mit einem Fehler beenden. Im Falle eines unterbrechungsfreien
- Neustarts l&#228;&#223;t er die Kinder weiterlaufen, wenn er sich beendet.
- (Dies sind die Kinder, die sich "sanft beenden", indem sie ihre letzte
- Anfrage erledigen.) Das verursacht Probleme, wenn Sie versuchen,
- den Server neu zu starten -- er ist nicht in der Lage, sich an die Ports zu
- binden, an denen er lauschen soll. Bevor Sie einen Neustart
- durchf&#252;hren, k&#246;nnen Sie die Syntax der Konfigurationsdateien
- mit dem Befehlszeilenargument <code>-t</code> &#252;berpr&#252;fen
- (siehe auch <a href="programs/httpd.html">httpd</a>). Das garantiert
- allerdings nicht, dass der Server korrekt starten wird. Um sowohl die
- Syntax als auch die Semantik der Konfigurationsdateien zu pr&#252;fen,
- k&#246;nnen Sie versuchen, <code>httpd</code> als nicht-root-Benutzer
- zu starten. Wenn dabei keine Fehler auftreten, wird er versuchen, seine
- Sockets und Logdateien zu &#246;ffnen und fehlschlagen, da er nicht root
- ist (oder weil sich der gegenw&#228;rtig laufende <code>httpd</code>
- bereits diese Ports gebunden hat). Wenn er aus einem anderen Grund
- fehlschl&#228;gt, dann liegt wahrscheinlich ein Konfigurationsfehler vor.
- Der Fehler sollte behoben werden, bevor der unterbrechungsfreie Neustart
- angewiesen wird.</note>
-</section>
-
-<section id="hup"><title>Neustarten</title>
-
- <dl><dt>Signal: HUP</dt>
- <dd><code>apachectl -k restart</code></dd>
- </dl>
-
- <p>Das Senden des Signals <code>HUP</code> oder <code>restart</code>
- veranla&#223;t den Elternprozess, wie bei <code>TERM</code> alle seine
- Kinder zu beenden. Der Elternprozess beendet sich jedoch nicht. Er liest
- seine Konfigurationsdateien neu ein und &#246;ffnet alle Logdateien
- erneut. Dann erzeugt er einen neuen Satz Kindprozesse und setzt die
- Bedienung von Zugriffen fort.</p>
-
- <p>Benutzer von <module>mod_status</module> werden feststellen, dass
- die Serverstatistiken auf Null gesetzt werden, wenn ein <code>HUP</code>
- gesendet wurde.</p>
-
- <note>Wenn Ihre Konfigurationsdatei einen Fehler enth&#228;lt,
- w&#228;hrend Sie einen Neustart anweisen, dann wird Ihr Elternprozess
- nicht neu starten, sondern sich mit einem Fehler beenden. Lesen Sie oben,
- wie Sie das vermeiden k&#246;nnen.</note>
-</section>
-
-<section id="race"><title>Anhang: Signale und Wettkampfsituationen</title>
-
- <p>Vor der Version 1.2b9 des Apache existierten verschiedene
- <em>Wettkampfsituationen</em> (race conditions), die den Neustart und
- die Signale beeinflu&#223;t haben. (Eine einfache Beschreibung einer
- Wettkampfsituation lautet: es ist ein zeitabh&#228;ngiges Problem; wenn
- etwas zum falschen Zeitpunkt erfolgt, wird es sich nicht wie erwartet
- verhalten.) Bei Architekturen mit dem "richtigen" Funktionsumfang
- haben wir so viele eliminiert wie wir nur konnten. Dennoch
- sollte beachtet werden, dass noch immer Wettkampfsituationen auf
- bestimmten Architekturen existieren.</p>
-
- <p>Bei Architekturen, die ein <directive
- module="mpm_common">ScoreBoardFile</directive> auf Platte verwenden,
- besteht die Gefahr, dass die Statustabelle besch&#228;digt wird.
- Das kann zu "bind: Address already in use" ("bind: Adresse wird
- bereits verwendet", nach einem <code>HUP</code>) oder "long lost
- child came home!" ("Der verlorene Sohn ist heimgekehrt", nach einem
- <code>USR1</code>) f&#252;hren. Ersteres ist ein schwerer Fehler,
- w&#228;rend letzteres lediglich bewirkt, dass der Server einen Eintrag
- in der Statustabelle verliert. So kann es ratsam sein, unterbrechungsfreie
- Neustarts zusammen mit einem gelegentlichen harten Neustart zu verwenden.
- Diese Probleme lassen sich nur sehr schwer umgehen, aber
- gl&#252;cklicherweise ben&#246;tigen die meisten Architekturen keine
- Statustabelle in Form einer Datei. Bitte lesen Sie f&#252;r Architekturen,
- die sie ben&#246;tigen, die Dokumentation zu <directive
- module="mpm_common">ScoreBoardFile</directive>.</p>
-
- <p>Alle Architekturen haben in jedem Kindprozess eine kleine
- Wettkampfsituation, welche die zweite und nachfolgende Anfragen
- einer persistenten HTTP-Verbindung (KeepAlive) umfa&#223;t. Der Prozess
- kann nach dem Lesen der Anfragezeile aber vor dem Lesen der Anfrage-Header
- enden. Es existiert eine Korrektur, die f&#252;r 1.2 zu sp&#228;t kam.
- Theoretisch sollte das kein Problem darstellen, da
- der KeepAlive-Client derartige Ereignisse aufgrund von
- Netzwerk-Latenzzeiten und Auszeiten des Servers erwarten sollte.
- In der Praxis scheint keiner von beiden beeinflu&#223;t zu werden
- -- in einem Testfall wurde der Server zwanzig mal
- pro Sekunde neu gestartet, w&#228;hrend Clients das Angebot abgegrast
- haben, ohne kaputte Bilder oder leere Dokumente zu erhalten.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/stopping.xml.es b/docs/manual/stopping.xml.es
deleted file mode 100644
index 4cec28550e..0000000000
--- a/docs/manual/stopping.xml.es
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="stopping.xml.meta">
-
- <title>Iniciar y Parar el servidor Apache</title>
-
-<summary>
- <p>Este documento explica como iniciar y parar el servidor Apache
- en sistemas tipo Unix. Los usuarios de Windows NT, 2000 y XP
- deben consultar la secci&#243;n <a
- href="platform/windows.html#winsvc">Ejecutar Apache como un
- servicio</a> y los usuario de Windows 9x y ME deben consultar <a
- href="platform/windows.html#wincons">Ejecutar Apache como una
- Aplicaci&#243;n de Consola</a> para obtener informaci&#243;n
- sobre como controlar Apache en esas plataformas.</p>
-</summary>
-
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="introduction"><title>Introducci&#243;n</title>
-
- <p>Para parar y reiniciar Apache, hay que enviar la se&#241;al
- apropiada al proceso padre <code>httpd</code> que se est&#233;
- ejecutando. Hay dos maneras de enviar estas se&#241;ales. En
- primer lugar, puede usar el comando de Unix <code>kill</code> que
- env&#237;a se&#241;ales directamente a los procesos. Puede que
- tenga varios procesos <code>httpd</code> ejecutandose en su
- sistema, pero las se&#241;ales deben enviarse solamente al proceso
- padre, cuyo pid est&#225; especificado en la directiva <directive
- module="mpm_common">PidFile</directive>. Esto quiere decir que no
- debe necesitar enviar se&#241;ales a ning&#250;n proceso excepto
- al proceso padre. Hay tres se&#241;ales que puede enviar al
- proceso padre: <code><a href="#term">TERM</a></code>, <code><a
- href="#hup">HUP</a></code>, y <code><a
- href="#graceful">USR1</a></code>, que van a ser descritas a
- continuaci&#243;n.</p>
-
- <p>Para enviar una se&#241;al al proceso padre debe escribir un
- comando como el que se muestra en el ejemplo:</p>
-
-<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
-
- <p>La segunda manera de enviar se&#241;ales a los procesos
- <code>httpd</code> es usando las opciones de l&#237;nea de
- comandos <code>-k</code>: <code>stop</code>, <code>restart</code>,
- y <code>graceful</code>, como se muestra m&#225;s abajo. Estas
- opciones se le pueden pasar al binario <a
- href="programs/httpd.html">httpd</a>, pero se recomienda que se
- pasen al script de control <a
- href="programs/apachectl.html">apachectl</a>, que a su vez los
- pasar&#225; a <code>httpd</code>.</p>
-
- <p>Despu&#233;s de haber enviado las se&#241;ales que desee a
- <code>httpd</code>, puede ver como progresa el proceso
- escribiendo:</p>
-
-<example>tail -f /usr/local/apache2/logs/error_log</example>
-
- <p>Modifique estos ejemplos para que coincidan con la
- configuraci&#243;n que tenga especificada en las directivas
- <directive module="core">ServerRoot</directive> y <directive
- module="mpm_common">PidFile</directive> en su fichero principal de
- configuraci&#243;n.</p>
-</section>
-
-<section id="term"><title>Parar Apache</title>
-
-<dl><dt>Se&#241;al: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p>Enviar las se&#241;ales <code>TERM</code> o <code>stop</code>
- al proceso padre hace que se intenten eliminar todos los procesos
- hijo inmediatamente. Esto puede tardar algunos minutos. Una vez
- que hayan terminado todos los procesos hijo, terminar&#225; el
- proceso padre. Cualquier petici&#243;n en proceso terminar&#225;
- inmediatanmente, y ninguna petici&#243;n posterior ser&#225;
- atendida.</p>
-</section>
-
-<section id="graceful"><title>Reinicio Graceful</title>
-
-<dl><dt>Se&#241;al: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p>Las se&#241;ales <code>USR1</code> o <code>graceful</code>
- hacen que el proceso padre <em>indique</em> a sus hijos que
- terminen despu&#233;s de servir la petici&#243;n que est&#233;n
- atendiendo en ese momento (o de inmediato si no est&#225;n
- sirviendo ninguna petici&#243;n). El proceso padre lee de nuevo
- sus ficheros de configuraci&#243;n y vuelve a abrir sus ficheros
- log. Conforme cada hijo va terminando, el proceso padre lo va
- sustituyendo con un hijo de una nueva <em>generaci&#243;n</em> con
- la nueva configuraci&#243;n, que empeciezan a servir peticiones
- inmediatamente.</p>
-
- <note>En algunas plataformas que no permiten usar
- <code>USR1</code> para reinicios graceful, puede usarse una
- se&#241;al alternativa (como <code>WINCH</code>). Tambien puede
- usar <code>apachectl graceful</code> y el script de control
- enviar&#225; la se&#241;al adecuada para su plataforma.</note>
-
- <p>Apache est&#225; dise&#241;ado para respetar en todo momento la
- directiva de control de procesos de los MPM, as&#237; como para
- que el n&#250;mero de procesos y hebras disponibles para servir a
- los clientes se mantenga en los valores adecuados durante el
- proceso de reinicio. A&#250;n m&#225;s, est&#225; dise&#241;ado
- para respetar la directiva <directive
- module="mpm_common">StartServers</directive> de la siguiente
- manera: si despu&#233;s de al menos un segundo el nuevo hijo de la
- directiva <directive module="mpm_common">StartServers</directive>
- no ha sido creado, entonces crea los suficientes para se atienda
- el trabajo que queda por hacer. As&#237;, se intenta mantener
- tanto el n&#250;mero de hijos adecuado para el trabajo que el
- servidor tenga en ese momento, como respetar la configuraci&#243;n
- determinada por los par&#225;metros de la directiva
- <directive>StartServers</directive>.</p>
-
- <p>Los usuarios del m&#243;dulo <module>mod_status</module>
- notar&#225;n que las estad&#237;sticas del servidor
- <strong>no</strong> se ponen a cero cuando se usa la se&#241;al
- <code>USR1</code>. Apache fue escrito tanto para minimizar el
- tiempo en el que el servidor no puede servir nuevas peticiones
- (que se pondr&#225;n en cola por el sistema operativo, de modo que
- se no se pierda ning&#250;n evento), como para respetar sus
- par&#225;metros de ajuste. Para hacer esto, tiene que guardar el
- <em>scoreboard</em> usado para llevar el registro de los procesos
- hijo a trav&#233;s de las distintas generaciones.</p>
-
- <p>El mod_status tambi&#233;n usa una <code>G</code> para indicar
- que esos hijos est&#225;n todav&#237;a sirviendo peticiones
- previas al reinicio graceful.</p>
-
- <p>Actualmente no existe ninguna manera de que un script con un
- log de rotaci&#243;n usando <code>USR1</code> sepa con seguridad
- que todos los hijos que se registraron en el log con anterioridad
- al reinicio han terminado. Se aconseja que se use un retardo
- adecuado despu&#233;s de enviar la se&#241;al <code>USR1</code>
- antes de hacer nada con el log antiguo. Por ejemplo, si la mayor
- parte las visitas que recibe de usuarios que tienen conexiones de
- baja velocidad tardan menos de 10 minutos en completarse, entoces
- espere 15 minutos antes de hacer nada con el log antiguo.</p>
-
- <note>Si su fichero de configuraci&#243;n tiene errores cuando
- haga el reinicio, entonces el proceso padre no se reinciciar&#225;
- y terminar&#225; con un error. En caso de un reinicio graceful,
- tambi&#233;n dejar&#225; a los procesos hijo ejecutandose mientras
- existan. (Estos son los hijos de los que se est&#225; saliendo de
- forma graceful y que est&#225;n sirviendo sus &#250;ltimas
- peticiones.) Esto provocar&#225; problemas si intenta reiniciar el
- servidor -- no ser&#225; posible conectarse a la lista de puertos
- de escucha. Antes de reiniciar, puede comprobar que la sintaxis de
- sus ficheros de configuracion es correcta con la opci&#243;n de
- l&#237;nea de comandos <code>-t</code> (consulte <a
- href="programs/httpd.html">httpd</a>). No obstante, esto no
- garantiza que el servidor se reinicie correctamente. Para
- comprobar que no hay errores en los ficheros de
- configuraci&#243;n, puede intentar iniciar <code>httpd</code> con
- un usuario diferente a root. Si no hay errores, intentar&#225;
- abrir sus sockets y logs y fallar&#225; porque el usuario no es
- root (o porque el <code>httpd</code> que se est&#225; ejecutando
- en ese momento ya est&#225; conectado a esos puertos). Si falla
- por cualquier otra raz&#243;n, entonces casi seguro que hay
- alg&#250;n error en alguno de los ficheros de configuraci&#243;n y
- debe corregir ese o esos errores antes de hacer un reinicio
- graceful.</note>
-</section>
-
-<section id="hup"><title>Reiniciar Apache</title>
-
-<dl><dt>Se&#241;al: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p>El env&#237;o de las se&#241;ales <code>HUP</code> o
- <code>restart</code> al proceso padre hace que los procesos hijo
- terminen como si le envi&#225; ramos la se&#241;al
- <code>TERM</code>, para eliminar el proceso padre. La diferencia
- est&#225; en que estas se&#241;ales vuelven a leer los archivos de
- configuraci&#243;n y vuelven a abrir los ficheros log. Se genera
- un nuevo conjunto de hijos y se contin&#250;a sirviendo
- peticiones.</p>
-
- <p>Los usuarios del m&#243;dulo <module>mod_status</module>
- notar&#225;n que las estad&#237;sticas del servidor se ponen a
- cero cuando se env&#237;a la se&#241;al <code>HUP</code>.</p>
-
-<note>Si su fichero de configuraci&#243;n contiene errores, cuando
-intente reiniciar, el proceso padre del servidor no se
-reiniciar&#225;, sino que terminar&#225; con un error. Consulte
-m&#225;s arriba c&#243;mo puede solucionar este problema.</note>
-</section>
-
-<section id="race"><title>Ap&#233;ndice: se&#241;ales y race conditions</title>
-
- <p>Con anterioridad a la versi&#243;n de Apache 1.2b9 hab&#237;a
- varias <em>race conditions</em> implicadas en las se&#241;ales
- para parar y reiniciar procesos (una descripci&#243;n sencilla de
- una race condition es: un problema relacionado con el momento en
- que suceden las cosas, como si algo sucediera en momento en que no
- debe, y entonces el resultado esperado no se corresponde con el
- obtenido). Para aquellas arquitecturas que tienen el conjunto de
- caracter&#237;sticas "adecuadas", se han eliminado tantas race
- conditions como ha sido posible. Pero hay que tener en cuenta que
- todav&#237;a existen race conditions en algunas arquitecturas.</p>
-
- <p>En las arquitecturas que usan un <directive
- module="mpm_common">ScoreBoardFile</directive> en disco, existe la
- posibilidad de que se corrompan los scoreboards. Esto puede hacer
- que se produzca el error "bind: Address already in use"
- (despu&#233;s de usar<code>HUP</code>) o el error "long lost child
- came home!" (despu&#233;s de usar <code>USR1</code>). En el
- primer caso se trata de un error irrecuperable, mientras que en el
- segundo, solo ocurre que el servidor pierde un slot del
- scoreboard. Por lo tanto, ser&#237;a aconsejable usar reinicios
- graceful, y solo hacer reinicios normales de forma
- ocasional. Estos problemas son bastante complicados de solucionar,
- pero afortunadamente casi ninguna arquitectura necesita un fichero
- scoreboard. Consulte la documentaci&#243;n de la directiva
- <directive module="mpm_common">ScoreBoardFile</directive> para ver
- las arquitecturas que la usan.</p>
-
- <p>Todas las arquitecturas tienen una peque&#241;a race condition
- en cada proceso hijo implicada en la segunda y subsiguientes
- peticiones en una conexi&#243;n HTTP persistente
- (KeepAlive). Puede ser que el servidor termine despu&#233;s de
- leer la l&#237;nea de petici&#243;n pero antes de leer cualquiera
- de las cebeceras de petici&#243;n. Hay una soluci&#243;n que fue
- descubierta demasiado tarde para la incluirla en versi&#243;n
- 1.2. En teoria esto no debe suponer ning&#250;n problema porque el
- cliente KeepAlive ha de esperar que estas cosas pasen debido a los
- retardos de red y a los timeouts que a veces dan los
- servidores. En la practica, parece que no afecta a nada m&#225;s
- -- en una sesi&#243;n de pruebas, un servidor se reinici&#243;
- veinte veces por segundo y los clientes pudieron navegar sin
- problemas por el sitio web sin encontrar problemas ni para
- descargar una sola imagen ni encontrar un solo enlace roto. </p>
-</section>
-
-</manualpage>
-
diff --git a/docs/manual/stopping.xml.ja b/docs/manual/stopping.xml.ja
deleted file mode 100644
index e042c0ed35..0000000000
--- a/docs/manual/stopping.xml.ja
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="stopping.xml.meta">
-
- <title>$BDd;_$H:F5/F0(B</title>
-
-<summary>
- <p>$B$3$NJ8=q$G$O(B Unix $B$KN`;w$7$?%7%9%F%`$G$N(B
- Apache $B$NDd;_$H:F5/F0$K$D$$$F07$C$F$$$^$9!#(B
- Windows NT, 2000, XP $B%f!<%6$O(B<a
- href="platform/windows.html#winsvc">$B%5!<%S%9$H$7$F(B
- Apache $B$r<B9T$9$k(B</a>$B$G!"(BWindows 9x, ME$B%f!<%6$O(B<a
- href="platform/windows.html#wincons">$B%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F(B
- Apache $B$r<B9T$9$k(B</a>$B$G!"(B
- $B$3$l$i$N%W%i%C%H%[!<%`$G$N;HMQJ}K!$r$4Mw2<$5$$!#(B</p>
-</summary>
-
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="introduction"><title>$B%$%s%H%m%@%/%7%g%s(B</title>
-
- <p>Apache $B$rDd;_$7$?$j:F5/F0$7$?$j$9$k$?$a$K$O!"<B9T$5$l$F$$$k(B
- <code>httpd</code> $B%W%m%;%9$K%7%0%J%k$rAw$kI,MW$,$"$j$^$9!#(B
- $B%7%0%J%k$rAw$k$K$OFs$D$NJ}K!$,$"$j$^$9!#(B
- $B0l$DL\$O%W%m%;%9$KD>@\%7%0%J%k$rAw$k(B unix $B$N(B <code>kill</code>
- $B%3%^%s%I$r;HMQ$9$kJ}K!$G$9!#(B
- $B%7%9%F%`$r8+$l$P$?$/$5$s$N(B <code>httpd</code> $B$,(B
- $B<B9T$5$l$F$$$k$N$K5$$,IU$/$G$7$g$&$,!"%7%0%J%k$rAw$k$N$O(B
- $B?F%W%m%;%9$@$1$G!"$=$l0J30$N8D!9$N%W%m%;%9$K$O(B
- $B%7%0%J%k$rAw$i$J$$$G2<$5$$!#$=$N?F%W%m%;%9$N(B pid $B$O(B
- <directive module="mpm_common">PidFile</directive>
- $B$K=q$+$l$F$$$^$9!#$3$l$O$D$^$j!"?F0J30$N%W%m%;%9$K(B
- $B%7%0%J%k$rAw$kI,MW$9$i$J$$!"$H$$$&$3$H$G$9!#(B
- $B?F%W%m%;%9$KAw$k$3$H$,$G$-$k(B 3 $B<oN`$N%7%0%J%k$,$"$j$^$9(B:
- <code><a href="#term">TERM</a></code>,
- <code><a href="#hup">HUP</a></code>,
- <code><a href="#graceful">USR1</a></code>
- $B$G$9!#$3$l$i$N@bL@$K$D$$$F$OB3$-$r$4Mw2<$5$$!#(B</p>
-
- <p>$B?F%W%m%;%9$K%7%0%J%k$rAw$k$K$O!"(B
- $B<!$N$h$&$J%3%^%s%I$rH/9T$7$F2<$5$$(B:</p>
-
-<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
-
- <p><code>httpd</code> $B%W%m%;%9$K%7%0%J%k$rAw$k(B 2 $BHVL\$NJ}K!$O(B
- <code>-k</code> $B$H$$$&%3%^%s%I%i%$%s0z?t$r;HMQ$9$k$3$H$G$9!#(B
- $B2<$G@bL@$5$l$F$$$k$h$&$K!"(B<code>stop</code>, <code>restart</code>,
- <code>graceful</code> $B$r;XDj$G$-$^$9!#(B
- $B$3$l$i$O(B <a href="programs/httpd.html">httpd</a> $B$N0z?t$G$9$,!"(B
- $B@)8fMQ$N%9%/%j%W%H(B <a href="programs/apachectl.html">apachectl</a> $B$r(B
- $B;H$&$3$H$r$*A&$a$7$^$9!#(B<a
- href="programs/apachectl.html">apachectl</a> $B$O$=$l$i$N0z?t$r$=$N$^$^(B
- <code>httpd</code> $B$KEO$7$^$9!#(B</p>
-
- <p><code>httpd</code> $B$K%7%0%J%k$rAw$C$?8e!"(B
- $B<B9T>u67$r<!$N%3%^%s%I$GFI$`$3$H$,$G$-$^$9(B:</p>
-
-<example>tail -f /usr/local/apache2/logs/error_log</example>
- <p>$B$3$3$K5s$2$?Nc$O!"3F<+$N(B
- <directive module="core">ServerRoot</directive>
- $B$H(B
- <directive module="mpm_common">PidFile</directive>
- $B$N@_Dj$KE,9g$9$k$h$&$KE,59=$@5$7$F2<$5$$!#(B</p>
-</section>
-
-<section id="term"><title>$B5^$JDd;_(B</title>
-
-<dl><dt>$B%7%0%J%k(B: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p><code>TERM</code> $B$"$k$$$O(B <code>stop</code>
- $B%7%0%J%k$r?F%W%m%;%9$KAw$k$H!"B(:B$K;R%W%m%;%9A4$F$r(B kill $B$7$h$&$H$7$^$9!#(B
- $B;R%W%m%;%9$r40A4$K(B kill $B$7=*$o$k$^$G$K?tIC$+$+$k$+$b$7$l$^$;$s!#(B
- $B$=$N8e!"?F%W%m%;%9<+?H$,=*N;$7$^$9!#(B
- $B=hM}Cf$N%j%/%(%9%H$OA4$FDd;_$5$l!"$b$O$d%j%/%(%9%H$KBP$9$k(B
- $B1~Ez$O$5$l$^$;$s!#(B</p>
-</section>
-
-<section id="graceful"><title>$B4K$d$+$J:F5/F0(B</title>
-
-<dl><dt>$B%7%0%J%k(B: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p>$B?F%W%m%;%9$O(B <code>USR1</code> $B$"$k$$$O(B <code>graceful</code>
- $B%7%0%J%k$r<u$1<h$k$H!";R%W%m%;%9$K8=:_$N%j%/%(%9%H$N=hM}$N8e$K=*N;$9$k(B
- ($B$"$k$$$O2?$b$7$F$$$J$1$l$P$9$0$K=*N;$9$k(B)
- $B$h$&$K(B<em>$B=u8@(B</em>$B$7$^$9!#(B
- $B?F%W%m%;%9$O@_Dj%U%!%$%k$r:FFI9~$7$F!"%m%0%U%!%$%k$r3+$-D>$7$^$9!#(B
- $B;R%W%m%;%9$,=y!9$K$J$/$J$k$K=>$C$F!"(B
- $B?7$7$$(B<em>$B@$Be(B</em>$B$N@_Dj$K$h$k;R%W%m%;%9$KCV$-49$($F$$$-$^$9!#(B
- $B$=$7$F!"$3$l$i$,?7$?$J%j%/%(%9%H$KB(:B$K1~Ez$7;O$a$^$9!#(B</p>
-
- <note>$BFCDj$N%W%i%C%H%[!<%`$G$O(B <code>USR1</code>
- $B$r4K$d$+$J:F5/F0$N$?$a$K;H$&$3$H$,$G$-$^$;$s$,!"Be$o$j$N%7%0%J%k(B
- ($BNc$($P(B WINCH) $B$,;HMQ$G$-$k$G$7$g$&!#(B
- <code>apachectl graceful</code>
- $B$H$$$&%3%^%s%I$O%W%i%C%H%[!<%`$K9g$C$?%7%0%J%k$rAw$j$^$9!#(B</note>
-
- <p>$B$3$N%3!<%I$O>o$K(B
- MPM $B$N%W%m%;%9@)8f%G%#%l%/%F%#%V$N@_Dj$r=E;k$7$^$9$N$G!"(B
- $B%/%i%$%"%s%H$N%j%/%(%9%H$r07$&%W%m%;%9$H%9%l%C%I$N?t$r:F5/F0$N=hM}Cf$b(B
- $BE,@Z$JCM$K0];}$5$l$^$9!#!#$^$?!"<!$N$h$&$K$7$F(B
- <directive module="mpm_common">StartServers</directive>
- $B$r<i$j$^$9(B:
- $B>/$J$/$H$b(B 1 $BIC8e$K(B <directive
- module="mpm_common">StartServers</directive> $B8D$N?7$7$$;R%W%m%;%9$,(B
- $B@8@.$5$l$F$$$J$1$l$P!"$=$N?t$K$J$k$h$&$KE,59%W%m%;%9$r@8@.$7$^$9!#(B
- $B$3$N5sF0$O8=:_$NIi2Y$KBP$7$FE,@Z$J;R%W%m%;%9$N?t$H(B
- <directive
- module="mpm_common">StartServers</directive> $B%Q%i%a!<%?$G$N(B
- $B4uK>$N?t$NN>J}$r0];}$7$h$&$H$7$F$$$^$9!#(B</p>
-
- <p><module>mod_status</module> $B$r(B
- $B;HMQ$7$F$$$k>l9g$O!"(B<code>USR1</code> $B%7%0%J%k$,Aw$i$l$?:]$K(B
- $B%5!<%PE}7W$,%<%m$K(B<strong>$B@_Dj$5$l$J$$(B</strong>$B$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#(B
- $B%5!<%P$,?7$7$$%j%/%(%9%H$K1~EzITG=$J;~4V$r:G>.$K$9$k$h$&$K(B
- ($B%j%/%(%9%H$O(B OS $B$K$h$C$F%-%e!<$KDI2C$5$l$k$N$G@dBP$KJ6<:$O$7$^$;$s(B)$B!"(B
- $B$^$?F1;~$K!"4uK>$N%A%e!<%K%s%0%Q%i%a!<%?$r<i$k$h$&$K(B
- $B%3!<%I$O=q$+$l$F$$$^$9!#(B
- $B$3$N$h$&$K$9$k$?$a$K!"@$Be$r$^$?$,$C$?A4;R%W%m%;%9$NDI@W$K;H$o$l$F$$$k(B
- <em>$B%9%3%"%\!<%I(B</em>$B$r0];}$7$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p>status $B%b%8%e!<%k$O!"4K$d$+$J:F5/F00JA0$+$i3+;O$7$F(B
- $B%j%/%(%9%H$K1~Ez$7B3$1$F$$$k;R%W%m%;%9$rFCDj$9$k$?$a$K!"(B
- <code>G</code> $B$r;H$&$3$H$b$7$^$9!#(B</p>
-
- <p>$B8=:_!"(B<code>USR1</code> $B$r;H$&%m%00\F0%9%/%j%W%H$G$O!"(B
- $B:F5/F0A0$N;R%W%m%;%9$,%m%0$r=q$-=*$o$C$?$3$H$r3N>Z$9$kJ}K!$,(B
- $B$"$j$^$;$s!#8E$$%m%0$KBP$7$F2?$+$9$kA0$K!"(B
- <code>USR1</code> $B%7%0%J%k$rAw$C$?8e$$$/$i$+E,Ev$J;~4VBT$D$3$H$r(B
- $BDs0F$7$^$9!#Nc$($P!"BS0h$N69$$DL?.O)$N%f!<%6$N%j%/%(%9%H$N$[$H$s$I$,(B 10
- $BJ,0J2<$G40N;$7$F$$$k$H$$$&$3$H$,J,$+$C$F$$$l$P!"(B
- $B8E$$%m%0$K2?$+$9$kA0$K(B 15 $BJ,BT$D$H$$$&$3$H$G$9!#(B</p>
-
- <note>$B:F5/F0;~$K@_Dj%U%!%$%k$K8m$j$,$"$k$H!"(B
- $B?F%W%m%;%9$O:F5/F0$;$:$K%(%i!<$H$H$b$K=*N;$7$^$9!#(B
- $B4K$d$+$J:F5/F0$N>l9g$O!"?F%W%m%;%9$,=*N;$7$?8e$G$b;R%W%m%;%9$,(B
- $B<B9T$5$l$?$^$^J|CV$5$l$?$j$b$7$^$9!#(B
- ($B:G8e$N%j%/%(%9%H$r=hM}$7$?8e!V4K$d$+$K=*N;!W$9$k(B
- $B;R%W%m%;%9$H$J$j$^$9!#(B)
- $B%5!<%P$r:F5/F0$9$k:]$K!"$3$l$,LdBj$K$J$k$+$b$7$l$^$;$s(B
- -- $B%5!<%P$O(B listen $B$9$k%]!<%H$K%P%$%s%I$G$-$J$$$+$b$7$l$^$;$s!#(B
- $B:F5/F0$9$kA0$K!"@_Dj%U%!%$%k$N9=J8$r(B <code>-t</code>
- $B%3%^%s%I%i%$%s0z?t(B
- (<a href="programs/httpd.html">httpd</a> $B$r$4Mw2<$5$$(B)
- $B$r;H$C$F8!>Z$9$k$3$H$,$G$-$^$9!#(B
- $B@_Dj%U%!%$%k$N0UL#E*$JFbMF$r9=J8$HF1MM$K8!>Z$7$?$$>l9g$O!"(B
- $BHs(B root $B%f!<%6$G(B <code>httpd</code> $B$r5/F0$7$h$&$H$9$l$P$o$+$j$^$9!#(B
- $B$b$7%(%i!<$,$J$1$l$P!"%=%1%C%H$d%m%0$r3+$3$&$H$7$F(B
- root $B$G$J$$$?$a(B
- ($B$b$7$/$O<B9TCf$N(B <code>httpd</code>
- $B$,4{$KI,MW$J%]!<%H$K%P%$%s%I$7$F$$$k$?$a(B)
- $B$K<:GT$9$k$G$7$g$&!#(B
- $B$3$l0J30$NM}M3$G5/F0$K<:GT$7$?$N$G$"$l$P!"(B
- $B$=$l$O@_Dj%U%!%$%k$N%(%i!<$G!"(B
- $B4K$d$+$J:F5/F0$r9T$&A0$K$=$N8m$j$r=$@5$7$J$1$l$P$J$j$^$;$s!#(B</note>
-</section>
-
-<section id="hup"><title>$B5^$J:F5/F0(B</title>
-
-<dl><dt>$B%7%0%J%k(B: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p><code>HUP</code> $B$"$k$$$O(B <code>restart</code> $B%7%0%J%k$r?F%W%m%;%9$KAw$k$H!"(B
- <code>TERM</code> $B$HF1MM$K;R%W%m%;%9$r(B kill $B$7$^$9$,!"(B
- $B?F%W%m%;%9$O=*N;$7$^$;$s!#(B
- $B@_Dj%U%!%$%k$r:FFI9~$7$F!"%m%0%U%!%$%kA4$F$r3+$-D>$7$^$9!#(B
- $B$=$N8e!"?7$7$$;R%W%m%;%9$r5/F0$7$F1~Ez$rB3$1$^$9!#(B</p>
-
- <p><module>mod_status</module>
- $B$r;H$C$F$$$k>l9g$O!"(B<code>HUP</code> $B$,Aw$i$l$?>l9g$K(B
- $B%5!<%PE}7W$,%<%m$K@_Dj$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <note>$B:F5/F0;~$K@_Dj%U%!%$%k$K8m$j$,$"$k$H!"(B
- $B?F%W%m%;%9$O:F5/F0$;$:$K%(%i!<$H$H$b$K=*N;$7$^$9!#(B
- $B$3$l$rHr$1$k$K$O<!$NJ}K!$r$4Mw2<$5$$!#(B</note>
-</section>
-
-<section id="race"><title>$BIUO?(B: $B%7%0%J%k$H6%9g>uBV(B</title>
-
- <p>Apache 1.2b9 $B0JA0$O!":F5/F0$dDd;_$N%7%0%J%k$r4^$`(B<em>$B6%9g>uBV(B</em>
- ($B6%9g>uBV$r4JC1$K@bL@$9$k$H(B: $B%?%$%_%s$K%0$h$kLdBj$G!"(B
- $B6q9g$N0-$$;~4VBS$K$A$g$&$I2?$+$,5/$3$k$HM=A[30$NF0:n$r$9$k(B
- $B$h$&$J$3$H$r;X$7$^$9(B) $B$,$"$j$^$7$?!#(B
- $B!V@5$7$$!W5!G=$r;}$C$F$$$k%"!<%-%F%/%A%c$G$O!"$G$-$k$@$1(B
- $B$3$N$h$&$J$3$H$,5/$3$i$J$$$h$&$K$7$F$$$^$9!#(B
- $B$7$+$7!"$"$k<o$N%"!<%-%F%/%A%c$G$O6%9g>uBV$OL$$@3N<B$K5/$3$j$($k(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
-
- <p>$B%G%#%9%/>e$G(B
- <directive module="mpm_common">ScoreBoardFile</directive>
- $B$r;HMQ$7$F$$$k%"!<%-%F%/%A%c$G$O!"(B
- $B@x:_E*$K%9%3%"%\!<%I$,2u$l$k2DG=@-$,$"$j$^$9!#(B
- $B%9%3%"%\!<%I$,2u$l$?>l9g$O!"(B
- "bind: Address already in use" (<code>HUP</code> $B8e(B) $B$d(B
- "long lost child came home!" (<code>USR1</code> $B8e(B)
- $B$H$$$C$?7k2L$K$J$j$^$9!#(B
- $BA0<T$OCWL?E*$J%(%i!<$G$9$,!"(B
- $B8e<T$O%9%3%"%\!<%I%9%m%C%H$r<:$&$@$1$G$9!#(B
- $B$G$9$+$i4K$d$+$J:F5/F0$O!"$?$^$K3N<B$J:F5/F0(B (HUP)
- $B$bJ;MQ$7$F;H$C$?J}$,NI$$$G$7$g$&!#(B
- $B$3$l$i$NLdBj$r9nI~$9$k$N$OHs>o$KFq$7$$$N$G$9$,!"(B
- $B9,$$$J$3$H$KBgItJ,$N%"!<%-%F%/%A%c$G$O%9%3%"%\!<%I$N%U%!%$%k$OI,MW$"$j$^$;$s!#(B
- $B$3$l$r;HMQ$9$k%"!<%-%F%/%A%c$O!"(B
- <directive module="mpm_common">ScoreBoardFile</directive>
- $B$r$4Mw2<$5$$!#(B</p>
-
- <p>$BA4$F$N%"!<%-%F%/%A%c$K$*$$$F!"8D!9$N;R%W%m%;%9$G(B
- $B7QB3E*$J(B HTTP $B%3%M%/%7%g%s(B (KeepAlive)
- $B$K4X$9$k>.$5$J6%9g>uBV$,5/$3$j$($^$9!#(B
- $B%j%/%(%9%H9T$rFI$s$@8e!"$=$7$F%j%/%(%9%H%X%C%@$rFI$`A0$K(B
- $B;R%W%m%;%9$O=*N;$9$k$+$bCN$l$^$;$s!#(B
- $B$3$l$KBP$9$k=$@5$,$"$j$^$9$,(B 1.2 $B$G=$@5$9$k$K$OH/8+$,CY$9$.$^$7$?!#(B
- $BM}O@E*$K$O!"$3$l$OLdBj$G$O$"$j$^$;$s!#(B
- $B$J$<$J$i(B KeepAlive $B$N%/%i%$%"%s%H$O!"%M%C%H%o!<%/CY1d$d(B
- $B%5!<%P$N%?%$%`%"%&%H$J$I$KHw$($F$$$J$1$l$P$J$i$J$$$+$i$G$9!#(B
- $B<B:]$K$b2?$+1F6A$,$"$k$h$&$K$O8+$($^$;$s(B
- -- $B%F%9%H%1!<%9$G%5!<%P$r(B 1 $BIC4V$K(B 20 $B2s:F5/F0$7$F$b(B
- $B%/%i%$%"%s%H$O2u$l$?2hA|$d6u$N%I%-%e%a%s%H$r<u$1<h$k$3$H$J$/(B
- $B@5>o$K1\Mw$G$-$F$$$^$9!#(B</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/stopping.xml.ko b/docs/manual/stopping.xml.ko
deleted file mode 100644
index 0d9b0e06bb..0000000000
--- a/docs/manual/stopping.xml.ko
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.12 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="stopping.xml.meta">
-
- <title>Áß´Ü°ú Àç½ÃÀÛ</title>
-
-<summary>
- <p>ÀÌ ¹®¼­´Â À¯´Ð½º·ù ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡¸¦ Áß´ÜÇÏ°í Àç½ÃÀÛÇÏ´Â
- ³»¿ëÀ» ´ã°íÀÖ´Ù. À©µµ¿ìÁî NT, 2000, XP »ç¿ëÀÚ´Â <a
- href="platform/windows.html#winsvc">¼­ºñ½º·Î ¾ÆÆÄÄ¡
- ½ÇÇàÇϱâ</a>¿¡¼­, À©µµ¿ìÁî 9x¿Í ME »ç¿ëÀÚ´Â <a
- href="platform/windows.html#wincons">ÄÝ¼Ö ÇÁ·Î±×·¥À¸·Î
- ¾ÆÆÄÄ¡ ½ÇÇàÇϱâ</a>¿¡¼­ Ç÷¡Æûº° ¾ÆÆÄÄ¡ Á¶ÀÛ¹ýÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-</summary>
-
-<seealso><a href="programs/httpd.html">httpd</a></seealso>
-<seealso><a href="programs/apachectl.html">apachectl</a></seealso>
-
-<section id="introduction"><title>¼Ò°³</title>
-
- <p>¾ÆÆÄÄ¡¸¦ Áß´ÜÇÏ°í Àç½ÃÀÛÇÏ·Á¸é ½ÇÇàÇÏ°í ÀÖ´Â
- <code>httpd</code> ÇÁ·Î¼¼½º¿¡ ½Ã±×³ÎÀ» º¸³»¾ß ÇÑ´Ù. ½Ã±×³ÎÀ»
- º¸³»´Â ¹æ¹ýÀº µÎ°¡Áö´Ù. Çϳª´Â À¯´Ð½º <code>kill</code>
- ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º¿¡ Á÷Á¢ ½Ã±×³ÎÀ» º¸³»´Â ¹æ¹ýÀÌ´Ù.
- ½Ã½ºÅÛ¿¡ ¸¹Àº <code>httpd</code>°¡ ½ÇÇàµÇÁö¸¸, <directive
- module="mpm_common">PidFile</directive>¿¡ pid°¡ ±â·ÏµÈ ºÎ¸ð¿Ü¿¡
- ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ½Ã±×³Î(signal)À» º¸³»¸é ¾ÈµÈ´Ù. Áï, ºÎ¸ðÀÌ¿Ü¿¡
- ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ½Ã±×³ÎÀ» º¸³¾ ÇÊ¿ä°¡ ¾ø´Ù´Â ¸»ÀÌ´Ù. ºÎ¸ð¿¡°Ô
- º¸³¾ ¼ö ÀÖ´Â ½Ã±×³ÎÀº ¼¼°¡Áö·Î, ÀÌÁ¦ ¼³¸íÇÒ <code><a
- href="#term">TERM</a></code>, <code><a
- href="#hup">HUP</a></code>, <code><a
- href="#graceful">USR1</a></code>ÀÌ´Ù.</p>
-
- <p>´ÙÀ½°ú °°ÀÌ ºÎ¸ð¿¡°Ô ½Ã±×³ÎÀ» º¸³½´Ù:</p>
-
-<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
-
- <p><code>httpd</code> ÇÁ·Î¼¼½º¿¡°Ô ½Ã±×³ÎÀ» º¸³»´Â ´Ù¸¥ ¹æ¹ýÀº
- ¸í·ÉÇà ¿É¼Ç <code>-k</code>¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¾Æ·¡¼­ ¼³¸íÇÒ
- <code>stop</code>, <code>restart</code>, <code>graceful</code>˼
- <a href="programs/httpd.html">httpd</a> ½ÇÇàÆÄÀÏÀÇ ¾Æ±Ô¸ÕÆ®µéÀÌ´Ù.
- ±×·¯³ª ÀÌ ¾Æ±Ô¸ÕÆ®µé·Î <code>httpd</code>¸¦ ½ÇÇàÇÏ´Â, <a
- href="programs/apachectl.html">apachectl</a> ½ºÅ©¸³Æ®¸¦
- »ç¿ëÇÏ±æ ±ÇÇÑ´Ù.</p>
-
- <p><code>httpd</code>¿¡ ½Ã±×³ÎÀ» º¸³½ÈÄ, ´ÙÀ½ ¸í·É¾î·Î
- ÁøÇà»óȲÀ» ¾Ë ¼ö ÀÖ´Ù:</p>
-
-<example>tail -f /usr/local/apache2/logs/error_log</example>
-
- <p>À§ ¿¹¸¦ ´ç½ÅÀÇ <directive
- module="core">ServerRoot</directive>¿Í <directive
- module="mpm_common">PidFile</directive> ¼³Á¤¿¡ ¾Ë¸Â°Ô ¼öÁ¤Ç϶ó.</p>
-</section>
-
-<section id="term"><title>´çÀå Áß´Ü</title>
-
-<dl><dt>½Ã±×³Î: TERM</dt>
-<dd><code>apachectl -k stop</code></dd>
-</dl>
-
- <p><code>TERM</code>À̳ª <code>stop</code> ½Ã±×³ÎÀ» ºÎ¸ð¿¡°Ô
- º¸³»¸é Áï½Ã ¸ðµç ÀÚ½ÄÀ» Á×ÀδÙ. ÀÚ½ÄÀ» ¿ÏÀüÈ÷ Á×À̴µ¥´Â
- ¸î ÃÊ°¡ °É¸± ¼ö ÀÖ´Ù. ±×·±ÈÄ ºÎ¸ð°¡ Á¾·áÇÑ´Ù. ó¸®ÁßÀÎ ¿äûÀº
- Áߴܵǰí, ´õ ÀÌ»ó ¿äûÀ» ¹ÞÁö¾Ê´Â´Ù.</p>
-</section>
-
-<section id="graceful"><title>Á¡ÀÝÀº Àç½ÃÀÛ</title>
-
-<dl><dt>½Ã±×³Î: USR1</dt>
-<dd><code>apachectl -k graceful</code></dd>
-</dl>
-
- <p><code>USR1</code>À̳ª <code>graceful</code> ½Ã±×³ÎÀ»
- ºÎ¸ð¿¡°Ô º¸³»¸é ºÎ¸ð ÇÁ·Î¼¼½º´Â Àڽĵ鿡°Ô ÇöÀç ¿äûÀ»
- ó¸®ÇÑÈÄ Á¾·áÇ϶ó°í (ȤÀº ÇöÀç ¾Æ¹«°Íµµ ó¸®ÇÏÁö ¾Ê´Ù¸é
- Áï½Ã Á¾·áÇ϶ó°í) <em>Á¶¾ðÇÑ´Ù</em>. ºÎ¸ð´Â ¼³Á¤ÆÄÀÏÀ»
- ´Ù½ÃÀÐ°í ·Î±×ÆÄÀϵµ ´Ù½Ã ¿¬´Ù. ÀÚ½ÄÀÌ Á×À»¶§¸¶´Ù ºÎ¸ð´Â
- Á×Àº ÀڽĴë½Å »õ·Î¿î ¼³Á¤ <em>¼¼´ë</em>¿¡ ±âÃÊÇÑ ÀÚ½ÄÀ»
- ½ÇÇàÇÏ¿© Áï½Ã ¿äûÀ» ó¸®ÇÏ°Ô ÇÑ´Ù.</p>
-
- <note>Á¡ÀÝÀº Àç½ÃÀÛ(graceful restart)À¸·Î <code>USR1</code>À»
- »ç¿ëÇÒ ¼ö ¾ø´Â Ç÷¡Æû¿¡¼­´Â ´ë½Å (<code>WINCH</code>¿Í °°Àº)
- ´Ù¸¥ ½Ã±×³ÎÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. <code>apachectl graceful</code>Àº
- Ç÷¡Æû¿¡ ¾Ë¸ÂÀº ½Ã±×³ÎÀ» º¸³½´Ù.</note>
-
- <p>Á¡ÀÝÀº Àç½ÃÀÛÀº Ç×»ó MPMÀÇ ÇÁ·Î¼¼½º Á¶Àý Áö½Ã¾î ¼³Á¤À»
- °í·ÁÇÏ¿©, Àç½ÃÀÛµ¿¾È Ŭ¶óÀ̾ðÆ®¸¦ ¼­ºñ½ºÇÏ´Â ÇÁ·Î¼¼½º³ª ¾²·¹µå°¡
- Àû´çÇÑ ¼ö¸¦ À¯ÁöÇϵµ·Ï ¼³°èµÇ¾ú´Ù. °Ô´Ù°¡ <directive
- module="mpm_common">StartServers</directive>´Â, ÀÏÃÊ ÈÄ
- ÃÖ¼ÒÇÑ StartServers¸¸Å­ »õ·Î¿î ÀÚ½ÄÀÌ ¾È¸¸µé¾îÁö¸é ÀÚ½ÄÀÌ
- StartServers °³°¡ µÇµµ·Ï »õ·Î ¸¸µç´Ù. Áï, ÇÁ·Î±×·¥Àº ¼­¹öÀÇ
- ÇöÀç ºÎÇÏ¿¡ ¾Ë¸ÂÀº ÀÚ½ÄÀÇ °³¼ö¸¦ À¯ÁöÇϸç,
- <directive>StartServers</directive> ÆĶó¹ÌÅÍ·Î ÁöÁ¤ÇÑ ´ç½ÅÀÇ
- ±â´ë¸¦ Á¸ÁßÇÑ´Ù.</p>
-
- <p><module>mod_status</module> »ç¿ëÀÚ´Â <code>USR1</code>À»
- ¹ÞÀ»¶§ ¼­¹ö Åë°è°¡ 0ÀÌ µÇÁö <strong>¾ÊÀ½À»</strong> ºÃÀ»
- °ÍÀÌ´Ù. ¼­¹ö´Â »õ·Î¿î ¿äûÀ» (¿î¿µÃ¼Á¦´Â À̵éÀ» Å¥¿¡ ´ã¾Æ¼­
- ¾î¶² °æ¿ì¿¡µµ ÀÒ¾î¹ö¸®Áö ¾Ê´Â´Ù) ó¸®ÇÏÁö ¸øÇÏ´Â ½Ã°£À»
- ÃÖ¼ÒÈ­ÇÏ°í ´ç½ÅÀÇ Æ©´× ÆĶó¹ÌÅ͸¦ Á¸ÁßÇϵµ·Ï ¸¸µé¾îÁ³´Ù.
- À̸¦ À§ÇØ ¼¼´ë°£ ¸ðµç ÀÚ½ÄÀ» ±â·ÏÇÏ´Â <em>scoreboard</em>¸¦
- À¯ÁöÇÑ´Ù.</p>
-
- <p>status ¸ðµâÀº ¶ÇÇÑ Á¡ÀÝÀº Àç½ÃÀÛ Àü¿¡ ½ÃÀÛÇÏ¿© ¾ÆÁ÷µµ
- ¿äûÀ» ó¸®ÇÏ°í ÀÖ´Â ÀÚ½ÄÀ» <code>G</code>·Î ¾Ë·ÁÁØ´Ù.</p>
-
- <p>ÇöÀç·Î´Â <code>USR1</code>À» »ç¿ëÇÏ´Â ·Î±×¼øȯ ½ºÅ©¸³Æ®°¡
- Àç½ÃÀÛÀü¿¡ ¸ðµç ÀÚ½ÄÀÌ ·Î±×ÀÛ¼ºÀ» ¸¶ÃÆ´ÂÁö ¾Ë ¼ö ÀÖ´Â
- ¹æ¹ýÀÌ ¾ø´Ù. ¿ì¸®´Â <code>USR1</code> ½Ã±×³ÎÀ» º¸³»°í
- Àû´çÇÑ ½Ã°£ÀÌ Áö³­ÈÄ ÀÌÀü ·Î±×¸¦ ´Ù·çµµ·Ï Á¦¾ÈÇÑ´Ù. ¿¹¸¦
- µé¾î ³·Àº ´ë¿ªÆø »ç¿ëÀÚÀÇ °æ¿ì Á¢¼Ó ´ëºÎºÐÀÌ ¸¶Ä¡´Âµ¥ 10ºÐÀÌ
- ¾È°É¸°´Ù¸é, ÀÌÀü ·Î±×¸¦ ´Ù·ç±âÀü¿¡ 15ºÐ ±â´Ù¸°´Ù.</p>
-
- <note>¼³Á¤ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖ´Ù¸é Àç½ÃÀ۽à ºÎ¸ð´Â Àç½ÃÀÛÇÏÁö
- ¾Ê°í ¿À·ù¸¦ ³»¸ç Á¾·áÇÑ´Ù. ¶Ç, Á¡ÀÝÀº Àç½ÃÀÛÀÇ °æ¿ì Á¾·áÇÒ¶§
- ÀÚ½ÄÀÌ ½ÇÇàµÇµµ·Ï ³öµÐ´Ù. (ÀڽĵéÀº ÀÚ½ÅÀÇ ¸¶Áö¸· ¿äûÀ»
- ó¸®ÇÏ°í "Á¡ÀÝ°Ô Á¾·áÇÑ´Ù".) ÀÌ´Â ¼­¹ö¸¦ Àç½ÃÀÛÇÒ¶§
- ¹®Á¦°¡ µÈ´Ù. ¼­¹ö´Â ÀÚ½ÅÀÌ ±â´Ù¸± Æ÷Æ®¿¡ ¿¬°áÇÏÁö ¸øÇÑ´Ù.
- Àç½ÃÀÛÀü¿¡ <code>-t</code> ¸í·ÉÇà ¿É¼Ç(<a
- href="programs/httpd.html">httpd</a> Âü°í)À¸·Î ¼³Á¤ÆÄÀÏ
- ¹®¹ýÀ» °Ë»çÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ·± °Ë»çµµ ¼­¹ö°¡ ¿Ã¹Ù·Î
- Àç½ÃÀÛÇÒÁö¸¦ º¸ÀåÇÏÁö ¸øÇÑ´Ù. ¼³Á¤ÆÄÀÏÀÇ ¹®¹ýÀÌ ¾Æ´Ñ Àǹ̸¦
- °Ë»çÇÏ·Á¸é root°¡ ¾Æ´Ñ »ç¿ëÀÚ·Î <code>httpd</code>¸¦ ½ÃÀÛÇغ¼ ¼ö ÀÖ´Ù.
- root°¡ ¾Æ´Ï±â¶§¹®¿¡ (¾Æ´Ï¸é ÇöÀç ±× Æ÷Æ®¸¦ »ç¿ëÇÏ´Â
- <code>httpd</code>°¡ ½ÇÇàµÇ±â¶§¹®¿¡) ¿À·ù°¡ ¾ø´Ù¸é ¼ÒÄÏ°ú
- ·Î±×ÆÄÀÏÀ» ¿­·Á°í ½ÃµµÇÏ´Â °úÁ¤¿¡¼­ ½ÇÆÐÇÒ °ÍÀÌ´Ù. ´Ù¸¥
- ÀÌÀ¯¶§¹®¿¡ ½ÇÆÐÇÑ´Ù¸é ¾Æ¸¶µµ ¼³Á¤ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖÀ» °ÍÀÌ´Ù.
- Á¡ÀÝÀº Àç½ÃÀÛÀ» ÇϱâÀü¿¡ ¿À·ù¸¦ °íÃľßÇÑ´Ù.</note>
-</section>
-
-<section id="hup"><title>´çÀå Àç½ÃÀÛ</title>
-
-<dl><dt>½Ã±×³Î: HUP</dt>
-<dd><code>apachectl -k restart</code></dd>
-</dl>
-
- <p><code>HUP</code>À̳ª <code>restart</code> ½Ã±×³ÎÀ»
- ºÎ¸ð¿¡°Ô º¸³»¸é <code>TERM</code>°ú °°ÀÌ ¸ðµç ÀÚ½ÄÀ»
- Á×ÀÌÁö¸¸ ºÎ¸ð´Â Á¾·áÇÏÁö ¾Ê´Â´Ù. ºÎ¸ð´Â ¼³Á¤ÆÄÀÏÀ» ´Ù½ÃÀаí
- ·Î±×ÆÄÀÏÀ» ´Ù½Ã ¿¬´Ù. ±×¸®°í »õ·Î¿î ÀڽĵéÀ» ¸¸µé°í ¼­ºñ½º¸¦
- °è¼ÓÇÑ´Ù.</p>
-
- <p><module>mod_status</module> »ç¿ëÀÚ´Â <code>HUP</code>¸¦
- º¸³»¸é ¼­¹ö Åë°è°¡ 0ÀÌ µÊÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-
-<note>¼³Á¤ÆÄÀÏ¿¡ ¿À·ù°¡ ÀÖ´Ù¸é Àç½ÃÀÛÀ» Çصµ ºÎ¸ð´Â Àç½ÃÀÛÇÏÁö
-¾Ê°í ¿À·ù¸¦ ³»¸ç Á¾·áÇÒ °ÍÀÌ´Ù. À̸¦ ÇÇÇÏ´Â ¹æ¹ýÀº À§¸¦ Âü°íÇ϶ó.</note>
-</section>
-
-<section id="race"><title>ºÎ·Ï: ½Ã±×³Î°ú ·¹À̽º ÄÁµð¼Ç</title>
-
- <p>Apache 1.2b9 ÀÌÀü¿¡´Â Àç½ÃÀÛ°ú Á¾·á ½Ã±×³Î¿¡ °ü°èµÈ
- <em>·¹À̽º ÄÁµð¼Ç(race condition)</em>ÀÌ ÀÖ¾ú´Ù. (·¹À̽º
- ÄÁµð¼ÇÀº °£´ÜÇÑ ¼³¸íÇÏÀÚ¸é, ¾î¶² ÀÏÀÌ À߸øµÈ¶§ ÀϾ¼­
- ±â´ëÇÑ´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â ½Ã°£¿¡ ¹Î°¨ÇÑ ¹®Á¦´Ù.) "¿Ã¹Ù¸¥"
- ±â´ÉÀÌ ÀÖ´Â ¾ÆÅ°ÅØÃÄ¿¡¼­ ¿ì¸®´Â ÀÌ·± ¹®Á¦¸¦ ÃÖ´ëÇÑ ÇØ°áÇß´Ù.
- ±×·¯³ª ¾î¶² ¾ÆÅ°ÅØÃÄ¿¡´Â ¾ÆÁ÷µµ ·¹À̽º ÄÁµð¼ÇÀÌ Á¸ÀçÇÔÀ»
- ÁÖÀÇÇ϶ó.</p>
-
- <p><directive module="mpm_common">ScoreBoardFile</directive>À»
- µð½ºÅ©¿¡ ÀúÀåÇÏ´Â ¾ÆÅ°ÅØÃÄ´Â scoreboard¸¦ ¸Á°¡Æ®¸± °¡´É¼ºÀÌ
- ÀÖ´Ù. ±×·¯¸é (<code>HUP</code>ÈÄ) "bind: Address already in use"
- ȤÀº (<code>USR1</code> ÈÄ) "long lost child came home!"ÀÌ
- ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀüÀÚ´Â ½É°¢ÇÑ ¿À·ùÀÌ°í, ÈÄÀÚ´Â ´ÜÁö ¼­¹ö°¡
- scoreboard slotÀ» ÀÒ°Ô ¸¸µç´Ù. ±×·¡¼­ °­Á¦ Àç½ÃÀÛÀ» ÁÙÀÌ°í
- Á¡ÀÝÀº Àç½ÃÀÛÀ» »ç¿ëÇϱæ ÃßõÇÑ´Ù. ÀÌ ¹®Á¦´Â ÇØ°áÇϱ⠸ſì
- Èûµé´Ù. ±×·¯³ª ´ÙÇàÈ÷µµ ´ëºÎºÐÀÇ ¾ÆÅ°ÅØÃÄ´Â scoreboard·Î ÆÄÀÏÀ»
- »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÆÄÀÏÀ» »ç¿ëÇÏ´Â ¾ÆÅ°ÅØÃĶó¸é <directive
- module="mpm_common">ScoreBoardFile</directive> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
-
- <p>¸ðµç ¾ÆÅ°ÅØÃÄ¿¡´Â Áö¼ÓµÇ´Â HTTP ¿¬°á (KeepAlive)¿¡¼­
- µÎ¹ø° ÀÌÈÄ ¿äûÀ» ó¸®ÇÏ´Â ÀڽĿ¡ ¾à°£ÀÇ ·¹À̽º ÄÁµð¼ÇÀÌ
- ÀÖ´Ù. ÀÚ½ÄÀº ¿äûÁÙÀ» ÀÐÀº ÈÄ ¿äû Çì´õ¸¦ ÀбâÀü¿¡ Á¾·áÇÒ ¼ö
- ÀÖ´Ù. ÀÌ ¹®Á¦´Â ³Ê¹« ´Ê°Ô ¹ß°ßÇÏ¿© 1.2 ¹öÀüÀÌ ³ª¿ÂÈÄ¿¡¾ß
- ¼öÁ¤µÇ¾ú´Ù. ±×·¯³ª ³×Æ®¿÷ Áö¿¬À̳ª ¼­¹ö ½Ã°£Á¦ÇѶ§¹®¿¡ KeepAlive
- Ŭ¶óÀ̾ðÆ®´Â ÀÌ·± °æ¿ì¸¦ ¿¹»óÇؾßÇϱ⠶§¹®¿¡ ÀÌ·Ð»ó ¹®Á¦´Â
- ¾ÈµÈ´Ù. ½ÇÁ¦·Î ¼­¹ö¸¦ °Ë»çÇϱâÀ§ÇØ ÀÏÃÊ¿¡ 20¹ø Àç½ÃÀÛÇÏ´Â µ¿¾È
- Ŭ¶óÀ̾ðÆ®°¡ ±úÁø ±×¸²À̳ª ºó ¹®¼­¾øÀÌ »çÀÌÆ®¸¦ ¼º°øÀûÀ¸·Î
- ÀоîµéÀÌ±æ ±â´ëÇÏÁö ¾Ê´Â´Ù¸é ¹®Á¦°¡ ¾ÈµÈ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/stopping.xml.meta b/docs/manual/stopping.xml.meta
deleted file mode 100644
index 18177018b3..0000000000
--- a/docs/manual/stopping.xml.meta
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>stopping</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>es</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/style/.cvsignore b/docs/manual/style/.cvsignore
deleted file mode 100644
index 36e264cf44..0000000000
--- a/docs/manual/style/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-_generated
diff --git a/docs/manual/style/build.properties b/docs/manual/style/build.properties
deleted file mode 100644
index 164820a0ae..0000000000
--- a/docs/manual/style/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file contains version specific properties
-
-# No xml files yet
-noxml.fr=new_features_2_0.html.fr upgrading.html.fr
-
-# (pending) httpd version
-httpd.version=2.1.0-dev
diff --git a/docs/manual/style/common.dtd b/docs/manual/style/common.dtd
deleted file mode 100644
index d8b4aabf92..0000000000
--- a/docs/manual/style/common.dtd
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Character mnemonic entities -->
-
-<!ENTITY % HTMLlat1 PUBLIC
- "-//W3C//ENTITIES Latin 1 for XHTML//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
-%HTMLlat1;
-
-<!ENTITY % HTMLsymbol PUBLIC
- "-//W3C//ENTITIES Symbols for XHTML//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
-%HTMLsymbol;
-
-<!ENTITY % HTMLspecial PUBLIC
- "-//W3C//ENTITIES Special for XHTML//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
-%HTMLspecial;
-
-<!-- Generic tag entities -->
-
-<!ENTITY % inlinetags "em | strong | code | a | br | directive | module | img
-| cite | q | dfn | var | transnote">
-
-<!ENTITY % blocktags "p | example | note | table | ul | ol | dl | pre
-| blockquote">
-
-<!ENTITY % Block "(%blocktags;)*">
-<!ENTITY % Inline "(#PCDATA | %inlinetags;)*">
-<!ENTITY % BlockOrInline "(#PCDATA | %inlinetags; | %blocktags;)*">
-
-<!ELEMENT title %Inline;>
-
-<!ELEMENT summary %Block;>
-
-<!ELEMENT seealso %Inline;>
-
-<!ELEMENT modulelist (module)+>
-
-<!-- a page may have one or more sections. Each section is named by an
- unique id. A section must have a title and some text. It may have
- subsections and a list of related modules and directives -->
-<!ELEMENT section (title, related?, (section | %blocktags;)*)>
-<!ATTLIST section id ID #IMPLIED>
-
-<!-- the lists of related modules and/or related directives -->
-<!ELEMENT related (modulelist | directivelist)+>
-
-<!-- list of related directives -->
-<!ELEMENT directivelist (directive)+>
-
-<!ELEMENT module (#PCDATA)>
-<!ATTLIST module status CDATA #IMPLIED>
-
-<!ELEMENT directive (#PCDATA)>
-<!ATTLIST directive module CDATA #IMPLIED
- type CDATA #IMPLIED
- status CDATA #IMPLIED >
-
-<!ELEMENT p %Inline;>
-<!ATTLIST p class CDATA #IMPLIED>
-
-<!-- the indent element is used to indent code examples. example/indent and
- code/indent is now replacing pre. -->
-<!ELEMENT indent ( #PCDATA | indent | %inlinetags; )*>
-
-<!ELEMENT em %Inline;>
-
-<!ELEMENT strong %Inline;>
-
-<!ELEMENT code (#PCDATA | indent | %inlinetags;)*>
-
-<!ELEMENT cite %Inline;>
-
-<!ELEMENT q %Inline;>
-
-<!ELEMENT dfn %Inline;>
-
-<!ELEMENT var %Inline;>
-
-<!-- translators note -->
-<!ELEMENT transnote %Inline;>
-
-<!ELEMENT a %Inline;>
-<!ATTLIST a href CDATA #IMPLIED
- name CDATA #IMPLIED
- id CDATA #IMPLIED
- rel CDATA #IMPLIED >
-
-<!ELEMENT br EMPTY>
-
-<!-- Note: The example and note elements should not have more then one
- title. -->
-<!ELEMENT example (#PCDATA | title | indent | %inlinetags; | %blocktags;)*>
-
-<!ELEMENT note (#PCDATA | title | %inlinetags; | %blocktags;)*>
-<!ATTLIST note type CDATA #IMPLIED>
-
-<!ELEMENT table (columnspec | tr)+>
-<!ATTLIST table summary CDATA #IMPLIED
- width CDATA #IMPLIED
- bgcolor CDATA #IMPLIED
- cellspacing CDATA #IMPLIED
- cellpadding CDATA #IMPLIED
- border CDATA #IMPLIED
- style CDATA #IMPLIED>
-
-<!ELEMENT columnspec (column)+>
-
-<!ELEMENT column EMPTY>
-<!ATTLIST column width CDATA #IMPLIED>
-
-<!ELEMENT tr (th | td)+>
-<!ATTLIST tr valign CDATA #IMPLIED >
-
-<!ELEMENT th %BlockOrInline;>
-<!ATTLIST th colspan CDATA #IMPLIED
- rowspan CDATA #IMPLIED
- class CDATA #IMPLIED >
-
-<!ELEMENT td %BlockOrInline;>
-<!ATTLIST td colspan CDATA #IMPLIED
- rowspan CDATA #IMPLIED
- class CDATA #IMPLIED >
-
-<!ELEMENT ul (li+)>
-
-<!ELEMENT ol (li+)>
-<!ATTLIST ol type CDATA #IMPLIED>
-
-<!ELEMENT li %BlockOrInline;>
-<!ATTLIST li class CDATA #IMPLIED >
-
-<!ELEMENT dl (dd | dt)+>
-
-<!ELEMENT dt %Inline;>
-
-<!ELEMENT dd %BlockOrInline;>
-
-<!ELEMENT pre %Inline;>
-
-<!ELEMENT img EMPTY>
-<!ATTLIST img
- src CDATA #REQUIRED
- alt CDATA #REQUIRED
- border CDATA #IMPLIED
- height CDATA #IMPLIED
- width CDATA #IMPLIED >
-
-<!ELEMENT blockquote %Block;>
-<!ATTLIST blockquote cite CDATA #IMPLIED >
-
-<!-- The path and title of the parent document -->
-<!ELEMENT parentdocument (#PCDATA)>
-<!ATTLIST parentdocument href CDATA #REQUIRED >
diff --git a/docs/manual/style/css/manual-chm.css b/docs/manual/style/css/manual-chm.css
deleted file mode 100644
index 9e9d4cb169..0000000000
--- a/docs/manual/style/css/manual-chm.css
+++ /dev/null
@@ -1,26 +0,0 @@
-@import url(manual-loose-100pc.css);
-
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-html {
- font-size: 95%;
-}
-
-h1 {
- margin: 0 0 0.5em 0;
-}
-
-/* the end */
diff --git a/docs/manual/style/css/manual-loose-100pc.css b/docs/manual/style/css/manual-loose-100pc.css
deleted file mode 100644
index 1862700bda..0000000000
--- a/docs/manual/style/css/manual-loose-100pc.css
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * manual.css - no sidebar, 100% normal font height
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* import the main CSS, so we
- * have to adjust only a few things
- */
-@import url(manual.css);
-
-html {
- font-size: 100%;
-}
-
-/* "sidebar" background is white here */
-div#quickview a:hover,
-div#quickview a:active {
- background-color: #f0f0f0;
- color: #0073c7;
-}
-
-div#quickview code.module a:hover,
-div#quickview code.module a:active {
- background-color: #f0f0f0;
- color: #8b4513;
-}
-
-div#quickview code.directive a:hover,
-div#quickview code.directive a:active {
- background-color: #f0f0f0;
- color: #287f00;
-}
-
-h1 {
- font-size: 1.5em;
-}
-
-h2 {
- font-size: 1.2em;
-}
-
-.category h2 {
- font-size: 1em;
-}
-
-h3 {
- font-size: 1.1em;
-}
-
-h4 {
- font-size: 1em;
-}
-
-div.example h3,
-div.note h3,
-div.warning h3 {
- font-size: 1em;
-}
-
-div#quickview h3,
-div#quickview h3.directives {
- margin: 1em 0 0.3em 0;
- font-size: 1.1em;
-}
-
-div#quickview h3.directives {
- margin-top: 0;
-}
-
-div#quickview li {
- font-size: 1em;
-}
-
-div#quickview ul {
- margin-bottom: 1em;
-}
-
-div#quickview ul#toc {
- margin-left: 0;
-}
-
-div#quickview li img {
- display: inline;
- margin-right: 19px;
-}
-
-#module-index div#quickview ul#toc,
-#manual-page div#quickview ul#toc,
-div#quickview #topics {
- padding-left: 0;
-}
-
-div#quickview .seealso {
- padding-left: 34px;
-}
-
-#module-index div#quickview ul#toc li,
-#manual-page div#quickview ul#toc li,
-div#quickview #topics li,
-div#quickview .seealso li {
- margin: 0;
- list-style-type: none;
-}
-
-div#page-header p.menu,
-div#path,
-div#footer {
- font-size: smaller;
-}
-
-div#quickview {
- position: static;
- margin: 0 0 1em 30px;
- padding: 0;
- width: auto;
- background-color: #fff;
-}
-
-div#page-content {
- margin-right: 0;
- padding-right: 0;
-}
-
-div.example pre,
-div.example p > code {
- font-size: 0.9em;
-}
-
-div.note pre,
-div.warning pre {
- font-size: 0.9em;
-}
-
-table.qref td.descr {
- font-size: 0.9em;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * -> The End <-
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
diff --git a/docs/manual/style/css/manual-print.css b/docs/manual/style/css/manual-print.css
deleted file mode 100644
index 1fef6fb6f7..0000000000
--- a/docs/manual/style/css/manual-print.css
+++ /dev/null
@@ -1,715 +0,0 @@
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * manual.css for printers
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * mainframe ;-)
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-html {
- font-size: 11pt;
-}
-
-body {
- background-color: #fff;
- color: #000;
- padding: 0 0 0 0;
- margin: 0;
- font-family: "Times New Roman", serif;
- font-weight: normal;
-}
-
-pre, code {
- font-family: "Courier New", Courier, monospace;
-}
-
-strong {
- font-weight: bold;
-}
-
-q, em, var {
- font-style: italic;
-}
-
-span.transnote {
- background-color: inherit;
- color: #888;
-}
-
-/* fixup IE & Opera
- * otherwise they forget to inherit
- * the computed font-size value
- */
-table, code {
- font-size: 1em;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Links
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* normal links */
-/* ====================== */
-a:link,
-a:visited,
-a:hover,
-a:active {
- color: #000;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* sidebar */
-div#quickview a:hover,
-div#quickview a:active {
- background-color: #fff;
- color: #000;
-}
-
-/* EXPERIMENTAL! I'm waiting for complaints... */
-#page-content p > a[href]:after {
- content: " (\002197\0000A0" attr(href) ") ";
- color: #036;
-}
-
-/* code.module [links] */
-/* ====================== */
-code.module,
-code.module a:link,
-code.module a:visited,
-code.module a:hover,
-code.module a:active {
- color: #8b4513;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* code.directive [links] */
-/* ====================== */
-code.directive,
-code.directive a:link,
-code.directive a:visited,
-code.directive a:hover,
-code.directive a:active {
- color: #287f00;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Headings
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* h1 */
-/* ====================== */
-h1 {
- padding: 0 0 0.2em 0;
- margin: 1em 0 0.5em 0;
- border-style: none none solid none;
- border-bottom-width: 1px;
- border-bottom-color: #405871;
- background-color: inherit;
- color: #000;
- text-decoration: none;
- font-size: 17pt;
- font-weight: bold;
- text-align: center;
-}
-
-/* h2 */
-/* ====================== */
-h2 {
- padding: 0.2em 0 0.2em 0.2em;
- margin: 0 0 0.5em 0;
- width: 80%;
- text-decoration: none;
- font-size: 15pt;
- font-weight: bold;
- border-bottom: 1px solid #000;
- text-align: left;
-}
-
-.section h2,
-.directive-section h2,
-.category h2 {
- background-color: #fff;
- color: #000;
-}
-
-/* take care of <a name>s inside */
-h2 a,
-h2 a:hover,
-h2 a:active {
- color: inherit;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* h3, h4 */
-/* ====================== */
-h3 {
- background-color: inherit;
- color: #000;
- text-decoration: none;
- font-weight: bold;
- font-size: 13pt;
- margin: 1.3em 0 0.4em 0;
- padding: 0 0 0 0.2em;
-}
-
-h4 {
- background-color: inherit;
- color: #000;
- text-decoration: none;
- font-weight: bold;
- font-size: 11pt;
- margin: 1.3em 0 0.2em 0;
- padding: 0 0 0 0.2em;
-}
-
-/* margin adjustment */
-h3 + *, h4 + * {
- margin-top: 0;
-}
-
-/* IE confuses the + * :-(
- * so reset some things
- */
-ul, .section table, .directive-section table {
- margin-bottom: 1em;
-}
-
-/* titles for
- * examples, notes and warnings
- */
-div.example h3,
-div.note h3,
-div.warning h3 {
- margin: 0 0 0.5em 0;
- text-align: left;
- font-size: 11pt;
-}
-
-/* sidebar */
-div#quickview h3 {
- margin: 1em 0 0.3em 0;
- font-size: 13pt;
-}
-
-div#quickview h3.directives {
- margin-top: 0;
-}
-
-/* take care of <a name>s inside */
-h3 a,
-h3 a:hover,
-h3 a:active,
-h4 a,
-h4 a:hover,
-h4 a:active {
- color: inherit;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Up & Top helper images
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-div.up,
-div.top {
- display: none;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Tables
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* general */
-/* ====================== */
-table {
- border: 1px solid #000;
- border-collapse: collapse;
- padding: 2px;
- margin-top: 0.5em;
- margin-bottom: 0;
- margin-left: 1px; /* border-width == 1px */
-}
-
-td, th {
- empty-cells: show; /* show border around empty cells */
- padding: 0.1em 0.2em;
- vertical-align: top;
- text-align: left;
- line-height: 1.1em;
-}
-
-th {
- font-weight: bold;
-}
-
-td.centered {
- text-align: center;
-}
-
-tr.header, tr.header th {
- border-top: 1px solid #000;
- border-bottom: 1px solid #000;
-}
-
-/* bordered table cells */
-/* ====================== */
-
-/* turn off borders in tables nested in
- * bordered tables per default
- */
-table.bordered table td,
-table.bordered table th {
- border-style: none;
-}
-
-table.bordered td,
-table.bordered th,
-table table.bordered td,
-table table.bordered th {
- border: 1px solid #000;
-}
-
-/* mod/dir. overview table and quick reference */
-/* ============================================ */
-table.module th,
-table.directive th {
- white-space: nowrap;
-}
-
-table.qref {
- border-collapse: collapse;
- width: auto;
-}
-
-table.qref td {
- border-style: none solid;
- border-color: #000;
- border-width: 1px;
-}
-
-table.qref td.descr {
- padding-left: 1em;
- font-size: 11pt;
-}
-
-table#legend {
- width: 100%;
- border-style: none;
- border-width: 0;
- vertical-align: bottom;
- padding: 0;
- margin: 0;
-}
-
-table#legend td {
- vertical-align: bottom;
- margin: 0;
- padding: 0;
-}
-
-table#legend table {
- vertical-align: bottom;
- margin: 0 0 0 0.4em;
- padding: 0;
- height: 7.5em;
-}
-
-table#legend td.letters span {
- display: none;
-}
-
-table#legend table td,
-table#legend table th {
- vertical-align: middle;
- padding: 0.1ex 0.2em;
- line-height: 1em;
-}
-
-/* related modules & dir. */
-/* ====================== */
-
-/* assuming, all links are enclosed by
- * <code class="directive"> or
- * <code class="module">
- */
-
-table.related {
- border-collapse: collapse;
-}
-
-table.related th,
-table.related td {
- background-color: #fff;
- color: #000;
- padding: 0.2ex 0.4em;
- border: 1px solid #000;
-}
-
-table.related th {
- vertical-align: middle;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Lists
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* list default values */
-/* ====================== */
-ul {
- list-style-type: disc;
-}
-
-ul ul {
- list-style-type: square;
-}
-
-ul ul ul {
- list-style-type: circle;
-}
-
-li, dt, dd {
- line-height: 1.1em;
-}
-
-dt {
- margin-top: 0.5em;
- font-weight: bold;
-}
-
-ol li {
- margin-top: 0.5em;
-}
-
-ol.up-A {
- list-style-type: upper-alpha;
-}
-
-/* table of contents */
-/* ====================== */
-#toc,
-#topics {
- margin: 0;
- padding: 0;
-}
-
-#toc li,
-#topics li {
- list-style-type: square;
- margin: 0 0 1em 0;
- padding: 0;
-}
-
-#toc li img,
-#topics li img {
- margin-right: 19px;
-}
-
-/* see also */
-/* ====================== */
-.seealso {
- margin: 0;
- padding: 0;
-}
-
-.seealso li {
- list-style-type: square;
- margin: 0 0 1em 0;
- padding: 0 0 0 34px;
-}
-
-/* related modules & dir. */
-/* ====================== */
-table.related td ul,
-table.related td li {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-/* list of all directives */
-/* ====================== */
-div#directive-list ul {
- margin: 0;
- padding: 0;
-}
-
-/* quickview */
-/* ====================== */
-div#quickview li {
- font-size: 11pt;
-}
-
-div#quickview ul {
- margin: 0;
- padding: 0;
-}
-
-div#quickview ul#toc {
- margin: 0;
- padding: 0;
-}
-
-div#quickview ul#toc li {
- margin: 0 0 0 1em;
- padding: 0;
- list-style-type: square;
- list-style-position: outside;
-}
-
-div#quickview li img {
- display: none;
-}
-
-#module-index div#quickview ul#toc,
-#manual-page div#quickview ul#toc,
-div#quickview #topics,
-div#quickview .seealso {
- padding-left: 0;
-}
-
-#module-index div#quickview ul#toc li,
-#manual-page div#quickview ul#toc li,
-div#quickview #topics li,
-div#quickview .seealso li {
- margin: 0 0 2px 1em;
- padding: 0;
- list-style-type: square;
- list-style-position: outside;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * main page sections
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* page header */
-/* ====================== */
-div#page-header {
- margin-left: 0;
-}
-
-div#page-header img {
- display: none;
-}
-
-div#page-header p.apache {
- background-color: #fff;
- color: #000;
- padding: 0;
- margin: 0;
- text-align: center;
- vertical-align: middle;
- font-size: 20pt;
- font-weight: bold;
- line-height: 20pt;
-}
-
-div#page-header p.menu {
- display: none;
-}
-
-/* breadcrumb navigation */
-div#path {
- display: none;
-}
-
-/* content sections */
-/* ====================== */
-div#preamble {
- padding-bottom: 1em;
- margin-left: 0;
-}
-
-div.section,
-div.directive-section {
- margin: 0;
- padding: 0;
-}
-
-.section p,
-.directive-section p {
- margin: 0 0 1em 0;
- padding: 0;
-}
-
-/* look for this on directive
- * list pages
- */
-div#directive-list {
- margin-left: 0;
- padding: 0 0 1em 1em;
-}
-
-div#directive-ref {
- margin: -1em 0 0 1px;
- padding: 0 0 1em 0;
- width: auto;
-}
-
-/* no sidebar */
-div#quickview {
- position: static;
- margin: 0 0 1em 0;
- padding: 0;
- width: auto;
- background-color: #fff;
- color: inherit;
-}
-
-/* -> keep content wide */
-div#page-content {
- padding-top: 0;
- margin-right: 0;
- padding-right: 0;
-}
-
-/* in general */
-p {
- line-height: 1.1em;
-}
-
-/* page footer */
-/* ====================== */
-div#footer {
- margin-left: 0;
- font-size: 11pt;
- border-top: 1px solid #000;
- padding-top: 0.2em;
-}
-
-div#footer p.apache {
- float: none;
- text-align: center;
- padding: 0 0 1em 0;
- margin-top: 0;
- font-weight: bold;
-}
-
-div.toplang,
-div.bottomlang,
-div#footer p.menu {
- display: none;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * subsections (examples, notes, warnings)
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* examples */
-/* ====================== */
-div.example,
-div.note div.example {
- background-color: #fff;
- color: #000;
- padding: 0.5em;
- margin: 1em;
- border: 1px dotted #000;
-}
-
-/* the following [block] elements
- * may appear inside example...
- */
-div.example p,
-div.example pre,
-div.example table {
- padding: 0;
- margin: 0;
-}
-
-div.example p {
- line-height: 1em;
-}
-
-div.example pre,
-div.example p > code {
- font-size: 10pt;
-}
-
-/* notes & warnings */
-/* ====================== */
-div.note,
-div.warning {
- background-color: #fff;
- color: #000;
- border: 1px solid #000;
- padding: 0.5em;
- margin: 1em;
-}
-
-div.note p,
-div.warning p {
- margin: 0;
- padding: 0;
-}
-
-div.note pre,
-div.warning pre {
- font-size: 10pt;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * quotations, indented paragraphs and figures
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-p.letters {
- display: none;
-}
-
-blockquote p {
- font-style: italic;
- margin: 0;
-}
-
-blockquote p.cite {
- font-style: normal;
- margin-top: 0;
- margin-left: 2em;
-}
-
-blockquote p.cite cite {
- font-style: normal;
-}
-
-p.indent {
- margin-left: 2em;
- margin-top: 1em;
-}
-
-#index-page form {
- display: none;
-}
-
-p.figure {
- margin-left: 2em;
- font-style: italic;
-}
-
-p.figure img {
- border: 1px solid #000;
-}
-
-p.figure dfn {
- font-weight: bold;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * -> The End <-
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
diff --git a/docs/manual/style/css/manual-zip-100pc.css b/docs/manual/style/css/manual-zip-100pc.css
deleted file mode 100644
index 237b5494b7..0000000000
--- a/docs/manual/style/css/manual-zip-100pc.css
+++ /dev/null
@@ -1,22 +0,0 @@
-@import url(manual-loose-100pc.css);
-
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-h1 {
- margin: 0 0 0.5em 0;
-}
-
-/* the end */
diff --git a/docs/manual/style/css/manual-zip.css b/docs/manual/style/css/manual-zip.css
deleted file mode 100644
index 4677c77521..0000000000
--- a/docs/manual/style/css/manual-zip.css
+++ /dev/null
@@ -1,23 +0,0 @@
-@import url(manual.css);
-
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-h1 {
- margin: 0 0 0.5em 0;
-}
-
-/* the end */
diff --git a/docs/manual/style/css/manual.css b/docs/manual/style/css/manual.css
deleted file mode 100644
index 9411c0f8e2..0000000000
--- a/docs/manual/style/css/manual.css
+++ /dev/null
@@ -1,1005 +0,0 @@
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * manual.css
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * mainframe ;-)
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-html {
- font-size: 14px;
-}
-
-body {
- background-color: #fff;
- color: #036;
- padding: 0 1em 0 0;
- margin: 0;
- font-family: Arial, Helvetica, sans-serif;
- font-weight: normal;
-}
-
-pre, code {
- font-family: "Courier New", Courier, monospace;
-}
-
-strong {
- font-weight: bold;
-}
-
-q, em, var {
- font-style: italic;
-}
-
-span.transnote {
- background-color: inherit;
- color: #888;
-}
-
-/* fixup IE & Opera
- * otherwise they forget to inherit
- * the computed font-size value
- */
-table, code {
- font-size: 1em;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Links
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* normal links */
-/* ====================== */
-a:link {
- color: #0073c7;
- background-color: inherit;
-}
-
-a:visited {
- color: #5A88B5;
- background-color: inherit;
-}
-
-a:link:hover,
-a:link:active,
-a:visited:hover,
-a:visited:active {
- color: #0073c7;
- background-color: #f0f0f0;
-}
-
-/* hover on non-white backgrounds */
-tr.odd a:hover,
-tr.odd a:active,
-tr.header a:hover,
-tr.header a:active,
-div.note a:hover,
-div.note a:active,
-div.example a:hover,
-div.example a:active,
-div.warning a:hover,
-div.warning a:active,
-div#quickview a:hover,
-div#quickview a:active {
- background-color: #fff;
- color: #0073c7;
-}
-
-/* code.module [links] */
-/* ====================== */
-code.module,
-code.module a:link {
- color: #8b4513;
- background-color: inherit;
-}
-
-code.module a:visited {
- color: #bc8f8f;
- background-color: inherit;
-}
-
-code.module a:hover,
-code.module a:active {
- color: #8b4513;
- background-color: #f0f0f0;
-}
-
-/* hover on non-white backgrounds */
-tr.odd code.module a:hover,
-tr.odd code.module a:active,
-tr.header code.module a:hover,
-tr.header code.module a:active,
-div.note code.module a:hover,
-div.note code.module a:active,
-div.example code.module a:hover,
-div.example code.module a:active,
-div.warning code.module a:hover,
-div.warning code.module a:active,
-div#quickview code.module a:hover,
-div#quickview code.module a:active {
- background-color: #fff;
- color: #8b4513;
-}
-
-/* code.directive [links] */
-/* ====================== */
-code.directive,
-code.directive a:link {
- color: #287f00;
- background-color: inherit;
-}
-
-code.directive a:visited {
- color: #35a500;
- background-color: inherit;
-}
-
-code.directive a:hover,
-code.directive a:active {
- color: #287f00;
- background-color: #f0f0f0;
-}
-
-/* hover on non-white backgrounds */
-tr.odd code.directive a:hover,
-tr.odd code.directive a:active,
-tr.header code.directive a:hover,
-tr.header code.directive a:active,
-div.note code.directive a:hover,
-div.note code.directive a:active,
-div.example code.directive a:hover,
-div.example code.directive a:active,
-div.warning code.directive a:hover,
-div.warning code.directive a:active,
-div#quickview code.directive a:hover,
-div#quickview code.directive a:active {
- background-color: #fff;
- color: #287f00;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Headings
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* h1 */
-/* ====================== */
-h1 {
- padding: 0.2em;
- margin: 0;
- border: 1px solid #405871;
- background-color: inherit;
- color: #036;
- text-decoration: none;
- font-size: 22px;
- font-weight: bold;
-}
-
-/* h2 */
-/* ====================== */
-h2 {
- padding: 0.2em 0 0.2em 0.7em;
- margin: 0 0 0.5em 0;
- text-decoration: none;
- font-size: 18px;
- font-weight: bold;
-}
-
-.section h2 {
- background-color: #405871;
- color: #fff;
-}
-
-.directive-section h2 {
- background-color: #557697;
- color: #fff;
-}
-
-.category h2 {
- background-color: #e5ecf3;
- color: #405871;
- font-size: 14px;
-}
-
-/* take care of <a name>s inside */
-h2 a,
-h2 a:hover,
-h2 a:active {
- color: inherit;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* h3, h4 */
-/* ====================== */
-h3 {
- background-color: inherit;
- color: #036;
- text-decoration: none;
- font-weight: bold;
- font-size: 16px;
- margin: 1.3em 0 0.4em 0;
- padding: 0;
-}
-
-h4 {
- background-color: inherit;
- color: #036;
- text-decoration: none;
- font-weight: bold;
- font-size: 14px;
- margin: 1.3em 0 0.2em 0;
- padding: 0;
-}
-
-/* margin adjustment */
-h3 + *, h4 + * {
- margin-top: 0;
-}
-
-/* IE confuses the + * :-(
- * so reset some things
- */
-ul, .section table, .directive-section table {
- margin-bottom: 1em;
-}
-
-/* titles for
- * examples, notes and warnings
- */
-div.example h3,
-div.note h3,
-div.warning h3 {
- margin: 0 0 0.5em 0;
- text-align: left;
- font-size: 14px;
-}
-
-/* sidebar */
-div#quickview h3 {
- margin: 1em 0 0.3em 0.5em;
- font-size: 15px;
-}
-
-div#quickview h3.directives {
- margin-top: 0.3em;
-}
-
-/* take care of <a name>s inside */
-h3 a,
-h3 a:hover,
-h3 a:active,
-h4 a,
-h4 a:hover,
-h4 a:active {
- color: inherit;
- background-color: inherit;
- text-decoration: none;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Up & Top helper images
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* arrow left */
-/* ====================== */
-div.up {
- width: 30px;
- height: 20px;
- padding: 0;
- margin: -20px 0 1px 0;
- text-align: center;
- vertical-align: top;
-}
-
-div.up img {
- vertical-align: top;
- width: 11px;
- height: 11px;
- border-style: none;
-}
-
-/* arrow up (to page top) */
-/* ====================== */
-div.top {
- width: 30px;
- padding: 0 0 0 30px;
- margin: 0;
-}
-
-div.top img {
- margin-top: 0.5em;
- vertical-align: bottom;
- width: 11px;
- height: 11px;
- border-style: none;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Tables
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* general */
-/* ====================== */
-table {
- border: 1px solid #aaa;
- border-collapse: collapse;
- padding: 2px;
- margin-top: 0.5em;
- margin-bottom: 0;
-}
-
-td, th {
- empty-cells: show; /* show border around empty cells */
- padding: 0.1em 0.2em;
- vertical-align: top;
- text-align: left;
- line-height: 1.3em;
-}
-
-th {
- font-weight: bold;
-}
-
-td.centered {
- text-align: center;
-}
-
-tr.odd { /* for large tables alternating colors */
- background-color: #f2f2f2;
-}
-
-tr.header, tr.header th {
- background-color: #e2e2e2;
- border-top: 1px solid #aaa;
- border-bottom: 1px solid #aaa;
-}
-
-/* bordered table cells */
-/* ====================== */
-
-/* turn off borders in tables nested in
- * bordered tables per default
- */
-table.bordered table td,
-table.bordered table th {
- border-style: none;
-}
-
-table.bordered td,
-table.bordered th,
-table table.bordered td,
-table table.bordered th {
- border: 1px solid #aaa;
-}
-
-/* index page layout table */
-/* ======================= */
-body#index-page div#page-content {
- width: 100%; /* IE fun */
-}
-
-body[id]#index-page div#page-content {
- width: auto; /* reasonable browsers. */
-}
-
-table#indextable {
- width: 100%;
- border-collapse: collapse;
- border: 0 none;
-}
-
-table#indextable td {
- width: 33.3%;
- border-left: 1px solid #aaa;
- padding-top: 0;
- padding-bottom: 0;
-}
-
-table#indextable td.col1 {
- border-left: 0 none;
- padding-left: 0;
-}
-
-table#indextable td.col3 {
- padding-right: 0;
-}
-
-/* mod/dir. overview table and quick reference */
-/* ============================================ */
-table.module th,
-table.directive th {
- white-space: nowrap;
-}
-
-table.qref {
- border-collapse: collapse;
- width: 100%;
-}
-
-table.qref td {
- border-style: none solid;
- border-color: #aaa;
- border-width: 1px;
-}
-
-table.qref td.descr {
- padding-left: 1em;
- font-size: 13px;
-}
-
-table#legend {
- width: 100%;
- border-style: none;
- border-width: 0;
- vertical-align: bottom;
- padding: 0;
- margin: 0;
-}
-
-table#legend td {
- vertical-align: bottom;
- margin: 0;
- padding: 0;
-}
-
-table#legend td.letters {
- width: 100%;
- padding-bottom: 0.5em;
-}
-
-table#legend table {
- vertical-align: bottom;
- margin: 0 0 0 0.4em;
- padding: 0;
- height: 7.5em;
-}
-
-table#legend table td,
-table#legend table th {
- vertical-align: middle;
- padding: 0.1ex 0.2em;
- line-height: 1em;
- white-space: nowrap;
-}
-
-/* related modules & dir. */
-/* ====================== */
-
-/* assuming, all links are enclosed by
- * <code class="directive"> or
- * <code class="module">
- */
-
-table.related {
- border-collapse: separate;
-}
-
-table.related th {
- padding: 0.2ex 0.3em;
- background-color: #e5ecf3;
- color: #405871;
- vertical-align: middle;
-}
-
-table.related td {
- padding: 0.2ex 0.3em;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Lists
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* list default values */
-/* ====================== */
-ul {
- list-style-type: disc;
-}
-
-ul ul {
- list-style-type: square;
-}
-
-ul ul ul {
- list-style-type: circle;
-}
-
-li, dt, dd {
- line-height: 1.3em;
-}
-
-dt {
- margin-top: 0.5em;
- font-weight: bold;
-}
-
-ol li {
- margin-top: 0.5em;
-}
-
-ol.up-A {
- list-style-type: upper-alpha;
-}
-
-ol.lo-A {
- list-style-type: lower-alpha;
-}
-
-dd.separate {
- margin-bottom: 2em;
-}
-
-li.separate {
- margin-bottom: 1em;
-}
-
-/* table of contents */
-/* ====================== */
-#toc,
-#topics {
- margin: 0 0 1em 0;
- padding: 0;
-}
-
-#toc li,
-#topics li {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-/* see also */
-/* ====================== */
-.seealso {
- margin: 0 0 1em 0;
- padding: 0;
-}
-
-.seealso li {
- list-style-type: none;
- margin: 0;
- padding: 0 0 0 34px;
-}
-
-/* related modules & dir. */
-/* ====================== */
-table.related td ul,
-table.related td li {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-/* list of all directives */
-/* ====================== */
-div#directive-list ul {
- margin: 0;
- padding: 0;
-}
-
-/* indextable */
-/* ========== */
-table#indextable td ul {
- list-style-type: none;
- margin: 0 0 1em 0.5em;
- padding: 0 0 0 0;
-}
-
-table#indextable td ul li {
- margin-top: 0.3em;
-}
-
-/* sidebar */
-/* ====================== */
-div#quickview li {
- font-size: 13px;
-}
-
-div#quickview ul {
- margin: 0 0 15px 0;
- padding: 0;
-}
-
-div#quickview ul#toc {
- margin: 0 0 0 0.5em;
- padding: 0;
-}
-
-#module-index div#quickview ul#toc,
-#manual-page div#quickview ul#toc {
- margin-left: 0;
-}
-
-div#quickview ul#toc li {
- margin: 0;
- padding: 0;
- list-style-type: none;
-}
-
-div#quickview li img {
- display: none;
-}
-
-#module-index div#quickview ul#toc,
-#manual-page div#quickview ul#toc,
-div#quickview #topics,
-div#quickview .seealso {
- padding-left: 15px;
-}
-
-#module-index div#quickview ul#toc li,
-#manual-page div#quickview ul#toc li,
-div#quickview #topics li,
-div#quickview .seealso li {
- margin: 0.4em 0 2px 0;
- padding: 0;
- list-style-type: square;
- list-style-position: outside;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * main page sections
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* page header */
-/* ====================== */
-div#page-header {
- margin-left: 30px;
-}
-
-div#page-header img {
- padding: 0;
- display: block;
- margin: -70px 0 1px 2em;
- width: 248px;
- height: 70px;
-}
-
-div#page-header p.apache {
- background-color: #405871;
- color: #fff;
- padding: 0 0 0 248px;
- margin: 0;
- text-align: center;
- vertical-align: middle;
- font-size: 16px;
- font-weight: bold;
- line-height: 29px;
-}
-
-div#page-header p.menu {
- text-align: right;
- font-size: 13px;
- margin: 30px 0 0.5em 0;
- padding: 0;
-}
-
-/* breadcrumb navigation */
-div#path {
- margin: 0.2em 0 1.2em 30px;
- padding: 0;
- font-size: 13px;
-}
-
-/* content sections */
-/* ====================== */
-div#preamble {
- padding-bottom: 1em;
- margin-left: 30px;
-}
-
-div.section,
-div.directive-section {
- margin: -1.2em 0 0 60px;
- padding: 0;
-}
-
-.section p,
-.directive-section p {
- margin: 0 0 1em 0;
- padding: 0;
-}
-
-/* look for this on directive
- * list pages
- */
-div#directive-list {
- margin-left: 30px;
- padding: 0 0 1em 1em;
-}
-
-div#directive-ref {
- margin: -1em 0 0 0;
- padding: 0 0 1em 30px;
- width: 100%; /* IE is BAD (broken as designed) */
-}
-
-div[id]#directive-ref { /* a big sorry to ICab, Amaya (and old Konquerors?) */
- width: auto; /* other browsers are fine ;-) */
-}
-
-/* sidebar position: right */
-div#quickview {
- position: absolute;
- top: 5.5em;
- right: 1em;
- margin-left: 0;
- margin-top: 40px;
- padding: 4px;
- width: 13.5em;
- background-color: #f0f0f0;
- color: inherit;
-}
-
-/* -> move content left */
-div#page-content {
- padding-top: 0;
- margin-right: 13em;
- padding-right: 30px;
-}
-
-/* unsqueeze on some pages... */
-body.no-sidebar div#page-content,
-body#index-page div#page-content {
- margin-right: 0;
- padding-right: 0;
-}
-
-body#index-page div#page-content {
- margin-left: 30px;
- padding-bottom: 1em;
-}
-
-/* in general */
-p {
- line-height: 1.3em;
-}
-
-/* translations */
-/* ====================== */
-.toplang {
- padding: 0;
- margin: 0.2em 0.2em 1em 0;
-}
-
-.bottomlang {
- padding: 0;
- margin: 0 0.2em 0.2em 0;
-}
-
-.toplang p,
-.bottomlang p {
- font-size: 13px;
- text-align: right;
- background-color: inherit;
- color: #ccc;
- margin: 0;
- padding: 0;
-}
-
-.toplang p span,
-.bottomlang p span {
- background-color: inherit;
- color: #036;
-}
-
-.toplang p a:link,
-.toplang p a:visited,
-.bottomlang p a:link,
-.bottomlang p a:visited {
- text-decoration: none;
- font-weight: bold;
-}
-
-.toplang p a:hover,
-.toplang p a:active,
-.bottomlang p a:hover,
-.bottomlang p a:active {
- font-weight: bold;
-}
-
-/* page footer */
-/* ====================== */
-div#footer {
- margin-left: 30px;
- font-size: 13px;
- border-top: 1px solid #405871;
- padding-top: 0.2em;
-}
-
-div#footer p.apache {
- float: left;
- text-align: left;
- padding: 0 0 1em 0;
- margin-top: 0;
-}
-
-div#footer p.menu {
- float: right;
- text-align: right;
- margin-top: 0;
- padding: 0 0 1em 0;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * subsections (examples, notes, warnings)
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-/* examples */
-/* ====================== */
-div.example {
- background-color: #e5ecf3;
- color: #000;
- padding: 0.5em;
- margin: 1em 2em 1em 1em;
-}
-
-/* example inside a note:
- * blue in gray doesn't look good
- * so simply draw a border around
- * and keep it gray
- */
-div.note div.example,
-div.warning div.example {
- border: 1px solid #aaa;
- background-color: transparent;
- color: inherit;
- margin-right: 1em;
-}
-
-/* example inside table */
-table div.example {
- margin-right: 1em;
-}
-
-/* the following [block] elements
- * may appear inside example...
- */
-div.example p,
-div.example pre,
-div.example table {
- padding: 0;
- margin: 0;
-}
-
-div.example p {
- line-height: 1em;
-}
-
-div.example pre,
-div.example p > code {
- font-size: 13px;
-}
-
-/* notes & warnings */
-/* ====================== */
-div.note,
-div.warning {
- background-color: #eee;
- color: #036;
- padding: 0.5em;
- margin: 1em 2em 1em 1em;
-}
-
-div.warning {
- border: 1px solid #f00;
-}
-
-div.note p,
-div.warning p {
- margin: 0.5em 0 0 0;
- padding: 0;
-}
-
-div.note pre,
-div.warning pre {
- font-size: 13px;
-}
-
-/* inside table */
-table div.note,
-table div.warning {
- margin-right: 1em;
-}
-
-div.outofdate {
- background-color: #ffffe0;
- color: #036;
- padding: 0.5em;
- margin: 1em 2em 1em 1em;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * quotations, indented paragraphs, forms and figures
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-p.letters {
- margin: 1em 0 0 0;
-}
-
-p.centered {
- text-align: center;
-}
-
-.letters {
- text-align: center;
- background-color: inherit;
- color: #ccc;
-}
-
-.letters a:link,
-.letters a:visited {
- text-decoration: none;
- font-weight: bold;
-}
-
-.letters a:hover,
-.letters a:active {
- font-weight: bold;
-}
-
-blockquote p {
- font-style: italic;
- margin: 0;
-}
-
-blockquote p.cite {
- font-style: normal;
- margin-top: 0;
- margin-left: 2em;
-}
-
-blockquote p.cite cite {
- font-style: normal;
-}
-
-p.indent {
- margin-left: 2em;
- margin-top: 1em;
-}
-
-span.indent {
- padding-left: 1.5em;
- display: block;
-}
-
-#index-page form {
- text-align: center;
-}
-
-#index-page form p {
- line-height: 1.1em;
-}
-
-#index-page form input {
- font-size: 1em;
-}
-
-p.figure {
- margin-left: 2em;
- font-style: italic;
-}
-
-p.figure img {
- border: 1px solid #aaa;
-}
-
-p.figure dfn {
- font-weight: bold;
-}
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * -> The End <-
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
diff --git a/docs/manual/style/description.xml b/docs/manual/style/description.xml
deleted file mode 100644
index d81722a927..0000000000
--- a/docs/manual/style/description.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<description>
-This build file contains all operations that are necessary for building
-the Apache httpd documentation. It is called by invoking build.bat (Win32)
-or build.sh (/bin/sh systems) with a target argument (full list below).
-For example, if you want to build the Japanese HTML files, type:
-
- ./build.sh ja
-
-Some targets have additional requirements:
-
-* 'metafiles' and 'modulelists' need perl in PATH. (It's checked automatically
- and skipped if perl is not available)
-
-* 'chm-foo' targets need:
- - the HTML Help compiler in PATH (or modify this build file). The
- compiler (hhc.exe) is part of the HTML Help Workshop which is freely
- available and can be downloaded from
- http://msdn.microsoft.com/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp
- - The appropriate locale (e.g. Japanese) before invoking hhc.exe. Otherwise
- the compiler is not able to build the fulltext search index correctly and
- the TOC may be garbled, too. In particular:
- + chm-de: German (Germany), sorting order: dictionary
- + chm-en: English (USA)
- + chm-es: Spanish (Spain), sorting order: international
- + chm-ja: Japanese
- + chm-ko: Korean
-
-</description> \ No newline at end of file
diff --git a/docs/manual/style/faq.dtd b/docs/manual/style/faq.dtd
deleted file mode 100644
index b5503be25c..0000000000
--- a/docs/manual/style/faq.dtd
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!ENTITY % common SYSTEM "common.dtd">
-%common;
-
-<!-- <faq> is the root element -->
-<!ELEMENT faq (parentdocument?, title, description?, summary?,
-seealso*, (section | categories))>
-
-<!ATTLIST faq metafile CDATA #REQUIRED
- all-in-one (yes | no ) "no"
->
-
-<!ELEMENT categories (categoryfile*)>
-
-<!ELEMENT categoryfile (#PCDATA)>
-
-<!ELEMENT description %Inline;>
diff --git a/docs/manual/style/lang-targets.xml b/docs/manual/style/lang-targets.xml
deleted file mode 100644
index 9a4fd9677f..0000000000
--- a/docs/manual/style/lang-targets.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- this file contains language specific targets and will be included -->
-<!-- into build.xml. IT IS AUTOGENERATED. DO NOT TOUCH! -->
-<!-- ==================================================================== -->
-<project name="lang-targets">
-
-<target description="- builds all HTML files and nroff man pages" name="all" depends="de, en, es, fr, ja, ko, ru"/>
-<target description="- builds all zip download packages" name="zip-all" depends="zip-de, zip-en, zip-es, zip-fr, zip-ja, zip-ko, zip-ru"/>
-
-<!-- German -->
-<!-- ==================================================================== -->
-<property value=".xml.de" name="inputext.de"/>
-<property value=".html.de" name="outputext.de"/>
-
-<target description="- builds German HTML files" name="de">
- <html.generic lang="de"/>
-</target>
-<target description="- builds the German zipped download package" name="zip-de">
- <zip.generic lang="de"/>
-</target>
-<target description="- builds the German CHM file" name="chm-de">
- <chm.generic lang="de"/>
-</target>
-
-<!-- English -->
-<!-- ==================================================================== -->
-<property value=".xml" name="inputext.en"/>
-<property value=".html.en" name="outputext.en"/>
-
-<target description="- builds English HTML files" name="en">
- <html.generic lang="en"/>
- <runtarget target="man-en"/>
-</target>
-<target description="- builds the English zipped download package" name="zip-en">
- <zip.generic lang="en"/>
-</target>
-<target description="- builds the English CHM file" name="chm-en">
- <chm.generic lang="en"/>
-</target>
-<target description="- builds the English nroff files" name="man-en">
- <nroff.generic lang="en"/>
-</target>
-<target description="- builds the English latex file" name="latex-en">
- <latex.generic lang="en"/>
-</target>
-
-<!-- Spanish -->
-<!-- ==================================================================== -->
-<property value=".xml.es" name="inputext.es"/>
-<property value=".html.es" name="outputext.es"/>
-
-<target description="- builds Spanish HTML files" name="es">
- <html.generic lang="es"/>
-</target>
-<target description="- builds the Spanish zipped download package" name="zip-es">
- <zip.generic lang="es"/>
-</target>
-<target description="- builds the Spanish CHM file" name="chm-es">
- <chm.generic lang="es"/>
-</target>
-
-<!-- French -->
-<!-- ==================================================================== -->
-<property value=".xml.fr" name="inputext.fr"/>
-<property value=".html.fr" name="outputext.fr"/>
-
-<target description="- builds French HTML files" name="fr">
- <html.generic lang="fr"/>
-</target>
-<target description="- builds the French zipped download package" name="zip-fr">
- <zip.generic lang="fr"/>
-</target>
-
-<!-- Japanese -->
-<!-- ==================================================================== -->
-<property value=".xml.ja" name="inputext.ja"/>
-<property value=".html.ja.euc-jp" name="outputext.ja"/>
-
-<target description="- builds Japanese HTML files" name="ja">
- <html.generic lang="ja"/>
-</target>
-<target description="- builds the Japanese zipped download package" name="zip-ja">
- <zip.generic lang="ja"/>
-</target>
-<target description="- builds the Japanese CHM file" name="chm-ja">
- <chm.generic lang="ja"/>
-</target>
-
-<!-- Korean -->
-<!-- ==================================================================== -->
-<property value=".xml.ko" name="inputext.ko"/>
-<property value=".html.ko.euc-kr" name="outputext.ko"/>
-
-<target description="- builds Korean HTML files" name="ko">
- <html.generic lang="ko"/>
-</target>
-<target description="- builds the Korean zipped download package" name="zip-ko">
- <zip.generic lang="ko"/>
-</target>
-<target description="- builds the Korean CHM file" name="chm-ko">
- <chm.generic lang="ko"/>
-</target>
-
-<!-- Russian -->
-<!-- ==================================================================== -->
-<property value=".xml.ru" name="inputext.ru"/>
-<property value=".html.ru.koi8-r" name="outputext.ru"/>
-
-<target description="- builds Russian HTML files" name="ru">
- <html.generic lang="ru"/>
-</target>
-<target description="- builds the Russian zipped download package" name="zip-ru">
- <zip.generic lang="ru"/>
-</target>
-
-<!-- XML validation. -->
-<!-- If you get an error during transformation, this task may be useful -->
-<!-- because it mostly gives you a hint, where you forgot the </p> ;-) -->
-<!-- ==================================================================== -->
-<target description="- validates all XML source files" name="validate-xml">
- <xmlvalidate warn="true" failonerror="false" lenient="false">
- <xmlcatalog refid="w3c-catalog"/>
- <fileset dir="../">
- <include name="**/*.xml.de"/>
- <include name="**/*.xml"/>
- <include name="**/*.xml.es"/>
- <include name="**/*.xml.fr"/>
- <include name="**/*.xml.ja"/>
- <include name="**/*.xml.ko"/>
- <include name="**/*.xml.ru"/>
-
- <patternset refid="excludes"/>
- <patternset refid="scratch"/>
- </fileset>
- </xmlvalidate>
-</target>
-
-</project> \ No newline at end of file
diff --git a/docs/manual/style/lang/de.xml b/docs/manual/style/lang/de.xml
deleted file mode 100644
index 42b84d477e..0000000000
--- a/docs/manual/style/lang/de.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="de">
- <name>German</name>
- <charset>ISO-8859-1</charset>
- <source-ext>.xml.de</source-ext>
- <target-ext>.html.de</target-ext>
-
- <chm>
- <lang>0x407 German (Germany)</lang>
- <toc-font>,8,0</toc-font>
- <charset>windows-1252</charset>
- <settings>German (Germany), sorting order: dictionary</settings>
- </chm>
-
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">Deutsch</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">Kernfunktionen und
- Multi-Processing-Module</message>
- <message id="othermodules">Andere Module</message>
- <message id="obsoletemodules">Veraltete Module</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="obsoleteapachemodule">Veraltetes Apache-Modul</message>
- <message id="apachemodule">Apache-Modul</message>
- <message id="apachecore">Apache-Kernfunktionen</message>
- <message id="apachempmcommon">Allgemeine Direktiven der Apache-MPMs</message>
- <message id="apachempm">Apache-MPM</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">Beschreibung</message>
- <message id="seealso">Siehe auch</message>
- <message id="topics">Themen</message>
- <message id="status">Status</message>
- <message id="moduleidentifier">Modulbezeichner</message>
- <message id="sourcefile">Quelltext-Datei</message>
- <message id="compatibility">Kompatibilit&#228;t</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">Referenzierte Module</message>
- <message id="relateddirectives">Referenzierte Direktiven</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">Syntax</message>
- <message id="default">Voreinstellung</message>
- <message id="context">Kontext</message>
- <message id="override">AllowOverride</message>
- <message id="status">Status</message>
- <message id="module">Modul</message>
-
- <!-- Used in directive context lists -->
- <message id="serverconfig">Serverkonfiguration</message>
- <message id="virtualhost">Virtual Host</message>
- <message id="directory">Verzeichnis</message>
- <message id="htaccess">.htaccess</message>
-
- <!-- Used for directive lists -->
- <message id="directives">Direktiven</message>
- <!-- the optional attribute replace-space-with takes a string.
- if present, the space between <directive name> and 'Directive'
- in directivesynopsis headings will be replaced by the given string.
- (see de.xml for an example) -->
- <message id="directive" replace-space-with="-">Direktive</message>
- <message id="nodirectives">Dieses Modul enth&#228;lt keine
- Direktiven.</message>
-
- <!-- Used in summaries -->
- <message id="summary">Zusammenfassung</message>
-
- <!-- Used for translation notes -->
- <message id="transnote">Anm.d.&#220;.:</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- Apache HTTP Server</message>
- <message id="apachehttpserver">Apache HTTP Server Version
- 2.1</message>
- <message id="apachedocalt">[APACHE DOCUMENTATION]</message>
- <message id="search">Google-Suche</message> <!-- search button -->
- <message id="index">Index</message> <!-- deprecated -->
- <message id="home">Startseite</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">HTTP-Server</message>
- <message id="documentation">Dokumentation</message>
- <message id="version">Version 2.1</message>
-
- <!-- super menu -->
- <message id="modules">Module</message>
- <message id="faq">FAQ</message>
- <message id="glossary">Glossar</message>
- <message id="sitemap">Seitenindex</message>
-
- <!-- footer line -->
- <message id="licensed">Lizenziert unter der</message>
- <message id="langavail">Verfügbare Sprachen</message>
-
- <!-- not up to date -->
- <message id="outofdate">Diese &#220;bersetzung ist m&#246;glicherweise
- nicht mehr aktuell. Bitte pr&#252;fen Sie die englische Version auf
- die neuesten &#196;nderungen.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/lang/en.xml b/docs/manual/style/lang/en.xml
deleted file mode 100644
index 25bb6651cd..0000000000
--- a/docs/manual/style/lang/en.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-<!-- $Revision: 1.18 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="en">
- <name>English</name>
- <charset>ISO-8859-1</charset>
- <source-ext>.xml</source-ext>
- <target-ext>.html.en</target-ext>
-
- <chm>
- <lang>0x409 English (United States)</lang>
- <toc-font>,8,0</toc-font>
- <charset>windows-1252</charset>
- <settings>English (USA)</settings>
- </chm>
-
- <man>
- <charset>ISO-8859-1</charset>
- </man>
-
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">English</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">Core Features and Multi-Processing
- Modules</message>
- <message id="othermodules">Other Modules</message>
- <message id="obsoletemodules">Obsolete Modules</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="obsoleteapachemodule">Obsolete Apache Module</message>
- <message id="apachemodule">Apache Module</message>
- <message id="apachecore">Apache Core Features</message>
- <message id="apachempmcommon">Apache MPM Common Directives</message>
- <message id="apachempm">Apache MPM</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">Description</message>
- <message id="seealso">See also</message>
- <message id="topics">Topics</message>
- <message id="status">Status</message>
- <message id="moduleidentifier">Module&nbsp;Identifier</message>
- <message id="sourcefile">Source&nbsp;File</message>
- <message id="compatibility">Compatibility</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">Related Modules</message>
- <message id="relateddirectives">Related Directives</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">Syntax</message>
- <message id="default">Default</message>
- <message id="context">Context</message>
- <message id="override">Override</message>
- <message id="status">Status</message>
- <message id="module">Module</message>
-
- <!-- Used in directive context lists -->
- <message id="serverconfig">server config</message>
- <message id="virtualhost">virtual host</message>
- <message id="directory">directory</message>
- <message id="htaccess">.htaccess</message>
-
- <!-- Used for directive lists -->
- <message id="directives">Directives</message>
- <!-- the optional attribute replace-space-with takes a string.
- if present, the space between <directive name> and 'Directive'
- in directivesynopsis headings will be replaced by the given string.
- (see de.xml for an example) -->
- <message id="directive">Directive</message>
- <message id="nodirectives">This module provides no
- directives.</message>
-
- <!-- Used in summaries -->
- <message id="summary">Summary</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- Apache HTTP Server</message>
- <message id="apachehttpserver">Apache HTTP Server Version 2.1</message>
- <message id="apachedocalt">[APACHE DOCUMENTATION]</message>
- <message id="search">Google Search</message> <!-- search button -->
- <message id="index">Index</message> <!-- deprecated -->
- <message id="home">Home</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">HTTP Server</message>
- <message id="documentation">Documentation</message>
- <message id="version">Version 2.1</message>
-
- <!-- super menu -->
- <message id="modules">Modules</message>
- <message id="faq">FAQ</message>
- <message id="glossary">Glossary</message>
- <message id="sitemap">Sitemap</message>
-
- <!-- footer line -->
- <message id="licensed">Licensed under the</message>
- <message id="langavail">Available Languages</message>
-
- <!-- not up to date -->
- <message id="outofdate">This translation may be out of date. Check the
- English version for recent changes.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/lang/es.xml b/docs/manual/style/lang/es.xml
deleted file mode 100644
index 55e26f1159..0000000000
--- a/docs/manual/style/lang/es.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="es">
- <name>Spanish</name>
- <charset>ISO-8859-1</charset>
- <source-ext>.xml.es</source-ext>
- <target-ext>.html.es</target-ext>
-
- <chm>
- <lang>0xC0A Spanish (International)</lang>
- <toc-font>,8,0</toc-font>
- <charset>windows-1252</charset>
- <settings>Spanish (Spain), sorting order: international</settings>
- </chm>
-
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">Espa&#241;ol</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">Funcionalidad B&#225;sica y M&#243;dulos
- de MultiProcesamiento</message>
- <message id="othermodules">Otros M&#243;dulos</message>
- <message id="obsoletemodules">M&#243;dulos Obsoletos</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="obsoleteapachemodule">M&#243;dulos Obsoletos de
- Apache</message>
- <message id="apachemodule">M&#243;dulo Apache</message>
- <message id="apachecore">Funcionalidad B&#225;sica de Apache</message>
- <message id="apachempmcommon">Directivas Comunes de los MPM de
- Apache</message>
- <message id="apachempm">MPM de Apache</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">Descripci&#243;n</message>
- <message id="seealso">Consulte tambi&#233;n</message>
- <message id="topics">Temas</message>
- <message id="status">Estado</message>
- <message id="moduleidentifier">Identificador de M&#243;dulos</message>
- <message id="sourcefile">Fichero de C&#243;digo Fuente</message>
- <message id="compatibility">Compatibilidad</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">M&#243;dulos Relacionados</message>
- <message id="relateddirectives">Directivas Relacionadas</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">Sintaxis</message>
- <message id="default">Valor por defecto</message>
- <message id="context">Contexto</message>
- <message id="override">Sustituye a</message>
- <message id="status">Estado</message>
- <message id="module">M&#243;dulo</message>
-
- <!-- Used in directive context lists -->
- <message id="serverconfig">server config</message>
- <message id="virtualhost">virtual host</message>
- <message id="directory">directory</message>
- <message id="htaccess">.htaccess</message>
-
- <!-- Used for directive lists -->
- <message id="directives">Directivas</message>
- <!-- the optional attribute replace-space-with takes a string.
- if present, the space between <directive name> and 'Directive'
- in directivesynopsis headings will be replaced by the given string.
- (see de.xml for an example) -->
- <message id="directive">Directiva</message>
- <message id="nodirectives">Este m&#243;dulo no suministra ninguna
- directiva.</message>
-
- <!-- Used in summaries -->
- <message id="summary">Resumen de contenidos</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- Servidor HTTP Apache</message>
- <message id="apachehttpserver">Versi&#243;n 2.1 del Servidor HTTP
- Apache</message>
- <message id="apachedocalt">[APACHE DOCUMENTATION]</message>
- <message id="search">Buscar en Google</message> <!-- search button -->
- <message id="index">&#205;ndice</message> <!-- deprecated -->
- <message id="home">P&#225;gina Inicial</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">Servidor HTTP</message>
- <message id="documentation">Documentaci&#243;n</message>
- <message id="version">Versi&#243;n 2.1</message>
-
- <!-- super menu -->
- <message id="modules">M&#243;dulos</message>
- <message id="faq">Preguntas Frecuentes</message>
- <message id="glossary">Glosario</message>
- <message id="sitemap">Mapa de este sitio web</message>
-
- <!-- footer line -->
- <message id="licensed">Licencia bajo los t&#233;rminos de la</message>
- <message id="langavail">Idiomas disponibles</message>
-
- <!-- not up to date -->
- <message id="outofdate">Esta traducci&#243;n podr&#237;a estar
- obsoleta. Consulte la versi&#243;n en ingl&#233;s de la
- documentaci&#243;n para comprobar si se han producido cambios
- recientemente.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/lang/fr.xml b/docs/manual/style/lang/fr.xml
deleted file mode 100644
index 4a419bf057..0000000000
--- a/docs/manual/style/lang/fr.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="fr">
- <name>French</name>
- <charset>ISO-8859-1</charset>
- <source-ext>.xml.fr</source-ext>
- <target-ext>.html.fr</target-ext>
-
-<!-- No sitemap -> no CHM
- <chm>
- <lang>0x40c French (France)</lang>
- <toc-font>,8,0</toc-font>
- <charset>windows-1252</charset>
- <settings>French (France)</settings>
- </chm>
--->
-
-<!-- currently no deployment of non-english man pages
- <man>
- <charset>ISO-8859-1</charset>
- </man>
--->
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">Fran&#231;ais</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">Fonctionalit&#233;s de Base et Modules Multi-Processus (MPM)</message>
- <message id="othermodules">Autres Modules</message>
- <message id="obsoletemodules">Modules D&#233;suets</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="obsoleteapachemodule">Module Apache D&#233;suet</message>
- <message id="apachemodule">Mudule Apache</message>
- <message id="apachecore">Fonctionalit&#233;s de Base Apache</message>
- <message id="apachempmcommon">Apache MPM: Directives Communes</message>
- <message id="apachempm">Apache MPM</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">Description</message>
- <message id="seealso">Voir aussi</message>
- <message id="topics">Sujets</message>
- <message id="status">Status</message>
- <message id="moduleidentifier">Identificateur&nbsp;de&nbsp;Module</message>
- <message id="sourcefile">Fichier&nbsp;Source</message>
- <message id="compatibility">Compatibilit&#233;</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">Modules Apparent&#233;s</message>
- <message id="relateddirectives">Directives Apparent&#233;es</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">Syntaxe</message>
- <message id="default">Defaut</message>
- <message id="context">Contexte</message>
- <message id="override">Annuler</message>
- <message id="status">Status</message>
- <message id="module">Module</message>
-
- <!-- Used in directive context lists -->
- <message id="serverconfig">configuration du serveur</message>
- <message id="virtualhost">serveur virtuel</message>
- <message id="directory">r&#233;pertoire</message>
- <message id="htaccess">.htaccess</message>
-
- <!-- Used for directive lists -->
- <message id="directives">Directives</message>
- <!-- the optional attribute replace-space-with takes a string.
- if present, the space between <directive name> and 'Directive'
- in directivesynopsis headings will be replaced by the given string.
- (see de.xml for an example) -->
- <message id="directive">Directive</message>
- <message id="nodirectives">Ce module ne fournit aucune directive.</message>
-
- <!-- Used in summaries -->
- <message id="summary">Sommaire</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- Serveur Apache HTTP</message>
- <message id="apachehttpserver">Serveur Apache HTTP Version 2.1</message>
- <message id="apachedocalt">[DOCUMENTATION APACHE]</message>
- <message id="search">Recherche Google</message> <!-- search button -->
- <message id="index">Index</message> <!-- deprecated -->
- <message id="home">Accueil</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">Serveur HTTP</message>
- <message id="documentation">Documentation</message>
- <message id="version">Version 2.1</message>
-
- <!-- super menu -->
- <message id="modules">Modules</message>
- <message id="faq">FAQ</message>
- <message id="glossary">Glossaire</message>
- <message id="sitemap">Plan du site</message>
-
- <!-- footer line -->
- <message id="licensed">Authoris&#233; sous</message>
- <message id="langavail">Langues Disponibles</message>
-
- <!-- not up to date -->
- <message id="outofdate">Cette traduction peut &#234;tre p&#233;rim&#233;e. Verifiez la version
- Anglaise pour les changements r&#233;cents.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/lang/ja.xml b/docs/manual/style/lang/ja.xml
deleted file mode 100644
index c5dfd179d5..0000000000
--- a/docs/manual/style/lang/ja.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-<!-- English revision: 1.5 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="ja">
- <name>Japanese</name>
- <charset>EUC-JP</charset>
- <source-ext>.xml.ja</source-ext>
- <target-ext>.html.ja.euc-jp</target-ext>
-
- <chm>
- <lang>0x411 Japanese</lang>
- <toc-font>MS UI Gothic,10,128</toc-font>
- <charset>SHIFT_JIS</charset>
- <settings>Japanese</settings>
- </chm>
-
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">Japanese</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">$B%3%"5!G=$H(B MPM</message>
- <message id="othermodules">$BB>$N%b%8%e!<%k(B</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="apachemodule">Apache $B%b%8%e!<%k(B</message>
- <message id="apachecore">Apache $B%3%"5!G=(B</message>
- <message id="apachempmcommon">Apache MPM $B6&DL%G%#%l%/%F%#%V(B</message>
- <message id="apachempm">Apache MPM</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">$B@bL@(B</message>
- <message id="seealso">$B;2>H(B</message>
- <message id="topics">$B%H%T%C%/(B</message>
- <message id="status">$B%9%F!<%?%9(B</message>
- <message id="moduleidentifier">$B%b%8%e!<%k<1JL;R(B</message>
- <message id="sourcefile">$B%=!<%9%U%!%$%k(B</message>
- <message id="compatibility">$B8_49@-(B</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">$B4XO"%b%8%e!<%k(B</message>
- <message id="relateddirectives">$B4XO"%G%#%l%/%F%#%V(B</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">$B9=J8(B</message>
- <message id="default">$B%G%U%)%k%H(B</message>
- <message id="context">$B%3%s%F%-%9%H(B</message>
- <message id="override">$B>e=q$-(B</message>
- <message id="status">$B%9%F!<%?%9(B</message>
- <message id="module">$B%b%8%e!<%k(B</message>
-
- <!-- Used in directive context lists -->
- <message id="serverconfig">$B%5!<%P@_Dj%U%!%$%k(B</message>
- <message id="virtualhost">$B%P!<%A%c%k%[%9%H(B</message>
- <message id="directory">$B%G%#%l%/%H%j(B</message>
- <message id="htaccess">.htaccess</message>
-
- <!-- Used for directive lists -->
- <message id="directives">$B%G%#%l%/%F%#%V(B</message>
- <message id="directive">$B%G%#%l%/%F%#%V(B</message>
- <message id="nodirectives">$B$3$N%b%8%e!<%k$K%G%#%l%/%F%#%V$O$"$j$^$;$s!#(B</message>
-
- <!-- Used in summaries -->
- <message id="summary">$B35MW(B</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- Apache HTTP $B%5!<%P(B</message>
- <message id="apachehttpserver">Apache HTTP $B%5!<%P(B $B%P!<%8%g%s(B 2.1</message>
- <message id="apachedocalt">[APACHE DOCUMENTATION]</message>
- <message id="search">Google Search</message> <!-- search button -->
- <message id="index">$B:w0z(B</message> <!-- deprecated -->
- <message id="home">$B%[!<%`(B</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">HTTP $B%5!<%P(B</message>
- <message id="documentation">$B%I%-%e%a%s%F!<%7%g%s(B</message>
- <message id="version">$B%P!<%8%g%s(B 2.1</message>
-
- <!-- super menu -->
- <message id="modules">$B%b%8%e!<%k(B</message>
- <message id="faq">FAQ</message>
- <message id="glossary">$BMQ8l(B</message>
- <message id="sitemap">$B%5%$%H%^%C%W(B</message>
-
- <!-- footer line -->
- <message id="licensed">Licensed under the</message>
- <message id="langavail">Available Languages</message>
-
- <!-- not up to date -->
- <message id="outofdate">This translation may be out of date. Check the
- English version for recent changes.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/lang/ko.xml b/docs/manual/style/lang/ko.xml
deleted file mode 100644
index 83a6587223..0000000000
--- a/docs/manual/style/lang/ko.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-<!-- English Revision: 1.18 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="ko">
- <name>Korean</name>
- <charset>EUC-KR</charset>
- <source-ext>.xml.ko</source-ext>
- <target-ext>.html.ko.euc-kr</target-ext>
-
- <chm>
- <lang>0x412 Korean</lang>
- <toc-font>Gulim,9,129</toc-font>
- <charset>EUC-KR</charset>
- <settings>Korean</settings>
- </chm>
-
- <!--
- <man>
- <charset>ISO-8859-1</charset>
- </man>
- -->
-
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">Korean</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">ÇÙ½É ±â´É°ú ´ÙÁßó¸® ¸ðµâ</message>
- <message id="othermodules">´Ù¸¥ ¸ðµâ</message>
- <message id="obsoletemodules">ÀÌÀü ¸ðµâ</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="obsoleteapachemodule">ÀÌÀü ¾ÆÆÄÄ¡ ¸ðµâ</message>
- <message id="apachemodule">¾ÆÆÄÄ¡ ¸ðµâ</message>
- <message id="apachecore">¾ÆÆÄÄ¡ ÇÙ½É ±â´É</message>
- <message id="apachempmcommon">¾ÆÆÄÄ¡ MPM °øÅë Áö½Ã¾î</message>
- <message id="apachempm">¾ÆÆÄÄ¡ MPM</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">¼³¸í</message>
- <message id="seealso">Âü°í</message>
- <message id="topics">ÁÖÁ¦</message>
- <message id="status">»óÅÂ</message>
- <message id="moduleidentifier">¸ðµâ¸í</message>
- <message id="sourcefile">¼Ò½ºÆÄÀÏ</message>
- <message id="compatibility">Áö¿ø</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">°ü·ÃµÈ ¸ðµâ</message>
- <message id="relateddirectives">°ü·ÃµÈ Áö½Ã¾î</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">¹®¹ý</message>
- <message id="default">±âº»°ª</message>
- <message id="context">»ç¿ëÀå¼Ò</message>
- <message id="override">Override ¿É¼Ç</message>
- <message id="status">»óÅÂ</message>
- <message id="module">¸ðµâ</message>
-
- <!-- Used in directive context lists -->
- <message id="serverconfig">ÁÖ¼­¹ö¼³Á¤</message>
- <message id="virtualhost">°¡»óÈ£½ºÆ®</message>
- <message id="directory">directory</message>
- <message id="htaccess">.htaccess</message>
-
- <!-- Used for directive lists -->
- <message id="directives">Áö½Ã¾îµé</message>
- <!-- the optional attribute replace-space-with takes a string.
- if present, the space between <directive name> and 'Directive'
- in directivesynopsis headings will be replaced by the given string.
- (see de.xml for an example) -->
- <message id="directive">Áö½Ã¾î</message>
- <message id="nodirectives">ÀÌ ¸ðµâ¿¡´Â Áö½Ã¾î°¡ ¾ø½À´Ï´Ù.</message>
-
- <!-- Used in summaries -->
- <message id="summary">¿ä¾à</message>
-
- <!-- Used for translation notes -->
- <message id="transnote">¿ªÁÖ;</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- Apache HTTP Server</message>
- <message id="apachehttpserver">Apache HTTP Server Version 2.1</message>
- <message id="apachedocalt">[APACHE DOCUMENTATION]</message>
- <message id="search">Google °Ë»ö</message> <!-- search button -->
- <message id="index">Index</message> <!-- deprecated -->
- <message id="home">Home</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">HTTP Server</message>
- <message id="documentation">Documentation</message>
- <message id="version">Version 2.1</message>
-
- <!-- super menu -->
- <message id="modules">¸ðµâ</message>
- <message id="faq">FAQ</message>
- <message id="glossary">¿ë¾î</message>
- <message id="sitemap">»çÀÌÆ®¸Ê</message>
-
- <!-- footer line -->
- <message id="licensed">Licensed under the</message>
- <message id="langavail">°¡´ÉÇÑ ¾ð¾î</message>
-
- <!-- not up to date -->
- <message id="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
- ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/lang/ru.xml b/docs/manual/style/lang/ru.xml
deleted file mode 100644
index 30ebbab180..0000000000
--- a/docs/manual/style/lang/ru.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="KOI8-R"?>
-<!DOCTYPE language [ <!ENTITY nbsp "&#160;"> ]>
-<!-- English revision: 1.4 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<language id="ru">
- <name>Russian</name>
- <charset>KOI8-R</charset>
- <source-ext>.xml.ru</source-ext>
- <target-ext>.html.ru.koi8-r</target-ext>
-
-<!-- No CHM so far (no sitemap)
- <chm>
- <lang>0x419 Russian</lang>
- <toc-font>,8,204</toc-font>
- <charset>windows-1251</charset>
- <settings>Russian</settings>
- </chm>
--->
-
- <!-- Some strings might be used in other contexts, than stated in the -->
- <!-- comments... -->
- <messages>
- <!-- language link titles -->
- <message id="nativename">Russian</message>
-
- <!-- Used for the moduleindex -->
- <message id="corefeatures">ïÓÏÂÅÎÎÏÓÔÉ ÑÄÒÁ É ÍÕÌØÔÉ-ÐÒÏÃÅÓÓÎÙÅ
- ÍÏÄÕÌÉ</message>
- <message id="othermodules">äÒÕÇÉÅ ÍÏÄÕÌÉ</message>
-
- <!-- Used for the modulesynopsis and sitemap -->
- <message id="apachemodule">íÏÄÕÌØ Apache</message>
- <message id="apachecore">ïÓÏÂÅÎÎÏÓÔÉ ÑÄÒÁ Apache</message>
- <message id="apachempmcommon">ïÂÝÉÅ ÄÌÑ ×ÓÅÈ íð-ÍÏÄÕÌÅÊ ÄÉÒÅËÔÉ×Ù
- Apache</message>
- <message id="apachempm">íÕÌØÔÉ-ÐÒÏÃÅÓÓÎÙÅ ÍÏÄÕÌÉ Apache</message>
-
- <!-- Used in description box for modulesynopsis -->
- <message id="description">ïÐÉÓÁÎÉÅ</message>
- <message id="seealso">óÍ. ÔÁËÖÅ</message>
- <message id="topics">ôÅÍÙ</message>
- <message id="status">óÔÁÔÕÓ</message>
- <message id="moduleidentifier">éÄÅÎÔÉÆÉËÁÔÏÒ&nbsp;ÍÏÄÕÌÑ</message>
- <message id="sourcefile">éÓÈÏÄÎÙÊ&nbsp;ËÏÄ</message>
- <message id="compatibility">óÏ×ÍÅÓÔÉÍÏÓÔØ</message>
-
- <!-- Used in manualpage -->
- <message id="relatedmodules">óÍÏÔÒÉÔÅ ÔÁËÖÅ ÍÏÄÕÌÉ</message>
- <message id="relateddirectives">óÍÏÔÒÉÔÅ ÔÁËÖÅ ÄÉÒÅËÔÉ×Ù</message>
-
- <!-- Used in description box for directives -->
- <message id="syntax">óÉÎÔÁËÓÉÓ</message>
- <message id="default">úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ</message>
- <message id="context">ëÏÎÔÅËÓÔ</message>
- <message id="override">òÁÚÒÅÛÅÎÉÅ</message>
- <message id="status">óÔÁÔÕÓ</message>
- <message id="module">íÏÄÕÌØ</message>
-
- <!-- Used for directive lists -->
- <message id="directives">äÉÒÅËÔÉ×Ù</message>
- <message id="directive">äÉÒÅËÔÉ×Á</message>
- <message id="nodirectives">üÔÏÔ ÍÏÄÕÌØ ÎÅ ÐÒÅÄÏÓÔÁ×ÌÑÅÔ ÎÉËÁËÉÈ
- ÄÉÒÅËÔÉ×.</message>
-
- <!-- Used in summaries -->
- <message id="summary">òÅÚÀÍÅ</message>
-
- <!-- Used in headers and footers -->
- <message id="apachetitle">- HTTP ÓÅÒ×ÅÒ Apache</message>
- <message id="apachehttpserver">HTTP ÓÅÒ×ÅÒ Apache ÷ÅÒÓÉÑ 2.1</message>
- <message id="apachedocalt">[äïëõíåîôáãéñ APACHE]</message>
- <message id="search">Google Search</message> <!-- search button -->
- <message id="index">ïÇÌÁ×ÌÅÎÉÅ</message> <!-- deprecated -->
- <message id="home">îÁ ÇÌÁ×ÎÕÀ ÓÔÒÁÎÉÃÕ</message> <!-- deprecated -->
-
- <!-- breadcrumb links -->
- <message id="apache">Apache</message>
- <message id="http-server">HTTP ÓÅÒ×ÅÒ</message>
- <message id="documentation">äÏËÕÍÅÎÔÁÃÉÑ</message>
- <message id="version">÷ÅÒÓÉÑ 2.1</message>
-
- <!-- super menu -->
- <message id="modules">íÏÄÕÌÉ</message>
- <message id="faq">FAQ</message>
- <message id="glossary">çÌÏÓÓÁÒÉÊ</message>
- <message id="sitemap">ëÁÒÔÁ ÓÁÊÔÁ</message>
-
- <!-- footer line -->
- <message id="licensed">Licensed under the</message>
- <message id="langavail">Available Languages</message>
-
- <!-- not up to date -->
- <message id="outofdate">This translation may be out of date. Check the
- English version for recent changes.</message>
- </messages>
-</language>
diff --git a/docs/manual/style/latex/atbeginend.sty b/docs/manual/style/latex/atbeginend.sty
deleted file mode 100644
index 8729fa6cae..0000000000
--- a/docs/manual/style/latex/atbeginend.sty
+++ /dev/null
@@ -1,65 +0,0 @@
-% atbeginend.sty
-%
-% defines
-% \BeforeBegin{environment}{code-to-execute}
-% \BeforeEnd {environment}{code-to-execute}
-% \AfterBegin {environment}{code-to-execute}
-% \AfterEnd {environment}{code-to-execute}
-%
-% Save \begin and \end to \BeginEnvironment and \EndEnvironment
-\let\BeginEnvironment=\begin
-\let\EndEnvironment=\end
-
-\def\IfUnDef#1{\expandafter\ifx\csname#1\endcsname\relax}
-
-% Null command needed to for \nothing{something}=.nothing.
-\def\NullCom#1{}
-
-\def\begin#1{%
-%
-% if defined \BeforeBeg for this environment, execute it
-\IfUnDef{BeforeBeg#1}\else\csname BeforeBeg#1\endcsname\fi%
-%
-%
-%
-\IfUnDef{AfterBeg#1}% This is done to skip the command for environments
- % which can take arguments, like multicols; YOU MUST NOT
- % USE \AfterBegin{...}{...} for such environments!
- \let\SaveBegEng=\BeginEnvironment%
-\else%
- % Start this environment
- \BeginEnvironment{#1}%
- % and execute code after \begin{environment}
- \csname AfterBeg#1\endcsname%
- %
- \let\SaveBegEng=\NullCom%
-\fi%
-\SaveBegEng{#1}%
-}
-
-
-\def\end#1{%
-%
-% execute code before \end{environment}
-\IfUnDef{BeforeEnd#1}\else\csname BeforeEnd#1\endcsname\fi%
-%
-% close this environment
-\EndEnvironment{#1}%
-%
-% and execute code after \begin{environment}
-\IfUnDef{AfterEnd#1}\else\csname AfterEnd#1\endcsname\fi%
-}
-
-
-%% Now, define commands
-% \BeforeBegin{environment}{code-to-execute}
-% \BeforeEnd {environment}{code-to-execute}
-% \AfterBegin {environment}{code-to-execute}
-% \AfterEnd {environment}{code-to-execute}
-
-\def\BeforeBegin#1#2{\expandafter\gdef\csname BeforeBeg#1\endcsname
-{#2}}
-\def\BeforeEnd #1#2{\expandafter\gdef\csname BeforeEnd#1\endcsname
-{#2}}
-\def\AfterBegin #1#2{\expandafter\gdef\csname AfterBeg#1\endcsname {#2}}
-\def\AfterEnd #1#2{\expandafter\gdef\csname AfterEnd#1\endcsname{#2}}
diff --git a/docs/manual/style/latex/common.xsl b/docs/manual/style/latex/common.xsl
deleted file mode 100644
index dab67b78d2..0000000000
--- a/docs/manual/style/latex/common.xsl
+++ /dev/null
@@ -1,243 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- Constants used for case translation -->
-<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
-<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
-
-<!-- ==================================================================== -->
-<!-- Process a documentation section -->
-<!-- ==================================================================== -->
-<xsl:template match="section">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="section/title">
-<xsl:text>\subsection*{</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>}</xsl:text><xsl:call-template name="label"/>
-<xsl:text>
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="section/section/title">
-<xsl:text>\subsubsection*{</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>}</xsl:text><xsl:call-template name="label"/>
-<xsl:text>
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="section/section/section/title">
-<xsl:text>\subsubsection*{</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>}</xsl:text><xsl:call-template name="label"/>
-<xsl:text>
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="note/title"></xsl:template>
-<xsl:template match="example/title"></xsl:template>
-
-<xsl:template name="label">
-<xsl:if test="../@id">
-<xsl:variable name="metafile" select="document(/*/@metafile)/metafile" />
-<xsl:text>\label{</xsl:text><xsl:value-of
-select="$metafile/path"/><xsl:value-of
-select="$metafile/basename"/>
-<xsl:text>:</xsl:text>
-<xsl:value-of select="../@id"/>
-<xsl:text>}</xsl:text>
-</xsl:if>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <example> -->
-<!-- ==================================================================== -->
-<!-- verbatim inside of fbox doesn't work for some reason -->
-<xsl:template match="example">
-<xsl:text>\par\smallskip\begin{center}</xsl:text>
-<xsl:if test="not(pre)"><xsl:text>\fbox{</xsl:text></xsl:if>
-<xsl:text>\begin{minipage}{.8\textwidth}\begin{flushleft}</xsl:text>
-<xsl:apply-templates select="title" mode="print" />
-<xsl:text>{\ttfamily\small </xsl:text>
-<xsl:text>\noindent </xsl:text><xsl:apply-templates/>
-<xsl:text>}</xsl:text>
-<xsl:text>\end{flushleft}\end{minipage}</xsl:text>
-<xsl:if test="not(pre)"><xsl:text>}</xsl:text></xsl:if>
-<xsl:text>\end{center}\par\smallskip</xsl:text>
-</xsl:template>
-
-<xsl:template match="example/title" mode="print">
-<xsl:text>\textbf{</xsl:text>
- <xsl:apply-templates/>
-<xsl:text>}\\ </xsl:text>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- indentations -->
-<!-- ==================================================================== -->
-<xsl:template match="indent">
-<xsl:text>\begin{list}{}{\topsep 0pt\rightmargin 0pt\leftmargin 2em}
-\item[] </xsl:text>
-<xsl:apply-templates/>
-<xsl:text>\end{list}</xsl:text>
-</xsl:template>
-
-<!-- ==================================================================== -->
-<!-- <note> -->
-<!-- ==================================================================== -->
-<xsl:template match="note">
-<xsl:text>\par\smallskip
-{\Huge </xsl:text>
-<xsl:choose>
-<xsl:when test="@type='warning'">
- <xsl:text>\fbox{!} </xsl:text>
-</xsl:when>
-<xsl:otherwise>
- <xsl:text>$\Longrightarrow$</xsl:text>
-</xsl:otherwise>
-</xsl:choose>
-<xsl:text>}\begin{minipage}[t]{.8\textwidth}
-\noindent </xsl:text>
-<xsl:apply-templates select="title" mode="print" />
-<xsl:apply-templates/>
-<xsl:text>\end{minipage}\par\smallskip</xsl:text>
-</xsl:template>
-
-<xsl:template match="note/title" mode="print">
-<xsl:text>\textbf{</xsl:text>
- <xsl:apply-templates/>
-<xsl:text>} \\
-\noindent </xsl:text>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <directive> -->
-<!-- Inserts link to another directive, which might be in another module. -->
-<!-- References are converted into lower case. -->
-<!-- ==================================================================== -->
-<xsl:template match="directive" name="directive">
-<xsl:text>\textsc{</xsl:text>
- <xsl:if test="@type='section'"><xsl:text>\textless{}</xsl:text></xsl:if>
- <xsl:text>\hyperlink{/mod/</xsl:text>
- <xsl:value-of select="@module"/>
- <xsl:text>:</xsl:text>
- <xsl:value-of select="translate(.,$uppercase,$lowercase)"/>
- <xsl:text>}{</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>}</xsl:text>
- <xsl:if test="@type='section'"><xsl:text>\textgreater{}</xsl:text></xsl:if>
-<xsl:text>}</xsl:text>
-</xsl:template>
-<!-- /directive -->
-
-<!-- ==================================================================== -->
-<!-- <module> -->
-<!-- Inserts a link to refereed module -->
-<!-- ==================================================================== -->
-<xsl:template match="module" name="module">
-<xsl:text>\textsc{\hyperlink{/mod/</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>}{</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>}</xsl:text>
-<xsl:text>}</xsl:text>
-</xsl:template>
-<!-- /module -->
-
-
-
-<!-- ==================================================================== -->
-<!-- <related> -->
-<!-- ==================================================================== -->
-<xsl:template match="related">
-<xsl:text>
-\fbox{\begin{tabular}{rr}
-\begin{minipage}[t]{.49\linewidth}
-\textbf{</xsl:text>
-<xsl:value-of select="$message[@id='relatedmodules']" />
-<xsl:text>} \\
-</xsl:text>
-<xsl:for-each select="modulelist/module">
-<xsl:call-template name="module"/>
-<xsl:text> \\
-</xsl:text>
-</xsl:for-each>
-<xsl:text>
-\end{minipage} &amp;
-\begin{minipage}[t]{.4\linewidth}
-\textbf{</xsl:text>
-<xsl:value-of select="$message[@id='relateddirectives']" />
-<xsl:text>} \\
-</xsl:text>
-<xsl:for-each select="directivelist/directive">
-<xsl:call-template name="directive"/>
-<xsl:text> \\
-</xsl:text>
-</xsl:for-each>
-<xsl:text>
-\end{minipage}
-\end{tabular}}
-\smallskip
-</xsl:text>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <seealso> -->
-<!-- ==================================================================== -->
-<xsl:template name="seealso">
- <xsl:if test="seealso">
- <xsl:text>\textbf{</xsl:text>
- <xsl:value-of select="$message[@id='seealso']" />
- <xsl:text>}\begin{itemize}</xsl:text>
- <xsl:for-each select="seealso">
- <xsl:text>\item </xsl:text>
- <xsl:apply-templates />
- <xsl:text>
-</xsl:text>
- </xsl:for-each>
-<xsl:text>\end{itemize}</xsl:text>
- </xsl:if>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- section-title -->
-<!-- ==================================================================== -->
-<xsl:template name="section-title">
-<xsl:variable name="metafile" select="document(/*/@metafile)/metafile" />
-<xsl:text>\section{</xsl:text><xsl:apply-templates select="title"/>
-<xsl:text>}</xsl:text>
-<xsl:text>\label{</xsl:text><xsl:value-of
-select="$metafile/path"/><xsl:value-of
-select="$metafile/basename"/>
-<xsl:text>}
-</xsl:text>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/docs/manual/style/latex/directiveindex.xsl b/docs/manual/style/latex/directiveindex.xsl
deleted file mode 100644
index 356c9db5e8..0000000000
--- a/docs/manual/style/latex/directiveindex.xsl
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <directiveindex> -->
-<!-- Builds the directive index page -->
-<!-- ==================================================================== -->
-<xsl:template match="directiveindex">
-
- <xsl:variable name="directives"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis[status!='Obsolete']
- /directivesynopsis[not(@location)]" />
-
-
- <xsl:call-template name="section-title"/>
-
- <xsl:apply-templates select="summary" />
-
- <xsl:call-template name="seealso"/>
-
- <xsl:text>\begin{itemize}
-</xsl:text>
- <xsl:for-each select="$directives">
- <xsl:sort select="name" />
-
- <xsl:text>
-\item </xsl:text>
- <xsl:apply-templates select="name" mode="simple"/>
- <xsl:text> (p.\ \pageref{/mod/</xsl:text>
- <xsl:value-of select="../name"/><xsl:text>:</xsl:text>
- <xsl:value-of select="translate(name, $uppercase, $lowercase)"/>
- <xsl:text>})</xsl:text>
-</xsl:for-each>
-
- <xsl:text>\end{itemize}</xsl:text>
-
-</xsl:template>
-<!-- /directiveindex -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/faq.xsl b/docs/manual/style/latex/faq.xsl
deleted file mode 100644
index 93a61bcdd6..0000000000
--- a/docs/manual/style/latex/faq.xsl
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <faq> -->
-<!-- Process an entire document into an HTML page -->
-<!-- ==================================================================== -->
-<xsl:template match="faq">
-
-<xsl:call-template name="section-title"/>
-
-<xsl:apply-templates select="summary"/>
-
-<xsl:call-template name="seealso"/>
-
-<xsl:apply-templates select="section"/>
-
-</xsl:template>
-<!-- /faq -->
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/html.xsl b/docs/manual/style/latex/html.xsl
deleted file mode 100644
index 9034590a6b..0000000000
--- a/docs/manual/style/latex/html.xsl
+++ /dev/null
@@ -1,322 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-
-<!-- ==================================================================== -->
-<!-- Ordinary HTML that must be converted to latex -->
-<!-- ==================================================================== -->
-
-<xsl:template match="ul">
-<xsl:text>\begin{itemize}
-</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>\end{itemize}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="ol">
-<xsl:text>\begin{enumerate}
-</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>\end{enumerate}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="li">
-<xsl:text>\item </xsl:text>
-<xsl:apply-templates/>
-<xsl:text>
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="dl">
-<xsl:text>\begin{description}
-</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>\end{description}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="dt">
-<xsl:text>\item[</xsl:text><xsl:apply-templates/>
-<xsl:text>] </xsl:text>
-</xsl:template>
-
-<xsl:template match="dd">
-<xsl:apply-templates/>
-</xsl:template>
-
-<!-- Latex doesn't like successive line breaks, so replace any
- sequence of two or more br separated only by white-space with
- one line break followed by smallskips. -->
-<xsl:template match="br">
-<xsl:choose>
-<xsl:when test="name(preceding-sibling::node()[1])='br' or name(preceding-sibling::node()[1])='indent'">
-<xsl:text>\smallskip </xsl:text>
-</xsl:when>
-<xsl:when test="name(preceding-sibling::node()[2])='br' or name(preceding-sibling::node()[2])='indent'">
- <xsl:choose>
- <xsl:when test="normalize-space(preceding-sibling::node()[1])=''">
- <xsl:text>\smallskip </xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <!-- Don't put a line break if we are the last thing -->
- <xsl:if test="not(position()=last()) and not(position()=last()-1 and normalize-space(following-sibling::node()[1])='')">
- <xsl:text>\\ </xsl:text>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:when>
-<xsl:otherwise>
- <!-- Don't put a line break if we are the last thing -->
- <xsl:if test="not(position()=last()) and not(position()=last()-1 and normalize-space(following-sibling::node()[1])='')">
- <xsl:text>\\ </xsl:text>
- </xsl:if>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-
-<xsl:template match="p">
-<xsl:apply-templates/>
-<xsl:text>\par
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="code">
-<xsl:text>\texttt{</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="strong">
-<xsl:text>\textbf{</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>}</xsl:text>
-</xsl:template>
-
-<xsl:template match="em">
-<xsl:text>\textit{</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>}</xsl:text>
-</xsl:template>
-
-<!-- Value-of used here explicitly because we don't wan't latex-escaping
-performed. Of course, this will conflict with html where some tags are
-interpreted in pre -->
-<xsl:template match="pre">
-<xsl:text>\begin{verbatim}
-</xsl:text>
-<xsl:value-of select="."/>
-<xsl:text>\end{verbatim}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="blockquote">
-<xsl:text>\begin{quotation}
-</xsl:text>
-<xsl:apply-templates/>
-<xsl:text>\end{quotation}
-</xsl:text>
-</xsl:template>
-
-<!-- XXX: We need to deal with table headers -->
-
-<xsl:template match="table">
-<xsl:variable name="table-type">
- <xsl:choose>
- <xsl:when test="count(tr) &gt; 15">longtable</xsl:when>
- <xsl:otherwise>tabular</xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:text>\begin{</xsl:text><xsl:value-of select="$table-type"/>
-<xsl:text>}{|</xsl:text>
-<xsl:choose>
-<xsl:when test="columnspec">
- <xsl:for-each select="columnspec/column">
- <xsl:text>l</xsl:text>
- <xsl:if test="../../@border and not(position()=last())">
- <xsl:text>|</xsl:text>
- </xsl:if>
- </xsl:for-each>
-</xsl:when>
-<xsl:otherwise>
- <xsl:for-each select="tr[1]/*">
- <xsl:text>l</xsl:text>
- <xsl:if test="../../@border and not(position()=last())">
- <xsl:text>|</xsl:text>
- </xsl:if>
- </xsl:for-each>
-</xsl:otherwise>
-</xsl:choose>
-<xsl:text>|}\hline
-</xsl:text>
-<xsl:apply-templates select="tr"/>
-<xsl:text>\hline\end{</xsl:text>
-<xsl:value-of select="$table-type"/>
-<xsl:text>}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="tr">
- <xsl:apply-templates select="td|th"/>
- <xsl:text>\\</xsl:text>
- <xsl:if test="../@border and not(position()=last())">
- <xsl:text>\hline</xsl:text>
- </xsl:if>
- <xsl:text>
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="td">
- <xsl:variable name="pos" select="position()"/>
- <xsl:text>\begin{minipage}[t]{</xsl:text>
- <xsl:choose>
- <xsl:when test="../../columnspec">
- <xsl:value-of select="../../columnspec/column[$pos]/@width"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select=".95 div last()"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>\textwidth}\small </xsl:text>
- <xsl:apply-templates/>
- <xsl:text>\end{minipage}</xsl:text>
- <xsl:if test="not(position()=last())">
- <xsl:text> &amp; </xsl:text>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="th">
- <xsl:variable name="pos" select="position()"/>
- <xsl:text>\begin{minipage}[t]{</xsl:text>
- <xsl:choose>
- <xsl:when test="../../columnspec">
- <xsl:value-of select="../../columnspec/column[$pos]/@width"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select=".95 div last()"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>\textwidth}\bfseries </xsl:text>
- <xsl:apply-templates/>
- <xsl:text>\end{minipage}</xsl:text>
- <xsl:if test="not(position()=last())">
- <xsl:text> &amp; </xsl:text>
- </xsl:if>
-</xsl:template>
-
-<!--
- This is a horrible hack, but it seems to mostly work. It does a
- few things:
-
- 1. Transforms references starting in http:// to footnotes with the
- appropriate hyperref macro to make them clickable. (This needs
- to be expanded to deal with news: and needs to be adjusted to
- deal with "#", which is creating bad links at the moment.)
-
- 2. For intra-document references, constructs the appropriate absolute
- reference using a latex \pageref.
- This involves applying a simplified version of the
- general URL resolution rules to deal with ../. It only works for
- one level of subdirectory.
-
- 3. It is also necessary to deal with the fact that index pages
- get references as "/".
--->
-<xsl:template match="a">
-<xsl:apply-templates/>
-<xsl:if test="@href">
-<xsl:variable name="relpath" select="document(/*/@metafile)/metafile/relpath" />
-<xsl:variable name="path" select="document(/*/@metafile)/metafile/path" />
-<xsl:variable name="fileref">
- <xsl:choose>
- <xsl:when test="contains(@href, '.html')">
- <xsl:value-of select="substring-before(@href, '.html')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat(@href, 'index')"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-<xsl:choose>
-
-<xsl:when test="starts-with(@href, 'http:') or starts-with(@href, 'news:') or starts-with(@href, 'mailto:')">
- <xsl:if test="not(.=@href)">
- <xsl:text>\footnote{</xsl:text>
- <xsl:text>\href{</xsl:text>
- <xsl:call-template name="replace-string">
- <xsl:with-param name="text" select="@href"/>
- <xsl:with-param name="replace" select="'#'"/>
- <xsl:with-param name="with" select="'\#'"/>
- </xsl:call-template>
- <xsl:text>}{</xsl:text>
- <xsl:call-template name="ltescape">
- <xsl:with-param name="string" select="@href"/>
- </xsl:call-template>
- <xsl:text>}}</xsl:text>
- </xsl:if>
-</xsl:when>
-<xsl:when test="starts-with(@href, '#')">
-<!-- Don't do inter-section references -->
-</xsl:when>
-<xsl:otherwise>
- <xsl:text> (p.\ \pageref{</xsl:text>
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'#'"/>
- <xsl:with-param name="with" select="':'"/>
- <xsl:with-param name="text">
- <xsl:choose>
- <xsl:when test="$relpath='.'">
- <xsl:value-of select="concat('/',$fileref)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:choose>
- <xsl:when test="starts-with($fileref,'..')">
- <xsl:value-of select="substring-after($fileref,'..')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat($path,$fileref)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- </xsl:call-template>
- <xsl:text>}) </xsl:text>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:if>
-</xsl:template>
-
-<xsl:template match="img">
-<xsl:variable name="path" select="document(/*/@metafile)/metafile/path" />
-<xsl:text>\includegraphics{</xsl:text>
- <xsl:call-template name="replace-string">
- <xsl:with-param name="text" select="concat('.',$path,@src)"/>
- <xsl:with-param name="replace" select="'.gif'"/>
- <xsl:with-param name="with" select="''"/>
- </xsl:call-template>
-<xsl:text>}</xsl:text>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/latex.xsl b/docs/manual/style/latex/latex.xsl
deleted file mode 100644
index e17a96ec82..0000000000
--- a/docs/manual/style/latex/latex.xsl
+++ /dev/null
@@ -1,375 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:output
- method="text"
- encoding="ISO-8859-1"
- indent="no"
-/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('../lang/en.xml')
- /language/messages/message"/>
-<xsl:variable name="allmodules" select="document('../xsl/util/allmodules.xml')
- /items/item[@lang='en']"/>
-
-<!-- Get the guts of the stylesheets -->
-<xsl:include href="manualpage.xsl" />
-<xsl:include href="common.xsl" />
-<xsl:include href="html.xsl" />
-<xsl:include href="synopsis.xsl" />
-<xsl:include href="moduleindex.xsl" />
-<xsl:include href="directiveindex.xsl" />
-<xsl:include href="faq.xsl" />
-<xsl:include href="quickreference.xsl" />
-
-<xsl:template match="sitemap">
-<xsl:text>
-\documentclass[10pt]{book}
-\usepackage{times}
-\usepackage{longtable}
-\usepackage{style/latex/atbeginend}
-\usepackage[pdftex]{graphicx}
-\usepackage[colorlinks=true,letterpaper=true,linkcolor=blue,urlcolor=blue]{hyperref}
-
-% Let LaTeX be lenient about very-bad line wrapping.
-\tolerance=9999
-\emergencystretch=60pt
-
-% Adjust margins to a reasonable level
-\topmargin 0pt
-\advance \topmargin by -\headheight
-\advance \topmargin by -\headsep
-\textheight 8.9in
-\oddsidemargin 0pt
-\evensidemargin \oddsidemargin
-\marginparwidth 0.5in
-\textwidth 6.5in
-
-% Keep paragraphs flush left (rather than the default of indenting
-% the first line) and put a space between paragraphs.
-\setlength{\parindent}{0ex}
-\addtolength{\parskip}{1.2ex}
-
-% Shrink the inter-item spaces
-\AfterBegin{itemize}{\setlength{\itemsep}{0em}}
-
-\pagestyle{headings}
-
-\hypersetup{
- pdftitle={</xsl:text>
-<xsl:value-of select="$message[@id='apache']" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="$message[@id='http-server']" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="$message[@id='documentation']" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="$message[@id='version']" />
-<xsl:text>},
- pdfauthor={Apache Software Foundation}
- }
-
-\title{</xsl:text>
-<xsl:value-of select="$message[@id='apache']" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="$message[@id='http-server']" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="$message[@id='documentation']" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="$message[@id='version']" />
-<xsl:text>\\ \bigskip \bigskip
-\includegraphics{images/feather}\\ \bigskip}
-\author{Apache Software Foundation}
-\date{\today}
-
-\begin{document}
-\frontmatter
-\maketitle
-
-\section*{About The PDF Documentation}
-
-Copyright \copyright 2004 The Apache Software Foundation
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at \href{http://www.apache.org/licenses/LICENSE-2.0}{http://www.apache.org/licenses/LICENSE-2.0}
-
-This version of the Apache HTTP Server Documentation is converted from
-XML source files to \LaTeX\ using XSLT with the help of Apache Ant,
-Apache XML Xalan, and Apache XML Xerces.
-
-Since the HTML version of the documentation is more commonly checked
-during development, the PDF version may contain some errors and
-inconsistencies, especially in formatting. If you have difficulty
-reading a part of this file, please consult the HTML version
-of the documentation on the Apache HTTP Server website at
-\href{http://httpd.apache.org/docs-2.0/}{http://httpd.apache.org/docs-2.0/}
-
-The Apache HTTP Server Documentation is maintained by the Apache HTTP
-Server Documentation Project. More information is available at
-\href{http://httpd.apache.org/docs-project/}{http://httpd.apache.org/docs-project/}
-
-\tableofcontents
-\mainmatter
-</xsl:text>
-
-<xsl:for-each select="category">
- <xsl:text>\chapter{</xsl:text>
- <xsl:apply-templates select="title" mode="printcat"/>
- <xsl:text>}
-</xsl:text>
- <xsl:apply-templates/>
-</xsl:for-each>
-
-<xsl:text>\end{document}</xsl:text>
-</xsl:template>
-
-<xsl:template match="page">
-<xsl:text>\include{</xsl:text>
-<xsl:choose>
-<xsl:when test="contains(@href,'.')">
- <xsl:value-of select="substring-before(@href,'.')"/>
-</xsl:when>
-<xsl:otherwise>
- <xsl:value-of select="concat(@href,'index')"/>
-</xsl:otherwise>
-</xsl:choose>
-<xsl:text>}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="category/title" mode="printcat">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="category/title"></xsl:template>
-
-<xsl:template match="modulefilelist">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="modulefile">
-<xsl:text>\include{mod/</xsl:text>
-<xsl:value-of select="substring-before(.,'.')"/>
-<xsl:text>}
-</xsl:text>
-</xsl:template>
-
-<xsl:template match="summary">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template name="replace-string">
- <xsl:param name="text"/>
- <xsl:param name="replace"/>
- <xsl:param name="with"/>
-
- <xsl:choose>
- <xsl:when test="not(contains($text,$replace))">
- <xsl:value-of select="$text"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="substring-before($text,$replace)"/>
- <xsl:value-of select="$with"/>
- <xsl:call-template name="replace-string">
- <xsl:with-param name="text" select="substring-after($text,$replace)"/>
- <xsl:with-param name="replace" select="$replace"/>
- <xsl:with-param name="with" select="$with"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- ==================================================================== -->
-<!-- Take care of all the LaTeX special characters. -->
-<!-- Silly multi-variable technique used to avoid deep recursion. -->
-<!-- ==================================================================== -->
-<xsl:template match="text()">
-<xsl:call-template name="ltescape">
- <xsl:with-param name="string" select="."/>
-</xsl:call-template>
-</xsl:template>
-
-
-<xsl:template name="ltescape">
-<xsl:param name="string"/>
-
-<xsl:variable name="result1">
- <xsl:choose>
- <xsl:when test="contains($string, '\')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'\'"/>
- <xsl:with-param name="with" select="'\textbackslash '"/>
- <xsl:with-param name="text" select="normalize-space($string)"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$string"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="result2">
- <xsl:choose>
- <xsl:when test="contains($result1, '$')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'$'"/>
- <xsl:with-param name="with" select="'\$'"/>
- <xsl:with-param name="text" select="$result1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$result1"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="result3">
- <xsl:choose>
- <xsl:when test="contains($result2, '{')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'{'"/>
- <xsl:with-param name="with" select="'\{'"/>
- <xsl:with-param name="text" select="$result2"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$result2"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="result4">
- <xsl:choose>
- <xsl:when test="contains($result3, '}')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'}'"/>
- <xsl:with-param name="with" select="'\}'"/>
- <xsl:with-param name="text" select="$result3"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$result3"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<!-- The '[' and ']' characters don't, in general, need to be
- escaped. But there are times when it is ambiguous whether
- [ is the beginning of an optional argument or a literal '['.
- Hence, it is safer to protect the literal ones with {}. -->
-<xsl:variable name="result5">
- <xsl:choose>
- <xsl:when test="contains($result4, '[')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'['"/>
- <xsl:with-param name="with" select="'{[}'"/>
- <xsl:with-param name="text" select="$result4"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$result4"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="result6">
- <xsl:choose>
- <xsl:when test="contains($result5, ']')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="']'"/>
- <xsl:with-param name="with" select="'{]}'"/>
- <xsl:with-param name="text" select="$result5"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$result5"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="result7">
- <xsl:choose>
- <xsl:when test="contains($result6, '&quot;')">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'&quot;'"/>
- <xsl:with-param name="with" select="'\texttt{&quot;}'"/>
- <xsl:with-param name="text" select="$result6"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$result6"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'_'"/>
- <xsl:with-param name="with" select="'\_'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'#'"/>
- <xsl:with-param name="with" select="'\#'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'%'"/>
- <xsl:with-param name="with" select="'\%'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'&gt;'"/>
- <xsl:with-param name="with" select="'\textgreater{}'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'&lt;'"/>
- <xsl:with-param name="with" select="'\textless{}'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'~'"/>
- <xsl:with-param name="with" select="'\textasciitilde{}'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'^'"/>
- <xsl:with-param name="with" select="'\^{}'"/>
- <xsl:with-param name="text">
- <xsl:call-template name="replace-string">
- <xsl:with-param name="replace" select="'&amp;'"/>
- <xsl:with-param name="with" select="'\&amp;'"/>
- <xsl:with-param name="text" select="$result7"/>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:call-template>
-
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/manualpage.xsl b/docs/manual/style/latex/manualpage.xsl
deleted file mode 100644
index 102c277ec6..0000000000
--- a/docs/manual/style/latex/manualpage.xsl
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<xsl:template match="manualpage">
-
-<xsl:call-template name="section-title"/>
-
-<xsl:apply-templates select="summary"/>
-
-<xsl:call-template name="seealso"/>
-
-<xsl:apply-templates select="section"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/moduleindex.xsl b/docs/manual/style/latex/moduleindex.xsl
deleted file mode 100644
index b7400ccbaf..0000000000
--- a/docs/manual/style/latex/moduleindex.xsl
+++ /dev/null
@@ -1,217 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <moduleindex> -->
-<!-- Builds the moduleindex page -->
-<!-- ==================================================================== -->
-<xsl:template match="moduleindex">
-
- <xsl:variable name="metafile" select="document(/*/@metafile)/metafile" />
-
- <xsl:call-template name="section-title"/>
-
- <xsl:apply-templates select="summary"/>
-
- <xsl:call-template name="seealso"/>
-
- <xsl:text>\subsection*{</xsl:text>
- <xsl:value-of select="$message[@id='corefeatures']" />
- <xsl:text>}
-
-\begin{description}
-\item[</xsl:text>
- <xsl:apply-templates select="document(document($allmodules)/modulefilelist/modulefile
- [starts-with(., 'core.xml')])
- /modulesynopsis/name"/>
- <xsl:text>] (p.\ \pageref{/mod/</xsl:text>
- <xsl:value-of select="document(document($allmodules)/modulefilelist/modulefile
- [starts-with(., 'core.xml')])
- /modulesynopsis/name"/>
- <xsl:text>}) </xsl:text>
-
- <xsl:apply-templates select="document(document($allmodules)/modulefilelist/modulefile
- [starts-with(., 'core.xml')])
- /modulesynopsis/description" />
-
- <xsl:text>
-\item[</xsl:text>
-
- <xsl:apply-templates select="document(document($allmodules)/modulefilelist/modulefile
- [starts-with(., 'mpm_common.xml')])
- /modulesynopsis/name" />
- <xsl:text>] (p.\ \pageref{/mod/</xsl:text>
- <xsl:value-of select="document(document($allmodules)/modulefilelist/modulefile
- [starts-with(., 'mpm_common.xml')])
- /modulesynopsis/name"/>
- <xsl:text>}) </xsl:text>
- <xsl:apply-templates select="document(document($allmodules)/modulefilelist/modulefile
- [starts-with(., 'mpm_common.xml')])
- /modulesynopsis/description" />
-
-
-
- <!-- and now the remaining MPMs -->
- <xsl:variable name="mpmmodules"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis[status='MPM' and name != 'mpm_common']" />
- <xsl:variable name="translist">
- <xsl:call-template name="module-translist">
- <xsl:with-param name="modules" select="$mpmmodules" />
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:for-each select="$mpmmodules">
- <xsl:sort select="substring-before(substring-after($translist,
- concat('- ', translate(normalize-space(name), $lowercase,
- $uppercase), ' ')), ' -')" />
-
- <xsl:text>
-\item[</xsl:text>
- <xsl:apply-templates select="name"/>
- <xsl:text>] (p.\ \pageref{/mod/</xsl:text>
- <xsl:value-of select="name"/>
- <xsl:text>}) </xsl:text>
-
- <xsl:apply-templates select="description" />
-
- </xsl:for-each>
-
- <xsl:text>\end{description}
-
-</xsl:text>
-
- <!-- /core section -->
-
- <xsl:text>\section*{</xsl:text>
- <xsl:value-of select="$message[@id='othermodules']" />
- <xsl:text>}
-\begin{description}
-</xsl:text>
-
- <xsl:variable name="modules"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis[status!='MPM' and status!='Core']" />
-
- <xsl:call-template name="mindex-of-letter">
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
-
- <xsl:text>\end{description}
-</xsl:text>
-</xsl:template>
-<!-- /moduleindex -->
-
-
-<!-- ==================================================================== -->
-<!-- the working horse. builds list items of all modules starting with -->
-<!-- one letter when done, it calls itself to catch the next letter -->
-<!-- ==================================================================== -->
-<xsl:template name="mindex-of-letter">
-<xsl:param name="modules"/>
-
-<xsl:variable name="translist">
- <xsl:call-template name="module-translist">
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:for-each select="$modules">
-<xsl:sort
- select="substring-before(substring-after($translist, concat('- ',
- translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')" />
-
-<xsl:text>
-\item[</xsl:text>
-<xsl:apply-templates select="name"/>
-<xsl:text>] (p.\ \pageref{/mod/</xsl:text>
-<xsl:value-of select="name"/>
-<xsl:text>}) </xsl:text>
-
- <xsl:apply-templates select="description" />
-
-</xsl:for-each> <!-- /directives -->
-
-</xsl:template>
-<!-- /mindex-of-letter -->
-
-<!-- ==================================================================== -->
-<!-- define module name translations for sorting -->
-<!-- -->
-<!-- it's a kind of a hack... -->
-<!-- we build a string that contains the following data: -->
-<!-- "- modulename sortname - modulename sortname - ..." -->
-<!-- (with all data in uppercase) -->
-<!-- -->
-<!-- So, the translation from modulename to sortname can be done with the -->
-<!-- expression below: -->
-<!--
- substring-before(
- substring-after($translist,
- concat('- ', translate(modulename,
- $lowercase, $uppercase),
- ' ')
- ),
- ' -')
- -->
-<!-- ==================================================================== -->
-<xsl:template name="module-translist">
-<xsl:param name="modules" />
-
-<xsl:text>-</xsl:text>
-<xsl:for-each select="$modules">
- <xsl:variable name="sname" select="translate(normalize-space(name),
- $lowercase, $uppercase)" />
-
- <xsl:text> </xsl:text>
- <xsl:value-of select="$sname" />
- <xsl:text> </xsl:text>
- <xsl:call-template name="module-translatename">
- <xsl:with-param name="name" select="$sname" />
- </xsl:call-template>
- <xsl:text> -</xsl:text>
-</xsl:for-each>
-</xsl:template>
-<!-- /module-translist -->
-
-<xsl:template name="module-translatename">
-<xsl:param name="name" />
-
-<xsl:variable name="sname" select="translate($name, $lowercase, $uppercase)" />
-
-<xsl:choose>
-<xsl:when test="starts-with($sname, 'MOD_') or starts-with($sname, 'MPM_')">
- <xsl:value-of select="substring($name, 5)" />
-</xsl:when>
-
-<xsl:when test="starts-with($sname, 'MPMT_')">
- <xsl:value-of select="substring($name, 6)" />
-</xsl:when>
-
-<xsl:otherwise>
- <xsl:value-of select="$name" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /module-translatename -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/quickreference.xsl b/docs/manual/style/latex/quickreference.xsl
deleted file mode 100644
index 02cd41eb3e..0000000000
--- a/docs/manual/style/latex/quickreference.xsl
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <quickreference> -->
-<!-- Builds the directive quickreference page -->
-<!-- ==================================================================== -->
-<xsl:template match="quickreference">
-
- <xsl:call-template name="section-title"/>
-
- <xsl:apply-templates select="summary"/>
-
- <xsl:call-template name="seealso"/>
-
- <xsl:apply-templates select="legend"/>
-
- <xsl:variable name="directives"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis/directivesynopsis[not(@location)]" />
-
- <xsl:text>\footnotesize
-</xsl:text>
-
- <xsl:text>\begin{longtable}{p{.60\textwidth}p{.25\textwidth}ll}\hline
-</xsl:text>
-
-<xsl:for-each
- select="$directives[translate(substring(normalize-space(name), 1,1),
- $lowercase,$uppercase)]">
-<xsl:sort select="name" />
-
- <xsl:text>\texttt{</xsl:text>
- <xsl:apply-templates select="syntax" />
- <xsl:text>}</xsl:text>
- <xsl:text>&amp;</xsl:text>
-
- <!-- if the default value contains (at least) one <br />, -->
- <!-- this probably means that a short explanation follows -->
- <!-- the actual default value. We cut off the string -->
- <!-- after the <br /> so it will not be shown here. -->
- <!-- (add the + character instead) -->
- <xsl:variable name="default">
- <xsl:choose>
- <xsl:when test="count(default[count(br) &gt; 0]) &gt; 0">
- <xsl:value-of select="default/child::node()
- [count(preceding-sibling::*) = 0]" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="default"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:call-template name="ltescape">
- <xsl:with-param name="string">
- <xsl:value-of select="substring(substring-after(concat($default,
- ' '), name),1,20)" />
- </xsl:with-param>
- </xsl:call-template>
-
- <xsl:if test="string-length(substring-after(concat($default, ' '),
- name)) &gt; 20 or count(default[count(br) &gt; 0]) &gt; 0">
- <xsl:text> +</xsl:text>
- </xsl:if>
-
- <xsl:text>&amp;</xsl:text>
-
- <xsl:if test="contextlist/context
- [normalize-space(.)='server config']">s</xsl:if>
- <xsl:if test="contextlist/context
- [normalize-space(.)='virtual host']">v</xsl:if>
- <xsl:if test="contextlist/context
- [normalize-space(.)='directory']">d</xsl:if>
- <xsl:if test="contextlist/context
- [normalize-space(.)='.htaccess']">h</xsl:if>
-
- <xsl:text>&amp;</xsl:text>
- <xsl:choose>
- <xsl:when test="../status='Base'">B</xsl:when>
- <xsl:when test="../status='MPM'">M</xsl:when>
- <xsl:when test="../status='Core'">C</xsl:when>
- <xsl:when test="../status='Extension'">E</xsl:when>
- <xsl:when test="../status='Experimental'">X</xsl:when>
- </xsl:choose>
-
- <xsl:text>\\*
-</xsl:text>
-
- <xsl:text>\multicolumn{4}{l}{\begin{minipage}[t]{.95\textwidth}</xsl:text>
- <xsl:choose>
- <xsl:when test="string-length(normalize-space(description)) &gt; 0">
- <xsl:apply-templates select="description"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>-</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:text>\hfill p.\ \pageref{/mod/</xsl:text>
- <xsl:value-of select="../name"/> <xsl:text>:</xsl:text>
- <xsl:value-of select="translate(name, $uppercase, $lowercase)"/>
- <xsl:text>}</xsl:text>
-
-
- <xsl:text>\end{minipage}} \\ \hline
-</xsl:text>
-
- </xsl:for-each> <!-- /directives -->
-
- <xsl:text>\end{longtable}
-\normalsize</xsl:text>
-
-</xsl:template>
-
-<xsl:template match="legend">
-<xsl:apply-templates/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/latex/synopsis.xsl b/docs/manual/style/latex/synopsis.xsl
deleted file mode 100644
index 7036775f22..0000000000
--- a/docs/manual/style/latex/synopsis.xsl
+++ /dev/null
@@ -1,345 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-
-<!-- ==================================================================== -->
-<!-- <modulesynopsis> -->
-<!-- ==================================================================== -->
-
-<xsl:template match="modulesynopsis">
-
-<xsl:text>\section{</xsl:text>
-<xsl:choose>
- <xsl:when test="../status='Core'">
- <xsl:value-of select="$message[@id='apachecore']" />
- </xsl:when>
- <xsl:when test=".='mpm_common'">
- <xsl:value-of select="$message[@id='apachempmcommon']" />
- </xsl:when>
- <xsl:when test="../status='MPM'">
- <xsl:value-of select="$message[@id='apachempm']" />
- <xsl:text> </xsl:text>
- <xsl:apply-templates select="name"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$message[@id='apachemodule']" />
- <xsl:text> </xsl:text>
- <xsl:apply-templates select="name"/>
- </xsl:otherwise>
-</xsl:choose>
-<xsl:text>}\label{</xsl:text>
-<xsl:value-of select="concat('/mod/',name)"/>
-<xsl:text>}\hypertarget{</xsl:text>
-<xsl:value-of select="concat('/mod/',name)"/>
-<xsl:text>}{}</xsl:text>
-
-<xsl:text>
-\begin{tabular}{lp{.75\linewidth}}
-\hline
-</xsl:text>
-<xsl:value-of select="$message[@id='description']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="description" />
-<xsl:text>\\
-</xsl:text>
-
-<xsl:value-of select="$message[@id='status']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:value-of select="status" />
-<xsl:text>\\
-</xsl:text>
-
-<xsl:if test="identifier">
-<xsl:value-of select="$message[@id='moduleidentifier']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="identifier" />
-<xsl:text>\\
-</xsl:text>
-</xsl:if>
-
-<xsl:if test="sourcefile">
-<xsl:value-of select="$message[@id='sourcefile']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="sourcefile" />
-<xsl:text>\\
-</xsl:text>
-</xsl:if>
-
-<xsl:if test="compatibility">
-<xsl:value-of select="$message[@id='compatibility']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="compatibility" />
-<xsl:text> \\
-</xsl:text>
-</xsl:if>
-<xsl:text>\hline \end{tabular}
-</xsl:text>
- <!-- Summary of module features/usage (1 to 3 paragraphs, -->
- <!-- optional) -->
- <xsl:if test="summary">
- <xsl:text>\subsection*{</xsl:text>
- <xsl:value-of select="$message[@id='summary']" />
- <xsl:text>}
-</xsl:text>
- <xsl:apply-templates select="summary" />
- </xsl:if>
-
- <xsl:text>
-\smallskip\textbf{</xsl:text>
- <xsl:value-of select="$message[@id='directives']" />
- <xsl:text>}
-</xsl:text>
-
- <xsl:choose>
- <xsl:when test="directivesynopsis">
- <xsl:text>\begin{itemize}</xsl:text>
- <xsl:for-each select="directivesynopsis">
- <xsl:sort select="name" />
- <xsl:text>\item </xsl:text>
- <xsl:if test="@type='section'">
- <xsl:text>\textless{}</xsl:text>
- </xsl:if>
- <xsl:apply-templates select="name" mode="simple"/>
- <xsl:if test="@type='section'">
- <xsl:text>\textgreater{}</xsl:text>
- </xsl:if>
- <xsl:if test="@location">
- <xsl:variable name="lowerlocation"
- select="translate(@location, $uppercase, $lowercase)" />
- <xsl:text> (p.\ \pageref{/mod/</xsl:text>
- <xsl:value-of select="concat(translate(@location,$uppercase,$lowercase),':',translate(name,$uppercase,$lowercase))"/>
- <xsl:text>}) </xsl:text>
- </xsl:if>
- <xsl:text>
-</xsl:text>
- </xsl:for-each>
- <xsl:text>\end{itemize}
-</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$message[@id='nodirectives']" />
- <xsl:text>
-</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:text>
-</xsl:text>
-
-<xsl:call-template name="seealso"/>
-
- <!-- Sections of documentation about the module as a whole -->
- <xsl:apply-templates select="section" />
-
- <!-- Directive documentation -->
- <xsl:apply-templates select="directivesynopsis">
- <xsl:sort select="name" />
- </xsl:apply-templates>
-
-</xsl:template>
-<!-- /modulesynopsis -->
-
-
-<!-- ==================================================================== -->
-<!-- Directivesynopsis -->
-<!-- ==================================================================== -->
-<xsl:template match="directivesynopsis/name" mode="simple" name="simpledirname">
-<xsl:if test="@type='section'"><xsl:text>\textless{}</xsl:text></xsl:if>
-<xsl:apply-templates/>
-<xsl:if test="@type='section'"><xsl:text>\textgreater{}</xsl:text></xsl:if>
-</xsl:template>
-
-<xsl:template match="directivesynopsis/name">
-<xsl:text>\subsection*{</xsl:text>
-<xsl:call-template name="simpledirname"/>
- <xsl:choose>
- <xsl:when test="$message[@id='directive']/@replace-space-with">
- <xsl:value-of select="$message[@id='directive']/@replace-space-with"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text> </xsl:text>
- </xsl:otherwise>
- </xsl:choose>
-
-<xsl:value-of select="$message[@id='directive']" />
-<xsl:text>}\label{</xsl:text>
-<xsl:value-of select="concat('/mod/', //modulesynopsis/name, ':', translate(., $uppercase, $lowercase))"/>
-<xsl:text>}\hypertarget{</xsl:text>
-<xsl:value-of select="concat('/mod/', //modulesynopsis/name, ':', translate(., $uppercase, $lowercase))"/>
-<xsl:text>}{}</xsl:text>
-
-</xsl:template>
-
-<xsl:template match="directivesynopsis">
-<xsl:if test="not(@location)">
- <xsl:apply-templates select="name"/>
- <!-- Directive header -->
- <xsl:text>
-\begin{tabular}{lp{.8\linewidth}}
-\hline
-</xsl:text>
-<xsl:value-of select="$message[@id='description']" />
-<xsl:text>: &amp; </xsl:text>
-<xsl:apply-templates select="description" />
-<xsl:text>\\
-</xsl:text>
-
-<xsl:value-of select="$message[@id='syntax']" />
-<xsl:text>: &amp; {\ttfamily </xsl:text>
-<xsl:apply-templates select="syntax" />
-<xsl:text>}\\
-</xsl:text>
-
-<xsl:if test="default">
-<xsl:value-of select="$message[@id='default']" />
-<xsl:text>: &amp; {\ttfamily </xsl:text>
-<xsl:apply-templates select="default" />
-<xsl:text>} \\
-</xsl:text>
-</xsl:if>
-
-<xsl:value-of select="$message[@id='context']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="contextlist" />
-<xsl:text> \\
-</xsl:text>
-
-<xsl:if test="override">
-<xsl:value-of select="$message[@id='override']"/>
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="override" />
-<xsl:text> \\
-</xsl:text>
-</xsl:if>
-
-<xsl:value-of select="$message[@id='status']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:value-of select="../status" />
-<xsl:text> \\
-</xsl:text>
-
-<xsl:value-of select="$message[@id='module']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:choose>
-<xsl:when test="modulelist">
- <xsl:apply-templates select="modulelist" />
-</xsl:when>
-<xsl:otherwise>
- <xsl:apply-templates select="../name" />
-</xsl:otherwise>
-</xsl:choose>
-<xsl:text> \\
-</xsl:text>
-
-<xsl:if test="compatibility">
-<xsl:value-of select="$message[@id='compatibility']" />
-<xsl:text>: &amp;</xsl:text>
-<xsl:apply-templates select="compatibility" />
-<xsl:text> \\
-</xsl:text>
-</xsl:if>
-
-<xsl:text>\hline
-\end{tabular}
-
-</xsl:text>
-
-<xsl:apply-templates select="usage" />
-
-<xsl:call-template name="seealso"/>
-
-</xsl:if> <!-- /not(@location) -->
-</xsl:template>
-<!-- /directivesynopsis -->
-
-
-<!-- ==================================================================== -->
-<!-- <contextlist> -->
-<!-- ==================================================================== -->
-<xsl:template match="contextlist">
-<xsl:apply-templates select="context" />
-</xsl:template>
-<!-- /contextlist -->
-
-
-<!-- ==================================================================== -->
-<!-- <context> -->
-<!-- Each entry is separeted with a comma -->
-<!-- ==================================================================== -->
-<xsl:template match="context">
-<xsl:choose>
-<xsl:when test="normalize-space(.) = 'server config'">
- <xsl:value-of select="$message[@id='serverconfig']" />
-</xsl:when>
-<xsl:when test="normalize-space(.) = 'virtual host'">
- <xsl:value-of select="$message[@id='virtualhost']" />
-</xsl:when>
-<xsl:when test="normalize-space(.) = 'directory'">
- <xsl:value-of select="$message[@id='directory']" />
-</xsl:when>
-<xsl:when test="normalize-space(.) = '.htaccess'">
- <xsl:value-of select="$message[@id='htaccess']" />
-</xsl:when>
-<xsl:otherwise> <!-- error -->
- <xsl:message terminate="yes">
- unknown context: <xsl:value-of select="." />
- </xsl:message>
-</xsl:otherwise>
-</xsl:choose>
-
-<xsl:if test="position() != last()">
- <xsl:text>, </xsl:text>
-</xsl:if>
-</xsl:template>
-<!-- /context -->
-
-
-<!-- ==================================================================== -->
-<!-- <modulelist> -->
-<!-- ==================================================================== -->
-<xsl:template match="modulelist">
-<xsl:for-each select="module">
- <xsl:call-template name="module" />
- <xsl:if test="position() != last()">
- <xsl:text>, </xsl:text>
- </xsl:if>
-</xsl:for-each>
-</xsl:template>
-<!-- /modulelist -->
-
-
-<!-- ==================================================================== -->
-<!-- modulesynopsis/compatibility -->
-<!-- ==================================================================== -->
-<xsl:template match="modulesynopsis/compatibility">
-<xsl:apply-templates />
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- directivesynopsis/compatibility -->
-<!-- ==================================================================== -->
-<xsl:template match="directivesynopsis/compatibility">
-<xsl:apply-templates />
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/manual.de.xsl b/docs/manual/style/manual.de.xsl
deleted file mode 100644
index e03c003f64..0000000000
--- a/docs/manual/style/manual.de.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="ISO-8859-1" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/de.xml')/language/messages/message"/>
-<xsl:variable name="doclang">de</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">ISO-8859-1</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manual.en.xsl b/docs/manual/style/manual.en.xsl
deleted file mode 100644
index eea60b40ab..0000000000
--- a/docs/manual/style/manual.en.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="ISO-8859-1" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/en.xml')/language/messages/message"/>
-<xsl:variable name="doclang">en</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">ISO-8859-1</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manual.es.xsl b/docs/manual/style/manual.es.xsl
deleted file mode 100644
index 5c3e59759a..0000000000
--- a/docs/manual/style/manual.es.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="ISO-8859-1" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/es.xml')/language/messages/message"/>
-<xsl:variable name="doclang">es</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">ISO-8859-1</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manual.fr.xsl b/docs/manual/style/manual.fr.xsl
deleted file mode 100644
index c8667120de..0000000000
--- a/docs/manual/style/manual.fr.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="ISO-8859-1" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/fr.xml')/language/messages/message"/>
-<xsl:variable name="doclang">fr</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">ISO-8859-1</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manual.ja.xsl b/docs/manual/style/manual.ja.xsl
deleted file mode 100644
index 24860f0003..0000000000
--- a/docs/manual/style/manual.ja.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="EUC-JP" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/ja.xml')/language/messages/message"/>
-<xsl:variable name="doclang">ja</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">EUC-JP</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manual.ko.xsl b/docs/manual/style/manual.ko.xsl
deleted file mode 100644
index 0b2e8c80ef..0000000000
--- a/docs/manual/style/manual.ko.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="EUC-KR" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/ko.xml')/language/messages/message"/>
-<xsl:variable name="doclang">ko</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">EUC-KR</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manual.ru.xsl b/docs/manual/style/manual.ru.xsl
deleted file mode 100644
index 16374f9d66..0000000000
--- a/docs/manual/style/manual.ru.xsl
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:output method="xml" encoding="KOI8-R" indent="no" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
-
-<!-- Read the localized messages from the specified language file -->
-<xsl:variable name="message" select="document('lang/ru.xml')/language/messages/message"/>
-<xsl:variable name="doclang">ru</xsl:variable>
-<xsl:variable name="allmodules" select="document('xsl/util/allmodules.xml')/items/item[@lang=$doclang]"/>
-
-<!-- some meta information have to be passed to the transformation -->
-<xsl:variable name="output-encoding">KOI8-R</xsl:variable>
-<xsl:variable name="is-chm" select="false()"/>
-<xsl:variable name="is-zip" select="false()"/>
-
-<!-- Now get the real guts of the stylesheet -->
-<xsl:include href="xsl/common.xsl"/>
-
-</xsl:stylesheet> \ No newline at end of file
diff --git a/docs/manual/style/manualpage.dtd b/docs/manual/style/manualpage.dtd
deleted file mode 100644
index 9551cf4720..0000000000
--- a/docs/manual/style/manualpage.dtd
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!ENTITY % common SYSTEM "common.dtd">
-%common;
-
-<!-- <manualpage> is the root element -->
-<!ELEMENT manualpage (parentdocument?, title, summary?,
-seealso*, section*)>
-
-<!ATTLIST manualpage metafile CDATA #REQUIRED>
diff --git a/docs/manual/style/modulesynopsis.dtd b/docs/manual/style/modulesynopsis.dtd
deleted file mode 100644
index 35d7d6d43d..0000000000
--- a/docs/manual/style/modulesynopsis.dtd
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!ENTITY % sitemap SYSTEM "sitemap.dtd">
-%sitemap;
-
-<!ELEMENT modulesynopsis (name , description, status, hint?, sourcefile?,
-identifier? , compatibility? , summary? , seealso* , section*,
-directivesynopsis*)>
-
-<!ATTLIST modulesynopsis metafile CDATA #REQUIRED>
-
-<!ELEMENT directivesynopsis (name , description? , syntax? , default?
-, contextlist? , override? , modulelist?, status?, compatibility? ,
-usage?, seealso*)>
-
-<!ELEMENT name (#PCDATA)>
-
-<!ELEMENT status (#PCDATA)>
-
-<!ELEMENT hint %Inline;>
-
-<!ELEMENT identifier (#PCDATA)>
-
-<!ELEMENT sourcefile (#PCDATA)>
-
-<!ELEMENT compatibility %Inline;>
-
-<!ELEMENT description %Inline;>
-
-<!ATTLIST directivesynopsis type CDATA #IMPLIED
- location CDATA #IMPLIED >
-
-<!ELEMENT syntax %Inline;>
-
-<!ELEMENT default (#PCDATA | br)*>
-
-<!ELEMENT contextlist (context+)+>
-
-<!ELEMENT context (#PCDATA)>
-
-<!ELEMENT override (#PCDATA)>
-
-<!ELEMENT usage %Block;>
-
-<!-- Used in index.xml -->
-<!ELEMENT moduleindex (title, summary, seealso*)>
-
-<!ATTLIST moduleindex metafile CDATA #REQUIRED>
-
-<!-- Used in directive.xml -->
-<!ELEMENT directiveindex (title | summary)+>
-
-<!ATTLIST directiveindex metafile CDATA #REQUIRED>
-
-<!-- Used in quickreference.xml -->
-<!ELEMENT quickreference (title | summary | legend)+>
-<!ATTLIST quickreference metafile CDATA #REQUIRED>
-
-<!ELEMENT legend (table, table)>
diff --git a/docs/manual/style/sitemap.dtd b/docs/manual/style/sitemap.dtd
deleted file mode 100644
index 5a1c3ecacc..0000000000
--- a/docs/manual/style/sitemap.dtd
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!ENTITY % common SYSTEM "common.dtd">
-%common;
-
-<!-- <sitemap> is the root element -->
-<!ELEMENT sitemap (title, summary?, seealso*, category*)>
-
-<!ATTLIST sitemap metafile CDATA #REQUIRED>
-
-<!-- <indexpage> is another root element -->
-<!ELEMENT indexpage (parentdocument, title, category*)>
-
-<!ATTLIST indexpage metafile CDATA #REQUIRED>
-
-<!ELEMENT category (title, page*)>
-<!ATTLIST category id ID #IMPLIED>
-
-<!ELEMENT page (#PCDATA)>
-<!ATTLIST page href CDATA #IMPLIED
- separate (yes | no) "no" >
diff --git a/docs/manual/style/xsl/common.xsl b/docs/manual/style/xsl/common.xsl
deleted file mode 100644
index 3e801f5698..0000000000
--- a/docs/manual/style/xsl/common.xsl
+++ /dev/null
@@ -1,1064 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY nbsp SYSTEM "util/nbsp.xml">
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- -->
-<!-- Please, don't hard-code output strings! Use the language -->
-<!-- files and the translation "stuff"... -->
-<!-- -->
-
-<!-- Injected variables: -->
-<!-- $is-chm - (boolean) target is for CHM generation or not -->
-<!-- $is-zip - (boolean) target is for ZIP generation or not -->
-<!-- $message - (node-set) localized common text snippets -->
-<!-- $doclang - (string) document language -->
-<!-- $output-encoding - (string) MIME charset name of the output -->
-<!-- encoding -->
-
-<!-- Constants used for case translation -->
-<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
-<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
-
-<!-- space separated list of blockelements defined in common.dtd -->
-<!-- used for inline content catching in <example>s -->
-<xsl:variable name="blockelements">
- p example note table ul ol dl pre img blockquote
-</xsl:variable>
-
-<!-- relative path to /manual/ -->
-<xsl:variable name="metafile" select="document(/*/@metafile)/metafile" />
-<xsl:variable name="path" select="$metafile/relpath" />
-
-<!-- load outsourced page types -->
-<xsl:include href="moduleindex.xsl" />
-<xsl:include href="directiveindex.xsl" />
-<xsl:include href="manualpage.xsl" />
-<xsl:include href="synopsis.xsl" />
-<xsl:include href="sitemap.xsl" />
-<xsl:include href="indexpage.xsl" />
-<xsl:include href="quickreference.xsl" />
-<xsl:include href="faq.xsl" />
-
-<!-- load utility snippets -->
-<xsl:include href="util/modtrans.xsl" />
-
-<!-- make sure, we set relative anchors only, if we're actually -->
-<!-- transforming a modulefile (see <directive> template) -->
-<xsl:variable name="in-modulesynopsis" select="boolean(/modulesynopsis)" />
-
-<!-- when referencing to a directory, we may need to complete the path -->
-<!-- with the index file (for offline applications like *.chm files) -->
-<xsl:variable name="index-file">
- <xsl:if test="$is-chm or $is-zip">index.html</xsl:if>
-</xsl:variable>
-
-<!-- it may be desired to open external targets in a new window -->
-<xsl:variable name="ext-target" select="boolean($is-chm)" />
-
-<!-- #################################################################### -->
-<!-- Utility templates for constructing pages -->
-<!-- #################################################################### -->
-
-<!-- ==================================================================== -->
-<!-- HTML head -->
-<!-- ==================================================================== -->
-<xsl:template name="head">
-<head>
- <!-- the meta element is necessary for offline handling like CHM -->
- <xsl:choose>
- <xsl:when test="$is-chm or $is-zip">
- <meta http-equiv="Content-Type"
- content="text/html; charset={$output-encoding}" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:comment>
- &lf;
- <xsl:text> </xsl:text>
- <xsl:text>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>
- &lf;
- <xsl:text> </xsl:text>
- <xsl:text>This file is generated from xml source: DO NOT EDIT</xsl:text>
- &lf;
- <xsl:text> </xsl:text>
- <xsl:text>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>
- &lf;
- <xsl:text> </xsl:text>
- </xsl:comment>
- </xsl:otherwise>
- </xsl:choose>&lf;
-
- <title>
- <xsl:choose>
- <xsl:when test="name">
- <xsl:value-of select="name"/>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:value-of select="title"/>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:text> </xsl:text>
- <xsl:value-of select="normalize-space($message[@id='apachetitle'])"/>
- </title>&lf;
-
- <!-- chm files get a slightly different stylesheet -->
- <xsl:choose>
- <xsl:when test="$is-chm">
- <link type="text/css" rel="stylesheet" media="all"
- href="{$path}/style/css/manual-chm.css" />
- </xsl:when>
- <!-- zip packages do also -->
- <xsl:when test="$is-zip">
- <link title="Main stylesheet" type="text/css" media="all"
- rel="stylesheet"
- href="{$path}/style/css/manual-zip.css" />&lf;
- <link title="No Sidebar - Default font size" type="text/css" media="all"
- rel="alternate stylesheet"
- href="{$path}/style/css/manual-zip-100pc.css"/>
- </xsl:when>
- <xsl:otherwise>
- <link title="Main stylesheet" type="text/css" media="all"
- rel="stylesheet"
- href="{$path}/style/css/manual.css" />&lf;
- <link title="No Sidebar - Default font size" type="text/css" media="all"
- rel="alternate stylesheet"
- href="{$path}/style/css/manual-loose-100pc.css"/>
- </xsl:otherwise>
- </xsl:choose>&lf;
-
- <link type="text/css" media="print"
- rel="stylesheet"
- href="{$path}/style/css/manual-print.css"/>
-
- <!-- chm files do not need a favicon -->
- <xsl:if test="not($is-chm or $is-zip)">&lf;
- <link rel="shortcut icon" href="{$path}/images/favicon.ico" />
- </xsl:if>
-</head>
-</xsl:template>
-<!-- /head -->
-
-
-<!-- ==================================================================== -->
-<!-- page top -->
-<!-- ==================================================================== -->
-<xsl:template name="top">
-<div id="page-header">&lf;
- <xsl:call-template name="super-menu" />&lf;
-
- <p class="apache">
- <xsl:value-of select="normalize-space($message
- [@id='apachehttpserver'])"/>
- </p>&lf;
-
- <img src="{$path}/images/feather.gif" alt="" />
-</div>&lf; <!-- /page-header -->
-
-<div class="up">
- <a href="./{$index-file}">
- <xsl:if test="parentdocument">
- <xsl:attribute name="href">
- <xsl:value-of select="parentdocument/@href"/>
- </xsl:attribute>
-
- <xsl:call-template name="helper.uri.fix">
- <xsl:with-param name="uri" select="parentdocument/@href" />
- </xsl:call-template>
- </xsl:if>
-
- <img src="{$path}/images/left.gif" alt="&lt;-" title="&lt;-" />
- </a>
-</div>&lf;
-
-<div id="path">&lf;
- <a href="http://www.apache.org/">
- <xsl:if test="$ext-target">
- <xsl:attribute name="target">_blank</xsl:attribute>
- </xsl:if>
- <xsl:value-of select="$message[@id='apache']" />
- </a>
-
- <xsl:text> &gt; </xsl:text>
-
- <a href="http://httpd.apache.org/">
- <xsl:if test="$ext-target">
- <xsl:attribute name="target">_blank</xsl:attribute>
- </xsl:if>
- <xsl:value-of select="$message[@id='http-server']" />
- </a>
-
- <xsl:text> &gt; </xsl:text>
-
- <a href="http://httpd.apache.org/docs-project/">
- <xsl:if test="$ext-target">
- <xsl:attribute name="target">_blank</xsl:attribute>
- </xsl:if>
- <xsl:value-of select="$message[@id='documentation']" />
- </a>
-
- <xsl:if test="not(../indexpage)">
- <xsl:text> &gt; </xsl:text>
-
- <a href="{$path}/{$index-file}">
- <xsl:value-of select="$message[@id='version']"/>
- </a>
- </xsl:if>
-
- <xsl:if test="../modulesynopsis or ../directiveindex or ../quickreference">
- <xsl:text> &gt; </xsl:text>
-
- <a href="./{$index-file}">
- <xsl:value-of select="$message[@id='modules']"/>
- </a>
- </xsl:if>
-
- <xsl:if test="parentdocument/text()">
- <xsl:text> &gt; </xsl:text>
-
- <a href="{parentdocument/@href}">
- <xsl:call-template name="helper.uri.fix">
- <xsl:with-param name="uri" select="parentdocument/@href"/>
- </xsl:call-template>
- <xsl:value-of select="parentdocument"/>
- </a>
- </xsl:if>
-</div> <!-- /path -->
-</xsl:template>
-<!-- /top -->
-
-
-<!-- ==================================================================== -->
-<!-- out of date -->
-<!-- ==================================================================== -->
-<xsl:template name="outofdate">
-<xsl:if test="$metafile/variants/variant[.=$doclang]/@outdated = 'yes'">
- &lf;
- <div class="outofdate">
- <xsl:value-of select="$message[@id='outofdate']"/>
- </div>
-</xsl:if>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- page bottom -->
-<!-- ==================================================================== -->
-<xsl:template name="bottom">
-<xsl:call-template name="langavail">
- <xsl:with-param name="position" select="'bottom'" />
-</xsl:call-template>
-
-<div id="footer">&lf;
- <p class="apache">
- <xsl:text>Copyright 1999-2004 The Apache Software </xsl:text>
- <xsl:text>Foundation.</xsl:text><br />
- <xsl:value-of select="$message[@id='licensed']"/>
- <xsl:text> </xsl:text>
-
- <a href="http://www.apache.org/licenses/LICENSE-2.0">
- <xsl:if test="$ext-target">
- <xsl:attribute name="target">_blank</xsl:attribute>
- </xsl:if>
- <xsl:text>Apache License, Version 2.0</xsl:text>
- </a>
- <xsl:text>.</xsl:text>
- </p>&lf;
-
- <xsl:call-template name="super-menu"/>
-
-</div> <!-- /footer -->
-</xsl:template>
-<!-- /bottom -->
-
-
-<!-- ==================================================================== -->
-<!-- build an "available languages" section -->
-<!-- ==================================================================== -->
-<xsl:template name="langavail">
-<xsl:param name="position" select="'top'" />
-
-<xsl:if test="not($is-chm or $is-zip)">
-<div class="{$position}lang">&lf;
- <p>
- <span>
- <xsl:value-of select="$message[@id='langavail']" />
- <xsl:text>: </xsl:text>
- </span>
-
- <xsl:for-each select="$metafile/variants/variant">
- <xsl:sort select="." />
-
- <a href="{$path}/{.}{$metafile/path}{$metafile/basename}.html">
- <xsl:if test="$metafile/basename = 'index'">
- <xsl:attribute name="href">
- <xsl:value-of
- select="concat($path, '/', ., $metafile/path)" />
- </xsl:attribute>
- </xsl:if>
- <xsl:if test="$doclang != .">
- <xsl:attribute name="hreflang">
- <xsl:value-of select="." />
- </xsl:attribute>
- <xsl:attribute name="rel">alternate</xsl:attribute>
- </xsl:if>
- <xsl:attribute name="title">
- <xsl:value-of select="document(concat('../lang/', .,
- '.xml'))
- /language/messages/message
- [@id='nativename']" />
- </xsl:attribute>
-
- &nbsp;
- <xsl:value-of select="." />
- &nbsp;
- </a>
- <xsl:if test="position() != last()">
- <xsl:text> |&#xA;</xsl:text>
- </xsl:if>
- </xsl:for-each>
- </p>&lf;
-</div> <!-- /.{$position}lang -->
-</xsl:if>
-
-<xsl:if test="$position = 'top'">
- <xsl:call-template name="outofdate" />
-</xsl:if>
-
-</xsl:template>
-<!-- /langavail -->
-
-
-<!-- ==================================================================== -->
-<!-- Process a documentation section -->
-<!-- ==================================================================== -->
-<xsl:template match="section">
-<xsl:call-template name="toplink" />&lf;
-<div class="section">&lf;
-
- <!-- Section heading -->
- <h2>
- <xsl:choose>
- <xsl:when test="@id">
- <a id="{@id}" name="{@id}">
- <xsl:apply-templates select="title" mode="print" />
- </a>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:apply-templates select="title" mode="print" />
- </xsl:otherwise>
- </xsl:choose>
- </h2>
-
- <!-- Section body -->
- <xsl:apply-templates />
-</div> <!-- /.section -->
-</xsl:template>
-<!-- /section -->
-
-
-<!-- ==================================================================== -->
-<!-- handle subsections (lower level headings) -->
-<!-- ==================================================================== -->
-<xsl:template match="section/section">
-<!-- Section heading -->
-<h3>
- <xsl:choose>
- <xsl:when test="@id">
- <a id="{@id}" name="{@id}">
- <xsl:apply-templates select="title" mode="print" />
- </a>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:apply-templates select="title" mode="print" />
- </xsl:otherwise>
- </xsl:choose>
-</h3>
-
-<!-- Section body -->
-<xsl:apply-templates />
-</xsl:template>
-<!-- /section/section -->
-
-
-<!-- ==================================================================== -->
-<!-- handle subsubsections (h4) -->
-<!-- ==================================================================== -->
-<xsl:template match="section/section/section">
-<!-- Section heading -->
-<h4>
- <xsl:choose>
- <xsl:when test="@id">
- <a id="{@id}" name="{@id}">
- <xsl:apply-templates select="title" mode="print" />
- </a>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:apply-templates select="title" mode="print" />
- </xsl:otherwise>
- </xsl:choose>
-</h4>
-
-<!-- Section body -->
-<xsl:apply-templates/>
-
-</xsl:template>
-<!-- /section/section/section -->
-
-
-<!-- ==================================================================== -->
-<!-- section nesting > h4 is not supported for now -->
-<!-- ==================================================================== -->
-<xsl:template match="section/section/section/section">
-<xsl:message terminate="yes">
- <xsl:text>FATAL: exceeding maximum section nesting level.</xsl:text>
- &lf;&lf;
- <xsl:text>Perhaps you should consider to split your document into</xsl:text>
- &lf;
- <xsl:text>several ones...</xsl:text>
- &lf;
-</xsl:message>
-</xsl:template>
-<!-- /section/section/section/section -->
-
-
-<!-- ==================================================================== -->
-<!-- (sub)section titles -->
-<!-- ==================================================================== -->
-<xsl:template match="section/title" mode="print">
-<xsl:apply-templates/>
-</xsl:template>
-<xsl:template match="section/title" />
-<!-- /section/title -->
-
-
-<!-- ==================================================================== -->
-<!-- generate section index -->
-<!-- ==================================================================== -->
-<xsl:template match="section" mode="index">
-<li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <xsl:choose>
- <xsl:when test="@id">
- <a href="#{@id}">
- <xsl:apply-templates select="title" mode="print" />
- </a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="title" mode="print" />
- </xsl:otherwise>
- </xsl:choose>
-</li>&lf;
-</xsl:template>
-<!-- /section index -->
-
-
-<!-- ==================================================================== -->
-<!-- docs super menu -->
-<!-- ==================================================================== -->
-<xsl:template name="super-menu">
-<p class="menu">
- <a href="{$path}/mod/{$index-file}">
- <xsl:value-of select="$message[@id='modules']" />
- </a>
-
- <xsl:text> | </xsl:text>
-
- <a href="{$path}/mod/directives.html">
- <xsl:value-of select="$message[@id='directives']" />
- </a>
-
- <xsl:text> | </xsl:text>
-
- <a href="{$path}/faq/{$index-file}">
- <xsl:value-of select="$message[@id='faq']" />
- </a>
-
- <xsl:text> | </xsl:text>
-
- <a href="{$path}/glossary.html">
- <xsl:value-of select="$message[@id='glossary']" />
- </a>
-
- <xsl:text> | </xsl:text>
-
- <a href="{$path}/sitemap.html">
- <xsl:value-of select="$message[@id='sitemap']" />
- </a>
-</p>
-</xsl:template>
-<!-- /super-menu -->
-
-
-<!-- ==================================================================== -->
-<!-- <example> -->
-<!-- iterate over *all* nodes; bare text and other inline stuff is -->
-<!-- wrapped into <p><code>, block level elements (defined in -->
-<!-- $blockelements) are applied "as is" -->
-<!-- ==================================================================== -->
-<xsl:variable name="blocks"
- select="concat(' ', normalize-space($blockelements), ' ')" />
-
-<xsl:template match="example">
-<div class="example">
- <xsl:apply-templates select="title" mode="print" />
-
- <xsl:for-each select="./node()">
- <xsl:variable name="is-block-node"
- select="boolean(contains($blocks,
- concat(' ', local-name(), ' ')))"/>
- <!-- bb = (number of) blocks nodes before (the current) -->
- <xsl:variable name="bb"
- select="count(preceding-sibling::*[
- contains($blocks,
- concat(' ', local-name(), ' '))])" />
-
- <xsl:if test="$is-block-node or position()=last()">
- <xsl:variable name="content">
- <!-- phew. short explanation, what happens here: -->
- <!-- We want to get the inline stuff between the last -->
- <!-- block node and the current node. -->
- <!-- So filter all previous nodes for the condition -->
- <!-- that the number of block nodes of all of *their* -->
- <!-- previous nodes is >= $bb. Hope that helps ;-) -->
- <xsl:apply-templates
- select="preceding-sibling::node()[
- count(preceding-sibling::*[
- contains($blocks,
- concat(' ', local-name(), ' '))])
- &gt;= $bb]" />
-
- <xsl:apply-templates
- select="self::node()[not($is-block-node)]" />
- </xsl:variable>
-
- <!-- apply bare text only, if it's not only \s or empty -->
- <xsl:if test="not(normalize-space($content) = '')">
- <p><code>
- <!-- same as $content above. xsl:copy-of seems to make -->
- <!-- thread problems with xalan-j ... -->
- <xsl:apply-templates
- select="preceding-sibling::node()[
- count(preceding-sibling::*[
- contains($blocks,
- concat(' ', local-name(),
- ' '))])
- &gt;= $bb]" />
-
- <xsl:apply-templates
- select="self::node()[not($is-block-node)]" />
- </code></p>
- </xsl:if>
-
- <xsl:apply-templates select="self::node()[$is-block-node]" />
- </xsl:if>
- </xsl:for-each>
- <!-- /node() -->
-</div> <!-- /.example -->
-</xsl:template>
-<!-- /example -->
-
-
-<!-- ==================================================================== -->
-<!-- example/title -->
-<!-- ==================================================================== -->
-<xsl:template match="example/title" mode="print">
-<h3>
- <xsl:apply-templates/>
-</h3>
-</xsl:template>
-<xsl:template match="example/title" />
-<!-- /example/title -->
-
-
-<!-- ==================================================================== -->
-<!-- indentations -->
-<!-- ==================================================================== -->
-<xsl:template match="indent">
-<span class="indent">
- <xsl:apply-templates/>
-</span>
-</xsl:template>
-<!-- /indent -->
-
-
-<!-- ==================================================================== -->
-<!-- <note> -->
-<!-- ==================================================================== -->
-<xsl:template match="note">
-<div class="note">
- <xsl:if test="@type='warning'">
- <xsl:attribute name="class">warning</xsl:attribute>
- </xsl:if>
-
- <xsl:apply-templates/>
-</div>
-</xsl:template>
-<!-- /note -->
-
-
-<!-- ==================================================================== -->
-<!-- <note><title> -->
-<!-- ==================================================================== -->
-<xsl:template match="note/title">
-<h3>
- <xsl:apply-templates/>
-</h3>
-</xsl:template>
-<!-- /note/title -->
-
-
-<!-- ==================================================================== -->
-<!-- <directive> -->
-<!-- Inserts link to another directive, which might be in another module. -->
-<!-- References are converted into lower case. -->
-<!-- ==================================================================== -->
-<xsl:template match="directive" name="directive">
-<code class="directive">
- <xsl:choose>
- <xsl:when test="@module">
- <xsl:variable name="lowerdirective"
- select="translate(., $uppercase, $lowercase)" />
-
- <xsl:choose>
- <xsl:when test="$in-modulesynopsis and @module = /modulesynopsis/name">
- <a href="#{$lowerdirective}">
- <xsl:if test="@type='section'">&lt;</xsl:if>
- <xsl:value-of select="."/>
- <xsl:if test="@type='section'">&gt;</xsl:if>
- </a>
- </xsl:when>
- <xsl:otherwise>
- <a href="{$path}/mod/{@module}.html#{$lowerdirective}">
- <xsl:if test="@type='section'">&lt;</xsl:if>
- <xsl:value-of select="."/>
- <xsl:if test="@type='section'">&gt;</xsl:if>
- </a>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:if test="@type='section'">&lt;</xsl:if>
- <xsl:value-of select="."/>
- <xsl:if test="@type='section'">&gt;</xsl:if>
- </xsl:otherwise>
- </xsl:choose>
-</code>
-</xsl:template>
-<!-- /directive -->
-
-
-<!-- ==================================================================== -->
-<!-- <module> -->
-<!-- Inserts a link to refereed module -->
-<!-- ==================================================================== -->
-<xsl:template match="module" name="module">
-<code class="module">
- <a href="{$path}/mod/{.}.html">
- <xsl:value-of select="."/>
- </a>
-</code>
-</xsl:template>
-<!-- /module -->
-
-
-<!-- ==================================================================== -->
-<!-- <related> -->
-<!-- ==================================================================== -->
-<xsl:template match="related">
-<table class="related">
-<tr>
- <th>
- <xsl:value-of select="$message[@id='relatedmodules']" />
- </th>
- <th>
- <xsl:value-of select="$message[@id='relateddirectives']" />
- </th>
-</tr>
-<tr>
- <td>
- <xsl:if test="count(modulelist/*) &gt; 0">
- <ul>
- <xsl:apply-templates select="modulelist" />
- </ul>
- </xsl:if>
- </td>
- <td>
- <xsl:if test="count(directivelist/*) &gt; 0">
- <ul>
- <xsl:apply-templates select="directivelist"/>
- </ul>
- </xsl:if>
- </td>
-</tr>
-</table>
-</xsl:template>
-<!-- /related -->
-
-<!-- ==================================================================== -->
-<!-- related/modulelist -->
-<!-- ==================================================================== -->
-<xsl:template match="related/modulelist">
-<xsl:for-each select="module">
- <li>
- <xsl:call-template name="module"/>
- </li>
-</xsl:for-each>
-</xsl:template>
-<!-- /related/modulelist -->
-
-
-<!-- ==================================================================== -->
-<!-- related/directivelist -->
-<!-- ==================================================================== -->
-<xsl:template match="related/directivelist">
-<xsl:for-each select="directive">
- <li>
- <xsl:call-template name="directive"/>
- </li>
-</xsl:for-each>
-</xsl:template>
-<!-- /related/directivelist -->
-
-<!-- ==================================================================== -->
-<!-- <table> -->
-<!-- ==================================================================== -->
-<xsl:template match="table">
-<table>
- <!-- existing border attribute will result in <table class="bordered"> -->
- <xsl:if test="@border">
- <xsl:attribute name="class">bordered</xsl:attribute>
- </xsl:if>
-
- <!-- style="zebra": alternating colors per row, i.e. every second row -->
- <!-- gets a class="odd". Header lines (no <td>) get a -->
- <!-- class="header". These lines will be excluded from -->
- <!-- the "odd" line count. That way header lines act -->
- <!-- interjectional, which creates a better visual and -->
- <!-- psychological effect. -->
- <xsl:choose>
- <xsl:when test="@style = 'zebra'">
- <xsl:for-each select="tr">
- <tr>
- <xsl:choose>
- <xsl:when test="count(td) = 0">
- <xsl:attribute name="class">header</xsl:attribute>
- </xsl:when>
-
- <xsl:when
- test="position() mod 2 =
- (count(preceding-sibling::tr[count(td) = 0]) mod 2)">
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:when>
- </xsl:choose>
-
- <xsl:apply-templates />
- </tr>&lf;
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates />
- </xsl:otherwise>
- </xsl:choose>
-</table>
-</xsl:template>
-<!-- /table -->
-
-
-<!-- ==================================================================== -->
-<!-- <ol> -->
-<!-- ==================================================================== -->
-<xsl:template match="ol">
-<ol>
- <!-- A. B. C. D. (list-style-type="upper-alpha") -->
- <xsl:choose>
- <xsl:when test="@type = 'A'">
- <xsl:attribute name="class">up-A</xsl:attribute>
- </xsl:when>
- <xsl:when test="@type = 'a'">
- <xsl:attribute name="class">lo-A</xsl:attribute>
- </xsl:when>
- </xsl:choose>
-
- <xsl:apply-templates/>
-</ol>
-</xsl:template>
-<!-- /ol -->
-
-
-<!-- ==================================================================== -->
-<!-- diverse elements -->
-<!-- Passes through content -->
-<!-- ==================================================================== -->
-<xsl:template match="summary|description|usage|syntax|default">
-<xsl:apply-templates/>
-</xsl:template>
-<!-- /diverse -->
-
-
-<!-- ==================================================================== -->
-<!-- <a> -->
-<!-- ==================================================================== -->
-<xsl:template match="a">
-<xsl:choose>
-<xsl:when test="not(@href)">
- <xsl:copy>
- <xsl:apply-templates select="@*|*|text()"/>
- </xsl:copy>
-</xsl:when>
-<xsl:otherwise>
- <a href="@href">
- <xsl:apply-templates select="@*"/>
- <xsl:call-template name="helper.uri.fix">
- <xsl:with-param name="uri" select="@href"/>
- </xsl:call-template>
-
- <xsl:apply-templates select="*|text()"/>
- </a>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /a -->
-
-
-<!-- ==================================================================== -->
-<!-- toplink -->
-<!-- ==================================================================== -->
-<xsl:template name="toplink">
-<div class="top">
- <a href="#page-header"><img src="{$path}/images/up.gif" alt="top" /></a>
-</div>
-</xsl:template>
-<!-- /toplink -->
-
-
-<!-- ==================================================================== -->
-<!-- <transnote> -->
-<!-- translator's notes are displayed in a different color -->
-<!-- ==================================================================== -->
-<xsl:template match="transnote">
-<span class="transnote">
- <xsl:text>(</xsl:text>
- <em>
- <xsl:value-of select="$message[@id='transnote']" />
- </em>
- <xsl:text> </xsl:text>
- <xsl:apply-templates />
- <xsl:text>)</xsl:text>
-</span>
-</xsl:template>
-<!-- /transnote -->
-
-
-<!-- ==================================================================== -->
-<!-- Filter &#160; in text() nodes. -->
-<!-- In some environments this character won't be transformed correctly, -->
-<!-- so we just write it explicitely as "&nbsp;" into the output. -->
-<!-- ==================================================================== -->
-<xsl:template match="text()" name="filter.nbsp">
-<xsl:param name="text" select="." />
-
-<xsl:choose>
-<xsl:when test="contains($text, '&#160;')">
- <xsl:value-of select="substring-before($text, '&#160;')" />
- &nbsp;
- <xsl:call-template name="filter.nbsp">
- <xsl:with-param name="text" select="substring-after($text, '&#160;')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <xsl:value-of select="$text" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /filter.nbsp -->
-
-
-<!-- ==================================================================== -->
-<!-- Process everything else by just passing it through -->
-<!-- ==================================================================== -->
-<xsl:template match="*">
-<xsl:message terminate="yes">
- <xsl:text>Unknown element: </xsl:text>
- <xsl:value-of select="local-name()" />&lf;
- <xsl:text>Is the document valid (try `build validate-xml`)?</xsl:text>
-</xsl:message>
-</xsl:template>
-<xsl:template match="@*">
-<xsl:copy>
- <xsl:apply-templates select="*|@*|text()" />
-</xsl:copy>
-</xsl:template>
-<xsl:template match="br"><br /></xsl:template>
-<xsl:template match="tr"><tr><xsl:apply-templates select="*|@*|text()" /></tr></xsl:template>
-<xsl:template match="th"><th><xsl:apply-templates select="*|@*|text()" /></th></xsl:template>
-<xsl:template match="td"><td><xsl:apply-templates select="*|@*|text()" /></td></xsl:template>
-<xsl:template match="p"><p><xsl:apply-templates select="*|@*|text()" /></p></xsl:template>
-<xsl:template match="ul"><ul><xsl:apply-templates select="*|@*|text()" /></ul></xsl:template>
-<xsl:template match="li"><li><xsl:apply-templates select="*|@*|text()" /></li></xsl:template>
-<xsl:template match="dl"><dl><xsl:apply-templates select="*|@*|text()" /></dl></xsl:template>
-<xsl:template match="dt"><dt><xsl:apply-templates select="*|@*|text()" /></dt></xsl:template>
-<xsl:template match="dd"><dd><xsl:apply-templates select="*|@*|text()" /></dd></xsl:template>
-<xsl:template match="em"><em><xsl:apply-templates select="*|@*|text()" /></em></xsl:template>
-<xsl:template match="strong"><strong><xsl:apply-templates select="*|@*|text()" /></strong></xsl:template>
-<xsl:template match="pre"><pre><xsl:apply-templates select="*|@*|text()" /></pre></xsl:template>
-<xsl:template match="code"><code><xsl:apply-templates select="*|@*|text()" /></code></xsl:template>
-<xsl:template match="var"><var><xsl:apply-templates select="*|@*|text()" /></var></xsl:template>
-<xsl:template match="dfn"><dfn><xsl:apply-templates select="*|@*|text()" /></dfn></xsl:template>
-<xsl:template match="blockquote"><blockquote><xsl:apply-templates select="*|@*|text()" /></blockquote></xsl:template>
-<xsl:template match="q"><q><xsl:apply-templates select="*|@*|text()" /></q></xsl:template>
-<xsl:template match="cite"><cite><xsl:apply-templates select="*|@*|text()" /></cite></xsl:template>
-<xsl:template match="img"><img><xsl:apply-templates select="*|@*|text()" /></img></xsl:template>
-<!-- /pass through -->
-
-
-<!-- ==================================================================== -->
-<!-- create a letter bar -->
-<!-- ==================================================================== -->
-<xsl:template name="letter-bar">
-<xsl:param name="letters" />
-<xsl:param name="first" />
-
-<xsl:if test="not($first)">
- <xsl:text> | </xsl:text>
-</xsl:if>
-
-<a href="#{substring($letters,1,1)}">
- &nbsp;
- <xsl:value-of select="substring($letters, 1, 1)" />
- &nbsp;
-</a>
-
-<xsl:if test="string-length($letters) &gt; 1">
- <xsl:call-template name="letter-bar">
- <xsl:with-param name="letters" select="substring($letters, 2)" />
- <xsl:with-param name="first" select="false()" />
- </xsl:call-template>
-</xsl:if>
-</xsl:template>
-<!-- /letter-bar -->
-
-
-<!-- ==================================================================== -->
-<!-- template(s) for collecting all start letters of directives -->
-<!-- ==================================================================== -->
-<xsl:template name="directive-startletters">
-<xsl:param name="directives" />
-
-<xsl:call-template name="_squeeze-letters">
- <xsl:with-param name="lastletter" select="''" />
- <xsl:with-param name="letters">
- <xsl:for-each select="$directives">
- <xsl:sort select="name"/>
- <xsl:value-of
- select="translate(substring(normalize-space(name), 1, 1),
- $lowercase, $uppercase)" />
- </xsl:for-each>
- </xsl:with-param>
-</xsl:call-template>
-</xsl:template>
-<!-- /directive-startletters -->
-
-
-<!-- ==================================================================== -->
-<!-- squeeze subsequent letters in a string -->
-<!-- ==================================================================== -->
-<xsl:template name="_squeeze-letters">
-<xsl:param name="letters"/>
-<xsl:param name="lastletter"/>
-
-<xsl:variable name="current" select="substring($letters, 1, 1)" />
-
-<xsl:if test="not($lastletter = $current)">
- <xsl:value-of select="$current" />
-</xsl:if>
-
-<xsl:if test="string-length($letters) &gt; 1">
- <xsl:call-template name="_squeeze-letters">
- <xsl:with-param name="letters" select="substring($letters, 2)" />
- <xsl:with-param name="lastletter" select="$current"/>
- </xsl:call-template>
-</xsl:if>
-</xsl:template>
-<!-- /_squeeze-letters -->
-
-
-<!-- ==================================================================== -->
-<!-- fix href and target attribute of an element. -->
-<!-- ==================================================================== -->
-<xsl:template name="helper.uri.fix">
-<xsl:param name="uri"/>
-
-<xsl:choose>
-<!-- lame is_absolute_uri test -->
-<xsl:when test=" contains($uri, ':')
- and string-length(substring-before($uri, ':')) &lt; 7">
- <xsl:if test="$ext-target">
- <xsl:attribute name="target">_blank</xsl:attribute>
- </xsl:if>
-</xsl:when>
-<xsl:otherwise>
- <xsl:variable name="fragment">
- <xsl:if test="contains($uri, '#')">
- <xsl:value-of select="concat('#', substring-after($uri, '#'))"/>
- </xsl:if>
- </xsl:variable>
- <xsl:variable name="absuri">
- <xsl:choose>
- <xsl:when test="contains($uri, '#')">
- <xsl:value-of select="concat('#', substring-before($uri, '#'))"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$uri"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:if test="substring($absuri, string-length($uri), 1) = '/'">
- <xsl:attribute name="href">
- <xsl:value-of select="concat($absuri, $index-file, $fragment)"/>
- </xsl:attribute>
- </xsl:if>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /helper.uri.fix -->
-
-
-<!-- ==================================================================== -->
-<!-- Ignore table hints used for latex -->
-<!-- ==================================================================== -->
-<xsl:template match="columnspec">
-</xsl:template>
-
-<xsl:template match="column">
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/directiveindex.xsl b/docs/manual/style/xsl/directiveindex.xsl
deleted file mode 100644
index 6ee936a181..0000000000
--- a/docs/manual/style/xsl/directiveindex.xsl
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <directiveindex> -->
-<!-- Builds the directive index page -->
-<!-- ==================================================================== -->
-<xsl:template match="directiveindex">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head"/>&lf;
-
- <body id="directive-index">
- <xsl:call-template name="top"/>
-
- <xsl:variable name="directives"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis[status!='Obsolete']
- /directivesynopsis[not(@location)]" />
-
- <!-- collect the start letters -->
- <xsl:variable name="start-letters">
- <xsl:call-template name="directive-startletters">
- <xsl:with-param name="directives" select="$directives" />
- </xsl:call-template>
- </xsl:variable>
-
- <div id="preamble">
- <h1>
- <xsl:value-of select="title" />
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <xsl:apply-templates select="summary" />&lf;
-
- <!-- letter bar -->
- <p class="letters">
- <xsl:call-template name="letter-bar">
- <xsl:with-param name="letters" select="$start-letters" />
- <xsl:with-param name="first" select="true()" />
- </xsl:call-template>
- </p>&lf; <!-- /.letters -->
- </div>&lf; <!-- /preamble -->
-
- <div id="directive-list">
- <ul>&lf;
- <xsl:call-template name="dindex-of-letter">
- <xsl:with-param name="letters-todo"
- select="$start-letters" />
- <xsl:with-param name="directives" select="$directives" />
- </xsl:call-template>
- </ul>
- </div>&lf; <!-- /#directive-list -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /directiveindex -->
-
-
-<!-- ==================================================================== -->
-<!-- the working horse. builds list items of all directives starting with -->
-<!-- one letter when done, it calls itself to catch the next letter -->
-<!-- ==================================================================== -->
-<xsl:template name="dindex-of-letter">
-<xsl:param name="letters-todo" />
-<xsl:param name="directives" />
-
-<xsl:variable name="letter" select="substring($letters-todo, 1, 1)"/>
-
-<xsl:for-each
- select="$directives
- [$letter = translate(substring(normalize-space(name), 1, 1),
- $lowercase, $uppercase)]">
-<xsl:sort select="name" />
- <li>
- <a href="{../name}.html#{translate(name, $uppercase, $lowercase)}">
- <xsl:if test="position() = 1">
- <xsl:attribute name="id">
- <xsl:value-of select="$letter" />
- </xsl:attribute>
- <xsl:attribute name="name">
- <xsl:value-of select="$letter" />
- </xsl:attribute>
- </xsl:if>
-
- <xsl:if test="@type = 'section'">&lt;</xsl:if>
- <xsl:value-of select="name" />
- <xsl:if test="@type = 'section'">&gt;</xsl:if>
- </a>
- </li>&lf;
-</xsl:for-each>
-
-<!-- call next letter, if there is -->
-<xsl:if test="string-length($letters-todo) &gt; 1">
- <xsl:call-template name="dindex-of-letter">
- <xsl:with-param name="letters-todo"
- select="substring($letters-todo, 2)" />
- <xsl:with-param name="directives" select="$directives" />
- </xsl:call-template>
-</xsl:if>
-
-</xsl:template>
-<!-- /dindex-of-letter -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/faq.xsl b/docs/manual/style/xsl/faq.xsl
deleted file mode 100644
index 0d9f78b11b..0000000000
--- a/docs/manual/style/xsl/faq.xsl
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <faq> -->
-<!-- Process an entire document into an HTML page -->
-<!-- ==================================================================== -->
-<xsl:template match="faq">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head"/>&lf;
-
- <body id="manual-page">
- <!-- unsqueeze if there's no sidebar -->
- <xsl:if test=" not(count(section) > 1
- or (/faq/@all-in-one = 'yes')
- or seealso)">
- <xsl:attribute name="class">no-sidebar</xsl:attribute>
- </xsl:if>
-
- <xsl:call-template name="top" />
-
- <div id="page-content">
- <div id="preamble">
- <h1>
- <xsl:value-of select="title" />
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <xsl:apply-templates select="summary"/>
- </div>&lf; <!-- /#preamble -->
-
- <xsl:if
- test="( not($is-chm)
- and (count(section) > 1 or (/faq/@all-in-one = 'yes')))
- or seealso">
- <div id="quickview">
- <xsl:if test="not($is-chm)">
- <xsl:if test="count(section) > 1">
- <ul id="toc">
- <xsl:apply-templates
- select="section" mode="index" />
- </ul>
- </xsl:if>
-
- <xsl:if test="/faq/@all-in-one = 'yes'">
- <ul id="toc">
- <li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <a href="#topics">
- <xsl:value-of select="$message
- [@id='topics']" />
- </a>
- </li>&lf;
-
- <xsl:apply-templates
- select="categories/categoryfile" mode="toc" />
- </ul>
- </xsl:if>
- </xsl:if> <!-- !$is-chm -->
-
- <xsl:if test="seealso">
- <h3>
- <xsl:value-of
- select="$message[@id='seealso']" />
- </h3>
-
- <ul class="seealso">
- <xsl:for-each select="seealso">
- <li>
- <xsl:apply-templates />
- </li>
- </xsl:for-each>
- </ul>
- </xsl:if>
- </div>&lf; <!-- /#quickview -->
- </xsl:if> <!-- /have sidebar -->
-
- <!-- either one ... -->
- <xsl:apply-templates select="section" />
- <!-- ... or the other is allowed -->
- <xsl:apply-templates select="categories" />
- </div>&lf; <!-- /#page-content -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /faq -->
-
-<!-- ==================================================================== -->
-<!-- <categories> (see categories.xml) -->
-<!-- ==================================================================== -->
-<xsl:template match="categories">
-<xsl:call-template name="toplink" />&lf;
-
-<div class="section">&lf;
-
- <!-- Section heading -->
- <h2>
- <a name="topics" id="topics">
- <xsl:value-of select="$message[@id='topics']" />
- </a>
- </h2>&lf;
-
- <dl>
- <xsl:apply-templates select="categoryfile" mode="index"/>
- </dl>
-</div> <!-- /.section -->
-
-<xsl:if test="/faq/@all-in-one = 'yes'">
- <xsl:apply-templates select="categoryfile" mode="suckin" />
-</xsl:if>
-</xsl:template>
-<!-- /categories -->
-
-<!-- ==================================================================== -->
-<!-- <categoryfile> mode="index" -->
-<!-- just write the short description with a link to the resource -->
-<!-- ==================================================================== -->
-<xsl:template match="categories/categoryfile" mode="index">
-<xsl:variable name="current" select="document(.)/faq" />
-
-<dt>
- <a>
- <xsl:attribute name="href">
- <xsl:choose>
- <xsl:when test="/faq/@all-in-one = 'yes'">
- <xsl:value-of select="concat('#', $current/section/@id)" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat(document($current/@metafile)
- /metafile/basename, '.html')" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
-
- <xsl:value-of select="$current/section/title" />
- </a>
-</dt>
-<dd>
- <xsl:apply-templates select="$current/description" />
-</dd>&lf;
-</xsl:template>
-<!-- /categoryfile, "index" -->
-
-
-<!-- ==================================================================== -->
-<!-- <categoryfile> mode="toc" -->
-<!-- create sidebar links -->
-<!-- ==================================================================== -->
-<xsl:template match="categories/categoryfile" mode="toc">
-<xsl:variable name="current" select="document(.)/faq" />
-
-<li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <a href="#{$current/section/@id}">
- <xsl:value-of select="$current/section/title" />
- </a>
-</li>&lf;
-</xsl:template>
-<!-- /categoryfile, "toc" -->
-
-
-<!-- ==================================================================== -->
-<!-- <categoryfile> mode="suckin" -->
-<!-- load whole file contents (for all-in-one page) -->
-<!-- ==================================================================== -->
-<xsl:template match="categories/categoryfile" mode="suckin">
-<xsl:apply-templates select="document(.)/faq/section" />
-</xsl:template>
-<!-- /categoryfile, "suckin" -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/hhc.xsl b/docs/manual/style/xsl/hhc.xsl
deleted file mode 100644
index ff1b02cef1..0000000000
--- a/docs/manual/style/xsl/hhc.xsl
+++ /dev/null
@@ -1,667 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "../xsl/util/lf.xml">
- <!ENTITY tab SYSTEM "../xsl/util/tab.xml">
-
- <!ENTITY ul.start SYSTEM "../xsl/util/ul-start.xml">
- <!ENTITY ul.end SYSTEM "../xsl/util/ul-end.xml" >
- <!ENTITY li.start SYSTEM "../xsl/util/li-start.xml">
- <!ENTITY li.end SYSTEM "../xsl/util/li-end.xml" >
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="">
-
-<!-- -->
-<!-- WARNING! Do not touch anything, especially the whitespaces [1] -->
-<!-- unless you know, what you're doing. The HTML help compiler parses -->
-<!-- the TOC file not really as html instead of line by line and takes -->
-<!-- care of whitespace indentations etc. -->
-<!-- -->
-<!-- [1] Covered by the &lf; and &tab; entities. -->
-<!-- -->
-<!-- You have been warned. -->
-<!-- -->
-
-<!-- create nodeset for referencing later -->
-<xsl:variable name="not-exists" select="document('')/xsl:stylesheet/xsl:template
- [@name='data']/not-exists/file" />
-
-<xsl:template name="data">
-<!-- documents not converted (yet?). -->
-<not-exists>
-<!-- example: <file>developer/API.xml</file> -->
-</not-exists>
-</xsl:template>
-
-<!-- Constants used for case translation -->
-<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
-<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
-
-<!-- document() works relative to the xsl (!) file -->
-<xsl:variable name="basedir" select="'../../'"/>
-
-<!-- icons -->
-<xsl:variable name="icon.document" select="'11'" />
-<xsl:variable name="icon.document.not-translated" select="'12'" />
-<xsl:variable name="icon.section" select="'35'" />
-<xsl:variable name="icon.directive" select="'41'" />
-<xsl:variable name="icon.commondirective" select="'19'" />
-<!-- this should not happen. this icon is only displayed within the
- toc view of the help workshop (it's a question mark): -->
-<xsl:variable name="icon.no-anchor" select="'9'" />
-
-<!-- for module-translatename -->
-<xsl:include href="../xsl/util/modtrans.xsl"/>
-
-<!-- ==================================================================== -->
-<!-- <sitemap> -->
-<!-- Create CHM contents file (toc) from sitemap -->
-<!-- The file is an html style text file (see warning on top) -->
-<!-- ==================================================================== -->
-<xsl:template match="/sitemap">
-
-<!-- html head -->
-<xsl:text>&lt;html&gt;&lt;head&gt;</xsl:text>
-<xsl:text>&lt;title&gt;Apache HTTP Server Documentation&lt;/title&gt;</xsl:text>
-<xsl:text>&lt;/head&gt;</xsl:text>&lf;
-
-<xsl:text>&lt;body&gt;</xsl:text>&lf;
-
-<!-- toc properties first -->
-<xsl:text>&lt;object type="text/site properties"&gt;</xsl:text>&lf;&tab;
-<!-- XXX: that magic value is still obfuscated. Research needed ... -->
-<xsl:text>&lt;param name="Window Styles" value="0x800027"&gt;</xsl:text>&lf;&tab;
-<xsl:text>&lt;param name="Font" value="</xsl:text>
- <xsl:value-of select="$toc-font" />
-<xsl:text>"&gt;</xsl:text>&lf;
-<xsl:text>&lt;/object&gt;</xsl:text>&lf;
-
-&ul.start; &lf;
-
- <!-- index page on top. -->
- &li.start;
- <xsl:call-template name="object">
- <xsl:with-param name="name"
- select="normalize-space($message[@id='apachehttpserver'])" />
- <xsl:with-param name="href" select="'index.html'" />
- <xsl:with-param name="indent" select="'&#9;&#9;'" />
- </xsl:call-template>
- &li.end; &lf;
-
- <!-- iterate over the categories in document order -->
- <xsl:for-each select="category">
- &li.start;
- <xsl:call-template name="folder">
- <xsl:with-param name="name" select="normalize-space(title)" />
- </xsl:call-template>&lf;&tab;
-
- &ul.start; &lf;&tab;
- <xsl:apply-templates select="page" />
- <xsl:if test="@id = 'modules'">
- <xsl:apply-templates select="document($allmodules)/modulefilelist" />
- </xsl:if>
- &ul.end; &lf;
- &li.end; &lf;&tab;
- </xsl:for-each>&lf;
-
-&ul.end; &lf;
-
-<xsl:text>&lt;/body&gt;&lt;/html&gt;</xsl:text>&lf;
-</xsl:template>
-<!-- /sitemap -->
-
-
-<!-- ==================================================================== -->
-<!-- category/page -->
-<!-- ==================================================================== -->
-<xsl:template match="category/page">
-&li.start;
-
-<!-- document entry, if not href attribute, assume it means "sitemap" -->
-<xsl:call-template name="object">
- <xsl:with-param name="name">
- <xsl:choose>
- <xsl:when test="@href">
- <xsl:value-of select="normalize-space(.)" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="normalize-space($message[@id='sitemap'])" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="href">
- <xsl:choose>
- <xsl:when test="not(@href)">
- <xsl:text>sitemap.html</xsl:text>
- </xsl:when>
- <xsl:when test="contains(@href, '#')">
- <xsl:value-of select="substring-before(@href, '#')" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@href"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="indent" select="'&#9;&#9;'" />
-</xsl:call-template>
-
-<!-- now try to index the sections of the document -->
-<xsl:apply-templates select="self::page" mode="index" />
-
-&li.end; &lf;&tab;
-</xsl:template>
-<!-- /category/page -->
-
-
-<!-- ==================================================================== -->
-<!-- category/page, mode="index" -->
-<!-- display all section headings of one page -->
-<!-- ==================================================================== -->
-<xsl:template match="category/page" mode="index">
-<xsl:variable name="href.offline">
- <xsl:choose>
- <xsl:when test="string-length(@href) = 0">
- <xsl:text>sitemap.html</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="helper.href.offline">
- <xsl:with-param name="href" select="@href" />
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-<xsl:variable name="xml"
- select="concat(substring-before($href.offline, '.html'), '.xml')" />
-
-<xsl:if test="not($xml = $not-exists)">
- <xsl:variable name="xmlfile">
- <xsl:variable name="metafile"
- select="document(document(concat($basedir, $xml))/*/@metafile)
- /metafile" />
- <xsl:choose>
- <xsl:when test="$metafile/variants/variant[.=$doclang] and not
- ($metafile/variants/variant[.=$doclang]
- /@htmlonly = 'yes')">
- <xsl:value-of select="concat($basedir,
- substring-before($xml, '.xml'), $xml-ext)" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat($basedir, $xml)" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="current" select="document($xmlfile)" />
-
- <xsl:if test="count($current/*/*[local-name()='section' or
- local-name()='category']) &gt; 1">
- &lf;&tab;&tab;&tab;
- &ul.start; &lf;&tab;&tab;&tab;
-
- <xsl:for-each select="$current/*/*[local-name()='section' or
- local-name()='category']">
- &li.start;
-
- <xsl:call-template name="object">
- <xsl:with-param name="name" select="normalize-space(title)" />
- <xsl:with-param name="href">
- <xsl:if test="@id">
- <xsl:value-of
- select="concat(substring-before($xml, '.xml'),
- '.html#', @id)" />
- </xsl:if>
- </xsl:with-param>
- <xsl:with-param name="indent" select="'&#9;&#9;&#9;&#9;'" />
- </xsl:call-template>
-
- &li.end; &lf;&tab;&tab;
- </xsl:for-each>
-
- &ul.end; &lf;&tab;
- </xsl:if> <!-- count() > 1 -->
-</xsl:if> <!-- xml exists -->
-</xsl:template>
-<!-- /category/page, "index" -->
-
-
-<!-- ==================================================================== -->
-<!-- category/modulefilelist -->
-<!-- process all listed module files -->
-<!-- ==================================================================== -->
-<xsl:template match="modulefilelist">
-<!-- create a module name translation list for sorting -->
-<xsl:variable name="translist">
- <xsl:text>-</xsl:text>
-
- <xsl:for-each select="modulefile">
- <xsl:variable name="current"
- select="document(concat($basedir,'mod/',.))/modulesynopsis" />
-
- <xsl:text> </xsl:text>
- <xsl:value-of select="$current/name"/>
- <xsl:text> </xsl:text>
- <xsl:call-template name="module-translatename">
- <xsl:with-param name="name" select="$current/name"/>
- </xsl:call-template>
- <xsl:text> -</xsl:text>
- </xsl:for-each>
-</xsl:variable>
-
-<!-- put core and mpm_common on top -->
-<xsl:call-template name="toc-entry.mpm">
- <xsl:with-param name="current"
- select="document(concat($basedir, 'mod/', modulefile[starts-with(.,
- 'core.xml')]/text()))/modulesynopsis" />
- <xsl:with-param name="name" select="'core'" />
-</xsl:call-template>
-
-<xsl:call-template name="toc-entry.mpm">
- <xsl:with-param name="current"
- select="document(concat($basedir, 'mod/', modulefile[starts-with(.,
- 'mpm_common.xml')]/text()))/modulesynopsis" />
- <xsl:with-param name="name" select="'common'" />
-</xsl:call-template>
-
-<!-- remaining MPMs -->
-<xsl:for-each select="modulefile">
-<xsl:sort select="substring-before(substring-after($translist, concat('- ',
- document(concat($basedir, 'mod/', .))/modulesynopsis/name, ' ')), ' -')" />
-
- <xsl:variable name="current"
- select="document(concat($basedir, 'mod/', .))/modulesynopsis" />
-
- <xsl:if test="$current/status='MPM' and not($current/name='mpm_common')">
- <xsl:call-template name="toc-entry.mpm">
- <xsl:with-param name="current" select="$current" />
- <xsl:with-param name="name" select="substring-before(
- substring-after($translist, concat('- ', $current/name, ' ')),
- ' -')" />
- </xsl:call-template>
- </xsl:if>
-</xsl:for-each>
-
-<!-- normal modules -->
-<xsl:for-each select="modulefile">
-<xsl:sort select="substring-before(substring-after($translist, concat('- ',
- document(concat($basedir, 'mod/', .))/modulesynopsis/name, ' ')), ' -')" />
-
- <xsl:variable name="current"
- select="document(concat($basedir, 'mod/', .))/modulesynopsis" />
-
- <xsl:if test="not($current/status='MPM') and not($current/status='Core')">
- <xsl:call-template name="toc-entry.module">
- <xsl:with-param name="current" select="$current"/>
- </xsl:call-template>
- </xsl:if>
-</xsl:for-each>
-</xsl:template>
-<!-- /category/modulefilelist -->
-
-
-<!-- ==================================================================== -->
-<!-- toc-entry.mpm -->
-<!-- create entry (and initiate subsection entries) of an mpm -->
-<!-- ==================================================================== -->
-<xsl:template name="toc-entry.mpm">
-<xsl:param name="current" />
-<xsl:param name="name" />
-
-&li.start;
-
-<xsl:call-template name="object">
- <xsl:with-param name="name">
- <xsl:choose>
- <xsl:when test="$name='core'">
- <xsl:value-of select="normalize-space($message[@id='apachecore'])" />
- </xsl:when>
- <xsl:when test="$name='common'">
- <xsl:value-of select="normalize-space($message[@id='apachempmcommon'])" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="normalize-space($message[@id='apachempm'])" />
- <xsl:text> </xsl:text>
- <xsl:value-of select="$name" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="href"
- select="concat('mod/', $current/name, '.html')" />
- <xsl:with-param name="indent" select="'&#9;&#9;&#9;'" />
-</xsl:call-template>
-
-<xsl:call-template name="sections-and-directives">
- <xsl:with-param name="current" select="$current" />
-</xsl:call-template>
-
-&li.end; &lf;&tab;
-</xsl:template>
-<!-- /toc-entry.mpm -->
-
-
-<!-- ==================================================================== -->
-<!-- toc-entry.module -->
-<!-- create entry (and initiate subsection entries) of a module -->
-<!-- ==================================================================== -->
-<xsl:template name="toc-entry.module">
-<xsl:param name="current"/>
-
-&li.start;
-
-<xsl:call-template name="object">
- <xsl:with-param name="name">
- <xsl:value-of select="normalize-space($message[@id='apachemodule'])" />
- <xsl:text> </xsl:text>
- <xsl:value-of select="$current/name" />
- </xsl:with-param>
- <xsl:with-param name="href"
- select="concat('mod/', $current/name, '.html')" />
- <xsl:with-param name="indent" select="'&#9;&#9;&#9;'" />
-</xsl:call-template>
-
-<xsl:call-template name="sections-and-directives">
- <xsl:with-param name="current" select="$current" />
-</xsl:call-template>
-
-&li.end; &lf;&tab;
-</xsl:template>
-<!-- /toc-entry.module -->
-
-
-<!-- ==================================================================== -->
-<!-- sections-and-directives -->
-<!-- process sections and directives of a module file -->
-<!-- ==================================================================== -->
-<xsl:template name="sections-and-directives">
-<xsl:param name="current" />
-
-<xsl:if test="count($current/section) &gt; 0 or
- count($current/directivesynopsis) &gt; 0">
- &lf;&tab;&tab;
-
- &ul.start; &lf;&tab;&tab;
-
- <!-- sections -->
- <xsl:for-each select="$current/section">
- &li.start;
-
- <xsl:call-template name="object">
- <xsl:with-param name="name" select="normalize-space(title)" />
- <xsl:with-param name="href">
- <xsl:if test="@id">
- <xsl:value-of
- select="concat('mod/', $current/name, '.html#', @id)" />
- </xsl:if>
- </xsl:with-param>
- <xsl:with-param name="indent" select="'&#9;&#9;&#9;&#9;'" />
- </xsl:call-template>
-
- &li.end; &lf;&tab;&tab;
- </xsl:for-each>
-
- <!-- directives within the current document -->
- <xsl:for-each select="$current/directivesynopsis[not(@location)]">
- <xsl:sort select="name" />
- &li.start;
-
- <xsl:call-template name="object">
- <xsl:with-param name="name">
- <xsl:if test="@type='section'">&lt;</xsl:if>
- <xsl:value-of select="name"/>
- <xsl:if test="@type='section'">&gt;</xsl:if>
- <xsl:choose>
- <xsl:when test="$message[@id='directive']
- /@replace-space-with">
- <xsl:value-of select="$message[@id='directive']
- /@replace-space-with" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:text> </xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="normalize-space($message[@id='directive'])" />
- </xsl:with-param>
- <xsl:with-param name="href"
- select="concat('mod/', $current/name, '.html#',
- translate(name, $uppercase, $lowercase))" />
- <xsl:with-param name="indent" select="'&#9;&#9;&#9;&#9;'" />
- <xsl:with-param name="icon" select="$icon.directive" />
- </xsl:call-template>
-
- &li.end; &lf;&tab;&tab;
- </xsl:for-each>
-
- <!-- directives described elsewhere -->
- <xsl:for-each select="$current/directivesynopsis[@location]">
- <xsl:sort select="name" />
- &li.start;
-
- <xsl:call-template name="object">
- <xsl:with-param name="name">
- <xsl:if test="@type='section'">&lt;</xsl:if>
- <xsl:value-of select="name"/>
- <xsl:if test="@type='section'">&gt;</xsl:if>
- <xsl:choose>
- <xsl:when test="$message[@id='directive']
- /@replace-space-with">
- <xsl:value-of select="$message[@id='directive']
- /@replace-space-with" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:text> </xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="normalize-space($message[@id='directive'])" />
- </xsl:with-param>
- <xsl:with-param name="href"
- select="concat('mod/', @location, '.html#',
- translate(name, $uppercase, $lowercase))" />
- <xsl:with-param name="indent" select="'&#9;&#9;&#9;&#9;'" />
- <xsl:with-param name="icon" select="$icon.commondirective" />
- </xsl:call-template>
-
- &li.end; &lf;&tab;&tab;
- </xsl:for-each>
-
- &ul.end; &lf;&tab;
-</xsl:if> <!-- sections or directives present -->
-</xsl:template>
-<!-- /sections-and-directives -->
-
-
-<!-- ==================================================================== -->
-<!-- object -->
-<!-- display an <object> and do some magic to select the right content -->
-<!-- ==================================================================== -->
-<xsl:template name="object">
-<xsl:param name="name" select="'? unknown ?'" />
-<xsl:param name="href" />
-<xsl:param name="icon" select="$icon.section" />
-<xsl:param name="indent" />
-
-<xsl:variable name="href.offline">
- <xsl:call-template name="helper.href.offline">
- <xsl:with-param name="href" select="$href" />
- </xsl:call-template>
-</xsl:variable>
-
-<!-- xml file is expected to have the same basename -->
-<xsl:variable name="xml"
- select="concat(substring-before($href.offline, '.html'), '.xml')" />
-
-<xsl:text>&lt;object type="text/sitemap"&gt;</xsl:text>&lf;
-<xsl:value-of select="$indent" />
-
-<xsl:text>&lt;param name="Name" value="</xsl:text>
- <xsl:call-template name="filter.attval">
- <xsl:with-param name="text" select="$name" />
- </xsl:call-template>
-<xsl:text>"&gt;</xsl:text>&lf;
-<xsl:value-of select="$indent" />
-
-<xsl:if test="string-length($href.offline) &gt; 0">
- <xsl:text>&lt;param name="Local" value="</xsl:text>
- <xsl:call-template name="filter.attval">
- <xsl:with-param name="text" select="$href.offline" />
- </xsl:call-template>
- <xsl:text>"&gt;</xsl:text>&lf;
- <xsl:value-of select="$indent" />
-</xsl:if>
-
-<xsl:text>&lt;param name="ImageNumber" value="</xsl:text>
- <xsl:choose>
- <xsl:when test="string-length($href.offline) &gt; 0">
- <xsl:choose>
- <xsl:when test="contains($href, '#')">
- <xsl:value-of select="$icon" />
- </xsl:when>
- <xsl:when test="$doclang='en' or
- (not($xml = $not-exists) and
- (document(document(concat($basedir, $xml))
- /*/@metafile)
- /metafile/variants/variant
- [.=$doclang and not(@htmlonly='yes')]))">
- <xsl:value-of select="$icon.document" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$icon.document.not-translated" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$icon.no-anchor" />
- </xsl:otherwise>
- </xsl:choose>
-<xsl:text>"&gt;</xsl:text>&lf;
-<xsl:value-of select="substring($indent, 2)" />
-
-<xsl:text>&lt;/object&gt;</xsl:text>
-</xsl:template>
-<!-- /object -->
-
-
-<!-- ==================================================================== -->
-<!-- folder -->
-<!-- ==================================================================== -->
-<xsl:template name="folder">
-<xsl:param name="name" select="'? unknown ?'" />
-
-<xsl:text>&lt;object type="text/sitemap"&gt;</xsl:text>&lf;&tab;&tab;
-<xsl:text>&lt;param name="Name" value="</xsl:text>
- <xsl:call-template name="filter.attval">
- <xsl:with-param name="text" select="$name" />
- </xsl:call-template>
-<xsl:text>"&gt;</xsl:text>&lf;&tab;
-<xsl:text>&lt;/object&gt;</xsl:text>
-</xsl:template>
-<!-- /folder -->
-
-
-<!-- ==================================================================== -->
-<!-- helper.href.offline -->
-<!-- change uri reference to work offline (/ -> /index.html) -->
-<!-- ==================================================================== -->
-<xsl:template name="helper.href.offline">
-<xsl:param name="href" />
-
-<xsl:choose>
-<xsl:when test="string-length($href) = 0" />
-<xsl:when test="contains($href, '#') and '/' = substring($href,
- string-length(substring-before($href, '#')), 1)">
- <xsl:value-of select="substring-before($href, '#')" />
- <xsl:text>index.html#</xsl:text>
- <xsl:value-of select="substring-after($href, '#')" />
-</xsl:when>
-<xsl:when test="substring($href, string-length($href), 1) = '/'">
- <xsl:value-of select="$href" />
- <xsl:text>index.html</xsl:text>
-</xsl:when>
-<xsl:otherwise>
- <xsl:value-of select="$href" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /helper.href.offline -->
-
-
-<!-- ==================================================================== -->
-<!-- filter.attval -->
-<!-- escape special characters for being valid within an attribute -->
-<!-- ==================================================================== -->
-<xsl:template name="filter.attval">
-<xsl:param name="text" />
-
-<xsl:choose>
-<xsl:when test="contains($text, '&amp;')">
- <xsl:call-template name="filter.attval.special">
- <xsl:with-param name="text" select="substring-before($text, '&amp;')" />
- </xsl:call-template>
- <xsl:text>&amp;amp;</xsl:text>
- <xsl:call-template name="filter.attval">
- <xsl:with-param name="text" select="substring-after($text, '&amp;')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <xsl:call-template name="filter.attval.special">
- <xsl:with-param name="text" select="$text" />
- </xsl:call-template>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /filter.attval -->
-
-
-<!-- ==================================================================== -->
-<!-- filter.attval.special -->
-<!-- accompanying template of filter.attval -->
-<!-- ==================================================================== -->
-<xsl:template name="filter.attval.special">
-<xsl:param name="text" />
-
-<xsl:choose>
-<xsl:when test="contains($text, '&lt;')">
- <xsl:value-of select="substring-before($text, '&lt;')" />
- <xsl:text>&amp;lt;</xsl:text>
- <xsl:call-template name="filter.attval.special">
- <xsl:with-param name="text" select="substring-after($text, '&lt;')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:when test="contains($text, '&gt;')">
- <xsl:value-of select="substring-before($text, '&gt;')" />
- <xsl:text>&amp;gt;</xsl:text>
- <xsl:call-template name="filter.attval.special">
- <xsl:with-param name="text" select="substring-after($text, '&gt;')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:when test="contains($text, '&quot;')">
- <xsl:value-of select="substring-before($text, '&quot;')" />
- <xsl:text>&amp;quot;</xsl:text>
- <xsl:call-template name="filter.attval.special">
- <xsl:with-param name="text" select="substring-after($text, '&quot;')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <xsl:value-of select="$text" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /filter.attval.special -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/hhp.xsl b/docs/manual/style/xsl/hhp.xsl
deleted file mode 100644
index 4560cb6769..0000000000
--- a/docs/manual/style/xsl/hhp.xsl
+++ /dev/null
@@ -1,315 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "../xsl/util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="">
-
-<!-- the accompanying server version -->
-<xsl:param name="httpd.version" select="'generic'" />
-
-<!-- create nodeset for referencing later -->
-<xsl:variable name="htmlhelp.def" select="document('')/xsl:stylesheet
- /xsl:template[@name='htmlhelp.def']" />
-
-<!-- ==================================================================== -->
-<!-- <sitemap> -->
-<!-- Create CHM project file from sitemap -->
-<!-- The file is an *.ini format text file -->
-<!-- ==================================================================== -->
-<xsl:template match="/sitemap">
-
-<!-- static information -->
-<!-- **************************************************************** -->
-<xsl:text>[OPTIONS]</xsl:text>&lf;
-<xsl:text>Binary TOC=No</xsl:text>&lf;
-<xsl:text>Compatibility=1.0</xsl:text>&lf;
-
-<!-- resulting filename -->
-<xsl:text>Compiled file=httpd-docs-</xsl:text>
-<xsl:value-of select="$httpd.version" />
-<xsl:text>.</xsl:text>
-<xsl:value-of select="$doclang" />
-<xsl:text>.chm</xsl:text>&lf;
-
-<xsl:text>Contents file=toc.hhc</xsl:text>&lf;
-<xsl:text>Default Window=Main</xsl:text>&lf;
-<xsl:text>Default topic=index.html</xsl:text>&lf;
-
-<!-- compiler related -->
-<xsl:text>Display compile progress=Yes</xsl:text>&lf;
-<xsl:text>Enhanced decompilation=Yes</xsl:text>&lf;
-
-<!-- search related -->
-<xsl:text>Full-text search=Yes</xsl:text>&lf;
-<xsl:text>Language=</xsl:text>
-<xsl:value-of select="$hhp-lang" />&lf;
-
-<!-- title of the help file -->
-<xsl:text>Title=</xsl:text>
-<xsl:value-of select="normalize-space($message[@id='apachehttpserver'])"/>&lf;&lf;
-
-<!-- main window definition -->
-<xsl:text>[WINDOWS]</xsl:text>&lf;
-<xsl:text>Main=</xsl:text>
-
-<!-- title -->
-<xsl:text>"</xsl:text>
-<xsl:value-of select="normalize-space($message[@id='apachehttpserver'])"/>
-<xsl:text>",</xsl:text>
-
-<!-- toc file -->
-<xsl:text>"toc.hhc",</xsl:text>
-
-<!-- index file (currently none) -->
-<xsl:text>,</xsl:text>
-
-<!-- default file (startup) -->
-<xsl:text>"index.html",</xsl:text>
-
-<!-- Home button file -->
-<xsl:text>"index.html",</xsl:text>
-
-<!-- Jump 1 url, text -->
-<xsl:text>,,</xsl:text>
-
-<!-- Jump 2 url, text -->
-<xsl:text>,,</xsl:text>
-
-<!-- navigation pane style (0x1e357e) -->
-<xsl:call-template name="helper.number2hex">
- <xsl:with-param name="number" select="sum($htmlhelp.def/navigation/style
- [@selected='yes'])" />
-</xsl:call-template>
-<xsl:text>,</xsl:text>
-
-<!-- navigation pane initial width (px) -->
-<xsl:text>180,</xsl:text>
-
-<!-- button mask -->
-<xsl:call-template name="helper.number2hex">
- <xsl:with-param name="number" select="sum($htmlhelp.def/buttons/button
- [@visible='yes'])" />
-</xsl:call-template>
-<xsl:text>,</xsl:text>
-
-<!-- Initial Position [Left, Top, Right, Bottom] -->
-<xsl:text>[0,0,600,380],</xsl:text>
-
-<!-- window style -->
-<xsl:call-template name="helper.number2hex">
- <xsl:with-param name="result" select="'0000'" /> <!-- << 16 -->
- <xsl:with-param name="number" select="sum($htmlhelp.def/windowstyle/style
- [@selected='yes'])" />
-</xsl:call-template>
-<xsl:text>,</xsl:text>
-
-<!-- extended style -->
-<xsl:text>,</xsl:text>
-
-<!-- flag: navigation pane initial closed (=1) -->
-<xsl:text>,</xsl:text>
-
-<!-- unknown, default pane, unknown, unknown -->
-<xsl:text>,,,0</xsl:text>&lf;&lf;
-
-<!-- file list -->
-<!-- **************************************************************** -->
-<xsl:text>[FILES]</xsl:text>&lf;
-
-<!-- not automatically sucked in. (because only @import()ed) -->
-<xsl:text>style\css\manual.css</xsl:text>&lf;
-<xsl:text>style\css\manual-loose-100pc.css</xsl:text>&lf;
-
-<!-- include project file itself for easier recompiling -->
-<xsl:text>manual.hhp</xsl:text>&lf;
-
-<!-- and now all sitemap-listed files -->
-<xsl:for-each select="category">
- <xsl:apply-templates select="page[@href]" />
- <xsl:if test="@id = 'modules'">
- <xsl:apply-templates select="document($allmodules)/modulefilelist
- /modulefile" />
- </xsl:if>
-</xsl:for-each>&lf;
-</xsl:template>
-<!-- /sitemap -->
-
-
-<!-- ==================================================================== -->
-<!-- files referenced in sitemap -->
-<!-- ==================================================================== -->
-<xsl:template match="category/page">
-<xsl:variable name="filename">
- <xsl:choose>
- <xsl:when test="contains(@href, '#') and substring(@href,
- string-length(substring-before(@href, '#')), 1) = '/'">
- <xsl:value-of select="substring-before(@href, '#')" />
- <xsl:text>index.html</xsl:text>
- </xsl:when>
- <xsl:when test="substring(@href, string-length(@href), 1) = '/'">
- <xsl:value-of select="@href"/>
- <xsl:text>index.html</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@href"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:value-of select="translate($filename, '/', '\')" />&lf;
-</xsl:template>
-<!-- /page[@href] -->
-
-
-<!-- ==================================================================== -->
-<!-- list module files -->
-<!-- ==================================================================== -->
-<xsl:template match="modulefilelist/modulefile">
-<xsl:text>mod\</xsl:text>
-<xsl:value-of select="substring-before(normalize-space(.), '.xml')" />
-<xsl:text>.html</xsl:text>&lf;
-</xsl:template>
-<!-- /modulefilelist/modulefile -->
-
-
-<!-- ==================================================================== -->
-<!-- convert number to its hexadecimal representation. -->
-<!-- I could not find a built-in function, so write our own ... *sigh* -->
-<!-- ==================================================================== -->
-<xsl:template name="helper.number2hex">
-<xsl:param name="number" />
-<xsl:param name="result" />
-
-<xsl:choose>
-<xsl:when test="number($number) &gt; 0">
- <xsl:call-template name="helper.number2hex">
- <xsl:with-param name="number" select="floor(number($number) div 16)" />
- <xsl:with-param name="result"
- select="concat(substring('0123456789abcdef',
- (number($number) mod 16) + 1, 1),
- $result)" />
- </xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <!-- if zero, don't print anything. hh.exe (the viewer) seems to -->
- <!-- prefer an empty value -->
- <xsl:if test="string-length(translate($result, '0', '')) &gt; 0">
- <xsl:text>0x</xsl:text>
- <xsl:value-of select="$result" />
- </xsl:if>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /helper.number2hex -->
-
-
-<!-- ==================================================================== -->
-<!-- some of the values are derived from htmlhelp.h -->
-<!-- do NOT call this template, it's referenced automagically via -->
-<!-- document() function and acts as simple data container. -->
-<!-- -->
-<!-- Hints: 'ni' means 'not implemented' (by the help viewer) -->
-<!-- 'ns' means 'not useful for standalone help file' -->
-<!-- ==================================================================== -->
-<xsl:template name="htmlhelp.def">
-<navigation>
- <style > 1</style> <!-- auto hide nav. pane << 0 -->
- <style > 2</style> <!-- ns: topmost window << 1 -->
- <style > 4</style> <!-- ns: no title bar << 2 -->
- <style > 8</style> <!-- ns: no win. style << 3 -->
- <style > 16</style> <!-- ns: no ext. style << 4 -->
- <style selected="yes"> 32</style> <!-- use tri-pane win. << 5 -->
- <style > 64</style> <!-- no toolbar text << 6 -->
- <style > 128</style> <!-- ns: send WM_QUIT << 7 -->
- <style selected="yes"> 256</style> <!-- toc auto sync << 8 -->
- <style > 512</style> <!-- ns: send track. not. << 9 -->
- <style selected="yes"> 1024</style> <!-- search tab << 10 -->
- <style > 2048</style> <!-- ni(?): history tab << 11 -->
- <style selected="yes"> 4096</style> <!-- favorites tab << 12 -->
- <style > 8192</style> <!-- ni(?): title sync << 13 -->
- <style > 16384</style> <!-- nav. only << 14 -->
- <style > 32768</style> <!-- no toolbar << 15 -->
- <style selected="yes"> 65536</style> <!-- show menu << 16 -->
- <style selected="yes"> 131072</style> <!-- advanced search << 17 -->
- <style selected="yes"> 262144</style> <!-- safe user's win. size << 18 -->
- <style > 524288</style> <!-- custom tab 1 << 19 -->
- <style > 1048576</style> <!-- custom tab 2 << 20 -->
- <style > 2097152</style> <!-- custom tab 3 << 21 -->
- <style > 4194304</style> <!-- custom tab 4 << 22 -->
- <style > 8388608</style> <!-- custom tab 5 << 23 -->
- <style > 16777216</style> <!-- custom tab 6 << 24 -->
- <style > 33554432</style> <!-- custom tab 7 << 25 -->
- <style > 67108864</style> <!-- custom tab 8 << 26 -->
- <style >134217728</style> <!-- custom tab 9 << 27 -->
- <style >268435456</style> <!-- window has margin (?) << 28 -->
-</navigation>
-
-<buttons>
- <button visible="yes"> 2</button> <!-- expand/contract << 1 -->
- <button visible="yes"> 4</button> <!-- back << 2 -->
- <button visible="yes"> 8</button> <!-- forward << 3 -->
- <button visible="yes"> 16</button> <!-- Stop << 4 -->
- <button > 32</button> <!-- Refresh << 5 -->
- <button visible="yes"> 64</button> <!-- Home << 6 -->
- <button > 128</button> <!-- ni: browse fwd << 7 -->
- <button > 256</button> <!-- ni: browse back << 8 -->
- <button > 512</button> <!-- ni: notes << 9 -->
- <button > 1024</button> <!-- ni: contents << 10 -->
- <button visible="yes"> 2048</button> <!-- Sync TOC << 11 -->
- <button visible="yes"> 4096</button> <!-- Options << 12 -->
- <button visible="yes"> 8192</button> <!-- Print << 13 -->
- <button > 16384</button> <!-- ni: index << 14 -->
- <button > 32768</button> <!-- ni: search << 15 -->
- <button > 65536</button> <!-- ni: history << 16 -->
- <button > 131072</button> <!-- ni: favorites << 17 -->
- <button > 262144</button> <!-- Jump 1 << 18 -->
- <button > 524288</button> <!-- Jump 2 << 19 -->
- <button visible="yes">1048576</button> <!-- (Font) Zoom << 20 -->
- <!-- the following work only with binary toc, which unfortunately -->
- <!-- seems to eat the different icons ... -->
- <button >2097152</button> <!-- TOC next << 21 -->
- <button >4194304</button> <!-- TOC prev << 22 -->
-</buttons>
-
-<windowstyle>
- <!-- all the stuff is additionally shifted << 16 (by the caller) -->
- <style selected="yes"> 1</style> <!-- maximize box << 0 -->
- <style selected="yes"> 2</style> <!-- minimize box << 1 -->
- <style selected="yes"> 4</style> <!-- thick frame << 2 -->
- <style selected="yes"> 8</style> <!-- system menu << 3 -->
- <style > 16</style> <!-- horiz. scroll << 4 -->
- <style > 32</style> <!-- vertic. scroll << 5 -->
- <style selected="yes"> 64</style> <!-- dialog frame << 6 -->
- <style selected="yes"> 128</style> <!-- border << 7 -->
- <style selected="yes"> 256</style> <!-- maximize << 8 -->
- <style > 512</style> <!-- clip child win. << 9 -->
- <style > 1024</style> <!-- clip sibl. win. << 10 -->
- <style > 2048</style> <!-- disabled << 11 -->
- <style selected="yes"> 4096</style> <!-- visible << 12 -->
- <style selected="yes"> 8192</style> <!-- minimize << 13 -->
- <style >16384</style> <!-- child window << 14 -->
- <style >32768</style> <!-- pop-up << 15 -->
-</windowstyle>
-</xsl:template>
-<!-- /htmlhelp.def -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/indexpage.xsl b/docs/manual/style/xsl/indexpage.xsl
deleted file mode 100644
index 69aae60947..0000000000
--- a/docs/manual/style/xsl/indexpage.xsl
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- -->
-<!-- three columns, select were the particular categories shall be -->
-<!-- placed in. (order is irrelevant, they're placed in document order) -->
-<!-- -->
-<xsl:variable name="indexpage-column1" select="'
- release
- manual
-'"/>
-
-<xsl:variable name="indexpage-column2" select="'
- usersguide
-'"/>
-
-<xsl:variable name="indexpage-column3" select="'
- howto
- platform
- other
-'"/>
-
-<!-- ==================================================================== -->
-<!-- <indexpage> -->
-<!-- Process an entire document into an HTML page -->
-<!-- ==================================================================== -->
-<xsl:template match="/indexpage">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head"/>&lf;
-
- <body id="index-page">&lf;
- <xsl:call-template name="top"/>&lf;
-
- <div id="page-content">
- <h1>
- <xsl:value-of select="title"/>
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <form>
- <xsl:call-template name="search.spec" />
- </form>&lf;
-
- <table id="indextable">
- <tr>
- <td class="col1">
- <xsl:apply-templates
- select="category[contains($indexpage-column1, @id)]" />
- </td>
- <td>
- <xsl:apply-templates
- select="category[contains($indexpage-column2, @id)]" />
- </td>
- <td class="col3">
- <xsl:apply-templates
- select="category[contains($indexpage-column3, @id)]" />
- </td>
- </tr>
- </table>
- </div>&lf; <!-- /#page-content -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /indexpage -->
-
-
-<!-- ==================================================================== -->
-<!-- category/page -->
-<!-- ==================================================================== -->
-<xsl:template match="indexpage/category/page">
-<li>
- <xsl:if test="@separate='yes'">
- <xsl:attribute name="class">separate</xsl:attribute>
- </xsl:if>
-
- <xsl:choose>
- <xsl:when test="@href">
- <a href="{@href}">
- <xsl:call-template name="helper.uri.fix">
- <xsl:with-param name="uri" select="@href"/>
- </xsl:call-template>
-
- <xsl:value-of select="." />
- </a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="." />
- </xsl:otherwise>
- </xsl:choose>
-</li>&lf;
-</xsl:template>
-<!-- /category/page -->
-
-
-<!-- ==================================================================== -->
-<!-- Process a indexpage category -->
-<!-- ==================================================================== -->
-<xsl:template match="indexpage/category">
-<div class="category">
- <!-- Section heading -->
- <h2>
- <xsl:if test="@id">
- <a id="{@id}" name="{@id}">
- <xsl:apply-templates select="title" mode="print" />
- </a>
- </xsl:if>
-
- <xsl:if test="not(@id)">
- <xsl:apply-templates select="title" mode="print" />
- </xsl:if>
- </h2>&lf;
-
- <!-- category body -->
- <ul>
- <xsl:apply-templates select="page" />
- </ul>&lf;
-</div> <!-- /.section -->
-</xsl:template>
-<!-- /category -->
-
-
-<!-- ==================================================================== -->
-<!-- search specification -->
-<!-- hidden fields are taken from the advanced search page -->
-<!-- ==================================================================== -->
-<xsl:template name="search.spec">
-<xsl:attribute name="method">get</xsl:attribute>
-<xsl:attribute name="action">http://www.google.com/search</xsl:attribute>
-<xsl:if test="$ext-target">
- <xsl:attribute name="target">_blank</xsl:attribute>
-</xsl:if>
-
-<p>
- <!-- search google: -->
- <!-- with all of the words -->
- <input type="text" value="" name="as_q" />
- <xsl:text> </xsl:text>
- <input type="submit" value="{$message[@id='search']}" />
-
- <!-- the specified number of results -->
- <input type="hidden" name="num" value="10" />
-
- <!-- the current displayed language -->
- <input type="hidden" name="hl" value="{$doclang}" />
-
- <!-- the current document encoding for input (?) -->
- <input type="hidden" name="ie" value="{$output-encoding}" />
-
- <!-- (submit the original button and name) -->
- <input type="hidden" name="btnG" value="Google Search" />
-
- <!-- including the exact phrase "Apache 2.1" -->
- <input type="hidden" value="Apache 2.1" name="as_epq" />
-
- <!-- with at least one of the words (none) -->
- <input type="hidden" value="" name="as_oq" />
-
- <!-- without the phrase "List-Post" (to exclude the mail archives) -->
- <input type="hidden" value="&quot;List-Post&quot;" name="as_eq" />
-
- <!-- return results written in (any) language -->
- <input type="hidden" name="lr" value="" />
-
- <!-- and any format -->
- <input type="hidden" name="as_ft" value="i" />
- <input type="hidden" name="as_filetype" value="" />
-
- <!-- updated anytime -->
- <input type="hidden" name="as_qdr" value="all" />
-
- <!-- where the result appears anywhere in the document -->
- <input type="hidden" name="as_occt" value="any" />
-
- <!-- only from httpd.apache.org -->
- <input type="hidden" name="as_dt" value="i" />
- <input type="hidden" name="as_sitesearch" value="httpd.apache.org" />
-
- <!-- turn off "safe" mode -->
- <input type="hidden" name="safe" value="off" />
-</p>
-</xsl:template>
-<!-- /search.spec -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/language.xsl b/docs/manual/style/xsl/language.xsl
deleted file mode 100644
index 05ea6ebb96..0000000000
--- a/docs/manual/style/xsl/language.xsl
+++ /dev/null
@@ -1,625 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
- <!ENTITY xsl "http://www.w3.org/1999/XSL/Transform">
-]>
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="">
-
-<xsl:output
- method="xml"
- encoding="utf-8"
- indent="no"
-/>
-
-<xsl:param name="type" />
-<xsl:param name="langs" />
-
-<!-- ==================================================================== -->
-<!-- / -->
-<!-- bootstrap -->
-<!-- ==================================================================== -->
-<xsl:template match="/">
-<xsl:choose>
-<xsl:when test="$type = 'list'">
- <language-list>
- &lf;
- <xsl:call-template name="language-list">
- <xsl:with-param name="langs" select="normalize-space($langs)" />
- </xsl:call-template>
- </language-list>
- &lf;
-</xsl:when>
-<xsl:otherwise>
- <xsl:apply-templates select="*" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- language-list -->
-<!-- generate language list -->
-<!-- ==================================================================== -->
-<xsl:template name="language-list">
-<xsl:param name="langs" />
-
-<xsl:if test="string-length($langs)">
- <lang>
- <xsl:value-of select="substring-before(concat($langs, ' '),' ')" />
- </lang>
- &lf;
-
- <xsl:call-template name="language-list">
- <xsl:with-param name="langs" select="normalize-space(substring-after(
- concat($langs, ' '), ' '))" />
- </xsl:call-template>
-</xsl:if>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <language-list> -->
-<!-- generate stuff from language list -->
-<!-- ==================================================================== -->
-<xsl:template match="/language-list">
-<xsl:choose>
-<xsl:when test="$type = 'design'">
- <items>
- &lf;
- <xsl:for-each select="lang">
- <xsl:variable name="file" select="document(concat('../lang/', .,
- '.xml'))/language" />
- <item lang="{$file/@id}" charset="{$file/charset}" >
- <xsl:value-of select="$file/target-ext" />
- </item>
- &lf;
- </xsl:for-each>
- </items>
- &lf;
-</xsl:when>
-<xsl:when test="$type = 'targets'">
- <xsl:apply-templates select="/language-list" mode="targets" />
-</xsl:when>
-<xsl:when test="$type = 'desc'">
- <xsl:apply-templates select="/language-list" mode="desc" />
-</xsl:when>
-<xsl:when test="$type = 'modlists'">
- <xsl:apply-templates select="/language-list" mode="modlists" />
-</xsl:when>
-</xsl:choose>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <language-list> -->
-<!-- generate target list from language list -->
-<!-- ==================================================================== -->
-<xsl:template match="/language-list" mode="targets">
-
-<xsl:call-template name="copyright" />
-
-<xsl:call-template name="head">
- <xsl:with-param name="text" select="'this file contains language specific
- targets and will be included'" />
-</xsl:call-template>
-
-<xsl:call-template name="head">
- <xsl:with-param name="text" select="'into build.xml. IT IS AUTOGENERATED.
- DO NOT TOUCH!'" />
-</xsl:call-template>
-<xsl:call-template name="sep" />
-
-<project name="lang-targets">
- &lf;&lf;
-
- <!-- build *-all targets -->
- <!-- =================== -->
- <target name="all"
- description="- builds all HTML files and nroff man pages">
- <xsl:attribute name="depends">
- <xsl:for-each select="lang[document(concat('../lang/', .,
- '.xml'))/language/messages]">
- <xsl:value-of select="." />
- <xsl:if test="position() != last()">, </xsl:if>
- </xsl:for-each>
- </xsl:attribute>
- </target>
- &lf;
-
- <target name="zip-all"
- description="- builds all zip download packages">
- <xsl:attribute name="depends">
- <xsl:for-each select="lang[document(concat('../lang/', .,
- '.xml'))/language/messages]">
- <xsl:text>zip-</xsl:text>
- <xsl:value-of select="." />
- <xsl:if test="position() != last()">, </xsl:if>
- </xsl:for-each>
- </xsl:attribute>
- </target>
- &lf;
-
- <!-- single language targets -->
- <!-- ======================= -->
- <xsl:for-each select="lang">
- <xsl:sort select="." />
- <xsl:variable name="file" select="document(concat('../lang/', .,
- '.xml'))/language" />
-
- <xsl:if test="$file/messages">
- &lf;
- <xsl:call-template name="head">
- <xsl:with-param name="text" select="$file/name" />
- </xsl:call-template>
- <xsl:call-template name="sep" />
-
- <property name="inputext.{.}" value="{$file/source-ext}" />&lf;
- <property name="outputext.{.}" value="{$file/target-ext}" />&lf;&lf;
-
- <target name="{.}" description="- builds {$file/name} HTML files">
- &lf;
- <xsl:text> </xsl:text>
- <html.generic lang="{.}" />&lf;
-
- <xsl:if test=". = 'en'">
- <xsl:text> </xsl:text><runtarget target="man-en" />&lf;
- </xsl:if>
- </target>
- &lf;
-
- <target name="zip-{.}"
- description="- builds the {$file/name} zipped download package">&lf;
- <xsl:text> </xsl:text>
- <zip.generic lang="{.}" />&lf;
- </target>
- &lf;
-
- <xsl:if test="$file/chm">
- <target name="chm-{.}"
- description="- builds the {$file/name} CHM file">&lf;
- <xsl:text> </xsl:text>
- <chm.generic lang="{.}" />&lf;
- </target>
- &lf;
- </xsl:if>
-
- <xsl:if test="$file/man">
- <target name="man-{.}"
- description="- builds the {$file/name} nroff files">&lf;
- <xsl:text> </xsl:text>
- <nroff.generic lang="{.}" />&lf;
- </target>
- &lf;
- </xsl:if>
-
- <xsl:if test=". = 'en'">
- <target name="latex-en"
- description="- builds the English latex file">&lf;
- <xsl:text> </xsl:text>
- <latex.generic lang="en" />&lf;
- </target>
- &lf;
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- &lf;
-
- <!-- XML validation -->
- <!-- ============== -->
- <xsl:call-template name="head">
- <xsl:with-param name="text" select="'XML validation.'" />
- </xsl:call-template>
- <xsl:call-template name="head">
- <xsl:with-param name="text" select="'If you get an error during
- transformation, this task may be useful'" />
- </xsl:call-template>
- <xsl:call-template name="head">
- <xsl:with-param name="text" select="'because it mostly gives you a
- hint, where you forgot the &lt;/p&gt; ;-)'" />
- </xsl:call-template>
- <xsl:call-template name="sep" />
-
- <target name="validate-xml" description="- validates all XML source files">
- &lf;
- <xsl:text> </xsl:text>
- <xmlvalidate lenient="false" failonerror="false" warn="true">
- &lf;
- <xsl:text> </xsl:text>
- <xmlcatalog refid="w3c-catalog" />&lf;
- <xsl:text> </xsl:text>
- <fileset dir="../">&lf;
- <xsl:for-each select="lang">
- <xsl:sort select="." />
-
- <xsl:variable name="file" select="document(concat(
- '../lang/', ., '.xml'))
- /language" />
- <xsl:if test="$file/messages">
- <xsl:text> </xsl:text>
- <include name="**/*{$file/source-ext}" />&lf;
- </xsl:if>
- </xsl:for-each>
- &lf;
- <xsl:text> </xsl:text>
- <patternset refid="excludes" />&lf;
- <xsl:text> </xsl:text>
- <patternset refid="scratch" />&lf;
- <xsl:text> </xsl:text>
- </fileset>
- &lf;
- <xsl:text> </xsl:text>
- </xmlvalidate>
- &lf;
- </target>
- &lf;&lf;
-</project>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <language-list> -->
-<!-- generate list of modulelists -->
-<!-- ==================================================================== -->
-<xsl:template match="/language-list" mode="modlists">
-<items>
- &lf;
- <xsl:for-each select="lang">
- <xsl:sort select="." />
-
- <xsl:variable name="file" select="document(concat(
- '../lang/', ., '.xml'))
- /language" />
- <item lang="{.}">
- <xsl:text>../../../mod/allmodules</xsl:text>
- <xsl:value-of select="$file/source-ext" />
- </item>
- &lf;
- </xsl:for-each>
-</items>
-</xsl:template>
-
-<!-- ==================================================================== -->
-<!-- <language-list> -->
-<!-- generate project description -->
-<!-- ==================================================================== -->
-<xsl:template match="/language-list" mode="desc">
-
-<xsl:call-template name="copyright" />
-
-<description><xsl:text>
-This build file contains all operations that are necessary for building
-the Apache httpd documentation. It is called by invoking build.bat (Win32)
-or build.sh (/bin/sh systems) with a target argument (full list below).
-For example, if you want to build the Japanese HTML files, type:
-
- ./build.sh ja
-
-Some targets have additional requirements:
-
-* 'metafiles' and 'modulelists' need perl in PATH. (It's checked automatically
- and skipped if perl is not available)
-
-* 'chm-foo' targets need:
- - the HTML Help compiler in PATH (or modify this build file). The
- compiler (hhc.exe) is part of the HTML Help Workshop which is freely
- available and can be downloaded from
- http://msdn.microsoft.com/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp
- - The appropriate locale (e.g. Japanese) before invoking hhc.exe. Otherwise
- the compiler is not able to build the fulltext search index correctly and
- the TOC may be garbled, too. In particular:
-</xsl:text>
-
- <xsl:for-each select="lang">
- <xsl:sort select="." />
-
- <xsl:variable name="file" select="document(concat('../lang/', .,
- '.xml'))/language" />
-
- <xsl:if test="$file/messages and $file/chm">
- <xsl:text> + chm-</xsl:text>
- <xsl:value-of select="." />
- <xsl:text>: </xsl:text>
- <xsl:value-of select="normalize-space($file/chm/settings)" />
- &lf;
- </xsl:if>
- </xsl:for-each>
- &lf;
-</description>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <language> -->
-<!-- generate language specific xslt -->
-<!-- ==================================================================== -->
-<xsl:template match="/language">
-
-<xsl:call-template name="copyright" />
-
-<xsl:element name="xsl:stylesheet" namespace="&xsl;">
- <xsl:attribute name="version">1.0</xsl:attribute>
- &lf;
- &lf;
-
- <xsl:element name="xsl:output">
- <xsl:attribute name="method">
- <xsl:choose>
- <xsl:when test="$type = 'manual' or
- $type = 'chm' or
- $type = 'zip'">
- <xsl:text>xml</xsl:text>
- </xsl:when>
- <xsl:when test="$type = 'hhc' or
- $type = 'hhp' or
- $type = 'man'">
- <xsl:text>text</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:message terminate="yes">
- <xsl:text>Unknown style type '</xsl:text>
- <xsl:value-of select="$type" />
- <xsl:text>'!</xsl:text>
- </xsl:message>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:attribute name="encoding">
- <xsl:choose>
- <xsl:when test="$type = 'chm' or
- $type = 'hhc' or
- $type = 'hhp'">
- <xsl:value-of select="chm/charset" />
- </xsl:when>
- <xsl:when test="$type = 'man'">
- <xsl:value-of select="man/charset" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="charset" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:attribute name="indent">no</xsl:attribute>
- <xsl:if test="$type = 'manual' or
- $type = 'chm' or
- $type = 'zip'">
- <xsl:attribute name="doctype-public">
- <xsl:text>-//W3C//DTD XHTML 1.0 Strict//EN</xsl:text>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test="$type = 'manual'">
- <xsl:attribute name="doctype-system">
- <xsl:text>http://www.w3.org/TR/xhtml1/DTD/</xsl:text>
- <xsl:text>xhtml1-strict.dtd</xsl:text>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test="$type = 'chm' or
- $type = 'zip'">
- <xsl:attribute name="omit-xml-declaration">yes</xsl:attribute>
- </xsl:if>
- </xsl:element>
- &lf;&lf;
-
- <xsl:comment>
- <xsl:text> Read the localized messages from the specified </xsl:text>
- <xsl:text>language file </xsl:text>
- </xsl:comment>
- &lf;
-
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">message</xsl:attribute>
- <xsl:attribute name="select">
- <xsl:text>document('</xsl:text>
- <xsl:if test="$type != 'manual'">../</xsl:if>
- <xsl:text>lang/</xsl:text>
- <xsl:value-of select="@id" />
- <xsl:text>.xml')/language/messages/message</xsl:text>
- </xsl:attribute>
- </xsl:element>
- &lf;
-
- <xsl:if test="$type != 'man'">
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">doclang</xsl:attribute>
- <xsl:value-of select="@id" />
- </xsl:element>
- &lf;
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">allmodules</xsl:attribute>
- <xsl:attribute name="select">
- <xsl:text>document('</xsl:text>
- <xsl:if test="$type != 'manual'">../</xsl:if>
- <xsl:text>xsl/util/allmodules.xml')</xsl:text>
- <xsl:text>/items/item[@lang=$doclang]</xsl:text>
- </xsl:attribute>
- </xsl:element>
- &lf;
- </xsl:if>
- &lf;
-
- <xsl:if test="$type != 'man'">
- <xsl:comment>
- <xsl:text> some meta information have to be passed to </xsl:text>
- <xsl:text>the transformation </xsl:text>
- </xsl:comment>
- &lf;
- </xsl:if>
-
- <xsl:if test="$type = 'manual' or
- $type = 'chm' or
- $type = 'zip' or
- $type = 'hhc'">
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">output-encoding</xsl:attribute>
- <xsl:choose>
- <xsl:when test="$type = 'chm' or
- $type = 'hhc'">
- <xsl:value-of select="normalize-space(chm/charset)" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="normalize-space(charset)" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- &lf;
- </xsl:if>
-
- <xsl:if test="$type = 'manual' or
- $type = 'chm' or
- $type = 'zip'">
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">is-chm</xsl:attribute>
- <xsl:attribute name="select">
- <xsl:choose>
- <xsl:when test="$type = 'chm'">
- <xsl:text>true()</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>false()</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- </xsl:element>
- &lf;
-
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">is-zip</xsl:attribute>
- <xsl:attribute name="select">
- <xsl:choose>
- <xsl:when test="$type = 'zip'">
- <xsl:text>true()</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>false()</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- </xsl:element>
- &lf;&lf;
- </xsl:if>
-
- <xsl:if test="$type = 'hhc'">
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">toc-font</xsl:attribute>
- <xsl:value-of select="normalize-space(chm/toc-font)" />
- </xsl:element>
- &lf;
-
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">xml-ext</xsl:attribute>
- <xsl:value-of select="normalize-space(source-ext)" />
- </xsl:element>
- &lf;&lf;
- </xsl:if>
-
- <xsl:if test="$type = 'hhp'">
- <xsl:element name="xsl:variable">
- <xsl:attribute name="name">hhp-lang</xsl:attribute>
- <xsl:value-of select="normalize-space(chm/lang)" />
- </xsl:element>
- &lf;&lf;
- </xsl:if>
-
- <xsl:comment> Now get the real guts of the stylesheet </xsl:comment>
- &lf;
-
- <xsl:element name="xsl:include">
- <xsl:attribute name="href">
- <xsl:choose>
- <xsl:when test="$type = 'chm' or
- $type = 'zip'">
- <xsl:text>../xsl/common.xsl</xsl:text>
- </xsl:when>
- <xsl:when test="$type = 'hhc'">
- <xsl:text>../xsl/hhc.xsl</xsl:text>
- </xsl:when>
- <xsl:when test="$type = 'hhp'">
- <xsl:text>../xsl/hhp.xsl</xsl:text>
- </xsl:when>
- <xsl:when test="$type = 'man'">
- <xsl:text>../xsl/nroff.xsl</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>xsl/common.xsl</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- </xsl:element>
- &lf;&lf;
-</xsl:element>
-
-</xsl:template>
-<!-- /language -->
-
-
-<xsl:template name="copyright">
-&lf;
-<xsl:comment><xsl:text>
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-</xsl:text></xsl:comment>
-&lf;&lf;
-</xsl:template>
-
-
-<xsl:template name="sepstring">
-<xsl:text>============================================</xsl:text>
-<xsl:text>========================</xsl:text>
-</xsl:template>
-
-
-<xsl:template name="sep">
-<xsl:comment>
- <xsl:text> </xsl:text>
- <xsl:call-template name="sepstring" />
- <xsl:text> </xsl:text>
-</xsl:comment>
-&lf;
-</xsl:template>
-
-<xsl:template name="head">
-<xsl:param name="text" />
-
-<xsl:variable name="s"><xsl:call-template name="sepstring" /></xsl:variable>
-<xsl:variable name="empty" select="translate($s, '=', ' ')" />
-
-<xsl:comment>
- <xsl:text> </xsl:text>
- <xsl:value-of select="substring(concat(normalize-space($text), $empty), 1,
- string-length($empty))" />
- <xsl:text> </xsl:text>
-</xsl:comment>
-&lf;
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/manualpage.xsl b/docs/manual/style/xsl/manualpage.xsl
deleted file mode 100644
index 4a18b3718b..0000000000
--- a/docs/manual/style/xsl/manualpage.xsl
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <manualpage> -->
-<!-- Process an entire document into an HTML page -->
-<!-- ==================================================================== -->
-<xsl:template match="manualpage">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head" />&lf;
-
- <body id="manual-page">
- <!-- unsqueeze if there's no sidebar -->
- <xsl:if test="not(count(section) > 1 or seealso)">
- <xsl:attribute name="class">no-sidebar</xsl:attribute>
- </xsl:if>
-
- <xsl:call-template name="top"/>
-
- <div id="page-content">
- <div id="preamble">
- <h1>
- <xsl:value-of select="title"/>
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <xsl:apply-templates select="summary" />
- </div>&lf; <!-- /#preamble -->
-
- <xsl:if test="(not($is-chm) and count(section) > 1) or seealso">
- <div id="quickview">
- <xsl:if test="not($is-chm) and count(section) > 1">
- <ul id="toc">
- <xsl:apply-templates select="section" mode="index" />
- </ul>
- </xsl:if>
-
- <xsl:if test="seealso">
- <h3>
- <xsl:value-of
- select="$message[@id='seealso']" />
- </h3>
- <ul class="seealso">
- <xsl:for-each select="seealso">
- <li>
- <xsl:apply-templates />
- </li>
- </xsl:for-each>
- </ul>
- </xsl:if>
- </div>&lf; <!-- /#quickview -->
- </xsl:if>
-
- <xsl:apply-templates select="section" />
- </div>&lf; <!-- /#page-content -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /manualpage -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/moduleindex.xsl b/docs/manual/style/xsl/moduleindex.xsl
deleted file mode 100644
index 97e8927f88..0000000000
--- a/docs/manual/style/xsl/moduleindex.xsl
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <moduleindex> -->
-<!-- Builds the moduleindex page -->
-<!-- ==================================================================== -->
-<xsl:template match="moduleindex">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head"/>&lf;
-
- <body id="module-index">
- <xsl:call-template name="top"/>
-
- <div id="page-content">
- <div id="preamble">
- <h1>
- <xsl:value-of select="title" />
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <xsl:apply-templates select="summary" />
- </div>&lf; <!-- /#preamble -->
-
- <xsl:if test="not($is-chm) or seealso">
- <div id="quickview">
- <xsl:if test="not($is-chm)">
- <ul id="toc">&lf;
- <li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <a href="#core">
- <xsl:value-of select="$message
- [@id='corefeatures']" />
- </a>
- </li>
- <li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <a href="#other">
- <xsl:value-of select="$message
- [@id='othermodules']" />
- </a>
- </li>
- </ul>
- </xsl:if> <!-- !$is-chm -->
-
- <xsl:if test="seealso">
- <h3>
- <xsl:value-of select="$message
- [@id='seealso']" />
- </h3>&lf;
-
- <ul class="seealso">&lf;
- <xsl:for-each select="seealso">
- <li>
- <xsl:apply-templates />
- </li>&lf;
- </xsl:for-each>
- </ul>
- </xsl:if> <!-- /seealso -->
- </div> <!-- /#quickview -->
- </xsl:if>&lf; <!-- have sidebar -->
-
- <xsl:call-template name="toplink" />&lf;
-
- <div class="section">
- <h2>
- <a name="core" id="core">
- <xsl:value-of select="$message
- [@id='corefeatures']" />
- </a>
- </h2>&lf;
-
- <!-- core -->
- <dl>&lf;
- <dt>
- <a href="{document(document($allmodules)/modulefilelist
- /modulefile[starts-with(., 'core.xml')])
- /modulesynopsis/name}.html">
- <xsl:value-of
- select="document(document($allmodules)/modulefilelist
- /modulefile[starts-with(., 'core.xml')])
- /modulesynopsis/name" />
- </a>
- </dt>
- <dd>
- <xsl:apply-templates
- select="document(document($allmodules)/modulefilelist
- /modulefile[starts-with(., 'core.xml')])
- /modulesynopsis/description" />
- </dd>&lf;
-
- <!-- mpm_common -->
- <dt>
- <a href="{document(document($allmodules)/modulefilelist
- /modulefile[starts-with(., 'mpm_common.xml')])
- /modulesynopsis/name}.html">
- <xsl:value-of
- select="document(document($allmodules)/modulefilelist
- /modulefile[starts-with(., 'mpm_common.xml')])
- /modulesynopsis/name" />
- </a>
- </dt>
- <dd class="separate">
- <xsl:apply-templates
- select="document(document($allmodules)/modulefilelist
- /modulefile[starts-with(., 'mpm_common.xml')])
- /modulesynopsis/description" />
- </dd>&lf;
-
- <!-- and now the remaining MPMs -->
- <xsl:variable name="mpmmodules"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis
- [status='MPM' and name != 'mpm_common']" />
- <xsl:variable name="translist">
- <xsl:call-template name="module-translist">
- <xsl:with-param name="modules" select="$mpmmodules" />
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:for-each select="$mpmmodules">
- <xsl:sort select="substring-before(substring-after($translist,
- concat('- ', translate(normalize-space(name), $lowercase,
- $uppercase), ' ')), ' -')" />
-
- <dt>
- <a href="{name}.html">
- <xsl:value-of select="name" />
- </a>
- </dt>
- <dd>
- <xsl:apply-templates select="description" />
- </dd>&lf;
- </xsl:for-each>
- </dl>
- </div>&lf; <!-- /core section -->
-
- <xsl:call-template name="toplink" />&lf;
-
- <div class="section">
- <h2>
- <a name="other" id="other">
- <xsl:value-of select="$message
- [@id='othermodules']" />
- </a>
- </h2>&lf;
-
- <xsl:variable name="modules"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis[status!='MPM' and
- status!='Core']" />
-
- <xsl:variable name="start-letters">
- <xsl:call-template name="module-startletters">
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
- </xsl:variable>
-
- <p class="letters">
- <xsl:call-template name="letter-bar">
- <xsl:with-param name="letters" select="$start-letters"/>
- <xsl:with-param name="first" select="true()"/>
- </xsl:call-template>
- </p>&lf;
-
- <dl>
- <xsl:call-template name="mindex-of-letter">
- <xsl:with-param name="letters-todo"
- select="$start-letters" />
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
- </dl>
- </div> <!-- /modules section -->
- </div>&lf; <!-- /#page-content -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /moduleindex -->
-
-
-<!-- ==================================================================== -->
-<!-- the working horse. builds list items of all modules starting with -->
-<!-- one letter when done, it calls itself to catch the next letter -->
-<!-- ==================================================================== -->
-<xsl:template name="mindex-of-letter">
-<xsl:param name="letters-todo"/>
-<xsl:param name="modules"/>
-
-<xsl:variable name="letter" select="substring($letters-todo, 1, 1)" />
-<xsl:variable name="translist">
- <xsl:call-template name="module-translist">
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:for-each
- select="$modules[$letter=substring(substring-before(substring-after(
- $translist, concat('- ', translate(normalize-space(name), $lowercase,
- $uppercase), ' ')), ' -'), 1, 1)]">
-<xsl:sort
- select="substring-before(substring-after($translist, concat('- ',
- translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')" />
-
- <dt>
- <a href="{name}.html">
- <xsl:if test="position() = 1">
- <xsl:attribute name="id">
- <xsl:value-of select="$letter" />
- </xsl:attribute>
- <xsl:attribute name="name">
- <xsl:value-of select="$letter" />
- </xsl:attribute>
- </xsl:if>
-
- <xsl:value-of select="name" />
- </a>
- </dt>
- <dd>
- <xsl:apply-templates select="description" />
- </dd>&lf;
-</xsl:for-each> <!-- /directives -->
-
-<!-- call next letter, if there is -->
-<xsl:if test="string-length($letters-todo) &gt; 1">
- <xsl:call-template name="mindex-of-letter">
- <xsl:with-param name="letters-todo"
- select="substring($letters-todo, 2)" />
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
-</xsl:if>
-</xsl:template>
-<!-- /mindex-of-letter -->
-
-
-<!-- ==================================================================== -->
-<!-- collect start letters of modules -->
-<!-- ==================================================================== -->
-<xsl:template name="module-startletters">
-<xsl:param name="modules" />
-
-<xsl:variable name="translist">
- <xsl:call-template name="module-translist">
- <xsl:with-param name="modules" select="$modules" />
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:call-template name="_squeeze-letters">
- <xsl:with-param name="lastletter" select="''" />
- <xsl:with-param name="letters">
- <xsl:for-each select="$modules">
- <xsl:sort
- select="substring-before(substring-after($translist, concat('- ',
- translate(normalize-space(name), $lowercase, $uppercase), ' ')),
- ' -')" />
- <xsl:value-of
- select="substring(substring-before(substring-after($translist,
- concat('- ', translate(normalize-space(name), $lowercase,
- $uppercase), ' ')), ' -'), 1, 1)" />
- </xsl:for-each>
- </xsl:with-param>
-</xsl:call-template>
-</xsl:template>
-<!-- /module-startletters -->
-
-
-<!-- ==================================================================== -->
-<!-- define module name translations for sorting -->
-<!-- -->
-<!-- it's a kind of a hack... -->
-<!-- we build a string that contains the following data: -->
-<!-- "- modulename sortname - modulename sortname - ..." -->
-<!-- (with all data in uppercase) -->
-<!-- -->
-<!-- So, the translation from modulename to sortname can be done with the -->
-<!-- expression below: -->
-<!--
- substring-before(
- substring-after($translist,
- concat('- ', translate(modulename,
- $lowercase, $uppercase),
- ' ')
- ),
- ' -')
- -->
-<!-- ==================================================================== -->
-<xsl:template name="module-translist">
-<xsl:param name="modules" />
-
-<xsl:text>-</xsl:text>
-<xsl:for-each select="$modules">
- <xsl:variable name="sname" select="translate(normalize-space(name),
- $lowercase, $uppercase)" />
-
- <xsl:text> </xsl:text>
- <xsl:value-of select="$sname" />
- <xsl:text> </xsl:text>
- <xsl:call-template name="module-translatename">
- <xsl:with-param name="name" select="$sname" />
- </xsl:call-template>
- <xsl:text> -</xsl:text>
-</xsl:for-each>
-</xsl:template>
-<!-- /module-translist -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/nroff.xsl b/docs/manual/style/xsl/nroff.xsl
deleted file mode 100644
index 9f9924ffe5..0000000000
--- a/docs/manual/style/xsl/nroff.xsl
+++ /dev/null
@@ -1,443 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!--
- * This software is based on initial work of Joe Orton <jorton redhat.com>
- * (contributed to the ASF) which is based on the db2man stylesheets developed
- * by Martijn van Beers. db2man is now part of docbook-xsl, which is
- * licensed under the following terms:
- *
- * Copyright
- * =========
- *
- * Copyright (C) 1999, 2000, 2001, 2002 Norman Walsh
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the ``Software''), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * Except as contained in this notice, the names of individuals
- * credited with contribution to this software shall not be used in
- * advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization
- * from the individuals in question.
- *
- * Any stylesheet derived from this Software that is publically
- * distributed will be identified with a different name and the
- * version strings in any derived Software will be changed so that
- * no possibility of confusion between the derived package and this
- * Software will exist.
- *
- * Warranty
- * ========
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER
- * CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */ -->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "../xsl/util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<!-- -->
-<!-- params injected from elsewhere -->
-<!-- -->
-<xsl:param name="section" select="'1'" />
-<xsl:param name="date" />
-
-<!-- Constants used for case translation -->
-<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
-<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
-
-<!-- ==================================================================== -->
-<!-- <manualpage> -->
-<!-- Process an entire document into an nroff formatted man page -->
-<!-- ==================================================================== -->
-<xsl:template match="manualpage">
-<!-- start at the beginning ;-) -->
-<xsl:text>.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>&lf;
-<xsl:text>.\" DO NOT EDIT! Generated from XML source.</xsl:text>&lf;
-<xsl:text>.\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:text>&lf;
-<xsl:text>.de Sh \" Subsection</xsl:text>&lf;
-<xsl:text>.br</xsl:text>&lf;
-<xsl:text>.if t .Sp</xsl:text>&lf;
-<xsl:text>.ne 5</xsl:text>&lf;
-<xsl:text>.PP</xsl:text>&lf;
-<xsl:text>\fB\\$1\fR</xsl:text>&lf;
-<xsl:text>.PP</xsl:text>&lf;
-<xsl:text>..</xsl:text>&lf;
-<xsl:text>.de Sp \" Vertical space (when we can't use .PP)</xsl:text>&lf;
-<xsl:text>.if t .sp .5v</xsl:text>&lf;
-<xsl:text>.if n .sp</xsl:text>&lf;
-<xsl:text>..</xsl:text>&lf;
-<xsl:text>.de Ip \" List item</xsl:text>&lf;
-<xsl:text>.br</xsl:text>&lf;
-<xsl:text>.ie \\n(.$>=3 .ne \\$3</xsl:text>&lf;
-<xsl:text>.el .ne 3</xsl:text>&lf;
-<xsl:text>.IP "\\$1" \\$2</xsl:text>&lf;
-<xsl:text>..</xsl:text>&lf;
-
-<!-- reftitle -->
-<xsl:text>.TH "</xsl:text>
-<!-- standard man page width is 64 chars; 6 chars needed for the two
- (x) volume numbers, and 2 spaces, leaves 56 -->
-<xsl:value-of select="substring(translate(substring-before(
- normalize-space(title), ' - '), $lowercase, $uppercase), 1, (56 -
- string-length(substring-before(normalize-space(title), ' - '))) div 2)" />
-<xsl:text>" </xsl:text>
-
-<!-- section -->
-<xsl:value-of select="$section" />
-<xsl:text> "</xsl:text>
-
-<!-- date; perhaps injected via ant later. -->
-<xsl:value-of select="$date" />
-<xsl:text>" "</xsl:text>
-
-<!-- productname -->
-<xsl:value-of select="'Apache HTTP Server'" />
-<xsl:text>" "</xsl:text>
-
-<!-- title -->
-<xsl:value-of select="substring-before(normalize-space(title), ' - ')" />
-<xsl:text>"</xsl:text>&lf;
-
-<!-- reorder the paragraphs a bit -->
-<xsl:apply-templates select="title" />&lf;
-<xsl:apply-templates select="section[@id='synopsis']" />&lf;
-<xsl:apply-templates select="summary" />&lf;
-<xsl:apply-templates select="section[@id!='synopsis']" />&lf;
-</xsl:template>
-<!-- /manualpage -->
-
-
-<!-- ==================================================================== -->
-<!-- <manualpage><title> -->
-<!-- Process heading -->
-<!-- ==================================================================== -->
-<xsl:template match="manualpage/title">
-&lf;
-<xsl:text>.SH NAME</xsl:text>&lf;
-<xsl:variable name="text">
- <xsl:call-template name="filter.escape">
- <xsl:with-param name="text" select="normalize-space(.)" />
- </xsl:call-template>
-</xsl:variable>
-<xsl:value-of select="substring-before($text, ' - ')" />
-<xsl:text> \- </xsl:text>
-<xsl:value-of select="substring-after($text, ' - ')" />
-</xsl:template>
-<!-- /manualpage/title -->
-
-
-<!-- ==================================================================== -->
-<!-- <p> -->
-<!-- Process paragraph -->
-<!-- ==================================================================== -->
-<xsl:template match="p">
-&lf;
-<xsl:text>.PP</xsl:text>&lf;
-
-<xsl:for-each select="node()">
- <xsl:choose>
- <xsl:when test="self::text()">
- <xsl:if test="starts-with(translate(., '&#10;', ' '), ' ') and
- preceding-sibling::node()[name(.) != '']">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:variable name="content">
- <xsl:apply-templates select="." />
- </xsl:variable>
- <xsl:value-of select="normalize-space($content)"/>
- <xsl:if test="translate(substring(., string-length(.), 1), '&#10;',
- ' ') = ' ' and following-sibling::node()[name(.) != '']">
- <xsl:text> </xsl:text>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="content">
- <xsl:apply-templates select="." />
- </xsl:variable>
- <xsl:value-of select="normalize-space($content)"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:for-each>&lf;
-</xsl:template>
-<!-- /p -->
-
-
-<!-- ==================================================================== -->
-<!-- <section> -->
-<!-- process main section -->
-<!-- ==================================================================== -->
-<xsl:template match="section">
-&lf;
-<xsl:text>.SH "</xsl:text>
- <xsl:call-template name="filter.escape">
- <xsl:with-param name="text"
- select="normalize-space(translate(title, $lowercase, $uppercase))"/>
- </xsl:call-template>
-<xsl:text>"</xsl:text>&lf;
-<xsl:apply-templates />
-</xsl:template>
-<xsl:template match="section/title" />
-<!-- /section -->
-
-
-<!-- ==================================================================== -->
-<!-- <section><section> -->
-<!-- process subsection -->
-<!-- ==================================================================== -->
-<xsl:template match="section/section">
-&lf;
-<xsl:text>.SS "</xsl:text>
- <xsl:call-template name="filter.escape">
- <xsl:with-param name="text" select="normalize-space(title)"/>
- </xsl:call-template>
-<xsl:text>"</xsl:text>&lf;
-<xsl:apply-templates />
-</xsl:template>
-<!-- /section/section -->
-
-
-<!-- ==================================================================== -->
-<!-- <summary> -->
-<!-- process summary section -->
-<!-- ==================================================================== -->
-<xsl:template match="summary">
-&lf;
-<xsl:text>.SH "</xsl:text>
- <xsl:call-template name="filter.escape">
- <xsl:with-param name="text" select="normalize-space(translate($message
- [@id='summary'], $lowercase, $uppercase))"/>
- </xsl:call-template>
-<xsl:text>"</xsl:text>&lf;
-<xsl:apply-templates />
-</xsl:template>
-<!-- /summary -->
-
-
-<!-- ==================================================================== -->
-<!-- <var>, <em> -->
-<!-- show it somewhat special (italic) -->
-<!-- ==================================================================== -->
-<xsl:template match="var|em">
-<xsl:text>\fI</xsl:text>
- <xsl:apply-templates />
-<xsl:text>\fR</xsl:text>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <strong> -->
-<!-- show it somewhat special (bold) -->
-<!-- ==================================================================== -->
-<xsl:template match="strong">
-<xsl:text>\fB</xsl:text>
- <xsl:apply-templates />
-<xsl:text>\fR</xsl:text>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <directive> -->
-<!-- ==================================================================== -->
-<xsl:template match="directive">
-<xsl:if test="@type = 'section'">&lt;</xsl:if>
-<xsl:apply-templates />
-<xsl:if test="@type = 'section'">&gt;</xsl:if>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <dl> -->
-<!-- ==================================================================== -->
-<xsl:template match="dl">
-&lf;
-<xsl:apply-templates />&lf;
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- <dt> -->
-<!-- ==================================================================== -->
-<xsl:template match="dt">
-&lf;
-<xsl:text>.TP</xsl:text>&lf;
-
-<xsl:variable name="dt-content">
- <xsl:apply-templates />
-</xsl:variable>
-<xsl:value-of select="normalize-space($dt-content)" />&lf;
-
-<xsl:variable name="dd-content">
- <xsl:apply-templates
- select="following-sibling::dd[position() = 1]/node()" />
-</xsl:variable>
-<xsl:value-of select="normalize-space($dd-content)" />
-</xsl:template>
-<!-- /dt -->
-
-
-<!-- ==================================================================== -->
-<!-- <example> -->
-<!-- ==================================================================== -->
-<xsl:template match="example">
-&lf;
-<xsl:text>.nf</xsl:text>&lf;
-<xsl:apply-templates />&lf;
-<xsl:text>.fi</xsl:text>&lf;
-</xsl:template>
-<!-- /example -->
-
-
-<!-- ==================================================================== -->
-<!-- simple table support ... (exactly 2 columns) -->
-<!-- ==================================================================== -->
-<xsl:template match="table/tr">
-<xsl:if test="count(./*) &gt; 2">
- <xsl:message terminate="yes">
-FATAL: only tables with two (2) columns are supported.
- </xsl:message>
-</xsl:if>
-
-&lf;
-<xsl:text>.Ip "\(bu \s-1</xsl:text>
-<xsl:variable name="first-content">
- <xsl:apply-templates select="./*[1]/node()" />
-</xsl:variable>
-<xsl:value-of select="normalize-space($first-content)" />
-
-<xsl:text>\s0 \- </xsl:text>
-<xsl:variable name="second-content">
- <xsl:apply-templates select="./*[2]/node()" />
-</xsl:variable>
-<xsl:value-of select="normalize-space($second-content)" />&lf;
-</xsl:template>
-<!-- /table/tr -->
-
-
-<!-- ==================================================================== -->
-<!-- text filter -->
-<!-- ==================================================================== -->
-<xsl:template match="text()">
-<xsl:choose>
-<xsl:when test="normalize-space(.) != ''">
-<xsl:call-template name="filter.escape">
- <xsl:with-param name="text" select="." />
-</xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <xsl:text> </xsl:text>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- pass through content -->
-<!-- ==================================================================== -->
-<xsl:template match="a|code|module|table">
-<xsl:apply-templates />
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- remove some stuff from the output -->
-<!-- ==================================================================== -->
-<xsl:template match="parentdocument|seealso|dd|td|example/br" />
-
-
-<!-- ==================================================================== -->
-<!-- the rest will be rejected -->
-<!-- ==================================================================== -->
-<xsl:template match="*">
-<xsl:message terminate="yes">
-FATAL: the behaviour of the &lt;<xsl:value-of select="local-name()" />&gt;
-element was not tested. You need to modify
-the XSLT stylesheet in order to get it work.
-</xsl:message>
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- filter.escape -->
-<!-- escape special characters -->
-<!-- ==================================================================== -->
-<xsl:template name="filter.escape">
-<xsl:param name="text" />
-
-<xsl:choose>
-<xsl:when test="contains($text, '\')">
- <xsl:call-template name="filter.escape.period">
- <xsl:with-param name="text" select="substring-before($text, '\')" />
- </xsl:call-template>
- <xsl:text>\\</xsl:text>
- <xsl:call-template name="filter.escape">
- <xsl:with-param name="text" select="substring-after($text, '\\')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <xsl:call-template name="filter.escape.period">
- <xsl:with-param name="text" select="$text" />
- </xsl:call-template>
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /filter.escape -->
-
-
-<!-- ==================================================================== -->
-<!-- filter.period -->
-<!-- accompanying template to filter.escape -->
-<!-- ==================================================================== -->
-<xsl:template name="filter.escape.period">
-<xsl:param name="text" />
-
-<xsl:choose>
-<xsl:when test="contains($text, '.')"><!-- period replaced by \&. -->
- <xsl:value-of select="substring-before($text, '.')" />
- <xsl:text>\&amp;.</xsl:text>
- <xsl:call-template name="filter.escape.period">
- <xsl:with-param name="text" select="substring-after($text, '.')" />
- </xsl:call-template>
-</xsl:when>
-<xsl:otherwise>
- <xsl:value-of select="$text" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /filter.escape.period -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/quickreference.xsl b/docs/manual/style/xsl/quickreference.xsl
deleted file mode 100644
index 0907b23588..0000000000
--- a/docs/manual/style/xsl/quickreference.xsl
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <quickreference> -->
-<!-- Builds the directive quickreference page -->
-<!-- ==================================================================== -->
-<xsl:template match="quickreference">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head"/>&lf;
-
- <body id="directive-index">&lf;
- <xsl:call-template name="top"/>&lf;
-
- <div id="preamble">
- <h1>
- <xsl:value-of select="title" />
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <xsl:apply-templates select="summary" />
- </div>&lf; <!-- /#preamble -->
-
- <div id="directive-ref">
- <xsl:variable name="directives"
- select="document(document($allmodules)/modulefilelist/modulefile)
- /modulesynopsis/directivesynopsis[not(@location)]" />
-
- <xsl:variable name="start-letters">
- <xsl:call-template name="directive-startletters">
- <xsl:with-param name="directives" select="$directives" />
- </xsl:call-template>
- </xsl:variable>
-
- <table id="legend">&lf;
- <tr>
- <td class="letters">
- <span>
- <xsl:call-template name="letter-bar">
- <xsl:with-param name="letters"
- select="$start-letters" />
- <xsl:with-param name="first" select="true()" />
- </xsl:call-template>
- </span>
- </td>&lf;
- <td>
- <xsl:apply-templates select="legend/table[position()=1]" />
- </td>&lf;
- <td>
- <xsl:apply-templates select="legend/table[position()=2]" />
- </td>
- </tr>&lf;
- </table>&lf;
-
- <table class="qref">&lf;
- <xsl:call-template name="reference-of-letter">
- <xsl:with-param name="letters-todo" select="$start-letters" />
- <xsl:with-param name="offset" select="number(0)" />
- <xsl:with-param name="directives" select="$directives" />
- </xsl:call-template>
- </table>
- </div>&lf; <!-- /#directive-ref -->
-
- <xsl:call-template name="bottom"/>&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /quickreference -->
-
-
-<!-- ==================================================================== -->
-<!-- the working horse. builds rows of all directives starting with one -->
-<!-- letter when done, it calls itself to catch the next letter -->
-<!-- ==================================================================== -->
-<xsl:template name="reference-of-letter">
-<xsl:param name="letters-todo" />
-<xsl:param name="offset" />
-<xsl:param name="directives" />
-
-<xsl:variable name="letter" select="substring($letters-todo, 1, 1)" />
-
-<xsl:for-each
- select="$directives[$letter=translate(substring(normalize-space(name), 1,1),
- $lowercase,$uppercase)]">
-<xsl:sort select="name" />
-
- <tr>
- <xsl:if test="position() mod 2 = $offset">
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:if>
-
- <td>
- <a href="{../name}.html#{translate(name, $uppercase, $lowercase)}">
- <xsl:if test="position()=1">
- <xsl:attribute name="id">
- <xsl:value-of select="$letter" />
- </xsl:attribute>
- <xsl:attribute name="name">
- <xsl:value-of select="$letter" />
- </xsl:attribute>
- </xsl:if>
-
- <xsl:apply-templates select="syntax" />
- </a>
- </td>
- <td>
- <!-- if the default value contains (at least) one <br />, -->
- <!-- this probably means that a short explanation follows -->
- <!-- the actual default value. We cut off the string -->
- <!-- after the <br /> so it will not be shown here. -->
- <!-- (add the + character instead) -->
- <xsl:variable name="default">
- <xsl:choose>
- <xsl:when test="count(default[count(br) &gt; 0]) &gt; 0">
- <xsl:value-of
- select="default/child::node()
- [count(preceding-sibling::*) = 0]" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="default"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:value-of select="substring(substring-after(concat($default,
- ' '), name),1,20)" />
- <xsl:if test="string-length(substring-after(concat($default, ' '),
- name)) &gt; 20
- or count(default[count(br) &gt; 0]) &gt; 0">
- <xsl:text> +</xsl:text>
- </xsl:if>
- </td>
- <td>
- <xsl:if test="contextlist/context
- [normalize-space(.)='server config']">s</xsl:if>
- <xsl:if test="contextlist/context
- [normalize-space(.)='virtual host']">v</xsl:if>
- <xsl:if test="contextlist/context
- [normalize-space(.)='directory']">d</xsl:if>
- <xsl:if test="contextlist/context
- [normalize-space(.)='.htaccess']">h</xsl:if>
- </td>
- <td>
- <xsl:choose>
- <xsl:when test="../status='Base'">B</xsl:when>
- <xsl:when test="../status='MPM'">M</xsl:when>
- <xsl:when test="../status='Core'">C</xsl:when>
- <xsl:when test="../status='Extension'">E</xsl:when>
- <xsl:when test="../status='Experimental'">X</xsl:when>
- </xsl:choose>
- </td>
- </tr>
- <tr>
- <xsl:if test="position() mod 2 = $offset">
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:if>
-
- <td colspan="4" class="descr">
- <xsl:choose>
- <xsl:when test="string-length(normalize-space(description)) &gt; 0">
- <xsl:apply-templates select="description"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>-</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </td>
- </tr>&lf;
-</xsl:for-each> <!-- /directives -->
-
-<!-- call next letter, if there is -->
-<xsl:if test="string-length($letters-todo) &gt; 1">
- <xsl:call-template name="reference-of-letter">
- <xsl:with-param name="letters-todo"
- select="substring($letters-todo, 2)" />
- <xsl:with-param name="offset"
- select="(count($directives[$letter=translate(substring(
- normalize-space(name), 1, 1), $lowercase, $uppercase)])
- + $offset) mod 2" />
- <xsl:with-param name="directives" select="$directives" />
- </xsl:call-template>
-</xsl:if>
-</xsl:template>
-<!-- /reference-of-letter -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/sitemap.xsl b/docs/manual/style/xsl/sitemap.xsl
deleted file mode 100644
index 46218931d9..0000000000
--- a/docs/manual/style/xsl/sitemap.xsl
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <sitemap> -->
-<!-- Process an entire document into an HTML page -->
-<!-- ==================================================================== -->
-<xsl:template match="/sitemap">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head" />&lf;
-
- <body id="manual-page">&lf;
- <xsl:call-template name="top" />&lf;
-
- <div id="page-content">
- <div id="preamble">
- <h1>
- <xsl:value-of select="title" />
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <xsl:apply-templates select="summary" />
- </div>&lf; <!-- /#preamble -->
-
- <xsl:if test="(not($is-chm) and count(category) &gt; 1) or seealso">
- <div id="quickview">
- <xsl:if test="not($is-chm) and count(category) &gt; 1">
- <ul id="toc">&lf;
- <xsl:for-each select="category">
- <xsl:choose>
- <xsl:when test="@id">
- <li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <a href="#{@id}">
- <xsl:apply-templates
- select="title" mode="print" />
- </a>
- </li>&lf;
- </xsl:when>
- <xsl:otherwise>
- <li>
- <img src="{$path}/images/down.gif" alt="" />
- <xsl:text> </xsl:text>
- <xsl:apply-templates
- select="title" mode="print" />
- </li>&lf;
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- </ul>&lf;
- </xsl:if>
-
- <xsl:if test="seealso">
- <h3>
- <xsl:value-of select="$message
- [@id='seealso']" />
- </h3>&lf;
-
- <ul class="seealso">&lf;
- <xsl:for-each select="seealso">
- <li>
- <xsl:apply-templates />
- </li>&lf;
- </xsl:for-each>
- </ul>&lf;
- </xsl:if>
- </div>&lf; <!-- /#quickview -->
- </xsl:if> <!-- have sidebar -->
-
- <xsl:apply-templates select="category" />
- </div>&lf; <!-- /#page-content -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /sitemap -->
-
-
-<!-- ==================================================================== -->
-<!-- category/page -->
-<!-- ==================================================================== -->
-<xsl:template match="sitemap/category/page">
-<li>
- <xsl:if test="@separate='yes'">
- <xsl:attribute name="class">separate</xsl:attribute>
- </xsl:if>
-
- <xsl:choose>
- <xsl:when test="@href">
- <a href="{@href}">
- <xsl:call-template name="helper.uri.fix">
- <xsl:with-param name="uri" select="@href" />
- </xsl:call-template>
- <xsl:value-of select="." />
- </a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="." />
- </xsl:otherwise>
- </xsl:choose>
-</li>&lf;
-</xsl:template>
-<!-- /category/page -->
-
-
-<!-- ==================================================================== -->
-<!-- Process a sitemap category -->
-<!-- ==================================================================== -->
-<xsl:template match="sitemap/category">
-<xsl:call-template name="toplink" />&lf;
-
-<div class="section">
- <!-- Category title -->
- <h2>
- <xsl:choose>
- <xsl:when test="@id">
- <a id="{@id}" name="{@id}">
- <xsl:apply-templates select="title" mode="print" />
- </a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="title" mode="print" />
- </xsl:otherwise>
- </xsl:choose>
- </h2>&lf;
-
- <!-- category body -->
- <ul>
- <xsl:apply-templates select="page" />
- </ul>
-
- <!-- optional ... -->
- <xsl:if test="@id = 'modules'">
- <xsl:apply-templates select="document($allmodules)/modulefilelist" />
- </xsl:if>
- &lf;
-</div> <!-- /.section -->
-</xsl:template>
-<!-- /category -->
-
-
-<!-- ==================================================================== -->
-<!-- category/modulefilelist -->
-<!-- insert module list into sitemap -->
-<!-- ==================================================================== -->
-<xsl:template match="modulefilelist">
-<xsl:variable name="translist">
- <xsl:text>-</xsl:text>
- <xsl:for-each select="modulefile">
- <xsl:variable name="current" select="document(.)/modulesynopsis" />
-
- <xsl:text> </xsl:text>
- <xsl:value-of select="$current/name" />
- <xsl:text> </xsl:text>
- <xsl:call-template name="module-translatename">
- <xsl:with-param name="name" select="$current/name" />
- </xsl:call-template>
- <xsl:text> -</xsl:text>
- </xsl:for-each>
-</xsl:variable>
-
-<ul>
-<li>
- <a href="mod/core.html">
- <xsl:value-of select="$message[@id='apachecore']" />
- </a>
-</li>&lf;
-<li>
- <a href="mod/mpm_common.html">
- <xsl:value-of select="$message[@id='apachempmcommon']" />
- </a>
-</li>&lf;
-
-<xsl:for-each select="modulefile">
-<xsl:sort select="substring-before(substring-after($translist, concat('- ',
- document(.)/modulesynopsis/name, ' ')), ' -')" />
-
- <xsl:variable name="current" select="document(.)/modulesynopsis" />
-
- <xsl:if test="$current/status='MPM' and $current/name!='mpm_common'">
- <xsl:variable name="name" select="substring-before(substring-after(
- $translist, concat('- ', $current/name, ' ')), ' -')" />
-
- <li>
- <a href="mod/{$current/name}.html">
- <xsl:value-of select="$message[@id='apachempm']" />
- <xsl:text> </xsl:text>
- <xsl:value-of select="$name" />
- </a>
- </li>&lf;
- </xsl:if>
-</xsl:for-each>
-</ul>
-
-<ul>
-<xsl:for-each select="modulefile">
-<xsl:sort select="substring-before(substring-after($translist, concat('- ',
- document(.)/modulesynopsis/name, ' ')), ' -')"/>
-
- <xsl:variable name="current" select="document(.)/modulesynopsis" />
-
- <xsl:if test="$current/status!='MPM' and $current/status!='Core'">
- <li>
- <a href="mod/{$current/name}.html">
- <xsl:value-of select="$message[@id='apachemodule']"/>
- <xsl:text> </xsl:text>
- <xsl:value-of select="$current/name"/>
- </a>
- </li>&lf;
- </xsl:if>
-</xsl:for-each>
-</ul>
-</xsl:template>
-<!-- /category/modulefilelist -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/synopsis.xsl b/docs/manual/style/xsl/synopsis.xsl
deleted file mode 100644
index ca1028b7ed..0000000000
--- a/docs/manual/style/xsl/synopsis.xsl
+++ /dev/null
@@ -1,507 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://www.w3.org/1999/xhtml">
-
-<!-- ==================================================================== -->
-<!-- <modulesynopsis> -->
-<!-- Process an entire document into an HTML page -->
-<!-- ==================================================================== -->
-<xsl:template match="modulesynopsis">
-<html xml:lang="{$doclang}" lang="{$doclang}">
- <xsl:call-template name="head" />&lf;
-
- <body>&lf;
- <xsl:call-template name="top" />&lf;
-
- <div id="page-content">&lf;
- <div id="preamble">
- <h1>
- <xsl:choose>
- <xsl:when test="status='Core'">
- <xsl:value-of select="$message
- [@id='apachecore']" />
- </xsl:when>
- <xsl:when test="name='mpm_common'">
- <xsl:value-of select="$message
- [@id='apachempmcommon']" />
- </xsl:when>
- <xsl:when test="status='MPM'">
- <xsl:value-of select="$message
- [@id='apachempm']" />
- <xsl:text> </xsl:text>
- <xsl:call-template name="module-translatename">
- <xsl:with-param name="name" select="name" />
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$message
- [@id='apachemodule']" />
- <xsl:text> </xsl:text>
- <xsl:value-of select="name" />
- </xsl:otherwise>
- </xsl:choose>
- </h1>&lf;
-
- <xsl:call-template name="langavail" />&lf;
-
- <!-- Description and module-headers -->
- <table class="module">
- <tr>
- <th>
- <a href="module-dict.html#Description">
- <xsl:value-of select="$message
- [@id='description']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:apply-templates select="description" />
- </td>
- </tr>&lf;
- <tr>
- <th>
- <a href="module-dict.html#Status">
- <xsl:value-of select="$message
- [@id='status']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:value-of select="status" />
- </td>
- </tr>
-
- <xsl:if test="identifier">&lf;
- <tr>
- <th>
- <a href="module-dict.html#ModuleIdentifier">
- <xsl:value-of select="$message
- [@id='moduleidentifier']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:value-of select="identifier" />
- </td>
- </tr>
- </xsl:if>
-
- <xsl:if test="sourcefile">&lf;
- <tr>
- <th>
- <a href="module-dict.html#SourceFile">
- <xsl:value-of select="$message
- [@id='sourcefile']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:value-of select="sourcefile" />
- </td>
- </tr>
- </xsl:if>
-
- <xsl:if test="compatibility">&lf;
- <tr>
- <th>
- <a href="module-dict.html#Compatibility">
- <xsl:value-of select="$message
- [@id='compatibility']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:apply-templates select="compatibility" />
- </td>
- </tr>
- </xsl:if>
- </table>&lf;
-
- <!-- Summary of module features/usage (1 to 3 paragraphs, -->
- <!-- optional) -->
- <xsl:if test="summary">
- <h3>
- <xsl:value-of select="$message
- [@id='summary']" />
- </h3>&lf;
-
- <xsl:apply-templates select="summary" />
- </xsl:if>
- </div>&lf; <!-- /#preamble -->
-
- <xsl:if test="not($is-chm) or seealso">
- <div id="quickview">
- <xsl:if test="not($is-chm)">
- <h3 class="directives">
- <xsl:value-of select="$message
- [@id='directives']" />
- </h3>&lf;
-
- <xsl:choose>
- <xsl:when test="directivesynopsis">
- <ul id="toc">&lf;
- <xsl:for-each select="directivesynopsis">
- <xsl:sort select="name" />
- <xsl:variable name="lowername"
- select="translate(name, $uppercase,
- $lowercase)" />
-
- <xsl:choose>
- <xsl:when test="not(@location)">
- <li>
- <img src="{$path}/images/down.gif"
- alt="" />
- <xsl:text> </xsl:text>
- <a href="#{$lowername}">
- <xsl:if test="@type='section'"
- >&lt;</xsl:if>
- <xsl:value-of select="name" />
- <xsl:if test="@type='section'"
- >&gt;</xsl:if>
- </a>
- </li>&lf;
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="lowerlocation"
- select="translate(@location, $uppercase,
- $lowercase)" />
- <li>
- <img src="{$path}/images/right.gif"
- alt="" />
- <xsl:text> </xsl:text>
- <a href="{$lowerlocation}.html#{
- $lowername}">
- <xsl:if test="@type='section'"
- >&lt;</xsl:if>
- <xsl:value-of select="name" />
- <xsl:if test="@type='section'"
- >&gt;</xsl:if>
- </a>
- </li>&lf;
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- </ul>&lf; <!-- /toc -->
- </xsl:when> <!-- have directives -->
-
- <xsl:otherwise>
- <p>
- <xsl:value-of select="$message
- [@id='nodirectives']" />
- </p>&lf;
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:if test="section">
- <h3>
- <xsl:value-of select="$message
- [@id='topics']" />
- </h3>&lf;
-
- <ul id="topics">&lf;
- <xsl:apply-templates
- select="section" mode="index" />
- </ul>
- </xsl:if>
- </xsl:if> <!-- /!is-chm -->
-
- <xsl:if test="seealso">
- <h3>
- <xsl:value-of select="$message
- [@id='seealso']" />
- </h3>&lf;
-
- <ul class="seealso">&lf;
- <xsl:for-each select="seealso">
- <li>
- <xsl:apply-templates />
- </li>&lf;
- </xsl:for-each>
- </ul>
- </xsl:if>
- </div> <!-- /#quickview -->
- </xsl:if>&lf; <!-- have sidebar -->
-
- <!-- Sections of documentation about the module as a whole -->
- <xsl:apply-templates select="section" />&lf;
-
- <!-- Directive documentation -->
- <xsl:apply-templates select="directivesynopsis">
- <xsl:sort select="name" />
- </xsl:apply-templates>
- </div>&lf; <!-- /#page-content -->
-
- <xsl:call-template name="bottom" />&lf;
- </body>
-</html>
-</xsl:template>
-<!-- /modulesynopsis -->
-
-
-<!-- ==================================================================== -->
-<!-- Directivesynopsis -->
-<!-- ==================================================================== -->
-<xsl:template match="directivesynopsis">
-<xsl:if test="not(@location)">
- <xsl:call-template name="toplink" />&lf;
-
- <div class="directive-section">
- <xsl:variable name="lowername"
- select="translate(name, $uppercase, $lowercase)" />
-
- <!-- Directive heading gets both mixed case and lowercase -->
- <!-- anchors, and includes lt/gt only for "section" directives -->
- <h2>
- <a id="{name}" name="{name}">
- <xsl:if test="@type='section'">&lt;</xsl:if>
- <xsl:value-of select="name" />
- <xsl:if test="@type='section'">&gt;</xsl:if>
- </a>
-
- <xsl:choose>
- <xsl:when test="$message
- [@id='directive']/@replace-space-with">
- <xsl:value-of select="$message
- [@id='directive']/@replace-space-with"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text> </xsl:text>
- </xsl:otherwise>
- </xsl:choose>
-
- <a id="{$lowername}" name="{$lowername}">
- <xsl:value-of select="$message[@id='directive']" />
- </a>
- </h2>&lf;
-
- <!-- Directive header -->
- <table class="directive">&lf;
- <tr>
- <th>
- <a href="directive-dict.html#Description">
- <xsl:value-of select="$message
- [@id='description']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:value-of select="description" />
- </td>
- </tr>&lf;
-
- <tr>
- <th>
- <a href="directive-dict.html#Syntax">
- <xsl:value-of select="$message[@id='syntax']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <code>
- <xsl:apply-templates select="syntax" />
- </code>
- </td>
- </tr>
-
- <xsl:if test="default">&lf;
- <tr>
- <th>
- <a href="directive-dict.html#Default">
- <xsl:value-of select="$message[@id='default']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <code>
- <xsl:apply-templates select="default" />
- </code>
- </td>
- </tr>
- </xsl:if>&lf;
-
- <tr>
- <th>
- <a href="directive-dict.html#Context">
- <xsl:value-of select="$message[@id='context']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:apply-templates select="contextlist" />
- </td>
- </tr>
-
- <xsl:if test="override">&lf;
- <tr>
- <th>
- <a href="directive-dict.html#Override">
- <xsl:value-of select="$message[@id='override']"/>
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:value-of select="override" />
- </td>
- </tr>
- </xsl:if>&lf;
-
- <tr>
- <th>
- <a href="directive-dict.html#Status">
- <xsl:value-of select="$message[@id='status']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:value-of select="../status" />
- </td>
- </tr>&lf;
-
- <tr>
- <th>
- <a href="directive-dict.html#Module">
- <xsl:value-of select="$message[@id='module']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:choose>
- <xsl:when test="modulelist">
- <xsl:apply-templates select="modulelist" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="../name" />
- </xsl:otherwise>
- </xsl:choose>
- </td>
- </tr>
-
- <xsl:if test="compatibility">&lf;
- <tr>
- <th>
- <a href="directive-dict.html#Compatibility">
- <xsl:value-of select="$message
- [@id='compatibility']" />
- <xsl:text>:</xsl:text>
- </a>
- </th>
- <td>
- <xsl:apply-templates select="compatibility" />
- </td>
- </tr>
- </xsl:if>&lf;
- </table>
-
- <xsl:apply-templates select="usage" />&lf;
-
- <xsl:if test="seealso">
- <h3>
- <xsl:value-of select="$message[@id='seealso']" />
- </h3>&lf;
-
- <ul>&lf;
- <xsl:for-each select="seealso">
- <li>
- <xsl:apply-templates />
- </li>&lf;
- </xsl:for-each>
- </ul>&lf;
- </xsl:if>
- </div>&lf; <!-- /.directive-section -->
-</xsl:if>
-</xsl:template>
-<!-- /directivesynopsis -->
-
-
-<!-- ==================================================================== -->
-<!-- <contextlist> -->
-<!-- ==================================================================== -->
-<xsl:template match="contextlist">
-<xsl:apply-templates select="context" />
-</xsl:template>
-<!-- /contextlist -->
-
-
-<!-- ==================================================================== -->
-<!-- <context> -->
-<!-- Each entry is separeted with a comma -->
-<!-- ==================================================================== -->
-<xsl:template match="context">
-<xsl:choose>
-<xsl:when test="normalize-space(.) = 'server config'">
- <xsl:value-of select="$message[@id='serverconfig']" />
-</xsl:when>
-<xsl:when test="normalize-space(.) = 'virtual host'">
- <xsl:value-of select="$message[@id='virtualhost']" />
-</xsl:when>
-<xsl:when test="normalize-space(.) = 'directory'">
- <xsl:value-of select="$message[@id='directory']" />
-</xsl:when>
-<xsl:when test="normalize-space(.) = '.htaccess'">
- <xsl:value-of select="$message[@id='htaccess']" />
-</xsl:when>
-<xsl:otherwise> <!-- error -->
- <xsl:message terminate="yes">
- unknown context: <xsl:value-of select="." />
- </xsl:message>
-</xsl:otherwise>
-</xsl:choose>
-
-<xsl:if test="position() != last()">
- <xsl:text>, </xsl:text>
-</xsl:if>
-</xsl:template>
-<!-- /context -->
-
-
-<!-- ==================================================================== -->
-<!-- <modulelist> -->
-<!-- ==================================================================== -->
-<xsl:template match="modulelist">
-<xsl:for-each select="module">
- <xsl:call-template name="module" />
- <xsl:if test="position() != last()">
- <xsl:text>, </xsl:text>
- </xsl:if>
-</xsl:for-each>
-</xsl:template>
-<!-- /modulelist -->
-
-
-<!-- ==================================================================== -->
-<!-- modulesynopsis/compatibility -->
-<!-- ==================================================================== -->
-<xsl:template match="modulesynopsis/compatibility">
-<xsl:apply-templates />
-</xsl:template>
-
-
-<!-- ==================================================================== -->
-<!-- directivesynopsis/compatibility -->
-<!-- ==================================================================== -->
-<xsl:template match="directivesynopsis/compatibility">
-<xsl:apply-templates />
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/typemap.xsl b/docs/manual/style/xsl/typemap.xsl
deleted file mode 100644
index 048de661bb..0000000000
--- a/docs/manual/style/xsl/typemap.xsl
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!DOCTYPE xsl:stylesheet [
- <!ENTITY lf SYSTEM "util/lf.xml">
-]>
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="">
-
-<xsl:output
- method="text"
- encoding="utf-8"
- indent="no"
-/>
-
-<!-- create nodeset for referencing later -->
-<xsl:variable name="design" select="document('util/designations.xml')
- /items/item" />
-
-<!-- Constants used for case translation -->
-<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
-<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
-
-<!-- ==================================================================== -->
-<!-- <metafile> -->
-<!-- build typemap -->
-<!-- ==================================================================== -->
-<xsl:template match="/metafile">
-<xsl:apply-templates select="variants/variant" />
-</xsl:template>
-<!-- /metafile -->
-
-<!-- ==================================================================== -->
-<!-- <variant> -->
-<!-- ==================================================================== -->
-<xsl:template match="variant">
-<xsl:variable name="lang" select="translate(., $uppercase, $lowercase)" />
-<xsl:if test="not($design[translate(@lang, $uppercase, $lowercase) = $lang])">
- <xsl:message terminate="yes">
-FATAL: missing designation data for language <xsl:value-of select="." />.
-The XSLT-Stylesheet won't work without modification.
- </xsl:message>
-</xsl:if>
-
-<xsl:text>URI: </xsl:text>
-<xsl:value-of select="/metafile/basename" />
-<xsl:value-of select="$design[translate(@lang, $uppercase, $lowercase)
- = $lang]" />&lf;
-
-<xsl:text>Content-Language: </xsl:text>
-<xsl:value-of select="$design[translate(@lang, $uppercase, $lowercase)
- = $lang]/@lang" />&lf;
-
-<xsl:text>Content-type: text/html; charset=</xsl:text>
-<xsl:value-of select="$design[translate(@lang, $uppercase, $lowercase)
- = $lang]/@charset" />&lf;
-
-<xsl:if test="position() != last()">&lf;</xsl:if>
-</xsl:template>
-<!-- /variant -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/util/allmodules.xml b/docs/manual/style/xsl/util/allmodules.xml
deleted file mode 100644
index 7d99447995..0000000000
--- a/docs/manual/style/xsl/util/allmodules.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<items>
-<item lang="de">../../../mod/allmodules.xml.de</item>
-<item lang="en">../../../mod/allmodules.xml</item>
-<item lang="es">../../../mod/allmodules.xml.es</item>
-<item lang="fr">../../../mod/allmodules.xml.fr</item>
-<item lang="ja">../../../mod/allmodules.xml.ja</item>
-<item lang="ko">../../../mod/allmodules.xml.ko</item>
-<item lang="ru">../../../mod/allmodules.xml.ru</item>
-</items> \ No newline at end of file
diff --git a/docs/manual/style/xsl/util/designations.xml b/docs/manual/style/xsl/util/designations.xml
deleted file mode 100644
index d82cf5195f..0000000000
--- a/docs/manual/style/xsl/util/designations.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<items>
-<item charset="ISO-8859-1" lang="de">.html.de</item>
-<item charset="ISO-8859-1" lang="en">.html.en</item>
-<item charset="ISO-8859-1" lang="es">.html.es</item>
-<item charset="ISO-8859-1" lang="fr">.html.fr</item>
-<item charset="EUC-JP" lang="ja">.html.ja.euc-jp</item>
-<item charset="EUC-KR" lang="ko">.html.ko.euc-kr</item>
-<item charset="KOI8-R" lang="ru">.html.ru.koi8-r</item>
-</items>
diff --git a/docs/manual/style/xsl/util/lf.xml b/docs/manual/style/xsl/util/lf.xml
deleted file mode 100644
index 1ee21592d5..0000000000
--- a/docs/manual/style/xsl/util/lf.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&#xA;</xsl:text>
diff --git a/docs/manual/style/xsl/util/li-end.xml b/docs/manual/style/xsl/util/li-end.xml
deleted file mode 100644
index 94ef8a70b7..0000000000
--- a/docs/manual/style/xsl/util/li-end.xml
+++ /dev/null
@@ -1 +0,0 @@
-<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&lt;/li&gt;</xsl:text>
diff --git a/docs/manual/style/xsl/util/li-start.xml b/docs/manual/style/xsl/util/li-start.xml
deleted file mode 100644
index 2cf57ca916..0000000000
--- a/docs/manual/style/xsl/util/li-start.xml
+++ /dev/null
@@ -1 +0,0 @@
-<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&lt;li&gt;</xsl:text>
diff --git a/docs/manual/style/xsl/util/modtrans.xsl b/docs/manual/style/xsl/util/modtrans.xsl
deleted file mode 100644
index 00f08ce896..0000000000
--- a/docs/manual/style/xsl/util/modtrans.xsl
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:template name="module-translatename">
-<xsl:param name="name" />
-
-<xsl:variable name="sname" select="translate($name, $lowercase, $uppercase)" />
-
-<xsl:choose>
-<xsl:when test="starts-with($sname, 'MOD_') or starts-with($sname, 'MPM_')">
- <xsl:value-of select="substring($name, 5)" />
-</xsl:when>
-
-<xsl:when test="starts-with($sname, 'MPMT_')">
- <xsl:value-of select="substring($name, 6)" />
-</xsl:when>
-
-<xsl:otherwise>
- <xsl:value-of select="$name" />
-</xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-<!-- /module-translatename -->
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/xsl/util/nbsp.xml b/docs/manual/style/xsl/util/nbsp.xml
deleted file mode 100644
index a6b7a0622a..0000000000
--- a/docs/manual/style/xsl/util/nbsp.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<xsl:text disable-output-escaping="yes" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&amp;nbsp;</xsl:text>
diff --git a/docs/manual/style/xsl/util/tab.xml b/docs/manual/style/xsl/util/tab.xml
deleted file mode 100644
index 594be38547..0000000000
--- a/docs/manual/style/xsl/util/tab.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&#x9;</xsl:text>
diff --git a/docs/manual/style/xsl/util/ul-end.xml b/docs/manual/style/xsl/util/ul-end.xml
deleted file mode 100644
index 347e2c2e97..0000000000
--- a/docs/manual/style/xsl/util/ul-end.xml
+++ /dev/null
@@ -1 +0,0 @@
-<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&lt;/ul&gt;</xsl:text>
diff --git a/docs/manual/style/xsl/util/ul-start.xml b/docs/manual/style/xsl/util/ul-start.xml
deleted file mode 100644
index efd15f5712..0000000000
--- a/docs/manual/style/xsl/util/ul-start.xml
+++ /dev/null
@@ -1 +0,0 @@
-<xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&lt;ul&gt;</xsl:text>
diff --git a/docs/manual/suexec.html b/docs/manual/suexec.html
deleted file mode 100644
index 9d5e3a86ca..0000000000
--- a/docs/manual/suexec.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: suexec.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: suexec.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: suexec.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/suexec.html.en b/docs/manual/suexec.html.en
deleted file mode 100644
index 565213c108..0000000000
--- a/docs/manual/suexec.html.en
+++ /dev/null
@@ -1,607 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>suEXEC Support - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>suEXEC Support</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/suexec.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>The <strong>suEXEC</strong> feature provides
- Apache users the ability
- to run <strong>CGI</strong> and <strong>SSI</strong> programs
- under user IDs different from the user ID of the calling
- web-server. Normally, when a CGI or SSI program executes, it
- runs as the same user who is running the web server.</p>
-
- <p>Used properly, this feature can reduce
- considerably the security risks involved with allowing users to
- develop and run private CGI or SSI programs. However, if suEXEC
- is improperly configured, it can cause any number of problems
- and possibly create new holes in your computer's security. If
- you aren't familiar with managing <em>setuid root</em> programs
- and the security issues they present, we highly recommend that
- you not consider using suEXEC.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#before">Before we begin</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#model">suEXEC Security Model</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">Configuring &amp; Installing
- suEXEC</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#enable">Enabling &amp; Disabling
- suEXEC</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#usage">Using suEXEC</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#debug">Debugging suEXEC</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#jabberwock">Beware the Jabberwock:
- Warnings &amp; Examples</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="before" id="before">Before we begin</a></h2>
-
- <p>Before jumping head-first into this document,
- you should be aware of the assumptions made on the part of the
- Apache Group and this document.</p>
-
- <p>First, it is assumed that you are using a UNIX
- derivative operating system that is capable of
- <strong>setuid</strong> and <strong>setgid</strong> operations.
- All command examples are given in this regard. Other platforms,
- if they are capable of supporting suEXEC, may differ in their
- configuration.</p>
-
- <p>Second, it is assumed you are familiar with
- some basic concepts of your computer's security and its
- administration. This involves an understanding of
- <strong>setuid/setgid</strong> operations and the various
- effects they may have on your system and its level of
- security.</p>
-
- <p>Third, it is assumed that you are using an
- <strong>unmodified</strong> version of suEXEC code. All code
- for suEXEC has been carefully scrutinized and tested by the
- developers as well as numerous beta testers. Every precaution
- has been taken to ensure a simple yet solidly safe base of
- code. Altering this code can cause unexpected problems and new
- security risks. It is <strong>highly</strong> recommended you
- not alter the suEXEC code unless you are well versed in the
- particulars of security programming and are willing to share
- your work with the Apache Group for consideration.</p>
-
- <p>Fourth, and last, it has been the decision of
- the Apache Group to <strong>NOT</strong> make suEXEC part of
- the default installation of Apache. To this end, suEXEC
- configuration requires of the administrator careful attention
- to details. After due consideration has been given to the
- various settings for suEXEC, the administrator may install
- suEXEC through normal installation methods. The values for
- these settings need to be carefully determined and specified by
- the administrator to properly maintain system security during
- the use of suEXEC functionality. It is through this detailed
- process that the Apache Group hopes to limit suEXEC
- installation only to those who are careful and determined
- enough to use it.</p>
-
- <p>Still with us? Yes? Good. Let's move on!</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="model" id="model">suEXEC Security Model</a></h2>
-
- <p>Before we begin configuring and installing
- suEXEC, we will first discuss the security model you are about
- to implement. By doing so, you may better understand what
- exactly is going on inside suEXEC and what precautions are
- taken to ensure your system's security.</p>
-
- <p><strong>suEXEC</strong> is based on a setuid
- "wrapper" program that is called by the main Apache web server.
- This wrapper is called when an HTTP request is made for a CGI
- or SSI program that the administrator has designated to run as
- a userid other than that of the main server. When such a
- request is made, Apache provides the suEXEC wrapper with the
- program's name and the user and group IDs under which the
- program is to execute.</p>
-
- <p>The wrapper then employs the following process
- to determine success or failure -- if any one of these
- conditions fail, the program logs the failure and exits with an
- error, otherwise it will continue:</p>
-
- <ol>
- <li>
- <strong>Is the user executing this wrapper a valid user of
- this system?</strong>
-
- <p class="indent">
- This is to ensure that the user executing the wrapper is
- truly a user of the system.
- </p>
- </li>
-
- <li>
- <strong>Was the wrapper called with the proper number of
- arguments?</strong>
-
- <p class="indent">
- The wrapper will only execute if it is given the proper
- number of arguments. The proper argument format is known
- to the Apache web server. If the wrapper is not receiving
- the proper number of arguments, it is either being
- hacked, or there is something wrong with the suEXEC
- portion of your Apache binary.
- </p>
- </li>
-
- <li>
- <strong>Is this valid user allowed to run the
- wrapper?</strong>
-
- <p class="indent">
- Is this user the user allowed to run this wrapper? Only
- one user (the Apache user) is allowed to execute this
- program.
- </p>
- </li>
-
- <li>
- <strong>Does the target CGI or SSI program have an unsafe
- hierarchical reference?</strong>
-
- <p class="indent">
- Does the target CGI or SSI program's path contain a leading
- '/' or have a '..' backreference? These are not allowed; the
- target CGI/SSI program must reside within suEXEC's document
- root (see <code>--with-suexec-docroot=<em>DIR</em></code>
- below).
- </p>
- </li>
-
- <li>
- <strong>Is the target user name valid?</strong>
-
- <p class="indent">
- Does the target user exist?
- </p>
- </li>
-
- <li>
- <strong>Is the target group name valid?</strong>
-
- <p class="indent">
- Does the target group exist?
- </p>
- </li>
-
- <li>
- <strong>Is the target user <em>NOT</em> superuser?</strong>
-
-
- <p class="indent">
- Presently, suEXEC does not allow <code><em>root</em></code>
- to execute CGI/SSI programs.
- </p>
- </li>
-
- <li>
- <strong>Is the target userid <em>ABOVE</em> the minimum ID
- number?</strong>
-
- <p class="indent">
- The minimum user ID number is specified during
- configuration. This allows you to set the lowest possible
- userid that will be allowed to execute CGI/SSI programs.
- This is useful to block out "system" accounts.
- </p>
- </li>
-
- <li>
- <strong>Is the target group <em>NOT</em> the superuser
- group?</strong>
-
- <p class="indent">
- Presently, suEXEC does not allow the <code><em>root</em></code>
- group to execute CGI/SSI programs.
- </p>
- </li>
-
- <li>
- <strong>Is the target groupid <em>ABOVE</em> the minimum ID
- number?</strong>
-
- <p class="indent">
- The minimum group ID number is specified during
- configuration. This allows you to set the lowest possible
- groupid that will be allowed to execute CGI/SSI programs.
- This is useful to block out "system" groups.
- </p>
- </li>
-
- <li>
- <strong>Can the wrapper successfully become the target user
- and group?</strong>
-
- <p class="indent">
- Here is where the program becomes the target user and
- group via setuid and setgid calls. The group access list
- is also initialized with all of the groups of which the
- user is a member.
- </p>
- </li>
-
- <li>
- <strong>Can we change directory to the one in which the target
- CGI/SSI program resides?</strong>
-
- <p class="indent">
- If it doesn't exist, it can't very well contain files. If we
- can't change directory to it, it might aswell not exist.
- </p>
- </li>
-
- <li>
- <strong>Is the directory within the Apache
- webspace?</strong>
-
- <p class="indent">
- If the request is for a regular portion of the server, is
- the requested directory within suEXEC's document root? If
- the request is for a UserDir, is the requested directory
- within the directory configured as suEXEC's userdir (see
- <a href="#install">suEXEC's configuration options</a>)?
- </p>
- </li>
-
- <li>
- <strong>Is the directory <em>NOT</em> writable by anyone
- else?</strong>
-
- <p class="indent">
- We don't want to open up the directory to others; only
- the owner user may be able to alter this directories
- contents.
- </p>
- </li>
-
- <li>
- <strong>Does the target CGI/SSI program exist?</strong>
-
- <p class="indent">
- If it doesn't exists, it can't very well be executed.
- </p>
- </li>
-
- <li>
- <strong>Is the target CGI/SSI program <em>NOT</em> writable
- by anyone else?</strong>
-
- <p class="indent">
- We don't want to give anyone other than the owner the
- ability to change the CGI/SSI program.
- </p>
- </li>
-
- <li>
- <strong>Is the target CGI/SSI program <em>NOT</em> setuid or
- setgid?</strong>
-
- <p class="indent">
- We do not want to execute programs that will then change
- our UID/GID again.
- </p>
- </li>
-
- <li>
- <strong>Is the target user/group the same as the program's
- user/group?</strong>
-
- <p class="indent">
- Is the user the owner of the file?
- </p>
- </li>
-
- <li>
- <strong>Can we successfully clean the process environment
- to ensure safe operations?</strong>
-
- <p class="indent">
- suEXEC cleans the process' environment by establishing a
- safe execution PATH (defined during configuration), as
- well as only passing through those variables whose names
- are listed in the safe environment list (also created
- during configuration).
- </p>
- </li>
-
- <li>
- <strong>Can we successfully become the target CGI/SSI program
- and execute?</strong>
-
- <p class="indent">
- Here is where suEXEC ends and the target CGI/SSI program begins.
- </p>
- </li>
- </ol>
-
- <p>This is the standard operation of the
- suEXEC wrapper's security model. It is somewhat stringent and
- can impose new limitations and guidelines for CGI/SSI design,
- but it was developed carefully step-by-step with security in
- mind.</p>
-
- <p>For more information as to how this security
- model can limit your possibilities in regards to server
- configuration, as well as what security risks can be avoided
- with a proper suEXEC setup, see the <a href="#jabberwock">"Beware the Jabberwock"</a> section of this
- document.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">Configuring &amp; Installing
- suEXEC</a></h2>
-
- <p>Here's where we begin the fun.</p>
-
- <p><strong>suEXEC configuration
- options</strong><br />
- </p>
-
- <dl>
- <dt><code>--enable-suexec</code></dt>
-
- <dd>This option enables the suEXEC feature which is never
- installed or activated by default. At least one
- <code>--with-suexec-xxxxx</code> option has to be provided
- together with the <code>--enable-suexec</code> option to let
- APACI accept your request for using the suEXEC feature.</dd>
-
- <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
-
- <dd>The path to the <code>suexec</code> binary must be hard-coded
- in the server for security reasons. Use this option to override
- the default path. <em>e.g.</em>
- <code>--with-suexec-bin=/usr/sbin/suexec</code></dd>
-
- <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
-
- <dd>The <a href="mod/mpm_common.html#user">username</a> under which
- Apache normally runs. This is the only user allowed to
- execute this program.</dd>
-
- <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
-
- <dd>Define to be the subdirectory under users' home
- directories where suEXEC access should be allowed. All
- executables under this directory will be executable by suEXEC
- as the user so they should be "safe" programs. If you are
- using a "simple" UserDir directive (ie. one without a "*" in
- it) this should be set to the same value. suEXEC will not
- work properly in cases where the UserDir directive points to
- a location that is not the same as the user's home directory
- as referenced in the passwd file. Default value is
- "public_html".<br />
- If you have virtual hosts with a different UserDir for each,
- you will need to define them to all reside in one parent
- directory; then name that parent directory here. <strong>If
- this is not defined properly, "~userdir" cgi requests will
- not work!</strong></dd>
-
- <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
-
- <dd>Define as the DocumentRoot set for Apache. This will be
- the only hierarchy (aside from UserDirs) that can be used for
- suEXEC behavior. The default directory is the <code>--datadir</code>
- value with the suffix "/htdocs", <em>e.g.</em> if you configure
- with "<code>--datadir=/home/apache</code>" the directory
- "/home/apache/htdocs" is used as document root for the suEXEC
- wrapper.</dd>
-
- <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
-
- <dd>Define this as the lowest UID allowed to be a target user
- for suEXEC. For most systems, 500 or 100 is common. Default
- value is 100.</dd>
-
- <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
-
- <dd>Define this as the lowest GID allowed to be a target
- group for suEXEC. For most systems, 100 is common and
- therefore used as default value.</dd>
-
- <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
-
- <dd>This defines the filename to which all suEXEC
- transactions and errors are logged (useful for auditing and
- debugging purposes). By default the logfile is named
- "suexec_log" and located in your standard logfile directory
- (<code>--logfiledir</code>).</dd>
-
- <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
-
- <dd>Define a safe PATH environment to pass to CGI
- executables. Default value is
- "/usr/local/bin:/usr/bin:/bin".</dd>
- </dl>
-
- <p><strong>Compiling and installing the suEXEC
- wrapper</strong><br />
- If you have enabled the suEXEC feature with the
- <code>--enable-suexec</code> option the <code>suexec</code> binary
- (together with Apache itself) is automatically built if you execute
- the <code>make</code> command.<br />
- After all components have been built you can execute the
- command <code>make install</code> to install them. The binary image
- <code>suexec</code> is installed in the directory defined by the
- <code>--sbindir</code> option. The default location is
- "/usr/local/apache2/sbin/suexec".<br />
- Please note that you need <strong><em>root
- privileges</em></strong> for the installation step. In order
- for the wrapper to set the user ID, it must be installed as
- owner <code><em>root</em></code> and must have the setuserid
- execution bit set for file modes.</p>
-
- <p><strong>Setting paranoid permissions</strong><br />
- Although the suEXEC wrapper will check to ensure that its
- caller is the correct user as specified with the
- <code>--with-suexec-caller</code> configure option, there is
- always the possibility that a system or library call suEXEC uses
- before this check may be exploitable on your system. To counter
- this, and because it is best-practise in general, you should use
- filesystem permissions to ensure that only the group Apache
- runs as may execute suEXEC.</p>
-
- <p>If for example, your web-server is configured to run as:</p>
-
-<div class="example"><p><code>
- User www<br />
- Group webgroup<br />
-</code></p></div>
-
- <p>and <code>suexec</code> is installed at
- "/usr/local/apache2/sbin/suexec", you should run:</p>
-
-<div class="example"><p><code>
- chgrp webgroup /usr/local/apache2/bin/suexec<br />
- chmod 4750 /usr/local/apache2/bin/suexec<br />
-</code></p></div>
-
- <p>This will ensure that only the group Apache runs as can even
- execute the suEXEC wrapper.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Enabling &amp; Disabling
- suEXEC</a></h2>
-
- <p>Upon startup of Apache, it looks for the file
- <code>suexec</code> in the directory defined by the
- <code>--sbindir</code> option (default is
- "/usr/local/apache/sbin/suexec"). If Apache finds a properly
- configured suEXEC wrapper, it will print the following message
- to the error log:</p>
-
-<div class="example"><p><code>
- [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</code></p></div>
-
- <p>If you don't see this message at server startup, the server is
- most likely not finding the wrapper program where it expects
- it, or the executable is not installed <em>setuid root</em>.</p>
-
- <p>If you want to enable the suEXEC mechanism for the first time
- and an Apache server is already running you must kill and
- restart Apache. Restarting it with a simple HUP or USR1 signal
- will not be enough. </p>
- <p>If you want to disable suEXEC you should kill and restart
- Apache after you have removed the <code>suexec</code> file. </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">Using suEXEC</a></h2>
-
- <p>Requests for CGI programs will call the suEXEC wrapper only if
- they are for a virtual host containing a <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> directive or if
- they are processed by <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>.</p>
-
- <p><strong>Virtual Hosts:</strong><br /> One way to use the suEXEC
- wrapper is through the <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> directive in
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> definitions. By
- setting this directive to values different from the main server
- user ID, all requests for CGI resources will be executed as the
- <em>User</em> and <em>Group</em> defined for that <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>. If this
- directive is not specified for a <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> then the main server userid
- is assumed.</p>
-
- <p><strong>User directories:</strong><br /> Requests that are
- processed by <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> will call the suEXEC
- wrapper to execute CGI programs under the userid of the requested
- user directory. The only requirement needed for this feature to
- work is for CGI execution to be enabled for the user and that the
- script must meet the scrutiny of the <a href="#model">security
- checks</a> above. See also the
- <code>--with-suexec-userdir</code> <a href="#install">compile
- time option</a>.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="debug" id="debug">Debugging suEXEC</a></h2>
-
- <p>The suEXEC wrapper will write log information
- to the file defined with the <code>--with-suexec-logfile</code>
- option as indicated above. If you feel you have configured and
- installed the wrapper properly, have a look at this log and the
- error_log for the server to see where you may have gone astray.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="jabberwock" id="jabberwock">Beware the Jabberwock:
- Warnings &amp; Examples</a></h2>
-
- <p><strong>NOTE!</strong> This section may not be
- complete. For the latest revision of this section of the
- documentation, see the Apache Group's <a href="http://httpd.apache.org/docs-2.1/suexec.html">Online
- Documentation</a> version.</p>
-
- <p>There are a few points of interest regarding
- the wrapper that can cause limitations on server setup. Please
- review these before submitting any "bugs" regarding suEXEC.</p>
-
- <ul>
- <li><strong>suEXEC Points Of Interest</strong></li>
-
- <li>
- Hierarchy limitations
-
- <p class="indent">
- For security and efficiency reasons, all suEXEC requests
- must remain within either a top-level document root for
- virtual host requests, or one top-level personal document
- root for userdir requests. For example, if you have four
- VirtualHosts configured, you would need to structure all
- of your VHosts' document roots off of one main Apache
- document hierarchy to take advantage of suEXEC for
- VirtualHosts. (Example forthcoming.)
- </p>
- </li>
-
- <li>
- suEXEC's PATH environment variable
-
- <p class="indent">
- This can be a dangerous thing to change. Make certain
- every path you include in this define is a
- <strong>trusted</strong> directory. You don't want to
- open people up to having someone from across the world
- running a trojan horse on them.
- </p>
- </li>
-
- <li>
- Altering the suEXEC code
-
- <p class="indent">
- Again, this can cause <strong>Big Trouble</strong> if you
- try this without knowing what you are doing. Stay away
- from it if at all possible.
- </p>
- </li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/suexec.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/suexec.html.ja.euc-jp b/docs/manual/suexec.html.ja.euc-jp
deleted file mode 100644
index 271244a03e..0000000000
--- a/docs/manual/suexec.html.ja.euc-jp
+++ /dev/null
@@ -1,609 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>suEXEC ¥µ¥Ý¡¼¥È - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>suEXEC ¥µ¥Ý¡¼¥È</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/suexec.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><strong>suEXEC</strong>
- µ¡Ç½¤Ë¤è¤ê¡¢Apache ¥æ¡¼¥¶¤Ï Web ¥µ¡¼¥Ð¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥æ¡¼¥¶ ID ¤È¤Ï
- °Û¤Ê¤ë¥æ¡¼¥¶ ID ¤Ç <strong>CGI</strong> ¥×¥í¥°¥é¥à¤ä <strong>SSI</strong>
- ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£CGI ¥×¥í¥°¥é¥à¤Þ¤¿¤Ï SSI
- ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¾ì¹ç¡¢Ä̾ï¤Ï web ¥µ¡¼¥Ð¤ÈƱ¤¸¥æ¡¼¥¶¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
- </p>
-
- <p>ŬÀڤ˻ÈÍѤ¹¤ë¤È¡¢¤³¤Îµ¡Ç½¤Ë¤è¤ê¥æ¡¼¥¶¤¬¸ÄÊ̤ΠCGI
- ¤ä SSI ¥×¥í¥°¥é¥à¤ò³«È¯¤·¼Â¹Ô¤¹¤ë¤³¤È¤ÇÀ¸¤¸¤ë¥»¥­¥å¥ê¥Æ¥£¾å¤Î´í¸±¤ò¡¢
- ¤«¤Ê¤ê¸º¤é¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢suEXEC ¤ÎÀßÄ꤬ÉÔŬÀÚ¤À¤È¡¢
- ¿¤¯¤ÎÌäÂ꤬À¸¤¸¡¢¤¢¤Ê¤¿¤Î¥³¥ó¥Ô¥å¡¼¥¿¤Ë¿·¤·¤¤¥»¥­¥å¥ê¥Æ¥£¥Û¡¼¥ë¤ò
- ºî¤Ã¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤¢¤Ê¤¿¤¬ <em>setuid root</em>
- ¤µ¤ì¤¿¥×¥í¥°¥é¥à¤È¡¢¤½¤ì¤é¤«¤éÀ¸¤¸¤ë¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÌäÂê¤Î´ÉÍý¤Ë
- ¾Ü¤·¤¯¤Ê¤¤¤è¤¦¤Ê¤é¡¢suEXEC ¤Î»ÈÍѤò¸¡Æ¤¤·¤Ê¤¤¤è¤¦¤Ë¶¯¤¯¿ä¾©¤·¤Þ¤¹¡£
- </p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#before">»Ï¤á¤ëÁ°¤Ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#model">suEXEC ¥»¥­¥å¥ê¥Æ¥£¥â¥Ç¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">suEXEC
- ¤ÎÀßÄê¤È¥¤¥ó¥¹¥È¡¼¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#enable">suEXEC
- ¤ÎÍ­¸ú²½¤È̵¸ú²½</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#usage">suEXEC ¤Î»ÈÍÑ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#debug">suEXEC ¤Î¥Ç¥Ð¥Ã¥°</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#jabberwock">¤È¤«¤²¤ËÃí°Õ: ·Ù¹ð¤È»öÎã</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="before" id="before">»Ï¤á¤ëÁ°¤Ë</a></h2>
-
- <p>¤³¤Îʸ½ñ¤ÎÀèƬ¤ËÈô¤ÖÁ°¤Ë¡¢Apache
- ¥°¥ë¡¼¥×¤È¤³¤Îʸ½ñ¤Ç¤Î²¾Äê¤òÃΤäƤª¤¯¤Ù¤­¤Ç¤·¤ç¤¦¡£
- </p>
-
- <p>Âè 1 ¤Ë¡¢¤¢¤Ê¤¿¤¬ <strong>setuid</strong> ¤È
- <strong>setgid</strong> Áàºî¤¬²Äǽ¤Ê UNIX
- ͳÍè¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ò»È¤Ã¤Æ¤¤¤ë¤³¤È¤òÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£
- ¤³¤ì¤Ï¡¢¤¹¤Ù¤Æ¤Î¥³¥Þ¥ó¥ÉÎã¤Ë¤¢¤Æ¤Ï¤Þ¤ê¤Þ¤¹¡£
- ¤½¤Î¾¤Î¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤Ï¡¢¤â¤· suEXEC
- ¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤¿¤È¤·¤Æ¤âÀßÄê¤Ï°Û¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <p>Âè 2 ¤Ë¡¢¤¢¤Ê¤¿¤¬»ÈÍÑÃæ¤Î¥³¥ó¥Ô¥å¡¼¥¿¤Î
- ¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø¤¹¤ë´ðËÜŪ¤Ê³µÇ°¤È¡¢¤½¤ì¤é¤Î´ÉÍý¤Ë¤Ä¤¤¤Æ¾Ü¤·¤¤¤³¤È¤ò
- ÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¡¢<strong>setuid/setgid</strong>
- Áàºî¡¢¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à¾å¤Ç¤Î¤½¤ÎÁàºî¤Ë¤è¤ëÍÍ¡¹¤Ê¸ú²Ì¡¢
- ¥»¥­¥å¥ê¥Æ¥£¥ì¥Ù¥ë¤Ë¤Ä¤¤¤Æ¤¢¤Ê¤¿¤¬Íý²ò¤·¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤ò´Þ¤ß¤Þ¤¹¡£
- </p>
-
- <p>Âè 3 ¤Ë¡¢<strong>²þ¤¤µ¤ì¤Æ¤¤¤Ê¤¤</strong> suEXEC
- ¥³¡¼¥É¤Î»ÈÍѤòÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£suEXEC ¤Î¥³¡¼¥É¤Ï¡¢
- ¿¤¯¤Î¥Ù¡¼¥¿¥Æ¥¹¥¿¤À¤±¤Ç¤Ê¤¯¡¢³«È¯¼Ô¤Ë¤è¤Ã¤Æ¤âÃí°Õ¿¼¤¯Àººº¤µ¤ì
- ¥Æ¥¹¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤é¤ÎÃí°Õ¤Ë¤è¤ê¡¢´Ê·é¤Ç¿®Íê¤Ç¤­¤ë°ÂÁ´¤Ê
- ¥³¡¼¥É¤Î´ðÈפ¬Êݾڤµ¤ì¤Þ¤¹¡£¤³¤Î¥³¡¼¥É¤ò²þÊѤ¹¤ë¤³¤È¤Ç¡¢
- ͽ´ü¤µ¤ì¤Ê¤¤ÌäÂê¤ä¿·¤·¤¤¥»¥­¥å¥ê¥Æ¥£¾å¤Î´í¸±¤¬À¸¤¸¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¥»¥­¥å¥ê¥Æ¥£¥×¥í¥°¥é¥ß¥ó¥°¤Î¾ÜºÙ¤ËÄ̤¸¤Æ¤¤¤Æ¡¢
- º£¸å¤Î¸¡Æ¤¤Î¤¿¤á¤ËÀ®²Ì¤ò Apache
- ¥°¥ë¡¼¥×¤È¶¦Í­¤·¤è¤¦¤È»×¤¦¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢suEXEC
- ¥³¡¼¥É¤ÏÊѤ¨¤Ê¤¤¤³¤È¤ò <strong>¶¯¤¯</strong>¿ä¾©¤·¤Þ¤¹¡£</p>
-
- <p>Âè 4 ¤Ë¡¢¤³¤ì¤¬ºÇ¸å¤Ç¤¹¤¬¡¢suEXEC ¤ò Apache
- ¤Î¥Ç¥Õ¥©¥ë¥È¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ï<strong>´Þ¤á¤Ê¤¤</strong>¤³¤È¤¬
- Apache ¥°¥ë¡¼¥×¤Ç·èÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¡¢suEXEC
- ¤ÎÀßÄê¤Ë¤Ï´ÉÍý¼Ô¤Î¾ÜºÙ¤Ë¤ï¤¿¤ë¿µ½Å¤ÊÃí°Õ¤¬É¬ÍפÀ¤«¤é¤Ç¤¹¡£
- suEXEC ¤ÎÍÍ¡¹¤ÊÀßÄê¤Ë¤Ä¤¤¤Æ¸¡Æ¤¤¬½ª¤ï¤ì¤Ð¡¢´ÉÍý¼Ô¤Ï suEXEC
- ¤òÄ̾ï¤Î¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤³¤ì¤é¤ÎÀßÄêÃͤϡ¢suEXEC
- µ¡Ç½¤Î»ÈÍÑÃæ¤Ë¥·¥¹¥Æ¥à¥»¥­¥å¥ê¥Æ¥£¤òŬÀÚ¤ËÊݤĤ¿¤á¤Ë¡¢
- ´ÉÍý¼Ô¤Ë¤è¤Ã¤Æ¿µ½Å¤Ë·èÄꤵ¤ì»ØÄꤵ¤ì¤ë¤³¤È¤¬É¬ÍפǤ¹¡£
- ¤³¤Î¾ÜºÙ¤Ê¼ê½ç¤Ë¤è¤ê¡¢Apache ¥°¥ë¡¼¥×¤Ï¡¢suEXEC
- ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ä¤¤¤Æ¡¢Ãí°Õ¿¼¤¯½½Ê¬¤Ë¸¡Æ¤¤·¤Æ¤½¤ì¤ò»ÈÍѤ¹¤ë¤³¤È¤ò
- ·èÄꤷ¤¿¾ì¹ç¤Ë¸Â¤Ã¤Æ¤¤¤¿¤À¤­¤¿¤¤¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£
- </p>
-
- <p>¤½¤ì¤Ç¤â¿Ê¤ß¤Þ¤¹¤«? ¤è¤í¤·¤¤¡£¤Ç¤Ï¡¢Àè¤Ø¿Ê¤ß¤Þ¤·¤ç¤¦!</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="model" id="model">suEXEC ¥»¥­¥å¥ê¥Æ¥£¥â¥Ç¥ë</a></h2>
-
- <p>suEXEC ¤ÎÀßÄê¤È¥¤¥ó¥¹¥È¡¼¥ë¤ò»Ï¤á¤ëÁ°¤Ë¡¢
- ¤Þ¤º¼ÂÁõ¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¥»¥­¥å¥ê¥Æ¥£¥â¥Ç¥ë¤Ë¤Ä¤¤¤ÆÏÀ¤¸¤Æ¤ª¤­¤Þ¤¹¡£
- ¤½¤ì¤Ë¤Ï¡¢suEXEC ¤ÎÆâÉô¤Ç¹Ô¤Ê¤ï¤ì¤Æ¤¤¤ë¤³¤È¡¢
- ¥·¥¹¥Æ¥à¤Î¥»¥­¥å¥ê¥Æ¥£¤òÊݾڤ¹¤ë¤¿¤á¤Ë·Ù¹ð¤µ¤ì¤ë¤³¤È¤ò
- ¤è¤¯Íý²ò¤·¤Æ¤ª¤¤¤¿Êý¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£</p>
-
- <p><strong>suEXEC</strong> ¤Ï¡¢Apache web
- ¥µ¡¼¥Ð¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë setuid ¤µ¤ì¤¿ "wrapper"
- ¥×¥í¥°¥é¥à¤¬´ðËܤȤʤäƤ¤¤Þ¤¹¡£À߷פ·¤¿ CGI¡¢¤Þ¤¿¤Ï SSI
- ¥×¥í¥°¥é¥à¤Ø¤Î HTTP ¥ê¥¯¥¨¥¹¥È¤¬¤¢¤ë¤È¡¢¤³¤Î wrapper
- ¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ê¥ê¥¯¥¨¥¹¥È¤¬¤¢¤ë¤È¡¢Apache
- ¤Ï¤½¤Î¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤µ¤ì¤ëºÝ¤Î¥×¥í¥°¥é¥à̾¤È¥æ¡¼¥¶ ID ¤È¥°¥ë¡¼¥×
- ID ¤ò»ØÄꤷ¤Æ suEXEC wrapper ¤ò¼Â¹Ô¤·¤Þ¤¹¡£
- </p>
-
- <p>¤½¤ì¤«¤é¡¢wrapper ¤ÏÀ®¸ù¤Þ¤¿¤Ï¼ºÇÔ¤ò·èÄꤹ¤ë¤¿¤á
- °Ê²¼¤Î½èÍý¤ò¹Ô¤Ê¤¤¤Þ¤¹¡£¤³¤ì¤é¤Î¾õÂ֤Τ¦¤Á°ì¤Ä¤Ç¤â¼ºÇÔ¤·¤¿¾ì¹ç¡¢
- ¥×¥í¥°¥é¥à¤Ï¼ºÇÔ¤ò¥í¥°¤Ëµ­Ï¿¤·¤Æ¥¨¥é¡¼¤Ç½ªÎ»¤·¤Þ¤¹¡£
- ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢¸å¤Î½èÍý¤¬Â³¤±¤é¤ì¤Þ¤¹¡£</p>
-
- <ol>
- <li>
- <strong>wrapper
- ¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥æ¡¼¥¶¤Ï¤³¤Î¥·¥¹¥Æ¥à¤ÎÀµÅö¤Ê¥æ¡¼¥¶¤«?</strong>
-
- <p class="indent">
- ¤³¤ì¤Ï¡¢wrapper ¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥æ¡¼¥¶¤¬
- ËÜÅö¤Ë¥·¥¹¥Æ¥à¤ÎÍøÍѼԤǤ¢¤ë¤³¤È¤òÊݾڤ¹¤ë¤¿¤á¤Ç¤¹¡£
- </p>
- </li>
-
-
- <li>
- <strong>wrapper ¤¬Å¬Àڤʿô¤Î°ú¿ô¤Ç¸Æ¤Ó½Ð¤µ¤ì¤¿¤«?</strong>
-
-
- <p class="indent">
- wrapper ¤ÏŬÀڤʿô¤Î°ú¿ô¤¬Í¿¤¨¤é¤ì¤¿¾ì¹ç¤Ë¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
- ŬÀڤʰú¿ô¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï Apache Web ¥µ¡¼¥Ð¤Ë²ò¼á¤µ¤ì¤Þ¤¹¡£
- ŬÀڤʿô¤Î°ú¿ô¤ò¼õ¤±¼è¤é¤Ê¤±¤ì¤Ð¡¢¹¶·â¤ò¤µ¤ì¤¿¤«
- ¤¢¤Ê¤¿¤Î Apache ¥Ð¥¤¥Ê¥ê¤Î suEXEC ¤ÎÉôʬ¤¬
- ¤É¤³¤«¤ª¤«¤·¤¤²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
- </p>
- </li>
-
- <li>
- <strong>¤³¤ÎÀµÅö¤Ê¥æ¡¼¥¶¤Ï wrapper
- ¤Î¼Â¹Ô¤òµö²Ä¤µ¤ì¤Æ¤¤¤ë¤«?</strong>
-
- <p class="indent">
- ¤³¤Î¥æ¡¼¥¶¤Ï wrapper ¼Â¹Ô¤òµö²Ä¤µ¤ì¤¿¥æ¡¼¥¶¤Ç¤¹¤«?
- ¤¿¤À°ì¿Í¤Î¥æ¡¼¥¶ (Apache ¥æ¡¼¥¶) ¤À¤±¤¬¡¢
- ¤³¤Î¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤òµö²Ä¤µ¤ì¤Þ¤¹¡£
- </p>
- </li>
-
- <li>
- <strong>ÂоݤΠCGI, SSI ¥×¥í¥°¥é¥à¤¬°ÂÁ´¤Ç¤Ê¤¤³¬Áؤλ²¾È¤ò¤·¤Æ¤¤¤ë¤«?
- </strong>
-
- <p class="indent">
- ÂоݤΠCGI, SSI ¥×¥í¥°¥é¥à¤¬ '/' ¤«¤é»Ï¤Þ¤ë¡¢¤Þ¤¿¤Ï
- '..' ¤Ë¤è¤ë»²¾È¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤«? ¤³¤ì¤é¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó¡£
- ÂÐ¾Ý¤Î¥×¥í¥°¥é¥à¤Ï suEXEC ¤Î¥É¥­¥å¥á¥ó¥È¥ë¡¼¥È
- (²¼µ­¤Î <code>--with-suexec-docroot=<em>DIR</em></code> ¤ò»²¾È)
- Æâ¤Ë¸ºß¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- </p>
- </li>
-
- <li>
- <strong>ÂоݤȤʤë¥æ¡¼¥¶Ì¾¤ÏÀµÅö¤Ê¤â¤Î¤«?</strong>
-
- <p class="indent">
- ÂоݤȤʤë¥æ¡¼¥¶Ì¾¤Ï¸ºß¤·¤Æ¤¤¤Þ¤¹¤«?
- </p>
- </li>
-
- <li>
- <strong>ÂоݤȤʤ륰¥ë¡¼¥×̾¤ÏÀµÅö¤Ê¤â¤Î¤«?</strong>
-
- <p class="indent">
- ÂоݤȤʤ륰¥ë¡¼¥×̾¤Ï¸ºß¤·¤Æ¤¤¤Þ¤¹¤«?
- </p>
- </li>
-
- <li>
- <strong>ÌÜŪ¤Î¥æ¡¼¥¶¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Ç¤Ï<em>¤Ê¤¤</em>¤«?
- </strong>
-
- <p class="indent">
- º£¤Î¤È¤³¤í¡¢suEXEC ¤Ï <code><em>root</em></code> ¤Ë¤è¤ë CGI/SSI
- ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤òµö²Ä¤·¤Æ¤¤¤Þ¤»¤ó¡£
- </p>
- </li>
-
- <li>
- <strong>ÂоݤȤʤë¥æ¡¼¥¶ ID ¤Ï¡¢ºÇ¾®¤Î ID
- ÈÖ¹æ¤è¤ê¤â<em>Â礭¤¤</em>¤«? </strong>
-
- <p class="indent">
- ºÇ¾®¥æ¡¼¥¶ ID ÈÖ¹æ¤ÏÀßÄê»þ¤Ë»ØÄꤵ¤ì¤Þ¤¹¡£¤³¤ì¤Ï¡¢
- CGI/SSI ¥×¥í¥°¥é¥à¼Â¹Ô¤òµö²Ä¤µ¤ì¤ë¥æ¡¼¥¶ ID
- ¤Î¤È¤ê¤¦¤ëºÇ¾®ÃͤǤ¹¡£¤³¤ì¤Ï
- "system" ÍѤΥ¢¥«¥¦¥ó¥È¤òÊĤá½Ð¤¹¤Î¤ËÍ­¸ú¤Ç¤¹¡£
- </p>
- </li>
-
- <li>
- <strong>ÂоݤȤʤ륰¥ë¡¼¥×¤Ï¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Î¥°¥ë¡¼¥×¤Ç¤Ï
- <em>¤Ê¤¤</em>¤«?</strong>
-
- <p class="indent">
- º£¤Î¤È¤³¤í¡¢suEXEC ¤Ï 'root' ¥°¥ë¡¼¥×¤Ë¤è¤ë CGI/SSI
- ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤òµö²Ä¤·¤Æ¤¤¤Þ¤»¤ó¡£
- </p>
- </li>
-
- <li>
- <strong>ÂоݤȤʤ륰¥ë¡¼¥× ID ¤ÏºÇ¾®¤Î ID
- ÈÖ¹æ¤è¤ê¤â<em>Â礭¤¤</em>¤«?</strong>
-
- <p class="indent">
- ºÇ¾®¥°¥ë¡¼¥× ID ÈÖ¹æ¤ÏÀßÄê»þ¤Ë»ØÄꤵ¤ì¤Þ¤¹¡£¤³¤ì¤Ï¡¢
- CGI/SSI ¥×¥í¥°¥é¥à¼Â¹Ô¤òµö²Ä¤µ¤ì¤ë¥°¥ë¡¼¥×
- ID ¤Î¤È¤ê¤¦¤ëºÇ¾®ÃͤǤ¹¡£
- ¤³¤ì¤Ï "system" ÍѤΥ°¥ë¡¼¥×¤òÊĤá½Ð¤¹¤Î¤ËÍ­¸ú¤Ç¤¹¡£
- </p>
- </li>
-
- <li>
- <strong>wrapper ¤¬Àµ¾ï¤ËÂоݤȤʤë¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Ë¤Ê¤ì¤ë¤«?
- </strong>
-
- <p class="indent">
- ¤³¤³¤Ç¡¢setuid ¤È setgid
- ¤Îµ¯Æ°¤Ë¤è¤ê¥×¥í¥°¥é¥à¤ÏÂоݤȤʤë¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥°¥ë¡¼¥×¥¢¥¯¥»¥¹¥ê¥¹¥È¤Ï¡¢
- ¥æ¡¼¥¶¤¬Â°¤·¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¥°¥ë¡¼¥×¤Ç½é´ü²½¤µ¤ì¤Þ¤¹¡£
- </p>
- </li>
-
- <li>
- <strong>CGI/SSI ¥×¥í¥°¥é¥à¤¬ÃÖ¤«¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ÜÆ°
- (change directory) ¤Ç¤­¤ë¤«?</strong>
-
- <p class="indent">
- ¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤Ê¤¤¤Ê¤é¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤â¸ºß¤·¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ÜÆ°¤Ç¤­¤Ê¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢¤ª¤½¤é¤¯Â¸ºß¤â¤·¤Ê¤¤¤Ç¤·¤ç¤¦¡£
- </p>
- </li>
-
- <li>
- <strong>¥Ç¥£¥ì¥¯¥È¥ê¤¬ Apache ¤Î¥É¥­¥å¥á¥ó¥È¥Ä¥ê¡¼Æâ¤Ë¤¢¤ë¤«?
- </strong>
-
- <p class="indent">
- ¥ê¥¯¥¨¥¹¥È¤¬¥µ¡¼¥ÐÆâ¤Î¤â¤Î¤Ç¤¢¤ì¤Ð¡¢
- Í׵ᤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤¬ suEXEC ¤Î¥É¥­¥å¥á¥ó¥È¥ë¡¼¥ÈÇÛ²¼¤Ë¤¢¤ê¤Þ¤¹¤«?
- ¥ê¥¯¥¨¥¹¥È¤¬ UserDir ¤Î¤â¤Î¤Ç¤¢¤ì¤Ð¡¢Í׵ᤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤¬ suEXEC
- ¤Î¥æ¡¼¥¶¤Î¥É¥­¥å¥á¥ó¥È¥ë¡¼¥ÈÇÛ²¼¤Ë¤¢¤ê¤Þ¤¹¤«?
- (<a href="#install">suEXEC ÀßÄꥪ¥×¥·¥ç¥ó</a> »²¾È)
- </p>
- </li>
-
- <li>
- <strong>¥Ç¥£¥ì¥¯¥È¥ê¤ò¾¤Î¥æ¡¼¥¶¤¬½ñ¤­¹þ¤á¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ
- <em>¤¤¤Ê¤¤</em>¤«?</strong>
-
- <p class="indent">
- ¥Ç¥£¥ì¥¯¥È¥ê¤ò¾¥æ¡¼¥¶¤Ë³«Êü¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£
- ½êÍ­¥æ¡¼¥¶¤À¤±¤¬¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆâÍƤò²þÊѤǤ­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- </p>
- </li>
-
-
- <li>
- <strong>ÂоݤȤʤë CGI/SSI ¥×¥í¥°¥é¥à¤Ï¸ºß¤¹¤ë¤«?</strong>
-
- <p class="indent">
- ¸ºß¤·¤Ê¤±¤ì¤Ð¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£
- </p>
- </li>
-
- <li>
- <strong>ÂоݤȤʤë CGI/SSI ¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤¬Â¾¥¢¥«¥¦¥ó¥È¤«¤é
- ½ñ¤­¹þ¤á¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ<em>¤¤¤Ê¤¤</em>¤«?</strong>
-
- <p class="indent">
- ½êÍ­¼Ô°Ê³°¤Ë¤Ï CGI/SSI ¥×¥í¥°¥é¥à¤òÊѹ¹¤¹¤ë¸¢¸Â¤ÏÍ¿¤¨¤é¤ì¤Þ¤»¤ó¡£
- </p>
- </li>
-
-
- <li>
- <strong>ÂоݤȤʤë CGI/SSI ¥×¥í¥°¥é¥à¤¬ setuid ¤Þ¤¿¤Ï setgid
- ¤µ¤ì¤Æ<em>¤¤¤Ê¤¤</em>¤«?</strong>
-
- <p class="indent">
- UID/GID ¤òºÆÅÙÊѹ¹¤·¤Æ¤Î¥×¥í¥°¥é¥à¼Â¹Ô¤Ï¤·¤Þ¤»¤ó
- </p>
- </li>
-
-
- <li>
- <strong>ÂоݤȤʤë¥æ¡¼¥¶/¥°¥ë¡¼¥×¤¬¥×¥í¥°¥é¥à¤Î
- ¥æ¡¼¥¶/¥°¥ë¡¼¥×¤ÈƱ¤¸¤«?</strong>
-
- <p class="indent">
- ¥æ¡¼¥¶¤¬¤½¤Î¥Õ¥¡¥¤¥ë¤Î½êÍ­¼Ô¤Ç¤¹¤«?
- </p>
- </li>
-
- <li>
- <strong>°ÂÁ´¤ÊÆ°ºî¤òÊݾڤ¹¤ë¤¿¤á¤Î´Ä¶­ÊÑ¿ô¥¯¥ê¥¢¤¬²Äǽ¤«?
- </strong>
-
- <p class="indent">
- suEXEC ¤Ï¡¢°ÂÁ´¤Ê´Ä¶­ÊÑ¿ô¤Î¥ê¥¹¥È
- (¤³¤ì¤é¤ÏÀßÄê»þ¤ËºîÀ®¤µ¤ì¤Þ¤¹) Æâ¤ÎÊÑ¿ô¤È¤·¤ÆÅϤµ¤ì¤ë°ÂÁ´¤Ê
- PATH ÊÑ¿ô (ÀßÄê»þ¤Ë»ØÄꤵ¤ì¤Þ¤¹) ¤òÀßÄꤹ¤ë¤³¤È¤Ç¡¢
- ¥×¥í¥»¥¹¤Î´Ä¶­ÊÑ¿ô¤ò¥¯¥ê¥¢¤·¤Þ¤¹¡£
- </p>
- </li>
-
-
- <li>
- <strong>ÂоݤȤʤë CGI/SSI ¥×¥í¥°¥é¥à¤ò exec ¤·¤Æ¼Â¹Ô¤Ç¤­¤ë¤«?</strong>
-
-
- <p class="indent">
- ¤³¤³¤Ç suEXEC ¤¬½ªÎ»¤·¡¢ÂоݤȤʤë¥×¥í¥°¥é¥à¤¬³«»Ï¤µ¤ì¤Þ¤¹¡£
- </p>
- </li>
- </ol>
-
- <p>¤³¤³¤Þ¤Ç¤¬ suEXEC ¤Î wrapper
- ¤Ë¤ª¤±¤ë¥»¥­¥å¥ê¥Æ¥£¥â¥Ç¥ë¤Îɸ½àŪ¤ÊÆ°ºî¤Ç¤¹¡£¤â¤¦¾¯¤·¸·½Å¤Ë
- CGI/SSI À߷פˤĤ¤¤Æ¤Î¿·¤·¤¤À©¸Â¤äµ¬Äê¤ò¼è¤êÆþ¤ì¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬¡¢
- suEXEC ¤Ï¥»¥­¥å¥ê¥Æ¥£¤ËÃí°Õ¤·¤Æ¿µ½Å¤Ë¾¯¤·¤º¤Ä³«È¯¤µ¤ì¤Æ¤­¤Þ¤·¤¿¡£
- </p>
-
- <p>¤³¤Î¥»¥­¥å¥ê¥Æ¥£¥â¥Ç¥ë¤òÍѤ¤¤Æ
- ¥µ¡¼¥ÐÀßÄê»þ¤Ë¤É¤Î¤è¤¦¤Ëµö¤¹¤³¤È¤òÀ©¸Â¤¹¤ë¤«¡¢¤Þ¤¿¡¢suEXEC
- ¤òŬÀÚ¤ËÀßÄꤹ¤ë¤È¤É¤Î¤è¤¦¤Ê¥»¥­¥å¥ê¥Æ¥£¾å¤Î´í¸±¤òÈò¤±¤é¤ì¤ë¤«¤Ë
- ´Ø¤¹¤ë¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ë¤Ä¤¤¤Æ¤Ï¡¢<a href="#jabberwock">"¤È¤«¤²¤ËÃí°Õ"
- (Beware the Jabberwock)</a> ¤Î¾Ï¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
- </p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">suEXEC
- ¤ÎÀßÄê¤È¥¤¥ó¥¹¥È¡¼¥ë</a></h2>
-
- <p>¤³¤³¤«¤é³Ú¤·¤¯¤Ê¤ê¤Þ¤¹¡£</p>
-
- <p><strong>suEXEC
- ÀßÄꥪ¥×¥·¥ç¥ó</strong><br />
- </p>
-
- <dl>
- <dt><code>--enable-suexec</code></dt>
-
- <dd>¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤º¡¢
- Í­¸ú¤Ë¤Ï¤Ê¤é¤Ê¤¤ suEXEC µ¡Ç½¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£
- suEXEC ¤ò»È¤¦¤è¤¦¤Ë APACI ¤ËÍ׵᤹¤ë¤Ë¤Ï¡¢<code>--enable-suexec</code>
- ¥ª¥×¥·¥ç¥ó¤Ë¤¢¤ï¤»¤Æ¾¯¤Ê¤¯¤È¤â°ì¤Ä¤Ï <code>--with-suexec-xxxxx</code>
- ¥ª¥×¥·¥ç¥ó¤¬»ØÄꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</dd>
-
- <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
-
- <dd>¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤Ë¤è¤ê¡¢<code>suexec</code> ¥Ð¥¤¥Ê¥ê¤Î¥Ñ¥¹¤Ï¥µ¡¼¥Ð¤Ë
- ¥Ï¡¼¥É¥³¡¼¥É¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Î¥Ñ¥¹¤ò
- ÊѤ¨¤¿¤¤¤È¤­¤Ï¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£<em>Î㤨¤Ð</em>¡¢
- <code>--with-suexec-bin=/usr/sbin/suexec</code> ¤Î¤è¤¦¤Ë¡£</dd>
-
- <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
-
- <dd>Apache ¤òÄ̾ïÆ°ºî¤µ¤»¤ë<a href="mod/mpm_common.html#user">¥æ¡¼¥¶Ì¾</a>¤ò»ØÄꤷ¤Þ¤¹¡£
- ¤³¤Î¥æ¡¼¥¶¤À¤±¤¬ suexec ¤Î¼Â¹Ô¤òµö²Ä¤µ¤ì¤¿¥æ¡¼¥¶¤Ë¤Ê¤ê¤Þ¤¹¡£</dd>
-
- <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
-
- <dd>suEXEC ¤¬¥¢¥¯¥»¥¹¤òµö¤µ¤ì¤ë¥æ¡¼¥¶¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥êÇÛ²¼¤Î
- ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤷ¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤ÎÁ´¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ï¡¢"°ÂÁ´¤Ê"¥×¥í¥°¥é¥à¤Ë¤Ê¤ë¤è¤¦¡¢
- suEXEC ¤¬¤½¤Î¥æ¡¼¥¶¤È¤·¤Æ¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
- "ñ½ã¤Ê" UserDir ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç
- (¤¹¤Ê¤ï¤Á "*" ¤ò´Þ¤Þ¤Ê¤¤¤â¤Î)¡¢¤³¤ì¤ÈƱ¤¸ÃͤòÀßÄꤹ¤Ù¤­¤Ç¤¹¡£
- Userdir ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬¤½¤Î¥æ¡¼¥¶¤Î¥Ñ¥¹¥ï¡¼¥É¥Õ¥¡¥¤¥ëÆâ¤Î
- ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ÈƱ¤¸¾ì½ê¤ò»Ø¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢
- suEXEC ¤ÏŬÀÚ¤ËÆ°ºî¤·¤Þ¤»¤ó¡£¥Ç¥Õ¥©¥ë¥È¤Ï "public_html" ¤Ç¤¹¡£
- <br />
- ³Æ UserDir ¤¬°Û¤Ê¤Ã¤¿²¾ÁÛ¥Û¥¹¥È¤òÀßÄꤷ¤Æ¤¤¤ë¾ì¹ç¡¢
- ¤½¤ì¤é¤òÁ´¤Æ°ì¤Ä¤Î¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤Ë´Þ¤á¤Æ¡¢
- ¤½¤Î¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¤ò¤³¤³¤Ç»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- <strong>¤³¤Î¤è¤¦¤Ë»ØÄꤵ¤ì¤Ê¤±¤ì¤Ð "~userdir" cgi
- ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤¬Æ°ºî¤·¤Þ¤»¤ó¡£</strong></dd>
-
- <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
-
- <dd>Apache ¤Î¥É¥­¥å¥á¥ó¥È¥ë¡¼¥È¤òÀßÄꤷ¤Þ¤¹¡£¤³¤ì¤¬ suEXEC
- ¤ÎÆ°ºî¤Ç»ÈÍѤ¹¤ëÍ£°ì¤Î¥Ç¥£¥ì¥¯¥È¥ê³¬Áؤˤʤê¤Þ¤¹ (UserDir
- ¤Î»ØÄê¤ÏÊÌ)¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï <code>--datedir</code> ¤Ë "/htdocs"
- ¤È¤¤¤¦¥µ¥Õ¥£¥Ã¥¯¥¹¤ò¤Ä¤±¤¿¤â¤Î¤Ç¤¹¡£
- "<code>--datadir=/home/apache</code>" ¤È¤·¤ÆÀßÄꤹ¤ë¤È¡¢
- suEXEC wrapper ¤Ë¤È¤Ã¤Æ "/home/apache/htdocs"
- ¤¬¥É¥­¥å¥á¥ó¥È¥ë¡¼¥È¤È¤·¤Æ»È¤ï¤ì¤Þ¤¹¡£</dd>
-
- <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
-
- <dd>suEXEC ¤ÎÂоݥ桼¥¶¤È¤·¤Æµö¤µ¤ì¤ë UID ¤ÎºÇ¾®Ãͤò»ØÄꤷ¤Þ¤¹¡£
- ÂçÄñ¤Î¥·¥¹¥Æ¥à¤Ç¤Ï 500 ¤« 100 ¤¬°ìÈÌŪ¤Ç¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï 100 ¤Ç¤¹¡£</dd>
-
- <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
-
- <dd>suEXEC ¤ÎÂоݥ°¥ë¡¼¥×¤È¤·¤Æµö¤µ¤ì¤ë GID
- ¤ÎºÇ¾®Ãͤò»ØÄꤷ¤Þ¤¹¡£ÂçÄñ¤Î¥·¥¹¥Æ¥à¤Ç¤Ï 100 ¤¬°ìÈÌŪ¤Ê¤Î¤Ç¡¢
- ¥Ç¥Õ¥©¥ë¥ÈÃͤȤ·¤Æ¤â 100 ¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£</dd>
-
- <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
-
- <dd>suEXEC ¤Î½èÍý¤È¥¨¥é¡¼¤¬µ­Ï¿¤µ¤ì¤ë¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Þ¤¹¡£
- (´Æºº¤ä¥Ç¥Ð¥Ã¥°ÌÜŪ¤ËÍ­ÍÑ)
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥í¥°¥Õ¥¡¥¤¥ë¤Ï "suexec_log" ¤È¤¤¤¦Ì¾Á°¤Ç¡¢
- ɸ½à¤Î¥í¥°¥Õ¥¡¥¤¥ë¥Ç¥£¥ì¥¯¥È¥ê (<code>--logfiledir</code>) ¤ËÃÖ¤«¤ì¤Þ¤¹¡£
- </dd>
-
- <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
-
- <dd>CGI ¼Â¹Ô¥Õ¥¡¥¤¥ë¤ËÅϤµ¤ì¤ë°ÂÁ´¤Ê PATH ´Ä¶­ÊÑ¿ô¤Ç¤¹¡£
- ¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï "/usr/local/bin:/usr/bin:/bin" ¤Ç¤¹¡£
- </dd>
- </dl>
-
- <p><strong>suEXEC wrapper
- ¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë</strong><br />
- <code>--enable-suexec</code> ¥ª¥×¥·¥ç¥ó¤Ç suEXEC µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤È¡¢
- "make" ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤¿»þ¤Ë <code>suexec</code> ¤Î¥Ð¥¤¥Ê¥ê (Apache ¼«ÂΤâ)
- ¤¬¼«Æ°Åª¤ËºîÀ®¤µ¤ì¤Þ¤¹¡£
- <br />
- ¤¹¤Ù¤Æ¤Î¹½À®Í×ÁǤ¬ºîÀ®¤µ¤ì¤ë¤È¡¢¤½¤ì¤é¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ï
- <code>make install</code> ¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤Ç¤­¤Þ¤¹¡£¥Ð¥¤¥Ê¥ê¥¤¥á¡¼¥¸¤Î <code>suexec</code>
- ¤Ï <code>--sbindir</code> ¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡£
- ¥Ç¥Õ¥©¥ë¥È¤Î¾ì½ê¤Ï "/usr/local/apache/sbin/suexec" ¤Ç¤¹¡£<br />
- ¥¤¥ó¥¹¥È¡¼¥ë»þ¤Ë¤Ï <strong><em>root</em></strong>
- ¸¢¸Â¤¬É¬ÍפʤΤÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£wrapper ¤¬¥æ¡¼¥¶ ID
- ¤òÀßÄꤹ¤ë¤¿¤á¤Ë¡¢½êÍ­¼Ô <code><em>root</em></code>
- ¤Ç¤Î¥»¥Ã¥È¥æ¡¼¥¶ ID
- ¥Ó¥Ã¥È¤ò¤½¤Î¥Õ¥¡¥¤¥ë¤Î¥â¡¼¥É¤ËÀßÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- </p>
-
- <p><strong>°ÂÁ´¤Ê¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÀßÄꤹ¤ë</strong><br />
- suEXEC ¥é¥Ã¥Ñ¡¼¤Ï¡¢<code>--with-suexec-caller</code> configure
- ¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤷ¤¿Àµ¤·¤¤¥æ¡¼¥¶¤Çµ¯Æ°¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤¹¤¬¡¢
- ¥·¥¹¥Æ¥à¾å¤Ç¤³¤Î¥Á¥§¥Ã¥¯¤¬¹Ô¤Ê¤ï¤ì¤ëÁ°¤Ë¡¢
- suEXEC ¤¬¸Æ¤Ö¥·¥¹¥Æ¥à¤ä¥é¥¤¥Ö¥é¥ê¤¬Àȼå¤Ç¤¢¤ë²ÄǽÀ­¤Ï»Ä¤ê¤Þ¤¹¡£Âй³ºö¤È¤·¤Æ¡¢
- °ìÈ̤ËÎɤ¤½¬´·¤È¤â¤µ¤ì¤¤¤Þ¤¹¤¬¡¢
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ò»È¤Ã¤Æ
- Apache ¤Î¼Â¹Ô»þ¤Î¥°¥ë¡¼¥×¤Î¤ß¤¬ suEXEC ¤ò¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë
- ¤¹¤ë¤Î¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£</p>
-
- <p>¤¿¤È¤¨¤Ð¡¢¼¡¤Î¤è¤¦¤Ë¥µ¡¼¥Ð¤¬ÀßÄꤵ¤ì¤Æ¤¤¤¿¤È¤·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- User www<br />
- Group webgroup<br />
-</code></p></div>
-
- <p><code>suexec</code> ¤¬ "/usr/local/apache2/sbin/suexec"
- ¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢¼¡¤Î¤è¤¦¤ËÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- chgrp webgroup /usr/local/apache2/bin/suexec<br />
- chmod 4750 /usr/local/apache2/bin/suexec<br />
-</code></p></div>
-
- <p>¤³¤ì¤Ç Apache ¤¬¼Â¹Ô¤µ¤ì¤ë¥°¥ë¡¼¥×¤Î¤ß¤¬
- suEXEC ¥é¥Ã¥Ñ¡¼¤ò¼Â¹Ô¤Ç¤­¤ë¤È¤¤¤¦¤³¤È¤ò
- ³Î¾Ú¤·¤Þ¤¹¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">suEXEC
- ¤ÎÍ­¸ú²½¤È̵¸ú²½</a></h2>
-
- <p>µ¯Æ°»þ¤Ë¡¢Apache ¤Ï <code>--sbindir</code>
- ¥ª¥×¥·¥ç¥ó¤ÇÀßÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ç
- <code>suexec</code> ¤òõ¤·¤Þ¤¹
- (¥Ç¥Õ¥©¥ë¥È¤Ï "/usr/local/apache/sbin/suexec") ¡£
- ŬÀÚ¤ËÀßÄꤵ¤ì¤¿ suEXEC ¤¬¤ß¤Ä¤«¤ë¤È¡¢
- ¥¨¥é¡¼¥í¥°¤Ë°Ê²¼¤Î¥á¥Ã¥»¡¼¥¸¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
- [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</code></p></div>
-
- <p>¥µ¡¼¥Ðµ¯Æ°»þ¤Ë¤³¤Î¥á¥Ã¥»¡¼¥¸¤¬½Ð¤Ê¤¤¾ì¹ç¡¢
- ÂçÄñ¤Ï¥µ¡¼¥Ð¤¬ÁÛÄꤷ¤¿¾ì½ê¤Ç wrapper ¥×¥í¥°¥é¥à¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤«¡¢
- <em>setuid root</em> ¤È¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤Ç¤¹¡£</p>
-
- <p>suEXEC ¤Î»ÅÁȤߤò»ÈÍѤ¹¤ë¤Î¤¬½é¤á¤Æ¤Ç¡¢Apache ¤¬´û¤ËÆ°ºîÃæ¤Ç¤¢¤ì¤Ð¡¢
- Apache ¤ò kill ¤·¤Æ¡¢ºÆµ¯Æ°¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£HUP ¥·¥°¥Ê¥ë¤ä
- USR1 ¥·¥°¥Ê¥ë¤Ë¤è¤ëñ½ã¤ÊºÆµ¯Æ°¤Ç¤ÏÉÔ½½Ê¬¤Ç¤¹¡£</p>
- <p>suEXEC ¤ò̵¸ú¤Ë¤¹¤ë¾ì¹ç¤Ï¡¢<code>suexec</code> ¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤«¤é
- Apache ¤ò kill ¤·¤ÆºÆµ¯Æ°¤·¤Þ¤¹¡£
- </p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">suEXEC ¤Î»ÈÍÑ</a></h2>
-
- <p>CGI ¥×¥í¥°¥é¥à¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤¬ suEXEC ¥é¥Ã¥Ñ¡¼¤ò¸Æ¤Ö¤Î¤Ï¡¢
- <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ´Þ¤à¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤«¡¢<code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> ¤Ë¤è¤ê
- ½èÍý¤µ¤ì¤¿¥ê¥¯¥¨¥¹¥È¤Î¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£</p>
-
- <p><strong>²¾ÁÛ¥Û¥¹¥È:</strong><br />
- suEXEC wrapper ¤Î»È¤¤Êý¤È¤·¤Æ¡¢
- <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> ÀßÄê¤Ç¤Î
- <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÄ̤·¤¿¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò¥á¥¤¥ó¥µ¡¼¥Ð¤Î¥æ¡¼¥¶ ID
- ¤È°Û¤Ê¤ë¤â¤Î¤Ë¤¹¤ë¤È¡¢CGI ¥ê¥½¡¼¥¹¤Ø¤Î¤¹¤Ù¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤Ï¡¢¤½¤Î
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¤Ç»ØÄꤵ¤ì¤¿ <em>User</em> ¤È
- <em>Group</em> ¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤Þ¤¹¡£<code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤Ç¤³¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢
- ¥á¥¤¥ó¥µ¡¼¥Ð¤Î¥æ¡¼¥¶ ID ¤¬ÁÛÄꤵ¤ì¤Þ¤¹¡£</p>
-
- <p><strong>¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê:</strong><br />
- <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> ¤Ë¤è¤ê½èÍý¤µ¤ì¤¿¥ê¥¯¥¨¥¹¥È¤Ï
- ¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê¤Î¥æ¡¼¥¶ ID ¤Ç CGI ¥×¥í¥°¥é¥à¤ò
- ¼Â¹Ô¤¹¤ë¤¿¤á¤Ë suEXEC ¥é¥Ã¥Ñ¡¼¤ò¸Æ¤Ó¤Þ¤¹¡£
- ¤³¤Îµ¡Ç½¤òÆ°ºî¤µ¤»¤ë¤¿¤á¤ËɬÍפʤ³¤È¤Ï¡¢CGI
- ¤ò¤½¤Î¥æ¡¼¥¶¤Ç¼Â¹Ô¤Ç¤­¤ë¤³¤È¡¢¤½¤Î¥¹¥¯¥ê¥×¥È¤¬¾åµ­¤Î<a href="#model">¥»¥­¥å¥ê¥Æ¥£¸¡ºº</a>¤ò¥Ñ¥¹¤Ç¤­¤ë¤³¤È¤Ç¤¹¡£
- <a href="#install">¥³¥ó¥Ñ¥¤¥ë
- »þ¤Î¥ª¥×¥·¥ç¥ó</a> <code>--with-suexec-userdir</code> ¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="debug" id="debug">suEXEC ¤Î¥Ç¥Ð¥Ã¥°</a></h2>
-
- <p>suEXEC wrapper ¤Ï¡¢¾åµ­¤Ç½Ò¤Ù¤¿ <code>--with-suexec-logfile</code>
- ¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¥í¥°¾ðÊó¤òµ­Ï¿¤·¤Þ¤¹¡£
- wrapper ¤òŬÀÚ¤ËÀßÄê¡¢¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤Æ¤¤¤ë¤È»×¤¦¾ì¹ç¡¢
- ¤É¤³¤Ç̤äƤ¤¤ë¤«¸«¤è¤¦¤È¤¹¤ë¤Ê¤é¤³¤Î¥í¥°¤È¥µ¡¼¥Ð¤Î
- ¥¨¥é¡¼¥í¥°¤ò¸«¤ë¤È¤è¤¤¤Ç¤·¤ç¤¦¡£</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="jabberwock" id="jabberwock">¤È¤«¤²¤ËÃí°Õ: ·Ù¹ð¤È»öÎã</a></h2>
-
- <p><strong>Ãí°Õ!</strong>
- ¤³¤Î¾Ï¤Ï´°Á´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤³¤Î¾Ï¤ÎºÇ¿·²þÄûÈǤˤĤ¤¤Æ¤Ï¡¢
- Apache ¥°¥ë¡¼¥×¤Î<a href="http://httpd.apache.org/docs-2.1/suexec.html">
- ¥ª¥ó¥é¥¤¥ó¥É¥­¥å¥á¥ó¥È</a>ÈǤò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
- </p>
-
- <p>¥µ¡¼¥Ð¤ÎÀßÄê¤ËÀ©¸Â¤ò¤â¤¦¤±¤ë wrapper ¤Ë¤Ä¤¤¤Æ¡¢
- ¤¤¤¯¤Ä¤«¶½Ì£¿¼¤¤ÅÀ¤¬¤¢¤ê¤Þ¤¹¡£suEXEC ¤Ë´Ø¤¹¤ë "¥Ð¥°"
- ¤òÊó¹ð¤¹¤ëÁ°¤Ë¤³¤ì¤é¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
- <ul>
- <li><strong>suEXEC ¤Î¶½Ì£¿¼¤¤ÅÀ</strong></li>
-
- <li>³¬Áع½Â¤¤ÎÀ©¸Â
-
-
- <p class="indent">
- ¥»¥­¥å¥ê¥Æ¥£¤È¸úΨ¤ÎÍýͳ¤«¤é¡¢<code>suEXEC</code> ¤ÎÁ´¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤Ï
- ²¾ÁÛ¥Û¥¹¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤ª¤±¤ëºÇ¾å°Ì¤Î¥É¥­¥å¥á¥ó¥È¥ë¡¼¥ÈÆ⤫¡¢
- ¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤ª¤±¤ë¸Ä¡¹¤Î¥æ¡¼¥¶¤ÎºÇ¾å°Ì¤Î
- ¥É¥­¥å¥á¥ó¥È¥ë¡¼¥ÈÆâ¤Ë»Ä¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- Î㤨¤Ð¡¢»Í¤Ä¤Î²¾ÁÛ¥Û¥¹¥È¤òÀßÄꤷ¤Æ¤¤¤ë¾ì¹ç¡¢
- ²¾ÁÛ¥Û¥¹¥È¤Î suEXEC ¤ËÍ­Íø¤Ê¤è¤¦¤Ë¡¢¥á¥¤¥ó¤Î Apache
- ¥É¥­¥å¥á¥ó¥È³¬Áؤγ°Â¦¤ËÁ´¤Æ¤Î²¾ÁÛ¥Û¥¹¥È¤Î¥É¥­¥å¥á¥ó¥È¥ë¡¼¥È¤ò
- ¹½ÃÛ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£(Îã¤Ï¸åÆüµ­ºÜ)
- </p>
- </li>
-
- <li>suEXEC ¤Î PATH ´Ä¶­ÊÑ¿ô
-
-
- <p class="indent">
- ¤³¤ì¤òÊѹ¹¤¹¤ë¤Î¤Ï´í¸±¤Ç¤¹¡£¤³¤Î»ØÄê¤Ë´Þ¤Þ¤ì¤ë³Æ¥Ñ¥¹¤¬
- <strong>¿®Íê¤Ç¤­¤ë</strong>
- ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
- À¤³¦¤«¤é¤Î¥¢¥¯¥»¥¹¤Ë¤è¤ê¡¢Ã¯¤«¤¬¥Û¥¹¥È¾å¤Ç¥È¥í¥¤¤ÎÌÚÇÏ
- ¤ò¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ï¤·¤¿¤¯¤Ê¤¤¤Ç¤·¤ç¤¦¡£
- </p>
- </li>
-
- <li>suEXEC ¥³¡¼¥É¤Î²þ¤
-
-
- <p class="indent">
- ·«¤êÊÖ¤·¤Þ¤¹¤¬¡¢²¿¤ò¤ä¤í¤¦¤È¤·¤Æ¤¤¤ë¤«ÇÄ°®¤»¤º¤Ë¤³¤ì¤ò¤ä¤ë¤È
- <strong>Â礭¤ÊÌäÂê</strong>¤ò°ú¤­µ¯¤³¤·¤«¤Í¤Þ¤»¤ó¡£
- ²Äǽ¤Ê¸Â¤êÈò¤±¤Æ¤¯¤À¤µ¤¤¡£
- </p>
- </li>
- </ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/suexec.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/suexec.html.ko.euc-kr b/docs/manual/suexec.html.ko.euc-kr
deleted file mode 100644
index e038158b61..0000000000
--- a/docs/manual/suexec.html.ko.euc-kr
+++ /dev/null
@@ -1,532 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>suEXEC Áö¿ø - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>suEXEC Áö¿ø</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/suexec.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p><strong>suEXEC</strong> ±â´ÉÀº ¾ÆÆÄÄ¡°¡ <strong>CGI</strong>¿Í
- <strong>SSI</strong> ÇÁ·Î±×·¥À» À¥¼­¹ö¸¦ ½ÇÇàÇÑ »ç¿ëÀÚ ID°¡
- ¾Æ´Ñ ´Ù¸¥ »ç¿ëÀÚ ID·Î ½ÇÇàÇϵµ·Ï ÇÑ´Ù. º¸Åë CGI³ª SSI ÇÁ·Î±×·¥À»
- ½ÇÇàÇϸé À¥¼­¹ö¸¦ ½ÇÇàÇÑ »ç¿ëÀÚ¿Í °°Àº »ç¿ëÀÚ·Î ½ÇÇàÇÑ´Ù.</p>
-
- <p>ÀÌ ±â´ÉÀ» ÀûÀýÈ÷ »ç¿ëÇÏ¸é »ç¿ëÀÚ°¡ Á÷Á¢ CGI³ª SSI ÇÁ·Î±×·¥À»
- °³¹ßÇÏ°í ½ÇÇàÇÒ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â º¸¾ÈÀ§ÇèÀ» »ó´çÈ÷ ÁÙÀÏ
- ¼ö ÀÖ´Ù. ±×·¯³ª suEXEC°¡ ºÎÀûÀýÇÏ°Ô ¼³Á¤µÇ¸é ¸¹Àº ¹®Á¦¿Í
- ÄÄÇ»ÅÍ¿¡ »õ·Î¿î º¸¾È ÇãÁ¡À» ¸¸µé ¼ö ÀÖ´Ù. ¸¸¾à <em>setuid root</em>
- ÇÁ·Î±×·¥°ú ÀÌ·± ÇÁ·Î±×·¥ÀÇ º¸¾È ¹®Á¦¿¡ »ý¼ÒÇÏ´Ù¸é suEXEC¸¦
- »ç¿ëÇÏÁö¾Ê±æ Áø½ÉÀ¸·Î ¹Ù¶õ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#before">½ÃÀÛÇϱâ Àü¿¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#model">suEXEC º¸¾È¸ðµ¨</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#install">suEXEC ±¸¼º°ú ¼³Ä¡</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#enable">suEXEC Å°°í ²ô±â</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#usage">suEXEC »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#debug">suEXEC µð¹ö±ëÇϱâ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#jabberwock">´Ù½Ã Çѹø Á¶½ÉÇ϶ó: °æ°í¿Í ¿¹Á¦</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="before" id="before">½ÃÀÛÇϱâ Àü¿¡</a></h2>
-
- <p>½ÃÀÛÇϱâ Àü¿¡ ¿ì¼± ¾ÆÆÄÄ¡±×·ì°ú ÀÌ ¹®¼­ÀÇ °¡Á¤À» ¹àÈù´Ù.</p>
-
- <p>¸ÕÀú <strong>setuid</strong>¿Í <strong>setgid</strong>
- ±â´ÉÀÌ °¡´ÉÇÑ À¯´Ð½º·ù ¿î¿µÃ¼Á¦¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù. ¸ðµç
- ¸í·É¾î ¿¹µéµµ °°Àº °¡Á¤À» ÇÑ´Ù. suEXEC¸¦ Áö¿øÇÏ´Â ´Ù¸¥ Ç÷¡ÆûÀ»
- »ç¿ëÇÏ´Ù¸é ¼³Á¤ÀÌ ´Ù¸¦ ¼ö ÀÖ´Ù.</p>
-
- <p>µÎ¹ø°, ´ç½ÅÀÌ ÄÄÇ»ÅÍ º¸¾ÈÀÇ ±âº» °³³ä°ú °ü¸®¿¡ Àͼ÷ÇÏ´Ù°í
- °¡Á¤ÇÑ´Ù. ¿©±â¿¡´Â <strong>setuid/setgid</strong> ±â´É°ú
- À̵éÀÌ ½Ã½ºÅÛ°ú º¸¾È¿¡ ¹ÌÄ¡´Â ¿©·¯ ¿µÇâ¿¡ ´ëÇÑ ÀÌÇØ°¡ Æ÷ÇԵȴÙ.</p>
-
- <p>¼¼¹ø°, suEXEC ÄÚµåÀÇ <strong>¼öÁ¤ÇÏÁö¾ÊÀº</strong>
- ¹öÀüÀ» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù. °³¹ßÀÚ¿Í ¿©·¯ º£Å¸Å×½ºÅ͵éÀº
- suEXEC¿Í °ü·ÃµÈ ¸ðµç Äڵ带 Á¶½É½º·´°Ô Á¶»çÇÏ°í °Ë»çÇß´Ù.
- Äڵ带 °£´ÜÇÏ°Ô ÇÏ°í È®½ÇÇÑ ¾ÈÀüÀ» º¸ÀåÇϱâÀ§ÇØ ¸ðµç ÁÖÀǸ¦
- ±â¿ï¿´´Ù. ÀÌ Äڵ带 ¼öÁ¤ÇÏ¸é ¿¹»óÄ¡¸øÇÑ ¹®Á¦¿Í »õ·Î¿î º¸¾È
- À§ÇèÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. º¸¾È ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ ¸Å¿ì Àß ¾Ë°í
- Äڵ带 »ìÆ캸±âÀ§ÇØ ¾ÆÆÄÄ¡±×·ì°ú ÀÛ¾÷À» °øÀ¯ÇÒ Àǻ簡 ¾ø´Ù¸é
- suEXEC Äڵ带 ¼öÁ¤ÇÏÁö¾Ê±æ <strong>°­·ÂÈ÷</strong> ±ÇÇÑ´Ù.</p>
-
- <p>³×¹ø°ÀÌÀÚ ¸¶Áö¸·À¸·Î, ¾ÆÆÄÄ¡±×·ìÀº suEXEC¸¦ ¾ÆÆÄÄ¡
- ±âº»¼³Ä¡¿¡ Æ÷ÇÔÇÏÁö <strong>¾Ê±â·Î</strong> °áÁ¤Çß´Ù. °á±¹
- °ü¸®ÀÚ°¡ ÁÖÀǸ¦ ±â¿ï¿©¼­ suEXEC¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. suEXECÀÇ
- ¿©·¯ ¼³Á¤À» Àß °í·ÁÇÑÈÄ °ü¸®ÀÚ´Â ÀϹÝÀûÀÎ ¼³Ä¡¹æ¹ýÀ» suEXEC¸¦
- ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. suEXEC ±â´ÉÀ» »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ º¸¾ÈÀ» Ã¥ÀÓÁö´Â
- °ü¸®ÀÚ´Â ÀÌ ¼³Á¤°ªµéÀ» ÁÖÀÇÀÖ°Ô »ìÆ캸°í ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
- ÀÌ·± »ó¼¼ÇÑ °úÁ¤Àº suEXEC¸¦ »ç¿ëÇÒ¸¸Å­ ÁÖÀÇÀÖ°í ´ÜÈ£ÇÑ
- »ç¶÷¸¸ÀÌ suEXEC¸¦ »ç¿ëÇϵµ·Ï ¾ÆÆÄÄ¡±×·ìÀÌ ¿øÇϱ⠶§¹®ÀÌ´Ù.</p>
-
- <p>¾ÆÁ÷µµ »ç¿ëÇÏ±æ ¿øÇϴ°¡? ±×·±°¡? ÁÁ´Ù. ÀÌÁ¦ ½ÃÀÛÇÏÀÚ!</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="model" id="model">suEXEC º¸¾È¸ðµ¨</a></h2>
-
- <p>suEXEC¸¦ ±¸¼ºÇÏ°í ¼³Ä¡Çϱâ Àü¿¡ ¿ì¸®´Â º¸¾È¸ðµ¨À» ¸ÕÀú
- ¼³¸íÇÑ´Ù. À̸¦ ÅëÇØ Á¤È®È÷ suEXEC ¾È¿¡¼­´Â ¹«½¼ ÀÏÀÌ ÀϾ¸ç
- ½Ã½ºÅÛÀÇ º¸¾ÈÀ» À§ÇØ ¹«¾ùÀ» Á¶½ÉÇØ¾ß ÇÒÁö ´õ Àß ÀÌÇØÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p><strong>suEXEC</strong>´Â ¾ÆÆÄÄ¡ À¥¼­¹ö°¡ ºÎ¸£´Â setuid
- "wrapper" ÇÁ·Î±×·¥À» ±â¹ÝÀ¸·Î ÇÑ´Ù. ÀÌ wrapper´Â °ü¸®ÀÚ°¡
- ÁÖ¼­¹ö¿Í ´Ù¸¥ userid·Î ½ÇÇàÇϵµ·Ï ¼³Á¤ÇÑ CGI³ª SSI ÇÁ·Î±×·¥¿¡
- HTTP ¿äûÀÌ ¿À¸é ºÒ¸°´Ù. ÀÌ·± ¿äûÀÌ ¿À¸é ¾ÆÆÄÄ¡´Â suEXEC
- wrapper¿¡°Ô ÇÁ·Î±×·¥¸í°ú ÇÁ·Î±×·¥À» ½ÇÇàÇÒ »ç¿ëÀÚ¿Í ±×·ì
- ID¸¦ Á¦°øÇÑ´Ù.</p>
-
- <p>±×·¯¸é wrapper´Â ´ÙÀ½ °úÁ¤À» ÅëÇØ ¼º°ø°ú ½ÇÆи¦ °áÁ¤ÇÑ´Ù.
- ÀÌ Á¶°ÇÁß Çϳª¶óµµ ½ÇÆÐÇϸé ÇÁ·Î±×·¥Àº ½ÇÆзΠ±â·ÏµÇ°í ¿À·ù¸¦
- ³»¸ç Á¾·áÇÑ´Ù. ½ÇÆÐÇÏÁö ¾ÊÀ¸¸é °úÁ¤À» °è¼ÓÇÑ´Ù:</p>
-
- <ol>
- <li>
- <strong>wrapper¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ°¡ ½Ã½ºÅÛÀÇ Á¤»óÀûÀÎ
- »ç¿ëÀÚÀΰ¡?</strong>
-
- <p class="indent">
- wrapper¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ°¡ ½ÇÁ¦·Î ½Ã½ºÅÛÀÇ »ç¿ëÀÚÀÎÁö
- È®ÀÎÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÀûÀýÇÑ ¼öÀÇ ¾Æ±Ô¸ÕÆ®·Î wrapper¸¦ ½ÇÇàÇϴ°¡?</strong>
-
- <p class="indent">
- wrapper´Â ÀûÀýÇÑ ¼öÀÇ ¾Æ±Ô¸ÕÆ®°¡ ÀÖ¾î¾ß¸¸ ½ÇÇàµÈ´Ù.
- ¾ÆÆÄÄ¡ À¥¼­¹ö°¡ ÀÌ °³¼ö¸¦ ¾È´Ù. wrapper°¡ ÀûÀýÇÑ ¼öÀÇ
- ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¸øÇϸé ÇØÅ·µÇ¾ú°Å³ª ¾ÆÆÄÄ¡ÀÇ suEXEC¿¡
- ¹º°¡ ¹®Á¦°¡ ÀÖ´Â °ÍÀÌ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÀÌ »ç¿ëÀÚ°¡ wrapper¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëµÇ¾ú³ª?</strong>
-
- <p class="indent">
- ÀÌ »ç¿ëÀÚ°¡ wrapper¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëµÇ¾ú³ª? ¿ÀÁ÷
- ÇÑ »ç¿ëÀÚ(¾ÆÆÄÄ¡ »ç¿ëÀÚ)¸¸ÀÌ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ
- ¼ö ÀÖ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ CGI³ª SSI ÇÁ·Î±×·¥ÀÌ ¾ÈÀüÇÏÁö¾ÊÀº °èÃþÂüÁ¶¸¦
- °¡Áö´Â°¡?</strong>
-
- <p class="indent">
- ÁöÁ¤ÇÑ CGI³ª SSI ÇÁ·Î±×·¥ÀÌ '/'·Î ½ÃÀÛÇϰųª µÞÂüÁ¶
- '..'À» °¡Áö´Â°¡? À̵éÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ÁöÁ¤ÇÑ CGI/SSI
- ÇÁ·Î±×·¥Àº suEXEC ¹®¼­ root (¾Æ·¡
- <code>--with-suexec-docroot=<em>DIR</em></code> Âü°í)
- ³»¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ »ç¿ëÀÚ¸íÀÌ À¯È¿ÇÑ°¡?</strong>
-
- <p class="indent">
- ÁöÁ¤ÇÑ »ç¿ëÀÚ°¡ Á¸ÀçÇϴ°¡?
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ ±×·ì¸íÀÌ À¯È¿ÇÑ°¡?</strong>
-
- <p class="indent">
- ÁöÁ¤ÇÑ ±×·ìÀÌ Á¸ÀçÇϴ°¡?
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ »ç¿ëÀÚ°¡ superuser°¡ <em>¾Æ´Ñ°¡</em>?</strong>
-
-
- <p class="indent">
- ÇöÀç suEXEC´Â <code><em>root</em></code>°¡ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ userid°¡ ÃÖ¼Ò ID ¼ýÀÚº¸´Ù <em>Å«°¡</em>?</strong>
-
- <p class="indent">
- ¼³Á¤¿¡¼­ ÃÖ¼Ò »ç¿ëÀÚ ID ¼ýÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. ±×·¡¼­ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â useridÀÇ ÃÖ¼ÒÄ¡¸¦ ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. "½Ã½ºÅÛ¿ë" °èÁ¤À» Á¦¿ÜÇÒ¶§ À¯¿ëÇÏ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ ±×·ìÀÌ superuser ±×·ìÀÌ <em>¾Æ´Ñ°¡</em>?</strong>
-
- <p class="indent">
- ÇöÀç suEXEC´Â <code><em>root</em></code> ±×·ìÀÌ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ groupid°¡ ÃÖ¼Ò ID ¼ýÀÚº¸´Ù <em>Å«°¡</em>?</strong>
-
- <p class="indent">
- ¼³Á¤¿¡¼­ ÃÖ¼Ò ±×·ì ID ¼ýÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. ±×·¡¼­ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â groupidÀÇ ÃÖ¼ÒÄ¡¸¦ ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. "½Ã½ºÅÛ¿ë" ±×·ìÀ» Á¦¿ÜÇÒ¶§ À¯¿ëÇÏ´Ù.
- </p>
- </li>
-
- <li>
- <strong>wrapper°¡ ¼º°øÀûÀ¸·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ¿Í ±×·ìÀÌ
- µÉ ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- ÀÌ ´Ü°è¿¡¼­ ÇÁ·Î±×·¥Àº setuid¿Í setgid È£ÃâÀ» ÇÏ¿©
- ÁöÁ¤ÇÑ »ç¿ëÀÚ¿Í ±×·ìÀÌ µÈ´Ù. ¶Ç, ±×·ì Á¢±Ù¸ñ·ÏÀº
- »ç¿ëÀÚ°¡ ÇØ´çµÈ ¸ðµç ±×·ìÀ¸·Î ÃʱâÈ­µÈ´Ù.
- </p>
- </li>
-
- <li>
- <strong>CGI/SSI ÇÁ·Î±×·¥ÀÌ ÀÖ´Â µð·ºÅ丮·Î µð·ºÅ丮¸¦
- º¯°æÇÒ ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- µð·ºÅ丮°¡ Á¸ÀçÇÏÁö ¾Ê´Ù¸é ÆÄÀÏÀÌ ÀÖÀ» ¼ö ¾ø´Ù. ÀÌ°÷À¸·Î
- µð·ºÅ丮¸¦ º¯°æÇÒ ¼ö ¾ø´Ù¸é µð·ºÅ丮´Â Á¸ÀçÇÏÁö ¾ÊÀ»
- °ÍÀÌ´Ù.
- </p>
- </li>
-
- <li>
- <strong>µð·ºÅ丮°¡ ¾ÆÆÄÄ¡ À¥°ø°£ ¾È¿¡ Àִ°¡?</strong>
-
- <p class="indent">
- ¼­¹öÀÇ ÀϹÝÀûÀÎ ºÎºÐÀ» ¿äûÇÒ °æ¿ì ¿äûÇÏ´Â µð·ºÅ丮°¡
- suEXEC ¹®¼­ root ¾Æ·¡ Àִ°¡? UserDirÀ» ¿äûÇÒ °æ¿ì
- ¿äûÇÏ´Â µð·ºÅ丮°¡ suEXEC userdir·Î ¼³Á¤ÇÑ (<a href="#install">suEXEC ¼³Á¤ ¿É¼Ç</a> Âü°í) µð·ºÅ丮
- ¾Æ·¡¿¡ Àִ°¡?
- </p>
- </li>
-
- <li>
- <strong>´Ù¸¥ ´©±¸µµ µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ <em>¾ø´Â°¡</em>?</strong>
-
- <p class="indent">
- µð·ºÅ丮¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô ¿­¾îµÎ±æ ¿øÇÏÁö¾Ê´Â´Ù. ¿ÀÁ÷
- ¼ÒÀ¯ÀÚ¸¸ÀÌ µð·ºÅ丮 ³»¿ëÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥ÀÌ Á¸ÀçÇϴ°¡?</strong>
-
- <p class="indent">
- Á¸ÀçÇÏÁö¾Ê´Ù¸é ½ÇÇàÇÒ ¼öµµ ¾ø´Ù.
- </p>
- </li>
-
- <li>
- <strong>´Ù¸¥ ´©±¸µµ ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥¿¡ ¾²±â±ÇÇÑÀÌ
- <em>¾ø´Â°¡</em>?</strong>
-
- <p class="indent">
- ¼ÒÀ¯ÀÚ¿Ü ´©±¸µµ CGI/SSI ÇÁ·Î±×·¥À» º¯°æÇÏ±æ ¿øÇÏÁö¾Ê´Â´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥ÀÌ setuid³ª setgid°¡
- <em>¾Æ´Ñ°¡</em>?</strong>
-
- <p class="indent">
- ¿ì¸®´Â ÇÁ·Î±×·¥ÀÌ ´Ù½Ã UID/GID¸¦ º¯°æÇÏ±æ ¿øÇÏÁö¾Ê´Â´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ »ç¿ëÀÚ/±×·ìÀÌ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀÚ/±×·ì°ú °°Àº°¡?</strong>
-
- <p class="indent">
- »ç¿ëÀÚ°¡ ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚÀΰ¡?
- </p>
- </li>
-
- <li>
- <strong>¾ÈÀüÇÑ µ¿ÀÛÀ» À§ÇØ ÇÁ·Î¼¼½ºÀÇ È¯°æº¯¼ö¸¦ û¼ÒÇÒ
- ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- suEXEC´Â (¼³Á¤¿¡¼­ Á¤ÀÇÇÑ) ¾ÈÀüÇÑ ½ÇÇà PATH¸¦ Àâ°í,
- (À̰͵µ ¼³Á¤¿¡¼­ Á¤ÀÇ) ¾ÈÀüÇÑ È¯°æº¯¼ö ¸ñ·Ï¿¡ ¿­°ÅµÈ
- º¯¼ö¸¸ ³²±â°í ÇÁ·Î¼¼½ºÀÇ È¯°æº¯¼ö¸¦ Áö¿î´Ù.
- </p>
- </li>
-
- <li>
- <strong>¼º°øÀûÀ¸·Î ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥À» ½ÇÇàÇÒ
- ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- ¿©±â¼­ suEXEC°¡ ³¡³ª°í ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÑ´Ù.
- </p>
- </li>
- </ol>
-
- <p>ÀÌ°ÍÀÌ suEXEC wrapper º¸¾È¸ðµ¨ÀÇ Ç¥ÁØ µ¿ÀÛÀÌ´Ù. ´Ù¼Ò
- ¾ö°ÝÇÏ°í CGI/SSI ¼³°è¿¡ »õ·Î¿î Á¦ÇÑÀÌ µÇÁö¸¸, º¸¾ÈÀ» ¿°µÎ¿¡
- µÎ°í ÇѴܰ辿 Á¶½É½º·´°Ô ¸¸µé¾îÁ³´Ù.</p>
-
- <p>ÀÌ º¸¾È ¸ðµ¨ÀÌ ¼­¹ö ¼³Á¤¿¡ ¾î¶² Á¦ÇÑÀ» ÁÖ´ÂÁö¿Í ÀûÀýÇÑ
- suEXEC ¼³Á¤À¸·Î ¾î¶² º¸¾È À§ÇèÀ» ÇÇÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇØ ÀÌ
- ¹®¼­ÀÇ <a href="#jabberwock">"´Ù½Ã Çѹø Á¶½ÉÇ϶ó"</a> ÀýÀ»
- Âü°íÇ϶ó.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="install" id="install">suEXEC ±¸¼º°ú ¼³Ä¡</a></h2>
-
- <p>ÀÌÁ¦ Àç¹ÌÀÖ´Â ³»¿ëÀÌ ½ÃÀÛÇÑ´Ù.</p>
-
- <p><strong>suEXEC ±¸¼º ¿É¼Ç</strong><br />
- </p>
-
- <dl>
- <dt><code>--enable-suexec</code></dt>
-
- <dd>ÀÌ ¿É¼ÇÀº ±âº»ÀûÀ¸·Î ¼³Ä¡µÇ°Å³ª È°¼ºÈ­µÇÁö¾Ê´Â suEXEC
- ±â´ÉÀ» È°¼ºÈ­ÇÑ´Ù. APACI°¡ suEXEC¸¦ ¹Þ¾ÆµéÀÌ·Á¸é
- <code>--enable-suexec</code> ¿É¼Ç¿Ü¿¡
- <code>--with-suexec-xxxxx</code> ¿É¼ÇÀÌ ÃÖ¼ÒÇÑ ÇÑ°³
- ÇÊ¿äÇÏ´Ù.</dd>
-
- <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
-
- <dd><code>suexec</code> ¹ÙÀ̳ʸ® °æ·Î´Â º¸¾È»ó ÀÌÀ¯·Î
- ¼­¹ö¿¡ ±â·ÏµÇ¾ß ÇÑ´Ù. °æ·Î ±âº»°ªÀ» ¹«½ÃÇÏ·Á¸é ÀÌ ¿É¼ÇÀ»
- »ç¿ëÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>
- <code>--with-suexec-bin=/usr/sbin/suexec</code></dd>
-
- <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
-
- <dd>º¸Åë ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â <a href="mod/mpm_common.html#user">»ç¿ëÀÚ¸í</a>. ÇÁ·Î±×·¥À»
- ½ÇÇàÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ »ç¿ëÀÚ´Ù.</dd>
-
- <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
-
- <dd>suEXEC Á¢±ÙÀÌ Çã¿ëµÇ´Â »ç¿ëÀÚ È¨µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮¸¦
- ÁöÁ¤ÇÑ´Ù. ÀÌ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ½ÇÇàÆÄÀÏÀ» »ç¿ëÀÚÀÇ
- suEXEC·Î ½ÇÇà¹Ç·Î, ¸ðµç ÇÁ·Î±×·¥ÀÌ "¾ÈÀüÇؾß" ÇÑ´Ù. (¿¹¸¦
- µé¾î, °ª¿¡ "*"ÀÌ ¾ø´Â) "°£´ÜÇÑ" UserDir Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù¸é
- °°Àº °ªÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù. UserDir Áö½Ã¾î°¡ passwd ÆÄÀÏ¿¡
- ³ª¿Â »ç¿ëÀÚ È¨µð·ºÅ丮¿Í ´Ù¸£¸é suEXEC´Â Á¤»óÀûÀ¸·Î
- ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ±âº»°ªÀº "public_html"ÀÌ´Ù.<br />
- °¡»óÈ£½ºÆ®µéÀÌ °¢°¢ ´Ù¸¥ UserDirÀ» »ç¿ëÇÑ´Ù¸é ¸ðµÎ ÇÑ
- ºÎ¸ð µð·ºÅ丮 ¾È¿¡ ÀÖµµ·Ï Á¤ÀÇÇØ¾ß ÇÏ°í, ±× ºÎ¸ð µð·ºÅ丮¸íÀ»
- ¿©±â Àû´Â´Ù. <strong>ÀÌ·¸°Ô Á¤ÀÇÇÏÁö ¾ÊÀ¸¸é, "~userdir"
- cgi ¿äûÀÌ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù!</strong></dd>
-
- <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
-
- <dd>¾ÆÆÄÄ¡ÀÇ DocumentRoot¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ´Â suEXEC°¡ »ç¿ëÇÒ
- ¼ö ÀÖ´Â (UserDirsÀ» Á¦¿ÜÇÑ) À¯ÀÏÇÑ °ø°£ÀÌ´Ù. ±âº» µð·ºÅ丮´Â
- <code>--datadir</code> °ª¿¡ "/htdocs"À» ºÙÀÎ °ÍÀÌ´Ù.
- <em>¿¹¸¦ µé¾î</em> "<code>--datadir=/home/apache</code>"·Î
- ±¸¼ºÇß´Ù¸é suEXEC wrapper´Â document root·Î
- "/home/apache/htdocs" µð·ºÅ丮¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
-
- <dd>suEXEC¿¡¼­ ÁöÁ¤°¡´ÉÇÑ »ç¿ëÀÚÀÇ ÃÖ¼Ò UID¸¦ Á¤ÀÇÇÑ´Ù.
- ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ 500À̳ª 100ÀÌ ÀûÀýÇÏ´Ù. ±âº»°ªÀº
- 100ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
-
- <dd>suEXEC¿¡¼­ ÁöÁ¤°¡´ÉÇÑ ±×·ìÀÇ ÃÖ¼Ò GID¸¦ Á¤ÀÇÇÑ´Ù.
- ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ 100ÀÌ ÀûÀýÇϹǷΠÀÌ °ªÀÌ ±âº»°ªÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
-
- <dd>¸ðµç suEXEC ÀÛµ¿°ú ¿À·ù¸¦ (°¨½Ã³ª µð¹ö±ë ¸ñÀû¿¡ À¯¿ëÇÑ)
- ±â·ÏÇÒ ·Î±×ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ·Î±×ÆÄÀÏÀÇ À̸§Àº
- "suexec_log"ÀÌ°í Ç¥ÁØ ·Î±×ÆÄÀÏ µð·ºÅ丮¿¡
- (<code>--logfiledir</code>) À§Ä¡ÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
-
- <dd>CGI ½ÇÇàÆÄÀÏ¿¡ ³Ñ°ÜÁú ¾ÈÀüÇÑ PATH ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÑ´Ù.
- ±âº»°ªÀº "/usr/local/bin:/usr/bin:/bin"ÀÌ´Ù.</dd>
- </dl>
-
- <p><strong>suEXEC wrapper¸¦ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡Çϱâ</strong><br />
- <code>--enable-suexec</code> ¿É¼ÇÀ¸·Î suEXEC ±â´ÉÀ» °¡´ÉÇÏ°ÔÇÑ
- °æ¿ì <code>make</code> ¸í·É¾î¸¦ ½ÇÇàÇϸé <code>suexec</code>
- ½ÇÇàÆÄÀÏÀÌ (¾ÆÆÄÄ¡¿Í ÇÔ²²) ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù.<br />
- ¸ðµç°ÍÀ» ÄÄÆÄÀÏÇÑ ÈÄ <code>make install</code> ¸í·É¾î¸¦
- ½ÇÇàÇÏ¿© ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ¹ÙÀ̳ʸ®ÆÄÀÏ <code>suexec</code>´Â
- <code>--sbindir</code> ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ ¼³Ä¡µÈ´Ù.
- ±âº» À§Ä¡´Â "/usr/local/apache2/sbin/suexec"ÀÌ´Ù.<br />
- ¼³Ä¡ °úÁ¤¿¡ <strong><em>root ±ÇÇÑ</em></strong>ÀÌ ÇÊ¿äÇÔÀ»
- ÁÖÀÇÇ϶ó. wrapper°¡ »ç¿ëÀÚ ID¸¦ ¼³Á¤ÇϱâÀ§Çؼ­´Â ¼ÒÀ¯ÀÚ°¡
- <code><em>root</em></code>ÀÌ°í ÆÄÀϸðµå·Î setuserid ½ÇÇàºñÆ®°¡
- ¼³Á¤µÇ¾ß ÇÑ´Ù.</p>
-
- <p><strong>ÆíÁýÁõÀûÀÎ ±ÇÇѼ³Á¤</strong><br />
- suEXEC wrapper´Â ÀÚ½ÅÀ» ½ÇÇàÇÑ »ç¿ëÀÚ°¡ ±¸¼º ¿É¼Ç
- <code>--with-suexec-caller</code>·Î ÁöÁ¤ÇÑ ¿Ã¹Ù¸¥ »ç¿ëÀÚÀÎÁö
- È®ÀÎÀ» ÇÏÁö¸¸, ÀÌ °Ë»ç ÀÌÀü¿¡ suEXEC°¡ »ç¿ëÇÏ´Â ½Ã½ºÅÛÈ£Ãâ
- ȤÀº ¶óÀ̺귯¸® ÇÔ¼ö°¡ Á¶À۵ǾúÀ» ¼ö ÀÖ´Ù. À̸¦ ´ëºñÇϸç
- ÀϹÝÀûÀ¸·Î ÁÁÀº ½À°üÀ̹ǷΠ¿ÀÁ÷ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â ±×·ì¸¸ÀÌ
- suEXEC¸¦ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÆÄÀϽýºÅÛ ±ÇÇÑÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, À¥¼­¹ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÏ°í:</p>
-
-<div class="example"><p><code>
- User www<br />
- Group webgroup<br />
-</code></p></div>
-
- <p><code>suexec</code>¸¦ "/usr/local/apache2/sbin/suexec"¿¡
- ¼³Ä¡ÇÏ¿´´Ù¸é, ´ÙÀ½À» ½ÇÇàÇØ¾ß ÇÑ´Ù:</p>
-
-<div class="example"><p><code>
- chgrp webgroup /usr/local/apache2/bin/suexec<br />
- chmod 4750 /usr/local/apache2/bin/suexec<br />
-</code></p></div>
-
- <p>±×·¯¸é ¿ÀÁ÷ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â ±×·ì¸¸ÀÌ suEXEC wrapper¸¦
- ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">suEXEC Å°°í ²ô±â</a></h2>
-
- <p>¾ÆÆÄÄ¡´Â ½ÃÀÛÇÒ¶§ <code>--sbindir</code> ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ
- µð·ºÅ丮¿¡¼­ <code>suexec</code> ÆÄÀÏÀ» (±âº»°ª
- "/usr/local/apache2/sbin/suexec") ã´Â´Ù. ¾ÆÆÄÄ¡°¡
- Á¤»óÀûÀ¸·Î ±¸¼ºµÈ suEXEC wrapper¸¦ ¹ß°ßÇÏ¸é ¿À·ù ·Î±×(error
- log)¿¡ ´ÙÀ½°ú °°ÀÌ Ãâ·ÂÇÑ´Ù:</p>
-
-<div class="example"><p><code>
- [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</code></p></div>
-
- <p>¼­¹ö ½ÃÀÛÁß¿¡ ÀÌ·± ¹®±¸¸¦ ¾ø´Ù¸é ¼­¹ö´Â ±â´ëÇÑ Àå¼Ò¿¡¼­
- wrapper ÇÁ·Î±×·¥À» ãÁö ¸øÇ߰ųª, ½ÇÇàÆÄÀÏÀÌ <em>setuid
- root</em>·Î ¼³Ä¡µÇÁö¾Ê¾Ò±â ¶§¹®ÀÏ °ÍÀÌ´Ù.</p>
-
- <p>óÀ½À¸·Î suEXEC ±â´ÉÀ» »ç¿ëÇÏ°í ½Í°í ÀÌ¹Ì ¾ÆÆÄÄ¡ ¼­¹ö°¡
- ½ÇÇàÁßÀ̶ó¸é, ¾ÆÆÄÄ¡¸¦ Á×ÀÌ°í ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÑ´Ù. °£´ÜÈ÷
- HUPÀ̳ª USR1 ½Ã±×³Î·Î Àç½ÃÀÛÇÏ´Â °ÍÀ¸·Î´Â ÃæºÐÇÏÁö ¾Ê´Ù. </p>
- <p>suEXEC¸¦ ¾È»ç¿ëÇÏ·Á¸é <code>suexec</code> ÆÄÀÏÀ» Áö¿îÈÄ
- ¾ÆÆÄÄ¡¸¦ Á×ÀÌ°í Àç½ÃÀÛÇØ¾ß ÇÑ´Ù. </p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="usage" id="usage">suEXEC »ç¿ëÇϱâ</a></h2>
-
- <p>CGI ÇÁ·Î±×·¥ ¿äûÀÇ °æ¿ì <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÑ °¡»óÈ£½ºÆ®¿¡ ¿äûÀ» ÇÏ¿´°Å³ª <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>ÀÌ
- ¿äûÀ» ó¸®ÇÏ´Â °æ¿ì¿¡¸¸ suEXEC wrapper¸¦ È£ÃâÇÑ´Ù.</p>
-
- <p><strong>°¡»óÈ£½ºÆ®:</strong><br /> suEXEC wrapper¸¦
- »ç¿ëÇÏ´Â ÇÑ°¡Áö ¹æ¹ýÀº <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> Á¤ÀÇ¿¡ <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ Áö½Ã¾î¸¦ ÁÖ¼­¹ö »ç¿ëÀÚ ID¿Í ´Ù¸£°Ô
- ¼³Á¤Çϸé CGI ÀÚ¿øÀÇ ¸ðµç ¿äûÀÌ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>¿¡¼­
- ÁöÁ¤ÇÑ <em>User</em>¿Í <em>Group</em>À¸·Î ½ÇÇàµÈ´Ù. ÀÌ
- Áö½Ã¾îµéÀÌ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>¿¡ ¾øÀ¸¸é ÁÖ¼­¹ö
- userid¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <p><strong>»ç¿ëÀÚ µð·ºÅ丮:</strong><br />
- <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>ÀÌ ¿äûÀ» ó¸®ÇÑ´Ù¸é suEXEC
- wrapper¸¦ È£ÃâÇÏ¿©, ¿äûÇÑ »ç¿ëÀÚ µð·ºÅ丮¿¡ ÇØ´çÇÏ´Â »ç¿ëÀÚ
- ID·Î CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ÀÌ ±â´ÉÀÌ µ¿ÀÛÇÏ·Á¸é »ç¿ëÀÚ
- ID·Î CGI¸¦ ½ÇÇàÇÒ ¼ö ÀÖ°í ½ºÅ©¸³Æ®°¡ À§ÀÇ <a href="#model">º¸¾È
- °Ë»ç</a> Ç׸ñÀ» ¸¸Á·ÇØ¾ß ÇÑ´Ù. <a href="#install">±¸¼º
- ¿É¼Ç</a> <code>--with-suexec-userdir</code>À» Âü°íÇ϶ó.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="debug" id="debug">suEXEC µð¹ö±ëÇϱâ</a></h2>
-
- <p>suEXEC wrapper´Â ·Î±× Á¤º¸¸¦ À§¿¡¼­ ´Ù·é
- <code>--with-suexec-logfile</code> ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ ÆÄÀÏ¿¡
- ¾´´Ù. wrapper¸¦ ¿Ã¹Ù·Î ±¸¼ºÇÏ°í ¼³Ä¡Çß´Ù¸é ¾îµð¼­ À߸øµÇ¾ú´ÂÁö
- ÀÌ ·Î±×ÆÄÀÏ¿Í ¼­¹öÀÇ error_log¸¦ »ìÆìºÁ¶ó.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="jabberwock" id="jabberwock">´Ù½Ã Çѹø Á¶½ÉÇ϶ó: °æ°í¿Í ¿¹Á¦</a></h2>
-
- <p><strong>ÁÖÀÇ!</strong> ÀÌ ¼½¼ÇÀº ¿ÏÀüÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù.
- ¾ÆÆÄÄ¡±×·ìÀÇ <a href="http://httpd.apache.org/docs-2.1/suexec.html">¿Â¶óÀÎ
- ¹®¼­</a>¿¡¼­ ÀÌ ¹®¼­ÀÇ ÃÖ½ÅÆÇÀ» Âü°íÇ϶ó.</p>
-
- <p>wrapper°¡ ¼­¹ö ¼³Á¤À» Á¦¾àÇÏ´Â ¸î°¡Áö Èï¹Ì·Î¿î Á¡ÀÌ ÀÖ´Ù.
- suEXEC¿Í °ü·ÃµÈ "¹ö±×"¸¦ º¸°íÇϱâ Àü¿¡ À̵éÀ» »ìÆ캸±æ ¹Ù¶õ´Ù.</p>
-
- <ul>
- <li><strong>suEXEC Á¦¾à »çÇ×</strong></li>
-
- <li>
- µð·ºÅ丮 ±¸Á¶ Á¦ÇÑ
-
- <p class="indent">
- º¸¾È°ú È¿À²¼ºÀ» À§ÇØ ¸ðµç suEXEC ¿äûÀº °¡»óÈ£½ºÆ®ÀÇ
- °æ¿ì ÃÖ»óÀ§ document root ȤÀº userdir ¿äûÀÇ °æ¿ì
- ÃÖ»óÀ§ °³ÀÎ document root ¾È¿¡¼­ ¹ß»ýÇØ¾ß ÇÑ´Ù. ¿¹¸¦
- µé¾î, °¡»óÈ£½ºÆ® ³×°³¸¦ ¼³Á¤Çß´Ù¸é °¡»óÈ£½ºÆ®¿¡¼­
- suEXEC¸¦ ÀÌ¿ëÇϱâÀ§ÇØ °¡»óÈ£½ºÆ®ÀÇ document root¸¦
- ÁÖ ¾ÆÆÄÄ¡ ¹®¼­ °èÃþ±¸Á¶ ¹Û¿¡ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
- (¿¹Á¦´Â ´ÙÀ½¿¡.)
- </p>
- </li>
-
- <li>
- suEXECÀÇ PATH ȯ°æº¯¼ö
-
- <p class="indent">
- º¯°æÇϸé À§ÇèÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ Æ÷ÇÔÇÏ´Â ¸ðµç °æ·Î°¡
- <strong>¹ÏÀ» ¼ö ÀÖ´Â</strong> µð·ºÅ丮ÀÎÁö È®ÀÎÇ϶ó.
- ÀÌ Áö±¸»óÀÇ ´©±º°¡°¡ ±×°÷¿¡ ÀÖ´Â Æ®·ÎÀ̸ñ¸¶¸¦ ½ÇÇàÇϱæ
- ¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
- </p>
- </li>
-
- <li>
- suEXEC ÄÚµå ¼öÁ¤Çϱâ
-
- <p class="indent">
- ¹Ýº¹Çؼ­ ¸»ÇÏÁö¸¸, ´ç½ÅÀÌ ¹«¾ùÀ» ÇÏ´ÂÁö ¸ð¸£°í ½ÃµµÇÑ´Ù¸é
- <strong>Å« ¹®Á¦</strong>°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¾î¶² °æ¿ì¿¡µµ
- ¼öÁ¤ÇÏÁö¸¶¶ó.
- </p>
- </li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/suexec.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/suexec.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/suexec.xml b/docs/manual/suexec.xml
deleted file mode 100644
index f57786db68..0000000000
--- a/docs/manual/suexec.xml
+++ /dev/null
@@ -1,596 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.15 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="suexec.xml.meta">
-
- <title>suEXEC Support</title>
-
- <summary>
- <p>The <strong>suEXEC</strong> feature provides
- Apache users the ability
- to run <strong>CGI</strong> and <strong>SSI</strong> programs
- under user IDs different from the user ID of the calling
- web-server. Normally, when a CGI or SSI program executes, it
- runs as the same user who is running the web server.</p>
-
- <p>Used properly, this feature can reduce
- considerably the security risks involved with allowing users to
- develop and run private CGI or SSI programs. However, if suEXEC
- is improperly configured, it can cause any number of problems
- and possibly create new holes in your computer's security. If
- you aren't familiar with managing <em>setuid root</em> programs
- and the security issues they present, we highly recommend that
- you not consider using suEXEC.</p>
- </summary>
-
-<section id="before"><title>Before we begin</title>
-
- <p>Before jumping head-first into this document,
- you should be aware of the assumptions made on the part of the
- Apache Group and this document.</p>
-
- <p>First, it is assumed that you are using a UNIX
- derivative operating system that is capable of
- <strong>setuid</strong> and <strong>setgid</strong> operations.
- All command examples are given in this regard. Other platforms,
- if they are capable of supporting suEXEC, may differ in their
- configuration.</p>
-
- <p>Second, it is assumed you are familiar with
- some basic concepts of your computer's security and its
- administration. This involves an understanding of
- <strong>setuid/setgid</strong> operations and the various
- effects they may have on your system and its level of
- security.</p>
-
- <p>Third, it is assumed that you are using an
- <strong>unmodified</strong> version of suEXEC code. All code
- for suEXEC has been carefully scrutinized and tested by the
- developers as well as numerous beta testers. Every precaution
- has been taken to ensure a simple yet solidly safe base of
- code. Altering this code can cause unexpected problems and new
- security risks. It is <strong>highly</strong> recommended you
- not alter the suEXEC code unless you are well versed in the
- particulars of security programming and are willing to share
- your work with the Apache Group for consideration.</p>
-
- <p>Fourth, and last, it has been the decision of
- the Apache Group to <strong>NOT</strong> make suEXEC part of
- the default installation of Apache. To this end, suEXEC
- configuration requires of the administrator careful attention
- to details. After due consideration has been given to the
- various settings for suEXEC, the administrator may install
- suEXEC through normal installation methods. The values for
- these settings need to be carefully determined and specified by
- the administrator to properly maintain system security during
- the use of suEXEC functionality. It is through this detailed
- process that the Apache Group hopes to limit suEXEC
- installation only to those who are careful and determined
- enough to use it.</p>
-
- <p>Still with us? Yes? Good. Let's move on!</p>
-</section>
-
-<section id="model"><title>suEXEC Security Model</title>
-
- <p>Before we begin configuring and installing
- suEXEC, we will first discuss the security model you are about
- to implement. By doing so, you may better understand what
- exactly is going on inside suEXEC and what precautions are
- taken to ensure your system's security.</p>
-
- <p><strong>suEXEC</strong> is based on a setuid
- "wrapper" program that is called by the main Apache web server.
- This wrapper is called when an HTTP request is made for a CGI
- or SSI program that the administrator has designated to run as
- a userid other than that of the main server. When such a
- request is made, Apache provides the suEXEC wrapper with the
- program's name and the user and group IDs under which the
- program is to execute.</p>
-
- <p>The wrapper then employs the following process
- to determine success or failure -- if any one of these
- conditions fail, the program logs the failure and exits with an
- error, otherwise it will continue:</p>
-
- <ol>
- <li>
- <strong>Is the user executing this wrapper a valid user of
- this system?</strong>
-
- <p class="indent">
- This is to ensure that the user executing the wrapper is
- truly a user of the system.
- </p>
- </li>
-
- <li>
- <strong>Was the wrapper called with the proper number of
- arguments?</strong>
-
- <p class="indent">
- The wrapper will only execute if it is given the proper
- number of arguments. The proper argument format is known
- to the Apache web server. If the wrapper is not receiving
- the proper number of arguments, it is either being
- hacked, or there is something wrong with the suEXEC
- portion of your Apache binary.
- </p>
- </li>
-
- <li>
- <strong>Is this valid user allowed to run the
- wrapper?</strong>
-
- <p class="indent">
- Is this user the user allowed to run this wrapper? Only
- one user (the Apache user) is allowed to execute this
- program.
- </p>
- </li>
-
- <li>
- <strong>Does the target CGI or SSI program have an unsafe
- hierarchical reference?</strong>
-
- <p class="indent">
- Does the target CGI or SSI program's path contain a leading
- '/' or have a '..' backreference? These are not allowed; the
- target CGI/SSI program must reside within suEXEC's document
- root (see <code>--with-suexec-docroot=<em>DIR</em></code>
- below).
- </p>
- </li>
-
- <li>
- <strong>Is the target user name valid?</strong>
-
- <p class="indent">
- Does the target user exist?
- </p>
- </li>
-
- <li>
- <strong>Is the target group name valid?</strong>
-
- <p class="indent">
- Does the target group exist?
- </p>
- </li>
-
- <li>
- <strong>Is the target user <em>NOT</em> superuser?</strong>
-
-
- <p class="indent">
- Presently, suEXEC does not allow <code><em>root</em></code>
- to execute CGI/SSI programs.
- </p>
- </li>
-
- <li>
- <strong>Is the target userid <em>ABOVE</em> the minimum ID
- number?</strong>
-
- <p class="indent">
- The minimum user ID number is specified during
- configuration. This allows you to set the lowest possible
- userid that will be allowed to execute CGI/SSI programs.
- This is useful to block out "system" accounts.
- </p>
- </li>
-
- <li>
- <strong>Is the target group <em>NOT</em> the superuser
- group?</strong>
-
- <p class="indent">
- Presently, suEXEC does not allow the <code><em>root</em></code>
- group to execute CGI/SSI programs.
- </p>
- </li>
-
- <li>
- <strong>Is the target groupid <em>ABOVE</em> the minimum ID
- number?</strong>
-
- <p class="indent">
- The minimum group ID number is specified during
- configuration. This allows you to set the lowest possible
- groupid that will be allowed to execute CGI/SSI programs.
- This is useful to block out "system" groups.
- </p>
- </li>
-
- <li>
- <strong>Can the wrapper successfully become the target user
- and group?</strong>
-
- <p class="indent">
- Here is where the program becomes the target user and
- group via setuid and setgid calls. The group access list
- is also initialized with all of the groups of which the
- user is a member.
- </p>
- </li>
-
- <li>
- <strong>Can we change directory to the one in which the target
- CGI/SSI program resides?</strong>
-
- <p class="indent">
- If it doesn't exist, it can't very well contain files. If we
- can't change directory to it, it might aswell not exist.
- </p>
- </li>
-
- <li>
- <strong>Is the directory within the Apache
- webspace?</strong>
-
- <p class="indent">
- If the request is for a regular portion of the server, is
- the requested directory within suEXEC's document root? If
- the request is for a UserDir, is the requested directory
- within the directory configured as suEXEC's userdir (see
- <a href="#install">suEXEC's configuration options</a>)?
- </p>
- </li>
-
- <li>
- <strong>Is the directory <em>NOT</em> writable by anyone
- else?</strong>
-
- <p class="indent">
- We don't want to open up the directory to others; only
- the owner user may be able to alter this directories
- contents.
- </p>
- </li>
-
- <li>
- <strong>Does the target CGI/SSI program exist?</strong>
-
- <p class="indent">
- If it doesn't exists, it can't very well be executed.
- </p>
- </li>
-
- <li>
- <strong>Is the target CGI/SSI program <em>NOT</em> writable
- by anyone else?</strong>
-
- <p class="indent">
- We don't want to give anyone other than the owner the
- ability to change the CGI/SSI program.
- </p>
- </li>
-
- <li>
- <strong>Is the target CGI/SSI program <em>NOT</em> setuid or
- setgid?</strong>
-
- <p class="indent">
- We do not want to execute programs that will then change
- our UID/GID again.
- </p>
- </li>
-
- <li>
- <strong>Is the target user/group the same as the program's
- user/group?</strong>
-
- <p class="indent">
- Is the user the owner of the file?
- </p>
- </li>
-
- <li>
- <strong>Can we successfully clean the process environment
- to ensure safe operations?</strong>
-
- <p class="indent">
- suEXEC cleans the process' environment by establishing a
- safe execution PATH (defined during configuration), as
- well as only passing through those variables whose names
- are listed in the safe environment list (also created
- during configuration).
- </p>
- </li>
-
- <li>
- <strong>Can we successfully become the target CGI/SSI program
- and execute?</strong>
-
- <p class="indent">
- Here is where suEXEC ends and the target CGI/SSI program begins.
- </p>
- </li>
- </ol>
-
- <p>This is the standard operation of the
- suEXEC wrapper's security model. It is somewhat stringent and
- can impose new limitations and guidelines for CGI/SSI design,
- but it was developed carefully step-by-step with security in
- mind.</p>
-
- <p>For more information as to how this security
- model can limit your possibilities in regards to server
- configuration, as well as what security risks can be avoided
- with a proper suEXEC setup, see the <a
- href="#jabberwock">"Beware the Jabberwock"</a> section of this
- document.</p>
-</section>
-
-<section id="install"><title>Configuring &amp; Installing
- suEXEC</title>
-
- <p>Here's where we begin the fun.</p>
-
- <p><strong>suEXEC configuration
- options</strong><br />
- </p>
-
- <dl>
- <dt><code>--enable-suexec</code></dt>
-
- <dd>This option enables the suEXEC feature which is never
- installed or activated by default. At least one
- <code>--with-suexec-xxxxx</code> option has to be provided
- together with the <code>--enable-suexec</code> option to let
- APACI accept your request for using the suEXEC feature.</dd>
-
- <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
-
- <dd>The path to the <code>suexec</code> binary must be hard-coded
- in the server for security reasons. Use this option to override
- the default path. <em>e.g.</em>
- <code>--with-suexec-bin=/usr/sbin/suexec</code></dd>
-
- <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
-
- <dd>The <a href="mod/mpm_common.html#user">username</a> under which
- Apache normally runs. This is the only user allowed to
- execute this program.</dd>
-
- <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
-
- <dd>Define to be the subdirectory under users' home
- directories where suEXEC access should be allowed. All
- executables under this directory will be executable by suEXEC
- as the user so they should be "safe" programs. If you are
- using a "simple" UserDir directive (ie. one without a "*" in
- it) this should be set to the same value. suEXEC will not
- work properly in cases where the UserDir directive points to
- a location that is not the same as the user's home directory
- as referenced in the passwd file. Default value is
- "public_html".<br />
- If you have virtual hosts with a different UserDir for each,
- you will need to define them to all reside in one parent
- directory; then name that parent directory here. <strong>If
- this is not defined properly, "~userdir" cgi requests will
- not work!</strong></dd>
-
- <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
-
- <dd>Define as the DocumentRoot set for Apache. This will be
- the only hierarchy (aside from UserDirs) that can be used for
- suEXEC behavior. The default directory is the <code>--datadir</code>
- value with the suffix "/htdocs", <em>e.g.</em> if you configure
- with "<code>--datadir=/home/apache</code>" the directory
- "/home/apache/htdocs" is used as document root for the suEXEC
- wrapper.</dd>
-
- <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
-
- <dd>Define this as the lowest UID allowed to be a target user
- for suEXEC. For most systems, 500 or 100 is common. Default
- value is 100.</dd>
-
- <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
-
- <dd>Define this as the lowest GID allowed to be a target
- group for suEXEC. For most systems, 100 is common and
- therefore used as default value.</dd>
-
- <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
-
- <dd>This defines the filename to which all suEXEC
- transactions and errors are logged (useful for auditing and
- debugging purposes). By default the logfile is named
- "suexec_log" and located in your standard logfile directory
- (<code>--logfiledir</code>).</dd>
-
- <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
-
- <dd>Define a safe PATH environment to pass to CGI
- executables. Default value is
- "/usr/local/bin:/usr/bin:/bin".</dd>
- </dl>
-
- <p><strong>Compiling and installing the suEXEC
- wrapper</strong><br />
- If you have enabled the suEXEC feature with the
- <code>--enable-suexec</code> option the <code>suexec</code> binary
- (together with Apache itself) is automatically built if you execute
- the <code>make</code> command.<br />
- After all components have been built you can execute the
- command <code>make install</code> to install them. The binary image
- <code>suexec</code> is installed in the directory defined by the
- <code>--sbindir</code> option. The default location is
- "/usr/local/apache2/sbin/suexec".<br />
- Please note that you need <strong><em>root
- privileges</em></strong> for the installation step. In order
- for the wrapper to set the user ID, it must be installed as
- owner <code><em>root</em></code> and must have the setuserid
- execution bit set for file modes.</p>
-
- <p><strong>Setting paranoid permissions</strong><br />
- Although the suEXEC wrapper will check to ensure that its
- caller is the correct user as specified with the
- <code>--with-suexec-caller</code> configure option, there is
- always the possibility that a system or library call suEXEC uses
- before this check may be exploitable on your system. To counter
- this, and because it is best-practise in general, you should use
- filesystem permissions to ensure that only the group Apache
- runs as may execute suEXEC.</p>
-
- <p>If for example, your web-server is configured to run as:</p>
-
-<example>
- User www<br />
- Group webgroup<br />
-</example>
-
- <p>and <code>suexec</code> is installed at
- "/usr/local/apache2/sbin/suexec", you should run:</p>
-
-<example>
- chgrp webgroup /usr/local/apache2/bin/suexec<br />
- chmod 4750 /usr/local/apache2/bin/suexec<br />
-</example>
-
- <p>This will ensure that only the group Apache runs as can even
- execute the suEXEC wrapper.</p>
-</section>
-
-<section id="enable"><title>Enabling &amp; Disabling
- suEXEC</title>
-
- <p>Upon startup of Apache, it looks for the file
- <code>suexec</code> in the directory defined by the
- <code>--sbindir</code> option (default is
- "/usr/local/apache/sbin/suexec"). If Apache finds a properly
- configured suEXEC wrapper, it will print the following message
- to the error log:</p>
-
-<example>
- [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</example>
-
- <p>If you don't see this message at server startup, the server is
- most likely not finding the wrapper program where it expects
- it, or the executable is not installed <em>setuid root</em>.</p>
-
- <p>If you want to enable the suEXEC mechanism for the first time
- and an Apache server is already running you must kill and
- restart Apache. Restarting it with a simple HUP or USR1 signal
- will not be enough. </p>
- <p>If you want to disable suEXEC you should kill and restart
- Apache after you have removed the <code>suexec</code> file. </p>
-</section>
-
-<section id="usage"><title>Using suEXEC</title>
-
- <p>Requests for CGI programs will call the suEXEC wrapper only if
- they are for a virtual host containing a <directive
- module="mod_suexec">SuexecUserGroup</directive> directive or if
- they are processed by <module>mod_userdir</module>.</p>
-
- <p><strong>Virtual Hosts:</strong><br /> One way to use the suEXEC
- wrapper is through the <directive
- module="mod_suexec">SuexecUserGroup</directive> directive in
- <directive module="core">VirtualHost</directive> definitions. By
- setting this directive to values different from the main server
- user ID, all requests for CGI resources will be executed as the
- <em>User</em> and <em>Group</em> defined for that <directive
- module="core" type="section">VirtualHost</directive>. If this
- directive is not specified for a <directive module="core"
- type="section">VirtualHost</directive> then the main server userid
- is assumed.</p>
-
- <p><strong>User directories:</strong><br /> Requests that are
- processed by <module>mod_userdir</module> will call the suEXEC
- wrapper to execute CGI programs under the userid of the requested
- user directory. The only requirement needed for this feature to
- work is for CGI execution to be enabled for the user and that the
- script must meet the scrutiny of the <a href="#model">security
- checks</a> above. See also the
- <code>--with-suexec-userdir</code> <a href="#install">compile
- time option</a>.</p> </section>
-
-<section id="debug"><title>Debugging suEXEC</title>
-
- <p>The suEXEC wrapper will write log information
- to the file defined with the <code>--with-suexec-logfile</code>
- option as indicated above. If you feel you have configured and
- installed the wrapper properly, have a look at this log and the
- error_log for the server to see where you may have gone astray.</p>
-
-</section>
-
-<section id="jabberwock"><title>Beware the Jabberwock:
- Warnings &amp; Examples</title>
-
- <p><strong>NOTE!</strong> This section may not be
- complete. For the latest revision of this section of the
- documentation, see the Apache Group's <a
- href="http://httpd.apache.org/docs-2.1/suexec.html">Online
- Documentation</a> version.</p>
-
- <p>There are a few points of interest regarding
- the wrapper that can cause limitations on server setup. Please
- review these before submitting any "bugs" regarding suEXEC.</p>
-
- <ul>
- <li><strong>suEXEC Points Of Interest</strong></li>
-
- <li>
- Hierarchy limitations
-
- <p class="indent">
- For security and efficiency reasons, all suEXEC requests
- must remain within either a top-level document root for
- virtual host requests, or one top-level personal document
- root for userdir requests. For example, if you have four
- VirtualHosts configured, you would need to structure all
- of your VHosts' document roots off of one main Apache
- document hierarchy to take advantage of suEXEC for
- VirtualHosts. (Example forthcoming.)
- </p>
- </li>
-
- <li>
- suEXEC's PATH environment variable
-
- <p class="indent">
- This can be a dangerous thing to change. Make certain
- every path you include in this define is a
- <strong>trusted</strong> directory. You don't want to
- open people up to having someone from across the world
- running a trojan horse on them.
- </p>
- </li>
-
- <li>
- Altering the suEXEC code
-
- <p class="indent">
- Again, this can cause <strong>Big Trouble</strong> if you
- try this without knowing what you are doing. Stay away
- from it if at all possible.
- </p>
- </li>
- </ul>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/suexec.xml.ja b/docs/manual/suexec.xml.ja
deleted file mode 100644
index b883c0df13..0000000000
--- a/docs/manual/suexec.xml.ja
+++ /dev/null
@@ -1,597 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.15 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="suexec.xml.meta">
-
- <title>suEXEC $B%5%]!<%H(B</title>
-
- <summary>
- <p><strong>suEXEC</strong>
- $B5!G=$K$h$j!"(BApache $B%f!<%6$O(B Web $B%5!<%P$r<B9T$7$F$$$k%f!<%6(B ID $B$H$O(B
- $B0[$J$k%f!<%6(B ID $B$G(B <strong>CGI</strong> $B%W%m%0%i%`$d(B <strong>SSI</strong>
- $B%W%m%0%i%`$r<B9T$9$k$3$H$,$G$-$^$9!#(BCGI $B%W%m%0%i%`$^$?$O(B SSI
- $B%W%m%0%i%`$r<B9T$9$k>l9g!"DL>o$O(B web $B%5!<%P$HF1$8%f!<%6$G<B9T$5$l$^$9!#(B
- </p>
-
- <p>$BE,@Z$K;HMQ$9$k$H!"$3$N5!G=$K$h$j%f!<%6$,8DJL$N(B CGI
- $B$d(B SSI $B%W%m%0%i%`$r3+H/$7<B9T$9$k$3$H$G@8$8$k%;%-%e%j%F%#>e$N4m81$r!"(B
- $B$+$J$j8:$i$9$3$H$,$G$-$^$9!#$7$+$7!"(BsuEXEC $B$N@_Dj$,ITE,@Z$@$H!"(B
- $BB?$/$NLdBj$,@8$8!"$"$J$?$N%3%s%T%e!<%?$K?7$7$$%;%-%e%j%F%#%[!<%k$r(B
- $B:n$C$F$7$^$&2DG=@-$,$"$j$^$9!#$"$J$?$,(B <em>setuid root</em>
- $B$5$l$?%W%m%0%i%`$H!"$=$l$i$+$i@8$8$k%;%-%e%j%F%#>e$NLdBj$N4IM}$K(B
- $B>\$7$/$J$$$h$&$J$i!"(BsuEXEC $B$N;HMQ$r8!F$$7$J$$$h$&$K6/$/?d>)$7$^$9!#(B
- </p>
- </summary>
-
- <section id="before"><title>$B;O$a$kA0$K(B</title>
-
- <p>$B$3$NJ8=q$N@hF,$KHt$VA0$K!"(BApache
- $B%0%k!<%W$H$3$NJ8=q$G$N2>Dj$rCN$C$F$*$/$Y$-$G$7$g$&!#(B
- </p>
-
- <p>$BBh(B 1 $B$K!"$"$J$?$,(B <strong>setuid</strong> $B$H(B
- <strong>setgid</strong> $BA`:n$,2DG=$J(B UNIX
- $BM3Mh$N%*%Z%l!<%F%#%s%0%7%9%F%`$r;H$C$F$$$k$3$H$rA[Dj$7$F$$$^$9!#(B
- $B$3$l$O!"$9$Y$F$N%3%^%s%INc$K$"$F$O$^$j$^$9!#(B
- $B$=$NB>$N%W%i%C%H%[!<%`$G$O!"$b$7(B suEXEC
- $B$,%5%]!<%H$5$l$F$$$?$H$7$F$b@_Dj$O0[$J$k$+$b$7$l$^$;$s!#(B</p>
-
- <p>$BBh(B 2 $B$K!"$"$J$?$,;HMQCf$N%3%s%T%e!<%?$N(B
- $B%;%-%e%j%F%#$K4X$9$k4pK\E*$J35G0$H!"$=$l$i$N4IM}$K$D$$$F>\$7$$$3$H$r(B
- $BA[Dj$7$F$$$^$9!#$3$l$O!"(B<strong>setuid/setgid</strong>
- $BA`:n!"$"$J$?$N%7%9%F%`>e$G$N$=$NA`:n$K$h$kMM!9$J8z2L!"(B
- $B%;%-%e%j%F%#%l%Y%k$K$D$$$F$"$J$?$,M}2r$7$F$$$k$H$$$&$3$H$r4^$_$^$9!#(B
- </p>
-
- <p>$BBh(B 3 $B$K!"(B<strong>$B2~B$$5$l$F$$$J$$(B</strong> suEXEC
- $B%3!<%I$N;HMQ$rA[Dj$7$F$$$^$9!#(BsuEXEC $B$N%3!<%I$O!"(B
- $BB?$/$N%Y!<%?%F%9%?$@$1$G$J$/!"3+H/<T$K$h$C$F$bCm0U?<$/@:::$5$l(B
- $B%F%9%H$5$l$F$$$^$9!#$=$l$i$NCm0U$K$h$j!"4J7i$G?.Mj$G$-$k0BA4$J(B
- $B%3!<%I$N4pHW$,J]>Z$5$l$^$9!#$3$N%3!<%I$r2~JQ$9$k$3$H$G!"(B
- $BM=4|$5$l$J$$LdBj$d?7$7$$%;%-%e%j%F%#>e$N4m81$,@8$8$k$3$H$,$"$j$^$9!#(B
- $B%;%-%e%j%F%#%W%m%0%i%_%s%0$N>\:Y$KDL$8$F$$$F!"(B
- $B:#8e$N8!F$$N$?$a$K@.2L$r(B Apache
- $B%0%k!<%W$H6&M-$7$h$&$H;W$&$N$G$J$1$l$P!"(BsuEXEC
- $B%3!<%I$OJQ$($J$$$3$H$r(B <strong>$B6/$/(B</strong>$B?d>)$7$^$9!#(B</p>
-
- <p>$BBh(B 4 $B$K!"$3$l$,:G8e$G$9$,!"(BsuEXEC $B$r(B Apache
- $B$N%G%U%)%k%H%$%s%9%H!<%k$K$O(B<strong>$B4^$a$J$$(B</strong>$B$3$H$,(B
- Apache $B%0%k!<%W$G7hDj$5$l$F$$$^$9!#$3$l$O!"(BsuEXEC
- $B$N@_Dj$K$O4IM}<T$N>\:Y$K$o$?$k?5=E$JCm0U$,I,MW$@$+$i$G$9!#(B
- suEXEC $B$NMM!9$J@_Dj$K$D$$$F8!F$$,=*$o$l$P!"4IM}<T$O(B suEXEC
- $B$rDL>o$N%$%s%9%H!<%kJ}K!$G%$%s%9%H!<%k$9$k$3$H$,$G$-$^$9!#(B
- $B$3$l$i$N@_DjCM$O!"(BsuEXEC
- $B5!G=$N;HMQCf$K%7%9%F%`%;%-%e%j%F%#$rE,@Z$KJ]$D$?$a$K!"(B
- $B4IM}<T$K$h$C$F?5=E$K7hDj$5$l;XDj$5$l$k$3$H$,I,MW$G$9!#(B
- $B$3$N>\:Y$J<j=g$K$h$j!"(BApache $B%0%k!<%W$O!"(BsuEXEC
- $B$N%$%s%9%H!<%k$K$D$$$F!"Cm0U?<$/==J,$K8!F$$7$F$=$l$r;HMQ$9$k$3$H$r(B
- $B7hDj$7$?>l9g$K8B$C$F$$$?$@$-$?$$$H9M$($F$$$^$9!#(B
- </p>
-
- <p>$B$=$l$G$b?J$_$^$9$+(B? $B$h$m$7$$!#$G$O!"@h$X?J$_$^$7$g$&(B!</p>
- </section>
-
- <section id="model"><title>suEXEC $B%;%-%e%j%F%#%b%G%k(B</title>
-
- <p>suEXEC $B$N@_Dj$H%$%s%9%H!<%k$r;O$a$kA0$K!"(B
- $B$^$:<BAu$7$h$&$H$7$F$$$k%;%-%e%j%F%#%b%G%k$K$D$$$FO@$8$F$*$-$^$9!#(B
- $B$=$l$K$O!"(BsuEXEC $B$NFbIt$G9T$J$o$l$F$$$k$3$H!"(B
- $B%7%9%F%`$N%;%-%e%j%F%#$rJ]>Z$9$k$?$a$K7Y9p$5$l$k$3$H$r(B
- $B$h$/M}2r$7$F$*$$$?J}$,$h$$$G$7$g$&!#(B</p>
-
- <p><strong>suEXEC</strong> $B$O!"(BApache web
- $B%5!<%P$+$i8F$S=P$5$l$k(B setuid $B$5$l$?(B "wrapper"
- $B%W%m%0%i%`$,4pK\$H$J$C$F$$$^$9!#@_7W$7$?(B CGI$B!"$^$?$O(B SSI
- $B%W%m%0%i%`$X$N(B HTTP $B%j%/%(%9%H$,$"$k$H!"$3$N(B wrapper
- $B$,8F$S=P$5$l$^$9!#$3$N$h$&$J%j%/%(%9%H$,$"$k$H!"(BApache
- $B$O$=$N%W%m%0%i%`$,<B9T$5$l$k:]$N%W%m%0%i%`L>$H%f!<%6(B ID $B$H%0%k!<%W(B
- ID $B$r;XDj$7$F(B suEXEC wrapper $B$r<B9T$7$^$9!#(B
- </p>
-
- <p>$B$=$l$+$i!"(Bwrapper $B$O@.8y$^$?$O<:GT$r7hDj$9$k$?$a(B
- $B0J2<$N=hM}$r9T$J$$$^$9!#$3$l$i$N>uBV$N$&$A0l$D$G$b<:GT$7$?>l9g!"(B
- $B%W%m%0%i%`$O<:GT$r%m%0$K5-O?$7$F%(%i!<$G=*N;$7$^$9!#(B
- $B$=$&$G$J$1$l$P!"8e$N=hM}$,B3$1$i$l$^$9!#(B</p>
-
- <ol>
- <li>
- <strong>wrapper
- $B$r<B9T$7$F$$$k%f!<%6$O$3$N%7%9%F%`$N@5Ev$J%f!<%6$+(B?</strong>
-
- <p class="indent">
- $B$3$l$O!"(Bwrapper $B$r<B9T$7$F$$$k%f!<%6$,(B
- $BK\Ev$K%7%9%F%`$NMxMQ<T$G$"$k$3$H$rJ]>Z$9$k$?$a$G$9!#(B
- </p>
- </li>
-
-
- <li>
- <strong>wrapper $B$,E,@Z$J?t$N0z?t$G8F$S=P$5$l$?$+(B?</strong>
-
-
- <p class="indent">
- wrapper $B$OE,@Z$J?t$N0z?t$,M?$($i$l$?>l9g$K$N$_<B9T$5$l$^$9!#(B
- $BE,@Z$J0z?t$N%U%)!<%^%C%H$O(B Apache Web $B%5!<%P$K2r<a$5$l$^$9!#(B
- $BE,@Z$J?t$N0z?t$r<u$1<h$i$J$1$l$P!"967b$r$5$l$?$+(B
- $B$"$J$?$N(B Apache $B%P%$%J%j$N(B suEXEC $B$NItJ,$,(B
- $B$I$3$+$*$+$7$$2DG=@-$,$"$j$^$9!#(B
- </p>
- </li>
-
- <li>
- <strong>$B$3$N@5Ev$J%f!<%6$O(B wrapper
- $B$N<B9T$r5v2D$5$l$F$$$k$+(B?</strong>
-
- <p class="indent">
- $B$3$N%f!<%6$O(B wrapper $B<B9T$r5v2D$5$l$?%f!<%6$G$9$+(B?
- $B$?$@0l?M$N%f!<%6(B (Apache $B%f!<%6(B) $B$@$1$,!"(B
- $B$3$N%W%m%0%i%`$N<B9T$r5v2D$5$l$^$9!#(B
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$N(B CGI, SSI $B%W%m%0%i%`$,0BA4$G$J$$3,AX$N;2>H$r$7$F$$$k$+(B?
- </strong>
-
- <p class="indent">
- $BBP>]$N(B CGI, SSI $B%W%m%0%i%`$,(B '/' $B$+$i;O$^$k!"$^$?$O(B
- '..' $B$K$h$k;2>H$r9T$J$C$F$$$^$9$+(B? $B$3$l$i$O5v2D$5$l$^$;$s!#(B
- $BBP>]$N%W%m%0%i%`$O(B suEXEC $B$N%I%-%e%a%s%H%k!<%H(B
- ($B2<5-$N(B <code>--with-suexec-docroot=<em>DIR</em></code> $B$r;2>H(B)
- $BFb$KB8:_$7$J$1$l$P$J$j$^$;$s!#(B
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$H$J$k%f!<%6L>$O@5Ev$J$b$N$+(B?</strong>
-
- <p class="indent">
- $BBP>]$H$J$k%f!<%6L>$OB8:_$7$F$$$^$9$+(B?
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$H$J$k%0%k!<%WL>$O@5Ev$J$b$N$+(B?</strong>
-
- <p class="indent">
- $BBP>]$H$J$k%0%k!<%WL>$OB8:_$7$F$$$^$9$+(B?
- </p>
- </li>
-
- <li>
- <strong>$BL\E*$N%f!<%6$O%9!<%Q!<%f!<%6$G$O(B<em>$B$J$$(B</em>$B$+(B?
- </strong>
-
- <p class="indent">
- $B:#$N$H$3$m!"(BsuEXEC $B$O(B <code><em>root</em></code> $B$K$h$k(B CGI/SSI
- $B%W%m%0%i%`$N<B9T$r5v2D$7$F$$$^$;$s!#(B
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$H$J$k%f!<%6(B ID $B$O!":G>.$N(B ID
- $BHV9f$h$j$b(B<em>$BBg$-$$(B</em>$B$+(B? </strong>
-
- <p class="indent">
- $B:G>.%f!<%6(B ID $BHV9f$O@_Dj;~$K;XDj$5$l$^$9!#$3$l$O!"(B
- CGI/SSI $B%W%m%0%i%`<B9T$r5v2D$5$l$k%f!<%6(B ID
- $B$N$H$j$&$k:G>.CM$G$9!#$3$l$O(B
- "system" $BMQ$N%"%+%&%s%H$rJD$a=P$9$N$KM-8z$G$9!#(B
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$H$J$k%0%k!<%W$O%9!<%Q!<%f!<%6$N%0%k!<%W$G$O(B
- <em>$B$J$$(B</em>$B$+(B?</strong>
-
- <p class="indent">
- $B:#$N$H$3$m!"(BsuEXEC $B$O(B 'root' $B%0%k!<%W$K$h$k(B CGI/SSI
- $B%W%m%0%i%`$N<B9T$r5v2D$7$F$$$^$;$s!#(B
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$H$J$k%0%k!<%W(B ID $B$O:G>.$N(B ID
- $BHV9f$h$j$b(B<em>$BBg$-$$(B</em>$B$+(B?</strong>
-
- <p class="indent">
- $B:G>.%0%k!<%W(B ID $BHV9f$O@_Dj;~$K;XDj$5$l$^$9!#$3$l$O!"(B
- CGI/SSI $B%W%m%0%i%`<B9T$r5v2D$5$l$k%0%k!<%W(B
- ID $B$N$H$j$&$k:G>.CM$G$9!#(B
- $B$3$l$O(B "system" $BMQ$N%0%k!<%W$rJD$a=P$9$N$KM-8z$G$9!#(B
- </p>
- </li>
-
- <li>
- <strong>wrapper $B$,@5>o$KBP>]$H$J$k%f!<%6$H%0%k!<%W$K$J$l$k$+(B?
- </strong>
-
- <p class="indent">
- $B$3$3$G!"(Bsetuid $B$H(B setgid
- $B$N5/F0$K$h$j%W%m%0%i%`$OBP>]$H$J$k%f!<%6$H%0%k!<%W$K$J$j$^$9!#(B
- $B%0%k!<%W%"%/%;%9%j%9%H$O!"(B
- $B%f!<%6$,B0$7$F$$$k$9$Y$F$N%0%k!<%W$G=i4|2=$5$l$^$9!#(B
- </p>
- </li>
-
- <li>
- <strong>CGI/SSI $B%W%m%0%i%`$,CV$+$l$F$$$k%G%#%l%/%H%j$K0\F0(B
- (change directory) $B$G$-$k$+(B?</strong>
-
- <p class="indent">
- $B%G%#%l%/%H%j$,B8:_$7$J$$$J$i!"$=$N%U%!%$%k$bB8:_$7$J$$$+$b$7$l$^$;$s!#(B
- $B%G%#%l%/%H%j$K0\F0$G$-$J$$$N$G$"$l$P!"$*$=$i$/B8:_$b$7$J$$$G$7$g$&!#(B
- </p>
- </li>
-
- <li>
- <strong>$B%G%#%l%/%H%j$,(B Apache $B$N%I%-%e%a%s%H%D%j!<Fb$K$"$k$+(B?
- </strong>
-
- <p class="indent">
- $B%j%/%(%9%H$,%5!<%PFb$N$b$N$G$"$l$P!"(B
- $BMW5a$5$l$?%G%#%l%/%H%j$,(B suEXEC $B$N%I%-%e%a%s%H%k!<%HG[2<$K$"$j$^$9$+(B?
- $B%j%/%(%9%H$,(B UserDir $B$N$b$N$G$"$l$P!"MW5a$5$l$?%G%#%l%/%H%j$,(B suEXEC
- $B$N%f!<%6$N%I%-%e%a%s%H%k!<%HG[2<$K$"$j$^$9$+(B?
- (<a href="#install">suEXEC $B@_Dj%*%W%7%g%s(B</a> $B;2>H(B)
- </p>
- </li>
-
- <li>
- <strong>$B%G%#%l%/%H%j$rB>$N%f!<%6$,=q$-9~$a$k$h$&$K$J$C$F(B
- <em>$B$$$J$$(B</em>$B$+(B?</strong>
-
- <p class="indent">
- $B%G%#%l%/%H%j$rB>%f!<%6$K3+J|$7$J$$$h$&$K$7$^$9!#(B
- $B=jM-%f!<%6$@$1$,$3$N%G%#%l%/%H%j$NFbMF$r2~JQ$G$-$k$h$&$K$7$^$9!#(B
- </p>
- </li>
-
-
- <li>
- <strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$OB8:_$9$k$+(B?</strong>
-
- <p class="indent">
- $BB8:_$7$J$1$l$P<B9T$G$-$^$;$s!#(B
- </p>
- </li>
-
- <li>
- <strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`%U%!%$%k$,B>%"%+%&%s%H$+$i(B
- $B=q$-9~$a$k$h$&$K$J$C$F(B<em>$B$$$J$$(B</em>$B$+(B?</strong>
-
- <p class="indent">
- $B=jM-<T0J30$K$O(B CGI/SSI $B%W%m%0%i%`$rJQ99$9$k8"8B$OM?$($i$l$^$;$s!#(B
- </p>
- </li>
-
-
- <li>
- <strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$,(B setuid $B$^$?$O(B setgid
- $B$5$l$F(B<em>$B$$$J$$(B</em>$B$+(B?</strong>
-
- <p class="indent">
- UID/GID $B$r:FEYJQ99$7$F$N%W%m%0%i%`<B9T$O$7$^$;$s(B
- </p>
- </li>
-
-
- <li>
- <strong>$BBP>]$H$J$k%f!<%6(B/$B%0%k!<%W$,%W%m%0%i%`$N(B
- $B%f!<%6(B/$B%0%k!<%W$HF1$8$+(B?</strong>
-
- <p class="indent">
- $B%f!<%6$,$=$N%U%!%$%k$N=jM-<T$G$9$+(B?
- </p>
- </li>
-
- <li>
- <strong>$B0BA4$JF0:n$rJ]>Z$9$k$?$a$N4D6-JQ?t%/%j%"$,2DG=$+(B?
- </strong>
-
- <p class="indent">
- suEXEC $B$O!"0BA4$J4D6-JQ?t$N%j%9%H(B
- ($B$3$l$i$O@_Dj;~$K:n@.$5$l$^$9(B) $BFb$NJQ?t$H$7$FEO$5$l$k0BA4$J(B
- PATH $BJQ?t(B ($B@_Dj;~$K;XDj$5$l$^$9(B) $B$r@_Dj$9$k$3$H$G!"(B
- $B%W%m%;%9$N4D6-JQ?t$r%/%j%"$7$^$9!#(B
- </p>
- </li>
-
-
- <li>
- <strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$r(B exec $B$7$F<B9T$G$-$k$+(B?</strong>
-
-
- <p class="indent">
- $B$3$3$G(B suEXEC $B$,=*N;$7!"BP>]$H$J$k%W%m%0%i%`$,3+;O$5$l$^$9!#(B
- </p>
- </li>
- </ol>
-
- <p>$B$3$3$^$G$,(B suEXEC $B$N(B wrapper
- $B$K$*$1$k%;%-%e%j%F%#%b%G%k$NI8=`E*$JF0:n$G$9!#$b$&>/$787=E$K(B
- CGI/SSI $B@_7W$K$D$$$F$N?7$7$$@)8B$d5,Dj$r<h$jF~$l$k$3$H$b$G$-$^$9$,!"(B
- suEXEC $B$O%;%-%e%j%F%#$KCm0U$7$F?5=E$K>/$7$:$D3+H/$5$l$F$-$^$7$?!#(B
- </p>
-
- <p>$B$3$N%;%-%e%j%F%#%b%G%k$rMQ$$$F(B
- $B%5!<%P@_Dj;~$K$I$N$h$&$K5v$9$3$H$r@)8B$9$k$+!"$^$?!"(BsuEXEC
- $B$rE,@Z$K@_Dj$9$k$H$I$N$h$&$J%;%-%e%j%F%#>e$N4m81$rHr$1$i$l$k$+$K(B
- $B4X$9$k$h$j>\$7$$>pJs$K$D$$$F$O!"(B<a href="#jabberwock">"$B$H$+$2$KCm0U(B"
- (Beware the Jabberwock)</a> $B$N>O$r;2>H$7$F$/$@$5$$!#(B
- </p>
- </section>
-
- <section id="install"><title>suEXEC
- $B$N@_Dj$H%$%s%9%H!<%k(B</title>
-
- <p>$B$3$3$+$i3Z$7$/$J$j$^$9!#(B</p>
-
- <p><strong>suEXEC
- $B@_Dj%*%W%7%g%s(B</strong><br />
- </p>
-
- <dl>
- <dt><code>--enable-suexec</code></dt>
-
- <dd>$B$3$N%*%W%7%g%s$O!"%G%U%)%k%H$G$O%$%s%9%H!<%k$5$l$:!"(B
- $BM-8z$K$O$J$i$J$$(B suEXEC $B5!G=$rM-8z$K$7$^$9!#(B
- suEXEC $B$r;H$&$h$&$K(B APACI $B$KMW5a$9$k$K$O!"(B<code>--enable-suexec</code>
- $B%*%W%7%g%s$K$"$o$;$F>/$J$/$H$b0l$D$O(B <code>--with-suexec-xxxxx</code>
- $B%*%W%7%g%s$,;XDj$5$l$J$1$l$P$J$j$^$;$s!#(B</dd>
-
- <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
-
- <dd>$B%;%-%e%j%F%#>e$NM}M3$K$h$j!"(B<code>suexec</code> $B%P%$%J%j$N%Q%9$O%5!<%P$K(B
- $B%O!<%I%3!<%I$5$l$F$$$kI,MW$,$"$j$^$9!#%G%U%)%k%H$N%Q%9$r(B
- $BJQ$($?$$$H$-$O$3$N%*%W%7%g%s$r;H$C$F$/$@$5$$!#(B<em>$BNc$($P(B</em>$B!"(B
- <code>--with-suexec-bin=/usr/sbin/suexec</code> $B$N$h$&$K!#(B</dd>
-
- <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
-
- <dd>Apache $B$rDL>oF0:n$5$;$k(B<a
- href="mod/mpm_common.html#user">$B%f!<%6L>(B</a>$B$r;XDj$7$^$9!#(B
- $B$3$N%f!<%6$@$1$,(B suexec $B$N<B9T$r5v2D$5$l$?%f!<%6$K$J$j$^$9!#(B</dd>
-
- <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
-
- <dd>suEXEC $B$,%"%/%;%9$r5v$5$l$k%f!<%6%[!<%`%G%#%l%/%H%jG[2<$N(B
- $B%5%V%G%#%l%/%H%j$r;XDj$7$^$9!#(B
- $B$3$N%G%#%l%/%H%j0J2<$NA4<B9T%U%!%$%k$O!"(B"$B0BA4$J(B"$B%W%m%0%i%`$K$J$k$h$&!"(B
- suEXEC $B$,$=$N%f!<%6$H$7$F<B9T$G$-$k$h$&$K$7$^$9!#(B
- "$BC1=c$J(B" UserDir $B%G%#%l%/%F%#%V$r;H$C$F$$$k>l9g(B
- ($B$9$J$o$A(B "*" $B$r4^$^$J$$$b$N(B)$B!"$3$l$HF1$8CM$r@_Dj$9$Y$-$G$9!#(B
- Userdir $B%G%#%l%/%F%#%V$,$=$N%f!<%6$N%Q%9%o!<%I%U%!%$%kFb$N(B
- $B%[!<%`%G%#%l%/%H%j$HF1$8>l=j$r;X$7$F$$$J$1$l$P!"(B
- suEXEC $B$OE,@Z$KF0:n$7$^$;$s!#%G%U%)%k%H$O(B "public_html" $B$G$9!#(B
- <br />
- $B3F(B UserDir $B$,0[$J$C$?2>A[%[%9%H$r@_Dj$7$F$$$k>l9g!"(B
- $B$=$l$i$rA4$F0l$D$N?F%G%#%l%/%H%j$K4^$a$F!"(B
- $B$=$N?F%G%#%l%/%H%j$NL>A0$r$3$3$G;XDj$9$kI,MW$,$"$j$^$9!#(B
- <strong>$B$3$N$h$&$K;XDj$5$l$J$1$l$P(B "~userdir" cgi
- $B$X$N%j%/%(%9%H$,F0:n$7$^$;$s!#(B</strong></dd>
-
- <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
-
- <dd>Apache $B$N%I%-%e%a%s%H%k!<%H$r@_Dj$7$^$9!#$3$l$,(B suEXEC
- $B$NF0:n$G;HMQ$9$kM#0l$N%G%#%l%/%H%j3,AX$K$J$j$^$9(B (UserDir
- $B$N;XDj$OJL(B)$B!#%G%U%)%k%H$G$O(B <code>--datedir</code> $B$K(B "/htdocs"
- $B$H$$$&%5%U%#%C%/%9$r$D$1$?$b$N$G$9!#(B
- "<code>--datadir=/home/apache</code>" $B$H$7$F@_Dj$9$k$H!"(B
- suEXEC wrapper $B$K$H$C$F(B "/home/apache/htdocs"
- $B$,%I%-%e%a%s%H%k!<%H$H$7$F;H$o$l$^$9!#(B</dd>
-
- <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
-
- <dd>suEXEC $B$NBP>]%f!<%6$H$7$F5v$5$l$k(B UID $B$N:G>.CM$r;XDj$7$^$9!#(B
- $BBgDq$N%7%9%F%`$G$O(B 500 $B$+(B 100 $B$,0lHLE*$G$9!#(B
- $B%G%U%)%k%HCM$O(B 100 $B$G$9!#(B</dd>
-
- <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
-
- <dd>suEXEC $B$NBP>]%0%k!<%W$H$7$F5v$5$l$k(B GID
- $B$N:G>.CM$r;XDj$7$^$9!#BgDq$N%7%9%F%`$G$O(B 100 $B$,0lHLE*$J$N$G!"(B
- $B%G%U%)%k%HCM$H$7$F$b(B 100 $B$,;H$o$l$F$$$^$9!#(B</dd>
-
- <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
-
- <dd>suEXEC $B$N=hM}$H%(%i!<$,5-O?$5$l$k%U%!%$%kL>$r;XDj$7$^$9!#(B
- ($B4F::$d%G%P%C%0L\E*$KM-MQ(B)
- $B%G%U%)%k%H$G$O%m%0%U%!%$%k$O(B "suexec_log" $B$H$$$&L>A0$G!"(B
- $BI8=`$N%m%0%U%!%$%k%G%#%l%/%H%j(B (<code>--logfiledir</code>) $B$KCV$+$l$^$9!#(B
- </dd>
-
- <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
-
- <dd>CGI $B<B9T%U%!%$%k$KEO$5$l$k0BA4$J(B PATH $B4D6-JQ?t$G$9!#(B
- $B%G%U%)%k%HCM$O(B "/usr/local/bin:/usr/bin:/bin" $B$G$9!#(B
- </dd>
- </dl>
-
- <p><strong>suEXEC wrapper
- $B$N%3%s%Q%$%k$H%$%s%9%H!<%k(B</strong><br />
- <code>--enable-suexec</code> $B%*%W%7%g%s$G(B suEXEC $B5!G=$rM-8z$K$9$k$H!"(B
- "make" $B%3%^%s%I$r<B9T$7$?;~$K(B <code>suexec</code> $B$N%P%$%J%j(B (Apache $B<+BN$b(B)
- $B$,<+F0E*$K:n@.$5$l$^$9!#(B
- <br />
- $B$9$Y$F$N9=@.MWAG$,:n@.$5$l$k$H!"$=$l$i$N%$%s%9%H!<%k$K$O(B
- <code>make install</code> $B%3%^%s%I$,<B9T$G$-$^$9!#%P%$%J%j%$%a!<%8$N(B <code>suexec</code>
- $B$O(B <code>--sbindir</code> $B%*%W%7%g%s$G;XDj$5$l$?%G%#%l%/%H%j$K%$%s%9%H!<%k$5$l$^$9!#(B
- $B%G%U%)%k%H$N>l=j$O(B "/usr/local/apache/sbin/suexec" $B$G$9!#(B<br />
- $B%$%s%9%H!<%k;~$K$O(B <strong><em>root</em></strong>
- $B8"8B$,I,MW$J$N$GCm0U$7$F$/$@$5$$!#(Bwrapper $B$,%f!<%6(B ID
- $B$r@_Dj$9$k$?$a$K!"=jM-<T(B <code><em>root</em></code>
- $B$G$N%;%C%H%f!<%6(B ID
- $B%S%C%H$r$=$N%U%!%$%k$N%b!<%I$K@_Dj$7$J$1$l$P$J$j$^$;$s!#(B
- </p>
-
- <p><strong>$B0BA4$J%Q!<%_%C%7%g%s$r@_Dj$9$k(B</strong><br />
- suEXEC $B%i%C%Q!<$O!"(B<code>--with-suexec-caller</code> configure
- $B%*%W%7%g%s$G;XDj$7$?@5$7$$%f!<%6$G5/F0$5$l$F$$$k$3$H$r3NG'$7$^$9$,!"(B
- $B%7%9%F%`>e$G$3$N%A%'%C%/$,9T$J$o$l$kA0$K!"(B
- suEXEC $B$,8F$V%7%9%F%`$d%i%$%V%i%j$,@H<e$G$"$k2DG=@-$O;D$j$^$9!#BP93:v$H$7$F!"(B
- $B0lHL$KNI$$=,47$H$b$5$l$$$^$9$,!"(B
- $B%U%!%$%k%7%9%F%`%Q!<%_%C%7%g%s$r;H$C$F(B
- Apache $B$N<B9T;~$N%0%k!<%W$N$_$,(B suEXEC $B$r<B9T$G$-$k$h$&$K(B
- $B$9$k$N$,NI$$$G$7$g$&!#(B</p>
-
- <p>$B$?$H$($P!"<!$N$h$&$K%5!<%P$,@_Dj$5$l$F$$$?$H$7$^$9!#(B</p>
-
-<example>
- User www<br />
- Group webgroup<br />
-</example>
-
- <p><code>suexec</code> $B$,(B "/usr/local/apache2/sbin/suexec"
- $B$K%$%s%9%H!<%k$5$l$F$$$?>l9g!"<!$N$h$&$K@_Dj$9$kI,MW$,$"$j$^$9!#(B</p>
-
-<example>
- chgrp webgroup /usr/local/apache2/bin/suexec<br />
- chmod 4750 /usr/local/apache2/bin/suexec<br />
-</example>
-
- <p>$B$3$l$G(B Apache $B$,<B9T$5$l$k%0%k!<%W$N$_$,(B
- suEXEC $B%i%C%Q!<$r<B9T$G$-$k$H$$$&$3$H$r(B
- $B3N>Z$7$^$9!#(B</p>
- </section>
-
- <section id="enable"><title>suEXEC
- $B$NM-8z2=$HL58z2=(B</title>
-
- <p>$B5/F0;~$K!"(BApache $B$O(B <code>--sbindir</code>
- $B%*%W%7%g%s$G@_Dj$5$l$?%G%#%l%/%H%j$G(B
- <code>suexec</code> $B$rC5$7$^$9(B
- ($B%G%U%)%k%H$O(B "/usr/local/apache/sbin/suexec") $B!#(B
- $BE,@Z$K@_Dj$5$l$?(B suEXEC $B$,$_$D$+$k$H!"(B
- $B%(%i!<%m%0$K0J2<$N%a%C%;!<%8$,=PNO$5$l$^$9!#(B</p>
-
-<example>
- [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</example>
-
- <p>$B%5!<%P5/F0;~$K$3$N%a%C%;!<%8$,=P$J$$>l9g!"(B
- $BBgDq$O%5!<%P$,A[Dj$7$?>l=j$G(B wrapper $B%W%m%0%i%`$,8+$D$+$i$J$+$C$?$+!"(B
- <em>setuid root</em> $B$H$7$F%$%s%9%H!<%k$5$l$F$$$J$$$+$G$9!#(B</p>
-
- <p>suEXEC $B$N;EAH$_$r;HMQ$9$k$N$,=i$a$F$G!"(BApache $B$,4{$KF0:nCf$G$"$l$P!"(B
- Apache $B$r(B kill $B$7$F!":F5/F0$7$J$1$l$P$J$j$^$;$s!#(BHUP $B%7%0%J%k$d(B
- USR1 $B%7%0%J%k$K$h$kC1=c$J:F5/F0$G$OIT==J,$G$9!#(B</p>
- <p>suEXEC $B$rL58z$K$9$k>l9g$O!"(B<code>suexec</code> $B%U%!%$%k$r:o=|$7$F$+$i(B
- Apache $B$r(B kill $B$7$F:F5/F0$7$^$9!#(B
- </p>
- </section>
-
- <section id="usage"><title>suEXEC $B$N;HMQ(B</title>
-
- <p>CGI $B%W%m%0%i%`$X$N%j%/%(%9%H$,(B suEXEC $B%i%C%Q!<$r8F$V$N$O!"(B
- <directive module="mod_suexec">SuexecUserGroup</directive> $B%G%#%l%/%F%#%V$r(B
- $B4^$`%P!<%A%c%k%[%9%H$X$N%j%/%(%9%H$+!"(B<module>mod_userdir</module> $B$K$h$j(B
- $B=hM}$5$l$?%j%/%(%9%H$N>l9g$K8B$j$^$9!#(B</p>
-
- <p><strong>$B2>A[%[%9%H(B:</strong><br />
- suEXEC wrapper $B$N;H$$J}$H$7$F!"(B
- <directive module="core">VirtualHost</directive> $B@_Dj$G$N(B
- <directive module="mod_suexec">SuexecUserGroup</directive>
- $B%G%#%l%/%F%#%V$rDL$7$?$b$N$,$"$j$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r%a%$%s%5!<%P$N%f!<%6(B ID
- $B$H0[$J$k$b$N$K$9$k$H!"(BCGI $B%j%=!<%9$X$N$9$Y$F$N%j%/%(%9%H$O!"$=$N(B
- <directive module="core"
- type="section">VirtualHost</directive> $B$G;XDj$5$l$?(B <em>User</em> $B$H(B
- <em>Group</em> $B$H$7$F<B9T$5$l$^$9!#(B<directive module="core"
- type="section">VirtualHost</directive>
- $B$G$3$N%G%#%l%/%F%#%V$,;XDj$5$l$F$$$J$$>l9g!"(B
- $B%a%$%s%5!<%P$N%f!<%6(B ID $B$,A[Dj$5$l$^$9!#(B</p>
-
- <p><strong>$B%f!<%6%G%#%l%/%H%j(B:</strong><br />
- <module>mod_userdir</module> $B$K$h$j=hM}$5$l$?%j%/%(%9%H$O(B
- $B%j%/%(%9%H$5$l$?%f!<%6%G%#%l%/%H%j$N%f!<%6(B ID $B$G(B CGI $B%W%m%0%i%`$r(B
- $B<B9T$9$k$?$a$K(B suEXEC $B%i%C%Q!<$r8F$S$^$9!#(B
- $B$3$N5!G=$rF0:n$5$;$k$?$a$KI,MW$J$3$H$O!"(BCGI
- $B$r$=$N%f!<%6$G<B9T$G$-$k$3$H!"$=$N%9%/%j%W%H$,>e5-$N(B<a
- href="#model">$B%;%-%e%j%F%#8!::(B</a>$B$r%Q%9$G$-$k$3$H$G$9!#(B
- <a href="#install">$B%3%s%Q%$%k(B
- $B;~$N%*%W%7%g%s(B</a> <code>--with-suexec-userdir</code> $B$b;2>H$7$F$/$@$5$$!#(B</p>
- </section>
-
- <section id="debug"><title>suEXEC $B$N%G%P%C%0(B</title>
-
- <p>suEXEC wrapper $B$O!">e5-$G=R$Y$?(B <code>--with-suexec-logfile</code>
- $B%*%W%7%g%s$G;XDj$5$l$?%U%!%$%k$K%m%0>pJs$r5-O?$7$^$9!#(B
- wrapper $B$rE,@Z$K@_Dj!"%$%s%9%H!<%k$G$-$F$$$k$H;W$&>l9g!"(B
- $B$I$3$GLB$C$F$$$k$+8+$h$&$H$9$k$J$i$3$N%m%0$H%5!<%P$N(B
- $B%(%i!<%m%0$r8+$k$H$h$$$G$7$g$&!#(B</p>
- </section>
-
- <section id="jabberwock"><title>$B$H$+$2$KCm0U(B: $B7Y9p$H;vNc(B</title>
-
- <p><strong>$BCm0U(B!</strong>
- $B$3$N>O$O40A4$G$O$"$j$^$;$s!#$3$N>O$N:G?72~D{HG$K$D$$$F$O!"(B
- Apache $B%0%k!<%W$N(B<a href="http://httpd.apache.org/docs-2.1/suexec.html">
- $B%*%s%i%$%s%I%-%e%a%s%H(B</a>$BHG$r;2>H$7$F$/$@$5$$!#(B
- </p>
-
- <p>$B%5!<%P$N@_Dj$K@)8B$r$b$&$1$k(B wrapper $B$K$D$$$F!"(B
- $B$$$/$D$+6=L#?<$$E@$,$"$j$^$9!#(BsuEXEC $B$K4X$9$k(B "$B%P%0(B"
- $B$rJs9p$9$kA0$K$3$l$i$r3NG'$7$F$/$@$5$$!#(B</p>
-
- <ul>
- <li><strong>suEXEC $B$N6=L#?<$$E@(B</strong></li>
-
- <li>$B3,AX9=B$$N@)8B(B
-
-
- <p class="indent">
- $B%;%-%e%j%F%#$H8zN($NM}M3$+$i!"(B<code>suEXEC</code> $B$NA4$F$N%j%/%(%9%H$O(B
- $B2>A[%[%9%H$X$N%j%/%(%9%H$K$*$1$k:G>e0L$N%I%-%e%a%s%H%k!<%HFb$+!"(B
- $B%f!<%6%G%#%l%/%H%j$X$N%j%/%(%9%H$K$*$1$k8D!9$N%f!<%6$N:G>e0L$N(B
- $B%I%-%e%a%s%H%k!<%HFb$K;D$i$J$1$l$P$J$j$^$;$s!#(B
- $BNc$($P!";M$D$N2>A[%[%9%H$r@_Dj$7$F$$$k>l9g!"(B
- $B2>A[%[%9%H$N(B suEXEC $B$KM-Mx$J$h$&$K!"%a%$%s$N(B Apache
- $B%I%-%e%a%s%H3,AX$N30B&$KA4$F$N2>A[%[%9%H$N%I%-%e%a%s%H%k!<%H$r(B
- $B9=C[$9$kI,MW$,$"$j$^$9!#(B($BNc$O8eF|5-:\(B)
- </p>
- </li>
-
- <li>suEXEC $B$N(B PATH $B4D6-JQ?t(B
-
-
- <p class="indent">
- $B$3$l$rJQ99$9$k$N$O4m81$G$9!#$3$N;XDj$K4^$^$l$k3F%Q%9$,(B
- <strong>$B?.Mj$G$-$k(B</strong>
- $B%G%#%l%/%H%j$G$"$k$3$H$r3NG'$7$F$/$@$5$$!#(B
- $B@$3&$+$i$N%"%/%;%9$K$h$j!"C/$+$,%[%9%H>e$G%H%m%$$NLZGO(B
- $B$r<B9T$G$-$k$h$&$K$O$7$?$/$J$$$G$7$g$&!#(B
- </p>
- </li>
-
- <li>suEXEC $B%3!<%I$N2~B$(B
-
-
- <p class="indent">
- $B7+$jJV$7$^$9$,!"2?$r$d$m$&$H$7$F$$$k$+GD0.$;$:$K$3$l$r$d$k$H(B
- <strong>$BBg$-$JLdBj(B</strong>$B$r0z$-5/$3$7$+$M$^$;$s!#(B
- $B2DG=$J8B$jHr$1$F$/$@$5$$!#(B
- </p>
- </li>
- </ul>
-</section>
-
-</manualpage>
diff --git a/docs/manual/suexec.xml.ko b/docs/manual/suexec.xml.ko
deleted file mode 100644
index 7025e9ebd1..0000000000
--- a/docs/manual/suexec.xml.ko
+++ /dev/null
@@ -1,526 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.15 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="suexec.xml.meta">
-
- <title>suEXEC Áö¿ø</title>
-
- <summary>
- <p><strong>suEXEC</strong> ±â´ÉÀº ¾ÆÆÄÄ¡°¡ <strong>CGI</strong>¿Í
- <strong>SSI</strong> ÇÁ·Î±×·¥À» À¥¼­¹ö¸¦ ½ÇÇàÇÑ »ç¿ëÀÚ ID°¡
- ¾Æ´Ñ ´Ù¸¥ »ç¿ëÀÚ ID·Î ½ÇÇàÇϵµ·Ï ÇÑ´Ù. º¸Åë CGI³ª SSI ÇÁ·Î±×·¥À»
- ½ÇÇàÇϸé À¥¼­¹ö¸¦ ½ÇÇàÇÑ »ç¿ëÀÚ¿Í °°Àº »ç¿ëÀÚ·Î ½ÇÇàÇÑ´Ù.</p>
-
- <p>ÀÌ ±â´ÉÀ» ÀûÀýÈ÷ »ç¿ëÇÏ¸é »ç¿ëÀÚ°¡ Á÷Á¢ CGI³ª SSI ÇÁ·Î±×·¥À»
- °³¹ßÇÏ°í ½ÇÇàÇÒ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â º¸¾ÈÀ§ÇèÀ» »ó´çÈ÷ ÁÙÀÏ
- ¼ö ÀÖ´Ù. ±×·¯³ª suEXEC°¡ ºÎÀûÀýÇÏ°Ô ¼³Á¤µÇ¸é ¸¹Àº ¹®Á¦¿Í
- ÄÄÇ»ÅÍ¿¡ »õ·Î¿î º¸¾È ÇãÁ¡À» ¸¸µé ¼ö ÀÖ´Ù. ¸¸¾à <em>setuid root</em>
- ÇÁ·Î±×·¥°ú ÀÌ·± ÇÁ·Î±×·¥ÀÇ º¸¾È ¹®Á¦¿¡ »ý¼ÒÇÏ´Ù¸é suEXEC¸¦
- »ç¿ëÇÏÁö¾Ê±æ Áø½ÉÀ¸·Î ¹Ù¶õ´Ù.</p>
- </summary>
-
-<section id="before"><title>½ÃÀÛÇϱâ Àü¿¡</title>
-
- <p>½ÃÀÛÇϱâ Àü¿¡ ¿ì¼± ¾ÆÆÄÄ¡±×·ì°ú ÀÌ ¹®¼­ÀÇ °¡Á¤À» ¹àÈù´Ù.</p>
-
- <p>¸ÕÀú <strong>setuid</strong>¿Í <strong>setgid</strong>
- ±â´ÉÀÌ °¡´ÉÇÑ À¯´Ð½º·ù ¿î¿µÃ¼Á¦¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù. ¸ðµç
- ¸í·É¾î ¿¹µéµµ °°Àº °¡Á¤À» ÇÑ´Ù. suEXEC¸¦ Áö¿øÇÏ´Â ´Ù¸¥ Ç÷¡ÆûÀ»
- »ç¿ëÇÏ´Ù¸é ¼³Á¤ÀÌ ´Ù¸¦ ¼ö ÀÖ´Ù.</p>
-
- <p>µÎ¹ø°, ´ç½ÅÀÌ ÄÄÇ»ÅÍ º¸¾ÈÀÇ ±âº» °³³ä°ú °ü¸®¿¡ Àͼ÷ÇÏ´Ù°í
- °¡Á¤ÇÑ´Ù. ¿©±â¿¡´Â <strong>setuid/setgid</strong> ±â´É°ú
- À̵éÀÌ ½Ã½ºÅÛ°ú º¸¾È¿¡ ¹ÌÄ¡´Â ¿©·¯ ¿µÇâ¿¡ ´ëÇÑ ÀÌÇØ°¡ Æ÷ÇԵȴÙ.</p>
-
- <p>¼¼¹ø°, suEXEC ÄÚµåÀÇ <strong>¼öÁ¤ÇÏÁö¾ÊÀº</strong>
- ¹öÀüÀ» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù. °³¹ßÀÚ¿Í ¿©·¯ º£Å¸Å×½ºÅ͵éÀº
- suEXEC¿Í °ü·ÃµÈ ¸ðµç Äڵ带 Á¶½É½º·´°Ô Á¶»çÇÏ°í °Ë»çÇß´Ù.
- Äڵ带 °£´ÜÇÏ°Ô ÇÏ°í È®½ÇÇÑ ¾ÈÀüÀ» º¸ÀåÇϱâÀ§ÇØ ¸ðµç ÁÖÀǸ¦
- ±â¿ï¿´´Ù. ÀÌ Äڵ带 ¼öÁ¤ÇÏ¸é ¿¹»óÄ¡¸øÇÑ ¹®Á¦¿Í »õ·Î¿î º¸¾È
- À§ÇèÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. º¸¾È ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ ¸Å¿ì Àß ¾Ë°í
- Äڵ带 »ìÆ캸±âÀ§ÇØ ¾ÆÆÄÄ¡±×·ì°ú ÀÛ¾÷À» °øÀ¯ÇÒ Àǻ簡 ¾ø´Ù¸é
- suEXEC Äڵ带 ¼öÁ¤ÇÏÁö¾Ê±æ <strong>°­·ÂÈ÷</strong> ±ÇÇÑ´Ù.</p>
-
- <p>³×¹ø°ÀÌÀÚ ¸¶Áö¸·À¸·Î, ¾ÆÆÄÄ¡±×·ìÀº suEXEC¸¦ ¾ÆÆÄÄ¡
- ±âº»¼³Ä¡¿¡ Æ÷ÇÔÇÏÁö <strong>¾Ê±â·Î</strong> °áÁ¤Çß´Ù. °á±¹
- °ü¸®ÀÚ°¡ ÁÖÀǸ¦ ±â¿ï¿©¼­ suEXEC¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. suEXECÀÇ
- ¿©·¯ ¼³Á¤À» Àß °í·ÁÇÑÈÄ °ü¸®ÀÚ´Â ÀϹÝÀûÀÎ ¼³Ä¡¹æ¹ýÀ» suEXEC¸¦
- ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. suEXEC ±â´ÉÀ» »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÇ º¸¾ÈÀ» Ã¥ÀÓÁö´Â
- °ü¸®ÀÚ´Â ÀÌ ¼³Á¤°ªµéÀ» ÁÖÀÇÀÖ°Ô »ìÆ캸°í ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
- ÀÌ·± »ó¼¼ÇÑ °úÁ¤Àº suEXEC¸¦ »ç¿ëÇÒ¸¸Å­ ÁÖÀÇÀÖ°í ´ÜÈ£ÇÑ
- »ç¶÷¸¸ÀÌ suEXEC¸¦ »ç¿ëÇϵµ·Ï ¾ÆÆÄÄ¡±×·ìÀÌ ¿øÇϱ⠶§¹®ÀÌ´Ù.</p>
-
- <p>¾ÆÁ÷µµ »ç¿ëÇÏ±æ ¿øÇϴ°¡? ±×·±°¡? ÁÁ´Ù. ÀÌÁ¦ ½ÃÀÛÇÏÀÚ!</p>
-</section>
-
-<section id="model"><title>suEXEC º¸¾È¸ðµ¨</title>
-
- <p>suEXEC¸¦ ±¸¼ºÇÏ°í ¼³Ä¡Çϱâ Àü¿¡ ¿ì¸®´Â º¸¾È¸ðµ¨À» ¸ÕÀú
- ¼³¸íÇÑ´Ù. À̸¦ ÅëÇØ Á¤È®È÷ suEXEC ¾È¿¡¼­´Â ¹«½¼ ÀÏÀÌ ÀϾ¸ç
- ½Ã½ºÅÛÀÇ º¸¾ÈÀ» À§ÇØ ¹«¾ùÀ» Á¶½ÉÇØ¾ß ÇÒÁö ´õ Àß ÀÌÇØÇÒ ¼ö
- ÀÖ´Ù.</p>
-
- <p><strong>suEXEC</strong>´Â ¾ÆÆÄÄ¡ À¥¼­¹ö°¡ ºÎ¸£´Â setuid
- "wrapper" ÇÁ·Î±×·¥À» ±â¹ÝÀ¸·Î ÇÑ´Ù. ÀÌ wrapper´Â °ü¸®ÀÚ°¡
- ÁÖ¼­¹ö¿Í ´Ù¸¥ userid·Î ½ÇÇàÇϵµ·Ï ¼³Á¤ÇÑ CGI³ª SSI ÇÁ·Î±×·¥¿¡
- HTTP ¿äûÀÌ ¿À¸é ºÒ¸°´Ù. ÀÌ·± ¿äûÀÌ ¿À¸é ¾ÆÆÄÄ¡´Â suEXEC
- wrapper¿¡°Ô ÇÁ·Î±×·¥¸í°ú ÇÁ·Î±×·¥À» ½ÇÇàÇÒ »ç¿ëÀÚ¿Í ±×·ì
- ID¸¦ Á¦°øÇÑ´Ù.</p>
-
- <p>±×·¯¸é wrapper´Â ´ÙÀ½ °úÁ¤À» ÅëÇØ ¼º°ø°ú ½ÇÆи¦ °áÁ¤ÇÑ´Ù.
- ÀÌ Á¶°ÇÁß Çϳª¶óµµ ½ÇÆÐÇϸé ÇÁ·Î±×·¥Àº ½ÇÆзΠ±â·ÏµÇ°í ¿À·ù¸¦
- ³»¸ç Á¾·áÇÑ´Ù. ½ÇÆÐÇÏÁö ¾ÊÀ¸¸é °úÁ¤À» °è¼ÓÇÑ´Ù:</p>
-
- <ol>
- <li>
- <strong>wrapper¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ°¡ ½Ã½ºÅÛÀÇ Á¤»óÀûÀÎ
- »ç¿ëÀÚÀΰ¡?</strong>
-
- <p class="indent">
- wrapper¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ°¡ ½ÇÁ¦·Î ½Ã½ºÅÛÀÇ »ç¿ëÀÚÀÎÁö
- È®ÀÎÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÀûÀýÇÑ ¼öÀÇ ¾Æ±Ô¸ÕÆ®·Î wrapper¸¦ ½ÇÇàÇϴ°¡?</strong>
-
- <p class="indent">
- wrapper´Â ÀûÀýÇÑ ¼öÀÇ ¾Æ±Ô¸ÕÆ®°¡ ÀÖ¾î¾ß¸¸ ½ÇÇàµÈ´Ù.
- ¾ÆÆÄÄ¡ À¥¼­¹ö°¡ ÀÌ °³¼ö¸¦ ¾È´Ù. wrapper°¡ ÀûÀýÇÑ ¼öÀÇ
- ¾Æ±Ô¸ÕÆ®¸¦ ¹ÞÁö¸øÇϸé ÇØÅ·µÇ¾ú°Å³ª ¾ÆÆÄÄ¡ÀÇ suEXEC¿¡
- ¹º°¡ ¹®Á¦°¡ ÀÖ´Â °ÍÀÌ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÀÌ »ç¿ëÀÚ°¡ wrapper¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëµÇ¾ú³ª?</strong>
-
- <p class="indent">
- ÀÌ »ç¿ëÀÚ°¡ wrapper¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëµÇ¾ú³ª? ¿ÀÁ÷
- ÇÑ »ç¿ëÀÚ(¾ÆÆÄÄ¡ »ç¿ëÀÚ)¸¸ÀÌ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ
- ¼ö ÀÖ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ CGI³ª SSI ÇÁ·Î±×·¥ÀÌ ¾ÈÀüÇÏÁö¾ÊÀº °èÃþÂüÁ¶¸¦
- °¡Áö´Â°¡?</strong>
-
- <p class="indent">
- ÁöÁ¤ÇÑ CGI³ª SSI ÇÁ·Î±×·¥ÀÌ '/'·Î ½ÃÀÛÇϰųª µÞÂüÁ¶
- '..'À» °¡Áö´Â°¡? À̵éÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ÁöÁ¤ÇÑ CGI/SSI
- ÇÁ·Î±×·¥Àº suEXEC ¹®¼­ root (¾Æ·¡
- <code>--with-suexec-docroot=<em>DIR</em></code> Âü°í)
- ³»¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ »ç¿ëÀÚ¸íÀÌ À¯È¿ÇÑ°¡?</strong>
-
- <p class="indent">
- ÁöÁ¤ÇÑ »ç¿ëÀÚ°¡ Á¸ÀçÇϴ°¡?
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ ±×·ì¸íÀÌ À¯È¿ÇÑ°¡?</strong>
-
- <p class="indent">
- ÁöÁ¤ÇÑ ±×·ìÀÌ Á¸ÀçÇϴ°¡?
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ »ç¿ëÀÚ°¡ superuser°¡ <em>¾Æ´Ñ°¡</em>?</strong>
-
-
- <p class="indent">
- ÇöÀç suEXEC´Â <code><em>root</em></code>°¡ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ userid°¡ ÃÖ¼Ò ID ¼ýÀÚº¸´Ù <em>Å«°¡</em>?</strong>
-
- <p class="indent">
- ¼³Á¤¿¡¼­ ÃÖ¼Ò »ç¿ëÀÚ ID ¼ýÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. ±×·¡¼­ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â useridÀÇ ÃÖ¼ÒÄ¡¸¦ ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. "½Ã½ºÅÛ¿ë" °èÁ¤À» Á¦¿ÜÇÒ¶§ À¯¿ëÇÏ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ ±×·ìÀÌ superuser ±×·ìÀÌ <em>¾Æ´Ñ°¡</em>?</strong>
-
- <p class="indent">
- ÇöÀç suEXEC´Â <code><em>root</em></code> ±×·ìÀÌ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ groupid°¡ ÃÖ¼Ò ID ¼ýÀÚº¸´Ù <em>Å«°¡</em>?</strong>
-
- <p class="indent">
- ¼³Á¤¿¡¼­ ÃÖ¼Ò ±×·ì ID ¼ýÀÚ¸¦ ÁöÁ¤ÇÑ´Ù. ±×·¡¼­ CGI/SSI
- ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â groupidÀÇ ÃÖ¼ÒÄ¡¸¦ ÁöÁ¤ÇÒ
- ¼ö ÀÖ´Ù. "½Ã½ºÅÛ¿ë" ±×·ìÀ» Á¦¿ÜÇÒ¶§ À¯¿ëÇÏ´Ù.
- </p>
- </li>
-
- <li>
- <strong>wrapper°¡ ¼º°øÀûÀ¸·Î ÁöÁ¤ÇÑ »ç¿ëÀÚ¿Í ±×·ìÀÌ
- µÉ ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- ÀÌ ´Ü°è¿¡¼­ ÇÁ·Î±×·¥Àº setuid¿Í setgid È£ÃâÀ» ÇÏ¿©
- ÁöÁ¤ÇÑ »ç¿ëÀÚ¿Í ±×·ìÀÌ µÈ´Ù. ¶Ç, ±×·ì Á¢±Ù¸ñ·ÏÀº
- »ç¿ëÀÚ°¡ ÇØ´çµÈ ¸ðµç ±×·ìÀ¸·Î ÃʱâÈ­µÈ´Ù.
- </p>
- </li>
-
- <li>
- <strong>CGI/SSI ÇÁ·Î±×·¥ÀÌ ÀÖ´Â µð·ºÅ丮·Î µð·ºÅ丮¸¦
- º¯°æÇÒ ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- µð·ºÅ丮°¡ Á¸ÀçÇÏÁö ¾Ê´Ù¸é ÆÄÀÏÀÌ ÀÖÀ» ¼ö ¾ø´Ù. ÀÌ°÷À¸·Î
- µð·ºÅ丮¸¦ º¯°æÇÒ ¼ö ¾ø´Ù¸é µð·ºÅ丮´Â Á¸ÀçÇÏÁö ¾ÊÀ»
- °ÍÀÌ´Ù.
- </p>
- </li>
-
- <li>
- <strong>µð·ºÅ丮°¡ ¾ÆÆÄÄ¡ À¥°ø°£ ¾È¿¡ Àִ°¡?</strong>
-
- <p class="indent">
- ¼­¹öÀÇ ÀϹÝÀûÀÎ ºÎºÐÀ» ¿äûÇÒ °æ¿ì ¿äûÇÏ´Â µð·ºÅ丮°¡
- suEXEC ¹®¼­ root ¾Æ·¡ Àִ°¡? UserDirÀ» ¿äûÇÒ °æ¿ì
- ¿äûÇÏ´Â µð·ºÅ丮°¡ suEXEC userdir·Î ¼³Á¤ÇÑ (<a
- href="#install">suEXEC ¼³Á¤ ¿É¼Ç</a> Âü°í) µð·ºÅ丮
- ¾Æ·¡¿¡ Àִ°¡?
- </p>
- </li>
-
- <li>
- <strong>´Ù¸¥ ´©±¸µµ µð·ºÅ丮¿¡ ¾²±â±ÇÇÑÀÌ <em>¾ø´Â°¡</em>?</strong>
-
- <p class="indent">
- µð·ºÅ丮¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô ¿­¾îµÎ±æ ¿øÇÏÁö¾Ê´Â´Ù. ¿ÀÁ÷
- ¼ÒÀ¯ÀÚ¸¸ÀÌ µð·ºÅ丮 ³»¿ëÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥ÀÌ Á¸ÀçÇϴ°¡?</strong>
-
- <p class="indent">
- Á¸ÀçÇÏÁö¾Ê´Ù¸é ½ÇÇàÇÒ ¼öµµ ¾ø´Ù.
- </p>
- </li>
-
- <li>
- <strong>´Ù¸¥ ´©±¸µµ ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥¿¡ ¾²±â±ÇÇÑÀÌ
- <em>¾ø´Â°¡</em>?</strong>
-
- <p class="indent">
- ¼ÒÀ¯ÀÚ¿Ü ´©±¸µµ CGI/SSI ÇÁ·Î±×·¥À» º¯°æÇÏ±æ ¿øÇÏÁö¾Ê´Â´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥ÀÌ setuid³ª setgid°¡
- <em>¾Æ´Ñ°¡</em>?</strong>
-
- <p class="indent">
- ¿ì¸®´Â ÇÁ·Î±×·¥ÀÌ ´Ù½Ã UID/GID¸¦ º¯°æÇÏ±æ ¿øÇÏÁö¾Ê´Â´Ù.
- </p>
- </li>
-
- <li>
- <strong>ÁöÁ¤ÇÑ »ç¿ëÀÚ/±×·ìÀÌ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀÚ/±×·ì°ú °°Àº°¡?</strong>
-
- <p class="indent">
- »ç¿ëÀÚ°¡ ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚÀΰ¡?
- </p>
- </li>
-
- <li>
- <strong>¾ÈÀüÇÑ µ¿ÀÛÀ» À§ÇØ ÇÁ·Î¼¼½ºÀÇ È¯°æº¯¼ö¸¦ û¼ÒÇÒ
- ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- suEXEC´Â (¼³Á¤¿¡¼­ Á¤ÀÇÇÑ) ¾ÈÀüÇÑ ½ÇÇà PATH¸¦ Àâ°í,
- (À̰͵µ ¼³Á¤¿¡¼­ Á¤ÀÇ) ¾ÈÀüÇÑ È¯°æº¯¼ö ¸ñ·Ï¿¡ ¿­°ÅµÈ
- º¯¼ö¸¸ ³²±â°í ÇÁ·Î¼¼½ºÀÇ È¯°æº¯¼ö¸¦ Áö¿î´Ù.
- </p>
- </li>
-
- <li>
- <strong>¼º°øÀûÀ¸·Î ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥À» ½ÇÇàÇÒ
- ¼ö Àִ°¡?</strong>
-
- <p class="indent">
- ¿©±â¼­ suEXEC°¡ ³¡³ª°í ÁöÁ¤ÇÑ CGI/SSI ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÑ´Ù.
- </p>
- </li>
- </ol>
-
- <p>ÀÌ°ÍÀÌ suEXEC wrapper º¸¾È¸ðµ¨ÀÇ Ç¥ÁØ µ¿ÀÛÀÌ´Ù. ´Ù¼Ò
- ¾ö°ÝÇÏ°í CGI/SSI ¼³°è¿¡ »õ·Î¿î Á¦ÇÑÀÌ µÇÁö¸¸, º¸¾ÈÀ» ¿°µÎ¿¡
- µÎ°í ÇѴܰ辿 Á¶½É½º·´°Ô ¸¸µé¾îÁ³´Ù.</p>
-
- <p>ÀÌ º¸¾È ¸ðµ¨ÀÌ ¼­¹ö ¼³Á¤¿¡ ¾î¶² Á¦ÇÑÀ» ÁÖ´ÂÁö¿Í ÀûÀýÇÑ
- suEXEC ¼³Á¤À¸·Î ¾î¶² º¸¾È À§ÇèÀ» ÇÇÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇØ ÀÌ
- ¹®¼­ÀÇ <a href="#jabberwock">"´Ù½Ã Çѹø Á¶½ÉÇ϶ó"</a> ÀýÀ»
- Âü°íÇ϶ó.</p>
-</section>
-
-<section id="install"><title>suEXEC ±¸¼º°ú ¼³Ä¡</title>
-
- <p>ÀÌÁ¦ Àç¹ÌÀÖ´Â ³»¿ëÀÌ ½ÃÀÛÇÑ´Ù.</p>
-
- <p><strong>suEXEC ±¸¼º ¿É¼Ç</strong><br />
- </p>
-
- <dl>
- <dt><code>--enable-suexec</code></dt>
-
- <dd>ÀÌ ¿É¼ÇÀº ±âº»ÀûÀ¸·Î ¼³Ä¡µÇ°Å³ª È°¼ºÈ­µÇÁö¾Ê´Â suEXEC
- ±â´ÉÀ» È°¼ºÈ­ÇÑ´Ù. APACI°¡ suEXEC¸¦ ¹Þ¾ÆµéÀÌ·Á¸é
- <code>--enable-suexec</code> ¿É¼Ç¿Ü¿¡
- <code>--with-suexec-xxxxx</code> ¿É¼ÇÀÌ ÃÖ¼ÒÇÑ ÇÑ°³
- ÇÊ¿äÇÏ´Ù.</dd>
-
- <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
-
- <dd><code>suexec</code> ¹ÙÀ̳ʸ® °æ·Î´Â º¸¾È»ó ÀÌÀ¯·Î
- ¼­¹ö¿¡ ±â·ÏµÇ¾ß ÇÑ´Ù. °æ·Î ±âº»°ªÀ» ¹«½ÃÇÏ·Á¸é ÀÌ ¿É¼ÇÀ»
- »ç¿ëÇÑ´Ù. <em>¿¹¸¦ µé¾î</em>
- <code>--with-suexec-bin=/usr/sbin/suexec</code></dd>
-
- <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
-
- <dd>º¸Åë ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â <a
- href="mod/mpm_common.html#user">»ç¿ëÀÚ¸í</a>. ÇÁ·Î±×·¥À»
- ½ÇÇàÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ »ç¿ëÀÚ´Ù.</dd>
-
- <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
-
- <dd>suEXEC Á¢±ÙÀÌ Çã¿ëµÇ´Â »ç¿ëÀÚ È¨µð·ºÅ丮ÀÇ ÇÏÀ§µð·ºÅ丮¸¦
- ÁöÁ¤ÇÑ´Ù. ÀÌ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ½ÇÇàÆÄÀÏÀ» »ç¿ëÀÚÀÇ
- suEXEC·Î ½ÇÇà¹Ç·Î, ¸ðµç ÇÁ·Î±×·¥ÀÌ "¾ÈÀüÇؾß" ÇÑ´Ù. (¿¹¸¦
- µé¾î, °ª¿¡ "*"ÀÌ ¾ø´Â) "°£´ÜÇÑ" UserDir Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù¸é
- °°Àº °ªÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù. UserDir Áö½Ã¾î°¡ passwd ÆÄÀÏ¿¡
- ³ª¿Â »ç¿ëÀÚ È¨µð·ºÅ丮¿Í ´Ù¸£¸é suEXEC´Â Á¤»óÀûÀ¸·Î
- ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ±âº»°ªÀº "public_html"ÀÌ´Ù.<br />
- °¡»óÈ£½ºÆ®µéÀÌ °¢°¢ ´Ù¸¥ UserDirÀ» »ç¿ëÇÑ´Ù¸é ¸ðµÎ ÇÑ
- ºÎ¸ð µð·ºÅ丮 ¾È¿¡ ÀÖµµ·Ï Á¤ÀÇÇØ¾ß ÇÏ°í, ±× ºÎ¸ð µð·ºÅ丮¸íÀ»
- ¿©±â Àû´Â´Ù. <strong>ÀÌ·¸°Ô Á¤ÀÇÇÏÁö ¾ÊÀ¸¸é, "~userdir"
- cgi ¿äûÀÌ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù!</strong></dd>
-
- <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
-
- <dd>¾ÆÆÄÄ¡ÀÇ DocumentRoot¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ´Â suEXEC°¡ »ç¿ëÇÒ
- ¼ö ÀÖ´Â (UserDirsÀ» Á¦¿ÜÇÑ) À¯ÀÏÇÑ °ø°£ÀÌ´Ù. ±âº» µð·ºÅ丮´Â
- <code>--datadir</code> °ª¿¡ "/htdocs"À» ºÙÀÎ °ÍÀÌ´Ù.
- <em>¿¹¸¦ µé¾î</em> "<code>--datadir=/home/apache</code>"·Î
- ±¸¼ºÇß´Ù¸é suEXEC wrapper´Â document root·Î
- "/home/apache/htdocs" µð·ºÅ丮¸¦ »ç¿ëÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
-
- <dd>suEXEC¿¡¼­ ÁöÁ¤°¡´ÉÇÑ »ç¿ëÀÚÀÇ ÃÖ¼Ò UID¸¦ Á¤ÀÇÇÑ´Ù.
- ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ 500À̳ª 100ÀÌ ÀûÀýÇÏ´Ù. ±âº»°ªÀº
- 100ÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
-
- <dd>suEXEC¿¡¼­ ÁöÁ¤°¡´ÉÇÑ ±×·ìÀÇ ÃÖ¼Ò GID¸¦ Á¤ÀÇÇÑ´Ù.
- ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ 100ÀÌ ÀûÀýÇϹǷΠÀÌ °ªÀÌ ±âº»°ªÀÌ´Ù.</dd>
-
- <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
-
- <dd>¸ðµç suEXEC ÀÛµ¿°ú ¿À·ù¸¦ (°¨½Ã³ª µð¹ö±ë ¸ñÀû¿¡ À¯¿ëÇÑ)
- ±â·ÏÇÒ ·Î±×ÆÄÀϸíÀ» ÁöÁ¤ÇÑ´Ù. ±âº»ÀûÀ¸·Î ·Î±×ÆÄÀÏÀÇ À̸§Àº
- "suexec_log"ÀÌ°í Ç¥ÁØ ·Î±×ÆÄÀÏ µð·ºÅ丮¿¡
- (<code>--logfiledir</code>) À§Ä¡ÇÑ´Ù.</dd>
-
- <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
-
- <dd>CGI ½ÇÇàÆÄÀÏ¿¡ ³Ñ°ÜÁú ¾ÈÀüÇÑ PATH ȯ°æº¯¼ö¸¦ Á¤ÀÇÇÑ´Ù.
- ±âº»°ªÀº "/usr/local/bin:/usr/bin:/bin"ÀÌ´Ù.</dd>
- </dl>
-
- <p><strong>suEXEC wrapper¸¦ ÄÄÆÄÀÏÇÏ°í ¼³Ä¡Çϱâ</strong><br />
- <code>--enable-suexec</code> ¿É¼ÇÀ¸·Î suEXEC ±â´ÉÀ» °¡´ÉÇÏ°ÔÇÑ
- °æ¿ì <code>make</code> ¸í·É¾î¸¦ ½ÇÇàÇϸé <code>suexec</code>
- ½ÇÇàÆÄÀÏÀÌ (¾ÆÆÄÄ¡¿Í ÇÔ²²) ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù.<br />
- ¸ðµç°ÍÀ» ÄÄÆÄÀÏÇÑ ÈÄ <code>make install</code> ¸í·É¾î¸¦
- ½ÇÇàÇÏ¿© ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ¹ÙÀ̳ʸ®ÆÄÀÏ <code>suexec</code>´Â
- <code>--sbindir</code> ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ ¼³Ä¡µÈ´Ù.
- ±âº» À§Ä¡´Â "/usr/local/apache2/sbin/suexec"ÀÌ´Ù.<br />
- ¼³Ä¡ °úÁ¤¿¡ <strong><em>root ±ÇÇÑ</em></strong>ÀÌ ÇÊ¿äÇÔÀ»
- ÁÖÀÇÇ϶ó. wrapper°¡ »ç¿ëÀÚ ID¸¦ ¼³Á¤ÇϱâÀ§Çؼ­´Â ¼ÒÀ¯ÀÚ°¡
- <code><em>root</em></code>ÀÌ°í ÆÄÀϸðµå·Î setuserid ½ÇÇàºñÆ®°¡
- ¼³Á¤µÇ¾ß ÇÑ´Ù.</p>
-
- <p><strong>ÆíÁýÁõÀûÀÎ ±ÇÇѼ³Á¤</strong><br />
- suEXEC wrapper´Â ÀÚ½ÅÀ» ½ÇÇàÇÑ »ç¿ëÀÚ°¡ ±¸¼º ¿É¼Ç
- <code>--with-suexec-caller</code>·Î ÁöÁ¤ÇÑ ¿Ã¹Ù¸¥ »ç¿ëÀÚÀÎÁö
- È®ÀÎÀ» ÇÏÁö¸¸, ÀÌ °Ë»ç ÀÌÀü¿¡ suEXEC°¡ »ç¿ëÇÏ´Â ½Ã½ºÅÛÈ£Ãâ
- ȤÀº ¶óÀ̺귯¸® ÇÔ¼ö°¡ Á¶À۵ǾúÀ» ¼ö ÀÖ´Ù. À̸¦ ´ëºñÇϸç
- ÀϹÝÀûÀ¸·Î ÁÁÀº ½À°üÀ̹ǷΠ¿ÀÁ÷ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â ±×·ì¸¸ÀÌ
- suEXEC¸¦ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÆÄÀϽýºÅÛ ±ÇÇÑÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¿¹¸¦ µé¾î, À¥¼­¹ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÏ°í:</p>
-
-<example>
- User www<br />
- Group webgroup<br />
-</example>
-
- <p><code>suexec</code>¸¦ "/usr/local/apache2/sbin/suexec"¿¡
- ¼³Ä¡ÇÏ¿´´Ù¸é, ´ÙÀ½À» ½ÇÇàÇØ¾ß ÇÑ´Ù:</p>
-
-<example>
- chgrp webgroup /usr/local/apache2/bin/suexec<br />
- chmod 4750 /usr/local/apache2/bin/suexec<br />
-</example>
-
- <p>±×·¯¸é ¿ÀÁ÷ ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â ±×·ì¸¸ÀÌ suEXEC wrapper¸¦
- ½ÇÇàÇÒ ¼ö ÀÖ´Ù.</p>
-</section>
-
-<section id="enable"><title>suEXEC Å°°í ²ô±â</title>
-
- <p>¾ÆÆÄÄ¡´Â ½ÃÀÛÇÒ¶§ <code>--sbindir</code> ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ
- µð·ºÅ丮¿¡¼­ <code>suexec</code> ÆÄÀÏÀ» (±âº»°ª
- "/usr/local/apache2/sbin/suexec") ã´Â´Ù. ¾ÆÆÄÄ¡°¡
- Á¤»óÀûÀ¸·Î ±¸¼ºµÈ suEXEC wrapper¸¦ ¹ß°ßÇÏ¸é ¿À·ù ·Î±×(error
- log)¿¡ ´ÙÀ½°ú °°ÀÌ Ãâ·ÂÇÑ´Ù:</p>
-
-<example>
- [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</example>
-
- <p>¼­¹ö ½ÃÀÛÁß¿¡ ÀÌ·± ¹®±¸¸¦ ¾ø´Ù¸é ¼­¹ö´Â ±â´ëÇÑ Àå¼Ò¿¡¼­
- wrapper ÇÁ·Î±×·¥À» ãÁö ¸øÇ߰ųª, ½ÇÇàÆÄÀÏÀÌ <em>setuid
- root</em>·Î ¼³Ä¡µÇÁö¾Ê¾Ò±â ¶§¹®ÀÏ °ÍÀÌ´Ù.</p>
-
- <p>óÀ½À¸·Î suEXEC ±â´ÉÀ» »ç¿ëÇÏ°í ½Í°í ÀÌ¹Ì ¾ÆÆÄÄ¡ ¼­¹ö°¡
- ½ÇÇàÁßÀ̶ó¸é, ¾ÆÆÄÄ¡¸¦ Á×ÀÌ°í ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÑ´Ù. °£´ÜÈ÷
- HUPÀ̳ª USR1 ½Ã±×³Î·Î Àç½ÃÀÛÇÏ´Â °ÍÀ¸·Î´Â ÃæºÐÇÏÁö ¾Ê´Ù. </p>
- <p>suEXEC¸¦ ¾È»ç¿ëÇÏ·Á¸é <code>suexec</code> ÆÄÀÏÀ» Áö¿îÈÄ
- ¾ÆÆÄÄ¡¸¦ Á×ÀÌ°í Àç½ÃÀÛÇØ¾ß ÇÑ´Ù. </p>
-</section>
-
-<section id="usage"><title>suEXEC »ç¿ëÇϱâ</title>
-
- <p>CGI ÇÁ·Î±×·¥ ¿äûÀÇ °æ¿ì <directive
- module="mod_suexec">SuexecUserGroup</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÑ °¡»óÈ£½ºÆ®¿¡ ¿äûÀ» ÇÏ¿´°Å³ª <module>mod_userdir</module>ÀÌ
- ¿äûÀ» ó¸®ÇÏ´Â °æ¿ì¿¡¸¸ suEXEC wrapper¸¦ È£ÃâÇÑ´Ù.</p>
-
- <p><strong>°¡»óÈ£½ºÆ®:</strong><br /> suEXEC wrapper¸¦
- »ç¿ëÇÏ´Â ÇÑ°¡Áö ¹æ¹ýÀº <directive
- module="core">VirtualHost</directive> Á¤ÀÇ¿¡ <directive
- module="mod_suexec">SuexecUserGroup</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ Áö½Ã¾î¸¦ ÁÖ¼­¹ö »ç¿ëÀÚ ID¿Í ´Ù¸£°Ô
- ¼³Á¤Çϸé CGI ÀÚ¿øÀÇ ¸ðµç ¿äûÀÌ <directive
- module="core" type="section">VirtualHost</directive>¿¡¼­
- ÁöÁ¤ÇÑ <em>User</em>¿Í <em>Group</em>À¸·Î ½ÇÇàµÈ´Ù. ÀÌ
- Áö½Ã¾îµéÀÌ <directive module="core"
- type="section">VirtualHost</directive>¿¡ ¾øÀ¸¸é ÁÖ¼­¹ö
- userid¸¦ »ç¿ëÇÑ´Ù.</p>
-
- <p><strong>»ç¿ëÀÚ µð·ºÅ丮:</strong><br />
- <module>mod_userdir</module>ÀÌ ¿äûÀ» ó¸®ÇÑ´Ù¸é suEXEC
- wrapper¸¦ È£ÃâÇÏ¿©, ¿äûÇÑ »ç¿ëÀÚ µð·ºÅ丮¿¡ ÇØ´çÇÏ´Â »ç¿ëÀÚ
- ID·Î CGI ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ÀÌ ±â´ÉÀÌ µ¿ÀÛÇÏ·Á¸é »ç¿ëÀÚ
- ID·Î CGI¸¦ ½ÇÇàÇÒ ¼ö ÀÖ°í ½ºÅ©¸³Æ®°¡ À§ÀÇ <a href="#model">º¸¾È
- °Ë»ç</a> Ç׸ñÀ» ¸¸Á·ÇØ¾ß ÇÑ´Ù. <a href="#install">±¸¼º
- ¿É¼Ç</a> <code>--with-suexec-userdir</code>À» Âü°íÇ϶ó.</p> </section>
-
-<section id="debug"><title>suEXEC µð¹ö±ëÇϱâ</title>
-
- <p>suEXEC wrapper´Â ·Î±× Á¤º¸¸¦ À§¿¡¼­ ´Ù·é
- <code>--with-suexec-logfile</code> ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÑ ÆÄÀÏ¿¡
- ¾´´Ù. wrapper¸¦ ¿Ã¹Ù·Î ±¸¼ºÇÏ°í ¼³Ä¡Çß´Ù¸é ¾îµð¼­ À߸øµÇ¾ú´ÂÁö
- ÀÌ ·Î±×ÆÄÀÏ¿Í ¼­¹öÀÇ error_log¸¦ »ìÆìºÁ¶ó.</p>
-
-</section>
-
-<section id="jabberwock"><title>´Ù½Ã Çѹø Á¶½ÉÇ϶ó: °æ°í¿Í ¿¹Á¦</title>
-
- <p><strong>ÁÖÀÇ!</strong> ÀÌ ¼½¼ÇÀº ¿ÏÀüÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù.
- ¾ÆÆÄÄ¡±×·ìÀÇ <a
- href="http://httpd.apache.org/docs-2.1/suexec.html">¿Â¶óÀÎ
- ¹®¼­</a>¿¡¼­ ÀÌ ¹®¼­ÀÇ ÃÖ½ÅÆÇÀ» Âü°íÇ϶ó.</p>
-
- <p>wrapper°¡ ¼­¹ö ¼³Á¤À» Á¦¾àÇÏ´Â ¸î°¡Áö Èï¹Ì·Î¿î Á¡ÀÌ ÀÖ´Ù.
- suEXEC¿Í °ü·ÃµÈ "¹ö±×"¸¦ º¸°íÇϱâ Àü¿¡ À̵éÀ» »ìÆ캸±æ ¹Ù¶õ´Ù.</p>
-
- <ul>
- <li><strong>suEXEC Á¦¾à »çÇ×</strong></li>
-
- <li>
- µð·ºÅ丮 ±¸Á¶ Á¦ÇÑ
-
- <p class="indent">
- º¸¾È°ú È¿À²¼ºÀ» À§ÇØ ¸ðµç suEXEC ¿äûÀº °¡»óÈ£½ºÆ®ÀÇ
- °æ¿ì ÃÖ»óÀ§ document root ȤÀº userdir ¿äûÀÇ °æ¿ì
- ÃÖ»óÀ§ °³ÀÎ document root ¾È¿¡¼­ ¹ß»ýÇØ¾ß ÇÑ´Ù. ¿¹¸¦
- µé¾î, °¡»óÈ£½ºÆ® ³×°³¸¦ ¼³Á¤Çß´Ù¸é °¡»óÈ£½ºÆ®¿¡¼­
- suEXEC¸¦ ÀÌ¿ëÇϱâÀ§ÇØ °¡»óÈ£½ºÆ®ÀÇ document root¸¦
- ÁÖ ¾ÆÆÄÄ¡ ¹®¼­ °èÃþ±¸Á¶ ¹Û¿¡ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
- (¿¹Á¦´Â ´ÙÀ½¿¡.)
- </p>
- </li>
-
- <li>
- suEXECÀÇ PATH ȯ°æº¯¼ö
-
- <p class="indent">
- º¯°æÇϸé À§ÇèÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ Æ÷ÇÔÇÏ´Â ¸ðµç °æ·Î°¡
- <strong>¹ÏÀ» ¼ö ÀÖ´Â</strong> µð·ºÅ丮ÀÎÁö È®ÀÎÇ϶ó.
- ÀÌ Áö±¸»óÀÇ ´©±º°¡°¡ ±×°÷¿¡ ÀÖ´Â Æ®·ÎÀ̸ñ¸¶¸¦ ½ÇÇàÇϱæ
- ¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
- </p>
- </li>
-
- <li>
- suEXEC ÄÚµå ¼öÁ¤Çϱâ
-
- <p class="indent">
- ¹Ýº¹Çؼ­ ¸»ÇÏÁö¸¸, ´ç½ÅÀÌ ¹«¾ùÀ» ÇÏ´ÂÁö ¸ð¸£°í ½ÃµµÇÑ´Ù¸é
- <strong>Å« ¹®Á¦</strong>°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¾î¶² °æ¿ì¿¡µµ
- ¼öÁ¤ÇÏÁö¸¶¶ó.
- </p>
- </li>
- </ul>
-
-</section>
-
-</manualpage>
diff --git a/docs/manual/suexec.xml.meta b/docs/manual/suexec.xml.meta
deleted file mode 100644
index f3815fb393..0000000000
--- a/docs/manual/suexec.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>suexec</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/upgrading.html b/docs/manual/upgrading.html
deleted file mode 100644
index e10b69c050..0000000000
--- a/docs/manual/upgrading.html
+++ /dev/null
@@ -1,23 +0,0 @@
-URI: upgrading.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: upgrading.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: upgrading.html.fr
-Content-Language: fr
-Content-type: text/html; charset=ISO-8859-1
-
-URI: upgrading.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: upgrading.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
-
-URI: upgrading.html.ru.koi8-r
-Content-Language: ru
-Content-type: text/html; charset=KOI8-R
diff --git a/docs/manual/upgrading.html.de b/docs/manual/upgrading.html.de
deleted file mode 100644
index 463578929b..0000000000
--- a/docs/manual/upgrading.html.de
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Upgrade von 1.3 auf 2.0 - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Upgrade von 1.3 auf 2.0</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/upgrading.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>Dieses Dokument dient der Unterstützung beim Upgrade. Es
- enthält die entscheidenden Informationen für bisherige
- Apache-Nutzer. Diese sind als kurze Anmerkungen
- gedacht. Weitere Informationen finden Sie entweder unter
- <a href="new_features_2_0.html">Neue Funktionen</a> oder in
- den <code>src/CHANGES</code>-Dateien.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">Änderungen der Konfiguration bei der Kompilierung</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#run-time">Änderungen der Laufzeit-Konfiguration</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Sonstige Änderungen</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#third-party">Module von Drittanbietern</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="new_features_2_0.html">Übersicht der neuen Funktionen
- in Apache 2.0</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile-time" id="compile-time">Änderungen der Konfiguration bei der Kompilierung</a></h2>
-
-
- <ul>
- <li>Der Apache benutzt jetzt ein <code>autoconf</code>- und
- <code>libtool</code>-System zur <a href="install.html">Konfiguration des
- Erstellungsverfahrens</a>. Die Verwendung dieses Systems ist
- ähnlich, aber nicht identisch mit dem APACI-System des
- Apache 1.3.</li>
-
- <li>Zusätzlich zu der üblichen Auswahl von Modulen, die
- kompiliert werden sollen, wurde der Hauptteil der
- Request-Verarbeitung im Apache 2.0 in die <a href="mpm.html">
- Multi-Processing-Module</a> (MPMs) verschoben.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run-time" id="run-time">Änderungen der Laufzeit-Konfiguration</a></h2>
-
-
- <ul>
- <li>Viele Anweisungen aus dem Serverkern des Apache 1.3 sind
- jetzt in den MPMs enthalten. Wenn Sie ein Serververhalten
- wünschen, das demjenigen des Apache 1.3 möglichst
- ähnlich ist, sollten Sie das <code class="module"><a href="./mod/prefork.html">prefork</a></code>-MPM
- auswählen. Andere MPMs verwenden abweichende Anweisungen
- für die Prozess-Erstellung und Request-Verarbeitung.</li>
-
- <li>Das <a href="mod/mod_proxy.html">Proxy-Modul</a> wurde
- umgearbeitet, um es auf den Stand von HTTP/1.1 zu bringen. Eine
- der bedeutendsten Änderungen ist die Platzierung der
- Proxy-Zugriffskontrolle innerhalb eines <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>-Blocks, statt innerhalb eines
- <code>&lt;Directory proxy:&gt;</code>-Blocks.</li>
-
- <li>Die Behandlung von <code>PATH_INFO</code> (hinter dem
- tatsächlichen Dateinamen angefügte Pfadangaben) wurde
- für einige Module geändert. Module, die bisher als Handler
- implementiert waren, jetzt aber als Filter implementiert sind,
- akzeptieren möglicherweise keine Requests mit
- <code>PATH_INFO</code> mehr. Filter wie <a href="mod/mod_include.html">INCLUDES</a> oder <a href="http://www.php.net/">PHP</a> sind gleich oben im
- Core-Handler implementiert und weisen deshalb Requests mit
- <code>PATH_INFO</code> ab. Sie können die <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>-Direktive
- verwenden, um den Core-Handler zu zwingen, Requests mit
- <code>PATH_INFO</code> zu akzeptieren, und dadurch die Fähigkeit
- wiederherstellen, <code>PATH_INFO</code> in Server Side Includes zu
- benutzen.</li>
-
- <li>Die <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>-Direktive
- hat jetzt das Argument an (<code>on</code>) oder aus
- (<code>off</code>). Die vorhandenen Anweisungen <code class="directive">CacheNegotiatedDocs</code> sollten durch
- <code>CacheNegotiatedDocs on</code> ersetzt werden.</li>
-
- <li>
- Die <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>-Direktive
- verwendet kein Anführungszeichen mehr am Anfang des
- Arguments, um eine
- Textnachricht anzuzeigen. Stattdessen sollten Sie die
- Nachricht in doppelte Anführungszeichen einschließen.
- Zum Beispiel sollten existierende Angaben wie
-
- <div class="example"><p><code>
- ErrorDocument 403 "Eine Nachricht
- </code></p></div>
- durch
-
- <div class="example"><p><code>
- ErrorDocument 403 "Eine Nachricht"
- </code></p></div>
-
- ersetzt werden.
- Solange das zweite Argument kein gültiger URL oder
- Pfadname ist, wird es als Textnachricht behandelt.
- </li>
-
- <li>Die Direktiven <code>AccessConfig</code> und
- <code>ResourceConfig</code> sind entfallen.
- Diese Direktiven können durch die <code class="directive"><a href="./mod/core.html#include">Include</a></code>-Direktive
- ersetzt werden, die eine äquivalente Funktionalität besitzt.
- Wenn Sie die Defaultwerte dieser Direktiven verwendet haben,
- ohne sie in die Konfigurationsdateien einzufügen, müssen Sie
- möglicherweise <code>Include conf/access.conf</code> und
- <code>Include conf/srm.conf</code> zu Ihrer <code>httpd.conf</code>
- hinzufügen. Um sicherzustellen, daß der Apache die
- Konfigurationsdateien in der gleichen Reihenfolge liest, wie sie von
- den älteren Direktiven impliziert wurde, sollten die <code class="directive"><a href="./mod/core.html#include">Include</a></code>-Direktiven ans Ende der
- <code>httpd.conf</code> gestellt werden, wobei die Direktive für
- <code>srm.conf</code> derjenigen für <code>access.conf</code>
- vorangeht.</li>
-
- <li>Die Direktiven <code>BindAddress</code> und <code>Port</code>
- sind entfallen. Eine äquivalente Funktionalität wird von der
- flexibleren Direktive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> bereitgestellt.</li>
-
- <li>Im Apache 1.3 wurde die <code>Port</code>-Direktive außerdem
- dazu verwendet, die Portnummer für
- selbstreferenzierende URLs festzulegen.
- Die neue <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>-Syntax
- stellt das Apache-2.0-Äquivalent dar:
- sie wurde dahingehend verändert, sowohl den Hostnamen
- <em>als auch</em> die Portnummer für selbstreferenzierende URLs
- in einer Direktive angeben zu können.</li>
-
- <li>Die <code>ServerType</code>-Direktive entfällt.
- Die Methode zum Bedienen der Requests wird nun durch die Auswahl
- des MPM ermittelt. Derzeit ist kein MPM dafür bestimmt, von inetd
- gestartet zu werden.</li>
-
- <li>Die Module <code>mod_log_agent</code> und <code>
- mod_log_referer</code>, welche die Direktiven <code>AgentLog</code>,
- <code>RefererLog</code> und <code>RefererIgnore</code> bereitgestellt
- hatten, wurden entfernt. Durch Verwendung der Direktive <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> aus mod_log_config
- sind die Agent- und Refererlogs auch weiterhin verfügbar.</li>
-
- <li>Die Direktiven <code>AddModule</code> und
- <code>ClearModuleList</code> sind entfallen.
- Diese Direktiven wurden benutzt, um sicherzustellen, daß die
- Module in der richtigen Reihenfolge aktiviert werden können.
- Die neue Apache 2.0 API erlaubt es Modulen, ihre Reihenfolge
- explizit anzugeben, und macht diese Direktiven damit
- überflüssig.</li>
-
- <li>Die Direktive <code>FancyIndexing</code> wurde entfernt.
- Die gleiche Funktionalität ist nun mit der Option
- <code>FancyIndexing</code> der Direktive <code class="directive"><a href="./mod/mod_autoindex.html#indexoptions">IndexOptions</a></code> verfügbar.</li>
-
- <li>Die von <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> bereitgestellte
- Content-Negotiation-Technik MultiViews führt nun eine strengere
- Dateierkennung durch. Es wird ausschließlich unter den
- <em>aushandelbaren</em> Dateien gewählt. Das bisherige Verhalten
- kann jedoch mit der Direktive <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiviewsMatch</a></code> wiederhergestellt
- werden.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="misc" id="misc">Sonstige Änderungen</a></h2>
-
-
- <ul>
- <li>Das Modul <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code>, das im Apache 1.3
- experimentellen Status hatte, ist nun ein Standardmodul.</li>
-
- <li>Das Modul <code>mod_mmap_static</code>, das im Apache 1.3
- experimentellen Status hatte, wurde durch das Modul <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> ersetzt.</li>
-
- <li>Die Distribution wurde komplett reorganisiert und enthält kein
- unabhängiges <code>src</code>-Verzeichnis mehr. Stattdessen wurden
- die Quellcodes logisch unterhalb des Hauptverzeichnisses der
- Distribution angeordnet. Installationen des kompilierten Servers
- sollten in ein separates Verzeichnis erfolgen.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">Module von Drittanbietern</a></h2>
-
-
- <p>An der API des Apache 2.0 wurden umfassende Änderungen
- vorgenommen. Bestehende Module, die für die Apache 1.3 API
- entwickelt wurden, werden <strong>nicht</strong> ohne Modifikationen mit
- der Version 2.0 des Apache zusammenarbeiten. Details sind in der <a href="developer/">Dokumentation für Entwickler</a> beschrieben.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="./de/upgrading.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Module</a> | <a href="./mod/directives.html">Direktiven</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossar</a> | <a href="./sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/upgrading.html.en b/docs/manual/upgrading.html.en
deleted file mode 100644
index bbafd710de..0000000000
--- a/docs/manual/upgrading.html.en
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Upgrading to 2.0 from 1.3 - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Upgrading to 2.0 from 1.3</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>In order to assist folks upgrading, we maintain a document
- describing information critical to existing Apache users. These
- are intended to be brief notes, and you should be able to find
- more information in either the <a href="new_features_2_0.html">New Features</a> document, or in
- the <code>src/CHANGES</code> file.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">Compile-Time Configuration Changes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#run-time">Run-Time Configuration Changes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Misc Changes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#third-party">Third Party Modules</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="new_features_2_0.html">Overview of new features in
- Apache 2.0</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile-time" id="compile-time">Compile-Time Configuration Changes</a></h2>
-
-
- <ul>
- <li>Apache now uses an <code>autoconf</code> and
- <code>libtool</code> system for <a href="install.html">configuring the build processes</a>.
- Using this system is similar to, but not the same as, using
- the APACI system in Apache 1.3.</li>
-
- <li>In addition to the usual selection of modules which you
- can choose to compile, Apache 2.0 has moved the main part of
- request processing into <a href="mpm.html">Multi-Processing
- Modules</a> (MPMs).</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run-time" id="run-time">Run-Time Configuration Changes</a></h2>
-
-
- <ul>
- <li>Many directives that were in the core server in Apache
- 1.3 are now in the MPMs. If you wish the behavior of the
- server to be as similar as possible to the behavior of Apache
- 1.3, you should select the <code class="module"><a href="./mod/prefork.html">prefork</a></code> MPM. Other MPMs
- will have different directives to control process creation and request
- processing.</li>
-
- <li>The <a href="mod/mod_proxy.html">proxy module</a> has been
- revamped to bring it up to HTTP/1.1. Among the important changes,
- proxy access control is now placed inside a <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> block rather than a
- <code>&lt;Directory proxy:&gt;</code> block.</li>
-
- <li>The handling of <code>PATH_INFO</code> (trailing path information
- after the true filename) has changed for some modules. Modules
- that were previously implemented as a handler but are now
- implemented as a filter may no longer accept requests with
- <code>PATH_INFO</code>. Filters such as <a href="mod/mod_include.html">INCLUDES</a> or <a href="http://www.php.net/">PHP</a> are implemented on top
- of the core handler, and therefore reject requests with
- <code>PATH_INFO</code>. You can use the <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> directive to
- force the core handler to accept requests with <code>PATH_INFO</code>
- and thereby restore the ability to use <code>PATH_INFO</code> in
- server-side includes.</li>
-
- <li>The <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
- directive now takes the argument <code>on</code> or
- <code>off</code>. Existing instances of <code class="directive">CacheNegotiatedDocs</code> should be
- replaced with <code>CacheNegotiatedDocs on</code>.</li>
-
- <li>
- The <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
- directive no longer uses a quote at the beginning of the
- argument to indicate a text message. Instead, you should
- enclose the message in double quotes. For example, existing
- instances of
-
- <div class="example"><p><code>
- ErrorDocument 403 "Some Message
- </code></p></div>
- should be replaced with
-
- <div class="example"><p><code>
- ErrorDocument 403 "Some Message"
- </code></p></div>
-
- As long as the second argument is not a valid URL or
- pathname, it will be treated as a text message.
- </li>
-
- <li>The <code>AccessConfig</code> and
- <code>ResourceConfig</code> directives no longer exist.
- Existing instances of these directives can be replaced with
- the <code class="directive"><a href="./mod/core.html#include">Include</a></code>
- directive which has equivalent functionality. If you were
- making use of the default values of these directives without
- including them in the configuration files, you may need to
- add <code>Include conf/access.conf</code> and <code>Include
- conf/srm.conf</code> to your <code>httpd.conf</code>. In order to
- assure that Apache reads the configuration files in the same order
- as was implied by the older directives, the <code class="directive"><a href="./mod/core.html#include">Include</a></code> directives should be placed at the end
- of <code>httpd.conf</code>, with the one for <code>srm.conf</code>
- preceding the one for <code>access.conf</code>.</li>
-
- <li>The <code>BindAddress</code> and <code>Port</code>
- directives no longer exist. Equivalent functionality is
- provided with the more flexible
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- directive.</li>
-
- <li>Another use of the <code>Port</code>
- directive in Apache-1.3 was setting the port number to be used
- in self-referential URL's. The Apache-2.0 equivalent is
- the new <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- syntax: it has been changed to allow specifying both the
- hostname <em>and</em> the port number for self-referential URL's
- in one directive.</li>
-
- <li>The <code>ServerType</code> directive no longer exists.
- The method used to serve requests is now determined by the
- selection of MPM. There is currently no MPM designed to be
- launched by inetd.</li>
-
- <li>The <code>mod_log_agent</code> and <code>mod_log_referer</code>
- modules which provided the <code>AgentLog</code>,
- <code>RefererLog</code> and <code>RefererIgnore</code> directives have
- been removed. Agent and referer logs are still available using the
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- directive of <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.</li>
-
- <li>The <code>AddModule</code> and
- <code>ClearModuleList</code> directives no longer exist.
- These directives were used to ensure that modules could be
- enabled in the correct order. The new Apache 2.0 API allows
- modules to explicitly specify their ordering, eliminating the
- need for these directives.</li>
-
- <li>The <code>FancyIndexing</code> directive has been removed.
- The same functionality is available through the
- <code>FancyIndexing</code> option to the <code class="directive"><a href="./mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>
- directive.</li>
-
- <li>The MultiViews content-negotiation technique provided by
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> has become more strict in its
- default file matching. It will select only from <em>negotiable</em>
- files. The old behavior can be restored using the <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiviewsMatch</a></code> directive.</li>
-
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="misc" id="misc">Misc Changes</a></h2>
-
-
- <ul>
- <li>The module <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code>, which was
- experimental in Apache 1.3, is now a standard module.</li>
-
- <li>The <code>mod_mmap_static</code> module, which was experimental in
- Apache 1.3, has been replaced with <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>.</li>
-
- <li>The distribution has been completely reorganized so that
- it no longer contains an independent <code>src</code>
- directory. Instead, the sources are logically organized under
- the main distribution directory, and installations of the
- compiled server should be directed to a separate
- directory.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">Third Party Modules</a></h2>
-
-
- <p>Extensive changes were made to the server API in Apache 2.0.
- Existing modules designed for the Apache 1.3 API will
- <strong>not</strong> work in Apache 2.0 without modification.
- Details are provided in the <a href="developer/">developer
- documentation</a>.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/upgrading.html.fr b/docs/manual/upgrading.html.fr
deleted file mode 100644
index 28d055f8eb..0000000000
--- a/docs/manual/upgrading.html.fr
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy, see www.w3.org" />
- <meta http-equiv="Content-Type"
- content="text/html; charset=iso-8859-1" />
-
- <title>Mise &agrave; jour de la version 1.3 &agrave; la version
- 2.0</title>
- </head>
- <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
- <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
- vlink="#000080" alink="#FF0000">
- <div align="center">
- <img src="images/sub.gif" alt="[APACHE DOCUMENTATION]" />
-
- <h3>Apache HTTP Server Version 2.1</h3>
- </div>
-
-
-
-
- <h1 align="center">Mise &agrave; de la version 1.3 &agrave; la
- version 2.0</h1>
-
- <p>Afin d'aider les personnes souhaitant se mettre &agrave;
- jour, nous maintenons un document d&eacute;crivant les
- informations critiques concernant les utilisateurs d'Apache.
- Ces informations sont sous la forme de br&egrave;ves notes, et
- vous pouvez trouver plus d'informations dans le document <a
- href="new_features_2_0.html">Nouvelles
- fonctionnalit&eacute;s</a> ou dans le fichier
- <code>src/CHANGES</code>.</p>
-
- <h3>Changement de la configuration &agrave; la compilation</h3>
-
- <ul>
- <li>Apache utilise maintenant <code>autoconf</code> et
- <code>libtool</code> afin de configurer la compilation.
- L'utilisation de ces outils est similaire, mais pas tout
- &agrave; fait identique, au syst&egrave;me APACI de
- configuration existant dans la version 1.3 d'Apache.</li>
-
- <li>En plus de l'habituelle s&eacute;lection de modules que
- vous pouvez choisir de compiler, Apache 2.0 a
- d&eacute;plac&eacute; la majeure partie du traitement des
- requ&ecirc;tes dans les <a href="mpm.html">modules
- multi-traitements</a> (MPMs).</li>
- </ul>
-
- <h3>Changement de la configuration &agrave;
- l'ex&eacute;cution</h3>
-
- <ul>
- <li>La directive <code>CacheNegotiatedDocs</code> prend
- maintenant un param&egrave;tre qui est soit <code>on</code>
- soit <code>off</code>. Les configurations existantes
- utilisant la directive <code>CacheNegotiatedDocs</code>
- doivent la remplacer par <code>CacheNegotiatedDocs
- on</code>.</li>
-
- <li>
- La directive <code>ErrorDocument</code> n'utilise plus de
- guillemets ou d'apostrophes au d&eacute;but du
- param&egrave;tre indiquant le message. Dor&eacute;navant,
- le message devra &ecirc;tre entre guillemets. Par exemple,
- la directive
-
- <blockquote>
- <code>ErrorDocument 403 "Some Message</code>
- </blockquote>
- devra &ecirc;tre remplac&eacute; par
-
- <blockquote>
- <code>ErrorDocument 403 "Some Message"</code>
- </blockquote>
- Si le second argument n'est pas une URL ou un chemin
- valide, il sera trait&eacute; comme un message.
- </li>
-
- <li>Les directives <code>AccessConfig</code> et
- <code>ResourceConfig</code> n'existent plus. Ces directives
- peuvent &ecirc;tre remplac&eacute;es de mani&egrave;re
- &eacute;quivalente par la directive <a
- href="mod/core.html#include"><code>Include</code></a>. Si
- vous utilisiez ces directives en utilisant les valeurs par
- d&eacute;faut sans les d&eacute;finir explicitement, vous
- devez ajouter les lignes <code>Include
- conf/access.conf</code> et <code>Include conf/srm.conf</code>
- dans votre fichier httpd.conf. Afin de garantir qu'Apache lit
- les diff&eacute;rents fichiers de configuration dans le
- m&ecirc;me ordre que celui pour les anciennes directives, Les
- directives <code>Include</code> doivent &ecirc;tre
- situ&eacute;es &agrave; la fin du fichier httpd.conf, celle
- repr&eacute;sentant <code>srm.conf</code> avant celle pour
- <code>access.conf</code>.</li>
-
- <li>La directive <code>BindAddress</code> n'existe plus. La
- m&ecirc;me fonctionnalit&eacute; est fournie par la directive
- <code><a href="mod/mpm_common.html">Listen</a></code>.</li>
-
- <li>La directive <code>ExtendedStatus</code> n'existe plus.
- Le suivi des statuts a &eacute;t&eacute; enti&egrave;rement
- r&eacute;&eacute;crit afin de b&eacute;n&eacute;ficier du
- nouveau syst&egrave;me MPM.</li>
-
- <li>La directive <code>ServerType</code> n'existe plus. La
- m&eacute;thode utilis&eacute;e pour servir les requ&ecirc;tes
- est d&eacute;termin&eacute;e maintenant par la
- s&eacute;lection d'un MPM. Il n'existe pas actuellement de
- MPM con&ccedil;u pour &ecirc;tre lanc&eacute; par inetd.</li>
-
- <li>Beaucoup de directives qui &eacute;taient situ&eacute;es
- dans le noyau du serveur pour la version 1.3 se trouvent
- maintenant dans les MPMs.</li>
-
- <li>Les modules mod_log_agent et mod_log_referer qui
- traitaient les directives <code>AgentLog</code>,
- <code>RefererLog</code> et <code>RefererIgnore</code> ont
- &eacute;t&eacute; supprim&eacute;s. Le tra&ccedil;age des
- agents et r&eacute;f&eacute;rants et toujours disponible en
- utilisant la directive <a
- href="mod/mod_log_config.html#customlog">CustomLog</a> du
- module mod_log_config.</li>
- </ul>
-
- <h3>Changements divers</h3>
-
- <ul>
- <li>L'option <code>-S</code> du programme <code>httpd</code>
- qui servait &agrave; afficher la configuration des
- h&ocirc;tes virtuels est remplac&eacute; par <code>-t -D
- DUMP_VHOSTS</code>.</li>
-
- <li>Le module mod_auth_digest, qui &eacute;tait
- exp&eacute;rimental dans la version 1.3, est maintenant un
- module standard.</li>
-
- <li>Le module mod_mmap_static, qui &eacute;tait
- exp&eacute;rimental dans la version 1.3 a &eacute;t&eacute;
- remplac&eacute; par le module mod_file_cache.</li>
- </ul>
-
- <h3>Modules tiers</h3>
-
- <p>D'&eacute;normes changements ont &eacute;t&eacute;
- r&eacute;alis&eacute;s sur l'API du serveur Apache 2.0. Les
- modules con&ccedil;us &agrave; l'aide de l'API Apache 1.3
- <strong>ne fonctionneront pas</strong> sur Apache 2.0 sans
- modifications. Plus de d&eacute;tails sont fournis dans la <a
- href="developer/">documentation du d&eacute;veloppeur</a>.</p>
- <hr />
-
- <h3 align="center">Apache HTTP Server Version 2.1</h3>
- <a href="./"><img src="images/index.gif" alt="Index" /></a>
-
-
-
- </body>
-</html>
-
diff --git a/docs/manual/upgrading.html.ja.euc-jp b/docs/manual/upgrading.html.ja.euc-jp
deleted file mode 100644
index 95bc01846e..0000000000
--- a/docs/manual/upgrading.html.ja.euc-jp
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>1.3 ¤«¤é 2.0 ¤Ø¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>1.3 ¤«¤é 2.0 ¤Ø¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>¥¢¥Ã¥×¥°¥ì¡¼¥É¤ò´Êñ¤Ë¤¹¤ë¤¿¤á¤Ë¡¢´û¸¤Î Apache ¥æ¡¼¥¶¤Ë
- Èó¾ï¤Ë½ÅÍפʾðÊó¤ò¤³¤Îʸ½ñ¤Ë¤Þ¤È¤á¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ïû¤¤
- Ãí°Õ½ñ¤­¤È¤·¤Æ½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ï
- <a href="new_features_2_0.html">¿·µ¡Ç½</a>¤Îʸ½ñ¤ä
- <code>src/CHANGES</code> ¥Õ¥¡¥¤¥ë¤Ç¸«¤Ä¤±¤é¤ì¤ë¤È»×¤¤¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">¥³¥ó¥Ñ¥¤¥ë»þ¤ÎÀßÄê¤ÎÊѹ¹</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#run-time">¼Â¹Ô»þ¤ÎÀßÄê¤ÎÊѹ¹</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">¤½¤Î¾¤ÎÊѹ¹</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#third-party">¥µ¡¼¥É¥Ñ¡¼¥Æ¥£¥â¥¸¥å¡¼¥ë</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="new_features_2_0.html">Apache 2.0 ¿·µ¡Ç½¤Î³µÍ×</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile-time" id="compile-time">¥³¥ó¥Ñ¥¤¥ë»þ¤ÎÀßÄê¤ÎÊѹ¹</a></h2>
-
-
- <ul>
- <li>Apache ¤Ï <a href="install.html">¥Ó¥ë¥É½èÍý¤ÎÀßÄê</a>
- ¤Ë <code>autoconf</code> ¤È <code>libtool</code> ¤ò»È¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¤³¤Î¥·¥¹¥Æ¥à¤Ï Apache 1.3 ¤Î APACI ¥·¥¹¥Æ¥à¤È»÷¤Æ¤¤¤Þ¤¹¤¬¡¢
- ¤Þ¤Ã¤¿¤¯Æ±¤¸¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£</li>
-
- <li>Ä̾ï¤Î¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤«¤É¤¦¤«¤òÁªÂò¤Ç¤­¤ë¥â¥¸¥å¡¼¥ë·²¤Ë²Ã¤¨¤Æ¡¢
- Apache 2.0 ¤Ï
- ¥ê¥¯¥¨¥¹¥È½èÍý¤Î¼ç¤ÊÉôʬ¤ò <a href="mpm.html">¥Þ¥ë¥Á¥×¥í¥»¥Ã¥·¥ó¥°
- ¥â¥¸¥å¡¼¥ë</a> (MPM) ¤Ë°ÜÆ°¤·¤Þ¤·¤¿¡£</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run-time" id="run-time">¼Â¹Ô»þ¤ÎÀßÄê¤ÎÊѹ¹</a></h2>
-
-
- <ul>
- <li>Apache 1.3 ¤Î»þ¤Ë¥³¥¢¥µ¡¼¥Ð¤Ë¤¢¤Ã¤¿Â¿¤¯¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- MPM ¤Ë°ÜÆ°¤·¤Þ¤·¤¿¡£¥µ¡¼¥Ð¤Ë Apache 1.3 ¤È¤Ç¤­¤ë¤À¤±Æ±¤¸¿¶¤ëÉñ¤¤¤ò
- ¤µ¤»¤¿¤¤¾ì¹ç¤Ï¡¢<code class="module"><a href="./mod/prefork.html">prefork</a></code> MPM ¤ò
- Áª¤ó¤Ç¤¯¤À¤µ¤¤¡£Â¾¤Î MPM ¤Ï¥×¥í¥»¥¹¤ÎºîÀ®¤ä¥ê¥¯¥¨¥¹¥È¤Î½èÍý¤Î
- À©¸æ¤Ë°Û¤Ê¤Ã¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹¡£</li>
-
- <li><a href="mod/mod_proxy.html">Proxy ¥â¥¸¥å¡¼¥ë</a> ¤Ï
- HTTP/1.1 ¤ËÂбþ¤¹¤ë¤¿¤á¤ËºÆ¹½À®¤µ¤ì¤Þ¤·¤¿¡£½ÅÍפÊÊѹ¹ÅÀ¤È¤·¤Æ¤Ï¡¢
- ¥×¥í¥­¥·¤Î¥¢¥¯¥»¥¹À©¸æ¤¬ <code>&lt;Directory proxy:&gt;</code> ¥Ö¥í¥Ã¥¯¤Î
- Âå¤ï¤ê¤Ë <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- ¥Ö¥í¥Ã¥¯¤ËÃÖ¤«¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡¢¤È¤¤¤¦¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£</li>
-
- <li>¥â¥¸¥å¡¼¥ë¤ÎÃæ¤Ë¤Ï¡¢<code>PATH_INFO</code> (ËÜÅö¤Î¥Õ¥¡¥¤¥ë̾¤Î¸å¤Ë³¤¯
- ¥Ñ¥¹¾ðÊó) ¤Î°·¤¤¤¬ÊѤï¤Ã¤¿¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£°ÊÁ°¤Ï¥Ï¥ó¥É¥é¤È¤·¤Æ
- ¼ÂÁõ¤µ¤ì¤Æ¤¤¤¿¤â¤Î¤¬¥Õ¥£¥ë¥¿¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤â¤Î¤Ï
- <code>PATH_INFO</code> ¤Î¤¢¤ë¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó¡£<a href="mod/mod_include.html">INCLUDES</a> ¤ä
- <a href="http://www.php.net/">PHP</a> ¤Ê¤É¤Î¥Õ¥£¥ë¥¿¤Ï
- ¥³¥¢¥Ï¥ó¥É¥é¤Î¾å¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢<code>PATH_INFO</code>
- ÉÕ¤­¤Î¥ê¥¯¥¨¥¹¥È¤òµñÈݤ·¤Þ¤¹¡£
- <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¥³¥¢¥Ï¥ó¥É¥é¤¬ <code>PATH_INFO</code>
- ÉÕ¤­¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤ë¤è¤¦¤Ë¤Ç¤­¡¢¤½¤ì¤Ë¤è¤Ã¤Æ SSI Åù¤Ç
- <code>PATH_INFO</code> ¤ò»È¤¦µ¡Ç½¤òÉü³è¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</li>
-
- <li><code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï <code>on</code> ¤â¤·¤¯¤Ï <code>off</code> ¤È¤¤¤¦°ú¿ô¤ò
- ¼è¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£´û¤Ë¸ºß¤·¤Æ¤¤¤ë
- <code class="directive">CacheNegotiatedDocs</code> ¤Ï
- <code>CacheNegotiatedDocs on</code>
- ¤ËÃÖ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£</li>
-
- <li>
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Æ¥­¥¹¥È¥á¥Ã¥»¡¼¥¸¤ò
- ¼¨¤¹¤¿¤á¤Ë°ú¿ô¤ÎºÇ½é¤Ë»È¤ï¤ì¤Æ¤¤¤¿°úÍÑÉä¤ò»È¤ï¤Ê¤¤¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- Âå¤ï¤ê¤Ë¡¢¥á¥Ã¥»¡¼¥¸¤òÆó½Å°úÍÑÉä¤Ç°Ï¤à¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
- Î㤨¤Ð¡¢´û¸¤Î
-
- <div class="example"><p><code>
- ErrorDocument 403 "Some Message
- </code></p></div>
- ¤Ï
-
- <div class="example"><p><code>
- ErrorDocument 403 "Some Message"
- </code></p></div>
-
- ¤ËÃÖ¤­´¹¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ÆóÈÖÌܤΰú¿ô¤Ï¡¢Í­¸ú¤Ê URL ¤ä¥Ñ¥¹Ì¾¤Ç¤Ê¤¤¸Â¤ê
- ¥Æ¥­¥¹¥È¥á¥Ã¥»¡¼¥¸¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£
- </li>
-
- <li><code>AccessConfig</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È
- <code>ResourceConfig</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿¡£
- ¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏƱÅù¤Îµ¡Ç½¤ò»ý¤Ä
- <code class="directive"><a href="./mod/core.html#include">Include</a></code> ¤Ç
- ÃÖ¤­´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ÀßÄê¥Õ¥¡¥¤¥ë¤Ë¼è¤ê¹þ¤àÂå¤ï¤ê¤Ë¡¢
- ¾å¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤò»È¤Ã¤Æ¤¤¤¿¾ì¹ç¤Ï¡¢
- <code>httpd.conf</code> ¤Ë <code>Include conf/access.conf</code> ¤È
- <code>Include conf/srm.conf</code> ¤òÄɲ乤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
- °ÊÁ°¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ë½çÈ֤Τ褦¤Ë Apache ¤¬ÀßÄê¥Õ¥¡¥¤¥ë¤ò
- Æɤ߹þ¤à¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢<code>httpd.conf</code> ¤ÎºÇ¸å¤Ë
- <code>srm.conf</code>¡¢<code>access.conf</code> ¤Î½ç¤Ë¤½¤ì¤¾¤ì
- <code class="directive"><a href="./mod/core.html#include">Include</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£</li>
-
- <li><code>BindAddress</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code>Port</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿¡£Æ±Åù¤Îµ¡Ç½¤Ï¤è¤ê½ÀÆð¤Ê
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤êÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£</li>
-
- <li><code>Port</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache-1.3 ¤Ë¤Ï¼«¸Ê»²¾È URL ¤Ç
- »È¤ï¤ì¤ë¥Ý¡¼¥ÈÈÖ¹æ¤òÀßÄꤹ¤ë¡¢¤È¤¤¤¦»ÈÍÑË¡¤â¤¢¤ê¤Þ¤·¤¿¡£
- ¤³¤ì¤Ï Apache-2.0 ¤Ç¤Ï¿·¤·¤¤
- <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
- ¹½Ê¸¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¤¤Þ¤¹¡£°ì¤Ä¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¥Û¥¹¥È̾<em>¤È</em>
- ¼«¸Ê»²¾È URL ¤ÎξÊý¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¹½Ê¸¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿¡£</li>
-
- <li><code>ServerName</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿¡£
- ¥ê¥¯¥¨¥¹¥È¤ò°·¤¦ÊýË¡¤Ï MPM ¤ÎÁªÂò¤Ë¤è¤ê·èÄꤵ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
- ¸½»þÅÀ¤Ç¤Ï inetd ¤«¤éµ¯Æ°¤µ¤ì¤ë¤è¤¦¤ËÀ߷פµ¤ì¤¿ MPM ¤Ï¤¢¤ê¤Þ¤»¤ó¡£</li>
-
- <li><code>AgentLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢
- <code>RefererLog</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡¢
- <code>RefererIgnore</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÄ󶡤·¤Æ¤¤¤¿
- <code>mod_log_agent</code> ¤È <code>mod_log_referer</code>
- ¥â¥¸¥å¡¼¥ë¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿¡£
- Agent ¥í¥°¤È refere ¥í¥°¤Ï <code class="directive">mod_log_config</code> ¤Î
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¼Â¸½²Äǽ¤Ç¤¹¡£</li>
-
- <li><code>AddModule</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È <code>ClearModuleList</code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿¡£¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¡¢
- ¥â¥¸¥å¡¼¥ë¤¬Àµ¤·¤¤½çÈ֤ǸƤФì¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤·¤¿¡£
- Apache 2.0 ¤Î¿· API ¤Ï¥â¥¸¥å¡¼¥ë¤¬ÌÀ¼¨Åª¤Ë½çÈÖ¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë
- ¤Ê¤Ã¤Æ¤ª¤ê¡¢¤³¤ì¤é¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÏɬÍפʤ¯¤Ê¤ê¤Þ¤·¤¿¡£</li>
-
- <li><code>FancyIndexing</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ïºï½ü¤µ¤ì¤Þ¤·¤¿¡£
- Ʊ¤¸µ¡Ç½¤Ï <code class="directive"><a href="./mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î <code>FancyIndexing</code> ¥ª¥×¥·¥ç¥ó¤Ç
- ¼Â¸½¤Ç¤­¤Þ¤¹¡£</li>
-
- <li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> ¤Ë¤è¤ë MultiViews
- ¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥óµ»½Ñ¤Ï¡¢
- ¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥¡¥¤¥ë¥Þ¥Ã¥Á¥ó¥°¤¬¤è¤ê¸·Ì©¤Ê¤â¤Î¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿¡£
- <em>¥Í¥´¥·¥¨¡¼¥È²Äǽ¤Ê</em>¥Õ¥¡¥¤¥ë¤Î¾ì¹ç¤Ë¤Î¤ßÁªÂò¤µ¤ì¤Þ¤¹¡£
- °ÊÁ°¤ÎµóÆ°¤Ï¡¢<code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiviewsMatch</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»ÈÍѤ¹¤ë¤³¤È¤ÇÉü³è¤Ç¤­¤Þ¤¹¡£</li>
-
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="misc" id="misc">¤½¤Î¾¤ÎÊѹ¹</a></h2>
-
-
- <ul>
- <li>Apache 1.3 ¤Ç¼Â¸³Åª¤Ê¥â¥¸¥å¡¼¥ë¤À¤Ã¤¿
- <code class="directive">mod_auth_digest</code> ¤Ï
- ɸ½à¥â¥¸¥å¡¼¥ë¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</li>
-
- <li>Apache 1.3 ¤Ç¼Â¸³Åª¤Ê¥â¥¸¥å¡¼¥ë¤À¤Ã¤¿ <code>mod_mmap_static</code> ¤Ï
- <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> ¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤·¤¿¡£</li>
-
- <li>Apache ¤ÎÇÛÉÛ¤ÏÆÈΩ¤·¤¿ <code>src</code> ¥Ç¥£¥ì¥¯¥È¥ê¤¬
- ¤Ê¤¯¤Ê¤ë¤è¤¦¤Ë¡¢´°Á´¤ËºÆ¹½À®¤µ¤ì¤Þ¤·¤¿¡£¤½¤ÎÂå¤ï¤ê¤Ë¡¢
- ¥½¡¼¥¹¤Ï¼ç¥Ç¥£¥ì¥¯¥È¥ê¤ËÏÀÍýŪ¤ËÇÛÃÖ¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¡¢
- ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¥µ¡¼¥Ð¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ÏÊ̥ǥ£¥ì¥¯¥È¥ê¤Ø
- ¹Ô¤Ê¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">¥µ¡¼¥É¥Ñ¡¼¥Æ¥£¥â¥¸¥å¡¼¥ë</a></h2>
-
-
- <p>Apache 2.0 ¤Î¥µ¡¼¥Ð API ¤Ë¤Ï¿¤¯¤ÎÊѹ¹¤¬²Ã¤¨¤é¤ì¤Þ¤·¤¿¡£
- Apache 1.3 ÍѤδû¸¤Î¥â¥¸¥å¡¼¥ë¤Ï Apache 2.0 ¤Ç¤Ï½¤Àµ¤Ê¤·¤Ç¤Ï
- Æ°¤­<strong>¤Þ¤»¤ó</strong>¡£¾ÜºÙ¤Ï <a href="developer/">³«È¯¼Ô¸þ¤±Ê¸½ñ</a> ¤Ë¤¢¤ê¤Þ¤¹¡£</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/upgrading.html.ko.euc-kr b/docs/manual/upgrading.html.ko.euc-kr
deleted file mode 100644
index c749649d0d..0000000000
--- a/docs/manual/upgrading.html.ko.euc-kr
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-
- <p>¿ì¸®´Â ±âÁ¸ ¾ÆÆÄÄ¡ »ç¿ëÀÚ°¡ ¾÷±×·¹À̵åÇÏ´Â °ÍÀ» µ½±âÀ§ÇØ
- Áß¿äÇÑ Á¤º¸¸¦ ¾Ë·ÁÁÖ´Â ¹®¼­¸¦ Á¦°øÇÑ´Ù. ÀÌ ¹®¼­´Â °£´ÜÇÑ
- ¿ä¾àÀ̹ǷÎ, <a href="new_features_2_0.html">»õ·Î¿î ±â´É</a>
- ¹®¼­³ª <code>src/CHANGES</code> ÆÄÀÏ¿¡¼­ Á¤º¸¸¦ ã¾ÆºÁ¾ß
- ÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">ÄÄÆÄÀϽà ±¸¼º º¯È­</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#run-time">½ÇÇà½Ã ¼³Á¤ º¯È­</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">±âŸ º¯È­</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#third-party">Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="new_features_2_0.html">¾ÆÆÄÄ¡ 2.0ÀÇ »õ·Î¿î
-±â´É ¿ä¾à</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile-time" id="compile-time">ÄÄÆÄÀϽà ±¸¼º º¯È­</a></h2>
-
-
- <ul>
- <li>¾ÆÆÄÄ¡´Â ÀÌÁ¦ <a href="install.html">¾ÆÆÄÄ¡ ÄÄÆÄÀÏ°ú ¼³Ä¡</a>¸¦ À§ÇØ
- <code>autoconf</code>¿Í <code>libtool</code> ½Ã½ºÅÛÀ»
- »ç¿ëÇÑ´Ù. ÀÌ ½Ã½ºÅÛÀÇ »ç¿ë¹ýÀº Apache 1.3ÀÇ APACI ½Ã½ºÅÛ°ú
- °°Áö´Â ¾ÊÁö¸¸ ºñ½ÁÇÏ´Ù.</li>
-
- <li>ÄÄÆÄÀÏ ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¸ðµâ¿Ü¿¡ Apache 2.0Àº ¿äûÀ»
- ó¸®ÇÏ´Â ÁÖ¿ä ºÎºÐÀ» <a href="mpm.html">´ÙÁßó¸® ¸ðµâ
- (Multi-Processing Modules)</a> (MPM)·Î ¿Å°å´Ù.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run-time" id="run-time">½ÇÇà½Ã ¼³Á¤ º¯È­</a></h2>
-
-
- <ul>
- <li>Apache 1.3¿¡¼­ ¼­¹ö Çٽɿ¡ ÀÖ¾ú´ø ¸¹Àº Áö½Ã¾îµéÀÌ
- ÀÌÁ¦´Â MPM¿¡ ÀÖ´Ù. ¼­¹ö°¡ Apache 1.3°ú ÃÖ´ëÇÑ ºñ½ÁÇÏ°Ô
- µ¿ÀÛÇÏ±æ ¹Ù¶õ´Ù¸é <code class="module"><a href="./mod/prefork.html">prefork</a></code> MPMÀ» ¼±ÅÃÇؾß
- ÇÑ´Ù. ´Ù¸¥ MPMÀº ´Ù¸¥ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º »ý¼º°ú
- ¿äûÀÇ Ã³¸®¸¦ Á¶ÀýÇÑ´Ù.</li>
-
- <li><a href="mod/mod_proxy.html">proxy ¸ðµâ</a>Àº HTTP/1.1¿¡
- ¸ÂÃß¾î ¼öÁ¤µÇ¾ú´Ù. Áß¿äÇÑ º¯È­Áß Çϳª´Â ÀÌÁ¦ ÇÁ·Ï½Ã Á¢±ÙÁ¦¾î°¡
- <code>&lt;Directory proxy:&gt;</code> ºí·ÏÀÌ ¾Æ´Ï¶ó
- <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
- ºí·Ï¿¡ À§Ä¡ÇÏ´Â Á¡ÀÌ´Ù.</li>
-
- <li>¸î¸î ¸ðµâ¿¡¼­ <code>PATH_INFO</code> (ÁøÂ¥ °æ·Î¸í
- µÚ¿¡ ³ª¿À´Â °æ·Î Á¤º¸) ó¸® ¹æ½ÄÀÌ º¯°æµÇ¾ú´Ù. Àü¿¡
- Çڵ鷯¿´Áö¸¸ ÀÌÁ¦ ÇÊÅÍ·Î ±¸ÇöµÇ´Â ¸ðµâÀº ´õ ÀÌ»ó
- <code>PATH_INFO</code>°¡ ÀÖ´Â ¿äûÀ» ¹Þ¾ÆµéÀÌÁö ¸øÇÑ´Ù.
- <a href="mod/mod_include.html">INCLUDES</a>³ª <a href="http://www.php.net/">PHP</a>¿Í °°Àº ÇÊÅÍ´Â
- core Çڵ鷯 À§¿¡ ±¸ÇöµÇ±â¶§¹®¿¡ <code>PATH_INFO</code>°¡
- ÀÖ´Â ¿äûÀ» °ÅºÎÇÑ´Ù. core Çڵ鷯°¡ <code>PATH_INFO</code>°¡
- ÀÖ´Â ¿äûÀ» ¹Þ¾ÆµéÀÌ°í server-side include¿¡¼­
- <code>PATH_INFO</code>¸¦ »ç¿ëÇÏ°Ô ÇÏ·Á¸é, <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> Áö½Ã¾î¸¦ »ç¿ëÇؾß
- ÇÑ´Ù.</li>
-
- <li><code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
- Áö½Ã¾î´Â ÀÌÁ¦ ¾Æ±Ô¸ÕÆ®·Î <code>on</code>°ú <code>off</code>¸¦
- ¹Þ´Â´Ù. ±âÁ¸ÀÇ <code class="directive">CacheNegotiatedDocs</code>´Â
- <code>CacheNegotiatedDocs on</code>À¸·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</li>
-
- <li>
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> Áö½Ã¾î´Â
- ´õÀÌ»ó ¸Þ¼¼Áö¸¦ ³ªÅ¸³»´Â ¾Æ±Ô¸ÕÆ® ¾Õ¿¡ µû¿ÈÇ¥¸¦ »ç¿ëÇÏÁö
- ¾Ê´Â´Ù. ´ë½Å ½Öµû¿ÈÇ¥·Î ¸Þ¼¼Áö¸¦ ¹­¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î °ú°Å
-
- <div class="example"><p><code>
- ErrorDocument 403 "Some Message
- </code></p></div>
- ´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
-
- <div class="example"><p><code>
- ErrorDocument 403 "Some Message"
- </code></p></div>
- µÎ¹ø° ¾Æ±Ô¸ÕÆ®°¡ À¯È¿ÇÑ URLÀ̳ª °æ·Î¸íÀÌ ¾Æ´Ï¶ó¸é ¸Þ¼¼Áö·Î
- °£ÁÖÇÑ´Ù.
- </li>
-
- <li><code>AccessConfig</code>¿Í <code>ResourceConfig</code>
- Áö½Ã¾î´Â »ç¶óÁ³´Ù. ±âÁ¸¿¡ »ç¿ëÇÏ´ø Áö½Ã¾î´Â °°Àº ±â´ÉÀ»
- ÇÏ´Â <code class="directive"><a href="./mod/core.html#include">Include</a></code> Áö½Ã¾î·Î
- ´ëüÇÒ ¼ö ÀÖ´Ù. °ú°Å¿¡ ¼³Á¤ÆÄÀÏ¿¡¼­ ÀÌ Áö½Ã¾îµéÀ» »ç¿ëÇÏÁö¾Ê°í
- ÀÌ Áö½Ã¾îµéÀÇ ±âº»°ªÀ» »ç¿ëÇß´Ù¸é, <code>http.conf</code>¿¡
- <code>Include conf/access.conf</code>¿Í <code>Include
- conf/srm.conf</code>¸¦ Ãß°¡ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡°¡ ÀÌÀü
- Áö½Ã¾î¿Í °°Àº ¼ø¼­·Î ¼³Á¤ÆÄÀÏÀ» ÀаÔÇÏ·Á¸é
- <code class="directive"><a href="./mod/core.html#include">Include</a></code> Áö½Ã¾î¸¦
- <code>httpd.conf</code> ³¡¿¡ µÎ°í, <code>srm.conf</code>ÀÌ
- <code>access.conf</code> ¾Õ¿¡ ³ª¿Í¾ß ÇÑ´Ù.</li>
-
- <li><code>BindAddress</code>¿Í <code>Port</code> Áö½Ã¾î´Â
- »ç¶óÁ³´Ù. ´õ À¯¿¬ÇÑ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- Áö½Ã¾î°¡ °°Àº ±â´ÉÀ» ÇÑ´Ù.</li>
-
- <li>Apache-1.3¿¡¼­ <code>Port</code>´Â ÀÚ±âÂüÁ¶
- URLÀÇ Æ÷Æ® ¹øÈ£¸¦ ¼³Á¤ÇÏ´Â Àϵµ Çß´Ù. Apache-2.0¿¡¼­ ÀÌ
- ±â´ÉÀº »õ·Î¿î <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>À¸·Î
- ÇÑ´Ù. ÇÑ Áö½Ã¾î¿¡ È£½ºÆ®¸í<em>°ú</em> ÀÚ±âÂüÁ¶ URLÀ» À§ÇÑ
- Æ÷Æ® ¹øÈ£¸¦ °°ÀÌ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</li>
-
- <li><code>ServerType</code> Áö½Ã¾î´Â »ç¶óÁ³´Ù. ¿äûÀ»
- ¼­ºñ½ºÇÏ´Â ¹æ¹ýÀº ÀÌÁ¦ MPM ¼±Åÿ¡ ´Þ·È´Ù. ÇöÀç inetd¿¡¼­
- ½ÃÀÛÇϵµ·Ï ¼³°èµÈ MPMÀº ¾ø´Ù.</li>
-
- <li><code>AgentLog</code>, <code>RefererLog</code>,
- <code>RefererIgnore</code> Áö½Ã¾î¸¦ Á¦°øÇÑ
- <code>mod_log_agent</code>¿Í <code>mod_log_referer</code>
- ¸ðµâÀÌ ¾ø¾îÁ³´Ù. agent ·Î±×¿Í referer ·Î±×´Â
- <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>ÀÇ <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© °è¼Ó Á¦°øµÈ´Ù.</li>
-
- <li><code>AddModule</code>°ú <code>ClearModuleList</code>
- Áö½Ã¾î´Â »ç¶óÁ³´Ù. ÀÌ Áö½Ã¾îµéÀº ¸ðµâÀ» ¿Ã¹Ù¸¥ ¼ø¼­·Î
- È°¼ºÈ­ÇÏ·Á°í »ç¿ëÇß´Ù. »õ·Î¿î Apache 2.0 API´Â ¸ðµâÀÌ
- È°¼ºÈ­µÇ´Â ¼ø¼­¸¦ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÒ ¼ö À־, ÀÌ Áö½Ã¾îµéÀÌ
- ÇÊ¿ä¾ø°Ô µÇ¾ú´Ù.</li>
-
- <li><code>FancyIndexing</code> Áö½Ã¾î°¡ ¾ø¾îÁ³´Ù.
- <code class="directive"><a href="./mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>
- Áö½Ã¾îÀÇ <code>FancyIndexing</code> ¿É¼ÇÀÌ °°Àº ±â´ÉÀ» ÇÑ´Ù.</li>
-
- <li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>ÀÇ MultiViews ³»¿ëÇù»óÀÌ
- ´õ ¾ö°ÝÇÏ°Ô ±âº»ÆÄÀÏÀ» ã´Â´Ù. ³»¿ëÇù»óÀº <em>Çù»ó°¡´ÉÇÑ</em>
- ÆÄÀÏ Áß¿¡¼­¸¸ ¼±ÅÃÇÑ´Ù. <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiviewsMatch</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ÀÌÀü°ú °°ÀÌ µ¿ÀÛÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.</li>
-
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="misc" id="misc">±âŸ º¯È­</a></h2>
-
-
- <ul>
- <li>Apache 1.3¿¡¼­ ½ÇÇèÀûÀÌ¿´´ø <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code>
- ¸ðµâÀÌ ÀÌÁ¦ Ç¥ÁØ ¸ðµâÀÌ µÇ¾ú´Ù.</li>
-
- <li>Apache 1.3¿¡¼­ ½ÇÇèÀûÀÌ¿´´ø <code>mod_mmap_static</code>
- ¸ðµâÀÌ <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>·Î ´ëüµÇ¾ú´Ù.</li>
-
- <li>¹èÆ÷º»ÀÌ ¿ÏÀüÈ÷ »õ·Î ±¸¼ºµÇ¾î ´õÀÌ»ó µ¶¸³µÈ <code>src</code>
- µð·ºÅ丮°¡ ¾ø´Ù. ´ë½Å ¼Ò½º´Â ÁÖ ¹èÆ÷º» µð·ºÅ丮 ¾Æ·¡ ³í¸®ÀûÀ¸·Î
- ±¸¼ºµÇÀÖ°í, ÄÄÆÄÀÏÇÑ ¼­¹ö´Â ´Ù¸¥ µð·ºÅ丮·Î ¼³Ä¡µÈ´Ù.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ</a></h2>
-
-
- <p>Apache 2.0¿¡¼­ ¼­¹ö API°¡ ¸¹ÀÌ º¯°æµÇ¾ú´Ù. Apache 1.3 API¿¡
- ¸ÂÃçÁø ±âÁ¸ ¸ðµâÀ» ¼öÁ¤¾øÀÌ Apache 2.0¿¡¼­ »ç¿ëÇÒ ¼ö
- <strong>¾ø´Ù</strong>. ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="developer/">°³¹ßÀÚ
- ¹®¼­</a>¸¦ Âü°íÇ϶ó.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/upgrading.html.ru.koi8-r b/docs/manual/upgrading.html.ru.koi8-r
deleted file mode 100644
index f6088c2106..0000000000
--- a/docs/manual/upgrading.html.ru.koi8-r
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="KOI8-R"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ðÅÒÅÈÏÄ ÏÔ ×ÅÒÓÉÉ 1.3 Ë ×ÅÒÓÉÉ 2.0 - HTTP ÓÅÒ×ÅÒ Apache</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">íÏÄÕÌÉ</a> | <a href="./mod/directives.html">äÉÒÅËÔÉ×Ù</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">çÌÏÓÓÁÒÉÊ</a> | <a href="./sitemap.html">ëÁÒÔÁ ÓÁÊÔÁ</a></p>
-<p class="apache">HTTP ÓÅÒ×ÅÒ Apache ÷ÅÒÓÉÑ 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ÓÅÒ×ÅÒ</a> &gt; <a href="http://httpd.apache.org/docs-project/">äÏËÕÍÅÎÔÁÃÉÑ</a> &gt; <a href="./">÷ÅÒÓÉÑ 2.1</a></div><div id="page-content"><div id="preamble"><h1>ðÅÒÅÈÏÄ ÏÔ ×ÅÒÓÉÉ 1.3 Ë ×ÅÒÓÉÉ 2.0</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div>
-<div class="outofdate">This translation may be out of date. Check the
- English version for recent changes.</div>
-
- <p>üÔÏÔ ÄÏËÕÍÅÎÔ ÎÅÏÂÈÏÄÉÍ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÏÍÏÞØ ÐÏÌØÚÏ×ÁÔÅÌÑÍ
- ÐÅÒÅÊÔÉ Ë ÉÓÐÏÌØÚÏ×ÁÎÉÀ ÓÅÒ×ÅÒÁ ×ÅÒÓÉÉ 2.0. úÄÅÓØ ×Ù ÎÁÊÄÅÔÅ ÌÉÛØ
- ËÒÁÔËÉÅ ÚÁÍÅÞÁÎÉÑ; ÂÏÌÅÅ ÐÏÄÒÏÂÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÎÏ×Ï××ÅÄÅÎÉÑÈ ÍÏÖÎÏ
- ÎÁÊÔÉ ÌÉÂÏ × ÄÏËÕÍÅÎÔÅ <a href="new_features_2_0.html">îÏ×ÙÅ ×ÏÚÍÏÖÎÏÓÔÉ</a>, ÌÉÂÏ × ÆÁÊÌÅ <code>src/CHANGES</code>.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">éÚÍÅÎÅÎÉÑ × ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÉ ÓÂÏÒËÉ ÓÅÒ×ÅÒÁ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#run-time">éÚÍÅÎÅÎÉÑ × ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÉ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">äÒÕÇÉÅ ÉÚÍÅÎÅÎÉÑ</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#third-party">íÏÄÕÌÉ ÔÒÅÔØÉÈ ÆÉÒÍ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compile-time" id="compile-time">éÚÍÅÎÅÎÉÑ × ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÉ ÓÂÏÒËÉ ÓÅÒ×ÅÒÁ</a></h2>
-
-
- <ul>
- <li>Apache ÔÅÐÅÒØ ÉÓÐÏÌØÚÕÅÔ ÓÉÓÔÅÍÕ <code>autoconf</code> É
- <code>libtool</code> ÄÌÑ <a href="install.html">ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ ÐÒÏÃÅÓÓÁ ÓÂÏÒËÉ</a>.
- éÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ÓÉÓÔÅÍÙ ÐÏÈÏÖÅ ÎÁ ÉÓÐÏÌØÚÏ×ÁÎÉÅ
- APACI × Apache 1.3, ÈÏÔÑ É ÎÅ Ñ×ÌÑÅÔÓÑ ÁÂÓÏÌÀÔÎÏ ÔÅÍ ÖÅ ÓÁÍÙÍ.</li>
-
- <li>÷ ÄÏÂÁ×ÏË Ë ÏÂÙÞÎÏÍÕ ÓÐÉÓËÕ ÍÏÄÕÌÅÊ, ËÏÔÏÒÙÅ ×Ù ÍÏÖÅÔÅ
- ×ÙÂÒÁÔØ ÐÒÉ ÓÂÏÒËÅ ÓÅÒ×ÅÒÁ, × Apache 2.0 ÐÏÑ×ÉÌÉÓØ <a href="mpm.html">ÍÕÌØÔÉ - ÐÒÏÃÅÓÓÎÙÅ ÍÏÄÕÌÉ</a> (íð - ÍÏÄÕÌÉ), × ËÏÔÏÒÙÈ ÔÅÐÅÒØ
- ÓËÏÎÃÅÎÔÒÉÒÏ×ÁÎÁ ÏÓÎÏ×ÎÁÑ ÞÁÓÔØ ËÏÄÁ, ÏÔ×ÅÞÁÀÝÅÇÏ ÚÁ ÏÂÒÁÂÏÔËÕ
- ÚÁÐÒÏÓÏ×.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="run-time" id="run-time">éÚÍÅÎÅÎÉÑ × ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÉ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ</a></h2>
-
-
- <ul>
- <li>íÎÏÇÉÅ ÉÚ ÔÅÈ ÄÉÒÅËÔÉ×, ËÏÔÏÒÙÅ ÏÂÓÌÕÖÉ×ÁÌÉÓØ ÑÄÒÏÍ ÓÅÒ×ÅÒÁ
- Apache 1.3, ÔÅÐÅÒØ ÐÅÒÅÎÅÓÅÎÙ × ÍÕÌØÔÉ - ÐÒÏÃÅÓÓÎÙÅ ÍÏÄÕÌÉ. åÓÌÉ ×Ù
- ÈÏÔÉÔÅ, ÞÔÏÂÙ ÐÏ×ÅÄÅÎÉÅ ÓÅÒ×ÅÒÁ ÂÙÌÏ ÎÁÉÂÏÌÅÅ ÐÒÉÂÌÉÖÅÎÏ Ë ÐÏ×ÅÄÅÎÉÀ
- Apache 1.3, ÔÏ ÐÒÉ ÓÂÏÒËÅ ×Ù ÄÏÌÖÎÙ ×ÙÂÒÁÔØ íð-ÍÏÄÕÌØ <a href="mod/prefork.html">prefork</a>. äÒÕÇÉÅ íð-ÍÏÄÕÌÉ ÐÒÅÄÏÓÔÁ×ÌÑÀÔ
- ÉÎÙÅ ÄÉÒÅËÔÉ×Ù, ÏÔ×ÅÞÁÀÝÉÅ ÚÁ ÒÁÂÏÔÕ ÐÒÏÃÅÓÓÏ× ÓÅÒ×ÅÒÁ É ÏÂÒÁÂÏÔËÕ
- ÚÁÐÒÏÓÏ×.</li>
-
- <li><a href="mod/mod_proxy.html">ðÒÏËÓÉ ÍÏÄÕÌØ</a> ÂÙÌ ÐÅÒÅÐÉÓÁÎ,
- É ÔÅÐÅÒØ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÓÐÅÃÉÆÉËÁÃÉÀ HTTP/1.1. ïÄÎÉÍ ÉÚ ÎÁÉÂÏÌÅÅ
- ×ÁÖÎÙÈ ÉÚÍÅÎÅÎÉÊ Ñ×ÌÑÅÔÓÑ ÔÏ, ÞÔÏ ÄÉÒÅËÔÉ×Ù, ËÏÎÔÒÏÌÉÒÕÀÝÉÅ ÒÁÂÏÔÕ
- ÍÏÄÕÌÑ, ÔÅÐÅÒØ ÒÁÓÐÏÌÁÇÁÀÔÓÑ × ÓÅËÃÉÉ &lt;Proxy&gt;, Á ÎÅ ×
- &lt;Directory proxy:&gt;, ËÁË ÜÔÏ ÂÙÌÏ ÒÁÎÅÅ.</li>
-
- <li>ïÂÒÁÂÏÔËÁ PATH_INFO (ÐÕÔÅ×ÏÊ ÉÎÆÏÒÍÁÃÉÉ, ÓÌÅÄÕÀÝÅÊ ÚÁ
- ÉÍÅÎÅÍ ÚÁÐÒÁÛÉ×ÁÅÍÏÇÏ ÄÏËÕÍÅÎÔÁ) ÉÚÍÅÎÉÌÁÓØ ÄÌÑ ÎÅËÏÔÏÒÙÈ ÍÏÄÕÌÅÊ.
- íÏÄÕÌÉ, ËÏÔÏÒÙÅ ÒÁÎØÛÅ ÂÙÌÉ ÎÁÐÉÓÁÎÙ ËÁË ÏÂÒÁÂÏÔÞÉËÉ (handler), Á
- ÔÅÐÅÒØ ×ÙÐÏÌÎÑÀÔ ÒÏÌØ ÆÉÌØÔÒÏ×, ÍÏÇÕÔ ÂÏÌÅÅ ÎÅ ÐÒÉÎÉÍÁÔØ ÚÁÐÒÏÓÙ,
- ÓÏÄÅÒÖÁÝÉÅ PATH_INFO. ôÁËÉÅ ÆÉÌØÔÒÙ, ËÁË <a href="mod/mod_include.html">INCLUDES</a> ÒÅÁÌÉÚÏ×ÁÎÙ ÐÅÒ×ÙÍÉ × ÂÁÚÏ×ÏÍ
- ÏÂÒÁÂÏÔÞÉËÅ, ÔÁËÉÍ ÏÂÒÁÚÏÍ ÏÎÉ ÎÅ ÍÏÇÕÔ ÐÒÉÎÉÍÁÔØ ÚÁÐÒÏÓÙ, ÓÏÄÅÒÖÁÝÉÅ
- PATH_INFO. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÉÒÅËÔÉ×Õ <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>, ÞÔÏÂÙ ÚÁÓÔÁ×ÉÔØ ÂÁÚÏ×ÙÊ
- ÏÂÒÁÂÏÔÞÉË ÐÒÉÎÉÍÁÔØ ÐÏÄÏÂÎÙÅ ÚÁÐÒÏÓÙ, É ÔÁËÉÍ ÏÂÒÁÚÏÍ ×ÏÓÓÔÁÎÏ×ÉÔØ
- ×ÏÚÍÏÖÎÏÓÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ PATH_INFO × ÄÏËÕÍÅÎÔÁÈ, ÉÓÐÏÌØÚÕÀÝÉÈ ×ËÌÀÞÅÎÉÑ
- ÎÁ ÓÔÏÒÏÎÅ ÓÅÒ×ÅÒÁ (SSI).</li>
-
- <li>äÉÒÅËÔÉ×Á <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
- ÔÅÐÅÒØ ÍÏÖÅÔ ÐÒÉÎÉÍÁÔØ ÁÒÇÕÍÅÎÔÙ <code>on</code> É
- <code>off</code>. õÖÅ ÓÕÝÅÓÔ×ÕÀÝÉÅ ÜËÚÅÍÐÌÑÒÙ ÄÉÒÅËÔÉ×Ù
- <code>CacheNegotiatedDocs</code> ÄÏÌÖÎÙ ÂÙÔØ ÚÁÍÅÎÅÎÙ ÎÁ
- <code>CacheNegotiatedDocs on</code>.</li>
-
- <li>
- äÉÒÅËÔÉ×Á <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
- ÂÏÌÅÅ ÎÅ ÉÓÐÏÌØÚÕÅÔ ÏÔËÒÙ×ÁÀÝÕÀ ËÁ×ÙÞËÕ × ÎÁÞÁÌÅ ÁÒÇÕÍÅÎÔÁ
- ÄÌÑ ÏÂÏÚÎÁÞÅÎÉÑ ÔÏÇÏ, ÞÔÏ ÁÒÇÕÍÅÎÔ Ñ×ÌÑÅÔÓÑ ÔÅËÓÔÏ×ÙÍ ÓÏÏÂÝÅÎÉÅÍ.
- ÷ÍÅÓÔÏ ÜÔÏÇÏ ×ÁÍ ÎÅÏÂÈÏÄÉÍÏ ÚÁËÌÀÞÁÔØ ×ÅÓØ ÔÅËÓÔ ÓÏÏÂÝÅÎÉÑ
- × Ä×ÏÊÎÙÅ ËÁ×ÙÞËÉ. îÁÐÒÉÍÅÒ, ÓÕÝÅÓÔ×ÕÀÝÉÅ ÄÉÒÅËÔÉ×Ù
-
- <div class="example"><p><code>
- ErrorDocument 403 "îÅËÏÔÏÒÏÅ ÓÏÏÂÝÅÎÉÅ
- </code></p></div>
- ÄÏÌÖÎÙ ÂÙÔØ ÚÁÍÅÎÅÎÙ ÎÁ
-
- <div class="example"><p><code>
- ErrorDocument 403 "îÅËÏÔÏÒÏÅ ÓÏÏÂÝÅÎÉÅ"
- </code></p></div>
- åÓÌÉ ×ÔÏÒÏÊ ÁÒÇÕÍÅÎÔ ÎÅ Ñ×ÌÑÅÔÓÑ ÐÒÁ×ÉÌØÎÏ ÏÆÏÒÍÌÅÎÎÙÍ
- ÉÄÅÎÔÉÆÉËÁÔÏÒÏÍ ÒÅÓÕÒÓÁ (URL) ÉÌÉ ÐÕÔÅ×ÙÍ ÉÍÅÎÅÍ, ÔÏ ÏÎ
- ÂÕÄÅÔ ÉÎÔÅÒÐÒÅÔÉÒÏ×ÁÔØÓÑ ËÁË ÔÅËÓÔÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ.
- </li>
-
- <li>äÉÒÅËÔÉ×Ù <code>AccessConfig</code> É
- <code>ResourceConfig</code> ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÀÔ.
- éÍÅÀÝÉÅÓÑ ÉÈ ËÏÐÉÉ ÍÏÇÕÔ ÂÙÔØ ÚÁÍÅÎÅÎÙ ÄÉÒÅËÔÉ×ÏÊ
- <code class="directive"><a href="./mod/core.html#include">Include</a></code>, ËÏÔÏÒÁÑ ÉÍÅÅÔ
- ÔÕ ÖÅ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ. åÓÌÉ ÐÒÅÖÄÅ ×Ù ÎÅ ×ËÌÀÞÁÌÉ ÉÈ × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ
- ÆÁÊÌÙ, ÔÅÍ ÓÁÍÙÍ ÉÓÐÏÌØÚÕÑ ÉÈ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÔÏ ÓÅÊÞÁÓ,
- ÄÌÑ ÄÏÓÔÉÖÅÎÉÑ ÔÏÇÏ ÖÅ ÒÅÚÕÌØÔÁÔÁ, ×ÁÍ ÎÁÄÏ
- ÄÏÂÁ×ÉÔØ ÓÌÅÄÕÀÝÉÅ ÓÔÒÏËÉ × ÆÁÊÌ httpd.conf: <code>Include conf/access.conf</code> É <code>Include
- conf/srm.conf</code>. äÌÑ ÔÏÇÏ ÞÔÏÂÙ ÂÙÔØ Õ×ÅÒÅÎÎÙÍ × ÔÏÍ, ÞÔÏ
- Apache ÓÞÉÔÙ×ÁÅÔ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ ÆÁÊÌÙ ÉÍÅÎÎÏ × ÔÏÍ ÐÏÒÑÄËÅ,
- ËÏÔÏÒÙÊ ÂÙÌ ÐÒÅÄÕÓÍÏÔÒÅÎ ÓÔÁÒÙÍÉ ÄÉÒÅËÔÉ×ÁÍÉ, ÎÁÄÏ ÐÏÍÅÓÔÉÔØ
- ÄÉÒÅËÔÉ×Ù <code>Include</code> × ËÏÎÃÅ ÆÁÊÌÁ httpd.conf, ÐÒÉÞÅÍ
- ÓÐÅÒ×Á ÔÕ, ÞÔÏ ×ËÌÀÞÁÅÔ <code>srm.conf</code>, Á ÚÁÔÅÍ ÔÕ, ÞÔÏ
- ×ËÌÀÞÁÅÔ <code>access.conf</code>.</li>
-
- <li>äÉÒÅËÔÉ×Ù <code>BindAddress</code> É <code>Port</code>
- ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÀÔ. üË×É×ÁÌÅÎÔÎÁÑ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ ÐÒÅÄÏÓÔÁ×ÌÑÅÔÓÑ
- ÂÏÌÅÅ ÇÉÂËÏÊ ÄÉÒÅËÔÉ×ÏÊ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>.
- </li>
-
- <li>÷ Apache 1.3 ÄÉÒÅËÔÉ×Á <code>Port</code>
- ÉÓÐÏÌØÚÏ×ÁÌÁÓØ, ËÒÏÍÅ ×ÓÅÇÏ ÐÒÏÞÅÇÏ, ÄÌÑ ÔÏÇÏ ÞÔÏÂÙ ÓÅÒ×ÅÒ
- ÍÏÇ ÆÏÒÍÉÒÏ×ÁÔØ ÐÒÁ×ÉÌØÎÙÅ ÓÓÙÌËÉ ÎÁ ÓÁÍÏÇÏ ÓÅÂÑ. ÷ Apache 2.0 ÄÌÑ
- ÔÅÈ ÖÅ ÃÅÌÅÊ ÓÌÕÖÉÔ ÎÏ×ÙÊ ÓÉÎÔÁËÓÉÓ ÄÉÒÅËÔÉ×Ù <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>: ÏÎ ÂÙÌ ÉÚÍÅÎÅÎ ÔÁËÉÍ ÏÂÒÁÚÏÍ, ÞÔÏ ÔÅÐÅÒØ
- ÉÍÑ ÈÏÓÔÁ <em>É</em> ÎÏÍÅÒ ÐÏÒÔÁ ÍÏÖÎÏ ÕËÁÚÙ×ÁÔØ × ÏÄÎÏÊ ÜÔÏÊ ÄÉÒÅËÔÉ×Å.</li>
-
- <li>äÉÒÅËÔÉ×Á <code>ServerType</code> ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ.
- íÅÔÏÄ ÏÂÒÁÂÏÔËÉ ÚÁÐÒÏÓÏ× ÔÅÐÅÒØ ÏÐÒÅÄÅÌÑÅÔÓÑ ÐÏÓÒÅÄÓÔ×ÏÍ
- ×ÙÂÏÒÁ íð-ÍÏÄÕÌÑ. ÷ ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ ÎÅÔ ÔÁËÏÇÏ íð-ÍÏÄÕÌÑ,
- ËÏÔÏÒÙÊ ÍÏÇ ÂÙ ÚÁÐÕÓËÁÔØÓÑ ÐÏÓÒÅÄÓÔ×ÏÍ ÄÅÍÏÎÁ inetd.</li>
-
- <li>íÏÄÕÌÉ mod_log_agent É mod_log_referer, ËÏÔÏÒÙÅ ÐÒÅÄÏÓÔÁ×ÌÑÌÉ
- ÔÁËÉÅ ÄÉÒÅËÔÉ×Ù, ËÁË <code>AgentLog</code>, <code>RefererLog</code>
- É <code>RefererIgnore</code>, ÂÙÌÉ ÕÂÒÁÎÙ. ÷ÅÄÅÎÉÅ ÖÕÒÎÁÌÁ ÁÇÅÎÔÏ×
- ÐÏÌØÚÏ×ÁÔÅÌÅÊ (agent logs) É ÏÔÐÒÁ×ÉÔÅÌÅÊ (referer logs) ÐÏ-ÐÒÅÖÎÅÍÕ
- ×ÏÚÍÏÖÎÏ ÐÏÓÒÅÄÓÔ×ÏÍ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÄÉÒÅËÔÉ×Ù <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code> ÍÏÄÕÌÑ <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.</li>
-
- <li>äÉÒÅËÔÉ×Ù <code>AddModule</code> É
- <code>ClearModuleList</code> ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÀÔ. ïÎÉ ÉÓÐÏÌØÚÏ×ÁÌÉÓØ
- ÄÌÑ ÏÂÅÓÐÅÞÅÎÉÑ ÐÒÁ×ÉÌØÎÏÇÏ ÐÏÒÑÄËÁ ÚÁÇÒÕÚËÉ ÍÏÄÕÌÅÊ. îÏ×ÙÊ API ÄÌÑ
- Apache 2.0 ÐÏÚ×ÏÌÑÅÔ ÍÏÄÕÌÑÍ ÓÁÍÉÍ ÕËÁÚÙ×ÁÔØ ÐÏÒÑÄÏË ÉÈ ÚÁÇÒÕÚËÉ, ÞÔÏ
- ÄÅÌÁÅÔ ÜÔÉ ÄÉÒÅËÔÉ×Ù ÎÅÎÕÖÎÙÍÉ.</li>
-
- <li>äÉÒÅËÔÉ×Á <code>FancyIndexing</code> ÂÙÌÁ ÕÂÒÁÎÁ. åÅ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ
- ÔÅÐÅÒØ ÏÂÅÓÐÅÞÉ×ÁÅÔÓÑ ÏÐÃÉÅÊ <code>FancyIndexing</code> × ÄÉÒÅËÔÉ×Å <code class="directive"><a href="./mod/mod_autoindex.html#indexoptions">IndexOptions</a></code></li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="misc" id="misc">äÒÕÇÉÅ ÉÚÍÅÎÅÎÉÑ</a></h2>
-
-
- <ul>
- <li>ïÐÃÉÑ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ <code>httpd</code> <code> -S</code>,
- ÐÏÚ×ÏÌÑ×ÛÁÑ ÒÁÓÐÅÞÁÔÙ×ÁÔØ ËÏÎÆÉÇÕÒÁÃÉÀ ×ÉÒÔÕÁÌØÎÙÈ ÈÏÓÔÏ×, ÔÅÐÅÒØ ÚÁÍÅÎÅÎÁ
- ÏÐÃÉÅÊ <code>-t -D DUMP_VHOSTS</code>.</li>
-
- <li>íÏÄÕÌØ <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code>, ËÏÔÏÒÙÊ ÉÍÅÌ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ ÓÔÁÔÕÓ ×
- Apache 1.3, ÔÅÐÅÒØ Ñ×ÌÑÅÔÓÑ ÓÔÁÎÄÁÒÔÎÙÍ ÍÏÄÕÌÅÍ.</li>
-
- <li>íÏÄÕÌØ <code>mod_mmap_static</code>, ËÏÔÏÒÙÊ ÉÍÅÌ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ ÓÔÁÔÕÓ ×
- Apache 1.3, ÚÁÍÅÎÅÎ ÍÏÄÕÌÅÍ <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>.</li>
-
- <li>ïÒÇÁÎÉÚÁÃÉÑ ÄÉÓÔÒÉÂÕÔÉ×Á ÐÏÌÎÏÓÔØÀ ÉÚÍÅÎÅÎÁ É ÔÅÐÅÒØ
- ÂÏÌÅÅ ÎÅ ÓÏÄÅÒÖÉÔ ÎÅÚÁ×ÉÓÉÍÏÇÏ ËÁÔÁÌÏÇÁ <code>src</code>. ÷ÍÅÓÔÏ ÜÔÏÇÏ
- ÉÓÈÏÄÎÙÅ ËÏÄÙ ÌÏÇÉÞÅÓËÉ ÏÒÇÁÎÉÚÏ×ÁÎÙ × ÏÓÎÏ×ÎÏÍ ËÁÔÁÌÏÇÅ ÄÉÓÔÒÉÂÕÔÉ×Á, Á
- ÕÓÔÁÎÏ×ËÁ ÓËÏÍÐÉÌÉÒÏ×ÁÎÎÏÇÏ ÓÅÒ×ÅÒÁ ÐÒÏÉÚ×ÏÄÉÔÓÑ × ÏÔÄÅÌØÎÙÊ ËÁÔÁÌÏÇ.</li>
- </ul>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="third-party" id="third-party">íÏÄÕÌÉ ÔÒÅÔØÉÈ ÆÉÒÍ</a></h2>
-
-
- <p>úÎÁÞÉÔÅÌØÎÙÅ ÉÚÍÅÎÅÎÉÑ ÂÙÌÉ ×ÎÅÓÅÎÙ × API ÄÌÑ Apache 2.0.
- óÕÝÅÓÔ×ÕÀÝÉÅ ÍÏÄÕÌÉ, ÎÁÐÉÓÁÎÎÙÅ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ Apache 1.3 API,
- <strong>ÎÅ</strong> ÂÕÄÕÔ ÒÁÂÏÔÁÔØ ÐÏÄ Apache 2.0, ÅÓÌÉ ÎÅ ×ÎÅÓÔÉ
- × ÎÉÈ ÎÅÏÂÈÏÄÉÍÙÅ ÉÚÍÅÎÅÎÉÑ. âÏÌÅÅ ÐÏÄÒÏÂÎÁÑ ÉÎÆÏÒÍÁÃÉÑ ÐÏ ÜÔÏÍÕ ÐÏ×ÏÄÕ
- ÄÏÓÔÕÐÎÁ × <a href="developer/">ÄÏËÕÍÅÎÔÁÃÉÉ ÄÌÑ ÒÁÚÒÁÂÏÔÞÉËÏ×</a>.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
-<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
-<a href="./ru/upgrading.html" title="Russian">&nbsp;ru&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">íÏÄÕÌÉ</a> | <a href="./mod/directives.html">äÉÒÅËÔÉ×Ù</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">çÌÏÓÓÁÒÉÊ</a> | <a href="./sitemap.html">ëÁÒÔÁ ÓÁÊÔÁ</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/upgrading.xml b/docs/manual/upgrading.xml
deleted file mode 100644
index f0ea6b7d53..0000000000
--- a/docs/manual/upgrading.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.14 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="upgrading.xml.meta">
-
-<title>Upgrading to 2.0 from 1.3</title>
-
-<summary>
- <p>In order to assist folks upgrading, we maintain a document
- describing information critical to existing Apache users. These
- are intended to be brief notes, and you should be able to find
- more information in either the <a
- href="new_features_2_0.html">New Features</a> document, or in
- the <code>src/CHANGES</code> file.</p>
-</summary>
-<seealso><a href="new_features_2_0.html">Overview of new features in
- Apache 2.0</a></seealso>
-
- <section id="compile-time">
- <title>Compile-Time Configuration Changes</title>
-
- <ul>
- <li>Apache now uses an <code>autoconf</code> and
- <code>libtool</code> system for <a
- href="install.html">configuring the build processes</a>.
- Using this system is similar to, but not the same as, using
- the APACI system in Apache 1.3.</li>
-
- <li>In addition to the usual selection of modules which you
- can choose to compile, Apache 2.0 has moved the main part of
- request processing into <a href="mpm.html">Multi-Processing
- Modules</a> (MPMs).</li>
- </ul>
- </section>
-
- <section id="run-time">
- <title>Run-Time Configuration Changes</title>
-
- <ul>
- <li>Many directives that were in the core server in Apache
- 1.3 are now in the MPMs. If you wish the behavior of the
- server to be as similar as possible to the behavior of Apache
- 1.3, you should select the <module>prefork</module> MPM. Other MPMs
- will have different directives to control process creation and request
- processing.</li>
-
- <li>The <a href="mod/mod_proxy.html">proxy module</a> has been
- revamped to bring it up to HTTP/1.1. Among the important changes,
- proxy access control is now placed inside a <directive type="section"
- module="mod_proxy">Proxy</directive> block rather than a
- <code>&lt;Directory proxy:&gt;</code> block.</li>
-
- <li>The handling of <code>PATH_INFO</code> (trailing path information
- after the true filename) has changed for some modules. Modules
- that were previously implemented as a handler but are now
- implemented as a filter may no longer accept requests with
- <code>PATH_INFO</code>. Filters such as <a
- href="mod/mod_include.html">INCLUDES</a> or <a
- href="http://www.php.net/">PHP</a> are implemented on top
- of the core handler, and therefore reject requests with
- <code>PATH_INFO</code>. You can use the <directive
- module="core">AcceptPathInfo</directive> directive to
- force the core handler to accept requests with <code>PATH_INFO</code>
- and thereby restore the ability to use <code>PATH_INFO</code> in
- server-side includes.</li>
-
- <li>The <directive
- module="mod_negotiation">CacheNegotiatedDocs</directive>
- directive now takes the argument <code>on</code> or
- <code>off</code>. Existing instances of <directive
- >CacheNegotiatedDocs</directive> should be
- replaced with <code>CacheNegotiatedDocs on</code>.</li>
-
- <li>
- The <directive module="core">ErrorDocument</directive>
- directive no longer uses a quote at the beginning of the
- argument to indicate a text message. Instead, you should
- enclose the message in double quotes. For example, existing
- instances of
-
- <example>
- ErrorDocument 403 "Some Message
- </example>
- should be replaced with
-
- <example>
- ErrorDocument 403 "Some Message"
- </example>
-
- As long as the second argument is not a valid URL or
- pathname, it will be treated as a text message.
- </li>
-
- <li>The <code>AccessConfig</code> and
- <code>ResourceConfig</code> directives no longer exist.
- Existing instances of these directives can be replaced with
- the <directive module="core">Include</directive>
- directive which has equivalent functionality. If you were
- making use of the default values of these directives without
- including them in the configuration files, you may need to
- add <code>Include conf/access.conf</code> and <code>Include
- conf/srm.conf</code> to your <code>httpd.conf</code>. In order to
- assure that Apache reads the configuration files in the same order
- as was implied by the older directives, the <directive
- module="core">Include</directive> directives should be placed at the end
- of <code>httpd.conf</code>, with the one for <code>srm.conf</code>
- preceding the one for <code>access.conf</code>.</li>
-
- <li>The <code>BindAddress</code> and <code>Port</code>
- directives no longer exist. Equivalent functionality is
- provided with the more flexible
- <directive module="mpm_common">Listen</directive>
- directive.</li>
-
- <li>Another use of the <code>Port</code>
- directive in Apache-1.3 was setting the port number to be used
- in self-referential URL's. The Apache-2.0 equivalent is
- the new <directive module="core">ServerName</directive>
- syntax: it has been changed to allow specifying both the
- hostname <em>and</em> the port number for self-referential URL's
- in one directive.</li>
-
- <li>The <code>ServerType</code> directive no longer exists.
- The method used to serve requests is now determined by the
- selection of MPM. There is currently no MPM designed to be
- launched by inetd.</li>
-
- <li>The <code>mod_log_agent</code> and <code>mod_log_referer</code>
- modules which provided the <code>AgentLog</code>,
- <code>RefererLog</code> and <code>RefererIgnore</code> directives have
- been removed. Agent and referer logs are still available using the
- <directive module="mod_log_config">CustomLog</directive>
- directive of <module>mod_log_config</module>.</li>
-
- <li>The <code>AddModule</code> and
- <code>ClearModuleList</code> directives no longer exist.
- These directives were used to ensure that modules could be
- enabled in the correct order. The new Apache 2.0 API allows
- modules to explicitly specify their ordering, eliminating the
- need for these directives.</li>
-
- <li>The <code>FancyIndexing</code> directive has been removed.
- The same functionality is available through the
- <code>FancyIndexing</code> option to the <directive
- module="mod_autoindex">IndexOptions</directive>
- directive.</li>
-
- <li>The MultiViews content-negotiation technique provided by
- <module>mod_negotiation</module> has become more strict in its
- default file matching. It will select only from <em>negotiable</em>
- files. The old behavior can be restored using the <directive
- module="mod_mime">MultiviewsMatch</directive> directive.</li>
-
- </ul>
- </section>
-
- <section id="misc">
- <title>Misc Changes</title>
-
- <ul>
- <li>The module <module>mod_auth_digest</module>, which was
- experimental in Apache 1.3, is now a standard module.</li>
-
- <li>The <code>mod_mmap_static</code> module, which was experimental in
- Apache 1.3, has been replaced with <module>mod_file_cache</module>.</li>
-
- <li>The distribution has been completely reorganized so that
- it no longer contains an independent <code>src</code>
- directory. Instead, the sources are logically organized under
- the main distribution directory, and installations of the
- compiled server should be directed to a separate
- directory.</li>
- </ul>
- </section>
-
- <section id="third-party">
- <title>Third Party Modules</title>
-
- <p>Extensive changes were made to the server API in Apache 2.0.
- Existing modules designed for the Apache 1.3 API will
- <strong>not</strong> work in Apache 2.0 without modification.
- Details are provided in the <a href="developer/">developer
- documentation</a>.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/upgrading.xml.de b/docs/manual/upgrading.xml.de
deleted file mode 100644
index 91076abfbb..0000000000
--- a/docs/manual/upgrading.xml.de
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.de.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="upgrading.xml.meta">
-
-<title>Upgrade von 1.3 auf 2.0</title>
-
-<summary>
- <p>Dieses Dokument dient der Unterst&#252;tzung beim Upgrade. Es
- enth&#228;lt die entscheidenden Informationen f&#252;r bisherige
- Apache-Nutzer. Diese sind als kurze Anmerkungen
- gedacht. Weitere Informationen finden Sie entweder unter
- <a href="new_features_2_0.html">Neue Funktionen</a> oder in
- den <code>src/CHANGES</code>-Dateien.</p>
-</summary>
-<seealso><a href="new_features_2_0.html">&Uuml;bersicht der neuen Funktionen
- in Apache 2.0</a></seealso>
-
- <section id="compile-time">
- <title>&#196;nderungen der Konfiguration bei der Kompilierung</title>
-
- <ul>
- <li>Der Apache benutzt jetzt ein <code>autoconf</code>- und
- <code>libtool</code>-System zur <a
- href="install.html">Konfiguration des
- Erstellungsverfahrens</a>. Die Verwendung dieses Systems ist
- &#228;hnlich, aber nicht identisch mit dem APACI-System des
- Apache 1.3.</li>
-
- <li>Zus&#228;tzlich zu der &#252;blichen Auswahl von Modulen, die
- kompiliert werden sollen, wurde der Hauptteil der
- Request-Verarbeitung im Apache 2.0 in die <a href="mpm.html">
- Multi-Processing-Module</a> (MPMs) verschoben.</li>
- </ul>
- </section>
-
- <section id="run-time">
- <title>&#196;nderungen der Laufzeit-Konfiguration</title>
-
- <ul>
- <li>Viele Anweisungen aus dem Serverkern des Apache 1.3 sind
- jetzt in den MPMs enthalten. Wenn Sie ein Serververhalten
- w&#252;nschen, das demjenigen des Apache 1.3 m&#246;glichst
- &#228;hnlich ist, sollten Sie das <module>prefork</module>-MPM
- ausw&#228;hlen. Andere MPMs verwenden abweichende Anweisungen
- f&#252;r die Prozess-Erstellung und Request-Verarbeitung.</li>
-
- <li>Das <a href="mod/mod_proxy.html">Proxy-Modul</a> wurde
- umgearbeitet, um es auf den Stand von HTTP/1.1 zu bringen. Eine
- der bedeutendsten &#196;nderungen ist die Platzierung der
- Proxy-Zugriffskontrolle innerhalb eines <directive type="section"
- module="mod_proxy">Proxy</directive>-Blocks, statt innerhalb eines
- <code>&lt;Directory proxy:&gt;</code>-Blocks.</li>
-
- <li>Die Behandlung von <code>PATH_INFO</code> (hinter dem
- tats&#228;chlichen Dateinamen angef&#252;gte Pfadangaben) wurde
- f&#252;r einige Module ge&#228;ndert. Module, die bisher als Handler
- implementiert waren, jetzt aber als Filter implementiert sind,
- akzeptieren m&#246;glicherweise keine Requests mit
- <code>PATH_INFO</code> mehr. Filter wie <a
- href="mod/mod_include.html">INCLUDES</a> oder <a
- href="http://www.php.net/">PHP</a> sind gleich oben im
- Core-Handler implementiert und weisen deshalb Requests mit
- <code>PATH_INFO</code> ab. Sie k&#246;nnen die <directive
- module="core">AcceptPathInfo</directive>-Direktive
- verwenden, um den Core-Handler zu zwingen, Requests mit
- <code>PATH_INFO</code> zu akzeptieren, und dadurch die F&#228;higkeit
- wiederherstellen, <code>PATH_INFO</code> in Server Side Includes zu
- benutzen.</li>
-
- <li>Die <directive
- module="mod_negotiation">CacheNegotiatedDocs</directive>-Direktive
- hat jetzt das Argument an (<code>on</code>) oder aus
- (<code>off</code>). Die vorhandenen Anweisungen <directive
- >CacheNegotiatedDocs</directive> sollten durch
- <code>CacheNegotiatedDocs on</code> ersetzt werden.</li>
-
- <li>
- Die <directive module="core">ErrorDocument</directive>-Direktive
- verwendet kein Anf&#252;hrungszeichen mehr am Anfang des
- Arguments, um eine
- Textnachricht anzuzeigen. Stattdessen sollten Sie die
- Nachricht in doppelte Anf&#252;hrungszeichen einschlie&#223;en.
- Zum Beispiel sollten existierende Angaben wie
-
- <example>
- ErrorDocument 403 "Eine Nachricht
- </example>
- durch
-
- <example>
- ErrorDocument 403 "Eine Nachricht"
- </example>
-
- ersetzt werden.
- Solange das zweite Argument kein g&#252;ltiger URL oder
- Pfadname ist, wird es als Textnachricht behandelt.
- </li>
-
- <li>Die Direktiven <code>AccessConfig</code> und
- <code>ResourceConfig</code> sind entfallen.
- Diese Direktiven k&#246;nnen durch die <directive
- module="core">Include</directive>-Direktive
- ersetzt werden, die eine &#228;quivalente Funktionalit&#228;t besitzt.
- Wenn Sie die Defaultwerte dieser Direktiven verwendet haben,
- ohne sie in die Konfigurationsdateien einzuf&#252;gen, m&#252;ssen Sie
- m&#246;glicherweise <code>Include conf/access.conf</code> und
- <code>Include conf/srm.conf</code> zu Ihrer <code>httpd.conf</code>
- hinzuf&#252;gen. Um sicherzustellen, da&#223; der Apache die
- Konfigurationsdateien in der gleichen Reihenfolge liest, wie sie von
- den &#228;lteren Direktiven impliziert wurde, sollten die <directive
- module="core">Include</directive>-Direktiven ans Ende der
- <code>httpd.conf</code> gestellt werden, wobei die Direktive f&#252;r
- <code>srm.conf</code> derjenigen f&#252;r <code>access.conf</code>
- vorangeht.</li>
-
- <li>Die Direktiven <code>BindAddress</code> und <code>Port</code>
- sind entfallen. Eine &#228;quivalente Funktionalit&#228;t wird von der
- flexibleren Direktive <directive
- module="mpm_common">Listen</directive> bereitgestellt.</li>
-
- <li>Im Apache 1.3 wurde die <code>Port</code>-Direktive au&#223;erdem
- dazu verwendet, die Portnummer f&#252;r
- selbstreferenzierende URLs festzulegen.
- Die neue <directive module="core">ServerName</directive>-Syntax
- stellt das Apache-2.0-&#196;quivalent dar:
- sie wurde dahingehend ver&#228;ndert, sowohl den Hostnamen
- <em>als auch</em> die Portnummer f&#252;r selbstreferenzierende URLs
- in einer Direktive angeben zu k&#246;nnen.</li>
-
- <li>Die <code>ServerType</code>-Direktive entf&#228;llt.
- Die Methode zum Bedienen der Requests wird nun durch die Auswahl
- des MPM ermittelt. Derzeit ist kein MPM daf&#252;r bestimmt, von inetd
- gestartet zu werden.</li>
-
- <li>Die Module <code>mod_log_agent</code> und <code>
- mod_log_referer</code>, welche die Direktiven <code>AgentLog</code>,
- <code>RefererLog</code> und <code>RefererIgnore</code> bereitgestellt
- hatten, wurden entfernt. Durch Verwendung der Direktive <directive
- module="mod_log_config">CustomLog</directive> aus mod_log_config
- sind die Agent- und Refererlogs auch weiterhin verf&#252;gbar.</li>
-
- <li>Die Direktiven <code>AddModule</code> und
- <code>ClearModuleList</code> sind entfallen.
- Diese Direktiven wurden benutzt, um sicherzustellen, da&#223; die
- Module in der richtigen Reihenfolge aktiviert werden k&#246;nnen.
- Die neue Apache 2.0 API erlaubt es Modulen, ihre Reihenfolge
- explizit anzugeben, und macht diese Direktiven damit
- &#252;berfl&#252;ssig.</li>
-
- <li>Die Direktive <code>FancyIndexing</code> wurde entfernt.
- Die gleiche Funktionalit&#228;t ist nun mit der Option
- <code>FancyIndexing</code> der Direktive <directive
- module="mod_autoindex">IndexOptions</directive> verf&#252;gbar.</li>
-
- <li>Die von <module>mod_negotiation</module> bereitgestellte
- Content-Negotiation-Technik MultiViews f&#252;hrt nun eine strengere
- Dateierkennung durch. Es wird ausschlie&#223;lich unter den
- <em>aushandelbaren</em> Dateien gew&#228;hlt. Das bisherige Verhalten
- kann jedoch mit der Direktive <directive
- module="mod_mime">MultiviewsMatch</directive> wiederhergestellt
- werden.</li>
- </ul>
- </section>
-
- <section id="misc">
- <title>Sonstige &#196;nderungen</title>
-
- <ul>
- <li>Das Modul <module>mod_auth_digest</module>, das im Apache 1.3
- experimentellen Status hatte, ist nun ein Standardmodul.</li>
-
- <li>Das Modul <code>mod_mmap_static</code>, das im Apache 1.3
- experimentellen Status hatte, wurde durch das Modul <module
- >mod_file_cache</module> ersetzt.</li>
-
- <li>Die Distribution wurde komplett reorganisiert und enth&#228;lt kein
- unabh&#228;ngiges <code>src</code>-Verzeichnis mehr. Stattdessen wurden
- die Quellcodes logisch unterhalb des Hauptverzeichnisses der
- Distribution angeordnet. Installationen des kompilierten Servers
- sollten in ein separates Verzeichnis erfolgen.</li>
- </ul>
- </section>
-
- <section id="third-party">
- <title>Module von Drittanbietern</title>
-
- <p>An der API des Apache 2.0 wurden umfassende &#196;nderungen
- vorgenommen. Bestehende Module, die f&#252;r die Apache 1.3 API
- entwickelt wurden, werden <strong>nicht</strong> ohne Modifikationen mit
- der Version 2.0 des Apache zusammenarbeiten. Details sind in der <a
- href="developer/">Dokumentation f&#252;r Entwickler</a> beschrieben.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/upgrading.xml.ja b/docs/manual/upgrading.xml.ja
deleted file mode 100644
index 999c5e91e2..0000000000
--- a/docs/manual/upgrading.xml.ja
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="upgrading.xml.meta">
-
-<title>1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B</title>
-
-<summary>
- <p>$B%"%C%W%0%l!<%I$r4JC1$K$9$k$?$a$K!"4{B8$N(B Apache $B%f!<%6$K(B
- $BHs>o$K=EMW$J>pJs$r$3$NJ8=q$K$^$H$a$F$$$^$9!#$3$l$OC;$$(B
- $BCm0U=q$-$H$7$F=q$+$l$F$$$^$9!#$h$j>\$7$$>pJs$O(B
- <a href="new_features_2_0.html">$B?75!G=(B</a>$B$NJ8=q$d(B
- <code>src/CHANGES</code> $B%U%!%$%k$G8+$D$1$i$l$k$H;W$$$^$9!#(B</p>
-</summary>
-<seealso><a href="new_features_2_0.html">Apache 2.0 $B?75!G=$N35MW(B</a></seealso>
-
- <section id="compile-time">
- <title>$B%3%s%Q%$%k;~$N@_Dj$NJQ99(B</title>
-
- <ul>
- <li>Apache $B$O(B <a href="install.html">$B%S%k%I=hM}$N@_Dj(B</a>
- $B$K(B <code>autoconf</code> $B$H(B <code>libtool</code> $B$r;H$&$h$&$K$J$j$^$7$?!#(B
- $B$3$N%7%9%F%`$O(B Apache 1.3 $B$N(B APACI $B%7%9%F%`$H;w$F$$$^$9$,!"(B
- $B$^$C$?$/F1$8$H$$$&$o$1$G$O$"$j$^$;$s!#(B</li>
-
- <li>$BDL>o$N%3%s%Q%$%k$9$k$+$I$&$+$rA*Br$G$-$k%b%8%e!<%k72$K2C$($F!"(B
- Apache 2.0 $B$O(B
- $B%j%/%(%9%H=hM}$N<g$JItJ,$r(B <a href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0(B
- $B%b%8%e!<%k(B</a> (MPM) $B$K0\F0$7$^$7$?!#(B</li>
- </ul>
- </section>
-
- <section id="run-time">
- <title>$B<B9T;~$N@_Dj$NJQ99(B</title>
-
- <ul>
- <li>Apache 1.3 $B$N;~$K%3%"%5!<%P$K$"$C$?B?$/$N%G%#%l%/%F%#%V$O(B
- MPM $B$K0\F0$7$^$7$?!#%5!<%P$K(B Apache 1.3 $B$H$G$-$k$@$1F1$8?6$kIq$$$r(B
- $B$5$;$?$$>l9g$O!"(B<module>prefork</module> MPM $B$r(B
- $BA*$s$G$/$@$5$$!#B>$N(B MPM $B$O%W%m%;%9$N:n@.$d%j%/%(%9%H$N=hM}$N(B
- $B@)8f$K0[$J$C$?%G%#%l%/%F%#%V$r;H$$$^$9!#(B</li>
-
- <li><a href="mod/mod_proxy.html">Proxy $B%b%8%e!<%k(B</a> $B$O(B
- HTTP/1.1 $B$KBP1~$9$k$?$a$K:F9=@.$5$l$^$7$?!#=EMW$JJQ99E@$H$7$F$O!"(B
- $B%W%m%-%7$N%"%/%;%9@)8f$,(B <code>&lt;Directory proxy:&gt;</code> $B%V%m%C%/$N(B
- $BBe$o$j$K(B <directive module="mod_proxy" type="section">Proxy</directive>
- $B%V%m%C%/$KCV$+$l$k$h$&$K$J$C$?!"$H$$$&$b$N$,$"$j$^$9!#(B</li>
-
- <li>$B%b%8%e!<%k$NCf$K$O!"(B<code>PATH_INFO</code> ($BK\Ev$N%U%!%$%kL>$N8e$KB3$/(B
- $B%Q%9>pJs(B) $B$N07$$$,JQ$o$C$?$b$N$,$"$j$^$9!#0JA0$O%O%s%I%i$H$7$F(B
- $B<BAu$5$l$F$$$?$b$N$,%U%#%k%?$H$7$F<BAu$5$l$k$h$&$K$J$C$?$b$N$O(B
- <code>PATH_INFO</code> $B$N$"$k%j%/%(%9%H$r<u$1IU$1$^$;$s!#(B<a
- href="mod/mod_include.html">INCLUDES</a> $B$d(B
- <a href="http://www.php.net/">PHP</a> $B$J$I$N%U%#%k%?$O(B
- $B%3%"%O%s%I%i$N>e$K<BAu$5$l$F$$$^$9$N$G!"(B<code>PATH_INFO</code>
- $BIU$-$N%j%/%(%9%H$r5qH]$7$^$9!#(B
- <directive module="core">AcceptPathInfo</directive>
- $B%G%#%l%/%F%#%V$r;H$C$F%3%"%O%s%I%i$,(B <code>PATH_INFO</code>
- $BIU$-$N%j%/%(%9%H$r<u$1IU$1$k$h$&$K$G$-!"$=$l$K$h$C$F(B SSI $BEy$G(B
- <code>PATH_INFO</code> $B$r;H$&5!G=$rI|3h$5$;$k$3$H$,$G$-$^$9!#(B</li>
-
- <li><directive module="mod_negotiation">CacheNegotiatedDocs</directive>
- $B%G%#%l%/%F%#%V$O(B <code>on</code> $B$b$7$/$O(B <code>off</code> $B$H$$$&0z?t$r(B
- $B<h$k$h$&$K$J$j$^$7$?!#4{$KB8:_$7$F$$$k(B
- <directive>CacheNegotiatedDocs</directive> $B$O(B
- <code>CacheNegotiatedDocs on</code>
- $B$KCV$-49$($F$/$@$5$$!#(B</li>
-
- <li>
- <directive module="core">ErrorDocument</directive>
- $B%G%#%l%/%F%#%V$O%F%-%9%H%a%C%;!<%8$r(B
- $B<($9$?$a$K0z?t$N:G=i$K;H$o$l$F$$$?0zMQId$r;H$o$J$$$h$&$K$J$j$^$7$?!#(B
- $BBe$o$j$K!"%a%C%;!<%8$rFs=E0zMQId$G0O$`$h$&$K$J$C$F$$$^$9!#(B
- $BNc$($P!"4{B8$N(B
-
- <example>
- ErrorDocument 403 "Some Message
- </example>
- $B$O(B
-
- <example>
- ErrorDocument 403 "Some Message"
- </example>
-
- $B$KCV$-49$($kI,MW$,$"$j$^$9!#(B
- $BFsHVL\$N0z?t$O!"M-8z$J(B URL $B$d%Q%9L>$G$J$$8B$j(B
- $B%F%-%9%H%a%C%;!<%8$H$7$F07$o$l$^$9!#(B
- </li>
-
- <li><code>AccessConfig</code> $B%G%#%l%/%F%#%V$H(B
- <code>ResourceConfig</code> $B%G%#%l%/%F%#%V$O:o=|$5$l$^$7$?!#(B
- $B$3$l$i$N%G%#%l%/%F%#%V$OF1Ey$N5!G=$r;}$D(B
- <directive module="core">Include</directive> $B$G(B
- $BCV$-49$($k$3$H$,$G$-$^$9!#@_Dj%U%!%$%k$K<h$j9~$`Be$o$j$K!"(B
- $B>e$N%G%#%l%/%F%#%V$N%G%U%)%k%HCM$r;H$C$F$$$?>l9g$O!"(B
- <code>httpd.conf</code> $B$K(B <code>Include conf/access.conf</code> $B$H(B
- <code>Include conf/srm.conf</code> $B$rDI2C$9$kI,MW$,$"$k$G$7$g$&!#(B
- $B0JA0$N%G%#%l%/%F%#%V$K$h$k=gHV$N$h$&$K(B Apache $B$,@_Dj%U%!%$%k$r(B
- $BFI$_9~$`$h$&$K$9$k$?$a$K$O!"(B<code>httpd.conf</code> $B$N:G8e$K(B
- <code>srm.conf</code>$B!"(B<code>access.conf</code> $B$N=g$K$=$l$>$l(B
- <directive module="core">Include</directive>
- $B%G%#%l%/%F%#%V$r=q$$$F$/$@$5$$!#(B</li>
-
- <li><code>BindAddress</code> $B%G%#%l%/%F%#%V$H(B <code>Port</code>
- $B%G%#%l%/%F%#%V$O:o=|$5$l$^$7$?!#F1Ey$N5!G=$O$h$j=@Fp$J(B
- <directive module="mpm_common">Listen</directive>
- $B%G%#%l%/%F%#%V$K$h$jDs6!$5$l$F$$$^$9!#(B</li>
-
- <li><code>Port</code> $B%G%#%l%/%F%#%V$O(B Apache-1.3 $B$K$O<+8J;2>H(B URL $B$G(B
- $B;H$o$l$k%]!<%HHV9f$r@_Dj$9$k!"$H$$$&;HMQK!$b$"$j$^$7$?!#(B
- $B$3$l$O(B Apache-2.0 $B$G$O?7$7$$(B
- <directive module="core">ServerName</directive>
- $B9=J8$K$h$C$F9T$J$$$^$9!#0l$D$N%G%#%l%/%F%#%V$G%[%9%HL>(B<em>$B$H(B</em>
- $B<+8J;2>H(B URL $B$NN>J}$r@_Dj$G$-$k$h$&$K9=J8$,JQ99$5$l$^$7$?!#(B</li>
-
- <li><code>ServerName</code> $B%G%#%l%/%F%#%V$O:o=|$5$l$^$7$?!#(B
- $B%j%/%(%9%H$r07$&J}K!$O(B MPM $B$NA*Br$K$h$j7hDj$5$l$k$h$&$K$J$j$^$7$?!#(B
- $B8=;~E@$G$O(B inetd $B$+$i5/F0$5$l$k$h$&$K@_7W$5$l$?(B MPM $B$O$"$j$^$;$s!#(B</li>
-
- <li><code>AgentLog</code> $B%G%#%l%/%F%#%V!"(B
- <code>RefererLog</code> $B%G%#%l%/%F%#%V!"(B
- <code>RefererIgnore</code> $B%G%#%l%/%F%#%V$rDs6!$7$F$$$?(B
- <code>mod_log_agent</code> $B$H(B <code>mod_log_referer</code>
- $B%b%8%e!<%k$O:o=|$5$l$^$7$?!#(B
- Agent $B%m%0$H(B refere $B%m%0$O(B <directive>mod_log_config</directive> $B$N(B
- <directive module="mod_log_config">CustomLog</directive>
- $B%G%#%l%/%F%#%V$K$h$j<B8=2DG=$G$9!#(B</li>
-
- <li><code>AddModule</code> $B%G%#%l%/%F%#%V$H(B <code>ClearModuleList</code>
- $B%G%#%l%/%F%#%V$O:o=|$5$l$^$7$?!#$3$l$i$N%G%#%l%/%F%#%V$O!"(B
- $B%b%8%e!<%k$,@5$7$$=gHV$G8F$P$l$k$h$&$K$9$k$?$a$K;H$o$l$F$$$^$7$?!#(B
- Apache 2.0 $B$N?7(B API $B$O%b%8%e!<%k$,L@<(E*$K=gHV$r;XDj$G$-$k$h$&$K(B
- $B$J$C$F$*$j!"$3$l$i$N%G%#%l%/%F%#%V$OI,MW$J$/$J$j$^$7$?!#(B</li>
-
- <li><code>FancyIndexing</code> $B%G%#%l%/%F%#%V$O:o=|$5$l$^$7$?!#(B
- $BF1$85!G=$O(B <directive module="mod_autoindex">IndexOptions</directive>
- $B%G%#%l%/%F%#%V$N(B <code>FancyIndexing</code> $B%*%W%7%g%s$G(B
- $B<B8=$G$-$^$9!#(B</li>
-
- <li><module>mod_negotiation</module> $B$K$h$k(B MultiViews
- $B%3%s%F%s%H%M%4%7%(!<%7%g%s5;=Q$O!"(B
- $B%G%U%)%k%H$N%U%!%$%k%^%C%A%s%0$,$h$j87L)$J$b$N$KJQ99$5$l$^$7$?!#(B
- <em>$B%M%4%7%(!<%H2DG=$J(B</em>$B%U%!%$%k$N>l9g$K$N$_A*Br$5$l$^$9!#(B
- $B0JA0$N5sF0$O!"(B<directive module="mod_mime">MultiviewsMatch</directive>
- $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$GI|3h$G$-$^$9!#(B</li>
-
- </ul>
- </section>
-
- <section id="misc">
- <title>$B$=$NB>$NJQ99(B</title>
-
- <ul>
- <li>Apache 1.3 $B$G<B83E*$J%b%8%e!<%k$@$C$?(B
- <directive>mod_auth_digest</directive> $B$O(B
- $BI8=`%b%8%e!<%k$K$J$j$^$7$?!#(B</li>
-
- <li>Apache 1.3 $B$G<B83E*$J%b%8%e!<%k$@$C$?(B <code>mod_mmap_static</code> $B$O(B
- <module>mod_file_cache</module> $B$GCV$-49$($i$l$^$7$?!#(B</li>
-
- <li>Apache $B$NG[I[$OFHN)$7$?(B <code>src</code> $B%G%#%l%/%H%j$,(B
- $B$J$/$J$k$h$&$K!"40A4$K:F9=@.$5$l$^$7$?!#$=$NBe$o$j$K!"(B
- $B%=!<%9$O<g%G%#%l%/%H%j$KO@M}E*$KG[CV$5$l$k$h$&$K$J$j!"(B
- $B%3%s%Q%$%k$5$l$?%5!<%P$N%$%s%9%H!<%k$OJL%G%#%l%/%H%j$X(B
- $B9T$J$&$h$&$K$J$j$^$7$?!#(B</li>
- </ul>
- </section>
-
- <section id="third-party">
- <title>$B%5!<%I%Q!<%F%#%b%8%e!<%k(B</title>
-
- <p>Apache 2.0 $B$N%5!<%P(B API $B$K$OB?$/$NJQ99$,2C$($i$l$^$7$?!#(B
- Apache 1.3 $BMQ$N4{B8$N%b%8%e!<%k$O(B Apache 2.0 $B$G$O=$@5$J$7$G$O(B
- $BF0$-(B<strong>$B$^$;$s(B</strong>$B!#>\:Y$O(B <a
- href="developer/">$B3+H/<T8~$1J8=q(B</a> $B$K$"$j$^$9!#(B</p>
- </section>
-
-</manualpage>
diff --git a/docs/manual/upgrading.xml.ko b/docs/manual/upgrading.xml.ko
deleted file mode 100644
index 2ae2429177..0000000000
--- a/docs/manual/upgrading.xml.ko
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.14 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="upgrading.xml.meta">
-
-<title>1.3¿¡¼­ 2.0À¸·Î ¾÷±×·¹À̵å</title>
-
-<summary>
- <p>¿ì¸®´Â ±âÁ¸ ¾ÆÆÄÄ¡ »ç¿ëÀÚ°¡ ¾÷±×·¹À̵åÇÏ´Â °ÍÀ» µ½±âÀ§ÇØ
- Áß¿äÇÑ Á¤º¸¸¦ ¾Ë·ÁÁÖ´Â ¹®¼­¸¦ Á¦°øÇÑ´Ù. ÀÌ ¹®¼­´Â °£´ÜÇÑ
- ¿ä¾àÀ̹ǷÎ, <a href="new_features_2_0.html">»õ·Î¿î ±â´É</a>
- ¹®¼­³ª <code>src/CHANGES</code> ÆÄÀÏ¿¡¼­ Á¤º¸¸¦ ã¾ÆºÁ¾ß
- ÇÑ´Ù.</p>
-</summary>
-<seealso><a href="new_features_2_0.html">¾ÆÆÄÄ¡ 2.0ÀÇ »õ·Î¿î
-±â´É ¿ä¾à</a></seealso>
-
- <section id="compile-time">
- <title>ÄÄÆÄÀϽà ±¸¼º º¯È­</title>
-
- <ul>
- <li>¾ÆÆÄÄ¡´Â ÀÌÁ¦ <a
- href="install.html">¾ÆÆÄÄ¡ ÄÄÆÄÀÏ°ú ¼³Ä¡</a>¸¦ À§ÇØ
- <code>autoconf</code>¿Í <code>libtool</code> ½Ã½ºÅÛÀ»
- »ç¿ëÇÑ´Ù. ÀÌ ½Ã½ºÅÛÀÇ »ç¿ë¹ýÀº Apache 1.3ÀÇ APACI ½Ã½ºÅÛ°ú
- °°Áö´Â ¾ÊÁö¸¸ ºñ½ÁÇÏ´Ù.</li>
-
- <li>ÄÄÆÄÀÏ ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¸ðµâ¿Ü¿¡ Apache 2.0Àº ¿äûÀ»
- ó¸®ÇÏ´Â ÁÖ¿ä ºÎºÐÀ» <a href="mpm.html">´ÙÁßó¸® ¸ðµâ
- (Multi-Processing Modules)</a> (MPM)·Î ¿Å°å´Ù.</li>
- </ul>
- </section>
-
- <section id="run-time">
- <title>½ÇÇà½Ã ¼³Á¤ º¯È­</title>
-
- <ul>
- <li>Apache 1.3¿¡¼­ ¼­¹ö Çٽɿ¡ ÀÖ¾ú´ø ¸¹Àº Áö½Ã¾îµéÀÌ
- ÀÌÁ¦´Â MPM¿¡ ÀÖ´Ù. ¼­¹ö°¡ Apache 1.3°ú ÃÖ´ëÇÑ ºñ½ÁÇÏ°Ô
- µ¿ÀÛÇÏ±æ ¹Ù¶õ´Ù¸é <module>prefork</module> MPMÀ» ¼±ÅÃÇؾß
- ÇÑ´Ù. ´Ù¸¥ MPMÀº ´Ù¸¥ Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º »ý¼º°ú
- ¿äûÀÇ Ã³¸®¸¦ Á¶ÀýÇÑ´Ù.</li>
-
- <li><a href="mod/mod_proxy.html">proxy ¸ðµâ</a>Àº HTTP/1.1¿¡
- ¸ÂÃß¾î ¼öÁ¤µÇ¾ú´Ù. Áß¿äÇÑ º¯È­Áß Çϳª´Â ÀÌÁ¦ ÇÁ·Ï½Ã Á¢±ÙÁ¦¾î°¡
- <code>&lt;Directory proxy:&gt;</code> ºí·ÏÀÌ ¾Æ´Ï¶ó
- <directive type="section" module="mod_proxy">Proxy</directive>
- ºí·Ï¿¡ À§Ä¡ÇÏ´Â Á¡ÀÌ´Ù.</li>
-
- <li>¸î¸î ¸ðµâ¿¡¼­ <code>PATH_INFO</code> (ÁøÂ¥ °æ·Î¸í
- µÚ¿¡ ³ª¿À´Â °æ·Î Á¤º¸) ó¸® ¹æ½ÄÀÌ º¯°æµÇ¾ú´Ù. Àü¿¡
- Çڵ鷯¿´Áö¸¸ ÀÌÁ¦ ÇÊÅÍ·Î ±¸ÇöµÇ´Â ¸ðµâÀº ´õ ÀÌ»ó
- <code>PATH_INFO</code>°¡ ÀÖ´Â ¿äûÀ» ¹Þ¾ÆµéÀÌÁö ¸øÇÑ´Ù.
- <a href="mod/mod_include.html">INCLUDES</a>³ª <a
- href="http://www.php.net/">PHP</a>¿Í °°Àº ÇÊÅÍ´Â
- core Çڵ鷯 À§¿¡ ±¸ÇöµÇ±â¶§¹®¿¡ <code>PATH_INFO</code>°¡
- ÀÖ´Â ¿äûÀ» °ÅºÎÇÑ´Ù. core Çڵ鷯°¡ <code>PATH_INFO</code>°¡
- ÀÖ´Â ¿äûÀ» ¹Þ¾ÆµéÀÌ°í server-side include¿¡¼­
- <code>PATH_INFO</code>¸¦ »ç¿ëÇÏ°Ô ÇÏ·Á¸é, <directive
- module="core">AcceptPathInfo</directive> Áö½Ã¾î¸¦ »ç¿ëÇؾß
- ÇÑ´Ù.</li>
-
- <li><directive module="mod_negotiation">CacheNegotiatedDocs</directive>
- Áö½Ã¾î´Â ÀÌÁ¦ ¾Æ±Ô¸ÕÆ®·Î <code>on</code>°ú <code>off</code>¸¦
- ¹Þ´Â´Ù. ±âÁ¸ÀÇ <directive>CacheNegotiatedDocs</directive>´Â
- <code>CacheNegotiatedDocs on</code>À¸·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù.</li>
-
- <li>
- <directive module="core">ErrorDocument</directive> Áö½Ã¾î´Â
- ´õÀÌ»ó ¸Þ¼¼Áö¸¦ ³ªÅ¸³»´Â ¾Æ±Ô¸ÕÆ® ¾Õ¿¡ µû¿ÈÇ¥¸¦ »ç¿ëÇÏÁö
- ¾Ê´Â´Ù. ´ë½Å ½Öµû¿ÈÇ¥·Î ¸Þ¼¼Áö¸¦ ¹­¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î °ú°Å
-
- <example>
- ErrorDocument 403 "Some Message
- </example>
- ´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
-
- <example>
- ErrorDocument 403 "Some Message"
- </example>
- µÎ¹ø° ¾Æ±Ô¸ÕÆ®°¡ À¯È¿ÇÑ URLÀ̳ª °æ·Î¸íÀÌ ¾Æ´Ï¶ó¸é ¸Þ¼¼Áö·Î
- °£ÁÖÇÑ´Ù.
- </li>
-
- <li><code>AccessConfig</code>¿Í <code>ResourceConfig</code>
- Áö½Ã¾î´Â »ç¶óÁ³´Ù. ±âÁ¸¿¡ »ç¿ëÇÏ´ø Áö½Ã¾î´Â °°Àº ±â´ÉÀ»
- ÇÏ´Â <directive module="core">Include</directive> Áö½Ã¾î·Î
- ´ëüÇÒ ¼ö ÀÖ´Ù. °ú°Å¿¡ ¼³Á¤ÆÄÀÏ¿¡¼­ ÀÌ Áö½Ã¾îµéÀ» »ç¿ëÇÏÁö¾Ê°í
- ÀÌ Áö½Ã¾îµéÀÇ ±âº»°ªÀ» »ç¿ëÇß´Ù¸é, <code>http.conf</code>¿¡
- <code>Include conf/access.conf</code>¿Í <code>Include
- conf/srm.conf</code>¸¦ Ãß°¡ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡°¡ ÀÌÀü
- Áö½Ã¾î¿Í °°Àº ¼ø¼­·Î ¼³Á¤ÆÄÀÏÀ» ÀаÔÇÏ·Á¸é
- <directive module="core">Include</directive> Áö½Ã¾î¸¦
- <code>httpd.conf</code> ³¡¿¡ µÎ°í, <code>srm.conf</code>ÀÌ
- <code>access.conf</code> ¾Õ¿¡ ³ª¿Í¾ß ÇÑ´Ù.</li>
-
- <li><code>BindAddress</code>¿Í <code>Port</code> Áö½Ã¾î´Â
- »ç¶óÁ³´Ù. ´õ À¯¿¬ÇÑ <directive module="mpm_common">Listen</directive>
- Áö½Ã¾î°¡ °°Àº ±â´ÉÀ» ÇÑ´Ù.</li>
-
- <li>Apache-1.3¿¡¼­ <code>Port</code>´Â ÀÚ±âÂüÁ¶
- URLÀÇ Æ÷Æ® ¹øÈ£¸¦ ¼³Á¤ÇÏ´Â Àϵµ Çß´Ù. Apache-2.0¿¡¼­ ÀÌ
- ±â´ÉÀº »õ·Î¿î <directive module="core">ServerName</directive>À¸·Î
- ÇÑ´Ù. ÇÑ Áö½Ã¾î¿¡ È£½ºÆ®¸í<em>°ú</em> ÀÚ±âÂüÁ¶ URLÀ» À§ÇÑ
- Æ÷Æ® ¹øÈ£¸¦ °°ÀÌ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.</li>
-
- <li><code>ServerType</code> Áö½Ã¾î´Â »ç¶óÁ³´Ù. ¿äûÀ»
- ¼­ºñ½ºÇÏ´Â ¹æ¹ýÀº ÀÌÁ¦ MPM ¼±Åÿ¡ ´Þ·È´Ù. ÇöÀç inetd¿¡¼­
- ½ÃÀÛÇϵµ·Ï ¼³°èµÈ MPMÀº ¾ø´Ù.</li>
-
- <li><code>AgentLog</code>, <code>RefererLog</code>,
- <code>RefererIgnore</code> Áö½Ã¾î¸¦ Á¦°øÇÑ
- <code>mod_log_agent</code>¿Í <code>mod_log_referer</code>
- ¸ðµâÀÌ ¾ø¾îÁ³´Ù. agent ·Î±×¿Í referer ·Î±×´Â
- <module>mod_log_config</module>ÀÇ <directive
- module="mod_log_config">CustomLog</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© °è¼Ó Á¦°øµÈ´Ù.</li>
-
- <li><code>AddModule</code>°ú <code>ClearModuleList</code>
- Áö½Ã¾î´Â »ç¶óÁ³´Ù. ÀÌ Áö½Ã¾îµéÀº ¸ðµâÀ» ¿Ã¹Ù¸¥ ¼ø¼­·Î
- È°¼ºÈ­ÇÏ·Á°í »ç¿ëÇß´Ù. »õ·Î¿î Apache 2.0 API´Â ¸ðµâÀÌ
- È°¼ºÈ­µÇ´Â ¼ø¼­¸¦ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÒ ¼ö À־, ÀÌ Áö½Ã¾îµéÀÌ
- ÇÊ¿ä¾ø°Ô µÇ¾ú´Ù.</li>
-
- <li><code>FancyIndexing</code> Áö½Ã¾î°¡ ¾ø¾îÁ³´Ù.
- <directive module="mod_autoindex">IndexOptions</directive>
- Áö½Ã¾îÀÇ <code>FancyIndexing</code> ¿É¼ÇÀÌ °°Àº ±â´ÉÀ» ÇÑ´Ù.</li>
-
- <li><module>mod_negotiation</module>ÀÇ MultiViews ³»¿ëÇù»óÀÌ
- ´õ ¾ö°ÝÇÏ°Ô ±âº»ÆÄÀÏÀ» ã´Â´Ù. ³»¿ëÇù»óÀº <em>Çù»ó°¡´ÉÇÑ</em>
- ÆÄÀÏ Áß¿¡¼­¸¸ ¼±ÅÃÇÑ´Ù. <directive
- module="mod_mime">MultiviewsMatch</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© ÀÌÀü°ú °°ÀÌ µ¿ÀÛÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.</li>
-
- </ul>
- </section>
-
- <section id="misc">
- <title>±âŸ º¯È­</title>
-
- <ul>
- <li>Apache 1.3¿¡¼­ ½ÇÇèÀûÀÌ¿´´ø <module>mod_auth_digest</module>
- ¸ðµâÀÌ ÀÌÁ¦ Ç¥ÁØ ¸ðµâÀÌ µÇ¾ú´Ù.</li>
-
- <li>Apache 1.3¿¡¼­ ½ÇÇèÀûÀÌ¿´´ø <code>mod_mmap_static</code>
- ¸ðµâÀÌ <module>mod_file_cache</module>·Î ´ëüµÇ¾ú´Ù.</li>
-
- <li>¹èÆ÷º»ÀÌ ¿ÏÀüÈ÷ »õ·Î ±¸¼ºµÇ¾î ´õÀÌ»ó µ¶¸³µÈ <code>src</code>
- µð·ºÅ丮°¡ ¾ø´Ù. ´ë½Å ¼Ò½º´Â ÁÖ ¹èÆ÷º» µð·ºÅ丮 ¾Æ·¡ ³í¸®ÀûÀ¸·Î
- ±¸¼ºµÇÀÖ°í, ÄÄÆÄÀÏÇÑ ¼­¹ö´Â ´Ù¸¥ µð·ºÅ丮·Î ¼³Ä¡µÈ´Ù.</li>
- </ul>
- </section>
-
- <section id="third-party">
- <title>Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâ</title>
-
- <p>Apache 2.0¿¡¼­ ¼­¹ö API°¡ ¸¹ÀÌ º¯°æµÇ¾ú´Ù. Apache 1.3 API¿¡
- ¸ÂÃçÁø ±âÁ¸ ¸ðµâÀ» ¼öÁ¤¾øÀÌ Apache 2.0¿¡¼­ »ç¿ëÇÒ ¼ö
- <strong>¾ø´Ù</strong>. ÀÚ¼¼ÇÑ Á¤º¸´Â <a href="developer/">°³¹ßÀÚ
- ¹®¼­</a>¸¦ Âü°íÇ϶ó.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/upgrading.xml.meta b/docs/manual/upgrading.xml.meta
deleted file mode 100644
index c34553c5a3..0000000000
--- a/docs/manual/upgrading.xml.meta
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>upgrading</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant htmlonly="yes">fr</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- <variant outdated="yes">ru</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/upgrading.xml.ru b/docs/manual/upgrading.xml.ru
deleted file mode 100644
index f6b1539c25..0000000000
--- a/docs/manual/upgrading.xml.ru
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version='1.0' encoding='KOI8-R' ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ru.xsl"?>
-<!-- English Revision: 1.4 (outdated: 1.14) -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!--***************************************************-->
-<!-- Translator: Ilia Soldis (rkai@tversu.ru) -->
-<!-- Reviewers: -->
-<!-- Ivan Shvedov (ivan@tversu.ru) -->
-<!-- Arthur Reznikov (art@altair.tversu.ru)-->
-<!--***************************************************-->
-
-<manualpage metafile="upgrading.xml.meta">
-
-<title>ðÅÒÅÈÏÄ ÏÔ ×ÅÒÓÉÉ 1.3 Ë ×ÅÒÓÉÉ 2.0</title>
-
-<summary>
- <p>üÔÏÔ ÄÏËÕÍÅÎÔ ÎÅÏÂÈÏÄÉÍ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÏÍÏÞØ ÐÏÌØÚÏ×ÁÔÅÌÑÍ
- ÐÅÒÅÊÔÉ Ë ÉÓÐÏÌØÚÏ×ÁÎÉÀ ÓÅÒ×ÅÒÁ ×ÅÒÓÉÉ 2.0. úÄÅÓØ ×Ù ÎÁÊÄÅÔÅ ÌÉÛØ
- ËÒÁÔËÉÅ ÚÁÍÅÞÁÎÉÑ; ÂÏÌÅÅ ÐÏÄÒÏÂÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÎÏ×Ï××ÅÄÅÎÉÑÈ ÍÏÖÎÏ
- ÎÁÊÔÉ ÌÉÂÏ × ÄÏËÕÍÅÎÔÅ <a href="new_features_2_0.html"
- >îÏ×ÙÅ ×ÏÚÍÏÖÎÏÓÔÉ</a>, ÌÉÂÏ × ÆÁÊÌÅ <code>src/CHANGES</code>.</p>
-</summary>
-
- <section id="compile-time">
- <title>éÚÍÅÎÅÎÉÑ × ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÉ ÓÂÏÒËÉ ÓÅÒ×ÅÒÁ</title>
-
- <ul>
- <li>Apache ÔÅÐÅÒØ ÉÓÐÏÌØÚÕÅÔ ÓÉÓÔÅÍÕ <code>autoconf</code> É
- <code>libtool</code> ÄÌÑ <a
- href="install.html">ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÑ ÐÒÏÃÅÓÓÁ ÓÂÏÒËÉ</a>.
- éÓÐÏÌØÚÏ×ÁÎÉÅ ÜÔÏÊ ÓÉÓÔÅÍÙ ÐÏÈÏÖÅ ÎÁ ÉÓÐÏÌØÚÏ×ÁÎÉÅ
- APACI × Apache 1.3, ÈÏÔÑ É ÎÅ Ñ×ÌÑÅÔÓÑ ÁÂÓÏÌÀÔÎÏ ÔÅÍ ÖÅ ÓÁÍÙÍ.</li>
-
- <li>÷ ÄÏÂÁ×ÏË Ë ÏÂÙÞÎÏÍÕ ÓÐÉÓËÕ ÍÏÄÕÌÅÊ, ËÏÔÏÒÙÅ ×Ù ÍÏÖÅÔÅ
- ×ÙÂÒÁÔØ ÐÒÉ ÓÂÏÒËÅ ÓÅÒ×ÅÒÁ, × Apache 2.0 ÐÏÑ×ÉÌÉÓØ <a href="mpm.html"
- >ÍÕÌØÔÉ - ÐÒÏÃÅÓÓÎÙÅ ÍÏÄÕÌÉ</a> (íð - ÍÏÄÕÌÉ), × ËÏÔÏÒÙÈ ÔÅÐÅÒØ
- ÓËÏÎÃÅÎÔÒÉÒÏ×ÁÎÁ ÏÓÎÏ×ÎÁÑ ÞÁÓÔØ ËÏÄÁ, ÏÔ×ÅÞÁÀÝÅÇÏ ÚÁ ÏÂÒÁÂÏÔËÕ
- ÚÁÐÒÏÓÏ×.</li>
- </ul>
- </section>
-
- <section id="run-time">
- <title>éÚÍÅÎÅÎÉÑ × ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÉ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ</title>
-
- <ul>
- <li>íÎÏÇÉÅ ÉÚ ÔÅÈ ÄÉÒÅËÔÉ×, ËÏÔÏÒÙÅ ÏÂÓÌÕÖÉ×ÁÌÉÓØ ÑÄÒÏÍ ÓÅÒ×ÅÒÁ
- Apache 1.3, ÔÅÐÅÒØ ÐÅÒÅÎÅÓÅÎÙ × ÍÕÌØÔÉ - ÐÒÏÃÅÓÓÎÙÅ ÍÏÄÕÌÉ. åÓÌÉ ×Ù
- ÈÏÔÉÔÅ, ÞÔÏÂÙ ÐÏ×ÅÄÅÎÉÅ ÓÅÒ×ÅÒÁ ÂÙÌÏ ÎÁÉÂÏÌÅÅ ÐÒÉÂÌÉÖÅÎÏ Ë ÐÏ×ÅÄÅÎÉÀ
- Apache 1.3, ÔÏ ÐÒÉ ÓÂÏÒËÅ ×Ù ÄÏÌÖÎÙ ×ÙÂÒÁÔØ íð-ÍÏÄÕÌØ <a
- href="mod/prefork.html">prefork</a>. äÒÕÇÉÅ íð-ÍÏÄÕÌÉ ÐÒÅÄÏÓÔÁ×ÌÑÀÔ
- ÉÎÙÅ ÄÉÒÅËÔÉ×Ù, ÏÔ×ÅÞÁÀÝÉÅ ÚÁ ÒÁÂÏÔÕ ÐÒÏÃÅÓÓÏ× ÓÅÒ×ÅÒÁ É ÏÂÒÁÂÏÔËÕ
- ÚÁÐÒÏÓÏ×.</li>
-
- <li><a href="mod/mod_proxy.html">ðÒÏËÓÉ ÍÏÄÕÌØ</a> ÂÙÌ ÐÅÒÅÐÉÓÁÎ,
- É ÔÅÐÅÒØ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÓÐÅÃÉÆÉËÁÃÉÀ HTTP/1.1. ïÄÎÉÍ ÉÚ ÎÁÉÂÏÌÅÅ
- ×ÁÖÎÙÈ ÉÚÍÅÎÅÎÉÊ Ñ×ÌÑÅÔÓÑ ÔÏ, ÞÔÏ ÄÉÒÅËÔÉ×Ù, ËÏÎÔÒÏÌÉÒÕÀÝÉÅ ÒÁÂÏÔÕ
- ÍÏÄÕÌÑ, ÔÅÐÅÒØ ÒÁÓÐÏÌÁÇÁÀÔÓÑ × ÓÅËÃÉÉ &lt;Proxy&gt;, Á ÎÅ ×
- &lt;Directory proxy:&gt;, ËÁË ÜÔÏ ÂÙÌÏ ÒÁÎÅÅ.</li>
-
- <li>ïÂÒÁÂÏÔËÁ PATH_INFO (ÐÕÔÅ×ÏÊ ÉÎÆÏÒÍÁÃÉÉ, ÓÌÅÄÕÀÝÅÊ ÚÁ
- ÉÍÅÎÅÍ ÚÁÐÒÁÛÉ×ÁÅÍÏÇÏ ÄÏËÕÍÅÎÔÁ) ÉÚÍÅÎÉÌÁÓØ ÄÌÑ ÎÅËÏÔÏÒÙÈ ÍÏÄÕÌÅÊ.
- íÏÄÕÌÉ, ËÏÔÏÒÙÅ ÒÁÎØÛÅ ÂÙÌÉ ÎÁÐÉÓÁÎÙ ËÁË ÏÂÒÁÂÏÔÞÉËÉ (handler), Á
- ÔÅÐÅÒØ ×ÙÐÏÌÎÑÀÔ ÒÏÌØ ÆÉÌØÔÒÏ×, ÍÏÇÕÔ ÂÏÌÅÅ ÎÅ ÐÒÉÎÉÍÁÔØ ÚÁÐÒÏÓÙ,
- ÓÏÄÅÒÖÁÝÉÅ PATH_INFO. ôÁËÉÅ ÆÉÌØÔÒÙ, ËÁË <a
- href="mod/mod_include.html">INCLUDES</a> ÒÅÁÌÉÚÏ×ÁÎÙ ÐÅÒ×ÙÍÉ × ÂÁÚÏ×ÏÍ
- ÏÂÒÁÂÏÔÞÉËÅ, ÔÁËÉÍ ÏÂÒÁÚÏÍ ÏÎÉ ÎÅ ÍÏÇÕÔ ÐÒÉÎÉÍÁÔØ ÚÁÐÒÏÓÙ, ÓÏÄÅÒÖÁÝÉÅ
- PATH_INFO. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÉÒÅËÔÉ×Õ <directive
- module="core">AcceptPathInfo</directive>, ÞÔÏÂÙ ÚÁÓÔÁ×ÉÔØ ÂÁÚÏ×ÙÊ
- ÏÂÒÁÂÏÔÞÉË ÐÒÉÎÉÍÁÔØ ÐÏÄÏÂÎÙÅ ÚÁÐÒÏÓÙ, É ÔÁËÉÍ ÏÂÒÁÚÏÍ ×ÏÓÓÔÁÎÏ×ÉÔØ
- ×ÏÚÍÏÖÎÏÓÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ PATH_INFO × ÄÏËÕÍÅÎÔÁÈ, ÉÓÐÏÌØÚÕÀÝÉÈ ×ËÌÀÞÅÎÉÑ
- ÎÁ ÓÔÏÒÏÎÅ ÓÅÒ×ÅÒÁ (SSI).</li>
-
- <li>äÉÒÅËÔÉ×Á <directive
- module="mod_negotiation">CacheNegotiatedDocs</directive>
- ÔÅÐÅÒØ ÍÏÖÅÔ ÐÒÉÎÉÍÁÔØ ÁÒÇÕÍÅÎÔÙ <code>on</code> É
- <code>off</code>. õÖÅ ÓÕÝÅÓÔ×ÕÀÝÉÅ ÜËÚÅÍÐÌÑÒÙ ÄÉÒÅËÔÉ×Ù
- <code>CacheNegotiatedDocs</code> ÄÏÌÖÎÙ ÂÙÔØ ÚÁÍÅÎÅÎÙ ÎÁ
- <code>CacheNegotiatedDocs on</code>.</li>
-
- <li>
- äÉÒÅËÔÉ×Á <directive module="core">ErrorDocument</directive>
- ÂÏÌÅÅ ÎÅ ÉÓÐÏÌØÚÕÅÔ ÏÔËÒÙ×ÁÀÝÕÀ ËÁ×ÙÞËÕ × ÎÁÞÁÌÅ ÁÒÇÕÍÅÎÔÁ
- ÄÌÑ ÏÂÏÚÎÁÞÅÎÉÑ ÔÏÇÏ, ÞÔÏ ÁÒÇÕÍÅÎÔ Ñ×ÌÑÅÔÓÑ ÔÅËÓÔÏ×ÙÍ ÓÏÏÂÝÅÎÉÅÍ.
- ÷ÍÅÓÔÏ ÜÔÏÇÏ ×ÁÍ ÎÅÏÂÈÏÄÉÍÏ ÚÁËÌÀÞÁÔØ ×ÅÓØ ÔÅËÓÔ ÓÏÏÂÝÅÎÉÑ
- × Ä×ÏÊÎÙÅ ËÁ×ÙÞËÉ. îÁÐÒÉÍÅÒ, ÓÕÝÅÓÔ×ÕÀÝÉÅ ÄÉÒÅËÔÉ×Ù
-
- <example>
- ErrorDocument 403 "îÅËÏÔÏÒÏÅ ÓÏÏÂÝÅÎÉÅ
- </example>
- ÄÏÌÖÎÙ ÂÙÔØ ÚÁÍÅÎÅÎÙ ÎÁ
-
- <example>
- ErrorDocument 403 "îÅËÏÔÏÒÏÅ ÓÏÏÂÝÅÎÉÅ"
- </example>
- åÓÌÉ ×ÔÏÒÏÊ ÁÒÇÕÍÅÎÔ ÎÅ Ñ×ÌÑÅÔÓÑ ÐÒÁ×ÉÌØÎÏ ÏÆÏÒÍÌÅÎÎÙÍ
- ÉÄÅÎÔÉÆÉËÁÔÏÒÏÍ ÒÅÓÕÒÓÁ (URL) ÉÌÉ ÐÕÔÅ×ÙÍ ÉÍÅÎÅÍ, ÔÏ ÏÎ
- ÂÕÄÅÔ ÉÎÔÅÒÐÒÅÔÉÒÏ×ÁÔØÓÑ ËÁË ÔÅËÓÔÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ.
- </li>
-
- <li>äÉÒÅËÔÉ×Ù <code>AccessConfig</code> É
- <code>ResourceConfig</code> ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÀÔ.
- éÍÅÀÝÉÅÓÑ ÉÈ ËÏÐÉÉ ÍÏÇÕÔ ÂÙÔØ ÚÁÍÅÎÅÎÙ ÄÉÒÅËÔÉ×ÏÊ
- <directive module="core">Include</directive>, ËÏÔÏÒÁÑ ÉÍÅÅÔ
- ÔÕ ÖÅ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ. åÓÌÉ ÐÒÅÖÄÅ ×Ù ÎÅ ×ËÌÀÞÁÌÉ ÉÈ × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ
- ÆÁÊÌÙ, ÔÅÍ ÓÁÍÙÍ ÉÓÐÏÌØÚÕÑ ÉÈ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÔÏ ÓÅÊÞÁÓ,
- ÄÌÑ ÄÏÓÔÉÖÅÎÉÑ ÔÏÇÏ ÖÅ ÒÅÚÕÌØÔÁÔÁ, ×ÁÍ ÎÁÄÏ
- ÄÏÂÁ×ÉÔØ ÓÌÅÄÕÀÝÉÅ ÓÔÒÏËÉ × ÆÁÊÌ httpd.conf: <code
- >Include conf/access.conf</code> É <code>Include
- conf/srm.conf</code>. äÌÑ ÔÏÇÏ ÞÔÏÂÙ ÂÙÔØ Õ×ÅÒÅÎÎÙÍ × ÔÏÍ, ÞÔÏ
- Apache ÓÞÉÔÙ×ÁÅÔ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ ÆÁÊÌÙ ÉÍÅÎÎÏ × ÔÏÍ ÐÏÒÑÄËÅ,
- ËÏÔÏÒÙÊ ÂÙÌ ÐÒÅÄÕÓÍÏÔÒÅÎ ÓÔÁÒÙÍÉ ÄÉÒÅËÔÉ×ÁÍÉ, ÎÁÄÏ ÐÏÍÅÓÔÉÔØ
- ÄÉÒÅËÔÉ×Ù <code>Include</code> × ËÏÎÃÅ ÆÁÊÌÁ httpd.conf, ÐÒÉÞÅÍ
- ÓÐÅÒ×Á ÔÕ, ÞÔÏ ×ËÌÀÞÁÅÔ <code>srm.conf</code>, Á ÚÁÔÅÍ ÔÕ, ÞÔÏ
- ×ËÌÀÞÁÅÔ <code>access.conf</code>.</li>
-
- <li>äÉÒÅËÔÉ×Ù <code>BindAddress</code> É <code>Port</code>
- ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÀÔ. üË×É×ÁÌÅÎÔÎÁÑ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ ÐÒÅÄÏÓÔÁ×ÌÑÅÔÓÑ
- ÂÏÌÅÅ ÇÉÂËÏÊ ÄÉÒÅËÔÉ×ÏÊ <directive module="mpm_common">Listen</directive>.
- </li>
-
- <li>÷ Apache 1.3 ÄÉÒÅËÔÉ×Á <code>Port</code>
- ÉÓÐÏÌØÚÏ×ÁÌÁÓØ, ËÒÏÍÅ ×ÓÅÇÏ ÐÒÏÞÅÇÏ, ÄÌÑ ÔÏÇÏ ÞÔÏÂÙ ÓÅÒ×ÅÒ
- ÍÏÇ ÆÏÒÍÉÒÏ×ÁÔØ ÐÒÁ×ÉÌØÎÙÅ ÓÓÙÌËÉ ÎÁ ÓÁÍÏÇÏ ÓÅÂÑ. ÷ Apache 2.0 ÄÌÑ
- ÔÅÈ ÖÅ ÃÅÌÅÊ ÓÌÕÖÉÔ ÎÏ×ÙÊ ÓÉÎÔÁËÓÉÓ ÄÉÒÅËÔÉ×Ù <directive module="core"
- >ServerName</directive>: ÏÎ ÂÙÌ ÉÚÍÅÎÅÎ ÔÁËÉÍ ÏÂÒÁÚÏÍ, ÞÔÏ ÔÅÐÅÒØ
- ÉÍÑ ÈÏÓÔÁ <em>É</em> ÎÏÍÅÒ ÐÏÒÔÁ ÍÏÖÎÏ ÕËÁÚÙ×ÁÔØ × ÏÄÎÏÊ ÜÔÏÊ ÄÉÒÅËÔÉ×Å.</li>
-
- <li>äÉÒÅËÔÉ×Á <code>ServerType</code> ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ.
- íÅÔÏÄ ÏÂÒÁÂÏÔËÉ ÚÁÐÒÏÓÏ× ÔÅÐÅÒØ ÏÐÒÅÄÅÌÑÅÔÓÑ ÐÏÓÒÅÄÓÔ×ÏÍ
- ×ÙÂÏÒÁ íð-ÍÏÄÕÌÑ. ÷ ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ ÎÅÔ ÔÁËÏÇÏ íð-ÍÏÄÕÌÑ,
- ËÏÔÏÒÙÊ ÍÏÇ ÂÙ ÚÁÐÕÓËÁÔØÓÑ ÐÏÓÒÅÄÓÔ×ÏÍ ÄÅÍÏÎÁ inetd.</li>
-
- <li>íÏÄÕÌÉ mod_log_agent É mod_log_referer, ËÏÔÏÒÙÅ ÐÒÅÄÏÓÔÁ×ÌÑÌÉ
- ÔÁËÉÅ ÄÉÒÅËÔÉ×Ù, ËÁË <code>AgentLog</code>, <code>RefererLog</code>
- É <code>RefererIgnore</code>, ÂÙÌÉ ÕÂÒÁÎÙ. ÷ÅÄÅÎÉÅ ÖÕÒÎÁÌÁ ÁÇÅÎÔÏ×
- ÐÏÌØÚÏ×ÁÔÅÌÅÊ (agent logs) É ÏÔÐÒÁ×ÉÔÅÌÅÊ (referer logs) ÐÏ-ÐÒÅÖÎÅÍÕ
- ×ÏÚÍÏÖÎÏ ÐÏÓÒÅÄÓÔ×ÏÍ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÄÉÒÅËÔÉ×Ù <directive
- module="mod_log_config">CustomLog</directive> ÍÏÄÕÌÑ <module>mod_log_config</module>.</li>
-
- <li>äÉÒÅËÔÉ×Ù <code>AddModule</code> É
- <code>ClearModuleList</code> ÂÏÌÅÅ ÎÅ ÓÕÝÅÓÔ×ÕÀÔ. ïÎÉ ÉÓÐÏÌØÚÏ×ÁÌÉÓØ
- ÄÌÑ ÏÂÅÓÐÅÞÅÎÉÑ ÐÒÁ×ÉÌØÎÏÇÏ ÐÏÒÑÄËÁ ÚÁÇÒÕÚËÉ ÍÏÄÕÌÅÊ. îÏ×ÙÊ API ÄÌÑ
- Apache 2.0 ÐÏÚ×ÏÌÑÅÔ ÍÏÄÕÌÑÍ ÓÁÍÉÍ ÕËÁÚÙ×ÁÔØ ÐÏÒÑÄÏË ÉÈ ÚÁÇÒÕÚËÉ, ÞÔÏ
- ÄÅÌÁÅÔ ÜÔÉ ÄÉÒÅËÔÉ×Ù ÎÅÎÕÖÎÙÍÉ.</li>
-
- <li>äÉÒÅËÔÉ×Á <code>FancyIndexing</code> ÂÙÌÁ ÕÂÒÁÎÁ. åÅ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ
- ÔÅÐÅÒØ ÏÂÅÓÐÅÞÉ×ÁÅÔÓÑ ÏÐÃÉÅÊ <code>FancyIndexing</code> × ÄÉÒÅËÔÉ×Å <directive
- module="mod_autoindex">IndexOptions</directive></li>
- </ul>
- </section>
-
- <section id="misc">
- <title>äÒÕÇÉÅ ÉÚÍÅÎÅÎÉÑ</title>
-
- <ul>
- <li>ïÐÃÉÑ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ <code>httpd</code> <code> -S</code>,
- ÐÏÚ×ÏÌÑ×ÛÁÑ ÒÁÓÐÅÞÁÔÙ×ÁÔØ ËÏÎÆÉÇÕÒÁÃÉÀ ×ÉÒÔÕÁÌØÎÙÈ ÈÏÓÔÏ×, ÔÅÐÅÒØ ÚÁÍÅÎÅÎÁ
- ÏÐÃÉÅÊ <code>-t -D DUMP_VHOSTS</code>.</li>
-
- <li>íÏÄÕÌØ <module>mod_auth_digest</module>, ËÏÔÏÒÙÊ ÉÍÅÌ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ ÓÔÁÔÕÓ ×
- Apache 1.3, ÔÅÐÅÒØ Ñ×ÌÑÅÔÓÑ ÓÔÁÎÄÁÒÔÎÙÍ ÍÏÄÕÌÅÍ.</li>
-
- <li>íÏÄÕÌØ <code>mod_mmap_static</code>, ËÏÔÏÒÙÊ ÉÍÅÌ ÜËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ ÓÔÁÔÕÓ ×
- Apache 1.3, ÚÁÍÅÎÅÎ ÍÏÄÕÌÅÍ <module>mod_file_cache</module>.</li>
-
- <li>ïÒÇÁÎÉÚÁÃÉÑ ÄÉÓÔÒÉÂÕÔÉ×Á ÐÏÌÎÏÓÔØÀ ÉÚÍÅÎÅÎÁ É ÔÅÐÅÒØ
- ÂÏÌÅÅ ÎÅ ÓÏÄÅÒÖÉÔ ÎÅÚÁ×ÉÓÉÍÏÇÏ ËÁÔÁÌÏÇÁ <code>src</code>. ÷ÍÅÓÔÏ ÜÔÏÇÏ
- ÉÓÈÏÄÎÙÅ ËÏÄÙ ÌÏÇÉÞÅÓËÉ ÏÒÇÁÎÉÚÏ×ÁÎÙ × ÏÓÎÏ×ÎÏÍ ËÁÔÁÌÏÇÅ ÄÉÓÔÒÉÂÕÔÉ×Á, Á
- ÕÓÔÁÎÏ×ËÁ ÓËÏÍÐÉÌÉÒÏ×ÁÎÎÏÇÏ ÓÅÒ×ÅÒÁ ÐÒÏÉÚ×ÏÄÉÔÓÑ × ÏÔÄÅÌØÎÙÊ ËÁÔÁÌÏÇ.</li>
- </ul>
- </section>
-
- <section id="third-party">
- <title>íÏÄÕÌÉ ÔÒÅÔØÉÈ ÆÉÒÍ</title>
-
- <p>úÎÁÞÉÔÅÌØÎÙÅ ÉÚÍÅÎÅÎÉÑ ÂÙÌÉ ×ÎÅÓÅÎÙ × API ÄÌÑ Apache 2.0.
- óÕÝÅÓÔ×ÕÀÝÉÅ ÍÏÄÕÌÉ, ÎÁÐÉÓÁÎÎÙÅ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ Apache 1.3 API,
- <strong>ÎÅ</strong> ÂÕÄÕÔ ÒÁÂÏÔÁÔØ ÐÏÄ Apache 2.0, ÅÓÌÉ ÎÅ ×ÎÅÓÔÉ
- × ÎÉÈ ÎÅÏÂÈÏÄÉÍÙÅ ÉÚÍÅÎÅÎÉÑ. âÏÌÅÅ ÐÏÄÒÏÂÎÁÑ ÉÎÆÏÒÍÁÃÉÑ ÐÏ ÜÔÏÍÕ ÐÏ×ÏÄÕ
- ÄÏÓÔÕÐÎÁ × <a href="developer/">ÄÏËÕÍÅÎÔÁÃÉÉ ÄÌÑ ÒÁÚÒÁÂÏÔÞÉËÏ×</a>.</p>
- </section>
-</manualpage>
diff --git a/docs/manual/urlmapping.html b/docs/manual/urlmapping.html
deleted file mode 100755
index 5a9c3a9278..0000000000
--- a/docs/manual/urlmapping.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: urlmapping.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: urlmapping.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: urlmapping.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/urlmapping.html.en b/docs/manual/urlmapping.html.en
deleted file mode 100755
index d47cd68e94..0000000000
--- a/docs/manual/urlmapping.html.en
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Mapping URLs to Filesystem Locations - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Mapping URLs to Filesystem Locations</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/urlmapping.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/urlmapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document explains how Apache uses the URL of a request
- to determine the filesystem location from which to serve a
- file.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#related">Related Modules and Directives</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#outside">Files Outside the DocumentRoot</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#user">User Directories</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#redirect">URL Redirection</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#proxy">Reverse Proxy</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rewrite">Rewriting Engine</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#notfound">File Not Found</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Related Modules and Directives</a></h2>
-
-<table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code></li><li><code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code></li><li><code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_speling.html#checkspelling">CheckSpelling</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code></li><li><code class="directive"><a href="./mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritematch">RewriteMatch</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="documentroot" id="documentroot">DocumentRoot</a></h2>
-
- <p>In deciding what file to serve for a given request, Apache's
- default behavior is to take the URL-Path for the request (the part
- of the URL following the hostname and port) and add it to the end
- of the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> specified
- in your configuration files. Therefore, the files and directories
- underneath the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- make up the basic document tree which will be visible from the
- web.</p>
-
- <p>Apache is also capable of <a href="vhosts/">Virtual
- Hosting</a>, where the server receives requests for more than one
- host. In this case, a different <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> can be specified for each
- virtual host, or alternatively, the directives provided by the
- module <code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code> can
- be used to dynamically determine the appropriate place from which
- to serve content based on the requested IP address or
- hostname.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="outside" id="outside">Files Outside the DocumentRoot</a></h2>
-
- <p>There are frequently circumstances where it is necessary to
- allow web access to parts of the filesystem that are not strictly
- underneath the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>. Apache offers several
- different ways to accomplish this. On Unix systems, symbolic links
- can bring other parts of the filesystem under the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>. For security reasons,
- Apache will follow symbolic links only if the <code class="directive"><a href="./mod/core.html#options">Options</a></code> setting for the relevant
- directory includes <code>FollowSymLinks</code> or
- <code>SymLinksIfOwnerMatch</code>.</p>
-
- <p>Alternatively, the <code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code> directive will map any part
- of the filesystem into the web space. For example, with</p>
-
-<div class="example"><p><code>Alias /docs /var/web</code></p></div>
-
- <p>the URL <code>http://www.example.com/docs/dir/file.html</code>
- will be served from <code>/var/web/dir/file.html</code>. The
- <code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code> directive
- works the same way, with the additional effect that all content
- located at the target path is treated as CGI scripts.</p>
-
- <p>For situations where you require additional flexibility, you
- can use the <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code> and
- <code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code>
- directives to do powerful regular-expression based matching and
- substitution. For example,</p>
-
-<div class="example"><p><code>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</code></p></div>
-
- <p>will map a request to
- <code>http://example.com/~user/cgi-bin/script.cgi</code> to the
- path <code>/home/user/cgi-bin/script.cgi</code> and will treat
- the resulting file as a CGI script.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="user" id="user">User Directories</a></h2>
-
- <p>Traditionally on Unix systems, the home directory of a
- particular <em>user</em> can be referred to as
- <code>~user/</code>. The module <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>
- extends this idea to the web by allowing files under each user's
- home directory to be accessed using URLs such as the
- following.</p>
-
-<div class="example"><p><code>http://www.example.com/~user/file.html</code></p></div>
-
- <p>For security reasons, it is inappropriate to give direct
- access to a user's home directory from the web. Therefore, the
- <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> directive
- specifies a directory underneath the user's home directory
- where web files are located. Using the default setting of
- <code>Userdir public_html</code>, the above URL maps to a file
- at a directory like
- <code>/home/user/public_html/file.html</code> where
- <code>/home/user/</code> is the user's home directory as
- specified in <code>/etc/passwd</code>.</p>
-
- <p>There are also several other forms of the
- <code>Userdir</code> directive which you can use on systems
- where <code>/etc/passwd</code> does not contain the location of
- the home directory.</p>
-
- <p>Some people find the "~" symbol (which is often encoded on the
- web as <code>%7e</code>) to be awkward and prefer to use an
- alternate string to represent user directories. This functionality
- is not supported by mod_userdir. However, if users' home
- directories are structured in a regular way, then it is possible
- to use the <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code>
- directive to achieve the desired effect. For example, to make
- <code>http://www.example.com/upages/user/file.html</code> map to
- <code>/home/user/public_html/file.html</code>, use the following
- <code>AliasMatch</code> directive:</p>
-
-<div class="example"><p><code>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
- /home/$1/public_html/$2</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="redirect" id="redirect">URL Redirection</a></h2>
-
- <p>The configuration directives discussed in the above sections
- tell Apache to get content from a specific place in the filesystem
- and return it to the client. Sometimes, it is desirable instead to
- inform the client that the requested content is located at a
- different URL, and instruct the client to make a new request with
- the new URL. This is called <em>redirection</em> and is
- implemented by the <code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code> directive. For example, if
- the contents of the directory <code>/foo/</code> under the
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> are moved
- to the new directory <code>/bar/</code>, you can instruct clients
- to request the content at the new location as follows:</p>
-
-<div class="example"><p><code>Redirect permanent /foo/
- http://www.example.com/bar/</code></p></div>
-
- <p>This will redirect any URL-Path starting in
- <code>/foo/</code> to the same URL path on the
- <code>www.example.com</code> server with <code>/bar/</code>
- substituted for <code>/foo/</code>. You can redirect clients to
- any server, not only the origin server.</p>
-
- <p>Apache also provides a <code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> directive for more
- complicated rewriting problems. For example, to redirect requests
- for the site home page to a different site, but leave all other
- requests alone, use the following configuration:</p>
-
-<div class="example"><p><code>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</code></p></div>
-
- <p>Alternatively, to temporarily redirect all pages on one site
- to a particular page on another site, use the following:</p>
-
-<div class="example"><p><code>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">Reverse Proxy</a></h2>
-
-<p>Apache also allows you to bring remote documents into the URL space
-of the local server. This technique is called <em>reverse
-proxying</em> because the web server acts like a proxy server by
-fetching the documents from a remote server and returning them to the
-client. It is different from normal proxying because, to the client,
-it appears the documents originate at the reverse proxy server.</p>
-
-<p>In the following example, when clients request documents under the
-<code>/foo/</code> directory, the server fetches those documents from
-the <code>/bar/</code> directory on <code>internal.example.com</code>
-and returns them to the client as if they were from the local
-server.</p>
-
-<div class="example"><p><code>
-ProxyPass /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverse /foo/ http://internal.example.com/bar/
-ProxyPassReverseCookieDomain internal.example.com public.example.com
-ProxyPassReverseCookiePath /foo/ /bar/
-</code></p></div>
-
-<p>The <code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> configures
-the server to fetch the appropriate documents, while the
-<code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code>
-directive rewrites redirects originating at
-<code>internal.example.com</code> so that they target the appropriate
-directory on the local server. Similarly, the
-<code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>
-and <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>
-rewrite cookies set by the backend server.</p>
-<p>It is important to note, however, that
-links inside the documents will not be rewritten. So any absolute
-links on <code>internal.example.com</code> will result in the client
-breaking out of the proxy server and requesting directly from
-<code>internal.example.com</code>. A third-party module
-<a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
-is available to rewrite links in HTML and XHTML.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="rewrite" id="rewrite">Rewriting Engine</a></h2>
-
- <p>When even more powerful substitution is required, the rewriting
- engine provided by <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
- can be useful. The directives provided by this module use
- characteristics of the request such as browser type or source IP
- address in deciding from where to serve content. In addition,
- mod_rewrite can use external database files or programs to
- determine how to handle a request. The rewriting engine is capable
- of performing all three types of mappings discussed above:
- internal redirects (aliases), external redirects, and proxying.
- Many practical examples employing mod_rewrite are discussed in the
- <a href="misc/rewriteguide.html">URL Rewriting Guide</a>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notfound" id="notfound">File Not Found</a></h2>
-
- <p>Inevitably, URLs will be requested for which no matching
- file can be found in the filesystem. This can happen for
- several reasons. In some cases, it can be a result of moving
- documents from one location to another. In this case, it is
- best to use <a href="#redirect">URL redirection</a> to inform
- clients of the new location of the resource. In this way, you
- can assure that old bookmarks and links will continue to work,
- even though the resource is at a new location.</p>
-
- <p>Another common cause of "File Not Found" errors is
- accidental mistyping of URLs, either directly in the browser,
- or in HTML links. Apache provides the module
- <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> (sic) to help with
- this problem. When this module is activated, it will intercept
- "File Not Found" errors and look for a resource with a similar
- filename. If one such file is found, mod_speling will send an
- HTTP redirect to the client informing it of the correct
- location. If several "close" files are found, a list of
- available alternatives will be presented to the client.</p>
-
- <p>An especially useful feature of mod_speling, is that it will
- compare filenames without respect to case. This can help
- systems where users are unaware of the case-sensitive nature of
- URLs and the unix filesystem. But using mod_speling for
- anything more than the occasional URL correction can place
- additional load on the server, since each "incorrect" request
- is followed by a URL redirection and a new request from the
- client.</p>
-
- <p>If all attempts to locate the content fail, Apache returns
- an error page with HTTP status code 404 (file not found). The
- appearance of this page is controlled with the
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> directive
- and can be customized in a flexible manner as discussed in the
- <a href="custom-error.html">Custom error responses</a>
- document.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/urlmapping.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/urlmapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/urlmapping.html.ja.euc-jp b/docs/manual/urlmapping.html.ja.euc-jp
deleted file mode 100644
index 462ca89a11..0000000000
--- a/docs/manual/urlmapping.html.ja.euc-jp
+++ /dev/null
@@ -1,284 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>URL ¤«¤é¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î°ÌÃÖ¤Ø¤Î¥Þ¥Ã¥× - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>URL ¤«¤é¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î°ÌÃ֤ؤΥޥå×</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/urlmapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/urlmapping.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ï Apache ¤¬¥ê¥¯¥¨¥¹¥È¤Î URL ¤«¤éÁ÷¿®¤¹¤ë¥Õ¥¡¥¤¥ë¤Î
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î°ÌÃÖ¤ò·èÄꤹ¤ëÊýË¡¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#related">´ØÏ¢¤¹¤ë¥â¥¸¥å¡¼¥ë¤È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#outside">DocumentRoot ³°¤Î¥Õ¥¡¥¤¥ë</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#user">¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#redirect">URL ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#proxy">¥ê¥Ð¡¼¥¹¥×¥í¥­¥·</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rewrite">¥ê¥é¥¤¥È¥¨¥ó¥¸¥ó</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#notfound">File Not Found</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">´ØÏ¢¤¹¤ë¥â¥¸¥å¡¼¥ë¤È¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-
-<table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code></li><li><code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code></li><li><code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_speling.html#checkspelling">CheckSpelling</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code></li><li><code class="directive"><a href="./mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritematch">RewriteMatch</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="documentroot" id="documentroot">DocumentRoot</a></h2>
-
- <p>¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¤É¤Î¥Õ¥¡¥¤¥ë¤òÁ÷¿®¤¹¤ë¤«¤ò·èÄꤹ¤ë¤È¤­¤Î
- Apache ¤Î¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Î URL-Path (URL ¤Î¥Û¥¹¥È̾¤È
- ¥Ý¡¼¥ÈÈÖ¹æ¤Î¸å¤Ë³¤¯Éôʬ) ¤ò¼è¤ê½Ð¤·¤ÆÀßÄê¥Õ¥¡¥¤¥ë¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- ¤ÎºÇ¸å¤ËÄɲ乤롢¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£¤Ç¤¹¤«¤é¡¢
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- ¤Î²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ä¥Õ¥¡¥¤¥ë¤¬¥¦¥§¥Ö¤«¤é¸«¤¨¤ë´ðËܤΥɥ­¥å¥á¥ó¥È¤ÎÌÚ¹½Â¤¤ò
- ¤Ê¤·¤Þ¤¹¡£</p>
-
- <p>Apache ¤Ë¤Ï¥µ¡¼¥Ð¤¬Ê£¿ô¤Î¥Û¥¹¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¼è¤ë
- <a href="vhosts/">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a> ¤Îµ¡Ç½¤â¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¡¢¤½¤ì¤¾¤ì¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ·¤Æ°ã¤¦
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- ¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢<code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ë¤è¤êÄ󶡤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¡¢
- Á÷¿®¤¹¤ë¤¿¤á¤Î¥³¥ó¥Æ¥ó¥Ä¤Î¾ì½ê¤ò¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿ IP
- ¥¢¥É¥ì¥¹¤ä¥Û¥¹¥È̾¤«¤éưŪ¤Ë·è¤á¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="outside" id="outside">DocumentRoot ³°¤Î¥Õ¥¡¥¤¥ë</a></h2>
-
- <p>¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î¡¢
- ¸·Ì©¤Ë¤Ï <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- ¤Î²¼¤Ë¤Ï¤Ê¤¤Éôʬ¤Ø¤Î¥¦¥§¥Ö¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ëɬÍפ¬¤¢¤ë
- ¾ì¹ç¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£Apache ¤Ï¤³¤Î¤¿¤á¤ËÊ£¿ô¤ÎÊýË¡¤òÍÑ°Õ¤·¤Æ¤¤¤Þ¤¹¡£
- Unix ¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¾¤ÎÉôʬ¤ò¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò
- »È¤Ã¤Æ <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
- ¤Î²¼¤Ë»ý¤Ã¤Æ¤¯¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥»¥­¥å¥ê¥Æ¥£¾å¤ÎÍýͳ¤Ë¤è¤ê¡¢
- Apache ¤Ï³ºÅö¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Î
- <code class="directive"><a href="./mod/core.html#options">Options</a></code> ¤ÎÀßÄê¤Ë
- <code>FollowSymLinks</code> ¤« <code>SymLinksIfOwnerMatch</code> ¤¬
- ¤¢¤ë¾ì¹ç¤Ë¤Î¤ß¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò¤¿¤É¤ê¤Þ¤¹¡£</p>
-
- <p>Âå¤ï¤ê¤ÎÊýË¡¤È¤·¤Æ¡¢<code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎǤ°Õ¤ÎÉôʬ¤ò¥¦¥§¥Ö¤Î¶õ´Ö¤Ë
- ¥Þ¥Ã¥×¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢</p>
-
-<div class="example"><p><code>Alias /docs /var/web</code></p></div>
-
- <p>¤È¤¤¤¦ÀßÄê¤Î¤È¤­¤Ï¡¢URL
- <code>http://www.example.com/docs/dir/file.html</code> ¤Ë¤Ï
- <code>/var/web/dir/file.html</code> ¤¬Á÷¿®¤µ¤ì¤Þ¤¹¡£
- <code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code> ¤â¡¢
- ÂоݤȤʤäƤ¤¤ë¥Ñ¥¹¤¬ CGI ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ°·¤ï¤ì¤ë¤È¤¤¤¦ÄɲäÎ
- ¸ú²Ì°Ê³°¤ÏƱ¤¸¤è¤¦¤ËÆ°ºî¤·¤Þ¤¹¡£</p>
-
- <p>¤â¤Ã¤È½ÀÆð¤ÊÀßÄ꤬ɬÍפʾõ¶·¤Ç¤Ï¡¢
- <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ä
- <code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö
- ¤ò»È¤Ã¤Æ¶¯ÎϤÊÀµµ¬É½¸½¤Ë´ð¤Å¤¤¤¿¥Þ¥Ã¥Á¤ÈÃÖ´¹¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¡¢</p>
-
-<div class="example"><p><code>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</code></p></div>
-
- <p>¤Ï <code>http://example.com/~user/cgi-bin/script.cgi</code> ¤Ø¤Î
- ¥ê¥¯¥¨¥¹¥È¤ò <code>/home/user/cgi-bin/script.cgi</code> ¤È¤¤¤¦¥Ñ¥¹¤Ø
- ¥Þ¥Ã¥×¤·¡¢¤³¤Î¥Þ¥Ã¥×¤Î·ë²Ì¤È¤·¤Æ¤Î¥Õ¥¡¥¤¥ë¤ò CGI ¥¹¥¯¥ê¥×¥È¤È¤·¤Æ
- °·¤¤¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="user" id="user">¥æ¡¼¥¶¥Ç¥£¥ì¥¯¥È¥ê</a></h2>
-
- <p>ÅÁÅýŪ¤Ë Unix ¥·¥¹¥Æ¥à¤Ç¤Ï¥æ¡¼¥¶ <em>user</em> ¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ò
- <code>~user/</code> ¤È¤·¤Æ»²¾È¤Ç¤­¤Þ¤¹¡£<code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>
- ¥â¥¸¥å¡¼¥ë¤Ï¤³¤Î³µÇ°¤ò¥¦¥§¥Ö¤Ë³ÈÄ¥¤·¤Æ¡¢
- ¤½¤ì¤¾¤ì¤Î¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë¤ò
- °Ê²¼¤Î¤è¤¦¤Ê URL ¤ò»È¤Ã¤Æ¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>http://www.example.com/~user/file.html</code></p></div>
-
- <p>¥»¥­¥å¥ê¥Æ¥£¤Î´ÑÅÀ¤«¤é¡¢¥¦¥§¥Ö¤«¤é¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ø
- ľÀÜ¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤ÏŬÀڤǤϤ¢¤ê¤Þ¤»¤ó¡£¤Ç¤¹¤«¤é¡¢
- <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤Ï
- ¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Î¡¢¥¦¥§¥Ö¥Õ¥¡¥¤¥ë¤Î
- ÃÖ¤«¤ì¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤷ¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¤Î
- <code>Userdir public_html</code> ¤ò»È¤¦¤È¡¢¾å¤Î URL ¤Ï
- <code>/home/user/public_html/file.html</code> ¤È¤¤¤¦¤è¤¦¤Ê¥Õ¥¡¥¤¥ë¤Ë
- ¥Þ¥Ã¥×¤µ¤ì¤Þ¤¹¡£¤³¤³¤Ç¡¢<code>/home/user/</code> ¤Ï
- <code>/etc/passwd</code> ¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹¡£</p>
-
- <p><code class="directive"><a href="./mod/mod_userdir.html#userdir">Userdir</a></code> ¤Ë¤Ï¡¢
- <code>/etc/passwd</code> ¤Ë¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Î°ÌÃÖ¤¬½ñ¤«¤ì¤Æ¤¤¤Ê¤¤
- ¥·¥¹¥Æ¥à¤Ç¤â»È¤¦¤³¤È¤Î¤Ç¤­¤ë¾¤Î·Á¼°¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>Ãæ¤Ë¤Ï¥·¥ó¥Ü¥ë "~" (<code>%7e</code> ¤Î¤è¤¦¤ËÉä¹æ²½¤µ¤ì¤ë¤³¤È¤¬Â¿¤¤)
- ¤ò³Ê¹¥¤¬°­¤¤¤È»×¤Ã¤Æ¡¢¥æ¡¼¥¶¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òɽ¤¹¤¿¤á¤ËÊ̤Îʸ»úÎó¤Î
- »ÈÍѤò¹¥¤à¿Í¤¬¤¤¤Þ¤¹¡£mod_userdir ¤Ï¤³¤Îµ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£
- ¤·¤«¤·¡¢¥æ¡¼¥¶¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤¬µ¬Â§Åª¤Ê¹½À®¤Î¤È¤­¤Ï¡¢
- <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code> ¤ò»È¤Ã¤Æ˾¤ß¤Î
- ¸ú²Ì¤òãÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢
- <code>http://www.example.com/upages/user/file.html</code> ¤¬
- <code>/home/user/public_html/file.html</code> ¤Ë¥Þ¥Ã¥×¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
- °Ê²¼¤Î¤è¤¦¤Ë <code>AliasMatch</code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò»È¤¤¤Þ¤¹:</p>
-
-<div class="example"><p><code>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
- /home/$1/public_html/$2</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="redirect" id="redirect">URL ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó</a></h2>
-
- <p>¾å¤ÎÀá¤ÇÀâÌÀ¤·¤¿ÀßÄêÍѤΥǥ£¥ì¥¯¥Æ¥£¥Ö¤Ï Apache ¤Ë
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎÆÃÄê¤Î¾ì½ê¤«¤é¥³¥ó¥Æ¥ó¥Ä¤ò¼è¤Ã¤Æ¤­¤Æ
- ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤êÊÖ¤¹¤è¤¦¤Ë¤·¤Þ¤¹¡£¤È¤­¤Ë¤Ï¡¢¤½¤ÎÂå¤ï¤ê¤Ë
- ¥¯¥é¥¤¥¢¥ó¥È¤Ë¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥³¥ó¥Æ¥ó¥Ä¤ÏÊ̤ΠURL ¤Ë¤¢¤ë¤³¤È¤ò
- ÃΤ餻¤Æ¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬¿·¤·¤¤ URL ¤Ø¿·¤·¤¤¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤Ê¤¦¤è¤¦¤Ë
- ¤¹¤ëÊý¤¬Ë¾¤Þ¤·¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤Ï<em>¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó</em>¤È
- ¸Æ¤Ð¤ì¤Æ¤¤¤Æ¡¢<code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤è¤ê¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> ¤Î²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê
- <code>/foo/</code> ¤¬¿·¤·¤¤¥Ç¥£¥ì¥¯¥È¥ê <code>/bar/</code> ¤Ë°ÜÆ°¤·¤¿¤È¤­¤Ï¡¢
- °Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤¬¿·¤·¤¤¾ì½ê¤Î¥³¥ó¥Æ¥ó¥Ä¤ò¥ê¥¯¥¨¥¹¥È¤¹¤ë¤è¤¦¤Ë
- »Ø¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹:</p>
-
-<div class="example"><p><code>Redirect permanent /foo/
- http://www.example.com/bar/</code></p></div>
-
- <p>¤³¤ì¤Ï¡¢<code>/foo/</code> ¤Ç»Ï¤Þ¤ë¤¹¤Ù¤Æ¤Î URL-Path ¤ò¡¢
- <code>www.example.com</code> ¥µ¡¼¥Ð¤Î <code>/bar/</code> ¤¬
- <code>/foo/</code> ¤ËÃÖ´¹¤µ¤ì¤¿¤â¤Î¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
- ¥µ¡¼¥Ð¤Ï¼«Ê¬¼«¿È¤Î¥µ¡¼¥Ð¤À¤±¤Ç¤Ê¤¯¡¢¤É¤Î¥µ¡¼¥Ð¤Ë¤Ç¤â¥¯¥é¥¤¥¢¥ó¥È¤ò
- ¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Apache ¤Ï¤è¤êÊ£»¨¤Ê½ñ¤­´¹¤¨¤ÎÌäÂê¤Î¤¿¤á¤Ë¡¢
- <code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- Ä󶡤·¤Æ¤¤¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢¥µ¥¤¥È¤Î¥Û¡¼¥à¥Ú¡¼¥¸¤ò°ã¤¦¥µ¥¤¥È¤Ë¥ê¥À¥¤¥ì¥¯¥È
- ¤¹¤ë¤±¤ì¤É¡¢Â¾¤Î¥ê¥¯¥¨¥¹¥È¤Ï¤½¤Î¤Þ¤Þ°·¤¦¡¢¤È¤¤¤¦¤È¤­¤Ï°Ê²¼¤ÎÀßÄê¤ò
- »È¤¤¤Þ¤¹:</p>
-
-<div class="example"><p><code>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</code></p></div>
-
- <p>¤¢¤ë¤¤¤Ï¡¢°ì»þŪ¤Ë¥µ¥¤¥È¤Î¤¹¤Ù¤Æ¤Î¥Ú¡¼¥¸¤ò¾¤Î¥µ¥¤¥È¤ÎÆÃÄê¤Î
- ¥Ú¡¼¥¸¤Ø¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¤È¤­¤Ï¡¢°Ê²¼¤ò»È¤¤¤Þ¤¹:</p>
-
-<div class="example"><p><code>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">¥ê¥Ð¡¼¥¹¥×¥í¥­¥·</a></h2>
-
-<p>Apache ¤Ï±ó³ÖÃϤˤ¢¤ë¥É¥­¥å¥á¥ó¥È¤ò¥í¡¼¥«¥ë¤Î¥µ¡¼¥Ð¤Î URL ¶õ´Ö¤Ë
-»ý¤Ã¤Æ¤¯¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤³¤Î¼êË¡¤Ï<em>¥ê¥Ð¡¼¥¹¥×¥í¥­¥·</em>¤È¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¡£
-¥¦¥§¥Ö¥µ¡¼¥Ð¤¬±ó³ÖÃϤΥɥ­¥å¥á¥ó¥È¤ò¼èÆÀ¤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤ËÁ÷¤êÊÖ¤¹¤Î¤¬
-¥×¥í¥­¥·¥µ¡¼¥Ð¤ÎÆ°ºî¤Î¤è¤¦¤Ë¸«¤¨¤ë¤«¤é¤Ç¤¹¡£¥¯¥é¥¤¥¢¥ó¥È¤Ë¤Ï¥É¥­¥å¥á¥ó¥È¤¬
-¥ê¥Ð¡¼¥¹¥×¥í¥­¥·¥µ¡¼¥Ð¤«¤éÁ÷¤é¤ì¤Æ¤­¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤ëÅÀ¤¬Ä̾ï¤Î
-¥×¥í¥­¥·¤È¤Ï°Û¤Ê¤ê¤Þ¤¹¡£</p>
-
-<p>¼¡¤ÎÎã¤Ç¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤¬ <code>/foo/</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë¤¢¤ë
-¥É¥­¥å¥á¥ó¥È¤ò¥ê¥¯¥¨¥¹¥È¤¹¤ë¤È¡¢¥µ¡¼¥Ð¤¬ <code>internal.example.com</code> ¤Î
-<code>/bar/</code> ¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¼èÆÀ¤·¤Æ¡¢¤µ¤â¥í¡¼¥«¥ë¥µ¡¼¥Ð¤«¤é¤Î
-¥É¥­¥å¥á¥ó¥È¤Î¤è¤¦¤Ë¤·¤Æ¥¯¥é¥¤¥¢¥ó¥È¤ËÊÖ¤·¤Þ¤¹¡£</p>
-
-<div class="example"><p><code>
-ProxyPass /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
-ProxyPassReverseCookiePath /foo/ /bar/
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-¥µ¡¼¥Ð¤¬Å¬Àڤʥɥ­¥å¥á¥ó¥È¤ò¼èÆÀ¤¹¤ë¤è¤¦¤ËÀßÄꤷ¡¢
-<code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
-<code>internal.example.com</code> ¤«¤é¤Î¥ê¥À¥¤¥ì¥¯¥È¤¬¥í¡¼¥«¥ë¥µ¡¼¥Ð¤Î
-ŬÀڤʥǥ£¥ì¥¯¥È¥ê¤ò»Ø¤¹¤è¤¦¤Ë½ñ¤­´¹¤¨¤Þ¤¹¡£
-ƱÍÍ¤Ë <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>
-¤È <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code>
-¤Ç¥Ð¥Ã¥¯¥¨¥ó¥É¦¥µ¡¼¥Ð¤Îȯ¹Ô¤·¤¿ Cookie ¤ò½ñ¤­´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-<p>¤¿¤À¤·¡¢¥É¥­¥å¥á¥ó¥È¤ÎÃæ¤Î¥ê¥ó¥¯¤Ï½ñ¤­´¹¤¨¤é¤ì¤Ê¤¤¡¢
-¤È¤¤¤¦¤³¤È¤ÏÃΤäƤª¤¤¤Æ¤¯¤À¤µ¤¤¡£
-¤Ç¤¹¤«¤é¡¢<code>internal.example.com</code> ¤Ø¤ÎÀäÂХѥ¹¤Ë¤è¤ë¥ê¥ó¥¯¤Ç¤Ï¡¢
-¥¯¥é¥¤¥¢¥ó¥È¤¬¥×¥í¥­¥·¥µ¡¼¥Ð¤òÈ´¤±½Ð¤·¤Æ <code>internal.example.com</code> ¤Ë
-ľÀܥꥯ¥¨¥¹¥È¤òÁ÷¤ë¡¢¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
-¥µ¡¼¥É¥Ñ¡¼¥Æ¥£À½¥â¥¸¥å¡¼¥ë¤Î <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
-¤Ï¡¢HTML ¤È XHTML Ãæ¤Î¥ê¥ó¥¯¤ò½ñ¤­´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="rewrite" id="rewrite">¥ê¥é¥¤¥È¥¨¥ó¥¸¥ó</a></h2>
-
- <p>¤è¤ê°ìÁض¯ÎϤÊÃÖ´¹¤¬É¬ÍפʤȤ­¤Ï¡¢<code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
- ¤¬Ä󶡤¹¤ë¥ê¥é¥¤¥È¥¨¥ó¥¸¥ó¤¬Ìò¤ËΩ¤Ä¤Ç¤·¤ç¤¦¡£
- ¤³¤Î¥â¥¸¥å¡¼¥ë¤Ë¤è¤êÄ󶡤µ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï
- ¥Ö¥é¥¦¥¶¤Î¼ïÎà¡¢¥ê¥¯¥¨¥¹¥È¸µ¤Î IP ¥¢¥É¥ì¥¹¤Ê¤É¤Î¥ê¥¯¥¨¥¹¥È¤ÎÆÃħ¤ò
- »È¤Ã¤ÆÁ÷¤êÊÖ¤¹¥³¥ó¥Æ¥ó¥Ä¤Î¾ì½ê¤ò·è¤á¤Þ¤¹¡£¤µ¤é¤Ë¡¢<code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
- ¤Ï³°Éô¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤ä¥×¥í¥°¥é¥à¤ò»È¤Ã¤Æ¥ê¥¯¥¨¥¹¥È¤Î°·¤¤Êý¤ò
- ·è¤á¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¥ê¥é¥¤¥È¥¨¥ó¥¸¥ó¤Ï¾å¤Çµó¤²¤é¤ì¤Æ¤¤¤ë»°¤Ä¤Î¥Þ¥Ã¥Ô¥ó¥°
- ¤¹¤Ù¤Æ¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹: ÆâÉô¤Î¥ê¥À¥¤¥ì¥¯¥È (¥¨¥¤¥ê¥¢¥¹)¡¢
- ³°Éô¤Î¥ê¥À¥¤¥ì¥¯¥È¡¢¥×¥í¥­¥·¤Ç¤¹¡£mod_rewrite ¤ò»È¤¦Â¿¤¯¤Î¼ÂÍÑŪ¤ÊÎã¤Ï
- <a href="misc/rewriteguide.html">URL ¥ê¥é¥¤¥È¥¬¥¤¥É</a>
- ¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notfound" id="notfound">File Not Found</a></h2>
-
- <p>ɬ¤º¡¢¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿ URL ¤ËÂбþ¤¹¤ë¥Õ¥¡¥¤¥ë¤¬¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë
- ̵¤¤¤È¤¤¤¦¾ì¹ç¤¬È¯À¸¤·¤Þ¤¹¡£¤³¤ì¤¬µ¯¤³¤ë¤Î¤Ë¤Ï¤¤¤¯¤Ä¤«¤ÎÍýͳ¤¬¤¢¤ê¤Þ¤¹¡£
- ¾ì¹ç¤Ë¤è¤Ã¤Æ¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤òÊ̤ξì½ê¤Ë°ÜÆ°¤·¤¿·ë²Ì¤Ç¤¢¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤Î¾ì¹ç¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ë¥ê¥½¡¼¥¹¤Î¿·¤·¤¤°ÌÃÖ¤òÃΤ餻¤ë¤¿¤á¤Ë
- <a href="#redirect">URL ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó</a>¤ò»È¤¦¤Î¤¬ºÇÁ±¤ÎÊýË¡¤Ç¤¹¡£
- ¤½¤¦¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¥ê¥½¡¼¥¹¤Ï¿·¤·¤¤°ÌÃ֤˰ÜÆ°¤·¤Æ¤¤¤ë¤±¤ì¤É¤â¡¢
- ¸Å¤¤¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ä¥ê¥ó¥¯¤¬Æ°ºî¤·Â³¤±¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>"File Not Found" ¥¨¥é¡¼¤Î¤â¤¦°ì¤Ä¤Î¤è¤¯¤¢¤ëÍýͳ¤Ï¡¢
- ¥Ö¥é¥¦¥¶¤Ø¤ÎľÀÜÆþÎϤä HTML ¥ê¥ó¥¯¤«¤é¤Î¶öȯŪ¤Ê URL ¤ÎÆþÎϴְ㤤¤Ç¤¹¡£
- Apache ¤Ï¤³¤ÎÌäÂê¤ò²þÁ±¤¹¤ë¤¿¤á¤Ë¡¢<code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code>
- ¥â¥¸¥å¡¼¥ë (°Õ¿ÞŪ¤ÊÄÖ¤ê´Ö°ã¤¤)
- (ÌõÃí: Àµ¤·¤¯¤Ï spelling) ¤òÄ󶡤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥â¥¸¥å¡¼¥ë¤¬
- »ÈÍѤµ¤ì¤Æ¤¤¤ë¤È¤­¤Ï¡¢"File Not Found" ¥¨¥é¡¼¤ò²£¼è¤ê¤·¤Æ¡¢
- »÷¤¿¥Õ¥¡¥¤¥ë̾¤Î¥ê¥½¡¼¥¹¤òõ¤·¤Þ¤¹¡£¤â¤·°ì¤Ä¤À¤±¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤Ï
- mod_speling ¤Ï¥¯¥é¥¤¥¢¥ó¥È¤ËÀµ¤·¤¤°ÌÃÖ¤òÃΤ餻¤ë¤¿¤á¤Ë HTTP ¥ê¥À¥¤¥ì¥¯¥È¤ò
- Á÷¤ê¤Þ¤¹¡£¤â¤·Ê£¿ô¤Î¡Ö¶á¤¤¡×¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤Ï¡¢¤½¤ì¤é
- ÂåÂؤȤʤꤨ¤ë¤â¤Î¤Î¥ê¥¹¥È¤¬¥¯¥é¥¤¥¢¥ó¥È¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£</p>
-
- <p>mod_speling ¤ÎÈó¾ï¤ËÍ­ÍѤʵ¡Ç½¤Ï¡¢Âçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤»¤º¤Ë
- ¥Õ¥¡¥¤¥ë̾¤òÈæ³Ó¤¹¤ë¤â¤Î¤Ç¤¹¡£¤³¤ì¤Ï URL ¤È unix ¤Î
- ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬Î¾Êý¤È¤âÂçʸ»ú¾®Ê¸»ú¤ò¶èÊ̤¹¤ë¤â¤Î¤Ç¤¢¤ë¡¢
- ¤È¤¤¤¦¤³¤È¤ò¥æ¡¼¥¶¤¬ÃΤé¤Ê¤¤¥·¥¹¥Æ¥à¤ÇÌò¤ËΩ¤Á¤Þ¤¹¡£¤¿¤À¤·¡¢
- »þÀޤΠURL ÄûÀµÄøÅ٤ǺѤޤº¡¢mod_speling ¤ò¤è¤ê¿¤¯»ÈÍѤ¹¤ë¤È¡¢¥µ¡¼¥Ð¤Ë
- ¤µ¤é¤Ê¤ëÉé²Ù¤¬¤«¤«¤ê¤Þ¤¹¡£¤¹¤Ù¤Æ¤Î¡ÖÀµ¤·¤¯¤Ê¤¤¡×¥ê¥¯¥¨¥¹¥È¤Î¸å¤Ë
- URL ¤Î¥ê¥À¥¤¥ì¥¯¥È¤È¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¿·¤·¤¤¥ê¥¯¥¨¥¹¥È¤¬¤¯¤ë¤³¤È¤Ë
- ¤Ê¤ê¤Þ¤¹¤«¤é¡£</p>
-
- <p>¥³¥ó¥Æ¥ó¥Ä¤Î°ÌÃÖ¤ò·è¤á¤è¤¦¤È¤¹¤ë¤¹¤Ù¤Æ¤Î»î¤ß¤¬¼ºÇÔ¤¹¤ë¤È¡¢
- Apache ¤Ï¡¢HTTP ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É 404 (file not found) ¤È¶¦¤Ë
- ¥¨¥é¡¼¥Ú¡¼¥¸¤òÊÖ¤·¤Þ¤¹¡£¤³¤Î¥¨¥é¡¼¥Ú¡¼¥¸¤Î³°´Ñ¤Ï
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀ©¸æ¤µ¤ì¡¢
- <a href="custom-error.html">¥«¥¹¥¿¥à¥¨¥é¡¼¥ì¥¹¥Ý¥ó¥¹</a> ¤Ç
- ÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢½ÀÆð¤ÊÀßÄê¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/urlmapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/urlmapping.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="./mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">ÍѸì</a> | <a href="./sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/urlmapping.html.ko.euc-kr b/docs/manual/urlmapping.html.ko.euc-kr
deleted file mode 100644
index 5b5607eb86..0000000000
--- a/docs/manual/urlmapping.html.ko.euc-kr
+++ /dev/null
@@ -1,245 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>URLÀ» ÆÄÀϽýºÅÛ À§Ä¡·Î ´ëÀÀÇϱâ - Apache HTTP Server</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>URLÀ» ÆÄÀϽýºÅÛ À§Ä¡·Î ´ëÀÀÇϱâ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/urlmapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/urlmapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/urlmapping.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â ¿äûÀÇ URLÀ» °¡Áö°í ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô ¼­ºñ½ºÇÒ
- ÆÄÀÏÀÇ ÆÄÀϽýºÅÛ»ó À§Ä¡¸¦ ã´ÂÁö ¼³¸íÇÑ´Ù.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#related">°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾îµé</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#outside">DocumentRoot ¹Û¿¡ ÀÖ´Â ÆÄÀϵé</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#user">»ç¿ëÀÚ µð·ºÅ丮</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#redirect">URL ¸®´ÙÀÌ·º¼Ç(Redirection)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#proxy">¿ªÇÁ·Ï½Ã(Reverse Proxy)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rewrite">ÀçÀÛ¼º ¿£Áø (Rewriting Engine)</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#notfound">File Not Found</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾îµé</a></h2>
-
-<table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code></li><li><code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code></li><li><code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_speling.html#checkspelling">CheckSpelling</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code></li><li><code class="directive"><a href="./mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritematch">RewriteMatch</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="documentroot" id="documentroot">DocumentRoot</a></h2>
-
- <p>¿äûÀ» ¹ÞÀº ¾ÆÆÄÄ¡´Â ¾î¶² ÆÄÀÏÀ» ¼­ºñ½ºÇÒÁö °áÁ¤ÇϱâÀ§ÇØ
- ±âº»ÀûÀ¸·Î ¿äûÀÇ URL-°æ·Î(URL¿¡¼­ È£½ºÆ®¸í°ú Æ÷Æ® µÚ¿¡
- ³ª¿À´Â ºÎºÐ)¸¦ ¼³Á¤ÆÄÀÏ¿¡¼­ ÁöÁ¤ÇÑ <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> µÚ¿¡ ºÙÀδÙ. ±×·¡¼­
- <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> ¾Æ·¡ÀÖ´Â
- ÆÄÀÏ°ú µð·ºÅ丮µéÀº À¥¿¡¼­ º¸°ÔµÉ ±âº»ÀûÀÎ ³»¿ëÀÌ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="outside" id="outside">DocumentRoot ¹Û¿¡ ÀÖ´Â ÆÄÀϵé</a></h2>
-
- <p>Á¾Á¾ ÆÄÀϽýºÅÛ¿¡¼­ <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> ¾Æ·¡ ÀÖÁö¾ÊÀº ºÎºÐÀ»
- À¥¿¡¼­ Á¢±ÙÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ÀÌ °æ¿ì ¿©·¯°¡Áö ¹æ¹ýÀ»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ½Éº¼¸µÅ©¸¦ »ç¿ëÇÏ¿©
- ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐÀ» <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> ¾Æ·¡¿¡ µÑ ¼ö ÀÖ´Ù.
- º¸¾ÈÀ» À§ÇØ ¾ÆÆÄÄ¡´Â ÇØ´ç µð·ºÅ丮ÀÇ <code class="directive"><a href="./mod/core.html#options">Options</a></code> ¼³Á¤¿¡
- <code>FollowSymLinks</code>³ª
- <code>SymLinksIfOwnerMatch</code>°¡ ÀÖ´Â °æ¿ì¿¡¸¸ ½Éº¼¸µÅ©¸¦
- µû¶ó°£´Ù.</p>
-
- <p>¶Ç, <code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code>
- Áö½Ã¾î´Â ÆÄÀϽýºÅÛÀÇ Æ¯Á¤ ºÎºÐÀ» À¥°ø°£¿¡ ´ëÀÀÇÑ´Ù. ¿¹¸¦
- µé¾î ´ÙÀ½°ú °°´Ù¸é</p>
-
-<div class="example"><p><code>Alias /docs /var/web</code></p></div>
-
- <p>URL <code>http://www.example.com/docs/dir/file.html</code>˼
- <code>/var/web/dir/file.html</code>À» °¡Áö°í ¼­ºñ½ºÇÑ´Ù.
- ÁöÁ¤ÇÑ °æ·Î¿¡ ÀÖ´Â ¸ðµç ³»¿ëÀ» CGI ½ºÅ©¸³Æ®·Î Ãë±ÞÇÏ´Â °ÍÀ»
- Á¦¿ÜÇÏ°í´Â <code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
- Áö½Ã¾îµµ °°Àº ÀÏÀ» ÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code>¿Í
- <code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code>
- Áö½Ã¾îÀÇ °­·ÂÇÑ Á¤±ÔÇ¥Çö½Ä±â¹Ý ´ëÀÀ°ú ´ëÄ¡¸¦ »ç¿ëÇÏ¿© ´õ
- À¯¿¬ÇÑ ¼³Á¤ÀÌ °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î,</p>
-
-<div class="example"><p><code>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</code></p></div>
-
- <p>´Â <code>http://example.com/~user/cgi-bin/script.cgi</code>·ÎÀÇ
- ¿äûÀ» °æ·Î <code>/home/user/cgi-bin/script.cgi</code>·Î
- ´ëÀÀÇÏ°í, ÇØ´ç ÆÄÀÏÀ» CGI ½ºÅ©¸³Æ®·Î Ãë±ÞÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="user" id="user">»ç¿ëÀÚ µð·ºÅ丮</a></h2>
-
- <p>À¯´Ð½º ½Ã½ºÅÛÀº ÀüÅëÀûÀ¸·Î ƯÁ¤ »ç¿ëÀÚ <em>user</em>ÀÇ
- Ȩµð·ºÅ丮¸¦ <code>~user/</code>·Î ÁöĪÇÑ´Ù.
- <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> ¸ðµâÀº ÀÌ °³³äÀ» À¥¿¡±îÁö
- È®ÀåÇÏ¿©, ´ÙÀ½°ú °°Àº URLÀ» °¡Áö°í °¢ »ç¿ëÀÚ È¨µð·ºÅ丮
- ¾È¿¡ ÀÖ´Â ÆÄÀÏÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
-<div class="example"><p><code>http://www.example.com/~user/file.html</code></p></div>
-
- <p>º¸¾È»ó À¥¿¡¼­ »ç¿ëÀÚ È¨µð·ºÅ丮·Î Á÷Á¢ Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸é
- ¾ÈµÈ´Ù. ±×·¡¼­ <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code>
- Áö½Ã¾î´Â »ç¿ëÀÚ È¨µð·ºÅ丮¿¡¼­ À¥¿ë ÆÄÀϵéÀÌ ÀÖÀ» µð·ºÅ丮¸¦
- ÁöÁ¤ÇÑ´Ù. ±âº» ¼³Á¤ <code>Userdir public_html</code>À» »ç¿ëÇÏ°í
- <code>/home/user/</code>°¡ <code>/etc/passwd</code>¿¡ ÁöÁ¤µÈ
- »ç¿ëÀÚ È¨µð·ºÅ丮¶ó¸é, À§ÀÇ URLÀº ÆÄÀÏ
- <code>/home/user/public_html/file.html</code>¿¡ ´ëÀÀÇÑ´Ù.</p>
-
- <p>¶Ç, <code>Userdir</code> Áö½Ã¾î´Â <code>/etc/passwd</code>¿¡
- Ȩµð·ºÅ丮ÀÇ À§Ä¡°¡ ÀúÀåµÇÁö¾Ê´Â ½Ã½ºÅÛÀ» À§ÇØ ¿©·¯ ´Ù¸¥
- ÇüŸ¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾î¶² »ç¶÷Àº (º¸Åë À¥¿¡¼­ <code>%7e</code>·Î ÀÎÄÚµùµÇ´Â)
- "~" ±âÈ£°¡ ÀÌ»óÇÏ¿© ´Ù¸¥ ¹æ½ÄÀ¸·Î »ç¿ëÀÚ µð·ºÅ丮¸¦ ³ªÅ¸³»°í
- ½Í¾îÇÑ´Ù. ÀÌ ±â´ÉÀº mod_userdirÀÌ Á¦°øÇÏÁö¾Ê´Â´Ù. ±×·¯³ª
- »ç¿ëÀÚ È¨µð·ºÅ丮°¡ ±ÔÄ¢ÀûÀÎ ¹æ¹ýÀ¸·Î ±¸¼ºµÇÀÖ´Ù¸é, <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¿øÇÏ´Â È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ÀÇ
- <code>AliasMatch</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- <code>http://www.example.com/upages/user/file.html</code>ÀÌ
- <code>/home/user/public_html/file.html</code>¿¡ ´ëÀÀÇÑ´Ù:</p>
-
-<div class="example"><p><code>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
- /home/$1/public_html/$2</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="redirect" id="redirect">URL ¸®´ÙÀÌ·º¼Ç(Redirection)</a></h2>
-
- <p>¾Õ¿¡¼­ ¼³¸íÇÑ ¼³Á¤ Áö½Ã¾îµéÀº ¾ÆÆÄÄ¡°¡ ÆÄÀϽýºÅÛÀÇ Æ¯Á¤
- Àå¼Ò¿¡ ÀÖ´Â ³»¿ëÀ» Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»°Ô ¸¸µç´Ù. ±×·¯³ª
- ¶§¶§·Î ¿äûÇÑ ³»¿ëÀÌ ´Ù¸¥ URL¿¡ ÀÖ´Ù°í Ŭ¶óÀ̾ðÆ®¿¡°Ô ¾Ë·ÁÁÖ¾î,
- Ŭ¶óÀ̾ðÆ®°¡ »õ·Î ±× URLÀ» ¿äûÇϵµ·Ï ¸¸µå´Â °ÍÀÌ ÁÁÀ» ¶§°¡
- ÀÖ´Ù. À̸¦ <em>¸®´ÙÀÌ·º¼Ç(redirection)</em>À̶ó°í Çϸç,
- <code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> ¾Æ·¡ <code>/foo/</code>
- µð·ºÅ丮ÀÇ ³»¿ëÀ» »õ·Î <code>/bar/</code> µð·ºÅ丮·Î ¿Å°å´Ù¸é
- ´ÙÀ½°ú °°ÀÌ Å¬¶óÀ̾ðÆ®°¡ »õ·Î¿î À§Ä¡¸¦ ¿äûÇϵµ·Ï ÇÑ´Ù:</p>
-
-<div class="example"><p><code>Redirect permanent /foo/
- http://www.example.com/bar/</code></p></div>
-
- <p>±×·¯¸é <code>www.example.com</code> ¼­¹öÀÇ <code>/foo/</code>·Î
- ½ÃÀÛÇÏ´Â URL-°æ·Î´Â <code>/foo/</code>¸¦ <code>/bar/</code>·Î
- ¹Ù²Û URL·Î ¸®´ÙÀÌ·º¼ÇµÈ´Ù. Ŭ¶óÀ̾ðÆ®¸¦ ¿ø·¡ ¼­¹ö¿Ü¿¡ ¾î¶²
- ´Ù¸¥ ¼­¹ö·Îµµ ¸®´ÙÀÌ·º¼ÇÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¶Ç, ¾ÆÆÄÄ¡´Â ´õ º¹ÀâÇÑ ÀçÀÛ¼º ¹®Á¦¸¦ À§ÇØ
- <code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code>
- Áö½Ã¾î¸¦ Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î, ´Ù¸¥ ¿äûÀº ±×´ë·Î µÎ°í »çÀÌÆ®
- ȨÆäÀÌÁö¿¡ ´ëÇÑ ¿äû¸¸À» ´Ù¸¥ »çÀÌÆ®·Î ¸®´ÙÀÌ·º¼ÇÇÏ·Á¸é:</p>
-
-<div class="example"><p><code>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</code></p></div>
-
- <p>Àӽ÷Π»çÀÌÆ®ÀÇ ¸ðµç ÆäÀÌÁö¸¦ ´Ù¸¥ »çÀÌÆ®ÀÇ Æ¯Á¤ ÆäÀÌÁö·Î
- ¸®´ÙÀÌ·º¼ÇÇÏ·Á¸é:</p>
-
-<div class="example"><p><code>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="proxy" id="proxy">¿ªÇÁ·Ï½Ã(Reverse Proxy)</a></h2>
-
-<p>¾ÆÆÄÄ¡´Â ´Ù¸¥ ¼­¹ö¿¡ ÀÖ´Â ¹®¼­¸¦ ¼­¹öÀÇ URL °ø°£À¸·Î °¡Á®¿Ã
-¼ö ÀÖ´Ù. ÀÌ °æ¿ì À¥¼­¹ö°¡ ¿ø°Ý ¼­¹ö¿¡¼­ ¹®¼­¸¦ °¡Á®¿Í¼­
-Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü´ÞÇÏ´Â ÇÁ·Ï½Ã ¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇϱ⶧¹®¿¡ ÀÌ·±
-¹æ¹ýÀ» <em>¿ªÇÁ·Ï½Ã(reverse proxying)</em>¶ó°í ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ
-ÀÔÀå¿¡¼­ ¿ªÇÁ·Ï½Ã ¼­¹ö°¡ ¹®¼­¸¦ º¸³»ÁÖ´Â °Íó·³ º¸À̹ǷΠÀϹÝ
-ÇÁ·Ï½Ã¿Í´Â ´Ù¸£´Ù.</p>
-
-<p>¾Æ·¡ ¼³Á¤¿¡¼­ Ŭ¶óÀ̾ðÆ®°¡ <code>/foo/</code>¿¡ ÀÖ´Â ¹®¼­¸¦
-¿äûÇϸé, ¼­¹ö´Â <code>internal.example.com</code>ÀÇ
-<code>/bar/</code> µð·ºÅ丮¿¡¼­ ¹®¼­¸¦ °¡Á®¿Í¼­ ¹®¼­°¡ ¸¶Ä¡
-¼­¹ö¿¡ ÀÖ¾ú´ø °Íó·³ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³½´Ù.</p>
-
-<div class="example"><p><code>
-ProxyPass /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverse /foo/ http://internal.example.com/bar/
-</code></p></div>
-
-<p><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code>´Â ¼­¹ö°¡
-ÀûÀýÇÑ ¹®¼­¸¦ °¡Á®¿Àµµ·Ï ¼³Á¤Çϸç, <code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> Áö½Ã¾î´Â
-<code>internal.example.com</code>ÀÌ º¸³»´Â ¸®´ÙÀÌ·º¼ÇÀ» ÀçÀÛ¼ºÇÏ¿©
-¸®´ÙÀÌ·º¼ÇÀÌ ÇöÀç ¼­¹öÀÇ ÀûÀýÇÑ µð·ºÅ丮¸¦ °¡¸®Å°µµ·Ï ÇÑ´Ù.
-¶Ç, <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>°ú
-<code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>˼
-°°Àº ¹æ¹ýÀ¸·Î ¿ø·¡ ¼­¹ö°¡ º¸³½ ÄíÅ°¸¦ ÀçÀÛ¼ºÇÑ´Ù.</p>
-<p>±×·¯³ª ¹®¼­ ¾È¿¡ ÀÖ´Â ¸µÅ©´Â ÀçÀÛ¼ºÇÏÁö ¾ÊÀ½À» ÁÖÀÇÇ϶ó.
-<code>internal.example.com</code>¿¡ ´ëÇÑ Àý´ë¸µÅ©´Â Ŭ¶óÀ̾ðÆ®°¡
-ÇÁ·Ï½Ã¼­¹ö°¡ ¾Æ´Ï¶ó <code>internal.example.com</code>À¸·Î Á÷Á¢
-¿äûÇÏ°Ô ÇÑ´Ù. Á¦»ïÀÚ°¡ ¸¸µç <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
-¸ðµâÀ» »ç¿ëÇÏ¿© HTML°ú XHTML¿¡ ÀÖ´Â ¸µÅ©¸¦ ÀçÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="rewrite" id="rewrite">ÀçÀÛ¼º ¿£Áø (Rewriting Engine)</a></h2>
-
- <p>´õ °­·ÂÇÑ Ä¡È¯ÀÌ ÇÊ¿äÇÒ¶§ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>ÀÇ
- ÀçÀÛ¼º ¿£ÁøÀÌ µµ¿òÀÌ µÈ´Ù. ÀÌ ¸ðµâÀÇ Áö½Ã¾î´Â ºê¶ó¿ìÀú Á¾·ù³ª
- Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò µî ¿äûÀÇ Æ¯Â¡À» °¡Áö°í ¾îµð¿¡ ÀÖ´Â
- ³»¿ëÀ» ¼­ºñ½ºÇÒÁö °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶Ç, mod_rewrite´Â ¿äûÀ»
- ¾î¶»°Ô ó¸®ÇÒÁö °áÁ¤ÇϱâÀ§ÇØ ¿ÜºÎ µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ̳ª
- ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀçÀÛ¼º ¿£ÁøÀº À§¿¡¼­ ´Ù·é ¼¼
- Á¾·ù ´ëÀÀ, Áï, ³»ºÎ ¸®´ÙÀÌ·º¼Ç (alias), ¿ÜºÎ ¸®´ÙÀÌ·º¼Ç,
- ÇÁ·Ï½Ã, ¸ðµÎ¸¦ Áö¿øÇÑ´Ù. mod_rewrite¸¦ »ç¿ëÇÏ´Â ½ÇÁ¦ ¿¹´Â
- <a href="misc/rewriteguide.html">URL Á¦ÀÛ¼º Áöħ¼­</a>¿¡¼­
- ¼³¸íÇÑ´Ù.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="notfound" id="notfound">File Not Found</a></h2>
-
- <p>°á±¹ ¿äûÇÑ URL¿¡ ´ëÀÀÇÏ´Â ÆÄÀÏÀ» ÆÄÀϽýºÅÛ¿¡¼­ ãÁö
- ¸øÇÑ °æ¿ìÀÌ´Ù. ¿©·¯ °¡Áö ÀÌÀ¯°¡ ÀÖ´Ù. ¾î¶² °æ¿ì ¹®¼­¸¦
- ´Ù¸¥ °÷À¸·Î ¿Å°å±â ¶§¹®ÀÏ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì Ŭ¶óÀ̾ðÆ®¿¡°Ô
- <a href="#redirect">URL ¸®´ÙÀÌ·º¼Ç</a>À¸·Î ÀÚ¿øÀÇ »õ·Î¿î
- À§Ä¡¸¦ ¾Ë·ÁÁÖ´Â ¹æ¹ýÀÌ Á¦ÀÏ ÁÁ´Ù. ±×·¯¸é ÀÚ¿øÀ» ¿Å°Üµµ
- ¿À·¡µÈ ºÏ¸¶Å©³ª ¸µÅ©°¡ °è¼Ó À¯È¿ÇÏ´Ù.</p>
-
- <p>"File Not Found" ¿À·ùÀÇ ´Ù¸¥ ÀϹÝÀûÀÎ ¿øÀÎÀº ºê¶ó¿ìÀú¿¡
- Á÷Á¢ ȤÀº HTML ¸µÅ©¿¡ URLÀÌ À߸ø ÀÔ·ÂµÈ °æ¿ìÀÌ´Ù. ¾ÆÆÄÄ¡´Â
- <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> (¸ÂÃã¹ýÀÌ Æ²¸®Áö ¾Ê¾ÒÀ½) ¸ðµâ·Î
- ÀÌ¿Í °°Àº ¹®Á¦¸¦ µ½´Â´Ù. ÀÌ ¸ðµâÀ» »ç¿ëÇϸé "File Not Found"
- ¿À·ù°¡ ¹ß»ýÇÏ´Â °æ¿ì ºñ½ÁÇÑ ÆÄÀϸíÀ» °¡Áø ÀÚ¿øÀ» ã´Â´Ù.
- ¸¸¾à ¹ß°ßÇϸé mod_spelingÀº Ŭ¶óÀ̾ðÆ®¸¦ ¿Ã¹Ù¸¥ À§Ä¡·Î
- HTTP ¸®´ÙÀÌ·º¼ÇÇÑ´Ù. "ºñ½ÁÇÑ" ÆÄÀÏÀÌ ¿©·¯°³ ÀÖ´Ù¸é
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸ñ·ÏÀ» º¸³½´Ù.</p>
-
- <p>mod_spelingÀÇ Æ¯È÷ À¯¿ëÇÑ ÀåÁ¡Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í
- ÆÄÀϸíÀ» ºñ±³ÇÏ´Â ±â´ÉÀÌ´Ù. ±×·¡¼­ À¯´Ð½º ÆÄÀϽýºÅÛ°ú URLÀÇ
- ´ë¼Ò¹®ÀÚ ¼ºÁúÀ» ¾ËÁö¸øÇÏ´Â »ç¿ëÀÚ°¡ ÀÖ´Â ½Ã½ºÅÛ¿¡ µµ¿òÀÌ
- µÈ´Ù. ±×·¯³ª mod_spelingÀÌ ÀÚÁÖ URLÀ» °íÃľßÇÑ´Ù¸é, "À߸øµÈ"
- ¿äû¶§¸¶´Ù URL ¸®´ÙÀÌ·º¼Ç°ú Ŭ¶óÀ̾ðÆ®ÀÇ »õ·Î¿î ¿äûÀÌ
- ÀϾ¹Ç·Î ¼­¹ö¿¡ ºÎ´ãÀÌ µÈ´Ù.</p>
-
- <p>ã´Â ½Ãµµ°¡ ¸ðµÎ ½ÇÆÐÇÏ¸é ¾ÆÆÄÄ¡´Â HTTP status code 404
- (file not found) ¿À·ùÆäÀÌÁö¸¦ º¸³½´Ù. ÀÌ ÆäÀÌÁöÀÇ ³»¿ëÀº
- <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> Áö½Ã¾î·Î
- Á¶ÀýÇϸç, <a href="custom-error.html">»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä</a>
- ¹®¼­¸¦ Âü°íÇÏ¿© »ç¿ëÀÚÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/urlmapping.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="./ja/urlmapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="./ko/urlmapping.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">¸ðµâ</a> | <a href="./mod/directives.html">Áö½Ã¾îµé</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">¿ë¾î</a> | <a href="./sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/urlmapping.xml b/docs/manual/urlmapping.xml
deleted file mode 100644
index 6a7e58f1ef..0000000000
--- a/docs/manual/urlmapping.xml
+++ /dev/null
@@ -1,305 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="urlmapping.xml.meta">
-
- <title>Mapping URLs to Filesystem Locations</title>
-
- <summary>
- <p>This document explains how Apache uses the URL of a request
- to determine the filesystem location from which to serve a
- file.</p>
- </summary>
-
-<section id="related"><title>Related Modules and Directives</title>
-
-<related>
-<modulelist>
-<module>mod_alias</module>
-<module>mod_proxy</module>
-<module>mod_rewrite</module>
-<module>mod_userdir</module>
-<module>mod_speling</module>
-<module>mod_vhost_alias</module>
-</modulelist>
-<directivelist>
-<directive module="mod_alias">Alias</directive>
-<directive module="mod_alias">AliasMatch</directive>
-<directive module="mod_speling">CheckSpelling</directive>
-<directive module="core">DocumentRoot</directive>
-<directive module="core">ErrorDocument</directive>
-<directive module="core">Options</directive>
-<directive module="mod_proxy">ProxyPass</directive>
-<directive module="mod_proxy">ProxyPassReverse</directive>
-<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
-<directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
-<directive module="mod_alias">Redirect</directive>
-<directive module="mod_alias">RedirectMatch</directive>
-<directive module="mod_rewrite">RewriteCond</directive>
-<directive module="mod_rewrite">RewriteMatch</directive>
-<directive module="mod_alias">ScriptAlias</directive>
-<directive module="mod_alias">ScriptAliasMatch</directive>
-<directive module="mod_userdir">UserDir</directive>
-</directivelist>
-</related>
-</section>
-
-<section id="documentroot"><title>DocumentRoot</title>
-
- <p>In deciding what file to serve for a given request, Apache's
- default behavior is to take the URL-Path for the request (the part
- of the URL following the hostname and port) and add it to the end
- of the <directive module="core">DocumentRoot</directive> specified
- in your configuration files. Therefore, the files and directories
- underneath the <directive module="core">DocumentRoot</directive>
- make up the basic document tree which will be visible from the
- web.</p>
-
- <p>Apache is also capable of <a href="vhosts/">Virtual
- Hosting</a>, where the server receives requests for more than one
- host. In this case, a different <directive
- module="core">DocumentRoot</directive> can be specified for each
- virtual host, or alternatively, the directives provided by the
- module <module>mod_vhost_alias</module> can
- be used to dynamically determine the appropriate place from which
- to serve content based on the requested IP address or
- hostname.</p>
-</section>
-
-<section id="outside"><title>Files Outside the DocumentRoot</title>
-
- <p>There are frequently circumstances where it is necessary to
- allow web access to parts of the filesystem that are not strictly
- underneath the <directive
- module="core">DocumentRoot</directive>. Apache offers several
- different ways to accomplish this. On Unix systems, symbolic links
- can bring other parts of the filesystem under the <directive
- module="core">DocumentRoot</directive>. For security reasons,
- Apache will follow symbolic links only if the <directive
- module="core">Options</directive> setting for the relevant
- directory includes <code>FollowSymLinks</code> or
- <code>SymLinksIfOwnerMatch</code>.</p>
-
- <p>Alternatively, the <directive
- module="mod_alias">Alias</directive> directive will map any part
- of the filesystem into the web space. For example, with</p>
-
-<example>Alias /docs /var/web</example>
-
- <p>the URL <code>http://www.example.com/docs/dir/file.html</code>
- will be served from <code>/var/web/dir/file.html</code>. The
- <directive module="mod_alias">ScriptAlias</directive> directive
- works the same way, with the additional effect that all content
- located at the target path is treated as CGI scripts.</p>
-
- <p>For situations where you require additional flexibility, you
- can use the <directive module="mod_alias">AliasMatch</directive> and
- <directive module="mod_alias">ScriptAliasMatch</directive>
- directives to do powerful regular-expression based matching and
- substitution. For example,</p>
-
-<example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</example>
-
- <p>will map a request to
- <code>http://example.com/~user/cgi-bin/script.cgi</code> to the
- path <code>/home/user/cgi-bin/script.cgi</code> and will treat
- the resulting file as a CGI script.</p>
-</section>
-
-<section id="user"><title>User Directories</title>
-
- <p>Traditionally on Unix systems, the home directory of a
- particular <em>user</em> can be referred to as
- <code>~user/</code>. The module <module>mod_userdir</module>
- extends this idea to the web by allowing files under each user's
- home directory to be accessed using URLs such as the
- following.</p>
-
-<example>http://www.example.com/~user/file.html</example>
-
- <p>For security reasons, it is inappropriate to give direct
- access to a user's home directory from the web. Therefore, the
- <directive module="mod_userdir">UserDir</directive> directive
- specifies a directory underneath the user's home directory
- where web files are located. Using the default setting of
- <code>Userdir public_html</code>, the above URL maps to a file
- at a directory like
- <code>/home/user/public_html/file.html</code> where
- <code>/home/user/</code> is the user's home directory as
- specified in <code>/etc/passwd</code>.</p>
-
- <p>There are also several other forms of the
- <code>Userdir</code> directive which you can use on systems
- where <code>/etc/passwd</code> does not contain the location of
- the home directory.</p>
-
- <p>Some people find the "~" symbol (which is often encoded on the
- web as <code>%7e</code>) to be awkward and prefer to use an
- alternate string to represent user directories. This functionality
- is not supported by mod_userdir. However, if users' home
- directories are structured in a regular way, then it is possible
- to use the <directive module="mod_alias">AliasMatch</directive>
- directive to achieve the desired effect. For example, to make
- <code>http://www.example.com/upages/user/file.html</code> map to
- <code>/home/user/public_html/file.html</code>, use the following
- <code>AliasMatch</code> directive:</p>
-
-<example>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
- /home/$1/public_html/$2</example>
-</section>
-
-<section id="redirect"><title>URL Redirection</title>
-
- <p>The configuration directives discussed in the above sections
- tell Apache to get content from a specific place in the filesystem
- and return it to the client. Sometimes, it is desirable instead to
- inform the client that the requested content is located at a
- different URL, and instruct the client to make a new request with
- the new URL. This is called <em>redirection</em> and is
- implemented by the <directive
- module="mod_alias">Redirect</directive> directive. For example, if
- the contents of the directory <code>/foo/</code> under the
- <directive module="core">DocumentRoot</directive> are moved
- to the new directory <code>/bar/</code>, you can instruct clients
- to request the content at the new location as follows:</p>
-
-<example>Redirect permanent /foo/
- http://www.example.com/bar/</example>
-
- <p>This will redirect any URL-Path starting in
- <code>/foo/</code> to the same URL path on the
- <code>www.example.com</code> server with <code>/bar/</code>
- substituted for <code>/foo/</code>. You can redirect clients to
- any server, not only the origin server.</p>
-
- <p>Apache also provides a <directive
- module="mod_alias">RedirectMatch</directive> directive for more
- complicated rewriting problems. For example, to redirect requests
- for the site home page to a different site, but leave all other
- requests alone, use the following configuration:</p>
-
-<example>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</example>
-
- <p>Alternatively, to temporarily redirect all pages on one site
- to a particular page on another site, use the following:</p>
-
-<example>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</example>
-</section>
-
-<section id="proxy"><title>Reverse Proxy</title>
-
-<p>Apache also allows you to bring remote documents into the URL space
-of the local server. This technique is called <em>reverse
-proxying</em> because the web server acts like a proxy server by
-fetching the documents from a remote server and returning them to the
-client. It is different from normal proxying because, to the client,
-it appears the documents originate at the reverse proxy server.</p>
-
-<p>In the following example, when clients request documents under the
-<code>/foo/</code> directory, the server fetches those documents from
-the <code>/bar/</code> directory on <code>internal.example.com</code>
-and returns them to the client as if they were from the local
-server.</p>
-
-<example>
-ProxyPass /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverse /foo/ http://internal.example.com/bar/
-ProxyPassReverseCookieDomain internal.example.com public.example.com
-ProxyPassReverseCookiePath /foo/ /bar/
-</example>
-
-<p>The <directive module="mod_proxy">ProxyPass</directive> configures
-the server to fetch the appropriate documents, while the
-<directive module="mod_proxy">ProxyPassReverse</directive>
-directive rewrites redirects originating at
-<code>internal.example.com</code> so that they target the appropriate
-directory on the local server. Similarly, the
-<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
-and <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
-rewrite cookies set by the backend server.</p>
-<p>It is important to note, however, that
-links inside the documents will not be rewritten. So any absolute
-links on <code>internal.example.com</code> will result in the client
-breaking out of the proxy server and requesting directly from
-<code>internal.example.com</code>. A third-party module
-<a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
-is available to rewrite links in HTML and XHTML.</p>
-</section>
-
-<section id="rewrite"><title>Rewriting Engine</title>
-
- <p>When even more powerful substitution is required, the rewriting
- engine provided by <module>mod_rewrite</module>
- can be useful. The directives provided by this module use
- characteristics of the request such as browser type or source IP
- address in deciding from where to serve content. In addition,
- mod_rewrite can use external database files or programs to
- determine how to handle a request. The rewriting engine is capable
- of performing all three types of mappings discussed above:
- internal redirects (aliases), external redirects, and proxying.
- Many practical examples employing mod_rewrite are discussed in the
- <a href="misc/rewriteguide.html">URL Rewriting Guide</a>.</p>
-</section>
-
-<section id="notfound"><title>File Not Found</title>
-
- <p>Inevitably, URLs will be requested for which no matching
- file can be found in the filesystem. This can happen for
- several reasons. In some cases, it can be a result of moving
- documents from one location to another. In this case, it is
- best to use <a href="#redirect">URL redirection</a> to inform
- clients of the new location of the resource. In this way, you
- can assure that old bookmarks and links will continue to work,
- even though the resource is at a new location.</p>
-
- <p>Another common cause of "File Not Found" errors is
- accidental mistyping of URLs, either directly in the browser,
- or in HTML links. Apache provides the module
- <module>mod_speling</module> (sic) to help with
- this problem. When this module is activated, it will intercept
- "File Not Found" errors and look for a resource with a similar
- filename. If one such file is found, mod_speling will send an
- HTTP redirect to the client informing it of the correct
- location. If several "close" files are found, a list of
- available alternatives will be presented to the client.</p>
-
- <p>An especially useful feature of mod_speling, is that it will
- compare filenames without respect to case. This can help
- systems where users are unaware of the case-sensitive nature of
- URLs and the unix filesystem. But using mod_speling for
- anything more than the occasional URL correction can place
- additional load on the server, since each "incorrect" request
- is followed by a URL redirection and a new request from the
- client.</p>
-
- <p>If all attempts to locate the content fail, Apache returns
- an error page with HTTP status code 404 (file not found). The
- appearance of this page is controlled with the
- <directive module="core">ErrorDocument</directive> directive
- and can be customized in a flexible manner as discussed in the
- <a href="custom-error.html">Custom error responses</a>
- document.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/urlmapping.xml.ja b/docs/manual/urlmapping.xml.ja
deleted file mode 100644
index 90886eeeed..0000000000
--- a/docs/manual/urlmapping.xml.ja
+++ /dev/null
@@ -1,298 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="urlmapping.xml.meta">
-
- <title>URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%W(B</title>
-
- <summary>
- <p>$B$3$NJ8=q$O(B Apache $B$,%j%/%(%9%H$N(B URL $B$+$iAw?.$9$k%U%!%$%k$N(B
- $B%U%!%$%k%7%9%F%`>e$N0LCV$r7hDj$9$kJ}K!$r@bL@$7$^$9!#(B</p>
- </summary>
-
-<section id="related"><title>$B4XO"$9$k%b%8%e!<%k$H%G%#%l%/%F%#%V(B</title>
-
-<related>
-<modulelist>
-<module>mod_alias</module>
-<module>mod_proxy</module>
-<module>mod_rewrite</module>
-<module>mod_userdir</module>
-<module>mod_speling</module>
-<module>mod_vhost_alias</module>
-</modulelist>
-<directivelist>
-<directive module="mod_alias">Alias</directive>
-<directive module="mod_alias">AliasMatch</directive>
-<directive module="mod_speling">CheckSpelling</directive>
-<directive module="core">DocumentRoot</directive>
-<directive module="core">ErrorDocument</directive>
-<directive module="core">Options</directive>
-<directive module="mod_proxy">ProxyPass</directive>
-<directive module="mod_proxy">ProxyPassReverse</directive>
-<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
-<directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
-<directive module="mod_alias">Redirect</directive>
-<directive module="mod_alias">RedirectMatch</directive>
-<directive module="mod_rewrite">RewriteCond</directive>
-<directive module="mod_rewrite">RewriteMatch</directive>
-<directive module="mod_alias">ScriptAlias</directive>
-<directive module="mod_alias">ScriptAliasMatch</directive>
-<directive module="mod_userdir">UserDir</directive>
-</directivelist>
-</related>
-</section>
-
-<section id="documentroot"><title>DocumentRoot</title>
-
- <p>$B%j%/%(%9%H$KBP$7$F$I$N%U%!%$%k$rAw?.$9$k$+$r7hDj$9$k$H$-$N(B
- Apache $B$N%G%U%)%k%H$NF0:n$O!"%j%/%(%9%H$N(B URL-Path (URL $B$N%[%9%HL>$H(B
- $B%]!<%HHV9f$N8e$KB3$/ItJ,(B) $B$r<h$j=P$7$F@_Dj%U%!%$%k$G;XDj$5$l$F$$$k(B
- <directive module="core">DocumentRoot</directive>
- $B$N:G8e$KDI2C$9$k!"$H$$$&$b$N$G$9!#$G$9$+$i!"(B
- <directive module="core">DocumentRoot</directive>
- $B$N2<$N%G%#%l%/%H%j$d%U%!%$%k$,%&%'%V$+$i8+$($k4pK\$N%I%-%e%a%s%H$NLZ9=B$$r(B
- $B$J$7$^$9!#(B</p>
-
- <p>Apache $B$K$O%5!<%P$,J#?t$N%[%9%H$X$N%j%/%(%9%H$r<u$1<h$k(B
- <a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $B$N5!G=$b$"$j$^$9!#(B
- $B$3$N>l9g!"$=$l$>$l$N%P!<%A%c%k%[%9%H$KBP$7$F0c$&(B
- <directive module="core">DocumentRoot</directive>
- $B$r;XDj$9$k$3$H$,$G$-$^$9!#$^$?!"(B<module>mod_vhost_alias</module>
- $B%b%8%e!<%k$K$h$jDs6!$5$l$k%G%#%l%/%F%#%V$r;H$C$F!"(B
- $BAw?.$9$k$?$a$N%3%s%F%s%D$N>l=j$r%j%/%(%9%H$5$l$?(B IP
- $B%"%I%l%9$d%[%9%HL>$+$iF0E*$K7h$a$k$3$H$b$G$-$^$9!#(B</p>
-</section>
-
-<section id="outside"><title>DocumentRoot $B30$N%U%!%$%k(B</title>
-
- <p>$B%U%!%$%k%7%9%F%`>e$N!"(B
- $B87L)$K$O(B <directive module="core">DocumentRoot</directive>
- $B$N2<$K$O$J$$ItJ,$X$N%&%'%V%"%/%;%9$r5v2D$9$kI,MW$,$"$k(B
- $B>l9g$,$h$/$"$j$^$9!#(BApache $B$O$3$N$?$a$KJ#?t$NJ}K!$rMQ0U$7$F$$$^$9!#(B
- Unix $B%7%9%F%`$G$O!"%U%!%$%k%7%9%F%`$NB>$NItJ,$r%7%s%\%j%C%/%j%s%/$r(B
- $B;H$C$F(B <directive module="core">DocumentRoot</directive>
- $B$N2<$K;}$C$F$/$k$3$H$,$G$-$^$9!#%;%-%e%j%F%#>e$NM}M3$K$h$j!"(B
- Apache $B$O3:Ev$9$k%G%#%l%/%H%j$N(B
- <directive module="core">Options</directive> $B$N@_Dj$K(B
- <code>FollowSymLinks</code> $B$+(B <code>SymLinksIfOwnerMatch</code> $B$,(B
- $B$"$k>l9g$K$N$_%7%s%\%j%C%/%j%s%/$r$?$I$j$^$9!#(B</p>
-
- <p>$BBe$o$j$NJ}K!$H$7$F!"(B<directive module="mod_alias">Alias</directive>
- $B%G%#%l%/%F%#%V$r;H$C$F%U%!%$%k%7%9%F%`$NG$0U$NItJ,$r%&%'%V$N6u4V$K(B
- $B%^%C%W$G$-$^$9!#$?$H$($P!"(B</p>
-
-<example>Alias /docs /var/web</example>
-
- <p>$B$H$$$&@_Dj$N$H$-$O!"(BURL
- <code>http://www.example.com/docs/dir/file.html</code> $B$K$O(B
- <code>/var/web/dir/file.html</code> $B$,Aw?.$5$l$^$9!#(B
- <directive module="mod_alias">ScriptAlias</directive> $B$b!"(B
- $BBP>]$H$J$C$F$$$k%Q%9$,(B CGI $B%9%/%j%W%H$H$7$F07$o$l$k$H$$$&DI2C$N(B
- $B8z2L0J30$OF1$8$h$&$KF0:n$7$^$9!#(B</p>
-
- <p>$B$b$C$H=@Fp$J@_Dj$,I,MW$J>u67$G$O!"(B
- <directive module="mod_alias">AliasMatch</directive> $B%G%#%l%/%F%#%V$d(B
- <directive module="mod_alias">ScriptAliasMatch</directive> $B%G%#%l%/%F%#%V(B
- $B$r;H$C$F6/NO$J@55,I=8=$K4p$E$$$?%^%C%A$HCV49$r9T$J$&$3$H$,$G$-$^$9!#(B
- $B$?$H$($P!"(B</p>
-
-<example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</example>
-
- <p>$B$O(B <code>http://example.com/~user/cgi-bin/script.cgi</code> $B$X$N(B
- $B%j%/%(%9%H$r(B <code>/home/user/cgi-bin/script.cgi</code> $B$H$$$&%Q%9$X(B
- $B%^%C%W$7!"$3$N%^%C%W$N7k2L$H$7$F$N%U%!%$%k$r(B CGI $B%9%/%j%W%H$H$7$F(B
- $B07$$$^$9!#(B</p>
-</section>
-
-<section id="user"><title>$B%f!<%6%G%#%l%/%H%j(B</title>
-
- <p>$BEAE}E*$K(B Unix $B%7%9%F%`$G$O%f!<%6(B <em>user</em> $B$N%[!<%`%G%#%l%/%H%j$r(B
- <code>~user/</code> $B$H$7$F;2>H$G$-$^$9!#(B<module>mod_userdir</module>
- $B%b%8%e!<%k$O$3$N35G0$r%&%'%V$K3HD%$7$F!"(B
- $B$=$l$>$l$N%f!<%6$N%[!<%`%G%#%l%/%H%j$N%U%!%$%k$r(B
- $B0J2<$N$h$&$J(B URL $B$r;H$C$F%"%/%;%9$G$-$k$h$&$K$7$^$9!#(B</p>
-
-<example>http://www.example.com/~user/file.html</example>
-
- <p>$B%;%-%e%j%F%#$N4QE@$+$i!"%&%'%V$+$i%f!<%6$N%[!<%`%G%#%l%/%H%j$X(B
- $BD>@\%"%/%;%9$G$-$k$h$&$K$9$k$3$H$OE,@Z$G$O$"$j$^$;$s!#$G$9$+$i!"(B
- <directive module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$K$O(B
- $B%f!<%6$N%[!<%`%G%#%l%/%H%j$N2<$N!"%&%'%V%U%!%$%k$N(B
- $BCV$+$l$F$$$k%G%#%l%/%H%j$r;XDj$7$^$9!#%G%U%)%k%H$N@_Dj$N(B
- <code>Userdir public_html</code> $B$r;H$&$H!">e$N(B URL $B$O(B
- <code>/home/user/public_html/file.html</code> $B$H$$$&$h$&$J%U%!%$%k$K(B
- $B%^%C%W$5$l$^$9!#$3$3$G!"(B<code>/home/user/</code> $B$O(B
- <code>/etc/passwd</code> $B$G;XDj$5$l$F$$$k%f!<%6$N%[!<%`%G%#%l%/%H%j$G$9!#(B</p>
-
- <p><directive module="mod_userdir">Userdir</directive> $B$K$O!"(B
- <code>/etc/passwd</code> $B$K%[!<%`%G%#%l%/%H%j$N0LCV$,=q$+$l$F$$$J$$(B
- $B%7%9%F%`$G$b;H$&$3$H$N$G$-$kB>$N7A<0$b$"$j$^$9!#(B</p>
-
- <p>$BCf$K$O%7%s%\%k(B "~" (<code>%7e</code> $B$N$h$&$KId9f2=$5$l$k$3$H$,B?$$(B)
- $B$r3J9%$,0-$$$H;W$C$F!"%f!<%6$N%G%#%l%/%H%j$rI=$9$?$a$KJL$NJ8;zNs$N(B
- $B;HMQ$r9%$`?M$,$$$^$9!#(Bmod_userdir $B$O$3$N5!G=$r%5%]!<%H$7$F$$$^$;$s!#(B
- $B$7$+$7!"%f!<%6$N%[!<%`%G%#%l%/%H%j$,5,B'E*$J9=@.$N$H$-$O!"(B
- <directive module="mod_alias">AliasMatch</directive> $B$r;H$C$FK>$_$N(B
- $B8z2L$rC#@.$9$k$3$H$,$G$-$^$9!#$?$H$($P!"(B
- <code>http://www.example.com/upages/user/file.html</code> $B$,(B
- <code>/home/user/public_html/file.html</code> $B$K%^%C%W$5$l$k$h$&$K$9$k$K$O!"(B
- $B0J2<$N$h$&$K(B <code>AliasMatch</code> $B%G%#%l%/%F%#%V$r;H$$$^$9(B:</p>
-
-<example>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
- /home/$1/public_html/$2</example>
-</section>
-
-<section id="redirect"><title>URL $B%j%@%$%l%/%7%g%s(B</title>
-
- <p>$B>e$N@a$G@bL@$7$?@_DjMQ$N%G%#%l%/%F%#%V$O(B Apache $B$K(B
- $B%U%!%$%k%7%9%F%`$NFCDj$N>l=j$+$i%3%s%F%s%D$r<h$C$F$-$F(B
- $B%/%i%$%"%s%H$KAw$jJV$9$h$&$K$7$^$9!#$H$-$K$O!"$=$NBe$o$j$K(B
- $B%/%i%$%"%s%H$K%j%/%(%9%H$5$l$?%3%s%F%s%D$OJL$N(B URL $B$K$"$k$3$H$r(B
- $BCN$i$;$F!"%/%i%$%"%s%H$,?7$7$$(B URL $B$X?7$7$$%j%/%(%9%H$r9T$J$&$h$&$K(B
- $B$9$kJ}$,K>$^$7$$$3$H$,$"$j$^$9!#$3$l$O(B<em>$B%j%@%$%l%/%7%g%s(B</em>$B$H(B
- $B8F$P$l$F$$$F!"(B<directive module="mod_alias">Redirect</directive>
- $B%G%#%l%/%F%#%V$K$h$j<BAu$5$l$F$$$^$9!#$?$H$($P!"(B
- <directive module="core">DocumentRoot</directive> $B$N2<$N%G%#%l%/%H%j(B
- <code>/foo/</code> $B$,?7$7$$%G%#%l%/%H%j(B <code>/bar/</code> $B$K0\F0$7$?$H$-$O!"(B
- $B0J2<$N$h$&$K$7$F%/%i%$%"%s%H$,?7$7$$>l=j$N%3%s%F%s%D$r%j%/%(%9%H$9$k$h$&$K(B
- $B;X<($9$k$3$H$,$G$-$^$9(B:</p>
-
-<example>Redirect permanent /foo/
- http://www.example.com/bar/</example>
-
- <p>$B$3$l$O!"(B<code>/foo/</code> $B$G;O$^$k$9$Y$F$N(B URL-Path $B$r!"(B
- <code>www.example.com</code> $B%5!<%P$N(B <code>/bar/</code> $B$,(B
- <code>/foo/</code> $B$KCV49$5$l$?$b$N$K%j%@%$%l%/%H$7$^$9!#(B
- $B%5!<%P$O<+J,<+?H$N%5!<%P$@$1$G$J$/!"$I$N%5!<%P$K$G$b%/%i%$%"%s%H$r(B
- $B%j%@%$%l%/%H$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>Apache $B$O$h$jJ#;($J=q$-49$($NLdBj$N$?$a$K!"(B
- <directive module="mod_alias">RedirectMatch</directive> $B%G%#%l%/%F%#%V$r(B
- $BDs6!$7$F$$$^$9!#$?$H$($P!"%5%$%H$N%[!<%`%Z!<%8$r0c$&%5%$%H$K%j%@%$%l%/%H(B
- $B$9$k$1$l$I!"B>$N%j%/%(%9%H$O$=$N$^$^07$&!"$H$$$&$H$-$O0J2<$N@_Dj$r(B
- $B;H$$$^$9(B:</p>
-
-<example>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</example>
-
- <p>$B$"$k$$$O!"0l;~E*$K%5%$%H$N$9$Y$F$N%Z!<%8$rB>$N%5%$%H$NFCDj$N(B
- $B%Z!<%8$X%j%@%$%l%/%H$9$k$H$-$O!"0J2<$r;H$$$^$9(B:</p>
-
-<example>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</example>
-</section>
-
-<section id="proxy"><title>$B%j%P!<%9%W%m%-%7(B</title>
-
-<p>Apache $B$O1s3VCO$K$"$k%I%-%e%a%s%H$r%m!<%+%k$N%5!<%P$N(B URL $B6u4V$K(B
-$B;}$C$F$/$k$3$H$b$G$-$^$9!#$3$N<jK!$O(B<em>$B%j%P!<%9%W%m%-%7(B</em>$B$H8F$P$l$F$$$^$9!#(B
-$B%&%'%V%5!<%P$,1s3VCO$N%I%-%e%a%s%H$r<hF@$7$F%/%i%$%"%s%H$KAw$jJV$9$N$,(B
-$B%W%m%-%7%5!<%P$NF0:n$N$h$&$K8+$($k$+$i$G$9!#%/%i%$%"%s%H$K$O%I%-%e%a%s%H$,(B
-$B%j%P!<%9%W%m%-%7%5!<%P$+$iAw$i$l$F$-$F$$$k$h$&$K8+$($kE@$,DL>o$N(B
-$B%W%m%-%7$H$O0[$J$j$^$9!#(B</p>
-
-<p>$B<!$NNc$G$O!"%/%i%$%"%s%H$,(B <code>/foo/</code> $B%G%#%l%/%H%j$N2<$K$"$k(B
-$B%I%-%e%a%s%H$r%j%/%(%9%H$9$k$H!"%5!<%P$,(B <code>internal.example.com</code> $B$N(B
-<code>/bar/</code> $B%G%#%l%/%H%j$+$i<hF@$7$F!"$5$b%m!<%+%k%5!<%P$+$i$N(B
-$B%I%-%e%a%s%H$N$h$&$K$7$F%/%i%$%"%s%H$KJV$7$^$9!#(B</p>
-
-<example>
-ProxyPass /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
-ProxyPassReverseCookiePath /foo/ /bar/
-</example>
-
-<p><directive module="mod_proxy">ProxyPass</directive> $B%G%#%l%/%F%#%V$O(B
-$B%5!<%P$,E,@Z$J%I%-%e%a%s%H$r<hF@$9$k$h$&$K@_Dj$7!"(B
-<directive module="mod_proxy">ProxyPassReverse</directive> $B%G%#%l%/%F%#%V$O(B
-<code>internal.example.com</code> $B$+$i$N%j%@%$%l%/%H$,%m!<%+%k%5!<%P$N(B
-$BE,@Z$J%G%#%l%/%H%j$r;X$9$h$&$K=q$-49$($^$9!#(B
-$BF1MM$K(B <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
-$B$H(B <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
-$B$G%P%C%/%(%s%IB&%5!<%P$NH/9T$7$?(B Cookie $B$r=q$-49$($k$3$H$,$G$-$^$9!#(B</p>
-<p>$B$?$@$7!"%I%-%e%a%s%H$NCf$N%j%s%/$O=q$-49$($i$l$J$$!"(B
-$B$H$$$&$3$H$OCN$C$F$*$$$F$/$@$5$$!#(B
-$B$G$9$+$i!"(B<code>internal.example.com</code> $B$X$N@dBP%Q%9$K$h$k%j%s%/$G$O!"(B
-$B%/%i%$%"%s%H$,%W%m%-%7%5!<%P$rH4$1=P$7$F(B <code>internal.example.com</code> $B$K(B
-$BD>@\%j%/%(%9%H$rAw$k!"$H$$$&$3$H$K$J$j$^$9!#(B
-$B%5!<%I%Q!<%F%#@=%b%8%e!<%k$N(B <a
-href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
-$B$O!"(BHTML $B$H(B XHTML $BCf$N%j%s%/$r=q$-49$($k$3$H$,$G$-$^$9!#(B</p>
-</section>
-
-<section id="rewrite"><title>$B%j%i%$%H%(%s%8%s(B</title>
-
- <p>$B$h$j0lAX6/NO$JCV49$,I,MW$J$H$-$O!"(B<module>mod_rewrite</module>
- $B$,Ds6!$9$k%j%i%$%H%(%s%8%s$,Lr$KN)$D$G$7$g$&!#(B
- $B$3$N%b%8%e!<%k$K$h$jDs6!$5$l$k%G%#%l%/%F%#%V$O(B
- $B%V%i%&%6$N<oN`!"%j%/%(%9%H85$N(B IP $B%"%I%l%9$J$I$N%j%/%(%9%H$NFCD'$r(B
- $B;H$C$FAw$jJV$9%3%s%F%s%D$N>l=j$r7h$a$^$9!#$5$i$K!"(B<module>mod_rewrite</module>
- $B$O30It$N%G!<%?%Y!<%9%U%!%$%k$d%W%m%0%i%`$r;H$C$F%j%/%(%9%H$N07$$J}$r(B
- $B7h$a$k$3$H$b$G$-$^$9!#%j%i%$%H%(%s%8%s$O>e$G5s$2$i$l$F$$$k;0$D$N%^%C%T%s%0(B
- $B$9$Y$F$r9T$J$&$3$H$,$G$-$^$9(B: $BFbIt$N%j%@%$%l%/%H(B ($B%(%$%j%"%9(B)$B!"(B
- $B30It$N%j%@%$%l%/%H!"%W%m%-%7$G$9!#(Bmod_rewrite $B$r;H$&B?$/$N<BMQE*$JNc$O(B
- <a href="misc/rewriteguide.html">URL $B%j%i%$%H%,%$%I(B</a>
- $B$G@bL@$5$l$F$$$^$9!#(B</p>
-</section>
-
-<section id="notfound"><title>File Not Found</title>
-
- <p>$BI,$:!"%j%/%(%9%H$5$l$?(B URL $B$KBP1~$9$k%U%!%$%k$,%U%!%$%k%7%9%F%`$K(B
- $BL5$$$H$$$&>l9g$,H/@8$7$^$9!#$3$l$,5/$3$k$N$K$O$$$/$D$+$NM}M3$,$"$j$^$9!#(B
- $B>l9g$K$h$C$F$O!"%I%-%e%a%s%H$rJL$N>l=j$K0\F0$7$?7k2L$G$"$k$3$H$,$"$j$^$9!#(B
- $B$3$N>l9g$O!"%/%i%$%"%s%H$K%j%=!<%9$N?7$7$$0LCV$rCN$i$;$k$?$a$K(B
- <a href="#redirect">URL $B%j%@%$%l%/%7%g%s(B</a>$B$r;H$&$N$,:GA1$NJ}K!$G$9!#(B
- $B$=$&$9$k$3$H$K$h$C$F!"%j%=!<%9$O?7$7$$0LCV$K0\F0$7$F$$$k$1$l$I$b!"(B
- $B8E$$%V%C%/%^!<%/$d%j%s%/$,F0:n$7B3$1$k$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
- <p>"File Not Found" $B%(%i!<$N$b$&0l$D$N$h$/$"$kM}M3$O!"(B
- $B%V%i%&%6$X$ND>@\F~NO$d(B HTML $B%j%s%/$+$i$N6vH/E*$J(B URL $B$NF~NO4V0c$$$G$9!#(B
- Apache $B$O$3$NLdBj$r2~A1$9$k$?$a$K!"(B<module>mod_speling</module>
- $B%b%8%e!<%k(B ($B0U?^E*$JDV$j4V0c$$(B)
- ($BLuCm(B: $B@5$7$/$O(B spelling) $B$rDs6!$7$F$$$^$9!#$3$N%b%8%e!<%k$,(B
- $B;HMQ$5$l$F$$$k$H$-$O!"(B"File Not Found" $B%(%i!<$r2#<h$j$7$F!"(B
- $B;w$?%U%!%$%kL>$N%j%=!<%9$rC5$7$^$9!#$b$70l$D$@$18+$D$+$C$?>l9g$O(B
- mod_speling $B$O%/%i%$%"%s%H$K@5$7$$0LCV$rCN$i$;$k$?$a$K(B HTTP $B%j%@%$%l%/%H$r(B
- $BAw$j$^$9!#$b$7J#?t$N!V6a$$!W%U%!%$%k$,8+$D$+$C$?>l9g$O!"$=$l$i(B
- $BBeBX$H$J$j$($k$b$N$N%j%9%H$,%/%i%$%"%s%H$KI=<($5$l$^$9!#(B</p>
-
- <p>mod_speling $B$NHs>o$KM-MQ$J5!G=$O!"BgJ8;z>.J8;z$r6hJL$;$:$K(B
- $B%U%!%$%kL>$rHf3S$9$k$b$N$G$9!#$3$l$O(B URL $B$H(B unix $B$N(B
- $B%U%!%$%k%7%9%F%`$,N>J}$H$bBgJ8;z>.J8;z$r6hJL$9$k$b$N$G$"$k!"(B
- $B$H$$$&$3$H$r%f!<%6$,CN$i$J$$%7%9%F%`$GLr$KN)$A$^$9!#$?$@$7!"(B
- $B;~@^$N(B URL $BD{@5DxEY$G:Q$^$:!"(Bmod_speling $B$r$h$jB?$/;HMQ$9$k$H!"%5!<%P$K(B
- $B$5$i$J$kIi2Y$,$+$+$j$^$9!#$9$Y$F$N!V@5$7$/$J$$!W%j%/%(%9%H$N8e$K(B
- URL $B$N%j%@%$%l%/%H$H%/%i%$%"%s%H$+$i$N?7$7$$%j%/%(%9%H$,$/$k$3$H$K(B
- $B$J$j$^$9$+$i!#(B</p>
-
- <p>$B%3%s%F%s%D$N0LCV$r7h$a$h$&$H$9$k$9$Y$F$N;n$_$,<:GT$9$k$H!"(B
- Apache $B$O!"(BHTTP $B%9%F!<%?%9%3!<%I(B 404 (file not found) $B$H6&$K(B
- $B%(%i!<%Z!<%8$rJV$7$^$9!#$3$N%(%i!<%Z!<%8$N304Q$O(B
- <directive module="core">ErrorDocument</directive>
- $B%G%#%l%/%F%#%V$G@)8f$5$l!"(B
- <a href="custom-error.html">$B%+%9%?%`%(%i!<%l%9%]%s%9(B</a> $B$G(B
- $B@bL@$5$l$F$$$k$h$&$K!"=@Fp$J@_Dj$r9T$J$&$3$H$,$G$-$^$9!#(B</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/urlmapping.xml.ko b/docs/manual/urlmapping.xml.ko
deleted file mode 100644
index b7773e7c70..0000000000
--- a/docs/manual/urlmapping.xml.ko
+++ /dev/null
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR" ?>
-<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="urlmapping.xml.meta">
-
- <title>URLÀ» ÆÄÀϽýºÅÛ À§Ä¡·Î ´ëÀÀÇϱâ</title>
-
- <summary>
- <p>ÀÌ ¹®¼­´Â ¿äûÀÇ URLÀ» °¡Áö°í ¾ÆÆÄÄ¡°¡ ¾î¶»°Ô ¼­ºñ½ºÇÒ
- ÆÄÀÏÀÇ ÆÄÀϽýºÅÛ»ó À§Ä¡¸¦ ã´ÂÁö ¼³¸íÇÑ´Ù.</p>
- </summary>
-
-<section id="related"><title>°ü·ÃµÈ ¸ðµâ°ú Áö½Ã¾îµé</title>
-
-<related>
-<modulelist>
-<module>mod_alias</module>
-<module>mod_proxy</module>
-<module>mod_rewrite</module>
-<module>mod_userdir</module>
-<module>mod_speling</module>
-<module>mod_vhost_alias</module>
-</modulelist>
-<directivelist>
-<directive module="mod_alias">Alias</directive>
-<directive module="mod_alias">AliasMatch</directive>
-<directive module="mod_speling">CheckSpelling</directive>
-<directive module="core">DocumentRoot</directive>
-<directive module="core">ErrorDocument</directive>
-<directive module="core">Options</directive>
-<directive module="mod_proxy">ProxyPass</directive>
-<directive module="mod_proxy">ProxyPassReverse</directive>
-<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
-<directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
-<directive module="mod_alias">Redirect</directive>
-<directive module="mod_alias">RedirectMatch</directive>
-<directive module="mod_rewrite">RewriteCond</directive>
-<directive module="mod_rewrite">RewriteMatch</directive>
-<directive module="mod_alias">ScriptAlias</directive>
-<directive module="mod_alias">ScriptAliasMatch</directive>
-<directive module="mod_userdir">UserDir</directive>
-</directivelist>
-</related>
-</section>
-
-<section id="documentroot"><title>DocumentRoot</title>
-
- <p>¿äûÀ» ¹ÞÀº ¾ÆÆÄÄ¡´Â ¾î¶² ÆÄÀÏÀ» ¼­ºñ½ºÇÒÁö °áÁ¤ÇϱâÀ§ÇØ
- ±âº»ÀûÀ¸·Î ¿äûÀÇ URL-°æ·Î(URL¿¡¼­ È£½ºÆ®¸í°ú Æ÷Æ® µÚ¿¡
- ³ª¿À´Â ºÎºÐ)¸¦ ¼³Á¤ÆÄÀÏ¿¡¼­ ÁöÁ¤ÇÑ <directive
- module="core">DocumentRoot</directive> µÚ¿¡ ºÙÀδÙ. ±×·¡¼­
- <directive module="core">DocumentRoot</directive> ¾Æ·¡ÀÖ´Â
- ÆÄÀÏ°ú µð·ºÅ丮µéÀº À¥¿¡¼­ º¸°ÔµÉ ±âº»ÀûÀÎ ³»¿ëÀÌ´Ù.</p>
-</section>
-
-<section id="outside"><title>DocumentRoot ¹Û¿¡ ÀÖ´Â ÆÄÀϵé</title>
-
- <p>Á¾Á¾ ÆÄÀϽýºÅÛ¿¡¼­ <directive
- module="core">DocumentRoot</directive> ¾Æ·¡ ÀÖÁö¾ÊÀº ºÎºÐÀ»
- À¥¿¡¼­ Á¢±ÙÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ÀÌ °æ¿ì ¿©·¯°¡Áö ¹æ¹ýÀ»
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ½Éº¼¸µÅ©¸¦ »ç¿ëÇÏ¿©
- ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐÀ» <directive
- module="core">DocumentRoot</directive> ¾Æ·¡¿¡ µÑ ¼ö ÀÖ´Ù.
- º¸¾ÈÀ» À§ÇØ ¾ÆÆÄÄ¡´Â ÇØ´ç µð·ºÅ丮ÀÇ <directive
- module="core">Options</directive> ¼³Á¤¿¡
- <code>FollowSymLinks</code>³ª
- <code>SymLinksIfOwnerMatch</code>°¡ ÀÖ´Â °æ¿ì¿¡¸¸ ½Éº¼¸µÅ©¸¦
- µû¶ó°£´Ù.</p>
-
- <p>¶Ç, <directive module="mod_alias">Alias</directive>
- Áö½Ã¾î´Â ÆÄÀϽýºÅÛÀÇ Æ¯Á¤ ºÎºÐÀ» À¥°ø°£¿¡ ´ëÀÀÇÑ´Ù. ¿¹¸¦
- µé¾î ´ÙÀ½°ú °°´Ù¸é</p>
-
-<example>Alias /docs /var/web</example>
-
- <p>URL <code>http://www.example.com/docs/dir/file.html</code>˼
- <code>/var/web/dir/file.html</code>À» °¡Áö°í ¼­ºñ½ºÇÑ´Ù.
- ÁöÁ¤ÇÑ °æ·Î¿¡ ÀÖ´Â ¸ðµç ³»¿ëÀ» CGI ½ºÅ©¸³Æ®·Î Ãë±ÞÇÏ´Â °ÍÀ»
- Á¦¿ÜÇÏ°í´Â <directive module="mod_alias">ScriptAlias</directive>
- Áö½Ã¾îµµ °°Àº ÀÏÀ» ÇÑ´Ù.</p>
-
- <p><directive module="mod_alias">AliasMatch</directive>¿Í
- <directive module="mod_alias">ScriptAliasMatch</directive>
- Áö½Ã¾îÀÇ °­·ÂÇÑ Á¤±ÔÇ¥Çö½Ä±â¹Ý ´ëÀÀ°ú ´ëÄ¡¸¦ »ç¿ëÇÏ¿© ´õ
- À¯¿¬ÇÑ ¼³Á¤ÀÌ °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î,</p>
-
-<example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</example>
-
- <p>´Â <code>http://example.com/~user/cgi-bin/script.cgi</code>·ÎÀÇ
- ¿äûÀ» °æ·Î <code>/home/user/cgi-bin/script.cgi</code>·Î
- ´ëÀÀÇÏ°í, ÇØ´ç ÆÄÀÏÀ» CGI ½ºÅ©¸³Æ®·Î Ãë±ÞÇÑ´Ù.</p>
-</section>
-
-<section id="user"><title>»ç¿ëÀÚ µð·ºÅ丮</title>
-
- <p>À¯´Ð½º ½Ã½ºÅÛÀº ÀüÅëÀûÀ¸·Î ƯÁ¤ »ç¿ëÀÚ <em>user</em>ÀÇ
- Ȩµð·ºÅ丮¸¦ <code>~user/</code>·Î ÁöĪÇÑ´Ù.
- <module>mod_userdir</module> ¸ðµâÀº ÀÌ °³³äÀ» À¥¿¡±îÁö
- È®ÀåÇÏ¿©, ´ÙÀ½°ú °°Àº URLÀ» °¡Áö°í °¢ »ç¿ëÀÚ È¨µð·ºÅ丮
- ¾È¿¡ ÀÖ´Â ÆÄÀÏÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
-<example>http://www.example.com/~user/file.html</example>
-
- <p>º¸¾È»ó À¥¿¡¼­ »ç¿ëÀÚ È¨µð·ºÅ丮·Î Á÷Á¢ Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸é
- ¾ÈµÈ´Ù. ±×·¡¼­ <directive module="mod_userdir">UserDir</directive>
- Áö½Ã¾î´Â »ç¿ëÀÚ È¨µð·ºÅ丮¿¡¼­ À¥¿ë ÆÄÀϵéÀÌ ÀÖÀ» µð·ºÅ丮¸¦
- ÁöÁ¤ÇÑ´Ù. ±âº» ¼³Á¤ <code>Userdir public_html</code>À» »ç¿ëÇÏ°í
- <code>/home/user/</code>°¡ <code>/etc/passwd</code>¿¡ ÁöÁ¤µÈ
- »ç¿ëÀÚ È¨µð·ºÅ丮¶ó¸é, À§ÀÇ URLÀº ÆÄÀÏ
- <code>/home/user/public_html/file.html</code>¿¡ ´ëÀÀÇÑ´Ù.</p>
-
- <p>¶Ç, <code>Userdir</code> Áö½Ã¾î´Â <code>/etc/passwd</code>¿¡
- Ȩµð·ºÅ丮ÀÇ À§Ä¡°¡ ÀúÀåµÇÁö¾Ê´Â ½Ã½ºÅÛÀ» À§ÇØ ¿©·¯ ´Ù¸¥
- ÇüŸ¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¾î¶² »ç¶÷Àº (º¸Åë À¥¿¡¼­ <code>%7e</code>·Î ÀÎÄÚµùµÇ´Â)
- "~" ±âÈ£°¡ ÀÌ»óÇÏ¿© ´Ù¸¥ ¹æ½ÄÀ¸·Î »ç¿ëÀÚ µð·ºÅ丮¸¦ ³ªÅ¸³»°í
- ½Í¾îÇÑ´Ù. ÀÌ ±â´ÉÀº mod_userdirÀÌ Á¦°øÇÏÁö¾Ê´Â´Ù. ±×·¯³ª
- »ç¿ëÀÚ È¨µð·ºÅ丮°¡ ±ÔÄ¢ÀûÀÎ ¹æ¹ýÀ¸·Î ±¸¼ºµÇÀÖ´Ù¸é, <directive
- module="mod_alias">AliasMatch</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- ¿øÇÏ´Â È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ÀÇ
- <code>AliasMatch</code> Áö½Ã¾î¸¦ »ç¿ëÇϸé
- <code>http://www.example.com/upages/user/file.html</code>ÀÌ
- <code>/home/user/public_html/file.html</code>¿¡ ´ëÀÀÇÑ´Ù:</p>
-
-<example>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
- /home/$1/public_html/$2</example>
-</section>
-
-<section id="redirect"><title>URL ¸®´ÙÀÌ·º¼Ç(Redirection)</title>
-
- <p>¾Õ¿¡¼­ ¼³¸íÇÑ ¼³Á¤ Áö½Ã¾îµéÀº ¾ÆÆÄÄ¡°¡ ÆÄÀϽýºÅÛÀÇ Æ¯Á¤
- Àå¼Ò¿¡ ÀÖ´Â ³»¿ëÀ» Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³»°Ô ¸¸µç´Ù. ±×·¯³ª
- ¶§¶§·Î ¿äûÇÑ ³»¿ëÀÌ ´Ù¸¥ URL¿¡ ÀÖ´Ù°í Ŭ¶óÀ̾ðÆ®¿¡°Ô ¾Ë·ÁÁÖ¾î,
- Ŭ¶óÀ̾ðÆ®°¡ »õ·Î ±× URLÀ» ¿äûÇϵµ·Ï ¸¸µå´Â °ÍÀÌ ÁÁÀ» ¶§°¡
- ÀÖ´Ù. À̸¦ <em>¸®´ÙÀÌ·º¼Ç(redirection)</em>À̶ó°í Çϸç,
- <directive module="mod_alias">Redirect</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, <directive
- module="core">DocumentRoot</directive> ¾Æ·¡ <code>/foo/</code>
- µð·ºÅ丮ÀÇ ³»¿ëÀ» »õ·Î <code>/bar/</code> µð·ºÅ丮·Î ¿Å°å´Ù¸é
- ´ÙÀ½°ú °°ÀÌ Å¬¶óÀ̾ðÆ®°¡ »õ·Î¿î À§Ä¡¸¦ ¿äûÇϵµ·Ï ÇÑ´Ù:</p>
-
-<example>Redirect permanent /foo/
- http://www.example.com/bar/</example>
-
- <p>±×·¯¸é <code>www.example.com</code> ¼­¹öÀÇ <code>/foo/</code>·Î
- ½ÃÀÛÇÏ´Â URL-°æ·Î´Â <code>/foo/</code>¸¦ <code>/bar/</code>·Î
- ¹Ù²Û URL·Î ¸®´ÙÀÌ·º¼ÇµÈ´Ù. Ŭ¶óÀ̾ðÆ®¸¦ ¿ø·¡ ¼­¹ö¿Ü¿¡ ¾î¶²
- ´Ù¸¥ ¼­¹ö·Îµµ ¸®´ÙÀÌ·º¼ÇÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¶Ç, ¾ÆÆÄÄ¡´Â ´õ º¹ÀâÇÑ ÀçÀÛ¼º ¹®Á¦¸¦ À§ÇØ
- <directive module="mod_alias">RedirectMatch</directive>
- Áö½Ã¾î¸¦ Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î, ´Ù¸¥ ¿äûÀº ±×´ë·Î µÎ°í »çÀÌÆ®
- ȨÆäÀÌÁö¿¡ ´ëÇÑ ¿äû¸¸À» ´Ù¸¥ »çÀÌÆ®·Î ¸®´ÙÀÌ·º¼ÇÇÏ·Á¸é:</p>
-
-<example>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</example>
-
- <p>Àӽ÷Π»çÀÌÆ®ÀÇ ¸ðµç ÆäÀÌÁö¸¦ ´Ù¸¥ »çÀÌÆ®ÀÇ Æ¯Á¤ ÆäÀÌÁö·Î
- ¸®´ÙÀÌ·º¼ÇÇÏ·Á¸é:</p>
-
-<example>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</example>
-</section>
-
-<section id="proxy"><title>¿ªÇÁ·Ï½Ã(Reverse Proxy)</title>
-
-<p>¾ÆÆÄÄ¡´Â ´Ù¸¥ ¼­¹ö¿¡ ÀÖ´Â ¹®¼­¸¦ ¼­¹öÀÇ URL °ø°£À¸·Î °¡Á®¿Ã
-¼ö ÀÖ´Ù. ÀÌ °æ¿ì À¥¼­¹ö°¡ ¿ø°Ý ¼­¹ö¿¡¼­ ¹®¼­¸¦ °¡Á®¿Í¼­
-Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü´ÞÇÏ´Â ÇÁ·Ï½Ã ¼­¹ö¿Í °°ÀÌ µ¿ÀÛÇϱ⶧¹®¿¡ ÀÌ·±
-¹æ¹ýÀ» <em>¿ªÇÁ·Ï½Ã(reverse proxying)</em>¶ó°í ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ
-ÀÔÀå¿¡¼­ ¿ªÇÁ·Ï½Ã ¼­¹ö°¡ ¹®¼­¸¦ º¸³»ÁÖ´Â °Íó·³ º¸À̹ǷΠÀϹÝ
-ÇÁ·Ï½Ã¿Í´Â ´Ù¸£´Ù.</p>
-
-<p>¾Æ·¡ ¼³Á¤¿¡¼­ Ŭ¶óÀ̾ðÆ®°¡ <code>/foo/</code>¿¡ ÀÖ´Â ¹®¼­¸¦
-¿äûÇϸé, ¼­¹ö´Â <code>internal.example.com</code>ÀÇ
-<code>/bar/</code> µð·ºÅ丮¿¡¼­ ¹®¼­¸¦ °¡Á®¿Í¼­ ¹®¼­°¡ ¸¶Ä¡
-¼­¹ö¿¡ ÀÖ¾ú´ø °Íó·³ Ŭ¶óÀ̾ðÆ®¿¡°Ô º¸³½´Ù.</p>
-
-<example>
-ProxyPass /foo/ http://internal.example.com/bar/<br />
-ProxyPassReverse /foo/ http://internal.example.com/bar/
-</example>
-
-<p><directive module="mod_proxy">ProxyPass</directive>´Â ¼­¹ö°¡
-ÀûÀýÇÑ ¹®¼­¸¦ °¡Á®¿Àµµ·Ï ¼³Á¤Çϸç, <directive
-module="mod_proxy">ProxyPassReverse</directive> Áö½Ã¾î´Â
-<code>internal.example.com</code>ÀÌ º¸³»´Â ¸®´ÙÀÌ·º¼ÇÀ» ÀçÀÛ¼ºÇÏ¿©
-¸®´ÙÀÌ·º¼ÇÀÌ ÇöÀç ¼­¹öÀÇ ÀûÀýÇÑ µð·ºÅ丮¸¦ °¡¸®Å°µµ·Ï ÇÑ´Ù.
-¶Ç, <directive
-module="mod_proxy">ProxyPassReverseCookieDomain</directive>°ú
-<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>˼
-°°Àº ¹æ¹ýÀ¸·Î ¿ø·¡ ¼­¹ö°¡ º¸³½ ÄíÅ°¸¦ ÀçÀÛ¼ºÇÑ´Ù.</p>
-<p>±×·¯³ª ¹®¼­ ¾È¿¡ ÀÖ´Â ¸µÅ©´Â ÀçÀÛ¼ºÇÏÁö ¾ÊÀ½À» ÁÖÀÇÇ϶ó.
-<code>internal.example.com</code>¿¡ ´ëÇÑ Àý´ë¸µÅ©´Â Ŭ¶óÀ̾ðÆ®°¡
-ÇÁ·Ï½Ã¼­¹ö°¡ ¾Æ´Ï¶ó <code>internal.example.com</code>À¸·Î Á÷Á¢
-¿äûÇÏ°Ô ÇÑ´Ù. Á¦»ïÀÚ°¡ ¸¸µç <a
-href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
-¸ðµâÀ» »ç¿ëÇÏ¿© HTML°ú XHTML¿¡ ÀÖ´Â ¸µÅ©¸¦ ÀçÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.</p>
-</section>
-
-<section id="rewrite"><title>ÀçÀÛ¼º ¿£Áø (Rewriting Engine)</title>
-
- <p>´õ °­·ÂÇÑ Ä¡È¯ÀÌ ÇÊ¿äÇÒ¶§ <module>mod_rewrite</module>ÀÇ
- ÀçÀÛ¼º ¿£ÁøÀÌ µµ¿òÀÌ µÈ´Ù. ÀÌ ¸ðµâÀÇ Áö½Ã¾î´Â ºê¶ó¿ìÀú Á¾·ù³ª
- Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò µî ¿äûÀÇ Æ¯Â¡À» °¡Áö°í ¾îµð¿¡ ÀÖ´Â
- ³»¿ëÀ» ¼­ºñ½ºÇÒÁö °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶Ç, mod_rewrite´Â ¿äûÀ»
- ¾î¶»°Ô ó¸®ÇÒÁö °áÁ¤ÇϱâÀ§ÇØ ¿ÜºÎ µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ̳ª
- ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀçÀÛ¼º ¿£ÁøÀº À§¿¡¼­ ´Ù·é ¼¼
- Á¾·ù ´ëÀÀ, Áï, ³»ºÎ ¸®´ÙÀÌ·º¼Ç (alias), ¿ÜºÎ ¸®´ÙÀÌ·º¼Ç,
- ÇÁ·Ï½Ã, ¸ðµÎ¸¦ Áö¿øÇÑ´Ù. mod_rewrite¸¦ »ç¿ëÇÏ´Â ½ÇÁ¦ ¿¹´Â
- <a href="misc/rewriteguide.html">URL Á¦ÀÛ¼º Áöħ¼­</a>¿¡¼­
- ¼³¸íÇÑ´Ù.</p>
-</section>
-
-<section id="notfound"><title>File Not Found</title>
-
- <p>°á±¹ ¿äûÇÑ URL¿¡ ´ëÀÀÇÏ´Â ÆÄÀÏÀ» ÆÄÀϽýºÅÛ¿¡¼­ ãÁö
- ¸øÇÑ °æ¿ìÀÌ´Ù. ¿©·¯ °¡Áö ÀÌÀ¯°¡ ÀÖ´Ù. ¾î¶² °æ¿ì ¹®¼­¸¦
- ´Ù¸¥ °÷À¸·Î ¿Å°å±â ¶§¹®ÀÏ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì Ŭ¶óÀ̾ðÆ®¿¡°Ô
- <a href="#redirect">URL ¸®´ÙÀÌ·º¼Ç</a>À¸·Î ÀÚ¿øÀÇ »õ·Î¿î
- À§Ä¡¸¦ ¾Ë·ÁÁÖ´Â ¹æ¹ýÀÌ Á¦ÀÏ ÁÁ´Ù. ±×·¯¸é ÀÚ¿øÀ» ¿Å°Üµµ
- ¿À·¡µÈ ºÏ¸¶Å©³ª ¸µÅ©°¡ °è¼Ó À¯È¿ÇÏ´Ù.</p>
-
- <p>"File Not Found" ¿À·ùÀÇ ´Ù¸¥ ÀϹÝÀûÀÎ ¿øÀÎÀº ºê¶ó¿ìÀú¿¡
- Á÷Á¢ ȤÀº HTML ¸µÅ©¿¡ URLÀÌ À߸ø ÀÔ·ÂµÈ °æ¿ìÀÌ´Ù. ¾ÆÆÄÄ¡´Â
- <module>mod_speling</module> (¸ÂÃã¹ýÀÌ Æ²¸®Áö ¾Ê¾ÒÀ½) ¸ðµâ·Î
- ÀÌ¿Í °°Àº ¹®Á¦¸¦ µ½´Â´Ù. ÀÌ ¸ðµâÀ» »ç¿ëÇϸé "File Not Found"
- ¿À·ù°¡ ¹ß»ýÇÏ´Â °æ¿ì ºñ½ÁÇÑ ÆÄÀϸíÀ» °¡Áø ÀÚ¿øÀ» ã´Â´Ù.
- ¸¸¾à ¹ß°ßÇϸé mod_spelingÀº Ŭ¶óÀ̾ðÆ®¸¦ ¿Ã¹Ù¸¥ À§Ä¡·Î
- HTTP ¸®´ÙÀÌ·º¼ÇÇÑ´Ù. "ºñ½ÁÇÑ" ÆÄÀÏÀÌ ¿©·¯°³ ÀÖ´Ù¸é
- Ŭ¶óÀ̾ðÆ®¿¡°Ô ¸ñ·ÏÀ» º¸³½´Ù.</p>
-
- <p>mod_spelingÀÇ Æ¯È÷ À¯¿ëÇÑ ÀåÁ¡Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í
- ÆÄÀϸíÀ» ºñ±³ÇÏ´Â ±â´ÉÀÌ´Ù. ±×·¡¼­ À¯´Ð½º ÆÄÀϽýºÅÛ°ú URLÀÇ
- ´ë¼Ò¹®ÀÚ ¼ºÁúÀ» ¾ËÁö¸øÇÏ´Â »ç¿ëÀÚ°¡ ÀÖ´Â ½Ã½ºÅÛ¿¡ µµ¿òÀÌ
- µÈ´Ù. ±×·¯³ª mod_spelingÀÌ ÀÚÁÖ URLÀ» °íÃľßÇÑ´Ù¸é, "À߸øµÈ"
- ¿äû¶§¸¶´Ù URL ¸®´ÙÀÌ·º¼Ç°ú Ŭ¶óÀ̾ðÆ®ÀÇ »õ·Î¿î ¿äûÀÌ
- ÀϾ¹Ç·Î ¼­¹ö¿¡ ºÎ´ãÀÌ µÈ´Ù.</p>
-
- <p>ã´Â ½Ãµµ°¡ ¸ðµÎ ½ÇÆÐÇÏ¸é ¾ÆÆÄÄ¡´Â HTTP status code 404
- (file not found) ¿À·ùÆäÀÌÁö¸¦ º¸³½´Ù. ÀÌ ÆäÀÌÁöÀÇ ³»¿ëÀº
- <directive module="core">ErrorDocument</directive> Áö½Ã¾î·Î
- Á¶ÀýÇϸç, <a href="custom-error.html">»ç¿ëÀÚÁ¤ÀÇ ¿À·ù ÀÀ´ä</a>
- ¹®¼­¸¦ Âü°íÇÏ¿© »ç¿ëÀÚÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù.</p>
-</section>
-
-</manualpage>
diff --git a/docs/manual/urlmapping.xml.meta b/docs/manual/urlmapping.xml.meta
deleted file mode 100644
index 9130173382..0000000000
--- a/docs/manual/urlmapping.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>urlmapping</basename>
- <path>/</path>
- <relpath>.</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/.cvsignore b/docs/manual/vhosts/.cvsignore
deleted file mode 100644
index e9e8aa8b51..0000000000
--- a/docs/manual/vhosts/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.tex
-*.aux
diff --git a/docs/manual/vhosts/details.html b/docs/manual/vhosts/details.html
deleted file mode 100644
index caead8e1a2..0000000000
--- a/docs/manual/vhosts/details.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: details.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: details.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/details.html.en b/docs/manual/vhosts/details.html.en
deleted file mode 100644
index 05c28c30e3..0000000000
--- a/docs/manual/vhosts/details.html.en
+++ /dev/null
@@ -1,439 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>An In-Depth Discussion of Virtual Host Matching - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>An In-Depth Discussion of Virtual Host Matching</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/vhosts/details.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/details.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>The virtual host code was completely rewritten in
- <strong>Apache 1.3</strong>. This document attempts to explain
- exactly what Apache does when deciding what virtual host to
- serve a hit from. With the help of the new
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- directive virtual host configuration should be a lot easier and
- safer than with versions prior to 1.3.</p>
-
- <p>If you just want to <cite>make it work</cite> without
- understanding how, here are <a href="examples.html">some
- examples</a>.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#configparsing">Config File Parsing</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#hostmatching">Virtual Host Matching</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#tips">Tips</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configparsing" id="configparsing">Config File Parsing</a></h2>
-
- <p>There is a <em>main_server</em> which consists of all the
- definitions appearing outside of
- <code>&lt;VirtualHost&gt;</code> sections. There are virtual
- servers, called <em>vhosts</em>, which are defined by
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- sections.</p>
-
- <p>The directives
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>,
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>,
- <code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code>,
- and <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>
- can appear anywhere within the definition of a server. However,
- each appearance overrides the previous appearance (within that
- server).</p>
-
- <p>The default value of the <code>Listen</code> field for
- main_server is 80. The main_server has no default
- <code>ServerPath</code>, or <code>ServerAlias</code>. The
- default <code>ServerName</code> is deduced from the server's IP
- address.</p>
-
- <p>The main_server Listen directive has two functions. One
- function is to determine the default network port Apache will
- bind to. The second function is to specify the port number
- which is used in absolute URIs during redirects.</p>
-
- <p>Unlike the main_server, vhost ports <em>do not</em> affect
- what ports Apache listens for connections on.</p>
-
- <p>Each address appearing in the <code>VirtualHost</code>
- directive can have an optional port. If the port is unspecified
- it defaults to the value of the main_server's most recent
- <code>Listen</code> statement. The special port <code>*</code>
- indicates a wildcard that matches any port. Collectively the
- entire set of addresses (including multiple <code>A</code>
- record results from DNS lookups) are called the vhost's
- <em>address set</em>.</p>
-
- <p>Unless a <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- directive is used for a specific IP address the first vhost
- with that address is treated as an IP-based vhost. The IP
- address can also be the wildcard <code>*</code>.</p>
-
- <p>If name-based vhosts should be used a
- <code>NameVirtualHost</code> directive <em>must</em> appear
- with the IP address set to be used for the name-based vhosts.
- In other words, you must specify the IP address that holds the
- hostname aliases (CNAMEs) for your name-based vhosts via a
- <code>NameVirtualHost</code> directive in your configuration
- file.</p>
-
- <p>Multiple <code>NameVirtualHost</code> directives can be used
- each with a set of <code>VirtualHost</code> directives but only
- one <code>NameVirtualHost</code> directive should be used for
- each specific IP:port pair.</p>
-
- <p>The ordering of <code>NameVirtualHost</code> and
- <code>VirtualHost</code> directives is not important which
- makes the following two examples identical (only the order of
- the <code>VirtualHost</code> directives for <em>one</em>
- address set is important, see below):</p>
-
-<table><tr>
-<td><div class="example"><p><code>
- NameVirtualHost 111.22.33.44<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server A<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.55<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server D<br />
- ...<br />
- &lt;/VirtualHost&gt;
-</code></p></div></td>
-<td><div class="example"><p><code>
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server A<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server D<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.44<br />
- NameVirtualHost 111.22.33.55<br />
- <br />
-</code></p></div></td>
-</tr></table>
-
-
- <p>(To aid the readability of your configuration you should
- prefer the left variant.)</p>
-
- <p>After parsing the <code>VirtualHost</code> directive, the
- vhost server is given a default <code>Listen</code> equal to the
- port assigned to the first name in its <code>VirtualHost</code>
- directive.</p>
-
- <p>The complete list of names in the <code>VirtualHost</code>
- directive are treated just like a <code>ServerAlias</code> (but
- are not overridden by any <code>ServerAlias</code> statement)
- if all names resolve to the same address set. Note that
- subsequent <code>Listen</code> statements for this vhost will not
- affect the ports assigned in the address set.</p>
-
- <p>During initialization a list for each IP address is
- generated and inserted into an hash table. If the IP address is
- used in a <code>NameVirtualHost</code> directive the list
- contains all name-based vhosts for the given IP address. If
- there are no vhosts defined for that address the
- <code>NameVirtualHost</code> directive is ignored and an error
- is logged. For an IP-based vhost the list in the hash table is
- empty.</p>
-
- <p>Due to a fast hashing function the overhead of hashing an IP
- address during a request is minimal and almost not existent.
- Additionally the table is optimized for IP addresses which vary
- in the last octet.</p>
-
- <p>For every vhost various default values are set. In
- particular:</p>
-
- <ol>
- <li>If a vhost has no <code class="directive"><a href="../mod/core.html#serveradmin">ServerAdmin</a></code>,
- <code class="directive"><a href="../mod/core.html#resourceconfig">ResourceConfig</a></code>,
- <code class="directive"><a href="../mod/core.html#accessconfig">AccessConfig</a></code>,
- <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code>,
- <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code>,
- <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>,
- <code class="directive"><a href="../mod/core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></code>,
- or <code class="directive"><a href="../mod/core.html#sendbuffersize">SendBufferSize</a></code>
- directive then the respective value is inherited from the
- main_server. (That is, inherited from whatever the final
- setting of that value is in the main_server.)</li>
-
- <li>The "lookup defaults" that define the default directory
- permissions for a vhost are merged with those of the
- main_server. This includes any per-directory configuration
- information for any module.</li>
-
- <li>The per-server configs for each module from the
- main_server are merged into the vhost server.</li>
- </ol>
-
- <p>Essentially, the main_server is treated as "defaults" or a
- "base" on which to build each vhost. But the positioning of
- these main_server definitions in the config file is largely
- irrelevant -- the entire config of the main_server has been
- parsed when this final merging occurs. So even if a main_server
- definition appears after a vhost definition it might affect the
- vhost definition.</p>
-
- <p>If the main_server has no <code>ServerName</code> at this
- point, then the hostname of the machine that httpd is running
- on is used instead. We will call the <em>main_server address
- set</em> those IP addresses returned by a DNS lookup on the
- <code>ServerName</code> of the main_server.</p>
-
- <p>For any undefined <code>ServerName</code> fields, a
- name-based vhost defaults to the address given first in the
- <code>VirtualHost</code> statement defining the vhost.</p>
-
- <p>Any vhost that includes the magic <code>_default_</code>
- wildcard is given the same <code>ServerName</code> as the
- main_server.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hostmatching" id="hostmatching">Virtual Host Matching</a></h2>
-
- <p>The server determines which vhost to use for a request as
- follows:</p>
-
- <h3><a name="hashtable" id="hashtable">Hash table lookup</a></h3>
-
- <p>When the connection is first made by a client, the IP
- address to which the client connected is looked up in the
- internal IP hash table.</p>
-
- <p>If the lookup fails (the IP address wasn't found) the
- request is served from the <code>_default_</code> vhost if
- there is such a vhost for the port to which the client sent the
- request. If there is no matching <code>_default_</code> vhost
- the request is served from the main_server.</p>
-
- <p>If the IP address is not found in the hash table then the
- match against the port number may also result in an entry
- corresponding to a <code>NameVirtualHost *</code>, which is
- subsequently handled like other name-based vhosts.</p>
-
- <p>If the lookup succeeded (a corresponding list for the IP
- address was found) the next step is to decide if we have to
- deal with an IP-based or a name-base vhost.</p>
-
-
-
- <h3><a name="ipbased" id="ipbased">IP-based vhost</a></h3>
-
- <p>If the entry we found has an empty name list then we have
- found an IP-based vhost, no further actions are performed and
- the request is served from that vhost.</p>
-
-
-
- <h3><a name="namebased" id="namebased">Name-based vhost</a></h3>
-
- <p>If the entry corresponds to a name-based vhost the name list
- contains one or more vhost structures. This list contains the
- vhosts in the same order as the <code>VirtualHost</code>
- directives appear in the config file.</p>
-
- <p>The first vhost on this list (the first vhost in the config
- file with the specified IP address) has the highest priority
- and catches any request to an unknown server name or a request
- without a <code>Host:</code> header field.</p>
-
- <p>If the client provided a <code>Host:</code> header field the
- list is searched for a matching vhost and the first hit on a
- <code>ServerName</code> or <code>ServerAlias</code> is taken
- and the request is served from that vhost. A <code>Host:</code>
- header field can contain a port number, but Apache always
- matches against the real port to which the client sent the
- request.</p>
-
- <p>If the client submitted a HTTP/1.0 request without
- <code>Host:</code> header field we don't know to what server
- the client tried to connect and any existing
- <code>ServerPath</code> is matched against the URI from the
- request. The first matching path on the list is used and the
- request is served from that vhost.</p>
-
- <p>If no matching vhost could be found the request is served
- from the first vhost with a matching port number that is on the
- list for the IP to which the client connected (as already
- mentioned before).</p>
-
-
-
- <h3><a name="persistent" id="persistent">Persistent connections</a></h3>
-
- <p>The IP lookup described above is only done <em>once</em> for a
- particular TCP/IP session while the name lookup is done on
- <em>every</em> request during a KeepAlive/persistent
- connection. In other words a client may request pages from
- different name-based vhosts during a single persistent
- connection.</p>
-
-
-
- <h3><a name="absoluteURI" id="absoluteURI">Absolute URI</a></h3>
-
- <p>If the URI from the request is an absolute URI, and its
- hostname and port match the main server or one of the
- configured virtual hosts <em>and</em> match the address and
- port to which the client sent the request, then the
- scheme/hostname/port prefix is stripped off and the remaining
- relative URI is served by the corresponding main server or
- virtual host. If it does not match, then the URI remains
- untouched and the request is taken to be a proxy request.</p>
-
-
-<h3><a name="observations" id="observations">Observations</a></h3>
-
- <ul>
- <li>A name-based vhost can never interfere with an IP-base
- vhost and vice versa. IP-based vhosts can only be reached
- through an IP address of its own address set and never
- through any other address. The same applies to name-based
- vhosts, they can only be reached through an IP address of the
- corresponding address set which must be defined with a
- <code>NameVirtualHost</code> directive.</li>
-
- <li><code>ServerAlias</code> and <code>ServerPath</code>
- checks are never performed for an IP-based vhost.</li>
-
- <li>The order of name-/IP-based, the <code>_default_</code>
- vhost and the <code>NameVirtualHost</code> directive within
- the config file is not important. Only the ordering of
- name-based vhosts for a specific address set is significant.
- The one name-based vhosts that comes first in the
- configuration file has the highest priority for its
- corresponding address set.</li>
-
- <li>For security reasons the port number given in a
- <code>Host:</code> header field is never used during the
- matching process. Apache always uses the real port to which
- the client sent the request.</li>
-
- <li>If a <code>ServerPath</code> directive exists which is a
- prefix of another <code>ServerPath</code> directive that
- appears later in the configuration file, then the former will
- always be matched and the latter will never be matched. (That
- is assuming that no <code>Host:</code> header field was
- available to disambiguate the two.)</li>
-
- <li>If two IP-based vhosts have an address in common, the
- vhost appearing first in the config file is always matched.
- Such a thing might happen inadvertently. The server will give
- a warning in the error logfile when it detects this.</li>
-
- <li>A <code>_default_</code> vhost catches a request only if
- there is no other vhost with a matching IP address
- <em>and</em> a matching port number for the request. The
- request is only caught if the port number to which the client
- sent the request matches the port number of your
- <code>_default_</code> vhost which is your standard
- <code>Listen</code> by default. A wildcard port can be
- specified (<em>i.e.</em>, <code>_default_:*</code>) to catch
- requests to any available port. This also applies to
- <code>NameVirtualHost *</code> vhosts.</li>
-
- <li>The main_server is only used to serve a request if the IP
- address and port number to which the client connected is
- unspecified and does not match any other vhost (including a
- <code>_default_</code> vhost). In other words the main_server
- only catches a request for an unspecified address/port
- combination (unless there is a <code>_default_</code> vhost
- which matches that port).</li>
-
- <li>A <code>_default_</code> vhost or the main_server is
- <em>never</em> matched for a request with an unknown or
- missing <code>Host:</code> header field if the client
- connected to an address (and port) which is used for
- name-based vhosts, <em>e.g.</em>, in a
- <code>NameVirtualHost</code> directive.</li>
-
- <li>You should never specify DNS names in
- <code>VirtualHost</code> directives because it will force
- your server to rely on DNS to boot. Furthermore it poses a
- security threat if you do not control the DNS for all the
- domains listed. There's <a href="../dns-caveats.html">more
- information</a> available on this and the next two
- topics.</li>
-
- <li><code>ServerName</code> should always be set for each
- vhost. Otherwise A DNS lookup is required for each
- vhost.</li>
- </ul>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="tips" id="tips">Tips</a></h2>
-
- <p>In addition to the tips on the <a href="../dns-caveats.html#tips">DNS Issues</a> page, here are
- some further tips:</p>
-
- <ul>
- <li>Place all main_server definitions before any
- <code>VirtualHost</code> definitions. (This is to aid the
- readability of the configuration -- the post-config merging
- process makes it non-obvious that definitions mixed in around
- virtual hosts might affect all virtual hosts.)</li>
-
- <li>Group corresponding <code>NameVirtualHost</code> and
- <code>VirtualHost</code> definitions in your configuration to
- ensure better readability.</li>
-
- <li>Avoid <code>ServerPaths</code> which are prefixes of
- other <code>ServerPaths</code>. If you cannot avoid this then
- you have to ensure that the longer (more specific) prefix
- vhost appears earlier in the configuration file than the
- shorter (less specific) prefix (<em>i.e.</em>, "ServerPath
- /abc" should appear after "ServerPath /abc/def").</li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/vhosts/details.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/details.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/details.html.ko.euc-kr b/docs/manual/vhosts/details.html.ko.euc-kr
deleted file mode 100644
index 99555fcf92..0000000000
--- a/docs/manual/vhosts/details.html.ko.euc-kr
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">°¡»óÈ£½ºÆ®</a></div><div id="page-content"><div id="preamble"><h1>°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/details.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/details.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>°¡»óÈ£½ºÆ® ÄÚµå´Â <strong>¾ÆÆÄÄ¡ 1.3</strong>¿¡¼­ °ÅÀÇ ´Ù½Ã
- ÀÛ¼ºµÇ¾ú´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡°¡ ¿äûÀ» ¹ÞÀ¸¸é ¾î¶² °¡»óÈ£½ºÆ®°¡
- ¼­ºñ½ºÇÒÁö °áÁ¤ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. »õ·Î¿î <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- °¡»óÈ£½ºÆ® ¼³Á¤ÀÌ 1.3 ¹öÀü ÀÌÀüº¸´Ù ´õ ½±°í ¾ÈÀüÇØÁ³´Ù.</p>
-
- <p>¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ÀÌÇØÇÏÁö¾Ê°í ´ÜÁö <cite>µ¿ÀÛÇÏ°Ô¸¸</cite>
- ÇÏ°í ½Í´Ù¸é, <a href="examples.html">¿¹Á¦µé</a>À» Âü°íÇ϶ó.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#configparsing">¼³Á¤ÆÄÀÏ Àбâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#hostmatching">°¡»óÈ£½ºÆ® ã±â</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#tips">ÆÁ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configparsing" id="configparsing">¼³Á¤ÆÄÀÏ Àбâ</a></h2>
-
- <p><code>&lt;VirtualHost&gt;</code> ¼³Á¤À» Á¦¿ÜÇÑ ¼³Á¤ÀÌ
- <em>ÁÖ¼­¹ö</em>¸¦ ¸¸µç´Ù. <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¼½¼ÇÀ¸·Î Á¤ÀÇÇÑ
- ºÎºÐÀ» °¡»óÈ£½ºÆ®¶ó°í ºÎ¸¥´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>,
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>,
- <code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code>,
- <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code> Áö½Ã¾î´Â
- ¼­¹ö Á¤ÀÇ ¾î´À°÷¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª °°Àº Áö½Ã¾î°¡
- ¿©·¯¹ø ³ª¿À¸é (±× ¼­¹ö¿¡¼­) ¸¶Áö¸· Áö½Ã¾î¸¸ÀÌ À¯È¿ÇÏ´Ù.</p>
-
- <p>ÁÖ¼­¹ö <code>Listen</code>ÀÇ ±âº»°ªÀº 80ÀÌ´Ù. ÁÖ¼­¹öÀÇ
- <code>ServerPath</code>³ª <code>ServerAlias</code>¿¡´Â
- ±âº»°ªÀº ¾ø´Ù. <code>ServerName</code>ÀÇ ±âº»°ªÀº ¼­¹öÀÇ
- IP ÁÖ¼ÒÀÌ´Ù.</p>
-
- <p>ÁÖ¼­¹öÀÇ Listen Áö½Ã¾î´Â µÎ°¡Áö ±â´ÉÀ» ÇÑ´Ù. ù°´Â
- ¾ÆÆÄÄ¡°¡ ¿¬°áÇÒ ±âº» ³×Æ®¿÷ Æ÷Æ®¸¦ ÁöÁ¤ÇÏ´Â ÀÏÀÌ´Ù. µÑ°´Â
- ¸®´ÙÀÌ·º¼ÇÇÒ Àý´ë URI¿¡ »ç¿ëÇÒ Æ÷Æ® ¹øÈ£¸¦ ÁöÁ¤ÇÏ´Â ÀÏÀÌ´Ù.</p>
-
- <p>ÁÖ¼­¹ö¿Í ´Þ¸® °¡»óÈ£½ºÆ®ÀÇ Æ÷Æ®´Â ¾ÆÆÄÄ¡°¡ ¿¬°áÀ» ±â´Ù¸®´Â
- Æ÷Æ®¿¡ ¿µÇâÀ» ÁÖÁö <em>¾Ê´Â´Ù</em>.</p>
-
- <p><code>VirtualHost</code> Áö½Ã¾î¿¡ Æ÷Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
- Æ÷Æ®¸¦ ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é ÁÖ¼­¹öÀÇ °¡Àå ÃÖ±Ù <code>Listen</code>
- °ªÀ» »ç¿ëÇÑ´Ù. Ưº°ÇÑ Æ÷Æ® <code>*</code>´Â ¾î¶² Æ÷Æ®¶óµµ
- ÁöĪÇÏ´Â ¿ÍÀϵåÄ«µåÀÌ´Ù. (DNS °Ë»ö °á°úÀÇ ¿©·¯ <code>A</code>
- ·¹Äڵ带 Æ÷ÇÔÇÏ¿©) °¡»óÈ£½ºÆ®ÀÇ ÁÖ¼Ò¸¦ ¸ðµÎ ÃÑĪÇÏ¿© °¡»óÈ£½ºÆ®ÀÇ
- <em>ÁÖ¼ÒÁýÇÕ(address set)</em>À̶ó°í ºÎ¸¥´Ù.</p>
-
- <p>ƯÁ¤ IP ÁÖ¼Ò¿¡ ´ëÇÑ <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> Áö½Ã¾î°¡ ¾ø´Ù¸é
- ±× ÁÖ¼Ò¸¦ Æ÷ÇÔÇϴ ù¹ø° °¡»óÈ£½ºÆ®¸¦ IP±â¹Ý °¡»óÈ£½ºÆ®·Î Ãë±ÞÇÑ´Ù.
- IP ÁÖ¼Ò¿¡ ¿ÍÀϵåÄ«µå <code>*</code>¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÑ´Ù¸é À̸§±â¹Ý °¡»óÈ£½ºÆ®¿¡
- »ç¿ëÇÒ IP ÁÖ¼Ò¸¦ <code>NameVirtualHost</code> Áö½Ã¾î¿¡
- »ç¿ëÇØ¾ß <em>ÇÑ´Ù</em>. Áï, ¼³Á¤ÆÄÀÏÀÇ <code>NameVirtualHost</code>
- Áö½Ã¾î¿¡ À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ È£½ºÆ®º°¸í(CNAME)¿¡ ÇØ´çÇÏ´Â
- IP ÁÖ¼Ò¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ƯÁ¤ IP:Æ÷Æ® ½Ö¿¡ ´ëÇØ ¿ÀÁ÷ ÇÑ <code>NameVirtualHost</code>
- Áö½Ã¾î¸¸À» »ç¿ëÇÑ´Ù¸é, ¿©·¯ <code>NameVirtualHost</code> Áö½Ã¾î¿Í
- <code>VirtualHost</code> Áö½Ã¾î¸¦ ¼¯¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>NameVirtualHost</code>¿Í <code>VirtualHost</code>
- Áö½Ã¾îÀÇ ¼ø¼­´Â Áß¿äÇÏÁö ¾Ê±â¶§¹®¿¡ ´ÙÀ½ µÎ ¿¹´Â °°´Ù (¿ÀÁ÷
- <em>ÇÑ</em> ÁÖ¼ÒÁýÇÕ¿¡ ´ëÇÑ <code>VirtualHost</code>ÀÇ
- ¼ø¼­°¡ Áß¿äÇÏ´Ù. ¾Æ·¡ Âü°í):</p>
-
-<table><tr>
-<td><div class="example"><p><code>
- NameVirtualHost 111.22.33.44<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö A<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.55<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö D<br />
- ...<br />
- &lt;/VirtualHost&gt;
-</code></p></div></td>
-<td><div class="example"><p><code>
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö A<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö D<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.44<br />
- NameVirtualHost 111.22.33.55<br />
- <br />
-</code></p></div></td>
-</tr></table>
-
-
- <p>(¿ÞÂÊ ¼³Á¤ÀÌ ´õ Àбâ ÆíÇÏ´Ù.)</p>
-
- <p><code>VirtualHost</code> Áö½Ã¾î¸¦ ÀÐÀ» ´ÙÀ½, °¡»óÈ£½ºÆ®
- ¼­¹ö´Â <code>VirtualHost</code> Áö½Ã¾î¿¡ ÁöÁ¤ÇÑ Æ÷Æ®¸¦ ±âº»
- <code>Listen</code>À¸·Î ÇÑ´Ù.</p>
-
- <p><code>VirtualHost</code> Áö½Ã¾îÀÇ À̸§ÀÌ ¸ðµÎ °°Àº
- ÁÖ¼ÒÁýÇÕ¿¡ ¼ÓÇÑ´Ù¸é <code>ServerAlias</code>¿Í °°ÀÌ Ãë±ÞÇÑ´Ù
- (±×·¯³ª ´Ù¸¥ <code>ServerAlias</code>ÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù).
- °¡»óÈ£½ºÆ®¿¡ Ãß°¡·Î »ç¿ëÇÑ <code>Listen</code>Àº ÁÖ¼ÒÁýÇÕÀÌ
- ÁöÁ¤ÇÑ Æ÷Æ®¿¡ ¿µÇâÀ» ÁÖÁö ¾ÊÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- <p>½ÃÀÛÇÒ¶§ IP ÁÖ¼Ò ¸ñ·ÏÀ» ¸¸µé¾î Çؽ¬Å×ÀÌºí¿¡ Ãß°¡ÇÑ´Ù.
- <code>NameVirtualHost</code> Áö½Ã¾î¿¡ IP ÁÖ¼Ò¸¦ »ç¿ëÇϸé
- ¸ñ·ÏÀº ±× IP ÁÖ¼Ò¿¡ ´ëÇÑ ¸ðµç À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ Æ÷ÇÔÇÑ´Ù.
- ±× ÁÖ¼Ò¿¡ ´ëÇÑ °¡»óÈ£½ºÆ®°¡ ¾ø´Ù¸é <code>NameVirtualHost</code>
- Áö½Ã¾î¸¦ ¹«½ÃÇÏ°í ·Î±×¿¡ ¿À·ù¸¦ ±â·ÏÇÑ´Ù. IP±â¹Ý °¡»óÈ£½ºÆ®´Â
- Çؽ¬Å×ÀÌºí¿¡ ¸ñ·ÏÀ» Ãß°¡ÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>ºü¸¥ Çؽ¬ÇÔ¼ö¸¦ »ç¿ëÇϱ⶧¹®¿¡ ¿äû½Ã IP ÁÖ¼Ò¸¦ ÇؽÌÇÏ´Â
- ºÎ´ãÀº °ÅÀÇ ¾ø´Ù. ¶Ç Çؽ¬Å×À̺íÀº IP ÁÖ¼ÒÀÇ ¸¶Áö¸· ºÎºÐÀÇ
- Â÷ÀÌ¿¡ ÃÖÀûÈ­µÇÀÖ´Ù.</p>
-
- <p>°¡»óÈ£½ºÆ®¿¡ ¿©·¯ ±âº»°ªÀÌ ¼³Á¤µÈ´Ù. ƯÈ÷:</p>
-
- <ol>
- <li>°¡»óÈ£½ºÆ®¿¡ <code class="directive"><a href="../mod/core.html#serveradmin">ServerAdmin</a></code>,
- <code class="directive"><a href="../mod/core.html#resourceconfig">ResourceConfig</a></code>,
- <code class="directive"><a href="../mod/core.html#accessconfig">AccessConfig</a></code>,
- <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code>,
- <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code>,
- <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>,
- <code class="directive"><a href="../mod/core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></code>,
- <code class="directive"><a href="../mod/core.html#sendbuffersize">SendBufferSize</a></code>
- Áö½Ã¾î°¡ ¾ø´Ù¸é ÁÖ¼­¹ö¿¡¼­ ÇØ´ç °ªÀ» °¡Á®¿Â´Ù. (Áï,
- ÁÖ¼­¹öÀÇ ¼³Á¤°ªÀ» »ç¿ëÇÑ´Ù.)</li>
-
- <li>°¡»óÈ£½ºÆ®ÀÇ µð·ºÅ丮 ±âº»±ÇÇÑÀ» Á¤ÀÇÇÏ´Â "ÂüÁ¶
- ±âº»°ª(lookup defaults)"Àº ÁÖ¼­¹öÀÇ ¼³Á¤°ú ÇÕÃÄÁø´Ù.
- ¸ðµâÀÇ µð·ºÅ丮´ç ¼³Á¤(per-directory configuration)µµ
- ¿©±â¿¡ ÇØ´çµÈ´Ù.</li>
-
- <li>°¢ ¸ðµâÀÇ ¼­¹ö´ç ¼³Á¤(per-server config)Àº ÁÖ¼­¹öÀÇ
- ¼³Á¤°ú °¡»óÈ£½ºÆ®ÀÇ ¼³Á¤À» ÇÕÄ£´Ù.</li>
- </ol>
-
- <p>±âº»ÀûÀ¸·Î ÁÖ¼­¹ö´Â °¡»óÈ£½ºÆ®¸¦ ¸¸µå´Â "±âº»" ȤÀº "±â¹Ý"ÀÌ
- µÈ´Ù. ±×·¯³ª ¼³Á¤ÆÄÀÏ¿¡¼­ ÁÖ¼­¹ö¸¦ Á¤ÀÇÇÏ´Â À§Ä¡´Â °ü°è¾ø´Ù.
- ¸¶Áö¸·À¸·Î ¼³Á¤À» ÇÕÄ¡±â Àü¿¡ ÁÖ¼­¹öÀÇ ¸ðµç ¼³Á¤À» ÀоîµéÀδÙ.
- ±×·¡¼­ ÁÖ¼­¹ö Á¤ÀÇ°¡ °¡»óÈ£½ºÆ® Á¤ÀÇ µÚ¿¡ ³ª¿Íµµ °¡»óÈ£½ºÆ®
- Á¤ÀÇ¿¡ ¿µÇâÀ» ÁØ´Ù.</p>
-
- <p>ÁÖ¼­¹ö¿¡ <code>ServerName</code>ÀÌ ¾ø´Ù¸é À¥¼­¹ö¸¦ ½ÇÇàÇÏ´Â
- ÄÄÇ»ÅÍÀÇ È£½ºÆ®¸íÀ» ´ë½Å »ç¿ëÇÑ´Ù. ÁÖ¼­¹öÀÇ
- <code>ServerName</code>À» DNS °Ì»öÇÏ¿© ¾òÀº IP ÁÖ¼ÒµéÀ»
- <em>ÁÖ¼­¹ö ÁÖ¼ÒÁýÇÕ</em>À̶ó°í ºÎ¸¥´Ù.</p>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ <code>ServerName</code>À» Á¤ÀÇÇÏÁö
- ¾ÊÀ¸¸é °¡»óÈ£½ºÆ®¸¦ Á¤ÀÇÇÏ´Â <code>VirtualHost</code>¿¡¼­
- óÀ½À¸·Î ³ª¿Â ÁÖ¼Ò¸¦ ±âº»°ªÀ¸·Î »ç¿ëÇÑ´Ù.</p>
-
- <p>Ưº°ÇÑ <code>_default_</code> ¿ÍÀÏƮīµå¸¦ Æ÷ÇÔÇÏ´Â
- °¡»óÈ£½ºÆ®´Â ÁÖ¼­¹ö¿Í °°Àº <code>ServerName</code>À» °¡Áø´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hostmatching" id="hostmatching">°¡»óÈ£½ºÆ® ã±â</a></h2>
-
- <p>¼­¹ö´Â ¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î ¾î¶² °¡»óÈ£½ºÆ®°¡ ¿äûÀ»
- ó¸®ÇÒÁö °áÁ¤ÇÑ´Ù:</p>
-
- <h3><a name="hashtable" id="hashtable">Çؽ¬Å×À̺í ã±â</a></h3>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ óÀ½ ¿¬°áÇÏ¸é ¿¬°áÇÑ IP ÁÖ¼Ò¸¦ ³»ºÎ IP
- Çؽ¬Å×ÀÌºí¿¡¼­ ã´Â´Ù.</p>
-
- <p>IP ÁÖ¼Ò¸¦ ãÀ» ¼ö ¾ø°í Ŭ¶óÀ̾ðÆ®°¡ ¿äûÀ» º¸³½ Æ÷Æ®¿¡
- ÇØ´çÇÏ´Â °¡»óÈ£½ºÆ®°¡ ÀÖ´Ù¸é, <code>_default_</code> °¡»óÈ£½ºÆ®°¡
- ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. <code>_default_</code> °¡»óÈ£½ºÆ®°¡
- ¾ø´Ù¸é ÁÖ¼­¹ö°¡ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- <p>Çؽ¬Å×ÀÌºí¿¡ IP ÁÖ¼Ò°¡ ¾øÁö¸¸ Æ÷Æ® ¹øÈ£°¡
- <code>NameVirtualHost *</code>¿¡ ÇØ´çÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì
- À̸§±â¹Ý °¡»óÈ£½ºÆ®Ã³·³ ó¸®ÇÑ´Ù.</p>
-
- <p>ã¾Ò´Ù¸é (¸ñ·Ï¿¡¼­ IP ÁÖ¼Ò¿¡ ÇØ´çÇÏ´Â Ç׸ñÀ» ãÀ¸¸é),
- IP±â¹Ý °¡»óÈ£½ºÆ®ÀÎÁö À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÎÁö °áÁ¤ÇÑ´Ù.</p>
-
-
-
- <h3><a name="ipbased" id="ipbased">IP±â¹Ý °¡»óÈ£½ºÆ®</a></h3>
-
- <p>ãÀº Ç׸ñ¿¡ À̸§ ¸ñ·ÏÀÌ ¾ø´Ù¸é IP±â¹Ý °¡»óÈ£½ºÆ®ÀÌ´Ù.
- ´õ ÀÌ»ó ÀÛ¾÷ÀÌ ÇÊ¿ä¾ø°í, ±× °¡»óÈ£½ºÆ®°¡ ¿äûÀ» ó¸®ÇÑ´Ù.</p>
-
-
-
- <h3><a name="namebased" id="namebased">À̸§±â¹Ý °¡»óÈ£½ºÆ®</a></h3>
-
- <p>À̸§ ¸ñ·Ï¿¡ ÇÑ°³ ÀÌ»óÀÇ °¡»óÈ£½ºÆ® ±¸Á¶°¡ Æ÷ÇԵǸé
- À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÌ´Ù. ÀÌ ¸ñ·Ï¿¡¼­ °¡»óÈ£½ºÆ®µéÀº ¼³Á¤ÆÄÀÏÀÇ
- <code>VirtualHost</code> ¼ø¼­´ë·Î À§Ä¡ÇÑ´Ù.</p>
-
- <p>¸ñ·Ï¿¡¼­ ù¹ø° °¡»óÈ£½ºÆ®(¼³Á¤ÆÄÀÏ¿¡¼­ ÇØ´ç IP ÁÖ¼Ò¸¦
- Æ÷ÇÔÇϴ ù¹ø° °¡»óÈ£½ºÆ®)´Â °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áö¸ç,
- ¼­¹ö¸íÀ» ¾Ë ¼ö ¾ø°Å³ª <code>Host:</code> Çì´õ°¡ ¾ø´Â ¿äûÀ»
- ó¸®ÇÑ´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ <code>Host:</code> Çì´õ¸¦ ÁÖ¸é, ¸ñ·Ï¿¡¼­
- ù¹ø°·Î <code>ServerName</code>À̳ª
- <code>ServerAlias</code>°¡ ´ëÀÀÇÏ´Â °¡»óÈ£½ºÆ®°¡ ¿äûÀ»
- ¼­ºñ½ºÇÑ´Ù. <code>Host:</code> Çì´õ¿¡ Æ÷Æ® ¹øÈ£°¡ ³ª¿Ã ¼ö
- ÀÖÁö¸¸, ¾ÆÆÄÄ¡´Â Ç×»ó Ŭ¶óÀ̾ðÆ®°¡ ¿äûÀ» º¸³½ ½ÇÁ¦ Æ÷Æ®¸¦
- ã´Â´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ <code>Host:</code> Çì´õ¾øÀÌ HTTP/1.0 ¿äûÀ»
- Çϸé Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ¼­¹ö¿¡ ¿¬°áÇÏ·Á´ÂÁö ¾Ë ¼ö ¾ø±â¶§¹®¿¡
- ¿äûÀÇ URI¿¡ ÇØ´çÇÏ´Â <code>ServerPath</code>°¡ ÀÖ´ÂÁö ã´Â´Ù.
- ¸ñ·Ï¿¡¼­ Á¦ÀÏ ¸ÕÀú ãÀº °æ·Î¸¦ »ç¿ëÇÏ°í, ±× °¡»óÈ£½ºÆ®°¡
- ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- <p>´ëÀÀÇÏ´Â °¡»óÈ£½ºÆ®¸¦ ãÀ» ¼ö ¾ø´Ù¸é, (ÀÌ¹Ì ¾Õ¿¡ ¸»ÇßµíÀÌ)
- Ŭ¶óÀ̾ðÆ®°¡ ¿¬°áÇÑ IP¿¡ ´ëÇÑ ¸ñ·Ï¿¡¼­ ÀÏÄ¡ÇÏ´Â Æ÷Æ® ¹øÈ£¸¦
- Æ÷ÇÔÇϴ ù¹ø° °¡»óÈ£½ºÆ®°¡ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
-
-
- <h3><a name="persistent" id="persistent">Áö¼Ó ¿¬°á</a></h3>
-
- <p>IP´Â À§¿¡¼­ ¼³¸íÇѵ¥·Î ƯÁ¤ TCP/IP ¼¼¼Ç´ç <em>Çѹø¸¸</em>
- ãÁö¸¸, À̸§Àº KeepAlive/Áö¼Ó ¿¬°áµ¿¾È <em>¸Å</em> ¿äû¶§¸¶´Ù
- ã´Â´Ù. Áï, Ŭ¶óÀ̾ðÆ®´Â Áö¼Ó ¿¬°áµ¿¾È ¿©·¯ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®ÀÇ ÆäÀÌÁö¸¦ ¿äûÇÒ ¼ö ÀÖ´Ù.</p>
-
-
-
- <h3><a name="absoluteURI" id="absoluteURI">Àý´ë URI</a></h3>
-
- <p>¿äûÀÇ URI°¡ Àý´ë URIÀÌ°í Ŭ¶óÀ̾ðÆ®°¡ º¸³½ ¿äûÀÇ
- È£½ºÆ®¸í°ú Æ÷Æ®°¡ ÁÖ¼­¹ö³ª ƯÁ¤ °¡»óÈ£½ºÆ®¿¡ ÇØ´çÇϸé,
- ±× ÁÖ¼­¹ö ȤÀº °¡»óÈ£½ºÆ®´Â URI ¾ÕÀÇ ½ºÅ´/È£½ºÆ®¸í/Æ÷Æ®
- ºÎºÐÀ» Á¦¿ÜÇÑ ³ª¸ÓÁö »ó´ë URI¸¦ ¼­ºñ½ºÇÑ´Ù. ÇØ´çÇÏ´Â
- ÁÖ¼­¹ö³ª °¡»óÈ£½ºÆ®°¡ ¾ø´Ù¸é URI¸¦ ±×´ë·Î µÎ°í ¿äûÀ»
- ÇÁ·Ï½Ã ¿äûÀ¸·Î ó¸®ÇÑ´Ù.</p>
-
-
-<h3><a name="observations" id="observations">ÁÖÀÇ</a></h3>
-
- <ul>
- <li>À̸§±â¹Ý °¡»óÈ£½ºÆ®¿Í IP±â¹Ý °¡»óÈ£½ºÆ®´Â ¼­·Î¿¡°Ô
- ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ÀÚ½ÅÀÇ À̸§ÁýÇÕ
- IP ÁÖ¼Ò¿Ü¿¡ ¾î¶² Áּҷεµ Á¢±ÙÇÒ ¼ö ¾ø´Ù. À̸§±â¹Ý
- °¡»óÈ£½ºÆ®µµ ¸¶Âù°¡Áö´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â
- <code>NameVirtualHost</code> Áö½Ã¾î·Î Á¤ÀÇÇÑ ÁÖ¼ÒÁýÇÕÀÇ
- IP ÁÖ¼Ò¸¦ ÅëÇؼ­¸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</li>
-
- <li>IP±â¹Ý °¡»óÈ£½ºÆ®´Â <code>ServerAlias</code>¿Í
- <code>ServerPath</code>¸¦ Àý´ë·Î °Ë»çÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li>¼³Á¤ÆÄÀÏ¿¡¼­ À̸§±â¹Ý °¡»óÈ£½ºÆ®, IP±â¹Ý °¡»óÈ£½ºÆ®,
- <code>_default_</code> °¡»óÈ£½ºÆ®, <code>NameVirtualHost</code>
- Áö½Ã¾îÀÇ ¼ø¼­´Â Áß¿äÇÏÁö ¾Ê´Ù. ƯÁ¤ ÁÖ¼ÒÁýÇÕ¿¡ ´ëÇÑ
- À̸§±â¹Ý °¡»óÈ£½ºÆ®µéÀÇ ¼ø¼­¸¸ÀÌ Áß¿äÇÏ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­
- ¾Õ¿¡ ³ª¿À´Â À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â ÀÚ½ÅÀÌ ¼ÓÇÑ ÁÖ¼ÒÁýÇÕ¿¡¼­
- °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áø´Ù.</li>
-
- <li>º¸¾ÈÀ» À§ÇØ <code>Host:</code> Çì´õ¿¡ Æ÷ÇÔµÈ Æ÷Æ®
- ¹øÈ£´Â Àý´ë·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù. ¾ÆÆÄÄ¡´Â Ç×»ó Ŭ¶óÀ̾ðÆ®°¡
- ¿äûÀ» º¸³½ ½ÇÁ¦ Æ÷Æ®¸¦ »ç¿ëÇÑ´Ù.</li>
-
- <li>(µÑ »çÀ̸¦ ±¸º°ÇÒ <code>Host:</code> Çì´õ°¡ ¾ø´Ù°í
- °¡Á¤Çϸé,) <code>ServerPath</code> Áö½Ã¾î°¡ ¼³Á¤ÆÄÀÏ¿¡¼­
- µÚ¿¡ ³ª¿À´Â ´Ù¸¥ <code>ServerPath</code> Áö½Ã¾îÀÇ ¾ÕºÎºÐÀ»
- ÁöĪÇÏ´Â °æ¿ì Ç×»ó ¾Õ¿¡ ³ª¿Â Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.</li>
-
- <li>µÎ IP±â¹Ý °¡»óÈ£½ºÆ®°¡ °°Àº ÁÖ¼Ò¸¦ °¡Áö¸é, Ç×»ó
- ¼³Á¤ÆÄÀÏ¿¡¼­ ¾Õ¿¡ ³ª¿À´Â °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÑ´Ù. ÀÌ·± ÀÏÀº
- ¾Æ¹«µµ ¸ð¸£°Ô ÀϾ ¼ö ÀÖ´Ù. ¼­¹ö°¡ ÀÌ·± »óȲÀ» ¹ß°ßÇϸé
- ¿À·ù ·Î±×ÆÄÀÏ¿¡ °æ°í¸¦ ±â·ÏÇÑ´Ù.</li>
-
- <li><code>_default_</code> °¡»óÈ£½ºÆ®´Â ¿äûÀÇ IP ÁÖ¼Ò<em>¿Í</em>
- Æ÷Æ® ¹øÈ£¿¡ ÇØ´çÇÏ´Â °¡»óÈ£½ºÆ®°¡ ¾øÀ»¶§¸¸ ¿äûÀ» ó¸®ÇÑ´Ù.
- Ŭ¶óÀ̾ðÆ®°¡ ¿äûÀ» º¸³½ Æ÷Æ® ¹øÈ£°¡ <code>_default_</code>
- °¡»óÈ£½ºÆ®ÀÇ Æ÷Æ® ¹øÈ£(±âº»°ªÀº <code>Listen</code>)¿Í
- °°À»¶§¸¸ ¿äûÀ» ó¸®ÇÑ´Ù. ¾î¶² Æ÷Æ®ÀÇ ¿äûÀÌ¶óµµ Àâ±âÀ§ÇØ
- (<em>¿¹¸¦ µé¾î</em>, <code>_default_:*</code>) ¿ÍÀϵåÄ«µå
- Æ÷Æ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <code>NameVirtualHost *</code>
- °¡»óÈ£½ºÆ®µµ ¸¶Âù°¡Áö´Ù.</li>
-
- <li>ÁÖ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¿¬°áÇÑ IP ÁÖ¼Ò¿Í Æ÷Æ® ¹øÈ£¿¡
- ÇØ´çÇÏ´Â (<code>_default_</code> °¡»óÈ£½ºÆ®¸¦ Æ÷ÇÔÇÏ¿©)
- °¡»óÈ£½ºÆ®°¡ ¾øÀ»¶§¸¸ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. Áï, ÁÖ¼­¹ö´Â
- (±× Æ÷Æ®¿¡ ÇØ´çÇÏ´Â <code>_default_</code> °¡»óÈ£½ºÆ®°¡
- ¾ø´Ù¸é) ÁöÁ¤ÇÏÁö¾ÊÀº ÁÖ¼Ò/Æ÷Æ® ½Ö¿¡ ´ëÇÑ ¿äû¸¸À» ó¸®ÇÑ´Ù.</li>
-
- <li>Ŭ¶óÀ̾ðÆ®°¡ (<em>¿¹¸¦ µé¾î</em>, <code>NameVirtualHost</code>
- Áö½Ã¾î¿¡¼­) À̸§±â¹Ý °¡»óÈ£½ºÆ® ÁÖ¼Ò(¿Í Æ÷Æ®)¿¡ ¿¬°áÇÑ
- °æ¿ì <code>Host:</code> Çì´õ¸¦ ¾Ë ¼ö ¾ø°Å³ª Çì´õ°¡ ¾ø´Â
- ¿äûÀ» º¸³»¸é ¿äûÀº <em>Àý´ë·Î</em> <code>_default_</code>
- °¡»óÈ£½ºÆ®³ª ÁÖ¼­¹ö¿¡¼­ ó¸®ÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li>½ÃÀÛÇÒ¶§ ¼­¹ö°¡ DNS¸¦ ÀÇÁ¸ÇÏÁö ¾ÊÀ¸·Á¸é Àý´ë·Î
- <code>VirtualHost</code> Áö½Ã¾î¿¡ DNS À̸§À» »ç¿ëÇÏÁö¸¶¶ó.
- °Ô´Ù°¡ ¿­°ÅÇÑ ¸ðµç µµ¸ÞÀÎÀÇ DNS¸¦ ÅëÁ¦ÇÏÁö ¾Ê´Â´Ù¸é
- º¸¾È»ó À§Çèµµ ÀÖ´Ù. ÀÌ¿¡ ´ëÇÑ <a href="../dns-caveats.html">Á¤º¸</a>°¡ ÀÖ´Ù.</li>
-
- <li>°¢ °¡»óÈ£½ºÆ®¸¶´Ù <code>ServerName</code>¸¦ Ç×»ó
- Á¤ÀÇÇØ¾ß ÇÑ´Ù. ¾È±×·¯¸é °¡»óÈ£½ºÆ®¸¶´Ù DNS¸¦ ã°Ô µÈ´Ù.</li>
- </ul>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="tips" id="tips">ÆÁ</a></h2>
-
- <p><a href="../dns-caveats.html#tips">DNS ¹®Á¦</a> ÆäÀÌÁöÀÇ
- ÆÁ¿¡ Ãß°¡·Î ¾Æ·¡¿¡ ÆÁÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>¸ðµç ÁÖ¼­¹ö Á¤ÀǸ¦ <code>VirtualHost</code> Á¤ÀÇ ¾Õ¿¡
- µÎ¾î¶ó. (±×·¯¸é ¼³Á¤À» Àбâ ÆíÇÏ´Ù. ¾È±×·¯¸é ³ªÁß¿¡ ¼³Á¤ÀÌ
- ÇÕÃÄÁú¶§ °¡»óÈ£½ºÆ®µé »çÀÌ¿¡ ¼¯ÀÎ Á¤ÀÇ°¡ ¸ðµç °¡»óÈ£½ºÆ®¿¡
- ¿µÇâÀ» ÁÙ ¼ö Àֱ⶧¹®¿¡ È¥¶õ½º·´´Ù.)</li>
-
- <li>Àбâ ÆíÇϵµ·Ï ¼³Á¤¿¡¼­ ÇØ´çÇÏ´Â <code>NameVirtualHost</code>°ú
- <code>VirtualHost</code> Á¤ÀǵéÀ» ¹­¾î¶ó.</li>
-
- <li><code>ServerPath</code>°¡ ´Ù¸¥ <code>ServerPath</code>ÀÇ
- ¾ÕºÎºÐÀ» ÁöĪÇÏ´Â °æ¿ì¸¦ ÇÇÇ϶ó. ÇÇÇÒ ¼ö ¾ø´Ù¸é ¼³Á¤ÆÄÀÏ¿¡¼­
- ¾ÕºÎºÐÀÌ ´õ ±ä (´õ ÀÚ¼¼ÇÑ) °¡»óÈ£½ºÆ®¸¦ ªÀº (´ú ÀÚ¼¼ÇÑ)
- °¡»óÈ£½ºÆ®º¸´Ù ¾Õ¿¡ µÎ¾î¶ó. (<em>¿¹¸¦ µé¾î</em>,
- "ServerPath /abc"´Â "ServerPath /abc/def" ´ÙÀ½¿¡ µÎ¾î¾ß
- ÇÑ´Ù.</li>
- </ul>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/details.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/details.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/details.xml b/docs/manual/vhosts/details.xml
deleted file mode 100644
index e3254c4f41..0000000000
--- a/docs/manual/vhosts/details.xml
+++ /dev/null
@@ -1,432 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="details.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
- <title>An In-Depth Discussion of Virtual Host Matching</title>
-
-<summary>
-
- <p>The virtual host code was completely rewritten in
- <strong>Apache 1.3</strong>. This document attempts to explain
- exactly what Apache does when deciding what virtual host to
- serve a hit from. With the help of the new
- <directive module="core">NameVirtualHost</directive>
- directive virtual host configuration should be a lot easier and
- safer than with versions prior to 1.3.</p>
-
- <p>If you just want to <cite>make it work</cite> without
- understanding how, here are <a href="examples.html">some
- examples</a>.</p>
-
-</summary>
-
-<section id="configparsing"><title>Config File Parsing</title>
-
- <p>There is a <em>main_server</em> which consists of all the
- definitions appearing outside of
- <code>&lt;VirtualHost&gt;</code> sections. There are virtual
- servers, called <em>vhosts</em>, which are defined by
- <directive type="section" module="core">VirtualHost</directive>
- sections.</p>
-
- <p>The directives
- <directive module="mpm_common">Listen</directive>,
- <directive module="core">ServerName</directive>,
- <directive module="core">ServerPath</directive>,
- and <directive module="core">ServerAlias</directive>
- can appear anywhere within the definition of a server. However,
- each appearance overrides the previous appearance (within that
- server).</p>
-
- <p>The default value of the <code>Listen</code> field for
- main_server is 80. The main_server has no default
- <code>ServerPath</code>, or <code>ServerAlias</code>. The
- default <code>ServerName</code> is deduced from the server's IP
- address.</p>
-
- <p>The main_server Listen directive has two functions. One
- function is to determine the default network port Apache will
- bind to. The second function is to specify the port number
- which is used in absolute URIs during redirects.</p>
-
- <p>Unlike the main_server, vhost ports <em>do not</em> affect
- what ports Apache listens for connections on.</p>
-
- <p>Each address appearing in the <code>VirtualHost</code>
- directive can have an optional port. If the port is unspecified
- it defaults to the value of the main_server's most recent
- <code>Listen</code> statement. The special port <code>*</code>
- indicates a wildcard that matches any port. Collectively the
- entire set of addresses (including multiple <code>A</code>
- record results from DNS lookups) are called the vhost's
- <em>address set</em>.</p>
-
- <p>Unless a <directive module="core">NameVirtualHost</directive>
- directive is used for a specific IP address the first vhost
- with that address is treated as an IP-based vhost. The IP
- address can also be the wildcard <code>*</code>.</p>
-
- <p>If name-based vhosts should be used a
- <code>NameVirtualHost</code> directive <em>must</em> appear
- with the IP address set to be used for the name-based vhosts.
- In other words, you must specify the IP address that holds the
- hostname aliases (CNAMEs) for your name-based vhosts via a
- <code>NameVirtualHost</code> directive in your configuration
- file.</p>
-
- <p>Multiple <code>NameVirtualHost</code> directives can be used
- each with a set of <code>VirtualHost</code> directives but only
- one <code>NameVirtualHost</code> directive should be used for
- each specific IP:port pair.</p>
-
- <p>The ordering of <code>NameVirtualHost</code> and
- <code>VirtualHost</code> directives is not important which
- makes the following two examples identical (only the order of
- the <code>VirtualHost</code> directives for <em>one</em>
- address set is important, see below):</p>
-
-<table><tr>
-<td><example>
- NameVirtualHost 111.22.33.44<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server A<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.55<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server D<br />
- ...<br />
- &lt;/VirtualHost&gt;
-</example></td>
-<td><example>
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server A<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # server B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # server D<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.44<br />
- NameVirtualHost 111.22.33.55<br />
- <br />
-</example></td>
-</tr></table>
-
-
- <p>(To aid the readability of your configuration you should
- prefer the left variant.)</p>
-
- <p>After parsing the <code>VirtualHost</code> directive, the
- vhost server is given a default <code>Listen</code> equal to the
- port assigned to the first name in its <code>VirtualHost</code>
- directive.</p>
-
- <p>The complete list of names in the <code>VirtualHost</code>
- directive are treated just like a <code>ServerAlias</code> (but
- are not overridden by any <code>ServerAlias</code> statement)
- if all names resolve to the same address set. Note that
- subsequent <code>Listen</code> statements for this vhost will not
- affect the ports assigned in the address set.</p>
-
- <p>During initialization a list for each IP address is
- generated and inserted into an hash table. If the IP address is
- used in a <code>NameVirtualHost</code> directive the list
- contains all name-based vhosts for the given IP address. If
- there are no vhosts defined for that address the
- <code>NameVirtualHost</code> directive is ignored and an error
- is logged. For an IP-based vhost the list in the hash table is
- empty.</p>
-
- <p>Due to a fast hashing function the overhead of hashing an IP
- address during a request is minimal and almost not existent.
- Additionally the table is optimized for IP addresses which vary
- in the last octet.</p>
-
- <p>For every vhost various default values are set. In
- particular:</p>
-
- <ol>
- <li>If a vhost has no <directive module="core">ServerAdmin</directive>,
- <directive module="core">ResourceConfig</directive>,
- <directive module="core">AccessConfig</directive>,
- <directive module="core">Timeout</directive>,
- <directive module="core">KeepAliveTimeout</directive>,
- <directive module="core">KeepAlive</directive>,
- <directive module="core">MaxKeepAliveRequests</directive>,
- or <directive module="core">SendBufferSize</directive>
- directive then the respective value is inherited from the
- main_server. (That is, inherited from whatever the final
- setting of that value is in the main_server.)</li>
-
- <li>The "lookup defaults" that define the default directory
- permissions for a vhost are merged with those of the
- main_server. This includes any per-directory configuration
- information for any module.</li>
-
- <li>The per-server configs for each module from the
- main_server are merged into the vhost server.</li>
- </ol>
-
- <p>Essentially, the main_server is treated as "defaults" or a
- "base" on which to build each vhost. But the positioning of
- these main_server definitions in the config file is largely
- irrelevant -- the entire config of the main_server has been
- parsed when this final merging occurs. So even if a main_server
- definition appears after a vhost definition it might affect the
- vhost definition.</p>
-
- <p>If the main_server has no <code>ServerName</code> at this
- point, then the hostname of the machine that httpd is running
- on is used instead. We will call the <em>main_server address
- set</em> those IP addresses returned by a DNS lookup on the
- <code>ServerName</code> of the main_server.</p>
-
- <p>For any undefined <code>ServerName</code> fields, a
- name-based vhost defaults to the address given first in the
- <code>VirtualHost</code> statement defining the vhost.</p>
-
- <p>Any vhost that includes the magic <code>_default_</code>
- wildcard is given the same <code>ServerName</code> as the
- main_server.</p>
-
-</section>
-
-<section id="hostmatching"><title>Virtual Host Matching</title>
-
- <p>The server determines which vhost to use for a request as
- follows:</p>
-
- <section id="hashtable"><title>Hash table lookup</title>
-
- <p>When the connection is first made by a client, the IP
- address to which the client connected is looked up in the
- internal IP hash table.</p>
-
- <p>If the lookup fails (the IP address wasn't found) the
- request is served from the <code>_default_</code> vhost if
- there is such a vhost for the port to which the client sent the
- request. If there is no matching <code>_default_</code> vhost
- the request is served from the main_server.</p>
-
- <p>If the IP address is not found in the hash table then the
- match against the port number may also result in an entry
- corresponding to a <code>NameVirtualHost *</code>, which is
- subsequently handled like other name-based vhosts.</p>
-
- <p>If the lookup succeeded (a corresponding list for the IP
- address was found) the next step is to decide if we have to
- deal with an IP-based or a name-base vhost.</p>
-
- </section>
-
- <section id="ipbased"><title>IP-based vhost</title>
-
- <p>If the entry we found has an empty name list then we have
- found an IP-based vhost, no further actions are performed and
- the request is served from that vhost.</p>
-
- </section>
-
- <section id="namebased"><title>Name-based vhost</title>
-
- <p>If the entry corresponds to a name-based vhost the name list
- contains one or more vhost structures. This list contains the
- vhosts in the same order as the <code>VirtualHost</code>
- directives appear in the config file.</p>
-
- <p>The first vhost on this list (the first vhost in the config
- file with the specified IP address) has the highest priority
- and catches any request to an unknown server name or a request
- without a <code>Host:</code> header field.</p>
-
- <p>If the client provided a <code>Host:</code> header field the
- list is searched for a matching vhost and the first hit on a
- <code>ServerName</code> or <code>ServerAlias</code> is taken
- and the request is served from that vhost. A <code>Host:</code>
- header field can contain a port number, but Apache always
- matches against the real port to which the client sent the
- request.</p>
-
- <p>If the client submitted a HTTP/1.0 request without
- <code>Host:</code> header field we don't know to what server
- the client tried to connect and any existing
- <code>ServerPath</code> is matched against the URI from the
- request. The first matching path on the list is used and the
- request is served from that vhost.</p>
-
- <p>If no matching vhost could be found the request is served
- from the first vhost with a matching port number that is on the
- list for the IP to which the client connected (as already
- mentioned before).</p>
-
- </section>
-
- <section id="persistent"><title>Persistent connections</title>
-
- <p>The IP lookup described above is only done <em>once</em> for a
- particular TCP/IP session while the name lookup is done on
- <em>every</em> request during a KeepAlive/persistent
- connection. In other words a client may request pages from
- different name-based vhosts during a single persistent
- connection.</p>
-
- </section>
-
- <section id="absoluteURI"><title>Absolute URI</title>
-
- <p>If the URI from the request is an absolute URI, and its
- hostname and port match the main server or one of the
- configured virtual hosts <em>and</em> match the address and
- port to which the client sent the request, then the
- scheme/hostname/port prefix is stripped off and the remaining
- relative URI is served by the corresponding main server or
- virtual host. If it does not match, then the URI remains
- untouched and the request is taken to be a proxy request.</p>
-</section>
-
-<section id="observations"><title>Observations</title>
-
- <ul>
- <li>A name-based vhost can never interfere with an IP-base
- vhost and vice versa. IP-based vhosts can only be reached
- through an IP address of its own address set and never
- through any other address. The same applies to name-based
- vhosts, they can only be reached through an IP address of the
- corresponding address set which must be defined with a
- <code>NameVirtualHost</code> directive.</li>
-
- <li><code>ServerAlias</code> and <code>ServerPath</code>
- checks are never performed for an IP-based vhost.</li>
-
- <li>The order of name-/IP-based, the <code>_default_</code>
- vhost and the <code>NameVirtualHost</code> directive within
- the config file is not important. Only the ordering of
- name-based vhosts for a specific address set is significant.
- The one name-based vhosts that comes first in the
- configuration file has the highest priority for its
- corresponding address set.</li>
-
- <li>For security reasons the port number given in a
- <code>Host:</code> header field is never used during the
- matching process. Apache always uses the real port to which
- the client sent the request.</li>
-
- <li>If a <code>ServerPath</code> directive exists which is a
- prefix of another <code>ServerPath</code> directive that
- appears later in the configuration file, then the former will
- always be matched and the latter will never be matched. (That
- is assuming that no <code>Host:</code> header field was
- available to disambiguate the two.)</li>
-
- <li>If two IP-based vhosts have an address in common, the
- vhost appearing first in the config file is always matched.
- Such a thing might happen inadvertently. The server will give
- a warning in the error logfile when it detects this.</li>
-
- <li>A <code>_default_</code> vhost catches a request only if
- there is no other vhost with a matching IP address
- <em>and</em> a matching port number for the request. The
- request is only caught if the port number to which the client
- sent the request matches the port number of your
- <code>_default_</code> vhost which is your standard
- <code>Listen</code> by default. A wildcard port can be
- specified (<em>i.e.</em>, <code>_default_:*</code>) to catch
- requests to any available port. This also applies to
- <code>NameVirtualHost *</code> vhosts.</li>
-
- <li>The main_server is only used to serve a request if the IP
- address and port number to which the client connected is
- unspecified and does not match any other vhost (including a
- <code>_default_</code> vhost). In other words the main_server
- only catches a request for an unspecified address/port
- combination (unless there is a <code>_default_</code> vhost
- which matches that port).</li>
-
- <li>A <code>_default_</code> vhost or the main_server is
- <em>never</em> matched for a request with an unknown or
- missing <code>Host:</code> header field if the client
- connected to an address (and port) which is used for
- name-based vhosts, <em>e.g.</em>, in a
- <code>NameVirtualHost</code> directive.</li>
-
- <li>You should never specify DNS names in
- <code>VirtualHost</code> directives because it will force
- your server to rely on DNS to boot. Furthermore it poses a
- security threat if you do not control the DNS for all the
- domains listed. There's <a href="../dns-caveats.html">more
- information</a> available on this and the next two
- topics.</li>
-
- <li><code>ServerName</code> should always be set for each
- vhost. Otherwise A DNS lookup is required for each
- vhost.</li>
- </ul>
- </section>
-
-</section>
-
-<section id="tips"><title>Tips</title>
-
- <p>In addition to the tips on the <a
- href="../dns-caveats.html#tips">DNS Issues</a> page, here are
- some further tips:</p>
-
- <ul>
- <li>Place all main_server definitions before any
- <code>VirtualHost</code> definitions. (This is to aid the
- readability of the configuration -- the post-config merging
- process makes it non-obvious that definitions mixed in around
- virtual hosts might affect all virtual hosts.)</li>
-
- <li>Group corresponding <code>NameVirtualHost</code> and
- <code>VirtualHost</code> definitions in your configuration to
- ensure better readability.</li>
-
- <li>Avoid <code>ServerPaths</code> which are prefixes of
- other <code>ServerPaths</code>. If you cannot avoid this then
- you have to ensure that the longer (more specific) prefix
- vhost appears earlier in the configuration file than the
- shorter (less specific) prefix (<em>i.e.</em>, "ServerPath
- /abc" should appear after "ServerPath /abc/def").</li>
- </ul>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/vhosts/details.xml.ko b/docs/manual/vhosts/details.xml.ko
deleted file mode 100644
index cab560ddb5..0000000000
--- a/docs/manual/vhosts/details.xml.ko
+++ /dev/null
@@ -1,376 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="details.xml.meta">
-<parentdocument href="./">°¡»óÈ£½ºÆ®</parentdocument>
- <title>°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</title>
-
-<summary>
-
- <p>°¡»óÈ£½ºÆ® ÄÚµå´Â <strong>¾ÆÆÄÄ¡ 1.3</strong>¿¡¼­ °ÅÀÇ ´Ù½Ã
- ÀÛ¼ºµÇ¾ú´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡°¡ ¿äûÀ» ¹ÞÀ¸¸é ¾î¶² °¡»óÈ£½ºÆ®°¡
- ¼­ºñ½ºÇÒÁö °áÁ¤ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. »õ·Î¿î <directive
- module="core">NameVirtualHost</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
- °¡»óÈ£½ºÆ® ¼³Á¤ÀÌ 1.3 ¹öÀü ÀÌÀüº¸´Ù ´õ ½±°í ¾ÈÀüÇØÁ³´Ù.</p>
-
- <p>¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ÀÌÇØÇÏÁö¾Ê°í ´ÜÁö <cite>µ¿ÀÛÇÏ°Ô¸¸</cite>
- ÇÏ°í ½Í´Ù¸é, <a href="examples.html">¿¹Á¦µé</a>À» Âü°íÇ϶ó.</p>
-
-</summary>
-
-<section id="configparsing"><title>¼³Á¤ÆÄÀÏ Àбâ</title>
-
- <p><code>&lt;VirtualHost&gt;</code> ¼³Á¤À» Á¦¿ÜÇÑ ¼³Á¤ÀÌ
- <em>ÁÖ¼­¹ö</em>¸¦ ¸¸µç´Ù. <directive type="section"
- module="core">VirtualHost</directive> ¼½¼ÇÀ¸·Î Á¤ÀÇÇÑ
- ºÎºÐÀ» °¡»óÈ£½ºÆ®¶ó°í ºÎ¸¥´Ù.</p>
-
- <p><directive module="mpm_common">Listen</directive>,
- <directive module="core">ServerName</directive>,
- <directive module="core">ServerPath</directive>,
- <directive module="core">ServerAlias</directive> Áö½Ã¾î´Â
- ¼­¹ö Á¤ÀÇ ¾î´À°÷¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª °°Àº Áö½Ã¾î°¡
- ¿©·¯¹ø ³ª¿À¸é (±× ¼­¹ö¿¡¼­) ¸¶Áö¸· Áö½Ã¾î¸¸ÀÌ À¯È¿ÇÏ´Ù.</p>
-
- <p>ÁÖ¼­¹ö <code>Listen</code>ÀÇ ±âº»°ªÀº 80ÀÌ´Ù. ÁÖ¼­¹öÀÇ
- <code>ServerPath</code>³ª <code>ServerAlias</code>¿¡´Â
- ±âº»°ªÀº ¾ø´Ù. <code>ServerName</code>ÀÇ ±âº»°ªÀº ¼­¹öÀÇ
- IP ÁÖ¼ÒÀÌ´Ù.</p>
-
- <p>ÁÖ¼­¹öÀÇ Listen Áö½Ã¾î´Â µÎ°¡Áö ±â´ÉÀ» ÇÑ´Ù. ù°´Â
- ¾ÆÆÄÄ¡°¡ ¿¬°áÇÒ ±âº» ³×Æ®¿÷ Æ÷Æ®¸¦ ÁöÁ¤ÇÏ´Â ÀÏÀÌ´Ù. µÑ°´Â
- ¸®´ÙÀÌ·º¼ÇÇÒ Àý´ë URI¿¡ »ç¿ëÇÒ Æ÷Æ® ¹øÈ£¸¦ ÁöÁ¤ÇÏ´Â ÀÏÀÌ´Ù.</p>
-
- <p>ÁÖ¼­¹ö¿Í ´Þ¸® °¡»óÈ£½ºÆ®ÀÇ Æ÷Æ®´Â ¾ÆÆÄÄ¡°¡ ¿¬°áÀ» ±â´Ù¸®´Â
- Æ÷Æ®¿¡ ¿µÇâÀ» ÁÖÁö <em>¾Ê´Â´Ù</em>.</p>
-
- <p><code>VirtualHost</code> Áö½Ã¾î¿¡ Æ÷Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
- Æ÷Æ®¸¦ ÁöÁ¤ÇÏÁö¾ÊÀ¸¸é ÁÖ¼­¹öÀÇ °¡Àå ÃÖ±Ù <code>Listen</code>
- °ªÀ» »ç¿ëÇÑ´Ù. Ưº°ÇÑ Æ÷Æ® <code>*</code>´Â ¾î¶² Æ÷Æ®¶óµµ
- ÁöĪÇÏ´Â ¿ÍÀϵåÄ«µåÀÌ´Ù. (DNS °Ë»ö °á°úÀÇ ¿©·¯ <code>A</code>
- ·¹Äڵ带 Æ÷ÇÔÇÏ¿©) °¡»óÈ£½ºÆ®ÀÇ ÁÖ¼Ò¸¦ ¸ðµÎ ÃÑĪÇÏ¿© °¡»óÈ£½ºÆ®ÀÇ
- <em>ÁÖ¼ÒÁýÇÕ(address set)</em>À̶ó°í ºÎ¸¥´Ù.</p>
-
- <p>ƯÁ¤ IP ÁÖ¼Ò¿¡ ´ëÇÑ <directive
- module="core">NameVirtualHost</directive> Áö½Ã¾î°¡ ¾ø´Ù¸é
- ±× ÁÖ¼Ò¸¦ Æ÷ÇÔÇϴ ù¹ø° °¡»óÈ£½ºÆ®¸¦ IP±â¹Ý °¡»óÈ£½ºÆ®·Î Ãë±ÞÇÑ´Ù.
- IP ÁÖ¼Ò¿¡ ¿ÍÀϵåÄ«µå <code>*</code>¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.</p>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÑ´Ù¸é À̸§±â¹Ý °¡»óÈ£½ºÆ®¿¡
- »ç¿ëÇÒ IP ÁÖ¼Ò¸¦ <code>NameVirtualHost</code> Áö½Ã¾î¿¡
- »ç¿ëÇØ¾ß <em>ÇÑ´Ù</em>. Áï, ¼³Á¤ÆÄÀÏÀÇ <code>NameVirtualHost</code>
- Áö½Ã¾î¿¡ À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ È£½ºÆ®º°¸í(CNAME)¿¡ ÇØ´çÇÏ´Â
- IP ÁÖ¼Ò¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>ƯÁ¤ IP:Æ÷Æ® ½Ö¿¡ ´ëÇØ ¿ÀÁ÷ ÇÑ <code>NameVirtualHost</code>
- Áö½Ã¾î¸¸À» »ç¿ëÇÑ´Ù¸é, ¿©·¯ <code>NameVirtualHost</code> Áö½Ã¾î¿Í
- <code>VirtualHost</code> Áö½Ã¾î¸¦ ¼¯¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><code>NameVirtualHost</code>¿Í <code>VirtualHost</code>
- Áö½Ã¾îÀÇ ¼ø¼­´Â Áß¿äÇÏÁö ¾Ê±â¶§¹®¿¡ ´ÙÀ½ µÎ ¿¹´Â °°´Ù (¿ÀÁ÷
- <em>ÇÑ</em> ÁÖ¼ÒÁýÇÕ¿¡ ´ëÇÑ <code>VirtualHost</code>ÀÇ
- ¼ø¼­°¡ Áß¿äÇÏ´Ù. ¾Æ·¡ Âü°í):</p>
-
-<table><tr>
-<td><example>
- NameVirtualHost 111.22.33.44<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö A<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.55<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö D<br />
- ...<br />
- &lt;/VirtualHost&gt;
-</example></td>
-<td><example>
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö A<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö C<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- # ¼­¹ö B<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- &lt;VirtualHost 111.22.33.55&gt;<br />
- # ¼­¹ö D<br />
- ...<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- NameVirtualHost 111.22.33.44<br />
- NameVirtualHost 111.22.33.55<br />
- <br />
-</example></td>
-</tr></table>
-
-
- <p>(¿ÞÂÊ ¼³Á¤ÀÌ ´õ Àбâ ÆíÇÏ´Ù.)</p>
-
- <p><code>VirtualHost</code> Áö½Ã¾î¸¦ ÀÐÀ» ´ÙÀ½, °¡»óÈ£½ºÆ®
- ¼­¹ö´Â <code>VirtualHost</code> Áö½Ã¾î¿¡ ÁöÁ¤ÇÑ Æ÷Æ®¸¦ ±âº»
- <code>Listen</code>À¸·Î ÇÑ´Ù.</p>
-
- <p><code>VirtualHost</code> Áö½Ã¾îÀÇ À̸§ÀÌ ¸ðµÎ °°Àº
- ÁÖ¼ÒÁýÇÕ¿¡ ¼ÓÇÑ´Ù¸é <code>ServerAlias</code>¿Í °°ÀÌ Ãë±ÞÇÑ´Ù
- (±×·¯³ª ´Ù¸¥ <code>ServerAlias</code>ÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù).
- °¡»óÈ£½ºÆ®¿¡ Ãß°¡·Î »ç¿ëÇÑ <code>Listen</code>Àº ÁÖ¼ÒÁýÇÕÀÌ
- ÁöÁ¤ÇÑ Æ÷Æ®¿¡ ¿µÇâÀ» ÁÖÁö ¾ÊÀ½À» ÁÖÀÇÇ϶ó.</p>
-
- <p>½ÃÀÛÇÒ¶§ IP ÁÖ¼Ò ¸ñ·ÏÀ» ¸¸µé¾î Çؽ¬Å×ÀÌºí¿¡ Ãß°¡ÇÑ´Ù.
- <code>NameVirtualHost</code> Áö½Ã¾î¿¡ IP ÁÖ¼Ò¸¦ »ç¿ëÇϸé
- ¸ñ·ÏÀº ±× IP ÁÖ¼Ò¿¡ ´ëÇÑ ¸ðµç À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ Æ÷ÇÔÇÑ´Ù.
- ±× ÁÖ¼Ò¿¡ ´ëÇÑ °¡»óÈ£½ºÆ®°¡ ¾ø´Ù¸é <code>NameVirtualHost</code>
- Áö½Ã¾î¸¦ ¹«½ÃÇÏ°í ·Î±×¿¡ ¿À·ù¸¦ ±â·ÏÇÑ´Ù. IP±â¹Ý °¡»óÈ£½ºÆ®´Â
- Çؽ¬Å×ÀÌºí¿¡ ¸ñ·ÏÀ» Ãß°¡ÇÏÁö ¾Ê´Â´Ù.</p>
-
- <p>ºü¸¥ Çؽ¬ÇÔ¼ö¸¦ »ç¿ëÇϱ⶧¹®¿¡ ¿äû½Ã IP ÁÖ¼Ò¸¦ ÇؽÌÇÏ´Â
- ºÎ´ãÀº °ÅÀÇ ¾ø´Ù. ¶Ç Çؽ¬Å×À̺íÀº IP ÁÖ¼ÒÀÇ ¸¶Áö¸· ºÎºÐÀÇ
- Â÷ÀÌ¿¡ ÃÖÀûÈ­µÇÀÖ´Ù.</p>
-
- <p>°¡»óÈ£½ºÆ®¿¡ ¿©·¯ ±âº»°ªÀÌ ¼³Á¤µÈ´Ù. ƯÈ÷:</p>
-
- <ol>
- <li>°¡»óÈ£½ºÆ®¿¡ <directive module="core">ServerAdmin</directive>,
- <directive module="core">ResourceConfig</directive>,
- <directive module="core">AccessConfig</directive>,
- <directive module="core">Timeout</directive>,
- <directive module="core">KeepAliveTimeout</directive>,
- <directive module="core">KeepAlive</directive>,
- <directive module="core">MaxKeepAliveRequests</directive>,
- <directive module="core">SendBufferSize</directive>
- Áö½Ã¾î°¡ ¾ø´Ù¸é ÁÖ¼­¹ö¿¡¼­ ÇØ´ç °ªÀ» °¡Á®¿Â´Ù. (Áï,
- ÁÖ¼­¹öÀÇ ¼³Á¤°ªÀ» »ç¿ëÇÑ´Ù.)</li>
-
- <li>°¡»óÈ£½ºÆ®ÀÇ µð·ºÅ丮 ±âº»±ÇÇÑÀ» Á¤ÀÇÇÏ´Â "ÂüÁ¶
- ±âº»°ª(lookup defaults)"Àº ÁÖ¼­¹öÀÇ ¼³Á¤°ú ÇÕÃÄÁø´Ù.
- ¸ðµâÀÇ µð·ºÅ丮´ç ¼³Á¤(per-directory configuration)µµ
- ¿©±â¿¡ ÇØ´çµÈ´Ù.</li>
-
- <li>°¢ ¸ðµâÀÇ ¼­¹ö´ç ¼³Á¤(per-server config)Àº ÁÖ¼­¹öÀÇ
- ¼³Á¤°ú °¡»óÈ£½ºÆ®ÀÇ ¼³Á¤À» ÇÕÄ£´Ù.</li>
- </ol>
-
- <p>±âº»ÀûÀ¸·Î ÁÖ¼­¹ö´Â °¡»óÈ£½ºÆ®¸¦ ¸¸µå´Â "±âº»" ȤÀº "±â¹Ý"ÀÌ
- µÈ´Ù. ±×·¯³ª ¼³Á¤ÆÄÀÏ¿¡¼­ ÁÖ¼­¹ö¸¦ Á¤ÀÇÇÏ´Â À§Ä¡´Â °ü°è¾ø´Ù.
- ¸¶Áö¸·À¸·Î ¼³Á¤À» ÇÕÄ¡±â Àü¿¡ ÁÖ¼­¹öÀÇ ¸ðµç ¼³Á¤À» ÀоîµéÀδÙ.
- ±×·¡¼­ ÁÖ¼­¹ö Á¤ÀÇ°¡ °¡»óÈ£½ºÆ® Á¤ÀÇ µÚ¿¡ ³ª¿Íµµ °¡»óÈ£½ºÆ®
- Á¤ÀÇ¿¡ ¿µÇâÀ» ÁØ´Ù.</p>
-
- <p>ÁÖ¼­¹ö¿¡ <code>ServerName</code>ÀÌ ¾ø´Ù¸é À¥¼­¹ö¸¦ ½ÇÇàÇÏ´Â
- ÄÄÇ»ÅÍÀÇ È£½ºÆ®¸íÀ» ´ë½Å »ç¿ëÇÑ´Ù. ÁÖ¼­¹öÀÇ
- <code>ServerName</code>À» DNS °Ì»öÇÏ¿© ¾òÀº IP ÁÖ¼ÒµéÀ»
- <em>ÁÖ¼­¹ö ÁÖ¼ÒÁýÇÕ</em>À̶ó°í ºÎ¸¥´Ù.</p>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ <code>ServerName</code>À» Á¤ÀÇÇÏÁö
- ¾ÊÀ¸¸é °¡»óÈ£½ºÆ®¸¦ Á¤ÀÇÇÏ´Â <code>VirtualHost</code>¿¡¼­
- óÀ½À¸·Î ³ª¿Â ÁÖ¼Ò¸¦ ±âº»°ªÀ¸·Î »ç¿ëÇÑ´Ù.</p>
-
- <p>Ưº°ÇÑ <code>_default_</code> ¿ÍÀÏƮīµå¸¦ Æ÷ÇÔÇÏ´Â
- °¡»óÈ£½ºÆ®´Â ÁÖ¼­¹ö¿Í °°Àº <code>ServerName</code>À» °¡Áø´Ù.</p>
-
-</section>
-
-<section id="hostmatching"><title>°¡»óÈ£½ºÆ® ã±â</title>
-
- <p>¼­¹ö´Â ¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î ¾î¶² °¡»óÈ£½ºÆ®°¡ ¿äûÀ»
- ó¸®ÇÒÁö °áÁ¤ÇÑ´Ù:</p>
-
- <section id="hashtable"><title>Çؽ¬Å×À̺í ã±â</title>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ óÀ½ ¿¬°áÇÏ¸é ¿¬°áÇÑ IP ÁÖ¼Ò¸¦ ³»ºÎ IP
- Çؽ¬Å×ÀÌºí¿¡¼­ ã´Â´Ù.</p>
-
- <p>IP ÁÖ¼Ò¸¦ ãÀ» ¼ö ¾ø°í Ŭ¶óÀ̾ðÆ®°¡ ¿äûÀ» º¸³½ Æ÷Æ®¿¡
- ÇØ´çÇÏ´Â °¡»óÈ£½ºÆ®°¡ ÀÖ´Ù¸é, <code>_default_</code> °¡»óÈ£½ºÆ®°¡
- ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. <code>_default_</code> °¡»óÈ£½ºÆ®°¡
- ¾ø´Ù¸é ÁÖ¼­¹ö°¡ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- <p>Çؽ¬Å×ÀÌºí¿¡ IP ÁÖ¼Ò°¡ ¾øÁö¸¸ Æ÷Æ® ¹øÈ£°¡
- <code>NameVirtualHost *</code>¿¡ ÇØ´çÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì
- À̸§±â¹Ý °¡»óÈ£½ºÆ®Ã³·³ ó¸®ÇÑ´Ù.</p>
-
- <p>ã¾Ò´Ù¸é (¸ñ·Ï¿¡¼­ IP ÁÖ¼Ò¿¡ ÇØ´çÇÏ´Â Ç׸ñÀ» ãÀ¸¸é),
- IP±â¹Ý °¡»óÈ£½ºÆ®ÀÎÁö À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÎÁö °áÁ¤ÇÑ´Ù.</p>
-
- </section>
-
- <section id="ipbased"><title>IP±â¹Ý °¡»óÈ£½ºÆ®</title>
-
- <p>ãÀº Ç׸ñ¿¡ À̸§ ¸ñ·ÏÀÌ ¾ø´Ù¸é IP±â¹Ý °¡»óÈ£½ºÆ®ÀÌ´Ù.
- ´õ ÀÌ»ó ÀÛ¾÷ÀÌ ÇÊ¿ä¾ø°í, ±× °¡»óÈ£½ºÆ®°¡ ¿äûÀ» ó¸®ÇÑ´Ù.</p>
-
- </section>
-
- <section id="namebased"><title>À̸§±â¹Ý °¡»óÈ£½ºÆ®</title>
-
- <p>À̸§ ¸ñ·Ï¿¡ ÇÑ°³ ÀÌ»óÀÇ °¡»óÈ£½ºÆ® ±¸Á¶°¡ Æ÷ÇԵǸé
- À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÌ´Ù. ÀÌ ¸ñ·Ï¿¡¼­ °¡»óÈ£½ºÆ®µéÀº ¼³Á¤ÆÄÀÏÀÇ
- <code>VirtualHost</code> ¼ø¼­´ë·Î À§Ä¡ÇÑ´Ù.</p>
-
- <p>¸ñ·Ï¿¡¼­ ù¹ø° °¡»óÈ£½ºÆ®(¼³Á¤ÆÄÀÏ¿¡¼­ ÇØ´ç IP ÁÖ¼Ò¸¦
- Æ÷ÇÔÇϴ ù¹ø° °¡»óÈ£½ºÆ®)´Â °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áö¸ç,
- ¼­¹ö¸íÀ» ¾Ë ¼ö ¾ø°Å³ª <code>Host:</code> Çì´õ°¡ ¾ø´Â ¿äûÀ»
- ó¸®ÇÑ´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ <code>Host:</code> Çì´õ¸¦ ÁÖ¸é, ¸ñ·Ï¿¡¼­
- ù¹ø°·Î <code>ServerName</code>À̳ª
- <code>ServerAlias</code>°¡ ´ëÀÀÇÏ´Â °¡»óÈ£½ºÆ®°¡ ¿äûÀ»
- ¼­ºñ½ºÇÑ´Ù. <code>Host:</code> Çì´õ¿¡ Æ÷Æ® ¹øÈ£°¡ ³ª¿Ã ¼ö
- ÀÖÁö¸¸, ¾ÆÆÄÄ¡´Â Ç×»ó Ŭ¶óÀ̾ðÆ®°¡ ¿äûÀ» º¸³½ ½ÇÁ¦ Æ÷Æ®¸¦
- ã´Â´Ù.</p>
-
- <p>Ŭ¶óÀ̾ðÆ®°¡ <code>Host:</code> Çì´õ¾øÀÌ HTTP/1.0 ¿äûÀ»
- Çϸé Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² ¼­¹ö¿¡ ¿¬°áÇÏ·Á´ÂÁö ¾Ë ¼ö ¾ø±â¶§¹®¿¡
- ¿äûÀÇ URI¿¡ ÇØ´çÇÏ´Â <code>ServerPath</code>°¡ ÀÖ´ÂÁö ã´Â´Ù.
- ¸ñ·Ï¿¡¼­ Á¦ÀÏ ¸ÕÀú ãÀº °æ·Î¸¦ »ç¿ëÇÏ°í, ±× °¡»óÈ£½ºÆ®°¡
- ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- <p>´ëÀÀÇÏ´Â °¡»óÈ£½ºÆ®¸¦ ãÀ» ¼ö ¾ø´Ù¸é, (ÀÌ¹Ì ¾Õ¿¡ ¸»ÇßµíÀÌ)
- Ŭ¶óÀ̾ðÆ®°¡ ¿¬°áÇÑ IP¿¡ ´ëÇÑ ¸ñ·Ï¿¡¼­ ÀÏÄ¡ÇÏ´Â Æ÷Æ® ¹øÈ£¸¦
- Æ÷ÇÔÇϴ ù¹ø° °¡»óÈ£½ºÆ®°¡ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.</p>
-
- </section>
-
- <section id="persistent"><title>Áö¼Ó ¿¬°á</title>
-
- <p>IP´Â À§¿¡¼­ ¼³¸íÇѵ¥·Î ƯÁ¤ TCP/IP ¼¼¼Ç´ç <em>Çѹø¸¸</em>
- ãÁö¸¸, À̸§Àº KeepAlive/Áö¼Ó ¿¬°áµ¿¾È <em>¸Å</em> ¿äû¶§¸¶´Ù
- ã´Â´Ù. Áï, Ŭ¶óÀ̾ðÆ®´Â Áö¼Ó ¿¬°áµ¿¾È ¿©·¯ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®ÀÇ ÆäÀÌÁö¸¦ ¿äûÇÒ ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="absoluteURI"><title>Àý´ë URI</title>
-
- <p>¿äûÀÇ URI°¡ Àý´ë URIÀÌ°í Ŭ¶óÀ̾ðÆ®°¡ º¸³½ ¿äûÀÇ
- È£½ºÆ®¸í°ú Æ÷Æ®°¡ ÁÖ¼­¹ö³ª ƯÁ¤ °¡»óÈ£½ºÆ®¿¡ ÇØ´çÇϸé,
- ±× ÁÖ¼­¹ö ȤÀº °¡»óÈ£½ºÆ®´Â URI ¾ÕÀÇ ½ºÅ´/È£½ºÆ®¸í/Æ÷Æ®
- ºÎºÐÀ» Á¦¿ÜÇÑ ³ª¸ÓÁö »ó´ë URI¸¦ ¼­ºñ½ºÇÑ´Ù. ÇØ´çÇÏ´Â
- ÁÖ¼­¹ö³ª °¡»óÈ£½ºÆ®°¡ ¾ø´Ù¸é URI¸¦ ±×´ë·Î µÎ°í ¿äûÀ»
- ÇÁ·Ï½Ã ¿äûÀ¸·Î ó¸®ÇÑ´Ù.</p>
-</section>
-
-<section id="observations"><title>ÁÖÀÇ</title>
-
- <ul>
- <li>À̸§±â¹Ý °¡»óÈ£½ºÆ®¿Í IP±â¹Ý °¡»óÈ£½ºÆ®´Â ¼­·Î¿¡°Ô
- ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ÀÚ½ÅÀÇ À̸§ÁýÇÕ
- IP ÁÖ¼Ò¿Ü¿¡ ¾î¶² Áּҷεµ Á¢±ÙÇÒ ¼ö ¾ø´Ù. À̸§±â¹Ý
- °¡»óÈ£½ºÆ®µµ ¸¶Âù°¡Áö´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â
- <code>NameVirtualHost</code> Áö½Ã¾î·Î Á¤ÀÇÇÑ ÁÖ¼ÒÁýÇÕÀÇ
- IP ÁÖ¼Ò¸¦ ÅëÇؼ­¸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</li>
-
- <li>IP±â¹Ý °¡»óÈ£½ºÆ®´Â <code>ServerAlias</code>¿Í
- <code>ServerPath</code>¸¦ Àý´ë·Î °Ë»çÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li>¼³Á¤ÆÄÀÏ¿¡¼­ À̸§±â¹Ý °¡»óÈ£½ºÆ®, IP±â¹Ý °¡»óÈ£½ºÆ®,
- <code>_default_</code> °¡»óÈ£½ºÆ®, <code>NameVirtualHost</code>
- Áö½Ã¾îÀÇ ¼ø¼­´Â Áß¿äÇÏÁö ¾Ê´Ù. ƯÁ¤ ÁÖ¼ÒÁýÇÕ¿¡ ´ëÇÑ
- À̸§±â¹Ý °¡»óÈ£½ºÆ®µéÀÇ ¼ø¼­¸¸ÀÌ Áß¿äÇÏ´Ù. ¼³Á¤ÆÄÀÏ¿¡¼­
- ¾Õ¿¡ ³ª¿À´Â À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â ÀÚ½ÅÀÌ ¼ÓÇÑ ÁÖ¼ÒÁýÇÕ¿¡¼­
- °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áø´Ù.</li>
-
- <li>º¸¾ÈÀ» À§ÇØ <code>Host:</code> Çì´õ¿¡ Æ÷ÇÔµÈ Æ÷Æ®
- ¹øÈ£´Â Àý´ë·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù. ¾ÆÆÄÄ¡´Â Ç×»ó Ŭ¶óÀ̾ðÆ®°¡
- ¿äûÀ» º¸³½ ½ÇÁ¦ Æ÷Æ®¸¦ »ç¿ëÇÑ´Ù.</li>
-
- <li>(µÑ »çÀ̸¦ ±¸º°ÇÒ <code>Host:</code> Çì´õ°¡ ¾ø´Ù°í
- °¡Á¤Çϸé,) <code>ServerPath</code> Áö½Ã¾î°¡ ¼³Á¤ÆÄÀÏ¿¡¼­
- µÚ¿¡ ³ª¿À´Â ´Ù¸¥ <code>ServerPath</code> Áö½Ã¾îÀÇ ¾ÕºÎºÐÀ»
- ÁöĪÇÏ´Â °æ¿ì Ç×»ó ¾Õ¿¡ ³ª¿Â Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù.</li>
-
- <li>µÎ IP±â¹Ý °¡»óÈ£½ºÆ®°¡ °°Àº ÁÖ¼Ò¸¦ °¡Áö¸é, Ç×»ó
- ¼³Á¤ÆÄÀÏ¿¡¼­ ¾Õ¿¡ ³ª¿À´Â °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÑ´Ù. ÀÌ·± ÀÏÀº
- ¾Æ¹«µµ ¸ð¸£°Ô ÀϾ ¼ö ÀÖ´Ù. ¼­¹ö°¡ ÀÌ·± »óȲÀ» ¹ß°ßÇϸé
- ¿À·ù ·Î±×ÆÄÀÏ¿¡ °æ°í¸¦ ±â·ÏÇÑ´Ù.</li>
-
- <li><code>_default_</code> °¡»óÈ£½ºÆ®´Â ¿äûÀÇ IP ÁÖ¼Ò<em>¿Í</em>
- Æ÷Æ® ¹øÈ£¿¡ ÇØ´çÇÏ´Â °¡»óÈ£½ºÆ®°¡ ¾øÀ»¶§¸¸ ¿äûÀ» ó¸®ÇÑ´Ù.
- Ŭ¶óÀ̾ðÆ®°¡ ¿äûÀ» º¸³½ Æ÷Æ® ¹øÈ£°¡ <code>_default_</code>
- °¡»óÈ£½ºÆ®ÀÇ Æ÷Æ® ¹øÈ£(±âº»°ªÀº <code>Listen</code>)¿Í
- °°À»¶§¸¸ ¿äûÀ» ó¸®ÇÑ´Ù. ¾î¶² Æ÷Æ®ÀÇ ¿äûÀÌ¶óµµ Àâ±âÀ§ÇØ
- (<em>¿¹¸¦ µé¾î</em>, <code>_default_:*</code>) ¿ÍÀϵåÄ«µå
- Æ÷Æ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. <code>NameVirtualHost *</code>
- °¡»óÈ£½ºÆ®µµ ¸¶Âù°¡Áö´Ù.</li>
-
- <li>ÁÖ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¿¬°áÇÑ IP ÁÖ¼Ò¿Í Æ÷Æ® ¹øÈ£¿¡
- ÇØ´çÇÏ´Â (<code>_default_</code> °¡»óÈ£½ºÆ®¸¦ Æ÷ÇÔÇÏ¿©)
- °¡»óÈ£½ºÆ®°¡ ¾øÀ»¶§¸¸ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. Áï, ÁÖ¼­¹ö´Â
- (±× Æ÷Æ®¿¡ ÇØ´çÇÏ´Â <code>_default_</code> °¡»óÈ£½ºÆ®°¡
- ¾ø´Ù¸é) ÁöÁ¤ÇÏÁö¾ÊÀº ÁÖ¼Ò/Æ÷Æ® ½Ö¿¡ ´ëÇÑ ¿äû¸¸À» ó¸®ÇÑ´Ù.</li>
-
- <li>Ŭ¶óÀ̾ðÆ®°¡ (<em>¿¹¸¦ µé¾î</em>, <code>NameVirtualHost</code>
- Áö½Ã¾î¿¡¼­) À̸§±â¹Ý °¡»óÈ£½ºÆ® ÁÖ¼Ò(¿Í Æ÷Æ®)¿¡ ¿¬°áÇÑ
- °æ¿ì <code>Host:</code> Çì´õ¸¦ ¾Ë ¼ö ¾ø°Å³ª Çì´õ°¡ ¾ø´Â
- ¿äûÀ» º¸³»¸é ¿äûÀº <em>Àý´ë·Î</em> <code>_default_</code>
- °¡»óÈ£½ºÆ®³ª ÁÖ¼­¹ö¿¡¼­ ó¸®ÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li>½ÃÀÛÇÒ¶§ ¼­¹ö°¡ DNS¸¦ ÀÇÁ¸ÇÏÁö ¾ÊÀ¸·Á¸é Àý´ë·Î
- <code>VirtualHost</code> Áö½Ã¾î¿¡ DNS À̸§À» »ç¿ëÇÏÁö¸¶¶ó.
- °Ô´Ù°¡ ¿­°ÅÇÑ ¸ðµç µµ¸ÞÀÎÀÇ DNS¸¦ ÅëÁ¦ÇÏÁö ¾Ê´Â´Ù¸é
- º¸¾È»ó À§Çèµµ ÀÖ´Ù. ÀÌ¿¡ ´ëÇÑ <a
- href="../dns-caveats.html">Á¤º¸</a>°¡ ÀÖ´Ù.</li>
-
- <li>°¢ °¡»óÈ£½ºÆ®¸¶´Ù <code>ServerName</code>¸¦ Ç×»ó
- Á¤ÀÇÇØ¾ß ÇÑ´Ù. ¾È±×·¯¸é °¡»óÈ£½ºÆ®¸¶´Ù DNS¸¦ ã°Ô µÈ´Ù.</li>
- </ul>
- </section>
-
-</section>
-
-<section id="tips"><title>ÆÁ</title>
-
- <p><a href="../dns-caveats.html#tips">DNS ¹®Á¦</a> ÆäÀÌÁöÀÇ
- ÆÁ¿¡ Ãß°¡·Î ¾Æ·¡¿¡ ÆÁÀÌ ÀÖ´Ù:</p>
-
- <ul>
- <li>¸ðµç ÁÖ¼­¹ö Á¤ÀǸ¦ <code>VirtualHost</code> Á¤ÀÇ ¾Õ¿¡
- µÎ¾î¶ó. (±×·¯¸é ¼³Á¤À» Àбâ ÆíÇÏ´Ù. ¾È±×·¯¸é ³ªÁß¿¡ ¼³Á¤ÀÌ
- ÇÕÃÄÁú¶§ °¡»óÈ£½ºÆ®µé »çÀÌ¿¡ ¼¯ÀÎ Á¤ÀÇ°¡ ¸ðµç °¡»óÈ£½ºÆ®¿¡
- ¿µÇâÀ» ÁÙ ¼ö Àֱ⶧¹®¿¡ È¥¶õ½º·´´Ù.)</li>
-
- <li>Àбâ ÆíÇϵµ·Ï ¼³Á¤¿¡¼­ ÇØ´çÇÏ´Â <code>NameVirtualHost</code>°ú
- <code>VirtualHost</code> Á¤ÀǵéÀ» ¹­¾î¶ó.</li>
-
- <li><code>ServerPath</code>°¡ ´Ù¸¥ <code>ServerPath</code>ÀÇ
- ¾ÕºÎºÐÀ» ÁöĪÇÏ´Â °æ¿ì¸¦ ÇÇÇ϶ó. ÇÇÇÒ ¼ö ¾ø´Ù¸é ¼³Á¤ÆÄÀÏ¿¡¼­
- ¾ÕºÎºÐÀÌ ´õ ±ä (´õ ÀÚ¼¼ÇÑ) °¡»óÈ£½ºÆ®¸¦ ªÀº (´ú ÀÚ¼¼ÇÑ)
- °¡»óÈ£½ºÆ®º¸´Ù ¾Õ¿¡ µÎ¾î¶ó. (<em>¿¹¸¦ µé¾î</em>,
- "ServerPath /abc"´Â "ServerPath /abc/def" ´ÙÀ½¿¡ µÎ¾î¾ß
- ÇÑ´Ù.</li>
- </ul>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/vhosts/details.xml.meta b/docs/manual/vhosts/details.xml.meta
deleted file mode 100644
index 37357439d1..0000000000
--- a/docs/manual/vhosts/details.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>details</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/examples.html b/docs/manual/vhosts/examples.html
deleted file mode 100644
index 705a111734..0000000000
--- a/docs/manual/vhosts/examples.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: examples.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: examples.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/examples.html.en b/docs/manual/vhosts/examples.html.en
deleted file mode 100644
index dcdf496016..0000000000
--- a/docs/manual/vhosts/examples.html.en
+++ /dev/null
@@ -1,630 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>VirtualHost Examples - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>VirtualHost Examples</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/vhosts/examples.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/examples.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>This document attempts to answer the commonly-asked questions about
- setting up virtual hosts. These scenarios are those involving multiple
- web sites running on a single server, via <a href="name-based.html">name-based</a> or <a href="ip-based.html">IP-based</a> virtual hosts. A document should be
- coming soon about running sites on several servers behind a single
- proxy server.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#purename">Running several name-based web
- sites on a single IP address.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#twoips">Name-based hosts on more than one
- IP address.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#intraextra">Serving the same content on
- different IP addresses (such as an internal and external
- address).</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#port">Running different sites on different
- ports.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ip">IP-based virtual hosting</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ipport">Mixed port-based and ip-based virtual
- hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mixed">Mixed name-based and IP-based
- vhosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#default">Using <code>_default_</code>
- vhosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#migrate">Migrating a name-based vhost to an
- IP-based vhost</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverpath">Using the <code>ServerPath</code>
- directive</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="purename" id="purename">Running several name-based web
- sites on a single IP address.</a></h2>
-
- <p>Your server has a single IP address, and multiple aliases (CNAMES)
- point to this machine in DNS. You want to run a web server for
- <code>www.example1.com</code> and <code>www.example2.org</code> on this
- machine.</p>
-
- <div class="note"><h3>Note</h3><p>Creating virtual
- host configurations on your Apache server does not magically
- cause DNS entries to be created for those host names. You
- <em>must</em> have the names in DNS, resolving to your IP
- address, or nobody else will be able to see your web site. You
- can put entries in your <code>hosts</code> file for local
- testing, but that will work only from the machine with those
- hosts entries.</p>
- </div>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- # Ensure that Apache listens on port 80<br />
- Listen 80<br />
- <br />
- # Listen for virtual host requests on all IP addresses<br />
- NameVirtualHost *<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # Other directives here<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # Other directives here<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>The asterisks match all addresses, so the main server serves no
- requests. Due to the fact that <code>www.example1.com</code> is first
- in the configuration file, it has the highest priority and can be seen
- as the <cite>default</cite> or <cite>primary</cite> server. That means
- that if a request is received that does not match one of the specified
- <code>ServerName</code> directives, it will be served by this first
- <code>VirtualHost</code>.</p>
-
- <div class="note">
- <h3>Note</h3>
-
- <p>You can, if you wish, replace <code>*</code> with the actual
- IP address of the system. In that case, the argument to
- <code>VirtualHost</code> <em>must</em> match the argument to
- <code>NameVirtualHost</code>:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- # etc ...
- </code></p></div>
-
- <p>However, it is additionally useful to use <code>*</code>
- on systems where the IP address is not predictable - for
- example if you have a dynamic IP address with your ISP, and
- you are using some variety of dynamic DNS solution. Since
- <code>*</code> matches any IP address, this configuration
- would work without changes whenever your IP address
- changes.</p>
- </div>
-
- <p>The above configuration is what you will want to use in almost
- all name-based virtual hosting situations. The only thing that this
- configuration will not work for, in fact, is when you are serving
- different content based on differing IP addresses or ports.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="twoips" id="twoips">Name-based hosts on more than one
- IP address.</a></h2>
-
- <div class="note">
- <h3>Note</h3><p>Any of the
- techniques discussed here can be extended to any number of IP
- addresses.</p>
- </div>
-
- <p>The server has two IP addresses. On one (<code>172.20.30.40</code>), we
- will serve the "main" server, <code>server.domain.com</code> and on the
- other (<code>172.20.30.50</code>), we will serve two or more virtual hosts.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- Listen 80<br />
- <br />
- # This is the "main" server running on 172.20.30.40<br />
- ServerName server.domain.com<br />
- DocumentRoot /www/mainserver<br />
- <br />
- # This is the other address<br />
- NameVirtualHost 172.20.30.50<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # Other directives here ...<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # Other directives here ...<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Any request to an address other than <code>172.20.30.50</code> will be
- served from the main server. A request to <code>172.20.30.50</code> with an
- unknown hostname, or no <code>Host:</code> header, will be served from
- <code>www.example1.com</code>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intraextra" id="intraextra">Serving the same content on
- different IP addresses (such as an internal and external
- address).</a></h2>
-
- <p>The server machine has two IP addresses (<code>192.168.1.1</code>
- and <code>172.20.30.40</code>). The machine is sitting between an
- internal (intranet) network and an external (internet) network. Outside
- of the network, the name <code>server.example.com</code> resolves to
- the external address (<code>172.20.30.40</code>), but inside the
- network, that same name resolves to the internal address
- (<code>192.168.1.1</code>).</p>
-
- <p>The server can be made to respond to internal and external requests
- with the same content, with just one <code>VirtualHost</code>
- section.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- NameVirtualHost 192.168.1.1<br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 192.168.1.1 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/server1<br />
- ServerName server.example.com<br />
- ServerAlias server<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Now requests from both networks will be served from the same
- <code>VirtualHost</code>.</p>
-
- <div class="note">
- <h3>Note:</h3><p>On the internal
- network, one can just use the name <code>server</code> rather
- than the fully qualified host name
- <code>server.example.com</code>.</p>
-
- <p>Note also that, in the above example, you can replace the list
- of IP addresses with <code>*</code>, which will cause the server to
- respond the same on all addresses.</p>
- </div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="port" id="port">Running different sites on different
- ports.</a></h2>
-
- <p>You have multiple domains going to the same IP and also want to
- serve multiple ports. By defining the ports in the "NameVirtualHost"
- tag, you can allow this to work. If you try using &lt;VirtualHost
- name:port&gt; without the NameVirtualHost name:port or you try to use
- the Listen directive, your configuration will not work.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- Listen 80<br />
- Listen 8080<br />
- <br />
- NameVirtualHost 172.20.30.40:80<br />
- NameVirtualHost 172.20.30.40:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <span class="indent">
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-80<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <span class="indent">
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-8080<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <span class="indent">
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-80<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <span class="indent">
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-8080<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ip" id="ip">IP-based virtual hosting</a></h2>
-
- <p>The server has two IP addresses (<code>172.20.30.40</code> and
- <code>172.20.30.50</code>) which resolve to the names
- <code>www.example1.com</code> and <code>www.example2.org</code>
- respectively.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- Listen 80<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Requests for any address not specified in one of the
- <code>&lt;VirtualHost&gt;</code> directives (such as
- <code>localhost</code>, for example) will go to the main server, if
- there is one.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipport" id="ipport">Mixed port-based and ip-based virtual
- hosts</a></h2>
-
- <p>The server machine has two IP addresses (<code>172.20.30.40</code> and
- <code>172.20.30.50</code>) which resolve to the names
- <code>www.example1.com</code> and <code>www.example2.org</code>
- respectively. In each case, we want to run hosts on ports 80 and
- 8080.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- Listen 172.20.30.40:80<br />
- Listen 172.20.30.40:8080<br />
- Listen 172.20.30.50:80<br />
- Listen 172.20.30.50:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1-80<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1-8080<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:80&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2-80<br />
- ServerName www.example1.org<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:8080&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2-8080<br />
- ServerName www.example2.org<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mixed" id="mixed">Mixed name-based and IP-based
- vhosts</a></h2>
-
- <p>On some of my addresses, I want to do name-based virtual hosts, and
- on others, IP-based hosts.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- Listen 80<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- # IP-based<br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example4<br />
- ServerName www.example4.edu<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.60&gt;<br />
- <span class="indent">
- DocumentRoot /www/example5<br />
- ServerName www.example5.gov<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="default" id="default">Using <code>_default_</code>
- vhosts</a></h2>
-
- <h3><a name="defaultallports" id="defaultallports"><code>_default_</code> vhosts
- for all ports</a></h3>
-
- <p>Catching <em>every</em> request to any unspecified IP address and
- port, <em>i.e.</em>, an address/port combination that is not used for
- any other virtual host.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- &lt;VirtualHost _default_:*&gt;<br />
- <span class="indent">
- DocumentRoot /www/default<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Using such a default vhost with a wildcard port effectively prevents
- any request going to the main server.</p>
-
- <p>A default vhost never serves a request that was sent to an
- address/port that is used for name-based vhosts. If the request
- contained an unknown or no <code>Host:</code> header it is always
- served from the primary name-based vhost (the vhost for that
- address/port appearing first in the configuration file).</p>
-
- <p>You can use <code class="directive"><a href="../mod/mod_alias.html#aliasmatch">AliasMatch</a></code> or
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> to rewrite any
- request to a single information page (or script).</p>
-
-
- <h3><a name="defaultdifferentports" id="defaultdifferentports"><code>_default_</code> vhosts
- for different ports</a></h3>
-
- <p>Same as setup 1, but the server listens on several ports and we want
- to use a second <code>_default_</code> vhost for port 80.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- &lt;VirtualHost _default_:80&gt;<br />
- <span class="indent">
- DocumentRoot /www/default80<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost _default_:*&gt;<br />
- <span class="indent">
- DocumentRoot /www/default<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>The default vhost for port 80 (which <em>must</em> appear before any
- default vhost with a wildcard port) catches all requests that were sent
- to an unspecified IP address. The main server is never used to serve a
- request.</p>
-
-
- <h3><a name="defaultoneport" id="defaultoneport"><code>_default_</code> vhosts
- for one port</a></h3>
-
- <p>We want to have a default vhost for port 80, but no other default
- vhosts.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- &lt;VirtualHost _default_:80&gt;<br />
- DocumentRoot /www/default<br />
- ...<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>A request to an unspecified address on port 80 is served from the
- default vhost any other request to an unspecified address and port is
- served from the main server.</p>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="migrate" id="migrate">Migrating a name-based vhost to an
- IP-based vhost</a></h2>
-
- <p>The name-based vhost with the hostname
- <code>www.example2.org</code> (from our <a href="#name">name-based</a> example, setup 2) should get its own IP
- address. To avoid problems with name servers or proxies who cached the
- old IP address for the name-based vhost we want to provide both
- variants during a migration phase.<br />
- The solution is easy, because we can simply add the new IP address
- (<code>172.20.30.50</code>) to the <code>VirtualHost</code>
- directive.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- Listen 80<br />
- ServerName www.example1.com<br />
- DocumentRoot /www/example1<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- ServerAlias *.example3.net<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>The vhost can now be accessed through the new address (as an
- IP-based vhost) and through the old address (as a name-based
- vhost).</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="serverpath" id="serverpath">Using the <code>ServerPath</code>
- directive</a></h2>
-
- <p>We have a server with two name-based vhosts. In order to match the
- correct virtual host a client must send the correct <code>Host:</code>
- header. Old HTTP/1.0 clients do not send such a header and Apache has
- no clue what vhost the client tried to reach (and serves the request
- from the primary vhost). To provide as much backward compatibility as
- possible we create a primary vhost which returns a single page
- containing links with an URL prefix to the name-based virtual
- hosts.</p>
-
- <div class="example"><h3>Server configuration</h3><p><code>
-
-
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- # primary vhost<br />
- DocumentRoot /www/subdomain<br />
- RewriteEngine On<br />
- RewriteRule ^/.* /www/subdomain/index.html<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- DocumentRoot /www/subdomain/sub1<br />
- <span class="indent">
- ServerName www.sub1.domain.tld<br />
- ServerPath /sub1/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub1/.*) /www/subdomain$1<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/subdomain/sub2<br />
- ServerName www.sub2.domain.tld<br />
- ServerPath /sub2/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub2/.*) /www/subdomain$1<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Due to the <code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code>
- directive a request to the URL
- <code>http://www.sub1.domain.tld/sub1/</code> is <em>always</em> served
- from the sub1-vhost.<br /> A request to the URL
- <code>http://www.sub1.domain.tld/</code> is only
- served from the sub1-vhost if the client sent a correct
- <code>Host:</code> header. If no <code>Host:</code> header is sent the
- client gets the information page from the primary host.<br />
- Please note that there is one oddity: A request to
- <code>http://www.sub2.domain.tld/sub1/</code> is also served from the
- sub1-vhost if the client sent no <code>Host:</code> header.<br />
- The <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directives
- are used to make sure that a client which sent a correct
- <code>Host:</code> header can use both URL variants, <em>i.e.</em>,
- with or without URL prefix.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/vhosts/examples.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/examples.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/examples.html.ko.euc-kr b/docs/manual/vhosts/examples.html.ko.euc-kr
deleted file mode 100644
index 60472c65e6..0000000000
--- a/docs/manual/vhosts/examples.html.ko.euc-kr
+++ /dev/null
@@ -1,618 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>°¡»óÈ£½ºÆ® ¿¹ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">°¡»óÈ£½ºÆ®</a></div><div id="page-content"><div id="preamble"><h1>°¡»óÈ£½ºÆ® ¿¹</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/examples.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/examples.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>ÀÌ ¹®¼­´Â ÀÚÁÖ ¹®ÀǵǴ °¡»óÈ£½ºÆ®
- Áú¹®¿¡ ´äÀ» ÇÏ·Á°í ¾²¿©Á³´Ù. »óȲÀº <a href="name-based.html">À̸§±â¹Ý</a>À̳ª <a href="ip-based.html">IP±â¹Ý</a> °¡»óÈ£½ºÆ®¸¦ ÅëÇØ ÇÑ ¼­¹ö¿¡¼­
- ¿©·¯ À¥»çÀÌÆ®¸¦ ¼­ºñ½ºÇÏ·Á´Â °æ¿ìÀÌ´Ù. ÇÑ ÇÁ·Ï½Ã ¼­¹ö µÚ¿¡¼­
- ¿©·¯ ¼­¹ö¸¦ »ç¿ëÇÏ¿© »çÀÌÆ®¸¦ ¿î¿µÇÏ´Â °æ¿ì¸¦ ´Ù·é ¹®¼­µµ
- °ð ³ª¿Ã °ÍÀÌ´Ù.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#purename">IP ÁÖ¼Ò ÇÑ°³¿¡ ¿©·¯ À̸§±â¹Ý
- À¥»çÀÌÆ® ¿î¿µÇϱâ.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#twoips">¿©·¯ IP ÁÖ¼Ò¿¡¼­ À̸§±â¹Ý
- È£½ºÆ®.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#intraextra">(³»ºÎ¿Í ¿ÜºÎ ÁÖ¼Ò¿Í °°ÀÌ)
- ´Ù¸¥ IP ÁÖ¼Ò·Î °°Àº ³»¿ëÀ» ¼­ºñ½ºÇϱâ.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#port">¿©·¯ Æ÷Æ®¿¡¼­ ¼­·Î ´Ù¸¥ »çÀÌÆ®
- ¿î¿µÇϱâ.</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ip">IP±â¹Ý °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ipport">Æ÷Æ®±â¹Ý°ú ip±â¹ÝÀÌ È¥ÇÕµÈ
- °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#mixed">À̸§±â¹Ý°ú IP±â¹ÝÀÌ È¥ÇÕµÈ
- °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#default"><code>_default_</code> °¡»óÈ£½ºÆ®
- »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#migrate">À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ IP±â¹Ý
- °¡»óÈ£½ºÆ®·Î ¿Å±â±â</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverpath"><code>ServerPath</code>
- Áö½Ã¾î »ç¿ëÇϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="purename" id="purename">IP ÁÖ¼Ò ÇÑ°³¿¡ ¿©·¯ À̸§±â¹Ý
- À¥»çÀÌÆ® ¿î¿µÇϱâ.</a></h2>
-
- <p>¼­¹ö¿¡ IP ÁÖ¼Ò°¡ ÇÑ°³ ÀÖ°í, DNS¿¡¼­ ¿©·¯ ÁÖ¼Ò(CNAMES)°¡
- ÀÌ ÄÄÇ»Å͸¦ °¡¸®Å²´Ù. ÀÌ ÄÄÇ»ÅÍ¿¡¼­ <code>www.example1.com</code>°ú
- <code>www.example2.org</code>ÀÇ À¥¼­¹ö¸¦ ½ÇÇàÇÏ°í ½Í´Ù.</p>
-
- <div class="note"><h3>Note</h3><p>¾ÆÆÄÄ¡ ¼­¹ö¿¡ °¡»óÈ£½ºÆ® ¼³Á¤À»
- ÇÑ´Ù°í ±× È£½ºÆ®¸í¿¡ ´ëÇÑ DNS Ç׸ñÀÌ ÀÚµ¿ÀÌ·Î »ý¼ºµÇÁö
- ¾Ê´Â´Ù. <em>¹Ýµå½Ã</em> DNS¿¡ IP ÁÖ¼Ò¸¦ °¡¸®Å°´Â
- À̸§ÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¾È±×·¯¸é ¾Æ¹«µµ À¥»çÀÌÆ®¸¦ º¼
- ¼ö ¾ø´Ù. °Ë»çÇغ¸±â À§ÇØ <code>hosts</code> ÆÄÀÏ¿¡ Ç׸ñÀ»
- Ãß°¡ÇÒ ¼ö ÀÖÁö¸¸, ÀÌ´Â hosts Ç׸ñÀ» °¡Áø ÄÄÇ»ÅÍ¿¡¸¸
- ¹Ý¿µµÈ´Ù.</p>
- </div>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- # ¾ÆÆÄÄ¡°¡ Æ÷Æ® 80À» ±â´Ù¸°´Ù<br />
- Listen 80<br />
- <br />
- # ¸ðµç IP ÁÖ¼Ò¿¡¼­ °¡»óÈ£½ºÆ® ¿äûÀ» ±â´Ù¸°´Ù<br />
- NameVirtualHost *<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>º°Ç¥´Â ¸ðµç ÁÖ¼Ò¸¦ °¡¸®Å°¹Ç·Î, ÁÖ¼­¹ö´Â ¾î¶² ¿äûµµ
- ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. <code>www.example1.com</code>ÀÌ
- ¼³Á¤ÆÄÀÏ¿¡ óÀ½À¸·Î ³ª¿À¹Ç·Î °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áö¸ç,
- <cite>±âº»</cite>ȤÀº <cite>Ãʱâ</cite> ¼­¹ö°¡ µÈ´Ù.
- ¾î¶² <code>ServerName</code> Áö½Ã¾î¿¡µµ ÇØ´çµÇÁö¾Ê´Â ¿äûÀº
- ù¹ø° <code>VirtualHost</code>°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
- <div class="note">
- <h3>ÁÖÀÇ</h3>
-
- <p>¿øÇÑ´Ù¸é <code>*</code> ´ë½Å ½Ã½ºÅÛÀÇ ½ÇÁ¦ IP
- ÁÖ¼Ò¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì
- <code>VirtualHost</code>ÀÇ ¾Æ±Ô¸ÕÆ®´Â
- <code>NameVirtualHost</code>ÀÇ ¾Æ±Ô¸ÕÆ®¿Í ÀÏÄ¡Çؾß
- <em>ÇÑ´Ù</em>:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- # »ý·« ...
- </code></p></div>
-
- <p>±×·¯³ª ISP¿¡¼­ µ¿ÀûÀ¸·Î IP ÁÖ¼Ò¸¦ °¡Á®¿À´Â µî
- IP ÁÖ¼Ò¸¦ ¸ð¸£´Â °æ¿ì¿¡´Â <code>*</code>¸¦ »ç¿ëÇÏ´Â
- °ÍÀÌ À¯¿ëÇÏ´Ù. <code>*</code>´Â ¸ðµç IP ÁÖ¼Ò¿¡
- ÇØ´çÇϹǷÎ, IP ÁÖ¼Ò°¡ º¯°æµÇ¾îµµ ¼³Á¤À» º¯°æÇÒ
- ÇÊ¿ä°¡ ¾ø´Ù.</p>
- </div>
-
- <p>°ÅÀÇ ´ëºÎºÐÀÇ À̸§±â¹Ý °¡»óÈ£½ºÆ® ¼³Á¤Àº À§¿Í °°´Ù.
- ¿¹¿Ü´Â ´Ù¸¥ IP ÁÖ¼Ò³ª Æ÷Æ®·Î ´Ù¸¥ ³»¿ëÀ» ¼­ºñ½ºÇÏ·Á´Â
- °æ¿ìÀÌ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="twoips" id="twoips">¿©·¯ IP ÁÖ¼Ò¿¡¼­ À̸§±â¹Ý
- È£½ºÆ®.</a></h2>
-
- <div class="note">
- <h3>ÁÖÀÇ</h3><p>¿©±â¼­ ¼³¸íÇÑ ¹æ¹ýÀº IP ÁÖ¼Ò°¡
- ¸î°³¶óµµ Àû¿ë°¡´ÉÇÏ´Ù.</p>
- </div>
-
- <p>¼­¹ö´Â IP ÁÖ¼Ò°¡ µÎ°³ÀÖ´Ù. Çϳª¿¡¼­
- (<code>172.20.30.40</code>) "ÁÖ" ¼­¹ö
- <code>server.domain.com</code>À» ¼­ºñ½ºÇÏ°í, ´Ù¸¥ Çϳª¿¡¼­
- (<code>172.20.30.50</code>) ¿©·¯ °¡»óÈ£½ºÆ®¸¦ ¼­ºñ½ºÇÒ
- °ÍÀÌ´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- Listen 80<br />
- <br />
- # 172.20.30.40¿¡¼­ ½ÇÇàÇÏ´Â "ÁÖ"¼­¹öÀÌ´Ù<br />
- ServerName server.domain.com<br />
- DocumentRoot /www/mainserver<br />
- <br />
- # ´Ù¸¥ ÁÖ¼Ò´Ù<br />
- NameVirtualHost 172.20.30.50<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù ...<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù ...<br />
- <br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p><code>172.20.30.50</code>ÀÌ ¾Æ´Ñ ÁÖ¼Ò¿¡ ´ëÇÑ ¿äûÀº
- ÁÖ¼­¹ö°¡ ¼­ºñ½ºÇÑ´Ù. È£½ºÆ®¸í ¾øÀÌ, Áï <code>Host:</code>
- Çì´õ¾øÀÌ <code>172.20.30.50</code>·Î ¿äûÇϸé
- <code>www.example1.com</code>ÀÌ ¼­ºñ½ºÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intraextra" id="intraextra">(³»ºÎ¿Í ¿ÜºÎ ÁÖ¼Ò¿Í °°ÀÌ)
- ´Ù¸¥ IP ÁÖ¼Ò·Î °°Àº ³»¿ëÀ» ¼­ºñ½ºÇϱâ.</a></h2>
-
- <p>¼­¹ö ÄÄÇ»ÅÍ¿¡ IP ÁÖ¼Ò°¡ µÎ°³ (<code>192.168.1.1</code>°ú
- <code>172.20.30.40</code>) ÀÖ´Ù. ÄÄÇ»ÅÍ´Â ³»ºÎ (ÀÎÆ®¶ó³Ý)
- ³×Æ®¿÷°ú ¿ÜºÎ (ÀÎÅͳÝ) ³×Æ®¿÷ »çÀÌ¿¡ À§Ä¡ÇÑ´Ù. ³×Æ®¿÷ ¹Û¿¡¼­
- <code>server.example.com</code>Àº ¿ÜºÎ ÁÖ¼Ò¸¦
- (<code>172.20.30.40</code>) ÀǹÌÇÏ°í, ³×Æ®¿÷ ³»ºÎ¿¡¼­ °°Àº
- À̸§À» ³»ºÎ ÁÖ¼Ò·Î (<code>192.168.1.1</code>) »ç¿ëÇÑ´Ù.</p>
-
- <p>¼­¹ö´Â <code>VirtualHost</code> ¼½¼Ç ÇÑ°³·Î ³»ºÎ¿Í ¿ÜºÎ
- ÀÀ´ä¿¡ °°Àº ³»¿ëÀ» ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- NameVirtualHost 192.168.1.1<br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 192.168.1.1 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/server1<br />
- ServerName server.example.com<br />
- ServerAlias server<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>ÀÌÁ¦ µÎ ³×Æ®¿÷¿¡¼­ µé¾î¿Â ¿äûÀ» °°Àº
- <code>VirtualHost</code>¿¡¼­ ¼­ºñ½ºÇÑ´Ù.</p>
-
- <div class="note">
- <h3>ÁÖÀÇ:</h3><p>³»ºÎ ³×Æ®¿÷¿¡¼­´Â ¿ÏÀüÇÑ È£½ºÆ®¸í
- <code>server.example.com</code> ´ë½Å À̸§
- <code>server</code>µµ °¡´ÉÇÏ´Ù.</p>
-
- <p>¶ÇÇÑ À§ÀÇ ¿¹¿¡¼­ IP ÁÖ¼Ò ´ë½Å <code>*</code>À»
- »ç¿ëÇÏ¿© ¼­¹ö°¡ ¸ðµç ÁÖ¼Ò¿¡ µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÒ ¼ö
- ÀÖ´Ù.</p>
- </div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="port" id="port">¿©·¯ Æ÷Æ®¿¡¼­ ¼­·Î ´Ù¸¥ »çÀÌÆ®
- ¿î¿µÇϱâ.</a></h2>
-
- <p>°°Àº IPÀÇ ¿©·¯ Æ÷Æ®¿¡¼­ ¼­·Î ´Ù¸¥ µµ¸ÞÀÎÀ» ¼­ºñ½ºÇÑ´Ù°í
- °¡Á¤ÇÏÀÚ. ÀÌ´Â "NameVirtualHost" ű׿¡ Æ÷Æ®¸¦ Á¤ÀÇÇϸé
- °¡´ÉÇÏ´Ù. NameVirtualHost name:port¾øÀÌ &lt;VirtualHost
- name:port&gt;¸¸ ȤÀº Listen Áö½Ã¾î¸¸ »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- Listen 80<br />
- Listen 8080<br />
- <br />
- NameVirtualHost 172.20.30.40:80<br />
- NameVirtualHost 172.20.30.40:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <span class="indent">
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-80<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <span class="indent">
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-8080<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <span class="indent">
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-80<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <span class="indent">
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-8080<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ip" id="ip">IP±â¹Ý °¡»óÈ£½ºÆ®</a></h2>
-
- <p>¼­¹ö´Â °¢°¢ <code>www.example1.com</code>°ú
- <code>www.example2.org</code>¿¡ ÇØ´çÇÏ´Â µÎ IP ÁÖ¼Ò¸¦
- (<code>172.20.30.40</code>°ú <code>172.20.30.50</code>)
- °¡Áø´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- Listen 80<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p><code>&lt;VirtualHost&gt;</code> Áö½Ã¾î·Î ÁöÁ¤ÇÑ ÁÖ¼Ò¿¡
- ÇØ´çÇÏÁö¾Ê´Â ÁÖ¼Ò·Î (¿¹¸¦ µé¾î, <code>localhost</code>)
- ¿äûÀÌ µé¾î¿À¸é ÁÖ¼­¹ö°¡ ÀÖ´Â °æ¿ì ÁÖ¼­¹ö°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipport" id="ipport">Æ÷Æ®±â¹Ý°ú ip±â¹ÝÀÌ È¥ÇÕµÈ
- °¡»óÈ£½ºÆ®</a></h2>
-
- <p>¼­¹ö´Â °¢°¢ <code>www.example1.com</code>°ú
- <code>www.example2.org</code>¿¡ ÇØ´çÇÏ´Â µÎ IP ÁÖ¼Ò¸¦
- (<code>172.20.30.40</code>°ú <code>172.20.30.50</code>)
- °¡Áø´Ù. °¢ IPÀÇ 80¹ø°ú 8080¹ø Æ÷Æ®¿¡ °¡»óÈ£½ºÆ®¸¦ µ¹¸°´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- Listen 172.20.30.40:80<br />
- Listen 172.20.30.40:8080<br />
- Listen 172.20.30.50:80<br />
- Listen 172.20.30.50:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1-80<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1-8080<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:80&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2-80<br />
- ServerName www.example1.org<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:8080&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2-8080<br />
- ServerName www.example2.org<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="mixed" id="mixed">À̸§±â¹Ý°ú IP±â¹ÝÀÌ È¥ÇÕµÈ
- °¡»óÈ£½ºÆ®</a></h2>
-
- <p>ÁÖ¼ÒÁß ¸î¸îÀº À̸§±â¹Ý °¡»óÈ£½ºÆ®·Î, ´Ù¸¥ °ÍÀº IP±â¹Ý
- °¡»óÈ£½ºÆ®·Î ¼­ºñ½ºÇÏ°í ½Í´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- Listen 80<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- # IP-±â¹Ý<br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example4<br />
- ServerName www.example4.edu<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.60&gt;<br />
- <span class="indent">
- DocumentRoot /www/example5<br />
- ServerName www.example5.gov<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="default" id="default"><code>_default_</code> °¡»óÈ£½ºÆ®
- »ç¿ëÇϱâ</a></h2>
-
- <h3><a name="defaultallports" id="defaultallports">¸ðµç Æ÷Æ®¿¡ ´ëÇÑ
- <code>_default_</code> °¡»óÈ£½ºÆ®</a></h3>
-
- <p>¾î¶² °¡»óÈ£½ºÆ®¿¡µµ ÇØ´çÇÏÁö¾ÊÀº IP ÁÖ¼Ò¿Í Æ÷Æ®¿¡ ´ëÇÑ
- <em>¸ðµç</em> ¿äûÀ» ó¸®Çϱâ.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- &lt;VirtualHost _default_:*&gt;<br />
- <span class="indent">
- DocumentRoot /www/default<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>default(±âº») °¡»óÈ£½ºÆ®ÀÇ Æ÷Æ®·Î ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÏ¿© ¾î¶² ¿äûµµ
- ÁÖ¼­¹ö·Î ¸ø°¡µµ·Ï ¸¸µç´Ù.</p>
-
- <p>default °¡»óÈ£½ºÆ®´Â Àý´ë·Î À̸§±â¹Ý °¡»óÈ£½ºÆ®°¡ »ç¿ëÇÏ´Â
- ÁÖ¼Ò/Æ÷Æ®·ÎÀÇ ¿äûÀ» ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. ¾Ë ¼ö ¾ø°Å³ª
- <code>Host:</code> Çì´õ°¡ »ý·«µÈ ¿äûÀº Ç×»ó ÃÖÃÊÀÇ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®(¼³Á¤ÆÄÀÏ¿¡¼­
- ÁÖ¼Ò/Æ÷Æ®°¡ óÀ½À¸·Î ³ª¿Â °¡»óÈ£½ºÆ®)°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
- <p><code class="directive"><a href="../mod/mod_alias.html#aliasmatch">AliasMatch</a></code>³ª
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>À»
- »ç¿ëÇÏ¿© ¾î¶² ¿äûÀ» ƯÁ¤ ÆäÀÌÁö(ȤÀº ½ºÅ©¸³Æ®)·Î
- ÀçÀÛ¼ºÇÒ(rewrite) ¼ö ÀÖ´Ù.</p>
-
-
- <h3><a name="defaultdifferentports" id="defaultdifferentports">¿©·¯ Æ÷Æ®¿¡ ´ëÇÑ
- <code>_default_</code> °¡»óÈ£½ºÆ®</a></h3>
-
- <p>À§ÀÇ °æ¿ì¿Í °°Áö¸¸, ¼­¹ö´Â ¿©·¯ Æ÷Æ®¸¦ ±â´Ù¸®°í 80¹ø
- Æ÷Æ®¿¡ ´ëÇؼ­ Ãß°¡·Î <code>_default_</code> °¡»óÈ£½ºÆ®¸¦
- »ç¿ëÇÏ°í ½Í´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- &lt;VirtualHost _default_:80&gt;<br />
- <span class="indent">
- DocumentRoot /www/default80<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost _default_:*&gt;<br />
- <span class="indent">
- DocumentRoot /www/default<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>80¹ø Æ÷Æ®¿¡ ´ëÇÑ default °¡»óÈ£½ºÆ®´Â (<em>¹Ýµå½Ã</em>
- ¿ÍÀϵåÄ«µå Æ÷Æ®¸¦ °¡Áø ±âº» °¡»óÈ£½ºÆ® ÀÌÀü¿¡ ³ª¿Í¾ß ÇÑ´Ù)
- ÁöÁ¤ÇÏÁö¾ÊÀº IP ÁÖ¼Ò·Î º¸³»Áø ¸ðµç ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.
- ÁÖ¼­¹ö´Â Àý´ë·Î ¿äûÀ» ¼­ºñ½ºÇÏÁö ¸øÇÑ´Ù.</p>
-
-
- <h3><a name="defaultoneport" id="defaultoneport">ÇÑ Æ÷Æ®¿¡ ´ëÇÑ
- <code>_default_</code> °¡»óÈ£½ºÆ®</a></h3>
-
- <p>80¹ø Æ÷Æ®¿¡ ´ëÇؼ­¸¸ default °¡»óÈ£½ºÆ®¸¦ ¸¸µé°í ½Í´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- &lt;VirtualHost _default_:80&gt;<br />
- DocumentRoot /www/default<br />
- ...<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>Æ÷Æ® 80¹ø¿¡ ÁöÁ¤ÇÏÁö¾ÊÀº ÁÖ¼Ò¿¡ ´ëÇÑ ¿äûÀº ±âº»
- °¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÏ°í, ´Ù¸¥ ÁöÁ¤ÇÏÁö¾ÊÀº ÁÖ¼Ò¿Í Æ÷Æ®¸¦
- °¡Áø ¿äûÀº ÁÖ ¼­¹ö°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="migrate" id="migrate">À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ IP±â¹Ý
- °¡»óÈ£½ºÆ®·Î ¿Å±â±â</a></h2>
-
- <p>(<a href="#name">À̸§±â¹Ý</a>ÀÇ Ã¹¹ø° ¿¹¿¡¼­) È£½ºÆ®¸í
- <code>www.example2.org</code>¿¡ ´ëÇÑ À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â
- ÀÚ½ÅÀÇ IP ÁÖ¼Ò¸¦ °¡Á®¾ß ÇÑ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ ÀÌÀü
- IP ÁÖ¼Ò¸¦ ij½ÌÇÏ´Â ³×ÀÓ¼­¹ö³ª ÇÁ·Ï½Ã¿ÍÀÇ ¹®Á¦¸¦ ÇÇÇϱâÀ§ÇØ
- ¿Å±â´Â µ¿¾È µÑ ¸ðµÎ¸¦ ¼­ºñ½ºÇÏ°í ½Í´Ù.<br /> ¹æ¹ýÀº
- <code>VirtualHost</code> Áö½Ã¾î¿¡ »õ IP ÁÖ¼Ò¸¸À»
- (<code>172.20.30.50</code>) Ãß°¡ÇϸéµÇ¹Ç·Î ½±´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- Listen 80<br />
- ServerName www.example1.com<br />
- DocumentRoot /www/example1<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40 172.20.30.50&gt;<br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- ServerAlias *.example3.net<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>ÀÌÁ¦ (IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ÅëÇÑ) »õ·Î¿î ÁÖ¼Ò¿Í (À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¸¦ ÅëÇÑ) ÀÌÀü ÁÖ¼Ò ¸ðµÎ °¡»óÈ£½ºÆ®¿¡ Á¢±ÙÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="serverpath" id="serverpath"><code>ServerPath</code>
- Áö½Ã¾î »ç¿ëÇϱâ</a></h2>
-
- <p>µÎ À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ °¡Áø ¼­¹ö°¡ ÀÖ´Ù. ¿Ã¹Ù¸¥
- °¡»óÈ£½ºÆ®¸¦ ¼±ÅÃÇϱâÀ§ÇØ Å¬¶óÀ̾ðÆ®´Â ¿Ã¹Ù¸¥
- <code>Host:</code> Çì´õ¸¦ º¸³»¾ß ÇÑ´Ù. ¿À·¡µÈ HTTP/1.0
- Ŭ¶óÀ̾ðÆ®°¡ ÀÌ Çì´õ¸¦ º¸³»Áö ¸øÇÏ¸é ¾ÆÆÄÄ¡´Â Ŭ¶óÀ̾ðÆ®°¡
- ¾î¶² °¡»óÈ£½ºÆ®¸¦ º¸·Á°íÇÏ´ÂÁö ¾Ë ¼ö ¾ø´Ù (±×·¡¼­ ÃÖÃÊÀÇ
- °¡»óÈ£½ºÆ®°¡ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù). ¿À·¡µÈ ºê¶ó¿ìÀú¿Í °¡´ÉÇÑ È£È¯À»
- À¯ÁöÇϱâÀ§ÇØ ÃÖÃÊÀÇ °¡»óÈ£½ºÆ®¸¦ ¸¸µé°í, ¿©±â¿¡ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®ÀÇ URL Á¢µÎ»ç¸¦ Æ÷ÇÔÇÏ´Â ¸µÅ© ¸ñ·Ï ÆäÀÌÁö¸¦
- µÐ´Ù.</p>
-
- <div class="example"><h3>¼­¹ö ¼³Á¤</h3><p><code>
-
-
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- # primary vhost<br />
- DocumentRoot /www/subdomain<br />
- RewriteEngine On<br />
- RewriteRule ^/.* /www/subdomain/index.html<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- DocumentRoot /www/subdomain/sub1<br />
- <span class="indent">
- ServerName www.sub1.domain.tld<br />
- ServerPath /sub1/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub1/.*) /www/subdomain$1<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <span class="indent">
- DocumentRoot /www/subdomain/sub2<br />
- ServerName www.sub2.domain.tld<br />
- ServerPath /sub2/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub2/.*) /www/subdomain$1<br />
- # ...<br />
- </span>
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code> Áö½Ã¾î¶§¹®¿¡
- URL <code>http://www.sub1.domain.tld/sub1/</code>¿¡ ´ëÇÑ
- ¿äûÀº <em>Ç×»ó</em> subl-°¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÑ´Ù.<br />
- Ŭ¶óÀ̾ðÆ®°¡ ¿Ã¹Ù¸¥ <code>Host:</code> Çì´õ¸¦ º¸³½´Ù¸é,
- URL <code>http://www.sub1.domain.tld/</code>¿¡ ´ëÇÑ ¿äûÀº
- subl-°¡»óÈ£½ºÆ®¿¡¼­¸¸ ¼­ºñ½ºÇÑ´Ù. ¸¸¾à <code>Host:</code> Çì´õ¸¦
- º¸³»Áö¾ÊÀ¸¸é Ŭ¶óÀ̾ðÆ®´Â ÃÖÃÊÀÇ È£½ºÆ®¿¡ ÀÖ´Â Á¤º¸ÆäÀÌÁö¸¦
- º¸°ÔµÈ´Ù.<br /> ¿©±â¿¡ ¹®Á¦°¡ ÀÖÀ½À» ÁÖÀÇÇ϶ó: Ŭ¶óÀ̾ðÆ®°¡
- <code>Host:</code> Çì´õ¸¦ º¸³»Áö¾ÊÀ¸¸é
- <code>http://www.sub2.domain.tld/sub1/</code>¿¡ ´ëÇÑ ¿äûµµ
- subl-°¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÑ´Ù.<br />
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¿Ã¹Ù¸¥ <code>Host:</code> Çì´õ¸¦ º¸³»´Â
- Ŭ¶óÀ̾ðÆ®´Â (<em>¿¹¸¦ µé¾î</em>, URL ÀüÄ¡»ç°¡ Àְųª ¾ø´Â)
- µÎ URLÀ» ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/examples.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/examples.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/examples.xml b/docs/manual/vhosts/examples.xml
deleted file mode 100644
index be0c5556a1..0000000000
--- a/docs/manual/vhosts/examples.xml
+++ /dev/null
@@ -1,608 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.8 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="examples.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
- <title>VirtualHost Examples</title>
-
-<summary>
-
- <p>This document attempts to answer the commonly-asked questions about
- setting up virtual hosts. These scenarios are those involving multiple
- web sites running on a single server, via <a
- href="name-based.html">name-based</a> or <a
- href="ip-based.html">IP-based</a> virtual hosts. A document should be
- coming soon about running sites on several servers behind a single
- proxy server.</p>
-
-</summary>
-
- <section id="purename"><title>Running several name-based web
- sites on a single IP address.</title>
-
- <p>Your server has a single IP address, and multiple aliases (CNAMES)
- point to this machine in DNS. You want to run a web server for
- <code>www.example1.com</code> and <code>www.example2.org</code> on this
- machine.</p>
-
- <note><title>Note</title><p>Creating virtual
- host configurations on your Apache server does not magically
- cause DNS entries to be created for those host names. You
- <em>must</em> have the names in DNS, resolving to your IP
- address, or nobody else will be able to see your web site. You
- can put entries in your <code>hosts</code> file for local
- testing, but that will work only from the machine with those
- hosts entries.</p>
- </note>
-
- <example>
- <title>Server configuration</title>
-
- # Ensure that Apache listens on port 80<br />
- Listen 80<br />
- <br />
- # Listen for virtual host requests on all IP addresses<br />
- NameVirtualHost *<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # Other directives here<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # Other directives here<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>The asterisks match all addresses, so the main server serves no
- requests. Due to the fact that <code>www.example1.com</code> is first
- in the configuration file, it has the highest priority and can be seen
- as the <cite>default</cite> or <cite>primary</cite> server. That means
- that if a request is received that does not match one of the specified
- <code>ServerName</code> directives, it will be served by this first
- <code>VirtualHost</code>.</p>
-
- <note>
- <title>Note</title>
-
- <p>You can, if you wish, replace <code>*</code> with the actual
- IP address of the system. In that case, the argument to
- <code>VirtualHost</code> <em>must</em> match the argument to
- <code>NameVirtualHost</code>:</p>
-
- <example>
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- # etc ...
- </example>
-
- <p>However, it is additionally useful to use <code>*</code>
- on systems where the IP address is not predictable - for
- example if you have a dynamic IP address with your ISP, and
- you are using some variety of dynamic DNS solution. Since
- <code>*</code> matches any IP address, this configuration
- would work without changes whenever your IP address
- changes.</p>
- </note>
-
- <p>The above configuration is what you will want to use in almost
- all name-based virtual hosting situations. The only thing that this
- configuration will not work for, in fact, is when you are serving
- different content based on differing IP addresses or ports.</p>
-
- </section>
-
- <section id="twoips"><title>Name-based hosts on more than one
- IP address.</title>
-
- <note>
- <title>Note</title><p>Any of the
- techniques discussed here can be extended to any number of IP
- addresses.</p>
- </note>
-
- <p>The server has two IP addresses. On one (<code>172.20.30.40</code>), we
- will serve the "main" server, <code>server.domain.com</code> and on the
- other (<code>172.20.30.50</code>), we will serve two or more virtual hosts.</p>
-
- <example>
- <title>Server configuration</title>
-
- Listen 80<br />
- <br />
- # This is the "main" server running on 172.20.30.40<br />
- ServerName server.domain.com<br />
- DocumentRoot /www/mainserver<br />
- <br />
- # This is the other address<br />
- NameVirtualHost 172.20.30.50<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # Other directives here ...<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # Other directives here ...<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Any request to an address other than <code>172.20.30.50</code> will be
- served from the main server. A request to <code>172.20.30.50</code> with an
- unknown hostname, or no <code>Host:</code> header, will be served from
- <code>www.example1.com</code>.</p>
-
- </section>
-
- <section id="intraextra"><title>Serving the same content on
- different IP addresses (such as an internal and external
- address).</title>
-
- <p>The server machine has two IP addresses (<code>192.168.1.1</code>
- and <code>172.20.30.40</code>). The machine is sitting between an
- internal (intranet) network and an external (internet) network. Outside
- of the network, the name <code>server.example.com</code> resolves to
- the external address (<code>172.20.30.40</code>), but inside the
- network, that same name resolves to the internal address
- (<code>192.168.1.1</code>).</p>
-
- <p>The server can be made to respond to internal and external requests
- with the same content, with just one <code>VirtualHost</code>
- section.</p>
-
- <example>
- <title>Server configuration</title>
-
- NameVirtualHost 192.168.1.1<br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 192.168.1.1 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/server1<br />
- ServerName server.example.com<br />
- ServerAlias server<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Now requests from both networks will be served from the same
- <code>VirtualHost</code>.</p>
-
- <note>
- <title>Note:</title><p>On the internal
- network, one can just use the name <code>server</code> rather
- than the fully qualified host name
- <code>server.example.com</code>.</p>
-
- <p>Note also that, in the above example, you can replace the list
- of IP addresses with <code>*</code>, which will cause the server to
- respond the same on all addresses.</p>
- </note>
-
- </section>
-
- <section id="port"><title>Running different sites on different
- ports.</title>
-
- <p>You have multiple domains going to the same IP and also want to
- serve multiple ports. By defining the ports in the "NameVirtualHost"
- tag, you can allow this to work. If you try using &lt;VirtualHost
- name:port&gt; without the NameVirtualHost name:port or you try to use
- the Listen directive, your configuration will not work.</p>
-
- <example>
- <title>Server configuration</title>
-
- Listen 80<br />
- Listen 8080<br />
- <br />
- NameVirtualHost 172.20.30.40:80<br />
- NameVirtualHost 172.20.30.40:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <indent>
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-80<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <indent>
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-8080<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <indent>
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-80<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <indent>
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-8080<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- </section>
-
- <section id="ip"><title>IP-based virtual hosting</title>
-
- <p>The server has two IP addresses (<code>172.20.30.40</code> and
- <code>172.20.30.50</code>) which resolve to the names
- <code>www.example1.com</code> and <code>www.example2.org</code>
- respectively.</p>
-
- <example>
- <title>Server configuration</title>
-
- Listen 80<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Requests for any address not specified in one of the
- <code>&lt;VirtualHost&gt;</code> directives (such as
- <code>localhost</code>, for example) will go to the main server, if
- there is one.</p>
-
- </section>
-
- <section id="ipport"><title>Mixed port-based and ip-based virtual
- hosts</title>
-
- <p>The server machine has two IP addresses (<code>172.20.30.40</code> and
- <code>172.20.30.50</code>) which resolve to the names
- <code>www.example1.com</code> and <code>www.example2.org</code>
- respectively. In each case, we want to run hosts on ports 80 and
- 8080.</p>
-
- <example>
- <title>Server configuration</title>
-
- Listen 172.20.30.40:80<br />
- Listen 172.20.30.40:8080<br />
- Listen 172.20.30.50:80<br />
- Listen 172.20.30.50:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <indent>
- DocumentRoot /www/example1-80<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <indent>
- DocumentRoot /www/example1-8080<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:80&gt;<br />
- <indent>
- DocumentRoot /www/example2-80<br />
- ServerName www.example1.org<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:8080&gt;<br />
- <indent>
- DocumentRoot /www/example2-8080<br />
- ServerName www.example2.org<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- </section>
-
- <section id="mixed"><title>Mixed name-based and IP-based
- vhosts</title>
-
- <p>On some of my addresses, I want to do name-based virtual hosts, and
- on others, IP-based hosts.</p>
-
- <example>
- <title>Server configuration</title>
-
- Listen 80<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- # IP-based<br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example4<br />
- ServerName www.example4.edu<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.60&gt;<br />
- <indent>
- DocumentRoot /www/example5<br />
- ServerName www.example5.gov<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- </section>
-
- <section id="default"><title>Using <code>_default_</code>
- vhosts</title>
-
- <section id="defaultallports"><title><code>_default_</code> vhosts
- for all ports</title>
-
- <p>Catching <em>every</em> request to any unspecified IP address and
- port, <em>i.e.</em>, an address/port combination that is not used for
- any other virtual host.</p>
-
- <example>
- <title>Server configuration</title>
-
- &lt;VirtualHost _default_:*&gt;<br />
- <indent>
- DocumentRoot /www/default<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Using such a default vhost with a wildcard port effectively prevents
- any request going to the main server.</p>
-
- <p>A default vhost never serves a request that was sent to an
- address/port that is used for name-based vhosts. If the request
- contained an unknown or no <code>Host:</code> header it is always
- served from the primary name-based vhost (the vhost for that
- address/port appearing first in the configuration file).</p>
-
- <p>You can use <directive module="mod_alias">AliasMatch</directive> or
- <directive module="mod_rewrite">RewriteRule</directive> to rewrite any
- request to a single information page (or script).</p>
- </section>
-
- <section id="defaultdifferentports"><title><code>_default_</code> vhosts
- for different ports</title>
-
- <p>Same as setup 1, but the server listens on several ports and we want
- to use a second <code>_default_</code> vhost for port 80.</p>
-
- <example>
- <title>Server configuration</title>
-
- &lt;VirtualHost _default_:80&gt;<br />
- <indent>
- DocumentRoot /www/default80<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost _default_:*&gt;<br />
- <indent>
- DocumentRoot /www/default<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>The default vhost for port 80 (which <em>must</em> appear before any
- default vhost with a wildcard port) catches all requests that were sent
- to an unspecified IP address. The main server is never used to serve a
- request.</p>
- </section>
-
- <section id="defaultoneport"><title><code>_default_</code> vhosts
- for one port</title>
-
- <p>We want to have a default vhost for port 80, but no other default
- vhosts.</p>
-
- <example>
- <title>Server configuration</title>
-
- &lt;VirtualHost _default_:80&gt;<br />
- DocumentRoot /www/default<br />
- ...<br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>A request to an unspecified address on port 80 is served from the
- default vhost any other request to an unspecified address and port is
- served from the main server.</p>
- </section>
-
- </section>
-
- <section id="migrate"><title>Migrating a name-based vhost to an
- IP-based vhost</title>
-
- <p>The name-based vhost with the hostname
- <code>www.example2.org</code> (from our <a
- href="#name">name-based</a> example, setup 2) should get its own IP
- address. To avoid problems with name servers or proxies who cached the
- old IP address for the name-based vhost we want to provide both
- variants during a migration phase.<br />
- The solution is easy, because we can simply add the new IP address
- (<code>172.20.30.50</code>) to the <code>VirtualHost</code>
- directive.</p>
-
- <example>
- <title>Server configuration</title>
-
- Listen 80<br />
- ServerName www.example1.com<br />
- DocumentRoot /www/example1<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- ServerAlias *.example3.net<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>The vhost can now be accessed through the new address (as an
- IP-based vhost) and through the old address (as a name-based
- vhost).</p>
-
- </section>
-
- <section id="serverpath"><title>Using the <code>ServerPath</code>
- directive</title>
-
- <p>We have a server with two name-based vhosts. In order to match the
- correct virtual host a client must send the correct <code>Host:</code>
- header. Old HTTP/1.0 clients do not send such a header and Apache has
- no clue what vhost the client tried to reach (and serves the request
- from the primary vhost). To provide as much backward compatibility as
- possible we create a primary vhost which returns a single page
- containing links with an URL prefix to the name-based virtual
- hosts.</p>
-
- <example>
- <title>Server configuration</title>
-
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- # primary vhost<br />
- DocumentRoot /www/subdomain<br />
- RewriteEngine On<br />
- RewriteRule ^/.* /www/subdomain/index.html<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- DocumentRoot /www/subdomain/sub1<br />
- <indent>
- ServerName www.sub1.domain.tld<br />
- ServerPath /sub1/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub1/.*) /www/subdomain$1<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/subdomain/sub2<br />
- ServerName www.sub2.domain.tld<br />
- ServerPath /sub2/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub2/.*) /www/subdomain$1<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Due to the <directive module="core">ServerPath</directive>
- directive a request to the URL
- <code>http://www.sub1.domain.tld/sub1/</code> is <em>always</em> served
- from the sub1-vhost.<br /> A request to the URL
- <code>http://www.sub1.domain.tld/</code> is only
- served from the sub1-vhost if the client sent a correct
- <code>Host:</code> header. If no <code>Host:</code> header is sent the
- client gets the information page from the primary host.<br />
- Please note that there is one oddity: A request to
- <code>http://www.sub2.domain.tld/sub1/</code> is also served from the
- sub1-vhost if the client sent no <code>Host:</code> header.<br />
- The <directive module="mod_rewrite">RewriteRule</directive> directives
- are used to make sure that a client which sent a correct
- <code>Host:</code> header can use both URL variants, <em>i.e.</em>,
- with or without URL prefix.</p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/vhosts/examples.xml.ko b/docs/manual/vhosts/examples.xml.ko
deleted file mode 100644
index 985cb94677..0000000000
--- a/docs/manual/vhosts/examples.xml.ko
+++ /dev/null
@@ -1,596 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.8 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="examples.xml.meta">
-<parentdocument href="./">°¡»óÈ£½ºÆ®</parentdocument>
- <title>°¡»óÈ£½ºÆ® ¿¹</title>
-
-<summary>
-
- <p>ÀÌ ¹®¼­´Â ÀÚÁÖ ¹®ÀǵǴ °¡»óÈ£½ºÆ®
- Áú¹®¿¡ ´äÀ» ÇÏ·Á°í ¾²¿©Á³´Ù. »óȲÀº <a
- href="name-based.html">À̸§±â¹Ý</a>À̳ª <a
- href="ip-based.html">IP±â¹Ý</a> °¡»óÈ£½ºÆ®¸¦ ÅëÇØ ÇÑ ¼­¹ö¿¡¼­
- ¿©·¯ À¥»çÀÌÆ®¸¦ ¼­ºñ½ºÇÏ·Á´Â °æ¿ìÀÌ´Ù. ÇÑ ÇÁ·Ï½Ã ¼­¹ö µÚ¿¡¼­
- ¿©·¯ ¼­¹ö¸¦ »ç¿ëÇÏ¿© »çÀÌÆ®¸¦ ¿î¿µÇÏ´Â °æ¿ì¸¦ ´Ù·é ¹®¼­µµ
- °ð ³ª¿Ã °ÍÀÌ´Ù.</p>
-
-</summary>
-
- <section id="purename"><title>IP ÁÖ¼Ò ÇÑ°³¿¡ ¿©·¯ À̸§±â¹Ý
- À¥»çÀÌÆ® ¿î¿µÇϱâ.</title>
-
- <p>¼­¹ö¿¡ IP ÁÖ¼Ò°¡ ÇÑ°³ ÀÖ°í, DNS¿¡¼­ ¿©·¯ ÁÖ¼Ò(CNAMES)°¡
- ÀÌ ÄÄÇ»Å͸¦ °¡¸®Å²´Ù. ÀÌ ÄÄÇ»ÅÍ¿¡¼­ <code>www.example1.com</code>°ú
- <code>www.example2.org</code>ÀÇ À¥¼­¹ö¸¦ ½ÇÇàÇÏ°í ½Í´Ù.</p>
-
- <note><title>Note</title><p>¾ÆÆÄÄ¡ ¼­¹ö¿¡ °¡»óÈ£½ºÆ® ¼³Á¤À»
- ÇÑ´Ù°í ±× È£½ºÆ®¸í¿¡ ´ëÇÑ DNS Ç׸ñÀÌ ÀÚµ¿ÀÌ·Î »ý¼ºµÇÁö
- ¾Ê´Â´Ù. <em>¹Ýµå½Ã</em> DNS¿¡ IP ÁÖ¼Ò¸¦ °¡¸®Å°´Â
- À̸§ÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¾È±×·¯¸é ¾Æ¹«µµ À¥»çÀÌÆ®¸¦ º¼
- ¼ö ¾ø´Ù. °Ë»çÇغ¸±â À§ÇØ <code>hosts</code> ÆÄÀÏ¿¡ Ç׸ñÀ»
- Ãß°¡ÇÒ ¼ö ÀÖÁö¸¸, ÀÌ´Â hosts Ç׸ñÀ» °¡Áø ÄÄÇ»ÅÍ¿¡¸¸
- ¹Ý¿µµÈ´Ù.</p>
- </note>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- # ¾ÆÆÄÄ¡°¡ Æ÷Æ® 80À» ±â´Ù¸°´Ù<br />
- Listen 80<br />
- <br />
- # ¸ðµç IP ÁÖ¼Ò¿¡¼­ °¡»óÈ£½ºÆ® ¿äûÀ» ±â´Ù¸°´Ù<br />
- NameVirtualHost *<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>º°Ç¥´Â ¸ðµç ÁÖ¼Ò¸¦ °¡¸®Å°¹Ç·Î, ÁÖ¼­¹ö´Â ¾î¶² ¿äûµµ
- ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. <code>www.example1.com</code>ÀÌ
- ¼³Á¤ÆÄÀÏ¿¡ óÀ½À¸·Î ³ª¿À¹Ç·Î °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áö¸ç,
- <cite>±âº»</cite>ȤÀº <cite>Ãʱâ</cite> ¼­¹ö°¡ µÈ´Ù.
- ¾î¶² <code>ServerName</code> Áö½Ã¾î¿¡µµ ÇØ´çµÇÁö¾Ê´Â ¿äûÀº
- ù¹ø° <code>VirtualHost</code>°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
- <note>
- <title>ÁÖÀÇ</title>
-
- <p>¿øÇÑ´Ù¸é <code>*</code> ´ë½Å ½Ã½ºÅÛÀÇ ½ÇÁ¦ IP
- ÁÖ¼Ò¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì
- <code>VirtualHost</code>ÀÇ ¾Æ±Ô¸ÕÆ®´Â
- <code>NameVirtualHost</code>ÀÇ ¾Æ±Ô¸ÕÆ®¿Í ÀÏÄ¡Çؾß
- <em>ÇÑ´Ù</em>:</p>
-
- <example>
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- # »ý·« ...
- </example>
-
- <p>±×·¯³ª ISP¿¡¼­ µ¿ÀûÀ¸·Î IP ÁÖ¼Ò¸¦ °¡Á®¿À´Â µî
- IP ÁÖ¼Ò¸¦ ¸ð¸£´Â °æ¿ì¿¡´Â <code>*</code>¸¦ »ç¿ëÇÏ´Â
- °ÍÀÌ À¯¿ëÇÏ´Ù. <code>*</code>´Â ¸ðµç IP ÁÖ¼Ò¿¡
- ÇØ´çÇϹǷÎ, IP ÁÖ¼Ò°¡ º¯°æµÇ¾îµµ ¼³Á¤À» º¯°æÇÒ
- ÇÊ¿ä°¡ ¾ø´Ù.</p>
- </note>
-
- <p>°ÅÀÇ ´ëºÎºÐÀÇ À̸§±â¹Ý °¡»óÈ£½ºÆ® ¼³Á¤Àº À§¿Í °°´Ù.
- ¿¹¿Ü´Â ´Ù¸¥ IP ÁÖ¼Ò³ª Æ÷Æ®·Î ´Ù¸¥ ³»¿ëÀ» ¼­ºñ½ºÇÏ·Á´Â
- °æ¿ìÀÌ´Ù.</p>
-
- </section>
-
- <section id="twoips"><title>¿©·¯ IP ÁÖ¼Ò¿¡¼­ À̸§±â¹Ý
- È£½ºÆ®.</title>
-
- <note>
- <title>ÁÖÀÇ</title><p>¿©±â¼­ ¼³¸íÇÑ ¹æ¹ýÀº IP ÁÖ¼Ò°¡
- ¸î°³¶óµµ Àû¿ë°¡´ÉÇÏ´Ù.</p>
- </note>
-
- <p>¼­¹ö´Â IP ÁÖ¼Ò°¡ µÎ°³ÀÖ´Ù. Çϳª¿¡¼­
- (<code>172.20.30.40</code>) "ÁÖ" ¼­¹ö
- <code>server.domain.com</code>À» ¼­ºñ½ºÇÏ°í, ´Ù¸¥ Çϳª¿¡¼­
- (<code>172.20.30.50</code>) ¿©·¯ °¡»óÈ£½ºÆ®¸¦ ¼­ºñ½ºÇÒ
- °ÍÀÌ´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- Listen 80<br />
- <br />
- # 172.20.30.40¿¡¼­ ½ÇÇàÇÏ´Â "ÁÖ"¼­¹öÀÌ´Ù<br />
- ServerName server.domain.com<br />
- DocumentRoot /www/mainserver<br />
- <br />
- # ´Ù¸¥ ÁÖ¼Ò´Ù<br />
- NameVirtualHost 172.20.30.50<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù ...<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- <br />
- # ´Ù¸¥ Áö½Ã¾îµéµµ ÀÖ´Ù ...<br />
- <br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p><code>172.20.30.50</code>ÀÌ ¾Æ´Ñ ÁÖ¼Ò¿¡ ´ëÇÑ ¿äûÀº
- ÁÖ¼­¹ö°¡ ¼­ºñ½ºÇÑ´Ù. È£½ºÆ®¸í ¾øÀÌ, Áï <code>Host:</code>
- Çì´õ¾øÀÌ <code>172.20.30.50</code>·Î ¿äûÇϸé
- <code>www.example1.com</code>ÀÌ ¼­ºñ½ºÇÑ´Ù.</p>
-
- </section>
-
- <section id="intraextra"><title>(³»ºÎ¿Í ¿ÜºÎ ÁÖ¼Ò¿Í °°ÀÌ)
- ´Ù¸¥ IP ÁÖ¼Ò·Î °°Àº ³»¿ëÀ» ¼­ºñ½ºÇϱâ.</title>
-
- <p>¼­¹ö ÄÄÇ»ÅÍ¿¡ IP ÁÖ¼Ò°¡ µÎ°³ (<code>192.168.1.1</code>°ú
- <code>172.20.30.40</code>) ÀÖ´Ù. ÄÄÇ»ÅÍ´Â ³»ºÎ (ÀÎÆ®¶ó³Ý)
- ³×Æ®¿÷°ú ¿ÜºÎ (ÀÎÅͳÝ) ³×Æ®¿÷ »çÀÌ¿¡ À§Ä¡ÇÑ´Ù. ³×Æ®¿÷ ¹Û¿¡¼­
- <code>server.example.com</code>Àº ¿ÜºÎ ÁÖ¼Ò¸¦
- (<code>172.20.30.40</code>) ÀǹÌÇÏ°í, ³×Æ®¿÷ ³»ºÎ¿¡¼­ °°Àº
- À̸§À» ³»ºÎ ÁÖ¼Ò·Î (<code>192.168.1.1</code>) »ç¿ëÇÑ´Ù.</p>
-
- <p>¼­¹ö´Â <code>VirtualHost</code> ¼½¼Ç ÇÑ°³·Î ³»ºÎ¿Í ¿ÜºÎ
- ÀÀ´ä¿¡ °°Àº ³»¿ëÀ» ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- NameVirtualHost 192.168.1.1<br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 192.168.1.1 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/server1<br />
- ServerName server.example.com<br />
- ServerAlias server<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>ÀÌÁ¦ µÎ ³×Æ®¿÷¿¡¼­ µé¾î¿Â ¿äûÀ» °°Àº
- <code>VirtualHost</code>¿¡¼­ ¼­ºñ½ºÇÑ´Ù.</p>
-
- <note>
- <title>ÁÖÀÇ:</title><p>³»ºÎ ³×Æ®¿÷¿¡¼­´Â ¿ÏÀüÇÑ È£½ºÆ®¸í
- <code>server.example.com</code> ´ë½Å À̸§
- <code>server</code>µµ °¡´ÉÇÏ´Ù.</p>
-
- <p>¶ÇÇÑ À§ÀÇ ¿¹¿¡¼­ IP ÁÖ¼Ò ´ë½Å <code>*</code>À»
- »ç¿ëÇÏ¿© ¼­¹ö°¡ ¸ðµç ÁÖ¼Ò¿¡ µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÒ ¼ö
- ÀÖ´Ù.</p>
- </note>
-
- </section>
-
- <section id="port"><title>¿©·¯ Æ÷Æ®¿¡¼­ ¼­·Î ´Ù¸¥ »çÀÌÆ®
- ¿î¿µÇϱâ.</title>
-
- <p>°°Àº IPÀÇ ¿©·¯ Æ÷Æ®¿¡¼­ ¼­·Î ´Ù¸¥ µµ¸ÞÀÎÀ» ¼­ºñ½ºÇÑ´Ù°í
- °¡Á¤ÇÏÀÚ. ÀÌ´Â "NameVirtualHost" ű׿¡ Æ÷Æ®¸¦ Á¤ÀÇÇϸé
- °¡´ÉÇÏ´Ù. NameVirtualHost name:port¾øÀÌ &lt;VirtualHost
- name:port&gt;¸¸ ȤÀº Listen Áö½Ã¾î¸¸ »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- Listen 80<br />
- Listen 8080<br />
- <br />
- NameVirtualHost 172.20.30.40:80<br />
- NameVirtualHost 172.20.30.40:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <indent>
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-80<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <indent>
- ServerName www.example1.com<br />
- DocumentRoot /www/domain-8080<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <indent>
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-80<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <indent>
- ServerName www.example2.org<br />
- DocumentRoot /www/otherdomain-8080<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- </section>
-
- <section id="ip"><title>IP±â¹Ý °¡»óÈ£½ºÆ®</title>
-
- <p>¼­¹ö´Â °¢°¢ <code>www.example1.com</code>°ú
- <code>www.example2.org</code>¿¡ ÇØ´çÇÏ´Â µÎ IP ÁÖ¼Ò¸¦
- (<code>172.20.30.40</code>°ú <code>172.20.30.50</code>)
- °¡Áø´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- Listen 80<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p><code>&lt;VirtualHost&gt;</code> Áö½Ã¾î·Î ÁöÁ¤ÇÑ ÁÖ¼Ò¿¡
- ÇØ´çÇÏÁö¾Ê´Â ÁÖ¼Ò·Î (¿¹¸¦ µé¾î, <code>localhost</code>)
- ¿äûÀÌ µé¾î¿À¸é ÁÖ¼­¹ö°¡ ÀÖ´Â °æ¿ì ÁÖ¼­¹ö°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
- </section>
-
- <section id="ipport"><title>Æ÷Æ®±â¹Ý°ú ip±â¹ÝÀÌ È¥ÇÕµÈ
- °¡»óÈ£½ºÆ®</title>
-
- <p>¼­¹ö´Â °¢°¢ <code>www.example1.com</code>°ú
- <code>www.example2.org</code>¿¡ ÇØ´çÇÏ´Â µÎ IP ÁÖ¼Ò¸¦
- (<code>172.20.30.40</code>°ú <code>172.20.30.50</code>)
- °¡Áø´Ù. °¢ IPÀÇ 80¹ø°ú 8080¹ø Æ÷Æ®¿¡ °¡»óÈ£½ºÆ®¸¦ µ¹¸°´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- Listen 172.20.30.40:80<br />
- Listen 172.20.30.40:8080<br />
- Listen 172.20.30.50:80<br />
- Listen 172.20.30.50:8080<br />
- <br />
- &lt;VirtualHost 172.20.30.40:80&gt;<br />
- <indent>
- DocumentRoot /www/example1-80<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40:8080&gt;<br />
- <indent>
- DocumentRoot /www/example1-8080<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:80&gt;<br />
- <indent>
- DocumentRoot /www/example2-80<br />
- ServerName www.example1.org<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.50:8080&gt;<br />
- <indent>
- DocumentRoot /www/example2-8080<br />
- ServerName www.example2.org<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- </section>
-
- <section id="mixed"><title>À̸§±â¹Ý°ú IP±â¹ÝÀÌ È¥ÇÕµÈ
- °¡»óÈ£½ºÆ®</title>
-
- <p>ÁÖ¼ÒÁß ¸î¸îÀº À̸§±â¹Ý °¡»óÈ£½ºÆ®·Î, ´Ù¸¥ °ÍÀº IP±â¹Ý
- °¡»óÈ£½ºÆ®·Î ¼­ºñ½ºÇÏ°í ½Í´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- Listen 80<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example1<br />
- ServerName www.example1.com<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- # IP-±â¹Ý<br />
- &lt;VirtualHost 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example4<br />
- ServerName www.example4.edu<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.60&gt;<br />
- <indent>
- DocumentRoot /www/example5<br />
- ServerName www.example5.gov<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- </section>
-
- <section id="default"><title><code>_default_</code> °¡»óÈ£½ºÆ®
- »ç¿ëÇϱâ</title>
-
- <section id="defaultallports"><title>¸ðµç Æ÷Æ®¿¡ ´ëÇÑ
- <code>_default_</code> °¡»óÈ£½ºÆ®</title>
-
- <p>¾î¶² °¡»óÈ£½ºÆ®¿¡µµ ÇØ´çÇÏÁö¾ÊÀº IP ÁÖ¼Ò¿Í Æ÷Æ®¿¡ ´ëÇÑ
- <em>¸ðµç</em> ¿äûÀ» ó¸®Çϱâ.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- &lt;VirtualHost _default_:*&gt;<br />
- <indent>
- DocumentRoot /www/default<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>default(±âº») °¡»óÈ£½ºÆ®ÀÇ Æ÷Æ®·Î ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÏ¿© ¾î¶² ¿äûµµ
- ÁÖ¼­¹ö·Î ¸ø°¡µµ·Ï ¸¸µç´Ù.</p>
-
- <p>default °¡»óÈ£½ºÆ®´Â Àý´ë·Î À̸§±â¹Ý °¡»óÈ£½ºÆ®°¡ »ç¿ëÇÏ´Â
- ÁÖ¼Ò/Æ÷Æ®·ÎÀÇ ¿äûÀ» ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. ¾Ë ¼ö ¾ø°Å³ª
- <code>Host:</code> Çì´õ°¡ »ý·«µÈ ¿äûÀº Ç×»ó ÃÖÃÊÀÇ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®(¼³Á¤ÆÄÀÏ¿¡¼­
- ÁÖ¼Ò/Æ÷Æ®°¡ óÀ½À¸·Î ³ª¿Â °¡»óÈ£½ºÆ®)°¡ ¼­ºñ½ºÇÑ´Ù.</p>
-
- <p><directive module="mod_alias">AliasMatch</directive>³ª
- <directive module="mod_rewrite">RewriteRule</directive>À»
- »ç¿ëÇÏ¿© ¾î¶² ¿äûÀ» ƯÁ¤ ÆäÀÌÁö(ȤÀº ½ºÅ©¸³Æ®)·Î
- ÀçÀÛ¼ºÇÒ(rewrite) ¼ö ÀÖ´Ù.</p>
- </section>
-
- <section id="defaultdifferentports"><title>¿©·¯ Æ÷Æ®¿¡ ´ëÇÑ
- <code>_default_</code> °¡»óÈ£½ºÆ®</title>
-
- <p>À§ÀÇ °æ¿ì¿Í °°Áö¸¸, ¼­¹ö´Â ¿©·¯ Æ÷Æ®¸¦ ±â´Ù¸®°í 80¹ø
- Æ÷Æ®¿¡ ´ëÇؼ­ Ãß°¡·Î <code>_default_</code> °¡»óÈ£½ºÆ®¸¦
- »ç¿ëÇÏ°í ½Í´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- &lt;VirtualHost _default_:80&gt;<br />
- <indent>
- DocumentRoot /www/default80<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost _default_:*&gt;<br />
- <indent>
- DocumentRoot /www/default<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>80¹ø Æ÷Æ®¿¡ ´ëÇÑ default °¡»óÈ£½ºÆ®´Â (<em>¹Ýµå½Ã</em>
- ¿ÍÀϵåÄ«µå Æ÷Æ®¸¦ °¡Áø ±âº» °¡»óÈ£½ºÆ® ÀÌÀü¿¡ ³ª¿Í¾ß ÇÑ´Ù)
- ÁöÁ¤ÇÏÁö¾ÊÀº IP ÁÖ¼Ò·Î º¸³»Áø ¸ðµç ¿äûÀ» ¼­ºñ½ºÇÑ´Ù.
- ÁÖ¼­¹ö´Â Àý´ë·Î ¿äûÀ» ¼­ºñ½ºÇÏÁö ¸øÇÑ´Ù.</p>
- </section>
-
- <section id="defaultoneport"><title>ÇÑ Æ÷Æ®¿¡ ´ëÇÑ
- <code>_default_</code> °¡»óÈ£½ºÆ®</title>
-
- <p>80¹ø Æ÷Æ®¿¡ ´ëÇؼ­¸¸ default °¡»óÈ£½ºÆ®¸¦ ¸¸µé°í ½Í´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- &lt;VirtualHost _default_:80&gt;<br />
- DocumentRoot /www/default<br />
- ...<br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>Æ÷Æ® 80¹ø¿¡ ÁöÁ¤ÇÏÁö¾ÊÀº ÁÖ¼Ò¿¡ ´ëÇÑ ¿äûÀº ±âº»
- °¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÏ°í, ´Ù¸¥ ÁöÁ¤ÇÏÁö¾ÊÀº ÁÖ¼Ò¿Í Æ÷Æ®¸¦
- °¡Áø ¿äûÀº ÁÖ ¼­¹ö°¡ ¼­ºñ½ºÇÑ´Ù.</p>
- </section>
-
- </section>
-
- <section id="migrate"><title>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ IP±â¹Ý
- °¡»óÈ£½ºÆ®·Î ¿Å±â±â</title>
-
- <p>(<a href="#name">À̸§±â¹Ý</a>ÀÇ Ã¹¹ø° ¿¹¿¡¼­) È£½ºÆ®¸í
- <code>www.example2.org</code>¿¡ ´ëÇÑ À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â
- ÀÚ½ÅÀÇ IP ÁÖ¼Ò¸¦ °¡Á®¾ß ÇÑ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ ÀÌÀü
- IP ÁÖ¼Ò¸¦ ij½ÌÇÏ´Â ³×ÀÓ¼­¹ö³ª ÇÁ·Ï½Ã¿ÍÀÇ ¹®Á¦¸¦ ÇÇÇϱâÀ§ÇØ
- ¿Å±â´Â µ¿¾È µÑ ¸ðµÎ¸¦ ¼­ºñ½ºÇÏ°í ½Í´Ù.<br /> ¹æ¹ýÀº
- <code>VirtualHost</code> Áö½Ã¾î¿¡ »õ IP ÁÖ¼Ò¸¸À»
- (<code>172.20.30.50</code>) Ãß°¡ÇϸéµÇ¹Ç·Î ½±´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- Listen 80<br />
- ServerName www.example1.com<br />
- DocumentRoot /www/example1<br />
- <br />
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40 172.20.30.50&gt;<br />
- <indent>
- DocumentRoot /www/example2<br />
- ServerName www.example2.org<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/example3<br />
- ServerName www.example3.net<br />
- ServerAlias *.example3.net<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p>ÀÌÁ¦ (IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ÅëÇÑ) »õ·Î¿î ÁÖ¼Ò¿Í (À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¸¦ ÅëÇÑ) ÀÌÀü ÁÖ¼Ò ¸ðµÎ °¡»óÈ£½ºÆ®¿¡ Á¢±ÙÇÒ
- ¼ö ÀÖ´Ù.</p>
-
- </section>
-
- <section id="serverpath"><title><code>ServerPath</code>
- Áö½Ã¾î »ç¿ëÇϱâ</title>
-
- <p>µÎ À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ °¡Áø ¼­¹ö°¡ ÀÖ´Ù. ¿Ã¹Ù¸¥
- °¡»óÈ£½ºÆ®¸¦ ¼±ÅÃÇϱâÀ§ÇØ Å¬¶óÀ̾ðÆ®´Â ¿Ã¹Ù¸¥
- <code>Host:</code> Çì´õ¸¦ º¸³»¾ß ÇÑ´Ù. ¿À·¡µÈ HTTP/1.0
- Ŭ¶óÀ̾ðÆ®°¡ ÀÌ Çì´õ¸¦ º¸³»Áö ¸øÇÏ¸é ¾ÆÆÄÄ¡´Â Ŭ¶óÀ̾ðÆ®°¡
- ¾î¶² °¡»óÈ£½ºÆ®¸¦ º¸·Á°íÇÏ´ÂÁö ¾Ë ¼ö ¾ø´Ù (±×·¡¼­ ÃÖÃÊÀÇ
- °¡»óÈ£½ºÆ®°¡ ¿äûÀ» ¼­ºñ½ºÇÑ´Ù). ¿À·¡µÈ ºê¶ó¿ìÀú¿Í °¡´ÉÇÑ È£È¯À»
- À¯ÁöÇϱâÀ§ÇØ ÃÖÃÊÀÇ °¡»óÈ£½ºÆ®¸¦ ¸¸µé°í, ¿©±â¿¡ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®ÀÇ URL Á¢µÎ»ç¸¦ Æ÷ÇÔÇÏ´Â ¸µÅ© ¸ñ·Ï ÆäÀÌÁö¸¦
- µÐ´Ù.</p>
-
- <example>
- <title>¼­¹ö ¼³Á¤</title>
-
- NameVirtualHost 172.20.30.40<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- # primary vhost<br />
- DocumentRoot /www/subdomain<br />
- RewriteEngine On<br />
- RewriteRule ^/.* /www/subdomain/index.html<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- DocumentRoot /www/subdomain/sub1<br />
- <indent>
- ServerName www.sub1.domain.tld<br />
- ServerPath /sub1/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub1/.*) /www/subdomain$1<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost 172.20.30.40&gt;<br />
- <indent>
- DocumentRoot /www/subdomain/sub2<br />
- ServerName www.sub2.domain.tld<br />
- ServerPath /sub2/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub2/.*) /www/subdomain$1<br />
- # ...<br />
- </indent>
- &lt;/VirtualHost&gt;
- </example>
-
- <p><directive module="core">ServerPath</directive> Áö½Ã¾î¶§¹®¿¡
- URL <code>http://www.sub1.domain.tld/sub1/</code>¿¡ ´ëÇÑ
- ¿äûÀº <em>Ç×»ó</em> subl-°¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÑ´Ù.<br />
- Ŭ¶óÀ̾ðÆ®°¡ ¿Ã¹Ù¸¥ <code>Host:</code> Çì´õ¸¦ º¸³½´Ù¸é,
- URL <code>http://www.sub1.domain.tld/</code>¿¡ ´ëÇÑ ¿äûÀº
- subl-°¡»óÈ£½ºÆ®¿¡¼­¸¸ ¼­ºñ½ºÇÑ´Ù. ¸¸¾à <code>Host:</code> Çì´õ¸¦
- º¸³»Áö¾ÊÀ¸¸é Ŭ¶óÀ̾ðÆ®´Â ÃÖÃÊÀÇ È£½ºÆ®¿¡ ÀÖ´Â Á¤º¸ÆäÀÌÁö¸¦
- º¸°ÔµÈ´Ù.<br /> ¿©±â¿¡ ¹®Á¦°¡ ÀÖÀ½À» ÁÖÀÇÇ϶ó: Ŭ¶óÀ̾ðÆ®°¡
- <code>Host:</code> Çì´õ¸¦ º¸³»Áö¾ÊÀ¸¸é
- <code>http://www.sub2.domain.tld/sub1/</code>¿¡ ´ëÇÑ ¿äûµµ
- subl-°¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÑ´Ù.<br />
- <directive module="mod_rewrite">RewriteRule</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¿Ã¹Ù¸¥ <code>Host:</code> Çì´õ¸¦ º¸³»´Â
- Ŭ¶óÀ̾ðÆ®´Â (<em>¿¹¸¦ µé¾î</em>, URL ÀüÄ¡»ç°¡ Àְųª ¾ø´Â)
- µÎ URLÀ» ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- </section>
-
-</manualpage>
diff --git a/docs/manual/vhosts/examples.xml.meta b/docs/manual/vhosts/examples.xml.meta
deleted file mode 100644
index dafab07f68..0000000000
--- a/docs/manual/vhosts/examples.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>examples</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/fd-limits.html b/docs/manual/vhosts/fd-limits.html
deleted file mode 100644
index d3a03abdd8..0000000000
--- a/docs/manual/vhosts/fd-limits.html
+++ /dev/null
@@ -1,11 +0,0 @@
-URI: fd-limits.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: fd-limits.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: fd-limits.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/fd-limits.html.en b/docs/manual/vhosts/fd-limits.html.en
deleted file mode 100644
index 7ce033115e..0000000000
--- a/docs/manual/vhosts/fd-limits.html.en
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>File Descriptor Limits - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>File Descriptor Limits</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/vhosts/fd-limits.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/fd-limits.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/fd-limits.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>When using a large number of Virtual Hosts, Apache may run
- out of available file descriptors (sometimes called <cite>file
- handles</cite>) if each Virtual Host specifies different log
- files. The total number of file descriptors used by Apache is
- one for each distinct error log file, one for every other log
- file directive, plus 10-20 for internal use. Unix operating
- systems limit the number of file descriptors that may be used
- by a process; the limit is typically 64, and may usually be
- increased up to a large hard-limit.</p>
-
- <p>Although Apache attempts to increase the limit as required,
- this may not work if:</p>
-
- <ol>
- <li>Your system does not provide the <code>setrlimit()</code>
- system call.</li>
-
- <li>The <code>setrlimit(RLIMIT_NOFILE)</code> call does not
- function on your system (such as Solaris 2.3)</li>
-
- <li>The number of file descriptors required exceeds the hard
- limit.</li>
-
- <li>Your system imposes other limits on file descriptors,
- such as a limit on stdio streams only using file descriptors
- below 256. (Solaris 2)</li>
- </ol>
-
- <p>In the event of problems you can:</p>
-
- <ul>
- <li>Reduce the number of log files; don't specify log files
- in the <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- sections, but only log to the main log files. (See <a href="#splitlogs">Splitting up your log files</a>, below, for more
- information on doing this.)</li>
-
- <li>
- If you system falls into 1 or 2 (above), then increase the
- file descriptor limit before starting Apache, using a
- script like
-
- <div class="example"><p><code>
- <code>#!/bin/sh<br />
- ulimit -S -n 100<br />
- exec httpd</code>
- </code></p></div>
- </li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="splitlogs" id="splitlogs">Splitting up your log files</a></h2>
-
-<p>If you want to log multiple virtual hosts to the same log file, you
-may want to split up the log files afterwards in order to run
-statistical analysis of the various virtual hosts. This can be
-accomplished in the following manner.</p>
-
-<p>First, you will need to add the virtual host information to the log
-entries. This can be done using the <code class="directive"><a href="../mod/mod_log_config.html#&#10;logformat">
-LogFormat</a></code>
-directive, and the <code>%v</code> variable. Add this to the beginning
-of your log format string:</p>
-
-<div class="example"><p><code>
-LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
-CustomLog logs/multiple_vhost_log vhost
-</code></p></div>
-
-<p>This will create a log file in the common log format, but with the
-canonical virtual host (whatever appears in the
-<code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> directive) prepended to
-each line. (See <code class="directive"><a href="../mod/mod_log_config.html#custom log formats">Custom Log Formats</a></code> for
-more about customizing your log files.)</p>
-
-<p>When you wish to split your log file into its component parts (one
-file per virtual host) you can use the program <code><a href="../programs/other.html">split-logfile</a></code> to accomplish
-this. You'll find this program in the <code>support</code> directory
-of the Apache distribution.</p>
-
-<p>Run this program with the command:</p>
-
-<div class="example"><p><code>
-split-logfile &lt; /logs/multiple_vhost_log
-</code></p></div>
-
-<p>This program, when run with the name of your vhost log file, will
-generate one file for each virtual host that appears in your log file.
-Each file will be called <code>hostname.log</code>.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/vhosts/fd-limits.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/fd-limits.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/fd-limits.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/fd-limits.html.ja.euc-jp b/docs/manual/vhosts/fd-limits.html.ja.euc-jp
deleted file mode 100644
index 6a3c18709d..0000000000
--- a/docs/manual/vhosts/fd-limits.html.ja.euc-jp
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¸Â³¦ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></div><div id="page-content"><div id="preamble"><h1>¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¸Â³¦</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/vhosts/fd-limits.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/fd-limits.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/fd-limits.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>¤¿¤¯¤µ¤ó¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò±¿ÍѤ¹¤ë¾ì¹ç¡¢¤â¤·¡¢
- ³Æ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤´¤È¤Ë°Û¤Ê¤ë¥í¥°¥Õ¥¡¥¤¥ë¤¬»ØÄꤷ¤Æ¤¢¤ë¤È¡¢
- Apache ¤¬¥Õ¥¡¥¤¥ëµ­½Ò»Ò (<cite>¥Õ¥¡¥¤¥ë¥Ï¥ó¥É¥ë</cite>¤È¤â¸Æ¤Ð¤ì¤Þ¤¹)
- ¤ò»È¤¤ÀڤäƤ·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£Apache ¤¬»ÈÍѤ¹¤ë¥Õ¥¡¥¤¥ë
- µ­½Ò»Ò¤Î¿ô¤Ï¡¢³Æ¥¨¥é¡¼¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤Ä¤­ 1 ¤Ä¡¢Â¾¤Î¥í¥°¥Õ¥¡¥¤¥ë¤Î
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¤Ä¤­ 1 ¤Ä¡¢¤µ¤é¤ËÆâÉô¤Ç»ÈÍѤ¹¤ë 10 ¤«¤é 20¡¢
- ¤Î¹ç·×¤Ë¤Ê¤ê¤Þ¤¹¡£Unix ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¤Ï¥×¥í¥»¥¹¤´¤È¤Ë
- »ÈÍѲÄǽ¤Ê¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¿ô¤òÀ©¸Â¤·¤Æ¤¤¤Þ¤¹¡£¤¿¤¤¤Æ¤¤¤Î¾ì¹ç¤Ï 64 ¤Ç¡¢
- ÉáÄ̤ÏÂ礭¤ÊÃͤΥϡ¼¥É¥ê¥ß¥Ã¥È¤Þ¤ÇÁý¤ä¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</p>
-
- <p>Apache ¤ÏɬÍפ˱þ¤¸¤Æ¾å¸Â¤ò³ÈÂ礷¤è¤¦¤È»î¤ß¤Þ¤¹¤¬¡¢
- °Ê²¼¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£</p>
-
- <ol>
- <li>ÍøÍѤ·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç <code>setrlimit()</code>
- ¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬Ä󶡤µ¤ì¤Æ¤¤¤Ê¤¤¡£</li>
-
- <li>¥·¥¹¥Æ¥à¾å¤Ç <code>setrlimit</code>(RLIMIT_NOFILE) ¤¬Æ°ºî¤·¤Ê¤¤
- (¤¿¤È¤¨¤Ð Solaris 2.3 ¤Î¤è¤¦¤Ë)¡£</li>
-
- <li>Í׵ᤵ¤ì¤ë¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¿ô¤¬
- ¥Ï¡¼¥É¥ê¥ß¥Ã¥È¤òĶ¤¨¤Æ¤·¤Þ¤¦¡£</li>
-
- <li>¥·¥¹¥Æ¥à¤Ë¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Ë´Ø¤·¤ÆÊ̤ÎÀ©¸Â¤¬Â¸ºß¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤ë¡£
- ¤¿¤È¤¨¤Ð¡¢stdio ¥¹¥È¥ê¡¼¥à¤Ç¤Ï¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤ò 256 °Ê¾å»È¤¨¤Ê¤¤
- (Solaris 2)¡¢¤Ê¤É¡£</li>
- </ol>
-
- <p>ÌäÂ꤬ȯÀ¸¤·¤¿»þ¤Ë¼è¤êÆÀ¤ëÂнèÊýË¡¤Ï¼¡¤Î¤È¤ª¤ê:</p>
-
- <ul>
- <li>¥í¥°¥Õ¥¡¥¤¥ë¤Î¿ô¤ò¸º¤é¤¹¡£<code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤Ç¥í¥°¥Õ¥¡¥¤¥ë¤ò»ØÄꤻ¤º¡¢¥á¥¤¥ó¤Î¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤Î¤ßµ­Ï¿¤¹¤ë¡£
- (¤³¤ì¤Ë´Ø¤¹¤ë¾Ü¤·¤¤¾ðÊó¤Ï°Ê²¼¤Î<a href="#splitlogs">¥í¥°¥Õ¥¡¥¤¥ë¤Îʬ³ä</a>¤òÆɤó¤Ç¤¯¤À¤µ¤¤¡£)</li>
-
- <li>
- ¤â¤·¡¢Á°½Ò¤Î 1 ¤Þ¤¿¤Ï 2 ¤Î¾ì¹ç¤Ç¤¢¤ì¤Ð¡¢
- Apache ¤òµ¯Æ°¤¹¤ëÁ°¤Ë¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤òÁý¤ä¤·¤Þ¤¹¡£
- ¤¿¤È¤¨¤Ð¼¡¤Î¤è¤¦¤Ê¥¹¥¯¥ê¥×¥È¤ò»È¤¤¤Þ¤¹¡£
-
- <div class="example"><p><code>
- <code>#!/bin/sh<br />
- ulimit -S -n 100<br />
- exec httpd</code>
- </code></p></div>
- </li>
- </ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="splitlogs" id="splitlogs">¥í¥°¥Õ¥¡¥¤¥ë¤Îʬ³ä</a></h2>
-
-<p>Ê£¿ô¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥í¥°¤òƱ¤¸¥í¥°¥Õ¥¡¥¤¥ë¤Ë¼ý½¸¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤È¤­¤Ë¤Ï¡¢
-³Æ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¤Ä¤¤¤ÆÅý·×Ū¤Ê²òÀϤò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë¸å¤Ç¥í¥°¥Õ¥¡¥¤¥ë¤ò
-ʬ³ä¤·¤¿¤¯¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤³¤ì¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¼Â¸½¤Ç¤­¤Þ¤¹¡£</p>
-
-<p>¤Þ¤º¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¾ðÊó¤ò¥í¥°¤Î¥¨¥ó¥È¥ê¤ËÄɲ乤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
-¤³¤ì¤Ï <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î <code>%v</code> ÊÑ¿ô¤ò»È¤¦¤³¤È¤Ç¤Ç¤­¤Þ¤¹¡£
-¤³¤ì¤ò¥í¥°¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ÎÀèƬ¤ËÄɲä·¤Þ¤¹:</p>
-
-<div class="example"><p><code>
-LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
-CustomLog logs/multiple_vhost_log vhost
-</code></p></div>
-
-<p>¤³¤ì¤Ï common log format ¤Î¥í¥°¤òºîÀ®¤·¤Þ¤¹¤¬¡¢¤½¤ì¤¾¤ì¤Î¹Ô¤ÎÀèƬ¤Ë
-Àµµ¬²½¤µ¤ì¤¿¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î̾Á°
-(<code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>
-¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¤â¤Î) ¤¬Éղ䵤ì¤Þ¤¹¡£
-(¥í¥°¥Õ¥¡¥¤¥ë¤Î¥«¥¹¥¿¥Þ¥¤¥º¤Î¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï <a href="../mod/mod_log_config.html#formats">Custom Log Formats</a> ¤ò
-Æɤó¤Ç¤¯¤À¤µ¤¤¡£)</p>
-
-<p>¥í¥°¥Õ¥¡¥¤¥ë¤ò³ÆÉôʬ (¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈËè¤Ë 1 ¥Õ¥¡¥¤¥ë) ¤Ëʬ¤±¤¿¤¤¤È¤­¤Ï¡¢
-<code><a href="../programs/other.html">split-logfile</a></code>
-¤ò»È¤Ã¤Æ¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥×¥í¥°¥é¥à¤Ï Apache ÇÛÉÛ¤Î
-<code>support</code> ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ê¤Þ¤¹¡£</p>
-
-<p>°Ê²¼¤Î¤è¤¦¤Ê¥³¥Þ¥ó¥É¤Ç¤³¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Þ¤¹:</p>
-
-<div class="example"><p><code>
-split-logfile &lt; /logs/multiple_vhost_log
-</code></p></div>
-
-<p>¤³¤Î¥×¥í¥°¥é¥à¤Ï¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥í¥°¥Õ¥¡¥¤¥ë¤Î̾Á°¤È¤È¤â¤Ë¼Â¹Ô¤µ¤ì¡¢
-¥í¥°¥Õ¥¡¥¤¥ë¤Ë¸½¤ì¤ë¤½¤ì¤¾¤ì¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈËè¤Ë°ì¤Ä¤Î¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤¹¡£
-¤½¤ì¤¾¤ì¤Î¥Õ¥¡¥¤¥ë¤Ï <code>¥Û¥¹¥È̾.log</code> ¤È¤¤¤¦Ì¾Á°¤Ë¤Ê¤ê¤Þ¤¹¡£</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/vhosts/fd-limits.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/fd-limits.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/fd-limits.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/fd-limits.html.ko.euc-kr b/docs/manual/vhosts/fd-limits.html.ko.euc-kr
deleted file mode 100644
index 451f0d870e..0000000000
--- a/docs/manual/vhosts/fd-limits.html.ko.euc-kr
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>ÆÄÀϱâ¼úÀÚ(file descriptor) ÇÑ°è - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">°¡»óÈ£½ºÆ®</a></div><div id="page-content"><div id="preamble"><h1>ÆÄÀϱâ¼úÀÚ(file descriptor) ÇÑ°è</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/fd-limits.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/fd-limits.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/fd-limits.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>°¡»óÈ£½ºÆ®¸¦ ¸¹ÀÌ »ç¿ëÇÏ°í °¢ °¡»óÈ£½ºÆ®¿¡ ¼­·Î ´Ù¸¥
- ·Î±×ÆÄÀÏÀ» ÁöÁ¤Çϸé, ¾ÆÆÄÄ¡°¡ »ç¿ë°¡´ÉÇÑ ÆÄÀϱâ¼úÀÚ(file
- descriptor, ÈçÈ÷ <cite>ÆÄÀÏÇÚµé(file handle)</cite>À̶ó°í
- ºÎ¸§)¸¦ ´Ù ½á¹ö¸± ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ÆÄÀϱâ¼úÀÚÀÇ
- ÃÑ °³¼ö´Â ¿À·ù ·Î±×ÆÄÀÏ´ç ÇÑ°³, ´Ù¸¥ ·Î±×ÆÄÀÏ Áö½Ã¾î´ç
- ÇÑ°³, Ãß°¡·Î ³»ºÎ¿ëµµ·Î 10-20°³¸¦ ´õÇÑ ¼ö´Ù. À¯´Ð½º ¿î¿µÃ¼Á¦´Â
- ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÄÀϱâ¼úÀÚ °³¼ö¸¦ Á¦ÇÑÇÑ´Ù. ÀÌ ÇÑ°è´Â
- º¸Åë 64°³·Î, º¸Åë À̺¸´Ù Å« hard-limit±îÁö ´Ã¸± ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â ÀÌ ÇѰ踦 ÇÊ¿äÇѸ¸Å­ ´Ã¸®·Á°í ÇÏÁö¸¸, ½ÇÆÐÇÏ´Â
- °æ¿ì°¡ ÀÖ´Ù:</p>
-
- <ol>
- <li>½Ã½ºÅÛÀÌ <code>setrlimit()</code> ½Ã½ºÅÛÈ£ÃâÀ»
- Á¦°øÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li>(Solaris 2.3°ú °°ÀÌ) ½Ã½ºÅÛ¿¡¼­
- <code>setrlimit(RLIMIT_NOFILE)</code> ÇÔ¼ö°¡ µ¿ÀÛÇÏÁö
- ¾Ê´Â´Ù.</li>
-
- <li>ÇÊ¿äÇÑ ÆÄÀϱâ¼úÀÚ °³¼ö°¡ hard limit º¸´Ù ¸¹´Ù.</li>
-
- <li>(Solaris 2) ½Ã½ºÅÛÀÌ stdio ½ºÆ®¸²À» 256ÀÌÇÏÀÇ
- ÆÄÀϱâ¼úÀÚ¸¸À» »ç¿ëÇϵµ·Ï Á¦ÇÑÇÏ´Â µî ÆÄÀϱâ¼úÀÚ¿¡
- Á¦¾àÀ» °¡ÇÑ´Ù.</li>
- </ol>
-
- <p>ÀÌ °æ¿ì ÇØ°áÃ¥Àº:</p>
-
- <ul>
- <li>·Î±×ÆÄÀÏ °³¼ö¸¦ ÁÙÀδÙ. <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¼½¼Ç¿¡¼­ ·Î±×ÆÄÀÏÀ»
- ÁöÁ¤ÇÏÁö ¾Ê°í ÁÖ ·Î±×ÆÄÀÏÀ» »ç¿ëÇÑ´Ù. (´õ ÀÚ¼¼ÇÑ ¹æ¹ýÀº
- ¾Æ·¡ <a href="#splitlogs">·Î±×ÆÄÀÏ ³ª´©±â</a>¸¦ Âü°íÇ϶ó.)</li>
-
- <li>
- »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÌ (À§ÀÇ) 1¹ø°³ª 2¹ø° °æ¿ì¿¡ ÇØ´çÇÑ´Ù¸é,
- ´ÙÀ½°ú °°Àº ½ºÅ©¸³Æ®·Î ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϱâ Àü¿¡ ÆÄÀϱâ¼úÀÚ
- ÇѰ踦 ´Ã¸°´Ù.
-
- <div class="example"><p><code>
- <code>#!/bin/sh<br />
- ulimit -S -n 100<br />
- exec httpd</code>
- </code></p></div>
- </li>
- </ul>
-
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="splitlogs" id="splitlogs">·Î±×ÆÄÀÏ ³ª´©±â</a></h2>
-
-<p>¿©·¯ °¡»óÈ£½ºÆ®°¡ °°Àº ·Î±×ÆÄÀÏÀ» »ç¿ëÇÑ´Ù¸é ³ªÁß¿¡ °¢
-°¡»óÈ£½ºÆ®ÀÇ Åë°èºÐ¼®À» À§ÇØ ·Î±×ÆÄÀÏÀ» ³ª´©°í ½ÍÀ» °ÍÀÌ´Ù.
-ÀÌ ÀÛ¾÷Àº ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù.</p>
-
-<p>¸ÕÀú ·Î±× Ç׸ñ¿¡ °¡»óÈ£½ºÆ® Á¤º¸¸¦ Ãß°¡ÇÑ´Ù. À̸¦ À§ÇØ
-<code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code>
-Áö½Ã¾î¿Í <code>%v</code> º¯¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ º¯¼ö¸¦ ·Î±×
-Çü½Ä¹®ÀÚ¿­ ¾Õ¿¡ Ãß°¡ÇÑ´Ù:</p>
-
-<div class="example"><p><code>
-LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
-CustomLog logs/multiple_vhost_log vhost
-</code></p></div>
-
-<p>±×·¯¸é common ·Î±×Çü½Ä ¾Õ¿¡ (<code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> Áö½Ã¾î¿¡ ³ª¿À´Â) Á¤±Ô
-°¡»óÈ£½ºÆ®¸¦ Æ÷ÇÔÇÏ¿© ·Î±×ÆÄÀÏÀ» ±â·ÏÇÑ´Ù. (·Î±×ÆÄÀÏ
-»ç¿ëÀÚÁ¤ÀÇ¿¡ °üÇÑ ³»¿ëÀº <code class="directive"><a href="../mod/mod_log_config.html#»ç¿ëÀÚÁ¤ÀÇ ·Î±×Çü½Ä">»ç¿ëÀÚÁ¤ÀÇ ·Î±×Çü½Ä</a></code>À»
-Âü°íÇ϶ó.)</p>
-
-<p>·Î±×ÆÄÀÏÀ» (°¡»óÈ£½ºÆ®´ç ÇÑ ÆÄÀϾ¿) ³ª´©°í ½Í´Ù¸é <code><a href="../programs/other.html">split-logfile</a></code> ÇÁ·Î±×·¥À»
-»ç¿ëÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾ÆÆÄÄ¡ ¹èÆ÷º»ÀÇ <code>support</code>
-µð·ºÅ丮¿¡ ÀÖ´Ù.</p>
-
-<p>´ÙÀ½°ú °°ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù:</p>
-
-<div class="example"><p><code>
-split-logfile &lt; /logs/multiple_vhost_log
-</code></p></div>
-
-<p>°¡»óÈ£½ºÆ® ·Î±×ÆÄÀÏÀ» °¡Áö°í ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ·Î±×ÆÄÀÏ¿¡
-³ª¿À´Â °¢ °¡»óÈ£½ºÆ®´ç ÆÄÀÏÀ» Çϳª¾¿ ¸¸µç´Ù. °¢°¢ÀÇ ÆÄÀϸíÀº
-<code>hostname.log</code>ÀÌ´Ù.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/fd-limits.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/fd-limits.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/fd-limits.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/fd-limits.xml b/docs/manual/vhosts/fd-limits.xml
deleted file mode 100644
index c2602a0369..0000000000
--- a/docs/manual/vhosts/fd-limits.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.11 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="fd-limits.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
- <title>File Descriptor Limits</title>
-
-<summary>
-
- <p>When using a large number of Virtual Hosts, Apache may run
- out of available file descriptors (sometimes called <cite>file
- handles</cite>) if each Virtual Host specifies different log
- files. The total number of file descriptors used by Apache is
- one for each distinct error log file, one for every other log
- file directive, plus 10-20 for internal use. Unix operating
- systems limit the number of file descriptors that may be used
- by a process; the limit is typically 64, and may usually be
- increased up to a large hard-limit.</p>
-
- <p>Although Apache attempts to increase the limit as required,
- this may not work if:</p>
-
- <ol>
- <li>Your system does not provide the <code>setrlimit()</code>
- system call.</li>
-
- <li>The <code>setrlimit(RLIMIT_NOFILE)</code> call does not
- function on your system (such as Solaris 2.3)</li>
-
- <li>The number of file descriptors required exceeds the hard
- limit.</li>
-
- <li>Your system imposes other limits on file descriptors,
- such as a limit on stdio streams only using file descriptors
- below 256. (Solaris 2)</li>
- </ol>
-
- <p>In the event of problems you can:</p>
-
- <ul>
- <li>Reduce the number of log files; don't specify log files
- in the <directive type="section" module="core">VirtualHost</directive>
- sections, but only log to the main log files. (See <a
- href="#splitlogs">Splitting up your log files</a>, below, for more
- information on doing this.)</li>
-
- <li>
- If you system falls into 1 or 2 (above), then increase the
- file descriptor limit before starting Apache, using a
- script like
-
- <example>
- <code>#!/bin/sh<br />
- ulimit -S -n 100<br />
- exec httpd</code>
- </example>
- </li>
- </ul>
-
-</summary>
-
-<section id="splitlogs"><title>Splitting up your log files</title>
-
-<p>If you want to log multiple virtual hosts to the same log file, you
-may want to split up the log files afterwards in order to run
-statistical analysis of the various virtual hosts. This can be
-accomplished in the following manner.</p>
-
-<p>First, you will need to add the virtual host information to the log
-entries. This can be done using the <directive module="mod_log_config">
-LogFormat</directive>
-directive, and the <code>%v</code> variable. Add this to the beginning
-of your log format string:</p>
-
-<example>
-LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
-CustomLog logs/multiple_vhost_log vhost
-</example>
-
-<p>This will create a log file in the common log format, but with the
-canonical virtual host (whatever appears in the
-<directive module="core">ServerName</directive> directive) prepended to
-each line. (See <directive
-module="mod_log_config">Custom Log Formats</directive> for
-more about customizing your log files.)</p>
-
-<p>When you wish to split your log file into its component parts (one
-file per virtual host) you can use the program <code><a
-href="../programs/other.html">split-logfile</a></code> to accomplish
-this. You'll find this program in the <code>support</code> directory
-of the Apache distribution.</p>
-
-<p>Run this program with the command:</p>
-
-<example>
-split-logfile &lt; /logs/multiple_vhost_log
-</example>
-
-<p>This program, when run with the name of your vhost log file, will
-generate one file for each virtual host that appears in your log file.
-Each file will be called <code>hostname.log</code>.</p>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/vhosts/fd-limits.xml.ja b/docs/manual/vhosts/fd-limits.xml.ja
deleted file mode 100644
index 272256e1f4..0000000000
--- a/docs/manual/vhosts/fd-limits.xml.ja
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="fd-limits.xml.meta">
-<parentdocument href="./">$B%P!<%A%c%k%[%9%H(B</parentdocument>
- <title>$B%U%!%$%k5-=R;R$N8B3&(B</title>
-
-<summary>
-
- <p>$B$?$/$5$s$N%P!<%A%c%k%[%9%H$r1?MQ$9$k>l9g!"$b$7!"(B
- $B3F%P!<%A%c%k%[%9%H$4$H$K0[$J$k%m%0%U%!%$%k$,;XDj$7$F$"$k$H!"(B
- Apache $B$,%U%!%$%k5-=R;R(B (<cite>$B%U%!%$%k%O%s%I%k(B</cite>$B$H$b8F$P$l$^$9(B)
- $B$r;H$$@Z$C$F$7$^$&$3$H$,$"$j$^$9!#(BApache $B$,;HMQ$9$k%U%!%$%k(B
- $B5-=R;R$N?t$O!"3F%(%i!<%m%0%U%!%$%k$K$D$-(B 1 $B$D!"B>$N%m%0%U%!%$%k$N(B
- $B%G%#%l%/%F%#%V$K$D$-(B 1 $B$D!"$5$i$KFbIt$G;HMQ$9$k(B 10 $B$+$i(B 20$B!"(B
- $B$N9g7W$K$J$j$^$9!#(BUnix $B%*%Z%l!<%F%#%s%0%7%9%F%`$G$O%W%m%;%9$4$H$K(B
- $B;HMQ2DG=$J%U%!%$%k5-=R;R$N?t$r@)8B$7$F$$$^$9!#$?$$$F$$$N>l9g$O(B 64 $B$G!"(B
- $BIaDL$OBg$-$JCM$N%O!<%I%j%_%C%H$^$GA}$d$9$3$H$,$G$-$^$9!#(B</p>
-
- <p>Apache $B$OI,MW$K1~$8$F>e8B$r3HBg$7$h$&$H;n$_$^$9$,!"(B
- $B0J2<$N$h$&$J>l9g$K$O$&$^$/$$$+$J$$$+$b$7$l$^$;$s!#(B</p>
-
- <ol>
- <li>$BMxMQ$7$F$$$k%7%9%F%`$G(B <code>setrlimit()</code>
- $B%7%9%F%`%3!<%k$,Ds6!$5$l$F$$$J$$!#(B</li>
-
- <li>$B%7%9%F%`>e$G(B <code>setrlimit</code>(RLIMIT_NOFILE) $B$,F0:n$7$J$$(B
- ($B$?$H$($P(B Solaris 2.3 $B$N$h$&$K(B)$B!#(B</li>
-
- <li>$BMW5a$5$l$k%U%!%$%k5-=R;R$N?t$,(B
- $B%O!<%I%j%_%C%H$rD6$($F$7$^$&!#(B</li>
-
- <li>$B%7%9%F%`$K%U%!%$%k5-=R;R$K4X$7$FJL$N@)8B$,B8:_$7$F$7$^$C$F$$$k!#(B
- $B$?$H$($P!"(Bstdio $B%9%H%j!<%`$G$O%U%!%$%k5-=R;R$r(B 256 $B0J>e;H$($J$$(B
- (Solaris 2)$B!"$J$I!#(B</li>
- </ol>
-
- <p>$BLdBj$,H/@8$7$?;~$K<h$jF@$kBP=hJ}K!$O<!$N$H$*$j(B:</p>
-
- <ul>
- <li>$B%m%0%U%!%$%k$N?t$r8:$i$9!#(B<directive type="section"
- module="core">VirtualHost</directive>
- $B%;%/%7%g%s$G%m%0%U%!%$%k$r;XDj$;$:!"%a%$%s$N%m%0%U%!%$%k$K$N$_5-O?$9$k!#(B
- ($B$3$l$K4X$9$k>\$7$$>pJs$O0J2<$N(B<a
- href="#splitlogs">$B%m%0%U%!%$%k$NJ,3d(B</a>$B$rFI$s$G$/$@$5$$!#(B)</li>
-
- <li>
- $B$b$7!"A0=R$N(B 1 $B$^$?$O(B 2 $B$N>l9g$G$"$l$P!"(B
- Apache $B$r5/F0$9$kA0$K%U%!%$%k5-=R;R$rA}$d$7$^$9!#(B
- $B$?$H$($P<!$N$h$&$J%9%/%j%W%H$r;H$$$^$9!#(B
-
- <example>
- <code>#!/bin/sh<br />
- ulimit -S -n 100<br />
- exec httpd</code>
- </example>
- </li>
- </ul>
-</summary>
-
-<section id="splitlogs"><title>$B%m%0%U%!%$%k$NJ,3d(B</title>
-
-<p>$BJ#?t$N%P!<%A%c%k%[%9%H$N%m%0$rF1$8%m%0%U%!%$%k$K<}=8$7$h$&$H$7$F$$$k$H$-$K$O!"(B
-$B3F%P!<%A%c%k%[%9%H$K$D$$$FE}7WE*$J2r@O$r<B9T$9$k$?$a$K8e$G%m%0%U%!%$%k$r(B
-$BJ,3d$7$?$/$J$k$+$b$7$l$^$;$s!#$3$l$O0J2<$N$h$&$K$7$F<B8=$G$-$^$9!#(B</p>
-
-<p>$B$^$:!"%P!<%A%c%k%[%9%H$N>pJs$r%m%0$N%(%s%H%j$KDI2C$9$kI,MW$,$"$j$^$9!#(B
-$B$3$l$O(B <directive module="mod_log_config">LogFormat</directive>
-$B%G%#%l%/%F%#%V$N(B <code>%v</code> $BJQ?t$r;H$&$3$H$G$G$-$^$9!#(B
-$B$3$l$r%m%0$N%U%)!<%^%C%HJ8;zNs$N@hF,$KDI2C$7$^$9(B:</p>
-
-<example>
-LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
-CustomLog logs/multiple_vhost_log vhost
-</example>
-
-<p>$B$3$l$O(B common log format $B$N%m%0$r:n@.$7$^$9$,!"$=$l$>$l$N9T$N@hF,$K(B
-$B@55,2=$5$l$?%P!<%A%c%k%[%9%H$NL>A0(B
-(<directive module="core">ServerName</directive>
-$B%G%#%l%/%F%#%V$K=q$+$l$F$$$k$b$N(B) $B$,IU2C$5$l$^$9!#(B
-($B%m%0%U%!%$%k$N%+%9%?%^%$%:$N>\:Y$K$D$$$F$O(B <a
-href="../mod/mod_log_config.html#formats">Custom Log Formats</a> $B$r(B
-$BFI$s$G$/$@$5$$!#(B)</p>
-
-<p>$B%m%0%U%!%$%k$r3FItJ,(B ($B%P!<%A%c%k%[%9%HKh$K(B 1 $B%U%!%$%k(B) $B$KJ,$1$?$$$H$-$O!"(B
-<code><a href="../programs/other.html">split-logfile</a></code>
-$B$r;H$C$F9T$J$&$3$H$,$G$-$^$9!#%W%m%0%i%`$O(B Apache $BG[I[$N(B
-<code>support</code> $B%G%#%l%/%H%j$K$"$j$^$9!#(B</p>
-
-<p>$B0J2<$N$h$&$J%3%^%s%I$G$3$N%W%m%0%i%`$r<B9T$7$^$9(B:</p>
-
-<example>
-split-logfile &lt; /logs/multiple_vhost_log
-</example>
-
-<p>$B$3$N%W%m%0%i%`$O%P!<%A%c%k%[%9%H$N%m%0%U%!%$%k$NL>A0$H$H$b$K<B9T$5$l!"(B
-$B%m%0%U%!%$%k$K8=$l$k$=$l$>$l$N%P!<%A%c%k%[%9%HKh$K0l$D$N%U%!%$%k$r:n@.$7$^$9!#(B
-$B$=$l$>$l$N%U%!%$%k$O(B <code>$B%[%9%HL>(B.log</code> $B$H$$$&L>A0$K$J$j$^$9!#(B</p>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/vhosts/fd-limits.xml.ko b/docs/manual/vhosts/fd-limits.xml.ko
deleted file mode 100644
index 1a0db04c32..0000000000
--- a/docs/manual/vhosts/fd-limits.xml.ko
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.11 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="fd-limits.xml.meta">
-<parentdocument href="./">°¡»óÈ£½ºÆ®</parentdocument>
- <title>ÆÄÀϱâ¼úÀÚ(file descriptor) ÇÑ°è</title>
-
-<summary>
-
- <p>°¡»óÈ£½ºÆ®¸¦ ¸¹ÀÌ »ç¿ëÇÏ°í °¢ °¡»óÈ£½ºÆ®¿¡ ¼­·Î ´Ù¸¥
- ·Î±×ÆÄÀÏÀ» ÁöÁ¤Çϸé, ¾ÆÆÄÄ¡°¡ »ç¿ë°¡´ÉÇÑ ÆÄÀϱâ¼úÀÚ(file
- descriptor, ÈçÈ÷ <cite>ÆÄÀÏÇÚµé(file handle)</cite>À̶ó°í
- ºÎ¸§)¸¦ ´Ù ½á¹ö¸± ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡°¡ »ç¿ëÇÏ´Â ÆÄÀϱâ¼úÀÚÀÇ
- ÃÑ °³¼ö´Â ¿À·ù ·Î±×ÆÄÀÏ´ç ÇÑ°³, ´Ù¸¥ ·Î±×ÆÄÀÏ Áö½Ã¾î´ç
- ÇÑ°³, Ãß°¡·Î ³»ºÎ¿ëµµ·Î 10-20°³¸¦ ´õÇÑ ¼ö´Ù. À¯´Ð½º ¿î¿µÃ¼Á¦´Â
- ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÄÀϱâ¼úÀÚ °³¼ö¸¦ Á¦ÇÑÇÑ´Ù. ÀÌ ÇÑ°è´Â
- º¸Åë 64°³·Î, º¸Åë À̺¸´Ù Å« hard-limit±îÁö ´Ã¸± ¼ö ÀÖ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â ÀÌ ÇѰ踦 ÇÊ¿äÇѸ¸Å­ ´Ã¸®·Á°í ÇÏÁö¸¸, ½ÇÆÐÇÏ´Â
- °æ¿ì°¡ ÀÖ´Ù:</p>
-
- <ol>
- <li>½Ã½ºÅÛÀÌ <code>setrlimit()</code> ½Ã½ºÅÛÈ£ÃâÀ»
- Á¦°øÇÏÁö ¾Ê´Â´Ù.</li>
-
- <li>(Solaris 2.3°ú °°ÀÌ) ½Ã½ºÅÛ¿¡¼­
- <code>setrlimit(RLIMIT_NOFILE)</code> ÇÔ¼ö°¡ µ¿ÀÛÇÏÁö
- ¾Ê´Â´Ù.</li>
-
- <li>ÇÊ¿äÇÑ ÆÄÀϱâ¼úÀÚ °³¼ö°¡ hard limit º¸´Ù ¸¹´Ù.</li>
-
- <li>(Solaris 2) ½Ã½ºÅÛÀÌ stdio ½ºÆ®¸²À» 256ÀÌÇÏÀÇ
- ÆÄÀϱâ¼úÀÚ¸¸À» »ç¿ëÇϵµ·Ï Á¦ÇÑÇÏ´Â µî ÆÄÀϱâ¼úÀÚ¿¡
- Á¦¾àÀ» °¡ÇÑ´Ù.</li>
- </ol>
-
- <p>ÀÌ °æ¿ì ÇØ°áÃ¥Àº:</p>
-
- <ul>
- <li>·Î±×ÆÄÀÏ °³¼ö¸¦ ÁÙÀδÙ. <directive type="section"
- module="core">VirtualHost</directive> ¼½¼Ç¿¡¼­ ·Î±×ÆÄÀÏÀ»
- ÁöÁ¤ÇÏÁö ¾Ê°í ÁÖ ·Î±×ÆÄÀÏÀ» »ç¿ëÇÑ´Ù. (´õ ÀÚ¼¼ÇÑ ¹æ¹ýÀº
- ¾Æ·¡ <a href="#splitlogs">·Î±×ÆÄÀÏ ³ª´©±â</a>¸¦ Âü°íÇ϶ó.)</li>
-
- <li>
- »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÌ (À§ÀÇ) 1¹ø°³ª 2¹ø° °æ¿ì¿¡ ÇØ´çÇÑ´Ù¸é,
- ´ÙÀ½°ú °°Àº ½ºÅ©¸³Æ®·Î ¾ÆÆÄÄ¡¸¦ ½ÃÀÛÇϱâ Àü¿¡ ÆÄÀϱâ¼úÀÚ
- ÇѰ踦 ´Ã¸°´Ù.
-
- <example>
- <code>#!/bin/sh<br />
- ulimit -S -n 100<br />
- exec httpd</code>
- </example>
- </li>
- </ul>
-
-</summary>
-
-<section id="splitlogs"><title>·Î±×ÆÄÀÏ ³ª´©±â</title>
-
-<p>¿©·¯ °¡»óÈ£½ºÆ®°¡ °°Àº ·Î±×ÆÄÀÏÀ» »ç¿ëÇÑ´Ù¸é ³ªÁß¿¡ °¢
-°¡»óÈ£½ºÆ®ÀÇ Åë°èºÐ¼®À» À§ÇØ ·Î±×ÆÄÀÏÀ» ³ª´©°í ½ÍÀ» °ÍÀÌ´Ù.
-ÀÌ ÀÛ¾÷Àº ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù.</p>
-
-<p>¸ÕÀú ·Î±× Ç׸ñ¿¡ °¡»óÈ£½ºÆ® Á¤º¸¸¦ Ãß°¡ÇÑ´Ù. À̸¦ À§ÇØ
-<directive module="mod_log_config">LogFormat</directive>
-Áö½Ã¾î¿Í <code>%v</code> º¯¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ º¯¼ö¸¦ ·Î±×
-Çü½Ä¹®ÀÚ¿­ ¾Õ¿¡ Ãß°¡ÇÑ´Ù:</p>
-
-<example>
-LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
-CustomLog logs/multiple_vhost_log vhost
-</example>
-
-<p>±×·¯¸é common ·Î±×Çü½Ä ¾Õ¿¡ (<directive
-module="core">ServerName</directive> Áö½Ã¾î¿¡ ³ª¿À´Â) Á¤±Ô
-°¡»óÈ£½ºÆ®¸¦ Æ÷ÇÔÇÏ¿© ·Î±×ÆÄÀÏÀ» ±â·ÏÇÑ´Ù. (·Î±×ÆÄÀÏ
-»ç¿ëÀÚÁ¤ÀÇ¿¡ °üÇÑ ³»¿ëÀº <directive
-module="mod_log_config">»ç¿ëÀÚÁ¤ÀÇ ·Î±×Çü½Ä</directive>À»
-Âü°íÇ϶ó.)</p>
-
-<p>·Î±×ÆÄÀÏÀ» (°¡»óÈ£½ºÆ®´ç ÇÑ ÆÄÀϾ¿) ³ª´©°í ½Í´Ù¸é <code><a
-href="../programs/other.html">split-logfile</a></code> ÇÁ·Î±×·¥À»
-»ç¿ëÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾ÆÆÄÄ¡ ¹èÆ÷º»ÀÇ <code>support</code>
-µð·ºÅ丮¿¡ ÀÖ´Ù.</p>
-
-<p>´ÙÀ½°ú °°ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù:</p>
-
-<example>
-split-logfile &lt; /logs/multiple_vhost_log
-</example>
-
-<p>°¡»óÈ£½ºÆ® ·Î±×ÆÄÀÏÀ» °¡Áö°í ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ·Î±×ÆÄÀÏ¿¡
-³ª¿À´Â °¢ °¡»óÈ£½ºÆ®´ç ÆÄÀÏÀ» Çϳª¾¿ ¸¸µç´Ù. °¢°¢ÀÇ ÆÄÀϸíÀº
-<code>hostname.log</code>ÀÌ´Ù.</p>
-
-</section>
-</manualpage>
-
diff --git a/docs/manual/vhosts/fd-limits.xml.meta b/docs/manual/vhosts/fd-limits.xml.meta
deleted file mode 100644
index c58579265b..0000000000
--- a/docs/manual/vhosts/fd-limits.xml.meta
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>fd-limits</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/index.html b/docs/manual/vhosts/index.html
deleted file mode 100644
index f2b6eb94f2..0000000000
--- a/docs/manual/vhosts/index.html
+++ /dev/null
@@ -1,15 +0,0 @@
-URI: index.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: index.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: index.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/index.html.de b/docs/manual/vhosts/index.html.de
deleted file mode 100644
index 2e8e4af787..0000000000
--- a/docs/manual/vhosts/index.html.de
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache-Dokumentation zu virtuellen Hosts - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache-Dokumentation zu virtuellen Hosts</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/vhosts/" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Der Begriff <cite>virtueller Host</cite> <span class="transnote">(<em>Anm.d.Ü.:</em> engl. 'virtual
- host')</span> bezieht sich auf die Praxis, mehr als ein Webangebot
- (z.B. <code>www.company1.com</code> und <code>www.company2.com</code>)
- auf einer einzigen Maschine zu betreiben. Virtuelle Hosts können
- "<a href="ip-based.html">IP-basiert</a>" sein, was bedeutet, dass jedes
- Webangebot eine andere IP besitzt, oder "<a href="name-based.html">Namens-basiert</a>", was bedeutet, dass
- unter jeder IP-Adresse mehrere Namen laufen. Die Tatsache, dass sie
- auf dem gleichen physischen Server laufen, ist für den Endbenutzer
- nicht offensichtlich.</p>
-
- <p>Der Apache war einer der ersten Server, der IP-basierte
- virtuelle Hosts von Haus aus direkt unterstützt hat. Seit Version 1.1
- unterstützt der Apache sowohl IP-basierte als auch namensbasierte
- virtuelle Hosts (vhosts). Letzteres wird zuweilen auch
- <em>Host-basiert</em> oder <em>non-IP-Virtual-Host</em> genannt.</p>
-
- <p>Nachfolgend finden Sie eine Liste von Dokumenten, die alle Details
- der Unterstützung von virtuellen Hosts ab Apache Version 1.3
- beschreiben.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#support">Unterstützung virtueller Hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directives">Konfigurationsdirektiven</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li><li><a href="name-based.html">Namensbasierte virtuelle Hosts</a></li><li><a href="ip-based.html">IP-basierte virtuelle Hosts</a></li><li><a href="examples.html">Beispiele für virtuelle
- Hosts</a></li><li><a href="fd-limits.html">Datei-Deskriptor-Begrenzungen</a></li><li><a href="mass.html">Massen-Virtual-Hosting</a></li><li><a href="details.html">Zuweisung virtueller Hosts</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">Unterstützung virtueller Hosts</a></h2>
-
- <ul>
- <li><a href="name-based.html">Namensbasierte virtuelle Hosts</a> (Mehr
- als ein Webangebot pro IP-Adresse)</li>
- <li><a href="ip-based.html">IP-basierte virtuelle Hosts</a> (Eine
- IP-Adresse für jedes Webangebot)</li>
- <li><a href="examples.html">Beispiele für virtuelles Hosts in
- typischen Installationen</a></li>
- <li><a href="fd-limits.html">Datei-Deskriptor-Begrenzungen</a> (oder
- <em>Zu viele Protokolldateien</em>)</li>
- <li><a href="mass.html">Dynamisch konfiguriertes
- Massen-Virtual-Hosting</a></li>
- <li><a href="details.html">Tiefergehende Erörterung der Zuweisung
- virtueller Hosts</a></li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="directives" id="directives">Konfigurationsdirektiven</a></h2>
-
- <ul>
- <li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li>
- </ul>
-
- <p>Bei der Suche von Fehlern in Ihrer Virtual-Host-Konfiguration ist
- die Apache-Befehlszeilenoption <code>-S</code> möglicherweise
- hilfreich. Geben Sie dazu den folgenden Befehl ein:</p>
-
- <div class="example"><p><code>
- /usr/local/apache2/bin/httpd -S
- </code></p></div>
-
- <p>Diese Anweisung gibt eine Beschreibung aus, wie der Apache die
- Konfigurationsdatei analysiert hat. Eine sorgfältige
- Überprüfung der IP-Adressen und Servernamen kann helfen,
- Konfigurationsfehler aufzudecken. (Lesen Sie <a href="../programs/httpd.html">die Dokumentation zum httpd-Programm</a>
- für weitere Befehlszeilenoptionen.)</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/vhosts/" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/index.html.en b/docs/manual/vhosts/index.html.en
deleted file mode 100644
index c8f006af14..0000000000
--- a/docs/manual/vhosts/index.html.en
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache Virtual Host documentation - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache Virtual Host documentation</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/vhosts/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>The term <cite>Virtual Host</cite> refers to the practice of
- running more than one web site (such as
- <code>www.company1.com</code> and <code>www.company2.com</code>)
- on a single machine. Virtual hosts can be "<a href="ip-based.html">IP-based</a>", meaning that you have a
- different IP address for every web site, or "<a href="name-based.html">name-based</a>", meaning that you have
- multiple names running on each IP address. The fact that they
- are running on the same physical server is not apparent to the
- end user.</p>
-
- <p>Apache was one of the first servers to support IP-based
- virtual hosts right out of the box. Versions 1.1 and later of
- Apache support both IP-based and name-based virtual hosts
- (vhosts). The latter variant of virtual hosts is sometimes also
- called <em>host-based</em> or <em>non-IP virtual hosts</em>.</p>
-
- <p>Below is a list of documentation pages which explain all
- details of virtual host support in Apache version 1.3 and
- later.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#support">Virtual Host Support</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directives">Configuration directives</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li><li><a href="name-based.html">Name-based virtual
-hosts</a></li><li><a href="ip-based.html">IP-based virtual hosts</a></li><li><a href="examples.html">Virtual host examples</a></li><li><a href="fd-limits.html">File descriptor limits</a></li><li><a href="mass.html">Mass virtual hosting</a></li><li><a href="details.html">Details of host matching</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">Virtual Host Support</a></h2>
-
- <ul>
- <li><a href="name-based.html">Name-based Virtual Hosts</a> (More
- than one web site per IP address)</li>
- <li><a href="ip-based.html">IP-based Virtual Hosts</a> (An IP
- address for each web site)</li>
- <li><a href="examples.html">Virtual Host examples for common
- setups</a></li>
- <li><a href="fd-limits.html">File Descriptor Limits</a> (or,
- <em>Too many log files</em>)</li>
- <li><a href="mass.html">Dynamically Configured Mass Virtual
- Hosting</a></li>
- <li><a href="details.html">In-Depth Discussion of Virtual Host
- Matching</a></li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="directives" id="directives">Configuration directives</a></h2>
-
- <ul>
- <li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li>
- </ul>
-
- <p>If you are trying to debug your virtual host configuration, you
- may find the Apache <code>-S</code> command line switch
- useful. That is, type the following command:</p>
-
- <div class="example"><p><code>
- /usr/local/apache2/bin/httpd -S
- </code></p></div>
-
- <p>This command will dump out a description of how Apache parsed
- the configuration file. Careful examination of the IP addresses and
- server names may help uncover configuration mistakes. (See <a href="../programs/httpd.html">the docs for the httpd program</a> for
- other command line options)</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/vhosts/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/index.html.ja.euc-jp b/docs/manual/vhosts/index.html.ja.euc-jp
deleted file mode 100644
index bfed1410b5..0000000000
--- a/docs/manual/vhosts/index.html.ja.euc-jp
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a></div><div id="page-content"><div id="preamble"><h1>Apache ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥ÈÀâÌÀ½ñ</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/vhosts/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p><cite>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</cite>¤È¤¤¤¦ÍѸì¤Ï¡¢1 Âæ¤Î¥Þ¥·¥ó¾å¤Ç
- (<code>www.company1.com</code> and <code>www.company2.com</code> ¤Î¤è¤¦¤Ê)
- Æó¤Ä°Ê¾å¤Î¥¦¥§¥Ö¥µ¥¤¥È¤ò°·¤¦±¿ÍÑÊýË¡¤Î¤³¤È¤ò»Ø¤·¤Þ¤¹¡£
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¤Ï¡¢³Æ¥¦¥§¥Ö¥µ¥¤¥È¤Ë°ã¤¦ IP ¥¢¥É¥ì¥¹¤¬¤¢¤ë
- ¡Ö<a href="ip-based.html">IP ¥Ù¡¼¥¹</a>¡×¤È¡¢¤½¤ì¤¾¤ì¤Î IP ¥¢¥É¥ì¥¹¤Ë
- Ê£¿ô¤Î̾Á°¤¬¤¢¤ë¡Ö<a href="name-based.html">̾Á°¥Ù¡¼¥¹</a>¡×¤È¤¬¤¢¤ê¤Þ¤¹¡£
- Ê£¿ô¤Î¥µ¥¤¥È¤¬ÊªÍýŪ¤ËƱ¤¸¥µ¡¼¥Ð¤Ç°·¤ï¤ì¤Æ¤¤¤ë¡¢¤È¤¤¤¦¤³¤È¤Ï¥¨¥ó¥É¥æ¡¼¥¶¤Ë¤Ï
- ÌÀ¤é¤«¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>
-
- <p>Apache ¤Ï¡¢Æä˼ê¤òÆþ¤ì¤Ê¤¤¾õÂÖ¤Ç IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È
- ¤ò¥µ¥Ý¡¼¥È¤·¤¿ºÇ½é¤Î¥µ¡¼¥Ð¤Î°ì¤Ä¤Ç¤¹¡£¥Ð¡¼¥¸¥ç¥ó 1.1 °Ê¹ß¤Î Apache
- ¤Ç¤Ï¡¢IP ¥Ù¡¼¥¹¤È¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎξÊý¤ò¥µ¥Ý¡¼¥È
- ¤·¤Æ¤¤¤Þ¤¹¡£¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ï¡¢<em>¥Û¥¹¥È¥Ù¡¼¥¹</em>¤¢¤ë¤¤¤Ï
- <em>Èó IP ¥Ù¡¼¥¹</em>¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤È¸Æ¤Ð¤ì¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£</p>
-
- <p>°Ê²¼¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢Apache ¥Ð¡¼¥¸¥ç¥ó 1.3
- °Ê¹ß¤Ç¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥µ¥Ý¡¼¥È¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#support">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥µ¥Ý¡¼¥È</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directives">ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li><li><a href="name-based.html">¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li><li><a href="ip-based.html">IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li><li><a href="examples.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î°ìÈÌŪ¤ÊÀßÄêÎã</a></li><li><a href="fd-limits.html">¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¸Â³¦</a></li><li><a href="mass.html">ÂçÎ̤ΥС¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÀßÄê</a></li><li><a href="details.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Þ¥Ã¥Á¥ó¥°¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥µ¥Ý¡¼¥È</a></h2>
-
- <ul>
- <li><a href="name-based.html">¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>
- (°ì¤Ä¤Î IP ¥¢¥É¥ì¥¹¤ËÊ£¿ô¤Î¥¦¥§¥Ö¥µ¥¤¥È)</li>
- <li><a href="ip-based.html">IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a>
- (³Æ¥¦¥§¥Ö¥µ¥¤¥È¤Ë IP ¥¢¥É¥ì¥¹)</li>
- <li><a href="examples.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î°ìÈÌŪ¤ÊÀßÄêÎã</a></li>
- <li><a href="fd-limits.html">¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Î¸Â³¦</a>
- (¤Þ¤¿¤Ï¡¢<em>¿²á¤®¤ë¥í¥°¥Õ¥¡¥¤¥ë</em>)</li>
- <li><a href="mass.html">ÂçÎ̤ΥС¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÀßÄê</a></li>
- <li><a href="details.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Þ¥Ã¥Á¥ó¥°¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ</a></li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="directives" id="directives">ÀßÄê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a></h2>
-
- <ul>
- <li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li>
- </ul>
-
- <p>¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÀßÄê¤Î¥Ç¥Ð¥Ã¥°¤ò¤¹¤ë¤Ë¤Ï
- Apache ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥¹¥¤¥Ã¥Á <code>-S</code> ¤¬ÊØÍø¤Ç¤¹¡£
- ¤Ä¤Þ¤ê¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Þ¤¹:</p>
-
- <div class="example"><p><code>
- /usr/local/apache2/bin/httpd -S
- </code></p></div>
-
- <p>¤³¤Î¥³¥Þ¥ó¥É¤Ï Apache ¤¬ÀßÄê¥Õ¥¡¥¤¥ë¤ò¤É¤¦²òÀϤ·¤¿¤«¤Ë¤Ä¤¤¤Æ½ÐÎϤ·¤Þ¤¹¡£
- IP ¥¢¥É¥ì¥¹¤È¥µ¡¼¥Ð̾¤òÃí°Õ¿¼¤¯Ä´¤Ù¤ì¤Ð¡¢
- ÀßÄê¤Î´Ö°ã¤¤¤ò¸«¤Ä¤±¤ë½õ¤±¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
- (¾¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î¥ª¥×¥·¥ç¥ó¤Ï <a href="../programs/httpd.html">httpd ¥×¥í¥°¥é¥à¤ÎÀâÌÀʸ½ñ</a>¤ò¸«¤Æ¤¯¤À¤µ¤¤)</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/vhosts/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/index.html.ko.euc-kr b/docs/manual/vhosts/index.html.ko.euc-kr
deleted file mode 100644
index 40ef8ceb10..0000000000
--- a/docs/manual/vhosts/index.html.ko.euc-kr
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/vhosts/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p><cite>°¡»óÈ£½ºÆ® (Virtual Host)</cite>´Â ÇÑ ÄÄÇ»ÅÍ¿¡¼­
- ¿©·¯ À¥»çÀÌÆ®¸¦ (¿¹¸¦ µé¾î, <code>www.company1.com</code>°ú
- <code>www.company2.com</code>) ¼­ºñ½ºÇÔÀ» ¶æÇÑ´Ù.
- °¡»óÈ£½ºÆ®¿¡´Â °¢ À¥»çÀÌÆ®¸¶´Ù ´Ù¸¥ IP ÁÖ¼Ò¸¦ »ç¿ëÇÏ´Â
- "<a href="ip-based.html">IP±â¹Ý (IP-based)</a>" ¹æ½Ä°ú ÇÑ
- IP ÁÖ¼Ò´ç ¿©·¯ À̸§À» °¡Áö´Â "<a href="name-based.html">À̸§±â¹Ý (name-based)</a>" ¹æ½ÄÀÌ
- ÀÖ´Ù. ¿©·¯ »çÀÌÆ®µéÀÌ °°Àº ¼­¹ö¿¡¼­ µ¹°íÀÖ´Ù´Â »ç½ÇÀ» À¥»ç¿ëÀÚ´Â
- ´«Ä¡Ã¤Áö ¸øÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â ±âº»À¸·Î IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ Áö¿øÇÑ ÃÊâ±â
- ¼­¹öµéÁß Çϳª´Ù. ¾ÆÆÄÄ¡ ¹öÀü 1.1 ÀÌ»óÀº IP±â¹Ý°ú À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¸¦ ¸ðµÎ Áö¿øÇÑ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦
- <em>È£½ºÆ®±â¹Ý (host-based)</em> ¶Ç´Â <em>ºñIP °¡»óÈ£½ºÆ®
- (non-IP virtual hosts)</em>¶ó°íµµ ºÎ¸¥´Ù.</p>
-
- <p>´ÙÀ½Àº ¾ÆÆÄÄ¡ ¹öÀü 1.3 ÀÌ»óÀÇ °¡»óÈ£½ºÆ® Áö¿øÀ» ÀÚ¼¼È÷
- ¼³¸íÇÑ ¹®¼­µéÀÌ´Ù.</p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#support">°¡»óÈ£½ºÆ® Áö¿ø</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#directives">¼³Á¤ Áö½Ã¾î</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li><li><a href="name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ®</a></li><li><a href="ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ®</a></li><li><a href="examples.html">°¡»óÈ£½ºÆ® ¿¹</a></li><li><a href="fd-limits.html">ÆÄÀϱâ¼úÀÚ ÇÑ°è</a></li><li><a href="mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®</a></li><li><a href="details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support" id="support">°¡»óÈ£½ºÆ® Áö¿ø</a></h2>
-
- <ul>
- <li><a href="name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ®</a>
- (IP ÁÖ¼Ò´ç ¿©·¯ À¥»çÀÌÆ®)</li>
- <li><a href="ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ®</a> (°¢
- À¥»çÀÌÆ®¸¶´Ù IP ÁÖ¼Ò)</li>
- <li><a href="examples.html">ÀϹÝÀûÀÎ °¡»óÈ£½ºÆ® ¿¹</a></li>
- <li><a href="fd-limits.html">ÆÄÀϱâ¼úÀÚ(file descriptor)
- ÇÑ°è</a> (Áï, <em>³Ê¹« ¸¹Àº ·Î±×ÆÄÀÏ</em>)</li>
- <li><a href="mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î
- ¼³Á¤Çϱâ</a></li>
- <li><a href="details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ
- ¼³¸í</a></li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="directives" id="directives">¼³Á¤ Áö½Ã¾î</a></h2>
-
- <ul>
- <li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li>
- <li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li>
- </ul>
-
- <p>°¡»óÈ£½ºÆ® ¼³Á¤À» Å×½ºÆ®ÇÒ¶§ ¾ÆÆÄÄ¡ÀÇ <code>-S</code>
- ¸í·ÉÇà ¿É¼ÇÀÌ À¯¿ëÇÏ´Ù. Áï, ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù:</p>
-
- <div class="example"><p><code>
- /usr/local/apache2/bin/httpd -S
- </code></p></div>
-
- <p>ÀÌ ¸í·É¾î´Â ¾ÆÆÄÄ¡°¡ ÀÐÀº ¼³Á¤ÆÄÀÏ¿¡ ´ëÇÑ
- Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. IP ÁÖ¼Ò¿Í ¼­¹ö¸íÀ» ÀÚ¼¼È÷ »ìÆ캸¸é ¼³Á¤¿¡¼­
- ½Ç¼ö¸¦ ¹ß°ßÇϴµ¥ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. (´Ù¸¥ ¸í·ÉÇà ¿É¼ÇµéÀº
- <a href="../programs/httpd.html">httpd ÇÁ·Î±×·¥ ¹®¼­</a>¸¦
- Âü°íÇ϶ó.)</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/vhosts/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/index.xml b/docs/manual/vhosts/index.xml
deleted file mode 100644
index b922e9427c..0000000000
--- a/docs/manual/vhosts/index.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.13 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>Apache Virtual Host documentation</title>
-
-<summary>
-
- <p>The term <cite>Virtual Host</cite> refers to the practice of
- running more than one web site (such as
- <code>www.company1.com</code> and <code>www.company2.com</code>)
- on a single machine. Virtual hosts can be "<a
- href="ip-based.html">IP-based</a>", meaning that you have a
- different IP address for every web site, or "<a
- href="name-based.html">name-based</a>", meaning that you have
- multiple names running on each IP address. The fact that they
- are running on the same physical server is not apparent to the
- end user.</p>
-
- <p>Apache was one of the first servers to support IP-based
- virtual hosts right out of the box. Versions 1.1 and later of
- Apache support both IP-based and name-based virtual hosts
- (vhosts). The latter variant of virtual hosts is sometimes also
- called <em>host-based</em> or <em>non-IP virtual hosts</em>.</p>
-
- <p>Below is a list of documentation pages which explain all
- details of virtual host support in Apache version 1.3 and
- later.</p>
-
-</summary>
-
-<seealso><module>mod_vhost_alias</module></seealso>
-<seealso><a href="name-based.html">Name-based virtual
-hosts</a></seealso>
-<seealso><a href="ip-based.html">IP-based virtual hosts</a></seealso>
-<seealso><a href="examples.html">Virtual host examples</a></seealso>
-<seealso><a href="fd-limits.html">File descriptor limits</a></seealso>
-<seealso><a href="mass.html">Mass virtual hosting</a></seealso>
-<seealso><a href="details.html">Details of host matching</a></seealso>
-
-<section id="support"><title>Virtual Host Support</title>
-
- <ul>
- <li><a href="name-based.html">Name-based Virtual Hosts</a> (More
- than one web site per IP address)</li>
- <li><a href="ip-based.html">IP-based Virtual Hosts</a> (An IP
- address for each web site)</li>
- <li><a href="examples.html">Virtual Host examples for common
- setups</a></li>
- <li><a href="fd-limits.html">File Descriptor Limits</a> (or,
- <em>Too many log files</em>)</li>
- <li><a href="mass.html">Dynamically Configured Mass Virtual
- Hosting</a></li>
- <li><a href="details.html">In-Depth Discussion of Virtual Host
- Matching</a></li>
- </ul>
-
-</section>
-
-<section id="directives"><title>Configuration directives</title>
-
- <ul>
- <li><directive type="section"
- module="core">VirtualHost</directive></li>
- <li><directive module="core">NameVirtualHost</directive></li>
- <li><directive module="core">ServerName</directive></li>
- <li><directive module="core">ServerAlias</directive></li>
- <li><directive module="core">ServerPath</directive></li>
- </ul>
-
- <p>If you are trying to debug your virtual host configuration, you
- may find the Apache <code>-S</code> command line switch
- useful. That is, type the following command:</p>
-
- <example>
- /usr/local/apache2/bin/httpd -S
- </example>
-
- <p>This command will dump out a description of how Apache parsed
- the configuration file. Careful examination of the IP addresses and
- server names may help uncover configuration mistakes. (See <a
- href="../programs/httpd.html">the docs for the httpd program</a> for
- other command line options)</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/index.xml.de b/docs/manual/vhosts/index.xml.de
deleted file mode 100644
index 96359f2d25..0000000000
--- a/docs/manual/vhosts/index.xml.de
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>Apache-Dokumentation zu virtuellen Hosts</title>
-
-<summary>
- <p>Der Begriff <cite>virtueller Host</cite> <transnote>engl. 'virtual
- host'</transnote> bezieht sich auf die Praxis, mehr als ein Webangebot
- (z.B. <code>www.company1.com</code> und <code>www.company2.com</code>)
- auf einer einzigen Maschine zu betreiben. Virtuelle Hosts k&ouml;nnen
- "<a href="ip-based.html">IP-basiert</a>" sein, was bedeutet, dass jedes
- Webangebot eine andere IP besitzt, oder "<a
- href="name-based.html">Namens-basiert</a>", was bedeutet, dass
- unter jeder IP-Adresse mehrere Namen laufen. Die Tatsache, dass sie
- auf dem gleichen physischen Server laufen, ist f&uuml;r den Endbenutzer
- nicht offensichtlich.</p>
-
- <p>Der Apache war einer der ersten Server, der IP-basierte
- virtuelle Hosts von Haus aus direkt unterst&uuml;tzt hat. Seit Version 1.1
- unterst&uuml;tzt der Apache sowohl IP-basierte als auch namensbasierte
- virtuelle Hosts (vhosts). Letzteres wird zuweilen auch
- <em>Host-basiert</em> oder <em>non-IP-Virtual-Host</em> genannt.</p>
-
- <p>Nachfolgend finden Sie eine Liste von Dokumenten, die alle Details
- der Unterst&uuml;tzung von virtuellen Hosts ab Apache Version 1.3
- beschreiben.</p>
-
-</summary>
-
-<seealso><module>mod_vhost_alias</module></seealso>
-<seealso><a href="name-based.html">Namensbasierte virtuelle Hosts</a></seealso>
-<seealso><a href="ip-based.html">IP-basierte virtuelle Hosts</a></seealso>
-<seealso><a href="examples.html">Beispiele f&uuml;r virtuelle
- Hosts</a></seealso>
-<seealso><a href="fd-limits.html">Datei-Deskriptor-Begrenzungen</a></seealso>
-<seealso><a href="mass.html">Massen-Virtual-Hosting</a></seealso>
-<seealso><a href="details.html">Zuweisung virtueller Hosts</a></seealso>
-
-<section id="support"><title>Unterst&uuml;tzung virtueller Hosts</title>
-
- <ul>
- <li><a href="name-based.html">Namensbasierte virtuelle Hosts</a> (Mehr
- als ein Webangebot pro IP-Adresse)</li>
- <li><a href="ip-based.html">IP-basierte virtuelle Hosts</a> (Eine
- IP-Adresse f&uuml;r jedes Webangebot)</li>
- <li><a href="examples.html">Beispiele f&uuml;r virtuelles Hosts in
- typischen Installationen</a></li>
- <li><a href="fd-limits.html">Datei-Deskriptor-Begrenzungen</a> (oder
- <em>Zu viele Protokolldateien</em>)</li>
- <li><a href="mass.html">Dynamisch konfiguriertes
- Massen-Virtual-Hosting</a></li>
- <li><a href="details.html">Tiefergehende Er&ouml;rterung der Zuweisung
- virtueller Hosts</a></li>
- </ul>
-
-</section>
-
-<section id="directives"><title>Konfigurationsdirektiven</title>
-
- <ul>
- <li><directive type="section"
- module="core">VirtualHost</directive></li>
- <li><directive module="core">NameVirtualHost</directive></li>
- <li><directive module="core">ServerName</directive></li>
- <li><directive module="core">ServerAlias</directive></li>
- <li><directive module="core">ServerPath</directive></li>
- </ul>
-
- <p>Bei der Suche von Fehlern in Ihrer Virtual-Host-Konfiguration ist
- die Apache-Befehlszeilenoption <code>-S</code> m&ouml;glicherweise
- hilfreich. Geben Sie dazu den folgenden Befehl ein:</p>
-
- <example>
- /usr/local/apache2/bin/httpd -S
- </example>
-
- <p>Diese Anweisung gibt eine Beschreibung aus, wie der Apache die
- Konfigurationsdatei analysiert hat. Eine sorgf&auml;ltige
- &Uuml;berpr&uuml;fung der IP-Adressen und Servernamen kann helfen,
- Konfigurationsfehler aufzudecken. (Lesen Sie <a
- href="../programs/httpd.html">die Dokumentation zum httpd-Programm</a>
- f&uuml;r weitere Befehlszeilenoptionen.)</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/index.xml.ja b/docs/manual/vhosts/index.xml.ja
deleted file mode 100644
index ade284565d..0000000000
--- a/docs/manual/vhosts/index.xml.ja
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-<parentdocument href="../"/>
-
- <title>Apache $B%P!<%A%c%k%[%9%H@bL@=q(B</title>
-
-<summary>
-
- <p><cite>$B%P!<%A%c%k%[%9%H(B</cite>$B$H$$$&MQ8l$O!"(B1 $BBf$N%^%7%s>e$G(B
- (<code>www.company1.com</code> and <code>www.company2.com</code> $B$N$h$&$J(B)
- $BFs$D0J>e$N%&%'%V%5%$%H$r07$&1?MQJ}K!$N$3$H$r;X$7$^$9!#(B
- $B%P!<%A%c%k%[%9%H$K$O!"3F%&%'%V%5%$%H$K0c$&(B IP $B%"%I%l%9$,$"$k(B
- $B!V(B<a href="ip-based.html">IP $B%Y!<%9(B</a>$B!W$H!"$=$l$>$l$N(B IP $B%"%I%l%9$K(B
- $BJ#?t$NL>A0$,$"$k!V(B<a href="name-based.html">$BL>A0%Y!<%9(B</a>$B!W$H$,$"$j$^$9!#(B
- $BJ#?t$N%5%$%H$,J*M}E*$KF1$8%5!<%P$G07$o$l$F$$$k!"$H$$$&$3$H$O%(%s%I%f!<%6$K$O(B
- $BL@$i$+$G$O$"$j$^$;$s!#(B</p>
-
- <p>Apache $B$O!"FC$K<j$rF~$l$J$$>uBV$G(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B
- $B$r%5%]!<%H$7$?:G=i$N%5!<%P$N0l$D$G$9!#%P!<%8%g%s(B 1.1 $B0J9_$N(B Apache
- $B$G$O!"(BIP $B%Y!<%9$H%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H$NN>J}$r%5%]!<%H(B
- $B$7$F$$$^$9!#%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H$O!"(B<em>$B%[%9%H%Y!<%9(B</em>$B$"$k$$$O(B
- <em>$BHs(B IP $B%Y!<%9(B</em>$B$N%P!<%A%c%k%[%9%H$H8F$P$l$k$3$H$b$"$j$^$9!#(B</p>
-
- <p>$B0J2<$N%Z!<%8$G$O!"(BApache $B%P!<%8%g%s(B 1.3
- $B0J9_$G$N%P!<%A%c%k%[%9%H$N%5%]!<%H$K$D$$$F$N>\:Y$r@bL@$7$^$9!#(B</p>
-
-</summary>
-
-<seealso><module>mod_vhost_alias</module></seealso>
-<seealso><a href="name-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a></seealso>
-<seealso><a href="ip-based.html">IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B</a></seealso>
-<seealso><a href="examples.html">$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B</a></seealso>
-<seealso><a href="fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</a></seealso>
-<seealso><a href="mass.html">$BBgNL$N%P!<%A%c%k%[%9%H$N@_Dj(B</a></seealso>
-<seealso><a href="details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B</a></seealso>
-
-<section id="support"><title>$B%P!<%A%c%k%[%9%H$N%5%]!<%H(B</title>
-
- <ul>
- <li><a href="name-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>
- ($B0l$D$N(B IP $B%"%I%l%9$KJ#?t$N%&%'%V%5%$%H(B)</li>
- <li><a href="ip-based.html">IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>
- ($B3F%&%'%V%5%$%H$K(B IP $B%"%I%l%9(B)</li>
- <li><a href="examples.html">$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B</a></li>
- <li><a href="fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</a>
- ($B$^$?$O!"(B<em>$BB?2a$.$k%m%0%U%!%$%k(B</em>)</li>
- <li><a href="mass.html">$BBgNL$N%P!<%A%c%k%[%9%H$N@_Dj(B</a></li>
- <li><a href="details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B</a></li>
- </ul>
-
-</section>
-
-<section id="directives"><title>$B@_Dj%G%#%l%/%F%#%V(B</title>
-
- <ul>
- <li><directive type="section"
- module="core">VirtualHost</directive></li>
- <li><directive module="core">NameVirtualHost</directive></li>
- <li><directive module="core">ServerName</directive></li>
- <li><directive module="core">ServerAlias</directive></li>
- <li><directive module="core">ServerPath</directive></li>
- </ul>
-
- <p>$B%P!<%A%c%k%[%9%H$N@_Dj$N%G%P%C%0$r$9$k$K$O(B
- Apache $B$N%3%^%s%I%i%$%s%9%$%C%A(B <code>-S</code> $B$,JXMx$G$9!#(B
- $B$D$^$j!"0J2<$N%3%^%s%I$rF~NO$7$^$9(B:</p>
-
- <example>
- /usr/local/apache2/bin/httpd -S
- </example>
-
- <p>$B$3$N%3%^%s%I$O(B Apache $B$,@_Dj%U%!%$%k$r$I$&2r@O$7$?$+$K$D$$$F=PNO$7$^$9!#(B
- IP $B%"%I%l%9$H%5!<%PL>$rCm0U?<$/D4$Y$l$P!"(B
- $B@_Dj$N4V0c$$$r8+$D$1$k=u$1$K$J$k$G$7$g$&!#(B
- ($BB>$N%3%^%s%I%i%$%s$N%*%W%7%g%s$O(B <a
- href="../programs/httpd.html">httpd $B%W%m%0%i%`$N@bL@J8=q(B</a>$B$r8+$F$/$@$5$$(B)</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/index.xml.ko b/docs/manual/vhosts/index.xml.ko
deleted file mode 100644
index bf0d3deb05..0000000000
--- a/docs/manual/vhosts/index.xml.ko
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.13 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="index.xml.meta">
-
- <title>¾ÆÆÄÄ¡ °¡»óÈ£½ºÆ® ¹®¼­</title>
-
-<summary>
-
- <p><cite>°¡»óÈ£½ºÆ® (Virtual Host)</cite>´Â ÇÑ ÄÄÇ»ÅÍ¿¡¼­
- ¿©·¯ À¥»çÀÌÆ®¸¦ (¿¹¸¦ µé¾î, <code>www.company1.com</code>°ú
- <code>www.company2.com</code>) ¼­ºñ½ºÇÔÀ» ¶æÇÑ´Ù.
- °¡»óÈ£½ºÆ®¿¡´Â °¢ À¥»çÀÌÆ®¸¶´Ù ´Ù¸¥ IP ÁÖ¼Ò¸¦ »ç¿ëÇÏ´Â
- "<a href="ip-based.html">IP±â¹Ý (IP-based)</a>" ¹æ½Ä°ú ÇÑ
- IP ÁÖ¼Ò´ç ¿©·¯ À̸§À» °¡Áö´Â "<a
- href="name-based.html">À̸§±â¹Ý (name-based)</a>" ¹æ½ÄÀÌ
- ÀÖ´Ù. ¿©·¯ »çÀÌÆ®µéÀÌ °°Àº ¼­¹ö¿¡¼­ µ¹°íÀÖ´Ù´Â »ç½ÇÀ» À¥»ç¿ëÀÚ´Â
- ´«Ä¡Ã¤Áö ¸øÇÑ´Ù.</p>
-
- <p>¾ÆÆÄÄ¡´Â ±âº»À¸·Î IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ Áö¿øÇÑ ÃÊâ±â
- ¼­¹öµéÁß Çϳª´Ù. ¾ÆÆÄÄ¡ ¹öÀü 1.1 ÀÌ»óÀº IP±â¹Ý°ú À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¸¦ ¸ðµÎ Áö¿øÇÑ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦
- <em>È£½ºÆ®±â¹Ý (host-based)</em> ¶Ç´Â <em>ºñIP °¡»óÈ£½ºÆ®
- (non-IP virtual hosts)</em>¶ó°íµµ ºÎ¸¥´Ù.</p>
-
- <p>´ÙÀ½Àº ¾ÆÆÄÄ¡ ¹öÀü 1.3 ÀÌ»óÀÇ °¡»óÈ£½ºÆ® Áö¿øÀ» ÀÚ¼¼È÷
- ¼³¸íÇÑ ¹®¼­µéÀÌ´Ù.</p>
-
-</summary>
-
-<seealso><module>mod_vhost_alias</module></seealso>
-<seealso><a href="name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ®</a></seealso>
-<seealso><a href="ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ®</a></seealso>
-<seealso><a href="examples.html">°¡»óÈ£½ºÆ® ¿¹</a></seealso>
-<seealso><a href="fd-limits.html">ÆÄÀϱâ¼úÀÚ ÇÑ°è</a></seealso>
-<seealso><a href="mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®</a></seealso>
-<seealso><a href="details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</a></seealso>
-
-<section id="support"><title>°¡»óÈ£½ºÆ® Áö¿ø</title>
-
- <ul>
- <li><a href="name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ®</a>
- (IP ÁÖ¼Ò´ç ¿©·¯ À¥»çÀÌÆ®)</li>
- <li><a href="ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ®</a> (°¢
- À¥»çÀÌÆ®¸¶´Ù IP ÁÖ¼Ò)</li>
- <li><a href="examples.html">ÀϹÝÀûÀÎ °¡»óÈ£½ºÆ® ¿¹</a></li>
- <li><a href="fd-limits.html">ÆÄÀϱâ¼úÀÚ(file descriptor)
- ÇÑ°è</a> (Áï, <em>³Ê¹« ¸¹Àº ·Î±×ÆÄÀÏ</em>)</li>
- <li><a href="mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î
- ¼³Á¤Çϱâ</a></li>
- <li><a href="details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ
- ¼³¸í</a></li>
- </ul>
-
-</section>
-
-<section id="directives"><title>¼³Á¤ Áö½Ã¾î</title>
-
- <ul>
- <li><directive type="section"
- module="core">VirtualHost</directive></li>
- <li><directive module="core">NameVirtualHost</directive></li>
- <li><directive module="core">ServerName</directive></li>
- <li><directive module="core">ServerAlias</directive></li>
- <li><directive module="core">ServerPath</directive></li>
- </ul>
-
- <p>°¡»óÈ£½ºÆ® ¼³Á¤À» Å×½ºÆ®ÇÒ¶§ ¾ÆÆÄÄ¡ÀÇ <code>-S</code>
- ¸í·ÉÇà ¿É¼ÇÀÌ À¯¿ëÇÏ´Ù. Áï, ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù:</p>
-
- <example>
- /usr/local/apache2/bin/httpd -S
- </example>
-
- <p>ÀÌ ¸í·É¾î´Â ¾ÆÆÄÄ¡°¡ ÀÐÀº ¼³Á¤ÆÄÀÏ¿¡ ´ëÇÑ
- Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. IP ÁÖ¼Ò¿Í ¼­¹ö¸íÀ» ÀÚ¼¼È÷ »ìÆ캸¸é ¼³Á¤¿¡¼­
- ½Ç¼ö¸¦ ¹ß°ßÇϴµ¥ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. (´Ù¸¥ ¸í·ÉÇà ¿É¼ÇµéÀº
- <a href="../programs/httpd.html">httpd ÇÁ·Î±×·¥ ¹®¼­</a>¸¦
- Âü°íÇ϶ó.)</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/index.xml.meta b/docs/manual/vhosts/index.xml.meta
deleted file mode 100644
index 381bad0785..0000000000
--- a/docs/manual/vhosts/index.xml.meta
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>index</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/ip-based.html b/docs/manual/vhosts/ip-based.html
deleted file mode 100644
index 8313481481..0000000000
--- a/docs/manual/vhosts/ip-based.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: ip-based.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: ip-based.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/ip-based.html.en b/docs/manual/vhosts/ip-based.html.en
deleted file mode 100644
index 18405bde46..0000000000
--- a/docs/manual/vhosts/ip-based.html.en
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache IP-based Virtual Host Support - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>Apache IP-based Virtual Host Support</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/vhosts/ip-based.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/ip-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#requirements">System requirements</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#howto">How to set up Apache</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multiple">Setting up multiple daemons</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#single">Setting up a single daemon
- with virtual hosts</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li>
-<a href="name-based.html">Name-based Virtual Hosts Support</a>
-</li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">System requirements</a></h2>
-
- <p>As the term <cite>IP-based</cite> indicates, the server
- <strong>must have a different IP address for each IP-based
- virtual host</strong>. This can be achieved by the machine
- having several physical network connections, or by use of
- virtual interfaces which are supported by most modern operating
- systems (see system documentation for details, these are
- frequently called "ip aliases", and the "ifconfig" command is
- most commonly used to set them up).</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howto" id="howto">How to set up Apache</a></h2>
-
- <p>There are two ways of configuring apache to support multiple
- hosts. Either by running a separate httpd daemon for each
- hostname, or by running a single daemon which supports all the
- virtual hosts.</p>
-
- <p>Use multiple daemons when:</p>
-
- <ul>
- <li>There are security partitioning issues, such as company1
- does not want anyone at company2 to be able to read their
- data except via the web. In this case you would need two
- daemons, each running with different <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>, <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>, <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>, and <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> settings.</li>
-
- <li>You can afford the memory and file descriptor
- requirements of listening to every IP alias on the
- machine. It's only possible to <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> to the "wildcard"
- address, or to specific addresses. So if you have a need to
- listen to a specific address for whatever reason, then you
- will need to listen to all specific addresses. (Although one
- httpd could listen to N-1 of the addresses, and another could
- listen to the remaining address.)</li>
- </ul>
-
- <p>Use a single daemon when:</p>
-
- <ul>
- <li>Sharing of the httpd configuration between virtual hosts
- is acceptable.</li>
-
- <li>The machine services a large number of requests, and so
- the performance loss in running separate daemons may be
- significant.</li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multiple" id="multiple">Setting up multiple daemons</a></h2>
-
- <p>Create a separate httpd installation for each virtual host. For
- each installation, use the <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> directive in the
- configuration file to select which IP address (or virtual host)
- that daemon services. e.g.</p>
-
- <div class="example"><p><code>
- Listen www.smallco.com:80
- </code></p></div>
-
- <p>It is recommended that you use an IP address instead of a
- hostname (see <a href="../dns-caveats.html">DNS caveats</a>).</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="single" id="single">Setting up a single daemon
- with virtual hosts</a></h2>
-
- <p>For this case, a single httpd will service requests for the
- main server and all the virtual hosts. The <code class="directive"><a href="../mod/core.html#virtualhost">VirtualHost</a></code> directive
- in the configuration file is used to set the values of <code class="directive"><a href="../mod/core.html#serveradmin">ServerAdmin</a></code>, <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>, <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> and <code class="directive"><a href="../mod/mod_log_config.html#transferlog">TransferLog</a></code>
- or <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
- configuration directives to different values for each virtual
- host. e.g.</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost www.smallco.com&gt;<br />
- ServerAdmin webmaster@mail.smallco.com<br />
- DocumentRoot /groups/smallco/www<br />
- ServerName www.smallco.com<br />
- ErrorLog /groups/smallco/logs/error_log<br />
- TransferLog /groups/smallco/logs/access_log<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost www.baygroup.org&gt;<br />
- ServerAdmin webmaster@mail.baygroup.org<br />
- DocumentRoot /groups/baygroup/www<br />
- ServerName www.baygroup.org<br />
- ErrorLog /groups/baygroup/logs/error_log<br />
- TransferLog /groups/baygroup/logs/access_log<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>It is recommended that you use an IP address instead of a
- hostname (see <a href="../dns-caveats.html">DNS caveats</a>).</p>
-
- <p>Almost <strong>any</strong> configuration directive can be
- put in the VirtualHost directive, with the exception of
- directives that control process creation and a few other
- directives. To find out if a directive can be used in the
- VirtualHost directive, check the <a href="../mod/directive-dict.html#Context">Context</a> using the
- <a href="../mod/directives.html">directive index</a>.</p>
-
- <p><code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> may be used inside a
- VirtualHost directive if the <a href="../suexec.html">suEXEC
- wrapper</a> is used.</p>
-
- <p><em>SECURITY:</em> When specifying where to write log files,
- be aware of some security risks which are present if anyone
- other than the user that starts Apache has write access to the
- directory where they are written. See the <a href="../misc/security_tips.html">security tips</a> document
- for details.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/vhosts/ip-based.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/ip-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/ip-based.html.ko.euc-kr b/docs/manual/vhosts/ip-based.html.ko.euc-kr
deleted file mode 100644
index e3278e0841..0000000000
--- a/docs/manual/vhosts/ip-based.html.ko.euc-kr
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>¾ÆÆÄÄ¡ IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">°¡»óÈ£½ºÆ®</a></div><div id="page-content"><div id="preamble"><h1>¾ÆÆÄÄ¡ IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/ip-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/ip-based.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#requirements">½Ã½ºÅÛ ¿ä±¸»çÇ×</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#howto">¾ÆÆÄÄ¡ ¼³Á¤¹æ¹ý</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multiple">¿©·¯ ¼­¹ö¸¦ ½ÇÇàÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#single">¼­¹ö Çϳª·Î °¡»óÈ£½ºÆ® ½ÇÇàÇϱâ</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li>
-<a href="name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</a>
-</li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="requirements" id="requirements">½Ã½ºÅÛ ¿ä±¸»çÇ×</a></h2>
-
- <p><cite>IP±â¹Ý</cite>À̶õ ¸»ÀÌ ÀǹÌÇϵíÀÌ ¼­¹ö´Â
- <strong>IP±â¹Ý °¡»óÈ£½ºÆ® °¢°¢¿¡ ´ëÇØ ´Ù¸¥ IP ÁÖ¼Ò¸¦
- °¡Á®¾ßÇÑ´Ù</strong>. ÀÌ´Â ÄÄÇ»Å͸¦ ¹°¸®ÀûÀ¸·Î ¿©·¯ ³×Æ®¿÷¿¡
- ¿¬°áÇϰųª, ÃÖ±Ù ¿î¿µÃ¼Á¦¿¡¼­ Áö¿øÇÏ´Â °¡»ó ÀÎÅÍÆäÀ̽º¸¦
- (ÀÚ¼¼ÇÑ ³»¿ëÀº ½Ã½ºÅÛ ¹®¼­¸¦ Âü°íÇ϶ó. ÈçÈ÷ "ip aliases"¶ó°í
- Çϸç, º¸Åë "ifconfig" ¸í·É¾î·Î ¸¸µç´Ù) »ç¿ëÇÏ¿© °¡´ÉÇÏ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="howto" id="howto">¾ÆÆÄÄ¡ ¼³Á¤¹æ¹ý</a></h2>
-
- <p>¿©·¯ È£½ºÆ®¸¦ Áö¿øÇϵµ·Ï ¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀº µÎ°¡Áö´Ù.
- Çϳª´Â °¢ È£½ºÆ®¸¶´Ù º°µµÀÇ À¥¼­¹ö¸¦ ½ÇÇàÇÏ´Â
- ¹ýÀÌ°í, ´Ù¸¥ Çϳª´Â ¸ðµç °¡»óÈ£½ºÆ®¸¦ Áö¿øÇÏ´Â ¼­¹ö ÇÑ°³¸¦
- ½ÇÇàÇÏ´Â ¹æ¹ýÀÌ´Ù.</p>
-
- <p>¾ðÁ¦ ¿©·¯ ¼­¹ö¸¦ »ç¿ëÇϳª:</p>
-
- <ul>
- <li>ȸ»ç2ÀÇ »ç¿ëÀÚ°¡ À¥ÀÌ¿ÜÀÇ ¹æ¹ýÀ¸·Î ȸ»ç1ÀÇ ÀڷḦ ÀÐÀ»
- ¼ö ¾ø°Ô ÇÏ´Â µî º¸¾È»ó ±¸ºÐÀÌ ÇÊ¿äÇÑ °æ¿ì. ÀÌ °æ¿ì
- µÎ ¼­¹ö¸¦ °¢°¢ ´Ù¸¥ <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>, <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>, <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>, <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> ¼³Á¤À¸·Î ½ÇÇàÇØ¾ß ÇÑ´Ù.</li>
-
- <li>ÃæºÐÇÑ ¸Þ¸ð¸®°¡ ÀÖ°í, ÄÄÇ»ÅÍÀÇ ¸ðµç IP¸¦ ±â´Ù¸®±âÀ§ÇÑ
- ÆÄÀϱâ¼úÀÚ(file descriptor) ¿ä±¸»çÇ×µµ ¸¸Á·ÇÑ´Ù. "¿ÍÀϵåÄ«µå"³ª
- ƯÁ¤ ÁÖ¼Ò¸¦ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>ÇÒ ¼ö¸¸ ÀÖ´Ù. ±×·¡¼­
- ¾î¶² ÀÌÀ¯¿¡¼­°Ç ƯÁ¤ ÁÖ¼Ò¸¦ ±â´Ù¸± ÇÊ¿ä°¡ ÀÖ´Ù¸é, (ÇÑ
- À¥¼­¹ö°¡ ÇÑ ÁÖ¼Ò¸¦ Á¦¿ÜÇÑ ¸ðµç ÁÖ¼Ò¸¦ ±â´Ù¸®°í ´Ù¸¥ ÇÑ
- À¥¼­¹ö°¡ Á¦¿ÜÇÑ ÁÖ¼Ò¸¦ ±â´Ù¸± ¼ö ÀÖÁö¸¸) ÁöÁ¤ÇÑ ÁÖ¼Ò
- ¸ðµÎ¸¦ ±â´Ù·Á¾ß ÇÑ´Ù.</li>
- </ul>
-
- <p>¾ðÁ¦ ¼­¹ö ÇÑ°³¸¦ »ç¿ëÇϳª:</p>
-
- <ul>
- <li>°¡»óÈ£½ºÆ®µéÀÇ À¥¼­¹ö ¼³Á¤À» °øÀ¯ÇÒ ¼ö ÀÖ´Â °æ¿ì.</li>
-
- <li>ÄÄÇ»ÅÍ°¡ ¸Å¿ì ¸¹Àº ¿äûÀ» ¼­ºñ½ºÇÑ´Ù¸é ¿©·¯ ¼­¹ö¸¦
- ½ÇÇàÇϱ⿡ ¼Óµµ ¼Õ½ÇÀÌ Å¬ ¼ö ÀÖ´Ù.</li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multiple" id="multiple">¿©·¯ ¼­¹ö¸¦ ½ÇÇàÇϱâ</a></h2>
-
- <p>°¢ °¡»óÈ£½ºÆ®º°·Î À¥¼­¹ö¸¦ ¼³Ä¡ÇÑ´Ù. ¼³Á¤ÆÄÀÏÀÇ
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> Áö½Ã¾î¿¡
- ¼­¹ö°¡ ¼­ºñ½ºÇÒ IP ÁÖ¼Ò(ȤÀº °¡»óÈ£½ºÆ®)¸¦ Àû¾îÁØ´Ù. ¿¹¸¦
- µé¸é,</p>
-
- <div class="example"><p><code>
- Listen www.smallco.com:80
- </code></p></div>
-
- <p>È£½ºÆ®¸í º¸´Ù´Â IP ÁÖ¼Ò¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
- (<a href="../dns-caveats.html">DNS ¹®Á¦</a> Âü°í)</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="single" id="single">¼­¹ö Çϳª·Î °¡»óÈ£½ºÆ® ½ÇÇàÇϱâ</a></h2>
-
- <p>ÀÌ °æ¿ì À¥¼­¹ö ÇÑ°³·Î ÁÖ¼­¹ö¿Í ¸ðµç °¡»óÈ£½ºÆ®¿¡ ´ëÇÑ
- ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. ¼³Á¤ÆÄÀÏÀÇ <code class="directive"><a href="../mod/core.html#virtualhost">VirtualHost</a></code> Áö½Ã¾î¿¡ °¡»óÈ£½ºÆ®¸¶´Ù
- ´Ù¸¥ <code class="directive"><a href="../mod/core.html#serveradmin">ServerAdmin</a></code>,
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>, <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>, <code class="directive"><a href="../mod/mod_log_config.html#transferlog">TransferLog</a></code>,
- <code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code>
- Áö½Ã¾î °ªÀ» ¼³Á¤ÇÑ´Ù. ¿¹¸¦ µé¸é,</p>
-
- <div class="example"><p><code>
- &lt;VirtualHost www.smallco.com&gt;<br />
- ServerAdmin webmaster@mail.smallco.com<br />
- DocumentRoot /groups/smallco/www<br />
- ServerName www.smallco.com<br />
- ErrorLog /groups/smallco/logs/error_log<br />
- TransferLog /groups/smallco/logs/access_log<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost www.baygroup.org&gt;<br />
- ServerAdmin webmaster@mail.baygroup.org<br />
- DocumentRoot /groups/baygroup/www<br />
- ServerName www.baygroup.org<br />
- ErrorLog /groups/baygroup/logs/error_log<br />
- TransferLog /groups/baygroup/logs/access_log<br />
- &lt;/VirtualHost&gt;
- </code></p></div>
-
- <p>È£½ºÆ®¸í º¸´Ù´Â IP ÁÖ¼Ò¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
- (<a href="../dns-caveats.html">DNS ¹®Á¦</a> Âü°í)</p>
-
- <p>VirtualHost Áö½Ã¾î ¾È¿¡¼­´Â ÇÁ·Î¼¼½º »ý¼º°ú ±âŸ ¸î¸î Áö½Ã¾î¸¦
- Á¦¿ÜÇÏ°í °ÅÀÇ <strong>¸ðµç</strong> ¼³Á¤Áö½Ã¾î¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. VirtualHost Áö½Ã¾î ¾È¿¡¼­ Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö
- ¾Ë·Á¸é <a href="../mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a>¿¡¼­
- <a href="../mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦
- È®ÀÎÇ϶ó.</p>
-
- <p><a href="../suexec.html">suEXEC ÇÁ·Î±×·¥</a>À»
- »ç¿ëÇÑ´Ù¸é VirtualHost Áö½Ã¾î ¾È¿¡ <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>¿Í <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><em>º¸¾È:</em> ¼­¹ö¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿Ü¿¡ ´Ù¸¥ »ç¶÷¿¡°Ô
- ·Î±×ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮ÀÇ ¾²±â±ÇÇÑÀÌ ÀÖ´Ù¸é º¸¾È
- ¹®Á¦¸¦ Á¶½ÉÇ϶ó. ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="../misc/security_tips.html">º¸¾È ÆÁ</a>À» Âü°íÇ϶ó.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/ip-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/ip-based.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/ip-based.xml b/docs/manual/vhosts/ip-based.xml
deleted file mode 100644
index 41a3bed714..0000000000
--- a/docs/manual/vhosts/ip-based.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ip-based.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
- <title>Apache IP-based Virtual Host Support</title>
-
-<seealso>
-<a href="name-based.html">Name-based Virtual Hosts Support</a>
-</seealso>
-
-<section id="requirements"><title>System requirements</title>
-
- <p>As the term <cite>IP-based</cite> indicates, the server
- <strong>must have a different IP address for each IP-based
- virtual host</strong>. This can be achieved by the machine
- having several physical network connections, or by use of
- virtual interfaces which are supported by most modern operating
- systems (see system documentation for details, these are
- frequently called "ip aliases", and the "ifconfig" command is
- most commonly used to set them up).</p>
-
-</section>
-
-<section id="howto"><title>How to set up Apache</title>
-
- <p>There are two ways of configuring apache to support multiple
- hosts. Either by running a separate httpd daemon for each
- hostname, or by running a single daemon which supports all the
- virtual hosts.</p>
-
- <p>Use multiple daemons when:</p>
-
- <ul>
- <li>There are security partitioning issues, such as company1
- does not want anyone at company2 to be able to read their
- data except via the web. In this case you would need two
- daemons, each running with different <directive
- module="mpm_common">User</directive>, <directive
- module="mpm_common">Group</directive>, <directive
- module="mpm_common">Listen</directive>, and <directive
- module="core">ServerRoot</directive> settings.</li>
-
- <li>You can afford the memory and file descriptor
- requirements of listening to every IP alias on the
- machine. It's only possible to <directive
- module="mpm_common">Listen</directive> to the "wildcard"
- address, or to specific addresses. So if you have a need to
- listen to a specific address for whatever reason, then you
- will need to listen to all specific addresses. (Although one
- httpd could listen to N-1 of the addresses, and another could
- listen to the remaining address.)</li>
- </ul>
-
- <p>Use a single daemon when:</p>
-
- <ul>
- <li>Sharing of the httpd configuration between virtual hosts
- is acceptable.</li>
-
- <li>The machine services a large number of requests, and so
- the performance loss in running separate daemons may be
- significant.</li>
- </ul>
-
-</section>
-
-<section id="multiple"><title>Setting up multiple daemons</title>
-
- <p>Create a separate httpd installation for each virtual host. For
- each installation, use the <directive
- module="mpm_common">Listen</directive> directive in the
- configuration file to select which IP address (or virtual host)
- that daemon services. e.g.</p>
-
- <example>
- Listen www.smallco.com:80
- </example>
-
- <p>It is recommended that you use an IP address instead of a
- hostname (see <a href="../dns-caveats.html">DNS caveats</a>).</p>
-
-</section>
-
-<section id="single"><title>Setting up a single daemon
- with virtual hosts</title>
-
- <p>For this case, a single httpd will service requests for the
- main server and all the virtual hosts. The <directive
- module="core">VirtualHost</directive> directive
- in the configuration file is used to set the values of <directive
- module="core">ServerAdmin</directive>, <directive
- module="core">ServerName</directive>, <directive
- module="core">DocumentRoot</directive>, <directive
- module="core">ErrorLog</directive> and <directive
- module="mod_log_config">TransferLog</directive>
- or <directive module="mod_log_config">CustomLog</directive>
- configuration directives to different values for each virtual
- host. e.g.</p>
-
- <example>
- &lt;VirtualHost www.smallco.com&gt;<br />
- ServerAdmin webmaster@mail.smallco.com<br />
- DocumentRoot /groups/smallco/www<br />
- ServerName www.smallco.com<br />
- ErrorLog /groups/smallco/logs/error_log<br />
- TransferLog /groups/smallco/logs/access_log<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost www.baygroup.org&gt;<br />
- ServerAdmin webmaster@mail.baygroup.org<br />
- DocumentRoot /groups/baygroup/www<br />
- ServerName www.baygroup.org<br />
- ErrorLog /groups/baygroup/logs/error_log<br />
- TransferLog /groups/baygroup/logs/access_log<br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>It is recommended that you use an IP address instead of a
- hostname (see <a href="../dns-caveats.html">DNS caveats</a>).</p>
-
- <p>Almost <strong>any</strong> configuration directive can be
- put in the VirtualHost directive, with the exception of
- directives that control process creation and a few other
- directives. To find out if a directive can be used in the
- VirtualHost directive, check the <a
- href="../mod/directive-dict.html#Context">Context</a> using the
- <a href="../mod/directives.html">directive index</a>.</p>
-
- <p><directive module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive> may be used inside a
- VirtualHost directive if the <a href="../suexec.html">suEXEC
- wrapper</a> is used.</p>
-
- <p><em>SECURITY:</em> When specifying where to write log files,
- be aware of some security risks which are present if anyone
- other than the user that starts Apache has write access to the
- directory where they are written. See the <a
- href="../misc/security_tips.html">security tips</a> document
- for details.</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/ip-based.xml.ko b/docs/manual/vhosts/ip-based.xml.ko
deleted file mode 100644
index 13a3e18536..0000000000
--- a/docs/manual/vhosts/ip-based.xml.ko
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="ip-based.xml.meta">
-<parentdocument href="./">°¡»óÈ£½ºÆ®</parentdocument>
- <title>¾ÆÆÄÄ¡ IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</title>
-
-<seealso>
-<a href="name-based.html">À̸§±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</a>
-</seealso>
-
-<section id="requirements"><title>½Ã½ºÅÛ ¿ä±¸»çÇ×</title>
-
- <p><cite>IP±â¹Ý</cite>À̶õ ¸»ÀÌ ÀǹÌÇϵíÀÌ ¼­¹ö´Â
- <strong>IP±â¹Ý °¡»óÈ£½ºÆ® °¢°¢¿¡ ´ëÇØ ´Ù¸¥ IP ÁÖ¼Ò¸¦
- °¡Á®¾ßÇÑ´Ù</strong>. ÀÌ´Â ÄÄÇ»Å͸¦ ¹°¸®ÀûÀ¸·Î ¿©·¯ ³×Æ®¿÷¿¡
- ¿¬°áÇϰųª, ÃÖ±Ù ¿î¿µÃ¼Á¦¿¡¼­ Áö¿øÇÏ´Â °¡»ó ÀÎÅÍÆäÀ̽º¸¦
- (ÀÚ¼¼ÇÑ ³»¿ëÀº ½Ã½ºÅÛ ¹®¼­¸¦ Âü°íÇ϶ó. ÈçÈ÷ "ip aliases"¶ó°í
- Çϸç, º¸Åë "ifconfig" ¸í·É¾î·Î ¸¸µç´Ù) »ç¿ëÇÏ¿© °¡´ÉÇÏ´Ù.</p>
-
-</section>
-
-<section id="howto"><title>¾ÆÆÄÄ¡ ¼³Á¤¹æ¹ý</title>
-
- <p>¿©·¯ È£½ºÆ®¸¦ Áö¿øÇϵµ·Ï ¾ÆÆÄÄ¡¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀº µÎ°¡Áö´Ù.
- Çϳª´Â °¢ È£½ºÆ®¸¶´Ù º°µµÀÇ À¥¼­¹ö¸¦ ½ÇÇàÇÏ´Â
- ¹ýÀÌ°í, ´Ù¸¥ Çϳª´Â ¸ðµç °¡»óÈ£½ºÆ®¸¦ Áö¿øÇÏ´Â ¼­¹ö ÇÑ°³¸¦
- ½ÇÇàÇÏ´Â ¹æ¹ýÀÌ´Ù.</p>
-
- <p>¾ðÁ¦ ¿©·¯ ¼­¹ö¸¦ »ç¿ëÇϳª:</p>
-
- <ul>
- <li>ȸ»ç2ÀÇ »ç¿ëÀÚ°¡ À¥ÀÌ¿ÜÀÇ ¹æ¹ýÀ¸·Î ȸ»ç1ÀÇ ÀڷḦ ÀÐÀ»
- ¼ö ¾ø°Ô ÇÏ´Â µî º¸¾È»ó ±¸ºÐÀÌ ÇÊ¿äÇÑ °æ¿ì. ÀÌ °æ¿ì
- µÎ ¼­¹ö¸¦ °¢°¢ ´Ù¸¥ <directive
- module="mpm_common">User</directive>, <directive
- module="mpm_common">Group</directive>, <directive
- module="mpm_common">Listen</directive>, <directive
- module="core">ServerRoot</directive> ¼³Á¤À¸·Î ½ÇÇàÇØ¾ß ÇÑ´Ù.</li>
-
- <li>ÃæºÐÇÑ ¸Þ¸ð¸®°¡ ÀÖ°í, ÄÄÇ»ÅÍÀÇ ¸ðµç IP¸¦ ±â´Ù¸®±âÀ§ÇÑ
- ÆÄÀϱâ¼úÀÚ(file descriptor) ¿ä±¸»çÇ×µµ ¸¸Á·ÇÑ´Ù. "¿ÍÀϵåÄ«µå"³ª
- ƯÁ¤ ÁÖ¼Ò¸¦ <directive
- module="mpm_common">Listen</directive>ÇÒ ¼ö¸¸ ÀÖ´Ù. ±×·¡¼­
- ¾î¶² ÀÌÀ¯¿¡¼­°Ç ƯÁ¤ ÁÖ¼Ò¸¦ ±â´Ù¸± ÇÊ¿ä°¡ ÀÖ´Ù¸é, (ÇÑ
- À¥¼­¹ö°¡ ÇÑ ÁÖ¼Ò¸¦ Á¦¿ÜÇÑ ¸ðµç ÁÖ¼Ò¸¦ ±â´Ù¸®°í ´Ù¸¥ ÇÑ
- À¥¼­¹ö°¡ Á¦¿ÜÇÑ ÁÖ¼Ò¸¦ ±â´Ù¸± ¼ö ÀÖÁö¸¸) ÁöÁ¤ÇÑ ÁÖ¼Ò
- ¸ðµÎ¸¦ ±â´Ù·Á¾ß ÇÑ´Ù.</li>
- </ul>
-
- <p>¾ðÁ¦ ¼­¹ö ÇÑ°³¸¦ »ç¿ëÇϳª:</p>
-
- <ul>
- <li>°¡»óÈ£½ºÆ®µéÀÇ À¥¼­¹ö ¼³Á¤À» °øÀ¯ÇÒ ¼ö ÀÖ´Â °æ¿ì.</li>
-
- <li>ÄÄÇ»ÅÍ°¡ ¸Å¿ì ¸¹Àº ¿äûÀ» ¼­ºñ½ºÇÑ´Ù¸é ¿©·¯ ¼­¹ö¸¦
- ½ÇÇàÇϱ⿡ ¼Óµµ ¼Õ½ÇÀÌ Å¬ ¼ö ÀÖ´Ù.</li>
- </ul>
-
-</section>
-
-<section id="multiple"><title>¿©·¯ ¼­¹ö¸¦ ½ÇÇàÇϱâ</title>
-
- <p>°¢ °¡»óÈ£½ºÆ®º°·Î À¥¼­¹ö¸¦ ¼³Ä¡ÇÑ´Ù. ¼³Á¤ÆÄÀÏÀÇ
- <directive module="mpm_common">Listen</directive> Áö½Ã¾î¿¡
- ¼­¹ö°¡ ¼­ºñ½ºÇÒ IP ÁÖ¼Ò(ȤÀº °¡»óÈ£½ºÆ®)¸¦ Àû¾îÁØ´Ù. ¿¹¸¦
- µé¸é,</p>
-
- <example>
- Listen www.smallco.com:80
- </example>
-
- <p>È£½ºÆ®¸í º¸´Ù´Â IP ÁÖ¼Ò¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
- (<a href="../dns-caveats.html">DNS ¹®Á¦</a> Âü°í)</p>
-
-</section>
-
-<section id="single"><title>¼­¹ö Çϳª·Î °¡»óÈ£½ºÆ® ½ÇÇàÇϱâ</title>
-
- <p>ÀÌ °æ¿ì À¥¼­¹ö ÇÑ°³·Î ÁÖ¼­¹ö¿Í ¸ðµç °¡»óÈ£½ºÆ®¿¡ ´ëÇÑ
- ¿äûÀ» ¼­ºñ½ºÇÑ´Ù. ¼³Á¤ÆÄÀÏÀÇ <directive
- module="core">VirtualHost</directive> Áö½Ã¾î¿¡ °¡»óÈ£½ºÆ®¸¶´Ù
- ´Ù¸¥ <directive module="core">ServerAdmin</directive>,
- <directive module="core">ServerName</directive>, <directive
- module="core">DocumentRoot</directive>, <directive
- module="core">ErrorLog</directive>, <directive
- module="mod_log_config">TransferLog</directive>,
- <directive module="mod_log_config">CustomLog</directive>
- Áö½Ã¾î °ªÀ» ¼³Á¤ÇÑ´Ù. ¿¹¸¦ µé¸é,</p>
-
- <example>
- &lt;VirtualHost www.smallco.com&gt;<br />
- ServerAdmin webmaster@mail.smallco.com<br />
- DocumentRoot /groups/smallco/www<br />
- ServerName www.smallco.com<br />
- ErrorLog /groups/smallco/logs/error_log<br />
- TransferLog /groups/smallco/logs/access_log<br />
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost www.baygroup.org&gt;<br />
- ServerAdmin webmaster@mail.baygroup.org<br />
- DocumentRoot /groups/baygroup/www<br />
- ServerName www.baygroup.org<br />
- ErrorLog /groups/baygroup/logs/error_log<br />
- TransferLog /groups/baygroup/logs/access_log<br />
- &lt;/VirtualHost&gt;
- </example>
-
- <p>È£½ºÆ®¸í º¸´Ù´Â IP ÁÖ¼Ò¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
- (<a href="../dns-caveats.html">DNS ¹®Á¦</a> Âü°í)</p>
-
- <p>VirtualHost Áö½Ã¾î ¾È¿¡¼­´Â ÇÁ·Î¼¼½º »ý¼º°ú ±âŸ ¸î¸î Áö½Ã¾î¸¦
- Á¦¿ÜÇÏ°í °ÅÀÇ <strong>¸ðµç</strong> ¼³Á¤Áö½Ã¾î¸¦ »ç¿ëÇÒ
- ¼ö ÀÖ´Ù. VirtualHost Áö½Ã¾î ¾È¿¡¼­ Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö
- ¾Ë·Á¸é <a href="../mod/directives.html">Áö½Ã¾î ¸ñ·Ï</a>¿¡¼­
- <a href="../mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦
- È®ÀÎÇ϶ó.</p>
-
- <p><a href="../suexec.html">suEXEC ÇÁ·Î±×·¥</a>À»
- »ç¿ëÇÑ´Ù¸é VirtualHost Áö½Ã¾î ¾È¿¡ <directive
- module="mpm_common">User</directive>¿Í <directive
- module="mpm_common">Group</directive>À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p><em>º¸¾È:</em> ¼­¹ö¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿Ü¿¡ ´Ù¸¥ »ç¶÷¿¡°Ô
- ·Î±×ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮ÀÇ ¾²±â±ÇÇÑÀÌ ÀÖ´Ù¸é º¸¾È
- ¹®Á¦¸¦ Á¶½ÉÇ϶ó. ÀÚ¼¼ÇÑ ³»¿ëÀº <a
- href="../misc/security_tips.html">º¸¾È ÆÁ</a>À» Âü°íÇ϶ó.</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/ip-based.xml.meta b/docs/manual/vhosts/ip-based.xml.meta
deleted file mode 100644
index 9fcc0e27f4..0000000000
--- a/docs/manual/vhosts/ip-based.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>ip-based</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/mass.html b/docs/manual/vhosts/mass.html
deleted file mode 100644
index 6c05d28e88..0000000000
--- a/docs/manual/vhosts/mass.html
+++ /dev/null
@@ -1,7 +0,0 @@
-URI: mass.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: mass.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/mass.html.en b/docs/manual/vhosts/mass.html.en
deleted file mode 100644
index 232ad157d5..0000000000
--- a/docs/manual/vhosts/mass.html.en
+++ /dev/null
@@ -1,445 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Dynamically configured mass virtual hosting - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>Dynamically configured mass virtual hosting</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/vhosts/mass.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>This document describes how to efficiently serve an
- arbitrary number of virtual hosts with Apache 1.3.
- </p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#motivation">Motivation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#overview">Overview</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#simple">Simple dynamic virtual hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#homepages">A virtually hosted homepages system</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#combinations">Using more than
- one virtual hosting system on the same server</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ipbased">More efficient IP-based virtual hosting</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#oldversion">Using older versions of Apache</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#simple.rewrite">Simple dynamic
- virtual hosts using <code>mod_rewrite</code></a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#homepages.rewrite">A
- homepages system using <code>mod_rewrite</code></a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#xtra-conf">Using a separate virtual
- host configuration file</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="motivation" id="motivation">Motivation</a></h2>
-
- <p>The techniques described here are of interest if your
- <code>httpd.conf</code> contains many
- <code>&lt;VirtualHost&gt;</code> sections that are
- substantially the same, for example:</p>
-
-<div class="example"><p><code>
-NameVirtualHost 111.22.33.44<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.customer-1.com<br />
- DocumentRoot /www/hosts/www.customer-1.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.customer-2.com<br />
- DocumentRoot /www/hosts/www.customer-2.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;<br />
-# blah blah blah<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.customer-N.com<br />
- DocumentRoot /www/hosts/www.customer-N.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;
-</code></p></div>
-
- <p>The basic idea is to replace all of the static
- <code>&lt;VirtualHost&gt;</code> configuration with a mechanism
- that works it out dynamically. This has a number of
- advantages:</p>
-
- <ol>
- <li>Your configuration file is smaller so Apache starts
- faster and uses less memory.</li>
-
- <li>Adding virtual hosts is simply a matter of creating the
- appropriate directories in the filesystem and entries in the
- DNS - you don't need to reconfigure or restart Apache.</li>
- </ol>
-
- <p>The main disadvantage is that you cannot have a different
- log file for each virtual host; however if you have very many
- virtual hosts then doing this is dubious anyway because it eats
- file descriptors. It is better to log to a pipe or a fifo and
- arrange for the process at the other end to distribute the logs
- to the customers (it can also accumulate statistics, etc.).</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">Overview</a></h2>
-
- <p>A virtual host is defined by two pieces of information: its
- IP address, and the contents of the <code>Host:</code> header
- in the HTTP request. The dynamic mass virtual hosting technique
- is based on automatically inserting this information into the
- pathname of the file that is used to satisfy the request. This
- is done most easily using <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>,
- but if you are using a version of Apache up to 1.3.6 then you
- must use <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
- Both of these modules are disabled by default; you must enable
- one of them when configuring and building Apache if you want to
- use this technique.</p>
-
- <p>A couple of things need to be `faked' to make the dynamic
- virtual host look like a normal one. The most important is the
- server name which is used by Apache to generate
- self-referential URLs, etc. It is configured with the
- <code>ServerName</code> directive, and it is available to CGIs
- via the <code>SERVER_NAME</code> environment variable. The
- actual value used at run time is controlled by the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>
- setting. With <code>UseCanonicalName Off</code> the server name
- comes from the contents of the <code>Host:</code> header in the
- request. With <code>UseCanonicalName DNS</code> it comes from a
- reverse DNS lookup of the virtual host's IP address. The former
- setting is used for name-based dynamic virtual hosting, and the
- latter is used for IP-based hosting. If Apache cannot work out
- the server name because there is no <code>Host:</code> header
- or the DNS lookup fails then the value configured with
- <code>ServerName</code> is used instead.</p>
-
- <p>The other thing to `fake' is the document root (configured
- with <code>DocumentRoot</code> and available to CGIs via the
- <code>DOCUMENT_ROOT</code> environment variable). In a normal
- configuration this setting is used by the core module when
- mapping URIs to filenames, but when the server is configured to
- do dynamic virtual hosting that job is taken over by another
- module (either <code>mod_vhost_alias</code> or
- <code>mod_rewrite</code>) which has a different way of doing
- the mapping. Neither of these modules is responsible for
- setting the <code>DOCUMENT_ROOT</code> environment variable so
- if any CGIs or SSI documents make use of it they will get a
- misleading value.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="simple" id="simple">Simple dynamic virtual hosts</a></h2>
-
- <p>This extract from <code>httpd.conf</code> implements the
- virtual host arrangement outlined in the <a href="#motivation">Motivation</a> section above, but in a
- generic fashion using <code>mod_vhost_alias</code>.</p>
-
-<div class="example"><p><code>
-# get the server name from the Host: header<br />
-UseCanonicalName Off<br />
-<br />
-# this log format can be split per-virtual-host based on the first field<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# include the server name in the filenames used to satisfy requests<br />
-VirtualDocumentRoot /www/hosts/%0/docs<br />
-VirtualScriptAlias /www/hosts/%0/cgi-bin
-</code></p></div>
-
- <p>This configuration can be changed into an IP-based virtual
- hosting solution by just turning <code>UseCanonicalName
- Off</code> into <code>UseCanonicalName DNS</code>. The server
- name that is inserted into the filename is then derived from
- the IP address of the virtual host.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="homepages" id="homepages">A virtually hosted homepages system</a></h2>
-
- <p>This is an adjustment of the above system tailored for an
- ISP's homepages server. Using a slightly more complicated
- configuration we can select substrings of the server name to
- use in the filename so that e.g. the documents for
- <code>www.user.isp.com</code> are found in
- <code>/home/user/</code>. It uses a single <code>cgi-bin</code>
- directory instead of one per virtual host.</p>
-
-<div class="example"><p><code>
-# all the preliminary stuff is the same as above, then<br />
-<br />
-# include part of the server name in the filenames<br />
-VirtualDocumentRoot /www/hosts/%2/docs<br />
-<br />
-# single cgi-bin directory<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</code></p></div>
-
- <p>There are examples of more complicated
- <code>VirtualDocumentRoot</code> settings in the
- <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> documentation.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="combinations" id="combinations">Using more than
- one virtual hosting system on the same server</a></h2>
-
- <p>With more complicated setups you can use Apache's normal
- <code>&lt;VirtualHost&gt;</code> directives to control the
- scope of the various virtual hosting configurations. For
- example, you could have one IP address for homepages customers
- and another for commercial customers with the following setup.
- This can of course be combined with conventional
- <code>&lt;VirtualHost&gt;</code> configuration sections.</p>
-
-<div class="example"><p><code>
-UseCanonicalName Off<br />
-<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-<br />
-&lt;Directory /www/commercial&gt;<br />
-<span class="indent">
- Options FollowSymLinks<br />
- AllowOverride All<br />
-</span>
-&lt;/Directory&gt;<br />
-<br />
-&lt;Directory /www/homepages&gt;<br />
-<span class="indent">
- Options FollowSymLinks<br />
- AllowOverride None<br />
-</span>
-&lt;/Directory&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.commercial.isp.com<br />
- <br />
- CustomLog logs/access_log.commercial vcommon<br />
- <br />
- VirtualDocumentRoot /www/commercial/%0/docs<br />
- VirtualScriptAlias /www/commercial/%0/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.45&gt;<br />
-<span class="indent">
- ServerName www.homepages.isp.com<br />
- <br />
- CustomLog logs/access_log.homepages vcommon<br />
- <br />
- VirtualDocumentRoot /www/homepages/%0/docs<br />
- ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</span>
-&lt;/VirtualHost&gt;
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipbased" id="ipbased">More efficient IP-based virtual hosting</a></h2>
-
- <p>After <a href="#simple">the first example</a> I noted that
- it is easy to turn it into an IP-based virtual hosting setup.
- Unfortunately that configuration is not very efficient because
- it requires a DNS lookup for every request. This can be avoided
- by laying out the filesystem according to the IP addresses
- themselves rather than the corresponding names and changing the
- logging similarly. Apache will then usually not need to work
- out the server name and so incur a DNS lookup.</p>
-
-<div class="example"><p><code>
-# get the server name from the reverse DNS of the IP address<br />
-UseCanonicalName DNS<br />
-<br />
-# include the IP address in the logs so they may be split<br />
-LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# include the IP address in the filenames<br />
-VirtualDocumentRootIP /www/hosts/%0/docs<br />
-VirtualScriptAliasIP /www/hosts/%0/cgi-bin<br />
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="oldversion" id="oldversion">Using older versions of Apache</a></h2>
-
- <p>The examples above rely on <code>mod_vhost_alias</code>
- which appeared after version 1.3.6. If you are using a version
- of Apache without <code>mod_vhost_alias</code> then you can
- implement this technique with <code>mod_rewrite</code> as
- illustrated below, but only for Host:-header-based virtual
- hosts.</p>
-
- <p>In addition there are some things to beware of with logging.
- Apache 1.3.6 is the first version to include the
- <code>%V</code> log format directive; in versions 1.3.0 - 1.3.3
- the <code>%v</code> option did what <code>%V</code> does;
- version 1.3.4 has no equivalent. In all these versions of
- Apache the <code>UseCanonicalName</code> directive can appear
- in <code>.htaccess</code> files which means that customers can
- cause the wrong thing to be logged. Therefore the best thing to
- do is use the <code>%{Host}i</code> directive which logs the
- <code>Host:</code> header directly; note that this may include
- <code>:port</code> on the end which is not the case for
- <code>%V</code>.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="simple.rewrite" id="simple.rewrite">Simple dynamic
- virtual hosts using <code>mod_rewrite</code></a></h2>
-
- <p>This extract from <code>httpd.conf</code> does the same
- thing as <a href="#simple">the first example</a>. The first
- half is very similar to the corresponding part above but with
- some changes for backward compatibility and to make the
- <code>mod_rewrite</code> part work properly; the second half
- configures <code>mod_rewrite</code> to do the actual work.</p>
-
- <p>There are a couple of especially tricky bits: By default,
- <code>mod_rewrite</code> runs before the other URI translation
- modules (<code>mod_alias</code> etc.) so if they are used then
- <code>mod_rewrite</code> must be configured to accommodate
- them. Also, some magic must be performed to do a
- per-dynamic-virtual-host equivalent of
- <code>ScriptAlias</code>.</p>
-
-<div class="example"><p><code>
-# get the server name from the Host: header<br />
-UseCanonicalName Off<br />
-<br />
-# splittable logs<br />
-LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-&lt;Directory /www/hosts&gt;<br />
-<span class="indent">
- # ExecCGI is needed here because we can't force<br />
- # CGI execution in the way that ScriptAlias does<br />
- Options FollowSymLinks ExecCGI<br />
-</span>
-&lt;/Directory&gt;<br />
-<br />
-# now for the hard bit<br />
-<br />
-RewriteEngine On<br />
-<br />
-# a ServerName derived from a Host: header may be any case at all<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-## deal with normal documents first:<br />
-# allow Alias /icons/ to work - repeat for other aliases<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-# allow CGIs to work<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-# do the magic<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1<br />
-<br />
-## and now deal with CGIs - we have to force a MIME type<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]<br />
-<br />
-# that's it!
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="homepages.rewrite" id="homepages.rewrite">A
- homepages system using <code>mod_rewrite</code></a></h2>
-
- <p>This does the same thing as <a href="#homepages">the second
- example</a>.</p>
-
-<div class="example"><p><code>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# allow CGIs to work<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-<br />
-# check the hostname is right so that the RewriteRule works<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$<br />
-<br />
-# concatenate the virtual host name onto the start of the URI<br />
-# the [C] means do the next rewrite on the result of this one<br />
-RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]<br />
-<br />
-# now create the real file name<br />
-RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2<br />
-<br />
-# define the global CGI directory<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="xtra-conf" id="xtra-conf">Using a separate virtual
- host configuration file</a></h2>
-
- <p>This arrangement uses more advanced <code>mod_rewrite</code>
- features to get the translation from virtual host to document
- root from a separate configuration file. This provides more
- flexibility but requires more complicated configuration.</p>
-
- <p>The <code>vhost.map</code> file contains something like
- this:</p>
-
-<div class="example"><p><code>
-www.customer-1.com /www/customers/1<br />
-www.customer-2.com /www/customers/2<br />
-# ...<br />
-www.customer-N.com /www/customers/N<br />
-</code></p></div>
-
- <p>The <code>http.conf</code> contains this:</p>
-
-<div class="example"><p><code>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# define the map file<br />
-RewriteMap vhost txt:/www/conf/vhost.map<br />
-<br />
-# deal with aliases as above<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-# this does the file-based remap<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/docs/$1<br />
-<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/cgi-bin/$1
-</code></p></div>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/vhosts/mass.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/mass.html.ko.euc-kr b/docs/manual/vhosts/mass.html.ko.euc-kr
deleted file mode 100644
index 05b6ef036a..0000000000
--- a/docs/manual/vhosts/mass.html.ko.euc-kr
+++ /dev/null
@@ -1,421 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">°¡»óÈ£½ºÆ®</a></div><div id="page-content"><div id="preamble"><h1>´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/mass.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ 1.3¿¡¼­ ´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ È¿À²ÀûÀ¸·Î
- ¼­ºñ½ºÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.
- </p>
-
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#motivation">µ¿±â</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#overview">°³¿ä</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#simple">°£´ÜÇÑ µ¿Àû °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#homepages">°¡»óÀ¸·Î È£½ºÆ®Çϴ ȨÆäÀÌÁö ½Ã½ºÅÛ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#combinations">ÇÑ ¼­¹ö¿¡ ¿©·¯ °¡»óÈ£½ºÆ®
- ½Ã½ºÅÛ »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ipbased">´õ È¿À²ÀûÀÎ IP±â¹Ý °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#oldversion">¾ÆÆÄÄ¡ ÀÌÀü ¹öÀü »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#simple.rewrite"><code>mod_rewrite</code>¸¦
- »ç¿ëÇÑ °£´ÜÇÑ µ¿Àû °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#homepages.rewrite"><code>mod_rewrite</code>¸¦
- »ç¿ëÇÑ È¨ÆäÀÌÁö ½Ã½ºÅÛ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#xtra-conf">º°µµÀÇ °¡»óÈ£½ºÆ® ¼³Á¤ÆÄÀÏ
- »ç¿ëÇϱâ</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="motivation" id="motivation">µ¿±â</a></h2>
-
- <p>´ç½ÅÀÇ <code>httpd.conf</code>¿¡ ´ÙÀ½°ú °°ÀÌ ¼­·Î ºñ½ÁÇÑ
- <code>&lt;VirtualHost&gt;</code> ¼½¼ÇµéÀ» ¸¹ÀÌ ÀÖ´Ù¸é ¿©±â¼­
- ¼³¸íÇÏ´Â ¹æ¹ýÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù:</p>
-
-<div class="example"><p><code>
-NameVirtualHost 111.22.33.44<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.customer-1.com<br />
- DocumentRoot /www/hosts/www.customer-1.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.customer-2.com<br />
- DocumentRoot /www/hosts/www.customer-2.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;<br />
-# ¹Ùº¸ ¹Ùº¸ ¹Ùº¸<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.customer-N.com<br />
- DocumentRoot /www/hosts/www.customer-N.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;
-</code></p></div>
-
- <p>±âº» °³³äÀº Á¤ÀûÀÎ <code>&lt;VirtualHost&gt;</code>
- ¼³Á¤ ¸ðµÎ¸¦ µ¿ÀûÀ¸·Î ó¸®Çϵµ·Ï ´ëüÇÏ´Â °ÍÀÌ´Ù.
- ±×·¯¸é ¸¹Àº ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ol>
- <li>¼³Á¤ÆÄÀÏÀÌ ÀÛ¾ÆÁ®¼­ ¾ÆÆÄÄ¡°¡ »¡¸® ½ÃÀÛÇÏ°í ¸Þ¸ð¸®¸¦
- Àû°Ô »ç¿ëÇÑ´Ù.</li>
-
- <li>°¡»óÈ£½ºÆ®¸¦ Ãß°¡ÇϱâÀ§ÇØ ÆÄÀϽýºÅÛ¿¡ Àû´çÇÑ
- µð·ºÅ丮¸¦ ¸¸µé°í DNS¿¡ Ç׸ñÀ» Ãß°¡Çϱ⸸ ÇϸéµÈ´Ù. Áï,
- ¾ÆÆÄÄ¡¸¦ Àç¼³Á¤ÇÏ°í Àç½ÃÀÛÇÒ ÇÊ¿ä°¡ ¾ø´Ù.</li>
- </ol>
-
- <p>´ÜÁ¡Àº °¢ °¡»óÈ£½ºÆ®º°·Î ´Ù¸¥ ·Î±×ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù´Â
- Á¡ÀÌ´Ù. ±×·¯³ª ¸Å¿ì ¸¹Àº °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÑ´Ù¸é ÆÄÀϱâ¼úÀÚ¸¦
- ´Ù ½á¹ö¸®±â¶§¹®¿¡ ¼­·Î ´Ù¸¥ ·Î±×ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ÆÄÀÌÇÁ³ª
- fifo·Î ·Î±×¸¦ º¸³»°í, ¹Þ´Â Æí¿¡¼­ ·Î±×¸¦ ó¸®ÇÏ¿© ³ª´©´Â
- ¹æ¹ýÀÌ (Åë°è µîÀ» ¸ðÀ» ¼öµµ ÀÖ´Ù) ´õ ³´´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="overview" id="overview">°³¿ä</a></h2>
-
- <p>°¡»óÈ£½ºÆ®´Â IP ÁÖ¼Ò¿Í HTTP ¿äûÀÇ <code>Host:</code>
- Çì´õ Á¤º¸·Î Á¤ÀÇÇÑ´Ù. ±âº»ÀûÀ¸·Î ´ë·®ÀÇ
- µ¿Àû °¡»óÈ£½ºÆ® ±â¼úÀº ÀÚµ¿À¸·Î °¡»óÈ£½ºÆ® Á¤º¸¸¦ ¿äûÀÇ
- ÆÄÀÏ°æ·Î¿¡ Æ÷ÇÔÇÑ´Ù. ÀÌ´Â ´ëºÎºÐ <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>¸¦
- »ç¿ëÇÏ¿© ½±°Ô ÇØ°áÇÒ ¼ö ÀÖÁö¸¸, ¾ÆÆÄÄ¡ 1.3.6 ÀÌÇϸ¦ »ç¿ëÇÑ´Ù¸é
- <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ µÎ ¸ðµâ
- ¸ðµÎ ±âº»ÀûÀ¸·Î ¼­¹ö¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ·Á¸é
- ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÏ°í ÄÄÆÄÀÏÇÒ¶§ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.</p>
-
- <p>µ¿Àû °¡»óÈ£½ºÆ®¸¦ ÀϹÝÀûÀÎ °¡»óÈ£½ºÆ®Ã³·³ º¸ÀÌ°ÔÇÏ·Á¸é
- ¿©·¯°¡Áö¸¦ `¼Ó¿©¾ß' ÇÑ´Ù. °¡Àå Áß¿äÇÑ °ÍÀº ¾ÆÆÄÄ¡°¡ ÀÚ±âÂüÁ¶
- URL µîÀ» ¸¸µé¶§ »ç¿ëÇÒ ¼­¹ö¸íÀÌ´Ù. ¼­¹ö¸íÀº
- <code>ServerName</code> Áö½Ã¾î·Î ¼³Á¤Çϸç, CGI¿¡´Â
- <code>SERVER_NAME</code> ȯ°æº¯¼ö·Î ÁÖ¾îÁø´Ù. ½ÇÇàÁß ½ÇÁ¦
- ¼­¹ö¸íÀº <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> ¼³Á¤¿¡ ´Þ·È´Ù.
- <code>UseCanonicalName Off</code>ÀÌ¸é ¿äûÀÇ <code>Host:</code>
- Çì´õ ³»¿ëÀÌ ¼­¹ö¸íÀÌ µÈ´Ù. <code>UseCanonicalName DNS</code>À̸é
- °¡»óÈ£½ºÆ®ÀÇ IP ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÇÏ¿© ¼­¹ö¸íÀ» ¾Ë¾Æ³½´Ù.
- ÀüÀÚ´Â À̸§±â¹Ý µ¿Àû °¡»óÈ£½ºÆ®¿¡¼­ »ç¿ëÇÏ°í, ÈÄÀÚ´Â IP±â¹Ý
- °¡»óÈ£½ºÆ®¿¡¼­ »ç¿ëÇÑ´Ù. <code>Host:</code> Çì´õ°¡ ¾ø°Å³ª
- DNS °Ë»öÀÌ ½ÇÆÐÇÏ¿© ¾ÆÆÄÄ¡°¡ ¼­¹ö¸íÀ» ¾Ë¾Æ³»Áö ¸øÇϸé
- <code>ServerName</code>À¸·Î ¼³Á¤ÇÑ °ªÀ» ´ë½Å »ç¿ëÇÑ´Ù.</p>
-
- <p>´Ù¸¥ `¼ÓÀÏ' °ÍÀº (<code>DocumentRoot</code>·Î ¼³Á¤Çϸç,
- CGI¿¡´Â <code>DOCUMENT_ROOT</code> ȯ°æº¯¼ö·Î ÁÖ¾îÁö´Â)
- ¹®¼­·çÆ®ÀÌ´Ù. ÀϹÝÀûÀÎ °æ¿ì core ¸ðµâÀÌ ÀÌ ¼³Á¤À» »ç¿ëÇÏ¿©
- URI¿¡ ÇØ´çÇÏ´Â ÆÄÀϸíÀ» ãÁö¸¸, ¼­¹ö¸¦ µ¿Àû °¡»óÈ£½ºÆÃÀ» ÇÒ¶§´Â ´Ù¸¥
- ¸ðµâÀÌ (<code>mod_vhost_alias</code>³ª <code>mod_rewrite</code>)
- ´Ù¸¥ ¹æ¹ýÀ¸·Î ÀÌ·± ÀÛ¾÷À» ÇÑ´Ù. µÎ ¸ðµâ ¸ðµÎ
- <code>DOCUMENT_ROOT</code> ȯ°æº¯¼ö¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î
- CGI³ª SSI ¹®¼­°¡ ÀÌ °ªÀ» »ç¿ëÇÑ´Ù¸é À߸øµÈ °á°ú¸¦ ¾òÀ» ¼ö
- ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="simple" id="simple">°£´ÜÇÑ µ¿Àû °¡»óÈ£½ºÆ®</a></h2>
-
- <p>À§ <a href="#motivation">µ¿±â</a> ÀýÀÇ °¡»óÈ£½ºÆ®
- ¼³Á¤À» <code>mod_vhost_alias</code>¸¦ »ç¿ëÇÏ¿© ´õ ÀϹÝÀûÀ¸·Î
- ±¸ÇöÇß´Ù.</p>
-
-<div class="example"><p><code>
-# Host: Çì´õ¿¡¼­ ¼­¹ö¸íÀ» ¾Ë¾Æ³½´Ù<br />
-UseCanonicalName Off<br />
-<br />
-# ù¹ø° Çʵ带 »ç¿ëÇÏ¿© ÀÌ ·Î±×¸¦ °¡»óÈ£½ºÆ®º°·Î ³ª´­ ¼ö ÀÖ´Ù<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# ¿äûÀ» ó¸®ÇϱâÀ§ÇØ ÆÄÀÏ¸í¿¡ ¼­¹ö¸íÀ» Æ÷ÇÔÇÑ´Ù<br />
-VirtualDocumentRoot /www/hosts/%0/docs<br />
-VirtualScriptAlias /www/hosts/%0/cgi-bin
-</code></p></div>
-
- <p>ÀÌ ¼³Á¤¿¡¼­ <code>UseCanonicalName Off</code>¸¦
- <code>UseCanonicalName DNS</code>·Î º¯°æÇϱ⸸ Çϸé IP±â¹Ý
- °¡»óÈ£½ºÆ®°¡ µÈ´Ù. °¡»óÈ£½ºÆ®ÀÇ IP ÁÖ¼Ò¸¦ °¡Áö°í
- ÆÄÀÏ¸í¿¡ Ãß°¡ÇÒ ¼­¹ö¸íÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="homepages" id="homepages">°¡»óÀ¸·Î È£½ºÆ®Çϴ ȨÆäÀÌÁö ½Ã½ºÅÛ</a></h2>
-
- <p>ISP ȨÆäÀÌÁö ¼­¹ö¸¦ À§ÇØ À§ÀÇ ¼³Á¤À» ¼öÁ¤Çß´Ù. Á¶±Ý ´õ
- º¹ÀâÇÑ ¼³Á¤À» »ç¿ëÇϸé <code>www.user.isp.com</code>ÀÇ ¹®¼­¸¦
- <code>/home/user/</code>¿¡ µÎ´Â ½ÄÀ¸·Î ¼­¹ö¸íÀÇ ÀϺθ¦ °¡Áö°í
- ÆÄÀϸíÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ ¼³Á¤Àº
- <code>cgi-bin</code>À» °¢ °¡»óÈ£½ºÆ®°¡ µû·Î °¡ÁöÁö¾Ê°í
- ¸ðµç °¡»óÈ£½ºÆ®°¡ °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
-<div class="example"><p><code>
-# ±âº»ÀûÀÎ ³»¿ëÀº À§¿Í °°´Ù. ±×¸®°í<br />
-<br />
-# ÆÄÀÏ¸í¿¡ ¼­¹ö¸íÀÇ ÀϺθ¦ Æ÷ÇÔÇÑ´Ù<br />
-VirtualDocumentRoot /www/hosts/%2/docs<br />
-<br />
-# ÇϳªÀÇ cgi-bin µð·ºÅ丮<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</code></p></div>
-
- <p><code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> ¹®¼­¿¡´Â ´õ º¹ÀâÇÑ
- <code>VirtualDocumentRoot</code> ¼³Á¤ÀÇ ¿¹°¡ ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="combinations" id="combinations">ÇÑ ¼­¹ö¿¡ ¿©·¯ °¡»óÈ£½ºÆ®
- ½Ã½ºÅÛ »ç¿ëÇϱâ</a></h2>
-
- <p>´õ º¹ÀâÇÑ ¼³Á¤ÀÇ ¿¹·Î ¾ÆÆÄÄ¡ÀÇ ÀϹÝÀûÀÎ
- <code>&lt;VirtualHost&gt;</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¿©·¯
- °¡»óÈ£½ºÆ® ¼³Á¤ÀÇ ¹üÀ§¸¦ Á¶ÀýÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú
- °°Àº ¼³Á¤Àº ȨÆäÀÌÁö °í°´¿¡ IP ÁÖ¼Ò ÇÑ°³, »ó¾÷ÀûÀÎ
- °í°´¿¡°Ô ´Ù¸¥ IP ÁÖ¼Ò ÇÑ°³¸¦ ºÎ¿©ÇÑ´Ù. ¹°·Ð ÀÌÀüó·³
- <code>&lt;VirtualHost&gt;</code> ¼³Á¤ ¼½¼Ç¿¡ ¸ðµÎ ¹­À» ¼öµµ
- ÀÖ´Ù.</p>
-
-<div class="example"><p><code>
-UseCanonicalName Off<br />
-<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-<br />
-&lt;Directory /www/commercial&gt;<br />
-<span class="indent">
- Options FollowSymLinks<br />
- AllowOverride All<br />
-</span>
-&lt;/Directory&gt;<br />
-<br />
-&lt;Directory /www/homepages&gt;<br />
-<span class="indent">
- Options FollowSymLinks<br />
- AllowOverride None<br />
-</span>
-&lt;/Directory&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<span class="indent">
- ServerName www.commercial.isp.com<br />
- <br />
- CustomLog logs/access_log.commercial vcommon<br />
- <br />
- VirtualDocumentRoot /www/commercial/%0/docs<br />
- VirtualScriptAlias /www/commercial/%0/cgi-bin<br />
-</span>
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.45&gt;<br />
-<span class="indent">
- ServerName www.homepages.isp.com<br />
- <br />
- CustomLog logs/access_log.homepages vcommon<br />
- <br />
- VirtualDocumentRoot /www/homepages/%0/docs<br />
- ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</span>
-&lt;/VirtualHost&gt;
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ipbased" id="ipbased">´õ È¿À²ÀûÀÎ IP±â¹Ý °¡»óÈ£½ºÆ®</a></h2>
-
- <p><a href="#simple">ù¹ø° ¿¹</a>¿¡¼­ ³ª´Â ¼³Á¤À» °£´ÜÈ÷
- IP±â¹Ý °¡»óÈ£½ºÆ®·Î ¹Ù²Ü ¼ö ÀÖ´Ù°í ¸»Çß´Ù. ºÒÇàÈ÷µµ
- ±×·± ¼³Á¤Àº ¸Å ¿äû¸¶´Ù DNS¸¦ ã¾Æ¾ßÇϹǷΠ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù.
- À̸§´ë½Å IP ÁÖ¼Ò·Î ÆÄÀϽýºÅÛÀ» ±¸¼ºÇÏ°í °°Àº ¹æ½ÄÀ¸·Î
- ·Î±×¸¦ ¼öÁ¤ÇÏ¸é ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ¼­¹ö¸íÀ»
- ´Ù·ê ÇÊ¿ä°¡ ¾ø¾îÁö°í, DNS °Ë»öµµ ÇÏÁö ¾Ê°Ô µÈ´Ù.</p>
-
-<div class="example"><p><code>
-# IP ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÇÏ¿© ¼­¹ö¸íÀ» ¾Ë¾Æ³½´Ù<br />
-UseCanonicalName DNS<br />
-<br />
-# ·Î±×¸¦ ³ª´­ ¼ö ÀÖµµ·Ï IP ÁÖ¼Ò¸¦ Æ÷ÇÔÇÑ´Ù<br />
-LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# ÆÄÀÏ¸í¿¡ IP ÁÖ¼Ò¸¦ Æ÷ÇÔÇÑ´Ù<br />
-VirtualDocumentRootIP /www/hosts/%0/docs<br />
-VirtualScriptAliasIP /www/hosts/%0/cgi-bin<br />
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="oldversion" id="oldversion">¾ÆÆÄÄ¡ ÀÌÀü ¹öÀü »ç¿ëÇϱâ</a></h2>
-
- <p>À§ ¿¹µéÀº ¾ÆÆÄÄ¡ ¹öÀü 1.3.6 ÀÌÈÄ¿¡ Æ÷ÇÔµÈ
- <code>mod_vhost_alias</code>À» »ç¿ëÇÑ´Ù.
- <code>mod_vhost_alias</code>°¡ ¾ø´Â ¾ÆÆÄÄ¡ ¹öÀüÀ» »ç¿ëÇÑ´Ù¸é
- ÀÌ¹Ì ¸»ÇßµíÀÌ <code>mod_rewrite</code>¸¦ »ç¿ëÇÏ¿©, ´Ü
- Host:-Çì´õ±â¹Ý °¡»óÈ£½ºÆ®¸¸À», ±¸ÇöÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¶Ç ·Î±×¿¡ °üÇÏ¿© ÁÖÀÇÇÒ Á¡ÀÌ ÀÖ´Ù. ¾ÆÆÄÄ¡ 1.3.6¿¡¼­
- ·Î±×Çü½Ä Áö½Ã¾î <code>%V</code>°¡ Æ÷ÇԵǾú°í, ¹öÀü 1.3.0
- - 1.3.3¿¡¼­ ÀÌ ±â´ÉÀ» <code>%v</code> ¿É¼ÇÀÌ ´ë½Å Çß´Ù. ±×·¯³ª
- ¹öÀü 1.3.4¿¡´Â ÀÌ·± ±â´ÉÀÌ ¾ø´Ù. ¾î¶² ¾ÆÆÄÄ¡ ¹öÀü¿¡¼­µµ
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ <code>UseCanonicalName</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ·Î±×¿¡ ÀÌ»óÇÑ ³»¿ëÀÌ ±â·ÏµÉ ¼ö ÀÖ´Ù.
- ±×·¯¹Ç·Î °¡Àå ÁÁÀº ¹æ¹ýÀº <code>%{Host}i</code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© <code>Host:</code> Çì´õ¸¦ Á÷Á¢ ·Î±×¿¡ ³²±â´Â °ÍÀÌ´Ù.
- ¶Ç, ÀÌ ¹æ¹ýÀº <code>%V</code>´Â Æ÷ÇÔÇÏÁö¾Ê´Â <code>:port</code>¸¦
- µÚ¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="simple.rewrite" id="simple.rewrite"><code>mod_rewrite</code>¸¦
- »ç¿ëÇÑ °£´ÜÇÑ µ¿Àû °¡»óÈ£½ºÆ®</a></h2>
-
- <p>´ÙÀ½Àº <a href="#simple">ù¹ø° ¿¹</a>¿Í °°Àº ÀÏÀ» ÇÏ´Â
- <code>httpd.conf</code> ¿¹ÀÌ´Ù. óÀ½ Àý¹ÝÀº ù¹ø° ¿¹¿Í
- °ÅÀÇ ºñ½ÁÇÏÁö¸¸, ÀÌÀü ¹öÀü°úÀÇ È£È¯¼º°ú <code>mod_rewrite</code>ÀÇ
- ÀûÀýÇÑ µ¿ÀÛÀ» À§ÇØ ¼öÁ¤µÇ¾ú´Ù. ³ª¸ÓÁö Àý¹ÝÀº ½ÇÁ¦ ÀÛ¾÷À»
- ÇÏ´Â <code>mod_rewrite</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- <p>Ưº°È÷ ÁÖÀÇÇØ¾ß ÇÒ »çÇ×ÀÌ ÀÖ´Ù. ±âº»ÀûÀ¸·Î
- <code>mod_rewrite</code>´Â (<code>mod_alias</code> µî) ´Ù¸¥
- URI ¹ø¿ª ¸ðµâ ÀÌÀü¿¡ ½ÇÇàµÈ´Ù. ±×·¡¼­ ´Ù¸¥ URI ¹ø¿ª ¸ðµâµé°ú
- °°ÀÌ µ¿ÀÛÇÒ °ÍÀ» °í·ÁÇÏ¿© <code>mod_rewrite</code>¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.
- ¶Ç, µ¿Àû °¡»óÈ£½ºÆ®¿¡¼­ <code>ScriptAlias</code>°ú °°Àº
- ±â´ÉÀ» À§Çؼ­´Â Ưº°ÇÑ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù.</p>
-
-<div class="example"><p><code>
-# Host: Çì´õ¿¡¼­ ¼­¹ö¸íÀ» ¾ò´Â´Ù<br />
-UseCanonicalName Off<br />
-<br />
-# splittable logs<br />
-LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-&lt;Directory /www/hosts&gt;<br />
-<span class="indent">
- # ScriptAlias ½ÄÀ¸·Î CGI ½ÇÇàÀ» °­Á¦ÇÒ ¼ö ¾ø±â¶§¹®¿¡<br />
- # ¿©±â¿¡ ExecCGI¸¦ »ç¿ëÇÑ´Ù<br />
- Options FollowSymLinks ExecCGI<br />
-</span>
-&lt;/Directory&gt;<br />
-<br />
-# ÀÌÁ¦ ¾î·Á¿î ºÎºÐÀÌ´Ù<br />
-<br />
-RewriteEngine On<br />
-<br />
-# Host: Çì´õ¿¡¼­ °¡Á®¿Â ¼­¹ö¸í¿¡´Â ´ë¼Ò¹®ÀÚ°¡ µÚ¼¯¿©ÀÖÀ» ¼ö ÀÖ´Ù<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-## ÀÏ¹Ý ¹®¼­¸¦ ¸ÕÀú ó¸®ÇÑ´Ù:<br />
-# Alias /icons/ °¡ µ¿ÀÛÇϵµ·Ï - ´Ù¸¥ alias¿¡ ´ëÇؼ­µµ ¹Ýº¹<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-# CGI°¡ µ¿ÀÛÇϵµ·Ï<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-# Ưº°ÇÑ ÀÛ¾÷<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1<br />
-<br />
-## ÀÌÁ¦ CGI¸¦ ó¸®ÇÑ´Ù - MIME typeÀ» °­Á¦ÇØ¾ß ÇÑ´Ù<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]<br />
-<br />
-# ³¡!
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="homepages.rewrite" id="homepages.rewrite"><code>mod_rewrite</code>¸¦
- »ç¿ëÇÑ È¨ÆäÀÌÁö ½Ã½ºÅÛ</a></h2>
-
- <p>´ÙÀ½Àº <a href="#homepages">µÎ¹ø° ¿¹</a>¿Í °°Àº ÀÏÀ»
- ÇÑ´Ù.</p>
-
-<div class="example"><p><code>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# CGI°¡ µ¿ÀÛÇϵµ·Ï<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-<br />
-# RewriteRuleÀÌ µ¿ÀÛÇϵµ·Ï È£½ºÆ®¸íÀÌ ¿Ã¹Ù¸¥Áö °Ë»çÇÑ´Ù<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$<br />
-<br />
-# °¡»óÈ£½ºÆ®¸íÀ» URI ¾Õ¿¡ ºÙÀδÙ<br />
-# [C]´Â ÀÌ °á°ú¸¦ °¡Áö°í ´ÙÀ½ ÀçÀÛ¼ºÀ» ¼öÇàÇÔÀ» ¶æÇÑ´Ù<br />
-RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]<br />
-<br />
-# ÀÌÁ¦ ½ÇÁ¦ ÆÄÀϸíÀ» ¸¸µç´Ù<br />
-RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2<br />
-<br />
-# Àüü CGI µð·ºÅ丮¸¦ Á¤ÀÇÇÑ´Ù<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/
-</code></p></div>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="xtra-conf" id="xtra-conf">º°µµÀÇ °¡»óÈ£½ºÆ® ¼³Á¤ÆÄÀÏ
- »ç¿ëÇϱâ</a></h2>
-
- <p>´ÙÀ½Àº <code>mod_rewrite</code>ÀÇ °í±Þ ±â´ÉÀ» »ç¿ëÇÏ¿©
- º°µµÀÇ ¼³Á¤ÆÄÀÏÀ» °¡Áö°í °¡»óÈ£½ºÆ®ÀÇ ¹®¼­·çÆ®¸¦ ¾Ë¾Æ³½´Ù.
- ´õ À¯¿¬ÇÏÁö¸¸ ´õ º¹ÀâÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù.</p>
-
- <p><code>vhost.map</code> ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù:</p>
-
-<div class="example"><p><code>
-www.customer-1.com /www/customers/1<br />
-www.customer-2.com /www/customers/2<br />
-# ...<br />
-www.customer-N.com /www/customers/N<br />
-</code></p></div>
-
- <p><code>http.conf</code>´Â ´ÙÀ½°ú °°´Ù:</p>
-
-<div class="example"><p><code>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# ´ëÀÀÆÄÀÏÀ» Á¤ÀÇÇÑ´Ù<br />
-RewriteMap vhost txt:/www/conf/vhost.map<br />
-<br />
-# À§¿Í °°ÀÌ aliasµéÀ» ó¸®ÇÑ´Ù<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-# ÆÄÀÏ ³»¿ëÀ» °¡Áö°í ã´Â´Ù<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/docs/$1<br />
-<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/cgi-bin/$1
-</code></p></div>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ko/vhosts/mass.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/mass.xml b/docs/manual/vhosts/mass.xml
deleted file mode 100644
index d29d7c7950..0000000000
--- a/docs/manual/vhosts/mass.xml
+++ /dev/null
@@ -1,436 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.9 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="mass.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
- <title>Dynamically configured mass virtual hosting</title>
-
-<summary>
-
- <p>This document describes how to efficiently serve an
- arbitrary number of virtual hosts with Apache 1.3. <!--
-
- Written by Tony Finch (fanf@demon.net) (dot@dotat.at).
-
- Some examples were derived from Ralf S. Engleschall's document
- http://www.engelschall.com/pw/apache/rewriteguide/
-
- Some suggestions were made by Brian Behlendorf.
-
- -->
- </p>
-
-</summary>
-
-<section id="motivation"><title>Motivation</title>
-
- <p>The techniques described here are of interest if your
- <code>httpd.conf</code> contains many
- <code>&lt;VirtualHost&gt;</code> sections that are
- substantially the same, for example:</p>
-
-<example>
-NameVirtualHost 111.22.33.44<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.customer-1.com<br />
- DocumentRoot /www/hosts/www.customer-1.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.customer-2.com<br />
- DocumentRoot /www/hosts/www.customer-2.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;<br />
-# blah blah blah<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.customer-N.com<br />
- DocumentRoot /www/hosts/www.customer-N.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;
-</example>
-
- <p>The basic idea is to replace all of the static
- <code>&lt;VirtualHost&gt;</code> configuration with a mechanism
- that works it out dynamically. This has a number of
- advantages:</p>
-
- <ol>
- <li>Your configuration file is smaller so Apache starts
- faster and uses less memory.</li>
-
- <li>Adding virtual hosts is simply a matter of creating the
- appropriate directories in the filesystem and entries in the
- DNS - you don't need to reconfigure or restart Apache.</li>
- </ol>
-
- <p>The main disadvantage is that you cannot have a different
- log file for each virtual host; however if you have very many
- virtual hosts then doing this is dubious anyway because it eats
- file descriptors. It is better to log to a pipe or a fifo and
- arrange for the process at the other end to distribute the logs
- to the customers (it can also accumulate statistics, etc.).</p>
-
-</section>
-
-<section id="overview"><title>Overview</title>
-
- <p>A virtual host is defined by two pieces of information: its
- IP address, and the contents of the <code>Host:</code> header
- in the HTTP request. The dynamic mass virtual hosting technique
- is based on automatically inserting this information into the
- pathname of the file that is used to satisfy the request. This
- is done most easily using <module>mod_vhost_alias</module>,
- but if you are using a version of Apache up to 1.3.6 then you
- must use <module>mod_rewrite</module>.
- Both of these modules are disabled by default; you must enable
- one of them when configuring and building Apache if you want to
- use this technique.</p>
-
- <p>A couple of things need to be `faked' to make the dynamic
- virtual host look like a normal one. The most important is the
- server name which is used by Apache to generate
- self-referential URLs, etc. It is configured with the
- <code>ServerName</code> directive, and it is available to CGIs
- via the <code>SERVER_NAME</code> environment variable. The
- actual value used at run time is controlled by the <directive
- module="core">UseCanonicalName</directive>
- setting. With <code>UseCanonicalName Off</code> the server name
- comes from the contents of the <code>Host:</code> header in the
- request. With <code>UseCanonicalName DNS</code> it comes from a
- reverse DNS lookup of the virtual host's IP address. The former
- setting is used for name-based dynamic virtual hosting, and the
- latter is used for IP-based hosting. If Apache cannot work out
- the server name because there is no <code>Host:</code> header
- or the DNS lookup fails then the value configured with
- <code>ServerName</code> is used instead.</p>
-
- <p>The other thing to `fake' is the document root (configured
- with <code>DocumentRoot</code> and available to CGIs via the
- <code>DOCUMENT_ROOT</code> environment variable). In a normal
- configuration this setting is used by the core module when
- mapping URIs to filenames, but when the server is configured to
- do dynamic virtual hosting that job is taken over by another
- module (either <code>mod_vhost_alias</code> or
- <code>mod_rewrite</code>) which has a different way of doing
- the mapping. Neither of these modules is responsible for
- setting the <code>DOCUMENT_ROOT</code> environment variable so
- if any CGIs or SSI documents make use of it they will get a
- misleading value.</p>
-
-</section>
-
-<section id="simple"><title>Simple dynamic virtual hosts</title>
-
- <p>This extract from <code>httpd.conf</code> implements the
- virtual host arrangement outlined in the <a
- href="#motivation">Motivation</a> section above, but in a
- generic fashion using <code>mod_vhost_alias</code>.</p>
-
-<example>
-# get the server name from the Host: header<br />
-UseCanonicalName Off<br />
-<br />
-# this log format can be split per-virtual-host based on the first field<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# include the server name in the filenames used to satisfy requests<br />
-VirtualDocumentRoot /www/hosts/%0/docs<br />
-VirtualScriptAlias /www/hosts/%0/cgi-bin
-</example>
-
- <p>This configuration can be changed into an IP-based virtual
- hosting solution by just turning <code>UseCanonicalName
- Off</code> into <code>UseCanonicalName DNS</code>. The server
- name that is inserted into the filename is then derived from
- the IP address of the virtual host.</p>
-
-</section>
-
-<section id="homepages"><title>A virtually hosted homepages system</title>
-
- <p>This is an adjustment of the above system tailored for an
- ISP's homepages server. Using a slightly more complicated
- configuration we can select substrings of the server name to
- use in the filename so that e.g. the documents for
- <code>www.user.isp.com</code> are found in
- <code>/home/user/</code>. It uses a single <code>cgi-bin</code>
- directory instead of one per virtual host.</p>
-
-<example>
-# all the preliminary stuff is the same as above, then<br />
-<br />
-# include part of the server name in the filenames<br />
-VirtualDocumentRoot /www/hosts/%2/docs<br />
-<br />
-# single cgi-bin directory<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</example>
-
- <p>There are examples of more complicated
- <code>VirtualDocumentRoot</code> settings in the
- <module>mod_vhost_alias</module> documentation.</p>
-
-</section>
-
-<section id="combinations"><title>Using more than
- one virtual hosting system on the same server</title>
-
- <p>With more complicated setups you can use Apache's normal
- <code>&lt;VirtualHost&gt;</code> directives to control the
- scope of the various virtual hosting configurations. For
- example, you could have one IP address for homepages customers
- and another for commercial customers with the following setup.
- This can of course be combined with conventional
- <code>&lt;VirtualHost&gt;</code> configuration sections.</p>
-
-<example>
-UseCanonicalName Off<br />
-<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-<br />
-&lt;Directory /www/commercial&gt;<br />
-<indent>
- Options FollowSymLinks<br />
- AllowOverride All<br />
-</indent>
-&lt;/Directory&gt;<br />
-<br />
-&lt;Directory /www/homepages&gt;<br />
-<indent>
- Options FollowSymLinks<br />
- AllowOverride None<br />
-</indent>
-&lt;/Directory&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.commercial.isp.com<br />
- <br />
- CustomLog logs/access_log.commercial vcommon<br />
- <br />
- VirtualDocumentRoot /www/commercial/%0/docs<br />
- VirtualScriptAlias /www/commercial/%0/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.45&gt;<br />
-<indent>
- ServerName www.homepages.isp.com<br />
- <br />
- CustomLog logs/access_log.homepages vcommon<br />
- <br />
- VirtualDocumentRoot /www/homepages/%0/docs<br />
- ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</indent>
-&lt;/VirtualHost&gt;
-</example>
-
-</section>
-
-<section id="ipbased"><title>More efficient IP-based virtual hosting</title>
-
- <p>After <a href="#simple">the first example</a> I noted that
- it is easy to turn it into an IP-based virtual hosting setup.
- Unfortunately that configuration is not very efficient because
- it requires a DNS lookup for every request. This can be avoided
- by laying out the filesystem according to the IP addresses
- themselves rather than the corresponding names and changing the
- logging similarly. Apache will then usually not need to work
- out the server name and so incur a DNS lookup.</p>
-
-<example>
-# get the server name from the reverse DNS of the IP address<br />
-UseCanonicalName DNS<br />
-<br />
-# include the IP address in the logs so they may be split<br />
-LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# include the IP address in the filenames<br />
-VirtualDocumentRootIP /www/hosts/%0/docs<br />
-VirtualScriptAliasIP /www/hosts/%0/cgi-bin<br />
-</example>
-
-</section>
-
-<section id="oldversion"><title>Using older versions of Apache</title>
-
- <p>The examples above rely on <code>mod_vhost_alias</code>
- which appeared after version 1.3.6. If you are using a version
- of Apache without <code>mod_vhost_alias</code> then you can
- implement this technique with <code>mod_rewrite</code> as
- illustrated below, but only for Host:-header-based virtual
- hosts.</p>
-
- <p>In addition there are some things to beware of with logging.
- Apache 1.3.6 is the first version to include the
- <code>%V</code> log format directive; in versions 1.3.0 - 1.3.3
- the <code>%v</code> option did what <code>%V</code> does;
- version 1.3.4 has no equivalent. In all these versions of
- Apache the <code>UseCanonicalName</code> directive can appear
- in <code>.htaccess</code> files which means that customers can
- cause the wrong thing to be logged. Therefore the best thing to
- do is use the <code>%{Host}i</code> directive which logs the
- <code>Host:</code> header directly; note that this may include
- <code>:port</code> on the end which is not the case for
- <code>%V</code>.</p>
-
-</section>
-
-<section id="simple.rewrite"><title>Simple dynamic
- virtual hosts using <code>mod_rewrite</code></title>
-
- <p>This extract from <code>httpd.conf</code> does the same
- thing as <a href="#simple">the first example</a>. The first
- half is very similar to the corresponding part above but with
- some changes for backward compatibility and to make the
- <code>mod_rewrite</code> part work properly; the second half
- configures <code>mod_rewrite</code> to do the actual work.</p>
-
- <p>There are a couple of especially tricky bits: By default,
- <code>mod_rewrite</code> runs before the other URI translation
- modules (<code>mod_alias</code> etc.) so if they are used then
- <code>mod_rewrite</code> must be configured to accommodate
- them. Also, some magic must be performed to do a
- per-dynamic-virtual-host equivalent of
- <code>ScriptAlias</code>.</p>
-
-<example>
-# get the server name from the Host: header<br />
-UseCanonicalName Off<br />
-<br />
-# splittable logs<br />
-LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-&lt;Directory /www/hosts&gt;<br />
-<indent>
- # ExecCGI is needed here because we can't force<br />
- # CGI execution in the way that ScriptAlias does<br />
- Options FollowSymLinks ExecCGI<br />
-</indent>
-&lt;/Directory&gt;<br />
-<br />
-# now for the hard bit<br />
-<br />
-RewriteEngine On<br />
-<br />
-# a ServerName derived from a Host: header may be any case at all<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-## deal with normal documents first:<br />
-# allow Alias /icons/ to work - repeat for other aliases<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-# allow CGIs to work<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-# do the magic<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1<br />
-<br />
-## and now deal with CGIs - we have to force a MIME type<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]<br />
-<br />
-# that's it!
-</example>
-
-</section>
-
-<section id="homepages.rewrite"><title>A
- homepages system using <code>mod_rewrite</code></title>
-
- <p>This does the same thing as <a href="#homepages">the second
- example</a>.</p>
-
-<example>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# allow CGIs to work<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-<br />
-# check the hostname is right so that the RewriteRule works<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$<br />
-<br />
-# concatenate the virtual host name onto the start of the URI<br />
-# the [C] means do the next rewrite on the result of this one<br />
-RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]<br />
-<br />
-# now create the real file name<br />
-RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2<br />
-<br />
-# define the global CGI directory<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/
-</example>
-
-</section>
-
-<section id="xtra-conf"><title>Using a separate virtual
- host configuration file</title>
-
- <p>This arrangement uses more advanced <code>mod_rewrite</code>
- features to get the translation from virtual host to document
- root from a separate configuration file. This provides more
- flexibility but requires more complicated configuration.</p>
-
- <p>The <code>vhost.map</code> file contains something like
- this:</p>
-
-<example>
-www.customer-1.com /www/customers/1<br />
-www.customer-2.com /www/customers/2<br />
-# ...<br />
-www.customer-N.com /www/customers/N<br />
-</example>
-
- <p>The <code>http.conf</code> contains this:</p>
-
-<example>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# define the map file<br />
-RewriteMap vhost txt:/www/conf/vhost.map<br />
-<br />
-# deal with aliases as above<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-# this does the file-based remap<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/docs/$1<br />
-<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/cgi-bin/$1
-</example>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/mass.xml.ko b/docs/manual/vhosts/mass.xml.ko
deleted file mode 100644
index 1586378fea..0000000000
--- a/docs/manual/vhosts/mass.xml.ko
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.9 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="mass.xml.meta">
-<parentdocument href="./">°¡»óÈ£½ºÆ®</parentdocument>
- <title>´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ</title>
-
-<summary>
-
- <p>ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ 1.3¿¡¼­ ´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ È¿À²ÀûÀ¸·Î
- ¼­ºñ½ºÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù. <!--
-
- Written by Tony Finch (fanf@demon.net) (dot@dotat.at).
-
- Some examples were derived from Ralf S. Engleschall's document
- http://www.engelschall.com/pw/apache/rewriteguide/
-
- Some suggestions were made by Brian Behlendorf.
-
- -->
- </p>
-
-</summary>
-
-<section id="motivation"><title>µ¿±â</title>
-
- <p>´ç½ÅÀÇ <code>httpd.conf</code>¿¡ ´ÙÀ½°ú °°ÀÌ ¼­·Î ºñ½ÁÇÑ
- <code>&lt;VirtualHost&gt;</code> ¼½¼ÇµéÀ» ¸¹ÀÌ ÀÖ´Ù¸é ¿©±â¼­
- ¼³¸íÇÏ´Â ¹æ¹ýÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù:</p>
-
-<example>
-NameVirtualHost 111.22.33.44<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.customer-1.com<br />
- DocumentRoot /www/hosts/www.customer-1.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.customer-2.com<br />
- DocumentRoot /www/hosts/www.customer-2.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;<br />
-# ¹Ùº¸ ¹Ùº¸ ¹Ùº¸<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.customer-N.com<br />
- DocumentRoot /www/hosts/www.customer-N.com/docs<br />
- ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;
-</example>
-
- <p>±âº» °³³äÀº Á¤ÀûÀÎ <code>&lt;VirtualHost&gt;</code>
- ¼³Á¤ ¸ðµÎ¸¦ µ¿ÀûÀ¸·Î ó¸®Çϵµ·Ï ´ëüÇÏ´Â °ÍÀÌ´Ù.
- ±×·¯¸é ¸¹Àº ÀåÁ¡ÀÌ ÀÖ´Ù:</p>
-
- <ol>
- <li>¼³Á¤ÆÄÀÏÀÌ ÀÛ¾ÆÁ®¼­ ¾ÆÆÄÄ¡°¡ »¡¸® ½ÃÀÛÇÏ°í ¸Þ¸ð¸®¸¦
- Àû°Ô »ç¿ëÇÑ´Ù.</li>
-
- <li>°¡»óÈ£½ºÆ®¸¦ Ãß°¡ÇϱâÀ§ÇØ ÆÄÀϽýºÅÛ¿¡ Àû´çÇÑ
- µð·ºÅ丮¸¦ ¸¸µé°í DNS¿¡ Ç׸ñÀ» Ãß°¡Çϱ⸸ ÇϸéµÈ´Ù. Áï,
- ¾ÆÆÄÄ¡¸¦ Àç¼³Á¤ÇÏ°í Àç½ÃÀÛÇÒ ÇÊ¿ä°¡ ¾ø´Ù.</li>
- </ol>
-
- <p>´ÜÁ¡Àº °¢ °¡»óÈ£½ºÆ®º°·Î ´Ù¸¥ ·Î±×ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù´Â
- Á¡ÀÌ´Ù. ±×·¯³ª ¸Å¿ì ¸¹Àº °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÑ´Ù¸é ÆÄÀϱâ¼úÀÚ¸¦
- ´Ù ½á¹ö¸®±â¶§¹®¿¡ ¼­·Î ´Ù¸¥ ·Î±×ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ÆÄÀÌÇÁ³ª
- fifo·Î ·Î±×¸¦ º¸³»°í, ¹Þ´Â Æí¿¡¼­ ·Î±×¸¦ ó¸®ÇÏ¿© ³ª´©´Â
- ¹æ¹ýÀÌ (Åë°è µîÀ» ¸ðÀ» ¼öµµ ÀÖ´Ù) ´õ ³´´Ù.</p>
-
-</section>
-
-<section id="overview"><title>°³¿ä</title>
-
- <p>°¡»óÈ£½ºÆ®´Â IP ÁÖ¼Ò¿Í HTTP ¿äûÀÇ <code>Host:</code>
- Çì´õ Á¤º¸·Î Á¤ÀÇÇÑ´Ù. ±âº»ÀûÀ¸·Î ´ë·®ÀÇ
- µ¿Àû °¡»óÈ£½ºÆ® ±â¼úÀº ÀÚµ¿À¸·Î °¡»óÈ£½ºÆ® Á¤º¸¸¦ ¿äûÀÇ
- ÆÄÀÏ°æ·Î¿¡ Æ÷ÇÔÇÑ´Ù. ÀÌ´Â ´ëºÎºÐ <module>mod_vhost_alias</module>¸¦
- »ç¿ëÇÏ¿© ½±°Ô ÇØ°áÇÒ ¼ö ÀÖÁö¸¸, ¾ÆÆÄÄ¡ 1.3.6 ÀÌÇϸ¦ »ç¿ëÇÑ´Ù¸é
- <module>mod_rewrite</module>¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ µÎ ¸ðµâ
- ¸ðµÎ ±âº»ÀûÀ¸·Î ¼­¹ö¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ·Á¸é
- ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÏ°í ÄÄÆÄÀÏÇÒ¶§ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.</p>
-
- <p>µ¿Àû °¡»óÈ£½ºÆ®¸¦ ÀϹÝÀûÀÎ °¡»óÈ£½ºÆ®Ã³·³ º¸ÀÌ°ÔÇÏ·Á¸é
- ¿©·¯°¡Áö¸¦ `¼Ó¿©¾ß' ÇÑ´Ù. °¡Àå Áß¿äÇÑ °ÍÀº ¾ÆÆÄÄ¡°¡ ÀÚ±âÂüÁ¶
- URL µîÀ» ¸¸µé¶§ »ç¿ëÇÒ ¼­¹ö¸íÀÌ´Ù. ¼­¹ö¸íÀº
- <code>ServerName</code> Áö½Ã¾î·Î ¼³Á¤Çϸç, CGI¿¡´Â
- <code>SERVER_NAME</code> ȯ°æº¯¼ö·Î ÁÖ¾îÁø´Ù. ½ÇÇàÁß ½ÇÁ¦
- ¼­¹ö¸íÀº <directive
- module="core">UseCanonicalName</directive> ¼³Á¤¿¡ ´Þ·È´Ù.
- <code>UseCanonicalName Off</code>ÀÌ¸é ¿äûÀÇ <code>Host:</code>
- Çì´õ ³»¿ëÀÌ ¼­¹ö¸íÀÌ µÈ´Ù. <code>UseCanonicalName DNS</code>À̸é
- °¡»óÈ£½ºÆ®ÀÇ IP ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÇÏ¿© ¼­¹ö¸íÀ» ¾Ë¾Æ³½´Ù.
- ÀüÀÚ´Â À̸§±â¹Ý µ¿Àû °¡»óÈ£½ºÆ®¿¡¼­ »ç¿ëÇÏ°í, ÈÄÀÚ´Â IP±â¹Ý
- °¡»óÈ£½ºÆ®¿¡¼­ »ç¿ëÇÑ´Ù. <code>Host:</code> Çì´õ°¡ ¾ø°Å³ª
- DNS °Ë»öÀÌ ½ÇÆÐÇÏ¿© ¾ÆÆÄÄ¡°¡ ¼­¹ö¸íÀ» ¾Ë¾Æ³»Áö ¸øÇϸé
- <code>ServerName</code>À¸·Î ¼³Á¤ÇÑ °ªÀ» ´ë½Å »ç¿ëÇÑ´Ù.</p>
-
- <p>´Ù¸¥ `¼ÓÀÏ' °ÍÀº (<code>DocumentRoot</code>·Î ¼³Á¤Çϸç,
- CGI¿¡´Â <code>DOCUMENT_ROOT</code> ȯ°æº¯¼ö·Î ÁÖ¾îÁö´Â)
- ¹®¼­·çÆ®ÀÌ´Ù. ÀϹÝÀûÀÎ °æ¿ì core ¸ðµâÀÌ ÀÌ ¼³Á¤À» »ç¿ëÇÏ¿©
- URI¿¡ ÇØ´çÇÏ´Â ÆÄÀϸíÀ» ãÁö¸¸, ¼­¹ö¸¦ µ¿Àû °¡»óÈ£½ºÆÃÀ» ÇÒ¶§´Â ´Ù¸¥
- ¸ðµâÀÌ (<code>mod_vhost_alias</code>³ª <code>mod_rewrite</code>)
- ´Ù¸¥ ¹æ¹ýÀ¸·Î ÀÌ·± ÀÛ¾÷À» ÇÑ´Ù. µÎ ¸ðµâ ¸ðµÎ
- <code>DOCUMENT_ROOT</code> ȯ°æº¯¼ö¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î
- CGI³ª SSI ¹®¼­°¡ ÀÌ °ªÀ» »ç¿ëÇÑ´Ù¸é À߸øµÈ °á°ú¸¦ ¾òÀ» ¼ö
- ÀÖ´Ù.</p>
-
-</section>
-
-<section id="simple"><title>°£´ÜÇÑ µ¿Àû °¡»óÈ£½ºÆ®</title>
-
- <p>À§ <a href="#motivation">µ¿±â</a> ÀýÀÇ °¡»óÈ£½ºÆ®
- ¼³Á¤À» <code>mod_vhost_alias</code>¸¦ »ç¿ëÇÏ¿© ´õ ÀϹÝÀûÀ¸·Î
- ±¸ÇöÇß´Ù.</p>
-
-<example>
-# Host: Çì´õ¿¡¼­ ¼­¹ö¸íÀ» ¾Ë¾Æ³½´Ù<br />
-UseCanonicalName Off<br />
-<br />
-# ù¹ø° Çʵ带 »ç¿ëÇÏ¿© ÀÌ ·Î±×¸¦ °¡»óÈ£½ºÆ®º°·Î ³ª´­ ¼ö ÀÖ´Ù<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# ¿äûÀ» ó¸®ÇϱâÀ§ÇØ ÆÄÀÏ¸í¿¡ ¼­¹ö¸íÀ» Æ÷ÇÔÇÑ´Ù<br />
-VirtualDocumentRoot /www/hosts/%0/docs<br />
-VirtualScriptAlias /www/hosts/%0/cgi-bin
-</example>
-
- <p>ÀÌ ¼³Á¤¿¡¼­ <code>UseCanonicalName Off</code>¸¦
- <code>UseCanonicalName DNS</code>·Î º¯°æÇϱ⸸ Çϸé IP±â¹Ý
- °¡»óÈ£½ºÆ®°¡ µÈ´Ù. °¡»óÈ£½ºÆ®ÀÇ IP ÁÖ¼Ò¸¦ °¡Áö°í
- ÆÄÀÏ¸í¿¡ Ãß°¡ÇÒ ¼­¹ö¸íÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
-
-</section>
-
-<section id="homepages"><title>°¡»óÀ¸·Î È£½ºÆ®Çϴ ȨÆäÀÌÁö ½Ã½ºÅÛ</title>
-
- <p>ISP ȨÆäÀÌÁö ¼­¹ö¸¦ À§ÇØ À§ÀÇ ¼³Á¤À» ¼öÁ¤Çß´Ù. Á¶±Ý ´õ
- º¹ÀâÇÑ ¼³Á¤À» »ç¿ëÇϸé <code>www.user.isp.com</code>ÀÇ ¹®¼­¸¦
- <code>/home/user/</code>¿¡ µÎ´Â ½ÄÀ¸·Î ¼­¹ö¸íÀÇ ÀϺθ¦ °¡Áö°í
- ÆÄÀϸíÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ ¼³Á¤Àº
- <code>cgi-bin</code>À» °¢ °¡»óÈ£½ºÆ®°¡ µû·Î °¡ÁöÁö¾Ê°í
- ¸ðµç °¡»óÈ£½ºÆ®°¡ °°ÀÌ »ç¿ëÇÑ´Ù.</p>
-
-<example>
-# ±âº»ÀûÀÎ ³»¿ëÀº À§¿Í °°´Ù. ±×¸®°í<br />
-<br />
-# ÆÄÀÏ¸í¿¡ ¼­¹ö¸íÀÇ ÀϺθ¦ Æ÷ÇÔÇÑ´Ù<br />
-VirtualDocumentRoot /www/hosts/%2/docs<br />
-<br />
-# ÇϳªÀÇ cgi-bin µð·ºÅ丮<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</example>
-
- <p><module>mod_vhost_alias</module> ¹®¼­¿¡´Â ´õ º¹ÀâÇÑ
- <code>VirtualDocumentRoot</code> ¼³Á¤ÀÇ ¿¹°¡ ÀÖ´Ù.</p>
-
-</section>
-
-<section id="combinations"><title>ÇÑ ¼­¹ö¿¡ ¿©·¯ °¡»óÈ£½ºÆ®
- ½Ã½ºÅÛ »ç¿ëÇϱâ</title>
-
- <p>´õ º¹ÀâÇÑ ¼³Á¤ÀÇ ¿¹·Î ¾ÆÆÄÄ¡ÀÇ ÀϹÝÀûÀÎ
- <code>&lt;VirtualHost&gt;</code> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© ¿©·¯
- °¡»óÈ£½ºÆ® ¼³Á¤ÀÇ ¹üÀ§¸¦ Á¶ÀýÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú
- °°Àº ¼³Á¤Àº ȨÆäÀÌÁö °í°´¿¡ IP ÁÖ¼Ò ÇÑ°³, »ó¾÷ÀûÀÎ
- °í°´¿¡°Ô ´Ù¸¥ IP ÁÖ¼Ò ÇÑ°³¸¦ ºÎ¿©ÇÑ´Ù. ¹°·Ð ÀÌÀüó·³
- <code>&lt;VirtualHost&gt;</code> ¼³Á¤ ¼½¼Ç¿¡ ¸ðµÎ ¹­À» ¼öµµ
- ÀÖ´Ù.</p>
-
-<example>
-UseCanonicalName Off<br />
-<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-<br />
-&lt;Directory /www/commercial&gt;<br />
-<indent>
- Options FollowSymLinks<br />
- AllowOverride All<br />
-</indent>
-&lt;/Directory&gt;<br />
-<br />
-&lt;Directory /www/homepages&gt;<br />
-<indent>
- Options FollowSymLinks<br />
- AllowOverride None<br />
-</indent>
-&lt;/Directory&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.44&gt;<br />
-<indent>
- ServerName www.commercial.isp.com<br />
- <br />
- CustomLog logs/access_log.commercial vcommon<br />
- <br />
- VirtualDocumentRoot /www/commercial/%0/docs<br />
- VirtualScriptAlias /www/commercial/%0/cgi-bin<br />
-</indent>
-&lt;/VirtualHost&gt;<br />
-<br />
-&lt;VirtualHost 111.22.33.45&gt;<br />
-<indent>
- ServerName www.homepages.isp.com<br />
- <br />
- CustomLog logs/access_log.homepages vcommon<br />
- <br />
- VirtualDocumentRoot /www/homepages/%0/docs<br />
- ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</indent>
-&lt;/VirtualHost&gt;
-</example>
-
-</section>
-
-<section id="ipbased"><title>´õ È¿À²ÀûÀÎ IP±â¹Ý °¡»óÈ£½ºÆ®</title>
-
- <p><a href="#simple">ù¹ø° ¿¹</a>¿¡¼­ ³ª´Â ¼³Á¤À» °£´ÜÈ÷
- IP±â¹Ý °¡»óÈ£½ºÆ®·Î ¹Ù²Ü ¼ö ÀÖ´Ù°í ¸»Çß´Ù. ºÒÇàÈ÷µµ
- ±×·± ¼³Á¤Àº ¸Å ¿äû¸¶´Ù DNS¸¦ ã¾Æ¾ßÇϹǷΠ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù.
- À̸§´ë½Å IP ÁÖ¼Ò·Î ÆÄÀϽýºÅÛÀ» ±¸¼ºÇÏ°í °°Àº ¹æ½ÄÀ¸·Î
- ·Î±×¸¦ ¼öÁ¤ÇÏ¸é ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ¾ÆÆÄÄ¡´Â ¼­¹ö¸íÀ»
- ´Ù·ê ÇÊ¿ä°¡ ¾ø¾îÁö°í, DNS °Ë»öµµ ÇÏÁö ¾Ê°Ô µÈ´Ù.</p>
-
-<example>
-# IP ÁÖ¼Ò¸¦ ¿ªDNS °Ë»öÇÏ¿© ¼­¹ö¸íÀ» ¾Ë¾Æ³½´Ù<br />
-UseCanonicalName DNS<br />
-<br />
-# ·Î±×¸¦ ³ª´­ ¼ö ÀÖµµ·Ï IP ÁÖ¼Ò¸¦ Æ÷ÇÔÇÑ´Ù<br />
-LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# ÆÄÀÏ¸í¿¡ IP ÁÖ¼Ò¸¦ Æ÷ÇÔÇÑ´Ù<br />
-VirtualDocumentRootIP /www/hosts/%0/docs<br />
-VirtualScriptAliasIP /www/hosts/%0/cgi-bin<br />
-</example>
-
-</section>
-
-<section id="oldversion"><title>¾ÆÆÄÄ¡ ÀÌÀü ¹öÀü »ç¿ëÇϱâ</title>
-
- <p>À§ ¿¹µéÀº ¾ÆÆÄÄ¡ ¹öÀü 1.3.6 ÀÌÈÄ¿¡ Æ÷ÇÔµÈ
- <code>mod_vhost_alias</code>À» »ç¿ëÇÑ´Ù.
- <code>mod_vhost_alias</code>°¡ ¾ø´Â ¾ÆÆÄÄ¡ ¹öÀüÀ» »ç¿ëÇÑ´Ù¸é
- ÀÌ¹Ì ¸»ÇßµíÀÌ <code>mod_rewrite</code>¸¦ »ç¿ëÇÏ¿©, ´Ü
- Host:-Çì´õ±â¹Ý °¡»óÈ£½ºÆ®¸¸À», ±¸ÇöÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>¶Ç ·Î±×¿¡ °üÇÏ¿© ÁÖÀÇÇÒ Á¡ÀÌ ÀÖ´Ù. ¾ÆÆÄÄ¡ 1.3.6¿¡¼­
- ·Î±×Çü½Ä Áö½Ã¾î <code>%V</code>°¡ Æ÷ÇԵǾú°í, ¹öÀü 1.3.0
- - 1.3.3¿¡¼­ ÀÌ ±â´ÉÀ» <code>%v</code> ¿É¼ÇÀÌ ´ë½Å Çß´Ù. ±×·¯³ª
- ¹öÀü 1.3.4¿¡´Â ÀÌ·± ±â´ÉÀÌ ¾ø´Ù. ¾î¶² ¾ÆÆÄÄ¡ ¹öÀü¿¡¼­µµ
- <code>.htaccess</code> ÆÄÀÏ¿¡¼­ <code>UseCanonicalName</code>
- Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ·Î±×¿¡ ÀÌ»óÇÑ ³»¿ëÀÌ ±â·ÏµÉ ¼ö ÀÖ´Ù.
- ±×·¯¹Ç·Î °¡Àå ÁÁÀº ¹æ¹ýÀº <code>%{Host}i</code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¿© <code>Host:</code> Çì´õ¸¦ Á÷Á¢ ·Î±×¿¡ ³²±â´Â °ÍÀÌ´Ù.
- ¶Ç, ÀÌ ¹æ¹ýÀº <code>%V</code>´Â Æ÷ÇÔÇÏÁö¾Ê´Â <code>:port</code>¸¦
- µÚ¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.</p>
-
-</section>
-
-<section id="simple.rewrite"><title><code>mod_rewrite</code>¸¦
- »ç¿ëÇÑ °£´ÜÇÑ µ¿Àû °¡»óÈ£½ºÆ®</title>
-
- <p>´ÙÀ½Àº <a href="#simple">ù¹ø° ¿¹</a>¿Í °°Àº ÀÏÀ» ÇÏ´Â
- <code>httpd.conf</code> ¿¹ÀÌ´Ù. óÀ½ Àý¹ÝÀº ù¹ø° ¿¹¿Í
- °ÅÀÇ ºñ½ÁÇÏÁö¸¸, ÀÌÀü ¹öÀü°úÀÇ È£È¯¼º°ú <code>mod_rewrite</code>ÀÇ
- ÀûÀýÇÑ µ¿ÀÛÀ» À§ÇØ ¼öÁ¤µÇ¾ú´Ù. ³ª¸ÓÁö Àý¹ÝÀº ½ÇÁ¦ ÀÛ¾÷À»
- ÇÏ´Â <code>mod_rewrite</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
-
- <p>Ưº°È÷ ÁÖÀÇÇØ¾ß ÇÒ »çÇ×ÀÌ ÀÖ´Ù. ±âº»ÀûÀ¸·Î
- <code>mod_rewrite</code>´Â (<code>mod_alias</code> µî) ´Ù¸¥
- URI ¹ø¿ª ¸ðµâ ÀÌÀü¿¡ ½ÇÇàµÈ´Ù. ±×·¡¼­ ´Ù¸¥ URI ¹ø¿ª ¸ðµâµé°ú
- °°ÀÌ µ¿ÀÛÇÒ °ÍÀ» °í·ÁÇÏ¿© <code>mod_rewrite</code>¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.
- ¶Ç, µ¿Àû °¡»óÈ£½ºÆ®¿¡¼­ <code>ScriptAlias</code>°ú °°Àº
- ±â´ÉÀ» À§Çؼ­´Â Ưº°ÇÑ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù.</p>
-
-<example>
-# Host: Çì´õ¿¡¼­ ¼­¹ö¸íÀ» ¾ò´Â´Ù<br />
-UseCanonicalName Off<br />
-<br />
-# splittable logs<br />
-LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-&lt;Directory /www/hosts&gt;<br />
-<indent>
- # ScriptAlias ½ÄÀ¸·Î CGI ½ÇÇàÀ» °­Á¦ÇÒ ¼ö ¾ø±â¶§¹®¿¡<br />
- # ¿©±â¿¡ ExecCGI¸¦ »ç¿ëÇÑ´Ù<br />
- Options FollowSymLinks ExecCGI<br />
-</indent>
-&lt;/Directory&gt;<br />
-<br />
-# ÀÌÁ¦ ¾î·Á¿î ºÎºÐÀÌ´Ù<br />
-<br />
-RewriteEngine On<br />
-<br />
-# Host: Çì´õ¿¡¼­ °¡Á®¿Â ¼­¹ö¸í¿¡´Â ´ë¼Ò¹®ÀÚ°¡ µÚ¼¯¿©ÀÖÀ» ¼ö ÀÖ´Ù<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-## ÀÏ¹Ý ¹®¼­¸¦ ¸ÕÀú ó¸®ÇÑ´Ù:<br />
-# Alias /icons/ °¡ µ¿ÀÛÇϵµ·Ï - ´Ù¸¥ alias¿¡ ´ëÇؼ­µµ ¹Ýº¹<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-# CGI°¡ µ¿ÀÛÇϵµ·Ï<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-# Ưº°ÇÑ ÀÛ¾÷<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1<br />
-<br />
-## ÀÌÁ¦ CGI¸¦ ó¸®ÇÑ´Ù - MIME typeÀ» °­Á¦ÇØ¾ß ÇÑ´Ù<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]<br />
-<br />
-# ³¡!
-</example>
-
-</section>
-
-<section id="homepages.rewrite"><title><code>mod_rewrite</code>¸¦
- »ç¿ëÇÑ È¨ÆäÀÌÁö ½Ã½ºÅÛ</title>
-
- <p>´ÙÀ½Àº <a href="#homepages">µÎ¹ø° ¿¹</a>¿Í °°Àº ÀÏÀ»
- ÇÑ´Ù.</p>
-
-<example>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# CGI°¡ µ¿ÀÛÇϵµ·Ï<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-<br />
-# RewriteRuleÀÌ µ¿ÀÛÇϵµ·Ï È£½ºÆ®¸íÀÌ ¿Ã¹Ù¸¥Áö °Ë»çÇÑ´Ù<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$<br />
-<br />
-# °¡»óÈ£½ºÆ®¸íÀ» URI ¾Õ¿¡ ºÙÀδÙ<br />
-# [C]´Â ÀÌ °á°ú¸¦ °¡Áö°í ´ÙÀ½ ÀçÀÛ¼ºÀ» ¼öÇàÇÔÀ» ¶æÇÑ´Ù<br />
-RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]<br />
-<br />
-# ÀÌÁ¦ ½ÇÁ¦ ÆÄÀϸíÀ» ¸¸µç´Ù<br />
-RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2<br />
-<br />
-# Àüü CGI µð·ºÅ丮¸¦ Á¤ÀÇÇÑ´Ù<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/
-</example>
-
-</section>
-
-<section id="xtra-conf"><title>º°µµÀÇ °¡»óÈ£½ºÆ® ¼³Á¤ÆÄÀÏ
- »ç¿ëÇϱâ</title>
-
- <p>´ÙÀ½Àº <code>mod_rewrite</code>ÀÇ °í±Þ ±â´ÉÀ» »ç¿ëÇÏ¿©
- º°µµÀÇ ¼³Á¤ÆÄÀÏÀ» °¡Áö°í °¡»óÈ£½ºÆ®ÀÇ ¹®¼­·çÆ®¸¦ ¾Ë¾Æ³½´Ù.
- ´õ À¯¿¬ÇÏÁö¸¸ ´õ º¹ÀâÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù.</p>
-
- <p><code>vhost.map</code> ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù:</p>
-
-<example>
-www.customer-1.com /www/customers/1<br />
-www.customer-2.com /www/customers/2<br />
-# ...<br />
-www.customer-N.com /www/customers/N<br />
-</example>
-
- <p><code>http.conf</code>´Â ´ÙÀ½°ú °°´Ù:</p>
-
-<example>
-RewriteEngine on<br />
-<br />
-RewriteMap lowercase int:tolower<br />
-<br />
-# ´ëÀÀÆÄÀÏÀ» Á¤ÀÇÇÑ´Ù<br />
-RewriteMap vhost txt:/www/conf/vhost.map<br />
-<br />
-# À§¿Í °°ÀÌ aliasµéÀ» ó¸®ÇÑ´Ù<br />
-RewriteCond %{REQUEST_URI} !^/icons/<br />
-RewriteCond %{REQUEST_URI} !^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-# ÆÄÀÏ ³»¿ëÀ» °¡Áö°í ã´Â´Ù<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/docs/$1<br />
-<br />
-RewriteCond %{REQUEST_URI} ^/cgi-bin/<br />
-RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$<br />
-RewriteCond ${vhost:%1} ^(/.*)$<br />
-RewriteRule ^/(.*)$ %1/cgi-bin/$1
-</example>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/mass.xml.meta b/docs/manual/vhosts/mass.xml.meta
deleted file mode 100644
index 4c77565077..0000000000
--- a/docs/manual/vhosts/mass.xml.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>mass</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>en</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/docs/manual/vhosts/name-based.html b/docs/manual/vhosts/name-based.html
deleted file mode 100644
index 3f1e91843f..0000000000
--- a/docs/manual/vhosts/name-based.html
+++ /dev/null
@@ -1,15 +0,0 @@
-URI: name-based.html.de
-Content-Language: de
-Content-type: text/html; charset=ISO-8859-1
-
-URI: name-based.html.en
-Content-Language: en
-Content-type: text/html; charset=ISO-8859-1
-
-URI: name-based.html.ja.euc-jp
-Content-Language: ja
-Content-type: text/html; charset=EUC-JP
-
-URI: name-based.html.ko.euc-kr
-Content-Language: ko
-Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/vhosts/name-based.html.de b/docs/manual/vhosts/name-based.html.de
deleted file mode 100644
index b1e9902191..0000000000
--- a/docs/manual/vhosts/name-based.html.de
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Unterstützung namensbasierter virtueller Hosts - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP-Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Dokumentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>Unterstützung namensbasierter virtueller Hosts</h1>
-<div class="toplang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/vhosts/name-based.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>Das Dokument beschreibt, wann und wie namensbasierte virtuelle Hosts zu
- verwenden sind.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#namevip">Namensbasierte gegenüber IP-basierten
- virtuellen Hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#using">Die Verwendung von namensbasierten virtuellen Hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compat">Kompatibilität mit älteren Browsern</a></li>
-</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="ip-based.html">Unterstützung IP-basierter virtueller
- Hosts</a></li><li><a href="details.html">Tiefergehende Erörterung der Zuweisung
- virtueller Hosts</a></li><li><a href="mass.html">Dynamisch konfiguriertes
- Massen-Virtual-Hosting</a></li><li><a href="examples.html">Beispiele für virtuelle Hosts in typischen
- Installationen</a></li><li><a href="examples.html#serverpath">ServerPath-Beispielkonfiguration</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="namevip" id="namevip">Namensbasierte gegenüber IP-basierten
- virtuellen Hosts</a></h2>
-
- <p>IP-basierte virtuelle Hosts verwenden die IP-Adresse der Verbindung, um den
- korrekten virtuellen Host zur Bedienung einer Anfrage zu ermitteln. Folglich
- benötigen Sie eine IP-Adresse für jeden virtuellen Host. Bei der
- Verwendung von namensbasierten virtuellen Hosts verläßt sich der
- Server darauf, dass der Client den Hostnamen als Bestandteil der HTTP-Header
- angibt. Durch Anwendung dieser Technik können sich mehrere verschiedene
- Hosts die gleiche IP-Adresse teilen.</p>
-
- <p>Die Verwendung von namensbasierten virtuellen Hosts ist gewöhnlich
- einfacher. Sie müssen lediglich Ihren DNS-Server darauf einstellen,
- jeden Hostnamen auf die richtige IP-Adresse abzubilden, und dann den Apache
- HTTP Server so konfigurieren, dass er die verschiedenen Hostnamen erkennt.
- Namensbasierte virtuelle Hosts entschärfen auch den Bedarf an
- knappen IP-Adressen. Daher sollten Sie namensbasierte virtuelle Hosts
- verwenden, sofern kein besonderer Grund dafür existiert, IP-basierte
- virtuelle Hosts zu wählen. Mögliche Gründe für die
- Verwendung IP-basierter virtueller Hosts sind:</p>
-
- <ul>
- <li>Einige antike Clients sind nicht kompatibel zu namensbasierten
- virtuellen Hosts. Damit namensbasierte virtuelle Hosts funktionieren,
- muss der Client den HTTP-Host-Header senden. Dies ist bei HTTP/1.1
- vorgeschrieben und in allen modernen HTTP/1.0-Browsern als Erweiterung
- implementiert. Wenn Sie Unterstützung für veraltete Clients
- benötigen und dennoch namensbasierte virtuelle Hosts verwenden,
- dann finden Sie eine mögliche Lösung dafür am Ende des
- Dokuments.</li>
-
- <li>Namensbasierte virtuelle Hosts können aufgrund der Natur des
- SSL-Protokolls nicht mit SSL-gesicherten Servern verwendet werden.</li>
-
- <li>Einige Betriebssysteme und Netzwerkanlagen setzen Techniken zum
- Bandbreiten-Management ein, die nicht zwischen Hosts unterscheiden
- können, wenn diese nicht auf verschiedenen IP-Adressen liegen.</li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Die Verwendung von namensbasierten virtuellen Hosts</a></h2>
-
- <table class="related"><tr><th>Referenzierte Module</th><th>Referenzierte Direktiven</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li><li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li><li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li><li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>Um namensbasierte virtuelle Hosts zu verwenden, müssen Sie die
- IP-Adresse (und möglicherweise den Port) des Servers benennen, an
- der Anfragen für die Hosts entgegengenommen werden. Dies wird mit
- der Direktive <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- eingestellt. Im Normalfall, wenn alle IP-Adressen des Server verwendet
- werden sollen, können Sie <code>*</code> als Argument für
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> verwenden. Wenn Sie
- vorhaben, mehrere Ports zu nutzen (etwa wenn SSL läuft), sollten
- Sie dem Argument einen Port hinzufügen, wie zum Beispiel
- <code>*:80</code>. Beachten Sie,
- dass die Angabe einer IP-Adresse in einer <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>-Anweisung den Server nicht
- automatisch an dieser Adresse lauschen läßt. Lesen Sie bitte "<a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen und
- Ports</a>" für weitere Details. Zusätzlich muss jede hier
- angegebene IP-Adresse einer Netzwerkkarte des Servers zugeordnet sein.</p>
-
- <p>Der nächste Schritt ist die Erstellung eines <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Blocks für jeden einzelnen
- Host, den Sie bedienen wollen. Das Argument der Direktive <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> sollte das gleiche
- sein wie das Argument der <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>-Anweisung (d.h. eine IP-Adresse
- oder <code>*</code> für alle Adressen). Innerhalb jedes <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Blocks benötigen
- Sie zumindestens eine <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>-Anweisung, um zu bestimmen, welcher
- Host bedient wird, und eine <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>-Anweisung, um anzugeben, wo im
- Dateisystem der Inhalt des Hosts abgelegt ist.</p>
-
- <div class="note"><h3>Der Hauptserver verschwindet</h3>
- Wenn Sie virtuelle Hosts zu einem bestehenden Webserver hinzufügen,
- müssen Sie auch einen <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Block für den bestehenden Host
- <span class="transnote">(<em>Anm.d.Ü.:</em> und bisherigen Hauptserver)</span> erstellen.
- Die <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>- und
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>-Anweisungen zu diesem
- virtuellen Host sollten die gleichen sein wie die globalen <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>- und <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>-Anweisungen. Führen Sie diesen
- virtuellen Host als erstes in der Konfigurationsdatei auf, so dass er als
- Standard-Host fungiert.
- </div>
-
- <p>Vorausgesetzt, Sie bedienen z.B. die Domain
- <code>www.domain.tld</code> und möchten den virtuellen Host
- <code>www.otherdomain.tld</code> hinzufügen, welcher auf
- die gleiche IP-Adresse zeigt. Dann fügen Sie einfach Folgendes der
- <code>httpd.conf</code> hinzu:</p>
-
- <div class="example"><p><code>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p>Sie können anstelle des <code>*</code> bei den beiden Anweisungen
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> und <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> alternativ eine
- eindeutige IP-Adresse angeben. Das kann man beispielsweise machen, um
- einige namensbasierte virtuelle Hosts auf einer IP-Adresse zu betreiben und
- entweder IP-basierte oder ein anderes Set von namensbasierten virtuellen
- Hosts auf einer anderen Adresse.</p>
-
- <p>Viele Server wollen unter mehr als einem Namen erreichbar sein. Die
- Direktive <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>, die innerhalb
- des <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Abschnittes angegeben wird,
- ermöglicht dies. Zum Beispiel zeigt die <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>-Anweisung in dem ersten <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Block oben an, dass die
- aufgeführten Namen alternative Namen sind, die man verwenden kann, um
- das gleiche Webangebot zu erreichen:</p>
-
- <div class="example"><p><code>
- ServerAlias domain.tld *.domain.tld
- </code></p></div>
-
- <p>Anfragen für alle Hosts der Domain <code>domain.tld</code> werden
- von dem virtuellen Host <code>www.domain.tld</code> bedient. Die
- Platzhalter <code>*</code> und <code>?</code> können anstelle
- entsprechender Namen verwendet werden. Natürlich können Sie nicht
- einfach Namen erfinden und diese bei <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> oder <code>ServerAlias</code>
- angeben, Sie müssen zunächst Ihren DNS Server entsprechend
- konfigurieren, dass er diese Namen auf die mit Ihrem Server verknüpfte
- IP-Adresse abbildet.</p>
-
- <p>Und schlußendlich können Sie die Konfiguration der virtuellen
- Hosts mittels Angabe weiterer Direktiven innherhalb der <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Container
- feineinstellen. Die meisten Direktiven können in diesen Containern
- angegeben werden und verändern dann ausschließlich die
- Konfiguration des entsprechenden virtuellen Hosts. Prüfen Sie den <a href="../mod/directive-dict.html#Context">Kontext</a> einer Direktive, um
- herauszufinden, ob eine bestimmte Direktive zulässig ist.
- Im <em>Hauptserver-Kontext</em> (außerhalb der <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Container) definierte
- Konfigurationsanweisungen werden nur dann angewendet, wenn sie nicht durch
- Einstellungen des virtuellen Hosts außer Kraft gesetzt wurden.</p>
-
- <p>Wenn nun eine Anfrage eintrifft, prüft der Server zuerst, ob sie eine
- IP-Adresse verwendet, die der <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>-Anweisung entspricht. Ist dies der
- Fall, dann sieht er sich jeden <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Abschnitt mit einer passenden
- IP-Adresse an und versucht den einen zu finden, dessen <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>- oder <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>-Anweisung mit dem gewünschten
- Hostnamen übereinstimmt. Findet er einen, dann verwendet er die
- Konfiguration dieses Servers. Wird kein passender virtueller Host gefunden,
- dann wird <strong>der erste angegeben virtuelle Host</strong> verwendet,
- dessen IP-Adresse paßt.</p>
-
- <p>Die Folge davon ist, dass der erste aufgeführte virtuelle Host der
- <em>Standard</em>-Virtual-Host ist. Die <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>-Anweisung des <em>Hauptservers</em>
- wird <strong>niemals</strong> verwendet, wenn eine IP-Adresse mit einer
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>-Anweisung
- übereinstimmt. Wenn Sie eine spezielle Konfiguration für Anfragen
- angeben möchten, die keinem bestimmten virtuellen Host entsprechen,
- packen Sie diese Konfiguration einfach in einen <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>-Container und führen diesen als
- erstes in der Konfigurationsdatei auf.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">Kompatibilität mit älteren Browsern</a></h2>
-
- <p>Wie zuvor erwähnt gibt es einige Clients, die nicht die notwendigen
- Daten senden, mit denen namensbasierte virtuelle Hosts korrekt
- funktionieren. Diesen Clients werden stets die Seiten des ersten, für
- diese IP-Adresse aufgeführten virtuellen Hosts gesendet werden (des
- <cite>primären</cite> namensbasierten virtuellen Hosts).</p>
-
- <div class="note"><h3>Was bedeutet älter?</h3>
- <p>Beachten Sie bitte, wenn wir von älter sprechen, meinen wir auch
- älter. Es ist sehr unwahrscheinlich, dass sie einen dieser Browser
- heutzutage in Verwendung finden werden. Alle aktuellen Browser-Versionen
- senden den <code>Host</code>-Header, so wie er für namensbasierte
- virtuelle Hosts benäötigt wird.</p>
- </div>
-
- <p>Mit der Direktive <code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code> existiert
- eine mögliche Behelfskonstruktion, obgleich sie etwas schwerfällig
- ist:</p>
-
- <p>Beispielkonfiguration:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p>Was bedeutet das? Es bedeutet, dass eine Anfrage für eine mit
- "<code>/domain</code>" beginnende URI von dem virtuellen Host
- <code>www.domain.tld</code> bedient wird. Dies heißt, dass die Seiten
- für alle Clients unter <code>http://www.domain.tld/domain/</code>
- abrufbar sind, wenngleich Clients, die den Header <code>Host:</code>
- senden, auch über <code>http://www.domain.tld/</code> auf sie zugreifen
- können.</p>
-
- <p>Legen Sie einen Link auf der Seite Ihres primären virtuellen Hosts zu
- <code>http://www.domain.tld/domain/</code>, um die Behelfslösung
- verfügbar zu machen. Bei den Seiten der virtuellen Hosts müssen
- Sie dann sicherstellen, entweder außschließlich relative Links
- (<em>z.B.</em> "<code>file.html</code>" oder
- "<code>../icons/image.gif</code>") zu verwenden oder Links, die das
- einleitende <code>/domain/</code> enthalten (<em>z.B.</em>,
- "<code>http://www.domain.tld/domain/misc/file.html</code>" oder
- "<code>/domain/misc/file.html</code>").</p>
-
- <p>Dies erfordert etwas Disziplin, die Befolgung dieser Richtlinien stellt
- jedoch größtenteils sicher, dass Ihre Seiten mit allen Browsern
- funktionieren, alten wie neuen.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Verfügbare Sprachen: </span><a href="../de/vhosts/name-based.html" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Module</a> | <a href="../mod/directives.html">Direktiven</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossar</a> | <a href="../sitemap.html">Seitenindex</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/name-based.html.en b/docs/manual/vhosts/name-based.html.en
deleted file mode 100644
index 7b27ac1208..0000000000
--- a/docs/manual/vhosts/name-based.html.en
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Name-based Virtual Host Support - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>Name-based Virtual Host Support</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/vhosts/name-based.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>This document describes when and how to use name-based virtual hosts.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#namevip">Name-based vs. IP-based Virtual Hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#using">Using Name-based Virtual Hosts</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compat">Compatibility with Older Browsers</a></li>
-</ul><h3>See also</h3><ul class="seealso"><li><a href="ip-based.html">IP-based Virtual Host Support</a></li><li><a href="details.html">An In-Depth Discussion of Virtual Host Matching</a></li><li><a href="mass.html">Dynamically configured mass virtual hosting</a></li><li><a href="examples.html">Virtual Host examples for common setups</a></li><li><a href="examples.html#serverpath">ServerPath configuration example</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="namevip" id="namevip">Name-based vs. IP-based Virtual Hosts</a></h2>
-
- <p>IP-based virtual hosts use the IP address of the connection to
- determine the correct virtual host to serve. Therefore you need to
- have a separate IP address for each host. With name-based virtual
- hosting, the server relies on the client to report the hostname as
- part of the HTTP headers. Using this technique, many different hosts
- can share the same IP address.</p>
-
- <p>Name-based virtual hosting is usually simpler, since you need
- only configure your DNS server to map each hostname to the correct
- IP address and then configure the Apache HTTP Server to recognize
- the different hostnames. Name-based virtual hosting also eases
- the demand for scarce IP addresses. Therefore you should use
- name-based virtual hosting unless there is a specific reason to
- choose IP-based virtual hosting. Some reasons why you might consider
- using IP-based virtual hosting:</p>
-
- <ul>
- <li>Some ancient clients are not compatible with name-based virtual
- hosting. For name-based virtual hosting to work, the client must send
- the HTTP Host header. This is required by HTTP/1.1, and is
- implemented by all modern HTTP/1.0 browsers as an extension. If you
- need to support obsolete clients and still use name-based virtual
- hosting, a possible technique is discussed at the end of this
- document.</li>
-
- <li>Name-based virtual hosting cannot be used with SSL secure servers
- because of the nature of the SSL protocol.</li>
-
- <li>Some operating systems and network equipment implement bandwidth
- management techniques that cannot differentiate between hosts unless
- they are on separate IP addresses.</li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Using Name-based Virtual Hosts</a></h2>
-
-<table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li><li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li><li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li><li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>To use name-based virtual hosting, you must designate the IP
- address (and possibly port) on the server that will be accepting
- requests for the hosts. This is configured using the <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> directive.
- In the normal case where any and all IP addresses on the server should
- be used, you can use <code>*</code> as the argument to <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>. If you're planning to use
- multiple ports (e.g. running SSL) you should add a Port to the argument,
- such as <code>*:80</code>. Note that mentioning an IP address in a
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> directive does not
- automatically make the server listen to that IP address. See
- <a href="../bind.html">Setting which addresses and ports Apache uses</a>
- for more details. In addition, any IP address specified here must be
- associated with a network interface on the server.</p>
-
- <p>The next step is to create a <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> block for
- each different host that you would like to serve. The argument to the
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> directive
- should be the same as the argument to the <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> directive (ie, an IP address,
- or <code>*</code> for all addresses). Inside each <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> block, you will need at minimum a
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> directive to designate
- which host is served and a <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- directive to show where in the filesystem the content for that host
- lives.</p>
-
- <div class="note"><h3>Main host goes away</h3>
- <p>If you are adding virtual hosts to an existing web server, you
- must also create a <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> block for the existing host. The <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> and <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> included in this virtual host should be the
- same as the global <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> and
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. List this virtual
- host first in the configuration file so that it will act as the default
- host.</p>
- </div>
-
- <p>For example, suppose that you are serving the domain
- <code>www.domain.tld</code> and you wish to add the virtual host
- <code>www.otherdomain.tld</code>, which points at the same IP address.
- Then you simply add the following to <code>httpd.conf</code>:</p>
-
- <div class="example"><p><code>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p>You can alternatively specify an explicit IP address in place of the
- <code>*</code> in both the <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> and <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> directives. For example, you might want to do this
- in order to run some name-based virtual hosts on one IP address, and either
- IP-based, or another set of name-based virtual hosts on another address.</p>
-
- <p>Many servers want to be accessible by more than one name. This is
- possible with the <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>
- directive, placed inside the <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> section. For example in the first <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> block above, the
- <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code> directive indicates that
- the listed names are other names which people can use to see that same
- web site:</p>
-
- <div class="example"><p><code>
- ServerAlias domain.tld *.domain.tld
- </code></p></div>
-
- <p>then requests for all hosts in the <code>domain.tld</code> domain will
- be served by the <code>www.domain.tld</code> virtual host. The wildcard
- characters <code>*</code> and <code>?</code> can be used to match names.
- Of course, you can't just make up names and place them in <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> or <code>ServerAlias</code>. You must
- first have your DNS server properly configured to map those names to an IP
- address associated with your server.</p>
-
- <p>Finally, you can fine-tune the configuration of the virtual hosts
- by placing other directives inside the <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> containers. Most directives can be
- placed in these containers and will then change the configuration only of
- the relevant virtual host. To find out if a particular directive is allowed,
- check the <a href="../mod/directive-dict.html#Context">Context</a> of the
- directive. Configuration directives set in the <em>main server context</em>
- (outside any <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- container) will be used only if they are not overridden by the virtual host
- settings.</p>
-
- <p>Now when a request arrives, the server will first check if it is using
- an IP address that matches the <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>. If it is, then it will look at each <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> section with a matching
- IP address and try to find one where the <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> or <code>ServerAlias</code> matches the requested
- hostname. If it finds one, then it uses the configuration for that server.
- If no matching virtual host is found, then <strong>the first listed virtual
- host</strong> that matches the IP address will be used.</p>
-
- <p>As a consequence, the first listed virtual host is the <em>default</em>
- virtual host. The <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> from
- the <em>main server</em> will <strong>never</strong> be used when an IP
- address matches the <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- directive. If you would like to have a special configuration for requests
- that do not match any particular virtual host, simply put that configuration
- in a <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- container and list it first in the configuration file.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">Compatibility with Older Browsers</a></h2>
-
- <p>As mentioned earlier, there are some clients
- who do not send the required data for the name-based virtual
- hosts to work properly. These clients will always be sent the
- pages from the first virtual host listed for that IP address
- (the <cite>primary</cite> name-based virtual host).</p>
-
- <div class="note"><h3>How much older?</h3>
- <p>Please note that when we say older, we really do mean older. You are
- very unlikely to encounter one of these browsers in use today. All
- current versions of any browser send the <code>Host</code> header as
- required for name-based virtual hosts.</p>
- </div>
-
- <p>There is a possible workaround with the <code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code>
- directive, albeit a slightly cumbersome one:</p>
-
- <p>Example configuration:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p>What does this mean? It means that a request for any URI
- beginning with "<code>/domain</code>" will be served from the
- virtual host <code>www.domain.tld</code>. This means that the
- pages can be accessed as <code>http://www.domain.tld/domain/</code>
- for all clients, although clients sending a <code>Host:</code> header
- can also access it as <code>http://www.domain.tld/</code>.</p>
-
- <p>In order to make this work, put a link on your primary
- virtual host's page to
- <code>http://www.domain.tld/domain/</code>. Then, in the virtual
- host's pages, be sure to use either purely relative links
- (<em>e.g.</em>, "<code>file.html</code>" or
- "<code>../icons/image.gif</code>") or links containing the
- prefacing <code>/domain/</code> (<em>e.g.</em>,
- "<code>http://www.domain.tld/domain/misc/file.html</code>" or
- "<code>/domain/misc/file.html</code>").</p>
-
- <p>This requires a bit of discipline, but adherence to these
- guidelines will, for the most part, ensure that your pages will
- work with all browsers, new and old.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/vhosts/name-based.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/name-based.html.ja.euc-jp b/docs/manual/vhosts/name-based.html.ja.euc-jp
deleted file mode 100644
index 27eb3f675b..0000000000
--- a/docs/manual/vhosts/name-based.html.ja.euc-jp
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="EUC-JP"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È - Apache HTTP ¥µ¡¼¥Ð</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p>
-<p class="apache">Apache HTTP ¥µ¡¼¥Ð ¥Ð¡¼¥¸¥ç¥ó 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs-project/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="../">¥Ð¡¼¥¸¥ç¥ó 2.1</a> &gt; <a href="./">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></div><div id="page-content"><div id="preamble"><h1>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../de/vhosts/name-based.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>¤³¤Îʸ½ñ¤Ç¤Ï̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò¤É¤ó¤Ê¤È¤­¡¢
- ¤É¤¦¤ä¤Ã¤Æ»È¤¦¤«¤òÀâÌÀ¤·¤Þ¤¹¡£</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#namevip">̾Á°¥Ù¡¼¥¹¤È IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÈæ³Ó</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#using">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤òÍøÍѤ¹¤ë</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compat">¸Å¤¤¥Ö¥é¥¦¥¶¤È¤Î¸ß´¹À­</a></li>
-</ul><h3>»²¾È</h3><ul class="seealso"><li><a href="ip-based.html">¥Í¡¼¥à¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</a></li><li><a href="details.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Þ¥Ã¥Á¥ó¥°¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ</a></li><li><a href="mass.html">ÂçÎ̤ΥС¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎưŪ¤ÊÀßÄê</a></li><li><a href="examples.html">¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î°ìÈÌŪ¤ÊÀßÄêÎã</a></li><li><a href="examples.html#serverpath">ServerPath ÀßÄêÎã</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="namevip" id="namevip">̾Á°¥Ù¡¼¥¹¤È IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÈæ³Ó</a></h2>
-
- <p>IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ç¤Ï¡¢±þÅú¤¹¤ë
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ø¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò·èÄꤹ¤ë¤¿¤á¤Ë IP
- ¥¢¥É¥ì¥¹¤ò»ÈÍѤ·¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¤½¤ì¤¾¤ì¤Î¥Û¥¹¥È¤Ë¸Ä¡¹¤Ë IP
- ¥¢¥É¥ì¥¹¤¬É¬Íפˤʤê¤Þ¤¹¡£¤³¤ì¤ËÂФ·¤Æ̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ç¤Ï¡¢
- ¥¯¥é¥¤¥¢¥ó¥È¤¬ HTTP ¥Ø¥Ã¥À¤Î°ìÉô¤È¤·¤Æ¥Û¥¹¥È̾¤ò¹ð¤²¤ë¡¢
- ¤È¤¤¤¦¤³¤È¤Ë°Í¸¤·¤Þ¤¹¡£¤³¤Îµ»½Ñ¤ÇƱ°ì IP
- ¥¢¥É¥ì¥¹¤ò°Û¤Ê¤ë¿¿ô¤Î¥Û¥¹¥È¤Ç¶¦Í­¤·¤Æ¤¤¤Þ¤¹¡£</p>
-
- <p>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÏÄ̾ïñ½ã¤Ç¡¢¤½¤ì¤¾¤ì¤Î¥Û¥¹¥È̾¤È
- ¤½¤ì¤ËÂбþ¤¹¤ëÀµ³Î¤Ê IP ¥¢¥É¥ì¥¹¤ò DNS ¤ÇÀßÄꤷ¡¢°Û¤Ê¤ë
- ¥Û¥¹¥È̾¤ò¶èÊ̤¹¤ë¤è¤¦¤Ë Apache HTTP ¥µ¡¼¥Ð¤òÀßÄꤹ¤ë¤À¤±¤Ç¤¹¡£
- ¤µ¤é¤Ë¡¢Ì¾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÏÉÔ­¤¹¤ë IP
- ¥¢¥É¥ì¥¹¤Î¼ûÍפò´ËϤ·¤Þ¤¹¡£¤·¤¿¤¬¤Ã¤Æ¡¢IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò
- ÁªÂò¤¹¤Ù¤­ÆÃÄê¤ÎÍýͳ¤¬¤Ê¤±¤ì¤Ð̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»È¤¦¤Ù¤­¤Ç¤¹¡£
- IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»ÈÍѤ¹¤ë¤³¤È¤ò¹Íθ¤¹¤ëÍýͳ¤È¤·¤Æ¡¢</p>
-
- <ul>
- <li>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¸Å¤¤¥¯¥é¥¤¥¢¥ó¥È¤¬¤¢¤ë
- ̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬Æ¯¤¯¤¿¤á¤Ë¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤Ï
- HTTP ¥Û¥¹¥È¥Ø¥Ã¥À¤òÁ÷¤Ã¤Æ¤³¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
- ¤³¤ì¤Ï HTTP/1.1 ¤Î»ÅÍͤÇÍ׵ᤵ¤ì¤Æ¤¤¤Æ¡¢¤¹¤Ù¤Æ¤Î¸½ÂåŪ¤Ê
- HTTP/1.0 ¥Ö¥é¥¦¥¶¤Ç¤â³ÈÄ¥¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- ¤È¤Æ¤â¸Å¤¤¥¯¥é¥¤¥¢¥ó¥È¤ò¥µ¥Ý¡¼¥È¤·¤Ä¤Ä¡¢Ì¾Á°¥Ù¡¼¥¹¤Î
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò¹Ô¤¤¤¿¤¤¾ì¹ç¤Ï¡¢¤³¤Îʸ½ñ¤ÎºÇ¸å¤ÎÊý¤Ë
- ½ñ¤«¤ì¤Æ¤¤¤ë²ò·èºö¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Ê¤¤ÊýË¡¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£</li>
-
- <li>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ï SSL ¥×¥í¥È¥³¥ë¤ÎÆÃħ¤Ë¤è¤ê¡¢
- SSL ¥»¥­¥å¥¢¥µ¡¼¥Ð¤Ë¤Ï»È¤¨¤Þ¤»¤ó¡£</li>
-
- <li>¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ä¥Í¥Ã¥È¥ï¡¼¥¯ÁõÃ֤Τʤ«¤Ë¤Ï¡¢
- Ê̤ΠIP ¥¢¥É¥ì¥¹¾å¤Ç¤Ê¤¤¾ì¹ç¡¢Ê£¿ô¤Î¥Û¥¹¥È¤òÊÌ°·¤¤¤Ç¤­¤Ê¤¤¤è¤¦¤Ê
- ÂÓ°è´ÉÍý¤ÎÊýË¡¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£</li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤òÍøÍѤ¹¤ë</a></h2>
-
-<table class="related"><tr><th>´ØÏ¢¥â¥¸¥å¡¼¥ë</th><th>´ØÏ¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li><li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li><li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li><li><code class="directive"><a href="../mod/core.html#virtualhost">VirtualHost</a></code></li><li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»È¤¦¤Ë¤Ï¡¢¤½¤Î¥Û¥¹¥È¤Ø¤Î
- ¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±ÉÕ¤±¤ë¥µ¡¼¥Ð¤Î IP ¥¢¥É¥ì¥¹ (¤â¤·¤«¤·¤¿¤é¥Ý¡¼¥È¤â)
- ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
- ¤³¤ì¤Ï <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÀßÄꤷ¤Þ¤¹¡£Ä̾<code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> ¤Ç
- <code>*</code> ¤Î°À­¤ò»È¤Ã¤Æ¥µ¡¼¥Ð¤ÎÁ´¤Æ¤Î IP ¥¢¥É¥ì¥¹¤ò»È¤¤¤Þ¤¹¡£
- (Î㤨¤Ð SSL ¤Î»ÈÍѤʤɤÇ) Ê£¿ô¤Î¥Ý¡¼¥È¤ò»È¤¦¤³¤È¤ò·×²è¤·¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
- °ú¿ô¤Ë <code>*:80</code> ¤Î¤è¤¦¤Ë¥Ý¡¼¥È¤â´Þ¤á¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç
- IP ¥¢¥É¥ì¥¹¤ò½ñ¤¤¤Æ¤â¡¢
- ¼«Æ°Åª¤Ë¥µ¡¼¥Ð¤¬¤½¤Î IP ¥¢¥É¥ì¥¹¤ò¥ê¥Ã¥¹¥ó¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¤Ê¤¤¤³¤È¤Ë
- Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¾ÜºÙ¤Ï¡Ö<a href="../bind.html">Apache ¤Î»È¤¦¥¢¥É¥ì¥¹¤È
- ¥Ý¡¼¥È¤òÀßÄꤹ¤ë</a>¡×¤òÆɤó¤Ç¤¯¤À¤µ¤¤¡£¤µ¤é¤Ë¡¢¤³¤³¤Ç»ØÄꤵ¤ì¤¿
- IP ¥¢¥É¥ì¥¹¤ÏÁ´¤Æ¥µ¡¼¥Ð¤Î¥Í¥Ã¥È¥ï¡¼¥¯¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È´ØÏ¢ÉÕ¤±¤é¤ì¤Æ
- ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>¼¡¤Ï¡¢°·¤¦¥Û¥¹¥È¤½¤ì¤¾¤ì¤ËÂФ·¤Æ <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¥Ö¥í¥Ã¥¯¤ò
- ºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£<code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤Ï <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î°ú¿ô¤ÈƱ¤¸¤Ë¤·¤Æ¤¯¤À¤µ¤¤ (¤¹¤Ê¤ï¤Á¡¢IP ¥¢¥É¥ì¥¹¤«¡¢Á´¤Æ¤Î¥¢¥É¥ì¥¹¤ò°ÕÌ£¤¹¤ë
- <code>*</code>)¡£¤½¤ì¤¾¤ì¤Î <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÃæ¤Ë¤Ï¡¢ºÇÄã¸Â¡¢¤É¤Î¥Û¥¹¥È¤¬°·¤ï¤ì¤ë¤«¤ò¼¨¤¹ <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤È¡¢
- ¤½¤Î¥Û¥¹¥ÈÍѤΥ³¥ó¥Æ¥ó¥Ä¤¬¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Î¤É¤³¤Ë¤¢¤ë¤«¤ò¼¨¤¹
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
- ½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£</p>
-
- <div class="note"><h3>¥á¥¤¥ó¥Û¥¹¥È¤Ï¤Ê¤¯¤Ê¤ê¤Þ¤¹</h3>
- <p>´û¤Ë¤¢¤ë¥¦¥§¥Ö¥µ¡¼¥Ð¤Ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤òÄɲ乤ë¾ì¹ç¡¢
- ´û¸¤Î¥¦¥§¥Ö¥µ¡¼¥Ð¤ËÂФ·¤Æ¤â <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥Ö¥í¥Ã¥¯¤òºî¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> ¤È
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤Ï¡¢¥°¥í¡¼¥Ð¥ë¤Ê <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> ¤È
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤ÈƱ¤¸¤â¤Î¤Ë¤·¤Þ¤¹¡£¤Þ¤¿¡¢¤³¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤òÀßÄê¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ç
- ÀèƬ¤ËÃÖ¤¤¤Æ¡¢¥Ç¥Õ¥©¥ë¥È¥Û¥¹¥È¤È¤·¤ÆÆ°ºî¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£</p>
- </div>
-
- <p>¤¿¤È¤¨¤Ð¡¢<code>www.domain.tld</code> ¤òÆ°¤«¤·¤Æ¤¤¤Æ¡¢
- ¤µ¤é¤Ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È <code>www.otherdomain.tld</code>
- ¤òÄɲ乤ë¤È¤·¤Þ¤·¤ç¤¦¡£¤³¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÏƱ°ì IP ¤ò»Ø¤·¤Æ¤¤¤ë¤È¤·¤Þ¤¹¡£
- ¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ï¡¢<code>httpd.conf</code>
- ¤Ë°Ê²¼¤Î¤è¤¦¤Ê¥³¡¼¥É¤òÄɲ乤ë¤À¤±¤Ç¤¹</p>
-
- <div class="example"><p><code>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> µÚ¤Ó
- <code class="directive"><a href="../mod/core.html#virtualhost">VirtualHost</a></code> ¤Î¤É¤Á¤é¤Î¾ì¹ç¤â¡¢
- * ¤ÎÉôʬ¤Ë¤ÏÌÀ¼¨Åª¤Ë IP ¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð¡¢¤¢¤ë IP ¥¢¥É¥ì¥¹¤Ç¤Ï̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»È¤¤¤¿¤¤°ìÊý¤Ç¡¢
- Ê̤ΠIP ¥¢¥É¥ì¥¹¤Ç¤Ï¡¢Â¾¤Î IP ¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ä
- ÊÌÁȤÎ̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ò»È¤¤¤¿¤¤¾ì¹ç¡¢
- ¤½¤¦ÀßÄꤹ¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£</p>
-
- <p>Ê£¿ô¤Î̾Á°¤Ç¥µ¡¼¥Ð¥¢¥¯¥»¥¹¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¤¤¤³¤È¤â¿¤¤¤Ç¤·¤ç¤¦¡£
- ¤³¤Î¤è¤¦¤Ê¤³¤È¤Ï¡¢<code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code> ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥»¥¯¥·¥ç¥ó¤Ëµ­½Ò¤¹¤ë¤³¤È¤Ç¼Â¸½¤Ç¤­¤Þ¤¹¡£
- Î㤨¤Ð¾åµ­¤Î <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¤ÎÎã¤Ç¤¢¤ì¤Ð¡¢
- ¼¡¤Î¤è¤¦¤Ë°ìÍ÷¤Ëµó¤²¤é¤ì¤¿Ì¾Á°¤¬¡¢
- ¥æ¡¼¥¶¤¬Æ±°ì¤Î¥¦¥§¥Ö¥µ¥¤¥È¤È¤·¤ÆÌܤˤ·¤Æ»ÈÍѤǤ­¤ë¥µ¡¼¥Ð̾¤Ç¤¢¤ë¡¢
- ¤È <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç»ØÄê¤Ç¤­¤Þ¤¹¡£</p>
-
- <div class="example"><p><code>
- ServerAlias domain.tld *.domain.tld
- </code></p></div>
-
- <p><code>domain.tld</code> ¥É¥á¥¤¥ó¤Ø¤ÎÁ´¤Æ¤Î¥Û¥¹¥È¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï
- <code>www.domain.tld</code> ¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬½èÍý¤·¤Þ¤¹¡£
- ̾Á°¤ò¥Þ¥Ã¥Á¤µ¤»¤ë¤¿¤á¤Ë¡¢¥ï¥¤¥ë¥É¥«¡¼¥Éʸ»ú * ¤ä ?
- ¤ò»ÈÍѤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤â¤Á¤í¤ó»×¤¤¤Ä¤­¤Î̾Á°¤òºî¤Ã¤Æ¡¢
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> ¤ä
- <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>
- ¤Ë¤½¤Î̾Á°¤ò½ñ¤¯¤È¤¤¤Ã¤¿¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤Þ¤º¤Ï¡¢
- ¤³¤ì¤é¤Î̾Á°¤¬ ¥µ¡¼¥Ð¤ËÉÕ¤±¤é¤ì¤¿ IP ¥¢¥É¥ì¥¹¤Ë¥Þ¥Ã¥×¤µ¤ì¤ë¤è¤¦¤Ë
- DNS ¥µ¡¼¥Ð¤òŬÀÚ¤ËÀßÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£</p>
-
- <p>ºÇ¸å¤Ë¡¢<code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ¥³¥ó¥Æ¥Ê¤ÎÃæ¤Ë
- ¾¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¯¤³¤È¤Ç¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ÎÀßÄê¤òºÙ¤«¤¯Ä´À°
- ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
- ¤Û¤È¤ó¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ï¤³¤ì¤é¤Î¥³¥ó¥Æ¥Ê¤ËÀßÃÖ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Æ¡¢
- Êѹ¹ÅÀ¤Ï¤½¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËÂФ·¤Æ¤Î¤ßÍ­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¤É¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ñ¤¯¤³¤È¤¬¤Ç¤­¤ë¤«¤Ï¡¢¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î <a href="../mod/directive-dist.html#context">¥³¥ó¥Æ¥­¥¹¥È</a> ¤ò
- Ä´¤Ù¤Æ¤¯¤À¤µ¤¤¡£<em>¼ç¥µ¡¼¥Ð¥³¥ó¥Æ¥­¥¹¥È</em>
- (<code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¥³¥ó¥Æ¥Ê¤Î³°) ¤ÎÀßÄêÍѥǥ£¥ì¥¯¥Æ¥£¥Ö¤Ï¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ç¤ÎÀßÄê¤Ç
- ¾å½ñ¤­¤µ¤ì¤Ê¤¤¾ì¹ç¤Î¤ß»ÈÍѤµ¤ì¤Þ¤¹¡£</p>
-
- <p>¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤È¡¢¥µ¡¼¥Ð¤Ï¤Þ¤ººÇ½é¤Ë <code class="directive"><a href="../mod/core.html#namevirtualhost">&lt;NameVirtualHost&gt;</a></code>
- ¤Ë¥Þ¥Ã¥Á¤¹¤ë IP ¥¢¥É¥ì¥¹¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£¥Þ¥Ã¥Á¤¹¤ì¤Ð
- ¥Þ¥Ã¥Á¤·¤¿ IP ¥¢¥É¥ì¥¹¤Î <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¤Î¤½¤ì¤¾¤ì¤Î¥»¥¯¥·¥ç¥ó¤ÎÃ椫¤é
- <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> ¤«
- <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>
- ¤ËÍ׵ᤵ¤ì¤¿¥Û¥¹¥È̾¤¬¤¢¤ë¤«Ãµ¤·¤Þ¤¹¡£
- ¸«¤Ä¤«¤ì¤Ð¤½¤Î¥µ¡¼¥ÐÍѤÎÀßÄê¤ò»È¤¤¤Þ¤¹¡£¥Þ¥Ã¥Á¤¹¤ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È
- ¤¬¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð¡¢¥Þ¥Ã¥Á¤·¤¿ IP ¥¢¥É¥ì¥¹¤Î
- <strong>¥ê¥¹¥È¤ÎºÇ½é¤Ë¤¢¤ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È</strong> ¤¬»È¤ï¤ì¤Þ¤¹¡£</p>
-
- <p>·ë²Ì¤È¤·¤Æ¡¢¥ê¥¹¥È¤ÎºÇ½é¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬ <em>¥Ç¥Õ¥©¥ë¥È</em> ¤Î
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¤Ê¤ê¤Þ¤¹¡£IP ¥¢¥É¥ì¥¹¤¬ <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ï¡¢<em>¥á¥¤¥ó¤Î¥µ¡¼¥Ð</em> ¤Î
- <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
- ¤Ï<strong>·è¤·¤Æ»È¤ï¤ì¤Þ¤»¤ó</strong>
- ¤É¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Ë¤â¥Þ¥Ã¥Á¤·¤Ê¤¤¥ê¥¯¥¨¥¹¥È¤ËÂФ·¤Æ¡¢
- ÆÃÊ̤ÊÀßÄê¤ò¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤ÎºÇ½é¤Î
- <code>&lt;VirtualHost&gt;</code> ¥³¥ó¥Æ¥Ê¤Ë¤½¤ì¤òµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤¡£</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">¸Å¤¤¥Ö¥é¥¦¥¶¤È¤Î¸ß´¹À­</a></h2>
-
- <p>°ÊÁ°½Ò¤Ù¤¿¤è¤¦¤Ë¡¢Ì¾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤¬Àµ¤·¤¯Æ°ºî¤¹¤ë
- ¤¿¤á¤ËɬÍפʾðÊó¤òÁ÷¤Ã¤Æ¤³¤Ê¤¤¥¯¥é¥¤¥¢¥ó¥È¤¬°ÍÁ³¤È¤·¤Æ¸ºß¤·¤Æ¤¤¤Þ¤¹¡£
- ¤½¤Î¤è¤¦¤Ê¥¯¥é¥¤¥¢¥ó¥È¤ËÂФ·¤Æ¤Ï¡¢³ºÅö¤¹¤ë IP ¥¢¥É¥ì¥¹¤Ë¤Ä¤¤¤Æ¡¢
- °ìÈֺǽé¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È
- (<cite>¥×¥é¥¤¥Þ¥ê</cite>¤Î̾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È)
- ¤«¤é¥Ú¡¼¥¸¤¬Á÷¤êÊÖ¤µ¤ì¤Þ¤¹¡£</p>
-
- <div class="note"><h3>¤É¤Î¤°¤é¤¤¸Å¤¤¤Î ?</h3>
- <p>¡Ö¸Å¤¤¡×¤Èɽ¸½¤·¤Æ¤¤¤ë¾ì¹ç¡¢ËÜÅö¤Ë¸Å¤¤¤³¤È¤ò°ÕÌ£¤·¤Æ»È¤Ã¤Æ¤¤¤Þ¤¹¡£
- ÉÔ¹¬¤Ë¤·¤Æº£¸½ºß¤Ç¤â¤³¤Î¤è¤¦¤Ê¸Å¤¤¥Ö¥é¥¦¥¶¤ËÁø¶ø¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
- ¸½ºß¤Î¥Ö¥é¥¦¥¶¤ÏÁ´¤Æ¡¢Ì¾Á°¥Ù¡¼¥¹¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤ËɬÍפÊ
- <code>Host</code> ¥Ø¥Ã¥À¤òÁ÷¤ê¤Þ¤¹¡£</p>
- </div>
-
- <p><a href="../mod/core.html#serverpath"><code>ServerPath</code></a>
- ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÇÂн褬²Äǽ¤Ç¤¹¡£¤Á¤ç¤Ã¤ÈÉԳʹ¥¤Ç¤¹¤±¤ì¤É¤â¡£</p>
-
- <p>ÀßÄêÎã</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p>¤³¤ÎÎã¤Ë¤Ï¤É¤¦¤¤¤¦°ÕÌ£¤¬¤¢¤ë¤Ç¤·¤ç¤¦¤«? ¤³¤ì¤Ï
- "<code>/domain</code>" ¤Ç»Ï¤Þ¤ë URI ¤Ø¤Î¥ê¥¯¥¨¥¹¥È¤Ï¤¹¤Ù¤Æ¡¢
- ¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È <code>www.domain.tld</code> ¤Ç½èÍý¤µ¤ì¤ë¡¢
- ¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£¤Ä¤Þ¤ê¡¢¤¹¤Ù¤Æ¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ç
- <code>http://www.domain.tld/domain/</code> ¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¥Ú¡¼¥¸¤¬¡¢
- <code>Host:</code> ¥Ø¥Ã¥À¤òÁ÷¤Ã¤Æ¤¯¤ë¥¯¥é¥¤¥¢¥ó¥È¤Ç¤¢¤ì¤Ð
- <code>http://www.domain.tld/</code> ¤È¤·¤Æ¤â¥¢¥¯¥»¥¹¤Ç¤­¤ë¡¢
- ¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£</p>
-
- <p>¤³¤ì¤¬Æ°ºî¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
- ¥×¥é¥¤¥Þ¥ê¤Î¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Ú¡¼¥¸¤Ë
- <code>http://www.domain.tld/domain/</code> ¤Ø¤Î¥ê¥ó¥¯¤òÀßÃÖ¤·¤Þ¤¹¡£
- ¤½¤·¤Æ¡¢¥Ð¡¼¥Á¥ã¥ë¥Û¥¹¥È¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢½ã¿è¤ÊÁêÂÐ¥ê¥ó¥¯ (<em>Îã:</em>
- "<code>file.html</code>" ¤ä "<code>../icons/image.gif</code>")¡¢
- ¤¢¤ë¤¤¤Ï <code>/domain/</code> ¤Ç»Ï¤Þ¤ë¥ê¥ó¥¯ (<em>Îã:</em>
- "<code>http://www.domain.tld/domain/misc/file.html</code>" ¤ä
- "<code>/domain/misc/file.html</code>") ¤À¤±¤òÀßÃÖ¤·¤Þ¤¹¡£</p>
-
- <p>¤³¤ì¤Ë¤Ï¡¢´öʬ¤«¤Îµ¬Î§¤¬É¬ÍפȤʤê¤Þ¤¹¤¬¡¢
- ¤³¤Î¤è¤¦¤Ê¥¬¥¤¥É¥é¥¤¥ó¤òÃé¼Â¤Ë¼é¤ë¤³¤È¤Ë¤è¤ê¡¢¤¿¤¤¤Æ¤¤¤Î¾ì¹ç¡¢
- ¤¹¤Ù¤Æ¤Î¥Ö¥é¥¦¥¶¤Ç ¡½ ¿·¤·¤¤¥Ö¥é¥¦¥¶¤Ç¤â¸Å¤¤¤â¤Î¤Ç¤â ¡½
- ºîÀ®¤·¤¿¥Ú¡¼¥¸¤¬¸«¤¨¤ë¤È¤¤¤¦¤³¤È¤òÊݾڤ·¤Þ¤¹¡£</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../de/vhosts/name-based.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¥â¥¸¥å¡¼¥ë</a> | <a href="../mod/directives.html">¥Ç¥£¥ì¥¯¥Æ¥£¥Ö</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">ÍѸì</a> | <a href="../sitemap.html">¥µ¥¤¥È¥Þ¥Ã¥×</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/name-based.html.ko.euc-kr b/docs/manual/vhosts/name-based.html.ko.euc-kr
deleted file mode 100644
index aff9d532bf..0000000000
--- a/docs/manual/vhosts/name-based.html.ko.euc-kr
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="EUC-KR"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>À̸§±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p>
-<p class="apache">Apache HTTP Server Version 2.1</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="../">Version 2.1</a> &gt; <a href="./">°¡»óÈ£½ºÆ®</a></div><div id="page-content"><div id="preamble"><h1>À̸§±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</h1>
-<div class="toplang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/vhosts/name-based.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div>
-
- <p>ÀÌ ¹®¼­´Â À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏ´Â °æ¿ì¿Í ¹æ¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#namevip">À̸§±â¹Ý ´ë IP±â¹Ý °¡»óÈ£½ºÆ®</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#using">À̸§±â¹Ý °¡»óÈ£½ºÆ® »ç¿ëÇϱâ</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compat">¿À·¡µÈ ºê¶ó¿ìÀú¿Í ȣȯ</a></li>
-</ul><h3>Âü°í</h3><ul class="seealso"><li><a href="ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</a></li><li><a href="details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</a></li><li><a href="mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ</a></li><li><a href="examples.html">ÀϹÝÀûÀÎ °¡»óÈ£½ºÆ® ¿¹</a></li><li><a href="examples.html#serverpath">ServerPath ¼³Á¤ ¿¹</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="namevip" id="namevip">À̸§±â¹Ý ´ë IP±â¹Ý °¡»óÈ£½ºÆ®</a></h2>
-
- <p>IP±â¹Ý °¡»óÈ£½ºÆ®´Â ¿¬°áÇÑ IP ÁÖ¼Ò¸¦ °¡Áö°í ¼­ºñ½ºÇÒ
- °¡»óÈ£½ºÆ®¸¦ °áÁ¤ÇÑ´Ù. ±×·¡¼­ °¢ È£½ºÆ®´Â ¼­·Î ´Ù¸¥ IP ÁÖ¼Ò¸¦
- °¡Á®¾ß ÇÑ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ °æ¿ì ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®°¡
- HTTP Çì´õ·Î È£½ºÆ®¸íÀ» ¾Ë·ÁÁÖ±æ ¹Ù¶õ´Ù. ÀÌ·± ¹æ¹ýÀ¸·Î ÇÑ
- IP ÁÖ¼Ò·Î ¿©·¯ ´Ù¸¥ È£½ºÆ®¸¦ ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â DNS ¼­¹ö°¡ °¢ È£½ºÆ®¸íÀÌ ¿Ã¹Ù¸¥
- IP ÁÖ¼Ò·Î ´ëÀÀÇϵµ·Ï °¡»óÈ£½ºÆ®¸¦ ¼³Á¤ÇÏ°í, ´Ù¸¥ È£½ºÆ®¸íÀ» ±¸º°ÇÒ
- ¼ö ÀÖµµ·Ï ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¼³Á¤Çϱ⸸ ÇϸéµÇ¹Ç·Î ´õ °£´ÜÇÏ´Ù. À̸§±â¹Ý
- °¡»óÈ£½ºÆ®´Â ¶Ç ¿©·¯ IP ÁÖ¼Ò°¡ ÇÊ¿ä¾ø´Ù. ±×·¯¹Ç·Î Ưº°È÷
- IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ¼±ÅÃÇÒ ÀÌÀ¯°¡ ¾ø´Ù¸é À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦
- »ç¿ëÇØ¾ß ÇÑ´Ù. IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇؾßÇÒ ÀÌÀ¯·Î´Â:</p>
-
- <ul>
- <li>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ Áö¿øÇÏÁö¾Ê´Â ¿À·¡µÈ
- Ŭ¶óÀ̾ðÆ®µéÀÌ ÀÖ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏ·Á¸é
- Ŭ¶óÀ̾ðÆ®°¡ HTTP Host Çì´õ¸¦ º¸³»¾ß ÇÑ´Ù. ÀÌ´Â
- HTTP/1.1¿¡¼­´Â ÇʼöÀÌ°í, ÃÖ±Ù ¸ðµç HTTP/1.0 ºê¶ó¿ìÀúµéµµ
- È®ÀåÀ¸·Î Áö¿øÇÑ´Ù. ¸¸¾à À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇϸ鼭
- ¿À·¡µÈ Ŭ¶óÀ̾ðÆ®¸¦ Áö¿øÇØ¾ß ÇÑ´Ù¸é ÀÌ ¹®¼­ ³¡¿¡ ÀÖ´Â
- ¹æ¹ýÀ» »ìÆìºÁ¶ó.</li>
-
- <li>SSL ÇÁ·ÎÅäÄÝÀÇ ¼º°Ý»ó SSL º¸¾È¼­¹ö¿¡¼­ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.</li>
-
- <li>¾î¶² ¿î¿µÃ¼Á¦³ª ³×Æ®¿÷ ÀåÄ¡´Â ´Ù¸¥ IP ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸¸é È£½ºÆ®¸¦ ±¸º°ÇÏÁö ¸øÇÏ´Â ³×Æ®¿÷ »ç¿ë·®(bandwidth)
- °ü¸®±â¼úÀ» »ç¿ëÇÑ´Ù.</li>
- </ul>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">À̸§±â¹Ý °¡»óÈ£½ºÆ® »ç¿ëÇϱâ</a></h2>
-
-<table class="related"><tr><th>°ü·ÃµÈ ¸ðµâ</th><th>°ü·ÃµÈ Áö½Ã¾î</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code></li><li><code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code></li><li><code class="directive"><a href="../mod/core.html#servername">ServerName</a></code></li><li><code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code></li><li><code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏ·Á¸é ¼­¹ö´Â ¿¬°áÀ» ¹ÞÀ»
- IP ÁÖ¼Ò¸¦ (¾Æ¸¶ Æ÷Æ®µµ) Á¤ÇØ¾ß ÇÑ´Ù. ÀÌ´Â <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> Áö½Ã¾î·Î °¡´ÉÇÏ´Ù.
- ÀϹÝÀûÀ¸·Î ¼­¹öÀÇ ¸ðµç IP ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù¸é
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>ÀÇ
- ¾Æ±Ô¸ÕÆ®·Î <code>*</code>¸¦ »ç¿ëÇÑ´Ù. ¿©·¯ Æ÷Æ®¸¦ »ç¿ëÇÒ
- (¿¹¸¦ µé¾î, SSLÀ» »ç¿ëÇÒ) °èȹÀ̶ó¸é <code>*:80</code>°ú
- °°ÀÌ ¾Æ±Ô¸ÕÆ®¿¡ Æ÷Æ®¸¦ Ãß°¡ÇØ¾ß ÇÑ´Ù. <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> Áö½Ã¾î¿¡ IP ÁÖ¼Ò¸¦
- Àû¾îÁÖ¾ú´Ù°í ¼­¹ö°¡ ÀÚµ¿À¸·Î ±× IP ÁÖ¼Ò¸¦ ±â´Ù¸®Áö ¾ÊÀ½À»
- ÁÖÀÇÇ϶ó. ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="../bind.html">¾ÆÆÄÄ¡°¡
- »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ® ¼³Á¤Çϱâ</a>¸¦ Âü°íÇ϶ó. ¶Ç, ¿©±â¼­
- ÁöÁ¤ÇÑ IP ÁÖ¼Ò´Â ¼­¹öÀÇ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽ºÀ̾î¾ß ÇÑ´Ù.</p>
-
- <p>´ÙÀ½ ´Ü°è´Â ¼­ºñ½ºÇÏ·Á´Â È£½ºÆ®º°·Î <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ºí·ÏÀ»
- ¸¸µå´Â ÀÏÀÌ´Ù. <code class="directive"><a href="../mod/core.html#virtualhost&gt;">&lt;VirtualHost&gt;&gt;</a></code> Áö½Ã¾îÀÇ ¾Æ±Ô¸ÕÆ®´Â
- <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> Áö½Ã¾îÀÇ
- ¾Æ±Ô¸ÕÆ®(¿¹¸¦ µé¾î, IP ÁÖ¼Ò³ª ¸ðµç ÁÖ¼Ò¸¦ ¶æÇÏ´Â <code>*</code>)¿Í
- °°¾Æ¾ß ÇÑ´Ù. <code class="directive"><a href="../mod/core.html#virtualhost&gt;">&lt;VirtualHost&gt;&gt;</a></code> ºí·Ï ¾È¿¡´Â
- ÃÖ¼ÒÇÑ ¼­ºñ½ºÇÒ È£½ºÆ®¸¦ ÁöÁ¤ÇÏ´Â <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> Áö½Ã¾î¿Í È£½ºÆ®ÀÇ
- ³»¿ëÀÌ ÆÄÀϽýºÅÛ ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ÁöÁ¤ÇÏ´Â <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> Áö½Ã¾î°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <div class="note"><h3>ÁÖ È£½ºÆ®°¡ ¾ø¾îÁø´Ù</h3>
- <p>±âÁ¸¿¡ »ç¿ëÇÏ´ø À¥¼­¹ö¿¡ °¡»óÈ£½ºÆ®¸¦ Ãß°¡ÇÑ´Ù¸é
- ±âÁ¸¿¡ »ç¿ëÇÏ´ø È£½ºÆ®¿¡ ´ëÇÑ <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ºí·Ïµµ Ãß°¡Çؾß
- ÇÑ´Ù. ÀÌ ºí·Ï¿¡ Æ÷ÇÔÇÏ´Â <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>°ú <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>´Â Àüü <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>°ú <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>¿Í °°¾Æ¾ß ÇÑ´Ù.
- ¼³Á¤ÆÄÀÏ¿¡¼­ ÀÌ °¡»óÈ£½ºÆ®¸¦ °¡Àå ¸ÕÀú ÀûÀ¸¸é ±âº» È£½ºÆ®°¡
- µÈ´Ù.</p>
- </div>
-
- <p>¿¹¸¦ µé¾î <code>www.domain.tld</code> µµ¸ÞÀÎÀ» ¼­ºñ½ºÇÏ°í
- ÀÖ¾ú´Âµ¥ °°Àº IP ÁÖ¼Ò¿¡
- <code>www.otherdomain.tld</code>¶õ °¡»óÈ£½ºÆ®¸¦ Ãß°¡ÇÏ°í
- ½Í´Ù°í °¡Á¤ÇÏÀÚ. <code>httpd.conf</code>¿¡ ´ÙÀ½°ú °°ÀÌ
- Ãß°¡ÇÏ¸é µÈ´Ù:</p>
-
- <div class="example"><p><code>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <span class="indent">ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p><code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>¿Í
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- Áö½Ã¾î µÑ ¸ðµÎ <code>*</code> ´ë½Å Á÷Á¢ IP ÁÖ¼Ò¸¦ ÁöÁ¤ÇÒ
- ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, ÀÌ·±½ÄÀ¸·Î ÇÑ IP ÁÖ¼Ò¿¡ ¿©·¯ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®µéÀ» µ¹¸®°í, ´Ù¸¥ ÁÖ¼Ò¿¡ IP±â¹Ý ȤÀº À̸§±â¹Ý
- °¡»óÈ£½ºÆ®µéÀ» µ¹¸± ¼ö ÀÖ´Ù.</p>
-
- <p>¾î¶² ¼­¹ö´Â ¿©·¯ À̸§À¸·Î Á¢¼ÓÇÒ ¼ö ÀÖ±æ ¹Ù¶õ´Ù. ÀÌ´Â
- <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¼½¼Ç ¾È¿¡ <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î À§ÀÇ Ã¹¹ø° <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> ºí·Ï¿¡¼­
- <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¸é ¿­°ÅÇÑ À̸§À¸·Î °°Àº À¥»çÀÌÆ®¸¦ º¼ ¼ö ÀÖ´Ù:</p>
-
- <div class="example"><p><code>
- ServerAlias domain.tld *.domain.tld
- </code></p></div>
-
- <p><code>domain.tld</code> µµ¸ÞÀο¡ ÀÖ´Â ¸ðµç È£½ºÆ®¿¡ ´ëÇÑ
- ¿äûÀ» <code>www.domain.tld</code> °¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÑ´Ù.
- À̸§À» ÁÙ¶§ ¿ÍÀϵåÄ«µå ¹®ÀÚ <code>*</code>¿Í <code>?</code>¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>À̳ª <code>ServerAlias</code>¿¡
- À̸§À» Àû¾îÁÖ¾ú´Ù°í ³¡ÀÌ ¾Æ´Ï´Ù. ¸ÕÀú ÀÌ À̸§µéÀÌ ¼­¹öÀÇ
- IP ÁÖ¼Ò·Î ´ëÀÀÇϵµ·Ï DNS ¼­¹ö¸¦ ¾Ë¸Â°Ô ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¸¶Áö¸·À¸·Î <code class="directive"><a href="../mod/core.html#&lt;virtualhost&gt;">&lt;&lt;VirtualHost&gt;&gt;</a></code> ¾È¿¡ ´Ù¸¥
- Áö½Ã¾îµéÀ» »ç¿ëÇÏ¿© °¡»óÈ£½ºÆ®¸¦ ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
- ´ëºÎºÐÀÇ Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, °ü·ÃµÈ °¡»óÈ£½ºÆ®ÀÇ ¼³Á¤¸¸À»
- º¯°æÇÑ´Ù. ¾î¶² Áö½Ã¾î°¡ »ç¿ë°¡´ÉÇÑÁö ¾Ë·Á¸é Áö½Ã¾îÀÇ <a href="../mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦
- È®ÀÎÇ϶ó. (<code class="directive"><a href="../mod/core.html#&lt;virtualhost&gt;">&lt;&lt;VirtualHost&gt;&gt;</a></code> ¾ÈÀÌ ¾Æ´Ñ)
- <em>ÁÖ¼­¹ö¼³Á¤</em>¿¡¼­ ÁöÁ¤ÇÑ ¼³Á¤ Áö½Ã¾î´Â °¡»óÈ£½ºÆ®¿¡
- °°Àº ¼³Á¤ Áö½Ã¾î°¡ ¾ø´Â °æ¿ì¿¡¸¸ »ç¿ëµÈ´Ù.</p>
-
- <p>¿äûÀ» ¹ÞÀ¸¸é ¼­¹ö´Â ¸ÕÀú <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code>¿¡¼­ ÁöÁ¤ÇÑ IP
- ÁÖ¼ÒÀÎÁö °Ë»çÇÑ´Ù. ±×·¸´Ù¸é ±× IP ÁÖ¼Ò¸¦ °¡Áø <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- ¼½¼Çµé¿¡¼­ ¿äûÇÑ È£½ºÆ®¸í°ú ÀÏÄ¡ÇÏ´Â <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>À̳ª
- <code>ServerAlias</code>¸¦ ã´Â´Ù. ãÀ¸¸é ±× ¼³Á¤À» »ç¿ëÇÑ´Ù.
- ÀûÀýÇÑ °¡»óÈ£½ºÆ®¸¦ ãÁö¸øÇϸé, IP ÁÖ¼Ò¿¡ ÇØ´çÇÏ´Â
- <strong>°¡»óÈ£½ºÆ®µéÁß Ã¹¹ø° °Í</strong>À» »ç¿ëÇÑ´Ù.</p>
-
- <p>°á°úÀûÀ¸·Î óÀ½¿¡ ³ª¿Â °¡»óÈ£½ºÆ®°¡ <em>±âº»</em>
- °¡»óÈ£½ºÆ®°¡ µÈ´Ù. IP ÁÖ¼Ò°¡ <code class="directive"><a href="../mod/core.html#namevirtualhost">NameVirtualHost</a></code> Áö½Ã¾î¿¡ ÇØ´çÇϸé,
- <em>ÁÖ¼­¹ö</em>ÀÇ <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>´Â
- <strong>Àý´ë·Î</strong> »ç¿ëÇÏÁö ¾Ê´Â´Ù. ƯÁ¤ °¡»óÈ£½ºÆ®¿¡
- ÇØ´çÇÏÁö¾Ê´Â ¿äûÀ» ¼³Á¤ÇÏ·Á¸é ¼³Á¤À» <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>¿¡ ´ã°í ¼³Á¤ÆÄÀÏ¿¡¼­
- ¸ÕÀú ³ª¿Àµµ·Ï ÇÏ¸é µÈ´Ù.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compat" id="compat">¿À·¡µÈ ºê¶ó¿ìÀú¿Í ȣȯ</a></h2>
-
- <p>ÀÌ¹Ì Àû¾úµíÀÌ À̸§±â¹Ý °¡»óÈ£½ºÆ®°¡ ¿Ã¹Ù·Î µ¿ÀÛÇϱâÀ§ÇØ
- ÇÊ¿äÇÑ Á¤º¸¸¦ º¸³»Áö¾Ê´Â Ŭ¶óÀ̾ðÆ®°¡ ÀÖ´Ù. ÀÌ·± Ŭ¶óÀ̾ðÆ®´Â
- Ç×»ó ¿äûÇÑ IP ÁÖ¼Ò¿¡ ´ëÇØ Ã¹¹ø°·Î ³ª¿À´Â °¡»óÈ£½ºÆ®
- (<cite>ÃÖÃÊÀÇ</cite> À̸§±â¹Ý °¡»óÈ£½ºÆ®)°¡
- ¼­ºñ½ºÇÑ´Ù.</p>
-
- <div class="note"><h3>¾ó¸¶³ª ¿À·¡µÈ °ÍÀ» ¸»Çϴ°¡?</h3>
- <p>¿©±â¼­ ¿À·¡µÇ¾úÀ½Àº ½ÇÁ¦·Î »ó´çÈ÷ ¿À·¡µÈ °ÍÀ» ¶æÇÑ´Ù.
- ¿À´Ã³¯ ÀÌ·± ºê¶ó¿ìÀú¸¦ »ç¿ëÇÒ ÀÏÀº °ÅÀǾø´Ù. ¿äÁò
- ºê¶ó¿ìÀú´Â ¸ðµÎ À̸§±â¹Ý °¡»óÈ£½ºÆ®¿¡ ÇÊ¿äÇÑ <code>Host</code>
- Çì´õ¸¦ º¸³½´Ù.</p>
- </div>
-
- <p>ÀÌ ¹®Á¦´Â ¾à°£ °ÅÃßÀ彺·´Áö¸¸ <code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code> Áö½Ã¾î·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù:</p>
-
- <p>¼³Á¤ ¿¹:</p>
-
- <div class="example"><p><code>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <span class="indent">
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </span>
- &lt;/VirtualHost&gt;<br />
- </code></p></div>
-
- <p>ÀÌ°Ô ¹«½¼ ¶æÀΰ¡? "<code>/domain</code>"·Î ½ÃÀÛÇÏ´Â
- URI¿¡ ´ëÇÑ ¿äûÀº °¡»óÈ£½ºÆ® <code>www.domain.tld</code>°¡
- ¼­ºñ½ºÇÑ´Ù. Áï, <code>Host:</code> Çì´õ¸¦ º¸³»´Â Ŭ¶óÀ̾ðÆ®´Â
- <code>http://www.domain.tld/</code>¸¸À¸·Îµµ Á¢±ÙÇÒ ¼ö ÀÖÁö¸¸,
- <code>http://www.domain.tld/domain/</code>À¸·Î´Â ¸ðµç
- Ŭ¶óÀ̾ðÆ®°¡ ÆäÀÌÁö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>À̸¦ À§ÇØ ÃÖÃÊÀÇ °¡»óÈ£½ºÆ®¿¡ ÀÖ´Â ÆäÀÌÁö¿¡
- <code>http://www.domain.tld/domain/</code>À¸·Î °¡´Â ¸µÅ©¸¦
- ³Ö´Â´Ù. ±×¸®°í °¡»óÈ£½ºÆ® ÆäÀÌÁö¿¡¼­´Â »ó´ë¸µÅ© (¿¹¸¦ µé¾î,
- "<code>file.html</code>" À̳ª "<code>../icons/image.gif</code>")
- ȤÀº ("<code>http://www.domain.tld/domain/misc/file.html</code>"À̳ª
- "<code>/domain/misc/file.html</code>"°ú °°ÀÌ) ¾Õ¿¡
- <code>/domain/</code>ÀÌ ºÙÀº ¸µÅ©¸¸À» »ç¿ëÇÑ´Ù.</p>
-
- <p>Á¶±Ý ±ÔÄ¢ÀÌ ÇÊ¿äÇÏÁö¸¸ ÀÌ ±ÔÄ¢À» µû¸£¸é ´ëºÎºÐÀÇ °æ¿ì
- ¿äÁò °ÍÀ̳ª ¿À·¡µÈ °ÍÀ̳ª °ü°è¾øÀÌ ¸ðµç ºê¶ó¿ìÀú·Î ÆäÀÌÁö¸¦
- º¼ ¼ö ÀÖ´Ù.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/vhosts/name-based.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
-<a href="../en/vhosts/name-based.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
-<a href="../ja/vhosts/name-based.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
-<a href="../ko/vhosts/name-based.html" title="Korean">&nbsp;ko&nbsp;</a></p>
-</div><div id="footer">
-<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">¸ðµâ</a> | <a href="../mod/directives.html">Áö½Ã¾îµé</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">¿ë¾î</a> | <a href="../sitemap.html">»çÀÌÆ®¸Ê</a></p></div>
-</body></html> \ No newline at end of file
diff --git a/docs/manual/vhosts/name-based.xml b/docs/manual/vhosts/name-based.xml
deleted file mode 100644
index b1d816568f..0000000000
--- a/docs/manual/vhosts/name-based.xml
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.15 $ -->
-
-<!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="name-based.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
-<title>Name-based Virtual Host Support</title>
-
-<summary>
- <p>This document describes when and how to use name-based virtual hosts.</p>
-</summary>
-
-<seealso><a href="ip-based.html">IP-based Virtual Host Support</a></seealso>
-<seealso><a href="details.html">An In-Depth Discussion of Virtual Host Matching</a></seealso>
-<seealso><a href="mass.html">Dynamically configured mass virtual hosting</a></seealso>
-<seealso><a href="examples.html">Virtual Host examples for common setups</a></seealso>
-<seealso><a href="examples.html#serverpath">ServerPath configuration example</a></seealso>
-
-<section id="namevip"><title>Name-based vs. IP-based Virtual Hosts</title>
-
- <p>IP-based virtual hosts use the IP address of the connection to
- determine the correct virtual host to serve. Therefore you need to
- have a separate IP address for each host. With name-based virtual
- hosting, the server relies on the client to report the hostname as
- part of the HTTP headers. Using this technique, many different hosts
- can share the same IP address.</p>
-
- <p>Name-based virtual hosting is usually simpler, since you need
- only configure your DNS server to map each hostname to the correct
- IP address and then configure the Apache HTTP Server to recognize
- the different hostnames. Name-based virtual hosting also eases
- the demand for scarce IP addresses. Therefore you should use
- name-based virtual hosting unless there is a specific reason to
- choose IP-based virtual hosting. Some reasons why you might consider
- using IP-based virtual hosting:</p>
-
- <ul>
- <li>Some ancient clients are not compatible with name-based virtual
- hosting. For name-based virtual hosting to work, the client must send
- the HTTP Host header. This is required by HTTP/1.1, and is
- implemented by all modern HTTP/1.0 browsers as an extension. If you
- need to support obsolete clients and still use name-based virtual
- hosting, a possible technique is discussed at the end of this
- document.</li>
-
- <li>Name-based virtual hosting cannot be used with SSL secure servers
- because of the nature of the SSL protocol.</li>
-
- <li>Some operating systems and network equipment implement bandwidth
- management techniques that cannot differentiate between hosts unless
- they are on separate IP addresses.</li>
- </ul>
-
-</section>
-
-<section id="using"><title>Using Name-based Virtual Hosts</title>
-
-<related>
- <modulelist>
- <module>core</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">NameVirtualHost</directive>
- <directive module="core">ServerAlias</directive>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerPath</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
-</related>
-
- <p>To use name-based virtual hosting, you must designate the IP
- address (and possibly port) on the server that will be accepting
- requests for the hosts. This is configured using the <directive
- module="core">NameVirtualHost</directive> directive.
- In the normal case where any and all IP addresses on the server should
- be used, you can use <code>*</code> as the argument to <directive
- module="core">NameVirtualHost</directive>. If you're planning to use
- multiple ports (e.g. running SSL) you should add a Port to the argument,
- such as <code>*:80</code>. Note that mentioning an IP address in a
- <directive module="core">NameVirtualHost</directive> directive does not
- automatically make the server listen to that IP address. See
- <a href="../bind.html">Setting which addresses and ports Apache uses</a>
- for more details. In addition, any IP address specified here must be
- associated with a network interface on the server.</p>
-
- <p>The next step is to create a <directive type="section"
- module="core">VirtualHost</directive> block for
- each different host that you would like to serve. The argument to the
- <directive type="section" module="core">VirtualHost</directive> directive
- should be the same as the argument to the <directive
- module="core">NameVirtualHost</directive> directive (ie, an IP address,
- or <code>*</code> for all addresses). Inside each <directive type="section"
- module="core">VirtualHost</directive> block, you will need at minimum a
- <directive module="core">ServerName</directive> directive to designate
- which host is served and a <directive module="core">DocumentRoot</directive>
- directive to show where in the filesystem the content for that host
- lives.</p>
-
- <note><title>Main host goes away</title>
- <p>If you are adding virtual hosts to an existing web server, you
- must also create a <directive type="section" module="core"
- >VirtualHost</directive> block for the existing host. The <directive
- module="core">ServerName</directive> and <directive module="core"
- >DocumentRoot</directive> included in this virtual host should be the
- same as the global <directive module="core">ServerName</directive> and
- <directive module="core">DocumentRoot</directive>. List this virtual
- host first in the configuration file so that it will act as the default
- host.</p>
- </note>
-
- <p>For example, suppose that you are serving the domain
- <code>www.domain.tld</code> and you wish to add the virtual host
- <code>www.otherdomain.tld</code>, which points at the same IP address.
- Then you simply add the following to <code>httpd.conf</code>:</p>
-
- <example>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p>You can alternatively specify an explicit IP address in place of the
- <code>*</code> in both the <directive module="core"
- >NameVirtualHost</directive> and <directive type="section" module="core"
- >VirtualHost</directive> directives. For example, you might want to do this
- in order to run some name-based virtual hosts on one IP address, and either
- IP-based, or another set of name-based virtual hosts on another address.</p>
-
- <p>Many servers want to be accessible by more than one name. This is
- possible with the <directive module="core">ServerAlias</directive>
- directive, placed inside the <directive type="section" module="core"
- >VirtualHost</directive> section. For example in the first <directive
- type="section" module="core">VirtualHost</directive> block above, the
- <directive module="core">ServerAlias</directive> directive indicates that
- the listed names are other names which people can use to see that same
- web site:</p>
-
- <example>
- ServerAlias domain.tld *.domain.tld
- </example>
-
- <p>then requests for all hosts in the <code>domain.tld</code> domain will
- be served by the <code>www.domain.tld</code> virtual host. The wildcard
- characters <code>*</code> and <code>?</code> can be used to match names.
- Of course, you can't just make up names and place them in <directive
- module="core">ServerName</directive> or <code>ServerAlias</code>. You must
- first have your DNS server properly configured to map those names to an IP
- address associated with your server.</p>
-
- <p>Finally, you can fine-tune the configuration of the virtual hosts
- by placing other directives inside the <directive type="section"
- module="core">VirtualHost</directive> containers. Most directives can be
- placed in these containers and will then change the configuration only of
- the relevant virtual host. To find out if a particular directive is allowed,
- check the <a href="../mod/directive-dict.html#Context">Context</a> of the
- directive. Configuration directives set in the <em>main server context</em>
- (outside any <directive type="section" module="core">VirtualHost</directive>
- container) will be used only if they are not overridden by the virtual host
- settings.</p>
-
- <p>Now when a request arrives, the server will first check if it is using
- an IP address that matches the <directive module="core"
- >NameVirtualHost</directive>. If it is, then it will look at each <directive
- type="section" module="core">VirtualHost</directive> section with a matching
- IP address and try to find one where the <directive module="core"
- >ServerName</directive> or <code>ServerAlias</code> matches the requested
- hostname. If it finds one, then it uses the configuration for that server.
- If no matching virtual host is found, then <strong>the first listed virtual
- host</strong> that matches the IP address will be used.</p>
-
- <p>As a consequence, the first listed virtual host is the <em>default</em>
- virtual host. The <directive module="core">DocumentRoot</directive> from
- the <em>main server</em> will <strong>never</strong> be used when an IP
- address matches the <directive module="core">NameVirtualHost</directive>
- directive. If you would like to have a special configuration for requests
- that do not match any particular virtual host, simply put that configuration
- in a <directive type="section" module="core">VirtualHost</directive>
- container and list it first in the configuration file.</p>
-
-</section>
-
-<section id="compat"><title>Compatibility with Older Browsers</title>
-
- <p>As mentioned earlier, there are some clients
- who do not send the required data for the name-based virtual
- hosts to work properly. These clients will always be sent the
- pages from the first virtual host listed for that IP address
- (the <cite>primary</cite> name-based virtual host).</p>
-
- <note><title>How much older?</title>
- <p>Please note that when we say older, we really do mean older. You are
- very unlikely to encounter one of these browsers in use today. All
- current versions of any browser send the <code>Host</code> header as
- required for name-based virtual hosts.</p>
- </note>
-
- <p>There is a possible workaround with the <directive
- module="core">ServerPath</directive>
- directive, albeit a slightly cumbersome one:</p>
-
- <p>Example configuration:</p>
-
- <example>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p>What does this mean? It means that a request for any URI
- beginning with "<code>/domain</code>" will be served from the
- virtual host <code>www.domain.tld</code>. This means that the
- pages can be accessed as <code>http://www.domain.tld/domain/</code>
- for all clients, although clients sending a <code>Host:</code> header
- can also access it as <code>http://www.domain.tld/</code>.</p>
-
- <p>In order to make this work, put a link on your primary
- virtual host's page to
- <code>http://www.domain.tld/domain/</code>. Then, in the virtual
- host's pages, be sure to use either purely relative links
- (<em>e.g.</em>, "<code>file.html</code>" or
- "<code>../icons/image.gif</code>") or links containing the
- prefacing <code>/domain/</code> (<em>e.g.</em>,
- "<code>http://www.domain.tld/domain/misc/file.html</code>" or
- "<code>/domain/misc/file.html</code>").</p>
-
- <p>This requires a bit of discipline, but adherence to these
- guidelines will, for the most part, ensure that your pages will
- work with all browsers, new and old.</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/name-based.xml.de b/docs/manual/vhosts/name-based.xml.de
deleted file mode 100644
index 4976053367..0000000000
--- a/docs/manual/vhosts/name-based.xml.de
+++ /dev/null
@@ -1,297 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 1.15 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="name-based.xml.meta">
-<parentdocument href="./">Virtual Hosts</parentdocument>
-<title>Unterst&uuml;tzung namensbasierter virtueller Hosts</title>
-
-<summary>
- <p>Das Dokument beschreibt, wann und wie namensbasierte virtuelle Hosts zu
- verwenden sind.</p>
-</summary>
-
-<seealso><a href="ip-based.html">Unterst&uuml;tzung IP-basierter virtueller
- Hosts</a></seealso>
-<seealso><a href="details.html">Tiefergehende Er&ouml;rterung der Zuweisung
- virtueller Hosts</a></seealso>
-<seealso><a href="mass.html">Dynamisch konfiguriertes
- Massen-Virtual-Hosting</a></seealso>
-<seealso><a href="examples.html">Beispiele f&uuml;r virtuelle Hosts in typischen
- Installationen</a></seealso>
-<seealso><a href="examples.html#serverpath"
- >ServerPath-Beispielkonfiguration</a></seealso>
-
-<section id="namevip"><title>Namensbasierte gegen&uuml;ber IP-basierten
- virtuellen Hosts</title>
-
- <p>IP-basierte virtuelle Hosts verwenden die IP-Adresse der Verbindung, um den
- korrekten virtuellen Host zur Bedienung einer Anfrage zu ermitteln. Folglich
- ben&ouml;tigen Sie eine IP-Adresse f&uuml;r jeden virtuellen Host. Bei der
- Verwendung von namensbasierten virtuellen Hosts verl&auml;&szlig;t sich der
- Server darauf, dass der Client den Hostnamen als Bestandteil der HTTP-Header
- angibt. Durch Anwendung dieser Technik k&ouml;nnen sich mehrere verschiedene
- Hosts die gleiche IP-Adresse teilen.</p>
-
- <p>Die Verwendung von namensbasierten virtuellen Hosts ist gew&ouml;hnlich
- einfacher. Sie m&uuml;ssen lediglich Ihren DNS-Server darauf einstellen,
- jeden Hostnamen auf die richtige IP-Adresse abzubilden, und dann den Apache
- HTTP Server so konfigurieren, dass er die verschiedenen Hostnamen erkennt.
- Namensbasierte virtuelle Hosts entsch&auml;rfen auch den Bedarf an
- knappen IP-Adressen. Daher sollten Sie namensbasierte virtuelle Hosts
- verwenden, sofern kein besonderer Grund daf&uuml;r existiert, IP-basierte
- virtuelle Hosts zu w&auml;hlen. M&ouml;gliche Gr&uuml;nde f&uuml;r die
- Verwendung IP-basierter virtueller Hosts sind:</p>
-
- <ul>
- <li>Einige antike Clients sind nicht kompatibel zu namensbasierten
- virtuellen Hosts. Damit namensbasierte virtuelle Hosts funktionieren,
- muss der Client den HTTP-Host-Header senden. Dies ist bei HTTP/1.1
- vorgeschrieben und in allen modernen HTTP/1.0-Browsern als Erweiterung
- implementiert. Wenn Sie Unterst&uuml;tzung f&uuml;r veraltete Clients
- ben&ouml;tigen und dennoch namensbasierte virtuelle Hosts verwenden,
- dann finden Sie eine m&ouml;gliche L&ouml;sung daf&uuml;r am Ende des
- Dokuments.</li>
-
- <li>Namensbasierte virtuelle Hosts k&ouml;nnen aufgrund der Natur des
- SSL-Protokolls nicht mit SSL-gesicherten Servern verwendet werden.</li>
-
- <li>Einige Betriebssysteme und Netzwerkanlagen setzen Techniken zum
- Bandbreiten-Management ein, die nicht zwischen Hosts unterscheiden
- k&ouml;nnen, wenn diese nicht auf verschiedenen IP-Adressen liegen.</li>
- </ul>
-
-</section>
-
-<section id="using"><title>Die Verwendung von namensbasierten virtuellen Hosts</title>
-
- <related>
- <modulelist>
- <module>core</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">NameVirtualHost</directive>
- <directive module="core">ServerAlias</directive>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerPath</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
- </related>
-
- <p>Um namensbasierte virtuelle Hosts zu verwenden, m&uuml;ssen Sie die
- IP-Adresse (und m&ouml;glicherweise den Port) des Servers benennen, an
- der Anfragen f&uuml;r die Hosts entgegengenommen werden. Dies wird mit
- der Direktive <directive module="core">NameVirtualHost</directive>
- eingestellt. Im Normalfall, wenn alle IP-Adressen des Server verwendet
- werden sollen, k&ouml;nnen Sie <code>*</code> als Argument f&uuml;r
- <directive module="core">NameVirtualHost</directive> verwenden. Wenn Sie
- vorhaben, mehrere Ports zu nutzen (etwa wenn SSL l&auml;uft), sollten
- Sie dem Argument einen Port hinzuf&uuml;gen, wie zum Beispiel
- <code>*:80</code>. Beachten Sie,
- dass die Angabe einer IP-Adresse in einer <directive
- module="core">NameVirtualHost</directive>-Anweisung den Server nicht
- automatisch an dieser Adresse lauschen l&auml;&szlig;t. Lesen Sie bitte "<a
- href="../bind.html">Bestimmen der vom Apache verwendeten Adressen und
- Ports</a>" f&uuml;r weitere Details. Zus&auml;tzlich muss jede hier
- angegebene IP-Adresse einer Netzwerkkarte des Servers zugeordnet sein.</p>
-
- <p>Der n&auml;chste Schritt ist die Erstellung eines <directive type="section"
- module="core">VirtualHost</directive>-Blocks f&uuml;r jeden einzelnen
- Host, den Sie bedienen wollen. Das Argument der Direktive <directive
- type="section" module="core">VirtualHost</directive> sollte das gleiche
- sein wie das Argument der <directive
- module="core">NameVirtualHost</directive>-Anweisung (d.h. eine IP-Adresse
- oder <code>*</code> f&uuml;r alle Adressen). Innerhalb jedes <directive
- type="section" module="core">VirtualHost</directive>-Blocks ben&ouml;tigen
- Sie zumindestens eine <directive
- module="core">ServerName</directive>-Anweisung, um zu bestimmen, welcher
- Host bedient wird, und eine <directive
- module="core">DocumentRoot</directive>-Anweisung, um anzugeben, wo im
- Dateisystem der Inhalt des Hosts abgelegt ist.</p>
-
- <note><title>Der Hauptserver verschwindet</title>
- Wenn Sie virtuelle Hosts zu einem bestehenden Webserver hinzuf&uuml;gen,
- m&uuml;ssen Sie auch einen <directive type="section"
- module="core">VirtualHost</directive>-Block f&uuml;r den bestehenden Host
- <transnote>und bisherigen Hauptserver</transnote> erstellen.
- Die <directive module="core">ServerName</directive>- und
- <directive module="core">DocumentRoot</directive>-Anweisungen zu diesem
- virtuellen Host sollten die gleichen sein wie die globalen <directive
- module="core">ServerName</directive>- und <directive
- module="core">DocumentRoot</directive>-Anweisungen. F&uuml;hren Sie diesen
- virtuellen Host als erstes in der Konfigurationsdatei auf, so dass er als
- Standard-Host fungiert.
- </note>
-
- <p>Vorausgesetzt, Sie bedienen z.B. die Domain
- <code>www.domain.tld</code> und m&ouml;chten den virtuellen Host
- <code>www.otherdomain.tld</code> hinzuf&uuml;gen, welcher auf
- die gleiche IP-Adresse zeigt. Dann f&uuml;gen Sie einfach Folgendes der
- <code>httpd.conf</code> hinzu:</p>
-
- <example>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p>Sie k&ouml;nnen anstelle des <code>*</code> bei den beiden Anweisungen
- <directive module="core">NameVirtualHost</directive> und <directive
- type="section" module="core">VirtualHost</directive> alternativ eine
- eindeutige IP-Adresse angeben. Das kann man beispielsweise machen, um
- einige namensbasierte virtuelle Hosts auf einer IP-Adresse zu betreiben und
- entweder IP-basierte oder ein anderes Set von namensbasierten virtuellen
- Hosts auf einer anderen Adresse.</p>
-
- <p>Viele Server wollen unter mehr als einem Namen erreichbar sein. Die
- Direktive <directive module="core">ServerAlias</directive>, die innerhalb
- des <directive type="section"
- module="core">VirtualHost</directive>-Abschnittes angegeben wird,
- erm&ouml;glicht dies. Zum Beispiel zeigt die <directive
- module="core">ServerAlias</directive>-Anweisung in dem ersten <directive
- type="section" module="core">VirtualHost</directive>-Block oben an, dass die
- aufgef&uuml;hrten Namen alternative Namen sind, die man verwenden kann, um
- das gleiche Webangebot zu erreichen:</p>
-
- <example>
- ServerAlias domain.tld *.domain.tld
- </example>
-
- <p>Anfragen f&uuml;r alle Hosts der Domain <code>domain.tld</code> werden
- von dem virtuellen Host <code>www.domain.tld</code> bedient. Die
- Platzhalter <code>*</code> und <code>?</code> k&ouml;nnen anstelle
- entsprechender Namen verwendet werden. Nat&uuml;rlich k&ouml;nnen Sie nicht
- einfach Namen erfinden und diese bei <directive
- module="core">ServerName</directive> oder <code>ServerAlias</code>
- angeben, Sie m&uuml;ssen zun&auml;chst Ihren DNS Server entsprechend
- konfigurieren, dass er diese Namen auf die mit Ihrem Server verkn&uuml;pfte
- IP-Adresse abbildet.</p>
-
- <p>Und schlu&szlig;endlich k&ouml;nnen Sie die Konfiguration der virtuellen
- Hosts mittels Angabe weiterer Direktiven innherhalb der <directive
- type="section" module="core">VirtualHost</directive>-Container
- feineinstellen. Die meisten Direktiven k&ouml;nnen in diesen Containern
- angegeben werden und ver&auml;ndern dann ausschlie&szlig;lich die
- Konfiguration des entsprechenden virtuellen Hosts. Pr&uuml;fen Sie den <a
- href="../mod/directive-dict.html#Context">Kontext</a> einer Direktive, um
- herauszufinden, ob eine bestimmte Direktive zul&auml;ssig ist.
- Im <em>Hauptserver-Kontext</em> (au&szlig;erhalb der <directive
- type="section" module="core">VirtualHost</directive>-Container) definierte
- Konfigurationsanweisungen werden nur dann angewendet, wenn sie nicht durch
- Einstellungen des virtuellen Hosts au&szlig;er Kraft gesetzt wurden.</p>
-
- <p>Wenn nun eine Anfrage eintrifft, pr&uuml;ft der Server zuerst, ob sie eine
- IP-Adresse verwendet, die der <directive
- module="core">NameVirtualHost</directive>-Anweisung entspricht. Ist dies der
- Fall, dann sieht er sich jeden <directive type="section"
- module="core">VirtualHost</directive>-Abschnitt mit einer passenden
- IP-Adresse an und versucht den einen zu finden, dessen <directive
- module="core">ServerName</directive>- oder <directive
- module="core">ServerAlias</directive>-Anweisung mit dem gew&uuml;nschten
- Hostnamen &uuml;bereinstimmt. Findet er einen, dann verwendet er die
- Konfiguration dieses Servers. Wird kein passender virtueller Host gefunden,
- dann wird <strong>der erste angegeben virtuelle Host</strong> verwendet,
- dessen IP-Adresse pa&szlig;t.</p>
-
- <p>Die Folge davon ist, dass der erste aufgef&uuml;hrte virtuelle Host der
- <em>Standard</em>-Virtual-Host ist. Die <directive
- module="core">DocumentRoot</directive>-Anweisung des <em>Hauptservers</em>
- wird <strong>niemals</strong> verwendet, wenn eine IP-Adresse mit einer
- <directive module="core">NameVirtualHost</directive>-Anweisung
- &uuml;bereinstimmt. Wenn Sie eine spezielle Konfiguration f&uuml;r Anfragen
- angeben m&ouml;chten, die keinem bestimmten virtuellen Host entsprechen,
- packen Sie diese Konfiguration einfach in einen <directive type="section"
- module="core">VirtualHost</directive>-Container und f&uuml;hren diesen als
- erstes in der Konfigurationsdatei auf.</p>
-
-</section>
-
-<section id="compat"><title>Kompatibilit&auml;t mit &auml;lteren Browsern</title>
-
- <p>Wie zuvor erw&auml;hnt gibt es einige Clients, die nicht die notwendigen
- Daten senden, mit denen namensbasierte virtuelle Hosts korrekt
- funktionieren. Diesen Clients werden stets die Seiten des ersten, f&uuml;r
- diese IP-Adresse aufgef&uuml;hrten virtuellen Hosts gesendet werden (des
- <cite>prim&auml;ren</cite> namensbasierten virtuellen Hosts).</p>
-
- <note><title>Was bedeutet &auml;lter?</title>
- <p>Beachten Sie bitte, wenn wir von &auml;lter sprechen, meinen wir auch
- &auml;lter. Es ist sehr unwahrscheinlich, dass sie einen dieser Browser
- heutzutage in Verwendung finden werden. Alle aktuellen Browser-Versionen
- senden den <code>Host</code>-Header, so wie er f&uuml;r namensbasierte
- virtuelle Hosts ben&auml;&ouml;tigt wird.</p>
- </note>
-
- <p>Mit der Direktive <directive module="core">ServerPath</directive> existiert
- eine m&ouml;gliche Behelfskonstruktion, obgleich sie etwas schwerf&auml;llig
- ist:</p>
-
- <p>Beispielkonfiguration:</p>
-
- <example>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p>Was bedeutet das? Es bedeutet, dass eine Anfrage f&uuml;r eine mit
- "<code>/domain</code>" beginnende URI von dem virtuellen Host
- <code>www.domain.tld</code> bedient wird. Dies hei&szlig;t, dass die Seiten
- f&uuml;r alle Clients unter <code>http://www.domain.tld/domain/</code>
- abrufbar sind, wenngleich Clients, die den Header <code>Host:</code>
- senden, auch &uuml;ber <code>http://www.domain.tld/</code> auf sie zugreifen
- k&ouml;nnen.</p>
-
- <p>Legen Sie einen Link auf der Seite Ihres prim&auml;ren virtuellen Hosts zu
- <code>http://www.domain.tld/domain/</code>, um die Behelfsl&ouml;sung
- verf&uuml;gbar zu machen. Bei den Seiten der virtuellen Hosts m&uuml;ssen
- Sie dann sicherstellen, entweder au&szlig;schlie&szlig;lich relative Links
- (<em>z.B.</em> "<code>file.html</code>" oder
- "<code>../icons/image.gif</code>") zu verwenden oder Links, die das
- einleitende <code>/domain/</code> enthalten (<em>z.B.</em>,
- "<code>http://www.domain.tld/domain/misc/file.html</code>" oder
- "<code>/domain/misc/file.html</code>").</p>
-
- <p>Dies erfordert etwas Disziplin, die Befolgung dieser Richtlinien stellt
- jedoch gr&ouml;&szlig;tenteils sicher, dass Ihre Seiten mit allen Browsern
- funktionieren, alten wie neuen.</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/name-based.xml.ja b/docs/manual/vhosts/name-based.xml.ja
deleted file mode 100644
index 934e5e59d2..0000000000
--- a/docs/manual/vhosts/name-based.xml.ja
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version='1.0' encoding='iso-2022-jp' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1.15 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="name-based.xml.meta">
-<parentdocument href="./">$B%P!<%A%c%k%[%9%H(B</parentdocument>
-<title>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B</title>
-
-<summary>
- <p>$B$3$NJ8=q$G$OL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r$I$s$J$H$-!"(B
- $B$I$&$d$C$F;H$&$+$r@bL@$7$^$9!#(B</p>
-</summary>
-
-<seealso><a href="ip-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a></seealso>
-<seealso><a href="details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B</a></seealso>
-<seealso><a href="mass.html">$BBgNL$N%P!<%A%c%k%[%9%H$NF0E*$J@_Dj(B</a></seealso>
-<seealso><a href="examples.html">$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B</a></seealso>
-<seealso><a href="examples.html#serverpath">ServerPath $B@_DjNc(B</a></seealso>
-
-<section id="namevip"><title>$BL>A0%Y!<%9$H(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$NHf3S(B</title>
-
- <p>IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$G$O!"1~Ez$9$k(B
- $B%P!<%A%c%k%[%9%H$X$N%3%M%/%7%g%s$r7hDj$9$k$?$a$K(B IP
- $B%"%I%l%9$r;HMQ$7$^$9!#$G$9$+$i!"$=$l$>$l$N%[%9%H$K8D!9$K(B IP
- $B%"%I%l%9$,I,MW$K$J$j$^$9!#$3$l$KBP$7$FL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$G$O!"(B
- $B%/%i%$%"%s%H$,(B HTTP $B%X%C%@$N0lIt$H$7$F%[%9%HL>$r9p$2$k!"(B
- $B$H$$$&$3$H$K0MB8$7$^$9!#$3$N5;=Q$GF10l(B IP
- $B%"%I%l%9$r0[$J$kB??t$N%[%9%H$G6&M-$7$F$$$^$9!#(B</p>
-
- <p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$ODL>oC1=c$G!"$=$l$>$l$N%[%9%HL>$H(B
- $B$=$l$KBP1~$9$k@53N$J(B IP $B%"%I%l%9$r(B DNS $B$G@_Dj$7!"0[$J$k(B
- $B%[%9%HL>$r6hJL$9$k$h$&$K(B Apache HTTP $B%5!<%P$r@_Dj$9$k$@$1$G$9!#(B
- $B$5$i$K!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$OITB-$9$k(B IP
- $B%"%I%l%9$N<{MW$r4KOB$7$^$9!#$7$?$,$C$F!"(BIP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r(B
- $BA*Br$9$Y$-FCDj$NM}M3$,$J$1$l$PL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$&$Y$-$G$9!#(B
- IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r;HMQ$9$k$3$H$r9MN8$9$kM}M3$H$7$F!"(B</p>
-
- <ul>
- <li>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$KBP1~$7$F$$$J$$8E$$%/%i%$%"%s%H$,$"$k(B
- $BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$,F/$/$?$a$K$O!"%/%i%$%"%s%H$O(B
- HTTP $B%[%9%H%X%C%@$rAw$C$F$3$J$1$l$P$J$j$^$;$s!#(B
- $B$3$l$O(B HTTP/1.1 $B$N;EMM$GMW5a$5$l$F$$$F!"$9$Y$F$N8=BeE*$J(B
- HTTP/1.0 $B%V%i%&%6$G$b3HD%$H$7$F<BAu$5$l$F$$$^$9!#(B
- $B$H$F$b8E$$%/%i%$%"%s%H$r%5%]!<%H$7$D$D!"L>A0%Y!<%9$N(B
- $B%P!<%A%c%k%[%9%H$r9T$$$?$$>l9g$O!"$3$NJ8=q$N:G8e$NJ}$K(B
- $B=q$+$l$F$$$k2r7h:v$K$J$k$+$b$7$l$J$$J}K!$r8+$F$/$@$5$$!#(B</li>
-
- <li>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$O(B SSL $B%W%m%H%3%k$NFCD'$K$h$j!"(B
- SSL $B%;%-%e%"%5!<%P$K$O;H$($^$;$s!#(B</li>
-
- <li>$B%*%Z%l!<%F%#%s%0%7%9%F%`$d%M%C%H%o!<%/AuCV$N$J$+$K$O!"(B
- $BJL$N(B IP $B%"%I%l%9>e$G$J$$>l9g!"J#?t$N%[%9%H$rJL07$$$G$-$J$$$h$&$J(B
- $BBS0h4IM}$NJ}K!$r<BAu$7$F$$$k$b$N$,$"$j$^$9!#(B</li>
- </ul>
-
-</section>
-
-<section id="using"><title>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$rMxMQ$9$k(B</title>
-
-<related>
- <modulelist>
- <module>core</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">NameVirtualHost</directive>
- <directive module="core">ServerAlias</directive>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerPath</directive>
- <directive module="core">VirtualHost</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
-</related>
-
- <p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$&$K$O!"$=$N%[%9%H$X$N(B
- $B%j%/%(%9%H$r<u$1IU$1$k%5!<%P$N(B IP $B%"%I%l%9(B ($B$b$7$+$7$?$i%]!<%H$b(B)
- $B$r;XDj$9$kI,MW$,$"$j$^$9!#(B
- $B$3$l$O(B <directive module="core">NameVirtualHost</directive>
- $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#DL>o!"(B<directive
- module="core">NameVirtualHost</directive> $B$G(B
- <code>*</code> $B$NB0@-$r;H$C$F%5!<%P$NA4$F$N(B IP $B%"%I%l%9$r;H$$$^$9!#(B
- ($BNc$($P(B SSL $B$N;HMQ$J$I$G(B) $BJ#?t$N%]!<%H$r;H$&$3$H$r7W2h$7$F$$$k$N$G$"$l$P!"(B
- $B0z?t$K(B <code>*:80</code> $B$N$h$&$K%]!<%H$b4^$a$k$h$&$K$7$F$/$@$5$$!#(B
- <directive module="core">NameVirtualHost</directive> $B%G%#%l%/%F%#%V$G(B
- IP $B%"%I%l%9$r=q$$$F$b!"(B
- $B<+F0E*$K%5!<%P$,$=$N(B IP $B%"%I%l%9$r%j%C%9%s$9$k$H$$$&$3$H$O$J$$$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#>\:Y$O!V(B<a href="../bind.html">Apache $B$N;H$&%"%I%l%9$H(B
- $B%]!<%H$r@_Dj$9$k(B</a>$B!W$rFI$s$G$/$@$5$$!#$5$i$K!"$3$3$G;XDj$5$l$?(B
- IP $B%"%I%l%9$OA4$F%5!<%P$N%M%C%H%o!<%/%$%s%?!<%U%'!<%9$H4XO"IU$1$i$l$F(B
- $B$$$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p>$B<!$O!"07$&%[%9%H$=$l$>$l$KBP$7$F(B <directive type="section"
- module="core">VirtualHost</directive> $B%V%m%C%/$r(B
- $B:n@.$7$F$/$@$5$$!#(B<directive module="core" type="section">VirtualHost</directive>
- $B%G%#%l%/%F%#%V$N0z?t$O(B <directive module="core">NameVirtualHost</directive>
- $B%G%#%l%/%F%#%V$N0z?t$HF1$8$K$7$F$/$@$5$$(B ($B$9$J$o$A!"(BIP $B%"%I%l%9$+!"A4$F$N%"%I%l%9$r0UL#$9$k(B
- <code>*</code>)$B!#$=$l$>$l$N(B <directive module="core" type="section">VirtualHost</directive>
- $B%G%#%l%/%F%#%V$NCf$K$O!":GDc8B!"$I$N%[%9%H$,07$o$l$k$+$r<($9(B <directive
- module="core">ServerName</directive> $B%G%#%l%/%F%#%V$H!"(B
- $B$=$N%[%9%HMQ$N%3%s%F%s%D$,%U%!%$%k%7%9%F%`>e$N$I$3$K$"$k$+$r<($9(B
- <directive module="core">DocumentRoot</directive> $B%G%#%l%/%F%#%V$r(B
- $B=q$/I,MW$,$"$j$^$9!#(B</p>
-
- <note><title>$B%a%$%s%[%9%H$O$J$/$J$j$^$9(B</title>
- <p>$B4{$K$"$k%&%'%V%5!<%P$K%P!<%A%c%k%[%9%H$rDI2C$9$k>l9g!"(B
- $B4{B8$N%&%'%V%5!<%P$KBP$7$F$b(B <directive module="core"
- type="section">VirtualHost</directive>
- $B%V%m%C%/$r:n$i$J$1$l$P$J$j$^$;$s!#$3$N%P!<%A%c%k%[%9%H$N(B
- <directive module="core">ServerName</directive> $B$H(B
- <directive module="core">DocumentRoot</directive>
- $B$O!"%0%m!<%P%k$J(B <directive module="core">ServerName</directive> $B$H(B
- <directive module="core">DocumentRoot</directive>
- $B$HF1$8$b$N$K$7$^$9!#$^$?!"$3$N%P!<%A%c%k%[%9%H$r@_Dj%U%!%$%k$NCf$G(B
- $B@hF,$KCV$$$F!"%G%U%)%k%H%[%9%H$H$7$FF0:n$9$k$h$&$K$7$^$9!#(B</p>
- </note>
-
- <p>$B$?$H$($P!"(B<code>www.domain.tld</code> $B$rF0$+$7$F$$$F!"(B
- $B$5$i$K%P!<%A%c%k%[%9%H(B <code>www.otherdomain.tld</code>
- $B$rDI2C$9$k$H$7$^$7$g$&!#$3$N%P!<%A%c%k%[%9%H$OF10l(B IP $B$r;X$7$F$$$k$H$7$^$9!#(B
- $B$=$N$h$&$J>l9g$O!"(B<code>httpd.conf</code>
- $B$K0J2<$N$h$&$J%3!<%I$rDI2C$9$k$@$1$G$9(B</p>
-
- <example>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p><directive module="core">NameVirtualHost</directive> $B5Z$S(B
- <directive module="core">VirtualHost</directive> $B$N$I$A$i$N>l9g$b!"(B
- * $B$NItJ,$K$OL@<(E*$K(B IP $B%"%I%l%9$r;XDj$9$k$3$H$,$G$-$^$9!#(B
- $BNc$($P!"$"$k(B IP $B%"%I%l%9$G$OL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$$$?$$0lJ}$G!"(B
- $BJL$N(B IP $B%"%I%l%9$G$O!"B>$N(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$d(B
- $BJLAH$NL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$$$?$$>l9g!"(B
- $B$=$&@_Dj$9$k$3$H$K$J$k$G$7$g$&!#(B</p>
-
- <p>$BJ#?t$NL>A0$G%5!<%P%"%/%;%9$,$G$-$k$h$&$K$7$?$$$3$H$bB?$$$G$7$g$&!#(B
- $B$3$N$h$&$J$3$H$O!"(B<directive module="core"
- >ServerAlias</directive> $B%G%#%l%/%F%#%V$r(B <directive module="core"
- type="section">VirtualHost</directive>
- $B%;%/%7%g%s$K5-=R$9$k$3$H$G<B8=$G$-$^$9!#(B
- $BNc$($P>e5-$N(B <directive module="core"
- type="section">VirtualHost</directive> $B$NNc$G$"$l$P!"(B
- $B<!$N$h$&$K0lMw$K5s$2$i$l$?L>A0$,!"(B
- $B%f!<%6$,F10l$N%&%'%V%5%$%H$H$7$FL\$K$7$F;HMQ$G$-$k%5!<%PL>$G$"$k!"(B
- $B$H(B <directive module="core">ServerAlias</directive>
- $B%G%#%l%/%F%#%V$G;XDj$G$-$^$9!#(B</p>
-
- <example>
- ServerAlias domain.tld *.domain.tld
- </example>
-
- <p><code>domain.tld</code> $B%I%a%$%s$X$NA4$F$N%[%9%H$X$N%j%/%(%9%H$O(B
- <code>www.domain.tld</code> $B$N%P!<%A%c%k%[%9%H$,=hM}$7$^$9!#(B
- $BL>A0$r%^%C%A$5$;$k$?$a$K!"%o%$%k%I%+!<%IJ8;z(B * $B$d(B ?
- $B$r;HMQ$9$k$3$H$b$G$-$^$9!#$b$A$m$s;W$$$D$-$NL>A0$r:n$C$F!"(B
- <directive module="core">ServerName</directive> $B$d(B
- <directive module="core">ServerAlias</directive>
- $B$K$=$NL>A0$r=q$/$H$$$C$?$3$H$O$G$-$^$;$s!#$^$:$O!"(B
- $B$3$l$i$NL>A0$,(B $B%5!<%P$KIU$1$i$l$?(B IP $B%"%I%l%9$K%^%C%W$5$l$k$h$&$K(B
- DNS $B%5!<%P$rE,@Z$K@_Dj$7$J$1$l$P$J$j$^$;$s!#(B</p>
-
- <p>$B:G8e$K!"(B<directive module="core"
- type="section">VirtualHost</directive> $B%3%s%F%J$NCf$K(B
- $BB>$N%G%#%l%/%F%#%V$r=q$/$3$H$G!"%P!<%A%c%k%[%9%H$N@_Dj$r:Y$+$/D4@0(B
- $B$9$k$3$H$,$G$-$^$9!#(B
- $B$[$H$s$I$N%G%#%l%/%F%#%V$O$3$l$i$N%3%s%F%J$K@_CV$9$k$3$H$,$G$-$F!"(B
- $BJQ99E@$O$=$N%P!<%A%c%k%[%9%H$KBP$7$F$N$_M-8z$K$J$j$^$9!#(B
- $B$I$N%G%#%l%/%F%#%V$r=q$/$3$H$,$G$-$k$+$O!"%G%#%l%/%F%#%V$N(B <a
- href="../mod/directive-dist.html#context">$B%3%s%F%-%9%H(B</a> $B$r(B
- $BD4$Y$F$/$@$5$$!#(B<em>$B<g%5!<%P%3%s%F%-%9%H(B</em>
- (<directive module="core" type="section">VirtualHost</directive>
- $B%3%s%F%J$N30(B) $B$N@_DjMQ%G%#%l%/%F%#%V$O%P!<%A%c%k%[%9%H$G$N@_Dj$G(B
- $B>e=q$-$5$l$J$$>l9g$N$_;HMQ$5$l$^$9!#(B</p>
-
- <p>$B%j%/%(%9%H$,Mh$k$H!"%5!<%P$O$^$::G=i$K(B <directive module="core"
- type="section">NameVirtualHost</directive>
- $B$K%^%C%A$9$k(B IP $B%"%I%l%9$+$I$&$+$r%A%'%C%/$7$^$9!#%^%C%A$9$l$P(B
- $B%^%C%A$7$?(B IP $B%"%I%l%9$N(B <directive module="core"
- type="section">VirtualHost</directive>
- $B$N$=$l$>$l$N%;%/%7%g%s$NCf$+$i(B
- <directive module="core">ServerName</directive> $B$+(B
- <directive module="core">ServerAlias</directive>
- $B$KMW5a$5$l$?%[%9%HL>$,$"$k$+C5$7$^$9!#(B
- $B8+$D$+$l$P$=$N%5!<%PMQ$N@_Dj$r;H$$$^$9!#%^%C%A$9$k%P!<%A%c%k%[%9%H(B
- $B$,8+$D$+$i$J$1$l$P!"%^%C%A$7$?(B IP $B%"%I%l%9$N(B
- <strong>$B%j%9%H$N:G=i$K$"$k%P!<%A%c%k%[%9%H(B</strong> $B$,;H$o$l$^$9!#(B</p>
-
- <p>$B7k2L$H$7$F!"%j%9%H$N:G=i$N%P!<%A%c%k%[%9%H$,(B <em>$B%G%U%)%k%H(B</em> $B$N(B
- $B%P!<%A%c%k%[%9%H$K$J$j$^$9!#(BIP $B%"%I%l%9$,(B <directive
- module="core">NameVirtualHost</directive>
- $B%G%#%l%/%F%#%V$K%^%C%A$7$?>l9g$O!"(B<em>$B%a%$%s$N%5!<%P(B</em> $B$N(B
- <directive module="core">DocumentRoot</directive>
- $B$O(B<strong>$B7h$7$F;H$o$l$^$;$s(B</strong>
- $B$I$N%P!<%A%c%k%[%9%H$K$b%^%C%A$7$J$$%j%/%(%9%H$KBP$7$F!"(B
- $BFCJL$J@_Dj$r$7$?$$$N$G$"$l$P!"@_Dj%U%!%$%kCf$N:G=i$N(B
- <code>&lt;VirtualHost&gt;</code> $B%3%s%F%J$K$=$l$r5-=R$7$F$/$@$5$$!#(B</p>
-
-</section>
-
-<section id="compat"><title>$B8E$$%V%i%&%6$H$N8_49@-(B</title>
-
- <p>$B0JA0=R$Y$?$h$&$K!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$,@5$7$/F0:n$9$k(B
- $B$?$a$KI,MW$J>pJs$rAw$C$F$3$J$$%/%i%$%"%s%H$,0MA3$H$7$FB8:_$7$F$$$^$9!#(B
- $B$=$N$h$&$J%/%i%$%"%s%H$KBP$7$F$O!"3:Ev$9$k(B IP $B%"%I%l%9$K$D$$$F!"(B
- $B0lHV:G=i$K@_Dj$5$l$F$$$k%P!<%A%c%k%[%9%H(B
- (<cite>$B%W%i%$%^%j(B</cite>$B$NL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B)
- $B$+$i%Z!<%8$,Aw$jJV$5$l$^$9!#(B</p>
-
- <note><title>$B$I$N$0$i$$8E$$$N(B ?</title>
- <p>$B!V8E$$!W$HI=8=$7$F$$$k>l9g!"K\Ev$K8E$$$3$H$r0UL#$7$F;H$C$F$$$^$9!#(B
- $BIT9,$K$7$F:#8=:_$G$b$3$N$h$&$J8E$$%V%i%&%6$KAx6x$9$k$3$H$,$"$j$^$9!#(B
- $B8=:_$N%V%i%&%6$OA4$F!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$KI,MW$J(B
- <code>Host</code> $B%X%C%@$rAw$j$^$9!#(B</p>
- </note>
-
- <p><a href="../mod/core.html#serverpath"><code>ServerPath</code></a>
- $B%G%#%l%/%F%#%V$GBP=h$,2DG=$G$9!#$A$g$C$HIT3J9%$G$9$1$l$I$b!#(B</p>
-
- <p>$B@_DjNc(B</p>
-
- <example>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p>$B$3$NNc$K$O$I$&$$$&0UL#$,$"$k$G$7$g$&$+(B? $B$3$l$O(B
- "<code>/domain</code>" $B$G;O$^$k(B URI $B$X$N%j%/%(%9%H$O$9$Y$F!"(B
- $B%P!<%A%c%k%[%9%H(B <code>www.domain.tld</code> $B$G=hM}$5$l$k!"(B
- $B$H$$$&0UL#$G$9!#$D$^$j!"$9$Y$F$N%/%i%$%"%s%H$G(B
- <code>http://www.domain.tld/domain/</code> $B$G%"%/%;%9$G$-$k%Z!<%8$,!"(B
- <code>Host:</code> $B%X%C%@$rAw$C$F$/$k%/%i%$%"%s%H$G$"$l$P(B
- <code>http://www.domain.tld/</code> $B$H$7$F$b%"%/%;%9$G$-$k!"(B
- $B$H$$$&0UL#$G$9!#(B</p>
-
- <p>$B$3$l$,F0:n$9$k$h$&$K$9$k$K$O!"(B
- $B%W%i%$%^%j$N%P!<%A%c%k%[%9%H$N%Z!<%8$K(B
- <code>http://www.domain.tld/domain/</code> $B$X$N%j%s%/$r@_CV$7$^$9!#(B
- $B$=$7$F!"%P!<%A%c%k%[%9%H$N%Z!<%8$G$O!"=c?h$JAjBP%j%s%/(B (<em>$BNc(B:</em>
- "<code>file.html</code>" $B$d(B "<code>../icons/image.gif</code>")$B!"(B
- $B$"$k$$$O(B <code>/domain/</code> $B$G;O$^$k%j%s%/(B (<em>$BNc(B:</em>
- "<code>http://www.domain.tld/domain/misc/file.html</code>" $B$d(B
- "<code>/domain/misc/file.html</code>") $B$@$1$r@_CV$7$^$9!#(B</p>
-
- <p>$B$3$l$K$O!"4vJ,$+$N5,N'$,I,MW$H$J$j$^$9$,!"(B
- $B$3$N$h$&$J%,%$%I%i%$%s$rCi<B$K<i$k$3$H$K$h$j!"$?$$$F$$$N>l9g!"(B
- $B$9$Y$F$N%V%i%&%6$G(B $B!=(B $B?7$7$$%V%i%&%6$G$b8E$$$b$N$G$b(B $B!=(B
- $B:n@.$7$?%Z!<%8$,8+$($k$H$$$&$3$H$rJ]>Z$7$^$9!#(B</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/name-based.xml.ko b/docs/manual/vhosts/name-based.xml.ko
deleted file mode 100644
index eb79b5ad9d..0000000000
--- a/docs/manual/vhosts/name-based.xml.ko
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version='1.0' encoding='EUC-KR' ?>
-<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 1.15 -->
-
-<!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manualpage metafile="name-based.xml.meta">
-<parentdocument href="./">°¡»óÈ£½ºÆ®</parentdocument>
-<title>À̸§±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</title>
-
-<summary>
- <p>ÀÌ ¹®¼­´Â À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏ´Â °æ¿ì¿Í ¹æ¹ýÀ»
- ¼³¸íÇÑ´Ù.</p>
-</summary>
-
-<seealso><a href="ip-based.html">IP±â¹Ý °¡»óÈ£½ºÆ® Áö¿ø</a></seealso>
-<seealso><a href="details.html">°¡»óÈ£½ºÆ® ã±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í</a></seealso>
-<seealso><a href="mass.html">´ë·®ÀÇ °¡»óÈ£½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¼³Á¤Çϱâ</a></seealso>
-<seealso><a href="examples.html">ÀϹÝÀûÀÎ °¡»óÈ£½ºÆ® ¿¹</a></seealso>
-<seealso><a href="examples.html#serverpath">ServerPath ¼³Á¤ ¿¹</a></seealso>
-
-<section id="namevip"><title>À̸§±â¹Ý ´ë IP±â¹Ý °¡»óÈ£½ºÆ®</title>
-
- <p>IP±â¹Ý °¡»óÈ£½ºÆ®´Â ¿¬°áÇÑ IP ÁÖ¼Ò¸¦ °¡Áö°í ¼­ºñ½ºÇÒ
- °¡»óÈ£½ºÆ®¸¦ °áÁ¤ÇÑ´Ù. ±×·¡¼­ °¢ È£½ºÆ®´Â ¼­·Î ´Ù¸¥ IP ÁÖ¼Ò¸¦
- °¡Á®¾ß ÇÑ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®ÀÇ °æ¿ì ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®°¡
- HTTP Çì´õ·Î È£½ºÆ®¸íÀ» ¾Ë·ÁÁÖ±æ ¹Ù¶õ´Ù. ÀÌ·± ¹æ¹ýÀ¸·Î ÇÑ
- IP ÁÖ¼Ò·Î ¿©·¯ ´Ù¸¥ È£½ºÆ®¸¦ ¼­ºñ½ºÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®´Â DNS ¼­¹ö°¡ °¢ È£½ºÆ®¸íÀÌ ¿Ã¹Ù¸¥
- IP ÁÖ¼Ò·Î ´ëÀÀÇϵµ·Ï °¡»óÈ£½ºÆ®¸¦ ¼³Á¤ÇÏ°í, ´Ù¸¥ È£½ºÆ®¸íÀ» ±¸º°ÇÒ
- ¼ö ÀÖµµ·Ï ¾ÆÆÄÄ¡ À¥¼­¹ö¸¦ ¼³Á¤Çϱ⸸ ÇϸéµÇ¹Ç·Î ´õ °£´ÜÇÏ´Ù. À̸§±â¹Ý
- °¡»óÈ£½ºÆ®´Â ¶Ç ¿©·¯ IP ÁÖ¼Ò°¡ ÇÊ¿ä¾ø´Ù. ±×·¯¹Ç·Î Ưº°È÷
- IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ ¼±ÅÃÇÒ ÀÌÀ¯°¡ ¾ø´Ù¸é À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦
- »ç¿ëÇØ¾ß ÇÑ´Ù. IP±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇؾßÇÒ ÀÌÀ¯·Î´Â:</p>
-
- <ul>
- <li>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ Áö¿øÇÏÁö¾Ê´Â ¿À·¡µÈ
- Ŭ¶óÀ̾ðÆ®µéÀÌ ÀÖ´Ù. À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏ·Á¸é
- Ŭ¶óÀ̾ðÆ®°¡ HTTP Host Çì´õ¸¦ º¸³»¾ß ÇÑ´Ù. ÀÌ´Â
- HTTP/1.1¿¡¼­´Â ÇʼöÀÌ°í, ÃÖ±Ù ¸ðµç HTTP/1.0 ºê¶ó¿ìÀúµéµµ
- È®ÀåÀ¸·Î Áö¿øÇÑ´Ù. ¸¸¾à À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇϸ鼭
- ¿À·¡µÈ Ŭ¶óÀ̾ðÆ®¸¦ Áö¿øÇØ¾ß ÇÑ´Ù¸é ÀÌ ¹®¼­ ³¡¿¡ ÀÖ´Â
- ¹æ¹ýÀ» »ìÆìºÁ¶ó.</li>
-
- <li>SSL ÇÁ·ÎÅäÄÝÀÇ ¼º°Ý»ó SSL º¸¾È¼­¹ö¿¡¼­ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.</li>
-
- <li>¾î¶² ¿î¿µÃ¼Á¦³ª ³×Æ®¿÷ ÀåÄ¡´Â ´Ù¸¥ IP ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö
- ¾ÊÀ¸¸é È£½ºÆ®¸¦ ±¸º°ÇÏÁö ¸øÇÏ´Â ³×Æ®¿÷ »ç¿ë·®(bandwidth)
- °ü¸®±â¼úÀ» »ç¿ëÇÑ´Ù.</li>
- </ul>
-
-</section>
-
-<section id="using"><title>À̸§±â¹Ý °¡»óÈ£½ºÆ® »ç¿ëÇϱâ</title>
-
-<related>
- <modulelist>
- <module>core</module>
- </modulelist>
-
- <directivelist>
- <directive module="core">DocumentRoot</directive>
- <directive module="core">NameVirtualHost</directive>
- <directive module="core">ServerAlias</directive>
- <directive module="core">ServerName</directive>
- <directive module="core">ServerPath</directive>
- <directive module="core" type="section">VirtualHost</directive>
- </directivelist>
-</related>
-
- <p>À̸§±â¹Ý °¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏ·Á¸é ¼­¹ö´Â ¿¬°áÀ» ¹ÞÀ»
- IP ÁÖ¼Ò¸¦ (¾Æ¸¶ Æ÷Æ®µµ) Á¤ÇØ¾ß ÇÑ´Ù. ÀÌ´Â <directive
- module="core">NameVirtualHost</directive> Áö½Ã¾î·Î °¡´ÉÇÏ´Ù.
- ÀϹÝÀûÀ¸·Î ¼­¹öÀÇ ¸ðµç IP ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù¸é
- <directive module="core">NameVirtualHost</directive>ÀÇ
- ¾Æ±Ô¸ÕÆ®·Î <code>*</code>¸¦ »ç¿ëÇÑ´Ù. ¿©·¯ Æ÷Æ®¸¦ »ç¿ëÇÒ
- (¿¹¸¦ µé¾î, SSLÀ» »ç¿ëÇÒ) °èȹÀ̶ó¸é <code>*:80</code>°ú
- °°ÀÌ ¾Æ±Ô¸ÕÆ®¿¡ Æ÷Æ®¸¦ Ãß°¡ÇØ¾ß ÇÑ´Ù. <directive
- module="core">NameVirtualHost</directive> Áö½Ã¾î¿¡ IP ÁÖ¼Ò¸¦
- Àû¾îÁÖ¾ú´Ù°í ¼­¹ö°¡ ÀÚµ¿À¸·Î ±× IP ÁÖ¼Ò¸¦ ±â´Ù¸®Áö ¾ÊÀ½À»
- ÁÖÀÇÇ϶ó. ÀÚ¼¼ÇÑ ³»¿ëÀº <a href="../bind.html">¾ÆÆÄÄ¡°¡
- »ç¿ëÇÒ ÁÖ¼Ò¿Í Æ÷Æ® ¼³Á¤Çϱâ</a>¸¦ Âü°íÇ϶ó. ¶Ç, ¿©±â¼­
- ÁöÁ¤ÇÑ IP ÁÖ¼Ò´Â ¼­¹öÀÇ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽ºÀ̾î¾ß ÇÑ´Ù.</p>
-
- <p>´ÙÀ½ ´Ü°è´Â ¼­ºñ½ºÇÏ·Á´Â È£½ºÆ®º°·Î <directive
- type="section" module="core">VirtualHost</directive> ºí·ÏÀ»
- ¸¸µå´Â ÀÏÀÌ´Ù. <directive type="section"
- module="core">VirtualHost&gt;</directive> Áö½Ã¾îÀÇ ¾Æ±Ô¸ÕÆ®´Â
- <directive module="core">NameVirtualHost</directive> Áö½Ã¾îÀÇ
- ¾Æ±Ô¸ÕÆ®(¿¹¸¦ µé¾î, IP ÁÖ¼Ò³ª ¸ðµç ÁÖ¼Ò¸¦ ¶æÇÏ´Â <code>*</code>)¿Í
- °°¾Æ¾ß ÇÑ´Ù. <directive type="section"
- module="core">VirtualHost&gt;</directive> ºí·Ï ¾È¿¡´Â
- ÃÖ¼ÒÇÑ ¼­ºñ½ºÇÒ È£½ºÆ®¸¦ ÁöÁ¤ÇÏ´Â <directive
- module="core">ServerName</directive> Áö½Ã¾î¿Í È£½ºÆ®ÀÇ
- ³»¿ëÀÌ ÆÄÀϽýºÅÛ ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ÁöÁ¤ÇÏ´Â <directive
- module="core">DocumentRoot</directive> Áö½Ã¾î°¡ ÇÊ¿äÇÏ´Ù.</p>
-
- <note><title>ÁÖ È£½ºÆ®°¡ ¾ø¾îÁø´Ù</title>
- <p>±âÁ¸¿¡ »ç¿ëÇÏ´ø À¥¼­¹ö¿¡ °¡»óÈ£½ºÆ®¸¦ Ãß°¡ÇÑ´Ù¸é
- ±âÁ¸¿¡ »ç¿ëÇÏ´ø È£½ºÆ®¿¡ ´ëÇÑ <directive type="section"
- module="core">VirtualHost</directive> ºí·Ïµµ Ãß°¡Çؾß
- ÇÑ´Ù. ÀÌ ºí·Ï¿¡ Æ÷ÇÔÇÏ´Â <directive
- module="core">ServerName</directive>°ú <directive
- module="core">DocumentRoot</directive>´Â Àüü <directive
- module="core">ServerName</directive>°ú <directive
- module="core">DocumentRoot</directive>¿Í °°¾Æ¾ß ÇÑ´Ù.
- ¼³Á¤ÆÄÀÏ¿¡¼­ ÀÌ °¡»óÈ£½ºÆ®¸¦ °¡Àå ¸ÕÀú ÀûÀ¸¸é ±âº» È£½ºÆ®°¡
- µÈ´Ù.</p>
- </note>
-
- <p>¿¹¸¦ µé¾î <code>www.domain.tld</code> µµ¸ÞÀÎÀ» ¼­ºñ½ºÇÏ°í
- ÀÖ¾ú´Âµ¥ °°Àº IP ÁÖ¼Ò¿¡
- <code>www.otherdomain.tld</code>¶õ °¡»óÈ£½ºÆ®¸¦ Ãß°¡ÇÏ°í
- ½Í´Ù°í °¡Á¤ÇÏÀÚ. <code>httpd.conf</code>¿¡ ´ÙÀ½°ú °°ÀÌ
- Ãß°¡ÇÏ¸é µÈ´Ù:</p>
-
- <example>
- NameVirtualHost *:80<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerAlias domain.tld *.domain.tld<br />
- DocumentRoot /www/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- <br />
- &lt;VirtualHost *:80&gt;<br />
- <indent>ServerName www.otherdomain.tld<br />
- DocumentRoot /www/otherdomain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p><directive module="core">NameVirtualHost</directive>¿Í
- <directive type="section" module="core">VirtualHost</directive>
- Áö½Ã¾î µÑ ¸ðµÎ <code>*</code> ´ë½Å Á÷Á¢ IP ÁÖ¼Ò¸¦ ÁöÁ¤ÇÒ
- ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, ÀÌ·±½ÄÀ¸·Î ÇÑ IP ÁÖ¼Ò¿¡ ¿©·¯ À̸§±â¹Ý
- °¡»óÈ£½ºÆ®µéÀ» µ¹¸®°í, ´Ù¸¥ ÁÖ¼Ò¿¡ IP±â¹Ý ȤÀº À̸§±â¹Ý
- °¡»óÈ£½ºÆ®µéÀ» µ¹¸± ¼ö ÀÖ´Ù.</p>
-
- <p>¾î¶² ¼­¹ö´Â ¿©·¯ À̸§À¸·Î Á¢¼ÓÇÒ ¼ö ÀÖ±æ ¹Ù¶õ´Ù. ÀÌ´Â
- <directive type="section" module="core">VirtualHost</directive>
- ¼½¼Ç ¾È¿¡ <directive module="core">ServerAlias</directive>
- Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î À§ÀÇ Ã¹¹ø° <directive
- type="section" module="core">VirtualHost</directive> ºí·Ï¿¡¼­
- <directive module="core">ServerAlias</directive> Áö½Ã¾î¸¦
- »ç¿ëÇÏ¸é ¿­°ÅÇÑ À̸§À¸·Î °°Àº À¥»çÀÌÆ®¸¦ º¼ ¼ö ÀÖ´Ù:</p>
-
- <example>
- ServerAlias domain.tld *.domain.tld
- </example>
-
- <p><code>domain.tld</code> µµ¸ÞÀο¡ ÀÖ´Â ¸ðµç È£½ºÆ®¿¡ ´ëÇÑ
- ¿äûÀ» <code>www.domain.tld</code> °¡»óÈ£½ºÆ®°¡ ¼­ºñ½ºÇÑ´Ù.
- À̸§À» ÁÙ¶§ ¿ÍÀϵåÄ«µå ¹®ÀÚ <code>*</code>¿Í <code>?</code>¸¦
- »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð <directive
- module="core">ServerName</directive>À̳ª <code>ServerAlias</code>¿¡
- À̸§À» Àû¾îÁÖ¾ú´Ù°í ³¡ÀÌ ¾Æ´Ï´Ù. ¸ÕÀú ÀÌ À̸§µéÀÌ ¼­¹öÀÇ
- IP ÁÖ¼Ò·Î ´ëÀÀÇϵµ·Ï DNS ¼­¹ö¸¦ ¾Ë¸Â°Ô ¼³Á¤ÇØ¾ß ÇÑ´Ù.</p>
-
- <p>¸¶Áö¸·À¸·Î <directive type="section"
- module="core">&lt;VirtualHost&gt;</directive> ¾È¿¡ ´Ù¸¥
- Áö½Ã¾îµéÀ» »ç¿ëÇÏ¿© °¡»óÈ£½ºÆ®¸¦ ÀÚ¼¼È÷ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
- ´ëºÎºÐÀÇ Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, °ü·ÃµÈ °¡»óÈ£½ºÆ®ÀÇ ¼³Á¤¸¸À»
- º¯°æÇÑ´Ù. ¾î¶² Áö½Ã¾î°¡ »ç¿ë°¡´ÉÇÑÁö ¾Ë·Á¸é Áö½Ã¾îÀÇ <a
- href="../mod/directive-dict.html#Context">»ç¿ëÀå¼Ò</a>¸¦
- È®ÀÎÇ϶ó. (<directive type="section"
- module="core">&lt;VirtualHost&gt;</directive> ¾ÈÀÌ ¾Æ´Ñ)
- <em>ÁÖ¼­¹ö¼³Á¤</em>¿¡¼­ ÁöÁ¤ÇÑ ¼³Á¤ Áö½Ã¾î´Â °¡»óÈ£½ºÆ®¿¡
- °°Àº ¼³Á¤ Áö½Ã¾î°¡ ¾ø´Â °æ¿ì¿¡¸¸ »ç¿ëµÈ´Ù.</p>
-
- <p>¿äûÀ» ¹ÞÀ¸¸é ¼­¹ö´Â ¸ÕÀú <directive
- module="core">NameVirtualHost</directive>¿¡¼­ ÁöÁ¤ÇÑ IP
- ÁÖ¼ÒÀÎÁö °Ë»çÇÑ´Ù. ±×·¸´Ù¸é ±× IP ÁÖ¼Ò¸¦ °¡Áø <directive
- type="section" module="core">VirtualHost</directive>
- ¼½¼Çµé¿¡¼­ ¿äûÇÑ È£½ºÆ®¸í°ú ÀÏÄ¡ÇÏ´Â <directive
- module="core">ServerName</directive>À̳ª
- <code>ServerAlias</code>¸¦ ã´Â´Ù. ãÀ¸¸é ±× ¼³Á¤À» »ç¿ëÇÑ´Ù.
- ÀûÀýÇÑ °¡»óÈ£½ºÆ®¸¦ ãÁö¸øÇϸé, IP ÁÖ¼Ò¿¡ ÇØ´çÇÏ´Â
- <strong>°¡»óÈ£½ºÆ®µéÁß Ã¹¹ø° °Í</strong>À» »ç¿ëÇÑ´Ù.</p>
-
- <p>°á°úÀûÀ¸·Î óÀ½¿¡ ³ª¿Â °¡»óÈ£½ºÆ®°¡ <em>±âº»</em>
- °¡»óÈ£½ºÆ®°¡ µÈ´Ù. IP ÁÖ¼Ò°¡ <directive
- module="core">NameVirtualHost</directive> Áö½Ã¾î¿¡ ÇØ´çÇϸé,
- <em>ÁÖ¼­¹ö</em>ÀÇ <directive module="core">DocumentRoot</directive>´Â
- <strong>Àý´ë·Î</strong> »ç¿ëÇÏÁö ¾Ê´Â´Ù. ƯÁ¤ °¡»óÈ£½ºÆ®¿¡
- ÇØ´çÇÏÁö¾Ê´Â ¿äûÀ» ¼³Á¤ÇÏ·Á¸é ¼³Á¤À» <directive type="section"
- module="core">VirtualHost</directive>¿¡ ´ã°í ¼³Á¤ÆÄÀÏ¿¡¼­
- ¸ÕÀú ³ª¿Àµµ·Ï ÇÏ¸é µÈ´Ù.</p>
-
-</section>
-
-<section id="compat"><title>¿À·¡µÈ ºê¶ó¿ìÀú¿Í ȣȯ</title>
-
- <p>ÀÌ¹Ì Àû¾úµíÀÌ À̸§±â¹Ý °¡»óÈ£½ºÆ®°¡ ¿Ã¹Ù·Î µ¿ÀÛÇϱâÀ§ÇØ
- ÇÊ¿äÇÑ Á¤º¸¸¦ º¸³»Áö¾Ê´Â Ŭ¶óÀ̾ðÆ®°¡ ÀÖ´Ù. ÀÌ·± Ŭ¶óÀ̾ðÆ®´Â
- Ç×»ó ¿äûÇÑ IP ÁÖ¼Ò¿¡ ´ëÇØ Ã¹¹ø°·Î ³ª¿À´Â °¡»óÈ£½ºÆ®
- (<cite>ÃÖÃÊÀÇ</cite> À̸§±â¹Ý °¡»óÈ£½ºÆ®)°¡
- ¼­ºñ½ºÇÑ´Ù.</p>
-
- <note><title>¾ó¸¶³ª ¿À·¡µÈ °ÍÀ» ¸»Çϴ°¡?</title>
- <p>¿©±â¼­ ¿À·¡µÇ¾úÀ½Àº ½ÇÁ¦·Î »ó´çÈ÷ ¿À·¡µÈ °ÍÀ» ¶æÇÑ´Ù.
- ¿À´Ã³¯ ÀÌ·± ºê¶ó¿ìÀú¸¦ »ç¿ëÇÒ ÀÏÀº °ÅÀǾø´Ù. ¿äÁò
- ºê¶ó¿ìÀú´Â ¸ðµÎ À̸§±â¹Ý °¡»óÈ£½ºÆ®¿¡ ÇÊ¿äÇÑ <code>Host</code>
- Çì´õ¸¦ º¸³½´Ù.</p>
- </note>
-
- <p>ÀÌ ¹®Á¦´Â ¾à°£ °ÅÃßÀ彺·´Áö¸¸ <directive
- module="core">ServerPath</directive> Áö½Ã¾î·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù:</p>
-
- <p>¼³Á¤ ¿¹:</p>
-
- <example>
- NameVirtualHost 111.22.33.44<br />
- <br />
- &lt;VirtualHost 111.22.33.44&gt;<br />
- <indent>
- ServerName www.domain.tld<br />
- ServerPath /domain<br />
- DocumentRoot /web/domain<br />
- </indent>
- &lt;/VirtualHost&gt;<br />
- </example>
-
- <p>ÀÌ°Ô ¹«½¼ ¶æÀΰ¡? "<code>/domain</code>"·Î ½ÃÀÛÇÏ´Â
- URI¿¡ ´ëÇÑ ¿äûÀº °¡»óÈ£½ºÆ® <code>www.domain.tld</code>°¡
- ¼­ºñ½ºÇÑ´Ù. Áï, <code>Host:</code> Çì´õ¸¦ º¸³»´Â Ŭ¶óÀ̾ðÆ®´Â
- <code>http://www.domain.tld/</code>¸¸À¸·Îµµ Á¢±ÙÇÒ ¼ö ÀÖÁö¸¸,
- <code>http://www.domain.tld/domain/</code>À¸·Î´Â ¸ðµç
- Ŭ¶óÀ̾ðÆ®°¡ ÆäÀÌÁö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.</p>
-
- <p>À̸¦ À§ÇØ ÃÖÃÊÀÇ °¡»óÈ£½ºÆ®¿¡ ÀÖ´Â ÆäÀÌÁö¿¡
- <code>http://www.domain.tld/domain/</code>À¸·Î °¡´Â ¸µÅ©¸¦
- ³Ö´Â´Ù. ±×¸®°í °¡»óÈ£½ºÆ® ÆäÀÌÁö¿¡¼­´Â »ó´ë¸µÅ© (¿¹¸¦ µé¾î,
- "<code>file.html</code>" À̳ª "<code>../icons/image.gif</code>")
- ȤÀº ("<code>http://www.domain.tld/domain/misc/file.html</code>"À̳ª
- "<code>/domain/misc/file.html</code>"°ú °°ÀÌ) ¾Õ¿¡
- <code>/domain/</code>ÀÌ ºÙÀº ¸µÅ©¸¸À» »ç¿ëÇÑ´Ù.</p>
-
- <p>Á¶±Ý ±ÔÄ¢ÀÌ ÇÊ¿äÇÏÁö¸¸ ÀÌ ±ÔÄ¢À» µû¸£¸é ´ëºÎºÐÀÇ °æ¿ì
- ¿äÁò °ÍÀ̳ª ¿À·¡µÈ °ÍÀ̳ª °ü°è¾øÀÌ ¸ðµç ºê¶ó¿ìÀú·Î ÆäÀÌÁö¸¦
- º¼ ¼ö ÀÖ´Ù.</p>
-
-</section>
-</manualpage>
diff --git a/docs/manual/vhosts/name-based.xml.meta b/docs/manual/vhosts/name-based.xml.meta
deleted file mode 100644
index 5c011302e2..0000000000
--- a/docs/manual/vhosts/name-based.xml.meta
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<metafile>
- <basename>name-based</basename>
- <path>/vhosts/</path>
- <relpath>..</relpath>
-
- <variants>
- <variant>de</variant>
- <variant>en</variant>
- <variant>ja</variant>
- <variant>ko</variant>
- </variants>
-</metafile>
diff --git a/emacs-style b/emacs-style
deleted file mode 100644
index 7ca4f40414..0000000000
--- a/emacs-style
+++ /dev/null
@@ -1,12 +0,0 @@
-(add-hook 'c-mode-hook
- (function (lambda ()
- (c-set-offset 'inclass' ++)
- (c-set-offset 'defun-block-intro' ++)
- (c-set-offset 'statement-block-intro' ++)
- (c-set-offset 'substatement' ++)
- (c-set-offset 'brace-list-intro' ++)
- (c-set-offset 'statement-case-intro' ++)
- (c-set-offset 'inextern-lang' 0)
- )))
-(setq c++-mode-hook c-mode-hook)
-(setq-default indent-tabs-mode nil)
diff --git a/include/.cvsignore b/include/.cvsignore
deleted file mode 100644
index a33a4269f7..0000000000
--- a/include/.cvsignore
+++ /dev/null
@@ -1,12 +0,0 @@
-ap_config_auto.h
-ap_config_auto.h.in
-ap_config_layout.h
-mod_cgi.h
-mod_core.h
-mod_dav.h
-mod_include.h
-mod_proxy.h
-mod_so.h
-mpm.h
-mpm_default.h
-os.h
diff --git a/include/.indent.pro b/include/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/include/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/include/ap_compat.h b/include/ap_compat.h
deleted file mode 100644
index 97599110b8..0000000000
--- a/include/ap_compat.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_COMPAT_H
-#define AP_COMPAT_H
-
-/* redefine 1.3.x symbols to the new symbol names */
-
-#define MODULE_VAR_EXPORT AP_MODULE_DECLARE_DATA
-#define ap_send_http_header(r) ;
-
-#endif /* AP_COMPAT_H */
diff --git a/include/ap_config.h b/include/ap_config.h
deleted file mode 100644
index 6c0fd50a4b..0000000000
--- a/include/ap_config.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_CONFIG_H
-#define AP_CONFIG_H
-
-#include "apr.h"
-#include "apr_hooks.h"
-#include "apr_optional_hooks.h"
-
-/**
- * @file ap_config.h
- * @brief Symbol export macros and hook functions
- */
-
-/* Although this file doesn't declare any hooks, declare the hook group here */
-/** @defgroup hooks Apache Hooks */
-
-#ifdef DOXYGEN
-/* define these just so doxygen documents them */
-
-/**
- * AP_DECLARE_STATIC is defined when including Apache's Core headers,
- * to provide static linkage when the dynamic library may be unavailable.
- *
- * @see AP_DECLARE_EXPORT
- *
- * AP_DECLARE_STATIC and AP_DECLARE_EXPORT are left undefined when
- * including Apache's Core headers, to import and link the symbols from the
- * dynamic Apache Core library and assure appropriate indirection and calling
- * conventions at compile time.
- */
-# define AP_DECLARE_STATIC
-/**
- * AP_DECLARE_EXPORT is defined when building the Apache Core dynamic
- * library, so that all public symbols are exported.
- *
- * @see AP_DECLARE_STATIC
- */
-# define AP_DECLARE_EXPORT
-
-#endif /* def DOXYGEN */
-
-#if !defined(WIN32)
-/**
- * Apache Core dso functions are declared with AP_DECLARE(), so they may
- * use the most appropriate calling convention. Hook functions and other
- * Core functions with variable arguments must use AP_DECLARE_NONSTD().
- * @code
- * AP_DECLARE(rettype) ap_func(args)
- * @endcode
- */
-#define AP_DECLARE(type) type
-
-/**
- * Apache Core dso variable argument and hook functions are declared with
- * AP_DECLARE_NONSTD(), as they must use the C language calling convention.
- * @see AP_DECLARE
- * @code
- * AP_DECLARE_NONSTD(rettype) ap_func(args [...])
- * @endcode
- */
-#define AP_DECLARE_NONSTD(type) type
-
-/**
- * Apache Core dso variables are declared with AP_MODULE_DECLARE_DATA.
- * This assures the appropriate indirection is invoked at compile time.
- *
- * @note AP_DECLARE_DATA extern type apr_variable; syntax is required for
- * declarations within headers to properly import the variable.
- * @code
- * AP_DECLARE_DATA type apr_variable
- * @endcode
- */
-#define AP_DECLARE_DATA
-
-#elif defined(AP_DECLARE_STATIC)
-#define AP_DECLARE(type) type __stdcall
-#define AP_DECLARE_NONSTD(type) type
-#define AP_DECLARE_DATA
-#elif defined(AP_DECLARE_EXPORT)
-#define AP_DECLARE(type) __declspec(dllexport) type __stdcall
-#define AP_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define AP_DECLARE_DATA __declspec(dllexport)
-#else
-#define AP_DECLARE(type) __declspec(dllimport) type __stdcall
-#define AP_DECLARE_NONSTD(type) __declspec(dllimport) type
-#define AP_DECLARE_DATA __declspec(dllimport)
-#endif
-
-#if !defined(WIN32) || defined(AP_MODULE_DECLARE_STATIC)
-/**
- * Declare a dso module's exported module structure as AP_MODULE_DECLARE_DATA.
- *
- * Unless AP_MODULE_DECLARE_STATIC is defined at compile time, symbols
- * declared with AP_MODULE_DECLARE_DATA are always exported.
- * @code
- * module AP_MODULE_DECLARE_DATA mod_tag
- * @endcode
- */
-#if defined(WIN32)
-#define AP_MODULE_DECLARE(type) type __stdcall
-#else
-#define AP_MODULE_DECLARE(type) type
-#endif
-#define AP_MODULE_DECLARE_NONSTD(type) type
-#define AP_MODULE_DECLARE_DATA
-#else
-/**
- * AP_MODULE_DECLARE_EXPORT is a no-op. Unless contradicted by the
- * AP_MODULE_DECLARE_STATIC compile-time symbol, it is assumed and defined.
- *
- * The old SHARED_MODULE compile-time symbol is now the default behavior,
- * so it is no longer referenced anywhere with Apache 2.0.
- */
-#define AP_MODULE_DECLARE_EXPORT
-#define AP_MODULE_DECLARE(type) __declspec(dllexport) type __stdcall
-#define AP_MODULE_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define AP_MODULE_DECLARE_DATA __declspec(dllexport)
-#endif
-
-/**
- * Declare a hook function
- * @param ret The return type of the hook
- * @param name The hook's name (as a literal)
- * @param args The arguments the hook function takes, in brackets.
- */
-#define AP_DECLARE_HOOK(ret,name,args) \
- APR_DECLARE_EXTERNAL_HOOK(ap,AP,ret,name,args)
-
-/** @internal */
-#define AP_IMPLEMENT_HOOK_BASE(name) \
- APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ap,AP,name)
-
-/**
- * Implement an Apache core hook that has no return code, and
- * therefore runs all of the registered functions. The implementation
- * is called ap_run_<i>name</i>.
- *
- * @param name The name of the hook
- * @param args_decl The declaration of the arguments for the hook, for example
- * "(int x,void *y)"
- * @param args_use The arguments for the hook as used in a call, for example
- * "(x,y)"
- * @note If IMPLEMENTing a hook that is not linked into the Apache core,
- * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_VOID.
- */
-#define AP_IMPLEMENT_HOOK_VOID(name,args_decl,args_use) \
- APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ap,AP,name,args_decl,args_use)
-
-/**
- * Implement an Apache core hook that runs until one of the functions
- * returns something other than ok or decline. That return value is
- * then returned from the hook runner. If the hooks run to completion,
- * then ok is returned. Note that if no hook runs it would probably be
- * more correct to return decline, but this currently does not do
- * so. The implementation is called ap_run_<i>name</i>.
- *
- * @param ret The return type of the hook (and the hook runner)
- * @param name The name of the hook
- * @param args_decl The declaration of the arguments for the hook, for example
- * "(int x,void *y)"
- * @param args_use The arguments for the hook as used in a call, for example
- * "(x,y)"
- * @param ok The "ok" return value
- * @param decline The "decline" return value
- * @return ok, decline or an error.
- * @note If IMPLEMENTing a hook that is not linked into the Apache core,
- * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL.
- */
-#define AP_IMPLEMENT_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok,decline) \
- APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \
- args_use,ok,decline)
-
-/**
- * Implement a hook that runs until a function returns something other than
- * decline. If all functions return decline, the hook runner returns decline.
- * The implementation is called ap_run_<i>name</i>.
- *
- * @param ret The return type of the hook (and the hook runner)
- * @param name The name of the hook
- * @param args_decl The declaration of the arguments for the hook, for example
- * "(int x,void *y)"
- * @param args_use The arguments for the hook as used in a call, for example
- * "(x,y)"
- * @param decline The "decline" return value
- * @return decline or an error.
- * @note If IMPLEMENTing a hook that is not linked into the Apache core
- * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST.
- */
-#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret,name,args_decl,args_use,decline) \
- APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ap,AP,ret,name,args_decl, \
- args_use,decline)
-
-/* Note that the other optional hook implementations are straightforward but
- * have not yet been needed
- */
-
-/**
- * Implement an optional hook. This is exactly the same as a standard hook
- * implementation, except the hook is optional.
- * @see AP_IMPLEMENT_HOOK_RUN_ALL
- */
-#define AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok, \
- decline) \
- APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \
- args_use,ok,decline)
-
-/**
- * Hook an optional hook. Unlike static hooks, this uses a macro instead of a
- * function.
- */
-#define AP_OPTIONAL_HOOK(name,fn,pre,succ,order) \
- APR_OPTIONAL_HOOK(ap,name,fn,pre,succ,order)
-
-#include "os.h"
-#if !defined(WIN32) && !defined(NETWARE)
-#include "ap_config_auto.h"
-#include "ap_config_layout.h"
-#endif
-#if defined(NETWARE)
-#define AP_NONBLOCK_WHEN_MULTI_LISTEN 1
-#endif
-
-/* TODO - We need to put OS detection back to make all the following work */
-
-#if defined(SUNOS4) || defined(IRIX) || defined(NEXT) || defined(AUX3) \
- || defined (UW) || defined(LYNXOS) || defined(TPF)
-/* These systems don't do well with any lingering close code; I don't know
- * why -- manoj */
-#define NO_LINGCLOSE
-#endif
-
-/* If APR has OTHER_CHILD logic, use reliable piped logs. */
-#if APR_HAS_OTHER_CHILD
-#define AP_HAVE_RELIABLE_PIPED_LOGS TRUE
-#endif
-
-#endif /* AP_CONFIG_H */
diff --git a/include/ap_config_layout.h.in b/include/ap_config_layout.h.in
deleted file mode 100644
index 74397ffe96..0000000000
--- a/include/ap_config_layout.h.in
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_CONFIG_LAYOUT_H
-#define AP_CONFIG_LAYOUT_H
-
-/* Configured Apache directory layout */
-#define DEFAULT_PREFIX "@prefix@"
-#define DEFAULT_EXP_EXEC_PREFIX "@exp_exec_prefix@"
-#define DEFAULT_REL_EXEC_PREFIX "@rel_exec_prefix@"
-#define DEFAULT_EXP_BINDIR "@exp_bindir@"
-#define DEFAULT_REL_BINDIR "@rel_bindir@"
-#define DEFAULT_EXP_SBINDIR "@exp_sbindir@"
-#define DEFAULT_REL_SBINDIR "@rel_sbindir@"
-#define DEFAULT_EXP_LIBEXECDIR "@exp_libexecdir@"
-#define DEFAULT_REL_LIBEXECDIR "@rel_libexecdir@"
-#define DEFAULT_EXP_MANDIR "@exp_mandir@"
-#define DEFAULT_REL_MANDIR "@rel_mandir@"
-#define DEFAULT_EXP_SYSCONFDIR "@exp_sysconfdir@"
-#define DEFAULT_REL_SYSCONFDIR "@rel_sysconfdir@"
-#define DEFAULT_EXP_DATADIR "@exp_datadir@"
-#define DEFAULT_REL_DATADIR "@rel_datadir@"
-#define DEFAULT_EXP_INSTALLBUILDDIR "@exp_installbuilddir@"
-#define DEFAULT_REL_INSTALLBUILDDIR "@rel_installbuilddir@"
-#define DEFAULT_EXP_ERRORDIR "@exp_errordir@"
-#define DEFAULT_REL_ERRORDIR "@rel_errordir@"
-#define DEFAULT_EXP_ICONSDIR "@exp_iconsdir@"
-#define DEFAULT_REL_ICONSDIR "@rel_iconsdir@"
-#define DEFAULT_EXP_HTDOCSDIR "@exp_htdocsdir@"
-#define DEFAULT_REL_HTDOCSDIR "@rel_htdocsdir@"
-#define DEFAULT_EXP_MANUALDIR "@exp_manualdir@"
-#define DEFAULT_REL_MANUALDIR "@rel_manualdir@"
-#define DEFAULT_EXP_CGIDIR "@exp_cgidir@"
-#define DEFAULT_REL_CGIDIR "@rel_cgidir@"
-#define DEFAULT_EXP_INCLUDEDIR "@exp_includedir@"
-#define DEFAULT_REL_INCLUDEDIR "@rel_includedir@"
-#define DEFAULT_EXP_LOCALSTATEDIR "@exp_localstatedir@"
-#define DEFAULT_REL_LOCALSTATEDIR "@rel_localstatedir@"
-#define DEFAULT_EXP_RUNTIMEDIR "@exp_runtimedir@"
-#define DEFAULT_REL_RUNTIMEDIR "@rel_runtimedir@"
-#define DEFAULT_EXP_LOGFILEDIR "@exp_logfiledir@"
-#define DEFAULT_REL_LOGFILEDIR "@rel_logfiledir@"
-#define DEFAULT_EXP_PROXYCACHEDIR "@exp_proxycachedir@"
-#define DEFAULT_REL_PROXYCACHEDIR "@rel_proxycachedir@"
-
-#endif /* AP_CONFIG_LAYOUT_H */
diff --git a/include/ap_listen.h b/include/ap_listen.h
deleted file mode 100644
index 8b0741b9f1..0000000000
--- a/include/ap_listen.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_LISTEN_H
-#define AP_LISTEN_H
-
-#include "apr_network_io.h"
-#include "httpd.h"
-#include "http_config.h"
-
-/**
- * @package Apache Listeners Library
- */
-
-typedef struct ap_listen_rec ap_listen_rec;
-typedef apr_status_t (*accept_function)(void **csd, ap_listen_rec *lr, apr_pool_t *ptrans);
-
-/**
- * Apache's listeners record. These are used in the Multi-Processing Modules
- * to setup all of the sockets for the MPM to listen to and accept on.
- */
-struct ap_listen_rec {
- /**
- * The next listener in the list
- */
- ap_listen_rec *next;
- /**
- * The actual socket
- */
- apr_socket_t *sd;
- /**
- * The sockaddr the socket should bind to
- */
- apr_sockaddr_t *bind_addr;
- /**
- * The accept function for this socket
- */
- accept_function accept_func;
- /**
- * Is this socket currently active
- */
- int active;
-/* more stuff here, like which protocol is bound to the port */
-};
-
-/**
- * The global list of ap_listen_rec structures
- */
-AP_DECLARE_DATA extern ap_listen_rec *ap_listeners;
-
-/**
- * Setup all of the defaults for the listener list
- */
-void ap_listen_pre_config(void);
-#if !defined(SPMT_OS2_MPM)
-/**
- * Loop through the global ap_listen_rec list and create all of the required
- * sockets. This executes the listen and bind on the sockets.
- * @param s The global server_rec
- * @return The number of open sockets.
- * @warning This function is not available to Windows platforms, or the
- * Prefork or SPMT_OS2 MPMs.
- */
-int ap_setup_listeners(server_rec *s);
-#endif
-/* Split into two #if's to make the exports scripts easier.
- */
-#if defined(SPMT_OS2_MPM)
-/**
- * Create and open a socket on the specified port. This includes listening
- * and binding the socket.
- * @param process The process record for the currently running server
- * @param port The port to open a socket on.
- * @return The number of open sockets
- * @warning This function is only available to Windows platforms, or the
- * Prefork or SPMT_OS2 MPMs.
- */
-int ap_listen_open(process_rec *process, apr_port_t port);
-#endif
-
-/* Although these functions are exported from libmain, they are not really
- * public functions. These functions are actually called while parsing the
- * config file, when one of the LISTEN_COMMANDS directives is read. These
- * should not ever be called by external modules. ALL MPMs should include
- * LISTEN_COMMANDS in their command_rec table so that these functions are
- * called.
- */
-const char *ap_set_listenbacklog(cmd_parms *cmd, void *dummy, const char *arg);
-const char *ap_set_listener(cmd_parms *cmd, void *dummy, const char *ips);
-const char *ap_set_send_buffer_size(cmd_parms *cmd, void *dummy,
- const char *arg);
-
-#define LISTEN_COMMANDS \
-AP_INIT_TAKE1("ListenBacklog", ap_set_listenbacklog, NULL, RSRC_CONF, \
- "Maximum length of the queue of pending connections, as used by listen(2)"), \
-AP_INIT_TAKE1("Listen", ap_set_listener, NULL, RSRC_CONF, \
- "A port number or a numeric IP address and a port number"), \
-AP_INIT_TAKE1("SendBufferSize", ap_set_send_buffer_size, NULL, RSRC_CONF, \
- "Send buffer size in bytes")
-
-#endif
diff --git a/include/ap_mmn.h b/include/ap_mmn.h
deleted file mode 100644
index d724fe7ef6..0000000000
--- a/include/ap_mmn.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_AP_MMN_H
-#define APACHE_AP_MMN_H
-
-/**
- * @package Module Magic Number
- */
-
-/*
- * MODULE_MAGIC_NUMBER_MAJOR
- * Major API changes that could cause compatibility problems for older modules
- * such as structure size changes. No binary compatibility is possible across
- * a change in the major version.
- *
- * MODULE_MAGIC_NUMBER_MINOR
- * Minor API changes that do not cause binary compatibility problems.
- * Should be reset to 0 when upgrading MODULE_MAGIC_NUMBER_MAJOR.
- *
- * See the MODULE_MAGIC_AT_LEAST macro below for an example.
- */
-
-/*
- * 20010224 (2.0.13-dev) MODULE_MAGIC_COOKIE reset to "AP20"
- * 20010523 (2.0.19-dev) bump for scoreboard structure reordering
- * 20010627 (2.0.19-dev) more API changes than I can count
- * 20010726 (2.0.22-dev) more big API changes
- * 20010808 (2.0.23-dev) dir d_is_absolute bit introduced, bucket changes, etc
- * 20010825 (2.0.25-dev) removed d_is_absolute, introduced map_to_storage hook
- * 20011002 (2.0.26-dev) removed 1.3-depreciated request_rec.content_language
- * 20011127 (2.0.29-dev) bump for postconfig hook change, and removal of socket
- * from connection record
- * 20011212 (2.0.30-dev) bump for new used_path_info member of request_rec
- * 20011218 (2.0.30-dev) bump for new sbh member of conn_rec, different
- * declarations for scoreboard, new parameter to
- * create_connection hook
- * 20020102 (2.0.30-dev) bump for changed type of limit_req_body in
- * core_dir_config
- * 20020109 (2.0.31-dev) bump for changed shm and scoreboard declarations
- * 20020111 (2.0.31-dev) bump for ETag fields added at end of cor_dir_config
- * 20020114 (2.0.31-dev) mod_dav changed how it asks its provider to fulfill
- * a GET request
- * 20020118 (2.0.31-dev) Input filtering split of blocking and mode
- * 20020127 (2.0.31-dev) bump for pre_mpm hook change
- * 20020128 (2.0.31-dev) bump for pre_config hook change
- * 20020218 (2.0.33-dev) bump for AddOutputFilterByType directive
- * 20020220 (2.0.33-dev) bump for scoreboard.h structure change
- * 20020302 (2.0.33-dev) bump for protocol_filter additions.
- * 20020306 (2.0.34-dev) bump for filter type renames.
- * 20020318 (2.0.34-dev) mod_dav's API for REPORT generation changed
- * 20020319 (2.0.34-dev) M_INVALID changed, plus new M_* methods for RFC 3253
- * 20020327 (2.0.35-dev) Add parameter to quick_handler hook
- * 20020329 (2.0.35-dev) bump for addition of freelists to bucket API
- * 20020329.1 (2.0.36) minor bump for new arg to opt fn ap_cgi_build_command
- * 20020506 (2.0.37-dev) Removed r->boundary in request_rec.
- * 20020529 (2.0.37-dev) Standardized the names of some apr_pool_*_set funcs
- * 20020602 (2.0.37-dev) Bucket API change (metadata buckets)
- * 20020612 (2.0.38-dev) Changed server_rec->[keep_alive_]timeout to apr time
- * 20020625 (2.0.40-dev) Changed conn_rec->keepalive to an enumeration
- * 20020628 (2.0.40-dev) Added filter_init to filter registration functions
- * 20020903 (2.0.41-dev) APR's error constants changed
- * 20020903.1 (2.1.0-dev) allow_encoded_slashes added to core_dir_config
- * 20020903.2 (2.0.46-dev) add ap_escape_logitem
- * 20030213.1 (2.1.0-dev) changed log_writer optional fn's to return previous
- * handler
- * 20030821 (2.1.0-dev) bumped mod_include's entire API
- * 20030821.1 (2.1.0-dev) added XHTML doctypes
- * 20030821.2 (2.1.0-dev) added ap_escape_errorlog_item
- * 20030821.3 (2.1.0-dev) added ap_get_server_revision / ap_version_t
- * 20040425 (2.1.0-dev) removed ap_add_named_module API
- * changed ap_add_module, ap_add_loaded_module,
- * ap_setup_prelinked_modules, ap_process_resource_config
- * 20040425.1 (2.1.0-dev) Added ap_module_symbol_t and ap_prelinked_module_symbols
- */
-
-#define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
-
-#ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20040425
-#endif
-#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
-
-/**
- * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
- * specified value.
- * <pre>
- * Useful for testing for features.
- * For example, suppose you wish to use the apr_table_overlap
- * function. You can do this:
- *
- * #if AP_MODULE_MAGIC_AT_LEAST(19980812,2)
- * ... use apr_table_overlap()
- * #else
- * ... alternative code which doesn't use apr_table_overlap()
- * #endif
- * </pre>
- * @param major The major module magic number
- * @param minor The minor module magic number
- * @deffunc AP_MODULE_MAGIC_AT_LEAST(int major, int minor)
- */
-#define AP_MODULE_MAGIC_AT_LEAST(major,minor) \
- ((major) < MODULE_MAGIC_NUMBER_MAJOR \
- || ((major) == MODULE_MAGIC_NUMBER_MAJOR \
- && (minor) <= MODULE_MAGIC_NUMBER_MINOR))
-
-/** @deprecated present for backwards compatibility */
-#define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_AT_LEAST old_broken_macro_we_hope_you_are_not_using
-
-#endif /* !APACHE_AP_MMN_H */
diff --git a/include/ap_mpm.h b/include/ap_mpm.h
deleted file mode 100644
index ce351aff31..0000000000
--- a/include/ap_mpm.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_MPM_H
-#define AP_MPM_H
-
-#include "apr_thread_proc.h"
-
-/**
- * @package Multi-Processing Module library
- */
-
-/*
- The MPM, "multi-processing model" provides an abstraction of the
- interface with the OS for distributing incoming connections to
- threads/process for processing. http_main invokes the MPM, and
- the MPM runs until a shutdown/restart has been indicated.
- The MPM calls out to the apache core via the ap_process_connection
- function when a connection arrives.
-
- The MPM may or may not be multithreaded. In the event that it is
- multithreaded, at any instant it guarantees a 1:1 mapping of threads
- ap_process_connection invocations.
-
- Note: In the future it will be possible for ap_process_connection
- to return to the MPM prior to finishing the entire connection; and
- the MPM will proceed with asynchronous handling for the connection;
- in the future the MPM may call ap_process_connection again -- but
- does not guarantee it will occur on the same thread as the first call.
-
- The MPM further guarantees that no asynchronous behaviour such as
- longjmps and signals will interfere with the user code that is
- invoked through ap_process_connection. The MPM may reserve some
- signals for its use (i.e. SIGUSR1), but guarantees that these signals
- are ignored when executing outside the MPM code itself. (This
- allows broken user code that does not handle EINTR to function
- properly.)
-
- The suggested server restart and stop behaviour will be "graceful".
- However the MPM may choose to terminate processes when the user
- requests a non-graceful restart/stop. When this occurs, the MPM kills
- all threads with extreme prejudice, and destroys the pchild pool.
- User cleanups registered in the pchild apr_pool_t will be invoked at
- this point. (This can pose some complications, the user cleanups
- are asynchronous behaviour not unlike longjmp/signal... but if the
- admin is asking for a non-graceful shutdown, how much effort should
- we put into doing it in a nice way?)
-
- unix/posix notes:
- - The MPM does not set a SIGALRM handler, user code may use SIGALRM.
- But the preferred method of handling timeouts is to use the
- timeouts provided by the BUFF abstraction.
- - The proper setting for SIGPIPE is SIG_IGN, if user code changes it
- for any of their own processing, it must be restored to SIG_IGN
- prior to executing or returning to any apache code.
- TODO: add SIGPIPE debugging check somewhere to make sure it's SIG_IGN
-*/
-
-/**
- * This is the function that MPMs must create. This function is responsible
- * for controlling the parent and child processes. It will run until a
- * restart/shutdown is indicated.
- * @param pconf the configuration pool, reset before the config file is read
- * @param plog the log pool, reset after the config file is read
- * @param server_conf the global server config.
- * @return 1 for shutdown 0 otherwise.
- * @deffunc int ap_mpm_run(apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf)
- */
-AP_DECLARE(int) ap_mpm_run(apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf);
-
-/**
- * predicate indicating if a graceful stop has been requested ...
- * used by the connection loop
- * @return 1 if a graceful stop has been requested, 0 otherwise
- * @deffunc int ap_graceful_stop_signalled(*void)
- */
-AP_DECLARE(int) ap_graceful_stop_signalled(void);
-
-/**
- * Spawn a process with privileges that another module has requested
- * @param r The request_rec of the current request
- * @param newproc The resulting process handle.
- * @param progname The program to run
- * @param const_args the arguments to pass to the new program. The first
- * one should be the program name.
- * @param env The new environment apr_table_t for the new process. This
- * should be a list of NULL-terminated strings.
- * @param attr the procattr we should use to determine how to create the new
- * process
- * @param p The pool to use.
- */
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc,
- const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr,
- apr_pool_t *p);
-
-/* Subtypes/Values for AP_MPMQ_IS_THREADED and AP_MPMQ_IS_FORKED */
-#define AP_MPMQ_NOT_SUPPORTED 0 /* This value specifies whether */
- /* an MPM is capable of */
- /* threading or forking. */
-#define AP_MPMQ_STATIC 1 /* This value specifies whether */
- /* an MPM is using a static # */
- /* threads or daemons. */
-#define AP_MPMQ_DYNAMIC 2 /* This value specifies whether */
- /* an MPM is using a dynamic # */
- /* threads or daemons. */
-
-/* Values returned for AP_MPMQ_MPM_STATE */
-#define AP_MPMQ_STARTING 0
-#define AP_MPMQ_RUNNING 1
-#define AP_MPMQ_STOPPING 2
-
-#define AP_MPMQ_MAX_DAEMON_USED 1 /* Max # of daemons used so far */
-#define AP_MPMQ_IS_THREADED 2 /* MPM can do threading */
-#define AP_MPMQ_IS_FORKED 3 /* MPM can do forking */
-#define AP_MPMQ_HARD_LIMIT_DAEMONS 4 /* The compiled max # daemons */
-#define AP_MPMQ_HARD_LIMIT_THREADS 5 /* The compiled max # threads */
-#define AP_MPMQ_MAX_THREADS 6 /* # of threads/child by config */
-#define AP_MPMQ_MIN_SPARE_DAEMONS 7 /* Min # of spare daemons */
-#define AP_MPMQ_MIN_SPARE_THREADS 8 /* Min # of spare threads */
-#define AP_MPMQ_MAX_SPARE_DAEMONS 9 /* Max # of spare daemons */
-#define AP_MPMQ_MAX_SPARE_THREADS 10 /* Max # of spare threads */
-#define AP_MPMQ_MAX_REQUESTS_DAEMON 11 /* Max # of requests per daemon */
-#define AP_MPMQ_MAX_DAEMONS 12 /* Max # of daemons by config */
-#define AP_MPMQ_MPM_STATE 13 /* starting, running, stopping */
-
-/**
- * Query a property of the current MPM.
- * @param query_code One of APM_MPMQ_*
- * @param result A location to place the result of the query
- * @return APR_SUCCESS or APR_ENOTIMPL
- * @deffunc int ap_mpm_query(int query_code, int *result)
- */
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result);
-
-/* Defining GPROF when compiling uses the moncontrol() function to
- * disable gprof profiling in the parent, and enable it only for
- * request processing in children (or in one_process mode). It's
- * absolutely required to get useful gprof results under linux
- * because the profile itimers and such are disabled across a
- * fork(). It's probably useful elsewhere as well.
- */
-#ifdef GPROF
-extern void moncontrol(int);
-#define AP_MONCONTROL(x) moncontrol(x)
-#else
-#define AP_MONCONTROL(x)
-#endif
-
-#if AP_ENABLE_EXCEPTION_HOOK
-typedef struct ap_exception_info_t {
- int sig;
- pid_t pid;
-} ap_exception_info_t;
-
-AP_DECLARE_HOOK(int,fatal_exception,(ap_exception_info_t *ei))
-#endif /*AP_ENABLE_EXCEPTION_HOOK*/
-
-#endif
diff --git a/include/ap_provider.h b/include/ap_provider.h
deleted file mode 100644
index c704058d8a..0000000000
--- a/include/ap_provider.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_PROVIDER_H
-#define AP_PROVIDER_H
-
-#include "ap_config.h"
-
-/**
- * @package Provider API
- */
-
-/**
- * This function is used to register a provider with the global
- * provider pool.
- * @param pool The pool to create any storage from
- * @param provider_group The group to store the provider in
- * @param provider_name The name for this provider
- * @param provider_version The version for this provider
- * @param provider Opaque structure for this provider
- * @return APR_SUCCESS if all went well
- */
-AP_DECLARE(apr_status_t) ap_register_provider(apr_pool_t *pool,
- const char *provider_group,
- const char *provider_name,
- const char *provider_version,
- const void *provider);
-
-/**
- * This function is used to retrieve a provider from the global
- * provider pool.
- * @param provider_group The group to look for this provider in
- * @param provider_name The name for the provider
- * @param provider_version The version for the provider
- * @return provider pointer to provider if found, NULL otherwise
- */
-AP_DECLARE(void *) ap_lookup_provider(const char *provider_group,
- const char *provider_name,
- const char *provider_version);
-
-#endif
diff --git a/include/ap_regkey.h b/include/ap_regkey.h
deleted file mode 100644
index 5d79b631c1..0000000000
--- a/include/ap_regkey.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_REGKEY_H
-#define AP_REGKEY_H
-
-#if defined(WIN32) || defined(DOXYGEN)
-
-#include "apr.h"
-#include "apr_pools.h"
-#include "ap_config.h" /* Just for AP_DECLARE */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct ap_regkey_t ap_regkey_t;
-
-/* Used to recover AP_REGKEY_* constants
- */
-AP_DECLARE(const ap_regkey_t *) ap_regkey_const(int i);
-
-/**
- * @file ap_regkey.h
- * @brief APR-style Win32 Registry Manipulation
- */
-
-/**
- * Win32 Only: Constants for ap_regkey_open()
- */
-#define AP_REGKEY_CLASSES_ROOT ap_regkey_const(0)
-#define AP_REGKEY_CURRENT_CONFIG ap_regkey_const(1)
-#define AP_REGKEY_CURRENT_USER ap_regkey_const(2)
-#define AP_REGKEY_LOCAL_MACHINE ap_regkey_const(3)
-#define AP_REGKEY_USERS ap_regkey_const(4)
-#define AP_REGKEY_PERFORMANCE_DATA ap_regkey_const(5)
-#define AP_REGKEY_DYN_DATA ap_regkey_const(6)
-
-/**
- * Win32 Only: Flags for ap_regkey_value_set()
- */
-#define AP_REGKEY_EXPAND 0x0001
-
-/**
- * Win32 Only: Open the specified registry key.
- * @param newkey The opened registry key
- * @param parentkey The open registry key of the parent, or one of
- * <PRE>
- * AP_REGKEY_CLASSES_ROOT
- * AP_REGKEY_CURRENT_CONFIG
- * AP_REGKEY_CURRENT_USER
- * AP_REGKEY_LOCAL_MACHINE
- * AP_REGKEY_USERS
- * AP_REGKEY_PERFORMANCE_DATA
- * AP_REGKEY_DYN_DATA
- * </PRE>
- * @param keyname The path of the key relative to the parent key
- * @param flags Or'ed value of:
- * <PRE>
- * APR_READ open key for reading
- * APR_WRITE open key for writing
- * APR_CREATE create the key if it doesn't exist
- * APR_EXCL return error if APR_CREATE and key exists
- * </PRE>
- * @param pool The pool in which newkey is allocated
- */
-AP_DECLARE(apr_status_t) ap_regkey_open(ap_regkey_t **newkey,
- const ap_regkey_t *parentkey,
- const char *keyname,
- apr_int32_t flags,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Close the registry key opened or created by ap_regkey_open().
- * @param key The registry key to close
- */
-AP_DECLARE(apr_status_t) ap_regkey_close(ap_regkey_t *key);
-
-/**
- * Win32 Only: Remove the given registry key.
- * @param parentkey The open registry key of the parent, or one of
- * <PRE>
- * AP_REGKEY_CLASSES_ROOT
- * AP_REGKEY_CURRENT_CONFIG
- * AP_REGKEY_CURRENT_USER
- * AP_REGKEY_LOCAL_MACHINE
- * AP_REGKEY_USERS
- * AP_REGKEY_PERFORMANCE_DATA
- * AP_REGKEY_DYN_DATA
- * </PRE>
- * @param keyname The path of the key relative to the parent key
- * @param pool The pool used for temp allocations
- * @remark ap_regkey_remove() is not recursive, although it removes
- * all values within the given keyname, it will not remove a key
- * containing subkeys.
- */
-AP_DECLARE(apr_status_t) ap_regkey_remove(const ap_regkey_t *parent,
- const char *keyname,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Retrieve a registry value string from an open key.
- * @param result The string value retrieved
- * @param key The registry key to retrieve the value from
- * @param valuename The named value to retrieve (pass "" for the default)
- * @param pool The pool used to store the result
- * @remark There is no toggle to prevent environment variable expansion
- * if the registry value is set with AP_REG_EXPAND (REG_EXPAND_SZ), such
- * expansions are always performed.
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_get(char **result,
- ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Store a registry value string into an open key.
- * @param key The registry key to store the value into
- * @param valuename The named value to store (pass "" for the default)
- * @param value The string to store for the named value
- * @param flags The option AP_REGKEY_EXPAND or 0, where AP_REGKEY_EXPAND
- * values will find all %foo% variables expanded from the environment.
- * @param pool The pool used for temp allocations
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_set(ap_regkey_t *key,
- const char *valuename,
- const char *value,
- apr_int32_t flags,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Retrieve a raw byte value from an open key.
- * @param result The raw bytes value retrieved
- * @param resultsize Pointer to a variable to store the number raw bytes retrieved
- * @param key The registry key to retrieve the value from
- * @param valuename The named value to retrieve (pass "" for the default)
- * @param pool The pool used to store the result
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_raw_get(void **result,
- apr_size_t *resultsize,
- apr_int32_t *resulttype,
- ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Store a raw bytes value into an open key.
- * @param key The registry key to store the value into
- * @param valuename The named value to store (pass "" for the default)
- * @param value The bytes to store for the named value
- * @param valuesize The number of bytes for value
- * @param valuetype The
- * values will find all %foo% variables expanded from the environment.
- * @param pool The pool used for temp allocations
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_raw_set(ap_regkey_t *key,
- const char *valuename,
- const void *value,
- apr_size_t valuesize,
- apr_int32_t valuetype,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Retrieve a registry value string from an open key.
- * @param result The string elements retrieved from a REG_MULTI_SZ string array
- * @param key The registry key to retrieve the value from
- * @param valuename The named value to retrieve (pass "" for the default)
- * @param pool The pool used to store the result
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_array_get(apr_array_header_t **result,
- ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Store a registry value string array into an open key.
- * @param key The registry key to store the value into
- * @param valuename The named value to store (pass "" for the default)
- * @param nelts The string elements to store in a REG_MULTI_SZ string array
- * @param elts The number of elements in the elts string array
- * @param pool The pool used for temp allocations
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_array_set(ap_regkey_t *key,
- const char *valuename,
- int nelts,
- const char * const * elts,
- apr_pool_t *pool);
-
-/**
- * Win32 Only: Remove a registry value from an open key.
- * @param key The registry key to remove the value from
- * @param valuename The named value to remove (pass "" for the default)
- * @param pool The pool used for temp allocations
- */
-AP_DECLARE(apr_status_t) ap_regkey_value_remove(const ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* def WIN32 || def DOXYGEN */
-
-#endif /* AP_REGKEY_H */
diff --git a/include/ap_release.h b/include/ap_release.h
deleted file mode 100644
index 46044fa60e..0000000000
--- a/include/ap_release.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_RELEASE_H
-#define AP_RELEASE_H
-
-#include "apr_general.h" /* stringify */
-
-/*
- * The below defines the base string of the Server: header. Additional
- * tokens can be added via the ap_add_version_component() API call.
- *
- * The tokens are listed in order of their significance for identifying the
- * application.
- *
- * "Product tokens should be short and to the point -- use of them for
- * advertizing or other non-essential information is explicitly forbidden."
- *
- * Example: "Apache/1.1.0 MrWidget/0.1-alpha"
- */
-#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
-#define AP_SERVER_BASEPRODUCT "Apache"
-
-#define AP_SERVER_MAJORVERSION_NUMBER 2
-#define AP_SERVER_MINORVERSION_NUMBER 1
-#define AP_SERVER_PATCHLEVEL_NUMBER 0
-#define AP_SERVER_ADD_STRING "-dev"
-
-/* keep old macros as well */
-#define AP_SERVER_MAJORVERSION APR_STRINGIFY(AP_SERVER_MAJORVERSION_NUMBER)
-#define AP_SERVER_MINORVERSION APR_STRINGIFY(AP_SERVER_MINORVERSION_NUMBER)
-#define AP_SERVER_PATCHLEVEL APR_STRINGIFY(AP_SERVER_PATCHLEVEL_NUMBER) \
- AP_SERVER_ADD_STRING
-
-#define AP_SERVER_MINORREVISION AP_SERVER_MAJORVERSION "." AP_SERVER_MINORVERSION
-#define AP_SERVER_BASEREVISION AP_SERVER_MINORREVISION "." AP_SERVER_PATCHLEVEL
-#define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
-#define AP_SERVER_VERSION AP_SERVER_BASEVERSION
-
-#endif
diff --git a/include/http_config.h b/include/http_config.h
deleted file mode 100644
index 41287de99a..0000000000
--- a/include/http_config.h
+++ /dev/null
@@ -1,1031 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_CONFIG_H
-#define APACHE_HTTP_CONFIG_H
-
-#include "apr_hooks.h"
-#include "util_cfgtree.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @file http_config.h
- * @brief Apache Configuration
- */
-
-/*
- * The central data structures around here...
- */
-
-/* Command dispatch structures... */
-
-/**
- * How the directives arguments should be parsed.
- * @remark Note that for all of these except RAW_ARGS, the config routine is
- * passed a freshly allocated string which can be modified or stored
- * or whatever...
- */
-enum cmd_how {
- RAW_ARGS, /**< cmd_func parses command line itself */
- TAKE1, /**< one argument only */
- TAKE2, /**< two arguments only */
- ITERATE, /**< one argument, occuring multiple times
- * (e.g., IndexIgnore)
- */
- ITERATE2, /**< two arguments, 2nd occurs multiple times
- * (e.g., AddIcon)
- */
- FLAG, /**< One of 'On' or 'Off' */
- NO_ARGS, /**< No args at all, e.g. </Directory> */
- TAKE12, /**< one or two arguments */
- TAKE3, /**< three arguments only */
- TAKE23, /**< two or three arguments */
- TAKE123, /**< one, two or three arguments */
- TAKE13 /**< one or three arguments */
-};
-/**
- * This structure is passed to a command which is being invoked,
- * to carry a large variety of miscellaneous data which is all of
- * use to *somebody*...
- */
-typedef struct cmd_parms_struct cmd_parms;
-
-#if defined(AP_HAVE_DESIGNATED_INITIALIZER) || defined(DOXYGEN)
-
-/**
- * All the types of functions that can be used in directives
- * @internal
- */
-typedef union {
- /** function to call for a no-args */
- const char *(*no_args) (cmd_parms *parms, void *mconfig);
- /** function to call for a raw-args */
- const char *(*raw_args) (cmd_parms *parms, void *mconfig,
- const char *args);
- /** function to call for a take1 */
- const char *(*take1) (cmd_parms *parms, void *mconfig, const char *w);
- /** function to call for a take2 */
- const char *(*take2) (cmd_parms *parms, void *mconfig, const char *w,
- const char *w2);
- /** function to call for a take3 */
- const char *(*take3) (cmd_parms *parms, void *mconfig, const char *w,
- const char *w2, const char *w3);
- /** function to call for a flag */
- const char *(*flag) (cmd_parms *parms, void *mconfig, int on);
-} cmd_func;
-
-/** This configuration directive does not take any arguments */
-# define AP_NO_ARGS func.no_args
-/** This configuration directive will handle it's own parsing of arguments*/
-# define AP_RAW_ARGS func.raw_args
-/** This configuration directive takes 1 argument*/
-# define AP_TAKE1 func.take1
-/** This configuration directive takes 2 arguments */
-# define AP_TAKE2 func.take2
-/** This configuration directive takes 3 arguments */
-# define AP_TAKE3 func.take3
-/** This configuration directive takes a flag (on/off) as a argument*/
-# define AP_FLAG func.flag
-
-/** method of declaring a directive with no arguments */
-# define AP_INIT_NO_ARGS(directive, func, mconfig, where, help) \
- { directive, { .no_args=func }, mconfig, where, RAW_ARGS, help }
-/** method of declaring a directive with raw argument parsing */
-# define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help) \
- { directive, { .raw_args=func }, mconfig, where, RAW_ARGS, help }
-/** method of declaring a directive which takes 1 argument */
-# define AP_INIT_TAKE1(directive, func, mconfig, where, help) \
- { directive, { .take1=func }, mconfig, where, TAKE1, help }
-/** method of declaring a directive which takes multiple arguments */
-# define AP_INIT_ITERATE(directive, func, mconfig, where, help) \
- { directive, { .take1=func }, mconfig, where, ITERATE, help }
-/** method of declaring a directive which takes 2 arguments */
-# define AP_INIT_TAKE2(directive, func, mconfig, where, help) \
- { directive, { .take2=func }, mconfig, where, TAKE2, help }
-/** method of declaring a directive which takes 1 or 2 arguments */
-# define AP_INIT_TAKE12(directive, func, mconfig, where, help) \
- { directive, { .take2=func }, mconfig, where, TAKE12, help }
-/** method of declaring a directive which takes multiple 2 arguments */
-# define AP_INIT_ITERATE2(directive, func, mconfig, where, help) \
- { directive, { .take2=func }, mconfig, where, ITERATE2, help }
-/** method of declaring a directive which takes 1 or 3 arguments */
-# define AP_INIT_TAKE13(directive, func, mconfig, where, help) \
- { directive, { .take3=func }, mconfig, where, TAKE13, help }
-/** method of declaring a directive which takes 2 or 3 arguments */
-# define AP_INIT_TAKE23(directive, func, mconfig, where, help) \
- { directive, { .take3=func }, mconfig, where, TAKE23, help }
-/** method of declaring a directive which takes 1 to 3 arguments */
-# define AP_INIT_TAKE123(directive, func, mconfig, where, help) \
- { directive, { .take3=func }, mconfig, where, TAKE123, help }
-/** method of declaring a directive which takes 3 arguments */
-# define AP_INIT_TAKE3(directive, func, mconfig, where, help) \
- { directive, { .take3=func }, mconfig, where, TAKE3, help }
-/** method of declaring a directive which takes a flag (on/off) as a argument*/
-# define AP_INIT_FLAG(directive, func, mconfig, where, help) \
- { directive, { .flag=func }, mconfig, where, FLAG, help }
-
-#else /* AP_HAVE_DESIGNATED_INITIALIZER */
-
-typedef const char *(*cmd_func) ();
-
-# define AP_NO_ARGS func
-# define AP_RAW_ARGS func
-# define AP_TAKE1 func
-# define AP_TAKE2 func
-# define AP_TAKE3 func
-# define AP_FLAG func
-
-# define AP_INIT_NO_ARGS(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, RAW_ARGS, help }
-# define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, RAW_ARGS, help }
-# define AP_INIT_TAKE1(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE1, help }
-# define AP_INIT_ITERATE(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, ITERATE, help }
-# define AP_INIT_TAKE2(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE2, help }
-# define AP_INIT_TAKE12(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE12, help }
-# define AP_INIT_ITERATE2(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, ITERATE2, help }
-# define AP_INIT_TAKE13(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE13, help }
-# define AP_INIT_TAKE23(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE23, help }
-# define AP_INIT_TAKE123(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE123, help }
-# define AP_INIT_TAKE3(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, TAKE3, help }
-# define AP_INIT_FLAG(directive, func, mconfig, where, help) \
- { directive, func, mconfig, where, FLAG, help }
-
-#endif /* AP_HAVE_DESIGNATED_INITIALIZER */
-
-/**
- * The command record structure. Each modules can define a table of these
- * to define the directives it will implement.
- */
-typedef struct command_struct command_rec;
-struct command_struct {
- /** Name of this command */
- const char *name;
- /** The function to be called when this directive is parsed */
- cmd_func func;
- /** Extra data, for functions which implement multiple commands... */
- void *cmd_data;
- /** What overrides need to be allowed to enable this command. */
- int req_override;
- /** What the command expects as arguments
- * @defvar cmd_how args_how*/
- enum cmd_how args_how;
-
- /** 'usage' message, in case of syntax errors */
- const char *errmsg;
-};
-
-/**
- * @defgroup ConfigDirectives Allowed locations for configuration directives.
- *
- * The allowed locations for a configuration directive are the union of
- * those indicated by each set bit in the req_override mask.
- *
- * @{
- */
-#define OR_NONE 0 /**< *.conf is not available anywhere in this override */
-#define OR_LIMIT 1 /**< *.conf inside <Directory> or <Location>
- and .htaccess when AllowOverride Limit */
-#define OR_OPTIONS 2 /**< *.conf anywhere
- and .htaccess when AllowOverride Options */
-#define OR_FILEINFO 4 /**< *.conf anywhere
- and .htaccess when AllowOverride FileInfo */
-#define OR_AUTHCFG 8 /**< *.conf inside <Directory> or <Location>
- and .htaccess when AllowOverride AuthConfig */
-#define OR_INDEXES 16 /**< *.conf anywhere
- and .htaccess when AllowOverride Indexes */
-#define OR_UNSET 32 /**< unset a directive (in Allow) */
-#define ACCESS_CONF 64 /**< *.conf inside <Directory> or <Location> */
-#define RSRC_CONF 128 /**< *.conf outside <Directory> or <Location> */
-#define EXEC_ON_READ 256 /**< force directive to execute a command
- which would modify the configuration (like including another
- file, or IFModule */
-/** this directive can be placed anywhere */
-#define OR_ALL (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES)
-
-/** @} */
-
-/**
- * This can be returned by a function if they don't wish to handle
- * a command. Make it something not likely someone will actually use
- * as an error code.
- */
-#define DECLINE_CMD "\a\b"
-
-/** Common structure for reading of config files / passwd files etc. */
-typedef struct ap_configfile_t ap_configfile_t;
-struct ap_configfile_t {
- int (*getch) (void *param); /**< a getc()-like function */
- void *(*getstr) (void *buf, size_t bufsiz, void *param);
- /**< a fgets()-like function */
- int (*close) (void *param); /**< a close handler function */
- void *param; /**< the argument passed to getch/getstr/close */
- const char *name; /**< the filename / description */
- unsigned line_number; /**< current line number, starting at 1 */
-};
-
-/**
- * This structure is passed to a command which is being invoked,
- * to carry a large variety of miscellaneous data which is all of
- * use to *somebody*...
- */
-struct cmd_parms_struct {
- /** Argument to command from cmd_table */
- void *info;
- /** Which allow-override bits are set */
- int override;
- /** Which methods are <Limit>ed */
- apr_int64_t limited;
- /** methods which are limited */
- apr_array_header_t *limited_xmethods;
- /** methods which are xlimited */
- ap_method_list_t *xlimited;
-
- /** Config file structure. */
- ap_configfile_t *config_file;
- /** the directive specifying this command */
- ap_directive_t *directive;
-
- /** Pool to allocate new storage in */
- apr_pool_t *pool;
- /** Pool for scratch memory; persists during configuration, but
- * wiped before the first request is served... */
- apr_pool_t *temp_pool;
- /** Server_rec being configured for */
- server_rec *server;
- /** If configuring for a directory, pathname of that directory.
- * NOPE! That's what it meant previous to the existance of <Files>,
- * <Location> and regex matching. Now the only usefulness that can be
- * derived from this field is whether a command is being called in a
- * server context (path == NULL) or being called in a dir context
- * (path != NULL). */
- char *path;
- /** configuration command */
- const command_rec *cmd;
-
- /** per_dir_config vector passed to handle_command */
- struct ap_conf_vector_t *context;
- /** directive with syntax error */
- const ap_directive_t *err_directive;
-
- /** Which allow-override-opts bits are set */
- int override_opts;
-};
-
-/**
- * Module structures. Just about everything is dispatched through
- * these, directly or indirectly (through the command and handler
- * tables).
- */
-typedef struct module_struct module;
-struct module_struct {
- /** API version, *not* module version; check that module is
- * compatible with this version of the server.
- */
- int version;
- /** API minor version. Provides API feature milestones. Not checked
- * during module init */
- int minor_version;
- /** Index to this modules structures in config vectors. */
- int module_index;
-
- /** The name of the module's C file */
- const char *name;
- /** The handle for the DSO. Internal use only */
- void *dynamic_load_handle;
-
- /** A pointer to the next module in the list
- * @defvar module_struct *next */
- struct module_struct *next;
-
- /** Magic Cookie to identify a module structure; It's mainly
- * important for the DSO facility (see also mod_so). */
- unsigned long magic;
-
- /** Function to allow MPMs to re-write command line arguments. This
- * hook is only available to MPMs.
- * @param The process that the server is running in.
- */
- void (*rewrite_args) (process_rec *process);
- /** Function to allow all modules to create per directory configuration
- * structures.
- * @param p The pool to use for all allocations.
- * @param dir The directory currently being processed.
- * @return The per-directory structure created
- */
- void *(*create_dir_config) (apr_pool_t *p, char *dir);
- /** Function to allow all modules to merge the per directory configuration
- * structures for two directories.
- * @param p The pool to use for all allocations.
- * @param base_conf The directory structure created for the parent directory.
- * @param new_conf The directory structure currently being processed.
- * @return The new per-directory structure created
- */
- void *(*merge_dir_config) (apr_pool_t *p, void *base_conf, void *new_conf);
- /** Function to allow all modules to create per server configuration
- * structures.
- * @param p The pool to use for all allocations.
- * @param s The server currently being processed.
- * @return The per-server structure created
- */
- void *(*create_server_config) (apr_pool_t *p, server_rec *s);
- /** Function to allow all modules to merge the per server configuration
- * structures for two servers.
- * @param p The pool to use for all allocations.
- * @param base_conf The directory structure created for the parent directory.
- * @param new_conf The directory structure currently being processed.
- * @return The new per-directory structure created
- */
- void *(*merge_server_config) (apr_pool_t *p, void *base_conf,
- void *new_conf);
-
- /** A command_rec table that describes all of the directives this module
- * defines. */
- const command_rec *cmds;
-
- /** A hook to allow modules to hook other points in the request processing.
- * In this function, modules should call the ap_hook_*() functions to
- * register an interest in a specific step in processing the current
- * request.
- * @param p the pool to use for all allocations
- */
- void (*register_hooks) (apr_pool_t *p);
-};
-
-/**
- * @defgroup ModuleInit Module structure initializers
- *
- * Initializer for the first few module slots, which are only
- * really set up once we start running. Note that the first two slots
- * provide a version check; this should allow us to deal with changes to
- * the API. The major number should reflect changes to the API handler table
- * itself or removal of functionality. The minor number should reflect
- * additions of functionality to the existing API. (the server can detect
- * an old-format module, and either handle it back-compatibly, or at least
- * signal an error). See src/include/ap_mmn.h for MMN version history.
- * @{
- */
-
-/** The one used in Apache 1.3, which will deliberately cause an error */
-#define STANDARD_MODULE_STUFF this_module_needs_to_be_ported_to_apache_2_0
-
-/** Use this in all standard modules */
-#define STANDARD20_MODULE_STUFF MODULE_MAGIC_NUMBER_MAJOR, \
- MODULE_MAGIC_NUMBER_MINOR, \
- -1, \
- __FILE__, \
- NULL, \
- NULL, \
- MODULE_MAGIC_COOKIE, \
- NULL /* rewrite args spot */
-
-/** Use this only in MPMs */
-#define MPM20_MODULE_STUFF MODULE_MAGIC_NUMBER_MAJOR, \
- MODULE_MAGIC_NUMBER_MINOR, \
- -1, \
- __FILE__, \
- NULL, \
- NULL, \
- MODULE_MAGIC_COOKIE
-
-/** @} */
-
-/* CONFIGURATION VECTOR FUNCTIONS */
-
-/** configuration vector structure */
-typedef struct ap_conf_vector_t ap_conf_vector_t;
-
-/**
- * Generic accessors for other modules to get at their own module-specific
- * data
- * @param conf_vector The vector in which the modules configuration is stored.
- * usually r->per_dir_config or s->module_config
- * @param m The module to get the data for.
- * @return The module-specific data
- */
-AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv,
- const module *m);
-
-/**
- * Generic accessors for other modules to set at their own module-specific
- * data
- * @param conf_vector The vector in which the modules configuration is stored.
- * usually r->per_dir_config or s->module_config
- * @param m The module to set the data for.
- * @param val The module-specific data to set
- */
-AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m,
- void *val);
-
-#if !defined(AP_DEBUG)
-
-#define ap_get_module_config(v,m) \
- (((void **)(v))[(m)->module_index])
-#define ap_set_module_config(v,m,val) \
- ((((void **)(v))[(m)->module_index]) = (val))
-
-#endif /* AP_DEBUG */
-
-
-/**
- * Generic command handling function for strings
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg);
-
-/**
- * Generic command handling function for integers
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_int_slot(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg);
-
-/**
- * Return true if the specified method is limited by being listed in
- * a <Limit> container, or by *not* being listed in a <LimiteExcept>
- * container.
- *
- * @param method Pointer to a string specifying the method to check.
- * @param cmd Pointer to the cmd_parms structure passed to the
- * directive handler.
- * @return 0 if the method is not limited in the current scope
- */
-AP_DECLARE(int) ap_method_is_limited(cmd_parms *cmd, const char *method);
-
-/**
- * Generic command handling function for strings, always sets the value
- * to a lowercase string
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot_lower(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg);
-/**
- * Generic command handling function for flags
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive (either 1 or 0)
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_flag_slot(cmd_parms *cmd,
- void *struct_ptr,
- int arg);
-/**
- * Generic command handling function for files
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_file_slot(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg);
-/**
- * Generic command handling function to respond with cmd->help as an error
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return The cmd->help value as the error string
- * @tip This allows simple declarations such as;
- * <pre>
- * AP_INIT_RAW_ARGS("Foo", ap_set_deprecated, NULL, OR_ALL,
- * "The Foo directive is no longer supported, use Bar"),
- * </pre>
- */
-AP_DECLARE_NONSTD(const char *) ap_set_deprecated(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg);
-/**
- * For modules which need to read config files, open logs, etc. this returns
- * the canonical form of fname made absolute to ap_server_root.
- * @param p pool to allocate data from
- * @param fname The file name
- */
-AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *fname);
-
-/* Finally, the hook for dynamically loading modules in... */
-
-/**
- * Add a module to the server
- * @param m The module structure of the module to add
- * @param p The pool of the same lifetime as the module
- */
-AP_DECLARE(const char *) ap_add_module(module *m, apr_pool_t *p);
-
-/**
- * Remove a module from the server. There are some caveats:
- * when the module is removed, its slot is lost so all the current
- * per-dir and per-server configurations are invalid. So we should
- * only ever call this function when you are invalidating almost
- * all our current data. I.e. when doing a restart.
- * @param m the module structure of the module to remove
- */
-AP_DECLARE(void) ap_remove_module(module *m);
-/**
- * Add a module to the chained modules list and the list of loaded modules
- * @param m The module structure of the module to add
- * @param p The pool with the same lifetime as the module
- */
-AP_DECLARE(const char *) ap_add_loaded_module(module *mod, apr_pool_t *p);
-/**
- * Remove a module fromthe chained modules list and the list of loaded modules
- * @param m the module structure of the module to remove
- */
-AP_DECLARE(void) ap_remove_loaded_module(module *mod);
-/**
- * Find the name of the specified module
- * @param m The module to get the name for
- * @return the name of the module
- */
-AP_DECLARE(const char *) ap_find_module_name(module *m);
-/**
- * Find a module based on the name of the module
- * @param name the name of the module
- * @return the module structure if found, NULL otherwise
- */
-AP_DECLARE(module *) ap_find_linked_module(const char *name);
-
-/**
- * Open a ap_configfile_t as apr_file_t
- * @param ret_cfg open ap_configfile_t struct pointer
- * @param p The pool to allocate the structure from
- * @param name the name of the file to open
- */
-AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg,
- apr_pool_t *p, const char *name);
-
-/**
- * Allocate a ap_configfile_t handle with user defined functions and params
- * @param p The pool to allocate from
- * @param descr The name of the file
- * @param param The argument passed to getch/getstr/close
- * @param getc_func The getch function
- * @param gets_func The getstr function
- * @param close_func The close function
- */
-AP_DECLARE(ap_configfile_t *) ap_pcfg_open_custom(apr_pool_t *p,
- const char *descr,
- void *param,
- int(*getc_func)(void*),
- void *(*gets_func) (void *buf, size_t bufsiz, void *param),
- int(*close_func)(void *param));
-
-/**
- * Read one line from open ap_configfile_t, strip LF, increase line number
- * @param buf place to store the line read
- * @param bufsize size of the buffer
- * @param cfp File to read from
- * @return 1 on success, 0 on failure
- */
-AP_DECLARE(int) ap_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp);
-
-/**
- * Read one char from open configfile_t, increase line number upon LF
- * @param cfp The file to read from
- * @return the character read
- */
-AP_DECLARE(int) ap_cfg_getc(ap_configfile_t *cfp);
-
-/**
- * Detach from open ap_configfile_t, calling the close handler
- * @param cfp The file to close
- * @return 1 on sucess, 0 on failure
- */
-AP_DECLARE(int) ap_cfg_closefile(ap_configfile_t *cfp);
-
-/**
- * Read all data between the current <foo> and the matching </foo>. All
- * of this data is forgotten immediately.
- * @param cmd The cmd_parms to pass to the directives inside the container
- * @param directive The directive name to read until
- * @return Error string on failure, NULL on success
- */
-AP_DECLARE(const char *) ap_soak_end_container(cmd_parms *cmd, char *directive);
-
-/**
- * Read all data between the current <foo> and the matching </foo> and build
- * a config tree from it
- * @param p pool to allocate from
- * @param temp_pool Temporary pool to allocate from
- * @param parms The cmd_parms to pass to all directives read
- * @param current The current node in the tree
- * @param curr_parent The current parent node
- * @param orig_directive The directive to read until hit.
- * @return Error string on failure, NULL on success
-*/
-AP_DECLARE(const char *) ap_build_cont_config(apr_pool_t *p,
- apr_pool_t *temp_pool,
- cmd_parms *parms,
- ap_directive_t **current,
- ap_directive_t **curr_parent,
- char *orig_directive);
-
-/**
- * Build a config tree from a config file
- * @param parms The cmd_parms to pass to all of the directives in the file
- * @param conf_pool The pconf pool
- * @param temp_pool The temporary pool
- * @param conftree Place to store the root node of the config tree
- * @return Error string on erro, NULL otherwise
- */
-AP_DECLARE(const char *) ap_build_config(cmd_parms *parms,
- apr_pool_t *conf_pool,
- apr_pool_t *temp_pool,
- ap_directive_t **conftree);
-
-/**
- * Walk a config tree and setup the server's internal structures
- * @param conftree The config tree to walk
- * @param parms The cmd_parms to pass to all functions
- * @param section_vector The per-section config vector.
- * @return Error string on error, NULL otherwise
- */
-AP_DECLARE(const char *) ap_walk_config(ap_directive_t *conftree,
- cmd_parms *parms,
- ap_conf_vector_t *section_vector);
-
-/**
- * @defgroup ap_check_cmd_context ap_check_cmd_context
- * @{
- */
-/**
- * Check the context a command is used in.
- * @param cmd The command to check
- * @param forbidden Where the command is forbidden.
- * @return Error string on error, NULL on success
- */
-AP_DECLARE(const char *) ap_check_cmd_context(cmd_parms *cmd,
- unsigned forbidden);
-
-#define NOT_IN_VIRTUALHOST 0x01 /**< Forbidden in <Virtualhost> */
-#define NOT_IN_LIMIT 0x02 /**< Forbidden in <Limit> */
-#define NOT_IN_DIRECTORY 0x04 /**< Forbidden in <Directory> */
-#define NOT_IN_LOCATION 0x08 /**< Forbidden in <Location> */
-#define NOT_IN_FILES 0x10 /**< Forbidden in <Files> */
-/** Forbidden in <Directory>/<Location>/<Files>*/
-#define NOT_IN_DIR_LOC_FILE (NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES)
-/** Forbidden in <VirtualHost>/<Limit>/<Directory>/<Location>/<Files> */
-#define GLOBAL_ONLY (NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE)
-
-/** @} */
-
-#ifdef CORE_PRIVATE
-
-/**
- * This structure is used to assign symbol names to module pointers
- */
-typedef struct {
- const char *name;
- module *modp;
-} ap_module_symbol_t;
-
-/**
- * The topmost module in the list
- * @defvar module *ap_top_module
- */
-AP_DECLARE_DATA extern module *ap_top_module;
-
-/**
- * Array of all statically linked modules
- * @defvar module *ap_prelinked_modules[]
- */
-AP_DECLARE_DATA extern module *ap_prelinked_modules[];
-/**
- * Array of all statically linked modulenames (symbols)
- * @defvar ap_module_symbol_t ap_prelinked_modulenames[]
- */
-AP_DECLARE_DATA extern ap_module_symbol_t ap_prelinked_module_symbols[];
-/**
- * Array of all preloaded modules
- * @defvar module *ap_preloaded_modules[]
- */
-AP_DECLARE_DATA extern module *ap_preloaded_modules[];
-/**
- * Array of all loaded modules
- * @defvar module **ap_loaded_modules
- */
-AP_DECLARE_DATA extern module **ap_loaded_modules;
-
-/* For mod_so.c... */
-/** Run a single module's two create_config hooks
- * @param p the pool to allocate from
- * @param s The server to configure for.
- * @param m The module to configure
- */
-AP_DECLARE(void) ap_single_module_configure(apr_pool_t *p, server_rec *s,
- module *m);
-
-/* For http_main.c... */
-/**
- * Add all of the prelinked modules into the loaded module list
- * @param process The process that is currently running the server
- */
-AP_DECLARE(const char *) ap_setup_prelinked_modules(process_rec *process);
-
-/**
- * Show the preloaded configuration directives, the help string explaining
- * the directive arguments, in what module they are handled, and in
- * what parts of the configuration they are allowed. Used for httpd -h.
- */
-AP_DECLARE(void) ap_show_directives(void);
-
-/**
- * Show the preloaded module names. Used for httpd -l.
- */
-AP_DECLARE(void) ap_show_modules(void);
-
-/**
- * Show the MPM name. Used in reporting modules such as mod_info to
- * provide extra information to the user
- */
-AP_DECLARE(const char *) ap_show_mpm(void);
-
-/**
- * Read all config files and setup the server
- * @param process The process running the server
- * @param temp_pool A pool to allocate temporary data from.
- * @param config_name The name of the config file
- * @param conftree Place to store the root of the config tree
- * @return The setup server_rec list.
- */
-AP_DECLARE(server_rec *) ap_read_config(process_rec *process,
- apr_pool_t *temp_pool,
- const char *config_name,
- ap_directive_t **conftree);
-
-/**
- * Run all rewrite args hooks for loaded modules
- * @param process The process currently running the server
- */
-AP_DECLARE(void) ap_run_rewrite_args(process_rec *process);
-
-/**
- * Run the register hooks function for a specified module
- * @param m The module to run the register hooks function fo
- * @param p The pool valid for the lifetime of the module
- */
-AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p);
-
-/**
- * Setup all virtual hosts
- * @param p The pool to allocate from
- * @param main_server The head of the server_rec list
- */
-AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p,
- server_rec *main_server);
-
-/* For http_request.c... */
-
-/**
- * Setup the config vector for a request_rec
- * @param p The pool to allocate the config vector from
- * @return The config vector
- */
-AP_CORE_DECLARE(ap_conf_vector_t*) ap_create_request_config(apr_pool_t *p);
-
-/**
- * Setup the config vector for per dir module configs
- * @param p The pool to allocate the config vector from
- * @return The config vector
- */
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_per_dir_config(apr_pool_t *p);
-
-/**
- * Run all of the modules merge per dir config functions
- * @param p The pool to pass to the merge functions
- * @param base The base directory config structure
- * @param new_conf The new directory config structure
- */
-AP_CORE_DECLARE(ap_conf_vector_t*) ap_merge_per_dir_configs(apr_pool_t *p,
- ap_conf_vector_t *base,
- ap_conf_vector_t *new_conf);
-
-/* For http_connection.c... */
-/**
- * Setup the config vector for a connection_rec
- * @param p The pool to allocate the config vector from
- * @return The config vector
- */
-AP_CORE_DECLARE(ap_conf_vector_t*) ap_create_conn_config(apr_pool_t *p);
-
-/* For http_core.c... (<Directory> command and virtual hosts) */
-
-/**
- * parse an htaccess file
- * @param resulting htaccess_result
- * @param r The request currently being served
- * @param override Which overrides are active
- * @param path The path to the htaccess file
- * @param access_name The list of possible names for .htaccess files
- * int The status of the current request
- */
-AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result,
- request_rec *r, int override,
- int override_opts,
- const char *path,
- const char *access_name);
-
-/**
- * Setup a virtual host
- * @param p The pool to allocate all memory from
- * @param hostname The hostname of the virtual hsot
- * @param main_server The main server for this Apache configuration
- * @param ps Place to store the new server_rec
- * return Error string on error, NULL on success
- */
-AP_CORE_DECLARE(const char *) ap_init_virtual_host(apr_pool_t *p,
- const char *hostname,
- server_rec *main_server,
- server_rec **);
-
-/**
- * Process the config file for Apache
- * @param s The server rec to use for the command parms
- * @param fname The name of the config file
- * @param conftree The root node of the created config tree
- * @param p Pool for general allocation
- * @param ptem Pool for temporary allocation
- */
-AP_DECLARE(const char *) ap_process_resource_config(server_rec *s,
- const char *fname,
- ap_directive_t **conftree,
- apr_pool_t *p,
- apr_pool_t *ptemp);
-
-/**
- * Process all directives in the config tree
- * @param s The server rec to use in the command parms
- * @param conftree The config tree to process
- * @param p The pool for general allocation
- * @param ptemp The pool for temporary allocations
- * @return OK if no problems
- */
-AP_DECLARE(int) ap_process_config_tree(server_rec *s,
- ap_directive_t *conftree,
- apr_pool_t *p,
- apr_pool_t *ptemp);
-
-/* Module-method dispatchers, also for http_request.c */
-/**
- * Run the handler phase of each module until a module accepts the
- * responsibility of serving the request
- * @param r The current request
- * @return The status of the current request
- */
-AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r);
-
-/* for mod_perl */
-
-/**
- * Find a given directive in a command_rec table
- * @param name The directive to search for
- * @param cmds The table to search
- * @return The directive definition of the specified directive
- */
-AP_CORE_DECLARE(const command_rec *) ap_find_command(const char *name,
- const command_rec *cmds);
-
-/**
- * Find a given directive in a list module
- * @param cmd_name The directive to search for
- * @param mod The module list to search
- * @return The directive definition of the specified directive
- */
-AP_CORE_DECLARE(const command_rec *) ap_find_command_in_modules(const char *cmd_name,
- module **mod);
-
-/**
- * Ask a module to create per-server and per-section (dir/loc/file) configs
- * (if it hasn't happened already). The results are stored in the server's
- * config, and the specified per-section config vector.
- * @param server The server to operate upon.
- * @param section_vector The per-section config vector.
- * @param section Which section to create a config for.
- * @param mod The module which is defining the config data.
- * @param pconf A pool for all configuration allocations.
- * @return The (new) per-section config data.
- */
-AP_CORE_DECLARE(void *) ap_set_config_vectors(server_rec *server,
- ap_conf_vector_t *section_vector,
- const char *section,
- module *mod, apr_pool_t *pconf);
-
-#endif
-
- /* Hooks */
-
-/**
- * Run the header parser functions for each module
- * @param r The current request
- * @return OK or DECLINED
- */
-AP_DECLARE_HOOK(int,header_parser,(request_rec *r))
-
-/**
- * Run the pre_config function for each module
- * @param pconf The config pool
- * @param plog The logging streams pool
- * @param ptemp The temporary pool
- * @return OK or DECLINED on success anything else is a error
- */
-AP_DECLARE_HOOK(int,pre_config,(apr_pool_t *pconf,apr_pool_t *plog,
- apr_pool_t *ptemp))
-
-
-/**
- * Run the post_config function for each module
- * @param pconf The config pool
- * @param plog The logging streams pool
- * @param ptemp The temporary pool
- * @param s The list of server_recs
- * @return OK or DECLINED on success anything else is a error
- */
-AP_DECLARE_HOOK(int,post_config,(apr_pool_t *pconf,apr_pool_t *plog,
- apr_pool_t *ptemp,server_rec *s))
-
-/**
- * Run the open_logs functions for each module
- * @param pconf The config pool
- * @param plog The logging streams pool
- * @param ptemp The temporary pool
- * @param s The list of server_recs
- * @return OK or DECLINED on success anything else is a error
- */
-AP_DECLARE_HOOK(int,open_logs,(apr_pool_t *pconf,apr_pool_t *plog,
- apr_pool_t *ptemp,server_rec *s))
-
-/**
- * Run the child_init functions for each module
- * @param pchild The child pool
- * @param s The list of server_recs in this server
- */
-AP_DECLARE_HOOK(void,child_init,(apr_pool_t *pchild, server_rec *s))
-
-/**
- * Run the handler functions for each module
- * @param r The request_rec
- * @remark non-wildcard handlers should HOOK_MIDDLE, wildcard HOOK_LAST
- */
-AP_DECLARE_HOOK(int,handler,(request_rec *r))
-
-/**
- * Run the quick handler functions for each module. The quick_handler
- * is run before any other requests hooks are called (location_walk,
- * directory_walk, access checking, et. al.). This hook was added
- * to provide a quick way to serve content from a URI keyed cache.
- *
- * @param r The request_rec
- * @param lookup_uri Controls whether the caller actually wants content or not.
- * lookup is set when the quick_handler is called out of
- * ap_sub_req_lookup_uri()
- */
-AP_DECLARE_HOOK(int,quick_handler,(request_rec *r, int lookup_uri))
-
-/**
- * Retrieve the optional functions for each module.
- * This is run immediately before the server starts. Optional functions should
- * be registered during the hook registration phase.
- */
-AP_DECLARE_HOOK(void,optional_fn_retrieve,(void))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_CONFIG_H */
diff --git a/include/http_connection.h b/include/http_connection.h
deleted file mode 100644
index 75d614f372..0000000000
--- a/include/http_connection.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_CONNECTION_H
-#define APACHE_HTTP_CONNECTION_H
-
-#include "apr_hooks.h"
-#include "apr_network_io.h"
-#include "apr_buckets.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache connection library
- */
-#ifdef CORE_PRIVATE
-/**
- * This is the protocol module driver. This calls all of the
- * pre-connection and connection hooks for all protocol modules.
- * @param c The connection on which the request is read
- * @param csd The mechanism on which this connection is to be read.
- * Most times this will be a socket, but it is up to the module
- * that accepts the request to determine the exact type.
- * @deffunc void ap_process_connection(conn_rec *c, void *csd)
- */
-AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, void *csd);
-
-AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c);
-
-/**
- * This function is responsible for the following cases:
- * <pre>
- * we now proceed to read from the client until we get EOF, or until
- * MAX_SECS_TO_LINGER has passed. the reasons for doing this are
- * documented in a draft:
- *
- * http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt
- *
- * in a nutshell -- if we don't make this effort we risk causing
- * TCP RST packets to be sent which can tear down a connection before
- * all the response data has been sent to the client.
- * </pre>
- * @param c The connection we are closing
- */
-AP_DECLARE(void) ap_lingering_close(conn_rec *c);
-#endif
-
- /* Hooks */
-/**
- * create_connection is a RUN_FIRST hook which allows modules to create
- * connections. In general, you should not install filters with the
- * create_connection hook. If you require vhost configuration information
- * to make filter installation decisions, you must use the pre_connection
- * or install_network_transport hook. This hook should close the connection
- * if it encounters a fatal error condition.
- *
- * @param p The pool from which to allocate the connection record
- * @param csd The socket that has been accepted
- * @param conn_id A unique identifier for this connection. The ID only
- * needs to be unique at that time, not forever.
- * @param sbh A handle to scoreboard information for this connection.
- * @return An allocated connection record or NULL.
- */
-AP_DECLARE_HOOK(conn_rec *, create_connection,
- (apr_pool_t *p, server_rec *server, apr_socket_t *csd,
- long conn_id, void *sbh, apr_bucket_alloc_t *alloc))
-
-/**
- * This hook gives protocol modules an opportunity to set everything up
- * before calling the protocol handler. All pre-connection hooks are
- * run until one returns something other than ok or decline
- * @param c The connection on which the request has been received.
- * @param csd The mechanism on which this connection is to be read.
- * Most times this will be a socket, but it is up to the module
- * that accepts the request to determine the exact type.
- * @return OK or DECLINED
- * @deffunc int ap_run_pre_connection(conn_rec *c, void *csd)
- */
-AP_DECLARE_HOOK(int,pre_connection,(conn_rec *c, void *csd))
-
-/**
- * This hook implements different protocols. After a connection has been
- * established, the protocol module must read and serve the request. This
- * function does that for each protocol module. The first protocol module
- * to handle the request is the last module run.
- * @param c The connection on which the request has been received.
- * @return OK or DECLINED
- * @deffunc int ap_run_process_connection(conn_rec *c)
- */
-AP_DECLARE_HOOK(int,process_connection,(conn_rec *c))
-
-/* End Of Connection (EOC) bucket */
-
-AP_DECLARE_DATA extern const apr_bucket_type_t ap_bucket_type_eoc;
-
-/**
- * Determine if a bucket is an End Of Connection (EOC) bucket
- * @param e The bucket to inspect
- * @return true or false
- */
-#define AP_BUCKET_IS_EOC(e) (e->type == &ap_bucket_type_eoc)
-
-/**
- * Make the bucket passed in an End Of Connection (EOC) bucket
- * @param b The bucket to make into an EOC bucket
- * @return The new bucket, or NULL if allocation failed
- * @deffunc apr_bucket *ap_bucket_eoc_make(apr_bucket *b)
- */
-AP_DECLARE(apr_bucket *) ap_bucket_eoc_make(apr_bucket *b);
-
-/**
- * Create a bucket referring to an End Of Connection (EOC). This indicates
- * that the connection will be closed.
- * @param list The freelist from which this bucket should be allocated
- * @return The new bucket, or NULL if allocation failed
- * @deffunc apr_bucket *ap_bucket_eoc_create(apr_bucket_alloc_t *list)
- */
-AP_DECLARE(apr_bucket *) ap_bucket_eoc_create(apr_bucket_alloc_t *list);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_REQUEST_H */
diff --git a/include/http_core.h b/include/http_core.h
deleted file mode 100644
index d74a4cf5dd..0000000000
--- a/include/http_core.h
+++ /dev/null
@@ -1,635 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_CORE_H
-#define APACHE_HTTP_CORE_H
-
-#include "apr.h"
-#include "apr_hash.h"
-#include "apr_optional.h"
-#include "util_filter.h"
-
-#if APR_HAVE_STRUCT_RLIMIT
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package CORE HTTP Daemon
- */
-
-/* ****************************************************************
- *
- * The most basic server code is encapsulated in a single module
- * known as the core, which is just *barely* functional enough to
- * serve documents, though not terribly well.
- *
- * Largely for NCSA back-compatibility reasons, the core needs to
- * make pieces of its config structures available to other modules.
- * The accessors are declared here, along with the interpretation
- * of one of them (allow_options).
- */
-
-#define OPT_NONE 0
-#define OPT_INDEXES 1
-#define OPT_INCLUDES 2
-#define OPT_SYM_LINKS 4
-#define OPT_EXECCGI 8
-#define OPT_UNSET 16
-#define OPT_INCNOEXEC 32
-#define OPT_SYM_OWNER 64
-#define OPT_MULTI 128
-#define OPT_ALL (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI)
-
-/* options for get_remote_host() */
-/* REMOTE_HOST returns the hostname, or NULL if the hostname
- * lookup fails. It will force a DNS lookup according to the
- * HostnameLookups setting.
- */
-#define REMOTE_HOST (0)
-
-/* REMOTE_NAME returns the hostname, or the dotted quad if the
- * hostname lookup fails. It will force a DNS lookup according
- * to the HostnameLookups setting.
- */
-#define REMOTE_NAME (1)
-
-/* REMOTE_NOLOOKUP is like REMOTE_NAME except that a DNS lookup is
- * never forced.
- */
-#define REMOTE_NOLOOKUP (2)
-
-/* REMOTE_DOUBLE_REV will always force a DNS lookup, and also force
- * a double reverse lookup, regardless of the HostnameLookups
- * setting. The result is the (double reverse checked) hostname,
- * or NULL if any of the lookups fail.
- */
-#define REMOTE_DOUBLE_REV (3)
-
-#define SATISFY_ALL 0
-#define SATISFY_ANY 1
-#define SATISFY_NOSPEC 2
-
-/* Make sure we don't write less than 8000 bytes at any one time.
- */
-#define AP_MIN_BYTES_TO_WRITE 8000
-
-/* default maximum of internal redirects */
-# define AP_DEFAULT_MAX_INTERNAL_REDIRECTS 10
-
-/* default maximum subrequest nesting level */
-# define AP_DEFAULT_MAX_SUBREQ_DEPTH 10
-
-/**
- * Retrieve the value of Options for this request
- * @param r The current request
- * @return the Options bitmask
- * @deffunc int ap_allow_options(request_rec *r)
- */
-AP_DECLARE(int) ap_allow_options(request_rec *r);
-
-/**
- * Retrieve the value of the AllowOverride for this request
- * @param r The current request
- * @return the overrides bitmask
- * @deffunc int ap_allow_overrides(request_rec *r)
- */
-AP_DECLARE(int) ap_allow_overrides(request_rec *r);
-
-/**
- * Retrieve the value of the DefaultType directive, or text/plain if not set
- * @param r The current request
- * @return The default type
- * @deffunc const char *ap_default_type(request_rec *r)
- */
-AP_DECLARE(const char *) ap_default_type(request_rec *r);
-
-/**
- * Retrieve the document root for this server
- * @param r The current request
- * @warning Don't use this! If your request went through a Userdir, or
- * something like that, it'll screw you. But it's back-compatible...
- * @return The document root
- * @deffunc const char *ap_document_root(request_rec *r)
- */
-AP_DECLARE(const char *) ap_document_root(request_rec *r);
-
-/**
- * Lookup the remote client's DNS name or IP address
- * @param conn The current connection
- * @param dir_config The directory config vector from the request
- * @param type The type of lookup to perform. One of:
- * <pre>
- * REMOTE_HOST returns the hostname, or NULL if the hostname
- * lookup fails. It will force a DNS lookup according to the
- * HostnameLookups setting.
- * REMOTE_NAME returns the hostname, or the dotted quad if the
- * hostname lookup fails. It will force a DNS lookup according
- * to the HostnameLookups setting.
- * REMOTE_NOLOOKUP is like REMOTE_NAME except that a DNS lookup is
- * never forced.
- * REMOTE_DOUBLE_REV will always force a DNS lookup, and also force
- * a double reverse lookup, regardless of the HostnameLookups
- * setting. The result is the (double reverse checked)
- * hostname, or NULL if any of the lookups fail.
- * </pre>
- * @param str_is_ip unless NULL is passed, this will be set to non-zero on output when an IP address
- * string is returned
- * @return The remote hostname
- * @deffunc const char *ap_get_remote_host(conn_rec *conn, void *dir_config, int type, int *str_is_ip)
- */
-AP_DECLARE(const char *) ap_get_remote_host(conn_rec *conn, void *dir_config, int type, int *str_is_ip);
-
-/**
- * Retrieve the login name of the remote user. Undef if it could not be
- * determined
- * @param r The current request
- * @return The user logged in to the client machine
- * @deffunc const char *ap_get_remote_logname(request_rec *r)
- */
-AP_DECLARE(const char *) ap_get_remote_logname(request_rec *r);
-
-/* Used for constructing self-referencing URLs, and things like SERVER_PORT,
- * and SERVER_NAME.
- */
-/**
- * build a fully qualified URL from the uri and information in the request rec
- * @param p The pool to allocate the URL from
- * @param uri The path to the requested file
- * @param r The current request
- * @return A fully qualified URL
- * @deffunc char *ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r)
- */
-AP_DECLARE(char *) ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r);
-
-/**
- * Get the current server name from the request
- * @param r The current request
- * @return the server name
- * @deffunc const char *ap_get_server_name(request_rec *r)
- */
-AP_DECLARE(const char *) ap_get_server_name(request_rec *r);
-
-/**
- * Get the current server port
- * @param The current request
- * @return The server's port
- * @deffunc apr_port_t ap_get_server_port(const request_rec *r)
- */
-AP_DECLARE(apr_port_t) ap_get_server_port(const request_rec *r);
-
-/**
- * Return the limit on bytes in request msg body
- * @param r The current request
- * @return the maximum number of bytes in the request msg body
- * @deffunc apr_off_t ap_get_limit_req_body(const request_rec *r)
- */
-AP_DECLARE(apr_off_t) ap_get_limit_req_body(const request_rec *r);
-
-/**
- * Return the limit on bytes in XML request msg body
- * @param r The current request
- * @return the maximum number of bytes in XML request msg body
- * @deffunc size_t ap_get_limit_xml_body(const request_rec *r)
- */
-AP_DECLARE(size_t) ap_get_limit_xml_body(const request_rec *r);
-
-/**
- * Install a custom response handler for a given status
- * @param r The current request
- * @param status The status for which the custom response should be used
- * @param string The custom response. This can be a static string, a file
- * or a URL
- */
-AP_DECLARE(void) ap_custom_response(request_rec *r, int status, const char *string);
-
-/**
- * Check if the current request is beyond the configured max. number of redirects or subrequests
- * @param r The current request
- * @return true (is exceeded) or false
- * @deffunc int ap_is_recursion_limit_exceeded(const request_rec *r)
- */
-AP_DECLARE(int) ap_is_recursion_limit_exceeded(const request_rec *r);
-
-/**
- * Check for a definition from the server command line
- * @param name The define to check for
- * @return 1 if defined, 0 otherwise
- * @deffunc int ap_exists_config_define(const char *name)
- */
-AP_DECLARE(int) ap_exists_config_define(const char *name);
-/* FIXME! See STATUS about how */
-AP_DECLARE_NONSTD(int) ap_core_translate(request_rec *r);
-
-/* Authentication stuff. This is one of the places where compatibility
- * with the old config files *really* hurts; they don't discriminate at
- * all between different authentication schemes, meaning that we need
- * to maintain common state for all of them in the core, and make it
- * available to the other modules through interfaces.
- */
-typedef struct require_line require_line;
-
-/** A structure to keep track of authorization requirements */
-struct require_line {
- /** Where the require line is in the config file. */
- apr_int64_t method_mask;
- /** The complete string from the command line */
- char *requirement;
-};
-
-/**
- * Return the type of authorization required for this request
- * @param r The current request
- * @return The authorization required
- * @deffunc const char *ap_auth_type(request_rec *r)
- */
-AP_DECLARE(const char *) ap_auth_type(request_rec *r);
-
-/**
- * Return the current Authorization realm
- * @param r The current request
- * @return The current authorization realm
- * @deffunc const char *ap_auth_name(request_rec *r)
- */
-AP_DECLARE(const char *) ap_auth_name(request_rec *r);
-
-/**
- * How the requires lines must be met.
- * @param r The current request
- * @return How the requirements must be met. One of:
- * <pre>
- * SATISFY_ANY -- any of the requirements must be met.
- * SATISFY_ALL -- all of the requirements must be met.
- * SATISFY_NOSPEC -- There are no applicable satisfy lines
- * </pre>
- * @deffunc int ap_satisfies(request_rec *r)
- */
-AP_DECLARE(int) ap_satisfies(request_rec *r);
-
-/**
- * Retrieve information about all of the requires directives for this request
- * @param r The current request
- * @return An array of all requires directives for this request
- * @deffunc const apr_array_header_t *ap_requires(request_rec *r)
- */
-AP_DECLARE(const apr_array_header_t *) ap_requires(request_rec *r);
-
-#ifdef CORE_PRIVATE
-
-/*
- * Core is also unlike other modules in being implemented in more than
- * one file... so, data structures are declared here, even though most of
- * the code that cares really is in http_core.c. Also, another accessor.
- */
-
-AP_DECLARE_DATA extern module core_module;
-
-/* Per-request configuration */
-
-typedef struct {
- /* bucket brigade used by getline for look-ahead and
- * ap_get_client_block for holding left-over request body */
- struct apr_bucket_brigade *bb;
-
- /* an array of per-request working data elements, accessed
- * by ID using ap_get_request_note()
- * (Use ap_register_request_note() during initialization
- * to add elements)
- */
- void **notes;
-
- /* There is a script processor installed on the output filter chain,
- * so it needs the default_handler to deliver a (script) file into
- * the chain so it can process it. Normally, default_handler only
- * serves files on a GET request (assuming the file is actual content),
- * since other methods are not content-retrieval. This flag overrides
- * that behavior, stating that the "content" is actually a script and
- * won't actually be delivered as the response for the non-GET method.
- */
- int deliver_script;
-
- /* Custom response strings registered via ap_custom_response(),
- * or NULL; check per-dir config if nothing found here
- */
- char **response_code_strings; /* from ap_custom_response(), not from
- * ErrorDocument
- */
-} core_request_config;
-
-/* Standard entries that are guaranteed to be accessible via
- * ap_get_request_note() for each request (additional entries
- * can be added with ap_register_request_note())
- */
-#define AP_NOTE_DIRECTORY_WALK 0
-#define AP_NOTE_LOCATION_WALK 1
-#define AP_NOTE_FILE_WALK 2
-#define AP_NUM_STD_NOTES 3
-
-/**
- * Reserve an element in the core_request_config->notes array
- * for some application-specific data
- * @return An integer key that can be passed to ap_get_request_note()
- * during request processing to access this element for the
- * current request.
- */
-AP_DECLARE(apr_size_t) ap_register_request_note(void);
-
-/**
- * Retrieve a pointer to an element in the core_request_config->notes array
- * @param r The request
- * @param note_num A key for the element: either a value obtained from
- * ap_register_request_note() or one of the predefined AP_NOTE_*
- * values.
- * @return NULL if the note_num is invalid, otherwise a pointer to the
- * requested note element.
- * @remark At the start of a request, each note element is NULL. The
- * handle provided by ap_get_request_note() is a pointer-to-pointer
- * so that the caller can point the element to some app-specific
- * data structure. The caller should guarantee that any such
- * structure will last as long as the request itself.
- */
-AP_DECLARE(void **) ap_get_request_note(request_rec *r, apr_size_t note_num);
-
-/* Per-directory configuration */
-
-typedef unsigned char allow_options_t;
-typedef unsigned char overrides_t;
-
-/*
- * Bits of info that go into making an ETag for a file
- * document. Why a long? Because char historically
- * proved too short for Options, and int can be different
- * sizes on different platforms.
- */
-typedef unsigned long etag_components_t;
-
-#define ETAG_UNSET 0
-#define ETAG_NONE (1 << 0)
-#define ETAG_MTIME (1 << 1)
-#define ETAG_INODE (1 << 2)
-#define ETAG_SIZE (1 << 3)
-#define ETAG_BACKWARD (ETAG_MTIME | ETAG_INODE | ETAG_SIZE)
-#define ETAG_ALL (ETAG_MTIME | ETAG_INODE | ETAG_SIZE)
-
-typedef enum {
- srv_sig_unset,
- srv_sig_off,
- srv_sig_on,
- srv_sig_withmail
-} server_signature_e;
-
-typedef struct {
- /* path of the directory/regex/etc. see also d_is_fnmatch/absolute below */
- char *d;
- /* the number of slashes in d */
- unsigned d_components;
-
- /* If (opts & OPT_UNSET) then no absolute assignment to options has
- * been made.
- * invariant: (opts_add & opts_remove) == 0
- * Which said another way means that the last relative (options + or -)
- * assignment made to each bit is recorded in exactly one of opts_add
- * or opts_remove.
- */
- allow_options_t opts;
- allow_options_t opts_add;
- allow_options_t opts_remove;
- overrides_t override;
- allow_options_t override_opts;
-
- /* MIME typing --- the core doesn't do anything at all with this,
- * but it does know what to slap on a request for a document which
- * goes untyped by other mechanisms before it slips out the door...
- */
-
- char *ap_default_type;
-
- /* Authentication stuff. Groan... */
-
- int *satisfy; /* for every method one */
- char *ap_auth_type;
- char *ap_auth_name;
- apr_array_header_t *ap_requires;
-
- /* Custom response config. These can contain text or a URL to redirect to.
- * if response_code_strings is NULL then there are none in the config,
- * if it's not null then it's allocated to sizeof(char*)*RESPONSE_CODES.
- * This lets us do quick merges in merge_core_dir_configs().
- */
-
- char **response_code_strings; /* from ErrorDocument, not from
- * ap_custom_response() */
-
- /* Hostname resolution etc */
-#define HOSTNAME_LOOKUP_OFF 0
-#define HOSTNAME_LOOKUP_ON 1
-#define HOSTNAME_LOOKUP_DOUBLE 2
-#define HOSTNAME_LOOKUP_UNSET 3
- unsigned int hostname_lookups : 4;
-
- signed int content_md5 : 2; /* calculate Content-MD5? */
-
-#define USE_CANONICAL_NAME_OFF (0)
-#define USE_CANONICAL_NAME_ON (1)
-#define USE_CANONICAL_NAME_DNS (2)
-#define USE_CANONICAL_NAME_UNSET (3)
- unsigned use_canonical_name : 2;
-
- /* since is_fnmatch(conf->d) was being called so frequently in
- * directory_walk() and its relatives, this field was created and
- * is set to the result of that call.
- */
- unsigned d_is_fnmatch : 1;
-
- /* should we force a charset on any outgoing parameterless content-type?
- * if so, which charset?
- */
-#define ADD_DEFAULT_CHARSET_OFF (0)
-#define ADD_DEFAULT_CHARSET_ON (1)
-#define ADD_DEFAULT_CHARSET_UNSET (2)
- unsigned add_default_charset : 2;
- const char *add_default_charset_name;
-
- /* System Resource Control */
-#ifdef RLIMIT_CPU
- struct rlimit *limit_cpu;
-#endif
-#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
- struct rlimit *limit_mem;
-#endif
-#ifdef RLIMIT_NPROC
- struct rlimit *limit_nproc;
-#endif
- apr_off_t limit_req_body; /* limit on bytes in request msg body */
- long limit_xml_body; /* limit on bytes in XML request msg body */
-
- /* logging options */
-
- server_signature_e server_signature;
-
- int loglevel;
-
- /* Access control */
- apr_array_header_t *sec_file;
- regex_t *r;
-
- const char *mime_type; /* forced with ForceType */
- const char *handler; /* forced with SetHandler */
- const char *output_filters; /* forced with SetOutputFilters */
- const char *input_filters; /* forced with SetInputFilters */
- int accept_path_info; /* forced with AcceptPathInfo */
-
- apr_hash_t *ct_output_filters; /* added with AddOutputFilterByType */
-
- /*
- * What attributes/data should be included in ETag generation?
- */
- etag_components_t etag_bits;
- etag_components_t etag_add;
- etag_components_t etag_remove;
-
- /*
- * Run-time performance tuning
- */
-#define ENABLE_MMAP_OFF (0)
-#define ENABLE_MMAP_ON (1)
-#define ENABLE_MMAP_UNSET (2)
- unsigned int enable_mmap : 2; /* whether files in this dir can be mmap'ed */
-
-#define ENABLE_SENDFILE_OFF (0)
-#define ENABLE_SENDFILE_ON (1)
-#define ENABLE_SENDFILE_UNSET (2)
- unsigned int enable_sendfile : 2; /* files in this dir can be mmap'ed */
- unsigned int allow_encoded_slashes : 1; /* URLs may contain %2f w/o being
- * pitched indiscriminately */
-} core_dir_config;
-
-/* Per-server core configuration */
-
-typedef struct {
-
-#ifdef GPROF
- char *gprof_dir;
-#endif
-
- /* Name translations --- we want the core to be able to do *something*
- * so it's at least a minimally functional web server on its own (and
- * can be tested that way). But let's keep it to the bare minimum:
- */
- const char *ap_document_root;
-
- /* Access control */
-
- char *access_name;
- apr_array_header_t *sec_dir;
- apr_array_header_t *sec_url;
-
- /* recursion backstopper */
- int redirect_limit; /* maximum number of internal redirects */
- int subreq_limit; /* maximum nesting level of subrequests */
-} core_server_config;
-
-/* for AddOutputFiltersByType in core.c */
-void ap_add_output_filters_by_type(request_rec *r);
-
-/* for http_config.c */
-void ap_core_reorder_directories(apr_pool_t *, server_rec *);
-
-/* for mod_perl */
-AP_CORE_DECLARE(void) ap_add_per_dir_conf(server_rec *s, void *dir_config);
-AP_CORE_DECLARE(void) ap_add_per_url_conf(server_rec *s, void *url_config);
-AP_CORE_DECLARE(void) ap_add_file_conf(core_dir_config *conf, void *url_config);
-AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd, void *dummy, const char *arg);
-
-#endif /* CORE_PRIVATE */
-
-
-/* ----------------------------------------------------------------------
- *
- * Runtime status/management
- */
-
-typedef enum {
- ap_mgmt_type_string,
- ap_mgmt_type_long,
- ap_mgmt_type_hash
-} ap_mgmt_type_e;
-
-typedef union {
- const char *s_value;
- long i_value;
- apr_hash_t *h_value;
-} ap_mgmt_value;
-
-typedef struct {
- const char *description;
- const char *name;
- ap_mgmt_type_e vtype;
- ap_mgmt_value v;
-} ap_mgmt_item_t;
-
-/* Handles for core filters */
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_subreq_core_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_core_output_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_content_length_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_net_time_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_core_input_filter_handle;
-
-/**
- * This hook provdes a way for modules to provide metrics/statistics about
- * their operational status.
- *
- * @param p A pool to use to create entries in the hash table
- * @param val The name of the parameter(s) that is wanted. This is
- * tree-structured would be in the form ('*' is all the tree,
- * 'module.*' all of the module , 'module.foo.*', or
- * 'module.foo.bar' )
- * @param ht The hash table to store the results. Keys are item names, and
- * the values point to ap_mgmt_item_t structures.
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int, get_mgmt_items,
- (apr_pool_t *p, const char * val, apr_hash_t *ht))
-
-/* ---------------------------------------------------------------------- */
-
-/* ----------------------------------------------------------------------
- *
- * I/O logging with mod_logio
- */
-
-APR_DECLARE_OPTIONAL_FN(void, ap_logio_add_bytes_out,
- (conn_rec *c, apr_off_t bytes));
-
-/* ----------------------------------------------------------------------
- *
- * ident lookups with mod_ident
- */
-
-APR_DECLARE_OPTIONAL_FN(const char *, ap_ident_lookup,
- (request_rec *r));
-
-/* ---------------------------------------------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_CORE_H */
diff --git a/include/http_log.h b/include/http_log.h
deleted file mode 100644
index 8f20928ead..0000000000
--- a/include/http_log.h
+++ /dev/null
@@ -1,284 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_LOG_H
-#define APACHE_HTTP_LOG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "apr_thread_proc.h"
-
-/**
- * @package Apache logging library
- */
-
-#ifdef HAVE_SYSLOG
-#include <syslog.h>
-
-#ifndef LOG_PRIMASK
-#define LOG_PRIMASK 7
-#endif
-
-#define APLOG_EMERG LOG_EMERG /* system is unusable */
-#define APLOG_ALERT LOG_ALERT /* action must be taken immediately */
-#define APLOG_CRIT LOG_CRIT /* critical conditions */
-#define APLOG_ERR LOG_ERR /* error conditions */
-#define APLOG_WARNING LOG_WARNING /* warning conditions */
-#define APLOG_NOTICE LOG_NOTICE /* normal but significant condition */
-#define APLOG_INFO LOG_INFO /* informational */
-#define APLOG_DEBUG LOG_DEBUG /* debug-level messages */
-
-#define APLOG_LEVELMASK LOG_PRIMASK /* mask off the level value */
-
-#else
-
-#define APLOG_EMERG 0 /* system is unusable */
-#define APLOG_ALERT 1 /* action must be taken immediately */
-#define APLOG_CRIT 2 /* critical conditions */
-#define APLOG_ERR 3 /* error conditions */
-#define APLOG_WARNING 4 /* warning conditions */
-#define APLOG_NOTICE 5 /* normal but significant condition */
-#define APLOG_INFO 6 /* informational */
-#define APLOG_DEBUG 7 /* debug-level messages */
-
-#define APLOG_LEVELMASK 7 /* mask off the level value */
-
-#endif
-
-/* APLOG_NOERRNO is ignored and should not be used. It will be
- * removed in a future release of Apache.
- */
-#define APLOG_NOERRNO (APLOG_LEVELMASK + 1)
-
-/* Use APLOG_TOCLIENT on ap_log_rerror() to give content
- * handlers the option of including the error text in the
- * ErrorDocument sent back to the client. Setting APLOG_TOCLIENT
- * will cause the error text to be saved in the request_rec->notes
- * table, keyed to the string "error-notes", if and only if:
- * - the severity level of the message is APLOG_WARNING or greater
- * - there are no other "error-notes" set in request_rec->notes
- * Once error-notes is set, it is up to the content handler to
- * determine whether this text should be sent back to the client.
- * Note: Client generated text streams sent back to the client MUST
- * be escaped to prevent CSS attacks.
- */
-#define APLOG_TOCLIENT ((APLOG_LEVELMASK + 1) * 2)
-
-/* normal but significant condition on startup, usually printed to stderr */
-#define APLOG_STARTUP ((APLOG_LEVELMASK + 1) * 4)
-
-#ifndef DEFAULT_LOGLEVEL
-#define DEFAULT_LOGLEVEL APLOG_WARNING
-#endif
-
-extern int AP_DECLARE_DATA ap_default_loglevel;
-
-#define APLOG_MARK __FILE__,__LINE__
-
-/**
- * Set up for logging to stderr.
- * @param p The pool to allocate out of
- */
-AP_DECLARE(void) ap_open_stderr_log(apr_pool_t *p);
-
-/**
- * Replace logging to stderr with logging to the given file.
- * @param p The pool to allocate out of
- * @param file Name of the file to log stderr output
- */
-AP_DECLARE(apr_status_t) ap_replace_stderr_log(apr_pool_t *p,
- const char *file);
-
-/**
- * Open the error log and replace stderr with it.
- * @param pconf Not used
- * @param plog The pool to allocate the logs from
- * @param ptemp Pool used for temporary allocations
- * @param s_main The main server
- * @tip ap_open_logs isn't expected to be used by modules, it is
- * an internal core function
- */
-int ap_open_logs(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s_main);
-
-/*
- * The three primary logging functions, ap_log_error, ap_log_rerror, and
- * ap_log_perror use a printf style format string to build the log message.
- * It is VERY IMPORTANT that you not include any raw data from the network,
- * such as the request-URI or request header fields, within the format
- * string. Doing so makes the server vulnerable to a denial-of-service
- * attack and other messy behavior. Instead, use a simple format string
- * like "%s", followed by the string containing the untrusted data.
- */
-
-/**
- * One of the primary logging routines in Apache. This uses a printf-like
- * format to log messages to the error_log.
- * @param file The file in which this function is called
- * @param line The line number on which this function is called
- * @param level The level of this error message
- * @param status The status code from the previous command
- * @param s The server on which we are logging
- * @param fmt The format string
- * @param ... The arguments to use to fill out fmt.
- * @tip Use APLOG_MARK to fill out file and line
- * @warning It is VERY IMPORTANT that you not include any raw data from
- * the network, such as the request-URI or request header fields, within
- * the format string. Doing so makes the server vulnerable to a
- * denial-of-service attack and other messy behavior. Instead, use a
- * simple format string like "%s", followed by the string containing the
- * untrusted data.
- * @deffunc void ap_log_error(const char *file, int line, int level, apr_status_t status, const server_rec *s, const char *fmt, ...)
- */
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
- apr_status_t status, const server_rec *s,
- const char *fmt, ...)
- __attribute__((format(printf,6,7)));
-
-/**
- * The second of the primary logging routines in Apache. This uses
- * a printf-like format to log messages to the error_log.
- * @param file The file in which this function is called
- * @param line The line number on which this function is called
- * @param level The level of this error message
- * @param status The status code from the previous command
- * @param p The pool which we are logging for
- * @param fmt The format string
- * @param ... The arguments to use to fill out fmt.
- * @tip Use APLOG_MARK to fill out file and line
- * @warning It is VERY IMPORTANT that you not include any raw data from
- * the network, such as the request-URI or request header fields, within
- * the format string. Doing so makes the server vulnerable to a
- * denial-of-service attack and other messy behavior. Instead, use a
- * simple format string like "%s", followed by the string containing the
- * untrusted data.
- * @deffunc void ap_log_perror(const char *file, int line, int level, apr_status_t status, apr_pool_t *p, const char *fmt, ...)
- */
-AP_DECLARE(void) ap_log_perror(const char *file, int line, int level,
- apr_status_t status, apr_pool_t *p,
- const char *fmt, ...)
- __attribute__((format(printf,6,7)));
-
-/**
- * The last of the primary logging routines in Apache. This uses
- * a printf-like format to log messages to the error_log.
- * @param file The file in which this function is called
- * @param line The line number on which this function is called
- * @param level The level of this error message
- * @param status The status code from the previous command
- * @param s The request which we are logging for
- * @param fmt The format string
- * @param ... The arguments to use to fill out fmt.
- * @tip Use APLOG_MARK to fill out file and line
- * @warning It is VERY IMPORTANT that you not include any raw data from
- * the network, such as the request-URI or request header fields, within
- * the format string. Doing so makes the server vulnerable to a
- * denial-of-service attack and other messy behavior. Instead, use a
- * simple format string like "%s", followed by the string containing the
- * untrusted data.
- * @deffunc void ap_log_rerror(const char *file, int line, int level, apr_status_t status, request_rec *r, const char *fmt, ...)
- */
-AP_DECLARE(void) ap_log_rerror(const char *file, int line, int level,
- apr_status_t status, const request_rec *r,
- const char *fmt, ...)
- __attribute__((format(printf,6,7)));
-
-/**
- * Convert stderr to the error log
- * @param s The current server
- * @deffunc void ap_error_log2stderr(server_rec *s)
- */
-AP_DECLARE(void) ap_error_log2stderr(server_rec *s);
-
-/**
- * Log the current pid of the parent process
- * @param p The pool to use for logging
- * @param fname The name of the file to log to
- */
-AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *fname);
-
-/**
- * Retrieve the pid from a pidfile.
- * @param p The pool to use for logging
- * @param filename The name of the file containing the pid
- * @param mypid Pointer to pid_t (valid only if return APR_SUCCESS)
- */
-AP_DECLARE(apr_status_t) ap_read_pid(apr_pool_t *p, const char *filename, pid_t *mypid);
-
-typedef struct piped_log piped_log;
-
-/**
- * The piped logging structure. Piped logs are used to move functionality
- * out of the main server. For example, log rotation is done with piped logs.
- */
-struct piped_log {
- /** The pool to use for the piped log */
- apr_pool_t *p;
- /** The pipe between the server and the logging process */
- apr_file_t *fds[2];
- /* XXX - an #ifdef that needs to be eliminated from public view. Shouldn't
- * be hard */
-#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
- /** The name of the program the logging process is running */
- char *program;
- /** The pid of the logging process */
- apr_proc_t *pid;
-#endif
-};
-
-/**
- * Open the piped log process
- * @param p The pool to allocate out of
- * @param program The program to run in the logging process
- * @return The piped log structure
- * @deffunc piped_log *ap_open_piped_log(apr_pool_t *p, const char *program)
- */
-AP_DECLARE(piped_log *) ap_open_piped_log(apr_pool_t *p, const char *program);
-
-/**
- * Close the piped log and kill the logging process
- * @param pl The piped log structure
- * @deffunc void ap_close_piped_log(piped_log *pl)
- */
-AP_DECLARE(void) ap_close_piped_log(piped_log *pl);
-
-/**
- * A macro to access the read side of the piped log pipe
- * @param pl The piped log structure
- * @return The native file descriptor
- * @deffunc ap_piped_log_read_fd(pl)
- */
-#define ap_piped_log_read_fd(pl) ((pl)->fds[0])
-
-/**
- * A macro to access the write side of the piped log pipe
- * @param pl The piped log structure
- * @return The native file descriptor
- * @deffunc ap_piped_log_read_fd(pl)
- */
-#define ap_piped_log_write_fd(pl) ((pl)->fds[1])
-
-AP_DECLARE_HOOK(void, error_log, (const char *file, int line, int level,
- apr_status_t status, const server_rec *s,
- const request_rec *r, apr_pool_t *pool,
- const char *errstr))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_LOG_H */
diff --git a/include/http_main.h b/include/http_main.h
deleted file mode 100644
index cfe3f81d27..0000000000
--- a/include/http_main.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_MAIN_H
-#define APACHE_HTTP_MAIN_H
-
-#include "apr_optional.h"
-
-/* AP_SERVER_BASEARGS is the command argument list parsed by http_main.c
- * in apr_getopt() format. Use this for default'ing args that the MPM
- * can safely ignore and pass on from its rewrite_args() handler.
- */
-#define AP_SERVER_BASEARGS "C:c:D:d:E:e:f:vVlLtSMh?X"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Command line options
- */
-
-/** The name of the Apache executable */
-AP_DECLARE_DATA extern const char *ap_server_argv0;
-/** The global server's ServerRoot */
-AP_DECLARE_DATA extern const char *ap_server_root;
-
-/* for -C, -c and -D switches */
-/** An array of all -C directives. These are processed before the server's
- * config file */
-AP_DECLARE_DATA extern apr_array_header_t *ap_server_pre_read_config;
-/** An array of all -c directives. These are processed after the server's
- * config file */
-AP_DECLARE_DATA extern apr_array_header_t *ap_server_post_read_config;
-/** An array of all -D defines on the command line. This allows people to
- * effect the server based on command line options */
-AP_DECLARE_DATA extern apr_array_header_t *ap_server_config_defines;
-
-APR_DECLARE_OPTIONAL_FN(int, ap_signal_server, (int *, apr_pool_t *));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_MAIN_H */
diff --git a/include/http_protocol.h b/include/http_protocol.h
deleted file mode 100644
index cb2d23886d..0000000000
--- a/include/http_protocol.h
+++ /dev/null
@@ -1,696 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_PROTOCOL_H
-#define APACHE_HTTP_PROTOCOL_H
-
-#include "httpd.h"
-#include "apr_hooks.h"
-#include "apr_portable.h"
-#include "apr_mmap.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package HTTP protocol handling
- */
-
-/**
- * This hook allows modules to insert filters for the current error response
- * @param r the current request
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(void,insert_error_filter,(request_rec *r))
-
-/* This is an optimization. We keep a record of the filter_rec that
- * stores the old_write filter, so that we can avoid strcmp's later.
- */
-AP_DECLARE_DATA extern ap_filter_rec_t *ap_old_write_func;
-
-/*
- * Prototypes for routines which either talk directly back to the user,
- * or control the ones that eventually do.
- */
-
-/**
- * Read a request and fill in the fields.
- * @param c The current connection
- * @return The new request_rec
- */
-request_rec *ap_read_request(conn_rec *c);
-
-/**
- * Read the mime-encoded headers.
- * @param r The current request
- */
-AP_DECLARE(void) ap_get_mime_headers(request_rec *r);
-
-/**
- * Optimized version of ap_get_mime_headers() that requires a
- * temporary brigade to work with
- * @param r The current request
- * @param bb temp brigade
- */
-AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r,
- apr_bucket_brigade *bb);
-
-/* Finish up stuff after a request */
-
-/**
- * Called at completion of sending the response. It sends the terminating
- * protocol information.
- * @param r The current request
- * @deffunc void ap_finalize_request_protocol(request_rec *r)
- */
-AP_DECLARE(void) ap_finalize_request_protocol(request_rec *r);
-
-/**
- * Send error back to client.
- * @param r The current request
- * @param recursive_error last arg indicates error status in case we get
- * an error in the process of trying to deal with an ErrorDocument
- * to handle some other error. In that case, we print the default
- * report for the first thing that went wrong, and more briefly report
- * on the problem with the ErrorDocument.
- * @deffunc void ap_send_error_response(request_rec *r, int recursive_error)
- */
-AP_DECLARE(void) ap_send_error_response(request_rec *r, int recursive_error);
-
-/* Set last modified header line from the lastmod date of the associated file.
- * Also, set content length.
- *
- * May return an error status, typically HTTP_NOT_MODIFIED (that when the
- * permit_cache argument is set to one).
- */
-
-/**
- * Set the content length for this request
- * @param r The current request
- * @param length The new content length
- * @deffunc void ap_set_content_length(request_rec *r, apr_off_t length)
- */
-AP_DECLARE(void) ap_set_content_length(request_rec *r, apr_off_t length);
-
-/**
- * Set the keepalive status for this request
- * @param r The current request
- * @return 1 if keepalive can be set, 0 otherwise
- * @deffunc int ap_set_keepalive(request_rec *r)
- */
-AP_DECLARE(int) ap_set_keepalive(request_rec *r);
-
-/**
- * Return the latest rational time from a request/mtime pair. Mtime is
- * returned unless it's in the future, in which case we return the current time.
- * @param r The current request
- * @param mtime The last modified time
- * @return the latest rational time.
- * @deffunc apr_time_t ap_rationalize_mtime(request_rec *r, apr_time_t mtime)
- */
-AP_DECLARE(apr_time_t) ap_rationalize_mtime(request_rec *r, apr_time_t mtime);
-
-/**
- * Build the content-type that should be sent to the client from the
- * content-type specified. The following rules are followed:
- * - if type is NULL, type is set to ap_default_type(r)
- * - if charset adding is disabled, stop processing and return type.
- * - then, if there are no parameters on type, add the default charset
- * - return type
- * @param r The current request
- * @return The content-type
- * @deffunc const char *ap_make_content_type(request_rec *r, const char *type);
- */
-AP_DECLARE(const char *) ap_make_content_type(request_rec *r,
- const char *type);
-
-#ifdef CORE_PRIVATE
-/**
- * Precompile metadata structures used by ap_make_content_type()
- * @param r The pool to use for allocations
- * @deffunc void ap_setup_make_content_type(apr_pool_t *pool)
- */
-AP_DECLARE(void) ap_setup_make_content_type(apr_pool_t *pool);
-#endif /* CORE_PRIVATE */
-
-/**
- * Construct an entity tag from the resource information. If it's a real
- * file, build in some of the file characteristics.
- * @param r The current request
- * @param force_weak Force the entity tag to be weak - it could be modified
- * again in as short an interval.
- * @return The entity tag
- * @deffunc char *ap_make_etag(request_rec *r, int force_weak)
- */
-AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak);
-
-/**
- * Set the E-tag outgoing header
- * @param The current request
- * @deffunc void ap_set_etag(request_rec *r)
- */
-AP_DECLARE(void) ap_set_etag(request_rec *r);
-
-/**
- * Set the last modified time for the file being sent
- * @param r The current request
- * @deffunc void ap_set_last_modified(request_rec *r)
- */
-AP_DECLARE(void) ap_set_last_modified(request_rec *r);
-
-/**
- * Implements condition GET rules for HTTP/1.1 specification. This function
- * inspects the client headers and determines if the response fulfills
- * the requirements specified.
- * @param r The current request
- * @return OK if the response fulfills the condition GET rules, some
- * other status code otherwise
- * @deffunc int ap_meets_conditions(request_rec *r)
- */
-AP_DECLARE(int) ap_meets_conditions(request_rec *r);
-
-/* Other ways to send stuff at the client. All of these keep track
- * of bytes_sent automatically. This indirection is intended to make
- * it a little more painless to slide things like HTTP-NG packetization
- * underneath the main body of the code later. In the meantime, it lets
- * us centralize a bit of accounting (bytes_sent).
- *
- * These also return the number of bytes written by the call.
- * They should only be called with a timeout registered, for obvious reaasons.
- * (Ditto the send_header stuff).
- */
-
-/**
- * Send an entire file to the client, using sendfile if supported by the
- * current platform
- * @param fd The file to send.
- * @param r The current request
- * @param offset Offset into the file to start sending.
- * @param length Amount of data to send
- * @param nbytes Amount of data actually sent
- * @deffunc apr_status_t ap_send_fd(apr_file_t *fd, request_rec *r, apr_off_t offset, apr_size_t length, apr_size_t *nbytes);
- */
-AP_DECLARE(apr_status_t) ap_send_fd(apr_file_t *fd, request_rec *r, apr_off_t offset,
- apr_size_t length, apr_size_t *nbytes);
-
-#if APR_HAS_MMAP
-/**
- * Send an MMAP'ed file to the client
- * @param mm The MMAP'ed file to send
- * @param r The current request
- * @param offset The offset into the MMAP to start sending
- * @param length The amount of data to send
- * @return The number of bytes sent
- * @deffunc size_t ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset, size_t length)
- */
-AP_DECLARE(size_t) ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset,
- size_t length);
-#endif
-
-
-/**
- * Register a new request method, and return the offset that will be
- * associated with that method.
- *
- * @param p The pool to create registered method numbers from.
- * @param methname The name of the new method to register.
- * @return Ab int value representing an offset into a bitmask.
- */
-AP_DECLARE(int) ap_method_register(apr_pool_t *p, const char *methname);
-
-/**
- * Initialize the method_registry and allocate memory for it.
- *
- * @param p Pool to allocate memory for the registry from.
- */
-AP_DECLARE(void) ap_method_registry_init(apr_pool_t *p);
-
-/*
- * This is a convenience macro to ease with checking a mask
- * against a method name.
- */
-#define AP_METHOD_CHECK_ALLOWED(mask, methname) \
- ((mask) & (AP_METHOD_BIT << ap_method_number_of((methname))))
-
-/**
- * Create a new method list with the specified number of preallocated
- * slots for extension methods.
- *
- * @param p Pointer to a pool in which the structure should be
- * allocated.
- * @param nelts Number of preallocated extension slots
- * @return Pointer to the newly created structure.
- * @deffunc ap_method_list_t ap_make_method_list(apr_pool_t *p, int nelts)
- */
-AP_DECLARE(ap_method_list_t *) ap_make_method_list(apr_pool_t *p, int nelts);
-AP_DECLARE(void) ap_copy_method_list(ap_method_list_t *dest,
- ap_method_list_t *src);
-AP_DECLARE_NONSTD(void) ap_method_list_do(int (*comp) (void *urec, const char *mname,
- int mnum),
- void *rec,
- const ap_method_list_t *ml, ...);
-AP_DECLARE(void) ap_method_list_vdo(int (*comp) (void *urec, const char *mname,
- int mnum),
- void *rec, const ap_method_list_t *ml,
- va_list vp);
-/**
- * Search for an HTTP method name in an ap_method_list_t structure, and
- * return true if found.
- *
- * @param method String containing the name of the method to check.
- * @param l Pointer to a method list, such as cmd->methods_limited.
- * @return 1 if method is in the list, otherwise 0
- * @deffunc int ap_method_in_list(const char *method, ap_method_list_t *l)
- */
-AP_DECLARE(int) ap_method_in_list(ap_method_list_t *l, const char *method);
-
-/**
- * Add an HTTP method name to an ap_method_list_t structure if it isn't
- * already listed.
- *
- * @param method String containing the name of the method to check.
- * @param l Pointer to a method list, such as cmd->methods_limited.
- * @return None.
- * @deffunc void ap_method_in_list(ap_method_list_t *l, const char *method)
- */
-AP_DECLARE(void) ap_method_list_add(ap_method_list_t *l, const char *method);
-
-/**
- * Remove an HTTP method name from an ap_method_list_t structure.
- *
- * @param l Pointer to a method list, such as cmd->methods_limited.
- * @param method String containing the name of the method to remove.
- * @return None.
- * @deffunc void ap_method_list_remove(ap_method_list_t *l, const char *method)
- */
-AP_DECLARE(void) ap_method_list_remove(ap_method_list_t *l,
- const char *method);
-
-/**
- * Reset a method list to be completely empty.
- *
- * @param l Pointer to a method list, such as cmd->methods_limited.
- * @return None.
- * @deffunc void ap_clear_method_list(ap_method_list_t *l)
- */
-AP_DECLARE(void) ap_clear_method_list(ap_method_list_t *l);
-
-/**
- * Set the content type for this request (r->content_type).
- * @param r The current request
- * @param ct The new content type
- * @deffunc void ap_set_content_type(request_rec *r, const char* ct)
- * @warning This function must be called to set r->content_type in order
- * for the AddOutputFilterByType directive to work correctly.
- */
-AP_DECLARE(void) ap_set_content_type(request_rec *r, const char *ct);
-
-/* Hmmm... could macrofy these for now, and maybe forever, though the
- * definitions of the macros would get a whole lot hairier.
- */
-
-/**
- * Output one character for this request
- * @param c the character to output
- * @param r the current request
- * @return The number of bytes sent
- * @deffunc int ap_rputc(int c, request_rec *r)
- */
-AP_DECLARE(int) ap_rputc(int c, request_rec *r);
-
-/**
- * Output a string for the current request
- * @param str The string to output
- * @param r The current request
- * @return The number of bytes sent
- * @deffunc int ap_rputs(const char *str, request_rec *r)
- */
-AP_DECLARE(int) ap_rputs(const char *str, request_rec *r);
-
-/**
- * Write a buffer for the current request
- * @param buf The buffer to write
- * @param nbyte The number of bytes to send from the buffer
- * @param r The current request
- * @return The number of bytes sent
- * @deffunc int ap_rwrite(const void *buf, int nbyte, request_rec *r)
- */
-AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r);
-
-/**
- * Write an unspecified number of strings to the request
- * @param r The current request
- * @param ... The strings to write
- * @return The number of bytes sent
- * @deffunc int ap_rvputs(request_rec *r, ...)
- */
-AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r,...);
-
-/**
- * Output data to the client in a printf format
- * @param r The current request
- * @param fmt The format string
- * @param vlist The arguments to use to fill out the format string
- * @return The number of bytes sent
- * @deffunc int ap_vrprintf(request_rec *r, const char *fmt, va_list vlist)
- */
-AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list vlist);
-
-/**
- * Output data to the client in a printf format
- * @param r The current request
- * @param fmt The format string
- * @param ... The arguments to use to fill out the format string
- * @return The number of bytes sent
- * @deffunc int ap_rprintf(request_rec *r, const char *fmt, ...)
- */
-AP_DECLARE_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt,...)
- __attribute__((format(printf,2,3)));
-/**
- * Flush all of the data for the current request to the client
- * @param r The current request
- * @return The number of bytes sent
- * @deffunc int ap_rflush(request_rec *r)
- */
-AP_DECLARE(int) ap_rflush(request_rec *r);
-
-/**
- * Index used in custom_responses array for a specific error code
- * (only use outside protocol.c is in getting them configured).
- * @param status HTTP status code
- * @return The index of the response
- * @deffunc int ap_index_of_response(int status)
- */
-AP_DECLARE(int) ap_index_of_response(int status);
-
-/**
- * Return the Status-Line for a given status code (excluding the
- * HTTP-Version field). If an invalid or unknown status code is
- * passed, "500 Internal Server Error" will be returned.
- * @param status The HTTP status code
- * @return The Status-Line
- * @deffunc const char *ap_get_status_line(int status)
- */
-AP_DECLARE(const char *) ap_get_status_line(int status);
-
-/* Reading a block of data from the client connection (e.g., POST arg) */
-
-/**
- * Setup the client to allow Apache to read the request body.
- * @param r The current request
- * @param read_policy How the server should interpret a chunked
- * transfer-encoding. One of: <pre>
- * REQUEST_NO_BODY Send 413 error if message has any body
- * REQUEST_CHUNKED_ERROR Send 411 error if body without Content-Length
- * REQUEST_CHUNKED_DECHUNK If chunked, remove the chunks for me.
- * </pre>
- * @return either OK or an error code
- * @deffunc int ap_setup_client_block(request_rec *r, int read_policy)
- */
-AP_DECLARE(int) ap_setup_client_block(request_rec *r, int read_policy);
-
-/**
- * Determine if the client has sent any data. This also sends a
- * 100 Continue response to HTTP/1.1 clients, so modules should not be called
- * until the module is ready to read content.
- * @warning Never call this function more than once.
- * @param r The current request
- * @return 0 if there is no message to read, 1 otherwise
- * @deffunc int ap_should_client_block(request_rec *r)
- */
-AP_DECLARE(int) ap_should_client_block(request_rec *r);
-
-/**
- * Call this in a loop. It will put data into a buffer and return the length
- * of the input block
- * @param r The current request
- * @param buffer The buffer in which to store the data
- * @param bufsiz The size of the buffer
- * @return Number of bytes inserted into the buffer. When done reading, 0
- * if EOF, or -1 if there was an error
- * @deffunc long ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz)
- */
-AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz);
-
-/**
- * In HTTP/1.1, any method can have a body. However, most GET handlers
- * wouldn't know what to do with a request body if they received one.
- * This helper routine tests for and reads any message body in the request,
- * simply discarding whatever it receives. We need to do this because
- * failing to read the request body would cause it to be interpreted
- * as the next request on a persistent connection.
- * @param r The current request
- * @return error status if request is malformed, OK otherwise
- * @deffunc int ap_discard_request_body(request_rec *r)
- */
-AP_DECLARE(int) ap_discard_request_body(request_rec *r);
-
-
-/**
- * Setup the output headers so that the client knows how to authenticate
- * itself the next time, if an authentication request failed. This function
- * works for both basic and digest authentication
- * @param r The current request
- * @deffunc void ap_note_auth_failure(request_rec *r)
- */
-AP_DECLARE(void) ap_note_auth_failure(request_rec *r);
-
-/**
- * Setup the output headers so that the client knows how to authenticate
- * itself the next time, if an authentication request failed. This function
- * works only for basic authentication
- * @param r The current request
- * @deffunc void ap_note_basic_auth_failure(request_rec *r)
- */
-AP_DECLARE(void) ap_note_basic_auth_failure(request_rec *r);
-
-/**
- * Setup the output headers so that the client knows how to authenticate
- * itself the next time, if an authentication request failed. This function
- * works only for digest authentication
- * @param r The current request
- * @deffunc void ap_note_digest_auth_failure(request_rec *r)
- */
-AP_DECLARE(void) ap_note_digest_auth_failure(request_rec *r);
-
-/**
- * Get the password from the request headers
- * @param r The current request
- * @param pw The password as set in the headers
- * @return 0 (OK) if it set the 'pw' argument (and assured
- * a correct value in r->user); otherwise it returns
- * an error code, either HTTP_INTERNAL_SERVER_ERROR if things are
- * really confused, HTTP_UNAUTHORIZED if no authentication at all
- * seemed to be in use, or DECLINED if there was authentication but
- * it wasn't Basic (in which case, the caller should presumably
- * decline as well).
- * @deffunc int ap_get_basic_auth_pw(request_rec *r, const char **pw)
- */
-AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw);
-
-/**
- * parse_uri: break apart the uri
- * @warning Side Effects: <pre>
- * - sets r->args to rest after '?' (or NULL if no '?')
- * - sets r->uri to request uri (without r->args part)
- * - sets r->hostname (if not set already) from request (scheme://host:port)
- * </pre>
- * @param r The current request
- * @param uri The uri to break apart
- * @deffunc void ap_parse_uri(request_rec *r, const char *uri)
- */
-AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri);
-
-/**
- * Get the next line of input for the request
- * @param s The buffer into which to read the line
- * @param n The size of the buffer
- * @param r The request
- * @param fold Whether to merge continuation lines
- * @return The length of the line, if successful
- * n, if the line is too big to fit in the buffer
- * -1 for miscellaneous errors
- * @deffunc int ap_method_number_of(const char *method)
- */
-AP_DECLARE(int) ap_getline(char *s, int n, request_rec *r, int fold);
-
-/**
- * Get the next line of input for the request
- *
- * Note: on ASCII boxes, ap_rgetline is a macro which simply calls
- * ap_rgetline_core to get the line of input.
- *
- * on EBCDIC boxes, ap_rgetline is a wrapper function which
- * translates ASCII protocol lines to the local EBCDIC code page
- * after getting the line of input.
- *
- * @param s Pointer to the pointer to the buffer into which the line
- * should be read; if *s==NULL, a buffer of the necessary size
- * to hold the data will be allocated from the request pool
- * @param n The size of the buffer
- * @param read The length of the line.
- * @param r The request
- * @param fold Whether to merge continuation lines
- * @param bb Working brigade to use when reading buckets
- * @return APR_SUCCESS, if successful
- * APR_ENOSPC, if the line is too big to fit in the buffer
- * Other errors where appropriate
- */
-#if APR_CHARSET_EBCDIC
-AP_DECLARE(apr_status_t) ap_rgetline(char **s, apr_size_t n,
- apr_size_t *read,
- request_rec *r, int fold,
- apr_bucket_brigade *bb);
-#else /* ASCII box */
-#define ap_rgetline(s, n, read, r, fold, bb) \
- ap_rgetline_core((s), (n), (read), (r), (fold), (bb))
-#endif
-AP_DECLARE(apr_status_t) ap_rgetline_core(char **s, apr_size_t n,
- apr_size_t *read,
- request_rec *r, int fold,
- apr_bucket_brigade *bb);
-
-/**
- * Get the method number associated with the given string, assumed to
- * contain an HTTP method. Returns M_INVALID if not recognized.
- * @param method A string containing a valid HTTP method
- * @return The method number
- */
-AP_DECLARE(int) ap_method_number_of(const char *method);
-
-/**
- * Get the method name associated with the given internal method
- * number. Returns NULL if not recognized.
- * @param p A pool to use for temporary allocations.
- * @param methnum An integer value corresponding to an internal method number
- * @return The name corresponding to the method number
- */
-AP_DECLARE(const char *) ap_method_name_of(apr_pool_t *p, int methnum);
-
-
- /* Hooks */
- /*
- * post_read_request --- run right after read_request or internal_redirect,
- * and not run during any subrequests.
- */
-/**
- * This hook allows modules to affect the request immediately after the request
- * has been read, and before any other phases have been processes. This allows
- * modules to make decisions based upon the input header fields
- * @param r The current request
- * @return OK or DECLINED
- * @deffunc ap_run_post_read_request(request_rec *r)
- */
-AP_DECLARE_HOOK(int,post_read_request,(request_rec *r))
-
-/**
- * This hook allows modules to perform any module-specific logging activities
- * over and above the normal server things.
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @deffunc int ap_run_log_transaction(request_rec *r)
- */
-AP_DECLARE_HOOK(int,log_transaction,(request_rec *r))
-
-/**
- * This hook allows modules to retrieve the http method from a request. This
- * allows Apache modules to easily extend the methods that Apache understands
- * @param r The current request
- * @return The http method from the request
- * @deffunc const char *ap_run_http_method(const request_rec *r)
- */
-AP_DECLARE_HOOK(const char *,http_method,(const request_rec *r))
-
-/**
- * Return the default port from the current request
- * @param r The current request
- * @return The current port
- * @deffunc apr_port_t ap_run_default_port(const request_rec *r)
- */
-AP_DECLARE_HOOK(apr_port_t,default_port,(const request_rec *r))
-
-typedef struct ap_bucket_error ap_bucket_error;
-
-/**
- * A bucket referring to an HTTP error
- * This bucket can be passed down the filter stack to indicate that an
- * HTTP error occurred while running a filter. In order for this bucket
- * to be used successfully, it MUST be sent as the first bucket in the
- * first brigade to be sent from a given filter.
- */
-struct ap_bucket_error {
- /** Number of buckets using this memory */
- apr_bucket_refcount refcount;
- /** The error code */
- int status;
- /** The error string */
- const char *data;
-};
-
-AP_DECLARE_DATA extern const apr_bucket_type_t ap_bucket_type_error;
-
-/**
- * Determine if a bucket is an error bucket
- * @param e The bucket to inspect
- * @return true or false
- */
-#define AP_BUCKET_IS_ERROR(e) (e->type == &ap_bucket_type_error)
-
-/**
- * Make the bucket passed in an error bucket
- * @param b The bucket to make into an error bucket
- * @param error The HTTP error code to put in the bucket.
- * @param buf An optional error string to put in the bucket.
- * @param p A pool to allocate out of.
- * @return The new bucket, or NULL if allocation failed
- * @deffunc apr_bucket *ap_bucket_error_make(apr_bucket *b, int error, const char *buf, apr_pool_t *p)
- */
-AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
- const char *buf, apr_pool_t *p);
-
-/**
- * Create a bucket referring to an HTTP error.
- * @param error The HTTP error code to put in the bucket.
- * @param buf An optional error string to put in the bucket.
- * @param p A pool to allocate the error string out of.
- * @param list The bucket allocator from which to allocate the bucket
- * @return The new bucket, or NULL if allocation failed
- * @deffunc apr_bucket *ap_bucket_error_create(int error, const char *buf, apr_pool_t *p, apr_bucket_alloc_t *list)
- */
-AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error, const char *buf,
- apr_pool_t *p,
- apr_bucket_alloc_t *list);
-
-AP_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f, apr_bucket_brigade *b);
-AP_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, apr_bucket_brigade *b);
-AP_DECLARE_NONSTD(apr_status_t) ap_content_length_filter(ap_filter_t *,
- apr_bucket_brigade *);
-AP_DECLARE_NONSTD(apr_status_t) ap_old_write_filter(ap_filter_t *f, apr_bucket_brigade *b);
-
-/*
- * Setting up the protocol fields for subsidiary requests...
- * Also, a wrapup function to keep the internal accounting straight.
- */
-AP_DECLARE(void) ap_set_sub_req_protocol(request_rec *rnew, const request_rec *r);
-AP_DECLARE(void) ap_finalize_sub_req_protocol(request_rec *sub_r);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_PROTOCOL_H */
diff --git a/include/http_request.h b/include/http_request.h
deleted file mode 100644
index 4ae74e398b..0000000000
--- a/include/http_request.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_REQUEST_H
-#define APACHE_HTTP_REQUEST_H
-
-#include "apr_hooks.h"
-#include "util_filter.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define AP_SUBREQ_NO_ARGS 0
-#define AP_SUBREQ_MERGE_ARGS 1
-
-/**
- * @file http_request.h
- * @brief Apache Request library
- */
-
-/* http_request.c is the code which handles the main line of request
- * processing, once a request has been read in (finding the right per-
- * directory configuration, building it if necessary, and calling all
- * the module dispatch functions in the right order).
- *
- * The pieces here which are public to the modules, allow them to learn
- * how the server would handle some other file or URI, or perhaps even
- * direct the server to serve that other file instead of the one the
- * client requested directly.
- *
- * There are two ways to do that. The first is the sub_request mechanism,
- * which handles looking up files and URIs as adjuncts to some other
- * request (e.g., directory entries for multiviews and directory listings);
- * the lookup functions stop short of actually running the request, but
- * (e.g., for includes), a module may call for the request to be run
- * by calling run_sub_req. The space allocated to create sub_reqs can be
- * reclaimed by calling destroy_sub_req --- be sure to copy anything you care
- * about which was allocated in its apr_pool_t elsewhere before doing this.
- */
-
-/**
- * An internal handler used by the ap_process_request, all sub request mechanisms
- * and the redirect mechanism.
- * @param r The request, subrequest or internal redirect to pre-process
- * @return The return code for the request
- */
-AP_DECLARE(int) ap_process_request_internal(request_rec *r);
-
-/**
- * Create a sub request from the given URI. This sub request can be
- * inspected to find information about the requested URI
- * @param new_file The URI to lookup
- * @param r The current request
- * @param next_filter The first filter the sub_request should use. If this is
- * NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_lookup_uri(const char *new_file, const request_rec *r)
- */
-AP_DECLARE(request_rec *) ap_sub_req_lookup_uri(const char *new_file,
- const request_rec *r,
- ap_filter_t *next_filter);
-
-/**
- * Create a sub request for the given file. This sub request can be
- * inspected to find information about the requested file
- * @param new_file The URI to lookup
- * @param r The current request
- * @param next_filter The first filter the sub_request should use. If this is
- * NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_lookup_file(const char *new_file, const request_rec *r)
- */
-AP_DECLARE(request_rec *) ap_sub_req_lookup_file(const char *new_file,
- const request_rec *r,
- ap_filter_t *next_filter);
-/**
- * Create a sub request for the given apr_dir_read result. This sub request
- * can be inspected to find information about the requested file
- * @param finfo The apr_dir_read result to lookup
- * @param r The current request
- * @param subtype What type of subrequest to perform, one of;
- * <PRE>
- * AP_SUBREQ_NO_ARGS ignore r->args and r->path_info
- * AP_SUBREQ_MERGE_ARGS merge r->args and r->path_info
- * </PRE>
- * @param next_filter The first filter the sub_request should use. If this is
- * NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_lookup_dirent(apr_finfo_t *finfo, int subtype, const request_rec *r)
- * @tip The apr_dir_read flags value APR_FINFO_MIN|APR_FINFO_NAME flag is the
- * minimum recommended query if the results will be passed to apr_dir_read.
- * The file info passed must include the name, and must have the same relative
- * directory as the current request.
- */
-AP_DECLARE(request_rec *) ap_sub_req_lookup_dirent(const apr_finfo_t *finfo,
- const request_rec *r,
- int subtype,
- ap_filter_t *next_filter);
-/**
- * Create a sub request for the given URI using a specific method. This
- * sub request can be inspected to find information about the requested URI
- * @param method The method to use in the new sub request
- * @param new_file The URI to lookup
- * @param r The current request
- * @param next_filter The first filter the sub_request should use. If this is
- * NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_method_uri(const char *method, const char *new_file, const request_rec *r)
- */
-AP_DECLARE(request_rec *) ap_sub_req_method_uri(const char *method,
- const char *new_file,
- const request_rec *r,
- ap_filter_t *next_filter);
-/**
- * An output filter to strip EOS buckets from sub-requests. This always
- * has to be inserted at the end of a sub-requests filter stack.
- * @param f The current filter
- * @param bb The brigade to filter
- * @deffunc apr_status_t ap_sub_req_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
- */
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_sub_req_output_filter(ap_filter_t *f,
- apr_bucket_brigade *bb);
-
-/**
- * Run the handler for the sub request
- * @param r The sub request to run
- * @return The return code for the sub request
- * @deffunc int ap_run_sub_req(request_rec *r)
- */
-AP_DECLARE(int) ap_run_sub_req(request_rec *r);
-
-/**
- * Free the memory associated with a sub request
- * @param r The sub request to finish
- * @deffunc void ap_destroy_sub_req(request_rec *r)
- */
-AP_DECLARE(void) ap_destroy_sub_req(request_rec *r);
-
-/*
- * Then there's the case that you want some other request to be served
- * as the top-level request INSTEAD of what the client requested directly.
- * If so, call this from a handler, and then immediately return OK.
- */
-
-/**
- * Redirect the current request to some other uri
- * @param new_uri The URI to replace the current request with
- * @param r The current request
- * @deffunc void ap_internal_redirect(const char *new_uri, request_rec *r)
- */
-AP_DECLARE(void) ap_internal_redirect(const char *new_uri, request_rec *r);
-
-/**
- * This function is designed for things like actions or CGI scripts, when
- * using AddHandler, and you want to preserve the content type across
- * an internal redirect.
- * @param new_uri The URI to replace the current request with.
- * @param r The current request
- * @deffunc void ap_internal_redirect_handler(const char *new_uri, request_rec *r)
- */
-AP_DECLARE(void) ap_internal_redirect_handler(const char *new_uri, request_rec *r);
-
-/**
- * Redirect the current request to a sub_req, merging the pools
- * @param sub_req A subrequest created from this request
- * @param r The current request
- * @deffunc void ap_internal_fast_redirect(request_rec *sub_req, request_rec *r)
- * @tip the sub_req's pool will be merged into r's pool, be very careful
- * not to destroy this subrequest, it will be destroyed with the main request!
- */
-AP_DECLARE(void) ap_internal_fast_redirect(request_rec *sub_req, request_rec *r);
-
-/**
- * Can be used within any handler to determine if any authentication
- * is required for the current request
- * @param r The current request
- * @return 1 if authentication is required, 0 otherwise
- * @deffunc int ap_some_auth_required(request_rec *r)
- */
-AP_DECLARE(int) ap_some_auth_required(request_rec *r);
-
-/**
- * Determine if the current request is the main request or a sub requests
- * @param r The current request
- * @retrn 1 if this is a main request, 0 otherwise
- * @deffunc int ap_is_initial_req(request_rec *r)
- */
-AP_DECLARE(int) ap_is_initial_req(request_rec *r);
-
-/**
- * Function to set the r->mtime field to the specified value if it's later
- * than what's already there.
- * @param r The current request
- * @param dependency_time Time to set the mtime to
- * @deffunc void ap_update_mtime(request_rec *r, apr_time_t dependency_mtime)
- */
-AP_DECLARE(void) ap_update_mtime(request_rec *r, apr_time_t dependency_mtime);
-
-/**
- * Add one or more methods to the list permitted to access the resource.
- * Usually executed by the content handler before the response header is
- * sent, but sometimes invoked at an earlier phase if a module knows it
- * can set the list authoritatively. Note that the methods are ADDED
- * to any already permitted unless the reset flag is non-zero. The
- * list is used to generate the Allow response header field when it
- * is needed.
- * @param r The pointer to the request identifying the resource.
- * @param reset Boolean flag indicating whether this list should
- * completely replace any current settings.
- * @param ... A NULL-terminated list of strings, each identifying a
- * method name to add.
- * @return None.
- * @deffunc void ap_allow_methods(request_rec *r, int reset, ...)
- */
-AP_DECLARE(void) ap_allow_methods(request_rec *r, int reset, ...);
-
-/**
- * Add one or more methods to the list permitted to access the resource.
- * Usually executed by the content handler before the response header is
- * sent, but sometimes invoked at an earlier phase if a module knows it
- * can set the list authoritatively. Note that the methods are ADDED
- * to any already permitted unless the reset flag is non-zero. The
- * list is used to generate the Allow response header field when it
- * is needed.
- * @param r The pointer to the request identifying the resource.
- * @param reset Boolean flag indicating whether this list should
- * completely replace any current settings.
- * @param ... A list of method identifiers, from the "M_" series
- * defined in httpd.h, terminated with a value of -1
- * (e.g., "M_GET, M_POST, M_OPTIONS, -1")
- * @return None.
- * @deffunc void ap_allow_standard_methods(request_rec *r, int reset, ...)
- */
-AP_DECLARE(void) ap_allow_standard_methods(request_rec *r, int reset, ...);
-
-#define MERGE_ALLOW 0
-#define REPLACE_ALLOW 1
-
-#ifdef CORE_PRIVATE
-/* Function called by main.c to handle first-level request */
-void ap_process_request(request_rec *);
-/**
- * Kill the current request
- * @param type Why the request is dieing
- * @param r The current request
- * @deffunc void ap_die(int type, request_rec *r)
- */
-AP_DECLARE(void) ap_die(int type, request_rec *r);
-#endif
-
-/* Hooks */
-
-/**
- * Gives modules a chance to create their request_config entry when the
- * request is created.
- * @param r The current request
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,create_request,(request_rec *r))
-
-/**
- * This hook allow modules an opportunity to translate the URI into an
- * actual filename. If no modules do anything special, the server's default
- * rules will be followed.
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,translate_name,(request_rec *r))
-
-/**
- * This hook allow modules to set the per_dir_config based on their own
- * context (such as <Proxy > sections) and responds to contextless requests
- * such as TRACE that need no security or filesystem mapping.
- * based on the filesystem.
- * @param r The current request
- * @return DONE (or HTTP_) if this contextless request was just fulfilled
- * (such as TRACE), OK if this is not a file, and DECLINED if this is a file.
- * The core map_to_storage (HOOK_RUN_LAST) will directory_walk and file_walk
- * the r->filename.
- *
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,map_to_storage,(request_rec *r))
-
-/**
- * This hook is used to analyze the request headers, authenticate the user,
- * and set the user information in the request record (r->user and
- * r->ap_auth_type). This hook is only run when Apache determines that
- * authentication/authorization is required for this resource (as determined
- * by the 'Require' directive). It runs after the access_checker hook, and
- * before the auth_checker hook.
- *
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,check_user_id,(request_rec *r))
-
-/**
- * Allows modules to perform module-specific fixing of header fields. This
- * is invoked just before any content-handler
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,fixups,(request_rec *r))
-
-/**
- * This routine is called to determine and/or set the various document type
- * information bits, like Content-type (via r->content_type), language, et
- * cetera.
- * @param r the current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,type_checker,(request_rec *r))
-
-/**
- * This hook is used to apply additional access control to this resource.
- * It runs *before* a user is authenticated, so this hook is really to
- * apply additional restrictions independent of a user. It also runs
- * independent of 'Require' directive usage.
- *
- * @param r the current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,access_checker,(request_rec *r))
-
-/**
- * This hook is used to check to see if the resource being requested
- * is available for the authenticated user (r->user and r->ap_auth_type).
- * It runs after the access_checker and check_user_id hooks. Note that
- * it will *only* be called if Apache determines that access control has
- * been applied to this resource (through a 'Require' directive).
- *
- * @param r the current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,auth_checker,(request_rec *r))
-
-/**
- * This hook allows modules to insert filters for the current request
- * @param r the current request
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(void,insert_filter,(request_rec *r))
-
-AP_DECLARE(int) ap_location_walk(request_rec *r);
-AP_DECLARE(int) ap_directory_walk(request_rec *r);
-AP_DECLARE(int) ap_file_walk(request_rec *r);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_REQUEST_H */
diff --git a/include/http_vhost.h b/include/http_vhost.h
deleted file mode 100644
index 7c72368af3..0000000000
--- a/include/http_vhost.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTP_VHOST_H
-#define APACHE_HTTP_VHOST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Virtual Host package
- */
-
-/**
- * called before any config is read
- * @param p Pool to allocate out of
- */
-AP_DECLARE(void) ap_init_vhost_config(apr_pool_t *p);
-
-/**
- * called after the config has been read to compile the tables needed to do
- * the run-time vhost lookups
- * @param p The pool to allocate out of
- * @param main_server The start of the virtual host list
- * @deffunc ap_fini_vhost_config(apr_pool_t *p, server_rec *main_server)
- */
-AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_server);
-
-/**
- * handle addresses in <VirtualHost> statement
- * @param p The pool to allocate out of
- * @param hostname The hostname in the VirtualHost statement
- * @param s The list of Virtual Hosts.
- */
-const char *ap_parse_vhost_addrs(apr_pool_t *p, const char *hostname, server_rec *s);
-
-/* handle NameVirtualHost directive */
-const char *ap_set_name_virtual_host (cmd_parms *cmd, void *dummy,
- const char *arg);
-
-/**
- * given an ip address only, give our best guess as to what vhost it is
- * @param conn The current connection
- */
-AP_DECLARE(void) ap_update_vhost_given_ip(conn_rec *conn);
-
-/**
- * ap_update_vhost_given_ip is never enough, and this is always called after
- * the headers have been read. It may change r->server.
- * @param r The current request
- */
-AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r);
-
-/**
- * Match the host in the header with the hostname of the server for this
- * request.
- * @param r The current request
- * @param host The hostname in the headers
- * @param port The port from the headers
- * @return return 1 if the host:port matches any of the aliases of r->server,
- * return 0 otherwise
- * @deffunc int ap_matches_request_vhost(request_rec *r, const char *host, apr_port_t port)
- */
-AP_DECLARE(int) ap_matches_request_vhost(request_rec *r, const char *host,
- apr_port_t port);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTP_VHOST_H */
diff --git a/include/httpd.h b/include/httpd.h
deleted file mode 100644
index b39208b76a..0000000000
--- a/include/httpd.h
+++ /dev/null
@@ -1,1753 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_HTTPD_H
-#define APACHE_HTTPD_H
-
-/**
- * @file httpd.h
- * @brief HTTP Daemon routines
- */
-
-/* XXX - We need to push more stuff to other .h files, or even .c files, to
- * make this file smaller
- */
-
-/* Headers in which EVERYONE has an interest... */
-#include "ap_config.h"
-#include "ap_mmn.h"
-
-#include "ap_release.h"
-
-#include "apr_general.h"
-#include "apr_tables.h"
-#include "apr_pools.h"
-#include "apr_time.h"
-#include "apr_network_io.h"
-#include "apr_buckets.h"
-
-#include "os.h"
-
-#include "pcreposix.h"
-
-/* Note: util_uri.h is also included, see below */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef CORE_PRIVATE
-
-/* ----------------------------- config dir ------------------------------ */
-
-/* Define this to be the default server home dir. Most things later in this
- * file with a relative pathname will have this added.
- */
-#ifndef HTTPD_ROOT
-#ifdef OS2
-/* Set default for OS/2 file system */
-#define HTTPD_ROOT "/os2httpd"
-#elif defined(WIN32)
-/* Set default for Windows file system */
-#define HTTPD_ROOT "/apache"
-#elif defined (BEOS)
-/* Set the default for BeOS */
-#define HTTPD_ROOT "/boot/home/apache"
-#elif defined (NETWARE)
-/* Set the default for NetWare */
-#define HTTPD_ROOT "/apache"
-#else
-#define HTTPD_ROOT "/usr/local/apache"
-#endif
-#endif /* HTTPD_ROOT */
-
-/*
- * --------- You shouldn't have to edit anything below this line ----------
- *
- * Any modifications to any defaults not defined above should be done in the
- * respective configuration file.
- *
- */
-
-/* Default location of documents. Can be overridden by the DocumentRoot
- * directive.
- */
-#ifndef DOCUMENT_LOCATION
-#ifdef OS2
-/* Set default for OS/2 file system */
-#define DOCUMENT_LOCATION HTTPD_ROOT "/docs"
-#else
-#define DOCUMENT_LOCATION HTTPD_ROOT "/htdocs"
-#endif
-#endif /* DOCUMENT_LOCATION */
-
-/* Maximum number of dynamically loaded modules */
-#ifndef DYNAMIC_MODULE_LIMIT
-#define DYNAMIC_MODULE_LIMIT 128
-#endif
-
-/* Default administrator's address */
-#define DEFAULT_ADMIN "[no address given]"
-
-/* The name of the log files */
-#ifndef DEFAULT_ERRORLOG
-#if defined(OS2) || defined(WIN32)
-#define DEFAULT_ERRORLOG "logs/error.log"
-#else
-#define DEFAULT_ERRORLOG "logs/error_log"
-#endif
-#endif /* DEFAULT_ERRORLOG */
-
-/* Define this to be what your per-directory security files are called */
-#ifndef DEFAULT_ACCESS_FNAME
-#ifdef OS2
-/* Set default for OS/2 file system */
-#define DEFAULT_ACCESS_FNAME "htaccess"
-#else
-#define DEFAULT_ACCESS_FNAME ".htaccess"
-#endif
-#endif /* DEFAULT_ACCESS_FNAME */
-
-/* The name of the server config file */
-#ifndef SERVER_CONFIG_FILE
-#define SERVER_CONFIG_FILE "conf/httpd.conf"
-#endif
-
-/* The default path for CGI scripts if none is currently set */
-#ifndef DEFAULT_PATH
-#define DEFAULT_PATH "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin"
-#endif
-
-/* The path to the suExec wrapper, can be overridden in Configuration */
-#ifndef SUEXEC_BIN
-#define SUEXEC_BIN HTTPD_ROOT "/bin/suexec"
-#endif
-
-/* The timeout for waiting for messages */
-#ifndef DEFAULT_TIMEOUT
-#define DEFAULT_TIMEOUT 300
-#endif
-
-/* The timeout for waiting for keepalive timeout until next request */
-#ifndef DEFAULT_KEEPALIVE_TIMEOUT
-#define DEFAULT_KEEPALIVE_TIMEOUT 15
-#endif
-
-/* The number of requests to entertain per connection */
-#ifndef DEFAULT_KEEPALIVE
-#define DEFAULT_KEEPALIVE 100
-#endif
-
-/* Limits on the size of various request items. These limits primarily
- * exist to prevent simple denial-of-service attacks on a server based
- * on misuse of the protocol. The recommended values will depend on the
- * nature of the server resources -- CGI scripts and database backends
- * might require large values, but most servers could get by with much
- * smaller limits than we use below. The request message body size can
- * be limited by the per-dir config directive LimitRequestBody.
- *
- * Internal buffer sizes are two bytes more than the DEFAULT_LIMIT_REQUEST_LINE
- * and DEFAULT_LIMIT_REQUEST_FIELDSIZE below, which explains the 8190.
- * These two limits can be lowered (but not raised) by the server config
- * directives LimitRequestLine and LimitRequestFieldsize, respectively.
- *
- * DEFAULT_LIMIT_REQUEST_FIELDS can be modified or disabled (set = 0) by
- * the server config directive LimitRequestFields.
- */
-#ifndef DEFAULT_LIMIT_REQUEST_LINE
-#define DEFAULT_LIMIT_REQUEST_LINE 8190
-#endif /* default limit on bytes in Request-Line (Method+URI+HTTP-version) */
-#ifndef DEFAULT_LIMIT_REQUEST_FIELDSIZE
-#define DEFAULT_LIMIT_REQUEST_FIELDSIZE 8190
-#endif /* default limit on bytes in any one header field */
-#ifndef DEFAULT_LIMIT_REQUEST_FIELDS
-#define DEFAULT_LIMIT_REQUEST_FIELDS 100
-#endif /* default limit on number of request header fields */
-
-
-/**
- * The default default character set name to add if AddDefaultCharset is
- * enabled. Overridden with AddDefaultCharsetName.
- */
-#define DEFAULT_ADD_DEFAULT_CHARSET_NAME "iso-8859-1"
-
-#endif /* CORE_PRIVATE */
-
-/** default HTTP Server protocol */
-#define AP_SERVER_PROTOCOL "HTTP/1.1"
-
-
-/* ------------------ stuff that modules are allowed to look at ----------- */
-
-/** Define this to be what your HTML directory content files are called */
-#ifndef AP_DEFAULT_INDEX
-#define AP_DEFAULT_INDEX "index.html"
-#endif
-
-
-/**
- * Define this to be what type you'd like returned for files with unknown
- * suffixes.
- * @warning MUST be all lower case.
- */
-#ifndef DEFAULT_CONTENT_TYPE
-#define DEFAULT_CONTENT_TYPE "text/plain"
-#endif
-
-/** The name of the MIME types file */
-#ifndef AP_TYPES_CONFIG_FILE
-#define AP_TYPES_CONFIG_FILE "conf/mime.types"
-#endif
-
-/*
- * Define the HTML doctype strings centrally.
- */
-/** HTML 2.0 Doctype */
-#define DOCTYPE_HTML_2_0 "<!DOCTYPE HTML PUBLIC \"-//IETF//" \
- "DTD HTML 2.0//EN\">\n"
-/** HTML 3.2 Doctype */
-#define DOCTYPE_HTML_3_2 "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 3.2 Final//EN\">\n"
-/** HTML 4.0 Strict Doctype */
-#define DOCTYPE_HTML_4_0S "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 4.0//EN\"\n" \
- "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
-/** HTML 4.0 Transitional Doctype */
-#define DOCTYPE_HTML_4_0T "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 4.0 Transitional//EN\"\n" \
- "\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n"
-/** HTML 4.0 Frameset Doctype */
-#define DOCTYPE_HTML_4_0F "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 4.0 Frameset//EN\"\n" \
- "\"http://www.w3.org/TR/REC-html40/frameset.dtd\">\n"
-/** XHTML 1.0 Strict Doctype */
-#define DOCTYPE_XHTML_1_0S "<!DOCTYPE html PUBLIC \"-//W3C//" \
- "DTD XHTML 1.0 Strict//EN\"\n" \
- "\"http://www.w3.org/TR/xhtml1/DTD/" \
- "xhtml1-strict.dtd\">\n"
-/** XHTML 1.0 Transitional Doctype */
-#define DOCTYPE_XHTML_1_0T "<!DOCTYPE html PUBLIC \"-//W3C//" \
- "DTD XHTML 1.0 Transitional//EN\"\n" \
- "\"http://www.w3.org/TR/xhtml1/DTD/" \
- "xhtml1-transitional.dtd\">\n"
-/** XHTML 1.0 Frameset Doctype */
-#define DOCTYPE_XHTML_1_0F "<!DOCTYPE html PUBLIC \"-//W3C//" \
- "DTD XHTML 1.0 Frameset//EN\"\n" \
- "\"http://www.w3.org/TR/xhtml1/DTD/" \
- "xhtml1-frameset.dtd\">"
-
-/** Internal representation for a HTTP protocol number, e.g., HTTP/1.1 */
-
-#define HTTP_VERSION(major,minor) (1000*(major)+(minor))
-/** Major part of HTTP protocol */
-#define HTTP_VERSION_MAJOR(number) ((number)/1000)
-/** Minor part of HTTP protocol */
-#define HTTP_VERSION_MINOR(number) ((number)%1000)
-
-/* -------------- Port number for server running standalone --------------- */
-
-/** default HTTP Port */
-#define DEFAULT_HTTP_PORT 80
-/** default HTTPS Port */
-#define DEFAULT_HTTPS_PORT 443
-/**
- * Check whether @a port is the default port for the request @a r.
- * @param port The port number
- * @param r The request
- * @see #ap_default_port
- */
-#define ap_is_default_port(port,r) ((port) == ap_default_port(r))
-/**
- * Get the default port for a request (which depends on the scheme).
- * @param r The request
- */
-#define ap_default_port(r) ap_run_default_port(r)
-/**
- * Get the scheme for a request.
- * @param r The request
- * @bug This should be called ap_http_scheme!
- */
-#define ap_http_method(r) ap_run_http_method(r)
-
-/** The default string lengths */
-#define MAX_STRING_LEN HUGE_STRING_LEN
-#define HUGE_STRING_LEN 8192
-
-/** The size of the server's internal read-write buffers */
-#define AP_IOBUFSIZE 8192
-
-/** The max number of regex captures that can be expanded by ap_pregsub */
-#define AP_MAX_REG_MATCH 10
-
-/**
- * APR_HAS_LARGE_FILES introduces the problem of spliting sendfile into
- * mutiple buckets, no greater than MAX(apr_size_t), and more granular
- * than that in case the brigade code/filters attempt to read it directly.
- * ### 16mb is an invention, no idea if it is reasonable.
- */
-#define AP_MAX_SENDFILE 16777216 /* 2^24 */
-
-/**
- * Special Apache error codes. These are basically used
- * in http_main.c so we can keep track of various errors.
- *
- */
-/** a normal exit */
-#define APEXIT_OK 0x0
-/** A fatal error arising during the server's init sequence */
-#define APEXIT_INIT 0x2
-/** The child died during its init sequence */
-#define APEXIT_CHILDINIT 0x3
-/**
- * The child exited due to a resource shortage.
- * The parent should limit the rate of forking until
- * the situation is resolved.
- */
-#define APEXIT_CHILDSICK 0x7
-/**
- * A fatal error, resulting in the whole server aborting.
- * If a child exits with this error, the parent process
- * considers this a server-wide fatal error and aborts.
- */
-#define APEXIT_CHILDFATAL 0xf
-
-#ifndef AP_DECLARE
-/**
- * Stuff marked #AP_DECLARE is part of the API, and intended for use
- * by modules. Its purpose is to allow us to add attributes that
- * particular platforms or compilers require to every exported function.
- */
-# define AP_DECLARE(type) type
-#endif
-
-#ifndef AP_DECLARE_NONSTD
-/**
- * Stuff marked #AP_DECLARE_NONSTD is part of the API, and intended for
- * use by modules. The difference between #AP_DECLARE and
- * #AP_DECLARE_NONSTD is that the latter is required for any functions
- * which use varargs or are used via indirect function call. This
- * is to accomodate the two calling conventions in windows dlls.
- */
-# define AP_DECLARE_NONSTD(type) type
-#endif
-#ifndef AP_DECLARE_DATA
-# define AP_DECLARE_DATA
-#endif
-
-#ifndef AP_MODULE_DECLARE
-# define AP_MODULE_DECLARE(type) type
-#endif
-#ifndef AP_MODULE_DECLARE_NONSTD
-# define AP_MODULE_DECLARE_NONSTD(type) type
-#endif
-#ifndef AP_MODULE_DECLARE_DATA
-# define AP_MODULE_DECLARE_DATA
-#endif
-
-/**
- * @internal
- * modules should not used functions marked AP_CORE_DECLARE
- */
-#ifndef AP_CORE_DECLARE
-# define AP_CORE_DECLARE AP_DECLARE
-#endif
-/**
- * @internal
- * modules should not used functions marked AP_CORE_DECLARE_NONSTD
- */
-
-#ifndef AP_CORE_DECLARE_NONSTD
-# define AP_CORE_DECLARE_NONSTD AP_DECLARE_NONSTD
-#endif
-
-/**
- * The numeric version information is broken out into fields within this
- * structure.
- */
-typedef struct {
- int major; /**< major number */
- int minor; /**< minor number */
- int patch; /**< patch number */
- const char *add_string; /**< additional string like "-dev" */
-} ap_version_t;
-
-/**
- * Return httpd's version information in a numeric form.
- *
- * @param version Pointer to a version structure for returning the version
- * information.
- */
-AP_DECLARE(void) ap_get_server_revision(ap_version_t *version);
-
-/**
- * Get the server version string
- * @return The server version string
- */
-AP_DECLARE(const char *) ap_get_server_version(void);
-
-/**
- * Add a component to the version string
- * @param pconf The pool to allocate the component from
- * @param component The string to add
- */
-AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *component);
-
-/**
- * Get the date a time that the server was built
- * @return The server build time string
- */
-AP_DECLARE(const char *) ap_get_server_built(void);
-
-#define DECLINED -1 /**< Module declines to handle */
-#define DONE -2 /**< Module has served the response completely
- * - it's safe to die() with no more output
- */
-#define OK 0 /**< Module has handled this stage. */
-
-
-/**
- * @defgroup HTTP_Status HTTP Status Codes
- * @{
- */
-/**
- * The size of the static array in http_protocol.c for storing
- * all of the potential response status-lines (a sparse table).
- * A future version should dynamically generate the apr_table_t at startup.
- */
-#define RESPONSE_CODES 57
-
-#define HTTP_CONTINUE 100
-#define HTTP_SWITCHING_PROTOCOLS 101
-#define HTTP_PROCESSING 102
-#define HTTP_OK 200
-#define HTTP_CREATED 201
-#define HTTP_ACCEPTED 202
-#define HTTP_NON_AUTHORITATIVE 203
-#define HTTP_NO_CONTENT 204
-#define HTTP_RESET_CONTENT 205
-#define HTTP_PARTIAL_CONTENT 206
-#define HTTP_MULTI_STATUS 207
-#define HTTP_MULTIPLE_CHOICES 300
-#define HTTP_MOVED_PERMANENTLY 301
-#define HTTP_MOVED_TEMPORARILY 302
-#define HTTP_SEE_OTHER 303
-#define HTTP_NOT_MODIFIED 304
-#define HTTP_USE_PROXY 305
-#define HTTP_TEMPORARY_REDIRECT 307
-#define HTTP_BAD_REQUEST 400
-#define HTTP_UNAUTHORIZED 401
-#define HTTP_PAYMENT_REQUIRED 402
-#define HTTP_FORBIDDEN 403
-#define HTTP_NOT_FOUND 404
-#define HTTP_METHOD_NOT_ALLOWED 405
-#define HTTP_NOT_ACCEPTABLE 406
-#define HTTP_PROXY_AUTHENTICATION_REQUIRED 407
-#define HTTP_REQUEST_TIME_OUT 408
-#define HTTP_CONFLICT 409
-#define HTTP_GONE 410
-#define HTTP_LENGTH_REQUIRED 411
-#define HTTP_PRECONDITION_FAILED 412
-#define HTTP_REQUEST_ENTITY_TOO_LARGE 413
-#define HTTP_REQUEST_URI_TOO_LARGE 414
-#define HTTP_UNSUPPORTED_MEDIA_TYPE 415
-#define HTTP_RANGE_NOT_SATISFIABLE 416
-#define HTTP_EXPECTATION_FAILED 417
-#define HTTP_UNPROCESSABLE_ENTITY 422
-#define HTTP_LOCKED 423
-#define HTTP_FAILED_DEPENDENCY 424
-#define HTTP_UPGRADE_REQUIRED 426
-#define HTTP_INTERNAL_SERVER_ERROR 500
-#define HTTP_NOT_IMPLEMENTED 501
-#define HTTP_BAD_GATEWAY 502
-#define HTTP_SERVICE_UNAVAILABLE 503
-#define HTTP_GATEWAY_TIME_OUT 504
-#define HTTP_VERSION_NOT_SUPPORTED 505
-#define HTTP_VARIANT_ALSO_VARIES 506
-#define HTTP_INSUFFICIENT_STORAGE 507
-#define HTTP_NOT_EXTENDED 510
-
-/** is the status code informational */
-#define ap_is_HTTP_INFO(x) (((x) >= 100)&&((x) < 200))
-/** is the status code OK ?*/
-#define ap_is_HTTP_SUCCESS(x) (((x) >= 200)&&((x) < 300))
-/** is the status code a redirect */
-#define ap_is_HTTP_REDIRECT(x) (((x) >= 300)&&((x) < 400))
-/** is the status code a error (client or server) */
-#define ap_is_HTTP_ERROR(x) (((x) >= 400)&&((x) < 600))
-/** is the status code a client error */
-#define ap_is_HTTP_CLIENT_ERROR(x) (((x) >= 400)&&((x) < 500))
-/** is the status code a server error */
-#define ap_is_HTTP_SERVER_ERROR(x) (((x) >= 500)&&((x) < 600))
-
-/** should the status code drop the connection */
-#define ap_status_drops_connection(x) \
- (((x) == HTTP_BAD_REQUEST) || \
- ((x) == HTTP_REQUEST_TIME_OUT) || \
- ((x) == HTTP_LENGTH_REQUIRED) || \
- ((x) == HTTP_REQUEST_ENTITY_TOO_LARGE) || \
- ((x) == HTTP_REQUEST_URI_TOO_LARGE) || \
- ((x) == HTTP_INTERNAL_SERVER_ERROR) || \
- ((x) == HTTP_SERVICE_UNAVAILABLE) || \
- ((x) == HTTP_NOT_IMPLEMENTED))
-/** @} */
-/**
- * @defgroup Methods List of Methods recognized by the server
- * @{
- */
-/**
- * Methods recognized (but not necessarily handled) by the server.
- * These constants are used in bit shifting masks of size int, so it is
- * unsafe to have more methods than bits in an int. HEAD == M_GET.
- * This list must be tracked by the list in http_protocol.c in routine
- * ap_method_name_of().
- */
-#define M_GET 0 /* RFC 2616: HTTP */
-#define M_PUT 1 /* : */
-#define M_POST 2
-#define M_DELETE 3
-#define M_CONNECT 4
-#define M_OPTIONS 5
-#define M_TRACE 6 /* RFC 2616: HTTP */
-#define M_PATCH 7 /* no rfc(!) ### remove this one? */
-#define M_PROPFIND 8 /* RFC 2518: WebDAV */
-#define M_PROPPATCH 9 /* : */
-#define M_MKCOL 10
-#define M_COPY 11
-#define M_MOVE 12
-#define M_LOCK 13
-#define M_UNLOCK 14 /* RFC 2518: WebDAV */
-#define M_VERSION_CONTROL 15 /* RFC 3253: WebDAV Versioning */
-#define M_CHECKOUT 16 /* : */
-#define M_UNCHECKOUT 17
-#define M_CHECKIN 18
-#define M_UPDATE 19
-#define M_LABEL 20
-#define M_REPORT 21
-#define M_MKWORKSPACE 22
-#define M_MKACTIVITY 23
-#define M_BASELINE_CONTROL 24
-#define M_MERGE 25
-#define M_INVALID 26 /* RFC 3253: WebDAV Versioning */
-
-/**
- * METHODS needs to be equal to the number of bits
- * we are using for limit masks.
- */
-#define METHODS 64
-
-/**
- * The method mask bit to shift for anding with a bitmask.
- */
-#define AP_METHOD_BIT ((apr_int64_t)1)
-/** @} */
-
-
-/**
- * Structure for handling HTTP methods. Methods known to the server are
- * accessed via a bitmask shortcut; extension methods are handled by
- * an array.
- */
-typedef struct ap_method_list_t ap_method_list_t;
-struct ap_method_list_t {
- /* The bitmask used for known methods */
- apr_int64_t method_mask;
- /* the array used for extension methods */
- apr_array_header_t *method_list;
-};
-/**
- * @defgroup module_magic Module Magic mime types
- * @{
- */
-/** Magic for mod_cgi[d] */
-#define CGI_MAGIC_TYPE "application/x-httpd-cgi"
-/** Magic for mod_include */
-#define INCLUDES_MAGIC_TYPE "text/x-server-parsed-html"
-/** Magic for mod_include */
-#define INCLUDES_MAGIC_TYPE3 "text/x-server-parsed-html3"
-/** Magic for mod_dir */
-#define DIR_MAGIC_TYPE "httpd/unix-directory"
-
-/** @} */
-/* Just in case your linefeed isn't the one the other end is expecting. */
-#if !APR_CHARSET_EBCDIC
-/** linefeed */
-#define LF 10
-/** carrige return */
-#define CR 13
-/** carrige return /Line Feed Combo */
-#define CRLF "\015\012"
-#else /* APR_CHARSET_EBCDIC */
-/* For platforms using the EBCDIC charset, the transition ASCII->EBCDIC is done
- * in the buff package (bread/bputs/bwrite). Everywhere else, we use
- * "native EBCDIC" CR and NL characters. These are therefore
- * defined as
- * '\r' and '\n'.
- */
-#define CR '\r'
-#define LF '\n'
-#define CRLF "\r\n"
-#endif /* APR_CHARSET_EBCDIC */
-
-/**
- * @defgroup values_request_rec_body Possible values for request_rec.read_body
- * @{
- * Possible values for request_rec.read_body (set by handling module):
- */
-
-/** Send 413 error if message has any body */
-#define REQUEST_NO_BODY 0
-/** Send 411 error if body without Content-Length */
-#define REQUEST_CHUNKED_ERROR 1
-/** If chunked, remove the chunks for me. */
-#define REQUEST_CHUNKED_DECHUNK 2
-/** @} */
-
-/**
- * @defgroup values_request_rec_used_path_info Possible values for request_rec.used_path_info
- * @{
- * Possible values for request_rec.used_path_info:
- */
-
-/** Accept the path_info from the request */
-#define AP_REQ_ACCEPT_PATH_INFO 0
-/** Return a 404 error if path_info was given */
-#define AP_REQ_REJECT_PATH_INFO 1
-/** Module may chose to use the given path_info */
-#define AP_REQ_DEFAULT_PATH_INFO 2
-/** @} */
-
-/*
- * Things which may vary per file-lookup WITHIN a request ---
- * e.g., state of MIME config. Basically, the name of an object, info
- * about the object, and any other info we may ahve which may need to
- * change as we go poking around looking for it (e.g., overridden by
- * .htaccess files).
- *
- * Note how the default state of almost all these things is properly
- * zero, so that allocating it with pcalloc does the right thing without
- * a whole lot of hairy initialization... so long as we are willing to
- * make the (fairly) portable assumption that the bit pattern of a NULL
- * pointer is, in fact, zero.
- */
-
-/**
- * This represents the result of calling htaccess; these are cached for
- * each request.
- */
-struct htaccess_result {
- /** the directory to which this applies */
- const char *dir;
- /** the overrides allowed for the .htaccess file */
- int override;
- /** the override options allowed for the .htaccess file */
- int override_opts;
- /** the configuration directives */
- struct ap_conf_vector_t *htaccess;
- /** the next one, or NULL if no more; N.B. never change this */
- const struct htaccess_result *next;
-};
-
-/* The following four types define a hierarchy of activities, so that
- * given a request_rec r you can write r->connection->server->process
- * to get to the process_rec. While this reduces substantially the
- * number of arguments that various hooks require beware that in
- * threaded versions of the server you must consider multiplexing
- * issues. */
-
-
-/** A structure that represents one process */
-typedef struct process_rec process_rec;
-/** A structure that represents a virtual server */
-typedef struct server_rec server_rec;
-/** A structure that represents one connection */
-typedef struct conn_rec conn_rec;
-/** A structure that represents the current request */
-typedef struct request_rec request_rec;
-
-/* ### would be nice to not include this from httpd.h ... */
-/* This comes after we have defined the request_rec type */
-#include "apr_uri.h"
-
-/** A structure that represents one process */
-struct process_rec {
- /** Global pool. Cleared upon normal exit */
- apr_pool_t *pool;
- /** Configuration pool. Cleared upon restart */
- apr_pool_t *pconf;
- /** Number of command line arguments passed to the program */
- int argc;
- /** The command line arguments */
- const char * const *argv;
- /** The program name used to execute the program */
- const char *short_name;
-};
-
-/** A structure that represents the current request */
-struct request_rec {
- /** The pool associated with the request */
- apr_pool_t *pool;
- /** The connection to the client */
- conn_rec *connection;
- /** The virtual host for this request */
- server_rec *server;
-
- /** Pointer to the redirected request if this is an external redirect */
- request_rec *next;
- /** Pointer to the previous request if this is an internal redirect */
- request_rec *prev;
-
- /** Pointer to the main request if this is a sub-request
- * (see http_request.h) */
- request_rec *main;
-
- /* Info about the request itself... we begin with stuff that only
- * protocol.c should ever touch...
- */
- /** First line of request */
- char *the_request;
- /** HTTP/0.9, "simple" request (e.g. GET /foo\n w/no headers) */
- int assbackwards;
- /** A proxy request (calculated during post_read_request/translate_name)
- * possible values PROXYREQ_NONE, PROXYREQ_PROXY, PROXYREQ_REVERSE,
- * PROXYREQ_RESPONSE
- */
- int proxyreq;
- /** HEAD request, as opposed to GET */
- int header_only;
- /** Protocol string, as given to us, or HTTP/0.9 */
- char *protocol;
- /** Protocol version number of protocol; 1.1 = 1001 */
- int proto_num;
- /** Host, as set by full URI or Host: */
- const char *hostname;
-
- /** Time when the request started */
- apr_time_t request_time;
-
- /** Status line, if set by script */
- const char *status_line;
- /** Status line */
- int status;
-
- /* Request method, two ways; also, protocol, etc.. Outside of protocol.c,
- * look, but don't touch.
- */
-
- /** Request method (eg. GET, HEAD, POST, etc.) */
- const char *method;
- /** M_GET, M_POST, etc. */
- int method_number;
-
- /**
- * 'allowed' is a bitvector of the allowed methods.
- *
- * A handler must ensure that the request method is one that
- * it is capable of handling. Generally modules should DECLINE
- * any request methods they do not handle. Prior to aborting the
- * handler like this the handler should set r->allowed to the list
- * of methods that it is willing to handle. This bitvector is used
- * to construct the "Allow:" header required for OPTIONS requests,
- * and HTTP_METHOD_NOT_ALLOWED and HTTP_NOT_IMPLEMENTED status codes.
- *
- * Since the default_handler deals with OPTIONS, all modules can
- * usually decline to deal with OPTIONS. TRACE is always allowed,
- * modules don't need to set it explicitly.
- *
- * Since the default_handler will always handle a GET, a
- * module which does *not* implement GET should probably return
- * HTTP_METHOD_NOT_ALLOWED. Unfortunately this means that a Script GET
- * handler can't be installed by mod_actions.
- */
- apr_int64_t allowed;
- /** Array of extension methods */
- apr_array_header_t *allowed_xmethods;
- /** List of allowed methods */
- ap_method_list_t *allowed_methods;
-
- /** byte count in stream is for body */
- apr_off_t sent_bodyct;
- /** body byte count, for easy access */
- apr_off_t bytes_sent;
- /** Last modified time of the requested resource */
- apr_time_t mtime;
-
- /* HTTP/1.1 connection-level features */
-
- /** sending chunked transfer-coding */
- int chunked;
- /** The Range: header */
- const char *range;
- /** The "real" content length */
- apr_off_t clength;
-
- /** Remaining bytes left to read from the request body */
- apr_off_t remaining;
- /** Number of bytes that have been read from the request body */
- apr_off_t read_length;
- /** Method for reading the request body
- * (eg. REQUEST_CHUNKED_ERROR, REQUEST_NO_BODY,
- * REQUEST_CHUNKED_DECHUNK, etc...) */
- int read_body;
- /** reading chunked transfer-coding */
- int read_chunked;
- /** is client waiting for a 100 response? */
- unsigned expecting_100;
-
- /* MIME header environments, in and out. Also, an array containing
- * environment variables to be passed to subprocesses, so people can
- * write modules to add to that environment.
- *
- * The difference between headers_out and err_headers_out is that the
- * latter are printed even on error, and persist across internal redirects
- * (so the headers printed for ErrorDocument handlers will have them).
- *
- * The 'notes' apr_table_t is for notes from one module to another, with no
- * other set purpose in mind...
- */
-
- /** MIME header environment from the request */
- apr_table_t *headers_in;
- /** MIME header environment for the response */
- apr_table_t *headers_out;
- /** MIME header environment for the response, printed even on errors and
- * persist across internal redirects */
- apr_table_t *err_headers_out;
- /** Array of environment variables to be used for sub processes */
- apr_table_t *subprocess_env;
- /** Notes from one module to another */
- apr_table_t *notes;
-
- /* content_type, handler, content_encoding, and all content_languages
- * MUST be lowercased strings. They may be pointers to static strings;
- * they should not be modified in place.
- */
- /** The content-type for the current request */
- const char *content_type; /* Break these out --- we dispatch on 'em */
- /** The handler string that we use to call a handler function */
- const char *handler; /* What we *really* dispatch on */
-
- /** How to encode the data */
- const char *content_encoding;
- /** Array of strings representing the content languages */
- apr_array_header_t *content_languages;
-
- /** variant list validator (if negotiated) */
- char *vlist_validator;
-
- /** If an authentication check was made, this gets set to the user name. */
- char *user;
- /** If an authentication check was made, this gets set to the auth type. */
- char *ap_auth_type;
-
- /** This response can not be cached */
- int no_cache;
- /** There is no local copy of this response */
- int no_local_copy;
-
- /* What object is being requested (either directly, or via include
- * or content-negotiation mapping).
- */
-
- /** The URI without any parsing performed */
- char *unparsed_uri;
- /** The path portion of the URI */
- char *uri;
- /** The filename on disk corresponding to this response */
- char *filename;
- /* XXX: What does this mean? Please define "canonicalize" -aaron */
- /** The true filename, we canonicalize r->filename if these don't match */
- char *canonical_filename;
- /** The PATH_INFO extracted from this request */
- char *path_info;
- /** The QUERY_ARGS extracted from this request */
- char *args;
- /** ST_MODE set to zero if no such file */
- apr_finfo_t finfo;
- /** A struct containing the components of URI */
- apr_uri_t parsed_uri;
-
- /**
- * Flag for the handler to accept or reject path_info on
- * the current request. All modules should respect the
- * AP_REQ_ACCEPT_PATH_INFO and AP_REQ_REJECT_PATH_INFO
- * values, while AP_REQ_DEFAULT_PATH_INFO indicates they
- * may follow existing conventions. This is set to the
- * user's preference upon HOOK_VERY_FIRST of the fixups.
- */
- int used_path_info;
-
- /* Various other config info which may change with .htaccess files
- * These are config vectors, with one void* pointer for each module
- * (the thing pointed to being the module's business).
- */
-
- /** Options set in config files, etc. */
- struct ap_conf_vector_t *per_dir_config;
- /** Notes on *this* request */
- struct ap_conf_vector_t *request_config;
-
- /**
- * A linked list of the .htaccess configuration directives
- * accessed by this request.
- * N.B. always add to the head of the list, _never_ to the end.
- * that way, a sub request's list can (temporarily) point to a parent's list
- */
- const struct htaccess_result *htaccess;
-
- /** A list of output filters to be used for this request */
- struct ap_filter_t *output_filters;
- /** A list of input filters to be used for this request */
- struct ap_filter_t *input_filters;
-
- /** A list of protocol level output filters to be used for this
- * request */
- struct ap_filter_t *proto_output_filters;
- /** A list of protocol level input filters to be used for this
- * request */
- struct ap_filter_t *proto_input_filters;
-
- /** A flag to determine if the eos bucket has been sent yet */
- int eos_sent;
-
-/* Things placed at the end of the record to avoid breaking binary
- * compatibility. It would be nice to remember to reorder the entire
- * record to improve 64bit alignment the next time we need to break
- * binary compatibility for some other reason.
- */
-};
-
-/**
- * @defgroup ProxyReq Proxy request types
- *
- * Possible values of request_rec->proxyreq. A request could be normal,
- * proxied or reverse proxied. Normally proxied and reverse proxied are
- * grouped together as just "proxied", but sometimes it's necessary to
- * tell the difference between the two, such as for authentication.
- * @{
- */
-
-#define PROXYREQ_NONE 0 /**< No proxy */
-#define PROXYREQ_PROXY 1 /**< Standard proxy */
-#define PROXYREQ_REVERSE 2 /**< Reverse proxy */
-#define PROXYREQ_RESPONSE 3 /**< Origin response */
-
-/* @} */
-
-typedef enum {
- AP_CONN_UNKNOWN,
- AP_CONN_CLOSE,
- AP_CONN_KEEPALIVE
-} ap_conn_keepalive_e;
-
-/** Structure to store things which are per connection */
-struct conn_rec {
- /** Pool associated with this connection */
- apr_pool_t *pool;
- /** Physical vhost this conn came in on */
- server_rec *base_server;
- /** used by http_vhost.c */
- void *vhost_lookup_data;
-
- /* Information about the connection itself */
- /** local address */
- apr_sockaddr_t *local_addr;
- /** remote address */
- apr_sockaddr_t *remote_addr;
-
- /** Client's IP address */
- char *remote_ip;
- /** Client's DNS name, if known. NULL if DNS hasn't been checked,
- * "" if it has and no address was found. N.B. Only access this though
- * get_remote_host() */
- char *remote_host;
- /** Only ever set if doing rfc1413 lookups. N.B. Only access this through
- * get_remote_logname() */
- char *remote_logname;
-
- /** Are we still talking? */
- unsigned aborted:1;
-
- /** Are we going to keep the connection alive for another request?
- * @see ap_conn_keepalive_e */
- ap_conn_keepalive_e keepalive;
-
- /** have we done double-reverse DNS? -1 yes/failure, 0 not yet,
- * 1 yes/success */
- signed int double_reverse:2;
-
- /** How many times have we used it? */
- int keepalives;
- /** server IP address */
- char *local_ip;
- /** used for ap_get_server_name when UseCanonicalName is set to DNS
- * (ignores setting of HostnameLookups) */
- char *local_host;
-
- /** ID of this connection; unique at any point in time */
- long id;
- /** Notes on *this* connection */
- struct ap_conf_vector_t *conn_config;
- /** send note from one module to another, must remain valid for all
- * requests on this conn */
- apr_table_t *notes;
- /** A list of input filters to be used for this connection */
- struct ap_filter_t *input_filters;
- /** A list of output filters to be used for this connection */
- struct ap_filter_t *output_filters;
- /** handle to scoreboard information for this connection */
- void *sbh;
- /** The bucket allocator to use for all bucket/brigade creations */
- struct apr_bucket_alloc_t *bucket_alloc;
-};
-
-/* Per-vhost config... */
-
-/**
- * The address 255.255.255.255, when used as a virtualhost address,
- * will become the "default" server when the ip doesn't match other vhosts.
- */
-#define DEFAULT_VHOST_ADDR 0xfffffffful
-
-
-/** A structure to be used for Per-vhost config */
-typedef struct server_addr_rec server_addr_rec;
-struct server_addr_rec {
- /** The next server in the list */
- server_addr_rec *next;
- /** The bound address, for this server */
- apr_sockaddr_t *host_addr;
- /** The bound port, for this server */
- apr_port_t host_port;
- /** The name given in <VirtualHost> */
- char *virthost;
-};
-
-/** A structure to store information for each virtual server */
-struct server_rec {
- /** The process this server is running in */
- process_rec *process;
- /** The next server in the list */
- server_rec *next;
-
- /** The name of the server */
- const char *defn_name;
- /** The line of the config file that the server was defined on */
- unsigned defn_line_number;
-
- /* Contact information */
-
- /** The admin's contact information */
- char *server_admin;
- /** The server hostname */
- char *server_hostname;
- /** for redirects, etc. */
- apr_port_t port;
-
- /* Log files --- note that transfer log is now in the modules... */
-
- /** The name of the error log */
- char *error_fname;
- /** A file descriptor that references the error log */
- apr_file_t *error_log;
- /** The log level for this server */
- int loglevel;
-
- /* Module-specific configuration for server, and defaults... */
-
- /** true if this is the virtual server */
- int is_virtual;
- /** Config vector containing pointers to modules' per-server config
- * structures. */
- struct ap_conf_vector_t *module_config;
- /** MIME type info, etc., before we start checking per-directory info */
- struct ap_conf_vector_t *lookup_defaults;
-
- /* Transaction handling */
-
- /** I haven't got a clue */
- server_addr_rec *addrs;
- /** Timeout, as an apr interval, before we give up */
- apr_interval_time_t timeout;
- /** The apr interval we will wait for another request */
- apr_interval_time_t keep_alive_timeout;
- /** Maximum requests per connection */
- int keep_alive_max;
- /** Use persistent connections? */
- int keep_alive;
-
- /** Pathname for ServerPath */
- const char *path;
- /** Length of path */
- int pathlen;
-
- /** Normal names for ServerAlias servers */
- apr_array_header_t *names;
- /** Wildcarded names for ServerAlias servers */
- apr_array_header_t *wild_names;
-
- /** limit on size of the HTTP request line */
- int limit_req_line;
- /** limit on size of any request header field */
- int limit_req_fieldsize;
- /** limit on number of request header fields */
- int limit_req_fields;
-};
-
-typedef struct core_output_filter_ctx {
- apr_bucket_brigade *b;
- apr_pool_t *deferred_write_pool; /* subpool of c->pool used for resources
- * which may outlive the request
- */
-} core_output_filter_ctx_t;
-
-typedef struct core_filter_ctx {
- apr_bucket_brigade *b;
-} core_ctx_t;
-
-typedef struct core_net_rec {
- /** Connection to the client */
- apr_socket_t *client_socket;
-
- /** connection record */
- conn_rec *c;
-
- core_output_filter_ctx_t *out_ctx;
- core_ctx_t *in_ctx;
-} core_net_rec;
-
-/**
- * Examine a field value (such as a media-/content-type) string and return
- * it sans any parameters; e.g., strip off any ';charset=foo' and the like.
- * @param p Pool to allocate memory from
- * @param intype The field to examine
- * @return A copy of the field minus any parameters
- */
-AP_DECLARE(char *) ap_field_noparam(apr_pool_t *p, const char *intype);
-
-/**
- * Convert a time from an integer into a string in a specified format
- * @param p The pool to allocate memory from
- * @param t The time to convert
- * @param fmt The format to use for the conversion
- * @param gmt Convert the time for GMT?
- * @return The string that represents the specified time
- */
-AP_DECLARE(char *) ap_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt, int gmt);
-
-/* String handling. The *_nc variants allow you to use non-const char **s as
- arguments (unfortunately C won't automatically convert a char ** to a const
- char **) */
-
-/**
- * Get the characters until the first occurance of a specified character
- * @param p The pool to allocate memory from
- * @param line The string to get the characters from
- * @param stop The character to stop at
- * @return A copy of the characters up to the first stop character
- */
-AP_DECLARE(char *) ap_getword(apr_pool_t *p, const char **line, char stop);
-/**
- * Get the characters until the first occurance of a specified character
- * @param p The pool to allocate memory from
- * @param line The string to get the characters from
- * @param stop The character to stop at
- * @return A copy of the characters up to the first stop character
- * @note This is the same as ap_getword(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_nc(apr_pool_t *p, char **line, char stop);
-
-/**
- * Get the first word from a given string. A word is defined as all characters
- * up to the first whitespace.
- * @param p The pool to allocate memory from
- * @param line The string to traverse
- * @return The first word in the line
- */
-AP_DECLARE(char *) ap_getword_white(apr_pool_t *p, const char **line);
-/**
- * Get the first word from a given string. A word is defined as all characters
- * up to the first whitespace.
- * @param p The pool to allocate memory from
- * @param line The string to traverse
- * @return The first word in the line
- * @note The same as ap_getword_white(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_white_nc(apr_pool_t *p, char **line);
-
-/**
- * Get all characters from the first occurance of @a stop to the first '\0'
- * @param p The pool to allocate memory from
- * @param line The line to traverse
- * @param stop The character to start at
- * @return A copy of all caracters after the first occurance of the specified
- * character
- */
-AP_DECLARE(char *) ap_getword_nulls(apr_pool_t *p, const char **line,
- char stop);
-/**
- * Get all characters from the first occurance of @a stop to the first '\0'
- * @param p The pool to allocate memory from
- * @param line The line to traverse
- * @param stop The character to start at
- * @return A copy of all caracters after the first occurance of the specified
- * character
- * @note The same as ap_getword_nulls(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_nulls_nc(apr_pool_t *p, char **line, char stop);
-
-/**
- * Get the second word in the string paying attention to quoting
- * @param p The pool to allocate from
- * @param line The line to traverse
- * @return A copy of the string
- */
-AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line);
-/**
- * Get the second word in the string paying attention to quoting
- * @param p The pool to allocate from
- * @param line The line to traverse
- * @return A copy of the string
- * @note The same as ap_getword_conf(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line);
-
-/**
- * Check a string for any ${ENV} environment variable construct and replace
- * each them by the value of that environment variable, if it exists. If the
- * environment value does not exist, leave the ${ENV} construct alone; it
- * means something else.
- * @param p The pool to allocate from
- * @param word The string to check
- * @return The string with the replaced environment variables
- */
-AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word);
-
-/**
- * Size an HTTP header field list item, as separated by a comma.
- * @param field The field to size
- * @param len The length of the field
- * @return The return value is a pointer to the beginning of the non-empty
- * list item within the original string (or NULL if there is none) and the
- * address of field is shifted to the next non-comma, non-whitespace
- * character. len is the length of the item excluding any beginning whitespace.
- */
-AP_DECLARE(const char *) ap_size_list_item(const char **field, int *len);
-
-/**
- * Retrieve an HTTP header field list item, as separated by a comma,
- * while stripping insignificant whitespace and lowercasing anything not in
- * a quoted string or comment.
- * @param p The pool to allocate from
- * @param field The field to retrieve
- * @return The return value is a new string containing the converted list
- * item (or NULL if none) and the address pointed to by field is
- * shifted to the next non-comma, non-whitespace.
- */
-AP_DECLARE(char *) ap_get_list_item(apr_pool_t *p, const char **field);
-
-/**
- * Find an item in canonical form (lowercase, no extra spaces) within
- * an HTTP field value list.
- * @param p The pool to allocate from
- * @param line The field value list to search
- * @param tok The token to search for
- * @return 1 if found, 0 if not found.
- */
-AP_DECLARE(int) ap_find_list_item(apr_pool_t *p, const char *line, const char *tok);
-
-/**
- * Retrieve a token, spacing over it and adjusting the pointer to
- * the first non-white byte afterwards. Note that these tokens
- * are delimited by semis and commas and can also be delimited
- * by whitespace at the caller's option.
- * @param p The pool to allocate from
- * @param accept_line The line to retrieve the token from (adjusted afterwards)
- * @param accept_white Is it delimited by whitespace
- * @return the token
- */
-AP_DECLARE(char *) ap_get_token(apr_pool_t *p, const char **accept_line, int accept_white);
-
-/**
- * Find http tokens, see the definition of token from RFC2068
- * @param p The pool to allocate from
- * @param line The line to find the token
- * @param tok The token to find
- * @return 1 if the token is found, 0 otherwise
- */
-AP_DECLARE(int) ap_find_token(apr_pool_t *p, const char *line, const char *tok);
-
-/**
- * find http tokens from the end of the line
- * @param p The pool to allocate from
- * @param line The line to find the token
- * @param tok The token to find
- * @return 1 if the token is found, 0 otherwise
- */
-AP_DECLARE(int) ap_find_last_token(apr_pool_t *p, const char *line, const char *tok);
-
-/**
- * Check for an Absolute URI syntax
- * @param u The string to check
- * @return 1 if URI, 0 otherwise
- */
-AP_DECLARE(int) ap_is_url(const char *u);
-
-/**
- * Unescape a URL
- * @param url The url to unescape
- * @return 0 on success, non-zero otherwise
- */
-AP_DECLARE(int) ap_unescape_url(char *url);
-/**
- * Unescape a URL, but leaving %2f (slashes) escaped
- * @param url The url to unescape
- * @return 0 on success, non-zero otherwise
- */
-AP_DECLARE(int) ap_unescape_url_keep2f(char *url);
-/**
- * Convert all double slashes to single slashes
- * @param name The string to convert
- */
-AP_DECLARE(void) ap_no2slash(char *name);
-
-/**
- * Remove all ./ and xx/../ substrings from a file name. Also remove
- * any leading ../ or /../ substrings.
- * @param name the file name to parse
- */
-AP_DECLARE(void) ap_getparents(char *name);
-
-/**
- * Escape a path segment, as defined in RFC 1808
- * @param p The pool to allocate from
- * @param s The path to convert
- * @return The converted URL
- */
-AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *s);
-/**
- * convert an OS path to a URL in an OS dependant way.
- * @param p The pool to allocate from
- * @param path The path to convert
- * @param partial if set, assume that the path will be appended to something
- * with a '/' in it (and thus does not prefix "./")
- * @return The converted URL
- */
-AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partial);
-/** @see ap_os_escape_path */
-#define ap_escape_uri(ppool,path) ap_os_escape_path(ppool,path,1)
-
-/**
- * Escape an html string
- * @param p The pool to allocate from
- * @param s The html to escape
- * @return The escaped string
- */
-AP_DECLARE(char *) ap_escape_html(apr_pool_t *p, const char *s);
-
-/**
- * Escape a string for logging
- * @param p The pool to allocate from
- * @param str The string to escape
- * @return The escaped string
- */
-AP_DECLARE(char *) ap_escape_logitem(apr_pool_t *p, const char *str);
-
-/**
- * Escape a string for logging into the error log (without a pool)
- * @param dest The buffer to write to
- * @param source The string to escape
- * @param buflen The buffer size for the escaped string (including \0)
- * @return The len of the escaped string (always < maxlen)
- */
-AP_DECLARE(apr_size_t) ap_escape_errorlog_item(char *dest, const char *source,
- apr_size_t buflen);
-
-/**
- * Construct a full hostname
- * @param p The pool to allocate from
- * @param hostname The hostname of the server
- * @param port The port the server is running on
- * @param r The current request
- * @return The server's hostname
- */
-AP_DECLARE(char *) ap_construct_server(apr_pool_t *p, const char *hostname,
- apr_port_t port, const request_rec *r);
-/**
- * Escape a shell command
- * @param p The pool to allocate from
- * @param s The command to escape
- * @return The escaped shell command
- */
-AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *s);
-
-/**
- * Count the number of directories in a path
- * @param path The path to count
- * @return The number of directories
- */
-AP_DECLARE(int) ap_count_dirs(const char *path);
-
-/**
- * Copy at most @a n leading directories of @a s into @a d. @a d
- * should be at least as large as @a s plus 1 extra byte
- *
- * @param d The location to copy to
- * @param s The location to copy from
- * @param n The number of directories to copy
- * @return value is the ever useful pointer to the trailing \0 of d
- * @note on platforms with drive letters, n = 0 returns the "/" root,
- * whereas n = 1 returns the "d:/" root. On all other platforms, n = 0
- * returns the empty string. */
-AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n);
-
-/**
- * Return the parent directory name (including trailing /) of the file
- * @a s
- * @param p The pool to allocate from
- * @param s The file to get the parent of
- * @return A copy of the file's parent directory
- */
-AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s);
-
-/**
- * Given a directory and filename, create a single path from them. This
- * function is smart enough to ensure that there is a sinlge '/' between the
- * directory and file names
- * @param a The pool to allocate from
- * @param dir The directory name
- * @param f The filename
- * @return A copy of the full path
- * @tip Never consider using this function if you are dealing with filesystem
- * names that need to remain canonical, unless you are merging an apr_dir_read
- * path and returned filename. Otherwise, the result is not canonical.
- */
-AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char *f);
-
-/**
- * Test if the given path has an an absolute path.
- * @param p The pool to allocate from
- * @param dir The directory name
- * @tip The converse is not necessarily true, some OS's (Win32/OS2/Netware) have
- * multiple forms of absolute paths. This only reports if the path is absolute
- * in a canonical sense.
- */
-AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir);
-
-/**
- * Does the provided string contain wildcard characters? This is useful
- * for determining if the string should be passed to strcmp_match or to strcmp.
- * The only wildcard characters recognized are '?' and '*'
- * @param str The string to check
- * @return 1 if the string has wildcards, 0 otherwise
- */
-AP_DECLARE(int) ap_is_matchexp(const char *str);
-
-/**
- * Determine if a string matches a patterm containing the wildcards '?' or '*'
- * @param str The string to check
- * @param expected The pattern to match against
- * @return 1 if the two strings match, 0 otherwise
- */
-AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected);
-/**
- * Determine if a string matches a patterm containing the wildcards '?' or '*',
- * ignoring case
- * @param str The string to check
- * @param expected The pattern to match against
- * @return 1 if the two strings match, 0 otherwise
- */
-AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *expected);
-
-/**
- * Find the first occurrence of the substring s2 in s1, regardless of case
- * @param s1 The string to search
- * @param s2 The substring to search for
- * @return A pointer to the beginning of the substring
- * @remark See apr_strmatch() for a faster alternative
- */
-AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2);
-
-/**
- * Return a pointer to the location inside of bigstring immediately after prefix
- * @param bigstring The input string
- * @param prefix The prefix to strip away
- * @return A pointer relative to bigstring after prefix
- */
-AP_DECLARE(const char *) ap_stripprefix(const char *bigstring,
- const char *prefix);
-
-/**
- * Decode a base64 encoded string into memory allocated from a pool
- * @param p The pool to allocate from
- * @param bufcoded The encoded string
- * @return The decoded string
- */
-AP_DECLARE(char *) ap_pbase64decode(apr_pool_t *p, const char *bufcoded);
-
-/**
- * Encode a string into memory allocated from a pool in base 64 format
- * @param p The pool to allocate from
- * @param strin The plaintext string
- * @return The encoded string
- */
-AP_DECLARE(char *) ap_pbase64encode(apr_pool_t *p, char *string);
-
-
-/**
- * Compile a regular expression to be used later
- * @param p The pool to allocate from
- * @param pattern the regular expression to compile
- * @param cflags The bitwise or of one or more of the following:
- * @li #REG_EXTENDED - Use POSIX extended Regular Expressions
- * @li #REG_ICASE - Ignore case
- * @li #REG_NOSUB - Support for substring addressing of matches
- * not required
- * @li #REG_NEWLINE - Match-any-character operators don't match new-line
- * @return The compiled regular expression
- */
-AP_DECLARE(regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern,
- int cflags);
-
-/**
- * Free the memory associated with a compiled regular expression
- * @param p The pool the regex was allocated from
- * @param reg The regular expression to free
- */
-AP_DECLARE(void) ap_pregfree(apr_pool_t *p, regex_t *reg);
-
-/**
- * Match a null-terminated string against a pre-compiled regex.
- * @param preg The pre-compiled regex
- * @param string The string to match
- * @param nmatch Provide information regarding the location of any matches
- * @param pmatch Provide information regarding the location of any matches
- * @param eflags Bitwise or of any of:
- * @li #REG_NOTBOL - match-beginning-of-line operator always
- * fails to match
- * @li #REG_NOTEOL - match-end-of-line operator always fails to match
- * @return 0 for successful match, #REG_NOMATCH otherwise
- */
-AP_DECLARE(int) ap_regexec(regex_t *preg, const char *string,
- size_t nmatch, regmatch_t pmatch[], int eflags);
-
-/**
- * Return the error code returned by regcomp or regexec into error messages
- * @param errcode the error code returned by regexec or regcomp
- * @param preg The precompiled regex
- * @param errbuf A buffer to store the error in
- * @param errbuf_size The size of the buffer
- */
-AP_DECLARE(size_t) ap_regerror(int errcode, const regex_t *preg,
- char *errbuf, size_t errbuf_size);
-
-/**
- * After performing a successful regex match, you may use this function to
- * perform a series of string substitutions based on subexpressions that were
- * matched during the call to ap_regexec
- * @param p The pool to allocate from
- * @param input An arbitrary string containing $1 through $9. These are
- * replaced with the corresponding matched sub-expressions
- * @param source The string that was originally matched to the regex
- * @param nmatch the nmatch returned from ap_pregex
- * @param pmatch the pmatch array returned from ap_pregex
- */
-AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input, const char *source,
- size_t nmatch, regmatch_t pmatch[]);
-
-/**
- * We want to downcase the type/subtype for comparison purposes
- * but nothing else because ;parameter=foo values are case sensitive.
- * @param s The content-type to convert to lowercase
- */
-AP_DECLARE(void) ap_content_type_tolower(char *s);
-
-/**
- * convert a string to all lowercase
- * @param s The string to convert to lowercase
- */
-AP_DECLARE(void) ap_str_tolower(char *s);
-
-/**
- * Search a string from left to right for the first occurrence of a
- * specific character
- * @param str The string to search
- * @param c The character to search for
- * @return The index of the first occurrence of c in str
- */
-AP_DECLARE(int) ap_ind(const char *str, char c); /* Sigh... */
-
-/**
- * Search a string from right to left for the first occurrence of a
- * specific character
- * @param str The string to search
- * @param c The character to search for
- * @return The index of the first occurrence of c in str
- */
-AP_DECLARE(int) ap_rind(const char *str, char c);
-
-/**
- * Given a string, replace any bare " with \" .
- * @param p The pool to allocate memory from
- * @param instring The string to search for "
- * @return A copy of the string with escaped quotes
- */
-AP_DECLARE(char *) ap_escape_quotes(apr_pool_t *p, const char *instring);
-
-/* Misc system hackery */
-/**
- * Given the name of an object in the file system determine if it is a directory
- * @param p The pool to allocate from
- * @param name The name of the object to check
- * @return 1 if it is a directory, 0 otherwise
- */
-AP_DECLARE(int) ap_is_rdirectory(apr_pool_t *p, const char *name);
-
-/**
- * Given the name of an object in the file system determine if it is a directory - this version is symlink aware
- * @param p The pool to allocate from
- * @param name The name of the object to check
- * @return 1 if it is a directory, 0 otherwise
- */
-AP_DECLARE(int) ap_is_directory(apr_pool_t *p, const char *name);
-
-#ifdef _OSD_POSIX
-extern int os_init_job_environment(server_rec *s, const char *user_name, int one_process);
-#endif /* _OSD_POSIX */
-
-/**
- * Determine the local host name for the current machine
- * @param p The pool to allocate from
- * @return A copy of the local host name
- */
-char *ap_get_local_host(apr_pool_t *p);
-
-/**
- * Log an assertion to the error log
- * @param szExp The assertion that failed
- * @param szFile The file the assertion is in
- * @param nLine The line the assertion is defined on
- */
-AP_DECLARE(void) ap_log_assert(const char *szExp, const char *szFile, int nLine)
- __attribute__((noreturn));
-
-/** @internal */
-#define ap_assert(exp) ((exp) ? (void)0 : ap_log_assert(#exp,__FILE__,__LINE__))
-
-/**
- * Redefine assert() to something more useful for an Apache...
- *
- * Use ap_assert() if the condition should always be checked.
- * Use AP_DEBUG_ASSERT() if the condition should only be checked when AP_DEBUG
- * is defined.
- */
-
-#ifdef AP_DEBUG
-#define AP_DEBUG_ASSERT(exp) ap_assert(exp)
-#else
-#define AP_DEBUG_ASSERT(exp) ((void)0)
-#endif
-
-/**
- * @defgroup stopsignal flags which indicate places where the sever should stop for debugging.
- * @{
- * A set of flags which indicate places where the server should raise(SIGSTOP).
- * This is useful for debugging, because you can then attach to that process
- * with gdb and continue. This is important in cases where one_process
- * debugging isn't possible.
- */
-/** stop on a Detach */
-#define SIGSTOP_DETACH 1
-/** stop making a child process */
-#define SIGSTOP_MAKE_CHILD 2
-/** stop spawning a child process */
-#define SIGSTOP_SPAWN_CHILD 4
-/** stop spawning a child process with a piped log */
-#define SIGSTOP_PIPED_LOG_SPAWN 8
-/** stop spawning a CGI child process */
-#define SIGSTOP_CGI_CHILD 16
-
-/** Macro to get GDB started */
-#ifdef DEBUG_SIGSTOP
-extern int raise_sigstop_flags;
-#define RAISE_SIGSTOP(x) do { \
- if (raise_sigstop_flags & SIGSTOP_##x) raise(SIGSTOP);\
- } while (0)
-#else
-#define RAISE_SIGSTOP(x)
-#endif
-/** @} */
-/**
- * Get HTML describing the address and (optionally) admin of the server.
- * @param prefix Text which is prepended to the return value
- * @param r The request_rec
- * @return HTML describing the server, allocated in @a r's pool.
- */
-AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r);
-
-/** strtoul does not exist on sunos4. */
-#ifdef strtoul
-#undef strtoul
-#endif
-#define strtoul strtoul_is_not_a_portable_function_use_strtol_instead
-
- /* The C library has functions that allow const to be silently dropped ...
- these macros detect the drop in maintainer mode, but use the native
- methods for normal builds
-
- Note that on some platforms (e.g., AIX with gcc, Solaris with gcc), string.h needs
- to be included before the macros are defined or compilation will fail.
- */
-#include <string.h>
-
-AP_DECLARE(char *) ap_strchr(char *s, int c);
-AP_DECLARE(const char *) ap_strchr_c(const char *s, int c);
-AP_DECLARE(char *) ap_strrchr(char *s, int c);
-AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c);
-AP_DECLARE(char *) ap_strstr(char *s, const char *c);
-AP_DECLARE(const char *) ap_strstr_c(const char *s, const char *c);
-
-#ifdef AP_DEBUG
-
-#undef strchr
-# define strchr(s, c) ap_strchr(s,c)
-#undef strrchr
-# define strrchr(s, c) ap_strrchr(s,c)
-#undef strstr
-# define strstr(s, c) ap_strstr(s,c)
-
-#else
-
-/** use this instead of strchr */
-# define ap_strchr(s, c) strchr(s, c)
-/** use this instead of strchr */
-# define ap_strchr_c(s, c) strchr(s, c)
-/** use this instead of strrchr */
-# define ap_strrchr(s, c) strrchr(s, c)
-/** use this instead of strrchr */
-# define ap_strrchr_c(s, c) strrchr(s, c)
-/** use this instead of strrstr*/
-# define ap_strstr(s, c) strstr(s, c)
-/** use this instead of strrstr*/
-# define ap_strstr_c(s, c) strstr(s, c)
-
-#endif
-
-#define AP_NORESTART APR_OS_START_USEERR + 1
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_HTTPD_H */
diff --git a/include/mpm_common.h b/include/mpm_common.h
deleted file mode 100644
index 85a4db5606..0000000000
--- a/include/mpm_common.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* The purpose of this file is to store the code that MOST mpm's will need
- * this does not mean a function only goes into this file if every MPM needs
- * it. It means that if a function is needed by more than one MPM, and
- * future maintenance would be served by making the code common, then the
- * function belongs here.
- *
- * This is going in src/main because it is not platform specific, it is
- * specific to multi-process servers, but NOT to Unix. Which is why it
- * does not belong in src/os/unix
- */
-
-#ifndef APACHE_MPM_COMMON_H
-#define APACHE_MPM_COMMON_H
-
-#include "ap_config.h"
-
-#if APR_HAVE_NETINET_TCP_H
-#include <netinet/tcp.h> /* for TCP_NODELAY */
-#endif
-
-#include "mpm.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Multi-Processing Modules functions
- */
-
-/* The maximum length of the queue of pending connections, as defined
- * by listen(2). Under some systems, it should be increased if you
- * are experiencing a heavy TCP SYN flood attack.
- *
- * It defaults to 511 instead of 512 because some systems store it
- * as an 8-bit datatype; 512 truncated to 8-bits is 0, while 511 is
- * 255 when truncated.
- */
-#ifndef DEFAULT_LISTENBACKLOG
-#define DEFAULT_LISTENBACKLOG 511
-#endif
-
-/**
- * Make sure all child processes that have been spawned by the parent process
- * have died. This includes process registered as "other_children".
- * @warning This is only defined if the MPM defines
- * MPM_NEEDS_RECLAIM_CHILD_PROCESS
- * @param terminate Either 1 or 0. If 1, send the child processes SIGTERM
- * each time through the loop. If 0, give the process time to die
- * on its own before signalling it.
- * @tip This function requires that some macros are defined by the MPM: <pre>
- * MPM_CHILD_PID -- Get the pid from the specified spot in the scoreboard
- * MPM_NOTE_CHILD_KILLED -- Note the child died in the scoreboard
- * </pre>
- */
-#ifdef AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-void ap_reclaim_child_processes(int terminate);
-#endif
-
-/**
- * Determine if any child process has died. If no child process died, then
- * this process sleeps for the amount of time specified by the MPM defined
- * macro SCOREBOARD_MAINTENANCE_INTERVAL.
- * @param status The return code if a process has died
- * @param ret The process id of the process that died
- * @param p The pool to allocate out of
- */
-#ifdef AP_MPM_WANT_WAIT_OR_TIMEOUT
-void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret,
- apr_pool_t *p);
-#endif
-
-/**
- * Log why a child died to the error log, if the child died without the
- * parent signalling it.
- * @param pid The child that has died
- * @param status The status returned from ap_wait_or_timeout
- * @return 0 on success, APEXIT_CHILDFATAL if MPM should terminate
- */
-#ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS
-int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status);
-#endif
-
-#if defined(TCP_NODELAY) && !defined(MPE) && !defined(TPF)
-/**
- * Turn off the nagle algorithm for the specified socket. The nagle algorithm
- * says that we should delay sending partial packets in the hopes of getting
- * more data. There are bad interactions between persistent connections and
- * Nagle's algorithm that have severe performance penalties.
- * @param s The socket to disable nagle for.
- */
-void ap_sock_disable_nagle(apr_socket_t *s);
-#else
-#define ap_sock_disable_nagle(s) /* NOOP */
-#endif
-
-#ifdef HAVE_GETPWNAM
-/**
- * Convert a username to a numeric ID
- * @param name The name to convert
- * @return The user id corresponding to a name
- * @deffunc uid_t ap_uname2id(const char *name)
- */
-AP_DECLARE(uid_t) ap_uname2id(const char *name);
-#endif
-
-#ifdef HAVE_GETGRNAM
-/**
- * Convert a group name to a numeric ID
- * @param name The name to convert
- * @return The group id corresponding to a name
- * @deffunc gid_t ap_gname2id(const char *name)
- */
-AP_DECLARE(gid_t) ap_gname2id(const char *name);
-#endif
-
-#define AP_MPM_HARD_LIMITS_FILE APACHE_MPM_DIR "/mpm_default.h"
-
-#ifdef AP_MPM_USES_POD
-
-typedef struct ap_pod_t ap_pod_t;
-
-struct ap_pod_t {
- apr_file_t *pod_in;
- apr_file_t *pod_out;
- apr_pool_t *p;
-};
-
-/**
- * Open the pipe-of-death. The pipe of death is used to tell all child
- * processes that it is time to die gracefully.
- * @param p The pool to use for allocating the pipe
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod);
-
-/**
- * Check the pipe to determine if the process has been signalled to die.
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_check(ap_pod_t *pod);
-
-/**
- * Close the pipe-of-death
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod);
-
-/**
- * Write data to the pipe-of-death, signalling that one child process
- * should die.
- * @param p The pool to use when allocating any required structures.
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod);
-
-/**
- * Write data to the pipe-of-death, signalling that all child process
- * should die.
- * @param p The pool to use when allocating any required structures.
- * @param num The number of child processes to kill
- */
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num);
-#endif
-
-/*
- * These data members are common to all mpms. Each new mpm
- * should either use the appropriate ap_mpm_set_* function
- * in their command table or create their own for custom or
- * OS specific needs. These should work for most.
- */
-
-/**
- * The maximum number of requests each child thread or
- * process handles before dying off
- */
-#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
-extern int ap_max_requests_per_child;
-const char *ap_mpm_set_max_requests(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-/**
- * The filename used to store the process id.
- */
-#ifdef AP_MPM_WANT_SET_PIDFILE
-extern const char *ap_pid_fname;
-const char *ap_mpm_set_pidfile(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-/**
- * The name of lockfile used when Apache needs to lock the accept() call.
- */
-#ifdef AP_MPM_WANT_SET_LOCKFILE
-extern const char *ap_lock_fname;
-const char *ap_mpm_set_lockfile(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-/**
- * The system mutex implementation to use for the accept mutex.
- */
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-extern apr_lockmech_e ap_accept_lock_mech;
-extern const char ap_valid_accept_mutex_string[];
-const char *ap_mpm_set_accept_lock_mech(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-/*
- * Set the scorboard file.
- */
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-const char *ap_mpm_set_scoreboard(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-/*
- * The directory that the server changes directory to dump core.
- */
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
-extern char ap_coredump_dir[MAX_STRING_LEN];
-extern int ap_coredumpdir_configured;
-const char *ap_mpm_set_coredumpdir(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-#ifdef AP_MPM_WANT_SIGNAL_SERVER
-int ap_signal_server(int *, apr_pool_t *);
-void ap_mpm_rewrite_args(process_rec *);
-#endif
-
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
-extern apr_uint32_t ap_max_mem_free;
-extern const char *ap_mpm_set_max_mem_free(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-#ifdef AP_MPM_WANT_SET_STACKSIZE
-extern apr_size_t ap_thread_stacksize;
-extern const char *ap_mpm_set_thread_stacksize(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-#ifdef AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-extern apr_status_t ap_fatal_signal_setup(server_rec *s, apr_pool_t *pconf);
-extern apr_status_t ap_fatal_signal_child_setup(server_rec *s);
-#endif
-
-#if AP_ENABLE_EXCEPTION_HOOK
-extern const char *ap_mpm_set_exception_hook(cmd_parms *cmd, void *dummy,
- const char *arg);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_MPM_COMMON_H */
diff --git a/include/pcreposix.h b/include/pcreposix.h
deleted file mode 100644
index a847421fce..0000000000
--- a/include/pcreposix.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-/**
- * @file include/pcreposix.h
- * @brief PCRE definitions
- */
-
-#ifndef _PCREPOSIX_H
-#define _PCREPOSIX_H
-
-/* This is the header for the POSIX wrapper interface to the PCRE Perl-
-Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
-
-/* Have to include stdlib.h in order to ensure that size_t is defined. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options defined by POSIX. */
-
- /** Ignore case */
-#define REG_ICASE 0x01
- /** Don't match newlines with wildcards */
-#define REG_NEWLINE 0x02
- /** Don't match BOL */
-#define REG_NOTBOL 0x04
- /** Don't match EOL */
-#define REG_NOTEOL 0x08
-
-/* These are not used by PCRE, but by defining them we make it easier
-to slot PCRE into existing programs that make POSIX calls. */
-
- /** UNUSED! */
-#define REG_EXTENDED 0
- /** UNUSED! */
-#define REG_NOSUB 0
-
-/* Error values. Not all these are relevant or used by the wrapper. */
-
-enum {
- REG_ASSERT = 1, /* internal error ? */
- REG_BADBR, /* invalid repeat counts in {} */
- REG_BADPAT, /* pattern error */
- REG_BADRPT, /* ? * + invalid */
- REG_EBRACE, /* unbalanced {} */
- REG_EBRACK, /* unbalanced [] */
- REG_ECOLLATE, /* collation error - not relevant */
- REG_ECTYPE, /* bad class */
- REG_EESCAPE, /* bad escape sequence */
- REG_EMPTY, /* empty expression */
- REG_EPAREN, /* unbalanced () */
- REG_ERANGE, /* bad range inside [] */
- REG_ESIZE, /* expression too big */
- REG_ESPACE, /* failed to get memory */
- REG_ESUBREG, /* bad back reference */
- REG_INVARG, /* bad argument */
- REG_NOMATCH /* match failed */
-};
-
-
-/* The structure representing a compiled regular expression. */
-
-typedef struct {
- void *re_pcre;
- size_t re_nsub;
- size_t re_erroffset;
-} regex_t;
-
-/* The structure in which a captured offset is returned. */
-
-typedef int regoff_t;
-
-typedef struct {
- regoff_t rm_so;
- regoff_t rm_eo;
-} regmatch_t;
-
-/* The functions */
-
-extern int regcomp(regex_t *, const char *, int);
-extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
-extern size_t regerror(int, const regex_t *, char *, size_t);
-extern void regfree(regex_t *);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcreposix.h */
diff --git a/include/scoreboard.h b/include/scoreboard.h
deleted file mode 100644
index 59f1e9418a..0000000000
--- a/include/scoreboard.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_SCOREBOARD_H
-#define APACHE_SCOREBOARD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef HAVE_SYS_TIMES_H
-#include <sys/time.h>
-#include <sys/times.h>
-#elif defined(TPF)
-#include <time.h>
-#endif
-
-#include "ap_config.h"
-#include "apr_hooks.h"
-#include "apr_thread_proc.h"
-#include "apr_portable.h"
-#include "apr_shm.h"
-#include "apr_optional.h"
-
-/* Scoreboard file, if there is one */
-#ifndef DEFAULT_SCOREBOARD
-#define DEFAULT_SCOREBOARD "logs/apache_runtime_status"
-#endif
-
-/* Scoreboard info on a process is, for now, kept very brief ---
- * just status value and pid (the latter so that the caretaker process
- * can properly update the scoreboard when a process dies). We may want
- * to eventually add a separate set of long_score structures which would
- * give, for each process, the number of requests serviced, and info on
- * the current, or most recent, request.
- *
- * Status values:
- */
-
-#define SERVER_DEAD 0
-#define SERVER_STARTING 1 /* Server Starting up */
-#define SERVER_READY 2 /* Waiting for connection (or accept() lock) */
-#define SERVER_BUSY_READ 3 /* Reading a client request */
-#define SERVER_BUSY_WRITE 4 /* Processing a client request */
-#define SERVER_BUSY_KEEPALIVE 5 /* Waiting for more requests via keepalive */
-#define SERVER_BUSY_LOG 6 /* Logging the request */
-#define SERVER_BUSY_DNS 7 /* Looking up a hostname */
-#define SERVER_CLOSING 8 /* Closing the connection */
-#define SERVER_GRACEFUL 9 /* server is gracefully finishing request */
-#define SERVER_IDLE_KILL 10 /* Server is cleaning up idle children. */
-#define SERVER_NUM_STATUS 11 /* number of status settings */
-
-/* Type used for generation indicies. Startup and every restart cause a
- * new generation of children to be spawned. Children within the same
- * generation share the same configuration information -- pointers to stuff
- * created at config time in the parent are valid across children. However,
- * this can't work effectively with non-forked architectures. So while the
- * arrays in the scoreboard never change between the parent and forked
- * children, so they do not require shm storage, the contents of the shm
- * may contain no pointers.
- */
-typedef int ap_generation_t;
-
-/* Is the scoreboard shared between processes or not?
- * Set by the MPM when the scoreboard is created.
- */
-typedef enum {
- SB_NOT_SHARED = 1,
- SB_SHARED = 2
-} ap_scoreboard_e;
-
-#define SB_WORKING 0 /* The server is busy and the child is useful. */
-#define SB_IDLE_DIE 1 /* The server is idle and the child is superfluous. */
- /* The child should check for this and exit gracefully. */
-
-/* stuff which is worker specific */
-/***********************WARNING***************************************/
-/* These are things that are used by mod_status. Do not put anything */
-/* in here that you cannot live without. This structure will not */
-/* be available if mod_status is not loaded. */
-/*********************************************************************/
-typedef struct worker_score worker_score;
-
-struct worker_score {
- int thread_num;
-#if APR_HAS_THREADS
- apr_os_thread_t tid;
-#endif
- unsigned char status;
- unsigned long access_count;
- apr_off_t bytes_served;
- unsigned long my_access_count;
- apr_off_t my_bytes_served;
- apr_off_t conn_bytes;
- unsigned short conn_count;
- apr_time_t start_time;
- apr_time_t stop_time;
-#ifdef HAVE_TIMES
- struct tms times;
-#endif
- apr_time_t last_used;
- char client[32]; /* Keep 'em small... */
- char request[64]; /* We just want an idea... */
- char vhost[32]; /* What virtual host is being accessed? */
-};
-
-typedef struct {
- int server_limit;
- int thread_limit;
- ap_scoreboard_e sb_type;
- ap_generation_t running_generation; /* the generation of children which
- * should still be serving requests.
- */
- apr_time_t restart_time;
- int lb_limit;
-} global_score;
-
-/* stuff which the parent generally writes and the children rarely read */
-typedef struct process_score process_score;
-struct process_score{
- pid_t pid;
- ap_generation_t generation; /* generation of this child */
- ap_scoreboard_e sb_type;
- int quiescing; /* the process whose pid is stored above is
- * going down gracefully
- */
-};
-
-/* stuff which is lb specific */
-typedef struct lb_score lb_score;
-struct lb_score{
- /* TODO: make a real stuct from this */
- unsigned char data[1024];
-};
-
-/* Scoreboard is now in 'local' memory, since it isn't updated once created,
- * even in forked architectures. Child created-processes (non-fork) will
- * set up these indicies into the (possibly relocated) shmem records.
- */
-typedef struct {
- global_score *global;
- process_score *parent;
- worker_score **servers;
- lb_score **balancers;
-} scoreboard;
-
-typedef struct ap_sb_handle_t ap_sb_handle_t;
-
-AP_DECLARE(int) ap_exists_scoreboard_image(void);
-AP_DECLARE(void) ap_increment_counts(ap_sb_handle_t *sbh, request_rec *r);
-
-int ap_create_scoreboard(apr_pool_t *p, ap_scoreboard_e t);
-apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached);
-void ap_init_scoreboard(void *shared_score);
-AP_DECLARE(int) ap_calc_scoreboard_size(void);
-apr_status_t ap_cleanup_scoreboard(void *d);
-
-AP_DECLARE(void) ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p,
- int child_num, int thread_num);
-
-AP_DECLARE(int) find_child_by_pid(apr_proc_t *pid);
-AP_DECLARE(int) ap_update_child_status(ap_sb_handle_t *sbh, int status, request_rec *r);
-AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num, int thread_num,
- int status, request_rec *r);
-void ap_time_process_request(int child_num, int thread_num, int status);
-
-AP_DECLARE(worker_score *) ap_get_scoreboard_worker(int x, int y);
-AP_DECLARE(process_score *) ap_get_scoreboard_process(int x);
-AP_DECLARE(global_score *) ap_get_scoreboard_global(void);
-AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int child_num, int lb_num);
-
-AP_DECLARE_DATA extern scoreboard *ap_scoreboard_image;
-AP_DECLARE_DATA extern const char *ap_scoreboard_fname;
-AP_DECLARE_DATA extern int ap_extended_status;
-
-AP_DECLARE_DATA extern ap_generation_t volatile ap_my_generation;
-
-/* Hooks */
-/**
- * Hook for post scoreboard creation, pre mpm.
- * @param p Apache pool to allocate from.
- * @param sb_type
- * @ingroup hooks
- * @return OK or DECLINE on success; anything else is a error
- */
-AP_DECLARE_HOOK(int, pre_mpm, (apr_pool_t *p, ap_scoreboard_e sb_type))
-
-/**
- * proxy load balancer
- * @return the number of load balancer workers.
- */
-APR_DECLARE_OPTIONAL_FN(int, ap_proxy_lb_workers,
- (void));
-
-/* for time_process_request() in http_main.c */
-#define START_PREQUEST 1
-#define STOP_PREQUEST 2
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_SCOREBOARD_H */
diff --git a/include/util_cfgtree.h b/include/util_cfgtree.h
deleted file mode 100644
index 828cc6e6e3..0000000000
--- a/include/util_cfgtree.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_CONFTREE_H
-#define AP_CONFTREE_H
-
-#include "ap_config.h"
-
-/**
- * @package Config Tree Package
- */
-
-typedef struct ap_directive_t ap_directive_t;
-
-/**
- * Structure used to build the config tree. The config tree only stores
- * the directives that will be active in the running server. Directives
- * that contain other directions, such as <Directory ...> cause a sub-level
- * to be created, where the included directives are stored. The closing
- * directive (</Directory>) is not stored in the tree.
- */
-struct ap_directive_t {
- /** The current directive */
- const char *directive;
- /** The arguments for the current directive, stored as a space
- * separated list */
- const char *args;
- /** The next directive node in the tree
- * @defvar ap_directive_t *next */
- struct ap_directive_t *next;
- /** The first child node of this directive
- * @defvar ap_directive_t *first_child */
- struct ap_directive_t *first_child;
- /** The parent node of this directive
- * @defvar ap_directive_t *parent */
- struct ap_directive_t *parent;
-
- /** directive's module can store add'l data here */
- void *data;
-
- /* ### these may go away in the future, but are needed for now */
- /** The name of the file this directive was found in */
- const char *filename;
- /** The line number the directive was on */
- int line_num;
-};
-
-/**
- * The root of the configuration tree
- * @defvar ap_directive_t *conftree
- */
-AP_DECLARE_DATA extern ap_directive_t *ap_conftree;
-
-/**
- * Add a node to the configuration tree.
- * @param parent The current parent node. If the added node is a first_child,
- then this is changed to the current node
- * @param current The current node
- * @param toadd The node to add to the tree
- * @param child Is the node to add a child node
- * @return the added node
- */
-ap_directive_t *ap_add_node(ap_directive_t **parent, ap_directive_t *current,
- ap_directive_t *toadd, int child);
-
-#endif
diff --git a/include/util_charset.h b/include/util_charset.h
deleted file mode 100644
index 233f20b35c..0000000000
--- a/include/util_charset.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_UTIL_CHARSET_H
-#define APACHE_UTIL_CHARSET_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package charset conversion
- */
-#include "apr.h"
-
-#if APR_CHARSET_EBCDIC
-
-#include "apr_xlate.h"
-
-/** On EBCDIC machine this is a translation handle used to translate the
- * headers from the local machine format to ASCII for network transmission.
- * On an ASCII machine this is NULL */
-extern apr_xlate_t *ap_hdrs_to_ascii;
-/** On EBCDIC machine this is a translation handle used to translate the
- * headers from ASCII to the local machine format after network transmission.
- * On an ASCII machine this is NULL */
-extern apr_xlate_t *ap_hdrs_from_ascii;
-
-#endif /* APR_CHARSET_EBCDIC */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_UTIL_CHARSET_H */
diff --git a/include/util_ebcdic.h b/include/util_ebcdic.h
deleted file mode 100644
index 39d2e14a3b..0000000000
--- a/include/util_ebcdic.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_UTIL_EBCDIC_H
-#define APACHE_UTIL_EBCDIC_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "apr_xlate.h"
-#include "httpd.h"
-#include "util_charset.h"
-
-/**
- * @package Utilities for EBCDIC conversion
- */
-
-#if APR_CHARSET_EBCDIC
-
-/**
- * Setup all of the global translation handlers
- * @param pool pool to allocate out of
- */
-apr_status_t ap_init_ebcdic(apr_pool_t *pool);
-
-/**
- * Convert protocol data from the implementation character
- * set to ASCII.
- * @param buffer buffer to translate
- * @param len number of bytes to translate
- */
-void ap_xlate_proto_to_ascii(char *buffer, apr_size_t len);
-
-/**
- * Convert protocol data to the implementation character
- * set from ASCII.
- * @param buffer buffer to translate
- * @param len number of bytes to translate
- */
-void ap_xlate_proto_from_ascii(char *buffer, apr_size_t len);
-
-/**
- * Convert protocol data from the implementation charater
- * set to ASCII, then send it.
- * @param r the current request
- * @param ... the strings to write, followed by a NULL pointer
- */
-int ap_rvputs_proto_in_ascii(request_rec *r, ...);
-
-#else /* APR_CHARSET_EBCDIC */
-
-#define ap_xlate_proto_to_ascii(x,y) /* NOOP */
-#define ap_xlate_proto_from_ascii(x,y) /* NOOP */
-
-#define ap_rvputs_proto_in_ascii ap_rvputs
-
-#endif /* APR_CHARSET_EBCDIC */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_UTIL_EBCDIC_H */
diff --git a/include/util_filter.h b/include/util_filter.h
deleted file mode 100644
index 33df5d40dc..0000000000
--- a/include/util_filter.h
+++ /dev/null
@@ -1,515 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_FILTER_H
-#define AP_FILTER_H
-
-#include "apr.h"
-#include "apr_buckets.h"
-
-#include "httpd.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @file util_filter.h
- * @brief Apache filter library
- */
-
-/** Returned by the bottom-most filter if no data was written.
- * @see ap_pass_brigade(). */
-#define AP_NOBODY_WROTE -1
-/** Returned by the bottom-most filter if no data was read.
- * @see ap_get_brigade(). */
-#define AP_NOBODY_READ -2
-/** Returned when?? @bug find out when! */
-#define AP_FILTER_ERROR -3
-
-/**
- * input filtering modes
- */
-typedef enum {
- /** The filter should return at most readbytes data. */
- AP_MODE_READBYTES,
- /** The filter should return at most one line of CRLF data.
- * (If a potential line is too long or no CRLF is found, the
- * filter may return partial data).
- */
- AP_MODE_GETLINE,
- /** The filter should implicitly eat any CRLF pairs that it sees. */
- AP_MODE_EATCRLF,
- /** The filter read should be treated as speculative and any returned
- * data should be stored for later retrieval in another mode. */
- AP_MODE_SPECULATIVE,
- /** The filter read should be exhaustive and read until it can not
- * read any more.
- * Use this mode with extreme caution.
- */
- AP_MODE_EXHAUSTIVE,
- /** The filter should initialize the connection if needed,
- * NNTP or FTP over SSL for example.
- */
- AP_MODE_INIT
-} ap_input_mode_t;
-
-/**
- * @defgroup filter FILTER CHAIN
- *
- * Filters operate using a "chaining" mechanism. The filters are chained
- * together into a sequence. When output is generated, it is passed through
- * each of the filters on this chain, until it reaches the end (or "bottom")
- * and is placed onto the network.
- *
- * The top of the chain, the code generating the output, is typically called
- * a "content generator." The content generator's output is fed into the
- * filter chain using the standard Apache output mechanisms: ap_rputs(),
- * ap_rprintf(), ap_rwrite(), etc.
- *
- * Each filter is defined by a callback. This callback takes the output from
- * the previous filter (or the content generator if there is no previous
- * filter), operates on it, and passes the result to the next filter in the
- * chain. This pass-off is performed using the ap_fc_* functions, such as
- * ap_fc_puts(), ap_fc_printf(), ap_fc_write(), etc.
- *
- * When content generation is complete, the system will pass an "end of
- * stream" marker into the filter chain. The filters will use this to flush
- * out any internal state and to detect incomplete syntax (for example, an
- * unterminated SSI directive).
- */
-
-/* forward declare the filter type */
-typedef struct ap_filter_t ap_filter_t;
-
-/**
- * @name Filter callbacks
- *
- * This function type is used for filter callbacks. It will be passed a
- * pointer to "this" filter, and a "bucket" containing the content to be
- * filtered.
- *
- * In filter->ctx, the callback will find its context. This context is
- * provided here, so that a filter may be installed multiple times, each
- * receiving its own per-install context pointer.
- *
- * Callbacks are associated with a filter definition, which is specified
- * by name. See ap_register_input_filter() and ap_register_output_filter()
- * for setting the association between a name for a filter and its
- * associated callback (and other information).
- *
- * If the initialization function argument passed to the registration
- * functions is non-NULL, it will be called iff the filter is in the input
- * or output filter chains and before any data is generated to allow the
- * filter to prepare for processing.
- *
- * The *bucket structure (and all those referenced by ->next and ->prev)
- * should be considered "const". The filter is allowed to modify the
- * next/prev to insert/remove/replace elements in the bucket list, but
- * the types and values of the individual buckets should not be altered.
- *
- * For the input and output filters, the return value of a filter should be
- * an APR status value. For the init function, the return value should
- * be an HTTP error code or OK if it was successful.
- *
- * @ingroup filter
- * @{
- */
-typedef apr_status_t (*ap_out_filter_func)(ap_filter_t *f,
- apr_bucket_brigade *b);
-typedef apr_status_t (*ap_in_filter_func)(ap_filter_t *f,
- apr_bucket_brigade *b,
- ap_input_mode_t mode,
- apr_read_type_e block,
- apr_off_t readbytes);
-typedef int (*ap_init_filter_func)(ap_filter_t *f);
-
-typedef union ap_filter_func {
- ap_out_filter_func out_func;
- ap_in_filter_func in_func;
-} ap_filter_func;
-
-/** @} */
-
-/**
- * Filters have different types/classifications. These are used to group
- * and sort the filters to properly sequence their operation.
- *
- * The types have a particular sort order, which allows us to insert them
- * into the filter chain in a determistic order. Within a particular grouping,
- * the ordering is equivalent to the order of calls to ap_add_*_filter().
- */
-typedef enum {
- /** These filters are used to alter the content that is passed through
- * them. Examples are SSI or PHP. */
- AP_FTYPE_RESOURCE = 10,
- /** These filters are used to alter the content as a whole, but after all
- * AP_FTYPE_RESOURCE filters are executed. These filters should not
- * change the content-type. An example is deflate. */
- AP_FTYPE_CONTENT_SET = 20,
- /** These filters are used to handle the protocol between server and
- * client. Examples are HTTP and POP. */
- AP_FTYPE_PROTOCOL = 30,
- /** These filters implement transport encodings (e.g., chunking). */
- AP_FTYPE_TRANSCODE = 40,
- /** These filters will alter the content, but in ways that are
- * more strongly associated with the connection. Examples are
- * splitting an HTTP connection into multiple requests and
- * buffering HTTP responses across multiple requests.
- *
- * It is important to note that these types of filters are not
- * allowed in a sub-request. A sub-request's output can certainly
- * be filtered by ::AP_FTYPE_RESOURCE filters, but all of the "final
- * processing" is determined by the main request. */
- AP_FTYPE_CONNECTION = 50,
- /** These filters don't alter the content. They are responsible for
- * sending/receiving data to/from the client. */
- AP_FTYPE_NETWORK = 60
-} ap_filter_type;
-
-/**
- * This is the request-time context structure for an installed filter (in
- * the output filter chain). It provides the callback to use for filtering,
- * the request this filter is associated with (which is important when
- * an output chain also includes sub-request filters), the context for this
- * installed filter, and the filter ordering/chaining fields.
- *
- * Filter callbacks are free to use ->ctx as they please, to store context
- * during the filter process. Generally, this is superior over associating
- * the state directly with the request. A callback should not change any of
- * the other fields.
- */
-
-typedef struct ap_filter_rec_t ap_filter_rec_t;
-
-/**
- * This structure is used for recording information about the
- * registered filters. It associates a name with the filter's callback
- * and filter type.
- *
- * At the moment, these are simply linked in a chain, so a ->next pointer
- * is available.
- */
-struct ap_filter_rec_t {
- /** The registered name for this filter */
- const char *name;
- /** The function to call when this filter is invoked. */
- ap_filter_func filter_func;
- /** The function to call before the handlers are invoked. Notice
- * that this function is called only for filters participating in
- * the http protocol. Filters for other protocols are to be
- * initiliazed by the protocols themselves. */
- ap_init_filter_func filter_init_func;
- /** The type of filter, either AP_FTYPE_CONTENT or AP_FTYPE_CONNECTION.
- * An AP_FTYPE_CONTENT filter modifies the data based on information
- * found in the content. An AP_FTYPE_CONNECTION filter modifies the
- * data based on the type of connection.
- */
- ap_filter_type ftype;
-
- /** The next filter_rec in the list */
- struct ap_filter_rec_t *next;
-};
-
-/**
- * The representation of a filter chain. Each request has a list
- * of these structures which are called in turn to filter the data. Sub
- * requests get an exact copy of the main requests filter chain.
- */
-struct ap_filter_t {
- /** The internal representation of this filter. This includes
- * the filter's name, type, and the actual function pointer.
- */
- ap_filter_rec_t *frec;
-
- /** A place to store any data associated with the current filter */
- void *ctx;
-
- /** The next filter in the chain */
- ap_filter_t *next;
-
- /** The request_rec associated with the current filter. If a sub-request
- * adds filters, then the sub-request is the request associated with the
- * filter.
- */
- request_rec *r;
-
- /** The conn_rec associated with the current filter. This is analogous
- * to the request_rec, except that it is used for input filtering.
- */
- conn_rec *c;
-};
-
-/**
- * Get the current bucket brigade from the next filter on the filter
- * stack. The filter returns an apr_status_t value. If the bottom-most
- * filter doesn't read from the network, then ::AP_NOBODY_READ is returned.
- * The bucket brigade will be empty when there is nothing left to get.
- * @param filter The next filter in the chain
- * @param bucket The current bucket brigade. The original brigade passed
- * to ap_get_brigade() must be empty.
- * @param mode The way in which the data should be read
- * @param block How the operations should be performed
- * ::APR_BLOCK_READ, ::APR_NONBLOCK_READ
- * @param readbytes How many bytes to read from the next filter.
- */
-AP_DECLARE(apr_status_t) ap_get_brigade(ap_filter_t *filter,
- apr_bucket_brigade *bucket,
- ap_input_mode_t mode,
- apr_read_type_e block,
- apr_off_t readbytes);
-
-/**
- * Pass the current bucket brigade down to the next filter on the filter
- * stack. The filter returns an apr_status_t value. If the bottom-most
- * filter doesn't write to the network, then ::AP_NOBODY_WROTE is returned.
- * The caller relinquishes ownership of the brigade.
- * @param filter The next filter in the chain
- * @param bucket The current bucket brigade
- */
-AP_DECLARE(apr_status_t) ap_pass_brigade(ap_filter_t *filter,
- apr_bucket_brigade *bucket);
-
-/**
- * This function is used to register an input filter with the system.
- * After this registration is performed, then a filter may be added
- * into the filter chain by using ap_add_input_filter() and simply
- * specifying the name.
- *
- * @param name The name to attach to the filter function
- * @param filter_func The filter function to name
- * @param filter_init The function to call before the filter handlers
- are invoked
- * @param ftype The type of filter function, either ::AP_FTYPE_CONTENT or
- * ::AP_FTYPE_CONNECTION
- * @see add_input_filter()
- */
-AP_DECLARE(ap_filter_rec_t *) ap_register_input_filter(const char *name,
- ap_in_filter_func filter_func,
- ap_init_filter_func filter_init,
- ap_filter_type ftype);
-/**
- * This function is used to register an output filter with the system.
- * After this registration is performed, then a filter may be added
- * into the filter chain by using ap_add_output_filter() and simply
- * specifying the name.
- *
- * @param name The name to attach to the filter function
- * @param filter_func The filter function to name
- * @param filter_init The function to call before the filter handlers
- * are invoked
- * @param ftype The type of filter function, either ::AP_FTYPE_CONTENT or
- * ::AP_FTYPE_CONNECTION
- * @see ap_add_output_filter()
- */
-AP_DECLARE(ap_filter_rec_t *) ap_register_output_filter(const char *name,
- ap_out_filter_func filter_func,
- ap_init_filter_func filter_init,
- ap_filter_type ftype);
-
-/**
- * Adds a named filter into the filter chain on the specified request record.
- * The filter will be installed with the specified context pointer.
- *
- * Filters added in this way will always be placed at the end of the filters
- * that have the same type (thus, the filters have the same order as the
- * calls to ap_add_filter). If the current filter chain contains filters
- * from another request, then this filter will be added before those other
- * filters.
- *
- * To re-iterate that last comment. This function is building a FIFO
- * list of filters. Take note of that when adding your filter to the chain.
- *
- * @param name The name of the filter to add
- * @param ctx Context data to provide to the filter
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add the fillter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_input_filter(const char *name, void *ctx,
- request_rec *r, conn_rec *c);
-
-/**
- * Variant of ap_add_input_filter() that accepts a registered filter handle
- * (as returned by ap_register_input_filter()) rather than a filter name
- *
- * @param f The filter handle to add
- * @param ctx Context data to provide to the filter
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add the fillter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_input_filter_handle(ap_filter_rec_t *f,
- void *ctx,
- request_rec *r,
- conn_rec *c);
-
-/**
- * Returns the filter handle for use with ap_add_input_filter_handle.
- *
- * @param name The filter name to look up
- */
-AP_DECLARE(ap_filter_rec_t *) ap_get_input_filter_handle(const char *name);
-
-/**
- * Add a filter to the current request. Filters are added in a FIFO manner.
- * The first filter added will be the first filter called.
- * @param name The name of the filter to add
- * @param ctx Context data to set in the filter
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add this filter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_output_filter(const char *name, void *ctx,
- request_rec *r, conn_rec *c);
-
-/**
- * Variant of ap_add_output_filter() that accepts a registered filter handle
- * (as returned by ap_register_output_filter()) rather than a filter name
- *
- * @param f The filter handle to add
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add the fillter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_output_filter_handle(ap_filter_rec_t *f,
- void *ctx,
- request_rec *r,
- conn_rec *c);
-
-/**
- * Returns the filter handle for use with ap_add_output_filter_handle.
- *
- * @param name The filter name to look up
- */
-AP_DECLARE(ap_filter_rec_t *) ap_get_output_filter_handle(const char *name);
-
-/**
- * Remove an input filter from either the request or connection stack
- * it is associated with.
- * @param f The filter to remove
- */
-
-AP_DECLARE(void) ap_remove_input_filter(ap_filter_t *f);
-
-/**
- * Remove an output filter from either the request or connection stack
- * it is associated with.
- * @param f The filter to remove
- */
-
-AP_DECLARE(void) ap_remove_output_filter(ap_filter_t *f);
-
-/* The next two filters are for abstraction purposes only. They could be
- * done away with, but that would require that we break modules if we ever
- * want to change our filter registration method. The basic idea, is that
- * all filters have a place to store data, the ctx pointer. These functions
- * fill out that pointer with a bucket brigade, and retrieve that data on
- * the next call. The nice thing about these functions, is that they
- * automatically concatenate the bucket brigades together for you. This means
- * that if you have already stored a brigade in the filters ctx pointer, then
- * when you add more it will be tacked onto the end of that brigade. When
- * you retrieve data, if you pass in a bucket brigade to the get function,
- * it will append the current brigade onto the one that you are retrieving.
- */
-
-/**
- * prepare a bucket brigade to be setaside. If a different brigade was
- * set-aside earlier, then the two brigades are concatenated together.
- * @param f The current filter
- * @param save_to The brigade that was previously set-aside. Regardless, the
- * new bucket brigade is returned in this location.
- * @param b The bucket brigade to save aside. This brigade is always empty
- * on return
- * @param p Ensure that all data in the brigade lives as long as this pool
- */
-AP_DECLARE(apr_status_t) ap_save_brigade(ap_filter_t *f,
- apr_bucket_brigade **save_to,
- apr_bucket_brigade **b, apr_pool_t *p);
-
-/**
- * Flush function for apr_brigade_* calls. This calls ap_pass_brigade
- * to flush the brigade if the brigade buffer overflows.
- * @param bb The brigade to flush
- * @param ctx The filter to pass the brigade to
- * @note this function has nothing to do with FLUSH buckets. It is simply
- * a way to flush content out of a brigade and down a filter stack.
- */
-AP_DECLARE_NONSTD(apr_status_t) ap_filter_flush(apr_bucket_brigade *bb,
- void *ctx);
-
-/**
- * Flush the current brigade down the filter stack.
- * @param f The current filter
- * @param bb The brigade to flush
- */
-AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb);
-
-/**
- * Write a buffer for the current filter, buffering if possible.
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param data The data to write
- * @param nbyte The number of bytes in the data
- */
-#define ap_fwrite(f, bb, data, nbyte) \
- apr_brigade_write(bb, ap_filter_flush, f, data, nbyte)
-
-/**
- * Write a buffer for the current filter, buffering if possible.
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param str The string to write
- */
-#define ap_fputs(f, bb, str) \
- apr_brigade_puts(bb, ap_filter_flush, f, str)
-
-/**
- * Write a character for the current filter, buffering if possible.
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param c The character to write
- */
-#define ap_fputc(f, bb, c) \
- apr_brigade_putc(bb, ap_filter_flush, f, c)
-
-/**
- * Write an unspecified number of strings to the current filter
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param ... The strings to write
- */
-AP_DECLARE_NONSTD(apr_status_t) ap_fputstrs(ap_filter_t *f,
- apr_bucket_brigade *bb,
- ...);
-
-/**
- * Output data to the filter in printf format
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param fmt The format string
- * @param ... The argumets to use to fill out the format string
- */
-AP_DECLARE_NONSTD(apr_status_t) ap_fprintf(ap_filter_t *f,
- apr_bucket_brigade *bb,
- const char *fmt,
- ...)
- __attribute__((format(printf,3,4)));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !AP_FILTER_H */
diff --git a/include/util_ldap.h b/include/util_ldap.h
deleted file mode 100644
index 36279f3492..0000000000
--- a/include/util_ldap.h
+++ /dev/null
@@ -1,295 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef UTIL_LDAP_H
-#define UTIL_LDAP_H
-
-#include <apr_ldap.h>
-
-/* this whole thing disappears if LDAP is not enabled */
-#if APR_HAS_LDAP
-
-/* APR header files */
-#include <apr_thread_mutex.h>
-#include <apr_thread_rwlock.h>
-#include <apr_tables.h>
-#include <apr_time.h>
-
-/* Apache header files */
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-#if APR_HAS_SHARED_MEMORY
-#include "apr_rmm.h"
-#include "apr_shm.h"
-#endif
-
-/* Create a set of LDAP_DECLARE(type), LDLDAP_DECLARE(type) and
- * LDAP_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define LDAP_DECLARE(type) type
-#define LDAP_DECLARE_NONSTD(type) type
-#define LDAP_DECLARE_DATA
-#elif defined(LDAP_DECLARE_STATIC)
-#define LDAP_DECLARE(type) type __stdcall
-#define LDAP_DECLARE_NONSTD(type) type
-#define LDAP_DECLARE_DATA
-#elif defined(LDAP_DECLARE_EXPORT)
-#define LDAP_DECLARE(type) __declspec(dllexport) type __stdcall
-#define LDAP_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define LDAP_DECLARE_DATA __declspec(dllexport)
-#else
-#define LDAP_DECLARE(type) __declspec(dllimport) type __stdcall
-#define LDAP_DECLARE_NONSTD(type) __declspec(dllimport) type
-#define LDAP_DECLARE_DATA __declspec(dllimport)
-#endif
-
-/*
- * LDAP Connections
- */
-
-/* Values that the deref member can have */
-typedef enum {
- never=LDAP_DEREF_NEVER,
- searching=LDAP_DEREF_SEARCHING,
- finding=LDAP_DEREF_FINDING,
- always=LDAP_DEREF_ALWAYS
-} deref_options;
-
-/* Structure representing an LDAP connection */
-typedef struct util_ldap_connection_t {
- LDAP *ldap;
- apr_pool_t *pool; /* Pool from which this connection is created */
-#if APR_HAS_THREADS
- apr_thread_mutex_t *lock; /* Lock to indicate this connection is in use */
-#endif
- int bound; /* Flag to indicate whether this connection is bound yet */
-
- const char *host; /* Name of the LDAP server (or space separated list) */
- int port; /* Port of the LDAP server */
- deref_options deref; /* how to handle alias dereferening */
-
- const char *binddn; /* DN to bind to server (can be NULL) */
- const char *bindpw; /* Password to bind to server (can be NULL) */
-
- int secure; /* True if use SSL connection */
-
- const char *reason; /* Reason for an error failure */
-
- struct util_ldap_connection_t *next;
-} util_ldap_connection_t;
-
-/* LDAP cache state information */
-typedef struct util_ldap_state_t {
- apr_pool_t *pool; /* pool from which this state is allocated */
-#if APR_HAS_THREADS
- apr_thread_mutex_t *mutex; /* mutex lock for the connection list */
-#endif
- apr_global_mutex_t *util_ldap_cache_lock;
-
- apr_size_t cache_bytes; /* Size (in bytes) of shared memory cache */
- char *cache_file; /* filename for shm */
- long search_cache_ttl; /* TTL for search cache */
- long search_cache_size; /* Size (in entries) of search cache */
- long compare_cache_ttl; /* TTL for compare cache */
- long compare_cache_size; /* Size (in entries) of compare cache */
-
- struct util_ldap_connection_t *connections;
- char *cert_auth_file;
- int cert_file_type;
- int ssl_support;
-
-#if APR_HAS_SHARED_MEMORY
- apr_shm_t *cache_shm;
- apr_rmm_t *cache_rmm;
-#endif
-
- /* cache ald */
- void *util_ldap_cache;
- char *lock_file; /* filename for shm lock mutex */
-
-} util_ldap_state_t;
-
-
-/**
- * Open a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- * to connect to. The handle to the LDAP connection is returned
- * as ldc->ldap.
- * @tip This function connects to the LDAP server and binds. It does not
- * connect if already connected (ldc->ldap != NULL). Does not bind
- * if already bound.
- * @return If successful LDAP_SUCCESS is returned.
- * @deffunc int util_ldap_connection_open(request_rec *r,
- * util_ldap_connection_t *ldc)
- */
-LDAP_DECLARE(int) util_ldap_connection_open(request_rec *r,
- util_ldap_connection_t *ldc);
-
-/**
- * Close a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- * that was connected.
- * @tip This function unbinds from the LDAP server, and clears ldc->ldap.
- * It is possible to rebind to this server again using the same ldc
- * structure, using apr_ldap_open_connection().
- * @deffunc util_ldap_close_connection(util_ldap_connection_t *ldc)
- */
-LDAP_DECLARE(void) util_ldap_connection_close(util_ldap_connection_t *ldc);
-
-/**
- * Unbind a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- * that was connected.
- * @tip This function unbinds the LDAP connection, and disconnects from
- * the server. It is used during error conditions, to bring the LDAP
- * connection back to a known state.
- * @deffunc apr_status_t util_ldap_connection_unbind(util_ldap_connection_t *ldc)
- */
-LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_unbind(void *param);
-
-/**
- * Cleanup a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- * that was connected.
- * @tip This function is registered with the pool cleanup to close down the
- * LDAP connections when the server is finished with them.
- * @deffunc apr_status_t util_ldap_connection_cleanup(util_ldap_connection_t *ldc)
- */
-LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_cleanup(void *param);
-
-/**
- * Find a connection in a list of connections
- * @param r The request record
- * @param host The hostname to connect to (multiple hosts space separated)
- * @param port The port to connect to
- * @param binddn The DN to bind with
- * @param bindpw The password to bind with
- * @param deref The dereferencing behavior
- * @param secure use SSL on the connection
- * @tip Once a connection is found and returned, a lock will be acquired to
- * lock that particular connection, so that another thread does not try and
- * use this connection while it is busy. Once you are finished with a connection,
- * apr_ldap_connection_close() must be called to release this connection.
- * @deffunc util_ldap_connection_t *util_ldap_connection_find(request_rec *r, const char *host, int port,
- * const char *binddn, const char *bindpw, deref_options deref,
- * int netscapessl, int starttls)
- */
-LDAP_DECLARE(util_ldap_connection_t *) util_ldap_connection_find(request_rec *r, const char *host, int port,
- const char *binddn, const char *bindpw, deref_options deref,
- int secure);
-
-
-/**
- * Compare two DNs for sameness
- * @param r The request record
- * @param ldc The LDAP connection being used.
- * @param url The URL of the LDAP connection - used for deciding which cache to use.
- * @param dn The first DN to compare.
- * @param reqdn The DN to compare the first DN to.
- * @param compare_dn_on_server Flag to determine whether the DNs should be checked using
- * LDAP calls or with a direct string comparision. A direct
- * string comparison is faster, but not as accurate - false
- * negative comparisons are possible.
- * @tip Two DNs can be equal and still fail a string comparison. Eg "dc=example,dc=com"
- * and "dc=example, dc=com". Use the compare_dn_on_server unless there are serious
- * performance issues.
- * @deffunc int util_ldap_cache_comparedn(request_rec *r, util_ldap_connection_t *ldc,
- * const char *url, const char *dn, const char *reqdn,
- * int compare_dn_on_server)
- */
-LDAP_DECLARE(int) util_ldap_cache_comparedn(request_rec *r, util_ldap_connection_t *ldc,
- const char *url, const char *dn, const char *reqdn,
- int compare_dn_on_server);
-
-/**
- * A generic LDAP compare function
- * @param r The request record
- * @param ldc The LDAP connection being used.
- * @param url The URL of the LDAP connection - used for deciding which cache to use.
- * @param dn The DN of the object in which we do the compare.
- * @param attrib The attribute within the object we are comparing for.
- * @param value The value of the attribute we are trying to compare for.
- * @tip Use this function to determine whether an attribute/value pair exists within an
- * object. Typically this would be used to determine LDAP group membership.
- * @deffunc int util_ldap_cache_compare(request_rec *r, util_ldap_connection_t *ldc,
- * const char *url, const char *dn, const char *attrib, const char *value)
- */
-LDAP_DECLARE(int) util_ldap_cache_compare(request_rec *r, util_ldap_connection_t *ldc,
- const char *url, const char *dn, const char *attrib, const char *value);
-
-/**
- * Checks a username/password combination by binding to the LDAP server
- * @param r The request record
- * @param ldc The LDAP connection being used.
- * @param url The URL of the LDAP connection - used for deciding which cache to use.
- * @param basedn The Base DN to search for the user in.
- * @param scope LDAP scope of the search.
- * @param attrs LDAP attributes to return in search.
- * @param filter The user to search for in the form of an LDAP filter. This filter must return
- * exactly one user for the check to be successful.
- * @param bindpw The user password to bind as.
- * @param binddn The DN of the user will be returned in this variable.
- * @param retvals The values corresponding to the attributes requested in the attrs array.
- * @tip The filter supplied will be searched for. If a single entry is returned, an attempt
- * is made to bind as that user. If this bind succeeds, the user is not validated.
- * @deffunc int util_ldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
- * char *url, const char *basedn, int scope, char **attrs,
- * char *filter, char *bindpw, char **binddn, char ***retvals)
- */
-LDAP_DECLARE(int) util_ldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
- const char *url, const char *basedn, int scope, char **attrs,
- const char *filter, const char *bindpw, const char **binddn, const char ***retvals);
-
-/**
- * Checks if SSL support is available in mod_ldap
- * @deffunc int util_ldap_ssl_supported(request_rec *r)
- */
-LDAP_DECLARE(int) util_ldap_ssl_supported(request_rec *r);
-
-/* from apr_ldap_cache.c */
-
-/**
- * Init the LDAP cache
- * @param pool The pool to use to initialise the cache
- * @param reqsize The size of the shared memory segement to request. A size
- * of zero requests the max size possible from
- * apr_shmem_init()
- * @deffunc void util_ldap_cache_init(apr_pool_t *p, util_ldap_state_t *st)
- * @return The status code returned is the status code of the
- * apr_smmem_init() call. Regardless of the status, the cache
- * will be set up at least for in-process or in-thread operation.
- */
-apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st);
-
-/* from apr_ldap_cache_mgr.c */
-
-/**
- * Display formatted stats for cache
- * @param The pool to allocate the returned string from
- * @tip This function returns a string allocated from the provided pool that describes
- * various stats about the cache.
- * @deffunc char *util_ald_cache_display(apr_pool_t *pool, util_ldap_state_t *st)
- */
-char *util_ald_cache_display(request_rec *r, util_ldap_state_t *st);
-
-#endif /* APR_HAS_LDAP */
-#endif /* UTIL_LDAP_H */
diff --git a/include/util_md5.h b/include/util_md5.h
deleted file mode 100644
index 8db1e1a359..0000000000
--- a/include/util_md5.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_UTIL_MD5_H
-#define APACHE_UTIL_MD5_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache MD5 library
- */
-
-#include "apr_md5.h"
-
-/**
- * Create an MD5 checksum of a given string
- * @param a Pool to allocate out of
- * @param string String to get the checksum of
- * @return The checksum
- * @deffunc char *ap_md5(apr_pool_t *a, const unsigned char *string)
- */
-AP_DECLARE(char *) ap_md5(apr_pool_t *a, const unsigned char *string);
-
-/**
- * Create an MD5 checksum of a string of binary data
- * @param a Pool to allocate out of
- * @param buf Buffer to generate checksum for
- * @param len The length of the buffer
- * @return The checksum
- * @deffunc char *ap_md5_binary(apr_pool_t *a, const unsigned char *buf, int len)
- */
-AP_DECLARE(char *) ap_md5_binary(apr_pool_t *a, const unsigned char *buf, int len);
-
-/**
- * Convert an MD5 checksum into a base64 encoding
- * @param p The pool to allocate out of
- * @param context The context to convert
- * @return The converted encoding
- * @deffunc char *ap_md5contextTo64(apr_pool_t *p, apr_md5_ctx_t *context)
- */
-AP_DECLARE(char *) ap_md5contextTo64(apr_pool_t *p, apr_md5_ctx_t *context);
-
-/**
- * Create an MD5 Digest for a given file
- * @param p The pool to allocate out of
- * @param infile The file to create the digest for
- * @deffunc char *ap_md5digest(apr_pool_t *p, apr_file_t *infile)
- */
-AP_DECLARE(char *) ap_md5digest(apr_pool_t *p, apr_file_t *infile);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_UTIL_MD5_H */
diff --git a/include/util_script.h b/include/util_script.h
deleted file mode 100644
index bdffb2b221..0000000000
--- a/include/util_script.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_UTIL_SCRIPT_H
-#define APACHE_UTIL_SCRIPT_H
-
-#include "apr_buckets.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache script tools
- */
-
-#ifndef APACHE_ARG_MAX
-#ifdef _POSIX_ARG_MAX
-#define APACHE_ARG_MAX _POSIX_ARG_MAX
-#else
-#define APACHE_ARG_MAX 512
-#endif
-#endif
-
-/**
- * Create an environment variable out of an Apache table of key-value pairs
- * @param p pool to allocate out of
- * @param t Apache table of key-value pairs
- * @return An array containing the same key-value pairs suitable for
- * use with an exec call.
- * @deffunc char **ap_create_environment(apr_pool_t *p, apr_table_t *t)
- */
-AP_DECLARE(char **) ap_create_environment(apr_pool_t *p, apr_table_t *t);
-
-/**
- * This "cute" little function comes about because the path info on
- * filenames and URLs aren't always the same. So we take the two,
- * and find as much of the two that match as possible.
- * @param uri The uri we are currently parsing
- * @param path_info The current path info
- * @return The length of the path info
- * @deffunc int ap_find_path_info(const char *uri, const char *path_info)
- */
-AP_DECLARE(int) ap_find_path_info(const char *uri, const char *path_info);
-
-/**
- * Add CGI environment variables required by HTTP/1.1 to the request's
- * environment table
- * @param r the current request
- * @deffunc void ap_add_cgi_vars(request_rec *r)
- */
-AP_DECLARE(void) ap_add_cgi_vars(request_rec *r);
-
-/**
- * Add common CGI environment variables to the requests environment table
- * @param r The current request
- * @deffunc void ap_add_common_vars(request_rec *r)
- */
-AP_DECLARE(void) ap_add_common_vars(request_rec *r);
-
-/**
- * Read headers output from a script, ensuring that the output is valid. If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param f The file to read from
- * @param buffer Empty when calling the function. On output, if there was an
- * error, the string that cause the error is stored here.
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err(request_rec *r, apr_file_t *f, char *buffer)
- */
-AP_DECLARE(int) ap_scan_script_header_err(request_rec *r, apr_file_t *f, char *buffer);
-
-/**
- * Read headers output from a script, ensuring that the output is valid. If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param bb The brigade from which to read
- * @param buffer Empty when calling the function. On output, if there was an
- * error, the string that cause the error is stored here.
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err_brigade(request_rec *r, apr_bucket_brigade *bb, char *buffer)
- */
-AP_DECLARE(int) ap_scan_script_header_err_brigade(request_rec *r,
- apr_bucket_brigade *bb,
- char *buffer);
-
-/**
- * Read headers strings from a script, ensuring that the output is valid. If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param buffer Empty when calling the function. On output, if there was an
- * error, the string that cause the error is stored here.
- * @param termch Pointer to the last character parsed.
- * @param termarg Pointer to an int to capture the last argument parsed.
- * @param args String arguments to parse consecutively for headers,
- * a NULL argument terminates the list.
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err_core(request_rec *r, char *buffer, int (*getsfunc)(char *, int, void *), void *getsfunc_data)
- */
-AP_DECLARE_NONSTD(int) ap_scan_script_header_err_strs(request_rec *r,
- char *buffer,
- const char **termch,
- int *termarg, ...);
-
-/**
- * Read headers output from a script, ensuring that the output is valid. If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param buffer Empty when calling the function. On output, if there was an
- * error, the string that cause the error is stored here.
- * @param getsfunc Function to read the headers from. This function should
- act like gets()
- * @param getsfunc_data The place to read from
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err_core(request_rec *r, char *buffer, int (*getsfunc)(char *, int, void *), void *getsfunc_data)
- */
-AP_DECLARE(int) ap_scan_script_header_err_core(request_rec *r, char *buffer,
- int (*getsfunc) (char *, int, void *),
- void *getsfunc_data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_UTIL_SCRIPT_H */
diff --git a/include/util_time.h b/include/util_time.h
deleted file mode 100644
index 5fcd0078bf..0000000000
--- a/include/util_time.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_UTIL_TIME_H
-#define APACHE_UTIL_TIME_H
-
-#include "apr.h"
-#include "apr_time.h"
-#include "httpd.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache date-time handling functions
- */
-
-/* Maximum delta from the current time, in seconds, for a past time
- * to qualify as "recent" for use in the ap_explode_recent_*() functions:
- * (Must be a power of two minus one!)
- */
-#define AP_TIME_RECENT_THRESHOLD 15
-
-/**
- * convert a recent time to its human readable components in local timezone
- * @param tm the exploded time
- * @param t the time to explode: MUST be within the last
- * AP_TIME_RECENT_THRESHOLD seconds
- * @note This is a faster alternative to apr_time_exp_lt that uses
- * a cache of pre-exploded time structures. It is useful for things
- * that need to explode the current time multiple times per second,
- * like loggers.
- * @return APR_SUCCESS iff successful
- */
-AP_DECLARE(apr_status_t) ap_explode_recent_localtime(apr_time_exp_t *tm,
- apr_time_t t);
-
-/**
- * convert a recent time to its human readable components in GMT timezone
- * @param tm the exploded time
- * @param t the time to explode: MUST be within the last
- * AP_TIME_RECENT_THRESHOLD seconds
- * @note This is a faster alternative to apr_time_exp_gmt that uses
- * a cache of pre-exploded time structures. It is useful for things
- * that need to explode the current time multiple times per second,
- * like loggers.
- * @return APR_SUCCESS iff successful
- */
-AP_DECLARE(apr_status_t) ap_explode_recent_gmt(apr_time_exp_t *tm,
- apr_time_t t);
-
-
-/**
- * format a recent timestamp in the ctime() format.
- * @param date_str String to write to.
- * @param t the time to convert
- */
-AP_DECLARE(apr_status_t) ap_recent_ctime(char *date_str, apr_time_t t);
-
-/**
- * format a recent timestamp in the RFC822 format
- * @param date_str String to write to (must have length >= APR_RFC822_DATE_LEN)
- * @param t the time to convert
- */
-AP_DECLARE(apr_status_t) ap_recent_rfc822_date(char *date_str, apr_time_t t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_UTIL_TIME_H */
diff --git a/include/util_xml.h b/include/util_xml.h
deleted file mode 100644
index 126d7f4b97..0000000000
--- a/include/util_xml.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef UTIL_XML_H
-#define UTIL_XML_H
-
-#include "apr_xml.h"
-
-#include "httpd.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache XML library
- */
-
-/**
- * Get XML post data and parse it
- * @param r The current request
- * @param pdoc The XML post data
- * @return HTTP status code
- * @deffunc int ap_xml_parse_input(request_rec *r, apr_xml_doc **pdoc)
- */
-AP_DECLARE(int) ap_xml_parse_input(request_rec *r, apr_xml_doc **pdoc);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* UTIL_XML_H */
diff --git a/libhttpd.dsp b/libhttpd.dsp
deleted file mode 100644
index 4def46c08e..0000000000
--- a/libhttpd.dsp
+++ /dev/null
@@ -1,687 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libhttpd" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=libhttpd - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "libhttpd.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "libhttpd.mak" CFG="libhttpd - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "libhttpd - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "libhttpd - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /Fd"Release\libhttpd_cl" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib "Release\buildmark.obj" /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:@"os\win32\BaseAddr.ref",libhttpd.dll /opt:ref
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PreLink_Desc=Compiling buildmark
-PreLink_Cmds=cl.exe /nologo /MD /W3 /O2 /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /Fd"Release\libhttpd" /FD /c server\buildmark.c /Fo"Release\buildmark.obj"
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /Fd"Debug\libhttpd_cl" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib "Debug\buildmark.obj" /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:@"os\win32\BaseAddr.ref",libhttpd.dll
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PreLink_Desc=Compiling buildmark
-PreLink_Cmds=cl.exe /nologo /MDd /W3 /GX /Zi /Od /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /Fd"Debug\libhttpd" /FD /c server\buildmark.c /Fo"Debug\buildmark.obj"
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "libhttpd - Win32 Release"
-# Name "libhttpd - Win32 Debug"
-# Begin Group "headers"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\include\ap_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_config.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_mmn.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_release.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_config.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_connection.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_core.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_log.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_main.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_protocol.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_request.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_vhost.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\httpd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\generators\mod_cgi.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_cgi.h
-InputPath=.\modules\generators\mod_cgi.h
-
-".\include\mod_cgi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\generators\mod_cgi.h > .\include\mod_cgi.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_cgi.h
-InputPath=.\modules\generators\mod_cgi.h
-
-".\include\mod_cgi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\generators\mod_cgi.h > .\include\mod_cgi.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\mod_core.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_core.h
-InputPath=.\modules\http\mod_core.h
-
-".\include\mod_core.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\http\mod_core.h > .\include\mod_core.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_core.h
-InputPath=.\modules\http\mod_core.h
-
-".\include\mod_core.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\http\mod_core.h > .\include\mod_core.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\dav\main\mod_dav.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_dav.h
-InputPath=.\modules\dav\main\mod_dav.h
-
-".\include\mod_dav.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\dav\main\mod_dav.h > .\include\mod_dav.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_dav.h
-InputPath=.\modules\dav\main\mod_dav.h
-
-".\include\mod_dav.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\dav\main\mod_dav.h > .\include\mod_dav.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\mappers\mod_so.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_so.h
-InputPath=.\modules\mappers\mod_so.h
-
-".\include\mod_so.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\mappers\mod_so.h > .\include\mod_so.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_so.h
-InputPath=.\modules\mappers\mod_so.h
-
-".\include\mod_so.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\mappers\mod_so.h > .\include\mod_so.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\filters\mod_include.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_include.h
-InputPath=.\modules\filters\mod_include.h
-
-".\include\mod_include.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\filters\mod_include.h > .\include\mod_include.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_include.h
-InputPath=.\modules\filters\mod_include.h
-
-".\include\mod_include.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\filters\mod_include.h > .\include\mod_include.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\proxy\mod_proxy.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_proxy.h
-InputPath=.\modules\proxy\mod_proxy.h
-
-".\include\mod_proxy.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\proxy\mod_proxy.h > .\include\mod_proxy.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mod_proxy.h
-InputPath=.\modules\proxy\mod_proxy.h
-
-".\include\mod_proxy.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\modules\proxy\mod_proxy.h > .\include\mod_proxy.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\os.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/os.h
-InputPath=.\os\win32\os.h
-
-".\include\os.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\os\win32\os.h > .\include\os.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/os.h
-InputPath=.\os\win32\os.h
-
-".\include\os.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\os\win32\os.h > .\include\os.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\test_char.h
-# End Source File
-# End Group
-# Begin Group "httpd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\server\buildmark.c
-# PROP Exclude_From_Build 1
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\connection.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\http_core.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\http_protocol.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\http_request.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\log.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\protocol.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\request.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\vhost.c
-# End Source File
-# End Group
-# Begin Group "modules"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\modules\mappers\mod_so.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\arch\win32\mod_win32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\modules.c
-# End Source File
-# End Group
-# Begin Group "util"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\server\eoc_bucket.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\error_bucket.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_cfgtree.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_cfgtree.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_charset.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_ebcdic.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_filter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_filter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_md5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_md5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_script.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_script.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_time.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\util_win32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_xml.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_xml.h
-# End Source File
-# End Group
-# Begin Group "mpm_winnt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\include\ap_listen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_mpm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\ap_regkey.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_regkey.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\child.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\listen.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mpm.h
-InputPath=.\server\mpm\winnt\mpm.h
-
-".\include\mpm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\server\mpm\winnt\mpm.h > .\include\mpm.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mpm.h
-InputPath=.\server\mpm\winnt\mpm.h
-
-".\include\mpm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\server\mpm\winnt\mpm.h > .\include\mpm.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm_common.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\mpm_common.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_default.h
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mpm_default.h
-InputPath=.\server\mpm\winnt\mpm_default.h
-
-".\include\mpm_default.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\server\mpm\winnt\mpm_default.h > .\include\mpm_default.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating include/mpm_default.h
-InputPath=.\server\mpm\winnt\mpm_default.h
-
-".\include\mpm_default.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\server\mpm\winnt\mpm_default.h > .\include\mpm_default.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_winnt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_winnt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\nt_eventlog.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\provider.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\scoreboard.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\scoreboard.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\service.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\server\gen_test_char.exe
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__GEN_T=".\include\os.h"
-# Begin Custom Build - Generating test_char.h from gen_test_char.exe
-InputPath=.\server\gen_test_char.exe
-
-".\server\test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- .\server\gen_test_char.exe >.\server\test_char.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__GEN_T=".\include\os.h"
-# Begin Custom Build - Generating test_char.h from gen_test_char.exe
-InputPath=.\server\gen_test_char.exe
-
-".\server\test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- .\server\gen_test_char.exe >.\server\test_char.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\libhttpd.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\libhttpd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ./build/win32/win32ver.awk libhttpd.dll "Apache HTTP Server Core" ./include/ap_release.h > .\build\win32\libhttpd.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\libhttpd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ./build/win32/win32ver.awk libhttpd.dll "Apache HTTP Server Core" ./include/ap_release.h > .\build\win32\libhttpd.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/.cvsignore b/modules/.cvsignore
deleted file mode 100644
index bd5fe06963..0000000000
--- a/modules/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/modules/Makefile.in b/modules/Makefile.in
deleted file mode 100644
index 1320ec2616..0000000000
--- a/modules/Makefile.in
+++ /dev/null
@@ -1,6 +0,0 @@
-
-SUBDIRS = $(MODULE_DIRS)
-CLEAN_SUBDIRS = $(MODULE_CLEANDIRS)
-
-include $(top_builddir)/build/rules.mk
-
diff --git a/modules/NWGNUmakefile b/modules/NWGNUmakefile
deleted file mode 100644
index 09ec212972..0000000000
--- a/modules/NWGNUmakefile
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-# To build with exerimental modules set the environment
-# variable EXPERIMENTAL=1
-
-SUBDIRS = \
- aaa \
- dav\main \
- dav\fs \
- dav\lock \
- echo \
- generators \
- loggers \
- mappers \
- metadata \
- proxy \
- filters \
- $(EOLIST)
-
-#If the mod_edir directory exists then build the mod_edir module
-ifeq "$(wildcard $(AP_WORK)\modules\mod_edir)" "$(AP_WORK)\modules\mod_edir"
-SUBDIRS += mod_edir \
- $(EOLIST)
-endif
-
-# Allow the experimental modules to be built if EXPERIMENTAL is defined
-ifdef EXPERIMENTAL
-SUBDIRS += experimental \
- $(EOLIST)
-endif
-
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-ifeq "$(wildcard NWGNUmakefile.mak)" "NWGNUmakefile.mak"
-include NWGNUmakefile.mak
-endif
-
-#
-# You can use this target if all that is needed is to copy files to the
-# installation area
-#
-install :: nlms FORCE
-
diff --git a/modules/README b/modules/README
deleted file mode 100644
index eab7067e0d..0000000000
--- a/modules/README
+++ /dev/null
@@ -1,54 +0,0 @@
-The directory structure for this level is as follows:
-
-aaa/
- This directory contains modules dealing with authorization and
- authentication.
-
-arch/
-
-cache/
- This directory houses modules that implement file and data caching
- capability.
-
-dav/
- This directory houses modules that implement WebDAV functionality.
-
-echo/
-
-experimental/
- In this directory we've placed some modules which we think
- provide some pretty interesting functionality, but which
- are still in the early stages of development and could
- evolve radically in the future. This code isn't supported
- officially.
-
-filters/
- This directory houses modules that perform general inline data filtering.
-
-generators/
- This directory houses modules that perform data generation functions.
-
-http/
- This directory houses modules that basic HTTP protocol implementation.
-
-loggers/
- This directory houses modules that handle logging functions.
-
-mappers/
- This directory houses modules that handle URL mapping and
- rewriting.
-
-metadata/
- This directory houses modules that deal with Header metadata.
-
-proxy/
- This houses the code for the proxy module for Apache.
-
-ssl/
- This directory houses code for OpenSSL functionality.
-
-test/
- This directory houses modules which test various components
- of Apache. You should not compile these into a production
- server.
-
diff --git a/modules/aaa/.cvsignore b/modules/aaa/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/aaa/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/aaa/.indent.pro b/modules/aaa/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/aaa/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/aaa/Makefile.in b/modules/aaa/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/aaa/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/aaa/NWGNUauthbasc b/modules/aaa/NWGNUauthbasc
deleted file mode 100644
index dbc4d0fa9a..0000000000
--- a/modules/aaa/NWGNUauthbasc
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authbasc
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Basic Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthBasic Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authbasc.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_auth_basic.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- auth_basic_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthdigt b/modules/aaa/NWGNUauthdigt
deleted file mode 100644
index 9dfa45b2e7..0000000000
--- a/modules/aaa/NWGNUauthdigt
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authdigt
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Digest Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Digest Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authdigt.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_auth_digest.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- auth_digest_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthnano b/modules/aaa/NWGNUauthnano
deleted file mode 100644
index 2e61075281..0000000000
--- a/modules/aaa/NWGNUauthnano
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authnano
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Anonymous Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthAnon Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authnano.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authn_anon.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authn_anon_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthndbm b/modules/aaa/NWGNUauthndbm
deleted file mode 100644
index c9087bd540..0000000000
--- a/modules/aaa/NWGNUauthndbm
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authndbm
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Database Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthnDBM Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authndbm.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authn_dbm.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authn_dbm_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthndef b/modules/aaa/NWGNUauthndef
deleted file mode 100644
index 39710e6094..0000000000
--- a/modules/aaa/NWGNUauthndef
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authndef
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Default Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Authndef Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authndef.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authn_default.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authn_default_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthnfil b/modules/aaa/NWGNUauthnfil
deleted file mode 100644
index 9e396a67de..0000000000
--- a/modules/aaa/NWGNUauthnfil
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authnfil
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) File Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthnFile Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authnfil.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authn_file.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authn_file_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthzdbm b/modules/aaa/NWGNUauthzdbm
deleted file mode 100644
index 65060a3cd0..0000000000
--- a/modules/aaa/NWGNUauthzdbm
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authzdbm
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Database Authorization Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthzDBM Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authzdbm.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authz_dbm.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authz_dbm_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthzdef b/modules/aaa/NWGNUauthzdef
deleted file mode 100644
index e194678157..0000000000
--- a/modules/aaa/NWGNUauthzdef
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authzdef
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Default Authorization Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Authzdef Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authzdef.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authz_default.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authz_default_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthzgrp b/modules/aaa/NWGNUauthzgrp
deleted file mode 100644
index 60eb244bdb..0000000000
--- a/modules/aaa/NWGNUauthzgrp
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authzgrp
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Group File Authorization Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthzGrp Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authzgrp.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authz_groupfile.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authz_groupfile_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthzusr b/modules/aaa/NWGNUauthzusr
deleted file mode 100644
index 3a3a11d885..0000000000
--- a/modules/aaa/NWGNUauthzusr
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authzusr
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) User Authorization Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthzUser Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authzusr.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_authz_user.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- authz_user_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUmakefile b/modules/aaa/NWGNUmakefile
deleted file mode 100644
index 7a45c0c60d..0000000000
--- a/modules/aaa/NWGNUmakefile
+++ /dev/null
@@ -1,253 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authbasc.nlm \
- $(OBJDIR)/authdigt.nlm \
- $(OBJDIR)/authnano.nlm \
- $(OBJDIR)/authndbm.nlm \
- $(OBJDIR)/authndef.nlm \
- $(OBJDIR)/authnfil.nlm \
- $(OBJDIR)/authzdbm.nlm \
- $(OBJDIR)/authzdef.nlm \
- $(OBJDIR)/authzgrp.nlm \
- $(OBJDIR)/authzusr.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/config.m4 b/modules/aaa/config.m4
deleted file mode 100644
index 2018f0c778..0000000000
--- a/modules/aaa/config.m4
+++ /dev/null
@@ -1,47 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl Authentication (authn), Access, and Authorization (authz)
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(aaa)
-
-dnl Authentication modules; modules checking a username and password against a
-dnl file, database, or other similar magic.
-dnl
-APACHE_MODULE(authn_file, file-based authentication control, , , yes)
-APACHE_MODULE(authn_dbm, DBM-based authentication control, , , most)
-APACHE_MODULE(authn_anon, anonymous user authentication control, , , most)
-
-dnl - and just in case all of the above punt; a default handler to
-dnl keep the bad guys out.
-APACHE_MODULE(authn_default, authentication backstopper, , , yes)
-
-dnl Authorization modules: modules which verify a certain property such as
-dnl membership of a group, value of the IP address against a list of pre
-dnl configured directives (e.g. require, allow) or against an external file
-dnl or database.
-dnl
-APACHE_MODULE(authz_host, host-based authorization control, , , yes)
-APACHE_MODULE(authz_groupfile, 'require group' authorization control, , , yes)
-APACHE_MODULE(authz_user, 'require user' authorization control, , , yes)
-APACHE_MODULE(authz_dbm, DBM-based authorization control, , , most)
-APACHE_MODULE(authz_owner, 'require file-owner' authorization control, , , most)
-
-dnl - and just in case all of the above punt; a default handler to
-dnl keep the bad guys out.
-APACHE_MODULE(authz_default, authorization control backstopper, , , yes)
-
-dnl these are the front-end authentication modules
-
-APACHE_MODULE(auth_basic, basic authentication, , , yes)
-APACHE_MODULE(auth_digest, RFC2617 Digest authentication, , , most, [
- APR_CHECK_APR_DEFINE(APR_HAS_RANDOM)
- if test $ac_cv_define_APR_HAS_RANDOM = "no"; then
- echo "You need APR random support to use mod_auth_digest."
- echo "Look at APR configure options --with-egd and --with-devrandom."
- enable_auth_digest="no"
- fi
-])
-
-APACHE_MODPATH_FINISH
diff --git a/modules/aaa/mod_auth.h b/modules/aaa/mod_auth.h
deleted file mode 100644
index 5633641f26..0000000000
--- a/modules/aaa/mod_auth.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MOD_AUTH_H
-#define APACHE_MOD_AUTH_H
-
-#include "apr_pools.h"
-#include "apr_hash.h"
-
-#include "httpd.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define AUTHN_PROVIDER_GROUP "authn"
-#define AUTHN_DEFAULT_PROVIDER "file"
-
-#define AUTHZ_GROUP_NOTE "authz_group_note"
-
-typedef enum {
- AUTH_DENIED,
- AUTH_GRANTED,
- AUTH_USER_FOUND,
- AUTH_USER_NOT_FOUND,
- AUTH_GENERAL_ERROR
-} authn_status;
-
-typedef struct {
- /* Given a username and password, expected to return AUTH_GRANTED
- * if we can validate this user/password combination.
- */
- authn_status (*check_password)(request_rec *r, const char *user,
- const char *password);
-
- /* Given a user and realm, expected to return AUTH_USER_FOUND if we
- * can find a md5 hash of 'user:realm:password'
- */
- authn_status (*get_realm_hash)(request_rec *r, const char *user,
- const char *realm, char **rethash);
-} authn_provider;
-
-/* A linked-list of authn providers. */
-typedef struct authn_provider_list authn_provider_list;
-
-struct authn_provider_list {
- const char *provider_name;
- const authn_provider *provider;
- authn_provider_list *next;
-};
-
-typedef struct {
- /* For a given user, return a hash of all groups the user belongs to. */
- apr_hash_t * (*get_user_groups)(request_rec *r, const char *user);
-} authz_provider;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/aaa/mod_auth_basic.c b/modules/aaa/mod_auth_basic.c
deleted file mode 100644
index 346f71116b..0000000000
--- a/modules/aaa/mod_auth_basic.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "apr_md5.h" /* for apr_password_validate */
-#include "apr_lib.h" /* for apr_isspace */
-#include "apr_base64.h" /* for apr_base64_decode et al */
-#define APR_WANT_STRFUNC /* for strcasecmp */
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "ap_provider.h"
-
-#include "mod_auth.h"
-
-typedef struct {
- authn_provider_list *providers;
- char *dir;
- int authoritative;
-} auth_basic_config_rec;
-
-static void *create_auth_basic_dir_config(apr_pool_t *p, char *d)
-{
- auth_basic_config_rec *conf = apr_pcalloc(p, sizeof(*conf));
-
- conf->dir = d;
- /* Any failures are fatal. */
- conf->authoritative = 1;
-
- return conf;
-}
-
-static const char *add_authn_provider(cmd_parms *cmd, void *config,
- const char *arg)
-{
- auth_basic_config_rec *conf = (auth_basic_config_rec*)config;
- authn_provider_list *newp;
- const char *provider_name;
-
- if (strcasecmp(arg, "on") == 0) {
- provider_name = AUTHN_DEFAULT_PROVIDER;
- }
- else if (strcasecmp(arg, "off") == 0) {
- /* Clear all configured providers and return. */
- conf->providers = NULL;
- return NULL;
- }
- else {
- provider_name = apr_pstrdup(cmd->pool, arg);
- }
-
- newp = apr_pcalloc(cmd->pool, sizeof(authn_provider_list));
- newp->provider_name = provider_name;
-
- /* lookup and cache the actual provider now */
- newp->provider = ap_lookup_provider(AUTHN_PROVIDER_GROUP,
- newp->provider_name, "0");
-
- if (newp->provider == NULL) {
- /* by the time they use it, the provider should be loaded and
- registered with us. */
- return apr_psprintf(cmd->pool,
- "Unknown Authn provider: %s",
- newp->provider_name);
- }
-
- if (!newp->provider->check_password) {
- /* if it doesn't provide the appropriate function, reject it */
- return apr_psprintf(cmd->pool,
- "The '%s' Authn provider doesn't support "
- "Basic Authentication", provider_name);
- }
-
- /* Add it to the list now. */
- if (!conf->providers) {
- conf->providers = newp;
- }
- else {
- authn_provider_list *last = conf->providers;
-
- while (last->next) {
- last = last->next;
- }
- last->next = newp;
- }
-
- return NULL;
-}
-
-static const command_rec auth_basic_cmds[] =
-{
- AP_INIT_ITERATE("AuthBasicProvider", add_authn_provider, NULL, OR_AUTHCFG,
- "specify the auth providers for a directory or location"),
- AP_INIT_FLAG("AuthBasicAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(auth_basic_config_rec, authoritative),
- OR_AUTHCFG,
- "Set to 'Off' to allow access control to be passed along to "
- "lower modules if the UserID is not known to this module"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA auth_basic_module;
-
-/* These functions return 0 if client is OK, and proper error status
- * if not... either HTTP_UNAUTHORIZED, if we made a check, and it failed, or
- * HTTP_INTERNAL_SERVER_ERROR, if things are so totally confused that we
- * couldn't figure out how to tell if the client is authorized or not.
- *
- * If they return DECLINED, and all other modules also decline, that's
- * treated by the server core as a configuration error, logged and
- * reported as such.
- */
-
-static void note_basic_auth_failure(request_rec *r)
-{
- apr_table_setn(r->err_headers_out,
- (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
- : "WWW-Authenticate",
- apr_pstrcat(r->pool, "Basic realm=\"", ap_auth_name(r),
- "\"", NULL));
-}
-
-static int get_basic_auth(request_rec *r, const char **user,
- const char **pw)
-{
- const char *auth_line;
- char *decoded_line;
- int length;
-
- /* Get the appropriate header */
- auth_line = apr_table_get(r->headers_in, (PROXYREQ_PROXY == r->proxyreq)
- ? "Proxy-Authorization"
- : "Authorization");
-
- if (!auth_line) {
- note_basic_auth_failure(r);
- return HTTP_UNAUTHORIZED;
- }
-
- if (strcasecmp(ap_getword(r->pool, &auth_line, ' '), "Basic")) {
- /* Client tried to authenticate using wrong auth scheme */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "client used wrong authentication scheme: %s", r->uri);
- note_basic_auth_failure(r);
- return HTTP_UNAUTHORIZED;
- }
-
- /* Skip leading spaces. */
- while (apr_isspace(*auth_line)) {
- auth_line++;
- }
-
- decoded_line = apr_palloc(r->pool, apr_base64_decode_len(auth_line) + 1);
- length = apr_base64_decode(decoded_line, auth_line);
- /* Null-terminate the string. */
- decoded_line[length] = '\0';
-
- *user = ap_getword_nulls(r->pool, (const char**)&decoded_line, ':');
- *pw = decoded_line;
-
- /* set the user, even though the user is unauthenticated at this point */
- r->user = (char *) *user;
-
- return OK;
-}
-
-/* Determine user ID, and check if it really is that user, for HTTP
- * basic authentication...
- */
-static int authenticate_basic_user(request_rec *r)
-{
- auth_basic_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &auth_basic_module);
- const char *sent_user, *sent_pw, *current_auth;
- int res;
- authn_status auth_result;
- authn_provider_list *current_provider;
-
- /* Are we configured to be Basic auth? */
- current_auth = ap_auth_type(r);
- if (!current_auth || strcasecmp(current_auth, "Basic")) {
- return DECLINED;
- }
-
- /* We need an authentication realm. */
- if (!ap_auth_name(r)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- 0, r, "need AuthName: %s", r->uri);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- r->ap_auth_type = "Basic";
-
- res = get_basic_auth(r, &sent_user, &sent_pw);
- if (res) {
- return res;
- }
-
- current_provider = conf->providers;
- do {
- const authn_provider *provider;
-
- /* For now, if a provider isn't set, we'll be nice and use the file
- * provider.
- */
- if (!current_provider) {
- provider = ap_lookup_provider(AUTHN_PROVIDER_GROUP,
- AUTHN_DEFAULT_PROVIDER, "0");
-
- if (!provider || !provider->check_password) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "No Authn provider configured");
- auth_result = AUTH_GENERAL_ERROR;
- break;
- }
- }
- else {
- provider = current_provider->provider;
- }
-
- auth_result = provider->check_password(r, sent_user, sent_pw);
-
- /* Something occured. Stop checking. */
- if (auth_result != AUTH_USER_NOT_FOUND) {
- break;
- }
-
- /* If we're not really configured for providers, stop now. */
- if (!conf->providers) {
- break;
- }
-
- current_provider = current_provider->next;
- } while (current_provider);
-
- if (auth_result != AUTH_GRANTED) {
- int return_code;
-
- /* If we're not authoritative, then any error is ignored. */
- if (!(conf->authoritative) && auth_result != AUTH_DENIED) {
- return DECLINED;
- }
-
- switch (auth_result) {
- case AUTH_DENIED:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "user %s: authentication failure for \"%s\": "
- "Password Mismatch",
- sent_user, r->uri);
- return_code = HTTP_UNAUTHORIZED;
- break;
- case AUTH_USER_NOT_FOUND:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "user %s not found: %s", sent_user, r->uri);
- return_code = HTTP_UNAUTHORIZED;
- break;
- case AUTH_GENERAL_ERROR:
- default:
- /* We'll assume that the module has already said what its error
- * was in the logs.
- */
- return_code = HTTP_INTERNAL_SERVER_ERROR;
- break;
- }
-
- /* If we're returning 403, tell them to try again. */
- if (return_code == HTTP_UNAUTHORIZED) {
- note_basic_auth_failure(r);
- }
- return return_code;
- }
-
- /* Now that we are done, set the request_rec values so others will know
- * who we are.
- */
- r->user = (char*)sent_user;
- r->ap_auth_type = "Basic";
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_check_user_id(authenticate_basic_user,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA auth_basic_module =
-{
- STANDARD20_MODULE_STUFF,
- create_auth_basic_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- auth_basic_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_auth_basic.dsp b/modules/aaa/mod_auth_basic.dsp
deleted file mode 100644
index e947e04566..0000000000
--- a/modules/aaa/mod_auth_basic.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth_basic" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth_basic - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_auth_basic.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_auth_basic.mak" CFG="mod_auth_basic - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_auth_basic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth_basic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_auth_basic - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AAA_DECLARE_EXPORT" /Fd"Release\mod_auth_basic_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_auth_basic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_basic.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_basic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_basic.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_auth_basic - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AAA_DECLARE_EXPORT" /Fd"Debug\mod_auth_basic_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_basic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_basic.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_basic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_basic.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_auth_basic - Win32 Release"
-# Name "mod_auth_basic - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth_basic.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth_basic.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_auth_basic - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_basic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_auth_basic.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_auth_basic.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_auth_basic - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_basic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_auth_basic.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_auth_basic.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_auth_digest.c b/modules/aaa/mod_auth_digest.c
deleted file mode 100644
index 78b4fbc8d9..0000000000
--- a/modules/aaa/mod_auth_digest.c
+++ /dev/null
@@ -1,2053 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_auth_digest: MD5 digest authentication
- *
- * Originally by Alexei Kosut <akosut@nueva.pvt.k12.ca.us>
- * Updated to RFC-2617 by Ronald Tschalär <ronald@innovation.ch>
- * based on mod_auth, by Rob McCool and Robert S. Thau
- *
- * This module an updated version of modules/standard/mod_digest.c
- * It is still fairly new and problems may turn up - submit problem
- * reports to the Apache bug-database, or send them directly to me
- * at ronald@innovation.ch.
- *
- * Requires either /dev/random (or equivalent) or the truerand library,
- * available for instance from
- * ftp://research.att.com/dist/mab/librand.shar
- *
- * Open Issues:
- * - qop=auth-int (when streams and trailer support available)
- * - nonce-format configurability
- * - Proxy-Authorization-Info header is set by this module, but is
- * currently ignored by mod_proxy (needs patch to mod_proxy)
- * - generating the secret takes a while (~ 8 seconds) if using the
- * truerand library
- * - The source of the secret should be run-time directive (with server
- * scope: RSRC_CONF). However, that could be tricky when trying to
- * choose truerand vs. file...
- * - shared-mem not completely tested yet. Seems to work ok for me,
- * but... (definitely won't work on Windoze)
- * - Sharing a realm among multiple servers has following problems:
- * o Server name and port can't be included in nonce-hash
- * (we need two nonce formats, which must be configured explicitly)
- * o Nonce-count check can't be for equal, or then nonce-count checking
- * must be disabled. What we could do is the following:
- * (expected < received) ? set expected = received : issue error
- * The only problem is that it allows replay attacks when somebody
- * captures a packet sent to one server and sends it to another
- * one. Should we add "AuthDigestNcCheck Strict"?
- * - expired nonces give amaya fits.
- */
-
-#include "apr_sha1.h"
-#include "apr_base64.h"
-#include "apr_lib.h"
-#include "apr_time.h"
-#include "apr_errno.h"
-#include "apr_global_mutex.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "apr_uri.h"
-#include "util_md5.h"
-#include "apr_shm.h"
-#include "apr_rmm.h"
-#include "ap_provider.h"
-
-#include "mod_auth.h"
-
-/* Disable shmem until pools/init gets sorted out
- * remove following two lines when fixed
- */
-#undef APR_HAS_SHARED_MEMORY
-#define APR_HAS_SHARED_MEMORY 0
-
-/* struct to hold the configuration info */
-
-typedef struct digest_config_struct {
- const char *dir_name;
- authn_provider_list *providers;
- const char *realm;
- char **qop_list;
- apr_sha1_ctx_t nonce_ctx;
- apr_time_t nonce_lifetime;
- const char *nonce_format;
- int check_nc;
- const char *algorithm;
- char *uri_list;
- const char *ha1;
-} digest_config_rec;
-
-
-#define DFLT_ALGORITHM "MD5"
-
-#define DFLT_NONCE_LIFE apr_time_from_sec(300)
-#define NEXTNONCE_DELTA apr_time_from_sec(30)
-
-
-#define NONCE_TIME_LEN (((sizeof(apr_time_t)+2)/3)*4)
-#define NONCE_HASH_LEN (2*APR_SHA1_DIGESTSIZE)
-#define NONCE_LEN (int )(NONCE_TIME_LEN + NONCE_HASH_LEN)
-
-#define SECRET_LEN 20
-
-
-/* client list definitions */
-
-typedef struct hash_entry {
- unsigned long key; /* the key for this entry */
- struct hash_entry *next; /* next entry in the bucket */
- unsigned long nonce_count; /* for nonce-count checking */
- char ha1[2*APR_MD5_DIGESTSIZE+1]; /* for algorithm=MD5-sess */
- char last_nonce[NONCE_LEN+1]; /* for one-time nonce's */
-} client_entry;
-
-static struct hash_table {
- client_entry **table;
- unsigned long tbl_len;
- unsigned long num_entries;
- unsigned long num_created;
- unsigned long num_removed;
- unsigned long num_renewed;
-} *client_list;
-
-
-/* struct to hold a parsed Authorization header */
-
-enum hdr_sts { NO_HEADER, NOT_DIGEST, INVALID, VALID };
-
-typedef struct digest_header_struct {
- const char *scheme;
- const char *realm;
- const char *username;
- char *nonce;
- const char *uri;
- const char *method;
- const char *digest;
- const char *algorithm;
- const char *cnonce;
- const char *opaque;
- unsigned long opaque_num;
- const char *message_qop;
- const char *nonce_count;
- /* the following fields are not (directly) from the header */
- apr_time_t nonce_time;
- enum hdr_sts auth_hdr_sts;
- const char *raw_request_uri;
- apr_uri_t *psd_request_uri;
- int needed_auth;
- client_entry *client;
-} digest_header_rec;
-
-
-/* (mostly) nonce stuff */
-
-typedef union time_union {
- apr_time_t time;
- unsigned char arr[sizeof(apr_time_t)];
-} time_rec;
-
-static unsigned char secret[SECRET_LEN];
-
-/* client-list, opaque, and one-time-nonce stuff */
-
-static apr_shm_t *client_shm = NULL;
-static apr_rmm_t *client_rmm = NULL;
-static unsigned long *opaque_cntr;
-static apr_time_t *otn_counter; /* one-time-nonce counter */
-static apr_global_mutex_t *client_lock = NULL;
-static apr_global_mutex_t *opaque_lock = NULL;
-static char client_lock_name[L_tmpnam];
-static char opaque_lock_name[L_tmpnam];
-
-#define DEF_SHMEM_SIZE 1000L /* ~ 12 entries */
-#define DEF_NUM_BUCKETS 15L
-#define HASH_DEPTH 5
-
-static long shmem_size = DEF_SHMEM_SIZE;
-static long num_buckets = DEF_NUM_BUCKETS;
-
-
-module AP_MODULE_DECLARE_DATA auth_digest_module;
-
-/*
- * initialization code
- */
-
-static apr_status_t cleanup_tables(void *not_used)
-{
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Digest: cleaning up shared memory");
- fflush(stderr);
-
- if (client_shm) {
- apr_shm_destroy(client_shm);
- client_shm = NULL;
- }
-
- if (client_lock) {
- apr_global_mutex_destroy(client_lock);
- client_lock = NULL;
- }
-
- if (opaque_lock) {
- apr_global_mutex_destroy(opaque_lock);
- opaque_lock = NULL;
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t initialize_secret(server_rec *s)
-{
- apr_status_t status;
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
- "Digest: generating secret for digest authentication ...");
-
-#if APR_HAS_RANDOM
- status = apr_generate_random_bytes(secret, sizeof(secret));
-#else
-#error APR random number support is missing; you probably need to install the truerand library.
-#endif
-
- if (status != APR_SUCCESS) {
- char buf[120];
- ap_log_error(APLOG_MARK, APLOG_CRIT, status, s,
- "Digest: error generating secret: %s",
- apr_strerror(status, buf, sizeof(buf)));
- return status;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s, "Digest: done");
-
- return APR_SUCCESS;
-}
-
-static void log_error_and_cleanup(char *msg, apr_status_t sts, server_rec *s)
-{
- ap_log_error(APLOG_MARK, APLOG_ERR, sts, s,
- "Digest: %s - all nonce-count checking, one-time nonces, and "
- "MD5-sess algorithm disabled", msg);
-
- cleanup_tables(NULL);
-}
-
-#if APR_HAS_SHARED_MEMORY
-
-static void initialize_tables(server_rec *s, apr_pool_t *ctx)
-{
- unsigned long idx;
- apr_status_t sts;
-
- /* set up client list */
-
- sts = apr_shm_create(&client_shm, shmem_size, tmpnam(NULL), ctx);
- if (sts != APR_SUCCESS) {
- log_error_and_cleanup("failed to create shared memory segments", sts, s);
- return;
- }
-
- client_list = apr_rmm_malloc(client_rmm, sizeof(*client_list) +
- sizeof(client_entry*)*num_buckets);
- if (!client_list) {
- log_error_and_cleanup("failed to allocate shared memory", -1, s);
- return;
- }
- client_list->table = (client_entry**) (client_list + 1);
- for (idx = 0; idx < num_buckets; idx++) {
- client_list->table[idx] = NULL;
- }
- client_list->tbl_len = num_buckets;
- client_list->num_entries = 0;
-
- tmpnam(client_lock_name);
- /* FIXME: get the client_lock_name from a directive so we're portable
- * to non-process-inheriting operating systems, like Win32. */
- sts = apr_global_mutex_create(&client_lock, client_lock_name,
- APR_LOCK_DEFAULT, ctx);
- if (sts != APR_SUCCESS) {
- log_error_and_cleanup("failed to create lock (client_lock)", sts, s);
- return;
- }
-
-
- /* setup opaque */
-
- opaque_cntr = apr_rmm_malloc(client_rmm, sizeof(*opaque_cntr));
- if (opaque_cntr == NULL) {
- log_error_and_cleanup("failed to allocate shared memory", -1, s);
- return;
- }
- *opaque_cntr = 1UL;
-
- tmpnam(opaque_lock_name);
- /* FIXME: get the opaque_lock_name from a directive so we're portable
- * to non-process-inheriting operating systems, like Win32. */
- sts = apr_global_mutex_create(&opaque_lock, opaque_lock_name,
- APR_LOCK_DEFAULT, ctx);
- if (sts != APR_SUCCESS) {
- log_error_and_cleanup("failed to create lock (opaque_lock)", sts, s);
- return;
- }
-
-
- /* setup one-time-nonce counter */
-
- otn_counter = apr_rmm_malloc(client_rmm, sizeof(*otn_counter));
- if (otn_counter == NULL) {
- log_error_and_cleanup("failed to allocate shared memory", -1, s);
- return;
- }
- *otn_counter = 0;
- /* no lock here */
-
-
- /* success */
- return;
-}
-
-#endif /* APR_HAS_SHARED_MEMORY */
-
-
-static int initialize_module(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- void *data;
- const char *userdata_key = "auth_digest_init";
-
- /* initialize_module() will be called twice, and if it's a DSO
- * then all static data from the first call will be lost. Only
- * set up our static data on the second call. */
- apr_pool_userdata_get(&data, userdata_key, s->process->pool);
- if (!data) {
- apr_pool_userdata_set((const void *)1, userdata_key,
- apr_pool_cleanup_null, s->process->pool);
- return OK;
- }
- if (initialize_secret(s) != APR_SUCCESS) {
- return !OK;
- }
-
-#if APR_HAS_SHARED_MEMORY
- /* Note: this stuff is currently fixed for the lifetime of the server,
- * i.e. even across restarts. This means that A) any shmem-size
- * configuration changes are ignored, and B) certain optimizations,
- * such as only allocating the smallest necessary entry for each
- * client, can't be done. However, the alternative is a nightmare:
- * we can't call apr_shm_destroy on a graceful restart because there
- * will be children using the tables, and we also don't know when the
- * last child dies. Therefore we can never clean up the old stuff,
- * creating a creeping memory leak.
- */
- initialize_tables(s, p);
- apr_pool_cleanup_register(p, NULL, cleanup_tables, apr_pool_cleanup_null);
-#endif /* APR_HAS_SHARED_MEMORY */
- return OK;
-}
-
-static void initialize_child(apr_pool_t *p, server_rec *s)
-{
- apr_status_t sts;
-
- if (!client_shm) {
- return;
- }
-
- /* FIXME: get the client_lock_name from a directive so we're portable
- * to non-process-inheriting operating systems, like Win32. */
- sts = apr_global_mutex_child_init(&client_lock, client_lock_name, p);
- if (sts != APR_SUCCESS) {
- log_error_and_cleanup("failed to create lock (client_lock)", sts, s);
- return;
- }
- /* FIXME: get the opaque_lock_name from a directive so we're portable
- * to non-process-inheriting operating systems, like Win32. */
- sts = apr_global_mutex_child_init(&opaque_lock, opaque_lock_name, p);
- if (sts != APR_SUCCESS) {
- log_error_and_cleanup("failed to create lock (opaque_lock)", sts, s);
- return;
- }
-}
-
-/*
- * configuration code
- */
-
-static void *create_digest_dir_config(apr_pool_t *p, char *dir)
-{
- digest_config_rec *conf;
-
- if (dir == NULL) {
- return NULL;
- }
-
- conf = (digest_config_rec *) apr_pcalloc(p, sizeof(digest_config_rec));
- if (conf) {
- conf->qop_list = apr_palloc(p, sizeof(char*));
- conf->qop_list[0] = NULL;
- conf->nonce_lifetime = DFLT_NONCE_LIFE;
- conf->dir_name = apr_pstrdup(p, dir);
- conf->algorithm = DFLT_ALGORITHM;
- }
-
- return conf;
-}
-
-static const char *set_realm(cmd_parms *cmd, void *config, const char *realm)
-{
- digest_config_rec *conf = (digest_config_rec *) config;
-
- /* The core already handles the realm, but it's just too convenient to
- * grab it ourselves too and cache some setups. However, we need to
- * let the core get at it too, which is why we decline at the end -
- * this relies on the fact that http_core is last in the list.
- */
- conf->realm = realm;
-
- /* we precompute the part of the nonce hash that is constant (well,
- * the host:port would be too, but that varies for .htaccess files
- * and directives outside a virtual host section)
- */
- apr_sha1_init(&conf->nonce_ctx);
- apr_sha1_update_binary(&conf->nonce_ctx, secret, sizeof(secret));
- apr_sha1_update_binary(&conf->nonce_ctx, (const unsigned char *) realm,
- strlen(realm));
-
- return DECLINE_CMD;
-}
-
-static const char *add_authn_provider(cmd_parms *cmd, void *config,
- const char *arg)
-{
- digest_config_rec *conf = (digest_config_rec*)config;
- authn_provider_list *newp;
- const char *provider_name;
-
- if (strcasecmp(arg, "on") == 0) {
- provider_name = AUTHN_DEFAULT_PROVIDER;
- }
- else if (strcasecmp(arg, "off") == 0) {
- /* Clear all configured providers and return. */
- conf->providers = NULL;
- return NULL;
- }
- else {
- provider_name = apr_pstrdup(cmd->pool, arg);
- }
-
- newp = apr_pcalloc(cmd->pool, sizeof(authn_provider_list));
- newp->provider_name = provider_name;
-
- /* lookup and cache the actual provider now */
- newp->provider = ap_lookup_provider(AUTHN_PROVIDER_GROUP,
- newp->provider_name, "0");
-
- if (newp->provider == NULL) {
- /* by the time they use it, the provider should be loaded and
- registered with us. */
- return apr_psprintf(cmd->pool,
- "Unknown Authn provider: %s",
- newp->provider_name);
- }
-
- if (!newp->provider->get_realm_hash) {
- /* if it doesn't provide the appropriate function, reject it */
- return apr_psprintf(cmd->pool,
- "The '%s' Authn provider doesn't support "
- "Digest Authentication", provider_name);
- }
-
- /* Add it to the list now. */
- if (!conf->providers) {
- conf->providers = newp;
- }
- else {
- authn_provider_list *last = conf->providers;
-
- while (last->next) {
- last = last->next;
- }
- last->next = newp;
- }
-
- return NULL;
-}
-
-static const char *set_qop(cmd_parms *cmd, void *config, const char *op)
-{
- digest_config_rec *conf = (digest_config_rec *) config;
- char **tmp;
- int cnt;
-
- if (!strcasecmp(op, "none")) {
- if (conf->qop_list[0] == NULL) {
- conf->qop_list = apr_palloc(cmd->pool, 2 * sizeof(char*));
- conf->qop_list[1] = NULL;
- }
- conf->qop_list[0] = "none";
- return NULL;
- }
-
- if (!strcasecmp(op, "auth-int")) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "Digest: WARNING: qop `auth-int' currently only works "
- "correctly for responses with no entity");
- }
- else if (strcasecmp(op, "auth")) {
- return apr_pstrcat(cmd->pool, "Unrecognized qop: ", op, NULL);
- }
-
- for (cnt = 0; conf->qop_list[cnt] != NULL; cnt++)
- ;
-
- tmp = apr_palloc(cmd->pool, (cnt + 2) * sizeof(char*));
- memcpy(tmp, conf->qop_list, cnt*sizeof(char*));
- tmp[cnt] = apr_pstrdup(cmd->pool, op);
- tmp[cnt+1] = NULL;
- conf->qop_list = tmp;
-
- return NULL;
-}
-
-static const char *set_nonce_lifetime(cmd_parms *cmd, void *config,
- const char *t)
-{
- char *endptr;
- long lifetime;
-
- lifetime = strtol(t, &endptr, 10);
- if (endptr < (t+strlen(t)) && !apr_isspace(*endptr)) {
- return apr_pstrcat(cmd->pool,
- "Invalid time in AuthDigestNonceLifetime: ",
- t, NULL);
- }
-
- ((digest_config_rec *) config)->nonce_lifetime = apr_time_from_sec(lifetime);
- return NULL;
-}
-
-static const char *set_nonce_format(cmd_parms *cmd, void *config,
- const char *fmt)
-{
- ((digest_config_rec *) config)->nonce_format = fmt;
- return "AuthDigestNonceFormat is not implemented (yet)";
-}
-
-static const char *set_nc_check(cmd_parms *cmd, void *config, int flag)
-{
- if (flag && !client_shm)
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- cmd->server, "Digest: WARNING: nonce-count checking "
- "is not supported on platforms without shared-memory "
- "support - disabling check");
-
- ((digest_config_rec *) config)->check_nc = flag;
- return NULL;
-}
-
-static const char *set_algorithm(cmd_parms *cmd, void *config, const char *alg)
-{
- if (!strcasecmp(alg, "MD5-sess")) {
- if (!client_shm) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- cmd->server, "Digest: WARNING: algorithm `MD5-sess' "
- "is not supported on platforms without shared-memory "
- "support - reverting to MD5");
- alg = "MD5";
- }
- }
- else if (strcasecmp(alg, "MD5")) {
- return apr_pstrcat(cmd->pool, "Invalid algorithm in AuthDigestAlgorithm: ", alg, NULL);
- }
-
- ((digest_config_rec *) config)->algorithm = alg;
- return NULL;
-}
-
-static const char *set_uri_list(cmd_parms *cmd, void *config, const char *uri)
-{
- digest_config_rec *c = (digest_config_rec *) config;
- if (c->uri_list) {
- c->uri_list[strlen(c->uri_list)-1] = '\0';
- c->uri_list = apr_pstrcat(cmd->pool, c->uri_list, " ", uri, "\"", NULL);
- }
- else {
- c->uri_list = apr_pstrcat(cmd->pool, ", domain=\"", uri, "\"", NULL);
- }
- return NULL;
-}
-
-static const char *set_shmem_size(cmd_parms *cmd, void *config,
- const char *size_str)
-{
- char *endptr;
- long size, min;
-
- size = strtol(size_str, &endptr, 10);
- while (apr_isspace(*endptr)) endptr++;
- if (*endptr == '\0' || *endptr == 'b' || *endptr == 'B') {
- ;
- }
- else if (*endptr == 'k' || *endptr == 'K') {
- size *= 1024;
- }
- else if (*endptr == 'm' || *endptr == 'M') {
- size *= 1048576;
- }
- else {
- return apr_pstrcat(cmd->pool, "Invalid size in AuthDigestShmemSize: ",
- size_str, NULL);
- }
-
- min = sizeof(*client_list) + sizeof(client_entry*) + sizeof(client_entry);
- if (size < min) {
- return apr_psprintf(cmd->pool, "size in AuthDigestShmemSize too small: "
- "%ld < %ld", size, min);
- }
-
- shmem_size = size;
- num_buckets = (size - sizeof(*client_list)) /
- (sizeof(client_entry*) + HASH_DEPTH * sizeof(client_entry));
- if (num_buckets == 0) {
- num_buckets = 1;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server,
- "Digest: Set shmem-size: %ld, num-buckets: %ld", shmem_size,
- num_buckets);
-
- return NULL;
-}
-
-static const command_rec digest_cmds[] =
-{
- AP_INIT_TAKE1("AuthName", set_realm, NULL, OR_AUTHCFG,
- "The authentication realm (e.g. \"Members Only\")"),
- AP_INIT_ITERATE("AuthDigestProvider", add_authn_provider, NULL, OR_AUTHCFG,
- "specify the auth providers for a directory or location"),
- AP_INIT_ITERATE("AuthDigestQop", set_qop, NULL, OR_AUTHCFG,
- "A list of quality-of-protection options"),
- AP_INIT_TAKE1("AuthDigestNonceLifetime", set_nonce_lifetime, NULL, OR_AUTHCFG,
- "Maximum lifetime of the server nonce (seconds)"),
- AP_INIT_TAKE1("AuthDigestNonceFormat", set_nonce_format, NULL, OR_AUTHCFG,
- "The format to use when generating the server nonce"),
- AP_INIT_FLAG("AuthDigestNcCheck", set_nc_check, NULL, OR_AUTHCFG,
- "Whether or not to check the nonce-count sent by the client"),
- AP_INIT_TAKE1("AuthDigestAlgorithm", set_algorithm, NULL, OR_AUTHCFG,
- "The algorithm used for the hash calculation"),
- AP_INIT_ITERATE("AuthDigestDomain", set_uri_list, NULL, OR_AUTHCFG,
- "A list of URI's which belong to the same protection space as the current URI"),
- AP_INIT_TAKE1("AuthDigestShmemSize", set_shmem_size, NULL, RSRC_CONF,
- "The amount of shared memory to allocate for keeping track of clients"),
- {NULL}
-};
-
-
-/*
- * client list code
- *
- * Each client is assigned a number, which is transfered in the opaque
- * field of the WWW-Authenticate and Authorization headers. The number
- * is just a simple counter which is incremented for each new client.
- * Clients can't forge this number because it is hashed up into the
- * server nonce, and that is checked.
- *
- * The clients are kept in a simple hash table, which consists of an
- * array of client_entry's, each with a linked list of entries hanging
- * off it. The client's number modulo the size of the array gives the
- * bucket number.
- *
- * The clients are garbage collected whenever a new client is allocated
- * but there is not enough space left in the shared memory segment. A
- * simple semi-LRU is used for this: whenever a client entry is accessed
- * it is moved to the beginning of the linked list in its bucket (this
- * also makes for faster lookups for current clients). The garbage
- * collecter then just removes the oldest entry (i.e. the one at the
- * end of the list) in each bucket.
- *
- * The main advantages of the above scheme are that it's easy to implement
- * and it keeps the hash table evenly balanced (i.e. same number of entries
- * in each bucket). The major disadvantage is that you may be throwing
- * entries out which are in active use. This is not tragic, as these
- * clients will just be sent a new client id (opaque field) and nonce
- * with a stale=true (i.e. it will just look like the nonce expired,
- * thereby forcing an extra round trip). If the shared memory segment
- * has enough headroom over the current client set size then this should
- * not occur too often.
- *
- * To help tune the size of the shared memory segment (and see if the
- * above algorithm is really sufficient) a set of counters is kept
- * indicating the number of clients held, the number of garbage collected
- * clients, and the number of erroneously purged clients. These are printed
- * out at each garbage collection run. Note that access to the counters is
- * not synchronized because they are just indicaters, and whether they are
- * off by a few doesn't matter; and for the same reason no attempt is made
- * to guarantee the num_renewed is correct in the face of clients spoofing
- * the opaque field.
- */
-
-/*
- * Get the client given its client number (the key). Returns the entry,
- * or NULL if it's not found.
- *
- * Access to the list itself is synchronized via locks. However, access
- * to the entry returned by get_client() is NOT synchronized. This means
- * that there are potentially problems if a client uses multiple,
- * simultaneous connections to access url's within the same protection
- * space. However, these problems are not new: when using multiple
- * connections you have no guarantee of the order the requests are
- * processed anyway, so you have problems with the nonce-count and
- * one-time nonces anyway.
- */
-static client_entry *get_client(unsigned long key, const request_rec *r)
-{
- int bucket;
- client_entry *entry, *prev = NULL;
-
-
- if (!key || !client_shm) return NULL;
-
- bucket = key % client_list->tbl_len;
- entry = client_list->table[bucket];
-
- apr_global_mutex_lock(client_lock);
-
- while (entry && key != entry->key) {
- prev = entry;
- entry = entry->next;
- }
-
- if (entry && prev) { /* move entry to front of list */
- prev->next = entry->next;
- entry->next = client_list->table[bucket];
- client_list->table[bucket] = entry;
- }
-
- apr_global_mutex_unlock(client_lock);
-
- if (entry) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "get_client(): client %lu found", key);
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "get_client(): client %lu not found", key);
- }
-
- return entry;
-}
-
-
-/* A simple garbage-collecter to remove unused clients. It removes the
- * last entry in each bucket and updates the counters. Returns the
- * number of removed entries.
- */
-static long gc(void)
-{
- client_entry *entry, *prev;
- unsigned long num_removed = 0, idx;
-
- /* garbage collect all last entries */
-
- for (idx = 0; idx < client_list->tbl_len; idx++) {
- entry = client_list->table[idx];
- prev = NULL;
- while (entry->next) { /* find last entry */
- prev = entry;
- entry = entry->next;
- }
- if (prev) {
- prev->next = NULL; /* cut list */
- }
- else {
- client_list->table[idx] = NULL;
- }
- if (entry) { /* remove entry */
- apr_rmm_free(client_rmm, (apr_rmm_off_t)entry);
- num_removed++;
- }
- }
-
- /* update counters and log */
-
- client_list->num_entries -= num_removed;
- client_list->num_removed += num_removed;
-
- return num_removed;
-}
-
-
-/*
- * Add a new client to the list. Returns the entry if successful, NULL
- * otherwise. This triggers the garbage collection if memory is low.
- */
-static client_entry *add_client(unsigned long key, client_entry *info,
- server_rec *s)
-{
- int bucket;
- client_entry *entry;
-
-
- if (!key || !client_shm) {
- return NULL;
- }
-
- bucket = key % client_list->tbl_len;
- entry = client_list->table[bucket];
-
- apr_global_mutex_lock(client_lock);
-
- /* try to allocate a new entry */
-
- entry = (client_entry *)apr_rmm_malloc(client_rmm, sizeof(client_entry));
- if (!entry) {
- long num_removed = gc();
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Digest: gc'd %ld client entries. Total new clients: "
- "%ld; Total removed clients: %ld; Total renewed clients: "
- "%ld", num_removed,
- client_list->num_created - client_list->num_renewed,
- client_list->num_removed, client_list->num_renewed);
- entry = (client_entry *)apr_rmm_malloc(client_rmm, sizeof(client_entry));
- if (!entry) {
- return NULL; /* give up */
- }
- }
-
- /* now add the entry */
-
- memcpy(entry, info, sizeof(client_entry));
- entry->key = key;
- entry->next = client_list->table[bucket];
- client_list->table[bucket] = entry;
- client_list->num_created++;
- client_list->num_entries++;
-
- apr_global_mutex_unlock(client_lock);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "allocated new client %lu", key);
-
- return entry;
-}
-
-
-/*
- * Authorization header parser code
- */
-
-/* Parse the Authorization header, if it exists */
-static int get_digest_rec(request_rec *r, digest_header_rec *resp)
-{
- const char *auth_line;
- apr_size_t l;
- int vk = 0, vv = 0;
- char *key, *value;
-
- auth_line = apr_table_get(r->headers_in,
- (PROXYREQ_PROXY == r->proxyreq)
- ? "Proxy-Authorization"
- : "Authorization");
- if (!auth_line) {
- resp->auth_hdr_sts = NO_HEADER;
- return !OK;
- }
-
- resp->scheme = ap_getword_white(r->pool, &auth_line);
- if (strcasecmp(resp->scheme, "Digest")) {
- resp->auth_hdr_sts = NOT_DIGEST;
- return !OK;
- }
-
- l = strlen(auth_line);
-
- key = apr_palloc(r->pool, l+1);
- value = apr_palloc(r->pool, l+1);
-
- while (auth_line[0] != '\0') {
-
- /* find key */
-
- while (apr_isspace(auth_line[0])) {
- auth_line++;
- }
- vk = 0;
- while (auth_line[0] != '=' && auth_line[0] != ','
- && auth_line[0] != '\0' && !apr_isspace(auth_line[0])) {
- key[vk++] = *auth_line++;
- }
- key[vk] = '\0';
- while (apr_isspace(auth_line[0])) {
- auth_line++;
- }
-
- /* find value */
-
- if (auth_line[0] == '=') {
- auth_line++;
- while (apr_isspace(auth_line[0])) {
- auth_line++;
- }
-
- vv = 0;
- if (auth_line[0] == '\"') { /* quoted string */
- auth_line++;
- while (auth_line[0] != '\"' && auth_line[0] != '\0') {
- if (auth_line[0] == '\\' && auth_line[1] != '\0') {
- auth_line++; /* escaped char */
- }
- value[vv++] = *auth_line++;
- }
- if (auth_line[0] != '\0') {
- auth_line++;
- }
- }
- else { /* token */
- while (auth_line[0] != ',' && auth_line[0] != '\0'
- && !apr_isspace(auth_line[0])) {
- value[vv++] = *auth_line++;
- }
- }
- value[vv] = '\0';
- }
-
- while (auth_line[0] != ',' && auth_line[0] != '\0') {
- auth_line++;
- }
- if (auth_line[0] != '\0') {
- auth_line++;
- }
-
- if (!strcasecmp(key, "username"))
- resp->username = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "realm"))
- resp->realm = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "nonce"))
- resp->nonce = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "uri"))
- resp->uri = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "response"))
- resp->digest = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "algorithm"))
- resp->algorithm = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "cnonce"))
- resp->cnonce = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "opaque"))
- resp->opaque = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "qop"))
- resp->message_qop = apr_pstrdup(r->pool, value);
- else if (!strcasecmp(key, "nc"))
- resp->nonce_count = apr_pstrdup(r->pool, value);
- }
-
- if (!resp->username || !resp->realm || !resp->nonce || !resp->uri
- || !resp->digest
- || (resp->message_qop && (!resp->cnonce || !resp->nonce_count))) {
- resp->auth_hdr_sts = INVALID;
- return !OK;
- }
-
- if (resp->opaque) {
- resp->opaque_num = (unsigned long) strtol(resp->opaque, NULL, 16);
- }
-
- resp->auth_hdr_sts = VALID;
- return OK;
-}
-
-
-/* Because the browser may preemptively send auth info, incrementing the
- * nonce-count when it does, and because the client does not get notified
- * if the URI didn't need authentication after all, we need to be sure to
- * update the nonce-count each time we receive an Authorization header no
- * matter what the final outcome of the request. Furthermore this is a
- * convenient place to get the request-uri (before any subrequests etc
- * are initiated) and to initialize the request_config.
- *
- * Note that this must be called after mod_proxy had its go so that
- * r->proxyreq is set correctly.
- */
-static int parse_hdr_and_update_nc(request_rec *r)
-{
- digest_header_rec *resp;
- int res;
-
- if (!ap_is_initial_req(r)) {
- return DECLINED;
- }
-
- resp = apr_pcalloc(r->pool, sizeof(digest_header_rec));
- resp->raw_request_uri = r->unparsed_uri;
- resp->psd_request_uri = &r->parsed_uri;
- resp->needed_auth = 0;
- resp->method = r->method;
- ap_set_module_config(r->request_config, &auth_digest_module, resp);
-
- res = get_digest_rec(r, resp);
- resp->client = get_client(resp->opaque_num, r);
- if (res == OK && resp->client) {
- resp->client->nonce_count++;
- }
-
- return DECLINED;
-}
-
-
-/*
- * Nonce generation code
- */
-
-/* The hash part of the nonce is a SHA-1 hash of the time, realm, server host
- * and port, opaque, and our secret.
- */
-static void gen_nonce_hash(char *hash, const char *timestr, const char *opaque,
- const server_rec *server,
- const digest_config_rec *conf)
-{
- const char *hex = "0123456789abcdef";
- unsigned char sha1[APR_SHA1_DIGESTSIZE];
- apr_sha1_ctx_t ctx;
- int idx;
-
- memcpy(&ctx, &conf->nonce_ctx, sizeof(ctx));
- /*
- apr_sha1_update_binary(&ctx, (const unsigned char *) server->server_hostname,
- strlen(server->server_hostname));
- apr_sha1_update_binary(&ctx, (const unsigned char *) &server->port,
- sizeof(server->port));
- */
- apr_sha1_update_binary(&ctx, (const unsigned char *) timestr, strlen(timestr));
- if (opaque) {
- apr_sha1_update_binary(&ctx, (const unsigned char *) opaque,
- strlen(opaque));
- }
- apr_sha1_final(sha1, &ctx);
-
- for (idx=0; idx<APR_SHA1_DIGESTSIZE; idx++) {
- *hash++ = hex[sha1[idx] >> 4];
- *hash++ = hex[sha1[idx] & 0xF];
- }
-
- *hash++ = '\0';
-}
-
-
-/* The nonce has the format b64(time)+hash .
- */
-static const char *gen_nonce(apr_pool_t *p, apr_time_t now, const char *opaque,
- const server_rec *server,
- const digest_config_rec *conf)
-{
- char *nonce = apr_palloc(p, NONCE_LEN+1);
- int len;
- time_rec t;
-
- if (conf->nonce_lifetime != 0) {
- t.time = now;
- }
- else if (otn_counter) {
- /* this counter is not synch'd, because it doesn't really matter
- * if it counts exactly.
- */
- t.time = (*otn_counter)++;
- }
- else {
- /* XXX: WHAT IS THIS CONSTANT? */
- t.time = 42;
- }
- len = apr_base64_encode_binary(nonce, t.arr, sizeof(t.arr));
- gen_nonce_hash(nonce+NONCE_TIME_LEN, nonce, opaque, server, conf);
-
- return nonce;
-}
-
-
-/*
- * Opaque and hash-table management
- */
-
-/*
- * Generate a new client entry, add it to the list, and return the
- * entry. Returns NULL if failed.
- */
-static client_entry *gen_client(const request_rec *r)
-{
- unsigned long op;
- client_entry new_entry = { 0, NULL, 0, "", "" }, *entry;
-
- if (!opaque_cntr) {
- return NULL;
- }
-
- apr_global_mutex_lock(opaque_lock);
- op = (*opaque_cntr)++;
- apr_global_mutex_lock(opaque_lock);
-
- if (!(entry = add_client(op, &new_entry, r->server))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: failed to allocate client entry - ignoring "
- "client");
- return NULL;
- }
-
- return entry;
-}
-
-
-/*
- * MD5-sess code.
- *
- * If you want to use algorithm=MD5-sess you must write get_userpw_hash()
- * yourself (see below). The dummy provided here just uses the hash from
- * the auth-file, i.e. it is only useful for testing client implementations
- * of MD5-sess .
- */
-
-/*
- * get_userpw_hash() will be called each time a new session needs to be
- * generated and is expected to return the equivalent of
- *
- * h_urp = ap_md5(r->pool,
- * apr_pstrcat(r->pool, username, ":", ap_auth_name(r), ":", passwd))
- * ap_md5(r->pool,
- * (unsigned char *) apr_pstrcat(r->pool, h_urp, ":", resp->nonce, ":",
- * resp->cnonce, NULL));
- *
- * or put differently, it must return
- *
- * MD5(MD5(username ":" realm ":" password) ":" nonce ":" cnonce)
- *
- * If something goes wrong, the failure must be logged and NULL returned.
- *
- * You must implement this yourself, which will probably consist of code
- * contacting the password server with the necessary information (typically
- * the username, realm, nonce, and cnonce) and receiving the hash from it.
- *
- * TBD: This function should probably be in a seperate source file so that
- * people need not modify mod_auth_digest.c each time they install a new
- * version of apache.
- */
-static const char *get_userpw_hash(const request_rec *r,
- const digest_header_rec *resp,
- const digest_config_rec *conf)
-{
- return ap_md5(r->pool,
- (unsigned char *) apr_pstrcat(r->pool, conf->ha1, ":", resp->nonce,
- ":", resp->cnonce, NULL));
-}
-
-
-/* Retrieve current session H(A1). If there is none and "generate" is
- * true then a new session for MD5-sess is generated and stored in the
- * client struct; if generate is false, or a new session could not be
- * generated then NULL is returned (in case of failure to generate the
- * failure reason will have been logged already).
- */
-static const char *get_session_HA1(const request_rec *r,
- digest_header_rec *resp,
- const digest_config_rec *conf,
- int generate)
-{
- const char *ha1 = NULL;
-
- /* return the current sessions if there is one */
- if (resp->opaque && resp->client && resp->client->ha1[0]) {
- return resp->client->ha1;
- }
- else if (!generate) {
- return NULL;
- }
-
- /* generate a new session */
- if (!resp->client) {
- resp->client = gen_client(r);
- }
- if (resp->client) {
- ha1 = get_userpw_hash(r, resp, conf);
- if (ha1) {
- memcpy(resp->client->ha1, ha1, sizeof(resp->client->ha1));
- }
- }
-
- return ha1;
-}
-
-
-static void clear_session(const digest_header_rec *resp)
-{
- if (resp->client) {
- resp->client->ha1[0] = '\0';
- }
-}
-
-/*
- * Authorization challenge generation code (for WWW-Authenticate)
- */
-
-static const char *ltox(apr_pool_t *p, unsigned long num)
-{
- if (num != 0) {
- return apr_psprintf(p, "%lx", num);
- }
- else {
- return "";
- }
-}
-
-static void note_digest_auth_failure(request_rec *r,
- const digest_config_rec *conf,
- digest_header_rec *resp, int stale)
-{
- const char *qop, *opaque, *opaque_param, *domain, *nonce;
- int cnt;
-
- /* Setup qop */
-
- if (conf->qop_list[0] == NULL) {
- qop = ", qop=\"auth\"";
- }
- else if (!strcasecmp(conf->qop_list[0], "none")) {
- qop = "";
- }
- else {
- qop = apr_pstrcat(r->pool, ", qop=\"", conf->qop_list[0], NULL);
- for (cnt = 1; conf->qop_list[cnt] != NULL; cnt++) {
- qop = apr_pstrcat(r->pool, qop, ",", conf->qop_list[cnt], NULL);
- }
- qop = apr_pstrcat(r->pool, qop, "\"", NULL);
- }
-
- /* Setup opaque */
-
- if (resp->opaque == NULL) {
- /* new client */
- if ((conf->check_nc || conf->nonce_lifetime == 0
- || !strcasecmp(conf->algorithm, "MD5-sess"))
- && (resp->client = gen_client(r)) != NULL) {
- opaque = ltox(r->pool, resp->client->key);
- }
- else {
- opaque = ""; /* opaque not needed */
- }
- }
- else if (resp->client == NULL) {
- /* client info was gc'd */
- resp->client = gen_client(r);
- if (resp->client != NULL) {
- opaque = ltox(r->pool, resp->client->key);
- stale = 1;
- client_list->num_renewed++;
- }
- else {
- opaque = ""; /* ??? */
- }
- }
- else {
- opaque = resp->opaque;
- /* we're generating a new nonce, so reset the nonce-count */
- resp->client->nonce_count = 0;
- }
-
- if (opaque[0]) {
- opaque_param = apr_pstrcat(r->pool, ", opaque=\"", opaque, "\"", NULL);
- }
- else {
- opaque_param = NULL;
- }
-
- /* Setup nonce */
-
- nonce = gen_nonce(r->pool, r->request_time, opaque, r->server, conf);
- if (resp->client && conf->nonce_lifetime == 0) {
- memcpy(resp->client->last_nonce, nonce, NONCE_LEN+1);
- }
-
- /* Setup MD5-sess stuff. Note that we just clear out the session
- * info here, since we can't generate a new session until the request
- * from the client comes in with the cnonce.
- */
-
- if (!strcasecmp(conf->algorithm, "MD5-sess")) {
- clear_session(resp);
- }
-
- /* setup domain attribute. We want to send this attribute wherever
- * possible so that the client won't send the Authorization header
- * unneccessarily (it's usually > 200 bytes!).
- */
-
-
- /* don't send domain
- * - for proxy requests
- * - if it's no specified
- */
- if (r->proxyreq || !conf->uri_list) {
- domain = NULL;
- }
- else {
- domain = conf->uri_list;
- }
-
- apr_table_mergen(r->err_headers_out,
- (PROXYREQ_PROXY == r->proxyreq)
- ? "Proxy-Authenticate" : "WWW-Authenticate",
- apr_psprintf(r->pool, "Digest realm=\"%s\", "
- "nonce=\"%s\", algorithm=%s%s%s%s%s",
- ap_auth_name(r), nonce, conf->algorithm,
- opaque_param ? opaque_param : "",
- domain ? domain : "",
- stale ? ", stale=true" : "", qop));
-
-}
-
-
-/*
- * Authorization header verification code
- */
-
-static authn_status get_hash(request_rec *r, const char *user,
- digest_config_rec *conf)
-{
- authn_status auth_result;
- char *password;
- authn_provider_list *current_provider;
-
- current_provider = conf->providers;
- do {
- const authn_provider *provider;
-
- /* For now, if a provider isn't set, we'll be nice and use the file
- * provider.
- */
- if (!current_provider) {
- provider = ap_lookup_provider(AUTHN_PROVIDER_GROUP,
- AUTHN_DEFAULT_PROVIDER, "0");
-
- if (!provider || !provider->get_realm_hash) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "No Authn provider configured");
- auth_result = AUTH_GENERAL_ERROR;
- break;
- }
- }
- else {
- provider = current_provider->provider;
- }
-
- /* We expect the password to be md5 hash of user:realm:password */
- auth_result = provider->get_realm_hash(r, user, conf->realm,
- &password);
-
- /* Something occured. Stop checking. */
- if (auth_result != AUTH_USER_NOT_FOUND) {
- break;
- }
-
- /* If we're not really configured for providers, stop now. */
- if (!conf->providers) {
- break;
- }
-
- current_provider = current_provider->next;
- } while (current_provider);
-
- if (auth_result == AUTH_USER_FOUND) {
- conf->ha1 = password;
- }
-
- return auth_result;
-}
-
-static int check_nc(const request_rec *r, const digest_header_rec *resp,
- const digest_config_rec *conf)
-{
- unsigned long nc;
- const char *snc = resp->nonce_count;
- char *endptr;
-
- if (!conf->check_nc || !client_shm) {
- return OK;
- }
-
- nc = strtol(snc, &endptr, 16);
- if (endptr < (snc+strlen(snc)) && !apr_isspace(*endptr)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: invalid nc %s received - not a number", snc);
- return !OK;
- }
-
- if (!resp->client) {
- return !OK;
- }
-
- if (nc != resp->client->nonce_count) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: Warning, possible replay attack: nonce-count "
- "check failed: %lu != %lu", nc,
- resp->client->nonce_count);
- return !OK;
- }
-
- return OK;
-}
-
-static int check_nonce(request_rec *r, digest_header_rec *resp,
- const digest_config_rec *conf)
-{
- apr_time_t dt;
- int len;
- time_rec nonce_time;
- char tmp, hash[NONCE_HASH_LEN+1];
-
- if (strlen(resp->nonce) != NONCE_LEN) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: invalid nonce %s received - length is not %d",
- resp->nonce, NONCE_LEN);
- note_digest_auth_failure(r, conf, resp, 1);
- return HTTP_UNAUTHORIZED;
- }
-
- tmp = resp->nonce[NONCE_TIME_LEN];
- resp->nonce[NONCE_TIME_LEN] = '\0';
- len = apr_base64_decode_binary(nonce_time.arr, resp->nonce);
- gen_nonce_hash(hash, resp->nonce, resp->opaque, r->server, conf);
- resp->nonce[NONCE_TIME_LEN] = tmp;
- resp->nonce_time = nonce_time.time;
-
- if (strcmp(hash, resp->nonce+NONCE_TIME_LEN)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: invalid nonce %s received - hash is not %s",
- resp->nonce, hash);
- note_digest_auth_failure(r, conf, resp, 1);
- return HTTP_UNAUTHORIZED;
- }
-
- dt = r->request_time - nonce_time.time;
- if (conf->nonce_lifetime > 0 && dt < 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: invalid nonce %s received - user attempted "
- "time travel", resp->nonce);
- note_digest_auth_failure(r, conf, resp, 1);
- return HTTP_UNAUTHORIZED;
- }
-
- if (conf->nonce_lifetime > 0) {
- if (dt > conf->nonce_lifetime) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0,r,
- "Digest: user %s: nonce expired (%.2f seconds old "
- "- max lifetime %.2f) - sending new nonce",
- r->user, (double)apr_time_sec(dt),
- (double)apr_time_sec(conf->nonce_lifetime));
- note_digest_auth_failure(r, conf, resp, 1);
- return HTTP_UNAUTHORIZED;
- }
- }
- else if (conf->nonce_lifetime == 0 && resp->client) {
- if (memcmp(resp->client->last_nonce, resp->nonce, NONCE_LEN)) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "Digest: user %s: one-time-nonce mismatch - sending "
- "new nonce", r->user);
- note_digest_auth_failure(r, conf, resp, 1);
- return HTTP_UNAUTHORIZED;
- }
- }
- /* else (lifetime < 0) => never expires */
-
- return OK;
-}
-
-/* The actual MD5 code... whee */
-
-/* RFC-2069 */
-static const char *old_digest(const request_rec *r,
- const digest_header_rec *resp, const char *ha1)
-{
- const char *ha2;
-
- ha2 = ap_md5(r->pool, (unsigned char *)apr_pstrcat(r->pool, resp->method, ":",
- resp->uri, NULL));
- return ap_md5(r->pool,
- (unsigned char *)apr_pstrcat(r->pool, ha1, ":", resp->nonce,
- ":", ha2, NULL));
-}
-
-/* RFC-2617 */
-static const char *new_digest(const request_rec *r,
- digest_header_rec *resp,
- const digest_config_rec *conf)
-{
- const char *ha1, *ha2, *a2;
-
- if (resp->algorithm && !strcasecmp(resp->algorithm, "MD5-sess")) {
- ha1 = get_session_HA1(r, resp, conf, 1);
- if (!ha1) {
- return NULL;
- }
- }
- else {
- ha1 = conf->ha1;
- }
-
- if (resp->message_qop && !strcasecmp(resp->message_qop, "auth-int")) {
- a2 = apr_pstrcat(r->pool, resp->method, ":", resp->uri, ":",
- ap_md5(r->pool, (const unsigned char*) ""), NULL);
- /* TBD */
- }
- else {
- a2 = apr_pstrcat(r->pool, resp->method, ":", resp->uri, NULL);
- }
- ha2 = ap_md5(r->pool, (const unsigned char *)a2);
-
- return ap_md5(r->pool,
- (unsigned char *)apr_pstrcat(r->pool, ha1, ":", resp->nonce,
- ":", resp->nonce_count, ":",
- resp->cnonce, ":",
- resp->message_qop, ":", ha2,
- NULL));
-}
-
-
-static void copy_uri_components(apr_uri_t *dst,
- apr_uri_t *src, request_rec *r) {
- if (src->scheme && src->scheme[0] != '\0') {
- dst->scheme = src->scheme;
- }
- else {
- dst->scheme = (char *) "http";
- }
-
- if (src->hostname && src->hostname[0] != '\0') {
- dst->hostname = apr_pstrdup(r->pool, src->hostname);
- ap_unescape_url(dst->hostname);
- }
- else {
- dst->hostname = (char *) ap_get_server_name(r);
- }
-
- if (src->port_str && src->port_str[0] != '\0') {
- dst->port = src->port;
- }
- else {
- dst->port = ap_get_server_port(r);
- }
-
- if (src->path && src->path[0] != '\0') {
- dst->path = apr_pstrdup(r->pool, src->path);
- ap_unescape_url(dst->path);
- }
- else {
- dst->path = src->path;
- }
-
- if (src->query && src->query[0] != '\0') {
- dst->query = apr_pstrdup(r->pool, src->query);
- ap_unescape_url(dst->query);
- }
- else {
- dst->query = src->query;
- }
-}
-
-/* These functions return 0 if client is OK, and proper error status
- * if not... either HTTP_UNAUTHORIZED, if we made a check, and it failed, or
- * HTTP_INTERNAL_SERVER_ERROR, if things are so totally confused that we
- * couldn't figure out how to tell if the client is authorized or not.
- *
- * If they return DECLINED, and all other modules also decline, that's
- * treated by the server core as a configuration error, logged and
- * reported as such.
- */
-
-/* Determine user ID, and check if the attributes are correct, if it
- * really is that user, if the nonce is correct, etc.
- */
-
-static int authenticate_digest_user(request_rec *r)
-{
- digest_config_rec *conf;
- digest_header_rec *resp;
- request_rec *mainreq;
- const char *t;
- int res;
- authn_status return_code;
-
- /* do we require Digest auth for this URI? */
-
- if (!(t = ap_auth_type(r)) || strcasecmp(t, "Digest")) {
- return DECLINED;
- }
-
- if (!ap_auth_name(r)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: need AuthName: %s", r->uri);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
-
- /* get the client response and mark */
-
- mainreq = r;
- while (mainreq->main != NULL) {
- mainreq = mainreq->main;
- }
- while (mainreq->prev != NULL) {
- mainreq = mainreq->prev;
- }
- resp = (digest_header_rec *) ap_get_module_config(mainreq->request_config,
- &auth_digest_module);
- resp->needed_auth = 1;
-
-
- /* get our conf */
-
- conf = (digest_config_rec *) ap_get_module_config(r->per_dir_config,
- &auth_digest_module);
-
-
- /* check for existence and syntax of Auth header */
-
- if (resp->auth_hdr_sts != VALID) {
- if (resp->auth_hdr_sts == NOT_DIGEST) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: client used wrong authentication scheme "
- "`%s': %s", resp->scheme, r->uri);
- }
- else if (resp->auth_hdr_sts == INVALID) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: missing user, realm, nonce, uri, digest, "
- "cnonce, or nonce_count in authorization header: %s",
- r->uri);
- }
- /* else (resp->auth_hdr_sts == NO_HEADER) */
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
-
- r->user = (char *) resp->username;
- r->ap_auth_type = (char *) "Digest";
-
- /* check the auth attributes */
-
- if (strcmp(resp->uri, resp->raw_request_uri)) {
- /* Hmm, the simple match didn't work (probably a proxy modified the
- * request-uri), so lets do a more sophisticated match
- */
- apr_uri_t r_uri, d_uri;
-
- copy_uri_components(&r_uri, resp->psd_request_uri, r);
- if (apr_uri_parse(r->pool, resp->uri, &d_uri) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: invalid uri <%s> in Authorization header",
- resp->uri);
- return HTTP_BAD_REQUEST;
- }
-
- if (d_uri.hostname) {
- ap_unescape_url(d_uri.hostname);
- }
- if (d_uri.path) {
- ap_unescape_url(d_uri.path);
- }
-
- if (d_uri.query) {
- ap_unescape_url(d_uri.query);
- }
- else if (r_uri.query) {
- /* MSIE compatibility hack. MSIE has some RFC issues - doesn't
- * include the query string in the uri Authorization component
- * or when computing the response component. the second part
- * works out ok, since we can hash the header and get the same
- * result. however, the uri from the request line won't match
- * the uri Authorization component since the header lacks the
- * query string, leaving us incompatable with a (broken) MSIE.
- *
- * the workaround is to fake a query string match if in the proper
- * environment - BrowserMatch MSIE, for example. the cool thing
- * is that if MSIE ever fixes itself the simple match ought to
- * work and this code won't be reached anyway, even if the
- * environment is set.
- */
-
- if (apr_table_get(r->subprocess_env,
- "AuthDigestEnableQueryStringHack")) {
-
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, "Digest: "
- "applying AuthDigestEnableQueryStringHack "
- "to uri <%s>", resp->raw_request_uri);
-
- d_uri.query = r_uri.query;
- }
- }
-
- if (r->method_number == M_CONNECT) {
- if (strcmp(resp->uri, r_uri.hostinfo)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: uri mismatch - <%s> does not match "
- "request-uri <%s>", resp->uri, r_uri.hostinfo);
- return HTTP_BAD_REQUEST;
- }
- }
- else if (
- /* check hostname matches, if present */
- (d_uri.hostname && d_uri.hostname[0] != '\0'
- && strcasecmp(d_uri.hostname, r_uri.hostname))
- /* check port matches, if present */
- || (d_uri.port_str && d_uri.port != r_uri.port)
- /* check that server-port is default port if no port present */
- || (d_uri.hostname && d_uri.hostname[0] != '\0'
- && !d_uri.port_str && r_uri.port != ap_default_port(r))
- /* check that path matches */
- || (d_uri.path != r_uri.path
- /* either exact match */
- && (!d_uri.path || !r_uri.path
- || strcmp(d_uri.path, r_uri.path))
- /* or '*' matches empty path in scheme://host */
- && !(d_uri.path && !r_uri.path && resp->psd_request_uri->hostname
- && d_uri.path[0] == '*' && d_uri.path[1] == '\0'))
- /* check that query matches */
- || (d_uri.query != r_uri.query
- && (!d_uri.query || !r_uri.query
- || strcmp(d_uri.query, r_uri.query)))
- ) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: uri mismatch - <%s> does not match "
- "request-uri <%s>", resp->uri, resp->raw_request_uri);
- return HTTP_BAD_REQUEST;
- }
- }
-
- if (resp->opaque && resp->opaque_num == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: received invalid opaque - got `%s'",
- resp->opaque);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
-
- if (strcmp(resp->realm, conf->realm)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: realm mismatch - got `%s' but expected `%s'",
- resp->realm, conf->realm);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
-
- if (resp->algorithm != NULL
- && strcasecmp(resp->algorithm, "MD5")
- && strcasecmp(resp->algorithm, "MD5-sess")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: unknown algorithm `%s' received: %s",
- resp->algorithm, r->uri);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
-
- return_code = get_hash(r, r->user, conf);
-
- if (return_code == AUTH_USER_NOT_FOUND) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: user `%s' in realm `%s' not found: %s",
- r->user, conf->realm, r->uri);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
- else if (return_code == AUTH_USER_FOUND) {
- /* we have a password, so continue */
- }
- else if (return_code == AUTH_DENIED) {
- /* authentication denied in the provider before attempting a match */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: user `%s' in realm `%s' denied by provider: %s",
- r->user, conf->realm, r->uri);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
- else {
- /* AUTH_GENERAL_ERROR (or worse)
- * We'll assume that the module has already said what its error
- * was in the logs.
- */
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (resp->message_qop == NULL) {
- /* old (rfc-2069) style digest */
- if (strcmp(resp->digest, old_digest(r, resp, conf->ha1))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: user %s: password mismatch: %s", r->user,
- r->uri);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
- }
- else {
- const char *exp_digest;
- int match = 0, idx;
- for (idx = 0; conf->qop_list[idx] != NULL; idx++) {
- if (!strcasecmp(conf->qop_list[idx], resp->message_qop)) {
- match = 1;
- break;
- }
- }
-
- if (!match
- && !(conf->qop_list[0] == NULL
- && !strcasecmp(resp->message_qop, "auth"))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: invalid qop `%s' received: %s",
- resp->message_qop, r->uri);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
-
- exp_digest = new_digest(r, resp, conf);
- if (!exp_digest) {
- /* we failed to allocate a client struct */
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- if (strcmp(resp->digest, exp_digest)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: user %s: password mismatch: %s", r->user,
- r->uri);
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
- }
-
- if (check_nc(r, resp, conf) != OK) {
- note_digest_auth_failure(r, conf, resp, 0);
- return HTTP_UNAUTHORIZED;
- }
-
- /* Note: this check is done last so that a "stale=true" can be
- generated if the nonce is old */
- if ((res = check_nonce(r, resp, conf))) {
- return res;
- }
-
- return OK;
-}
-
-/*
- * Authorization-Info header code
- */
-
-#ifdef SEND_DIGEST
-static const char *hdr(const apr_table_t *tbl, const char *name)
-{
- const char *val = apr_table_get(tbl, name);
- if (val) {
- return val;
- }
- else {
- return "";
- }
-}
-#endif
-
-static int add_auth_info(request_rec *r)
-{
- const digest_config_rec *conf =
- (digest_config_rec *) ap_get_module_config(r->per_dir_config,
- &auth_digest_module);
- digest_header_rec *resp =
- (digest_header_rec *) ap_get_module_config(r->request_config,
- &auth_digest_module);
- const char *ai = NULL, *digest = NULL, *nextnonce = "";
-
- if (resp == NULL || !resp->needed_auth || conf == NULL) {
- return OK;
- }
-
-
- /* rfc-2069 digest
- */
- if (resp->message_qop == NULL) {
- /* old client, so calc rfc-2069 digest */
-
-#ifdef SEND_DIGEST
- /* most of this totally bogus because the handlers don't set the
- * headers until the final handler phase (I wonder why this phase
- * is called fixup when there's almost nothing you can fix up...)
- *
- * Because it's basically impossible to get this right (e.g. the
- * Content-length is never set yet when we get here, and we can't
- * calc the entity hash) it's best to just leave this #def'd out.
- */
- char date[APR_RFC822_DATE_LEN];
- apr_rfc822_date(date, r->request_time);
- char *entity_info =
- ap_md5(r->pool,
- (unsigned char *) apr_pstrcat(r->pool, resp->raw_request_uri,
- ":",
- r->content_type ? r->content_type : ap_default_type(r), ":",
- hdr(r->headers_out, "Content-Length"), ":",
- r->content_encoding ? r->content_encoding : "", ":",
- hdr(r->headers_out, "Last-Modified"), ":",
- r->no_cache && !apr_table_get(r->headers_out, "Expires") ?
- date :
- hdr(r->headers_out, "Expires"),
- NULL));
- digest =
- ap_md5(r->pool,
- (unsigned char *)apr_pstrcat(r->pool, conf->ha1, ":",
- resp->nonce, ":",
- r->method, ":",
- date, ":",
- entity_info, ":",
- ap_md5(r->pool, (unsigned char *) ""), /* H(entity) - TBD */
- NULL));
-#endif
- }
-
-
- /* setup nextnonce
- */
- if (conf->nonce_lifetime > 0) {
- /* send nextnonce if current nonce will expire in less than 30 secs */
- if ((r->request_time - resp->nonce_time) > (conf->nonce_lifetime-NEXTNONCE_DELTA)) {
- nextnonce = apr_pstrcat(r->pool, ", nextnonce=\"",
- gen_nonce(r->pool, r->request_time,
- resp->opaque, r->server, conf),
- "\"", NULL);
- if (resp->client)
- resp->client->nonce_count = 0;
- }
- }
- else if (conf->nonce_lifetime == 0 && resp->client) {
- const char *nonce = gen_nonce(r->pool, 0, resp->opaque, r->server,
- conf);
- nextnonce = apr_pstrcat(r->pool, ", nextnonce=\"", nonce, "\"", NULL);
- memcpy(resp->client->last_nonce, nonce, NONCE_LEN+1);
- }
- /* else nonce never expires, hence no nextnonce */
-
-
- /* do rfc-2069 digest
- */
- if (conf->qop_list[0] && !strcasecmp(conf->qop_list[0], "none")
- && resp->message_qop == NULL) {
- /* use only RFC-2069 format */
- if (digest) {
- ai = apr_pstrcat(r->pool, "digest=\"", digest, "\"", nextnonce,NULL);
- }
- else {
- ai = nextnonce;
- }
- }
- else {
- const char *resp_dig, *ha1, *a2, *ha2;
-
- /* calculate rspauth attribute
- */
- if (resp->algorithm && !strcasecmp(resp->algorithm, "MD5-sess")) {
- ha1 = get_session_HA1(r, resp, conf, 0);
- if (!ha1) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Digest: internal error: couldn't find session "
- "info for user %s", resp->username);
- return !OK;
- }
- }
- else {
- ha1 = conf->ha1;
- }
-
- if (resp->message_qop && !strcasecmp(resp->message_qop, "auth-int")) {
- a2 = apr_pstrcat(r->pool, ":", resp->uri, ":",
- ap_md5(r->pool,(const unsigned char *) ""), NULL);
- /* TBD */
- }
- else {
- a2 = apr_pstrcat(r->pool, ":", resp->uri, NULL);
- }
- ha2 = ap_md5(r->pool, (const unsigned char *)a2);
-
- resp_dig = ap_md5(r->pool,
- (unsigned char *)apr_pstrcat(r->pool, ha1, ":",
- resp->nonce, ":",
- resp->nonce_count, ":",
- resp->cnonce, ":",
- resp->message_qop ?
- resp->message_qop : "",
- ":", ha2, NULL));
-
- /* assemble Authentication-Info header
- */
- ai = apr_pstrcat(r->pool,
- "rspauth=\"", resp_dig, "\"",
- nextnonce,
- resp->cnonce ? ", cnonce=\"" : "",
- resp->cnonce
- ? ap_escape_quotes(r->pool, resp->cnonce)
- : "",
- resp->cnonce ? "\"" : "",
- resp->nonce_count ? ", nc=" : "",
- resp->nonce_count ? resp->nonce_count : "",
- resp->message_qop ? ", qop=" : "",
- resp->message_qop ? resp->message_qop : "",
- digest ? "digest=\"" : "",
- digest ? digest : "",
- digest ? "\"" : "",
- NULL);
- }
-
- if (ai && ai[0]) {
- apr_table_mergen(r->headers_out,
- (PROXYREQ_PROXY == r->proxyreq)
- ? "Proxy-Authentication-Info"
- : "Authentication-Info",
- ai);
- }
-
- return OK;
-}
-
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const cfgPost[]={ "http_core.c", NULL };
- static const char * const parsePre[]={ "mod_proxy.c", NULL };
-
- ap_hook_post_config(initialize_module, NULL, cfgPost, APR_HOOK_MIDDLE);
- ap_hook_child_init(initialize_child, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_read_request(parse_hdr_and_update_nc, parsePre, NULL, APR_HOOK_MIDDLE);
- ap_hook_check_user_id(authenticate_digest_user, NULL, NULL, APR_HOOK_MIDDLE);
-
- ap_hook_fixups(add_auth_info, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA auth_digest_module =
-{
- STANDARD20_MODULE_STUFF,
- create_digest_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- digest_cmds, /* command table */
- register_hooks /* register hooks */
-};
-
diff --git a/modules/aaa/mod_auth_digest.dsp b/modules/aaa/mod_auth_digest.dsp
deleted file mode 100644
index e21d7a79f3..0000000000
--- a/modules/aaa/mod_auth_digest.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth_digest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth_digest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_auth_digest.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_auth_digest.mak" CFG="mod_auth_digest - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_auth_digest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth_digest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_auth_digest - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_auth_digest_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_auth_digest - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_auth_digest_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_auth_digest - Win32 Release"
-# Name "mod_auth_digest - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth_digest.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth_digest.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_auth_digest - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_digest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_auth_digest.so "auth_digest_module for Apache" ../../include/ap_release.h > .\mod_auth_digest.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_auth_digest - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_digest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_auth_digest.so "auth_digest_module for Apache" ../../include/ap_release.h > .\mod_auth_digest.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authn_anon.c b/modules/aaa/mod_authn_anon.c
deleted file mode 100644
index 3622c8275d..0000000000
--- a/modules/aaa/mod_authn_anon.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Adapted to allow anonymous logins, just like with Anon-FTP, when
- * one gives the magic user name 'anonymous' and ones email address
- * as the password.
- *
- * Just add the following tokes to your <directory> setup:
- *
- * Anonymous magic-userid [magic-userid]...
- *
- * Anonymous_MustGiveEmail [ on | off ] default = on
- * Anonymous_LogEmail [ on | off ] default = on
- * Anonymous_VerifyEmail [ on | off ] default = off
- * Anonymous_NoUserId [ on | off ] default = off
- *
- * The magic user id is something like 'anonymous', it is NOT case sensitive.
- *
- * The MustGiveEmail flag can be used to force users to enter something
- * in the password field (like an email address). Default is on.
- *
- * Furthermore the 'NoUserID' flag can be set to allow completely empty
- * usernames in as well; this can be is convenient as a single return
- * in broken GUIs like W95 is often given by the user. The Default is off.
- *
- * Dirk.vanGulik@jrc.it; http://ewse.ceo.org; http://me-www.jrc.it/~dirkx
- *
- */
-
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_provider.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "http_protocol.h"
-
-#include "mod_auth.h"
-
-typedef struct anon_auth_user {
- char *user;
- struct anon_auth_user *next;
-} anon_auth_user;
-
-typedef struct {
- anon_auth_user *users;
- int nouserid;
- int logemail;
- int verifyemail;
- int mustemail;
- int anyuserid;
-} authn_anon_config_rec;
-
-static void *create_authn_anon_dir_config(apr_pool_t *p, char *d)
-{
- authn_anon_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- /* just to illustrate the defaults really. */
- conf->users = NULL;
-
- conf->nouserid = 0;
- conf->anyuserid = 0;
- conf->logemail = 1;
- conf->verifyemail = 0;
- conf->mustemail = 1;
- return conf;
-}
-
-static const char *anon_set_string_slots(cmd_parms *cmd,
- void *my_config, const char *arg)
-{
- authn_anon_config_rec *conf = my_config;
- anon_auth_user *first;
-
- if (!*arg) {
- return "Anonymous string cannot be empty, use Anonymous_NoUserId";
- }
-
- /* squeeze in a record */
- if (!conf->anyuserid) {
- if (!strcmp(arg, "*")) {
- conf->anyuserid = 1;
- }
- else {
- first = conf->users;
- conf->users = apr_palloc(cmd->pool, sizeof(*conf->users));
- conf->users->user = apr_pstrdup(cmd->pool, arg);
- conf->users->next = first;
- }
- }
-
- return NULL;
-}
-
-static const command_rec authn_anon_cmds[] =
-{
- AP_INIT_ITERATE("Anonymous", anon_set_string_slots, NULL, OR_AUTHCFG,
- "a space-separated list of user IDs"),
- AP_INIT_FLAG("Anonymous_MustGiveEmail", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authn_anon_config_rec, mustemail),
- OR_AUTHCFG, "Limited to 'on' or 'off'"),
- AP_INIT_FLAG("Anonymous_NoUserId", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authn_anon_config_rec, nouserid),
- OR_AUTHCFG, "Limited to 'on' or 'off'"),
- AP_INIT_FLAG("Anonymous_VerifyEmail", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authn_anon_config_rec, verifyemail),
- OR_AUTHCFG, "Limited to 'on' or 'off'"),
- AP_INIT_FLAG("Anonymous_LogEmail", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authn_anon_config_rec, logemail),
- OR_AUTHCFG, "Limited to 'on' or 'off'"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authn_anon_module;
-
-static authn_status check_anonymous(request_rec *r, const char *user,
- const char *sent_pw)
-{
- authn_anon_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authn_anon_module);
- authn_status res = AUTH_USER_NOT_FOUND;
-
- /* Ignore if we are not configured */
- if (!conf->users) {
- return AUTH_USER_NOT_FOUND;
- }
-
- /* Do we allow an empty userID and/or is it the magic one
- */
- if (!*user) {
- if (conf->nouserid) {
- res = AUTH_USER_FOUND;
- }
- }
- else if (conf->anyuserid) {
- res = AUTH_USER_FOUND;
- }
- else {
- anon_auth_user *p = conf->users;
-
- while (p) {
- if (!strcasecmp(user, p->user)) {
- res = AUTH_USER_FOUND;
- break;
- }
- p = p->next;
- }
- }
-
- /* Now if the supplied user-ID was ok, grant access if:
- * (a) no passwd was sent and no password and no verification
- * were configured.
- * (b) password was sent and no verification was configured
- * (c) verification was configured and the password (sent or not)
- * looks like an email address
- */
- if ( (res == AUTH_USER_FOUND)
- && (!conf->mustemail || *sent_pw)
- && ( !conf->verifyemail
- || (ap_strchr_c(sent_pw, '@') && ap_strchr_c(sent_pw, '.'))))
- {
- if (conf->logemail && ap_is_initial_req(r)) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, APR_SUCCESS, r,
- "Anonymous: Passwd <%s> Accepted",
- sent_pw ? sent_pw : "\'none\'");
- }
-
- return AUTH_GRANTED;
- }
-
- return (res == AUTH_USER_NOT_FOUND ? res : AUTH_DENIED);
-}
-
-static const authn_provider authn_anon_provider =
-{
- &check_anonymous,
- NULL
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_provider(p, AUTHN_PROVIDER_GROUP, "anon", "0",
- &authn_anon_provider);
-}
-
-module AP_MODULE_DECLARE_DATA authn_anon_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authn_anon_dir_config, /* dir config creater */
- NULL, /* dir merger ensure strictness */
- NULL, /* server config */
- NULL, /* merge server config */
- authn_anon_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authn_anon.dsp b/modules/aaa/mod_authn_anon.dsp
deleted file mode 100644
index 344b01da5f..0000000000
--- a/modules/aaa/mod_authn_anon.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authn_anon" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authn_anon - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_anon.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_anon.mak" CFG="mod_authn_anon - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authn_anon - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authn_anon - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authn_anon - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authn_anon_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authn_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_anon.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authn_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_anon.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authn_anon - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authn_anon_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_anon.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_anon.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authn_anon - Win32 Release"
-# Name "mod_authn_anon - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authn_anon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authn_anon.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authn_anon - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_anon.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_anon.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_anon.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authn_anon - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_anon.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_anon.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_anon.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authn_dbm.c b/modules/aaa/mod_authn_dbm.c
deleted file mode 100644
index 76e55d841f..0000000000
--- a/modules/aaa/mod_authn_dbm.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_auth: authentication
- *
- * Rob McCool & Brian Behlendorf.
- *
- * Adapted to Apache by rst.
- *
- */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_strings.h"
-#include "apr_dbm.h"
-#include "apr_md5.h" /* for apr_password_validate */
-
-#include "ap_provider.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h" /* for ap_hook_(check_user_id | auth_checker)*/
-
-#include "mod_auth.h"
-
-typedef struct {
- char *pwfile;
- char *dbmtype;
-} authn_dbm_config_rec;
-
-static void *create_authn_dbm_dir_config(apr_pool_t *p, char *d)
-{
- authn_dbm_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->pwfile = NULL;
- conf->dbmtype = "default";
-
- return conf;
-}
-
-static const char *set_dbm_type(cmd_parms *cmd,
- void *dir_config,
- const char *arg)
-{
- authn_dbm_config_rec *conf = dir_config;
-
- conf->dbmtype = apr_pstrdup(cmd->pool, arg);
- return NULL;
-}
-
-static const command_rec authn_dbm_cmds[] =
-{
- AP_INIT_TAKE1("AuthDBMUserFile", ap_set_file_slot,
- (void *)APR_OFFSETOF(authn_dbm_config_rec, pwfile),
- OR_AUTHCFG, "dbm database file containing user IDs and passwords"),
- AP_INIT_TAKE1("AuthDBMType", set_dbm_type,
- NULL,
- OR_AUTHCFG, "what type of DBM file the user file is"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authn_dbm_module;
-
-static apr_status_t fetch_dbm_value(const char *dbmtype, const char *dbmfile,
- const char *user, char **value,
- apr_pool_t *pool)
-{
- apr_dbm_t *f;
- apr_datum_t key, val;
- apr_status_t rv;
-
- rv = apr_dbm_open_ex(&f, dbmtype, dbmfile, APR_DBM_READONLY,
- APR_OS_DEFAULT, pool);
-
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- key.dptr = (char*)user;
-#ifndef NETSCAPE_DBM_COMPAT
- key.dsize = strlen(key.dptr);
-#else
- key.dsize = strlen(key.dptr) + 1;
-#endif
-
- *value = NULL;
-
- if (apr_dbm_fetch(f, key, &val) == APR_SUCCESS && val.dptr) {
- *value = apr_pstrmemdup(pool, val.dptr, val.dsize);
- }
-
- apr_dbm_close(f);
-
- return rv;
-}
-
-static authn_status check_dbm_pw(request_rec *r, const char *user,
- const char *password)
-{
- authn_dbm_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authn_dbm_module);
- apr_status_t rv;
- char *dbm_password;
- char *colon_pw;
-
- rv = fetch_dbm_value(conf->dbmtype, conf->pwfile, user, &dbm_password,
- r->pool);
-
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "could not open dbm (type %s) auth file: %s",
- conf->dbmtype, conf->pwfile);
- return AUTH_GENERAL_ERROR;
- }
-
- if (!dbm_password) {
- return AUTH_USER_NOT_FOUND;
- }
-
- colon_pw = ap_strchr(dbm_password, ':');
- if (colon_pw) {
- *colon_pw = '\0';
- }
-
- rv = apr_password_validate(password, dbm_password);
-
- if (rv != APR_SUCCESS) {
- return AUTH_DENIED;
- }
-
- return AUTH_GRANTED;
-}
-
-static authn_status get_dbm_realm_hash(request_rec *r, const char *user,
- const char *realm, char **rethash)
-{
- authn_dbm_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authn_dbm_module);
- apr_status_t rv;
- char *dbm_hash;
- char *colon_hash;
-
- rv = fetch_dbm_value(conf->dbmtype, conf->pwfile,
- apr_pstrcat(r->pool, user, ":", realm, NULL),
- &dbm_hash, r->pool);
-
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "Could not open dbm (type %s) hash file: %s",
- conf->dbmtype, conf->pwfile);
- return AUTH_GENERAL_ERROR;
- }
-
- if (!dbm_hash) {
- return AUTH_USER_NOT_FOUND;
- }
-
- colon_hash = ap_strchr(dbm_hash, ':');
- if (colon_hash) {
- *colon_hash = '\0';
- }
-
- *rethash = dbm_hash;
-
- return AUTH_USER_FOUND;
-}
-
-static const authn_provider authn_dbm_provider =
-{
- &check_dbm_pw,
- &get_dbm_realm_hash
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_provider(p, AUTHN_PROVIDER_GROUP, "dbm", "0",
- &authn_dbm_provider);
-}
-
-module AP_MODULE_DECLARE_DATA authn_dbm_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authn_dbm_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authn_dbm_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authn_dbm.dsp b/modules/aaa/mod_authn_dbm.dsp
deleted file mode 100644
index c75b9c36e6..0000000000
--- a/modules/aaa/mod_authn_dbm.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authn_dbm" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authn_dbm - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_dbm.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_dbm.mak" CFG="mod_authn_dbm - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authn_dbm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authn_dbm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authn_dbm - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authn_dbm_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authn_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_dbm.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authn_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_dbm.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authn_dbm - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authn_dbm_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_dbm.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_dbm.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authn_dbm - Win32 Release"
-# Name "mod_authn_dbm - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authn_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authn_dbm.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authn_dbm - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_dbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_dbm.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_dbm.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authn_dbm - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_dbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_dbm.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_dbm.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authn_default.c b/modules/aaa/mod_authn_default.c
deleted file mode 100644
index ab41ad308f..0000000000
--- a/modules/aaa/mod_authn_default.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-typedef struct {
- int authoritative;
-} authn_default_config_rec;
-
-static void *create_authn_default_dir_config(apr_pool_t *p, char *d)
-{
- authn_default_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->authoritative = 1; /* keep the fortress secure by default */
- return conf;
-}
-
-static const command_rec authn_default_cmds[] =
-{
- AP_INIT_FLAG("AuthDefaultAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authn_default_config_rec,
- authoritative),
- OR_AUTHCFG,
- "Set to 'Off' to allow access control to be passed along to "
- "lower modules if the UserID is not known to this module. "
- "(default is On)."),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authn_default_module;
-
-static int authenticate_no_user(request_rec *r)
-{
- authn_default_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authn_default_module);
-
- const char *type;
-
- if (!(type = ap_auth_type(r))) {
- return DECLINED;
- }
-
- /* fill in the r->user field */
- if (!strcasecmp(type, "Basic")) {
- const char *sent_pw;
- int res;
-
- if ((res = ap_get_basic_auth_pw(r, &sent_pw)) != OK) {
- return res;
- }
- }
-
- if (conf->authoritative == 0) {
- return DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "access to %s failed, reason: verification of user id '%s' "
- "not configured",
- r->uri, r->user ? r->user : "<null>");
-
- ap_note_auth_failure(r);
- return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_check_user_id(authenticate_no_user,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA authn_default_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authn_default_dir_config,/* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authn_default_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authn_default.dsp b/modules/aaa/mod_authn_default.dsp
deleted file mode 100644
index 04cb4586f8..0000000000
--- a/modules/aaa/mod_authn_default.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authn_default" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authn_default - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_default.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_default.mak" CFG="mod_authn_default - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authn_default - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authn_default - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authn_default - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authn_default_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authn_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_default.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authn_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_default.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authn_default - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authn_default_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_default.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_default.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authn_default - Win32 Release"
-# Name "mod_authn_default - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authn_default.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authn_default.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authn_default - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_default.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_default.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_default.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authn_default - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_default.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_default.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_default.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authn_file.c b/modules/aaa/mod_authn_file.c
deleted file mode 100644
index aa4dbe161a..0000000000
--- a/modules/aaa/mod_authn_file.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "apr_md5.h" /* for apr_password_validate */
-
-#include "ap_config.h"
-#include "ap_provider.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-#include "mod_auth.h"
-
-typedef struct {
- char *pwfile;
-} authn_file_config_rec;
-
-static void *create_authn_file_dir_config(apr_pool_t *p, char *d)
-{
- authn_file_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->pwfile = NULL; /* just to illustrate the default really */
- return conf;
-}
-
-static const char *set_authn_file_slot(cmd_parms *cmd, void *offset,
- const char *f, const char *t)
-{
- if (t && strcmp(t, "standard")) {
- return apr_pstrcat(cmd->pool, "Invalid auth file type: ", t, NULL);
- }
-
- return ap_set_file_slot(cmd, offset, f);
-}
-
-static const command_rec authn_file_cmds[] =
-{
- AP_INIT_TAKE12("AuthUserFile", set_authn_file_slot,
- (void *)APR_OFFSETOF(authn_file_config_rec, pwfile),
- OR_AUTHCFG, "text file containing user IDs and passwords"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authn_file_module;
-
-static authn_status check_password(request_rec *r, const char *user,
- const char *password)
-{
- authn_file_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authn_file_module);
- ap_configfile_t *f;
- char l[MAX_STRING_LEN];
- apr_status_t status;
- char *file_password = NULL;
-
- status = ap_pcfg_openfile(&f, r->pool, conf->pwfile);
-
- if (status != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "Could not open password file: %s", conf->pwfile);
- return AUTH_GENERAL_ERROR;
- }
-
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
- const char *rpw, *w;
-
- /* Skip # or blank lines. */
- if ((l[0] == '#') || (!l[0])) {
- continue;
- }
-
- rpw = l;
- w = ap_getword(r->pool, &rpw, ':');
-
- if (!strcmp(user, w)) {
- file_password = ap_getword(r->pool, &rpw, ':');
- break;
- }
- }
- ap_cfg_closefile(f);
-
- if (!file_password) {
- return AUTH_USER_NOT_FOUND;
- }
-
- status = apr_password_validate(password, file_password);
- if (status != APR_SUCCESS) {
- return AUTH_DENIED;
- }
-
- return AUTH_GRANTED;
-}
-
-static authn_status get_realm_hash(request_rec *r, const char *user,
- const char *realm, char **rethash)
-{
- authn_file_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authn_file_module);
- ap_configfile_t *f;
- char l[MAX_STRING_LEN];
- apr_status_t status;
- char *file_hash = NULL;
-
- status = ap_pcfg_openfile(&f, r->pool, conf->pwfile);
-
- if (status != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "Could not open password file: %s", conf->pwfile);
- return AUTH_GENERAL_ERROR;
- }
-
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
- const char *rpw, *w, *x;
-
- /* Skip # or blank lines. */
- if ((l[0] == '#') || (!l[0])) {
- continue;
- }
-
- rpw = l;
- w = ap_getword(r->pool, &rpw, ':');
- x = ap_getword(r->pool, &rpw, ':');
-
- if (x && w && !strcmp(user, w) && !strcmp(realm, x)) {
- /* Remember that this is a md5 hash of user:realm:password. */
- file_hash = ap_getword(r->pool, &rpw, ':');
- break;
- }
- }
- ap_cfg_closefile(f);
-
- if (!file_hash) {
- return AUTH_USER_NOT_FOUND;
- }
-
- *rethash = file_hash;
-
- return AUTH_USER_FOUND;
-}
-
-static const authn_provider authn_file_provider =
-{
- &check_password,
- &get_realm_hash,
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_provider(p, AUTHN_PROVIDER_GROUP, "file", "0",
- &authn_file_provider);
-}
-
-module AP_MODULE_DECLARE_DATA authn_file_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authn_file_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authn_file_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authn_file.dsp b/modules/aaa/mod_authn_file.dsp
deleted file mode 100644
index 24adad5c5a..0000000000
--- a/modules/aaa/mod_authn_file.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authn_file" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authn_file - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_file.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authn_file.mak" CFG="mod_authn_file - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authn_file - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authn_file - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authn_file - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authn_file_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authn_file.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_file.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authn_file.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_file.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authn_file - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authn_file_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_file.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_file.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authn_file.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authn_file.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authn_file - Win32 Release"
-# Name "mod_authn_file - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authn_file.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authn_file.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authn_file - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_file.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_file.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_file.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authn_file - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authn_file.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authn_file.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authn_file.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authz_dbm.c b/modules/aaa/mod_authz_dbm.c
deleted file mode 100644
index f9a8efbbd2..0000000000
--- a/modules/aaa/mod_authz_dbm.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_strings.h"
-#include "apr_dbm.h"
-#include "apr_md5.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h" /* for ap_hook_(check_user_id | auth_checker)*/
-
-#include "mod_auth.h"
-
-typedef struct {
- char *grpfile;
- char *dbmtype;
- int authoritative;
-} authz_dbm_config_rec;
-
-/* This should go into APR; perhaps with some nice
- * caching/locking/flocking of the open dbm file.
- */
-static char *get_dbm_entry_as_str(apr_pool_t *pool, apr_dbm_t *f, char *key)
-{
- apr_datum_t d, q;
- q.dptr = key;
-
-#ifndef NETSCAPE_DBM_COMPAT
- q.dsize = strlen(q.dptr);
-#else
- q.dsize = strlen(q.dptr) + 1;
-#endif
-
- if (apr_dbm_fetch(f, q, &d) == APR_SUCCESS && d.dptr) {
- return apr_pstrmemdup(pool, d.dptr, d.dsize);
- }
-
- return NULL;
-}
-
-static void *create_authz_dbm_dir_config(apr_pool_t *p, char *d)
-{
- authz_dbm_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->grpfile = NULL;
- conf->dbmtype = "default";
- conf->authoritative = 1; /* fortress is secure by default */
-
- return conf;
-}
-
-static const command_rec authz_dbm_cmds[] =
-{
- AP_INIT_TAKE1("AuthDBMGroupFile", ap_set_file_slot,
- (void *)APR_OFFSETOF(authz_dbm_config_rec, grpfile),
- OR_AUTHCFG, "database file containing group names and member user IDs"),
- AP_INIT_TAKE1("AuthzDBMType", ap_set_string_slot,
- (void *)APR_OFFSETOF(authz_dbm_config_rec, dbmtype),
- OR_AUTHCFG, "what type of DBM file the group file is"),
- AP_INIT_FLAG("AuthzDBMAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authz_dbm_config_rec, authoritative),
- OR_AUTHCFG, "Set to 'Off' to allow access control to be passed along to "
- "lower modules, if the group required is not found or empty, or the user "
- " is not in the required groups. (default is On.)"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authz_dbm_module;
-
-/* We do something strange with the group file. If the group file
- * contains any : we assume the format is
- * key=username value=":"groupname [":"anything here is ignored]
- * otherwise we now (0.8.14+) assume that the format is
- * key=username value=groupname
- * The first allows the password and group files to be the same
- * physical DBM file; key=username value=password":"groupname[":"anything]
- *
- * mark@telescope.org, 22Sep95
- */
-
-static apr_status_t get_dbm_grp(request_rec *r, char *key1, char *key2,
- char *dbmgrpfile, char *dbtype,
- const char ** out)
-{
- char *grp_colon, *val;
- apr_status_t retval;
- apr_dbm_t *f;
-
- retval = apr_dbm_open_ex(&f, dbtype, dbmgrpfile, APR_DBM_READONLY,
- APR_OS_DEFAULT, r->pool);
-
- if (retval != APR_SUCCESS) {
- return retval;
- }
-
- /* Try key2 only if key1 failed */
- if (!(val = get_dbm_entry_as_str(r->pool, f, key1))) {
- val = get_dbm_entry_as_str(r->pool, f, key2);
- }
-
- apr_dbm_close(f);
-
- if (val && (grp_colon = ap_strchr(val, ':')) != NULL) {
- char *grp_colon2 = ap_strchr(++grp_colon, ':');
-
- if (grp_colon2) {
- *grp_colon2 = '\0';
- }
- *out = grp_colon;
- }
- else {
- *out = val;
- }
-
- return retval;
-}
-
-/* Checking ID */
-static int dbm_check_auth(request_rec *r)
-{
- authz_dbm_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authz_dbm_module);
- char *user = r->user;
- int m = r->method_number;
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs = reqs_arr ? (require_line *) reqs_arr->elts : NULL;
- register int x;
- const char *t;
- char *w;
- int required_group = 0;
- const char *filegroup = NULL;
- const char *orig_groups = NULL;
- char *reason = NULL;
-
- if (!conf->grpfile) {
- return DECLINED;
- }
-
- if (!reqs_arr) {
- return DECLINED;
- }
-
- for (x = 0; x < reqs_arr->nelts; x++) {
-
- if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
- continue;
- }
-
- t = reqs[x].requirement;
- w = ap_getword_white(r->pool, &t);
-
- if (!strcmp(w, "file-group")) {
- filegroup = apr_table_get(r->notes, AUTHZ_GROUP_NOTE);
-
- if (!filegroup) {
- /* mod_authz_owner is not present or not
- * authoritative. We are just a helper module for testing
- * group membership, so we don't care and decline.
- */
- continue;
- }
- }
-
- if (!strcmp(w, "group") || filegroup) {
- const char *realm = ap_auth_name(r);
- const char *groups;
- char *v;
-
- /* remember that actually a group is required */
- required_group = 1;
-
- /* fetch group data from dbm file only once. */
- if (!orig_groups) {
- apr_status_t status;
-
- status = get_dbm_grp(r, apr_pstrcat(r->pool, user, ":", realm,
- NULL),
- user,
- conf->grpfile, conf->dbmtype, &groups);
-
- if (status != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "could not open dbm (type %s) group access "
- "file: %s", conf->dbmtype, conf->grpfile);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (groups == NULL) {
- /* no groups available, so exit immediately */
- reason = apr_psprintf(r->pool,
- "user doesn't appear in DBM group "
- "file (%s).", conf->grpfile);
- break;
- }
-
- orig_groups = groups;
- }
-
- if (filegroup) {
- groups = orig_groups;
- while (groups[0]) {
- v = ap_getword(r->pool, &groups, ',');
- if (!strcmp(v, filegroup)) {
- return OK;
- }
- }
-
- if (conf->authoritative) {
- reason = apr_psprintf(r->pool,
- "file group '%s' does not match.",
- filegroup);
- break;
- }
-
- /* now forget the filegroup, thus alternatively require'd
- groups get a real chance */
- filegroup = NULL;
- }
- else {
- while (t[0]) {
- w = ap_getword_white(r->pool, &t);
- groups = orig_groups;
- while (groups[0]) {
- v = ap_getword(r->pool, &groups, ',');
- if (!strcmp(v, w)) {
- return OK;
- }
- }
- }
- }
- }
- }
-
- /* No applicable "require group" for this method seen */
- if (!required_group || !conf->authoritative) {
- return DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Authorization of user %s to access %s failed, reason: %s",
- r->user, r->uri,
- reason ? reason : "user is not part of the "
- "'require'ed group(s).");
-
- ap_note_auth_failure(r);
- return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszPre[]={ "mod_authz_owner.c", NULL };
-
- ap_hook_auth_checker(dbm_check_auth, aszPre, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA authz_dbm_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authz_dbm_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authz_dbm_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authz_dbm.dsp b/modules/aaa/mod_authz_dbm.dsp
deleted file mode 100644
index db57e9e3ab..0000000000
--- a/modules/aaa/mod_authz_dbm.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authz_dbm" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authz_dbm - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_dbm.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_dbm.mak" CFG="mod_authz_dbm - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authz_dbm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authz_dbm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authz_dbm - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authz_dbm_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authz_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_dbm.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authz_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_dbm.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authz_dbm - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authz_dbm_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_dbm.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_dbm.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authz_dbm - Win32 Release"
-# Name "mod_authz_dbm - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authz_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authz_dbm.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authz_dbm - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_dbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_dbm.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_dbm.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authz_dbm - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_dbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_dbm.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_dbm.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authz_default.c b/modules/aaa/mod_authz_default.c
deleted file mode 100644
index 2c54c813e6..0000000000
--- a/modules/aaa/mod_authz_default.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "apr_md5.h" /* for apr_password_validate */
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-typedef struct {
- int authoritative;
-} authz_default_config_rec;
-
-static void *create_authz_default_dir_config(apr_pool_t *p, char *d)
-{
- authz_default_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->authoritative = 1; /* keep the fortress secure by default */
- return conf;
-}
-
-static const command_rec authz_default_cmds[] =
-{
- AP_INIT_FLAG("AuthzDefaultAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authz_default_config_rec, authoritative),
- OR_AUTHCFG,
- "Set to 'Off' to allow access control to be passed along to "
- "lower modules. (default is On.)"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authz_default_module;
-
-static int check_user_access(request_rec *r)
-{
- authz_default_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authz_default_module);
- int m = r->method_number;
- int method_restricted = 0;
- register int x;
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs;
-
- /* BUG FIX: tadc, 11-Nov-1995. If there is no "requires" directive,
- * then any user will do.
- */
- if (!reqs_arr) {
- return OK;
- }
- reqs = (require_line *)reqs_arr->elts;
-
- for (x = 0; x < reqs_arr->nelts; x++) {
- if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
- continue;
- }
- method_restricted = 1;
- break;
- }
-
- if (method_restricted == 0) {
- return OK;
- }
-
- if (!(conf->authoritative)) {
- return DECLINED;
- }
-
- /* if we aren't authoritative, any require directive could be
- * considered valid even if noone groked it. However, if we are
- * authoritative, we can warn the user they did something wrong.
- *
- * That something could be a missing "AuthAuthoritative off", but
- * more likely is a typo in the require directive.
- */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "access to %s failed, reason: require directives "
- "present and no Authoritative handler.", r->uri);
-
- ap_note_auth_failure(r);
- return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_auth_checker(check_user_access,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA authz_default_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authz_default_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authz_default_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authz_default.dsp b/modules/aaa/mod_authz_default.dsp
deleted file mode 100644
index 28fcf397bc..0000000000
--- a/modules/aaa/mod_authz_default.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authz_default" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authz_default - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_default.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_default.mak" CFG="mod_authz_default - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authz_default - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authz_default - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authz_default - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authz_default_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authz_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_default.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authz_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_default.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authz_default - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authz_default_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_default.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_default.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_default.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authz_default - Win32 Release"
-# Name "mod_authz_default - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authz_default.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authz_default.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authz_default - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_default.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_default.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_default.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authz_default - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_default.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_default.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_default.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authz_groupfile.c b/modules/aaa/mod_authz_groupfile.c
deleted file mode 100644
index eb5a14d89a..0000000000
--- a/modules/aaa/mod_authz_groupfile.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This module is triggered by an
- *
- * AuthGroupFile standard /path/to/file
- *
- * and the presense of a
- *
- * require group <list-of-groups>
- *
- * In an applicable limit/directory block for that method.
- *
- * If there are no AuthGroupFile directives valid for
- * the request; we DECLINED.
- *
- * If the AuthGroupFile is defined; but somehow not
- * accessible: we SERVER_ERROR (was DECLINED).
- *
- * If there are no 'require ' directives defined for
- * this request then we DECLINED (was OK).
- *
- * If there are no 'require ' directives valid for
- * this request method then we DECLINED. (was OK)
- *
- * If there are any 'require group' blocks and we
- * are not in any group - we HTTP_UNAUTHORIZE
- * unless we are non-authoritative; in which
- * case we DECLINED.
- *
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h" /* apr_isspace */
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-#include "mod_auth.h"
-
-typedef struct {
- char *groupfile;
- int authoritative;
-} authz_groupfile_config_rec;
-
-static void *create_authz_groupfile_dir_config(apr_pool_t *p, char *d)
-{
- authz_groupfile_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->groupfile = NULL;
- conf->authoritative = 1; /* keep the fortress secure by default */
- return conf;
-}
-
-static const char *set_authz_groupfile_slot(cmd_parms *cmd, void *offset, const char *f,
- const char *t)
-{
- if (t && strcmp(t, "standard")) {
- return apr_pstrcat(cmd->pool, "Invalid auth file type: ", t, NULL);
- }
-
- return ap_set_file_slot(cmd, offset, f);
-}
-
-static const command_rec authz_groupfile_cmds[] =
-{
- AP_INIT_TAKE12("AuthGroupFile", set_authz_groupfile_slot,
- (void *)APR_OFFSETOF(authz_groupfile_config_rec, groupfile),
- OR_AUTHCFG,
- "text file containing group names and member user IDs"),
- AP_INIT_FLAG("AuthzGroupFileAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authz_groupfile_config_rec,
- authoritative),
- OR_AUTHCFG,
- "Set to 'Off' to allow access control to be passed along to "
- "lower modules if the 'require group' fails. (default is "
- "On)."),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authz_groupfile_module;
-
-static apr_status_t groups_for_user(apr_pool_t *p, char *user, char *grpfile,
- apr_table_t ** out)
-{
- ap_configfile_t *f;
- apr_table_t *grps = apr_table_make(p, 15);
- apr_pool_t *sp;
- char l[MAX_STRING_LEN];
- const char *group_name, *ll, *w;
- apr_status_t status;
- apr_size_t group_len;
-
- if ((status = ap_pcfg_openfile(&f, p, grpfile)) != APR_SUCCESS) {
- return status ;
- }
-
- apr_pool_create(&sp, p);
-
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
- if ((l[0] == '#') || (!l[0])) {
- continue;
- }
- ll = l;
- apr_pool_clear(sp);
-
- group_name = ap_getword(sp, &ll, ':');
- group_len = strlen(group_name);
-
- while (group_len && apr_isspace(*(group_name + group_len - 1))) {
- --group_len;
- }
-
- while (ll[0]) {
- w = ap_getword_conf(sp, &ll);
- if (!strcmp(w, user)) {
- apr_table_setn(grps, apr_pstrmemdup(p, group_name, group_len),
- "in");
- break;
- }
- }
- }
- ap_cfg_closefile(f);
- apr_pool_destroy(sp);
-
- *out = grps;
- return APR_SUCCESS;
-}
-
-/* Checking ID */
-
-static int check_user_access(request_rec *r)
-{
- authz_groupfile_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authz_groupfile_module);
- char *user = r->user;
- int m = r->method_number;
- int required_group = 0;
- register int x;
- const char *t, *w;
- apr_table_t *grpstatus = NULL;
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs;
- const char *filegroup = NULL;
- char *reason = NULL;
-
- /* If there is no group file - then we are not
- * configured. So decline.
- */
- if (!(conf->groupfile)) {
- return DECLINED;
- }
-
- if (!reqs_arr) {
- return DECLINED; /* XXX change from legacy */
- }
-
- reqs = (require_line *)reqs_arr->elts;
-
- for (x = 0; x < reqs_arr->nelts; x++) {
-
- if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
- continue;
- }
-
- t = reqs[x].requirement;
- w = ap_getword_white(r->pool, &t);
-
- /* needs mod_authz_owner to be present */
- if (!strcmp(w, "file-group")) {
- filegroup = apr_table_get(r->notes, AUTHZ_GROUP_NOTE);
-
- if (!filegroup) {
- /* mod_authz_owner is not present or not
- * authoritative. We are just a helper module for testing
- * group membership, so we don't care and decline.
- */
- continue;
- }
- }
-
- if (!strcmp(w, "group") || filegroup) {
- required_group = 1; /* remember the requirement */
-
- /* create group table only if actually needed. */
- if (!grpstatus) {
- apr_status_t status;
-
- status = groups_for_user(r->pool, user, conf->groupfile,
- &grpstatus);
-
- if (status != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "Could not open group file: %s",
- conf->groupfile);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (apr_table_elts(grpstatus)->nelts == 0) {
- /* no groups available, so exit immediately */
- reason = apr_psprintf(r->pool,
- "user doesn't appear in group file "
- "(%s).", conf->groupfile);
- break;
- }
- }
-
- if (filegroup) {
- if (apr_table_get(grpstatus, filegroup)) {
- return OK;
- }
-
- if (conf->authoritative) {
- reason = apr_psprintf(r->pool,
- "file group '%s' does not match.",
- filegroup);
- break;
- }
-
- /* now forget the filegroup, thus alternatively require'd
- groups get a real chance */
- filegroup = NULL;
- }
- else {
- while (t[0]) {
- w = ap_getword_conf(r->pool, &t);
- if (apr_table_get(grpstatus, w)) {
- return OK;
- }
- }
- }
- }
- }
-
- /* No applicable "require group" for this method seen */
- if (!required_group || !conf->authoritative) {
- return DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Authorization of user %s to access %s failed, reason: %s",
- r->user, r->uri,
- reason ? reason : "user is not part of the "
- "'require'ed group(s).");
-
- ap_note_auth_failure(r);
- return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszPre[]={ "mod_authz_owner.c", NULL };
-
- ap_hook_auth_checker(check_user_access, aszPre, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA authz_groupfile_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authz_groupfile_dir_config,/* dir config creater */
- NULL, /* dir merger -- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authz_groupfile_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authz_groupfile.dsp b/modules/aaa/mod_authz_groupfile.dsp
deleted file mode 100644
index be2d0b805b..0000000000
--- a/modules/aaa/mod_authz_groupfile.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authz_groupfile" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authz_groupfile - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_groupfile.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_groupfile.mak" CFG="mod_authz_groupfile - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authz_groupfile - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authz_groupfile - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authz_groupfile - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authz_groupfile_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authz_groupfile.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_groupfile.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authz_groupfile.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_groupfile.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authz_groupfile - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authz_groupfile_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_groupfile.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_groupfile.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_groupfile.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_groupfile.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authz_groupfile - Win32 Release"
-# Name "mod_authz_groupfile - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authz_groupfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authz_groupfile.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authz_groupfile - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_groupfile.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_groupfile.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_groupfile.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authz_groupfile - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_groupfile.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_groupfile.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_groupfile.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authz_host.c b/modules/aaa/mod_authz_host.c
deleted file mode 100644
index 7fe9c30b9a..0000000000
--- a/modules/aaa/mod_authz_host.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Security options etc.
- *
- * Module derived from code originally written by Rob McCool
- *
- */
-
-#include "apr_strings.h"
-#include "apr_network_io.h"
-#include "apr_md5.h"
-
-#define APR_WANT_STRFUNC
-#define APR_WANT_BYTEFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_request.h"
-
-#if APR_HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-enum allowdeny_type {
- T_ENV,
- T_ALL,
- T_IP,
- T_HOST,
- T_FAIL
-};
-
-typedef struct {
- apr_int64_t limited;
- union {
- char *from;
- apr_ipsubnet_t *ip;
- } x;
- enum allowdeny_type type;
-} allowdeny;
-
-/* things in the 'order' array */
-#define DENY_THEN_ALLOW 0
-#define ALLOW_THEN_DENY 1
-#define MUTUAL_FAILURE 2
-
-typedef struct {
- int order[METHODS];
- apr_array_header_t *allows;
- apr_array_header_t *denys;
-} authz_host_dir_conf;
-
-module AP_MODULE_DECLARE_DATA authz_host_module;
-
-static void *create_authz_host_dir_config(apr_pool_t *p, char *dummy)
-{
- int i;
- authz_host_dir_conf *conf =
- (authz_host_dir_conf *)apr_pcalloc(p, sizeof(authz_host_dir_conf));
-
- for (i = 0; i < METHODS; ++i) {
- conf->order[i] = DENY_THEN_ALLOW;
- }
- conf->allows = apr_array_make(p, 1, sizeof(allowdeny));
- conf->denys = apr_array_make(p, 1, sizeof(allowdeny));
-
- return (void *)conf;
-}
-
-static const char *order(cmd_parms *cmd, void *dv, const char *arg)
-{
- authz_host_dir_conf *d = (authz_host_dir_conf *) dv;
- int i, o;
-
- if (!strcasecmp(arg, "allow,deny"))
- o = ALLOW_THEN_DENY;
- else if (!strcasecmp(arg, "deny,allow"))
- o = DENY_THEN_ALLOW;
- else if (!strcasecmp(arg, "mutual-failure"))
- o = MUTUAL_FAILURE;
- else
- return "unknown order";
-
- for (i = 0; i < METHODS; ++i)
- if (cmd->limited & (AP_METHOD_BIT << i))
- d->order[i] = o;
-
- return NULL;
-}
-
-static const char *allow_cmd(cmd_parms *cmd, void *dv, const char *from,
- const char *where_c)
-{
- authz_host_dir_conf *d = (authz_host_dir_conf *) dv;
- allowdeny *a;
- char *where = apr_pstrdup(cmd->pool, where_c);
- char *s;
- char msgbuf[120];
- apr_status_t rv;
-
- if (strcasecmp(from, "from"))
- return "allow and deny must be followed by 'from'";
-
- a = (allowdeny *) apr_array_push(cmd->info ? d->allows : d->denys);
- a->x.from = where;
- a->limited = cmd->limited;
-
- if (!strncasecmp(where, "env=", 4)) {
- a->type = T_ENV;
- a->x.from += 4;
-
- }
- else if (!strcasecmp(where, "all")) {
- a->type = T_ALL;
- }
- else if ((s = ap_strchr(where, '/'))) {
- *s++ = '\0';
- rv = apr_ipsubnet_create(&a->x.ip, where, s, cmd->pool);
- if(APR_STATUS_IS_EINVAL(rv)) {
- /* looked nothing like an IP address */
- return "An IP address was expected";
- }
- else if (rv != APR_SUCCESS) {
- apr_strerror(rv, msgbuf, sizeof msgbuf);
- return apr_pstrdup(cmd->pool, msgbuf);
- }
- a->type = T_IP;
- }
- else if (!APR_STATUS_IS_EINVAL(rv = apr_ipsubnet_create(&a->x.ip, where,
- NULL, cmd->pool))) {
- if (rv != APR_SUCCESS) {
- apr_strerror(rv, msgbuf, sizeof msgbuf);
- return apr_pstrdup(cmd->pool, msgbuf);
- }
- a->type = T_IP;
- }
- else { /* no slash, didn't look like an IP address => must be a host */
- a->type = T_HOST;
- }
-
- return NULL;
-}
-
-static char its_an_allow;
-
-static const command_rec authz_host_cmds[] =
-{
- AP_INIT_TAKE1("order", order, NULL, OR_LIMIT,
- "'allow,deny', 'deny,allow', or 'mutual-failure'"),
- AP_INIT_ITERATE2("allow", allow_cmd, &its_an_allow, OR_LIMIT,
- "'from' followed by hostnames or IP-address wildcards"),
- AP_INIT_ITERATE2("deny", allow_cmd, NULL, OR_LIMIT,
- "'from' followed by hostnames or IP-address wildcards"),
- {NULL}
-};
-
-static int in_domain(const char *domain, const char *what)
-{
- int dl = strlen(domain);
- int wl = strlen(what);
-
- if ((wl - dl) >= 0) {
- if (strcasecmp(domain, &what[wl - dl]) != 0) {
- return 0;
- }
-
- /* Make sure we matched an *entire* subdomain --- if the user
- * said 'allow from good.com', we don't want people from nogood.com
- * to be able to get in.
- */
-
- if (wl == dl) {
- return 1; /* matched whole thing */
- }
- else {
- return (domain[0] == '.' || what[wl - dl - 1] == '.');
- }
- }
- else {
- return 0;
- }
-}
-
-static int find_allowdeny(request_rec *r, apr_array_header_t *a, int method)
-{
-
- allowdeny *ap = (allowdeny *) a->elts;
- apr_int64_t mmask = (AP_METHOD_BIT << method);
- int i;
- int gothost = 0;
- const char *remotehost = NULL;
-
- for (i = 0; i < a->nelts; ++i) {
- if (!(mmask & ap[i].limited)) {
- continue;
- }
-
- switch (ap[i].type) {
- case T_ENV:
- if (apr_table_get(r->subprocess_env, ap[i].x.from)) {
- return 1;
- }
- break;
-
- case T_ALL:
- return 1;
-
- case T_IP:
- if (apr_ipsubnet_test(ap[i].x.ip, r->connection->remote_addr)) {
- return 1;
- }
- break;
-
- case T_HOST:
- if (!gothost) {
- int remotehost_is_ip;
-
- remotehost = ap_get_remote_host(r->connection,
- r->per_dir_config,
- REMOTE_DOUBLE_REV,
- &remotehost_is_ip);
-
- if ((remotehost == NULL) || remotehost_is_ip) {
- gothost = 1;
- }
- else {
- gothost = 2;
- }
- }
-
- if ((gothost == 2) && in_domain(ap[i].x.from, remotehost)) {
- return 1;
- }
- break;
-
- case T_FAIL:
- /* do nothing? */
- break;
- }
- }
-
- return 0;
-}
-
-static int check_dir_access(request_rec *r)
-{
- int method = r->method_number;
- int ret = OK;
- authz_host_dir_conf *a = (authz_host_dir_conf *)
- ap_get_module_config(r->per_dir_config, &authz_host_module);
-
- if (a->order[method] == ALLOW_THEN_DENY) {
- ret = HTTP_FORBIDDEN;
- if (find_allowdeny(r, a->allows, method)) {
- ret = OK;
- }
- if (find_allowdeny(r, a->denys, method)) {
- ret = HTTP_FORBIDDEN;
- }
- }
- else if (a->order[method] == DENY_THEN_ALLOW) {
- if (find_allowdeny(r, a->denys, method)) {
- ret = HTTP_FORBIDDEN;
- }
- if (find_allowdeny(r, a->allows, method)) {
- ret = OK;
- }
- }
- else {
- if (find_allowdeny(r, a->allows, method)
- && !find_allowdeny(r, a->denys, method)) {
- ret = OK;
- }
- else {
- ret = HTTP_FORBIDDEN;
- }
- }
-
- if (ret == HTTP_FORBIDDEN
- && (ap_satisfies(r) != SATISFY_ANY || !ap_some_auth_required(r))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "client denied by server configuration: %s",
- r->filename);
- }
-
- return ret;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- /* This can be access checker since we don't require r->user to be set. */
- ap_hook_access_checker(check_dir_access,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA authz_host_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authz_host_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authz_host_cmds,
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authz_host.dsp b/modules/aaa/mod_authz_host.dsp
deleted file mode 100644
index 8d0ea283f6..0000000000
--- a/modules/aaa/mod_authz_host.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authz_host" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authz_host - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_host.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_host.mak" CFG="mod_authz_host - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authz_host - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authz_host - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authz_host - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authz_host_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authz_host.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_host.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authz_host.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_host.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authz_host - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authz_host_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_host.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_host.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_host.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_host.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authz_host - Win32 Release"
-# Name "mod_authz_host - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authz_host.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authz_host.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authz_host - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_host.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_host.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_host.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authz_host - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_host.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_host.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_host.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_authz_owner.c b/modules/aaa/mod_authz_owner.c
deleted file mode 100644
index 9652de01ce..0000000000
--- a/modules/aaa/mod_authz_owner.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "apr_file_info.h"
-#include "apr_user.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-#include "mod_auth.h" /* for AUTHZ_GROUP_NOTE */
-
-typedef struct {
- int authoritative;
-} authz_owner_config_rec;
-
-static void *create_authz_owner_dir_config(apr_pool_t *p, char *d)
-{
- authz_owner_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->authoritative = 1; /* keep the fortress secure by default */
- return conf;
-}
-
-static const command_rec authz_owner_cmds[] =
-{
- AP_INIT_FLAG("AuthzOwnerAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authz_owner_config_rec, authoritative),
- OR_AUTHCFG,
- "Set to 'Off' to allow access control to be passed along to "
- "lower modules. (default is On.)"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authz_owner_module;
-
-static int check_file_owner(request_rec *r)
-{
- authz_owner_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authz_owner_module);
- int m = r->method_number;
- register int x;
- const char *t, *w;
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs;
- int required_owner = 0;
- apr_status_t status = 0;
- char *reason = NULL;
-
- if (!reqs_arr) {
- return DECLINED;
- }
-
- reqs = (require_line *)reqs_arr->elts;
- for (x = 0; x < reqs_arr->nelts; x++) {
-
- /* if authoritative = On then break if a require already failed. */
- if (reason && conf->authoritative) {
- break;
- }
-
- if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
- continue;
- }
-
- t = reqs[x].requirement;
- w = ap_getword_white(r->pool, &t);
-
- if (!strcmp(w, "file-owner")) {
-#if !APR_HAS_USER
- if ((required_owner & ~1) && conf->authoritative) {
- break;
- }
-
- required_owner |= 1; /* remember the requirement */
- reason = "'Require file-owner' is not supported on this platform.";
- continue;
-#else /* APR_HAS_USER */
- char *owner = NULL;
- apr_finfo_t finfo;
-
- if ((required_owner & ~1) && conf->authoritative) {
- break;
- }
-
- required_owner |= 1; /* remember the requirement */
-
- if (!r->filename) {
- reason = "no filename available";
- continue;
- }
-
- status = apr_stat(&finfo, r->filename, APR_FINFO_USER, r->pool);
- if (status != APR_SUCCESS) {
- reason = apr_pstrcat(r->pool, "could not stat file ",
- r->filename, NULL);
- continue;
- }
-
- if (!(finfo.valid & APR_FINFO_USER)) {
- reason = "no file owner information available";
- continue;
- }
-
- status = apr_uid_name_get(&owner, finfo.user, r->pool);
- if (status != APR_SUCCESS || !owner) {
- reason = "could not get name of file owner";
- continue;
- }
-
- if (strcmp(owner, r->user)) {
- reason = apr_psprintf(r->pool, "file owner %s does not match.",
- owner);
- continue;
- }
-
- /* this user is authorized */
- return OK;
-#endif /* APR_HAS_USER */
- }
-
- /* file-group only figures out the file's group and lets
- * other modules do the actual authorization (against a group file/db).
- * Thus, these modules have to hook themselves after
- * mod_authz_owner and of course recognize 'file-group', too.
- */
- if (!strcmp(w, "file-group")) {
-#if !APR_HAS_USER
- if ((required_owner & ~6) && conf->authoritative) {
- break;
- }
-
- required_owner |= 2; /* remember the requirement */
- reason = "'Require file-group' is not supported on this platform.";
- continue;
-#else /* APR_HAS_USER */
- char *group = NULL;
- apr_finfo_t finfo;
-
- if ((required_owner & ~6) && conf->authoritative) {
- break;
- }
-
- required_owner |= 2; /* remember the requirement */
-
- if (!r->filename) {
- reason = "no filename available";
- continue;
- }
-
- status = apr_stat(&finfo, r->filename, APR_FINFO_GROUP, r->pool);
- if (status != APR_SUCCESS) {
- reason = apr_pstrcat(r->pool, "could not stat file ",
- r->filename, NULL);
- continue;
- }
-
- if (!(finfo.valid & APR_FINFO_GROUP)) {
- reason = "no file group information available";
- continue;
- }
-
- status = apr_gid_name_get(&group, finfo.group, r->pool);
- if (status != APR_SUCCESS || !group) {
- reason = "could not get name of file group";
- continue;
- }
-
- /* store group name in a note and let others decide... */
- apr_table_setn(r->notes, AUTHZ_GROUP_NOTE, group);
- required_owner |= 4;
- continue;
-#endif /* APR_HAS_USER */
- }
- }
-
- if (!required_owner || !conf->authoritative) {
- return DECLINED;
- }
-
- /* allow file-group passed to group db modules either if this is the
- * only applicable requirement here or if a file-owner failed but we're
- * not authoritative.
- * This allows configurations like:
- *
- * AuthzOwnerAuthoritative Off
- * require file-owner
- * require file-group
- *
- * with the semantical meaning of "either owner or group must match"
- * (inclusive or)
- *
- * [ 6 == 2 | 4; 7 == 1 | 2 | 4 ] should I use #defines instead?
- */
- if (required_owner == 6 || (required_owner == 7 && !conf->authoritative)) {
- return DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "Authorization of user %s to access %s failed, reason: %s",
- r->user, r->uri, reason ? reason : "unknown");
-
- ap_note_auth_failure(r);
- return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_auth_checker(check_file_owner, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA authz_owner_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authz_owner_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authz_owner_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authz_user.c b/modules/aaa/mod_authz_user.c
deleted file mode 100644
index 69347ec7a4..0000000000
--- a/modules/aaa/mod_authz_user.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-typedef struct {
- int authoritative;
-} authz_user_config_rec;
-
-static void *create_authz_user_dir_config(apr_pool_t *p, char *d)
-{
- authz_user_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->authoritative = 1; /* keep the fortress secure by default */
- return conf;
-}
-
-static const command_rec authz_user_cmds[] =
-{
- AP_INIT_FLAG("AuthzUserAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(authz_user_config_rec, authoritative),
- OR_AUTHCFG,
- "Set to 'Off' to allow access control to be passed along to "
- "lower modules if the 'require user' or 'require valid-user' "
- "statement is not met. (default: On)."),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA authz_user_module;
-
-static int check_user_access(request_rec *r)
-{
- authz_user_config_rec *conf = ap_get_module_config(r->per_dir_config,
- &authz_user_module);
- char *user = r->user;
- int m = r->method_number;
- int required_user = 0;
- register int x;
- const char *t, *w;
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs;
-
- /* BUG FIX: tadc, 11-Nov-1995. If there is no "requires" directive,
- * then any user will do.
- */
- if (!reqs_arr) {
- return DECLINED;
- }
- reqs = (require_line *)reqs_arr->elts;
-
- for (x = 0; x < reqs_arr->nelts; x++) {
-
- if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
- continue;
- }
-
- t = reqs[x].requirement;
- w = ap_getword_white(r->pool, &t);
- if (!strcmp(w, "valid-user")) {
- return OK;
- }
- if (!strcmp(w, "user")) {
- /* And note that there are applicable requirements
- * which we consider ourselves the owner of.
- */
- required_user = 1;
- while (t[0]) {
- w = ap_getword_conf(r->pool, &t);
- if (!strcmp(user, w)) {
- return OK;
- }
- }
- }
- }
-
- if (!required_user) {
- /* no applicable requirements */
- return DECLINED;
- }
-
- if (!conf->authoritative) {
- return DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "access to %s failed, reason: user '%s' does not meet "
- "'require'ments for user/valid-user to be allowed access",
- r->uri, user);
-
- ap_note_auth_failure(r);
- return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_auth_checker(check_user_access, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA authz_user_module =
-{
- STANDARD20_MODULE_STUFF,
- create_authz_user_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- authz_user_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/aaa/mod_authz_user.dsp b/modules/aaa/mod_authz_user.dsp
deleted file mode 100644
index dd19415b6a..0000000000
--- a/modules/aaa/mod_authz_user.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_authz_user" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_authz_user - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_user.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_authz_user.mak" CFG="mod_authz_user - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_authz_user - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_authz_user - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_authz_user - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_authz_user_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_authz_user.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_user.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_authz_user.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_user.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_authz_user - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_authz_user_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_user.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_user.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_authz_user.so" /base:@..\..\os\win32\BaseAddr.ref,mod_authz_user.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_authz_user - Win32 Release"
-# Name "mod_authz_user - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_authz_user.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_authz_user.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_authz_user - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_user.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_user.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_user.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_authz_user - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_authz_user.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_authz_user.so "auth_basic_module for Apache" ../../include/ap_release.h > .\mod_authz_user.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/arch/netware/libprews.c b/modules/arch/netware/libprews.c
deleted file mode 100644
index e0cc65c4fd..0000000000
--- a/modules/arch/netware/libprews.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*------------------------------------------------------------------
- These functions are to be called when the shared NLM starts and
- stops. By using these functions instead of defining a main()
- and calling ExitThread(TSR_THREAD, 0), the load time of the
- shared NLM is faster and memory size reduced.
-
- You may also want to override these in your own Apache module
- to do any cleanup other than the mechanism Apache modules
- provide.
-------------------------------------------------------------------*/
-#include <netware.h>
-//#include "stddef.h"
-#include "novsock2.h"
-
-int _NonAppStart
-(
- void *NLMHandle,
- void *errorScreen,
- const char *cmdLine,
- const char *loadDirPath,
- size_t uninitializedDataLength,
- void *NLMFileHandle,
- int (*readRoutineP)( int conn, void *fileHandle, size_t offset,
- size_t nbytes, size_t *bytesRead, void *buffer ),
- size_t customDataOffset,
- size_t customDataSize,
- int messageCount,
- const char **messages
-)
-{
-#pragma unused(cmdLine)
-#pragma unused(loadDirPath)
-#pragma unused(uninitializedDataLength)
-#pragma unused(NLMFileHandle)
-#pragma unused(readRoutineP)
-#pragma unused(customDataOffset)
-#pragma unused(customDataSize)
-#pragma unused(messageCount)
-#pragma unused(messages)
-
- WSADATA wsaData;
-
- return WSAStartup((WORD) MAKEWORD(2, 0), &wsaData);
-}
-
-void _NonAppStop( void )
-{
- WSACleanup();
-}
-
-int _NonAppCheckUnload( void )
-{
- return 0;
-}
diff --git a/modules/arch/netware/mod_auth_basic.def b/modules/arch/netware/mod_auth_basic.def
deleted file mode 100644
index 0a6f81aa21..0000000000
--- a/modules/arch/netware/mod_auth_basic.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT auth_basic_module
diff --git a/modules/arch/netware/mod_auth_digest.def b/modules/arch/netware/mod_auth_digest.def
deleted file mode 100644
index 6a3aa085d2..0000000000
--- a/modules/arch/netware/mod_auth_digest.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT auth_digest_module
diff --git a/modules/arch/netware/mod_authn_anon.def b/modules/arch/netware/mod_authn_anon.def
deleted file mode 100644
index 78bb61be2d..0000000000
--- a/modules/arch/netware/mod_authn_anon.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT authn_anon_module
diff --git a/modules/arch/netware/mod_authn_dbm.def b/modules/arch/netware/mod_authn_dbm.def
deleted file mode 100644
index 7a242b0317..0000000000
--- a/modules/arch/netware/mod_authn_dbm.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT authn_dbm_module
-
diff --git a/modules/arch/netware/mod_authn_default.def b/modules/arch/netware/mod_authn_default.def
deleted file mode 100644
index fb94aa37fb..0000000000
--- a/modules/arch/netware/mod_authn_default.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT authn_default_module
diff --git a/modules/arch/netware/mod_authn_file.def b/modules/arch/netware/mod_authn_file.def
deleted file mode 100644
index fd0765a10b..0000000000
--- a/modules/arch/netware/mod_authn_file.def
+++ /dev/null
@@ -1,3 +0,0 @@
-EXPORT authn_file_module
-
-
diff --git a/modules/arch/netware/mod_authz_dbm.def b/modules/arch/netware/mod_authz_dbm.def
deleted file mode 100644
index d52639c15b..0000000000
--- a/modules/arch/netware/mod_authz_dbm.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT authz_dbm_module
diff --git a/modules/arch/netware/mod_authz_default.def b/modules/arch/netware/mod_authz_default.def
deleted file mode 100644
index 164564f540..0000000000
--- a/modules/arch/netware/mod_authz_default.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT authz_default_module
diff --git a/modules/arch/netware/mod_authz_groupfile.def b/modules/arch/netware/mod_authz_groupfile.def
deleted file mode 100644
index 25d955519a..0000000000
--- a/modules/arch/netware/mod_authz_groupfile.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT authz_groupfile_module
-
diff --git a/modules/arch/netware/mod_authz_user.def b/modules/arch/netware/mod_authz_user.def
deleted file mode 100644
index 043418b620..0000000000
--- a/modules/arch/netware/mod_authz_user.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT authz_user_module
diff --git a/modules/arch/netware/mod_cache.def b/modules/arch/netware/mod_cache.def
deleted file mode 100644
index 6fd6423bb3..0000000000
--- a/modules/arch/netware/mod_cache.def
+++ /dev/null
@@ -1,5 +0,0 @@
-EXPORT cache_module
-EXPORT @mod_cache.imp
-
-
-
diff --git a/modules/arch/netware/mod_cern_meta.def b/modules/arch/netware/mod_cern_meta.def
deleted file mode 100644
index 5638325bbd..0000000000
--- a/modules/arch/netware/mod_cern_meta.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT cern_meta_module
diff --git a/modules/arch/netware/mod_dav.def b/modules/arch/netware/mod_dav.def
deleted file mode 100644
index fb56c92fc6..0000000000
--- a/modules/arch/netware/mod_dav.def
+++ /dev/null
@@ -1,3 +0,0 @@
-EXPORT dav_module
-EXPORT @dav.imp
-
diff --git a/modules/arch/netware/mod_disk_cache.def b/modules/arch/netware/mod_disk_cache.def
deleted file mode 100644
index 0a9440ad8e..0000000000
--- a/modules/arch/netware/mod_disk_cache.def
+++ /dev/null
@@ -1,3 +0,0 @@
-IMPORT @mod_cache.imp
-EXPORT disk_cache_module
-
diff --git a/modules/arch/netware/mod_echo.def b/modules/arch/netware/mod_echo.def
deleted file mode 100644
index 694135a52c..0000000000
--- a/modules/arch/netware/mod_echo.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT echo_module
-
diff --git a/modules/arch/netware/mod_expires.def b/modules/arch/netware/mod_expires.def
deleted file mode 100644
index bc416630b0..0000000000
--- a/modules/arch/netware/mod_expires.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT expires_module
diff --git a/modules/arch/netware/mod_file_cache.def b/modules/arch/netware/mod_file_cache.def
deleted file mode 100644
index 8ab98cfb22..0000000000
--- a/modules/arch/netware/mod_file_cache.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT file_cache_module
-
diff --git a/modules/arch/netware/mod_headers.def b/modules/arch/netware/mod_headers.def
deleted file mode 100644
index 2fe35a858b..0000000000
--- a/modules/arch/netware/mod_headers.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT headers_module
diff --git a/modules/arch/netware/mod_info.def b/modules/arch/netware/mod_info.def
deleted file mode 100644
index ce71cb37cf..0000000000
--- a/modules/arch/netware/mod_info.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT info_module
diff --git a/modules/arch/netware/mod_logio.def b/modules/arch/netware/mod_logio.def
deleted file mode 100644
index 68c708917c..0000000000
--- a/modules/arch/netware/mod_logio.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT logio_module
-
diff --git a/modules/arch/netware/mod_mem_cache.def b/modules/arch/netware/mod_mem_cache.def
deleted file mode 100644
index 531d687154..0000000000
--- a/modules/arch/netware/mod_mem_cache.def
+++ /dev/null
@@ -1,3 +0,0 @@
-IMPORT @mod_cache.imp
-EXPORT mem_cache_module
-
diff --git a/modules/arch/netware/mod_mime_magic.def b/modules/arch/netware/mod_mime_magic.def
deleted file mode 100644
index 95307476de..0000000000
--- a/modules/arch/netware/mod_mime_magic.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT mime_magic_module
diff --git a/modules/arch/netware/mod_netware.c b/modules/arch/netware/mod_netware.c
deleted file mode 100644
index 7538dc7287..0000000000
--- a/modules/arch/netware/mod_netware.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-#include "apr_optional.h"
-#include "apr_lib.h"
-#include "mod_cgi.h"
-
-#ifdef NETWARE
-
-
-module AP_MODULE_DECLARE_DATA netware_module;
-
-typedef struct {
- apr_table_t *file_type_handlers; /* CGI map from file types to CGI modules */
- apr_table_t *file_handler_mode; /* CGI module mode (spawn in same address space or not) */
- apr_table_t *extra_env_vars; /* Environment variables to be added to the CGI environment */
-} netware_dir_config;
-
-
-static void *create_netware_dir_config(apr_pool_t *p, char *dir)
-{
- netware_dir_config *new = (netware_dir_config*) apr_palloc(p, sizeof(netware_dir_config));
-
- new->file_type_handlers = apr_table_make(p, 10);
- new->file_handler_mode = apr_table_make(p, 10);
- new->extra_env_vars = apr_table_make(p, 10);
-
- apr_table_set(new->file_type_handlers, "NLM", "OS");
-
- return new;
-}
-
-static void *merge_netware_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- netware_dir_config *base = (netware_dir_config *) basev;
- netware_dir_config *add = (netware_dir_config *) addv;
- netware_dir_config *new = (netware_dir_config *) apr_palloc(p, sizeof(netware_dir_config));
-
- new->file_type_handlers = apr_table_overlay(p, add->file_type_handlers, base->file_type_handlers);
- new->file_handler_mode = apr_table_overlay(p, add->file_handler_mode, base->file_handler_mode);
- new->extra_env_vars = apr_table_overlay(p, add->extra_env_vars, base->extra_env_vars);
-
- return new;
-}
-
-static const char *set_extension_map(cmd_parms *cmd, netware_dir_config *m,
- char *CGIhdlr, char *ext, char *detach)
-{
- int i, len;
-
- if (*ext == '.')
- ++ext;
-
- if (CGIhdlr != NULL) {
- len = strlen(CGIhdlr);
- for (i=0; i<len; i++) {
- if (CGIhdlr[i] == '\\') {
- CGIhdlr[i] = '/';
- }
- }
- }
-
- apr_table_set(m->file_type_handlers, ext, CGIhdlr);
- if (detach) {
- apr_table_set(m->file_handler_mode, ext, "y");
- }
-
- return NULL;
-}
-
-static apr_status_t ap_cgi_build_command(const char **cmd, const char ***argv,
- request_rec *r, apr_pool_t *p,
- cgi_exec_info_t *e_info)
-{
- char *ext = NULL;
- char *cmd_only, *ptr;
- const char *new_cmd;
- netware_dir_config *d;
- apr_file_t *fh;
- const char *args = "";
-
- d = (netware_dir_config *)ap_get_module_config(r->per_dir_config,
- &netware_module);
-
- if (e_info->process_cgi) {
- /* Handle the complete file name, we DON'T want to follow suexec, since
- * an unrooted command is as predictable as shooting craps in Win32.
- *
- * Notice that unlike most mime extension parsing, we have to use the
- * win32 parsing here, therefore the final extension is the only one
- * we will consider
- */
- *cmd = r->filename;
- if (r->args && r->args[0] && !ap_strchr_c(r->args, '=')) {
- args = r->args;
- }
- }
-
- cmd_only = apr_pstrdup(p, *cmd);
- e_info->cmd_type = APR_PROGRAM;
-
- /* truncate any arguments from the cmd */
- for (ptr = cmd_only; *ptr && (*ptr != ' '); ptr++);
- *ptr = '\0';
-
- /* Figure out what the extension is so that we can matche it. */
- ext = strrchr(apr_filepath_name_get(cmd_only), '.');
-
- /* If there isn't an extension then give it an empty string */
- if (!ext) {
- ext = "";
- }
-
- /* eliminate the '.' if there is one */
- if (*ext == '.')
- ++ext;
-
- /* check if we have a registered command for the extension*/
- new_cmd = apr_table_get(d->file_type_handlers, ext);
- e_info->detached = 1;
- if (new_cmd == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Could not find a command associated with the %s extension", ext);
- return APR_EBADF;
- }
- if (stricmp(new_cmd, "OS")) {
- /* If we have a registered command then add the file that was passed in as a
- parameter to the registered command. */
- *cmd = apr_pstrcat (p, new_cmd, " ", cmd_only, NULL);
-
- /* Run in its own address space if specified */
- if(apr_table_get(d->file_handler_mode, ext))
- e_info->addrspace = 1;
- }
-
- /* Tokenize the full command string into its arguments */
- apr_tokenize_to_argv(*cmd, (char***)argv, p);
-
- /* The first argument should be the executible */
- *cmd = ap_server_root_relative(p, *argv[0]);
-
- return APR_SUCCESS;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- APR_REGISTER_OPTIONAL_FN(ap_cgi_build_command);
-}
-
-static const command_rec netware_cmds[] = {
-AP_INIT_TAKE23("CGIMapExtension", set_extension_map, NULL, OR_FILEINFO,
- "Full path to the CGI NLM module followed by a file extension. If the "
- "first parameter is set to \"OS\" then the following file extension is "
- "treated as NLM. The optional parameter \"detach\" can be specified if "
- "the NLM should be launched in its own address space."),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA netware_module = {
- STANDARD20_MODULE_STUFF,
- create_netware_dir_config, /* create per-dir config */
- merge_netware_dir_configs, /* merge per-dir config */
- NULL, /* server config */
- NULL, /* merge server config */
- netware_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
-
-#endif
diff --git a/modules/arch/netware/mod_nw_ssl.c b/modules/arch/netware/mod_nw_ssl.c
deleted file mode 100644
index 0d9e716cb7..0000000000
--- a/modules/arch/netware/mod_nw_ssl.c
+++ /dev/null
@@ -1,1117 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_tls.c - Apache SSL/TLS module for NetWare by Mike Gardiner.
- *
- * This module gives Apache the ability to do SSL/TLS with a minimum amount
- * of effort. All of the SSL/TLS logic is already on NetWare versions 5 and
- * above and is interfaced through WinSock on NetWare. As you can see in
- * the code below SSL/TLS sockets can be created with three WinSock calls.
- *
- * To load, simply place the module in the modules directory under the main
- * apache tree. Then add a "SecureListen" with two arguments. The first
- * argument is an address and/or port. The second argument is the key pair
- * name as created in ConsoleOne.
- *
- * Examples:
- *
- * SecureListen 443 "SSL CertificateIP"
- * SecureListen 123.45.67.89:443 mycert
- */
-
-#define WS_SSL
-
-#define MAX_ADDRESS 512
-#define MAX_KEY 80
-
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_core.h"
-#include "ap_listen.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_optional.h"
-
-#include <unilib.h>
-
-#ifndef SO_TLS_UNCLEAN_SHUTDOWN
-#define SO_TLS_UNCLEAN_SHUTDOWN 0
-#endif
-
-/* The ssl_var_lookup() optional function retrieves SSL environment
- * variables. */
-APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,
- (apr_pool_t *, server_rec *,
- conn_rec *, request_rec *,
- char *));
-
-/* An optional function which returns non-zero if the given connection
- * is using SSL/TLS. */
-APR_DECLARE_OPTIONAL_FN(int, ssl_is_https, (conn_rec *));
-
-/* The ssl_proxy_enable() and ssl_engine_disable() optional functions
- * are used by mod_proxy to enable use of SSL for outgoing
- * connections. */
-APR_DECLARE_OPTIONAL_FN(int, ssl_proxy_enable, (conn_rec *));
-APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *));
-
-#define strEQ(s1,s2) (strcmp(s1,s2) == 0)
-#define strNE(s1,s2) (strcmp(s1,s2) != 0)
-#define strEQn(s1,s2,n) (strncmp(s1,s2,n) == 0)
-#define strNEn(s1,s2,n) (strncmp(s1,s2,n) != 0)
-
-#define strcEQ(s1,s2) (strcasecmp(s1,s2) == 0)
-#define strcNE(s1,s2) (strcasecmp(s1,s2) != 0)
-#define strcEQn(s1,s2,n) (strncasecmp(s1,s2,n) == 0)
-#define strcNEn(s1,s2,n) (strncasecmp(s1,s2,n) != 0)
-
-#define strIsEmpty(s) (s == NULL || s[0] == NUL)
-
-
-module AP_MODULE_DECLARE_DATA nwssl_module;
-
-typedef struct NWSSLSrvConfigRec NWSSLSrvConfigRec;
-typedef struct seclisten_rec seclisten_rec;
-typedef struct seclistenup_rec seclistenup_rec;
-
-struct seclisten_rec {
- seclisten_rec *next;
- struct sockaddr_in local_addr; /* local IP address and port */
- int fd;
- int used; /* Only used during restart */
- char key[MAX_KEY];
- int mutual;
- char *addr;
- apr_port_t port;
-};
-
-struct seclistenup_rec {
- seclistenup_rec *next;
- char key[MAX_KEY];
- char *addr;
- apr_port_t port;
-};
-
-struct NWSSLSrvConfigRec {
- apr_table_t *sltable;
- apr_table_t *slutable;
- apr_pool_t *pPool;
-};
-
-static apr_array_header_t *certlist = NULL;
-static unicode_t** certarray = NULL;
-static int numcerts = 0;
-static seclisten_rec* ap_seclisteners = NULL;
-static seclistenup_rec* ap_seclistenersup = NULL;
-
-#define get_nwssl_cfg(srv) (NWSSLSrvConfigRec *) ap_get_module_config(srv->module_config, &nwssl_module)
-
-
-static void build_cert_list (apr_pool_t *p)
-{
- int i;
- char **rootcerts = (char **)certlist->elts;
-
- numcerts = certlist->nelts;
- certarray = apr_palloc(p, sizeof(unicode_t*)*numcerts);
-
- for (i = 0; i < numcerts; ++i) {
- unicode_t *unistr;
- unistr = (unicode_t*)apr_palloc(p, strlen(rootcerts[i])*4);
- loc2uni (UNI_LOCAL_DEFAULT, unistr, rootcerts[i], 0, 2);
- certarray[i] = unistr;
- }
-}
-
-/*
- * Parses a host of the form <address>[:port]
- * :port is permitted if 'port' is not NULL
- */
-static unsigned long parse_addr(const char *w, unsigned short *ports)
-{
- struct hostent *hep;
- unsigned long my_addr;
- char *p;
-
- p = strchr(w, ':');
- if (ports != NULL) {
- *ports = 0;
- if (p != NULL && strcmp(p + 1, "*") != 0)
- *ports = atoi(p + 1);
- }
-
- if (p != NULL)
- *p = '\0';
- if (strcmp(w, "*") == 0) {
- if (p != NULL)
- *p = ':';
- return htonl(INADDR_ANY);
- }
-
- my_addr = apr_inet_addr((char *)w);
- if (my_addr != INADDR_NONE) {
- if (p != NULL)
- *p = ':';
- return my_addr;
- }
-
- hep = gethostbyname(w);
-
- if ((!hep) || (hep->h_addrtype != AF_INET || !hep->h_addr_list[0])) {
- /* XXX Should be echoing by h_errno the actual failure, no?
- * ap_log_error would be good here. Better yet - APRize.
- */
- fprintf(stderr, "Cannot resolve host name %s --- exiting!\n", w);
- exit(1);
- }
-
- if (hep->h_addr_list[1]) {
- fprintf(stderr, "Host %s has multiple addresses ---\n", w);
- fprintf(stderr, "you must choose one explicitly for use as\n");
- fprintf(stderr, "a secure port. Exiting!!!\n");
- exit(1);
- }
-
- if (p != NULL)
- *p = ':';
-
- return ((struct in_addr *) (hep->h_addr))->s_addr;
-}
-
-static int find_secure_listener(seclisten_rec *lr)
-{
- seclisten_rec *sl;
-
- for (sl = ap_seclisteners; sl; sl = sl->next) {
- if (!memcmp(&sl->local_addr, &lr->local_addr, sizeof(sl->local_addr))) {
- sl->used = 1;
- return sl->fd;
- }
- }
- return -1;
-}
-
-static char *get_port_key(conn_rec *c)
-{
- seclistenup_rec *sl;
-
- for (sl = ap_seclistenersup; sl; sl = sl->next) {
- if ((sl->port == (c->local_addr)->port) &&
- ((strcmp(sl->addr, "0.0.0.0") == 0) || (strcmp(sl->addr, c->local_ip) == 0))) {
- return sl->key;
- }
- }
- return NULL;
-}
-
-static int make_secure_socket(apr_pool_t *pconf, const struct sockaddr_in *server,
- char* key, int mutual, server_rec *sconf)
-{
- int s;
- int one = 1;
- char addr[MAX_ADDRESS];
- struct sslserveropts opts;
- unsigned int optParam;
- WSAPROTOCOL_INFO SecureProtoInfo;
- int no = 1;
-
- if (server->sin_addr.s_addr != htonl(INADDR_ANY))
- apr_snprintf(addr, sizeof(addr), "address %s port %d",
- inet_ntoa(server->sin_addr), ntohs(server->sin_port));
- else
- apr_snprintf(addr, sizeof(addr), "port %d", ntohs(server->sin_port));
-
- /* note that because we're about to slack we don't use psocket */
- memset(&SecureProtoInfo, 0, sizeof(WSAPROTOCOL_INFO));
-
- SecureProtoInfo.iAddressFamily = AF_INET;
- SecureProtoInfo.iSocketType = SOCK_STREAM;
- SecureProtoInfo.iProtocol = IPPROTO_TCP;
- SecureProtoInfo.iSecurityScheme = SECURITY_PROTOCOL_SSL;
-
- s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,
- (LPWSAPROTOCOL_INFO)&SecureProtoInfo, 0, 0);
-
- if (s == INVALID_SOCKET) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, WSAGetLastError(), sconf,
- "make_secure_socket: failed to get a socket for %s",
- addr);
- return -1;
- }
-
- if (!mutual) {
- optParam = SO_SSL_ENABLE | SO_SSL_SERVER;
-
- if (WSAIoctl(s, SO_SSL_SET_FLAGS, (char *)&optParam,
- sizeof(optParam), NULL, 0, NULL, NULL, NULL)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, WSAGetLastError(), sconf,
- "make_secure_socket: for %s, WSAIoctl: "
- "(SO_SSL_SET_FLAGS)", addr);
- return -1;
- }
- }
-
- opts.cert = key;
- opts.certlen = strlen(key);
- opts.sidtimeout = 0;
- opts.sidentries = 0;
- opts.siddir = NULL;
-
- if (WSAIoctl(s, SO_SSL_SET_SERVER, (char *)&opts, sizeof(opts),
- NULL, 0, NULL, NULL, NULL) != 0) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, WSAGetLastError(), sconf,
- "make_secure_socket: for %s, WSAIoctl: "
- "(SO_SSL_SET_SERVER)", addr);
- return -1;
- }
-
- if (mutual) {
- optParam = 0x07; // SO_SSL_AUTH_CLIENT
-
- if(WSAIoctl(s, SO_SSL_SET_FLAGS, (char*)&optParam,
- sizeof(optParam), NULL, 0, NULL, NULL, NULL)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, WSAGetLastError(), sconf,
- "make_secure_socket: for %s, WSAIoctl: "
- "(SO_SSL_SET_FLAGS)", addr);
- return -1;
- }
- }
-
- optParam = SO_TLS_UNCLEAN_SHUTDOWN;
- WSAIoctl(s, SO_SSL_SET_FLAGS, (char *)&optParam, sizeof(optParam),
- NULL, 0, NULL, NULL, NULL);
-
- return s;
-}
-
-int convert_secure_socket(conn_rec *c, apr_socket_t *csd)
-{
- int rcode;
- struct tlsclientopts sWS2Opts;
- struct nwtlsopts sNWTLSOpts;
- struct sslserveropts opts;
- unsigned long ulFlags;
- SOCKET sock;
- unicode_t keyFileName[60];
-
- apr_os_sock_get(&sock, csd);
-
- /* zero out buffers */
- memset((char *)&sWS2Opts, 0, sizeof(struct tlsclientopts));
- memset((char *)&sNWTLSOpts, 0, sizeof(struct nwtlsopts));
-
- /* turn on ssl for the socket */
- ulFlags = (numcerts ? SO_TLS_ENABLE : SO_TLS_ENABLE | SO_TLS_BLIND_ACCEPT);
- rcode = WSAIoctl(sock, SO_TLS_SET_FLAGS, &ulFlags, sizeof(unsigned long),
- NULL, 0, NULL, NULL, NULL);
- if (SOCKET_ERROR == rcode)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, c->base_server,
- "Error: %d with ioctlsocket(flag SO_TLS_ENABLE)", WSAGetLastError());
- return rcode;
- }
-
- ulFlags = SO_TLS_UNCLEAN_SHUTDOWN;
- WSAIoctl(sock, SO_TLS_SET_FLAGS, &ulFlags, sizeof(unsigned long),
- NULL, 0, NULL, NULL, NULL);
-
- /* setup the socket for SSL */
- memset (&sWS2Opts, 0, sizeof(sWS2Opts));
- memset (&sNWTLSOpts, 0, sizeof(sNWTLSOpts));
- sWS2Opts.options = &sNWTLSOpts;
-
- if (numcerts) {
- sNWTLSOpts.walletProvider = WAL_PROV_DER; //the wallet provider defined in wdefs.h
- sNWTLSOpts.TrustedRootList = certarray; //array of certs in UNICODE format
- sNWTLSOpts.numElementsInTRList = numcerts; //number of certs in TRList
- }
- else {
- /* setup the socket for SSL */
- unicpy(keyFileName, L"SSL CertificateIP");
- sWS2Opts.wallet = keyFileName; /* no client certificate */
- sWS2Opts.walletlen = unilen(keyFileName);
-
- sNWTLSOpts.walletProvider = WAL_PROV_KMO; //the wallet provider defined in wdefs.h
- }
-
- /* make the IOCTL call */
- rcode = WSAIoctl(sock, SO_TLS_SET_CLIENT, &sWS2Opts,
- sizeof(struct tlsclientopts), NULL, 0, NULL,
- NULL, NULL);
-
- /* make sure that it was successfull */
- if(SOCKET_ERROR == rcode ){
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, c->base_server,
- "Error: %d with ioctl (SO_TLS_SET_CLIENT)", WSAGetLastError());
- }
- return rcode;
-}
-
-int SSLize_Socket(SOCKET socketHnd, char *key, request_rec *r)
-{
- int rcode;
- struct tlsserveropts sWS2Opts;
- struct nwtlsopts sNWTLSOpts;
- unicode_t SASKey[512];
- unsigned long ulFlag;
-
- memset((char *)&sWS2Opts, 0, sizeof(struct tlsserveropts));
- memset((char *)&sNWTLSOpts, 0, sizeof(struct nwtlsopts));
-
-
- ulFlag = SO_TLS_ENABLE;
- rcode = WSAIoctl(socketHnd, SO_TLS_SET_FLAGS, &ulFlag, sizeof(unsigned long), NULL, 0, NULL, NULL, NULL);
- if(rcode)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Error: %d with WSAIoctl(SO_TLS_SET_FLAGS, SO_TLS_ENABLE)", WSAGetLastError());
- goto ERR;
- }
-
-
- ulFlag = SO_TLS_SERVER;
- rcode = WSAIoctl(socketHnd, SO_TLS_SET_FLAGS, &ulFlag, sizeof(unsigned long),NULL, 0, NULL, NULL, NULL);
-
- if(rcode)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Error: %d with WSAIoctl(SO_TLS_SET_FLAGS, SO_TLS_SERVER)", WSAGetLastError());
- goto ERR;
- }
-
- loc2uni(UNI_LOCAL_DEFAULT, SASKey, key, 0, 0);
-
- //setup the tlsserveropts struct
- sWS2Opts.wallet = SASKey;
- sWS2Opts.walletlen = unilen(SASKey);
- sWS2Opts.sidtimeout = 0;
- sWS2Opts.sidentries = 0;
- sWS2Opts.siddir = NULL;
- sWS2Opts.options = &sNWTLSOpts;
-
- //setup the nwtlsopts structure
-
- sNWTLSOpts.walletProvider = WAL_PROV_KMO;
- sNWTLSOpts.keysList = NULL;
- sNWTLSOpts.numElementsInKeyList = 0;
- sNWTLSOpts.reservedforfutureuse = NULL;
- sNWTLSOpts.reservedforfutureCRL = NULL;
- sNWTLSOpts.reservedforfutureCRLLen = NULL;
- sNWTLSOpts.reserved1 = NULL;
- sNWTLSOpts.reserved2 = NULL;
- sNWTLSOpts.reserved3 = NULL;
-
-
- rcode = WSAIoctl(socketHnd,
- SO_TLS_SET_SERVER,
- &sWS2Opts,
- sizeof(struct tlsserveropts),
- NULL,
- 0,
- NULL,
- NULL,
- NULL);
- if(SOCKET_ERROR == rcode) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Error: %d with WSAIoctl(SO_TLS_SET_SERVER)", WSAGetLastError());
- goto ERR;
- }
-
-ERR:
- return rcode;
-}
-
-static const char *set_secure_listener(cmd_parms *cmd, void *dummy,
- const char *ips, const char* key,
- const char* mutual)
-{
- NWSSLSrvConfigRec* sc = get_nwssl_cfg(cmd->server);
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- char *ports, *addr;
- unsigned short port;
- seclisten_rec *new;
-
-
- if (err != NULL)
- return err;
-
- ports = strchr(ips, ':');
-
- if (ports != NULL) {
- if (ports == ips)
- return "Missing IP address";
- else if (ports[1] == '\0')
- return "Address must end in :<port-number>";
-
- *(ports++) = '\0';
- }
- else {
- ports = (char*)ips;
- }
-
- new = apr_pcalloc(cmd->pool, sizeof(seclisten_rec));
- new->local_addr.sin_family = AF_INET;
-
- if (ports == ips) {
- new->local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addr = apr_pstrdup(cmd->pool, "0.0.0.0");
- }
- else {
- new->local_addr.sin_addr.s_addr = parse_addr(ips, NULL);
- addr = apr_pstrdup(cmd->pool, ips);
- }
-
- port = atoi(ports);
-
- if (!port)
- return "Port must be numeric";
-
- apr_table_set(sc->sltable, ports, addr);
-
- new->local_addr.sin_port = htons(port);
- new->fd = -1;
- new->used = 0;
- new->next = ap_seclisteners;
- strcpy(new->key, key);
- new->mutual = (mutual) ? 1 : 0;
- new->addr = addr;
- new->port = port;
- ap_seclisteners = new;
- return NULL;
-}
-
-static const char *set_secure_upgradeable_listener(cmd_parms *cmd, void *dummy,
- const char *ips, const char* key)
-{
- NWSSLSrvConfigRec* sc = get_nwssl_cfg(cmd->server);
- seclistenup_rec *listen_node;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- char *ports, *addr;
- unsigned short port;
- seclistenup_rec *new;
-
- if (err != NULL)
- return err;
-
- ports = strchr(ips, ':');
-
- if (ports != NULL) {
- if (ports == ips)
- return "Missing IP address";
- else if (ports[1] == '\0')
- return "Address must end in :<port-number>";
-
- *(ports++) = '\0';
- }
- else {
- ports = (char*)ips;
- }
-
- if (ports == ips) {
- addr = apr_pstrdup(cmd->pool, "0.0.0.0");
- }
- else {
- addr = apr_pstrdup(cmd->pool, ips);
- }
-
- port = atoi(ports);
-
- if (!port)
- return "Port must be numeric";
-
- apr_table_set(sc->slutable, ports, addr);
-
- new = apr_pcalloc(cmd->pool, sizeof(seclistenup_rec));
- new->next = ap_seclistenersup;
- strcpy(new->key, key);
- new->addr = addr;
- new->port = port;
- ap_seclistenersup = new;
-
- return err;
-}
-
-static apr_status_t nwssl_socket_cleanup(void *data)
-{
- ap_listen_rec* slr = (ap_listen_rec*)data;
- ap_listen_rec* lr;
-
- /* Remove our secure listener from the listener list */
- for (lr = ap_listeners; lr; lr = lr->next) {
- /* slr is at the head of the list */
- if (lr == slr) {
- ap_listeners = slr->next;
- break;
- }
- /* slr is somewhere in between or at the end*/
- if (lr->next == slr) {
- lr->next = slr->next;
- break;
- }
- }
- return APR_SUCCESS;
-}
-
-static const char *set_trusted_certs(cmd_parms *cmd, void *dummy, char *arg)
-{
- char **ptr = (char **)apr_array_push(certlist);
-
- *ptr = apr_pstrdup(cmd->pool, arg);
- return NULL;
-}
-
-static int nwssl_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- ap_seclisteners = NULL;
- ap_seclistenersup = NULL;
- certlist = apr_array_make(pconf, 1, sizeof(char *));
-
- return OK;
-}
-
-static int nwssl_pre_connection(conn_rec *c, void *csd)
-{
-
- if (apr_table_get(c->notes, "nwconv-ssl")) {
- convert_secure_socket(c, (apr_socket_t*)csd);
- }
- else {
- ap_set_module_config(c->conn_config, &nwssl_module, csd);
- }
-
- return OK;
-}
-
-static int nwssl_post_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- seclisten_rec* sl;
- ap_listen_rec* lr;
- apr_socket_t* sd;
- apr_status_t status;
- seclistenup_rec *slu;
- int found;
-
- for (sl = ap_seclisteners; sl != NULL; sl = sl->next) {
- sl->fd = find_secure_listener(sl);
-
- if (sl->fd < 0)
- sl->fd = make_secure_socket(pconf, &sl->local_addr, sl->key, sl->mutual, s);
-
- if (sl->fd >= 0) {
- apr_os_sock_info_t sock_info;
-
- sock_info.os_sock = &(sl->fd);
- sock_info.local = (struct sockaddr*)&(sl->local_addr);
- sock_info.remote = NULL;
- sock_info.family = APR_INET;
- sock_info.type = SOCK_STREAM;
-
- apr_os_sock_make(&sd, &sock_info, pconf);
-
- lr = apr_pcalloc(pconf, sizeof(ap_listen_rec));
-
- if (lr) {
- lr->sd = sd;
- if ((status = apr_sockaddr_info_get(&lr->bind_addr, sl->addr, APR_UNSPEC, sl->port, 0,
- pconf)) != APR_SUCCESS) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, status, pconf,
- "alloc_listener: failed to set up sockaddr for %s:%d", sl->addr, sl->port);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- lr->next = ap_listeners;
- ap_listeners = lr;
- apr_pool_cleanup_register(pconf, lr, nwssl_socket_cleanup, apr_pool_cleanup_null);
- }
- } else {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- for (slu = ap_seclistenersup; slu; slu = slu->next) {
- /* Check the listener list for a matching upgradeable listener */
- found = 0;
- for (lr = ap_listeners; lr; lr = lr->next) {
- if (slu->port == lr->bind_addr->port) {
- found = 1;
- break;
- }
- }
- if (!found) {
- ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, plog,
- "No Listen directive found for upgradeable listener %s:%d", slu->addr, slu->port);
- }
- }
-
- build_cert_list(pconf);
-
- return OK;
-}
-
-static void *nwssl_config_server_create(apr_pool_t *p, server_rec *s)
-{
- NWSSLSrvConfigRec *new = apr_palloc(p, sizeof(NWSSLSrvConfigRec));
- new->sltable = apr_table_make(p, 5);
- new->slutable = apr_table_make(p, 5);
- return new;
-}
-
-static void *nwssl_config_server_merge(apr_pool_t *p, void *basev, void *addv)
-{
- NWSSLSrvConfigRec *base = (NWSSLSrvConfigRec *)basev;
- NWSSLSrvConfigRec *add = (NWSSLSrvConfigRec *)addv;
- NWSSLSrvConfigRec *merged = (NWSSLSrvConfigRec *)apr_palloc(p, sizeof(NWSSLSrvConfigRec));
- return merged;
-}
-
-static int isSecureConnEx (const server_rec *s, const conn_rec *c, const apr_table_t *t)
-{
- NWSSLSrvConfigRec *sc = get_nwssl_cfg(s);
- const char *s_secure = NULL;
- char port[8];
- int ret = 0;
-
- itoa((c->local_addr)->port, port, 10);
- s_secure = apr_table_get(t, port);
- if (s_secure &&
- ((strcmp(s_secure, "0.0.0.0") == 0) || (strcmp(s_secure, c->local_ip) == 0)))
- ret = 1;
-
- return ret;
-}
-
-static int isSecureConn (const server_rec *s, const conn_rec *c)
-{
- NWSSLSrvConfigRec *sc = get_nwssl_cfg(s);
-
- return isSecureConnEx (s, c, sc->sltable);
-}
-
-static int isSecureConnUpgradeable (const server_rec *s, const conn_rec *c)
-{
- NWSSLSrvConfigRec *sc = get_nwssl_cfg(s);
-
- return isSecureConnEx (s, c, sc->slutable);
-}
-
-static int isSecure (const request_rec *r)
-{
- return isSecureConn (r->server, r->connection);
-}
-
-static int isSecureUpgradeable (const request_rec *r)
-{
- return isSecureConnUpgradeable (r->server, r->connection);
-}
-
-static int nwssl_hook_Fixup(request_rec *r)
-{
- int i;
-
- if (!isSecure(r))
- return DECLINED;
-
- apr_table_set(r->subprocess_env, "HTTPS", "on");
-
- return DECLINED;
-}
-
-static const char *nwssl_hook_http_method (const request_rec *r)
-{
- if (isSecure(r))
- return "https";
-
- return NULL;
-}
-
-static apr_port_t nwssl_hook_default_port(const request_rec *r)
-{
- if (isSecure(r))
- return DEFAULT_HTTPS_PORT;
-
- return 0;
-}
-
-int ssl_proxy_enable(conn_rec *c)
-{
- apr_table_set(c->notes, "nwconv-ssl", "Y");
-
- return 1;
-}
-
-int ssl_engine_disable(conn_rec *c)
-{
- return 1;
-}
-
-static int ssl_is_https(conn_rec *c)
-{
- return isSecureConn (c->base_server, c);
-}
-
-/* This function must remain safe to use for a non-SSL connection. */
-char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var)
-{
- NWSSLSrvConfigRec *mc = get_nwssl_cfg(s);
- const char *result;
- BOOL resdup;
- apr_time_exp_t tm;
-
- result = NULL;
- resdup = TRUE;
-
- /*
- * When no pool is given try to find one
- */
- if (p == NULL) {
- if (r != NULL)
- p = r->pool;
- else if (c != NULL)
- p = c->pool;
- else
- p = mc->pPool;
- }
-
- /*
- * Request dependent stuff
- */
- if (r != NULL) {
- switch (var[0]) {
- case 'H':
- case 'h':
- if (strcEQ(var, "HTTP_USER_AGENT"))
- result = apr_table_get(r->headers_in, "User-Agent");
- else if (strcEQ(var, "HTTP_REFERER"))
- result = apr_table_get(r->headers_in, "Referer");
- else if (strcEQ(var, "HTTP_COOKIE"))
- result = apr_table_get(r->headers_in, "Cookie");
- else if (strcEQ(var, "HTTP_FORWARDED"))
- result = apr_table_get(r->headers_in, "Forwarded");
- else if (strcEQ(var, "HTTP_HOST"))
- result = apr_table_get(r->headers_in, "Host");
- else if (strcEQ(var, "HTTP_PROXY_CONNECTION"))
- result = apr_table_get(r->headers_in, "Proxy-Connection");
- else if (strcEQ(var, "HTTP_ACCEPT"))
- result = apr_table_get(r->headers_in, "Accept");
- else if (strlen(var) > 5 && strcEQn(var, "HTTP:", 5))
- /* all other headers from which we are still not know about */
- result = apr_table_get(r->headers_in, var+5);
- break;
-
- case 'R':
- case 'r':
- if (strcEQ(var, "REQUEST_METHOD"))
- result = r->method;
- else if (strcEQ(var, "REQUEST_SCHEME"))
- result = ap_http_method(r);
- else if (strcEQ(var, "REQUEST_URI"))
- result = r->uri;
- else if (strcEQ(var, "REQUEST_FILENAME"))
- result = r->filename;
- else if (strcEQ(var, "REMOTE_HOST"))
- result = ap_get_remote_host(r->connection, r->per_dir_config,
- REMOTE_NAME, NULL);
- else if (strcEQ(var, "REMOTE_IDENT"))
- result = ap_get_remote_logname(r);
- else if (strcEQ(var, "REMOTE_USER"))
- result = r->user;
- break;
-
- case 'S':
- case 's':
- if (strcEQn(var, "SSL", 3)) break; /* shortcut common case */
-
- if (strcEQ(var, "SERVER_ADMIN"))
- result = r->server->server_admin;
- else if (strcEQ(var, "SERVER_NAME"))
- result = ap_get_server_name(r);
- else if (strcEQ(var, "SERVER_PORT"))
- result = apr_psprintf(p, "%u", ap_get_server_port(r));
- else if (strcEQ(var, "SERVER_PROTOCOL"))
- result = r->protocol;
- else if (strcEQ(var, "SCRIPT_FILENAME"))
- result = r->filename;
- break;
-
- default:
- if (strcEQ(var, "PATH_INFO"))
- result = r->path_info;
- else if (strcEQ(var, "QUERY_STRING"))
- result = r->args;
- else if (strcEQ(var, "IS_SUBREQ"))
- result = (r->main != NULL ? "true" : "false");
- else if (strcEQ(var, "DOCUMENT_ROOT"))
- result = ap_document_root(r);
- else if (strcEQ(var, "AUTH_TYPE"))
- result = r->ap_auth_type;
- else if (strcEQ(var, "THE_REQUEST"))
- result = r->the_request;
- break;
- }
- }
-
- /*
- * Connection stuff
- */
- if (result == NULL && c != NULL) {
-
- /* XXX-Can't get specific SSL info from NetWare */
- /* SSLConnRec *sslconn = myConnConfig(c);
- if (strlen(var) > 4 && strcEQn(var, "SSL_", 4)
- && sslconn && sslconn->ssl)
- result = ssl_var_lookup_ssl(p, c, var+4);*/
-
- if (strlen(var) > 4 && strcEQn(var, "SSL_", 4))
- result = NULL;
- else if (strcEQ(var, "REMOTE_ADDR"))
- result = c->remote_ip;
- else if (strcEQ(var, "HTTPS")) {
- if (isSecureConn (s, c))
- result = "on";
- else
- result = "off";
- }
- }
-
- /*
- * Totally independent stuff
- */
- if (result == NULL) {
- if (strlen(var) > 12 && strcEQn(var, "SSL_VERSION_", 12))
- result = NULL;
- /* XXX-Can't get specific SSL info from NetWare */
- /*result = ssl_var_lookup_ssl_version(p, var+12);*/
- else if (strcEQ(var, "SERVER_SOFTWARE"))
- result = ap_get_server_version();
- else if (strcEQ(var, "API_VERSION")) {
- result = apr_itoa(p, MODULE_MAGIC_NUMBER);
- resdup = FALSE;
- }
- else if (strcEQ(var, "TIME_YEAR")) {
- apr_time_exp_lt(&tm, apr_time_now());
- result = apr_psprintf(p, "%02d%02d",
- (tm.tm_year / 100) + 19, tm.tm_year % 100);
- resdup = FALSE;
- }
-#define MKTIMESTR(format, tmfield) \
- apr_time_exp_lt(&tm, apr_time_now()); \
- result = apr_psprintf(p, format, tm.tmfield); \
- resdup = FALSE;
- else if (strcEQ(var, "TIME_MON")) {
- MKTIMESTR("%02d", tm_mon+1)
- }
- else if (strcEQ(var, "TIME_DAY")) {
- MKTIMESTR("%02d", tm_mday)
- }
- else if (strcEQ(var, "TIME_HOUR")) {
- MKTIMESTR("%02d", tm_hour)
- }
- else if (strcEQ(var, "TIME_MIN")) {
- MKTIMESTR("%02d", tm_min)
- }
- else if (strcEQ(var, "TIME_SEC")) {
- MKTIMESTR("%02d", tm_sec)
- }
- else if (strcEQ(var, "TIME_WDAY")) {
- MKTIMESTR("%d", tm_wday)
- }
- else if (strcEQ(var, "TIME")) {
- apr_time_exp_lt(&tm, apr_time_now());
- result = apr_psprintf(p,
- "%02d%02d%02d%02d%02d%02d%02d", (tm.tm_year / 100) + 19,
- (tm.tm_year % 100), tm.tm_mon+1, tm.tm_mday,
- tm.tm_hour, tm.tm_min, tm.tm_sec);
- resdup = FALSE;
- }
- /* all other env-variables from the parent Apache process */
- else if (strlen(var) > 4 && strcEQn(var, "ENV:", 4)) {
- result = apr_table_get(r->notes, var+4);
- if (result == NULL)
- result = apr_table_get(r->subprocess_env, var+4);
- if (result == NULL)
- result = getenv(var+4);
- }
- }
-
- if (result != NULL && resdup)
- result = apr_pstrdup(p, result);
- if (result == NULL)
- result = "";
- return (char *)result;
-}
-
-static apr_status_t ssl_io_filter_Upgrade(ap_filter_t *f,
- apr_bucket_brigade *bb)
-
-{
-#define SWITCH_STATUS_LINE "HTTP/1.1 101 Switching Protocols"
-#define UPGRADE_HEADER "Upgrade: TLS/1.0, HTTP/1.1"
-#define CONNECTION_HEADER "Connection: Upgrade"
- const char *upgrade;
- const char *connection;
- apr_bucket_brigade *upgradebb;
- request_rec *r = f->r;
- apr_socket_t *csd = NULL;
- char *key;
- unicode_t keyFileName[512];
- int ret;
- char *token_string;
- char *token;
- char *token_state;
-
- /* Just remove the filter, if it doesn't work the first time, it won't
- * work at all for this request.
- */
- ap_remove_output_filter(f);
-
- /* No need to ensure that this is a server with optional SSL, the filter
- * is only inserted if that is true.
- */
-
- upgrade = apr_table_get(r->headers_in, "Upgrade");
- if (upgrade == NULL) {
- return ap_pass_brigade(f->next, bb);
- }
- token_string = apr_pstrdup(r->pool,upgrade);
- token = apr_strtok(token_string,", ",&token_state);
- while (token && strcmp(token,"TLS/1.0")) {
- apr_strtok(NULL,", ",&token_state);
- }
- // "Upgrade: TLS/1.0" header not found, don't do Upgrade
- if (!token) {
- return ap_pass_brigade(f->next, bb);
- }
-
- connection = apr_table_get(r->headers_in, "Connection");
- token_string = apr_pstrdup(r->pool,connection);
- token = apr_strtok(token_string,",",&token_state);
- while (token && strcmp(token,"Upgrade")) {
- apr_strtok(NULL,",",&token_state);
- }
- // "Connection: Upgrade" header not found, don't do Upgrade
- if (!token) {
- return ap_pass_brigade(f->next, bb);
- }
-
- apr_table_unset(r->headers_out, "Upgrade");
-
- if (r) {
- csd = (apr_socket_t*)ap_get_module_config(r->connection->conn_config, &nwssl_module);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Unable to get upgradeable socket handle");
- return ap_pass_brigade(f->next, bb);
- }
-
-
- if (r->method_number == M_OPTIONS) {
- apr_bucket *b = NULL;
- /* This is a mandatory SSL upgrade. */
-
- upgradebb = apr_brigade_create(r->pool, f->c->bucket_alloc);
-
- ap_fputstrs(f->next, upgradebb, SWITCH_STATUS_LINE, CRLF,
- UPGRADE_HEADER, CRLF, CONNECTION_HEADER, CRLF, CRLF, NULL);
-
- b = apr_bucket_flush_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(upgradebb, b);
- ap_pass_brigade(f->next, upgradebb);
- }
- else {
- /* This is optional, and should be configurable, for now don't bother
- * doing anything.
- */
- return ap_pass_brigade(f->next, bb);
- }
-
- key = get_port_key(r->connection);
-
- if (csd && key) {
- int sockdes;
- apr_os_sock_get(&sockdes, csd);
-
-
- ret = SSLize_Socket(sockdes, key, r);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Upgradeable socket handle not found");
- return ap_pass_brigade(f->next, bb);
- }
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Awaiting re-negotiation handshake");
-
- return ap_pass_brigade(f->next, bb);
-}
-
-static void ssl_hook_Insert_Filter(request_rec *r)
-{
- NWSSLSrvConfigRec *sc = get_nwssl_cfg(r->server);
-
- if (isSecureUpgradeable (r)) {
- ap_add_output_filter("UPGRADE_FILTER", NULL, r, r->connection);
- }
-}
-
-static const command_rec nwssl_module_cmds[] =
-{
- AP_INIT_TAKE23("SecureListen", set_secure_listener, NULL, RSRC_CONF,
- "specify an address and/or port with a key pair name.\n"
- "Optional third parameter of MUTUAL configures the port for mutual authentication."),
- AP_INIT_TAKE2("NWSSLUpgradeable", set_secure_upgradeable_listener, NULL, RSRC_CONF,
- "specify an address and/or port with a key pair name, that can be upgraded to an SSL connection.\n"
- "The address and/or port must have already be defined using a Listen directive."),
- AP_INIT_ITERATE("NWSSLTrustedCerts", set_trusted_certs, NULL, RSRC_CONF,
- "Adds trusted certificates that are used to create secure connections to proxied servers"),
- {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_output_filter ("UPGRADE_FILTER", ssl_io_filter_Upgrade, NULL, AP_FTYPE_PROTOCOL + 5);
-
- ap_hook_pre_config(nwssl_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_pre_connection(nwssl_pre_connection, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(nwssl_post_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_fixups(nwssl_hook_Fixup, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_http_method(nwssl_hook_http_method, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_default_port (nwssl_hook_default_port, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_insert_filter (ssl_hook_Insert_Filter, NULL,NULL, APR_HOOK_MIDDLE);
-
- APR_REGISTER_OPTIONAL_FN(ssl_is_https);
- APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
-
- APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable);
- APR_REGISTER_OPTIONAL_FN(ssl_engine_disable);
-}
-
-module AP_MODULE_DECLARE_DATA nwssl_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- nwssl_config_server_create, /* server config */
- nwssl_config_server_merge, /* merge server config */
- nwssl_module_cmds, /* command apr_table_t */
- register_hooks
-};
-
diff --git a/modules/arch/netware/mod_proxy.def b/modules/arch/netware/mod_proxy.def
deleted file mode 100644
index ab02a53c73..0000000000
--- a/modules/arch/netware/mod_proxy.def
+++ /dev/null
@@ -1,6 +0,0 @@
-EXPORT proxy_module
-EXPORT proxy_hook_scheme_handler
-EXPORT proxy_hook_canon_handler
-EXPORT ap_proxy_ssl_enable
-EXPORT ap_proxy_ssl_disable
-EXPORT proxy_run_fixups
diff --git a/modules/arch/netware/mod_proxy_connect.def b/modules/arch/netware/mod_proxy_connect.def
deleted file mode 100644
index 136111408b..0000000000
--- a/modules/arch/netware/mod_proxy_connect.def
+++ /dev/null
@@ -1,4 +0,0 @@
-EXPORT proxy_connect_module
-IMPORT proxy_module
-IMPORT proxy_hook_scheme_handler
-IMPORT proxy_hook_canon_handler
diff --git a/modules/arch/netware/mod_proxy_ftp.def b/modules/arch/netware/mod_proxy_ftp.def
deleted file mode 100644
index f2dba7d6c5..0000000000
--- a/modules/arch/netware/mod_proxy_ftp.def
+++ /dev/null
@@ -1,4 +0,0 @@
-EXPORT proxy_ftp_module
-IMPORT proxy_module
-IMPORT proxy_hook_scheme_handler
-IMPORT proxy_hook_canon_handler
diff --git a/modules/arch/netware/mod_proxy_http.def b/modules/arch/netware/mod_proxy_http.def
deleted file mode 100644
index b24358b169..0000000000
--- a/modules/arch/netware/mod_proxy_http.def
+++ /dev/null
@@ -1,7 +0,0 @@
-EXPORT proxy_http_module
-IMPORT proxy_module
-IMPORT proxy_hook_scheme_handler
-IMPORT proxy_run_fixups
-IMPORT proxy_hook_canon_handler
-IMPORT ap_proxy_ssl_enable
-IMPORT ap_proxy_ssl_disable
diff --git a/modules/arch/netware/mod_rewrite.def b/modules/arch/netware/mod_rewrite.def
deleted file mode 100644
index cfdcf6b132..0000000000
--- a/modules/arch/netware/mod_rewrite.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT rewrite_module
diff --git a/modules/arch/netware/mod_speling.def b/modules/arch/netware/mod_speling.def
deleted file mode 100644
index 3d45a6aa1a..0000000000
--- a/modules/arch/netware/mod_speling.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT speling_module
diff --git a/modules/arch/netware/mod_status.def b/modules/arch/netware/mod_status.def
deleted file mode 100644
index 9a5a32d46c..0000000000
--- a/modules/arch/netware/mod_status.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT status_module
-
diff --git a/modules/arch/netware/mod_unique_id.def b/modules/arch/netware/mod_unique_id.def
deleted file mode 100644
index 0b72c1ecc0..0000000000
--- a/modules/arch/netware/mod_unique_id.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT unique_id_module
diff --git a/modules/arch/netware/mod_usertrack.def b/modules/arch/netware/mod_usertrack.def
deleted file mode 100644
index 7264c41ecf..0000000000
--- a/modules/arch/netware/mod_usertrack.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT usertrack_module
diff --git a/modules/arch/netware/mod_vhost_alias.def b/modules/arch/netware/mod_vhost_alias.def
deleted file mode 100644
index 574b85f987..0000000000
--- a/modules/arch/netware/mod_vhost_alias.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT vhost_alias_module
-
diff --git a/modules/arch/netware/moddavfs.def b/modules/arch/netware/moddavfs.def
deleted file mode 100644
index 67ec311758..0000000000
--- a/modules/arch/netware/moddavfs.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT dav_fs_module
diff --git a/modules/arch/win32/.cvsignore b/modules/arch/win32/.cvsignore
deleted file mode 100644
index 8a31aca1e9..0000000000
--- a/modules/arch/win32/.cvsignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/arch/win32/Makefile.in b/modules/arch/win32/Makefile.in
deleted file mode 100644
index 7c5c149d85..0000000000
--- a/modules/arch/win32/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/arch/win32/config.m4 b/modules/arch/win32/config.m4
deleted file mode 100644
index 584e76d9c2..0000000000
--- a/modules/arch/win32/config.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(arch/win32)
-
-APACHE_MODULE(isapi, isapi extension support, , , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/arch/win32/mod_isapi.c b/modules/arch/win32/mod_isapi.c
deleted file mode 100644
index e097c3d9d6..0000000000
--- a/modules/arch/win32/mod_isapi.c
+++ /dev/null
@@ -1,1646 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_isapi.c - Internet Server Application (ISA) module for Apache
- * by Alexei Kosut <akosut@apache.org>, significant overhauls and
- * redesign by William Rowe <wrowe@covalent.net>, and hints from many
- * other developer/users who have hit on specific flaws.
- *
- * This module implements the ISAPI Handler architecture, allowing
- * Apache to load Internet Server Applications (ISAPI extensions),
- * similar to the support in IIS, Zope, O'Reilly's WebSite and others.
- *
- * It is a complete implementation of the ISAPI 2.0 specification,
- * except for "Microsoft extensions" to the API which provide
- * asynchronous I/O. It is further extended to include additional
- * "Microsoft extentions" through IIS 5.0, with some deficiencies
- * where one-to-one mappings don't exist.
- *
- * Refer to /manual/mod/mod_isapi.html for additional details on
- * configuration and use, but check this source for specific support
- * of the API,
- */
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "apr_thread_mutex.h"
-#include "apr_thread_rwlock.h"
-#include "apr_hash.h"
-#include "mod_isapi.h"
-
-/* Retry frequency for a failed-to-load isapi .dll */
-#define ISAPI_RETRY apr_time_from_sec(30)
-
-/**********************************************************
- *
- * ISAPI Module Configuration
- *
- **********************************************************/
-
-module AP_MODULE_DECLARE_DATA isapi_module;
-
-#define ISAPI_UNDEF -1
-
-/* Our isapi per-dir config structure */
-typedef struct isapi_dir_conf {
- int read_ahead_buflen;
- int log_unsupported;
- int log_to_errlog;
- int log_to_query;
- int fake_async;
-} isapi_dir_conf;
-
-typedef struct isapi_loaded isapi_loaded;
-
-apr_status_t isapi_lookup(apr_pool_t *p, server_rec *s, request_rec *r,
- const char *fpath, isapi_loaded** isa);
-
-static void *create_isapi_dir_config(apr_pool_t *p, char *dummy)
-{
- isapi_dir_conf *dir = apr_palloc(p, sizeof(isapi_dir_conf));
-
- dir->read_ahead_buflen = ISAPI_UNDEF;
- dir->log_unsupported = ISAPI_UNDEF;
- dir->log_to_errlog = ISAPI_UNDEF;
- dir->log_to_query = ISAPI_UNDEF;
- dir->fake_async = ISAPI_UNDEF;
-
- return dir;
-}
-
-static void *merge_isapi_dir_configs(apr_pool_t *p, void *base_, void *add_)
-{
- isapi_dir_conf *base = (isapi_dir_conf *) base_;
- isapi_dir_conf *add = (isapi_dir_conf *) add_;
- isapi_dir_conf *dir = apr_palloc(p, sizeof(isapi_dir_conf));
-
- dir->read_ahead_buflen = (add->read_ahead_buflen == ISAPI_UNDEF)
- ? base->read_ahead_buflen
- : add->read_ahead_buflen;
- dir->log_unsupported = (add->log_unsupported == ISAPI_UNDEF)
- ? base->log_unsupported
- : add->log_unsupported;
- dir->log_to_errlog = (add->log_to_errlog == ISAPI_UNDEF)
- ? base->log_to_errlog
- : add->log_to_errlog;
- dir->log_to_query = (add->log_to_query == ISAPI_UNDEF)
- ? base->log_to_query
- : add->log_to_query;
- dir->fake_async = (add->fake_async == ISAPI_UNDEF)
- ? base->fake_async
- : add->fake_async;
-
- return dir;
-}
-
-static const char *isapi_cmd_cachefile(cmd_parms *cmd, void *dummy,
- const char *filename)
-{
- isapi_loaded *isa;
- apr_finfo_t tmp;
- apr_status_t rv;
- char *fspec;
-
- /* ### Just an observation ... it would be terribly cool to be
- * able to use this per-dir, relative to the directory block being
- * defined. The hash result remains global, but shorthand of
- * <Directory "c:/webapps/isapi">
- * ISAPICacheFile myapp.dll anotherapp.dll thirdapp.dll
- * </Directory>
- * would be very convienent.
- */
- fspec = ap_server_root_relative(cmd->pool, filename);
- if (!fspec) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, APR_EBADPATH, cmd->server,
- "ISAPI: invalid module path, skipping %s", filename);
- return NULL;
- }
- if ((rv = apr_stat(&tmp, fspec, APR_FINFO_TYPE,
- cmd->temp_pool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, cmd->server,
- "ISAPI: unable to stat, skipping %s", fspec);
- return NULL;
- }
- if (tmp.filetype != APR_REG) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "ISAPI: not a regular file, skipping %s", fspec);
- return NULL;
- }
-
- /* Load the extention as cached (with null request_rec) */
- rv = isapi_lookup(cmd->pool, cmd->server, NULL, fspec, &isa);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, cmd->server,
- "ISAPI: unable to cache, skipping %s", fspec);
- return NULL;
- }
-
- return NULL;
-}
-
-static const command_rec isapi_cmds[] = {
- AP_INIT_TAKE1("ISAPIReadAheadBuffer", ap_set_int_slot,
- (void *)APR_OFFSETOF(isapi_dir_conf, read_ahead_buflen),
- OR_FILEINFO, "Maximum client request body to initially pass to the"
- " ISAPI handler (default: 49152)"),
- AP_INIT_FLAG("ISAPILogNotSupported", ap_set_flag_slot,
- (void *)APR_OFFSETOF(isapi_dir_conf, log_unsupported),
- OR_FILEINFO, "Log requests not supported by the ISAPI server"
- " on or off (default: off)"),
- AP_INIT_FLAG("ISAPIAppendLogToErrors", ap_set_flag_slot,
- (void *)APR_OFFSETOF(isapi_dir_conf, log_to_errlog),
- OR_FILEINFO, "Send all Append Log requests to the error log"
- " on or off (default: off)"),
- AP_INIT_FLAG("ISAPIAppendLogToQuery", ap_set_flag_slot,
- (void *)APR_OFFSETOF(isapi_dir_conf, log_to_query),
- OR_FILEINFO, "Append Log requests are concatinated to the query args"
- " on or off (default: on)"),
- AP_INIT_FLAG("ISAPIFakeAsync", ap_set_flag_slot,
- (void *)APR_OFFSETOF(isapi_dir_conf, fake_async),
- OR_FILEINFO, "Fake Asynchronous support for isapi callbacks"
- " on or off [Experimental] (default: off)"),
- AP_INIT_ITERATE("ISAPICacheFile", isapi_cmd_cachefile, NULL,
- RSRC_CONF, "Cache the specified ISAPI extension in-process"),
- {NULL}
-};
-
-/**********************************************************
- *
- * ISAPI Module Cache handling section
- *
- **********************************************************/
-
-/* Our isapi global config values */
-static struct isapi_global_conf {
- apr_pool_t *pool;
- apr_thread_mutex_t *lock;
- apr_hash_t *hash;
-} loaded;
-
-/* Our loaded isapi module description structure */
-struct isapi_loaded {
- const char *filename;
- apr_thread_rwlock_t *in_progress;
- apr_status_t last_load_rv;
- apr_time_t last_load_time;
- apr_dso_handle_t *handle;
- HSE_VERSION_INFO *isapi_version;
- apr_uint32_t report_version;
- apr_uint32_t timeout;
- PFN_GETEXTENSIONVERSION GetExtensionVersion;
- PFN_HTTPEXTENSIONPROC HttpExtensionProc;
- PFN_TERMINATEEXTENSION TerminateExtension;
-};
-
-static apr_status_t isapi_unload(isapi_loaded *isa, int force)
-{
- /* All done with the DLL... get rid of it...
- *
- * If optionally cached, and we weren't asked to force the unload,
- * pass HSE_TERM_ADVISORY_UNLOAD, and if it returns 1, unload,
- * otherwise, leave it alone (it didn't choose to cooperate.)
- */
- if (!isa->handle) {
- return APR_SUCCESS;
- }
- if (isa->TerminateExtension) {
- if (force) {
- (*isa->TerminateExtension)(HSE_TERM_MUST_UNLOAD);
- }
- else if (!(*isa->TerminateExtension)(HSE_TERM_ADVISORY_UNLOAD)) {
- return APR_EGENERAL;
- }
- }
- apr_dso_unload(isa->handle);
- isa->handle = NULL;
- return APR_SUCCESS;
-}
-
-static apr_status_t cleanup_isapi(void *isa_)
-{
- isapi_loaded* isa = (isapi_loaded*) isa_;
-
- /* We must force the module to unload, we are about
- * to lose the isapi structure's allocation entirely.
- */
- return isapi_unload(isa, 1);
-}
-
-static apr_status_t isapi_load(apr_pool_t *p, server_rec *s, isapi_loaded *isa)
-{
- apr_status_t rv;
-
- isa->isapi_version = apr_pcalloc(p, sizeof(HSE_VERSION_INFO));
-
- /* TODO: These aught to become overrideable, so that we
- * assure a given isapi can be fooled into behaving well.
- *
- * The tricky bit, they aren't really a per-dir sort of
- * config, they will always be constant across every
- * reference to the .dll no matter what context (vhost,
- * location, etc) they apply to.
- */
- isa->report_version = MAKELONG(0, 5); /* Revision 5.0 */
- isa->timeout = 300 * 1000000; /* microsecs, not used */
-
- rv = apr_dso_load(&isa->handle, isa->filename, p);
- if (rv)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "ISAPI: failed to load %s", isa->filename);
- isa->handle = NULL;
- return rv;
- }
-
- rv = apr_dso_sym((void**)&isa->GetExtensionVersion, isa->handle,
- "GetExtensionVersion");
- if (rv)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "ISAPI: missing GetExtensionVersion() in %s",
- isa->filename);
- apr_dso_unload(isa->handle);
- isa->handle = NULL;
- return rv;
- }
-
- rv = apr_dso_sym((void**)&isa->HttpExtensionProc, isa->handle,
- "HttpExtensionProc");
- if (rv)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "ISAPI: missing HttpExtensionProc() in %s",
- isa->filename);
- apr_dso_unload(isa->handle);
- isa->handle = NULL;
- return rv;
- }
-
- /* TerminateExtension() is an optional interface */
- rv = apr_dso_sym((void**)&isa->TerminateExtension, isa->handle,
- "TerminateExtension");
- SetLastError(0);
-
- /* Run GetExtensionVersion() */
- if (!(isa->GetExtensionVersion)(isa->isapi_version)) {
- apr_status_t rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "ISAPI: failed call to GetExtensionVersion() in %s",
- isa->filename);
- apr_dso_unload(isa->handle);
- isa->handle = NULL;
- return rv;
- }
-
- apr_pool_cleanup_register(p, isa, cleanup_isapi,
- apr_pool_cleanup_null);
-
- return APR_SUCCESS;
-}
-
-apr_status_t isapi_lookup(apr_pool_t *p, server_rec *s, request_rec *r,
- const char *fpath, isapi_loaded** isa)
-{
- apr_status_t rv;
- const char *key;
-
- if ((rv = apr_thread_mutex_lock(loaded.lock)) != APR_SUCCESS) {
- return rv;
- }
-
- *isa = apr_hash_get(loaded.hash, fpath, APR_HASH_KEY_STRING);
-
- if (*isa) {
-
- /* If we find this lock exists, use a set-aside copy of gainlock
- * to avoid race conditions on NULLing the in_progress variable
- * when the load has completed. Release the global isapi hash
- * lock so other requests can proceed, then rdlock for completion
- * of loading our desired dll or wrlock if we would like to retry
- * loading the dll (because last_load_rv failed and retry is up.)
- */
- apr_thread_rwlock_t *gainlock = (*isa)->in_progress;
-
- /* gainlock is NULLed after the module loads successfully.
- * This free-threaded module can be used without any locking.
- */
- if (!gainlock) {
- rv = (*isa)->last_load_rv;
- apr_thread_mutex_unlock(loaded.lock);
- return rv;
- }
-
-
- if ((*isa)->last_load_rv == APR_SUCCESS) {
- apr_thread_mutex_unlock(loaded.lock);
- if ((rv = apr_thread_rwlock_rdlock(gainlock))
- != APR_SUCCESS) {
- return rv;
- }
- rv = (*isa)->last_load_rv;
- apr_thread_rwlock_unlock(gainlock);
- return rv;
- }
-
- if (apr_time_now() > (*isa)->last_load_time + ISAPI_RETRY) {
-
- /* Remember last_load_time before releasing the global
- * hash lock to avoid colliding with another thread
- * that hit this exception at the same time as our
- * retry attempt, since we unlock the global mutex
- * before attempting a write lock for this module.
- */
- apr_time_t check_time = (*isa)->last_load_time;
- apr_thread_mutex_unlock(loaded.lock);
-
- if ((rv = apr_thread_rwlock_wrlock(gainlock))
- != APR_SUCCESS) {
- return rv;
- }
-
- /* If last_load_time is unchanged, we still own this
- * retry, otherwise presume another thread provided
- * our retry (for good or ill). Relock the global
- * hash for updating last_load_ vars, so their update
- * is always atomic to the global lock.
- */
- if (check_time == (*isa)->last_load_time) {
-
- rv = isapi_load(loaded.pool, s, *isa);
-
- apr_thread_mutex_lock(loaded.lock);
- (*isa)->last_load_rv = rv;
- (*isa)->last_load_time = apr_time_now();
- apr_thread_mutex_unlock(loaded.lock);
- }
- else {
- rv = (*isa)->last_load_rv;
- }
- apr_thread_rwlock_unlock(gainlock);
-
- return rv;
- }
-
- /* We haven't hit timeup on retry, let's grab the last_rv
- * within the hash mutex before unlocking.
- */
- rv = (*isa)->last_load_rv;
- apr_thread_mutex_unlock(loaded.lock);
-
- return rv;
- }
-
- /* If the module was not found, it's time to create a hash key entry
- * before releasing the hash lock to avoid multiple threads from
- * loading the same module.
- */
- key = apr_pstrdup(loaded.pool, fpath);
- *isa = apr_pcalloc(loaded.pool, sizeof(isapi_loaded));
- (*isa)->filename = key;
- if (r) {
- /* A mutex that exists only long enough to attempt to
- * load this isapi dll, the release this module to all
- * other takers that came along during the one-time
- * load process. Short lifetime for this lock would
- * be great, however, using r->pool is nasty if those
- * blocked on the lock haven't all unlocked before we
- * attempt to destroy. A nastier race condition than
- * I want to deal with at this moment...
- */
- apr_thread_rwlock_create(&(*isa)->in_progress, loaded.pool);
- apr_thread_rwlock_wrlock((*isa)->in_progress);
- }
-
- apr_hash_set(loaded.hash, key, APR_HASH_KEY_STRING, *isa);
-
- /* Now attempt to load the isapi on our own time,
- * allow other isapi processing to resume.
- */
- apr_thread_mutex_unlock(loaded.lock);
-
- rv = isapi_load(loaded.pool, s, *isa);
- (*isa)->last_load_time = apr_time_now();
- (*isa)->last_load_rv = rv;
-
- if (r && (rv == APR_SUCCESS)) {
- /* Let others who are blocked on this particular
- * module resume their requests, for better or worse.
- */
- apr_thread_rwlock_t *unlock = (*isa)->in_progress;
- (*isa)->in_progress = NULL;
- apr_thread_rwlock_unlock(unlock);
- }
- else if (!r && (rv != APR_SUCCESS)) {
- /* We must leave a rwlock around for requests to retry
- * loading this dll after timeup... since we were in
- * the setup code we had avoided creating this lock.
- */
- apr_thread_rwlock_create(&(*isa)->in_progress, loaded.pool);
- }
-
- return (*isa)->last_load_rv;
-}
-
-/**********************************************************
- *
- * ISAPI Module request callbacks section
- *
- **********************************************************/
-
-/* Our "Connection ID" structure */
-struct isapi_cid {
- EXTENSION_CONTROL_BLOCK *ecb;
- isapi_dir_conf dconf;
- isapi_loaded *isa;
- request_rec *r;
- int headers_set;
- int response_sent;
- PFN_HSE_IO_COMPLETION completion;
- void *completion_arg;
- apr_thread_mutex_t *completed;
-};
-
-int APR_THREAD_FUNC GetServerVariable (isapi_cid *cid,
- char *variable_name,
- void *buf_data,
- apr_uint32_t *buf_size)
-{
- request_rec *r = cid->r;
- const char *result;
- apr_uint32_t len;
-
- if (!strcmp(variable_name, "ALL_HTTP"))
- {
- /* crlf delimited, colon split, comma separated and
- * null terminated list of HTTP_ vars
- */
- const apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
- const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
- int i;
-
- for (len = 0, i = 0; i < arr->nelts; i++) {
- if (!strncmp(elts[i].key, "HTTP_", 5)) {
- len += strlen(elts[i].key) + strlen(elts[i].val) + 3;
- }
- }
-
- if (*buf_size < len + 1) {
- *buf_size = len + 1;
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return 0;
- }
-
- for (i = 0; i < arr->nelts; i++) {
- if (!strncmp(elts[i].key, "HTTP_", 5)) {
- strcpy(buf_data, elts[i].key);
- ((char*)buf_data) += strlen(elts[i].key);
- *(((char*)buf_data)++) = ':';
- strcpy(buf_data, elts[i].val);
- ((char*)buf_data) += strlen(elts[i].val);
- *(((char*)buf_data)++) = '\r';
- *(((char*)buf_data)++) = '\n';
- }
- }
-
- *(((char*)buf_data)++) = '\0';
- *buf_size = len + 1;
- return 1;
- }
-
- if (!strcmp(variable_name, "ALL_RAW"))
- {
- /* crlf delimited, colon split, comma separated and
- * null terminated list of the raw request header
- */
- const apr_array_header_t *arr = apr_table_elts(r->headers_in);
- const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
- int i;
-
- for (len = 0, i = 0; i < arr->nelts; i++) {
- len += strlen(elts[i].key) + strlen(elts[i].val) + 4;
- }
-
- if (*buf_size < len + 1) {
- *buf_size = len + 1;
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return 0;
- }
-
- for (i = 0; i < arr->nelts; i++) {
- strcpy(buf_data, elts[i].key);
- ((char*)buf_data) += strlen(elts[i].key);
- *(((char*)buf_data)++) = ':';
- *(((char*)buf_data)++) = ' ';
- strcpy(buf_data, elts[i].val);
- ((char*)buf_data) += strlen(elts[i].val);
- *(((char*)buf_data)++) = '\r';
- *(((char*)buf_data)++) = '\n';
- }
- *(((char*)buf_data)++) = '\0';
- *buf_size = len + 1;
- return 1;
- }
-
- /* Not a special case */
- result = apr_table_get(r->subprocess_env, variable_name);
-
- if (result) {
- len = strlen(result);
- if (*buf_size < len + 1) {
- *buf_size = len + 1;
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return 0;
- }
- strcpy(buf_data, result);
- *buf_size = len + 1;
- return 1;
- }
-
- /* Not Found */
- SetLastError(ERROR_INVALID_INDEX);
- return 0;
-}
-
-int APR_THREAD_FUNC ReadClient(isapi_cid *cid,
- void *buf_data,
- apr_uint32_t *buf_size)
-{
- request_rec *r = cid->r;
- apr_uint32_t read = 0;
- int res;
-
- if (r->remaining < *buf_size) {
- *buf_size = (apr_size_t)r->remaining;
- }
-
- while (read < *buf_size &&
- ((res = ap_get_client_block(r, (char*)buf_data + read,
- *buf_size - read)) > 0)) {
- read += res;
- }
-
- *buf_size = read;
- if (res < 0) {
- SetLastError(ERROR_READ_FAULT);
- }
- return (res >= 0);
-}
-
-/* Common code invoked for both HSE_REQ_SEND_RESPONSE_HEADER and
- * the newer HSE_REQ_SEND_RESPONSE_HEADER_EX ServerSupportFunction(s)
- * as well as other functions that write responses and presume that
- * the support functions above are optional.
- *
- * Other callers trying to split headers and body bytes should pass
- * head/headlen alone (leaving stat/statlen NULL/0), so that they
- * get a proper count of bytes consumed. The argument passed to stat
- * isn't counted as the head bytes are.
- */
-static apr_ssize_t send_response_header(isapi_cid *cid,
- const char *stat,
- const char *head,
- apr_size_t statlen,
- apr_size_t headlen)
-{
- int head_present = 1;
- int termarg;
- char *termch;
- apr_size_t ate = 0;
-
- if (!head || headlen == 0 || !*head) {
- head = stat;
- stat = NULL;
- headlen = statlen;
- statlen = 0;
- head_present = 0; /* Don't eat the header */
- }
-
- if (!stat || statlen == 0 || !*stat) {
- if (head && headlen && *head && ((stat = memchr(head, '\r', headlen))
- || (stat = memchr(head, '\n', headlen))
- || (stat = memchr(head, '\0', headlen))
- || (stat = head + headlen))) {
- statlen = stat - head;
- if (memchr(head, ':', statlen)) {
- stat = "Status: 200 OK";
- statlen = strlen(stat);
- }
- else {
- const char *flip = head;
- head = stat;
- stat = flip;
- headlen -= statlen;
- ate += statlen;
- if (*head == '\r' && headlen)
- ++head, --headlen, ++ate;
- if (*head == '\n' && headlen)
- ++head, --headlen, ++ate;
- }
- }
- }
-
- if (stat && (statlen > 0) && *stat) {
- char *newstat;
- if (!apr_isdigit(*stat)) {
- const char *stattok = stat;
- int toklen = statlen;
- while (toklen && *stattok && !apr_isspace(*stattok)) {
- ++stattok; --toklen;
- }
- while (toklen && apr_isspace(*stattok)) {
- ++stattok; --toklen;
- }
- /* Now decide if we follow the xxx message
- * or the http/x.x xxx message format
- */
- if (toklen && apr_isdigit(*stattok)) {
- statlen -= toklen;
- stat = stattok;
- }
- }
- newstat = apr_palloc(cid->r->pool, statlen + 9);
- strcpy(newstat, "Status: ");
- apr_cpystrn(newstat + 8, stat, statlen + 1);
- stat = newstat;
- statlen += 8;
- }
-
- if (!head || headlen == 0 || !*head) {
- head = "\r\n";
- headlen = 2;
- }
- else
- {
- if (head[headlen - 1] && head[headlen]) {
- /* Whoops... not NULL terminated */
- head = apr_pstrndup(cid->r->pool, head, headlen);
- }
- }
-
- /* Seems IIS does not enforce the requirement for \r\n termination
- * on HSE_REQ_SEND_RESPONSE_HEADER, but we won't panic...
- * ap_scan_script_header_err_strs handles this aspect for us.
- *
- * Parse them out, or die trying
- */
- if (stat) {
- cid->r->status = ap_scan_script_header_err_strs(cid->r, NULL,
- &termch, &termarg, stat, head, NULL);
- cid->ecb->dwHttpStatusCode = cid->r->status;
- }
- else {
- cid->r->status = ap_scan_script_header_err_strs(cid->r, NULL,
- &termch, &termarg, head, NULL);
- if (cid->ecb->dwHttpStatusCode && cid->r->status == HTTP_OK
- && cid->ecb->dwHttpStatusCode != HTTP_OK) {
- /* We tried every way to Sunday to get the status...
- * so now we fall back on dwHttpStatusCode if it appears
- * ap_scan_script_header fell back on the default code.
- * Any other results set dwHttpStatusCode to the decoded
- * status value.
- */
- cid->r->status = cid->ecb->dwHttpStatusCode;
- cid->r->status_line = ap_get_status_line(cid->r->status);
- }
- else {
- cid->ecb->dwHttpStatusCode = cid->r->status;
- }
- }
- if (cid->r->status == HTTP_INTERNAL_SERVER_ERROR) {
- return -1;
- }
-
- /* If only Status was passed, we consumed nothing
- */
- if (!head_present)
- return 0;
-
- cid->headers_set = 1;
-
- /* If all went well, tell the caller we consumed the headers complete
- */
- if (!termch)
- return(ate + headlen);
-
- /* Any data left must be sent directly by the caller, all we
- * give back is the size of the headers we consumed (which only
- * happens if the parser got to the head arg, which varies based
- * on whether we passed stat+head to scan, or only head.
- */
- if (termch && (termarg == (stat ? 1 : 0))
- && head_present && head + headlen > termch) {
- return ate + termch - head;
- }
- return ate;
-}
-
-int APR_THREAD_FUNC WriteClient(isapi_cid *cid,
- void *buf_data,
- apr_uint32_t *size_arg,
- apr_uint32_t flags)
-{
- request_rec *r = cid->r;
- conn_rec *c = r->connection;
- apr_uint32_t buf_size = *size_arg;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- apr_status_t rv;
-
- if (!cid->headers_set) {
- /* It appears that the foxisapi module and other clients
- * presume that WriteClient("headers\n\nbody") will work.
- * Parse them out, or die trying.
- */
- apr_ssize_t ate;
- ate = send_response_header(cid, NULL, (char*)buf_data,
- 0, buf_size);
- if (ate < 0) {
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
-
- (char*)buf_data += ate;
- buf_size -= ate;
- }
-
- if (buf_size) {
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_transient_create(buf_data, buf_size, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- rv = ap_pass_brigade(r->output_filters, bb);
- cid->response_sent = 1;
- }
-
- if ((flags & HSE_IO_ASYNC) && cid->completion) {
- if (rv == OK) {
- cid->completion(cid->ecb, cid->completion_arg,
- *size_arg, ERROR_SUCCESS);
- }
- else {
- cid->completion(cid->ecb, cid->completion_arg,
- *size_arg, ERROR_WRITE_FAULT);
- }
- }
- return (rv == OK);
-}
-
-int APR_THREAD_FUNC ServerSupportFunction(isapi_cid *cid,
- apr_uint32_t HSE_code,
- void *buf_data,
- apr_uint32_t *buf_size,
- apr_uint32_t *data_type)
-{
- request_rec *r = cid->r;
- conn_rec *c = r->connection;
- request_rec *subreq;
-
- switch (HSE_code) {
- case HSE_REQ_SEND_URL_REDIRECT_RESP:
- /* Set the status to be returned when the HttpExtensionProc()
- * is done.
- * WARNING: Microsoft now advertises HSE_REQ_SEND_URL_REDIRECT_RESP
- * and HSE_REQ_SEND_URL as equivalant per the Jan 2000 SDK.
- * They most definately are not, even in their own samples.
- */
- apr_table_set (r->headers_out, "Location", buf_data);
- cid->r->status = cid->ecb->dwHttpStatusCode = HTTP_MOVED_TEMPORARILY;
- cid->r->status_line = ap_get_status_line(cid->r->status);
- cid->headers_set = 1;
- return 1;
-
- case HSE_REQ_SEND_URL:
- /* Soak up remaining input */
- if (r->remaining > 0) {
- char argsbuffer[HUGE_STRING_LEN];
- while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN));
- }
-
- /* Reset the method to GET */
- r->method = apr_pstrdup(r->pool, "GET");
- r->method_number = M_GET;
-
- /* Don't let anyone think there's still data */
- apr_table_unset(r->headers_in, "Content-Length");
-
- /* AV fault per PR3598 - redirected path is lost! */
- (char*)buf_data = apr_pstrdup(r->pool, (char*)buf_data);
- ap_internal_redirect((char*)buf_data, r);
- return 1;
-
- case HSE_REQ_SEND_RESPONSE_HEADER:
- {
- /* Parse them out, or die trying */
- apr_size_t statlen = 0, headlen = 0;
- apr_ssize_t ate;
- if (buf_data)
- statlen = strlen((char*) buf_data);
- if (data_type)
- headlen = strlen((char*) data_type);
- ate = send_response_header(cid, (char*) buf_data,
- (char*) data_type,
- statlen, headlen);
- if (ate < 0) {
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
- else if ((apr_size_t)ate < headlen) {
- apr_bucket_brigade *bb;
- apr_bucket *b;
- bb = apr_brigade_create(cid->r->pool, c->bucket_alloc);
- b = apr_bucket_transient_create((char*) data_type + ate,
- headlen - ate, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- ap_pass_brigade(cid->r->output_filters, bb);
- cid->response_sent = 1;
- }
- return 1;
- }
-
- case HSE_REQ_DONE_WITH_SESSION:
- /* Signal to resume the thread completing this request,
- * leave it to the pool cleanup to dispose of our mutex.
- */
- if (cid->completed) {
- (void)apr_thread_mutex_unlock(cid->completed);
- return 1;
- }
- else if (cid->dconf.log_unsupported) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction "
- "HSE_REQ_DONE_WITH_SESSION is not supported: %s",
- r->filename);
- }
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_MAP_URL_TO_PATH:
- {
- /* Map a URL to a filename */
- char *file = (char *)buf_data;
- apr_uint32_t len;
- subreq = ap_sub_req_lookup_uri(apr_pstrndup(r->pool, file, *buf_size),
- r, NULL);
-
- len = apr_cpystrn(file, subreq->filename, *buf_size) - file;
-
-
- /* IIS puts a trailing slash on directories, Apache doesn't */
- if (subreq->finfo.filetype == APR_DIR) {
- if (len < *buf_size - 1) {
- file[len++] = '\\';
- file[len] = '\0';
- }
- }
- *buf_size = len;
- return 1;
- }
-
- case HSE_REQ_GET_SSPI_INFO:
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction HSE_REQ_GET_SSPI_INFO "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_APPEND_LOG_PARAMETER:
- /* Log buf_data, of buf_size bytes, in the URI Query (cs-uri-query) field
- */
- apr_table_set(r->notes, "isapi-parameter", (char*) buf_data);
- if (cid->dconf.log_to_query) {
- if (r->args)
- r->args = apr_pstrcat(r->pool, r->args, (char*) buf_data, NULL);
- else
- r->args = apr_pstrdup(r->pool, (char*) buf_data);
- }
- if (cid->dconf.log_to_errlog)
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "ISAPI: %s: %s", cid->r->filename,
- (char*) buf_data);
- return 1;
-
- case HSE_REQ_IO_COMPLETION:
- /* Emulates a completion port... Record callback address and
- * user defined arg, we will call this after any async request
- * (e.g. transmitfile) as if the request executed async.
- * Per MS docs... HSE_REQ_IO_COMPLETION replaces any prior call
- * to HSE_REQ_IO_COMPLETION, and buf_data may be set to NULL.
- */
- if (cid->dconf.fake_async) {
- cid->completion = (PFN_HSE_IO_COMPLETION) buf_data;
- cid->completion_arg = (void *) data_type;
- return 1;
- }
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction HSE_REQ_IO_COMPLETION "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_TRANSMIT_FILE:
- {
- /* we do nothing with (tf->dwFlags & HSE_DISCONNECT_AFTER_SEND)
- */
- HSE_TF_INFO *tf = (HSE_TF_INFO*)buf_data;
- apr_uint32_t sent = 0;
- apr_ssize_t ate = 0;
- apr_status_t rv;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- apr_file_t *fd;
- apr_off_t fsize;
-
- if (!cid->dconf.fake_async && (tf->dwFlags & HSE_IO_ASYNC)) {
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction HSE_REQ_TRANSMIT_FILE "
- "as HSE_IO_ASYNC is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
-
- /* Presume the handle was opened with the CORRECT semantics
- * for TransmitFile
- */
- if ((rv = apr_os_file_put(&fd, &tf->hFile,
- APR_READ | APR_XTHREAD, r->pool))
- != APR_SUCCESS) {
- return 0;
- }
- if (tf->BytesToWrite) {
- fsize = tf->BytesToWrite;
- }
- else {
- apr_finfo_t fi;
- if (apr_file_info_get(&fi, APR_FINFO_SIZE, fd) != APR_SUCCESS) {
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
- fsize = fi.size - tf->Offset;
- }
-
- /* apr_dupfile_oshandle (&fd, tf->hFile, r->pool); */
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
-
- /* According to MS: if calling HSE_REQ_TRANSMIT_FILE with the
- * HSE_IO_SEND_HEADERS flag, then you can't otherwise call any
- * HSE_SEND_RESPONSE_HEADERS* fn, but if you don't use the flag,
- * you must have done so. They document that the pHead headers
- * option is valid only for HSE_IO_SEND_HEADERS - we are a bit
- * more flexible and assume with the flag, pHead are the
- * response headers, and without, pHead simply contains text
- * (handled after this case).
- */
- if ((tf->dwFlags & HSE_IO_SEND_HEADERS) && tf->pszStatusCode) {
- ate = send_response_header(cid, tf->pszStatusCode,
- (char*)tf->pHead,
- strlen(tf->pszStatusCode),
- tf->HeadLength);
- }
- else if (!cid->headers_set && tf->pHead && tf->HeadLength
- && *(char*)tf->pHead) {
- ate = send_response_header(cid, NULL, (char*)tf->pHead,
- 0, tf->HeadLength);
- if (ate < 0)
- {
- apr_brigade_destroy(bb);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
- }
-
- if (tf->pHead && (apr_size_t)ate < tf->HeadLength) {
- b = apr_bucket_transient_create((char*)tf->pHead + ate,
- tf->HeadLength - ate,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- sent = tf->HeadLength;
- }
-
- sent += (apr_uint32_t)fsize;
-#if APR_HAS_LARGE_FILES
- if (r->finfo.size > AP_MAX_SENDFILE) {
- /* APR_HAS_LARGE_FILES issue; must split into mutiple buckets,
- * no greater than MAX(apr_size_t), and more granular than that
- * in case the brigade code/filters attempt to read it directly.
- */
- b = apr_bucket_file_create(fd, tf->Offset, AP_MAX_SENDFILE,
- r->pool, c->bucket_alloc);
- while (fsize > AP_MAX_SENDFILE) {
- apr_bucket *bc;
- apr_bucket_copy(b, &bc);
- APR_BRIGADE_INSERT_TAIL(bb, bc);
- b->start += AP_MAX_SENDFILE;
- fsize -= AP_MAX_SENDFILE;
- }
- b->length = (apr_size_t)fsize; /* Resize just the last bucket */
- }
- else
-#endif
- b = apr_bucket_file_create(fd, tf->Offset, (apr_size_t)fsize,
- r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- if (tf->pTail && tf->TailLength) {
- sent += tf->TailLength;
- b = apr_bucket_transient_create((char*)tf->pTail,
- tf->TailLength, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- }
-
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- ap_pass_brigade(r->output_filters, bb);
- cid->response_sent = 1;
-
- /* Use tf->pfnHseIO + tf->pContext, or if NULL, then use cid->fnIOComplete
- * pass pContect to the HseIO callback.
- */
- if (tf->dwFlags & HSE_IO_ASYNC) {
- if (tf->pfnHseIO) {
- if (rv == OK) {
- tf->pfnHseIO(cid->ecb, tf->pContext,
- ERROR_SUCCESS, sent);
- }
- else {
- tf->pfnHseIO(cid->ecb, tf->pContext,
- ERROR_WRITE_FAULT, sent);
- }
- }
- else if (cid->completion) {
- if (rv == OK) {
- cid->completion(cid->ecb, cid->completion_arg,
- sent, ERROR_SUCCESS);
- }
- else {
- cid->completion(cid->ecb, cid->completion_arg,
- sent, ERROR_WRITE_FAULT);
- }
- }
- }
- return (rv == OK);
- }
-
- case HSE_REQ_REFRESH_ISAPI_ACL:
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction "
- "HSE_REQ_REFRESH_ISAPI_ACL "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_IS_KEEP_CONN:
- *((int *)buf_data) = (r->connection->keepalive == AP_CONN_KEEPALIVE);
- return 1;
-
- case HSE_REQ_ASYNC_READ_CLIENT:
- {
- apr_uint32_t read = 0;
- int res;
- if (!cid->dconf.fake_async) {
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: asynchronous I/O not supported: %s",
- r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
-
- if (r->remaining < *buf_size) {
- *buf_size = (apr_size_t)r->remaining;
- }
-
- while (read < *buf_size &&
- ((res = ap_get_client_block(r, (char*)buf_data + read,
- *buf_size - read)) > 0)) {
- read += res;
- }
-
- if ((*data_type & HSE_IO_ASYNC) && cid->completion) {
- if (res >= 0) {
- cid->completion(cid->ecb, cid->completion_arg,
- read, ERROR_SUCCESS);
- }
- else {
- cid->completion(cid->ecb, cid->completion_arg,
- read, ERROR_READ_FAULT);
- }
- }
- return (res >= 0);
- }
-
- case HSE_REQ_GET_IMPERSONATION_TOKEN: /* Added in ISAPI 4.0 */
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction "
- "HSE_REQ_GET_IMPERSONATION_TOKEN "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_MAP_URL_TO_PATH_EX:
- {
- /* Map a URL to a filename */
- HSE_URL_MAPEX_INFO *info = (HSE_URL_MAPEX_INFO*)data_type;
- char* test_uri = apr_pstrndup(r->pool, (char *)buf_data, *buf_size);
-
- subreq = ap_sub_req_lookup_uri(test_uri, r, NULL);
- info->cchMatchingURL = strlen(test_uri);
- info->cchMatchingPath = apr_cpystrn(info->lpszPath, subreq->filename,
- sizeof(info->lpszPath)) - info->lpszPath;
-
- /* Mapping started with assuming both strings matched.
- * Now roll on the path_info as a mismatch and handle
- * terminating slashes for directory matches.
- */
- if (subreq->path_info && *subreq->path_info) {
- apr_cpystrn(info->lpszPath + info->cchMatchingPath,
- subreq->path_info,
- sizeof(info->lpszPath) - info->cchMatchingPath);
- info->cchMatchingURL -= strlen(subreq->path_info);
- if (subreq->finfo.filetype == APR_DIR
- && info->cchMatchingPath < sizeof(info->lpszPath) - 1) {
- /* roll forward over path_info's first slash */
- ++info->cchMatchingPath;
- ++info->cchMatchingURL;
- }
- }
- else if (subreq->finfo.filetype == APR_DIR
- && info->cchMatchingPath < sizeof(info->lpszPath) - 1) {
- /* Add a trailing slash for directory */
- info->lpszPath[info->cchMatchingPath++] = '/';
- info->lpszPath[info->cchMatchingPath] = '\0';
- }
-
- /* If the matched isn't a file, roll match back to the prior slash */
- if (subreq->finfo.filetype == APR_NOFILE) {
- while (info->cchMatchingPath && info->cchMatchingURL) {
- if (info->lpszPath[info->cchMatchingPath - 1] == '/')
- break;
- --info->cchMatchingPath;
- --info->cchMatchingURL;
- }
- }
-
- /* Paths returned with back slashes */
- for (test_uri = info->lpszPath; *test_uri; ++test_uri)
- if (*test_uri == '/')
- *test_uri = '\\';
-
- /* is a combination of:
- * HSE_URL_FLAGS_READ 0x001 Allow read
- * HSE_URL_FLAGS_WRITE 0x002 Allow write
- * HSE_URL_FLAGS_EXECUTE 0x004 Allow execute
- * HSE_URL_FLAGS_SSL 0x008 Require SSL
- * HSE_URL_FLAGS_DONT_CACHE 0x010 Don't cache (VRoot only)
- * HSE_URL_FLAGS_NEGO_CERT 0x020 Allow client SSL cert
- * HSE_URL_FLAGS_REQUIRE_CERT 0x040 Require client SSL cert
- * HSE_URL_FLAGS_MAP_CERT 0x080 Map client SSL cert to account
- * HSE_URL_FLAGS_SSL128 0x100 Require 128-bit SSL cert
- * HSE_URL_FLAGS_SCRIPT 0x200 Allow script execution
- *
- * XxX: As everywhere, EXEC flags could use some work...
- * and this could go further with more flags, as desired.
- */
- info->dwFlags = (subreq->finfo.protection & APR_UREAD ? 0x001 : 0)
- | (subreq->finfo.protection & APR_UWRITE ? 0x002 : 0)
- | (subreq->finfo.protection & APR_UEXECUTE ? 0x204 : 0);
- return 1;
- }
-
- case HSE_REQ_ABORTIVE_CLOSE:
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction HSE_REQ_ABORTIVE_CLOSE"
- " is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_GET_CERT_INFO_EX: /* Added in ISAPI 4.0 */
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction "
- "HSE_REQ_GET_CERT_INFO_EX "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_SEND_RESPONSE_HEADER_EX: /* Added in ISAPI 4.0 */
- {
- HSE_SEND_HEADER_EX_INFO *shi = (HSE_SEND_HEADER_EX_INFO*)buf_data;
-
- /* Ignore shi->fKeepConn - we don't want the advise
- */
- apr_ssize_t ate = send_response_header(cid, shi->pszStatus,
- shi->pszHeader,
- shi->cchStatus,
- shi->cchHeader);
- if (ate < 0) {
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
- else if ((apr_size_t)ate < shi->cchHeader) {
- apr_bucket_brigade *bb;
- apr_bucket *b;
- bb = apr_brigade_create(cid->r->pool, c->bucket_alloc);
- b = apr_bucket_transient_create(shi->pszHeader + ate,
- shi->cchHeader - ate,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- ap_pass_brigade(cid->r->output_filters, bb);
- cid->response_sent = 1;
- }
- return 1;
- }
-
- case HSE_REQ_CLOSE_CONNECTION: /* Added after ISAPI 4.0 */
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction "
- "HSE_REQ_CLOSE_CONNECTION "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- case HSE_REQ_IS_CONNECTED: /* Added after ISAPI 4.0 */
- /* Returns True if client is connected c.f. MSKB Q188346
- * assuming the identical return mechanism as HSE_REQ_IS_KEEP_CONN
- */
- *((int *)buf_data) = (r->connection->aborted == 0);
- return 1;
-
- case HSE_REQ_EXTENSION_TRIGGER: /* Added after ISAPI 4.0 */
- /* Undocumented - defined by the Microsoft Jan '00 Platform SDK
- */
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction "
- "HSE_REQ_EXTENSION_TRIGGER "
- "is not supported: %s", r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
-
- default:
- if (cid->dconf.log_unsupported)
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: ServerSupportFunction (%d) not supported: "
- "%s", HSE_code, r->filename);
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
-}
-
-/**********************************************************
- *
- * ISAPI Module request invocation section
- *
- **********************************************************/
-
-apr_status_t isapi_handler (request_rec *r)
-{
- isapi_dir_conf *dconf;
- apr_table_t *e;
- apr_status_t rv;
- isapi_loaded *isa;
- isapi_cid *cid;
- const char *val;
- apr_uint32_t read;
- int res;
-
- if(strcmp(r->handler, "isapi-isa")
- && strcmp(r->handler, "isapi-handler")) {
- /* Hang on to the isapi-isa for compatibility with older docs
- * (wtf did '-isa' mean in the first place?) but introduce
- * a newer and clearer "isapi-handler" name.
- */
- return DECLINED;
- }
- dconf = ap_get_module_config(r->per_dir_config, &isapi_module);
- e = r->subprocess_env;
-
- /* Use similar restrictions as CGIs
- *
- * If this fails, it's pointless to load the isapi dll.
- */
- if (!(ap_allow_options(r) & OPT_EXECCGI)) {
- return HTTP_FORBIDDEN;
- }
- if (r->finfo.filetype == APR_NOFILE) {
- return HTTP_NOT_FOUND;
- }
- if (r->finfo.filetype != APR_REG) {
- return HTTP_FORBIDDEN;
- }
- if ((r->used_path_info == AP_REQ_REJECT_PATH_INFO) &&
- r->path_info && *r->path_info) {
- /* default to accept */
- return HTTP_NOT_FOUND;
- }
-
- if (isapi_lookup(r->pool, r->server, r, r->filename, &isa)
- != APR_SUCCESS) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- /* Set up variables */
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
- apr_table_setn(e, "UNMAPPED_REMOTE_USER", "REMOTE_USER");
- if ((val = apr_table_get(e, "HTTPS")) && strcmp(val, "on"))
- apr_table_setn(e, "SERVER_PORT_SECURE", "1");
- else
- apr_table_setn(e, "SERVER_PORT_SECURE", "0");
- apr_table_setn(e, "URL", r->uri);
-
- /* Set up connection structure and ecb,
- * NULL or zero out most fields.
- */
- cid = apr_pcalloc(r->pool, sizeof(isapi_cid));
-
- /* Fixup defaults for dconf */
- cid->dconf.read_ahead_buflen = (dconf->read_ahead_buflen == ISAPI_UNDEF)
- ? 49152 : dconf->read_ahead_buflen;
- cid->dconf.log_unsupported = (dconf->log_unsupported == ISAPI_UNDEF)
- ? 0 : dconf->log_unsupported;
- cid->dconf.log_to_errlog = (dconf->log_to_errlog == ISAPI_UNDEF)
- ? 0 : dconf->log_to_errlog;
- cid->dconf.log_to_query = (dconf->log_to_query == ISAPI_UNDEF)
- ? 1 : dconf->log_to_query;
- cid->dconf.fake_async = (dconf->fake_async == ISAPI_UNDEF)
- ? 0 : dconf->fake_async;
-
- cid->ecb = apr_pcalloc(r->pool, sizeof(EXTENSION_CONTROL_BLOCK));
- cid->ecb->ConnID = cid;
- cid->isa = isa;
- cid->r = r;
- r->status = 0;
-
- cid->ecb->cbSize = sizeof(EXTENSION_CONTROL_BLOCK);
- cid->ecb->dwVersion = isa->report_version;
- cid->ecb->dwHttpStatusCode = 0;
- strcpy(cid->ecb->lpszLogData, "");
- /* TODO: are copies really needed here?
- */
- cid->ecb->lpszMethod = (char*) r->method;
- cid->ecb->lpszQueryString = (char*) apr_table_get(e, "QUERY_STRING");
- cid->ecb->lpszPathInfo = (char*) apr_table_get(e, "PATH_INFO");
- cid->ecb->lpszPathTranslated = (char*) apr_table_get(e, "PATH_TRANSLATED");
- cid->ecb->lpszContentType = (char*) apr_table_get(e, "CONTENT_TYPE");
-
- /* Set up the callbacks */
- cid->ecb->GetServerVariable = GetServerVariable;
- cid->ecb->WriteClient = WriteClient;
- cid->ecb->ReadClient = ReadClient;
- cid->ecb->ServerSupportFunction = ServerSupportFunction;
-
- /* Set up client input */
- res = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR);
- if (res) {
- isapi_unload(isa, 0);
- return res;
- }
-
- if (ap_should_client_block(r)) {
- /* Time to start reading the appropriate amount of data,
- * and allow the administrator to tweak the number
- */
- if (r->remaining) {
- cid->ecb->cbTotalBytes = (apr_size_t)r->remaining;
- if (cid->ecb->cbTotalBytes > (apr_uint32_t)cid->dconf.read_ahead_buflen)
- cid->ecb->cbAvailable = cid->dconf.read_ahead_buflen;
- else
- cid->ecb->cbAvailable = cid->ecb->cbTotalBytes;
- }
- else
- {
- cid->ecb->cbTotalBytes = 0xffffffff;
- cid->ecb->cbAvailable = cid->dconf.read_ahead_buflen;
- }
-
- cid->ecb->lpbData = apr_pcalloc(r->pool, cid->ecb->cbAvailable + 1);
-
- read = 0;
- while (read < cid->ecb->cbAvailable &&
- ((res = ap_get_client_block(r, cid->ecb->lpbData + read,
- cid->ecb->cbAvailable - read)) > 0)) {
- read += res;
- }
-
- if (res < 0) {
- isapi_unload(isa, 0);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* Although it's not to spec, IIS seems to null-terminate
- * its lpdData string. So we will too.
- */
- if (res == 0)
- cid->ecb->cbAvailable = cid->ecb->cbTotalBytes = read;
- else
- cid->ecb->cbAvailable = read;
- cid->ecb->lpbData[read] = '\0';
- }
- else {
- cid->ecb->cbTotalBytes = 0;
- cid->ecb->cbAvailable = 0;
- cid->ecb->lpbData = NULL;
- }
-
- /* To emulate async behavior...
- *
- * We create a cid->completed mutex and lock on it so that the
- * app can believe is it running async.
- *
- * This request completes upon a notification through
- * ServerSupportFunction(HSE_REQ_DONE_WITH_SESSION), which
- * unlocks this mutex. If the HttpExtensionProc() returns
- * HSE_STATUS_PENDING, we will attempt to gain this lock again
- * which may *only* happen once HSE_REQ_DONE_WITH_SESSION has
- * unlocked the mutex.
- */
- if (cid->dconf.fake_async) {
- rv = apr_thread_mutex_create(&cid->completed,
- APR_THREAD_MUTEX_UNNESTED,
- r->pool);
- if (cid->completed && (rv == APR_SUCCESS)) {
- rv = apr_thread_mutex_lock(cid->completed);
- }
-
- if (!cid->completed || (rv != APR_SUCCESS)) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: Failed to create completion mutex");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- /* All right... try and run the sucker */
- rv = (*isa->HttpExtensionProc)(cid->ecb);
-
- /* Check for a log message - and log it */
- if (cid->ecb->lpszLogData && *cid->ecb->lpszLogData)
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "ISAPI: %s: %s", r->filename, cid->ecb->lpszLogData);
-
- switch(rv) {
- case 0: /* Strange, but MS isapi accepts this as success */
- case HSE_STATUS_SUCCESS:
- case HSE_STATUS_SUCCESS_AND_KEEP_CONN:
- /* Ignore the keepalive stuff; Apache handles it just fine without
- * the ISAPI Handler's "advice".
- * Per Microsoft: "In IIS versions 4.0 and later, the return
- * values HSE_STATUS_SUCCESS and HSE_STATUS_SUCCESS_AND_KEEP_CONN
- * are functionally identical: Keep-Alive connections are
- * maintained, if supported by the client."
- * ... so we were pat all this time
- */
- break;
-
- case HSE_STATUS_PENDING:
- /* emulating async behavior...
- */
- if (cid->completed) {
- /* The completion port was locked prior to invoking
- * HttpExtensionProc(). Once we can regain the lock,
- * when ServerSupportFunction(HSE_REQ_DONE_WITH_SESSION)
- * is called by the extension to release the lock,
- * we may finally destroy the request.
- */
- (void)apr_thread_mutex_lock(cid->completed);
- break;
- }
- else if (cid->dconf.log_unsupported) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: asynch I/O result HSE_STATUS_PENDING "
- "from HttpExtensionProc() is not supported: %s",
- r->filename);
- r->status = HTTP_INTERNAL_SERVER_ERROR;
- }
- break;
-
- case HSE_STATUS_ERROR:
- /* end response if we have yet to do so.
- */
- r->status = HTTP_INTERNAL_SERVER_ERROR;
- break;
-
- default:
- /* TODO: log unrecognized retval for debugging
- */
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "ISAPI: return code %d from HttpExtensionProc() "
- "was not not recognized", rv);
- r->status = HTTP_INTERNAL_SERVER_ERROR;
- break;
- }
-
- /* Flush the response now, including headers-only responses */
- if (cid->headers_set) {
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- apr_status_t rv;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- rv = ap_pass_brigade(r->output_filters, bb);
- cid->response_sent = 1;
-
- return OK; /* NOT r->status or cid->r->status, even if it has changed. */
- }
-
- /* As the client returned no error, and if we did not error out
- * ourselves, trust dwHttpStatusCode to say something relevant.
- */
- if (!ap_is_HTTP_SERVER_ERROR(r->status) && cid->ecb->dwHttpStatusCode) {
- r->status = cid->ecb->dwHttpStatusCode;
- }
-
- /* For all missing-response situations simply return the status.
- * and let the core deal respond to the client.
- */
- return r->status;
-}
-
-/**********************************************************
- *
- * ISAPI Module Setup Hooks
- *
- **********************************************************/
-
-static int isapi_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- apr_status_t rv;
-
- apr_pool_create_ex(&loaded.pool, pconf, NULL, NULL);
- if (!loaded.pool) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EGENERAL, NULL,
- "ISAPI: could not create the isapi cache pool");
- return APR_EGENERAL;
- }
-
- loaded.hash = apr_hash_make(loaded.pool);
- if (!loaded.hash) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "ISAPI: Failed to create module cache");
- return APR_EGENERAL;
- }
-
- rv = apr_thread_mutex_create(&loaded.lock, APR_THREAD_MUTEX_DEFAULT,
- loaded.pool);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, rv, 0, NULL,
- "ISAPI: Failed to create module cache lock");
- return rv;
- }
- return OK;
-}
-
-static void isapi_hooks(apr_pool_t *cont)
-{
- ap_hook_pre_config(isapi_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_handler(isapi_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA isapi_module = {
- STANDARD20_MODULE_STUFF,
- create_isapi_dir_config, /* create per-dir config */
- merge_isapi_dir_configs, /* merge per-dir config */
- NULL, /* server config */
- NULL, /* merge server config */
- isapi_cmds, /* command apr_table_t */
- isapi_hooks /* register hooks */
-};
diff --git a/modules/arch/win32/mod_isapi.dsp b/modules/arch/win32/mod_isapi.dsp
deleted file mode 100644
index 3288a4f350..0000000000
--- a/modules/arch/win32/mod_isapi.dsp
+++ /dev/null
@@ -1,132 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_isapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_isapi - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_isapi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_isapi.mak" CFG="mod_isapi - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_isapi - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_isapi - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_isapi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_isapi_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi.so
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_isapi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_isapi_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi.so
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_isapi - Win32 Release"
-# Name "mod_isapi - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_isapi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_isapi.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_isapi.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_isapi - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_isapi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../../build/win32/win32ver.awk mod_isapi.so "isapi_module for Apache" ../../../include/ap_release.h > .\mod_isapi.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_isapi - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_isapi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../../build/win32/win32ver.awk mod_isapi.so "isapi_module for Apache" ../../../include/ap_release.h > .\mod_isapi.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/arch/win32/mod_isapi.h b/modules/arch/win32/mod_isapi.h
deleted file mode 100644
index 48563ded3b..0000000000
--- a/modules/arch/win32/mod_isapi.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_ISAPI_H
-#define MOD_ISAPI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The Version Information storage passed to a module on startup
- * via the GetExtensionVersion() entry point.
- */
-typedef struct HSE_VERSION_INFO {
- apr_uint32_t dwExtensionVersion;
- char lpszExtensionDesc[256];
-} HSE_VERSION_INFO;
-
-/* The startup entry point that must be exported by every ISAPI handler
- */
-int APR_THREAD_FUNC GetExtensionVersion(HSE_VERSION_INFO *ver_info);
-typedef int (APR_THREAD_FUNC *PFN_GETEXTENSIONVERSION)(HSE_VERSION_INFO *ver_info);
-
-/* Our internal 'HCONN' representation, always opaque to the user.
- */
-typedef struct isapi_cid isapi_cid;
-typedef struct isapi_cid *HCONN;
-
-/* Prototypes of the essential functions exposed by mod_isapi
- * for the module to communicate with Apache.
- */
-typedef int (APR_THREAD_FUNC
- *PFN_GETSERVERVARIABLE)(HCONN cid,
- char *variable_name,
- void *buf_data,
- apr_uint32_t *buf_size);
-typedef int (APR_THREAD_FUNC
- *PFN_WRITECLIENT)(HCONN cid,
- void *buf_data,
- apr_uint32_t *buf_size,
- apr_uint32_t flags);
-typedef int (APR_THREAD_FUNC
- *PFN_READCLIENT)(HCONN cid,
- void *buf_data,
- apr_uint32_t *buf_size);
-typedef int (APR_THREAD_FUNC
- *PFN_SERVERSUPPORTFUNCTION)(HCONN cid,
- apr_uint32_t HSE_code,
- void *buf_data,
- apr_uint32_t *buf_size,
- apr_uint32_t *flags);
-
-/* The ecb structure is passed on each invocation of the module
- */
-typedef struct EXTENSION_CONTROL_BLOCK {
- apr_uint32_t cbSize;
- apr_uint32_t dwVersion;
- HCONN ConnID;
- apr_uint32_t dwHttpStatusCode;
- char lpszLogData[80];
- char *lpszMethod;
- char *lpszQueryString;
- char *lpszPathInfo;
- char *lpszPathTranslated;
- apr_uint32_t cbTotalBytes;
- apr_uint32_t cbAvailable;
- unsigned char *lpbData;
- char *lpszContentType;
-
- PFN_GETSERVERVARIABLE GetServerVariable;
- PFN_WRITECLIENT WriteClient;
- PFN_READCLIENT ReadClient;
- PFN_SERVERSUPPORTFUNCTION ServerSupportFunction;
-} EXTENSION_CONTROL_BLOCK;
-
-/* Status/Headers structure to pass to HSE_SEND_HEADER_EX,
- * an MS extension to ServerSupportFunction
- */
-typedef struct HSE_SEND_HEADER_EX_INFO {
- const char * pszStatus; /* HTTP status text, such as "200 OK" */
- const char * pszHeader; /* HTTP header lines text, such as
- * "Content-type: text/plain\r\n"
- * "Content-Language: en\r\n"
- * Note that (in spite of cchFoo lengths below)
- * NULL characters will interfere in headers.
- */
- apr_uint32_t cchStatus; /* length of pszStatus text */
- apr_uint32_t cchHeader; /* length of pszHeader text */
- int fKeepConn; /* Ignored: used to set keep-alive status,
- * but Apache follows the client's negotiated
- * HTTP contract to decide.
- */
-} HSE_SEND_HEADER_EX_INFO;
-
-/* Our only 'supported' MS extended flag bit for TransmitFile,
- * HSE_IO_SEND_HEADERS indicates that Status+Headers are present
- * in the pszStatusCode member of the HSE_TF_INFO structure.
- */
-#define HSE_IO_SEND_HEADERS 8
-
-/* The remaining flags are MS extended flag bits that bear little
- * relation to Apache; the rules that the Apache server obeys follow
- * its own design and HTTP protocol filter rules.
- *
- * We do not support async, however, we fake it. If HSE_IO_SYNC is
- * not passed, and a completion context was defined, we will invoke the
- * completion function immediately following the transfer, and then
- * return to the caller. If HSE_IO_SYNC is passed, there is no call
- * neccessary to the completion context.
- */
-#define HSE_IO_SYNC 1
-#define HSE_IO_ASYNC 2
-#define HSE_IO_DISCONNECT_AFTER_SEND 4
-#define HSE_IO_NODELAY 4096
-
-/* The Completion function prototype. This callback may be fixed with
- * the HSE_REQ_IO_COMPLETION ServerSupportFunction call, or overriden
- * for the HSE_REQ_TRANSMIT_FILE call.
- */
-typedef void (APR_THREAD_FUNC *PFN_HSE_IO_COMPLETION)
- (EXTENSION_CONTROL_BLOCK *ecb,
- void *ctxt,
- apr_uint32_t cbIO,
- apr_uint32_t dwError);
-
-/* TransmitFile structure to pass to HSE_REQ_TRANSMIT_FILE, an MS extension
- */
-typedef struct HSE_TF_INFO {
- PFN_HSE_IO_COMPLETION pfnHseIO; /* Overrides the default setting of
- * HSE_REQ_IO_COMPLETION if not NULL
- */
- void *pContext;
- apr_os_file_t hFile; /* HANDLE/fd to transmit */
- const char *pszStatusCode; /* Ignored if HSE_IO_SEND_HEADERS is
- * not set. Includes HTTP status text
- * plus header text lines, such as
- * "200 OK\r\n"
- * "Content-type: text/plain\r\n"
- */
- apr_uint32_t BytesToWrite; /* 0 is write-all */
- apr_uint32_t Offset; /* File Offset */
- void *pHead; /* Prefix with *pHead body text */
- apr_uint32_t HeadLength; /* Length of *pHead body text */
- void *pTail; /* Prefix with *pTail body text */
- apr_uint32_t TailLength; /* Length of *pTail body text */
- apr_uint32_t dwFlags; /* bit flags described above */
-} HSE_TF_INFO;
-
-typedef struct HSE_URL_MAPEX_INFO {
- char lpszPath[260];
- apr_uint32_t dwFlags;
- apr_uint32_t cchMatchingPath;
- apr_uint32_t cchMatchingURL;
- apr_uint32_t dwReserved1;
- apr_uint32_t dwReserved2;
-} HSE_URL_MAPEX_INFO;
-
-/* Original ISAPI ServerSupportFunction() HSE_code methods */
-#define HSE_REQ_SEND_URL_REDIRECT_RESP 1
-#define HSE_REQ_SEND_URL 2
-#define HSE_REQ_SEND_RESPONSE_HEADER 3
-#define HSE_REQ_DONE_WITH_SESSION 4
-
-/* MS Extented methods to ISAPI ServerSupportFunction() HSE_code */
-#define HSE_REQ_MAP_URL_TO_PATH 1001 /* Emulated */
-#define HSE_REQ_GET_SSPI_INFO 1002 /* Not Supported */
-#define HSE_APPEND_LOG_PARAMETER 1003 /* Supported */
-#define HSE_REQ_IO_COMPLETION 1005 /* Emulated */
-#define HSE_REQ_TRANSMIT_FILE 1006 /* Async Emulated */
-#define HSE_REQ_REFRESH_ISAPI_ACL 1007 /* Not Supported */
-#define HSE_REQ_IS_KEEP_CONN 1008 /* Supported */
-#define HSE_REQ_ASYNC_READ_CLIENT 1010 /* Emulated */
-/* Added with ISAPI 4.0 */
-#define HSE_REQ_GET_IMPERSONATION_TOKEN 1011 /* Not Supported */
-#define HSE_REQ_MAP_URL_TO_PATH_EX 1012 /* Emulated */
-#define HSE_REQ_ABORTIVE_CLOSE 1014 /* Ignored */
-/* Added after ISAPI 4.0 in IIS 5.0 */
-#define HSE_REQ_GET_CERT_INFO_EX 1015 /* Not Supported */
-#define HSE_REQ_SEND_RESPONSE_HEADER_EX 1016 /* Supported (no nulls!) */
-#define HSE_REQ_CLOSE_CONNECTION 1017 /* Ignored */
-#define HSE_REQ_IS_CONNECTED 1018 /* Supported */
-#define HSE_REQ_EXTENSION_TRIGGER 1020 /* Not Supported */
-
-/* The request entry point that must be exported by every ISAPI handler
- */
-apr_uint32_t APR_THREAD_FUNC HttpExtensionProc(EXTENSION_CONTROL_BLOCK *ecb);
-typedef apr_uint32_t (APR_THREAD_FUNC
- *PFN_HTTPEXTENSIONPROC)(EXTENSION_CONTROL_BLOCK *ecb);
-
-/* Allowable return values from HttpExtensionProc (apparently 0 is also
- * accepted by MS IIS, and we will respect it as Success.)
- * If the HttpExtensionProc returns HSE_STATUS_PENDING, we will create
- * a wait mutex and lock on it, until HSE_REQ_DONE_WITH_SESSION is called.
- */
-#define HSE_STATUS_SUCCESS 1
-#define HSE_STATUS_SUCCESS_AND_KEEP_CONN 2 /* 1 vs 2 Ignored, we choose */
-#define HSE_STATUS_PENDING 3 /* Emulated (thread lock) */
-#define HSE_STATUS_ERROR 4
-
-/* Anticipated error code for common faults within mod_isapi itself
- */
-#ifndef ERROR_INSUFFICIENT_BUFFER
-#define ERROR_INSUFFICIENT_BUFFER ENOBUFS
-#endif
-#ifndef ERROR_INVALID_INDEX
-#define ERROR_INVALID_INDEX EINVAL
-#endif
-#ifndef ERROR_INVALID_PARAMETER
-#define ERROR_INVALID_PARAMETER EINVAL
-#endif
-#ifndef ERROR_READ_FAULT
-#define ERROR_READ_FAULT EIO
-#endif
-#ifndef ERROR_WRITE_FAULT
-#define ERROR_WRITE_FAULT EIO
-#endif
-#ifndef ERROR_SUCCESS
-#define ERROR_SUCCESS 0
-#endif
-
-/* Valid flags passed with TerminateExtension()
- */
-#define HSE_TERM_MUST_UNLOAD 1
-#define HSE_TERM_ADVISORY_UNLOAD 2
-
-/* The shutdown entry point óptionally exported by an ISAPI handler, passed
- * HSE_TERM_MUST_UNLOAD or HSE_TERM_ADVISORY_UNLOAD. The module may return
- * if passed HSE_TERM_ADVISORY_UNLOAD, and the module will remain loaded.
- * If the module returns 1 to HSE_TERM_ADVISORY_UNLOAD it is immediately
- * unloaded. If the module is passed HSE_TERM_MUST_UNLOAD, its return value
- * is ignored.
- */
-int APR_THREAD_FUNC TerminateExtension(apr_uint32_t flags);
-typedef int (APR_THREAD_FUNC *PFN_TERMINATEEXTENSION)(apr_uint32_t flags);
-
-/* Module may return 0 if passed HSE_TERM_ADVISORY_UNLOAD, and the module
- * will remain loaded, or 1 if it consents to being unloaded. If the module
- * is passed HSE_TERM_MUST_UNLOAD, it's return value is ignored.
- */
-#define HSE_TERM_MUST_UNLOAD 1
-#define HSE_TERM_ADVISORY_UNLOAD 2
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !MOD_ISAPI_H */
diff --git a/modules/arch/win32/mod_win32.c b/modules/arch/win32/mod_win32.c
deleted file mode 100644
index b7edf65bfb..0000000000
--- a/modules/arch/win32/mod_win32.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef WIN32
-
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-#include "mod_cgi.h"
-#include "apr_lib.h"
-#include "ap_regkey.h"
-
-extern OSVERSIONINFO osver; /* hiding in mpm_winnt.c */
-static int win_nt;
-
-/*
- * CGI Script stuff for Win32...
- */
-typedef enum { eFileTypeUNKNOWN, eFileTypeBIN, eFileTypeEXE16, eFileTypeEXE32,
- eFileTypeSCRIPT } file_type_e;
-typedef enum { INTERPRETER_SOURCE_UNSET, INTERPRETER_SOURCE_REGISTRY_STRICT,
- INTERPRETER_SOURCE_REGISTRY, INTERPRETER_SOURCE_SHEBANG
- } interpreter_source_e;
-AP_DECLARE(file_type_e) ap_get_win32_interpreter(const request_rec *,
- char **interpreter,
- char **arguments);
-
-module AP_MODULE_DECLARE_DATA win32_module;
-
-typedef struct {
- /* Where to find interpreter to run scripts */
- interpreter_source_e script_interpreter_source;
-} win32_dir_conf;
-
-static void *create_win32_dir_config(apr_pool_t *p, char *dir)
-{
- win32_dir_conf *conf;
- conf = (win32_dir_conf*)apr_palloc(p, sizeof(win32_dir_conf));
- conf->script_interpreter_source = INTERPRETER_SOURCE_UNSET;
- return conf;
-}
-
-static void *merge_win32_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- win32_dir_conf *new;
- win32_dir_conf *base = (win32_dir_conf *) basev;
- win32_dir_conf *add = (win32_dir_conf *) addv;
-
- new = (win32_dir_conf *) apr_pcalloc(p, sizeof(win32_dir_conf));
- new->script_interpreter_source = (add->script_interpreter_source
- != INTERPRETER_SOURCE_UNSET)
- ? add->script_interpreter_source
- : base->script_interpreter_source;
- return new;
-}
-
-static const char *set_interpreter_source(cmd_parms *cmd, void *dv,
- char *arg)
-{
- win32_dir_conf *d = (win32_dir_conf *)dv;
- if (!strcasecmp(arg, "registry")) {
- d->script_interpreter_source = INTERPRETER_SOURCE_REGISTRY;
- }
- else if (!strcasecmp(arg, "registry-strict")) {
- d->script_interpreter_source = INTERPRETER_SOURCE_REGISTRY_STRICT;
- }
- else if (!strcasecmp(arg, "script")) {
- d->script_interpreter_source = INTERPRETER_SOURCE_SHEBANG;
- }
- else {
- return apr_pstrcat(cmd->temp_pool, "ScriptInterpreterSource \"", arg,
- "\" must be \"registry\", \"registry-strict\" or "
- "\"script\"", NULL);
- }
- return NULL;
-}
-
-/* XXX: prep_string should translate the string into unicode,
- * such that it is compatible with whatever codepage the client
- * will read characters 80-ff. For the moment, use the unicode
- * values 0080-00ff. This isn't trivial, since the code page
- * varies between msdos and Windows applications.
- * For subsystem 2 [GUI] the default is the system Ansi CP.
- * For subsystem 3 [CLI] the default is the system OEM CP.
- */
-static void prep_string(const char ** str, apr_pool_t *p)
-{
- const char *ch = *str;
- char *ch2;
- int widen = 0;
-
- if (!ch) {
- return;
- }
- while (*ch) {
- if (*(ch++) & 0x80) {
- ++widen;
- }
- }
- if (!widen) {
- return;
- }
- widen += (ch - *str) + 1;
- ch = *str;
- *str = ch2 = apr_palloc(p, widen);
- while (*ch) {
- if (*ch & 0x80) {
- /* sign extension won't hurt us here */
- *(ch2++) = 0xC0 | ((*ch >> 6) & 0x03);
- *(ch2++) = 0x80 | (*(ch++) & 0x3f);
- }
- else {
- *(ch2++) = *(ch++);
- }
- }
- *(ch2++) = '\0';
-}
-
-/* Somewhat more exciting ... figure out where the registry has stashed the
- * ExecCGI or Open command - it may be nested one level deep (or more???)
- */
-static char* get_interpreter_from_win32_registry(apr_pool_t *p,
- const char* ext,
- int strict)
-{
- apr_status_t rv;
- ap_regkey_t *name_key = NULL;
- ap_regkey_t *type_key;
- ap_regkey_t *key;
- char execcgi_path[] = "SHELL\\EXECCGI\\COMMAND";
- char execopen_path[] = "SHELL\\OPEN\\COMMAND";
- char *type_name;
- char *buffer;
-
- if (!ext) {
- return NULL;
- }
- /*
- * Future optimization:
- * When the registry is successfully searched, store the strings for
- * interpreter and arguments in an ext hash to speed up subsequent look-ups
- */
-
- /* Open the key associated with the script filetype extension */
- rv = ap_regkey_open(&type_key, AP_REGKEY_CLASSES_ROOT, ext, APR_READ, p);
-
- if (rv != APR_SUCCESS) {
- return NULL;
- }
-
- /* Retrieve the name of the script filetype extension */
- rv = ap_regkey_value_get(&type_name, type_key, "", p);
-
- if (rv == APR_SUCCESS && type_name[0]) {
- /* Open the key associated with the script filetype extension */
- rv = ap_regkey_open(&name_key, AP_REGKEY_CLASSES_ROOT, type_name,
- APR_READ, p);
- }
-
- /* Open the key for the script command path by:
- *
- * 1) the 'named' filetype key for ExecCGI/Command
- * 2) the extension's type key for ExecCGI/Command
- *
- * and if the strict arg is false, then continue trying:
- *
- * 3) the 'named' filetype key for Open/Command
- * 4) the extension's type key for Open/Command
- */
-
- if (name_key) {
- if ((rv = ap_regkey_open(&key, name_key, execcgi_path, APR_READ, p))
- == APR_SUCCESS) {
- rv = ap_regkey_value_get(&buffer, key, "", p);
- ap_regkey_close(name_key);
- }
- }
-
- if (!name_key || (rv != APR_SUCCESS)) {
- if ((rv = ap_regkey_open(&key, type_key, execcgi_path, APR_READ, p))
- == APR_SUCCESS) {
- rv = ap_regkey_value_get(&buffer, key, "", p);
- ap_regkey_close(type_key);
- }
- }
-
- if (!strict && name_key && (rv != APR_SUCCESS)) {
- if ((rv = ap_regkey_open(&key, name_key, execopen_path, APR_READ, p))
- == APR_SUCCESS) {
- rv = ap_regkey_value_get(&buffer, key, "", p);
- ap_regkey_close(name_key);
- }
- }
-
- if (!strict && (rv != APR_SUCCESS)) {
- if ((rv = ap_regkey_open(&key, type_key, execopen_path, APR_READ, p))
- == APR_SUCCESS) {
- rv = ap_regkey_value_get(&buffer, key, "", p);
- ap_regkey_close(type_key);
- }
- }
-
- if (name_key) {
- ap_regkey_close(name_key);
- }
-
- ap_regkey_close(type_key);
-
- if (rv != APR_SUCCESS || !buffer[0]) {
- return NULL;
- }
-
- return buffer;
-}
-
-
-static apr_array_header_t *split_argv(apr_pool_t *p, const char *interp,
- const char *cgiprg, const char *cgiargs)
-{
- apr_array_header_t *args = apr_array_make(p, 8, sizeof(char*));
- char *d = apr_palloc(p, strlen(interp)+1);
- const char *ch = interp;
- const char **arg;
- int prgtaken = 0;
- int argtaken = 0;
- int inquo;
- int sl;
-
- while (*ch) {
- /* Skip on through Deep Space */
- if (apr_isspace(*ch)) {
- ++ch; continue;
- }
- /* One Arg */
- if (((*ch == '$') || (*ch == '%')) && (*(ch + 1) == '*')) {
- const char *cgiarg = cgiargs;
- argtaken = 1;
- for (;;) {
- char *w = ap_getword_nulls(p, &cgiarg, '+');
- if (!*w) {
- break;
- }
- ap_unescape_url(w);
- if (win_nt) {
- prep_string(&w, p);
- }
- arg = (const char**)apr_array_push(args);
- *arg = ap_escape_shell_cmd(p, w);
- }
- ch += 2;
- continue;
- }
- if (((*ch == '$') || (*ch == '%')) && (*(ch + 1) == '1')) {
- /* Todo: Make short name!!! */
- prgtaken = 1;
- arg = (const char**)apr_array_push(args);
- if (*ch == '%') {
- char *repl = apr_pstrdup(p, cgiprg);
- *arg = repl;
- while ((repl = strchr(repl, '/'))) {
- *repl++ = '\\';
- }
- }
- else {
- *arg = cgiprg;
- }
- ch += 2;
- continue;
- }
- if ((*ch == '\"') && ((*(ch + 1) == '$')
- || (*(ch + 1) == '%')) && (*(ch + 2) == '1')
- && (*(ch + 3) == '\"')) {
- prgtaken = 1;
- arg = (const char**)apr_array_push(args);
- if (*(ch + 1) == '%') {
- char *repl = apr_pstrdup(p, cgiprg);
- *arg = repl;
- while ((repl = strchr(repl, '/'))) {
- *repl++ = '\\';
- }
- }
- else {
- *arg = cgiprg;
- }
- ch += 4;
- continue;
- }
- arg = (const char**)apr_array_push(args);
- *arg = d;
- inquo = 0;
- while (*ch) {
- if (apr_isspace(*ch) && !inquo) {
- ++ch; break;
- }
- /* Get 'em backslashes */
- for (sl = 0; *ch == '\\'; ++sl) {
- *d++ = *ch++;
- }
- if (sl & 1) {
- /* last unmatched '\' + '"' sequence is a '"' */
- if (*ch == '\"') {
- *(d - 1) = *ch++;
- }
- continue;
- }
- if (*ch == '\"') {
- /* '""' sequence within quotes is a '"' */
- if (*++ch == '\"' && inquo) {
- *d++ = *ch++; continue;
- }
- /* Flip quote state */
- inquo = !inquo;
- if (apr_isspace(*ch) && !inquo) {
- ++ch; break;
- }
- /* All other '"'s are Munched */
- continue;
- }
- /* Anything else is, well, something else */
- *d++ = *ch++;
- }
- /* Term that arg, already pushed on args */
- *d++ = '\0';
- }
-
- if (!prgtaken) {
- arg = (const char**)apr_array_push(args);
- *arg = cgiprg;
- }
-
- if (!argtaken) {
- const char *cgiarg = cgiargs;
- for (;;) {
- char *w = ap_getword_nulls(p, &cgiarg, '+');
- if (!*w) {
- break;
- }
- ap_unescape_url(w);
- if (win_nt) {
- prep_string(&w, p);
- }
- arg = (const char**)apr_array_push(args);
- *arg = ap_escape_shell_cmd(p, w);
- }
- }
-
- arg = (const char**)apr_array_push(args);
- *arg = NULL;
-
- return args;
-}
-
-
-static apr_status_t ap_cgi_build_command(const char **cmd, const char ***argv,
- request_rec *r, apr_pool_t *p,
- cgi_exec_info_t *e_info)
-{
- const apr_array_header_t *elts_arr = apr_table_elts(r->subprocess_env);
- const apr_table_entry_t *elts = (apr_table_entry_t *) elts_arr->elts;
- const char *ext = NULL;
- const char *interpreter = NULL;
- win32_dir_conf *d;
- apr_file_t *fh;
- const char *args = "";
- int i;
-
- d = (win32_dir_conf *)ap_get_module_config(r->per_dir_config,
- &win32_module);
-
- if (e_info->cmd_type) {
- /* We have to consider that the client gets any QUERY_ARGS
- * without any charset interpretation, use prep_string to
- * create a string of the literal QUERY_ARGS bytes.
- */
- *cmd = r->filename;
- if (r->args && r->args[0] && !ap_strchr_c(r->args, '=')) {
- args = r->args;
- }
- }
- /* Handle the complete file name, we DON'T want to follow suexec, since
- * an unrooted command is as predictable as shooting craps in Win32.
- * Notice that unlike most mime extension parsing, we have to use the
- * win32 parsing here, therefore the final extension is the only one
- * we will consider.
- */
- ext = strrchr(apr_filepath_name_get(*cmd), '.');
-
- /* If the file has an extension and it is not .com and not .exe and
- * we've been instructed to search the registry, then do so.
- * Let apr_proc_create do all of the .bat/.cmd dirty work.
- */
- if (ext && (!strcasecmp(ext,".exe") || !strcasecmp(ext,".com")
- || !strcasecmp(ext,".bat") || !strcasecmp(ext,".cmd"))) {
- interpreter = "";
- }
- if (!interpreter && ext
- && (d->script_interpreter_source
- == INTERPRETER_SOURCE_REGISTRY
- || d->script_interpreter_source
- == INTERPRETER_SOURCE_REGISTRY_STRICT)) {
- /* Check the registry */
- int strict = (d->script_interpreter_source
- == INTERPRETER_SOURCE_REGISTRY_STRICT);
- interpreter = get_interpreter_from_win32_registry(r->pool, ext,
- strict);
- if (interpreter && e_info->cmd_type != APR_SHELLCMD) {
- e_info->cmd_type = APR_PROGRAM_PATH;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- strict ? "No ExecCGI verb found for files of type '%s'."
- : "No ExecCGI or Open verb found for files of type '%s'.",
- ext);
- }
- }
- if (!interpreter) {
- apr_status_t rv;
- char buffer[1024];
- apr_size_t bytes = sizeof(buffer);
- apr_size_t i;
-
- /* Need to peek into the file figure out what it really is...
- * ### aught to go back and build a cache for this one of these days.
- */
- if ((rv = apr_file_open(&fh, *cmd, APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, r->pool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "Failed to open cgi file %s for testing", *cmd);
- return rv;
- }
- if ((rv = apr_file_read(fh, buffer, &bytes)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "Failed to read cgi file %s for testing", *cmd);
- return rv;
- }
- apr_file_close(fh);
-
- /* Some twisted character [no pun intended] at MS decided that a
- * zero width joiner as the lead wide character would be ideal for
- * describing Unicode text files. This was further convoluted to
- * another MSism that the same character mapped into utf-8, EF BB BF
- * would signify utf-8 text files.
- *
- * Since MS configuration files are all protecting utf-8 encoded
- * Unicode path, file and resource names, we already have the correct
- * WinNT encoding. But at least eat the stupid three bytes up front.
- *
- * ### A more thorough check would also allow UNICODE text in buf, and
- * convert it to UTF-8 for invoking unicode scripts. Those are few
- * and far between, so leave that code an enterprising soul with a need.
- */
- if ((bytes >= 3) && memcmp(buffer, "\xEF\xBB\xBF", 3) == 0) {
- memmove(buffer, buffer + 3, bytes -= 3);
- }
-
- /* Script or executable, that is the question... */
- if ((bytes >= 2) && (buffer[0] == '#') && (buffer[1] == '!')) {
- /* Assuming file is a script since it starts with a shebang */
- for (i = 2; i < bytes; i++) {
- if ((buffer[i] == '\r') || (buffer[i] == '\n')) {
- buffer[i] = '\0';
- break;
- }
- }
- if (i < bytes) {
- interpreter = buffer + 2;
- while (apr_isspace(*interpreter)) {
- ++interpreter;
- }
- if (e_info->cmd_type != APR_SHELLCMD) {
- e_info->cmd_type = APR_PROGRAM_PATH;
- }
- }
- }
- else if (bytes >= sizeof(IMAGE_DOS_HEADER)) {
- /* Not a script, is it an executable? */
- IMAGE_DOS_HEADER *hdr = (IMAGE_DOS_HEADER*)buffer;
- if (hdr->e_magic == IMAGE_DOS_SIGNATURE) {
- if (hdr->e_lfarlc < 0x40) {
- /* Ought to invoke this 16 bit exe by a stub, (cmd /c?) */
- interpreter = "";
- }
- else {
- interpreter = "";
- }
- }
- }
- }
- if (!interpreter) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s is not executable; ensure interpreted scripts have "
- "\"#!\" first line", *cmd);
- return APR_EBADF;
- }
-
- *argv = (const char **)(split_argv(p, interpreter, *cmd,
- args)->elts);
- *cmd = (*argv)[0];
-
- e_info->detached = 1;
-
- /* XXX: Must fix r->subprocess_env to follow utf-8 conventions from
- * the client's octets so that win32 apr_proc_create is happy.
- * The -best- way is to determine if the .exe is unicode aware
- * (using 0x0080-0x00ff) or is linked as a command or windows
- * application (following the OEM or Ansi code page in effect.)
- */
- for (i = 0; i < elts_arr->nelts; ++i) {
- if (win_nt && elts[i].key && *elts[i].key
- && (strncmp(elts[i].key, "HTTP_", 5) == 0
- || strncmp(elts[i].key, "SERVER_", 7) == 0
- || strncmp(elts[i].key, "REQUEST_", 8) == 0
- || strcmp(elts[i].key, "QUERY_STRING") == 0)) {
- prep_string((const char**) &elts[i].val, r->pool);
- }
- }
- return APR_SUCCESS;
-}
-
-static int win32_pre_config(apr_pool_t *pconf_, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- win_nt = (osver.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS);
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- APR_REGISTER_OPTIONAL_FN(ap_cgi_build_command);
- ap_hook_pre_config(win32_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-static const command_rec win32_cmds[] = {
-AP_INIT_TAKE1("ScriptInterpreterSource", set_interpreter_source, NULL,
- OR_FILEINFO,
- "Where to find interpreter to run Win32 scripts "
- "(Registry or script shebang line)"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA win32_module = {
- STANDARD20_MODULE_STUFF,
- create_win32_dir_config, /* create per-dir config */
- merge_win32_dir_configs, /* merge per-dir config */
- NULL, /* server config */
- NULL, /* merge server config */
- win32_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
-
-#endif /* defined WIN32 */
diff --git a/modules/cache/.cvsignore b/modules/cache/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/cache/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/cache/.indent.pro b/modules/cache/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/cache/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/cache/Makefile.in b/modules/cache/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/cache/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/cache/config.m4 b/modules/cache/config.m4
deleted file mode 100644
index cdec8c56eb..0000000000
--- a/modules/cache/config.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(cache)
-
-APACHE_MODULE(file_cache, File cache, , , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/cache/mod_file_cache.c b/modules/cache/mod_file_cache.c
deleted file mode 100644
index 269c6dda4e..0000000000
--- a/modules/cache/mod_file_cache.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Author: mod_file_cache by Bill Stoddard <stoddard apache.org>
- * Based on mod_mmap_static by Dean Gaudet <dgaudet arctic.org>
- *
- * v0.01: initial implementation
- */
-
-/*
- Documentation:
-
- Some sites have a set of static files that are really busy, and
- change infrequently (or even on a regular schedule). Save time
- by caching open handles to these files. This module, unlike
- mod_mmap_static, caches open file handles, not file content.
- On systems (like Windows) with heavy system call overhead and
- that have an efficient sendfile implementation, caching file handles
- offers several advantages over caching content. First, the file system
- can manage the memory, allowing infrequently hit cached files to
- be paged out. Second, since caching open handles does not consume
- significant resources, it will be possible to enable an AutoLoadCache
- feature where static files are dynamically loaded in the cache
- as the server runs. On systems that have file change notification,
- this module can be enhanced to automatically garbage collect
- cached files that change on disk.
-
- This module should work on Unix systems that have sendfile. Place
- cachefile directives into your configuration to direct files to
- be cached.
-
- cachefile /path/to/file1
- cachefile /path/to/file2
- ...
-
- These files are only cached when the server is restarted, so if you
- change the list, or if the files are changed, then you'll need to
- restart the server.
-
- To reiterate that point: if the files are modified *in place*
- without restarting the server you may end up serving requests that
- are completely bogus. You should update files by unlinking the old
- copy and putting a new copy in place.
-
- There's no such thing as inheriting these files across vhosts or
- whatever... place the directives in the main server only.
-
- Known problems:
-
- Don't use Alias or RewriteRule to move these files around... unless
- you feel like paying for an extra stat() on each request. This is
- a deficiency in the Apache API that will hopefully be solved some day.
- The file will be served out of the file handle cache, but there will be
- an extra stat() that's a waste.
-*/
-
-#include "apr.h"
-
-#if !(APR_HAS_SENDFILE || APR_HAS_MMAP)
-#error mod_file_cache only works on systems with APR_HAS_SENDFILE or APR_HAS_MMAP
-#endif
-
-#include "apr_mmap.h"
-#include "apr_strings.h"
-#include "apr_hash.h"
-#include "apr_buckets.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_core.h"
-
-module AP_MODULE_DECLARE_DATA file_cache_module;
-
-typedef struct {
-#if APR_HAS_SENDFILE
- apr_file_t *file;
-#endif
- const char *filename;
- apr_finfo_t finfo;
- int is_mmapped;
-#if APR_HAS_MMAP
- apr_mmap_t *mm;
-#endif
- char mtimestr[APR_RFC822_DATE_LEN];
- char sizestr[21]; /* big enough to hold any 64-bit file size + null */
-} a_file;
-
-typedef struct {
- apr_hash_t *fileht;
-} a_server_config;
-
-
-static void *create_server_config(apr_pool_t *p, server_rec *s)
-{
- a_server_config *sconf = apr_palloc(p, sizeof(*sconf));
-
- sconf->fileht = apr_hash_make(p);
- return sconf;
-}
-
-static void cache_the_file(cmd_parms *cmd, const char *filename, int mmap)
-{
- a_server_config *sconf;
- a_file *new_file;
- a_file tmp;
- apr_file_t *fd = NULL;
- apr_status_t rc;
- const char *fspec;
-
- fspec = ap_server_root_relative(cmd->pool, filename);
- if (!fspec) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, APR_EBADPATH, cmd->server,
- "mod_file_cache: invalid file path "
- "%s, skipping", filename);
- return;
- }
- if ((rc = apr_stat(&tmp.finfo, fspec, APR_FINFO_MIN,
- cmd->temp_pool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server,
- "mod_file_cache: unable to stat(%s), skipping", fspec);
- return;
- }
- if (tmp.finfo.filetype != APR_REG) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "mod_file_cache: %s isn't a regular file, skipping", fspec);
- return;
- }
- if (tmp.finfo.size > AP_MAX_SENDFILE) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "mod_file_cache: %s is too large to cache, skipping", fspec);
- return;
- }
-
- rc = apr_file_open(&fd, fspec, APR_READ | APR_BINARY | APR_XTHREAD,
- APR_OS_DEFAULT, cmd->pool);
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server,
- "mod_file_cache: unable to open(%s, O_RDONLY), skipping", fspec);
- return;
- }
- apr_file_inherit_set(fd);
-
- /* WooHoo, we have a file to put in the cache */
- new_file = apr_pcalloc(cmd->pool, sizeof(a_file));
- new_file->finfo = tmp.finfo;
-
-#if APR_HAS_MMAP
- if (mmap) {
- /* MMAPFile directive. MMAP'ing the file
- * XXX: APR_HAS_LARGE_FILES issue; need to reject this request if
- * size is greater than MAX(apr_size_t) (perhaps greater than 1M?).
- */
- if ((rc = apr_mmap_create(&new_file->mm, fd, 0,
- (apr_size_t)new_file->finfo.size,
- APR_MMAP_READ, cmd->pool)) != APR_SUCCESS) {
- apr_file_close(fd);
- ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server,
- "mod_file_cache: unable to mmap %s, skipping", filename);
- return;
- }
- apr_file_close(fd);
- new_file->is_mmapped = TRUE;
- }
-#endif
-#if APR_HAS_SENDFILE
- if (!mmap) {
- /* CacheFile directive. Caching the file handle */
- new_file->is_mmapped = FALSE;
- new_file->file = fd;
- }
-#endif
-
- new_file->filename = fspec;
- apr_rfc822_date(new_file->mtimestr, new_file->finfo.mtime);
- apr_snprintf(new_file->sizestr, sizeof new_file->sizestr, "%" APR_OFF_T_FMT, new_file->finfo.size);
-
- sconf = ap_get_module_config(cmd->server->module_config, &file_cache_module);
- apr_hash_set(sconf->fileht, new_file->filename, strlen(new_file->filename), new_file);
-
-}
-
-static const char *cachefilehandle(cmd_parms *cmd, void *dummy, const char *filename)
-{
-#if APR_HAS_SENDFILE
- cache_the_file(cmd, filename, 0);
-#else
- /* Sendfile not supported by this OS */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "mod_file_cache: unable to cache file: %s. Sendfile is not supported on this OS", filename);
-#endif
- return NULL;
-}
-static const char *cachefilemmap(cmd_parms *cmd, void *dummy, const char *filename)
-{
-#if APR_HAS_MMAP
- cache_the_file(cmd, filename, 1);
-#else
- /* MMAP not supported by this OS */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "mod_file_cache: unable to cache file: %s. MMAP is not supported by this OS", filename);
-#endif
- return NULL;
-}
-
-static int file_cache_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- /* Hummm, anything to do here? */
- return OK;
-}
-
-/* If it's one of ours, fill in r->finfo now to avoid extra stat()... this is a
- * bit of a kludge, because we really want to run after core_translate runs.
- */
-static int file_cache_xlat(request_rec *r)
-{
- a_server_config *sconf;
- a_file *match;
- int res;
-
- sconf = ap_get_module_config(r->server->module_config, &file_cache_module);
-
- /* we only operate when at least one cachefile directive was used */
- if (!apr_hash_count(sconf->fileht)) {
- return DECLINED;
- }
-
- res = ap_core_translate(r);
- if (res != OK || !r->filename) {
- return res;
- }
-
- /* search the cache */
- match = (a_file *) apr_hash_get(sconf->fileht, r->filename, APR_HASH_KEY_STRING);
- if (match == NULL)
- return DECLINED;
-
- /* pass search results to handler */
- ap_set_module_config(r->request_config, &file_cache_module, match);
-
- /* shortcircuit the get_path_info() stat() calls and stuff */
- r->finfo = match->finfo;
- return OK;
-}
-
-static int mmap_handler(request_rec *r, a_file *file)
-{
-#if APR_HAS_MMAP
- conn_rec *c = r->connection;
- apr_bucket *b;
- apr_mmap_t *mm;
- apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
-
- apr_mmap_dup(&mm, file->mm, r->pool);
- b = apr_bucket_mmap_create(mm, 0, (apr_size_t)file->finfo.size,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
- return HTTP_INTERNAL_SERVER_ERROR;
-#endif
- return OK;
-}
-
-static int sendfile_handler(request_rec *r, a_file *file)
-{
-#if APR_HAS_SENDFILE
- conn_rec *c = r->connection;
- apr_bucket *b;
- apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
-
- b = apr_bucket_file_create(file->file, 0, (apr_size_t)file->finfo.size,
- r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
- return HTTP_INTERNAL_SERVER_ERROR;
-#endif
- return OK;
-}
-
-static int file_cache_handler(request_rec *r)
-{
- a_file *match;
- int errstatus;
- int rc = OK;
-
- /* XXX: not sure if this is right yet
- * see comment in http_core.c:default_handler
- */
- if (ap_strcmp_match(r->handler, "*/*")) {
- return DECLINED;
- }
-
- /* we don't handle anything but GET */
- if (r->method_number != M_GET) return DECLINED;
-
- /* did xlat phase find the file? */
- match = ap_get_module_config(r->request_config, &file_cache_module);
-
- if (match == NULL) {
- return DECLINED;
- }
-
- /* note that we would handle GET on this resource */
- r->allowed |= (AP_METHOD_BIT << M_GET);
-
- /* This handler has no use for a request body (yet), but we still
- * need to read and discard it if the client sent one.
- */
- if ((errstatus = ap_discard_request_body(r)) != OK)
- return errstatus;
-
- ap_update_mtime(r, match->finfo.mtime);
-
- /* ap_set_last_modified() always converts the file mtime to a string
- * which is slow. Accelerate the common case.
- * ap_set_last_modified(r);
- */
- {
- apr_time_t mod_time;
- char *datestr;
-
- mod_time = ap_rationalize_mtime(r, r->mtime);
- if (mod_time == match->finfo.mtime)
- datestr = match->mtimestr;
- else {
- datestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
- apr_rfc822_date(datestr, mod_time);
- }
- apr_table_setn(r->headers_out, "Last-Modified", datestr);
- }
-
- ap_set_etag(r);
- if ((errstatus = ap_meets_conditions(r)) != OK) {
- return errstatus;
- }
-
- /* ap_set_content_length() always converts the same number and never
- * returns an error. Accelerate it.
- */
- r->clength = match->finfo.size;
- apr_table_setn(r->headers_out, "Content-Length", match->sizestr);
-
- /* Call appropriate handler */
- if (!r->header_only) {
- if (match->is_mmapped == TRUE)
- rc = mmap_handler(r, match);
- else
- rc = sendfile_handler(r, match);
- }
-
- return rc;
-}
-
-static command_rec file_cache_cmds[] =
-{
-AP_INIT_ITERATE("cachefile", cachefilehandle, NULL, RSRC_CONF,
- "A space separated list of files to add to the file handle cache at config time"),
-AP_INIT_ITERATE("mmapfile", cachefilemmap, NULL, RSRC_CONF,
- "A space separated list of files to mmap at config time"),
- {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(file_cache_handler, NULL, NULL, APR_HOOK_LAST);
- ap_hook_post_config(file_cache_post_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_translate_name(file_cache_xlat, NULL, NULL, APR_HOOK_MIDDLE);
- /* This trick doesn't work apparently because the translate hooks
- are single shot. If the core_hook returns OK, then our hook is
- not called.
- ap_hook_translate_name(file_cache_xlat, aszPre, NULL, APR_HOOK_MIDDLE);
- */
-
-}
-
-module AP_MODULE_DECLARE_DATA file_cache_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- create_server_config, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- file_cache_cmds, /* command handlers */
- register_hooks /* register hooks */
-};
diff --git a/modules/cache/mod_file_cache.dsp b/modules/cache/mod_file_cache.dsp
deleted file mode 100644
index 2e0561204e..0000000000
--- a/modules/cache/mod_file_cache.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_file_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_file_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_file_cache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_file_cache.mak" CFG="mod_file_cache - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_file_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_file_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_file_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_file_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache.so
-# ADD LINK32 /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_file_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_file_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache.so
-# ADD LINK32 /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_file_cache - Win32 Release"
-# Name "mod_file_cache - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_file_cache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_file_cache.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_file_cache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_file_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_file_cache.so "file_cache_module for Apache" ../../include/ap_release.h > .\mod_file_cache.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_file_cache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_file_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_file_cache.so "file_cache_module for Apache" ../../include/ap_release.h > .\mod_file_cache.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/cache/mod_file_cache.exp b/modules/cache/mod_file_cache.exp
deleted file mode 100644
index 23b092a640..0000000000
--- a/modules/cache/mod_file_cache.exp
+++ /dev/null
@@ -1 +0,0 @@
-file_cache_module
diff --git a/modules/config5.m4 b/modules/config5.m4
deleted file mode 100644
index 2e08581731..0000000000
--- a/modules/config5.m4
+++ /dev/null
@@ -1,43 +0,0 @@
-AC_MSG_CHECKING(for extra modules)
-AC_ARG_WITH(module,
- APACHE_HELP_STRING(--with-module=module-type:module-file,
- Enable module-file in the modules/<module-type> directory.),
- [
- modtype=`echo $withval | sed -e's/\(.*\):.*/\1/'`
- pkg=`echo $withval | sed -e's/.*:\(.*\)/\1/'`
- modfilec=`echo $pkg | sed -e 's;^.*/;;'`
- modfileo=`echo $pkg | sed -e 's;^.*/;;' -e 's;\.c$;.o;'`
-
- if test "x$withval" != "xmodules/$modtype/$modfilec"; then
- cp $pkg modules/$modtype/$modfilec
- fi
- module=`echo $pkg | sed -e 's;.*/mod_\(.*\).c;\1;'`
- objects="mod_$module.lo"
- libname="mod_$module.la"
- modpath_current="modules/$modtype"
- BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
- if test ! -s "$modpath_current/modules.mk"; then
- cat >>$modpath_current/modules.mk<<EOF
-$libname: $objects
- \$(MOD_LINK) $objects
-DISTCLEAN_TARGETS = modules.mk
-static = $libname
-shared =
-EOF
- else
- cat >>$modpath_current/modules.mk.tmp<<EOF
-$libname: $objects
- \$(MOD_LINK) $objects
-EOF
- cat $modpath_current/modules.mk >> $modpath_current/modules.mk.tmp
- rm $modpath_current/modules.mk
- mv $modpath_current/modules.mk.tmp $modpath_current/modules.mk
- sed -e "s/\(static =.*\)/\1 $libname/" $modpath_current/modules.mk > $modpath_current/modules.mk.tmp
- rm $modpath_current/modules.mk
- mv $modpath_current/modules.mk.tmp $modpath_current/modules.mk
- fi
- MODLIST="$MODLIST $module"
- AC_MSG_RESULT(added $withval)
- ],
- [ AC_MSG_RESULT(no extra modules)
- ])
diff --git a/modules/dav/fs/.cvsignore b/modules/dav/fs/.cvsignore
deleted file mode 100644
index 8a31aca1e9..0000000000
--- a/modules/dav/fs/.cvsignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/dav/fs/Makefile.in b/modules/dav/fs/Makefile.in
deleted file mode 100644
index 7c5c149d85..0000000000
--- a/modules/dav/fs/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/dav/fs/NWGNUmakefile b/modules/dav/fs/NWGNUmakefile
deleted file mode 100644
index f4f7704440..0000000000
--- a/modules/dav/fs/NWGNUmakefile
+++ /dev/null
@@ -1,269 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(AP_WORK)/modules/dav/main \
- $(AP_WORK)/modules/arch/netware \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = modDAVFS
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) DAV FileSystem Sub-Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = modDAVFS Thread
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/moddavfs.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_dav_fs.o \
- $(OBJDIR)/dbm.o \
- $(OBJDIR)/lock.o \
- $(OBJDIR)/repos.o \
- $(OBJDIR)/libprews.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Apache2 \
- Libc \
- mod_dav \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- @$(APR)/aprlib.imp \
- @httpd.imp \
- @ws2nlm.imp \
- @../main/dav.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- dav_fs_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\moddavfs.nlm $(INSTALL)\Apache2\modules
-#
-# Any specialized rules here
-#
-
-vpath %.c ../../arch/netware
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/dav/fs/config6.m4 b/modules/dav/fs/config6.m4
deleted file mode 100644
index 515111cd01..0000000000
--- a/modules/dav/fs/config6.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(dav/fs)
-
-dav_fs_objects="mod_dav_fs.lo dbm.lo lock.lo repos.lo"
-
-if test "x$enable_dav" != "x"; then
- dav_fs_enable=$enable_dav
-else
- dav_fs_enable=$dav_enable
-fi
-
-case "$host" in
- *os2*)
- # OS/2 DLLs must resolve all symbols at build time
- # and we need some from main DAV module
- dav_fs_objects="$dav_fs_objects ../main/mod_dav.la"
- ;;
-esac
-
-APACHE_MODULE(dav_fs, DAV provider for the filesystem, $dav_fs_objects, , $dav_fs_enable)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/dav/fs/dbm.c b/modules/dav/fs/dbm.c
deleted file mode 100644
index 9512290f46..0000000000
--- a/modules/dav/fs/dbm.c
+++ /dev/null
@@ -1,752 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-** - Database support using DBM-style databases,
-** part of the filesystem repository implementation
-*/
-
-/*
-** This implementation uses a SDBM database per file and directory to
-** record the properties. These databases are kept in a subdirectory (of
-** the directory in question or the directory that holds the file in
-** question) named by the macro DAV_FS_STATE_DIR (.DAV). The filename of the
-** database is equivalent to the target filename, and is
-** DAV_FS_STATE_FILE_FOR_DIR (.state_for_dir) for the directory itself.
-*/
-
-#include "apr_strings.h"
-#include "apr_file_io.h"
-
-#include "apr_dbm.h"
-
-#define APR_WANT_BYTEFUNC
-#include "apr_want.h" /* for ntohs and htons */
-
-#include "mod_dav.h"
-#include "repos.h"
-
-
-struct dav_db {
- apr_pool_t *pool;
- apr_dbm_t *file;
-
- /* when used as a property database: */
-
- int version; /* *minor* version of this db */
-
- dav_buffer ns_table; /* table of namespace URIs */
- short ns_count; /* number of entries in table */
- int ns_table_dirty; /* ns_table was modified */
- apr_hash_t *uri_index; /* map URIs to (1-based) table indices */
-
- dav_buffer wb_key; /* work buffer for dav_gdbm_key */
-
- apr_datum_t iter; /* iteration key */
-};
-
-/* -------------------------------------------------------------------------
- *
- * GENERIC DBM ACCESS
- *
- * For the most part, this just uses the APR DBM functions. They are wrapped
- * a bit with some error handling (using the mod_dav error functions).
- */
-
-void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname,
- const char **state1, const char **state2)
-{
- if (fname == NULL)
- fname = DAV_FS_STATE_FILE_FOR_DIR;
-
- apr_dbm_get_usednames(p, fname, state1, state2);
-}
-
-static dav_error * dav_fs_dbm_error(dav_db *db, apr_pool_t *p,
- apr_status_t status)
-{
- int save_errno = errno;
- int errcode;
- const char *errstr;
- dav_error *err;
- char errbuf[200];
-
- if (status == APR_SUCCESS)
- return NULL;
-
- p = db ? db->pool : p;
-
- /* There might not be a <db> if we had problems creating it. */
- if (db == NULL) {
- errcode = 1;
- errstr = "Could not open property database.";
- }
- else {
- (void) apr_dbm_geterror(db->file, &errcode, errbuf, sizeof(errbuf));
- errstr = apr_pstrdup(p, errbuf);
- }
-
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, errcode, errstr);
- err->save_errno = save_errno;
- return err;
-}
-
-/* ensure that our state subdirectory is present */
-/* ### does this belong here or in dav_fs_repos.c ?? */
-void dav_fs_ensure_state_dir(apr_pool_t * p, const char *dirname)
-{
- const char *pathname = apr_pstrcat(p, dirname, "/" DAV_FS_STATE_DIR, NULL);
-
- /* ### do we need to deal with the umask? */
-
- /* just try to make it, ignoring any resulting errors */
- (void) apr_dir_make(pathname, APR_OS_DEFAULT, p);
-}
-
-/* dav_dbm_open_direct: Opens a *dbm database specified by path.
- * ro = boolean read-only flag.
- */
-dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,
- dav_db **pdb)
-{
- apr_status_t status;
- apr_dbm_t *file;
-
- *pdb = NULL;
-
- if ((status = apr_dbm_open(&file, pathname,
- ro ? APR_DBM_READONLY : APR_DBM_RWCREATE,
- APR_OS_DEFAULT, p))
- != APR_SUCCESS
- && !ro) {
- /* ### do something with 'status' */
-
- /* we can't continue if we couldn't open the file
- and we need to write */
- return dav_fs_dbm_error(NULL, p, status);
- }
-
- /* may be NULL if we tried to open a non-existent db as read-only */
- if (file != NULL) {
- /* we have an open database... return it */
- *pdb = apr_pcalloc(p, sizeof(**pdb));
- (*pdb)->pool = p;
- (*pdb)->file = file;
- }
-
- return NULL;
-}
-
-static dav_error * dav_dbm_open(apr_pool_t * p, const dav_resource *resource,
- int ro, dav_db **pdb)
-{
- const char *dirpath;
- const char *fname;
- const char *pathname;
-
- /* Get directory and filename for resource */
- /* ### should test this result value... */
- (void) dav_fs_dir_file_name(resource, &dirpath, &fname);
-
- /* If not opening read-only, ensure the state dir exists */
- if (!ro) {
- /* ### what are the perf implications of always checking this? */
- dav_fs_ensure_state_dir(p, dirpath);
- }
-
- pathname = apr_pstrcat(p, dirpath, "/" DAV_FS_STATE_DIR "/",
- fname ? fname : DAV_FS_STATE_FILE_FOR_DIR,
- NULL);
-
- /* ### readers cannot open while a writer has this open; we should
- ### perform a few retries with random pauses. */
-
- /* ### do we need to deal with the umask? */
-
- return dav_dbm_open_direct(p, pathname, ro, pdb);
-}
-
-void dav_dbm_close(dav_db *db)
-{
- apr_dbm_close(db->file);
-}
-
-dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue)
-{
- apr_status_t status = apr_dbm_fetch(db->file, key, pvalue);
-
- return dav_fs_dbm_error(db, NULL, status);
-}
-
-dav_error * dav_dbm_store(dav_db *db, apr_datum_t key, apr_datum_t value)
-{
- apr_status_t status = apr_dbm_store(db->file, key, value);
-
- return dav_fs_dbm_error(db, NULL, status);
-}
-
-dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key)
-{
- apr_status_t status = apr_dbm_delete(db->file, key);
-
- return dav_fs_dbm_error(db, NULL, status);
-}
-
-int dav_dbm_exists(dav_db *db, apr_datum_t key)
-{
- return apr_dbm_exists(db->file, key);
-}
-
-static dav_error * dav_dbm_firstkey(dav_db *db, apr_datum_t *pkey)
-{
- apr_status_t status = apr_dbm_firstkey(db->file, pkey);
-
- return dav_fs_dbm_error(db, NULL, status);
-}
-
-static dav_error * dav_dbm_nextkey(dav_db *db, apr_datum_t *pkey)
-{
- apr_status_t status = apr_dbm_nextkey(db->file, pkey);
-
- return dav_fs_dbm_error(db, NULL, status);
-}
-
-void dav_dbm_freedatum(dav_db *db, apr_datum_t data)
-{
- apr_dbm_freedatum(db->file, data);
-}
-
-/* -------------------------------------------------------------------------
- *
- * PROPERTY DATABASE FUNCTIONS
- */
-
-
-#define DAV_GDBM_NS_KEY "METADATA"
-#define DAV_GDBM_NS_KEY_LEN 8
-
-typedef struct {
- unsigned char major;
-#define DAV_DBVSN_MAJOR 4
- /*
- ** V4 -- 0.9.9 ..
- ** Prior versions could have keys or values with invalid
- ** namespace prefixes as a result of the xmlns="" form not
- ** resetting the default namespace to be "no namespace". The
- ** namespace would be set to "" which is invalid; it should
- ** be set to "no namespace".
- **
- ** V3 -- 0.9.8
- ** Prior versions could have values with invalid namespace
- ** prefixes due to an incorrect mapping of input to propdb
- ** namespace indices. Version bumped to obsolete the old
- ** values.
- **
- ** V2 -- 0.9.7
- ** This introduced the xml:lang value into the property value's
- ** record in the propdb.
- **
- ** V1 -- .. 0.9.6
- ** Initial version.
- */
-
-
- unsigned char minor;
-#define DAV_DBVSN_MINOR 0
-
- short ns_count;
-
-} dav_propdb_metadata;
-
-struct dav_deadprop_rollback {
- apr_datum_t key;
- apr_datum_t value;
-};
-
-struct dav_namespace_map {
- int *ns_map;
-};
-
-/*
-** Internal function to build a key
-**
-** WARNING: returns a pointer to a "static" buffer holding the key. The
-** value must be copied or no longer used if this function is
-** called again.
-*/
-static apr_datum_t dav_build_key(dav_db *db, const dav_prop_name *name)
-{
- char nsbuf[20];
- apr_size_t l_ns, l_name = strlen(name->name);
- apr_datum_t key = { 0 };
-
- /*
- * Convert namespace ID to a string. "no namespace" is an empty string,
- * so the keys will have the form ":name". Otherwise, the keys will
- * have the form "#:name".
- */
- if (*name->ns == '\0') {
- nsbuf[0] = '\0';
- l_ns = 0;
- }
- else {
- int ns_id = (int)apr_hash_get(db->uri_index, name->ns,
- APR_HASH_KEY_STRING);
-
-
- if (ns_id == 0) {
- /* the namespace was not found(!) */
- return key; /* zeroed */
- }
-
- l_ns = sprintf(nsbuf, "%d", ns_id - 1);
- }
-
- /* assemble: #:name */
- dav_set_bufsize(db->pool, &db->wb_key, l_ns + 1 + l_name + 1);
- memcpy(db->wb_key.buf, nsbuf, l_ns);
- db->wb_key.buf[l_ns] = ':';
- memcpy(&db->wb_key.buf[l_ns + 1], name->name, l_name + 1);
-
- /* build the database key */
- key.dsize = l_ns + 1 + l_name + 1;
- key.dptr = db->wb_key.buf;
-
- return key;
-}
-
-static void dav_append_prop(apr_pool_t *pool,
- const char *name, const char *value,
- apr_text_header *phdr)
-{
- const char *s;
- const char *lang = value;
-
- /* skip past the xml:lang value */
- value += strlen(lang) + 1;
-
- if (*value == '\0') {
- /* the property is an empty value */
- if (*name == ':') {
- /* "no namespace" case */
- s = apr_psprintf(pool, "<%s/>" DEBUG_CR, name+1);
- }
- else {
- s = apr_psprintf(pool, "<ns%s/>" DEBUG_CR, name);
- }
- }
- else if (*lang != '\0') {
- if (*name == ':') {
- /* "no namespace" case */
- s = apr_psprintf(pool, "<%s xml:lang=\"%s\">%s</%s>" DEBUG_CR,
- name+1, lang, value, name+1);
- }
- else {
- s = apr_psprintf(pool, "<ns%s xml:lang=\"%s\">%s</ns%s>" DEBUG_CR,
- name, lang, value, name);
- }
- }
- else if (*name == ':') {
- /* "no namespace" case */
- s = apr_psprintf(pool, "<%s>%s</%s>" DEBUG_CR, name+1, value, name+1);
- }
- else {
- s = apr_psprintf(pool, "<ns%s>%s</ns%s>" DEBUG_CR, name, value, name);
- }
-
- apr_text_append(pool, phdr, s);
-}
-
-static dav_error * dav_propdb_open(apr_pool_t *pool,
- const dav_resource *resource, int ro,
- dav_db **pdb)
-{
- dav_db *db;
- dav_error *err;
- apr_datum_t key;
- apr_datum_t value = { 0 };
-
- *pdb = NULL;
-
- /*
- ** Return if an error occurred, or there is no database.
- **
- ** NOTE: db could be NULL if we attempted to open a readonly
- ** database that doesn't exist. If we require read/write
- ** access, then a database was created and opened.
- */
- if ((err = dav_dbm_open(pool, resource, ro, &db)) != NULL
- || db == NULL)
- return err;
-
- db->uri_index = apr_hash_make(pool);
-
- key.dptr = DAV_GDBM_NS_KEY;
- key.dsize = DAV_GDBM_NS_KEY_LEN;
- if ((err = dav_dbm_fetch(db, key, &value)) != NULL) {
- /* ### push a higher-level description? */
- return err;
- }
-
- if (value.dptr == NULL) {
- dav_propdb_metadata m = {
- DAV_DBVSN_MAJOR, DAV_DBVSN_MINOR, 0
- };
-
- /*
- ** If there is no METADATA key, then the database may be
- ** from versions 0.9.0 .. 0.9.4 (which would be incompatible).
- ** These can be identified by the presence of an NS_TABLE entry.
- */
- key.dptr = "NS_TABLE";
- key.dsize = 8;
- if (dav_dbm_exists(db, key)) {
- dav_dbm_close(db);
-
- /* call it a major version error */
- return dav_new_error(pool, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_PROP_BAD_MAJOR,
- "Prop database has the wrong major "
- "version number and cannot be used.");
- }
-
- /* initialize a new metadata structure */
- dav_set_bufsize(pool, &db->ns_table, sizeof(m));
- memcpy(db->ns_table.buf, &m, sizeof(m));
- }
- else {
- dav_propdb_metadata m;
- int ns;
- const char *uri;
-
- dav_set_bufsize(pool, &db->ns_table, value.dsize);
- memcpy(db->ns_table.buf, value.dptr, value.dsize);
-
- memcpy(&m, value.dptr, sizeof(m));
- if (m.major != DAV_DBVSN_MAJOR) {
- dav_dbm_close(db);
-
- return dav_new_error(pool, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_PROP_BAD_MAJOR,
- "Prop database has the wrong major "
- "version number and cannot be used.");
- }
- db->version = m.minor;
- db->ns_count = ntohs(m.ns_count);
-
- dav_dbm_freedatum(db, value);
-
- /* create db->uri_index */
- for (ns = 0, uri = db->ns_table.buf + sizeof(dav_propdb_metadata);
- ns++ < db->ns_count;
- uri += strlen(uri) + 1) {
-
- /* we must copy the key, in case ns_table.buf moves */
- apr_hash_set(db->uri_index,
- apr_pstrdup(pool, uri), APR_HASH_KEY_STRING,
- (void *)ns);
- }
- }
-
- *pdb = db;
- return NULL;
-}
-
-static void dav_propdb_close(dav_db *db)
-{
-
- if (db->ns_table_dirty) {
- dav_propdb_metadata m;
- apr_datum_t key;
- apr_datum_t value;
- dav_error *err;
-
- key.dptr = DAV_GDBM_NS_KEY;
- key.dsize = DAV_GDBM_NS_KEY_LEN;
-
- value.dptr = db->ns_table.buf;
- value.dsize = db->ns_table.cur_len;
-
- /* fill in the metadata that we store into the prop db. */
- m.major = DAV_DBVSN_MAJOR;
- m.minor = db->version; /* ### keep current minor version? */
- m.ns_count = htons(db->ns_count);
-
- memcpy(db->ns_table.buf, &m, sizeof(m));
-
- err = dav_dbm_store(db, key, value);
- /* ### what to do with the error? */
- }
-
- dav_dbm_close(db);
-}
-
-static dav_error * dav_propdb_define_namespaces(dav_db *db, dav_xmlns_info *xi)
-{
- int ns;
- const char *uri = db->ns_table.buf + sizeof(dav_propdb_metadata);
-
- /* within the prop values, we use "ns%d" for prefixes... register them */
- for (ns = 0; ns < db->ns_count; ++ns, uri += strlen(uri) + 1) {
-
- /* Empty URIs signify the empty namespace. These do not get a
- namespace prefix. when we generate the value, we will simply
- leave off the prefix, which is defined by mod_dav to be the
- empty namespace. */
- if (*uri == '\0')
- continue;
-
- /* ns_table.buf can move, so copy its value (we want the values to
- last as long as the provided dav_xmlns_info). */
- dav_xmlns_add(xi,
- apr_psprintf(xi->pool, "ns%d", ns),
- apr_pstrdup(xi->pool, uri));
- }
-
- return NULL;
-}
-
-static dav_error * dav_propdb_output_value(dav_db *db,
- const dav_prop_name *name,
- dav_xmlns_info *xi,
- apr_text_header *phdr,
- int *found)
-{
- apr_datum_t key = dav_build_key(db, name);
- apr_datum_t value;
- dav_error *err;
-
- if ((err = dav_dbm_fetch(db, key, &value)) != NULL)
- return err;
- if (value.dptr == NULL) {
- *found = 0;
- return NULL;
- }
- *found = 1;
-
- dav_append_prop(db->pool, key.dptr, value.dptr, phdr);
-
- dav_dbm_freedatum(db, value);
-
- return NULL;
-}
-
-static dav_error * dav_propdb_map_namespaces(
- dav_db *db,
- const apr_array_header_t *namespaces,
- dav_namespace_map **mapping)
-{
- dav_namespace_map *m = apr_palloc(db->pool, sizeof(*m));
- int i;
- int *pmap;
- const char **puri;
-
- /*
- ** Iterate over the provided namespaces. If a namespace already appears
- ** in our internal map of URI -> ns_id, then store that in the map. If
- ** we don't know the namespace yet, then add it to the map and to our
- ** table of known namespaces.
- */
- m->ns_map = pmap = apr_palloc(db->pool, namespaces->nelts * sizeof(*pmap));
- for (i = namespaces->nelts, puri = (const char **)namespaces->elts;
- i-- > 0;
- ++puri, ++pmap) {
-
- const char *uri = *puri;
- apr_size_t uri_len = strlen(uri);
- int ns_id = (int)apr_hash_get(db->uri_index, uri, uri_len);
-
- if (ns_id == 0) {
- dav_check_bufsize(db->pool, &db->ns_table, uri_len + 1);
- memcpy(db->ns_table.buf + db->ns_table.cur_len, uri, uri_len + 1);
- db->ns_table.cur_len += uri_len + 1;
-
- /* copy the uri in case the passed-in namespaces changes in
- some way. */
- apr_hash_set(db->uri_index, apr_pstrdup(db->pool, uri), uri_len,
- (void *)(db->ns_count + 1));
-
- db->ns_table_dirty = 1;
-
- *pmap = db->ns_count++;
- }
- else {
- *pmap = ns_id - 1;
- }
- }
-
- *mapping = m;
- return NULL;
-}
-
-static dav_error * dav_propdb_store(dav_db *db, const dav_prop_name *name,
- const apr_xml_elem *elem,
- dav_namespace_map *mapping)
-{
- apr_datum_t key = dav_build_key(db, name);
- apr_datum_t value;
-
- /* Note: mapping->ns_map was set up in dav_propdb_map_namespaces() */
-
- /* ### use a db- subpool for these values? clear on exit? */
-
- /* quote all the values in the element */
- /* ### be nice to do this without affecting the element itself */
- /* ### of course, the cast indicates Badness is occurring here */
- apr_xml_quote_elem(db->pool, (apr_xml_elem *)elem);
-
- /* generate a text blob for the xml:lang plus the contents */
- apr_xml_to_text(db->pool, elem, APR_XML_X2T_LANG_INNER, NULL,
- mapping->ns_map,
- (const char **)&value.dptr, &value.dsize);
-
- return dav_dbm_store(db, key, value);
-}
-
-static dav_error * dav_propdb_remove(dav_db *db, const dav_prop_name *name)
-{
- apr_datum_t key = dav_build_key(db, name);
- return dav_dbm_delete(db, key);
-}
-
-static int dav_propdb_exists(dav_db *db, const dav_prop_name *name)
-{
- apr_datum_t key = dav_build_key(db, name);
- return dav_dbm_exists(db, key);
-}
-
-static const char *dav_get_ns_table_uri(dav_db *db, int ns_id)
-{
- const char *p = db->ns_table.buf + sizeof(dav_propdb_metadata);
-
- while (ns_id--)
- p += strlen(p) + 1;
-
- return p;
-}
-
-static void dav_set_name(dav_db *db, dav_prop_name *pname)
-{
- const char *s = db->iter.dptr;
-
- if (s == NULL) {
- pname->ns = pname->name = NULL;
- }
- else if (*s == ':') {
- pname->ns = "";
- pname->name = s + 1;
- }
- else {
- int id = atoi(s);
-
- pname->ns = dav_get_ns_table_uri(db, id);
- if (s[1] == ':') {
- pname->name = s + 2;
- }
- else {
- pname->name = ap_strchr_c(s + 2, ':') + 1;
- }
- }
-}
-
-static dav_error * dav_propdb_next_name(dav_db *db, dav_prop_name *pname)
-{
- dav_error *err;
-
- /* free the previous key. note: if the loop is aborted, then the DBM
- will toss the key (via pool cleanup) */
- if (db->iter.dptr != NULL)
- dav_dbm_freedatum(db, db->iter);
-
- if ((err = dav_dbm_nextkey(db, &db->iter)) != NULL)
- return err;
-
- /* skip past the METADATA key */
- if (db->iter.dptr != NULL && *db->iter.dptr == 'M')
- return dav_propdb_next_name(db, pname);
-
- dav_set_name(db, pname);
- return NULL;
-}
-
-static dav_error * dav_propdb_first_name(dav_db *db, dav_prop_name *pname)
-{
- dav_error *err;
-
- if ((err = dav_dbm_firstkey(db, &db->iter)) != NULL)
- return err;
-
- /* skip past the METADATA key */
- if (db->iter.dptr != NULL && *db->iter.dptr == 'M')
- return dav_propdb_next_name(db, pname);
-
- dav_set_name(db, pname);
- return NULL;
-}
-
-static dav_error * dav_propdb_get_rollback(dav_db *db,
- const dav_prop_name *name,
- dav_deadprop_rollback **prollback)
-{
- dav_deadprop_rollback *rb = apr_pcalloc(db->pool, sizeof(*rb));
- apr_datum_t key;
- apr_datum_t value;
- dav_error *err;
-
- key = dav_build_key(db, name);
- rb->key.dptr = apr_pstrdup(db->pool, key.dptr);
- rb->key.dsize = key.dsize;
-
- if ((err = dav_dbm_fetch(db, key, &value)) != NULL)
- return err;
- if (value.dptr != NULL) {
- rb->value.dptr = apr_pmemdup(db->pool, value.dptr, value.dsize);
- rb->value.dsize = value.dsize;
- }
-
- *prollback = rb;
- return NULL;
-}
-
-static dav_error * dav_propdb_apply_rollback(dav_db *db,
- dav_deadprop_rollback *rollback)
-{
- if (rollback->value.dptr == NULL) {
- /* don't fail if the thing isn't really there. */
- (void) dav_dbm_delete(db, rollback->key);
- return NULL;
- }
-
- return dav_dbm_store(db, rollback->key, rollback->value);
-}
-
-const dav_hooks_db dav_hooks_db_dbm =
-{
- dav_propdb_open,
- dav_propdb_close,
- dav_propdb_define_namespaces,
- dav_propdb_output_value,
- dav_propdb_map_namespaces,
- dav_propdb_store,
- dav_propdb_remove,
- dav_propdb_exists,
- dav_propdb_first_name,
- dav_propdb_next_name,
- dav_propdb_get_rollback,
- dav_propdb_apply_rollback,
-
- NULL /* ctx */
-};
diff --git a/modules/dav/fs/lock.c b/modules/dav/fs/lock.c
deleted file mode 100644
index 9331174ef4..0000000000
--- a/modules/dav/fs/lock.c
+++ /dev/null
@@ -1,1516 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV filesystem lock implementation
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_uuid.h"
-
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_log.h"
-
-#include "mod_dav.h"
-#include "repos.h"
-
-
-/* ---------------------------------------------------------------
-**
-** Lock database primitives
-**
-*/
-
-/*
-** LOCK DATABASES
-**
-** Lockdiscovery information is stored in the single lock database specified
-** by the DAVLockDB directive. Information about this db is stored in the
-** global server configuration.
-**
-** KEY
-**
-** The database is keyed by a key_type unsigned char (DAV_TYPE_INODE or
-** DAV_TYPE_FNAME) followed by inode and device number if possible,
-** otherwise full path (in the case of Win32 or lock-null resources).
-**
-** VALUE
-**
-** The value consists of a list of elements.
-** DIRECT LOCK: [char (DAV_LOCK_DIRECT),
-** char (dav_lock_scope),
-** char (dav_lock_type),
-** int depth,
-** time_t expires,
-** apr_uuid_t locktoken,
-** char[] owner,
-** char[] auth_user]
-**
-** INDIRECT LOCK: [char (DAV_LOCK_INDIRECT),
-** apr_uuid_t locktoken,
-** time_t expires,
-** int key_size,
-** char[] key]
-** The key is to the collection lock that resulted in this indirect lock
-*/
-
-#define DAV_TRUE 1
-#define DAV_FALSE 0
-
-#define DAV_CREATE_LIST 23
-#define DAV_APPEND_LIST 24
-
-/* Stored lock_discovery prefix */
-#define DAV_LOCK_DIRECT 1
-#define DAV_LOCK_INDIRECT 2
-
-#define DAV_TYPE_INODE 10
-#define DAV_TYPE_FNAME 11
-
-
-/* ack. forward declare. */
-static dav_error * dav_fs_remove_locknull_member(apr_pool_t *p,
- const char *filename,
- dav_buffer *pbuf);
-
-/*
-** Use the opaquelock scheme for locktokens
-*/
-struct dav_locktoken {
- apr_uuid_t uuid;
-};
-#define dav_compare_locktoken(plt1, plt2) \
- memcmp(&(plt1)->uuid, &(plt2)->uuid, sizeof((plt1)->uuid))
-
-
-/* #################################################################
-** ### keep these structures (internal) or move fully to dav_lock?
-*/
-
-/*
-** We need to reliably size the fixed-length portion of
-** dav_lock_discovery; best to separate it into another
-** struct for a convenient sizeof, unless we pack lock_discovery.
-*/
-typedef struct dav_lock_discovery_fixed
-{
- char scope;
- char type;
- int depth;
- time_t timeout;
-} dav_lock_discovery_fixed;
-
-typedef struct dav_lock_discovery
-{
- struct dav_lock_discovery_fixed f;
-
- dav_locktoken *locktoken;
- const char *owner; /* owner field from activelock */
- const char *auth_user; /* authenticated user who created the lock */
- struct dav_lock_discovery *next;
-} dav_lock_discovery;
-
-/* Indirect locks represent locks inherited from containing collections.
- * They reference the lock token for the collection the lock is
- * inherited from. A lock provider may also define a key to the
- * inherited lock, for fast datbase lookup. The key is opaque outside
- * the lock provider.
- */
-typedef struct dav_lock_indirect
-{
- dav_locktoken *locktoken;
- apr_datum_t key;
- struct dav_lock_indirect *next;
- time_t timeout;
-} dav_lock_indirect;
-
-/* ################################################################# */
-
-
-/*
-** Stored direct lock info - full lock_discovery length:
-** prefix + Fixed length + lock token + 2 strings + 2 nulls (one for each string)
-*/
-#define dav_size_direct(a) (1 + sizeof(dav_lock_discovery_fixed) \
- + sizeof(apr_uuid_t) \
- + ((a)->owner ? strlen((a)->owner) : 0) \
- + ((a)->auth_user ? strlen((a)->auth_user) : 0) \
- + 2)
-
-/* Stored indirect lock info - lock token and apr_datum_t */
-#define dav_size_indirect(a) (1 + sizeof(apr_uuid_t) \
- + sizeof(time_t) \
- + sizeof(int) + (a)->key.dsize)
-
-/*
-** The lockdb structure.
-**
-** The <db> field may be NULL, meaning one of two things:
-** 1) That we have not actually opened the underlying database (yet). The
-** <opened> field should be false.
-** 2) We opened it readonly and it wasn't present.
-**
-** The delayed opening (determined by <opened>) makes creating a lockdb
-** quick, while deferring the underlying I/O until it is actually required.
-**
-** We export the notion of a lockdb, but hide the details of it. Most
-** implementations will use a database of some kind, but it is certainly
-** possible that alternatives could be used.
-*/
-struct dav_lockdb_private
-{
- request_rec *r; /* for accessing the uuid state */
- apr_pool_t *pool; /* a pool to use */
- const char *lockdb_path; /* where is the lock database? */
-
- int opened; /* we opened the database */
- dav_db *db; /* if non-NULL, the lock database */
-};
-typedef struct
-{
- dav_lockdb pub;
- dav_lockdb_private priv;
-} dav_lockdb_combined;
-
-/*
-** The private part of the lock structure.
-*/
-struct dav_lock_private
-{
- apr_datum_t key; /* key into the lock database */
-};
-typedef struct
-{
- dav_lock pub;
- dav_lock_private priv;
- dav_locktoken token;
-} dav_lock_combined;
-
-/*
-** This must be forward-declared so the open_lockdb function can use it.
-*/
-extern const dav_hooks_locks dav_hooks_locks_fs;
-
-
-/* internal function for creating locks */
-static dav_lock *dav_fs_alloc_lock(dav_lockdb *lockdb, apr_datum_t key,
- const dav_locktoken *locktoken)
-{
- dav_lock_combined *comb;
-
- comb = apr_pcalloc(lockdb->info->pool, sizeof(*comb));
- comb->pub.rectype = DAV_LOCKREC_DIRECT;
- comb->pub.info = &comb->priv;
- comb->priv.key = key;
-
- if (locktoken == NULL) {
- comb->pub.locktoken = &comb->token;
- apr_uuid_get(&comb->token.uuid);
- }
- else {
- comb->pub.locktoken = locktoken;
- }
-
- return &comb->pub;
-}
-
-/*
-** dav_fs_parse_locktoken
-**
-** Parse an opaquelocktoken URI into a locktoken.
-*/
-static dav_error * dav_fs_parse_locktoken(
- apr_pool_t *p,
- const char *char_token,
- dav_locktoken **locktoken_p)
-{
- dav_locktoken *locktoken;
-
- if (ap_strstr_c(char_token, "opaquelocktoken:") != char_token) {
- return dav_new_error(p,
- HTTP_BAD_REQUEST, DAV_ERR_LOCK_UNK_STATE_TOKEN,
- "The lock token uses an unknown State-token "
- "format and could not be parsed.");
- }
- char_token += 16;
-
- locktoken = apr_pcalloc(p, sizeof(*locktoken));
- if (apr_uuid_parse(&locktoken->uuid, char_token)) {
- return dav_new_error(p, HTTP_BAD_REQUEST, DAV_ERR_LOCK_PARSE_TOKEN,
- "The opaquelocktoken has an incorrect format "
- "and could not be parsed.");
- }
-
- *locktoken_p = locktoken;
- return NULL;
-}
-
-/*
-** dav_fs_format_locktoken
-**
-** Generate the URI for a locktoken
-*/
-static const char *dav_fs_format_locktoken(
- apr_pool_t *p,
- const dav_locktoken *locktoken)
-{
- char buf[APR_UUID_FORMATTED_LENGTH + 1];
-
- apr_uuid_format(buf, &locktoken->uuid);
- return apr_pstrcat(p, "opaquelocktoken:", buf, NULL);
-}
-
-/*
-** dav_fs_compare_locktoken
-**
-** Determine whether two locktokens are the same
-*/
-static int dav_fs_compare_locktoken(
- const dav_locktoken *lt1,
- const dav_locktoken *lt2)
-{
- return dav_compare_locktoken(lt1, lt2);
-}
-
-/*
-** dav_fs_really_open_lockdb:
-**
-** If the database hasn't been opened yet, then open the thing.
-*/
-static dav_error * dav_fs_really_open_lockdb(dav_lockdb *lockdb)
-{
- dav_error *err;
-
- if (lockdb->info->opened)
- return NULL;
-
- err = dav_dbm_open_direct(lockdb->info->pool,
- lockdb->info->lockdb_path,
- lockdb->ro,
- &lockdb->info->db);
- if (err != NULL) {
- return dav_push_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_OPENDB,
- "Could not open the lock database.",
- err);
- }
-
- /* all right. it is opened now. */
- lockdb->info->opened = 1;
-
- return NULL;
-}
-
-/*
-** dav_fs_open_lockdb:
-**
-** "open" the lock database, as specified in the global server configuration.
-** If force is TRUE, then the database is opened now, rather than lazily.
-**
-** Note that only one can be open read/write.
-*/
-static dav_error * dav_fs_open_lockdb(request_rec *r, int ro, int force,
- dav_lockdb **lockdb)
-{
- dav_lockdb_combined *comb;
-
- comb = apr_pcalloc(r->pool, sizeof(*comb));
- comb->pub.hooks = &dav_hooks_locks_fs;
- comb->pub.ro = ro;
- comb->pub.info = &comb->priv;
- comb->priv.r = r;
- comb->priv.pool = r->pool;
-
- comb->priv.lockdb_path = dav_get_lockdb_path(r);
- if (comb->priv.lockdb_path == NULL) {
- return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_NO_DB,
- "A lock database was not specified with the "
- "DAVLockDB directive. One must be specified "
- "to use the locking functionality.");
- }
-
- /* done initializing. return it. */
- *lockdb = &comb->pub;
-
- if (force) {
- /* ### add a higher-level comment? */
- return dav_fs_really_open_lockdb(*lockdb);
- }
-
- return NULL;
-}
-
-/*
-** dav_fs_close_lockdb:
-**
-** Close it. Duh.
-*/
-static void dav_fs_close_lockdb(dav_lockdb *lockdb)
-{
- if (lockdb->info->db != NULL)
- dav_dbm_close(lockdb->info->db);
-}
-
-/*
-** dav_fs_build_fname_key
-**
-** Given a pathname, build a DAV_TYPE_FNAME lock database key.
-*/
-static apr_datum_t dav_fs_build_fname_key(apr_pool_t *p, const char *pathname)
-{
- apr_datum_t key;
-
- /* ### does this allocation have a proper lifetime? need to check */
- /* ### can we use a buffer for this? */
-
- /* size is TYPE + pathname + null */
- key.dsize = strlen(pathname) + 2;
- key.dptr = apr_palloc(p, key.dsize);
- *key.dptr = DAV_TYPE_FNAME;
- memcpy(key.dptr + 1, pathname, key.dsize - 1);
- if (key.dptr[key.dsize - 2] == '/')
- key.dptr[--key.dsize - 1] = '\0';
- return key;
-}
-
-/*
-** dav_fs_build_key: Given a resource, return a apr_datum_t key
-** to look up lock information for this file.
-**
-** (inode/dev not supported or file is lock-null):
-** apr_datum_t->dvalue = full path
-**
-** (inode/dev supported and file exists ):
-** apr_datum_t->dvalue = inode, dev
-*/
-static apr_datum_t dav_fs_build_key(apr_pool_t *p,
- const dav_resource *resource)
-{
- const char *file = dav_fs_pathname(resource);
- apr_datum_t key;
- apr_finfo_t finfo;
- apr_status_t rv;
-
- /* ### use lstat() ?? */
- /*
- * XXX: What for platforms with no IDENT (dev/inode)?
- */
- rv = apr_stat(&finfo, file, APR_FINFO_IDENT, p);
- if ((rv == APR_SUCCESS || rv == APR_INCOMPLETE)
- && ((finfo.valid & APR_FINFO_IDENT) == APR_FINFO_IDENT))
- {
- /* ### can we use a buffer for this? */
- key.dsize = 1 + sizeof(finfo.inode) + sizeof(finfo.device);
- key.dptr = apr_palloc(p, key.dsize);
- *key.dptr = DAV_TYPE_INODE;
- memcpy(key.dptr + 1, &finfo.inode, sizeof(finfo.inode));
- memcpy(key.dptr + 1 + sizeof(finfo.inode), &finfo.device,
- sizeof(finfo.device));
-
- return key;
- }
-
- return dav_fs_build_fname_key(p, file);
-}
-
-/*
-** dav_fs_lock_expired: return 1 (true) if the given timeout is in the past
-** or present (the lock has expired), or 0 (false) if in the future
-** (the lock has not yet expired).
-*/
-static int dav_fs_lock_expired(time_t expires)
-{
- return expires != DAV_TIMEOUT_INFINITE && time(NULL) >= expires;
-}
-
-/*
-** dav_fs_save_lock_record: Saves the lock information specified in the
-** direct and indirect lock lists about path into the lock database.
-** If direct and indirect == NULL, the key is removed.
-*/
-static dav_error * dav_fs_save_lock_record(dav_lockdb *lockdb, apr_datum_t key,
- dav_lock_discovery *direct,
- dav_lock_indirect *indirect)
-{
- dav_error *err;
- apr_datum_t val = { 0 };
- char *ptr;
- dav_lock_discovery *dp = direct;
- dav_lock_indirect *ip = indirect;
-
-#if DAV_DEBUG
- if (lockdb->ro) {
- return dav_new_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "INTERNAL DESIGN ERROR: the lockdb was opened "
- "readonly, but an attempt to save locks was "
- "performed.");
- }
-#endif
-
- if ((err = dav_fs_really_open_lockdb(lockdb)) != NULL) {
- /* ### add a higher-level error? */
- return err;
- }
-
- /* If nothing to save, delete key */
- if (dp == NULL && ip == NULL) {
- /* don't fail if the key is not present */
- /* ### but what about other errors? */
- (void) dav_dbm_delete(lockdb->info->db, key);
- return NULL;
- }
-
- while(dp) {
- val.dsize += dav_size_direct(dp);
- dp = dp->next;
- }
- while(ip) {
- val.dsize += dav_size_indirect(ip);
- ip = ip->next;
- }
-
- /* ### can this be apr_palloc() ? */
- /* ### hmmm.... investigate the use of a buffer here */
- ptr = val.dptr = apr_pcalloc(lockdb->info->pool, val.dsize);
- dp = direct;
- ip = indirect;
-
- while(dp) {
- *ptr++ = DAV_LOCK_DIRECT; /* Direct lock - lock_discovery struct follows */
- memcpy(ptr, dp, sizeof(dp->f)); /* Fixed portion of struct */
- ptr += sizeof(dp->f);
- memcpy(ptr, dp->locktoken, sizeof(*dp->locktoken));
- ptr += sizeof(*dp->locktoken);
- if (dp->owner == NULL) {
- *ptr++ = '\0';
- }
- else {
- memcpy(ptr, dp->owner, strlen(dp->owner) + 1);
- ptr += strlen(dp->owner) + 1;
- }
- if (dp->auth_user == NULL) {
- *ptr++ = '\0';
- }
- else {
- memcpy(ptr, dp->auth_user, strlen(dp->auth_user) + 1);
- ptr += strlen(dp->auth_user) + 1;
- }
-
- dp = dp->next;
- }
-
- while(ip) {
- *ptr++ = DAV_LOCK_INDIRECT; /* Indirect lock prefix */
- memcpy(ptr, ip->locktoken, sizeof(*ip->locktoken)); /* Locktoken */
- ptr += sizeof(*ip->locktoken);
- memcpy(ptr, &ip->timeout, sizeof(ip->timeout)); /* Expire time */
- ptr += sizeof(ip->timeout);
- memcpy(ptr, &ip->key.dsize, sizeof(ip->key.dsize)); /* Size of key */
- ptr += sizeof(ip->key.dsize);
- memcpy(ptr, ip->key.dptr, ip->key.dsize); /* Key data */
- ptr += ip->key.dsize;
- ip = ip->next;
- }
-
- if ((err = dav_dbm_store(lockdb->info->db, key, val)) != NULL) {
- /* ### more details? add an error_id? */
- return dav_push_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_SAVE_LOCK,
- "Could not save lock information.",
- err);
- }
-
- return NULL;
-}
-
-/*
-** dav_load_lock_record: Reads lock information about key from lock db;
-** creates linked lists of the direct and indirect locks.
-**
-** If add_method = DAV_APPEND_LIST, the result will be appended to the
-** head of the direct and indirect lists supplied.
-**
-** Passive lock removal: If lock has timed out, it will not be returned.
-** ### How much "logging" does RFC 2518 require?
-*/
-static dav_error * dav_fs_load_lock_record(dav_lockdb *lockdb, apr_datum_t key,
- int add_method,
- dav_lock_discovery **direct,
- dav_lock_indirect **indirect)
-{
- apr_pool_t *p = lockdb->info->pool;
- dav_error *err;
- apr_size_t offset = 0;
- int need_save = DAV_FALSE;
- apr_datum_t val = { 0 };
- dav_lock_discovery *dp;
- dav_lock_indirect *ip;
- dav_buffer buf = { 0 };
-
- if (add_method != DAV_APPEND_LIST) {
- *direct = NULL;
- *indirect = NULL;
- }
-
- if ((err = dav_fs_really_open_lockdb(lockdb)) != NULL) {
- /* ### add a higher-level error? */
- return err;
- }
-
- /*
- ** If we opened readonly and the db wasn't there, then there are no
- ** locks for this resource. Just exit.
- */
- if (lockdb->info->db == NULL)
- return NULL;
-
- if ((err = dav_dbm_fetch(lockdb->info->db, key, &val)) != NULL)
- return err;
-
- if (!val.dsize)
- return NULL;
-
- while (offset < val.dsize) {
- switch (*(val.dptr + offset++)) {
- case DAV_LOCK_DIRECT:
- /* Create and fill a dav_lock_discovery structure */
-
- dp = apr_pcalloc(p, sizeof(*dp));
- memcpy(dp, val.dptr + offset, sizeof(dp->f));
- offset += sizeof(dp->f);
- dp->locktoken = apr_palloc(p, sizeof(*dp->locktoken));
- memcpy(dp->locktoken, val.dptr + offset, sizeof(*dp->locktoken));
- offset += sizeof(*dp->locktoken);
- if (*(val.dptr + offset) == '\0') {
- ++offset;
- }
- else {
- dp->owner = apr_pstrdup(p, val.dptr + offset);
- offset += strlen(dp->owner) + 1;
- }
-
- if (*(val.dptr + offset) == '\0') {
- ++offset;
- }
- else {
- dp->auth_user = apr_pstrdup(p, val.dptr + offset);
- offset += strlen(dp->auth_user) + 1;
- }
-
- if (!dav_fs_lock_expired(dp->f.timeout)) {
- dp->next = *direct;
- *direct = dp;
- }
- else {
- need_save = DAV_TRUE;
-
- /* Remove timed-out locknull fm .locknull list */
- if (*key.dptr == DAV_TYPE_FNAME) {
- const char *fname = key.dptr + 1;
- apr_finfo_t finfo;
- apr_status_t rv;
-
- /* if we don't see the file, then it's a locknull */
- rv = apr_stat(&finfo, fname, APR_FINFO_MIN | APR_FINFO_LINK, p);
- if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) {
- if ((err = dav_fs_remove_locknull_member(p, fname, &buf)) != NULL) {
- /* ### push a higher-level description? */
- return err;
- }
- }
- }
- }
- break;
-
- case DAV_LOCK_INDIRECT:
- /* Create and fill a dav_lock_indirect structure */
-
- ip = apr_pcalloc(p, sizeof(*ip));
- ip->locktoken = apr_palloc(p, sizeof(*ip->locktoken));
- memcpy(ip->locktoken, val.dptr + offset, sizeof(*ip->locktoken));
- offset += sizeof(*ip->locktoken);
- memcpy(&ip->timeout, val.dptr + offset, sizeof(ip->timeout));
- offset += sizeof(ip->timeout);
- memcpy(&ip->key.dsize, val.dptr + offset, sizeof(ip->key.dsize)); /* length of datum */
- offset += sizeof(ip->key.dsize);
- ip->key.dptr = apr_palloc(p, ip->key.dsize);
- memcpy(ip->key.dptr, val.dptr + offset, ip->key.dsize);
- offset += ip->key.dsize;
-
- if (!dav_fs_lock_expired(ip->timeout)) {
- ip->next = *indirect;
- *indirect = ip;
- }
- else {
- need_save = DAV_TRUE;
- /* A locknull resource will never be locked indirectly */
- }
-
- break;
-
- default:
- dav_dbm_freedatum(lockdb->info->db, val);
-
- /* ### should use a computed_desc and insert corrupt token data */
- --offset;
- return dav_new_error(p,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_CORRUPT_DB,
- apr_psprintf(p,
- "The lock database was found to "
- "be corrupt. offset %"
- APR_SIZE_T_FMT ", c=%02x",
- offset, val.dptr[offset]));
- }
- }
-
- dav_dbm_freedatum(lockdb->info->db, val);
-
- /* Clean up this record if we found expired locks */
- /*
- ** ### shouldn't do this if we've been opened READONLY. elide the
- ** ### timed-out locks from the response, but don't save that info back
- */
- if (need_save == DAV_TRUE) {
- return dav_fs_save_lock_record(lockdb, key, *direct, *indirect);
- }
-
- return NULL;
-}
-
-/* resolve <indirect>, returning <*direct> */
-static dav_error * dav_fs_resolve(dav_lockdb *lockdb,
- dav_lock_indirect *indirect,
- dav_lock_discovery **direct,
- dav_lock_discovery **ref_dp,
- dav_lock_indirect **ref_ip)
-{
- dav_error *err;
- dav_lock_discovery *dir;
- dav_lock_indirect *ind;
-
- if ((err = dav_fs_load_lock_record(lockdb, indirect->key,
- DAV_CREATE_LIST,
- &dir, &ind)) != NULL) {
- /* ### insert a higher-level description? */
- return err;
- }
- if (ref_dp != NULL) {
- *ref_dp = dir;
- *ref_ip = ind;
- }
-
- for (; dir != NULL; dir = dir->next) {
- if (!dav_compare_locktoken(indirect->locktoken, dir->locktoken)) {
- *direct = dir;
- return NULL;
- }
- }
-
- /* No match found (but we should have found one!) */
-
- /* ### use a different description and/or error ID? */
- return dav_new_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_CORRUPT_DB,
- "The lock database was found to be corrupt. "
- "An indirect lock's direct lock could not "
- "be found.");
-}
-
-/* ---------------------------------------------------------------
-**
-** Property-related lock functions
-**
-*/
-
-/*
-** dav_fs_get_supportedlock: Returns a static string for all supportedlock
-** properties. I think we save more returning a static string than
-** constructing it every time, though it might look cleaner.
-*/
-static const char *dav_fs_get_supportedlock(const dav_resource *resource)
-{
- static const char supported[] = DEBUG_CR
- "<D:lockentry>" DEBUG_CR
- "<D:lockscope><D:exclusive/></D:lockscope>" DEBUG_CR
- "<D:locktype><D:write/></D:locktype>" DEBUG_CR
- "</D:lockentry>" DEBUG_CR
- "<D:lockentry>" DEBUG_CR
- "<D:lockscope><D:shared/></D:lockscope>" DEBUG_CR
- "<D:locktype><D:write/></D:locktype>" DEBUG_CR
- "</D:lockentry>" DEBUG_CR;
-
- return supported;
-}
-
-/* ---------------------------------------------------------------
-**
-** General lock functions
-**
-*/
-
-/* ---------------------------------------------------------------
-**
-** Functions dealing with lock-null resources
-**
-*/
-
-/*
-** dav_fs_load_locknull_list: Returns a dav_buffer dump of the locknull file
-** for the given directory.
-*/
-static dav_error * dav_fs_load_locknull_list(apr_pool_t *p, const char *dirpath,
- dav_buffer *pbuf)
-{
- apr_finfo_t finfo;
- apr_file_t *file = NULL;
- dav_error *err = NULL;
- apr_size_t amt;
- apr_status_t rv;
-
- dav_buffer_init(p, pbuf, dirpath);
-
- if (pbuf->buf[pbuf->cur_len - 1] == '/')
- pbuf->buf[--pbuf->cur_len] = '\0';
-
- dav_buffer_place(p, pbuf, "/" DAV_FS_STATE_DIR "/" DAV_FS_LOCK_NULL_FILE);
-
- /* reset this in case we leave w/o reading into the buffer */
- pbuf->cur_len = 0;
-
- if (apr_file_open(&file, pbuf->buf, APR_READ | APR_BINARY, APR_OS_DEFAULT,
- p) != APR_SUCCESS) {
- return NULL;
- }
-
- rv = apr_file_info_get(&finfo, APR_FINFO_SIZE, file);
- if (rv != APR_SUCCESS) {
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(p,
- "Opened but could not stat file %s",
- pbuf->buf));
- goto loaderror;
- }
-
- if (finfo.size != (apr_size_t)finfo.size) {
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(p,
- "Opened but rejected huge file %s",
- pbuf->buf));
- goto loaderror;
- }
-
- amt = (apr_size_t)finfo.size;
- dav_set_bufsize(p, pbuf, amt);
- if (apr_file_read(file, pbuf->buf, &amt) != APR_SUCCESS
- || amt != finfo.size) {
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(p,
- "Failure reading locknull file "
- "for %s", dirpath));
-
- /* just in case the caller disregards the returned error */
- pbuf->cur_len = 0;
- goto loaderror;
- }
-
- loaderror:
- apr_file_close(file);
- return err;
-}
-
-/*
-** dav_fs_save_locknull_list: Saves contents of pbuf into the
-** locknull file for dirpath.
-*/
-static dav_error * dav_fs_save_locknull_list(apr_pool_t *p, const char *dirpath,
- dav_buffer *pbuf)
-{
- const char *pathname;
- apr_file_t *file = NULL;
- dav_error *err = NULL;
- apr_size_t amt;
-
- if (pbuf->buf == NULL)
- return NULL;
-
- dav_fs_ensure_state_dir(p, dirpath);
- pathname = apr_pstrcat(p,
- dirpath,
- dirpath[strlen(dirpath) - 1] == '/' ? "" : "/",
- DAV_FS_STATE_DIR "/" DAV_FS_LOCK_NULL_FILE,
- NULL);
-
- if (pbuf->cur_len == 0) {
- /* delete the file if cur_len == 0 */
- if (apr_file_remove(pathname, p) != 0) {
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(p,
- "Error removing %s", pathname));
- }
- return NULL;
- }
-
- if (apr_file_open(&file, pathname,
- APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY,
- APR_OS_DEFAULT, p) != APR_SUCCESS) {
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(p,
- "Error opening %s for writing",
- pathname));
- }
-
- amt = pbuf->cur_len;
- if (apr_file_write(file, pbuf->buf, &amt) != APR_SUCCESS
- || amt != pbuf->cur_len) {
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(p,
- "Error writing %" APR_SIZE_T_FMT
- " bytes to %s",
- pbuf->cur_len, pathname));
- }
-
- apr_file_close(file);
- return err;
-}
-
-/*
-** dav_fs_remove_locknull_member: Removes filename from the locknull list
-** for directory path.
-*/
-static dav_error * dav_fs_remove_locknull_member(apr_pool_t *p,
- const char *filename,
- dav_buffer *pbuf)
-{
- dav_error *err;
- apr_size_t len;
- apr_size_t scanlen;
- char *scan;
- const char *scanend;
- char *dirpath = apr_pstrdup(p, filename);
- char *fname = strrchr(dirpath, '/');
- int dirty = 0;
-
- if (fname != NULL)
- *fname++ = '\0';
- else
- fname = dirpath;
- len = strlen(fname) + 1;
-
- if ((err = dav_fs_load_locknull_list(p, dirpath, pbuf)) != NULL) {
- /* ### add a higher level description? */
- return err;
- }
-
- for (scan = pbuf->buf, scanend = scan + pbuf->cur_len;
- scan < scanend;
- scan += scanlen) {
- scanlen = strlen(scan) + 1;
- if (len == scanlen && memcmp(fname, scan, scanlen) == 0) {
- pbuf->cur_len -= scanlen;
- memmove(scan, scan + scanlen, scanend - (scan + scanlen));
- dirty = 1;
- break;
- }
- }
-
- if (dirty) {
- if ((err = dav_fs_save_locknull_list(p, dirpath, pbuf)) != NULL) {
- /* ### add a higher level description? */
- return err;
- }
- }
-
- return NULL;
-}
-
-/* Note: used by dav_fs_repos.c */
-dav_error * dav_fs_get_locknull_members(
- const dav_resource *resource,
- dav_buffer *pbuf)
-{
- const char *dirpath;
-
- /* ### should test this result value... */
- (void) dav_fs_dir_file_name(resource, &dirpath, NULL);
- return dav_fs_load_locknull_list(dav_fs_pool(resource), dirpath, pbuf);
-}
-
-/* ### fold into append_lock? */
-/* ### take an optional buf parameter? */
-static dav_error * dav_fs_add_locknull_state(
- dav_lockdb *lockdb,
- const dav_resource *resource)
-{
- dav_buffer buf = { 0 };
- apr_pool_t *p = lockdb->info->pool;
- const char *dirpath;
- const char *fname;
- dav_error *err;
-
- /* ### should test this result value... */
- (void) dav_fs_dir_file_name(resource, &dirpath, &fname);
-
- if ((err = dav_fs_load_locknull_list(p, dirpath, &buf)) != NULL) {
- return dav_push_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not load .locknull file.", err);
- }
-
- dav_buffer_append(p, &buf, fname);
- buf.cur_len++; /* we want the null-term here */
-
- if ((err = dav_fs_save_locknull_list(p, dirpath, &buf)) != NULL) {
- return dav_push_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not save .locknull file.", err);
- }
-
- return NULL;
-}
-
-/*
-** dav_fs_remove_locknull_state: Given a request, check to see if r->filename
-** is/was a lock-null resource. If so, return it to an existant state.
-**
-** ### this function is broken... it doesn't check!
-**
-** In this implementation, this involves two things:
-** (a) remove it from the list in the appropriate .DAV/locknull file
-** (b) on *nix, convert the key from a filename to an inode.
-*/
-static dav_error * dav_fs_remove_locknull_state(
- dav_lockdb *lockdb,
- const dav_resource *resource)
-{
- dav_buffer buf = { 0 };
- dav_error *err;
- apr_pool_t *p = lockdb->info->pool;
- const char *pathname = dav_fs_pathname(resource);
-
- if ((err = dav_fs_remove_locknull_member(p, pathname, &buf)) != NULL) {
- /* ### add a higher-level description? */
- return err;
- }
-
- {
- dav_lock_discovery *ld;
- dav_lock_indirect *id;
- apr_datum_t key;
-
- /*
- ** Fetch the lock(s) that made the resource lock-null. Remove
- ** them under the filename key. Obtain the new inode key, and
- ** save the same lock information under it.
- */
- key = dav_fs_build_fname_key(p, pathname);
- if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &ld, &id)) != NULL) {
- /* ### insert a higher-level error description */
- return err;
- }
-
- if ((err = dav_fs_save_lock_record(lockdb, key, NULL, NULL)) != NULL) {
- /* ### insert a higher-level error description */
- return err;
- }
-
- key = dav_fs_build_key(p, resource);
- if ((err = dav_fs_save_lock_record(lockdb, key, ld, id)) != NULL) {
- /* ### insert a higher-level error description */
- return err;
- }
- }
-
- return NULL;
-}
-
-static dav_error * dav_fs_create_lock(dav_lockdb *lockdb,
- const dav_resource *resource,
- dav_lock **lock)
-{
- apr_datum_t key;
-
- key = dav_fs_build_key(lockdb->info->pool, resource);
-
- *lock = dav_fs_alloc_lock(lockdb,
- key,
- NULL);
-
- (*lock)->is_locknull = !resource->exists;
-
- return NULL;
-}
-
-static dav_error * dav_fs_get_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- int calltype,
- dav_lock **locks)
-{
- apr_pool_t *p = lockdb->info->pool;
- apr_datum_t key;
- dav_error *err;
- dav_lock *lock = NULL;
- dav_lock *newlock;
- dav_lock_discovery *dp;
- dav_lock_indirect *ip;
-
-#if DAV_DEBUG
- if (calltype == DAV_GETLOCKS_COMPLETE) {
- return dav_new_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "INTERNAL DESIGN ERROR: DAV_GETLOCKS_COMPLETE "
- "is not yet supported");
- }
-#endif
-
- key = dav_fs_build_key(p, resource);
- if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dp, &ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
-
- /* copy all direct locks to the result list */
- for (; dp != NULL; dp = dp->next) {
- newlock = dav_fs_alloc_lock(lockdb, key, dp->locktoken);
- newlock->is_locknull = !resource->exists;
- newlock->scope = dp->f.scope;
- newlock->type = dp->f.type;
- newlock->depth = dp->f.depth;
- newlock->timeout = dp->f.timeout;
- newlock->owner = dp->owner;
- newlock->auth_user = dp->auth_user;
-
- /* hook into the result list */
- newlock->next = lock;
- lock = newlock;
- }
-
- /* copy all the indirect locks to the result list. resolve as needed. */
- for (; ip != NULL; ip = ip->next) {
- newlock = dav_fs_alloc_lock(lockdb, ip->key, ip->locktoken);
- newlock->is_locknull = !resource->exists;
-
- if (calltype == DAV_GETLOCKS_RESOLVED) {
- if ((err = dav_fs_resolve(lockdb, ip, &dp, NULL, NULL)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
-
- newlock->scope = dp->f.scope;
- newlock->type = dp->f.type;
- newlock->depth = dp->f.depth;
- newlock->timeout = dp->f.timeout;
- newlock->owner = dp->owner;
- newlock->auth_user = dp->auth_user;
- }
- else {
- /* DAV_GETLOCKS_PARTIAL */
- newlock->rectype = DAV_LOCKREC_INDIRECT_PARTIAL;
- }
-
- /* hook into the result list */
- newlock->next = lock;
- lock = newlock;
- }
-
- *locks = lock;
- return NULL;
-}
-
-static dav_error * dav_fs_find_lock(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken *locktoken,
- int partial_ok,
- dav_lock **lock)
-{
- dav_error *err;
- apr_datum_t key;
- dav_lock_discovery *dp;
- dav_lock_indirect *ip;
-
- *lock = NULL;
-
- key = dav_fs_build_key(lockdb->info->pool, resource);
- if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dp, &ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
-
- for (; dp != NULL; dp = dp->next) {
- if (!dav_compare_locktoken(locktoken, dp->locktoken)) {
- *lock = dav_fs_alloc_lock(lockdb, key, locktoken);
- (*lock)->is_locknull = !resource->exists;
- (*lock)->scope = dp->f.scope;
- (*lock)->type = dp->f.type;
- (*lock)->depth = dp->f.depth;
- (*lock)->timeout = dp->f.timeout;
- (*lock)->owner = dp->owner;
- (*lock)->auth_user = dp->auth_user;
- return NULL;
- }
- }
-
- for (; ip != NULL; ip = ip->next) {
- if (!dav_compare_locktoken(locktoken, ip->locktoken)) {
- *lock = dav_fs_alloc_lock(lockdb, ip->key, locktoken);
- (*lock)->is_locknull = !resource->exists;
-
- /* ### nobody uses the resolving right now! */
- if (partial_ok) {
- (*lock)->rectype = DAV_LOCKREC_INDIRECT_PARTIAL;
- }
- else {
- (*lock)->rectype = DAV_LOCKREC_INDIRECT;
- if ((err = dav_fs_resolve(lockdb, ip, &dp,
- NULL, NULL)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
- (*lock)->scope = dp->f.scope;
- (*lock)->type = dp->f.type;
- (*lock)->depth = dp->f.depth;
- (*lock)->timeout = dp->f.timeout;
- (*lock)->owner = dp->owner;
- (*lock)->auth_user = dp->auth_user;
- }
- return NULL;
- }
- }
-
- return NULL;
-}
-
-static dav_error * dav_fs_has_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- int *locks_present)
-{
- dav_error *err;
- apr_datum_t key;
-
- *locks_present = 0;
-
- if ((err = dav_fs_really_open_lockdb(lockdb)) != NULL) {
- /* ### insert a higher-level error description */
- return err;
- }
-
- /*
- ** If we opened readonly and the db wasn't there, then there are no
- ** locks for this resource. Just exit.
- */
- if (lockdb->info->db == NULL)
- return NULL;
-
- key = dav_fs_build_key(lockdb->info->pool, resource);
-
- *locks_present = dav_dbm_exists(lockdb->info->db, key);
-
- return NULL;
-}
-
-static dav_error * dav_fs_append_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- int make_indirect,
- const dav_lock *lock)
-{
- apr_pool_t *p = lockdb->info->pool;
- dav_error *err;
- dav_lock_indirect *ip;
- dav_lock_discovery *dp;
- apr_datum_t key;
-
- key = dav_fs_build_key(lockdb->info->pool, resource);
- if ((err = dav_fs_load_lock_record(lockdb, key, 0, &dp, &ip)) != NULL) {
- /* ### maybe add in a higher-level description */
- return err;
- }
-
- /*
- ** ### when we store the lock more directly, we need to update
- ** ### lock->rectype and lock->is_locknull
- */
-
- if (make_indirect) {
- for (; lock != NULL; lock = lock->next) {
-
- /* ### this works for any <lock> rectype */
- dav_lock_indirect *newi = apr_pcalloc(p, sizeof(*newi));
-
- /* ### shut off the const warning for now */
- newi->locktoken = (dav_locktoken *)lock->locktoken;
- newi->timeout = lock->timeout;
- newi->key = lock->info->key;
- newi->next = ip;
- ip = newi;
- }
- }
- else {
- for (; lock != NULL; lock = lock->next) {
- /* create and link in the right kind of lock */
-
- if (lock->rectype == DAV_LOCKREC_DIRECT) {
- dav_lock_discovery *newd = apr_pcalloc(p, sizeof(*newd));
-
- newd->f.scope = lock->scope;
- newd->f.type = lock->type;
- newd->f.depth = lock->depth;
- newd->f.timeout = lock->timeout;
- /* ### shut off the const warning for now */
- newd->locktoken = (dav_locktoken *)lock->locktoken;
- newd->owner = lock->owner;
- newd->auth_user = lock->auth_user;
- newd->next = dp;
- dp = newd;
- }
- else {
- /* DAV_LOCKREC_INDIRECT(_PARTIAL) */
-
- dav_lock_indirect *newi = apr_pcalloc(p, sizeof(*newi));
-
- /* ### shut off the const warning for now */
- newi->locktoken = (dav_locktoken *)lock->locktoken;
- newi->key = lock->info->key;
- newi->next = ip;
- ip = newi;
- }
- }
- }
-
- if ((err = dav_fs_save_lock_record(lockdb, key, dp, ip)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- /* we have a special list for recording locknull resources */
- /* ### ack! this can add two copies to the locknull list */
- if (!resource->exists
- && (err = dav_fs_add_locknull_state(lockdb, resource)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- return NULL;
-}
-
-static dav_error * dav_fs_remove_lock(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken *locktoken)
-{
- dav_error *err;
- dav_buffer buf = { 0 };
- dav_lock_discovery *dh = NULL;
- dav_lock_indirect *ih = NULL;
- apr_datum_t key;
-
- key = dav_fs_build_key(lockdb->info->pool, resource);
-
- if (locktoken != NULL) {
- dav_lock_discovery *dp;
- dav_lock_discovery *dprev = NULL;
- dav_lock_indirect *ip;
- dav_lock_indirect *iprev = NULL;
-
- if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dh, &ih)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- for (dp = dh; dp != NULL; dp = dp->next) {
- if (dav_compare_locktoken(locktoken, dp->locktoken) == 0) {
- if (dprev)
- dprev->next = dp->next;
- else
- dh = dh->next;
- }
- dprev = dp;
- }
-
- for (ip = ih; ip != NULL; ip = ip->next) {
- if (dav_compare_locktoken(locktoken, ip->locktoken) == 0) {
- if (iprev)
- iprev->next = ip->next;
- else
- ih = ih->next;
- }
- iprev = ip;
- }
-
- }
-
- /* save the modified locks, or remove all locks (dh=ih=NULL). */
- if ((err = dav_fs_save_lock_record(lockdb, key, dh, ih)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- /*
- ** If this resource is a locknull resource AND no more locks exist,
- ** then remove the locknull member.
- **
- ** Note: remove_locknull_state() attempts to convert a locknull member
- ** to a real member. In this case, all locks are gone, so the
- ** locknull resource returns to the null state (ie. doesn't exist),
- ** so there is no need to update the lockdb (and it won't find
- ** any because a precondition is that none exist).
- */
- if (!resource->exists && dh == NULL && ih == NULL
- && (err = dav_fs_remove_locknull_member(lockdb->info->pool,
- dav_fs_pathname(resource),
- &buf)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- return NULL;
-}
-
-static int dav_fs_do_refresh(dav_lock_discovery *dp,
- const dav_locktoken_list *ltl,
- time_t new_time)
-{
- int dirty = 0;
-
- for (; ltl != NULL; ltl = ltl->next) {
- if (dav_compare_locktoken(dp->locktoken, ltl->locktoken) == 0)
- {
- dp->f.timeout = new_time;
- dirty = 1;
- }
- }
-
- return dirty;
-}
-
-static dav_error * dav_fs_refresh_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken_list *ltl,
- time_t new_time,
- dav_lock **locks)
-{
- dav_error *err;
- apr_datum_t key;
- dav_lock_discovery *dp;
- dav_lock_discovery *dp_scan;
- dav_lock_indirect *ip;
- int dirty = 0;
- dav_lock *newlock;
-
- *locks = NULL;
-
- key = dav_fs_build_key(lockdb->info->pool, resource);
- if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dp, &ip)) != NULL) {
- /* ### maybe add in a higher-level description */
- return err;
- }
-
- /* ### we should be refreshing direct AND (resolved) indirect locks! */
-
- /* refresh all of the direct locks on this resource */
- for (dp_scan = dp; dp_scan != NULL; dp_scan = dp_scan->next) {
- if (dav_fs_do_refresh(dp_scan, ltl, new_time)) {
- /* the lock was refreshed. return the lock. */
- newlock = dav_fs_alloc_lock(lockdb, key, dp_scan->locktoken);
- newlock->is_locknull = !resource->exists;
- newlock->scope = dp_scan->f.scope;
- newlock->type = dp_scan->f.type;
- newlock->depth = dp_scan->f.depth;
- newlock->timeout = dp_scan->f.timeout;
- newlock->owner = dp_scan->owner;
- newlock->auth_user = dp_scan->auth_user;
-
- newlock->next = *locks;
- *locks = newlock;
-
- dirty = 1;
- }
- }
-
- /* if we refreshed any locks, then save them back. */
- if (dirty
- && (err = dav_fs_save_lock_record(lockdb, key, dp, ip)) != NULL) {
- /* ### maybe add in a higher-level description */
- return err;
- }
-
- /* for each indirect lock, find its direct lock and refresh it. */
- for (; ip != NULL; ip = ip->next) {
- dav_lock_discovery *ref_dp;
- dav_lock_indirect *ref_ip;
-
- if ((err = dav_fs_resolve(lockdb, ip, &dp_scan,
- &ref_dp, &ref_ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
- if (dav_fs_do_refresh(dp_scan, ltl, new_time)) {
- /* the lock was refreshed. return the lock. */
- newlock = dav_fs_alloc_lock(lockdb, ip->key, dp->locktoken);
- newlock->is_locknull = !resource->exists;
- newlock->scope = dp->f.scope;
- newlock->type = dp->f.type;
- newlock->depth = dp->f.depth;
- newlock->timeout = dp->f.timeout;
- newlock->owner = dp->owner;
- newlock->auth_user = dp_scan->auth_user;
-
- newlock->next = *locks;
- *locks = newlock;
-
- /* save the (resolved) direct lock back */
- if ((err = dav_fs_save_lock_record(lockdb, ip->key, ref_dp,
- ref_ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
- }
- }
-
- return NULL;
-}
-
-
-const dav_hooks_locks dav_hooks_locks_fs =
-{
- dav_fs_get_supportedlock,
- dav_fs_parse_locktoken,
- dav_fs_format_locktoken,
- dav_fs_compare_locktoken,
- dav_fs_open_lockdb,
- dav_fs_close_lockdb,
- dav_fs_remove_locknull_state,
- dav_fs_create_lock,
- dav_fs_get_locks,
- dav_fs_find_lock,
- dav_fs_has_locks,
- dav_fs_append_locks,
- dav_fs_remove_lock,
- dav_fs_refresh_locks,
- NULL, /* lookup_resource */
-
- NULL /* ctx */
-};
diff --git a/modules/dav/fs/mod_dav_fs.c b/modules/dav/fs/mod_dav_fs.c
deleted file mode 100644
index fdc4073f2a..0000000000
--- a/modules/dav/fs/mod_dav_fs.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_strings.h"
-
-#include "mod_dav.h"
-#include "repos.h"
-
-/* per-server configuration */
-typedef struct {
- const char *lockdb_path;
-
-} dav_fs_server_conf;
-
-extern module AP_MODULE_DECLARE_DATA dav_fs_module;
-
-const char *dav_get_lockdb_path(const request_rec *r)
-{
- dav_fs_server_conf *conf;
-
- conf = ap_get_module_config(r->server->module_config, &dav_fs_module);
- return conf->lockdb_path;
-}
-
-static void *dav_fs_create_server_config(apr_pool_t *p, server_rec *s)
-{
- return apr_pcalloc(p, sizeof(dav_fs_server_conf));
-}
-
-static void *dav_fs_merge_server_config(apr_pool_t *p,
- void *base, void *overrides)
-{
- dav_fs_server_conf *parent = base;
- dav_fs_server_conf *child = overrides;
- dav_fs_server_conf *newconf;
-
- newconf = apr_pcalloc(p, sizeof(*newconf));
-
- newconf->lockdb_path =
- child->lockdb_path ? child->lockdb_path : parent->lockdb_path;
-
- return newconf;
-}
-
-/*
- * Command handler for the DAVLockDB directive, which is TAKE1
- */
-static const char *dav_fs_cmd_davlockdb(cmd_parms *cmd, void *config,
- const char *arg1)
-{
- dav_fs_server_conf *conf;
- conf = ap_get_module_config(cmd->server->module_config,
- &dav_fs_module);
- conf->lockdb_path = ap_server_root_relative(cmd->pool, arg1);
-
- if (!conf->lockdb_path) {
- return apr_pstrcat(cmd->pool, "Invalid DAVLockDB path ",
- arg1, NULL);
- }
-
- return NULL;
-}
-
-static const command_rec dav_fs_cmds[] =
-{
- /* per server */
- AP_INIT_TAKE1("DAVLockDB", dav_fs_cmd_davlockdb, NULL, RSRC_CONF,
- "specify a lock database"),
-
- { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- dav_hook_gather_propsets(dav_fs_gather_propsets, NULL, NULL,
- APR_HOOK_MIDDLE);
- dav_hook_find_liveprop(dav_fs_find_liveprop, NULL, NULL, APR_HOOK_MIDDLE);
- dav_hook_insert_all_liveprops(dav_fs_insert_all_liveprops, NULL, NULL,
- APR_HOOK_MIDDLE);
-
- dav_fs_register(p);
-}
-
-module AP_MODULE_DECLARE_DATA dav_fs_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- dav_fs_create_server_config, /* server config */
- dav_fs_merge_server_config, /* merge server config */
- dav_fs_cmds, /* command table */
- register_hooks, /* register hooks */
-};
diff --git a/modules/dav/fs/mod_dav_fs.dsp b/modules/dav/fs/mod_dav_fs.dsp
deleted file mode 100644
index 7f09587541..0000000000
--- a/modules/dav/fs/mod_dav_fs.dsp
+++ /dev/null
@@ -1,152 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_dav_fs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_dav_fs - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_dav_fs.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_dav_fs.mak" CFG="mod_dav_fs - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_dav_fs - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_dav_fs - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_dav_fs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_dav_fs_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs.so
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_dav_fs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_dav_fs_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs.so
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_dav_fs - Win32 Release"
-# Name "mod_dav_fs - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_dav_fs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\repos.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# Begin Source File
-
-SOURCE=.\repos.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_dav_fs.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_dav_fs - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav_fs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../../build/win32/win32ver.awk mod_dav_fs.so "dav_fs_module for Apache" ../../../include/ap_release.h > .\mod_dav_fs.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_dav_fs - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav_fs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../../build/win32/win32ver.awk mod_dav_fs.so "dav_fs_module for Apache" ../../../include/ap_release.h > .\mod_dav_fs.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/dav/fs/repos.c b/modules/dav/fs/repos.c
deleted file mode 100644
index fa28d0521c..0000000000
--- a/modules/dav/fs/repos.c
+++ /dev/null
@@ -1,2156 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV filesystem-based repository provider
-*/
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h> /* for sprintf() */
-#endif
-
-#include "httpd.h"
-#include "http_log.h"
-#include "http_protocol.h" /* for ap_set_* (in dav_fs_set_headers) */
-#include "http_request.h" /* for ap_update_mtime() */
-
-#include "mod_dav.h"
-#include "repos.h"
-
-
-/* to assist in debugging mod_dav's GET handling */
-#define DEBUG_GET_HANDLER 0
-
-#define DAV_FS_COPY_BLOCKSIZE 16384 /* copy 16k at a time */
-
-/* context needed to identify a resource */
-struct dav_resource_private {
- apr_pool_t *pool; /* memory storage pool associated with request */
- const char *pathname; /* full pathname to resource */
- apr_finfo_t finfo; /* filesystem info */
-};
-
-/* private context for doing a filesystem walk */
-typedef struct {
- /* the input walk parameters */
- const dav_walk_params *params;
-
- /* reused as we walk */
- dav_walk_resource wres;
-
- dav_resource res1;
- dav_resource_private info1;
- dav_buffer path1;
- dav_buffer uri_buf;
-
- /* MOVE/COPY need a secondary path */
- dav_resource res2;
- dav_resource_private info2;
- dav_buffer path2;
-
- dav_buffer locknull_buf;
-
-} dav_fs_walker_context;
-
-typedef struct {
- int is_move; /* is this a MOVE? */
- dav_buffer work_buf; /* handy buffer for copymove_file() */
-
- /* CALLBACK: this is a secondary resource managed specially for us */
- const dav_resource *res_dst;
-
- /* copied from dav_walk_params (they are invariant across the walk) */
- const dav_resource *root;
- apr_pool_t *pool;
-
-} dav_fs_copymove_walk_ctx;
-
-/* an internal WALKTYPE to walk hidden files (the .DAV directory) */
-#define DAV_WALKTYPE_HIDDEN 0x4000
-
-/* an internal WALKTYPE to call collections (again) after their contents */
-#define DAV_WALKTYPE_POSTFIX 0x8000
-
-#define DAV_CALLTYPE_POSTFIX 1000 /* a private call type */
-
-
-/* pull this in from the other source file */
-extern const dav_hooks_locks dav_hooks_locks_fs;
-
-/* forward-declare the hook structures */
-static const dav_hooks_repository dav_hooks_repository_fs;
-static const dav_hooks_liveprop dav_hooks_liveprop_fs;
-
-/*
-** The namespace URIs that we use. This list and the enumeration must
-** stay in sync.
-*/
-static const char * const dav_fs_namespace_uris[] =
-{
- "DAV:",
- "http://apache.org/dav/props/",
-
- NULL /* sentinel */
-};
-enum {
- DAV_FS_URI_DAV, /* the DAV: namespace URI */
- DAV_FS_URI_MYPROPS /* the namespace URI for our custom props */
-};
-
-/*
-** Does this platform support an executable flag?
-**
-** ### need a way to portably abstract this query
-*/
-#ifndef WIN32
-#define DAV_FS_HAS_EXECUTABLE
-#endif
-
-/*
-** The single property that we define (in the DAV_FS_URI_MYPROPS namespace)
-*/
-#define DAV_PROPID_FS_executable 1
-
-static const dav_liveprop_spec dav_fs_props[] =
-{
- /* standard DAV properties */
- {
- DAV_FS_URI_DAV,
- "creationdate",
- DAV_PROPID_creationdate,
- 0
- },
- {
- DAV_FS_URI_DAV,
- "getcontentlength",
- DAV_PROPID_getcontentlength,
- 0
- },
- {
- DAV_FS_URI_DAV,
- "getetag",
- DAV_PROPID_getetag,
- 0
- },
- {
- DAV_FS_URI_DAV,
- "getlastmodified",
- DAV_PROPID_getlastmodified,
- 0
- },
-
- /* our custom properties */
- {
- DAV_FS_URI_MYPROPS,
- "executable",
- DAV_PROPID_FS_executable,
- 0 /* handled special in dav_fs_is_writable */
- },
-
- { 0 } /* sentinel */
-};
-
-static const dav_liveprop_group dav_fs_liveprop_group =
-{
- dav_fs_props,
- dav_fs_namespace_uris,
- &dav_hooks_liveprop_fs
-};
-
-
-/* define the dav_stream structure for our use */
-struct dav_stream {
- apr_pool_t *p;
- apr_file_t *f;
- const char *pathname; /* we may need to remove it at close time */
-};
-
-/* returns an appropriate HTTP status code given an APR status code for a
- * failed I/O operation. ### use something besides 500? */
-#define MAP_IO2HTTP(e) (APR_STATUS_IS_ENOSPC(e) ? HTTP_INSUFFICIENT_STORAGE : \
- HTTP_INTERNAL_SERVER_ERROR)
-
-/* forward declaration for internal treewalkers */
-static dav_error * dav_fs_walk(const dav_walk_params *params, int depth,
- dav_response **response);
-static dav_error * dav_fs_internal_walk(const dav_walk_params *params,
- int depth, int is_move,
- const dav_resource *root_dst,
- dav_response **response);
-
-/* --------------------------------------------------------------------
-**
-** PRIVATE REPOSITORY FUNCTIONS
-*/
-apr_pool_t *dav_fs_pool(const dav_resource *resource)
-{
- return resource->info->pool;
-}
-
-const char *dav_fs_pathname(const dav_resource *resource)
-{
- return resource->info->pathname;
-}
-
-dav_error * dav_fs_dir_file_name(
- const dav_resource *resource,
- const char **dirpath_p,
- const char **fname_p)
-{
- dav_resource_private *ctx = resource->info;
-
- if (resource->collection) {
- *dirpath_p = ctx->pathname;
- if (fname_p != NULL)
- *fname_p = NULL;
- }
- else {
- const char *testpath, *rootpath;
- char *dirpath = ap_make_dirstr_parent(ctx->pool, ctx->pathname);
- apr_size_t dirlen = strlen(dirpath);
- apr_status_t rv = APR_SUCCESS;
-
- testpath = dirpath;
- if (dirlen > 0) {
- rv = apr_filepath_root(&rootpath, &testpath, 0, ctx->pool);
- }
-
- /* remove trailing slash from dirpath, unless it's a root path
- */
- if ((rv == APR_SUCCESS && testpath && *testpath)
- || rv == APR_ERELATIVE) {
- if (dirpath[dirlen - 1] == '/') {
- dirpath[dirlen - 1] = '\0';
- }
- }
-
- /* ###: Looks like a response could be appropriate
- *
- * APR_SUCCESS here tells us the dir is a root
- * APR_ERELATIVE told us we had no root (ok)
- * APR_EINCOMPLETE an incomplete testpath told us
- * there was no -file- name here!
- * APR_EBADPATH or other errors tell us this file
- * path is undecipherable
- */
-
- if (rv == APR_SUCCESS || rv == APR_ERELATIVE) {
- *dirpath_p = dirpath;
- if (fname_p != NULL)
- *fname_p = ctx->pathname + dirlen;
- }
- else {
- return dav_new_error(ctx->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "An incomplete/bad path was found in "
- "dav_fs_dir_file_name.");
- }
- }
-
- return NULL;
-}
-
-/* Note: picked up from ap_gm_timestr_822() */
-/* NOTE: buf must be at least DAV_TIMEBUF_SIZE chars in size */
-static void dav_format_time(int style, apr_time_t sec, char *buf)
-{
- apr_time_exp_t tms;
-
- /* ### what to do if fails? */
- (void) apr_time_exp_gmt(&tms, sec);
-
- if (style == DAV_STYLE_ISO8601) {
- /* ### should we use "-00:00" instead of "Z" ?? */
-
- /* 20 chars plus null term */
- sprintf(buf, "%.4d-%.2d-%.2dT%.2d:%.2d:%.2dZ",
- tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday,
- tms.tm_hour, tms.tm_min, tms.tm_sec);
- return;
- }
-
- /* RFC 822 date format; as strftime '%a, %d %b %Y %T GMT' */
-
- /* 29 chars plus null term */
- sprintf(buf,
- "%s, %.2d %s %d %.2d:%.2d:%.2d GMT",
- apr_day_snames[tms.tm_wday],
- tms.tm_mday, apr_month_snames[tms.tm_mon],
- tms.tm_year + 1900,
- tms.tm_hour, tms.tm_min, tms.tm_sec);
-}
-
-/* Copy or move src to dst; src_finfo is used to propagate permissions
- * bits across if non-NULL; dst_finfo must be non-NULL iff dst already
- * exists. */
-static dav_error * dav_fs_copymove_file(
- int is_move,
- apr_pool_t * p,
- const char *src,
- const char *dst,
- const apr_finfo_t *src_finfo,
- const apr_finfo_t *dst_finfo,
- dav_buffer *pbuf)
-{
- dav_buffer work_buf = { 0 };
- apr_file_t *inf = NULL;
- apr_file_t *outf = NULL;
- apr_status_t status;
- apr_fileperms_t perms;
-
- if (pbuf == NULL)
- pbuf = &work_buf;
-
- /* Determine permissions to use for destination */
- if (src_finfo && src_finfo->valid & APR_FINFO_PROT
- && src_finfo->protection & APR_UEXECUTE) {
- perms = src_finfo->protection;
-
- if (dst_finfo != NULL) {
- /* chmod it if it already exist */
- if (apr_file_perms_set(dst, perms)) {
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not set permissions on destination");
- }
- }
- }
- else {
- perms = APR_OS_DEFAULT;
- }
-
- dav_set_bufsize(p, pbuf, DAV_FS_COPY_BLOCKSIZE);
-
- if ((apr_file_open(&inf, src, APR_READ | APR_BINARY, APR_OS_DEFAULT, p))
- != APR_SUCCESS) {
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not open file for reading");
- }
-
- /* ### do we need to deal with the umask? */
- status = apr_file_open(&outf, dst, APR_WRITE | APR_CREATE | APR_TRUNCATE
- | APR_BINARY, perms, p);
- if (status != APR_SUCCESS) {
- apr_file_close(inf);
-
- return dav_new_error(p, MAP_IO2HTTP(status), 0,
- "Could not open file for writing");
- }
-
- while (1) {
- apr_size_t len = DAV_FS_COPY_BLOCKSIZE;
-
- status = apr_file_read(inf, pbuf->buf, &len);
- if (status != APR_SUCCESS && status != APR_EOF) {
- apr_file_close(inf);
- apr_file_close(outf);
-
- if (apr_file_remove(dst, p) != APR_SUCCESS) {
- /* ### ACK! Inconsistent state... */
-
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not delete output after read "
- "failure. Server is now in an "
- "inconsistent state.");
- }
-
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not read input file");
- }
-
- if (status == APR_EOF)
- break;
-
- /* write any bytes that were read */
- status = apr_file_write_full(outf, pbuf->buf, len, NULL);
- if (status != APR_SUCCESS) {
- apr_file_close(inf);
- apr_file_close(outf);
-
- if (apr_file_remove(dst, p) != APR_SUCCESS) {
- /* ### ACK! Inconsistent state... */
-
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not delete output after write "
- "failure. Server is now in an "
- "inconsistent state.");
- }
-
- return dav_new_error(p, MAP_IO2HTTP(status), 0,
- "Could not write output file");
- }
- }
-
- apr_file_close(inf);
- apr_file_close(outf);
-
- if (is_move && apr_file_remove(src, p) != APR_SUCCESS) {
- dav_error *err;
- int save_errno = errno; /* save the errno that got us here */
-
- if (apr_file_remove(dst, p) != APR_SUCCESS) {
- /* ### ACK. this creates an inconsistency. do more!? */
-
- /* ### use something besides 500? */
- /* Note that we use the latest errno */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not remove source or destination "
- "file. Server is now in an inconsistent "
- "state.");
- }
-
- /* ### use something besides 500? */
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not remove source file after move. "
- "Destination was removed to ensure consistency.");
- err->save_errno = save_errno;
- return err;
- }
-
- return NULL;
-}
-
-/* copy/move a file from within a state dir to another state dir */
-/* ### need more buffers to replace the pool argument */
-static dav_error * dav_fs_copymove_state(
- int is_move,
- apr_pool_t * p,
- const char *src_dir, const char *src_file,
- const char *dst_dir, const char *dst_file,
- dav_buffer *pbuf)
-{
- apr_finfo_t src_finfo; /* finfo for source file */
- apr_finfo_t dst_state_finfo; /* finfo for STATE directory */
- apr_status_t rv;
- const char *src;
- const char *dst;
-
- /* build the propset pathname for the source file */
- src = apr_pstrcat(p, src_dir, "/" DAV_FS_STATE_DIR "/", src_file, NULL);
-
- /* the source file doesn't exist */
- rv = apr_stat(&src_finfo, src, APR_FINFO_NORM, p);
- if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) {
- return NULL;
- }
-
- /* build the pathname for the destination state dir */
- dst = apr_pstrcat(p, dst_dir, "/" DAV_FS_STATE_DIR, NULL);
-
- /* ### do we need to deal with the umask? */
-
- /* ensure that it exists */
- rv = apr_dir_make(dst, APR_OS_DEFAULT, p);
- if (rv != APR_SUCCESS) {
- if (!APR_STATUS_IS_EEXIST(rv)) {
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not create internal state directory");
- }
- }
-
- /* get info about the state directory */
- rv = apr_stat(&dst_state_finfo, dst, APR_FINFO_NORM, p);
- if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) {
- /* Ack! Where'd it go? */
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "State directory disappeared");
- }
-
- /* The mkdir() may have failed because a *file* exists there already */
- if (dst_state_finfo.filetype != APR_DIR) {
- /* ### try to recover by deleting this file? (and mkdir again) */
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "State directory is actually a file");
- }
-
- /* append the target file to the state directory pathname */
- dst = apr_pstrcat(p, dst, "/", dst_file, NULL);
-
- /* copy/move the file now */
- if (is_move && src_finfo.device == dst_state_finfo.device) {
- /* simple rename is possible since it is on the same device */
- if (apr_file_rename(src, dst, p) != APR_SUCCESS) {
- /* ### use something besides 500? */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not move state file.");
- }
- }
- else
- {
- /* gotta copy (and delete) */
- return dav_fs_copymove_file(is_move, p, src, dst, NULL, NULL, pbuf);
- }
-
- return NULL;
-}
-
-static dav_error *dav_fs_copymoveset(int is_move, apr_pool_t *p,
- const dav_resource *src,
- const dav_resource *dst,
- dav_buffer *pbuf)
-{
- const char *src_dir;
- const char *src_file;
- const char *src_state1;
- const char *src_state2;
- const char *dst_dir;
- const char *dst_file;
- const char *dst_state1;
- const char *dst_state2;
- dav_error *err;
-
- /* Get directory and filename for resources */
- /* ### should test these result values... */
- (void) dav_fs_dir_file_name(src, &src_dir, &src_file);
- (void) dav_fs_dir_file_name(dst, &dst_dir, &dst_file);
-
- /* Get the corresponding state files for each resource */
- dav_dbm_get_statefiles(p, src_file, &src_state1, &src_state2);
- dav_dbm_get_statefiles(p, dst_file, &dst_state1, &dst_state2);
-#if DAV_DEBUG
- if ((src_state2 != NULL && dst_state2 == NULL) ||
- (src_state2 == NULL && dst_state2 != NULL)) {
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "DESIGN ERROR: dav_dbm_get_statefiles() "
- "returned inconsistent results.");
- }
-#endif
-
- err = dav_fs_copymove_state(is_move, p,
- src_dir, src_state1,
- dst_dir, dst_state1,
- pbuf);
-
- if (err == NULL && src_state2 != NULL) {
- err = dav_fs_copymove_state(is_move, p,
- src_dir, src_state2,
- dst_dir, dst_state2,
- pbuf);
-
- if (err != NULL) {
- /* ### CRAP. inconsistency. */
- /* ### should perform some cleanup at the target if we still
- ### have the original files */
-
- /* Change the error to reflect the bad server state. */
- err->status = HTTP_INTERNAL_SERVER_ERROR;
- err->desc =
- "Could not fully copy/move the properties. "
- "The server is now in an inconsistent state.";
- }
- }
-
- return err;
-}
-
-static dav_error *dav_fs_deleteset(apr_pool_t *p, const dav_resource *resource)
-{
- const char *dirpath;
- const char *fname;
- const char *state1;
- const char *state2;
- const char *pathname;
- apr_status_t status;
-
- /* Get directory, filename, and state-file names for the resource */
- /* ### should test this result value... */
- (void) dav_fs_dir_file_name(resource, &dirpath, &fname);
- dav_dbm_get_statefiles(p, fname, &state1, &state2);
-
- /* build the propset pathname for the file */
- pathname = apr_pstrcat(p,
- dirpath,
- "/" DAV_FS_STATE_DIR "/",
- state1,
- NULL);
-
- /* note: we may get ENOENT if the state dir is not present */
- if ((status = apr_file_remove(pathname, p)) != APR_SUCCESS
- && !APR_STATUS_IS_ENOENT(status)) {
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not remove properties.");
- }
-
- if (state2 != NULL) {
- /* build the propset pathname for the file */
- pathname = apr_pstrcat(p,
- dirpath,
- "/" DAV_FS_STATE_DIR "/",
- state2,
- NULL);
-
- if ((status = apr_file_remove(pathname, p)) != APR_SUCCESS
- && !APR_STATUS_IS_ENOENT(status)) {
- /* ### CRAP. only removed half. */
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not fully remove properties. "
- "The server is now in an inconsistent "
- "state.");
- }
- }
-
- return NULL;
-}
-
-/* --------------------------------------------------------------------
-**
-** REPOSITORY HOOK FUNCTIONS
-*/
-
-static dav_error * dav_fs_get_resource(
- request_rec *r,
- const char *root_dir,
- const char *label,
- int use_checked_in,
- dav_resource **result_resource)
-{
- dav_resource_private *ctx;
- dav_resource *resource;
- char *s;
- char *filename;
- apr_size_t len;
-
- /* ### optimize this into a single allocation! */
-
- /* Create private resource context descriptor */
- ctx = apr_pcalloc(r->pool, sizeof(*ctx));
- ctx->finfo = r->finfo;
-
- /* ### this should go away */
- ctx->pool = r->pool;
-
- /* Preserve case on OSes which fold canonical filenames */
-#if 0
- /* ### not available in Apache 2.0 yet */
- filename = r->case_preserved_filename;
-#else
- filename = r->filename;
-#endif
-
- /*
- ** If there is anything in the path_info, then this indicates that the
- ** entire path was not used to specify the file/dir. We want to append
- ** it onto the filename so that we get a "valid" pathname for null
- ** resources.
- */
- s = apr_pstrcat(r->pool, filename, r->path_info, NULL);
-
- /* make sure the pathname does not have a trailing "/" */
- len = strlen(s);
- if (len > 1 && s[len - 1] == '/') {
- s[len - 1] = '\0';
- }
- ctx->pathname = s;
-
- /* Create resource descriptor */
- resource = apr_pcalloc(r->pool, sizeof(*resource));
- resource->type = DAV_RESOURCE_TYPE_REGULAR;
- resource->info = ctx;
- resource->hooks = &dav_hooks_repository_fs;
- resource->pool = r->pool;
-
- /* make sure the URI does not have a trailing "/" */
- len = strlen(r->uri);
- if (len > 1 && r->uri[len - 1] == '/') {
- s = apr_pstrdup(r->pool, r->uri);
- s[len - 1] = '\0';
- resource->uri = s;
- }
- else {
- resource->uri = r->uri;
- }
-
- if (r->finfo.filetype != 0) {
- resource->exists = 1;
- resource->collection = r->finfo.filetype == APR_DIR;
-
- /* unused info in the URL will indicate a null resource */
-
- if (r->path_info != NULL && *r->path_info != '\0') {
- if (resource->collection) {
- /* only a trailing "/" is allowed */
- if (*r->path_info != '/' || r->path_info[1] != '\0') {
-
- /*
- ** This URL/filename represents a locknull resource or
- ** possibly a destination of a MOVE/COPY
- */
- resource->exists = 0;
- resource->collection = 0;
- }
- }
- else
- {
- /*
- ** The base of the path refers to a file -- nothing should
- ** be in path_info. The resource is simply an error: it
- ** can't be a null or a locknull resource.
- */
- return dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
- "The URL contains extraneous path "
- "components. The resource could not "
- "be identified.");
- }
-
- /* retain proper integrity across the structures */
- if (!resource->exists) {
- ctx->finfo.filetype = 0;
- }
- }
- }
-
- *result_resource = resource;
- return NULL;
-}
-
-static dav_error * dav_fs_get_parent_resource(const dav_resource *resource,
- dav_resource **result_parent)
-{
- dav_resource_private *ctx = resource->info;
- dav_resource_private *parent_ctx;
- dav_resource *parent_resource;
- apr_status_t rv;
- char *dirpath;
- const char *testroot;
- const char *testpath;
-
- /* If we're at the root of the URL space, then there is no parent. */
- if (strcmp(resource->uri, "/") == 0) {
- *result_parent = NULL;
- return NULL;
- }
-
- /* If given resource is root, then there is no parent.
- * Unless we can retrieve the filepath root, this is
- * intendend to fail. If we split the root and
- * no path info remains, then we also fail.
- */
- testpath = ctx->pathname;
- rv = apr_filepath_root(&testroot, &testpath, 0, ctx->pool);
- if ((rv != APR_SUCCESS && rv != APR_ERELATIVE)
- || !testpath || !*testpath) {
- *result_parent = NULL;
- return NULL;
- }
-
- /* ### optimize this into a single allocation! */
-
- /* Create private resource context descriptor */
- parent_ctx = apr_pcalloc(ctx->pool, sizeof(*parent_ctx));
-
- /* ### this should go away */
- parent_ctx->pool = ctx->pool;
-
- dirpath = ap_make_dirstr_parent(ctx->pool, ctx->pathname);
- if (strlen(dirpath) > 1 && dirpath[strlen(dirpath) - 1] == '/')
- dirpath[strlen(dirpath) - 1] = '\0';
- parent_ctx->pathname = dirpath;
-
- parent_resource = apr_pcalloc(ctx->pool, sizeof(*parent_resource));
- parent_resource->info = parent_ctx;
- parent_resource->collection = 1;
- parent_resource->hooks = &dav_hooks_repository_fs;
- parent_resource->pool = resource->pool;
-
- if (resource->uri != NULL) {
- char *uri = ap_make_dirstr_parent(ctx->pool, resource->uri);
- if (strlen(uri) > 1 && uri[strlen(uri) - 1] == '/')
- uri[strlen(uri) - 1] = '\0';
- parent_resource->uri = uri;
- }
-
- rv = apr_stat(&parent_ctx->finfo, parent_ctx->pathname,
- APR_FINFO_NORM, ctx->pool);
- if (rv == APR_SUCCESS || rv == APR_INCOMPLETE) {
- parent_resource->exists = 1;
- }
-
- *result_parent = parent_resource;
- return NULL;
-}
-
-static int dav_fs_is_same_resource(
- const dav_resource *res1,
- const dav_resource *res2)
-{
- dav_resource_private *ctx1 = res1->info;
- dav_resource_private *ctx2 = res2->info;
-
- if (res1->hooks != res2->hooks)
- return 0;
-
- if ((ctx1->finfo.filetype != 0) && (ctx2->finfo.filetype != 0)
- && (ctx1->finfo.valid & ctx2->finfo.valid & APR_FINFO_INODE)) {
- return ctx1->finfo.inode == ctx2->finfo.inode;
- }
- else {
- return strcmp(ctx1->pathname, ctx2->pathname) == 0;
- }
-}
-
-static int dav_fs_is_parent_resource(
- const dav_resource *res1,
- const dav_resource *res2)
-{
- dav_resource_private *ctx1 = res1->info;
- dav_resource_private *ctx2 = res2->info;
- apr_size_t len1 = strlen(ctx1->pathname);
- apr_size_t len2;
-
- if (res1->hooks != res2->hooks)
- return 0;
-
- /* it is safe to use ctx2 now */
- len2 = strlen(ctx2->pathname);
-
- return (len2 > len1
- && memcmp(ctx1->pathname, ctx2->pathname, len1) == 0
- && ctx2->pathname[len1] == '/');
-}
-
-static dav_error * dav_fs_open_stream(const dav_resource *resource,
- dav_stream_mode mode,
- dav_stream **stream)
-{
- apr_pool_t *p = resource->info->pool;
- dav_stream *ds = apr_pcalloc(p, sizeof(*ds));
- apr_int32_t flags;
- apr_status_t rv;
-
- switch (mode) {
- default:
- flags = APR_READ | APR_BINARY;
- break;
-
- case DAV_MODE_WRITE_TRUNC:
- flags = APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY;
- break;
- case DAV_MODE_WRITE_SEEKABLE:
- flags = APR_WRITE | APR_CREATE | APR_BINARY;
- break;
- }
-
- ds->p = p;
- ds->pathname = resource->info->pathname;
- rv = apr_file_open(&ds->f, ds->pathname, flags, APR_OS_DEFAULT, ds->p);
- if (rv != APR_SUCCESS) {
- return dav_new_error(p, MAP_IO2HTTP(rv), 0,
- "An error occurred while opening a resource.");
- }
-
- /* (APR registers cleanups for the fd with the pool) */
-
- *stream = ds;
- return NULL;
-}
-
-static dav_error * dav_fs_close_stream(dav_stream *stream, int commit)
-{
- apr_file_close(stream->f);
-
- if (!commit) {
- if (apr_file_remove(stream->pathname, stream->p) != APR_SUCCESS) {
- /* ### use a better description? */
- return dav_new_error(stream->p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "There was a problem removing (rolling "
- "back) the resource "
- "when it was being closed.");
- }
- }
-
- return NULL;
-}
-
-static dav_error * dav_fs_write_stream(dav_stream *stream,
- const void *buf, apr_size_t bufsize)
-{
- apr_status_t status;
-
- status = apr_file_write_full(stream->f, buf, bufsize, NULL);
- if (APR_STATUS_IS_ENOSPC(status)) {
- return dav_new_error(stream->p, HTTP_INSUFFICIENT_STORAGE, 0,
- "There is not enough storage to write to "
- "this resource.");
- }
- else if (status != APR_SUCCESS) {
- /* ### use something besides 500? */
- return dav_new_error(stream->p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "An error occurred while writing to a "
- "resource.");
- }
- return NULL;
-}
-
-static dav_error * dav_fs_seek_stream(dav_stream *stream, apr_off_t abs_pos)
-{
- if (apr_file_seek(stream->f, APR_SET, &abs_pos) != APR_SUCCESS) {
- /* ### should check whether apr_file_seek set abs_pos was set to the
- * correct position? */
- /* ### use something besides 500? */
- return dav_new_error(stream->p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not seek to specified position in the "
- "resource.");
- }
- return NULL;
-}
-
-
-#if DEBUG_GET_HANDLER
-
-/* only define set_headers() and deliver() for debug purposes */
-
-
-static dav_error * dav_fs_set_headers(request_rec *r,
- const dav_resource *resource)
-{
- /* ### this function isn't really used since we have a get_pathname */
- if (!resource->exists)
- return NULL;
-
- /* make sure the proper mtime is in the request record */
- ap_update_mtime(r, resource->info->finfo.mtime);
-
- /* ### note that these use r->filename rather than <resource> */
- ap_set_last_modified(r);
- ap_set_etag(r);
-
- /* we accept byte-ranges */
- apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
-
- /* set up the Content-Length header */
- ap_set_content_length(r, resource->info->finfo.size);
-
- /* ### how to set the content type? */
- /* ### until this is resolved, the Content-Type header is busted */
-
- return NULL;
-}
-
-static dav_error * dav_fs_deliver(const dav_resource *resource,
- ap_filter_t *output)
-{
- apr_pool_t *pool = resource->pool;
- apr_bucket_brigade *bb;
- apr_file_t *fd;
- apr_status_t status;
- apr_bucket *bkt;
-
- /* Check resource type */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR
- && resource->type != DAV_RESOURCE_TYPE_VERSION
- && resource->type != DAV_RESOURCE_TYPE_WORKING) {
- return dav_new_error(pool, HTTP_CONFLICT, 0,
- "Cannot GET this type of resource.");
- }
- if (resource->collection) {
- return dav_new_error(pool, HTTP_CONFLICT, 0,
- "There is no default response to GET for a "
- "collection.");
- }
-
- if ((status = apr_file_open(&fd, resource->info->pathname,
- APR_READ | APR_BINARY, 0,
- pool)) != APR_SUCCESS) {
- return dav_new_error(pool, HTTP_FORBIDDEN, 0,
- "File permissions deny server access.");
- }
-
- bb = apr_brigade_create(pool, output->c->bucket_alloc);
-
- /* ### this does not handle large files. but this is test code anyway */
- bkt = apr_bucket_file_create(fd, 0,
- (apr_size_t)resource->info->finfo.size,
- pool, output->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, bkt);
-
- bkt = apr_bucket_eos_create(output->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, bkt);
-
- if ((status = ap_pass_brigade(output, bb)) != APR_SUCCESS) {
- return dav_new_error(pool, HTTP_FORBIDDEN, 0,
- "Could not write contents to filter.");
- }
-
- return NULL;
-}
-
-#endif /* DEBUG_GET_HANDLER */
-
-
-static dav_error * dav_fs_create_collection(dav_resource *resource)
-{
- dav_resource_private *ctx = resource->info;
- apr_status_t status;
-
- status = apr_dir_make(ctx->pathname, APR_OS_DEFAULT, ctx->pool);
- if (APR_STATUS_IS_ENOSPC(status)) {
- return dav_new_error(ctx->pool, HTTP_INSUFFICIENT_STORAGE, 0,
- "There is not enough storage to create "
- "this collection.");
- }
- else if (APR_STATUS_IS_ENOENT(status)) {
- return dav_new_error(ctx->pool, HTTP_CONFLICT, 0,
- "Cannot create collection; intermediate "
- "collection does not exist.");
- }
- else if (status != APR_SUCCESS) {
- /* ### refine this error message? */
- return dav_new_error(ctx->pool, HTTP_FORBIDDEN, 0,
- "Unable to create collection.");
- }
-
- /* update resource state to show it exists as a collection */
- resource->exists = 1;
- resource->collection = 1;
-
- return NULL;
-}
-
-static dav_error * dav_fs_copymove_walker(dav_walk_resource *wres,
- int calltype)
-{
- dav_fs_copymove_walk_ctx *ctx = wres->walk_ctx;
- dav_resource_private *srcinfo = wres->resource->info;
- dav_resource_private *dstinfo = ctx->res_dst->info;
- dav_error *err = NULL;
-
- if (wres->resource->collection) {
- if (calltype == DAV_CALLTYPE_POSTFIX) {
- /* Postfix call for MOVE. delete the source dir.
- * Note: when copying, we do not enable the postfix-traversal.
- */
- /* ### we are ignoring any error here; what should we do? */
- (void) apr_dir_remove(srcinfo->pathname, ctx->pool);
- }
- else {
- /* copy/move of a collection. Create the new, target collection */
- if (apr_dir_make(dstinfo->pathname, APR_OS_DEFAULT,
- ctx->pool) != APR_SUCCESS) {
- /* ### assume it was a permissions problem */
- /* ### need a description here */
- err = dav_new_error(ctx->pool, HTTP_FORBIDDEN, 0, NULL);
- }
- }
- }
- else {
- err = dav_fs_copymove_file(ctx->is_move, ctx->pool,
- srcinfo->pathname, dstinfo->pathname,
- &srcinfo->finfo,
- ctx->res_dst->exists ? &dstinfo->finfo : NULL,
- &ctx->work_buf);
- /* ### push a higher-level description? */
- }
-
- /*
- ** If we have a "not so bad" error, then it might need to go into a
- ** multistatus response.
- **
- ** For a MOVE, it will always go into the multistatus. It could be
- ** that everything has been moved *except* for the root. Using a
- ** multistatus (with no errors for the other resources) will signify
- ** this condition.
- **
- ** For a COPY, we are traversing in a prefix fashion. If the root fails,
- ** then we can just bail out now.
- */
- if (err != NULL
- && !ap_is_HTTP_SERVER_ERROR(err->status)
- && (ctx->is_move
- || !dav_fs_is_same_resource(wres->resource, ctx->root))) {
- /* ### use errno to generate DAV:responsedescription? */
- dav_add_response(wres, err->status, NULL);
-
- /* the error is in the multistatus now. do not stop the traversal. */
- return NULL;
- }
-
- return err;
-}
-
-static dav_error *dav_fs_copymove_resource(
- int is_move,
- const dav_resource *src,
- const dav_resource *dst,
- int depth,
- dav_response **response)
-{
- dav_error *err = NULL;
- dav_buffer work_buf = { 0 };
-
- *response = NULL;
-
- /* if a collection, recursively copy/move it and its children,
- * including the state dirs
- */
- if (src->collection) {
- dav_walk_params params = { 0 };
- dav_response *multi_status;
-
- params.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_HIDDEN;
- params.func = dav_fs_copymove_walker;
- params.pool = src->info->pool;
- params.root = src;
-
- /* params.walk_ctx is managed by dav_fs_internal_walk() */
-
- /* postfix is needed for MOVE to delete source dirs */
- if (is_move)
- params.walk_type |= DAV_WALKTYPE_POSTFIX;
-
- /* note that we return the error OR the multistatus. never both */
-
- if ((err = dav_fs_internal_walk(&params, depth, is_move, dst,
- &multi_status)) != NULL) {
- /* on a "real" error, then just punt. nothing else to do. */
- return err;
- }
-
- if ((*response = multi_status) != NULL) {
- /* some multistatus responses exist. wrap them in a 207 */
- return dav_new_error(src->info->pool, HTTP_MULTI_STATUS, 0,
- "Error(s) occurred on some resources during "
- "the COPY/MOVE process.");
- }
-
- return NULL;
- }
-
- /* not a collection */
- if ((err = dav_fs_copymove_file(is_move, src->info->pool,
- src->info->pathname, dst->info->pathname,
- &src->info->finfo,
- dst->exists ? &dst->info->finfo : NULL,
- &work_buf)) != NULL) {
- /* ### push a higher-level description? */
- return err;
- }
-
- /* copy/move properties as well */
- return dav_fs_copymoveset(is_move, src->info->pool, src, dst, &work_buf);
-}
-
-static dav_error * dav_fs_copy_resource(
- const dav_resource *src,
- dav_resource *dst,
- int depth,
- dav_response **response)
-{
- dav_error *err;
-
-#if DAV_DEBUG
- if (src->hooks != dst->hooks) {
- /*
- ** ### strictly speaking, this is a design error; we should not
- ** ### have reached this point.
- */
- return dav_new_error(src->info->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "DESIGN ERROR: a mix of repositories "
- "was passed to copy_resource.");
- }
-#endif
-
- if ((err = dav_fs_copymove_resource(0, src, dst, depth,
- response)) == NULL) {
-
- /* update state of destination resource to show it exists */
- dst->exists = 1;
- dst->collection = src->collection;
- }
-
- return err;
-}
-
-static dav_error * dav_fs_move_resource(
- dav_resource *src,
- dav_resource *dst,
- dav_response **response)
-{
- dav_resource_private *srcinfo = src->info;
- dav_resource_private *dstinfo = dst->info;
- dav_error *err;
- int can_rename = 0;
-
-#if DAV_DEBUG
- if (src->hooks != dst->hooks) {
- /*
- ** ### strictly speaking, this is a design error; we should not
- ** ### have reached this point.
- */
- return dav_new_error(src->info->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "DESIGN ERROR: a mix of repositories "
- "was passed to move_resource.");
- }
-#endif
-
- /* determine whether a simple rename will work.
- * Assume source exists, else we wouldn't get called.
- */
- if (dstinfo->finfo.filetype != 0) {
- if (dstinfo->finfo.device == srcinfo->finfo.device) {
- /* target exists and is on the same device. */
- can_rename = 1;
- }
- }
- else {
- const char *dirpath;
- apr_finfo_t finfo;
- apr_status_t rv;
-
- /* destination does not exist, but the parent directory should,
- * so try it
- */
- dirpath = ap_make_dirstr_parent(dstinfo->pool, dstinfo->pathname);
- /*
- * XXX: If missing dev ... then what test?
- * Really need a try and failover for those platforms.
- *
- */
- rv = apr_stat(&finfo, dirpath, APR_FINFO_DEV, dstinfo->pool);
- if ((rv == APR_SUCCESS || rv == APR_INCOMPLETE)
- && (finfo.valid & srcinfo->finfo.valid & APR_FINFO_DEV)
- && (finfo.device == srcinfo->finfo.device)) {
- can_rename = 1;
- }
- }
-
- /* if we can't simply rename, then do it the hard way... */
- if (!can_rename) {
- if ((err = dav_fs_copymove_resource(1, src, dst, DAV_INFINITY,
- response)) == NULL) {
- /* update resource states */
- dst->exists = 1;
- dst->collection = src->collection;
- src->exists = 0;
- src->collection = 0;
- }
-
- return err;
- }
-
- /* a rename should work. do it, and move properties as well */
-
- /* no multistatus response */
- *response = NULL;
-
- /* ### APR has no rename? */
- if (apr_file_rename(srcinfo->pathname, dstinfo->pathname,
- srcinfo->pool) != APR_SUCCESS) {
- /* ### should have a better error than this. */
- return dav_new_error(srcinfo->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not rename resource.");
- }
-
- /* update resource states */
- dst->exists = 1;
- dst->collection = src->collection;
- src->exists = 0;
- src->collection = 0;
-
- if ((err = dav_fs_copymoveset(1, src->info->pool,
- src, dst, NULL)) == NULL) {
- /* no error. we're done. go ahead and return now. */
- return NULL;
- }
-
- /* error occurred during properties move; try to put resource back */
- if (apr_file_rename(dstinfo->pathname, srcinfo->pathname,
- srcinfo->pool) != APR_SUCCESS) {
- /* couldn't put it back! */
- return dav_push_error(srcinfo->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "The resource was moved, but a failure "
- "occurred during the move of its "
- "properties. The resource could not be "
- "restored to its original location. The "
- "server is now in an inconsistent state.",
- err);
- }
-
- /* update resource states again */
- src->exists = 1;
- src->collection = dst->collection;
- dst->exists = 0;
- dst->collection = 0;
-
- /* resource moved back, but properties may be inconsistent */
- return dav_push_error(srcinfo->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "The resource was moved, but a failure "
- "occurred during the move of its properties. "
- "The resource was moved back to its original "
- "location, but its properties may have been "
- "partially moved. The server may be in an "
- "inconsistent state.",
- err);
-}
-
-static dav_error * dav_fs_delete_walker(dav_walk_resource *wres, int calltype)
-{
- dav_resource_private *info = wres->resource->info;
-
- /* do not attempt to remove a null resource,
- * or a collection with children
- */
- if (wres->resource->exists &&
- (!wres->resource->collection || calltype == DAV_CALLTYPE_POSTFIX)) {
- /* try to remove the resource */
- apr_status_t result;
-
- result = wres->resource->collection
- ? apr_dir_remove(info->pathname, wres->pool)
- : apr_file_remove(info->pathname, wres->pool);
-
- /*
- ** If an error occurred, then add it to multistatus response.
- ** Note that we add it for the root resource, too. It is quite
- ** possible to delete the whole darn tree, yet fail on the root.
- **
- ** (also: remember we are deleting via a postfix traversal)
- */
- if (result != APR_SUCCESS) {
- /* ### assume there is a permissions problem */
-
- /* ### use errno to generate DAV:responsedescription? */
- dav_add_response(wres, HTTP_FORBIDDEN, NULL);
- }
- }
-
- return NULL;
-}
-
-static dav_error * dav_fs_remove_resource(dav_resource *resource,
- dav_response **response)
-{
- dav_resource_private *info = resource->info;
-
- *response = NULL;
-
- /* if a collection, recursively remove it and its children,
- * including the state dirs
- */
- if (resource->collection) {
- dav_walk_params params = { 0 };
- dav_error *err = NULL;
- dav_response *multi_status;
-
- params.walk_type = (DAV_WALKTYPE_NORMAL
- | DAV_WALKTYPE_HIDDEN
- | DAV_WALKTYPE_POSTFIX);
- params.func = dav_fs_delete_walker;
- params.pool = info->pool;
- params.root = resource;
-
- if ((err = dav_fs_walk(&params, DAV_INFINITY,
- &multi_status)) != NULL) {
- /* on a "real" error, then just punt. nothing else to do. */
- return err;
- }
-
- if ((*response = multi_status) != NULL) {
- /* some multistatus responses exist. wrap them in a 207 */
- return dav_new_error(info->pool, HTTP_MULTI_STATUS, 0,
- "Error(s) occurred on some resources during "
- "the deletion process.");
- }
-
- /* no errors... update resource state */
- resource->exists = 0;
- resource->collection = 0;
-
- return NULL;
- }
-
- /* not a collection; remove the file and its properties */
- if (apr_file_remove(info->pathname, info->pool) != APR_SUCCESS) {
- /* ### put a description in here */
- return dav_new_error(info->pool, HTTP_FORBIDDEN, 0, NULL);
- }
-
- /* update resource state */
- resource->exists = 0;
- resource->collection = 0;
-
- /* remove properties and return its result */
- return dav_fs_deleteset(info->pool, resource);
-}
-
-/* ### move this to dav_util? */
-/* Walk recursively down through directories, *
- * including lock-null resources as we go. */
-static dav_error * dav_fs_walker(dav_fs_walker_context *fsctx, int depth)
-{
- const dav_walk_params *params = fsctx->params;
- apr_pool_t *pool = params->pool;
- dav_error *err = NULL;
- int isdir = fsctx->res1.collection;
- apr_finfo_t dirent;
- apr_dir_t *dirp;
-
- /* ensure the context is prepared properly, then call the func */
- err = (*params->func)(&fsctx->wres,
- isdir
- ? DAV_CALLTYPE_COLLECTION
- : DAV_CALLTYPE_MEMBER);
- if (err != NULL) {
- return err;
- }
-
- if (depth == 0 || !isdir) {
- return NULL;
- }
-
- /* put a trailing slash onto the directory, in preparation for appending
- * files to it as we discovery them within the directory */
- dav_check_bufsize(pool, &fsctx->path1, DAV_BUFFER_PAD);
- fsctx->path1.buf[fsctx->path1.cur_len++] = '/';
- fsctx->path1.buf[fsctx->path1.cur_len] = '\0'; /* in pad area */
-
- /* if a secondary path is present, then do that, too */
- if (fsctx->path2.buf != NULL) {
- dav_check_bufsize(pool, &fsctx->path2, DAV_BUFFER_PAD);
- fsctx->path2.buf[fsctx->path2.cur_len++] = '/';
- fsctx->path2.buf[fsctx->path2.cur_len] = '\0'; /* in pad area */
- }
-
- /* Note: the URI should ALREADY have a trailing "/" */
-
- /* for this first pass of files, all resources exist */
- fsctx->res1.exists = 1;
-
- /* a file is the default; we'll adjust if we hit a directory */
- fsctx->res1.collection = 0;
- fsctx->res2.collection = 0;
-
- /* open and scan the directory */
- if ((apr_dir_open(&dirp, fsctx->path1.buf, pool)) != APR_SUCCESS) {
- /* ### need a better error */
- return dav_new_error(pool, HTTP_NOT_FOUND, 0, NULL);
- }
- while ((apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp)) == APR_SUCCESS) {
- apr_size_t len;
- apr_status_t status;
-
- len = strlen(dirent.name);
-
- /* avoid recursing into our current, parent, or state directories */
- if (dirent.name[0] == '.'
- && (len == 1 || (dirent.name[1] == '.' && len == 2))) {
- continue;
- }
-
- if (params->walk_type & DAV_WALKTYPE_AUTH) {
- /* ### need to authorize each file */
- /* ### example: .htaccess is normally configured to fail auth */
-
- /* stuff in the state directory is never authorized! */
- if (!strcmp(dirent.name, DAV_FS_STATE_DIR)) {
- continue;
- }
- }
- /* skip the state dir unless a HIDDEN is performed */
- if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
- && !strcmp(dirent.name, DAV_FS_STATE_DIR)) {
- continue;
- }
-
- /* append this file onto the path buffer (copy null term) */
- dav_buffer_place_mem(pool, &fsctx->path1, dirent.name, len + 1, 0);
-
-
- /* ### Optimize me, dirent can give us what we need! */
- status = apr_stat(&fsctx->info1.finfo, fsctx->path1.buf,
- APR_FINFO_NORM | APR_FINFO_LINK, pool);
- if (status != APR_SUCCESS && status != APR_INCOMPLETE) {
- /* woah! where'd it go? */
- /* ### should have a better error here */
- err = dav_new_error(pool, HTTP_NOT_FOUND, 0, NULL);
- break;
- }
-
- /* copy the file to the URI, too. NOTE: we will pad an extra byte
- for the trailing slash later. */
- dav_buffer_place_mem(pool, &fsctx->uri_buf, dirent.name, len + 1, 1);
-
- /* if there is a secondary path, then do that, too */
- if (fsctx->path2.buf != NULL) {
- dav_buffer_place_mem(pool, &fsctx->path2, dirent.name, len + 1, 0);
- }
-
- /* set up the (internal) pathnames for the two resources */
- fsctx->info1.pathname = fsctx->path1.buf;
- fsctx->info2.pathname = fsctx->path2.buf;
-
- /* set up the URI for the current resource */
- fsctx->res1.uri = fsctx->uri_buf.buf;
-
- /* ### for now, only process regular files (e.g. skip symlinks) */
- if (fsctx->info1.finfo.filetype == APR_REG) {
- /* call the function for the specified dir + file */
- if ((err = (*params->func)(&fsctx->wres,
- DAV_CALLTYPE_MEMBER)) != NULL) {
- /* ### maybe add a higher-level description? */
- break;
- }
- }
- else if (fsctx->info1.finfo.filetype == APR_DIR) {
- apr_size_t save_path_len = fsctx->path1.cur_len;
- apr_size_t save_uri_len = fsctx->uri_buf.cur_len;
- apr_size_t save_path2_len = fsctx->path2.cur_len;
-
- /* adjust length to incorporate the subdir name */
- fsctx->path1.cur_len += len;
- fsctx->path2.cur_len += len;
-
- /* adjust URI length to incorporate subdir and a slash */
- fsctx->uri_buf.cur_len += len + 1;
- fsctx->uri_buf.buf[fsctx->uri_buf.cur_len - 1] = '/';
- fsctx->uri_buf.buf[fsctx->uri_buf.cur_len] = '\0';
-
- /* switch over to a collection */
- fsctx->res1.collection = 1;
- fsctx->res2.collection = 1;
-
- /* recurse on the subdir */
- /* ### don't always want to quit on error from single child */
- if ((err = dav_fs_walker(fsctx, depth - 1)) != NULL) {
- /* ### maybe add a higher-level description? */
- break;
- }
-
- /* put the various information back */
- fsctx->path1.cur_len = save_path_len;
- fsctx->path2.cur_len = save_path2_len;
- fsctx->uri_buf.cur_len = save_uri_len;
-
- fsctx->res1.collection = 0;
- fsctx->res2.collection = 0;
-
- /* assert: res1.exists == 1 */
- }
- }
-
- /* ### check the return value of this? */
- apr_dir_close(dirp);
-
- if (err != NULL)
- return err;
-
- if (params->walk_type & DAV_WALKTYPE_LOCKNULL) {
- apr_size_t offset = 0;
-
- /* null terminate the directory name */
- fsctx->path1.buf[fsctx->path1.cur_len - 1] = '\0';
-
- /* Include any lock null resources found in this collection */
- fsctx->res1.collection = 1;
- if ((err = dav_fs_get_locknull_members(&fsctx->res1,
- &fsctx->locknull_buf)) != NULL) {
- /* ### maybe add a higher-level description? */
- return err;
- }
-
- /* put a slash back on the end of the directory */
- fsctx->path1.buf[fsctx->path1.cur_len - 1] = '/';
-
- /* these are all non-existant (files) */
- fsctx->res1.exists = 0;
- fsctx->res1.collection = 0;
- memset(&fsctx->info1.finfo, 0, sizeof(fsctx->info1.finfo));
-
- while (offset < fsctx->locknull_buf.cur_len) {
- apr_size_t len = strlen(fsctx->locknull_buf.buf + offset);
- dav_lock *locks = NULL;
-
- /*
- ** Append the locknull file to the paths and the URI. Note that
- ** we don't have to pad the URI for a slash since a locknull
- ** resource is not a collection.
- */
- dav_buffer_place_mem(pool, &fsctx->path1,
- fsctx->locknull_buf.buf + offset, len + 1, 0);
- dav_buffer_place_mem(pool, &fsctx->uri_buf,
- fsctx->locknull_buf.buf + offset, len + 1, 0);
- if (fsctx->path2.buf != NULL) {
- dav_buffer_place_mem(pool, &fsctx->path2,
- fsctx->locknull_buf.buf + offset,
- len + 1, 0);
- }
-
- /* set up the (internal) pathnames for the two resources */
- fsctx->info1.pathname = fsctx->path1.buf;
- fsctx->info2.pathname = fsctx->path2.buf;
-
- /* set up the URI for the current resource */
- fsctx->res1.uri = fsctx->uri_buf.buf;
-
- /*
- ** To prevent a PROPFIND showing an expired locknull
- ** resource, query the lock database to force removal
- ** of both the lock entry and .locknull, if necessary..
- ** Sure, the query in PROPFIND would do this.. after
- ** the locknull resource was already included in the
- ** return.
- **
- ** NOTE: we assume the caller has opened the lock database
- ** if they have provided DAV_WALKTYPE_LOCKNULL.
- */
- /* ### we should also look into opening it read-only and
- ### eliding timed-out items from the walk, yet leaving
- ### them in the locknull database until somebody opens
- ### the thing writable.
- */
- /* ### probably ought to use has_locks. note the problem
- ### mentioned above, though... we would traverse this as
- ### a locknull, but then a PROPFIND would load the lock
- ### info, causing a timeout and the locks would not be
- ### reported. Therefore, a null resource would be returned
- ### in the PROPFIND.
- ###
- ### alternative: just load unresolved locks. any direct
- ### locks will be timed out (correct). any indirect will
- ### not (correct; consider if a parent timed out -- the
- ### timeout routines do not walk and remove indirects;
- ### even the resolve func would probably fail when it
- ### tried to find a timed-out direct lock).
- */
- if ((err = dav_lock_query(params->lockdb, &fsctx->res1,
- &locks)) != NULL) {
- /* ### maybe add a higher-level description? */
- return err;
- }
-
- /* call the function for the specified dir + file */
- if (locks != NULL &&
- (err = (*params->func)(&fsctx->wres,
- DAV_CALLTYPE_LOCKNULL)) != NULL) {
- /* ### maybe add a higher-level description? */
- return err;
- }
-
- offset += len + 1;
- }
-
- /* reset the exists flag */
- fsctx->res1.exists = 1;
- }
-
- if (params->walk_type & DAV_WALKTYPE_POSTFIX) {
- /* replace the dirs' trailing slashes with null terms */
- fsctx->path1.buf[--fsctx->path1.cur_len] = '\0';
- fsctx->uri_buf.buf[--fsctx->uri_buf.cur_len] = '\0';
- if (fsctx->path2.buf != NULL) {
- fsctx->path2.buf[--fsctx->path2.cur_len] = '\0';
- }
-
- /* this is a collection which exists */
- fsctx->res1.collection = 1;
-
- return (*params->func)(&fsctx->wres, DAV_CALLTYPE_POSTFIX);
- }
-
- return NULL;
-}
-
-static dav_error * dav_fs_internal_walk(const dav_walk_params *params,
- int depth, int is_move,
- const dav_resource *root_dst,
- dav_response **response)
-{
- dav_fs_walker_context fsctx = { 0 };
- dav_error *err;
- dav_fs_copymove_walk_ctx cm_ctx = { 0 };
-
-#if DAV_DEBUG
- if ((params->walk_type & DAV_WALKTYPE_LOCKNULL) != 0
- && params->lockdb == NULL) {
- return dav_new_error(params->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "DESIGN ERROR: walker called to walk locknull "
- "resources, but a lockdb was not provided.");
- }
-#endif
-
- fsctx.params = params;
- fsctx.wres.walk_ctx = params->walk_ctx;
- fsctx.wres.pool = params->pool;
-
- /* ### zero out versioned, working, baselined? */
-
- fsctx.res1 = *params->root;
- fsctx.res1.pool = params->pool;
-
- fsctx.res1.info = &fsctx.info1;
- fsctx.info1 = *params->root->info;
-
- /* the pathname is stored in the path1 buffer */
- dav_buffer_init(params->pool, &fsctx.path1, fsctx.info1.pathname);
- fsctx.info1.pathname = fsctx.path1.buf;
-
- if (root_dst != NULL) {
- /* internal call from the COPY/MOVE code. set it up. */
-
- fsctx.wres.walk_ctx = &cm_ctx;
- cm_ctx.is_move = is_move;
- cm_ctx.res_dst = &fsctx.res2;
- cm_ctx.root = params->root;
- cm_ctx.pool = params->pool;
-
- fsctx.res2 = *root_dst;
- fsctx.res2.exists = 0;
- fsctx.res2.collection = 0;
- fsctx.res2.uri = NULL; /* we don't track this */
- fsctx.res2.pool = params->pool;
-
- fsctx.res2.info = &fsctx.info2;
- fsctx.info2 = *root_dst->info;
-
- /* res2 does not exist -- clear its finfo structure */
- memset(&fsctx.info2.finfo, 0, sizeof(fsctx.info2.finfo));
-
- /* the pathname is stored in the path2 buffer */
- dav_buffer_init(params->pool, &fsctx.path2, fsctx.info2.pathname);
- fsctx.info2.pathname = fsctx.path2.buf;
- }
-
- /* prep the URI buffer */
- dav_buffer_init(params->pool, &fsctx.uri_buf, params->root->uri);
-
- /* if we have a directory, then ensure the URI has a trailing "/" */
- if (fsctx.res1.collection
- && fsctx.uri_buf.buf[fsctx.uri_buf.cur_len - 1] != '/') {
-
- /* this will fall into the pad area */
- fsctx.uri_buf.buf[fsctx.uri_buf.cur_len++] = '/';
- fsctx.uri_buf.buf[fsctx.uri_buf.cur_len] = '\0';
- }
-
- /* the current resource's URI is stored in the uri_buf buffer */
- fsctx.res1.uri = fsctx.uri_buf.buf;
-
- /* point the callback's resource at our structure */
- fsctx.wres.resource = &fsctx.res1;
-
- /* always return the error, and any/all multistatus responses */
- err = dav_fs_walker(&fsctx, depth);
- *response = fsctx.wres.response;
- return err;
-}
-
-static dav_error * dav_fs_walk(const dav_walk_params *params, int depth,
- dav_response **response)
-{
- /* always return the error, and any/all multistatus responses */
- return dav_fs_internal_walk(params, depth, 0, NULL, response);
-}
-
-/* dav_fs_etag: Stolen from ap_make_etag. Creates a strong etag
- * for file path.
- * ### do we need to return weak tags sometimes?
- */
-static const char *dav_fs_getetag(const dav_resource *resource)
-{
- dav_resource_private *ctx = resource->info;
-
- if (!resource->exists)
- return apr_pstrdup(ctx->pool, "");
-
- if (ctx->finfo.filetype != 0) {
- return apr_psprintf(ctx->pool, "\"%lx-%lx-%lx\"",
- (unsigned long) ctx->finfo.inode,
- (unsigned long) ctx->finfo.size,
- (unsigned long) ctx->finfo.mtime);
- }
-
- return apr_psprintf(ctx->pool, "\"%lx\"", (unsigned long) ctx->finfo.mtime);
-}
-
-static const dav_hooks_repository dav_hooks_repository_fs =
-{
- DEBUG_GET_HANDLER, /* normally: special GET handling not required */
- dav_fs_get_resource,
- dav_fs_get_parent_resource,
- dav_fs_is_same_resource,
- dav_fs_is_parent_resource,
- dav_fs_open_stream,
- dav_fs_close_stream,
- dav_fs_write_stream,
- dav_fs_seek_stream,
-#if DEBUG_GET_HANDLER
- dav_fs_set_headers,
- dav_fs_deliver,
-#else
- NULL,
- NULL,
-#endif
- dav_fs_create_collection,
- dav_fs_copy_resource,
- dav_fs_move_resource,
- dav_fs_remove_resource,
- dav_fs_walk,
- dav_fs_getetag,
-};
-
-static dav_prop_insert dav_fs_insert_prop(const dav_resource *resource,
- int propid, dav_prop_insert what,
- apr_text_header *phdr)
-{
- const char *value;
- const char *s;
- apr_pool_t *p = resource->info->pool;
- const dav_liveprop_spec *info;
- int global_ns;
-
- /* an HTTP-date can be 29 chars plus a null term */
- /* a 64-bit size can be 20 chars plus a null term */
- char buf[DAV_TIMEBUF_SIZE];
-
- /*
- ** None of FS provider properties are defined if the resource does not
- ** exist. Just bail for this case.
- **
- ** Even though we state that the FS properties are not defined, the
- ** client cannot store dead values -- we deny that thru the is_writable
- ** hook function.
- */
- if (!resource->exists)
- return DAV_PROP_INSERT_NOTDEF;
-
- switch (propid) {
- case DAV_PROPID_creationdate:
- /*
- ** Closest thing to a creation date. since we don't actually
- ** perform the operations that would modify ctime (after we
- ** create the file), then we should be pretty safe here.
- */
- dav_format_time(DAV_STYLE_ISO8601,
- resource->info->finfo.ctime,
- buf);
- value = buf;
- break;
-
- case DAV_PROPID_getcontentlength:
- /* our property, but not defined on collection resources */
- if (resource->collection)
- return DAV_PROP_INSERT_NOTDEF;
-
- (void) sprintf(buf, "%" APR_OFF_T_FMT, resource->info->finfo.size);
- value = buf;
- break;
-
- case DAV_PROPID_getetag:
- value = dav_fs_getetag(resource);
- break;
-
- case DAV_PROPID_getlastmodified:
- dav_format_time(DAV_STYLE_RFC822,
- resource->info->finfo.mtime,
- buf);
- value = buf;
- break;
-
- case DAV_PROPID_FS_executable:
- /* our property, but not defined on collection resources */
- if (resource->collection)
- return DAV_PROP_INSERT_NOTDEF;
-
- /* our property, but not defined on this platform */
- if (!(resource->info->finfo.valid & APR_FINFO_UPROT))
- return DAV_PROP_INSERT_NOTDEF;
-
- /* the files are "ours" so we only need to check owner exec privs */
- if (resource->info->finfo.protection & APR_UEXECUTE)
- value = "T";
- else
- value = "F";
- break;
-
- default:
- /* ### what the heck was this property? */
- return DAV_PROP_INSERT_NOTDEF;
- }
-
- /* assert: value != NULL */
-
- /* get the information and global NS index for the property */
- global_ns = dav_get_liveprop_info(propid, &dav_fs_liveprop_group, &info);
-
- /* assert: info != NULL && info->name != NULL */
-
- /* DBG3("FS: inserting lp%d:%s (local %d)", ns, scan->name, scan->ns); */
-
- if (what == DAV_PROP_INSERT_VALUE) {
- s = apr_psprintf(p, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
- global_ns, info->name, value, global_ns, info->name);
- }
- else if (what == DAV_PROP_INSERT_NAME) {
- s = apr_psprintf(p, "<lp%d:%s/>" DEBUG_CR, global_ns, info->name);
- }
- else {
- /* assert: what == DAV_PROP_INSERT_SUPPORTED */
- s = apr_psprintf(p,
- "<D:supported-live-property D:name=\"%s\" "
- "D:namespace=\"%s\"/>" DEBUG_CR,
- info->name, dav_fs_namespace_uris[info->ns]);
- }
- apr_text_append(p, phdr, s);
-
- /* we inserted what was asked for */
- return what;
-}
-
-static int dav_fs_is_writable(const dav_resource *resource, int propid)
-{
- const dav_liveprop_spec *info;
-
-#ifdef DAV_FS_HAS_EXECUTABLE
- /* if we have the executable property, and this isn't a collection,
- then the property is writable. */
- if (propid == DAV_PROPID_FS_executable && !resource->collection)
- return 1;
-#endif
-
- (void) dav_get_liveprop_info(propid, &dav_fs_liveprop_group, &info);
- return info->is_writable;
-}
-
-static dav_error *dav_fs_patch_validate(const dav_resource *resource,
- const apr_xml_elem *elem,
- int operation,
- void **context,
- int *defer_to_dead)
-{
- const apr_text *cdata;
- const apr_text *f_cdata;
- char value;
- dav_elem_private *priv = elem->priv;
-
- if (priv->propid != DAV_PROPID_FS_executable) {
- *defer_to_dead = 1;
- return NULL;
- }
-
- if (operation == DAV_PROP_OP_DELETE) {
- return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
- "The 'executable' property cannot be removed.");
- }
-
- cdata = elem->first_cdata.first;
-
- /* ### hmm. this isn't actually looking at all the possible text items */
- f_cdata = elem->first_child == NULL
- ? NULL
- : elem->first_child->following_cdata.first;
-
- /* DBG3("name=%s cdata=%s f_cdata=%s",elem->name,cdata ? cdata->text : "[null]",f_cdata ? f_cdata->text : "[null]"); */
-
- if (cdata == NULL) {
- if (f_cdata == NULL) {
- return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
- "The 'executable' property expects a single "
- "character, valued 'T' or 'F'. There was no "
- "value submitted.");
- }
- cdata = f_cdata;
- }
- else if (f_cdata != NULL)
- goto too_long;
-
- if (cdata->next != NULL || strlen(cdata->text) != 1)
- goto too_long;
-
- value = cdata->text[0];
- if (value != 'T' && value != 'F') {
- return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
- "The 'executable' property expects a single "
- "character, valued 'T' or 'F'. The value "
- "submitted is invalid.");
- }
-
- *context = (void *)(value == 'T');
-
- return NULL;
-
- too_long:
- return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
- "The 'executable' property expects a single "
- "character, valued 'T' or 'F'. The value submitted "
- "has too many characters.");
-
-}
-
-static dav_error *dav_fs_patch_exec(const dav_resource *resource,
- const apr_xml_elem *elem,
- int operation,
- void *context,
- dav_liveprop_rollback **rollback_ctx)
-{
- int value = context != NULL;
- apr_fileperms_t perms = resource->info->finfo.protection;
- int old_value = (perms & APR_UEXECUTE) != 0;
-
- /* assert: prop == executable. operation == SET. */
-
- /* don't do anything if there is no change. no rollback info either. */
- /* DBG2("new value=%d (old=%d)", value, old_value); */
- if (value == old_value)
- return NULL;
-
- perms &= ~APR_UEXECUTE;
- if (value)
- perms |= APR_UEXECUTE;
-
- if (apr_file_perms_set(resource->info->pathname, perms) != APR_SUCCESS) {
- return dav_new_error(resource->info->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not set the executable flag of the "
- "target resource.");
- }
-
- /* update the resource and set up the rollback context */
- resource->info->finfo.protection = perms;
- *rollback_ctx = (dav_liveprop_rollback *)old_value;
-
- return NULL;
-}
-
-static void dav_fs_patch_commit(const dav_resource *resource,
- int operation,
- void *context,
- dav_liveprop_rollback *rollback_ctx)
-{
- /* nothing to do */
-}
-
-static dav_error *dav_fs_patch_rollback(const dav_resource *resource,
- int operation,
- void *context,
- dav_liveprop_rollback *rollback_ctx)
-{
- apr_fileperms_t perms = resource->info->finfo.protection & ~APR_UEXECUTE;
- int value = rollback_ctx != NULL;
-
- /* assert: prop == executable. operation == SET. */
-
- /* restore the executable bit */
- if (value)
- perms |= APR_UEXECUTE;
-
- if (apr_file_perms_set(resource->info->pathname, perms) != APR_SUCCESS) {
- return dav_new_error(resource->info->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "After a failure occurred, the resource's "
- "executable flag could not be restored.");
- }
-
- /* restore the resource's state */
- resource->info->finfo.protection = perms;
-
- return NULL;
-}
-
-
-static const dav_hooks_liveprop dav_hooks_liveprop_fs =
-{
- dav_fs_insert_prop,
- dav_fs_is_writable,
- dav_fs_namespace_uris,
- dav_fs_patch_validate,
- dav_fs_patch_exec,
- dav_fs_patch_commit,
- dav_fs_patch_rollback
-};
-
-static const dav_provider dav_fs_provider =
-{
- &dav_hooks_repository_fs,
- &dav_hooks_db_dbm,
- &dav_hooks_locks_fs,
- NULL, /* vsn */
- NULL, /* binding */
- NULL, /* search */
-
- NULL /* ctx */
-};
-
-void dav_fs_gather_propsets(apr_array_header_t *uris)
-{
-#ifdef DAV_FS_HAS_EXECUTABLE
- *(const char **)apr_array_push(uris) =
- "<http://apache.org/dav/propset/fs/1>";
-#endif
-}
-
-int dav_fs_find_liveprop(const dav_resource *resource,
- const char *ns_uri, const char *name,
- const dav_hooks_liveprop **hooks)
-{
- /* don't try to find any liveprops if this isn't "our" resource */
- if (resource->hooks != &dav_hooks_repository_fs)
- return 0;
- return dav_do_find_liveprop(ns_uri, name, &dav_fs_liveprop_group, hooks);
-}
-
-void dav_fs_insert_all_liveprops(request_rec *r, const dav_resource *resource,
- dav_prop_insert what, apr_text_header *phdr)
-{
- /* don't insert any liveprops if this isn't "our" resource */
- if (resource->hooks != &dav_hooks_repository_fs)
- return;
-
- if (!resource->exists) {
- /* a lock-null resource */
- /*
- ** ### technically, we should insert empty properties. dunno offhand
- ** ### what part of the spec said this, but it was essentially thus:
- ** ### "the properties should be defined, but may have no value".
- */
- return;
- }
-
- (void) dav_fs_insert_prop(resource, DAV_PROPID_creationdate,
- what, phdr);
- (void) dav_fs_insert_prop(resource, DAV_PROPID_getcontentlength,
- what, phdr);
- (void) dav_fs_insert_prop(resource, DAV_PROPID_getlastmodified,
- what, phdr);
- (void) dav_fs_insert_prop(resource, DAV_PROPID_getetag,
- what, phdr);
-
-#ifdef DAV_FS_HAS_EXECUTABLE
- /* Only insert this property if it is defined for this platform. */
- (void) dav_fs_insert_prop(resource, DAV_PROPID_FS_executable,
- what, phdr);
-#endif
-
- /* ### we know the others aren't defined as liveprops */
-}
-
-void dav_fs_register(apr_pool_t *p)
-{
- /* register the namespace URIs */
- dav_register_liveprop_group(p, &dav_fs_liveprop_group);
-
- /* register the repository provider */
- dav_register_provider(p, "filesystem", &dav_fs_provider);
-}
diff --git a/modules/dav/fs/repos.h b/modules/dav/fs/repos.h
deleted file mode 100644
index 7959ddbe09..0000000000
--- a/modules/dav/fs/repos.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** Declarations for the filesystem repository implementation
-*/
-
-#ifndef _DAV_FS_REPOS_H_
-#define _DAV_FS_REPOS_H_
-
-/* the subdirectory to hold all DAV-related information for a directory */
-#define DAV_FS_STATE_DIR ".DAV"
-#define DAV_FS_STATE_FILE_FOR_DIR ".state_for_dir"
-#define DAV_FS_LOCK_NULL_FILE ".locknull"
-
-
-/* ensure that our state subdirectory is present */
-void dav_fs_ensure_state_dir(apr_pool_t *p, const char *dirname);
-
-/* return the storage pool associated with a resource */
-apr_pool_t *dav_fs_pool(const dav_resource *resource);
-
-/* return the full pathname for a resource */
-const char *dav_fs_pathname(const dav_resource *resource);
-
-/* return the directory and filename for a resource */
-dav_error * dav_fs_dir_file_name(const dav_resource *resource,
- const char **dirpath,
- const char **fname);
-
-/* return the list of locknull members in this resource's directory */
-dav_error * dav_fs_get_locknull_members(const dav_resource *resource,
- dav_buffer *pbuf);
-
-
-/* DBM functions used by the repository and locking providers */
-extern const dav_hooks_db dav_hooks_db_dbm;
-
-dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,
- dav_db **pdb);
-void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname,
- const char **state1, const char **state2);
-dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key);
-dav_error * dav_dbm_store(dav_db *db, apr_datum_t key, apr_datum_t value);
-dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue);
-void dav_dbm_freedatum(dav_db *db, apr_datum_t data);
-int dav_dbm_exists(dav_db *db, apr_datum_t key);
-void dav_dbm_close(dav_db *db);
-
-/* where is the lock database located? */
-const char *dav_get_lockdb_path(const request_rec *r);
-
-const dav_hooks_locks *dav_fs_get_lock_hooks(request_rec *r);
-const dav_hooks_propdb *dav_fs_get_propdb_hooks(request_rec *r);
-
-void dav_fs_gather_propsets(apr_array_header_t *uris);
-int dav_fs_find_liveprop(const dav_resource *resource,
- const char *ns_uri, const char *name,
- const dav_hooks_liveprop **hooks);
-void dav_fs_insert_all_liveprops(request_rec *r, const dav_resource *resource,
- dav_prop_insert what, apr_text_header *phdr);
-
-void dav_fs_register(apr_pool_t *p);
-
-#endif /* _DAV_FS_REPOS_H_ */
diff --git a/modules/dav/lock/.cvsignore b/modules/dav/lock/.cvsignore
deleted file mode 100644
index 8a31aca1e9..0000000000
--- a/modules/dav/lock/.cvsignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/dav/lock/Makefile.in b/modules/dav/lock/Makefile.in
deleted file mode 100644
index 7c5c149d85..0000000000
--- a/modules/dav/lock/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/dav/lock/NWGNUmakefile b/modules/dav/lock/NWGNUmakefile
deleted file mode 100644
index 99dbc59283..0000000000
--- a/modules/dav/lock/NWGNUmakefile
+++ /dev/null
@@ -1,262 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(AP_WORK)/modules/dav/main \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = modDAVLK
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) DAV Database Lock Sub-Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = modDAVLK Thread
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/moddavlk.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_dav_lock.o \
- $(OBJDIR)/locks.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Apache2 \
- Libc \
- mod_dav \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- @$(APR)/aprlib.imp \
- @httpd.imp \
- @../main/dav.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- dav_lock_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\moddavlk.nlm $(INSTALL)\Apache2\modules
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/dav/lock/config6.m4 b/modules/dav/lock/config6.m4
deleted file mode 100644
index bc35ee3c03..0000000000
--- a/modules/dav/lock/config6.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(dav/lock)
-
-dav_lock_objects="mod_dav_lock.lo locks.lo"
-
-case "$host" in
- *os2*)
- # OS/2 DLLs must resolve all symbols at build time
- # and we need some from main DAV module
- dav_lock_objects="$dav_lock_objects ../main/mod_dav.la"
- ;;
-esac
-
-APACHE_MODULE(dav_lock, DAV provider for generic locking, $dav_lock_objects, , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/dav/lock/locks.c b/modules/dav/lock/locks.c
deleted file mode 100644
index 64e3ae9a05..0000000000
--- a/modules/dav/lock/locks.c
+++ /dev/null
@@ -1,1214 +0,0 @@
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Generic DAV lock implementation that a DAV provider can use.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_uuid.h"
-
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_log.h"
-
-#include "mod_dav.h"
-
-#include "locks.h"
-
-
-/* ---------------------------------------------------------------
- *
- * Lock database primitives
- *
- */
-
-/*
- * LOCK DATABASES
- *
- * Lockdiscovery information is stored in the single lock database specified
- * by the DAVGenericLockDB directive. Information about this db is stored in
- * the per-dir configuration.
- *
- * KEY
- *
- * The database is keyed by a key_type unsigned char (DAV_TYPE_FNAME)
- * followed by full path.
- *
- * VALUE
- *
- * The value consists of a list of elements.
- * DIRECT LOCK: [char (DAV_LOCK_DIRECT),
- * char (dav_lock_scope),
- * char (dav_lock_type),
- * int depth,
- * time_t expires,
- * apr_uuid_t locktoken,
- * char[] owner,
- * char[] auth_user]
- *
- * INDIRECT LOCK: [char (DAV_LOCK_INDIRECT),
- * apr_uuid_t locktoken,
- * time_t expires,
- * int key_size,
- * char[] key]
- * The key is to the collection lock that resulted in this indirect lock
- */
-
-#define DAV_TRUE 1
-#define DAV_FALSE 0
-
-#define DAV_CREATE_LIST 23
-#define DAV_APPEND_LIST 24
-
-/* Stored lock_discovery prefix */
-#define DAV_LOCK_DIRECT 1
-#define DAV_LOCK_INDIRECT 2
-
-#define DAV_TYPE_FNAME 11
-
-/* Use the opaquelock scheme for locktokens */
-struct dav_locktoken {
- apr_uuid_t uuid;
-};
-#define dav_compare_locktoken(plt1, plt2) \
- memcmp(&(plt1)->uuid, &(plt2)->uuid, sizeof((plt1)->uuid))
-
-
-/* #################################################################
- * ### keep these structures (internal) or move fully to dav_lock?
- */
-
-/*
- * We need to reliably size the fixed-length portion of
- * dav_lock_discovery; best to separate it into another
- * struct for a convenient sizeof, unless we pack lock_discovery.
- */
-typedef struct dav_lock_discovery_fixed
-{
- char scope;
- char type;
- int depth;
- time_t timeout;
-} dav_lock_discovery_fixed;
-
-typedef struct dav_lock_discovery
-{
- struct dav_lock_discovery_fixed f;
-
- dav_locktoken *locktoken;
- const char *owner; /* owner field from activelock */
- const char *auth_user; /* authenticated user who created the lock */
- struct dav_lock_discovery *next;
-} dav_lock_discovery;
-
-/* Indirect locks represent locks inherited from containing collections.
- * They reference the lock token for the collection the lock is
- * inherited from. A lock provider may also define a key to the
- * inherited lock, for fast datbase lookup. The key is opaque outside
- * the lock provider.
- */
-typedef struct dav_lock_indirect
-{
- dav_locktoken *locktoken;
- apr_datum_t key;
- struct dav_lock_indirect *next;
- time_t timeout;
-} dav_lock_indirect;
-
-/* ################################################################# */
-
-/*
- * Stored direct lock info - full lock_discovery length:
- * prefix + Fixed length + lock token + 2 strings + 2 nulls (one for each
- * string)
- */
-#define dav_size_direct(a) (1 + sizeof(dav_lock_discovery_fixed) \
- + sizeof(apr_uuid_t) \
- + ((a)->owner ? strlen((a)->owner) : 0) \
- + ((a)->auth_user ? strlen((a)->auth_user) : 0) \
- + 2)
-
-/* Stored indirect lock info - lock token and apr_datum_t */
-#define dav_size_indirect(a) (1 + sizeof(apr_uuid_t) \
- + sizeof(time_t) \
- + sizeof(int) + (a)->key.dsize)
-
-/*
- * The lockdb structure.
- *
- * The <db> field may be NULL, meaning one of two things:
- * 1) That we have not actually opened the underlying database (yet). The
- * <opened> field should be false.
- * 2) We opened it readonly and it wasn't present.
- *
- * The delayed opening (determined by <opened>) makes creating a lockdb
- * quick, while deferring the underlying I/O until it is actually required.
- *
- * We export the notion of a lockdb, but hide the details of it. Most
- * implementations will use a database of some kind, but it is certainly
- * possible that alternatives could be used.
- */
-struct dav_lockdb_private
-{
- request_rec *r; /* for accessing the uuid state */
- apr_pool_t *pool; /* a pool to use */
- const char *lockdb_path; /* where is the lock database? */
-
- int opened; /* we opened the database */
- apr_dbm_t *db; /* if non-NULL, the lock database */
-};
-
-typedef struct
-{
- dav_lockdb pub;
- dav_lockdb_private priv;
-} dav_lockdb_combined;
-
-/*
- * The private part of the lock structure.
- */
-struct dav_lock_private
-{
- apr_datum_t key; /* key into the lock database */
-};
-typedef struct
-{
- dav_lock pub;
- dav_lock_private priv;
- dav_locktoken token;
-} dav_lock_combined;
-
-/*
- * This must be forward-declared so the open_lockdb function can use it.
- */
-extern const dav_hooks_locks dav_hooks_locks_generic;
-
-static dav_error * dav_generic_dbm_new_error(apr_dbm_t *db, apr_pool_t *p,
- apr_status_t status)
-{
- int save_errno = errno;
- int errcode;
- const char *errstr;
- dav_error *err;
- char errbuf[200];
-
- if (status == APR_SUCCESS) {
- return NULL;
- }
-
- /* There might not be a <db> if we had problems creating it. */
- if (db == NULL) {
- errcode = 1;
- errstr = "Could not open property database.";
- }
- else {
- (void) apr_dbm_geterror(db, &errcode, errbuf, sizeof(errbuf));
- errstr = apr_pstrdup(p, errbuf);
- }
-
- err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, errcode, errstr);
- err->save_errno = save_errno;
- return err;
-}
-
-/* internal function for creating locks */
-static dav_lock *dav_generic_alloc_lock(dav_lockdb *lockdb, apr_datum_t key,
- const dav_locktoken *locktoken)
-{
- dav_lock_combined *comb;
-
- comb = apr_pcalloc(lockdb->info->pool, sizeof(*comb));
- comb->pub.rectype = DAV_LOCKREC_DIRECT;
- comb->pub.info = &comb->priv;
- comb->priv.key = key;
-
- if (locktoken == NULL) {
- comb->pub.locktoken = &comb->token;
- apr_uuid_get(&comb->token.uuid);
- }
- else {
- comb->pub.locktoken = locktoken;
- }
-
- return &comb->pub;
-}
-
-/*
- * dav_generic_parse_locktoken
- *
- * Parse an opaquelocktoken URI into a locktoken.
- */
-static dav_error * dav_generic_parse_locktoken(apr_pool_t *p,
- const char *char_token,
- dav_locktoken **locktoken_p)
-{
- dav_locktoken *locktoken;
-
- if (ap_strstr_c(char_token, "opaquelocktoken:") != char_token) {
- return dav_new_error(p,
- HTTP_BAD_REQUEST, DAV_ERR_LOCK_UNK_STATE_TOKEN,
- "The lock token uses an unknown State-token "
- "format and could not be parsed.");
- }
- char_token += 16;
-
- locktoken = apr_pcalloc(p, sizeof(*locktoken));
- if (apr_uuid_parse(&locktoken->uuid, char_token)) {
- return dav_new_error(p, HTTP_BAD_REQUEST, DAV_ERR_LOCK_PARSE_TOKEN,
- "The opaquelocktoken has an incorrect format "
- "and could not be parsed.");
- }
-
- *locktoken_p = locktoken;
- return NULL;
-}
-
-/*
- * dav_generic_format_locktoken
- *
- * Generate the URI for a locktoken
- */
-static const char *dav_generic_format_locktoken(apr_pool_t *p,
- const dav_locktoken *locktoken)
-{
- char buf[APR_UUID_FORMATTED_LENGTH + 1];
-
- apr_uuid_format(buf, &locktoken->uuid);
- return apr_pstrcat(p, "opaquelocktoken:", buf, NULL);
-}
-
-/*
- * dav_generic_compare_locktoken
- *
- * Determine whether two locktokens are the same
- */
-static int dav_generic_compare_locktoken(const dav_locktoken *lt1,
- const dav_locktoken *lt2)
-{
- return dav_compare_locktoken(lt1, lt2);
-}
-
-/*
- * dav_generic_really_open_lockdb:
- *
- * If the database hasn't been opened yet, then open the thing.
- */
-static dav_error * dav_generic_really_open_lockdb(dav_lockdb *lockdb)
-{
- dav_error *err;
- apr_status_t status;
-
- if (lockdb->info->opened) {
- return NULL;
- }
-
- status = apr_dbm_open(&lockdb->info->db, lockdb->info->lockdb_path,
- lockdb->ro ? APR_DBM_READONLY : APR_DBM_RWCREATE,
- APR_OS_DEFAULT, lockdb->info->pool);
-
- if (status) {
- err = dav_generic_dbm_new_error(lockdb->info->db, lockdb->info->pool,
- status);
- return dav_push_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_OPENDB,
- "Could not open the lock database.",
- err);
- }
-
- /* all right. it is opened now. */
- lockdb->info->opened = 1;
-
- return NULL;
-}
-
-/*
- * dav_generic_open_lockdb:
- *
- * "open" the lock database, as specified in the global server configuration.
- * If force is TRUE, then the database is opened now, rather than lazily.
- *
- * Note that only one can be open read/write.
- */
-static dav_error * dav_generic_open_lockdb(request_rec *r, int ro, int force,
- dav_lockdb **lockdb)
-{
- dav_lockdb_combined *comb;
-
- comb = apr_pcalloc(r->pool, sizeof(*comb));
- comb->pub.hooks = &dav_hooks_locks_generic;
- comb->pub.ro = ro;
- comb->pub.info = &comb->priv;
- comb->priv.r = r;
- comb->priv.pool = r->pool;
-
- comb->priv.lockdb_path = dav_generic_get_lockdb_path(r);
- if (comb->priv.lockdb_path == NULL) {
- return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_NO_DB,
- "A lock database was not specified with the "
- "DAVGenericLockDB directive. One must be "
- "specified to use the locking functionality.");
- }
-
- /* done initializing. return it. */
- *lockdb = &comb->pub;
-
- if (force) {
- /* ### add a higher-level comment? */
- return dav_generic_really_open_lockdb(*lockdb);
- }
-
- return NULL;
-}
-
-/*
- * dav_generic_close_lockdb:
- *
- * Close it. Duh.
- */
-static void dav_generic_close_lockdb(dav_lockdb *lockdb)
-{
- if (lockdb->info->db != NULL) {
- apr_dbm_close(lockdb->info->db);
- }
- lockdb->info->opened = 0;
-}
-
-/*
- * dav_generic_build_key
- *
- * Given a pathname, build a DAV_TYPE_FNAME lock database key.
- */
-static apr_datum_t dav_generic_build_key(apr_pool_t *p,
- const dav_resource *resource)
-{
- apr_datum_t key;
- const char *pathname = resource->uri;
-
- /* ### does this allocation have a proper lifetime? need to check */
- /* ### can we use a buffer for this? */
-
- /* size is TYPE + pathname + null */
- key.dsize = strlen(pathname) + 2;
- key.dptr = apr_palloc(p, key.dsize);
- *key.dptr = DAV_TYPE_FNAME;
- memcpy(key.dptr + 1, pathname, key.dsize - 1);
- if (key.dptr[key.dsize - 2] == '/')
- key.dptr[--key.dsize - 1] = '\0';
- return key;
-}
-
-/*
- * dav_generic_lock_expired: return 1 (true) if the given timeout is in the
- * past or present (the lock has expired), or 0 (false) if in the future
- * (the lock has not yet expired).
- */
-static int dav_generic_lock_expired(time_t expires)
-{
- return expires != DAV_TIMEOUT_INFINITE && time(NULL) >= expires;
-}
-
-/*
- * dav_generic_save_lock_record: Saves the lock information specified in the
- * direct and indirect lock lists about path into the lock database.
- * If direct and indirect == NULL, the key is removed.
- */
-static dav_error * dav_generic_save_lock_record(dav_lockdb *lockdb,
- apr_datum_t key,
- dav_lock_discovery *direct,
- dav_lock_indirect *indirect)
-{
- dav_error *err;
- apr_status_t status;
- apr_datum_t val = { 0 };
- char *ptr;
- dav_lock_discovery *dp = direct;
- dav_lock_indirect *ip = indirect;
-
-#if DAV_DEBUG
- if (lockdb->ro) {
- return dav_new_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "INTERNAL DESIGN ERROR: the lockdb was opened "
- "readonly, but an attempt to save locks was "
- "performed.");
- }
-#endif
-
- if ((err = dav_generic_really_open_lockdb(lockdb)) != NULL) {
- /* ### add a higher-level error? */
- return err;
- }
-
- /* If nothing to save, delete key */
- if (dp == NULL && ip == NULL) {
- /* don't fail if the key is not present */
- /* ### but what about other errors? */
- apr_dbm_delete(lockdb->info->db, key);
- return NULL;
- }
-
- while(dp) {
- val.dsize += dav_size_direct(dp);
- dp = dp->next;
- }
- while(ip) {
- val.dsize += dav_size_indirect(ip);
- ip = ip->next;
- }
-
- /* ### can this be apr_palloc() ? */
- /* ### hmmm.... investigate the use of a buffer here */
- ptr = val.dptr = apr_pcalloc(lockdb->info->pool, val.dsize);
- dp = direct;
- ip = indirect;
-
- while(dp) {
- /* Direct lock - lock_discovery struct follows */
- *ptr++ = DAV_LOCK_DIRECT;
- memcpy(ptr, dp, sizeof(dp->f)); /* Fixed portion of struct */
- ptr += sizeof(dp->f);
- memcpy(ptr, dp->locktoken, sizeof(*dp->locktoken));
- ptr += sizeof(*dp->locktoken);
- if (dp->owner == NULL) {
- *ptr++ = '\0';
- }
- else {
- memcpy(ptr, dp->owner, strlen(dp->owner) + 1);
- ptr += strlen(dp->owner) + 1;
- }
- if (dp->auth_user == NULL) {
- *ptr++ = '\0';
- }
- else {
- memcpy(ptr, dp->auth_user, strlen(dp->auth_user) + 1);
- ptr += strlen(dp->auth_user) + 1;
- }
-
- dp = dp->next;
- }
-
- while(ip) {
- /* Indirect lock prefix */
- *ptr++ = DAV_LOCK_INDIRECT;
-
- memcpy(ptr, ip->locktoken, sizeof(*ip->locktoken));
- ptr += sizeof(*ip->locktoken);
-
- memcpy(ptr, &ip->timeout, sizeof(ip->timeout));
- ptr += sizeof(ip->timeout);
-
- memcpy(ptr, &ip->key.dsize, sizeof(ip->key.dsize));
- ptr += sizeof(ip->key.dsize);
-
- memcpy(ptr, ip->key.dptr, ip->key.dsize);
- ptr += ip->key.dsize;
-
- ip = ip->next;
- }
-
- if ((status = apr_dbm_store(lockdb->info->db, key, val)) != APR_SUCCESS) {
- /* ### more details? add an error_id? */
- err = dav_generic_dbm_new_error(lockdb->info->db, lockdb->info->pool,
- status);
- return dav_push_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_SAVE_LOCK,
- "Could not save lock information.",
- err);
- }
-
- return NULL;
-}
-
-/*
- * dav_load_lock_record: Reads lock information about key from lock db;
- * creates linked lists of the direct and indirect locks.
- *
- * If add_method = DAV_APPEND_LIST, the result will be appended to the
- * head of the direct and indirect lists supplied.
- *
- * Passive lock removal: If lock has timed out, it will not be returned.
- * ### How much "logging" does RFC 2518 require?
- */
-static dav_error * dav_generic_load_lock_record(dav_lockdb *lockdb,
- apr_datum_t key,
- int add_method,
- dav_lock_discovery **direct,
- dav_lock_indirect **indirect)
-{
- apr_pool_t *p = lockdb->info->pool;
- dav_error *err;
- apr_status_t status;
- apr_size_t offset = 0;
- int need_save = DAV_FALSE;
- apr_datum_t val = { 0 };
- dav_lock_discovery *dp;
- dav_lock_indirect *ip;
-
- if (add_method != DAV_APPEND_LIST) {
- *direct = NULL;
- *indirect = NULL;
- }
-
- if ((err = dav_generic_really_open_lockdb(lockdb)) != NULL) {
- /* ### add a higher-level error? */
- return err;
- }
-
- /*
- * If we opened readonly and the db wasn't there, then there are no
- * locks for this resource. Just exit.
- */
- if (lockdb->info->db == NULL) {
- return NULL;
- }
-
- if ((status = apr_dbm_fetch(lockdb->info->db, key, &val)) != APR_SUCCESS) {
- return dav_generic_dbm_new_error(lockdb->info->db, p, status);
- }
-
- if (!val.dsize) {
- return NULL;
- }
-
- while (offset < val.dsize) {
- switch (*(val.dptr + offset++)) {
- case DAV_LOCK_DIRECT:
- /* Create and fill a dav_lock_discovery structure */
-
- dp = apr_pcalloc(p, sizeof(*dp));
-
- /* Copy the dav_lock_discovery_fixed portion */
- memcpy(dp, val.dptr + offset, sizeof(dp->f));
- offset += sizeof(dp->f);
-
- /* Copy the lock token. */
- dp->locktoken = apr_palloc(p, sizeof(*dp->locktoken));
- memcpy(dp->locktoken, val.dptr + offset, sizeof(*dp->locktoken));
- offset += sizeof(*dp->locktoken);
-
- /* Do we have an owner field? */
- if (*(val.dptr + offset) == '\0') {
- ++offset;
- }
- else {
- apr_size_t len = strlen(val.dptr + offset);
- dp->owner = apr_pstrmemdup(p, val.dptr + offset, len);
- offset += len + 1;
- }
-
- if (*(val.dptr + offset) == '\0') {
- ++offset;
- }
- else {
- apr_size_t len = strlen(val.dptr + offset);
- dp->auth_user = apr_pstrmemdup(p, val.dptr + offset, len);
- offset += len + 1;
- }
-
- if (!dav_generic_lock_expired(dp->f.timeout)) {
- dp->next = *direct;
- *direct = dp;
- }
- else {
- need_save = DAV_TRUE;
- }
- break;
-
- case DAV_LOCK_INDIRECT:
- /* Create and fill a dav_lock_indirect structure */
-
- ip = apr_pcalloc(p, sizeof(*ip));
- ip->locktoken = apr_palloc(p, sizeof(*ip->locktoken));
- memcpy(ip->locktoken, val.dptr + offset, sizeof(*ip->locktoken));
- offset += sizeof(*ip->locktoken);
- memcpy(&ip->timeout, val.dptr + offset, sizeof(ip->timeout));
- offset += sizeof(ip->timeout);
- /* length of datum */
- ip->key.dsize = *((int *) (val.dptr + offset));
- offset += sizeof(ip->key.dsize);
- ip->key.dptr = apr_palloc(p, ip->key.dsize);
- memcpy(ip->key.dptr, val.dptr + offset, ip->key.dsize);
- offset += ip->key.dsize;
-
- if (!dav_generic_lock_expired(ip->timeout)) {
- ip->next = *indirect;
- *indirect = ip;
- }
- else {
- need_save = DAV_TRUE;
- }
-
- break;
-
- default:
- apr_dbm_freedatum(lockdb->info->db, val);
-
- /* ### should use a computed_desc and insert corrupt token data */
- --offset;
- return dav_new_error(p,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_CORRUPT_DB,
- apr_psprintf(p,
- "The lock database was found to "
- "be corrupt. offset %"
- APR_SIZE_T_FMT ", c=%02x",
- offset, val.dptr[offset]));
- }
- }
-
- apr_dbm_freedatum(lockdb->info->db, val);
-
- /* Clean up this record if we found expired locks */
- /*
- * ### shouldn't do this if we've been opened READONLY. elide the
- * ### timed-out locks from the response, but don't save that info back
- */
- if (need_save == DAV_TRUE) {
- return dav_generic_save_lock_record(lockdb, key, *direct, *indirect);
- }
-
- return NULL;
-}
-
-/* resolve <indirect>, returning <*direct> */
-static dav_error * dav_generic_resolve(dav_lockdb *lockdb,
- dav_lock_indirect *indirect,
- dav_lock_discovery **direct,
- dav_lock_discovery **ref_dp,
- dav_lock_indirect **ref_ip)
-{
- dav_error *err;
- dav_lock_discovery *dir;
- dav_lock_indirect *ind;
-
- if ((err = dav_generic_load_lock_record(lockdb, indirect->key,
- DAV_CREATE_LIST,
- &dir, &ind)) != NULL) {
- /* ### insert a higher-level description? */
- return err;
- }
- if (ref_dp != NULL) {
- *ref_dp = dir;
- *ref_ip = ind;
- }
-
- for (; dir != NULL; dir = dir->next) {
- if (!dav_compare_locktoken(indirect->locktoken, dir->locktoken)) {
- *direct = dir;
- return NULL;
- }
- }
-
- /* No match found (but we should have found one!) */
-
- /* ### use a different description and/or error ID? */
- return dav_new_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_LOCK_CORRUPT_DB,
- "The lock database was found to be corrupt. "
- "An indirect lock's direct lock could not "
- "be found.");
-}
-
-/* ---------------------------------------------------------------
- *
- * Property-related lock functions
- *
- */
-
-/*
- * dav_generic_get_supportedlock: Returns a static string for all
- * supportedlock properties. I think we save more returning a static string
- * than constructing it every time, though it might look cleaner.
- */
-static const char *dav_generic_get_supportedlock(const dav_resource *resource)
-{
- static const char supported[] = DEBUG_CR
- "<D:lockentry>" DEBUG_CR
- "<D:lockscope><D:exclusive/></D:lockscope>" DEBUG_CR
- "<D:locktype><D:write/></D:locktype>" DEBUG_CR
- "</D:lockentry>" DEBUG_CR
- "<D:lockentry>" DEBUG_CR
- "<D:lockscope><D:shared/></D:lockscope>" DEBUG_CR
- "<D:locktype><D:write/></D:locktype>" DEBUG_CR
- "</D:lockentry>" DEBUG_CR;
-
- return supported;
-}
-
-/* ---------------------------------------------------------------
- *
- * General lock functions
- *
- */
-
-static dav_error * dav_generic_remove_locknull_state(dav_lockdb *lockdb,
- const dav_resource *resource)
-{
- /* We don't need to do anything. */
- return NULL;
-}
-
-static dav_error * dav_generic_create_lock(dav_lockdb *lockdb,
- const dav_resource *resource,
- dav_lock **lock)
-{
- apr_datum_t key;
-
- key = dav_generic_build_key(lockdb->info->pool, resource);
-
- *lock = dav_generic_alloc_lock(lockdb, key, NULL);
-
- (*lock)->is_locknull = !resource->exists;
-
- return NULL;
-}
-
-static dav_error * dav_generic_get_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- int calltype,
- dav_lock **locks)
-{
- apr_pool_t *p = lockdb->info->pool;
- apr_datum_t key;
- dav_error *err;
- dav_lock *lock = NULL;
- dav_lock *newlock;
- dav_lock_discovery *dp;
- dav_lock_indirect *ip;
-
-#if DAV_DEBUG
- if (calltype == DAV_GETLOCKS_COMPLETE) {
- return dav_new_error(lockdb->info->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "INTERNAL DESIGN ERROR: DAV_GETLOCKS_COMPLETE "
- "is not yet supported");
- }
-#endif
-
- key = dav_generic_build_key(p, resource);
- if ((err = dav_generic_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dp, &ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
-
- /* copy all direct locks to the result list */
- for (; dp != NULL; dp = dp->next) {
- newlock = dav_generic_alloc_lock(lockdb, key, dp->locktoken);
- newlock->is_locknull = !resource->exists;
- newlock->scope = dp->f.scope;
- newlock->type = dp->f.type;
- newlock->depth = dp->f.depth;
- newlock->timeout = dp->f.timeout;
- newlock->owner = dp->owner;
- newlock->auth_user = dp->auth_user;
-
- /* hook into the result list */
- newlock->next = lock;
- lock = newlock;
- }
-
- /* copy all the indirect locks to the result list. resolve as needed. */
- for (; ip != NULL; ip = ip->next) {
- newlock = dav_generic_alloc_lock(lockdb, ip->key, ip->locktoken);
- newlock->is_locknull = !resource->exists;
-
- if (calltype == DAV_GETLOCKS_RESOLVED) {
- err = dav_generic_resolve(lockdb, ip, &dp, NULL, NULL);
- if (err != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
-
- newlock->scope = dp->f.scope;
- newlock->type = dp->f.type;
- newlock->depth = dp->f.depth;
- newlock->timeout = dp->f.timeout;
- newlock->owner = dp->owner;
- newlock->auth_user = dp->auth_user;
- }
- else {
- /* DAV_GETLOCKS_PARTIAL */
- newlock->rectype = DAV_LOCKREC_INDIRECT_PARTIAL;
- }
-
- /* hook into the result list */
- newlock->next = lock;
- lock = newlock;
- }
-
- *locks = lock;
- return NULL;
-}
-
-static dav_error * dav_generic_find_lock(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken *locktoken,
- int partial_ok,
- dav_lock **lock)
-{
- dav_error *err;
- apr_datum_t key;
- dav_lock_discovery *dp;
- dav_lock_indirect *ip;
-
- *lock = NULL;
-
- key = dav_generic_build_key(lockdb->info->pool, resource);
- if ((err = dav_generic_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dp, &ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
-
- for (; dp != NULL; dp = dp->next) {
- if (!dav_compare_locktoken(locktoken, dp->locktoken)) {
- *lock = dav_generic_alloc_lock(lockdb, key, locktoken);
- (*lock)->is_locknull = !resource->exists;
- (*lock)->scope = dp->f.scope;
- (*lock)->type = dp->f.type;
- (*lock)->depth = dp->f.depth;
- (*lock)->timeout = dp->f.timeout;
- (*lock)->owner = dp->owner;
- (*lock)->auth_user = dp->auth_user;
- return NULL;
- }
- }
-
- for (; ip != NULL; ip = ip->next) {
- if (!dav_compare_locktoken(locktoken, ip->locktoken)) {
- *lock = dav_generic_alloc_lock(lockdb, ip->key, locktoken);
- (*lock)->is_locknull = !resource->exists;
-
- /* ### nobody uses the resolving right now! */
- if (partial_ok) {
- (*lock)->rectype = DAV_LOCKREC_INDIRECT_PARTIAL;
- }
- else {
- (*lock)->rectype = DAV_LOCKREC_INDIRECT;
- if ((err = dav_generic_resolve(lockdb, ip, &dp,
- NULL, NULL)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
- (*lock)->scope = dp->f.scope;
- (*lock)->type = dp->f.type;
- (*lock)->depth = dp->f.depth;
- (*lock)->timeout = dp->f.timeout;
- (*lock)->owner = dp->owner;
- (*lock)->auth_user = dp->auth_user;
- }
- return NULL;
- }
- }
-
- return NULL;
-}
-
-static dav_error * dav_generic_has_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- int *locks_present)
-{
- dav_error *err;
- apr_datum_t key;
-
- *locks_present = 0;
-
- if ((err = dav_generic_really_open_lockdb(lockdb)) != NULL) {
- /* ### insert a higher-level error description */
- return err;
- }
-
- /*
- * If we opened readonly and the db wasn't there, then there are no
- * locks for this resource. Just exit.
- */
- if (lockdb->info->db == NULL)
- return NULL;
-
- key = dav_generic_build_key(lockdb->info->pool, resource);
-
- *locks_present = apr_dbm_exists(lockdb->info->db, key);
-
- return NULL;
-}
-
-static dav_error * dav_generic_append_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- int make_indirect,
- const dav_lock *lock)
-{
- apr_pool_t *p = lockdb->info->pool;
- dav_error *err;
- dav_lock_indirect *ip;
- dav_lock_discovery *dp;
- apr_datum_t key;
-
- key = dav_generic_build_key(lockdb->info->pool, resource);
-
- err = dav_generic_load_lock_record(lockdb, key, 0, &dp, &ip);
- if (err != NULL) {
- /* ### maybe add in a higher-level description */
- return err;
- }
-
- /*
- * ### when we store the lock more directly, we need to update
- * ### lock->rectype and lock->is_locknull
- */
-
- if (make_indirect) {
- for (; lock != NULL; lock = lock->next) {
-
- /* ### this works for any <lock> rectype */
- dav_lock_indirect *newi = apr_pcalloc(p, sizeof(*newi));
-
- /* ### shut off the const warning for now */
- newi->locktoken = (dav_locktoken *)lock->locktoken;
- newi->timeout = lock->timeout;
- newi->key = lock->info->key;
- newi->next = ip;
- ip = newi;
- }
- }
- else {
- for (; lock != NULL; lock = lock->next) {
- /* create and link in the right kind of lock */
-
- if (lock->rectype == DAV_LOCKREC_DIRECT) {
- dav_lock_discovery *newd = apr_pcalloc(p, sizeof(*newd));
-
- newd->f.scope = lock->scope;
- newd->f.type = lock->type;
- newd->f.depth = lock->depth;
- newd->f.timeout = lock->timeout;
- /* ### shut off the const warning for now */
- newd->locktoken = (dav_locktoken *)lock->locktoken;
- newd->owner = lock->owner;
- newd->auth_user = lock->auth_user;
- newd->next = dp;
- dp = newd;
- }
- else {
- /* DAV_LOCKREC_INDIRECT(_PARTIAL) */
-
- dav_lock_indirect *newi = apr_pcalloc(p, sizeof(*newi));
-
- /* ### shut off the const warning for now */
- newi->locktoken = (dav_locktoken *)lock->locktoken;
- newi->key = lock->info->key;
- newi->next = ip;
- ip = newi;
- }
- }
- }
-
- if ((err = dav_generic_save_lock_record(lockdb, key, dp, ip)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- return NULL;
-}
-
-static dav_error * dav_generic_remove_lock(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken *locktoken)
-{
- dav_error *err;
- dav_lock_discovery *dh = NULL;
- dav_lock_indirect *ih = NULL;
- apr_datum_t key;
-
- key = dav_generic_build_key(lockdb->info->pool, resource);
-
- if (locktoken != NULL) {
- dav_lock_discovery *dp;
- dav_lock_discovery *dprev = NULL;
- dav_lock_indirect *ip;
- dav_lock_indirect *iprev = NULL;
-
- if ((err = dav_generic_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dh, &ih)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- for (dp = dh; dp != NULL; dp = dp->next) {
- if (dav_compare_locktoken(locktoken, dp->locktoken) == 0) {
- if (dprev)
- dprev->next = dp->next;
- else
- dh = dh->next;
- }
- dprev = dp;
- }
-
- for (ip = ih; ip != NULL; ip = ip->next) {
- if (dav_compare_locktoken(locktoken, ip->locktoken) == 0) {
- if (iprev)
- iprev->next = ip->next;
- else
- ih = ih->next;
- }
- iprev = ip;
- }
-
- }
-
- /* save the modified locks, or remove all locks (dh=ih=NULL). */
- if ((err = dav_generic_save_lock_record(lockdb, key, dh, ih)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- return NULL;
-}
-
-static int dav_generic_do_refresh(dav_lock_discovery *dp,
- const dav_locktoken_list *ltl,
- time_t new_time)
-{
- int dirty = 0;
-
- for (; ltl != NULL; ltl = ltl->next) {
- if (dav_compare_locktoken(dp->locktoken, ltl->locktoken) == 0)
- {
- dp->f.timeout = new_time;
- dirty = 1;
- }
- }
-
- return dirty;
-}
-
-static dav_error * dav_generic_refresh_locks(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken_list *ltl,
- time_t new_time,
- dav_lock **locks)
-{
- dav_error *err;
- apr_datum_t key;
- dav_lock_discovery *dp;
- dav_lock_discovery *dp_scan;
- dav_lock_indirect *ip;
- int dirty = 0;
- dav_lock *newlock;
-
- *locks = NULL;
-
- key = dav_generic_build_key(lockdb->info->pool, resource);
- if ((err = dav_generic_load_lock_record(lockdb, key, DAV_CREATE_LIST,
- &dp, &ip)) != NULL) {
- /* ### maybe add in a higher-level description */
- return err;
- }
-
- /* ### we should be refreshing direct AND (resolved) indirect locks! */
-
- /* refresh all of the direct locks on this resource */
- for (dp_scan = dp; dp_scan != NULL; dp_scan = dp_scan->next) {
- if (dav_generic_do_refresh(dp_scan, ltl, new_time)) {
- /* the lock was refreshed. return the lock. */
- newlock = dav_generic_alloc_lock(lockdb, key, dp_scan->locktoken);
- newlock->is_locknull = !resource->exists;
- newlock->scope = dp_scan->f.scope;
- newlock->type = dp_scan->f.type;
- newlock->depth = dp_scan->f.depth;
- newlock->timeout = dp_scan->f.timeout;
- newlock->owner = dp_scan->owner;
- newlock->auth_user = dp_scan->auth_user;
-
- newlock->next = *locks;
- *locks = newlock;
-
- dirty = 1;
- }
- }
-
- /* if we refreshed any locks, then save them back. */
- if (dirty
- && (err = dav_generic_save_lock_record(lockdb, key, dp, ip)) != NULL) {
- /* ### maybe add in a higher-level description */
- return err;
- }
-
- /* for each indirect lock, find its direct lock and refresh it. */
- for (; ip != NULL; ip = ip->next) {
- dav_lock_discovery *ref_dp;
- dav_lock_indirect *ref_ip;
-
- if ((err = dav_generic_resolve(lockdb, ip, &dp_scan,
- &ref_dp, &ref_ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
- if (dav_generic_do_refresh(dp_scan, ltl, new_time)) {
- /* the lock was refreshed. return the lock. */
- newlock = dav_generic_alloc_lock(lockdb, ip->key, dp->locktoken);
- newlock->is_locknull = !resource->exists;
- newlock->scope = dp->f.scope;
- newlock->type = dp->f.type;
- newlock->depth = dp->f.depth;
- newlock->timeout = dp->f.timeout;
- newlock->owner = dp->owner;
- newlock->auth_user = dp_scan->auth_user;
-
- newlock->next = *locks;
- *locks = newlock;
-
- /* save the (resolved) direct lock back */
- if ((err = dav_generic_save_lock_record(lockdb, ip->key, ref_dp,
- ref_ip)) != NULL) {
- /* ### push a higher-level desc? */
- return err;
- }
- }
- }
-
- return NULL;
-}
-
-
-const dav_hooks_locks dav_hooks_locks_generic =
-{
- dav_generic_get_supportedlock,
- dav_generic_parse_locktoken,
- dav_generic_format_locktoken,
- dav_generic_compare_locktoken,
- dav_generic_open_lockdb,
- dav_generic_close_lockdb,
- dav_generic_remove_locknull_state,
- dav_generic_create_lock,
- dav_generic_get_locks,
- dav_generic_find_lock,
- dav_generic_has_locks,
- dav_generic_append_locks,
- dav_generic_remove_lock,
- dav_generic_refresh_locks,
- NULL, /* lookup_resource */
-
- NULL /* ctx */
-};
diff --git a/modules/dav/lock/locks.h b/modules/dav/lock/locks.h
deleted file mode 100644
index 5e6eff1c0e..0000000000
--- a/modules/dav/lock/locks.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** Declarations for the generic lock implementation
-*/
-
-#ifndef _DAV_LOCK_LOCKS_H_
-#define _DAV_LOCK_LOCKS_H_
-
-/* where is the lock database located? */
-const char *dav_generic_get_lockdb_path(const request_rec *r);
-
-#endif /* _DAV_LOCK_LOCKS_H_ */
diff --git a/modules/dav/lock/mod_dav_lock.c b/modules/dav/lock/mod_dav_lock.c
deleted file mode 100644
index e8b6f72665..0000000000
--- a/modules/dav/lock/mod_dav_lock.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_strings.h"
-#include "ap_provider.h"
-
-#include "mod_dav.h"
-#include "locks.h"
-
-/* per-dir configuration */
-typedef struct {
- const char *lockdb_path;
-} dav_lock_dir_conf;
-
-extern const dav_hooks_locks dav_hooks_locks_generic;
-
-extern module AP_MODULE_DECLARE_DATA dav_lock_module;
-
-const char *dav_generic_get_lockdb_path(const request_rec *r)
-{
- dav_lock_dir_conf *conf;
-
- conf = ap_get_module_config(r->per_dir_config, &dav_lock_module);
- return conf->lockdb_path;
-}
-
-static void *dav_lock_create_dir_config(apr_pool_t *p, char *dir)
-{
- return apr_pcalloc(p, sizeof(dav_lock_dir_conf));
-}
-
-static void *dav_lock_merge_dir_config(apr_pool_t *p,
- void *base, void *overrides)
-{
- dav_lock_dir_conf *parent = base;
- dav_lock_dir_conf *child = overrides;
- dav_lock_dir_conf *newconf;
-
- newconf = apr_pcalloc(p, sizeof(*newconf));
-
- newconf->lockdb_path =
- child->lockdb_path ? child->lockdb_path : parent->lockdb_path;
-
- return newconf;
-}
-
-/*
- * Command handler for the DAVGenericLockDB directive, which is TAKE1
- */
-static const char *dav_lock_cmd_davlockdb(cmd_parms *cmd, void *config,
- const char *arg1)
-{
- dav_lock_dir_conf *conf = config;
-
- conf->lockdb_path = ap_server_root_relative(cmd->pool, arg1);
-
- if (!conf->lockdb_path) {
- return apr_pstrcat(cmd->pool, "Invalid DAVGenericLockDB path ",
- arg1, NULL);
- }
-
- return NULL;
-}
-
-static const command_rec dav_lock_cmds[] =
-{
- /* per server */
- AP_INIT_TAKE1("DAVGenericLockDB", dav_lock_cmd_davlockdb, NULL, ACCESS_CONF,
- "specify a lock database"),
-
- { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_provider(p, "dav-lock", "generic", "0",
- &dav_hooks_locks_generic);
-}
-
-module AP_MODULE_DECLARE_DATA dav_lock_module =
-{
- STANDARD20_MODULE_STUFF,
- dav_lock_create_dir_config, /* dir config creater */
- dav_lock_merge_dir_config, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- dav_lock_cmds, /* command table */
- register_hooks, /* register hooks */
-};
diff --git a/modules/dav/main/.cvsignore b/modules/dav/main/.cvsignore
deleted file mode 100644
index 8a31aca1e9..0000000000
--- a/modules/dav/main/.cvsignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/dav/main/Makefile.in b/modules/dav/main/Makefile.in
deleted file mode 100644
index 7c5c149d85..0000000000
--- a/modules/dav/main/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/dav/main/NWGNUmakefile b/modules/dav/main/NWGNUmakefile
deleted file mode 100644
index a692a2f920..0000000000
--- a/modules/dav/main/NWGNUmakefile
+++ /dev/null
@@ -1,272 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = mod_DAV
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) DAV module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = mod_DAV
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/mod_dav.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_dav.o \
- $(OBJDIR)/props.o \
- $(OBJDIR)/util.o \
- $(OBJDIR)/util_lock.o \
- $(OBJDIR)/liveprop.o \
- $(OBJDIR)/providers.o \
- $(OBJDIR)/std_liveprop.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Apache2 \
- Libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- @$(APR)/aprlib.imp \
- @httpd.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- dav_module \
- @dav.imp \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\mod_dav.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/dav/main/config5.m4 b/modules/dav/main/config5.m4
deleted file mode 100644
index fa2eee4762..0000000000
--- a/modules/dav/main/config5.m4
+++ /dev/null
@@ -1,22 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(dav/main)
-
-dav_objects="mod_dav.lo props.lo util.lo util_lock.lo liveprop.lo providers.lo std_liveprop.lo"
-
-if test "$enable_http" = "no"; then
- dav_enable=no
-else
- dav_enable=most
-fi
-
-APACHE_MODULE(dav, WebDAV protocol handling, $dav_objects, , $dav_enable)
-
-if test "$dav_enable" != "no" -o "$enable_dav" != "no"; then
- apache_need_expat=yes
-
- APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current])
-fi
-
-
-APACHE_MODPATH_FINISH
diff --git a/modules/dav/main/dav.imp b/modules/dav/main/dav.imp
deleted file mode 100644
index 2cb39f9fba..0000000000
--- a/modules/dav/main/dav.imp
+++ /dev/null
@@ -1,28 +0,0 @@
- (mod_dav)
- dav_hook_gather_propsets,
- dav_hook_find_liveprop,
- dav_hook_insert_all_liveprops,
- dav_new_error,
- dav_new_error_tag,
- dav_push_error,
- dav_set_bufsize,
- dav_buffer_init,
- dav_check_bufsize,
- dav_buffer_append,
- dav_buffer_place,
- dav_buffer_place_mem,
- dav_xml_get_cdata,
- dav_xmlns_create,
- dav_xmlns_add,
- dav_xmlns_add_uri,
- dav_xmlns_get_uri,
- dav_xmlns_get_prefix,
- dav_xmlns_generate,
- dav_register_provider,
- dav_do_find_liveprop,
- dav_get_liveprop_info,
- dav_register_liveprop_group,
- dav_get_liveprop_ns_index,
- dav_lock_query,
- dav_add_response
-
diff --git a/modules/dav/main/liveprop.c b/modules/dav/main/liveprop.c
deleted file mode 100644
index 42f68a051f..0000000000
--- a/modules/dav/main/liveprop.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_pools.h"
-#include "apr_hash.h"
-#include "apr_errno.h"
-#include "apr_strings.h"
-#include "util_xml.h" /* for apr_text_header */
-#include "mod_dav.h"
-
-
-static apr_hash_t *dav_liveprop_uris = NULL;
-static int dav_liveprop_count = 0;
-
-
-static apr_status_t dav_cleanup_liveprops(void *ctx)
-{
- dav_liveprop_uris = NULL;
- dav_liveprop_count = 0;
- return APR_SUCCESS;
-}
-
-static void dav_register_liveprop_namespace(apr_pool_t *p, const char *uri)
-{
- int value;
-
- if (dav_liveprop_uris == NULL) {
- dav_liveprop_uris = apr_hash_make(p);
- apr_pool_cleanup_register(p, NULL, dav_cleanup_liveprops, apr_pool_cleanup_null);
- }
-
- value = (int)apr_hash_get(dav_liveprop_uris, uri, APR_HASH_KEY_STRING);
- if (value != 0) {
- /* already registered */
- return;
- }
-
- /* start at 1, and count up */
- apr_hash_set(dav_liveprop_uris, uri, APR_HASH_KEY_STRING,
- (void *)++dav_liveprop_count);
-}
-
-DAV_DECLARE(int) dav_get_liveprop_ns_index(const char *uri)
-{
- return (int)apr_hash_get(dav_liveprop_uris, uri, APR_HASH_KEY_STRING);
-}
-
-int dav_get_liveprop_ns_count(void)
-{
- return dav_liveprop_count;
-}
-
-void dav_add_all_liveprop_xmlns(apr_pool_t *p, apr_text_header *phdr)
-{
- apr_hash_index_t *idx = apr_hash_first(p, dav_liveprop_uris);
-
- for ( ; idx != NULL; idx = apr_hash_next(idx) ) {
- const void *key;
- void *val;
- const char *s;
-
- apr_hash_this(idx, &key, NULL, &val);
-
- s = apr_psprintf(p, " xmlns:lp%d=\"%s\"", (int)val, (const char *)key);
- apr_text_append(p, phdr, s);
- }
-}
-
-DAV_DECLARE(int) dav_do_find_liveprop(const char *ns_uri, const char *name,
- const dav_liveprop_group *group,
- const dav_hooks_liveprop **hooks)
-{
- const char * const *uris = group->namespace_uris;
- const dav_liveprop_spec *scan;
- int ns;
-
- /* first: locate the namespace in the namespace table */
- for (ns = 0; uris[ns] != NULL; ++ns)
- if (strcmp(ns_uri, uris[ns]) == 0)
- break;
- if (uris[ns] == NULL) {
- /* not our property (the namespace matched none of ours) */
- return 0;
- }
-
- /* second: look for the property in the liveprop specs */
- for (scan = group->specs; scan->name != NULL; ++scan)
- if (ns == scan->ns && strcmp(name, scan->name) == 0) {
- *hooks = group->hooks;
- return scan->propid;
- }
-
- /* not our property (same namespace, but no matching prop name) */
- return 0;
-}
-
-DAV_DECLARE(int) dav_get_liveprop_info(int propid,
- const dav_liveprop_group *group,
- const dav_liveprop_spec **info)
-{
- const dav_liveprop_spec *scan;
-
- for (scan = group->specs; scan->name != NULL; ++scan) {
- if (scan->propid == propid) {
- *info = scan;
-
- /* map the provider-local NS into a global NS index */
- return dav_get_liveprop_ns_index(group->namespace_uris[scan->ns]);
- }
- }
-
- /* assert: should not reach this point */
- *info = NULL;
- return 0;
-}
-
-DAV_DECLARE(void) dav_register_liveprop_group(apr_pool_t *p,
- const dav_liveprop_group *group)
-{
- /* register the namespace URIs */
- const char * const * uris = group->namespace_uris;
-
- for ( ; *uris != NULL; ++uris) {
- dav_register_liveprop_namespace(p, *uris);
- }
-}
diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c
deleted file mode 100644
index 38d67b0bf5..0000000000
--- a/modules/dav/main/mod_dav.c
+++ /dev/null
@@ -1,4844 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * DAV extension module for Apache 2.0.*
- *
- * This module is repository-independent. It depends on hooks provided by a
- * repository implementation.
- *
- * APACHE ISSUES:
- * - within a DAV hierarchy, if an unknown method is used and we default
- * to Apache's implementation, it sends back an OPTIONS with the wrong
- * set of methods -- there is NO HOOK for us.
- * therefore: we need to manually handle the HTTP_METHOD_NOT_ALLOWED
- * and HTTP_NOT_IMPLEMENTED responses (not ap_send_error_response).
- * - process_mkcol_body() had to dup code from ap_setup_client_block().
- * - it would be nice to get status lines from Apache for arbitrary
- * status codes
- * - it would be nice to be able to extend Apache's set of response
- * codes so that it doesn't return 500 when an unknown code is placed
- * into r->status.
- * - http_vhost functions should apply "const" to their params
- *
- * DESIGN NOTES:
- * - For PROPFIND, we batch up the entire response in memory before
- * sending it. We may want to reorganize around sending the information
- * as we suck it in from the propdb. Alternatively, we should at least
- * generate a total Content-Length if we're going to buffer in memory
- * so that we can keep the connection open.
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h" /* for apr_is* */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_script.h"
-
-#include "mod_dav.h"
-
-
-/* ### what is the best way to set this? */
-#define DAV_DEFAULT_PROVIDER "filesystem"
-
-/* used to denote that mod_dav will be handling this request */
-#define DAV_HANDLER_NAME "dav-handler"
-
-enum {
- DAV_ENABLED_UNSET = 0,
- DAV_ENABLED_OFF,
- DAV_ENABLED_ON
-};
-
-/* per-dir configuration */
-typedef struct {
- const char *provider_name;
- const dav_provider *provider;
- const char *dir;
- int locktimeout;
- int allow_depthinfinity;
-
-} dav_dir_conf;
-
-/* per-server configuration */
-typedef struct {
- int unused;
-
-} dav_server_conf;
-
-#define DAV_INHERIT_VALUE(parent, child, field) \
- ((child)->field ? (child)->field : (parent)->field)
-
-
-/* forward-declare for use in configuration lookup */
-extern module DAV_DECLARE_DATA dav_module;
-
-/* DAV methods */
-enum {
- DAV_M_BIND = 0,
- DAV_M_SEARCH,
- DAV_M_LAST
-};
-static int dav_methods[DAV_M_LAST];
-
-
-static int dav_init_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
- server_rec *s)
-{
- /* DBG0("dav_init_handler"); */
-
- /* Register DAV methods */
- dav_methods[DAV_M_BIND] = ap_method_register(p, "BIND");
- dav_methods[DAV_M_SEARCH] = ap_method_register(p, "SEARCH");
-
- ap_add_version_component(p, "DAV/2");
-
- return OK;
-}
-
-static void *dav_create_server_config(apr_pool_t *p, server_rec *s)
-{
- dav_server_conf *newconf;
-
- newconf = (dav_server_conf *)apr_pcalloc(p, sizeof(*newconf));
-
- /* ### this isn't used at the moment... */
-
- return newconf;
-}
-
-static void *dav_merge_server_config(apr_pool_t *p, void *base, void *overrides)
-{
-#if 0
- dav_server_conf *child = overrides;
-#endif
- dav_server_conf *newconf;
-
- newconf = (dav_server_conf *)apr_pcalloc(p, sizeof(*newconf));
-
- /* ### nothing to merge right now... */
-
- return newconf;
-}
-
-static void *dav_create_dir_config(apr_pool_t *p, char *dir)
-{
- /* NOTE: dir==NULL creates the default per-dir config */
-
- dav_dir_conf *conf;
-
- conf = (dav_dir_conf *)apr_pcalloc(p, sizeof(*conf));
-
- /* clean up the directory to remove any trailing slash */
- if (dir != NULL) {
- char *d;
- apr_size_t l;
-
- d = apr_pstrdup(p, dir);
- l = strlen(d);
- if (l > 1 && d[l - 1] == '/')
- d[l - 1] = '\0';
- conf->dir = d;
- }
-
- return conf;
-}
-
-static void *dav_merge_dir_config(apr_pool_t *p, void *base, void *overrides)
-{
- dav_dir_conf *parent = base;
- dav_dir_conf *child = overrides;
- dav_dir_conf *newconf = (dav_dir_conf *)apr_pcalloc(p, sizeof(*newconf));
-
- /* DBG3("dav_merge_dir_config: new=%08lx base=%08lx overrides=%08lx",
- (long)newconf, (long)base, (long)overrides); */
-
- newconf->provider_name = DAV_INHERIT_VALUE(parent, child, provider_name);
- newconf->provider = DAV_INHERIT_VALUE(parent, child, provider);
- if (parent->provider_name != NULL) {
- if (child->provider_name == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "\"DAV Off\" cannot be used to turn off a subtree "
- "of a DAV-enabled location.");
- }
- else if (strcasecmp(child->provider_name,
- parent->provider_name) != 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "A subtree cannot specify a different DAV provider "
- "than its parent.");
- }
- }
-
- newconf->locktimeout = DAV_INHERIT_VALUE(parent, child, locktimeout);
- newconf->dir = DAV_INHERIT_VALUE(parent, child, dir);
- newconf->allow_depthinfinity = DAV_INHERIT_VALUE(parent, child,
- allow_depthinfinity);
-
- return newconf;
-}
-
-static const dav_provider *dav_get_provider(request_rec *r)
-{
- dav_dir_conf *conf;
-
- conf = ap_get_module_config(r->per_dir_config, &dav_module);
- /* assert: conf->provider_name != NULL
- (otherwise, DAV is disabled, and we wouldn't be here) */
-
- /* assert: conf->provider != NULL
- (checked when conf->provider_name is set) */
- return conf->provider;
-}
-
-const dav_hooks_locks *dav_get_lock_hooks(request_rec *r)
-{
- return dav_get_provider(r)->locks;
-}
-
-const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r)
-{
- return dav_get_provider(r)->propdb;
-}
-
-const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r)
-{
- return dav_get_provider(r)->vsn;
-}
-
-const dav_hooks_binding *dav_get_binding_hooks(request_rec *r)
-{
- return dav_get_provider(r)->binding;
-}
-
-const dav_hooks_search *dav_get_search_hooks(request_rec *r)
-{
- return dav_get_provider(r)->search;
-}
-
-/*
- * Command handler for the DAV directive, which is TAKE1.
- */
-static const char *dav_cmd_dav(cmd_parms *cmd, void *config, const char *arg1)
-{
- dav_dir_conf *conf = (dav_dir_conf *)config;
-
- if (strcasecmp(arg1, "on") == 0) {
- conf->provider_name = DAV_DEFAULT_PROVIDER;
- }
- else if (strcasecmp(arg1, "off") == 0) {
- conf->provider_name = NULL;
- conf->provider = NULL;
- }
- else {
- conf->provider_name = apr_pstrdup(cmd->pool, arg1);
- }
-
- if (conf->provider_name != NULL) {
- /* lookup and cache the actual provider now */
- conf->provider = dav_lookup_provider(conf->provider_name);
-
- if (conf->provider == NULL) {
- /* by the time they use it, the provider should be loaded and
- registered with us. */
- return apr_psprintf(cmd->pool,
- "Unknown DAV provider: %s",
- conf->provider_name);
- }
- }
-
- return NULL;
-}
-
-/*
- * Command handler for the DAVDepthInfinity directive, which is FLAG.
- */
-static const char *dav_cmd_davdepthinfinity(cmd_parms *cmd, void *config,
- int arg)
-{
- dav_dir_conf *conf = (dav_dir_conf *)config;
-
- if (arg)
- conf->allow_depthinfinity = DAV_ENABLED_ON;
- else
- conf->allow_depthinfinity = DAV_ENABLED_OFF;
- return NULL;
-}
-
-/*
- * Command handler for DAVMinTimeout directive, which is TAKE1
- */
-static const char *dav_cmd_davmintimeout(cmd_parms *cmd, void *config,
- const char *arg1)
-{
- dav_dir_conf *conf = (dav_dir_conf *)config;
-
- conf->locktimeout = atoi(arg1);
- if (conf->locktimeout < 0)
- return "DAVMinTimeout requires a non-negative integer.";
-
- return NULL;
-}
-
-/*
-** dav_error_response()
-**
-** Send a nice response back to the user. In most cases, Apache doesn't
-** allow us to provide details in the body about what happened. This
-** function allows us to completely specify the response body.
-**
-** ### this function is not logging any errors! (e.g. the body)
-*/
-static int dav_error_response(request_rec *r, int status, const char *body)
-{
- r->status = status;
-
- /* ### I really don't think this is needed; gotta test */
- r->status_line = ap_get_status_line(status);
-
- ap_set_content_type(r, "text/html");
-
- /* begin the response now... */
- ap_rvputs(r,
- DAV_RESPONSE_BODY_1,
- r->status_line,
- DAV_RESPONSE_BODY_2,
- &r->status_line[4],
- DAV_RESPONSE_BODY_3,
- body,
- DAV_RESPONSE_BODY_4,
- ap_psignature("<hr />\n", r),
- DAV_RESPONSE_BODY_5,
- NULL);
-
- /* the response has been sent. */
- /*
- * ### Use of DONE obviates logging..!
- */
- return DONE;
-}
-
-
-/*
- * Send a "standardized" error response based on the error's namespace & tag
- */
-static int dav_error_response_tag(request_rec *r,
- dav_error *err)
-{
- r->status = err->status;
-
- /* ### I really don't think this is needed; gotta test */
- r->status_line = ap_get_status_line(err->status);
-
- ap_set_content_type(r, DAV_XML_CONTENT_TYPE);
-
- ap_rputs(DAV_XML_HEADER DEBUG_CR
- "<D:error xmlns:D=\"DAV:\"", r);
-
- if (err->desc != NULL) {
- /* ### should move this namespace somewhere (with the others!) */
- ap_rputs(" xmlns:m=\"http://apache.org/dav/xmlns\"", r);
- }
-
- if (err->namespace != NULL) {
- ap_rprintf(r,
- " xmlns:C=\"%s\">" DEBUG_CR
- "<C:%s/>" DEBUG_CR,
- err->namespace, err->tagname);
- }
- else {
- ap_rprintf(r,
- ">" DEBUG_CR
- "<D:%s/>" DEBUG_CR, err->tagname);
- }
-
- /* here's our mod_dav specific tag: */
- if (err->desc != NULL) {
- ap_rprintf(r,
- "<m:human-readable errcode=\"%d\">" DEBUG_CR
- "%s" DEBUG_CR
- "</m:human-readable>" DEBUG_CR,
- err->error_id,
- apr_xml_quote_string(r->pool, err->desc, 0));
- }
-
- ap_rputs("</D:error>" DEBUG_CR, r);
-
- /* the response has been sent. */
- /*
- * ### Use of DONE obviates logging..!
- */
- return DONE;
-}
-
-
-/*
- * Apache's URI escaping does not replace '&' since that is a valid character
- * in a URI (to form a query section). We must explicitly handle it so that
- * we can embed the URI into an XML document.
- */
-static const char *dav_xml_escape_uri(apr_pool_t *p, const char *uri)
-{
- const char *e_uri = ap_escape_uri(p, uri);
-
- /* check the easy case... */
- if (ap_strchr_c(e_uri, '&') == NULL)
- return e_uri;
-
- /* there was a '&', so more work is needed... sigh. */
-
- /*
- * Note: this is a teeny bit of overkill since we know there are no
- * '<' or '>' characters, but who cares.
- */
- return apr_xml_quote_string(p, e_uri, 0);
-}
-
-
-/* Write a complete RESPONSE object out as a <DAV:repsonse> xml
- element. Data is sent into brigade BB, which is auto-flushed into
- OUTPUT filter stack. Use POOL for any temporary allocations.
-
- [Presumably the <multistatus> tag has already been written; this
- routine is shared by dav_send_multistatus and dav_stream_response.]
-*/
-static void dav_send_one_response(dav_response *response,
- apr_bucket_brigade *bb,
- ap_filter_t *output,
- apr_pool_t *pool)
-{
- apr_text *t = NULL;
-
- if (response->propresult.xmlns == NULL) {
- ap_fputs(output, bb, "<D:response>");
- }
- else {
- ap_fputs(output, bb, "<D:response");
- for (t = response->propresult.xmlns; t; t = t->next) {
- ap_fputs(output, bb, t->text);
- }
- ap_fputc(output, bb, '>');
- }
-
- ap_fputstrs(output, bb,
- DEBUG_CR "<D:href>",
- dav_xml_escape_uri(pool, response->href),
- "</D:href>" DEBUG_CR,
- NULL);
-
- if (response->propresult.propstats == NULL) {
- /* use the Status-Line text from Apache. Note, this will
- * default to 500 Internal Server Error if first->status
- * is not a known (or valid) status code.
- */
- ap_fputstrs(output, bb,
- "<D:status>HTTP/1.1 ",
- ap_get_status_line(response->status),
- "</D:status>" DEBUG_CR,
- NULL);
- }
- else {
- /* assume this includes <propstat> and is quoted properly */
- for (t = response->propresult.propstats; t; t = t->next) {
- ap_fputs(output, bb, t->text);
- }
- }
-
- if (response->desc != NULL) {
- /*
- * We supply the description, so we know it doesn't have to
- * have any escaping/encoding applied to it.
- */
- ap_fputstrs(output, bb,
- "<D:responsedescription>",
- response->desc,
- "</D:responsedescription>" DEBUG_CR,
- NULL);
- }
-
- ap_fputs(output, bb, "</D:response>" DEBUG_CR);
-}
-
-
-/* Factorized helper function: prep request_rec R for a multistatus
- response and write <multistatus> tag into BB, destined for
- R->output_filters. Use xml NAMESPACES in initial tag, if
- non-NULL. */
-static void dav_begin_multistatus(apr_bucket_brigade *bb,
- request_rec *r, int status,
- apr_array_header_t *namespaces)
-{
- /* Set the correct status and Content-Type */
- r->status = status;
- ap_set_content_type(r, DAV_XML_CONTENT_TYPE);
-
- /* Send the headers and actual multistatus response now... */
- ap_fputs(r->output_filters, bb, DAV_XML_HEADER DEBUG_CR
- "<D:multistatus xmlns:D=\"DAV:\"");
-
- if (namespaces != NULL) {
- int i;
-
- for (i = namespaces->nelts; i--; ) {
- ap_fprintf(r->output_filters, bb, " xmlns:ns%d=\"%s\"", i,
- APR_XML_GET_URI_ITEM(namespaces, i));
- }
- }
-
- ap_fputs(r->output_filters, bb, ">" DEBUG_CR);
-}
-
-/* Finish a multistatus response started by dav_begin_multistatus: */
-static apr_status_t dav_finish_multistatus(request_rec *r,
- apr_bucket_brigade *bb)
-{
- apr_bucket *b;
-
- ap_fputs(r->output_filters, bb, "</D:multistatus>" DEBUG_CR);
-
- /* indicate the end of the response body */
- b = apr_bucket_eos_create(r->connection->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- /* deliver whatever might be remaining in the brigade */
- return ap_pass_brigade(r->output_filters, bb);
-}
-
-static void dav_send_multistatus(request_rec *r, int status,
- dav_response *first,
- apr_array_header_t *namespaces)
-{
- apr_pool_t *subpool;
- apr_bucket_brigade *bb = apr_brigade_create(r->pool,
- r->connection->bucket_alloc);
-
- dav_begin_multistatus(bb, r, status, namespaces);
-
- apr_pool_create(&subpool, r->pool);
-
- for (; first != NULL; first = first->next) {
- apr_pool_clear(subpool);
- dav_send_one_response(first, bb, r->output_filters, subpool);
- }
- apr_pool_destroy(subpool);
-
- dav_finish_multistatus(r, bb);
-}
-
-/*
- * dav_log_err()
- *
- * Write error information to the log.
- */
-static void dav_log_err(request_rec *r, dav_error *err, int level)
-{
- dav_error *errscan;
-
- /* Log the errors */
- /* ### should have a directive to log the first or all */
- for (errscan = err; errscan != NULL; errscan = errscan->prev) {
- if (errscan->desc == NULL)
- continue;
-
- if (errscan->save_errno != 0) {
- errno = errscan->save_errno;
- ap_log_rerror(APLOG_MARK, level, errno, r, "%s [%d, #%d]",
- errscan->desc, errscan->status, errscan->error_id);
- }
- else {
- ap_log_rerror(APLOG_MARK, level, 0, r,
- "%s [%d, #%d]",
- errscan->desc, errscan->status, errscan->error_id);
- }
- }
-}
-
-/*
- * dav_handle_err()
- *
- * Handle the standard error processing. <err> must be non-NULL.
- *
- * <response> is set by the following:
- * - dav_validate_request()
- * - dav_add_lock()
- * - repos_hooks->remove_resource
- * - repos_hooks->move_resource
- * - repos_hooks->copy_resource
- * - vsn_hooks->update
- */
-static int dav_handle_err(request_rec *r, dav_error *err,
- dav_response *response)
-{
- /* log the errors */
- dav_log_err(r, err, APLOG_ERR);
-
- if (response == NULL) {
- dav_error *stackerr = err;
-
- /* our error messages are safe; tell Apache this */
- apr_table_setn(r->notes, "verbose-error-to", "*");
-
- /* Didn't get a multistatus response passed in, but we still
- might be able to generate a standard <D:error> response.
- Search the error stack for an errortag. */
- while (stackerr != NULL && stackerr->tagname == NULL)
- stackerr = stackerr->prev;
-
- if (stackerr != NULL && stackerr->tagname != NULL)
- return dav_error_response_tag(r, stackerr);
-
- return err->status;
- }
-
- /* send the multistatus and tell Apache the request/response is DONE. */
- dav_send_multistatus(r, err->status, response, NULL);
- return DONE;
-}
-
-/* handy function for return values of methods that (may) create things */
-static int dav_created(request_rec *r, const char *locn, const char *what,
- int replaced)
-{
- const char *body;
-
- if (locn == NULL) {
- locn = r->uri;
- }
-
- /* did the target resource already exist? */
- if (replaced) {
- /* Apache will supply a default message */
- return HTTP_NO_CONTENT;
- }
-
- /* Per HTTP/1.1, S10.2.2: add a Location header to contain the
- * URI that was created. */
-
- /* Convert locn to an absolute URI, and return in Location header */
- apr_table_setn(r->headers_out, "Location", ap_construct_url(r->pool, locn, r));
-
- /* ### insert an ETag header? see HTTP/1.1 S10.2.2 */
-
- /* Apache doesn't allow us to set a variable body for HTTP_CREATED, so
- * we must manufacture the entire response. */
- body = apr_psprintf(r->pool, "%s %s has been created.",
- what, ap_escape_html(r->pool, locn));
- return dav_error_response(r, HTTP_CREATED, body);
-}
-
-/* ### move to dav_util? */
-int dav_get_depth(request_rec *r, int def_depth)
-{
- const char *depth = apr_table_get(r->headers_in, "Depth");
-
- if (depth == NULL) {
- return def_depth;
- }
-
- if (strcasecmp(depth, "infinity") == 0) {
- return DAV_INFINITY;
- }
- else if (strcmp(depth, "0") == 0) {
- return 0;
- }
- else if (strcmp(depth, "1") == 0) {
- return 1;
- }
-
- /* The caller will return an HTTP_BAD_REQUEST. This will augment the
- * default message that Apache provides. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "An invalid Depth header was specified.");
- return -1;
-}
-
-static int dav_get_overwrite(request_rec *r)
-{
- const char *overwrite = apr_table_get(r->headers_in, "Overwrite");
-
- if (overwrite == NULL) {
- return 1; /* default is "T" */
- }
-
- if ((*overwrite == 'F' || *overwrite == 'f') && overwrite[1] == '\0') {
- return 0;
- }
-
- if ((*overwrite == 'T' || *overwrite == 't') && overwrite[1] == '\0') {
- return 1;
- }
-
- /* The caller will return an HTTP_BAD_REQUEST. This will augment the
- * default message that Apache provides. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "An invalid Overwrite header was specified.");
- return -1;
-}
-
-/* resolve a request URI to a resource descriptor.
- *
- * If label_allowed != 0, then allow the request target to be altered by
- * a Label: header.
- *
- * If use_checked_in is true, then the repository provider should return
- * the resource identified by the DAV:checked-in property of the resource
- * identified by the Request-URI.
- */
-static dav_error *dav_get_resource(request_rec *r, int label_allowed,
- int use_checked_in, dav_resource **res_p)
-{
- dav_dir_conf *conf;
- const char *label = NULL;
- dav_error *err;
-
- /* if the request target can be overridden, get any target selector */
- if (label_allowed) {
- label = apr_table_get(r->headers_in, "label");
- }
-
- conf = ap_get_module_config(r->per_dir_config, &dav_module);
- /* assert: conf->provider != NULL */
-
- /* resolve the resource */
- err = (*conf->provider->repos->get_resource)(r, conf->dir,
- label, use_checked_in,
- res_p);
- if (err != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- "Could not fetch resource information.", err);
- return err;
- }
-
- /* Note: this shouldn't happen, but just be sure... */
- if (*res_p == NULL) {
- /* ### maybe use HTTP_INTERNAL_SERVER_ERROR */
- return dav_new_error(r->pool, HTTP_NOT_FOUND, 0,
- apr_psprintf(r->pool,
- "The provider did not define a "
- "resource for %s.",
- ap_escape_html(r->pool, r->uri)));
- }
-
- /* ### hmm. this doesn't feel like the right place or thing to do */
- /* if there were any input headers requiring a Vary header in the response,
- * add it now */
- dav_add_vary_header(r, r, *res_p);
-
- return NULL;
-}
-
-static dav_error * dav_open_lockdb(request_rec *r, int ro, dav_lockdb **lockdb)
-{
- const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
-
- if (hooks == NULL) {
- *lockdb = NULL;
- return NULL;
- }
-
- /* open the thing lazily */
- return (*hooks->open_lockdb)(r, ro, 0, lockdb);
-}
-
-static int dav_parse_range(request_rec *r,
- apr_off_t *range_start, apr_off_t *range_end)
-{
- const char *range_c;
- char *range;
- char *dash;
- char *slash;
- char *errp;
-
- range_c = apr_table_get(r->headers_in, "content-range");
- if (range_c == NULL)
- return 0;
-
- range = apr_pstrdup(r->pool, range_c);
- if (strncasecmp(range, "bytes ", 6) != 0
- || (dash = ap_strchr(range, '-')) == NULL
- || (slash = ap_strchr(range, '/')) == NULL) {
- /* malformed header. ignore it (per S14.16 of RFC2616) */
- return 0;
- }
-
- *dash++ = *slash++ = '\0';
-
- /* ignore invalid ranges. (per S14.16 of RFC2616) */
- if (apr_strtoff(range_start, range + 6, &errp, 10)
- || *errp || *range_start < 0) {
- return 0;
- }
-
- if (apr_strtoff(range_end, dash, &errp, 10)
- || *errp || *range_end < 0 || *range_end < *range_start) {
- return 0;
- }
-
- if (*slash != '*') {
- apr_off_t dummy;
-
- if (apr_strtoff(&dummy, slash, &errp, 10)
- || *errp || dummy <= *range_end) {
- return 0;
- }
- }
-
- /* we now have a valid range */
- return 1;
-}
-
-/* handle the GET method */
-static int dav_method_get(request_rec *r)
-{
- dav_resource *resource;
- dav_error *err;
-
- /* This method should only be called when the resource is not
- * visible to Apache. We will fetch the resource from the repository,
- * then create a subrequest for Apache to handle.
- */
- err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* set up the HTTP headers for the response */
- if ((err = (*resource->hooks->set_headers)(r, resource)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- "Unable to set up HTTP headers.",
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- if (r->header_only) {
- return DONE;
- }
-
- /* okay... time to deliver the content */
- if ((err = (*resource->hooks->deliver)(resource,
- r->output_filters)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- "Unable to deliver content.",
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- return DONE;
-}
-
-/* validate resource/locks on POST, then pass to the default handler */
-static int dav_method_post(request_rec *r)
-{
- dav_resource *resource;
- dav_error *err;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* Note: depth == 0. Implies no need for a multistatus response. */
- if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
- DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- return DECLINED;
-}
-
-/* handle the PUT method */
-static int dav_method_put(request_rec *r)
-{
- dav_resource *resource;
- int resource_state;
- dav_auto_version_info av_info;
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- const char *body;
- dav_error *err;
- dav_error *err2;
- dav_stream_mode mode;
- dav_stream *stream;
- dav_response *multi_response;
- int has_range;
- apr_off_t range_start;
- apr_off_t range_end;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* If not a file or collection resource, PUT not allowed */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR
- && resource->type != DAV_RESOURCE_TYPE_WORKING) {
- body = apr_psprintf(r->pool,
- "Cannot create resource %s with PUT.",
- ap_escape_html(r->pool, r->uri));
- return dav_error_response(r, HTTP_CONFLICT, body);
- }
-
- /* Cannot PUT a collection */
- if (resource->collection) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot PUT to a collection.");
-
- }
-
- resource_state = dav_get_resource_state(r, resource);
-
- /*
- * Note: depth == 0 normally requires no multistatus response. However,
- * if we pass DAV_VALIDATE_PARENT, then we could get an error on a URI
- * other than the Request-URI, thereby requiring a multistatus.
- *
- * If the resource does not exist (DAV_RESOURCE_NULL), then we must
- * check the resource *and* its parent. If the resource exists or is
- * a locknull resource, then we check only the resource.
- */
- if ((err = dav_validate_request(r, resource, 0, NULL, &multi_response,
- resource_state == DAV_RESOURCE_NULL ?
- DAV_VALIDATE_PARENT :
- DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, multi_response);
- }
-
- /* make sure the resource can be modified (if versioning repository) */
- if ((err = dav_auto_checkout(r, resource,
- 0 /* not parent_only */,
- &av_info)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- /* truncate and rewrite the file unless we see a Content-Range */
- mode = DAV_MODE_WRITE_TRUNC;
-
- has_range = dav_parse_range(r, &range_start, &range_end);
- if (has_range) {
- mode = DAV_MODE_WRITE_SEEKABLE;
- }
-
- /* Create the new file in the repository */
- if ((err = (*resource->hooks->open_stream)(resource, mode,
- &stream)) != NULL) {
- /* ### assuming FORBIDDEN is probably not quite right... */
- err = dav_push_error(r->pool, HTTP_FORBIDDEN, 0,
- apr_psprintf(r->pool,
- "Unable to PUT new contents for %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- }
-
- if (err == NULL && has_range) {
- /* a range was provided. seek to the start */
- err = (*resource->hooks->seek_stream)(stream, range_start);
- }
-
- if (err == NULL) {
- apr_bucket_brigade *bb;
- apr_bucket *b;
- int seen_eos = 0;
-
- bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
-
- do {
- apr_status_t rc;
-
- rc = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
- APR_BLOCK_READ, DAV_READ_BLOCKSIZE);
-
- if (rc != APR_SUCCESS) {
- err = dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not get next bucket brigade");
- break;
- }
-
- for (b = APR_BRIGADE_FIRST(bb);
- b != APR_BRIGADE_SENTINEL(bb);
- b = APR_BUCKET_NEXT(b))
- {
- const char *data;
- apr_size_t len;
-
- if (APR_BUCKET_IS_EOS(b)) {
- seen_eos = 1;
- break;
- }
-
- if (APR_BUCKET_IS_METADATA(b)) {
- continue;
- }
-
- rc = apr_bucket_read(b, &data, &len, APR_BLOCK_READ);
- if (rc != APR_SUCCESS) {
- err = dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
- "An error occurred while reading "
- "the request body.");
- break;
- }
-
- if (err == NULL) {
- /* write whatever we read, until we see an error */
- err = (*resource->hooks->write_stream)(stream, data, len);
- }
- }
-
- apr_brigade_cleanup(bb);
- } while (!seen_eos);
-
- apr_brigade_destroy(bb);
-
- err2 = (*resource->hooks->close_stream)(stream,
- err == NULL /* commit */);
- if (err2 != NULL && err == NULL) {
- /* no error during the write, but we hit one at close. use it. */
- err = err2;
- }
- }
-
- /*
- * Ensure that we think the resource exists now.
- * ### eek. if an error occurred during the write and we did not commit,
- * ### then the resource might NOT exist (e.g. dav_fs_repos.c)
- */
- if (err == NULL) {
- resource->exists = 1;
- }
-
- /* restore modifiability of resources back to what they were */
- err2 = dav_auto_checkin(r, resource, err != NULL /* undo if error */,
- 0 /*unlock*/, &av_info);
-
- /* check for errors now */
- if (err != NULL) {
- return dav_handle_err(r, err, NULL);
- }
-
- if (err2 != NULL) {
- /* just log a warning */
- err2 = dav_push_error(r->pool, err2->status, 0,
- "The PUT was successful, but there "
- "was a problem automatically checking in "
- "the resource or its parent collection.",
- err2);
- dav_log_err(r, err2, APLOG_WARNING);
- }
-
- /* ### place the Content-Type and Content-Language into the propdb */
-
- if (locks_hooks != NULL) {
- dav_lockdb *lockdb;
-
- if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
- /* The file creation was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The file was PUT successfully, but there "
- "was a problem opening the lock database "
- "which prevents inheriting locks from the "
- "parent resources.",
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* notify lock system that we have created/replaced a resource */
- err = dav_notify_created(r, lockdb, resource, resource_state, 0);
-
- (*locks_hooks->close_lockdb)(lockdb);
-
- if (err != NULL) {
- /* The file creation was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The file was PUT successfully, but there "
- "was a problem updating its lock "
- "information.",
- err);
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /* NOTE: WebDAV spec, S8.7.1 states properties should be unaffected */
-
- /* return an appropriate response (HTTP_CREATED or HTTP_NO_CONTENT) */
- return dav_created(r, NULL, "Resource", resource_state == DAV_RESOURCE_EXISTS);
-}
-
-
-/* Use POOL to temporarily construct a dav_response object (from WRES
- STATUS, and PROPSTATS) and stream it via WRES's ctx->brigade. */
-static void dav_stream_response(dav_walk_resource *wres,
- int status,
- dav_get_props_result *propstats,
- apr_pool_t *pool)
-{
- dav_response resp = { 0 };
- dav_walker_ctx *ctx = wres->walk_ctx;
-
- resp.href = wres->resource->uri;
- resp.status = status;
- if (propstats) {
- resp.propresult = *propstats;
- }
-
- dav_send_one_response(&resp, ctx->bb, ctx->r->output_filters, pool);
-}
-
-
-/* ### move this to dav_util? */
-DAV_DECLARE(void) dav_add_response(dav_walk_resource *wres,
- int status, dav_get_props_result *propstats)
-{
- dav_response *resp;
-
- /* just drop some data into an dav_response */
- resp = apr_pcalloc(wres->pool, sizeof(*resp));
- resp->href = apr_pstrdup(wres->pool, wres->resource->uri);
- resp->status = status;
- if (propstats) {
- resp->propresult = *propstats;
- }
-
- resp->next = wres->response;
- wres->response = resp;
-}
-
-
-/* handle the DELETE method */
-static int dav_method_delete(request_rec *r)
-{
- dav_resource *resource;
- dav_auto_version_info av_info;
- dav_error *err;
- dav_error *err2;
- dav_response *multi_response;
- int result;
- int depth;
-
- /* We don't use the request body right now, so torch it. */
- if ((result = ap_discard_request_body(r)) != OK) {
- return result;
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* 2518 says that depth must be infinity only for collections.
- * For non-collections, depth is ignored, unless it is an illegal value (1).
- */
- depth = dav_get_depth(r, DAV_INFINITY);
-
- if (resource->collection && depth != DAV_INFINITY) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Depth must be \"infinity\" for DELETE of a collection.");
- return HTTP_BAD_REQUEST;
- }
-
- if (!resource->collection && depth == 1) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Depth of \"1\" is not allowed for DELETE.");
- return HTTP_BAD_REQUEST;
- }
-
- /*
- ** If any resources fail the lock/If: conditions, then we must fail
- ** the delete. Each of the failing resources will be listed within
- ** a DAV:multistatus body, wrapped into a 424 response.
- **
- ** Note that a failure on the resource itself does not generate a
- ** multistatus response -- only internal members/collections.
- */
- if ((err = dav_validate_request(r, resource, depth, NULL,
- &multi_response,
- DAV_VALIDATE_PARENT
- | DAV_VALIDATE_USE_424, NULL)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not DELETE %s due to a failed "
- "precondition (e.g. locks).",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- /* ### RFC 2518 s. 8.10.5 says to remove _all_ locks, not just those
- * locked by the token(s) in the if_header.
- */
- if ((result = dav_unlock(r, resource, NULL)) != OK) {
- return result;
- }
-
- /* if versioned resource, make sure parent is checked out */
- if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
- &av_info)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- /* try to remove the resource */
- err = (*resource->hooks->remove_resource)(resource, &multi_response);
-
- /* restore writability of parent back to what it was */
- err2 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
- 0 /*unlock*/, &av_info);
-
- /* check for errors now */
- if (err != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not DELETE %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
- if (err2 != NULL) {
- /* just log a warning */
- err = dav_push_error(r->pool, err2->status, 0,
- "The DELETE was successful, but there "
- "was a problem automatically checking in "
- "the parent collection.",
- err2);
- dav_log_err(r, err, APLOG_WARNING);
- }
-
- /* ### HTTP_NO_CONTENT if no body, HTTP_OK if there is a body (some day) */
-
- /* Apache will supply a default error for this. */
- return HTTP_NO_CONTENT;
-}
-
-/* generate DAV:supported-method-set OPTIONS response */
-static dav_error *dav_gen_supported_methods(request_rec *r,
- const apr_xml_elem *elem,
- const apr_table_t *methods,
- apr_text_header *body)
-{
- const apr_array_header_t *arr;
- const apr_table_entry_t *elts;
- apr_xml_elem *child;
- apr_xml_attr *attr;
- char *s;
- int i;
-
- apr_text_append(r->pool, body, "<D:supported-method-set>" DEBUG_CR);
-
- if (elem->first_child == NULL) {
- /* show all supported methods */
- arr = apr_table_elts(methods);
- elts = (const apr_table_entry_t *)arr->elts;
-
- for (i = 0; i < arr->nelts; ++i) {
- if (elts[i].key == NULL)
- continue;
-
- s = apr_psprintf(r->pool,
- "<D:supported-method D:name=\"%s\"/>"
- DEBUG_CR,
- elts[i].key);
- apr_text_append(r->pool, body, s);
- }
- }
- else {
- /* check for support of specific methods */
- for (child = elem->first_child; child != NULL; child = child->next) {
- if (child->ns == APR_XML_NS_DAV_ID
- && strcmp(child->name, "supported-method") == 0) {
- const char *name = NULL;
-
- /* go through attributes to find method name */
- for (attr = child->attr; attr != NULL; attr = attr->next) {
- if (attr->ns == APR_XML_NS_DAV_ID
- && strcmp(attr->name, "name") == 0)
- name = attr->value;
- }
-
- if (name == NULL) {
- return dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
- "A DAV:supported-method element "
- "does not have a \"name\" attribute");
- }
-
- /* see if method is supported */
- if (apr_table_get(methods, name) != NULL) {
- s = apr_psprintf(r->pool,
- "<D:supported-method D:name=\"%s\"/>"
- DEBUG_CR,
- name);
- apr_text_append(r->pool, body, s);
- }
- }
- }
- }
-
- apr_text_append(r->pool, body, "</D:supported-method-set>" DEBUG_CR);
- return NULL;
-}
-
-/* generate DAV:supported-live-property-set OPTIONS response */
-static dav_error *dav_gen_supported_live_props(request_rec *r,
- const dav_resource *resource,
- const apr_xml_elem *elem,
- apr_text_header *body)
-{
- dav_lockdb *lockdb;
- dav_propdb *propdb;
- apr_xml_elem *child;
- apr_xml_attr *attr;
- dav_error *err;
-
- /* open lock database, to report on supported lock properties */
- /* ### should open read-only */
- if ((err = dav_open_lockdb(r, 0, &lockdb)) != NULL) {
- return dav_push_error(r->pool, err->status, 0,
- "The lock database could not be opened, "
- "preventing the reporting of supported lock "
- "properties.",
- err);
- }
-
- /* open the property database (readonly) for the resource */
- if ((err = dav_open_propdb(r, lockdb, resource, 1, NULL,
- &propdb)) != NULL) {
- if (lockdb != NULL)
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- return dav_push_error(r->pool, err->status, 0,
- "The property database could not be opened, "
- "preventing report of supported properties.",
- err);
- }
-
- apr_text_append(r->pool, body, "<D:supported-live-property-set>" DEBUG_CR);
-
- if (elem->first_child == NULL) {
- /* show all supported live properties */
- dav_get_props_result props = dav_get_allprops(propdb, DAV_PROP_INSERT_SUPPORTED);
- body->last->next = props.propstats;
- while (body->last->next != NULL)
- body->last = body->last->next;
- }
- else {
- /* check for support of specific live property */
- for (child = elem->first_child; child != NULL; child = child->next) {
- if (child->ns == APR_XML_NS_DAV_ID
- && strcmp(child->name, "supported-live-property") == 0) {
- const char *name = NULL;
- const char *nmspace = NULL;
-
- /* go through attributes to find name and namespace */
- for (attr = child->attr; attr != NULL; attr = attr->next) {
- if (attr->ns == APR_XML_NS_DAV_ID) {
- if (strcmp(attr->name, "name") == 0)
- name = attr->value;
- else if (strcmp(attr->name, "namespace") == 0)
- nmspace = attr->value;
- }
- }
-
- if (name == NULL) {
- err = dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
- "A DAV:supported-live-property "
- "element does not have a \"name\" "
- "attribute");
- break;
- }
-
- /* default namespace to DAV: */
- if (nmspace == NULL)
- nmspace = "DAV:";
-
- /* check for support of property */
- dav_get_liveprop_supported(propdb, nmspace, name, body);
- }
- }
- }
-
- apr_text_append(r->pool, body, "</D:supported-live-property-set>" DEBUG_CR);
-
- dav_close_propdb(propdb);
-
- if (lockdb != NULL)
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- return err;
-}
-
-/* generate DAV:supported-report-set OPTIONS response */
-static dav_error *dav_gen_supported_reports(request_rec *r,
- const dav_resource *resource,
- const apr_xml_elem *elem,
- const dav_hooks_vsn *vsn_hooks,
- apr_text_header *body)
-{
- apr_xml_elem *child;
- apr_xml_attr *attr;
- dav_error *err;
- char *s;
-
- apr_text_append(r->pool, body, "<D:supported-report-set>" DEBUG_CR);
-
- if (vsn_hooks != NULL) {
- const dav_report_elem *reports;
- const dav_report_elem *rp;
-
- if ((err = (*vsn_hooks->avail_reports)(resource, &reports)) != NULL) {
- return dav_push_error(r->pool, err->status, 0,
- "DAV:supported-report-set could not be "
- "determined due to a problem fetching the "
- "available reports for this resource.",
- err);
- }
-
- if (reports != NULL) {
- if (elem->first_child == NULL) {
- /* show all supported reports */
- for (rp = reports; rp->nmspace != NULL; ++rp) {
- /* Note: we presume reports->namespace is
- * properly XML/URL quoted */
- s = apr_psprintf(r->pool,
- "<D:supported-report D:name=\"%s\" "
- "D:namespace=\"%s\"/>" DEBUG_CR,
- rp->name, rp->nmspace);
- apr_text_append(r->pool, body, s);
- }
- }
- else {
- /* check for support of specific report */
- for (child = elem->first_child; child != NULL; child = child->next) {
- if (child->ns == APR_XML_NS_DAV_ID
- && strcmp(child->name, "supported-report") == 0) {
- const char *name = NULL;
- const char *nmspace = NULL;
-
- /* go through attributes to find name and namespace */
- for (attr = child->attr; attr != NULL; attr = attr->next) {
- if (attr->ns == APR_XML_NS_DAV_ID) {
- if (strcmp(attr->name, "name") == 0)
- name = attr->value;
- else if (strcmp(attr->name, "namespace") == 0)
- nmspace = attr->value;
- }
- }
-
- if (name == NULL) {
- return dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
- "A DAV:supported-report element "
- "does not have a \"name\" attribute");
- }
-
- /* default namespace to DAV: */
- if (nmspace == NULL)
- nmspace = "DAV:";
-
- for (rp = reports; rp->nmspace != NULL; ++rp) {
- if (strcmp(name, rp->name) == 0
- && strcmp(nmspace, rp->nmspace) == 0) {
- /* Note: we presume reports->nmspace is
- * properly XML/URL quoted
- */
- s = apr_psprintf(r->pool,
- "<D:supported-report "
- "D:name=\"%s\" "
- "D:namespace=\"%s\"/>"
- DEBUG_CR,
- rp->name, rp->nmspace);
- apr_text_append(r->pool, body, s);
- break;
- }
- }
- }
- }
- }
- }
- }
-
- apr_text_append(r->pool, body, "</D:supported-report-set>" DEBUG_CR);
- return NULL;
-}
-
-
-/* handle the SEARCH method */
-static int dav_method_search(request_rec *r)
-{
- const dav_hooks_search *search_hooks = DAV_GET_HOOKS_SEARCH(r);
- dav_resource *resource;
- dav_error *err;
- dav_response *multi_status;
-
- /* If no search provider, decline the request */
- if (search_hooks == NULL)
- return DECLINED;
-
- /* This method should only be called when the resource is not
- * visible to Apache. We will fetch the resource from the repository,
- * then create a subrequest for Apache to handle.
- */
- err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* set up the HTTP headers for the response */
- if ((err = (*resource->hooks->set_headers)(r, resource)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- "Unable to set up HTTP headers.",
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- if (r->header_only) {
- return DONE;
- }
-
- /* okay... time to search the content */
- /* Let's validate XML and process walk function
- * in the hook function
- */
- if ((err = (*search_hooks->search_resource)(r, &multi_status)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- /* We have results in multi_status */
- /* Should I pass namespace?? */
- dav_send_multistatus(r, HTTP_MULTI_STATUS, multi_status, NULL);
-
- return DONE;
-}
-
-
-/* handle the OPTIONS method */
-static int dav_method_options(request_rec *r)
-{
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- const dav_hooks_binding *binding_hooks = DAV_GET_HOOKS_BINDING(r);
- const dav_hooks_search *search_hooks = DAV_GET_HOOKS_SEARCH(r);
- dav_resource *resource;
- const char *dav_level;
- char *allow;
- char *s;
- const apr_array_header_t *arr;
- const apr_table_entry_t *elts;
- apr_table_t *methods = apr_table_make(r->pool, 12);
- apr_text_header vsn_options = { 0 };
- apr_text_header body = { 0 };
- apr_text *t;
- int text_size;
- int result;
- int i;
- apr_array_header_t *uri_ary;
- apr_xml_doc *doc;
- const apr_xml_elem *elem;
- dav_error *err;
-
- /* resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* parse any request body */
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
- /* note: doc == NULL if no request body */
-
- if (doc && !dav_validate_root(doc, "options")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"options\" element was not found.");
- return HTTP_BAD_REQUEST;
- }
-
- /* determine which providers are available */
- dav_level = "1";
-
- if (locks_hooks != NULL) {
- dav_level = "1,2";
- }
-
- if (binding_hooks != NULL)
- dav_level = apr_pstrcat(r->pool, dav_level, ",bindings", NULL);
-
- /* ###
- * MSFT Web Folders chokes if length of DAV header value > 63 characters!
- * To workaround that, we use separate DAV headers for versioning and
- * live prop provider namespace URIs.
- * ###
- */
- apr_table_setn(r->headers_out, "DAV", dav_level);
-
- /*
- * If there is a versioning provider, generate DAV headers
- * for versioning options.
- */
- if (vsn_hooks != NULL) {
- (*vsn_hooks->get_vsn_options)(r->pool, &vsn_options);
-
- for (t = vsn_options.first; t != NULL; t = t->next)
- apr_table_addn(r->headers_out, "DAV", t->text);
- }
-
- /*
- * Gather property set URIs from all the liveprop providers,
- * and generate a separate DAV header for each URI, to avoid
- * problems with long header lengths.
- */
- uri_ary = apr_array_make(r->pool, 5, sizeof(const char *));
- dav_run_gather_propsets(uri_ary);
- for (i = 0; i < uri_ary->nelts; ++i) {
- if (((char **)uri_ary->elts)[i] != NULL)
- apr_table_addn(r->headers_out, "DAV", ((char **)uri_ary->elts)[i]);
- }
-
- /* this tells MSFT products to skip looking for FrontPage extensions */
- apr_table_setn(r->headers_out, "MS-Author-Via", "DAV");
-
- /*
- * Determine which methods are allowed on the resource.
- * Three cases: resource is null (3), is lock-null (7.4), or exists.
- *
- * All cases support OPTIONS, and if there is a lock provider, LOCK.
- * (Lock-) null resources also support MKCOL and PUT.
- * Lock-null supports PROPFIND and UNLOCK.
- * Existing resources support lots of stuff.
- */
-
- apr_table_addn(methods, "OPTIONS", "");
-
- /* ### take into account resource type */
- switch (dav_get_resource_state(r, resource))
- {
- case DAV_RESOURCE_EXISTS:
- /* resource exists */
- apr_table_addn(methods, "GET", "");
- apr_table_addn(methods, "HEAD", "");
- apr_table_addn(methods, "POST", "");
- apr_table_addn(methods, "DELETE", "");
- apr_table_addn(methods, "TRACE", "");
- apr_table_addn(methods, "PROPFIND", "");
- apr_table_addn(methods, "PROPPATCH", "");
- apr_table_addn(methods, "COPY", "");
- apr_table_addn(methods, "MOVE", "");
-
- if (!resource->collection)
- apr_table_addn(methods, "PUT", "");
-
- if (locks_hooks != NULL) {
- apr_table_addn(methods, "LOCK", "");
- apr_table_addn(methods, "UNLOCK", "");
- }
-
- break;
-
- case DAV_RESOURCE_LOCK_NULL:
- /* resource is lock-null. */
- apr_table_addn(methods, "MKCOL", "");
- apr_table_addn(methods, "PROPFIND", "");
- apr_table_addn(methods, "PUT", "");
-
- if (locks_hooks != NULL) {
- apr_table_addn(methods, "LOCK", "");
- apr_table_addn(methods, "UNLOCK", "");
- }
-
- break;
-
- case DAV_RESOURCE_NULL:
- /* resource is null. */
- apr_table_addn(methods, "MKCOL", "");
- apr_table_addn(methods, "PUT", "");
-
- if (locks_hooks != NULL)
- apr_table_addn(methods, "LOCK", "");
-
- break;
-
- default:
- /* ### internal error! */
- break;
- }
-
- /* If there is a versioning provider, add versioning methods */
- if (vsn_hooks != NULL) {
- if (!resource->exists) {
- if ((*vsn_hooks->versionable)(resource))
- apr_table_addn(methods, "VERSION-CONTROL", "");
-
- if (vsn_hooks->can_be_workspace != NULL
- && (*vsn_hooks->can_be_workspace)(resource))
- apr_table_addn(methods, "MKWORKSPACE", "");
-
- if (vsn_hooks->can_be_activity != NULL
- && (*vsn_hooks->can_be_activity)(resource))
- apr_table_addn(methods, "MKACTIVITY", "");
- }
- else if (!resource->versioned) {
- if ((*vsn_hooks->versionable)(resource))
- apr_table_addn(methods, "VERSION-CONTROL", "");
- }
- else if (resource->working) {
- apr_table_addn(methods, "CHECKIN", "");
-
- /* ### we might not support this DeltaV option */
- apr_table_addn(methods, "UNCHECKOUT", "");
- }
- else if (vsn_hooks->add_label != NULL) {
- apr_table_addn(methods, "CHECKOUT", "");
- apr_table_addn(methods, "LABEL", "");
- }
- else {
- apr_table_addn(methods, "CHECKOUT", "");
- }
- }
-
- /* If there is a bindings provider, see if resource is bindable */
- if (binding_hooks != NULL
- && (*binding_hooks->is_bindable)(resource)) {
- apr_table_addn(methods, "BIND", "");
- }
-
- /* If there is a search provider, set SEARCH in option */
- if (search_hooks != NULL) {
- apr_table_addn(methods, "SEARCH", "");
- }
-
- /* Generate the Allow header */
- arr = apr_table_elts(methods);
- elts = (const apr_table_entry_t *)arr->elts;
- text_size = 0;
-
- /* first, compute total length */
- for (i = 0; i < arr->nelts; ++i) {
- if (elts[i].key == NULL)
- continue;
-
- /* add 1 for comma or null */
- text_size += strlen(elts[i].key) + 1;
- }
-
- s = allow = apr_palloc(r->pool, text_size);
-
- for (i = 0; i < arr->nelts; ++i) {
- if (elts[i].key == NULL)
- continue;
-
- if (s != allow)
- *s++ = ',';
-
- strcpy(s, elts[i].key);
- s += strlen(s);
- }
-
- apr_table_setn(r->headers_out, "Allow", allow);
-
-
- /* If there is search set_option_head function, set head */
- /* DASL: <DAV:basicsearch>
- * DASL: <http://foo.bar.com/syntax1>
- * DASL: <http://akuma.com/syntax2>
- */
- if (search_hooks != NULL
- && *search_hooks->set_option_head != NULL) {
- if ((err = (*search_hooks->set_option_head)(r)) != NULL) {
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /* if there was no request body, then there is no response body */
- if (doc == NULL) {
- ap_set_content_length(r, 0);
-
- /* ### this sends a Content-Type. the default OPTIONS does not. */
-
- /* ### the default (ap_send_http_options) returns OK, but I believe
- * ### that is because it is the default handler and nothing else
- * ### will run after the thing. */
- return DONE;
- }
-
- /* handle each options request */
- for (elem = doc->root->first_child; elem != NULL; elem = elem->next) {
- /* check for something we recognize first */
- int core_option = 0;
- dav_error *err = NULL;
-
- if (elem->ns == APR_XML_NS_DAV_ID) {
- if (strcmp(elem->name, "supported-method-set") == 0) {
- err = dav_gen_supported_methods(r, elem, methods, &body);
- core_option = 1;
- }
- else if (strcmp(elem->name, "supported-live-property-set") == 0) {
- err = dav_gen_supported_live_props(r, resource, elem, &body);
- core_option = 1;
- }
- else if (strcmp(elem->name, "supported-report-set") == 0) {
- err = dav_gen_supported_reports(r, resource, elem, vsn_hooks, &body);
- core_option = 1;
- }
- }
-
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* if unrecognized option, pass to versioning provider */
- if (!core_option && vsn_hooks != NULL) {
- if ((err = (*vsn_hooks->get_option)(resource, elem, &body))
- != NULL) {
- return dav_handle_err(r, err, NULL);
- }
- }
- }
-
- /* send the options response */
- r->status = HTTP_OK;
- ap_set_content_type(r, DAV_XML_CONTENT_TYPE);
-
- /* send the headers and response body */
- ap_rputs(DAV_XML_HEADER DEBUG_CR
- "<D:options-response xmlns:D=\"DAV:\">" DEBUG_CR, r);
-
- for (t = body.first; t != NULL; t = t->next)
- ap_rputs(t->text, r);
-
- ap_rputs("</D:options-response>" DEBUG_CR, r);
-
- /* we've sent everything necessary to the client. */
- return DONE;
-}
-
-static void dav_cache_badprops(dav_walker_ctx *ctx)
-{
- const apr_xml_elem *elem;
- apr_text_header hdr = { 0 };
-
- /* just return if we built the thing already */
- if (ctx->propstat_404 != NULL) {
- return;
- }
-
- apr_text_append(ctx->w.pool, &hdr,
- "<D:propstat>" DEBUG_CR
- "<D:prop>" DEBUG_CR);
-
- elem = dav_find_child(ctx->doc->root, "prop");
- for (elem = elem->first_child; elem; elem = elem->next) {
- apr_text_append(ctx->w.pool, &hdr,
- apr_xml_empty_elem(ctx->w.pool, elem));
- }
-
- apr_text_append(ctx->w.pool, &hdr,
- "</D:prop>" DEBUG_CR
- "<D:status>HTTP/1.1 404 Not Found</D:status>" DEBUG_CR
- "</D:propstat>" DEBUG_CR);
-
- ctx->propstat_404 = hdr.first;
-}
-
-static dav_error * dav_propfind_walker(dav_walk_resource *wres, int calltype)
-{
- dav_walker_ctx *ctx = wres->walk_ctx;
- dav_error *err;
- dav_propdb *propdb;
- dav_get_props_result propstats = { 0 };
-
- /*
- ** Note: ctx->doc can only be NULL for DAV_PROPFIND_IS_ALLPROP. Since
- ** dav_get_allprops() does not need to do namespace translation,
- ** we're okay.
- **
- ** Note: we cast to lose the "const". The propdb won't try to change
- ** the resource, however, since we are opening readonly.
- */
- err = dav_open_propdb(ctx->r, ctx->w.lockdb, wres->resource, 1,
- ctx->doc ? ctx->doc->namespaces : NULL, &propdb);
- if (err != NULL) {
- /* ### do something with err! */
-
- if (ctx->propfind_type == DAV_PROPFIND_IS_PROP) {
- dav_get_props_result badprops = { 0 };
-
- /* some props were expected on this collection/resource */
- dav_cache_badprops(ctx);
- badprops.propstats = ctx->propstat_404;
- dav_stream_response(wres, 0, &badprops, ctx->scratchpool);
- }
- else {
- /* no props on this collection/resource */
- dav_stream_response(wres, HTTP_OK, NULL, ctx->scratchpool);
- }
-
- apr_pool_clear(ctx->scratchpool);
- return NULL;
- }
- /* ### what to do about closing the propdb on server failure? */
-
- if (ctx->propfind_type == DAV_PROPFIND_IS_PROP) {
- propstats = dav_get_props(propdb, ctx->doc);
- }
- else {
- dav_prop_insert what = ctx->propfind_type == DAV_PROPFIND_IS_ALLPROP
- ? DAV_PROP_INSERT_VALUE
- : DAV_PROP_INSERT_NAME;
- propstats = dav_get_allprops(propdb, what);
- }
- dav_close_propdb(propdb);
-
- dav_stream_response(wres, 0, &propstats, ctx->scratchpool);
-
- /* at this point, ctx->scratchpool has been used to stream a
- single response. this function fully controls the pool, and
- thus has the right to clear it for the next iteration of this
- callback. */
- apr_pool_clear(ctx->scratchpool);
-
- return NULL;
-}
-
-/* handle the PROPFIND method */
-static int dav_method_propfind(request_rec *r)
-{
- dav_resource *resource;
- int depth;
- dav_error *err;
- int result;
- apr_xml_doc *doc;
- const apr_xml_elem *child;
- dav_walker_ctx ctx = { { 0 } };
- dav_response *multi_status;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (dav_get_resource_state(r, resource) == DAV_RESOURCE_NULL) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- if ((depth = dav_get_depth(r, DAV_INFINITY)) < 0) {
- /* dav_get_depth() supplies additional information for the
- * default message. */
- return HTTP_BAD_REQUEST;
- }
-
- if (depth == DAV_INFINITY && resource->collection) {
- dav_dir_conf *conf;
- conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
- &dav_module);
- /* default is to DISALLOW these requests */
- if (conf->allow_depthinfinity != DAV_ENABLED_ON) {
- return dav_error_response(r, HTTP_FORBIDDEN,
- apr_psprintf(r->pool,
- "PROPFIND requests with a "
- "Depth of \"infinity\" are "
- "not allowed for %s.",
- ap_escape_html(r->pool,
- r->uri)));
- }
- }
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
- /* note: doc == NULL if no request body */
-
- if (doc && !dav_validate_root(doc, "propfind")) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"propfind\" element was not found.");
- return HTTP_BAD_REQUEST;
- }
-
- /* ### validate that only one of these three elements is present */
-
- if (doc == NULL
- || (child = dav_find_child(doc->root, "allprop")) != NULL) {
- /* note: no request body implies allprop */
- ctx.propfind_type = DAV_PROPFIND_IS_ALLPROP;
- }
- else if ((child = dav_find_child(doc->root, "propname")) != NULL) {
- ctx.propfind_type = DAV_PROPFIND_IS_PROPNAME;
- }
- else if ((child = dav_find_child(doc->root, "prop")) != NULL) {
- ctx.propfind_type = DAV_PROPFIND_IS_PROP;
- }
- else {
- /* "propfind" element must have one of the above three children */
-
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"propfind\" element does not contain one of "
- "the required child elements (the specific command).");
- return HTTP_BAD_REQUEST;
- }
-
- ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_AUTH;
- ctx.w.func = dav_propfind_walker;
- ctx.w.walk_ctx = &ctx;
- ctx.w.pool = r->pool;
- ctx.w.root = resource;
-
- ctx.doc = doc;
- ctx.r = r;
- ctx.bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- apr_pool_create(&ctx.scratchpool, r->pool);
-
- /* ### should open read-only */
- if ((err = dav_open_lockdb(r, 0, &ctx.w.lockdb)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- "The lock database could not be opened, "
- "preventing access to the various lock "
- "properties for the PROPFIND.",
- err);
- return dav_handle_err(r, err, NULL);
- }
- if (ctx.w.lockdb != NULL) {
- /* if we have a lock database, then we can walk locknull resources */
- ctx.w.walk_type |= DAV_WALKTYPE_LOCKNULL;
- }
-
- /* send <multistatus> tag, with all doc->namespaces attached. */
-
- /* NOTE: we *cannot* leave out the doc's namespaces from the
- initial <multistatus> tag. if a 404 was generated for an HREF,
- then we need to spit out the doc's namespaces for use by the
- 404. Note that <response> elements will override these ns0,
- ns1, etc, but NOT within the <response> scope for the
- badprops. */
- dav_begin_multistatus(ctx.bb, r, HTTP_MULTI_STATUS,
- doc ? doc->namespaces : NULL);
-
- /* Have the provider walk the resource. */
- err = (*resource->hooks->walk)(&ctx.w, depth, &multi_status);
-
- if (ctx.w.lockdb != NULL) {
- (*ctx.w.lockdb->hooks->close_lockdb)(ctx.w.lockdb);
- }
-
- if (err != NULL) {
- /* If an error occurred during the resource walk, there's
- basically nothing we can do but abort the connection and
- log an error. This is one of the limitations of HTTP; it
- needs to "know" the entire status of the response before
- generating it, which is just impossible in these streamy
- response situations. */
- err = dav_push_error(r->pool, err->status, 0,
- "Provider encountered an error while streaming"
- " a multistatus PROPFIND response.", err);
- dav_log_err(r, err, APLOG_ERR);
- r->connection->aborted = 1;
- return DONE;
- }
-
- dav_finish_multistatus(r, ctx.bb);
-
- /* the response has been sent. */
- return DONE;
-}
-
-static apr_text * dav_failed_proppatch(apr_pool_t *p,
- apr_array_header_t *prop_ctx)
-{
- apr_text_header hdr = { 0 };
- int i = prop_ctx->nelts;
- dav_prop_ctx *ctx = (dav_prop_ctx *)prop_ctx->elts;
- dav_error *err424_set = NULL;
- dav_error *err424_delete = NULL;
- const char *s;
-
- /* ### might be nice to sort by status code and description */
-
- for ( ; i-- > 0; ++ctx ) {
- apr_text_append(p, &hdr,
- "<D:propstat>" DEBUG_CR
- "<D:prop>");
- apr_text_append(p, &hdr, apr_xml_empty_elem(p, ctx->prop));
- apr_text_append(p, &hdr, "</D:prop>" DEBUG_CR);
-
- if (ctx->err == NULL) {
- /* nothing was assigned here yet, so make it a 424 */
-
- if (ctx->operation == DAV_PROP_OP_SET) {
- if (err424_set == NULL)
- err424_set = dav_new_error(p, HTTP_FAILED_DEPENDENCY, 0,
- "Attempted DAV:set operation "
- "could not be completed due "
- "to other errors.");
- ctx->err = err424_set;
- }
- else if (ctx->operation == DAV_PROP_OP_DELETE) {
- if (err424_delete == NULL)
- err424_delete = dav_new_error(p, HTTP_FAILED_DEPENDENCY, 0,
- "Attempted DAV:remove "
- "operation could not be "
- "completed due to other "
- "errors.");
- ctx->err = err424_delete;
- }
- }
-
- s = apr_psprintf(p,
- "<D:status>"
- "HTTP/1.1 %d (status)"
- "</D:status>" DEBUG_CR,
- ctx->err->status);
- apr_text_append(p, &hdr, s);
-
- /* ### we should use compute_desc if necessary... */
- if (ctx->err->desc != NULL) {
- apr_text_append(p, &hdr, "<D:responsedescription>" DEBUG_CR);
- apr_text_append(p, &hdr, ctx->err->desc);
- apr_text_append(p, &hdr, "</D:responsedescription>" DEBUG_CR);
- }
-
- apr_text_append(p, &hdr, "</D:propstat>" DEBUG_CR);
- }
-
- return hdr.first;
-}
-
-static apr_text * dav_success_proppatch(apr_pool_t *p, apr_array_header_t *prop_ctx)
-{
- apr_text_header hdr = { 0 };
- int i = prop_ctx->nelts;
- dav_prop_ctx *ctx = (dav_prop_ctx *)prop_ctx->elts;
-
- /*
- * ### we probably need to revise the way we assemble the response...
- * ### this code assumes everything will return status==200.
- */
-
- apr_text_append(p, &hdr,
- "<D:propstat>" DEBUG_CR
- "<D:prop>" DEBUG_CR);
-
- for ( ; i-- > 0; ++ctx ) {
- apr_text_append(p, &hdr, apr_xml_empty_elem(p, ctx->prop));
- }
-
- apr_text_append(p, &hdr,
- "</D:prop>" DEBUG_CR
- "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
- "</D:propstat>" DEBUG_CR);
-
- return hdr.first;
-}
-
-static void dav_prop_log_errors(dav_prop_ctx *ctx)
-{
- dav_log_err(ctx->r, ctx->err, APLOG_ERR);
-}
-
-/*
- * Call <func> for each context. This can stop when an error occurs, or
- * simply iterate through the whole list.
- *
- * Returns 1 if an error occurs (and the iteration is aborted). Returns 0
- * if all elements are processed.
- *
- * If <reverse> is true (non-zero), then the list is traversed in
- * reverse order.
- */
-static int dav_process_ctx_list(void (*func)(dav_prop_ctx *ctx),
- apr_array_header_t *ctx_list, int stop_on_error,
- int reverse)
-{
- int i = ctx_list->nelts;
- dav_prop_ctx *ctx = (dav_prop_ctx *)ctx_list->elts;
-
- if (reverse)
- ctx += i;
-
- while (i--) {
- if (reverse)
- --ctx;
-
- (*func)(ctx);
- if (stop_on_error && DAV_PROP_CTX_HAS_ERR(*ctx)) {
- return 1;
- }
-
- if (!reverse)
- ++ctx;
- }
-
- return 0;
-}
-
-/* handle the PROPPATCH method */
-static int dav_method_proppatch(request_rec *r)
-{
- dav_error *err;
- dav_resource *resource;
- int result;
- apr_xml_doc *doc;
- apr_xml_elem *child;
- dav_propdb *propdb;
- int failure = 0;
- dav_response resp = { 0 };
- apr_text *propstat_text;
- apr_array_header_t *ctx_list;
- dav_prop_ctx *ctx;
- dav_auto_version_info av_info;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
- /* note: doc == NULL if no request body */
-
- if (doc == NULL || !dav_validate_root(doc, "propertyupdate")) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body does not contain "
- "a \"propertyupdate\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* Check If-Headers and existing locks */
- /* Note: depth == 0. Implies no need for a multistatus response. */
- if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
- DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- /* make sure the resource can be modified (if versioning repository) */
- if ((err = dav_auto_checkout(r, resource,
- 0 /* not parent_only */,
- &av_info)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- if ((err = dav_open_propdb(r, NULL, resource, 0, doc->namespaces,
- &propdb)) != NULL) {
- /* undo any auto-checkout */
- dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, &av_info);
-
- err = dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(r->pool,
- "Could not open the property "
- "database for %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
- /* ### what to do about closing the propdb on server failure? */
-
- /* ### validate "live" properties */
-
- /* set up an array to hold property operation contexts */
- ctx_list = apr_array_make(r->pool, 10, sizeof(dav_prop_ctx));
-
- /* do a first pass to ensure that all "remove" properties exist */
- for (child = doc->root->first_child; child; child = child->next) {
- int is_remove;
- apr_xml_elem *prop_group;
- apr_xml_elem *one_prop;
-
- /* Ignore children that are not set/remove */
- if (child->ns != APR_XML_NS_DAV_ID
- || (!(is_remove = strcmp(child->name, "remove") == 0)
- && strcmp(child->name, "set") != 0)) {
- continue;
- }
-
- /* make sure that a "prop" child exists for set/remove */
- if ((prop_group = dav_find_child(child, "prop")) == NULL) {
- dav_close_propdb(propdb);
-
- /* undo any auto-checkout */
- dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, &av_info);
-
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "A \"prop\" element is missing inside "
- "the propertyupdate command.");
- return HTTP_BAD_REQUEST;
- }
-
- for (one_prop = prop_group->first_child; one_prop;
- one_prop = one_prop->next) {
-
- ctx = (dav_prop_ctx *)apr_array_push(ctx_list);
- ctx->propdb = propdb;
- ctx->operation = is_remove ? DAV_PROP_OP_DELETE : DAV_PROP_OP_SET;
- ctx->prop = one_prop;
-
- ctx->r = r; /* for later use by dav_prop_log_errors() */
-
- dav_prop_validate(ctx);
-
- if ( DAV_PROP_CTX_HAS_ERR(*ctx) ) {
- failure = 1;
- }
- }
- }
-
- /* ### should test that we found at least one set/remove */
-
- /* execute all of the operations */
- if (!failure && dav_process_ctx_list(dav_prop_exec, ctx_list, 1, 0)) {
- failure = 1;
- }
-
- /* generate a failure/success response */
- if (failure) {
- (void)dav_process_ctx_list(dav_prop_rollback, ctx_list, 0, 1);
- propstat_text = dav_failed_proppatch(r->pool, ctx_list);
- }
- else {
- (void)dav_process_ctx_list(dav_prop_commit, ctx_list, 0, 0);
- propstat_text = dav_success_proppatch(r->pool, ctx_list);
- }
-
- /* make sure this gets closed! */
- dav_close_propdb(propdb);
-
- /* complete any auto-versioning */
- dav_auto_checkin(r, resource, failure, 0 /*unlock*/, &av_info);
-
- /* log any errors that occurred */
- (void)dav_process_ctx_list(dav_prop_log_errors, ctx_list, 0, 0);
-
- resp.href = resource->uri;
-
- /* ### should probably use something new to pass along this text... */
- resp.propresult.propstats = propstat_text;
-
- dav_send_multistatus(r, HTTP_MULTI_STATUS, &resp, doc->namespaces);
-
- /* the response has been sent. */
- return DONE;
-}
-
-static int process_mkcol_body(request_rec *r)
-{
- /* This is snarfed from ap_setup_client_block(). We could get pretty
- * close to this behavior by passing REQUEST_NO_BODY, but we need to
- * return HTTP_UNSUPPORTED_MEDIA_TYPE (while ap_setup_client_block
- * returns HTTP_REQUEST_ENTITY_TOO_LARGE). */
-
- const char *tenc = apr_table_get(r->headers_in, "Transfer-Encoding");
- const char *lenp = apr_table_get(r->headers_in, "Content-Length");
-
- /* make sure to set the Apache request fields properly. */
- r->read_body = REQUEST_NO_BODY;
- r->read_chunked = 0;
- r->remaining = 0;
-
- if (tenc) {
- if (strcasecmp(tenc, "chunked")) {
- /* Use this instead of Apache's default error string */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Unknown Transfer-Encoding %s", tenc);
- return HTTP_NOT_IMPLEMENTED;
- }
-
- r->read_chunked = 1;
- }
- else if (lenp) {
- const char *pos = lenp;
-
- while (apr_isdigit(*pos) || apr_isspace(*pos)) {
- ++pos;
- }
-
- if (*pos != '\0') {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid Content-Length %s", lenp);
- return HTTP_BAD_REQUEST;
- }
-
- r->remaining = apr_atoi64(lenp);
- }
-
- if (r->read_chunked || r->remaining > 0) {
- /* ### log something? */
-
- /* Apache will supply a default error for this. */
- return HTTP_UNSUPPORTED_MEDIA_TYPE;
- }
-
- /*
- * Get rid of the body. this will call ap_setup_client_block(), but
- * our copy above has already verified its work.
- */
- return ap_discard_request_body(r);
-}
-
-/* handle the MKCOL method */
-static int dav_method_mkcol(request_rec *r)
-{
- dav_resource *resource;
- int resource_state;
- dav_auto_version_info av_info;
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- dav_error *err;
- dav_error *err2;
- int result;
- dav_dir_conf *conf;
- dav_response *multi_status;
-
- /* handle the request body */
- /* ### this may move lower once we start processing bodies */
- if ((result = process_mkcol_body(r)) != OK) {
- return result;
- }
-
- conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
- &dav_module);
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (resource->exists) {
- /* oops. something was already there! */
-
- /* Apache will supply a default error for this. */
- /* ### we should provide a specific error message! */
- return HTTP_METHOD_NOT_ALLOWED;
- }
-
- resource_state = dav_get_resource_state(r, resource);
-
- /*
- * Check If-Headers and existing locks.
- *
- * Note: depth == 0 normally requires no multistatus response. However,
- * if we pass DAV_VALIDATE_PARENT, then we could get an error on a URI
- * other than the Request-URI, thereby requiring a multistatus.
- *
- * If the resource does not exist (DAV_RESOURCE_NULL), then we must
- * check the resource *and* its parent. If the resource exists or is
- * a locknull resource, then we check only the resource.
- */
- if ((err = dav_validate_request(r, resource, 0, NULL, &multi_status,
- resource_state == DAV_RESOURCE_NULL ?
- DAV_VALIDATE_PARENT :
- DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, multi_status);
- }
-
- /* if versioned resource, make sure parent is checked out */
- if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
- &av_info)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- /* try to create the collection */
- resource->collection = 1;
- err = (*resource->hooks->create_collection)(resource);
-
- /* restore modifiability of parent back to what it was */
- err2 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
- 0 /*unlock*/, &av_info);
-
- /* check for errors now */
- if (err != NULL) {
- return dav_handle_err(r, err, NULL);
- }
- if (err2 != NULL) {
- /* just log a warning */
- err = dav_push_error(r->pool, err->status, 0,
- "The MKCOL was successful, but there "
- "was a problem automatically checking in "
- "the parent collection.",
- err2);
- dav_log_err(r, err, APLOG_WARNING);
- }
-
- if (locks_hooks != NULL) {
- dav_lockdb *lockdb;
-
- if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
- /* The directory creation was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The MKCOL was successful, but there "
- "was a problem opening the lock database "
- "which prevents inheriting locks from the "
- "parent resources.",
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* notify lock system that we have created/replaced a resource */
- err = dav_notify_created(r, lockdb, resource, resource_state, 0);
-
- (*locks_hooks->close_lockdb)(lockdb);
-
- if (err != NULL) {
- /* The dir creation was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The MKCOL was successful, but there "
- "was a problem updating its lock "
- "information.",
- err);
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /* return an appropriate response (HTTP_CREATED) */
- return dav_created(r, NULL, "Collection", 0);
-}
-
-/* handle the COPY and MOVE methods */
-static int dav_method_copymove(request_rec *r, int is_move)
-{
- dav_resource *resource;
- dav_resource *resnew;
- dav_auto_version_info src_av_info = { 0 };
- dav_auto_version_info dst_av_info = { 0 };
- const char *body;
- const char *dest;
- dav_error *err;
- dav_error *err2;
- dav_error *err3;
- dav_response *multi_response;
- dav_lookup_result lookup;
- int is_dir;
- int overwrite;
- int depth;
- int result;
- dav_lockdb *lockdb;
- int replace_dest;
- int resnew_state;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, !is_move /* label_allowed */,
- 0 /* use_checked_in */, &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* If not a file or collection resource, COPY/MOVE not allowed */
- /* ### allow COPY/MOVE of DeltaV resource types */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR) {
- body = apr_psprintf(r->pool,
- "Cannot COPY/MOVE resource %s.",
- ap_escape_html(r->pool, r->uri));
- return dav_error_response(r, HTTP_METHOD_NOT_ALLOWED, body);
- }
-
- /* get the destination URI */
- dest = apr_table_get(r->headers_in, "Destination");
- if (dest == NULL) {
- /* Look in headers provided by Netscape's Roaming Profiles */
- const char *nscp_host = apr_table_get(r->headers_in, "Host");
- const char *nscp_path = apr_table_get(r->headers_in, "New-uri");
-
- if (nscp_host != NULL && nscp_path != NULL)
- dest = apr_psprintf(r->pool, "http://%s%s", nscp_host, nscp_path);
- }
- if (dest == NULL) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request is missing a Destination header.");
- return HTTP_BAD_REQUEST;
- }
-
- lookup = dav_lookup_uri(dest, r, 1 /* must_be_absolute */);
- if (lookup.rnew == NULL) {
- if (lookup.err.status == HTTP_BAD_REQUEST) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s", lookup.err.desc);
- return HTTP_BAD_REQUEST;
- }
-
- /* ### this assumes that dav_lookup_uri() only generates a status
- * ### that Apache can provide a status line for!! */
-
- return dav_error_response(r, lookup.err.status, lookup.err.desc);
- }
- if (lookup.rnew->status != HTTP_OK) {
- const char *auth = apr_table_get(lookup.rnew->err_headers_out,
- "WWW-Authenticate");
- if (lookup.rnew->status == HTTP_UNAUTHORIZED && auth != NULL) {
- /* propagate the WWW-Authorization header up from the
- * subreq so the client sees it. */
- apr_table_set(r->err_headers_out, "WWW-Authenticate",
- apr_pstrdup(r->pool, auth));
- }
-
- /* ### how best to report this... */
- return dav_error_response(r, lookup.rnew->status,
- "Destination URI had an error.");
- }
-
- /* Resolve destination resource */
- err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
- 0 /* use_checked_in */, &resnew);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* are the two resources handled by the same repository? */
- if (resource->hooks != resnew->hooks) {
- /* ### this message exposes some backend config, but screw it... */
- return dav_error_response(r, HTTP_BAD_GATEWAY,
- "Destination URI is handled by a "
- "different repository than the source URI. "
- "MOVE or COPY between repositories is "
- "not possible.");
- }
-
- /* get and parse the overwrite header value */
- if ((overwrite = dav_get_overwrite(r)) < 0) {
- /* dav_get_overwrite() supplies additional information for the
- * default message. */
- return HTTP_BAD_REQUEST;
- }
-
- /* quick failure test: if dest exists and overwrite is false. */
- if (resnew->exists && !overwrite) {
- /* Supply some text for the error response body. */
- return dav_error_response(r, HTTP_PRECONDITION_FAILED,
- "Destination is not empty and "
- "Overwrite is not \"T\"");
- }
-
- /* are the source and destination the same? */
- if ((*resource->hooks->is_same_resource)(resource, resnew)) {
- /* Supply some text for the error response body. */
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Source and Destination URIs are the same.");
-
- }
-
- is_dir = resource->collection;
-
- /* get and parse the Depth header value. "0" and "infinity" are legal. */
- if ((depth = dav_get_depth(r, DAV_INFINITY)) < 0) {
- /* dav_get_depth() supplies additional information for the
- * default message. */
- return HTTP_BAD_REQUEST;
- }
- if (depth == 1) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Depth must be \"0\" or \"infinity\" for COPY or MOVE.");
- return HTTP_BAD_REQUEST;
- }
- if (is_move && is_dir && depth != DAV_INFINITY) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Depth must be \"infinity\" when moving a collection.");
- return HTTP_BAD_REQUEST;
- }
-
- /*
- * Check If-Headers and existing locks for each resource in the source
- * if we are performing a MOVE. We will return a 424 response with a
- * DAV:multistatus body. The multistatus responses will contain the
- * information about any resource that fails the validation.
- *
- * We check the parent resource, too, since this is a MOVE. Moving the
- * resource effectively removes it from the parent collection, so we
- * must ensure that we have met the appropriate conditions.
- *
- * If a problem occurs with the Request-URI itself, then a plain error
- * (rather than a multistatus) will be returned.
- */
- if (is_move
- && (err = dav_validate_request(r, resource, depth, NULL,
- &multi_response,
- DAV_VALIDATE_PARENT
- | DAV_VALIDATE_USE_424,
- NULL)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not MOVE %s due to a failed "
- "precondition on the source "
- "(e.g. locks).",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- /*
- * Check If-Headers and existing locks for destination. Note that we
- * use depth==infinity since the target (hierarchy) will be deleted
- * before the move/copy is completed.
- *
- * Note that we are overwriting the target, which implies a DELETE, so
- * we are subject to the error/response rules as a DELETE. Namely, we
- * will return a 424 error if any of the validations fail.
- * (see dav_method_delete() for more information)
- */
- if ((err = dav_validate_request(lookup.rnew, resnew, DAV_INFINITY, NULL,
- &multi_response,
- DAV_VALIDATE_PARENT
- | DAV_VALIDATE_USE_424, NULL)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not MOVE/COPY %s due to a "
- "failed precondition on the "
- "destination (e.g. locks).",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- if (is_dir
- && depth == DAV_INFINITY
- && (*resource->hooks->is_parent_resource)(resource, resnew)) {
- /* Supply some text for the error response body. */
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Source collection contains the "
- "Destination.");
-
- }
- if (is_dir
- && (*resnew->hooks->is_parent_resource)(resnew, resource)) {
- /* The destination must exist (since it contains the source), and
- * a condition above implies Overwrite==T. Obviously, we cannot
- * delete the Destination before the MOVE/COPY, as that would
- * delete the Source.
- */
-
- /* Supply some text for the error response body. */
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Destination collection contains the Source "
- "and Overwrite has been specified.");
- }
-
- /* ### for now, we don't need anything in the body */
- if ((result = ap_discard_request_body(r)) != OK) {
- return result;
- }
-
- if ((err = dav_open_lockdb(r, 0, &lockdb)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- /* remove any locks from the old resources */
- /*
- * ### this is Yet Another Traversal. if we do a rename(), then we
- * ### really don't have to do this in some cases since the inode
- * ### values will remain constant across the move. but we can't
- * ### know that fact from outside the provider :-(
- *
- * ### note that we now have a problem atomicity in the move/copy
- * ### since a failure after this would have removed locks (technically,
- * ### this is okay to do, but really...)
- */
- if (is_move && lockdb != NULL) {
- /* ### this is wrong! it blasts direct locks on parent resources */
- /* ### pass lockdb! */
- (void)dav_unlock(r, resource, NULL);
- }
-
- /* if this is a move, then the source parent collection will be modified */
- if (is_move) {
- if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
- &src_av_info)) != NULL) {
- if (lockdb != NULL)
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /*
- * Remember the initial state of the destination, so the lock system
- * can be notified as to how it changed.
- */
- resnew_state = dav_get_resource_state(lookup.rnew, resnew);
-
- /* In a MOVE operation, the destination is replaced by the source.
- * In a COPY operation, if the destination exists, is under version
- * control, and is the same resource type as the source,
- * then it should not be replaced, but modified to be a copy of
- * the source.
- */
- if (!resnew->exists)
- replace_dest = 0;
- else if (is_move || !resource->versioned)
- replace_dest = 1;
- else if (resource->type != resnew->type)
- replace_dest = 1;
- else if ((resource->collection == 0) != (resnew->collection == 0))
- replace_dest = 1;
- else
- replace_dest = 0;
-
- /* If the destination must be created or replaced,
- * make sure the parent collection is writable
- */
- if (!resnew->exists || replace_dest) {
- if ((err = dav_auto_checkout(r, resnew, 1 /*parent_only*/,
- &dst_av_info)) != NULL) {
- /* could not make destination writable:
- * if move, restore state of source parent
- */
- if (is_move) {
- (void)dav_auto_checkin(r, NULL, 1 /* undo */,
- 0 /*unlock*/, &src_av_info);
- }
-
- if (lockdb != NULL)
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /* If source and destination parents are the same, then
- * use the same resource object, so status updates to one are reflected
- * in the other, when doing auto-versioning. Otherwise,
- * we may try to checkin the parent twice.
- */
- if (src_av_info.parent_resource != NULL
- && dst_av_info.parent_resource != NULL
- && (*src_av_info.parent_resource->hooks->is_same_resource)
- (src_av_info.parent_resource, dst_av_info.parent_resource)) {
-
- dst_av_info.parent_resource = src_av_info.parent_resource;
- }
-
- /* If destination is being replaced, remove it first
- * (we know Ovewrite must be TRUE). Then try to copy/move the resource.
- */
- if (replace_dest)
- err = (*resnew->hooks->remove_resource)(resnew, &multi_response);
-
- if (err == NULL) {
- if (is_move)
- err = (*resource->hooks->move_resource)(resource, resnew,
- &multi_response);
- else
- err = (*resource->hooks->copy_resource)(resource, resnew, depth,
- &multi_response);
- }
-
- /* perform any auto-versioning cleanup */
- err2 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
- 0 /*unlock*/, &dst_av_info);
-
- if (is_move) {
- err3 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
- 0 /*unlock*/, &src_av_info);
- }
- else
- err3 = NULL;
-
- /* check for error from remove/copy/move operations */
- if (err != NULL) {
- if (lockdb != NULL)
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not MOVE/COPY %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- /* check for errors from auto-versioning */
- if (err2 != NULL) {
- /* just log a warning */
- err = dav_push_error(r->pool, err2->status, 0,
- "The MOVE/COPY was successful, but there was a "
- "problem automatically checking in the "
- "source parent collection.",
- err2);
- dav_log_err(r, err, APLOG_WARNING);
- }
- if (err3 != NULL) {
- /* just log a warning */
- err = dav_push_error(r->pool, err3->status, 0,
- "The MOVE/COPY was successful, but there was a "
- "problem automatically checking in the "
- "destination or its parent collection.",
- err3);
- dav_log_err(r, err, APLOG_WARNING);
- }
-
- /* propagate any indirect locks at the target */
- if (lockdb != NULL) {
-
- /* notify lock system that we have created/replaced a resource */
- err = dav_notify_created(r, lockdb, resnew, resnew_state, depth);
-
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- if (err != NULL) {
- /* The move/copy was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The MOVE/COPY was successful, but there "
- "was a problem updating the lock "
- "information.",
- err);
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /* return an appropriate response (HTTP_CREATED or HTTP_NO_CONTENT) */
- return dav_created(r, lookup.rnew->uri, "Destination",
- resnew_state == DAV_RESOURCE_EXISTS);
-}
-
-/* dav_method_lock: Handler to implement the DAV LOCK method
- * Returns appropriate HTTP_* response.
- */
-static int dav_method_lock(request_rec *r)
-{
- dav_error *err;
- dav_resource *resource;
- const dav_hooks_locks *locks_hooks;
- int result;
- int depth;
- int new_lock_request = 0;
- apr_xml_doc *doc;
- dav_lock *lock;
- dav_response *multi_response = NULL;
- dav_lockdb *lockdb;
- int resource_state;
-
- /* If no locks provider, decline the request */
- locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- if (locks_hooks == NULL)
- return DECLINED;
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK)
- return result;
-
- depth = dav_get_depth(r, DAV_INFINITY);
- if (depth != 0 && depth != DAV_INFINITY) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Depth must be 0 or \"infinity\" for LOCK.");
- return HTTP_BAD_REQUEST;
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /*
- * Open writable. Unless an error occurs, we'll be
- * writing into the database.
- */
- if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- if (doc != NULL) {
- if ((err = dav_lock_parse_lockinfo(r, resource, lockdb, doc,
- &lock)) != NULL) {
- /* ### add a higher-level description to err? */
- goto error;
- }
- new_lock_request = 1;
-
- lock->auth_user = apr_pstrdup(r->pool, r->user);
- }
-
- resource_state = dav_get_resource_state(r, resource);
-
- /*
- * Check If-Headers and existing locks.
- *
- * If this will create a locknull resource, then the LOCK will affect
- * the parent collection (much like a PUT/MKCOL). For that case, we must
- * validate the parent resource's conditions.
- */
- if ((err = dav_validate_request(r, resource, depth, NULL, &multi_response,
- (resource_state == DAV_RESOURCE_NULL
- ? DAV_VALIDATE_PARENT
- : DAV_VALIDATE_RESOURCE)
- | (new_lock_request ? lock->scope : 0)
- | DAV_VALIDATE_ADD_LD,
- lockdb)) != OK) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not LOCK %s due to a failed "
- "precondition (e.g. other locks).",
- ap_escape_html(r->pool, r->uri)),
- err);
- goto error;
- }
-
- if (new_lock_request == 0) {
- dav_locktoken_list *ltl;
-
- /*
- * Refresh request
- * ### Assumption: We can renew multiple locks on the same resource
- * ### at once. First harvest all the positive lock-tokens given in
- * ### the If header. Then modify the lock entries for this resource
- * ### with the new Timeout val.
- */
-
- if ((err = dav_get_locktoken_list(r, &ltl)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "The lock refresh for %s failed "
- "because no lock tokens were "
- "specified in an \"If:\" "
- "header.",
- ap_escape_html(r->pool, r->uri)),
- err);
- goto error;
- }
-
- if ((err = (*locks_hooks->refresh_locks)(lockdb, resource, ltl,
- dav_get_timeout(r),
- &lock)) != NULL) {
- /* ### add a higher-level description to err? */
- goto error;
- }
- } else {
- /* New lock request */
- char *locktoken_txt;
- dav_dir_conf *conf;
-
- conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
- &dav_module);
-
- /* apply lower bound (if any) from DAVMinTimeout directive */
- if (lock->timeout != DAV_TIMEOUT_INFINITE
- && lock->timeout < time(NULL) + conf->locktimeout)
- lock->timeout = time(NULL) + conf->locktimeout;
-
- err = dav_add_lock(r, resource, lockdb, lock, &multi_response);
- if (err != NULL) {
- /* ### add a higher-level description to err? */
- goto error;
- }
-
- locktoken_txt = apr_pstrcat(r->pool, "<",
- (*locks_hooks->format_locktoken)(r->pool,
- lock->locktoken),
- ">", NULL);
-
- apr_table_set(r->headers_out, "Lock-Token", locktoken_txt);
- }
-
- (*locks_hooks->close_lockdb)(lockdb);
-
- r->status = HTTP_OK;
- ap_set_content_type(r, DAV_XML_CONTENT_TYPE);
-
- ap_rputs(DAV_XML_HEADER DEBUG_CR "<D:prop xmlns:D=\"DAV:\">" DEBUG_CR, r);
- if (lock == NULL)
- ap_rputs("<D:lockdiscovery/>" DEBUG_CR, r);
- else {
- ap_rprintf(r,
- "<D:lockdiscovery>" DEBUG_CR
- "%s" DEBUG_CR
- "</D:lockdiscovery>" DEBUG_CR,
- dav_lock_get_activelock(r, lock, NULL));
- }
- ap_rputs("</D:prop>", r);
-
- /* the response has been sent. */
- return DONE;
-
- error:
- (*locks_hooks->close_lockdb)(lockdb);
- return dav_handle_err(r, err, multi_response);
-}
-
-/* dav_method_unlock: Handler to implement the DAV UNLOCK method
- * Returns appropriate HTTP_* response.
- */
-static int dav_method_unlock(request_rec *r)
-{
- dav_error *err;
- dav_resource *resource;
- const dav_hooks_locks *locks_hooks;
- int result;
- const char *const_locktoken_txt;
- char *locktoken_txt;
- dav_locktoken *locktoken = NULL;
- int resource_state;
- dav_response *multi_response;
-
- /* If no locks provider, decline the request */
- locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- if (locks_hooks == NULL)
- return DECLINED;
-
- if ((const_locktoken_txt = apr_table_get(r->headers_in,
- "Lock-Token")) == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Unlock failed (%s): "
- "No Lock-Token specified in header", r->filename);
- return HTTP_BAD_REQUEST;
- }
-
- locktoken_txt = apr_pstrdup(r->pool, const_locktoken_txt);
- if (locktoken_txt[0] != '<') {
- /* ### should provide more specifics... */
- return HTTP_BAD_REQUEST;
- }
- locktoken_txt++;
-
- if (locktoken_txt[strlen(locktoken_txt) - 1] != '>') {
- /* ### should provide more specifics... */
- return HTTP_BAD_REQUEST;
- }
- locktoken_txt[strlen(locktoken_txt) - 1] = '\0';
-
- if ((err = (*locks_hooks->parse_locktoken)(r->pool, locktoken_txt,
- &locktoken)) != NULL) {
- err = dav_push_error(r->pool, HTTP_BAD_REQUEST, 0,
- apr_psprintf(r->pool,
- "The UNLOCK on %s failed -- an "
- "invalid lock token was specified "
- "in the \"If:\" header.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- resource_state = dav_get_resource_state(r, resource);
-
- /*
- * Check If-Headers and existing locks.
- *
- * Note: depth == 0 normally requires no multistatus response. However,
- * if we pass DAV_VALIDATE_PARENT, then we could get an error on a URI
- * other than the Request-URI, thereby requiring a multistatus.
- *
- * If the resource is a locknull resource, then the UNLOCK will affect
- * the parent collection (much like a delete). For that case, we must
- * validate the parent resource's conditions.
- */
- if ((err = dav_validate_request(r, resource, 0, locktoken,
- &multi_response,
- resource_state == DAV_RESOURCE_LOCK_NULL
- ? DAV_VALIDATE_PARENT
- : DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, multi_response);
- }
-
- /* ### RFC 2518 s. 8.11: If this resource is locked by locktoken,
- * _all_ resources locked by locktoken are released. It does not say
- * resource has to be the root of an infinte lock. Thus, an UNLOCK
- * on any part of an infinte lock will remove the lock on all resources.
- *
- * For us, if r->filename represents an indirect lock (part of an infinity lock),
- * we must actually perform an UNLOCK on the direct lock for this resource.
- */
- if ((result = dav_unlock(r, resource, locktoken)) != OK) {
- return result;
- }
-
- return HTTP_NO_CONTENT;
-}
-
-static int dav_method_vsn_control(request_rec *r)
-{
- dav_resource *resource;
- int resource_state;
- dav_auto_version_info av_info;
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- apr_xml_doc *doc;
- const char *target = NULL;
- int result;
-
- /* if no versioning provider, decline the request */
- if (vsn_hooks == NULL)
- return DECLINED;
-
- /* ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* remember the pre-creation resource state */
- resource_state = dav_get_resource_state(r, resource);
-
- /* parse the request body (may be a version-control element) */
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
- /* note: doc == NULL if no request body */
-
- if (doc != NULL) {
- const apr_xml_elem *child;
- apr_size_t tsize;
-
- if (!dav_validate_root(doc, "version-control")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body does not contain "
- "a \"version-control\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* get the version URI */
- if ((child = dav_find_child(doc->root, "version")) == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"version-control\" element does not contain "
- "a \"version\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- if ((child = dav_find_child(child, "href")) == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"version\" element does not contain "
- "an \"href\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* get version URI */
- apr_xml_to_text(r->pool, child, APR_XML_X2T_INNER, NULL, NULL,
- &target, &tsize);
- if (tsize == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "An \"href\" element does not contain a URI.");
- return HTTP_BAD_REQUEST;
- }
- }
-
- /* Check request preconditions */
-
- /* ### need a general mechanism for reporting precondition violations
- * ### (should be returning XML document for 403/409 responses)
- */
-
- /* if not versioning existing resource, must specify version to select */
- if (!resource->exists && target == NULL) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:initial-version-required/>");
- return dav_handle_err(r, err, NULL);
- }
- else if (resource->exists) {
- /* cannot add resource to existing version history */
- if (target != NULL) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:cannot-add-to-existing-history/>");
- return dav_handle_err(r, err, NULL);
- }
-
- /* resource must be unversioned and versionable, or version selector */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR
- || (!resource->versioned && !(vsn_hooks->versionable)(resource))) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:must-be-versionable/>");
- return dav_handle_err(r, err, NULL);
- }
-
- /* the DeltaV spec says if resource is a version selector,
- * then VERSION-CONTROL is a no-op
- */
- if (resource->versioned) {
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* no body */
- ap_set_content_length(r, 0);
-
- return DONE;
- }
- }
-
- /* Check If-Headers and existing locks */
- /* Note: depth == 0. Implies no need for a multistatus response. */
- if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
- resource_state == DAV_RESOURCE_NULL ?
- DAV_VALIDATE_PARENT :
- DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- return dav_handle_err(r, err, NULL);
- }
-
- /* if in versioned collection, make sure parent is checked out */
- if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
- &av_info)) != NULL) {
- return dav_handle_err(r, err, NULL);
- }
-
- /* attempt to version-control the resource */
- if ((err = (*vsn_hooks->vsn_control)(resource, target)) != NULL) {
- dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, &av_info);
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Could not VERSION-CONTROL resource %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* revert writability of parent directory */
- err = dav_auto_checkin(r, resource, 0 /*undo*/, 0 /*unlock*/, &av_info);
- if (err != NULL) {
- /* just log a warning */
- err = dav_push_error(r->pool, err->status, 0,
- "The VERSION-CONTROL was successful, but there "
- "was a problem automatically checking in "
- "the parent collection.",
- err);
- dav_log_err(r, err, APLOG_WARNING);
- }
-
- /* if the resource is lockable, let lock system know of new resource */
- if (locks_hooks != NULL
- && (*locks_hooks->get_supportedlock)(resource) != NULL) {
- dav_lockdb *lockdb;
-
- if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
- /* The resource creation was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The VERSION-CONTROL was successful, but there "
- "was a problem opening the lock database "
- "which prevents inheriting locks from the "
- "parent resources.",
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* notify lock system that we have created/replaced a resource */
- err = dav_notify_created(r, lockdb, resource, resource_state, 0);
-
- (*locks_hooks->close_lockdb)(lockdb);
-
- if (err != NULL) {
- /* The dir creation was successful, but the locking failed. */
- err = dav_push_error(r->pool, err->status, 0,
- "The VERSION-CONTROL was successful, but there "
- "was a problem updating its lock "
- "information.",
- err);
- return dav_handle_err(r, err, NULL);
- }
- }
-
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* return an appropriate response (HTTP_CREATED) */
- return dav_created(r, resource->uri, "Version selector", 0 /*replaced*/);
-}
-
-/* handle the CHECKOUT method */
-static int dav_method_checkout(request_rec *r)
-{
- dav_resource *resource;
- dav_resource *working_resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- int result;
- apr_xml_doc *doc;
- int apply_to_vsn = 0;
- int is_unreserved = 0;
- int is_fork_ok = 0;
- int create_activity = 0;
- apr_array_header_t *activities = NULL;
-
- /* If no versioning provider, decline the request */
- if (vsn_hooks == NULL)
- return DECLINED;
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK)
- return result;
-
- if (doc != NULL) {
- const apr_xml_elem *aset;
-
- if (!dav_validate_root(doc, "checkout")) {
- /* This supplies additional information for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body, if present, must be a "
- "DAV:checkout element.");
- return HTTP_BAD_REQUEST;
- }
-
- if (dav_find_child(doc->root, "apply-to-version") != NULL) {
- if (apr_table_get(r->headers_in, "label") != NULL) {
- /* ### we want generic 403/409 XML reporting here */
- /* ### DAV:must-not-have-label-and-apply-to-version */
- return dav_error_response(r, HTTP_CONFLICT,
- "DAV:apply-to-version cannot be "
- "used in conjunction with a "
- "Label header.");
- }
- apply_to_vsn = 1;
- }
-
- is_unreserved = dav_find_child(doc->root, "unreserved") != NULL;
- is_fork_ok = dav_find_child(doc->root, "fork-ok") != NULL;
-
- if ((aset = dav_find_child(doc->root, "activity-set")) != NULL) {
- if (dav_find_child(aset, "new") != NULL) {
- create_activity = 1;
- }
- else {
- const apr_xml_elem *child = aset->first_child;
-
- activities = apr_array_make(r->pool, 1, sizeof(const char *));
-
- for (; child != NULL; child = child->next) {
- if (child->ns == APR_XML_NS_DAV_ID
- && strcmp(child->name, "href") == 0) {
- const char *href;
-
- href = dav_xml_get_cdata(child, r->pool,
- 1 /* strip_white */);
- *(const char **)apr_array_push(activities) = href;
- }
- }
-
- if (activities->nelts == 0) {
- /* no href's is a DTD violation:
- <!ELEMENT activity-set (href+ | new)>
- */
-
- /* This supplies additional info for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Within the DAV:activity-set element, the "
- "DAV:new element must be used, or at least "
- "one DAV:href must be specified.");
- return HTTP_BAD_REQUEST;
- }
- }
- }
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 1 /*label_allowed*/, apply_to_vsn, &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* Check the state of the resource: must be a file or collection,
- * must be versioned, and must not already be checked out.
- */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR
- && resource->type != DAV_RESOURCE_TYPE_VERSION) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot checkout this type of resource.");
- }
-
- if (!resource->versioned) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot checkout unversioned resource.");
- }
-
- if (resource->working) {
- return dav_error_response(r, HTTP_CONFLICT,
- "The resource is already checked out to the workspace.");
- }
-
- /* ### do lock checks, once behavior is defined */
-
- /* Do the checkout */
- if ((err = (*vsn_hooks->checkout)(resource, 0 /*auto_checkout*/,
- is_unreserved, is_fork_ok,
- create_activity, activities,
- &working_resource)) != NULL) {
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Could not CHECKOUT resource %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* if no working resource created, return OK,
- * else return CREATED with working resource URL in Location header
- */
- if (working_resource == NULL) {
- /* no body */
- ap_set_content_length(r, 0);
- return DONE;
- }
-
- return dav_created(r, working_resource->uri, "Checked-out resource", 0);
-}
-
-/* handle the UNCHECKOUT method */
-static int dav_method_uncheckout(request_rec *r)
-{
- dav_resource *resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- int result;
-
- /* If no versioning provider, decline the request */
- if (vsn_hooks == NULL)
- return DECLINED;
-
- if ((result = ap_discard_request_body(r)) != OK) {
- return result;
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* Check the state of the resource: must be a file or collection,
- * must be versioned, and must be checked out.
- */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot uncheckout this type of resource.");
- }
-
- if (!resource->versioned) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot uncheckout unversioned resource.");
- }
-
- if (!resource->working) {
- return dav_error_response(r, HTTP_CONFLICT,
- "The resource is not checked out to the workspace.");
- }
-
- /* ### do lock checks, once behavior is defined */
-
- /* Do the uncheckout */
- if ((err = (*vsn_hooks->uncheckout)(resource)) != NULL) {
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Could not UNCHECKOUT resource %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* no body */
- ap_set_content_length(r, 0);
-
- return DONE;
-}
-
-/* handle the CHECKIN method */
-static int dav_method_checkin(request_rec *r)
-{
- dav_resource *resource;
- dav_resource *new_version;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- int result;
- apr_xml_doc *doc;
- int keep_checked_out = 0;
-
- /* If no versioning provider, decline the request */
- if (vsn_hooks == NULL)
- return DECLINED;
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK)
- return result;
-
- if (doc != NULL) {
- if (!dav_validate_root(doc, "checkin")) {
- /* This supplies additional information for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body, if present, must be a "
- "DAV:checkin element.");
- return HTTP_BAD_REQUEST;
- }
-
- keep_checked_out = dav_find_child(doc->root, "keep-checked-out") != NULL;
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* Check the state of the resource: must be a file or collection,
- * must be versioned, and must be checked out.
- */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot checkin this type of resource.");
- }
-
- if (!resource->versioned) {
- return dav_error_response(r, HTTP_CONFLICT,
- "Cannot checkin unversioned resource.");
- }
-
- if (!resource->working) {
- return dav_error_response(r, HTTP_CONFLICT,
- "The resource is not checked out.");
- }
-
- /* ### do lock checks, once behavior is defined */
-
- /* Do the checkin */
- if ((err = (*vsn_hooks->checkin)(resource, keep_checked_out, &new_version))
- != NULL) {
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Could not CHECKIN resource %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- return dav_created(r, new_version->uri, "Version", 0);
-}
-
-static int dav_method_update(request_rec *r)
-{
- dav_resource *resource;
- dav_resource *version = NULL;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- apr_xml_doc *doc;
- apr_xml_elem *child;
- int is_label = 0;
- int depth;
- int result;
- apr_size_t tsize;
- const char *target;
- dav_response *multi_response;
- dav_error *err;
- dav_lookup_result lookup;
-
- /* If no versioning provider, or UPDATE not supported,
- * decline the request */
- if (vsn_hooks == NULL || vsn_hooks->update == NULL)
- return DECLINED;
-
- if ((depth = dav_get_depth(r, 0)) < 0) {
- /* dav_get_depth() supplies additional information for the
- * default message. */
- return HTTP_BAD_REQUEST;
- }
-
- /* parse the request body */
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
-
- if (doc == NULL || !dav_validate_root(doc, "update")) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body does not contain "
- "an \"update\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* check for label-name or version element, but not both */
- if ((child = dav_find_child(doc->root, "label-name")) != NULL)
- is_label = 1;
- else if ((child = dav_find_child(doc->root, "version")) != NULL) {
- /* get the href element */
- if ((child = dav_find_child(child, "href")) == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The version element does not contain "
- "an \"href\" element.");
- return HTTP_BAD_REQUEST;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"update\" element does not contain "
- "a \"label-name\" or \"version\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* a depth greater than zero is only allowed for a label */
- if (!is_label && depth != 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Depth must be zero for UPDATE with a version");
- return HTTP_BAD_REQUEST;
- }
-
- /* get the target value (a label or a version URI) */
- apr_xml_to_text(r->pool, child, APR_XML_X2T_INNER, NULL, NULL,
- &target, &tsize);
- if (tsize == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "A \"label-name\" or \"href\" element does not contain "
- "any content.");
- return HTTP_BAD_REQUEST;
- }
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* ### need a general mechanism for reporting precondition violations
- * ### (should be returning XML document for 403/409 responses)
- */
- if (resource->type != DAV_RESOURCE_TYPE_REGULAR
- || !resource->versioned || resource->working) {
- return dav_error_response(r, HTTP_CONFLICT,
- "<DAV:must-be-checked-in-version-controlled-resource>");
- }
-
- /* if target is a version, resolve the version resource */
- /* ### dav_lookup_uri only allows absolute URIs; is that OK? */
- if (!is_label) {
- lookup = dav_lookup_uri(target, r, 0 /* must_be_absolute */);
- if (lookup.rnew == NULL) {
- if (lookup.err.status == HTTP_BAD_REQUEST) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s", lookup.err.desc);
- return HTTP_BAD_REQUEST;
- }
-
- /* ### this assumes that dav_lookup_uri() only generates a status
- * ### that Apache can provide a status line for!! */
-
- return dav_error_response(r, lookup.err.status, lookup.err.desc);
- }
- if (lookup.rnew->status != HTTP_OK) {
- /* ### how best to report this... */
- return dav_error_response(r, lookup.rnew->status,
- "Version URI had an error.");
- }
-
- /* resolve version resource */
- err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
- 0 /* use_checked_in */, &version);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* NULL out target, since we're using a version resource */
- target = NULL;
- }
-
- /* do the UPDATE operation */
- err = (*vsn_hooks->update)(resource, version, target, depth, &multi_response);
-
- if (err != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not UPDATE %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* no body */
- ap_set_content_length(r, 0);
-
- return DONE;
-}
-
-/* context maintained during LABEL treewalk */
-typedef struct dav_label_walker_ctx
-{
- /* input: */
- dav_walk_params w;
-
- /* label being manipulated */
- const char *label;
-
- /* label operation */
- int label_op;
-#define DAV_LABEL_ADD 1
-#define DAV_LABEL_SET 2
-#define DAV_LABEL_REMOVE 3
-
- /* version provider hooks */
- const dav_hooks_vsn *vsn_hooks;
-
-} dav_label_walker_ctx;
-
-static dav_error * dav_label_walker(dav_walk_resource *wres, int calltype)
-{
- dav_label_walker_ctx *ctx = wres->walk_ctx;
- dav_error *err = NULL;
-
- /* Check the state of the resource: must be a version or
- * non-checkedout version selector
- */
- /* ### need a general mechanism for reporting precondition violations
- * ### (should be returning XML document for 403/409 responses)
- */
- if (wres->resource->type != DAV_RESOURCE_TYPE_VERSION &&
- (wres->resource->type != DAV_RESOURCE_TYPE_REGULAR
- || !wres->resource->versioned)) {
- err = dav_new_error(ctx->w.pool, HTTP_CONFLICT, 0,
- "<DAV:must-be-version-or-version-selector/>");
- }
- else if (wres->resource->working) {
- err = dav_new_error(ctx->w.pool, HTTP_CONFLICT, 0,
- "<DAV:must-not-be-checked-out/>");
- }
- else {
- /* do the label operation */
- if (ctx->label_op == DAV_LABEL_REMOVE)
- err = (*ctx->vsn_hooks->remove_label)(wres->resource, ctx->label);
- else
- err = (*ctx->vsn_hooks->add_label)(wres->resource, ctx->label,
- ctx->label_op == DAV_LABEL_SET);
- }
-
- if (err != NULL) {
- /* ### need utility routine to add response with description? */
- dav_add_response(wres, err->status, NULL);
- wres->response->desc = err->desc;
- }
-
- return NULL;
-}
-
-static int dav_method_label(request_rec *r)
-{
- dav_resource *resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- apr_xml_doc *doc;
- apr_xml_elem *child;
- int depth;
- int result;
- apr_size_t tsize;
- dav_error *err;
- dav_label_walker_ctx ctx = { { 0 } };
- dav_response *multi_status;
-
- /* If no versioning provider, or the provider doesn't support
- * labels, decline the request */
- if (vsn_hooks == NULL || vsn_hooks->add_label == NULL)
- return DECLINED;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- if ((depth = dav_get_depth(r, 0)) < 0) {
- /* dav_get_depth() supplies additional information for the
- * default message. */
- return HTTP_BAD_REQUEST;
- }
-
- /* parse the request body */
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
-
- if (doc == NULL || !dav_validate_root(doc, "label")) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body does not contain "
- "a \"label\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* check for add, set, or remove element */
- if ((child = dav_find_child(doc->root, "add")) != NULL) {
- ctx.label_op = DAV_LABEL_ADD;
- }
- else if ((child = dav_find_child(doc->root, "set")) != NULL) {
- ctx.label_op = DAV_LABEL_SET;
- }
- else if ((child = dav_find_child(doc->root, "remove")) != NULL) {
- ctx.label_op = DAV_LABEL_REMOVE;
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The \"label\" element does not contain "
- "an \"add\", \"set\", or \"remove\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* get the label string */
- if ((child = dav_find_child(child, "label-name")) == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The label command element does not contain "
- "a \"label-name\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- apr_xml_to_text(r->pool, child, APR_XML_X2T_INNER, NULL, NULL,
- &ctx.label, &tsize);
- if (tsize == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "A \"label-name\" element does not contain "
- "a label name.");
- return HTTP_BAD_REQUEST;
- }
-
- /* do the label operation walk */
- ctx.w.walk_type = DAV_WALKTYPE_NORMAL;
- ctx.w.func = dav_label_walker;
- ctx.w.walk_ctx = &ctx;
- ctx.w.pool = r->pool;
- ctx.w.root = resource;
- ctx.vsn_hooks = vsn_hooks;
-
- err = (*resource->hooks->walk)(&ctx.w, depth, &multi_status);
-
- if (err != NULL) {
- /* some sort of error occurred which terminated the walk */
- err = dav_push_error(r->pool, err->status, 0,
- "The LABEL operation was terminated prematurely.",
- err);
- return dav_handle_err(r, err, multi_status);
- }
-
- if (multi_status != NULL) {
- /* One or more resources had errors. If depth was zero, convert
- * response to simple error, else make sure there is an
- * overall error to pass to dav_handle_err()
- */
- if (depth == 0) {
- err = dav_new_error(r->pool, multi_status->status, 0, multi_status->desc);
- multi_status = NULL;
- }
- else {
- err = dav_new_error(r->pool, HTTP_MULTI_STATUS, 0,
- "Errors occurred during the LABEL operation.");
- }
-
- return dav_handle_err(r, err, multi_status);
- }
-
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* no body */
- ap_set_content_length(r, 0);
-
- return DONE;
-}
-
-static int dav_method_report(request_rec *r)
-{
- dav_resource *resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- int result;
- int label_allowed;
- apr_xml_doc *doc;
- dav_error *err;
-
- /* If no versioning provider, decline the request */
- if (vsn_hooks == NULL)
- return DECLINED;
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK)
- return result;
- if (doc == NULL) {
- /* This supplies additional information for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body must specify a report.");
- return HTTP_BAD_REQUEST;
- }
-
- /* Ask repository module to resolve the resource.
- * First determine whether a Target-Selector header is allowed
- * for this report.
- */
- label_allowed = (*vsn_hooks->report_label_header_allowed)(doc);
- err = dav_get_resource(r, label_allowed, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* set up defaults for the report response */
- r->status = HTTP_OK;
- ap_set_content_type(r, DAV_XML_CONTENT_TYPE);
-
- /* run report hook */
- if ((err = (*vsn_hooks->deliver_report)(r, resource, doc,
- r->output_filters)) != NULL) {
- if (! r->sent_bodyct)
- /* No data has been sent to client yet; throw normal error. */
- return dav_handle_err(r, err, NULL);
-
- /* If an error occurred during the report delivery, there's
- basically nothing we can do but abort the connection and
- log an error. This is one of the limitations of HTTP; it
- needs to "know" the entire status of the response before
- generating it, which is just impossible in these streamy
- response situations. */
- err = dav_push_error(r->pool, err->status, 0,
- "Provider encountered an error while streaming"
- " a REPORT response.", err);
- dav_log_err(r, err, APLOG_ERR);
- r->connection->aborted = 1;
- return DONE;
- }
-
- return DONE;
-}
-
-static int dav_method_make_workspace(request_rec *r)
-{
- dav_resource *resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- apr_xml_doc *doc;
- int result;
-
- /* if no versioning provider, or the provider does not support workspaces,
- * decline the request
- */
- if (vsn_hooks == NULL || vsn_hooks->make_workspace == NULL)
- return DECLINED;
-
- /* ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* parse the request body (must be a mkworkspace element) */
- if ((result = ap_xml_parse_input(r, &doc)) != OK) {
- return result;
- }
-
- if (doc == NULL
- || !dav_validate_root(doc, "mkworkspace")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body does not contain "
- "a \"mkworkspace\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* Check request preconditions */
-
- /* ### need a general mechanism for reporting precondition violations
- * ### (should be returning XML document for 403/409 responses)
- */
-
- /* resource must not already exist */
- if (resource->exists) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:resource-must-be-null/>");
- return dav_handle_err(r, err, NULL);
- }
-
- /* ### what about locking? */
-
- /* attempt to create the workspace */
- if ((err = (*vsn_hooks->make_workspace)(resource, doc)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not create workspace %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* return an appropriate response (HTTP_CREATED) */
- return dav_created(r, resource->uri, "Workspace", 0 /*replaced*/);
-}
-
-static int dav_method_make_activity(request_rec *r)
-{
- dav_resource *resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- int result;
-
- /* if no versioning provider, or the provider does not support activities,
- * decline the request
- */
- if (vsn_hooks == NULL || vsn_hooks->make_activity == NULL)
- return DECLINED;
-
- /* ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* MKACTIVITY does not have a defined request body. */
- if ((result = ap_discard_request_body(r)) != OK) {
- return result;
- }
-
- /* Check request preconditions */
-
- /* ### need a general mechanism for reporting precondition violations
- * ### (should be returning XML document for 403/409 responses)
- */
-
- /* resource must not already exist */
- if (resource->exists) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:resource-must-be-null/>");
- return dav_handle_err(r, err, NULL);
- }
-
- /* the provider must say whether the resource can be created as
- an activity, i.e. whether the location is ok. */
- if (vsn_hooks->can_be_activity != NULL
- && !(*vsn_hooks->can_be_activity)(resource)) {
- err = dav_new_error(r->pool, HTTP_FORBIDDEN, 0,
- "<DAV:activity-location-ok/>");
- return dav_handle_err(r, err, NULL);
- }
-
- /* ### what about locking? */
-
- /* attempt to create the activity */
- if ((err = (*vsn_hooks->make_activity)(resource)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not create activity %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* set the Cache-Control header, per the spec */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* return an appropriate response (HTTP_CREATED) */
- return dav_created(r, resource->uri, "Activity", 0 /*replaced*/);
-}
-
-static int dav_method_baseline_control(request_rec *r)
-{
- /* ### */
- return HTTP_METHOD_NOT_ALLOWED;
-}
-
-static int dav_method_merge(request_rec *r)
-{
- dav_resource *resource;
- dav_resource *source_resource;
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err;
- int result;
- apr_xml_doc *doc;
- apr_xml_elem *source_elem;
- apr_xml_elem *href_elem;
- apr_xml_elem *prop_elem;
- const char *source;
- int no_auto_merge;
- int no_checkout;
- dav_lookup_result lookup;
-
- /* If no versioning provider, decline the request */
- if (vsn_hooks == NULL)
- return DECLINED;
-
- if ((result = ap_xml_parse_input(r, &doc)) != OK)
- return result;
-
- if (doc == NULL || !dav_validate_root(doc, "merge")) {
- /* This supplies additional information for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request body must be present and must be a "
- "DAV:merge element.");
- return HTTP_BAD_REQUEST;
- }
-
- if ((source_elem = dav_find_child(doc->root, "source")) == NULL) {
- /* This supplies additional information for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The DAV:merge element must contain a DAV:source "
- "element.");
- return HTTP_BAD_REQUEST;
- }
- if ((href_elem = dav_find_child(source_elem, "href")) == NULL) {
- /* This supplies additional information for the default msg. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The DAV:source element must contain a DAV:href "
- "element.");
- return HTTP_BAD_REQUEST;
- }
- source = dav_xml_get_cdata(href_elem, r->pool, 1 /* strip_white */);
-
- /* get a subrequest for the source, so that we can get a dav_resource
- for that source. */
- lookup = dav_lookup_uri(source, r, 0 /* must_be_absolute */);
- if (lookup.rnew == NULL) {
- if (lookup.err.status == HTTP_BAD_REQUEST) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s", lookup.err.desc);
- return HTTP_BAD_REQUEST;
- }
-
- /* ### this assumes that dav_lookup_uri() only generates a status
- * ### that Apache can provide a status line for!! */
-
- return dav_error_response(r, lookup.err.status, lookup.err.desc);
- }
- if (lookup.rnew->status != HTTP_OK) {
- /* ### how best to report this... */
- return dav_error_response(r, lookup.rnew->status,
- "Merge source URI had an error.");
- }
- err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
- 0 /* use_checked_in */, &source_resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- no_auto_merge = dav_find_child(doc->root, "no-auto-merge") != NULL;
- no_checkout = dav_find_child(doc->root, "no-checkout") != NULL;
-
- prop_elem = dav_find_child(doc->root, "prop");
-
- /* ### check RFC. I believe the DAV:merge element may contain any
- ### element also allowed within DAV:checkout. need to extract them
- ### here, and pass them along.
- ### if so, then refactor the CHECKOUT method handling so we can reuse
- ### the code. maybe create a structure to hold CHECKOUT parameters
- ### which can be passed to the checkout() and merge() hooks. */
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* ### check the source and target resources flags/types */
-
- /* ### do lock checks, once behavior is defined */
-
- /* set the Cache-Control header, per the spec */
- /* ### correct? */
- apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
- /* Initialize these values for a standard MERGE response. If the MERGE
- is going to do something different (i.e. an error), then it must
- return a dav_error, and we'll reset these values properly. */
- r->status = HTTP_OK;
- ap_set_content_type(r, "text/xml");
-
- /* ### should we do any preliminary response generation? probably not,
- ### because we may have an error, thus demanding something else in
- ### the response body. */
-
- /* Do the merge, including any response generation. */
- if ((err = (*vsn_hooks->merge)(resource, source_resource,
- no_auto_merge, no_checkout,
- prop_elem,
- r->output_filters)) != NULL) {
- /* ### is err->status the right error here? */
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not MERGE resource \"%s\" "
- "into \"%s\".",
- ap_escape_html(r->pool, source),
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
-
- /* the response was fully generated by the merge() hook. */
- /* ### urk. does this prevent logging? need to check... */
- return DONE;
-}
-
-static int dav_method_bind(request_rec *r)
-{
- dav_resource *resource;
- dav_resource *binding;
- dav_auto_version_info av_info;
- const dav_hooks_binding *binding_hooks = DAV_GET_HOOKS_BINDING(r);
- const char *dest;
- dav_error *err;
- dav_error *err2;
- dav_response *multi_response = NULL;
- dav_lookup_result lookup;
- int overwrite;
-
- /* If no bindings provider, decline the request */
- if (binding_hooks == NULL)
- return DECLINED;
-
- /* Ask repository module to resolve the resource */
- err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
- &resource);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- if (!resource->exists) {
- /* Apache will supply a default error for this. */
- return HTTP_NOT_FOUND;
- }
-
- /* get the destination URI */
- dest = apr_table_get(r->headers_in, "Destination");
- if (dest == NULL) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "The request is missing a Destination header.");
- return HTTP_BAD_REQUEST;
- }
-
- lookup = dav_lookup_uri(dest, r, 0 /* must_be_absolute */);
- if (lookup.rnew == NULL) {
- if (lookup.err.status == HTTP_BAD_REQUEST) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s", lookup.err.desc);
- return HTTP_BAD_REQUEST;
- }
- else if (lookup.err.status == HTTP_BAD_GATEWAY) {
- /* ### Bindings protocol draft 02 says to return 507
- * ### (Cross Server Binding Forbidden); Apache already defines 507
- * ### as HTTP_INSUFFICIENT_STORAGE. So, for now, we'll return
- * ### HTTP_FORBIDDEN
- */
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Cross server bindings are not "
- "allowed by this server.");
- }
-
- /* ### this assumes that dav_lookup_uri() only generates a status
- * ### that Apache can provide a status line for!! */
-
- return dav_error_response(r, lookup.err.status, lookup.err.desc);
- }
- if (lookup.rnew->status != HTTP_OK) {
- /* ### how best to report this... */
- return dav_error_response(r, lookup.rnew->status,
- "Destination URI had an error.");
- }
-
- /* resolve binding resource */
- err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
- 0 /* use_checked_in */, &binding);
- if (err != NULL)
- return dav_handle_err(r, err, NULL);
-
- /* are the two resources handled by the same repository? */
- if (resource->hooks != binding->hooks) {
- /* ### this message exposes some backend config, but screw it... */
- return dav_error_response(r, HTTP_BAD_GATEWAY,
- "Destination URI is handled by a "
- "different repository than the source URI. "
- "BIND between repositories is not possible.");
- }
-
- /* get and parse the overwrite header value */
- if ((overwrite = dav_get_overwrite(r)) < 0) {
- /* dav_get_overwrite() supplies additional information for the
- * default message. */
- return HTTP_BAD_REQUEST;
- }
-
- /* quick failure test: if dest exists and overwrite is false. */
- if (binding->exists && !overwrite) {
- return dav_error_response(r, HTTP_PRECONDITION_FAILED,
- "Destination is not empty and "
- "Overwrite is not \"T\"");
- }
-
- /* are the source and destination the same? */
- if ((*resource->hooks->is_same_resource)(resource, binding)) {
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Source and Destination URIs are the same.");
- }
-
- /*
- * Check If-Headers and existing locks for destination. Note that we
- * use depth==infinity since the target (hierarchy) will be deleted
- * before the move/copy is completed.
- *
- * Note that we are overwriting the target, which implies a DELETE, so
- * we are subject to the error/response rules as a DELETE. Namely, we
- * will return a 424 error if any of the validations fail.
- * (see dav_method_delete() for more information)
- */
- if ((err = dav_validate_request(lookup.rnew, binding, DAV_INFINITY, NULL,
- &multi_response,
- DAV_VALIDATE_PARENT
- | DAV_VALIDATE_USE_424, NULL)) != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not BIND %s due to a "
- "failed precondition on the "
- "destination (e.g. locks).",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- /* guard against creating circular bindings */
- if (resource->collection
- && (*resource->hooks->is_parent_resource)(resource, binding)) {
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Source collection contains the Destination.");
- }
- if (resource->collection
- && (*resource->hooks->is_parent_resource)(binding, resource)) {
- /* The destination must exist (since it contains the source), and
- * a condition above implies Overwrite==T. Obviously, we cannot
- * delete the Destination before the BIND, as that would
- * delete the Source.
- */
-
- return dav_error_response(r, HTTP_FORBIDDEN,
- "Destination collection contains the Source and "
- "Overwrite has been specified.");
- }
-
- /* prepare the destination collection for modification */
- if ((err = dav_auto_checkout(r, binding, 1 /* parent_only */,
- &av_info)) != NULL) {
- /* could not make destination writable */
- return dav_handle_err(r, err, NULL);
- }
-
- /* If target exists, remove it first (we know Ovewrite must be TRUE).
- * Then try to bind to the resource.
- */
- if (binding->exists)
- err = (*resource->hooks->remove_resource)(binding, &multi_response);
-
- if (err == NULL) {
- err = (*binding_hooks->bind_resource)(resource, binding);
- }
-
- /* restore parent collection states */
- err2 = dav_auto_checkin(r, NULL,
- err != NULL /* undo if error */,
- 0 /* unlock */, &av_info);
-
- /* check for error from remove/bind operations */
- if (err != NULL) {
- err = dav_push_error(r->pool, err->status, 0,
- apr_psprintf(r->pool,
- "Could not BIND %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, multi_response);
- }
-
- /* check for errors from reverting writability */
- if (err2 != NULL) {
- /* just log a warning */
- err = dav_push_error(r->pool, err2->status, 0,
- "The BIND was successful, but there was a "
- "problem automatically checking in the "
- "source parent collection.",
- err2);
- dav_log_err(r, err, APLOG_WARNING);
- }
-
- /* return an appropriate response (HTTP_CREATED) */
- /* ### spec doesn't say what happens when destination was replaced */
- return dav_created(r, lookup.rnew->uri, "Binding", 0);
-}
-
-
-/*
- * Response handler for DAV resources
- */
-static int dav_handler(request_rec *r)
-{
- if (strcmp(r->handler, DAV_HANDLER_NAME) != 0)
- return DECLINED;
-
- /* Reject requests with an unescaped hash character, as these may
- * be more destructive than the user intended. */
- if (r->parsed_uri.fragment != NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "buggy client used un-escaped hash in Request-URI");
- return dav_error_response(r, HTTP_BAD_REQUEST,
- "The request was invalid: the URI included "
- "an un-escaped hash character");
- }
-
- /* ### do we need to do anything with r->proxyreq ?? */
-
- /*
- * ### anything else to do here? could another module and/or
- * ### config option "take over" the handler here? i.e. how do
- * ### we lock down this hierarchy so that we are the ultimate
- * ### arbiter? (or do we simply depend on the administrator
- * ### to avoid conflicting configurations?)
- */
-
- /*
- * Set up the methods mask, since that's one of the reasons this handler
- * gets called, and lower-level things may need the info.
- *
- * First, set the mask to the methods we handle directly. Since by
- * definition we own our managed space, we unconditionally set
- * the r->allowed field rather than ORing our values with anything
- * any other module may have put in there.
- *
- * These are the HTTP-defined methods that we handle directly.
- */
- r->allowed = 0
- | (AP_METHOD_BIT << M_GET)
- | (AP_METHOD_BIT << M_PUT)
- | (AP_METHOD_BIT << M_DELETE)
- | (AP_METHOD_BIT << M_OPTIONS)
- | (AP_METHOD_BIT << M_INVALID);
-
- /*
- * These are the DAV methods we handle.
- */
- r->allowed |= 0
- | (AP_METHOD_BIT << M_COPY)
- | (AP_METHOD_BIT << M_LOCK)
- | (AP_METHOD_BIT << M_UNLOCK)
- | (AP_METHOD_BIT << M_MKCOL)
- | (AP_METHOD_BIT << M_MOVE)
- | (AP_METHOD_BIT << M_PROPFIND)
- | (AP_METHOD_BIT << M_PROPPATCH);
-
- /*
- * These are methods that we don't handle directly, but let the
- * server's default handler do for us as our agent.
- */
- r->allowed |= 0
- | (AP_METHOD_BIT << M_POST);
-
- /* ### hrm. if we return HTTP_METHOD_NOT_ALLOWED, then an Allow header
- * ### is sent; it will need the other allowed states; since the default
- * ### handler is not called on error, then it doesn't add the other
- * ### allowed states, so we must
- */
-
- /* ### we might need to refine this for just where we return the error.
- * ### also, there is the issue with other methods (see ISSUES)
- */
-
- /* dispatch the appropriate method handler */
- if (r->method_number == M_GET) {
- return dav_method_get(r);
- }
-
- if (r->method_number == M_PUT) {
- return dav_method_put(r);
- }
-
- if (r->method_number == M_POST) {
- return dav_method_post(r);
- }
-
- if (r->method_number == M_DELETE) {
- return dav_method_delete(r);
- }
-
- if (r->method_number == M_OPTIONS) {
- return dav_method_options(r);
- }
-
- if (r->method_number == M_PROPFIND) {
- return dav_method_propfind(r);
- }
-
- if (r->method_number == M_PROPPATCH) {
- return dav_method_proppatch(r);
- }
-
- if (r->method_number == M_MKCOL) {
- return dav_method_mkcol(r);
- }
-
- if (r->method_number == M_COPY) {
- return dav_method_copymove(r, DAV_DO_COPY);
- }
-
- if (r->method_number == M_MOVE) {
- return dav_method_copymove(r, DAV_DO_MOVE);
- }
-
- if (r->method_number == M_LOCK) {
- return dav_method_lock(r);
- }
-
- if (r->method_number == M_UNLOCK) {
- return dav_method_unlock(r);
- }
-
- if (r->method_number == M_VERSION_CONTROL) {
- return dav_method_vsn_control(r);
- }
-
- if (r->method_number == M_CHECKOUT) {
- return dav_method_checkout(r);
- }
-
- if (r->method_number == M_UNCHECKOUT) {
- return dav_method_uncheckout(r);
- }
-
- if (r->method_number == M_CHECKIN) {
- return dav_method_checkin(r);
- }
-
- if (r->method_number == M_UPDATE) {
- return dav_method_update(r);
- }
-
- if (r->method_number == M_LABEL) {
- return dav_method_label(r);
- }
-
- if (r->method_number == M_REPORT) {
- return dav_method_report(r);
- }
-
- if (r->method_number == M_MKWORKSPACE) {
- return dav_method_make_workspace(r);
- }
-
- if (r->method_number == M_MKACTIVITY) {
- return dav_method_make_activity(r);
- }
-
- if (r->method_number == M_BASELINE_CONTROL) {
- return dav_method_baseline_control(r);
- }
-
- if (r->method_number == M_MERGE) {
- return dav_method_merge(r);
- }
-
- /* BIND method */
- if (r->method_number == dav_methods[DAV_M_BIND]) {
- return dav_method_bind(r);
- }
-
- /* DASL method */
- if (r->method_number == dav_methods[DAV_M_SEARCH]) {
- return dav_method_search(r);
- }
-
- /* ### add'l methods for Advanced Collections, ACLs */
-
- return DECLINED;
-}
-
-static int dav_fixups(request_rec *r)
-{
- dav_dir_conf *conf;
-
- /* quickly ignore any HTTP/0.9 requests which aren't subreqs. */
- if (r->assbackwards && !r->main) {
- return DECLINED;
- }
-
- conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
- &dav_module);
-
- /* if DAV is not enabled, then we've got nothing to do */
- if (conf->provider == NULL) {
- return DECLINED;
- }
-
- /* We are going to handle almost every request. In certain cases,
- the provider maps to the filesystem (thus, handle_get is
- FALSE), and core Apache will handle it. a For that case, we
- just return right away. */
- if (r->method_number == M_GET) {
- /*
- * ### need some work to pull Content-Type and Content-Language
- * ### from the property database.
- */
-
- /*
- * If the repository hasn't indicated that it will handle the
- * GET method, then just punt.
- *
- * ### this isn't quite right... taking over the response can break
- * ### things like mod_negotiation. need to look into this some more.
- */
- if (!conf->provider->repos->handle_get) {
- return DECLINED;
- }
- }
-
- /* ### this is wrong. We should only be setting the r->handler for the
- * requests that mod_dav knows about. If we set the handler for M_POST
- * requests, then CGI scripts that use POST will return the source for the
- * script. However, mod_dav DOES handle POST, so something else needs
- * to be fixed.
- */
- if (r->method_number != M_POST) {
-
- /* We are going to be handling the response for this resource. */
- r->handler = DAV_HANDLER_NAME;
- return OK;
- }
-
- return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(dav_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(dav_init_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_fixups(dav_fixups, NULL, NULL, APR_HOOK_MIDDLE);
-
- dav_hook_find_liveprop(dav_core_find_liveprop, NULL, NULL, APR_HOOK_LAST);
- dav_hook_insert_all_liveprops(dav_core_insert_all_liveprops,
- NULL, NULL, APR_HOOK_MIDDLE);
-
- dav_core_register_uris(p);
-}
-
-/*---------------------------------------------------------------------------
- *
- * Configuration info for the module
- */
-
-static const command_rec dav_cmds[] =
-{
- /* per directory/location */
- AP_INIT_TAKE1("DAV", dav_cmd_dav, NULL, ACCESS_CONF,
- "specify the DAV provider for a directory or location"),
-
- /* per directory/location, or per server */
- AP_INIT_TAKE1("DAVMinTimeout", dav_cmd_davmintimeout, NULL,
- ACCESS_CONF|RSRC_CONF,
- "specify minimum allowed timeout"),
-
- /* per directory/location, or per server */
- AP_INIT_FLAG("DAVDepthInfinity", dav_cmd_davdepthinfinity, NULL,
- ACCESS_CONF|RSRC_CONF,
- "allow Depth infinity PROPFIND requests"),
-
- { NULL }
-};
-
-module DAV_DECLARE_DATA dav_module =
-{
- STANDARD20_MODULE_STUFF,
- dav_create_dir_config, /* dir config creater */
- dav_merge_dir_config, /* dir merger --- default is to override */
- dav_create_server_config, /* server config */
- dav_merge_server_config, /* merge server config */
- dav_cmds, /* command table */
- register_hooks, /* register hooks */
-};
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(gather_propsets)
- APR_HOOK_LINK(find_liveprop)
- APR_HOOK_LINK(insert_all_liveprops)
- )
-
-APR_IMPLEMENT_EXTERNAL_HOOK_VOID(dav, DAV, gather_propsets,
- (apr_array_header_t *uris),
- (uris))
-
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(dav, DAV, int, find_liveprop,
- (const dav_resource *resource,
- const char *ns_uri, const char *name,
- const dav_hooks_liveprop **hooks),
- (resource, ns_uri, name, hooks), 0)
-
-APR_IMPLEMENT_EXTERNAL_HOOK_VOID(dav, DAV, insert_all_liveprops,
- (request_rec *r, const dav_resource *resource,
- dav_prop_insert what, apr_text_header *phdr),
- (r, resource, what, phdr))
diff --git a/modules/dav/main/mod_dav.dsp b/modules/dav/main/mod_dav.dsp
deleted file mode 100644
index 6820b20ed2..0000000000
--- a/modules/dav/main/mod_dav.dsp
+++ /dev/null
@@ -1,164 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_dav" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_dav - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_dav.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_dav.mak" CFG="mod_dav - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_dav - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_dav - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_dav - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "DAV_DECLARE_EXPORT" /Fd"Release\mod_dav_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav.so
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_dav - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "DAV_DECLARE_EXPORT" /Fd"Debug\mod_dav_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav.so
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_dav - Win32 Release"
-# Name "mod_dav - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\liveprop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_dav.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\props.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\providers.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\std_liveprop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\util_lock.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# Begin Source File
-
-SOURCE=.\mod_dav.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_dav.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_dav - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../../build/win32/win32ver.awk mod_dav.so "dav_module for Apache" ../../../include/ap_release.h > .\mod_dav.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_dav - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../../build/win32/win32ver.awk mod_dav.so "dav_module for Apache" ../../../include/ap_release.h > .\mod_dav.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/dav/main/mod_dav.h b/modules/dav/main/mod_dav.h
deleted file mode 100644
index 4ce7889fc3..0000000000
--- a/modules/dav/main/mod_dav.h
+++ /dev/null
@@ -1,2404 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-*/
-
-#ifndef _MOD_DAV_H_
-#define _MOD_DAV_H_
-
-#include "apr_hooks.h"
-#include "apr_hash.h"
-#include "apr_dbm.h"
-#include "apr_tables.h"
-
-#include "httpd.h"
-#include "util_filter.h"
-#include "util_xml.h"
-
-#include <limits.h> /* for INT_MAX */
-#include <time.h> /* for time_t */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define DAV_VERSION AP_SERVER_BASEREVISION
-
-#define DAV_XML_HEADER "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
-#define DAV_XML_CONTENT_TYPE "text/xml; charset=\"utf-8\""
-
-#define DAV_READ_BLOCKSIZE 2048 /* used for reading input blocks */
-
-#define DAV_RESPONSE_BODY_1 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>"
-#define DAV_RESPONSE_BODY_2 "</title>\n</head><body>\n<h1>"
-#define DAV_RESPONSE_BODY_3 "</h1>\n<p>"
-#define DAV_RESPONSE_BODY_4 "</p>\n"
-#define DAV_RESPONSE_BODY_5 "</body></html>\n"
-
-#define DAV_DO_COPY 0
-#define DAV_DO_MOVE 1
-
-
-#if 1
-#define DAV_DEBUG 1
-#define DEBUG_CR "\n"
-#define DBG0(f) ap_log_error(APLOG_MARK, \
- APLOG_ERR, 0, NULL, (f))
-#define DBG1(f,a1) ap_log_error(APLOG_MARK, \
- APLOG_ERR, 0, NULL, f, a1)
-#define DBG2(f,a1,a2) ap_log_error(APLOG_MARK, \
- APLOG_ERR, 0, NULL, f, a1, a2)
-#define DBG3(f,a1,a2,a3) ap_log_error(APLOG_MARK, \
- APLOG_ERR, 0, NULL, f, a1, a2, a3)
-#else
-#undef DAV_DEBUG
-#define DEBUG_CR ""
-#endif
-
-#define DAV_INFINITY INT_MAX /* for the Depth: header */
-
-/* Create a set of DAV_DECLARE(type), DAV_DECLARE_NONSTD(type) and
- * DAV_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define DAV_DECLARE(type) type
-#define DAV_DECLARE_NONSTD(type) type
-#define DAV_DECLARE_DATA
-#elif defined(DAV_DECLARE_STATIC)
-#define DAV_DECLARE(type) type __stdcall
-#define DAV_DECLARE_NONSTD(type) type
-#define DAV_DECLARE_DATA
-#elif defined(DAV_DECLARE_EXPORT)
-#define DAV_DECLARE(type) __declspec(dllexport) type __stdcall
-#define DAV_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define DAV_DECLARE_DATA __declspec(dllexport)
-#else
-#define DAV_DECLARE(type) __declspec(dllimport) type __stdcall
-#define DAV_DECLARE_NONSTD(type) __declspec(dllimport) type
-#define DAV_DECLARE_DATA __declspec(dllimport)
-#endif
-
-/* --------------------------------------------------------------------
-**
-** ERROR MANAGEMENT
-*/
-
-/*
-** dav_error structure.
-**
-** In most cases, mod_dav uses a pointer to a dav_error structure. If the
-** pointer is NULL, then no error has occurred.
-**
-** In certain cases, a dav_error structure is directly used. In these cases,
-** a status value of 0 means that an error has not occurred.
-**
-** Note: this implies that status != 0 whenever an error occurs.
-**
-** The desc field is optional (it may be NULL). When NULL, it typically
-** implies that Apache has a proper description for the specified status.
-*/
-typedef struct dav_error {
- int status; /* suggested HTTP status (0 for no error) */
- int error_id; /* DAV-specific error ID */
- const char *desc; /* DAV:responsedescription and error log */
-
- int save_errno; /* copy of errno causing the error */
-
- const char *namespace; /* [optional] namespace of error */
- const char *tagname; /* name of error-tag */
-
- struct dav_error *prev; /* previous error (in stack) */
-
-} dav_error;
-
-/*
-** Create a new error structure. save_errno will be filled with the current
-** errno value.
-*/
-DAV_DECLARE(dav_error*) dav_new_error(apr_pool_t *p, int status,
- int error_id, const char *desc);
-
-
-/*
-** Create a new error structure with tagname and (optional) namespace;
-** namespace may be NULL, which means "DAV:". save_errno will be
-** filled with the current errno value.
-*/
-DAV_DECLARE(dav_error*) dav_new_error_tag(apr_pool_t *p, int status,
- int error_id, const char *desc,
- const char *namespace,
- const char *tagname);
-
-
-/*
-** Push a new error description onto the stack of errors.
-**
-** This function is used to provide an additional description to an existing
-** error.
-**
-** <status> should contain the caller's view of what the current status is,
-** given the underlying error. If it doesn't have a better idea, then the
-** caller should pass prev->status.
-**
-** <error_id> can specify a new error_id since the topmost description has
-** changed.
-*/
-DAV_DECLARE(dav_error*) dav_push_error(apr_pool_t *p, int status, int error_id,
- const char *desc, dav_error *prev);
-
-
-/* error ID values... */
-
-/* IF: header errors */
-#define DAV_ERR_IF_PARSE 100 /* general parsing error */
-#define DAV_ERR_IF_MULTIPLE_NOT 101 /* multiple "Not" found */
-#define DAV_ERR_IF_UNK_CHAR 102 /* unknown char in header */
-#define DAV_ERR_IF_ABSENT 103 /* no locktokens given */
-#define DAV_ERR_IF_TAGGED 104 /* in parsing tagged-list */
-#define DAV_ERR_IF_UNCLOSED_PAREN 105 /* in no-tagged-list */
-
-/* Prop DB errors */
-#define DAV_ERR_PROP_BAD_MAJOR 200 /* major version was wrong */
-#define DAV_ERR_PROP_READONLY 201 /* prop is read-only */
-#define DAV_ERR_PROP_NO_DATABASE 202 /* writable db not avail */
-#define DAV_ERR_PROP_NOT_FOUND 203 /* prop not found */
-#define DAV_ERR_PROP_BAD_LOCKDB 204 /* could not open lockdb */
-#define DAV_ERR_PROP_OPENING 205 /* problem opening propdb */
-#define DAV_ERR_PROP_EXEC 206 /* problem exec'ing patch */
-
-/* Predefined DB errors */
-/* ### any to define?? */
-
-/* Predefined locking system errors */
-#define DAV_ERR_LOCK_OPENDB 400 /* could not open lockdb */
-#define DAV_ERR_LOCK_NO_DB 401 /* no database defined */
-#define DAV_ERR_LOCK_CORRUPT_DB 402 /* DB is corrupt */
-#define DAV_ERR_LOCK_UNK_STATE_TOKEN 403 /* unknown State-token */
-#define DAV_ERR_LOCK_PARSE_TOKEN 404 /* bad opaquelocktoken */
-#define DAV_ERR_LOCK_SAVE_LOCK 405 /* err saving locks */
-
-/*
-** Some comments on Error ID values:
-**
-** The numbers do not necessarily need to be unique. Uniqueness simply means
-** that two errors that have not been predefined above can be distinguished
-** from each other. At the moment, mod_dav does not use this distinguishing
-** feature, but it could be used in the future to collapse <response> elements
-** into groups based on the error ID (and associated responsedescription).
-**
-** If a compute_desc is provided, then the error ID should be unique within
-** the context of the compute_desc function (so the function can figure out
-** what to filled into the desc).
-**
-** Basically, subsystems can ignore defining new error ID values if they want
-** to. The subsystems *do* need to return the predefined errors when
-** appropriate, so that mod_dav can figure out what to do. Subsystems can
-** simply leave the error ID field unfilled (zero) if there isn't an error
-** that must be placed there.
-*/
-
-
-/* --------------------------------------------------------------------
-**
-** HOOK STRUCTURES
-**
-** These are here for forward-declaration purposes. For more info, see
-** the section title "HOOK HANDLING" for more information, plus each
-** structure definition.
-*/
-
-/* forward-declare this structure */
-typedef struct dav_hooks_propdb dav_hooks_propdb;
-typedef struct dav_hooks_locks dav_hooks_locks;
-typedef struct dav_hooks_vsn dav_hooks_vsn;
-typedef struct dav_hooks_repository dav_hooks_repository;
-typedef struct dav_hooks_liveprop dav_hooks_liveprop;
-typedef struct dav_hooks_binding dav_hooks_binding;
-typedef struct dav_hooks_search dav_hooks_search;
-
-/* ### deprecated name */
-typedef dav_hooks_propdb dav_hooks_db;
-
-
-/* --------------------------------------------------------------------
-**
-** RESOURCE HANDLING
-*/
-
-/*
-** Resource Types:
-** The base protocol defines only file and collection resources.
-** The versioning protocol defines several additional resource types
-** to represent artifacts of a version control system.
-**
-** This enumeration identifies the type of URL used to identify the
-** resource. Since the same resource may have more than one type of
-** URL which can identify it, dav_resource_type cannot be used
-** alone to determine the type of the resource; attributes of the
-** dav_resource object must also be consulted.
-*/
-typedef enum {
- DAV_RESOURCE_TYPE_UNKNOWN,
-
- DAV_RESOURCE_TYPE_REGULAR, /* file or collection; could be
- * unversioned, or version selector,
- * or baseline selector */
-
- DAV_RESOURCE_TYPE_VERSION, /* version or baseline URL */
-
- DAV_RESOURCE_TYPE_HISTORY, /* version or baseline history URL */
-
- DAV_RESOURCE_TYPE_WORKING, /* working resource URL */
-
- DAV_RESOURCE_TYPE_WORKSPACE, /* workspace URL */
-
- DAV_RESOURCE_TYPE_ACTIVITY, /* activity URL */
-
- DAV_RESOURCE_TYPE_PRIVATE /* repository-private type */
-
-} dav_resource_type;
-
-/*
-** Opaque, repository-specific information for a resource.
-*/
-typedef struct dav_resource_private dav_resource_private;
-
-/*
-** Resource descriptor, generated by a repository provider.
-**
-** Note: the lock-null state is not explicitly represented here,
-** since it may be expensive to compute. Use dav_get_resource_state()
-** to determine whether a non-existent resource is a lock-null resource.
-**
-** A quick explanation of how the flags can apply to different resources:
-**
-** unversioned file or collection:
-** type = DAV_RESOURCE_TYPE_REGULAR
-** exists = ? (1 if exists)
-** collection = ? (1 if collection)
-** versioned = 0
-** baselined = 0
-** working = 0
-**
-** version-controlled resource or configuration:
-** type = DAV_RESOURCE_TYPE_REGULAR
-** exists = 1
-** collection = ? (1 if collection)
-** versioned = 1
-** baselined = ? (1 if configuration)
-** working = ? (1 if checked out)
-**
-** version/baseline history:
-** type = DAV_RESOURCE_TYPE_HISTORY
-** exists = 1
-** collection = 0
-** versioned = 0
-** baselined = 0
-** working = 0
-**
-** version/baseline:
-** type = DAV_RESOURCE_TYPE_VERSION
-** exists = 1
-** collection = ? (1 if collection)
-** versioned = 1
-** baselined = ? (1 if baseline)
-** working = 0
-**
-** working resource:
-** type = DAV_RESOURCE_TYPE_WORKING
-** exists = 1
-** collection = ? (1 if collection)
-** versioned = 1
-** baselined = 0
-** working = 1
-**
-** workspace:
-** type = DAV_RESOURCE_TYPE_WORKSPACE
-** exists = ? (1 if exists)
-** collection = 1
-** versioned = ? (1 if version-controlled)
-** baselined = ? (1 if baseline-controlled)
-** working = ? (1 if checked out)
-**
-** activity:
-** type = DAV_RESOURCE_TYPE_ACTIVITY
-** exists = ? (1 if exists)
-** collection = 0
-** versioned = 0
-** baselined = 0
-** working = 0
-*/
-typedef struct dav_resource {
- dav_resource_type type;
-
- int exists; /* 0 => null resource */
-
- int collection; /* 0 => file; can be 1 for
- * REGULAR, VERSION, and WORKING resources,
- * and is always 1 for WORKSPACE */
-
- int versioned; /* 0 => unversioned; can be 1 for
- * REGULAR and WORKSPACE resources,
- * and is always 1 for VERSION and WORKING */
-
- int baselined; /* 0 => not baselined; can be 1 for
- * REGULAR, VERSION, and WORKSPACE resources;
- * versioned == 1 when baselined == 1 */
-
- int working; /* 0 => not checked out; can be 1 for
- * REGULAR and WORKSPACE resources,
- * and is always 1 for WORKING */
-
- const char *uri; /* the URI for this resource */
-
- dav_resource_private *info; /* the provider's private info */
-
- const dav_hooks_repository *hooks; /* hooks used for this resource */
-
- /* When allocating items related specifically to this resource, the
- following pool should be used. Its lifetime will be at least as
- long as the dav_resource structure. */
- apr_pool_t *pool;
-
-} dav_resource;
-
-/*
-** Lock token type. Lock providers define the details of a lock token.
-** However, all providers are expected to at least be able to parse
-** the "opaquelocktoken" scheme, which is represented by a uuid_t.
-*/
-typedef struct dav_locktoken dav_locktoken;
-
-
-/* --------------------------------------------------------------------
-**
-** BUFFER HANDLING
-**
-** These buffers are used as a lightweight buffer reuse mechanism. Apache
-** provides sub-pool creation and destruction to much the same effect, but
-** the sub-pools are a bit more general and heavyweight than these buffers.
-*/
-
-/* buffer for reuse; can grow to accomodate needed size */
-typedef struct
-{
- apr_size_t alloc_len; /* how much has been allocated */
- apr_size_t cur_len; /* how much is currently being used */
- char *buf; /* buffer contents */
-} dav_buffer;
-#define DAV_BUFFER_MINSIZE 256 /* minimum size for buffer */
-#define DAV_BUFFER_PAD 64 /* amount of pad when growing */
-
-/* set the cur_len to the given size and ensure space is available */
-DAV_DECLARE(void) dav_set_bufsize(apr_pool_t *p, dav_buffer *pbuf,
- apr_size_t size);
-
-/* initialize a buffer and copy the specified (null-term'd) string into it */
-DAV_DECLARE(void) dav_buffer_init(apr_pool_t *p, dav_buffer *pbuf,
- const char *str);
-
-/* check that the buffer can accomodate <extra_needed> more bytes */
-DAV_DECLARE(void) dav_check_bufsize(apr_pool_t *p, dav_buffer *pbuf,
- apr_size_t extra_needed);
-
-/* append a string to the end of the buffer, adjust length */
-DAV_DECLARE(void) dav_buffer_append(apr_pool_t *p, dav_buffer *pbuf,
- const char *str);
-
-/* place a string on the end of the buffer, do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place(apr_pool_t *p, dav_buffer *pbuf,
- const char *str);
-
-/* place some memory on the end of a buffer; do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place_mem(apr_pool_t *p, dav_buffer *pbuf,
- const void *mem, apr_size_t amt,
- apr_size_t pad);
-
-
-/* --------------------------------------------------------------------
-**
-** HANDY UTILITIES
-*/
-
-/* contains results from one of the getprop functions */
-typedef struct
-{
- apr_text * propstats; /* <propstat> element text */
- apr_text * xmlns; /* namespace decls for <response> elem */
-} dav_get_props_result;
-
-/* holds the contents of a <response> element */
-typedef struct dav_response
-{
- const char *href; /* always */
- const char *desc; /* optional description at <response> level */
-
- /* use status if propresult.propstats is NULL. */
- dav_get_props_result propresult;
-
- int status;
-
- struct dav_response *next;
-} dav_response;
-
-typedef struct
-{
- request_rec *rnew; /* new subrequest */
- dav_error err; /* potential error response */
-} dav_lookup_result;
-
-
-dav_lookup_result dav_lookup_uri(const char *uri, request_rec *r,
- int must_be_absolute);
-
-/* defines type of property info a provider is to return */
-typedef enum {
- DAV_PROP_INSERT_NOTDEF, /* property is defined by this provider,
- but nothing was inserted because the
- (live) property is not defined for this
- resource (it may be present as a dead
- property). */
- DAV_PROP_INSERT_NOTSUPP, /* property is recognized by this provider,
- but it is not supported, and cannot be
- treated as a dead property */
- DAV_PROP_INSERT_NAME, /* a property name (empty elem) was
- inserted into the text block */
- DAV_PROP_INSERT_VALUE, /* a property name/value pair was inserted
- into the text block */
- DAV_PROP_INSERT_SUPPORTED /* a supported live property was added to
- the text block as a
- <DAV:supported-live-property> element */
-} dav_prop_insert;
-
-/* ### this stuff is private to dav/fs/repos.c; move it... */
-/* format a time string (buf must be at least DAV_TIMEBUF_SIZE chars) */
-#define DAV_STYLE_ISO8601 1
-#define DAV_STYLE_RFC822 2
-#define DAV_TIMEBUF_SIZE 30
-
-int dav_get_depth(request_rec *r, int def_depth);
-
-int dav_validate_root(const apr_xml_doc *doc, const char *tagname);
-apr_xml_elem *dav_find_child(const apr_xml_elem *elem, const char *tagname);
-
-/* gather up all the CDATA into a single string */
-DAV_DECLARE(const char *) dav_xml_get_cdata(const apr_xml_elem *elem, apr_pool_t *pool,
- int strip_white);
-
-/*
-** XML namespace handling
-**
-** This structure tracks namespace declarations (xmlns:prefix="URI").
-** It maintains a one-to-many relationship of URIs-to-prefixes. In other
-** words, one URI may be defined by many prefixes, but any specific
-** prefix will specify only one URI.
-**
-** Prefixes using the "g###" pattern can be generated automatically if
-** the caller does not have specific prefix requirements.
-*/
-typedef struct {
- apr_pool_t *pool;
- apr_hash_t *uri_prefix; /* map URIs to an available prefix */
- apr_hash_t *prefix_uri; /* map all prefixes to their URIs */
- int count; /* counter for "g###" prefixes */
-} dav_xmlns_info;
-
-/* create an empty dav_xmlns_info structure */
-DAV_DECLARE(dav_xmlns_info *) dav_xmlns_create(apr_pool_t *pool);
-
-/* add a specific prefix/URI pair. the prefix/uri should have a lifetime
- at least that of xmlns->pool */
-DAV_DECLARE(void) dav_xmlns_add(dav_xmlns_info *xi,
- const char *prefix, const char *uri);
-
-/* add a URI (if not present); any prefix is acceptable and is returned.
- the uri should have a lifetime at least that xmlns->pool */
-DAV_DECLARE(const char *) dav_xmlns_add_uri(dav_xmlns_info *xi,
- const char *uri);
-
-/* return the URI for a specified prefix (or NULL if the prefix is unknown) */
-DAV_DECLARE(const char *) dav_xmlns_get_uri(dav_xmlns_info *xi,
- const char *prefix);
-
-/* return an available prefix for a specified URI (or NULL if the URI
- is unknown) */
-DAV_DECLARE(const char *) dav_xmlns_get_prefix(dav_xmlns_info *xi,
- const char *uri);
-
-/* generate xmlns declarations (appending into the given text) */
-DAV_DECLARE(void) dav_xmlns_generate(dav_xmlns_info *xi,
- apr_text_header *phdr);
-
-/* --------------------------------------------------------------------
-**
-** DAV PLUGINS
-*/
-
-/* ### docco ... */
-
-/*
-** dav_provider
-**
-** This structure wraps up all of the hooks that a mod_dav provider can
-** supply. The provider MUST supply <repos> and <propdb>. The rest are
-** optional and should contain NULL if that feature is not supplied.
-**
-** Note that a provider cannot pick and choose portions from various
-** underlying implementations (which was theoretically possible in
-** mod_dav 1.0). There are too many dependencies between a dav_resource
-** (defined by <repos>) and the other functionality.
-**
-** Live properties are not part of the dav_provider structure because they
-** are handled through the APR_HOOK interface (to allow for multiple liveprop
-** providers). The core always provides some properties, and then a given
-** provider will add more properties.
-**
-** Some providers may need to associate a context with the dav_provider
-** structure -- the ctx field is available for storing this context. Just
-** leave it NULL if it isn't required.
-*/
-typedef struct {
- const dav_hooks_repository *repos;
- const dav_hooks_propdb *propdb;
- const dav_hooks_locks *locks;
- const dav_hooks_vsn *vsn;
- const dav_hooks_binding *binding;
- const dav_hooks_search *search;
-
- void *ctx;
-} dav_provider;
-
-/*
-** gather_propsets: gather all live property propset-URIs
-**
-** The hook implementor should push one or more URIs into the specified
-** array. These URIs are returned in the DAV: header to let clients know
-** what sets of live properties are supported by the installation. mod_dav
-** will place open/close angle brackets around each value (much like
-** a Coded-URL); quotes and brackets should not be in the value.
-**
-** Example: http://apache.org/dav/props/
-**
-** (of course, use your own domain to ensure a unique value)
-*/
-APR_DECLARE_EXTERNAL_HOOK(dav, DAV, void, gather_propsets,
- (apr_array_header_t *uris))
-
-/*
-** find_liveprop: find a live property, returning a non-zero, unique,
-** opaque identifier.
-**
-** If the hook implementor determines the specified URI/name refers to
-** one of its properties, then it should fill in HOOKS and return a
-** non-zero value. The returned value is the "property ID" and will
-** be passed to the various liveprop hook functions.
-**
-** Return 0 if the property is not defined by the hook implementor.
-*/
-APR_DECLARE_EXTERNAL_HOOK(dav, DAV, int, find_liveprop,
- (const dav_resource *resource,
- const char *ns_uri, const char *name,
- const dav_hooks_liveprop **hooks))
-
-/*
-** insert_all_liveprops: insert all (known) live property names/values.
-**
-** The hook implementor should append XML text to PHDR, containing liveprop
-** names. If INSVALUE is true, then the property values should also be
-** inserted into the output XML stream.
-**
-** The liveprop provider should insert *all* known and *defined* live
-** properties on the specified resource. If a particular liveprop is
-** not defined for this resource, then it should not be inserted.
-*/
-APR_DECLARE_EXTERNAL_HOOK(dav, DAV, void, insert_all_liveprops,
- (request_rec *r, const dav_resource *resource,
- dav_prop_insert what, apr_text_header *phdr))
-
-const dav_hooks_locks *dav_get_lock_hooks(request_rec *r);
-const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r);
-const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r);
-const dav_hooks_binding *dav_get_binding_hooks(request_rec *r);
-const dav_hooks_search *dav_get_search_hooks(request_rec *r);
-
-DAV_DECLARE(void) dav_register_provider(apr_pool_t *p, const char *name,
- const dav_provider *hooks);
-const dav_provider * dav_lookup_provider(const char *name);
-
-
-/* ### deprecated */
-#define DAV_GET_HOOKS_PROPDB(r) dav_get_propdb_hooks(r)
-#define DAV_GET_HOOKS_LOCKS(r) dav_get_lock_hooks(r)
-#define DAV_GET_HOOKS_VSN(r) dav_get_vsn_hooks(r)
-#define DAV_GET_HOOKS_BINDING(r) dav_get_binding_hooks(r)
-#define DAV_GET_HOOKS_SEARCH(r) dav_get_search_hooks(r)
-
-
-/* --------------------------------------------------------------------
-**
-** IF HEADER PROCESSING
-**
-** Here is the definition of the If: header from RFC 2518, S9.4:
-**
-** If = "If" ":" (1*No-tag-list | 1*Tagged-list)
-** No-tag-list = List
-** Tagged-list = Resource 1*List
-** Resource = Coded-URL
-** List = "(" 1*(["Not"](State-token | "[" entity-tag "]")) ")"
-** State-token = Coded-URL
-** Coded-URL = "<" absoluteURI ">" ; absoluteURI from RFC 2616
-**
-** List corresponds to dav_if_state_list. No-tag-list corresponds to
-** dav_if_header with uri==NULL. Tagged-list corresponds to a sequence of
-** dav_if_header structures with (duplicate) uri==Resource -- one
-** dav_if_header per state_list. A second Tagged-list will start a new
-** sequence of dav_if_header structures with the new URI.
-**
-** A summary of the semantics, mapped into our structures:
-** - Chained dav_if_headers: OR
-** - Chained dav_if_state_lists: AND
-** - NULL uri matches all resources
-*/
-
-typedef enum
-{
- dav_if_etag,
- dav_if_opaquelock
-} dav_if_state_type;
-
-typedef struct dav_if_state_list
-{
- dav_if_state_type type;
-
- int condition;
-#define DAV_IF_COND_NORMAL 0
-#define DAV_IF_COND_NOT 1 /* "Not" was applied */
-
- const char *etag;
- dav_locktoken *locktoken;
-
- struct dav_if_state_list *next;
-} dav_if_state_list;
-
-typedef struct dav_if_header
-{
- const char *uri;
- apr_size_t uri_len;
- struct dav_if_state_list *state;
- struct dav_if_header *next;
-
- int dummy_header; /* used internally by the lock/etag validation */
-} dav_if_header;
-
-typedef struct dav_locktoken_list
-{
- dav_locktoken *locktoken;
- struct dav_locktoken_list *next;
-} dav_locktoken_list;
-
-dav_error * dav_get_locktoken_list(request_rec *r, dav_locktoken_list **ltl);
-
-
-/* --------------------------------------------------------------------
-**
-** LIVE PROPERTY HANDLING
-*/
-
-/* opaque type for PROPPATCH rollback information */
-typedef struct dav_liveprop_rollback dav_liveprop_rollback;
-
-struct dav_hooks_liveprop
-{
- /*
- ** Insert property information into a text block. The property to
- ** insert is identified by the propid value. The information to insert
- ** is identified by the "what" argument, as follows:
- ** DAV_PROP_INSERT_NAME
- ** property name, as an empty XML element
- ** DAV_PROP_INSERT_VALUE
- ** property name/value, as an XML element
- ** DAV_PROP_INSERT_SUPPORTED
- ** if the property is defined on the resource, then
- ** a DAV:supported-live-property element, as defined
- ** by the DeltaV extensions to RFC2518.
- **
- ** Providers should return DAV_PROP_INSERT_NOTDEF if the property is
- ** known and not defined for this resource, so should be handled as a
- ** dead property. If a provider recognizes, but does not support, a
- ** property, and does not want it handled as a dead property, it should
- ** return DAV_PROP_INSERT_NOTSUPP.
- **
- ** Returns one of DAV_PROP_INSERT_* based on what happened.
- **
- ** ### we may need more context... ie. the lock database
- */
- dav_prop_insert (*insert_prop)(const dav_resource *resource,
- int propid, dav_prop_insert what,
- apr_text_header *phdr);
-
- /*
- ** Determine whether a given property is writable.
- **
- ** ### we may want a different semantic. i.e. maybe it should be
- ** ### "can we write <value> into this property?"
- **
- ** Returns 1 if the live property can be written, 0 if read-only.
- */
- int (*is_writable)(const dav_resource *resource, int propid);
-
- /*
- ** This member defines the set of namespace URIs that the provider
- ** uses for its properties. When insert_all is called, it will be
- ** passed a list of integers that map from indices into this list
- ** to namespace IDs for output generation.
- **
- ** The last entry in this list should be a NULL value (sentinel).
- */
- const char * const * namespace_uris;
-
- /*
- ** ### this is not the final design. we want an open-ended way for
- ** ### liveprop providers to attach *new* properties. To this end,
- ** ### we'll have a "give me a list of the props you define", a way
- ** ### to check for a prop's existence, a way to validate a set/remove
- ** ### of a prop, and a way to execute/commit/rollback that change.
- */
-
- /*
- ** Validate that the live property can be assigned a value, and that
- ** the provided value is valid.
- **
- ** elem will point to the XML element that names the property. For
- ** example:
- ** <lp1:executable>T</lp1:executable>
- **
- ** The provider can access the cdata fields and the child elements
- ** to extract the relevant pieces.
- **
- ** operation is one of DAV_PROP_OP_SET or _DELETE.
- **
- ** The provider may return a value in *context which will be passed
- ** to each of the exec/commit/rollback functions. For example, this
- ** may contain an internal value which has been processed from the
- ** input element.
- **
- ** The provider must set defer_to_dead to true (non-zero) or false.
- ** If true, then the set/remove is deferred to the dead property
- ** database. Note: it will be set to zero on entry.
- */
- dav_error * (*patch_validate)(const dav_resource *resource,
- const apr_xml_elem *elem,
- int operation,
- void **context,
- int *defer_to_dead);
-
- /* ### doc... */
- dav_error * (*patch_exec)(const dav_resource *resource,
- const apr_xml_elem *elem,
- int operation,
- void *context,
- dav_liveprop_rollback **rollback_ctx);
-
- /* ### doc... */
- void (*patch_commit)(const dav_resource *resource,
- int operation,
- void *context,
- dav_liveprop_rollback *rollback_ctx);
-
- /* ### doc... */
- dav_error * (*patch_rollback)(const dav_resource *resource,
- int operation,
- void *context,
- dav_liveprop_rollback *rollback_ctx);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-};
-
-/*
-** dav_liveprop_spec: specify a live property
-**
-** This structure is used as a standard way to determine if a particular
-** property is a live property. Its use is not part of the mandated liveprop
-** interface, but can be used by liveprop providers in conjuction with the
-** utility routines below.
-**
-** spec->name == NULL is the defined end-sentinel for a list of specs.
-*/
-typedef struct {
- int ns; /* provider-local namespace index */
- const char *name; /* name of the property */
-
- int propid; /* provider-local property ID */
-
- int is_writable; /* is the property writable? */
-
-} dav_liveprop_spec;
-
-/*
-** dav_liveprop_group: specify a group of liveprops
-**
-** This structure specifies a group of live properties, their namespaces,
-** and how to handle them.
-*/
-typedef struct {
- const dav_liveprop_spec *specs;
- const char * const *namespace_uris;
- const dav_hooks_liveprop *hooks;
-
-} dav_liveprop_group;
-
-/* ### docco */
-DAV_DECLARE(int) dav_do_find_liveprop(const char *ns_uri, const char *name,
- const dav_liveprop_group *group,
- const dav_hooks_liveprop **hooks);
-
-/* ### docco */
-DAV_DECLARE(int) dav_get_liveprop_info(int propid,
- const dav_liveprop_group *group,
- const dav_liveprop_spec **info);
-
-/* ### docco */
-DAV_DECLARE(void) dav_register_liveprop_group(apr_pool_t *pool,
- const dav_liveprop_group *group);
-
-/* ### docco */
-DAV_DECLARE(int) dav_get_liveprop_ns_index(const char *uri);
-
-/* ### docco */
-int dav_get_liveprop_ns_count(void);
-
-/* ### docco */
-void dav_add_all_liveprop_xmlns(apr_pool_t *p, apr_text_header *phdr);
-
-/*
-** The following three functions are part of mod_dav's internal handling
-** for the core WebDAV properties. They are not part of mod_dav's API.
-*/
-int dav_core_find_liveprop(const dav_resource *resource,
- const char *ns_uri, const char *name,
- const dav_hooks_liveprop **hooks);
-void dav_core_insert_all_liveprops(request_rec *r,
- const dav_resource *resource,
- dav_prop_insert what, apr_text_header *phdr);
-void dav_core_register_uris(apr_pool_t *p);
-
-
-/*
-** Standard WebDAV Property Identifiers
-**
-** A live property provider does not need to use these; they are simply
-** provided for convenience.
-**
-** Property identifiers need to be unique within a given provider, but not
-** *across* providers (note: this uniqueness constraint was different in
-** older versions of mod_dav).
-**
-** The identifiers start at 20000 to make it easier for providers to avoid
-** conflicts with the standard properties. The properties are arranged
-** alphabetically, and may be reordered from time to time (as properties
-** are introduced).
-**
-** NOTE: there is no problem with reordering (e.g. binary compat) since the
-** identifiers are only used within a given provider, which would pick up
-** the entire set of changes upon a recompile.
-*/
-enum {
- DAV_PROPID_BEGIN = 20000,
-
- /* Standard WebDAV properties (RFC 2518) */
- DAV_PROPID_creationdate,
- DAV_PROPID_displayname,
- DAV_PROPID_getcontentlanguage,
- DAV_PROPID_getcontentlength,
- DAV_PROPID_getcontenttype,
- DAV_PROPID_getetag,
- DAV_PROPID_getlastmodified,
- DAV_PROPID_lockdiscovery,
- DAV_PROPID_resourcetype,
- DAV_PROPID_source,
- DAV_PROPID_supportedlock,
-
- /* DeltaV properties (from the I-D (#14)) */
- DAV_PROPID_activity_checkout_set,
- DAV_PROPID_activity_set,
- DAV_PROPID_activity_version_set,
- DAV_PROPID_auto_merge_set,
- DAV_PROPID_auto_version,
- DAV_PROPID_baseline_collection,
- DAV_PROPID_baseline_controlled_collection,
- DAV_PROPID_baseline_controlled_collection_set,
- DAV_PROPID_checked_in,
- DAV_PROPID_checked_out,
- DAV_PROPID_checkin_fork,
- DAV_PROPID_checkout_fork,
- DAV_PROPID_checkout_set,
- DAV_PROPID_comment,
- DAV_PROPID_creator_displayname,
- DAV_PROPID_current_activity_set,
- DAV_PROPID_current_workspace_set,
- DAV_PROPID_default_variant,
- DAV_PROPID_eclipsed_set,
- DAV_PROPID_label_name_set,
- DAV_PROPID_merge_set,
- DAV_PROPID_precursor_set,
- DAV_PROPID_predecessor_set,
- DAV_PROPID_root_version,
- DAV_PROPID_subactivity_set,
- DAV_PROPID_subbaseline_set,
- DAV_PROPID_successor_set,
- DAV_PROPID_supported_method_set,
- DAV_PROPID_supported_live_property_set,
- DAV_PROPID_supported_report_set,
- DAV_PROPID_unreserved,
- DAV_PROPID_variant_set,
- DAV_PROPID_version_controlled_binding_set,
- DAV_PROPID_version_controlled_configuration,
- DAV_PROPID_version_history,
- DAV_PROPID_version_name,
- DAV_PROPID_workspace,
- DAV_PROPID_workspace_checkout_set,
-
- DAV_PROPID_END
-};
-
-/*
-** Property Identifier Registration
-**
-** At the moment, mod_dav requires live property providers to ensure that
-** each property returned has a unique value. For now, this is done through
-** central registration (there are no known providers other than the default,
-** so this remains manageable).
-**
-** WARNING: the TEST ranges should never be "shipped".
-*/
-#define DAV_PROPID_CORE 10000 /* ..10099. defined by mod_dav */
-#define DAV_PROPID_FS 10100 /* ..10299.
- mod_dav filesystem provider. */
-#define DAV_PROPID_TEST1 10300 /* ..10399 */
-#define DAV_PROPID_TEST2 10400 /* ..10499 */
-#define DAV_PROPID_TEST3 10500 /* ..10599 */
-/* Next: 10600 */
-
-
-/* --------------------------------------------------------------------
-**
-** DATABASE FUNCTIONS
-*/
-
-typedef struct dav_db dav_db;
-typedef struct dav_namespace_map dav_namespace_map;
-typedef struct dav_deadprop_rollback dav_deadprop_rollback;
-
-typedef struct {
- const char *ns; /* "" signals "no namespace" */
- const char *name;
-} dav_prop_name;
-
-/* hook functions to enable pluggable databases */
-struct dav_hooks_propdb
-{
- dav_error * (*open)(apr_pool_t *p, const dav_resource *resource, int ro,
- dav_db **pdb);
- void (*close)(dav_db *db);
-
- /*
- ** In bulk, define any namespaces that the values and their name
- ** elements may need.
- **
- ** Note: sometimes mod_dav will defer calling this until output_value
- ** returns found==1. If the output process needs the dav_xmlns_info
- ** filled for its work, then it will need to fill it on demand rather
- ** than depending upon this hook to fill in the structure.
- **
- ** Note: this will *always* be called during an output sequence. Thus,
- ** the provider may rely solely on using this to fill the xmlns info.
- */
- dav_error * (*define_namespaces)(dav_db *db, dav_xmlns_info *xi);
-
- /*
- ** Output the value from the database (i.e. add an element name and
- ** the value into *phdr). Set *found based on whether the name/value
- ** was found in the propdb.
- **
- ** Note: it is NOT an error for the key/value pair to not exist.
- **
- ** The dav_xmlns_info passed to define_namespaces() is also passed to
- ** each output_value() call so that namespaces can be added on-demand.
- ** It can also be used to look up prefixes or URIs during the output
- ** process.
- */
- dav_error * (*output_value)(dav_db *db, const dav_prop_name *name,
- dav_xmlns_info *xi,
- apr_text_header *phdr, int *found);
-
- /*
- ** Build a mapping from "global" namespaces (stored in apr_xml_*)
- ** into provider-local namespace identifiers.
- **
- ** This mapping should be done once per set of namespaces, and the
- ** resulting mapping should be passed into the store() hook function.
- **
- ** Note: usually, there is just a single document/namespaces for all
- ** elements passed. However, the generality of creating multiple
- ** mappings and passing them to store() is provided here.
- **
- ** Note: this is only in preparation for a series of store() calls.
- ** As a result, the propdb must be open for read/write access when
- ** this function is called.
- */
- dav_error * (*map_namespaces)(dav_db *db,
- const apr_array_header_t *namespaces,
- dav_namespace_map **mapping);
-
- /*
- ** Store a property value for a given name. The value->combined field
- ** MUST be set for this call.
- **
- ** ### WARNING: current providers will quote the text within ELEM.
- ** ### this implies you can call this function only once with a given
- ** ### element structure (a second time will quote it again).
- */
- dav_error * (*store)(dav_db *db, const dav_prop_name *name,
- const apr_xml_elem *elem,
- dav_namespace_map *mapping);
-
- /* remove a given property */
- dav_error * (*remove)(dav_db *db, const dav_prop_name *name);
-
- /* returns 1 if the record specified by "key" exists; 0 otherwise */
- int (*exists)(dav_db *db, const dav_prop_name *name);
-
- /*
- ** Iterate over the property names in the database.
- **
- ** iter->name.ns == iter->name.name == NULL when there are no more names.
- **
- ** Note: only one iteration may occur over the propdb at a time.
- */
- dav_error * (*first_name)(dav_db *db, dav_prop_name *pname);
- dav_error * (*next_name)(dav_db *db, dav_prop_name *pname);
-
- /*
- ** Rollback support: get rollback context, and apply it.
- **
- ** struct dav_deadprop_rollback is a provider-private structure; it
- ** should remember the name, and the name's old value (or the fact that
- ** the value was not present, and should be deleted if a rollback occurs).
- */
- dav_error * (*get_rollback)(dav_db *db, const dav_prop_name *name,
- dav_deadprop_rollback **prollback);
- dav_error * (*apply_rollback)(dav_db *db,
- dav_deadprop_rollback *rollback);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-};
-
-
-/* --------------------------------------------------------------------
-**
-** LOCK FUNCTIONS
-*/
-
-/* Used to represent a Timeout header of "Infinity" */
-#define DAV_TIMEOUT_INFINITE 0
-
-time_t dav_get_timeout(request_rec *r);
-
-/*
-** Opaque, provider-specific information for a lock database.
-*/
-typedef struct dav_lockdb_private dav_lockdb_private;
-
-/*
-** Opaque, provider-specific information for a lock record.
-*/
-typedef struct dav_lock_private dav_lock_private;
-
-/*
-** Lock database type. Lock providers are urged to implement a "lazy" open, so
-** doing an "open" is cheap until something is actually needed from the DB.
-*/
-typedef struct
-{
- const dav_hooks_locks *hooks; /* the hooks used for this lockdb */
- int ro; /* was it opened readonly? */
-
- dav_lockdb_private *info;
-
-} dav_lockdb;
-
-typedef enum {
- DAV_LOCKSCOPE_UNKNOWN,
- DAV_LOCKSCOPE_EXCLUSIVE,
- DAV_LOCKSCOPE_SHARED
-} dav_lock_scope;
-
-typedef enum {
- DAV_LOCKTYPE_UNKNOWN,
- DAV_LOCKTYPE_WRITE
-} dav_lock_type;
-
-typedef enum {
- DAV_LOCKREC_DIRECT, /* lock asserted on this resource */
- DAV_LOCKREC_INDIRECT, /* lock inherited from a parent */
- DAV_LOCKREC_INDIRECT_PARTIAL /* most info is not filled in */
-} dav_lock_rectype;
-
-/*
-** dav_lock: hold information about a lock on a resource.
-**
-** This structure is used for both direct and indirect locks. A direct lock
-** is a lock applied to a specific resource by the client. An indirect lock
-** is one that is inherited from a parent resource by virtue of a non-zero
-** Depth: header when the lock was applied.
-**
-** mod_dav records both types of locks in the lock database, managing their
-** addition/removal as resources are moved about the namespace.
-**
-** Note that the lockdb is free to marshal this structure in any form that
-** it likes.
-**
-** For a "partial" lock, the <rectype> and <locktoken> fields must be filled
-** in. All other (user) fields should be zeroed. The lock provider will
-** usually fill in the <info> field, and the <next> field may be used to
-** construct a list of partial locks.
-**
-** The lock provider MUST use the info field to store a value such that a
-** dav_lock structure can locate itself in the underlying lock database.
-** This requirement is needed for refreshing: when an indirect dav_lock is
-** refreshed, its reference to the direct lock does not specify the direct's
-** resource, so the only way to locate the (refreshed, direct) lock in the
-** database is to use the info field.
-**
-** Note that <is_locknull> only refers to the resource where this lock was
-** found.
-** ### hrm. that says the abstraction is wrong. is_locknull may disappear.
-*/
-typedef struct dav_lock
-{
- dav_lock_rectype rectype; /* type of lock record */
- int is_locknull; /* lock establishes a locknull resource */
-
- /* ### put the resource in here? */
-
- dav_lock_scope scope; /* scope of the lock */
- dav_lock_type type; /* type of lock */
- int depth; /* depth of the lock */
- time_t timeout; /* when the lock will timeout */
-
- const dav_locktoken *locktoken; /* the token that was issued */
-
- const char *owner; /* (XML) owner of the lock */
- const char *auth_user; /* auth'd username owning lock */
-
- dav_lock_private *info; /* private to the lockdb */
-
- struct dav_lock *next; /* for managing a list of locks */
-} dav_lock;
-
-/* Property-related public lock functions */
-const char *dav_lock_get_activelock(request_rec *r, dav_lock *locks,
- dav_buffer *pbuf);
-
-/* LockDB-related public lock functions */
-dav_error * dav_lock_parse_lockinfo(request_rec *r,
- const dav_resource *resrouce,
- dav_lockdb *lockdb,
- const apr_xml_doc *doc,
- dav_lock **lock_request);
-int dav_unlock(request_rec *r, const dav_resource *resource,
- const dav_locktoken *locktoken);
-dav_error * dav_add_lock(request_rec *r, const dav_resource *resource,
- dav_lockdb *lockdb, dav_lock *request,
- dav_response **response);
-dav_error * dav_notify_created(request_rec *r,
- dav_lockdb *lockdb,
- const dav_resource *resource,
- int resource_state,
- int depth);
-
-DAV_DECLARE(dav_error*) dav_lock_query(dav_lockdb *lockdb,
- const dav_resource *resource,
- dav_lock **locks);
-
-dav_error * dav_validate_request(request_rec *r, dav_resource *resource,
- int depth, dav_locktoken *locktoken,
- dav_response **response, int flags,
- dav_lockdb *lockdb);
-/*
-** flags:
-** 0x0F -- reserved for <dav_lock_scope> values
-**
-** other flags, detailed below
-*/
-#define DAV_VALIDATE_RESOURCE 0x0010 /* validate just the resource */
-#define DAV_VALIDATE_PARENT 0x0020 /* validate resource AND its parent */
-#define DAV_VALIDATE_ADD_LD 0x0040 /* add DAV:lockdiscovery into
- the 424 DAV:response */
-#define DAV_VALIDATE_USE_424 0x0080 /* return 424 status, not 207 */
-#define DAV_VALIDATE_IS_PARENT 0x0100 /* for internal use */
-
-/* Lock-null related public lock functions */
-int dav_get_resource_state(request_rec *r, const dav_resource *resource);
-
-/* Lock provider hooks. Locking is optional, so there may be no
- * lock provider for a given repository.
- */
-struct dav_hooks_locks
-{
- /* Return the supportedlock property for a resource */
- const char * (*get_supportedlock)(
- const dav_resource *resource
- );
-
- /* Parse a lock token URI, returning a lock token object allocated
- * in the given pool.
- */
- dav_error * (*parse_locktoken)(
- apr_pool_t *p,
- const char *char_token,
- dav_locktoken **locktoken_p
- );
-
- /* Format a lock token object into a URI string, allocated in
- * the given pool.
- *
- * Always returns non-NULL.
- */
- const char * (*format_locktoken)(
- apr_pool_t *p,
- const dav_locktoken *locktoken
- );
-
- /* Compare two lock tokens.
- *
- * Result < 0 => lt1 < lt2
- * Result == 0 => lt1 == lt2
- * Result > 0 => lt1 > lt2
- */
- int (*compare_locktoken)(
- const dav_locktoken *lt1,
- const dav_locktoken *lt2
- );
-
- /* Open the provider's lock database.
- *
- * The provider may or may not use a "real" database for locks
- * (a lock could be an attribute on a resource, for example).
- *
- * The provider may choose to use the value of the DAVLockDB directive
- * (as returned by dav_get_lockdb_path()) to decide where to place
- * any storage it may need.
- *
- * The request storage pool should be associated with the lockdb,
- * so it can be used in subsequent operations.
- *
- * If ro != 0, only readonly operations will be performed.
- * If force == 0, the open can be "lazy"; no subsequent locking operations
- * may occur.
- * If force != 0, locking operations will definitely occur.
- */
- dav_error * (*open_lockdb)(
- request_rec *r,
- int ro,
- int force,
- dav_lockdb **lockdb
- );
-
- /* Indicates completion of locking operations */
- void (*close_lockdb)(
- dav_lockdb *lockdb
- );
-
- /* Take a resource out of the lock-null state. */
- dav_error * (*remove_locknull_state)(
- dav_lockdb *lockdb,
- const dav_resource *resource
- );
-
- /*
- ** Create a (direct) lock structure for the given resource. A locktoken
- ** will be created.
- **
- ** The lock provider may store private information into lock->info.
- */
- dav_error * (*create_lock)(dav_lockdb *lockdb,
- const dav_resource *resource,
- dav_lock **lock);
-
- /*
- ** Get the locks associated with the specified resource.
- **
- ** If resolve_locks is true (non-zero), then any indirect locks are
- ** resolved to their actual, direct lock (i.e. the reference to followed
- ** to the original lock).
- **
- ** The locks, if any, are returned as a linked list in no particular
- ** order. If no locks are present, then *locks will be NULL.
- */
- dav_error * (*get_locks)(dav_lockdb *lockdb,
- const dav_resource *resource,
- int calltype,
- dav_lock **locks);
-
-#define DAV_GETLOCKS_RESOLVED 0 /* resolve indirects to directs */
-#define DAV_GETLOCKS_PARTIAL 1 /* leave indirects partially filled */
-#define DAV_GETLOCKS_COMPLETE 2 /* fill out indirect locks */
-
- /*
- ** Find a particular lock on a resource (specified by its locktoken).
- **
- ** *lock will be set to NULL if the lock is not found.
- **
- ** Note that the provider can optimize the unmarshalling -- only one
- ** lock (or none) must be constructed and returned.
- **
- ** If partial_ok is true (non-zero), then an indirect lock can be
- ** partially filled in. Otherwise, another lookup is done and the
- ** lock structure will be filled out as a DAV_LOCKREC_INDIRECT.
- */
- dav_error * (*find_lock)(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken *locktoken,
- int partial_ok,
- dav_lock **lock);
-
- /*
- ** Quick test to see if the resource has *any* locks on it.
- **
- ** This is typically used to determine if a non-existent resource
- ** has a lock and is (therefore) a locknull resource.
- **
- ** WARNING: this function may return TRUE even when timed-out locks
- ** exist (i.e. it may not perform timeout checks).
- */
- dav_error * (*has_locks)(dav_lockdb *lockdb,
- const dav_resource *resource,
- int *locks_present);
-
- /*
- ** Append the specified lock(s) to the set of locks on this resource.
- **
- ** If "make_indirect" is true (non-zero), then the specified lock(s)
- ** should be converted to an indirect lock (if it is a direct lock)
- ** before appending. Note that the conversion to an indirect lock does
- ** not alter the passed-in lock -- the change is internal the
- ** append_locks function.
- **
- ** Multiple locks are specified using the lock->next links.
- */
- dav_error * (*append_locks)(dav_lockdb *lockdb,
- const dav_resource *resource,
- int make_indirect,
- const dav_lock *lock);
-
- /*
- ** Remove any lock that has the specified locktoken.
- **
- ** If locktoken == NULL, then ALL locks are removed.
- */
- dav_error * (*remove_lock)(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken *locktoken);
-
- /*
- ** Refresh all locks, found on the specified resource, which has a
- ** locktoken in the provided list.
- **
- ** If the lock is indirect, then the direct lock is referenced and
- ** refreshed.
- **
- ** Each lock that is updated is returned in the <locks> argument.
- ** Note that the locks will be fully resolved.
- */
- dav_error * (*refresh_locks)(dav_lockdb *lockdb,
- const dav_resource *resource,
- const dav_locktoken_list *ltl,
- time_t new_time,
- dav_lock **locks);
-
- /*
- ** Look up the resource associated with a particular locktoken.
- **
- ** The search begins at the specified <start_resource> and the lock
- ** specified by <locktoken>.
- **
- ** If the resource/token specifies an indirect lock, then the direct
- ** lock will be looked up, and THAT resource will be returned. In other
- ** words, this function always returns the resource where a particular
- ** lock (token) was asserted.
- **
- ** NOTE: this function pointer is allowed to be NULL, indicating that
- ** the provider does not support this type of functionality. The
- ** caller should then traverse up the repository hierarchy looking
- ** for the resource defining a lock with this locktoken.
- */
- dav_error * (*lookup_resource)(dav_lockdb *lockdb,
- const dav_locktoken *locktoken,
- const dav_resource *start_resource,
- const dav_resource **resource);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-};
-
-/* what types of resources can be discovered by dav_get_resource_state() */
-#define DAV_RESOURCE_LOCK_NULL 10 /* resource lock-null */
-#define DAV_RESOURCE_NULL 11 /* resource null */
-#define DAV_RESOURCE_EXISTS 12 /* resource exists */
-#define DAV_RESOURCE_ERROR 13 /* an error occurred */
-
-
-/* --------------------------------------------------------------------
-**
-** PROPERTY HANDLING
-*/
-
-typedef struct dav_propdb dav_propdb;
-
-
-dav_error *dav_open_propdb(
- request_rec *r,
- dav_lockdb *lockdb,
- const dav_resource *resource,
- int ro,
- apr_array_header_t *ns_xlate,
- dav_propdb **propdb);
-
-void dav_close_propdb(dav_propdb *db);
-
-dav_get_props_result dav_get_props(
- dav_propdb *db,
- apr_xml_doc *doc);
-
-dav_get_props_result dav_get_allprops(
- dav_propdb *db,
- dav_prop_insert what);
-
-void dav_get_liveprop_supported(
- dav_propdb *propdb,
- const char *ns_uri,
- const char *propname,
- apr_text_header *body);
-
-/*
-** 3-phase property modification.
-**
-** 1) validate props. readable? unlocked? ACLs allow access?
-** 2) execute operation (set/delete)
-** 3) commit or rollback
-**
-** ### eventually, auth must be available. a ref to the request_rec (which
-** ### contains the auth info) should be in the shared context struct.
-**
-** Each function may alter the error values and information contained within
-** the context record. This should be done as an "increasing" level of
-** error, rather than overwriting any previous error.
-**
-** Note that commit() cannot generate errors. It should simply free the
-** rollback information.
-**
-** rollback() may generate additional errors because the rollback operation
-** can sometimes fail(!).
-**
-** The caller should allocate an array of these, one per operation. It should
-** be zero-initialized, then the db, operation, and prop fields should be
-** filled in before calling dav_prop_validate. Note that the set/delete
-** operations are order-dependent. For a given (logical) context, the same
-** pointer must be passed to each phase.
-**
-** error_type is an internal value, but will have the same numeric value
-** for each possible "desc" value. This allows the caller to group the
-** descriptions via the error_type variable, rather than through string
-** comparisons. Note that "status" does not provide enough granularity to
-** differentiate/group the "desc" values.
-**
-** Note that the propdb will maintain some (global) context across all
-** of the property change contexts. This implies that you can have only
-** one open transaction per propdb.
-*/
-typedef struct dav_prop_ctx
-{
- dav_propdb *propdb;
-
- int operation;
-#define DAV_PROP_OP_SET 1 /* set a property value */
-#define DAV_PROP_OP_DELETE 2 /* delete a prop value */
-/* ### add a GET? */
-
- apr_xml_elem *prop; /* property to affect */
-
- dav_error *err; /* error (if any) */
-
- /* private items to the propdb */
- int is_liveprop;
- void *liveprop_ctx;
- struct dav_rollback_item *rollback; /* optional rollback info */
-
- /* private to mod_dav.c */
- request_rec *r;
-
-} dav_prop_ctx;
-
-void dav_prop_validate(dav_prop_ctx *ctx);
-void dav_prop_exec(dav_prop_ctx *ctx);
-void dav_prop_commit(dav_prop_ctx *ctx);
-void dav_prop_rollback(dav_prop_ctx *ctx);
-
-#define DAV_PROP_CTX_HAS_ERR(dpc) ((dpc).err && (dpc).err->status >= 300)
-
-
-/* --------------------------------------------------------------------
-**
-** WALKER STRUCTURE
-*/
-
-enum {
- DAV_CALLTYPE_MEMBER = 1, /* called for a member resource */
- DAV_CALLTYPE_COLLECTION, /* called for a collection */
- DAV_CALLTYPE_LOCKNULL /* called for a locknull resource */
-};
-
-typedef struct
-{
- /* the client-provided context */
- void *walk_ctx;
-
- /* pool to use for allocations in the callback */
- apr_pool_t *pool;
-
- /* the current resource */
- const dav_resource *resource;
-
- /* OUTPUT: add responses to this */
- dav_response *response;
-
-} dav_walk_resource;
-
-typedef struct
-{
- int walk_type;
-#define DAV_WALKTYPE_AUTH 0x0001 /* limit to authorized files */
-#define DAV_WALKTYPE_NORMAL 0x0002 /* walk normal files */
-#define DAV_WALKTYPE_LOCKNULL 0x0004 /* walk locknull resources */
-
- /* callback function and a client context for the walk */
- dav_error * (*func)(dav_walk_resource *wres, int calltype);
- void *walk_ctx;
-
- /* what pool to use for allocations needed by walk logic */
- apr_pool_t *pool;
-
- /* beginning root of the walk */
- const dav_resource *root;
-
- /* lock database to enable walking LOCKNULL resources */
- dav_lockdb *lockdb;
-
-} dav_walk_params;
-
-/* directory tree walking context */
-typedef struct dav_walker_ctx
-{
- /* input: */
- dav_walk_params w;
-
-
- /* ### client data... phasing out this big glom */
-
- /* this brigade buffers data being sent to r->output_filters */
- apr_bucket_brigade *bb;
-
- /* a scratch pool, used to stream responses and iteratively cleared. */
- apr_pool_t *scratchpool;
-
- request_rec *r; /* original request */
-
- /* for PROPFIND operations */
- apr_xml_doc *doc;
- int propfind_type;
-#define DAV_PROPFIND_IS_ALLPROP 1
-#define DAV_PROPFIND_IS_PROPNAME 2
-#define DAV_PROPFIND_IS_PROP 3
-
- apr_text *propstat_404; /* (cached) propstat giving a 404 error */
-
- const dav_if_header *if_header; /* for validation */
- const dav_locktoken *locktoken; /* for UNLOCK */
- const dav_lock *lock; /* for LOCK */
- int skip_root; /* for dav_inherit_locks() */
-
- int flags;
-
- dav_buffer work_buf; /* for dav_validate_request() */
-
-} dav_walker_ctx;
-
-DAV_DECLARE(void) dav_add_response(dav_walk_resource *wres,
- int status,
- dav_get_props_result *propstats);
-
-
-/* --------------------------------------------------------------------
-**
-** "STREAM" STRUCTURE
-**
-** mod_dav uses this abstraction for interacting with the repository
-** while fetching/storing resources. mod_dav views resources as a stream
-** of bytes.
-**
-** Note that the structure is opaque -- it is private to the repository
-** that created the stream in the repository's "open" function.
-**
-** ### THIS STUFF IS GOING AWAY ... GET/read requests are handled by
-** ### having the provider jam stuff straight into the filter stack.
-** ### this is only left for handling PUT/write requests.
-*/
-
-typedef struct dav_stream dav_stream;
-
-typedef enum {
- DAV_MODE_WRITE_TRUNC, /* truncate and open for writing */
- DAV_MODE_WRITE_SEEKABLE /* open for writing; random access */
-} dav_stream_mode;
-
-
-/* --------------------------------------------------------------------
-**
-** REPOSITORY FUNCTIONS
-*/
-
-/* Repository provider hooks */
-struct dav_hooks_repository
-{
- /* Flag for whether repository requires special GET handling.
- * If resources in the repository are not visible in the
- * filesystem location which URLs map to, then special handling
- * is required to first fetch a resource from the repository,
- * respond to the GET request, then free the resource copy.
- */
- int handle_get;
-
- /* Get a resource descriptor for the URI in a request. A descriptor
- * should always be returned even if the resource does not exist. This
- * repository has been identified as handling the resource given by
- * the URI, so an answer must be given. If there is a problem with the
- * URI or accessing the resource or whatever, then an error should be
- * returned.
- *
- * root_dir:
- * the root of the directory for which this repository is configured.
- *
- * label:
- * if a Label: header is present (and allowed), this is the label
- * to use to identify a version resource from the resource's
- * corresponding version history. Otherwise, it will be NULL.
- *
- * use_checked_in:
- * use the DAV:checked-in property of the resource identified by the
- * Request-URI to identify and return a version resource
- *
- * The provider may associate the request storage pool with the resource
- * (in the resource->pool field), to use in other operations on that
- * resource.
- */
- dav_error * (*get_resource)(
- request_rec *r,
- const char *root_dir,
- const char *label,
- int use_checked_in,
- dav_resource **resource
- );
-
- /* Get a resource descriptor for the parent of the given resource.
- * The resources need not exist. NULL is returned if the resource
- * is the root collection.
- *
- * An error should be returned only if there is a fatal error in
- * fetching information about the parent resource.
- */
- dav_error * (*get_parent_resource)(
- const dav_resource *resource,
- dav_resource **parent_resource
- );
-
- /* Determine whether two resource descriptors refer to the same resource.
- *
- * Result != 0 => the resources are the same.
- */
- int (*is_same_resource)(
- const dav_resource *res1,
- const dav_resource *res2
- );
-
- /* Determine whether one resource is a parent (immediate or otherwise)
- * of another.
- *
- * Result != 0 => res1 is a parent of res2.
- */
- int (*is_parent_resource)(
- const dav_resource *res1,
- const dav_resource *res2
- );
-
- /*
- ** Open a stream for this resource, using the specified mode. The
- ** stream will be returned in *stream.
- */
- dav_error * (*open_stream)(const dav_resource *resource,
- dav_stream_mode mode,
- dav_stream **stream);
-
- /*
- ** Close the specified stream.
- **
- ** mod_dav will (ideally) make sure to call this. For safety purposes,
- ** a provider should (ideally) register a cleanup function with the
- ** request pool to get this closed and cleaned up.
- **
- ** Note the possibility of an error from the close -- it is entirely
- ** feasible that the close does a "commit" of some kind, which can
- ** produce an error.
- **
- ** commit should be TRUE (non-zero) or FALSE (0) if the stream was
- ** opened for writing. This flag states whether to retain the file
- ** or not.
- ** Note: the commit flag is ignored for streams opened for reading.
- */
- dav_error * (*close_stream)(dav_stream *stream, int commit);
-
- /*
- ** Write data to the stream.
- **
- ** All of the bytes must be written, or an error should be returned.
- */
- dav_error * (*write_stream)(dav_stream *stream,
- const void *buf, apr_size_t bufsize);
-
- /*
- ** Seek to an absolute position in the stream. This is used to support
- ** Content-Range in a GET/PUT.
- **
- ** NOTE: if this function is NULL (which is allowed), then any
- ** operations using Content-Range will be refused.
- */
- dav_error * (*seek_stream)(dav_stream *stream, apr_off_t abs_position);
-
- /*
- ** If a GET is processed using a stream (open_stream, read_stream)
- ** rather than via a sub-request (on get_pathname), then this function
- ** is used to provide the repository with a way to set the headers
- ** in the response.
- **
- ** This function may be called without a following deliver(), to
- ** handle a HEAD request.
- **
- ** This may be NULL if handle_get is FALSE.
- */
- dav_error * (*set_headers)(request_rec *r,
- const dav_resource *resource);
-
- /*
- ** The provider should deliver the resource into the specified filter.
- ** Basically, this is the response to the GET method.
- **
- ** Note that this is called for all resources, including collections.
- ** The provider should determine what has content to deliver or not.
- **
- ** set_headers will be called prior to this function, allowing the
- ** provider to set the appropriate response headers.
- **
- ** This may be NULL if handle_get is FALSE.
- ** ### maybe toss handle_get and just use this function as the marker
- */
- dav_error * (*deliver)(const dav_resource *resource,
- ap_filter_t *output);
-
- /* Create a collection resource. The resource must not already exist.
- *
- * Result == NULL if the collection was created successfully. Also, the
- * resource object is updated to reflect that the resource exists, and
- * is a collection.
- */
- dav_error * (*create_collection)(
- dav_resource *resource
- );
-
- /* Copy one resource to another. The destination may exist, if it is
- * versioned.
- * Handles both files and collections. Properties are copied as well.
- * If the destination exists and is versioned, the provider must update
- * the destination to have identical content to the source,
- * recursively for collections.
- * The depth argument is ignored for a file, and can be either 0 or
- * DAV_INFINITY for a collection.
- * If an error occurs in a child resource, then the return value is
- * non-NULL, and *response is set to a multistatus response.
- * If the copy is successful, the dst resource object is
- * updated to reflect that the resource exists.
- */
- dav_error * (*copy_resource)(
- const dav_resource *src,
- dav_resource *dst,
- int depth,
- dav_response **response
- );
-
- /* Move one resource to another. The destination must not exist.
- * Handles both files and collections. Properties are moved as well.
- * If an error occurs in a child resource, then the return value is
- * non-NULL, and *response is set to a multistatus response.
- * If the move is successful, the src and dst resource objects are
- * updated to reflect that the source no longer exists, and the
- * destination does.
- */
- dav_error * (*move_resource)(
- dav_resource *src,
- dav_resource *dst,
- dav_response **response
- );
-
- /* Remove a resource. Handles both files and collections.
- * Removes any associated properties as well.
- * If an error occurs in a child resource, then the return value is
- * non-NULL, and *response is set to a multistatus response.
- * If the delete is successful, the resource object is updated to
- * reflect that the resource no longer exists.
- */
- dav_error * (*remove_resource)(
- dav_resource *resource,
- dav_response **response
- );
-
- /* Walk a resource hierarchy.
- *
- * Iterates over the resource hierarchy specified by params->root.
- * Control of the walk and the callback are specified by 'params'.
- *
- * An error may be returned. *response will contain multistatus
- * responses (if any) suitable for the body of the error. It is also
- * possible to return NULL, yet still have multistatus responses.
- * In this case, typically the caller should return a 207 (Multistatus)
- * and the responses (in the body) as the HTTP response.
- */
- dav_error * (*walk)(const dav_walk_params *params, int depth,
- dav_response **response);
-
- /* Get the entity tag for a resource */
- const char * (*getetag)(const dav_resource *resource);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-};
-
-
-/* --------------------------------------------------------------------
-**
-** VERSIONING FUNCTIONS
-*/
-
-
-/* dav_add_vary_header
- *
- * If there were any headers in the request which require a Vary header
- * in the response, add it.
- */
-void dav_add_vary_header(request_rec *in_req,
- request_rec *out_req,
- const dav_resource *resource);
-
-/*
-** Flags specifying auto-versioning behavior, returned by
-** the auto_versionable hook. The value returned depends
-** on both the state of the resource and the value of the
-** DAV:auto-versioning property for the resource.
-**
-** If the resource does not exist (null or lock-null),
-** DAV_AUTO_VERSION_ALWAYS causes creation of a new version-controlled resource
-**
-** If the resource is checked in,
-** DAV_AUTO_VERSION_ALWAYS causes it to be checked out always,
-** DAV_AUTO_VERSION_LOCKED causes it to be checked out only when locked
-**
-** If the resource is checked out,
-** DAV_AUTO_VERSION_ALWAYS causes it to be checked in always,
-** DAV_AUTO_VERSION_LOCKED causes it to be checked in when unlocked
-** (note: a provider should allow auto-checkin only for resources which
-** were automatically checked out)
-**
-** In all cases, DAV_AUTO_VERSION_NEVER results in no auto-versioning behavior.
-*/
-typedef enum {
- DAV_AUTO_VERSION_NEVER,
- DAV_AUTO_VERSION_ALWAYS,
- DAV_AUTO_VERSION_LOCKED
-} dav_auto_version;
-
-/*
-** This structure is used to record what auto-versioning operations
-** were done to make a resource writable, so that they can be undone
-** at the end of a request.
-*/
-typedef struct {
- int resource_versioned; /* 1 => resource was auto-version-controlled */
- int resource_checkedout; /* 1 => resource was auto-checked-out */
- int parent_checkedout; /* 1 => parent was auto-checked-out */
- dav_resource *parent_resource; /* parent resource, if it was needed */
-} dav_auto_version_info;
-
-/* Ensure that a resource is writable. If there is no versioning
- * provider, then this is essentially a no-op. Versioning repositories
- * require explicit resource creation and checkout before they can
- * be written to. If a new resource is to be created, or an existing
- * resource deleted, the parent collection must be checked out as well.
- *
- * Set the parent_only flag to only make the parent collection writable.
- * Otherwise, both parent and child are made writable as needed. If the
- * child does not exist, then a new versioned resource is created and
- * checked out.
- *
- * If auto-versioning is not enabled for a versioned resource, then an error is
- * returned, since the resource cannot be modified.
- *
- * The dav_auto_version_info structure is filled in with enough information
- * to restore both parent and child resources to the state they were in
- * before the auto-versioning operations occurred.
- */
-dav_error *dav_auto_checkout(
- request_rec *r,
- dav_resource *resource,
- int parent_only,
- dav_auto_version_info *av_info);
-
-/* Revert the writability of resources back to what they were
- * before they were modified. If undo == 0, then the resource
- * modifications are maintained (i.e. they are checked in).
- * If undo != 0, then resource modifications are discarded
- * (i.e. they are unchecked out).
- *
- * Set the unlock flag to indicate that the resource is about
- * to be unlocked; it will be checked in if the resource
- * auto-versioning property indicates it should be. In this case,
- * av_info is ignored, so it can be NULL.
- *
- * The resource argument may be NULL if only the parent resource
- * was checked out (i.e. the parent_only was != 0 in the
- * dav_auto_checkout call).
- */
-dav_error *dav_auto_checkin(
- request_rec *r,
- dav_resource *resource,
- int undo,
- int unlock,
- dav_auto_version_info *av_info);
-
-/*
-** This structure is used to describe available reports
-**
-** "nmspace" should be valid XML and URL-quoted. mod_dav will place
-** double-quotes around it and use it in an xmlns declaration.
-*/
-typedef struct {
- const char *nmspace; /* namespace of the XML report element */
- const char *name; /* element name for the XML report */
-} dav_report_elem;
-
-
-/* Versioning provider hooks */
-struct dav_hooks_vsn
-{
- /*
- ** MANDATORY HOOKS
- ** The following hooks are mandatory for all versioning providers;
- ** they define the functionality needed to implement "core" versioning.
- */
-
- /* Return supported versioning options.
- * Each dav_text item in the list will be returned as a separate
- * DAV header. Providers are advised to limit the length of an
- * individual text item to 63 characters, to conform to the limit
- * used by MS Web Folders.
- */
- void (*get_vsn_options)(apr_pool_t *p, apr_text_header *phdr);
-
- /* Get the value of a specific option for an OPTIONS request.
- * The option being requested is given by the parsed XML
- * element object "elem". The value of the option should be
- * appended to the "option" text object.
- */
- dav_error * (*get_option)(const dav_resource *resource,
- const apr_xml_elem *elem,
- apr_text_header *option);
-
- /* Determine whether a non-versioned (or non-existent) resource
- * is versionable. Returns != 0 if resource can be versioned.
- */
- int (*versionable)(const dav_resource *resource);
-
- /* Determine whether auto-versioning is enabled for a resource
- * (which may not exist, or may not be versioned). If the resource
- * is a checked-out resource, the provider must only enable
- * auto-checkin if the resource was automatically checked out.
- *
- * The value returned depends on both the state of the resource
- * and the value of its DAV:auto-version property. See the description
- * of the dav_auto_version enumeration above for the details.
- */
- dav_auto_version (*auto_versionable)(const dav_resource *resource);
-
- /* Put a resource under version control. If the resource already
- * exists unversioned, then it becomes the initial version of the
- * new version history, and it is replaced by a version selector
- * which targets the new version.
- *
- * If the resource does not exist, then a new version-controlled
- * resource is created which either targets an existing version (if the
- * "target" argument is not NULL), or the initial, empty version
- * in a new history resource (if the "target" argument is NULL).
- *
- * If successful, the resource object state is updated appropriately
- * (that is, changed to refer to the new version-controlled resource).
- */
- dav_error * (*vsn_control)(dav_resource *resource,
- const char *target);
-
- /* Checkout a resource. If successful, the resource
- * object state is updated appropriately.
- *
- * The auto_checkout flag will be set if this checkout is being
- * done automatically, as part of some method which modifies
- * the resource. The provider must remember that the resource
- * was automatically checked out, so it can determine whether it
- * can be automatically checked in. (Auto-checkin should only be
- * enabled for resources which were automatically checked out.)
- *
- * If the working resource has a different URL from the
- * target resource, a dav_resource descriptor is returned
- * for the new working resource. Otherwise, the original
- * resource descriptor will refer to the working resource.
- * The working_resource argument can be NULL if the caller
- * is not interested in the working resource.
- *
- * If the client has specified DAV:unreserved or DAV:fork-ok in the
- * checkout request, then the corresponding flags are set. If
- * DAV:activity-set has been specified, then create_activity is set
- * if DAV:new was specified; otherwise, the DAV:href elements' CDATA
- * (the actual href text) is passed in the "activities" array (each
- * element of the array is a const char *). activities will be NULL
- * no DAV:activity-set was provided or when create_activity is set.
- */
- dav_error * (*checkout)(dav_resource *resource,
- int auto_checkout,
- int is_unreserved, int is_fork_ok,
- int create_activity,
- apr_array_header_t *activities,
- dav_resource **working_resource);
-
- /* Uncheckout a checked-out resource. If successful, the resource
- * object state is updated appropriately.
- */
- dav_error * (*uncheckout)(dav_resource *resource);
-
- /* Checkin a checked-out resource. If successful, the resource
- * object state is updated appropriately, and the
- * version_resource descriptor will refer to the new version.
- * The version_resource argument can be NULL if the caller
- * is not interested in the new version resource.
- *
- * If the client has specified DAV:keep-checked-out in the checkin
- * request, then the keep_checked_out flag is set. The provider
- * should create a new version, but keep the resource in the
- * checked-out state.
- */
- dav_error * (*checkin)(dav_resource *resource,
- int keep_checked_out,
- dav_resource **version_resource);
-
- /*
- ** Return the set of reports available at this resource.
- **
- ** An array of report elements should be returned, with an end-marker
- ** element containing namespace==NULL. The value of the
- ** DAV:supported-report-set property will be constructed and
- ** returned.
- */
- dav_error * (*avail_reports)(const dav_resource *resource,
- const dav_report_elem **reports);
-
- /*
- ** Determine whether a Label header can be used
- ** with a particular report. The dav_xml_doc structure
- ** contains the parsed report request body.
- ** Returns 0 if the Label header is not allowed.
- */
- int (*report_label_header_allowed)(const apr_xml_doc *doc);
-
- /*
- ** Generate a report on a resource. Since a provider is free
- ** to define its own reports, and the value of request headers
- ** may affect the interpretation of a report, the request record
- ** must be passed to this routine.
- **
- ** The dav_xml_doc structure contains the parsed report request
- ** body. The report response should be generated into the specified
- ** output filter.
- **
- ** If an error occurs, and a response has not yet been generated,
- ** then an error can be returned from this function. mod_dav will
- ** construct an appropriate error response. Once some output has
- ** been placed into the filter, however, the provider should not
- ** return an error -- there is no way that mod_dav can deliver it
- ** properly.
- **
- ** ### maybe we need a way to signal an error anyways, and then
- ** ### apache can abort the connection?
- */
- dav_error * (*deliver_report)(request_rec *r,
- const dav_resource *resource,
- const apr_xml_doc *doc,
- ap_filter_t *output);
-
- /*
- ** OPTIONAL HOOKS
- ** The following hooks are optional; if not defined, then the
- ** corresponding protocol methods will be unsupported.
- */
-
- /*
- ** Set the state of a checked-in version-controlled resource.
- **
- ** If the request specified a version, the version resource
- ** represents that version. If the request specified a label,
- ** then "version" is NULL, and "label" is the label.
- **
- ** The depth argument is ignored for a file, and can be 0, 1, or
- ** DAV_INFINITY for a collection. The depth argument only applies
- ** with a label, not a version.
- **
- ** If an error occurs in a child resource, then the return value is
- ** non-NULL, and *response is set to a multistatus response.
- **
- ** This hook is optional; if not defined, then the UPDATE method
- ** will not be supported.
- */
- dav_error * (*update)(const dav_resource *resource,
- const dav_resource *version,
- const char *label,
- int depth,
- dav_response **response);
-
- /*
- ** Add a label to a version. The resource is either a specific
- ** version, or a version selector, in which case the label should
- ** be added to the current target of the version selector. The
- ** version selector cannot be checked out.
- **
- ** If replace != 0, any existing label by the same name is
- ** effectively deleted first. Otherwise, it is an error to
- ** attempt to add a label which already exists on some version
- ** of the same history resource.
- **
- ** This hook is optional; if not defined, then the LABEL method
- ** will not be supported. If it is defined, then the remove_label
- ** hook must be defined also.
- */
- dav_error * (*add_label)(const dav_resource *resource,
- const char *label,
- int replace);
-
- /*
- ** Remove a label from a version. The resource is either a specific
- ** version, or a version selector, in which case the label should
- ** be added to the current target of the version selector. The
- ** version selector cannot be checked out.
- **
- ** It is an error if no such label exists on the specified version.
- **
- ** This hook is optional, but if defined, the add_label hook
- ** must be defined also.
- */
- dav_error * (*remove_label)(const dav_resource *resource,
- const char *label);
-
- /*
- ** Determine whether a null resource can be created as a workspace.
- ** The provider may restrict workspaces to certain locations.
- ** Returns 0 if the resource cannot be a workspace.
- **
- ** This hook is optional; if the provider does not support workspaces,
- ** it should be set to NULL.
- */
- int (*can_be_workspace)(const dav_resource *resource);
-
- /*
- ** Create a workspace resource. The resource must not already
- ** exist. Any <DAV:mkworkspace> element is passed to the provider
- ** in the "doc" structure; it may be empty.
- **
- ** If workspace creation is succesful, the state of the resource
- ** object is updated appropriately.
- **
- ** This hook is optional; if the provider does not support workspaces,
- ** it should be set to NULL.
- */
- dav_error * (*make_workspace)(dav_resource *resource,
- apr_xml_doc *doc);
-
- /*
- ** Determine whether a null resource can be created as an activity.
- ** The provider may restrict activities to certain locations.
- ** Returns 0 if the resource cannot be an activity.
- **
- ** This hook is optional; if the provider does not support activities,
- ** it should be set to NULL.
- */
- int (*can_be_activity)(const dav_resource *resource);
-
- /*
- ** Create an activity resource. The resource must not already
- ** exist.
- **
- ** If activity creation is succesful, the state of the resource
- ** object is updated appropriately.
- **
- ** This hook is optional; if the provider does not support activities,
- ** it should be set to NULL.
- */
- dav_error * (*make_activity)(dav_resource *resource);
-
- /*
- ** Merge a resource (tree) into target resource (tree).
- **
- ** ### more doc...
- **
- ** This hook is optional; if the provider does not support merging,
- ** then this should be set to NULL.
- */
- dav_error * (*merge)(dav_resource *target, dav_resource *source,
- int no_auto_merge, int no_checkout,
- apr_xml_elem *prop_elem,
- ap_filter_t *output);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-};
-
-
-/* --------------------------------------------------------------------
-**
-** BINDING FUNCTIONS
-*/
-
-/* binding provider hooks */
-struct dav_hooks_binding {
-
- /* Determine whether a resource can be the target of a binding.
- * Returns 0 if the resource cannot be a binding target.
- */
- int (*is_bindable)(const dav_resource *resource);
-
- /* Create a binding to a resource.
- * The resource argument is the target of the binding;
- * the binding argument must be a resource which does not already
- * exist.
- */
- dav_error * (*bind_resource)(const dav_resource *resource,
- dav_resource *binding);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-
-};
-
-
-/* --------------------------------------------------------------------
-**
-** SEARCH(DASL) FUNCTIONS
-*/
-
-/* search provider hooks */
-struct dav_hooks_search {
- /* Set header for a OPTION method
- * An error may be returned.
- * To set a hadder, this function might call
- * apr_table_setn(r->headers_out, "DASL", dasl_optin1);
- *
- * Examples:
- * DASL: <DAV:basicsearch>
- * DASL: <http://foo.bar.com/syntax1>
- * DASL: <http://akuma.com/syntax2>
- */
- dav_error * (*set_option_head)(request_rec *r);
-
- /* Search resources
- * An error may be returned. *response will contain multistatus
- * responses (if any) suitable for the body of the error. It is also
- * possible to return NULL, yet still have multistatus responses.
- * In this case, typically the caller should return a 207 (Multistatus)
- * and the responses (in the body) as the HTTP response.
- */
- dav_error * (*search_resource)(request_rec *r,
- dav_response **response);
-
- /*
- ** If a provider needs a context to associate with this hooks structure,
- ** then this field may be used. In most cases, it will just be NULL.
- */
- void *ctx;
-
-};
-
-
-/* --------------------------------------------------------------------
-**
-** MISCELLANEOUS STUFF
-*/
-
-/* fetch the "LimitXMLRequestBody" in force for this resource */
-apr_size_t dav_get_limit_xml_body(const request_rec *r);
-
-typedef struct {
- int propid; /* live property ID */
- const dav_hooks_liveprop *provider; /* the provider defining this prop */
-} dav_elem_private;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _MOD_DAV_H_ */
diff --git a/modules/dav/main/props.c b/modules/dav/main/props.c
deleted file mode 100644
index c1ea75550d..0000000000
--- a/modules/dav/main/props.c
+++ /dev/null
@@ -1,1118 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-** - Property database handling (repository-independent)
-**
-** NOTES:
-**
-** PROPERTY DATABASE
-**
-** This version assumes that there is a per-resource database provider
-** to record properties. The database provider decides how and where to
-** store these databases.
-**
-** The DBM keys for the properties have the following form:
-**
-** namespace ":" propname
-**
-** For example: 5:author
-**
-** The namespace provides an integer index into the namespace table
-** (see below). propname is simply the property name, without a namespace
-** prefix.
-**
-** A special case exists for properties that had a prefix starting with
-** "xml". The XML Specification reserves these for future use. mod_dav
-** stores and retrieves them unchanged. The keys for these properties
-** have the form:
-**
-** ":" propname
-**
-** The propname will contain the prefix and the property name. For
-** example, a key might be ":xmlfoo:name"
-**
-** The ":name" style will also be used for properties that do not
-** exist within a namespace.
-**
-** The DBM values consist of two null-terminated strings, appended
-** together (the null-terms are retained and stored in the database).
-** The first string is the xml:lang value for the property. An empty
-** string signifies that a lang value was not in context for the value.
-** The second string is the property value itself.
-**
-**
-** NAMESPACE TABLE
-**
-** The namespace table is an array that lists each of the namespaces
-** that are in use by the properties in the given propdb. Each entry
-** in the array is a simple URI.
-**
-** For example: http://www.foo.bar/standards/props/
-**
-** The prefix used for the property is stripped and the URI for it
-** is entered into the namespace table. Also, any namespaces used
-** within the property value will be entered into the table (and
-** stripped from the child elements).
-**
-** The namespaces are stored in the DBM database under the "METADATA" key.
-**
-**
-** STRIPPING NAMESPACES
-**
-** Within the property values, the namespace declarations (xmlns...)
-** are stripped. Each element and attribute will have its prefix removed
-** and a new prefix inserted.
-**
-** This must be done so that we can return multiple properties in a
-** PROPFIND which may have (originally) used conflicting prefixes. For
-** that case, we must bind all property value elements to new namespace
-** values.
-**
-** This implies that clients must NOT be sensitive to the namespace
-** prefix used for their properties. It WILL change when the properties
-** are returned (we return them as "ns<index>", e.g. "ns5"). Also, the
-** property value can contain ONLY XML elements and CDATA. PI and comment
-** elements will be stripped. CDATA whitespace will be preserved, but
-** whitespace within element tags will be altered. Attribute ordering
-** may be altered. Element and CDATA ordering will be preserved.
-**
-**
-** ATTRIBUTES ON PROPERTY NAME ELEMENTS
-**
-** When getting/setting properties, the XML used looks like:
-**
-** <prop>
-** <propname1>value</propname1>
-** <propname2>value</propname1>
-** </prop>
-**
-** This implementation (mod_dav) DOES NOT save any attributes that are
-** associated with the <propname1> element. The property value is deemed
-** to be only the contents ("value" in the above example).
-**
-** We do store the xml:lang value (if any) that applies to the context
-** of the <propname1> element. Whether the xml:lang attribute is on
-** <propname1> itself, or from a higher level element, we will store it
-** with the property value.
-**
-**
-** VERSIONING
-**
-** The DBM db contains a key named "METADATA" that holds database-level
-** information, such as the namespace table. The record also contains the
-** db's version number as the very first 16-bit value. This first number
-** is actually stored as two single bytes: the first byte is a "major"
-** version number. The second byte is a "minor" number.
-**
-** If the major number is not what mod_dav expects, then the db is closed
-** immediately and an error is returned. A minor number change is
-** acceptable -- it is presumed that old/new dav_props.c can deal with
-** the database format. For example, a newer dav_props might update the
-** minor value and append information to the end of the metadata record
-** (which would be ignored by previous versions).
-**
-**
-** ISSUES:
-**
-** At the moment, for the dav_get_allprops() and dav_get_props() functions,
-** we must return a set of xmlns: declarations for ALL known namespaces
-** in the file. There isn't a way to filter this because we don't know
-** which are going to be used or not. Examining property names is not
-** sufficient because the property values could use entirely different
-** namespaces.
-**
-** ==> we must devise a scheme where we can "garbage collect" the namespace
-** entries from the property database.
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_BYTEFUNC
-#include "apr_want.h"
-
-#include "mod_dav.h"
-
-#include "http_log.h"
-#include "http_request.h"
-
-/*
-** There is some rough support for writable DAV:getcontenttype and
-** DAV:getcontentlanguage properties. If this #define is (1), then
-** this support is disabled.
-**
-** We are disabling it because of a lack of support in GET and PUT
-** operations. For GET, it would be "expensive" to look for a propdb,
-** open it, and attempt to extract the Content-Type and Content-Language
-** values for the response.
-** (Handling the PUT would not be difficult, though)
-*/
-#define DAV_DISABLE_WRITABLE_PROPS 1
-
-#define DAV_EMPTY_VALUE "\0" /* TWO null terms */
-
-struct dav_propdb {
- apr_pool_t *p; /* the pool we should use */
- request_rec *r; /* the request record */
-
- const dav_resource *resource; /* the target resource */
-
- int deferred; /* open of db has been deferred */
- dav_db *db; /* underlying database containing props */
-
- apr_array_header_t *ns_xlate; /* translation of an elem->ns to URI */
- dav_namespace_map *mapping; /* namespace mapping */
-
- dav_lockdb *lockdb; /* the lock database */
-
- dav_buffer wb_lock; /* work buffer for lockdiscovery property */
-
- /* if we ever run a GET subreq, it will be stored here */
- request_rec *subreq;
-
- /* hooks we should use for processing (based on the target resource) */
- const dav_hooks_db *db_hooks;
-};
-
-/* NOTE: dav_core_props[] and the following enum must stay in sync. */
-/* ### move these into a "core" liveprop provider? */
-static const char * const dav_core_props[] =
-{
- "getcontenttype",
- "getcontentlanguage",
- "lockdiscovery",
- "supportedlock",
-
- NULL /* sentinel */
-};
-enum {
- DAV_PROPID_CORE_getcontenttype = DAV_PROPID_CORE,
- DAV_PROPID_CORE_getcontentlanguage,
- DAV_PROPID_CORE_lockdiscovery,
- DAV_PROPID_CORE_supportedlock,
-
- DAV_PROPID_CORE_UNKNOWN
-};
-
-/*
-** This structure is used to track information needed for a rollback.
-*/
-typedef struct dav_rollback_item {
- /* select one of the two rollback context structures based on the
- value of dav_prop_ctx.is_liveprop */
- dav_deadprop_rollback *deadprop;
- dav_liveprop_rollback *liveprop;
-
-} dav_rollback_item;
-
-
-static int dav_find_liveprop_provider(dav_propdb *propdb,
- const char *ns_uri,
- const char *propname,
- const dav_hooks_liveprop **provider)
-{
- int propid;
-
- *provider = NULL;
-
- if (ns_uri == NULL) {
- /* policy: liveprop providers cannot define no-namespace properties */
- return DAV_PROPID_CORE_UNKNOWN;
- }
-
- /* check liveprop providers first, so they can define core properties */
- propid = dav_run_find_liveprop(propdb->resource, ns_uri, propname,
- provider);
- if (propid != 0) {
- return propid;
- }
-
- /* check for core property */
- if (strcmp(ns_uri, "DAV:") == 0) {
- const char * const *p = dav_core_props;
-
- for (propid = DAV_PROPID_CORE; *p != NULL; ++p, ++propid)
- if (strcmp(propname, *p) == 0) {
- return propid;
- }
- }
-
- /* no provider for this property */
- return DAV_PROPID_CORE_UNKNOWN;
-}
-
-static void dav_find_liveprop(dav_propdb *propdb, apr_xml_elem *elem)
-{
- const char *ns_uri;
- dav_elem_private *priv = elem->priv;
- const dav_hooks_liveprop *hooks;
-
-
- if (elem->ns == APR_XML_NS_NONE)
- ns_uri = NULL;
- else if (elem->ns == APR_XML_NS_DAV_ID)
- ns_uri = "DAV:";
- else
- ns_uri = APR_XML_GET_URI_ITEM(propdb->ns_xlate, elem->ns);
-
- priv->propid = dav_find_liveprop_provider(propdb, ns_uri, elem->name,
- &hooks);
-
- /* ### this test seems redundant... */
- if (priv->propid != DAV_PROPID_CORE_UNKNOWN) {
- priv->provider = hooks;
- }
-}
-
-/* is the live property read/write? */
-static int dav_rw_liveprop(dav_propdb *propdb, dav_elem_private *priv)
-{
- int propid = priv->propid;
-
- /*
- ** Check the liveprop provider (if this is a provider-defined prop)
- */
- if (priv->provider != NULL) {
- return (*priv->provider->is_writable)(propdb->resource, propid);
- }
-
- /* these are defined as read-only */
- if (propid == DAV_PROPID_CORE_lockdiscovery
-#if DAV_DISABLE_WRITABLE_PROPS
- || propid == DAV_PROPID_CORE_getcontenttype
- || propid == DAV_PROPID_CORE_getcontentlanguage
-#endif
- || propid == DAV_PROPID_CORE_supportedlock
- ) {
-
- return 0;
- }
-
- /* these are defined as read/write */
- if (propid == DAV_PROPID_CORE_getcontenttype
- || propid == DAV_PROPID_CORE_getcontentlanguage
- || propid == DAV_PROPID_CORE_UNKNOWN) {
-
- return 1;
- }
-
- /*
- ** We don't recognize the property, so it must be dead (and writable)
- */
- return 1;
-}
-
-/* do a sub-request to fetch properties for the target resource's URI. */
-static void dav_do_prop_subreq(dav_propdb *propdb)
-{
- /* perform a "GET" on the resource's URI (note that the resource
- may not correspond to the current request!). */
- propdb->subreq = ap_sub_req_lookup_uri(propdb->resource->uri, propdb->r,
- NULL);
-}
-
-static dav_error * dav_insert_coreprop(dav_propdb *propdb,
- int propid, const char *name,
- dav_prop_insert what,
- apr_text_header *phdr,
- dav_prop_insert *inserted)
-{
- const char *value = NULL;
- dav_error *err;
-
- *inserted = DAV_PROP_INSERT_NOTDEF;
-
- /* fast-path the common case */
- if (propid == DAV_PROPID_CORE_UNKNOWN)
- return NULL;
-
- switch (propid) {
-
- case DAV_PROPID_CORE_lockdiscovery:
- if (propdb->lockdb != NULL) {
- dav_lock *locks;
-
- if ((err = dav_lock_query(propdb->lockdb, propdb->resource,
- &locks)) != NULL) {
- return dav_push_error(propdb->p, err->status, 0,
- "DAV:lockdiscovery could not be "
- "determined due to a problem fetching "
- "the locks for this resource.",
- err);
- }
-
- /* fast-path the no-locks case */
- if (locks == NULL) {
- value = "";
- }
- else {
- /*
- ** This may modify the buffer. value may point to
- ** wb_lock.pbuf or a string constant.
- */
- value = dav_lock_get_activelock(propdb->r, locks,
- &propdb->wb_lock);
-
- /* make a copy to isolate it from changes to wb_lock */
- value = apr_pstrdup(propdb->p, propdb->wb_lock.buf);
- }
- }
- break;
-
- case DAV_PROPID_CORE_supportedlock:
- if (propdb->lockdb != NULL) {
- value = (*propdb->lockdb->hooks->get_supportedlock)(propdb->resource);
- }
- break;
-
- case DAV_PROPID_CORE_getcontenttype:
- if (propdb->subreq == NULL) {
- dav_do_prop_subreq(propdb);
- }
- if (propdb->subreq->content_type != NULL) {
- value = propdb->subreq->content_type;
- }
- break;
-
- case DAV_PROPID_CORE_getcontentlanguage:
- {
- const char *lang;
-
- if (propdb->subreq == NULL) {
- dav_do_prop_subreq(propdb);
- }
- if ((lang = apr_table_get(propdb->subreq->headers_out,
- "Content-Language")) != NULL) {
- value = lang;
- }
- break;
- }
-
- default:
- /* fall through to interpret as a dead property */
- break;
- }
-
- /* if something was supplied, then insert it */
- if (value != NULL) {
- const char *s;
-
- if (what == DAV_PROP_INSERT_SUPPORTED) {
- /* use D: prefix to refer to the DAV: namespace URI,
- * and let the namespace attribute default to "DAV:"
- */
- s = apr_psprintf(propdb->p,
- "<D:supported-live-property D:name=\"%s\"/>" DEBUG_CR,
- name);
- }
- else if (what == DAV_PROP_INSERT_VALUE && *value != '\0') {
- /* use D: prefix to refer to the DAV: namespace URI */
- s = apr_psprintf(propdb->p, "<D:%s>%s</D:%s>" DEBUG_CR,
- name, value, name);
- }
- else {
- /* use D: prefix to refer to the DAV: namespace URI */
- s = apr_psprintf(propdb->p, "<D:%s/>" DEBUG_CR, name);
- }
- apr_text_append(propdb->p, phdr, s);
-
- *inserted = what;
- }
-
- return NULL;
-}
-
-static dav_error * dav_insert_liveprop(dav_propdb *propdb,
- const apr_xml_elem *elem,
- dav_prop_insert what,
- apr_text_header *phdr,
- dav_prop_insert *inserted)
-{
- dav_elem_private *priv = elem->priv;
-
- *inserted = DAV_PROP_INSERT_NOTDEF;
-
- if (priv->provider == NULL) {
- /* this is a "core" property that we define */
- return dav_insert_coreprop(propdb, priv->propid, elem->name,
- what, phdr, inserted);
- }
-
- /* ask the provider (that defined this prop) to insert the prop */
- *inserted = (*priv->provider->insert_prop)(propdb->resource, priv->propid,
- what, phdr);
-
- return NULL;
-}
-
-static void dav_output_prop_name(apr_pool_t *pool,
- const dav_prop_name *name,
- dav_xmlns_info *xi,
- apr_text_header *phdr)
-{
- const char *s;
-
- if (*name->ns == '\0')
- s = apr_psprintf(pool, "<%s/>" DEBUG_CR, name->name);
- else {
- const char *prefix = dav_xmlns_add_uri(xi, name->ns);
-
- s = apr_psprintf(pool, "<%s:%s/>" DEBUG_CR, prefix, name->name);
- }
-
- apr_text_append(pool, phdr, s);
-}
-
-static void dav_insert_xmlns(apr_pool_t *p, const char *pre_prefix, int ns,
- const char *ns_uri, apr_text_header *phdr)
-{
- const char *s;
-
- s = apr_psprintf(p, " xmlns:%s%d=\"%s\"", pre_prefix, ns, ns_uri);
- apr_text_append(p, phdr, s);
-}
-
-static dav_error *dav_really_open_db(dav_propdb *propdb, int ro)
-{
- dav_error *err;
-
- /* we're trying to open the db; turn off the 'deferred' flag */
- propdb->deferred = 0;
-
- /* ask the DB provider to open the thing */
- err = (*propdb->db_hooks->open)(propdb->p, propdb->resource, ro,
- &propdb->db);
- if (err != NULL) {
- return dav_push_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_PROP_OPENING,
- "Could not open the property database.",
- err);
- }
-
- /*
- ** NOTE: propdb->db could be NULL if we attempted to open a readonly
- ** database that doesn't exist. If we require read/write
- ** access, then a database was created and opened.
- */
-
- return NULL;
-}
-
-dav_error *dav_open_propdb(request_rec *r, dav_lockdb *lockdb,
- const dav_resource *resource,
- int ro,
- apr_array_header_t * ns_xlate,
- dav_propdb **p_propdb)
-{
- dav_propdb *propdb = apr_pcalloc(r->pool, sizeof(*propdb));
-
- *p_propdb = NULL;
-
-#if DAV_DEBUG
- if (resource->uri == NULL) {
- return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "INTERNAL DESIGN ERROR: resource must define "
- "its URI.");
- }
-#endif
-
- propdb->r = r;
- apr_pool_create(&propdb->p, r->pool);
- propdb->resource = resource;
- propdb->ns_xlate = ns_xlate;
-
- propdb->db_hooks = DAV_GET_HOOKS_PROPDB(r);
-
- propdb->lockdb = lockdb;
-
- /* always defer actual open, to avoid expense of accessing db
- * when only live properties are involved
- */
- propdb->deferred = 1;
-
- /* ### what to do about closing the propdb on server failure? */
-
- *p_propdb = propdb;
- return NULL;
-}
-
-void dav_close_propdb(dav_propdb *propdb)
-{
- if (propdb->db != NULL) {
- (*propdb->db_hooks->close)(propdb->db);
- }
-
- /* Currently, mod_dav's pool usage doesn't allow clearing this pool. */
-#if 0
- apr_pool_destroy(propdb->p);
-#endif
- return;
-}
-
-dav_get_props_result dav_get_allprops(dav_propdb *propdb, dav_prop_insert what)
-{
- const dav_hooks_db *db_hooks = propdb->db_hooks;
- apr_text_header hdr = { 0 };
- apr_text_header hdr_ns = { 0 };
- dav_get_props_result result = { 0 };
- int found_contenttype = 0;
- int found_contentlang = 0;
- dav_prop_insert unused_inserted;
-
- /* if not just getting supported live properties,
- * scan all properties in the dead prop database
- */
- if (what != DAV_PROP_INSERT_SUPPORTED) {
- if (propdb->deferred) {
- /* ### what to do with db open error? */
- (void) dav_really_open_db(propdb, 1 /*ro*/);
- }
-
- /* initialize the result with some start tags... */
- apr_text_append(propdb->p, &hdr,
- "<D:propstat>" DEBUG_CR
- "<D:prop>" DEBUG_CR);
-
- /* if there ARE properties, then scan them */
- if (propdb->db != NULL) {
- dav_xmlns_info *xi = dav_xmlns_create(propdb->p);
- dav_prop_name name;
-
- /* define (up front) any namespaces the db might need */
- (void) (*db_hooks->define_namespaces)(propdb->db, xi);
-
- /* get the first property name, beginning the scan */
- (void) (*db_hooks->first_name)(propdb->db, &name);
- while (name.ns != NULL) {
-
- /*
- ** We also look for <DAV:getcontenttype> and
- ** <DAV:getcontentlanguage>. If they are not stored as dead
- ** properties, then we need to perform a subrequest to get
- ** their values (if any).
- */
- if (*name.ns == 'D' && strcmp(name.ns, "DAV:") == 0
- && *name.name == 'g') {
- if (strcmp(name.name, "getcontenttype") == 0) {
- found_contenttype = 1;
- }
- else if (strcmp(name.name, "getcontentlanguage") == 0) {
- found_contentlang = 1;
- }
- }
-
- if (what == DAV_PROP_INSERT_VALUE) {
- dav_error *err;
- int found;
-
- if ((err = (*db_hooks->output_value)(propdb->db, &name,
- xi, &hdr,
- &found)) != NULL) {
- /* ### anything better to do? */
- /* ### probably should enter a 500 error */
- goto next_key;
- }
- /* assert: found == 1 */
- }
- else {
- /* the value was not requested, so just add an empty
- tag specifying the property name. */
- dav_output_prop_name(propdb->p, &name, xi, &hdr);
- }
-
- next_key:
- (void) (*db_hooks->next_name)(propdb->db, &name);
- }
-
- /* all namespaces have been entered into xi. generate them into
- the output now. */
- dav_xmlns_generate(xi, &hdr_ns);
-
- } /* propdb->db != NULL */
-
- /* add namespaces for all the liveprop providers */
- dav_add_all_liveprop_xmlns(propdb->p, &hdr_ns);
- }
-
- /* ask the liveprop providers to insert their properties */
- dav_run_insert_all_liveprops(propdb->r, propdb->resource, what, &hdr);
-
- /* insert the standard properties */
- /* ### should be handling the return errors here */
- (void)dav_insert_coreprop(propdb,
- DAV_PROPID_CORE_supportedlock, "supportedlock",
- what, &hdr, &unused_inserted);
- (void)dav_insert_coreprop(propdb,
- DAV_PROPID_CORE_lockdiscovery, "lockdiscovery",
- what, &hdr, &unused_inserted);
-
- /* if we didn't find these, then do the whole subreq thing. */
- if (!found_contenttype) {
- /* ### should be handling the return error here */
- (void)dav_insert_coreprop(propdb,
- DAV_PROPID_CORE_getcontenttype,
- "getcontenttype",
- what, &hdr, &unused_inserted);
- }
- if (!found_contentlang) {
- /* ### should be handling the return error here */
- (void)dav_insert_coreprop(propdb,
- DAV_PROPID_CORE_getcontentlanguage,
- "getcontentlanguage",
- what, &hdr, &unused_inserted);
- }
-
- /* if not just reporting on supported live props,
- * terminate the result */
- if (what != DAV_PROP_INSERT_SUPPORTED) {
- apr_text_append(propdb->p, &hdr,
- "</D:prop>" DEBUG_CR
- "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
- "</D:propstat>" DEBUG_CR);
- }
-
- result.propstats = hdr.first;
- result.xmlns = hdr_ns.first;
- return result;
-}
-
-dav_get_props_result dav_get_props(dav_propdb *propdb, apr_xml_doc *doc)
-{
- const dav_hooks_db *db_hooks = propdb->db_hooks;
- apr_xml_elem *elem = dav_find_child(doc->root, "prop");
- apr_text_header hdr_good = { 0 };
- apr_text_header hdr_bad = { 0 };
- apr_text_header hdr_ns = { 0 };
- int have_good = 0;
- dav_get_props_result result = { 0 };
- char *marks_liveprop;
- dav_xmlns_info *xi;
- int xi_filled = 0;
-
- /* ### NOTE: we should pass in TWO buffers -- one for keys, one for
- the marks */
-
- /* we will ALWAYS provide a "good" result, even if it is EMPTY */
- apr_text_append(propdb->p, &hdr_good,
- "<D:propstat>" DEBUG_CR
- "<D:prop>" DEBUG_CR);
-
- /* ### the marks should be in a buffer! */
- /* allocate zeroed-memory for the marks. These marks indicate which
- liveprop namespaces we've generated into the output xmlns buffer */
-
- /* same for the liveprops */
- marks_liveprop = apr_pcalloc(propdb->p, dav_get_liveprop_ns_count() + 1);
-
- xi = dav_xmlns_create(propdb->p);
-
- for (elem = elem->first_child; elem; elem = elem->next) {
- dav_elem_private *priv;
- dav_error *err;
- dav_prop_insert inserted;
- dav_prop_name name;
-
- /*
- ** First try live property providers; if they don't handle
- ** the property, then try looking it up in the propdb.
- */
-
- if (elem->priv == NULL) {
- elem->priv = apr_pcalloc(propdb->p, sizeof(*priv));
- }
- priv = elem->priv;
-
- /* cache the propid; dav_get_props() could be called many times */
- if (priv->propid == 0)
- dav_find_liveprop(propdb, elem);
-
- if (priv->propid != DAV_PROPID_CORE_UNKNOWN) {
-
- /* insert the property. returns 1 if an insertion was done. */
- if ((err = dav_insert_liveprop(propdb, elem, DAV_PROP_INSERT_VALUE,
- &hdr_good, &inserted)) != NULL) {
- /* ### need to propagate the error to the caller... */
- /* ### skip it for now, as if nothing was inserted */
- }
- if (inserted == DAV_PROP_INSERT_VALUE) {
- have_good = 1;
-
- /*
- ** Add the liveprop's namespace URIs. Note that provider==NULL
- ** for core properties.
- */
- if (priv->provider != NULL) {
- const char * const * scan_ns_uri;
-
- for (scan_ns_uri = priv->provider->namespace_uris;
- *scan_ns_uri != NULL;
- ++scan_ns_uri) {
- int ns;
-
- ns = dav_get_liveprop_ns_index(*scan_ns_uri);
- if (marks_liveprop[ns])
- continue;
- marks_liveprop[ns] = 1;
-
- dav_insert_xmlns(propdb->p, "lp", ns, *scan_ns_uri,
- &hdr_ns);
- }
- }
-
- /* property added. move on to the next property. */
- continue;
- }
- else if (inserted == DAV_PROP_INSERT_NOTDEF) {
- /* nothing to do. fall thru to allow property to be handled
- as a dead property */
- }
-#if DAV_DEBUG
- else {
-#if 0
- /* ### need to change signature to return an error */
- return dav_new_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "INTERNAL DESIGN ERROR: insert_liveprop "
- "did not insert what was asked for.");
-#endif
- }
-#endif
- }
-
- /* The property wasn't a live property, so look in the dead property
- database. */
-
- /* make sure propdb is really open */
- if (propdb->deferred) {
- /* ### what to do with db open error? */
- (void) dav_really_open_db(propdb, 1 /*ro*/);
- }
-
- if (elem->ns == APR_XML_NS_NONE)
- name.ns = "";
- else
- name.ns = APR_XML_GET_URI_ITEM(propdb->ns_xlate, elem->ns);
- name.name = elem->name;
-
- /* only bother to look if a database exists */
- if (propdb->db != NULL) {
- int found;
-
- if ((err = (*db_hooks->output_value)(propdb->db, &name,
- xi, &hdr_good,
- &found)) != NULL) {
- /* ### what to do? continue doesn't seem right... */
- continue;
- }
-
- if (found) {
- have_good = 1;
-
- /* if we haven't added the db's namespaces, then do so... */
- if (!xi_filled) {
- (void) (*db_hooks->define_namespaces)(propdb->db, xi);
- xi_filled = 1;
- }
- continue;
- }
- }
-
- /* not found as a live OR dead property. add a record to the "bad"
- propstats */
-
- /* make sure we've started our "bad" propstat */
- if (hdr_bad.first == NULL) {
- apr_text_append(propdb->p, &hdr_bad,
- "<D:propstat>" DEBUG_CR
- "<D:prop>" DEBUG_CR);
- }
-
- /* output this property's name (into the bad propstats) */
- dav_output_prop_name(propdb->p, &name, xi, &hdr_bad);
- }
-
- apr_text_append(propdb->p, &hdr_good,
- "</D:prop>" DEBUG_CR
- "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
- "</D:propstat>" DEBUG_CR);
-
- /* default to start with the good */
- result.propstats = hdr_good.first;
-
- /* we may not have any "bad" results */
- if (hdr_bad.first != NULL) {
- /* "close" the bad propstat */
- apr_text_append(propdb->p, &hdr_bad,
- "</D:prop>" DEBUG_CR
- "<D:status>HTTP/1.1 404 Not Found</D:status>" DEBUG_CR
- "</D:propstat>" DEBUG_CR);
-
- /* if there are no good props, then just return the bad */
- if (!have_good) {
- result.propstats = hdr_bad.first;
- }
- else {
- /* hook the bad propstat to the end of the good one */
- hdr_good.last->next = hdr_bad.first;
- }
- }
-
- /* add in all the various namespaces, and return them */
- dav_xmlns_generate(xi, &hdr_ns);
- result.xmlns = hdr_ns.first;
-
- return result;
-}
-
-void dav_get_liveprop_supported(dav_propdb *propdb,
- const char *ns_uri,
- const char *propname,
- apr_text_header *body)
-{
- int propid;
- const dav_hooks_liveprop *hooks;
-
- propid = dav_find_liveprop_provider(propdb, ns_uri, propname, &hooks);
-
- if (propid != DAV_PROPID_CORE_UNKNOWN) {
- if (hooks == NULL) {
- /* this is a "core" property that we define */
- dav_prop_insert unused_inserted;
- dav_insert_coreprop(propdb, propid, propname,
- DAV_PROP_INSERT_SUPPORTED, body, &unused_inserted);
- }
- else {
- (*hooks->insert_prop)(propdb->resource, propid,
- DAV_PROP_INSERT_SUPPORTED, body);
- }
- }
-}
-
-void dav_prop_validate(dav_prop_ctx *ctx)
-{
- dav_propdb *propdb = ctx->propdb;
- apr_xml_elem *prop = ctx->prop;
- dav_elem_private *priv;
-
- priv = ctx->prop->priv = apr_pcalloc(propdb->p, sizeof(*priv));
-
- /*
- ** Check to see if this is a live property, and fill the fields
- ** in the XML elem, as appropriate.
- **
- ** Verify that the property is read/write. If not, then it cannot
- ** be SET or DELETEd.
- */
- if (priv->propid == 0) {
- dav_find_liveprop(propdb, prop);
-
- /* it's a liveprop if a provider was found */
- /* ### actually the "core" props should really be liveprops, but
- ### there is no "provider" for those and the r/w props are
- ### treated as dead props anyhow */
- ctx->is_liveprop = priv->provider != NULL;
- }
-
- if (!dav_rw_liveprop(propdb, priv)) {
- ctx->err = dav_new_error(propdb->p, HTTP_CONFLICT,
- DAV_ERR_PROP_READONLY,
- "Property is read-only.");
- return;
- }
-
- if (ctx->is_liveprop) {
- int defer_to_dead = 0;
-
- ctx->err = (*priv->provider->patch_validate)(propdb->resource,
- prop, ctx->operation,
- &ctx->liveprop_ctx,
- &defer_to_dead);
- if (ctx->err != NULL || !defer_to_dead)
- return;
-
- /* clear is_liveprop -- act as a dead prop now */
- ctx->is_liveprop = 0;
- }
-
- /*
- ** The property is supposed to be stored into the dead-property
- ** database. Make sure the thing is truly open (and writable).
- */
- if (propdb->deferred
- && (ctx->err = dav_really_open_db(propdb, 0 /* ro */)) != NULL) {
- return;
- }
-
- /*
- ** There should be an open, writable database in here!
- **
- ** Note: the database would be NULL if it was opened readonly and it
- ** did not exist.
- */
- if (propdb->db == NULL) {
- ctx->err = dav_new_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_PROP_NO_DATABASE,
- "Attempted to set/remove a property "
- "without a valid, open, read/write "
- "property database.");
- return;
- }
-
- if (ctx->operation == DAV_PROP_OP_SET) {
- /*
- ** Prep the element => propdb namespace index mapping, inserting
- ** namespace URIs into the propdb that don't exist.
- */
- (void) (*propdb->db_hooks->map_namespaces)(propdb->db,
- propdb->ns_xlate,
- &propdb->mapping);
- }
- else if (ctx->operation == DAV_PROP_OP_DELETE) {
- /*
- ** There are no checks to perform here. If a property exists, then
- ** we will delete it. If it does not exist, then it does not matter
- ** (see S12.13.1).
- **
- ** Note that if a property does not exist, that does not rule out
- ** that a SET will occur during this PROPPATCH (thusly creating it).
- */
- }
-}
-
-void dav_prop_exec(dav_prop_ctx *ctx)
-{
- dav_propdb *propdb = ctx->propdb;
- dav_error *err = NULL;
- dav_elem_private *priv = ctx->prop->priv;
-
- ctx->rollback = apr_pcalloc(propdb->p, sizeof(*ctx->rollback));
-
- if (ctx->is_liveprop) {
- err = (*priv->provider->patch_exec)(propdb->resource,
- ctx->prop, ctx->operation,
- ctx->liveprop_ctx,
- &ctx->rollback->liveprop);
- }
- else {
- dav_prop_name name;
-
- if (ctx->prop->ns == APR_XML_NS_NONE)
- name.ns = "";
- else
- name.ns = APR_XML_GET_URI_ITEM(propdb->ns_xlate, ctx->prop->ns);
- name.name = ctx->prop->name;
-
- /* save the old value so that we can do a rollback. */
- if ((err = (*propdb->db_hooks
- ->get_rollback)(propdb->db, &name,
- &ctx->rollback->deadprop)) != NULL)
- goto error;
-
- if (ctx->operation == DAV_PROP_OP_SET) {
-
- /* Note: propdb->mapping was set in dav_prop_validate() */
- err = (*propdb->db_hooks->store)(propdb->db, &name, ctx->prop,
- propdb->mapping);
-
- /*
- ** If an error occurred, then assume that we didn't change the
- ** value. Remove the rollback item so that we don't try to set
- ** its value during the rollback.
- */
- /* ### euh... where is the removal? */
- }
- else if (ctx->operation == DAV_PROP_OP_DELETE) {
-
- /*
- ** Delete the property. Ignore errors -- the property is there, or
- ** we are deleting it for a second time.
- */
- /* ### but what about other errors? */
- (void) (*propdb->db_hooks->remove)(propdb->db, &name);
- }
- }
-
- error:
- /* push a more specific error here */
- if (err != NULL) {
- /*
- ** Use HTTP_INTERNAL_SERVER_ERROR because we shouldn't have seen
- ** any errors at this point.
- */
- ctx->err = dav_push_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR,
- DAV_ERR_PROP_EXEC,
- "Could not execute PROPPATCH.", err);
- }
-}
-
-void dav_prop_commit(dav_prop_ctx *ctx)
-{
- dav_elem_private *priv = ctx->prop->priv;
-
- /*
- ** Note that a commit implies ctx->err is NULL. The caller should assume
- ** a status of HTTP_OK for this case.
- */
-
- if (ctx->is_liveprop) {
- (*priv->provider->patch_commit)(ctx->propdb->resource,
- ctx->operation,
- ctx->liveprop_ctx,
- ctx->rollback->liveprop);
- }
-}
-
-void dav_prop_rollback(dav_prop_ctx *ctx)
-{
- dav_error *err = NULL;
- dav_elem_private *priv = ctx->prop->priv;
-
- /* do nothing if there is no rollback information. */
- if (ctx->rollback == NULL)
- return;
-
- /*
- ** ### if we have an error, and a rollback occurs, then the namespace
- ** ### mods should not happen at all. Basically, the namespace management
- ** ### is simply a bitch.
- */
-
- if (ctx->is_liveprop) {
- err = (*priv->provider->patch_rollback)(ctx->propdb->resource,
- ctx->operation,
- ctx->liveprop_ctx,
- ctx->rollback->liveprop);
- }
- else {
- err = (*ctx->propdb->db_hooks
- ->apply_rollback)(ctx->propdb->db, ctx->rollback->deadprop);
- }
-
- if (err != NULL) {
- if (ctx->err == NULL)
- ctx->err = err;
- else {
- dav_error *scan = err;
-
- /* hook previous errors at the end of the rollback error */
- while (scan->prev != NULL)
- scan = scan->prev;
- scan->prev = ctx->err;
- ctx->err = err;
- }
- }
-}
diff --git a/modules/dav/main/providers.c b/modules/dav/main/providers.c
deleted file mode 100644
index 8a0d411971..0000000000
--- a/modules/dav/main/providers.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_pools.h"
-#include "apr_hash.h"
-#include "ap_provider.h"
-#include "mod_dav.h"
-
-#define DAV_PROVIDER_GROUP "dav"
-
-DAV_DECLARE(void) dav_register_provider(apr_pool_t *p, const char *name,
- const dav_provider *provider)
-{
- ap_register_provider(p, DAV_PROVIDER_GROUP, name, "0", provider);
-}
-
-const dav_provider * dav_lookup_provider(const char *name)
-{
- return ap_lookup_provider(DAV_PROVIDER_GROUP, name, "0");
-}
diff --git a/modules/dav/main/std_liveprop.c b/modules/dav/main/std_liveprop.c
deleted file mode 100644
index d19e142aa9..0000000000
--- a/modules/dav/main/std_liveprop.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "util_xml.h"
-#include "apr_strings.h"
-
-#include "mod_dav.h"
-
-/* forward-declare */
-static const dav_hooks_liveprop dav_core_hooks_liveprop;
-
-/*
-** The namespace URIs that we use. There will only ever be "DAV:".
-*/
-static const char * const dav_core_namespace_uris[] =
-{
- "DAV:",
- NULL /* sentinel */
-};
-
-/*
-** Define each of the core properties that this provider will handle.
-** Note that all of them are in the DAV: namespace, which has a
-** provider-local index of 0.
-*/
-static const dav_liveprop_spec dav_core_props[] =
-{
- { 0, "comment", DAV_PROPID_comment, 1 },
- { 0, "creator-displayname", DAV_PROPID_creator_displayname, 1 },
- { 0, "displayname", DAV_PROPID_displayname, 1 },
- { 0, "resourcetype", DAV_PROPID_resourcetype, 0 },
- { 0, "source", DAV_PROPID_source, 1 },
-
- { 0 } /* sentinel */
-};
-
-static const dav_liveprop_group dav_core_liveprop_group =
-{
- dav_core_props,
- dav_core_namespace_uris,
- &dav_core_hooks_liveprop
-};
-
-static dav_prop_insert dav_core_insert_prop(const dav_resource *resource,
- int propid, dav_prop_insert what,
- apr_text_header *phdr)
-{
- const char *value;
- const char *s;
- apr_pool_t *p = resource->pool;
- const dav_liveprop_spec *info;
- int global_ns;
-
- switch (propid)
- {
- case DAV_PROPID_resourcetype:
- switch (resource->type) {
- case DAV_RESOURCE_TYPE_VERSION:
- if (resource->baselined) {
- value = "<D:baseline/>";
- break;
- }
- /* fall through */
- case DAV_RESOURCE_TYPE_REGULAR:
- case DAV_RESOURCE_TYPE_WORKING:
- if (resource->collection) {
- value = "<D:collection/>";
- }
- else {
- /* ### should we denote lock-null resources? */
-
- value = ""; /* becomes: <D:resourcetype/> */
- }
- break;
- case DAV_RESOURCE_TYPE_HISTORY:
- value = "<D:version-history/>";
- break;
- case DAV_RESOURCE_TYPE_WORKSPACE:
- value = "<D:collection/>";
- break;
- case DAV_RESOURCE_TYPE_ACTIVITY:
- value = "<D:activity/>";
- break;
-
- default:
- /* ### bad juju */
- return DAV_PROP_INSERT_NOTDEF;
- }
- break;
-
- case DAV_PROPID_comment:
- case DAV_PROPID_creator_displayname:
- case DAV_PROPID_displayname:
- case DAV_PROPID_source:
- default:
- /*
- ** This property is known, but not defined as a liveprop. However,
- ** it may be a dead property.
- */
- return DAV_PROP_INSERT_NOTDEF;
- }
-
- /* assert: value != NULL */
-
- /* get the information and global NS index for the property */
- global_ns = dav_get_liveprop_info(propid, &dav_core_liveprop_group, &info);
-
- /* assert: info != NULL && info->name != NULL */
-
- if (what == DAV_PROP_INSERT_SUPPORTED) {
- s = apr_psprintf(p,
- "<D:supported-live-property D:name=\"%s\" "
- "D:namespace=\"%s\"/>" DEBUG_CR,
- info->name, dav_core_namespace_uris[info->ns]);
- }
- else if (what == DAV_PROP_INSERT_VALUE && *value != '\0') {
- s = apr_psprintf(p, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
- global_ns, info->name, value, global_ns, info->name);
- }
- else {
- s = apr_psprintf(p, "<lp%d:%s/>" DEBUG_CR, global_ns, info->name);
- }
- apr_text_append(p, phdr, s);
-
- /* we inserted what was asked for */
- return what;
-}
-
-static int dav_core_is_writable(const dav_resource *resource, int propid)
-{
- const dav_liveprop_spec *info;
-
- (void) dav_get_liveprop_info(propid, &dav_core_liveprop_group, &info);
- return info->is_writable;
-}
-
-static dav_error * dav_core_patch_validate(const dav_resource *resource,
- const apr_xml_elem *elem,
- int operation, void **context,
- int *defer_to_dead)
-{
- /* all of our writable props go in the dead prop database */
- *defer_to_dead = 1;
-
- return NULL;
-}
-
-static const dav_hooks_liveprop dav_core_hooks_liveprop = {
- dav_core_insert_prop,
- dav_core_is_writable,
- dav_core_namespace_uris,
- dav_core_patch_validate,
- NULL, /* patch_exec */
- NULL, /* patch_commit */
- NULL, /* patch_rollback */
-};
-
-int dav_core_find_liveprop(const dav_resource *resource,
- const char *ns_uri, const char *name,
- const dav_hooks_liveprop **hooks)
-{
- return dav_do_find_liveprop(ns_uri, name, &dav_core_liveprop_group, hooks);
-}
-
-void dav_core_insert_all_liveprops(request_rec *r,
- const dav_resource *resource,
- dav_prop_insert what, apr_text_header *phdr)
-{
- (void) dav_core_insert_prop(resource, DAV_PROPID_resourcetype,
- what, phdr);
-}
-
-void dav_core_register_uris(apr_pool_t *p)
-{
- /* register the namespace URIs */
- dav_register_liveprop_group(p, &dav_core_liveprop_group);
-}
diff --git a/modules/dav/main/util.c b/modules/dav/main/util.c
deleted file mode 100644
index 7919d62abf..0000000000
--- a/modules/dav/main/util.c
+++ /dev/null
@@ -1,2033 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-** - various utilities, repository-independent
-*/
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "mod_dav.h"
-
-#include "http_request.h"
-#include "http_config.h"
-#include "http_vhost.h"
-#include "http_log.h"
-#include "http_protocol.h"
-
-DAV_DECLARE(dav_error*) dav_new_error(apr_pool_t *p, int status,
- int error_id, const char *desc)
-{
- int save_errno = errno;
- dav_error *err = apr_pcalloc(p, sizeof(*err));
-
- /* DBG3("dav_new_error: %d %d %s", status, error_id, desc ? desc : "(no desc)"); */
-
- err->status = status;
- err->error_id = error_id;
- err->desc = desc;
- err->save_errno = save_errno;
-
- return err;
-}
-
-DAV_DECLARE(dav_error*) dav_new_error_tag(apr_pool_t *p, int status,
- int error_id, const char *desc,
- const char *namespace,
- const char *tagname)
-{
- dav_error *err = dav_new_error(p, status, error_id, desc);
-
- err->tagname = tagname;
- err->namespace = namespace;
-
- return err;
-}
-
-
-DAV_DECLARE(dav_error*) dav_push_error(apr_pool_t *p, int status,
- int error_id, const char *desc,
- dav_error *prev)
-{
- dav_error *err = apr_pcalloc(p, sizeof(*err));
-
- err->status = status;
- err->error_id = error_id;
- err->desc = desc;
- err->prev = prev;
-
- return err;
-}
-
-DAV_DECLARE(void) dav_check_bufsize(apr_pool_t * p, dav_buffer *pbuf,
- apr_size_t extra_needed)
-{
- /* grow the buffer if necessary */
- if (pbuf->cur_len + extra_needed > pbuf->alloc_len) {
- char *newbuf;
-
- pbuf->alloc_len += extra_needed + DAV_BUFFER_PAD;
- newbuf = apr_palloc(p, pbuf->alloc_len);
- memcpy(newbuf, pbuf->buf, pbuf->cur_len);
- pbuf->buf = newbuf;
- }
-}
-
-DAV_DECLARE(void) dav_set_bufsize(apr_pool_t * p, dav_buffer *pbuf,
- apr_size_t size)
-{
- /* NOTE: this does not retain prior contents */
-
- /* NOTE: this function is used to init the first pointer, too, since
- the PAD will be larger than alloc_len (0) for zeroed structures */
-
- /* grow if we don't have enough for the requested size plus padding */
- if (size + DAV_BUFFER_PAD > pbuf->alloc_len) {
- /* set the new length; min of MINSIZE */
- pbuf->alloc_len = size + DAV_BUFFER_PAD;
- if (pbuf->alloc_len < DAV_BUFFER_MINSIZE)
- pbuf->alloc_len = DAV_BUFFER_MINSIZE;
-
- pbuf->buf = apr_palloc(p, pbuf->alloc_len);
- }
- pbuf->cur_len = size;
-}
-
-
-/* initialize a buffer and copy the specified (null-term'd) string into it */
-DAV_DECLARE(void) dav_buffer_init(apr_pool_t *p, dav_buffer *pbuf,
- const char *str)
-{
- dav_set_bufsize(p, pbuf, strlen(str));
- memcpy(pbuf->buf, str, pbuf->cur_len + 1);
-}
-
-/* append a string to the end of the buffer, adjust length */
-DAV_DECLARE(void) dav_buffer_append(apr_pool_t *p, dav_buffer *pbuf,
- const char *str)
-{
- apr_size_t len = strlen(str);
-
- dav_check_bufsize(p, pbuf, len + 1);
- memcpy(pbuf->buf + pbuf->cur_len, str, len + 1);
- pbuf->cur_len += len;
-}
-
-/* place a string on the end of the buffer, do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place(apr_pool_t *p, dav_buffer *pbuf,
- const char *str)
-{
- apr_size_t len = strlen(str);
-
- dav_check_bufsize(p, pbuf, len + 1);
- memcpy(pbuf->buf + pbuf->cur_len, str, len + 1);
-}
-
-/* place some memory on the end of a buffer; do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place_mem(apr_pool_t *p, dav_buffer *pbuf,
- const void *mem, apr_size_t amt,
- apr_size_t pad)
-{
- dav_check_bufsize(p, pbuf, amt + pad);
- memcpy(pbuf->buf + pbuf->cur_len, mem, amt);
-}
-
-/*
-** dav_lookup_uri()
-**
-** Extension for ap_sub_req_lookup_uri() which can't handle absolute
-** URIs properly.
-**
-** If NULL is returned, then an error occurred with parsing the URI or
-** the URI does not match the current server.
-*/
-dav_lookup_result dav_lookup_uri(const char *uri, request_rec * r,
- int must_be_absolute)
-{
- dav_lookup_result result = { 0 };
- const char *scheme;
- apr_port_t port;
- apr_uri_t comp;
- char *new_file;
- const char *domain;
-
- /* first thing to do is parse the URI into various components */
- if (apr_uri_parse(r->pool, uri, &comp) != APR_SUCCESS) {
- result.err.status = HTTP_BAD_REQUEST;
- result.err.desc = "Invalid syntax in Destination URI.";
- return result;
- }
-
- /* the URI must be an absoluteURI (WEBDAV S9.3) */
- if (comp.scheme == NULL && must_be_absolute) {
- result.err.status = HTTP_BAD_REQUEST;
- result.err.desc = "Destination URI must be an absolute URI.";
- return result;
- }
-
- /* the URI must not have a query (args) or a fragment */
- if (comp.query != NULL || comp.fragment != NULL) {
- result.err.status = HTTP_BAD_REQUEST;
- result.err.desc =
- "Destination URI contains invalid components "
- "(a query or a fragment).";
- return result;
- }
-
- /* If the scheme or port was provided, then make sure that it matches
- the scheme/port of this request. If the request must be absolute,
- then require the (explicit/implicit) scheme/port be matching.
-
- ### hmm. if a port wasn't provided (does the parse return port==0?),
- ### but we're on a non-standard port, then we won't detect that the
- ### URI's port implies the wrong one.
- */
- if (comp.scheme != NULL || comp.port != 0 || must_be_absolute)
- {
- /* ### not sure this works if the current request came in via https: */
- scheme = r->parsed_uri.scheme;
- if (scheme == NULL)
- scheme = ap_http_method(r);
-
- /* insert a port if the URI did not contain one */
- if (comp.port == 0)
- comp.port = apr_uri_port_of_scheme(comp.scheme);
-
- /* now, verify that the URI uses the same scheme as the current.
- request. the port must match our port.
- */
- port = r->connection->local_addr->port;
- if (strcasecmp(comp.scheme, scheme) != 0
-#ifdef APACHE_PORT_HANDLING_IS_BUSTED
- || comp.port != port
-#endif
- ) {
- result.err.status = HTTP_BAD_GATEWAY;
- result.err.desc = apr_psprintf(r->pool,
- "Destination URI refers to "
- "different scheme or port "
- "(%s://hostname:%d)" APR_EOL_STR
- "(want: %s://hostname:%d)",
- comp.scheme ? comp.scheme : scheme,
- comp.port ? comp.port : port,
- scheme, port);
- return result;
- }
- }
-
- /* we have verified the scheme, port, and general structure */
-
- /*
- ** Hrm. IE5 will pass unqualified hostnames for both the
- ** Host: and Destination: headers. This breaks the
- ** http_vhost.c::matches_aliases function.
- **
- ** For now, qualify unqualified comp.hostnames with
- ** r->server->server_hostname.
- **
- ** ### this is a big hack. Apache should provide a better way.
- ** ### maybe the admin should list the unqualified hosts in a
- ** ### <ServerAlias> block?
- */
- if (comp.hostname != NULL
- && strrchr(comp.hostname, '.') == NULL
- && (domain = strchr(r->server->server_hostname, '.')) != NULL) {
- comp.hostname = apr_pstrcat(r->pool, comp.hostname, domain, NULL);
- }
-
- /* now, if a hostname was provided, then verify that it represents the
- same server as the current connection. note that we just use our
- port, since we've verified the URI matches ours */
-#ifdef APACHE_PORT_HANDLING_IS_BUSTED
- if (comp.hostname != NULL &&
- !ap_matches_request_vhost(r, comp.hostname, port)) {
- result.err.status = HTTP_BAD_GATEWAY;
- result.err.desc = "Destination URI refers to a different server.";
- return result;
- }
-#endif
-
- /* we have verified that the requested URI denotes the same server as
- the current request. Therefore, we can use ap_sub_req_lookup_uri() */
-
- /* reconstruct a URI as just the path */
- new_file = apr_uri_unparse(r->pool, &comp, APR_URI_UNP_OMITSITEPART);
-
- /*
- * Lookup the URI and return the sub-request. Note that we use the
- * same HTTP method on the destination. This allows the destination
- * to apply appropriate restrictions (e.g. readonly).
- */
- result.rnew = ap_sub_req_method_uri(r->method, new_file, r, NULL);
-
- return result;
-}
-
-/* ---------------------------------------------------------------
-**
-** XML UTILITY FUNCTIONS
-*/
-
-/* validate that the root element uses a given DAV: tagname (TRUE==valid) */
-int dav_validate_root(const apr_xml_doc *doc, const char *tagname)
-{
- return doc->root &&
- doc->root->ns == APR_XML_NS_DAV_ID &&
- strcmp(doc->root->name, tagname) == 0;
-}
-
-/* find and return the (unique) child with a given DAV: tagname */
-apr_xml_elem *dav_find_child(const apr_xml_elem *elem, const char *tagname)
-{
- apr_xml_elem *child = elem->first_child;
-
- for (; child; child = child->next)
- if (child->ns == APR_XML_NS_DAV_ID && !strcmp(child->name, tagname))
- return child;
- return NULL;
-}
-
-/* gather up all the CDATA into a single string */
-DAV_DECLARE(const char *) dav_xml_get_cdata(const apr_xml_elem *elem, apr_pool_t *pool,
- int strip_white)
-{
- apr_size_t len = 0;
- apr_text *scan;
- const apr_xml_elem *child;
- char *cdata;
- char *s;
- apr_size_t tlen;
- const char *found_text = NULL; /* initialize to avoid gcc warning */
- int found_count = 0;
-
- for (scan = elem->first_cdata.first; scan != NULL; scan = scan->next) {
- found_text = scan->text;
- ++found_count;
- len += strlen(found_text);
- }
-
- for (child = elem->first_child; child != NULL; child = child->next) {
- for (scan = child->following_cdata.first;
- scan != NULL;
- scan = scan->next) {
- found_text = scan->text;
- ++found_count;
- len += strlen(found_text);
- }
- }
-
- /* some fast-path cases:
- * 1) zero-length cdata
- * 2) a single piece of cdata with no whitespace to strip
- */
- if (len == 0)
- return "";
- if (found_count == 1) {
- if (!strip_white
- || (!apr_isspace(*found_text)
- && !apr_isspace(found_text[len - 1])))
- return found_text;
- }
-
- cdata = s = apr_palloc(pool, len + 1);
-
- for (scan = elem->first_cdata.first; scan != NULL; scan = scan->next) {
- tlen = strlen(scan->text);
- memcpy(s, scan->text, tlen);
- s += tlen;
- }
-
- for (child = elem->first_child; child != NULL; child = child->next) {
- for (scan = child->following_cdata.first;
- scan != NULL;
- scan = scan->next) {
- tlen = strlen(scan->text);
- memcpy(s, scan->text, tlen);
- s += tlen;
- }
- }
-
- *s = '\0';
-
- if (strip_white) {
- /* trim leading whitespace */
- while (apr_isspace(*cdata)) /* assume: return false for '\0' */
- ++cdata;
-
- /* trim trailing whitespace */
- while (len-- > 0 && apr_isspace(cdata[len]))
- continue;
- cdata[len + 1] = '\0';
- }
-
- return cdata;
-}
-
-DAV_DECLARE(dav_xmlns_info *) dav_xmlns_create(apr_pool_t *pool)
-{
- dav_xmlns_info *xi = apr_pcalloc(pool, sizeof(*xi));
-
- xi->pool = pool;
- xi->uri_prefix = apr_hash_make(pool);
- xi->prefix_uri = apr_hash_make(pool);
-
- return xi;
-}
-
-DAV_DECLARE(void) dav_xmlns_add(dav_xmlns_info *xi,
- const char *prefix, const char *uri)
-{
- /* this "should" not overwrite a prefix mapping */
- apr_hash_set(xi->prefix_uri, prefix, APR_HASH_KEY_STRING, uri);
-
- /* note: this may overwrite an existing URI->prefix mapping, but it
- doesn't matter -- any prefix is usuable to specify the URI. */
- apr_hash_set(xi->uri_prefix, uri, APR_HASH_KEY_STRING, prefix);
-}
-
-DAV_DECLARE(const char *) dav_xmlns_add_uri(dav_xmlns_info *xi,
- const char *uri)
-{
- const char *prefix;
-
- if ((prefix = apr_hash_get(xi->uri_prefix, uri,
- APR_HASH_KEY_STRING)) != NULL)
- return prefix;
-
- prefix = apr_psprintf(xi->pool, "g%d", xi->count++);
- dav_xmlns_add(xi, prefix, uri);
- return prefix;
-}
-
-DAV_DECLARE(const char *) dav_xmlns_get_uri(dav_xmlns_info *xi,
- const char *prefix)
-{
- return apr_hash_get(xi->prefix_uri, prefix, APR_HASH_KEY_STRING);
-}
-
-DAV_DECLARE(const char *) dav_xmlns_get_prefix(dav_xmlns_info *xi,
- const char *uri)
-{
- return apr_hash_get(xi->uri_prefix, uri, APR_HASH_KEY_STRING);
-}
-
-DAV_DECLARE(void) dav_xmlns_generate(dav_xmlns_info *xi,
- apr_text_header *phdr)
-{
- apr_hash_index_t *hi = apr_hash_first(xi->pool, xi->prefix_uri);
-
- for (; hi != NULL; hi = apr_hash_next(hi)) {
- const void *prefix;
- void *uri;
- const char *s;
-
- apr_hash_this(hi, &prefix, NULL, &uri);
-
- s = apr_psprintf(xi->pool, " xmlns:%s=\"%s\"",
- (const char *)prefix, (const char *)uri);
- apr_text_append(xi->pool, phdr, s);
- }
-}
-
-/* ---------------------------------------------------------------
-**
-** Timeout header processing
-**
-*/
-
-/* dav_get_timeout: If the Timeout: header exists, return a time_t
- * when this lock is expected to expire. Otherwise, return
- * a time_t of DAV_TIMEOUT_INFINITE.
- *
- * It's unclear if DAV clients are required to understand
- * Seconds-xxx and Infinity time values. We assume that they do.
- * In addition, for now, that's all we understand, too.
- */
-time_t dav_get_timeout(request_rec *r)
-{
- time_t now, expires = DAV_TIMEOUT_INFINITE;
-
- const char *timeout_const = apr_table_get(r->headers_in, "Timeout");
- const char *timeout = apr_pstrdup(r->pool, timeout_const), *val;
-
- if (timeout == NULL)
- return DAV_TIMEOUT_INFINITE;
-
- /* Use the first thing we understand, or infinity if
- * we don't understand anything.
- */
-
- while ((val = ap_getword_white(r->pool, &timeout)) && strlen(val)) {
- if (!strncmp(val, "Infinite", 8)) {
- return DAV_TIMEOUT_INFINITE;
- }
-
- if (!strncmp(val, "Second-", 7)) {
- val += 7;
- /* ### We need to handle overflow better:
- * ### timeout will be <= 2^32 - 1
- */
- expires = atol(val);
- now = time(NULL);
- return now + expires;
- }
- }
-
- return DAV_TIMEOUT_INFINITE;
-}
-
-/* ---------------------------------------------------------------
-**
-** If Header processing
-**
-*/
-
-/* add_if_resource returns a new if_header, linking it to next_ih.
- */
-static dav_if_header *dav_add_if_resource(apr_pool_t *p, dav_if_header *next_ih,
- const char *uri, apr_size_t uri_len)
-{
- dav_if_header *ih;
-
- if ((ih = apr_pcalloc(p, sizeof(*ih))) == NULL)
- return NULL;
-
- ih->uri = uri;
- ih->uri_len = uri_len;
- ih->next = next_ih;
-
- return ih;
-}
-
-/* add_if_state adds a condition to an if_header.
- */
-static dav_error * dav_add_if_state(apr_pool_t *p, dav_if_header *ih,
- const char *state_token,
- dav_if_state_type t, int condition,
- const dav_hooks_locks *locks_hooks)
-{
- dav_if_state_list *new_sl;
-
- new_sl = apr_pcalloc(p, sizeof(*new_sl));
-
- new_sl->condition = condition;
- new_sl->type = t;
-
- if (t == dav_if_opaquelock) {
- dav_error *err;
-
- if ((err = (*locks_hooks->parse_locktoken)(p, state_token,
- &new_sl->locktoken)) != NULL) {
- /* In cases where the state token is invalid, we'll just skip
- * it rather than return 400.
- */
- if (err->error_id == DAV_ERR_LOCK_UNK_STATE_TOKEN) {
- return NULL;
- }
- else {
- /* ### maybe add a higher-level description */
- return err;
- }
- }
- }
- else
- new_sl->etag = state_token;
-
- new_sl->next = ih->state;
- ih->state = new_sl;
-
- return NULL;
-}
-
-/* fetch_next_token returns the substring from str+1
- * to the next occurence of char term, or \0, whichever
- * occurs first. Leading whitespace is ignored.
- */
-static char *dav_fetch_next_token(char **str, char term)
-{
- char *sp;
- char *token;
-
- token = *str + 1;
-
- while (*token && (*token == ' ' || *token == '\t'))
- token++;
-
- if ((sp = strchr(token, term)) == NULL)
- return NULL;
-
- *sp = '\0';
- *str = sp;
- return token;
-}
-
-/* dav_process_if_header:
- *
- * If NULL (no error) is returned, then **if_header points to the
- * "If" productions structure (or NULL if "If" is not present).
- *
- * ### this part is bogus:
- * If an error is encountered, the error is logged. Parent should
- * return err->status.
- */
-static dav_error * dav_process_if_header(request_rec *r, dav_if_header **p_ih)
-{
- dav_error *err;
- char *str;
- char *list;
- const char *state_token;
- const char *uri = NULL; /* scope of current production; NULL=no-tag */
- apr_size_t uri_len = 0;
- dav_if_header *ih = NULL;
- apr_uri_t parsed_uri;
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- enum {no_tagged, tagged, unknown} list_type = unknown;
- int condition;
-
- *p_ih = NULL;
-
- if ((str = apr_pstrdup(r->pool, apr_table_get(r->headers_in, "If"))) == NULL)
- return NULL;
-
- while (*str) {
- switch(*str) {
- case '<':
- /* Tagged-list production - following states apply to this uri */
- if (list_type == no_tagged
- || ((uri = dav_fetch_next_token(&str, '>')) == NULL)) {
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_TAGGED,
- "Invalid If-header: unclosed \"<\" or "
- "unexpected tagged-list production.");
- }
-
- /* 2518 specifies this must be an absolute URI; just take the
- * relative part for later comparison against r->uri */
- if (apr_uri_parse(r->pool, uri, &parsed_uri) != APR_SUCCESS) {
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_TAGGED,
- "Invalid URI in tagged If-header.");
- }
- /* note that parsed_uri.path is allocated; we can trash it */
-
- /* clean up the URI a bit */
- ap_getparents(parsed_uri.path);
- uri_len = strlen(parsed_uri.path);
- if (uri_len > 1 && parsed_uri.path[uri_len - 1] == '/')
- parsed_uri.path[--uri_len] = '\0';
-
- uri = parsed_uri.path;
- list_type = tagged;
- break;
-
- case '(':
- /* List production */
-
- /* If a uri has not been encountered, this is a No-Tagged-List */
- if (list_type == unknown)
- list_type = no_tagged;
-
- if ((list = dav_fetch_next_token(&str, ')')) == NULL) {
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_UNCLOSED_PAREN,
- "Invalid If-header: unclosed \"(\".");
- }
-
- if ((ih = dav_add_if_resource(r->pool, ih, uri, uri_len)) == NULL) {
- /* ### dav_add_if_resource() should return an error for us! */
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_PARSE,
- "Internal server error parsing \"If:\" "
- "header.");
- }
-
- condition = DAV_IF_COND_NORMAL;
-
- while (*list) {
- /* List is the entire production (in a uri scope) */
-
- switch (*list) {
- case '<':
- if ((state_token = dav_fetch_next_token(&list, '>')) == NULL) {
- /* ### add a description to this error */
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_PARSE, NULL);
- }
-
- if ((err = dav_add_if_state(r->pool, ih, state_token, dav_if_opaquelock,
- condition, locks_hooks)) != NULL) {
- /* ### maybe add a higher level description */
- return err;
- }
- condition = DAV_IF_COND_NORMAL;
- break;
-
- case '[':
- if ((state_token = dav_fetch_next_token(&list, ']')) == NULL) {
- /* ### add a description to this error */
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_PARSE, NULL);
- }
-
- if ((err = dav_add_if_state(r->pool, ih, state_token, dav_if_etag,
- condition, locks_hooks)) != NULL) {
- /* ### maybe add a higher level description */
- return err;
- }
- condition = DAV_IF_COND_NORMAL;
- break;
-
- case 'N':
- if (list[1] == 'o' && list[2] == 't') {
- if (condition != DAV_IF_COND_NORMAL) {
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_MULTIPLE_NOT,
- "Invalid \"If:\" header: "
- "Multiple \"not\" entries "
- "for the same state.");
- }
- condition = DAV_IF_COND_NOT;
- }
- list += 2;
- break;
-
- case ' ':
- case '\t':
- break;
-
- default:
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_UNK_CHAR,
- apr_psprintf(r->pool,
- "Invalid \"If:\" "
- "header: Unexpected "
- "character encountered "
- "(0x%02x, '%c').",
- *list, *list));
- }
-
- list++;
- }
- break;
-
- case ' ':
- case '\t':
- break;
-
- default:
- return dav_new_error(r->pool, HTTP_BAD_REQUEST,
- DAV_ERR_IF_UNK_CHAR,
- apr_psprintf(r->pool,
- "Invalid \"If:\" header: "
- "Unexpected character "
- "encountered (0x%02x, '%c').",
- *str, *str));
- }
-
- str++;
- }
-
- *p_ih = ih;
- return NULL;
-}
-
-static int dav_find_submitted_locktoken(const dav_if_header *if_header,
- const dav_lock *lock_list,
- const dav_hooks_locks *locks_hooks)
-{
- for (; if_header != NULL; if_header = if_header->next) {
- const dav_if_state_list *state_list;
-
- for (state_list = if_header->state;
- state_list != NULL;
- state_list = state_list->next) {
-
- if (state_list->type == dav_if_opaquelock) {
- const dav_lock *lock;
-
- /* given state_list->locktoken, match it */
-
- /*
- ** The resource will have one or more lock tokens. We only
- ** need to match one of them against any token in the
- ** If: header.
- **
- ** One token case: It is an exclusive or shared lock. Either
- ** way, we must find it.
- **
- ** N token case: They are shared locks. By policy, we need
- ** to match only one. The resource's other
- ** tokens may belong to somebody else (so we
- ** shouldn't see them in the If: header anyway)
- */
- for (lock = lock_list; lock != NULL; lock = lock->next) {
-
- if (!(*locks_hooks->compare_locktoken)(state_list->locktoken, lock->locktoken)) {
- return 1;
- }
- }
- }
- }
- }
-
- return 0;
-}
-
-/* dav_validate_resource_state:
- * Returns NULL if path/uri meets if-header and lock requirements
- */
-static dav_error * dav_validate_resource_state(apr_pool_t *p,
- const dav_resource *resource,
- dav_lockdb *lockdb,
- const dav_if_header *if_header,
- int flags,
- dav_buffer *pbuf,
- request_rec *r)
-{
- dav_error *err;
- const char *uri;
- const char *etag;
- const dav_hooks_locks *locks_hooks = (lockdb ? lockdb->hooks : NULL);
- const dav_if_header *ifhdr_scan;
- dav_if_state_list *state_list;
- dav_lock *lock_list;
- dav_lock *lock;
- int num_matched;
- int num_that_apply;
- int seen_locktoken;
- apr_size_t uri_len;
- const char *reason = NULL;
-
- /* DBG1("validate: <%s>", resource->uri); */
-
- /*
- ** The resource will have one of three states:
- **
- ** 1) No locks. We have no special requirements that the user supply
- ** specific locktokens. One of the state lists must match, and
- ** we're done.
- **
- ** 2) One exclusive lock. The locktoken must appear *anywhere* in the
- ** If: header. Of course, asserting the token in a "Not" term will
- ** quickly fail that state list :-). If the locktoken appears in
- ** one of the state lists *and* one state list matches, then we're
- ** done.
- **
- ** 3) One or more shared locks. One of the locktokens must appear
- ** *anywhere* in the If: header. If one of the locktokens appears,
- ** and we match one state list, then we are done.
- **
- ** The <seen_locktoken> variable determines whether we have seen one
- ** of this resource's locktokens in the If: header.
- */
-
- /*
- ** If this is a new lock request, <flags> will contain the requested
- ** lock scope. Three rules apply:
- **
- ** 1) Do not require a (shared) locktoken to be seen (when we are
- ** applying another shared lock)
- ** 2) If the scope is exclusive and we see any locks, fail.
- ** 3) If the scope is shared and we see an exclusive lock, fail.
- */
-
- if (lockdb == NULL) {
- /* we're in State 1. no locks. */
- lock_list = NULL;
- }
- else {
- /*
- ** ### hrm... we don't need to have these fully
- ** ### resolved since we're only looking at the
- ** ### locktokens...
- **
- ** ### use get_locks w/ calltype=PARTIAL
- */
- if ((err = dav_lock_query(lockdb, resource, &lock_list)) != NULL) {
- return dav_push_error(p,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "The locks could not be queried for "
- "verification against a possible \"If:\" "
- "header.",
- err);
- }
-
- /* lock_list now determines whether we're in State 1, 2, or 3. */
- }
-
- /*
- ** For a new, exclusive lock: if any locks exist, fail.
- ** For a new, shared lock: if an exclusive lock exists, fail.
- ** else, do not require a token to be seen.
- */
- if (flags & DAV_LOCKSCOPE_EXCLUSIVE) {
- if (lock_list != NULL) {
- return dav_new_error(p, HTTP_LOCKED, 0,
- "Existing lock(s) on the requested resource "
- "prevent an exclusive lock.");
- }
-
- /*
- ** There are no locks, so we can pretend that we've already met
- ** any requirement to find the resource's locks in an If: header.
- */
- seen_locktoken = 1;
- }
- else if (flags & DAV_LOCKSCOPE_SHARED) {
- /*
- ** Strictly speaking, we don't need this loop. Either the first
- ** (and only) lock will be EXCLUSIVE, or none of them will be.
- */
- for (lock = lock_list; lock != NULL; lock = lock->next) {
- if (lock->scope == DAV_LOCKSCOPE_EXCLUSIVE) {
- return dav_new_error(p, HTTP_LOCKED, 0,
- "The requested resource is already "
- "locked exclusively.");
- }
- }
-
- /*
- ** The locks on the resource (if any) are all shared. Set the
- ** <seen_locktoken> flag to indicate that we do not need to find
- ** the locks in an If: header.
- */
- seen_locktoken = 1;
- }
- else {
- /*
- ** For methods other than LOCK:
- **
- ** If we have no locks, then <seen_locktoken> can be set to true --
- ** pretending that we've already met the requirement of seeing one
- ** of the resource's locks in the If: header.
- **
- ** Otherwise, it must be cleared and we'll look for one.
- */
- seen_locktoken = (lock_list == NULL);
- }
-
- /*
- ** If there is no If: header, then we can shortcut some logic:
- **
- ** 1) if we do not need to find a locktoken in the (non-existent) If:
- ** header, then we are successful.
- **
- ** 2) if we must find a locktoken in the (non-existent) If: header, then
- ** we fail.
- */
- if (if_header == NULL) {
- if (seen_locktoken)
- return NULL;
-
- return dav_new_error(p, HTTP_LOCKED, 0,
- "This resource is locked and an \"If:\" header "
- "was not supplied to allow access to the "
- "resource.");
- }
- /* the If: header is present */
-
- /*
- ** If a dummy header is present (because of a Lock-Token: header), then
- ** we are required to find that token in this resource's set of locks.
- ** If we have no locks, then we immediately fail.
- **
- ** This is a 400 (Bad Request) since they should only submit a locktoken
- ** that actually exists.
- **
- ** Don't issue this response if we're talking about the parent resource.
- ** It is okay for that resource to NOT have this locktoken.
- ** (in fact, it certainly will not: a dummy_header only occurs for the
- ** UNLOCK method, the parent is checked only for locknull resources,
- ** and the parent certainly does not have the (locknull's) locktoken)
- */
- if (lock_list == NULL && if_header->dummy_header) {
- if (flags & DAV_VALIDATE_IS_PARENT)
- return NULL;
- return dav_new_error(p, HTTP_BAD_REQUEST, 0,
- "The locktoken specified in the \"Lock-Token:\" "
- "header is invalid because this resource has no "
- "outstanding locks.");
- }
-
- /*
- ** Prepare the input URI. We want the URI to never have a trailing slash.
- **
- ** When URIs are placed into the dav_if_header structure, they are
- ** guaranteed to never have a trailing slash. If the URIs are equivalent,
- ** then it doesn't matter if they both lack a trailing slash -- they're
- ** still equivalent.
- **
- ** Note: we could also ensure that a trailing slash is present on both
- ** URIs, but the majority of URIs provided to us via a resource walk
- ** will not contain that trailing slash.
- */
- uri = resource->uri;
- uri_len = strlen(uri);
- if (uri[uri_len - 1] == '/') {
- dav_set_bufsize(p, pbuf, uri_len);
- memcpy(pbuf->buf, uri, uri_len);
- pbuf->buf[--uri_len] = '\0';
- uri = pbuf->buf;
- }
-
- /* get the resource's etag; we may need it during the checks */
- etag = (*resource->hooks->getetag)(resource);
-
- /* how many state_lists apply to this URI? */
- num_that_apply = 0;
-
- /* If there are if-headers, fail if this resource
- * does not match at least one state_list.
- */
- for (ifhdr_scan = if_header;
- ifhdr_scan != NULL;
- ifhdr_scan = ifhdr_scan->next) {
-
- /* DBG2("uri=<%s> if_uri=<%s>", uri, ifhdr_scan->uri ? ifhdr_scan->uri : "(no uri)"); */
-
- if (ifhdr_scan->uri != NULL
- && (uri_len != ifhdr_scan->uri_len
- || memcmp(uri, ifhdr_scan->uri, uri_len) != 0)) {
- /*
- ** A tagged-list's URI doesn't match this resource's URI.
- ** Skip to the next state_list to see if it will match.
- */
- continue;
- }
-
- /* this state_list applies to this resource */
-
- /*
- ** ### only one state_list should ever apply! a no-tag, or a tagged
- ** ### where S9.4.2 states only one can match.
- **
- ** ### revamp this code to loop thru ifhdr_scan until we find the
- ** ### matching state_list. process it. stop.
- */
- ++num_that_apply;
-
- /* To succeed, resource must match *all* of the states
- * specified in the state_list.
- */
- for (state_list = ifhdr_scan->state;
- state_list != NULL;
- state_list = state_list->next) {
-
- switch(state_list->type) {
- case dav_if_etag:
- {
- const char *given_etag, *current_etag;
- int mismatch;
-
- /* Do a weak entity comparison function as defined in
- * RFC 2616 13.3.3.
- */
- if (state_list->etag[0] == 'W' &&
- state_list->etag[1] == '/') {
- given_etag = state_list->etag + 2;
- }
- else {
- given_etag = state_list->etag;
- }
- if (etag[0] == 'W' &&
- etag[1] == '/') {
- current_etag = etag + 2;
- }
- else {
- current_etag = etag;
- }
-
- mismatch = strcmp(given_etag, current_etag);
-
- if (state_list->condition == DAV_IF_COND_NORMAL && mismatch) {
- /*
- ** The specified entity-tag does not match the
- ** entity-tag on the resource. This state_list is
- ** not going to match. Bust outta here.
- */
- reason =
- "an entity-tag was specified, but the resource's "
- "actual ETag does not match.";
- goto state_list_failed;
- }
- else if (state_list->condition == DAV_IF_COND_NOT
- && !mismatch) {
- /*
- ** The specified entity-tag DOES match the
- ** entity-tag on the resource. This state_list is
- ** not going to match. Bust outta here.
- */
- reason =
- "an entity-tag was specified using the \"Not\" form, "
- "but the resource's actual ETag matches the provided "
- "entity-tag.";
- goto state_list_failed;
- }
- break;
- }
-
- case dav_if_opaquelock:
- if (lockdb == NULL) {
- if (state_list->condition == DAV_IF_COND_NOT) {
- /* the locktoken is definitely not there! (success) */
- continue;
- }
-
- /* condition == DAV_IF_COND_NORMAL */
-
- /*
- ** If no lockdb is provided, then validation fails for
- ** this state_list (NORMAL means we were supposed to
- ** find the token, which we obviously cannot do without
- ** a lock database).
- **
- ** Go and try the next state list.
- */
- reason =
- "a State-token was supplied, but a lock database "
- "is not available for to provide the required lock.";
- goto state_list_failed;
- }
-
- /* Resource validation 'fails' if:
- * ANY of the lock->locktokens match
- * a NOT state_list->locktoken,
- * OR
- * NONE of the lock->locktokens match
- * a NORMAL state_list->locktoken.
- */
- num_matched = 0;
- for (lock = lock_list; lock != NULL; lock = lock->next) {
-
- /*
- DBG2("compare: rsrc=%s ifhdr=%s",
- (*locks_hooks->format_locktoken)(p, lock->locktoken),
- (*locks_hooks->format_locktoken)(p, state_list->locktoken));
- */
-
- /* nothing to do if the locktokens do not match. */
- if ((*locks_hooks->compare_locktoken)(state_list->locktoken, lock->locktoken)) {
- continue;
- }
-
- /*
- ** We have now matched up one of the resource's locktokens
- ** to a locktoken in a State-token in the If: header.
- ** Note this fact, so that we can pass the overall
- ** requirement of seeing at least one of the resource's
- ** locktokens.
- */
- seen_locktoken = 1;
-
- if (state_list->condition == DAV_IF_COND_NOT) {
- /*
- ** This state requires that the specified locktoken
- ** is NOT present on the resource. But we just found
- ** it. There is no way this state-list can now
- ** succeed, so go try another one.
- */
- reason =
- "a State-token was supplied, which used a "
- "\"Not\" condition. The State-token was found "
- "in the locks on this resource";
- goto state_list_failed;
- }
-
- /* condition == DAV_IF_COND_NORMAL */
-
- /* Validate auth_user: If an authenticated user created
- ** the lock, only the same user may submit that locktoken
- ** to manipulate a resource.
- */
- if (lock->auth_user &&
- (!r->user ||
- strcmp(lock->auth_user, r->user))) {
- const char *errmsg;
-
- errmsg = apr_pstrcat(p, "User \"",
- r->user,
- "\" submitted a locktoken created "
- "by user \"",
- lock->auth_user, "\".", NULL);
- return dav_new_error(p, HTTP_FORBIDDEN, 0, errmsg);
- }
-
- /*
- ** We just matched a specified State-Token to one of the
- ** resource's locktokens.
- **
- ** Break out of the lock scan -- we only needed to find
- ** one match (actually, there shouldn't be any other
- ** matches in the lock list).
- */
- num_matched = 1;
- break;
- }
-
- if (num_matched == 0
- && state_list->condition == DAV_IF_COND_NORMAL) {
- /*
- ** We had a NORMAL state, meaning that we should have
- ** found the State-Token within the locks on this
- ** resource. We didn't, so this state_list must fail.
- */
- reason =
- "a State-token was supplied, but it was not found "
- "in the locks on this resource.";
- goto state_list_failed;
- }
-
- break;
-
- } /* switch */
- } /* foreach ( state_list ) */
-
- /*
- ** We've checked every state in this state_list and none of them
- ** have failed. Since all of them succeeded, then we have a matching
- ** state list and we may be done.
- **
- ** The next requirement is that we have seen one of the resource's
- ** locktokens (if any). If we have, then we can just exit. If we
- ** haven't, then we need to keep looking.
- */
- if (seen_locktoken) {
- /* woo hoo! */
- return NULL;
- }
-
- /*
- ** Haven't seen one. Let's break out of the search and just look
- ** for a matching locktoken.
- */
- break;
-
- /*
- ** This label is used when we detect that a state_list is not
- ** going to match this resource. We bust out and try the next
- ** state_list.
- */
- state_list_failed:
- ;
-
- } /* foreach ( ifhdr_scan ) */
-
- /*
- ** The above loop exits for one of two reasons:
- ** 1) a state_list matched and seen_locktoken is false.
- ** 2) all if_header structures were scanned, without (1) occurring
- */
-
- if (ifhdr_scan == NULL) {
- /*
- ** We finished the loop without finding any matching state lists.
- */
-
- /*
- ** If none of the state_lists apply to this resource, then we
- ** may have succeeded. Note that this scenario implies a
- ** tagged-list with no matching state_lists. If the If: header
- ** was a no-tag-list, then it would have applied to this resource.
- **
- ** S9.4.2 states that when no state_lists apply, then the header
- ** should be ignored.
- **
- ** If we saw one of the resource's locktokens, then we're done.
- ** If we did not see a locktoken, then we fail.
- */
- if (num_that_apply == 0) {
- if (seen_locktoken)
- return NULL;
-
- /*
- ** We may have aborted the scan before seeing the locktoken.
- ** Rescan the If: header to see if we can find the locktoken
- ** somewhere.
- **
- ** Note that seen_locktoken == 0 implies lock_list != NULL
- ** which implies locks_hooks != NULL.
- */
- if (dav_find_submitted_locktoken(if_header, lock_list,
- locks_hooks)) {
- /*
- ** We found a match! We're set... none of the If: header
- ** assertions apply (implicit success), and the If: header
- ** specified the locktoken somewhere. We're done.
- */
- return NULL;
- }
-
- return dav_new_error(p, HTTP_LOCKED, 0 /* error_id */,
- "This resource is locked and the \"If:\" "
- "header did not specify one of the "
- "locktokens for this resource's lock(s).");
- }
- /* else: one or more state_lists were applicable, but failed. */
-
- /*
- ** If the dummy_header did not match, then they specified an
- ** incorrect token in the Lock-Token header. Forget whether the
- ** If: statement matched or not... we'll tell them about the
- ** bad Lock-Token first. That is considered a 400 (Bad Request).
- */
- if (if_header->dummy_header) {
- return dav_new_error(p, HTTP_BAD_REQUEST, 0,
- "The locktoken specified in the "
- "\"Lock-Token:\" header did not specify one "
- "of this resource's locktoken(s).");
- }
-
- if (reason == NULL) {
- return dav_new_error(p, HTTP_PRECONDITION_FAILED, 0,
- "The preconditions specified by the \"If:\" "
- "header did not match this resource.");
- }
-
- return dav_new_error(p, HTTP_PRECONDITION_FAILED, 0,
- apr_psprintf(p,
- "The precondition(s) specified by "
- "the \"If:\" header did not match "
- "this resource. At least one "
- "failure is because: %s", reason));
- }
-
- /* assert seen_locktoken == 0 */
-
- /*
- ** ifhdr_scan != NULL implies we found a matching state_list.
- **
- ** Since we're still here, it also means that we have not yet found
- ** one the resource's locktokens in the If: header.
- **
- ** Scan all the if_headers and states looking for one of this
- ** resource's locktokens. Note that we need to go back and scan them
- ** all -- we may have aborted a scan with a failure before we saw a
- ** matching token.
- **
- ** Note that seen_locktoken == 0 implies lock_list != NULL which implies
- ** locks_hooks != NULL.
- */
- if (dav_find_submitted_locktoken(if_header, lock_list, locks_hooks)) {
- /*
- ** We found a match! We're set... we have a matching state list,
- ** and the If: header specified the locktoken somewhere. We're done.
- */
- return NULL;
- }
-
- /*
- ** We had a matching state list, but the user agent did not specify one
- ** of this resource's locktokens. Tell them so.
- **
- ** Note that we need to special-case the message on whether a "dummy"
- ** header exists. If it exists, yet we didn't see a needed locktoken,
- ** then that implies the dummy header (Lock-Token header) did NOT
- ** specify one of this resource's locktokens. (this implies something
- ** in the real If: header matched)
- **
- ** We want to note the 400 (Bad Request) in favor of a 423 (Locked).
- */
- if (if_header->dummy_header) {
- return dav_new_error(p, HTTP_BAD_REQUEST, 0,
- "The locktoken specified in the "
- "\"Lock-Token:\" header did not specify one "
- "of this resource's locktoken(s).");
- }
-
- return dav_new_error(p, HTTP_LOCKED, 1 /* error_id */,
- "This resource is locked and the \"If:\" header "
- "did not specify one of the "
- "locktokens for this resource's lock(s).");
-}
-
-/* dav_validate_walker: Walker callback function to validate resource state */
-static dav_error * dav_validate_walker(dav_walk_resource *wres, int calltype)
-{
- dav_walker_ctx *ctx = wres->walk_ctx;
- dav_error *err;
-
- if ((err = dav_validate_resource_state(ctx->w.pool, wres->resource,
- ctx->w.lockdb,
- ctx->if_header, ctx->flags,
- &ctx->work_buf, ctx->r)) == NULL) {
- /* There was no error, so just bug out. */
- return NULL;
- }
-
- /*
- ** If we have a serious server error, or if the request itself failed,
- ** then just return error (not a multistatus).
- */
- if (ap_is_HTTP_SERVER_ERROR(err->status)
- || (*wres->resource->hooks->is_same_resource)(wres->resource,
- ctx->w.root)) {
- /* ### maybe push a higher-level description? */
- return err;
- }
-
- /* associate the error with the current URI */
- dav_add_response(wres, err->status, NULL);
-
- return NULL;
-}
-
-/*
-** dav_validate_request: Validate if-headers (and check for locks) on:
-** (1) r->filename @ depth;
-** (2) Parent of r->filename if check_parent == 1
-**
-** The check of parent should be done when it is necessary to verify that
-** the parent collection will accept a new member (ie current resource
-** state is null).
-**
-** Return OK on successful validation.
-** On error, return appropriate HTTP_* code, and log error. If a multi-stat
-** error is necessary, response will point to it, else NULL.
-*/
-dav_error * dav_validate_request(request_rec *r, dav_resource *resource,
- int depth, dav_locktoken *locktoken,
- dav_response **response, int flags,
- dav_lockdb *lockdb)
-{
- dav_error *err;
- int result;
- dav_if_header *if_header;
- int lock_db_opened_locally = 0;
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
- const dav_hooks_repository *repos_hooks = resource->hooks;
- dav_buffer work_buf = { 0 };
- dav_response *new_response;
-
-#if DAV_DEBUG
- if (depth && response == NULL) {
- /*
- ** ### bleck. we can't return errors for other URIs unless we have
- ** ### a "response" ptr.
- */
- return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "DESIGN ERROR: dav_validate_request called "
- "with depth>0, but no response ptr.");
- }
-#endif
-
- if (response != NULL)
- *response = NULL;
-
- /* Do the standard checks for conditional requests using
- * If-..-Since, If-Match etc */
- if ((result = ap_meets_conditions(r)) != OK) {
- /* ### fix this up... how? */
- return dav_new_error(r->pool, result, 0, NULL);
- }
-
- /* always parse (and later process) the If: header */
- if ((err = dav_process_if_header(r, &if_header)) != NULL) {
- /* ### maybe add higher-level description */
- return err;
- }
-
- /* If a locktoken was specified, create a dummy if_header with which
- * to validate resources. In the interim, figure out why DAV uses
- * locktokens in an if-header without a Lock-Token header to refresh
- * locks, but a Lock-Token header without an if-header to remove them.
- */
- if (locktoken != NULL) {
- dav_if_header *ifhdr_new;
-
- ifhdr_new = apr_pcalloc(r->pool, sizeof(*ifhdr_new));
- ifhdr_new->uri = resource->uri;
- ifhdr_new->uri_len = strlen(resource->uri);
- ifhdr_new->dummy_header = 1;
-
- ifhdr_new->state = apr_pcalloc(r->pool, sizeof(*ifhdr_new->state));
- ifhdr_new->state->type = dav_if_opaquelock;
- ifhdr_new->state->condition = DAV_IF_COND_NORMAL;
- ifhdr_new->state->locktoken = locktoken;
-
- ifhdr_new->next = if_header;
- if_header = ifhdr_new;
- }
-
- /*
- ** If necessary, open the lock database (read-only, lazily);
- ** the validation process may need to retrieve or update lock info.
- ** Otherwise, assume provided lockdb is valid and opened rw.
- */
- if (lockdb == NULL) {
- if (locks_hooks != NULL) {
- if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
- /* ### maybe insert higher-level comment */
- return err;
- }
- lock_db_opened_locally = 1;
- }
- }
-
- /* (1) Validate the specified resource, at the specified depth */
- if (resource->exists && depth > 0) {
- dav_walker_ctx ctx = { { 0 } };
- dav_response *multi_status;
-
- ctx.w.walk_type = DAV_WALKTYPE_NORMAL;
- ctx.w.func = dav_validate_walker;
- ctx.w.walk_ctx = &ctx;
- ctx.w.pool = r->pool;
- ctx.w.root = resource;
-
- ctx.if_header = if_header;
- ctx.r = r;
- ctx.flags = flags;
-
- if (lockdb != NULL) {
- ctx.w.lockdb = lockdb;
- ctx.w.walk_type |= DAV_WALKTYPE_LOCKNULL;
- }
-
- err = (*repos_hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
- if (err == NULL) {
- *response = multi_status;;
- }
- /* else: implies a 5xx status code occurred. */
- }
- else {
- err = dav_validate_resource_state(r->pool, resource, lockdb,
- if_header, flags, &work_buf, r);
- }
-
- /* (2) Validate the parent resource if requested */
- if (err == NULL && (flags & DAV_VALIDATE_PARENT)) {
- dav_resource *parent_resource;
-
- err = (*repos_hooks->get_parent_resource)(resource, &parent_resource);
-
- if (err == NULL && parent_resource == NULL) {
- err = dav_new_error(r->pool, HTTP_FORBIDDEN, 0,
- "Cannot access parent of repository root.");
- }
- else if (err == NULL) {
- err = dav_validate_resource_state(r->pool, parent_resource, lockdb,
- if_header,
- flags | DAV_VALIDATE_IS_PARENT,
- &work_buf, r);
-
- /*
- ** This error occurred on the parent resource. This implies that
- ** we have to create a multistatus response (to report the error
- ** against a URI other than the Request-URI). "Convert" this error
- ** into a multistatus response.
- */
- if (err != NULL) {
- new_response = apr_pcalloc(r->pool, sizeof(*new_response));
-
- new_response->href = parent_resource->uri;
- new_response->status = err->status;
- new_response->desc =
- "A validation error has occurred on the parent resource, "
- "preventing the operation on the resource specified by "
- "the Request-URI.";
- if (err->desc != NULL) {
- new_response->desc = apr_pstrcat(r->pool,
- new_response->desc,
- " The error was: ",
- err->desc, NULL);
- }
-
- /* assert: DAV_VALIDATE_PARENT implies response != NULL */
- new_response->next = *response;
- *response = new_response;
-
- err = NULL;
- }
- }
- }
-
- if (lock_db_opened_locally)
- (*locks_hooks->close_lockdb)(lockdb);
-
- /*
- ** If we don't have a (serious) error, and we have multistatus responses,
- ** then we need to construct an "error". This error will be the overall
- ** status returned, and the multistatus responses will go into its body.
- **
- ** For certain methods, the overall error will be a 424. The default is
- ** to construct a standard 207 response.
- */
- if (err == NULL && response != NULL && *response != NULL) {
- apr_text *propstat = NULL;
-
- if ((flags & DAV_VALIDATE_USE_424) != 0) {
- /* manufacture a 424 error to hold the multistatus response(s) */
- return dav_new_error(r->pool, HTTP_FAILED_DEPENDENCY, 0,
- "An error occurred on another resource, "
- "preventing the requested operation on "
- "this resource.");
- }
-
- /*
- ** Whatever caused the error, the Request-URI should have a 424
- ** associated with it since we cannot complete the method.
- **
- ** For a LOCK operation, insert an empty DAV:lockdiscovery property.
- ** For other methods, return a simple 424.
- */
- if ((flags & DAV_VALIDATE_ADD_LD) != 0) {
- propstat = apr_pcalloc(r->pool, sizeof(*propstat));
- propstat->text =
- "<D:propstat>" DEBUG_CR
- "<D:prop><D:lockdiscovery/></D:prop>" DEBUG_CR
- "<D:status>HTTP/1.1 424 Failed Dependency</D:status>" DEBUG_CR
- "</D:propstat>" DEBUG_CR;
- }
-
- /* create the 424 response */
- new_response = apr_pcalloc(r->pool, sizeof(*new_response));
- new_response->href = resource->uri;
- new_response->status = HTTP_FAILED_DEPENDENCY;
- new_response->propresult.propstats = propstat;
- new_response->desc =
- "An error occurred on another resource, preventing the "
- "requested operation on this resource.";
-
- new_response->next = *response;
- *response = new_response;
-
- /* manufacture a 207 error for the multistatus response(s) */
- return dav_new_error(r->pool, HTTP_MULTI_STATUS, 0,
- "Error(s) occurred on resources during the "
- "validation process.");
- }
-
- return err;
-}
-
-/* dav_get_locktoken_list:
- *
- * Sets ltl to a locktoken_list of all positive locktokens in header,
- * else NULL if no If-header, or no positive locktokens.
- */
-dav_error * dav_get_locktoken_list(request_rec *r, dav_locktoken_list **ltl)
-{
- dav_error *err;
- dav_if_header *if_header;
- dav_if_state_list *if_state;
- dav_locktoken_list *lock_token = NULL;
-
- *ltl = NULL;
-
- if ((err = dav_process_if_header(r, &if_header)) != NULL) {
- /* ### add a higher-level description? */
- return err;
- }
-
- while (if_header != NULL) {
- if_state = if_header->state; /* Begining of the if_state linked list */
- while (if_state != NULL) {
- if (if_state->condition == DAV_IF_COND_NORMAL
- && if_state->type == dav_if_opaquelock) {
- lock_token = apr_pcalloc(r->pool, sizeof(dav_locktoken_list));
- lock_token->locktoken = if_state->locktoken;
- lock_token->next = *ltl;
- *ltl = lock_token;
- }
- if_state = if_state->next;
- }
- if_header = if_header->next;
- }
- if (*ltl == NULL) {
- /* No nodes added */
- return dav_new_error(r->pool, HTTP_BAD_REQUEST, DAV_ERR_IF_ABSENT,
- "No locktokens were specified in the \"If:\" "
- "header, so the refresh could not be performed.");
- }
-
- return NULL;
-}
-
-#if 0 /* not needed right now... */
-
-static const char *strip_white(const char *s, apr_pool_t *pool)
-{
- apr_size_t idx;
-
- /* trim leading whitespace */
- while (apr_isspace(*s)) /* assume: return false for '\0' */
- ++s;
-
- /* trim trailing whitespace */
- idx = strlen(s) - 1;
- if (apr_isspace(s[idx])) {
- char *s2 = apr_pstrdup(pool, s);
-
- while (apr_isspace(s2[idx]) && idx > 0)
- --idx;
- s2[idx + 1] = '\0';
- return s2;
- }
-
- return s;
-}
-#endif
-
-#define DAV_LABEL_HDR "Label"
-
-/* dav_add_vary_header
- *
- * If there were any headers in the request which require a Vary header
- * in the response, add it.
- */
-void dav_add_vary_header(request_rec *in_req,
- request_rec *out_req,
- const dav_resource *resource)
-{
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(in_req);
-
- /* ### this is probably all wrong... I think there is a function in
- ### the Apache API to add things to the Vary header. need to check */
-
- /* Only versioning headers require a Vary response header,
- * so only do this check if there is a versioning provider */
- if (vsn_hooks != NULL) {
- const char *target = apr_table_get(in_req->headers_in, DAV_LABEL_HDR);
- const char *vary = apr_table_get(out_req->headers_out, "Vary");
-
- /* If Target-Selector specified, add it to the Vary header */
- if (target != NULL) {
- if (vary == NULL)
- vary = DAV_LABEL_HDR;
- else
- vary = apr_pstrcat(out_req->pool, vary, "," DAV_LABEL_HDR,
- NULL);
-
- apr_table_setn(out_req->headers_out, "Vary", vary);
- }
- }
-}
-
-/* dav_can_auto_checkout
- *
- * Determine whether auto-checkout is enabled for a resource.
- * r - the request_rec
- * resource - the resource
- * auto_version - the value of the auto_versionable hook for the resource
- * lockdb - pointer to lock database (opened if necessary)
- * auto_checkout - set to 1 if auto-checkout enabled
- */
-static dav_error * dav_can_auto_checkout(
- request_rec *r,
- dav_resource *resource,
- dav_auto_version auto_version,
- dav_lockdb **lockdb,
- int *auto_checkout)
-{
- dav_error *err;
- dav_lock *lock_list;
-
- *auto_checkout = 0;
-
- if (auto_version == DAV_AUTO_VERSION_ALWAYS) {
- *auto_checkout = 1;
- }
- else if (auto_version == DAV_AUTO_VERSION_LOCKED) {
- if (*lockdb == NULL) {
- const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-
- if (locks_hooks == NULL) {
- return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Auto-checkout is only enabled for locked resources, "
- "but there is no lock provider.");
- }
-
- if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, lockdb)) != NULL) {
- return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Cannot open lock database to determine "
- "auto-versioning behavior.",
- err);
- }
- }
-
- if ((err = dav_lock_query(*lockdb, resource, &lock_list)) != NULL) {
- return dav_push_error(r->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "The locks could not be queried for "
- "determining auto-versioning behavior.",
- err);
- }
-
- if (lock_list != NULL)
- *auto_checkout = 1;
- }
-
- return NULL;
-}
-
-/* see mod_dav.h for docco */
-dav_error *dav_auto_checkout(
- request_rec *r,
- dav_resource *resource,
- int parent_only,
- dav_auto_version_info *av_info)
-{
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_lockdb *lockdb = NULL;
- dav_error *err = NULL;
-
- /* Initialize results */
- memset(av_info, 0, sizeof(*av_info));
-
- /* if no versioning provider, just return */
- if (vsn_hooks == NULL)
- return NULL;
-
- /* check parent resource if requested or if resource must be created */
- if (!resource->exists || parent_only) {
- dav_resource *parent;
-
- if ((err = (*resource->hooks->get_parent_resource)(resource,
- &parent)) != NULL)
- goto done;
-
- if (parent == NULL || !parent->exists) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Missing one or more intermediate "
- "collections. Cannot create resource %s.",
- ap_escape_html(r->pool, resource->uri)));
- goto done;
- }
-
- av_info->parent_resource = parent;
-
- /* if parent versioned and not checked out, see if it can be */
- if (parent->versioned && !parent->working) {
- int checkout_parent;
-
- if ((err = dav_can_auto_checkout(r, parent,
- (*vsn_hooks->auto_versionable)(parent),
- &lockdb, &checkout_parent))
- != NULL) {
- goto done;
- }
-
- if (!checkout_parent) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:cannot-modify-checked-in-parent>");
- goto done;
- }
-
- /* Try to checkout the parent collection.
- * Note that auto-versioning can only be applied to a version selector,
- * so no separate working resource will be created.
- */
- if ((err = (*vsn_hooks->checkout)(parent, 1 /*auto_checkout*/,
- 0, 0, 0, NULL, NULL))
- != NULL)
- {
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Unable to auto-checkout parent collection. "
- "Cannot create resource %s.",
- ap_escape_html(r->pool, resource->uri)),
- err);
- goto done;
- }
-
- /* remember that parent was checked out */
- av_info->parent_checkedout = 1;
- }
- }
-
- /* if only checking parent, we're done */
- if (parent_only)
- goto done;
-
- /* if creating a new resource, see if it should be version-controlled */
- if (!resource->exists
- && (*vsn_hooks->auto_versionable)(resource) == DAV_AUTO_VERSION_ALWAYS) {
-
- if ((err = (*vsn_hooks->vsn_control)(resource, NULL)) != NULL) {
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Unable to create versioned resource %s.",
- ap_escape_html(r->pool, resource->uri)),
- err);
- goto done;
- }
-
- /* remember that resource was created */
- av_info->resource_versioned = 1;
- }
-
- /* if resource is versioned, make sure it is checked out */
- if (resource->versioned && !resource->working) {
- int checkout_resource;
-
- if ((err = dav_can_auto_checkout(r, resource,
- (*vsn_hooks->auto_versionable)(resource),
- &lockdb, &checkout_resource)) != NULL) {
- goto done;
- }
-
- if (!checkout_resource) {
- err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
- "<DAV:cannot-modify-version-controlled-content>");
- goto done;
- }
-
- /* Auto-versioning can only be applied to version selectors, so
- * no separate working resource will be created. */
- if ((err = (*vsn_hooks->checkout)(resource, 1 /*auto_checkout*/,
- 0, 0, 0, NULL, NULL))
- != NULL)
- {
- err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
- apr_psprintf(r->pool,
- "Unable to checkout resource %s.",
- ap_escape_html(r->pool, resource->uri)),
- err);
- goto done;
- }
-
- /* remember that resource was checked out */
- av_info->resource_checkedout = 1;
- }
-
-done:
-
- /* make sure lock database is closed */
- if (lockdb != NULL)
- (*lockdb->hooks->close_lockdb)(lockdb);
-
- /* if an error occurred, undo any auto-versioning operations already done */
- if (err != NULL) {
- dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, av_info);
- return err;
- }
-
- return NULL;
-}
-
-/* see mod_dav.h for docco */
-dav_error *dav_auto_checkin(
- request_rec *r,
- dav_resource *resource,
- int undo,
- int unlock,
- dav_auto_version_info *av_info)
-{
- const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
- dav_error *err = NULL;
- dav_auto_version auto_version;
-
- /* If no versioning provider, this is a no-op */
- if (vsn_hooks == NULL)
- return NULL;
-
- /* If undoing auto-checkouts, then do uncheckouts */
- if (undo) {
- if (resource != NULL) {
- if (av_info->resource_checkedout) {
- if ((err = (*vsn_hooks->uncheckout)(resource)) != NULL) {
- return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(r->pool,
- "Unable to undo auto-checkout "
- "of resource %s.",
- ap_escape_html(r->pool, resource->uri)),
- err);
- }
- }
-
- if (av_info->resource_versioned) {
- dav_response *response;
-
- /* ### should we do anything with the response? */
- if ((err = (*resource->hooks->remove_resource)(resource,
- &response)) != NULL) {
- return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(r->pool,
- "Unable to undo auto-version-control "
- "of resource %s.",
- ap_escape_html(r->pool, resource->uri)),
- err);
- }
- }
- }
-
- if (av_info->parent_resource != NULL && av_info->parent_checkedout) {
- if ((err = (*vsn_hooks->uncheckout)(av_info->parent_resource)) != NULL) {
- return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(r->pool,
- "Unable to undo auto-checkout "
- "of parent collection %s.",
- ap_escape_html(r->pool, av_info->parent_resource->uri)),
- err);
- }
- }
-
- return NULL;
- }
-
- /* If the resource was checked out, and auto-checkin is enabled,
- * then check it in.
- */
- if (resource != NULL && resource->working
- && (unlock || av_info->resource_checkedout)) {
-
- auto_version = (*vsn_hooks->auto_versionable)(resource);
-
- if (auto_version == DAV_AUTO_VERSION_ALWAYS ||
- (unlock && (auto_version == DAV_AUTO_VERSION_LOCKED))) {
-
- if ((err = (*vsn_hooks->checkin)(resource,
- 0 /*keep_checked_out*/, NULL))
- != NULL) {
- return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(r->pool,
- "Unable to auto-checkin resource %s.",
- ap_escape_html(r->pool, resource->uri)),
- err);
- }
- }
- }
-
- /* If parent resource was checked out, and auto-checkin is enabled,
- * then check it in.
- */
- if (!unlock
- && av_info->parent_checkedout
- && av_info->parent_resource != NULL
- && av_info->parent_resource->working) {
-
- auto_version = (*vsn_hooks->auto_versionable)(av_info->parent_resource);
-
- if (auto_version == DAV_AUTO_VERSION_ALWAYS) {
- if ((err = (*vsn_hooks->checkin)(av_info->parent_resource,
- 0 /*keep_checked_out*/, NULL))
- != NULL) {
- return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- apr_psprintf(r->pool,
- "Unable to auto-checkin parent collection %s.",
- ap_escape_html(r->pool, av_info->parent_resource->uri)),
- err);
- }
- }
- }
-
- return NULL;
-}
diff --git a/modules/dav/main/util_lock.c b/modules/dav/main/util_lock.c
deleted file mode 100644
index 8ec2b136ae..0000000000
--- a/modules/dav/main/util_lock.c
+++ /dev/null
@@ -1,787 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-** DAV repository-independent lock functions
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h> /* for sprintf() */
-#endif
-
-#include "mod_dav.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "http_core.h"
-
-
-/* ---------------------------------------------------------------
-**
-** Property-related lock functions
-**
-*/
-
-/*
-** dav_lock_get_activelock: Returns a <lockdiscovery> containing
-** an activelock element for every item in the lock_discovery tree
-*/
-const char *dav_lock_get_activelock(request_rec *r, dav_lock *lock,
- dav_buffer *pbuf)
-{
- dav_lock *lock_scan;
- const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
- int count = 0;
- dav_buffer work_buf = { 0 };
- apr_pool_t *p = r->pool;
-
- /* If no locks or no lock provider, there are no locks */
- if (lock == NULL || hooks == NULL) {
- /*
- ** Since resourcediscovery is defined with (activelock)*,
- ** <D:activelock/> shouldn't be necessary for an empty lock.
- */
- return "";
- }
-
- /*
- ** Note: it could be interesting to sum the lengths of the owners
- ** and locktokens during this loop. However, the buffer
- ** mechanism provides some rough padding so that we don't
- ** really need to have an exact size. Further, constructing
- ** locktoken strings could be relatively expensive.
- */
- for (lock_scan = lock; lock_scan != NULL; lock_scan = lock_scan->next)
- count++;
-
- /* if a buffer was not provided, then use an internal buffer */
- if (pbuf == NULL)
- pbuf = &work_buf;
-
- /* reset the length before we start appending stuff */
- pbuf->cur_len = 0;
-
- /* prep the buffer with a "good" size */
- dav_check_bufsize(p, pbuf, count * 300);
-
- for (; lock != NULL; lock = lock->next) {
- char tmp[100];
-
-#if DAV_DEBUG
- if (lock->rectype == DAV_LOCKREC_INDIRECT_PARTIAL) {
- /* ### crap. design error */
- dav_buffer_append(p, pbuf,
- "DESIGN ERROR: attempted to product an "
- "activelock element from a partial, indirect "
- "lock record. Creating an XML parsing error "
- "to ease detection of this situation: <");
- }
-#endif
-
- dav_buffer_append(p, pbuf, "<D:activelock>" DEBUG_CR "<D:locktype>");
- switch (lock->type) {
- case DAV_LOCKTYPE_WRITE:
- dav_buffer_append(p, pbuf, "<D:write/>");
- break;
- default:
- /* ### internal error. log something? */
- break;
- }
- dav_buffer_append(p, pbuf, "</D:locktype>" DEBUG_CR "<D:lockscope>");
- switch (lock->scope) {
- case DAV_LOCKSCOPE_EXCLUSIVE:
- dav_buffer_append(p, pbuf, "<D:exclusive/>");
- break;
- case DAV_LOCKSCOPE_SHARED:
- dav_buffer_append(p, pbuf, "<D:shared/>");
- break;
- default:
- /* ### internal error. log something? */
- break;
- }
- dav_buffer_append(p, pbuf, "</D:lockscope>" DEBUG_CR);
- sprintf(tmp, "<D:depth>%s</D:depth>" DEBUG_CR,
- lock->depth == DAV_INFINITY ? "infinity" : "0");
- dav_buffer_append(p, pbuf, tmp);
-
- if (lock->owner) {
- /*
- ** This contains a complete, self-contained <DAV:owner> element,
- ** with namespace declarations and xml:lang handling. Just drop
- ** it in.
- */
- dav_buffer_append(p, pbuf, lock->owner);
- }
-
- dav_buffer_append(p, pbuf, "<D:timeout>");
- if (lock->timeout == DAV_TIMEOUT_INFINITE) {
- dav_buffer_append(p, pbuf, "Infinite");
- }
- else {
- time_t now = time(NULL);
- sprintf(tmp, "Second-%lu", (long unsigned int)(lock->timeout - now));
- dav_buffer_append(p, pbuf, tmp);
- }
-
- dav_buffer_append(p, pbuf,
- "</D:timeout>" DEBUG_CR
- "<D:locktoken>" DEBUG_CR
- "<D:href>");
- dav_buffer_append(p, pbuf,
- (*hooks->format_locktoken)(p, lock->locktoken));
- dav_buffer_append(p, pbuf,
- "</D:href>" DEBUG_CR
- "</D:locktoken>" DEBUG_CR
- "</D:activelock>" DEBUG_CR);
- }
-
- return pbuf->buf;
-}
-
-/*
-** dav_lock_parse_lockinfo: Validates the given xml_doc to contain a
-** lockinfo XML element, then populates a dav_lock structure
-** with its contents.
-*/
-dav_error * dav_lock_parse_lockinfo(request_rec *r,
- const dav_resource *resource,
- dav_lockdb *lockdb,
- const apr_xml_doc *doc,
- dav_lock **lock_request)
-{
- apr_pool_t *p = r->pool;
- dav_error *err;
- apr_xml_elem *child;
- dav_lock *lock;
-
- if (!dav_validate_root(doc, "lockinfo")) {
- return dav_new_error(p, HTTP_BAD_REQUEST, 0,
- "The request body contains an unexpected "
- "XML root element.");
- }
-
- if ((err = (*lockdb->hooks->create_lock)(lockdb, resource,
- &lock)) != NULL) {
- return dav_push_error(p, err->status, 0,
- "Could not parse the lockinfo due to an "
- "internal problem creating a lock structure.",
- err);
- }
-
- lock->depth = dav_get_depth(r, DAV_INFINITY);
- if (lock->depth == -1) {
- return dav_new_error(p, HTTP_BAD_REQUEST, 0,
- "An invalid Depth header was specified.");
- }
- lock->timeout = dav_get_timeout(r);
-
- /* Parse elements in the XML body */
- for (child = doc->root->first_child; child; child = child->next) {
- if (strcmp(child->name, "locktype") == 0
- && child->first_child
- && lock->type == DAV_LOCKTYPE_UNKNOWN) {
- if (strcmp(child->first_child->name, "write") == 0) {
- lock->type = DAV_LOCKTYPE_WRITE;
- continue;
- }
- }
- if (strcmp(child->name, "lockscope") == 0
- && child->first_child
- && lock->scope == DAV_LOCKSCOPE_UNKNOWN) {
- if (strcmp(child->first_child->name, "exclusive") == 0)
- lock->scope = DAV_LOCKSCOPE_EXCLUSIVE;
- else if (strcmp(child->first_child->name, "shared") == 0)
- lock->scope = DAV_LOCKSCOPE_SHARED;
- if (lock->scope != DAV_LOCKSCOPE_UNKNOWN)
- continue;
- }
-
- if (strcmp(child->name, "owner") == 0 && lock->owner == NULL) {
- const char *text;
-
- /* quote all the values in the <DAV:owner> element */
- apr_xml_quote_elem(p, child);
-
- /*
- ** Store a full <DAV:owner> element with namespace definitions
- ** and an xml:lang definition, if applicable.
- */
- apr_xml_to_text(p, child, APR_XML_X2T_FULL_NS_LANG, doc->namespaces,
- NULL, &text, NULL);
- lock->owner = text;
-
- continue;
- }
-
- return dav_new_error(p, HTTP_PRECONDITION_FAILED, 0,
- apr_psprintf(p,
- "The server cannot satisfy the "
- "LOCK request due to an unknown XML "
- "element (\"%s\") within the "
- "DAV:lockinfo element.",
- child->name));
- }
-
- *lock_request = lock;
- return NULL;
-}
-
-/* ---------------------------------------------------------------
-**
-** General lock functions
-**
-*/
-
-/* dav_lock_walker: Walker callback function to record indirect locks */
-static dav_error * dav_lock_walker(dav_walk_resource *wres, int calltype)
-{
- dav_walker_ctx *ctx = wres->walk_ctx;
- dav_error *err;
-
- /* We don't want to set indirects on the target */
- if ((*wres->resource->hooks->is_same_resource)(wres->resource,
- ctx->w.root))
- return NULL;
-
- if ((err = (*ctx->w.lockdb->hooks->append_locks)(ctx->w.lockdb,
- wres->resource, 1,
- ctx->lock)) != NULL) {
- if (ap_is_HTTP_SERVER_ERROR(err->status)) {
- /* ### add a higher-level description? */
- return err;
- }
-
- /* add to the multistatus response */
- dav_add_response(wres, err->status, NULL);
-
- /*
- ** ### actually, this is probably wrong: we want to fail the whole
- ** ### LOCK process if something goes bad. maybe the caller should
- ** ### do a dav_unlock() (e.g. a rollback) if any errors occurred.
- */
- }
-
- return NULL;
-}
-
-/*
-** dav_add_lock: Add a direct lock for resource, and indirect locks for
-** all children, bounded by depth.
-** ### assume request only contains one lock
-*/
-dav_error * dav_add_lock(request_rec *r, const dav_resource *resource,
- dav_lockdb *lockdb, dav_lock *lock,
- dav_response **response)
-{
- dav_error *err;
- int depth = lock->depth;
-
- *response = NULL;
-
- /* Requested lock can be:
- * Depth: 0 for null resource, existing resource, or existing collection
- * Depth: Inf for existing collection
- */
-
- /*
- ** 2518 9.2 says to ignore depth if target is not a collection (it has
- ** no internal children); pretend the client gave the correct depth.
- */
- if (!resource->collection) {
- depth = 0;
- }
-
- /* In all cases, first add direct entry in lockdb */
-
- /*
- ** Append the new (direct) lock to the resource's existing locks.
- **
- ** Note: this also handles locknull resources
- */
- if ((err = (*lockdb->hooks->append_locks)(lockdb, resource, 0,
- lock)) != NULL) {
- /* ### maybe add a higher-level description */
- return err;
- }
-
- if (depth > 0) {
- /* Walk existing collection and set indirect locks */
- dav_walker_ctx ctx = { { 0 } };
- dav_response *multi_status;
-
- ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_AUTH;
- ctx.w.func = dav_lock_walker;
- ctx.w.walk_ctx = &ctx;
- ctx.w.pool = r->pool;
- ctx.w.root = resource;
- ctx.w.lockdb = lockdb;
-
- ctx.r = r;
- ctx.lock = lock;
-
- err = (*resource->hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
- if (err != NULL) {
- /* implies a 5xx status code occurred. screw the multistatus */
- return err;
- }
-
- if (multi_status != NULL) {
- /* manufacture a 207 error for the multistatus response */
- *response = multi_status;
- return dav_new_error(r->pool, HTTP_MULTI_STATUS, 0,
- "Error(s) occurred on resources during the "
- "addition of a depth lock.");
- }
- }
-
- return NULL;
-}
-
-/*
-** dav_lock_query: Opens the lock database. Returns a linked list of
-** dav_lock structures for all direct locks on path.
-*/
-DAV_DECLARE(dav_error*) dav_lock_query(dav_lockdb *lockdb,
- const dav_resource *resource,
- dav_lock **locks)
-{
- /* If no lock database, return empty result */
- if (lockdb == NULL) {
- *locks = NULL;
- return NULL;
- }
-
- /* ### insert a higher-level description? */
- return (*lockdb->hooks->get_locks)(lockdb, resource,
- DAV_GETLOCKS_RESOLVED,
- locks);
-}
-
-/* dav_unlock_walker: Walker callback function to remove indirect locks */
-static dav_error * dav_unlock_walker(dav_walk_resource *wres, int calltype)
-{
- dav_walker_ctx *ctx = wres->walk_ctx;
- dav_error *err;
-
- /* Before removing the lock, do any auto-checkin required */
- if (wres->resource->working) {
- /* ### get rid of this typecast */
- if ((err = dav_auto_checkin(ctx->r, (dav_resource *) wres->resource,
- 0 /*undo*/, 1 /*unlock*/, NULL))
- != NULL) {
- return err;
- }
- }
-
- if ((err = (*ctx->w.lockdb->hooks->remove_lock)(ctx->w.lockdb,
- wres->resource,
- ctx->locktoken)) != NULL) {
- /* ### should we stop or return a multistatus? looks like STOP */
- /* ### add a higher-level description? */
- return err;
- }
-
- return NULL;
-}
-
-/*
-** dav_get_direct_resource:
-**
-** Find a lock on the specified resource, then return the resource the
-** lock was applied to (in other words, given a (possibly) indirect lock,
-** return the direct lock's corresponding resource).
-**
-** If the lock is an indirect lock, this usually means traversing up the
-** namespace [repository] hierarchy. Note that some lock providers may be
-** able to return this information with a traversal.
-*/
-static dav_error * dav_get_direct_resource(apr_pool_t *p,
- dav_lockdb *lockdb,
- const dav_locktoken *locktoken,
- const dav_resource *resource,
- const dav_resource **direct_resource)
-{
- if (lockdb->hooks->lookup_resource != NULL) {
- return (*lockdb->hooks->lookup_resource)(lockdb, locktoken,
- resource, direct_resource);
- }
-
- *direct_resource = NULL;
-
- /* Find the top of this lock-
- * If r->filename's direct locks include locktoken, use r->filename.
- * If r->filename's indirect locks include locktoken, retry r->filename/..
- * Else fail.
- */
- while (resource != NULL) {
- dav_error *err;
- dav_lock *lock;
- dav_resource *parent;
-
- /*
- ** Find the lock specified by <locktoken> on <resource>. If it is
- ** an indirect lock, then partial results are okay. We're just
- ** trying to find the thing and know whether it is a direct or
- ** an indirect lock.
- */
- if ((err = (*lockdb->hooks->find_lock)(lockdb, resource, locktoken,
- 1, &lock)) != NULL) {
- /* ### add a higher-level desc? */
- return err;
- }
-
- /* not found! that's an error. */
- if (lock == NULL) {
- return dav_new_error(p, HTTP_BAD_REQUEST, 0,
- "The specified locktoken does not correspond "
- "to an existing lock on this resource.");
- }
-
- if (lock->rectype == DAV_LOCKREC_DIRECT) {
- /* we found the direct lock. return this resource. */
-
- *direct_resource = resource;
- return NULL;
- }
-
- /* the lock was indirect. move up a level in the URL namespace */
- if ((err = (*resource->hooks->get_parent_resource)(resource,
- &parent)) != NULL) {
- /* ### add a higher-level desc? */
- return err;
- }
- resource = parent;
- }
-
- return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
- "The lock database is corrupt. A direct lock could "
- "not be found for the corresponding indirect lock "
- "on this resource.");
-}
-
-/*
-** dav_unlock: Removes all direct and indirect locks for r->filename,
-** with given locktoken. If locktoken == null_locktoken, all locks
-** are removed. If r->filename represents an indirect lock,
-** we must unlock the appropriate direct lock.
-** Returns OK or appropriate HTTP_* response and logs any errors.
-**
-** ### We've already crawled the tree to ensure everything was locked
-** by us; there should be no need to incorporate a rollback.
-*/
-int dav_unlock(request_rec *r, const dav_resource *resource,
- const dav_locktoken *locktoken)
-{
- int result;
- dav_lockdb *lockdb;
- const dav_resource *lock_resource = resource;
- const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
- const dav_hooks_repository *repos_hooks = resource->hooks;
- dav_walker_ctx ctx = { { 0 } };
- dav_response *multi_status;
- dav_error *err;
-
- /* If no locks provider, then there is nothing to unlock. */
- if (hooks == NULL) {
- return OK;
- }
-
- /* 2518 requires the entire lock to be removed if resource/locktoken
- * point to an indirect lock. We need resource of the _direct_
- * lock in order to walk down the tree and remove the locks. So,
- * If locktoken != null_locktoken,
- * Walk up the resource hierarchy until we see a direct lock.
- * Or, we could get the direct lock's db/key, pick out the URL
- * and do a subrequest. I think walking up is faster and will work
- * all the time.
- * Else
- * Just start removing all locks at and below resource.
- */
-
- if ((err = (*hooks->open_lockdb)(r, 0, 1, &lockdb)) != NULL) {
- /* ### return err! maybe add a higher-level desc */
- /* ### map result to something nice; log an error */
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (locktoken != NULL
- && (err = dav_get_direct_resource(r->pool, lockdb,
- locktoken, resource,
- &lock_resource)) != NULL) {
- /* ### add a higher-level desc? */
- /* ### should return err! */
- return err->status;
- }
-
- /* At this point, lock_resource/locktoken refers to a direct lock (key), ie
- * the root of a depth > 0 lock, or locktoken is null.
- */
- ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_LOCKNULL;
- ctx.w.func = dav_unlock_walker;
- ctx.w.walk_ctx = &ctx;
- ctx.w.pool = r->pool;
- ctx.w.root = lock_resource;
- ctx.w.lockdb = lockdb;
-
- ctx.r = r;
- ctx.locktoken = locktoken;
-
- err = (*repos_hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
-
- /* ### fix this! */
- /* ### do something with multi_status */
- result = err == NULL ? OK : err->status;
-
- (*hooks->close_lockdb)(lockdb);
-
- return result;
-}
-
-/* dav_inherit_walker: Walker callback function to inherit locks */
-static dav_error * dav_inherit_walker(dav_walk_resource *wres, int calltype)
-{
- dav_walker_ctx *ctx = wres->walk_ctx;
-
- if (ctx->skip_root
- && (*wres->resource->hooks->is_same_resource)(wres->resource,
- ctx->w.root)) {
- return NULL;
- }
-
- /* ### maybe add a higher-level desc */
- return (*ctx->w.lockdb->hooks->append_locks)(ctx->w.lockdb,
- wres->resource, 1,
- ctx->lock);
-}
-
-/*
-** dav_inherit_locks: When a resource or collection is added to a collection,
-** locks on the collection should be inherited to the resource/collection.
-** (MOVE, MKCOL, etc) Here we propagate any direct or indirect locks from
-** parent of resource to resource and below.
-*/
-static dav_error * dav_inherit_locks(request_rec *r, dav_lockdb *lockdb,
- const dav_resource *resource,
- int use_parent)
-{
- dav_error *err;
- const dav_resource *which_resource;
- dav_lock *locks;
- dav_lock *scan;
- dav_lock *prev;
- dav_walker_ctx ctx = { { 0 } };
- const dav_hooks_repository *repos_hooks = resource->hooks;
- dav_response *multi_status;
-
- if (use_parent) {
- dav_resource *parent;
- if ((err = (*repos_hooks->get_parent_resource)(resource,
- &parent)) != NULL) {
- /* ### add a higher-level desc? */
- return err;
- }
- if (parent == NULL) {
- /* ### map result to something nice; log an error */
- return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Could not fetch parent resource. Unable to "
- "inherit locks from the parent and apply "
- "them to this resource.");
- }
- which_resource = parent;
- }
- else {
- which_resource = resource;
- }
-
- if ((err = (*lockdb->hooks->get_locks)(lockdb, which_resource,
- DAV_GETLOCKS_PARTIAL,
- &locks)) != NULL) {
- /* ### maybe add a higher-level desc */
- return err;
- }
-
- if (locks == NULL) {
- /* No locks to propagate, just return */
- return NULL;
- }
-
- /*
- ** (1) Copy all indirect locks from our parent;
- ** (2) Create indirect locks for the depth infinity, direct locks
- ** in our parent.
- **
- ** The append_locks call in the walker callback will do the indirect
- ** conversion, but we need to remove any direct locks that are NOT
- ** depth "infinity".
- */
- for (scan = locks, prev = NULL;
- scan != NULL;
- prev = scan, scan = scan->next) {
-
- if (scan->rectype == DAV_LOCKREC_DIRECT
- && scan->depth != DAV_INFINITY) {
-
- if (prev == NULL)
- locks = scan->next;
- else
- prev->next = scan->next;
- }
- }
-
- /* <locks> has all our new locks. Walk down and propagate them. */
-
- ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_LOCKNULL;
- ctx.w.func = dav_inherit_walker;
- ctx.w.walk_ctx = &ctx;
- ctx.w.pool = r->pool;
- ctx.w.root = resource;
- ctx.w.lockdb = lockdb;
-
- ctx.r = r;
- ctx.lock = locks;
- ctx.skip_root = !use_parent;
-
- /* ### do something with multi_status */
- return (*repos_hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
-}
-
-/* ---------------------------------------------------------------
-**
-** Functions dealing with lock-null resources
-**
-*/
-
-/*
-** dav_get_resource_state: Returns the state of the resource
-** r->filename: DAV_RESOURCE_NULL, DAV_RESOURCE_LOCK_NULL,
-** or DAV_RESOURCE_EXIST.
-**
-** Returns DAV_RESOURCE_ERROR if an error occurs.
-*/
-int dav_get_resource_state(request_rec *r, const dav_resource *resource)
-{
- const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
-
- if (resource->exists)
- return DAV_RESOURCE_EXISTS;
-
- if (hooks != NULL) {
- dav_error *err;
- dav_lockdb *lockdb;
- int locks_present;
-
- /*
- ** A locknull resource has the form:
- **
- ** known-dir "/" locknull-file
- **
- ** It would be nice to look into <resource> to verify this form,
- ** but it does not have enough information for us. Instead, we
- ** can look at the path_info. If the form does not match, then
- ** there is no way we could have a locknull resource -- it must
- ** be a plain, null resource.
- **
- ** Apache sets r->filename to known-dir/unknown-file and r->path_info
- ** to "" for the "proper" case. If anything is in path_info, then
- ** it can't be a locknull resource.
- **
- ** ### I bet this path_info hack doesn't work for repositories.
- ** ### Need input from repository implementors! What kind of
- ** ### restructure do we need? New provider APIs?
- */
- if (r->path_info != NULL && *r->path_info != '\0') {
- return DAV_RESOURCE_NULL;
- }
-
- if ((err = (*hooks->open_lockdb)(r, 1, 1, &lockdb)) == NULL) {
- /* note that we might see some expired locks... *shrug* */
- err = (*hooks->has_locks)(lockdb, resource, &locks_present);
- (*hooks->close_lockdb)(lockdb);
- }
-
- if (err != NULL) {
- /* ### don't log an error. return err. add higher-level desc. */
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Failed to query lock-null status for %s",
- r->filename);
-
- return DAV_RESOURCE_ERROR;
- }
-
- if (locks_present)
- return DAV_RESOURCE_LOCK_NULL;
- }
-
- return DAV_RESOURCE_NULL;
-}
-
-dav_error * dav_notify_created(request_rec *r,
- dav_lockdb *lockdb,
- const dav_resource *resource,
- int resource_state,
- int depth)
-{
- dav_error *err;
-
- if (resource_state == DAV_RESOURCE_LOCK_NULL) {
-
- /*
- ** The resource is no longer a locknull resource. This will remove
- ** the special marker.
- **
- ** Note that a locknull resource has already inherited all of the
- ** locks from the parent. We do not need to call dav_inherit_locks.
- **
- ** NOTE: some lock providers record locks for locknull resources using
- ** a different key than for regular resources. this will shift
- ** the lock information between the two key types.
- */
- (void)(*lockdb->hooks->remove_locknull_state)(lockdb, resource);
-
- /*
- ** There are resources under this one, which are new. We must
- ** propagate the locks down to the new resources.
- */
- if (depth > 0 &&
- (err = dav_inherit_locks(r, lockdb, resource, 0)) != NULL) {
- /* ### add a higher level desc? */
- return err;
- }
- }
- else if (resource_state == DAV_RESOURCE_NULL) {
-
- /* ### should pass depth to dav_inherit_locks so that it can
- ** ### optimize for the depth==0 case.
- */
-
- /* this resource should inherit locks from its parent */
- if ((err = dav_inherit_locks(r, lockdb, resource, 1)) != NULL) {
-
- err = dav_push_error(r->pool, err->status, 0,
- "The resource was created successfully, but "
- "there was a problem inheriting locks from "
- "the parent resource.",
- err);
- return err;
- }
- }
- /* else the resource already exists and its locks are correct. */
-
- return NULL;
-}
diff --git a/modules/echo/.cvsignore b/modules/echo/.cvsignore
deleted file mode 100644
index f877eb50a6..0000000000
--- a/modules/echo/.cvsignore
+++ /dev/null
@@ -1,15 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/echo/.indent.pro b/modules/echo/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/echo/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/echo/Makefile.in b/modules/echo/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/echo/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/echo/NWGNUmakefile b/modules/echo/NWGNUmakefile
deleted file mode 100644
index 3fc4a12c10..0000000000
--- a/modules/echo/NWGNUmakefile
+++ /dev/null
@@ -1,261 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = echo
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Echo Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Echo Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/echo.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_echo.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- echo_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/echo/config.m4 b/modules/echo/config.m4
deleted file mode 100644
index 02c42b1522..0000000000
--- a/modules/echo/config.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(echo)
-
-APACHE_MODULE(echo, ECHO server, , , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/echo/mod_echo.c b/modules/echo/mod_echo.c
deleted file mode 100644
index 111f312122..0000000000
--- a/modules/echo/mod_echo.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-#include "ap_mmn.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_connection.h"
-
-#include "apr_buckets.h"
-#include "util_filter.h"
-
-module AP_MODULE_DECLARE_DATA echo_module;
-
-typedef struct {
- int bEnabled;
-} EchoConfig;
-
-static void *create_echo_server_config(apr_pool_t *p, server_rec *s)
-{
- EchoConfig *pConfig = apr_pcalloc(p, sizeof *pConfig);
-
- pConfig->bEnabled = 0;
-
- return pConfig;
-}
-
-static const char *echo_on(cmd_parms *cmd, void *dummy, int arg)
-{
- EchoConfig *pConfig = ap_get_module_config(cmd->server->module_config,
- &echo_module);
- pConfig->bEnabled = arg;
-
- return NULL;
-}
-
-static int process_echo_connection(conn_rec *c)
-{
- apr_bucket_brigade *bb;
- apr_bucket *b;
- apr_status_t rv;
- EchoConfig *pConfig = ap_get_module_config(c->base_server->module_config,
- &echo_module);
-
- if (!pConfig->bEnabled) {
- return DECLINED;
- }
-
- do {
- bb = apr_brigade_create(c->pool, c->bucket_alloc);
-
- /* Get a single line of input from the client */
- if ((rv = ap_get_brigade(c->input_filters, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0) != APR_SUCCESS ||
- APR_BRIGADE_EMPTY(bb))) {
- apr_brigade_destroy(bb);
- break;
- }
-
- /* Make sure the data is flushed to the client */
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- /* Send back the data. */
- rv = ap_pass_brigade(c->output_filters, bb);
- } while (rv == APR_SUCCESS);
-
- return OK;
-}
-
-static const command_rec echo_cmds[] =
-{
- AP_INIT_FLAG("ProtocolEcho", echo_on, NULL, RSRC_CONF,
- "Run an echo server on this host"),
- { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_process_connection(process_echo_connection, NULL, NULL,
- APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA echo_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- create_echo_server_config, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- echo_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/echo/mod_echo.dsp b/modules/echo/mod_echo.dsp
deleted file mode 100644
index 6aee7fa286..0000000000
--- a/modules/echo/mod_echo.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_echo" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_echo - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_echo.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_echo.mak" CFG="mod_echo - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_echo - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_echo - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_echo - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_echo_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_echo.so" /base:@..\..\os\win32\BaseAddr.ref,mod_echo.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_echo.so" /base:@..\..\os\win32\BaseAddr.ref,mod_echo.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_echo - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_echo_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_echo.so" /base:@..\..\os\win32\BaseAddr.ref,mod_echo.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_echo.so" /base:@..\..\os\win32\BaseAddr.ref,mod_echo.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_echo - Win32 Release"
-# Name "mod_echo - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_echo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_echo.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_echo - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_echo.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_echo.so "echo_module for Apache" ../../include/ap_release.h > .\mod_echo.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_echo - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_echo.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_echo.so "echo_module for Apache" ../../include/ap_release.h > .\mod_echo.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/.cvsignore b/modules/experimental/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/experimental/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/experimental/.indent.pro b/modules/experimental/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/experimental/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/experimental/Makefile.in b/modules/experimental/Makefile.in
deleted file mode 100644
index 7c5c149d85..0000000000
--- a/modules/experimental/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/experimental/NWGNUauthldap b/modules/experimental/NWGNUauthldap
deleted file mode 100644
index 6115ccbe2c..0000000000
--- a/modules/experimental/NWGNUauthldap
+++ /dev/null
@@ -1,263 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(LDAPSDK)/inc \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = authldap
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) LDAP Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = AuthLDAP Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/authldap.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_auth_ldap.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- lldapsdk \
- lldapssl \
- lldapx \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- util_ldap_connection_find \
- util_ldap_connection_close \
- util_ldap_connection_unbind \
- util_ldap_connection_cleanup \
- util_ldap_cache_checkuserid \
- util_ldap_cache_compare \
- util_ldap_cache_comparedn \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- @$(LDAPSDK)/imports/lldapsdk.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- auth_ldap_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
- copy charset.conv $(INSTALL)\Apache2\conf\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/experimental/NWGNUcharsetl b/modules/experimental/NWGNUcharsetl
deleted file mode 100644
index e6b37ff25b..0000000000
--- a/modules/experimental/NWGNUcharsetl
+++ /dev/null
@@ -1,260 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- -DAP_WANT_DIR_TRANSLATION \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = charsetl
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Charset Lite Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = charsetl
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/charsetl.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_charset_lite.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- charset_lite_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/experimental/NWGNUdsk_cach b/modules/experimental/NWGNUdsk_cach
deleted file mode 100644
index 6780d12390..0000000000
--- a/modules/experimental/NWGNUdsk_cach
+++ /dev/null
@@ -1,267 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = dsk_cach
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Memory Cache Sub-Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = dsk_cach
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/dsk_cach.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_disk_cache.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Apache2 \
- Libc \
- mod_cach \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- @$(APR)/aprlib.imp \
- @httpd.imp \
- @mod_cache.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- disk_cache_module \
- $(EOLIST)
-
-# @cache.imp \
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/experimental/NWGNUexample b/modules/experimental/NWGNUexample
deleted file mode 100644
index adf0507955..0000000000
--- a/modules/experimental/NWGNUexample
+++ /dev/null
@@ -1,260 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = example
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Example Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Example Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/example.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_example.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- example_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/experimental/NWGNUmakefile b/modules/experimental/NWGNUmakefile
deleted file mode 100644
index f391d37cf4..0000000000
--- a/modules/experimental/NWGNUmakefile
+++ /dev/null
@@ -1,255 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/charsetl.nlm \
- $(OBJDIR)/example.nlm \
- $(OBJDIR)/mod_cach.nlm \
- $(OBJDIR)/mem_cach.nlm \
- $(OBJDIR)/dsk_cach.nlm \
- $(EOLIST)
-
-# If LDAPSDK has been defined then build the auth_ldap module
-ifneq "$(LDAPSDK)" ""
-TARGET_nlm += $(OBJDIR)/authldap.nlm \
- $(OBJDIR)/utilldap.nlm \
- $(EOLIST)
-endif
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/experimental/NWGNUmem_cach b/modules/experimental/NWGNUmem_cach
deleted file mode 100644
index 6d83d8ae69..0000000000
--- a/modules/experimental/NWGNUmem_cach
+++ /dev/null
@@ -1,271 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- -DDEBUG \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = mem_cach
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Memory Cache Sub-Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = mem_cach
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/mem_cach.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_mem_cache.o \
- $(OBJDIR)/cache_hash.o \
- $(OBJDIR)/cache_pqueue.o \
- $(OBJDIR)/cache_cache.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Apache2 \
- Libc \
- mod_cach \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- @$(APR)/aprlib.imp \
- @httpd.imp \
- @mod_cache.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- mem_cache_module \
- $(EOLIST)
-
-# @cache.imp \
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/experimental/NWGNUmod_cach b/modules/experimental/NWGNUmod_cach
deleted file mode 100644
index 55e1a73323..0000000000
--- a/modules/experimental/NWGNUmod_cach
+++ /dev/null
@@ -1,270 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/include/arch/NetWare \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/include \
- $(AP_WORK)/os/NetWare \
- $(AP_WORK)/server/mpm/NetWare \
- $(AP_WORK)/srclib/pcre \
- $(NWOS) \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- -DDEBUG \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = mod_cach
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Cache module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = mod_cach
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/mod_cach.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/cache_util.o \
- $(OBJDIR)/cache_storage.o \
- $(OBJDIR)/mod_cache.o \
- $(EOLIST)
-
-# $(OBJDIR)/mod_mem_cache.o \
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Apache2 \
- Libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- @$(APR)/aprlib.imp \
- @httpd.imp \
- @netware.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- @mod_cache.imp \
- cache_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/experimental/NWGNUutilldap b/modules/experimental/NWGNUutilldap
deleted file mode 100644
index aa15476e4e..0000000000
--- a/modules/experimental/NWGNUutilldap
+++ /dev/null
@@ -1,266 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(LDAPSDK)/inc \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = utilldap
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) LDAP Authentication Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = UtilLDAP Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/utilldap.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/util_ldap.o \
- $(OBJDIR)/util_ldap_cache.o \
- $(OBJDIR)/util_ldap_cache_mgr.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- lldapsdk \
- lldapssl \
- lldapx \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- @$(LDAPSDK)/imports/lldapsdk.imp \
- @$(LDAPSDK)/imports/lldapssl.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- ldap_module \
- util_ldap_connection_find \
- util_ldap_connection_close \
- util_ldap_connection_unbind \
- util_ldap_connection_cleanup \
- util_ldap_cache_checkuserid \
- util_ldap_cache_compare \
- util_ldap_cache_comparedn \
- util_ldap_ssl_supported \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/experimental/README b/modules/experimental/README
deleted file mode 100644
index 64824a6563..0000000000
--- a/modules/experimental/README
+++ /dev/null
@@ -1,41 +0,0 @@
-README for Apache 2.0 Example Module
-[April, 1997, updated May 2000]
-
-The files in the src/modules/example directory under the Apache
-distribution directory tree are provided as an example to those that
-wish to write modules that use the Apache API.
-
-The main file is mod_example.c, which illustrates all the different
-callback mechanisms and call syntaces. By no means does an add-on
-module need to include routines for all of the callbacks - quite the
-contrary!
-
-The example module is an actual working module. If you link it into
-your server, enable the "example-handler" handler for a location, and then
-browse to that location, you will see a display of some of the tracing
-the example module did as the various callbacks were made.
-
-To include the example module in your server add --enable-example to the
-other ./configure arguments executed from the httpd-2.1 directory. After
-that run 'make'.
-
-To add another module of your own:
-
- A. cp modules/experimental/mod_example.c modules/experimental/mod_myexample.c
- B. Modify the file
- C. Build the server with --enable--myexample
-
-To activate the example module, include a block similar to the
-following in your httpd.conf file:
-
- <Location /example-info>
- SetHandler example-handler
- </Location>
-
-As an alternative, you can put the following into a .htaccess file and
-then request the file "test.example" from that location:
-
- AddHandler example-handler .example
-
-After reloading/restarting your server, you should be able to browse
-to this location and see the brief display mentioned earlier.
diff --git a/modules/experimental/README.ldap b/modules/experimental/README.ldap
deleted file mode 100644
index c9445b8153..0000000000
--- a/modules/experimental/README.ldap
+++ /dev/null
@@ -1,47 +0,0 @@
-Quick installation instructions (UNIX):
-
-- Building on generic Unix:
-
- Add generic ldap support and the TWO ldap modules to the build, like this:
-
- ./configure --with-ldap --enable-ldap --enable-auth-ldap
-
- The --with-ldap switches on LDAP library linking in apr-util. Make
- sure that you have an LDAP client library available such as those
- from Netscape/iPlanet/Sun One or the OpenLDAP project.
-
- The --enable-ldap option switches on the LDAP caching module. This
- module is a support module for other LDAP modules, and is not useful
- on its own. This module is required, but caching can be disabled
- via the configuration directive LDAPCacheEntries.
-
- The --enable-auth-ldap option switches on the LDAP authentication
- module.
-
-- Building on AIX:
-
- The following ./configure line is reported to work for AIX:
-
- CC=cc_r; export CC
- CPPFLAGS=-qcpluscmt;export CPPFLAGS
- ./configure --with-mpm=worker --prefix=/usr/local/apache \
- --enable-dav=static --enable-dav_fs=static --enable-ssl=static
- --with-ldap=yes --with-ldap-include=/usr/local/include
- --with-ldap-lib=/usr/local/lib --enable-ldap=static
- --enable-auth_ldap=static
-
-
-Quick installation instructions (win32):
-
-1. copy the file srclib\apr-util\include\apr_ldap.hw to apr_ldap.h
-2. the netscape/iplanet ldap libraries are installed in srclib\ldap
-3. Compile the two modules util_ldap and mod_auth_ldap using the dsp files
-4. You get a mod_auth_ldap.so and a util_ldap.so module
-5. Put them in the modules directory, don't forget to copy the
- nsldap32v50.dll somewhere where apache.exe will find it
-6. Load the two modules in your httpd.conf, like below:
- LoadModule ldap_module modules/util_ldap.so
- LoadModule auth_ldap_module modules/mod_auth_ldap.so
-7. Configure the directories as described in the docus.
-
-
diff --git a/modules/experimental/cache_cache.c b/modules/experimental/cache_cache.c
deleted file mode 100644
index 2305370c23..0000000000
--- a/modules/experimental/cache_cache.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_general.h"
-
-#include "mod_cache.h"
-#include "cache_hash.h"
-#include "cache_pqueue.h"
-#include "cache_cache.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-
-struct cache_cache_t {
- int max_entries;
- apr_size_t max_size;
- apr_size_t current_size;
- int total_purges;
- long queue_clock;
- cache_hash_t *ht;
- cache_pqueue_t *pq;
- cache_pqueue_set_priority set_pri;
- cache_pqueue_get_priority get_pri;
- cache_cache_inc_frequency *inc_entry;
- cache_cache_get_size *size_entry;
- cache_cache_get_key *key_entry;
- cache_cache_free *free_entry;
-};
-
-CACHE_DECLARE(cache_cache_t *)cache_init(int max_entries,
- apr_size_t max_size,
- cache_pqueue_get_priority get_pri,
- cache_pqueue_set_priority set_pri,
- cache_pqueue_getpos get_pos,
- cache_pqueue_setpos set_pos,
- cache_cache_inc_frequency *inc_entry,
- cache_cache_get_size *size_entry,
- cache_cache_get_key* key_entry,
- cache_cache_free *free_entry)
-{
- cache_cache_t *tmp;
- tmp = malloc(sizeof(cache_cache_t));
- tmp->max_entries = max_entries;
- tmp->max_size = max_size;
- tmp->current_size = 0;
- tmp->total_purges = 0;
- tmp->queue_clock = 0;
- tmp->get_pri = get_pri;
- tmp->set_pri = set_pri;
- tmp->inc_entry = inc_entry;
- tmp->size_entry = size_entry;
- tmp->key_entry = key_entry;
- tmp->free_entry = free_entry;
-
- tmp->ht = cache_hash_make(max_entries);
- tmp->pq = cache_pq_init(max_entries, get_pri, get_pos, set_pos);
-
- return tmp;
-}
-
-CACHE_DECLARE(void) cache_free(cache_cache_t *c)
-{
- cache_pq_free(c->pq);
- cache_hash_free(c->ht);
- free(c);
-}
-
-
-CACHE_DECLARE(void*) cache_find(cache_cache_t* c, const char *key)
-{
- void *e;
-
- e = cache_hash_get(c->ht, key, CACHE_HASH_KEY_STRING);
- if (!e)
- return NULL;
-
- return e;
-}
-
-CACHE_DECLARE(void) cache_update(cache_cache_t* c, void *entry)
-{
- long old_priority;
- long new_priority;
-
- old_priority = c->set_pri(c->queue_clock, entry);
- c->inc_entry(entry);
- new_priority = c->set_pri(c->queue_clock, entry);
- cache_pq_change_priority(c->pq, old_priority, new_priority, entry);
-}
-
-CACHE_DECLARE(void) cache_insert(cache_cache_t* c, void *entry)
-{
- void *ejected = NULL;
- long priority;
-
- c->set_pri(c->queue_clock, entry);
- /* FIX: check if priority of bottom item is greater than inserted one */
- while ((cache_pq_size(c->pq) >= c->max_entries) ||
- ((c->current_size + c->size_entry(entry)) > c->max_size)) {
-
- ejected = cache_pq_pop(c->pq);
- /* FIX: If ejected is NULL, we'll segfault here */
- priority = c->get_pri(ejected);
-
- if (c->queue_clock > priority)
- c->queue_clock = priority;
-
- cache_hash_set(c->ht,
- c->key_entry(ejected),
- CACHE_HASH_KEY_STRING,
- NULL);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL, "Cache Purge of %s",c->key_entry(ejected));
- c->current_size -= c->size_entry(ejected);
- c->free_entry(ejected);
- c->total_purges++;
- }
- c->current_size += c->size_entry(entry);
-
- cache_pq_insert(c->pq, entry);
- cache_hash_set(c->ht, c->key_entry(entry), CACHE_HASH_KEY_STRING, entry);
-}
-
-CACHE_DECLARE(void *) cache_pop(cache_cache_t *c)
-{
- void *entry;
-
- if (!c)
- return NULL;
-
- entry = cache_pq_pop(c->pq);
-
- if (!entry)
- return NULL;
-
- c->current_size -= c->size_entry(entry);
- cache_hash_set(c->ht, c->key_entry(entry), CACHE_HASH_KEY_STRING, NULL);
-
- return entry;
-}
-
-CACHE_DECLARE(apr_status_t) cache_remove(cache_cache_t *c, void *entry)
-{
- apr_size_t entry_size = c->size_entry(entry);
- apr_status_t rc;
- rc = cache_pq_remove(c->pq, entry);
- if (rc != APR_SUCCESS)
- return rc;
-
- cache_hash_set(c->ht, c->key_entry(entry), CACHE_HASH_KEY_STRING, NULL);
- c->current_size -= entry_size;
-
- return APR_SUCCESS;
-}
diff --git a/modules/experimental/cache_cache.h b/modules/experimental/cache_cache.h
deleted file mode 100644
index acc94a7dee..0000000000
--- a/modules/experimental/cache_cache.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef CACHE_CACHE_H
-#define CACHE_CACHE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "mod_cache.h"
-
-/**
- * @file cache_hash.h
- * @brief Cache Cache Functions
- */
-
-/**
- * @defgroup Cache_cache Cache Functions
- * @ingroup CACHE
- * @{
- */
-/** ADT for the cache */
-typedef struct cache_cache_t cache_cache_t;
-
-/** callback to increment the frequency of a item */
-typedef void cache_cache_inc_frequency(void*a);
-/** callback to get the size of a item */
-typedef apr_size_t cache_cache_get_size(void*a);
-/** callback to get the key of a item */
-typedef const char* cache_cache_get_key(void *a);
-/** callback to free an entry */
-typedef void cache_cache_free(void *a);
-
-/**
- * initialize the cache ADT
- * @param max_entries the number of entries in the cache
- * @param max_size the size of the cache
- * @param get_pri callback to get a priority of a entry
- * @param set_pri callback to set a priority of a entry
- * @param get_pos callback to get the position of a entry in the cache
- * @param set_pos callback to set the position of a entry in the cache
- * @param inc_entry callback to increment the frequency of a entry
- * @param size_entry callback to get the size of a entry
- * @param key_entry callback to get the key of a entry
- * @param free_entry callback to free an entry
- */
-CACHE_DECLARE(cache_cache_t *)cache_init(int max_entries,
- apr_size_t max_size,
- cache_pqueue_get_priority get_pri,
- cache_pqueue_set_priority set_pri,
- cache_pqueue_getpos get_pos,
- cache_pqueue_setpos set_pos,
- cache_cache_inc_frequency *inc_entry,
- cache_cache_get_size *size_entry,
- cache_cache_get_key *key_entry,
- cache_cache_free *free_entry);
-
-/**
- * free up the cache
- * @param c the cache
- */
-CACHE_DECLARE(void) cache_free(cache_cache_t *c);
-/**
- * find a entry in the cache, incrementing the frequency if found
- * @param c the cache
- * @param key the key
- */
-CACHE_DECLARE(void*) cache_find(cache_cache_t* c, const char *key);
-/**
- * insert a entry into the cache
- * @param c the cache
- * @param entry the entry
- */
-CACHE_DECLARE(void) cache_update(cache_cache_t* c, void *entry);
-/**
- * insert a entry into the cache
- * @param c the cache
- * @param entry the entry
- */
-CACHE_DECLARE(void) cache_insert(cache_cache_t* c, void *entry);
-/**
- * pop the lowest priority item off
- * @param c the cache
- * @returns the entry or NULL
- */
-CACHE_DECLARE(void *)cache_pop(cache_cache_t* c);
-/**
- * remove an item from the cache
- * @param c the cache
- * @param entry the actual entry (from a find)
- */
-CACHE_DECLARE(apr_status_t) cache_remove(cache_cache_t* c, void *entry);
-/** @} */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !CACHE_CACHE_H */
diff --git a/modules/experimental/cache_hash.c b/modules/experimental/cache_hash.c
deleted file mode 100644
index c51e48e53e..0000000000
--- a/modules/experimental/cache_hash.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_general.h"
-
-#include "mod_cache.h"
-#include "cache_hash.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-
-
-/*
- * The internal form of a hash table.
- *
- * The table is an array indexed by the hash of the key; collisions
- * are resolved by hanging a linked list of hash entries off each
- * element of the array. Although this is a really simple design it
- * isn't too bad given that pools have a low allocation overhead.
- */
-
-typedef struct cache_hash_entry_t cache_hash_entry_t;
-
-struct cache_hash_entry_t {
- cache_hash_entry_t *next;
- unsigned int hash;
- const void *key;
- apr_ssize_t klen;
- const void *val;
-};
-
-/*
- * Data structure for iterating through a hash table.
- *
- * We keep a pointer to the next hash entry here to allow the current
- * hash entry to be freed or otherwise mangled between calls to
- * cache_hash_next().
- */
-struct cache_hash_index_t {
- cache_hash_t *ht;
- cache_hash_entry_t *this, *next;
- int index;
-};
-
-/*
- * The size of the array is always a power of two. We use the maximum
- * index rather than the size so that we can use bitwise-AND for
- * modular arithmetic.
- * The count of hash entries may be greater depending on the chosen
- * collision rate.
- */
-struct cache_hash_t {
- cache_hash_entry_t **array;
- cache_hash_index_t iterator; /* For cache_hash_first(NULL, ...) */
- int count, max;
-};
-
-/*
- * Hash creation functions.
- */
-static cache_hash_entry_t **alloc_array(cache_hash_t *ht, int max)
-{
- return calloc(1, sizeof(*ht->array) * (max + 1));
-}
-
-CACHE_DECLARE(cache_hash_t *) cache_hash_make(apr_size_t size)
-{
- cache_hash_t *ht;
- ht = malloc(sizeof(cache_hash_t));
- if (!ht) {
- return NULL;
- }
- ht->count = 0;
- ht->max = size;
- ht->array = alloc_array(ht, ht->max);
- if (!ht->array) {
- free(ht);
- return NULL;
- }
- return ht;
-}
-
-CACHE_DECLARE(void) cache_hash_free(cache_hash_t *ht)
-{
- if (ht) {
- if (ht->array) {
- free (ht->array);
- }
- free (ht);
- }
-}
-/*
- * Hash iteration functions.
- */
-
-CACHE_DECLARE(cache_hash_index_t *) cache_hash_next(cache_hash_index_t *hi)
-{
- hi->this = hi->next;
- while (!hi->this) {
- if (hi->index > hi->ht->max)
- return NULL;
- hi->this = hi->ht->array[hi->index++];
- }
- hi->next = hi->this->next;
- return hi;
-}
-
-CACHE_DECLARE(cache_hash_index_t *) cache_hash_first(cache_hash_t *ht)
-{
- cache_hash_index_t *hi;
-
- hi = &ht->iterator;
- hi->ht = ht;
- hi->index = 0;
- hi->this = NULL;
- hi->next = NULL;
- return cache_hash_next(hi);
-}
-
-CACHE_DECLARE(void) cache_hash_this(cache_hash_index_t *hi,
- const void **key,
- apr_ssize_t *klen,
- void **val)
-{
- if (key) *key = hi->this->key;
- if (klen) *klen = hi->this->klen;
- if (val) *val = (void *)hi->this->val;
-}
-
-
-/*
- * This is where we keep the details of the hash function and control
- * the maximum collision rate.
- *
- * If val is non-NULL it creates and initializes a new hash entry if
- * there isn't already one there; it returns an updatable pointer so
- * that hash entries can be removed.
- */
-
-static cache_hash_entry_t **find_entry(cache_hash_t *ht,
- const void *key,
- apr_ssize_t klen,
- const void *val)
-{
- cache_hash_entry_t **hep, *he;
- const unsigned char *p;
- unsigned int hash;
- apr_ssize_t i;
-
- /*
- * This is the popular `times 33' hash algorithm which is used by
- * perl and also appears in Berkeley DB. This is one of the best
- * known hash functions for strings because it is both computed
- * very fast and distributes very well.
- *
- * The originator may be Dan Bernstein but the code in Berkeley DB
- * cites Chris Torek as the source. The best citation I have found
- * is "Chris Torek, Hash function for text in C, Usenet message
- * <27038@mimsy.umd.edu> in comp.lang.c , October, 1990." in Rich
- * Salz's USENIX 1992 paper about INN which can be found at
- * <http://citeseer.nj.nec.com/salz92internetnews.html>.
- *
- * The magic of number 33, i.e. why it works better than many other
- * constants, prime or not, has never been adequately explained by
- * anyone. So I try an explanation: if one experimentally tests all
- * multipliers between 1 and 256 (as I did while writing a low-level
- * data structure library some time ago) one detects that even
- * numbers are not useable at all. The remaining 128 odd numbers
- * (except for the number 1) work more or less all equally well.
- * They all distribute in an acceptable way and this way fill a hash
- * table with an average percent of approx. 86%.
- *
- * If one compares the chi^2 values of the variants (see
- * Bob Jenkins ``Hashing Frequently Asked Questions'' at
- * http://burtleburtle.net/bob/hash/hashfaq.html for a description
- * of chi^2), the number 33 not even has the best value. But the
- * number 33 and a few other equally good numbers like 17, 31, 63,
- * 127 and 129 have nevertheless a great advantage to the remaining
- * numbers in the large set of possible multipliers: their multiply
- * operation can be replaced by a faster operation based on just one
- * shift plus either a single addition or subtraction operation. And
- * because a hash function has to both distribute good _and_ has to
- * be very fast to compute, those few numbers should be preferred.
- *
- * -- Ralf S. Engelschall <rse@engelschall.com>
- */
- hash = 0;
- if (klen == CACHE_HASH_KEY_STRING) {
- for (p = key; *p; p++) {
- hash = hash * 33 + *p;
- }
- klen = p - (const unsigned char *)key;
- }
- else {
- for (p = key, i = klen; i; i--, p++) {
- hash = hash * 33 + *p;
- }
- }
-
- /* scan linked list */
- for (hep = &ht->array[hash % ht->max], he = *hep;
- he;
- hep = &he->next, he = *hep) {
- if (he->hash == hash &&
- he->klen == klen &&
- memcmp(he->key, key, klen) == 0)
- break;
- }
- if (he || !val)
- return hep;
- /* add a new entry for non-NULL values */
- he = malloc(sizeof(*he));
- if (!he) {
- return NULL;
- }
- he->next = NULL;
- he->hash = hash;
- he->key = key;
- he->klen = klen;
- he->val = val;
- *hep = he;
- ht->count++;
- return hep;
-}
-
-CACHE_DECLARE(void *) cache_hash_get(cache_hash_t *ht,
- const void *key,
- apr_ssize_t klen)
-{
- cache_hash_entry_t *he;
- he = *find_entry(ht, key, klen, NULL);
- if (he)
- return (void *)he->val;
- else
- return NULL;
-}
-
-CACHE_DECLARE(void *) cache_hash_set(cache_hash_t *ht,
- const void *key,
- apr_ssize_t klen,
- const void *val)
-{
- cache_hash_entry_t **hep, *tmp;
- const void *tval;
- hep = find_entry(ht, key, klen, val);
- /* If hep == NULL, then the malloc() in find_entry failed */
- if (hep && *hep) {
- if (!val) {
- /* delete entry */
- tval = (*hep)->val;
- tmp = *hep;
- *hep = (*hep)->next;
- free(tmp);
- --ht->count;
- }
- else {
- /* replace entry */
- tval = (*hep)->val;
- (*hep)->val = val;
- }
- /* Return the object just removed from the cache to let the
- * caller clean it up. Cast the constness away upon return.
- */
- return (void *) tval;
- }
- /* else key not present and val==NULL */
- return NULL;
-}
-
-CACHE_DECLARE(int) cache_hash_count(cache_hash_t *ht)
-{
- return ht->count;
-}
diff --git a/modules/experimental/cache_hash.h b/modules/experimental/cache_hash.h
deleted file mode 100644
index 798f45964c..0000000000
--- a/modules/experimental/cache_hash.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef CACHE_HASH_H
-#define CACHE_HASH_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "mod_cache.h"
-
-/**
- * @file cache_hash.h
- * @brief Cache Hash Tables
- */
-
-/**
- * @defgroup Cache_Hash Hash Tables
- * @ingroup CACHE
- * @{
- */
-
-/**
- * When passing a key to cache_hash_set or cache_hash_get, this value can be
- * passed to indicate a string-valued key, and have cache_hash compute the
- * length automatically.
- *
- * @remark cache_hash will use strlen(key) for the length. The null-terminator
- * is not included in the hash value (why throw a constant in?).
- * Since the hash table merely references the provided key (rather
- * than copying it), cache_hash_this() will return the null-term'd key.
- */
-#define CACHE_HASH_KEY_STRING (-1)
-
-/**
- * Abstract type for hash tables.
- */
-typedef struct cache_hash_t cache_hash_t;
-
-/**
- * Abstract type for scanning hash tables.
- */
-typedef struct cache_hash_index_t cache_hash_index_t;
-
-/**
- * Create a hash table.
- * @param size
- * @return The hash table just created
- */
-CACHE_DECLARE(cache_hash_t *) cache_hash_make(apr_size_t size);
-
-/**
- * Create a hash table.
- * @param *ht Pointer to the hash table to be freed.
- * @return void
- * @remark The caller should ensure that all objects have been removed
- * from the cache prior to calling cache_hash_free(). Objects
- * not removed from the cache prior to calling cache_hash_free()
- * will be unaccessable.
- */
-CACHE_DECLARE(void) cache_hash_free(cache_hash_t *ht);
-
-
-/**
- * Associate a value with a key in a hash table.
- * @param ht The hash table
- * @param key Pointer to the key
- * @param klen Length of the key. Can be CACHE_HASH_KEY_STRING to use the string length.
- * @param val Value to associate with the key
- * @remark If the value is NULL the hash entry is deleted.
- * @return The value of the deleted cache entry (so the caller can clean it up).
- */
-CACHE_DECLARE(void *) cache_hash_set(cache_hash_t *ht, const void *key,
- apr_ssize_t klen, const void *val);
-
-/**
- * Look up the value associated with a key in a hash table.
- * @param ht The hash table
- * @param key Pointer to the key
- * @param klen Length of the key. Can be CACHE_HASH_KEY_STRING to use the string length.
- * @return Returns NULL if the key is not present.
- */
-CACHE_DECLARE(void *) cache_hash_get(cache_hash_t *ht, const void *key,
- apr_ssize_t klen);
-
-/**
- * Start iterating over the entries in a hash table.
- * @param ht The hash table
- * @example
- */
-/**
- * <PRE>
- *
- * int sum_values(cache_hash_t *ht)
- * {
- * cache_hash_index_t *hi;
- * void *val;
- * int sum = 0;
- * for (hi = cache_hash_first(ht); hi; hi = cache_hash_next(hi)) {
- * cache_hash_this(hi, NULL, NULL, &val);
- * sum += *(int *)val;
- * }
- * return sum;
- * }
- *
- * There is no restriction on adding or deleting hash entries during an
- * iteration (although the results may be unpredictable unless all you do
- * is delete the current entry) and multiple iterations can be in
- * progress at the same time.
- * </PRE>
- */
-CACHE_DECLARE(cache_hash_index_t *) cache_hash_first(cache_hash_t *ht);
-
-/**
- * Continue iterating over the entries in a hash table.
- * @param hi The iteration state
- * @return a pointer to the updated iteration state. NULL if there are no more
- * entries.
- */
-CACHE_DECLARE(cache_hash_index_t *) cache_hash_next(cache_hash_index_t *hi);
-
-/**
- * Get the current entry's details from the iteration state.
- * @param hi The iteration state
- * @param key Return pointer for the pointer to the key.
- * @param klen Return pointer for the key length.
- * @param val Return pointer for the associated value.
- * @remark The return pointers should point to a variable that will be set to the
- * corresponding data, or they may be NULL if the data isn't interesting.
- */
-CACHE_DECLARE(void) cache_hash_this(cache_hash_index_t *hi, const void **key,
- apr_ssize_t *klen, void **val);
-
-/**
- * Get the number of key/value pairs in the hash table.
- * @param ht The hash table
- * @return The number of key/value pairs in the hash table.
- */
-CACHE_DECLARE(int) cache_hash_count(cache_hash_t *ht);
-
-
-/** @} */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !CACHE_HASH_H */
diff --git a/modules/experimental/cache_pqueue.c b/modules/experimental/cache_pqueue.c
deleted file mode 100644
index 0ea3d794d4..0000000000
--- a/modules/experimental/cache_pqueue.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_general.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "cache_pqueue.h"
-#define left(i) (2*(i))
-#define right(i) ((2*(i))+1)
-#define parent(i) ((i)/2)
-/*
- * Priority queue structure
- */
-struct cache_pqueue_t
-{
- apr_ssize_t size;
- apr_ssize_t avail;
- apr_ssize_t step;
- cache_pqueue_get_priority pri;
- cache_pqueue_getpos get;
- cache_pqueue_setpos set;
- void **d;
-};
-
-cache_pqueue_t *cache_pq_init(apr_ssize_t n,
- cache_pqueue_get_priority pri,
- cache_pqueue_getpos get,
- cache_pqueue_setpos set)
-{
- cache_pqueue_t *q;
-
- if (!(q = malloc(sizeof(cache_pqueue_t)))) {
- return NULL;
- }
-
- /* Need to allocate n+1 elements since element 0 isn't used. */
- if (!(q->d = malloc(sizeof(void*) * (n+1)))) {
- free(q);
- return NULL;
- }
- q->avail = q->step = (n+1); /* see comment above about n+1 */
- q->pri = pri;
- q->size = 1;
- q->get = get;
- q->set = set;
- return q;
-}
-/*
- * cleanup
- */
-void cache_pq_free(cache_pqueue_t *q)
-{
- free(q->d);
- free(q);
-}
-/*
- * pqsize: size of the queue.
- */
-apr_ssize_t cache_pq_size(cache_pqueue_t *q)
-{
- /* queue element 0 exists but doesn't count since it isn't used. */
- return (q->size - 1);
-}
-
-static void cache_pq_bubble_up(cache_pqueue_t *q, apr_ssize_t i)
-{
- apr_ssize_t parent_node;
- void *moving_node = q->d[i];
- long moving_pri = q->pri(moving_node);
-
- for (parent_node = parent(i);
- ((i > 1) && (q->pri(q->d[parent_node]) < moving_pri));
- i = parent_node, parent_node = parent(i))
- {
- q->d[i] = q->d[parent_node];
- q->set(q->d[i], i);
- }
-
- q->d[i] = moving_node;
- q->set(moving_node, i);
-}
-
-static apr_ssize_t maxchild(cache_pqueue_t *q, apr_ssize_t i)
-{
- apr_ssize_t child_node = left(i);
-
- if (child_node >= q->size)
- return 0;
-
- if ((child_node+1 < q->size) &&
- (q->pri(q->d[child_node+1]) > q->pri(q->d[child_node])))
- {
- child_node++; /* use right child instead of left */
- }
-
- return child_node;
-}
-
-static void cache_pq_percolate_down(cache_pqueue_t *q, apr_ssize_t i)
-{
- apr_ssize_t child_node;
- void *moving_node = q->d[i];
- long moving_pri = q->pri(moving_node);
-
- while ((child_node = maxchild(q, i)) &&
- (moving_pri < q->pri(q->d[child_node])))
- {
- q->d[i] = q->d[child_node];
- q->set(q->d[i], i);
- i = child_node;
- }
-
- q->d[i] = moving_node;
- q->set(moving_node, i);
-}
-
-apr_status_t cache_pq_insert(cache_pqueue_t *q, void *d)
-{
- void *tmp;
- apr_ssize_t i;
- apr_ssize_t newsize;
-
- if (!q) return APR_EGENERAL;
-
- /* allocate more memory if necessary */
- if (q->size >= q->avail) {
- newsize = q->size + q->step;
- if (!(tmp = realloc(q->d, sizeof(void*) * newsize))) {
- return APR_EGENERAL;
- };
- q->d = tmp;
- q->avail = newsize;
- }
-
- /* insert item */
- i = q->size++;
- q->d[i] = d;
- cache_pq_bubble_up(q, i);
- return APR_SUCCESS;
-}
-
-/*
- * move a existing entry to a new priority
- */
-void cache_pq_change_priority(cache_pqueue_t *q,
- long old_priority,
- long new_priority,
- void *d)
-{
- apr_ssize_t posn;
-
- posn = q->get(d);
- if (new_priority > old_priority)
- cache_pq_bubble_up(q, posn);
- else
- cache_pq_percolate_down(q, posn);
-}
-
-apr_status_t cache_pq_remove(cache_pqueue_t *q, void *d)
-{
- apr_ssize_t posn = q->get(d);
- q->d[posn] = q->d[--q->size];
- if (q->pri(q->d[posn]) > q->pri(d))
- cache_pq_bubble_up(q, posn);
- else
- cache_pq_percolate_down(q, posn);
-
- return APR_SUCCESS;
-}
-
-void *cache_pq_pop(cache_pqueue_t *q)
-{
- void *head;
-
- if (!q || q->size == 1)
- return NULL;
-
- head = q->d[1];
- q->d[1] = q->d[--q->size];
- cache_pq_percolate_down(q, 1);
-
- return head;
-}
-
-void *cache_pq_peek(cache_pqueue_t *q)
-{
- void *d;
- if (!q || q->size == 1)
- return NULL;
- d = q->d[1];
- return d;
-}
-
-static void cache_pq_set_null( void*d, apr_ssize_t val)
-{
- /* do nothing */
-}
-
-/*
- * this is a debug function.. so it's EASY not fast
- */
-void cache_pq_dump(cache_pqueue_t *q,
- FILE*out,
- cache_pqueue_print_entry print)
-{
- int i;
-
- fprintf(stdout,"posn\tleft\tright\tparent\tmaxchild\t...\n");
- for (i = 1; i < q->size ;i++) {
- fprintf(stdout,
- "%d\t%d\t%d\t%d\t%" APR_SSIZE_T_FMT "\t",
- i,
- left(i), right(i), parent(i),
- maxchild(q, i));
- print(out, q->d[i]);
- }
-}
-
-/*
- * this is a debug function.. so it's EASY not fast
- */
-void cache_pq_print(cache_pqueue_t *q,
- FILE*out,
- cache_pqueue_print_entry print)
-{
- cache_pqueue_t *dup;
- dup = cache_pq_init(q->size, q->pri, q->get, cache_pq_set_null);
- dup->size = q->size;
- dup->avail = q->avail;
- dup->step = q->step;
-
- memcpy(dup->d, q->d, q->size*sizeof(void*));
-
- while (cache_pq_size(dup) > 1) {
- void *e = NULL;
- e = cache_pq_pop(dup);
- if (e)
- print(out, e);
- else
- break;
- }
- cache_pq_free(dup);
-}
-
-static int cache_pq_subtree_is_valid(cache_pqueue_t *q, int pos)
-{
- if (left(pos) < q->size) {
- /* has a left child */
- if (q->pri(q->d[pos]) < q->pri(q->d[left(pos)]))
- return 0;
- if (!cache_pq_subtree_is_valid(q, left(pos)))
- return 0;
- }
- if (right(pos) < q->size) {
- /* has a right child */
- if (q->pri(q->d[pos]) < q->pri(q->d[right(pos)]))
- return 0;
- if (!cache_pq_subtree_is_valid(q, right(pos)))
- return 0;
- }
- return 1;
-}
-
-int cache_pq_is_valid(cache_pqueue_t *q)
-{
- return cache_pq_subtree_is_valid(q, 1);
-}
diff --git a/modules/experimental/cache_pqueue.h b/modules/experimental/cache_pqueue.h
deleted file mode 100644
index f01473f332..0000000000
--- a/modules/experimental/cache_pqueue.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef CACHE_PQUEUE_H
-#define CACHE_PQUEUE_H
-
-#include <apr.h>
-#include <apr_errno.h>
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** the cache priority queue handle */
-typedef struct cache_pqueue_t cache_pqueue_t;
-
-/**
- * callback function to assign a priority for a element
- * @param a the element
- * @return the score (the lower the score the longer it is kept int the queue)
- */
-typedef long (*cache_pqueue_set_priority)(long queue_clock, void *a);
-typedef long (*cache_pqueue_get_priority)(void *a);
-
-/** callback function to get a position of a element */
-typedef apr_ssize_t (*cache_pqueue_getpos)(void *a);
-
-/**
- * callback function to set a position of a element
- * @param a the element
- * @param pos the position to set it to
- */
-typedef void (*cache_pqueue_setpos)(void *a, apr_ssize_t pos);
-
-/** debug callback function to print a entry */
-typedef void (*cache_pqueue_print_entry)(FILE *out, void *a);
-
-/**
- * initialize the queue
- *
- * @param n the initial estimate of the number of queue items for which memory
- * should be preallocated
- * @param pri the callback function to run to assign a score to a element
- * @param get the callback function to get the current element's position
- * @param set the callback function to set the current element's position
- *
- * @Return the handle or NULL for insufficent memory
- */
-cache_pqueue_t *cache_pq_init(apr_ssize_t n,
- cache_pqueue_get_priority pri,
- cache_pqueue_getpos get,
- cache_pqueue_setpos set);
-/**
- * free all memory used by the queue
- * @param q the queue
- */
-void cache_pq_free(cache_pqueue_t *q);
-/**
- * return the size of the queue.
- * @param q the queue
- */
-apr_ssize_t cache_pq_size(cache_pqueue_t *q);
-
-/**
- * insert an item into the queue.
- * @param q the queue
- * @param d the item
- * @return APR_SUCCESS on success
- */
-apr_status_t cache_pq_insert(cache_pqueue_t *q, void *d);
-
-/*
- * move a existing entry to a different priority
- * @param q the queue
- * @param old the old priority
- * @param d the entry
- */
-void cache_pq_change_priority(cache_pqueue_t *q,
- long old_priority,
- long new_priority,
- void *d);
-
-/**
- * pop the highest-ranking item from the queue.
- * @param p the queue
- * @param d where to copy the entry to
- * @return NULL on error, otherwise the entry
- */
-void *cache_pq_pop(cache_pqueue_t *q);
-
-/**
- * remove an item from the queue.
- * @param p the queue
- * @param d the entry
- * @return APR_SUCCESS on success
- */
-apr_status_t cache_pq_remove(cache_pqueue_t *q, void *d);
-
-/**
- * access highest-ranking item without removing it.
- * @param q the queue
- * @param d the entry
- * @return NULL on error, otherwise the entry
- */
-void *cache_pq_peek(cache_pqueue_t *q);
-
-/**
- * print the queue
- * @internal
- * DEBUG function only
- * @param q the queue
- * @param out the output handle
- * @param the callback function to print the entry
- */
-void cache_pq_print(cache_pqueue_t *q,
- FILE *out,
- cache_pqueue_print_entry print);
-
-/**
- * dump the queue and it's internal structure
- * @internal
- * debug function only
- * @param q the queue
- * @param out the output handle
- * @param the callback function to print the entry
- */
-void cache_pq_dump(cache_pqueue_t *q,
- FILE *out,
- cache_pqueue_print_entry print);
-
-/**
- * checks that the pq is in the right order, etc
- * @internal
- * debug function only
- * @param q the queue
- */
-int cache_pq_is_valid(cache_pqueue_t *q);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !CACHE_PQUEUE_H */
diff --git a/modules/experimental/cache_storage.c b/modules/experimental/cache_storage.c
deleted file mode 100644
index 6c0bf9f066..0000000000
--- a/modules/experimental/cache_storage.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_cache.h"
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(remove_url)
- APR_HOOK_LINK(create_entity)
- APR_HOOK_LINK(open_entity)
-)
-
-extern APR_OPTIONAL_FN_TYPE(ap_cache_generate_key) *cache_generate_key;
-
-extern module AP_MODULE_DECLARE_DATA cache_module;
-
-/* -------------------------------------------------------------- */
-
-/*
- * delete all URL entities from the cache
- *
- */
-int cache_remove_url(request_rec *r, const char *types, char *url)
-{
- const char *next = types;
- const char *type;
- apr_status_t rv;
- char *key;
-
- rv = cache_generate_key(r,r->pool,&key);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- /* for each specified cache type, delete the URL */
- while(next) {
- type = ap_cache_tokstr(r->pool, next, &next);
- cache_run_remove_url(type, key);
- }
- return OK;
-}
-
-
-/*
- * create a new URL entity in the cache
- *
- * It is possible to store more than once entity per URL. This
- * function will always create a new entity, regardless of whether
- * other entities already exist for the same URL.
- *
- * The size of the entity is provided so that a cache module can
- * decide whether or not it wants to cache this particular entity.
- * If the size is unknown, a size of -1 should be set.
- */
-int cache_create_entity(request_rec *r, const char *types, char *url, apr_off_t size)
-{
- cache_handle_t *h = apr_pcalloc(r->pool, sizeof(cache_handle_t));
- const char *next = types;
- const char *type;
- char *key;
- apr_status_t rv;
- cache_request_rec *cache = (cache_request_rec *)
- ap_get_module_config(r->request_config, &cache_module);
-
- rv = cache_generate_key(r,r->pool,&key);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- /* for each specified cache type, delete the URL */
- while (next) {
- type = ap_cache_tokstr(r->pool, next, &next);
- switch (rv = cache_run_create_entity(h, r, type, key, size)) {
- case OK: {
- cache->handle = h;
- return OK;
- }
- case DECLINED: {
- continue;
- }
- default: {
- return rv;
- }
- }
- }
- return DECLINED;
-}
-
-/*
- * remove a specific URL entity from the cache
- *
- * The specific entity referenced by the cache_handle is removed
- * from the cache, and the cache_handle is closed.
- */
-/* XXX Don't think we need to pass in request_rec or types ... */
-int cache_remove_entity(request_rec *r, const char *types, cache_handle_t *h)
-{
- h->remove_entity(h);
- return 1;
-}
-
-/*
- * select a specific URL entity in the cache
- *
- * It is possible to store more than one entity per URL. Content
- * negotiation is used to select an entity. Once an entity is
- * selected, details of it are stored in the per request
- * config to save time when serving the request later.
- *
- * This function returns OK if successful, DECLINED if no
- * cached entity fits the bill.
- */
-int cache_select_url(request_rec *r, const char *types, char *url)
-{
- const char *next = types;
- const char *type;
- apr_status_t rv;
- cache_handle_t *h;
- char *key;
- cache_request_rec *cache = (cache_request_rec *)
- ap_get_module_config(r->request_config, &cache_module);
-
- rv = cache_generate_key(r,r->pool,&key);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- /* go through the cache types till we get a match */
- h = cache->handle = apr_palloc(r->pool, sizeof(cache_handle_t));
-
- while (next) {
- type = ap_cache_tokstr(r->pool, next, &next);
- switch ((rv = cache_run_open_entity(h, r, type, key))) {
- case OK: {
- char *vary = NULL;
- const char *varyhdr = NULL;
- if (cache_recall_entity_headers(h, r) != APR_SUCCESS) {
- /* TODO: Handle this error */
- return DECLINED;
- }
-
- /*
- * Check Content-Negotiation - Vary
- *
- * At this point we need to make sure that the object we found in the cache
- * is the same object that would be delivered to the client, when the
- * effects of content negotiation are taken into effect.
- *
- * In plain english, we want to make sure that a language-negotiated
- * document in one language is not given to a client asking for a
- * language negotiated document in a different language by mistake.
- *
- * This code makes the assumption that the storage manager will
- * cache the req_hdrs if the response contains a Vary
- * header.
- *
- * RFC2616 13.6 and 14.44 describe the Vary mechanism.
- */
- if ((varyhdr = apr_table_get(r->err_headers_out, "Vary")) == NULL) {
- varyhdr = apr_table_get(r->headers_out, "Vary");
- }
- vary = apr_pstrdup(r->pool, varyhdr);
- while (vary && *vary) {
- char *name = vary;
- const char *h1, *h2;
-
- /* isolate header name */
- while (*vary && !apr_isspace(*vary) && (*vary != ','))
- ++vary;
- while (*vary && (apr_isspace(*vary) || (*vary == ','))) {
- *vary = '\0';
- ++vary;
- }
-
- /*
- * is this header in the request and the header in the cached
- * request identical? If not, we give up and do a straight get
- */
- h1 = apr_table_get(r->headers_in, name);
- h2 = apr_table_get(h->req_hdrs, name);
- if (h1 == h2) {
- /* both headers NULL, so a match - do nothing */
- }
- else if (h1 && h2 && !strcmp(h1, h2)) {
- /* both headers exist and are equal - do nothing */
- }
- else {
- /* headers do not match, so Vary failed */
- ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, r->server,
- "cache_select_url(): Vary header mismatch - Cached document cannot be used. \n");
- apr_table_clear(r->headers_out);
- r->status_line = NULL;
- cache->handle = NULL;
- return DECLINED;
- }
- }
- return OK;
- }
- case DECLINED: {
- /* try again with next cache type */
- continue;
- }
- default: {
- /* oo-er! an error */
- cache->handle = NULL;
- return rv;
- }
- }
- }
- cache->handle = NULL;
- return DECLINED;
-}
-
-apr_status_t cache_store_entity_headers(cache_handle_t *h,
- request_rec *r,
- cache_info *info)
-{
- return (h->store_headers(h, r, info));
-}
-
-apr_status_t cache_store_entity_body(cache_handle_t *h, request_rec *r,
- apr_bucket_brigade *b)
-{
- return (h->store_body(h, r, b));
-}
-
-apr_status_t cache_recall_entity_headers(cache_handle_t *h, request_rec *r)
-{
- apr_status_t rv;
- cache_info *info = &(h->cache_obj->info);
-
- /* Build the header table from info in the info struct */
- rv = h->recall_headers(h, r);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- r->filename = apr_pstrdup(r->pool, info->filename );
-
- return APR_SUCCESS;
-}
-
-apr_status_t cache_recall_entity_body(cache_handle_t *h, apr_pool_t *p,
- apr_bucket_brigade *b)
-{
- return (h->recall_body(h, p, b));
-}
-
-apr_status_t cache_generate_key_default( request_rec *r, apr_pool_t*p, char**key )
-{
- if (r->hostname) {
- *key = apr_pstrcat(p, r->hostname, r->uri, "?", r->args, NULL);
- }
- else {
- *key = apr_pstrcat(p, r->uri, "?", r->args, NULL);
- }
- return APR_SUCCESS;
-}
-
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(cache, CACHE, int, create_entity,
- (cache_handle_t *h, request_rec *r, const char *type,
- const char *urlkey, apr_off_t len),
- (h, r, type,urlkey,len),DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(cache, CACHE, int, open_entity,
- (cache_handle_t *h, request_rec *r, const char *type,
- const char *urlkey),(h,r,type,urlkey),
- DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(cache, CACHE, int, remove_url,
- (const char *type, const char *urlkey),
- (type,urlkey),OK,DECLINED)
-
-
diff --git a/modules/experimental/cache_util.c b/modules/experimental/cache_util.c
deleted file mode 100644
index 074f56651e..0000000000
--- a/modules/experimental/cache_util.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_cache.h"
-
-
-
-/* -------------------------------------------------------------- */
-
-/* return true if the request is conditional */
-CACHE_DECLARE(int) ap_cache_request_is_conditional(request_rec *r)
-{
- if (apr_table_get(r->headers_in, "If-Match") ||
- apr_table_get(r->headers_in, "If-None-Match") ||
- apr_table_get(r->headers_in, "If-Modified-Since") ||
- apr_table_get(r->headers_in, "If-Unmodified-Since")) {
- return 1;
- }
- return 0;
-}
-
-CACHE_DECLARE(const char *)ap_cache_get_cachetype(request_rec *r,
- cache_server_conf *conf,
- const char *url)
-{
- const char *type = NULL;
- int i;
-
- /* we can't cache if there's no URL */
- if (!url) return NULL;
-
- /* loop through all the cacheenable entries */
- for (i = 0; i < conf->cacheenable->nelts; i++) {
- struct cache_enable *ent =
- (struct cache_enable *)conf->cacheenable->elts;
- const char *thisurl = ent[i].url;
- const char *thistype = ent[i].type;
- if ((thisurl) && !strncasecmp(thisurl, url, strlen(thisurl))) {
- if (!type) {
- type = thistype;
- }
- else {
- type = apr_pstrcat(r->pool, type, ",", thistype, NULL);
- }
- }
- }
-
- /* then loop through all the cachedisable entries
- * Looking for urls that contain the full cachedisable url and possibly
- * more.
- * This means we are disabling cachedisable url and below...
- */
- for (i = 0; i < conf->cachedisable->nelts; i++) {
- struct cache_disable *ent =
- (struct cache_disable *)conf->cachedisable->elts;
- const char *thisurl = ent[i].url;
- if ((thisurl) && !strncasecmp(thisurl, url, strlen(thisurl))) {
- type = NULL;
- }
- }
-
- return type;
-}
-
-
-/* do a HTTP/1.1 age calculation */
-CACHE_DECLARE(apr_int64_t) ap_cache_current_age(cache_info *info,
- const apr_time_t age_value,
- apr_time_t now)
-{
- apr_time_t apparent_age, corrected_received_age, response_delay,
- corrected_initial_age, resident_time, current_age,
- age_value_usec;
-
- age_value_usec = apr_time_from_sec(age_value);
-
- /* Perform an HTTP/1.1 age calculation. (RFC2616 13.2.3) */
-
- apparent_age = MAX(0, info->response_time - info->date);
- corrected_received_age = MAX(apparent_age, age_value_usec);
- response_delay = info->response_time - info->request_time;
- corrected_initial_age = corrected_received_age + response_delay;
- resident_time = now - info->response_time;
- current_age = corrected_initial_age + resident_time;
-
- return apr_time_sec(current_age);
-}
-
-CACHE_DECLARE(int) ap_cache_check_freshness(cache_request_rec *cache,
- request_rec *r)
-{
- apr_int64_t age, maxage_req, maxage_cresp, maxage, smaxage, maxstale;
- apr_int64_t minfresh;
- int age_in_errhdr = 0;
- const char *cc_cresp, *cc_ceresp, *cc_req;
- const char *agestr = NULL;
- const char *expstr = NULL;
- char *val;
- apr_time_t age_c = 0;
- cache_info *info = &(cache->handle->cache_obj->info);
-
- /*
- * We now want to check if our cached data is still fresh. This depends
- * on a few things, in this order:
- *
- * - RFC2616 14.9.4 End to end reload, Cache-Control: no-cache. no-cache in
- * either the request or the cached response means that we must
- * revalidate the request unconditionally, overriding any expiration
- * mechanism. It's equivalent to max-age=0,must-revalidate.
- *
- * - RFC2616 14.32 Pragma: no-cache This is treated the same as
- * Cache-Control: no-cache.
- *
- * - RFC2616 14.9.3 Cache-Control: max-stale, must-revalidate,
- * proxy-revalidate if the max-stale request header exists, modify the
- * stale calculations below so that an object can be at most <max-stale>
- * seconds stale before we request a revalidation, _UNLESS_ a
- * must-revalidate or proxy-revalidate cached response header exists to
- * stop us doing this.
- *
- * - RFC2616 14.9.3 Cache-Control: s-maxage the origin server specifies the
- * maximum age an object can be before it is considered stale. This
- * directive has the effect of proxy|must revalidate, which in turn means
- * simple ignore any max-stale setting.
- *
- * - RFC2616 14.9.4 Cache-Control: max-age this header can appear in both
- * requests and responses. If both are specified, the smaller of the two
- * takes priority.
- *
- * - RFC2616 14.21 Expires: if this request header exists in the cached
- * entity, and it's value is in the past, it has expired.
- *
- */
- cc_cresp = apr_table_get(r->headers_out, "Cache-Control");
- cc_ceresp = apr_table_get(r->err_headers_out, "Cache-Control");
- cc_req = apr_table_get(r->headers_in, "Cache-Control");
-
- if ((agestr = apr_table_get(r->headers_out, "Age"))) {
- age_c = apr_atoi64(agestr);
- }
- else if ((agestr = apr_table_get(r->err_headers_out, "Age"))) {
- age_c = apr_atoi64(agestr);
- age_in_errhdr = 1;
- }
-
- if (!(expstr = apr_table_get(r->err_headers_out, "Expires"))) {
- expstr = apr_table_get(r->headers_out, "Expires");
- }
-
- /* calculate age of object */
- age = ap_cache_current_age(info, age_c, r->request_time);
-
- /* extract s-maxage */
- if (cc_cresp && ap_cache_liststr(r->pool, cc_cresp, "s-maxage", &val)) {
- smaxage = apr_atoi64(val);
- }
- else if (cc_ceresp && ap_cache_liststr(r->pool, cc_ceresp, "s-maxage", &val)) {
- smaxage = apr_atoi64(val);
- }
- else {
- smaxage = -1;
- }
-
- /* extract max-age from request */
- if (cc_req && ap_cache_liststr(r->pool, cc_req, "max-age", &val)) {
- maxage_req = apr_atoi64(val);
- }
- else {
- maxage_req = -1;
- }
-
- /* extract max-age from response */
- if (cc_cresp && ap_cache_liststr(r->pool, cc_cresp, "max-age", &val)) {
- maxage_cresp = apr_atoi64(val);
- }
- else if (cc_ceresp && ap_cache_liststr(r->pool, cc_ceresp, "max-age", &val)) {
- maxage_cresp = apr_atoi64(val);
- }
- else
- {
- maxage_cresp = -1;
- }
-
- /*
- * if both maxage request and response, the smaller one takes priority
- */
- if (-1 == maxage_req) {
- maxage = maxage_cresp;
- }
- else if (-1 == maxage_cresp) {
- maxage = maxage_req;
- }
- else {
- maxage = MIN(maxage_req, maxage_cresp);
- }
-
- /* extract max-stale */
- if (cc_req && ap_cache_liststr(r->pool, cc_req, "max-stale", &val)) {
- maxstale = apr_atoi64(val);
- }
- else {
- maxstale = 0;
- }
-
- /* extract min-fresh */
- if (cc_req && ap_cache_liststr(r->pool, cc_req, "min-fresh", &val)) {
- minfresh = apr_atoi64(val);
- }
- else {
- minfresh = 0;
- }
-
- /* override maxstale if must-revalidate or proxy-revalidate */
- if (maxstale && ((cc_cresp &&
- ap_cache_liststr(NULL, cc_cresp,
- "must-revalidate", NULL)) ||
- (cc_cresp &&
- ap_cache_liststr(NULL, cc_cresp,
- "proxy-revalidate", NULL)) ||
- (cc_ceresp &&
- ap_cache_liststr(NULL, cc_ceresp,
- "must-revalidate", NULL)) ||
- (cc_ceresp &&
- ap_cache_liststr(NULL, cc_ceresp,
- "proxy-revalidate", NULL)))) {
- maxstale = 0;
- }
-
- /* handle expiration */
- if (((smaxage != -1) && (age < (smaxage - minfresh))) ||
- ((maxage != -1) && (age < (maxage + maxstale - minfresh))) ||
- ((smaxage == -1) && (maxage == -1) &&
- (info->expire != APR_DATE_BAD) &&
- (age < (apr_time_sec(info->expire - info->date) + maxstale - minfresh)))) {
- const char *warn_head;
- apr_table_t *head_ptr;
-
- warn_head = apr_table_get(r->headers_out, "Warning");
- if (warn_head != NULL) {
- head_ptr = r->headers_out;
- }
- else {
- warn_head = apr_table_get(r->err_headers_out, "Warning");
- head_ptr = r->err_headers_out;
- }
-
- /* it's fresh darlings... */
- /* set age header on response */
- if (age_in_errhdr) {
- apr_table_set(r->err_headers_out, "Age",
- apr_psprintf(r->pool, "%lu", (unsigned long)age));
- }
- else {
- apr_table_set(r->headers_out, "Age",
- apr_psprintf(r->pool, "%lu", (unsigned long)age));
- }
-
- /* add warning if maxstale overrode freshness calculation */
- if (!(((smaxage != -1) && age < smaxage) ||
- ((maxage != -1) && age < maxage) ||
- (info->expire != APR_DATE_BAD &&
- (info->expire - info->date) > age))) {
- /* make sure we don't stomp on a previous warning */
- if ((warn_head == NULL) ||
- ((warn_head != NULL) && (ap_strstr_c(warn_head, "110") == NULL))) {
- apr_table_merge(head_ptr, "Warning", "110 Response is stale");
- }
- }
- /*
- * If none of Expires, Cache-Control: max-age, or Cache-Control:
- * s-maxage appears in the response, and the respose header age
- * calculated is more than 24 hours add the warning 113
- */
- if ((maxage_cresp == -1) && (smaxage == -1) &&
- (expstr == NULL) && (age > 86400)) {
-
- /* Make sure we don't stomp on a previous warning, and don't dup
- * a 113 marning that is already present. Also, make sure to add
- * the new warning to the correct *headers_out location.
- */
- if ((warn_head == NULL) ||
- ((warn_head != NULL) && (ap_strstr_c(warn_head, "113") == NULL))) {
- apr_table_merge(head_ptr, "Warning", "113 Heuristic expiration");
- }
- }
- return 1; /* Cache object is fresh (enough) */
- }
- return 0; /* Cache object is stale */
-}
-
-/*
- * list is a comma-separated list of case-insensitive tokens, with
- * optional whitespace around the tokens.
- * The return returns 1 if the token val is found in the list, or 0
- * otherwise.
- */
-CACHE_DECLARE(int) ap_cache_liststr(apr_pool_t *p, const char *list,
- const char *key, char **val)
-{
- apr_size_t key_len;
- const char *next;
-
- if (!list) {
- return 0;
- }
-
- key_len = strlen(key);
- next = list;
-
- for (;;) {
-
- /* skip whitespace and commas to find the start of the next key */
- while (*next && (apr_isspace(*next) || (*next == ','))) {
- next++;
- }
-
- if (!*next) {
- return 0;
- }
-
- if (!strncasecmp(next, key, key_len)) {
- /* this field matches the key (though it might just be
- * a prefix match, so make sure the match is followed
- * by either a space or an equals sign)
- */
- next += key_len;
- if (!*next || (*next == '=') || apr_isspace(*next) ||
- (*next == ',')) {
- /* valid match */
- if (val) {
- while (*next && (*next != '=') && (*next != ',')) {
- next++;
- }
- if (*next == '=') {
- next++;
- while (*next && apr_isspace(*next )) {
- next++;
- }
- if (!*next) {
- *val = NULL;
- }
- else {
- const char *val_start = next;
- while (*next && !apr_isspace(*next) &&
- (*next != ',')) {
- next++;
- }
- *val = apr_pstrmemdup(p, val_start,
- next - val_start);
- }
- }
- }
- return 1;
- }
- }
-
- /* skip to the next field */
- do {
- next++;
- if (!*next) {
- return 0;
- }
- } while (*next != ',');
- }
-}
-
-/* return each comma separated token, one at a time */
-CACHE_DECLARE(const char *)ap_cache_tokstr(apr_pool_t *p, const char *list,
- const char **str)
-{
- apr_size_t i;
- const char *s;
-
- s = ap_strchr_c(list, ',');
- if (s != NULL) {
- i = s - list;
- do
- s++;
- while (apr_isspace(*s))
- ; /* noop */
- }
- else
- i = strlen(list);
-
- while (i > 0 && apr_isspace(list[i - 1]))
- i--;
-
- *str = s;
- if (i)
- return apr_pstrndup(p, list, i);
- else
- return NULL;
-}
-
-/*
- * Converts apr_time_t expressed as hex digits to
- * a true apr_time_t.
- */
-CACHE_DECLARE(apr_time_t) ap_cache_hex2usec(const char *x)
-{
- int i, ch;
- apr_time_t j;
- for (i = 0, j = 0; i < sizeof(j) * 2; i++) {
- ch = x[i];
- j <<= 4;
- if (apr_isdigit(ch))
- j |= ch - '0';
- else if (apr_isupper(ch))
- j |= ch - ('A' - 10);
- else
- j |= ch - ('a' - 10);
- }
- return j;
-}
-
-/*
- * Converts apr_time_t to apr_time_t expressed as hex digits.
- */
-CACHE_DECLARE(void) ap_cache_usec2hex(apr_time_t j, char *y)
-{
- int i, ch;
-
- for (i = (sizeof(j) * 2)-1; i >= 0; i--) {
- ch = (int)(j & 0xF);
- j >>= 4;
- if (ch >= 10)
- y[i] = ch + ('A' - 10);
- else
- y[i] = ch + '0';
- }
- y[sizeof(j) * 2] = '\0';
-}
-
-static void cache_hash(const char *it, char *val, int ndepth, int nlength)
-{
- apr_md5_ctx_t context;
- unsigned char digest[16];
- char tmp[22];
- int i, k, d;
- unsigned int x;
- static const char enc_table[64] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@";
-
- apr_md5_init(&context);
- apr_md5_update(&context, (const unsigned char *) it, strlen(it));
- apr_md5_final(digest, &context);
-
- /* encode 128 bits as 22 characters, using a modified uuencoding
- * the encoding is 3 bytes -> 4 characters* i.e. 128 bits is
- * 5 x 3 bytes + 1 byte -> 5 * 4 characters + 2 characters
- */
- for (i = 0, k = 0; i < 15; i += 3) {
- x = (digest[i] << 16) | (digest[i + 1] << 8) | digest[i + 2];
- tmp[k++] = enc_table[x >> 18];
- tmp[k++] = enc_table[(x >> 12) & 0x3f];
- tmp[k++] = enc_table[(x >> 6) & 0x3f];
- tmp[k++] = enc_table[x & 0x3f];
- }
-
- /* one byte left */
- x = digest[15];
- tmp[k++] = enc_table[x >> 2]; /* use up 6 bits */
- tmp[k++] = enc_table[(x << 4) & 0x3f];
-
- /* now split into directory levels */
- for (i = k = d = 0; d < ndepth; ++d) {
- memcpy(&val[i], &tmp[k], nlength);
- k += nlength;
- val[i + nlength] = '/';
- i += nlength + 1;
- }
- memcpy(&val[i], &tmp[k], 22 - k);
- val[i + 22 - k] = '\0';
-}
-
-CACHE_DECLARE(char *)generate_name(apr_pool_t *p, int dirlevels,
- int dirlength, const char *name)
-{
- char hashfile[66];
- cache_hash(name, hashfile, dirlevels, dirlength);
- return apr_pstrdup(p, hashfile);
-}
-
-/* Create a new table consisting of those elements from an input
- * headers table that are allowed to be stored in a cache.
- */
-CACHE_DECLARE(apr_table_t *)ap_cache_cacheable_hdrs_out(apr_pool_t *pool,
- apr_table_t *t)
-{
- /* Make a copy of the headers, and remove from
- * the copy any hop-by-hop headers, as defined in Section
- * 13.5.1 of RFC 2616
- */
- apr_table_t *headers_out;
- headers_out = apr_table_copy(pool, t);
- apr_table_unset(headers_out, "Connection");
- apr_table_unset(headers_out, "Keep-Alive");
- apr_table_unset(headers_out, "Proxy-Authenticate");
- apr_table_unset(headers_out, "Proxy-Authorization");
- apr_table_unset(headers_out, "TE");
- apr_table_unset(headers_out, "Trailers");
- apr_table_unset(headers_out, "Transfer-Encoding");
- apr_table_unset(headers_out, "Upgrade");
- return headers_out;
-}
diff --git a/modules/experimental/charset.conv b/modules/experimental/charset.conv
deleted file mode 100644
index 3cd6fa9d89..0000000000
--- a/modules/experimental/charset.conv
+++ /dev/null
@@ -1,55 +0,0 @@
-
-# Lang-abbv Charset Language
-#---------------------------------
-en ISO-8859-1 English
-UTF-8 utf8 UTF-8
-Unicode ucs Unicode
-th Cp874 Thai
-ja SJIS Japanese
-ko Cp949 Korean
-zh Cp950 Chinese-Traditional
-zh-cn GB2312 Chinese-Simplified
-zh-tw Cp950 Chinese
-cs ISO-8859-2 Czech
-hu ISO-8859-2 Hungarian
-hr ISO-8859-2 Croation
-pl ISO-8859-2 Polish
-ro ISO-8859-2 Romanian
-sr ISO-8859-2 Serbian
-sk ISO-8859-2 Slovak
-sl ISO-8859-2 Slovenian
-sq ISO-8859-2 Albanian
-bg ISO-8859-5 Bulgarian
-be ISO-8859-5 Byelorussian
-mk ISO-8859-5 Macedonian
-ru ISO-8859-5 Russian
-uk ISO-8859-5 Ukrainian
-ca ISO-8859-1 Catalan
-de ISO-8859-1 German
-da ISO-8859-1 Danish
-fi ISO-8859-1 Finnish
-fr ISO-8859-1 French
-es ISO-8859-1 Spanish
-is ISO-8859-1 Icelandic
-it ISO-8859-1 Italian
-nl ISO-8859-1 Dutch
-no ISO-8859-1 Norwegian
-pt ISO-8859-1 Portuguese
-sv ISO-8859-1 Swedish
-af ISO-8859-1 Afrikaans
-eu ISO-8859-1 Basque
-fo ISO-8859-1 Faroese
-gl ISO-8859-1 Galician
-ga ISO-8859-1 Irish
-gd ISO-8859-1 Scottish
-mt ISO-8859-3 Maltese
-eo ISO-8859-3 Esperanto
-el ISO-8859-7 Greek
-tr ISO-8859-9 Turkish
-he ISO-8859-8 Hebrew
-iw ISO-8859-8 Hebrew
-ar ISO-8859-6 Arabic
-et ISO-8859-1 Estonian
-lv ISO-8859-2 Latvian
-lt ISO-8859-2 Lithuanian
- \ No newline at end of file
diff --git a/modules/experimental/config.m4 b/modules/experimental/config.m4
deleted file mode 100644
index d02181a587..0000000000
--- a/modules/experimental/config.m4
+++ /dev/null
@@ -1,38 +0,0 @@
-
-APACHE_MODPATH_INIT(experimental)
-
-if test "$ac_cv_ebcdic" = "yes"; then
-# mod_charset_lite can be very useful on an ebcdic system,
-# so include it by default
- APACHE_MODULE(charset_lite, character set translation, , , yes)
-else
- APACHE_MODULE(charset_lite, character set translation, , , no)
-fi
-
-dnl # list of object files for mod_cache
-cache_objs="dnl
-mod_cache.lo dnl
-cache_storage.lo dnl
-cache_util.lo dnl
-"
-dnl # list of object files for mod_mem_cache
-mem_cache_objs="dnl
-mod_mem_cache.lo dnl
-cache_cache.lo dnl
-cache_pqueue.lo dnl
-cache_hash.lo dnl
-"
-APACHE_MODULE(cache, dynamic file caching, $cache_objs, , no)
-APACHE_MODULE(disk_cache, disk caching module, , , no)
-APACHE_MODULE(mem_cache, memory caching module, $mem_cache_objs, , no)
-APACHE_MODULE(example, example and demo module, , , no)
-APACHE_MODULE(case_filter, example uppercase conversion filter, , , no)
-APACHE_MODULE(case_filter_in, example uppercase conversion input filter, , , no)
-
-ldap_objects="util_ldap.lo util_ldap_cache.lo util_ldap_cache_mgr.lo"
-APACHE_MODULE(ldap, LDAP caching and connection pooling services, $ldap_objects, , no)
-
-auth_ldap_objects="mod_auth_ldap.lo"
-APACHE_MODULE(auth_ldap, LDAP based authentication, $auth_ldap_objects, , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/experimental/mod_auth_ldap.c b/modules/experimental/mod_auth_ldap.c
deleted file mode 100644
index 9002c5ac15..0000000000
--- a/modules/experimental/mod_auth_ldap.c
+++ /dev/null
@@ -1,1021 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_auth_ldap.c: LDAP authentication module
- *
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc.
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include <apr_strings.h>
-#include <apr_xlate.h>
-#define APR_WANT_STRFUNC
-#include <apr_want.h>
-
-#include "ap_config.h"
-#if APR_HAVE_UNISTD_H
-/* for getpid() */
-#include <unistd.h>
-#endif
-#include <ctype.h>
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_ldap.h"
-
-#if !APR_HAS_LDAP
-#error mod_auth_ldap requires APR-util to have LDAP support built in
-#endif
-
-/* per directory configuration */
-typedef struct {
- apr_pool_t *pool; /* Pool that this config is allocated from */
-#if APR_HAS_THREADS
- apr_thread_mutex_t *lock; /* Lock for this config */
-#endif
- int auth_authoritative; /* Is this auth method the one and only? */
- int enabled; /* Is auth_ldap enabled in this directory? */
-
- /* These parameters are all derived from the AuthLDAPURL directive */
- char *url; /* String representation of the URL */
-
- char *host; /* Name of the LDAP server (or space separated list) */
- int port; /* Port of the LDAP server */
- char *basedn; /* Base DN to do all searches from */
- char *attribute; /* Attribute to search for */
- char **attributes; /* Array of all the attributes to return */
- int scope; /* Scope of the search */
- char *filter; /* Filter to further limit the search */
- deref_options deref; /* how to handle alias dereferening */
- char *binddn; /* DN to bind to server (can be NULL) */
- char *bindpw; /* Password to bind to server (can be NULL) */
-
- int frontpage_hack; /* Hack for frontpage support */
- int user_is_dn; /* If true, connection->user is DN instead of userid */
- int compare_dn_on_server; /* If true, will use server to do DN compare */
-
- int have_ldap_url; /* Set if we have found an LDAP url */
-
- apr_array_header_t *groupattr; /* List of Group attributes */
- int group_attrib_is_dn; /* If true, the group attribute is the DN, otherwise,
- it's the exact string passed by the HTTP client */
-
- int secure; /* True if SSL connections are requested */
-} mod_auth_ldap_config_t;
-
-typedef struct mod_auth_ldap_request_t {
- char *dn; /* The saved dn from a successful search */
- char *user; /* The username provided by the client */
-} mod_auth_ldap_request_t;
-
-/* maximum group elements supported */
-#define GROUPATTR_MAX_ELTS 10
-
-struct mod_auth_ldap_groupattr_entry_t {
- char *name;
-};
-
-module AP_MODULE_DECLARE_DATA auth_ldap_module;
-
-/* function prototypes */
-void mod_auth_ldap_build_filter(char *filtbuf,
- request_rec *r,
- mod_auth_ldap_config_t *sec);
-int mod_auth_ldap_check_user_id(request_rec *r);
-int mod_auth_ldap_auth_checker(request_rec *r);
-void *mod_auth_ldap_create_dir_config(apr_pool_t *p, char *d);
-
-/* ---------------------------------------- */
-
-static apr_hash_t *charset_conversions = NULL;
-static char *to_charset = NULL; /* UTF-8 identifier derived from the charset.conv file */
-
-/* Derive a code page ID give a language name or ID */
-static char* derive_codepage_from_lang (apr_pool_t *p, char *language)
-{
- int lang_len;
- char *charset;
-
- if (!language) /* our default codepage */
- return apr_pstrdup(p, "ISO-8859-1");
- else
- lang_len = strlen(language);
-
- charset = (char*) apr_hash_get(charset_conversions, language, APR_HASH_KEY_STRING);
-
- if (!charset) {
- language[2] = '\0';
- charset = (char*) apr_hash_get(charset_conversions, language, APR_HASH_KEY_STRING);
- }
-
- if (charset) {
- charset = apr_pstrdup(p, charset);
- }
-
- return charset;
-}
-
-static apr_xlate_t* get_conv_set (request_rec *r)
-{
- char *lang_line = (char*)apr_table_get(r->headers_in, "accept-language");
- char *lang;
- apr_xlate_t *convset;
-
- if (lang_line) {
- lang_line = apr_pstrdup(r->pool, lang_line);
- for (lang = lang_line;*lang;lang++) {
- if ((*lang == ',') || (*lang == ';')) {
- *lang = '\0';
- break;
- }
- }
- lang = derive_codepage_from_lang(r->pool, lang_line);
-
- if (lang && (apr_xlate_open(&convset, to_charset, lang, r->pool) == APR_SUCCESS)) {
- return convset;
- }
- }
-
- return NULL;
-}
-
-
-/*
- * Build the search filter, or at least as much of the search filter that
- * will fit in the buffer. We don't worry about the buffer not being able
- * to hold the entire filter. If the buffer wasn't big enough to hold the
- * filter, ldap_search_s will complain, but the only situation where this
- * is likely to happen is if the client sent a really, really long
- * username, most likely as part of an attack.
- *
- * The search filter consists of the filter provided with the URL,
- * combined with a filter made up of the attribute provided with the URL,
- * and the actual username passed by the HTTP client. For example, assume
- * that the LDAP URL is
- *
- * ldap://ldap.airius.com/ou=People, o=Airius?uid??(posixid=*)
- *
- * Further, assume that the userid passed by the client was `userj'. The
- * search filter will be (&(posixid=*)(uid=userj)).
- */
-#define FILTER_LENGTH MAX_STRING_LEN
-void mod_auth_ldap_build_filter(char *filtbuf,
- request_rec *r,
- mod_auth_ldap_config_t *sec)
-{
- char *p, *q, *filtbuf_end;
- char *user;
- apr_xlate_t *convset = NULL;
- apr_size_t inbytes;
- apr_size_t outbytes;
- char *outbuf;
-
- if (r->user != NULL) {
- user = apr_pstrdup (r->pool, r->user);
- }
- else
- return;
-
- if (charset_conversions) {
- convset = get_conv_set(r);
- }
-
- if (convset) {
- inbytes = strlen(user);
- outbytes = (inbytes+1)*3;
- outbuf = apr_pcalloc(r->pool, outbytes);
-
- /* Convert the user name to UTF-8. This is only valid for LDAP v3 */
- if (apr_xlate_conv_buffer(convset, user, &inbytes, outbuf, &outbytes) == APR_SUCCESS) {
- user = apr_pstrdup(r->pool, outbuf);
- }
- }
-
- /*
- * Create the first part of the filter, which consists of the
- * config-supplied portions.
- */
- apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(%s=", sec->filter, sec->attribute);
-
- /*
- * Now add the client-supplied username to the filter, ensuring that any
- * LDAP filter metachars are escaped.
- */
- filtbuf_end = filtbuf + FILTER_LENGTH - 1;
- for (p = user, q=filtbuf + strlen(filtbuf);
- *p && q < filtbuf_end; *q++ = *p++) {
-#if APR_HAS_MICROSOFT_LDAPSDK
- /* Note: The Microsoft SDK escapes for us, so is not necessary */
-#else
- if (strchr("*()\\", *p) != NULL) {
- *q++ = '\\';
- if (q >= filtbuf_end) {
- break;
- }
- }
-#endif
- }
- *q = '\0';
-
- /*
- * Append the closing parens of the filter, unless doing so would
- * overrun the buffer.
- */
- if (q + 2 <= filtbuf_end)
- strcat(filtbuf, "))");
-}
-
-static apr_status_t mod_auth_ldap_cleanup_connection_close(void *param)
-{
- util_ldap_connection_t *ldc = param;
- util_ldap_connection_close(ldc);
- return APR_SUCCESS;
-}
-
-
-/*
- * Authentication Phase
- * --------------------
- *
- * This phase authenticates the credentials the user has sent with
- * the request (ie the username and password are checked). This is done
- * by making an attempt to bind to the LDAP server using this user's
- * DN and the supplied password.
- *
- */
-int mod_auth_ldap_check_user_id(request_rec *r)
-{
- int failures = 0;
- const char **vals = NULL;
- char filtbuf[FILTER_LENGTH];
- mod_auth_ldap_config_t *sec =
- (mod_auth_ldap_config_t *)ap_get_module_config(r->per_dir_config, &auth_ldap_module);
-
- util_ldap_connection_t *ldc = NULL;
- const char *sent_pw;
- int result = 0;
- const char *dn = NULL;
-
- mod_auth_ldap_request_t *req =
- (mod_auth_ldap_request_t *)apr_pcalloc(r->pool, sizeof(mod_auth_ldap_request_t));
- ap_set_module_config(r->request_config, &auth_ldap_module, req);
-
- if (!sec->enabled) {
- return DECLINED;
- }
-
- /*
- * Basic sanity checks before any LDAP operations even happen.
- */
- if (!sec->have_ldap_url) {
- return DECLINED;
- }
-
-start_over:
-
- /* There is a good AuthLDAPURL, right? */
- if (sec->host) {
- ldc = util_ldap_connection_find(r, sec->host, sec->port,
- sec->binddn, sec->bindpw, sec->deref,
- sec->secure);
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authenticate: no sec->host - weird...?", getpid());
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authenticate: using URL %s", getpid(), sec->url);
-
- /* Get the password that the client sent */
- if ((result = ap_get_basic_auth_pw(r, &sent_pw))) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authenticate: "
- "ap_get_basic_auth_pw() returns %d", getpid(), result);
- util_ldap_connection_close(ldc);
- return result;
- }
-
- if (r->user == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authenticate: no user specified", getpid());
- util_ldap_connection_close(ldc);
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
-
- /* build the username filter */
- mod_auth_ldap_build_filter(filtbuf, r, sec);
-
- /* do the user search */
- result = util_ldap_cache_checkuserid(r, ldc, sec->url, sec->basedn, sec->scope,
- sec->attributes, filtbuf, sent_pw, &dn, &vals);
- util_ldap_connection_close(ldc);
-
- /* sanity check - if server is down, retry it up to 5 times */
- if (result == LDAP_SERVER_DOWN) {
- if (failures++ <= 5) {
- goto start_over;
- }
- }
-
- /* handle bind failure */
- if (result != LDAP_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authenticate: "
- "user %s authentication failed; URI %s [%s][%s]",
- getpid(), r->user, r->uri, ldc->reason, ldap_err2string(result));
- if ((LDAP_INVALID_CREDENTIALS == result) || sec->auth_authoritative) {
- ap_note_basic_auth_failure(r);
- return HTTP_UNAUTHORIZED;
- }
- else {
- return DECLINED;
- }
- }
-
- /* mark the user and DN */
- req->dn = apr_pstrdup(r->pool, dn);
- req->user = r->user;
- if (sec->user_is_dn) {
- r->user = req->dn;
- }
-
- /* add environment variables */
- if (sec->attributes && vals) {
- apr_table_t *e = r->subprocess_env;
- int i = 0;
- while (sec->attributes[i]) {
- char *str = apr_pstrcat(r->pool, "AUTHENTICATE_", sec->attributes[i], NULL);
- int j = 13;
- while (str[j]) {
- if (str[j] >= 'a' && str[j] <= 'z') {
- str[j] = str[j] - ('a' - 'A');
- }
- j++;
- }
- apr_table_setn(e, str, vals[i]);
- i++;
- }
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authenticate: accepting %s", getpid(), r->user);
-
- return OK;
-}
-
-
-/*
- * Authorisation Phase
- * -------------------
- *
- * After checking whether the username and password are correct, we need
- * to check whether that user is authorised to view this resource. The
- * require directive is used to do this:
- *
- * require valid-user Any authenticated is allowed in.
- * require user <username> This particular user is allowed in.
- * require group <groupname> The user must be a member of this group
- * in order to be allowed in.
- * require dn <dn> The user must have the following DN in the
- * LDAP tree to be let in.
- *
- */
-int mod_auth_ldap_auth_checker(request_rec *r)
-{
- int result = 0;
- mod_auth_ldap_request_t *req =
- (mod_auth_ldap_request_t *)ap_get_module_config(r->request_config,
- &auth_ldap_module);
- mod_auth_ldap_config_t *sec =
- (mod_auth_ldap_config_t *)ap_get_module_config(r->per_dir_config,
- &auth_ldap_module);
-
- util_ldap_connection_t *ldc = NULL;
- int m = r->method_number;
-
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs = reqs_arr ? (require_line *)reqs_arr->elts : NULL;
-
- register int x;
- const char *t;
- char *w;
- int method_restricted = 0;
-
- if (!sec->enabled) {
- return DECLINED;
- }
-
- if (!sec->have_ldap_url) {
- return DECLINED;
- }
-
- if (sec->host) {
- ldc = util_ldap_connection_find(r, sec->host, sec->port,
- sec->binddn, sec->bindpw, sec->deref,
- sec->secure);
- apr_pool_cleanup_register(r->pool, ldc,
- mod_auth_ldap_cleanup_connection_close,
- apr_pool_cleanup_null);
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: no sec->host - weird...?", getpid());
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
-
- /*
- * If there are no elements in the group attribute array, the default should be
- * member and uniquemember; populate the array now.
- */
- if (sec->groupattr->nelts == 0) {
- struct mod_auth_ldap_groupattr_entry_t *grp;
-#if APR_HAS_THREADS
- apr_thread_mutex_lock(sec->lock);
-#endif
- grp = apr_array_push(sec->groupattr);
- grp->name = "member";
- grp = apr_array_push(sec->groupattr);
- grp->name = "uniquemember";
-#if APR_HAS_THREADS
- apr_thread_mutex_unlock(sec->lock);
-#endif
- }
-
- if (!reqs_arr) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: no requirements array", getpid());
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
-
- /* Loop through the requirements array until there's no elements
- * left, or something causes a return from inside the loop */
- for(x=0; x < reqs_arr->nelts; x++) {
- if (! (reqs[x].method_mask & (1 << m))) {
- continue;
- }
- method_restricted = 1;
-
- t = reqs[x].requirement;
- w = ap_getword_white(r->pool, &t);
-
- if (strcmp(w, "valid-user") == 0) {
- /*
- * Valid user will always be true if we authenticated with ldap,
- * but when using front page, valid user should only be true if
- * he exists in the frontpage password file. This hack will get
- * auth_ldap to look up the user in the the pw file to really be
- * sure that he's valid. Naturally, it requires mod_auth to be
- * compiled in, but if mod_auth wasn't in there, then the need
- * for this hack wouldn't exist anyway.
- */
- if (sec->frontpage_hack) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "deferring authorisation to mod_auth (FP Hack)",
- getpid());
- return OK;
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "successful authorisation because user "
- "is valid-user", getpid());
- return OK;
- }
- }
- else if (strcmp(w, "user") == 0) {
- if (req->dn == NULL || strlen(req->dn) == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require user: user's DN has not been defined; failing authorisation",
- getpid());
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
- /*
- * First do a whole-line compare, in case it's something like
- * require user Babs Jensen
- */
- result = util_ldap_cache_compare(r, ldc, sec->url, req->dn, sec->attribute, t);
- switch(result) {
- case LDAP_COMPARE_TRUE: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require user: authorisation successful", getpid());
- return OK;
- }
- default: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: require user: "
- "authorisation failed [%s][%s]", getpid(),
- ldc->reason, ldap_err2string(result));
- }
- }
- /*
- * Now break apart the line and compare each word on it
- */
- while (t[0]) {
- w = ap_getword_conf(r->pool, &t);
- result = util_ldap_cache_compare(r, ldc, sec->url, req->dn, sec->attribute, w);
- switch(result) {
- case LDAP_COMPARE_TRUE: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require user: authorisation successful", getpid());
- return OK;
- }
- default: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require user: authorisation failed [%s][%s]",
- getpid(), ldc->reason, ldap_err2string(result));
- }
- }
- }
- }
- else if (strcmp(w, "dn") == 0) {
- if (req->dn == NULL || strlen(req->dn) == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require dn: user's DN has not been defined; failing authorisation",
- getpid());
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
-
- result = util_ldap_cache_comparedn(r, ldc, sec->url, req->dn, t, sec->compare_dn_on_server);
- switch(result) {
- case LDAP_COMPARE_TRUE: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require dn: authorisation successful", getpid());
- return OK;
- }
- default: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: "
- "require dn \"%s\": LDAP error [%s][%s]",
- getpid(), t, ldc->reason, ldap_err2string(result));
- }
- }
- }
- else if (strcmp(w, "group") == 0) {
- struct mod_auth_ldap_groupattr_entry_t *ent = (struct mod_auth_ldap_groupattr_entry_t *) sec->groupattr->elts;
- int i;
-
- if (sec->group_attrib_is_dn) {
- if (req->dn == NULL || strlen(req->dn) == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: require group: user's DN has not been defined; failing authorisation",
- getpid());
- return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
- }
- }
- else {
- if (req->user == NULL || strlen(req->user) == 0) {
- /* We weren't called in the authentication phase, so we didn't have a
- * chance to set the user field. Do so now. */
- req->user = r->user;
- }
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: require group: testing for group membership in \"%s\"",
- getpid(), t);
-
- for (i = 0; i < sec->groupattr->nelts; i++) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: require group: testing for %s: %s (%s)", getpid(),
- ent[i].name, sec->group_attrib_is_dn ? req->dn : req->user, t);
-
- result = util_ldap_cache_compare(r, ldc, sec->url, t, ent[i].name,
- sec->group_attrib_is_dn ? req->dn : req->user);
- switch(result) {
- case LDAP_COMPARE_TRUE: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: require group: "
- "authorisation successful (attribute %s) [%s][%s]",
- getpid(), ent[i].name, ldc->reason, ldap_err2string(result));
- return OK;
- }
- default: {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: require group \"%s\": "
- "authorisation failed [%s][%s]",
- getpid(), t, ldc->reason, ldap_err2string(result));
- }
- }
- }
- }
- }
-
- if (!method_restricted) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: agreeing because non-restricted",
- getpid());
- return OK;
- }
-
- if (!sec->auth_authoritative) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: declining to authorise", getpid());
- return DECLINED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
- "[%d] auth_ldap authorise: authorisation denied", getpid());
- ap_note_basic_auth_failure (r);
-
- return HTTP_UNAUTHORIZED;
-}
-
-
-/* ---------------------------------------- */
-/* config directives */
-
-
-void *mod_auth_ldap_create_dir_config(apr_pool_t *p, char *d)
-{
- mod_auth_ldap_config_t *sec =
- (mod_auth_ldap_config_t *)apr_pcalloc(p, sizeof(mod_auth_ldap_config_t));
-
- sec->pool = p;
-#if APR_HAS_THREADS
- apr_thread_mutex_create(&sec->lock, APR_THREAD_MUTEX_DEFAULT, p);
-#endif
- sec->auth_authoritative = 1;
- sec->enabled = 1;
- sec->groupattr = apr_array_make(p, GROUPATTR_MAX_ELTS,
- sizeof(struct mod_auth_ldap_groupattr_entry_t));
-
- sec->have_ldap_url = 0;
- sec->url = "";
- sec->host = NULL;
- sec->binddn = NULL;
- sec->bindpw = NULL;
- sec->deref = always;
- sec->group_attrib_is_dn = 1;
-
- sec->frontpage_hack = 0;
- sec->secure = 0;
-
- sec->user_is_dn = 0;
- sec->compare_dn_on_server = 0;
-
- return sec;
-}
-
-/*
- * Use the ldap url parsing routines to break up the ldap url into
- * host and port.
- */
-static const char *mod_auth_ldap_parse_url(cmd_parms *cmd,
- void *config,
- const char *url)
-{
- int rc;
- apr_ldap_url_desc_t *urld;
- apr_ldap_err_t *result;
-
- mod_auth_ldap_config_t *sec = config;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: `%s'",
- getpid(), url);
-
- rc = apr_ldap_url_parse(cmd->pool, url, &(urld), &(result));
- if (rc != APR_SUCCESS) {
- return result->reason;
- }
- sec->url = apr_pstrdup(cmd->pool, url);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: Host: %s", getpid(), urld->lud_host);
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: Port: %d", getpid(), urld->lud_port);
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: DN: %s", getpid(), urld->lud_dn);
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: attrib: %s", getpid(), urld->lud_attrs? urld->lud_attrs[0] : "(null)");
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: scope: %s", getpid(),
- (urld->lud_scope == LDAP_SCOPE_SUBTREE? "subtree" :
- urld->lud_scope == LDAP_SCOPE_BASE? "base" :
- urld->lud_scope == LDAP_SCOPE_ONELEVEL? "onelevel" : "unknown"));
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- cmd->server, "[%d] auth_ldap url parse: filter: %s", getpid(), urld->lud_filter);
-
- /* Set all the values, or at least some sane defaults */
- if (sec->host) {
- char *p = apr_palloc(cmd->pool, strlen(sec->host) + strlen(urld->lud_host) + 2);
- strcpy(p, urld->lud_host);
- strcat(p, " ");
- strcat(p, sec->host);
- sec->host = p;
- }
- else {
- sec->host = urld->lud_host? apr_pstrdup(cmd->pool, urld->lud_host) : "localhost";
- }
- sec->basedn = urld->lud_dn? apr_pstrdup(cmd->pool, urld->lud_dn) : "";
- if (urld->lud_attrs && urld->lud_attrs[0]) {
- int i = 1;
- while (urld->lud_attrs[i]) {
- i++;
- }
- sec->attributes = apr_pcalloc(cmd->pool, sizeof(char *) * (i+1));
- i = 0;
- while (urld->lud_attrs[i]) {
- sec->attributes[i] = apr_pstrdup(cmd->pool, urld->lud_attrs[i]);
- i++;
- }
- sec->attribute = sec->attributes[0];
- }
- else {
- sec->attribute = "uid";
- }
-
- sec->scope = urld->lud_scope == LDAP_SCOPE_ONELEVEL ?
- LDAP_SCOPE_ONELEVEL : LDAP_SCOPE_SUBTREE;
-
- if (urld->lud_filter) {
- if (urld->lud_filter[0] == '(') {
- /*
- * Get rid of the surrounding parens; later on when generating the
- * filter, they'll be put back.
- */
- sec->filter = apr_pstrdup(cmd->pool, urld->lud_filter+1);
- sec->filter[strlen(sec->filter)-1] = '\0';
- }
- else {
- sec->filter = apr_pstrdup(cmd->pool, urld->lud_filter);
- }
- }
- else {
- sec->filter = "objectclass=*";
- }
-
- /* "ldaps" indicates secure ldap connections desired
- */
- if (strncasecmp(url, "ldaps", 5) == 0)
- {
- sec->secure = 1;
- sec->port = urld->lud_port? urld->lud_port : LDAPS_PORT;
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "LDAP: auth_ldap using SSL connections");
- }
- else
- {
- sec->secure = 0;
- sec->port = urld->lud_port? urld->lud_port : LDAP_PORT;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server,
- "LDAP: auth_ldap not using SSL connections");
- }
-
- sec->have_ldap_url = 1;
- return NULL;
-}
-
-static const char *mod_auth_ldap_set_deref(cmd_parms *cmd, void *config, const char *arg)
-{
- mod_auth_ldap_config_t *sec = config;
-
- if (strcmp(arg, "never") == 0 || strcasecmp(arg, "off") == 0) {
- sec->deref = never;
- }
- else if (strcmp(arg, "searching") == 0) {
- sec->deref = searching;
- }
- else if (strcmp(arg, "finding") == 0) {
- sec->deref = finding;
- }
- else if (strcmp(arg, "always") == 0 || strcasecmp(arg, "on") == 0) {
- sec->deref = always;
- }
- else {
- return "Unrecognized value for AuthLDAPAliasDereference directive";
- }
- return NULL;
-}
-
-static const char *mod_auth_ldap_add_group_attribute(cmd_parms *cmd, void *config, const char *arg)
-{
- struct mod_auth_ldap_groupattr_entry_t *new;
-
- mod_auth_ldap_config_t *sec = config;
-
- if (sec->groupattr->nelts > GROUPATTR_MAX_ELTS)
- return "Too many AuthLDAPGroupAttribute directives";
-
- new = apr_array_push(sec->groupattr);
- new->name = apr_pstrdup(cmd->pool, arg);
-
- return NULL;
-}
-
-static const char *set_charset_config(cmd_parms *cmd, void *config, const char *arg)
-{
- ap_set_module_config(cmd->server->module_config, &auth_ldap_module,
- (void *)arg);
- return NULL;
-}
-
-
-command_rec mod_auth_ldap_cmds[] = {
- AP_INIT_TAKE1("AuthLDAPURL", mod_auth_ldap_parse_url, NULL, OR_AUTHCFG,
- "URL to define LDAP connection. This should be an RFC 2255 complaint\n"
- "URL of the form ldap://host[:port]/basedn[?attrib[?scope[?filter]]].\n"
- "<ul>\n"
- "<li>Host is the name of the LDAP server. Use a space separated list of hosts \n"
- "to specify redundant servers.\n"
- "<li>Port is optional, and specifies the port to connect to.\n"
- "<li>basedn specifies the base DN to start searches from\n"
- "<li>Attrib specifies what attribute to search for in the directory. If not "
- "provided, it defaults to <b>uid</b>.\n"
- "<li>Scope is the scope of the search, and can be either <b>sub</b> or "
- "<b>one</b>. If not provided, the default is <b>sub</b>.\n"
- "<li>Filter is a filter to use in the search. If not provided, "
- "defaults to <b>(objectClass=*)</b>.\n"
- "</ul>\n"
- "Searches are performed using the attribute and the filter combined. "
- "For example, assume that the\n"
- "LDAP URL is <b>ldap://ldap.airius.com/ou=People, o=Airius?uid?sub?(posixid=*)</b>. "
- "Searches will\n"
- "be done using the filter <b>(&((posixid=*))(uid=<i>username</i>))</b>, "
- "where <i>username</i>\n"
- "is the user name passed by the HTTP client. The search will be a subtree "
- "search on the branch <b>ou=People, o=Airius</b>."),
-
- AP_INIT_TAKE1("AuthLDAPBindDN", ap_set_string_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, binddn), OR_AUTHCFG,
- "DN to use to bind to LDAP server. If not provided, will do an anonymous bind."),
-
- AP_INIT_TAKE1("AuthLDAPBindPassword", ap_set_string_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, bindpw), OR_AUTHCFG,
- "Password to use to bind to LDAP server. If not provided, will do an anonymous bind."),
-
- AP_INIT_FLAG("AuthLDAPRemoteUserIsDN", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, user_is_dn), OR_AUTHCFG,
- "Set to 'on' to set the REMOTE_USER environment variable to be the full "
- "DN of the remote user. By default, this is set to off, meaning that "
- "the REMOTE_USER variable will contain whatever value the remote user sent."),
-
- AP_INIT_FLAG("AuthLDAPAuthoritative", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, auth_authoritative), OR_AUTHCFG,
- "Set to 'off' to allow access control to be passed along to lower modules if "
- "the UserID and/or group is not known to this module"),
-
- AP_INIT_FLAG("AuthLDAPCompareDNOnServer", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, compare_dn_on_server), OR_AUTHCFG,
- "Set to 'on' to force auth_ldap to do DN compares (for the \"require dn\" "
- "directive) using the server, and set it 'off' to do the compares locally "
- "(at the expense of possible false matches). See the documentation for "
- "a complete description of this option."),
-
- AP_INIT_ITERATE("AuthLDAPGroupAttribute", mod_auth_ldap_add_group_attribute, NULL, OR_AUTHCFG,
- "A list of attributes used to define group membership - defaults to "
- "member and uniquemember"),
-
- AP_INIT_FLAG("AuthLDAPGroupAttributeIsDN", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, group_attrib_is_dn), OR_AUTHCFG,
- "If set to 'on', auth_ldap uses the DN that is retrieved from the server for"
- "subsequent group comparisons. If set to 'off', auth_ldap uses the string"
- "provided by the client directly. Defaults to 'on'."),
-
- AP_INIT_TAKE1("AuthLDAPDereferenceAliases", mod_auth_ldap_set_deref, NULL, OR_AUTHCFG,
- "Determines how aliases are handled during a search. Can bo one of the"
- "values \"never\", \"searching\", \"finding\", or \"always\". "
- "Defaults to always."),
-
- AP_INIT_FLAG("AuthLDAPEnabled", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, enabled), OR_AUTHCFG,
- "Set to off to disable auth_ldap, even if it's been enabled in a higher tree"),
-
- AP_INIT_FLAG("AuthLDAPFrontPageHack", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mod_auth_ldap_config_t, frontpage_hack), OR_AUTHCFG,
- "Set to 'on' to support Microsoft FrontPage"),
-
- AP_INIT_TAKE1("AuthLDAPCharsetConfig", set_charset_config, NULL, RSRC_CONF,
- "Character set conversion configuration file. If omitted, character set"
- "conversion is disabled."),
-
- {NULL}
-};
-
-static int auth_ldap_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- ap_configfile_t *f;
- char l[MAX_STRING_LEN];
- const char *charset_confname = ap_get_module_config(s->module_config,
- &auth_ldap_module);
- apr_status_t status;
-
- /*
- mod_auth_ldap_config_t *sec = (mod_auth_ldap_config_t *)
- ap_get_module_config(s->module_config,
- &auth_ldap_module);
-
- if (sec->secure)
- {
- if (!util_ldap_ssl_supported(s))
- {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
- "LDAP: SSL connections (ldaps://) not supported by utilLDAP");
- return(!OK);
- }
- }
- */
-
- /* make sure that mod_ldap (util_ldap) is loaded */
- if (ap_find_linked_module("util_ldap.c") == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s,
- "Module mod_ldap missing. Mod_ldap (aka. util_ldap) "
- "must be loaded in order for mod_auth_ldap to function properly");
- return HTTP_INTERNAL_SERVER_ERROR;
-
- }
-
- if (!charset_confname) {
- return OK;
- }
-
- charset_confname = ap_server_root_relative(p, charset_confname);
- if (!charset_confname) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
- "Invalid charset conversion config path %s",
- (const char *)ap_get_module_config(s->module_config,
- &auth_ldap_module));
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- if ((status = ap_pcfg_openfile(&f, ptemp, charset_confname))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, status, s,
- "could not open charset conversion config file %s.",
- charset_confname);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- charset_conversions = apr_hash_make(p);
-
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
- const char *ll = l;
- char *lang;
-
- if (l[0] == '#') {
- continue;
- }
- lang = ap_getword_conf(p, &ll);
- ap_str_tolower(lang);
-
- if (ll[0]) {
- char *charset = ap_getword_conf(p, &ll);
- apr_hash_set(charset_conversions, lang, APR_HASH_KEY_STRING, charset);
- }
- }
- ap_cfg_closefile(f);
-
- to_charset = derive_codepage_from_lang (p, "utf-8");
- if (to_charset == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, status, s,
- "could not find the UTF-8 charset in the file %s.",
- charset_confname);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- return OK;
-}
-
-static void mod_auth_ldap_register_hooks(apr_pool_t *p)
-{
- ap_hook_post_config(auth_ldap_post_config,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_check_user_id(mod_auth_ldap_check_user_id, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_auth_checker(mod_auth_ldap_auth_checker, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module auth_ldap_module = {
- STANDARD20_MODULE_STUFF,
- mod_auth_ldap_create_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- mod_auth_ldap_cmds, /* command table */
- mod_auth_ldap_register_hooks, /* set up request processing hooks */
-};
diff --git a/modules/experimental/mod_auth_ldap.def b/modules/experimental/mod_auth_ldap.def
deleted file mode 100644
index 599636fb49..0000000000
--- a/modules/experimental/mod_auth_ldap.def
+++ /dev/null
@@ -1,6 +0,0 @@
-IMPORT util_ldap_connection_find
-IMPORT util_ldap_connection_close
-IMPORT util_ldap_cache_checkuserid
-IMPORT util_ldap_cache_compare
-IMPORT util_ldap_cache_comparedn
-EXPORT auth_ldap_module
diff --git a/modules/experimental/mod_auth_ldap.dsp b/modules/experimental/mod_auth_ldap.dsp
deleted file mode 100644
index 7744b8bad7..0000000000
--- a/modules/experimental/mod_auth_ldap.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth_ldap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth_ldap - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_auth_ldap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_auth_ldap.mak" CFG="mod_auth_ldap - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_auth_ldap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth_ldap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_auth_ldap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_auth_ldap_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_auth_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap.so
-# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_auth_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_auth_ldap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_auth_ldap_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap.so
-# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_auth_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_ldap.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_auth_ldap - Win32 Release"
-# Name "mod_auth_ldap - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth_ldap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth_ldap.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_auth_ldap - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_ldap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_auth_ldap.so "auth_ldap_module for Apache" ../../include/ap_release.h > .\mod_auth_ldap.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_auth_ldap - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_ldap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_auth_ldap.so "auth_ldap_module for Apache" ../../include/ap_release.h > .\mod_auth_ldap.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/mod_cache.c b/modules/experimental/mod_cache.c
deleted file mode 100644
index 7150a7641b..0000000000
--- a/modules/experimental/mod_cache.c
+++ /dev/null
@@ -1,995 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_cache.h"
-
-module AP_MODULE_DECLARE_DATA cache_module;
-APR_OPTIONAL_FN_TYPE(ap_cache_generate_key) *cache_generate_key;
-
-/* -------------------------------------------------------------- */
-
-
-/* Handles for cache filters, resolved at startup to eliminate
- * a name-to-function mapping on each request
- */
-static ap_filter_rec_t *cache_save_filter_handle;
-static ap_filter_rec_t *cache_out_filter_handle;
-static ap_filter_rec_t *cache_conditional_filter_handle;
-
-/*
- * CACHE handler
- * -------------
- *
- * Can we deliver this request from the cache?
- * If yes:
- * deliver the content by installing the CACHE_OUT filter.
- * If no:
- * check whether we're allowed to try cache it
- * If yes:
- * add CACHE_SAVE filter
- * If No:
- * oh well.
- */
-
-static int cache_url_handler(request_rec *r, int lookup)
-{
- apr_status_t rv;
- const char *pragma, *auth;
- apr_uri_t uri;
- char *url;
- apr_size_t urllen;
- char *path;
- const char *types;
- cache_info *info;
- cache_request_rec *cache;
- cache_server_conf *conf;
- apr_bucket_brigade *out;
-
- /* Delay initialization until we know we are handling a GET */
- if (r->method_number != M_GET) {
- return DECLINED;
- }
-
- uri = r->parsed_uri;
- url = r->unparsed_uri;
- path = uri.path;
- info = NULL;
-
- conf = (cache_server_conf *) ap_get_module_config(r->server->module_config,
- &cache_module);
-
- /*
- * Which cache module (if any) should handle this request?
- */
- if (!(types = ap_cache_get_cachetype(r, conf, path))) {
- return DECLINED;
- }
-
- /* make space for the per request config */
- cache = (cache_request_rec *) ap_get_module_config(r->request_config,
- &cache_module);
- if (!cache) {
- cache = apr_pcalloc(r->pool, sizeof(cache_request_rec));
- ap_set_module_config(r->request_config, &cache_module, cache);
- }
-
- /* save away the type */
- cache->types = types;
-
- /*
- * Are we allowed to serve cached info at all?
- */
-
- /* find certain cache controlling headers */
- pragma = apr_table_get(r->headers_in, "Pragma");
- auth = apr_table_get(r->headers_in, "Authorization");
-
- /* first things first - does the request allow us to return
- * cached information at all? If not, just decline the request.
- *
- * Note that there is a big difference between not being allowed
- * to cache a request (no-store) and not being allowed to return
- * a cached request without revalidation (max-age=0).
- *
- * Caching is forbidden under the following circumstances:
- *
- * - RFC2616 14.9.2 Cache-Control: no-store
- * - Pragma: no-cache
- * - Any requests requiring authorization.
- */
- if (conf->ignorecachecontrol == 1 && auth == NULL) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "incoming request is asking for a uncached version of "
- "%s, but we know better and are ignoring it", url);
- }
- else {
- if (ap_cache_liststr(NULL, pragma, "no-cache", NULL) ||
- auth != NULL) {
- /* delete the previously cached file */
- cache_remove_url(r, cache->types, url);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache: no-cache or authorization forbids caching "
- "of %s", url);
- return DECLINED;
- }
- }
-
- /*
- * Try to serve this request from the cache.
- *
- * If no existing cache file (DECLINED)
- * add cache_save filter
- * If cached file (OK)
- * If fresh cache file
- * clear filter stack
- * add cache_out filter
- * return OK
- * If stale cache file
- * add cache_conditional filter (which updates cache)
- */
-
- rv = cache_select_url(r, cache->types, url);
- if (rv != OK) {
- if (rv == DECLINED) {
- if (!lookup) {
- /* add cache_save filter to cache this request */
- ap_add_output_filter_handle(cache_save_filter_handle, NULL, r,
- r->connection);
- }
- }
- else {
- /* error */
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
- "cache: error returned while checking for cached "
- "file by %s cache", cache->type);
- }
- return DECLINED;
- }
-
- /* We have located a suitable cache file now. */
-
- /* RFC2616 13.2 - Check cache object expiration */
- cache->fresh = ap_cache_check_freshness(cache, r);
-
- /* What we have in our cache isn't fresh. */
- if (!cache->fresh) {
- /* If our stale cached response was conditional... */
- if (!lookup && ap_cache_request_is_conditional(r)) {
- info = &(cache->handle->cache_obj->info);
-
- /* fudge response into a conditional */
- if (info && info->etag) {
- /* if we have a cached etag */
- apr_table_set(r->headers_in, "If-None-Match", info->etag);
- }
- else if (info && info->lastmods) {
- /* if we have a cached IMS */
- apr_table_set(r->headers_in, "If-Modified-Since",
- info->lastmods);
- }
- }
-
- /* Add cache_conditional_filter to see if we can salvage
- * later.
- */
- ap_add_output_filter_handle(cache_conditional_filter_handle,
- NULL, r, r->connection);
- return DECLINED;
- }
-
- /* fresh data available */
-
- info = &(cache->handle->cache_obj->info);
-
- if (info && info->lastmod) {
- ap_update_mtime(r, info->lastmod);
- }
-
- rv = ap_meets_conditions(r);
- if (rv != OK) {
- /* Return cached status. */
- return rv;
- }
-
- /* If we're a lookup, we can exit now instead of serving the content. */
- if (lookup) {
- return OK;
- }
-
- /* Serve up the content */
-
- /* We are in the quick handler hook, which means that no output
- * filters have been set. So lets run the insert_filter hook.
- */
- ap_run_insert_filter(r);
- ap_add_output_filter_handle(cache_out_filter_handle, NULL,
- r, r->connection);
-
- /* kick off the filter stack */
- out = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- rv = ap_pass_brigade(r->output_filters, out);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
- "cache: error returned while trying to return %s "
- "cached data",
- cache->type);
- return rv;
- }
-
- return OK;
-}
-
-/*
- * CACHE_OUT filter
- * ----------------
- *
- * Deliver cached content (headers and body) up the stack.
- */
-static int cache_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
- cache_request_rec *cache;
-
- cache = (cache_request_rec *) ap_get_module_config(r->request_config,
- &cache_module);
-
- if (!cache) {
- /* user likely configured CACHE_OUT manually; they should use mod_cache
- * configuration to do that */
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "CACHE_OUT enabled unexpectedly");
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r->server,
- "cache: running CACHE_OUT filter");
-
- /* cache_recall_entity_headers() was called in cache_select_url() */
- cache_recall_entity_body(cache->handle, r->pool, bb);
-
- /* This filter is done once it has served up its content */
- ap_remove_output_filter(f);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r->server,
- "cache: serving %s", r->uri);
- return ap_pass_brigade(f->next, bb);
-}
-
-
-/*
- * CACHE_CONDITIONAL filter
- * ------------------------
- *
- * Decide whether or not cached content should be delivered
- * based on our fudged conditional request.
- * If response HTTP_NOT_MODIFIED
- * replace ourselves with cache_out filter
- * Otherwise
- * replace ourselves with cache_save filter
- */
-
-static int cache_conditional_filter(ap_filter_t *f, apr_bucket_brigade *in)
-{
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, f->r->server,
- "cache: running CACHE_CONDITIONAL filter");
-
- if (f->r->status == HTTP_NOT_MODIFIED) {
- /* replace ourselves with CACHE_OUT filter */
- ap_add_output_filter_handle(cache_out_filter_handle, NULL,
- f->r, f->r->connection);
- }
- else {
- /* replace ourselves with CACHE_SAVE filter */
- ap_add_output_filter_handle(cache_save_filter_handle, NULL,
- f->r, f->r->connection);
- }
- ap_remove_output_filter(f);
-
- return ap_pass_brigade(f->next, in);
-}
-
-
-/*
- * CACHE_SAVE filter
- * ---------------
- *
- * Decide whether or not this content should be cached.
- * If we decide no it should:
- * remove the filter from the chain
- * If we decide yes it should:
- * pass the data to the storage manager
- * pass the data to the next filter (the network)
- *
- */
-
-static int cache_save_filter(ap_filter_t *f, apr_bucket_brigade *in)
-{
- int rv;
- int date_in_errhdr = 0;
- request_rec *r = f->r;
- cache_request_rec *cache;
- cache_server_conf *conf;
- char *url = r->unparsed_uri;
- const char *cc_in, *cc_out, *cl;
- const char *exps, *lastmods, *dates, *etag;
- apr_time_t exp, date, lastmod, now;
- apr_off_t size;
- cache_info *info;
- char *reason;
- apr_pool_t *p;
-
- /* check first whether running this filter has any point or not */
- /* If the user has Cache-Control: no-store from RFC 2616, don't store! */
- cc_in = apr_table_get(r->headers_in, "Cache-Control");
- if (r->no_cache || ap_cache_liststr(NULL, cc_in, "no-store", NULL)) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, in);
- }
-
- /* Setup cache_request_rec */
- cache = (cache_request_rec *) ap_get_module_config(r->request_config,
- &cache_module);
- if (!cache) {
- /* user likely configured CACHE_SAVE manually; they should really use
- * mod_cache configuration to do that
- */
- cache = apr_pcalloc(r->pool, sizeof(cache_request_rec));
- ap_set_module_config(r->request_config, &cache_module, cache);
- }
-
- reason = NULL;
- p = r->pool;
- /*
- * Pass Data to Cache
- * ------------------
- * This section passes the brigades into the cache modules, but only
- * if the setup section (see below) is complete.
- */
-
- /* have we already run the cachability check and set up the
- * cached file handle?
- */
- if (cache->in_checked) {
- /* pass the brigades into the cache, then pass them
- * up the filter stack
- */
- rv = cache_store_entity_body(cache->handle, r, in);
- if (rv != APR_SUCCESS) {
- ap_remove_output_filter(f);
- }
- return ap_pass_brigade(f->next, in);
- }
-
- /*
- * Setup Data in Cache
- * -------------------
- * This section opens the cache entity and sets various caching
- * parameters, and decides whether this URL should be cached at
- * all. This section is* run before the above section.
- */
- info = apr_pcalloc(r->pool, sizeof(cache_info));
-
- /* read expiry date; if a bad date, then leave it so the client can
- * read it
- */
- exps = apr_table_get(r->err_headers_out, "Expires");
- if (exps == NULL) {
- exps = apr_table_get(r->headers_out, "Expires");
- }
- if (exps != NULL) {
- if (APR_DATE_BAD == (exp = apr_date_parse_http(exps))) {
- exps = NULL;
- }
- }
- else {
- exp = APR_DATE_BAD;
- }
-
- /* read the last-modified date; if the date is bad, then delete it */
- lastmods = apr_table_get(r->err_headers_out, "Last-Modified");
- if (lastmods ==NULL) {
- lastmods = apr_table_get(r->headers_out, "Last-Modified");
- }
- if (lastmods != NULL) {
- if (APR_DATE_BAD == (lastmod = apr_date_parse_http(lastmods))) {
- lastmods = NULL;
- }
- }
- else {
- lastmod = APR_DATE_BAD;
- }
-
- conf = (cache_server_conf *) ap_get_module_config(r->server->module_config, &cache_module);
- /* read the etag and cache-control from the entity */
- etag = apr_table_get(r->err_headers_out, "Etag");
- if (etag == NULL) {
- etag = apr_table_get(r->headers_out, "Etag");
- }
- cc_out = apr_table_get(r->err_headers_out, "Cache-Control");
- if (cc_out == NULL) {
- cc_out = apr_table_get(r->headers_out, "Cache-Control");
- }
-
- /*
- * what responses should we not cache?
- *
- * At this point we decide based on the response headers whether it
- * is appropriate _NOT_ to cache the data from the server. There are
- * a whole lot of conditions that prevent us from caching this data.
- * They are tested here one by one to be clear and unambiguous.
- */
- if (r->status != HTTP_OK && r->status != HTTP_NON_AUTHORITATIVE
- && r->status != HTTP_MULTIPLE_CHOICES
- && r->status != HTTP_MOVED_PERMANENTLY
- && r->status != HTTP_NOT_MODIFIED) {
- /* RFC2616 13.4 we are allowed to cache 200, 203, 206, 300, 301 or 410
- * We don't cache 206, because we don't (yet) cache partial responses.
- * We include 304 Not Modified here too as this is the origin server
- * telling us to serve the cached copy.
- */
- reason = apr_psprintf(p, "Response status %d", r->status);
- }
- else if (exps != NULL && exp == APR_DATE_BAD) {
- /* if a broken Expires header is present, don't cache it */
- reason = apr_pstrcat(p, "Broken expires header: ", exps, NULL);
- }
- else if (r->args && exps == NULL) {
- /* if query string present but no expiration time, don't cache it
- * (RFC 2616/13.9)
- */
- reason = "Query string present but no expires header";
- }
- else if (r->status == HTTP_NOT_MODIFIED && (NULL == cache->handle)) {
- /* if the server said 304 Not Modified but we have no cache
- * file - pass this untouched to the user agent, it's not for us.
- */
- reason = "HTTP Status 304 Not Modified";
- }
- else if (r->status == HTTP_OK && lastmods == NULL && etag == NULL
- && (exps == NULL) && (conf->no_last_mod_ignore ==0)) {
- /* 200 OK response from HTTP/1.0 and up without Last-Modified,
- * Etag, or Expires headers.
- */
- /* Note: mod-include clears last_modified/expires/etags - this
- * is why we have an optional function for a key-gen ;-)
- */
- reason = "No Last-Modified, Etag, or Expires headers";
- }
- else if (r->header_only) {
- /* HEAD requests */
- reason = "HTTP HEAD request";
- }
- else if (ap_cache_liststr(NULL, cc_out, "no-store", NULL)) {
- /* RFC2616 14.9.2 Cache-Control: no-store response
- * indicating do not cache, or stop now if you are
- * trying to cache it */
- reason = "Cache-Control: no-store present";
- }
- else if (ap_cache_liststr(NULL, cc_out, "private", NULL)) {
- /* RFC2616 14.9.1 Cache-Control: private
- * this object is marked for this user's eyes only. Behave
- * as a tunnel.
- */
- reason = "Cache-Control: private present";
- }
- else if (apr_table_get(r->headers_in, "Authorization") != NULL
- && !(ap_cache_liststr(NULL, cc_out, "s-maxage", NULL)
- || ap_cache_liststr(NULL, cc_out, "must-revalidate", NULL)
- || ap_cache_liststr(NULL, cc_out, "public", NULL))) {
- /* RFC2616 14.8 Authorisation:
- * if authorisation is included in the request, we don't cache,
- * but we can cache if the following exceptions are true:
- * 1) If Cache-Control: s-maxage is included
- * 2) If Cache-Control: must-revalidate is included
- * 3) If Cache-Control: public is included
- */
- reason = "Authorization required";
- }
- else if (r->no_cache) {
- /* or we've been asked not to cache it above */
- reason = "no_cache present";
- }
-
- if (reason) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache: %s not cached. Reason: %s", url, reason);
- /* remove this object from the cache
- * BillS Asks.. Why do we need to make this call to remove_url?
- * leave it in for now..
- */
- cache_remove_url(r, cache->types, url);
-
- /* remove this filter from the chain */
- ap_remove_output_filter(f);
-
- /* ship the data up the stack */
- return ap_pass_brigade(f->next, in);
- }
- cache->in_checked = 1;
-
- /* Set the content length if known.
- */
- cl = apr_table_get(r->err_headers_out, "Content-Length");
- if (cl == NULL) {
- cl = apr_table_get(r->headers_out, "Content-Length");
- }
- if (cl) {
- char *errp;
- if (apr_strtoff(&size, cl, &errp, 10) || *errp || size < 0) {
- cl = NULL; /* parse error, see next 'if' block */
- }
- }
-
- if (!cl) {
- /* if we don't get the content-length, see if we have all the
- * buckets and use their length to calculate the size
- */
- apr_bucket *e;
- int all_buckets_here=0;
- int unresolved_length = 0;
- size=0;
- for (e = APR_BRIGADE_FIRST(in);
- e != APR_BRIGADE_SENTINEL(in);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- all_buckets_here=1;
- break;
- }
- if (APR_BUCKET_IS_FLUSH(e)) {
- unresolved_length = 1;
- continue;
- }
- if (e->length == (apr_size_t)-1) {
- break;
- }
- size += e->length;
- }
- if (!all_buckets_here) {
- size = -1;
- }
- }
-
- /* It's safe to cache the response.
- *
- * There are two possiblities at this point:
- * - cache->handle == NULL. In this case there is no previously
- * cached entity anywhere on the system. We must create a brand
- * new entity and store the response in it.
- * - cache->handle != NULL. In this case there is a stale
- * entity in the system which needs to be replaced by new
- * content (unless the result was 304 Not Modified, which means
- * the cached entity is actually fresh, and we should update
- * the headers).
- */
- /* no cache handle, create a new entity */
- if (!cache->handle) {
- rv = cache_create_entity(r, cache->types, url, size);
- }
- /* pre-existing cache handle and 304, make entity fresh */
- else if (r->status == HTTP_NOT_MODIFIED) {
- /* update headers: TODO */
-
- /* remove this filter ??? */
-
- /* XXX is this right? we must set rv to something other than OK
- * in this path
- */
- rv = HTTP_NOT_MODIFIED;
- }
- /* pre-existing cache handle and new entity, replace entity
- * with this one
- */
- else {
- cache_remove_entity(r, cache->types, cache->handle);
- rv = cache_create_entity(r, cache->types, url, size);
- }
-
- if (rv != OK) {
- /* Caching layer declined the opportunity to cache the response */
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, in);
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache: Caching url: %s", url);
-
- /*
- * We now want to update the cache file header information with
- * the new date, last modified, expire and content length and write
- * it away to our cache file. First, we determine these values from
- * the response, using heuristics if appropriate.
- *
- * In addition, we make HTTP/1.1 age calculations and write them away
- * too.
- */
-
- /* Read the date. Generate one if one is not supplied */
- dates = apr_table_get(r->err_headers_out, "Date");
- if (dates != NULL) {
- date_in_errhdr = 1;
- }
- else {
- dates = apr_table_get(r->headers_out, "Date");
- }
- if (dates != NULL) {
- info->date = apr_date_parse_http(dates);
- }
- else {
- info->date = APR_DATE_BAD;
- }
-
- now = apr_time_now();
- if (info->date == APR_DATE_BAD) { /* No, or bad date */
- char *dates;
- /* no date header (or bad header)! */
- /* add one; N.B. use the time _now_ rather than when we were checking
- * the cache
- */
- if (date_in_errhdr == 1) {
- apr_table_unset(r->err_headers_out, "Date");
- }
- date = now;
- dates = apr_pcalloc(r->pool, MAX_STRING_LEN);
- apr_rfc822_date(dates, now);
- apr_table_set(r->headers_out, "Date", dates);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache: Added date header");
- info->date = date;
- }
- else {
- date = info->date;
- }
-
- /* set response_time for HTTP/1.1 age calculations */
- info->response_time = now;
-
- /* get the request time */
- info->request_time = r->request_time;
-
- /* check last-modified date */
- if (lastmod != APR_DATE_BAD && lastmod > date) {
- /* if it's in the future, then replace by date */
- lastmod = date;
- lastmods = dates;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0,
- r->server,
- "cache: Last modified is in the future, "
- "replacing with now");
- }
- info->lastmod = lastmod;
-
- /* if no expiry date then
- * if lastmod
- * expiry date = date + min((date - lastmod) * factor, maxexpire)
- * else
- * expire date = date + defaultexpire
- */
- if (exp == APR_DATE_BAD) {
- /* if lastmod == date then you get 0*conf->factor which results in
- * an expiration time of now. This causes some problems with
- * freshness calculations, so we choose the else path...
- */
- if ((lastmod != APR_DATE_BAD) && (lastmod < date)) {
- apr_time_t x = (apr_time_t) ((date - lastmod) * conf->factor);
-
- if (x > conf->maxex) {
- x = conf->maxex;
- }
- exp = date + x;
- }
- else {
- exp = date + conf->defex;
- }
- }
- info->expire = exp;
-
- info->content_type = apr_pstrdup(r->pool, r->content_type);
- info->etag = apr_pstrdup(r->pool, etag);
- info->lastmods = apr_pstrdup(r->pool, lastmods);
- info->filename = apr_pstrdup(r->pool, r->filename );
-
- /*
- * Write away header information to cache.
- */
- rv = cache_store_entity_headers(cache->handle, r, info);
- if (rv == APR_SUCCESS) {
- rv = cache_store_entity_body(cache->handle, r, in);
- }
- if (rv != APR_SUCCESS) {
- ap_remove_output_filter(f);
- }
-
- return ap_pass_brigade(f->next, in);
-}
-
-/* -------------------------------------------------------------- */
-/* Setup configurable data */
-
-static void * create_cache_config(apr_pool_t *p, server_rec *s)
-{
- cache_server_conf *ps = apr_pcalloc(p, sizeof(cache_server_conf));
-
- /* array of URL prefixes for which caching is enabled */
- ps->cacheenable = apr_array_make(p, 10, sizeof(struct cache_enable));
- /* array of URL prefixes for which caching is disabled */
- ps->cachedisable = apr_array_make(p, 10, sizeof(struct cache_disable));
- /* maximum time to cache a document */
- ps->maxex = DEFAULT_CACHE_MAXEXPIRE;
- ps->maxex_set = 0;
- /* default time to cache a document */
- ps->defex = DEFAULT_CACHE_EXPIRE;
- ps->defex_set = 0;
- /* factor used to estimate Expires date from LastModified date */
- ps->factor = DEFAULT_CACHE_LMFACTOR;
- ps->factor_set = 0;
- /* default percentage to force cache completion */
- ps->complete = DEFAULT_CACHE_COMPLETION;
- ps->complete_set = 0;
- ps->no_last_mod_ignore_set = 0;
- ps->no_last_mod_ignore = 0;
- ps->ignorecachecontrol = 0;
- ps->ignorecachecontrol_set = 0 ;
- return ps;
-}
-
-static void * merge_cache_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- cache_server_conf *ps = apr_pcalloc(p, sizeof(cache_server_conf));
- cache_server_conf *base = (cache_server_conf *) basev;
- cache_server_conf *overrides = (cache_server_conf *) overridesv;
-
- /* array of URL prefixes for which caching is disabled */
- ps->cachedisable = apr_array_append(p,
- base->cachedisable,
- overrides->cachedisable);
- /* array of URL prefixes for which caching is enabled */
- ps->cacheenable = apr_array_append(p,
- base->cacheenable,
- overrides->cacheenable);
- /* maximum time to cache a document */
- ps->maxex = (overrides->maxex_set == 0) ? base->maxex : overrides->maxex;
- /* default time to cache a document */
- ps->defex = (overrides->defex_set == 0) ? base->defex : overrides->defex;
- /* factor used to estimate Expires date from LastModified date */
- ps->factor =
- (overrides->factor_set == 0) ? base->factor : overrides->factor;
- /* default percentage to force cache completion */
- ps->complete =
- (overrides->complete_set == 0) ? base->complete : overrides->complete;
-
- ps->no_last_mod_ignore =
- (overrides->no_last_mod_ignore_set == 0)
- ? base->no_last_mod_ignore
- : overrides->no_last_mod_ignore;
- ps->ignorecachecontrol =
- (overrides->ignorecachecontrol_set == 0)
- ? base->ignorecachecontrol
- : overrides->ignorecachecontrol;
- return ps;
-}
-static const char *set_cache_ignore_no_last_mod(cmd_parms *parms, void *dummy,
- int flag)
-{
- cache_server_conf *conf;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- conf->no_last_mod_ignore = flag;
- conf->no_last_mod_ignore_set = 1;
- return NULL;
-
-}
-
-static const char *set_cache_ignore_cachecontrol(cmd_parms *parms,
- void *dummy, int flag)
-{
- cache_server_conf *conf;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- conf->ignorecachecontrol = flag;
- conf->ignorecachecontrol_set = 1;
- return NULL;
-}
-
-static const char *add_cache_enable(cmd_parms *parms, void *dummy,
- const char *type,
- const char *url)
-{
- cache_server_conf *conf;
- struct cache_enable *new;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- new = apr_array_push(conf->cacheenable);
- new->type = type;
- new->url = url;
- return NULL;
-}
-
-static const char *add_cache_disable(cmd_parms *parms, void *dummy,
- const char *url)
-{
- cache_server_conf *conf;
- struct cache_enable *new;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- new = apr_array_push(conf->cachedisable);
- new->url = url;
- return NULL;
-}
-
-static const char *set_cache_maxex(cmd_parms *parms, void *dummy,
- const char *arg)
-{
- cache_server_conf *conf;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- conf->maxex = (apr_time_t) (atol(arg) * MSEC_ONE_SEC);
- conf->maxex_set = 1;
- return NULL;
-}
-
-static const char *set_cache_defex(cmd_parms *parms, void *dummy,
- const char *arg)
-{
- cache_server_conf *conf;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- conf->defex = (apr_time_t) (atol(arg) * MSEC_ONE_SEC);
- conf->defex_set = 1;
- return NULL;
-}
-
-static const char *set_cache_factor(cmd_parms *parms, void *dummy,
- const char *arg)
-{
- cache_server_conf *conf;
- double val;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- if (sscanf(arg, "%lg", &val) != 1) {
- return "CacheLastModifiedFactor value must be a float";
- }
- conf->factor = val;
- conf->factor_set = 1;
- return NULL;
-}
-
-static const char *set_cache_complete(cmd_parms *parms, void *dummy,
- const char *arg)
-{
- cache_server_conf *conf;
- int val;
-
- conf =
- (cache_server_conf *)ap_get_module_config(parms->server->module_config,
- &cache_module);
- if (sscanf(arg, "%u", &val) != 1) {
- return "CacheForceCompletion value must be a percentage";
- }
- conf->complete = val;
- conf->complete_set = 1;
- return NULL;
-}
-
-static int cache_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- /* This is the means by which unusual (non-unix) os's may find alternate
- * means to run a given command (e.g. shebang/registry parsing on Win32)
- */
- cache_generate_key = APR_RETRIEVE_OPTIONAL_FN(ap_cache_generate_key);
- if (!cache_generate_key) {
- cache_generate_key = cache_generate_key_default;
- }
- return OK;
-}
-
-static const command_rec cache_cmds[] =
-{
- /* XXX
- * Consider a new config directive that enables loading specific cache
- * implememtations (like mod_cache_mem, mod_cache_file, etc.).
- * Rather than using a LoadModule directive, admin would use something
- * like CacheModule mem_cache_module | file_cache_module, etc,
- * which would cause the approprpriate cache module to be loaded.
- * This is more intuitive that requiring a LoadModule directive.
- */
-
- AP_INIT_TAKE2("CacheEnable", add_cache_enable, NULL, RSRC_CONF,
- "A cache type and partial URL prefix below which "
- "caching is enabled"),
- AP_INIT_TAKE1("CacheDisable", add_cache_disable, NULL, RSRC_CONF,
- "A partial URL prefix below which caching is disabled"),
- AP_INIT_TAKE1("CacheMaxExpire", set_cache_maxex, NULL, RSRC_CONF,
- "The maximum time in seconds to cache a document"),
- AP_INIT_TAKE1("CacheDefaultExpire", set_cache_defex, NULL, RSRC_CONF,
- "The default time in seconds to cache a document"),
- AP_INIT_FLAG("CacheIgnoreNoLastMod", set_cache_ignore_no_last_mod, NULL,
- RSRC_CONF,
- "Ignore Responses where there is no Last Modified Header"),
- AP_INIT_FLAG("CacheIgnoreCacheControl", set_cache_ignore_cachecontrol,
- NULL,
- RSRC_CONF,
- "Ignore requests from the client for uncached content"),
- AP_INIT_TAKE1("CacheLastModifiedFactor", set_cache_factor, NULL, RSRC_CONF,
- "The factor used to estimate Expires date from "
- "LastModified date"),
- AP_INIT_TAKE1("CacheForceCompletion", set_cache_complete, NULL, RSRC_CONF,
- "Percentage of download to arrive for the cache to force "
- "complete transfer"),
- {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- /* cache initializer */
- /* cache handler */
- ap_hook_quick_handler(cache_url_handler, NULL, NULL, APR_HOOK_FIRST);
- /* cache filters
- * XXX The cache filters need to run right after the handlers and before
- * any other filters. Consider creating AP_FTYPE_CACHE for this purpose.
- * Make them AP_FTYPE_CONTENT for now.
- * XXX ianhH:they should run AFTER all the other content filters.
- */
- cache_save_filter_handle =
- ap_register_output_filter("CACHE_SAVE",
- cache_save_filter,
- NULL,
- AP_FTYPE_CONTENT_SET-1);
- /* CACHE_OUT must go into the filter chain before SUBREQ_CORE to
- * handle subrequsts. Decrementing filter type by 1 ensures this
- * happens.
- */
- cache_out_filter_handle =
- ap_register_output_filter("CACHE_OUT",
- cache_out_filter,
- NULL,
- AP_FTYPE_CONTENT_SET-1);
- cache_conditional_filter_handle =
- ap_register_output_filter("CACHE_CONDITIONAL",
- cache_conditional_filter,
- NULL,
- AP_FTYPE_CONTENT_SET);
- ap_hook_post_config(cache_post_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA cache_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- create_cache_config, /* create per-server config structure */
- merge_cache_config, /* merge per-server config structures */
- cache_cmds, /* command apr_table_t */
- register_hooks
-};
diff --git a/modules/experimental/mod_cache.dsp b/modules/experimental/mod_cache.dsp
deleted file mode 100644
index 83580b1b9f..0000000000
--- a/modules/experimental/mod_cache.dsp
+++ /dev/null
@@ -1,168 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_cache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_cache.mak" CFG="mod_cache - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "MOD_CACHE_EXPORTS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "CACHE_DECLARE_EXPORT" /D "MOD_CACHE_EXPORTS" /Fd"Release\mod_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cache.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "CACHE_DECLARE_EXPORT" /Fd"Debug\mod_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cache.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_cache - Win32 Release"
-# Name "mod_cache - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\cache_cache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_hash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_pqueue.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\cache_cache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_hash.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_pqueue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cache.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_cache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_cache.so "cache_module for Apache" ../../include/ap_release.h > .\mod_cache.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_cache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_cache.so "cache_module for Apache" ../../include/ap_release.h > .\mod_cache.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/mod_cache.h b/modules/experimental/mod_cache.h
deleted file mode 100644
index b491f9a117..0000000000
--- a/modules/experimental/mod_cache.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_CACHE_H
-#define MOD_CACHE_H
-
-/*
- * Main include file for the Apache Transparent Cache
- */
-
-#define CORE_PRIVATE
-
-#include "apr_hooks.h"
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_md5.h"
-#include "apr_pools.h"
-#include "apr_strings.h"
-#include "apr_optional.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_connection.h"
-#include "util_filter.h"
-#include "apr_date.h"
-#include "apr_uri.h"
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#include "apr_atomic.h"
-
-#ifndef MAX
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-#endif
-#ifndef MIN
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#endif
-
-/* default completion is 60% */
-#define DEFAULT_CACHE_COMPLETION (60)
-#define MSEC_ONE_DAY ((apr_time_t)(86400*APR_USEC_PER_SEC)) /* one day, in microseconds */
-#define MSEC_ONE_HR ((apr_time_t)(3600*APR_USEC_PER_SEC)) /* one hour, in microseconds */
-#define MSEC_ONE_MIN ((apr_time_t)(60*APR_USEC_PER_SEC)) /* one minute, in microseconds */
-#define MSEC_ONE_SEC ((apr_time_t)(APR_USEC_PER_SEC)) /* one second, in microseconds */
-#define DEFAULT_CACHE_MAXEXPIRE MSEC_ONE_DAY
-#define DEFAULT_CACHE_EXPIRE MSEC_ONE_HR
-#define DEFAULT_CACHE_LMFACTOR (0.1)
-
-/* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and
- * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define CACHE_DECLARE(type) type
-#define CACHE_DECLARE_NONSTD(type) type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_STATIC)
-#define CACHE_DECLARE(type) type __stdcall
-#define CACHE_DECLARE_NONSTD(type) type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_EXPORT)
-#define CACHE_DECLARE(type) __declspec(dllexport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define CACHE_DECLARE_DATA __declspec(dllexport)
-#else
-#define CACHE_DECLARE(type) __declspec(dllimport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type) __declspec(dllimport) type
-#define CACHE_DECLARE_DATA __declspec(dllimport)
-#endif
-
-struct cache_enable {
- const char *url;
- const char *type;
-};
-
-struct cache_disable {
- const char *url;
-};
-
-/* static information about the local cache */
-typedef struct {
- apr_array_header_t *cacheenable; /* URLs to cache */
- apr_array_header_t *cachedisable; /* URLs not to cache */
- apr_time_t maxex; /* Maximum time to keep cached files in msecs */
- int maxex_set;
- apr_time_t defex; /* default time to keep cached file in msecs */
- int defex_set;
- double factor; /* factor for estimating expires date */
- int factor_set;
- int complete; /* Force cache completion after this point */
- int complete_set;
- /** ignore the last-modified header when deciding to cache this request */
- int no_last_mod_ignore_set;
- int no_last_mod_ignore;
- /** ignore client's requests for uncached responses */
- int ignorecachecontrol;
- int ignorecachecontrol_set;
-} cache_server_conf;
-
-/* cache info information */
-typedef struct cache_info cache_info;
-struct cache_info {
- char *content_type;
- char *etag;
- char *lastmods; /* last modified of cache entity */
- char *filename;
- apr_time_t date;
- apr_time_t lastmod;
- char lastmod_str[APR_RFC822_DATE_LEN];
- apr_time_t expire;
- apr_time_t request_time;
- apr_time_t response_time;
- apr_size_t len;
- apr_time_t ims; /* If-Modified_Since header value */
- apr_time_t ius; /* If-UnModified_Since header value */
- const char *im; /* If-Match header value */
- const char *inm; /* If-None-Match header value */
-
-};
-
-/* cache handle information */
-
-/* XXX TODO On the next structure change/MMN bump,
- * count must become an apr_off_t, representing
- * the potential size of disk cached objects.
- * Then dig for
- * "XXX Bad Temporary Cast - see cache_object_t notes"
- */
-typedef struct cache_object cache_object_t;
-struct cache_object {
- char *key;
- cache_object_t *next;
- cache_info info;
- void *vobj; /* Opaque portion (specific to the cache implementation) of the cache object */
- apr_size_t count; /* Number of body bytes written to the cache so far */
- int complete;
- apr_uint32_t refcount;
- apr_size_t cleanup;
-};
-
-typedef struct cache_handle cache_handle_t;
-struct cache_handle {
- cache_object_t *cache_obj;
- int (*remove_entity) (cache_handle_t *h);
- apr_status_t (*store_headers)(cache_handle_t *h, request_rec *r, cache_info *i);
- apr_status_t (*store_body)(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b);
- apr_status_t (*recall_headers) (cache_handle_t *h, request_rec *r);
- apr_status_t (*recall_body) (cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
- apr_table_t *req_hdrs; /* These are the original request headers */
-};
-
-/* per request cache information */
-typedef struct {
- const char *types; /* the types of caches allowed */
- const char *type; /* the type of cache selected */
- int fresh; /* is the entitey fresh? */
- cache_handle_t *handle; /* current cache handle */
- int in_checked; /* CACHE_IN must cache the entity */
- apr_bucket_brigade *saved_brigade; /* copy of partial response */
- apr_off_t saved_size; /* length of saved_brigade */
- apr_time_t exp; /* expiration */
- apr_time_t lastmod; /* last-modified time */
- cache_info *info; /* current cache info */
-} cache_request_rec;
-
-
-/* cache_util.c */
-/* do a HTTP/1.1 age calculation */
-CACHE_DECLARE(apr_time_t) ap_cache_current_age(cache_info *info, const apr_time_t age_value,
- apr_time_t now);
-
-/**
- * Check the freshness of the cache object per RFC2616 section 13.2 (Expiration Model)
- * @param cache cache_request_rec
- * @param r request_rec
- * @return 0 ==> cache object is stale, 1 ==> cache object is fresh
- */
-CACHE_DECLARE(int) ap_cache_check_freshness(cache_request_rec *cache, request_rec *r);
-CACHE_DECLARE(apr_time_t) ap_cache_hex2usec(const char *x);
-CACHE_DECLARE(void) ap_cache_usec2hex(apr_time_t j, char *y);
-CACHE_DECLARE(char *) generate_name(apr_pool_t *p, int dirlevels,
- int dirlength,
- const char *name);
-CACHE_DECLARE(int) ap_cache_request_is_conditional(request_rec *r);
-CACHE_DECLARE(const char *)ap_cache_get_cachetype(request_rec *r, cache_server_conf *conf, const char *url);
-CACHE_DECLARE(int) ap_cache_liststr(apr_pool_t *p, const char *list,
- const char *key, char **val);
-CACHE_DECLARE(const char *)ap_cache_tokstr(apr_pool_t *p, const char *list, const char **str);
-
-/* Create a new table consisting of those elements from a request_rec's
- * headers_out that are allowed to be stored in a cache
- */
-CACHE_DECLARE(apr_table_t *)ap_cache_cacheable_hdrs_out(apr_pool_t *pool, apr_table_t *t);
-
-/**
- * cache_storage.c
- */
-int cache_remove_url(request_rec *r, const char *types, char *url);
-int cache_create_entity(request_rec *r, const char *types, char *url, apr_off_t size);
-int cache_remove_entity(request_rec *r, const char *types, cache_handle_t *h);
-int cache_select_url(request_rec *r, const char *types, char *url);
-apr_status_t cache_generate_key_default( request_rec *r, apr_pool_t*p, char**key );
-/**
- * create a key for the cache based on the request record
- * this is the 'default' version, which can be overridden by a default function
- */
-const char* cache_create_key( request_rec*r );
-
-apr_status_t cache_store_entity_headers(cache_handle_t *h, request_rec *r, cache_info *info);
-apr_status_t cache_store_entity_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *bb);
-
-apr_status_t cache_recall_entity_headers(cache_handle_t *h, request_rec *r);
-apr_status_t cache_recall_entity_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
-
-
-/* hooks */
-
-/* Create a set of CACHE_DECLARE(type), CACHE_DECLARE_NONSTD(type) and
- * CACHE_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define CACHE_DECLARE(type) type
-#define CACHE_DECLARE_NONSTD(type) type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_STATIC)
-#define CACHE_DECLARE(type) type __stdcall
-#define CACHE_DECLARE_NONSTD(type) type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_EXPORT)
-#define CACHE_DECLARE(type) __declspec(dllexport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define CACHE_DECLARE_DATA __declspec(dllexport)
-#else
-#define CACHE_DECLARE(type) __declspec(dllimport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type) __declspec(dllimport) type
-#define CACHE_DECLARE_DATA __declspec(dllimport)
-#endif
-
-APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, create_entity,
- (cache_handle_t *h, request_rec *r, const char *type,
- const char *urlkey, apr_off_t len))
-APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, open_entity,
- (cache_handle_t *h, request_rec *r, const char *type,
- const char *urlkey))
-APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, remove_url,
- (const char *type, const char *urlkey))
-
-
-
-APR_DECLARE_OPTIONAL_FN(apr_status_t,
- ap_cache_generate_key,
- (request_rec *r, apr_pool_t*p, char**key ));
-
-
-#endif /*MOD_CACHE_H*/
diff --git a/modules/experimental/mod_cache.imp b/modules/experimental/mod_cache.imp
deleted file mode 100644
index 07a32f584b..0000000000
--- a/modules/experimental/mod_cache.imp
+++ /dev/null
@@ -1,14 +0,0 @@
- (MODCACHE)
- ap_cache_request_is_conditional,
- ap_cache_get_cachetype,
- ap_cache_liststr,
- ap_cache_tokstr,
- ap_cache_hex2usec,
- ap_cache_usec2hex,
- ap_cache_cacheable_hdrs_out,
- generate_name,
- cache_hook_create_entity,
- cache_hook_open_entity,
- cache_hook_remove_url
-
-
diff --git a/modules/experimental/mod_case_filter.c b/modules/experimental/mod_case_filter.c
deleted file mode 100644
index 89e1e33d3b..0000000000
--- a/modules/experimental/mod_case_filter.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_buckets.h"
-#include "apr_general.h"
-#include "apr_lib.h"
-#include "util_filter.h"
-#include "http_request.h"
-
-#include <ctype.h>
-
-static const char s_szCaseFilterName[]="CaseFilter";
-module AP_MODULE_DECLARE_DATA case_filter_module;
-
-typedef struct
- {
- int bEnabled;
- } CaseFilterConfig;
-
-static void *CaseFilterCreateServerConfig(apr_pool_t *p,server_rec *s)
- {
- CaseFilterConfig *pConfig=apr_pcalloc(p,sizeof *pConfig);
-
- pConfig->bEnabled=0;
-
- return pConfig;
- }
-
-static void CaseFilterInsertFilter(request_rec *r)
- {
- CaseFilterConfig *pConfig=ap_get_module_config(r->server->module_config,
- &case_filter_module);
-
- if(!pConfig->bEnabled)
- return;
-
- ap_add_output_filter(s_szCaseFilterName,NULL,r,r->connection);
- }
-
-static apr_status_t CaseFilterOutFilter(ap_filter_t *f,
- apr_bucket_brigade *pbbIn)
- {
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- apr_bucket *pbktIn;
- apr_bucket_brigade *pbbOut;
-
- pbbOut=apr_brigade_create(r->pool, c->bucket_alloc);
- for (pbktIn = APR_BRIGADE_FIRST(pbbIn);
- pbktIn != APR_BRIGADE_SENTINEL(pbbIn);
- pbktIn = APR_BUCKET_NEXT(pbktIn))
- {
- const char *data;
- apr_size_t len;
- char *buf;
- apr_size_t n;
- apr_bucket *pbktOut;
-
- if(APR_BUCKET_IS_EOS(pbktIn))
- {
- apr_bucket *pbktEOS=apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(pbbOut,pbktEOS);
- continue;
- }
-
- /* read */
- apr_bucket_read(pbktIn,&data,&len,APR_BLOCK_READ);
-
- /* write */
- buf = apr_bucket_alloc(len, c->bucket_alloc);
- for(n=0 ; n < len ; ++n)
- buf[n] = apr_toupper(data[n]);
-
- pbktOut = apr_bucket_heap_create(buf, len, apr_bucket_free,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(pbbOut,pbktOut);
- }
-
- /* XXX: is there any advantage to passing a brigade for each bucket? */
- return ap_pass_brigade(f->next,pbbOut);
- }
-
-static const char *CaseFilterEnable(cmd_parms *cmd, void *dummy, int arg)
- {
- CaseFilterConfig *pConfig=ap_get_module_config(cmd->server->module_config,
- &case_filter_module);
- pConfig->bEnabled=arg;
-
- return NULL;
- }
-
-static const command_rec CaseFilterCmds[] =
- {
- AP_INIT_FLAG("CaseFilter", CaseFilterEnable, NULL, RSRC_CONF,
- "Run a case filter on this host"),
- { NULL }
- };
-
-static void CaseFilterRegisterHooks(apr_pool_t *p)
- {
- ap_hook_insert_filter(CaseFilterInsertFilter,NULL,NULL,APR_HOOK_MIDDLE);
- ap_register_output_filter(s_szCaseFilterName,CaseFilterOutFilter,NULL,
- AP_FTYPE_RESOURCE);
- }
-
-module AP_MODULE_DECLARE_DATA case_filter_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- CaseFilterCreateServerConfig,
- NULL,
- CaseFilterCmds,
- CaseFilterRegisterHooks
-};
diff --git a/modules/experimental/mod_case_filter_in.c b/modules/experimental/mod_case_filter_in.c
deleted file mode 100644
index c894cda920..0000000000
--- a/modules/experimental/mod_case_filter_in.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * An example input filter - this converts input to upper case. Note that
- * because of the moment it gets inserted it does NOT convert request headers.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_buckets.h"
-#include "apr_general.h"
-#include "apr_lib.h"
-#include "util_filter.h"
-#include "http_request.h"
-
-#include <ctype.h>
-
-static const char s_szCaseFilterName[] = "CaseFilterIn";
-module AP_MODULE_DECLARE_DATA case_filter_in_module;
-
-typedef struct
-{
- int bEnabled;
-} CaseFilterInConfig;
-
-typedef struct
-{
- apr_bucket_brigade *pbbTmp;
-} CaseFilterInContext;
-
-static void *CaseFilterInCreateServerConfig(apr_pool_t *p, server_rec *s)
-{
- CaseFilterInConfig *pConfig = apr_pcalloc(p, sizeof *pConfig);
-
- pConfig->bEnabled = 0;
-
- return pConfig;
-}
-
-static void CaseFilterInInsertFilter(request_rec *r)
-{
- CaseFilterInConfig *pConfig=ap_get_module_config(r->server->module_config,
- &case_filter_in_module);
- if(!pConfig->bEnabled)
- return;
-
- ap_add_input_filter(s_szCaseFilterName,NULL,r,r->connection);
-}
-
-static apr_status_t CaseFilterInFilter(ap_filter_t *f,
- apr_bucket_brigade *pbbOut,
- ap_input_mode_t eMode,
- apr_read_type_e eBlock,
- apr_off_t nBytes)
-{
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- CaseFilterInContext *pCtx;
- apr_status_t ret;
-
- if (!(pCtx = f->ctx)) {
- f->ctx = pCtx = apr_palloc(r->pool, sizeof *pCtx);
- pCtx->pbbTmp = apr_brigade_create(r->pool, c->bucket_alloc);
- }
-
- if (APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
- ret = ap_get_brigade(f->next, pCtx->pbbTmp, eMode, eBlock, nBytes);
-
- if (eMode == AP_MODE_EATCRLF || ret != APR_SUCCESS)
- return ret;
- }
-
- while(!APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
- apr_bucket *pbktIn = APR_BRIGADE_FIRST(pCtx->pbbTmp);
- apr_bucket *pbktOut;
- const char *data;
- apr_size_t len;
- char *buf;
- int n;
-
- /* It is tempting to do this...
- * APR_BUCKET_REMOVE(pB);
- * APR_BRIGADE_INSERT_TAIL(pbbOut,pB);
- * and change the case of the bucket data, but that would be wrong
- * for a file or socket buffer, for example...
- */
-
- if(APR_BUCKET_IS_EOS(pbktIn)) {
- APR_BUCKET_REMOVE(pbktIn);
- APR_BRIGADE_INSERT_TAIL(pbbOut, pbktIn);
- break;
- }
-
- ret=apr_bucket_read(pbktIn, &data, &len, eBlock);
- if(ret != APR_SUCCESS)
- return ret;
-
- buf = malloc(len);
- for(n=0 ; n < len ; ++n)
- buf[n] = apr_toupper(data[n]);
-
- pbktOut = apr_bucket_heap_create(buf, len, 0, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(pbbOut, pbktOut);
- apr_bucket_delete(pbktIn);
- }
-
- return APR_SUCCESS;
-}
-
-
-static const char *CaseFilterInEnable(cmd_parms *cmd, void *dummy, int arg)
-{
- CaseFilterInConfig *pConfig
- = ap_get_module_config(cmd->server->module_config,
- &case_filter_in_module);
- pConfig->bEnabled=arg;
-
- return NULL;
-}
-
-static const command_rec CaseFilterInCmds[] =
-{
- AP_INIT_FLAG("CaseFilterIn", CaseFilterInEnable, NULL, RSRC_CONF,
- "Run an input case filter on this host"),
- { NULL }
-};
-
-
-static void CaseFilterInRegisterHooks(apr_pool_t *p)
-{
- ap_hook_insert_filter(CaseFilterInInsertFilter, NULL, NULL,
- APR_HOOK_MIDDLE);
- ap_register_input_filter(s_szCaseFilterName, CaseFilterInFilter, NULL,
- AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA case_filter_in_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- CaseFilterInCreateServerConfig,
- NULL,
- CaseFilterInCmds,
- CaseFilterInRegisterHooks
-};
diff --git a/modules/experimental/mod_charset_lite.c b/modules/experimental/mod_charset_lite.c
deleted file mode 100644
index 08440557ee..0000000000
--- a/modules/experimental/mod_charset_lite.c
+++ /dev/null
@@ -1,1137 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * simple hokey charset recoding configuration module
- *
- * See mod_ebcdic and mod_charset for more thought-out examples. This
- * one is just so Jeff can learn how a module works and experiment with
- * basic character set recoding configuration.
- *
- * !!!This is an extremely cheap ripoff of mod_charset.c from Russian Apache!!!
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#define CORE_PRIVATE
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_charset.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_xlate.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define OUTPUT_XLATE_BUF_SIZE (16*1024) /* size of translation buffer used on output */
-#define INPUT_XLATE_BUF_SIZE (8*1024) /* size of translation buffer used on input */
-
-#define XLATE_MIN_BUFF_LEFT 128 /* flush once there is no more than this much
- * space left in the translation buffer
- */
-
-#define FATTEST_CHAR 8 /* we don't handle chars wider than this that straddle
- * two buckets
- */
-
-/* extended error status codes; this is used in addition to an apr_status_t to
- * track errors in the translation filter
- */
-typedef enum {
- EES_INIT = 0, /* no error info yet; value must be 0 for easy init */
- EES_LIMIT, /* built-in restriction encountered */
- EES_INCOMPLETE_CHAR, /* incomplete multi-byte char at end of content */
- EES_BUCKET_READ,
- EES_DOWNSTREAM, /* something bad happened in a filter below xlate */
- EES_BAD_INPUT /* input data invalid */
-} ees_t;
-
-/* registered name of the output translation filter */
-#define XLATEOUT_FILTER_NAME "XLATEOUT"
-/* registered name of input translation filter */
-#define XLATEIN_FILTER_NAME "XLATEIN"
-
-typedef struct charset_dir_t {
- /** debug level; -1 means uninitialized, 0 means no debug */
- int debug;
- const char *charset_source; /* source encoding */
- const char *charset_default; /* how to ship on wire */
- /** module does ap_add_*_filter()? */
- enum {IA_INIT, IA_IMPADD, IA_NOIMPADD} implicit_add;
-} charset_dir_t;
-
-/* charset_filter_ctx_t is created for each filter instance; because the same
- * filter code is used for translating in both directions, we need this context
- * data to tell the filter which translation handle to use; it also can hold a
- * character which was split between buckets
- */
-typedef struct charset_filter_ctx_t {
- apr_xlate_t *xlate;
- charset_dir_t *dc;
- ees_t ees; /* extended error status */
- apr_size_t saved;
- char buf[FATTEST_CHAR]; /* we want to be able to build a complete char here */
- int ran; /* has filter instance run before? */
- int noop; /* should we pass brigades through unchanged? */
- char *tmp; /* buffer for input filtering */
- apr_bucket_brigade *bb; /* input buckets we couldn't finish translating */
-} charset_filter_ctx_t;
-
-/* charset_req_t is available via r->request_config if any translation is
- * being performed
- */
-typedef struct charset_req_t {
- charset_dir_t *dc;
- charset_filter_ctx_t *output_ctx, *input_ctx;
-} charset_req_t;
-
-/* debug level definitions */
-#define DBGLVL_GORY 9 /* gory details */
-#define DBGLVL_FLOW 4 /* enough messages to see what happens on
- * each request */
-#define DBGLVL_PMC 2 /* messages about possible misconfiguration */
-
-module AP_MODULE_DECLARE_DATA charset_lite_module;
-
-static void *create_charset_dir_conf(apr_pool_t *p,char *dummy)
-{
- charset_dir_t *dc = (charset_dir_t *)apr_pcalloc(p,sizeof(charset_dir_t));
-
- dc->debug = -1;
- return dc;
-}
-
-static void *merge_charset_dir_conf(apr_pool_t *p, void *basev, void *overridesv)
-{
- charset_dir_t *a = (charset_dir_t *)apr_pcalloc (p, sizeof(charset_dir_t));
- charset_dir_t *base = (charset_dir_t *)basev,
- *over = (charset_dir_t *)overridesv;
-
- /* If it is defined in the current container, use it. Otherwise, use the one
- * from the enclosing container.
- */
-
- a->debug =
- over->debug != -1 ? over->debug : base->debug;
- a->charset_default =
- over->charset_default ? over->charset_default : base->charset_default;
- a->charset_source =
- over->charset_source ? over->charset_source : base->charset_source;
- a->implicit_add =
- over->implicit_add != IA_INIT ? over->implicit_add : base->implicit_add;
- return a;
-}
-
-/* CharsetSourceEnc charset
- */
-static const char *add_charset_source(cmd_parms *cmd, void *in_dc,
- const char *name)
-{
- charset_dir_t *dc = in_dc;
-
- dc->charset_source = name;
- return NULL;
-}
-
-/* CharsetDefault charset
- */
-static const char *add_charset_default(cmd_parms *cmd, void *in_dc,
- const char *name)
-{
- charset_dir_t *dc = in_dc;
-
- dc->charset_default = name;
- return NULL;
-}
-
-/* CharsetOptions optionflag...
- */
-static const char *add_charset_options(cmd_parms *cmd, void *in_dc,
- const char *flag)
-{
- charset_dir_t *dc = in_dc;
-
- if (!strcasecmp(flag, "ImplicitAdd")) {
- dc->implicit_add = IA_IMPADD;
- }
- else if (!strcasecmp(flag, "NoImplicitAdd")) {
- dc->implicit_add = IA_NOIMPADD;
- }
- else if (!strncasecmp(flag, "DebugLevel=", 11)) {
- dc->debug = atoi(flag + 11);
- }
- else {
- return apr_pstrcat(cmd->temp_pool,
- "Invalid CharsetOptions option: ",
- flag,
- NULL);
- }
-
- return NULL;
-}
-
-/* find_code_page() is a fixup hook that decides if translation should be
- * enabled; if so, it sets up request data for use by the filter registration
- * hook so that it knows what to do
- */
-static int find_code_page(request_rec *r)
-{
- charset_dir_t *dc = ap_get_module_config(r->per_dir_config,
- &charset_lite_module);
- charset_req_t *reqinfo;
- charset_filter_ctx_t *input_ctx, *output_ctx;
- apr_status_t rv;
- const char *mime_type;
-
- if (dc->debug >= DBGLVL_FLOW) {
- ap_log_rerror(APLOG_MARK,APLOG_DEBUG, 0, r,
- "uri: %s file: %s method: %d "
- "imt: %s flags: %s%s%s %s->%s",
- r->uri, r->filename, r->method_number,
- r->content_type ? r->content_type : "(unknown)",
- r->main ? "S" : "", /* S if subrequest */
- r->prev ? "R" : "", /* R if redirect */
- r->proxyreq ? "P" : "", /* P if proxy */
- dc->charset_source, dc->charset_default);
- }
-
- /* If we don't have a full directory configuration, bail out.
- */
- if (!dc->charset_source || !dc->charset_default) {
- if (dc->debug >= DBGLVL_PMC) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "incomplete configuration: src %s, dst %s",
- dc->charset_source ? dc->charset_source : "unspecified",
- dc->charset_default ? dc->charset_default : "unspecified");
- }
- return DECLINED;
- }
-
- /* catch proxy requests */
- if (r->proxyreq) return DECLINED;
- /* mod_rewrite indicators */
- if (!strncmp(r->filename, "redirect:", 9)) return DECLINED;
- if (!strncmp(r->filename, "gone:", 5)) return DECLINED;
- if (!strncmp(r->filename, "passthrough:", 12)) return DECLINED;
- if (!strncmp(r->filename, "forbidden:", 10)) return DECLINED;
-
- mime_type = r->content_type ? r->content_type : ap_default_type(r);
-
- /* If mime type isn't text or message, bail out.
- */
-
-/* XXX When we handle translation of the request body, watch out here as
- * 1.3 allowed additional mime types: multipart and
- * application/x-www-form-urlencoded
- */
-
- if (strncasecmp(mime_type, "text/", 5) &&
-#if APR_CHARSET_EBCDIC || AP_WANT_DIR_TRANSLATION
- /* On an EBCDIC machine, be willing to translate mod_autoindex-
- * generated output. Otherwise, it doesn't look too cool.
- *
- * XXX This isn't a perfect fix because this doesn't trigger us
- * to convert from the charset of the source code to ASCII. The
- * general solution seems to be to allow a generator to set an
- * indicator in the r specifying that the body is coded in the
- * implementation character set (i.e., the charset of the source
- * code). This would get several different types of documents
- * translated properly: mod_autoindex output, mod_status output,
- * mod_info output, hard-coded error documents, etc.
- */
- strcmp(mime_type, DIR_MAGIC_TYPE) &&
-#endif
- strncasecmp(mime_type, "message/", 8)) {
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "mime type is %s; no translation selected",
- mime_type);
- }
- /* We must not bail out here (i.e., the MIME test must be in the filter
- * itself, not in the fixup, because only then is the final MIME type known.
- * Examples for late changes to the MIME type include CGI handling (MIME
- * type is set in the Content-Type header produced by the CGI script), or
- * PHP (until PHP runs, the MIME type is set to application/x-httpd-php)
- */
- }
-
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "charset_source: %s charset_default: %s",
- dc && dc->charset_source ? dc->charset_source : "(none)",
- dc && dc->charset_default ? dc->charset_default : "(none)");
- }
-
- /* Get storage for the request data and the output filter context.
- * We rarely need the input filter context, so allocate that separately.
- */
- reqinfo = (charset_req_t *)apr_pcalloc(r->pool,
- sizeof(charset_req_t) +
- sizeof(charset_filter_ctx_t));
- output_ctx = (charset_filter_ctx_t *)(reqinfo + 1);
-
- reqinfo->dc = dc;
- output_ctx->dc = dc;
- ap_set_module_config(r->request_config, &charset_lite_module, reqinfo);
-
- reqinfo->output_ctx = output_ctx;
-
- /* We must not open the xlation table here yet, because the final MIME
- * type is not known until we are actually called in the output filter.
- * With POST or PUT request, the case is different, because their MIME
- * type is set in the request headers, and their data are prerequisites
- * for actually calling, e.g., the CGI handler later on.
- */
- output_ctx->xlate = NULL;
-
- switch (r->method_number) {
- case M_PUT:
- case M_POST:
- /* Set up input translation. Note: A request body can be included
- * with the OPTIONS method, but for now we don't set up translation
- * of it.
- */
- input_ctx = apr_pcalloc(r->pool, sizeof(charset_filter_ctx_t));
- input_ctx->bb = apr_brigade_create(r->pool,
- r->connection->bucket_alloc);
- input_ctx->tmp = apr_palloc(r->pool, INPUT_XLATE_BUF_SIZE);
- input_ctx->dc = dc;
- reqinfo->input_ctx = input_ctx;
- rv = apr_xlate_open(&input_ctx->xlate, dc->charset_source,
- dc->charset_default, r->pool);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "can't open translation %s->%s",
- dc->charset_default, dc->charset_source);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- return DECLINED;
-}
-
-static int configured_in_list(request_rec *r, const char *filter_name,
- struct ap_filter_t *filter_list)
-{
- struct ap_filter_t *filter = filter_list;
-
- while (filter) {
- if (!strcasecmp(filter_name, filter->frec->name)) {
- return 1;
- }
- filter = filter->next;
- }
- return 0;
-}
-
-static int configured_on_input(request_rec *r, const char *filter_name)
-{
- return configured_in_list(r, filter_name, r->input_filters);
-}
-
-static int configured_on_output(request_rec *r, const char *filter_name)
-{
- return configured_in_list(r, filter_name, r->output_filters);
-}
-
-/* xlate_insert_filter() is a filter hook which decides whether or not
- * to insert a translation filter for the current request.
- */
-static void xlate_insert_filter(request_rec *r)
-{
- /* Hey... don't be so quick to use reqinfo->dc here; reqinfo may be NULL */
- charset_req_t *reqinfo = ap_get_module_config(r->request_config,
- &charset_lite_module);
- charset_dir_t *dc = ap_get_module_config(r->per_dir_config,
- &charset_lite_module);
-
- if (reqinfo) {
- if (reqinfo->output_ctx && !configured_on_output(r, XLATEOUT_FILTER_NAME)) {
- ap_add_output_filter(XLATEOUT_FILTER_NAME, reqinfo->output_ctx, r,
- r->connection);
- }
- else if (dc->debug >= DBGLVL_FLOW) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "xlate output filter not added implicitly because %s",
- !reqinfo->output_ctx ?
- "no output configuration available" :
- "another module added the filter");
- }
-
- if (reqinfo->input_ctx && !configured_on_input(r, XLATEIN_FILTER_NAME)) {
- ap_add_input_filter(XLATEIN_FILTER_NAME, reqinfo->input_ctx, r,
- r->connection);
- }
- else if (dc->debug >= DBGLVL_FLOW) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "xlate input filter not added implicitly because %s",
- !reqinfo->input_ctx ?
- "no input configuration available" :
- "another module added the filter");
- }
- }
-}
-
-/* stuff that sucks that I know of:
- *
- * bucket handling:
- * why create an eos bucket when we see it come down the stream? just send the one
- * passed as input... news flash: this will be fixed when xlate_out_filter() starts
- * using the more generic xlate_brigade()
- *
- * translation mechanics:
- * we don't handle characters that straddle more than two buckets; an error
- * will be generated
- */
-
-/* send_downstream() is passed the translated data; it puts it in a single-
- * bucket brigade and passes the brigade to the next filter
- */
-static apr_status_t send_downstream(ap_filter_t *f, const char *tmp, apr_size_t len)
-{
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- charset_filter_ctx_t *ctx = f->ctx;
- apr_status_t rv;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_transient_create(tmp, len, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- rv = ap_pass_brigade(f->next, bb);
- if (rv != APR_SUCCESS) {
- ctx->ees = EES_DOWNSTREAM;
- }
- return rv;
-}
-
-static apr_status_t send_eos(ap_filter_t *f)
-{
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- charset_filter_ctx_t *ctx = f->ctx;
- apr_status_t rv;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- rv = ap_pass_brigade(f->next, bb);
- if (rv != APR_SUCCESS) {
- ctx->ees = EES_DOWNSTREAM;
- }
- return rv;
-}
-
-static apr_status_t set_aside_partial_char(charset_filter_ctx_t *ctx,
- const char *partial,
- apr_size_t partial_len)
-{
- apr_status_t rv;
-
- if (sizeof(ctx->buf) > partial_len) {
- ctx->saved = partial_len;
- memcpy(ctx->buf, partial, partial_len);
- rv = APR_SUCCESS;
- }
- else {
- rv = APR_INCOMPLETE;
- ctx->ees = EES_LIMIT; /* we don't handle chars this wide which straddle
- * buckets
- */
- }
- return rv;
-}
-
-static apr_status_t finish_partial_char(charset_filter_ctx_t *ctx,
- /* input buffer: */
- const char **cur_str,
- apr_size_t *cur_len,
- /* output buffer: */
- char **out_str,
- apr_size_t *out_len)
-{
- apr_status_t rv;
- apr_size_t tmp_input_len;
-
- /* Keep adding bytes from the input string to the saved string until we
- * 1) finish the input char
- * 2) get an error
- * or 3) run out of bytes to add
- */
-
- do {
- ctx->buf[ctx->saved] = **cur_str;
- ++ctx->saved;
- ++*cur_str;
- --*cur_len;
- tmp_input_len = ctx->saved;
- rv = apr_xlate_conv_buffer(ctx->xlate,
- ctx->buf,
- &tmp_input_len,
- *out_str,
- out_len);
- } while (rv == APR_INCOMPLETE && *cur_len);
-
- if (rv == APR_SUCCESS) {
- ctx->saved = 0;
- }
- else {
- ctx->ees = EES_LIMIT; /* code isn't smart enough to handle chars
- * straddling more than two buckets
- */
- }
-
- return rv;
-}
-
-static void log_xlate_error(ap_filter_t *f, apr_status_t rv)
-{
- charset_filter_ctx_t *ctx = f->ctx;
- const char *msg;
- char msgbuf[100];
- int cur;
-
- switch(ctx->ees) {
- case EES_LIMIT:
- rv = 0;
- msg = "xlate filter - a built-in restriction was encountered";
- break;
- case EES_BAD_INPUT:
- rv = 0;
- msg = "xlate filter - an input character was invalid";
- break;
- case EES_BUCKET_READ:
- rv = 0;
- msg = "xlate filter - bucket read routine failed";
- break;
- case EES_INCOMPLETE_CHAR:
- rv = 0;
- strcpy(msgbuf, "xlate filter - incomplete char at end of input - ");
- cur = 0;
- while ((apr_size_t)cur < ctx->saved) {
- apr_snprintf(msgbuf + strlen(msgbuf), sizeof(msgbuf) - strlen(msgbuf),
- "%02X", (unsigned)ctx->buf[cur]);
- ++cur;
- }
- msg = msgbuf;
- break;
- case EES_DOWNSTREAM:
- msg = "xlate filter - an error occurred in a lower filter";
- break;
- default:
- msg = "xlate filter - returning error";
- }
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
- "%s", msg);
-}
-
-/* chk_filter_chain() is called once per filter instance; it tries to
- * determine if the current filter instance should be disabled because
- * its translation is incompatible with the translation of an existing
- * instance of the translate filter
- *
- * Example bad scenario:
- *
- * configured filter chain for the request:
- * INCLUDES XLATEOUT(8859-1->UTS-16)
- * configured filter chain for the subrequest:
- * XLATEOUT(8859-1->UTS-16)
- *
- * When the subrequest is processed, the filter chain will be
- * XLATEOUT(8859-1->UTS-16) XLATEOUT(8859-1->UTS-16)
- * This makes no sense, so the instance of XLATEOUT added for the
- * subrequest will be noop-ed.
- *
- * Example good scenario:
- *
- * configured filter chain for the request:
- * INCLUDES XLATEOUT(8859-1->UTS-16)
- * configured filter chain for the subrequest:
- * XLATEOUT(IBM-1047->8859-1)
- *
- * When the subrequest is processed, the filter chain will be
- * XLATEOUT(IBM-1047->8859-1) XLATEOUT(8859-1->UTS-16)
- * This makes sense, so the instance of XLATEOUT added for the
- * subrequest will be left alone and it will translate from
- * IBM-1047->8859-1.
- */
-static void chk_filter_chain(ap_filter_t *f)
-{
- ap_filter_t *curf;
- charset_filter_ctx_t *curctx, *last_xlate_ctx = NULL,
- *ctx = f->ctx;
- int debug = ctx->dc->debug;
- int output = !strcasecmp(f->frec->name, XLATEOUT_FILTER_NAME);
-
- if (ctx->noop) {
- return;
- }
-
- /* walk the filter chain; see if it makes sense for our filter to
- * do any translation
- */
- curf = output ? f->r->output_filters : f->r->input_filters;
- while (curf) {
- if (!strcasecmp(curf->frec->name, f->frec->name) &&
- curf->ctx) {
- curctx = (charset_filter_ctx_t *)curf->ctx;
- if (!last_xlate_ctx) {
- last_xlate_ctx = curctx;
- }
- else {
- if (strcmp(last_xlate_ctx->dc->charset_default,
- curctx->dc->charset_source)) {
- /* incompatible translation
- * if our filter instance is incompatible with an instance
- * already in place, noop our instance
- * Notes:
- * . We are only willing to noop our own instance.
- * . It is possible to noop another instance which has not
- * yet run, but this is not currently implemented.
- * Hopefully it will not be needed.
- * . It is not possible to noop an instance which has
- * already run.
- */
- if (last_xlate_ctx == f->ctx) {
- last_xlate_ctx->noop = 1;
- if (debug >= DBGLVL_PMC) {
- const char *symbol = output ? "->" : "<-";
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG,
- 0, f->r,
- "%s %s - disabling "
- "translation %s%s%s; existing "
- "translation %s%s%s",
- f->r->uri ? "uri" : "file",
- f->r->uri ? f->r->uri : f->r->filename,
- last_xlate_ctx->dc->charset_source,
- symbol,
- last_xlate_ctx->dc->charset_default,
- curctx->dc->charset_source,
- symbol,
- curctx->dc->charset_default);
- }
- }
- else {
- const char *symbol = output ? "->" : "<-";
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- 0, f->r,
- "chk_filter_chain() - can't disable "
- "translation %s%s%s; existing "
- "translation %s%s%s",
- last_xlate_ctx->dc->charset_source,
- symbol,
- last_xlate_ctx->dc->charset_default,
- curctx->dc->charset_source,
- symbol,
- curctx->dc->charset_default);
- }
- break;
- }
- }
- }
- curf = curf->next;
- }
-}
-
-/* xlate_brigade() is used to filter request and response bodies
- *
- * we'll stop when one of the following occurs:
- * . we run out of buckets
- * . we run out of space in the output buffer
- * . we hit an error
- *
- * inputs:
- * bb: brigade to process
- * buffer: storage to hold the translated characters
- * buffer_size: size of buffer
- * (and a few more uninteresting parms)
- *
- * outputs:
- * return value: APR_SUCCESS or some error code
- * bb: we've removed any buckets representing the
- * translated characters; the eos bucket, if
- * present, will be left in the brigade
- * buffer: filled in with translated characters
- * buffer_size: updated with the bytes remaining
- * hit_eos: did we hit an EOS bucket?
- */
-static apr_status_t xlate_brigade(charset_filter_ctx_t *ctx,
- apr_bucket_brigade *bb,
- char *buffer,
- apr_size_t *buffer_avail,
- int *hit_eos)
-{
- apr_bucket *b = NULL; /* set to NULL only to quiet some gcc */
- apr_bucket *consumed_bucket;
- const char *bucket;
- apr_size_t bytes_in_bucket; /* total bytes read from current bucket */
- apr_size_t bucket_avail; /* bytes left in current bucket */
- apr_status_t rv = APR_SUCCESS;
-
- *hit_eos = 0;
- bucket_avail = 0;
- consumed_bucket = NULL;
- while (1) {
- if (!bucket_avail) { /* no bytes left to process in the current bucket... */
- if (consumed_bucket) {
- apr_bucket_delete(consumed_bucket);
- consumed_bucket = NULL;
- }
- b = APR_BRIGADE_FIRST(bb);
- if (b == APR_BRIGADE_SENTINEL(bb) ||
- APR_BUCKET_IS_EOS(b)) {
- break;
- }
- rv = apr_bucket_read(b, &bucket, &bytes_in_bucket, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- ctx->ees = EES_BUCKET_READ;
- break;
- }
- bucket_avail = bytes_in_bucket;
- consumed_bucket = b; /* for axing when we're done reading it */
- }
- if (bucket_avail) {
- /* We've got data, so translate it. */
- if (ctx->saved) {
- /* Rats... we need to finish a partial character from the previous
- * bucket.
- *
- * Strangely, finish_partial_char() increments the input buffer
- * pointer but does not increment the output buffer pointer.
- */
- apr_size_t old_buffer_avail = *buffer_avail;
- rv = finish_partial_char(ctx,
- &bucket, &bucket_avail,
- &buffer, buffer_avail);
- buffer += old_buffer_avail - *buffer_avail;
- }
- else {
- apr_size_t old_buffer_avail = *buffer_avail;
- apr_size_t old_bucket_avail = bucket_avail;
- rv = apr_xlate_conv_buffer(ctx->xlate,
- bucket, &bucket_avail,
- buffer,
- buffer_avail);
- buffer += old_buffer_avail - *buffer_avail;
- bucket += old_bucket_avail - bucket_avail;
-
- if (rv == APR_INCOMPLETE) { /* partial character at end of input */
- /* We need to save the final byte(s) for next time; we can't
- * convert it until we look at the next bucket.
- */
- rv = set_aside_partial_char(ctx, bucket, bucket_avail);
- bucket_avail = 0;
- }
- }
- if (rv != APR_SUCCESS) {
- /* bad input byte or partial char too big to store */
- break;
- }
- if (*buffer_avail < XLATE_MIN_BUFF_LEFT) {
- /* if any data remains in the current bucket, split there */
- if (bucket_avail) {
- apr_bucket_split(b, bytes_in_bucket - bucket_avail);
- }
- apr_bucket_delete(b);
- break;
- }
- }
- }
-
- if (!APR_BRIGADE_EMPTY(bb)) {
- b = APR_BRIGADE_FIRST(bb);
- if (APR_BUCKET_IS_EOS(b)) {
- /* Leave the eos bucket in the brigade for reporting to
- * subsequent filters.
- */
- *hit_eos = 1;
- if (ctx->saved) {
- /* Oops... we have a partial char from the previous bucket
- * that won't be completed because there's no more data.
- */
- rv = APR_INCOMPLETE;
- ctx->ees = EES_INCOMPLETE_CHAR;
- }
- }
- }
-
- return rv;
-}
-
-/* xlate_out_filter() handles (almost) arbitrary conversions from one charset
- * to another...
- * translation is determined in the fixup hook (find_code_page), which is
- * where the filter's context data is set up... the context data gives us
- * the translation handle
- */
-static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- charset_req_t *reqinfo = ap_get_module_config(f->r->request_config,
- &charset_lite_module);
- charset_dir_t *dc = ap_get_module_config(f->r->per_dir_config,
- &charset_lite_module);
- charset_filter_ctx_t *ctx = f->ctx;
- apr_bucket *dptr, *consumed_bucket;
- const char *cur_str;
- apr_size_t cur_len, cur_avail;
- char tmp[OUTPUT_XLATE_BUF_SIZE];
- apr_size_t space_avail;
- int done;
- apr_status_t rv = APR_SUCCESS;
-
- if (!ctx) {
- /* this is SetOutputFilter path; grab the preallocated context,
- * if any; note that if we decided not to do anything in an earlier
- * handler, we won't even have a reqinfo
- */
- if (reqinfo) {
- ctx = f->ctx = reqinfo->output_ctx;
- reqinfo->output_ctx = NULL; /* prevent SNAFU if user coded us twice
- * in the filter chain; we can't have two
- * instances using the same context
- */
- }
- if (!ctx) { /* no idea how to translate; don't do anything */
- ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(charset_filter_ctx_t));
- ctx->dc = dc;
- ctx->noop = 1;
- }
- }
-
- /* catch proxy requests */
- if (f->r->proxyreq) return DECLINED;
-
- /* Opening the output translation (this used to be done in the fixup hook,
- * but that was too early: a subsequent type modification, e.g., by a
- * CGI script, would go unnoticed. Now we do it in the filter itself.)
- */
- if (!ctx->noop && ctx->xlate == NULL)
- {
- const char *mime_type = f->r->content_type ? f->r->content_type : ap_default_type(f->r);
-
- /* XXX When we handle translation of the request body, watch out here as
- * 1.3 allowed additional mime types: multipart and
- * application/x-www-form-urlencoded
- */
- if (strncasecmp(mime_type, "text/", 5) == 0 ||
-#if APR_CHARSET_EBCDIC
- /* On an EBCDIC machine, be willing to translate mod_autoindex-
- * generated output. Otherwise, it doesn't look too cool.
- *
- * XXX This isn't a perfect fix because this doesn't trigger us
- * to convert from the charset of the source code to ASCII. The
- * general solution seems to be to allow a generator to set an
- * indicator in the r specifying that the body is coded in the
- * implementation character set (i.e., the charset of the source
- * code). This would get several different types of documents
- * translated properly: mod_autoindex output, mod_status output,
- * mod_info output, hard-coded error documents, etc.
- */
- strcmp(mime_type, DIR_MAGIC_TYPE) == 0 ||
-#endif
- strncasecmp(mime_type, "message/", 8) == 0) {
-
- rv = apr_xlate_open(&ctx->xlate,
- dc->charset_default, dc->charset_source, f->r->pool);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
- "can't open translation %s->%s",
- dc->charset_source, dc->charset_default);
- ctx->noop = 1;
- }
- }
- else {
- ctx->noop = 1;
- if (dc->debug >= DBGLVL_GORY)
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
- "mime type is %s; no translation selected",
- mime_type);
- }
- }
-
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
- "xlate_out_filter() - "
- "charset_source: %s charset_default: %s",
- dc && dc->charset_source ? dc->charset_source : "(none)",
- dc && dc->charset_default ? dc->charset_default : "(none)");
- }
-
- if (!ctx->ran) { /* filter never ran before */
- chk_filter_chain(f);
- ctx->ran = 1;
- }
-
- if (ctx->noop) {
- return ap_pass_brigade(f->next, bb);
- }
-
- dptr = APR_BRIGADE_FIRST(bb);
- done = 0;
- cur_len = 0;
- space_avail = sizeof(tmp);
- consumed_bucket = NULL;
- while (!done) {
- if (!cur_len) { /* no bytes left to process in the current bucket... */
- if (consumed_bucket) {
- apr_bucket_delete(consumed_bucket);
- consumed_bucket = NULL;
- }
- if (dptr == APR_BRIGADE_SENTINEL(bb)) {
- done = 1;
- break;
- }
- if (APR_BUCKET_IS_EOS(dptr)) {
- done = 1;
- cur_len = -1; /* XXX yuck, but that tells us to send
- * eos down; when we minimize our bb construction
- * we'll fix this crap */
- if (ctx->saved) {
- /* Oops... we have a partial char from the previous bucket
- * that won't be completed because there's no more data.
- */
- rv = APR_INCOMPLETE;
- ctx->ees = EES_INCOMPLETE_CHAR;
- }
- break;
- }
- rv = apr_bucket_read(dptr, &cur_str, &cur_len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- done = 1;
- ctx->ees = EES_BUCKET_READ;
- break;
- }
- consumed_bucket = dptr; /* for axing when we're done reading it */
- dptr = APR_BUCKET_NEXT(dptr); /* get ready for when we access the
- * next bucket */
- }
- /* Try to fill up our tmp buffer with translated data. */
- cur_avail = cur_len;
-
- if (cur_len) { /* maybe we just hit the end of a pipe (len = 0) ? */
- if (ctx->saved) {
- /* Rats... we need to finish a partial character from the previous
- * bucket.
- */
- char *tmp_tmp;
-
- tmp_tmp = tmp + sizeof(tmp) - space_avail;
- rv = finish_partial_char(ctx,
- &cur_str, &cur_len,
- &tmp_tmp, &space_avail);
- }
- else {
- rv = apr_xlate_conv_buffer(ctx->xlate,
- cur_str, &cur_avail,
- tmp + sizeof(tmp) - space_avail, &space_avail);
-
- /* Update input ptr and len after consuming some bytes */
- cur_str += cur_len - cur_avail;
- cur_len = cur_avail;
-
- if (rv == APR_INCOMPLETE) { /* partial character at end of input */
- /* We need to save the final byte(s) for next time; we can't
- * convert it until we look at the next bucket.
- */
- rv = set_aside_partial_char(ctx, cur_str, cur_len);
- cur_len = 0;
- }
- }
- }
-
- if (rv != APR_SUCCESS) {
- /* bad input byte or partial char too big to store */
- done = 1;
- }
-
- if (space_avail < XLATE_MIN_BUFF_LEFT) {
- /* It is time to flush, as there is not enough space left in the
- * current output buffer to bother with converting more data.
- */
- rv = send_downstream(f, tmp, sizeof(tmp) - space_avail);
- if (rv != APR_SUCCESS) {
- done = 1;
- }
-
- /* tmp is now empty */
- space_avail = sizeof(tmp);
- }
- }
-
- if (rv == APR_SUCCESS) {
- if (space_avail < sizeof(tmp)) { /* gotta write out what we converted */
- rv = send_downstream(f, tmp, sizeof(tmp) - space_avail);
- }
- }
- if (rv == APR_SUCCESS) {
- if (cur_len == -1) {
- rv = send_eos(f);
- }
- }
- else {
- log_xlate_error(f, rv);
- }
-
- return rv;
-}
-
-static int xlate_in_filter(ap_filter_t *f, apr_bucket_brigade *bb,
- ap_input_mode_t mode, apr_read_type_e block,
- apr_off_t readbytes)
-{
- apr_status_t rv;
- charset_req_t *reqinfo = ap_get_module_config(f->r->request_config,
- &charset_lite_module);
- charset_dir_t *dc = ap_get_module_config(f->r->per_dir_config,
- &charset_lite_module);
- charset_filter_ctx_t *ctx = f->ctx;
- apr_size_t buffer_size;
- int hit_eos;
-
- if (!ctx) {
- /* this is SetInputFilter path; grab the preallocated context,
- * if any; note that if we decided not to do anything in an earlier
- * handler, we won't even have a reqinfo
- */
- if (reqinfo) {
- ctx = f->ctx = reqinfo->input_ctx;
- reqinfo->input_ctx = NULL; /* prevent SNAFU if user coded us twice
- * in the filter chain; we can't have two
- * instances using the same context
- */
- }
- if (!ctx) { /* no idea how to translate; don't do anything */
- ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(charset_filter_ctx_t));
- ctx->dc = dc;
- ctx->noop = 1;
- }
- }
-
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
- "xlate_in_filter() - "
- "charset_source: %s charset_default: %s",
- dc && dc->charset_source ? dc->charset_source : "(none)",
- dc && dc->charset_default ? dc->charset_default : "(none)");
- }
-
- if (!ctx->ran) { /* filter never ran before */
- chk_filter_chain(f);
- ctx->ran = 1;
- }
-
- if (ctx->noop) {
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- if (APR_BRIGADE_EMPTY(ctx->bb)) {
- if ((rv = ap_get_brigade(f->next, bb, mode, block,
- readbytes)) != APR_SUCCESS) {
- return rv;
- }
- }
- else {
- APR_BRIGADE_PREPEND(bb, ctx->bb); /* first use the leftovers */
- }
-
- buffer_size = INPUT_XLATE_BUF_SIZE;
- rv = xlate_brigade(ctx, bb, ctx->tmp, &buffer_size, &hit_eos);
- if (rv == APR_SUCCESS) {
- if (!hit_eos) {
- /* move anything leftover into our context for next time;
- * we don't currently "set aside" since the data came from
- * down below, but I suspect that for long-term we need to
- * do that
- */
- APR_BRIGADE_CONCAT(ctx->bb, bb);
- }
- if (buffer_size < INPUT_XLATE_BUF_SIZE) { /* do we have output? */
- apr_bucket *e;
-
- e = apr_bucket_heap_create(ctx->tmp,
- INPUT_XLATE_BUF_SIZE - buffer_size,
- NULL, f->r->connection->bucket_alloc);
- /* make sure we insert at the head, because there may be
- * an eos bucket already there, and the eos bucket should
- * come after the data
- */
- APR_BRIGADE_INSERT_HEAD(bb, e);
- }
- else {
- /* XXX need to get some more data... what if the last brigade
- * we got had only the first byte of a multibyte char? we need
- * to grab more data from the network instead of returning an
- * empty brigade
- */
- }
- }
- else {
- log_xlate_error(f, rv);
- }
-
- return rv;
-}
-
-static const command_rec cmds[] =
-{
- AP_INIT_TAKE1("CharsetSourceEnc",
- add_charset_source,
- NULL,
- OR_FILEINFO,
- "source (html,cgi,ssi) file charset"),
- AP_INIT_TAKE1("CharsetDefault",
- add_charset_default,
- NULL,
- OR_FILEINFO,
- "name of default charset"),
- AP_INIT_ITERATE("CharsetOptions",
- add_charset_options,
- NULL,
- OR_FILEINFO,
- "valid options: ImplicitAdd, NoImplicitAdd, DebugLevel=n"),
- {NULL}
-};
-
-static void charset_register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(find_code_page, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_insert_filter(xlate_insert_filter, NULL, NULL, APR_HOOK_REALLY_LAST);
- ap_register_output_filter(XLATEOUT_FILTER_NAME, xlate_out_filter, NULL,
- AP_FTYPE_RESOURCE);
- ap_register_input_filter(XLATEIN_FILTER_NAME, xlate_in_filter, NULL,
- AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA charset_lite_module =
-{
- STANDARD20_MODULE_STUFF,
- create_charset_dir_conf,
- merge_charset_dir_conf,
- NULL,
- NULL,
- cmds,
- charset_register_hooks
-};
-
diff --git a/modules/experimental/mod_charset_lite.dsp b/modules/experimental/mod_charset_lite.dsp
deleted file mode 100644
index ecc099adec..0000000000
--- a/modules/experimental/mod_charset_lite.dsp
+++ /dev/null
@@ -1,124 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_charset_lite" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_charset_lite - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_charset_lite.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_charset_lite.mak" CFG="mod_charset_lite - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_charset_lite - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_charset_lite - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_charset_lite - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_charset_lite_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_charset_lite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_charset_lite.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_charset_lite - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_charset_lite_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_charset_lite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_charset_lite.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_charset_lite - Win32 Release"
-# Name "mod_charset_lite - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_charset_lite.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_charset_lite - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_charset_lite.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_charset_lite.so "charset_lite_module for Apache" ../../include/ap_release.h > .\mod_charset_lite.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_charset_lite - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_charset_lite.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_charset_lite.so "charset_lite_module for Apache" ../../include/ap_release.h > .\mod_charset_lite.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/mod_charset_lite.exp b/modules/experimental/mod_charset_lite.exp
deleted file mode 100644
index 3f0bf14b4a..0000000000
--- a/modules/experimental/mod_charset_lite.exp
+++ /dev/null
@@ -1 +0,0 @@
-charset_lite_module
diff --git a/modules/experimental/mod_disk_cache.c b/modules/experimental/mod_disk_cache.c
deleted file mode 100644
index 6366a3698d..0000000000
--- a/modules/experimental/mod_disk_cache.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "mod_cache.h"
-#include "apr_file_io.h"
-#include "apr_strings.h"
-#include "util_filter.h"
-#include "util_script.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h> /* needed for unlink/link */
-#endif
-
-/*
- * disk_cache_object_t
- * Pointed to by cache_object_t::vobj
- */
-typedef struct disk_cache_object {
- const char *root; /* the location of the cache directory */
- char *tempfile; /* temp file tohold the content */
-#if 0
- int dirlevels; /* Number of levels of subdirectories */
- int dirlength; /* Length of subdirectory names */
-#endif
- char *datafile; /* name of file where the data will go */
- char *hdrsfile; /* name of file where the hdrs will go */
- char *name;
- apr_time_t version; /* update count of the file */
- apr_file_t *fd; /* data file */
- apr_file_t *hfd; /* headers file */
- apr_off_t file_size; /* File size of the cached data file */
-} disk_cache_object_t;
-
-/*
- * mod_disk_cache configuration
- */
-/* TODO: Make defaults OS specific */
-#define CACHEFILE_LEN 20 /* must be less than HASH_LEN/2 */
-#define DEFAULT_DIRLEVELS 3
-#define DEFAULT_DIRLENGTH 2
-#define DEFAULT_MIN_FILE_SIZE 1
-#define DEFAULT_MAX_FILE_SIZE 1000000
-#define DEFAULT_CACHE_SIZE 1000000
-
-typedef struct {
- const char* cache_root;
- apr_size_t cache_root_len;
- off_t space; /* Maximum cache size (in 1024 bytes) */
- apr_time_t maxexpire; /* Maximum time to keep cached files in msecs */
- apr_time_t defaultexpire; /* default time to keep cached file in msecs */
- double lmfactor; /* factor for estimating expires date */
- apr_time_t gcinterval; /* garbage collection interval, in msec */
- int dirlevels; /* Number of levels of subdirectories */
- int dirlength; /* Length of subdirectory names */
- int expirychk; /* true if expiry time is observed for cached files */
- apr_size_t minfs; /* minumum file size for cached files */
- apr_size_t maxfs; /* maximum file size for cached files */
- apr_time_t mintm; /* minimum time margin for caching files */
- /* dgc_time_t gcdt; time of day for daily garbage collection */
- apr_array_header_t *gcclnun; /* gc_retain_t entries for unused files */
- apr_array_header_t *gcclean; /* gc_retain_t entries for all files */
- int maxgcmem; /* maximum memory used by garbage collection */
-} disk_cache_conf;
-
-module AP_MODULE_DECLARE_DATA disk_cache_module;
-
-/* Forward declarations */
-static int remove_entity(cache_handle_t *h);
-static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info *i);
-static apr_status_t store_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b);
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r);
-static apr_status_t recall_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
-
-/*
- * Local static functions
- */
-#define CACHE_HEADER_SUFFIX ".header"
-#define CACHE_DATA_SUFFIX ".data"
-static char *header_file(apr_pool_t *p, int dirlevels, int dirlength,
- const char *root, const char *name)
-{
- char *hashfile;
- hashfile = generate_name(p, dirlevels, dirlength, name);
- return apr_pstrcat(p, root, "/", hashfile, CACHE_HEADER_SUFFIX, NULL);
-}
-
-static char *data_file(apr_pool_t *p, int dirlevels, int dirlength,
- const char *root, const char *name)
-{
- char *hashfile;
- hashfile = generate_name(p, dirlevels, dirlength, name);
- return apr_pstrcat(p, root, "/", hashfile, CACHE_DATA_SUFFIX, NULL);
-}
-
-static void mkdir_structure(disk_cache_conf *conf, char *file, apr_pool_t *pool)
-{
- apr_status_t rv;
- char *p;
-
- for (p = file + conf->cache_root_len + 1;;) {
- p = strchr(p, '/');
- if (!p)
- break;
- *p = '\0';
-
- rv = apr_dir_make(file,
- APR_UREAD|APR_UWRITE|APR_UEXECUTE, pool);
- if (rv != APR_SUCCESS && !APR_STATUS_IS_EEXIST(rv)) {
- /* XXX */
- }
- *p = '/';
- ++p;
- }
-}
-
-static apr_status_t file_cache_el_final(cache_handle_t *h, request_rec *r)
-{
- apr_status_t rv;
- disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
- &disk_cache_module);
- disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
-
- /* move the data over */
- if (dobj->fd) {
- apr_file_flush(dobj->fd);
- if (!dobj->datafile) {
- dobj->datafile = data_file(r->pool, conf->dirlevels, conf->dirlength,
- conf->cache_root, h->cache_obj->key);
- }
- /* Remove old file with the same name. If remove fails, then
- * perhaps we need to create the directory tree where we are
- * about to write the new file.
- */
- rv = apr_file_remove(dobj->datafile, r->pool);
- if (rv != APR_SUCCESS) {
- mkdir_structure(conf, dobj->datafile, r->pool);
- }
-
- /*
- * This assumes that the tempfile is on the same file system
- * as the cache_root. If not, then we need a file copy/move
- * rather than a rename.
- */
- rv = apr_file_rename(dobj->tempfile, dobj->datafile, r->pool);
- if (rv != APR_SUCCESS) {
- /* XXX log */
- }
-
- apr_file_close(dobj->fd);
- dobj->fd = NULL;
- /* XXX log */
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t file_cache_errorcleanup(disk_cache_object_t *dobj, request_rec *r)
-{
- if (dobj->fd) {
- apr_file_close(dobj->fd);
- dobj->fd = NULL;
- }
- /* Remove the header file, the temporary body file, and a potential old body file */
- apr_file_remove(dobj->hdrsfile, r->pool);
- apr_file_remove(dobj->tempfile, r->pool);
- apr_file_remove(dobj->datafile, r->pool);
-
- /* Return non-APR_SUCCESS in order to have mod_cache remove the disk_cache filter */
- return DECLINED;
-}
-
-
-/* These two functions get and put state information into the data
- * file for an ap_cache_el, this state information will be read
- * and written transparent to clients of this module
- */
-static int file_cache_recall_mydata(apr_file_t *fd, cache_info *info,
- disk_cache_object_t *dobj)
-{
- apr_status_t rv;
- char urlbuff[1034]; /* XXX FIXME... THIS IS A POTENTIAL SECURITY HOLE */
- int urllen = sizeof(urlbuff);
- int offset=0;
- char * temp;
-
- /* read the data from the cache file */
- /* format
- * date SP expire SP count CRLF
- * dates are stored as a hex representation of apr_time_t (number of
- * microseconds since 00:00:00 january 1, 1970 UTC)
- */
- rv = apr_file_gets(&urlbuff[0], urllen, fd);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- if ((temp = strchr(&urlbuff[0], '\n')) != NULL) /* trim off new line character */
- *temp = '\0'; /* overlay it with the null terminator */
-
- if (!apr_date_checkmask(urlbuff, "&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&")) {
- return APR_EGENERAL;
- }
-
- info->date = ap_cache_hex2usec(urlbuff + offset);
- offset += (sizeof(info->date)*2) + 1;
- info->expire = ap_cache_hex2usec(urlbuff + offset);
- offset += (sizeof(info->expire)*2) + 1;
- dobj->version = ap_cache_hex2usec(urlbuff + offset);
- offset += (sizeof(info->expire)*2) + 1;
- info->request_time = ap_cache_hex2usec(urlbuff + offset);
- offset += (sizeof(info->expire)*2) + 1;
- info->response_time = ap_cache_hex2usec(urlbuff + offset);
-
- /* check that we have the same URL */
- rv = apr_file_gets(&urlbuff[0], urllen, fd);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- if ((temp = strchr(&urlbuff[0], '\n')) != NULL) { /* trim off new line character */
- *temp = '\0'; /* overlay it with the null terminator */
- }
-
- if (strncmp(urlbuff, "X-NAME: ", 7) != 0) {
- return APR_EGENERAL;
- }
- if (strcmp(urlbuff + 8, dobj->name) != 0) {
- return APR_EGENERAL;
- }
-
- return APR_SUCCESS;
-}
-
-static int file_cache_store_mydata(apr_file_t *fd , cache_handle_t *h, request_rec *r)
-{
- apr_status_t rc;
- char *buf;
- apr_size_t amt;
-
- char dateHexS[sizeof(apr_time_t) * 2 + 1];
- char expireHexS[sizeof(apr_time_t) * 2 + 1];
- char verHexS[sizeof(apr_time_t) * 2 + 1];
- char requestHexS[sizeof(apr_time_t) * 2 + 1];
- char responseHexS[sizeof(apr_time_t) * 2 + 1];
- cache_info *info = &(h->cache_obj->info);
- disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
-
- if (!r->headers_out) {
- /* XXX log message */
- return 0;
- }
-
- ap_cache_usec2hex(info->date, dateHexS);
- ap_cache_usec2hex(info->expire, expireHexS);
- ap_cache_usec2hex(dobj->version++, verHexS);
- ap_cache_usec2hex(info->request_time, requestHexS);
- ap_cache_usec2hex(info->response_time, responseHexS);
- buf = apr_pstrcat(r->pool, dateHexS, " ", expireHexS, " ", verHexS, " ", requestHexS, " ", responseHexS, "\n", NULL);
- amt = strlen(buf);
- rc = apr_file_write(fd, buf, &amt);
- if (rc != APR_SUCCESS) {
- /* XXX log message */
- return 0;
- }
-
- buf = apr_pstrcat(r->pool, "X-NAME: ", dobj->name, "\n", NULL);
- amt = strlen(buf);
- rc = apr_file_write(fd, buf, &amt);
- if (rc != APR_SUCCESS) {
- /* XXX log message */
- return 0;
- }
- return 1;
-}
-
-/*
- * Hook and mod_cache callback functions
- */
-#define AP_TEMPFILE "/aptmpXXXXXX"
-static int create_entity(cache_handle_t *h, request_rec *r,
- const char *type,
- const char *key,
- apr_off_t len)
-{
- disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
- &disk_cache_module);
- apr_status_t rv;
- cache_object_t *obj;
- disk_cache_object_t *dobj;
- apr_file_t *tmpfile;
-
- if (strcasecmp(type, "disk")) {
- return DECLINED;
- }
-
- if (conf->cache_root == NULL) {
- return DECLINED;
- }
-
- /* If the Content-Length is still unknown, cache anyway */
- if (len != -1 && (len < conf->minfs || len > conf->maxfs)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache_disk: URL %s failed the size check, "
- "or is incomplete",
- key);
- return DECLINED;
- }
-
- /* Allocate and initialize cache_object_t and disk_cache_object_t */
- obj = apr_pcalloc(r->pool, sizeof(*obj));
- obj->vobj = dobj = apr_pcalloc(r->pool, sizeof(*dobj));
-
- obj->key = apr_pstrdup(r->pool, key);
- /* XXX Bad Temporary Cast - see cache_object_t notes */
- obj->info.len = (apr_size_t) len;
- obj->complete = 0; /* Cache object is not complete */
-
- dobj->name = obj->key;
-
- /* open temporary file */
- dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
- rv = apr_file_mktemp(&tmpfile, dobj->tempfile,
- APR_CREATE | APR_READ | APR_WRITE | APR_EXCL, r->pool);
-
- if (rv == APR_SUCCESS) {
- /* Populate the cache handle */
- h->cache_obj = obj;
- h->recall_body = &recall_body;
- h->recall_headers = &recall_headers;
- h->store_body = &store_body;
- h->store_headers = &store_headers;
- h->remove_entity = &remove_entity;
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "disk_cache: Caching URL %s", key);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "disk_cache: Could not cache URL %s [%d]", key, rv);
-
- return DECLINED;
- }
-
- return OK;
-}
-
-static int open_entity(cache_handle_t *h, request_rec *r, const char *type, const char *key)
-{
- apr_status_t rc;
- static int error_logged = 0;
- disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
- &disk_cache_module);
- char *data;
- char *headers;
- apr_file_t *fd;
- apr_file_t *hfd;
- apr_finfo_t finfo;
- cache_object_t *obj;
- cache_info *info;
- disk_cache_object_t *dobj;
- int flags;
-
- h->cache_obj = NULL;
-
- /* Look up entity keyed to 'url' */
- if (strcasecmp(type, "disk")) {
- return DECLINED;
- }
-
- if (conf->cache_root == NULL) {
- if (!error_logged) {
- error_logged = 1;
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "disk_cache: Cannot cache files to disk without a CacheRoot specified.");
- }
- return DECLINED;
- }
-
- data = data_file(r->pool, conf->dirlevels, conf->dirlength,
- conf->cache_root, key);
- headers = header_file(r->pool, conf->dirlevels, conf->dirlength,
- conf->cache_root, key);
-
- /* Open the data file */
- flags = APR_READ|APR_BINARY;
-#ifdef APR_SENDFILE_ENABLED
- flags |= APR_SENDFILE_ENABLED;
-#endif
- rc = apr_file_open(&fd, data, flags, 0, r->pool);
- if (rc != APR_SUCCESS) {
- /* XXX: Log message */
- return DECLINED;
- }
-
- /* Open the headers file */
- flags = APR_READ|APR_BINARY|APR_BUFFERED;
- rc = apr_file_open(&hfd, headers, flags, 0, r->pool);
- if (rc != APR_SUCCESS) {
- /* XXX: Log message */
- return DECLINED;
- }
-
- /* Create and init the cache object */
- h->cache_obj = obj = apr_pcalloc(r->pool, sizeof(cache_object_t));
- obj->vobj = dobj = apr_pcalloc(r->pool, sizeof(disk_cache_object_t));
-
- info = &(obj->info);
- obj->key = (char *) key;
- dobj->name = (char *) key;
- dobj->fd = fd;
- dobj->hfd = hfd;
- dobj->datafile = data;
- dobj->hdrsfile = headers;
-
- rc = apr_file_info_get(&finfo, APR_FINFO_SIZE, fd);
- if (rc == APR_SUCCESS) {
- dobj->file_size = finfo.size;
- }
-
- /* Read the bytes to setup the cache_info fields */
- rc = file_cache_recall_mydata(hfd, info, dobj);
- if (rc != APR_SUCCESS) {
- /* XXX log message */
- return DECLINED;
- }
-
- /* Initialize the cache_handle callback functions */
- h->recall_body = &recall_body;
- h->recall_headers = &recall_headers;
- h->store_body = &store_body;
- h->store_headers = &store_headers;
- h->remove_entity = &remove_entity;
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "disk_cache: Serving Cached URL %s", dobj->name);
- return OK;
-}
-
-static int remove_entity(cache_handle_t *h)
-{
- /* Null out the cache object pointer so next time we start from scratch */
- h->cache_obj = NULL;
- return OK;
-}
-
-/*
- * Reads headers from a buffer and returns an array of headers.
- * Returns NULL on file error
- * This routine tries to deal with too long lines and continuation lines.
- * @@@: XXX: FIXME: currently the headers are passed thru un-merged.
- * Is that okay, or should they be collapsed where possible?
- */
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r)
-{
- apr_status_t rv;
- char urlbuff[1034];
- int urllen = sizeof(urlbuff);
- disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
- apr_table_t * tmp;
-
- /* This case should not happen... */
- if (!dobj->hfd) {
- /* XXX log message */
- return APR_NOTFOUND;
- }
-
- if(!r->headers_out) {
- r->headers_out = apr_table_make(r->pool, 20);
- }
-
- /*
- * Call routine to read the header lines/status line
- */
- ap_scan_script_header_err(r, dobj->hfd, NULL);
-
- apr_table_setn(r->headers_out, "Content-Type",
- ap_make_content_type(r, r->content_type));
-
- rv = apr_file_gets(&urlbuff[0], urllen, dobj->hfd); /* Read status */
- if (rv != APR_SUCCESS) {
- /* XXX log message */
- return rv;
- }
-
- r->status = atoi(urlbuff); /* Save status line into request rec */
-
- /* Read and ignore the status line (This request might result in a
- * 304, so we don't necessarily want to retransmit a 200 from the cache.)
- */
- rv = apr_file_gets(&urlbuff[0], urllen, dobj->hfd);
- if (rv != APR_SUCCESS) {
- /* XXX log message */
- return rv;
- }
-
- h->req_hdrs = apr_table_make(r->pool, 20);
-
- /*
- * Call routine to read the header lines/status line
- */
- tmp = r->err_headers_out;
- r->err_headers_out = h->req_hdrs;
- rv = apr_file_gets(&urlbuff[0], urllen, dobj->hfd); /* Read status */
- ap_scan_script_header_err(r, dobj->hfd, NULL);
- r->err_headers_out = tmp;
-
- apr_file_close(dobj->hfd);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "disk_cache: Served headers for URL %s", dobj->name);
- return APR_SUCCESS;
-}
-
-static apr_status_t recall_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb)
-{
- apr_bucket *e;
- disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj;
-
- e = apr_bucket_file_create(dobj->fd, 0, (apr_size_t) dobj->file_size, p,
- bb->bucket_alloc);
- APR_BRIGADE_INSERT_HEAD(bb, e);
- e = apr_bucket_eos_create(bb->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
-
- return APR_SUCCESS;
-}
-
-static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info *info)
-{
- disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
- &disk_cache_module);
- apr_status_t rv;
- char *buf;
- char statusbuf[8];
- apr_size_t amt;
- disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj;
- apr_file_t *hfd = dobj->hfd;
-
- if (!hfd) {
- if (!dobj->hdrsfile) {
- dobj->hdrsfile = header_file(r->pool,
- conf->dirlevels,
- conf->dirlength,
- conf->cache_root,
- h->cache_obj->key);
- }
-
- /* This is flaky... we need to manage the cache_info differently */
- h->cache_obj->info = *info;
-
- /* Remove old file with the same name. If remove fails, then
- * perhaps we need to create the directory tree where we are
- * about to write the new headers file.
- */
- rv = apr_file_remove(dobj->hdrsfile, r->pool);
- if (rv != APR_SUCCESS) {
- mkdir_structure(conf, dobj->hdrsfile, r->pool);
- }
-
- rv = apr_file_open(&dobj->hfd, dobj->hdrsfile,
- APR_WRITE | APR_CREATE | APR_EXCL,
- APR_OS_DEFAULT, r->pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- hfd = dobj->hfd;
- dobj->name = h->cache_obj->key;
-
- file_cache_store_mydata(dobj->hfd, h, r);
-
- if (r->headers_out) {
- int i;
- apr_table_t* headers_out = ap_cache_cacheable_hdrs_out(r->pool, r->headers_out);
- apr_table_entry_t *elts = (apr_table_entry_t *) apr_table_elts(headers_out)->elts;
- for (i = 0; i < apr_table_elts(headers_out)->nelts; ++i) {
- if (elts[i].key != NULL) {
- buf = apr_pstrcat(r->pool, elts[i].key, ": ", elts[i].val, CRLF, NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
- }
- }
- buf = apr_pstrcat(r->pool, CRLF, NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
-
- /* This case only occurs when the content is generated locally */
- if (!apr_table_get(r->headers_out, "Content-Type") && r->content_type) {
- apr_table_setn(r->headers_out, "Content-Type",
- ap_make_content_type(r, r->content_type));
- }
- }
- sprintf(statusbuf,"%d", r->status);
- buf = apr_pstrcat(r->pool, statusbuf, CRLF, NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
-
- /* This case only occurs when the content is generated locally */
- if (!r->status_line) {
- r->status_line = ap_get_status_line(r->status);
- }
- buf = apr_pstrcat(r->pool, r->status_line, "\n", NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
- buf = apr_pstrcat(r->pool, CRLF, NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
-
- /* Parse the vary header and dump those fields from the headers_in. */
- /* Make call to the same thing cache_select_url calls to crack Vary. */
- /* @@@ Some day, not today. */
- if (r->headers_in) {
- int i;
- apr_table_entry_t *elts = (apr_table_entry_t *) apr_table_elts(r->headers_in)->elts;
- for (i = 0; i < apr_table_elts(r->headers_in)->nelts; ++i) {
- if (elts[i].key != NULL) {
- buf = apr_pstrcat(r->pool, elts[i].key, ": ", elts[i].val, CRLF, NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
- }
- }
- buf = apr_pstrcat(r->pool, CRLF, NULL);
- amt = strlen(buf);
- apr_file_write(hfd, buf, &amt);
- }
- apr_file_close(hfd); /* flush and close */
- }
- else {
- /* XXX log message */
- }
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "disk_cache: Caching headers for URL %s", dobj->name);
- return APR_SUCCESS;
-}
-
-static apr_status_t store_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b)
-{
- apr_bucket *e;
- apr_status_t rv;
- disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
- disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
- &disk_cache_module);
-
- if (!dobj->fd) {
- rv = apr_file_open(&dobj->fd, dobj->tempfile,
- APR_WRITE | APR_CREATE | APR_BINARY| APR_TRUNCATE | APR_BUFFERED,
- APR_UREAD | APR_UWRITE, r->pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- dobj->file_size = 0;
- }
- for (e = APR_BRIGADE_FIRST(b);
- e != APR_BRIGADE_SENTINEL(b);
- e = APR_BUCKET_NEXT(e))
- {
- const char *str;
- apr_size_t length;
- apr_bucket_read(e, &str, &length, APR_BLOCK_READ);
- if (apr_file_write(dobj->fd, str, &length) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "cache_disk: Error when writing cache file for URL %s",
- h->cache_obj->key);
- /* Remove the intermediate cache file and return non-APR_SUCCESS */
- return file_cache_errorcleanup(dobj, r);
- }
- dobj->file_size += length;
- if (dobj->file_size > conf->maxfs) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache_disk: URL %s failed the size check (%lu>%lu)",
- h->cache_obj->key, (unsigned long)dobj->file_size, (unsigned long)conf->maxfs);
- /* Remove the intermediate cache file and return non-APR_SUCCESS */
- return file_cache_errorcleanup(dobj, r);
- }
- }
-
- /* Was this the final bucket? If yes, close the body file and make sanity checks */
- if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(b))) {
- if (h->cache_obj->info.len <= 0) {
- h->cache_obj->info.len = dobj->file_size;
- }
- else if (h->cache_obj->info.len != dobj->file_size) {
- /* "Content-Length" and actual content disagree in size. Log that. */
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "disk_cache: URL %s failed the size check (%lu != %lu)",
- h->cache_obj->key,
- (unsigned long)h->cache_obj->info.len,
- (unsigned long)dobj->file_size);
- /* Remove the intermediate cache file and return non-APR_SUCCESS */
- return file_cache_errorcleanup(dobj, r);
- }
- if (dobj->file_size < conf->minfs) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "cache_disk: URL %s failed the size check (%lu<%lu)",
- h->cache_obj->key, (unsigned long)dobj->file_size, (unsigned long)conf->minfs);
- /* Remove the intermediate cache file and return non-APR_SUCCESS */
- return file_cache_errorcleanup(dobj, r);
- }
- /* All checks were fine. Move tempfile to final destination */
- file_cache_el_final(h, r); /* Link to the perm file, and close the descriptor */
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "disk_cache: Body for URL %s cached.", dobj->name);
- }
-
- return APR_SUCCESS;
-}
-
-static void *create_config(apr_pool_t *p, server_rec *s)
-{
- disk_cache_conf *conf = apr_pcalloc(p, sizeof(disk_cache_conf));
-
- /* XXX: Set default values */
- conf->dirlevels = DEFAULT_DIRLEVELS;
- conf->dirlength = DEFAULT_DIRLENGTH;
- conf->space = DEFAULT_CACHE_SIZE;
- conf->maxfs = DEFAULT_MAX_FILE_SIZE;
- conf->minfs = DEFAULT_MIN_FILE_SIZE;
- conf->expirychk = 1;
-
- conf->cache_root = NULL;
- conf->cache_root_len = 0;
-
- return conf;
-}
-
-/*
- * mod_disk_cache configuration directives handlers.
- */
-static const char
-*set_cache_root(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- conf->cache_root = arg;
- conf->cache_root_len = strlen(arg);
- /* TODO: canonicalize cache_root and strip off any trailing slashes */
-
- return NULL;
-}
-static const char
-*set_cache_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- conf->space = atoi(arg);
- return NULL;
-}
-static const char
-*set_cache_gcint(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-/*
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
-*/
- /* XXX */
- return NULL;
-}
-/*
- * Consider eliminating the next two directives in favor of
- * Ian's prime number hash...
- * key = hash_fn( r->uri)
- * filename = "/key % prime1 /key %prime2/key %prime3"
- */
-static const char
-*set_cache_dirlevels(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- int val = atoi(arg);
- if (val < 1)
- return "CacheDirLevels value must be an integer greater than 0";
- if (val * conf->dirlength > CACHEFILE_LEN)
- return "CacheDirLevels*CacheDirLength value must not be higher than 20";
- conf->dirlevels = val;
- return NULL;
-}
-static const char
-*set_cache_dirlength(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- int val = atoi(arg);
- if (val < 1)
- return "CacheDirLength value must be an integer greater than 0";
- if (val * conf->dirlevels > CACHEFILE_LEN)
- return "CacheDirLevels*CacheDirLength value must not be higher than 20";
-
- conf->dirlength = val;
- return NULL;
-}
-static const char
-*set_cache_exchk(cmd_parms *parms, void *in_struct_ptr, int flag)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- conf->expirychk = flag;
-
- return NULL;
-}
-static const char
-*set_cache_minfs(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- conf->minfs = atoi(arg);
- return NULL;
-}
-static const char
-*set_cache_maxfs(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- conf->maxfs = atoi(arg);
- return NULL;
-}
-static const char
-*set_cache_minetm(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- /* XXX
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- */
- return NULL;
-}
-static const char
-*set_cache_gctime(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- /* XXX
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- */
- return NULL;
-}
-static const char
-*add_cache_gcclean(cmd_parms *parms, void *in_struct_ptr, const char *arg, const char *arg1)
-{
- /* XXX
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- */
- return NULL;
-}
-static const char
-*add_cache_gcclnun(cmd_parms *parms, void *in_struct_ptr, const char *arg, const char *arg1)
-{
- /* XXX
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- */
- return NULL;
-}
-static const char
-*set_cache_maxgcmem(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- /* XXX
- disk_cache_conf *conf = ap_get_module_config(parms->server->module_config,
- &disk_cache_module);
- */
- return NULL;
-}
-
-static const command_rec disk_cache_cmds[] =
-{
- AP_INIT_TAKE1("CacheRoot", set_cache_root, NULL, RSRC_CONF,
- "The directory to store cache files"),
- AP_INIT_TAKE1("CacheSize", set_cache_size, NULL, RSRC_CONF,
- "The maximum disk space used by the cache in KB"),
- AP_INIT_TAKE1("CacheGcInterval", set_cache_gcint, NULL, RSRC_CONF,
- "The interval between garbage collections, in hours"),
- AP_INIT_TAKE1("CacheDirLevels", set_cache_dirlevels, NULL, RSRC_CONF,
- "The number of levels of subdirectories in the cache"),
- AP_INIT_TAKE1("CacheDirLength", set_cache_dirlength, NULL, RSRC_CONF,
- "The number of characters in subdirectory names"),
- AP_INIT_FLAG("CacheExpiryCheck", set_cache_exchk, NULL, RSRC_CONF,
- "on if cache observes Expires date when seeking files"),
- AP_INIT_TAKE1("CacheMinFileSize", set_cache_minfs, NULL, RSRC_CONF,
- "The minimum file size to cache a document"),
- AP_INIT_TAKE1("CacheMaxFileSize", set_cache_maxfs, NULL, RSRC_CONF,
- "The maximum file size to cache a document"),
- AP_INIT_TAKE1("CacheTimeMargin", set_cache_minetm, NULL, RSRC_CONF,
- "The minimum time margin to cache a document"),
- AP_INIT_TAKE1("CacheGcDaily", set_cache_gctime, NULL, RSRC_CONF,
- "The time of day for garbage collection (24 hour clock)"),
- AP_INIT_TAKE2("CacheGcUnused", add_cache_gcclnun, NULL, RSRC_CONF,
- "The time in hours to retain unused file that match a url"),
- AP_INIT_TAKE2("CacheGcClean", add_cache_gcclean, NULL, RSRC_CONF,
- "The time in hours to retain unchanged files that match a url"),
- AP_INIT_TAKE1("CacheGcMemUsage", set_cache_maxgcmem, NULL, RSRC_CONF,
- "The maximum kilobytes of memory used for garbage collection"),
- {NULL}
-};
-
-static void disk_cache_register_hook(apr_pool_t *p)
-{
- /* cache initializer */
- cache_hook_create_entity(create_entity, NULL, NULL, APR_HOOK_MIDDLE);
- cache_hook_open_entity(open_entity, NULL, NULL, APR_HOOK_MIDDLE);
-/* cache_hook_remove_entity(remove_entity, NULL, NULL, APR_HOOK_MIDDLE); */
-}
-
-module AP_MODULE_DECLARE_DATA disk_cache_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- create_config, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- disk_cache_cmds, /* command apr_table_t */
- disk_cache_register_hook /* register hooks */
-};
diff --git a/modules/experimental/mod_disk_cache.dsp b/modules/experimental/mod_disk_cache.dsp
deleted file mode 100644
index eb8a32c980..0000000000
--- a/modules/experimental/mod_disk_cache.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_disk_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_disk_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_disk_cache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_disk_cache.mak" CFG="mod_disk_cache - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_disk_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_disk_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_disk_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fd"Release\mod_disk_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_disk_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_disk_cache.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_disk_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fd"Debug\mod_disk_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_disk_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_disk_cache.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_disk_cache - Win32 Release"
-# Name "mod_disk_cache - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_cache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_disk_cache.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_disk_cache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_disk_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_disk_cache.so "disk_cache_module for Apache" ../../include/ap_release.h > .\mod_disk_cache.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_disk_cache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_disk_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_disk_cache.so "disk_cache_module for Apache" ../../include/ap_release.h > .\mod_disk_cache.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/mod_example.c b/modules/experimental/mod_example.c
deleted file mode 100644
index 7e02213266..0000000000
--- a/modules/experimental/mod_example.c
+++ /dev/null
@@ -1,1335 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Apache example module. Provide demonstrations of how modules do things.
- * It is not meant to be used in a production server. Since it participates
- * in all of the processing phases, it could conceivable interfere with
- * the proper operation of other modules -- particularly the ones related
- * to security.
- *
- * In the interest of brevity, all functions and structures internal to
- * this module, but which may have counterparts in *real* modules, are
- * prefixed with 'x_' instead of 'example_'.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_script.h"
-#include "http_connection.h"
-
-#include "apr_strings.h"
-
-#include <stdio.h>
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* Data declarations. */
-/* */
-/* Here are the static cells and structure declarations private to our */
-/* module. */
-/* */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Sample configuration record. Used for both per-directory and per-server
- * configuration data.
- *
- * It's perfectly reasonable to have two different structures for the two
- * different environments. The same command handlers will be called for
- * both, though, so the handlers need to be able to tell them apart. One
- * possibility is for both structures to start with an int which is 0 for
- * one and 1 for the other.
- *
- * Note that while the per-directory and per-server configuration records are
- * available to most of the module handlers, they should be treated as
- * READ-ONLY by all except the command and merge handlers. Sometimes handlers
- * are handed a record that applies to the current location by implication or
- * inheritance, and modifying it will change the rules for other locations.
- */
-typedef struct x_cfg {
- int cmode; /* Environment to which record applies
- * (directory, server, or combination).
- */
-#define CONFIG_MODE_SERVER 1
-#define CONFIG_MODE_DIRECTORY 2
-#define CONFIG_MODE_COMBO 3 /* Shouldn't ever happen. */
- int local; /* Boolean: "Example" directive declared
- * here?
- */
- int congenital; /* Boolean: did we inherit an "Example"? */
- char *trace; /* Pointer to trace string. */
- char *loc; /* Location to which this record applies. */
-} x_cfg;
-
-/*
- * Let's set up a module-local static cell to point to the accreting callback
- * trace. As each API callback is made to us, we'll tack on the particulars
- * to whatever we've already recorded. To avoid massive memory bloat as
- * directories are walked again and again, we record the routine/environment
- * the first time (non-request context only), and ignore subsequent calls for
- * the same routine/environment.
- */
-static const char *trace = NULL;
-static apr_table_t *static_calls_made = NULL;
-
-/*
- * To avoid leaking memory from pools other than the per-request one, we
- * allocate a module-private pool, and then use a sub-pool of that which gets
- * freed each time we modify the trace. That way previous layers of trace
- * data don't get lost.
- */
-static apr_pool_t *x_pool = NULL;
-static apr_pool_t *x_subpool = NULL;
-
-/*
- * Declare ourselves so the configuration routines can find and know us.
- * We'll fill it in at the end of the module.
- */
-module AP_MODULE_DECLARE_DATA example_module;
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* The following pseudo-prototype declarations illustrate the parameters */
-/* passed to command handlers for the different types of directive */
-/* syntax. If an argument was specified in the directive definition */
-/* (look for "command_rec" below), it's available to the command handler */
-/* via the (void *) info field in the cmd_parms argument passed to the */
-/* handler (cmd->info for the examples below). */
-/* */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Command handler for a NO_ARGS directive. Declared in the command_rec
- * list with
- * AP_INIT_NO_ARGS("directive", function, mconfig, where, help)
- *
- * static const char *handle_NO_ARGS(cmd_parms *cmd, void *mconfig);
- */
-
-/*
- * Command handler for a RAW_ARGS directive. The "args" argument is the text
- * of the commandline following the directive itself. Declared in the
- * command_rec list with
- * AP_INIT_RAW_ARGS("directive", function, mconfig, where, help)
- *
- * static const char *handle_RAW_ARGS(cmd_parms *cmd, void *mconfig,
- * const char *args);
- */
-
-/*
- * Command handler for a FLAG directive. The single parameter is passed in
- * "bool", which is either zero or not for Off or On respectively.
- * Declared in the command_rec list with
- * AP_INIT_FLAG("directive", function, mconfig, where, help)
- *
- * static const char *handle_FLAG(cmd_parms *cmd, void *mconfig, int bool);
- */
-
-/*
- * Command handler for a TAKE1 directive. The single parameter is passed in
- * "word1". Declared in the command_rec list with
- * AP_INIT_TAKE1("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE1(cmd_parms *cmd, void *mconfig,
- * char *word1);
- */
-
-/*
- * Command handler for a TAKE2 directive. TAKE2 commands must always have
- * exactly two arguments. Declared in the command_rec list with
- * AP_INIT_TAKE2("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE2(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2);
- */
-
-/*
- * Command handler for a TAKE3 directive. Like TAKE2, these must have exactly
- * three arguments, or the parser complains and doesn't bother calling us.
- * Declared in the command_rec list with
- * AP_INIT_TAKE3("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE3(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a TAKE12 directive. These can take either one or two
- * arguments.
- * - word2 is a NULL pointer if no second argument was specified.
- * Declared in the command_rec list with
- * AP_INIT_TAKE12("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE12(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2);
- */
-
-/*
- * Command handler for a TAKE123 directive. A TAKE123 directive can be given,
- * as might be expected, one, two, or three arguments.
- * - word2 is a NULL pointer if no second argument was specified.
- * - word3 is a NULL pointer if no third argument was specified.
- * Declared in the command_rec list with
- * AP_INIT_TAKE123("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE123(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a TAKE13 directive. Either one or three arguments are
- * permitted - no two-parameters-only syntax is allowed.
- * - word2 and word3 are NULL pointers if only one argument was specified.
- * Declared in the command_rec list with
- * AP_INIT_TAKE13("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE13(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a TAKE23 directive. At least two and as many as three
- * arguments must be specified.
- * - word3 is a NULL pointer if no third argument was specified.
- * Declared in the command_rec list with
- * AP_INIT_TAKE23("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE23(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a ITERATE directive.
- * - Handler is called once for each of n arguments given to the directive.
- * - word1 points to each argument in turn.
- * Declared in the command_rec list with
- * AP_INIT_ITERATE("directive", function, mconfig, where, help)
- *
- * static const char *handle_ITERATE(cmd_parms *cmd, void *mconfig,
- * char *word1);
- */
-
-/*
- * Command handler for a ITERATE2 directive.
- * - Handler is called once for each of the second and subsequent arguments
- * given to the directive.
- * - word1 is the same for each call for a particular directive instance (the
- * first argument).
- * - word2 points to each of the second and subsequent arguments in turn.
- * Declared in the command_rec list with
- * AP_INIT_ITERATE2("directive", function, mconfig, where, help)
- *
- * static const char *handle_ITERATE2(cmd_parms *cmd, void *mconfig,
- * char *word1, char *word2);
- */
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* These routines are strictly internal to this module, and support its */
-/* operation. They are not referenced by any external portion of the */
-/* server. */
-/* */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Locate our directory configuration record for the current request.
- */
-static x_cfg *our_dconfig(const request_rec *r)
-{
- return (x_cfg *) ap_get_module_config(r->per_dir_config, &example_module);
-}
-
-#if 0
-/*
- * Locate our server configuration record for the specified server.
- */
-static x_cfg *our_sconfig(const server_rec *s)
-{
- return (x_cfg *) ap_get_module_config(s->module_config, &example_module);
-}
-
-/*
- * Likewise for our configuration record for the specified request.
- */
-static x_cfg *our_rconfig(const request_rec *r)
-{
- return (x_cfg *) ap_get_module_config(r->request_config, &example_module);
-}
-#endif
-
-/*
- * Likewise for our configuration record for a connection.
- */
-static x_cfg *our_cconfig(const conn_rec *c)
-{
- return (x_cfg *) ap_get_module_config(c->conn_config, &example_module);
-}
-
-/*
- * This routine sets up some module-wide cells if they haven't been already.
- */
-static void setup_module_cells(void)
-{
- /*
- * If we haven't already allocated our module-private pool, do so now.
- */
- if (x_pool == NULL) {
- apr_pool_create(&x_pool, NULL);
- };
- /*
- * Likewise for the table of routine/environment pairs we visit outside of
- * request context.
- */
- if (static_calls_made == NULL) {
- static_calls_made = apr_table_make(x_pool, 16);
- };
-}
-
-/*
- * This routine is used to add a trace of a callback to the list. We're
- * passed the server record (if available), the request record (if available),
- * a pointer to our private configuration record (if available) for the
- * environment to which the callback is supposed to apply, and some text. We
- * turn this into a textual representation and add it to the tail of the list.
- * The list can be displayed by the x_handler() routine.
- *
- * If the call occurs within a request context (i.e., we're passed a request
- * record), we put the trace into the request apr_pool_t and attach it to the
- * request via the notes mechanism. Otherwise, the trace gets added
- * to the static (non-request-specific) list.
- *
- * Note that the r->notes table is only for storing strings; if you need to
- * maintain per-request data of any other type, you need to use another
- * mechanism.
- */
-
-#define TRACE_NOTE "example-trace"
-
-static void trace_add(server_rec *s, request_rec *r, x_cfg *mconfig,
- const char *note)
-{
- const char *sofar;
- char *addon;
- char *where;
- apr_pool_t *p;
- const char *trace_copy;
-
- /*
- * Make sure our pools and tables are set up - we need 'em.
- */
- setup_module_cells();
- /*
- * Now, if we're in request-context, we use the request pool.
- */
- if (r != NULL) {
- p = r->pool;
- if ((trace_copy = apr_table_get(r->notes, TRACE_NOTE)) == NULL) {
- trace_copy = "";
- }
- }
- else {
- /*
- * We're not in request context, so the trace gets attached to our
- * module-wide pool. We do the create/destroy every time we're called
- * in non-request context; this avoids leaking memory in some of
- * the subsequent calls that allocate memory only once (such as the
- * key formation below).
- *
- * Make a new sub-pool and copy any existing trace to it. Point the
- * trace cell at the copied value.
- */
- apr_pool_create(&p, x_pool);
- if (trace != NULL) {
- trace = apr_pstrdup(p, trace);
- }
- /*
- * Now, if we have a sub-pool from before, nuke it and replace with
- * the one we just allocated.
- */
- if (x_subpool != NULL) {
- apr_pool_destroy(x_subpool);
- }
- x_subpool = p;
- trace_copy = trace;
- }
- /*
- * If we weren't passed a configuration record, we can't figure out to
- * what location this call applies. This only happens for co-routines
- * that don't operate in a particular directory or server context. If we
- * got a valid record, extract the location (directory or server) to which
- * it applies.
- */
- where = (mconfig != NULL) ? mconfig->loc : "nowhere";
- where = (where != NULL) ? where : "";
- /*
- * Now, if we're not in request context, see if we've been called with
- * this particular combination before. The apr_table_t is allocated in the
- * module's private pool, which doesn't get destroyed.
- */
- if (r == NULL) {
- char *key;
-
- key = apr_pstrcat(p, note, ":", where, NULL);
- if (apr_table_get(static_calls_made, key) != NULL) {
- /*
- * Been here, done this.
- */
- return;
- }
- else {
- /*
- * First time for this combination of routine and environment -
- * log it so we don't do it again.
- */
- apr_table_set(static_calls_made, key, "been here");
- }
- }
- addon = apr_pstrcat(p,
- " <li>\n"
- " <dl>\n"
- " <dt><samp>", note, "</samp></dt>\n"
- " <dd><samp>[", where, "]</samp></dd>\n"
- " </dl>\n"
- " </li>\n",
- NULL);
- sofar = (trace_copy == NULL) ? "" : trace_copy;
- trace_copy = apr_pstrcat(p, sofar, addon, NULL);
- if (r != NULL) {
- apr_table_set(r->notes, TRACE_NOTE, trace_copy);
- }
- else {
- trace = trace_copy;
- }
- /*
- * You *could* change the following if you wanted to see the calling
- * sequence reported in the server's error_log, but beware - almost all of
- * these co-routines are called for every single request, and the impact
- * on the size (and readability) of the error_log is considerable.
- */
-#define EXAMPLE_LOG_EACH 0
- if (EXAMPLE_LOG_EACH && (s != NULL)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "mod_example: %s", note);
- }
-}
-
-/*--------------------------------------------------------------------------*/
-/* We prototyped the various syntax for command handlers (routines that */
-/* are called when the configuration parser detects a directive declared */
-/* by our module) earlier. Now we actually declare a "real" routine that */
-/* will be invoked by the parser when our "real" directive is */
-/* encountered. */
-/* */
-/* If a command handler encounters a problem processing the directive, it */
-/* signals this fact by returning a non-NULL pointer to a string */
-/* describing the problem. */
-/* */
-/* The magic return value DECLINE_CMD is used to deal with directives */
-/* that might be declared by multiple modules. If the command handler */
-/* returns NULL, the directive was processed; if it returns DECLINE_CMD, */
-/* the next module (if any) that declares the directive is given a chance */
-/* at it. If it returns any other value, it's treated as the text of an */
-/* error message. */
-/*--------------------------------------------------------------------------*/
-/*
- * Command handler for the NO_ARGS "Example" directive. All we do is mark the
- * call in the trace log, and flag the applicability of the directive to the
- * current location in that location's configuration record.
- */
-static const char *cmd_example(cmd_parms *cmd, void *mconfig)
-{
- x_cfg *cfg = (x_cfg *) mconfig;
-
- /*
- * "Example Wuz Here"
- */
- cfg->local = 1;
- trace_add(cmd->server, NULL, cfg, "cmd_example()");
- return NULL;
-}
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* Now we declare our content handlers, which are invoked when the server */
-/* encounters a document which our module is supposed to have a chance to */
-/* see. (See mod_mime's SetHandler and AddHandler directives, and the */
-/* mod_info and mod_status examples, for more details.) */
-/* */
-/* Since content handlers are dumping data directly into the connection */
-/* (using the r*() routines, such as rputs() and rprintf()) without */
-/* intervention by other parts of the server, they need to make */
-/* sure any accumulated HTTP headers are sent first. This is done by */
-/* calling send_http_header(). Otherwise, no header will be sent at all, */
-/* and the output sent to the client will actually be HTTP-uncompliant. */
-/*--------------------------------------------------------------------------*/
-/*
- * Sample content handler. All this does is display the call list that has
- * been built up so far.
- *
- * The return value instructs the caller concerning what happened and what to
- * do next:
- * OK ("we did our thing")
- * DECLINED ("this isn't something with which we want to get involved")
- * HTTP_mumble ("an error status should be reported")
- */
-static int x_handler(request_rec *r)
-{
- x_cfg *dcfg;
-
- if (strcmp(r->handler, "example-handler")) {
- return DECLINED;
- }
-
- dcfg = our_dconfig(r);
- trace_add(r->server, r, dcfg, "x_handler()");
- /*
- * We're about to start sending content, so we need to force the HTTP
- * headers to be sent at this point. Otherwise, no headers will be sent
- * at all. We can set any we like first, of course. **NOTE** Here's
- * where you set the "Content-type" header, and you do so by putting it in
- * r->content_type, *not* r->headers_out("Content-type"). If you don't
- * set it, it will be filled in with the server's default type (typically
- * "text/plain"). You *must* also ensure that r->content_type is lower
- * case.
- *
- * We also need to start a timer so the server can know if the connexion
- * is broken.
- */
- ap_set_content_type(r, "text/html");
- /*
- * If we're only supposed to send header information (HEAD request), we're
- * already there.
- */
- if (r->header_only) {
- return OK;
- }
-
- /*
- * Now send our actual output. Since we tagged this as being
- * "text/html", we need to embed any HTML.
- */
- ap_rputs(DOCTYPE_HTML_3_2, r);
- ap_rputs("<HTML>\n", r);
- ap_rputs(" <HEAD>\n", r);
- ap_rputs(" <TITLE>mod_example Module Content-Handler Output\n", r);
- ap_rputs(" </TITLE>\n", r);
- ap_rputs(" </HEAD>\n", r);
- ap_rputs(" <BODY>\n", r);
- ap_rputs(" <H1><SAMP>mod_example</SAMP> Module Content-Handler Output\n", r);
- ap_rputs(" </H1>\n", r);
- ap_rputs(" <P>\n", r);
- ap_rprintf(r, " Apache HTTP Server version: \"%s\"\n",
- ap_get_server_version());
- ap_rputs(" <BR>\n", r);
- ap_rprintf(r, " Server built: \"%s\"\n", ap_get_server_built());
- ap_rputs(" </P>\n", r);;
- ap_rputs(" <P>\n", r);
- ap_rputs(" The format for the callback trace is:\n", r);
- ap_rputs(" </P>\n", r);
- ap_rputs(" <DL>\n", r);
- ap_rputs(" <DT><EM>n</EM>.<SAMP>&lt;routine-name&gt;", r);
- ap_rputs("(&lt;routine-data&gt;)</SAMP>\n", r);
- ap_rputs(" </DT>\n", r);
- ap_rputs(" <DD><SAMP>[&lt;applies-to&gt;]</SAMP>\n", r);
- ap_rputs(" </DD>\n", r);
- ap_rputs(" </DL>\n", r);
- ap_rputs(" <P>\n", r);
- ap_rputs(" The <SAMP>&lt;routine-data&gt;</SAMP> is supplied by\n", r);
- ap_rputs(" the routine when it requests the trace,\n", r);
- ap_rputs(" and the <SAMP>&lt;applies-to&gt;</SAMP> is extracted\n", r);
- ap_rputs(" from the configuration record at the time of the trace.\n", r);
- ap_rputs(" <STRONG>SVR()</STRONG> indicates a server environment\n", r);
- ap_rputs(" (blank means the main or default server, otherwise it's\n", r);
- ap_rputs(" the name of the VirtualHost); <STRONG>DIR()</STRONG>\n", r);
- ap_rputs(" indicates a location in the URL or filesystem\n", r);
- ap_rputs(" namespace.\n", r);
- ap_rputs(" </P>\n", r);
- ap_rprintf(r, " <H2>Static callbacks so far:</H2>\n <OL>\n%s </OL>\n",
- trace);
- ap_rputs(" <H2>Request-specific callbacks so far:</H2>\n", r);
- ap_rprintf(r, " <OL>\n%s </OL>\n", apr_table_get(r->notes, TRACE_NOTE));
- ap_rputs(" <H2>Environment for <EM>this</EM> call:</H2>\n", r);
- ap_rputs(" <UL>\n", r);
- ap_rprintf(r, " <LI>Applies-to: <SAMP>%s</SAMP>\n </LI>\n", dcfg->loc);
- ap_rprintf(r, " <LI>\"Example\" directive declared here: %s\n </LI>\n",
- (dcfg->local ? "YES" : "NO"));
- ap_rprintf(r, " <LI>\"Example\" inherited: %s\n </LI>\n",
- (dcfg->congenital ? "YES" : "NO"));
- ap_rputs(" </UL>\n", r);
- ap_rputs(" </BODY>\n", r);
- ap_rputs("</HTML>\n", r);
- /*
- * We're all done, so cancel the timeout we set. Since this is probably
- * the end of the request we *could* assume this would be done during
- * post-processing - but it's possible that another handler might be
- * called and inherit our outstanding timer. Not good; to each its own.
- */
- /*
- * We did what we wanted to do, so tell the rest of the server we
- * succeeded.
- */
- return OK;
-}
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* Now let's declare routines for each of the callback phase in order. */
-/* (That's the order in which they're listed in the callback list, *not */
-/* the order in which the server calls them! See the command_rec */
-/* declaration near the bottom of this file.) Note that these may be */
-/* called for situations that don't relate primarily to our function - in */
-/* other words, the fixup handler shouldn't assume that the request has */
-/* to do with "example" stuff. */
-/* */
-/* With the exception of the content handler, all of our routines will be */
-/* called for each request, unless an earlier handler from another module */
-/* aborted the sequence. */
-/* */
-/* Handlers that are declared as "int" can return the following: */
-/* */
-/* OK Handler accepted the request and did its thing with it. */
-/* DECLINED Handler took no action. */
-/* HTTP_mumble Handler looked at request and found it wanting. */
-/* */
-/* What the server does after calling a module handler depends upon the */
-/* handler's return value. In all cases, if the handler returns */
-/* DECLINED, the server will continue to the next module with an handler */
-/* for the current phase. However, if the handler return a non-OK, */
-/* non-DECLINED status, the server aborts the request right there. If */
-/* the handler returns OK, the server's next action is phase-specific; */
-/* see the individual handler comments below for details. */
-/* */
-/*--------------------------------------------------------------------------*/
-/*
- * This function is called during server initialisation. Any information
- * that needs to be recorded must be in static cells, since there's no
- * configuration record.
- *
- * There is no return value.
- */
-
-/*
- * This function is called when an heavy-weight process (such as a child) is
- * being run down or destroyed. As with the child initialisation function,
- * any information that needs to be recorded must be in static cells, since
- * there's no configuration record.
- *
- * There is no return value.
- */
-
-/*
- * This function is called during server initialisation when an heavy-weight
- * process (such as a child) is being initialised. As with the
- * module initialisation function, any information that needs to be recorded
- * must be in static cells, since there's no configuration record.
- *
- * There is no return value.
- */
-
-/*
- * This function gets called to create a per-directory configuration
- * record. This will be called for the "default" server environment, and for
- * each directory for which the parser finds any of our directives applicable.
- * If a directory doesn't have any of our directives involved (i.e., they
- * aren't in the .htaccess file, or a <Location>, <Directory>, or related
- * block), this routine will *not* be called - the configuration for the
- * closest ancestor is used.
- *
- * The return value is a pointer to the created module-specific
- * structure.
- */
-static void *x_create_dir_config(apr_pool_t *p, char *dirspec)
-{
- x_cfg *cfg;
- char *dname = dirspec;
-
- /*
- * Allocate the space for our record from the pool supplied.
- */
- cfg = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
- /*
- * Now fill in the defaults. If there are any `parent' configuration
- * records, they'll get merged as part of a separate callback.
- */
- cfg->local = 0;
- cfg->congenital = 0;
- cfg->cmode = CONFIG_MODE_DIRECTORY;
- /*
- * Finally, add our trace to the callback list.
- */
- dname = (dname != NULL) ? dname : "";
- cfg->loc = apr_pstrcat(p, "DIR(", dname, ")", NULL);
- trace_add(NULL, NULL, cfg, "x_create_dir_config()");
- return (void *) cfg;
-}
-
-/*
- * This function gets called to merge two per-directory configuration
- * records. This is typically done to cope with things like .htaccess files
- * or <Location> directives for directories that are beneath one for which a
- * configuration record was already created. The routine has the
- * responsibility of creating a new record and merging the contents of the
- * other two into it appropriately. If the module doesn't declare a merge
- * routine, the record for the closest ancestor location (that has one) is
- * used exclusively.
- *
- * The routine MUST NOT modify any of its arguments!
- *
- * The return value is a pointer to the created module-specific structure
- * containing the merged values.
- */
-static void *x_merge_dir_config(apr_pool_t *p, void *parent_conf,
- void *newloc_conf)
-{
-
- x_cfg *merged_config = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
- x_cfg *pconf = (x_cfg *) parent_conf;
- x_cfg *nconf = (x_cfg *) newloc_conf;
- char *note;
-
- /*
- * Some things get copied directly from the more-specific record, rather
- * than getting merged.
- */
- merged_config->local = nconf->local;
- merged_config->loc = apr_pstrdup(p, nconf->loc);
- /*
- * Others, like the setting of the `congenital' flag, get ORed in. The
- * setting of that particular flag, for instance, is TRUE if it was ever
- * true anywhere in the upstream configuration.
- */
- merged_config->congenital = (pconf->congenital | pconf->local);
- /*
- * If we're merging records for two different types of environment (server
- * and directory), mark the new record appropriately. Otherwise, inherit
- * the current value.
- */
- merged_config->cmode =
- (pconf->cmode == nconf->cmode) ? pconf->cmode : CONFIG_MODE_COMBO;
- /*
- * Now just record our being called in the trace list. Include the
- * locations we were asked to merge.
- */
- note = apr_pstrcat(p, "x_merge_dir_config(\"", pconf->loc, "\",\"",
- nconf->loc, "\")", NULL);
- trace_add(NULL, NULL, merged_config, note);
- return (void *) merged_config;
-}
-
-/*
- * This function gets called to create a per-server configuration
- * record. It will always be called for the "default" server.
- *
- * The return value is a pointer to the created module-specific
- * structure.
- */
-static void *x_create_server_config(apr_pool_t *p, server_rec *s)
-{
-
- x_cfg *cfg;
- char *sname = s->server_hostname;
-
- /*
- * As with the x_create_dir_config() reoutine, we allocate and fill
- * in an empty record.
- */
- cfg = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
- cfg->local = 0;
- cfg->congenital = 0;
- cfg->cmode = CONFIG_MODE_SERVER;
- /*
- * Note that we were called in the trace list.
- */
- sname = (sname != NULL) ? sname : "";
- cfg->loc = apr_pstrcat(p, "SVR(", sname, ")", NULL);
- trace_add(s, NULL, cfg, "x_create_server_config()");
- return (void *) cfg;
-}
-
-/*
- * This function gets called to merge two per-server configuration
- * records. This is typically done to cope with things like virtual hosts and
- * the default server configuration The routine has the responsibility of
- * creating a new record and merging the contents of the other two into it
- * appropriately. If the module doesn't declare a merge routine, the more
- * specific existing record is used exclusively.
- *
- * The routine MUST NOT modify any of its arguments!
- *
- * The return value is a pointer to the created module-specific structure
- * containing the merged values.
- */
-static void *x_merge_server_config(apr_pool_t *p, void *server1_conf,
- void *server2_conf)
-{
-
- x_cfg *merged_config = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
- x_cfg *s1conf = (x_cfg *) server1_conf;
- x_cfg *s2conf = (x_cfg *) server2_conf;
- char *note;
-
- /*
- * Our inheritance rules are our own, and part of our module's semantics.
- * Basically, just note whence we came.
- */
- merged_config->cmode =
- (s1conf->cmode == s2conf->cmode) ? s1conf->cmode : CONFIG_MODE_COMBO;
- merged_config->local = s2conf->local;
- merged_config->congenital = (s1conf->congenital | s1conf->local);
- merged_config->loc = apr_pstrdup(p, s2conf->loc);
- /*
- * Trace our call, including what we were asked to merge.
- */
- note = apr_pstrcat(p, "x_merge_server_config(\"", s1conf->loc, "\",\"",
- s2conf->loc, "\")", NULL);
- trace_add(NULL, NULL, merged_config, note);
- return (void *) merged_config;
-}
-
-/*
- * This routine is called before the server processes the configuration
- * files. There is no return value.
- */
-static int x_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- /*
- * Log the call and exit.
- */
- trace_add(NULL, NULL, NULL, "x_pre_config()");
-
- return OK;
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera. It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_post_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- /*
- * Log the call and exit.
- */
- trace_add(NULL, NULL, NULL, "x_post_config()");
- return OK;
-}
-
-/*
- * This routine is called to perform any module-specific log file
- * openings. It is invoked just before the post_config phase
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_open_logs(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- /*
- * Log the call and exit.
- */
- trace_add(s, NULL, NULL, "x_open_logs()");
- return OK;
-}
-
-/*
- * All our process-death routine does is add its trace to the log.
- */
-static apr_status_t x_child_exit(void *data)
-{
- char *note;
- server_rec *s = data;
- char *sname = s->server_hostname;
-
- /*
- * The arbitrary text we add to our trace entry indicates for which server
- * we're being called.
- */
- sname = (sname != NULL) ? sname : "";
- note = apr_pstrcat(s->process->pool, "x_child_exit(", sname, ")", NULL);
- trace_add(s, NULL, NULL, note);
- return APR_SUCCESS;
-}
-
-/*
- * All our process initialiser does is add its trace to the log.
- */
-static void x_child_init(apr_pool_t *p, server_rec *s)
-{
- char *note;
- char *sname = s->server_hostname;
-
- /*
- * Set up any module cells that ought to be initialised.
- */
- setup_module_cells();
- /*
- * The arbitrary text we add to our trace entry indicates for which server
- * we're being called.
- */
- sname = (sname != NULL) ? sname : "";
- note = apr_pstrcat(p, "x_child_init(", sname, ")", NULL);
- trace_add(s, NULL, NULL, note);
-
- apr_pool_cleanup_register(p, s, x_child_exit, x_child_exit);
-}
-
-/*
- * XXX: This routine is called XXX
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-#if 0
-static const char *x_http_method(const request_rec *r)
-{
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call and exit.
- */
- trace_add(r->server, NULL, cfg, "x_http_method()");
- return "foo";
-}
-
-/*
- * XXX: This routine is called XXX
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static apr_port_t x_default_port(const request_rec *r)
-{
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call and exit.
- */
- trace_add(r->server, NULL, cfg, "x_default_port()");
- return 80;
-}
-#endif /*0*/
-
-/*
- * XXX: This routine is called XXX
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static void x_insert_filter(request_rec *r)
-{
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call and exit.
- */
- trace_add(r->server, NULL, cfg, "x_insert_filter()");
-}
-
-/*
- * XXX: This routine is called XXX
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_quick_handler(request_rec *r, int lookup_uri)
-{
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call and exit.
- */
- trace_add(r->server, NULL, cfg, "x_quick_handler()");
- return DECLINED;
-}
-
-/*
- * This routine is called just after the server accepts the connection,
- * but before it is handed off to a protocol module to be served. The point
- * of this hook is to allow modules an opportunity to modify the connection
- * as soon as possible. The core server uses this phase to setup the
- * connection record based on the type of connection that is being used.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_pre_connection(conn_rec *c, void *csd)
-{
- x_cfg *cfg;
-
- cfg = our_cconfig(c);
-#if 0
- /*
- * Log the call and exit.
- */
- trace_add(r->server, NULL, cfg, "x_pre_connection()");
-#endif
- return OK;
-}
-
-/* This routine is used to actually process the connection that was received.
- * Only protocol modules should implement this hook, as it gives them an
- * opportunity to replace the standard HTTP processing with processing for
- * some other protocol. Both echo and POP3 modules are available as
- * examples.
- *
- * The return VALUE is OK, DECLINED, or HTTP_mumble. If we return OK, no
- * further modules are called for this phase.
- */
-static int x_process_connection(conn_rec *c)
-{
- return DECLINED;
-}
-
-/*
- * This routine is called after the request has been read but before any other
- * phases have been processed. This allows us to make decisions based upon
- * the input header fields.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, no
- * further modules are called for this phase.
- */
-static int x_post_read_request(request_rec *r)
-{
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * We don't actually *do* anything here, except note the fact that we were
- * called.
- */
- trace_add(r->server, r, cfg, "x_post_read_request()");
- return DECLINED;
-}
-
-/*
- * This routine gives our module an opportunity to translate the URI into an
- * actual filename. If we don't do anything special, the server's default
- * rules (Alias directives and the like) will continue to be followed.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, no
- * further modules are called for this phase.
- */
-static int x_translate_handler(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * We don't actually *do* anything here, except note the fact that we were
- * called.
- */
- trace_add(r->server, r, cfg, "x_translate_handler()");
- return DECLINED;
-}
-
-/*
- * This routine maps r->filename to a physical file on disk. Useful for
- * overriding default core behavior, including skipping mapping for
- * requests that are not file based.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, no
- * further modules are called for this phase.
- */
-static int x_map_to_storage_handler(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * We don't actually *do* anything here, except note the fact that we were
- * called.
- */
- trace_add(r->server, r, cfg, "x_map_to_storage_handler()");
- return DECLINED;
-}
-
-/*
- * this routine gives our module another chance to examine the request
- * headers and to take special action. This is the first phase whose
- * hooks' configuration directives can appear inside the <Directory>
- * and similar sections, because at this stage the URI has been mapped
- * to the filename. For example this phase can be used to block evil
- * clients, while little resources were wasted on these.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK,
- * the server will still call any remaining modules with an handler
- * for this phase.
- */
-static int x_header_parser_handler(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * We don't actually *do* anything here, except note the fact that we were
- * called.
- */
- trace_add(r->server, r, cfg, "header_parser_handler()");
- return DECLINED;
-}
-
-
-/*
- * This routine is called to check the authentication information sent with
- * the request (such as looking up the user in a database and verifying that
- * the [encrypted] password sent matches the one in the database).
- *
- * The return value is OK, DECLINED, or some HTTP_mumble error (typically
- * HTTP_UNAUTHORIZED). If we return OK, no other modules are given a chance
- * at the request during this phase.
- */
-static int x_check_user_id(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Don't do anything except log the call.
- */
- trace_add(r->server, r, cfg, "x_check_user_id()");
- return DECLINED;
-}
-
-/*
- * This routine is called to check to see if the resource being requested
- * requires authorisation.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, no
- * other modules are called during this phase.
- *
- * If *all* modules return DECLINED, the request is aborted with a server
- * error.
- */
-static int x_auth_checker(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call and return OK, or access will be denied (even though we
- * didn't actually do anything).
- */
- trace_add(r->server, r, cfg, "x_auth_checker()");
- return DECLINED;
-}
-
-/*
- * This routine is called to check for any module-specific restrictions placed
- * upon the requested resource. (See the mod_access module for an example.)
- *
- * The return value is OK, DECLINED, or HTTP_mumble. All modules with an
- * handler for this phase are called regardless of whether their predecessors
- * return OK or DECLINED. The first one to return any other status, however,
- * will abort the sequence (and the request) as usual.
- */
-static int x_access_checker(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- trace_add(r->server, r, cfg, "x_access_checker()");
- return DECLINED;
-}
-
-/*
- * This routine is called to determine and/or set the various document type
- * information bits, like Content-type (via r->content_type), language, et
- * cetera.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, no
- * further modules are given a chance at the request for this phase.
- */
-static int x_type_checker(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call, but don't do anything else - and report truthfully that
- * we didn't do anything.
- */
- trace_add(r->server, r, cfg, "x_type_checker()");
- return DECLINED;
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera. It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_fixer_upper(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- /*
- * Log the call and exit.
- */
- trace_add(r->server, r, cfg, "x_fixer_upper()");
- return OK;
-}
-
-/*
- * This routine is called to perform any module-specific logging activities
- * over and above the normal server things.
- *
- * The return value is OK, DECLINED, or HTTP_mumble. If we return OK, any
- * remaining modules with an handler for this phase will still be called.
- */
-static int x_logger(request_rec *r)
-{
-
- x_cfg *cfg;
-
- cfg = our_dconfig(r);
- trace_add(r->server, r, cfg, "x_logger()");
- return DECLINED;
-}
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* Which functions are responsible for which hooks in the server. */
-/* */
-/*--------------------------------------------------------------------------*/
-/*
- * Each function our module provides to handle a particular hook is
- * specified here. The functions are registered using
- * ap_hook_foo(name, predecessors, successors, position)
- * where foo is the name of the hook.
- *
- * The args are as follows:
- * name -> the name of the function to call.
- * predecessors -> a list of modules whose calls to this hook must be
- * invoked before this module.
- * successors -> a list of modules whose calls to this hook must be
- * invoked after this module.
- * position -> The relative position of this module. One of
- * APR_HOOK_FIRST, APR_HOOK_MIDDLE, or APR_HOOK_LAST.
- * Most modules will use APR_HOOK_MIDDLE. If multiple
- * modules use the same relative position, Apache will
- * determine which to call first.
- * If your module relies on another module to run first,
- * or another module running after yours, use the
- * predecessors and/or successors.
- *
- * The number in brackets indicates the order in which the routine is called
- * during request processing. Note that not all routines are necessarily
- * called (such as if a resource doesn't have access restrictions).
- * The actual delivery of content to the browser [9] is not handled by
- * a hook; see the handler declarations below.
- */
-static void x_register_hooks(apr_pool_t *p)
-{
- ap_hook_pre_config(x_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(x_post_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_open_logs(x_open_logs, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_child_init(x_child_init, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_handler(x_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_quick_handler(x_quick_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_pre_connection(x_pre_connection, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_process_connection(x_process_connection, NULL, NULL, APR_HOOK_MIDDLE);
- /* [1] post read_request handling */
- ap_hook_post_read_request(x_post_read_request, NULL, NULL,
- APR_HOOK_MIDDLE);
- ap_hook_log_transaction(x_logger, NULL, NULL, APR_HOOK_MIDDLE);
-#if 0
- ap_hook_http_method(x_http_method, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_default_port(x_default_port, NULL, NULL, APR_HOOK_MIDDLE);
-#endif
- ap_hook_translate_name(x_translate_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_map_to_storage(x_map_to_storage_handler, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_header_parser(x_header_parser_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_check_user_id(x_check_user_id, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_fixups(x_fixer_upper, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_type_checker(x_type_checker, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_access_checker(x_access_checker, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_auth_checker(x_auth_checker, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_insert_filter(x_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-/*--------------------------------------------------------------------------*/
-/* */
-/* All of the routines have been declared now. Here's the list of */
-/* directives specific to our module, and information about where they */
-/* may appear and how the command parser should pass them to us for */
-/* processing. Note that care must be taken to ensure that there are NO */
-/* collisions of directive names between modules. */
-/* */
-/*--------------------------------------------------------------------------*/
-/*
- * List of directives specific to our module.
- */
-static const command_rec x_cmds[] =
-{
- AP_INIT_NO_ARGS(
- "Example", /* directive name */
- cmd_example, /* config action routine */
- NULL, /* argument to include in call */
- OR_OPTIONS, /* where available */
- "Example directive - no arguments" /* directive description */
- ),
- {NULL}
-};
-/*--------------------------------------------------------------------------*/
-/* */
-/* Finally, the list of callback routines and data structures that provide */
-/* the static hooks into our module from the other parts of the server. */
-/* */
-/*--------------------------------------------------------------------------*/
-/*
- * Module definition for configuration. If a particular callback is not
- * needed, replace its routine name below with the word NULL.
- */
-module AP_MODULE_DECLARE_DATA example_module =
-{
- STANDARD20_MODULE_STUFF,
- x_create_dir_config, /* per-directory config creator */
- x_merge_dir_config, /* dir config merger */
- x_create_server_config, /* server config creator */
- x_merge_server_config, /* server config merger */
- x_cmds, /* command table */
- x_register_hooks, /* set up other request processing hooks */
-};
diff --git a/modules/experimental/mod_mem_cache.c b/modules/experimental/mod_mem_cache.c
deleted file mode 100644
index 13936026ac..0000000000
--- a/modules/experimental/mod_mem_cache.c
+++ /dev/null
@@ -1,1150 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-#include "mod_cache.h"
-#include "cache_pqueue.h"
-#include "cache_cache.h"
-#include "ap_mpm.h"
-#include "apr_thread_mutex.h"
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if !APR_HAS_THREADS
-#error This module does not currently compile unless you have a thread-capable APR. Sorry!
-#endif
-
-module AP_MODULE_DECLARE_DATA mem_cache_module;
-
-typedef enum {
- CACHE_TYPE_FILE = 1,
- CACHE_TYPE_HEAP,
- CACHE_TYPE_MMAP
-} cache_type_e;
-
-typedef struct {
- char* hdr;
- char* val;
-} cache_header_tbl_t;
-
-typedef struct mem_cache_object {
- cache_type_e type;
- apr_ssize_t num_header_out;
- apr_ssize_t num_err_header_out;
- apr_ssize_t num_subprocess_env;
- apr_ssize_t num_notes;
- apr_ssize_t num_req_hdrs;
- cache_header_tbl_t *header_out;
- cache_header_tbl_t *err_header_out;
- cache_header_tbl_t *subprocess_env;
- cache_header_tbl_t *notes;
- cache_header_tbl_t *req_hdrs; /* for Vary negotiation */
- apr_size_t m_len;
- void *m;
- apr_os_file_t fd;
- apr_int32_t flags; /* File open flags */
- long priority; /**< the priority of this entry */
- long total_refs; /**< total number of references this entry has had */
-
- apr_uint32_t pos; /**< the position of this entry in the cache */
-
-} mem_cache_object_t;
-
-typedef struct {
- apr_thread_mutex_t *lock;
- cache_cache_t *cache_cache;
-
- /* Fields set by config directives */
- apr_size_t min_cache_object_size; /* in bytes */
- apr_size_t max_cache_object_size; /* in bytes */
- apr_size_t max_cache_size; /* in bytes */
- apr_size_t max_object_cnt;
- cache_pqueue_set_priority cache_remove_algorithm;
-
- /* maximum amount of data to buffer on a streamed response where
- * we haven't yet seen EOS */
- apr_off_t max_streaming_buffer_size;
-} mem_cache_conf;
-static mem_cache_conf *sconf;
-
-#define DEFAULT_MAX_CACHE_SIZE 100*1024
-#define DEFAULT_MIN_CACHE_OBJECT_SIZE 0
-#define DEFAULT_MAX_CACHE_OBJECT_SIZE 10000
-#define DEFAULT_MAX_OBJECT_CNT 1009
-#define DEFAULT_MAX_STREAMING_BUFFER_SIZE 100000
-#define CACHEFILE_LEN 20
-
-/* Forward declarations */
-static int remove_entity(cache_handle_t *h);
-static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info *i);
-static apr_status_t store_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b);
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r);
-static apr_status_t recall_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
-
-static void cleanup_cache_object(cache_object_t *obj);
-
-static long memcache_get_priority(void*a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
-
- return mobj->priority;
-}
-
-static void memcache_inc_frequency(void*a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
-
- mobj->total_refs++;
- mobj->priority = 0;
-}
-
-static void memcache_set_pos(void *a, apr_ssize_t pos)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
-
- apr_atomic_set32(&mobj->pos, pos);
-}
-static apr_ssize_t memcache_get_pos(void *a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
-
- return apr_atomic_read32(&mobj->pos);
-}
-
-static apr_size_t memcache_cache_get_size(void*a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
- return mobj->m_len;
-}
-/** callback to get the key of a item */
-static const char* memcache_cache_get_key(void*a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- return obj->key;
-}
-/**
- * callback to free an entry
- * There is way too much magic in this code. Right now, this callback
- * is only called out of cache_insert() which is called under protection
- * of the sconf->lock, which means that we do not (and should not)
- * attempt to obtain the lock recursively.
- */
-static void memcache_cache_free(void*a)
-{
- cache_object_t *obj = (cache_object_t *)a;
-
- /* Cleanup the cache object. Object should be removed from the cache
- * now. Increment the refcount before setting cleanup to avoid a race
- * condition. A similar pattern is used in remove_url()
- */
- apr_atomic_inc32(&obj->refcount);
-
- obj->cleanup = 1;
-
- if (!apr_atomic_dec32(&obj->refcount)) {
- cleanup_cache_object(obj);
- }
-}
-/*
- * functions return a 'negative' score since priority queues
- * dequeue the object with the highest value first
- */
-static long memcache_lru_algorithm(long queue_clock, void *a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
- if (mobj->priority == 0)
- mobj->priority = queue_clock - mobj->total_refs;
-
- /*
- * a 'proper' LRU function would just be
- * mobj->priority = mobj->total_refs;
- */
- return mobj->priority;
-}
-
-static long memcache_gdsf_algorithm(long queue_clock, void *a)
-{
- cache_object_t *obj = (cache_object_t *)a;
- mem_cache_object_t *mobj = obj->vobj;
-
- if (mobj->priority == 0)
- mobj->priority = queue_clock -
- (long)(mobj->total_refs*1000 / mobj->m_len);
-
- return mobj->priority;
-}
-
-static void cleanup_cache_object(cache_object_t *obj)
-{
- mem_cache_object_t *mobj = obj->vobj;
-
- /* TODO:
- * We desperately need a more efficient way of allocating objects. We're
- * making way too many malloc calls to create a fully populated
- * cache object...
- */
-
- /* Cleanup the cache_object_t */
- if (obj->key) {
- free(obj->key);
- }
- if (obj->info.content_type) {
- free(obj->info.content_type);
- }
- if (obj->info.etag) {
- free(obj->info.etag);
- }
- if (obj->info.lastmods) {
- free(obj->info.lastmods);
- }
- if (obj->info.filename) {
- free(obj->info.filename);
- }
-
- free(obj);
-
- /* Cleanup the mem_cache_object_t */
- if (mobj) {
- if (mobj->type == CACHE_TYPE_HEAP && mobj->m) {
- free(mobj->m);
- }
- if (mobj->type == CACHE_TYPE_FILE && mobj->fd) {
-#ifdef WIN32
- CloseHandle(mobj->fd);
-#else
- close(mobj->fd);
-#endif
- }
- if (mobj->header_out) {
- if (mobj->header_out[0].hdr)
- free(mobj->header_out[0].hdr);
- free(mobj->header_out);
- }
- if (mobj->err_header_out) {
- if (mobj->err_header_out[0].hdr)
- free(mobj->err_header_out[0].hdr);
- free(mobj->err_header_out);
- }
- if (mobj->subprocess_env) {
- if (mobj->subprocess_env[0].hdr)
- free(mobj->subprocess_env[0].hdr);
- free(mobj->subprocess_env);
- }
- if (mobj->notes) {
- if (mobj->notes[0].hdr)
- free(mobj->notes[0].hdr);
- free(mobj->notes);
- }
- if (mobj->req_hdrs) {
- if (mobj->req_hdrs[0].hdr)
- free(mobj->req_hdrs[0].hdr);
- free(mobj->req_hdrs);
- }
- free(mobj);
- }
-}
-static apr_status_t decrement_refcount(void *arg)
-{
- cache_object_t *obj = (cache_object_t *) arg;
-
- /* If obj->complete is not set, the cache update failed and the
- * object needs to be removed from the cache then cleaned up.
- */
- if (!obj->complete) {
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
- /* Remember, objects marked for cleanup are, by design, already
- * removed from the cache. remove_url() could have already
- * removed the object from the cache (and set obj->cleanup)
- */
- if (!obj->cleanup) {
- cache_remove(sconf->cache_cache, obj);
- obj->cleanup = 1;
- }
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
- }
-
- /* Cleanup the cache object */
- if (!apr_atomic_dec32(&obj->refcount)) {
- if (obj->cleanup) {
- cleanup_cache_object(obj);
- }
- }
- return APR_SUCCESS;
-}
-static apr_status_t cleanup_cache_mem(void *sconfv)
-{
- cache_object_t *obj;
- mem_cache_conf *co = (mem_cache_conf*) sconfv;
-
- if (!co) {
- return APR_SUCCESS;
- }
- if (!co->cache_cache) {
- return APR_SUCCESS;
- }
-
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
- obj = cache_pop(co->cache_cache);
- while (obj) {
- /* Iterate over the cache and clean up each entry */
- /* Free the object if the recount == 0 */
- apr_atomic_inc32(&obj->refcount);
- obj->cleanup = 1;
- if (!apr_atomic_dec32(&obj->refcount)) {
- cleanup_cache_object(obj);
- }
- obj = cache_pop(co->cache_cache);
- }
-
- /* Cache is empty, free the cache table */
- cache_free(co->cache_cache);
-
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
- return APR_SUCCESS;
-}
-/*
- * TODO: enable directives to be overridden in various containers
- */
-static void *create_cache_config(apr_pool_t *p, server_rec *s)
-{
- sconf = apr_pcalloc(p, sizeof(mem_cache_conf));
-
- sconf->min_cache_object_size = DEFAULT_MIN_CACHE_OBJECT_SIZE;
- sconf->max_cache_object_size = DEFAULT_MAX_CACHE_OBJECT_SIZE;
- /* Number of objects in the cache */
- sconf->max_object_cnt = DEFAULT_MAX_OBJECT_CNT;
- /* Size of the cache in bytes */
- sconf->max_cache_size = DEFAULT_MAX_CACHE_SIZE;
- sconf->cache_cache = NULL;
- sconf->cache_remove_algorithm = memcache_gdsf_algorithm;
- sconf->max_streaming_buffer_size = DEFAULT_MAX_STREAMING_BUFFER_SIZE;
-
- return sconf;
-}
-
-static int create_entity(cache_handle_t *h, request_rec *r,
- const char *type,
- const char *key,
- apr_off_t len)
-{
- cache_object_t *obj, *tmp_obj;
- mem_cache_object_t *mobj;
- cache_type_e type_e;
- apr_size_t key_len;
-
- if (!strcasecmp(type, "mem")) {
- type_e = CACHE_TYPE_HEAP;
- }
- else if (!strcasecmp(type, "fd")) {
- type_e = CACHE_TYPE_FILE;
- }
- else {
- return DECLINED;
- }
-
- if (len == -1) {
- /* Caching a streaming response. Assume the response is
- * less than or equal to max_streaming_buffer_size. We will
- * correct all the cache size counters in store_body once
- * we know exactly know how much we are caching.
- */
- len = sconf->max_streaming_buffer_size;
- }
-
- /* Note: cache_insert() will automatically garbage collect
- * objects from the cache if the max_cache_size threshold is
- * exceeded. This means mod_mem_cache does not need to implement
- * max_cache_size checks.
- */
- if (len < sconf->min_cache_object_size ||
- len > sconf->max_cache_object_size) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "mem_cache: URL %s failed the size check and will not be cached.",
- key);
- return DECLINED;
- }
-
- if (type_e == CACHE_TYPE_FILE) {
- /* CACHE_TYPE_FILE is only valid for local content handled by the
- * default handler. Need a better way to check if the file is
- * local or not.
- */
- if (!r->filename) {
- return DECLINED;
- }
- }
-
- /* Allocate and initialize cache_object_t */
- obj = calloc(1, sizeof(*obj));
- if (!obj) {
- return DECLINED;
- }
- key_len = strlen(key) + 1;
- obj->key = malloc(key_len);
- if (!obj->key) {
- cleanup_cache_object(obj);
- return DECLINED;
- }
- memcpy(obj->key, key, key_len);
- /* Safe cast: We tested < sconf->max_cache_object_size above */
- obj->info.len = (apr_size_t)len;
-
- /* Allocate and init mem_cache_object_t */
- mobj = calloc(1, sizeof(*mobj));
- if (!mobj) {
- cleanup_cache_object(obj);
- return DECLINED;
- }
-
- /* Finish initing the cache object */
- apr_atomic_set32(&obj->refcount, 1);
- mobj->total_refs = 1;
- obj->complete = 0;
- obj->cleanup = 0;
- obj->vobj = mobj;
- /* Safe cast: We tested < sconf->max_cache_object_size above */
- mobj->m_len = (apr_size_t)len;
- mobj->type = type_e;
-
- /* Place the cache_object_t into the hash table.
- * Note: Perhaps we should wait to put the object in the
- * hash table when the object is complete? I add the object here to
- * avoid multiple threads attempting to cache the same content only
- * to discover at the very end that only one of them will suceed.
- * Furthermore, adding the cache object to the table at the end could
- * open up a subtle but easy to exploit DoS hole: someone could request
- * a very large file with multiple requests. Better to detect this here
- * rather than after the cache object has been completely built and
- * initialized...
- * XXX Need a way to insert into the cache w/o such coarse grained locking
- */
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
- tmp_obj = (cache_object_t *) cache_find(sconf->cache_cache, key);
-
- if (!tmp_obj) {
- cache_insert(sconf->cache_cache, obj);
- }
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
-
- if (tmp_obj) {
- /* This thread collided with another thread loading the same object
- * into the cache at the same time. Defer to the other thread which
- * is further along.
- */
- cleanup_cache_object(obj);
- return DECLINED;
- }
-
- apr_pool_cleanup_register(r->pool, obj, decrement_refcount,
- apr_pool_cleanup_null);
-
- /* Populate the cache handle */
- h->cache_obj = obj;
- h->recall_body = &recall_body;
- h->recall_headers = &recall_headers;
- h->store_body = &store_body;
- h->store_headers = &store_headers;
- h->remove_entity = &remove_entity;
-
- return OK;
-}
-
-static int open_entity(cache_handle_t *h, request_rec *r, const char *type, const char *key)
-{
- cache_object_t *obj;
-
- /* Look up entity keyed to 'url' */
- if (strcasecmp(type, "mem") && strcasecmp(type, "fd")) {
- return DECLINED;
- }
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
- obj = (cache_object_t *) cache_find(sconf->cache_cache, key);
- if (obj) {
- if (obj->complete) {
- request_rec *rmain=r, *rtmp;
- apr_atomic_inc32(&obj->refcount);
- /* cache is worried about overall counts, not 'open' ones */
- cache_update(sconf->cache_cache, obj);
-
- /* If this is a subrequest, register the cleanup against
- * the main request. This will prevent the cache object
- * from being cleaned up from under the request after the
- * subrequest is destroyed.
- */
- rtmp = r;
- while (rtmp) {
- rmain = rtmp;
- rtmp = rmain->main;
- }
- apr_pool_cleanup_register(rmain->pool, obj, decrement_refcount,
- apr_pool_cleanup_null);
- }
- else {
- obj = NULL;
- }
- }
-
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
-
- if (!obj) {
- return DECLINED;
- }
-
- /* Initialize the cache_handle */
- h->recall_body = &recall_body;
- h->recall_headers = &recall_headers;
- h->store_body = &store_body;
- h->store_headers = &store_headers;
- h->remove_entity = &remove_entity;
- h->cache_obj = obj;
- h->req_hdrs = NULL; /* Pick these up in recall_headers() */
- return OK;
-}
-
-static int remove_entity(cache_handle_t *h)
-{
- cache_object_t *obj = h->cache_obj;
-
- /* Remove the cache object from the cache under protection */
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
- /* If the object is not already marked for cleanup, remove
- * it from the cache and mark it for cleanup. Remember,
- * an object marked for cleanup is by design not in the
- * hash table.
- */
- if (!obj->cleanup) {
- cache_remove(sconf->cache_cache, obj);
- obj->cleanup = 1;
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, NULL, "gcing a cache entry");
- }
-
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
-
- return OK;
-}
-static apr_status_t serialize_table(cache_header_tbl_t **obj,
- apr_ssize_t *nelts,
- apr_table_t *table)
-{
- const apr_array_header_t *elts_arr = apr_table_elts(table);
- apr_table_entry_t *elts = (apr_table_entry_t *) elts_arr->elts;
- apr_ssize_t i;
- apr_size_t len = 0;
- apr_size_t idx = 0;
- char *buf;
-
- *nelts = elts_arr->nelts;
- if (*nelts == 0 ) {
- *obj=NULL;
- return APR_SUCCESS;
- }
- *obj = malloc(sizeof(cache_header_tbl_t) * elts_arr->nelts);
- if (NULL == *obj) {
- return APR_ENOMEM;
- }
- for (i = 0; i < elts_arr->nelts; ++i) {
- len += strlen(elts[i].key);
- len += strlen(elts[i].val);
- len += 2; /* Extra space for NULL string terminator for key and val */
- }
-
- /* Transfer the headers into a contiguous memory block */
- buf = malloc(len);
- if (!buf) {
- *obj = NULL;
- return APR_ENOMEM;
- }
-
- for (i = 0; i < *nelts; ++i) {
- (*obj)[i].hdr = &buf[idx];
- len = strlen(elts[i].key) + 1; /* Include NULL terminator */
- memcpy(&buf[idx], elts[i].key, len);
- idx+=len;
-
- (*obj)[i].val = &buf[idx];
- len = strlen(elts[i].val) + 1;
- memcpy(&buf[idx], elts[i].val, len);
- idx+=len;
- }
- return APR_SUCCESS;
-}
-static int unserialize_table( cache_header_tbl_t *ctbl,
- int num_headers,
- apr_table_t *t )
-{
- int i;
-
- for (i = 0; i < num_headers; ++i) {
- apr_table_addn(t, ctbl[i].hdr, ctbl[i].val);
- }
-
- return APR_SUCCESS;
-}
-/* Define request processing hook handlers */
-static int remove_url(const char *type, const char *key)
-{
- cache_object_t *obj;
-
- if (strcasecmp(type, "mem") && strcasecmp(type, "fd")) {
- return DECLINED;
- }
- /* Order of the operations is important to avoid race conditions.
- * First, remove the object from the cache. Remember, all additions
- * deletions from the cache are protected by sconf->lock.
- * Increment the ref count on the object to indicate our thread
- * is accessing the object. Then set the cleanup flag on the
- * object. Remember, the cleanup flag is NEVER set on an
- * object in the hash table. If an object has the cleanup
- * flag set, it is guaranteed to NOT be in the hash table.
- */
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
-
- obj = cache_find(sconf->cache_cache, key);
- if (obj) {
- mem_cache_object_t *mobj;
- cache_remove(sconf->cache_cache, obj);
- mobj = (mem_cache_object_t *) obj->vobj;
-
- /* Refcount increment in this case MUST be made under
- * protection of the lock
- */
- apr_atomic_inc32(&obj->refcount);
- if (obj) {
- obj->cleanup = 1;
- }
- }
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
- if (obj) {
- if (!apr_atomic_dec32(&obj->refcount)) {
- cleanup_cache_object(obj);
- }
- }
- return OK;
-}
-
-static apr_status_t recall_headers(cache_handle_t *h, request_rec *r)
-{
- int rc;
- mem_cache_object_t *mobj = (mem_cache_object_t*) h->cache_obj->vobj;
-
- h->req_hdrs = apr_table_make(r->pool, mobj->num_req_hdrs);
- r->headers_out = apr_table_make(r->pool, mobj->num_header_out);
- r->err_headers_out = apr_table_make(r->pool, mobj->num_err_header_out);
- r->subprocess_env = apr_table_make(r->pool, mobj->num_subprocess_env);
- r->notes = apr_table_make(r->pool, mobj->num_notes);
-
- rc = unserialize_table(mobj->req_hdrs,
- mobj->num_req_hdrs,
- h->req_hdrs);
- rc = unserialize_table( mobj->header_out,
- mobj->num_header_out,
- r->headers_out);
- rc = unserialize_table( mobj->err_header_out,
- mobj->num_err_header_out,
- r->err_headers_out);
- rc = unserialize_table( mobj->subprocess_env,
- mobj->num_subprocess_env,
- r->subprocess_env);
- rc = unserialize_table( mobj->notes,
- mobj->num_notes,
- r->notes);
-
- /* Content-Type: header may not be set if content is local since
- * CACHE_IN runs before header filters....
- */
- ap_set_content_type(r, apr_pstrdup(r->pool, h->cache_obj->info.content_type));
-
- return rc;
-}
-
-static apr_status_t recall_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb)
-{
- apr_bucket *b;
- mem_cache_object_t *mobj = (mem_cache_object_t*) h->cache_obj->vobj;
-
- if (mobj->type == CACHE_TYPE_FILE) {
- /* CACHE_TYPE_FILE */
- apr_file_t *file;
- apr_os_file_put(&file, &mobj->fd, mobj->flags, p);
- b = apr_bucket_file_create(file, 0, mobj->m_len, p, bb->bucket_alloc);
- }
- else {
- /* CACHE_TYPE_HEAP */
- b = apr_bucket_immortal_create(mobj->m, mobj->m_len, bb->bucket_alloc);
- }
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(bb->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- return APR_SUCCESS;
-}
-
-
-static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info *info)
-{
- cache_object_t *obj = h->cache_obj;
- mem_cache_object_t *mobj = (mem_cache_object_t*) obj->vobj;
- int rc;
-
- /*
- * The cache needs to keep track of the following information:
- * - Date, LastMod, Version, ReqTime, RespTime, ContentLength
- * - The original request headers (for Vary)
- * - The original response headers (for returning with a cached response)
- * - The body of the message
- */
- rc = serialize_table(&mobj->req_hdrs,
- &mobj->num_req_hdrs,
- r->headers_in);
- if (rc != APR_SUCCESS) {
- return rc;
- }
-
- /* Precompute how much storage we need to hold the headers */
- rc = serialize_table(&mobj->header_out,
- &mobj->num_header_out,
- ap_cache_cacheable_hdrs_out(r->pool, r->headers_out));
- if (rc != APR_SUCCESS) {
- return rc;
- }
- rc = serialize_table(&mobj->err_header_out,
- &mobj->num_err_header_out,
- ap_cache_cacheable_hdrs_out(r->pool, r->err_headers_out));
- if (rc != APR_SUCCESS) {
- return rc;
- }
- rc = serialize_table(&mobj->subprocess_env,
- &mobj->num_subprocess_env,
- r->subprocess_env );
- if (rc != APR_SUCCESS) {
- return rc;
- }
-
- rc = serialize_table(&mobj->notes, &mobj->num_notes, r->notes);
- if (rc != APR_SUCCESS) {
- return rc;
- }
-
- /* Init the info struct */
- if (info->date) {
- obj->info.date = info->date;
- }
- if (info->lastmod) {
- obj->info.lastmod = info->lastmod;
- }
- if (info->response_time) {
- obj->info.response_time = info->response_time;
- }
- if (info->request_time) {
- obj->info.request_time = info->request_time;
- }
- if (info->expire) {
- obj->info.expire = info->expire;
- }
- if (info->content_type) {
- apr_size_t len = strlen(info->content_type) + 1;
- obj->info.content_type = (char*) malloc(len);
- if (!obj->info.content_type) {
- return APR_ENOMEM;
- }
- memcpy(obj->info.content_type, info->content_type, len);
- }
- if (info->etag) {
- apr_size_t len = strlen(info->etag) + 1;
- obj->info.etag = (char*) malloc(len);
- if (!obj->info.etag) {
- return APR_ENOMEM;
- }
- memcpy(obj->info.etag, info->etag, len);
- }
- if (info->lastmods) {
- apr_size_t len = strlen(info->lastmods) + 1;
- obj->info.lastmods = (char*) malloc(len);
- if (!obj->info.lastmods) {
- return APR_ENOMEM;
- }
- memcpy(obj->info.lastmods, info->lastmods, len);
- }
- if ( info->filename) {
- apr_size_t len = strlen(info->filename) + 1;
- obj->info.filename = (char*) malloc(len);
- if (!obj->info.filename ) {
- return APR_ENOMEM;
- }
- memcpy(obj->info.filename, info->filename, len);
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t store_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b)
-{
- apr_status_t rv;
- cache_object_t *obj = h->cache_obj;
- mem_cache_object_t *mobj = (mem_cache_object_t*) obj->vobj;
- apr_read_type_e eblock = APR_BLOCK_READ;
- apr_bucket *e;
- char *cur;
- int eos = 0;
-
- if (mobj->type == CACHE_TYPE_FILE) {
- apr_file_t *file = NULL;
- int fd = 0;
- int other = 0;
-
- /* We can cache an open file descriptor if:
- * - the brigade contains one and only one file_bucket &&
- * - the brigade is complete &&
- * - the file_bucket is the last data bucket in the brigade
- */
- for (e = APR_BRIGADE_FIRST(b);
- e != APR_BRIGADE_SENTINEL(b);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- eos = 1;
- }
- else if (APR_BUCKET_IS_FILE(e)) {
- apr_bucket_file *a = e->data;
- fd++;
- file = a->fd;
- }
- else {
- other++;
- }
- }
- if (fd == 1 && !other && eos) {
- apr_file_t *tmpfile;
- const char *name;
- /* Open a new XTHREAD handle to the file */
- apr_file_name_get(&name, file);
- mobj->flags = ((APR_SENDFILE_ENABLED & apr_file_flags_get(file))
- | APR_READ | APR_BINARY | APR_XTHREAD | APR_FILE_NOCLEANUP);
- rv = apr_file_open(&tmpfile, name, mobj->flags,
- APR_OS_DEFAULT, r->pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- apr_file_inherit_unset(tmpfile);
- apr_os_file_get(&(mobj->fd), tmpfile);
-
- /* Open for business */
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "mem_cache: Cached file: %s with key: %s", name, obj->key);
- obj->complete = 1;
- return APR_SUCCESS;
- }
-
- /* Content not suitable for fd caching. Cache in-memory instead. */
- mobj->type = CACHE_TYPE_HEAP;
- }
-
- /*
- * FD cacheing is not enabled or the content was not
- * suitable for fd caching.
- */
- if (mobj->m == NULL) {
- mobj->m = malloc(mobj->m_len);
- if (mobj->m == NULL) {
- return APR_ENOMEM;
- }
- obj->count = 0;
- }
- cur = (char*) mobj->m + obj->count;
-
- /* Iterate accross the brigade and populate the cache storage */
- for (e = APR_BRIGADE_FIRST(b);
- e != APR_BRIGADE_SENTINEL(b);
- e = APR_BUCKET_NEXT(e))
- {
- const char *s;
- apr_size_t len;
-
- if (APR_BUCKET_IS_EOS(e)) {
- if (mobj->m_len > obj->count) {
- /* Caching a streamed response. Reallocate a buffer of the
- * correct size and copy the streamed response into that
- * buffer */
- char *buf = malloc(obj->count);
- if (!buf) {
- return APR_ENOMEM;
- }
- memcpy(buf, mobj->m, obj->count);
- free(mobj->m);
- mobj->m = buf;
-
- /* Now comes the crufty part... there is no way to tell the
- * cache that the size of the object has changed. We need
- * to remove the object, update the size and re-add the
- * object, all under protection of the lock.
- */
- if (sconf->lock) {
- apr_thread_mutex_lock(sconf->lock);
- }
- if (obj->cleanup) {
- /* If obj->cleanup is set, the object has been prematurly
- * ejected from the cache by the garbage collector. Add the
- * object back to the cache. If an object with the same key is
- * found in the cache, eject it in favor of the completed obj.
- */
- cache_object_t *tmp_obj =
- (cache_object_t *) cache_find(sconf->cache_cache, obj->key);
- if (tmp_obj) {
- cache_remove(sconf->cache_cache, tmp_obj);
- tmp_obj->cleanup = 1;
- if (!tmp_obj->refcount) {
- cleanup_cache_object(tmp_obj);
- }
- }
- obj->cleanup = 0;
- }
- else {
- cache_remove(sconf->cache_cache, obj);
- }
- mobj->m_len = obj->count;
- cache_insert(sconf->cache_cache, obj);
- if (sconf->lock) {
- apr_thread_mutex_unlock(sconf->lock);
- }
- }
- /* Open for business */
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "mem_cache: Cached url: %s", obj->key);
- obj->complete = 1;
- break;
- }
- rv = apr_bucket_read(e, &s, &len, eblock);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- if (len) {
- /* Check for buffer overflow */
- if ((obj->count + len) > mobj->m_len) {
- return APR_ENOMEM;
- }
- else {
- memcpy(cur, s, len);
- cur+=len;
- obj->count+=len;
- }
- }
- /* This should not fail, but if it does, we are in BIG trouble
- * cause we just stomped all over the heap.
- */
- AP_DEBUG_ASSERT(obj->count <= mobj->m_len);
- }
- return APR_SUCCESS;
-}
-/**
- * Configuration and start-up
- */
-static int mem_cache_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- int threaded_mpm;
-
- /* Sanity check the cache configuration */
- if (sconf->min_cache_object_size >= sconf->max_cache_object_size) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
- "MCacheMaxObjectSize must be greater than MCacheMinObjectSize");
- return DONE;
- }
- if (sconf->max_cache_object_size >= sconf->max_cache_size) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
- "MCacheSize must be greater than MCacheMaxObjectSize");
- return DONE;
- }
- if (sconf->max_streaming_buffer_size > sconf->max_cache_object_size) {
- /* Issue a notice only if something other than the default config
- * is being used */
- if (sconf->max_streaming_buffer_size != DEFAULT_MAX_STREAMING_BUFFER_SIZE &&
- sconf->max_cache_object_size != DEFAULT_MAX_CACHE_OBJECT_SIZE) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
- "MCacheMaxStreamingBuffer must be less than or equal to MCacheMaxObjectSize. "
- "Resetting MCacheMaxStreamingBuffer to MCacheMaxObjectSize.");
- }
- sconf->max_streaming_buffer_size = sconf->max_cache_object_size;
- }
- if (sconf->max_streaming_buffer_size < sconf->min_cache_object_size) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "MCacheMaxStreamingBuffer must be greater than or equal to MCacheMinObjectSize. "
- "Resetting MCacheMaxStreamingBuffer to MCacheMinObjectSize.");
- sconf->max_streaming_buffer_size = sconf->min_cache_object_size;
- }
- ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded_mpm);
- if (threaded_mpm) {
- apr_thread_mutex_create(&sconf->lock, APR_THREAD_MUTEX_DEFAULT, p);
- }
-
- sconf->cache_cache = cache_init(sconf->max_object_cnt,
- sconf->max_cache_size,
- memcache_get_priority,
- sconf->cache_remove_algorithm,
- memcache_get_pos,
- memcache_set_pos,
- memcache_inc_frequency,
- memcache_cache_get_size,
- memcache_cache_get_key,
- memcache_cache_free);
- apr_pool_cleanup_register(p, sconf, cleanup_cache_mem, apr_pool_cleanup_null);
-
- if (sconf->cache_cache)
- return OK;
-
- return -1;
-
-}
-
-static const char
-*set_max_cache_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- apr_size_t val;
-
- if (sscanf(arg, "%" APR_SIZE_T_FMT, &val) != 1) {
- return "MCacheSize argument must be an integer representing the max cache size in KBytes.";
- }
- sconf->max_cache_size = val*1024;
- return NULL;
-}
-static const char
-*set_min_cache_object_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- apr_size_t val;
-
- if (sscanf(arg, "%" APR_SIZE_T_FMT, &val) != 1) {
- return "MCacheMinObjectSize value must be an integer (bytes)";
- }
- sconf->min_cache_object_size = val;
- return NULL;
-}
-static const char
-*set_max_cache_object_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- apr_size_t val;
-
- if (sscanf(arg, "%" APR_SIZE_T_FMT, &val) != 1) {
- return "MCacheMaxObjectSize value must be an integer (bytes)";
- }
- sconf->max_cache_object_size = val;
- return NULL;
-}
-static const char
-*set_max_object_count(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
- apr_size_t val;
-
- if (sscanf(arg, "%" APR_SIZE_T_FMT, &val) != 1) {
- return "MCacheMaxObjectCount value must be an integer";
- }
- sconf->max_object_cnt = val;
- return NULL;
-}
-
-static const char
-*set_cache_removal_algorithm(cmd_parms *parms, void *name, const char *arg)
-{
- if (strcasecmp("LRU", arg)) {
- sconf->cache_remove_algorithm = memcache_lru_algorithm;
- }
- else {
- if (strcasecmp("GDSF", arg)) {
- sconf->cache_remove_algorithm = memcache_gdsf_algorithm;
- }
- else {
- return "currently implemented algorithms are LRU and GDSF";
- }
- }
- return NULL;
-}
-
-static const char *set_max_streaming_buffer(cmd_parms *parms, void *dummy,
- const char *arg)
-{
- char *err;
- if (apr_strtoff(&sconf->max_streaming_buffer_size, arg, &err, 10) || *err) {
- return "MCacheMaxStreamingBuffer value must be a number";
- }
-
- return NULL;
-}
-
-static const command_rec cache_cmds[] =
-{
- AP_INIT_TAKE1("MCacheSize", set_max_cache_size, NULL, RSRC_CONF,
- "The maximum amount of memory used by the cache in KBytes"),
- AP_INIT_TAKE1("MCacheMaxObjectCount", set_max_object_count, NULL, RSRC_CONF,
- "The maximum number of objects allowed to be placed in the cache"),
- AP_INIT_TAKE1("MCacheMinObjectSize", set_min_cache_object_size, NULL, RSRC_CONF,
- "The minimum size (in bytes) of an object to be placed in the cache"),
- AP_INIT_TAKE1("MCacheMaxObjectSize", set_max_cache_object_size, NULL, RSRC_CONF,
- "The maximum size (in bytes) of an object to be placed in the cache"),
- AP_INIT_TAKE1("MCacheRemovalAlgorithm", set_cache_removal_algorithm, NULL, RSRC_CONF,
- "The algorithm used to remove entries from the cache (default: GDSF)"),
- AP_INIT_TAKE1("MCacheMaxStreamingBuffer", set_max_streaming_buffer, NULL, RSRC_CONF,
- "Maximum number of bytes of content to buffer for a streamed response"),
- {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_post_config(mem_cache_post_config, NULL, NULL, APR_HOOK_MIDDLE);
- /* cache initializer */
- /* cache_hook_init(cache_mem_init, NULL, NULL, APR_HOOK_MIDDLE); */
- cache_hook_create_entity(create_entity, NULL, NULL, APR_HOOK_MIDDLE);
- cache_hook_open_entity(open_entity, NULL, NULL, APR_HOOK_MIDDLE);
- cache_hook_remove_url(remove_url, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA mem_cache_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- create_cache_config, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- cache_cmds, /* command apr_table_t */
- register_hooks
-};
diff --git a/modules/experimental/mod_mem_cache.dsp b/modules/experimental/mod_mem_cache.dsp
deleted file mode 100644
index 0cdb08f36e..0000000000
--- a/modules/experimental/mod_mem_cache.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_mem_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_mem_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_mem_cache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_mem_cache.mak" CFG="mod_mem_cache - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_mem_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_mem_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_mem_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "mod_mem_cache_EXPORTS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_mem_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_mem_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mem_cache.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_mem_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_mem_cache_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mem_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mem_cache.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_mem_cache - Win32 Release"
-# Name "mod_mem_cache - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_cache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_mem_cache.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_mem_cache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mem_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_mem_cache.so "mem_cache_module for Apache" ../../include/ap_release.h > .\mod_mem_cache.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_mem_cache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mem_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_mem_cache.so "mem_cache_module for Apache" ../../include/ap_release.h > .\mod_mem_cache.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/util_ldap.c b/modules/experimental/util_ldap.c
deleted file mode 100644
index 7f0110cebe..0000000000
--- a/modules/experimental/util_ldap.c
+++ /dev/null
@@ -1,1336 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * util_ldap.c: LDAP things
- *
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc.
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include <apr_strings.h>
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_ldap.h"
-#include "util_ldap_cache.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if !APR_HAS_LDAP
-#error mod_ldap requires APR-util to have LDAP support built in
-#endif
-
- /* defines for certificate file types
- */
-#define LDAP_CA_TYPE_UNKNOWN 0
-#define LDAP_CA_TYPE_DER 1
-#define LDAP_CA_TYPE_BASE64 2
-#define LDAP_CA_TYPE_CERT7_DB 3
-
-
-module AP_MODULE_DECLARE_DATA ldap_module;
-
-int util_ldap_handler(request_rec *r);
-void *util_ldap_create_config(apr_pool_t *p, server_rec *s);
-
-
-/*
- * Some definitions to help between various versions of apache.
- */
-
-#ifndef DOCTYPE_HTML_2_0
-#define DOCTYPE_HTML_2_0 "<!DOCTYPE HTML PUBLIC \"-//IETF//" \
- "DTD HTML 2.0//EN\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_3_2
-#define DOCTYPE_HTML_3_2 "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 3.2 Final//EN\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_4_0S
-#define DOCTYPE_HTML_4_0S "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 4.0//EN\"\n" \
- "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_4_0T
-#define DOCTYPE_HTML_4_0T "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 4.0 Transitional//EN\"\n" \
- "\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_4_0F
-#define DOCTYPE_HTML_4_0F "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
- "DTD HTML 4.0 Frameset//EN\"\n" \
- "\"http://www.w3.org/TR/REC-html40/frameset.dtd\">\n"
-#endif
-
-#define LDAP_CACHE_LOCK() \
- apr_global_mutex_lock(st->util_ldap_cache_lock)
-#define LDAP_CACHE_UNLOCK() \
- apr_global_mutex_unlock(st->util_ldap_cache_lock)
-
-
-static void util_ldap_strdup (char **str, const char *newstr)
-{
- if (*str) {
- free(*str);
- *str = NULL;
- }
-
- if (newstr) {
- *str = calloc(1, strlen(newstr)+1);
- strcpy (*str, newstr);
- }
-}
-
-/*
- * Status Handler
- * --------------
- *
- * This handler generates a status page about the current performance of
- * the LDAP cache. It is enabled as follows:
- *
- * <Location /ldap-status>
- * SetHandler ldap-status
- * </Location>
- *
- */
-int util_ldap_handler(request_rec *r)
-{
- util_ldap_state_t *st = (util_ldap_state_t *)ap_get_module_config(r->server->module_config, &ldap_module);
-
- r->allowed |= (1 << M_GET);
- if (r->method_number != M_GET)
- return DECLINED;
-
- if (strcmp(r->handler, "ldap-status")) {
- return DECLINED;
- }
-
- r->content_type = "text/html";
- if (r->header_only)
- return OK;
-
- ap_rputs(DOCTYPE_HTML_3_2
- "<html><head><title>LDAP Cache Information</title></head>\n", r);
- ap_rputs("<body bgcolor='#ffffff'><h1 align=center>LDAP Cache Information</h1>\n", r);
-
- util_ald_cache_display(r, st);
-
- return OK;
-}
-
-/* ------------------------------------------------------------------ */
-
-
-/*
- * Closes an LDAP connection by unlocking it. The next time
- * util_ldap_connection_find() is called this connection will be
- * available for reuse.
- */
-LDAP_DECLARE(void) util_ldap_connection_close(util_ldap_connection_t *ldc)
-{
-
- /*
- * QUESTION:
- *
- * Is it safe leaving bound connections floating around between the
- * different modules? Keeping the user bound is a performance boost,
- * but it is also a potential security problem - maybe.
- *
- * For now we unbind the user when we finish with a connection, but
- * we don't have to...
- */
-
- /* mark our connection as available for reuse */
-
-#if APR_HAS_THREADS
- apr_thread_mutex_unlock(ldc->lock);
-#endif
-}
-
-
-/*
- * Destroys an LDAP connection by unbinding and closing the connection to
- * the LDAP server. It is used to bring the connection back to a known
- * state after an error, and during pool cleanup.
- */
-LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_unbind(void *param)
-{
- util_ldap_connection_t *ldc = param;
-
- if (ldc) {
- if (ldc->ldap) {
- ldap_unbind_s(ldc->ldap);
- ldc->ldap = NULL;
- }
- ldc->bound = 0;
- }
-
- return APR_SUCCESS;
-}
-
-
-/*
- * Clean up an LDAP connection by unbinding and unlocking the connection.
- * This function is registered with the pool cleanup function - causing
- * the LDAP connections to be shut down cleanly on graceful restart.
- */
-LDAP_DECLARE_NONSTD(apr_status_t) util_ldap_connection_cleanup(void *param)
-{
- util_ldap_connection_t *ldc = param;
-
- if (ldc) {
-
- /* unbind and disconnect from the LDAP server */
- util_ldap_connection_unbind(ldc);
-
- /* free the username and password */
- if (ldc->bindpw) {
- free((void*)ldc->bindpw);
- }
- if (ldc->binddn) {
- free((void*)ldc->binddn);
- }
-
- /* unlock this entry */
- util_ldap_connection_close(ldc);
-
- }
-
- return APR_SUCCESS;
-}
-
-
-/*
- * Connect to the LDAP server and binds. Does not connect if already
- * connected (i.e. ldc->ldap is non-NULL.) Does not bind if already bound.
- *
- * Returns LDAP_SUCCESS on success; and an error code on failure
- */
-LDAP_DECLARE(int) util_ldap_connection_open(request_rec *r,
- util_ldap_connection_t *ldc)
-{
- int result = 0;
- int failures = 0;
- int version = LDAP_VERSION3;
-
- util_ldap_state_t *st = (util_ldap_state_t *)ap_get_module_config(
- r->server->module_config, &ldap_module);
-
- /* If the connection is already bound, return
- */
- if (ldc->bound)
- {
- ldc->reason = "LDAP: connection open successful (already bound)";
- return LDAP_SUCCESS;
- }
-
- /* create the ldap session handle
- */
- if (NULL == ldc->ldap)
- {
- apr_ldap_err_t *result = NULL;
- int rc = apr_ldap_init(r->pool,
- &(ldc->ldap),
- ldc->host,
- ldc->port,
- ldc->secure,
- &(result));
-
- if (result != NULL) {
- ldc->reason = result->reason;
- }
-
- if (NULL == ldc->ldap)
- {
- ldc->bound = 0;
- if (NULL == ldc->reason)
- ldc->reason = "LDAP: ldap initialization failed";
- return(-1);
- }
-
- /* Set the alias dereferencing option */
- ldap_set_option(ldc->ldap, LDAP_OPT_DEREF, &(ldc->deref));
-
- /* always default to LDAP V3 */
- ldap_set_option(ldc->ldap, LDAP_OPT_PROTOCOL_VERSION, &version);
-
- }
-
-
- /* loop trying to bind up to 10 times if LDAP_SERVER_DOWN error is
- * returned. Break out of the loop on Success or any other error.
- *
- * NOTE: Looping is probably not a great idea. If the server isn't
- * responding the chances it will respond after a few tries are poor.
- * However, the original code looped and it only happens on
- * the error condition.
- */
- for (failures=0; failures<10; failures++)
- {
- result = ldap_simple_bind_s(ldc->ldap, ldc->binddn, ldc->bindpw);
- if (LDAP_SERVER_DOWN != result)
- break;
- }
-
- /* free the handle if there was an error
- */
- if (LDAP_SUCCESS != result)
- {
- ldap_unbind_s(ldc->ldap);
- ldc->ldap = NULL;
- ldc->bound = 0;
- ldc->reason = "LDAP: ldap_simple_bind_s() failed";
- }
- else {
- ldc->bound = 1;
- ldc->reason = "LDAP: connection open successful";
- }
-
- return(result);
-}
-
-
-/*
- * Find an existing ldap connection struct that matches the
- * provided ldap connection parameters.
- *
- * If not found in the cache, a new ldc structure will be allocated from st->pool
- * and returned to the caller. If found in the cache, a pointer to the existing
- * ldc structure will be returned.
- */
-LDAP_DECLARE(util_ldap_connection_t *)util_ldap_connection_find(request_rec *r, const char *host, int port,
- const char *binddn, const char *bindpw, deref_options deref,
- int secure )
-{
- struct util_ldap_connection_t *l, *p; /* To traverse the linked list */
-
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
- &ldap_module);
-
-
-#if APR_HAS_THREADS
- /* mutex lock this function */
- if (!st->mutex) {
- apr_thread_mutex_create(&st->mutex, APR_THREAD_MUTEX_DEFAULT, st->pool);
- }
- apr_thread_mutex_lock(st->mutex);
-#endif
-
- /* Search for an exact connection match in the list that is not
- * being used.
- */
- for (l=st->connections,p=NULL; l; l=l->next) {
-#if APR_HAS_THREADS
- if (APR_SUCCESS == apr_thread_mutex_trylock(l->lock)) {
-#endif
- if ((l->port == port) && (strcmp(l->host, host) == 0) &&
- ((!l->binddn && !binddn) || (l->binddn && binddn && !strcmp(l->binddn, binddn))) &&
- ((!l->bindpw && !bindpw) || (l->bindpw && bindpw && !strcmp(l->bindpw, bindpw))) &&
- (l->deref == deref) && (l->secure == secure)) {
-
- break;
- }
-#if APR_HAS_THREADS
- /* If this connection didn't match the criteria, then we
- * need to unlock the mutex so it is available to be reused.
- */
- apr_thread_mutex_unlock(l->lock);
- }
-#endif
- p = l;
- }
-
- /* If nothing found, search again, but we don't care about the
- * binddn and bindpw this time.
- */
- if (!l) {
- for (l=st->connections,p=NULL; l; l=l->next) {
-#if APR_HAS_THREADS
- if (APR_SUCCESS == apr_thread_mutex_trylock(l->lock)) {
-
-#endif
- if ((l->port == port) && (strcmp(l->host, host) == 0) &&
- (l->deref == deref) && (l->secure == secure)) {
-
- /* the bind credentials have changed */
- l->bound = 0;
- util_ldap_strdup((char**)&(l->binddn), binddn);
- util_ldap_strdup((char**)&(l->bindpw), bindpw);
- break;
- }
-#if APR_HAS_THREADS
- /* If this connection didn't match the criteria, then we
- * need to unlock the mutex so it is available to be reused.
- */
- apr_thread_mutex_unlock(l->lock);
- }
-#endif
- p = l;
- }
- }
-
-/* artificially disable cache */
-/* l = NULL; */
-
- /* If no connection what found after the second search, we
- * must create one.
- */
- if (!l) {
-
- /*
- * Add the new connection entry to the linked list. Note that we
- * don't actually establish an LDAP connection yet; that happens
- * the first time authentication is requested.
- */
- /* create the details to the pool in st */
- l = apr_pcalloc(st->pool, sizeof(util_ldap_connection_t));
-#if APR_HAS_THREADS
- apr_thread_mutex_create(&l->lock, APR_THREAD_MUTEX_DEFAULT, st->pool);
- apr_thread_mutex_lock(l->lock);
-#endif
- l->pool = st->pool;
- l->bound = 0;
- l->host = apr_pstrdup(st->pool, host);
- l->port = port;
- l->deref = deref;
- util_ldap_strdup((char**)&(l->binddn), binddn);
- util_ldap_strdup((char**)&(l->bindpw), bindpw);
- l->secure = secure;
-
- /* add the cleanup to the pool */
- apr_pool_cleanup_register(l->pool, l,
- util_ldap_connection_cleanup,
- apr_pool_cleanup_null);
-
- if (p) {
- p->next = l;
- }
- else {
- st->connections = l;
- }
- }
-
-#if APR_HAS_THREADS
- apr_thread_mutex_unlock(st->mutex);
-#endif
- return l;
-}
-
-/* ------------------------------------------------------------------ */
-
-/*
- * Compares two DNs to see if they're equal. The only way to do this correctly is to
- * search for the dn and then do ldap_get_dn() on the result. This should match the
- * initial dn, since it would have been also retrieved with ldap_get_dn(). This is
- * expensive, so if the configuration value compare_dn_on_server is
- * false, just does an ordinary strcmp.
- *
- * The lock for the ldap cache should already be acquired.
- */
-LDAP_DECLARE(int) util_ldap_cache_comparedn(request_rec *r, util_ldap_connection_t *ldc,
- const char *url, const char *dn, const char *reqdn,
- int compare_dn_on_server)
-{
- int result = 0;
- util_url_node_t *curl;
- util_url_node_t curnode;
- util_dn_compare_node_t *node;
- util_dn_compare_node_t newnode;
- int failures = 0;
- LDAPMessage *res, *entry;
- char *searchdn;
-
- util_ldap_state_t *st = (util_ldap_state_t *)ap_get_module_config(r->server->module_config, &ldap_module);
-
- /* get cache entry (or create one) */
- LDAP_CACHE_LOCK();
-
- curnode.url = url;
- curl = util_ald_cache_fetch(st->util_ldap_cache, &curnode);
- if (curl == NULL) {
- curl = util_ald_create_caches(st, url);
- }
- LDAP_CACHE_UNLOCK();
-
- /* a simple compare? */
- if (!compare_dn_on_server) {
- /* unlock this read lock */
- if (strcmp(dn, reqdn)) {
- ldc->reason = "DN Comparison FALSE (direct strcmp())";
- return LDAP_COMPARE_FALSE;
- }
- else {
- ldc->reason = "DN Comparison TRUE (direct strcmp())";
- return LDAP_COMPARE_TRUE;
- }
- }
-
- if (curl) {
- /* no - it's a server side compare */
- LDAP_CACHE_LOCK();
-
- /* is it in the compare cache? */
- newnode.reqdn = (char *)reqdn;
- node = util_ald_cache_fetch(curl->dn_compare_cache, &newnode);
- if (node != NULL) {
- /* If it's in the cache, it's good */
- /* unlock this read lock */
- LDAP_CACHE_UNLOCK();
- ldc->reason = "DN Comparison TRUE (cached)";
- return LDAP_COMPARE_TRUE;
- }
-
- /* unlock this read lock */
- LDAP_CACHE_UNLOCK();
- }
-
-start_over:
- if (failures++ > 10) {
- /* too many failures */
- return result;
- }
-
- /* make a server connection */
- if (LDAP_SUCCESS != (result = util_ldap_connection_open(r, ldc))) {
- /* connect to server failed */
- return result;
- }
-
- /* search for reqdn */
- if ((result = ldap_search_ext_s(ldc->ldap, reqdn, LDAP_SCOPE_BASE,
- "(objectclass=*)", NULL, 1,
- NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) {
- ldc->reason = "DN Comparison ldap_search_ext_s() failed with server down";
- util_ldap_connection_unbind(ldc);
- goto start_over;
- }
- if (result != LDAP_SUCCESS) {
- /* search for reqdn failed - no match */
- ldc->reason = "DN Comparison ldap_search_ext_s() failed";
- return result;
- }
-
- entry = ldap_first_entry(ldc->ldap, res);
- searchdn = ldap_get_dn(ldc->ldap, entry);
-
- ldap_msgfree(res);
- if (strcmp(dn, searchdn) != 0) {
- /* compare unsuccessful */
- ldc->reason = "DN Comparison FALSE (checked on server)";
- result = LDAP_COMPARE_FALSE;
- }
- else {
- if (curl) {
- /* compare successful - add to the compare cache */
- LDAP_CACHE_LOCK();
- newnode.reqdn = (char *)reqdn;
- newnode.dn = (char *)dn;
-
- node = util_ald_cache_fetch(curl->dn_compare_cache, &newnode);
- if ((node == NULL) ||
- (strcmp(reqdn, node->reqdn) != 0) || (strcmp(dn, node->dn) != 0)) {
-
- util_ald_cache_insert(curl->dn_compare_cache, &newnode);
- }
- LDAP_CACHE_UNLOCK();
- }
- ldc->reason = "DN Comparison TRUE (checked on server)";
- result = LDAP_COMPARE_TRUE;
- }
- ldap_memfree(searchdn);
- return result;
-
-}
-
-/*
- * Does an generic ldap_compare operation. It accepts a cache that it will use
- * to lookup the compare in the cache. We cache two kinds of compares
- * (require group compares) and (require user compares). Each compare has a different
- * cache node: require group includes the DN; require user does not because the
- * require user cache is owned by the
- *
- */
-LDAP_DECLARE(int) util_ldap_cache_compare(request_rec *r, util_ldap_connection_t *ldc,
- const char *url, const char *dn,
- const char *attrib, const char *value)
-{
- int result = 0;
- util_url_node_t *curl;
- util_url_node_t curnode;
- util_compare_node_t *compare_nodep;
- util_compare_node_t the_compare_node;
- apr_time_t curtime = 0; /* silence gcc -Wall */
- int failures = 0;
-
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
- &ldap_module);
-
- /* get cache entry (or create one) */
- LDAP_CACHE_LOCK();
- curnode.url = url;
- curl = util_ald_cache_fetch(st->util_ldap_cache, &curnode);
- if (curl == NULL) {
- curl = util_ald_create_caches(st, url);
- }
- LDAP_CACHE_UNLOCK();
-
- if (curl) {
- /* make a comparison to the cache */
- LDAP_CACHE_LOCK();
- curtime = apr_time_now();
-
- the_compare_node.dn = (char *)dn;
- the_compare_node.attrib = (char *)attrib;
- the_compare_node.value = (char *)value;
- the_compare_node.result = 0;
-
- compare_nodep = util_ald_cache_fetch(curl->compare_cache, &the_compare_node);
-
- if (compare_nodep != NULL) {
- /* found it... */
- if (curtime - compare_nodep->lastcompare > st->compare_cache_ttl) {
- /* ...but it is too old */
- util_ald_cache_remove(curl->compare_cache, compare_nodep);
- }
- else {
- /* ...and it is good */
- /* unlock this read lock */
- LDAP_CACHE_UNLOCK();
- if (LDAP_COMPARE_TRUE == compare_nodep->result) {
- ldc->reason = "Comparison true (cached)";
- return compare_nodep->result;
- }
- else if (LDAP_COMPARE_FALSE == compare_nodep->result) {
- ldc->reason = "Comparison false (cached)";
- return compare_nodep->result;
- }
- else if (LDAP_NO_SUCH_ATTRIBUTE == compare_nodep->result) {
- ldc->reason = "Comparison no such attribute (cached)";
- return compare_nodep->result;
- }
- else {
- ldc->reason = "Comparison undefined (cached)";
- return compare_nodep->result;
- }
- }
- }
- /* unlock this read lock */
- LDAP_CACHE_UNLOCK();
- }
-
-start_over:
- if (failures++ > 10) {
- /* too many failures */
- return result;
- }
- if (LDAP_SUCCESS != (result = util_ldap_connection_open(r, ldc))) {
- /* connect failed */
- return result;
- }
-
- if ((result = ldap_compare_s(ldc->ldap, dn, attrib, value))
- == LDAP_SERVER_DOWN) {
- /* connection failed - try again */
- ldc->reason = "ldap_compare_s() failed with server down";
- util_ldap_connection_unbind(ldc);
- goto start_over;
- }
-
- ldc->reason = "Comparison complete";
- if ((LDAP_COMPARE_TRUE == result) ||
- (LDAP_COMPARE_FALSE == result) ||
- (LDAP_NO_SUCH_ATTRIBUTE == result)) {
- if (curl) {
- /* compare completed; caching result */
- LDAP_CACHE_LOCK();
- the_compare_node.lastcompare = curtime;
- the_compare_node.result = result;
-
- /* If the node doesn't exist then insert it, otherwise just update it with
- the last results */
- compare_nodep = util_ald_cache_fetch(curl->compare_cache, &the_compare_node);
- if ((compare_nodep == NULL) ||
- (strcmp(the_compare_node.dn, compare_nodep->dn) != 0) ||
- (strcmp(the_compare_node.attrib, compare_nodep->attrib) != 0) ||
- (strcmp(the_compare_node.value, compare_nodep->value) != 0)) {
-
- util_ald_cache_insert(curl->compare_cache, &the_compare_node);
- }
- else {
- compare_nodep->lastcompare = curtime;
- compare_nodep->result = result;
- }
- LDAP_CACHE_UNLOCK();
- }
- if (LDAP_COMPARE_TRUE == result) {
- ldc->reason = "Comparison true (adding to cache)";
- return LDAP_COMPARE_TRUE;
- }
- else if (LDAP_COMPARE_FALSE == result) {
- ldc->reason = "Comparison false (adding to cache)";
- return LDAP_COMPARE_FALSE;
- }
- else {
- ldc->reason = "Comparison no such attribute (adding to cache)";
- return LDAP_NO_SUCH_ATTRIBUTE;
- }
- }
- return result;
-}
-
-LDAP_DECLARE(int) util_ldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
- const char *url, const char *basedn, int scope, char **attrs,
- const char *filter, const char *bindpw, const char **binddn,
- const char ***retvals)
-{
- const char **vals = NULL;
- int result = 0;
- LDAPMessage *res, *entry;
- char *dn;
- int count;
- int failures = 0;
- util_url_node_t *curl; /* Cached URL node */
- util_url_node_t curnode;
- util_search_node_t *search_nodep; /* Cached search node */
- util_search_node_t the_search_node;
- apr_time_t curtime;
-
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
- &ldap_module);
-
- /* Get the cache node for this url */
- LDAP_CACHE_LOCK();
- curnode.url = url;
- curl = (util_url_node_t *)util_ald_cache_fetch(st->util_ldap_cache, &curnode);
- if (curl == NULL) {
- curl = util_ald_create_caches(st, url);
- }
- LDAP_CACHE_UNLOCK();
-
- if (curl) {
- LDAP_CACHE_LOCK();
- the_search_node.username = filter;
- search_nodep = util_ald_cache_fetch(curl->search_cache, &the_search_node);
- if (search_nodep != NULL && search_nodep->bindpw) {
-
- /* found entry in search cache... */
- curtime = apr_time_now();
-
- /*
- * Remove this item from the cache if its expired, or if the
- * sent password doesn't match the storepassword.
- */
- if ((curtime - search_nodep->lastbind) > st->search_cache_ttl) {
- /* ...but entry is too old */
- util_ald_cache_remove(curl->search_cache, search_nodep);
- }
- else if (strcmp(search_nodep->bindpw, bindpw) != 0) {
- /* ...but cached password doesn't match sent password */
- util_ald_cache_remove(curl->search_cache, search_nodep);
- }
- else {
- /* ...and entry is valid */
- *binddn = search_nodep->dn;
- *retvals = search_nodep->vals;
- LDAP_CACHE_UNLOCK();
- ldc->reason = "Authentication successful (cached)";
- return LDAP_SUCCESS;
- }
- }
- /* unlock this read lock */
- LDAP_CACHE_UNLOCK();
- }
-
- /*
- * At this point, there is no valid cached search, so lets do the search.
- */
-
- /*
- * If any LDAP operation fails due to LDAP_SERVER_DOWN, control returns here.
- */
-start_over:
- if (failures++ > 10) {
- return result;
- }
- if (LDAP_SUCCESS != (result = util_ldap_connection_open(r, ldc))) {
- return result;
- }
-
- /* try do the search */
- if ((result = ldap_search_ext_s(ldc->ldap,
- basedn, scope,
- filter, attrs, 0,
- NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) {
- ldc->reason = "ldap_search_ext_s() for user failed with server down";
- util_ldap_connection_unbind(ldc);
- goto start_over;
- }
-
- /* if there is an error (including LDAP_NO_SUCH_OBJECT) return now */
- if (result != LDAP_SUCCESS) {
- ldc->reason = "ldap_search_ext_s() for user failed";
- return result;
- }
-
- /*
- * We should have found exactly one entry; to find a different
- * number is an error.
- */
- count = ldap_count_entries(ldc->ldap, res);
- if (count != 1)
- {
- if (count == 0 )
- ldc->reason = "User not found";
- else
- ldc->reason = "User is not unique (search found two or more matches)";
- ldap_msgfree(res);
- return LDAP_NO_SUCH_OBJECT;
- }
-
- entry = ldap_first_entry(ldc->ldap, res);
-
- /* Grab the dn, copy it into the pool, and free it again */
- dn = ldap_get_dn(ldc->ldap, entry);
- *binddn = apr_pstrdup(r->pool, dn);
- ldap_memfree(dn);
-
- /*
- * A bind to the server with an empty password always succeeds, so
- * we check to ensure that the password is not empty. This implies
- * that users who actually do have empty passwords will never be
- * able to authenticate with this module. I don't see this as a big
- * problem.
- */
- if (strlen(bindpw) <= 0) {
- ldap_msgfree(res);
- ldc->reason = "Empty password not allowed";
- return LDAP_INVALID_CREDENTIALS;
- }
-
- /*
- * Attempt to bind with the retrieved dn and the password. If the bind
- * fails, it means that the password is wrong (the dn obviously
- * exists, since we just retrieved it)
- */
- if ((result =
- ldap_simple_bind_s(ldc->ldap, *binddn, bindpw)) ==
- LDAP_SERVER_DOWN) {
- ldc->reason = "ldap_simple_bind_s() to check user credentials failed with server down";
- ldap_msgfree(res);
- util_ldap_connection_unbind(ldc);
- goto start_over;
- }
-
- /* failure? if so - return */
- if (result != LDAP_SUCCESS) {
- ldc->reason = "ldap_simple_bind_s() to check user credentials failed";
- ldap_msgfree(res);
- util_ldap_connection_unbind(ldc);
- return result;
- }
- else {
- /*
- * We have just bound the connection to a different user and password
- * combination, which might be reused unintentionally next time this
- * connection is used from the connection pool. To ensure no confusion,
- * we mark the connection as unbound.
- */
- ldc->bound = 0;
- }
-
- /*
- * Get values for the provided attributes.
- */
- if (attrs) {
- int k = 0;
- int i = 0;
- while (attrs[k++]);
- vals = apr_pcalloc(r->pool, sizeof(char *) * (k+1));
- while (attrs[i]) {
- char **values;
- int j = 0;
- char *str = NULL;
- /* get values */
- values = ldap_get_values(ldc->ldap, entry, attrs[i]);
- while (values && values[j]) {
- str = str ? apr_pstrcat(r->pool, str, "; ", values[j], NULL) : apr_pstrdup(r->pool, values[j]);
- j++;
- }
- ldap_value_free(values);
- vals[i] = str;
- i++;
- }
- *retvals = vals;
- }
-
- /*
- * Add the new username to the search cache.
- */
- if (curl) {
- LDAP_CACHE_LOCK();
- the_search_node.username = filter;
- the_search_node.dn = *binddn;
- the_search_node.bindpw = bindpw;
- the_search_node.lastbind = apr_time_now();
- the_search_node.vals = vals;
-
- /* Search again to make sure that another thread didn't ready insert this node
- into the cache before we got here. If it does exist then update the lastbind */
- search_nodep = util_ald_cache_fetch(curl->search_cache, &the_search_node);
- if ((search_nodep == NULL) ||
- (strcmp(*binddn, search_nodep->dn) != 0) || (strcmp(bindpw, search_nodep->bindpw) != 0)) {
-
- util_ald_cache_insert(curl->search_cache, &the_search_node);
- }
- else {
- search_nodep->lastbind = the_search_node.lastbind;
- }
- LDAP_CACHE_UNLOCK();
- }
- ldap_msgfree(res);
-
- ldc->reason = "Authentication successful";
- return LDAP_SUCCESS;
-}
-
-
-/*
- * Reports if ssl support is enabled
- *
- * 1 = enabled, 0 = not enabled
- */
-LDAP_DECLARE(int) util_ldap_ssl_supported(request_rec *r)
-{
- util_ldap_state_t *st = (util_ldap_state_t *)ap_get_module_config(
- r->server->module_config, &ldap_module);
-
- return(st->ssl_support);
-}
-
-
-/* ---------------------------------------- */
-/* config directives */
-
-
-static const char *util_ldap_set_cache_bytes(cmd_parms *cmd, void *dummy, const char *bytes)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
-
- st->cache_bytes = atol(bytes);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "[%" APR_PID_T_FMT "] ldap cache: Setting shared memory "
- " cache size to %" APR_SIZE_T_FMT " bytes.",
- getpid(), st->cache_bytes);
-
- return NULL;
-}
-
-static const char *util_ldap_set_cache_file(cmd_parms *cmd, void *dummy, const char *file)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
-
- if (file) {
- st->cache_file = ap_server_root_relative(st->pool, file);
- }
- else {
- st->cache_file = NULL;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "LDAP cache: Setting shared memory cache file to %s bytes.",
- st->cache_file);
-
- return NULL;
-}
-
-static const char *util_ldap_set_cache_ttl(cmd_parms *cmd, void *dummy, const char *ttl)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
-
- st->search_cache_ttl = atol(ttl) * 1000000;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "[%d] ldap cache: Setting cache TTL to %ld microseconds.",
- getpid(), st->search_cache_ttl);
-
- return NULL;
-}
-
-static const char *util_ldap_set_cache_entries(cmd_parms *cmd, void *dummy, const char *size)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
-
-
- st->search_cache_size = atol(size);
- if (st->search_cache_size < 0) {
- st->search_cache_size = 0;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "[%d] ldap cache: Setting search cache size to %ld entries.",
- getpid(), st->search_cache_size);
-
- return NULL;
-}
-
-static const char *util_ldap_set_opcache_ttl(cmd_parms *cmd, void *dummy, const char *ttl)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
-
- st->compare_cache_ttl = atol(ttl) * 1000000;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "[%d] ldap cache: Setting operation cache TTL to %ld microseconds.",
- getpid(), st->compare_cache_ttl);
-
- return NULL;
-}
-
-static const char *util_ldap_set_opcache_entries(cmd_parms *cmd, void *dummy, const char *size)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
-
- st->compare_cache_size = atol(size);
- if (st->compare_cache_size < 0) {
- st->compare_cache_size = 0;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "[%d] ldap cache: Setting operation cache size to %ld entries.",
- getpid(), st->compare_cache_size);
-
- return NULL;
-}
-
-static const char *util_ldap_set_cert_auth(cmd_parms *cmd, void *dummy, const char *file)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "LDAP: SSL trusted certificate authority file - %s",
- file);
-
- st->cert_auth_file = ap_server_root_relative(cmd->pool, file);
-
- return(NULL);
-}
-
-
-static const char *util_ldap_set_cert_type(cmd_parms *cmd, void *dummy, const char *Type)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config,
- &ldap_module);
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
- "LDAP: SSL trusted certificate authority file type - %s",
- Type);
-
- if (0 == strcmp("DER_FILE", Type))
- st->cert_file_type = LDAP_CA_TYPE_DER;
-
- else if (0 == strcmp("BASE64_FILE", Type))
- st->cert_file_type = LDAP_CA_TYPE_BASE64;
-
- else if (0 == strcmp("CERT7_DB_PATH", Type))
- st->cert_file_type = LDAP_CA_TYPE_CERT7_DB;
-
- else
- st->cert_file_type = LDAP_CA_TYPE_UNKNOWN;
-
- return(NULL);
-}
-
-
-void *util_ldap_create_config(apr_pool_t *p, server_rec *s)
-{
- util_ldap_state_t *st =
- (util_ldap_state_t *)apr_pcalloc(p, sizeof(util_ldap_state_t));
-
- st->pool = p;
-
- st->cache_bytes = 100000;
- st->search_cache_ttl = 600000000;
- st->search_cache_size = 1024;
- st->compare_cache_ttl = 600000000;
- st->compare_cache_size = 1024;
- st->connections = NULL;
- st->cert_auth_file = NULL;
- st->cert_file_type = LDAP_CA_TYPE_UNKNOWN;
- st->ssl_support = 0;
-
- return st;
-}
-
-static apr_status_t util_ldap_cleanup_module(void *data)
-{
-
- server_rec *s = data;
- util_ldap_state_t *st = (util_ldap_state_t *)ap_get_module_config(
- s->module_config, &ldap_module);
-
- if (st->ssl_support) {
- apr_ldap_ssl_deinit();
- }
-
- return APR_SUCCESS;
-
-}
-
-static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- int rc = LDAP_SUCCESS;
- apr_status_t result;
- char buf[MAX_STRING_LEN];
- server_rec *s_vhost;
- util_ldap_state_t *st_vhost;
-
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(s->module_config, &ldap_module);
-
- void *data;
- const char *userdata_key = "util_ldap_init";
-
- /* util_ldap_post_config() will be called twice. Don't bother
- * going through all of the initialization on the first call
- * because it will just be thrown away.*/
- apr_pool_userdata_get(&data, userdata_key, s->process->pool);
- if (!data) {
- apr_pool_userdata_set((const void *)1, userdata_key,
- apr_pool_cleanup_null, s->process->pool);
-
-#if APR_HAS_SHARED_MEMORY
- /* If the cache file already exists then delete it. Otherwise we are
- * going to run into problems creating the shared memory. */
- if (st->cache_file) {
- char *lck_file = apr_pstrcat (st->pool, st->cache_file, ".lck", NULL);
- apr_file_remove(st->cache_file, ptemp);
- apr_file_remove(lck_file, ptemp);
- }
-#endif
- return OK;
- }
-
-#if APR_HAS_SHARED_MEMORY
- /* initializing cache if shared memory size is not zero and we already don't have shm address */
- if (!st->cache_shm && st->cache_bytes > 0) {
-#endif
- result = util_ldap_cache_init(p, st);
- if (result != APR_SUCCESS) {
- apr_strerror(result, buf, sizeof(buf));
- ap_log_error(APLOG_MARK, APLOG_ERR, result, s,
- "LDAP cache: error while creating a shared memory segment: %s", buf);
- }
-
-
-#if APR_HAS_SHARED_MEMORY
- if (st->cache_file) {
- st->lock_file = apr_pstrcat (st->pool, st->cache_file, ".lck", NULL);
- }
- else
-#endif
- st->lock_file = ap_server_root_relative(st->pool, tmpnam(NULL));
-
- result = apr_global_mutex_create(&st->util_ldap_cache_lock, st->lock_file, APR_LOCK_DEFAULT, st->pool);
- if (result != APR_SUCCESS) {
- return result;
- }
-
- /* merge config in all vhost */
- s_vhost = s->next;
- while (s_vhost) {
- st_vhost = (util_ldap_state_t *)ap_get_module_config(s_vhost->module_config, &ldap_module);
-
-#if APR_HAS_SHARED_MEMORY
- st_vhost->cache_shm = st->cache_shm;
- st_vhost->cache_rmm = st->cache_rmm;
- st_vhost->cache_file = st->cache_file;
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, result, s,
- "LDAP merging Shared Cache conf: shm=0x%pp rmm=0x%pp for VHOST: %s",
- st->cache_shm, st->cache_rmm, s_vhost->server_hostname);
-#endif
- st_vhost->lock_file = st->lock_file;
- s_vhost = s_vhost->next;
- }
-#if APR_HAS_SHARED_MEMORY
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "LDAP cache: LDAPSharedCacheSize is zero, disabling shared memory cache");
- }
-#endif
-
- /* log the LDAP SDK used
- */
- {
- apr_ldap_err_t *result = NULL;
- apr_ldap_info(&(result), p);
- if (result != NULL) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s, result->reason);
- }
- }
-
- apr_pool_cleanup_register(p, s, util_ldap_cleanup_module,
- util_ldap_cleanup_module);
-
- /* initialize SSL support if requested
- */
- if (st->cert_auth_file) {
-
- apr_ldap_err_t *result = NULL;
- int rc = apr_ldap_ssl_init(p,
- st->cert_auth_file,
- st->cert_file_type,
- &(result));
-
- if (LDAP_SUCCESS == rc) {
- st->ssl_support = 1;
- }
- else if (NULL != result) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, result->reason);
- st->ssl_support = 0;
- }
-
- }
-
- /* log SSL status - If SSL isn't available it isn't necessarily
- * an error because the modules asking for LDAP connections
- * may not ask for SSL support
- */
- if (st->ssl_support) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
- "LDAP: SSL support available" );
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
- "LDAP: SSL support unavailable" );
- }
-
- return(OK);
-}
-
-static void util_ldap_child_init(apr_pool_t *p, server_rec *s)
-{
- apr_status_t sts;
- util_ldap_state_t *st =
- (util_ldap_state_t *)ap_get_module_config(s->module_config, &ldap_module);
-
- sts = apr_global_mutex_child_init(&st->util_ldap_cache_lock, st->lock_file, p);
- if (sts != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, sts, s, "failed to init caching lock in child process");
- return;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, s,
- "INIT global mutex %s in child %d ", st->lock_file, getpid());
- }
-}
-
-command_rec util_ldap_cmds[] = {
- AP_INIT_TAKE1("LDAPSharedCacheSize", util_ldap_set_cache_bytes, NULL, RSRC_CONF,
- "Sets the size of the shared memory cache in bytes. "
- "Zero means disable the shared memory cache. Defaults to 100KB."),
-
- AP_INIT_TAKE1("LDAPSharedCacheFile", util_ldap_set_cache_file, NULL, RSRC_CONF,
- "Sets the file of the shared memory cache."
- "Nothing means disable the shared memory cache."),
-
- AP_INIT_TAKE1("LDAPCacheEntries", util_ldap_set_cache_entries, NULL, RSRC_CONF,
- "Sets the maximum number of entries that are possible in the LDAP "
- "search cache. "
- "Zero means no limit; -1 disables the cache. Defaults to 1024 entries."),
-
- AP_INIT_TAKE1("LDAPCacheTTL", util_ldap_set_cache_ttl, NULL, RSRC_CONF,
- "Sets the maximum time (in seconds) that an item can be cached in the LDAP "
- "search cache. Zero means no limit. Defaults to 600 seconds (10 minutes)."),
-
- AP_INIT_TAKE1("LDAPOpCacheEntries", util_ldap_set_opcache_entries, NULL, RSRC_CONF,
- "Sets the maximum number of entries that are possible in the LDAP "
- "compare cache. "
- "Zero means no limit; -1 disables the cache. Defaults to 1024 entries."),
-
- AP_INIT_TAKE1("LDAPOpCacheTTL", util_ldap_set_opcache_ttl, NULL, RSRC_CONF,
- "Sets the maximum time (in seconds) that an item is cached in the LDAP "
- "operation cache. Zero means no limit. Defaults to 600 seconds (10 minutes)."),
-
- AP_INIT_TAKE1("LDAPTrustedCA", util_ldap_set_cert_auth, NULL, RSRC_CONF,
- "Sets the file containing the trusted Certificate Authority certificate. "
- "Used to validate the LDAP server certificate for SSL connections."),
-
- AP_INIT_TAKE1("LDAPTrustedCAType", util_ldap_set_cert_type, NULL, RSRC_CONF,
- "Specifies the type of the Certificate Authority file. "
- "The following types are supported: "
- " DER_FILE - file in binary DER format "
- " BASE64_FILE - file in Base64 format "
- " CERT7_DB_PATH - Netscape certificate database file "),
- {NULL}
-};
-
-static void util_ldap_register_hooks(apr_pool_t *p)
-{
- ap_hook_post_config(util_ldap_post_config,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_handler(util_ldap_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_child_init(util_ldap_child_init, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module ldap_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- util_ldap_create_config, /* server config */
- NULL, /* merge server config */
- util_ldap_cmds, /* command table */
- util_ldap_register_hooks, /* set up request processing hooks */
-};
diff --git a/modules/experimental/util_ldap.def b/modules/experimental/util_ldap.def
deleted file mode 100644
index d1fac89b35..0000000000
--- a/modules/experimental/util_ldap.def
+++ /dev/null
@@ -1,6 +0,0 @@
-EXPORT ldap_module
-EXPORT util_ldap_connection_find
-EXPORT util_ldap_connection_close
-EXPORT util_ldap_cache_checkuserid
-EXPORT util_ldap_cache_compare
-EXPORT util_ldap_cache_comparedn
diff --git a/modules/experimental/util_ldap.dsp b/modules/experimental/util_ldap.dsp
deleted file mode 100644
index 318ce5476c..0000000000
--- a/modules/experimental/util_ldap.dsp
+++ /dev/null
@@ -1,140 +0,0 @@
-# Microsoft Developer Studio Project File - Name="util_ldap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=util_ldap - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "util_ldap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "util_ldap.mak" CFG="util_ldap - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "util_ldap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "util_ldap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "util_ldap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "LDAP_DECLARE_EXPORT" /Fd"Release\util_ldap_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/util_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,util_ldap.so
-# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/util_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,util_ldap.so /opt:ref
-
-!ELSEIF "$(CFG)" == "util_ldap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "LDAP_DECLARE_EXPORT" /Fd"Debug\util_ldap_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/util_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,util_ldap.so
-# ADD LINK32 kernel32.lib wldap32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/util_ldap.so" /base:@..\..\os\win32\BaseAddr.ref,util_ldap.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "util_ldap - Win32 Release"
-# Name "util_ldap - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\util_ldap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\util_ldap.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\util_ldap_cache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\util_ldap_cache.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\util_ldap_cache_mgr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "util_ldap - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\util_ldap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk util_ldap.so "LDAP Utility Module for Apache" ../../include/ap_release.h > .\util_ldap.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "util_ldap - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\util_ldap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk util_ldap.so "LDAP Utility Module for Apache" ../../include/ap_release.h > .\util_ldap.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/experimental/util_ldap_cache.c b/modules/experimental/util_ldap_cache.c
deleted file mode 100644
index 47547d623a..0000000000
--- a/modules/experimental/util_ldap_cache.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * util_ldap_cache.c: LDAP cache things
- *
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc.
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include <apr_strings.h>
-#include "util_ldap.h"
-#include "util_ldap_cache.h"
-
-#if APR_HAS_LDAP
-
-#if APR_HAS_SHARED_MEMORY
-#define MODLDAP_SHMEM_CACHE "/tmp/mod_ldap_cache"
-#endif
-
-/* ------------------------------------------------------------------ */
-
-unsigned long util_ldap_url_node_hash(void *n)
-{
- util_url_node_t *node = (util_url_node_t *)n;
- return util_ald_hash_string(1, node->url);
-}
-
-int util_ldap_url_node_compare(void *a, void *b)
-{
- util_url_node_t *na = (util_url_node_t *)a;
- util_url_node_t *nb = (util_url_node_t *)b;
-
- return(strcmp(na->url, nb->url) == 0);
-}
-
-void *util_ldap_url_node_copy(util_ald_cache_t *cache, void *c)
-{
- util_url_node_t *n = (util_url_node_t *)c;
- util_url_node_t *node = (util_url_node_t *)util_ald_alloc(cache, sizeof(util_url_node_t));
-
- if (node) {
- if (!(node->url = util_ald_strdup(cache, n->url))) {
- util_ald_free(cache, node->url);
- return NULL;
- }
- node->search_cache = n->search_cache;
- node->compare_cache = n->compare_cache;
- node->dn_compare_cache = n->dn_compare_cache;
- return node;
- }
- else {
- return NULL;
- }
-}
-
-void util_ldap_url_node_free(util_ald_cache_t *cache, void *n)
-{
- util_url_node_t *node = (util_url_node_t *)n;
-
- util_ald_free(cache, node->url);
- util_ald_destroy_cache(node->search_cache);
- util_ald_destroy_cache(node->compare_cache);
- util_ald_destroy_cache(node->dn_compare_cache);
- util_ald_free(cache, node);
-}
-
-void util_ldap_url_node_display(request_rec *r, util_ald_cache_t *cache, void *n)
-{
- util_url_node_t *node = (util_url_node_t *)n;
- char date_str[APR_CTIME_LEN+1];
- char *buf;
- const char *type_str;
- util_ald_cache_t *cache_node;
- int x;
-
- for (x=0;x<3;x++) {
- switch (x) {
- case 0:
- cache_node = node->search_cache;
- type_str = "Searches";
- break;
- case 1:
- cache_node = node->compare_cache;
- type_str = "Compares";
- break;
- case 2:
- cache_node = node->dn_compare_cache;
- type_str = "DN Compares";
- break;
- }
-
- if (cache_node->marktime) {
- apr_ctime(date_str, cache_node->marktime);
- }
- else
- date_str[0] = 0;
-
- buf = apr_psprintf(r->pool,
- "<tr valign='top'>"
- "<td nowrap>%s (%s)</td>"
- "<td nowrap>%ld</td>"
- "<td nowrap>%ld</td>"
- "<td nowrap>%ld</td>"
- "<td nowrap>%ld</td>"
- "<td nowrap>%s</td>"
- "<tr>",
- node->url,
- type_str,
- cache_node->size,
- cache_node->maxentries,
- cache_node->numentries,
- cache_node->fullmark,
- date_str);
-
- ap_rputs(buf, r);
- }
-
-}
-
-/* ------------------------------------------------------------------ */
-
-/* Cache functions for search nodes */
-unsigned long util_ldap_search_node_hash(void *n)
-{
- util_search_node_t *node = (util_search_node_t *)n;
- return util_ald_hash_string(1, ((util_search_node_t *)(node))->username);
-}
-
-int util_ldap_search_node_compare(void *a, void *b)
-{
- return(strcmp(((util_search_node_t *)a)->username,
- ((util_search_node_t *)b)->username) == 0);
-}
-
-void *util_ldap_search_node_copy(util_ald_cache_t *cache, void *c)
-{
- util_search_node_t *node = (util_search_node_t *)c;
- util_search_node_t *newnode = util_ald_alloc(cache, sizeof(util_search_node_t));
-
- /* safety check */
- if (newnode) {
-
- /* copy vals */
- if (node->vals) {
- int k = 0;
- int i = 0;
- while (node->vals[k++]);
- if (!(newnode->vals = util_ald_alloc(cache, sizeof(char *) * (k+1)))) {
- util_ldap_search_node_free(cache, newnode);
- return NULL;
- }
- while (node->vals[i]) {
- if (!(newnode->vals[i] = util_ald_strdup(cache, node->vals[i]))) {
- util_ldap_search_node_free(cache, newnode);
- return NULL;
- }
- i++;
- }
- }
- else {
- newnode->vals = NULL;
- }
- if (!(newnode->username = util_ald_strdup(cache, node->username)) ||
- !(newnode->dn = util_ald_strdup(cache, node->dn)) ) {
- util_ldap_search_node_free(cache, newnode);
- return NULL;
- }
- if(node->bindpw) {
- if(!(newnode->bindpw = util_ald_strdup(cache, node->bindpw))) {
- util_ldap_search_node_free(cache, newnode);
- return NULL;
- }
- } else {
- newnode->bindpw = NULL;
- }
- newnode->lastbind = node->lastbind;
-
- }
- return (void *)newnode;
-}
-
-void util_ldap_search_node_free(util_ald_cache_t *cache, void *n)
-{
- int i = 0;
- util_search_node_t *node = (util_search_node_t *)n;
- if (node->vals) {
- while (node->vals[i]) {
- util_ald_free(cache, node->vals[i++]);
- }
- util_ald_free(cache, node->vals);
- }
- util_ald_free(cache, node->username);
- util_ald_free(cache, node->dn);
- util_ald_free(cache, node->bindpw);
- util_ald_free(cache, node);
-}
-
-void util_ldap_search_node_display(request_rec *r, util_ald_cache_t *cache, void *n)
-{
- util_search_node_t *node = (util_search_node_t *)n;
- char date_str[APR_CTIME_LEN+1];
- char *buf;
-
- apr_ctime(date_str, node->lastbind);
-
- buf = apr_psprintf(r->pool,
- "<tr valign='top'>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<tr>",
- node->username,
- node->dn,
- date_str);
-
- ap_rputs(buf, r);
-}
-
-/* ------------------------------------------------------------------ */
-
-unsigned long util_ldap_compare_node_hash(void *n)
-{
- util_compare_node_t *node = (util_compare_node_t *)n;
- return util_ald_hash_string(3, node->dn, node->attrib, node->value);
-}
-
-int util_ldap_compare_node_compare(void *a, void *b)
-{
- util_compare_node_t *na = (util_compare_node_t *)a;
- util_compare_node_t *nb = (util_compare_node_t *)b;
- return (strcmp(na->dn, nb->dn) == 0 &&
- strcmp(na->attrib, nb->attrib) == 0 &&
- strcmp(na->value, nb->value) == 0);
-}
-
-void *util_ldap_compare_node_copy(util_ald_cache_t *cache, void *c)
-{
- util_compare_node_t *n = (util_compare_node_t *)c;
- util_compare_node_t *node = (util_compare_node_t *)util_ald_alloc(cache, sizeof(util_compare_node_t));
-
- if (node) {
- if (!(node->dn = util_ald_strdup(cache, n->dn)) ||
- !(node->attrib = util_ald_strdup(cache, n->attrib)) ||
- !(node->value = util_ald_strdup(cache, n->value))) {
- util_ldap_compare_node_free(cache, node);
- return NULL;
- }
- node->lastcompare = n->lastcompare;
- node->result = n->result;
- return node;
- }
- else {
- return NULL;
- }
-}
-
-void util_ldap_compare_node_free(util_ald_cache_t *cache, void *n)
-{
- util_compare_node_t *node = (util_compare_node_t *)n;
- util_ald_free(cache, node->dn);
- util_ald_free(cache, node->attrib);
- util_ald_free(cache, node->value);
- util_ald_free(cache, node);
-}
-
-void util_ldap_compare_node_display(request_rec *r, util_ald_cache_t *cache, void *n)
-{
- util_compare_node_t *node = (util_compare_node_t *)n;
- char date_str[APR_CTIME_LEN+1];
- char *buf, *cmp_result;
-
- apr_ctime(date_str, node->lastcompare);
-
- if (node->result == LDAP_COMPARE_TRUE) {
- cmp_result = "LDAP_COMPARE_TRUE";
- }
- else if (node->result == LDAP_COMPARE_FALSE) {
- cmp_result = "LDAP_COMPARE_FALSE";
- }
- else {
- cmp_result = apr_itoa(r->pool, node->result);
- }
-
- buf = apr_psprintf(r->pool,
- "<tr valign='top'>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<tr>",
- node->dn,
- node->attrib,
- node->value,
- date_str,
- cmp_result);
-
- ap_rputs(buf, r);
-}
-
-/* ------------------------------------------------------------------ */
-
-unsigned long util_ldap_dn_compare_node_hash(void *n)
-{
- return util_ald_hash_string(1, ((util_dn_compare_node_t *)n)->reqdn);
-}
-
-int util_ldap_dn_compare_node_compare(void *a, void *b)
-{
- return (strcmp(((util_dn_compare_node_t *)a)->reqdn,
- ((util_dn_compare_node_t *)b)->reqdn) == 0);
-}
-
-void *util_ldap_dn_compare_node_copy(util_ald_cache_t *cache, void *c)
-{
- util_dn_compare_node_t *n = (util_dn_compare_node_t *)c;
- util_dn_compare_node_t *node = (util_dn_compare_node_t *)util_ald_alloc(cache, sizeof(util_dn_compare_node_t));
- if (node) {
- if (!(node->reqdn = util_ald_strdup(cache, n->reqdn)) ||
- !(node->dn = util_ald_strdup(cache, n->dn))) {
- util_ldap_dn_compare_node_free(cache, node);
- return NULL;
- }
- return node;
- }
- else {
- return NULL;
- }
-}
-
-void util_ldap_dn_compare_node_free(util_ald_cache_t *cache, void *n)
-{
- util_dn_compare_node_t *node = (util_dn_compare_node_t *)n;
- util_ald_free(cache, node->reqdn);
- util_ald_free(cache, node->dn);
- util_ald_free(cache, node);
-}
-
-void util_ldap_dn_compare_node_display(request_rec *r, util_ald_cache_t *cache, void *n)
-{
- util_dn_compare_node_t *node = (util_dn_compare_node_t *)n;
- char *buf;
-
- buf = apr_psprintf(r->pool,
- "<tr valign='top'>"
- "<td nowrap>%s</td>"
- "<td nowrap>%s</td>"
- "<tr>",
- node->reqdn,
- node->dn);
-
- ap_rputs(buf, r);
-}
-
-
-/* ------------------------------------------------------------------ */
-apr_status_t util_ldap_cache_child_kill(void *data);
-apr_status_t util_ldap_cache_module_kill(void *data);
-
-apr_status_t util_ldap_cache_module_kill(void *data)
-{
- util_ldap_state_t *st = (util_ldap_state_t *)data;
-
- util_ald_destroy_cache(st->util_ldap_cache);
-#if APR_HAS_SHARED_MEMORY
- if (st->cache_rmm != NULL) {
- apr_rmm_destroy (st->cache_rmm);
- st->cache_rmm = NULL;
- }
- if (st->cache_shm != NULL) {
- apr_status_t result = apr_shm_destroy(st->cache_shm);
- st->cache_shm = NULL;
- apr_file_remove(st->cache_file, st->pool);
- return result;
- }
-#endif
- return APR_SUCCESS;
-}
-
-apr_status_t util_ldap_cache_init(apr_pool_t *pool, util_ldap_state_t *st)
-{
-#if APR_HAS_SHARED_MEMORY
- apr_status_t result;
-
- result = apr_shm_create(&st->cache_shm, st->cache_bytes, st->cache_file, st->pool);
- if (result == APR_EEXIST) {
- /*
- * The cache could have already been created (i.e. we may be a child process). See
- * if we can attach to the existing shared memory
- */
- result = apr_shm_attach(&st->cache_shm, st->cache_file, st->pool);
- }
- if (result != APR_SUCCESS) {
- return result;
- }
-
- /* This will create a rmm "handler" to get into the shared memory area */
- apr_rmm_init(&st->cache_rmm, NULL, (void *)apr_shm_baseaddr_get(st->cache_shm), st->cache_bytes, st->pool);
-#endif
-
- apr_pool_cleanup_register(st->pool, st , util_ldap_cache_module_kill, apr_pool_cleanup_null);
-
- st->util_ldap_cache =
- util_ald_create_cache(st,
- util_ldap_url_node_hash,
- util_ldap_url_node_compare,
- util_ldap_url_node_copy,
- util_ldap_url_node_free,
- util_ldap_url_node_display);
- return APR_SUCCESS;
-}
-
-
-#endif /* APR_HAS_LDAP */
diff --git a/modules/experimental/util_ldap_cache.h b/modules/experimental/util_ldap_cache.h
deleted file mode 100644
index 4fc9f3463e..0000000000
--- a/modules/experimental/util_ldap_cache.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APU_LDAP_CACHE_H
-#define APU_LDAP_CACHE_H
-
-/*
- * This switches LDAP support on or off.
- */
-
-/* this whole thing disappears if LDAP is not enabled */
-#if APR_HAS_LDAP
-
-
-/*
- * LDAP Cache Manager
- */
-
-#if APR_HAS_SHARED_MEMORY
-#include <apr_shm.h>
-#include <apr_rmm.h> /* EDD */
-#endif
-
-typedef struct util_cache_node_t {
- void *payload; /* Pointer to the payload */
- apr_time_t add_time; /* Time node was added to cache */
- struct util_cache_node_t *next;
-} util_cache_node_t;
-
-typedef struct util_ald_cache util_ald_cache_t;
-
-struct util_ald_cache {
- unsigned long size; /* Size of cache array */
- unsigned long maxentries; /* Maximum number of cache entries */
- unsigned long numentries; /* Current number of cache entries */
- unsigned long fullmark; /* Used to keep track of when cache becomes 3/4 full */
- apr_time_t marktime; /* Time that the cache became 3/4 full */
- unsigned long (*hash)(void *); /* Func to hash the payload */
- int (*compare)(void *, void *); /* Func to compare two payloads */
- void * (*copy)(util_ald_cache_t *cache, void *); /* Func to alloc mem and copy payload to new mem */
- void (*free)(util_ald_cache_t *cache, void *); /* Func to free mem used by the payload */
- void (*display)(request_rec *r, util_ald_cache_t *cache, void *); /* Func to display the payload contents */
- util_cache_node_t **nodes;
-
- unsigned long numpurges; /* No. of times the cache has been purged */
- double avg_purgetime; /* Average time to purge the cache */
- apr_time_t last_purge; /* Time of the last purge */
- unsigned long npurged; /* Number of elements purged in last purge. This is not
- obvious: it won't be 3/4 the size of the cache if
- there were a lot of expired entries. */
-
- unsigned long fetches; /* Number of fetches */
- unsigned long hits; /* Number of cache hits */
- unsigned long inserts; /* Number of inserts */
- unsigned long removes; /* Number of removes */
-
-#if APR_HAS_SHARED_MEMORY
- apr_shm_t *shm_addr;
- apr_rmm_t *rmm_addr;
-#endif
-
-};
-
-#ifndef WIN32
-#define ALD_MM_FILE_MODE ( S_IRUSR|S_IWUSR )
-#else
-#define ALD_MM_FILE_MODE ( _S_IREAD|_S_IWRITE )
-#endif
-
-
-/*
- * LDAP Cache
- */
-
-/*
- * Maintain a cache of LDAP URLs that the server handles. Each node in
- * the cache contains the search cache for that URL, and a compare cache
- * for the URL. The compare cash is populated when doing require group
- * compares.
- */
-typedef struct util_url_node_t {
- const char *url;
- util_ald_cache_t *search_cache;
- util_ald_cache_t *compare_cache;
- util_ald_cache_t *dn_compare_cache;
-} util_url_node_t;
-
-/*
- * We cache every successful search and bind operation, using the username
- * as the key. Each node in the cache contains the returned DN, plus the
- * password used to bind.
- */
-typedef struct util_search_node_t {
- const char *username; /* Cache key */
- const char *dn; /* DN returned from search */
- const char *bindpw; /* The most recently used bind password;
- NULL if the bind failed */
- apr_time_t lastbind; /* Time of last successful bind */
- const char **vals; /* Values of queried attributes */
-} util_search_node_t;
-
-/*
- * We cache every successful compare operation, using the DN, attrib, and
- * value as the key.
- */
-typedef struct util_compare_node_t {
- const char *dn; /* DN, attrib and value combine to be the key */
- const char *attrib;
- const char *value;
- apr_time_t lastcompare;
- int result;
-} util_compare_node_t;
-
-/*
- * We cache every successful compare dn operation, using the dn in the require
- * statement and the dn fetched based on the client-provided username.
- */
-typedef struct util_dn_compare_node_t {
- const char *reqdn; /* The DN in the require dn statement */
- const char *dn; /* The DN found in the search */
-} util_dn_compare_node_t;
-
-
-/*
- * Function prototypes for LDAP cache
- */
-
-/* util_ldap_cache.c */
-unsigned long util_ldap_url_node_hash(void *n);
-int util_ldap_url_node_compare(void *a, void *b);
-void *util_ldap_url_node_copy(util_ald_cache_t *cache, void *c);
-void util_ldap_url_node_free(util_ald_cache_t *cache, void *n);
-void util_ldap_url_node_display(request_rec *r, util_ald_cache_t *cache, void *n);
-
-unsigned long util_ldap_search_node_hash(void *n);
-int util_ldap_search_node_compare(void *a, void *b);
-void *util_ldap_search_node_copy(util_ald_cache_t *cache, void *c);
-void util_ldap_search_node_free(util_ald_cache_t *cache, void *n);
-void util_ldap_search_node_display(request_rec *r, util_ald_cache_t *cache, void *n);
-
-unsigned long util_ldap_compare_node_hash(void *n);
-int util_ldap_compare_node_compare(void *a, void *b);
-void *util_ldap_compare_node_copy(util_ald_cache_t *cache, void *c);
-void util_ldap_compare_node_free(util_ald_cache_t *cache, void *n);
-void util_ldap_compare_node_display(request_rec *r, util_ald_cache_t *cache, void *n);
-
-unsigned long util_ldap_dn_compare_node_hash(void *n);
-int util_ldap_dn_compare_node_compare(void *a, void *b);
-void *util_ldap_dn_compare_node_copy(util_ald_cache_t *cache, void *c);
-void util_ldap_dn_compare_node_free(util_ald_cache_t *cache, void *n);
-void util_ldap_dn_compare_node_display(request_rec *r, util_ald_cache_t *cache, void *n);
-
-
-/* util_ldap_cache_mgr.c */
-
-/* Cache alloc and free function, dealing or not with shm */
-void util_ald_free(util_ald_cache_t *cache, const void *ptr);
-void *util_ald_alloc(util_ald_cache_t *cache, unsigned long size);
-const char *util_ald_strdup(util_ald_cache_t *cache, const char *s);
-
-/* Cache managing function */
-unsigned long util_ald_hash_string(int nstr, ...);
-void util_ald_cache_purge(util_ald_cache_t *cache);
-util_url_node_t *util_ald_create_caches(util_ldap_state_t *s, const char *url);
-util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
- unsigned long (*hashfunc)(void *),
- int (*comparefunc)(void *, void *),
- void * (*copyfunc)(util_ald_cache_t *cache, void *),
- void (*freefunc)(util_ald_cache_t *cache, void *),
- void (*displayfunc)(request_rec *r, util_ald_cache_t *cache, void *));
-
-void util_ald_destroy_cache(util_ald_cache_t *cache);
-void *util_ald_cache_fetch(util_ald_cache_t *cache, void *payload);
-void *util_ald_cache_insert(util_ald_cache_t *cache, void *payload);
-void util_ald_cache_remove(util_ald_cache_t *cache, void *payload);
-char *util_ald_cache_display_stats(request_rec *r, util_ald_cache_t *cache, char *name, char *id);
-
-#endif /* APR_HAS_LDAP */
-#endif /* APU_LDAP_CACHE_H */
diff --git a/modules/experimental/util_ldap_cache_mgr.c b/modules/experimental/util_ldap_cache_mgr.c
deleted file mode 100644
index 31b297e552..0000000000
--- a/modules/experimental/util_ldap_cache_mgr.c
+++ /dev/null
@@ -1,740 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * util_ldap_cache_mgr.c: LDAP cache manager things
- *
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc.
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include "util_ldap.h"
-#include "util_ldap_cache.h"
-#include <apr_strings.h>
-
-#if APR_HAS_LDAP
-
-/* only here until strdup is gone */
-#include <string.h>
-
-/* here till malloc is gone */
-#include <stdlib.h>
-
-static const unsigned long primes[] =
-{
- 11,
- 19,
- 37,
- 73,
- 109,
- 163,
- 251,
- 367,
- 557,
- 823,
- 1237,
- 1861,
- 2777,
- 4177,
- 6247,
- 9371,
- 14057,
- 21089,
- 31627,
- 47431,
- 71143,
- 106721,
- 160073,
- 240101,
- 360163,
- 540217,
- 810343,
- 1215497,
- 1823231,
- 2734867,
- 4102283,
- 6153409,
- 9230113,
- 13845163,
- 0
-};
-
-void util_ald_free(util_ald_cache_t *cache, const void *ptr)
-{
-#if APR_HAS_SHARED_MEMORY
- if (cache->rmm_addr) {
- if (ptr)
- /* Free in shared memory */
- apr_rmm_free(cache->rmm_addr, apr_rmm_offset_get(cache->rmm_addr, (void *)ptr));
- }
- else {
- if (ptr)
- /* Cache shm is not used */
- free((void *)ptr);
- }
-#else
- if (ptr)
- free((void *)ptr);
-#endif
-}
-
-void *util_ald_alloc(util_ald_cache_t *cache, unsigned long size)
-{
- if (0 == size)
- return NULL;
-#if APR_HAS_SHARED_MEMORY
- if (cache->rmm_addr) {
- /* allocate from shared memory */
- apr_rmm_off_t block = apr_rmm_calloc(cache->rmm_addr, size);
- return block ? (void *)apr_rmm_addr_get(cache->rmm_addr, block) : NULL;
- }
- else {
- /* Cache shm is not used */
- return (void *)calloc(sizeof(char), size);
- }
-#else
- return (void *)calloc(sizeof(char), size);
-#endif
-}
-
-const char *util_ald_strdup(util_ald_cache_t *cache, const char *s)
-{
-#if APR_HAS_SHARED_MEMORY
- if (cache->rmm_addr) {
- /* allocate from shared memory */
- apr_rmm_off_t block = apr_rmm_calloc(cache->rmm_addr, strlen(s)+1);
- char *buf = block ? (char *)apr_rmm_addr_get(cache->rmm_addr, block) : NULL;
- if (buf) {
- strcpy(buf, s);
- return buf;
- }
- else {
- return NULL;
- }
- } else {
- /* Cache shm is not used */
- return strdup(s);
- }
-#else
- return strdup(s);
-#endif
-}
-
-
-/*
- * Computes the hash on a set of strings. The first argument is the number
- * of strings to hash, the rest of the args are strings.
- * Algorithm taken from glibc.
- */
-unsigned long util_ald_hash_string(int nstr, ...)
-{
- int i;
- va_list args;
- unsigned long h=0, g;
- char *str, *p;
-
- va_start(args, nstr);
- for (i=0; i < nstr; ++i) {
- str = va_arg(args, char *);
- for (p = str; *p; ++p) {
- h = ( h << 4 ) + *p;
- if ( ( g = h & 0xf0000000 ) ) {
- h = h ^ (g >> 24);
- h = h ^ g;
- }
- }
- }
- va_end(args);
-
- return h;
-}
-
-
-/*
- Purges a cache that has gotten full. We keep track of the time that we
- added the entry that made the cache 3/4 full, then delete all entries
- that were added before that time. It's pretty simplistic, but time to
- purge is only O(n), which is more important.
-*/
-void util_ald_cache_purge(util_ald_cache_t *cache)
-{
- unsigned long i;
- util_cache_node_t *p, *q;
- apr_time_t t;
-
- if (!cache)
- return;
-
- cache->last_purge = apr_time_now();
- cache->npurged = 0;
- cache->numpurges++;
-
- for (i=0; i < cache->size; ++i) {
- p = cache->nodes[i];
- while (p != NULL) {
- if (p->add_time < cache->marktime) {
- q = p->next;
- (*cache->free)(cache, p->payload);
- util_ald_free(cache, p);
- cache->numentries--;
- cache->npurged++;
- p = q;
- }
- else {
- p = p->next;
- }
- }
- }
-
- t = apr_time_now();
- cache->avg_purgetime =
- ((t - cache->last_purge) + (cache->avg_purgetime * (cache->numpurges-1))) /
- cache->numpurges;
-}
-
-
-/*
- * create caches
- */
-util_url_node_t *util_ald_create_caches(util_ldap_state_t *st, const char *url)
-{
- util_url_node_t curl, *newcurl;
- util_ald_cache_t *search_cache;
- util_ald_cache_t *compare_cache;
- util_ald_cache_t *dn_compare_cache;
-
- /* create the three caches */
- search_cache = util_ald_create_cache(st,
- util_ldap_search_node_hash,
- util_ldap_search_node_compare,
- util_ldap_search_node_copy,
- util_ldap_search_node_free,
- util_ldap_search_node_display);
- compare_cache = util_ald_create_cache(st,
- util_ldap_compare_node_hash,
- util_ldap_compare_node_compare,
- util_ldap_compare_node_copy,
- util_ldap_compare_node_free,
- util_ldap_compare_node_display);
- dn_compare_cache = util_ald_create_cache(st,
- util_ldap_dn_compare_node_hash,
- util_ldap_dn_compare_node_compare,
- util_ldap_dn_compare_node_copy,
- util_ldap_dn_compare_node_free,
- util_ldap_dn_compare_node_display);
-
- /* check that all the caches initialised successfully */
- if (search_cache && compare_cache && dn_compare_cache) {
-
- /* The contents of this structure will be duplicated in shared
- memory during the insert. So use stack memory rather than
- pool memory to avoid a memory leak. */
- memset (&curl, 0, sizeof(util_url_node_t));
- curl.url = url;
- curl.search_cache = search_cache;
- curl.compare_cache = compare_cache;
- curl.dn_compare_cache = dn_compare_cache;
-
- newcurl = util_ald_cache_insert(st->util_ldap_cache, &curl);
-
- }
-
- return newcurl;
-}
-
-
-util_ald_cache_t *util_ald_create_cache(util_ldap_state_t *st,
- unsigned long (*hashfunc)(void *),
- int (*comparefunc)(void *, void *),
- void * (*copyfunc)(util_ald_cache_t *cache, void *),
- void (*freefunc)(util_ald_cache_t *cache, void *),
- void (*displayfunc)(request_rec *r, util_ald_cache_t *cache, void *))
-{
- util_ald_cache_t *cache;
- unsigned long i;
-
- if (st->search_cache_size <= 0)
- return NULL;
-
-#if APR_HAS_SHARED_MEMORY
- if (!st->cache_rmm) {
- return NULL;
- }
- else {
- apr_rmm_off_t block = apr_rmm_calloc(st->cache_rmm, sizeof(util_ald_cache_t));
- cache = block ? (util_ald_cache_t *)apr_rmm_addr_get(st->cache_rmm, block) : NULL;
- }
-#else
- cache = (util_ald_cache_t *)calloc(sizeof(util_ald_cache_t), 1);
-#endif
- if (!cache)
- return NULL;
-
-#if APR_HAS_SHARED_MEMORY
- cache->rmm_addr = st->cache_rmm;
- cache->shm_addr = st->cache_shm;
-#endif
- cache->maxentries = st->search_cache_size;
- cache->numentries = 0;
- cache->size = st->search_cache_size / 3;
- if (cache->size < 64) cache->size = 64;
- for (i = 0; primes[i] && primes[i] < cache->size; ++i) ;
- cache->size = primes[i]? primes[i] : primes[i-1];
-
- cache->nodes = (util_cache_node_t **)util_ald_alloc(cache, cache->size * sizeof(util_cache_node_t *));
- if (!cache->nodes) {
- util_ald_free(cache, cache);
- return NULL;
- }
-
- for (i=0; i < cache->size; ++i)
- cache->nodes[i] = NULL;
-
- cache->hash = hashfunc;
- cache->compare = comparefunc;
- cache->copy = copyfunc;
- cache->free = freefunc;
- cache->display = displayfunc;
-
- cache->fullmark = cache->maxentries / 4 * 3;
- cache->marktime = 0;
- cache->avg_purgetime = 0.0;
- cache->numpurges = 0;
- cache->last_purge = 0;
- cache->npurged = 0;
-
- cache->fetches = 0;
- cache->hits = 0;
- cache->inserts = 0;
- cache->removes = 0;
-
- return cache;
-}
-
-void util_ald_destroy_cache(util_ald_cache_t *cache)
-{
- unsigned long i;
- util_cache_node_t *p, *q;
-
- if (cache == NULL)
- return;
-
- for (i = 0; i < cache->size; ++i) {
- p = cache->nodes[i];
- q = NULL;
- while (p != NULL) {
- q = p->next;
- (*cache->free)(cache, p->payload);
- util_ald_free(cache, p);
- p = q;
- }
- }
- util_ald_free(cache, cache->nodes);
- util_ald_free(cache, cache);
-}
-
-void *util_ald_cache_fetch(util_ald_cache_t *cache, void *payload)
-{
- int hashval;
- util_cache_node_t *p;
-
- if (cache == NULL)
- return NULL;
-
- cache->fetches++;
-
- hashval = (*cache->hash)(payload) % cache->size;
- for (p = cache->nodes[hashval];
- p && !(*cache->compare)(p->payload, payload);
- p = p->next) ;
-
- if (p != NULL) {
- cache->hits++;
- return p->payload;
- }
- else {
- return NULL;
- }
-}
-
-/*
- * Insert an item into the cache.
- * *** Does not catch duplicates!!! ***
- */
-void *util_ald_cache_insert(util_ald_cache_t *cache, void *payload)
-{
- int hashval;
- util_cache_node_t *node;
-
- /* sanity check */
- if (cache == NULL || payload == NULL) {
- return NULL;
- }
-
- /* check if we are full - if so, try purge */
- if (cache->numentries >= cache->maxentries) {
- util_ald_cache_purge(cache);
- if (cache->numentries >= cache->maxentries) {
- /* if the purge was not effective, we leave now to avoid an overflow */
- return NULL;
- }
- }
-
- /* should be safe to add an entry */
- if ((node = (util_cache_node_t *)util_ald_alloc(cache, sizeof(util_cache_node_t))) == NULL) {
- return NULL;
- }
-
- /* populate the entry */
- cache->inserts++;
- hashval = (*cache->hash)(payload) % cache->size;
- node->add_time = apr_time_now();
- node->payload = (*cache->copy)(cache, payload);
- node->next = cache->nodes[hashval];
- cache->nodes[hashval] = node;
-
- /* if we reach the full mark, note the time we did so
- * for the benefit of the purge function
- */
- if (++cache->numentries == cache->fullmark) {
- cache->marktime=apr_time_now();
- }
-
- return node->payload;
-}
-
-void util_ald_cache_remove(util_ald_cache_t *cache, void *payload)
-{
- int hashval;
- util_cache_node_t *p, *q;
-
- if (cache == NULL)
- return;
-
- cache->removes++;
- hashval = (*cache->hash)(payload) % cache->size;
- for (p = cache->nodes[hashval], q=NULL;
- p && !(*cache->compare)(p->payload, payload);
- p = p->next) {
- q = p;
- }
-
- /* If p is null, it means that we couldn't find the node, so just return */
- if (p == NULL)
- return;
-
- if (q == NULL) {
- /* We found the node, and it's the first in the list */
- cache->nodes[hashval] = p->next;
- }
- else {
- /* We found the node and it's not the first in the list */
- q->next = p->next;
- }
- (*cache->free)(cache, p->payload);
- util_ald_free(cache, p);
- cache->numentries--;
-}
-
-char *util_ald_cache_display_stats(request_rec *r, util_ald_cache_t *cache, char *name, char *id)
-{
- unsigned long i;
- int totchainlen = 0;
- int nchains = 0;
- double chainlen;
- util_cache_node_t *n;
- char *buf, *buf2;
- apr_pool_t *p = r->pool;
-
- if (cache == NULL) {
- return "";
- }
-
- for (i=0; i < cache->size; ++i) {
- if (cache->nodes[i] != NULL) {
- nchains++;
- for (n = cache->nodes[i]; n != NULL; n = n->next)
- totchainlen++;
- }
- }
- chainlen = nchains? (double)totchainlen / (double)nchains : 0;
-
- if (id) {
- buf2 = apr_psprintf(p,
- "<a href=\"%s?%s\">%s</a>",
- r->uri,
- id,
- name);
- }
- else {
- buf2 = name;
- }
-
- buf = apr_psprintf(p,
- "<tr valign='top'>"
- "<td nowrap>%s</td>"
- "<td align='right' nowrap>%lu (%.0f%% full)</td>"
- "<td align='right'>%.1f</td>"
- "<td align='right'>%lu/%lu</td>"
- "<td align='right'>%.0f%%</td>"
- "<td align='right'>%lu/%lu</td>",
- buf2,
- cache->numentries,
- (double)cache->numentries / (double)cache->maxentries * 100.0,
- chainlen,
- cache->hits,
- cache->fetches,
- (cache->fetches > 0 ? (double)(cache->hits) / (double)(cache->fetches) * 100.0 : 100.0),
- cache->inserts,
- cache->removes);
-
- if (cache->numpurges) {
- char str_ctime[APR_CTIME_LEN];
-
- apr_ctime(str_ctime, cache->last_purge);
- buf = apr_psprintf(p,
- "%s"
- "<td align='right'>%lu</td>\n"
- "<td align='right' nowrap>%s</td>\n",
- buf,
- cache->numpurges,
- str_ctime);
- }
- else {
- buf = apr_psprintf(p,
- "%s<td colspan='2' align='center'>(none)</td>\n",
- buf);
- }
-
- buf = apr_psprintf(p, "%s<td align='right'>%.2g</td>\n</tr>", buf, cache->avg_purgetime);
-
- return buf;
-}
-
-char *util_ald_cache_display(request_rec *r, util_ldap_state_t *st)
-{
- unsigned long i,j;
- char *buf, *t1, *t2, *t3;
- char *id1, *id2, *id3;
- char *argfmt = "cache=%s&id=%d&off=%d";
- char *scanfmt = "cache=%4s&id=%u&off=%u%1s";
- apr_pool_t *pool = r->pool;
- util_cache_node_t *p = NULL;
- util_url_node_t *n = NULL;
-
- util_ald_cache_t *util_ldap_cache = st->util_ldap_cache;
-
-
- if (!util_ldap_cache) {
- return "<tr valign='top'><td nowrap colspan=7>Cache has not been enabled/initialised.</td></tr>";
- }
-
- if (r->args && strlen(r->args)) {
- char cachetype[5], lint[2];
- unsigned int id, off;
- char date_str[APR_CTIME_LEN+1];
-
- if ((3 == sscanf(r->args, scanfmt, cachetype, &id, &off, lint)) &&
- (id < util_ldap_cache->size)) {
-
- if ((p = util_ldap_cache->nodes[id]) != NULL) {
- n = (util_url_node_t *)p->payload;
- buf = (char*)n->url;
- }
- else {
- buf = "";
- }
-
- ap_rputs(apr_psprintf(r->pool,
- "<p>\n"
- "<table border='0'>\n"
- "<tr>\n"
- "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Cache Name:</b></font></td>"
- "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%s (%s)</b></font></td>"
- "</tr>\n"
- "</table>\n</p>\n",
- buf,
- cachetype[0] == 'm'? "Main" :
- (cachetype[0] == 's' ? "Search" :
- (cachetype[0] == 'c' ? "Compares" : "DNCompares"))), r);
-
- switch (cachetype[0]) {
- case 'm':
- if (util_ldap_cache->marktime) {
- apr_ctime(date_str, util_ldap_cache->marktime);
- }
- else
- date_str[0] = 0;
-
- ap_rputs(apr_psprintf(r->pool,
- "<p>\n"
- "<table border='0'>\n"
- "<tr>\n"
- "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Size:</b></font></td>"
- "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
- "</tr>\n"
- "<tr>\n"
- "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Max Entries:</b></font></td>"
- "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
- "</tr>\n"
- "<tr>\n"
- "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b># Entries:</b></font></td>"
- "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
- "</tr>\n"
- "<tr>\n"
- "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark:</b></font></td>"
- "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%ld</b></font></td>"
- "</tr>\n"
- "<tr>\n"
- "<td bgcolor='#000000'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark Time:</b></font></td>"
- "<td bgcolor='#ffffff'><font size='-1' face='Arial,Helvetica' color='#000000'><b>%s</b></font></td>"
- "</tr>\n"
- "</table>\n</p>\n",
- util_ldap_cache->size,
- util_ldap_cache->maxentries,
- util_ldap_cache->numentries,
- util_ldap_cache->fullmark,
- date_str), r);
-
- ap_rputs("<p>\n"
- "<table border='0'>\n"
- "<tr bgcolor='#000000'>\n"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>LDAP URL</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Size</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Max Entries</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b># Entries</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Full Mark Time</b></font></td>"
- "</tr>\n", r
- );
- for (i=0; i < util_ldap_cache->size; ++i) {
- for (p = util_ldap_cache->nodes[i]; p != NULL; p = p->next) {
-
- (*util_ldap_cache->display)(r, util_ldap_cache, p->payload);
- }
- }
- ap_rputs("</table>\n</p>\n", r);
-
-
- break;
- case 's':
- ap_rputs("<p>\n"
- "<table border='0'>\n"
- "<tr bgcolor='#000000'>\n"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>LDAP Filter</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>User Name</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Last Bind</b></font></td>"
- "</tr>\n", r
- );
- for (i=0; i < n->search_cache->size; ++i) {
- for (p = n->search_cache->nodes[i]; p != NULL; p = p->next) {
-
- (*n->search_cache->display)(r, n->search_cache, p->payload);
- }
- }
- ap_rputs("</table>\n</p>\n", r);
- break;
- case 'c':
- ap_rputs("<p>\n"
- "<table border='0'>\n"
- "<tr bgcolor='#000000'>\n"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>DN</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Attribute</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Value</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Last Compare</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Result</b></font></td>"
- "</tr>\n", r
- );
- for (i=0; i < n->compare_cache->size; ++i) {
- for (p = n->compare_cache->nodes[i]; p != NULL; p = p->next) {
-
- (*n->compare_cache->display)(r, n->compare_cache, p->payload);
- }
- }
- ap_rputs("</table>\n</p>\n", r);
- break;
- case 'd':
- ap_rputs("<p>\n"
- "<table border='0'>\n"
- "<tr bgcolor='#000000'>\n"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Require DN</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Actual DN</b></font></td>"
- "</tr>\n", r
- );
- for (i=0; i < n->dn_compare_cache->size; ++i) {
- for (p = n->dn_compare_cache->nodes[i]; p != NULL; p = p->next) {
-
- (*n->dn_compare_cache->display)(r, n->dn_compare_cache, p->payload);
- }
- }
- ap_rputs("</table>\n</p>\n", r);
- break;
- default:
- break;
- }
-
- }
- }
- else {
- ap_rputs("<p>\n"
- "<table border='0'>\n"
- "<tr bgcolor='#000000'>\n"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Cache Name</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Entries</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Avg. Chain Len.</b></font></td>"
- "<td colspan='2'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Hits</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Ins/Rem</b></font></td>"
- "<td colspan='2'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Purges</b></font></td>"
- "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Avg Purge Time</b></font></td>"
- "</tr>\n", r
- );
-
-
- id1 = apr_psprintf(pool, argfmt, "main", 0, 0);
- buf = util_ald_cache_display_stats(r, st->util_ldap_cache, "LDAP URL Cache", id1);
-
- for (i=0; i < util_ldap_cache->size; ++i) {
- for (p = util_ldap_cache->nodes[i],j=0; p != NULL; p = p->next,j++) {
-
- n = (util_url_node_t *)p->payload;
-
- t1 = apr_psprintf(pool, "%s (Searches)", n->url);
- t2 = apr_psprintf(pool, "%s (Compares)", n->url);
- t3 = apr_psprintf(pool, "%s (DNCompares)", n->url);
- id1 = apr_psprintf(pool, argfmt, "srch", i, j);
- id2 = apr_psprintf(pool, argfmt, "cmpr", i, j);
- id3 = apr_psprintf(pool, argfmt, "dncp", i, j);
-
- buf = apr_psprintf(pool, "%s\n\n"
- "%s\n\n"
- "%s\n\n"
- "%s\n\n",
- buf,
- util_ald_cache_display_stats(r, n->search_cache, t1, id1),
- util_ald_cache_display_stats(r, n->compare_cache, t2, id2),
- util_ald_cache_display_stats(r, n->dn_compare_cache, t3, id3)
- );
- }
- }
- ap_rputs(buf, r);
- ap_rputs("</table>\n</p>\n", r);
- }
-
- return buf;
-}
-
-#endif /* APR_HAS_LDAP */
diff --git a/modules/filters/.cvsignore b/modules/filters/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/filters/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/filters/.indent.pro b/modules/filters/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/filters/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/filters/Makefile.in b/modules/filters/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/filters/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/filters/NWGNUdeflate b/modules/filters/NWGNUdeflate
deleted file mode 100644
index c828e1f6d5..0000000000
--- a/modules/filters/NWGNUdeflate
+++ /dev/null
@@ -1,281 +0,0 @@
-#
-# The MOD_DEFLATE module requires the ZLib source which
-# can be downloaded from http://www.gzip.org/zlib/
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = deflate
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Deflate Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Deflate Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/deflate.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_deflate.o \
- $(OBJDIR)/adler32.o \
- $(OBJDIR)/crc32.o \
- $(OBJDIR)/deflate.o \
- $(OBJDIR)/inflate.o \
- $(OBJDIR)/inffast.o \
- $(OBJDIR)/inftrees.o \
- $(OBJDIR)/trees.o \
- $(OBJDIR)/zutil.o \
- $(EOLIST)
-
-ifeq "$(wildcard $(ZLIBSDK)/infblock.c)" "$(ZLIBSDK)/infblock.c"
-FILES_nlm_objs += \
- $(OBJDIR)/infblock.o \
- $(OBJDIR)/infcodes.o \
- $(OBJDIR)/infutil.o \
- $(EOLIST)
-endif
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- deflate_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-vpath %.c $(ZLIBSDK)
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/filters/NWGNUextfiltr b/modules/filters/NWGNUextfiltr
deleted file mode 100644
index f17aea1e84..0000000000
--- a/modules/filters/NWGNUextfiltr
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = extfiltr
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) External Filter Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = ExtFilter Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/extfiltr.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_ext_filter.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- ext_filter_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/filters/NWGNUmakefile b/modules/filters/NWGNUmakefile
deleted file mode 100644
index c8509428eb..0000000000
--- a/modules/filters/NWGNUmakefile
+++ /dev/null
@@ -1,255 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/extfiltr.nlm \
- $(EOLIST)
-
-# If the zlib libraries source exists then build the mod_deflate module
-ifneq "$(ZLIBSDK)" ""
-ifeq "$(wildcard $(ZLIBSDK))" "$(ZLIBSDK)"
-TARGET_nlm += $(OBJDIR)/deflate.nlm \
- $(EOLIST)
-endif
-else
-TARGET_nlm += $(OBJDIR)/extfiltr.nlm \
- $(EOLIST)
-endif
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/filters/config.m4 b/modules/filters/config.m4
deleted file mode 100644
index 89b564cdb1..0000000000
--- a/modules/filters/config.m4
+++ /dev/null
@@ -1,63 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(filters)
-
-APACHE_MODULE(ext_filter, external filter module, , , most)
-APACHE_MODULE(include, Server Side Includes, , , yes)
-
-APACHE_MODULE(deflate, Deflate transfer encoding support, , , most, [
- AC_ARG_WITH(z, APACHE_HELP_STRING(--with-z=DIR,use a specific zlib library),
- [
- if test "x$withval" != "xyes" && test "x$withval" != "x"; then
- ap_zlib_base="$withval"
- fi
- ])
- if test "x$ap_zlib_base" = "x"; then
- AC_MSG_CHECKING([for zlib location])
- AC_CACHE_VAL(ap_cv_zlib,[
- for dir in /usr/local /usr ; do
- if test -d $dir && test -f $dir/include/zlib.h; then
- ap_cv_zlib=$dir
- break
- fi
- done
- ])
- ap_zlib_base=$ap_cv_zlib
- if test "x$ap_zlib_base" = "x"; then
- enable_deflate=no
- AC_MSG_RESULT([not found])
- else
- AC_MSG_RESULT([$ap_zlib_base])
- fi
- fi
- if test "$enable_deflate" != "no"; then
- ap_save_includes=$INCLUDES
- ap_save_ldflags=$LDFLAGS
- ap_save_libs=$LIBS
- ap_save_cppflags=$CPPFLAGS
- if test "$ap_zlib_base" != "/usr"; then
- APR_ADDTO(INCLUDES, [-I${ap_zlib_base}/include])
- dnl put in CPPFLAGS temporarily so that AC_TRY_LINK below will work
- CPPFLAGS="$CPPFLAGS $INCLUDES"
- APR_ADDTO(LDFLAGS, [-L${ap_zlib_base}/lib])
- if test "x$ap_platform_runtime_link_flag" != "x"; then
- APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag${ap_zlib_base}/lib])
- fi
- fi
- APR_ADDTO(LIBS, [-lz])
- AC_MSG_CHECKING([for zlib library])
- AC_TRY_LINK([#include <zlib.h>], [int i = Z_OK;],
- [AC_MSG_RESULT(found)
- AC_CHECK_HEADERS(zutil.h)],
- [AC_MSG_RESULT(not found)
- enable_deflate=no
- INCLUDES=$ap_save_includes
- LDFLAGS=$ap_save_ldflags
- LIBS=$ap_save_libs])
- CPPFLAGS=$ap_save_cppflags
- fi
-])
-
-APACHE_MODPATH_FINISH
diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c
deleted file mode 100644
index 768498f272..0000000000
--- a/modules/filters/mod_deflate.c
+++ /dev/null
@@ -1,1179 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_deflate.c: Perform deflate transfer-encoding on the fly
- *
- * Written by Ian Holsman, Justin Erenkrantz, and Nick Kew
- */
-
-/*
- * Portions of this software are based upon zlib code by Jean-loup Gailly
- * (zlib functions gz_open and gzwrite, check_header)
- */
-
-/* zlib flags */
-#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
-#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */
-#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
-#define COMMENT 0x10 /* bit 4 set: file comment present */
-#define RESERVED 0xE0 /* bits 5..7: reserved */
-
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "apr_strings.h"
-#include "apr_general.h"
-#include "util_filter.h"
-#include "apr_buckets.h"
-#include "http_request.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "zlib.h"
-
-#ifdef HAVE_ZUTIL_H
-#include "zutil.h"
-#else
-/* As part of the encoding process, we must send what our OS_CODE is
- * (or so it seems based on what I can tell of how gzip encoding works).
- *
- * zutil.h is not always included with zlib distributions (it is a private
- * header), so this is straight from zlib 1.1.3's zutil.h.
- */
-#ifdef OS2
-#define OS_CODE 0x06
-#endif
-
-#ifdef WIN32 /* Window 95 & Windows NT */
-#define OS_CODE 0x0b
-#endif
-
-#if defined(VAXC) || defined(VMS)
-#define OS_CODE 0x02
-#endif
-
-#ifdef AMIGA
-#define OS_CODE 0x01
-#endif
-
-#if defined(ATARI) || defined(atarist)
-#define OS_CODE 0x05
-#endif
-
-#if defined(MACOS) || defined(TARGET_OS_MAC)
-#define OS_CODE 0x07
-#endif
-
-#ifdef __50SERIES /* Prime/PRIMOS */
-#define OS_CODE 0x0F
-#endif
-
-#ifdef TOPS20
-#define OS_CODE 0x0a
-#endif
-
-#ifndef OS_CODE
-#define OS_CODE 0x03 /* assume Unix */
-#endif
-#endif
-
-static const char deflateFilterName[] = "DEFLATE";
-module AP_MODULE_DECLARE_DATA deflate_module;
-
-typedef struct deflate_filter_config_t
-{
- int windowSize;
- int memlevel;
- int compressionlevel;
- apr_size_t bufferSize;
- char *note_ratio_name;
- char *note_input_name;
- char *note_output_name;
-} deflate_filter_config;
-
-/* windowsize is negative to suppress Zlib header */
-#define DEFAULT_COMPRESSION Z_DEFAULT_COMPRESSION
-#define DEFAULT_WINDOWSIZE -15
-#define DEFAULT_MEMLEVEL 9
-#define DEFAULT_BUFFERSIZE 8096
-
-/* Outputs a long in LSB order to the given file
- * only the bottom 4 bits are required for the deflate file format.
- */
-static void putLong(unsigned char *string, unsigned long x)
-{
- string[0] = (unsigned char)(x & 0xff);
- string[1] = (unsigned char)((x & 0xff00) >> 8);
- string[2] = (unsigned char)((x & 0xff0000) >> 16);
- string[3] = (unsigned char)((x & 0xff000000) >> 24);
-}
-
-/* Inputs a string and returns a long.
- */
-static unsigned long getLong(unsigned char *string)
-{
- return ((unsigned long)string[0])
- | (((unsigned long)string[1]) << 8)
- | (((unsigned long)string[2]) << 16)
- | (((unsigned long)string[3]) << 24);
-}
-
-static void *create_deflate_server_config(apr_pool_t *p, server_rec *s)
-{
- deflate_filter_config *c = apr_pcalloc(p, sizeof *c);
-
- c->memlevel = DEFAULT_MEMLEVEL;
- c->windowSize = DEFAULT_WINDOWSIZE;
- c->bufferSize = DEFAULT_BUFFERSIZE;
- c->compressionlevel = DEFAULT_COMPRESSION;
-
- return c;
-}
-
-static const char *deflate_set_window_size(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
- &deflate_module);
- int i;
-
- i = atoi(arg);
-
- if (i < 1 || i > 15)
- return "DeflateWindowSize must be between 1 and 15";
-
- c->windowSize = i * -1;
-
- return NULL;
-}
-
-static const char *deflate_set_buffer_size(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
- &deflate_module);
- int n = atoi(arg);
-
- if (n <= 0) {
- return "DeflateBufferSize should be positive";
- }
-
- c->bufferSize = (apr_size_t)n;
-
- return NULL;
-}
-static const char *deflate_set_note(cmd_parms *cmd, void *dummy,
- const char *arg1, const char *arg2)
-{
- deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
- &deflate_module);
-
- if (arg2 == NULL) {
- c->note_ratio_name = apr_pstrdup(cmd->pool, arg1);
- }
- else if (!strcasecmp(arg1, "ratio")) {
- c->note_ratio_name = apr_pstrdup(cmd->pool, arg2);
- }
- else if (!strcasecmp(arg1, "input")) {
- c->note_input_name = apr_pstrdup(cmd->pool, arg2);
- }
- else if (!strcasecmp(arg1, "output")) {
- c->note_output_name = apr_pstrdup(cmd->pool, arg2);
- }
- else {
- return apr_psprintf(cmd->pool, "Unknown note type %s", arg1);
- }
-
- return NULL;
-}
-
-static const char *deflate_set_memlevel(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
- &deflate_module);
- int i;
-
- i = atoi(arg);
-
- if (i < 1 || i > 9)
- return "DeflateMemLevel must be between 1 and 9";
-
- c->memlevel = i;
-
- return NULL;
-}
-
-static const char *deflate_set_compressionlevel(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
- &deflate_module);
- int i;
-
- i = atoi(arg);
-
- if (i < 1 || i > 9)
- return "Compression Level must be between 1 and 9";
-
- c->compressionlevel = i;
-
- return NULL;
-}
-
-/* magic header */
-static char deflate_magic[2] = { '\037', '\213' };
-
-typedef struct deflate_ctx_t
-{
- z_stream stream;
- unsigned char *buffer;
- unsigned long crc;
- apr_bucket_brigade *bb, *proc_bb;
-} deflate_ctx;
-
-static apr_status_t deflate_out_filter(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- apr_bucket *e;
- request_rec *r = f->r;
- deflate_ctx *ctx = f->ctx;
- int zRC;
- deflate_filter_config *c = ap_get_module_config(r->server->module_config,
- &deflate_module);
-
- /* Do nothing if asked to filter nothing. */
- if (APR_BRIGADE_EMPTY(bb)) {
- return APR_SUCCESS;
- }
-
- /* If we don't have a context, we need to ensure that it is okay to send
- * the deflated content. If we have a context, that means we've done
- * this before and we liked it.
- * This could be not so nice if we always fail. But, if we succeed,
- * we're in better shape.
- */
- if (!ctx) {
- char *buf, *token;
- const char *encoding;
-
- /* only work on main request/no subrequests */
- if (r->main) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* some browsers might have problems, so set no-gzip
- * (with browsermatch) for them
- */
- if (apr_table_get(r->subprocess_env, "no-gzip")) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* Some browsers might have problems with content types
- * other than text/html, so set gzip-only-text/html
- * (with browsermatch) for them
- */
- if (r->content_type == NULL
- || strncmp(r->content_type, "text/html", 9)) {
- const char *env_value = apr_table_get(r->subprocess_env,
- "gzip-only-text/html");
- if ( env_value && (strcmp(env_value,"1") == 0) ) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
- }
-
- /* Let's see what our current Content-Encoding is.
- * If it's already encoded, don't compress again.
- * (We could, but let's not.)
- */
- encoding = apr_table_get(r->headers_out, "Content-Encoding");
- if (encoding) {
- const char *err_enc;
-
- err_enc = apr_table_get(r->err_headers_out, "Content-Encoding");
- if (err_enc) {
- encoding = apr_pstrcat(r->pool, encoding, ",", err_enc, NULL);
- }
- }
- else {
- encoding = apr_table_get(r->err_headers_out, "Content-Encoding");
- }
-
- if (r->content_encoding) {
- encoding = encoding ? apr_pstrcat(r->pool, encoding, ",",
- r->content_encoding, NULL)
- : r->content_encoding;
- }
-
- if (encoding) {
- const char *tmp = encoding;
-
- token = ap_get_token(r->pool, &tmp, 0);
- while (token && *token) {
- /* stolen from mod_negotiation: */
- if (strcmp(token, "identity") && strcmp(token, "7bit") &&
- strcmp(token, "8bit") && strcmp(token, "binary")) {
-
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* Otherwise, skip token */
- if (*tmp) {
- ++tmp;
- }
- token = (*tmp) ? ap_get_token(r->pool, &tmp, 0) : NULL;
- }
- }
-
- /* Even if we don't accept this request based on it not having
- * the Accept-Encoding, we need to note that we were looking
- * for this header and downstream proxies should be aware of that.
- */
- apr_table_setn(r->headers_out, "Vary", "Accept-Encoding");
-
- /* force-gzip will just force it out regardless if the browser
- * can actually do anything with it.
- */
- if (!apr_table_get(r->subprocess_env, "force-gzip")) {
- const char *accepts;
- /* if they don't have the line, then they can't play */
- accepts = apr_table_get(r->headers_in, "Accept-Encoding");
- if (accepts == NULL) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- token = ap_get_token(r->pool, &accepts, 0);
- while (token && token[0] && strcasecmp(token, "gzip")) {
- /* skip parameters, XXX: ;q=foo evaluation? */
- while (*accepts == ';') {
- ++accepts;
- token = ap_get_token(r->pool, &accepts, 1);
- }
-
- /* retrieve next token */
- if (*accepts == ',') {
- ++accepts;
- }
- token = (*accepts) ? ap_get_token(r->pool, &accepts, 0) : NULL;
- }
-
- /* No acceptable token found. */
- if (token == NULL || token[0] == '\0') {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
- }
-
- /* Deflating a zero-length response would make it longer; the
- * proxy may pass through an empty response for a 304 too.
- * So we just need to fix up the headers as if we had a body.
- */
- if (APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(bb))) {
- if (!encoding || !strcasecmp(encoding, "identity")) {
- apr_table_set(r->headers_out, "Content-Encoding", "gzip");
- }
- else {
- apr_table_merge(r->headers_out, "Content-Encoding", "gzip");
- }
- apr_table_unset(r->headers_out, "Content-Length");
-
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* We're cool with filtering this. */
- ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx));
- ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
- ctx->buffer = apr_palloc(r->pool, c->bufferSize);
-
- zRC = deflateInit2(&ctx->stream, c->compressionlevel, Z_DEFLATED,
- c->windowSize, c->memlevel,
- Z_DEFAULT_STRATEGY);
-
- if (zRC != Z_OK) {
- f->ctx = NULL;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "unable to init Zlib: "
- "deflateInit2 returned %d: URL %s",
- zRC, r->uri);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* RFC 1952 Section 2.3 dictates the gzip header:
- *
- * +---+---+---+---+---+---+---+---+---+---+
- * |ID1|ID2|CM |FLG| MTIME |XFL|OS |
- * +---+---+---+---+---+---+---+---+---+---+
- *
- * If we wish to populate in MTIME (as hinted in RFC 1952), do:
- * putLong(date_array, apr_time_now() / APR_USEC_PER_SEC);
- * where date_array is a char[4] and then print date_array in the
- * MTIME position. WARNING: ENDIANNESS ISSUE HERE.
- */
- buf = apr_psprintf(r->pool, "%c%c%c%c%c%c%c%c%c%c", deflate_magic[0],
- deflate_magic[1], Z_DEFLATED, 0 /* flags */,
- 0, 0, 0, 0 /* 4 chars for mtime */,
- 0 /* xflags */, OS_CODE);
- e = apr_bucket_pool_create(buf, 10, r->pool, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
-
- /* If the entire Content-Encoding is "identity", we can replace it. */
- if (!encoding || !strcasecmp(encoding, "identity")) {
- apr_table_setn(r->headers_out, "Content-Encoding", "gzip");
- }
- else {
- apr_table_mergen(r->headers_out, "Content-Encoding", "gzip");
- }
- apr_table_unset(r->headers_out, "Content-Length");
-
- /* initialize deflate output buffer */
- ctx->stream.next_out = ctx->buffer;
- ctx->stream.avail_out = c->bufferSize;
- }
-
- while (!APR_BRIGADE_EMPTY(bb))
- {
- const char *data;
- apr_bucket *b;
- apr_size_t len;
- int done = 0;
-
- e = APR_BRIGADE_FIRST(bb);
-
- if (APR_BUCKET_IS_EOS(e)) {
- char *buf;
- unsigned int deflate_len;
-
- ctx->stream.avail_in = 0; /* should be zero already anyway */
- for (;;) {
- deflate_len = c->bufferSize - ctx->stream.avail_out;
-
- if (deflate_len != 0) {
- b = apr_bucket_heap_create((char *)ctx->buffer,
- deflate_len, NULL,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
- ctx->stream.next_out = ctx->buffer;
- ctx->stream.avail_out = c->bufferSize;
- }
-
- if (done) {
- break;
- }
-
- zRC = deflate(&ctx->stream, Z_FINISH);
-
- if (deflate_len == 0 && zRC == Z_BUF_ERROR) {
- zRC = Z_OK;
- }
-
- done = (ctx->stream.avail_out != 0 || zRC == Z_STREAM_END);
-
- if (zRC != Z_OK && zRC != Z_STREAM_END) {
- break;
- }
- }
-
- buf = apr_palloc(r->pool, 8);
- putLong((unsigned char *)&buf[0], ctx->crc);
- putLong((unsigned char *)&buf[4], ctx->stream.total_in);
-
- b = apr_bucket_pool_create(buf, 8, r->pool, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "Zlib: Compressed %ld to %ld : URL %s",
- ctx->stream.total_in, ctx->stream.total_out, r->uri);
-
- /* leave notes for logging */
- if (c->note_input_name) {
- apr_table_setn(r->notes, c->note_input_name,
- (ctx->stream.total_in > 0)
- ? apr_off_t_toa(r->pool,
- ctx->stream.total_in)
- : "-");
- }
-
- if (c->note_output_name) {
- apr_table_setn(r->notes, c->note_output_name,
- (ctx->stream.total_in > 0)
- ? apr_off_t_toa(r->pool,
- ctx->stream.total_out)
- : "-");
- }
-
- if (c->note_ratio_name) {
- apr_table_setn(r->notes, c->note_ratio_name,
- (ctx->stream.total_in > 0)
- ? apr_itoa(r->pool,
- (int)(ctx->stream.total_out
- * 100
- / ctx->stream.total_in))
- : "-");
- }
-
- deflateEnd(&ctx->stream);
-
- /* Remove EOS from the old list, and insert into the new. */
- APR_BUCKET_REMOVE(e);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
-
- /* Okay, we've seen the EOS.
- * Time to pass it along down the chain.
- */
- return ap_pass_brigade(f->next, ctx->bb);
- }
-
- if (APR_BUCKET_IS_FLUSH(e)) {
- apr_bucket *bkt;
- apr_status_t rv;
-
- apr_bucket_delete(e);
-
- if (ctx->stream.avail_in > 0) {
- zRC = deflate(&(ctx->stream), Z_SYNC_FLUSH);
- if (zRC != Z_OK) {
- return APR_EGENERAL;
- }
- }
-
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- b = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
- ctx->stream.avail_out = c->bufferSize;
-
- bkt = apr_bucket_flush_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, bkt);
- rv = ap_pass_brigade(f->next, ctx->bb);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- continue;
- }
-
- /* read */
- apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
-
- /* This crc32 function is from zlib. */
- ctx->crc = crc32(ctx->crc, (const Bytef *)data, len);
-
- /* write */
- ctx->stream.next_in = (unsigned char *)data; /* We just lost const-ness,
- * but we'll just have to
- * trust zlib */
- ctx->stream.avail_in = len;
-
- while (ctx->stream.avail_in != 0) {
- if (ctx->stream.avail_out == 0) {
- apr_status_t rv;
-
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- b = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
- ctx->stream.avail_out = c->bufferSize;
- /* Send what we have right now to the next filter. */
- rv = ap_pass_brigade(f->next, ctx->bb);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- }
-
- zRC = deflate(&(ctx->stream), Z_NO_FLUSH);
-
- if (zRC != Z_OK)
- return APR_EGENERAL;
- }
-
- apr_bucket_delete(e);
- }
-
- apr_brigade_cleanup(bb);
- return APR_SUCCESS;
-}
-
-/* This is the deflate input filter (inflates). */
-static apr_status_t deflate_in_filter(ap_filter_t *f,
- apr_bucket_brigade *bb,
- ap_input_mode_t mode,
- apr_read_type_e block,
- apr_off_t readbytes)
-{
- apr_bucket *bkt;
- request_rec *r = f->r;
- deflate_ctx *ctx = f->ctx;
- int zRC;
- apr_status_t rv;
- deflate_filter_config *c;
-
- /* just get out of the way of things we don't want. */
- if (mode != AP_MODE_READBYTES) {
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- c = ap_get_module_config(r->server->module_config, &deflate_module);
-
- if (!ctx) {
- int found = 0;
- char *token, deflate_hdr[10];
- const char *encoding;
- apr_size_t len;
-
- /* only work on main request/no subrequests */
- if (r->main) {
- ap_remove_input_filter(f);
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- /* Let's see what our current Content-Encoding is.
- * If gzip is present, don't gzip again. (We could, but let's not.)
- */
- encoding = apr_table_get(r->headers_in, "Content-Encoding");
- if (encoding) {
- const char *tmp = encoding;
-
- token = ap_get_token(r->pool, &tmp, 0);
- while (token && token[0]) {
- if (!strcasecmp(token, "gzip")) {
- found = 1;
- break;
- }
- /* Otherwise, skip token */
- tmp++;
- token = ap_get_token(r->pool, &tmp, 0);
- }
- }
-
- if (found == 0) {
- ap_remove_input_filter(f);
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
- ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
- ctx->proc_bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
- ctx->buffer = apr_palloc(r->pool, c->bufferSize);
-
- rv = ap_get_brigade(f->next, ctx->bb, AP_MODE_READBYTES, block, 10);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- len = 10;
- rv = apr_brigade_flatten(ctx->bb, deflate_hdr, &len);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- /* We didn't get the magic bytes. */
- if (len != 10 ||
- deflate_hdr[0] != deflate_magic[0] ||
- deflate_hdr[1] != deflate_magic[1]) {
- return APR_EGENERAL;
- }
-
- /* We can't handle flags for now. */
- if (deflate_hdr[3] != 0) {
- return APR_EGENERAL;
- }
-
- zRC = inflateInit2(&ctx->stream, c->windowSize);
-
- if (zRC != Z_OK) {
- f->ctx = NULL;
- inflateEnd(&ctx->stream);
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "unable to init Zlib: "
- "inflateInit2 returned %d: URL %s",
- zRC, r->uri);
- ap_remove_input_filter(f);
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- /* initialize deflate output buffer */
- ctx->stream.next_out = ctx->buffer;
- ctx->stream.avail_out = c->bufferSize;
-
- apr_brigade_cleanup(ctx->bb);
- }
-
- if (APR_BRIGADE_EMPTY(ctx->proc_bb)) {
- rv = ap_get_brigade(f->next, ctx->bb, mode, block, readbytes);
-
- if (rv != APR_SUCCESS) {
- /* What about APR_EAGAIN errors? */
- inflateEnd(&ctx->stream);
- return rv;
- }
-
- for (bkt = APR_BRIGADE_FIRST(ctx->bb);
- bkt != APR_BRIGADE_SENTINEL(ctx->bb);
- bkt = APR_BUCKET_NEXT(bkt))
- {
- const char *data;
- apr_size_t len;
-
- /* If we actually see the EOS, that means we screwed up! */
- if (APR_BUCKET_IS_EOS(bkt)) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
-
- if (APR_BUCKET_IS_FLUSH(bkt)) {
- apr_bucket *tmp_heap;
- zRC = inflate(&(ctx->stream), Z_SYNC_FLUSH);
- if (zRC != Z_OK) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
-
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
-
- /* Move everything to the returning brigade. */
- APR_BUCKET_REMOVE(bkt);
- APR_BRIGADE_CONCAT(bb, ctx->bb);
- break;
- }
-
- /* read */
- apr_bucket_read(bkt, &data, &len, APR_BLOCK_READ);
-
- /* pass through zlib inflate. */
- ctx->stream.next_in = (unsigned char *)data;
- ctx->stream.avail_in = len;
-
- zRC = Z_OK;
-
- while (ctx->stream.avail_in != 0) {
- if (ctx->stream.avail_out == 0) {
- apr_bucket *tmp_heap;
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
- }
-
- zRC = inflate(&ctx->stream, Z_NO_FLUSH);
-
- if (zRC == Z_STREAM_END) {
- break;
- }
-
- if (zRC != Z_OK) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
- }
- if (zRC == Z_STREAM_END) {
- apr_bucket *tmp_heap, *eos;
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "Zlib: Inflated %ld to %ld : URL %s",
- ctx->stream.total_in, ctx->stream.total_out,
- r->uri);
-
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
-
- /* Is the remaining 8 bytes already in the avail stream? */
- if (ctx->stream.avail_in >= 8) {
- unsigned long compCRC, compLen;
- compCRC = getLong(ctx->stream.next_in);
- if (ctx->crc != compCRC) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
- ctx->stream.next_in += 4;
- compLen = getLong(ctx->stream.next_in);
- if (ctx->stream.total_out != compLen) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
- }
- else {
- /* FIXME: We need to grab the 8 verification bytes
- * from the wire! */
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
-
- inflateEnd(&ctx->stream);
-
- eos = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, eos);
- break;
- }
-
- }
- apr_brigade_cleanup(ctx->bb);
- }
-
- /* If we are about to return nothing for a 'blocking' read and we have
- * some data in our zlib buffer, flush it out so we can return something.
- */
- if (block == APR_BLOCK_READ &&
- APR_BRIGADE_EMPTY(ctx->proc_bb) &&
- ctx->stream.avail_out < c->bufferSize) {
- apr_bucket *tmp_heap;
- apr_size_t len;
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
- }
-
- if (!APR_BRIGADE_EMPTY(ctx->proc_bb)) {
- apr_bucket_brigade *newbb;
-
- /* May return APR_INCOMPLETE which is fine by us. */
- apr_brigade_partition(ctx->proc_bb, readbytes, &bkt);
-
- newbb = apr_brigade_split(ctx->proc_bb, bkt);
- APR_BRIGADE_CONCAT(bb, ctx->proc_bb);
- APR_BRIGADE_CONCAT(ctx->proc_bb, newbb);
- }
-
- return APR_SUCCESS;
-}
-
-
-/* Filter to inflate for a content-transforming proxy. */
-static apr_status_t inflate_out_filter(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- int zlib_method;
- int zlib_flags;
- int deflate_init = 1;
- apr_bucket *bkt;
- request_rec *r = f->r;
- deflate_ctx *ctx = f->ctx;
- int zRC;
- apr_status_t rv;
- deflate_filter_config *c;
-
- /* Do nothing if asked to filter nothing. */
- if (APR_BRIGADE_EMPTY(bb)) {
- return APR_SUCCESS;
- }
-
- c = ap_get_module_config(r->server->module_config, &deflate_module);
-
- if (!ctx) {
- int found = 0;
- char *token;
- const char *encoding;
-
- /* only work on main request/no subrequests */
- if (r->main) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* Let's see what our current Content-Encoding is.
- * If gzip is present, don't gzip again. (We could, but let's not.)
- */
- encoding = apr_table_get(r->headers_out, "Content-Encoding");
- if (encoding) {
- const char *tmp = encoding;
-
- token = ap_get_token(r->pool, &tmp, 0);
- while (token && token[0]) {
- if (!strcasecmp(token, "gzip")) {
- found = 1;
- break;
- }
- /* Otherwise, skip token */
- tmp++;
- token = ap_get_token(r->pool, &tmp, 0);
- }
- }
-
- if (found == 0) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
- apr_table_unset(r->headers_out, "Content-Encoding");
-
- /* No need to inflate HEAD or 204/304 */
- if (APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(bb))) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
-
- f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
- ctx->proc_bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
- ctx->buffer = apr_palloc(r->pool, c->bufferSize);
-
-
- zRC = inflateInit2(&ctx->stream, c->windowSize);
-
- if (zRC != Z_OK) {
- f->ctx = NULL;
- inflateEnd(&ctx->stream);
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "unable to init Zlib: "
- "inflateInit2 returned %d: URL %s",
- zRC, r->uri);
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* initialize deflate output buffer */
- ctx->stream.next_out = ctx->buffer;
- ctx->stream.avail_out = c->bufferSize;
-
- deflate_init = 0;
- }
-
- for (bkt = APR_BRIGADE_FIRST(bb);
- bkt != APR_BRIGADE_SENTINEL(bb);
- bkt = APR_BUCKET_NEXT(bkt))
- {
- const char *data;
- apr_size_t len;
-
- /* If we actually see the EOS, that means we screwed up! */
- /* no it doesn't - not in a HEAD or 204/304 */
- if (APR_BUCKET_IS_EOS(bkt)) {
- inflateEnd(&ctx->stream);
- return ap_pass_brigade(f->next, bb);
- }
-
- if (APR_BUCKET_IS_FLUSH(bkt)) {
- apr_bucket *tmp_heap;
- zRC = inflate(&(ctx->stream), Z_SYNC_FLUSH);
- if (zRC != Z_OK) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Inflate error %d on flush", zRC);
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
-
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
-
- /* Move everything to the returning brigade. */
- APR_BUCKET_REMOVE(bkt);
- break;
- }
-
- /* read */
- apr_bucket_read(bkt, &data, &len, APR_BLOCK_READ);
-
- /* first bucket contains zlib header */
- if (!deflate_init++) {
- if (len < 10) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Insufficient data for inflate");
- return APR_EGENERAL;
- }
- else {
- zlib_method = data[2];
- zlib_flags = data[3];
- if (zlib_method != Z_DEFLATED) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "inflate: data not deflated!");
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
- if (data[0] != deflate_magic[0] ||
- data[1] != deflate_magic[1] ||
- (zlib_flags & RESERVED) != 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "inflate: bad header");
- return APR_EGENERAL ;
- }
- data += 10 ;
- len -= 10 ;
- }
- if (zlib_flags & EXTRA_FIELD) {
- unsigned int bytes = (unsigned int)(data[0]);
- bytes += ((unsigned int)(data[1])) << 8;
- bytes += 2;
- if (len < bytes) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "inflate: extra field too big (not "
- "supported)");
- return APR_EGENERAL;
- }
- data += bytes;
- len -= bytes;
- }
- if (zlib_flags & ORIG_NAME) {
- while (len-- && *data++);
- }
- if (zlib_flags & COMMENT) {
- while (len-- && *data++);
- }
- if (zlib_flags & HEAD_CRC) {
- len -= 2;
- data += 2;
- }
- }
-
- /* pass through zlib inflate. */
- ctx->stream.next_in = (unsigned char *)data;
- ctx->stream.avail_in = len;
-
- zRC = Z_OK;
-
- while (ctx->stream.avail_in != 0) {
- if (ctx->stream.avail_out == 0) {
- apr_bucket *tmp_heap;
- ctx->stream.next_out = ctx->buffer;
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
- }
-
- zRC = inflate(&ctx->stream, Z_NO_FLUSH);
-
- if (zRC == Z_STREAM_END) {
- break;
- }
-
- if (zRC != Z_OK) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
- }
- if (zRC == Z_STREAM_END) {
- apr_bucket *tmp_heap, *eos;
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "Zlib: Inflated %ld to %ld : URL %s",
- ctx->stream.total_in, ctx->stream.total_out,
- r->uri);
-
- len = c->bufferSize - ctx->stream.avail_out;
-
- ctx->crc = crc32(ctx->crc, (const Bytef *)ctx->buffer, len);
- tmp_heap = apr_bucket_heap_create((char *)ctx->buffer, len,
- NULL, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, tmp_heap);
- ctx->stream.avail_out = c->bufferSize;
-
- /* Is the remaining 8 bytes already in the avail stream? */
- if (ctx->stream.avail_in >= 8) {
- unsigned long compCRC, compLen;
- compCRC = getLong(ctx->stream.next_in);
- if (ctx->crc != compCRC) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
- ctx->stream.next_in += 4;
- compLen = getLong(ctx->stream.next_in);
- if (ctx->stream.total_out != compLen) {
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
- }
- else {
- /* FIXME: We need to grab the 8 verification bytes
- * from the wire! */
- inflateEnd(&ctx->stream);
- return APR_EGENERAL;
- }
-
- inflateEnd(&ctx->stream);
-
- eos = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->proc_bb, eos);
- break;
- }
-
- }
-
- rv = ap_pass_brigade(f->next, ctx->proc_bb);
- apr_brigade_cleanup(ctx->proc_bb);
- return rv ;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_output_filter(deflateFilterName, deflate_out_filter, NULL,
- AP_FTYPE_CONTENT_SET);
- ap_register_output_filter("INFLATE", inflate_out_filter, NULL,
- AP_FTYPE_RESOURCE-1);
- ap_register_input_filter(deflateFilterName, deflate_in_filter, NULL,
- AP_FTYPE_CONTENT_SET);
-}
-
-static const command_rec deflate_filter_cmds[] = {
- AP_INIT_TAKE12("DeflateFilterNote", deflate_set_note, NULL, RSRC_CONF,
- "Set a note to report on compression ratio"),
- AP_INIT_TAKE1("DeflateWindowSize", deflate_set_window_size, NULL,
- RSRC_CONF, "Set the Deflate window size (1-15)"),
- AP_INIT_TAKE1("DeflateBufferSize", deflate_set_buffer_size, NULL, RSRC_CONF,
- "Set the Deflate Buffer Size"),
- AP_INIT_TAKE1("DeflateMemLevel", deflate_set_memlevel, NULL, RSRC_CONF,
- "Set the Deflate Memory Level (1-9)"),
- AP_INIT_TAKE1("DeflateCompressionLevel", deflate_set_compressionlevel, NULL, RSRC_CONF,
- "Set the Deflate Compression Level (1-9)"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA deflate_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_deflate_server_config, /* server config */
- NULL, /* merge server config */
- deflate_filter_cmds, /* command table */
- register_hooks /* register hooks */
-};
diff --git a/modules/filters/mod_deflate.dsp b/modules/filters/mod_deflate.dsp
deleted file mode 100644
index d703f8934b..0000000000
--- a/modules/filters/mod_deflate.dsp
+++ /dev/null
@@ -1,176 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_deflate" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_deflate - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_deflate.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_deflate.mak" CFG="mod_deflate - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_deflate - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_deflate - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_deflate - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "HAVE_ZUTIL_H" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/zlib" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_deflate_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_deflate.so" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_deflate.so" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_deflate - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/zlib" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "HAVE_ZUTIL_H" /Fd"Debug\mod_deflate_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_deflate.so" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_deflate.so" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_deflate - Win32 Release"
-# Name "mod_deflate - Win32 Debug"
-# Begin Group "zlib"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\adler32.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\crc32.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\deflate.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\infblock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\infcodes.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\inffast.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\inflate.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\inftrees.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\infutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\trees.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\srclib\zlib\zutil.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_deflate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_deflate.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_deflate - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_deflate.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_deflate.so "deflate_module for Apache" ../../include/ap_release.h > .\mod_deflate.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_deflate - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_deflate.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_deflate.so "deflate_module for Apache" ../../include/ap_release.h > .\mod_deflate.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/filters/mod_deflate.exp b/modules/filters/mod_deflate.exp
deleted file mode 100644
index 9ec76883cd..0000000000
--- a/modules/filters/mod_deflate.exp
+++ /dev/null
@@ -1 +0,0 @@
-deflate_module
diff --git a/modules/filters/mod_ext_filter.c b/modules/filters/mod_ext_filter.c
deleted file mode 100644
index d83d7303e6..0000000000
--- a/modules/filters/mod_ext_filter.c
+++ /dev/null
@@ -1,906 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_ext_filter allows Unix-style filters to filter http content.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#define CORE_PRIVATE
-#include "http_core.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-#include "util_script.h"
-#include "util_time.h"
-#include "apr_strings.h"
-#include "apr_hash.h"
-#include "apr_lib.h"
-#include "apr_poll.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-typedef struct ef_server_t {
- apr_pool_t *p;
- apr_hash_t *h;
-} ef_server_t;
-
-typedef struct ef_filter_t {
- const char *name;
- enum {INPUT_FILTER=1, OUTPUT_FILTER} mode;
- ap_filter_type ftype;
- const char *command;
- const char *enable_env;
- const char *disable_env;
- char **args;
- const char *intype; /* list of IMTs we process (well, just one for now) */
-#define INTYPE_ALL (char *)1
- const char *outtype; /* IMT of filtered output */
-#define OUTTYPE_UNCHANGED (char *)1
- int preserves_content_length;
-} ef_filter_t;
-
-typedef struct ef_dir_t {
- int debug;
- int log_stderr;
-} ef_dir_t;
-
-typedef struct ef_ctx_t {
- apr_pool_t *p;
- apr_proc_t *proc;
- apr_procattr_t *procattr;
- ef_dir_t *dc;
- ef_filter_t *filter;
- int noop;
-#if APR_FILES_AS_SOCKETS
- apr_pollset_t *pollset;
-#endif
-} ef_ctx_t;
-
-module AP_MODULE_DECLARE_DATA ext_filter_module;
-static const server_rec *main_server;
-
-static apr_status_t ef_output_filter(ap_filter_t *, apr_bucket_brigade *);
-static apr_status_t ef_input_filter(ap_filter_t *, apr_bucket_brigade *,
- ap_input_mode_t, apr_read_type_e,
- apr_off_t);
-
-#define DBGLVL_SHOWOPTIONS 1
-#define DBGLVL_ERRORCHECK 2
-#define DBGLVL_GORY 9
-
-#define ERRFN_USERDATA_KEY "EXTFILTCHILDERRFN"
-
-static void *create_ef_dir_conf(apr_pool_t *p, char *dummy)
-{
- ef_dir_t *dc = (ef_dir_t *)apr_pcalloc(p, sizeof(ef_dir_t));
-
- dc->debug = -1;
- dc->log_stderr = -1;
-
- return dc;
-}
-
-static void *create_ef_server_conf(apr_pool_t *p, server_rec *s)
-{
- ef_server_t *conf;
-
- conf = (ef_server_t *)apr_pcalloc(p, sizeof(ef_server_t));
- conf->p = p;
- conf->h = apr_hash_make(conf->p);
- return conf;
-}
-
-static void *merge_ef_dir_conf(apr_pool_t *p, void *basev, void *overridesv)
-{
- ef_dir_t *a = (ef_dir_t *)apr_pcalloc (p, sizeof(ef_dir_t));
- ef_dir_t *base = (ef_dir_t *)basev, *over = (ef_dir_t *)overridesv;
-
- if (over->debug != -1) { /* if admin coded something... */
- a->debug = over->debug;
- }
- else {
- a->debug = base->debug;
- }
-
- if (over->log_stderr != -1) { /* if admin coded something... */
- a->log_stderr = over->log_stderr;
- }
- else {
- a->log_stderr = base->log_stderr;
- }
-
- return a;
-}
-
-static const char *add_options(cmd_parms *cmd, void *in_dc,
- const char *arg)
-{
- ef_dir_t *dc = in_dc;
-
- if (!strncasecmp(arg, "DebugLevel=", 11)) {
- dc->debug = atoi(arg + 11);
- }
- else if (!strcasecmp(arg, "LogStderr")) {
- dc->log_stderr = 1;
- }
- else if (!strcasecmp(arg, "NoLogStderr")) {
- dc->log_stderr = 0;
- }
- else {
- return apr_pstrcat(cmd->temp_pool,
- "Invalid ExtFilterOptions option: ",
- arg,
- NULL);
- }
-
- return NULL;
-}
-
-static const char *parse_cmd(apr_pool_t *p, const char **args, ef_filter_t *filter)
-{
- if (**args == '"') {
- const char *start = *args + 1;
- char *parms;
- int escaping = 0;
- apr_status_t rv;
-
- ++*args; /* move past leading " */
- /* find true end of args string (accounting for escaped quotes) */
- while (**args && (**args != '"' || (**args == '"' && escaping))) {
- if (escaping) {
- escaping = 0;
- }
- else if (**args == '\\') {
- escaping = 1;
- }
- ++*args;
- }
- if (**args != '"') {
- return "Expected cmd= delimiter";
- }
- /* copy *just* the arg string for parsing, */
- parms = apr_pstrndup(p, start, *args - start);
- ++*args; /* move past trailing " */
-
- /* parse and tokenize the args. */
- rv = apr_tokenize_to_argv(parms, &(filter->args), p);
- if (rv != APR_SUCCESS) {
- return "cmd= parse error";
- }
- }
- else
- {
- /* simple path */
- /* Allocate space for two argv pointers and parse the args. */
- filter->args = (char **)apr_palloc(p, 2 * sizeof(char *));
- filter->args[0] = ap_getword_white(p, args);
- filter->args[1] = NULL; /* end of args */
- }
- if (!filter->args[0]) {
- return "Invalid cmd= parameter";
- }
- filter->command = filter->args[0];
-
- return NULL;
-}
-
-static const char *define_filter(cmd_parms *cmd, void *dummy, const char *args)
-{
- ef_server_t *conf = ap_get_module_config(cmd->server->module_config,
- &ext_filter_module);
- const char *token;
- const char *name;
- ef_filter_t *filter;
-
- name = ap_getword_white(cmd->pool, &args);
- if (!name) {
- return "Filter name not found";
- }
-
- if (apr_hash_get(conf->h, name, APR_HASH_KEY_STRING)) {
- return apr_psprintf(cmd->pool, "ExtFilter %s is already defined",
- name);
- }
-
- filter = (ef_filter_t *)apr_pcalloc(conf->p, sizeof(ef_filter_t));
- filter->name = name;
- filter->mode = OUTPUT_FILTER;
- filter->ftype = AP_FTYPE_RESOURCE;
- apr_hash_set(conf->h, name, APR_HASH_KEY_STRING, filter);
-
- while (*args) {
- while (apr_isspace(*args)) {
- ++args;
- }
-
- /* Nasty parsing... I wish I could simply use ap_getword_white()
- * here and then look at the token, but ap_getword_white() doesn't
- * do the right thing when we have cmd="word word word"
- */
- if (!strncasecmp(args, "preservescontentlength", 22)) {
- token = ap_getword_white(cmd->pool, &args);
- if (!strcasecmp(token, "preservescontentlength")) {
- filter->preserves_content_length = 1;
- }
- else {
- return apr_psprintf(cmd->pool,
- "mangled argument `%s'",
- token);
- }
- continue;
- }
-
- if (!strncasecmp(args, "mode=", 5)) {
- args += 5;
- token = ap_getword_white(cmd->pool, &args);
- if (!strcasecmp(token, "output")) {
- filter->mode = OUTPUT_FILTER;
- }
- else if (!strcasecmp(token, "input")) {
- filter->mode = INPUT_FILTER;
- }
- else {
- return apr_psprintf(cmd->pool, "Invalid mode: `%s'",
- token);
- }
- continue;
- }
-
- if (!strncasecmp(args, "ftype=", 6)) {
- args += 6;
- token = ap_getword_white(cmd->pool, &args);
- filter->ftype = atoi(token);
- continue;
- }
-
- if (!strncasecmp(args, "enableenv=", 10)) {
- args += 10;
- token = ap_getword_white(cmd->pool, &args);
- filter->enable_env = token;
- continue;
- }
-
- if (!strncasecmp(args, "disableenv=", 11)) {
- args += 11;
- token = ap_getword_white(cmd->pool, &args);
- filter->disable_env = token;
- continue;
- }
-
- if (!strncasecmp(args, "intype=", 7)) {
- args += 7;
- filter->intype = ap_getword_white(cmd->pool, &args);
- continue;
- }
-
- if (!strncasecmp(args, "outtype=", 8)) {
- args += 8;
- filter->outtype = ap_getword_white(cmd->pool, &args);
- continue;
- }
-
- if (!strncasecmp(args, "cmd=", 4)) {
- args += 4;
- if ((token = parse_cmd(cmd->pool, &args, filter))) {
- return token;
- }
- continue;
- }
-
- return apr_psprintf(cmd->pool, "Unexpected parameter: `%s'",
- args);
- }
-
- /* parsing is done... register the filter
- */
- if (filter->mode == OUTPUT_FILTER) {
- /* XXX need a way to ensure uniqueness among all filters */
- ap_register_output_filter(filter->name, ef_output_filter, NULL, filter->ftype);
- }
- else if (filter->mode == INPUT_FILTER) {
- /* XXX need a way to ensure uniqueness among all filters */
- ap_register_input_filter(filter->name, ef_input_filter, NULL, filter->ftype);
- }
- else {
- ap_assert(1 != 1); /* we set the field wrong somehow */
- }
-
- return NULL;
-}
-
-static const command_rec cmds[] =
-{
- AP_INIT_ITERATE("ExtFilterOptions",
- add_options,
- NULL,
- ACCESS_CONF, /* same as SetInputFilter/SetOutputFilter */
- "valid options: DebugLevel=n, LogStderr, NoLogStderr"),
- AP_INIT_RAW_ARGS("ExtFilterDefine",
- define_filter,
- NULL,
- RSRC_CONF,
- "Define an external filter"),
- {NULL}
-};
-
-static int ef_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_s)
-{
- main_server = main_s;
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_post_config(ef_init, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-static apr_status_t set_resource_limits(request_rec *r,
- apr_procattr_t *procattr)
-{
-#if defined(RLIMIT_CPU) || defined(RLIMIT_NPROC) || \
- defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined (RLIMIT_AS)
- core_dir_config *conf =
- (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
- apr_status_t rv;
-
-#ifdef RLIMIT_CPU
- rv = apr_procattr_limit_set(procattr, APR_LIMIT_CPU, conf->limit_cpu);
- ap_assert(rv == APR_SUCCESS); /* otherwise, we're out of sync with APR */
-#endif
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
- rv = apr_procattr_limit_set(procattr, APR_LIMIT_MEM, conf->limit_mem);
- ap_assert(rv == APR_SUCCESS); /* otherwise, we're out of sync with APR */
-#endif
-#ifdef RLIMIT_NPROC
- rv = apr_procattr_limit_set(procattr, APR_LIMIT_NPROC, conf->limit_nproc);
- ap_assert(rv == APR_SUCCESS); /* otherwise, we're out of sync with APR */
-#endif
-
-#endif /* if at least one limit defined */
-
- return APR_SUCCESS;
-}
-
-static apr_status_t ef_close_file(void *vfile)
-{
- return apr_file_close(vfile);
-}
-
-static void child_errfn(apr_pool_t *pool, apr_status_t err, const char *description)
-{
- request_rec *r;
- void *vr;
- apr_file_t *stderr_log;
- char errbuf[200];
- char time_str[APR_CTIME_LEN];
-
- apr_pool_userdata_get(&vr, ERRFN_USERDATA_KEY, pool);
- r = vr;
- apr_file_open_stderr(&stderr_log, pool);
- ap_recent_ctime(time_str, apr_time_now());
- apr_file_printf(stderr_log,
- "[%s] [client %s] mod_ext_filter (%d)%s: %s\n",
- time_str,
- r->connection->remote_ip,
- err,
- apr_strerror(err, errbuf, sizeof(errbuf)),
- description);
-}
-
-/* init_ext_filter_process: get the external filter process going
- * This is per-filter-instance (i.e., per-request) initialization.
- */
-static apr_status_t init_ext_filter_process(ap_filter_t *f)
-{
- ef_ctx_t *ctx = f->ctx;
- apr_status_t rc;
- ef_dir_t *dc = ctx->dc;
- const char * const *env;
-
- ctx->proc = apr_pcalloc(ctx->p, sizeof(*ctx->proc));
-
- rc = apr_procattr_create(&ctx->procattr, ctx->p);
- ap_assert(rc == APR_SUCCESS);
-
- rc = apr_procattr_io_set(ctx->procattr,
- APR_CHILD_BLOCK,
- APR_CHILD_BLOCK,
- APR_CHILD_BLOCK);
- ap_assert(rc == APR_SUCCESS);
-
- rc = set_resource_limits(f->r, ctx->procattr);
- ap_assert(rc == APR_SUCCESS);
-
- if (dc->log_stderr > 0) {
- rc = apr_procattr_child_err_set(ctx->procattr,
- f->r->server->error_log, /* stderr in child */
- NULL);
- ap_assert(rc == APR_SUCCESS);
- }
-
- rc = apr_procattr_child_errfn_set(ctx->procattr, child_errfn);
- ap_assert(rc == APR_SUCCESS);
- apr_pool_userdata_set(f->r, ERRFN_USERDATA_KEY, apr_pool_cleanup_null, ctx->p);
-
- if (dc->debug >= DBGLVL_ERRORCHECK) {
- rc = apr_procattr_error_check_set(ctx->procattr, 1);
- ap_assert(rc == APR_SUCCESS);
- }
-
- /* add standard CGI variables as well as DOCUMENT_URI, DOCUMENT_PATH_INFO,
- * and QUERY_STRING_UNESCAPED
- */
- ap_add_cgi_vars(f->r);
- ap_add_common_vars(f->r);
- apr_table_setn(f->r->subprocess_env, "DOCUMENT_URI", f->r->uri);
- apr_table_setn(f->r->subprocess_env, "DOCUMENT_PATH_INFO", f->r->path_info);
- if (f->r->args) {
- /* QUERY_STRING is added by ap_add_cgi_vars */
- char *arg_copy = apr_pstrdup(f->r->pool, f->r->args);
- ap_unescape_url(arg_copy);
- apr_table_setn(f->r->subprocess_env, "QUERY_STRING_UNESCAPED",
- ap_escape_shell_cmd(f->r->pool, arg_copy));
- }
-
- env = (const char * const *) ap_create_environment(ctx->p,
- f->r->subprocess_env);
-
- rc = apr_proc_create(ctx->proc,
- ctx->filter->command,
- (const char * const *)ctx->filter->args,
- env, /* environment */
- ctx->procattr,
- ctx->p);
- if (rc != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, f->r,
- "couldn't create child process to run `%s'",
- ctx->filter->command);
- return rc;
- }
-
- apr_pool_note_subprocess(ctx->p, ctx->proc, APR_KILL_AFTER_TIMEOUT);
-
- /* We don't want the handle to the child's stdin inherited by any
- * other processes created by httpd. Otherwise, when we close our
- * handle, the child won't see EOF because another handle will still
- * be open.
- */
-
- apr_pool_cleanup_register(ctx->p, ctx->proc->in,
- apr_pool_cleanup_null, /* other mechanism */
- ef_close_file);
-
-#if APR_FILES_AS_SOCKETS
- {
- apr_pollfd_t pfd = { 0 };
-
- rc = apr_pollset_create(&ctx->pollset, 2, ctx->p, 0);
- ap_assert(rc == APR_SUCCESS);
-
- pfd.p = ctx->p;
- pfd.desc_type = APR_POLL_FILE;
- pfd.reqevents = APR_POLLOUT;
- pfd.desc.f = ctx->proc->in;
- rc = apr_pollset_add(ctx->pollset, &pfd);
- ap_assert(rc == APR_SUCCESS);
-
- pfd.reqevents = APR_POLLIN;
- pfd.desc.f = ctx->proc->out;
- rc = apr_pollset_add(ctx->pollset, &pfd);
- ap_assert(rc == APR_SUCCESS);
- }
-#endif
-
- return APR_SUCCESS;
-}
-
-static const char *get_cfg_string(ef_dir_t *dc, ef_filter_t *filter, apr_pool_t *p)
-{
- const char *debug_str = dc->debug == -1 ?
- "DebugLevel=0" : apr_psprintf(p, "DebugLevel=%d", dc->debug);
- const char *log_stderr_str = dc->log_stderr < 1 ?
- "NoLogStderr" : "LogStderr";
- const char *preserve_content_length_str = filter->preserves_content_length ?
- "PreservesContentLength" : "!PreserveContentLength";
- const char *intype_str = !filter->intype ?
- "*/*" : filter->intype;
- const char *outtype_str = !filter->outtype ?
- "(unchanged)" : filter->outtype;
-
- return apr_psprintf(p,
- "ExtFilterOptions %s %s %s ExtFilterInType %s "
- "ExtFilterOuttype %s",
- debug_str, log_stderr_str, preserve_content_length_str,
- intype_str, outtype_str);
-}
-
-static ef_filter_t *find_filter_def(const server_rec *s, const char *fname)
-{
- ef_server_t *sc;
- ef_filter_t *f;
-
- sc = ap_get_module_config(s->module_config, &ext_filter_module);
- f = apr_hash_get(sc->h, fname, APR_HASH_KEY_STRING);
- if (!f && s != main_server) {
- s = main_server;
- sc = ap_get_module_config(s->module_config, &ext_filter_module);
- f = apr_hash_get(sc->h, fname, APR_HASH_KEY_STRING);
- }
- return f;
-}
-
-static apr_status_t init_filter_instance(ap_filter_t *f)
-{
- ef_ctx_t *ctx;
- ef_dir_t *dc;
- apr_status_t rv;
-
- f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(ef_ctx_t));
- dc = ap_get_module_config(f->r->per_dir_config,
- &ext_filter_module);
- ctx->dc = dc;
- /* look for the user-defined filter */
- ctx->filter = find_filter_def(f->r->server, f->frec->name);
- if (!ctx->filter) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
- "couldn't find definition of filter '%s'",
- f->frec->name);
- return APR_EINVAL;
- }
- ctx->p = f->r->pool;
- if (ctx->filter->intype &&
- ctx->filter->intype != INTYPE_ALL) {
- const char *ctypes;
-
- if (ctx->filter->mode == INPUT_FILTER) {
- ctypes = apr_table_get(f->r->headers_in, "Content-Type");
- }
- else {
- ctypes = f->r->content_type;
- }
-
- if (ctypes) {
- const char *ctype = ap_getword(f->r->pool, &ctypes, ';');
-
- if (strcasecmp(ctx->filter->intype, ctype)) {
- /* wrong IMT for us; don't mess with the output */
- ctx->noop = 1;
- }
- }
- else {
- ctx->noop = 1;
- }
- }
- if (ctx->filter->enable_env &&
- !apr_table_get(f->r->subprocess_env, ctx->filter->enable_env)) {
- /* an environment variable that enables the filter isn't set; bail */
- ctx->noop = 1;
- }
- if (ctx->filter->disable_env &&
- apr_table_get(f->r->subprocess_env, ctx->filter->disable_env)) {
- /* an environment variable that disables the filter is set; bail */
- ctx->noop = 1;
- }
- if (!ctx->noop) {
- rv = init_ext_filter_process(f);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- if (ctx->filter->outtype &&
- ctx->filter->outtype != OUTTYPE_UNCHANGED) {
- ap_set_content_type(f->r, ctx->filter->outtype);
- }
- if (ctx->filter->preserves_content_length != 1) {
- /* nasty, but needed to avoid confusing the browser
- */
- apr_table_unset(f->r->headers_out, "Content-Length");
- }
- }
-
- if (dc->debug >= DBGLVL_SHOWOPTIONS) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
- "%sfiltering `%s' of type `%s' through `%s', cfg %s",
- ctx->noop ? "NOT " : "",
- f->r->uri ? f->r->uri : f->r->filename,
- f->r->content_type ? f->r->content_type : "(unspecified)",
- ctx->filter->command,
- get_cfg_string(dc, ctx->filter, f->r->pool));
- }
-
- return APR_SUCCESS;
-}
-
-/* drain_available_output():
- *
- * if any data is available from the filter, read it and append it
- * to the the bucket brigade
- */
-static apr_status_t drain_available_output(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- ef_ctx_t *ctx = f->ctx;
- ef_dir_t *dc = ctx->dc;
- apr_size_t len;
- char buf[4096];
- apr_status_t rv;
- apr_bucket *b;
-
- while (1) {
- len = sizeof(buf);
- rv = apr_file_read(ctx->proc->out,
- buf,
- &len);
- if ((rv && !APR_STATUS_IS_EAGAIN(rv)) ||
- dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r,
- "apr_file_read(child output), len %" APR_SIZE_T_FMT,
- !rv ? len : -1);
- }
- if (rv != APR_SUCCESS) {
- return rv;
- }
- b = apr_bucket_heap_create(buf, len, NULL, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- return APR_SUCCESS;
- }
- /* we should never get here; if we do, a bogus error message would be
- * the least of our problems
- */
- return APR_ANONYMOUS;
-}
-
-static apr_status_t pass_data_to_filter(ap_filter_t *f, const char *data,
- apr_size_t len, apr_bucket_brigade *bb)
-{
- ef_ctx_t *ctx = f->ctx;
- ef_dir_t *dc = ctx->dc;
- apr_status_t rv;
- apr_size_t bytes_written = 0;
- apr_size_t tmplen;
-
- do {
- tmplen = len - bytes_written;
- rv = apr_file_write(ctx->proc->in,
- (const char *)data + bytes_written,
- &tmplen);
- bytes_written += tmplen;
- if (rv != APR_SUCCESS && !APR_STATUS_IS_EAGAIN(rv)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
- "apr_file_write(child input), len %" APR_SIZE_T_FMT,
- tmplen);
- return rv;
- }
- if (APR_STATUS_IS_EAGAIN(rv)) {
- /* XXX handle blocking conditions here... if we block, we need
- * to read data from the child process and pass it down to the
- * next filter!
- */
- rv = drain_available_output(f, bb);
- if (APR_STATUS_IS_EAGAIN(rv)) {
-#if APR_FILES_AS_SOCKETS
- int num_events;
- const apr_pollfd_t *pdesc;
-
- rv = apr_pollset_poll(ctx->pollset, f->r->server->timeout,
- &num_events, &pdesc);
- if (rv || dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG,
- rv, f->r, "apr_pollset_poll()");
- }
- if (rv != APR_SUCCESS && !APR_STATUS_IS_EINTR(rv)) {
- /* some error such as APR_TIMEUP */
- return rv;
- }
-#else /* APR_FILES_AS_SOCKETS */
- /* Yuck... I'd really like to wait until I can read
- * or write, but instead I have to sleep and try again
- */
- apr_sleep(100000); /* 100 milliseconds */
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG,
- 0, f->r, "apr_sleep()");
- }
-#endif /* APR_FILES_AS_SOCKETS */
- }
- else if (rv != APR_SUCCESS) {
- return rv;
- }
- }
- } while (bytes_written < len);
- return rv;
-}
-
-/* ef_unified_filter:
- *
- * runs the bucket brigade bb through the filter and puts the result into
- * bb, dropping the previous content of bb (the input)
- */
-
-static int ef_unified_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- ef_ctx_t *ctx = f->ctx;
- apr_bucket *b;
- ef_dir_t *dc;
- apr_size_t len;
- const char *data;
- apr_status_t rv;
- char buf[4096];
- apr_bucket *eos = NULL;
- apr_bucket_brigade *bb_tmp;
-
- dc = ctx->dc;
- bb_tmp = apr_brigade_create(r->pool, c->bucket_alloc);
-
- for (b = APR_BRIGADE_FIRST(bb);
- b != APR_BRIGADE_SENTINEL(bb);
- b = APR_BUCKET_NEXT(b))
- {
- if (APR_BUCKET_IS_EOS(b)) {
- eos = b;
- break;
- }
-
- rv = apr_bucket_read(b, &data, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "apr_bucket_read()");
- return rv;
- }
-
- /* Good cast, we just tested len isn't negative */
- if (len > 0 &&
- (rv = pass_data_to_filter(f, data, (apr_size_t)len, bb_tmp))
- != APR_SUCCESS) {
- return rv;
- }
- }
-
- apr_brigade_cleanup(bb);
- APR_BRIGADE_CONCAT(bb, bb_tmp);
- apr_brigade_destroy(bb_tmp);
-
- if (eos) {
- /* close the child's stdin to signal that no more data is coming;
- * that will cause the child to finish generating output
- */
- if ((rv = apr_file_close(ctx->proc->in)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "apr_file_close(child input)");
- return rv;
- }
- /* since we've seen eos and closed the child's stdin, set the proper pipe
- * timeout; we don't care if we don't return from apr_file_read() for a while...
- */
- rv = apr_file_pipe_timeout_set(ctx->proc->out,
- r->server->timeout);
- if (rv) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "apr_file_pipe_timeout_set(child output)");
- return rv;
- }
- }
-
- do {
- len = sizeof(buf);
- rv = apr_file_read(ctx->proc->out,
- buf,
- &len);
- if ((rv && !APR_STATUS_IS_EOF(rv) && !APR_STATUS_IS_EAGAIN(rv)) ||
- dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r,
- "apr_file_read(child output), len %" APR_SIZE_T_FMT,
- !rv ? len : -1);
- }
- if (APR_STATUS_IS_EAGAIN(rv)) {
- if (eos) {
- /* should not occur, because we have an APR timeout in place */
- AP_DEBUG_ASSERT(1 != 1);
- }
- return APR_SUCCESS;
- }
-
- if (rv == APR_SUCCESS) {
- b = apr_bucket_heap_create(buf, len, NULL, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- }
- } while (rv == APR_SUCCESS);
-
- if (!APR_STATUS_IS_EOF(rv)) {
- return rv;
- }
-
- if (eos) {
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
- ef_ctx_t *ctx = f->ctx;
- apr_status_t rv;
-
- if (!ctx) {
- if ((rv = init_filter_instance(f)) != APR_SUCCESS) {
- return rv;
- }
- ctx = f->ctx;
- }
- if (ctx->noop) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- rv = ef_unified_filter(f, bb);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "ef_unified_filter() failed");
- }
-
- if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "ap_pass_brigade() failed");
- }
- return rv;
-}
-
-static int ef_input_filter(ap_filter_t *f, apr_bucket_brigade *bb,
- ap_input_mode_t mode, apr_read_type_e block,
- apr_off_t readbytes)
-{
- ef_ctx_t *ctx = f->ctx;
- apr_status_t rv;
-
- if (!ctx) {
- if ((rv = init_filter_instance(f)) != APR_SUCCESS) {
- return rv;
- }
- ctx = f->ctx;
- }
-
- if (ctx->noop) {
- ap_remove_input_filter(f);
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- rv = ap_get_brigade(f->next, bb, mode, block, readbytes);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- rv = ef_unified_filter(f, bb);
- return rv;
-}
-
-module AP_MODULE_DECLARE_DATA ext_filter_module =
-{
- STANDARD20_MODULE_STUFF,
- create_ef_dir_conf,
- merge_ef_dir_conf,
- create_ef_server_conf,
- NULL,
- cmds,
- register_hooks
-};
diff --git a/modules/filters/mod_ext_filter.dsp b/modules/filters/mod_ext_filter.dsp
deleted file mode 100644
index a4a985dbf2..0000000000
--- a/modules/filters/mod_ext_filter.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_ext_filter" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_ext_filter - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_ext_filter.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_ext_filter.mak" CFG="mod_ext_filter - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_ext_filter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_ext_filter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_ext_filter - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_ext_filter_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_ext_filter.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ext_filter.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_ext_filter.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ext_filter.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_ext_filter - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_ext_filter_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_ext_filter.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ext_filter.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_ext_filter.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ext_filter.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_ext_filter - Win32 Release"
-# Name "mod_ext_filter - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_ext_filter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_ext_filter.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_ext_filter - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ext_filter.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_ext_filter.so "ext_filter_module for Apache" ../../include/ap_release.h > .\mod_ext_filter.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_ext_filter - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ext_filter.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_ext_filter.so "ext_filter_module for Apache" ../../include/ap_release.h > .\mod_ext_filter.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/filters/mod_ext_filter.exp b/modules/filters/mod_ext_filter.exp
deleted file mode 100644
index ed3b8fc60c..0000000000
--- a/modules/filters/mod_ext_filter.exp
+++ /dev/null
@@ -1 +0,0 @@
-ext_filter_module
diff --git a/modules/filters/mod_include.c b/modules/filters/mod_include.c
deleted file mode 100644
index ca68b45389..0000000000
--- a/modules/filters/mod_include.c
+++ /dev/null
@@ -1,3841 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"
-#include "apr_hash.h"
-#include "apr_user.h"
-#include "apr_lib.h"
-#include "apr_optional.h"
-
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-#include "mod_include.h"
-
-/* helper for Latin1 <-> entity encoding */
-#if APR_CHARSET_EBCDIC
-#include "util_ebcdic.h"
-#define RAW_ASCII_CHAR(ch) apr_xlate_conv_byte(ap_hdrs_from_ascii, \
- (unsigned char)ch)
-#else /* APR_CHARSET_EBCDIC */
-#define RAW_ASCII_CHAR(ch) (ch)
-#endif /* !APR_CHARSET_EBCDIC */
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Types and Structures
- * | |
- * +-------------------------------------------------------+
- */
-
-/* sll used for string expansion */
-typedef struct result_item {
- struct result_item *next;
- apr_size_t len;
- const char *string;
-} result_item_t;
-
-/* conditional expression parser stuff */
-typedef enum {
- TOKEN_STRING,
- TOKEN_RE,
- TOKEN_AND,
- TOKEN_OR,
- TOKEN_NOT,
- TOKEN_EQ,
- TOKEN_NE,
- TOKEN_RBRACE,
- TOKEN_LBRACE,
- TOKEN_GROUP,
- TOKEN_GE,
- TOKEN_LE,
- TOKEN_GT,
- TOKEN_LT
-} token_type_t;
-
-typedef struct {
- token_type_t type;
- const char *value;
-#ifdef DEBUG_INCLUDE
- const char *s;
-#endif
-} token_t;
-
-typedef struct parse_node {
- struct parse_node *parent;
- struct parse_node *left;
- struct parse_node *right;
- token_t token;
- int value;
- int done;
-#ifdef DEBUG_INCLUDE
- int dump_done;
-#endif
-} parse_node_t;
-
-typedef enum {
- XBITHACK_OFF,
- XBITHACK_ON,
- XBITHACK_FULL
-} xbithack_t;
-
-typedef struct {
- const char *default_error_msg;
- const char *default_time_fmt;
- const char *undefined_echo;
- xbithack_t xbithack;
-} include_dir_config;
-
-typedef struct {
- const char *default_start_tag;
- const char *default_end_tag;
-} include_server_config;
-
-/* main parser states */
-typedef enum {
- PARSE_PRE_HEAD,
- PARSE_HEAD,
- PARSE_DIRECTIVE,
- PARSE_DIRECTIVE_POSTNAME,
- PARSE_DIRECTIVE_TAIL,
- PARSE_DIRECTIVE_POSTTAIL,
- PARSE_PRE_ARG,
- PARSE_ARG,
- PARSE_ARG_NAME,
- PARSE_ARG_POSTNAME,
- PARSE_ARG_EQ,
- PARSE_ARG_PREVAL,
- PARSE_ARG_VAL,
- PARSE_ARG_VAL_ESC,
- PARSE_ARG_POSTVAL,
- PARSE_TAIL,
- PARSE_TAIL_SEQ,
- PARSE_EXECUTE
-} parse_state_t;
-
-typedef struct arg_item {
- struct arg_item *next;
- char *name;
- apr_size_t name_len;
- char *value;
- apr_size_t value_len;
-} arg_item_t;
-
-typedef struct {
- const char *source;
- const char *rexp;
- apr_size_t nsub;
- regmatch_t match[AP_MAX_REG_MATCH];
-} backref_t;
-
-typedef struct {
- unsigned int T[256];
- unsigned int x;
- apr_size_t pattern_len;
-} bndm_t;
-
-struct ssi_internal_ctx {
- parse_state_t state;
- int seen_eos;
- int error;
- char quote; /* quote character value (or \0) */
- apr_size_t parse_pos; /* parse position of partial matches */
- apr_size_t bytes_read;
-
- apr_bucket_brigade *tmp_bb;
-
- request_rec *r;
- const char *start_seq;
- bndm_t *start_seq_pat;
- const char *end_seq;
- apr_size_t end_seq_len;
- char *directive; /* name of the current directive */
- apr_size_t directive_len; /* length of the current directive name */
-
- arg_item_t *current_arg; /* currently parsed argument */
- arg_item_t *argv; /* all arguments */
-
- backref_t *re; /* NULL if there wasn't a regex yet */
-
- const char *undefined_echo;
- apr_size_t undefined_echo_len;
-
-#ifdef DEBUG_INCLUDE
- struct {
- ap_filter_t *f;
- apr_bucket_brigade *bb;
- } debug;
-#endif
-};
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Debugging Utilities
- * | |
- * +-------------------------------------------------------+
- */
-
-#ifdef DEBUG_INCLUDE
-
-#define TYPE_TOKEN(token, ttype) do { \
- (token)->type = ttype; \
- (token)->s = #ttype; \
-} while(0)
-
-#define CREATE_NODE(ctx, name) do { \
- (name) = apr_palloc((ctx)->dpool, sizeof(*(name))); \
- (name)->parent = (name)->left = (name)->right = NULL; \
- (name)->done = 0; \
- (name)->dump_done = 0; \
-} while(0)
-
-static void debug_printf(include_ctx_t *ctx, const char *fmt, ...)
-{
- va_list ap;
- char *debug__str;
-
- va_start(ap, fmt);
- debug__str = apr_pvsprintf(ctx->pool, fmt, ap);
- va_end(ap);
-
- APR_BRIGADE_INSERT_TAIL(ctx->intern->debug.bb, apr_bucket_pool_create(
- debug__str, strlen(debug__str), ctx->pool,
- ctx->intern->debug.f->c->bucket_alloc));
-}
-
-#define DUMP__CHILD(ctx, is, node, child) if (1) { \
- parse_node_t *d__c = node->child; \
- if (d__c) { \
- if (!d__c->dump_done) { \
- if (d__c->parent != node) { \
- debug_printf(ctx, "!!! Parse tree is not consistent !!!\n"); \
- if (!d__c->parent) { \
- debug_printf(ctx, "Parent of " #child " child node is " \
- "NULL.\n"); \
- } \
- else { \
- debug_printf(ctx, "Parent of " #child " child node " \
- "points to another node (of type %s)!\n", \
- d__c->parent->token.s); \
- } \
- return; \
- } \
- node = d__c; \
- continue; \
- } \
- } \
- else { \
- debug_printf(ctx, "%s(missing)\n", is); \
- } \
-}
-
-static void debug_dump_tree(include_ctx_t *ctx, parse_node_t *root)
-{
- parse_node_t *current;
- char *is;
-
- if (!root) {
- debug_printf(ctx, " -- Parse Tree empty --\n\n");
- return;
- }
-
- debug_printf(ctx, " ----- Parse Tree -----\n");
- current = root;
- is = " ";
-
- while (current) {
- switch (current->token.type) {
- case TOKEN_STRING:
- case TOKEN_RE:
- debug_printf(ctx, "%s%s (%s)\n", is, current->token.s,
- current->token.value);
- current->dump_done = 1;
- current = current->parent;
- continue;
-
- case TOKEN_NOT:
- case TOKEN_GROUP:
- case TOKEN_RBRACE:
- case TOKEN_LBRACE:
- if (!current->dump_done) {
- debug_printf(ctx, "%s%s\n", is, current->token.s);
- is = apr_pstrcat(ctx->dpool, is, " ", NULL);
- current->dump_done = 1;
- }
-
- DUMP__CHILD(ctx, is, current, right)
-
- if (!current->right || current->right->dump_done) {
- is = apr_pstrmemdup(ctx->dpool, is, strlen(is) - 4);
- if (current->right) current->right->dump_done = 0;
- current = current->parent;
- }
- continue;
-
- default:
- if (!current->dump_done) {
- debug_printf(ctx, "%s%s\n", is, current->token.s);
- is = apr_pstrcat(ctx->dpool, is, " ", NULL);
- current->dump_done = 1;
- }
-
- DUMP__CHILD(ctx, is, current, left)
- DUMP__CHILD(ctx, is, current, right)
-
- if ((!current->left || current->left->dump_done) &&
- (!current->right || current->right->dump_done)) {
-
- is = apr_pstrmemdup(ctx->dpool, is, strlen(is) - 4);
- if (current->left) current->left->dump_done = 0;
- if (current->right) current->right->dump_done = 0;
- current = current->parent;
- }
- continue;
- }
- }
-
- /* it is possible to call this function within the parser loop, to see
- * how the tree is built. That way, we must cleanup after us to dump
- * always the whole tree
- */
- root->dump_done = 0;
- if (root->left) root->left->dump_done = 0;
- if (root->right) root->right->dump_done = 0;
-
- debug_printf(ctx, " --- End Parse Tree ---\n\n");
-
- return;
-}
-
-#define DEBUG_INIT(ctx, filter, brigade) do { \
- (ctx)->intern->debug.f = filter; \
- (ctx)->intern->debug.bb = brigade; \
-} while(0)
-
-#define DEBUG_PRINTF(arg) debug_printf arg
-
-#define DEBUG_DUMP_TOKEN(ctx, token) do { \
- token_t *d__t = (token); \
- \
- if (d__t->type == TOKEN_STRING || d__t->type == TOKEN_RE) { \
- DEBUG_PRINTF(((ctx), " Found: %s (%s)\n", d__t->s, d__t->value)); \
- } \
- else { \
- DEBUG_PRINTF((ctx, " Found: %s\n", d__t->s)); \
- } \
-} while(0)
-
-#define DEBUG_DUMP_EVAL(ctx, node) do { \
- char c = '"'; \
- switch ((node)->token.type) { \
- case TOKEN_STRING: \
- debug_printf((ctx), " Evaluate: %s (%s) -> %c\n", (node)->token.s,\
- (node)->token.value, ((node)->value) ? '1':'0'); \
- break; \
- case TOKEN_AND: \
- case TOKEN_OR: \
- debug_printf((ctx), " Evaluate: %s (Left: %s; Right: %s) -> %c\n",\
- (node)->token.s, \
- (((node)->left->done) ? ((node)->left->value ?"1":"0") \
- : "short circuited"), \
- (((node)->right->done) ? ((node)->right->value?"1":"0") \
- : "short circuited"), \
- (node)->value ? '1' : '0'); \
- break; \
- case TOKEN_EQ: \
- case TOKEN_NE: \
- case TOKEN_GT: \
- case TOKEN_GE: \
- case TOKEN_LT: \
- case TOKEN_LE: \
- if ((node)->right->token.type == TOKEN_RE) c = '/'; \
- debug_printf((ctx), " Compare: %s (\"%s\" with %c%s%c) -> %c\n", \
- (node)->token.s, \
- (node)->left->token.value, \
- c, (node)->right->token.value, c, \
- (node)->value ? '1' : '0'); \
- break; \
- default: \
- debug_printf((ctx), " Evaluate: %s -> %c\n", (node)->token.s, \
- (node)->value ? '1' : '0'); \
- break; \
- } \
-} while(0)
-
-#define DEBUG_DUMP_UNMATCHED(ctx, unmatched) do { \
- if (unmatched) { \
- DEBUG_PRINTF(((ctx), " Unmatched %c\n", (char)(unmatched))); \
- } \
-} while(0)
-
-#define DEBUG_DUMP_COND(ctx, text) \
- DEBUG_PRINTF(((ctx), "**** %s cond status=\"%c\"\n", (text), \
- ((ctx)->flags & SSI_FLAG_COND_TRUE) ? '1' : '0'))
-
-#define DEBUG_DUMP_TREE(ctx, root) debug_dump_tree(ctx, root)
-
-#else /* DEBUG_INCLUDE */
-
-#define TYPE_TOKEN(token, ttype) (token)->type = ttype
-
-#define CREATE_NODE(ctx, name) do { \
- (name) = apr_palloc((ctx)->dpool, sizeof(*(name))); \
- (name)->parent = (name)->left = (name)->right = NULL; \
- (name)->done = 0; \
-} while(0)
-
-#define DEBUG_INIT(ctx, f, bb)
-#define DEBUG_PRINTF(arg)
-#define DEBUG_DUMP_TOKEN(ctx, token)
-#define DEBUG_DUMP_EVAL(ctx, node)
-#define DEBUG_DUMP_UNMATCHED(ctx, unmatched)
-#define DEBUG_DUMP_COND(ctx, text)
-#define DEBUG_DUMP_TREE(ctx, root)
-
-#endif /* !DEBUG_INCLUDE */
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Static Module Data
- * | |
- * +-------------------------------------------------------+
- */
-
-/* global module structure */
-module AP_MODULE_DECLARE_DATA include_module;
-
-/* function handlers for include directives */
-static apr_hash_t *include_handlers;
-
-/* forward declaration of handler registry */
-static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *ssi_pfn_register;
-
-/* Sentinel value to store in subprocess_env for items that
- * shouldn't be evaluated until/unless they're actually used
- */
-static const char lazy_eval_sentinel;
-#define LAZY_VALUE (&lazy_eval_sentinel)
-
-/* default values */
-#define DEFAULT_START_SEQUENCE "<!--#"
-#define DEFAULT_END_SEQUENCE "-->"
-#define DEFAULT_ERROR_MSG "[an error occurred while processing this directive]"
-#define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
-#define DEFAULT_UNDEFINED_ECHO "(none)"
-
-#ifdef XBITHACK
-#define DEFAULT_XBITHACK XBITHACK_FULL
-#else
-#define DEFAULT_XBITHACK XBITHACK_OFF
-#endif
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Environment/Expansion Functions
- * | |
- * +-------------------------------------------------------+
- */
-
-/*
- * decodes a string containing html entities or numeric character references.
- * 's' is overwritten with the decoded string.
- * If 's' is syntatically incorrect, then the followed fixups will be made:
- * unknown entities will be left undecoded;
- * references to unused numeric characters will be deleted.
- * In particular, &#00; will not be decoded, but will be deleted.
- */
-
-/* maximum length of any ISO-LATIN-1 HTML entity name. */
-#define MAXENTLEN (6)
-
-/* The following is a shrinking transformation, therefore safe. */
-
-static void decodehtml(char *s)
-{
- int val, i, j;
- char *p;
- const char *ents;
- static const char * const entlist[MAXENTLEN + 1] =
- {
- NULL, /* 0 */
- NULL, /* 1 */
- "lt\074gt\076", /* 2 */
- "amp\046ETH\320eth\360", /* 3 */
- "quot\042Auml\304Euml\313Iuml\317Ouml\326Uuml\334auml\344euml"
- "\353iuml\357ouml\366uuml\374yuml\377", /* 4 */
-
- "Acirc\302Aring\305AElig\306Ecirc\312Icirc\316Ocirc\324Ucirc"
- "\333THORN\336szlig\337acirc\342aring\345aelig\346ecirc\352"
- "icirc\356ocirc\364ucirc\373thorn\376", /* 5 */
-
- "Agrave\300Aacute\301Atilde\303Ccedil\307Egrave\310Eacute\311"
- "Igrave\314Iacute\315Ntilde\321Ograve\322Oacute\323Otilde"
- "\325Oslash\330Ugrave\331Uacute\332Yacute\335agrave\340"
- "aacute\341atilde\343ccedil\347egrave\350eacute\351igrave"
- "\354iacute\355ntilde\361ograve\362oacute\363otilde\365"
- "oslash\370ugrave\371uacute\372yacute\375" /* 6 */
- };
-
- /* Do a fast scan through the string until we find anything
- * that needs more complicated handling
- */
- for (; *s != '&'; s++) {
- if (*s == '\0') {
- return;
- }
- }
-
- for (p = s; *s != '\0'; s++, p++) {
- if (*s != '&') {
- *p = *s;
- continue;
- }
- /* find end of entity */
- for (i = 1; s[i] != ';' && s[i] != '\0'; i++) {
- continue;
- }
-
- if (s[i] == '\0') { /* treat as normal data */
- *p = *s;
- continue;
- }
-
- /* is it numeric ? */
- if (s[1] == '#') {
- for (j = 2, val = 0; j < i && apr_isdigit(s[j]); j++) {
- val = val * 10 + s[j] - '0';
- }
- s += i;
- if (j < i || val <= 8 || (val >= 11 && val <= 31) ||
- (val >= 127 && val <= 160) || val >= 256) {
- p--; /* no data to output */
- }
- else {
- *p = RAW_ASCII_CHAR(val);
- }
- }
- else {
- j = i - 1;
- if (j > MAXENTLEN || entlist[j] == NULL) {
- /* wrong length */
- *p = '&';
- continue; /* skip it */
- }
- for (ents = entlist[j]; *ents != '\0'; ents += i) {
- if (strncmp(s + 1, ents, j) == 0) {
- break;
- }
- }
-
- if (*ents == '\0') {
- *p = '&'; /* unknown */
- }
- else {
- *p = RAW_ASCII_CHAR(((const unsigned char *) ents)[j]);
- s += i;
- }
- }
- }
-
- *p = '\0';
-}
-
-static void add_include_vars(request_rec *r, const char *timefmt)
-{
- apr_table_t *e = r->subprocess_env;
- char *t;
-
- apr_table_setn(e, "DATE_LOCAL", LAZY_VALUE);
- apr_table_setn(e, "DATE_GMT", LAZY_VALUE);
- apr_table_setn(e, "LAST_MODIFIED", LAZY_VALUE);
- apr_table_setn(e, "DOCUMENT_URI", r->uri);
- if (r->path_info && *r->path_info) {
- apr_table_setn(e, "DOCUMENT_PATH_INFO", r->path_info);
- }
- apr_table_setn(e, "USER_NAME", LAZY_VALUE);
- if (r->filename && (t = strrchr(r->filename, '/'))) {
- apr_table_setn(e, "DOCUMENT_NAME", ++t);
- }
- else {
- apr_table_setn(e, "DOCUMENT_NAME", r->uri);
- }
- if (r->args) {
- char *arg_copy = apr_pstrdup(r->pool, r->args);
-
- ap_unescape_url(arg_copy);
- apr_table_setn(e, "QUERY_STRING_UNESCAPED",
- ap_escape_shell_cmd(r->pool, arg_copy));
- }
-}
-
-static const char *add_include_vars_lazy(request_rec *r, const char *var)
-{
- char *val;
- if (!strcasecmp(var, "DATE_LOCAL")) {
- include_dir_config *conf =
- (include_dir_config *)ap_get_module_config(r->per_dir_config,
- &include_module);
- val = ap_ht_time(r->pool, r->request_time, conf->default_time_fmt, 0);
- }
- else if (!strcasecmp(var, "DATE_GMT")) {
- include_dir_config *conf =
- (include_dir_config *)ap_get_module_config(r->per_dir_config,
- &include_module);
- val = ap_ht_time(r->pool, r->request_time, conf->default_time_fmt, 1);
- }
- else if (!strcasecmp(var, "LAST_MODIFIED")) {
- include_dir_config *conf =
- (include_dir_config *)ap_get_module_config(r->per_dir_config,
- &include_module);
- val = ap_ht_time(r->pool, r->finfo.mtime, conf->default_time_fmt, 0);
- }
- else if (!strcasecmp(var, "USER_NAME")) {
- if (apr_uid_name_get(&val, r->finfo.user, r->pool) != APR_SUCCESS) {
- val = "<unknown>";
- }
- }
- else {
- val = NULL;
- }
-
- if (val) {
- apr_table_setn(r->subprocess_env, var, val);
- }
- return val;
-}
-
-static const char *get_include_var(const char *var, include_ctx_t *ctx)
-{
- const char *val;
- request_rec *r = ctx->intern->r;
-
- if (apr_isdigit(*var) && !var[1]) {
- apr_size_t idx = *var - '0';
- backref_t *re = ctx->intern->re;
-
- /* Handle $0 .. $9 from the last regex evaluated.
- * The choice of returning NULL strings on not-found,
- * v.s. empty strings on an empty match is deliberate.
- */
- if (!re) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "regex capture $%" APR_SIZE_T_FMT " refers to no regex in %s",
- idx, r->filename);
- return NULL;
- }
- else {
- if (re->nsub < idx || idx >= AP_MAX_REG_MATCH) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "regex capture $%" APR_SIZE_T_FMT
- " is out of range (last regex was: '%s') in %s",
- idx, re->rexp, r->filename);
- return NULL;
- }
-
- if (re->match[idx].rm_so < 0 || re->match[idx].rm_eo < 0) {
- return NULL;
- }
-
- val = apr_pstrmemdup(ctx->dpool, re->source + re->match[idx].rm_so,
- re->match[idx].rm_eo - re->match[idx].rm_so);
- }
- }
- else {
- val = apr_table_get(r->subprocess_env, var);
-
- if (val == LAZY_VALUE) {
- val = add_include_vars_lazy(r, var);
- }
- }
-
- return val;
-}
-
-/*
- * Do variable substitution on strings
- *
- * (Note: If out==NULL, this function allocs a buffer for the resulting
- * string from ctx->pool. The return value is always the parsed string)
- */
-static char *ap_ssi_parse_string(include_ctx_t *ctx, const char *in, char *out,
- apr_size_t length, int leave_name)
-{
- request_rec *r = ctx->intern->r;
- result_item_t *result = NULL, *current = NULL;
- apr_size_t outlen = 0, inlen, span;
- char *ret = NULL, *eout = NULL;
- const char *p;
-
- if (out) {
- /* sanity check, out && !length is not supported */
- ap_assert(out && length);
-
- ret = out;
- eout = out + length - 1;
- }
-
- span = strcspn(in, "\\$");
- inlen = strlen(in);
-
- /* fast exit */
- if (inlen == span) {
- if (out) {
- apr_cpystrn(out, in, length);
- }
- else {
- ret = apr_pstrmemdup(ctx->pool, in, (length && length <= inlen)
- ? length - 1 : inlen);
- }
-
- return ret;
- }
-
- /* well, actually something to do */
- p = in + span;
-
- if (out) {
- if (span) {
- memcpy(out, in, (out+span <= eout) ? span : (eout-out));
- out += span;
- }
- }
- else {
- current = result = apr_palloc(ctx->dpool, sizeof(*result));
- current->next = NULL;
- current->string = in;
- current->len = span;
- outlen = span;
- }
-
- /* loop for specials */
- do {
- if ((out && out >= eout) || (length && outlen >= length)) {
- break;
- }
-
- /* prepare next entry */
- if (!out && current->len) {
- current->next = apr_palloc(ctx->dpool, sizeof(*current->next));
- current = current->next;
- current->next = NULL;
- current->len = 0;
- }
-
- /*
- * escaped character
- */
- if (*p == '\\') {
- if (out) {
- *out++ = (p[1] == '$') ? *++p : *p;
- ++p;
- }
- else {
- current->len = 1;
- current->string = (p[1] == '$') ? ++p : p;
- ++p;
- ++outlen;
- }
- }
-
- /*
- * variable expansion
- */
- else { /* *p == '$' */
- const char *newp = NULL, *ep, *key = NULL;
-
- if (*++p == '{') {
- ep = ap_strchr_c(++p, '}');
- if (!ep) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Missing '}' on "
- "variable \"%s\" in %s", p, r->filename);
- break;
- }
-
- if (p < ep) {
- key = apr_pstrmemdup(ctx->dpool, p, ep - p);
- newp = ep + 1;
- }
- p -= 2;
- }
- else {
- ep = p;
- while (*ep == '_' || apr_isalnum(*ep)) {
- ++ep;
- }
-
- if (p < ep) {
- key = apr_pstrmemdup(ctx->dpool, p, ep - p);
- newp = ep;
- }
- --p;
- }
-
- /* empty name results in a copy of '$' in the output string */
- if (!key) {
- if (out) {
- *out++ = *p++;
- }
- else {
- current->len = 1;
- current->string = p++;
- ++outlen;
- }
- }
- else {
- const char *val = get_include_var(key, ctx);
- apr_size_t len = 0;
-
- if (val) {
- len = strlen(val);
- }
- else if (leave_name) {
- val = p;
- len = ep - p;
- }
-
- if (val && len) {
- if (out) {
- memcpy(out, val, (out+len <= eout) ? len : (eout-out));
- out += len;
- }
- else {
- current->len = len;
- current->string = val;
- outlen += len;
- }
- }
-
- p = newp;
- }
- }
-
- if ((out && out >= eout) || (length && outlen >= length)) {
- break;
- }
-
- /* check the remainder */
- if (*p && (span = strcspn(p, "\\$")) > 0) {
- if (!out && current->len) {
- current->next = apr_palloc(ctx->dpool, sizeof(*current->next));
- current = current->next;
- current->next = NULL;
- }
-
- if (out) {
- memcpy(out, p, (out+span <= eout) ? span : (eout-out));
- out += span;
- }
- else {
- current->len = span;
- current->string = p;
- outlen += span;
- }
-
- p += span;
- }
- } while (p < in+inlen);
-
- /* assemble result */
- if (out) {
- if (out > eout) {
- *eout = '\0';
- }
- else {
- *out = '\0';
- }
- }
- else {
- const char *ep;
-
- if (length && outlen > length) {
- outlen = length - 1;
- }
-
- ret = out = apr_palloc(ctx->pool, outlen + 1);
- ep = ret + outlen;
-
- do {
- if (result->len) {
- memcpy(out, result->string, (out+result->len <= ep)
- ? result->len : (ep-out));
- out += result->len;
- }
- result = result->next;
- } while (result && out < ep);
-
- ret[outlen] = '\0';
- }
-
- return ret;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Conditional Expression Parser
- * | |
- * +-------------------------------------------------------+
- */
-
-static APR_INLINE int re_check(include_ctx_t *ctx, const char *string,
- const char *rexp)
-{
- regex_t *compiled;
- backref_t *re = ctx->intern->re;
- int rc;
-
- compiled = ap_pregcomp(ctx->dpool, rexp, REG_EXTENDED);
- if (!compiled) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, ctx->intern->r, "unable to "
- "compile pattern \"%s\"", rexp);
- return -1;
- }
-
- if (!re) {
- re = ctx->intern->re = apr_palloc(ctx->pool, sizeof(*re));
- }
-
- re->source = apr_pstrdup(ctx->pool, string);
- re->rexp = apr_pstrdup(ctx->pool, rexp);
- re->nsub = compiled->re_nsub;
- rc = !ap_regexec(compiled, string, AP_MAX_REG_MATCH, re->match, 0);
-
- ap_pregfree(ctx->dpool, compiled);
- return rc;
-}
-
-static int get_ptoken(apr_pool_t *pool, const char **parse, token_t *token)
-{
- const char *p;
- apr_size_t shift;
- int unmatched;
-
- token->value = NULL;
-
- if (!*parse) {
- return 0;
- }
-
- /* Skip leading white space */
- while (apr_isspace(**parse)) {
- ++*parse;
- }
-
- if (!**parse) {
- *parse = NULL;
- return 0;
- }
-
- TYPE_TOKEN(token, TOKEN_STRING); /* the default type */
- p = *parse;
- unmatched = 0;
-
- switch (*(*parse)++) {
- case '(':
- TYPE_TOKEN(token, TOKEN_LBRACE);
- return 0;
- case ')':
- TYPE_TOKEN(token, TOKEN_RBRACE);
- return 0;
- case '=':
- if (**parse == '=') ++*parse;
- TYPE_TOKEN(token, TOKEN_EQ);
- return 0;
- case '!':
- if (**parse == '=') {
- TYPE_TOKEN(token, TOKEN_NE);
- ++*parse;
- return 0;
- }
- TYPE_TOKEN(token, TOKEN_NOT);
- return 0;
- case '\'':
- unmatched = '\'';
- break;
- case '/':
- TYPE_TOKEN(token, TOKEN_RE);
- unmatched = '/';
- break;
- case '|':
- if (**parse == '|') {
- TYPE_TOKEN(token, TOKEN_OR);
- ++*parse;
- return 0;
- }
- break;
- case '&':
- if (**parse == '&') {
- TYPE_TOKEN(token, TOKEN_AND);
- ++*parse;
- return 0;
- }
- break;
- case '>':
- if (**parse == '=') {
- TYPE_TOKEN(token, TOKEN_GE);
- ++*parse;
- return 0;
- }
- TYPE_TOKEN(token, TOKEN_GT);
- return 0;
- case '<':
- if (**parse == '=') {
- TYPE_TOKEN(token, TOKEN_LE);
- ++*parse;
- return 0;
- }
- TYPE_TOKEN(token, TOKEN_LT);
- return 0;
- }
-
- /* It's a string or regex token
- * Now search for the next token, which finishes this string
- */
- shift = 0;
- p = *parse = token->value = unmatched ? *parse : p;
-
- for (; **parse; p = ++*parse) {
- if (**parse == '\\') {
- if (!*(++*parse)) {
- p = *parse;
- break;
- }
-
- ++shift;
- }
- else {
- if (unmatched) {
- if (**parse == unmatched) {
- unmatched = 0;
- ++*parse;
- break;
- }
- } else if (apr_isspace(**parse)) {
- break;
- }
- else {
- int found = 0;
-
- switch (**parse) {
- case '(':
- case ')':
- case '=':
- case '!':
- case '<':
- case '>':
- ++found;
- break;
-
- case '|':
- case '&':
- if ((*parse)[1] == **parse) {
- ++found;
- }
- break;
- }
-
- if (found) {
- break;
- }
- }
- }
- }
-
- if (unmatched) {
- token->value = apr_pstrdup(pool, "");
- }
- else {
- apr_size_t len = p - token->value - shift;
- char *c = apr_palloc(pool, len + 1);
-
- p = token->value;
- token->value = c;
-
- while (shift--) {
- const char *e = ap_strchr_c(p, '\\');
-
- memcpy(c, p, e-p);
- c += e-p;
- *c++ = *++e;
- len -= e-p;
- p = e+1;
- }
-
- if (len) {
- memcpy(c, p, len);
- }
- c[len] = '\0';
- }
-
- return unmatched;
-}
-
-static int parse_expr(include_ctx_t *ctx, const char *expr, int *was_error)
-{
- parse_node_t *new, *root = NULL, *current = NULL;
- request_rec *r = ctx->intern->r;
- const char *error = "Invalid expression \"%s\" in file %s";
- const char *parse = expr;
- int was_unmatched = 0;
- unsigned regex = 0;
-
- *was_error = 0;
-
- if (!parse) {
- return 0;
- }
-
- /* Create Parse Tree */
- while (1) {
- /* uncomment this to see how the tree a built:
- *
- * DEBUG_DUMP_TREE(ctx, root);
- */
- CREATE_NODE(ctx, new);
-
- was_unmatched = get_ptoken(ctx->dpool, &parse, &new->token);
- if (!parse) {
- break;
- }
-
- DEBUG_DUMP_UNMATCHED(ctx, was_unmatched);
- DEBUG_DUMP_TOKEN(ctx, &new->token);
-
- if (!current) {
- switch (new->token.type) {
- case TOKEN_STRING:
- case TOKEN_NOT:
- case TOKEN_LBRACE:
- root = current = new;
- continue;
-
- default:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, error, expr,
- r->filename);
- *was_error = 1;
- return 0;
- }
- }
-
- switch (new->token.type) {
- case TOKEN_STRING:
- switch (current->token.type) {
- case TOKEN_STRING:
- current->token.value =
- apr_pstrcat(ctx->dpool, current->token.value,
- *current->token.value ? " " : "",
- new->token.value, NULL);
- continue;
-
- case TOKEN_RE:
- case TOKEN_RBRACE:
- case TOKEN_GROUP:
- break;
-
- default:
- new->parent = current;
- current = current->right = new;
- continue;
- }
- break;
-
- case TOKEN_RE:
- switch (current->token.type) {
- case TOKEN_EQ:
- case TOKEN_NE:
- new->parent = current;
- current = current->right = new;
- ++regex;
- continue;
-
- default:
- break;
- }
- break;
-
- case TOKEN_AND:
- case TOKEN_OR:
- switch (current->token.type) {
- case TOKEN_STRING:
- case TOKEN_RE:
- case TOKEN_GROUP:
- current = current->parent;
-
- while (current) {
- switch (current->token.type) {
- case TOKEN_AND:
- case TOKEN_OR:
- case TOKEN_LBRACE:
- break;
-
- default:
- current = current->parent;
- continue;
- }
- break;
- }
-
- if (!current) {
- new->left = root;
- root->parent = new;
- current = root = new;
- continue;
- }
-
- new->left = current->right;
- new->left->parent = new;
- new->parent = current;
- current = current->right = new;
- continue;
-
- default:
- break;
- }
- break;
-
- case TOKEN_EQ:
- case TOKEN_NE:
- case TOKEN_GE:
- case TOKEN_GT:
- case TOKEN_LE:
- case TOKEN_LT:
- if (current->token.type == TOKEN_STRING) {
- current = current->parent;
-
- if (!current) {
- new->left = root;
- root->parent = new;
- current = root = new;
- continue;
- }
-
- switch (current->token.type) {
- case TOKEN_LBRACE:
- case TOKEN_AND:
- case TOKEN_OR:
- new->left = current->right;
- new->left->parent = new;
- new->parent = current;
- current = current->right = new;
- continue;
-
- default:
- break;
- }
- }
- break;
-
- case TOKEN_RBRACE:
- while (current && current->token.type != TOKEN_LBRACE) {
- current = current->parent;
- }
-
- if (current) {
- TYPE_TOKEN(&current->token, TOKEN_GROUP);
- continue;
- }
-
- error = "Unmatched ')' in \"%s\" in file %s";
- break;
-
- case TOKEN_NOT:
- case TOKEN_LBRACE:
- switch (current->token.type) {
- case TOKEN_STRING:
- case TOKEN_RE:
- case TOKEN_RBRACE:
- case TOKEN_GROUP:
- break;
-
- default:
- current->right = new;
- new->parent = current;
- current = new;
- continue;
- }
- break;
-
- default:
- break;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, error, expr, r->filename);
- *was_error = 1;
- return 0;
- }
-
- DEBUG_DUMP_TREE(ctx, root);
-
- /* Evaluate Parse Tree */
- current = root;
- error = NULL;
- while (current) {
- switch (current->token.type) {
- case TOKEN_STRING:
- current->token.value =
- ap_ssi_parse_string(ctx, current->token.value, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- current->value = !!*current->token.value;
- break;
-
- case TOKEN_AND:
- case TOKEN_OR:
- if (!current->left || !current->right) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid expression \"%s\" in file %s",
- expr, r->filename);
- *was_error = 1;
- return 0;
- }
-
- if (!current->left->done) {
- switch (current->left->token.type) {
- case TOKEN_STRING:
- current->left->token.value =
- ap_ssi_parse_string(ctx, current->left->token.value,
- NULL, 0, SSI_EXPAND_DROP_NAME);
- current->left->value = !!*current->left->token.value;
- DEBUG_DUMP_EVAL(ctx, current->left);
- current->left->done = 1;
- break;
-
- default:
- current = current->left;
- continue;
- }
- }
-
- /* short circuit evaluation */
- if (!current->right->done && !regex &&
- ((current->token.type == TOKEN_AND && !current->left->value) ||
- (current->token.type == TOKEN_OR && current->left->value))) {
- current->value = current->left->value;
- }
- else {
- if (!current->right->done) {
- switch (current->right->token.type) {
- case TOKEN_STRING:
- current->right->token.value =
- ap_ssi_parse_string(ctx,current->right->token.value,
- NULL, 0, SSI_EXPAND_DROP_NAME);
- current->right->value = !!*current->right->token.value;
- DEBUG_DUMP_EVAL(ctx, current->right);
- current->right->done = 1;
- break;
-
- default:
- current = current->right;
- continue;
- }
- }
-
- if (current->token.type == TOKEN_AND) {
- current->value = current->left->value &&
- current->right->value;
- }
- else {
- current->value = current->left->value ||
- current->right->value;
- }
- }
- break;
-
- case TOKEN_EQ:
- case TOKEN_NE:
- if (!current->left || !current->right ||
- current->left->token.type != TOKEN_STRING ||
- (current->right->token.type != TOKEN_STRING &&
- current->right->token.type != TOKEN_RE)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid expression \"%s\" in file %s",
- expr, r->filename);
- *was_error = 1;
- return 0;
- }
- current->left->token.value =
- ap_ssi_parse_string(ctx, current->left->token.value, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- current->right->token.value =
- ap_ssi_parse_string(ctx, current->right->token.value, NULL, 0,
- SSI_EXPAND_DROP_NAME);
-
- if (current->right->token.type == TOKEN_RE) {
- current->value = re_check(ctx, current->left->token.value,
- current->right->token.value);
- --regex;
- }
- else {
- current->value = !strcmp(current->left->token.value,
- current->right->token.value);
- }
-
- if (current->token.type == TOKEN_NE) {
- current->value = !current->value;
- }
- break;
-
- case TOKEN_GE:
- case TOKEN_GT:
- case TOKEN_LE:
- case TOKEN_LT:
- if (!current->left || !current->right ||
- current->left->token.type != TOKEN_STRING ||
- current->right->token.type != TOKEN_STRING) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid expression \"%s\" in file %s",
- expr, r->filename);
- *was_error = 1;
- return 0;
- }
-
- current->left->token.value =
- ap_ssi_parse_string(ctx, current->left->token.value, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- current->right->token.value =
- ap_ssi_parse_string(ctx, current->right->token.value, NULL, 0,
- SSI_EXPAND_DROP_NAME);
-
- current->value = strcmp(current->left->token.value,
- current->right->token.value);
-
- switch (current->token.type) {
- case TOKEN_GE: current->value = current->value >= 0; break;
- case TOKEN_GT: current->value = current->value > 0; break;
- case TOKEN_LE: current->value = current->value <= 0; break;
- case TOKEN_LT: current->value = current->value < 0; break;
- default: current->value = 0; break; /* should not happen */
- }
- break;
-
- case TOKEN_NOT:
- case TOKEN_GROUP:
- if (current->right) {
- if (!current->right->done) {
- current = current->right;
- continue;
- }
- current->value = current->right->value;
- }
- else {
- current->value = 1;
- }
-
- if (current->token.type == TOKEN_NOT) {
- current->value = !current->value;
- }
- break;
-
- case TOKEN_RE:
- if (!error) {
- error = "No operator before regex in expr \"%s\" in file %s";
- }
- case TOKEN_LBRACE:
- if (!error) {
- error = "Unmatched '(' in \"%s\" in file %s";
- }
- default:
- if (!error) {
- error = "internal parser error in \"%s\" in file %s";
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, error, expr,r->filename);
- *was_error = 1;
- return 0;
- }
-
- DEBUG_DUMP_EVAL(ctx, current);
- current->done = 1;
- current = current->parent;
- }
-
- return (root ? root->value : 0);
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Action Handlers
- * | |
- * +-------------------------------------------------------+
- */
-
-/*
- * Extract the next tag name and value.
- * If there are no more tags, set the tag name to NULL.
- * The tag value is html decoded if dodecode is non-zero.
- * The tag value may be NULL if there is no tag value..
- */
-static void ap_ssi_get_tag_and_value(include_ctx_t *ctx, char **tag,
- char **tag_val, int dodecode)
-{
- if (!ctx->intern->argv) {
- *tag = NULL;
- *tag_val = NULL;
-
- return;
- }
-
- *tag_val = ctx->intern->argv->value;
- *tag = ctx->intern->argv->name;
-
- ctx->intern->argv = ctx->intern->argv->next;
-
- if (dodecode && *tag_val) {
- decodehtml(*tag_val);
- }
-
- return;
-}
-
-static int find_file(request_rec *r, const char *directive, const char *tag,
- char *tag_val, apr_finfo_t *finfo)
-{
- char *to_send = tag_val;
- request_rec *rr = NULL;
- int ret=0;
- char *error_fmt = NULL;
- apr_status_t rv = APR_SUCCESS;
-
- if (!strcmp(tag, "file")) {
- char *newpath;
-
- /* be safe; only files in this directory or below allowed */
- rv = apr_filepath_merge(&newpath, NULL, tag_val,
- APR_FILEPATH_NOTABOVEROOT |
- APR_FILEPATH_SECUREROOTTEST |
- APR_FILEPATH_NOTABSOLUTE, r->pool);
-
- if (rv != APR_SUCCESS) {
- error_fmt = "unable to access file \"%s\" "
- "in parsed file %s";
- }
- else {
- /* note: it is okay to pass NULL for the "next filter" since
- we never attempt to "run" this sub request. */
- rr = ap_sub_req_lookup_file(newpath, r, NULL);
-
- if (rr->status == HTTP_OK && rr->finfo.filetype != 0) {
- to_send = rr->filename;
- if ((rv = apr_stat(finfo, to_send,
- APR_FINFO_GPROT | APR_FINFO_MIN, rr->pool)) != APR_SUCCESS
- && rv != APR_INCOMPLETE) {
- error_fmt = "unable to get information about \"%s\" "
- "in parsed file %s";
- }
- }
- else {
- error_fmt = "unable to lookup information about \"%s\" "
- "in parsed file %s";
- }
- }
-
- if (error_fmt) {
- ret = -1;
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- rv, r, error_fmt, to_send, r->filename);
- }
-
- if (rr) ap_destroy_sub_req(rr);
-
- return ret;
- }
- else if (!strcmp(tag, "virtual")) {
- /* note: it is okay to pass NULL for the "next filter" since
- we never attempt to "run" this sub request. */
- rr = ap_sub_req_lookup_uri(tag_val, r, NULL);
-
- if (rr->status == HTTP_OK && rr->finfo.filetype != 0) {
- memcpy((char *) finfo, (const char *) &rr->finfo,
- sizeof(rr->finfo));
- ap_destroy_sub_req(rr);
- return 0;
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unable to get "
- "information about \"%s\" in parsed file %s",
- tag_val, r->filename);
- ap_destroy_sub_req(rr);
- return -1;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter \"%s\" "
- "to tag %s in %s", tag, directive, r->filename);
- return -1;
- }
-}
-
-/*
- * <!--#include virtual|file="..." [virtual|file="..."] ... -->
- */
-static apr_status_t handle_include(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for include element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- while (1) {
- char *tag = NULL;
- char *tag_val = NULL;
- request_rec *rr = NULL;
- char *error_fmt = NULL;
- char *parsed_string;
-
- ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
- if (!tag || !tag_val) {
- break;
- }
-
- if (strcmp(tag, "virtual") && strcmp(tag, "file")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter "
- "\"%s\" to tag include in %s", tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
-
- parsed_string = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- if (tag[0] == 'f') {
- char *newpath;
- apr_status_t rv;
-
- /* be safe; only files in this directory or below allowed */
- rv = apr_filepath_merge(&newpath, NULL, parsed_string,
- APR_FILEPATH_NOTABOVEROOT |
- APR_FILEPATH_SECUREROOTTEST |
- APR_FILEPATH_NOTABSOLUTE, ctx->dpool);
-
- if (rv != APR_SUCCESS) {
- error_fmt = "unable to include file \"%s\" in parsed file %s";
- }
- else {
- rr = ap_sub_req_lookup_file(newpath, r, f->next);
- }
- }
- else {
- rr = ap_sub_req_lookup_uri(parsed_string, r, f->next);
- }
-
- if (!error_fmt && rr->status != HTTP_OK) {
- error_fmt = "unable to include \"%s\" in parsed file %s";
- }
-
- if (!error_fmt && (ctx->flags & SSI_FLAG_NO_EXEC) &&
- rr->content_type && strncmp(rr->content_type, "text/", 5)) {
-
- error_fmt = "unable to include potential exec \"%s\" in parsed "
- "file %s";
- }
-
- /* See the Kludge in includes_filter for why.
- * Basically, it puts a bread crumb in here, then looks
- * for the crumb later to see if its been here.
- */
- if (rr) {
- ap_set_module_config(rr->request_config, &include_module, r);
- }
-
- if (!error_fmt && ap_run_sub_req(rr)) {
- error_fmt = "unable to include \"%s\" in parsed file %s";
- }
-
- if (error_fmt) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, error_fmt, tag_val,
- r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- }
-
- /* destroy the sub request */
- if (rr) {
- ap_destroy_sub_req(rr);
- }
-
- if (error_fmt) {
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#echo [encoding="..."] var="..." [encoding="..."] var="..." ... -->
- */
-static apr_status_t handle_echo(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- enum {E_NONE, E_URL, E_ENTITY} encode;
- request_rec *r = f->r;
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for echo element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- encode = E_ENTITY;
-
- while (1) {
- char *tag = NULL;
- char *tag_val = NULL;
-
- ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
- if (!tag || !tag_val) {
- break;
- }
-
- if (!strcmp(tag, "var")) {
- const char *val;
- const char *echo_text = NULL;
- apr_size_t e_len;
-
- val = get_include_var(ap_ssi_parse_string(ctx, tag_val, NULL,
- 0, SSI_EXPAND_DROP_NAME),
- ctx);
-
- if (val) {
- switch(encode) {
- case E_NONE:
- echo_text = val;
- break;
- case E_URL:
- echo_text = ap_escape_uri(ctx->dpool, val);
- break;
- case E_ENTITY:
- echo_text = ap_escape_html(ctx->dpool, val);
- break;
- }
-
- e_len = strlen(echo_text);
- }
- else {
- echo_text = ctx->intern->undefined_echo;
- e_len = ctx->intern->undefined_echo_len;
- }
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(
- apr_pmemdup(ctx->pool, echo_text, e_len),
- e_len, ctx->pool, f->c->bucket_alloc));
- }
- else if (!strcmp(tag, "encoding")) {
- if (!strcasecmp(tag_val, "none")) {
- encode = E_NONE;
- }
- else if (!strcasecmp(tag_val, "url")) {
- encode = E_URL;
- }
- else if (!strcasecmp(tag_val, "entity")) {
- encode = E_ENTITY;
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown value "
- "\"%s\" to parameter \"encoding\" of tag echo in "
- "%s", tag_val, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter "
- "\"%s\" in tag echo of %s", tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#config [timefmt="..."] [sizefmt="..."] [errmsg="..."]
- * [echomsg="..."] -->
- */
-static apr_status_t handle_config(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
- apr_table_t *env = r->subprocess_env;
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for config element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- while (1) {
- char *tag = NULL;
- char *tag_val = NULL;
-
- ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_RAW);
- if (!tag || !tag_val) {
- break;
- }
-
- if (!strcmp(tag, "errmsg")) {
- ctx->error_str = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- }
- else if (!strcmp(tag, "echomsg")) {
- ctx->intern->undefined_echo =
- ap_ssi_parse_string(ctx, tag_val, NULL, 0,SSI_EXPAND_DROP_NAME);
- ctx->intern->undefined_echo_len=strlen(ctx->intern->undefined_echo);
- }
- else if (!strcmp(tag, "timefmt")) {
- apr_time_t date = r->request_time;
-
- ctx->time_str = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
-
- apr_table_setn(env, "DATE_LOCAL", ap_ht_time(r->pool, date,
- ctx->time_str, 0));
- apr_table_setn(env, "DATE_GMT", ap_ht_time(r->pool, date,
- ctx->time_str, 1));
- apr_table_setn(env, "LAST_MODIFIED",
- ap_ht_time(r->pool, r->finfo.mtime,
- ctx->time_str, 0));
- }
- else if (!strcmp(tag, "sizefmt")) {
- char *parsed_string;
-
- parsed_string = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- if (!strcmp(parsed_string, "bytes")) {
- ctx->flags |= SSI_FLAG_SIZE_IN_BYTES;
- }
- else if (!strcmp(parsed_string, "abbrev")) {
- ctx->flags &= SSI_FLAG_SIZE_ABBREV;
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown value "
- "\"%s\" to parameter \"sizefmt\" of tag config "
- "in %s", parsed_string, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter "
- "\"%s\" to tag config in %s", tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#fsize virtual|file="..." [virtual|file="..."] ... -->
- */
-static apr_status_t handle_fsize(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for fsize element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- while (1) {
- char *tag = NULL;
- char *tag_val = NULL;
- apr_finfo_t finfo;
- char *parsed_string;
-
- ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
- if (!tag || !tag_val) {
- break;
- }
-
- parsed_string = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
-
- if (!find_file(r, "fsize", tag, parsed_string, &finfo)) {
- char *buf;
- apr_size_t len;
-
- if (!(ctx->flags & SSI_FLAG_SIZE_IN_BYTES)) {
- buf = apr_strfsize(finfo.size, apr_palloc(ctx->pool, 5));
- len = 4; /* omit the \0 terminator */
- }
- else {
- apr_size_t l, x, pos;
- char *tmp;
-
- tmp = apr_psprintf(ctx->dpool, "%" APR_OFF_T_FMT, finfo.size);
- len = l = strlen(tmp);
-
- for (x = 0; x < l; ++x) {
- if (x && !((l - x) % 3)) {
- ++len;
- }
- }
-
- if (len == l) {
- buf = apr_pstrmemdup(ctx->pool, tmp, len);
- }
- else {
- buf = apr_palloc(ctx->pool, len);
-
- for (pos = x = 0; x < l; ++x) {
- if (x && !((l - x) % 3)) {
- buf[pos++] = ',';
- }
- buf[pos++] = tmp[x];
- }
- }
- }
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(buf, len,
- ctx->pool, f->c->bucket_alloc));
- }
- else {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#flastmod virtual|file="..." [virtual|file="..."] ... -->
- */
-static apr_status_t handle_flastmod(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for flastmod element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- while (1) {
- char *tag = NULL;
- char *tag_val = NULL;
- apr_finfo_t finfo;
- char *parsed_string;
-
- ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
- if (!tag || !tag_val) {
- break;
- }
-
- parsed_string = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
-
- if (!find_file(r, "flastmod", tag, parsed_string, &finfo)) {
- char *t_val;
- apr_size_t t_len;
-
- t_val = ap_ht_time(ctx->pool, finfo.mtime, ctx->time_str, 0);
- t_len = strlen(t_val);
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(t_val, t_len,
- ctx->pool, f->c->bucket_alloc));
- }
- else {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#if expr="..." -->
- */
-static apr_status_t handle_if(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- char *tag = NULL;
- char *expr = NULL;
- request_rec *r = f->r;
- int expr_ret, was_error;
-
- if (ctx->argc != 1) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, (ctx->argc)
- ? "too many arguments for if element in %s"
- : "missing expr argument for if element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- ++(ctx->if_nesting_level);
- return APR_SUCCESS;
- }
-
- if (ctx->argc != 1) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- ap_ssi_get_tag_and_value(ctx, &tag, &expr, SSI_VALUE_RAW);
-
- if (strcmp(tag, "expr")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter \"%s\" "
- "to tag if in %s", tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- if (!expr) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "missing expr value for if "
- "element in %s", r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- DEBUG_PRINTF((ctx, "**** if expr=\"%s\"\n", expr));
-
- expr_ret = parse_expr(ctx, expr, &was_error);
-
- if (was_error) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- if (expr_ret) {
- ctx->flags |= (SSI_FLAG_PRINTING | SSI_FLAG_COND_TRUE);
- }
- else {
- ctx->flags &= SSI_FLAG_CLEAR_PRINT_COND;
- }
-
- DEBUG_DUMP_COND(ctx, " if");
-
- ctx->if_nesting_level = 0;
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#elif expr="..." -->
- */
-static apr_status_t handle_elif(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- char *tag = NULL;
- char *expr = NULL;
- request_rec *r = f->r;
- int expr_ret, was_error;
-
- if (ctx->argc != 1) {
- ap_log_rerror(APLOG_MARK,
- (!(ctx->if_nesting_level)) ? APLOG_ERR : APLOG_WARNING,
- 0, r, (ctx->argc)
- ? "too many arguments for if element in %s"
- : "missing expr argument for if element in %s",
- r->filename);
- }
-
- if (ctx->if_nesting_level) {
- return APR_SUCCESS;
- }
-
- if (ctx->argc != 1) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- ap_ssi_get_tag_and_value(ctx, &tag, &expr, SSI_VALUE_RAW);
-
- if (strcmp(tag, "expr")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter \"%s\" "
- "to tag if in %s", tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- if (!expr) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "missing expr in elif "
- "statement: %s", r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- DEBUG_PRINTF((ctx, "**** elif expr=\"%s\"\n", expr));
- DEBUG_DUMP_COND(ctx, " elif");
-
- if (ctx->flags & SSI_FLAG_COND_TRUE) {
- ctx->flags &= SSI_FLAG_CLEAR_PRINTING;
- return APR_SUCCESS;
- }
-
- expr_ret = parse_expr(ctx, expr, &was_error);
-
- if (was_error) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- if (expr_ret) {
- ctx->flags |= (SSI_FLAG_PRINTING | SSI_FLAG_COND_TRUE);
- }
- else {
- ctx->flags &= SSI_FLAG_CLEAR_PRINT_COND;
- }
-
- DEBUG_DUMP_COND(ctx, " elif");
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#else -->
- */
-static apr_status_t handle_else(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
-
- if (ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (!(ctx->if_nesting_level)) ? APLOG_ERR : APLOG_WARNING,
- 0, r, "else directive does not take tags in %s",
- r->filename);
- }
-
- if (ctx->if_nesting_level) {
- return APR_SUCCESS;
- }
-
- if (ctx->argc) {
- if (ctx->flags & SSI_FLAG_PRINTING) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- }
-
- return APR_SUCCESS;
- }
-
- DEBUG_DUMP_COND(ctx, " else");
-
- if (ctx->flags & SSI_FLAG_COND_TRUE) {
- ctx->flags &= SSI_FLAG_CLEAR_PRINTING;
- }
- else {
- ctx->flags |= (SSI_FLAG_PRINTING | SSI_FLAG_COND_TRUE);
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#endif -->
- */
-static apr_status_t handle_endif(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
-
- if (ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (!(ctx->if_nesting_level)) ? APLOG_ERR : APLOG_WARNING,
- 0, r, "endif directive does not take tags in %s",
- r->filename);
- }
-
- if (ctx->if_nesting_level) {
- --(ctx->if_nesting_level);
- return APR_SUCCESS;
- }
-
- if (ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- DEBUG_DUMP_COND(ctx, "endif");
-
- ctx->flags |= (SSI_FLAG_PRINTING | SSI_FLAG_COND_TRUE);
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#set var="..." value="..." ... -->
- */
-static apr_status_t handle_set(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- char *var = NULL;
- request_rec *r = f->r;
- request_rec *sub = r->main;
- apr_pool_t *p = r->pool;
-
- if (ctx->argc < 2) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for set element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (ctx->argc < 2) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- /* we need to use the 'main' request pool to set notes as that is
- * a notes lifetime
- */
- while (sub) {
- p = sub->pool;
- sub = sub->main;
- }
-
- while (1) {
- char *tag = NULL;
- char *tag_val = NULL;
-
- ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
-
- if (!tag || !tag_val) {
- break;
- }
-
- if (!strcmp(tag, "var")) {
- var = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- }
- else if (!strcmp(tag, "value")) {
- char *parsed_string;
-
- if (!var) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "variable must "
- "precede value in set directive in %s",
- r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
-
- parsed_string = ap_ssi_parse_string(ctx, tag_val, NULL, 0,
- SSI_EXPAND_DROP_NAME);
- apr_table_setn(r->subprocess_env, apr_pstrdup(p, var),
- apr_pstrdup(p, parsed_string));
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Invalid tag for set "
- "directive in %s", r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * <!--#printenv -->
- */
-static apr_status_t handle_printenv(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- request_rec *r = f->r;
- const apr_array_header_t *arr;
- const apr_table_entry_t *elts;
- int i;
-
- if (ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "printenv directive does not take tags in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- arr = apr_table_elts(r->subprocess_env);
- elts = (apr_table_entry_t *)arr->elts;
-
- for (i = 0; i < arr->nelts; ++i) {
- const char *key_text, *val_text;
- char *key_val, *next;
- apr_size_t k_len, v_len, kv_length;
-
- /* get key */
- key_text = ap_escape_html(ctx->dpool, elts[i].key);
- k_len = strlen(key_text);
-
- /* get value */
- val_text = elts[i].val;
- if (val_text == LAZY_VALUE) {
- val_text = add_include_vars_lazy(r, elts[i].key);
- }
- val_text = ap_escape_html(ctx->dpool, elts[i].val);
- v_len = strlen(val_text);
-
- /* assemble result */
- kv_length = k_len + v_len + sizeof("=\n");
- key_val = apr_palloc(ctx->pool, kv_length);
- next = key_val;
-
- memcpy(next, key_text, k_len);
- next += k_len;
- *next++ = '=';
- memcpy(next, val_text, v_len);
- next += v_len;
- *next++ = '\n';
- *next = 0;
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(key_val, kv_length-1,
- ctx->pool, f->c->bucket_alloc));
- }
-
- ctx->flush_now = 1;
- return APR_SUCCESS;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Main Includes-Filter Engine
- * | |
- * +-------------------------------------------------------+
- */
-
-/* This is an implementation of the BNDM search algorithm.
- *
- * Fast and Flexible String Matching by Combining Bit-parallelism and
- * Suffix Automata (2001)
- * Gonzalo Navarro, Mathieu Raffinot
- *
- * http://www-igm.univ-mlv.fr/~raffinot/ftp/jea2001.ps.gz
- *
- * Initial code submitted by Sascha Schumann.
- */
-
-/* Precompile the bndm_t data structure. */
-static bndm_t *bndm_compile(apr_pool_t *pool, const char *n, apr_size_t nl)
-{
- unsigned int x;
- const char *ne = n + nl;
- bndm_t *t = apr_palloc(pool, sizeof(*t));
-
- memset(t->T, 0, sizeof(unsigned int) * 256);
- t->pattern_len = nl;
-
- for (x = 1; n < ne; x <<= 1) {
- t->T[(unsigned char) *n++] |= x;
- }
-
- t->x = x - 1;
-
- return t;
-}
-
-/* Implements the BNDM search algorithm (as described above).
- *
- * h - the string to look in
- * hl - length of the string to look for
- * t - precompiled bndm structure against the pattern
- *
- * Returns the count of character that is the first match or hl if no
- * match is found.
- */
-static apr_size_t bndm(bndm_t *t, const char *h, apr_size_t hl)
-{
- const char *skip;
- const char *he, *p, *pi;
- unsigned int *T, x, d;
- apr_size_t nl;
-
- he = h + hl;
-
- T = t->T;
- x = t->x;
- nl = t->pattern_len;
-
- pi = h - 1; /* pi: p initial */
- p = pi + nl; /* compare window right to left. point to the first char */
-
- while (p < he) {
- skip = p;
- d = x;
- do {
- d &= T[(unsigned char) *p--];
- if (!d) {
- break;
- }
- if ((d & 1)) {
- if (p != pi) {
- skip = p;
- }
- else {
- return p - h + 1;
- }
- }
- d >>= 1;
- } while (d);
-
- pi = skip;
- p = pi + nl;
- }
-
- return hl;
-}
-
-/*
- * returns the index position of the first byte of start_seq (or the len of
- * the buffer as non-match)
- */
-static apr_size_t find_start_sequence(include_ctx_t *ctx, const char *data,
- apr_size_t len)
-{
- struct ssi_internal_ctx *intern = ctx->intern;
- apr_size_t slen = intern->start_seq_pat->pattern_len;
- apr_size_t index;
- const char *p, *ep;
-
- if (len < slen) {
- p = data; /* try partial match at the end of the buffer (below) */
- }
- else {
- /* try fast bndm search over the buffer
- * (hopefully the whole start sequence can be found in this buffer)
- */
- index = bndm(intern->start_seq_pat, data, len);
-
- /* wow, found it. ready. */
- if (index < len) {
- intern->state = PARSE_DIRECTIVE;
- return index;
- }
- else {
- /* ok, the pattern can't be found as whole in the buffer,
- * check the end for a partial match
- */
- p = data + len - slen + 1;
- }
- }
-
- ep = data + len;
- do {
- while (p < ep && *p != *intern->start_seq) {
- ++p;
- }
-
- index = p - data;
-
- /* found a possible start_seq start */
- if (p < ep) {
- apr_size_t pos = 1;
-
- ++p;
- while (p < ep && *p == intern->start_seq[pos]) {
- ++p;
- ++pos;
- }
-
- /* partial match found. Store the info for the next round */
- if (p == ep) {
- intern->state = PARSE_HEAD;
- intern->parse_pos = pos;
- return index;
- }
- }
-
- /* we must try all combinations; consider (e.g.) SSIStartTag "--->"
- * and a string data of "--.-" and the end of the buffer
- */
- p = data + index + 1;
- } while (p < ep);
-
- /* no match */
- return len;
-}
-
-/*
- * returns the first byte *after* the partial (or final) match.
- *
- * If we had to trick with the start_seq start, 'release' returns the
- * number of chars of the start_seq which appeared not to be part of a
- * full tag and may have to be passed down the filter chain.
- */
-static apr_size_t find_partial_start_sequence(include_ctx_t *ctx,
- const char *data,
- apr_size_t len,
- apr_size_t *release)
-{
- struct ssi_internal_ctx *intern = ctx->intern;
- apr_size_t pos, spos = 0;
- apr_size_t slen = intern->start_seq_pat->pattern_len;
- const char *p, *ep;
-
- pos = intern->parse_pos;
- ep = data + len;
- *release = 0;
-
- do {
- p = data;
-
- while (p < ep && pos < slen && *p == intern->start_seq[pos]) {
- ++p;
- ++pos;
- }
-
- /* full match */
- if (pos == slen) {
- intern->state = PARSE_DIRECTIVE;
- return (p - data);
- }
-
- /* the whole buffer is a partial match */
- if (p == ep) {
- intern->parse_pos = pos;
- return (p - data);
- }
-
- /* No match so far, but again:
- * We must try all combinations, since the start_seq is a random
- * user supplied string
- *
- * So: look if the first char of start_seq appears somewhere within
- * the current partial match. If it does, try to start a match that
- * begins with this offset. (This can happen, if a strange
- * start_seq like "---->" spans buffers)
- */
- if (spos < intern->parse_pos) {
- do {
- ++spos;
- ++*release;
- p = intern->start_seq + spos;
- pos = intern->parse_pos - spos;
-
- while (pos && *p != *intern->start_seq) {
- ++p;
- ++spos;
- ++*release;
- --pos;
- }
-
- /* if a matching beginning char was found, try to match the
- * remainder of the old buffer.
- */
- if (pos > 1) {
- apr_size_t t = 1;
-
- ++p;
- while (t < pos && *p == intern->start_seq[t]) {
- ++p;
- ++t;
- }
-
- if (t == pos) {
- /* yeah, another partial match found in the *old*
- * buffer, now test the *current* buffer for
- * continuing match
- */
- break;
- }
- }
- } while (pos > 1);
-
- if (pos) {
- continue;
- }
- }
-
- break;
- } while (1); /* work hard to find a match ;-) */
-
- /* no match at all, release all (wrongly) matched chars so far */
- *release = intern->parse_pos;
- intern->state = PARSE_PRE_HEAD;
- return 0;
-}
-
-/*
- * returns the position after the directive
- */
-static apr_size_t find_directive(include_ctx_t *ctx, const char *data,
- apr_size_t len, char ***store,
- apr_size_t **store_len)
-{
- struct ssi_internal_ctx *intern = ctx->intern;
- const char *p = data;
- const char *ep = data + len;
- apr_size_t pos;
-
- switch (intern->state) {
- case PARSE_DIRECTIVE:
- while (p < ep && !apr_isspace(*p)) {
- /* we have to consider the case of missing space between directive
- * and end_seq (be somewhat lenient), e.g. <!--#printenv-->
- */
- if (*p == *intern->end_seq) {
- intern->state = PARSE_DIRECTIVE_TAIL;
- intern->parse_pos = 1;
- ++p;
- return (p - data);
- }
- ++p;
- }
-
- if (p < ep) { /* found delimiter whitespace */
- intern->state = PARSE_DIRECTIVE_POSTNAME;
- *store = &intern->directive;
- *store_len = &intern->directive_len;
- }
-
- break;
-
- case PARSE_DIRECTIVE_TAIL:
- pos = intern->parse_pos;
-
- while (p < ep && pos < intern->end_seq_len &&
- *p == intern->end_seq[pos]) {
- ++p;
- ++pos;
- }
-
- /* full match, we're done */
- if (pos == intern->end_seq_len) {
- intern->state = PARSE_DIRECTIVE_POSTTAIL;
- *store = &intern->directive;
- *store_len = &intern->directive_len;
- break;
- }
-
- /* partial match, the buffer is too small to match fully */
- if (p == ep) {
- intern->parse_pos = pos;
- break;
- }
-
- /* no match. continue normal parsing */
- intern->state = PARSE_DIRECTIVE;
- return 0;
-
- case PARSE_DIRECTIVE_POSTTAIL:
- intern->state = PARSE_EXECUTE;
- intern->directive_len -= intern->end_seq_len;
- /* continue immediately with the next state */
-
- case PARSE_DIRECTIVE_POSTNAME:
- if (PARSE_DIRECTIVE_POSTNAME == intern->state) {
- intern->state = PARSE_PRE_ARG;
- }
- ctx->argc = 0;
- intern->argv = NULL;
-
- if (!intern->directive_len) {
- intern->error = 1;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, intern->r, "missing "
- "directive name in parsed document %s",
- intern->r->filename);
- }
- else {
- char *sp = intern->directive;
- char *sep = intern->directive + intern->directive_len;
-
- /* normalize directive name */
- for (; sp < sep; ++sp) {
- *sp = apr_tolower(*sp);
- }
- }
-
- return 0;
-
- default:
- /* get a rid of a gcc warning about unhandled enumerations */
- break;
- }
-
- return (p - data);
-}
-
-/*
- * find out whether the next token is (a possible) end_seq or an argument
- */
-static apr_size_t find_arg_or_tail(include_ctx_t *ctx, const char *data,
- apr_size_t len)
-{
- struct ssi_internal_ctx *intern = ctx->intern;
- const char *p = data;
- const char *ep = data + len;
-
- /* skip leading WS */
- while (p < ep && apr_isspace(*p)) {
- ++p;
- }
-
- /* buffer doesn't consist of whitespaces only */
- if (p < ep) {
- intern->state = (*p == *intern->end_seq) ? PARSE_TAIL : PARSE_ARG;
- }
-
- return (p - data);
-}
-
-/*
- * test the stream for end_seq. If it doesn't match at all, it must be an
- * argument
- */
-static apr_size_t find_tail(include_ctx_t *ctx, const char *data,
- apr_size_t len)
-{
- struct ssi_internal_ctx *intern = ctx->intern;
- const char *p = data;
- const char *ep = data + len;
- apr_size_t pos = intern->parse_pos;
-
- if (PARSE_TAIL == intern->state) {
- intern->state = PARSE_TAIL_SEQ;
- pos = intern->parse_pos = 0;
- }
-
- while (p < ep && pos < intern->end_seq_len && *p == intern->end_seq[pos]) {
- ++p;
- ++pos;
- }
-
- /* bingo, full match */
- if (pos == intern->end_seq_len) {
- intern->state = PARSE_EXECUTE;
- return (p - data);
- }
-
- /* partial match, the buffer is too small to match fully */
- if (p == ep) {
- intern->parse_pos = pos;
- return (p - data);
- }
-
- /* no match. It must be an argument string then
- * The caller should cleanup and rewind to the reparse point
- */
- intern->state = PARSE_ARG;
- return 0;
-}
-
-/*
- * extract name=value from the buffer
- * A pcre-pattern could look (similar to):
- * name\s*(?:=\s*(["'`]?)value\1(?>\s*))?
- */
-static apr_size_t find_argument(include_ctx_t *ctx, const char *data,
- apr_size_t len, char ***store,
- apr_size_t **store_len)
-{
- struct ssi_internal_ctx *intern = ctx->intern;
- const char *p = data;
- const char *ep = data + len;
-
- switch (intern->state) {
- case PARSE_ARG:
- /*
- * create argument structure and append it to the current list
- */
- intern->current_arg = apr_palloc(ctx->dpool,
- sizeof(*intern->current_arg));
- intern->current_arg->next = NULL;
-
- ++(ctx->argc);
- if (!intern->argv) {
- intern->argv = intern->current_arg;
- }
- else {
- arg_item_t *newarg = intern->argv;
-
- while (newarg->next) {
- newarg = newarg->next;
- }
- newarg->next = intern->current_arg;
- }
-
- /* check whether it's a valid one. If it begins with a quote, we
- * can safely assume, someone forgot the name of the argument
- */
- switch (*p) {
- case '"': case '\'': case '`':
- *store = NULL;
-
- intern->state = PARSE_ARG_VAL;
- intern->quote = *p++;
- intern->current_arg->name = NULL;
- intern->current_arg->name_len = 0;
- intern->error = 1;
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, intern->r, "missing "
- "argument name for value to tag %s in %s",
- apr_pstrmemdup(intern->r->pool, intern->directive,
- intern->directive_len),
- intern->r->filename);
-
- return (p - data);
-
- default:
- intern->state = PARSE_ARG_NAME;
- }
- /* continue immediately with next state */
-
- case PARSE_ARG_NAME:
- while (p < ep && !apr_isspace(*p) && *p != '=') {
- ++p;
- }
-
- if (p < ep) {
- intern->state = PARSE_ARG_POSTNAME;
- *store = &intern->current_arg->name;
- *store_len = &intern->current_arg->name_len;
- return (p - data);
- }
- break;
-
- case PARSE_ARG_POSTNAME:
- intern->current_arg->name = apr_pstrmemdup(ctx->dpool,
- intern->current_arg->name,
- intern->current_arg->name_len);
- if (!intern->current_arg->name_len) {
- intern->error = 1;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, intern->r, "missing "
- "argument name for value to tag %s in %s",
- apr_pstrmemdup(intern->r->pool, intern->directive,
- intern->directive_len),
- intern->r->filename);
- }
- else {
- char *sp = intern->current_arg->name;
-
- /* normalize the name */
- while (*sp) {
- *sp = apr_tolower(*sp);
- ++sp;
- }
- }
-
- intern->state = PARSE_ARG_EQ;
- /* continue with next state immediately */
-
- case PARSE_ARG_EQ:
- *store = NULL;
-
- while (p < ep && apr_isspace(*p)) {
- ++p;
- }
-
- if (p < ep) {
- if (*p == '=') {
- intern->state = PARSE_ARG_PREVAL;
- ++p;
- }
- else { /* no value */
- intern->current_arg->value = NULL;
- intern->state = PARSE_PRE_ARG;
- }
-
- return (p - data);
- }
- break;
-
- case PARSE_ARG_PREVAL:
- *store = NULL;
-
- while (p < ep && apr_isspace(*p)) {
- ++p;
- }
-
- /* buffer doesn't consist of whitespaces only */
- if (p < ep) {
- intern->state = PARSE_ARG_VAL;
- switch (*p) {
- case '"': case '\'': case '`':
- intern->quote = *p++;
- break;
- default:
- intern->quote = '\0';
- break;
- }
-
- return (p - data);
- }
- break;
-
- case PARSE_ARG_VAL_ESC:
- if (*p == intern->quote) {
- ++p;
- }
- intern->state = PARSE_ARG_VAL;
- /* continue with next state immediately */
-
- case PARSE_ARG_VAL:
- for (; p < ep; ++p) {
- if (intern->quote && *p == '\\') {
- ++p;
- if (p == ep) {
- intern->state = PARSE_ARG_VAL_ESC;
- break;
- }
-
- if (*p != intern->quote) {
- --p;
- }
- }
- else if (intern->quote && *p == intern->quote) {
- ++p;
- *store = &intern->current_arg->value;
- *store_len = &intern->current_arg->value_len;
- intern->state = PARSE_ARG_POSTVAL;
- break;
- }
- else if (!intern->quote && apr_isspace(*p)) {
- ++p;
- *store = &intern->current_arg->value;
- *store_len = &intern->current_arg->value_len;
- intern->state = PARSE_ARG_POSTVAL;
- break;
- }
- }
-
- return (p - data);
-
- case PARSE_ARG_POSTVAL:
- /*
- * The value is still the raw input string. Finally clean it up.
- */
- --(intern->current_arg->value_len);
-
- /* strip quote escaping \ from the string */
- if (intern->quote) {
- apr_size_t shift = 0;
- char *sp;
-
- sp = intern->current_arg->value;
- ep = intern->current_arg->value + intern->current_arg->value_len;
- while (sp < ep && *sp != '\\') {
- ++sp;
- }
- for (; sp < ep; ++sp) {
- if (*sp == '\\' && sp[1] == intern->quote) {
- ++sp;
- ++shift;
- }
- if (shift) {
- *(sp-shift) = *sp;
- }
- }
-
- intern->current_arg->value_len -= shift;
- }
-
- intern->current_arg->value[intern->current_arg->value_len] = '\0';
- intern->state = PARSE_PRE_ARG;
-
- return 0;
-
- default:
- /* get a rid of a gcc warning about unhandled enumerations */
- break;
- }
-
- return len; /* partial match of something */
-}
-
-/*
- * This is the main loop over the current bucket brigade.
- */
-static apr_status_t send_parsed_content(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- include_ctx_t *ctx = f->ctx;
- struct ssi_internal_ctx *intern = ctx->intern;
- request_rec *r = f->r;
- apr_bucket *b = APR_BRIGADE_FIRST(bb);
- apr_bucket_brigade *pass_bb;
- apr_status_t rv = APR_SUCCESS;
- char *magic; /* magic pointer for sentinel use */
-
- /* fast exit */
- if (APR_BRIGADE_EMPTY(bb)) {
- return APR_SUCCESS;
- }
-
- /* we may crash, since already cleaned up; hand over the responsibility
- * to the next filter;-)
- */
- if (intern->seen_eos) {
- return ap_pass_brigade(f->next, bb);
- }
-
- /* All stuff passed along has to be put into that brigade */
- pass_bb = apr_brigade_create(ctx->pool, f->c->bucket_alloc);
-
- /* initialization for this loop */
- intern->bytes_read = 0;
- intern->error = 0;
- intern->r = r;
- ctx->flush_now = 0;
-
- /* loop over the current bucket brigade */
- while (b != APR_BRIGADE_SENTINEL(bb)) {
- const char *data = NULL;
- apr_size_t len, index, release;
- apr_bucket *newb = NULL;
- char **store = &magic;
- apr_size_t *store_len;
-
- /* handle meta buckets before reading any data */
- if (APR_BUCKET_IS_METADATA(b)) {
- newb = APR_BUCKET_NEXT(b);
-
- APR_BUCKET_REMOVE(b);
-
- if (APR_BUCKET_IS_EOS(b)) {
- intern->seen_eos = 1;
-
- /* Hit end of stream, time for cleanup ... But wait!
- * Perhaps we're not ready yet. We may have to loop one or
- * two times again to finish our work. In that case, we
- * just re-insert the EOS bucket to allow for an extra loop.
- *
- * PARSE_EXECUTE means, we've hit a directive just before the
- * EOS, which is now waiting for execution.
- *
- * PARSE_DIRECTIVE_POSTTAIL means, we've hit a directive with
- * no argument and no space between directive and end_seq
- * just before the EOS. (consider <!--#printenv--> as last
- * or only string within the stream). This state, however,
- * just cleans up and turns itself to PARSE_EXECUTE, which
- * will be passed through within the next (and actually
- * last) round.
- */
- if (PARSE_EXECUTE == intern->state ||
- PARSE_DIRECTIVE_POSTTAIL == intern->state) {
- APR_BUCKET_INSERT_BEFORE(newb, b);
- }
- else {
- break; /* END OF STREAM */
- }
- }
- else {
- APR_BRIGADE_INSERT_TAIL(pass_bb, b);
-
- if (APR_BUCKET_IS_FLUSH(b)) {
- ctx->flush_now = 1;
- }
-
- b = newb;
- continue;
- }
- }
-
- /* enough is enough ... */
- if (ctx->flush_now ||
- intern->bytes_read > AP_MIN_BYTES_TO_WRITE) {
-
- if (!APR_BRIGADE_EMPTY(pass_bb)) {
- rv = ap_pass_brigade(f->next, pass_bb);
- if (rv != APR_SUCCESS) {
- apr_brigade_destroy(pass_bb);
- return rv;
- }
- }
-
- ctx->flush_now = 0;
- intern->bytes_read = 0;
- }
-
- /* read the current bucket data */
- len = 0;
- if (!intern->seen_eos) {
- if (intern->bytes_read > 0) {
- rv = apr_bucket_read(b, &data, &len, APR_NONBLOCK_READ);
- if (APR_STATUS_IS_EAGAIN(rv)) {
- ctx->flush_now = 1;
- continue;
- }
- }
-
- if (!len || rv != APR_SUCCESS) {
- rv = apr_bucket_read(b, &data, &len, APR_BLOCK_READ);
- }
-
- if (rv != APR_SUCCESS) {
- apr_brigade_destroy(pass_bb);
- return rv;
- }
-
- intern->bytes_read += len;
- }
-
- /* zero length bucket, fetch next one */
- if (!len && !intern->seen_eos) {
- b = APR_BUCKET_NEXT(b);
- continue;
- }
-
- /*
- * it's actually a data containing bucket, start/continue parsing
- */
-
- switch (intern->state) {
- /* no current tag; search for start sequence */
- case PARSE_PRE_HEAD:
- index = find_start_sequence(ctx, data, len);
-
- if (index < len) {
- apr_bucket_split(b, index);
- }
-
- newb = APR_BUCKET_NEXT(b);
- if (ctx->flags & SSI_FLAG_PRINTING) {
- APR_BUCKET_REMOVE(b);
- APR_BRIGADE_INSERT_TAIL(pass_bb, b);
- }
- else {
- apr_bucket_delete(b);
- }
-
- if (index < len) {
- /* now delete the start_seq stuff from the remaining bucket */
- if (PARSE_DIRECTIVE == intern->state) { /* full match */
- apr_bucket_split(newb, intern->start_seq_pat->pattern_len);
- ctx->flush_now = 1; /* pass pre-tag stuff */
- }
-
- b = APR_BUCKET_NEXT(newb);
- apr_bucket_delete(newb);
- }
- else {
- b = newb;
- }
-
- break;
-
- /* we're currently looking for the end of the start sequence */
- case PARSE_HEAD:
- index = find_partial_start_sequence(ctx, data, len, &release);
-
- /* check if we mismatched earlier and have to release some chars */
- if (release && (ctx->flags & SSI_FLAG_PRINTING)) {
- char *to_release = apr_palloc(ctx->pool, release);
-
- memcpy(to_release, intern->start_seq, release);
- newb = apr_bucket_pool_create(to_release, release, ctx->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(pass_bb, newb);
- }
-
- if (index) { /* any match */
- /* now delete the start_seq stuff from the remaining bucket */
- if (PARSE_DIRECTIVE == intern->state) { /* final match */
- apr_bucket_split(b, index);
- ctx->flush_now = 1; /* pass pre-tag stuff */
- }
- newb = APR_BUCKET_NEXT(b);
- apr_bucket_delete(b);
- b = newb;
- }
-
- break;
-
- /* we're currently grabbing the directive name */
- case PARSE_DIRECTIVE:
- case PARSE_DIRECTIVE_POSTNAME:
- case PARSE_DIRECTIVE_TAIL:
- case PARSE_DIRECTIVE_POSTTAIL:
- index = find_directive(ctx, data, len, &store, &store_len);
-
- if (index) {
- apr_bucket_split(b, index);
- newb = APR_BUCKET_NEXT(b);
- }
-
- if (store) {
- if (index) {
- APR_BUCKET_REMOVE(b);
- APR_BRIGADE_INSERT_TAIL(intern->tmp_bb, b);
- b = newb;
- }
-
- /* time for cleanup? */
- if (store != &magic) {
- apr_brigade_pflatten(intern->tmp_bb, store, store_len,
- ctx->dpool);
- apr_brigade_cleanup(intern->tmp_bb);
- }
- }
- else if (index) {
- apr_bucket_delete(b);
- b = newb;
- }
-
- break;
-
- /* skip WS and find out what comes next (arg or end_seq) */
- case PARSE_PRE_ARG:
- index = find_arg_or_tail(ctx, data, len);
-
- if (index) { /* skipped whitespaces */
- if (index < len) {
- apr_bucket_split(b, index);
- }
- newb = APR_BUCKET_NEXT(b);
- apr_bucket_delete(b);
- b = newb;
- }
-
- break;
-
- /* currently parsing name[=val] */
- case PARSE_ARG:
- case PARSE_ARG_NAME:
- case PARSE_ARG_POSTNAME:
- case PARSE_ARG_EQ:
- case PARSE_ARG_PREVAL:
- case PARSE_ARG_VAL:
- case PARSE_ARG_VAL_ESC:
- case PARSE_ARG_POSTVAL:
- index = find_argument(ctx, data, len, &store, &store_len);
-
- if (index) {
- apr_bucket_split(b, index);
- newb = APR_BUCKET_NEXT(b);
- }
-
- if (store) {
- if (index) {
- APR_BUCKET_REMOVE(b);
- APR_BRIGADE_INSERT_TAIL(intern->tmp_bb, b);
- b = newb;
- }
-
- /* time for cleanup? */
- if (store != &magic) {
- apr_brigade_pflatten(intern->tmp_bb, store, store_len,
- ctx->dpool);
- apr_brigade_cleanup(intern->tmp_bb);
- }
- }
- else if (index) {
- apr_bucket_delete(b);
- b = newb;
- }
-
- break;
-
- /* try to match end_seq at current pos. */
- case PARSE_TAIL:
- case PARSE_TAIL_SEQ:
- index = find_tail(ctx, data, len);
-
- switch (intern->state) {
- case PARSE_EXECUTE: /* full match */
- apr_bucket_split(b, index);
- newb = APR_BUCKET_NEXT(b);
- apr_bucket_delete(b);
- b = newb;
- break;
-
- case PARSE_ARG: /* no match */
- /* PARSE_ARG must reparse at the beginning */
- APR_BRIGADE_PREPEND(bb, intern->tmp_bb);
- b = APR_BRIGADE_FIRST(bb);
- break;
-
- default: /* partial match */
- newb = APR_BUCKET_NEXT(b);
- APR_BUCKET_REMOVE(b);
- APR_BRIGADE_INSERT_TAIL(intern->tmp_bb, b);
- b = newb;
- break;
- }
-
- break;
-
- /* now execute the parsed directive, cleanup the space and
- * start again with PARSE_PRE_HEAD
- */
- case PARSE_EXECUTE:
- /* if there was an error, it was already logged; just stop here */
- if (intern->error) {
- if (ctx->flags & SSI_FLAG_PRINTING) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, pass_bb);
- intern->error = 0;
- }
- }
- else {
- include_handler_fn_t *handle_func;
-
- handle_func =
- (include_handler_fn_t *)apr_hash_get(include_handlers, intern->directive,
- intern->directive_len);
-
- if (handle_func) {
- DEBUG_INIT(ctx, f, pass_bb);
- rv = handle_func(ctx, f, pass_bb);
- if (rv != APR_SUCCESS) {
- apr_brigade_destroy(pass_bb);
- return rv;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "unknown directive \"%s\" in parsed doc %s",
- apr_pstrmemdup(r->pool, intern->directive,
- intern->directive_len),
- r->filename);
- if (ctx->flags & SSI_FLAG_PRINTING) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, pass_bb);
- }
- }
- }
-
- /* cleanup */
- apr_pool_clear(ctx->dpool);
- apr_brigade_cleanup(intern->tmp_bb);
-
- /* Oooof. Done here, start next round */
- intern->state = PARSE_PRE_HEAD;
- break;
-
- } /* switch(ctx->state) */
-
- } /* while(brigade) */
-
- /* End of stream. Final cleanup */
- if (intern->seen_eos) {
- if (PARSE_HEAD == intern->state) {
- if (ctx->flags & SSI_FLAG_PRINTING) {
- char *to_release = apr_palloc(ctx->pool, intern->parse_pos);
-
- memcpy(to_release, intern->start_seq, intern->parse_pos);
- APR_BRIGADE_INSERT_TAIL(pass_bb,
- apr_bucket_pool_create(to_release,
- intern->parse_pos, ctx->pool,
- f->c->bucket_alloc));
- }
- }
- else if (PARSE_PRE_HEAD != intern->state) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "SSI directive was not properly finished at the end "
- "of parsed document %s", r->filename);
- if (ctx->flags & SSI_FLAG_PRINTING) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, pass_bb);
- }
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "missing closing endif directive in parsed document"
- " %s", r->filename);
- }
-
- /* cleanup our temporary memory */
- apr_brigade_destroy(intern->tmp_bb);
- apr_pool_destroy(ctx->dpool);
-
- /* don't forget to finally insert the EOS bucket */
- APR_BRIGADE_INSERT_TAIL(pass_bb, b);
- }
-
- /* if something's left over, pass it along */
- if (!APR_BRIGADE_EMPTY(pass_bb)) {
- rv = ap_pass_brigade(f->next, pass_bb);
- }
- else {
- rv = APR_SUCCESS;
- apr_brigade_destroy(pass_bb);
- }
- return rv;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Runtime Hooks
- * | |
- * +-------------------------------------------------------+
- */
-
-static int includes_setup(ap_filter_t *f)
-{
- include_dir_config *conf = ap_get_module_config(f->r->per_dir_config,
- &include_module);
-
- /* When our xbithack value isn't set to full or our platform isn't
- * providing group-level protection bits or our group-level bits do not
- * have group-execite on, we will set the no_local_copy value to 1 so
- * that we will not send 304s.
- */
- if ((conf->xbithack != XBITHACK_FULL)
- || !(f->r->finfo.valid & APR_FINFO_GPROT)
- || !(f->r->finfo.protection & APR_GEXECUTE)) {
- f->r->no_local_copy = 1;
- }
-
- /* Don't allow ETag headers to be generated - see RFC2616 - 13.3.4.
- * We don't know if we are going to be including a file or executing
- * a program - in either case a strong ETag header will likely be invalid.
- */
- apr_table_setn(f->r->notes, "no-etag", "");
-
- return OK;
-}
-
-static apr_status_t includes_filter(ap_filter_t *f, apr_bucket_brigade *b)
-{
- request_rec *r = f->r;
- include_ctx_t *ctx = f->ctx;
- request_rec *parent;
- include_dir_config *conf = ap_get_module_config(r->per_dir_config,
- &include_module);
-
- include_server_config *sconf= ap_get_module_config(r->server->module_config,
- &include_module);
-
- if (!(ap_allow_options(r) & OPT_INCLUDES)) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "mod_include: Options +Includes (or IncludesNoExec) "
- "wasn't set, INCLUDES filter removed");
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, b);
- }
-
- if (!f->ctx) {
- struct ssi_internal_ctx *intern;
-
- /* create context for this filter */
- f->ctx = ctx = apr_palloc(r->pool, sizeof(*ctx));
- ctx->intern = intern = apr_palloc(r->pool, sizeof(*ctx->intern));
- ctx->pool = r->pool;
- apr_pool_create(&ctx->dpool, ctx->pool);
-
- /* runtime data */
- intern->tmp_bb = apr_brigade_create(ctx->pool, f->c->bucket_alloc);
- intern->seen_eos = 0;
- intern->state = PARSE_PRE_HEAD;
- ctx->flags = (SSI_FLAG_PRINTING | SSI_FLAG_COND_TRUE);
- if (ap_allow_options(r) & OPT_INCNOEXEC) {
- ctx->flags |= SSI_FLAG_NO_EXEC;
- }
-
- ctx->if_nesting_level = 0;
- intern->re = NULL;
-
- ctx->error_str = conf->default_error_msg;
- ctx->time_str = conf->default_time_fmt;
- intern->start_seq = sconf->default_start_tag;
- intern->start_seq_pat = bndm_compile(ctx->pool, intern->start_seq,
- strlen(intern->start_seq));
- intern->end_seq = sconf->default_end_tag;
- intern->end_seq_len = strlen(intern->end_seq);
- intern->undefined_echo = conf->undefined_echo;
- intern->undefined_echo_len = strlen(conf->undefined_echo);
- }
-
- if ((parent = ap_get_module_config(r->request_config, &include_module))) {
- /* Kludge --- for nested includes, we want to keep the subprocess
- * environment of the base document (for compatibility); that means
- * torquing our own last_modified date as well so that the
- * LAST_MODIFIED variable gets reset to the proper value if the
- * nested document resets <!--#config timefmt -->.
- */
- r->subprocess_env = r->main->subprocess_env;
- apr_pool_join(r->main->pool, r->pool);
- r->finfo.mtime = r->main->finfo.mtime;
- }
- else {
- /* we're not a nested include, so we create an initial
- * environment */
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
- add_include_vars(r, conf->default_time_fmt);
- }
- /* Always unset the content-length. There is no way to know if
- * the content will be modified at some point by send_parsed_content.
- * It is very possible for us to not find any content in the first
- * 9k of the file, but still have to modify the content of the file.
- * If we are going to pass the file through send_parsed_content, then
- * the content-length should just be unset.
- */
- apr_table_unset(f->r->headers_out, "Content-Length");
-
- /* Always unset the Last-Modified field - see RFC2616 - 13.3.4.
- * We don't know if we are going to be including a file or executing
- * a program which may change the Last-Modified header or make the
- * content completely dynamic. Therefore, we can't support these
- * headers.
- * Exception: XBitHack full means we *should* set the Last-Modified field.
- */
-
- /* Assure the platform supports Group protections */
- if ((conf->xbithack == XBITHACK_FULL)
- && (r->finfo.valid & APR_FINFO_GPROT)
- && (r->finfo.protection & APR_GEXECUTE)) {
- ap_update_mtime(r, r->finfo.mtime);
- ap_set_last_modified(r);
- }
- else {
- apr_table_unset(f->r->headers_out, "Last-Modified");
- }
-
- /* add QUERY stuff to env cause it ain't yet */
- if (r->args) {
- char *arg_copy = apr_pstrdup(r->pool, r->args);
-
- apr_table_setn(r->subprocess_env, "QUERY_STRING", r->args);
- ap_unescape_url(arg_copy);
- apr_table_setn(r->subprocess_env, "QUERY_STRING_UNESCAPED",
- ap_escape_shell_cmd(r->pool, arg_copy));
- }
-
- return send_parsed_content(f, b);
-}
-
-static int include_fixup(request_rec *r)
-{
- include_dir_config *conf;
-
- conf = ap_get_module_config(r->per_dir_config, &include_module);
-
- if (r->handler && (strcmp(r->handler, "server-parsed") == 0))
- {
- if (!r->content_type || !*r->content_type) {
- ap_set_content_type(r, "text/html");
- }
- r->handler = "default-handler";
- }
- else
-#if defined(OS2) || defined(WIN32) || defined(NETWARE)
- /* These OS's don't support xbithack. This is being worked on. */
- {
- return DECLINED;
- }
-#else
- {
- if (conf->xbithack == XBITHACK_OFF) {
- return DECLINED;
- }
-
- if (!(r->finfo.protection & APR_UEXECUTE)) {
- return DECLINED;
- }
-
- if (!r->content_type || strcmp(r->content_type, "text/html")) {
- return DECLINED;
- }
- }
-#endif
-
- /* We always return declined, because the default handler actually
- * serves the file. All we have to do is add the filter.
- */
- ap_add_output_filter("INCLUDES", NULL, r, r->connection);
- return DECLINED;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Configuration Handling
- * | |
- * +-------------------------------------------------------+
- */
-
-static void *create_includes_dir_config(apr_pool_t *p, char *dummy)
-{
- include_dir_config *result = apr_palloc(p, sizeof(include_dir_config));
-
- result->default_error_msg = DEFAULT_ERROR_MSG;
- result->default_time_fmt = DEFAULT_TIME_FORMAT;
- result->undefined_echo = DEFAULT_UNDEFINED_ECHO;
- result->xbithack = DEFAULT_XBITHACK;
-
- return result;
-}
-
-static void *create_includes_server_config(apr_pool_t *p, server_rec *server)
-{
- include_server_config *result;
-
- result = apr_palloc(p, sizeof(include_server_config));
- result->default_end_tag = DEFAULT_END_SEQUENCE;
- result->default_start_tag = DEFAULT_START_SEQUENCE;
-
- return result;
-}
-
-static const char *set_xbithack(cmd_parms *cmd, void *mconfig, const char *arg)
-{
- include_dir_config *conf = mconfig;
-
- if (!strcasecmp(arg, "off")) {
- conf->xbithack = XBITHACK_OFF;
- }
- else if (!strcasecmp(arg, "on")) {
- conf->xbithack = XBITHACK_ON;
- }
- else if (!strcasecmp(arg, "full")) {
- conf->xbithack = XBITHACK_FULL;
- }
- else {
- return "XBitHack must be set to Off, On, or Full";
- }
-
- return NULL;
-}
-
-static const char *set_default_start_tag(cmd_parms *cmd, void *mconfig,
- const char *tag)
-{
- include_server_config *conf;
- const char *p = tag;
-
- /* be consistent. (See below in set_default_end_tag) */
- while (*p) {
- if (apr_isspace(*p)) {
- return "SSIStartTag may not contain any whitespaces";
- }
- ++p;
- }
-
- conf= ap_get_module_config(cmd->server->module_config , &include_module);
- conf->default_start_tag = tag;
-
- return NULL;
-}
-
-static const char *set_default_end_tag(cmd_parms *cmd, void *mconfig,
- const char *tag)
-{
- include_server_config *conf;
- const char *p = tag;
-
- /* sanity check. The parser may fail otherwise */
- while (*p) {
- if (apr_isspace(*p)) {
- return "SSIEndTag may not contain any whitespaces";
- }
- ++p;
- }
-
- conf= ap_get_module_config(cmd->server->module_config , &include_module);
- conf->default_end_tag = tag;
-
- return NULL;
-}
-
-static const char *set_undefined_echo(cmd_parms *cmd, void *mconfig,
- const char *msg)
-{
- include_dir_config *conf = mconfig;
- conf->undefined_echo = msg;
-
- return NULL;
-}
-
-static const char *set_default_error_msg(cmd_parms *cmd, void *mconfig,
- const char *msg)
-{
- include_dir_config *conf = mconfig;
- conf->default_error_msg = msg;
-
- return NULL;
-}
-
-static const char *set_default_time_fmt(cmd_parms *cmd, void *mconfig,
- const char *fmt)
-{
- include_dir_config *conf = mconfig;
- conf->default_time_fmt = fmt;
-
- return NULL;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Module Initialization and Configuration
- * | |
- * +-------------------------------------------------------+
- */
-
-static int include_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- include_handlers = apr_hash_make(p);
-
- ssi_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
-
- if(ssi_pfn_register) {
- ssi_pfn_register("if", handle_if);
- ssi_pfn_register("set", handle_set);
- ssi_pfn_register("else", handle_else);
- ssi_pfn_register("elif", handle_elif);
- ssi_pfn_register("echo", handle_echo);
- ssi_pfn_register("endif", handle_endif);
- ssi_pfn_register("fsize", handle_fsize);
- ssi_pfn_register("config", handle_config);
- ssi_pfn_register("include", handle_include);
- ssi_pfn_register("flastmod", handle_flastmod);
- ssi_pfn_register("printenv", handle_printenv);
- }
-
- return OK;
-}
-
-static const command_rec includes_cmds[] =
-{
- AP_INIT_TAKE1("XBitHack", set_xbithack, NULL, OR_OPTIONS,
- "Off, On, or Full"),
- AP_INIT_TAKE1("SSIErrorMsg", set_default_error_msg, NULL, OR_ALL,
- "a string"),
- AP_INIT_TAKE1("SSITimeFormat", set_default_time_fmt, NULL, OR_ALL,
- "a strftime(3) formatted string"),
- AP_INIT_TAKE1("SSIStartTag", set_default_start_tag, NULL, RSRC_CONF,
- "SSI Start String Tag"),
- AP_INIT_TAKE1("SSIEndTag", set_default_end_tag, NULL, RSRC_CONF,
- "SSI End String Tag"),
- AP_INIT_TAKE1("SSIUndefinedEcho", set_undefined_echo, NULL, OR_ALL,
- "String to be displayed if an echoed variable is undefined"),
- {NULL}
-};
-
-static void ap_register_include_handler(char *tag, include_handler_fn_t *func)
-{
- apr_hash_set(include_handlers, tag, strlen(tag), (const void *)func);
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- APR_REGISTER_OPTIONAL_FN(ap_ssi_get_tag_and_value);
- APR_REGISTER_OPTIONAL_FN(ap_ssi_parse_string);
- APR_REGISTER_OPTIONAL_FN(ap_register_include_handler);
- ap_hook_post_config(include_post_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
- ap_hook_fixups(include_fixup, NULL, NULL, APR_HOOK_LAST);
- ap_register_output_filter("INCLUDES", includes_filter, includes_setup,
- AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA include_module =
-{
- STANDARD20_MODULE_STUFF,
- create_includes_dir_config, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_includes_server_config,/* server config */
- NULL, /* merge server config */
- includes_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/filters/mod_include.dsp b/modules/filters/mod_include.dsp
deleted file mode 100644
index 3c1aeeba80..0000000000
--- a/modules/filters/mod_include.dsp
+++ /dev/null
@@ -1,132 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_include" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_include - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_include.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_include.mak" CFG="mod_include - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_include - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_include - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_include - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_include_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_include - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_include_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_include - Win32 Release"
-# Name "mod_include - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_include.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_include.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_include.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_include - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_include.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_include.so "include_module for Apache" ../../include/ap_release.h > .\mod_include.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_include - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_include.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_include.so "include_module for Apache" ../../include/ap_release.h > .\mod_include.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/filters/mod_include.exp b/modules/filters/mod_include.exp
deleted file mode 100644
index 112e1c4d0e..0000000000
--- a/modules/filters/mod_include.exp
+++ /dev/null
@@ -1 +0,0 @@
-include_module
diff --git a/modules/filters/mod_include.h b/modules/filters/mod_include.h
deleted file mode 100644
index e890d7cb83..0000000000
--- a/modules/filters/mod_include.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _MOD_INCLUDE_H
-#define _MOD_INCLUDE_H 1
-
-#include "apr_pools.h"
-#include "apr_optional.h"
-
-/*
- * Constants used for ap_ssi_get_tag_and_value's decode parameter
- */
-#define SSI_VALUE_DECODED 1
-#define SSI_VALUE_RAW 0
-
-/*
- * Constants used for ap_ssi_parse_string's leave_name parameter
- */
-#define SSI_EXPAND_LEAVE_NAME 1
-#define SSI_EXPAND_DROP_NAME 0
-
-/*
- * This macro creates a bucket which contains an error message and appends it
- * to the current pass brigade
- */
-#define SSI_CREATE_ERROR_BUCKET(ctx, f, bb) APR_BRIGADE_INSERT_TAIL((bb), \
- apr_bucket_pool_create(apr_pstrdup((ctx)->pool, (ctx)->error_str), \
- strlen((ctx)->error_str), (ctx)->pool, \
- (f)->c->bucket_alloc))
-
-/*
- * These constants are used to set or clear flag bits.
- */
-#define SSI_FLAG_PRINTING (1<<0) /* Printing conditional lines. */
-#define SSI_FLAG_COND_TRUE (1<<1) /* Conditional eval'd to true. */
-#define SSI_FLAG_SIZE_IN_BYTES (1<<2) /* Sizes displayed in bytes. */
-#define SSI_FLAG_NO_EXEC (1<<3) /* No Exec in current context. */
-
-#define SSI_FLAG_SIZE_ABBREV (~(SSI_FLAG_SIZE_IN_BYTES))
-#define SSI_FLAG_CLEAR_PRINT_COND (~((SSI_FLAG_PRINTING) | \
- (SSI_FLAG_COND_TRUE)))
-#define SSI_FLAG_CLEAR_PRINTING (~(SSI_FLAG_PRINTING))
-
-/*
- * The public SSI context structure
- */
-typedef struct {
- /* permanent pool, use this for creating bucket data */
- apr_pool_t *pool;
-
- /* temp pool; will be cleared after the execution of every directive */
- apr_pool_t *dpool;
-
- /* See the SSI_FLAG_XXXXX definitions. */
- int flags;
-
- /* nesting of *invisible* ifs */
- int if_nesting_level;
-
- /* if true, the current buffer will be passed down the filter chain before
- * continuing with next input bucket and the variable will be reset to
- * false.
- */
- int flush_now;
-
- /* argument counter (of the current directive) */
- unsigned argc;
-
- /* currently configured error string */
- const char *error_str;
-
- /* currently configured time format */
- const char *time_str;
-
- /* pointer to internal (non-public) data, don't touch */
- struct ssi_internal_ctx *intern;
-} include_ctx_t;
-
-typedef apr_status_t (include_handler_fn_t)(include_ctx_t *, ap_filter_t *,
- apr_bucket_brigade *);
-
-APR_DECLARE_OPTIONAL_FN(void, ap_ssi_get_tag_and_value,
- (include_ctx_t *ctx, char **tag, char **tag_val,
- int dodecode));
-
-APR_DECLARE_OPTIONAL_FN(char*, ap_ssi_parse_string,
- (include_ctx_t *ctx, const char *in, char *out,
- apr_size_t length, int leave_name));
-
-APR_DECLARE_OPTIONAL_FN(void, ap_register_include_handler,
- (char *tag, include_handler_fn_t *func));
-
-#endif /* MOD_INCLUDE */
diff --git a/modules/generators/.cvsignore b/modules/generators/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/generators/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/generators/.indent.pro b/modules/generators/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/generators/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/generators/Makefile.in b/modules/generators/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/generators/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/generators/NWGNUinfo b/modules/generators/NWGNUinfo
deleted file mode 100644
index c24f9525a1..0000000000
--- a/modules/generators/NWGNUinfo
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = info
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Info Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Info Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/info.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_info.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- info_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/generators/NWGNUmakefile b/modules/generators/NWGNUmakefile
deleted file mode 100644
index 7f7d343bde..0000000000
--- a/modules/generators/NWGNUmakefile
+++ /dev/null
@@ -1,247 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/info.nlm \
- $(OBJDIR)/status.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/generators/NWGNUstatus b/modules/generators/NWGNUstatus
deleted file mode 100644
index f636edffcd..0000000000
--- a/modules/generators/NWGNUstatus
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = status
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Status Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Status Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/status.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_status.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- status_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/generators/config5.m4 b/modules/generators/config5.m4
deleted file mode 100644
index f88ce33bff..0000000000
--- a/modules/generators/config5.m4
+++ /dev/null
@@ -1,27 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(generators)
-
-APACHE_MODULE(status, process/thread monitoring, , , yes)
-APACHE_MODULE(autoindex, directory listing, , , yes)
-APACHE_MODULE(asis, as-is filetypes, , , yes)
-APACHE_MODULE(info, server information, , , most)
-APACHE_MODULE(suexec, set uid and gid for spawned processes, , , no, [
- other_targets=suexec ] )
-
-if test "$apache_cv_mpm" = "worker" -o "$apache_cv_mpm" = "perchild"; then
-# if we are using a threaded MPM, we will get better performance with
-# mod_cgid, so make it the default.
- APACHE_MODULE(cgid, CGI scripts, , , yes)
- APACHE_MODULE(cgi, CGI scripts, , , no)
-else
-# if we are using a non-threaded MPM, it makes little sense to use
-# mod_cgid, and it just opens up holes we don't need. Make mod_cgi the
-# default
- APACHE_MODULE(cgi, CGI scripts, , , yes)
- APACHE_MODULE(cgid, CGI scripts, , , no)
-fi
-
-APACHE_MODPATH_FINISH
diff --git a/modules/generators/mod_asis.c b/modules/generators/mod_asis.c
deleted file mode 100644
index 8102e736bd..0000000000
--- a/modules/generators/mod_asis.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "http_main.h"
-#include "http_request.h"
-
-#include "mod_core.h"
-
-#define ASIS_MAGIC_TYPE "httpd/send-as-is"
-
-static int asis_handler(request_rec *r)
-{
- conn_rec *c = r->connection;
- apr_file_t *f = NULL;
- apr_status_t rv;
- const char *location;
-
- if(strcmp(r->handler,ASIS_MAGIC_TYPE) && strcmp(r->handler,"send-as-is"))
- return DECLINED;
-
- r->allowed |= (AP_METHOD_BIT << M_GET);
- if (r->method_number != M_GET)
- return DECLINED;
- if (r->finfo.filetype == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "File does not exist: %s", r->filename);
- return HTTP_NOT_FOUND;
- }
-
- if ((rv = apr_file_open(&f, r->filename, APR_READ,
- APR_OS_DEFAULT, r->pool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "file permissions deny server access: %s", r->filename);
- return HTTP_FORBIDDEN;
- }
-
- ap_scan_script_header_err(r, f, NULL);
- location = apr_table_get(r->headers_out, "Location");
-
- if (location && location[0] == '/' &&
- ((r->status == HTTP_OK) || ap_is_HTTP_REDIRECT(r->status))) {
-
- apr_file_close(f);
-
- /* Internal redirect -- fake-up a pseudo-request */
- r->status = HTTP_OK;
-
- /* This redirect needs to be a GET no matter what the original
- * method was.
- */
- r->method = apr_pstrdup(r->pool, "GET");
- r->method_number = M_GET;
-
- ap_internal_redirect_handler(location, r);
- return OK;
- }
-
- if (!r->header_only) {
- apr_bucket_brigade *bb;
- apr_bucket *b;
- apr_off_t pos = 0;
-
- rv = apr_file_seek(f, APR_CUR, &pos);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "mod_asis: failed to find end-of-headers position "
- "for %s", r->filename);
- apr_file_close(f);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
-#if APR_HAS_LARGE_FILES
- if (r->finfo.size - pos > AP_MAX_SENDFILE) {
- /* APR_HAS_LARGE_FILES issue; must split into mutiple buckets,
- * no greater than MAX(apr_size_t), and more granular than that
- * in case the brigade code/filters attempt to read it directly.
- */
- apr_off_t fsize = r->finfo.size - pos;
- b = apr_bucket_file_create(f, pos, AP_MAX_SENDFILE,
- r->pool, c->bucket_alloc);
- while (fsize > AP_MAX_SENDFILE) {
- APR_BRIGADE_INSERT_TAIL(bb, b);
- apr_bucket_copy(b, &b);
- b->start += AP_MAX_SENDFILE;
- fsize -= AP_MAX_SENDFILE;
- }
- b->length = (apr_size_t)fsize; /* Resize just the last bucket */
- }
- else
-#endif
- b = apr_bucket_file_create(f, pos, (apr_size_t) (r->finfo.size - pos),
- r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- rv = ap_pass_brigade(r->output_filters, bb);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "mod_asis: ap_pass_brigade failed for file %s", r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- else {
- apr_file_close(f);
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(asis_handler,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA asis_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- NULL, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/generators/mod_asis.dsp b/modules/generators/mod_asis.dsp
deleted file mode 100644
index 9ef3645855..0000000000
--- a/modules/generators/mod_asis.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_asis" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_asis - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_asis.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_asis.mak" CFG="mod_asis - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_asis - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_asis - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_asis - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_asis_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_asis - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_asis_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_asis - Win32 Release"
-# Name "mod_asis - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_asis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_asis.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_asis - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_asis.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_asis.so "asis_module for Apache" ../../include/ap_release.h > .\mod_asis.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_asis - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_asis.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_asis.so "asis_module for Apache" ../../include/ap_release.h > .\mod_asis.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_asis.exp b/modules/generators/mod_asis.exp
deleted file mode 100644
index 4f347d921e..0000000000
--- a/modules/generators/mod_asis.exp
+++ /dev/null
@@ -1 +0,0 @@
-asis_module
diff --git a/modules/generators/mod_autoindex.c b/modules/generators/mod_autoindex.c
deleted file mode 100644
index 2a34fa887a..0000000000
--- a/modules/generators/mod_autoindex.c
+++ /dev/null
@@ -1,2261 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_autoindex.c: Handles the on-the-fly html index generation
- *
- * Rob McCool
- * 3/23/93
- *
- * Adapted to Apache by rst.
- *
- * Version sort added by Martin Pool <mbp@humbug.org.au>.
- */
-
-#include "apr_strings.h"
-#include "apr_fnmatch.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-
-#include "mod_core.h"
-
-module AP_MODULE_DECLARE_DATA autoindex_module;
-
-/****************************************************************
- *
- * Handling configuration directives...
- */
-
-#define NO_OPTIONS (1 << 0) /* Indexing options */
-#define ICONS_ARE_LINKS (1 << 1)
-#define SCAN_HTML_TITLES (1 << 2)
-#define SUPPRESS_ICON (1 << 3)
-#define SUPPRESS_LAST_MOD (1 << 4)
-#define SUPPRESS_SIZE (1 << 5)
-#define SUPPRESS_DESC (1 << 6)
-#define SUPPRESS_PREAMBLE (1 << 7)
-#define SUPPRESS_COLSORT (1 << 8)
-#define SUPPRESS_RULES (1 << 9)
-#define FOLDERS_FIRST (1 << 10)
-#define VERSION_SORT (1 << 11)
-#define TRACK_MODIFIED (1 << 12)
-#define FANCY_INDEXING (1 << 13)
-#define TABLE_INDEXING (1 << 14)
-#define IGNORE_CLIENT (1 << 15)
-#define IGNORE_CASE (1 << 16)
-#define EMIT_XHTML (1 << 17)
-#define SHOW_FORBIDDEN (1 << 18)
-
-#define K_NOADJUST 0
-#define K_ADJUST 1
-#define K_UNSET 2
-
-/*
- * Define keys for sorting.
- */
-#define K_NAME 'N' /* Sort by file name (default) */
-#define K_LAST_MOD 'M' /* Last modification date */
-#define K_SIZE 'S' /* Size (absolute, not as displayed) */
-#define K_DESC 'D' /* Description */
-#define K_VALID "NMSD" /* String containing _all_ valid K_ opts */
-
-#define D_ASCENDING 'A'
-#define D_DESCENDING 'D'
-#define D_VALID "AD" /* String containing _all_ valid D_ opts */
-
-/*
- * These are the dimensions of the default icons supplied with Apache.
- */
-#define DEFAULT_ICON_WIDTH 20
-#define DEFAULT_ICON_HEIGHT 22
-
-/*
- * Other default dimensions.
- */
-#define DEFAULT_NAME_WIDTH 23
-#define DEFAULT_DESC_WIDTH 23
-
-struct item {
- char *type;
- char *apply_to;
- char *apply_path;
- char *data;
-};
-
-typedef struct ai_desc_t {
- char *pattern;
- char *description;
- int full_path;
- int wildcards;
-} ai_desc_t;
-
-typedef struct autoindex_config_struct {
-
- char *default_icon;
- char *style_sheet;
- apr_int32_t opts;
- apr_int32_t incremented_opts;
- apr_int32_t decremented_opts;
- int name_width;
- int name_adjust;
- int desc_width;
- int desc_adjust;
- int icon_width;
- int icon_height;
- char default_keyid;
- char default_direction;
-
- apr_array_header_t *icon_list;
- apr_array_header_t *alt_list;
- apr_array_header_t *desc_list;
- apr_array_header_t *ign_list;
- apr_array_header_t *hdr_list;
- apr_array_header_t *rdme_list;
-
-} autoindex_config_rec;
-
-static char c_by_encoding, c_by_type, c_by_path;
-
-#define BY_ENCODING &c_by_encoding
-#define BY_TYPE &c_by_type
-#define BY_PATH &c_by_path
-
-/*
- * This routine puts the standard HTML header at the top of the index page.
- * We include the DOCTYPE because we may be using features therefrom (i.e.,
- * HEIGHT and WIDTH attributes on the icons if we're FancyIndexing).
- */
-static void emit_preamble(request_rec *r, int xhtml, const char *title)
-{
- autoindex_config_rec *d;
-
- d = (autoindex_config_rec *) ap_get_module_config(r->per_dir_config,
- &autoindex_module);
-
- ap_rvputs(r, xhtml ? DOCTYPE_XHTML_1_0T : DOCTYPE_HTML_3_2,
- "<html>\n <head>\n <title>Index of ", title,
- "</title>\n", NULL);
- if (d->style_sheet != NULL) {
- ap_rvputs(r, " <link rel=\"stylesheet\" href=\"", d->style_sheet,
- "\" type=\"text/css\"", xhtml ? " />\n" : ">\n", NULL);
- }
- ap_rvputs(r, " </head>\n <body>\n", NULL);
-}
-
-static void push_item(apr_array_header_t *arr, char *type, const char *to,
- const char *path, const char *data)
-{
- struct item *p = (struct item *) apr_array_push(arr);
-
- if (!to) {
- to = "";
- }
- if (!path) {
- path = "";
- }
-
- p->type = type;
- p->data = data ? apr_pstrdup(arr->pool, data) : NULL;
- p->apply_path = apr_pstrcat(arr->pool, path, "*", NULL);
-
- if ((type == BY_PATH) && (!ap_is_matchexp(to))) {
- p->apply_to = apr_pstrcat(arr->pool, "*", to, NULL);
- }
- else if (to) {
- p->apply_to = apr_pstrdup(arr->pool, to);
- }
- else {
- p->apply_to = NULL;
- }
-}
-
-static const char *add_alt(cmd_parms *cmd, void *d, const char *alt,
- const char *to)
-{
- if (cmd->info == BY_PATH) {
- if (!strcmp(to, "**DIRECTORY**")) {
- to = "^^DIRECTORY^^";
- }
- }
- if (cmd->info == BY_ENCODING) {
- char *tmp = apr_pstrdup(cmd->pool, to);
- ap_str_tolower(tmp);
- to = tmp;
- }
-
- push_item(((autoindex_config_rec *) d)->alt_list, cmd->info, to,
- cmd->path, alt);
- return NULL;
-}
-
-static const char *add_icon(cmd_parms *cmd, void *d, const char *icon,
- const char *to)
-{
- char *iconbak = apr_pstrdup(cmd->pool, icon);
-
- if (icon[0] == '(') {
- char *alt;
- char *cl = strchr(iconbak, ')');
-
- if (cl == NULL) {
- return "missing closing paren";
- }
- alt = ap_getword_nc(cmd->pool, &iconbak, ',');
- *cl = '\0'; /* Lose closing paren */
- add_alt(cmd, d, &alt[1], to);
- }
- if (cmd->info == BY_PATH) {
- if (!strcmp(to, "**DIRECTORY**")) {
- to = "^^DIRECTORY^^";
- }
- }
- if (cmd->info == BY_ENCODING) {
- char *tmp = apr_pstrdup(cmd->pool, to);
- ap_str_tolower(tmp);
- to = tmp;
- }
-
- push_item(((autoindex_config_rec *) d)->icon_list, cmd->info, to,
- cmd->path, iconbak);
- return NULL;
-}
-
-/*
- * Add description text for a filename pattern. If the pattern has
- * wildcards already (or we need to add them), add leading and
- * trailing wildcards to it to ensure substring processing. If the
- * pattern contains a '/' anywhere, force wildcard matching mode,
- * add a slash to the prefix so that "bar/bletch" won't be matched
- * by "foobar/bletch", and make a note that there's a delimiter;
- * the matching routine simplifies to just the actual filename
- * whenever it can. This allows definitions in parent directories
- * to be made for files in subordinate ones using relative paths.
- */
-
-/*
- * Absent a strcasestr() function, we have to force wildcards on
- * systems for which "AAA" and "aaa" mean the same file.
- */
-#ifdef CASE_BLIND_FILESYSTEM
-#define WILDCARDS_REQUIRED 1
-#else
-#define WILDCARDS_REQUIRED 0
-#endif
-
-static const char *add_desc(cmd_parms *cmd, void *d, const char *desc,
- const char *to)
-{
- autoindex_config_rec *dcfg = (autoindex_config_rec *) d;
- ai_desc_t *desc_entry;
- char *prefix = "";
-
- desc_entry = (ai_desc_t *) apr_array_push(dcfg->desc_list);
- desc_entry->full_path = (ap_strchr_c(to, '/') == NULL) ? 0 : 1;
- desc_entry->wildcards = (WILDCARDS_REQUIRED
- || desc_entry->full_path
- || apr_fnmatch_test(to));
- if (desc_entry->wildcards) {
- prefix = desc_entry->full_path ? "*/" : "*";
- desc_entry->pattern = apr_pstrcat(dcfg->desc_list->pool,
- prefix, to, "*", NULL);
- }
- else {
- desc_entry->pattern = apr_pstrdup(dcfg->desc_list->pool, to);
- }
- desc_entry->description = apr_pstrdup(dcfg->desc_list->pool, desc);
- return NULL;
-}
-
-static const char *add_ignore(cmd_parms *cmd, void *d, const char *ext)
-{
- push_item(((autoindex_config_rec *) d)->ign_list, 0, ext, cmd->path, NULL);
- return NULL;
-}
-
-static const char *add_header(cmd_parms *cmd, void *d, const char *name)
-{
- push_item(((autoindex_config_rec *) d)->hdr_list, 0, NULL, cmd->path,
- name);
- return NULL;
-}
-
-static const char *add_readme(cmd_parms *cmd, void *d, const char *name)
-{
- push_item(((autoindex_config_rec *) d)->rdme_list, 0, NULL, cmd->path,
- name);
- return NULL;
-}
-
-static const char *add_opts(cmd_parms *cmd, void *d, const char *optstr)
-{
- char *w;
- apr_int32_t opts;
- apr_int32_t opts_add;
- apr_int32_t opts_remove;
- char action;
- autoindex_config_rec *d_cfg = (autoindex_config_rec *) d;
-
- opts = d_cfg->opts;
- opts_add = d_cfg->incremented_opts;
- opts_remove = d_cfg->decremented_opts;
- while (optstr[0]) {
- int option = 0;
-
- w = ap_getword_conf(cmd->pool, &optstr);
- if ((*w == '+') || (*w == '-')) {
- action = *(w++);
- }
- else {
- action = '\0';
- }
- if (!strcasecmp(w, "FancyIndexing")) {
- option = FANCY_INDEXING;
- }
- else if (!strcasecmp(w, "FoldersFirst")) {
- option = FOLDERS_FIRST;
- }
- else if (!strcasecmp(w, "HTMLTable")) {
- option = TABLE_INDEXING;
- }
- else if (!strcasecmp(w, "IconsAreLinks")) {
- option = ICONS_ARE_LINKS;
- }
- else if (!strcasecmp(w, "IgnoreCase")) {
- option = IGNORE_CASE;
- }
- else if (!strcasecmp(w, "IgnoreClient")) {
- option = IGNORE_CLIENT;
- }
- else if (!strcasecmp(w, "ScanHTMLTitles")) {
- option = SCAN_HTML_TITLES;
- }
- else if (!strcasecmp(w, "SuppressColumnSorting")) {
- option = SUPPRESS_COLSORT;
- }
- else if (!strcasecmp(w, "SuppressDescription")) {
- option = SUPPRESS_DESC;
- }
- else if (!strcasecmp(w, "SuppressHTMLPreamble")) {
- option = SUPPRESS_PREAMBLE;
- }
- else if (!strcasecmp(w, "SuppressIcon")) {
- option = SUPPRESS_ICON;
- }
- else if (!strcasecmp(w, "SuppressLastModified")) {
- option = SUPPRESS_LAST_MOD;
- }
- else if (!strcasecmp(w, "SuppressSize")) {
- option = SUPPRESS_SIZE;
- }
- else if (!strcasecmp(w, "SuppressRules")) {
- option = SUPPRESS_RULES;
- }
- else if (!strcasecmp(w, "TrackModified")) {
- option = TRACK_MODIFIED;
- }
- else if (!strcasecmp(w, "VersionSort")) {
- option = VERSION_SORT;
- }
- else if (!strcasecmp(w, "XHTML")) {
- option = EMIT_XHTML;
- }
- else if (!strcasecmp(w, "ShowForbidden")) {
- option = SHOW_FORBIDDEN;
- }
- else if (!strcasecmp(w, "None")) {
- if (action != '\0') {
- return "Cannot combine '+' or '-' with 'None' keyword";
- }
- opts = NO_OPTIONS;
- opts_add = 0;
- opts_remove = 0;
- }
- else if (!strcasecmp(w, "IconWidth")) {
- if (action != '-') {
- d_cfg->icon_width = DEFAULT_ICON_WIDTH;
- }
- else {
- d_cfg->icon_width = 0;
- }
- }
- else if (!strncasecmp(w, "IconWidth=", 10)) {
- if (action == '-') {
- return "Cannot combine '-' with IconWidth=n";
- }
- d_cfg->icon_width = atoi(&w[10]);
- }
- else if (!strcasecmp(w, "IconHeight")) {
- if (action != '-') {
- d_cfg->icon_height = DEFAULT_ICON_HEIGHT;
- }
- else {
- d_cfg->icon_height = 0;
- }
- }
- else if (!strncasecmp(w, "IconHeight=", 11)) {
- if (action == '-') {
- return "Cannot combine '-' with IconHeight=n";
- }
- d_cfg->icon_height = atoi(&w[11]);
- }
- else if (!strcasecmp(w, "NameWidth")) {
- if (action != '-') {
- return "NameWidth with no value may only appear as "
- "'-NameWidth'";
- }
- d_cfg->name_width = DEFAULT_NAME_WIDTH;
- d_cfg->name_adjust = K_NOADJUST;
- }
- else if (!strncasecmp(w, "NameWidth=", 10)) {
- if (action == '-') {
- return "Cannot combine '-' with NameWidth=n";
- }
- if (w[10] == '*') {
- d_cfg->name_adjust = K_ADJUST;
- }
- else {
- int width = atoi(&w[10]);
-
- if (width && (width < 5)) {
- return "NameWidth value must be greater than 5";
- }
- d_cfg->name_width = width;
- d_cfg->name_adjust = K_NOADJUST;
- }
- }
- else if (!strcasecmp(w, "DescriptionWidth")) {
- if (action != '-') {
- return "DescriptionWidth with no value may only appear as "
- "'-DescriptionWidth'";
- }
- d_cfg->desc_width = DEFAULT_DESC_WIDTH;
- d_cfg->desc_adjust = K_NOADJUST;
- }
- else if (!strncasecmp(w, "DescriptionWidth=", 17)) {
- if (action == '-') {
- return "Cannot combine '-' with DescriptionWidth=n";
- }
- if (w[17] == '*') {
- d_cfg->desc_adjust = K_ADJUST;
- }
- else {
- int width = atoi(&w[17]);
-
- if (width && (width < 12)) {
- return "DescriptionWidth value must be greater than 12";
- }
- d_cfg->desc_width = width;
- d_cfg->desc_adjust = K_NOADJUST;
- }
- }
- else {
- return "Invalid directory indexing option";
- }
- if (action == '\0') {
- opts |= option;
- opts_add = 0;
- opts_remove = 0;
- }
- else if (action == '+') {
- opts_add |= option;
- opts_remove &= ~option;
- }
- else {
- opts_remove |= option;
- opts_add &= ~option;
- }
- }
- if ((opts & NO_OPTIONS) && (opts & ~NO_OPTIONS)) {
- return "Cannot combine other IndexOptions keywords with 'None'";
- }
- d_cfg->incremented_opts = opts_add;
- d_cfg->decremented_opts = opts_remove;
- d_cfg->opts = opts;
- return NULL;
-}
-
-static const char *set_default_order(cmd_parms *cmd, void *m,
- const char *direction, const char *key)
-{
- autoindex_config_rec *d_cfg = (autoindex_config_rec *) m;
-
- if (!strcasecmp(direction, "Ascending")) {
- d_cfg->default_direction = D_ASCENDING;
- }
- else if (!strcasecmp(direction, "Descending")) {
- d_cfg->default_direction = D_DESCENDING;
- }
- else {
- return "First keyword must be 'Ascending' or 'Descending'";
- }
-
- if (!strcasecmp(key, "Name")) {
- d_cfg->default_keyid = K_NAME;
- }
- else if (!strcasecmp(key, "Date")) {
- d_cfg->default_keyid = K_LAST_MOD;
- }
- else if (!strcasecmp(key, "Size")) {
- d_cfg->default_keyid = K_SIZE;
- }
- else if (!strcasecmp(key, "Description")) {
- d_cfg->default_keyid = K_DESC;
- }
- else {
- return "Second keyword must be 'Name', 'Date', 'Size', or "
- "'Description'";
- }
-
- return NULL;
-}
-
-#define DIR_CMD_PERMS OR_INDEXES
-
-static const command_rec autoindex_cmds[] =
-{
- AP_INIT_ITERATE2("AddIcon", add_icon, BY_PATH, DIR_CMD_PERMS,
- "an icon URL followed by one or more filenames"),
- AP_INIT_ITERATE2("AddIconByType", add_icon, BY_TYPE, DIR_CMD_PERMS,
- "an icon URL followed by one or more MIME types"),
- AP_INIT_ITERATE2("AddIconByEncoding", add_icon, BY_ENCODING, DIR_CMD_PERMS,
- "an icon URL followed by one or more content encodings"),
- AP_INIT_ITERATE2("AddAlt", add_alt, BY_PATH, DIR_CMD_PERMS,
- "alternate descriptive text followed by one or more "
- "filenames"),
- AP_INIT_ITERATE2("AddAltByType", add_alt, BY_TYPE, DIR_CMD_PERMS,
- "alternate descriptive text followed by one or more MIME "
- "types"),
- AP_INIT_ITERATE2("AddAltByEncoding", add_alt, BY_ENCODING, DIR_CMD_PERMS,
- "alternate descriptive text followed by one or more "
- "content encodings"),
- AP_INIT_RAW_ARGS("IndexOptions", add_opts, NULL, DIR_CMD_PERMS,
- "one or more index options [+|-][]"),
- AP_INIT_TAKE2("IndexOrderDefault", set_default_order, NULL, DIR_CMD_PERMS,
- "{Ascending,Descending} {Name,Size,Description,Date}"),
- AP_INIT_ITERATE("IndexIgnore", add_ignore, NULL, DIR_CMD_PERMS,
- "one or more file extensions"),
- AP_INIT_ITERATE2("AddDescription", add_desc, BY_PATH, DIR_CMD_PERMS,
- "Descriptive text followed by one or more filenames"),
- AP_INIT_TAKE1("HeaderName", add_header, NULL, DIR_CMD_PERMS,
- "a filename"),
- AP_INIT_TAKE1("ReadmeName", add_readme, NULL, DIR_CMD_PERMS,
- "a filename"),
- AP_INIT_RAW_ARGS("FancyIndexing", ap_set_deprecated, NULL, OR_ALL,
- "The FancyIndexing directive is no longer supported. "
- "Use IndexOptions FancyIndexing."),
- AP_INIT_TAKE1("DefaultIcon", ap_set_string_slot,
- (void *)APR_OFFSETOF(autoindex_config_rec, default_icon),
- DIR_CMD_PERMS, "an icon URL"),
- AP_INIT_TAKE1("IndexStyleSheet", ap_set_string_slot,
- (void *)APR_OFFSETOF(autoindex_config_rec, style_sheet),
- DIR_CMD_PERMS, "URL to style sheet"),
- {NULL}
-};
-
-static void *create_autoindex_config(apr_pool_t *p, char *dummy)
-{
- autoindex_config_rec *new =
- (autoindex_config_rec *) apr_pcalloc(p, sizeof(autoindex_config_rec));
-
- new->icon_width = 0;
- new->icon_height = 0;
- new->name_width = DEFAULT_NAME_WIDTH;
- new->name_adjust = K_UNSET;
- new->desc_width = DEFAULT_DESC_WIDTH;
- new->desc_adjust = K_UNSET;
- new->icon_list = apr_array_make(p, 4, sizeof(struct item));
- new->alt_list = apr_array_make(p, 4, sizeof(struct item));
- new->desc_list = apr_array_make(p, 4, sizeof(ai_desc_t));
- new->ign_list = apr_array_make(p, 4, sizeof(struct item));
- new->hdr_list = apr_array_make(p, 4, sizeof(struct item));
- new->rdme_list = apr_array_make(p, 4, sizeof(struct item));
- new->opts = 0;
- new->incremented_opts = 0;
- new->decremented_opts = 0;
- new->default_keyid = '\0';
- new->default_direction = '\0';
-
- return (void *) new;
-}
-
-static void *merge_autoindex_configs(apr_pool_t *p, void *basev, void *addv)
-{
- autoindex_config_rec *new;
- autoindex_config_rec *base = (autoindex_config_rec *) basev;
- autoindex_config_rec *add = (autoindex_config_rec *) addv;
-
- new = (autoindex_config_rec *) apr_pcalloc(p, sizeof(autoindex_config_rec));
- new->default_icon = add->default_icon ? add->default_icon
- : base->default_icon;
- new->style_sheet = add->style_sheet ? add->style_sheet
- : base->style_sheet;
- new->icon_height = add->icon_height ? add->icon_height : base->icon_height;
- new->icon_width = add->icon_width ? add->icon_width : base->icon_width;
-
- new->alt_list = apr_array_append(p, add->alt_list, base->alt_list);
- new->ign_list = apr_array_append(p, add->ign_list, base->ign_list);
- new->hdr_list = apr_array_append(p, add->hdr_list, base->hdr_list);
- new->desc_list = apr_array_append(p, add->desc_list, base->desc_list);
- new->icon_list = apr_array_append(p, add->icon_list, base->icon_list);
- new->rdme_list = apr_array_append(p, add->rdme_list, base->rdme_list);
- if (add->opts & NO_OPTIONS) {
- /*
- * If the current directory says 'no options' then we also
- * clear any incremental mods from being inheritable further down.
- */
- new->opts = NO_OPTIONS;
- new->incremented_opts = 0;
- new->decremented_opts = 0;
- }
- else {
- /*
- * If there were any nonincremental options selected for
- * this directory, they dominate and we don't inherit *anything.*
- * Contrariwise, we *do* inherit if the only settings here are
- * incremental ones.
- */
- if (add->opts == 0) {
- new->incremented_opts = (base->incremented_opts
- | add->incremented_opts)
- & ~add->decremented_opts;
- new->decremented_opts = (base->decremented_opts
- | add->decremented_opts);
- /*
- * We may have incremental settings, so make sure we don't
- * inadvertently inherit an IndexOptions None from above.
- */
- new->opts = (base->opts & ~NO_OPTIONS);
- }
- else {
- /*
- * There are local nonincremental settings, which clear
- * all inheritance from above. They *are* the new base settings.
- */
- new->opts = add->opts;;
- }
- /*
- * We're guaranteed that there'll be no overlap between
- * the add-options and the remove-options.
- */
- new->opts |= new->incremented_opts;
- new->opts &= ~new->decremented_opts;
- }
- /*
- * Inherit the NameWidth settings if there aren't any specific to
- * the new location; otherwise we'll end up using the defaults set in the
- * config-rec creation routine.
- */
- if (add->name_adjust == K_UNSET) {
- new->name_width = base->name_width;
- new->name_adjust = base->name_adjust;
- }
- else {
- new->name_width = add->name_width;
- new->name_adjust = add->name_adjust;
- }
-
- /*
- * Likewise for DescriptionWidth.
- */
- if (add->desc_adjust == K_UNSET) {
- new->desc_width = base->desc_width;
- new->desc_adjust = base->desc_adjust;
- }
- else {
- new->desc_width = add->desc_width;
- new->desc_adjust = add->desc_adjust;
- }
-
- new->default_keyid = add->default_keyid ? add->default_keyid
- : base->default_keyid;
- new->default_direction = add->default_direction ? add->default_direction
- : base->default_direction;
- return new;
-}
-
-/****************************************************************
- *
- * Looking things up in config entries...
- */
-
-/* Structure used to hold entries when we're actually building an index */
-
-struct ent {
- char *name;
- char *icon;
- char *alt;
- char *desc;
- apr_off_t size;
- apr_time_t lm;
- struct ent *next;
- int ascending, ignore_case, version_sort;
- char key;
- int isdir;
-};
-
-static char *find_item(request_rec *r, apr_array_header_t *list, int path_only)
-{
- const char *content_type = ap_field_noparam(r->pool, r->content_type);
- const char *content_encoding = r->content_encoding;
- char *path = r->filename;
-
- struct item *items = (struct item *) list->elts;
- int i;
-
- for (i = 0; i < list->nelts; ++i) {
- struct item *p = &items[i];
-
- /* Special cased for ^^DIRECTORY^^ and ^^BLANKICON^^ */
- if ((path[0] == '^') || (!ap_strcmp_match(path, p->apply_path))) {
- if (!*(p->apply_to)) {
- return p->data;
- }
- else if (p->type == BY_PATH || path[0] == '^') {
- if (!ap_strcmp_match(path, p->apply_to)) {
- return p->data;
- }
- }
- else if (!path_only) {
- if (!content_encoding) {
- if (p->type == BY_TYPE) {
- if (content_type
- && !ap_strcasecmp_match(content_type,
- p->apply_to)) {
- return p->data;
- }
- }
- }
- else {
- if (p->type == BY_ENCODING) {
- if (!ap_strcasecmp_match(content_encoding,
- p->apply_to)) {
- return p->data;
- }
- }
- }
- }
- }
- }
- return NULL;
-}
-
-#define find_icon(d,p,t) find_item(p,d->icon_list,t)
-#define find_alt(d,p,t) find_item(p,d->alt_list,t)
-#define find_header(d,p) find_item(p,d->hdr_list,0)
-#define find_readme(d,p) find_item(p,d->rdme_list,0)
-
-static char *find_default_item(char *bogus_name, apr_array_header_t *list)
-{
- request_rec r;
- /* Bleah. I tried to clean up find_item, and it lead to this bit
- * of ugliness. Note that the fields initialized are precisely
- * those that find_item looks at...
- */
- r.filename = bogus_name;
- r.content_type = r.content_encoding = NULL;
- return find_item(&r, list, 1);
-}
-
-#define find_default_icon(d,n) find_default_item(n, d->icon_list)
-#define find_default_alt(d,n) find_default_item(n, d->alt_list)
-
-/*
- * Look through the list of pattern/description pairs and return the first one
- * if any) that matches the filename in the request. If multiple patterns
- * match, only the first one is used; since the order in the array is the
- * same as the order in which directives were processed, earlier matching
- * directives will dominate.
- */
-
-#ifdef CASE_BLIND_FILESYSTEM
-#define MATCH_FLAGS APR_FNM_CASE_BLIND
-#else
-#define MATCH_FLAGS 0
-#endif
-
-static char *find_desc(autoindex_config_rec *dcfg, const char *filename_full)
-{
- int i;
- ai_desc_t *list = (ai_desc_t *) dcfg->desc_list->elts;
- const char *filename_only;
- const char *filename;
-
- /*
- * If the filename includes a path, extract just the name itself
- * for the simple matches.
- */
- if ((filename_only = ap_strrchr_c(filename_full, '/')) == NULL) {
- filename_only = filename_full;
- }
- else {
- filename_only++;
- }
- for (i = 0; i < dcfg->desc_list->nelts; ++i) {
- ai_desc_t *tuple = &list[i];
- int found;
-
- /*
- * Only use the full-path filename if the pattern contains '/'s.
- */
- filename = (tuple->full_path) ? filename_full : filename_only;
- /*
- * Make the comparison using the cheapest method; only do
- * wildcard checking if we must.
- */
- if (tuple->wildcards) {
- found = (apr_fnmatch(tuple->pattern, filename, MATCH_FLAGS) == 0);
- }
- else {
- found = (ap_strstr_c(filename, tuple->pattern) != NULL);
- }
- if (found) {
- return tuple->description;
- }
- }
- return NULL;
-}
-
-static int ignore_entry(autoindex_config_rec *d, char *path)
-{
- apr_array_header_t *list = d->ign_list;
- struct item *items = (struct item *) list->elts;
- char *tt;
- int i;
-
- if ((tt = strrchr(path, '/')) == NULL) {
- tt = path;
- }
- else {
- tt++;
- }
-
- for (i = 0; i < list->nelts; ++i) {
- struct item *p = &items[i];
- char *ap;
-
- if ((ap = strrchr(p->apply_to, '/')) == NULL) {
- ap = p->apply_to;
- }
- else {
- ap++;
- }
-
-#ifndef CASE_BLIND_FILESYSTEM
- if (!ap_strcmp_match(path, p->apply_path)
- && !ap_strcmp_match(tt, ap)) {
- return 1;
- }
-#else /* !CASE_BLIND_FILESYSTEM */
- /*
- * On some platforms, the match must be case-blind. This is really
- * a factor of the filesystem involved, but we can't detect that
- * reliably - so we have to granularise at the OS level.
- */
- if (!ap_strcasecmp_match(path, p->apply_path)
- && !ap_strcasecmp_match(tt, ap)) {
- return 1;
- }
-#endif /* !CASE_BLIND_FILESYSTEM */
- }
- return 0;
-}
-
-/*****************************************************************
- *
- * Actually generating output
- */
-
-/*
- * Elements of the emitted document:
- * Preamble
- * Emitted unless SUPPRESS_PREAMBLE is set AND ap_run_sub_req
- * succeeds for the (content_type == text/html) header file.
- * Header file
- * Emitted if found (and able).
- * H1 tag line
- * Emitted if a header file is NOT emitted.
- * Directory stuff
- * Always emitted.
- * HR
- * Emitted if FANCY_INDEXING is set.
- * Readme file
- * Emitted if found (and able).
- * ServerSig
- * Emitted if ServerSignature is not Off AND a readme file
- * is NOT emitted.
- * Postamble
- * Emitted unless SUPPRESS_PREAMBLE is set AND ap_run_sub_req
- * succeeds for the (content_type == text/html) readme file.
- */
-
-
-/*
- * emit a plain text file
- */
-static void do_emit_plain(request_rec *r, apr_file_t *f)
-{
- char buf[AP_IOBUFSIZE + 1];
- int ch;
- apr_size_t i, c, n;
- apr_status_t rv;
-
- ap_rputs("<pre>\n", r);
- while (!apr_file_eof(f)) {
- do {
- n = sizeof(char) * AP_IOBUFSIZE;
- rv = apr_file_read(f, buf, &n);
- } while (APR_STATUS_IS_EINTR(rv));
- if (n == 0 || rv != APR_SUCCESS) {
- /* ###: better error here? */
- break;
- }
- buf[n] = '\0';
- c = 0;
- while (c < n) {
- for (i = c; i < n; i++) {
- if (buf[i] == '<' || buf[i] == '>' || buf[i] == '&') {
- break;
- }
- }
- ch = buf[i];
- buf[i] = '\0';
- ap_rputs(&buf[c], r);
- if (ch == '<') {
- ap_rputs("&lt;", r);
- }
- else if (ch == '>') {
- ap_rputs("&gt;", r);
- }
- else if (ch == '&') {
- ap_rputs("&amp;", r);
- }
- c = i + 1;
- }
- }
- ap_rputs("</pre>\n", r);
-}
-
-/*
- * Handle the preamble through the H1 tag line, inclusive. Locate
- * the file with a subrequests. Process text/html documents by actually
- * running the subrequest; text/xxx documents get copied verbatim,
- * and any other content type is ignored. This means that a non-text
- * document (such as HEADER.gif) might get multiviewed as the result
- * instead of a text document, meaning nothing will be displayed, but
- * oh well.
- */
-static void emit_head(request_rec *r, char *header_fname, int suppress_amble,
- int emit_xhtml, char *title)
-{
- apr_table_t *hdrs = r->headers_in;
- apr_file_t *f = NULL;
- request_rec *rr = NULL;
- int emit_amble = 1;
- int emit_H1 = 1;
- const char *r_accept;
- const char *r_accept_enc;
-
- /*
- * If there's a header file, send a subrequest to look for it. If it's
- * found and html do the subrequest, otherwise handle it
- */
- r_accept = apr_table_get(hdrs, "Accept");
- r_accept_enc = apr_table_get(hdrs, "Accept-Encoding");
- apr_table_setn(hdrs, "Accept", "text/html, text/plain");
- apr_table_unset(hdrs, "Accept-Encoding");
-
-
- if ((header_fname != NULL) && r->args) {
- header_fname = apr_pstrcat(r->pool, header_fname, "?", r->args, NULL);
- }
-
- if ((header_fname != NULL)
- && (rr = ap_sub_req_lookup_uri(header_fname, r, r->output_filters))
- && (rr->status == HTTP_OK)
- && (rr->filename != NULL)
- && (rr->finfo.filetype == APR_REG)) {
- /*
- * Check for the two specific cases we allow: text/html and
- * text/anything-else. The former is allowed to be processed for
- * SSIs.
- */
- if (rr->content_type != NULL) {
- if (!strcasecmp(ap_field_noparam(r->pool, rr->content_type),
- "text/html")) {
- ap_filter_t *f;
- /* Hope everything will work... */
- emit_amble = 0;
- emit_H1 = 0;
-
- if (! suppress_amble) {
- emit_preamble(r, emit_xhtml, title);
- }
- /* This is a hack, but I can't find any better way to do this.
- * The problem is that we have already created the sub-request,
- * but we just inserted the OLD_WRITE filter, and the
- * sub-request needs to pass its data through the OLD_WRITE
- * filter, or things go horribly wrong (missing data, data in
- * the wrong order, etc). To fix it, if you create a
- * sub-request and then insert the OLD_WRITE filter before you
- * run the request, you need to make sure that the sub-request
- * data goes through the OLD_WRITE filter. Just steal this
- * code. The long-term solution is to remove the ap_r*
- * functions.
- */
- for (f=rr->output_filters;
- f->frec != ap_subreq_core_filter_handle; f = f->next);
- f->next = r->output_filters;
-
- /*
- * If there's a problem running the subrequest, display the
- * preamble if we didn't do it before -- the header file
- * didn't get displayed.
- */
- if (ap_run_sub_req(rr) != OK) {
- /* It didn't work */
- emit_amble = suppress_amble;
- emit_H1 = 1;
- }
- }
- else if (!strncasecmp("text/", rr->content_type, 5)) {
- /*
- * If we can open the file, prefix it with the preamble
- * regardless; since we'll be sending a <pre> block around
- * the file's contents, any HTML header it had won't end up
- * where it belongs.
- */
- if (apr_file_open(&f, rr->filename, APR_READ,
- APR_OS_DEFAULT, r->pool) == APR_SUCCESS) {
- emit_preamble(r, emit_xhtml, title);
- emit_amble = 0;
- do_emit_plain(r, f);
- apr_file_close(f);
- emit_H1 = 0;
- }
- }
- }
- }
-
- if (r_accept) {
- apr_table_setn(hdrs, "Accept", r_accept);
- }
- else {
- apr_table_unset(hdrs, "Accept");
- }
-
- if (r_accept_enc) {
- apr_table_setn(hdrs, "Accept-Encoding", r_accept_enc);
- }
-
- if (emit_amble) {
- emit_preamble(r, emit_xhtml, title);
- }
- if (emit_H1) {
- ap_rvputs(r, "<h1>Index of ", title, "</h1>\n", NULL);
- }
- if (rr != NULL) {
- ap_destroy_sub_req(rr);
- }
-}
-
-
-/*
- * Handle the Readme file through the postamble, inclusive. Locate
- * the file with a subrequests. Process text/html documents by actually
- * running the subrequest; text/xxx documents get copied verbatim,
- * and any other content type is ignored. This means that a non-text
- * document (such as FOOTER.gif) might get multiviewed as the result
- * instead of a text document, meaning nothing will be displayed, but
- * oh well.
- */
-static void emit_tail(request_rec *r, char *readme_fname, int suppress_amble)
-{
- apr_file_t *f = NULL;
- request_rec *rr = NULL;
- int suppress_post = 0;
- int suppress_sig = 0;
-
- /*
- * If there's a readme file, send a subrequest to look for it. If it's
- * found and a text file, handle it -- otherwise fall through and
- * pretend there's nothing there.
- */
- if ((readme_fname != NULL)
- && (rr = ap_sub_req_lookup_uri(readme_fname, r, r->output_filters))
- && (rr->status == HTTP_OK)
- && (rr->filename != NULL)
- && rr->finfo.filetype == APR_REG) {
- /*
- * Check for the two specific cases we allow: text/html and
- * text/anything-else. The former is allowed to be processed for
- * SSIs.
- */
- if (rr->content_type != NULL) {
- if (!strcasecmp(ap_field_noparam(r->pool, rr->content_type),
- "text/html")) {
- ap_filter_t *f;
- for (f=rr->output_filters;
- f->frec != ap_subreq_core_filter_handle; f = f->next);
- f->next = r->output_filters;
-
-
- if (ap_run_sub_req(rr) == OK) {
- /* worked... */
- suppress_sig = 1;
- suppress_post = suppress_amble;
- }
- }
- else if (!strncasecmp("text/", rr->content_type, 5)) {
- /*
- * If we can open the file, suppress the signature.
- */
- if (apr_file_open(&f, rr->filename, APR_READ,
- APR_OS_DEFAULT, r->pool) == APR_SUCCESS) {
- do_emit_plain(r, f);
- apr_file_close(f);
- suppress_sig = 1;
- }
- }
- }
- }
-
- if (!suppress_sig) {
- ap_rputs(ap_psignature("", r), r);
- }
- if (!suppress_post) {
- ap_rputs("</body></html>\n", r);
- }
- if (rr != NULL) {
- ap_destroy_sub_req(rr);
- }
-}
-
-
-static char *find_title(request_rec *r)
-{
- char titlebuf[MAX_STRING_LEN], *find = "<title>";
- apr_file_t *thefile = NULL;
- int x, y, p;
- apr_size_t n;
-
- if (r->status != HTTP_OK) {
- return NULL;
- }
- if ((r->content_type != NULL)
- && (!strcasecmp(ap_field_noparam(r->pool, r->content_type),
- "text/html")
- || !strcmp(r->content_type, INCLUDES_MAGIC_TYPE))
- && !r->content_encoding) {
- if (apr_file_open(&thefile, r->filename, APR_READ,
- APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
- return NULL;
- }
- n = sizeof(char) * (MAX_STRING_LEN - 1);
- apr_file_read(thefile, titlebuf, &n);
- if (n <= 0) {
- apr_file_close(thefile);
- return NULL;
- }
- titlebuf[n] = '\0';
- for (x = 0, p = 0; titlebuf[x]; x++) {
- if (apr_tolower(titlebuf[x]) == find[p]) {
- if (!find[++p]) {
- if ((p = ap_ind(&titlebuf[++x], '<')) != -1) {
- titlebuf[x + p] = '\0';
- }
- /* Scan for line breaks for Tanmoy's secretary */
- for (y = x; titlebuf[y]; y++) {
- if ((titlebuf[y] == CR) || (titlebuf[y] == LF)) {
- if (y == x) {
- x++;
- }
- else {
- titlebuf[y] = ' ';
- }
- }
- }
- apr_file_close(thefile);
- return apr_pstrdup(r->pool, &titlebuf[x]);
- }
- }
- else {
- p = 0;
- }
- }
- apr_file_close(thefile);
- }
- return NULL;
-}
-
-static struct ent *make_parent_entry(apr_int32_t autoindex_opts,
- autoindex_config_rec *d,
- request_rec *r, char keyid,
- char direction)
-{
- struct ent *p = (struct ent *) apr_pcalloc(r->pool, sizeof(struct ent));
- char *testpath;
- /*
- * p->name is now the true parent URI.
- * testpath is a crafted lie, so that the syntax '/some/..'
- * (or simply '..')be used to describe 'up' from '/some/'
- * when processeing IndexIgnore, and Icon|Alt|Desc configs.
- */
-
- /* The output has always been to the parent. Don't make ourself
- * our own parent (worthless cyclical reference).
- */
- if (!(p->name = ap_make_full_path(r->pool, r->uri, "../"))) {
- return (NULL);
- }
- ap_getparents(p->name);
- if (!*p->name) {
- return (NULL);
- }
-
- /* IndexIgnore has always compared "/thispath/.." */
- testpath = ap_make_full_path(r->pool, r->filename, "..");
- if (ignore_entry(d, testpath)) {
- return (NULL);
- }
-
- p->size = -1;
- p->lm = -1;
- p->key = apr_toupper(keyid);
- p->ascending = (apr_toupper(direction) == D_ASCENDING);
- p->version_sort = autoindex_opts & VERSION_SORT;
- if (autoindex_opts & FANCY_INDEXING) {
- if (!(p->icon = find_default_icon(d, testpath))) {
- p->icon = find_default_icon(d, "^^DIRECTORY^^");
- }
- if (!(p->alt = find_default_alt(d, testpath))) {
- if (!(p->alt = find_default_alt(d, "^^DIRECTORY^^"))) {
- p->alt = "DIR";
- }
- }
- p->desc = find_desc(d, testpath);
- }
- return p;
-}
-
-static struct ent *make_autoindex_entry(const apr_finfo_t *dirent,
- int autoindex_opts,
- autoindex_config_rec *d,
- request_rec *r, char keyid,
- char direction,
- const char *pattern)
-{
- request_rec *rr;
- struct ent *p;
- int show_forbidden = 0;
-
- /* Dot is ignored, Parent is handled by make_parent_entry() */
- if ((dirent->name[0] == '.') && (!dirent->name[1]
- || ((dirent->name[1] == '.') && !dirent->name[2])))
- return (NULL);
-
- /*
- * On some platforms, the match must be case-blind. This is really
- * a factor of the filesystem involved, but we can't detect that
- * reliably - so we have to granularise at the OS level.
- */
- if (pattern && (apr_fnmatch(pattern, dirent->name,
- APR_FNM_NOESCAPE | APR_FNM_PERIOD
-#ifdef CASE_BLIND_FILESYSTEM
- | APR_FNM_CASE_BLIND
-#endif
- )
- != APR_SUCCESS)) {
- return (NULL);
- }
-
- if (ignore_entry(d, ap_make_full_path(r->pool,
- r->filename, dirent->name))) {
- return (NULL);
- }
-
- if (!(rr = ap_sub_req_lookup_dirent(dirent, r, AP_SUBREQ_NO_ARGS, NULL))) {
- return (NULL);
- }
-
- if((autoindex_opts & SHOW_FORBIDDEN)
- && (rr->status == HTTP_UNAUTHORIZED || rr->status == HTTP_FORBIDDEN)) {
- show_forbidden = 1;
- }
-
- if ((rr->finfo.filetype != APR_DIR && rr->finfo.filetype != APR_REG)
- || !(rr->status == OK || ap_is_HTTP_SUCCESS(rr->status)
- || ap_is_HTTP_REDIRECT(rr->status)
- || show_forbidden == 1)) {
- ap_destroy_sub_req(rr);
- return (NULL);
- }
-
- p = (struct ent *) apr_pcalloc(r->pool, sizeof(struct ent));
- if (dirent->filetype == APR_DIR) {
- p->name = apr_pstrcat(r->pool, dirent->name, "/", NULL);
- }
- else {
- p->name = apr_pstrdup(r->pool, dirent->name);
- }
- p->size = -1;
- p->icon = NULL;
- p->alt = NULL;
- p->desc = NULL;
- p->lm = -1;
- p->isdir = 0;
- p->key = apr_toupper(keyid);
- p->ascending = (apr_toupper(direction) == D_ASCENDING);
- p->version_sort = !!(autoindex_opts & VERSION_SORT);
- p->ignore_case = !!(autoindex_opts & IGNORE_CASE);
-
- if (autoindex_opts & (FANCY_INDEXING | TABLE_INDEXING)) {
- p->lm = rr->finfo.mtime;
- if (dirent->filetype == APR_DIR) {
- if (autoindex_opts & FOLDERS_FIRST) {
- p->isdir = 1;
- }
- rr->filename = ap_make_dirstr_parent (rr->pool, rr->filename);
-
- /* omit the trailing slash (1.3 compat) */
- rr->filename[strlen(rr->filename) - 1] = '\0';
-
- if (!(p->icon = find_icon(d, rr, 1))) {
- p->icon = find_default_icon(d, "^^DIRECTORY^^");
- }
- if (!(p->alt = find_alt(d, rr, 1))) {
- if (!(p->alt = find_default_alt(d, "^^DIRECTORY^^"))) {
- p->alt = "DIR";
- }
- }
- }
- else {
- p->icon = find_icon(d, rr, 0);
- p->alt = find_alt(d, rr, 0);
- p->size = rr->finfo.size;
- }
-
- p->desc = find_desc(d, rr->filename);
-
- if ((!p->desc) && (autoindex_opts & SCAN_HTML_TITLES)) {
- p->desc = apr_pstrdup(r->pool, find_title(rr));
- }
- }
- ap_destroy_sub_req(rr);
- /*
- * We don't need to take any special action for the file size key.
- * If we did, it would go here.
- */
- if (keyid == K_LAST_MOD) {
- if (p->lm < 0) {
- p->lm = 0;
- }
- }
- return (p);
-}
-
-static char *terminate_description(autoindex_config_rec *d, char *desc,
- apr_int32_t autoindex_opts, int desc_width)
-{
- int maxsize = desc_width;
- register int x;
-
- /*
- * If there's no DescriptionWidth in effect, default to the old
- * behaviour of adjusting the description size depending upon
- * what else is being displayed. Otherwise, stick with the
- * setting.
- */
- if (d->desc_adjust == K_UNSET) {
- if (autoindex_opts & SUPPRESS_ICON) {
- maxsize += 6;
- }
- if (autoindex_opts & SUPPRESS_LAST_MOD) {
- maxsize += 19;
- }
- if (autoindex_opts & SUPPRESS_SIZE) {
- maxsize += 7;
- }
- }
- for (x = 0; desc[x] && ((maxsize > 0) || (desc[x] == '<')); x++) {
- if (desc[x] == '<') {
- while (desc[x] != '>') {
- if (!desc[x]) {
- maxsize = 0;
- break;
- }
- ++x;
- }
- }
- else if (desc[x] == '&') {
- /* entities like &auml; count as one character */
- --maxsize;
- for ( ; desc[x] != ';'; ++x) {
- if (desc[x] == '\0') {
- maxsize = 0;
- break;
- }
- }
- }
- else {
- --maxsize;
- }
- }
- if (!maxsize && desc[x] != '\0') {
- desc[x - 1] = '>'; /* Grump. */
- desc[x] = '\0'; /* Double Grump! */
- }
- return desc;
-}
-
-/*
- * Emit the anchor for the specified field. If a field is the key for the
- * current request, the link changes its meaning to reverse the order when
- * selected again. Non-active fields always start in ascending order.
- */
-static void emit_link(request_rec *r, const char *anchor, char column,
- char curkey, char curdirection,
- const char *colargs, int nosort)
-{
- if (!nosort) {
- char qvalue[9];
-
- qvalue[0] = '?';
- qvalue[1] = 'C';
- qvalue[2] = '=';
- qvalue[3] = column;
- qvalue[4] = ';';
- qvalue[5] = 'O';
- qvalue[6] = '=';
- /* reverse? */
- qvalue[7] = ((curkey == column) && (curdirection == D_ASCENDING))
- ? D_DESCENDING : D_ASCENDING;
- qvalue[8] = '\0';
- ap_rvputs(r, "<a href=\"", qvalue, colargs ? colargs : "",
- "\">", anchor, "</a>", NULL);
- }
- else {
- ap_rputs(anchor, r);
- }
-}
-
-static void output_directories(struct ent **ar, int n,
- autoindex_config_rec *d, request_rec *r,
- apr_int32_t autoindex_opts, char keyid,
- char direction, const char *colargs)
-{
- int x;
- apr_size_t rv;
- char *name = r->uri;
- char *tp;
- int static_columns = !!(autoindex_opts & SUPPRESS_COLSORT);
- apr_pool_t *scratch;
- int name_width;
- int desc_width;
- char *name_scratch;
- char *pad_scratch;
- char *breakrow = "";
-
- apr_pool_create(&scratch, r->pool);
- if (name[0] == '\0') {
- name = "/";
- }
-
- name_width = d->name_width;
- desc_width = d->desc_width;
-
- if ((autoindex_opts & (FANCY_INDEXING | TABLE_INDEXING))
- == FANCY_INDEXING) {
- if (d->name_adjust == K_ADJUST) {
- for (x = 0; x < n; x++) {
- int t = strlen(ar[x]->name);
- if (t > name_width) {
- name_width = t;
- }
- }
- }
-
- if (d->desc_adjust == K_ADJUST) {
- for (x = 0; x < n; x++) {
- if (ar[x]->desc != NULL) {
- int t = strlen(ar[x]->desc);
- if (t > desc_width) {
- desc_width = t;
- }
- }
- }
- }
- }
- name_scratch = apr_palloc(r->pool, name_width + 1);
- pad_scratch = apr_palloc(r->pool, name_width + 1);
- memset(pad_scratch, ' ', name_width);
- pad_scratch[name_width] = '\0';
-
- if (autoindex_opts & TABLE_INDEXING) {
- int cols = 1;
- ap_rputs("<table><tr>", r);
- if (!(autoindex_opts & SUPPRESS_ICON)) {
- ap_rputs("<th>", r);
- if ((tp = find_default_icon(d, "^^BLANKICON^^"))) {
- ap_rvputs(r, "<img src=\"", ap_escape_html(scratch, tp),
- "\" alt=\"[ICO]\"", NULL);
- if (d->icon_width) {
- ap_rprintf(r, " width=\"%d\"", d->icon_width);
- }
- if (d->icon_height) {
- ap_rprintf(r, " height=\"%d\"", d->icon_height);
- }
-
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs("></th>", r);
- }
- else {
- ap_rputs("&nbsp;</th>", r);
- }
-
- ++cols;
- }
- ap_rputs("<th>", r);
- emit_link(r, "Name", K_NAME, keyid, direction,
- colargs, static_columns);
- if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
- ap_rputs("</th><th>", r);
- emit_link(r, "Last modified", K_LAST_MOD, keyid, direction,
- colargs, static_columns);
- ++cols;
- }
- if (!(autoindex_opts & SUPPRESS_SIZE)) {
- ap_rputs("</th><th>", r);
- emit_link(r, "Size", K_SIZE, keyid, direction,
- colargs, static_columns);
- ++cols;
- }
- if (!(autoindex_opts & SUPPRESS_DESC)) {
- ap_rputs("</th><th>", r);
- emit_link(r, "Description", K_DESC, keyid, direction,
- colargs, static_columns);
- ++cols;
- }
- if (!(autoindex_opts & SUPPRESS_RULES)) {
- breakrow = apr_psprintf(r->pool,
- "<tr><th colspan=\"%d\">"
- "<hr%s></th></tr>\n", cols,
- (autoindex_opts & EMIT_XHTML) ? " /" : "");
- }
- ap_rvputs(r, "</th></tr>", breakrow, NULL);
- }
- else if (autoindex_opts & FANCY_INDEXING) {
- ap_rputs("<pre>", r);
- if (!(autoindex_opts & SUPPRESS_ICON)) {
- if ((tp = find_default_icon(d, "^^BLANKICON^^"))) {
- ap_rvputs(r, "<img src=\"", ap_escape_html(scratch, tp),
- "\" alt=\"Icon \"", NULL);
- if (d->icon_width) {
- ap_rprintf(r, " width=\"%d\"", d->icon_width);
- }
- if (d->icon_height) {
- ap_rprintf(r, " height=\"%d\"", d->icon_height);
- }
-
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs("> ", r);
- }
- else {
- ap_rputs(" ", r);
- }
- }
- emit_link(r, "Name", K_NAME, keyid, direction,
- colargs, static_columns);
- ap_rputs(pad_scratch + 4, r);
- /*
- * Emit the guaranteed-at-least-one-space-between-columns byte.
- */
- ap_rputs(" ", r);
- if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
- emit_link(r, "Last modified", K_LAST_MOD, keyid, direction,
- colargs, static_columns);
- ap_rputs(" ", r);
- }
- if (!(autoindex_opts & SUPPRESS_SIZE)) {
- emit_link(r, "Size", K_SIZE, keyid, direction,
- colargs, static_columns);
- ap_rputs(" ", r);
- }
- if (!(autoindex_opts & SUPPRESS_DESC)) {
- emit_link(r, "Description", K_DESC, keyid, direction,
- colargs, static_columns);
- }
- if (!(autoindex_opts & SUPPRESS_RULES)) {
- ap_rputs("<hr", r);
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs(">", r);
- }
- else {
- ap_rputc('\n', r);
- }
- }
- else {
- ap_rputs("<ul>", r);
- }
-
- for (x = 0; x < n; x++) {
- char *anchor, *t, *t2;
- int nwidth;
-
- apr_pool_clear(scratch);
-
- t = ar[x]->name;
- anchor = ap_escape_html(scratch, ap_os_escape_path(scratch, t, 0));
-
- if (!x && t[0] == '/') {
- t2 = "Parent Directory";
- }
- else {
- t2 = t;
- }
-
- if (autoindex_opts & TABLE_INDEXING) {
- ap_rputs("<tr>", r);
- if (!(autoindex_opts & SUPPRESS_ICON)) {
- ap_rputs("<td valign=\"top\">", r);
- if (autoindex_opts & ICONS_ARE_LINKS) {
- ap_rvputs(r, "<a href=\"", anchor, "\">", NULL);
- }
- if ((ar[x]->icon) || d->default_icon) {
- ap_rvputs(r, "<img src=\"",
- ap_escape_html(scratch,
- ar[x]->icon ? ar[x]->icon
- : d->default_icon),
- "\" alt=\"[", (ar[x]->alt ? ar[x]->alt : " "),
- "]\"", NULL);
- if (d->icon_width) {
- ap_rprintf(r, " width=\"%d\"", d->icon_width);
- }
- if (d->icon_height) {
- ap_rprintf(r, " height=\"%d\"", d->icon_height);
- }
-
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs(">", r);
- }
- else {
- ap_rputs("&nbsp;", r);
- }
- if (autoindex_opts & ICONS_ARE_LINKS) {
- ap_rputs("</a></td>", r);
- }
- else {
- ap_rputs("</td>", r);
- }
- }
- if (d->name_adjust == K_ADJUST) {
- ap_rvputs(r, "<td><a href=\"", anchor, "\">",
- ap_escape_html(scratch, t2), "</a>", NULL);
- }
- else {
- nwidth = strlen(t2);
- if (nwidth > name_width) {
- memcpy(name_scratch, t2, name_width - 3);
- name_scratch[name_width - 3] = '.';
- name_scratch[name_width - 2] = '.';
- name_scratch[name_width - 1] = '>';
- name_scratch[name_width] = 0;
- t2 = name_scratch;
- nwidth = name_width;
- }
- ap_rvputs(r, "<td><a href=\"", anchor, "\">",
- ap_escape_html(scratch, t2),
- "</a>", pad_scratch + nwidth, NULL);
- }
- if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
- if (ar[x]->lm != -1) {
- char time_str[MAX_STRING_LEN];
- apr_time_exp_t ts;
- apr_time_exp_lt(&ts, ar[x]->lm);
- apr_strftime(time_str, &rv, MAX_STRING_LEN,
- "</td><td align=\"right\">%d-%b-%Y %H:%M ",
- &ts);
- ap_rputs(time_str, r);
- }
- else {
- ap_rputs("</td><td>&nbsp;", r);
- }
- }
- if (!(autoindex_opts & SUPPRESS_SIZE)) {
- char buf[5];
- ap_rvputs(r, "</td><td align=\"right\">",
- apr_strfsize(ar[x]->size, buf), NULL);
- }
- if (!(autoindex_opts & SUPPRESS_DESC)) {
- if (ar[x]->desc) {
- if (d->desc_adjust == K_ADJUST) {
- ap_rvputs(r, "</td><td>", ar[x]->desc, NULL);
- }
- else {
- ap_rvputs(r, "</td><td>",
- terminate_description(d, ar[x]->desc,
- autoindex_opts,
- desc_width), NULL);
- }
- }
- }
- else {
- ap_rputs("</td><td>&nbsp;", r);
- }
- ap_rputs("</td></tr>\n", r);
- }
- else if (autoindex_opts & FANCY_INDEXING) {
- if (!(autoindex_opts & SUPPRESS_ICON)) {
- if (autoindex_opts & ICONS_ARE_LINKS) {
- ap_rvputs(r, "<a href=\"", anchor, "\">", NULL);
- }
- if ((ar[x]->icon) || d->default_icon) {
- ap_rvputs(r, "<img src=\"",
- ap_escape_html(scratch,
- ar[x]->icon ? ar[x]->icon
- : d->default_icon),
- "\" alt=\"[", (ar[x]->alt ? ar[x]->alt : " "),
- "]\"", NULL);
- if (d->icon_width) {
- ap_rprintf(r, " width=\"%d\"", d->icon_width);
- }
- if (d->icon_height) {
- ap_rprintf(r, " height=\"%d\"", d->icon_height);
- }
-
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs(">", r);
- }
- else {
- ap_rputs(" ", r);
- }
- if (autoindex_opts & ICONS_ARE_LINKS) {
- ap_rputs("</a> ", r);
- }
- else {
- ap_rputc(' ', r);
- }
- }
- nwidth = strlen(t2);
- if (nwidth > name_width) {
- memcpy(name_scratch, t2, name_width - 3);
- name_scratch[name_width - 3] = '.';
- name_scratch[name_width - 2] = '.';
- name_scratch[name_width - 1] = '>';
- name_scratch[name_width] = 0;
- t2 = name_scratch;
- nwidth = name_width;
- }
- ap_rvputs(r, "<a href=\"", anchor, "\">",
- ap_escape_html(scratch, t2),
- "</a>", pad_scratch + nwidth, NULL);
- /*
- * The blank before the storm.. er, before the next field.
- */
- ap_rputs(" ", r);
- if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
- if (ar[x]->lm != -1) {
- char time_str[MAX_STRING_LEN];
- apr_time_exp_t ts;
- apr_time_exp_lt(&ts, ar[x]->lm);
- apr_strftime(time_str, &rv, MAX_STRING_LEN,
- "%d-%b-%Y %H:%M ", &ts);
- ap_rputs(time_str, r);
- }
- else {
- /*Length="22-Feb-1998 23:42 " (see 4 lines above) */
- ap_rputs(" ", r);
- }
- }
- if (!(autoindex_opts & SUPPRESS_SIZE)) {
- char buf[5];
- ap_rputs(apr_strfsize(ar[x]->size, buf), r);
- ap_rputs(" ", r);
- }
- if (!(autoindex_opts & SUPPRESS_DESC)) {
- if (ar[x]->desc) {
- ap_rputs(terminate_description(d, ar[x]->desc,
- autoindex_opts,
- desc_width), r);
- }
- }
- ap_rputc('\n', r);
- }
- else {
- ap_rvputs(r, "<li><a href=\"", anchor, "\"> ", t2,
- "</a></li>\n", NULL);
- }
- }
- if (autoindex_opts & TABLE_INDEXING) {
- ap_rvputs(r, breakrow, "</table>\n", NULL);
- }
- else if (autoindex_opts & FANCY_INDEXING) {
- if (!(autoindex_opts & SUPPRESS_RULES)) {
- ap_rputs("<hr", r);
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs("></pre>\n", r);
- }
- else {
- ap_rputs("</pre>\n", r);
- }
- }
- else {
- ap_rputs("</ul>\n", r);
- }
-}
-
-/*
- * Compare two file entries according to the sort criteria. The return
- * is essentially a signum function value.
- */
-
-static int dsortf(struct ent **e1, struct ent **e2)
-{
- struct ent *c1;
- struct ent *c2;
- int result = 0;
-
- /*
- * First, see if either of the entries is for the parent directory.
- * If so, that *always* sorts lower than anything else.
- */
- if ((*e1)->name[0] == '/') {
- return -1;
- }
- if ((*e2)->name[0] == '/') {
- return 1;
- }
- /*
- * Now see if one's a directory and one isn't, if we're set
- * isdir for FOLDERS_FIRST.
- */
- if ((*e1)->isdir != (*e2)->isdir) {
- return (*e1)->isdir ? -1 : 1;
- }
- /*
- * All of our comparisons will be of the c1 entry against the c2 one,
- * so assign them appropriately to take care of the ordering.
- */
- if ((*e1)->ascending) {
- c1 = *e1;
- c2 = *e2;
- }
- else {
- c1 = *e2;
- c2 = *e1;
- }
-
- switch (c1->key) {
- case K_LAST_MOD:
- if (c1->lm > c2->lm) {
- return 1;
- }
- else if (c1->lm < c2->lm) {
- return -1;
- }
- break;
- case K_SIZE:
- if (c1->size > c2->size) {
- return 1;
- }
- else if (c1->size < c2->size) {
- return -1;
- }
- break;
- case K_DESC:
- if (c1->version_sort) {
- result = apr_strnatcmp(c1->desc ? c1->desc : "",
- c2->desc ? c2->desc : "");
- }
- else {
- result = strcmp(c1->desc ? c1->desc : "",
- c2->desc ? c2->desc : "");
- }
- if (result) {
- return result;
- }
- break;
- }
-
- /* names may identical when treated case-insensitively,
- * so always fall back on strcmp() flavors to put entries
- * in deterministic order. This means that 'ABC' and 'abc'
- * will always appear in the same order, rather than
- * variably between 'ABC abc' and 'abc ABC' order.
- */
-
- if (c1->version_sort) {
- if (c1->ignore_case) {
- result = apr_strnatcasecmp (c1->name, c2->name);
- }
- if (!result) {
- result = apr_strnatcmp(c1->name, c2->name);
- }
- }
-
- /* The names may be identical in respects other other than
- * filename case when strnatcmp is used above, so fall back
- * to strcmp on conflicts so that fn1.01.zzz and fn1.1.zzz
- * are also sorted in a deterministic order.
- */
-
- if (!result && c1->ignore_case) {
- result = strcasecmp (c1->name, c2->name);
- }
-
- if (!result) {
- result = strcmp (c1->name, c2->name);
- }
-
- return result;
-}
-
-
-static int index_directory(request_rec *r,
- autoindex_config_rec *autoindex_conf)
-{
- char *title_name = ap_escape_html(r->pool, r->uri);
- char *title_endp;
- char *name = r->filename;
- char *pstring = NULL;
- apr_finfo_t dirent;
- apr_dir_t *thedir;
- apr_status_t status;
- int num_ent = 0, x;
- struct ent *head, *p;
- struct ent **ar = NULL;
- const char *qstring;
- apr_int32_t autoindex_opts = autoindex_conf->opts;
- char keyid;
- char direction;
- char *colargs;
- char *fullpath;
- apr_size_t dirpathlen;
-
- if ((status = apr_dir_open(&thedir, name, r->pool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "Can't open directory for index: %s", r->filename);
- return HTTP_FORBIDDEN;
- }
-
-#if APR_HAS_UNICODE_FS
- ap_set_content_type(r, "text/html;charset=utf-8");
-#else
- ap_set_content_type(r, "text/html");
-#endif
- if (autoindex_opts & TRACK_MODIFIED) {
- ap_update_mtime(r, r->finfo.mtime);
- ap_set_last_modified(r);
- ap_set_etag(r);
- }
- if (r->header_only) {
- apr_dir_close(thedir);
- return 0;
- }
-
- /*
- * If there is no specific ordering defined for this directory,
- * default to ascending by filename.
- */
- keyid = autoindex_conf->default_keyid
- ? autoindex_conf->default_keyid : K_NAME;
- direction = autoindex_conf->default_direction
- ? autoindex_conf->default_direction : D_ASCENDING;
-
- /*
- * Figure out what sort of indexing (if any) we're supposed to use.
- *
- * If no QUERY_STRING was specified or client query strings have been
- * explicitly disabled.
- * If we are ignoring the client, suppress column sorting as well.
- */
- if (autoindex_opts & IGNORE_CLIENT) {
- qstring = NULL;
- autoindex_opts |= SUPPRESS_COLSORT;
- colargs = "";
- }
- else {
- char fval[5], vval[5], *ppre = "", *epattern = "";
- fval[0] = '\0'; vval[0] = '\0';
- qstring = r->args;
-
- while (qstring && *qstring) {
-
- /* C= First Sort key Column (N, M, S, D) */
- if ( qstring[0] == 'C' && qstring[1] == '='
- && qstring[2] && strchr(K_VALID, qstring[2])
- && ( qstring[3] == '&' || qstring[3] == ';'
- || !qstring[3])) {
- keyid = qstring[2];
- qstring += qstring[3] ? 4 : 3;
- }
-
- /* O= Sort order (A, D) */
- else if ( qstring[0] == 'O' && qstring[1] == '='
- && ( (qstring[2] == D_ASCENDING)
- || (qstring[2] == D_DESCENDING))
- && ( qstring[3] == '&' || qstring[3] == ';'
- || !qstring[3])) {
- direction = qstring[2];
- qstring += qstring[3] ? 4 : 3;
- }
-
- /* F= Output Format (0 plain, 1 fancy (pre), 2 table) */
- else if ( qstring[0] == 'F' && qstring[1] == '='
- && qstring[2] && strchr("012", qstring[2])
- && ( qstring[3] == '&' || qstring[3] == ';'
- || !qstring[3])) {
- if (qstring[2] == '0') {
- autoindex_opts &= ~(FANCY_INDEXING | TABLE_INDEXING);
- }
- else if (qstring[2] == '1') {
- autoindex_opts = (autoindex_opts | FANCY_INDEXING)
- & ~TABLE_INDEXING;
- }
- else if (qstring[2] == '2') {
- autoindex_opts |= FANCY_INDEXING | TABLE_INDEXING;
- }
- strcpy(fval, ";F= ");
- fval[3] = qstring[2];
- qstring += qstring[3] ? 4 : 3;
- }
-
- /* V= Version sort (0, 1) */
- else if ( qstring[0] == 'V' && qstring[1] == '='
- && (qstring[2] == '0' || qstring[2] == '1')
- && ( qstring[3] == '&' || qstring[3] == ';'
- || !qstring[3])) {
- if (qstring[2] == '0') {
- autoindex_opts &= ~VERSION_SORT;
- }
- else if (qstring[2] == '1') {
- autoindex_opts |= VERSION_SORT;
- }
- strcpy(vval, ";V= ");
- vval[3] = qstring[2];
- qstring += qstring[3] ? 4 : 3;
- }
-
- /* P= wildcard pattern (*.foo) */
- else if (qstring[0] == 'P' && qstring[1] == '=') {
- const char *eos = qstring += 2; /* for efficiency */
-
- while (*eos && *eos != '&' && *eos != ';') {
- ++eos;
- }
-
- if (eos == qstring) {
- pstring = NULL;
- }
- else {
- pstring = apr_pstrndup(r->pool, qstring, eos - qstring);
- if (ap_unescape_url(pstring) != OK) {
- /* ignore the pattern, if it's bad. */
- pstring = NULL;
- }
- else {
- ppre = ";P=";
- /* be correct */
- epattern = ap_escape_uri(r->pool, pstring);
- }
- }
-
- if (*eos && *++eos) {
- qstring = eos;
- }
- else {
- qstring = NULL;
- }
- }
-
- /* Syntax error? Ignore the remainder! */
- else {
- qstring = NULL;
- }
- }
- colargs = apr_pstrcat(r->pool, fval, vval, ppre, epattern, NULL);
- }
-
- /* Spew HTML preamble */
- title_endp = title_name + strlen(title_name) - 1;
-
- while (title_endp > title_name && *title_endp == '/') {
- *title_endp-- = '\0';
- }
-
- emit_head(r, find_header(autoindex_conf, r),
- autoindex_opts & SUPPRESS_PREAMBLE,
- autoindex_opts & EMIT_XHTML, title_name);
-
- /*
- * Since we don't know how many dir. entries there are, put them into a
- * linked list and then arrayificate them so qsort can use them.
- */
- head = NULL;
- p = make_parent_entry(autoindex_opts, autoindex_conf, r, keyid, direction);
- if (p != NULL) {
- p->next = head;
- head = p;
- num_ent++;
- }
- fullpath = apr_palloc(r->pool, APR_PATH_MAX);
- dirpathlen = strlen(name);
- memcpy(fullpath, name, dirpathlen);
-
- do {
- status = apr_dir_read(&dirent, APR_FINFO_MIN | APR_FINFO_NAME, thedir);
- if (APR_STATUS_IS_INCOMPLETE(status)) {
- continue; /* ignore un-stat()able files */
- }
- else if (status != APR_SUCCESS) {
- break;
- }
-
- /* We want to explode symlinks here. */
- if (dirent.filetype == APR_LNK) {
- const char *savename;
- apr_finfo_t fi;
- /* We *must* have FNAME. */
- savename = dirent.name;
- apr_cpystrn(fullpath + dirpathlen, dirent.name,
- APR_PATH_MAX - dirpathlen);
- status = apr_stat(&fi, fullpath,
- dirent.valid & ~(APR_FINFO_NAME), r->pool);
- if (status != APR_SUCCESS) {
- /* Something bad happened, skip this file. */
- continue;
- }
- memcpy(&dirent, &fi, sizeof(fi));
- dirent.name = savename;
- dirent.valid |= APR_FINFO_NAME;
- }
- p = make_autoindex_entry(&dirent, autoindex_opts, autoindex_conf, r,
- keyid, direction, pstring);
- if (p != NULL) {
- p->next = head;
- head = p;
- num_ent++;
- }
- } while (1);
-
- if (num_ent > 0) {
- ar = (struct ent **) apr_palloc(r->pool,
- num_ent * sizeof(struct ent *));
- p = head;
- x = 0;
- while (p) {
- ar[x++] = p;
- p = p->next;
- }
-
- qsort((void *) ar, num_ent, sizeof(struct ent *),
- (int (*)(const void *, const void *)) dsortf);
- }
- output_directories(ar, num_ent, autoindex_conf, r, autoindex_opts,
- keyid, direction, colargs);
- apr_dir_close(thedir);
-
- emit_tail(r, find_readme(autoindex_conf, r),
- autoindex_opts & SUPPRESS_PREAMBLE);
-
- return 0;
-}
-
-/* The formal handler... */
-
-static int handle_autoindex(request_rec *r)
-{
- autoindex_config_rec *d;
- int allow_opts;
-
- if(strcmp(r->handler,DIR_MAGIC_TYPE)) {
- return DECLINED;
- }
-
- allow_opts = ap_allow_options(r);
-
- d = (autoindex_config_rec *) ap_get_module_config(r->per_dir_config,
- &autoindex_module);
-
- r->allowed |= (AP_METHOD_BIT << M_GET);
- if (r->method_number != M_GET) {
- return DECLINED;
- }
-
- /* OK, nothing easy. Trot out the heavy artillery... */
-
- if (allow_opts & OPT_INDEXES) {
- int errstatus;
-
- if ((errstatus = ap_discard_request_body(r)) != OK) {
- return errstatus;
- }
-
- /* KLUDGE --- make the sub_req lookups happen in the right directory.
- * Fixing this in the sub_req_lookup functions themselves is difficult,
- * and would probably break virtual includes...
- */
-
- if (r->filename[strlen(r->filename) - 1] != '/') {
- r->filename = apr_pstrcat(r->pool, r->filename, "/", NULL);
- }
- return index_directory(r, d);
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Directory index forbidden by rule: %s", r->filename);
- return HTTP_FORBIDDEN;
- }
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(handle_autoindex,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA autoindex_module =
-{
- STANDARD20_MODULE_STUFF,
- create_autoindex_config, /* dir config creater */
- merge_autoindex_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- autoindex_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/generators/mod_autoindex.dsp b/modules/generators/mod_autoindex.dsp
deleted file mode 100644
index f893240932..0000000000
--- a/modules/generators/mod_autoindex.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_autoindex" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_autoindex - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_autoindex.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_autoindex.mak" CFG="mod_autoindex - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_autoindex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_autoindex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_autoindex - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_autoindex_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_autoindex - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_autoindex_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_autoindex - Win32 Release"
-# Name "mod_autoindex - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_autoindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_autoindex.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_autoindex - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_autoindex.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_autoindex.so "autoindex_module for Apache" ../../include/ap_release.h > .\mod_autoindex.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_autoindex - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_autoindex.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_autoindex.so "autoindex_module for Apache" ../../include/ap_release.h > .\mod_autoindex.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_autoindex.exp b/modules/generators/mod_autoindex.exp
deleted file mode 100644
index 90f4057e9c..0000000000
--- a/modules/generators/mod_autoindex.exp
+++ /dev/null
@@ -1 +0,0 @@
-autoindex_module
diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c
deleted file mode 100644
index bfb0a551bf..0000000000
--- a/modules/generators/mod_cgi.c
+++ /dev/null
@@ -1,1218 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_script: keeps all script-related ramblings together.
- *
- * Compliant to CGI/1.1 spec
- *
- * Adapted by rst from original NCSA code by Rob McCool
- *
- * Apache adds some new env vars; REDIRECT_URL and REDIRECT_QUERY_STRING for
- * custom error responses, and DOCUMENT_ROOT because we found it useful.
- * It also adds SERVER_ADMIN - useful for scripts to know who to mail when
- * they fail.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h" /* for RLIMIT stuff */
-#include "apr_optional.h"
-#include "apr_buckets.h"
-#include "apr_lib.h"
-#include "apr_poll.h"
-
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-
-#include "util_filter.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "ap_mpm.h"
-#include "mod_core.h"
-#include "mod_cgi.h"
-
-module AP_MODULE_DECLARE_DATA cgi_module;
-
-static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *cgi_pfn_reg_with_ssi;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_get_tag_and_value) *cgi_pfn_gtv;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_parse_string) *cgi_pfn_ps;
-static APR_OPTIONAL_FN_TYPE(ap_cgi_build_command) *cgi_build_command;
-
-/* Read and discard the data in the brigade produced by a CGI script */
-static void discard_script_output(apr_bucket_brigade *bb);
-
-/* KLUDGE --- for back-combatibility, we don't have to check ExecCGI
- * in ScriptAliased directories, which means we need to know if this
- * request came through ScriptAlias or not... so the Alias module
- * leaves a note for us.
- */
-
-static int is_scriptaliased(request_rec *r)
-{
- const char *t = apr_table_get(r->notes, "alias-forced-type");
- return t && (!strcasecmp(t, "cgi-script"));
-}
-
-/* Configuration stuff */
-
-#define DEFAULT_LOGBYTES 10385760
-#define DEFAULT_BUFBYTES 1024
-
-typedef struct {
- const char *logname;
- long logbytes;
- apr_size_t bufbytes;
-} cgi_server_conf;
-
-static void *create_cgi_config(apr_pool_t *p, server_rec *s)
-{
- cgi_server_conf *c =
- (cgi_server_conf *) apr_pcalloc(p, sizeof(cgi_server_conf));
-
- c->logname = NULL;
- c->logbytes = DEFAULT_LOGBYTES;
- c->bufbytes = DEFAULT_BUFBYTES;
-
- return c;
-}
-
-static void *merge_cgi_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- cgi_server_conf *base = (cgi_server_conf *) basev,
- *overrides = (cgi_server_conf *) overridesv;
-
- return overrides->logname ? overrides : base;
-}
-
-static const char *set_scriptlog(cmd_parms *cmd, void *dummy, const char *arg)
-{
- server_rec *s = cmd->server;
- cgi_server_conf *conf = ap_get_module_config(s->module_config,
- &cgi_module);
-
- conf->logname = ap_server_root_relative(cmd->pool, arg);
-
- if (!conf->logname) {
- return apr_pstrcat(cmd->pool, "Invalid ScriptLog path ",
- arg, NULL);
- }
-
- return NULL;
-}
-
-static const char *set_scriptlog_length(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- server_rec *s = cmd->server;
- cgi_server_conf *conf = ap_get_module_config(s->module_config,
- &cgi_module);
-
- conf->logbytes = atol(arg);
- return NULL;
-}
-
-static const char *set_scriptlog_buffer(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- server_rec *s = cmd->server;
- cgi_server_conf *conf = ap_get_module_config(s->module_config,
- &cgi_module);
-
- conf->bufbytes = atoi(arg);
- return NULL;
-}
-
-static const command_rec cgi_cmds[] =
-{
-AP_INIT_TAKE1("ScriptLog", set_scriptlog, NULL, RSRC_CONF,
- "the name of a log for script debugging info"),
-AP_INIT_TAKE1("ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF,
- "the maximum length (in bytes) of the script debug log"),
-AP_INIT_TAKE1("ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF,
- "the maximum size (in bytes) to record of a POST request"),
- {NULL}
-};
-
-static int log_scripterror(request_rec *r, cgi_server_conf * conf, int ret,
- apr_status_t rv, char *error)
-{
- apr_file_t *f = NULL;
- apr_finfo_t finfo;
- char time_str[APR_CTIME_LEN];
- int log_flags = rv ? APLOG_ERR : APLOG_ERR;
-
- ap_log_rerror(APLOG_MARK, log_flags, rv, r,
- "%s: %s", error, r->filename);
-
- /* XXX Very expensive mainline case! Open, then getfileinfo! */
- if (!conf->logname ||
- ((apr_stat(&finfo, conf->logname,
- APR_FINFO_SIZE, r->pool) == APR_SUCCESS) &&
- (finfo.size > conf->logbytes)) ||
- (apr_file_open(&f, conf->logname,
- APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT,
- r->pool) != APR_SUCCESS)) {
- return ret;
- }
-
- /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */
- apr_ctime(time_str, apr_time_now());
- apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri,
- r->args ? "?" : "", r->args ? r->args : "", r->protocol);
- /* "%% 500 /usr/local/apache/cgi-bin */
- apr_file_printf(f, "%%%% %d %s\n", ret, r->filename);
-
- apr_file_printf(f, "%%error\n%s\n", error);
-
- apr_file_close(f);
- return ret;
-}
-
-/* Soak up stderr from a script and redirect it to the error log.
- */
-static apr_status_t log_script_err(request_rec *r, apr_file_t *script_err)
-{
- char argsbuffer[HUGE_STRING_LEN];
- char *newline;
- apr_status_t rv;
-
- while ((rv = apr_file_gets(argsbuffer, HUGE_STRING_LEN,
- script_err)) == APR_SUCCESS) {
- newline = strchr(argsbuffer, '\n');
- if (newline) {
- *newline = '\0';
- }
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s", argsbuffer);
- }
-
- return rv;
-}
-
-static int log_script(request_rec *r, cgi_server_conf * conf, int ret,
- char *dbuf, const char *sbuf, apr_bucket_brigade *bb,
- apr_file_t *script_err)
-{
- const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
- const apr_table_entry_t *hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
- char argsbuffer[HUGE_STRING_LEN];
- apr_file_t *f = NULL;
- apr_bucket *e;
- const char *buf;
- apr_size_t len;
- apr_status_t rv;
- int first;
- int i;
- apr_finfo_t finfo;
- char time_str[APR_CTIME_LEN];
-
- /* XXX Very expensive mainline case! Open, then getfileinfo! */
- if (!conf->logname ||
- ((apr_stat(&finfo, conf->logname,
- APR_FINFO_SIZE, r->pool) == APR_SUCCESS) &&
- (finfo.size > conf->logbytes)) ||
- (apr_file_open(&f, conf->logname,
- APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT,
- r->pool) != APR_SUCCESS)) {
- /* Soak up script output */
- discard_script_output(bb);
- log_script_err(r, script_err);
- return ret;
- }
-
- /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */
- apr_ctime(time_str, apr_time_now());
- apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri,
- r->args ? "?" : "", r->args ? r->args : "", r->protocol);
- /* "%% 500 /usr/local/apache/cgi-bin" */
- apr_file_printf(f, "%%%% %d %s\n", ret, r->filename);
-
- apr_file_puts("%request\n", f);
- for (i = 0; i < hdrs_arr->nelts; ++i) {
- if (!hdrs[i].key)
- continue;
- apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val);
- }
- if ((r->method_number == M_POST || r->method_number == M_PUT) &&
- *dbuf) {
- apr_file_printf(f, "\n%s\n", dbuf);
- }
-
- apr_file_puts("%response\n", f);
- hdrs_arr = apr_table_elts(r->err_headers_out);
- hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
-
- for (i = 0; i < hdrs_arr->nelts; ++i) {
- if (!hdrs[i].key)
- continue;
- apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val);
- }
-
- if (sbuf && *sbuf)
- apr_file_printf(f, "%s\n", sbuf);
-
- first = 1;
- for (e = APR_BRIGADE_FIRST(bb);
- e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- break;
- }
- rv = apr_bucket_read(e, &buf, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS || (len == 0)) {
- break;
- }
- if (first) {
- apr_file_puts("%stdout\n", f);
- first = 0;
- }
- apr_file_write(f, buf, &len);
- apr_file_puts("\n", f);
- }
-
- if (apr_file_gets(argsbuffer, HUGE_STRING_LEN, script_err) == APR_SUCCESS) {
- apr_file_puts("%stderr\n", f);
- apr_file_puts(argsbuffer, f);
- while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
- script_err) == APR_SUCCESS) {
- apr_file_puts(argsbuffer, f);
- }
- apr_file_puts("\n", f);
- }
-
- apr_brigade_destroy(bb);
- apr_file_close(script_err);
-
- apr_file_close(f);
- return ret;
-}
-
-
-/* This is the special environment used for running the "exec cmd="
- * variety of SSI directives.
- */
-static void add_ssi_vars(request_rec *r)
-{
- apr_table_t *e = r->subprocess_env;
-
- if (r->path_info && r->path_info[0] != '\0') {
- request_rec *pa_req;
-
- apr_table_setn(e, "PATH_INFO", ap_escape_shell_cmd(r->pool,
- r->path_info));
-
- pa_req = ap_sub_req_lookup_uri(ap_escape_uri(r->pool, r->path_info),
- r, NULL);
- if (pa_req->filename) {
- apr_table_setn(e, "PATH_TRANSLATED",
- apr_pstrcat(r->pool, pa_req->filename,
- pa_req->path_info, NULL));
- }
- ap_destroy_sub_req(pa_req);
- }
-
- if (r->args) {
- char *arg_copy = apr_pstrdup(r->pool, r->args);
-
- apr_table_setn(e, "QUERY_STRING", r->args);
- ap_unescape_url(arg_copy);
- apr_table_setn(e, "QUERY_STRING_UNESCAPED",
- ap_escape_shell_cmd(r->pool, arg_copy));
- }
-}
-
-static void cgi_child_errfn(apr_pool_t *pool, apr_status_t err,
- const char *description)
-{
- apr_file_t *stderr_log;
- char errbuf[200];
-
- apr_file_open_stderr(&stderr_log, pool);
- apr_file_printf(stderr_log,
- "(%d)%s: %s\n",
- err,
- apr_strerror(err, errbuf, sizeof(errbuf)),
- description);
-}
-
-static apr_status_t run_cgi_child(apr_file_t **script_out,
- apr_file_t **script_in,
- apr_file_t **script_err,
- const char *command,
- const char * const argv[],
- request_rec *r,
- apr_pool_t *p,
- cgi_exec_info_t *e_info)
-{
- const char * const *env;
- apr_procattr_t *procattr;
- apr_proc_t *procnew;
- apr_status_t rc = APR_SUCCESS;
-
-#if defined(RLIMIT_CPU) || defined(RLIMIT_NPROC) || \
- defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined (RLIMIT_AS)
-
- core_dir_config *conf = ap_get_module_config(r->per_dir_config,
- &core_module);
-#endif
-
-#ifdef DEBUG_CGI
-#ifdef OS2
- /* Under OS/2 need to use device con. */
- FILE *dbg = fopen("con", "w");
-#else
- FILE *dbg = fopen("/dev/tty", "w");
-#endif
- int i;
-#endif
-
- RAISE_SIGSTOP(CGI_CHILD);
-#ifdef DEBUG_CGI
- fprintf(dbg, "Attempting to exec %s as CGI child (argv0 = %s)\n",
- r->filename, argv[0]);
-#endif
-
- env = (const char * const *)ap_create_environment(p, r->subprocess_env);
-
-#ifdef DEBUG_CGI
- fprintf(dbg, "Environment: \n");
- for (i = 0; env[i]; ++i)
- fprintf(dbg, "'%s'\n", env[i]);
-#endif
-
- /* Transmute ourselves into the script.
- * NB only ISINDEX scripts get decoded arguments.
- */
- if (((rc = apr_procattr_create(&procattr, p)) != APR_SUCCESS) ||
- ((rc = apr_procattr_io_set(procattr,
- e_info->in_pipe,
- e_info->out_pipe,
- e_info->err_pipe)) != APR_SUCCESS) ||
- ((rc = apr_procattr_dir_set(procattr,
- ap_make_dirstr_parent(r->pool,
- r->filename))) != APR_SUCCESS) ||
-#ifdef RLIMIT_CPU
- ((rc = apr_procattr_limit_set(procattr, APR_LIMIT_CPU,
- conf->limit_cpu)) != APR_SUCCESS) ||
-#endif
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
- ((rc = apr_procattr_limit_set(procattr, APR_LIMIT_MEM,
- conf->limit_mem)) != APR_SUCCESS) ||
-#endif
-#ifdef RLIMIT_NPROC
- ((rc = apr_procattr_limit_set(procattr, APR_LIMIT_NPROC,
- conf->limit_nproc)) != APR_SUCCESS) ||
-#endif
- ((rc = apr_procattr_cmdtype_set(procattr,
- e_info->cmd_type)) != APR_SUCCESS) ||
-
- ((rc = apr_procattr_detach_set(procattr,
- e_info->detached)) != APR_SUCCESS) ||
- ((rc = apr_procattr_addrspace_set(procattr,
- e_info->addrspace)) != APR_SUCCESS) ||
- ((rc = apr_procattr_child_errfn_set(procattr, cgi_child_errfn)) != APR_SUCCESS)) {
- /* Something bad happened, tell the world. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,
- "couldn't set child process attributes: %s", r->filename);
- }
- else {
- procnew = apr_pcalloc(p, sizeof(*procnew));
- rc = ap_os_create_privileged_process(r, procnew, command, argv, env,
- procattr, p);
-
- if (rc != APR_SUCCESS) {
- /* Bad things happened. Everyone should have cleaned up. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_TOCLIENT, rc, r,
- "couldn't create child process: %d: %s", rc,
- apr_filepath_name_get(r->filename));
- }
- else {
- apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-
- *script_in = procnew->out;
- if (!*script_in)
- return APR_EBADF;
- apr_file_pipe_timeout_set(*script_in, r->server->timeout);
-
- if (e_info->prog_type == RUN_AS_CGI) {
- *script_out = procnew->in;
- if (!*script_out)
- return APR_EBADF;
- apr_file_pipe_timeout_set(*script_out, r->server->timeout);
-
- *script_err = procnew->err;
- if (!*script_err)
- return APR_EBADF;
- apr_file_pipe_timeout_set(*script_err, r->server->timeout);
- }
- }
- }
-#ifdef DEBUG_CGI
- fclose(dbg);
-#endif
- return (rc);
-}
-
-
-static apr_status_t default_build_command(const char **cmd, const char ***argv,
- request_rec *r, apr_pool_t *p,
- cgi_exec_info_t *e_info)
-{
- int numwords, x, idx;
- char *w;
- const char *args = NULL;
-
- if (e_info->process_cgi) {
- *cmd = r->filename;
- /* Do not process r->args if they contain an '=' assignment
- */
- if (r->args && r->args[0] && !ap_strchr_c(r->args, '=')) {
- args = r->args;
- }
- }
-
- if (!args) {
- numwords = 1;
- }
- else {
- /* count the number of keywords */
- for (x = 0, numwords = 2; args[x]; x++) {
- if (args[x] == '+') {
- ++numwords;
- }
- }
- }
- /* Everything is - 1 to account for the first parameter
- * which is the program name.
- */
- if (numwords > APACHE_ARG_MAX - 1) {
- numwords = APACHE_ARG_MAX - 1; /* Truncate args to prevent overrun */
- }
- *argv = apr_palloc(p, (numwords + 2) * sizeof(char *));
- (*argv)[0] = *cmd;
- for (x = 1, idx = 1; x < numwords; x++) {
- w = ap_getword_nulls(p, &args, '+');
- ap_unescape_url(w);
- (*argv)[idx++] = ap_escape_shell_cmd(p, w);
- }
- (*argv)[idx] = NULL;
-
- return APR_SUCCESS;
-}
-
-static void discard_script_output(apr_bucket_brigade *bb)
-{
- apr_bucket *e;
- const char *buf;
- apr_size_t len;
- apr_status_t rv;
-
- for (e = APR_BRIGADE_FIRST(bb);
- e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- break;
- }
- rv = apr_bucket_read(e, &buf, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- break;
- }
- }
-}
-
-#if APR_FILES_AS_SOCKETS
-
-/* A CGI bucket type is needed to catch any output to stderr from the
- * script; see PR 22030. */
-static const apr_bucket_type_t bucket_type_cgi;
-
-struct cgi_bucket_data {
- apr_pollset_t *pollset;
- request_rec *r;
-};
-
-/* Create a CGI bucket using pipes from script stdout 'out'
- * and stderr 'err', for request 'r'. */
-static apr_bucket *cgi_bucket_create(request_rec *r,
- apr_file_t *out, apr_file_t *err,
- apr_bucket_alloc_t *list)
-{
- apr_bucket *b = apr_bucket_alloc(sizeof(*b), list);
- apr_status_t rv;
- apr_pollfd_t fd;
- struct cgi_bucket_data *data = apr_palloc(r->pool, sizeof *data);
-
- APR_BUCKET_INIT(b);
- b->free = apr_bucket_free;
- b->list = list;
- b->type = &bucket_type_cgi;
- b->length = (apr_size_t)(-1);
- b->start = -1;
-
- /* Create the pollset */
- rv = apr_pollset_create(&data->pollset, 2, r->pool, 0);
- AP_DEBUG_ASSERT(rv == APR_SUCCESS);
-
- fd.desc_type = APR_POLL_FILE;
- fd.reqevents = APR_POLLIN;
- fd.p = r->pool;
- fd.desc.f = out; /* script's stdout */
- fd.client_data = (void *)1;
- rv = apr_pollset_add(data->pollset, &fd);
- AP_DEBUG_ASSERT(rv == APR_SUCCESS);
-
- fd.desc.f = err; /* script's stderr */
- fd.client_data = (void *)2;
- rv = apr_pollset_add(data->pollset, &fd);
- AP_DEBUG_ASSERT(rv == APR_SUCCESS);
-
- data->r = r;
- b->data = data;
- return b;
-}
-
-/* Create a duplicate CGI bucket using given bucket data */
-static apr_bucket *cgi_bucket_dup(struct cgi_bucket_data *data,
- apr_bucket_alloc_t *list)
-{
- apr_bucket *b = apr_bucket_alloc(sizeof(*b), list);
- APR_BUCKET_INIT(b);
- b->free = apr_bucket_free;
- b->list = list;
- b->type = &bucket_type_cgi;
- b->length = (apr_size_t)(-1);
- b->start = -1;
- b->data = data;
- return b;
-}
-
-/* Handle stdout from CGI child. Duplicate of logic from the _read
- * method of the real APR pipe bucket implementation. */
-static apr_status_t cgi_read_stdout(apr_bucket *a, apr_file_t *out,
- const char **str, apr_size_t *len)
-{
- char *buf;
- apr_status_t rv;
-
- *str = NULL;
- *len = APR_BUCKET_BUFF_SIZE;
- buf = apr_bucket_alloc(*len, a->list); /* XXX: check for failure? */
-
- rv = apr_file_read(out, buf, len);
-
- if (rv != APR_SUCCESS && rv != APR_EOF) {
- apr_bucket_free(buf);
- return rv;
- }
-
- if (*len > 0) {
- struct cgi_bucket_data *data = a->data;
- apr_bucket_heap *h;
-
- /* Change the current bucket to refer to what we read */
- a = apr_bucket_heap_make(a, buf, *len, apr_bucket_free);
- h = a->data;
- h->alloc_len = APR_BUCKET_BUFF_SIZE; /* note the real buffer size */
- *str = buf;
- APR_BUCKET_INSERT_AFTER(a, cgi_bucket_dup(data, a->list));
- }
- else {
- apr_bucket_free(buf);
- a = apr_bucket_immortal_make(a, "", 0);
- *str = a->data;
- }
- return rv;
-}
-
-/* Read method of CGI bucket: polls on stderr and stdout of the child,
- * sending any stderr output immediately away to the error log. */
-static apr_status_t cgi_bucket_read(apr_bucket *b, const char **str,
- apr_size_t *len, apr_read_type_e block)
-{
- struct cgi_bucket_data *data = b->data;
- apr_interval_time_t timeout;
- apr_status_t rv;
- int gotdata = 0;
-
- timeout = block == APR_NONBLOCK_READ ? 0 : data->r->server->timeout;
-
- do {
- const apr_pollfd_t *results;
- apr_int32_t num;
-
- rv = apr_pollset_poll(data->pollset, timeout, &num, &results);
- if (APR_STATUS_IS_TIMEUP(rv)) {
- return timeout == 0 ? APR_EAGAIN : rv;
- }
- else if (APR_STATUS_IS_EINTR(rv)) {
- continue;
- }
- else if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, data->r,
- "poll failed waiting for CGI child");
- return rv;
- }
-
- for (; num; num--, results++) {
- if (results[0].client_data == (void *)1) {
- /* stdout */
- rv = cgi_read_stdout(b, results[0].desc.f, str, len);
- if (APR_STATUS_IS_EOF(rv)) {
- rv = APR_SUCCESS;
- }
- gotdata = 1;
- } else {
- /* stderr */
- apr_status_t rv2 = log_script_err(data->r, results[0].desc.f);
- if (APR_STATUS_IS_EOF(rv2)) {
- apr_pollset_remove(data->pollset, &results[0]);
- }
- }
- }
-
- } while (!gotdata);
-
- return rv;
-}
-
-static const apr_bucket_type_t bucket_type_cgi = {
- "CGI", 5, APR_BUCKET_DATA,
- apr_bucket_destroy_noop,
- cgi_bucket_read,
- apr_bucket_setaside_notimpl,
- apr_bucket_split_notimpl,
- apr_bucket_copy_notimpl
-};
-
-#endif
-
-static int cgi_handler(request_rec *r)
-{
- int nph;
- apr_size_t dbpos = 0;
- const char *argv0;
- const char *command;
- const char **argv;
- char *dbuf = NULL;
- apr_file_t *script_out = NULL, *script_in = NULL, *script_err = NULL;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- int is_included;
- int seen_eos, child_stopped_reading;
- apr_pool_t *p;
- cgi_server_conf *conf;
- apr_status_t rv;
- cgi_exec_info_t e_info;
- conn_rec *c = r->connection;
-
- if(strcmp(r->handler, CGI_MAGIC_TYPE) && strcmp(r->handler, "cgi-script"))
- return DECLINED;
-
- is_included = !strcmp(r->protocol, "INCLUDED");
-
- p = r->main ? r->main->pool : r->pool;
-
- if (r->method_number == M_OPTIONS) {
- /* 99 out of 100 CGI scripts, this is all they support */
- r->allowed |= (AP_METHOD_BIT << M_GET);
- r->allowed |= (AP_METHOD_BIT << M_POST);
- return DECLINED;
- }
-
- argv0 = apr_filepath_name_get(r->filename);
- nph = !(strncmp(argv0, "nph-", 4));
- conf = ap_get_module_config(r->server->module_config, &cgi_module);
-
- if (!(ap_allow_options(r) & OPT_EXECCGI) && !is_scriptaliased(r))
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "Options ExecCGI is off in this directory");
- if (nph && is_included)
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "attempt to include NPH CGI script");
-
- if (r->finfo.filetype == 0)
- return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
- "script not found or unable to stat");
- if (r->finfo.filetype == APR_DIR)
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "attempt to invoke directory as script");
-
- if ((r->used_path_info == AP_REQ_REJECT_PATH_INFO) &&
- r->path_info && *r->path_info)
- {
- /* default to accept */
- return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
- "AcceptPathInfo off disallows user's path");
- }
-/*
- if (!ap_suexec_enabled) {
- if (!ap_can_exec(&r->finfo))
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "file permissions deny server execution");
- }
-
-*/
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
-
- e_info.process_cgi = 1;
- e_info.cmd_type = APR_PROGRAM;
- e_info.detached = 0;
- e_info.in_pipe = APR_CHILD_BLOCK;
- e_info.out_pipe = APR_CHILD_BLOCK;
- e_info.err_pipe = APR_CHILD_BLOCK;
- e_info.prog_type = RUN_AS_CGI;
- e_info.bb = NULL;
- e_info.ctx = NULL;
- e_info.next = NULL;
- e_info.addrspace = 0;
-
- /* build the command line */
- if ((rv = cgi_build_command(&command, &argv, r, p, &e_info)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "don't know how to spawn child process: %s",
- r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* run the script in its own process */
- if ((rv = run_cgi_child(&script_out, &script_in, &script_err,
- command, argv, r, p, &e_info)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "couldn't spawn child process: %s", r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* Transfer any put/post args, CERN style...
- * Note that we already ignore SIGPIPE in the core server.
- */
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- seen_eos = 0;
- child_stopped_reading = 0;
- if (conf->logname) {
- dbuf = apr_palloc(r->pool, conf->bufbytes + 1);
- dbpos = 0;
- }
- do {
- apr_bucket *bucket;
-
- rv = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
- APR_BLOCK_READ, HUGE_STRING_LEN);
-
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- for (bucket = APR_BRIGADE_FIRST(bb);
- bucket != APR_BRIGADE_SENTINEL(bb);
- bucket = APR_BUCKET_NEXT(bucket))
- {
- const char *data;
- apr_size_t len;
-
- if (APR_BUCKET_IS_EOS(bucket)) {
- seen_eos = 1;
- break;
- }
-
- /* We can't do much with this. */
- if (APR_BUCKET_IS_FLUSH(bucket)) {
- continue;
- }
-
- /* If the child stopped, we still must read to EOS. */
- if (child_stopped_reading) {
- continue;
- }
-
- /* read */
- apr_bucket_read(bucket, &data, &len, APR_BLOCK_READ);
-
- if (conf->logname && dbpos < conf->bufbytes) {
- int cursize;
-
- if ((dbpos + len) > conf->bufbytes) {
- cursize = conf->bufbytes - dbpos;
- }
- else {
- cursize = len;
- }
- memcpy(dbuf + dbpos, data, cursize);
- dbpos += cursize;
- }
-
- /* Keep writing data to the child until done or too much time
- * elapses with no progress or an error occurs.
- */
- rv = apr_file_write_full(script_out, data, len, NULL);
-
- if (rv != APR_SUCCESS) {
- /* silly script stopped reading, soak up remaining message */
- child_stopped_reading = 1;
- }
- }
- apr_brigade_cleanup(bb);
- }
- while (!seen_eos);
-
- if (conf->logname) {
- dbuf[dbpos] = '\0';
- }
- /* Is this flush really needed? */
- apr_file_flush(script_out);
- apr_file_close(script_out);
-
- AP_DEBUG_ASSERT(script_in != NULL);
-
- apr_brigade_cleanup(bb);
-
-#if APR_FILES_AS_SOCKETS
- apr_file_pipe_timeout_set(script_in, 0);
- apr_file_pipe_timeout_set(script_err, 0);
-
- b = cgi_bucket_create(r, script_in, script_err, c->bucket_alloc);
-#else
- b = apr_bucket_pipe_create(script_in, c->bucket_alloc);
-#endif
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- /* Handle script return... */
- if (!nph) {
- const char *location;
- char sbuf[MAX_STRING_LEN];
- int ret;
-
- if ((ret = ap_scan_script_header_err_brigade(r, bb, sbuf))) {
- return log_script(r, conf, ret, dbuf, sbuf, bb, script_err);
- }
-
- location = apr_table_get(r->headers_out, "Location");
-
- if (location && location[0] == '/' && r->status == 200) {
- discard_script_output(bb);
- apr_brigade_destroy(bb);
- apr_file_pipe_timeout_set(script_err, r->server->timeout);
- log_script_err(r, script_err);
- /* This redirect needs to be a GET no matter what the original
- * method was.
- */
- r->method = apr_pstrdup(r->pool, "GET");
- r->method_number = M_GET;
-
- /* We already read the message body (if any), so don't allow
- * the redirected request to think it has one. We can ignore
- * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR.
- */
- apr_table_unset(r->headers_in, "Content-Length");
-
- ap_internal_redirect_handler(location, r);
- return OK;
- }
- else if (location && r->status == 200) {
- /* XX Note that if a script wants to produce its own Redirect
- * body, it now has to explicitly *say* "Status: 302"
- */
- discard_script_output(bb);
- apr_brigade_destroy(bb);
- return HTTP_MOVED_TEMPORARILY;
- }
-
- rv = ap_pass_brigade(r->output_filters, bb);
- }
- else /* nph */ {
- struct ap_filter_t *cur;
-
- /* get rid of all filters up through protocol... since we
- * haven't parsed off the headers, there is no way they can
- * work
- */
-
- cur = r->proto_output_filters;
- while (cur && cur->frec->ftype < AP_FTYPE_CONNECTION) {
- cur = cur->next;
- }
- r->output_filters = r->proto_output_filters = cur;
-
- rv = ap_pass_brigade(r->output_filters, bb);
- }
-
- /* don't soak up script output if errors occurred writing it
- * out... otherwise, we prolong the life of the script when the
- * connection drops or we stopped sending output for some other
- * reason */
- if (rv == APR_SUCCESS && !r->connection->aborted) {
- apr_file_pipe_timeout_set(script_err, r->server->timeout);
- log_script_err(r, script_err);
- }
-
- apr_file_close(script_err);
-
- return OK; /* NOT r->status, even if it has changed. */
-}
-
-/*============================================================================
- *============================================================================
- * This is the beginning of the cgi filter code moved from mod_include. This
- * is the code required to handle the "exec" SSI directive.
- *============================================================================
- *============================================================================*/
-static apr_status_t include_cgi(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb, char *s)
-{
- request_rec *r = f->r;
- request_rec *rr = ap_sub_req_lookup_uri(s, r, f->next);
- int rr_status;
-
- if (rr->status != HTTP_OK) {
- ap_destroy_sub_req(rr);
- return APR_EGENERAL;
- }
-
- /* No hardwired path info or query allowed */
- if ((rr->path_info && rr->path_info[0]) || rr->args) {
- ap_destroy_sub_req(rr);
- return APR_EGENERAL;
- }
- if (rr->finfo.filetype != APR_REG) {
- ap_destroy_sub_req(rr);
- return APR_EGENERAL;
- }
-
- /* Script gets parameters of the *document*, for back compatibility */
- rr->path_info = r->path_info; /* hard to get right; see mod_cgi.c */
- rr->args = r->args;
-
- /* Force sub_req to be treated as a CGI request, even if ordinary
- * typing rules would have called it something else.
- */
- ap_set_content_type(rr, CGI_MAGIC_TYPE);
-
- /* Run it. */
- rr_status = ap_run_sub_req(rr);
- if (ap_is_HTTP_REDIRECT(rr_status)) {
- const char *location = apr_table_get(rr->headers_out, "Location");
-
- if (location) {
- char *buffer;
-
- location = ap_escape_html(rr->pool, location);
- buffer = apr_pstrcat(ctx->pool, "<a href=\"", location, "\">",
- location, "</a>", NULL);
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(buffer,
- strlen(buffer), ctx->pool,
- f->c->bucket_alloc));
- }
- }
-
- ap_destroy_sub_req(rr);
-
- return APR_SUCCESS;
-}
-
-static apr_status_t include_cmd(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb, const char *command)
-{
- cgi_exec_info_t e_info;
- const char **argv;
- apr_file_t *script_out = NULL, *script_in = NULL, *script_err = NULL;
- apr_status_t rv;
- request_rec *r = f->r;
-
- add_ssi_vars(r);
-
- e_info.process_cgi = 0;
- e_info.cmd_type = APR_SHELLCMD;
- e_info.detached = 0;
- e_info.in_pipe = APR_NO_PIPE;
- e_info.out_pipe = APR_FULL_BLOCK;
- e_info.err_pipe = APR_NO_PIPE;
- e_info.prog_type = RUN_AS_SSI;
- e_info.bb = &bb;
- e_info.ctx = ctx;
- e_info.next = f->next;
- e_info.addrspace = 0;
-
- if ((rv = cgi_build_command(&command, &argv, r, r->pool,
- &e_info)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "don't know how to spawn cmd child process: %s",
- r->filename);
- return rv;
- }
-
- /* run the script in its own process */
- if ((rv = run_cgi_child(&script_out, &script_in, &script_err,
- command, argv, r, r->pool,
- &e_info)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "couldn't spawn child process: %s", r->filename);
- return rv;
- }
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pipe_create(script_in,
- f->c->bucket_alloc));
- ctx->flush_now = 1;
-
- /* We can't close the pipe here, because we may return before the
- * full CGI has been sent to the network. That's okay though,
- * because we can rely on the pool to close the pipe for us.
- */
- return APR_SUCCESS;
-}
-
-static apr_status_t handle_exec(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- char *tag = NULL;
- char *tag_val = NULL;
- request_rec *r = f->r;
- char *file = r->filename;
- char parsed_string[MAX_STRING_LEN];
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for exec element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- if (ctx->flags & SSI_FLAG_NO_EXEC) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "exec used but not allowed "
- "in %s", r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- while (1) {
- cgi_pfn_gtv(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
- if (!tag || !tag_val) {
- break;
- }
-
- if (!strcmp(tag, "cmd")) {
- apr_status_t rv;
-
- cgi_pfn_ps(ctx, tag_val, parsed_string, sizeof(parsed_string),
- SSI_EXPAND_LEAVE_NAME);
-
- rv = include_cmd(ctx, f, bb, parsed_string);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "execution failure "
- "for parameter \"%s\" to tag exec in file %s",
- tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
- else if (!strcmp(tag, "cgi")) {
- apr_status_t rv;
-
- cgi_pfn_ps(ctx, tag_val, parsed_string, sizeof(parsed_string),
- SSI_EXPAND_DROP_NAME);
-
- rv = include_cgi(ctx, f, bb, parsed_string);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "invalid CGI ref "
- "\"%s\" in %s", tag_val, file);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter "
- "\"%s\" to tag exec in %s", tag, file);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-
-
-/*============================================================================
- *============================================================================
- * This is the end of the cgi filter code moved from mod_include.
- *============================================================================
- *============================================================================*/
-
-
-static int cgi_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- cgi_pfn_reg_with_ssi = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
- cgi_pfn_gtv = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_get_tag_and_value);
- cgi_pfn_ps = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_parse_string);
-
- if ((cgi_pfn_reg_with_ssi) && (cgi_pfn_gtv) && (cgi_pfn_ps)) {
- /* Required by mod_include filter. This is how mod_cgi registers
- * with mod_include to provide processing of the exec directive.
- */
- cgi_pfn_reg_with_ssi("exec", handle_exec);
- }
-
- /* This is the means by which unusual (non-unix) os's may find alternate
- * means to run a given command (e.g. shebang/registry parsing on Win32)
- */
- cgi_build_command = APR_RETRIEVE_OPTIONAL_FN(ap_cgi_build_command);
- if (!cgi_build_command) {
- cgi_build_command = default_build_command;
- }
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszPre[] = { "mod_include.c", NULL };
- ap_hook_handler(cgi_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(cgi_post_config, aszPre, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA cgi_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_cgi_config, /* server config */
- merge_cgi_config, /* merge server config */
- cgi_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/generators/mod_cgi.dsp b/modules/generators/mod_cgi.dsp
deleted file mode 100644
index 09de44d7c2..0000000000
--- a/modules/generators/mod_cgi.dsp
+++ /dev/null
@@ -1,132 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_cgi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_cgi - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_cgi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_cgi.mak" CFG="mod_cgi - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_cgi - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_cgi - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_cgi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_cgi_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_cgi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_cgi_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_cgi - Win32 Release"
-# Name "mod_cgi - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_cgi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cgi.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cgi.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_cgi - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cgi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_cgi.so "cgi_module for Apache" ../../include/ap_release.h > .\mod_cgi.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_cgi - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cgi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_cgi.so "cgi_module for Apache" ../../include/ap_release.h > .\mod_cgi.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_cgi.exp b/modules/generators/mod_cgi.exp
deleted file mode 100644
index 96ea0c2348..0000000000
--- a/modules/generators/mod_cgi.exp
+++ /dev/null
@@ -1 +0,0 @@
-cgi_module
diff --git a/modules/generators/mod_cgi.h b/modules/generators/mod_cgi.h
deleted file mode 100644
index 96fbe09f0c..0000000000
--- a/modules/generators/mod_cgi.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _MOD_CGI_H
-#define _MOD_CGI_H 1
-
-#include "mod_include.h"
-
-typedef enum {RUN_AS_SSI, RUN_AS_CGI} prog_types;
-
-typedef struct {
- apr_int32_t in_pipe;
- apr_int32_t out_pipe;
- apr_int32_t err_pipe;
- int process_cgi;
- apr_cmdtype_e cmd_type;
- apr_int32_t detached;
- prog_types prog_type;
- apr_bucket_brigade **bb;
- include_ctx_t *ctx;
- ap_filter_t *next;
- apr_int32_t addrspace;
-} cgi_exec_info_t;
-
-/**
- * Registerable optional function to override CGI behavior;
- * Reprocess the command and arguments to execute the given CGI script.
- * @param cmd Pointer to the command to execute (may be overridden)
- * @param argv Pointer to the arguments to pass (may be overridden)
- * @param r The current request
- * @param p The pool to allocate correct cmd/argv elements within.
- * @param process_cgi Set true if processing r->filename and r->args
- * as a CGI invocation, otherwise false
- * @param type Set to APR_SHELLCMD or APR_PROGRAM on entry, may be
- * changed to invoke the program with alternate semantics.
- * @param detach Should the child start in detached state? Default is no.
- * @remark This callback may be registered by the os-specific module
- * to correct the command and arguments for apr_proc_create invocation
- * on a given os. mod_cgi will call the function if registered.
- */
-APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_cgi_build_command,
- (const char **cmd, const char ***argv,
- request_rec *r, apr_pool_t *p,
- cgi_exec_info_t *e_info));
-
-#endif /* _MOD_CGI_H */
diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c
deleted file mode 100644
index 218d8dd142..0000000000
--- a/modules/generators/mod_cgid.c
+++ /dev/null
@@ -1,1767 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_script: keeps all script-related ramblings together.
- *
- * Compliant to cgi/1.1 spec
- *
- * Adapted by rst from original NCSA code by Rob McCool
- *
- * Apache adds some new env vars; REDIRECT_URL and REDIRECT_QUERY_STRING for
- * custom error responses, and DOCUMENT_ROOT because we found it useful.
- * It also adds SERVER_ADMIN - useful for scripts to know who to mail when
- * they fail.
- */
-
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_general.h"
-#include "apr_file_io.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "apr_optional.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mod_suexec.h"
-#include "../filters/mod_include.h"
-
-#include "mod_core.h"
-
-
-/* ### should be tossed in favor of APR */
-#include <sys/stat.h>
-#include <sys/un.h> /* for sockaddr_un */
-
-
-module AP_MODULE_DECLARE_DATA cgid_module;
-
-static int cgid_start(apr_pool_t *p, server_rec *main_server, apr_proc_t *procnew);
-static int cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server);
-static int handle_exec(include_ctx_t *ctx, ap_filter_t *f, apr_bucket_brigade *bb);
-
-static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *cgid_pfn_reg_with_ssi;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_get_tag_and_value) *cgid_pfn_gtv;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_parse_string) *cgid_pfn_ps;
-
-static apr_pool_t *pcgi = NULL;
-static int total_modules = 0;
-static pid_t daemon_pid;
-static int daemon_should_exit = 0;
-static server_rec *root_server = NULL;
-static apr_pool_t *root_pool = NULL;
-static const char *sockname;
-
-/* Read and discard the data in the brigade produced by a CGI script */
-static void discard_script_output(apr_bucket_brigade *bb);
-
-/* KLUDGE --- for back-combatibility, we don't have to check ExecCGI
- * in ScriptAliased directories, which means we need to know if this
- * request came through ScriptAlias or not... so the Alias module
- * leaves a note for us.
- */
-
-static int is_scriptaliased(request_rec *r)
-{
- const char *t = apr_table_get(r->notes, "alias-forced-type");
- return t && (!strcasecmp(t, "cgi-script"));
-}
-
-/* Configuration stuff */
-
-#define DEFAULT_LOGBYTES 10385760
-#define DEFAULT_BUFBYTES 1024
-#define DEFAULT_SOCKET DEFAULT_REL_RUNTIMEDIR "/cgisock"
-
-#define CGI_REQ 1
-#define SSI_REQ 2
-#define GETPID_REQ 3 /* get the pid of script created for prior request */
-
-#define ERRFN_USERDATA_KEY "CGIDCHILDERRFN"
-
-/* DEFAULT_CGID_LISTENBACKLOG controls the max depth on the unix socket's
- * pending connection queue. If a bunch of cgi requests arrive at about
- * the same time, connections from httpd threads/processes will back up
- * in the queue while the cgid process slowly forks off a child to process
- * each connection on the unix socket. If the queue is too short, the
- * httpd process will get ECONNREFUSED when trying to connect.
- */
-#ifndef DEFAULT_CGID_LISTENBACKLOG
-#define DEFAULT_CGID_LISTENBACKLOG 100
-#endif
-
-/* DEFAULT_CONNECT_ATTEMPTS controls how many times we'll try to connect
- * to the cgi daemon from the thread/process handling the cgi request.
- * Generally we want to retry when we get ECONNREFUSED since it is
- * probably because the listen queue is full. We need to try harder so
- * the client doesn't see it as a 503 error.
- *
- * Set this to 0 to continually retry until the connect works or Apache
- * terminates.
- */
-#ifndef DEFAULT_CONNECT_ATTEMPTS
-#define DEFAULT_CONNECT_ATTEMPTS 15
-#endif
-
-typedef struct {
- const char *logname;
- long logbytes;
- int bufbytes;
-} cgid_server_conf;
-
-typedef struct {
- int req_type; /* request type (CGI_REQ, SSI_REQ, etc.) */
- unsigned long conn_id; /* connection id; daemon uses this as a hash value
- * to find the script pid when it is time for that
- * process to be cleaned up
- */
- int core_module_index;
- int have_suexec;
- int suexec_module_index;
- suexec_config_t suexec_cfg;
- int env_count;
- apr_size_t filename_len;
- apr_size_t argv0_len;
- apr_size_t uri_len;
- apr_size_t args_len;
- apr_size_t mod_userdir_user_len;
- int loglevel; /* to stuff in server_rec */
-} cgid_req_t;
-
-/* This routine is called to create the argument list to be passed
- * to the CGI script. When suexec is enabled, the suexec path, user, and
- * group are the first three arguments to be passed; if not, all three
- * must be NULL. The query info is split into separate arguments, where
- * "+" is the separator between keyword arguments.
- *
- * Do not process the args if they containing an '=' assignment.
- */
-static char **create_argv(apr_pool_t *p, char *path, char *user, char *group,
- char *av0, const char *args)
-{
- int x, numwords;
- char **av;
- char *w;
- int idx = 0;
-
- if (ap_strchr_c(args, '=')) {
- numwords = 0;
- }
- else {
- /* count the number of keywords */
-
- for (x = 0, numwords = 1; args[x]; x++) {
- if (args[x] == '+') {
- ++numwords;
- }
- }
- }
-
- if (numwords > APACHE_ARG_MAX - 5) {
- numwords = APACHE_ARG_MAX - 5; /* Truncate args to prevent overrun */
- }
- av = (char **) apr_pcalloc(p, (numwords + 5) * sizeof(char *));
-
- if (path) {
- av[idx++] = path;
- }
- if (user) {
- av[idx++] = user;
- }
- if (group) {
- av[idx++] = group;
- }
-
- av[idx++] = apr_pstrdup(p, av0);
-
- for (x = 1; x <= numwords; x++) {
- w = ap_getword_nulls(p, &args, '+');
- if (strcmp(w, "")) {
- ap_unescape_url(w);
- av[idx++] = ap_escape_shell_cmd(p, w);
- }
- }
- av[idx] = NULL;
- return av;
-}
-
-#if APR_HAS_OTHER_CHILD
-static void cgid_maint(int reason, void *data, apr_wait_t status)
-{
- apr_proc_t *proc = data;
- int mpm_state;
- int stopping;
-
- switch (reason) {
- case APR_OC_REASON_DEATH:
- apr_proc_other_child_unregister(data);
- /* If apache is not terminating or restarting,
- * restart the cgid daemon
- */
- stopping = 1; /* if MPM doesn't support query,
- * assume we shouldn't restart daemon
- */
- if (ap_mpm_query(AP_MPMQ_MPM_STATE, &mpm_state) == APR_SUCCESS &&
- mpm_state != AP_MPMQ_STOPPING) {
- stopping = 0;
- }
- if (!stopping) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "cgid daemon process died, restarting");
- cgid_start(root_pool, root_server, proc);
- }
- break;
- case APR_OC_REASON_RESTART:
- /* don't do anything; server is stopping or restarting */
- apr_proc_other_child_unregister(data);
- break;
- case APR_OC_REASON_LOST:
- /* Restart the child cgid daemon process */
- apr_proc_other_child_unregister(data);
- cgid_start(root_pool, root_server, proc);
- break;
- case APR_OC_REASON_UNREGISTER:
- /* we get here when pcgi is cleaned up; pcgi gets cleaned
- * up when pconf gets cleaned up
- */
- kill(proc->pid, SIGHUP); /* send signal to daemon telling it to die */
- break;
- }
-}
-#endif
-
-/* deal with incomplete reads and signals
- * assume you really have to read buf_size bytes
- */
-static apr_status_t sock_read(int fd, void *vbuf, size_t buf_size)
-{
- char *buf = vbuf;
- int rc;
- size_t bytes_read = 0;
-
- do {
- do {
- rc = read(fd, buf + bytes_read, buf_size - bytes_read);
- } while (rc < 0 && errno == EINTR);
- switch(rc) {
- case -1:
- return errno;
- case 0: /* unexpected */
- return ECONNRESET;
- default:
- bytes_read += rc;
- }
- } while (bytes_read < buf_size);
-
- return APR_SUCCESS;
-}
-
-/* deal with signals
- */
-static apr_status_t sock_write(int fd, const void *buf, size_t buf_size)
-{
- int rc;
-
- do {
- rc = write(fd, buf, buf_size);
- } while (rc < 0 && errno == EINTR);
- if (rc < 0) {
- return errno;
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t get_req(int fd, request_rec *r, char **argv0, char ***env,
- cgid_req_t *req)
-{
- int i;
- char *user;
- char **environ;
- core_dir_config *temp_core;
- void **dconf;
- apr_status_t stat;
-
- r->server = apr_pcalloc(r->pool, sizeof(server_rec));
-
- /* read the request header */
- stat = sock_read(fd, req, sizeof(*req));
- if (stat != APR_SUCCESS) {
- return stat;
- }
- r->server->loglevel = req->loglevel;
- if (req->req_type == GETPID_REQ) {
- /* no more data sent for this request */
- return APR_SUCCESS;
- }
-
- /* handle module indexes and such */
- dconf = (void **) apr_pcalloc(r->pool, sizeof(void *) * (total_modules + DYNAMIC_MODULE_LIMIT));
-
- temp_core = (core_dir_config *)apr_palloc(r->pool, sizeof(core_module));
- dconf[req->core_module_index] = (void *)temp_core;
-
- if (req->have_suexec) {
- dconf[req->suexec_module_index] = &req->suexec_cfg;
- }
-
- r->per_dir_config = (ap_conf_vector_t *)dconf;
-
- /* Read the filename, argv0, uri, and args */
- r->filename = apr_pcalloc(r->pool, req->filename_len + 1);
- *argv0 = apr_pcalloc(r->pool, req->argv0_len + 1);
- r->uri = apr_pcalloc(r->pool, req->uri_len + 1);
- if ((stat = sock_read(fd, r->filename, req->filename_len)) != APR_SUCCESS ||
- (stat = sock_read(fd, *argv0, req->argv0_len)) != APR_SUCCESS ||
- (stat = sock_read(fd, r->uri, req->uri_len)) != APR_SUCCESS) {
- return stat;
- }
-
- r->args = apr_pcalloc(r->pool, req->args_len + 1); /* empty string if no args */
- if (req->args_len) {
- if ((stat = sock_read(fd, r->args, req->args_len)) != APR_SUCCESS) {
- return stat;
- }
- }
-
- /* read the environment variables */
- environ = apr_pcalloc(r->pool, (req->env_count + 2) *sizeof(char *));
- for (i = 0; i < req->env_count; i++) {
- apr_size_t curlen;
-
- if ((stat = sock_read(fd, &curlen, sizeof(curlen))) != APR_SUCCESS) {
- return stat;
- }
- environ[i] = apr_pcalloc(r->pool, curlen + 1);
- if ((stat = sock_read(fd, environ[i], curlen)) != APR_SUCCESS) {
- return stat;
- }
- }
- *env = environ;
-
- /* basic notes table to avoid segfaults */
- r->notes = apr_table_make(r->pool, 1);
-
- /* mod_userdir requires the mod_userdir_user note */
- if (req->mod_userdir_user_len) {
- user = apr_pcalloc(r->pool, req->mod_userdir_user_len + 1); /* last byte is '\0' */
- stat = sock_read(fd, user, req->mod_userdir_user_len);
- if (stat != APR_SUCCESS) {
- return stat;
- }
- apr_table_set(r->notes, "mod_userdir_user", (const char *)user);
- }
-
-#if 0
-#ifdef RLIMIT_CPU
- sock_read(fd, &j, sizeof(int));
- if (j) {
- temp_core->limit_cpu = (struct rlimit *)apr_palloc (sizeof(struct rlimit));
- sock_read(fd, temp_core->limit_cpu, sizeof(struct rlimit));
- }
- else {
- temp_core->limit_cpu = NULL;
- }
-#endif
-
-#if defined (RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
- sock_read(fd, &j, sizeof(int));
- if (j) {
- temp_core->limit_mem = (struct rlimit *)apr_palloc(r->pool, sizeof(struct rlimit));
- sock_read(fd, temp_core->limit_mem, sizeof(struct rlimit));
- }
- else {
- temp_core->limit_mem = NULL;
- }
-#endif
-
-#ifdef RLIMIT_NPROC
- sock_read(fd, &j, sizeof(int));
- if (j) {
- temp_core->limit_nproc = (struct rlimit *)apr_palloc(r->pool, sizeof(struct rlimit));
- sock_read(fd, temp_core->limit_nproc, sizeof(struct rlimit));
- }
- else {
- temp_core->limit_nproc = NULL;
- }
-#endif
-#endif
-
- return APR_SUCCESS;
-}
-
-static apr_status_t send_req(int fd, request_rec *r, char *argv0, char **env,
- int req_type)
-{
- int i;
- const char *user;
- module *suexec_mod = ap_find_linked_module("mod_suexec.c");
- cgid_req_t req = {0};
- suexec_config_t *suexec_cfg;
- apr_status_t stat;
-
- req.req_type = req_type;
- req.conn_id = r->connection->id;
- req.core_module_index = core_module.module_index;
- if (suexec_mod) {
- req.have_suexec = 1;
- req.suexec_module_index = suexec_mod->module_index;
- suexec_cfg = ap_get_module_config(r->per_dir_config,
- suexec_mod);
- req.suexec_cfg = *suexec_cfg;
- }
- for (req.env_count = 0; env[req.env_count]; req.env_count++) {
- continue;
- }
- req.filename_len = strlen(r->filename);
- req.argv0_len = strlen(argv0);
- req.uri_len = strlen(r->uri);
- req.args_len = r->args ? strlen(r->args) : 0;
- user = (const char *)apr_table_get(r->notes, "mod_userdir_user");
- if (user != NULL) {
- req.mod_userdir_user_len = strlen(user);
- }
- req.loglevel = r->server->loglevel;
-
- /* Write the request header */
- if ((stat = sock_write(fd, &req, sizeof(req))) != APR_SUCCESS) {
- return stat;
- }
-
- /* Write filename, argv0, uri, and args */
- if ((stat = sock_write(fd, r->filename, req.filename_len)) != APR_SUCCESS ||
- (stat = sock_write(fd, argv0, req.argv0_len)) != APR_SUCCESS ||
- (stat = sock_write(fd, r->uri, req.uri_len)) != APR_SUCCESS) {
- return stat;
- }
- if (req.args_len) {
- if ((stat = sock_write(fd, r->args, req.args_len)) != APR_SUCCESS) {
- return stat;
- }
- }
-
- /* write the environment variables */
- for (i = 0; i < req.env_count; i++) {
- apr_size_t curlen = strlen(env[i]);
-
- if ((stat = sock_write(fd, &curlen, sizeof(curlen))) != APR_SUCCESS) {
- return stat;
- }
-
- if ((stat = sock_write(fd, env[i], curlen)) != APR_SUCCESS) {
- return stat;
- }
- }
-
- /* send a minimal notes table */
- if (user) {
- if ((stat = sock_write(fd, user, req.mod_userdir_user_len)) != APR_SUCCESS) {
- return stat;
- }
- }
-
-#if 0
-#ifdef RLIMIT_CPU
- if (conf->limit_cpu) {
- len = 1;
- stat = sock_write(fd, &len, sizeof(int));
- stat = sock_write(fd, conf->limit_cpu, sizeof(struct rlimit));
- }
- else {
- len = 0;
- stat = sock_write(fd, &len, sizeof(int));
- }
-#endif
-
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
- if (conf->limit_mem) {
- len = 1;
- stat = sock_write(fd, &len, sizeof(int));
- stat = sock_write(fd, conf->limit_mem, sizeof(struct rlimit));
- }
- else {
- len = 0;
- stat = sock_write(fd, &len, sizeof(int));
- }
-#endif
-
-#ifdef RLIMIT_NPROC
- if (conf->limit_nproc) {
- len = 1;
- stat = sock_write(fd, &len, sizeof(int));
- stat = sock_write(fd, conf->limit_nproc, sizeof(struct rlimit));
- }
- else {
- len = 0;
- stat = sock_write(fd, &len, sizeof(int));
- }
-#endif
-#endif
- return APR_SUCCESS;
-}
-
-static void daemon_signal_handler(int sig)
-{
- if (sig == SIGHUP) {
- ++daemon_should_exit;
- }
-}
-
-static void cgid_child_errfn(apr_pool_t *pool, apr_status_t err,
- const char *description)
-{
- request_rec *r;
- void *vr;
-
- apr_pool_userdata_get(&vr, ERRFN_USERDATA_KEY, pool);
- r = vr;
-
- /* sure we got r, but don't call ap_log_rerror() because we don't
- * have r->headers_in and possibly other storage referenced by
- * ap_log_rerror()
- */
- ap_log_error(APLOG_MARK, APLOG_ERR, err, r->server, "%s", description);
-}
-
-static int cgid_server(void *data)
-{
- struct sockaddr_un unix_addr;
- int sd, sd2, rc;
- mode_t omask;
- apr_socklen_t len;
- apr_pool_t *ptrans;
- server_rec *main_server = data;
- apr_hash_t *script_hash = apr_hash_make(pcgi);
-
- apr_pool_create(&ptrans, pcgi);
-
- apr_signal(SIGCHLD, SIG_IGN);
- apr_signal(SIGHUP, daemon_signal_handler);
-
- if (unlink(sockname) < 0 && errno != ENOENT) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
- "Couldn't unlink unix domain socket %s",
- sockname);
- /* just a warning; don't bail out */
- }
-
- if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
- "Couldn't create unix domain socket");
- return errno;
- }
-
- memset(&unix_addr, 0, sizeof(unix_addr));
- unix_addr.sun_family = AF_UNIX;
- strcpy(unix_addr.sun_path, sockname);
-
- omask = umask(0077); /* so that only Apache can use socket */
- rc = bind(sd, (struct sockaddr *)&unix_addr, sizeof(unix_addr));
- umask(omask); /* can't fail, so can't clobber errno */
- if (rc < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
- "Couldn't bind unix domain socket %s",
- sockname);
- return errno;
- }
-
- if (listen(sd, DEFAULT_CGID_LISTENBACKLOG) < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
- "Couldn't listen on unix domain socket");
- return errno;
- }
-
- if (!geteuid()) {
- if (chown(sockname, unixd_config.user_id, -1) < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
- "Couldn't change owner of unix domain socket %s",
- sockname);
- return errno;
- }
- }
-
- unixd_setup_child(); /* if running as root, switch to configured user/group */
-
- while (!daemon_should_exit) {
- int errfileno = STDERR_FILENO;
- char *argv0;
- char **env;
- const char * const *argv;
- apr_int32_t in_pipe;
- apr_int32_t out_pipe;
- apr_int32_t err_pipe;
- apr_cmdtype_e cmd_type;
- request_rec *r;
- apr_procattr_t *procattr = NULL;
- apr_proc_t *procnew = NULL;
- apr_file_t *inout;
- cgid_req_t cgid_req;
- apr_status_t stat;
-
- apr_pool_clear(ptrans);
-
- len = sizeof(unix_addr);
- sd2 = accept(sd, (struct sockaddr *)&unix_addr, &len);
- if (sd2 < 0) {
-#if defined(ENETDOWN)
- if (errno == ENETDOWN) {
- /* The network has been shut down, no need to continue. Die gracefully */
- ++daemon_should_exit;
- }
-#endif
- if (errno != EINTR) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno,
- (server_rec *)data,
- "Error accepting on cgid socket");
- }
- continue;
- }
-
- r = apr_pcalloc(ptrans, sizeof(request_rec));
- procnew = apr_pcalloc(ptrans, sizeof(*procnew));
- r->pool = ptrans;
- stat = get_req(sd2, r, &argv0, &env, &cgid_req);
- if (stat != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, stat,
- main_server,
- "Error reading request on cgid socket");
- close(sd2);
- continue;
- }
-
- if (cgid_req.req_type == GETPID_REQ) {
- pid_t pid;
-
- pid = (pid_t)apr_hash_get(script_hash, &cgid_req.conn_id, sizeof(cgid_req.conn_id));
- if (write(sd2, &pid, sizeof(pid)) != sizeof(pid)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- main_server,
- "Error writing pid %" APR_PID_T_FMT " to handler", pid);
- }
- close(sd2);
- continue;
- }
-
- apr_os_file_put(&r->server->error_log, &errfileno, 0, r->pool);
- apr_os_file_put(&inout, &sd2, 0, r->pool);
-
- if (cgid_req.req_type == SSI_REQ) {
- in_pipe = APR_NO_PIPE;
- out_pipe = APR_FULL_BLOCK;
- err_pipe = APR_NO_PIPE;
- cmd_type = APR_SHELLCMD;
- }
- else {
- in_pipe = APR_CHILD_BLOCK;
- out_pipe = APR_CHILD_BLOCK;
- err_pipe = APR_CHILD_BLOCK;
- cmd_type = APR_PROGRAM;
- }
-
- if (((rc = apr_procattr_create(&procattr, ptrans)) != APR_SUCCESS) ||
- ((cgid_req.req_type == CGI_REQ) &&
- (((rc = apr_procattr_io_set(procattr,
- in_pipe,
- out_pipe,
- err_pipe)) != APR_SUCCESS) ||
- /* XXX apr_procattr_child_*_set() is creating an unnecessary
- * pipe between this process and the child being created...
- * It is cleaned up with the temporary pool for this request.
- */
- ((rc = apr_procattr_child_err_set(procattr, r->server->error_log, NULL)) != APR_SUCCESS) ||
- ((rc = apr_procattr_child_in_set(procattr, inout, NULL)) != APR_SUCCESS))) ||
- ((rc = apr_procattr_child_out_set(procattr, inout, NULL)) != APR_SUCCESS) ||
- ((rc = apr_procattr_dir_set(procattr,
- ap_make_dirstr_parent(r->pool, r->filename))) != APR_SUCCESS) ||
- ((rc = apr_procattr_cmdtype_set(procattr, cmd_type)) != APR_SUCCESS) ||
- ((rc = apr_procattr_child_errfn_set(procattr, cgid_child_errfn)) != APR_SUCCESS)) {
- /* Something bad happened, tell the world.
- * ap_log_rerror() won't work because the header table used by
- * ap_log_rerror() hasn't been replicated in the phony r
- */
- ap_log_error(APLOG_MARK, APLOG_ERR, rc, r->server,
- "couldn't set child process attributes: %s", r->filename);
- }
- else {
- apr_pool_userdata_set(r, ERRFN_USERDATA_KEY, apr_pool_cleanup_null, ptrans);
-
- argv = (const char * const *)create_argv(r->pool, NULL, NULL, NULL, argv0, r->args);
-
- /* We want to close sd2 for the new CGI process too.
- * If it is left open it'll make ap_pass_brigade() block
- * waiting for EOF if CGI forked something running long.
- * close(sd2) here should be okay, as CGI channel
- * is already dup()ed by apr_procattr_child_{in,out}_set()
- * above.
- */
- close(sd2);
-
- rc = ap_os_create_privileged_process(r, procnew, argv0, argv,
- (const char * const *)env,
- procattr, ptrans);
-
- if (rc != APR_SUCCESS) {
- /* Bad things happened. Everyone should have cleaned up.
- * ap_log_rerror() won't work because the header table used by
- * ap_log_rerror() hasn't been replicated in the phony r
- */
- ap_log_error(APLOG_MARK, APLOG_ERR, rc, r->server,
- "couldn't create child process: %d: %s", rc,
- apr_filepath_name_get(r->filename));
- }
- else {
- /* We don't want to leak storage for the key, so only allocate
- * a key if the key doesn't exist yet in the hash; there are
- * only a limited number of possible keys (one for each
- * possible thread in the server), so we can allocate a copy
- * of the key the first time a thread has a cgid request.
- * Note that apr_hash_set() only uses the storage passed in
- * for the key if it is adding the key to the hash for the
- * first time; new key storage isn't needed for replacing the
- * existing value of a key.
- */
- void *key;
-
- if (apr_hash_get(script_hash, &cgid_req.conn_id, sizeof(cgid_req.conn_id))) {
- key = &cgid_req.conn_id;
- }
- else {
- key = apr_pcalloc(pcgi, sizeof(cgid_req.conn_id));
- memcpy(key, &cgid_req.conn_id, sizeof(cgid_req.conn_id));
- }
- apr_hash_set(script_hash, key, sizeof(cgid_req.conn_id),
- (void *)procnew->pid);
- }
- }
- }
- return -1;
-}
-
-static int cgid_start(apr_pool_t *p, server_rec *main_server,
- apr_proc_t *procnew)
-{
-
- daemon_should_exit = 0; /* clear setting from previous generation */
- if ((daemon_pid = fork()) < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
- "mod_cgid: Couldn't spawn cgid daemon process");
- return DECLINED;
- }
- else if (daemon_pid == 0) {
- if (pcgi == NULL) {
- apr_pool_create(&pcgi, p);
- }
- cgid_server(main_server);
- exit(-1);
- }
- procnew->pid = daemon_pid;
- procnew->err = procnew->in = procnew->out = NULL;
- apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-#if APR_HAS_OTHER_CHILD
- apr_proc_other_child_register(procnew, cgid_maint, procnew, NULL, p);
-#endif
- return OK;
-}
-
-static int cgid_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- sockname = DEFAULT_SOCKET;
- return OK;
-}
-
-static int cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
- server_rec *main_server)
-{
- apr_proc_t *procnew = NULL;
- int first_time = 0;
- const char *userdata_key = "cgid_init";
- module **m;
- int ret = OK;
-
- root_server = main_server;
- root_pool = p;
-
- apr_pool_userdata_get((void **)&procnew, userdata_key, main_server->process->pool);
- if (!procnew) {
- first_time = 1;
- procnew = apr_pcalloc(main_server->process->pool, sizeof(*procnew));
- procnew->pid = -1;
- procnew->err = procnew->in = procnew->out = NULL;
- apr_pool_userdata_set((const void *)procnew, userdata_key,
- apr_pool_cleanup_null, main_server->process->pool);
- }
-
- if (!first_time) {
- total_modules = 0;
- for (m = ap_preloaded_modules; *m != NULL; m++)
- total_modules++;
-
- sockname = ap_server_root_relative(p, sockname);
- ret = cgid_start(p, main_server, procnew);
- if (ret != OK ) {
- return ret;
- }
- cgid_pfn_reg_with_ssi = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
- cgid_pfn_gtv = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_get_tag_and_value);
- cgid_pfn_ps = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_parse_string);
-
- if ((cgid_pfn_reg_with_ssi) && (cgid_pfn_gtv) && (cgid_pfn_ps)) {
- /* Required by mod_include filter. This is how mod_cgid registers
- * with mod_include to provide processing of the exec directive.
- */
- cgid_pfn_reg_with_ssi("exec", handle_exec);
- }
- }
- return ret;
-}
-
-static void *create_cgid_config(apr_pool_t *p, server_rec *s)
-{
- cgid_server_conf *c =
- (cgid_server_conf *) apr_pcalloc(p, sizeof(cgid_server_conf));
-
- c->logname = NULL;
- c->logbytes = DEFAULT_LOGBYTES;
- c->bufbytes = DEFAULT_BUFBYTES;
- return c;
-}
-
-static void *merge_cgid_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- cgid_server_conf *base = (cgid_server_conf *) basev, *overrides = (cgid_server_conf *) overridesv;
-
- return overrides->logname ? overrides : base;
-}
-
-static const char *set_scriptlog(cmd_parms *cmd, void *dummy, const char *arg)
-{
- server_rec *s = cmd->server;
- cgid_server_conf *conf = ap_get_module_config(s->module_config,
- &cgid_module);
-
- conf->logname = ap_server_root_relative(cmd->pool, arg);
-
- if (!conf->logname) {
- return apr_pstrcat(cmd->pool, "Invalid ScriptLog path ",
- arg, NULL);
- }
- return NULL;
-}
-
-static const char *set_scriptlog_length(cmd_parms *cmd, void *dummy, const char *arg)
-{
- server_rec *s = cmd->server;
- cgid_server_conf *conf = ap_get_module_config(s->module_config,
- &cgid_module);
-
- conf->logbytes = atol(arg);
- return NULL;
-}
-
-static const char *set_scriptlog_buffer(cmd_parms *cmd, void *dummy, const char *arg)
-{
- server_rec *s = cmd->server;
- cgid_server_conf *conf = ap_get_module_config(s->module_config,
- &cgid_module);
-
- conf->bufbytes = atoi(arg);
- return NULL;
-}
-
-static const char *set_script_socket(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- sockname = ap_server_root_relative(cmd->pool, arg);
-
- if (!sockname) {
- return apr_pstrcat(cmd->pool, "Invalid Scriptsock path",
- arg, NULL);
- }
-
- return NULL;
-}
-
-static const command_rec cgid_cmds[] =
-{
- AP_INIT_TAKE1("ScriptLog", set_scriptlog, NULL, RSRC_CONF,
- "the name of a log for script debugging info"),
- AP_INIT_TAKE1("ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF,
- "the maximum length (in bytes) of the script debug log"),
- AP_INIT_TAKE1("ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF,
- "the maximum size (in bytes) to record of a POST request"),
- AP_INIT_TAKE1("Scriptsock", set_script_socket, NULL, RSRC_CONF,
- "the name of the socket to use for communication with "
- "the cgi daemon."),
- {NULL}
-};
-
-static int log_scripterror(request_rec *r, cgid_server_conf * conf, int ret,
- apr_status_t rv, char *error)
-{
- apr_file_t *f = NULL;
- struct stat finfo;
- char time_str[APR_CTIME_LEN];
- int log_flags = rv ? APLOG_ERR : APLOG_ERR;
-
- ap_log_rerror(APLOG_MARK, log_flags, rv, r,
- "%s: %s", error, r->filename);
-
- /* XXX Very expensive mainline case! Open, then getfileinfo! */
- if (!conf->logname ||
- ((stat(conf->logname, &finfo) == 0)
- && (finfo.st_size > conf->logbytes)) ||
- (apr_file_open(&f, conf->logname,
- APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) {
- return ret;
- }
-
- /* "%% [Wed Jun 19 10:53:21 1996] GET /cgid-bin/printenv HTTP/1.0" */
- apr_ctime(time_str, apr_time_now());
- apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri,
- r->args ? "?" : "", r->args ? r->args : "", r->protocol);
- /* "%% 500 /usr/local/apache/cgid-bin */
- apr_file_printf(f, "%%%% %d %s\n", ret, r->filename);
-
- apr_file_printf(f, "%%error\n%s\n", error);
-
- apr_file_close(f);
- return ret;
-}
-
-static int log_script(request_rec *r, cgid_server_conf * conf, int ret,
- char *dbuf, const char *sbuf, apr_bucket_brigade *bb,
- apr_file_t *script_err)
-{
- const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
- const apr_table_entry_t *hdrs = (apr_table_entry_t *) hdrs_arr->elts;
- char argsbuffer[HUGE_STRING_LEN];
- apr_file_t *f = NULL;
- apr_bucket *e;
- const char *buf;
- apr_size_t len;
- apr_status_t rv;
- int first;
- int i;
- struct stat finfo;
- char time_str[APR_CTIME_LEN];
-
- /* XXX Very expensive mainline case! Open, then getfileinfo! */
- if (!conf->logname ||
- ((stat(conf->logname, &finfo) == 0)
- && (finfo.st_size > conf->logbytes)) ||
- (apr_file_open(&f, conf->logname,
- APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) {
- /* Soak up script output */
- discard_script_output(bb);
- if (script_err) {
- while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
- script_err) == APR_SUCCESS)
- continue;
- }
- return ret;
- }
-
- /* "%% [Wed Jun 19 10:53:21 1996] GET /cgid-bin/printenv HTTP/1.0" */
- apr_ctime(time_str, apr_time_now());
- apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri,
- r->args ? "?" : "", r->args ? r->args : "", r->protocol);
- /* "%% 500 /usr/local/apache/cgid-bin" */
- apr_file_printf(f, "%%%% %d %s\n", ret, r->filename);
-
- apr_file_puts("%request\n", f);
- for (i = 0; i < hdrs_arr->nelts; ++i) {
- if (!hdrs[i].key)
- continue;
- apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val);
- }
- if ((r->method_number == M_POST || r->method_number == M_PUT)
- && *dbuf) {
- apr_file_printf(f, "\n%s\n", dbuf);
- }
-
- apr_file_puts("%response\n", f);
- hdrs_arr = apr_table_elts(r->err_headers_out);
- hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
-
- for (i = 0; i < hdrs_arr->nelts; ++i) {
- if (!hdrs[i].key)
- continue;
- apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val);
- }
-
- if (sbuf && *sbuf)
- apr_file_printf(f, "%s\n", sbuf);
-
- first = 1;
-
- for (e = APR_BRIGADE_FIRST(bb);
- e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- break;
- }
- rv = apr_bucket_read(e, &buf, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS || (len == 0)) {
- break;
- }
- if (first) {
- apr_file_puts("%stdout\n", f);
- first = 0;
- }
- apr_file_write(f, buf, &len);
- apr_file_puts("\n", f);
- }
-
- if (script_err) {
- if (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
- script_err) == APR_SUCCESS) {
- apr_file_puts("%stderr\n", f);
- apr_file_puts(argsbuffer, f);
- while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
- script_err) == APR_SUCCESS)
- apr_file_puts(argsbuffer, f);
- apr_file_puts("\n", f);
- }
- }
-
- if (script_err) {
- apr_file_close(script_err);
- }
-
- apr_file_close(f);
- return ret;
-}
-
-static apr_status_t close_unix_socket(void *thefd)
-{
- int fd = (int)thefd;
-
- return close(fd);
-}
-
-static int connect_to_daemon(int *sdptr, request_rec *r,
- cgid_server_conf *conf)
-{
- struct sockaddr_un unix_addr;
- int sd;
- int connect_tries;
- apr_interval_time_t sliding_timer;
-
- memset(&unix_addr, 0, sizeof(unix_addr));
- unix_addr.sun_family = AF_UNIX;
- strcpy(unix_addr.sun_path, sockname);
-
- connect_tries = 0;
- sliding_timer = 100000; /* 100 milliseconds */
- while (1) {
- ++connect_tries;
- if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
- return log_scripterror(r, conf, HTTP_INTERNAL_SERVER_ERROR, errno,
- "unable to create socket to cgi daemon");
- }
- if (connect(sd, (struct sockaddr *)&unix_addr, sizeof(unix_addr)) < 0) {
- if (errno == ECONNREFUSED && connect_tries < DEFAULT_CONNECT_ATTEMPTS) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, errno, r,
- "connect #%d to cgi daemon failed, sleeping before retry",
- connect_tries);
- close(sd);
- apr_sleep(sliding_timer);
- if (sliding_timer < apr_time_from_sec(2)) {
- sliding_timer *= 2;
- }
- }
- else {
- close(sd);
- return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, errno,
- "unable to connect to cgi daemon after multiple tries");
- }
- }
- else {
- apr_pool_cleanup_register(r->pool, (void *)sd, close_unix_socket,
- apr_pool_cleanup_null);
- break; /* we got connected! */
- }
- /* gotta try again, but make sure the cgid daemon is still around */
- if (kill(daemon_pid, 0) != 0) {
- return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, errno,
- "cgid daemon is gone; is Apache terminating?");
- }
- }
- *sdptr = sd;
- return OK;
-}
-
-static void discard_script_output(apr_bucket_brigade *bb)
-{
- apr_bucket *e;
- const char *buf;
- apr_size_t len;
- apr_status_t rv;
-
- for (e = APR_BRIGADE_FIRST(bb);
- e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- break;
- }
- rv = apr_bucket_read(e, &buf, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- break;
- }
- }
-}
-
-/****************************************************************
- *
- * Actual cgid handling...
- */
-
-struct cleanup_script_info {
- request_rec *r;
- unsigned long conn_id;
- cgid_server_conf *conf;
-};
-
-static apr_status_t dead_yet(pid_t pid, apr_interval_time_t max_wait)
-{
- apr_interval_time_t interval = 10000; /* 10 ms */
- apr_interval_time_t total = 0;
-
- do {
-#ifdef _AIX
- /* On AIX, for processes like mod_cgid's script children where
- * SIGCHLD is ignored, kill(pid,0) returns success for up to
- * one second after the script child exits, based on when a
- * daemon runs to clean up unnecessary process table entries.
- * getpgid() can report the proper info (-1/ESRCH) immediately.
- */
- if (getpgid(pid) < 0) {
-#else
- if (kill(pid, 0) < 0) {
-#endif
- return APR_SUCCESS;
- }
- apr_sleep(interval);
- total = total + interval;
- if (interval < 500000) {
- interval *= 2;
- }
- } while (total < max_wait);
- return APR_EGENERAL;
-}
-
-static apr_status_t cleanup_nonchild_process(request_rec *r, pid_t pid)
-{
- kill(pid, SIGTERM); /* in case it isn't dead yet */
- if (dead_yet(pid, apr_time_from_sec(3)) == APR_SUCCESS) {
- return APR_SUCCESS;
- }
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "CGI process %" APR_PID_T_FMT " didn't exit, sending SIGKILL",
- pid);
- kill(pid, SIGKILL);
- if (dead_yet(pid, apr_time_from_sec(3)) == APR_SUCCESS) {
- return APR_SUCCESS;
- }
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "CGI process %" APR_PID_T_FMT " didn't exit, sending SIGKILL again",
- pid);
- kill(pid, SIGKILL);
-
- return APR_EGENERAL;
-}
-
-static apr_status_t cleanup_script(void *vptr)
-{
- struct cleanup_script_info *info = vptr;
- int sd;
- int rc;
- cgid_req_t req = {0};
- pid_t pid;
- apr_status_t stat;
-
- rc = connect_to_daemon(&sd, info->r, info->conf);
- if (rc != OK) {
- return APR_EGENERAL;
- }
-
- /* we got a socket, and there is already a cleanup registered for it */
-
- req.req_type = GETPID_REQ;
- req.conn_id = info->r->connection->id;
-
- stat = sock_write(sd, &req, sizeof(req));
- if (stat != APR_SUCCESS) {
- return stat;
- }
-
- /* wait for pid of script */
- stat = sock_read(sd, &pid, sizeof(pid));
- if (stat != APR_SUCCESS) {
- return stat;
- }
-
- if (pid == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, info->r,
- "daemon couldn't find CGI process for connection %lu",
- info->conn_id);
- return APR_EGENERAL;
- }
- return cleanup_nonchild_process(info->r, pid);
-}
-
-static int cgid_handler(request_rec *r)
-{
- conn_rec *c = r->connection;
- int retval, nph, dbpos = 0;
- char *argv0, *dbuf = NULL;
- apr_bucket_brigade *bb;
- apr_bucket *b;
- cgid_server_conf *conf;
- int is_included;
- int seen_eos, child_stopped_reading;
- int sd;
- char **env;
- apr_file_t *tempsock;
- struct cleanup_script_info *info;
- apr_status_t rv;
-
- if (strcmp(r->handler,CGI_MAGIC_TYPE) && strcmp(r->handler,"cgi-script"))
- return DECLINED;
-
- if (r->method_number == M_OPTIONS) {
- /* 99 out of 100 cgid scripts, this is all they support */
- r->allowed |= (AP_METHOD_BIT << M_GET);
- r->allowed |= (AP_METHOD_BIT << M_POST);
- return DECLINED;
- }
-
- conf = ap_get_module_config(r->server->module_config, &cgid_module);
- is_included = !strcmp(r->protocol, "INCLUDED");
-
- if ((argv0 = strrchr(r->filename, '/')) != NULL)
- argv0++;
- else
- argv0 = r->filename;
-
- nph = !(strncmp(argv0, "nph-", 4));
-
- if ((argv0 = strrchr(r->filename, '/')) != NULL)
- argv0++;
- else
- argv0 = r->filename;
-
- if (!(ap_allow_options(r) & OPT_EXECCGI) && !is_scriptaliased(r))
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "Options ExecCGI is off in this directory");
- if (nph && is_included)
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "attempt to include NPH CGI script");
-
-#if defined(OS2) || defined(WIN32)
-#error mod_cgid does not work on this platform. If you teach it to, look
-#error at mod_cgi.c for required code in this path.
-#else
- if (r->finfo.filetype == 0)
- return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
- "script not found or unable to stat");
-#endif
- if (r->finfo.filetype == APR_DIR)
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "attempt to invoke directory as script");
-
- if ((r->used_path_info == AP_REQ_REJECT_PATH_INFO) &&
- r->path_info && *r->path_info)
- {
- /* default to accept */
- return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
- "AcceptPathInfo off disallows user's path");
- }
-/*
- if (!ap_suexec_enabled) {
- if (!ap_can_exec(&r->finfo))
- return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
- "file permissions deny server execution");
- }
-*/
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
- env = ap_create_environment(r->pool, r->subprocess_env);
-
- if ((retval = connect_to_daemon(&sd, r, conf)) != OK) {
- return retval;
- }
-
- rv = send_req(sd, r, argv0, env, CGI_REQ);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "write to cgi daemon process");
- }
-
- info = apr_palloc(r->pool, sizeof(struct cleanup_script_info));
- info->r = r;
- info->conn_id = r->connection->id;
- info->conf = conf;
- apr_pool_cleanup_register(r->pool, info,
- cleanup_script,
- apr_pool_cleanup_null);
- /* We are putting the socket discriptor into an apr_file_t so that we can
- * use a pipe bucket to send the data to the client. APR will create
- * a cleanup for the apr_file_t which will close the socket, so we'll
- * get rid of the cleanup we registered when we created the socket.
- */
-
- apr_os_pipe_put_ex(&tempsock, &sd, 1, r->pool);
- apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
-
- if ((argv0 = strrchr(r->filename, '/')) != NULL)
- argv0++;
- else
- argv0 = r->filename;
-
- /* Transfer any put/post args, CERN style...
- * Note that we already ignore SIGPIPE in the core server.
- */
- bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- seen_eos = 0;
- child_stopped_reading = 0;
- if (conf->logname) {
- dbuf = apr_palloc(r->pool, conf->bufbytes + 1);
- dbpos = 0;
- }
- do {
- apr_bucket *bucket;
-
- rv = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
- APR_BLOCK_READ, HUGE_STRING_LEN);
-
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- for (bucket = APR_BRIGADE_FIRST(bb);
- bucket != APR_BRIGADE_SENTINEL(bb);
- bucket = APR_BUCKET_NEXT(bucket))
- {
- const char *data;
- apr_size_t len;
-
- if (APR_BUCKET_IS_EOS(bucket)) {
- seen_eos = 1;
- break;
- }
-
- /* We can't do much with this. */
- if (APR_BUCKET_IS_FLUSH(bucket)) {
- continue;
- }
-
- /* If the child stopped, we still must read to EOS. */
- if (child_stopped_reading) {
- continue;
- }
-
- /* read */
- apr_bucket_read(bucket, &data, &len, APR_BLOCK_READ);
-
- if (conf->logname && dbpos < conf->bufbytes) {
- int cursize;
-
- if ((dbpos + len) > conf->bufbytes) {
- cursize = conf->bufbytes - dbpos;
- }
- else {
- cursize = len;
- }
- memcpy(dbuf + dbpos, data, cursize);
- dbpos += cursize;
- }
-
- /* Keep writing data to the child until done or too much time
- * elapses with no progress or an error occurs.
- */
- rv = apr_file_write_full(tempsock, data, len, NULL);
-
- if (rv != APR_SUCCESS) {
- /* silly script stopped reading, soak up remaining message */
- child_stopped_reading = 1;
- }
- }
- apr_brigade_cleanup(bb);
- }
- while (!seen_eos);
-
- if (conf->logname) {
- dbuf[dbpos] = '\0';
- }
-
- /* we're done writing, or maybe we didn't write at all;
- * force EOF on child's stdin so that the cgi detects end (or
- * absence) of data
- */
- shutdown(sd, 1);
-
- /* Handle script return... */
- if (!nph) {
- const char *location;
- char sbuf[MAX_STRING_LEN];
- int ret;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_pipe_create(tempsock, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- if ((ret = ap_scan_script_header_err_brigade(r, bb, sbuf))) {
- return log_script(r, conf, ret, dbuf, sbuf, bb, NULL);
- }
-
- location = apr_table_get(r->headers_out, "Location");
-
- if (location && location[0] == '/' && r->status == 200) {
-
- /* Soak up all the script output */
- discard_script_output(bb);
- apr_brigade_destroy(bb);
- /* This redirect needs to be a GET no matter what the original
- * method was.
- */
- r->method = apr_pstrdup(r->pool, "GET");
- r->method_number = M_GET;
-
- /* We already read the message body (if any), so don't allow
- * the redirected request to think it has one. We can ignore
- * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR.
- */
- apr_table_unset(r->headers_in, "Content-Length");
-
- ap_internal_redirect_handler(location, r);
- return OK;
- }
- else if (location && r->status == 200) {
- /* XX Note that if a script wants to produce its own Redirect
- * body, it now has to explicitly *say* "Status: 302"
- */
- discard_script_output(bb);
- apr_brigade_destroy(bb);
- return HTTP_MOVED_TEMPORARILY;
- }
-
- ap_pass_brigade(r->output_filters, bb);
- }
-
- if (nph) {
- struct ap_filter_t *cur;
-
- /* get rid of all filters up through protocol... since we
- * haven't parsed off the headers, there is no way they can
- * work
- */
-
- cur = r->proto_output_filters;
- while (cur && cur->frec->ftype < AP_FTYPE_CONNECTION) {
- cur = cur->next;
- }
- r->output_filters = r->proto_output_filters = cur;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_pipe_create(tempsock, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- ap_pass_brigade(r->output_filters, bb);
- }
-
- return OK; /* NOT r->status, even if it has changed. */
-}
-
-
-
-
-/*============================================================================
- *============================================================================
- * This is the beginning of the cgi filter code moved from mod_include. This
- * is the code required to handle the "exec" SSI directive.
- *============================================================================
- *============================================================================*/
-static apr_status_t include_cgi(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb, char *s)
-{
- request_rec *r = f->r;
- request_rec *rr = ap_sub_req_lookup_uri(s, r, f->next);
- int rr_status;
-
- if (rr->status != HTTP_OK) {
- ap_destroy_sub_req(rr);
- return APR_EGENERAL;
- }
-
- /* No hardwired path info or query allowed */
- if ((rr->path_info && rr->path_info[0]) || rr->args) {
- ap_destroy_sub_req(rr);
- return APR_EGENERAL;
- }
- if (rr->finfo.filetype != APR_REG) {
- ap_destroy_sub_req(rr);
- return APR_EGENERAL;
- }
-
- /* Script gets parameters of the *document*, for back compatibility */
- rr->path_info = r->path_info; /* hard to get right; see mod_cgi.c */
- rr->args = r->args;
-
- /* Force sub_req to be treated as a CGI request, even if ordinary
- * typing rules would have called it something else.
- */
- ap_set_content_type(rr, CGI_MAGIC_TYPE);
-
- /* Run it. */
- rr_status = ap_run_sub_req(rr);
- if (ap_is_HTTP_REDIRECT(rr_status)) {
- const char *location = apr_table_get(rr->headers_out, "Location");
-
- if (location) {
- char *buffer;
-
- location = ap_escape_html(rr->pool, location);
- buffer = apr_pstrcat(ctx->pool, "<a href=\"", location, "\">",
- location, "</a>", NULL);
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(buffer,
- strlen(buffer), ctx->pool,
- f->c->bucket_alloc));
- }
- }
-
- ap_destroy_sub_req(rr);
-
- return APR_SUCCESS;
-}
-
-/* This is the special environment used for running the "exec cmd="
- * variety of SSI directives.
- */
-static void add_ssi_vars(request_rec *r)
-{
- apr_table_t *e = r->subprocess_env;
-
- if (r->path_info && r->path_info[0] != '\0') {
- request_rec *pa_req;
-
- apr_table_setn(e, "PATH_INFO", ap_escape_shell_cmd(r->pool, r->path_info));
-
- pa_req = ap_sub_req_lookup_uri(ap_escape_uri(r->pool, r->path_info), r, NULL);
- if (pa_req->filename) {
- apr_table_setn(e, "PATH_TRANSLATED",
- apr_pstrcat(r->pool, pa_req->filename, pa_req->path_info, NULL));
- }
- ap_destroy_sub_req(pa_req);
- }
-
- if (r->args) {
- char *arg_copy = apr_pstrdup(r->pool, r->args);
-
- apr_table_setn(e, "QUERY_STRING", r->args);
- ap_unescape_url(arg_copy);
- apr_table_setn(e, "QUERY_STRING_UNESCAPED", ap_escape_shell_cmd(r->pool, arg_copy));
- }
-}
-
-static int include_cmd(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb, char *command)
-{
- char **env;
- int sd;
- int retval;
- apr_file_t *tempsock = NULL;
- request_rec *r = f->r;
- cgid_server_conf *conf = ap_get_module_config(r->server->module_config,
- &cgid_module);
- struct cleanup_script_info *info;
-
- add_ssi_vars(r);
- env = ap_create_environment(r->pool, r->subprocess_env);
-
- if ((retval = connect_to_daemon(&sd, r, conf)) != OK) {
- return retval;
- }
-
- send_req(sd, r, command, env, SSI_REQ);
-
- info = apr_palloc(r->pool, sizeof(struct cleanup_script_info));
- info->r = r;
- info->conn_id = r->connection->id;
- info->conf = conf;
- /* for this type of request, the script is invoked through an
- * intermediate shell process... cleanup_script is only able
- * to knock out the shell process, not the actual script
- */
- apr_pool_cleanup_register(r->pool, info,
- cleanup_script,
- apr_pool_cleanup_null);
-
- /* We are putting the socket discriptor into an apr_file_t so that we can
- * use a pipe bucket to send the data to the client. APR will create
- * a cleanup for the apr_file_t which will close the socket, so we'll
- * get rid of the cleanup we registered when we created the socket.
- */
- apr_os_pipe_put_ex(&tempsock, &sd, 1, r->pool);
- apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
-
- APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pipe_create(tempsock,
- f->c->bucket_alloc));
- ctx->flush_now = 1;
-
- return APR_SUCCESS;
-}
-
-static apr_status_t handle_exec(include_ctx_t *ctx, ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- char *tag = NULL;
- char *tag_val = NULL;
- request_rec *r = f->r;
- char *file = r->filename;
- char parsed_string[MAX_STRING_LEN];
-
- if (!ctx->argc) {
- ap_log_rerror(APLOG_MARK,
- (ctx->flags & SSI_FLAG_PRINTING)
- ? APLOG_ERR : APLOG_WARNING,
- 0, r, "missing argument for exec element in %s",
- r->filename);
- }
-
- if (!(ctx->flags & SSI_FLAG_PRINTING)) {
- return APR_SUCCESS;
- }
-
- if (!ctx->argc) {
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- if (ctx->flags & SSI_FLAG_NO_EXEC) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "exec used but not allowed "
- "in %s", r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- return APR_SUCCESS;
- }
-
- while (1) {
- cgid_pfn_gtv(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
- if (!tag || !tag_val) {
- break;
- }
-
- if (!strcmp(tag, "cmd")) {
- apr_status_t rv;
-
- cgid_pfn_ps(ctx, tag_val, parsed_string, sizeof(parsed_string),
- SSI_EXPAND_LEAVE_NAME);
-
- rv = include_cmd(ctx, f, bb, parsed_string);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "execution failure for parameter \"%s\" "
- "to tag exec in file %s", tag, r->filename);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
- else if (!strcmp(tag, "cgi")) {
- apr_status_t rv;
-
- cgid_pfn_ps(ctx, tag_val, parsed_string, sizeof(parsed_string),
- SSI_EXPAND_DROP_NAME);
-
- rv = include_cgi(ctx, f, bb, parsed_string);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "invalid CGI ref "
- "\"%s\" in %s", tag_val, file);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "unknown parameter "
- "\"%s\" to tag exec in %s", tag, file);
- SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
- break;
- }
- }
-
- return APR_SUCCESS;
-}
-/*============================================================================
- *============================================================================
- * This is the end of the cgi filter code moved from mod_include.
- *============================================================================
- *============================================================================*/
-
-
-static void register_hook(apr_pool_t *p)
-{
- static const char * const aszPre[] = { "mod_include.c", NULL };
-
- ap_hook_pre_config(cgid_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(cgid_init, aszPre, NULL, APR_HOOK_MIDDLE);
- ap_hook_handler(cgid_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA cgid_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_cgid_config, /* server config */
- merge_cgid_config, /* merge server config */
- cgid_cmds, /* command table */
- register_hook /* register_handlers */
-};
-
diff --git a/modules/generators/mod_cgid.exp b/modules/generators/mod_cgid.exp
deleted file mode 100644
index 5f10d486da..0000000000
--- a/modules/generators/mod_cgid.exp
+++ /dev/null
@@ -1 +0,0 @@
-cgid_module
diff --git a/modules/generators/mod_info.c b/modules/generators/mod_info.c
deleted file mode 100644
index ec985b26ee..0000000000
--- a/modules/generators/mod_info.c
+++ /dev/null
@@ -1,532 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Info Module. Display configuration information for the server and
- * all included modules.
- *
- * <Location /server-info>
- * SetHandler server-info
- * </Location>
- *
- * GET /server-info - Returns full configuration page for server and all modules
- * GET /server-info?server - Returns server configuration only
- * GET /server-info?module_name - Returns configuration for a single module
- * GET /server-info?list - Returns quick list of included modules
- *
- * Rasmus Lerdorf <rasmus@vex.net>, May 1996
- *
- * 05.01.96 Initial Version
- *
- * Lou Langholtz <ldl@usi.utah.edu>, July 1997
- *
- * 07.11.97 Addition of the AddModuleInfo directive
- *
- * Ryan Morgan <rmorgan@covalent.net>
- *
- * 8.11.00 Port to Apache 2.0. Read configuation from the configuration
- * tree rather than reparse the entire configuation file.
- *
- */
-
-#define CORE_PRIVATE
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_script.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "ap_mpm.h"
-
-typedef struct {
- const char *name; /* matching module name */
- const char *info; /* additional info */
-} info_entry;
-
-typedef struct {
- apr_array_header_t *more_info;
-} info_svr_conf;
-
-module AP_MODULE_DECLARE_DATA info_module;
-
-static void *create_info_config(apr_pool_t *p, server_rec *s)
-{
- info_svr_conf *conf = (info_svr_conf *) apr_pcalloc(p, sizeof(info_svr_conf));
-
- conf->more_info = apr_array_make(p, 20, sizeof(info_entry));
- return conf;
-}
-
-static void *merge_info_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- info_svr_conf *new = (info_svr_conf *) apr_pcalloc(p, sizeof(info_svr_conf));
- info_svr_conf *base = (info_svr_conf *) basev;
- info_svr_conf *overrides = (info_svr_conf *) overridesv;
-
- new->more_info = apr_array_append(p, overrides->more_info, base->more_info);
- return new;
-}
-
-static void mod_info_html_cmd_string(request_rec *r, const char *string,
- int close)
-{
- const char *s;
-
- s = string;
- /* keep space for \0 byte */
- while (*s) {
- if (*s == '<') {
- if (close) {
- ap_rputs("&lt;/", r);
- } else {
- ap_rputs("&lt;", r);
- }
- }
- else if (*s == '>') {
- ap_rputs("&gt;", r);
- }
- else if (*s == '&') {
- ap_rputs("&amp;", r);
- }
- else if (*s == ' ') {
- if (close) {
- ap_rputs("&gt;", r);
- break;
- } else {
- ap_rputc(*s, r);
- }
- } else {
- ap_rputc(*s, r);
- }
- s++;
- }
-}
-
-static void mod_info_module_cmds(request_rec * r, const command_rec * cmds,
- ap_directive_t * conftree)
-{
- const command_rec *cmd;
- ap_directive_t *tmptree = conftree;
- char htmlstring[MAX_STRING_LEN];
- int block_start = 0;
- int nest = 0;
-
- while (tmptree != NULL) {
- cmd = cmds;
- while (cmd->name) {
- if ((cmd->name[0] != '<') &&
- (strcasecmp(cmd->name, tmptree->directive) == 0)) {
- if (nest > block_start) {
- block_start++;
- apr_snprintf(htmlstring, sizeof(htmlstring), "%s %s",
- tmptree->parent->directive,
- tmptree->parent->args);
- ap_rputs("<dd><tt>", r);
- mod_info_html_cmd_string(r, htmlstring, 0);
- ap_rputs("</tt></dd>\n", r);
- }
- if (nest == 2) {
- ap_rprintf(r, "<dd><tt>&nbsp;&nbsp;&nbsp;&nbsp;%s "
- "<i>%s</i></tt></dd>\n",
- ap_escape_html(r->pool,tmptree->directive),
- ap_escape_html(r->pool,tmptree->args));
- } else if (nest == 1) {
- ap_rprintf(r,
- "<dd><tt>&nbsp;&nbsp;%s <i>%s</i></tt></dd>\n",
- ap_escape_html(r->pool,tmptree->directive),
- ap_escape_html(r->pool,tmptree->args));
- } else {
- ap_rputs("<dd><tt>", r);
- mod_info_html_cmd_string(r, tmptree->directive, 0);
- ap_rprintf(r, " <i>%s</i></tt></dd>\n",
- ap_escape_html(r->pool,tmptree->args));
- }
- }
- ++cmd;
- }
- if (tmptree->first_child != NULL) {
- tmptree = tmptree->first_child;
- nest++;
- } else if (tmptree->next != NULL) {
- tmptree = tmptree->next;
- } else {
- if (block_start) {
- apr_snprintf(htmlstring, sizeof(htmlstring), "%s %s",
- tmptree->parent->directive,
- tmptree->parent->args);
- ap_rputs("<dd><tt>", r);
- mod_info_html_cmd_string(r, htmlstring, 1);
- ap_rputs("</tt></dd>\n", r);
- block_start--;
- }
- if (tmptree->parent) {
- tmptree = tmptree->parent->next;
- }
- else {
- tmptree = NULL;
- }
- nest--;
- }
-
- }
-}
-
-typedef struct { /*XXX: should get something from apr_hooks.h instead */
- void (*pFunc)(void); /* just to get the right size */
- const char *szName;
- const char * const *aszPredecessors;
- const char * const *aszSuccessors;
- int nOrder;
-} hook_struct_t;
-
-/*
- * hook_get_t is a pointer to a function that takes void as an argument and
- * returns a pointer to an apr_array_header_t. The nasty WIN32 ifdef
- * is required to account for the fact that the ap_hook* calls all use
- * STDCALL calling convention.
- */
-typedef apr_array_header_t * (
-#ifdef WIN32
-__stdcall
-#endif
-* hook_get_t)(void);
-
-typedef struct {
- const char *name;
- hook_get_t get;
-} hook_lookup_t;
-
-static hook_lookup_t request_hooks[] = {
- {"Post-Read Request", ap_hook_get_post_read_request},
- {"Header Parse", ap_hook_get_header_parser},
- {"Translate Path", ap_hook_get_translate_name},
- {"Check Access", ap_hook_get_access_checker},
- {"Verify User ID", ap_hook_get_check_user_id},
- {"Verify User Access", ap_hook_get_auth_checker},
- {"Check Type", ap_hook_get_type_checker},
- {"Fixups", ap_hook_get_fixups},
- {"Logging", ap_hook_get_log_transaction},
- {NULL},
-};
-
-static int module_find_hook(module *modp,
- hook_get_t hook_get)
-{
- int i;
- apr_array_header_t *hooks = hook_get();
- hook_struct_t *elts;
-
- if (!hooks) {
- return 0;
- }
-
- elts = (hook_struct_t *)hooks->elts;
-
- for (i=0; i< hooks->nelts; i++) {
- if (strcmp(elts[i].szName, modp->name) == 0) {
- return 1;
- }
- }
-
- return 0;
-}
-
-static void module_participate(request_rec *r,
- module *modp,
- hook_lookup_t *lookup,
- int *comma)
-{
- if (module_find_hook(modp, lookup->get)) {
- if (*comma) {
- ap_rputs(", ", r);
- }
- ap_rvputs(r, "<tt>", lookup->name, "</tt>", NULL);
- *comma = 1;
- }
-}
-
-static void module_request_hook_participate(request_rec *r, module *modp)
-{
- int i, comma=0;
-
- ap_rputs("<dt><strong>Request Phase Participation:</strong>\n", r);
-
- for (i=0; request_hooks[i].name; i++) {
- module_participate(r, modp, &request_hooks[i], &comma);
- }
-
- if (!comma) {
- ap_rputs("<tt> <em>none</em></tt>", r);
- }
- ap_rputs("</dt>\n", r);
-}
-
-static const char *find_more_info(server_rec *s, const char *module_name)
-{
- int i;
- info_svr_conf *conf = (info_svr_conf *) ap_get_module_config(s->module_config,
- &info_module);
- info_entry *entry = (info_entry *) conf->more_info->elts;
-
- if (!module_name) {
- return 0;
- }
- for (i = 0; i < conf->more_info->nelts; i++) {
- if (!strcmp(module_name, entry->name)) {
- return entry->info;
- }
- entry++;
- }
- return 0;
-}
-
-static int display_info(request_rec *r)
-{
- module *modp = NULL;
- const char *more_info;
- const command_rec *cmd = NULL;
-#ifdef NEVERMORE
- const handler_rec *hand = NULL;
-#endif
- server_rec *serv = r->server;
- int comma = 0;
-
- if (strcmp(r->handler, "server-info"))
- return DECLINED;
-
- r->allowed |= (AP_METHOD_BIT << M_GET);
- if (r->method_number != M_GET)
- return DECLINED;
-
- ap_set_content_type(r, "text/html");
-
- ap_rputs(DOCTYPE_HTML_3_2
- "<html><head><title>Server Information</title></head>\n", r);
- ap_rputs("<body><h1 align=\"center\">Apache Server Information</h1>\n", r);
- if (!r->args || strcasecmp(r->args, "list")) {
- if (!r->args) {
- ap_rputs("<dl><dt><tt><a href=\"#server\">Server Settings</a>, ", r);
- for (modp = ap_top_module; modp; modp = modp->next) {
- ap_rprintf(r, "<a href=\"#%s\">%s</a>", modp->name, modp->name);
- if (modp->next) {
- ap_rputs(", ", r);
- }
- }
- ap_rputs("</tt></dt></dl><hr />", r);
-
- }
- if (!r->args || !strcasecmp(r->args, "server")) {
- int max_daemons, forked, threaded;
-
- ap_rprintf(r, "<dl><dt><a name=\"server\"><strong>Server Version:</strong> "
- "<font size=\"+1\"><tt>%s</tt></font></a></dt>\n",
- ap_get_server_version());
- ap_rprintf(r, "<dt><strong>Server Built:</strong> "
- "<font size=\"+1\"><tt>%s</tt></font></dt>\n",
- ap_get_server_built());
- ap_rprintf(r, "<dt><strong>API Version:</strong> "
- "<tt>%d:%d</tt></dt>\n",
- MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR);
- ap_rprintf(r, "<dt><strong>Hostname/port:</strong> "
- "<tt>%s:%u</tt></dt>\n",
- ap_get_server_name(r), ap_get_server_port(r));
- ap_rprintf(r, "<dt><strong>Timeouts:</strong> "
- "<tt>connection: %d &nbsp;&nbsp; "
- "keep-alive: %d</tt></dt>",
- (int)(apr_time_sec(serv->timeout)),
- (int)(apr_time_sec(serv->timeout)));
- ap_mpm_query(AP_MPMQ_MAX_DAEMON_USED, &max_daemons);
- ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded);
- ap_mpm_query(AP_MPMQ_IS_FORKED, &forked);
- ap_rprintf(r, "<dt><strong>MPM Name:</strong> <tt>%s</tt></dt>\n", ap_show_mpm());
- ap_rprintf(r, "<dt><strong>MPM Information:</strong> "
- "<tt>Max Daemons: %d Threaded: %s Forked: %s</tt></dt>\n",
- max_daemons, threaded ? "yes" : "no",
- forked ? "yes" : "no");
- ap_rprintf(r, "<dt><strong>Server Root:</strong> "
- "<tt>%s</tt></dt>\n", ap_server_root);
- ap_rprintf(r, "<dt><strong>Config File:</strong> "
- "<tt>%s</tt></dt>\n", ap_conftree->filename);
- ap_rputs("</dl><hr />", r);
- }
- for (modp = ap_top_module; modp; modp = modp->next) {
- if (!r->args || !strcasecmp(modp->name, r->args)) {
- ap_rprintf(r, "<dl><dt><a name=\"%s\"><strong>Module Name:</strong> "
- "<font size=\"+1\"><tt>%s</tt></font></a></dt>\n",
- modp->name, modp->name);
- ap_rputs("<dt><strong>Content handlers:</strong> ", r);
-#ifdef NEVERMORE
- hand = modp->handlers;
- if (hand) {
- while (hand) {
- if (hand->content_type) {
- ap_rprintf(r, " <tt>%s</tt>\n", hand->content_type);
- }
- else {
- break;
- }
- hand++;
- if (hand && hand->content_type) {
- ap_rputs(",", r);
- }
- }
- }
- else {
- ap_rputs("<tt> <em>none</em></tt>", r);
- }
-#else
- if (module_find_hook(modp, ap_hook_get_handler)) {
- ap_rputs("<tt> <em>yes</em></tt>", r);
- }
- else {
- ap_rputs("<tt> <em>none</em></tt>", r);
- }
-#endif
- ap_rputs("</dt>", r);
- ap_rputs("<dt><strong>Configuration Phase Participation:</strong>\n",
- r);
- if (modp->create_dir_config) {
- if (comma) {
- ap_rputs(", ", r);
- }
- ap_rputs("<tt>Create Directory Config</tt>", r);
- comma = 1;
- }
- if (modp->merge_dir_config) {
- if (comma) {
- ap_rputs(", ", r);
- }
- ap_rputs("<tt>Merge Directory Configs</tt>", r);
- comma = 1;
- }
- if (modp->create_server_config) {
- if (comma) {
- ap_rputs(", ", r);
- }
- ap_rputs("<tt>Create Server Config</tt>", r);
- comma = 1;
- }
- if (modp->merge_server_config) {
- if (comma) {
- ap_rputs(", ", r);
- }
- ap_rputs("<tt>Merge Server Configs</tt>", r);
- comma = 1;
- }
- if (!comma)
- ap_rputs("<tt> <em>none</em></tt>", r);
- comma = 0;
- ap_rputs("</dt>", r);
-
- module_request_hook_participate(r, modp);
-
- cmd = modp->cmds;
- if (cmd) {
- ap_rputs("<dt><strong>Module Directives:</strong></dt>", r);
- while (cmd) {
- if (cmd->name) {
- ap_rputs("<dd><tt>", r);
- mod_info_html_cmd_string(r, cmd->name, 0);
- ap_rputs(" - <i>", r);
- if (cmd->errmsg) {
- ap_rputs(cmd->errmsg, r);
- }
- ap_rputs("</i></tt></dd>\n", r);
- }
- else {
- break;
- }
- cmd++;
- }
- ap_rputs("<dt><strong>Current Configuration:</strong></dt>\n", r);
- mod_info_module_cmds(r, modp->cmds, ap_conftree);
- }
- else {
- ap_rputs("<dt><strong>Module Directives:</strong> <tt>none</tt></dt>", r);
- }
- more_info = find_more_info(serv, modp->name);
- if (more_info) {
- ap_rputs("<dt><strong>Additional Information:</strong>\n</dt><dd>",
- r);
- ap_rputs(more_info, r);
- ap_rputs("</dd>", r);
- }
- ap_rputs("</dl><hr />\n", r);
- if (r->args) {
- break;
- }
- }
- }
- if (!modp && r->args && strcasecmp(r->args, "server")) {
- ap_rputs("<p><b>No such module</b></p>\n", r);
- }
- }
- else {
- ap_rputs("<dl><dt>Server Module List</dt>", r);
- for (modp = ap_top_module; modp; modp = modp->next) {
- ap_rputs("<dd>", r);
- ap_rputs(modp->name, r);
- ap_rputs("</dd>", r);
- }
- ap_rputs("</dl><hr />", r);
- }
- ap_rputs(ap_psignature("",r), r);
- ap_rputs("</body></html>\n", r);
- /* Done, turn off timeout, close file and return */
- return 0;
-}
-
-static const char *add_module_info(cmd_parms *cmd, void *dummy,
- const char *name, const char *info)
-{
- server_rec *s = cmd->server;
- info_svr_conf *conf = (info_svr_conf *) ap_get_module_config(s->module_config,
- &info_module);
- info_entry *new = apr_array_push(conf->more_info);
-
- new->name = name;
- new->info = info;
- return NULL;
-}
-
-static const command_rec info_cmds[] =
-{
- AP_INIT_TAKE2("AddModuleInfo", add_module_info, NULL, RSRC_CONF,
- "a module name and additional information on that module"),
- {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(display_info, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA info_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_info_config, /* server config */
- merge_info_config, /* merge server config */
- info_cmds, /* command apr_table_t */
- register_hooks
-};
diff --git a/modules/generators/mod_info.dsp b/modules/generators/mod_info.dsp
deleted file mode 100644
index 707bd1433f..0000000000
--- a/modules/generators/mod_info.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_info" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_info - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_info.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_info.mak" CFG="mod_info - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_info - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_info - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_info - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_info_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_info - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_info_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_info - Win32 Release"
-# Name "mod_info - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_info.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_info.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_info - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_info.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_info.so "info_module for Apache" ../../include/ap_release.h > .\mod_info.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_info - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_info.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_info.so "info_module for Apache" ../../include/ap_release.h > .\mod_info.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_info.exp b/modules/generators/mod_info.exp
deleted file mode 100644
index c304fa776d..0000000000
--- a/modules/generators/mod_info.exp
+++ /dev/null
@@ -1 +0,0 @@
-info_module
diff --git a/modules/generators/mod_status.c b/modules/generators/mod_status.c
deleted file mode 100644
index 367dff4265..0000000000
--- a/modules/generators/mod_status.c
+++ /dev/null
@@ -1,854 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Status Module. Display lots of internal data about how Apache is
- * performing and the state of all children processes.
- *
- * To enable this, add the following lines into any config file:
- *
- * <Location /server-status>
- * SetHandler server-status
- * </Location>
- *
- * You may want to protect this location by password or domain so no one
- * else can look at it. Then you can access the statistics with a URL like:
- *
- * http://your_server_name/server-status
- *
- * /server-status - Returns page using tables
- * /server-status?notable - Returns page for browsers without table support
- * /server-status?refresh - Returns page with 1 second refresh
- * /server-status?refresh=6 - Returns page with refresh every 6 seconds
- * /server-status?auto - Returns page with data for automatic parsing
- *
- * Mark Cox, mark@ukweb.com, November 1995
- *
- * 12.11.95 Initial version for www.telescope.org
- * 13.3.96 Updated to remove rprintf's [Mark]
- * 18.3.96 Added CPU usage, process information, and tidied [Ben Laurie]
- * 18.3.96 Make extra Scoreboard variables #definable
- * 25.3.96 Make short report have full precision [Ben Laurie suggested]
- * 25.3.96 Show uptime better [Mark/Ben Laurie]
- * 29.3.96 Better HTML and explanation [Mark/Rob Hartill suggested]
- * 09.4.96 Added message for non-STATUS compiled version
- * 18.4.96 Added per child and per slot counters [Jim Jagielski]
- * 01.5.96 Table format, cleanup, even more spiffy data [Chuck Murcko/Jim J.]
- * 18.5.96 Adapted to use new rprintf() routine, incidentally fixing a missing
- * piece in short reports [Ben Laurie]
- * 21.5.96 Additional Status codes (DNS and LOGGING only enabled if
- * extended STATUS is enabled) [George Burgyan/Jim J.]
- * 10.8.98 Allow for extended status info at runtime (no more STATUS)
- * [Jim J.]
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "ap_mpm.h"
-#include "util_script.h"
-#include <time.h>
-#include "scoreboard.h"
-#include "http_log.h"
-#include "mod_status.h"
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#ifdef NEXT
-#if (NX_CURRENT_COMPILER_RELEASE == 410)
-#ifdef m68k
-#define HZ 64
-#else
-#define HZ 100
-#endif
-#else
-#include <machine/param.h>
-#endif
-#endif /* NEXT */
-
-#define STATUS_MAXLINE 64
-
-#define KBYTE 1024
-#define MBYTE 1048576L
-#define GBYTE 1073741824L
-
-#ifndef DEFAULT_TIME_FORMAT
-#define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
-#endif
-
-#define STATUS_MAGIC_TYPE "application/x-httpd-status"
-
-module AP_MODULE_DECLARE_DATA status_module;
-
-static int server_limit, thread_limit;
-
-/* Implement 'ap_run_status_hook'. */
-APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ap, STATUS, int, status_hook,
- (request_rec *r, int flags),
- (r, flags),
- OK, DECLINED)
-
-#ifdef HAVE_TIMES
-/* ugh... need to know if we're running with a pthread implementation
- * such as linuxthreads that treats individual threads as distinct
- * processes; that affects how we add up CPU time in a process
- */
-static pid_t child_pid;
-#endif
-
-/*
- * command-related code. This is here to prevent use of ExtendedStatus
- * without status_module included.
- */
-static const char *set_extended_status(cmd_parms *cmd, void *dummy, int arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
- ap_extended_status = arg;
- return NULL;
-}
-
-static const command_rec status_module_cmds[] =
-{
- AP_INIT_FLAG("ExtendedStatus", set_extended_status, NULL, RSRC_CONF,
- "\"On\" to enable extended status information, \"Off\" to disable"),
- {NULL}
-};
-
-/* Format the number of bytes nicely */
-static void format_byte_out(request_rec *r, apr_off_t bytes)
-{
- if (bytes < (5 * KBYTE))
- ap_rprintf(r, "%d B", (int) bytes);
- else if (bytes < (MBYTE / 2))
- ap_rprintf(r, "%.1f kB", (float) bytes / KBYTE);
- else if (bytes < (GBYTE / 2))
- ap_rprintf(r, "%.1f MB", (float) bytes / MBYTE);
- else
- ap_rprintf(r, "%.1f GB", (float) bytes / GBYTE);
-}
-
-static void format_kbyte_out(request_rec *r, apr_off_t kbytes)
-{
- if (kbytes < KBYTE)
- ap_rprintf(r, "%d kB", (int) kbytes);
- else if (kbytes < MBYTE)
- ap_rprintf(r, "%.1f MB", (float) kbytes / KBYTE);
- else
- ap_rprintf(r, "%.1f GB", (float) kbytes / MBYTE);
-}
-
-static void show_time(request_rec *r, apr_interval_time_t tsecs)
-{
- int days, hrs, mins, secs;
-
- secs = (int)(tsecs % 60);
- tsecs /= 60;
- mins = (int)(tsecs % 60);
- tsecs /= 60;
- hrs = (int)(tsecs % 24);
- days = (int)(tsecs / 24);
-
- if (days)
- ap_rprintf(r, " %d day%s", days, days == 1 ? "" : "s");
-
- if (hrs)
- ap_rprintf(r, " %d hour%s", hrs, hrs == 1 ? "" : "s");
-
- if (mins)
- ap_rprintf(r, " %d minute%s", mins, mins == 1 ? "" : "s");
-
- if (secs)
- ap_rprintf(r, " %d second%s", secs, secs == 1 ? "" : "s");
-}
-
-/* Main handler for x-httpd-status requests */
-
-/* ID values for command table */
-
-#define STAT_OPT_END -1
-#define STAT_OPT_REFRESH 0
-#define STAT_OPT_NOTABLE 1
-#define STAT_OPT_AUTO 2
-
-struct stat_opt {
- int id;
- const char *form_data_str;
- const char *hdr_out_str;
-};
-
-static const struct stat_opt status_options[] = /* see #defines above */
-{
- {STAT_OPT_REFRESH, "refresh", "Refresh"},
- {STAT_OPT_NOTABLE, "notable", NULL},
- {STAT_OPT_AUTO, "auto", NULL},
- {STAT_OPT_END, NULL, NULL}
-};
-
-static char status_flags[SERVER_NUM_STATUS];
-
-static int status_handler(request_rec *r)
-{
- const char *loc;
- apr_time_t nowtime;
- apr_interval_time_t up_time;
- int j, i, res;
- int ready;
- int busy;
- unsigned long count;
- unsigned long lres, my_lres, conn_lres;
- apr_off_t bytes, my_bytes, conn_bytes;
- apr_off_t bcount, kbcount;
- long req_time;
-#ifdef HAVE_TIMES
- float tick;
- int times_per_thread = getpid() != child_pid;
-#endif
- int short_report;
- int no_table_report;
- worker_score *ws_record;
- process_score *ps_record;
- char *stat_buffer;
- pid_t *pid_buffer;
- clock_t tu, ts, tcu, tcs;
-
- if (strcmp(r->handler, STATUS_MAGIC_TYPE) &&
- strcmp(r->handler, "server-status")) {
- return DECLINED;
- }
-
-#ifdef HAVE_TIMES
-#ifdef _SC_CLK_TCK
- tick = sysconf(_SC_CLK_TCK);
-#else
- tick = HZ;
-#endif
-#endif
-
- ready = 0;
- busy = 0;
- count = 0;
- bcount = 0;
- kbcount = 0;
- short_report = 0;
- no_table_report = 0;
-
- pid_buffer = apr_palloc(r->pool, server_limit * sizeof(pid_t));
- stat_buffer = apr_palloc(r->pool, server_limit * thread_limit * sizeof(char));
-
- nowtime = apr_time_now();
- tu = ts = tcu = tcs = 0;
-
- if (!ap_exists_scoreboard_image()) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Server status unavailable in inetd mode");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- r->allowed = (AP_METHOD_BIT << M_GET);
- if (r->method_number != M_GET)
- return DECLINED;
-
- ap_set_content_type(r, "text/html");
-
- /*
- * Simple table-driven form data set parser that lets you alter the header
- */
-
- if (r->args) {
- i = 0;
- while (status_options[i].id != STAT_OPT_END) {
- if ((loc = ap_strstr_c(r->args,
- status_options[i].form_data_str)) != NULL) {
- switch (status_options[i].id) {
- case STAT_OPT_REFRESH:
- if (*(loc + strlen(status_options[i].form_data_str)) == '='
- && atol(loc + strlen(status_options[i].form_data_str)
- + 1) > 0)
- apr_table_set(r->headers_out,
- status_options[i].hdr_out_str,
- loc +
- strlen(status_options[i].hdr_out_str) +
- 1);
- else
- apr_table_set(r->headers_out,
- status_options[i].hdr_out_str, "1");
- break;
- case STAT_OPT_NOTABLE:
- no_table_report = 1;
- break;
- case STAT_OPT_AUTO:
- ap_set_content_type(r, "text/plain");
- short_report = 1;
- break;
- }
- }
-
- i++;
- }
- }
-
- for (i = 0; i < server_limit; ++i) {
-#ifdef HAVE_TIMES
- clock_t proc_tu = 0, proc_ts = 0, proc_tcu = 0, proc_tcs = 0;
- clock_t tmp_tu, tmp_ts, tmp_tcu, tmp_tcs;
-#endif
-
- ps_record = ap_get_scoreboard_process(i);
- for (j = 0; j < thread_limit; ++j) {
- int indx = (i * thread_limit) + j;
-
- ws_record = ap_get_scoreboard_worker(i, j);
- res = ws_record->status;
- stat_buffer[indx] = status_flags[res];
-
- if (!ps_record->quiescing
- && ps_record->pid) {
- if (res == SERVER_READY
- && ps_record->generation == ap_my_generation)
- ready++;
- else if (res != SERVER_DEAD &&
- res != SERVER_STARTING &&
- res != SERVER_IDLE_KILL)
- busy++;
- }
-
- /* XXX what about the counters for quiescing/seg faulted
- * processes? should they be counted or not? GLA
- */
- if (ap_extended_status) {
- lres = ws_record->access_count;
- bytes = ws_record->bytes_served;
-
- if (lres != 0 || (res != SERVER_READY && res != SERVER_DEAD)) {
-#ifdef HAVE_TIMES
- tmp_tu = ws_record->times.tms_utime;
- tmp_ts = ws_record->times.tms_stime;
- tmp_tcu = ws_record->times.tms_cutime;
- tmp_tcs = ws_record->times.tms_cstime;
-
- if (times_per_thread) {
- proc_tu += tmp_tu;
- proc_ts += tmp_ts;
- proc_tcu += tmp_tcu;
- proc_tcs += proc_tcs;
- }
- else {
- if (tmp_tu > proc_tu ||
- tmp_ts > proc_ts ||
- tmp_tcu > proc_tcu ||
- tmp_tcs > proc_tcs) {
- proc_tu = tmp_tu;
- proc_ts = tmp_ts;
- proc_tcu = tmp_tcu;
- proc_tcs = proc_tcs;
- }
- }
-#endif /* HAVE_TIMES */
-
- count += lres;
- bcount += bytes;
-
- if (bcount >= KBYTE) {
- kbcount += (bcount >> 10);
- bcount = bcount & 0x3ff;
- }
- }
- }
- }
-#ifdef HAVE_TIMES
- tu += proc_tu;
- ts += proc_ts;
- tcu += proc_tcu;
- tcs += proc_tcs;
-#endif
- pid_buffer[i] = ps_record->pid;
- }
-
- /* up_time in seconds */
- up_time = (apr_uint32_t) apr_time_sec(nowtime -
- ap_scoreboard_image->global->restart_time);
-
- if (!short_report) {
- ap_rputs(DOCTYPE_HTML_3_2
- "<html><head>\n<title>Apache Status</title>\n</head><body>\n",
- r);
- ap_rputs("<h1>Apache Server Status for ", r);
- ap_rvputs(r, ap_get_server_name(r), "</h1>\n\n", NULL);
- ap_rvputs(r, "<dl><dt>Server Version: ",
- ap_get_server_version(), "</dt>\n", NULL);
- ap_rvputs(r, "<dt>Server Built: ",
- ap_get_server_built(), "\n</dt></dl><hr /><dl>\n", NULL);
- ap_rvputs(r, "<dt>Current Time: ",
- ap_ht_time(r->pool, nowtime, DEFAULT_TIME_FORMAT, 0),
- "</dt>\n", NULL);
- ap_rvputs(r, "<dt>Restart Time: ",
- ap_ht_time(r->pool,
- ap_scoreboard_image->global->restart_time,
- DEFAULT_TIME_FORMAT, 0),
- "</dt>\n", NULL);
- ap_rprintf(r, "<dt>Parent Server Generation: %d</dt>\n",
- (int)ap_my_generation);
- ap_rputs("<dt>Server uptime: ", r);
- show_time(r, up_time);
- ap_rputs("</dt>\n", r);
- }
-
- if (ap_extended_status) {
- if (short_report) {
- ap_rprintf(r, "Total Accesses: %lu\nTotal kBytes: %"
- APR_OFF_T_FMT "\n",
- count, kbcount);
-
-#ifdef HAVE_TIMES
- /* Allow for OS/2 not having CPU stats */
- if (ts || tu || tcu || tcs)
- ap_rprintf(r, "CPULoad: %g\n",
- (tu + ts + tcu + tcs) / tick / up_time * 100.);
-#endif
-
- ap_rprintf(r, "Uptime: %ld\n", (long) (up_time));
- if (up_time > 0)
- ap_rprintf(r, "ReqPerSec: %g\n",
- (float) count / (float) up_time);
-
- if (up_time > 0)
- ap_rprintf(r, "BytesPerSec: %g\n",
- KBYTE * (float) kbcount / (float) up_time);
-
- if (count > 0)
- ap_rprintf(r, "BytesPerReq: %g\n",
- KBYTE * (float) kbcount / (float) count);
- }
- else { /* !short_report */
- ap_rprintf(r, "<dt>Total accesses: %lu - Total Traffic: ", count);
- format_kbyte_out(r, kbcount);
- ap_rputs("</dt>\n", r);
-
-#ifdef HAVE_TIMES
- /* Allow for OS/2 not having CPU stats */
- ap_rprintf(r, "<dt>CPU Usage: u%g s%g cu%g cs%g",
- tu / tick, ts / tick, tcu / tick, tcs / tick);
-
- if (ts || tu || tcu || tcs)
- ap_rprintf(r, " - %.3g%% CPU load</dt>\n",
- (tu + ts + tcu + tcs) / tick / up_time * 100.);
-#endif
-
- if (up_time > 0)
- ap_rprintf(r, "<dt>%.3g requests/sec - ",
- (float) count / (float) up_time);
-
- if (up_time > 0) {
- format_byte_out(r, (unsigned long)(KBYTE * (float) kbcount
- / (float) up_time));
- ap_rputs("/second - ", r);
- }
-
- if (count > 0) {
- format_byte_out(r, (unsigned long)(KBYTE * (float) kbcount
- / (float) count));
- ap_rputs("/request", r);
- }
-
- ap_rputs("</dt>\n", r);
- } /* short_report */
- } /* ap_extended_status */
-
- if (!short_report)
- ap_rprintf(r, "<dt>%d requests currently being processed, "
- "%d idle workers</dt>\n", busy, ready);
- else
- ap_rprintf(r, "BusyWorkers: %d\nIdleWorkers: %d\n", busy, ready);
-
- /* send the scoreboard 'table' out */
- if (!short_report)
- ap_rputs("</dl><pre>", r);
- else
- ap_rputs("Scoreboard: ", r);
-
- for (i = 0; i < server_limit; ++i) {
- for (j = 0; j < thread_limit; ++j) {
- int indx = (i * thread_limit) + j;
- ap_rputc(stat_buffer[indx], r);
- if ((indx % STATUS_MAXLINE == (STATUS_MAXLINE - 1))
- && !short_report)
- ap_rputs("\n", r);
- }
- }
-
- if (short_report)
- ap_rputs("\n", r);
- else {
- ap_rputs("</pre>\n", r);
- ap_rputs("<p>Scoreboard Key:<br />\n", r);
- ap_rputs("\"<b><code>_</code></b>\" Waiting for Connection, \n", r);
- ap_rputs("\"<b><code>S</code></b>\" Starting up, \n", r);
- ap_rputs("\"<b><code>R</code></b>\" Reading Request,<br />\n", r);
- ap_rputs("\"<b><code>W</code></b>\" Sending Reply, \n", r);
- ap_rputs("\"<b><code>K</code></b>\" Keepalive (read), \n", r);
- ap_rputs("\"<b><code>D</code></b>\" DNS Lookup,<br />\n", r);
- ap_rputs("\"<b><code>C</code></b>\" Closing connection, \n", r);
- ap_rputs("\"<b><code>L</code></b>\" Logging, \n", r);
- ap_rputs("\"<b><code>G</code></b>\" Gracefully finishing,<br /> \n", r);
- ap_rputs("\"<b><code>I</code></b>\" Idle cleanup of worker, \n", r);
- ap_rputs("\"<b><code>.</code></b>\" Open slot with no current process</p>\n", r);
- ap_rputs("<p />\n", r);
- if (!ap_extended_status) {
- int j;
- int k = 0;
- ap_rputs("PID Key: <br />\n", r);
- ap_rputs("<pre>\n", r);
- for (i = 0; i < server_limit; ++i) {
- for (j = 0; j < thread_limit; ++j) {
- int indx = (i * thread_limit) + j;
-
- if (stat_buffer[indx] != '.') {
- ap_rprintf(r, " %" APR_PID_T_FMT
- " in state: %c ", pid_buffer[i],
- stat_buffer[indx]);
-
- if (++k >= 3) {
- ap_rputs("\n", r);
- k = 0;
- } else
- ap_rputs(",", r);
- }
- }
- }
-
- ap_rputs("\n", r);
- ap_rputs("</pre>\n", r);
- }
- }
-
- if (ap_extended_status && !short_report) {
- if (no_table_report)
- ap_rputs("<hr /><h2>Server Details</h2>\n\n", r);
- else
- ap_rputs("\n\n<table border=\"0\"><tr>"
- "<th>Srv</th><th>PID</th><th>Acc</th>"
- "<th>M</th>"
-#ifdef HAVE_TIMES
- "<th>CPU\n</th>"
-#endif
- "<th>SS</th><th>Req</th>"
- "<th>Conn</th><th>Child</th><th>Slot</th>"
- "<th>Client</th><th>VHost</th>"
- "<th>Request</th></tr>\n\n", r);
-
- for (i = 0; i < server_limit; ++i) {
- for (j = 0; j < thread_limit; ++j) {
- ws_record = ap_get_scoreboard_worker(i, j);
-
- if (ws_record->access_count == 0 &&
- (ws_record->status == SERVER_READY ||
- ws_record->status == SERVER_DEAD)) {
- continue;
- }
-
- ps_record = ap_get_scoreboard_process(i);
-
- if (ws_record->start_time == 0L)
- req_time = 0L;
- else
- req_time = (long)
- ((ws_record->stop_time -
- ws_record->start_time) / 1000);
- if (req_time < 0L)
- req_time = 0L;
-
- lres = ws_record->access_count;
- my_lres = ws_record->my_access_count;
- conn_lres = ws_record->conn_count;
- bytes = ws_record->bytes_served;
- my_bytes = ws_record->my_bytes_served;
- conn_bytes = ws_record->conn_bytes;
-
- if (no_table_report) {
- if (ws_record->status == SERVER_DEAD)
- ap_rprintf(r,
- "<b>Server %d-%d</b> (-): %d|%lu|%lu [",
- i, (int)ps_record->generation,
- (int)conn_lres, my_lres, lres);
- else
- ap_rprintf(r,
- "<b>Server %d-%d</b> (%"
- APR_PID_T_FMT "): %d|%lu|%lu [",
- i, (int) ps_record->generation,
- ps_record->pid,
- (int)conn_lres, my_lres, lres);
-
- switch (ws_record->status) {
- case SERVER_READY:
- ap_rputs("Ready", r);
- break;
- case SERVER_STARTING:
- ap_rputs("Starting", r);
- break;
- case SERVER_BUSY_READ:
- ap_rputs("<b>Read</b>", r);
- break;
- case SERVER_BUSY_WRITE:
- ap_rputs("<b>Write</b>", r);
- break;
- case SERVER_BUSY_KEEPALIVE:
- ap_rputs("<b>Keepalive</b>", r);
- break;
- case SERVER_BUSY_LOG:
- ap_rputs("<b>Logging</b>", r);
- break;
- case SERVER_BUSY_DNS:
- ap_rputs("<b>DNS lookup</b>", r);
- break;
- case SERVER_CLOSING:
- ap_rputs("<b>Closing</b>", r);
- break;
- case SERVER_DEAD:
- ap_rputs("Dead", r);
- break;
- case SERVER_GRACEFUL:
- ap_rputs("Graceful", r);
- break;
- case SERVER_IDLE_KILL:
- ap_rputs("Dying", r);
- break;
- default:
- ap_rputs("?STATE?", r);
- break;
- }
-
- ap_rprintf(r, "] "
-#ifdef HAVE_TIMES
- "u%g s%g cu%g cs%g"
-#endif
- "\n %ld %ld (",
-#ifdef HAVE_TIMES
- ws_record->times.tms_utime / tick,
- ws_record->times.tms_stime / tick,
- ws_record->times.tms_cutime / tick,
- ws_record->times.tms_cstime / tick,
-#endif
- (long)apr_time_sec(nowtime -
- ws_record->last_used),
- (long) req_time);
-
- format_byte_out(r, conn_bytes);
- ap_rputs("|", r);
- format_byte_out(r, my_bytes);
- ap_rputs("|", r);
- format_byte_out(r, bytes);
- ap_rputs(")\n", r);
- ap_rprintf(r,
- " <i>%s {%s}</i> <b>[%s]</b><br />\n\n",
- ap_escape_html(r->pool,
- ws_record->client),
- ap_escape_html(r->pool,
- ws_record->request),
- ap_escape_html(r->pool,
- ws_record->vhost));
- }
- else { /* !no_table_report */
- if (ws_record->status == SERVER_DEAD)
- ap_rprintf(r,
- "<tr><td><b>%d-%d</b></td><td>-</td><td>%d/%lu/%lu",
- i, (int)ps_record->generation,
- (int)conn_lres, my_lres, lres);
- else
- ap_rprintf(r,
- "<tr><td><b>%d-%d</b></td><td>%"
- APR_PID_T_FMT
- "</td><td>%d/%lu/%lu",
- i, (int)ps_record->generation,
- ps_record->pid, (int)conn_lres,
- my_lres, lres);
-
- switch (ws_record->status) {
- case SERVER_READY:
- ap_rputs("</td><td>_", r);
- break;
- case SERVER_STARTING:
- ap_rputs("</td><td><b>S</b>", r);
- break;
- case SERVER_BUSY_READ:
- ap_rputs("</td><td><b>R</b>", r);
- break;
- case SERVER_BUSY_WRITE:
- ap_rputs("</td><td><b>W</b>", r);
- break;
- case SERVER_BUSY_KEEPALIVE:
- ap_rputs("</td><td><b>K</b>", r);
- break;
- case SERVER_BUSY_LOG:
- ap_rputs("</td><td><b>L</b>", r);
- break;
- case SERVER_BUSY_DNS:
- ap_rputs("</td><td><b>D</b>", r);
- break;
- case SERVER_CLOSING:
- ap_rputs("</td><td><b>C</b>", r);
- break;
- case SERVER_DEAD:
- ap_rputs("</td><td>.", r);
- break;
- case SERVER_GRACEFUL:
- ap_rputs("</td><td>G", r);
- break;
- case SERVER_IDLE_KILL:
- ap_rputs("</td><td>I", r);
- break;
- default:
- ap_rputs("</td><td>?", r);
- break;
- }
-
- ap_rprintf(r,
- "\n</td>"
-#ifdef HAVE_TIMES
- "<td>%.2f</td>"
-#endif
- "<td>%ld</td><td>%ld",
-#ifdef HAVE_TIMES
- (ws_record->times.tms_utime +
- ws_record->times.tms_stime +
- ws_record->times.tms_cutime +
- ws_record->times.tms_cstime) / tick,
-#endif
- (long)apr_time_sec(nowtime -
- ws_record->last_used),
- (long)req_time);
-
- ap_rprintf(r, "</td><td>%-1.1f</td><td>%-2.2f</td><td>%-2.2f\n",
- (float)conn_bytes / KBYTE, (float) my_bytes / MBYTE,
- (float)bytes / MBYTE);
-
- if (ws_record->status == SERVER_BUSY_READ)
- ap_rprintf(r,
- "</td><td>?</td><td nowrap>?</td><td nowrap>..reading.. </td></tr>\n\n");
- else
- ap_rprintf(r,
- "</td><td>%s</td><td nowrap>%s</td><td nowrap>%s</td></tr>\n\n",
- ap_escape_html(r->pool,
- ws_record->client),
- ap_escape_html(r->pool,
- ws_record->vhost),
- ap_escape_html(r->pool,
- ws_record->request));
- } /* no_table_report */
- } /* for (j...) */
- } /* for (i...) */
-
- if (!no_table_report) {
- ap_rputs("</table>\n \
-<hr /> \
-<table>\n \
-<tr><th>Srv</th><td>Child Server number - generation</td></tr>\n \
-<tr><th>PID</th><td>OS process ID</td></tr>\n \
-<tr><th>Acc</th><td>Number of accesses this connection / this child / this slot</td></tr>\n \
-<tr><th>M</th><td>Mode of operation</td></tr>\n"
-
-#ifdef HAVE_TIMES
-"<tr><th>CPU</th><td>CPU usage, number of seconds</td></tr>\n"
-#endif
-
-"<tr><th>SS</th><td>Seconds since beginning of most recent request</td></tr>\n \
-<tr><th>Req</th><td>Milliseconds required to process most recent request</td></tr>\n \
-<tr><th>Conn</th><td>Kilobytes transferred this connection</td></tr>\n \
-<tr><th>Child</th><td>Megabytes transferred this child</td></tr>\n \
-<tr><th>Slot</th><td>Total megabytes transferred this slot</td></tr>\n \
-</table>\n", r);
- }
- } /* if (ap_extended_status && !short_report) */
- else {
-
- if (!short_report) {
- ap_rputs("<hr />To obtain a full report with current status "
- "information you need to use the "
- "<code>ExtendedStatus On</code> directive.\n", r);
- }
- }
-
- {
- /* Run extension hooks to insert extra content. */
- int flags =
- (short_report ? AP_STATUS_SHORT : 0) |
- (no_table_report ? AP_STATUS_NOTABLE : 0) |
- (ap_extended_status ? AP_STATUS_EXTENDED : 0);
-
- ap_run_status_hook(r, flags);
- }
-
- if (!short_report) {
- ap_rputs(ap_psignature("<hr />\n",r), r);
- ap_rputs("</body></html>\n", r);
- }
-
- return 0;
-}
-
-
-static int status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
- server_rec *s)
-{
- status_flags[SERVER_DEAD] = '.'; /* We don't want to assume these are in */
- status_flags[SERVER_READY] = '_'; /* any particular order in scoreboard.h */
- status_flags[SERVER_STARTING] = 'S';
- status_flags[SERVER_BUSY_READ] = 'R';
- status_flags[SERVER_BUSY_WRITE] = 'W';
- status_flags[SERVER_BUSY_KEEPALIVE] = 'K';
- status_flags[SERVER_BUSY_LOG] = 'L';
- status_flags[SERVER_BUSY_DNS] = 'D';
- status_flags[SERVER_CLOSING] = 'C';
- status_flags[SERVER_GRACEFUL] = 'G';
- status_flags[SERVER_IDLE_KILL] = 'I';
- ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
- ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
- return OK;
-}
-
-#ifdef HAVE_TIMES
-static void status_child_init(apr_pool_t *p, server_rec *s)
-{
- child_pid = getpid();
-}
-#endif
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(status_handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(status_init, NULL, NULL, APR_HOOK_MIDDLE);
-#ifdef HAVE_TIMES
- ap_hook_child_init(status_child_init, NULL, NULL, APR_HOOK_MIDDLE);
-#endif
-}
-
-module AP_MODULE_DECLARE_DATA status_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- status_module_cmds, /* command table */
- register_hooks /* register_hooks */
-};
-
diff --git a/modules/generators/mod_status.dsp b/modules/generators/mod_status.dsp
deleted file mode 100644
index b9d1f2a3e5..0000000000
--- a/modules/generators/mod_status.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_status" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_status - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_status.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_status.mak" CFG="mod_status - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_status - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_status - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_status - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATUS_DECLARE_EXPORT" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "STATUS_DECLARE_EXPORT" /Fd"Release\mod_status_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_status - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATUS_DECLARE_EXPORT" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "STATUS_DECLARE_EXPORT" /Fd"Debug\mod_status_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_status - Win32 Release"
-# Name "mod_status - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_status.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_status.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_status - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_status.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_status.so "status_module for Apache" ../../include/ap_release.h > .\mod_status.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_status - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_status.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_status.so "status_module for Apache" ../../include/ap_release.h > .\mod_status.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_status.exp b/modules/generators/mod_status.exp
deleted file mode 100644
index 5438093686..0000000000
--- a/modules/generators/mod_status.exp
+++ /dev/null
@@ -1 +0,0 @@
-status_module
diff --git a/modules/generators/mod_status.h b/modules/generators/mod_status.h
deleted file mode 100644
index 97aee13558..0000000000
--- a/modules/generators/mod_status.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_STATUS_H
-#define MOD_STATUS_H
-
-#include "ap_config.h"
-#include "httpd.h"
-
-#define AP_STATUS_SHORT (0x1) /* short, non-HTML report requested */
-#define AP_STATUS_NOTABLE (0x2) /* HTML report without tables */
-#define AP_STATUS_EXTENDED (0x4) /* detailed report */
-
-#if !defined(WIN32)
-#define STATUS_DECLARE(type) type
-#define STATUS_DECLARE_NONSTD(type) type
-#define STATUS_DECLARE_DATA
-#elif defined(STATUS_DECLARE_STATIC)
-#define STATUS_DECLARE(type) type __stdcall
-#define STATUS_DECLARE_NONSTD(type) type
-#define STATUS_DECLARE_DATA
-#elif defined(STATUS_DECLARE_EXPORT)
-#define STATUS_DECLARE(type) __declspec(dllexport) type __stdcall
-#define STATUS_DECLARE_NONSTD(type) __declspec(dllexport) type
-#define STATUS_DECLARE_DATA __declspec(dllexport)
-#else
-#define STATUS_DECLARE(type) __declspec(dllimport) type __stdcall
-#define STATUS_DECLARE_NONSTD(type) __declspec(dllimport) type
-#define STATUS_DECLARE_DATA __declspec(dllimport)
-#endif
-
-/* Optional hooks which can insert extra content into the mod_status
- * output. FLAGS will be set to the bitwise OR of any of the
- * AP_STATUS_* flags.
- *
- * Implementations of this hook should generate content using
- * functions in the ap_rputs/ap_rprintf family; each hook should
- * return OK or DECLINED. */
-APR_DECLARE_EXTERNAL_HOOK(ap, STATUS, int, status_hook,
- (request_rec *r, int flags))
-#endif
diff --git a/modules/generators/mod_suexec.c b/modules/generators/mod_suexec.c
deleted file mode 100644
index af66dfc1c3..0000000000
--- a/modules/generators/mod_suexec.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "apr_strings.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "mod_suexec.h"
-
-module AP_MODULE_DECLARE_DATA suexec_module;
-
-/*
- * Create a configuration specific to this module for a server or directory
- * location, and fill it with the default settings.
- */
-static void *mkconfig(apr_pool_t *p)
-{
- suexec_config_t *cfg = apr_palloc(p, sizeof(suexec_config_t));
-
- cfg->active = 0;
- return cfg;
-}
-
-/*
- * Respond to a callback to create configuration record for a server or
- * vhost environment.
- */
-static void *create_mconfig_for_server(apr_pool_t *p, server_rec *s)
-{
- return mkconfig(p);
-}
-
-/*
- * Respond to a callback to create a config record for a specific directory.
- */
-static void *create_mconfig_for_directory(apr_pool_t *p, char *dir)
-{
- return mkconfig(p);
-}
-
-static const char *set_suexec_ugid(cmd_parms *cmd, void *mconfig,
- const char *uid, const char *gid)
-{
- suexec_config_t *cfg = (suexec_config_t *) mconfig;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
- if (unixd_config.suexec_enabled) {
- cfg->ugid.uid = ap_uname2id(uid);
- cfg->ugid.gid = ap_gname2id(gid);
- cfg->ugid.userdir = 0;
- cfg->active = 1;
- }
- else {
- fprintf(stderr,
- "Warning: SuexecUserGroup directive requires SUEXEC wrapper.\n");
- }
- return NULL;
-}
-
-static ap_unix_identity_t *get_suexec_id_doer(const request_rec *r)
-{
- suexec_config_t *cfg =
- (suexec_config_t *) ap_get_module_config(r->per_dir_config, &suexec_module);
-
- return cfg->active ? &cfg->ugid : NULL;
-}
-
-#define SUEXEC_POST_CONFIG_USERDATA "suexec_post_config_userdata"
-static int suexec_post_config(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- void *reported;
-
- apr_pool_userdata_get(&reported, SUEXEC_POST_CONFIG_USERDATA,
- s->process->pool);
-
- if ((reported == NULL) && unixd_config.suexec_enabled) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
- "suEXEC mechanism enabled (wrapper: %s)", SUEXEC_BIN);
-
- apr_pool_userdata_set((void *)1, SUEXEC_POST_CONFIG_USERDATA,
- apr_pool_cleanup_null, s->process->pool);
- }
-
- return OK;
-}
-#undef SUEXEC_POST_CONFIG_USERDATA
-
-/*
- * Define the directives specific to this module. This structure is referenced
- * later by the 'module' structure.
- */
-static const command_rec suexec_cmds[] =
-{
- /* XXX - Another important reason not to allow this in .htaccess is that
- * the ap_[ug]name2id() is not thread-safe */
- AP_INIT_TAKE2("SuexecUserGroup", set_suexec_ugid, NULL, RSRC_CONF,
- "User and group for spawned processes"),
- { NULL }
-};
-
-static void suexec_hooks(apr_pool_t *p)
-{
- ap_hook_get_suexec_identity(get_suexec_id_doer,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_post_config(suexec_post_config,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA suexec_module =
-{
- STANDARD20_MODULE_STUFF,
- create_mconfig_for_directory, /* create per-dir config */
- NULL, /* merge per-dir config */
- create_mconfig_for_server, /* server config */
- NULL, /* merge server config */
- suexec_cmds, /* command table */
- suexec_hooks /* register hooks */
-};
diff --git a/modules/generators/mod_suexec.h b/modules/generators/mod_suexec.h
deleted file mode 100644
index 248d1bbe42..0000000000
--- a/modules/generators/mod_suexec.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "unixd.h"
-
-typedef struct {
- ap_unix_identity_t ugid;
- int active;
-} suexec_config_t;
-
diff --git a/modules/http/.cvsignore b/modules/http/.cvsignore
deleted file mode 100644
index 8a31aca1e9..0000000000
--- a/modules/http/.cvsignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/http/.indent.pro b/modules/http/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/http/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/http/Makefile.in b/modules/http/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/http/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/http/config2.m4 b/modules/http/config2.m4
deleted file mode 100644
index ecb7e6e52d..0000000000
--- a/modules/http/config2.m4
+++ /dev/null
@@ -1,20 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(http)
-
-http_objects="http_core.lo http_protocol.lo http_request.lo"
-
-dnl mod_http should only be built as a static module for now.
-dnl this will hopefully be "fixed" at some point in the future by
-dnl refactoring mod_http and moving some things to the core and
-dnl vice versa so that the core does not depend upon mod_http.
-if test "$enable_http" = "yes"; then
- enable_http="static"
-elif test "$enable_http" = "shared"; then
- AC_MSG_ERROR([mod_http can not be built as a shared DSO])
-fi
-
-APACHE_MODULE(http, HTTP protocol handling, $http_objects, , static)
-APACHE_MODULE(mime, mapping of file-extension to MIME, , , yes)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/http/http_core.c b/modules/http/http_core.c
deleted file mode 100644
index bf6a6febc6..0000000000
--- a/modules/http/http_core.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "apr_thread_proc.h" /* for RLIMIT stuff */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_connection.h"
-#include "http_core.h"
-#include "http_protocol.h" /* For index_of_response(). Grump. */
-#include "http_request.h"
-
-#include "util_filter.h"
-#include "util_ebcdic.h"
-#include "ap_mpm.h"
-#include "scoreboard.h"
-
-#include "mod_core.h"
-
-/* Handles for core filters */
-AP_DECLARE_DATA ap_filter_rec_t *ap_http_input_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_http_header_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_chunk_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_byterange_filter_handle;
-
-static const char *set_keep_alive_timeout(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- cmd->server->keep_alive_timeout = apr_time_from_sec(atoi(arg));
- return NULL;
-}
-
-static const char *set_keep_alive(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- /* We've changed it to On/Off, but used to use numbers
- * so we accept anything but "Off" or "0" as "On"
- */
- if (!strcasecmp(arg, "off") || !strcmp(arg, "0")) {
- cmd->server->keep_alive = 0;
- }
- else {
- cmd->server->keep_alive = 1;
- }
- return NULL;
-}
-
-static const char *set_keep_alive_max(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- cmd->server->keep_alive_max = atoi(arg);
- return NULL;
-}
-
-static const command_rec http_cmds[] = {
- AP_INIT_TAKE1("KeepAliveTimeout", set_keep_alive_timeout, NULL, RSRC_CONF,
- "Keep-Alive timeout duration (sec)"),
- AP_INIT_TAKE1("MaxKeepAliveRequests", set_keep_alive_max, NULL, RSRC_CONF,
- "Maximum number of Keep-Alive requests per connection, or 0 for infinite"),
- AP_INIT_TAKE1("KeepAlive", set_keep_alive, NULL, RSRC_CONF,
- "Whether persistent connections should be On or Off"),
- { NULL }
-};
-
-/*
- * HTTP/1.1 chunked transfer encoding filter.
- */
-static apr_status_t chunk_filter(ap_filter_t *f, apr_bucket_brigade *b)
-{
-#define ASCII_CRLF "\015\012"
-#define ASCII_ZERO "\060"
- conn_rec *c = f->r->connection;
- apr_bucket_brigade *more;
- apr_bucket *e;
- apr_status_t rv;
-
- for (more = NULL; b; b = more, more = NULL) {
- apr_off_t bytes = 0;
- apr_bucket *eos = NULL;
- apr_bucket *flush = NULL;
- /* XXX: chunk_hdr must remain at this scope since it is used in a
- * transient bucket.
- */
- char chunk_hdr[20]; /* enough space for the snprintf below */
-
-
- for (e = APR_BRIGADE_FIRST(b);
- e != APR_BRIGADE_SENTINEL(b);
- e = APR_BUCKET_NEXT(e))
- {
- if (APR_BUCKET_IS_EOS(e)) {
- /* there shouldn't be anything after the eos */
- eos = e;
- break;
- }
- if (APR_BUCKET_IS_FLUSH(e)) {
- flush = e;
- }
- else if (e->length == (apr_size_t)-1) {
- /* unknown amount of data (e.g. a pipe) */
- const char *data;
- apr_size_t len;
-
- rv = apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- if (len > 0) {
- /*
- * There may be a new next bucket representing the
- * rest of the data stream on which a read() may
- * block so we pass down what we have so far.
- */
- bytes += len;
- more = apr_brigade_split(b, APR_BUCKET_NEXT(e));
- break;
- }
- else {
- /* If there was nothing in this bucket then we can
- * safely move on to the next one without pausing
- * to pass down what we have counted up so far.
- */
- continue;
- }
- }
- else {
- bytes += e->length;
- }
- }
-
- /*
- * XXX: if there aren't very many bytes at this point it may
- * be a good idea to set them aside and return for more,
- * unless we haven't finished counting this brigade yet.
- */
- /* if there are content bytes, then wrap them in a chunk */
- if (bytes > 0) {
- apr_size_t hdr_len;
- /*
- * Insert the chunk header, specifying the number of bytes in
- * the chunk.
- */
- hdr_len = apr_snprintf(chunk_hdr, sizeof(chunk_hdr),
- "%" APR_UINT64_T_HEX_FMT CRLF, (apr_uint64_t)bytes);
- ap_xlate_proto_to_ascii(chunk_hdr, hdr_len);
- e = apr_bucket_transient_create(chunk_hdr, hdr_len,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_HEAD(b, e);
-
- /*
- * Insert the end-of-chunk CRLF before an EOS or
- * FLUSH bucket, or appended to the brigade
- */
- e = apr_bucket_immortal_create(ASCII_CRLF, 2, c->bucket_alloc);
- if (eos != NULL) {
- APR_BUCKET_INSERT_BEFORE(eos, e);
- }
- else if (flush != NULL) {
- APR_BUCKET_INSERT_BEFORE(flush, e);
- }
- else {
- APR_BRIGADE_INSERT_TAIL(b, e);
- }
- }
-
- /* RFC 2616, Section 3.6.1
- *
- * If there is an EOS bucket, then prefix it with:
- * 1) the last-chunk marker ("0" CRLF)
- * 2) the trailer
- * 3) the end-of-chunked body CRLF
- *
- * If there is no EOS bucket, then do nothing.
- *
- * XXX: it would be nice to combine this with the end-of-chunk
- * marker above, but this is a bit more straight-forward for
- * now.
- */
- if (eos != NULL) {
- /* XXX: (2) trailers ... does not yet exist */
- e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF
- /* <trailers> */
- ASCII_CRLF, 5, c->bucket_alloc);
- APR_BUCKET_INSERT_BEFORE(eos, e);
- }
-
- /* pass the brigade to the next filter. */
- rv = ap_pass_brigade(f->next, b);
- if (rv != APR_SUCCESS || eos != NULL) {
- return rv;
- }
- }
- return APR_SUCCESS;
-}
-
-static const char *http_method(const request_rec *r)
- { return "http"; }
-
-static apr_port_t http_port(const request_rec *r)
- { return DEFAULT_HTTP_PORT; }
-
-static int ap_process_http_connection(conn_rec *c)
-{
- request_rec *r;
- int csd_set = 0;
- apr_socket_t *csd = NULL;
-
- /*
- * Read and process each request found on our connection
- * until no requests are left or we decide to close.
- */
-
- ap_update_child_status(c->sbh, SERVER_BUSY_READ, NULL);
- while ((r = ap_read_request(c)) != NULL) {
-
- c->keepalive = AP_CONN_UNKNOWN;
- /* process the request if it was read without error */
-
- ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
- if (r->status == HTTP_OK)
- ap_process_request(r);
-
- if (ap_extended_status)
- ap_increment_counts(c->sbh, r);
-
- if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted)
- break;
-
- ap_update_child_status(c->sbh, SERVER_BUSY_KEEPALIVE, r);
- apr_pool_destroy(r->pool);
-
- if (ap_graceful_stop_signalled())
- break;
- /* Go straight to select() to wait for the next request */
- if (!csd_set) {
- csd = ap_get_module_config(c->conn_config, &core_module);
- csd_set = 1;
- }
- apr_socket_opt_set(csd, APR_INCOMPLETE_READ, 1);
- }
-
- return OK;
-}
-
-static int http_create_request(request_rec *r)
-{
- if (!r->main && !r->prev) {
- ap_add_output_filter_handle(ap_byterange_filter_handle,
- NULL, r, r->connection);
- ap_add_output_filter_handle(ap_content_length_filter_handle,
- NULL, r, r->connection);
- ap_add_output_filter_handle(ap_http_header_filter_handle,
- NULL, r, r->connection);
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_process_connection(ap_process_http_connection,NULL,NULL,
- APR_HOOK_REALLY_LAST);
- ap_hook_map_to_storage(ap_send_http_trace,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_http_method(http_method,NULL,NULL,APR_HOOK_REALLY_LAST);
- ap_hook_default_port(http_port,NULL,NULL,APR_HOOK_REALLY_LAST);
- ap_hook_create_request(http_create_request, NULL, NULL, APR_HOOK_REALLY_LAST);
- ap_http_input_filter_handle =
- ap_register_input_filter("HTTP_IN", ap_http_filter,
- NULL, AP_FTYPE_PROTOCOL);
- ap_http_header_filter_handle =
- ap_register_output_filter("HTTP_HEADER", ap_http_header_filter,
- NULL, AP_FTYPE_PROTOCOL);
- ap_chunk_filter_handle =
- ap_register_output_filter("CHUNK", chunk_filter,
- NULL, AP_FTYPE_TRANSCODE);
- ap_byterange_filter_handle =
- ap_register_output_filter("BYTERANGE", ap_byterange_filter,
- NULL, AP_FTYPE_PROTOCOL);
- ap_method_registry_init(p);
-}
-
-module AP_MODULE_DECLARE_DATA http_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- http_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c
deleted file mode 100644
index 7020018bd6..0000000000
--- a/modules/http/http_protocol.c
+++ /dev/null
@@ -1,3118 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_protocol.c --- routines which directly communicate with the client.
- *
- * Code originally by Rob McCool; much redone by Robert S. Thau
- * and the Apache Software Foundation.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO /* for sscanf */
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "util_filter.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_log.h" /* For errors detected in basic auth common
- * support code... */
-#include "apr_date.h" /* For apr_date_parse_http and APR_DATE_BAD */
-#include "util_charset.h"
-#include "util_ebcdic.h"
-#include "util_time.h"
-
-#include "mod_core.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* New Apache routine to map status codes into array indicies
- * e.g. 100 -> 0, 101 -> 1, 200 -> 2 ...
- * The number of status lines must equal the value of RESPONSE_CODES (httpd.h)
- * and must be listed in order.
- */
-
-#ifdef UTS21
-/* The second const triggers an assembler bug on UTS 2.1.
- * Another workaround is to move some code out of this file into another,
- * but this is easier. Dave Dykstra, 3/31/99
- */
-static const char * status_lines[RESPONSE_CODES] =
-#else
-static const char * const status_lines[RESPONSE_CODES] =
-#endif
-{
- "100 Continue",
- "101 Switching Protocols",
- "102 Processing",
-#define LEVEL_200 3
- "200 OK",
- "201 Created",
- "202 Accepted",
- "203 Non-Authoritative Information",
- "204 No Content",
- "205 Reset Content",
- "206 Partial Content",
- "207 Multi-Status",
-#define LEVEL_300 11
- "300 Multiple Choices",
- "301 Moved Permanently",
- "302 Found",
- "303 See Other",
- "304 Not Modified",
- "305 Use Proxy",
- "306 unused",
- "307 Temporary Redirect",
-#define LEVEL_400 19
- "400 Bad Request",
- "401 Authorization Required",
- "402 Payment Required",
- "403 Forbidden",
- "404 Not Found",
- "405 Method Not Allowed",
- "406 Not Acceptable",
- "407 Proxy Authentication Required",
- "408 Request Time-out",
- "409 Conflict",
- "410 Gone",
- "411 Length Required",
- "412 Precondition Failed",
- "413 Request Entity Too Large",
- "414 Request-URI Too Large",
- "415 Unsupported Media Type",
- "416 Requested Range Not Satisfiable",
- "417 Expectation Failed",
- "418 unused",
- "419 unused",
- "420 unused",
- "421 unused",
- "422 Unprocessable Entity",
- "423 Locked",
- "424 Failed Dependency",
- /* This is a hack, but it is required for ap_index_of_response
- * to work with 426.
- */
- "425 No code",
- "426 Upgrade Required",
-#define LEVEL_500 46
- "500 Internal Server Error",
- "501 Method Not Implemented",
- "502 Bad Gateway",
- "503 Service Temporarily Unavailable",
- "504 Gateway Time-out",
- "505 HTTP Version Not Supported",
- "506 Variant Also Negotiates",
- "507 Insufficient Storage",
- "508 unused",
- "509 unused",
- "510 Not Extended"
-};
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(insert_error_filter)
-)
-
-AP_IMPLEMENT_HOOK_VOID(insert_error_filter, (request_rec *r), (r))
-
-/* The index of the first bit field that is used to index into a limit
- * bitmask. M_INVALID + 1 to METHOD_NUMBER_LAST.
- */
-#define METHOD_NUMBER_FIRST (M_INVALID + 1)
-
-/* The max method number. Method numbers are used to shift bitmasks,
- * so this cannot exceed 63, and all bits high is equal to -1, which is a
- * special flag, so the last bit used has index 62.
- */
-#define METHOD_NUMBER_LAST 62
-
-
-AP_DECLARE(int) ap_set_keepalive(request_rec *r)
-{
- int ka_sent = 0;
- int wimpy = ap_find_token(r->pool,
- apr_table_get(r->headers_out, "Connection"),
- "close");
- const char *conn = apr_table_get(r->headers_in, "Connection");
-
- /* The following convoluted conditional determines whether or not
- * the current connection should remain persistent after this response
- * (a.k.a. HTTP Keep-Alive) and whether or not the output message
- * body should use the HTTP/1.1 chunked transfer-coding. In English,
- *
- * IF we have not marked this connection as errored;
- * and the response body has a defined length due to the status code
- * being 304 or 204, the request method being HEAD, already
- * having defined Content-Length or Transfer-Encoding: chunked, or
- * the request version being HTTP/1.1 and thus capable of being set
- * as chunked [we know the (r->chunked = 1) side-effect is ugly];
- * and the server configuration enables keep-alive;
- * and the server configuration has a reasonable inter-request timeout;
- * and there is no maximum # requests or the max hasn't been reached;
- * and the response status does not require a close;
- * and the response generator has not already indicated close;
- * and the client did not request non-persistence (Connection: close);
- * and we haven't been configured to ignore the buggy twit
- * or they're a buggy twit coming through a HTTP/1.1 proxy
- * and the client is requesting an HTTP/1.0-style keep-alive
- * or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
- * THEN we can be persistent, which requires more headers be output.
- *
- * Note that the condition evaluation order is extremely important.
- */
- if ((r->connection->keepalive != AP_CONN_CLOSE)
- && ((r->status == HTTP_NOT_MODIFIED)
- || (r->status == HTTP_NO_CONTENT)
- || r->header_only
- || apr_table_get(r->headers_out, "Content-Length")
- || ap_find_last_token(r->pool,
- apr_table_get(r->headers_out,
- "Transfer-Encoding"),
- "chunked")
- || ((r->proto_num >= HTTP_VERSION(1,1))
- && (r->chunked = 1))) /* THIS CODE IS CORRECT, see above. */
- && r->server->keep_alive
- && (r->server->keep_alive_timeout > 0)
- && ((r->server->keep_alive_max == 0)
- || (r->server->keep_alive_max > r->connection->keepalives))
- && !ap_status_drops_connection(r->status)
- && !wimpy
- && !ap_find_token(r->pool, conn, "close")
- && (!apr_table_get(r->subprocess_env, "nokeepalive")
- || apr_table_get(r->headers_in, "Via"))
- && ((ka_sent = ap_find_token(r->pool, conn, "keep-alive"))
- || (r->proto_num >= HTTP_VERSION(1,1)))) {
- int left = r->server->keep_alive_max - r->connection->keepalives;
-
- r->connection->keepalive = AP_CONN_KEEPALIVE;
- r->connection->keepalives++;
-
- /* If they sent a Keep-Alive token, send one back */
- if (ka_sent) {
- if (r->server->keep_alive_max) {
- apr_table_setn(r->headers_out, "Keep-Alive",
- apr_psprintf(r->pool, "timeout=%d, max=%d",
- (int)apr_time_sec(r->server->keep_alive_timeout),
- left));
- }
- else {
- apr_table_setn(r->headers_out, "Keep-Alive",
- apr_psprintf(r->pool, "timeout=%d",
- (int)apr_time_sec(r->server->keep_alive_timeout)));
- }
- apr_table_mergen(r->headers_out, "Connection", "Keep-Alive");
- }
-
- return 1;
- }
-
- /* Otherwise, we need to indicate that we will be closing this
- * connection immediately after the current response.
- *
- * We only really need to send "close" to HTTP/1.1 clients, but we
- * always send it anyway, because a broken proxy may identify itself
- * as HTTP/1.0, but pass our request along with our HTTP/1.1 tag
- * to a HTTP/1.1 client. Better safe than sorry.
- */
- if (!wimpy) {
- apr_table_mergen(r->headers_out, "Connection", "close");
- }
-
- r->connection->keepalive = AP_CONN_CLOSE;
-
- return 0;
-}
-
-AP_DECLARE(int) ap_meets_conditions(request_rec *r)
-{
- const char *etag;
- const char *if_match, *if_modified_since, *if_unmodified, *if_nonematch;
- apr_time_t tmp_time;
- apr_int64_t mtime;
-
- /* Check for conditional requests --- note that we only want to do
- * this if we are successful so far and we are not processing a
- * subrequest or an ErrorDocument.
- *
- * The order of the checks is important, since ETag checks are supposed
- * to be more accurate than checks relative to the modification time.
- * However, not all documents are guaranteed to *have* ETags, and some
- * might have Last-Modified values w/o ETags, so this gets a little
- * complicated.
- */
-
- if (!ap_is_HTTP_SUCCESS(r->status) || r->no_local_copy) {
- return OK;
- }
-
- etag = apr_table_get(r->headers_out, "ETag");
-
- /* All of our comparisons must be in seconds, because that's the
- * highest time resolution the HTTP specification allows.
- */
- /* XXX: we should define a "time unset" constant */
- tmp_time = ((r->mtime != 0) ? r->mtime : apr_time_now());
- mtime = apr_time_sec(tmp_time);
-
- /* If an If-Match request-header field was given
- * AND the field value is not "*" (meaning match anything)
- * AND if our strong ETag does not match any entity tag in that field,
- * respond with a status of 412 (Precondition Failed).
- */
- if ((if_match = apr_table_get(r->headers_in, "If-Match")) != NULL) {
- if (if_match[0] != '*'
- && (etag == NULL || etag[0] == 'W'
- || !ap_find_list_item(r->pool, if_match, etag))) {
- return HTTP_PRECONDITION_FAILED;
- }
- }
- else {
- /* Else if a valid If-Unmodified-Since request-header field was given
- * AND the requested resource has been modified since the time
- * specified in this field, then the server MUST
- * respond with a status of 412 (Precondition Failed).
- */
- if_unmodified = apr_table_get(r->headers_in, "If-Unmodified-Since");
- if (if_unmodified != NULL) {
- apr_time_t ius = apr_date_parse_http(if_unmodified);
-
- if ((ius != APR_DATE_BAD) && (mtime > apr_time_sec(ius))) {
- return HTTP_PRECONDITION_FAILED;
- }
- }
- }
-
- /* If an If-None-Match request-header field was given
- * AND the field value is "*" (meaning match anything)
- * OR our ETag matches any of the entity tags in that field, fail.
- *
- * If the request method was GET or HEAD, failure means the server
- * SHOULD respond with a 304 (Not Modified) response.
- * For all other request methods, failure means the server MUST
- * respond with a status of 412 (Precondition Failed).
- *
- * GET or HEAD allow weak etag comparison, all other methods require
- * strong comparison. We can only use weak if it's not a range request.
- */
- if_nonematch = apr_table_get(r->headers_in, "If-None-Match");
- if (if_nonematch != NULL) {
- if (r->method_number == M_GET) {
- if (if_nonematch[0] == '*') {
- return HTTP_NOT_MODIFIED;
- }
- if (etag != NULL) {
- if (apr_table_get(r->headers_in, "Range")) {
- if (etag[0] != 'W'
- && ap_find_list_item(r->pool, if_nonematch, etag)) {
- return HTTP_NOT_MODIFIED;
- }
- }
- else if (ap_strstr_c(if_nonematch, etag)) {
- return HTTP_NOT_MODIFIED;
- }
- }
- }
- else if (if_nonematch[0] == '*'
- || (etag != NULL
- && ap_find_list_item(r->pool, if_nonematch, etag))) {
- return HTTP_PRECONDITION_FAILED;
- }
- }
- /* Else if a valid If-Modified-Since request-header field was given
- * AND it is a GET or HEAD request
- * AND the requested resource has not been modified since the time
- * specified in this field, then the server MUST
- * respond with a status of 304 (Not Modified).
- * A date later than the server's current request time is invalid.
- */
- else if ((r->method_number == M_GET)
- && ((if_modified_since =
- apr_table_get(r->headers_in,
- "If-Modified-Since")) != NULL)) {
- apr_time_t ims_time;
- apr_int64_t ims, reqtime;
-
- ims_time = apr_date_parse_http(if_modified_since);
- ims = apr_time_sec(ims_time);
- reqtime = apr_time_sec(r->request_time);
-
- if ((ims >= mtime) && (ims <= reqtime)) {
- return HTTP_NOT_MODIFIED;
- }
- }
- return OK;
-}
-
-/**
- * Singleton registry of additional methods. This maps new method names
- * such as "MYGET" to methnums, which are int offsets into bitmasks.
- *
- * This follows the same technique as standard M_GET, M_POST, etc. These
- * are dynamically assigned when modules are loaded and <Limit GET MYGET>
- * directives are processed.
- */
-static apr_hash_t *methods_registry = NULL;
-static int cur_method_number = METHOD_NUMBER_FIRST;
-
-/* internal function to register one method/number pair */
-static void register_one_method(apr_pool_t *p, const char *methname,
- int methnum)
-{
- int *pnum = apr_palloc(p, sizeof(*pnum));
-
- *pnum = methnum;
- apr_hash_set(methods_registry, methname, APR_HASH_KEY_STRING, pnum);
-}
-
-/* This internal function is used to clear the method registry
- * and reset the cur_method_number counter.
- */
-static apr_status_t ap_method_registry_destroy(void *notused)
-{
- methods_registry = NULL;
- cur_method_number = METHOD_NUMBER_FIRST;
- return APR_SUCCESS;
-}
-
-AP_DECLARE(void) ap_method_registry_init(apr_pool_t *p)
-{
- methods_registry = apr_hash_make(p);
- apr_pool_cleanup_register(p, NULL,
- ap_method_registry_destroy,
- apr_pool_cleanup_null);
-
- /* put all the standard methods into the registry hash to ease the
- mapping operations between name and number */
- register_one_method(p, "GET", M_GET);
- register_one_method(p, "PUT", M_PUT);
- register_one_method(p, "POST", M_POST);
- register_one_method(p, "DELETE", M_DELETE);
- register_one_method(p, "CONNECT", M_CONNECT);
- register_one_method(p, "OPTIONS", M_OPTIONS);
- register_one_method(p, "TRACE", M_TRACE);
- register_one_method(p, "PATCH", M_PATCH);
- register_one_method(p, "PROPFIND", M_PROPFIND);
- register_one_method(p, "PROPPATCH", M_PROPPATCH);
- register_one_method(p, "MKCOL", M_MKCOL);
- register_one_method(p, "COPY", M_COPY);
- register_one_method(p, "MOVE", M_MOVE);
- register_one_method(p, "LOCK", M_LOCK);
- register_one_method(p, "UNLOCK", M_UNLOCK);
- register_one_method(p, "VERSION-CONTROL", M_VERSION_CONTROL);
- register_one_method(p, "CHECKOUT", M_CHECKOUT);
- register_one_method(p, "UNCHECKOUT", M_UNCHECKOUT);
- register_one_method(p, "CHECKIN", M_CHECKIN);
- register_one_method(p, "UPDATE", M_UPDATE);
- register_one_method(p, "LABEL", M_LABEL);
- register_one_method(p, "REPORT", M_REPORT);
- register_one_method(p, "MKWORKSPACE", M_MKWORKSPACE);
- register_one_method(p, "MKACTIVITY", M_MKACTIVITY);
- register_one_method(p, "BASELINE-CONTROL", M_BASELINE_CONTROL);
- register_one_method(p, "MERGE", M_MERGE);
-}
-
-AP_DECLARE(int) ap_method_register(apr_pool_t *p, const char *methname)
-{
- int *methnum;
-
- if (methods_registry == NULL) {
- ap_method_registry_init(p);
- }
-
- if (methname == NULL) {
- return M_INVALID;
- }
-
- /* Check if the method was previously registered. If it was
- * return the associated method number.
- */
- methnum = (int *)apr_hash_get(methods_registry, methname,
- APR_HASH_KEY_STRING);
- if (methnum != NULL)
- return *methnum;
-
- if (cur_method_number > METHOD_NUMBER_LAST) {
- /* The method registry has run out of dynamically
- * assignable method numbers. Log this and return M_INVALID.
- */
- ap_log_perror(APLOG_MARK, APLOG_ERR, 0, p,
- "Maximum new request methods %d reached while "
- "registering method %s.",
- METHOD_NUMBER_LAST, methname);
- return M_INVALID;
- }
-
- register_one_method(p, methname, cur_method_number);
- return cur_method_number++;
-}
-
-#define UNKNOWN_METHOD (-1)
-
-static int lookup_builtin_method(const char *method, apr_size_t len)
-{
- /* Note: the following code was generated by the "shilka" tool from
- the "cocom" parsing/compilation toolkit. It is an optimized lookup
- based on analysis of the input keywords. Postprocessing was done
- on the shilka output, but the basic structure and analysis is
- from there. Should new HTTP methods be added, then manual insertion
- into this code is fine, or simply re-running the shilka tool on
- the appropriate input. */
-
- /* Note: it is also quite reasonable to just use our method_registry,
- but I'm assuming (probably incorrectly) we want more speed here
- (based on the optimizations the previous code was doing). */
-
- switch (len)
- {
- case 3:
- switch (method[0])
- {
- case 'P':
- return (method[1] == 'U'
- && method[2] == 'T'
- ? M_PUT : UNKNOWN_METHOD);
- case 'G':
- return (method[1] == 'E'
- && method[2] == 'T'
- ? M_GET : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 4:
- switch (method[0])
- {
- case 'H':
- return (method[1] == 'E'
- && method[2] == 'A'
- && method[3] == 'D'
- ? M_GET : UNKNOWN_METHOD);
- case 'P':
- return (method[1] == 'O'
- && method[2] == 'S'
- && method[3] == 'T'
- ? M_POST : UNKNOWN_METHOD);
- case 'M':
- return (method[1] == 'O'
- && method[2] == 'V'
- && method[3] == 'E'
- ? M_MOVE : UNKNOWN_METHOD);
- case 'L':
- return (method[1] == 'O'
- && method[2] == 'C'
- && method[3] == 'K'
- ? M_LOCK : UNKNOWN_METHOD);
- case 'C':
- return (method[1] == 'O'
- && method[2] == 'P'
- && method[3] == 'Y'
- ? M_COPY : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 5:
- switch (method[2])
- {
- case 'T':
- return (memcmp(method, "PATCH", 5) == 0
- ? M_PATCH : UNKNOWN_METHOD);
- case 'R':
- return (memcmp(method, "MERGE", 5) == 0
- ? M_MERGE : UNKNOWN_METHOD);
- case 'C':
- return (memcmp(method, "MKCOL", 5) == 0
- ? M_MKCOL : UNKNOWN_METHOD);
- case 'B':
- return (memcmp(method, "LABEL", 5) == 0
- ? M_LABEL : UNKNOWN_METHOD);
- case 'A':
- return (memcmp(method, "TRACE", 5) == 0
- ? M_TRACE : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 6:
- switch (method[0])
- {
- case 'U':
- switch (method[5])
- {
- case 'K':
- return (memcmp(method, "UNLOCK", 6) == 0
- ? M_UNLOCK : UNKNOWN_METHOD);
- case 'E':
- return (memcmp(method, "UPDATE", 6) == 0
- ? M_UPDATE : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
- case 'R':
- return (memcmp(method, "REPORT", 6) == 0
- ? M_REPORT : UNKNOWN_METHOD);
- case 'D':
- return (memcmp(method, "DELETE", 6) == 0
- ? M_DELETE : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 7:
- switch (method[1])
- {
- case 'P':
- return (memcmp(method, "OPTIONS", 7) == 0
- ? M_OPTIONS : UNKNOWN_METHOD);
- case 'O':
- return (memcmp(method, "CONNECT", 7) == 0
- ? M_CONNECT : UNKNOWN_METHOD);
- case 'H':
- return (memcmp(method, "CHECKIN", 7) == 0
- ? M_CHECKIN : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 8:
- switch (method[0])
- {
- case 'P':
- return (memcmp(method, "PROPFIND", 8) == 0
- ? M_PROPFIND : UNKNOWN_METHOD);
- case 'C':
- return (memcmp(method, "CHECKOUT", 8) == 0
- ? M_CHECKOUT : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 9:
- return (memcmp(method, "PROPPATCH", 9) == 0
- ? M_PROPPATCH : UNKNOWN_METHOD);
-
- case 10:
- switch (method[0])
- {
- case 'U':
- return (memcmp(method, "UNCHECKOUT", 10) == 0
- ? M_UNCHECKOUT : UNKNOWN_METHOD);
- case 'M':
- return (memcmp(method, "MKACTIVITY", 10) == 0
- ? M_MKACTIVITY : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 11:
- return (memcmp(method, "MKWORKSPACE", 11) == 0
- ? M_MKWORKSPACE : UNKNOWN_METHOD);
-
- case 15:
- return (memcmp(method, "VERSION-CONTROL", 15) == 0
- ? M_VERSION_CONTROL : UNKNOWN_METHOD);
-
- case 16:
- return (memcmp(method, "BASELINE-CONTROL", 16) == 0
- ? M_BASELINE_CONTROL : UNKNOWN_METHOD);
-
- default:
- return UNKNOWN_METHOD;
- }
-
- /* NOTREACHED */
-}
-
-/* Get the method number associated with the given string, assumed to
- * contain an HTTP method. Returns M_INVALID if not recognized.
- *
- * This is the first step toward placing method names in a configurable
- * list. Hopefully it (and other routines) can eventually be moved to
- * something like a mod_http_methods.c, complete with config stuff.
- */
-AP_DECLARE(int) ap_method_number_of(const char *method)
-{
- int len = strlen(method);
- int which = lookup_builtin_method(method, len);
-
- if (which != UNKNOWN_METHOD)
- return which;
-
- /* check if the method has been dynamically registered */
- if (methods_registry != NULL) {
- int *methnum = apr_hash_get(methods_registry, method, len);
-
- if (methnum != NULL) {
- return *methnum;
- }
- }
-
- return M_INVALID;
-}
-
-/*
- * Turn a known method number into a name.
- */
-AP_DECLARE(const char *) ap_method_name_of(apr_pool_t *p, int methnum)
-{
- apr_hash_index_t *hi = apr_hash_first(p, methods_registry);
-
- /* scan through the hash table, looking for a value that matches
- the provided method number. */
- for (; hi; hi = apr_hash_next(hi)) {
- const void *key;
- void *val;
-
- apr_hash_this(hi, &key, NULL, &val);
- if (*(int *)val == methnum)
- return key;
- }
-
- /* it wasn't found in the hash */
- return NULL;
-}
-
-static long get_chunk_size(char *);
-
-typedef struct http_filter_ctx {
- apr_off_t remaining;
- apr_off_t limit;
- apr_off_t limit_used;
- enum {
- BODY_NONE,
- BODY_LENGTH,
- BODY_CHUNK
- } state;
- int eos_sent;
-} http_ctx_t;
-
-/* This is the HTTP_INPUT filter for HTTP requests and responses from
- * proxied servers (mod_proxy). It handles chunked and content-length
- * bodies. This can only be inserted/used after the headers
- * are successfully parsed.
- */
-apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
- ap_input_mode_t mode, apr_read_type_e block,
- apr_off_t readbytes)
-{
- apr_bucket *e;
- http_ctx_t *ctx = f->ctx;
- apr_status_t rv;
- apr_off_t totalread;
-
- /* just get out of the way of things we don't want. */
- if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE) {
- return ap_get_brigade(f->next, b, mode, block, readbytes);
- }
-
- if (!ctx) {
- const char *tenc, *lenp;
- f->ctx = ctx = apr_palloc(f->r->pool, sizeof(*ctx));
- ctx->state = BODY_NONE;
- ctx->remaining = 0;
- ctx->limit_used = 0;
- ctx->eos_sent = 0;
-
- /* LimitRequestBody does not apply to proxied responses.
- * Consider implementing this check in its own filter.
- * Would adding a directive to limit the size of proxied
- * responses be useful?
- */
- if (!f->r->proxyreq) {
- ctx->limit = ap_get_limit_req_body(f->r);
- }
- else {
- ctx->limit = 0;
- }
-
- tenc = apr_table_get(f->r->headers_in, "Transfer-Encoding");
- lenp = apr_table_get(f->r->headers_in, "Content-Length");
-
- if (tenc) {
- if (!strcasecmp(tenc, "chunked")) {
- ctx->state = BODY_CHUNK;
- }
- }
- else if (lenp) {
- char *endstr;
-
- ctx->state = BODY_LENGTH;
- errno = 0;
-
- /* Protects against over/underflow, non-digit chars in the
- * string (excluding leading space) (the endstr checks)
- * and a negative number. */
- if (apr_strtoff(&ctx->remaining, lenp, &endstr, 10)
- || *endstr || ctx->remaining < 0) {
- apr_bucket_brigade *bb;
-
- ctx->remaining = 0;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
- "Invalid Content-Length");
-
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
- }
-
- /* If we have a limit in effect and we know the C-L ahead of
- * time, stop it here if it is invalid.
- */
- if (ctx->limit && ctx->limit < ctx->remaining) {
- apr_bucket_brigade *bb;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
- "Requested content-length of %" APR_OFF_T_FMT
- " is larger than the configured limit"
- " of %" APR_OFF_T_FMT, ctx->remaining, ctx->limit);
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
- }
- }
-
- /* If we don't have a request entity indicated by the headers, EOS.
- * (BODY_NONE is a valid intermediate state due to trailers,
- * but it isn't a valid starting state.)
- *
- * RFC 2616 Section 4.4 note 5 states that connection-close
- * is invalid for a request entity - request bodies must be
- * denoted by C-L or T-E: chunked.
- *
- * Note that since the proxy uses this filter to handle the
- * proxied *response*, proxy responses MUST be exempt.
- */
- if (ctx->state == BODY_NONE && f->r->proxyreq != PROXYREQ_RESPONSE) {
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- ctx->eos_sent = 1;
- return APR_SUCCESS;
- }
-
- /* Since we're about to read data, send 100-Continue if needed.
- * Only valid on chunked and C-L bodies where the C-L is > 0. */
- if ((ctx->state == BODY_CHUNK ||
- (ctx->state == BODY_LENGTH && ctx->remaining > 0)) &&
- f->r->expecting_100 && f->r->proto_num >= HTTP_VERSION(1,1)) {
- char *tmp;
- apr_bucket_brigade *bb;
-
- tmp = apr_pstrcat(f->r->pool, AP_SERVER_PROTOCOL, " ",
- status_lines[0], CRLF CRLF, NULL);
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- e = apr_bucket_pool_create(tmp, strlen(tmp), f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_HEAD(bb, e);
- e = apr_bucket_flush_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
-
- ap_pass_brigade(f->c->output_filters, bb);
- }
-
- /* We can't read the chunk until after sending 100 if required. */
- if (ctx->state == BODY_CHUNK) {
- char line[30];
- apr_bucket_brigade *bb;
- apr_size_t len = 30;
- apr_off_t brigade_length;
-
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
-
- rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
-
- if (rv == APR_SUCCESS) {
- /* We have to check the length of the brigade we got back.
- * We will not accept partial lines.
- */
- rv = apr_brigade_length(bb, 1, &brigade_length);
- if (rv == APR_SUCCESS
- && brigade_length > f->r->server->limit_req_line) {
- rv = APR_ENOSPC;
- }
- if (rv == APR_SUCCESS) {
- rv = apr_brigade_flatten(bb, line, &len);
- if (rv == APR_SUCCESS) {
- ctx->remaining = get_chunk_size(line);
- }
- }
- }
- apr_brigade_cleanup(bb);
-
- /* Detect chunksize error (such as overflow) */
- if (rv != APR_SUCCESS || ctx->remaining < 0) {
- ctx->remaining = 0; /* Reset it in case we have to
- * come back here later */
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
- }
-
- if (!ctx->remaining) {
- /* Handle trailers by calling ap_get_mime_headers again! */
- ctx->state = BODY_NONE;
- ap_get_mime_headers(f->r);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- ctx->eos_sent = 1;
- return APR_SUCCESS;
- }
- }
- }
-
- if (ctx->eos_sent) {
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- return APR_SUCCESS;
- }
-
- if (!ctx->remaining) {
- switch (ctx->state) {
- case BODY_NONE:
- break;
- case BODY_LENGTH:
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- ctx->eos_sent = 1;
- return APR_SUCCESS;
- case BODY_CHUNK:
- {
- char line[30];
- apr_bucket_brigade *bb;
- apr_size_t len = 30;
-
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
-
- /* We need to read the CRLF after the chunk. */
- rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
- apr_brigade_cleanup(bb);
-
- if (rv == APR_SUCCESS) {
- /* Read the real chunk line. */
- rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
- if (rv == APR_SUCCESS) {
- rv = apr_brigade_flatten(bb, line, &len);
- if (rv == APR_SUCCESS) {
- ctx->remaining = get_chunk_size(line);
- }
- }
- apr_brigade_cleanup(bb);
- }
-
- /* Detect chunksize error (such as overflow) */
- if (rv != APR_SUCCESS || ctx->remaining < 0) {
- ctx->remaining = 0; /* Reset it in case we have to
- * come back here later */
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE,
- NULL, f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
- }
-
- if (!ctx->remaining) {
- /* Handle trailers by calling ap_get_mime_headers again! */
- ctx->state = BODY_NONE;
- ap_get_mime_headers(f->r);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- ctx->eos_sent = 1;
- return APR_SUCCESS;
- }
- }
- break;
- }
- }
-
- /* Ensure that the caller can not go over our boundary point. */
- if (ctx->state == BODY_LENGTH || ctx->state == BODY_CHUNK) {
- if (ctx->remaining < readbytes) {
- readbytes = ctx->remaining;
- }
- AP_DEBUG_ASSERT(readbytes > 0);
- }
-
- rv = ap_get_brigade(f->next, b, mode, block, readbytes);
-
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- /* How many bytes did we just read? */
- apr_brigade_length(b, 0, &totalread);
-
- /* If this happens, we have a bucket of unknown length. Die because
- * it means our assumptions have changed. */
- AP_DEBUG_ASSERT(totalread >= 0);
-
- if (ctx->state != BODY_NONE) {
- ctx->remaining -= totalread;
- }
-
- /* If we have no more bytes remaining on a C-L request,
- * save the callter a roundtrip to discover EOS.
- */
- if (ctx->state == BODY_LENGTH && ctx->remaining == 0) {
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- }
-
- /* We have a limit in effect. */
- if (ctx->limit) {
- /* FIXME: Note that we might get slightly confused on chunked inputs
- * as we'd need to compensate for the chunk lengths which may not
- * really count. This seems to be up for interpretation. */
- ctx->limit_used += totalread;
- if (ctx->limit < ctx->limit_used) {
- apr_bucket_brigade *bb;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
- "Read content-length of %" APR_OFF_T_FMT
- " is larger than the configured limit"
- " of %" APR_OFF_T_FMT, ctx->limit_used, ctx->limit);
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
- }
- }
-
- return APR_SUCCESS;
-}
-
-/* The index is found by its offset from the x00 code of each level.
- * Although this is fast, it will need to be replaced if some nutcase
- * decides to define a high-numbered code before the lower numbers.
- * If that sad event occurs, replace the code below with a linear search
- * from status_lines[shortcut[i]] to status_lines[shortcut[i+1]-1];
- */
-AP_DECLARE(int) ap_index_of_response(int status)
-{
- static int shortcut[6] = {0, LEVEL_200, LEVEL_300, LEVEL_400,
- LEVEL_500, RESPONSE_CODES};
- int i, pos;
-
- if (status < 100) { /* Below 100 is illegal for HTTP status */
- return LEVEL_500;
- }
-
- for (i = 0; i < 5; i++) {
- status -= 100;
- if (status < 100) {
- pos = (status + shortcut[i]);
- if (pos < shortcut[i + 1]) {
- return pos;
- }
- else {
- return LEVEL_500; /* status unknown (falls in gap) */
- }
- }
- }
- return LEVEL_500; /* 600 or above is also illegal */
-}
-
-AP_DECLARE(const char *) ap_get_status_line(int status)
-{
- return status_lines[ap_index_of_response(status)];
-}
-
-typedef struct header_struct {
- apr_pool_t *pool;
- apr_bucket_brigade *bb;
-} header_struct;
-
-/* Send a single HTTP header field to the client. Note that this function
- * is used in calls to table_do(), so their interfaces are co-dependent.
- * In other words, don't change this one without checking table_do in alloc.c.
- * It returns true unless there was a write error of some kind.
- */
-static int form_header_field(header_struct *h,
- const char *fieldname, const char *fieldval)
-{
-#if APR_CHARSET_EBCDIC
- char *headfield;
- apr_size_t len;
- apr_size_t name_len;
- apr_size_t val_len;
- char *next;
-
- name_len = strlen(fieldname);
- val_len = strlen(fieldval);
- len = name_len + val_len + 4; /* 4 for ": " plus CRLF */
- headfield = (char *)apr_palloc(h->pool, len + 1);
- memcpy(headfield, fieldname, name_len);
- next = headfield + name_len;
- *next++ = ':';
- *next++ = ' ';
- memcpy(next, fieldval, val_len);
- next += val_len;
- *next++ = CR;
- *next++ = LF;
- *next = 0;
- ap_xlate_proto_to_ascii(headfield, len);
- apr_brigade_write(h->bb, NULL, NULL, headfield, len);
-#else
- struct iovec vec[4];
- struct iovec *v = vec;
- v->iov_base = (void *)fieldname;
- v->iov_len = strlen(fieldname);
- v++;
- v->iov_base = ": ";
- v->iov_len = sizeof(": ") - 1;
- v++;
- v->iov_base = (void *)fieldval;
- v->iov_len = strlen(fieldval);
- v++;
- v->iov_base = CRLF;
- v->iov_len = sizeof(CRLF) - 1;
- apr_brigade_writev(h->bb, NULL, NULL, vec, 4);
-#endif /* !APR_CHARSET_EBCDIC */
- return 1;
-}
-
-/* Send a request's HTTP response headers to the client.
- */
-static apr_status_t send_all_header_fields(header_struct *h,
- const request_rec *r)
-{
- const apr_array_header_t *elts;
- const apr_table_entry_t *t_elt;
- const apr_table_entry_t *t_end;
- struct iovec *vec;
- struct iovec *vec_next;
-
- elts = apr_table_elts(r->headers_out);
- if (elts->nelts == 0) {
- return APR_SUCCESS;
- }
- t_elt = (const apr_table_entry_t *)(elts->elts);
- t_end = t_elt + elts->nelts;
- vec = (struct iovec *)apr_palloc(h->pool, 4 * elts->nelts *
- sizeof(struct iovec));
- vec_next = vec;
-
- /* For each field, generate
- * name ": " value CRLF
- */
- do {
- vec_next->iov_base = (void*)(t_elt->key);
- vec_next->iov_len = strlen(t_elt->key);
- vec_next++;
- vec_next->iov_base = ": ";
- vec_next->iov_len = sizeof(": ") - 1;
- vec_next++;
- vec_next->iov_base = (void*)(t_elt->val);
- vec_next->iov_len = strlen(t_elt->val);
- vec_next++;
- vec_next->iov_base = CRLF;
- vec_next->iov_len = sizeof(CRLF) - 1;
- vec_next++;
- t_elt++;
- } while (t_elt < t_end);
-
-#if APR_CHARSET_EBCDIC
- {
- apr_size_t len;
- char *tmp = apr_pstrcatv(r->pool, vec, vec_next - vec, &len);
- ap_xlate_proto_to_ascii(tmp, len);
- return apr_brigade_write(h->bb, NULL, NULL, tmp, len);
- }
-#else
- return apr_brigade_writev(h->bb, NULL, NULL, vec, vec_next - vec);
-#endif
-}
-
-/*
- * Determine the protocol to use for the response. Potentially downgrade
- * to HTTP/1.0 in some situations and/or turn off keepalives.
- *
- * also prepare r->status_line.
- */
-static void basic_http_header_check(request_rec *r,
- const char **protocol)
-{
- if (r->assbackwards) {
- /* no such thing as a response protocol */
- return;
- }
-
- if (!r->status_line) {
- r->status_line = status_lines[ap_index_of_response(r->status)];
- }
-
- /* Note that we must downgrade before checking for force responses. */
- if (r->proto_num > HTTP_VERSION(1,0)
- && apr_table_get(r->subprocess_env, "downgrade-1.0")) {
- r->proto_num = HTTP_VERSION(1,0);
- }
-
- /* kludge around broken browsers when indicated by force-response-1.0
- */
- if (r->proto_num == HTTP_VERSION(1,0)
- && apr_table_get(r->subprocess_env, "force-response-1.0")) {
- *protocol = "HTTP/1.0";
- r->connection->keepalive = AP_CONN_CLOSE;
- }
- else {
- *protocol = AP_SERVER_PROTOCOL;
- }
-
-}
-
-/* fill "bb" with a barebones/initial HTTP response header */
-static void basic_http_header(request_rec *r, apr_bucket_brigade *bb,
- const char *protocol)
-{
- char *date;
- const char *server;
- header_struct h;
- struct iovec vec[4];
-
- if (r->assbackwards) {
- /* there are no headers to send */
- return;
- }
-
- /* Output the HTTP/1.x Status-Line and the Date and Server fields */
-
- vec[0].iov_base = (void *)protocol;
- vec[0].iov_len = strlen(protocol);
- vec[1].iov_base = (void *)" ";
- vec[1].iov_len = sizeof(" ") - 1;
- vec[2].iov_base = (void *)(r->status_line);
- vec[2].iov_len = strlen(r->status_line);
- vec[3].iov_base = (void *)CRLF;
- vec[3].iov_len = sizeof(CRLF) - 1;
-#if APR_CHARSET_EBCDIC
- {
- char *tmp;
- apr_size_t len;
- tmp = apr_pstrcatv(r->pool, vec, 4, &len);
- ap_xlate_proto_to_ascii(tmp, len);
- apr_brigade_write(bb, NULL, NULL, tmp, len);
- }
-#else
- apr_brigade_writev(bb, NULL, NULL, vec, 4);
-#endif
-
- date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
- ap_recent_rfc822_date(date, r->request_time);
-
- h.pool = r->pool;
- h.bb = bb;
- form_header_field(&h, "Date", date);
-
- /* keep the set-by-proxy server header, otherwise
- * generate a new server header */
- if (r->proxyreq != PROXYREQ_NONE) {
- server = apr_table_get(r->headers_out, "Server");
- if (server) {
- form_header_field(&h, "Server", server);
- }
- }
- else {
- form_header_field(&h, "Server", ap_get_server_version());
- }
-
- /* unset so we don't send them again */
- apr_table_unset(r->headers_out, "Date"); /* Avoid bogosity */
- apr_table_unset(r->headers_out, "Server");
-}
-
-AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
-{
- const char *protocol;
-
- basic_http_header_check(r, &protocol);
- basic_http_header(r, bb, protocol);
-}
-
-/* Navigator versions 2.x, 3.x and 4.0 betas up to and including 4.0b2
- * have a header parsing bug. If the terminating \r\n occur starting
- * at offset 256, 257 or 258 of output then it will not properly parse
- * the headers. Curiously it doesn't exhibit this problem at 512, 513.
- * We are guessing that this is because their initial read of a new request
- * uses a 256 byte buffer, and subsequent reads use a larger buffer.
- * So the problem might exist at different offsets as well.
- *
- * This should also work on keepalive connections assuming they use the
- * same small buffer for the first read of each new request.
- *
- * At any rate, we check the bytes written so far and, if we are about to
- * tickle the bug, we instead insert a bogus padding header. Since the bug
- * manifests as a broken image in Navigator, users blame the server. :(
- * It is more expensive to check the User-Agent than it is to just add the
- * bytes, so we haven't used the BrowserMatch feature here.
- */
-static void terminate_header(apr_bucket_brigade *bb)
-{
- char tmp[] = "X-Pad: avoid browser bug" CRLF;
- char crlf[] = CRLF;
- apr_off_t len;
- apr_size_t buflen;
-
- (void) apr_brigade_length(bb, 1, &len);
-
- if (len >= 255 && len <= 257) {
- buflen = strlen(tmp);
- ap_xlate_proto_to_ascii(tmp, buflen);
- apr_brigade_write(bb, NULL, NULL, tmp, buflen);
- }
- buflen = strlen(crlf);
- ap_xlate_proto_to_ascii(crlf, buflen);
- apr_brigade_write(bb, NULL, NULL, crlf, buflen);
-}
-
-/* Build the Allow field-value from the request handler method mask.
- * Note that we always allow TRACE, since it is handled below.
- */
-static char *make_allow(request_rec *r)
-{
- char *list;
- apr_int64_t mask;
- apr_array_header_t *allow = apr_array_make(r->pool, 10, sizeof(char *));
- apr_hash_index_t *hi = apr_hash_first(r->pool, methods_registry);
-
- mask = r->allowed_methods->method_mask;
-
- for (; hi; hi = apr_hash_next(hi)) {
- const void *key;
- void *val;
-
- apr_hash_this(hi, &key, NULL, &val);
- if ((mask & (AP_METHOD_BIT << *(int *)val)) != 0) {
- *(const char **)apr_array_push(allow) = key;
-
- /* the M_GET method actually refers to two methods */
- if (*(int *)val == M_GET)
- *(const char **)apr_array_push(allow) = "HEAD";
- }
- }
-
- /* TRACE is always allowed */
- *(const char **)apr_array_push(allow) = "TRACE";
-
- list = apr_array_pstrcat(r->pool, allow, ',');
-
- /* ### this is rather annoying. we should enforce registration of
- ### these methods */
- if ((mask & (AP_METHOD_BIT << M_INVALID))
- && (r->allowed_methods->method_list != NULL)
- && (r->allowed_methods->method_list->nelts != 0)) {
- int i;
- char **xmethod = (char **) r->allowed_methods->method_list->elts;
-
- /*
- * Append all of the elements of r->allowed_methods->method_list
- */
- for (i = 0; i < r->allowed_methods->method_list->nelts; ++i) {
- list = apr_pstrcat(r->pool, list, ",", xmethod[i], NULL);
- }
- }
-
- return list;
-}
-
-AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r)
-{
- int rv;
- apr_bucket_brigade *b;
- header_struct h;
-
- if (r->method_number != M_TRACE) {
- return DECLINED;
- }
-
- /* Get the original request */
- while (r->prev) {
- r = r->prev;
- }
-
- if ((rv = ap_setup_client_block(r, REQUEST_NO_BODY))) {
- return rv;
- }
-
- ap_set_content_type(r, "message/http");
-
- /* Now we recreate the request, and echo it back */
-
- b = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- apr_brigade_putstrs(b, NULL, NULL, r->the_request, CRLF, NULL);
- h.pool = r->pool;
- h.bb = b;
- apr_table_do((int (*) (void *, const char *, const char *))
- form_header_field, (void *) &h, r->headers_in, NULL);
- apr_brigade_puts(b, NULL, NULL, CRLF);
- ap_pass_brigade(r->output_filters, b);
-
- return DONE;
-}
-
-AP_DECLARE(int) ap_send_http_options(request_rec *r)
-{
- if (r->assbackwards) {
- return DECLINED;
- }
-
- apr_table_setn(r->headers_out, "Allow", make_allow(r));
-
- /* the request finalization will send an EOS, which will flush all
- * the headers out (including the Allow header)
- */
-
- return OK;
-}
-
-/* This routine is called by apr_table_do and merges all instances of
- * the passed field values into a single array that will be further
- * processed by some later routine. Originally intended to help split
- * and recombine multiple Vary fields, though it is generic to any field
- * consisting of comma/space-separated tokens.
- */
-static int uniq_field_values(void *d, const char *key, const char *val)
-{
- apr_array_header_t *values;
- char *start;
- char *e;
- char **strpp;
- int i;
-
- values = (apr_array_header_t *)d;
-
- e = apr_pstrdup(values->pool, val);
-
- do {
- /* Find a non-empty fieldname */
-
- while (*e == ',' || apr_isspace(*e)) {
- ++e;
- }
- if (*e == '\0') {
- break;
- }
- start = e;
- while (*e != '\0' && *e != ',' && !apr_isspace(*e)) {
- ++e;
- }
- if (*e != '\0') {
- *e++ = '\0';
- }
-
- /* Now add it to values if it isn't already represented.
- * Could be replaced by a ap_array_strcasecmp() if we had one.
- */
- for (i = 0, strpp = (char **) values->elts; i < values->nelts;
- ++i, ++strpp) {
- if (*strpp && strcasecmp(*strpp, start) == 0) {
- break;
- }
- }
- if (i == values->nelts) { /* if not found */
- *(char **)apr_array_push(values) = start;
- }
- } while (*e != '\0');
-
- return 1;
-}
-
-/*
- * Since some clients choke violently on multiple Vary fields, or
- * Vary fields with duplicate tokens, combine any multiples and remove
- * any duplicates.
- */
-static void fixup_vary(request_rec *r)
-{
- apr_array_header_t *varies;
-
- varies = apr_array_make(r->pool, 5, sizeof(char *));
-
- /* Extract all Vary fields from the headers_out, separate each into
- * its comma-separated fieldname values, and then add them to varies
- * if not already present in the array.
- */
- apr_table_do((int (*)(void *, const char *, const char *))uniq_field_values,
- (void *) varies, r->headers_out, "Vary", NULL);
-
- /* If we found any, replace old Vary fields with unique-ified value */
-
- if (varies->nelts > 0) {
- apr_table_setn(r->headers_out, "Vary",
- apr_array_pstrcat(r->pool, varies, ','));
- }
-}
-
-AP_DECLARE(void) ap_set_content_type(request_rec *r, const char *ct)
-{
- if (!ct) {
- r->content_type = NULL;
- }
- else if (!r->content_type || strcmp(r->content_type, ct)) {
- r->content_type = ct;
-
- /* Insert filters requested by the AddOutputFiltersByType
- * configuration directive. Content-type filters must be
- * inserted after the content handlers have run because
- * only then, do we reliably know the content-type.
- */
- ap_add_output_filters_by_type(r);
- }
-}
-
-typedef struct header_filter_ctx {
- int headers_sent;
-} header_filter_ctx;
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
- apr_bucket_brigade *b)
-{
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- const char *clheader;
- const char *protocol;
- apr_bucket *e;
- apr_bucket_brigade *b2;
- header_struct h;
- header_filter_ctx *ctx = f->ctx;
-
- AP_DEBUG_ASSERT(!r->main);
-
- if (r->header_only) {
- if (!ctx) {
- ctx = f->ctx = apr_pcalloc(r->pool, sizeof(header_filter_ctx));
- }
- else if (ctx->headers_sent) {
- apr_brigade_destroy(b);
- return OK;
- }
- }
-
- for (e = APR_BRIGADE_FIRST(b);
- e != APR_BRIGADE_SENTINEL(b);
- e = APR_BUCKET_NEXT(e))
- {
- if (e->type == &ap_bucket_type_error) {
- ap_bucket_error *eb = e->data;
-
- ap_die(eb->status, r);
- return AP_FILTER_ERROR;
- }
- }
-
- if (r->assbackwards) {
- r->sent_bodyct = 1;
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, b);
- }
-
- /*
- * Now that we are ready to send a response, we need to combine the two
- * header field tables into a single table. If we don't do this, our
- * later attempts to set or unset a given fieldname might be bypassed.
- */
- if (!apr_is_empty_table(r->err_headers_out)) {
- r->headers_out = apr_table_overlay(r->pool, r->err_headers_out,
- r->headers_out);
- }
-
- /*
- * Remove the 'Vary' header field if the client can't handle it.
- * Since this will have nasty effects on HTTP/1.1 caches, force
- * the response into HTTP/1.0 mode.
- *
- * Note: the force-response-1.0 should come before the call to
- * basic_http_header_check()
- */
- if (apr_table_get(r->subprocess_env, "force-no-vary") != NULL) {
- apr_table_unset(r->headers_out, "Vary");
- r->proto_num = HTTP_VERSION(1,0);
- apr_table_set(r->subprocess_env, "force-response-1.0", "1");
- }
- else {
- fixup_vary(r);
- }
-
- /*
- * Now remove any ETag response header field if earlier processing
- * says so (such as a 'FileETag None' directive).
- */
- if (apr_table_get(r->notes, "no-etag") != NULL) {
- apr_table_unset(r->headers_out, "ETag");
- }
-
- /* determine the protocol and whether we should use keepalives. */
- basic_http_header_check(r, &protocol);
- ap_set_keepalive(r);
-
- if (r->chunked) {
- apr_table_mergen(r->headers_out, "Transfer-Encoding", "chunked");
- apr_table_unset(r->headers_out, "Content-Length");
- }
-
- apr_table_setn(r->headers_out, "Content-Type",
- ap_make_content_type(r, r->content_type));
-
- if (r->content_encoding) {
- apr_table_setn(r->headers_out, "Content-Encoding",
- r->content_encoding);
- }
-
- if (!apr_is_empty_array(r->content_languages)) {
- int i;
- char **languages = (char **)(r->content_languages->elts);
- for (i = 0; i < r->content_languages->nelts; ++i) {
- apr_table_mergen(r->headers_out, "Content-Language", languages[i]);
- }
- }
-
- /*
- * Control cachability for non-cachable responses if not already set by
- * some other part of the server configuration.
- */
- if (r->no_cache && !apr_table_get(r->headers_out, "Expires")) {
- char *date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
- ap_recent_rfc822_date(date, r->request_time);
- apr_table_addn(r->headers_out, "Expires", date);
- }
-
- /* This is a hack, but I can't find anyway around it. The idea is that
- * we don't want to send out 0 Content-Lengths if it is a head request.
- * This happens when modules try to outsmart the server, and return
- * if they see a HEAD request. Apache 1.3 handlers were supposed to
- * just return in that situation, and the core handled the HEAD. In
- * 2.0, if a handler returns, then the core sends an EOS bucket down
- * the filter stack, and the content-length filter computes a C-L of
- * zero and that gets put in the headers, and we end up sending a
- * zero C-L to the client. We can't just remove the C-L filter,
- * because well behaved 2.0 handlers will send their data down the stack,
- * and we will compute a real C-L for the head request. RBB
- */
- if (r->header_only
- && (clheader = apr_table_get(r->headers_out, "Content-Length"))
- && !strcmp(clheader, "0")) {
- apr_table_unset(r->headers_out, "Content-Length");
- }
-
- b2 = apr_brigade_create(r->pool, c->bucket_alloc);
- basic_http_header(r, b2, protocol);
-
- h.pool = r->pool;
- h.bb = b2;
-
- if (r->status == HTTP_NOT_MODIFIED) {
- apr_table_do((int (*)(void *, const char *, const char *)) form_header_field,
- (void *) &h, r->headers_out,
- "Connection",
- "Keep-Alive",
- "ETag",
- "Content-Location",
- "Expires",
- "Cache-Control",
- "Vary",
- "Warning",
- "WWW-Authenticate",
- "Proxy-Authenticate",
- NULL);
- }
- else {
- send_all_header_fields(&h, r);
- }
-
- terminate_header(b2);
-
- ap_pass_brigade(f->next, b2);
-
- if (r->header_only) {
- apr_brigade_destroy(b);
- ctx->headers_sent = 1;
- return OK;
- }
-
- r->sent_bodyct = 1; /* Whatever follows is real body stuff... */
-
- if (r->chunked) {
- /* We can't add this filter until we have already sent the headers.
- * If we add it before this point, then the headers will be chunked
- * as well, and that is just wrong.
- */
- ap_add_output_filter("CHUNK", NULL, r, r->connection);
- }
-
- /* Don't remove this filter until after we have added the CHUNK filter.
- * Otherwise, f->next won't be the CHUNK filter and thus the first
- * brigade won't be chunked properly.
- */
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, b);
-}
-
-/* Here we deal with getting the request message body from the client.
- * Whether or not the request contains a body is signaled by the presence
- * of a non-zero Content-Length or by a Transfer-Encoding: chunked.
- *
- * Note that this is more complicated than it was in Apache 1.1 and prior
- * versions, because chunked support means that the module does less.
- *
- * The proper procedure is this:
- *
- * 1. Call setup_client_block() near the beginning of the request
- * handler. This will set up all the necessary properties, and will
- * return either OK, or an error code. If the latter, the module should
- * return that error code. The second parameter selects the policy to
- * apply if the request message indicates a body, and how a chunked
- * transfer-coding should be interpreted. Choose one of
- *
- * REQUEST_NO_BODY Send 413 error if message has any body
- * REQUEST_CHUNKED_ERROR Send 411 error if body without Content-Length
- * REQUEST_CHUNKED_DECHUNK If chunked, remove the chunks for me.
- *
- * In order to use the last two options, the caller MUST provide a buffer
- * large enough to hold a chunk-size line, including any extensions.
- *
- * 2. When you are ready to read a body (if any), call should_client_block().
- * This will tell the module whether or not to read input. If it is 0,
- * the module should assume that there is no message body to read.
- * This step also sends a 100 Continue response to HTTP/1.1 clients,
- * so should not be called until the module is *definitely* ready to
- * read content. (otherwise, the point of the 100 response is defeated).
- * Never call this function more than once.
- *
- * 3. Finally, call get_client_block in a loop. Pass it a buffer and its size.
- * It will put data into the buffer (not necessarily a full buffer), and
- * return the length of the input block. When it is done reading, it will
- * return 0 if EOF, or -1 if there was an error.
- * If an error occurs on input, we force an end to keepalive.
- */
-
-AP_DECLARE(int) ap_setup_client_block(request_rec *r, int read_policy)
-{
- const char *tenc = apr_table_get(r->headers_in, "Transfer-Encoding");
- const char *lenp = apr_table_get(r->headers_in, "Content-Length");
-
- r->read_body = read_policy;
- r->read_chunked = 0;
- r->remaining = 0;
-
- if (tenc) {
- if (strcasecmp(tenc, "chunked")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Unknown Transfer-Encoding %s", tenc);
- return HTTP_NOT_IMPLEMENTED;
- }
- if (r->read_body == REQUEST_CHUNKED_ERROR) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "chunked Transfer-Encoding forbidden: %s", r->uri);
- return (lenp) ? HTTP_BAD_REQUEST : HTTP_LENGTH_REQUIRED;
- }
-
- r->read_chunked = 1;
- }
- else if (lenp) {
- char *endstr;
-
- if (apr_strtoff(&r->remaining, lenp, &endstr, 10)
- || *endstr || r->remaining < 0) {
- r->remaining = 0;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid Content-Length");
- return HTTP_BAD_REQUEST;
- }
- }
-
- if ((r->read_body == REQUEST_NO_BODY)
- && (r->read_chunked || (r->remaining > 0))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s with body is not allowed for %s", r->method, r->uri);
- return HTTP_REQUEST_ENTITY_TOO_LARGE;
- }
-
-#ifdef AP_DEBUG
- {
- /* Make sure ap_getline() didn't leave any droppings. */
- core_request_config *req_cfg =
- (core_request_config *)ap_get_module_config(r->request_config,
- &core_module);
- AP_DEBUG_ASSERT(APR_BRIGADE_EMPTY(req_cfg->bb));
- }
-#endif
-
- return OK;
-}
-
-AP_DECLARE(int) ap_should_client_block(request_rec *r)
-{
- /* First check if we have already read the request body */
-
- if (r->read_length || (!r->read_chunked && (r->remaining <= 0))) {
- return 0;
- }
-
- return 1;
-}
-
-/**
- * Parse a chunk extension, detect overflow.
- * There are two error cases:
- * 1) If the conversion would require too many bits, a -1 is returned.
- * 2) If the conversion used the correct number of bits, but an overflow
- * caused only the sign bit to flip, then that negative number is
- * returned.
- * In general, any negative number can be considered an overflow error.
- */
-static long get_chunk_size(char *b)
-{
- long chunksize = 0;
- size_t chunkbits = sizeof(long) * 8;
-
- /* Skip leading zeros */
- while (*b == '0') {
- ++b;
- }
-
- while (apr_isxdigit(*b) && (chunkbits > 0)) {
- int xvalue = 0;
-
- if (*b >= '0' && *b <= '9') {
- xvalue = *b - '0';
- }
- else if (*b >= 'A' && *b <= 'F') {
- xvalue = *b - 'A' + 0xa;
- }
- else if (*b >= 'a' && *b <= 'f') {
- xvalue = *b - 'a' + 0xa;
- }
-
- chunksize = (chunksize << 4) | xvalue;
- chunkbits -= 4;
- ++b;
- }
- if (apr_isxdigit(*b) && (chunkbits <= 0)) {
- /* overflow */
- return -1;
- }
-
- return chunksize;
-}
-
-/* get_client_block is called in a loop to get the request message body.
- * This is quite simple if the client includes a content-length
- * (the normal case), but gets messy if the body is chunked. Note that
- * r->remaining is used to maintain state across calls and that
- * r->read_length is the total number of bytes given to the caller
- * across all invocations. It is messy because we have to be careful not
- * to read past the data provided by the client, since these reads block.
- * Returns 0 on End-of-body, -1 on error or premature chunk end.
- *
- */
-AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer,
- apr_size_t bufsiz)
-{
- apr_status_t rv;
- apr_bucket_brigade *bb;
-
- if (r->remaining < 0 || (!r->read_chunked && r->remaining == 0)) {
- return 0;
- }
-
- bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- if (bb == NULL) {
- r->connection->keepalive = AP_CONN_CLOSE;
- return -1;
- }
-
- rv = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
- APR_BLOCK_READ, bufsiz);
-
- /* We lose the failure code here. This is why ap_get_client_block should
- * not be used.
- */
- if (rv != APR_SUCCESS) {
- /* if we actually fail here, we want to just return and
- * stop trying to read data from the client.
- */
- r->connection->keepalive = AP_CONN_CLOSE;
- apr_brigade_destroy(bb);
- return -1;
- }
-
- /* If this fails, it means that a filter is written incorrectly and that
- * it needs to learn how to properly handle APR_BLOCK_READ requests by
- * returning data when requested.
- */
- AP_DEBUG_ASSERT(!APR_BRIGADE_EMPTY(bb));
-
- /* Check to see if EOS in the brigade.
- *
- * If so, we have to leave a nugget for the *next* ap_get_client_block
- * call to return 0.
- */
- if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
- if (r->read_chunked) {
- r->remaining = -1;
- }
- else {
- r->remaining = 0;
- }
- }
-
- rv = apr_brigade_flatten(bb, buffer, &bufsiz);
- if (rv != APR_SUCCESS) {
- apr_brigade_destroy(bb);
- return -1;
- }
-
- /* XXX yank me? */
- r->read_length += bufsiz;
-
- apr_brigade_destroy(bb);
- return bufsiz;
-}
-
-/* In HTTP/1.1, any method can have a body. However, most GET handlers
- * wouldn't know what to do with a request body if they received one.
- * This helper routine tests for and reads any message body in the request,
- * simply discarding whatever it receives. We need to do this because
- * failing to read the request body would cause it to be interpreted
- * as the next request on a persistent connection.
- *
- * Since we return an error status if the request is malformed, this
- * routine should be called at the beginning of a no-body handler, e.g.,
- *
- * if ((retval = ap_discard_request_body(r)) != OK) {
- * return retval;
- * }
- */
-AP_DECLARE(int) ap_discard_request_body(request_rec *r)
-{
- apr_bucket_brigade *bb;
- int rv, seen_eos;
-
- /* Sometimes we'll get in a state where the input handling has
- * detected an error where we want to drop the connection, so if
- * that's the case, don't read the data as that is what we're trying
- * to avoid.
- *
- * This function is also a no-op on a subrequest.
- */
- if (r->main || r->connection->keepalive == AP_CONN_CLOSE ||
- ap_status_drops_connection(r->status)) {
- return OK;
- }
-
- bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- seen_eos = 0;
- do {
- apr_bucket *bucket;
-
- rv = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
- APR_BLOCK_READ, HUGE_STRING_LEN);
-
- if (rv != APR_SUCCESS) {
- /* FIXME: If we ever have a mapping from filters (apr_status_t)
- * to HTTP error codes, this would be a good place for them.
- *
- * If we received the special case AP_FILTER_ERROR, it means
- * that the filters have already handled this error.
- * Otherwise, we should assume we have a bad request.
- */
- if (rv == AP_FILTER_ERROR) {
- apr_brigade_destroy(bb);
- return rv;
- }
- else {
- apr_brigade_destroy(bb);
- return HTTP_BAD_REQUEST;
- }
- }
-
- for (bucket = APR_BRIGADE_FIRST(bb);
- bucket != APR_BRIGADE_SENTINEL(bb);
- bucket = APR_BUCKET_NEXT(bucket))
- {
- const char *data;
- apr_size_t len;
-
- if (APR_BUCKET_IS_EOS(bucket)) {
- seen_eos = 1;
- break;
- }
-
- /* These are metadata buckets. */
- if (bucket->length == 0) {
- continue;
- }
-
- /* We MUST read because in case we have an unknown-length
- * bucket or one that morphs, we want to exhaust it.
- */
- rv = apr_bucket_read(bucket, &data, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- apr_brigade_destroy(bb);
- return HTTP_BAD_REQUEST;
- }
- }
- apr_brigade_cleanup(bb);
- } while (!seen_eos);
-
- return OK;
-}
-
-static const char *add_optional_notes(request_rec *r,
- const char *prefix,
- const char *key,
- const char *suffix)
-{
- const char *notes, *result;
-
- if ((notes = apr_table_get(r->notes, key)) == NULL) {
- result = apr_pstrcat(r->pool, prefix, suffix, NULL);
- }
- else {
- result = apr_pstrcat(r->pool, prefix, notes, suffix, NULL);
- }
-
- return result;
-}
-
-/* construct and return the default error message for a given
- * HTTP defined error code
- */
-static const char *get_canned_error_string(int status,
- request_rec *r,
- const char *location)
-{
- apr_pool_t *p = r->pool;
- const char *error_notes, *h1, *s1;
-
- switch (status) {
- case HTTP_MOVED_PERMANENTLY:
- case HTTP_MOVED_TEMPORARILY:
- case HTTP_TEMPORARY_REDIRECT:
- return(apr_pstrcat(p,
- "<p>The document has moved <a href=\"",
- ap_escape_html(r->pool, location),
- "\">here</a>.</p>\n",
- NULL));
- case HTTP_SEE_OTHER:
- return(apr_pstrcat(p,
- "<p>The answer to your request is located "
- "<a href=\"",
- ap_escape_html(r->pool, location),
- "\">here</a>.</p>\n",
- NULL));
- case HTTP_USE_PROXY:
- return(apr_pstrcat(p,
- "<p>This resource is only accessible "
- "through the proxy\n",
- ap_escape_html(r->pool, location),
- "<br />\nYou will need to configure "
- "your client to use that proxy.</p>\n",
- NULL));
- case HTTP_PROXY_AUTHENTICATION_REQUIRED:
- case HTTP_UNAUTHORIZED:
- return("<p>This server could not verify that you\n"
- "are authorized to access the document\n"
- "requested. Either you supplied the wrong\n"
- "credentials (e.g., bad password), or your\n"
- "browser doesn't understand how to supply\n"
- "the credentials required.</p>\n");
- case HTTP_BAD_REQUEST:
- return(add_optional_notes(r,
- "<p>Your browser sent a request that "
- "this server could not understand.<br />\n",
- "error-notes",
- "</p>\n"));
- case HTTP_FORBIDDEN:
- return(apr_pstrcat(p,
- "<p>You don't have permission to access ",
- ap_escape_html(r->pool, r->uri),
- "\non this server.</p>\n",
- NULL));
- case HTTP_NOT_FOUND:
- return(apr_pstrcat(p,
- "<p>The requested URL ",
- ap_escape_html(r->pool, r->uri),
- " was not found on this server.</p>\n",
- NULL));
- case HTTP_METHOD_NOT_ALLOWED:
- return(apr_pstrcat(p,
- "<p>The requested method ", r->method,
- " is not allowed for the URL ",
- ap_escape_html(r->pool, r->uri),
- ".</p>\n",
- NULL));
- case HTTP_NOT_ACCEPTABLE:
- s1 = apr_pstrcat(p,
- "<p>An appropriate representation of the "
- "requested resource ",
- ap_escape_html(r->pool, r->uri),
- " could not be found on this server.</p>\n",
- NULL);
- return(add_optional_notes(r, s1, "variant-list", ""));
- case HTTP_MULTIPLE_CHOICES:
- return(add_optional_notes(r, "", "variant-list", ""));
- case HTTP_LENGTH_REQUIRED:
- s1 = apr_pstrcat(p,
- "<p>A request of the requested method ",
- r->method,
- " requires a valid Content-length.<br />\n",
- NULL);
- return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
- case HTTP_PRECONDITION_FAILED:
- return(apr_pstrcat(p,
- "<p>The precondition on the request "
- "for the URL ",
- ap_escape_html(r->pool, r->uri),
- " evaluated to false.</p>\n",
- NULL));
- case HTTP_NOT_IMPLEMENTED:
- s1 = apr_pstrcat(p,
- "<p>",
- ap_escape_html(r->pool, r->method), " to ",
- ap_escape_html(r->pool, r->uri),
- " not supported.<br />\n",
- NULL);
- return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
- case HTTP_BAD_GATEWAY:
- s1 = "<p>The proxy server received an invalid" CRLF
- "response from an upstream server.<br />" CRLF;
- return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
- case HTTP_VARIANT_ALSO_VARIES:
- return(apr_pstrcat(p,
- "<p>A variant for the requested "
- "resource\n<pre>\n",
- ap_escape_html(r->pool, r->uri),
- "\n</pre>\nis itself a negotiable resource. "
- "This indicates a configuration error.</p>\n",
- NULL));
- case HTTP_REQUEST_TIME_OUT:
- return("<p>Server timeout waiting for the HTTP request from the client.</p>\n");
- case HTTP_GONE:
- return(apr_pstrcat(p,
- "<p>The requested resource<br />",
- ap_escape_html(r->pool, r->uri),
- "<br />\nis no longer available on this server "
- "and there is no forwarding address.\n"
- "Please remove all references to this "
- "resource.</p>\n",
- NULL));
- case HTTP_REQUEST_ENTITY_TOO_LARGE:
- return(apr_pstrcat(p,
- "The requested resource<br />",
- ap_escape_html(r->pool, r->uri), "<br />\n",
- "does not allow request data with ",
- r->method,
- " requests, or the amount of data provided in\n"
- "the request exceeds the capacity limit.\n",
- NULL));
- case HTTP_REQUEST_URI_TOO_LARGE:
- s1 = "<p>The requested URL's length exceeds the capacity\n"
- "limit for this server.<br />\n";
- return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
- case HTTP_UNSUPPORTED_MEDIA_TYPE:
- return("<p>The supplied request data is not in a format\n"
- "acceptable for processing by this resource.</p>\n");
- case HTTP_RANGE_NOT_SATISFIABLE:
- return("<p>None of the range-specifier values in the Range\n"
- "request-header field overlap the current extent\n"
- "of the selected resource.</p>\n");
- case HTTP_EXPECTATION_FAILED:
- return(apr_pstrcat(p,
- "<p>The expectation given in the Expect "
- "request-header"
- "\nfield could not be met by this server.</p>\n"
- "<p>The client sent<pre>\n Expect: ",
- apr_table_get(r->headers_in, "Expect"),
- "\n</pre>\n"
- "but we only allow the 100-continue "
- "expectation.</p>\n",
- NULL));
- case HTTP_UNPROCESSABLE_ENTITY:
- return("<p>The server understands the media type of the\n"
- "request entity, but was unable to process the\n"
- "contained instructions.</p>\n");
- case HTTP_LOCKED:
- return("<p>The requested resource is currently locked.\n"
- "The lock must be released or proper identification\n"
- "given before the method can be applied.</p>\n");
- case HTTP_FAILED_DEPENDENCY:
- return("<p>The method could not be performed on the resource\n"
- "because the requested action depended on another\n"
- "action and that other action failed.</p>\n");
- case HTTP_UPGRADE_REQUIRED:
- return("<p>The requested resource can only be retrieved\n"
- "using SSL. The server is willing to upgrade the current\n"
- "connection to SSL, but your client doesn't support it.\n"
- "Either upgrade your client, or try requesting the page\n"
- "using https://\n");
- case HTTP_INSUFFICIENT_STORAGE:
- return("<p>The method could not be performed on the resource\n"
- "because the server is unable to store the\n"
- "representation needed to successfully complete the\n"
- "request. There is insufficient free space left in\n"
- "your storage allocation.</p>\n");
- case HTTP_SERVICE_UNAVAILABLE:
- return("<p>The server is temporarily unable to service your\n"
- "request due to maintenance downtime or capacity\n"
- "problems. Please try again later.</p>\n");
- case HTTP_GATEWAY_TIME_OUT:
- return("<p>The proxy server did not receive a timely response\n"
- "from the upstream server.</p>\n");
- case HTTP_NOT_EXTENDED:
- return("<p>A mandatory extension policy in the request is not\n"
- "accepted by the server for this resource.</p>\n");
- default: /* HTTP_INTERNAL_SERVER_ERROR */
- /*
- * This comparison to expose error-notes could be modified to
- * use a configuration directive and export based on that
- * directive. For now "*" is used to designate an error-notes
- * that is totally safe for any user to see (ie lacks paths,
- * database passwords, etc.)
- */
- if (((error_notes = apr_table_get(r->notes,
- "error-notes")) != NULL)
- && (h1 = apr_table_get(r->notes, "verbose-error-to")) != NULL
- && (strcmp(h1, "*") == 0)) {
- return(apr_pstrcat(p, error_notes, "<p />\n", NULL));
- }
- else {
- return(apr_pstrcat(p,
- "<p>The server encountered an internal "
- "error or\n"
- "misconfiguration and was unable to complete\n"
- "your request.</p>\n"
- "<p>Please contact the server "
- "administrator,\n ",
- ap_escape_html(r->pool,
- r->server->server_admin),
- " and inform them of the time the "
- "error occurred,\n"
- "and anything you might have done that "
- "may have\n"
- "caused the error.</p>\n"
- "<p>More information about this error "
- "may be available\n"
- "in the server error log.</p>\n",
- NULL));
- }
- /*
- * It would be nice to give the user the information they need to
- * fix the problem directly since many users don't have access to
- * the error_log (think University sites) even though they can easily
- * get this error by misconfiguring an htaccess file. However, the
- * e error notes tend to include the real file pathname in this case,
- * which some people consider to be a breach of privacy. Until we
- * can figure out a way to remove the pathname, leave this commented.
- *
- * if ((error_notes = apr_table_get(r->notes,
- * "error-notes")) != NULL) {
- * return(apr_pstrcat(p, error_notes, "<p />\n", NULL);
- * }
- * else {
- * return "";
- * }
- */
- }
-}
-
-/* We should have named this send_canned_response, since it is used for any
- * response that can be generated by the server from the request record.
- * This includes all 204 (no content), 3xx (redirect), 4xx (client error),
- * and 5xx (server error) messages that have not been redirected to another
- * handler via the ErrorDocument feature.
- */
-AP_DECLARE(void) ap_send_error_response(request_rec *r, int recursive_error)
-{
- int status = r->status;
- int idx = ap_index_of_response(status);
- char *custom_response;
- const char *location = apr_table_get(r->headers_out, "Location");
-
- /* At this point, we are starting the response over, so we have to reset
- * this value.
- */
- r->eos_sent = 0;
-
- /* and we need to get rid of any RESOURCE filters that might be lurking
- * around, thinking they are in the middle of the original request
- */
-
- r->output_filters = r->proto_output_filters;
-
- ap_run_insert_error_filter(r);
-
- /*
- * It's possible that the Location field might be in r->err_headers_out
- * instead of r->headers_out; use the latter if possible, else the
- * former.
- */
- if (location == NULL) {
- location = apr_table_get(r->err_headers_out, "Location");
- }
- /* We need to special-case the handling of 204 and 304 responses,
- * since they have specific HTTP requirements and do not include a
- * message body. Note that being assbackwards here is not an option.
- */
- if (status == HTTP_NOT_MODIFIED) {
- ap_finalize_request_protocol(r);
- return;
- }
-
- if (status == HTTP_NO_CONTENT) {
- ap_finalize_request_protocol(r);
- return;
- }
-
- if (!r->assbackwards) {
- apr_table_t *tmp = r->headers_out;
-
- /* For all HTTP/1.x responses for which we generate the message,
- * we need to avoid inheriting the "normal status" header fields
- * that may have been set by the request handler before the
- * error or redirect, except for Location on external redirects.
- */
- r->headers_out = r->err_headers_out;
- r->err_headers_out = tmp;
- apr_table_clear(r->err_headers_out);
-
- if (ap_is_HTTP_REDIRECT(status) || (status == HTTP_CREATED)) {
- if ((location != NULL) && *location) {
- apr_table_setn(r->headers_out, "Location", location);
- }
- else {
- location = ""; /* avoids coredump when printing, below */
- }
- }
-
- r->content_languages = NULL;
- r->content_encoding = NULL;
- r->clength = 0;
- ap_set_content_type(r, "text/html; charset=iso-8859-1");
-
- if ((status == HTTP_METHOD_NOT_ALLOWED)
- || (status == HTTP_NOT_IMPLEMENTED)) {
- apr_table_setn(r->headers_out, "Allow", make_allow(r));
- }
-
- if (r->header_only) {
- ap_finalize_request_protocol(r);
- return;
- }
- }
-
- if ((custom_response = ap_response_code_string(r, idx))) {
- /*
- * We have a custom response output. This should only be
- * a text-string to write back. But if the ErrorDocument
- * was a local redirect and the requested resource failed
- * for any reason, the custom_response will still hold the
- * redirect URL. We don't really want to output this URL
- * as a text message, so first check the custom response
- * string to ensure that it is a text-string (using the
- * same test used in ap_die(), i.e. does it start with a ").
- *
- * If it's not a text string, we've got a recursive error or
- * an external redirect. If it's a recursive error, ap_die passes
- * us the second error code so we can write both, and has already
- * backed up to the original error. If it's an external redirect,
- * it hasn't happened yet; we may never know if it fails.
- */
- if (custom_response[0] == '\"') {
- ap_rputs(custom_response + 1, r);
- ap_finalize_request_protocol(r);
- return;
- }
- }
- {
- const char *title = status_lines[idx];
- const char *h1;
-
- /* Accept a status_line set by a module, but only if it begins
- * with the 3 digit status code
- */
- if (r->status_line != NULL
- && strlen(r->status_line) > 4 /* long enough */
- && apr_isdigit(r->status_line[0])
- && apr_isdigit(r->status_line[1])
- && apr_isdigit(r->status_line[2])
- && apr_isspace(r->status_line[3])
- && apr_isalnum(r->status_line[4])) {
- title = r->status_line;
- }
-
- /* folks decided they didn't want the error code in the H1 text */
- h1 = &title[4];
-
- /* can't count on a charset filter being in place here,
- * so do ebcdic->ascii translation explicitly (if needed)
- */
-
- ap_rvputs_proto_in_ascii(r,
- DOCTYPE_HTML_2_0
- "<html><head>\n<title>", title,
- "</title>\n</head><body>\n<h1>", h1, "</h1>\n",
- NULL);
-
- ap_rvputs_proto_in_ascii(r,
- get_canned_error_string(status, r, location),
- NULL);
-
- if (recursive_error) {
- ap_rvputs_proto_in_ascii(r, "<p>Additionally, a ",
- status_lines[ap_index_of_response(recursive_error)],
- "\nerror was encountered while trying to use an "
- "ErrorDocument to handle the request.</p>\n", NULL);
- }
- ap_rvputs_proto_in_ascii(r, ap_psignature("<hr />\n", r), NULL);
- ap_rvputs_proto_in_ascii(r, "</body></html>\n", NULL);
- }
- ap_finalize_request_protocol(r);
-}
-
-/*
- * Create a new method list with the specified number of preallocated
- * extension slots.
- */
-AP_DECLARE(ap_method_list_t *) ap_make_method_list(apr_pool_t *p, int nelts)
-{
- ap_method_list_t *ml;
-
- ml = (ap_method_list_t *) apr_palloc(p, sizeof(ap_method_list_t));
- ml->method_mask = 0;
- ml->method_list = apr_array_make(p, nelts, sizeof(char *));
- return ml;
-}
-
-/*
- * Make a copy of a method list (primarily for subrequests that may
- * subsequently change it; don't want them changing the parent's, too!).
- */
-AP_DECLARE(void) ap_copy_method_list(ap_method_list_t *dest,
- ap_method_list_t *src)
-{
- int i;
- char **imethods;
- char **omethods;
-
- dest->method_mask = src->method_mask;
- imethods = (char **) src->method_list->elts;
- for (i = 0; i < src->method_list->nelts; ++i) {
- omethods = (char **) apr_array_push(dest->method_list);
- *omethods = apr_pstrdup(dest->method_list->pool, imethods[i]);
- }
-}
-
-/*
- * Invoke a callback routine for each method in the specified list.
- */
-AP_DECLARE_NONSTD(void) ap_method_list_do(int (*comp) (void *urec,
- const char *mname,
- int mnum),
- void *rec,
- const ap_method_list_t *ml, ...)
-{
- va_list vp;
- va_start(vp, ml);
- ap_method_list_vdo(comp, rec, ml, vp);
- va_end(vp);
-}
-
-AP_DECLARE(void) ap_method_list_vdo(int (*comp) (void *mrec,
- const char *mname,
- int mnum),
- void *rec, const ap_method_list_t *ml,
- va_list vp)
-{
-
-}
-
-/*
- * Return true if the specified HTTP method is in the provided
- * method list.
- */
-AP_DECLARE(int) ap_method_in_list(ap_method_list_t *l, const char *method)
-{
- int methnum;
- int i;
- char **methods;
-
- /*
- * If it's one of our known methods, use the shortcut and check the
- * bitmask.
- */
- methnum = ap_method_number_of(method);
- if (methnum != M_INVALID) {
- return !!(l->method_mask & (AP_METHOD_BIT << methnum));
- }
- /*
- * Otherwise, see if the method name is in the array or string names
- */
- if ((l->method_list == NULL) || (l->method_list->nelts == 0)) {
- return 0;
- }
- methods = (char **)l->method_list->elts;
- for (i = 0; i < l->method_list->nelts; ++i) {
- if (strcmp(method, methods[i]) == 0) {
- return 1;
- }
- }
- return 0;
-}
-
-/*
- * Add the specified method to a method list (if it isn't already there).
- */
-AP_DECLARE(void) ap_method_list_add(ap_method_list_t *l, const char *method)
-{
- int methnum;
- int i;
- const char **xmethod;
- char **methods;
-
- /*
- * If it's one of our known methods, use the shortcut and use the
- * bitmask.
- */
- methnum = ap_method_number_of(method);
- l->method_mask |= (AP_METHOD_BIT << methnum);
- if (methnum != M_INVALID) {
- return;
- }
- /*
- * Otherwise, see if the method name is in the array of string names.
- */
- if (l->method_list->nelts != 0) {
- methods = (char **)l->method_list->elts;
- for (i = 0; i < l->method_list->nelts; ++i) {
- if (strcmp(method, methods[i]) == 0) {
- return;
- }
- }
- }
- xmethod = (const char **) apr_array_push(l->method_list);
- *xmethod = method;
-}
-
-/*
- * Remove the specified method from a method list.
- */
-AP_DECLARE(void) ap_method_list_remove(ap_method_list_t *l,
- const char *method)
-{
- int methnum;
- char **methods;
-
- /*
- * If it's a known methods, either builtin or registered
- * by a module, use the bitmask.
- */
- methnum = ap_method_number_of(method);
- l->method_mask |= ~(AP_METHOD_BIT << methnum);
- if (methnum != M_INVALID) {
- return;
- }
- /*
- * Otherwise, see if the method name is in the array of string names.
- */
- if (l->method_list->nelts != 0) {
- register int i, j, k;
- methods = (char **)l->method_list->elts;
- for (i = 0; i < l->method_list->nelts; ) {
- if (strcmp(method, methods[i]) == 0) {
- for (j = i, k = i + 1; k < l->method_list->nelts; ++j, ++k) {
- methods[j] = methods[k];
- }
- --l->method_list->nelts;
- }
- else {
- ++i;
- }
- }
- }
-}
-
-/*
- * Reset a method list to be completely empty.
- */
-AP_DECLARE(void) ap_clear_method_list(ap_method_list_t *l)
-{
- l->method_mask = 0;
- l->method_list->nelts = 0;
-}
-
-/* Generate the human-readable hex representation of an unsigned long
- * (basically a faster version of 'sprintf("%lx")')
- */
-#define HEX_DIGITS "0123456789abcdef"
-static char *etag_ulong_to_hex(char *next, unsigned long u)
-{
- int printing = 0;
- int shift = sizeof(unsigned long) * 8 - 4;
- do {
- unsigned long next_digit = ((u >> shift) & (unsigned long)0xf);
- if (next_digit) {
- *next++ = HEX_DIGITS[next_digit];
- printing = 1;
- }
- else if (printing) {
- *next++ = HEX_DIGITS[next_digit];
- }
- shift -= 4;
- } while (shift);
- *next++ = HEX_DIGITS[u & (unsigned long)0xf];
- return next;
-}
-
-#define ETAG_WEAK "W/"
-#define CHARS_PER_UNSIGNED_LONG (sizeof(unsigned long) * 2)
-/*
- * Construct an entity tag (ETag) from resource information. If it's a real
- * file, build in some of the file characteristics. If the modification time
- * is newer than (request-time minus 1 second), mark the ETag as weak - it
- * could be modified again in as short an interval. We rationalize the
- * modification time we're given to keep it from being in the future.
- */
-AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak)
-{
- char *weak;
- apr_size_t weak_len;
- char *etag;
- char *next;
- core_dir_config *cfg;
- etag_components_t etag_bits;
- etag_components_t bits_added;
-
- cfg = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
- etag_bits = (cfg->etag_bits & (~ cfg->etag_remove)) | cfg->etag_add;
-
- /*
- * If it's a file (or we wouldn't be here) and no ETags
- * should be set for files, return an empty string and
- * note it for the header-sender to ignore.
- */
- if (etag_bits & ETAG_NONE) {
- apr_table_setn(r->notes, "no-etag", "omit");
- return "";
- }
-
- if (etag_bits == ETAG_UNSET) {
- etag_bits = ETAG_BACKWARD;
- }
- /*
- * Make an ETag header out of various pieces of information. We use
- * the last-modified date and, if we have a real file, the
- * length and inode number - note that this doesn't have to match
- * the content-length (i.e. includes), it just has to be unique
- * for the file.
- *
- * If the request was made within a second of the last-modified date,
- * we send a weak tag instead of a strong one, since it could
- * be modified again later in the second, and the validation
- * would be incorrect.
- */
- if ((r->request_time - r->mtime > (1 * APR_USEC_PER_SEC)) &&
- !force_weak) {
- weak = NULL;
- weak_len = 0;
- }
- else {
- weak = ETAG_WEAK;
- weak_len = sizeof(ETAG_WEAK);
- }
-
- if (r->finfo.filetype != 0) {
- /*
- * ETag gets set to [W/]"inode-size-mtime", modulo any
- * FileETag keywords.
- */
- etag = apr_palloc(r->pool, weak_len + sizeof("\"--\"") +
- 3 * CHARS_PER_UNSIGNED_LONG + 1);
- next = etag;
- if (weak) {
- while (*weak) {
- *next++ = *weak++;
- }
- }
- *next++ = '"';
- bits_added = 0;
- if (etag_bits & ETAG_INODE) {
- next = etag_ulong_to_hex(next, (unsigned long)r->finfo.inode);
- bits_added |= ETAG_INODE;
- }
- if (etag_bits & ETAG_SIZE) {
- if (bits_added != 0) {
- *next++ = '-';
- }
- next = etag_ulong_to_hex(next, (unsigned long)r->finfo.size);
- bits_added |= ETAG_SIZE;
- }
- if (etag_bits & ETAG_MTIME) {
- if (bits_added != 0) {
- *next++ = '-';
- }
- next = etag_ulong_to_hex(next, (unsigned long)r->mtime);
- }
- *next++ = '"';
- *next = '\0';
- }
- else {
- /*
- * Not a file document, so just use the mtime: [W/]"mtime"
- */
- etag = apr_palloc(r->pool, weak_len + sizeof("\"\"") +
- CHARS_PER_UNSIGNED_LONG + 1);
- next = etag;
- if (weak) {
- while (*weak) {
- *next++ = *weak++;
- }
- }
- *next++ = '"';
- next = etag_ulong_to_hex(next, (unsigned long)r->mtime);
- *next++ = '"';
- *next = '\0';
- }
-
- return etag;
-}
-
-AP_DECLARE(void) ap_set_etag(request_rec *r)
-{
- char *etag;
- char *variant_etag, *vlv;
- int vlv_weak;
-
- if (!r->vlist_validator) {
- etag = ap_make_etag(r, 0);
-
- /* If we get a blank etag back, don't set the header. */
- if (!etag[0]) {
- return;
- }
- }
- else {
- /* If we have a variant list validator (vlv) due to the
- * response being negotiated, then we create a structured
- * entity tag which merges the variant etag with the variant
- * list validator (vlv). This merging makes revalidation
- * somewhat safer, ensures that caches which can deal with
- * Vary will (eventually) be updated if the set of variants is
- * changed, and is also a protocol requirement for transparent
- * content negotiation.
- */
-
- /* if the variant list validator is weak, we make the whole
- * structured etag weak. If we would not, then clients could
- * have problems merging range responses if we have different
- * variants with the same non-globally-unique strong etag.
- */
-
- vlv = r->vlist_validator;
- vlv_weak = (vlv[0] == 'W');
-
- variant_etag = ap_make_etag(r, vlv_weak);
-
- /* If we get a blank etag back, don't append vlv and stop now. */
- if (!variant_etag[0]) {
- return;
- }
-
- /* merge variant_etag and vlv into a structured etag */
- variant_etag[strlen(variant_etag) - 1] = '\0';
- if (vlv_weak) {
- vlv += 3;
- }
- else {
- vlv++;
- }
- etag = apr_pstrcat(r->pool, variant_etag, ";", vlv, NULL);
- }
-
- apr_table_setn(r->headers_out, "ETag", etag);
-}
-
-static int parse_byterange(char *range, apr_off_t clength,
- apr_off_t *start, apr_off_t *end)
-{
- char *dash = strchr(range, '-');
- char *errp;
- apr_off_t number;
-
- if (!dash) {
- return 0;
- }
-
- if ((dash == range)) {
- /* In the form "-5" */
- if (apr_strtoff(&number, dash+1, &errp, 10) || *errp) {
- return 0;
- }
- *start = clength - number;
- *end = clength - 1;
- }
- else {
- *dash++ = '\0';
- if (apr_strtoff(&number, range, &errp, 10) || *errp) {
- return 0;
- }
- *start = number;
- if (*dash) {
- if (apr_strtoff(&number, dash, &errp, 10) || *errp) {
- return 0;
- }
- *end = number;
- }
- else { /* "5-" */
- *end = clength - 1;
- }
- }
-
- if (*start < 0) {
- *start = 0;
- }
-
- if (*end >= clength) {
- *end = clength - 1;
- }
-
- if (*start > *end) {
- return -1;
- }
-
- return (*start > 0 || *end < clength);
-}
-
-static int ap_set_byterange(request_rec *r);
-
-typedef struct byterange_ctx {
- apr_bucket_brigade *bb;
- int num_ranges;
- char *boundary;
- char *bound_head;
-} byterange_ctx;
-
-/*
- * Here we try to be compatible with clients that want multipart/x-byteranges
- * instead of multipart/byteranges (also see above), as per HTTP/1.1. We
- * look for the Request-Range header (e.g. Netscape 2 and 3) as an indication
- * that the browser supports an older protocol. We also check User-Agent
- * for Microsoft Internet Explorer 3, which needs this as well.
- */
-static int use_range_x(request_rec *r)
-{
- const char *ua;
- return (apr_table_get(r->headers_in, "Request-Range")
- || ((ua = apr_table_get(r->headers_in, "User-Agent"))
- && ap_strstr_c(ua, "MSIE 3")));
-}
-
-#define BYTERANGE_FMT "%" APR_OFF_T_FMT "-%" APR_OFF_T_FMT "/%" APR_OFF_T_FMT
-#define PARTITION_ERR_FMT "apr_brigade_partition() failed " \
- "[%" APR_OFF_T_FMT ",%" APR_OFF_T_FMT "]"
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
-#define MIN_LENGTH(len1, len2) ((len1 > len2) ? len2 : len1)
- request_rec *r = f->r;
- conn_rec *c = r->connection;
- byterange_ctx *ctx = f->ctx;
- apr_bucket *e;
- apr_bucket_brigade *bsend;
- apr_off_t range_start;
- apr_off_t range_end;
- char *current;
- apr_off_t bb_length;
- apr_off_t clength = 0;
- apr_status_t rv;
- int found = 0;
-
- if (!ctx) {
- int num_ranges = ap_set_byterange(r);
-
- /* We have nothing to do, get out of the way. */
- if (num_ranges == 0) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx));
- ctx->num_ranges = num_ranges;
- /* create a brigade in case we never call ap_save_brigade() */
- ctx->bb = apr_brigade_create(r->pool, c->bucket_alloc);
-
- if (ctx->num_ranges > 1) {
- /* Is ap_make_content_type required here? */
- const char *orig_ct = ap_make_content_type(r, r->content_type);
- ctx->boundary = apr_psprintf(r->pool, "%" APR_UINT64_T_HEX_FMT "%lx",
- (apr_uint64_t)r->request_time, (long) getpid());
-
- ap_set_content_type(r, apr_pstrcat(r->pool, "multipart",
- use_range_x(r) ? "/x-" : "/",
- "byteranges; boundary=",
- ctx->boundary, NULL));
-
- ctx->bound_head = apr_pstrcat(r->pool,
- CRLF "--", ctx->boundary,
- CRLF "Content-type: ",
- orig_ct,
- CRLF "Content-range: bytes ",
- NULL);
- ap_xlate_proto_to_ascii(ctx->bound_head, strlen(ctx->bound_head));
- }
- }
-
- /* We can't actually deal with byte-ranges until we have the whole brigade
- * because the byte-ranges can be in any order, and according to the RFC,
- * we SHOULD return the data in the same order it was requested.
- *
- * XXX: We really need to dump all bytes prior to the start of the earliest
- * range, and only slurp up to the end of the latest range. By this we
- * mean that we should peek-ahead at the lowest first byte of any range,
- * and the highest last byte of any range.
- */
- if (!APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
- ap_save_brigade(f, &ctx->bb, &bb, r->pool);
- return APR_SUCCESS;
- }
-
- /* Prepend any earlier saved brigades. */
- APR_BRIGADE_PREPEND(bb, ctx->bb);
-
- /* It is possible that we won't have a content length yet, so we have to
- * compute the length before we can actually do the byterange work.
- */
- apr_brigade_length(bb, 1, &bb_length);
- clength = (apr_off_t)bb_length;
-
- /* this brigade holds what we will be sending */
- bsend = apr_brigade_create(r->pool, c->bucket_alloc);
-
- while ((current = ap_getword(r->pool, &r->range, ','))
- && (rv = parse_byterange(current, clength, &range_start,
- &range_end))) {
- apr_bucket *e2;
- apr_bucket *ec;
-
- if (rv == -1) {
- continue;
- }
-
- /* these calls to apr_brigade_partition() should theoretically
- * never fail because of the above call to apr_brigade_length(),
- * but what the heck, we'll check for an error anyway */
- if ((rv = apr_brigade_partition(bb, range_start, &ec)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- PARTITION_ERR_FMT, range_start, clength);
- continue;
- }
- if ((rv = apr_brigade_partition(bb, range_end+1, &e2)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- PARTITION_ERR_FMT, range_end+1, clength);
- continue;
- }
-
- found = 1;
-
- /* For single range requests, we must produce Content-Range header.
- * Otherwise, we need to produce the multipart boundaries.
- */
- if (ctx->num_ranges == 1) {
- apr_table_setn(r->headers_out, "Content-Range",
- apr_psprintf(r->pool, "bytes " BYTERANGE_FMT,
- range_start, range_end, clength));
- }
- else {
- char *ts;
-
- e = apr_bucket_pool_create(ctx->bound_head, strlen(ctx->bound_head),
- r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bsend, e);
-
- ts = apr_psprintf(r->pool, BYTERANGE_FMT CRLF CRLF,
- range_start, range_end, clength);
- ap_xlate_proto_to_ascii(ts, strlen(ts));
- e = apr_bucket_pool_create(ts, strlen(ts), r->pool,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bsend, e);
- }
-
- do {
- apr_bucket *foo;
- const char *str;
- apr_size_t len;
-
- if (apr_bucket_copy(ec, &foo) != APR_SUCCESS) {
- /* this shouldn't ever happen due to the call to
- * apr_brigade_length() above which normalizes
- * indeterminate-length buckets. just to be sure,
- * though, this takes care of uncopyable buckets that
- * do somehow manage to slip through.
- */
- /* XXX: check for failure? */
- apr_bucket_read(ec, &str, &len, APR_BLOCK_READ);
- apr_bucket_copy(ec, &foo);
- }
- APR_BRIGADE_INSERT_TAIL(bsend, foo);
- ec = APR_BUCKET_NEXT(ec);
- } while (ec != e2);
- }
-
- if (found == 0) {
- ap_remove_output_filter(f);
- r->status = HTTP_OK;
- /* bsend is assumed to be empty if we get here. */
- e = ap_bucket_error_create(HTTP_RANGE_NOT_SATISFIABLE, NULL,
- r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bsend, e);
- e = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bsend, e);
- return ap_pass_brigade(f->next, bsend);
- }
-
- if (ctx->num_ranges > 1) {
- char *end;
-
- /* add the final boundary */
- end = apr_pstrcat(r->pool, CRLF "--", ctx->boundary, "--" CRLF, NULL);
- ap_xlate_proto_to_ascii(end, strlen(end));
- e = apr_bucket_pool_create(end, strlen(end), r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bsend, e);
- }
-
- e = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bsend, e);
-
- /* we're done with the original content - all of our data is in bsend. */
- apr_brigade_destroy(bb);
-
- /* send our multipart output */
- return ap_pass_brigade(f->next, bsend);
-}
-
-static int ap_set_byterange(request_rec *r)
-{
- const char *range;
- const char *if_range;
- const char *match;
- const char *ct;
- int num_ranges;
-
- if (r->assbackwards) {
- return 0;
- }
-
- /* Check for Range request-header (HTTP/1.1) or Request-Range for
- * backwards-compatibility with second-draft Luotonen/Franks
- * byte-ranges (e.g. Netscape Navigator 2-3).
- *
- * We support this form, with Request-Range, and (farther down) we
- * send multipart/x-byteranges instead of multipart/byteranges for
- * Request-Range based requests to work around a bug in Netscape
- * Navigator 2-3 and MSIE 3.
- */
-
- if (!(range = apr_table_get(r->headers_in, "Range"))) {
- range = apr_table_get(r->headers_in, "Request-Range");
- }
-
- if (!range || strncasecmp(range, "bytes=", 6) || r->status != HTTP_OK) {
- return 0;
- }
-
- /* is content already a single range? */
- if (apr_table_get(r->headers_out, "Content-Range")) {
- return 0;
- }
-
- /* is content already a multiple range? */
- if ((ct = apr_table_get(r->headers_out, "Content-Type"))
- && (!strncasecmp(ct, "multipart/byteranges", 20)
- || !strncasecmp(ct, "multipart/x-byteranges", 22))) {
- return 0;
- }
-
- /* Check the If-Range header for Etag or Date.
- * Note that this check will return false (as required) if either
- * of the two etags are weak.
- */
- if ((if_range = apr_table_get(r->headers_in, "If-Range"))) {
- if (if_range[0] == '"') {
- if (!(match = apr_table_get(r->headers_out, "Etag"))
- || (strcmp(if_range, match) != 0)) {
- return 0;
- }
- }
- else if (!(match = apr_table_get(r->headers_out, "Last-Modified"))
- || (strcmp(if_range, match) != 0)) {
- return 0;
- }
- }
-
- if (!ap_strchr_c(range, ',')) {
- /* a single range */
- num_ranges = 1;
- }
- else {
- /* a multiple range */
- num_ranges = 2;
- }
-
- r->status = HTTP_PARTIAL_CONTENT;
- r->range = range + 6;
-
- return num_ranges;
-}
diff --git a/modules/http/http_request.c b/modules/http/http_request.c
deleted file mode 100644
index 16abb0f456..0000000000
--- a/modules/http/http_request.c
+++ /dev/null
@@ -1,543 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_request.c: functions to get and process requests
- *
- * Rob McCool 3/21/93
- *
- * Thoroughly revamped by rst for Apache. NB this file reads
- * best from the bottom up.
- *
- */
-
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_fnmatch.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_filter.h"
-#include "util_charset.h"
-#include "scoreboard.h"
-
-#include "mod_core.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-/*****************************************************************
- *
- * Mainline request processing...
- */
-
-/* XXX A cleaner and faster way to do this might be to pass the request_rec
- * down the filter chain as a parameter. It would need to change for
- * subrequest vs. main request filters; perhaps the subrequest filter could
- * make the switch.
- */
-static void update_r_in_filters(ap_filter_t *f,
- request_rec *from,
- request_rec *to)
-{
- while (f) {
- if (f->r == from) {
- f->r = to;
- }
- f = f->next;
- }
-}
-
-AP_DECLARE(void) ap_die(int type, request_rec *r)
-{
- int error_index = ap_index_of_response(type);
- char *custom_response = ap_response_code_string(r, error_index);
- int recursive_error = 0;
- request_rec *r_1st_err = r;
-
- if (type == AP_FILTER_ERROR) {
- return;
- }
-
- if (type == DONE) {
- ap_finalize_request_protocol(r);
- return;
- }
-
- /*
- * The following takes care of Apache redirects to custom response URLs
- * Note that if we are already dealing with the response to some other
- * error condition, we just report on the original error, and give up on
- * any attempt to handle the other thing "intelligently"...
- */
- if (r->status != HTTP_OK) {
- recursive_error = type;
-
- while (r_1st_err->prev && (r_1st_err->prev->status != HTTP_OK))
- r_1st_err = r_1st_err->prev; /* Get back to original error */
-
- if (r_1st_err != r) {
- /* The recursive error was caused by an ErrorDocument specifying
- * an internal redirect to a bad URI. ap_internal_redirect has
- * changed the filter chains to point to the ErrorDocument's
- * request_rec. Back out those changes so we can safely use the
- * original failing request_rec to send the canned error message.
- *
- * ap_send_error_response gets rid of existing resource filters
- * on the output side, so we can skip those.
- */
- update_r_in_filters(r_1st_err->proto_output_filters, r, r_1st_err);
- update_r_in_filters(r_1st_err->input_filters, r, r_1st_err);
- }
-
- custom_response = NULL; /* Do NOT retry the custom thing! */
- }
-
- r->status = type;
-
- /*
- * This test is done here so that none of the auth modules needs to know
- * about proxy authentication. They treat it like normal auth, and then
- * we tweak the status.
- */
- if (HTTP_UNAUTHORIZED == r->status && PROXYREQ_PROXY == r->proxyreq) {
- r->status = HTTP_PROXY_AUTHENTICATION_REQUIRED;
- }
-
- /* If we don't want to keep the connection, make sure we mark that the
- * connection is not eligible for keepalive. If we want to keep the
- * connection, be sure that the request body (if any) has been read.
- */
- if (ap_status_drops_connection(r->status)) {
- r->connection->keepalive = AP_CONN_CLOSE;
- }
-
- /*
- * Two types of custom redirects --- plain text, and URLs. Plain text has
- * a leading '"', so the URL code, here, is triggered on its absence
- */
-
- if (custom_response && custom_response[0] != '"') {
-
- if (ap_is_url(custom_response)) {
- /*
- * The URL isn't local, so lets drop through the rest of this
- * apache code, and continue with the usual REDIRECT handler.
- * But note that the client will ultimately see the wrong
- * status...
- */
- r->status = HTTP_MOVED_TEMPORARILY;
- apr_table_setn(r->headers_out, "Location", custom_response);
- }
- else if (custom_response[0] == '/') {
- const char *error_notes;
- r->no_local_copy = 1; /* Do NOT send HTTP_NOT_MODIFIED for
- * error documents! */
- /*
- * This redirect needs to be a GET no matter what the original
- * method was.
- */
- apr_table_setn(r->subprocess_env, "REQUEST_METHOD", r->method);
-
- /*
- * Provide a special method for modules to communicate
- * more informative (than the plain canned) messages to us.
- * Propagate them to ErrorDocuments via the ERROR_NOTES variable:
- */
- if ((error_notes = apr_table_get(r->notes,
- "error-notes")) != NULL) {
- apr_table_setn(r->subprocess_env, "ERROR_NOTES", error_notes);
- }
- r->method = apr_pstrdup(r->pool, "GET");
- r->method_number = M_GET;
- ap_internal_redirect(custom_response, r);
- return;
- }
- else {
- /*
- * Dumb user has given us a bad url to redirect to --- fake up
- * dying with a recursive server error...
- */
- recursive_error = HTTP_INTERNAL_SERVER_ERROR;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid error redirection directive: %s",
- custom_response);
- }
- }
- ap_send_error_response(r_1st_err, recursive_error);
-}
-
-static void check_pipeline_flush(request_rec *r)
-{
- conn_rec *c = r->connection;
- /* ### if would be nice if we could PEEK without a brigade. that would
- ### allow us to defer creation of the brigade to when we actually
- ### need to send a FLUSH. */
- apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
-
- /* Flush the filter contents if:
- *
- * 1) the connection will be closed
- * 2) there isn't a request ready to be read
- */
- /* ### shouldn't this read from the connection input filters? */
- /* ### is zero correct? that means "read one line" */
- if (r->connection->keepalive == AP_CONN_CLOSE ||
- ap_get_brigade(r->input_filters, bb, AP_MODE_EATCRLF,
- APR_NONBLOCK_READ, 0) != APR_SUCCESS) {
- apr_bucket *e = apr_bucket_flush_create(c->bucket_alloc);
-
- /* We just send directly to the connection based filters. At
- * this point, we know that we have seen all of the data
- * (request finalization sent an EOS bucket, which empties all
- * of the request filters). We just want to flush the buckets
- * if something hasn't been sent to the network yet.
- */
- APR_BRIGADE_INSERT_HEAD(bb, e);
- ap_pass_brigade(r->connection->output_filters, bb);
- }
-}
-
-void ap_process_request(request_rec *r)
-{
- int access_status;
-
- /* Give quick handlers a shot at serving the request on the fast
- * path, bypassing all of the other Apache hooks.
- *
- * This hook was added to enable serving files out of a URI keyed
- * content cache ( e.g., Mike Abbott's Quick Shortcut Cache,
- * described here: http://oss.sgi.com/projects/apache/mod_qsc.html )
- *
- * It may have other uses as well, such as routing requests directly to
- * content handlers that have the ability to grok HTTP and do their
- * own access checking, etc (e.g. servlet engines).
- *
- * Use this hook with extreme care and only if you know what you are
- * doing.
- */
- access_status = ap_run_quick_handler(r, 0); /* Not a look-up request */
- if (access_status == DECLINED) {
- access_status = ap_process_request_internal(r);
- if (access_status == OK) {
- access_status = ap_invoke_handler(r);
- }
- }
-
- if (access_status == DONE) {
- /* e.g., something not in storage like TRACE */
- access_status = OK;
- }
-
- if (access_status == OK) {
- ap_finalize_request_protocol(r);
- }
- else {
- ap_die(access_status, r);
- }
-
- /*
- * We want to flush the last packet if this isn't a pipelining connection
- * *before* we start into logging. Suppose that the logging causes a DNS
- * lookup to occur, which may have a high latency. If we hold off on
- * this packet, then it'll appear like the link is stalled when really
- * it's the application that's stalled.
- */
- check_pipeline_flush(r);
- ap_update_child_status(r->connection->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
-}
-
-static apr_table_t *rename_original_env(apr_pool_t *p, apr_table_t *t)
-{
- const apr_array_header_t *env_arr = apr_table_elts(t);
- const apr_table_entry_t *elts = (const apr_table_entry_t *) env_arr->elts;
- apr_table_t *new = apr_table_make(p, env_arr->nalloc);
- int i;
-
- for (i = 0; i < env_arr->nelts; ++i) {
- if (!elts[i].key)
- continue;
- apr_table_setn(new, apr_pstrcat(p, "REDIRECT_", elts[i].key, NULL),
- elts[i].val);
- }
-
- return new;
-}
-
-static request_rec *internal_internal_redirect(const char *new_uri,
- request_rec *r) {
- int access_status;
- request_rec *new;
-
- if (ap_is_recursion_limit_exceeded(r)) {
- ap_die(HTTP_INTERNAL_SERVER_ERROR, r);
- return NULL;
- }
-
- new = (request_rec *) apr_pcalloc(r->pool, sizeof(request_rec));
-
- new->connection = r->connection;
- new->server = r->server;
- new->pool = r->pool;
-
- /*
- * A whole lot of this really ought to be shared with http_protocol.c...
- * another missing cleanup. It's particularly inappropriate to be
- * setting header_only, etc., here.
- */
-
- new->method = r->method;
- new->method_number = r->method_number;
- new->allowed_methods = ap_make_method_list(new->pool, 2);
- ap_parse_uri(new, new_uri);
-
- new->request_config = ap_create_request_config(r->pool);
-
- new->per_dir_config = r->server->lookup_defaults;
-
- new->prev = r;
- r->next = new;
-
- /* Must have prev and next pointers set before calling create_request
- * hook.
- */
- ap_run_create_request(new);
-
- /* Inherit the rest of the protocol info... */
-
- new->the_request = r->the_request;
-
- new->allowed = r->allowed;
-
- new->status = r->status;
- new->assbackwards = r->assbackwards;
- new->header_only = r->header_only;
- new->protocol = r->protocol;
- new->proto_num = r->proto_num;
- new->hostname = r->hostname;
- new->request_time = r->request_time;
- new->main = r->main;
-
- new->headers_in = r->headers_in;
- new->headers_out = apr_table_make(r->pool, 12);
- new->err_headers_out = r->err_headers_out;
- new->subprocess_env = rename_original_env(r->pool, r->subprocess_env);
- new->notes = apr_table_make(r->pool, 5);
- new->allowed_methods = ap_make_method_list(new->pool, 2);
-
- new->htaccess = r->htaccess;
- new->no_cache = r->no_cache;
- new->expecting_100 = r->expecting_100;
- new->no_local_copy = r->no_local_copy;
- new->read_length = r->read_length; /* We can only read it once */
- new->vlist_validator = r->vlist_validator;
-
- new->proto_output_filters = r->proto_output_filters;
- new->proto_input_filters = r->proto_input_filters;
-
- new->output_filters = new->proto_output_filters;
- new->input_filters = new->proto_input_filters;
-
- if (new->main) {
- /* Add back the subrequest filter, which we lost when
- * we set output_filters to include only the protocol
- * output filters from the original request.
- */
- ap_add_output_filter_handle(ap_subreq_core_filter_handle,
- NULL, new, new->connection);
- }
-
- update_r_in_filters(new->input_filters, r, new);
- update_r_in_filters(new->output_filters, r, new);
-
- apr_table_setn(new->subprocess_env, "REDIRECT_STATUS",
- apr_itoa(r->pool, r->status));
-
- /*
- * XXX: hmm. This is because mod_setenvif and mod_unique_id really need
- * to do their thing on internal redirects as well. Perhaps this is a
- * misnamed function.
- */
- if ((access_status = ap_run_post_read_request(new))) {
- ap_die(access_status, new);
- return NULL;
- }
-
- return new;
-}
-
-/* XXX: Is this function is so bogus and fragile that we deep-6 it? */
-AP_DECLARE(void) ap_internal_fast_redirect(request_rec *rr, request_rec *r)
-{
- /* We need to tell POOL_DEBUG that we're guaranteeing that rr->pool
- * will exist as long as r->pool. Otherwise we run into troubles because
- * some values in this request will be allocated in r->pool, and others in
- * rr->pool.
- */
- apr_pool_join(r->pool, rr->pool);
- r->proxyreq = rr->proxyreq;
- r->no_cache = (r->no_cache && rr->no_cache);
- r->no_local_copy = (r->no_local_copy && rr->no_local_copy);
- r->mtime = rr->mtime;
- r->uri = rr->uri;
- r->filename = rr->filename;
- r->canonical_filename = rr->canonical_filename;
- r->path_info = rr->path_info;
- r->args = rr->args;
- r->finfo = rr->finfo;
- r->handler = rr->handler;
- ap_set_content_type(r, rr->content_type);
- r->content_encoding = rr->content_encoding;
- r->content_languages = rr->content_languages;
- r->per_dir_config = rr->per_dir_config;
- /* copy output headers from subrequest, but leave negotiation headers */
- r->notes = apr_table_overlay(r->pool, rr->notes, r->notes);
- r->headers_out = apr_table_overlay(r->pool, rr->headers_out,
- r->headers_out);
- r->err_headers_out = apr_table_overlay(r->pool, rr->err_headers_out,
- r->err_headers_out);
- r->subprocess_env = apr_table_overlay(r->pool, rr->subprocess_env,
- r->subprocess_env);
-
- r->output_filters = rr->output_filters;
- r->input_filters = rr->input_filters;
-
- if (r->main) {
- ap_add_output_filter_handle(ap_subreq_core_filter_handle,
- NULL, r, r->connection);
- }
- else if (r->output_filters->frec == ap_subreq_core_filter_handle) {
- ap_remove_output_filter(r->output_filters);
- r->output_filters = r->output_filters->next;
- }
-
- /* If any filters pointed at the now-defunct rr, we must point them
- * at our "new" instance of r. In particular, some of rr's structures
- * will now be bogus (say rr->headers_out). If a filter tried to modify
- * their f->r structure when it is pointing to rr, the real request_rec
- * will not get updated. Fix that here.
- */
- update_r_in_filters(r->input_filters, rr, r);
- update_r_in_filters(r->output_filters, rr, r);
-}
-
-AP_DECLARE(void) ap_internal_redirect(const char *new_uri, request_rec *r)
-{
- request_rec *new = internal_internal_redirect(new_uri, r);
- int access_status;
-
- /* ap_die was already called, if an error occured */
- if (!new) {
- return;
- }
-
- access_status = ap_run_quick_handler(new, 0); /* Not a look-up request */
- if (access_status == DECLINED) {
- access_status = ap_process_request_internal(new);
- if (access_status == OK) {
- access_status = ap_invoke_handler(new);
- }
- }
- if (access_status == OK) {
- ap_finalize_request_protocol(new);
- }
- else {
- ap_die(access_status, new);
- }
-}
-
-/* This function is designed for things like actions or CGI scripts, when
- * using AddHandler, and you want to preserve the content type across
- * an internal redirect.
- */
-AP_DECLARE(void) ap_internal_redirect_handler(const char *new_uri, request_rec *r)
-{
- int access_status;
- request_rec *new = internal_internal_redirect(new_uri, r);
-
- /* ap_die was already called, if an error occured */
- if (!new) {
- return;
- }
-
- if (r->handler)
- ap_set_content_type(new, r->content_type);
- access_status = ap_process_request_internal(new);
- if (access_status == OK) {
- if ((access_status = ap_invoke_handler(new)) != 0) {
- ap_die(access_status, new);
- return;
- }
- ap_finalize_request_protocol(new);
- }
- else {
- ap_die(access_status, new);
- }
-}
-
-AP_DECLARE(void) ap_allow_methods(request_rec *r, int reset, ...)
-{
- const char *method;
- va_list methods;
-
- /*
- * Get rid of any current settings if requested; not just the
- * well-known methods but any extensions as well.
- */
- if (reset) {
- ap_clear_method_list(r->allowed_methods);
- }
-
- va_start(methods, reset);
- while ((method = va_arg(methods, const char *)) != NULL) {
- ap_method_list_add(r->allowed_methods, method);
- }
-}
-
-AP_DECLARE(void) ap_allow_standard_methods(request_rec *r, int reset, ...)
-{
- int method;
- va_list methods;
- apr_int64_t mask;
-
- /*
- * Get rid of any current settings if requested; not just the
- * well-known methods but any extensions as well.
- */
- if (reset) {
- ap_clear_method_list(r->allowed_methods);
- }
-
- mask = 0;
- va_start(methods, reset);
- while ((method = va_arg(methods, int)) != -1) {
- mask |= (AP_METHOD_BIT << method);
- }
- va_end(methods);
-
- r->allowed_methods->method_mask |= mask;
-}
diff --git a/modules/http/mod_core.h b/modules/http/mod_core.h
deleted file mode 100644
index 790c36e76c..0000000000
--- a/modules/http/mod_core.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_CORE_H
-#define MOD_CORE_H
-
-#include "apr.h"
-#include "apr_buckets.h"
-
-#include "httpd.h"
-#include "util_filter.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package mod_core private header file
- */
-
-/* Handles for core filters */
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_http_input_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_http_header_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_chunk_filter_handle;
-extern AP_DECLARE_DATA ap_filter_rec_t *ap_byterange_filter_handle;
-
-/*
- * These (input) filters are internal to the mod_core operation.
- */
-apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
- ap_input_mode_t mode, apr_read_type_e block,
- apr_off_t readbytes);
-
-char *ap_response_code_string(request_rec *r, int error_index);
-
-/**
- * Send the minimal part of an HTTP response header.
- * @param r The current request
- * @param bb The brigade to add the header to.
- * @warning Modules should be very careful about using this, and should
- * the default behavior. Much of the HTTP/1.1 implementation
- * correctness depends on the full headers.
- * @deffunc void ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
- */
-AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb);
-
-/**
- * Send an appropriate response to an http TRACE request.
- * @param r The current request
- * @tip returns DONE or the HTTP status error if it handles the TRACE,
- * or DECLINED if the request was not for TRACE.
- * request method was not TRACE.
- */
-AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r);
-
-/**
- * Send an appropriate response to an http OPTIONS request.
- * @param r The current request
- */
-AP_DECLARE(int) ap_send_http_options(request_rec *r);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !MOD_CORE_H */
diff --git a/modules/http/mod_mime.c b/modules/http/mod_mime.c
deleted file mode 100644
index cfbb737c3c..0000000000
--- a/modules/http/mod_mime.c
+++ /dev/null
@@ -1,990 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_mime.c: Sends/gets MIME headers for requests
- *
- * Rob McCool
- *
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "http_protocol.h"
-
-/* XXXX - fix me / EBCDIC
- * there was a cludge here which would use its
- * own version apr_isascii(). Indicating that
- * on some platforms that might be needed.
- *
- * #define OS_ASC(c) (c) -- for mere mortals
- * or
- * #define OS_ASC(c) (ebcdic2ascii[c]) -- for dino's
- *
- * #define apr_isascii(c) ((OS_ASC(c) & 0x80) == 0)
- */
-
-/* XXXXX - fix me - See note with NOT_PROXY
- */
-
-typedef struct attrib_info {
- char *name;
- int offset;
-} attrib_info;
-
-/* Information to which an extension can be mapped
- */
-typedef struct extension_info {
- char *forced_type; /* Additional AddTyped stuff */
- char *encoding_type; /* Added with AddEncoding... */
- char *language_type; /* Added with AddLanguage... */
- char *handler; /* Added with AddHandler... */
- char *charset_type; /* Added with AddCharset... */
- char *input_filters; /* Added with AddInputFilter... */
- char *output_filters; /* Added with AddOutputFilter... */
-} extension_info;
-
-#define MULTIMATCH_UNSET 0
-#define MULTIMATCH_ANY 1
-#define MULTIMATCH_NEGOTIATED 2
-#define MULTIMATCH_HANDLERS 4
-#define MULTIMATCH_FILTERS 8
-
-typedef struct {
- apr_hash_t *extension_mappings; /* Map from extension name to
- * extension_info structure */
-
- apr_array_header_t *remove_mappings; /* A simple list, walked once */
-
- char *default_language; /* Language if no AddLanguage ext found */
-
- int multimatch; /* Extensions to include in multiview matching
- * for filenames, e.g. Filters and Handlers
- */
- int use_path_info; /* If set to 0, only use filename.
- * If set to 1, append PATH_INFO to filename for
- * lookups.
- * If set to 2, this value is unset and is
- * effectively 0.
- */
-} mime_dir_config;
-
-typedef struct param_s {
- char *attr;
- char *val;
- struct param_s *next;
-} param;
-
-typedef struct {
- const char *type;
- apr_size_t type_len;
- const char *subtype;
- apr_size_t subtype_len;
- param *param;
-} content_type;
-
-static char tspecial[] = {
- '(', ')', '<', '>', '@', ',', ';', ':',
- '\\', '"', '/', '[', ']', '?', '=',
- '\0'
-};
-
-module AP_MODULE_DECLARE_DATA mime_module;
-
-static void *create_mime_dir_config(apr_pool_t *p, char *dummy)
-{
- mime_dir_config *new = apr_palloc(p, sizeof(mime_dir_config));
-
- new->extension_mappings = NULL;
- new->remove_mappings = NULL;
-
- new->default_language = NULL;
-
- new->multimatch = MULTIMATCH_UNSET;
-
- new->use_path_info = 2;
-
- return new;
-}
-/*
- * Overlay one hash table of extension_mappings onto another
- */
-static void *overlay_extension_mappings(apr_pool_t *p,
- const void *key,
- apr_ssize_t klen,
- const void *overlay_val,
- const void *base_val,
- const void *data)
-{
- extension_info *new_info = apr_palloc(p, sizeof(extension_info));
- const extension_info *overlay_info = (const extension_info *)overlay_val;
- const extension_info *base_info = (const extension_info *)base_val;
-
- memcpy(new_info, base_info, sizeof(extension_info));
- if (overlay_info->forced_type) {
- new_info->forced_type = overlay_info->forced_type;
- }
- if (overlay_info->encoding_type) {
- new_info->encoding_type = overlay_info->encoding_type;
- }
- if (overlay_info->language_type) {
- new_info->language_type = overlay_info->language_type;
- }
- if (overlay_info->handler) {
- new_info->handler = overlay_info->handler;
- }
- if (overlay_info->charset_type) {
- new_info->charset_type = overlay_info->charset_type;
- }
- if (overlay_info->input_filters) {
- new_info->input_filters = overlay_info->input_filters;
- }
- if (overlay_info->output_filters) {
- new_info->output_filters = overlay_info->output_filters;
- }
-
- return new_info;
-}
-
-/* Member is the offset within an extension_info of the pointer to reset
- */
-static void remove_items(apr_pool_t *p, apr_array_header_t *remove,
- apr_hash_t *mappings)
-{
- attrib_info *suffix = (attrib_info *) remove->elts;
- int i;
- for (i = 0; i < remove->nelts; i++) {
- extension_info *exinfo = apr_hash_get(mappings,
- suffix[i].name,
- APR_HASH_KEY_STRING);
- if (exinfo && *(const char**)((char *)exinfo + suffix[i].offset)) {
- extension_info *copyinfo = exinfo;
- exinfo = (extension_info*)apr_palloc(p, sizeof(*exinfo));
- apr_hash_set(mappings, suffix[i].name,
- APR_HASH_KEY_STRING, exinfo);
- memcpy(exinfo, copyinfo, sizeof(*exinfo));
- *(const char**)((char *)exinfo + suffix[i].offset) = NULL;
- }
- }
-}
-
-static void *merge_mime_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- mime_dir_config *base = (mime_dir_config *)basev;
- mime_dir_config *add = (mime_dir_config *)addv;
- mime_dir_config *new = apr_palloc(p, sizeof(mime_dir_config));
-
- if (base->extension_mappings && add->extension_mappings) {
- new->extension_mappings = apr_hash_merge(p, add->extension_mappings,
- base->extension_mappings,
- overlay_extension_mappings,
- NULL);
- }
- else {
- if (base->extension_mappings == NULL) {
- new->extension_mappings = add->extension_mappings;
- }
- else {
- new->extension_mappings = base->extension_mappings;
- }
- /* We may not be merging the tables, but if we potentially will change
- * an exinfo member, then we are about to trounce it anyways.
- * We must have a copy for safety.
- */
- if (new->extension_mappings && add->remove_mappings) {
- new->extension_mappings =
- apr_hash_copy(p, new->extension_mappings);
- }
- }
-
- if (new->extension_mappings) {
- if (add->remove_mappings)
- remove_items(p, add->remove_mappings, new->extension_mappings);
- }
- new->remove_mappings = NULL;
-
- new->default_language = add->default_language ?
- add->default_language : base->default_language;
-
- new->multimatch = (add->multimatch != MULTIMATCH_UNSET) ?
- add->multimatch : base->multimatch;
-
- if ((add->use_path_info & 2) == 0) {
- new->use_path_info = add->use_path_info;
- }
- else {
- new->use_path_info = base->use_path_info;
- }
-
- return new;
-}
-
-static const char *add_extension_info(cmd_parms *cmd, void *m_,
- const char *value_, const char* ext)
-{
- mime_dir_config *m=m_;
- extension_info *exinfo;
- int offset = (int) (long) cmd->info;
- char *key = apr_pstrdup(cmd->temp_pool, ext);
- char *value = apr_pstrdup(cmd->pool, value_);
- ap_str_tolower(value);
- ap_str_tolower(key);
-
- if (*key == '.') {
- ++key;
- }
- if (!m->extension_mappings) {
- m->extension_mappings = apr_hash_make(cmd->pool);
- exinfo = NULL;
- }
- else {
- exinfo = (extension_info*)apr_hash_get(m->extension_mappings, key,
- APR_HASH_KEY_STRING);
- }
- if (!exinfo) {
- exinfo = apr_pcalloc(cmd->pool, sizeof(extension_info));
- key = apr_pstrdup(cmd->pool, key);
- apr_hash_set(m->extension_mappings, key, APR_HASH_KEY_STRING, exinfo);
- }
- *(const char**)((char *)exinfo + offset) = value;
- return NULL;
-}
-
-/*
- * Note handler names are un-added with each per_dir_config merge.
- * This keeps the association from being inherited, but not
- * from being re-added at a subordinate level.
- */
-static const char *remove_extension_info(cmd_parms *cmd, void *m_,
- const char *ext)
-{
- mime_dir_config *m = (mime_dir_config *) m_;
- attrib_info *suffix;
- if (*ext == '.') {
- ++ext;
- }
- if (!m->remove_mappings) {
- m->remove_mappings = apr_array_make(cmd->pool, 4, sizeof(*suffix));
- }
- suffix = (attrib_info *)apr_array_push(m->remove_mappings);
- suffix->name = apr_pstrdup(cmd->pool, ext);
- ap_str_tolower(suffix->name);
- suffix->offset = (int) (long) cmd->info;
- return NULL;
-}
-
-/* The sole bit of server configuration that the MIME module has is
- * the name of its config file, so...
- */
-
-static const char *set_types_config(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- ap_set_module_config(cmd->server->module_config, &mime_module,
- (void *)arg);
- return NULL;
-}
-
-static const char *multiviews_match(cmd_parms *cmd, void *m_,
- const char *include)
-{
- mime_dir_config *m = (mime_dir_config *) m_;
-
- if (strcasecmp(include, "Any") == 0) {
- if (m->multimatch && (m->multimatch & ~MULTIMATCH_ANY)) {
- return "Any is incompatible with NegotiatedOnly, "
- "Filters and Handlers";
- }
- m->multimatch |= MULTIMATCH_ANY;
- }
- else if (strcasecmp(include, "NegotiatedOnly") == 0) {
- if (m->multimatch && (m->multimatch & ~MULTIMATCH_NEGOTIATED)) {
- return "NegotiatedOnly is incompatible with Any, "
- "Filters and Handlers";
- }
- m->multimatch |= MULTIMATCH_NEGOTIATED;
- }
- else if (strcasecmp(include, "Filters") == 0) {
- if (m->multimatch && (m->multimatch & (MULTIMATCH_NEGOTIATED
- | MULTIMATCH_ANY))) {
- return "Filters is incompatible with Any and NegotiatedOnly";
- }
- m->multimatch |= MULTIMATCH_FILTERS;
- }
- else if (strcasecmp(include, "Handlers") == 0) {
- if (m->multimatch && (m->multimatch & (MULTIMATCH_NEGOTIATED
- | MULTIMATCH_ANY))) {
- return "Handlers is incompatible with Any and NegotiatedOnly";
- }
- m->multimatch |= MULTIMATCH_HANDLERS;
- }
- else {
- return apr_psprintf(cmd->pool, "Unrecognized option '%s'", include);
- }
-
- return NULL;
-}
-
-static const command_rec mime_cmds[] =
-{
- AP_INIT_ITERATE2("AddCharset", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, charset_type), OR_FILEINFO,
- "a charset (e.g., iso-2022-jp), followed by one or more "
- "file extensions"),
- AP_INIT_ITERATE2("AddEncoding", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, encoding_type), OR_FILEINFO,
- "an encoding (e.g., gzip), followed by one or more file extensions"),
- AP_INIT_ITERATE2("AddHandler", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, handler), OR_FILEINFO,
- "a handler name followed by one or more file extensions"),
- AP_INIT_ITERATE2("AddInputFilter", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, input_filters), OR_FILEINFO,
- "input filter name (or ; delimited names) followed by one or "
- "more file extensions"),
- AP_INIT_ITERATE2("AddLanguage", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, language_type), OR_FILEINFO,
- "a language (e.g., fr), followed by one or more file extensions"),
- AP_INIT_ITERATE2("AddOutputFilter", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, output_filters), OR_FILEINFO,
- "output filter name (or ; delimited names) followed by one or "
- "more file extensions"),
- AP_INIT_ITERATE2("AddType", add_extension_info,
- (void *)APR_OFFSETOF(extension_info, forced_type), OR_FILEINFO,
- "a mime type followed by one or more file extensions"),
- AP_INIT_TAKE1("DefaultLanguage", ap_set_string_slot,
- (void*)APR_OFFSETOF(mime_dir_config, default_language), OR_FILEINFO,
- "language to use for documents with no other language file extension"),
- AP_INIT_ITERATE("MultiviewsMatch", multiviews_match, NULL, OR_FILEINFO,
- "NegotiatedOnly (default), Handlers and/or Filters, or Any"),
- AP_INIT_ITERATE("RemoveCharset", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, charset_type), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_ITERATE("RemoveEncoding", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, encoding_type), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_ITERATE("RemoveHandler", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, handler), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_ITERATE("RemoveInputFilter", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, input_filters), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_ITERATE("RemoveLanguage", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, language_type), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_ITERATE("RemoveOutputFilter", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, output_filters), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_ITERATE("RemoveType", remove_extension_info,
- (void *)APR_OFFSETOF(extension_info, forced_type), OR_FILEINFO,
- "one or more file extensions"),
- AP_INIT_TAKE1("TypesConfig", set_types_config, NULL, RSRC_CONF,
- "the MIME types config file"),
- AP_INIT_FLAG("ModMimeUsePathInfo", ap_set_flag_slot,
- (void *)APR_OFFSETOF(mime_dir_config, use_path_info), ACCESS_CONF,
- "Set to 'yes' to allow mod_mime to use path info for type checking"),
- {NULL}
-};
-
-static apr_hash_t *mime_type_extensions;
-
-static int mime_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- ap_configfile_t *f;
- char l[MAX_STRING_LEN];
- const char *types_confname = ap_get_module_config(s->module_config,
- &mime_module);
- apr_status_t status;
-
- if (!types_confname) {
- types_confname = AP_TYPES_CONFIG_FILE;
- }
-
- types_confname = ap_server_root_relative(p, types_confname);
- if (!types_confname) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
- "Invalid mime types config path %s",
- (const char *)ap_get_module_config(s->module_config,
- &mime_module));
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- if ((status = ap_pcfg_openfile(&f, ptemp, types_confname))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, status, s,
- "could not open mime types config file %s.",
- types_confname);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- mime_type_extensions = apr_hash_make(p);
-
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
- const char *ll = l, *ct;
-
- if (l[0] == '#') {
- continue;
- }
- ct = ap_getword_conf(p, &ll);
-
- while (ll[0]) {
- char *ext = ap_getword_conf(p, &ll);
- ap_str_tolower(ext);
- apr_hash_set(mime_type_extensions, ext, APR_HASH_KEY_STRING, ct);
- }
- }
- ap_cfg_closefile(f);
- return OK;
-}
-
-static const char *zap_sp(const char *s)
-{
- if (s == NULL) {
- return (NULL);
- }
- if (*s == '\0') {
- return (s);
- }
-
- /* skip prefixed white space */
- for (; *s == ' ' || *s == '\t' || *s == '\n'; s++)
- ;
-
- return (s);
-}
-
-static char *zap_sp_and_dup(apr_pool_t *p, const char *start,
- const char *end, apr_size_t *len)
-{
- while ((start < end) && apr_isspace(*start)) {
- start++;
- }
- while ((end > start) && apr_isspace(*(end - 1))) {
- end--;
- }
- if (len) {
- *len = end - start;
- }
- return apr_pstrmemdup(p, start, end - start);
-}
-
-static int is_token(char c)
-{
- int res;
-
- res = (apr_isascii(c) && apr_isgraph(c)
- && (strchr(tspecial, c) == NULL)) ? 1 : -1;
- return res;
-}
-
-static int is_qtext(char c)
-{
- int res;
-
- res = (apr_isascii(c) && (c != '"') && (c != '\\') && (c != '\n'))
- ? 1 : -1;
- return res;
-}
-
-static int is_quoted_pair(const char *s)
-{
- int res = -1;
- int c;
-
- if (((s + 1) != NULL) && (*s == '\\')) {
- c = (int) *(s + 1);
- if (apr_isascii(c)) {
- res = 1;
- }
- }
- return (res);
-}
-
-static content_type *analyze_ct(request_rec *r, const char *s)
-{
- const char *cp, *mp;
- char *attribute, *value;
- int quoted = 0;
- server_rec * ss = r->server;
- apr_pool_t * p = r->pool;
-
- content_type *ctp;
- param *pp, *npp;
-
- /* initialize ctp */
- ctp = (content_type *)apr_palloc(p, sizeof(content_type));
- ctp->type = NULL;
- ctp->subtype = NULL;
- ctp->param = NULL;
-
- mp = s;
-
- /* getting a type */
- cp = mp;
- while (apr_isspace(*cp)) {
- cp++;
- }
- if (!*cp) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "mod_mime: analyze_ct: cannot get media type from '%s'",
- (const char *) mp);
- return (NULL);
- }
- ctp->type = cp;
- do {
- cp++;
- } while (*cp && (*cp != '/') && !apr_isspace(*cp) && (*cp != ';'));
- if (!*cp || (*cp == ';')) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media type from '%s'",
- (const char *) mp);
- return (NULL);
- }
- while (apr_isspace(*cp)) {
- cp++;
- }
- if (*cp != '/') {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "mod_mime: analyze_ct: cannot get media type from '%s'",
- (const char *) mp);
- return (NULL);
- }
- ctp->type_len = cp - ctp->type;
-
- cp++; /* skip the '/' */
-
- /* getting a subtype */
- while (apr_isspace(*cp)) {
- cp++;
- }
- if (!*cp) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media subtype.");
- return (NULL);
- }
- ctp->subtype = cp;
- do {
- cp++;
- } while (*cp && !apr_isspace(*cp) && (*cp != ';'));
- ctp->subtype_len = cp - ctp->subtype;
- while (apr_isspace(*cp)) {
- cp++;
- }
-
- if (*cp == '\0') {
- return (ctp);
- }
-
- /* getting parameters */
- cp++; /* skip the ';' */
- cp = zap_sp(cp);
- if (cp == NULL || *cp == '\0') {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
- mp = cp;
- attribute = NULL;
- value = NULL;
-
- while (cp != NULL && *cp != '\0') {
- if (attribute == NULL) {
- if (is_token(*cp) > 0) {
- cp++;
- continue;
- }
- else if (*cp == ' ' || *cp == '\t' || *cp == '\n') {
- cp++;
- continue;
- }
- else if (*cp == '=') {
- attribute = zap_sp_and_dup(p, mp, cp, NULL);
- if (attribute == NULL || *attribute == '\0') {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
- cp++;
- cp = zap_sp(cp);
- if (cp == NULL || *cp == '\0') {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
- mp = cp;
- continue;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
- }
- else {
- if (mp == cp) {
- if (*cp == '"') {
- quoted = 1;
- cp++;
- }
- else {
- quoted = 0;
- }
- }
- if (quoted > 0) {
- while (quoted && *cp != '\0') {
- if (is_qtext(*cp) > 0) {
- cp++;
- }
- else if (is_quoted_pair(cp) > 0) {
- cp += 2;
- }
- else if (*cp == '"') {
- cp++;
- while (*cp == ' ' || *cp == '\t' || *cp == '\n') {
- cp++;
- }
- if (*cp != ';' && *cp != '\0') {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return(NULL);
- }
- quoted = 0;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
- }
- }
- else {
- while (1) {
- if (is_token(*cp) > 0) {
- cp++;
- }
- else if (*cp == '\0' || *cp == ';') {
- break;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
- }
- }
- value = zap_sp_and_dup(p, mp, cp, NULL);
- if (value == NULL || *value == '\0') {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
- "Cannot get media parameter.");
- return (NULL);
- }
-
- pp = apr_palloc(p, sizeof(param));
- pp->attr = attribute;
- pp->val = value;
- pp->next = NULL;
-
- if (ctp->param == NULL) {
- ctp->param = pp;
- }
- else {
- npp = ctp->param;
- while (npp->next) {
- npp = npp->next;
- }
- npp->next = pp;
- }
- quoted = 0;
- attribute = NULL;
- value = NULL;
- if (*cp == '\0') {
- break;
- }
- cp++;
- mp = cp;
- }
- }
- return (ctp);
-}
-
-/*
- * find_ct is the hook routine for determining content-type and other
- * MIME-related metadata. It assumes that r->filename has already been
- * set and stat has been called for r->finfo. It also assumes that the
- * non-path base file name is not the empty string unless it is a dir.
- */
-static int find_ct(request_rec *r)
-{
- mime_dir_config *conf;
- apr_array_header_t *exception_list;
- char *ext;
- const char *fn, *type, *charset = NULL, *resource_name;
- int found_metadata = 0;
-
- if (r->finfo.filetype == APR_DIR) {
- ap_set_content_type(r, DIR_MAGIC_TYPE);
- return OK;
- }
-
- if (!r->filename) {
- return DECLINED;
- }
-
- conf = (mime_dir_config *)ap_get_module_config(r->per_dir_config,
- &mime_module);
- exception_list = apr_array_make(r->pool, 2, sizeof(char *));
-
- /* If use_path_info is explicitly set to on (value & 1 == 1), append. */
- if (conf->use_path_info & 1) {
- resource_name = apr_pstrcat(r->pool, r->filename, r->path_info, NULL);
- }
- else {
- resource_name = r->filename;
- }
-
- /* Always drop the path leading up to the file name.
- */
- if ((fn = ap_strrchr_c(resource_name, '/')) == NULL) {
- fn = resource_name;
- }
- else {
- ++fn;
- }
-
- /* The exception list keeps track of those filename components that
- * are not associated with extensions indicating metadata.
- * The base name is always the first exception (i.e., "txt.html" has
- * a basename of "txt" even though it might look like an extension).
- */
- ext = ap_getword(r->pool, &fn, '.');
- *((const char **)apr_array_push(exception_list)) = ext;
-
- /* Parse filename extensions which can be in any order
- */
- while (*fn && (ext = ap_getword(r->pool, &fn, '.'))) {
- const extension_info *exinfo = NULL;
- int found;
-
- if (*ext == '\0') { /* ignore empty extensions "bad..html" */
- continue;
- }
-
- found = 0;
-
- ap_str_tolower(ext);
-
- if (conf->extension_mappings != NULL) {
- exinfo = (extension_info*)apr_hash_get(conf->extension_mappings,
- ext, APR_HASH_KEY_STRING);
- }
-
- if (exinfo == NULL || !exinfo->forced_type) {
- if ((type = apr_hash_get(mime_type_extensions, ext,
- APR_HASH_KEY_STRING)) != NULL) {
- ap_set_content_type(r, (char*) type);
- found = 1;
- }
- }
-
- if (exinfo != NULL) {
-
- if (exinfo->forced_type) {
- ap_set_content_type(r, exinfo->forced_type);
- found = 1;
- }
-
- if (exinfo->charset_type) {
- charset = exinfo->charset_type;
- found = 1;
- }
- if (exinfo->language_type) {
- if (!r->content_languages) {
- r->content_languages = apr_array_make(r->pool, 2,
- sizeof(char *));
- }
- *((const char **)apr_array_push(r->content_languages))
- = exinfo->language_type;
- found = 1;
- }
- if (exinfo->encoding_type) {
- if (!r->content_encoding) {
- r->content_encoding = exinfo->encoding_type;
- }
- else {
- /* XXX should eliminate duplicate entities
- *
- * ah no. Order is important and double encoding is neither
- * forbidden nor impossible. -- nd
- */
- r->content_encoding = apr_pstrcat(r->pool,
- r->content_encoding,
- ", ",
- exinfo->encoding_type,
- NULL);
- }
- found = 1;
- }
- /* The following extensions are not 'Found'. That is, they don't
- * make any contribution to metadata negotation, so they must have
- * been explicitly requested by name.
- */
- if (exinfo->handler && r->proxyreq == PROXYREQ_NONE) {
- r->handler = exinfo->handler;
- if (conf->multimatch & MULTIMATCH_HANDLERS) {
- found = 1;
- }
- }
- /* XXX Two significant problems; 1, we don't check to see if we are
- * setting redundant filters. 2, we insert these in the types config
- * hook, which may be too early (dunno.)
- */
- if (exinfo->input_filters && r->proxyreq == PROXYREQ_NONE) {
- const char *filter, *filters = exinfo->input_filters;
- while (*filters
- && (filter = ap_getword(r->pool, &filters, ';'))) {
- ap_add_input_filter(filter, NULL, r, r->connection);
- }
- if (conf->multimatch & MULTIMATCH_FILTERS) {
- found = 1;
- }
- }
- if (exinfo->output_filters && r->proxyreq == PROXYREQ_NONE) {
- const char *filter, *filters = exinfo->output_filters;
- while (*filters
- && (filter = ap_getword(r->pool, &filters, ';'))) {
- ap_add_output_filter(filter, NULL, r, r->connection);
- }
- if (conf->multimatch & MULTIMATCH_FILTERS) {
- found = 1;
- }
- }
- }
-
- if (found || (conf->multimatch & MULTIMATCH_ANY)) {
- found_metadata = 1;
- }
- else {
- *((const char **) apr_array_push(exception_list)) = ext;
- }
- }
-
- /*
- * Need to set a notes entry on r for unrecognized elements.
- * Somebody better claim them! If we did absolutely nothing,
- * skip the notes to alert mod_negotiation we are clueless.
- */
- if (found_metadata) {
- apr_table_setn(r->notes, "ap-mime-exceptions-list",
- (void *)exception_list);
- }
-
- if (r->content_type) {
- content_type *ctp;
- int override = 0;
-
- if ((ctp = analyze_ct(r, r->content_type))) {
- param *pp = ctp->param;
- char *base_content_type = apr_palloc(r->pool, ctp->type_len +
- ctp->subtype_len +
- sizeof("/"));
- char *tmp = base_content_type;
- memcpy(tmp, ctp->type, ctp->type_len);
- tmp += ctp->type_len;
- *tmp++ = '/';
- memcpy(tmp, ctp->subtype, ctp->subtype_len);
- tmp += ctp->subtype_len;
- *tmp = 0;
- ap_set_content_type(r, base_content_type);
- while (pp != NULL) {
- if (charset && !strcmp(pp->attr, "charset")) {
- if (!override) {
- ap_set_content_type(r,
- apr_pstrcat(r->pool,
- r->content_type,
- "; charset=",
- charset,
- NULL));
- override = 1;
- }
- }
- else {
- ap_set_content_type(r,
- apr_pstrcat(r->pool,
- r->content_type,
- "; ", pp->attr,
- "=", pp->val,
- NULL));
- }
- pp = pp->next;
- }
- if (charset && !override) {
- ap_set_content_type(r, apr_pstrcat(r->pool, r->content_type,
- "; charset=", charset,
- NULL));
- }
- }
- }
-
- /* Set default language, if none was specified by the extensions
- * and we have a DefaultLanguage setting in force
- */
-
- if (!r->content_languages && conf->default_language) {
- const char **new;
-
- if (!r->content_languages) {
- r->content_languages = apr_array_make(r->pool, 2, sizeof(char *));
- }
- new = (const char **)apr_array_push(r->content_languages);
- *new = conf->default_language;
- }
-
- if (!r->content_type) {
- return DECLINED;
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_post_config(mime_post_config,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_type_checker(find_ct,NULL,NULL,APR_HOOK_MIDDLE);
- /*
- * this hook seems redundant ... is there any reason a type checker isn't
- * allowed to do this already? I'd think that fixups in general would be
- * the last opportunity to get the filters right.
- * ap_hook_insert_filter(mime_insert_filters,NULL,NULL,APR_HOOK_MIDDLE);
- */
-}
-
-module AP_MODULE_DECLARE_DATA mime_module = {
- STANDARD20_MODULE_STUFF,
- create_mime_dir_config, /* create per-directory config structure */
- merge_mime_dir_configs, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- mime_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/http/mod_mime.dsp b/modules/http/mod_mime.dsp
deleted file mode 100644
index ac62801cf1..0000000000
--- a/modules/http/mod_mime.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_mime" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_mime - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_mime.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_mime.mak" CFG="mod_mime - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_mime - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_mime - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_mime - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_mime_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_mime - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_mime_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_mime - Win32 Release"
-# Name "mod_mime - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_mime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_mime.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_mime - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_mime.so "mime_module for Apache" ../../include/ap_release.h > .\mod_mime.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_mime - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_mime.so "mime_module for Apache" ../../include/ap_release.h > .\mod_mime.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/http/mod_mime.exp b/modules/http/mod_mime.exp
deleted file mode 100644
index f2e38dbdda..0000000000
--- a/modules/http/mod_mime.exp
+++ /dev/null
@@ -1 +0,0 @@
-mime_module
diff --git a/modules/loggers/.cvsignore b/modules/loggers/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/loggers/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/loggers/.indent.pro b/modules/loggers/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/loggers/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/loggers/Makefile.in b/modules/loggers/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/loggers/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/loggers/NWGNUforensic b/modules/loggers/NWGNUforensic
deleted file mode 100644
index 561922eae5..0000000000
--- a/modules/loggers/NWGNUforensic
+++ /dev/null
@@ -1,261 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = forensic
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Forensic Logging Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Forensic Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/forensic.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_log_forensic.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- log_forensic_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/loggers/NWGNUmakefile b/modules/loggers/NWGNUmakefile
deleted file mode 100644
index 9c42c52fd0..0000000000
--- a/modules/loggers/NWGNUmakefile
+++ /dev/null
@@ -1,247 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/modlogio.nlm \
- $(OBJDIR)/forensic.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/loggers/NWGNUmodlogio b/modules/loggers/NWGNUmodlogio
deleted file mode 100644
index 21d68b9673..0000000000
--- a/modules/loggers/NWGNUmodlogio
+++ /dev/null
@@ -1,261 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = logio
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) IO Logging Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Logio Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/modlogio.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_logio.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- logio_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-
diff --git a/modules/loggers/config.m4 b/modules/loggers/config.m4
deleted file mode 100644
index 2d1d142b0c..0000000000
--- a/modules/loggers/config.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(loggers)
-
-APACHE_MODULE(log_config, logging configuration, , , yes)
-APACHE_MODULE(log_forensic, forensic logging)
-
-if test "x$enable_log_forensic" != "xno"; then
- # mod_log_forensic needs test_char.h
- APR_ADDTO(INCLUDES, [-I\$(top_builddir)/server])
-fi
-
-APACHE_MODULE(logio, input and output logging, , , most)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/loggers/mod_log_config.c b/modules/loggers/mod_log_config.c
deleted file mode 100644
index 96df3fa434..0000000000
--- a/modules/loggers/mod_log_config.c
+++ /dev/null
@@ -1,1521 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Modified by djm@va.pubnix.com:
- * If no TransferLog is given explicitly, decline to log.
- *
- * This is module implements the TransferLog directive (same as the
- * common log module), and additional directives, LogFormat and CustomLog.
- *
- *
- * Syntax:
- *
- * TransferLog fn Logs transfers to fn in standard log format, unless
- * a custom format is set with LogFormat
- * LogFormat format Set a log format from TransferLog files
- * CustomLog fn format
- * Log to file fn with format given by the format
- * argument
- *
- * CookieLog fn For backwards compatability with old Cookie
- * logging module - now deprecated.
- *
- * There can be any number of TransferLog and CustomLog
- * commands. Each request will be logged to _ALL_ the
- * named files, in the appropriate format.
- *
- * If no TransferLog or CustomLog directive appears in a VirtualHost,
- * the request will be logged to the log file(s) defined outside
- * the virtual host section. If a TransferLog or CustomLog directive
- * appears in the VirtualHost section, the log files defined outside
- * the VirtualHost will _not_ be used. This makes this module compatable
- * with the CLF and config log modules, where the use of TransferLog
- * inside the VirtualHost section overrides its use outside.
- *
- * Examples:
- *
- * TransferLog logs/access_log
- * <VirtualHost>
- * LogFormat "... custom format ..."
- * TransferLog log/virtual_only
- * CustomLog log/virtual_useragents "%t %{user-agent}i"
- * </VirtualHost>
- *
- * This will log using CLF to access_log any requests handled by the
- * main server, while any requests to the virtual host will be logged
- * with the "... custom format..." to virtual_only _AND_ using
- * the custom user-agent log to virtual_useragents.
- *
- * Note that the NCSA referer and user-agent logs are easily added with
- * CustomLog:
- * CustomLog logs/referer "%{referer}i -> %U"
- * CustomLog logs/agent "%{user-agent}i"
- *
- * RefererIgnore functionality can be obtained with conditional
- * logging (SetEnvIf and CustomLog ... env=!VAR).
- *
- * But using this method allows much easier modification of the
- * log format, e.g. to log hosts along with UA:
- * CustomLog logs/referer "%{referer}i %U %h"
- *
- * The argument to LogFormat and CustomLog is a string, which can include
- * literal characters copied into the log files, and '%' directives as
- * follows:
- *
- * %...B: bytes sent, excluding HTTP headers.
- * %...b: bytes sent, excluding HTTP headers in CLF format, i.e. a '-'
- * when no bytes where sent (rather than a '0'.
- * %...{FOOBAR}C: The contents of the HTTP cookie FOOBAR
- * %...{FOOBAR}e: The contents of the environment variable FOOBAR
- * %...f: filename
- * %...h: remote host
- * %...a: remote IP-address
- * %...A: local IP-address
- * %...{Foobar}i: The contents of Foobar: header line(s) in the request
- * sent to the client.
- * %...l: remote logname (from identd, if supplied)
- * %...{Foobar}n: The contents of note "Foobar" from another module.
- * %...{Foobar}o: The contents of Foobar: header line(s) in the reply.
- * %...p: the port the request was served to
- * %...P: the process ID of the child that serviced the request.
- * %...{format}P: the process ID or thread ID of the child/thread that
- * serviced the request
- * %...r: first line of request
- * %...s: status. For requests that got internally redirected, this
- * is status of the *original* request --- %...>s for the last.
- * %...t: time, in common log format time format
- * %...{format}t: The time, in the form given by format, which should
- * be in strftime(3) format.
- * %...T: the time taken to serve the request, in seconds.
- * %...D: the time taken to serve the request, in micro seconds.
- * %...u: remote user (from auth; may be bogus if return status (%s) is 401)
- * %...U: the URL path requested.
- * %...v: the configured name of the server (i.e. which virtual host?)
- * %...V: the server name according to the UseCanonicalName setting
- * %...m: the request method
- * %...H: the request protocol
- * %...q: the query string prepended by "?", or empty if no query string
- * %...X: Status of the connection.
- * 'X' = connection aborted before the response completed.
- * '+' = connection may be kept alive after the response is sent.
- * '-' = connection will be closed after the response is sent.
- (This directive was %...c in late versions of Apache 1.3, but
- this conflicted with the historical ssl %...{var}c syntax.)
-*
- * The '...' can be nothing at all (e.g. "%h %u %r %s %b"), or it can
- * indicate conditions for inclusion of the item (which will cause it
- * to be replaced with '-' if the condition is not met). Note that
- * there is no escaping performed on the strings from %r, %...i and
- * %...o; some with long memories may remember that I thought this was
- * a bad idea, once upon a time, and I'm still not comfortable with
- * it, but it is difficult to see how to "do the right thing" with all
- * of '%..i', unless we URL-escape everything and break with CLF.
- *
- * The forms of condition are a list of HTTP status codes, which may
- * or may not be preceded by '!'. Thus, '%400,501{User-agent}i' logs
- * User-agent: on 400 errors and 501 errors (Bad Request, Not
- * Implemented) only; '%!200,304,302{Referer}i' logs Referer: on all
- * requests which did *not* return some sort of normal status.
- *
- * The default LogFormat reproduces CLF; see below.
- *
- * The way this is supposed to work with virtual hosts is as follows:
- * a virtual host can have its own LogFormat, or its own TransferLog.
- * If it doesn't have its own LogFormat, it inherits from the main
- * server. If it doesn't have its own TransferLog, it writes to the
- * same descriptor (meaning the same process for "| ...").
- *
- * --- rst */
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-#include "apr_optional.h"
-#include "apr_anylock.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "mod_log_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h" /* For REMOTE_NAME */
-#include "http_log.h"
-#include "http_protocol.h"
-#include "util_time.h"
-#include "ap_mpm.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#define DEFAULT_LOG_FORMAT "%h %l %u %t \"%r\" %>s %b"
-
-module AP_MODULE_DECLARE_DATA log_config_module;
-
-
-static int xfer_flags = (APR_WRITE | APR_APPEND | APR_CREATE | APR_LARGEFILE);
-static apr_fileperms_t xfer_perms = APR_OS_DEFAULT;
-static apr_hash_t *log_hash;
-static apr_status_t ap_default_log_writer(request_rec *r,
- void *handle,
- const char **strs,
- int *strl,
- int nelts,
- apr_size_t len);
-static apr_status_t ap_buffered_log_writer(request_rec *r,
- void *handle,
- const char **strs,
- int *strl,
- int nelts,
- apr_size_t len);
-static void *ap_default_log_writer_init(apr_pool_t *p, server_rec *s,
- const char* name);
-static void *ap_buffered_log_writer_init(apr_pool_t *p, server_rec *s,
- const char* name);
-
-static ap_log_writer_init* ap_log_set_writer_init(ap_log_writer_init *handle);
-static ap_log_writer* ap_log_set_writer(ap_log_writer *handle);
-static ap_log_writer *log_writer = ap_default_log_writer;
-static ap_log_writer_init *log_writer_init = ap_default_log_writer_init;
-static int buffered_logs = 0; /* default unbuffered */
-static apr_array_header_t *all_buffered_logs = NULL;
-
-/* POSIX.1 defines PIPE_BUF as the maximum number of bytes that is
- * guaranteed to be atomic when writing a pipe. And PIPE_BUF >= 512
- * is guaranteed. So we'll just guess 512 in the event the system
- * doesn't have this. Now, for file writes there is actually no limit,
- * the entire write is atomic. Whether all systems implement this
- * correctly is another question entirely ... so we'll just use PIPE_BUF
- * because it's probably a good guess as to what is implemented correctly
- * everywhere.
- */
-#ifdef PIPE_BUF
-#define LOG_BUFSIZE PIPE_BUF
-#else
-#define LOG_BUFSIZE (512)
-#endif
-
-/*
- * multi_log_state is our per-(virtual)-server configuration. We store
- * an array of the logs we are going to use, each of type config_log_state.
- * If a default log format is given by LogFormat, store in default_format
- * (backward compat. with mod_log_config). We also store for each virtual
- * server a pointer to the logs specified for the main server, so that if this
- * vhost has no logs defined, we can use the main server's logs instead.
- *
- * So, for the main server, config_logs contains a list of the log files
- * and server_config_logs is empty. For a vhost, server_config_logs
- * points to the same array as config_logs in the main server, and
- * config_logs points to the array of logs defined inside this vhost,
- * which might be empty.
- */
-
-typedef struct {
- const char *default_format_string;
- apr_array_header_t *default_format;
- apr_array_header_t *config_logs;
- apr_array_header_t *server_config_logs;
- apr_table_t *formats;
-} multi_log_state;
-
-/*
- * config_log_state holds the status of a single log file. fname might
- * be NULL, which means this module does no logging for this
- * request. format might be NULL, in which case the default_format
- * from the multi_log_state should be used, or if that is NULL as
- * well, use the CLF.
- * log_writer is NULL before the log file is opened and is
- * set to a opaque structure (usually a fd) after it is opened.
-
- */
-typedef struct {
- apr_file_t *handle;
- apr_size_t outcnt;
- char outbuf[LOG_BUFSIZE];
- apr_anylock_t mutex;
-} buffered_log;
-
-typedef struct {
- const char *fname;
- const char *format_string;
- apr_array_header_t *format;
- void *log_writer;
- char *condition_var;
-} config_log_state;
-
-/*
- * Format items...
- * Note that many of these could have ap_sprintfs replaced with static buffers.
- */
-
-typedef struct {
- ap_log_handler_fn_t *func;
- char *arg;
- int condition_sense;
- int want_orig;
- apr_array_header_t *conditions;
-} log_format_item;
-
-static char *format_integer(apr_pool_t *p, int i)
-{
- return apr_itoa(p, i);
-}
-
-static char *pfmt(apr_pool_t *p, int i)
-{
- if (i <= 0) {
- return "-";
- }
- else {
- return format_integer(p, i);
- }
-}
-
-static const char *constant_item(request_rec *dummy, char *stuff)
-{
- return stuff;
-}
-
-static const char *log_remote_host(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, ap_get_remote_host(r->connection,
- r->per_dir_config,
- REMOTE_NAME, NULL));
-}
-
-static const char *log_remote_address(request_rec *r, char *a)
-{
- return r->connection->remote_ip;
-}
-
-static const char *log_local_address(request_rec *r, char *a)
-{
- return r->connection->local_ip;
-}
-
-static const char *log_remote_logname(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, ap_get_remote_logname(r));
-}
-
-static const char *log_remote_user(request_rec *r, char *a)
-{
- char *rvalue = r->user;
-
- if (rvalue == NULL) {
- rvalue = "-";
- }
- else if (strlen(rvalue) == 0) {
- rvalue = "\"\"";
- }
- else {
- rvalue = ap_escape_logitem(r->pool, rvalue);
- }
-
- return rvalue;
-}
-
-static const char *log_request_line(request_rec *r, char *a)
-{
- /* NOTE: If the original request contained a password, we
- * re-write the request line here to contain XXXXXX instead:
- * (note the truncation before the protocol string for HTTP/0.9 requests)
- * (note also that r->the_request contains the unmodified request)
- */
- return ap_escape_logitem(r->pool,
- (r->parsed_uri.password)
- ? apr_pstrcat(r->pool, r->method, " ",
- apr_uri_unparse(r->pool,
- &r->parsed_uri, 0),
- r->assbackwards ? NULL : " ",
- r->protocol, NULL)
- : r->the_request);
-}
-
-static const char *log_request_file(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, r->filename);
-}
-static const char *log_request_uri(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, r->uri);
-}
-static const char *log_request_method(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, r->method);
-}
-static const char *log_request_protocol(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, r->protocol);
-}
-static const char *log_request_query(request_rec *r, char *a)
-{
- return (r->args) ? apr_pstrcat(r->pool, "?",
- ap_escape_logitem(r->pool, r->args), NULL)
- : "";
-}
-static const char *log_status(request_rec *r, char *a)
-{
- return pfmt(r->pool, r->status);
-}
-
-static const char *clf_log_bytes_sent(request_rec *r, char *a)
-{
- if (!r->sent_bodyct || !r->bytes_sent) {
- return "-";
- }
- else {
- return apr_off_t_toa(r->pool, r->bytes_sent);
- }
-}
-
-static const char *log_bytes_sent(request_rec *r, char *a)
-{
- if (!r->sent_bodyct || !r->bytes_sent) {
- return "0";
- }
- else {
- return apr_off_t_toa(r->pool, r->bytes_sent);
- }
-}
-
-
-static const char *log_header_in(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, apr_table_get(r->headers_in, a));
-}
-
-static APR_INLINE char *find_multiple_headers(apr_pool_t *pool,
- const apr_table_t *table,
- const char *key)
-{
- const apr_array_header_t *elts;
- const apr_table_entry_t *t_elt;
- const apr_table_entry_t *t_end;
- apr_size_t len;
- struct sle {
- struct sle *next;
- const char *value;
- apr_size_t len;
- } *result_list, *rp;
-
- elts = apr_table_elts(table);
-
- if (!elts->nelts) {
- return NULL;
- }
-
- t_elt = (const apr_table_entry_t *)elts->elts;
- t_end = t_elt + elts->nelts;
- len = 1; /* \0 */
- result_list = rp = NULL;
-
- do {
- if (!strcasecmp(t_elt->key, key)) {
- if (!result_list) {
- result_list = rp = apr_palloc(pool, sizeof(*rp));
- }
- else {
- rp = rp->next = apr_palloc(pool, sizeof(*rp));
- len += 2; /* ", " */
- }
-
- rp->next = NULL;
- rp->value = t_elt->val;
- rp->len = strlen(rp->value);
-
- len += rp->len;
- }
- ++t_elt;
- } while (t_elt < t_end);
-
- if (result_list) {
- char *result = apr_palloc(pool, len);
- char *cp = result;
-
- rp = result_list;
- while (rp) {
- if (rp != result_list) {
- *cp++ = ',';
- *cp++ = ' ';
- }
- memcpy(cp, rp->value, rp->len);
- cp += rp->len;
- rp = rp->next;
- }
- *cp = '\0';
-
- return result;
- }
-
- return NULL;
-}
-
-static const char *log_header_out(request_rec *r, char *a)
-{
- const char *cp = NULL;
-
- if (!strcasecmp(a, "Content-type") && r->content_type) {
- cp = ap_field_noparam(r->pool, r->content_type);
- }
- else if (!strcasecmp(a, "Set-Cookie")) {
- cp = find_multiple_headers(r->pool, r->headers_out, a);
- }
- else {
- cp = apr_table_get(r->headers_out, a);
- }
-
- return ap_escape_logitem(r->pool, cp);
-}
-
-static const char *log_note(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, apr_table_get(r->notes, a));
-}
-static const char *log_env_var(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, apr_table_get(r->subprocess_env, a));
-}
-
-static const char *log_cookie(request_rec *r, char *a)
-{
- const char *cookies;
- const char *start_cookie;
-
- if ((cookies = apr_table_get(r->headers_in, "Cookie"))) {
- if ((start_cookie = ap_strstr_c(cookies,a))) {
- char *cookie, *end_cookie;
- start_cookie += strlen(a) + 1; /* cookie_name + '=' */
- cookie = apr_pstrdup(r->pool, start_cookie);
- /* kill everything in cookie after ';' */
- end_cookie = strchr(cookie, ';');
- if (end_cookie) {
- *end_cookie = '\0';
- }
- return ap_escape_logitem(r->pool, cookie);
- }
- }
- return NULL;
-}
-
-static const char *log_request_time_custom(request_rec *r, char *a,
- apr_time_exp_t *xt)
-{
- apr_size_t retcode;
- char tstr[MAX_STRING_LEN];
- apr_strftime(tstr, &retcode, sizeof(tstr), a, xt);
- return apr_pstrdup(r->pool, tstr);
-}
-
-#define DEFAULT_REQUEST_TIME_SIZE 32
-typedef struct {
- unsigned t;
- char timestr[DEFAULT_REQUEST_TIME_SIZE];
- unsigned t_validate;
-} cached_request_time;
-
-#define TIME_CACHE_SIZE 4
-#define TIME_CACHE_MASK 3
-static cached_request_time request_time_cache[TIME_CACHE_SIZE];
-
-static const char *log_request_time(request_rec *r, char *a)
-{
- apr_time_exp_t xt;
-
- /* ### I think getting the time again at the end of the request
- * just for logging is dumb. i know it's "required" for CLF.
- * folks writing log parsing tools don't realise that out of order
- * times have always been possible (consider what happens if one
- * process calculates the time to log, but then there's a context
- * switch before it writes and before that process is run again the
- * log rotation occurs) and they should just fix their tools rather
- * than force the server to pay extra cpu cycles. if you've got
- * a problem with this, you can set the define. -djg
- */
- if (a && *a) { /* Custom format */
- /* The custom time formatting uses a very large temp buffer
- * on the stack. To avoid using so much stack space in the
- * common case where we're not using a custom format, the code
- * for the custom format in a separate function. (That's why
- * log_request_time_custom is not inlined right here.)
- */
-#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
- ap_explode_recent_localtime(&xt, apr_time_now());
-#else
- ap_explode_recent_localtime(&xt, r->request_time);
-#endif
- return log_request_time_custom(r, a, &xt);
- }
- else { /* CLF format */
- /* This code uses the same technique as ap_explode_recent_localtime():
- * optimistic caching with logic to detect and correct race conditions.
- * See the comments in server/util_time.c for more information.
- */
- cached_request_time* cached_time = apr_palloc(r->pool,
- sizeof(*cached_time));
-#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
- apr_time_t request_time = apr_time_now();
-#else
- apr_time_t request_time = r->request_time;
-#endif
- unsigned t_seconds = (unsigned)apr_time_sec(request_time);
- unsigned i = t_seconds & TIME_CACHE_MASK;
- memcpy(cached_time, &(request_time_cache[i]), sizeof(*cached_time));
- if ((t_seconds != cached_time->t) ||
- (t_seconds != cached_time->t_validate)) {
-
- /* Invalid or old snapshot, so compute the proper time string
- * and store it in the cache
- */
- char sign;
- int timz;
-
- ap_explode_recent_localtime(&xt, request_time);
- timz = xt.tm_gmtoff;
- if (timz < 0) {
- timz = -timz;
- sign = '-';
- }
- else {
- sign = '+';
- }
- cached_time->t = t_seconds;
- apr_snprintf(cached_time->timestr, DEFAULT_REQUEST_TIME_SIZE,
- "[%02d/%s/%d:%02d:%02d:%02d %c%.2d%.2d]",
- xt.tm_mday, apr_month_snames[xt.tm_mon],
- xt.tm_year+1900, xt.tm_hour, xt.tm_min, xt.tm_sec,
- sign, timz / (60*60), (timz % (60*60)) / 60);
- cached_time->t_validate = t_seconds;
- memcpy(&(request_time_cache[i]), cached_time,
- sizeof(*cached_time));
- }
- return cached_time->timestr;
- }
-}
-
-static const char *log_request_duration(request_rec *r, char *a)
-{
- apr_time_t duration = apr_time_now() - r->request_time;
- return apr_psprintf(r->pool, "%" APR_TIME_T_FMT, apr_time_sec(duration));
-}
-
-static const char *log_request_duration_microseconds(request_rec *r, char *a)
-{
- return apr_psprintf(r->pool, "%" APR_TIME_T_FMT,
- (apr_time_now() - r->request_time));
-}
-
-/* These next two routines use the canonical name:port so that log
- * parsers don't need to duplicate all the vhost parsing crud.
- */
-static const char *log_virtual_host(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, r->server->server_hostname);
-}
-
-static const char *log_server_port(request_rec *r, char *a)
-{
- return apr_psprintf(r->pool, "%u",
- r->server->port ? r->server->port : ap_default_port(r));
-}
-
-/* This respects the setting of UseCanonicalName so that
- * the dynamic mass virtual hosting trick works better.
- */
-static const char *log_server_name(request_rec *r, char *a)
-{
- return ap_escape_logitem(r->pool, ap_get_server_name(r));
-}
-
-static const char *log_pid_tid(request_rec *r, char *a)
-{
- if (*a == '\0' || !strcmp(a, "pid")) {
- return apr_psprintf(r->pool, "%" APR_PID_T_FMT, getpid());
- }
- else if (!strcmp(a, "tid")) {
-#if APR_HAS_THREADS
- apr_os_thread_t tid = apr_os_thread_current();
-#else
- int tid = 0; /* APR will format "0" anyway but an arg is needed */
-#endif
- return apr_psprintf(r->pool, "%pT", &tid);
- }
- /* bogus format */
- return a;
-}
-
-static const char *log_connection_status(request_rec *r, char *a)
-{
- if (r->connection->aborted)
- return "X";
-
- if (r->connection->keepalive == AP_CONN_KEEPALIVE &&
- (!r->server->keep_alive_max ||
- (r->server->keep_alive_max - r->connection->keepalives) > 0)) {
- return "+";
- }
- return "-";
-}
-
-/*****************************************************************
- *
- * Parsing the log format string
- */
-
-static char *parse_log_misc_string(apr_pool_t *p, log_format_item *it,
- const char **sa)
-{
- const char *s;
- char *d;
-
- it->func = constant_item;
- it->conditions = NULL;
-
- s = *sa;
- while (*s && *s != '%') {
- s++;
- }
- /*
- * This might allocate a few chars extra if there's a backslash
- * escape in the format string.
- */
- it->arg = apr_palloc(p, s - *sa + 1);
-
- d = it->arg;
- s = *sa;
- while (*s && *s != '%') {
- if (*s != '\\') {
- *d++ = *s++;
- }
- else {
- s++;
- switch (*s) {
- case '\\':
- *d++ = '\\';
- s++;
- break;
- case 'r':
- *d++ = '\r';
- s++;
- break;
- case 'n':
- *d++ = '\n';
- s++;
- break;
- case 't':
- *d++ = '\t';
- s++;
- break;
- default:
- /* copy verbatim */
- *d++ = '\\';
- /*
- * Allow the loop to deal with this *s in the normal
- * fashion so that it handles end of string etc.
- * properly.
- */
- break;
- }
- }
- }
- *d = '\0';
-
- *sa = s;
- return NULL;
-}
-
-static char *parse_log_item(apr_pool_t *p, log_format_item *it, const char **sa)
-{
- const char *s = *sa;
- ap_log_handler *handler;
-
- if (*s != '%') {
- return parse_log_misc_string(p, it, sa);
- }
-
- ++s;
- it->condition_sense = 0;
- it->conditions = NULL;
-
- if (*s == '%') {
- it->arg = "%";
- it->func = constant_item;
- *sa = ++s;
-
- return NULL;
- }
-
- it->want_orig = -1;
- it->arg = ""; /* For safety's sake... */
-
- while (*s) {
- int i;
-
- switch (*s) {
- case '!':
- ++s;
- it->condition_sense = !it->condition_sense;
- break;
-
- case '<':
- ++s;
- it->want_orig = 1;
- break;
-
- case '>':
- ++s;
- it->want_orig = 0;
- break;
-
- case ',':
- ++s;
- break;
-
- case '{':
- ++s;
- it->arg = ap_getword(p, &s, '}');
- break;
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- i = *s - '0';
- while (apr_isdigit(*++s)) {
- i = i * 10 + (*s) - '0';
- }
- if (!it->conditions) {
- it->conditions = apr_array_make(p, 4, sizeof(int));
- }
- *(int *) apr_array_push(it->conditions) = i;
- break;
-
- default:
- handler = (ap_log_handler *)apr_hash_get(log_hash, s++, 1);
- if (!handler) {
- char dummy[2];
-
- dummy[0] = s[-1];
- dummy[1] = '\0';
- return apr_pstrcat(p, "Unrecognized LogFormat directive %",
- dummy, NULL);
- }
- it->func = handler->func;
- if (it->want_orig == -1) {
- it->want_orig = handler->want_orig_default;
- }
- *sa = s;
- return NULL;
- }
- }
-
- return "Ran off end of LogFormat parsing args to some directive";
-}
-
-static apr_array_header_t *parse_log_string(apr_pool_t *p, const char *s, const char **err)
-{
- apr_array_header_t *a = apr_array_make(p, 30, sizeof(log_format_item));
- char *res;
-
- while (*s) {
- if ((res = parse_log_item(p, (log_format_item *) apr_array_push(a), &s))) {
- *err = res;
- return NULL;
- }
- }
-
- s = APR_EOL_STR;
- parse_log_item(p, (log_format_item *) apr_array_push(a), &s);
- return a;
-}
-
-/*****************************************************************
- *
- * Actually logging.
- */
-
-static const char *process_item(request_rec *r, request_rec *orig,
- log_format_item *item)
-{
- const char *cp;
-
- /* First, see if we need to process this thing at all... */
-
- if (item->conditions && item->conditions->nelts != 0) {
- int i;
- int *conds = (int *) item->conditions->elts;
- int in_list = 0;
-
- for (i = 0; i < item->conditions->nelts; ++i) {
- if (r->status == conds[i]) {
- in_list = 1;
- break;
- }
- }
-
- if ((item->condition_sense && in_list)
- || (!item->condition_sense && !in_list)) {
- return "-";
- }
- }
-
- /* We do. Do it... */
-
- cp = (*item->func) (item->want_orig ? orig : r, item->arg);
- return cp ? cp : "-";
-}
-
-static void flush_log(buffered_log *buf)
-{
- if (buf->outcnt && buf->handle != NULL) {
- apr_file_write(buf->handle, buf->outbuf, &buf->outcnt);
- buf->outcnt = 0;
- }
-}
-
-
-static int config_log_transaction(request_rec *r, config_log_state *cls,
- apr_array_header_t *default_format)
-{
- log_format_item *items;
- const char **strs;
- int *strl;
- request_rec *orig;
- int i;
- apr_size_t len = 0;
- apr_array_header_t *format;
- char *envar;
- apr_status_t rv;
-
- if (cls->fname == NULL) {
- return DECLINED;
- }
-
- /*
- * See if we've got any conditional envariable-controlled logging decisions
- * to make.
- */
- if (cls->condition_var != NULL) {
- envar = cls->condition_var;
- if (*envar != '!') {
- if (apr_table_get(r->subprocess_env, envar) == NULL) {
- return DECLINED;
- }
- }
- else {
- if (apr_table_get(r->subprocess_env, &envar[1]) != NULL) {
- return DECLINED;
- }
- }
- }
-
- format = cls->format ? cls->format : default_format;
-
- strs = apr_palloc(r->pool, sizeof(char *) * (format->nelts));
- strl = apr_palloc(r->pool, sizeof(int) * (format->nelts));
- items = (log_format_item *) format->elts;
-
- orig = r;
- while (orig->prev) {
- orig = orig->prev;
- }
- while (r->next) {
- r = r->next;
- }
-
- for (i = 0; i < format->nelts; ++i) {
- strs[i] = process_item(r, orig, &items[i]);
- }
-
- for (i = 0; i < format->nelts; ++i) {
- len += strl[i] = strlen(strs[i]);
- }
- if (!log_writer) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r,
- "log writer isn't correctly setup");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- rv = log_writer(r, cls->log_writer, strs, strl, format->nelts, len);
- /* xxx: do we return an error on log_writer? */
- return OK;
-}
-
-static int multi_log_transaction(request_rec *r)
-{
- multi_log_state *mls = ap_get_module_config(r->server->module_config,
- &log_config_module);
- config_log_state *clsarray;
- int i;
-
- /*
- * Log this transaction..
- */
- if (mls->config_logs->nelts) {
- clsarray = (config_log_state *) mls->config_logs->elts;
- for (i = 0; i < mls->config_logs->nelts; ++i) {
- config_log_state *cls = &clsarray[i];
-
- config_log_transaction(r, cls, mls->default_format);
- }
- }
- else if (mls->server_config_logs) {
- clsarray = (config_log_state *) mls->server_config_logs->elts;
- for (i = 0; i < mls->server_config_logs->nelts; ++i) {
- config_log_state *cls = &clsarray[i];
-
- config_log_transaction(r, cls, mls->default_format);
- }
- }
-
- return OK;
-}
-
-/*****************************************************************
- *
- * Module glue...
- */
-
-static void *make_config_log_state(apr_pool_t *p, server_rec *s)
-{
- multi_log_state *mls;
-
- mls = (multi_log_state *) apr_palloc(p, sizeof(multi_log_state));
- mls->config_logs = apr_array_make(p, 1, sizeof(config_log_state));
- mls->default_format_string = NULL;
- mls->default_format = NULL;
- mls->server_config_logs = NULL;
- mls->formats = apr_table_make(p, 4);
- apr_table_setn(mls->formats, "CLF", DEFAULT_LOG_FORMAT);
-
- return mls;
-}
-
-/*
- * Use the merger to simply add a pointer from the vhost log state
- * to the log of logs specified for the non-vhost configuration. Make sure
- * vhosts inherit any globally-defined format names.
- */
-
-static void *merge_config_log_state(apr_pool_t *p, void *basev, void *addv)
-{
- multi_log_state *base = (multi_log_state *) basev;
- multi_log_state *add = (multi_log_state *) addv;
-
- add->server_config_logs = base->config_logs;
- if (!add->default_format) {
- add->default_format_string = base->default_format_string;
- add->default_format = base->default_format;
- }
- add->formats = apr_table_overlay(p, base->formats, add->formats);
-
- return add;
-}
-
-/*
- * Set the default logfile format, or define a nickname for a format string.
- */
-static const char *log_format(cmd_parms *cmd, void *dummy, const char *fmt,
- const char *name)
-{
- const char *err_string = NULL;
- multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
- &log_config_module);
-
- /*
- * If we were given two arguments, the second is a name to be given to the
- * format. This syntax just defines the nickname - it doesn't actually
- * make the format the default.
- */
- if (name != NULL) {
- parse_log_string(cmd->pool, fmt, &err_string);
- if (err_string == NULL) {
- apr_table_setn(mls->formats, name, fmt);
- }
- }
- else {
- mls->default_format_string = fmt;
- mls->default_format = parse_log_string(cmd->pool, fmt, &err_string);
- }
- return err_string;
-}
-
-
-static const char *add_custom_log(cmd_parms *cmd, void *dummy, const char *fn,
- const char *fmt, const char *envclause)
-{
- const char *err_string = NULL;
- multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
- &log_config_module);
- config_log_state *cls;
-
- cls = (config_log_state *) apr_array_push(mls->config_logs);
- cls->condition_var = NULL;
- if (envclause != NULL) {
- if (strncasecmp(envclause, "env=", 4) != 0) {
- return "error in condition clause";
- }
- if ((envclause[4] == '\0')
- || ((envclause[4] == '!') && (envclause[5] == '\0'))) {
- return "missing environment variable name";
- }
- cls->condition_var = apr_pstrdup(cmd->pool, &envclause[4]);
- }
-
- cls->fname = fn;
- cls->format_string = fmt;
- if (fmt == NULL) {
- cls->format = NULL;
- }
- else {
- cls->format = parse_log_string(cmd->pool, fmt, &err_string);
- }
- cls->log_writer = NULL;
-
- return err_string;
-}
-
-static const char *set_transfer_log(cmd_parms *cmd, void *dummy,
- const char *fn)
-{
- return add_custom_log(cmd, dummy, fn, NULL, NULL);
-}
-
-static const char *set_cookie_log(cmd_parms *cmd, void *dummy, const char *fn)
-{
- return add_custom_log(cmd, dummy, fn, "%{Cookie}n \"%r\" %t", NULL);
-}
-
-static const char *set_buffered_logs_on(cmd_parms *parms, void *dummy, int flag)
-{
- buffered_logs = flag;
- if (buffered_logs) {
- ap_log_set_writer_init(ap_buffered_log_writer_init);
- ap_log_set_writer(ap_buffered_log_writer);
- }
- return NULL;
-}
-static const command_rec config_log_cmds[] =
-{
-AP_INIT_TAKE23("CustomLog", add_custom_log, NULL, RSRC_CONF,
- "a file name, a custom log format string or format name, "
- "and an optional \"env=\" clause (see docs)"),
-AP_INIT_TAKE1("TransferLog", set_transfer_log, NULL, RSRC_CONF,
- "the filename of the access log"),
-AP_INIT_TAKE12("LogFormat", log_format, NULL, RSRC_CONF,
- "a log format string (see docs) and an optional format name"),
-AP_INIT_TAKE1("CookieLog", set_cookie_log, NULL, RSRC_CONF,
- "the filename of the cookie log"),
-AP_INIT_FLAG("BufferedLogs", set_buffered_logs_on, NULL, RSRC_CONF,
- "Enable Buffered Logging (experimental)"),
- {NULL}
-};
-
-static config_log_state *open_config_log(server_rec *s, apr_pool_t *p,
- config_log_state *cls,
- apr_array_header_t *default_format)
-{
- if (cls->log_writer != NULL) {
- return cls; /* virtual config shared w/main server */
- }
-
- if (cls->fname == NULL) {
- return cls; /* Leave it NULL to decline. */
- }
-
- cls->log_writer = log_writer_init(p, s, cls->fname);
- if (cls->log_writer == NULL)
- return NULL;
-
- return cls;
-}
-
-static int open_multi_logs(server_rec *s, apr_pool_t *p)
-{
- int i;
- multi_log_state *mls = ap_get_module_config(s->module_config,
- &log_config_module);
- config_log_state *clsarray;
- const char *dummy;
- const char *format;
-
- if (mls->default_format_string) {
- format = apr_table_get(mls->formats, mls->default_format_string);
- if (format) {
- mls->default_format = parse_log_string(p, format, &dummy);
- }
- }
-
- if (!mls->default_format) {
- mls->default_format = parse_log_string(p, DEFAULT_LOG_FORMAT, &dummy);
- }
-
- if (mls->config_logs->nelts) {
- clsarray = (config_log_state *) mls->config_logs->elts;
- for (i = 0; i < mls->config_logs->nelts; ++i) {
- config_log_state *cls = &clsarray[i];
-
- if (cls->format_string) {
- format = apr_table_get(mls->formats, cls->format_string);
- if (format) {
- cls->format = parse_log_string(p, format, &dummy);
- }
- }
-
- if (!open_config_log(s, p, cls, mls->default_format)) {
- /* Failure already logged by open_config_log */
- return DONE;
- }
- }
- }
- else if (mls->server_config_logs) {
- clsarray = (config_log_state *) mls->server_config_logs->elts;
- for (i = 0; i < mls->server_config_logs->nelts; ++i) {
- config_log_state *cls = &clsarray[i];
-
- if (cls->format_string) {
- format = apr_table_get(mls->formats, cls->format_string);
- if (format) {
- cls->format = parse_log_string(p, format, &dummy);
- }
- }
-
- if (!open_config_log(s, p, cls, mls->default_format)) {
- /* Failure already logged by open_config_log */
- return DONE;
- }
- }
- }
-
- return OK;
-}
-
-
-static apr_status_t flush_all_logs(void *data)
-{
- server_rec *s = data;
- multi_log_state *mls;
- apr_array_header_t *log_list;
- config_log_state *clsarray;
- buffered_log *buf;
- int i;
-
- if (!buffered_logs)
- return APR_SUCCESS;
-
- for (; s; s = s->next) {
- mls = ap_get_module_config(s->module_config, &log_config_module);
- log_list = NULL;
- if (mls->config_logs->nelts) {
- log_list = mls->config_logs;
- }
- else if (mls->server_config_logs) {
- log_list = mls->server_config_logs;
- }
- if (log_list) {
- clsarray = (config_log_state *) log_list->elts;
- for (i = 0; i < log_list->nelts; ++i) {
- buf = clsarray[i].log_writer;
- flush_log(buf);
- }
- }
- }
- return APR_SUCCESS;
-}
-
-
-static int init_config_log(apr_pool_t *pc, apr_pool_t *p, apr_pool_t *pt, server_rec *s)
-{
- int res;
-
- /* First init the buffered logs array, which is needed when opening the logs. */
- if (buffered_logs) {
- all_buffered_logs = apr_array_make(p, 5, sizeof(buffered_log *));
- }
-
- /* Next, do "physical" server, which gets default log fd and format
- * for the virtual servers, if they don't override...
- */
- res = open_multi_logs(s, p);
-
- /* Then, virtual servers */
-
- for (s = s->next; (res == OK) && s; s = s->next) {
- res = open_multi_logs(s, p);
- }
-
- return res;
-}
-
-static void init_child(apr_pool_t *p, server_rec *s)
-{
- int mpm_threads;
-
- ap_mpm_query(AP_MPMQ_MAX_THREADS, &mpm_threads);
-
- /* Now register the last buffer flush with the cleanup engine */
- if (buffered_logs) {
- int i;
- buffered_log **array = (buffered_log **)all_buffered_logs->elts;
-
- apr_pool_cleanup_register(p, s, flush_all_logs, flush_all_logs);
-
- for (i = 0; i < all_buffered_logs->nelts; i++) {
- buffered_log *this = array[i];
-
-#if APR_HAS_THREADS
- if (mpm_threads > 1) {
- apr_status_t rv;
-
- this->mutex.type = apr_anylock_threadmutex;
- rv = apr_thread_mutex_create(&this->mutex.lock.tm,
- APR_THREAD_MUTEX_DEFAULT,
- p);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
- "could not initialize buffered log mutex, "
- "transfer log may become corrupted");
- this->mutex.type = apr_anylock_none;
- }
- }
- else
-#endif
- {
- this->mutex.type = apr_anylock_none;
- }
- }
- }
-}
-
-static void ap_register_log_handler(apr_pool_t *p, char *tag,
- ap_log_handler_fn_t *handler, int def)
-{
- ap_log_handler *log_struct = apr_palloc(p, sizeof(*log_struct));
- log_struct->func = handler;
- log_struct->want_orig_default = def;
-
- apr_hash_set(log_hash, tag, 1, (const void *)log_struct);
-}
-static ap_log_writer_init* ap_log_set_writer_init(ap_log_writer_init *handle)
-{
- ap_log_writer_init *old = log_writer_init;
- log_writer_init = handle;
-
- return old;
-
-}
-static ap_log_writer *ap_log_set_writer(ap_log_writer *handle)
-{
- ap_log_writer *old = log_writer;
- log_writer = handle;
-
- return old;
-}
-
-static apr_status_t ap_default_log_writer( request_rec *r,
- void *handle,
- const char **strs,
- int *strl,
- int nelts,
- apr_size_t len)
-
-{
- char *str;
- char *s;
- int i;
- apr_status_t rv;
-
- str = apr_palloc(r->pool, len + 1);
-
- for (i = 0, s = str; i < nelts; ++i) {
- memcpy(s, strs[i], strl[i]);
- s += strl[i];
- }
-
- rv = apr_file_write((apr_file_t*)handle, str, &len);
-
- return rv;
-}
-static void *ap_default_log_writer_init(apr_pool_t *p, server_rec *s,
- const char* name)
-{
- if (*name == '|') {
- piped_log *pl;
-
- pl = ap_open_piped_log(p, name + 1);
- if (pl == NULL) {
- return NULL;;
- }
- return ap_piped_log_write_fd(pl);
- }
- else {
- const char *fname = ap_server_root_relative(p, name);
- apr_file_t *fd;
- apr_status_t rv;
-
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
- "invalid transfer log path %s.", name);
- return NULL;
- }
- rv = apr_file_open(&fd, fname, xfer_flags, xfer_perms, p);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "could not open transfer log file %s.", fname);
- return NULL;
- }
- return fd;
- }
-}
-static void *ap_buffered_log_writer_init(apr_pool_t *p, server_rec *s,
- const char* name)
-{
- buffered_log *b;
- b = apr_pcalloc(p, sizeof(buffered_log));
- b->handle = ap_default_log_writer_init(p, s, name);
-
- if (b->handle) {
- *(buffered_log **)apr_array_push(all_buffered_logs) = b;
- return b;
- }
- else
- return NULL;
-}
-static apr_status_t ap_buffered_log_writer(request_rec *r,
- void *handle,
- const char **strs,
- int *strl,
- int nelts,
- apr_size_t len)
-
-{
- char *str;
- char *s;
- int i;
- apr_status_t rv;
- buffered_log *buf = (buffered_log*)handle;
-
- if ((rv = APR_ANYLOCK_LOCK(&buf->mutex)) != APR_SUCCESS) {
- return rv;
- }
-
- if (len + buf->outcnt > LOG_BUFSIZE) {
- flush_log(buf);
- }
- if (len >= LOG_BUFSIZE) {
- apr_size_t w;
-
- str = apr_palloc(r->pool, len + 1);
- for (i = 0, s = str; i < nelts; ++i) {
- memcpy(s, strs[i], strl[i]);
- s += strl[i];
- }
- w = len;
- rv = apr_file_write(buf->handle, str, &w);
-
- }
- else {
- for (i = 0, s = &buf->outbuf[buf->outcnt]; i < nelts; ++i) {
- memcpy(s, strs[i], strl[i]);
- s += strl[i];
- }
- buf->outcnt += len;
- rv = APR_SUCCESS;
- }
-
- APR_ANYLOCK_UNLOCK(&buf->mutex);
- return rv;
-}
-
-static int log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register;
-
- log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler);
-
- if (log_pfn_register) {
- log_pfn_register(p, "h", log_remote_host, 0);
- log_pfn_register(p, "a", log_remote_address, 0 );
- log_pfn_register(p, "A", log_local_address, 0 );
- log_pfn_register(p, "l", log_remote_logname, 0);
- log_pfn_register(p, "u", log_remote_user, 0);
- log_pfn_register(p, "t", log_request_time, 0);
- log_pfn_register(p, "f", log_request_file, 0);
- log_pfn_register(p, "b", clf_log_bytes_sent, 0);
- log_pfn_register(p, "B", log_bytes_sent, 0);
- log_pfn_register(p, "i", log_header_in, 0);
- log_pfn_register(p, "o", log_header_out, 0);
- log_pfn_register(p, "n", log_note, 0);
- log_pfn_register(p, "e", log_env_var, 0);
- log_pfn_register(p, "V", log_server_name, 0);
- log_pfn_register(p, "v", log_virtual_host, 0);
- log_pfn_register(p, "p", log_server_port, 0);
- log_pfn_register(p, "P", log_pid_tid, 0);
- log_pfn_register(p, "H", log_request_protocol, 0);
- log_pfn_register(p, "m", log_request_method, 0);
- log_pfn_register(p, "q", log_request_query, 0);
- log_pfn_register(p, "X", log_connection_status, 0);
- log_pfn_register(p, "C", log_cookie, 0);
- log_pfn_register(p, "r", log_request_line, 1);
- log_pfn_register(p, "D", log_request_duration_microseconds, 1);
- log_pfn_register(p, "T", log_request_duration, 1);
- log_pfn_register(p, "U", log_request_uri, 1);
- log_pfn_register(p, "s", log_status, 1);
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_pre_config(log_pre_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
- ap_hook_child_init(init_child,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_open_logs(init_config_log,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_log_transaction(multi_log_transaction,NULL,NULL,APR_HOOK_MIDDLE);
-
- /* Init log_hash before we register the optional function. It is
- * possible for the optional function, ap_register_log_handler,
- * to be called before any other mod_log_config hooks are called.
- * As a policy, we should init everything required by an optional function
- * before calling APR_REGISTER_OPTIONAL_FN.
- */
- log_hash = apr_hash_make(p);
- APR_REGISTER_OPTIONAL_FN(ap_register_log_handler);
- APR_REGISTER_OPTIONAL_FN(ap_log_set_writer_init);
- APR_REGISTER_OPTIONAL_FN(ap_log_set_writer);
-}
-
-module AP_MODULE_DECLARE_DATA log_config_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-dir config */
- NULL, /* merge per-dir config */
- make_config_log_state, /* server config */
- merge_config_log_state, /* merge server config */
- config_log_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
-
diff --git a/modules/loggers/mod_log_config.dsp b/modules/loggers/mod_log_config.dsp
deleted file mode 100644
index 845301f120..0000000000
--- a/modules/loggers/mod_log_config.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_log_config" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_log_config - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_log_config.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_log_config.mak" CFG="mod_log_config - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_log_config - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_log_config - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_log_config - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_log_config_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_log_config - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_log_config_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_log_config - Win32 Release"
-# Name "mod_log_config - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_log_config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_log_config.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_log_config - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_log_config.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_log_config.so "log_config_module for Apache" ../../include/ap_release.h > .\mod_log_config.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_log_config - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_log_config.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_log_config.so "log_config_module for Apache" ../../include/ap_release.h > .\mod_log_config.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/loggers/mod_log_config.exp b/modules/loggers/mod_log_config.exp
deleted file mode 100644
index 0749e52704..0000000000
--- a/modules/loggers/mod_log_config.exp
+++ /dev/null
@@ -1 +0,0 @@
-log_config_module
diff --git a/modules/loggers/mod_log_config.h b/modules/loggers/mod_log_config.h
deleted file mode 100644
index d3d3590cda..0000000000
--- a/modules/loggers/mod_log_config.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_optional.h"
-#include "httpd.h"
-#include "scoreboard.h"
-
-#ifndef _MOD_LOG_CONFIG_H
-#define _MOD_LOG_CONFIG_H 1
-
-/**
- * callback function prototype for a external log handler
- */
-typedef const char *ap_log_handler_fn_t(request_rec *r, char *a);
-
-/**
- * callback function prototype for a external writer initilization.
- */
-typedef void *ap_log_writer_init(apr_pool_t *p, server_rec *s,
- const char *name);
-/**
- * callback which gets called where there is a log line to write.
- */
-typedef apr_status_t ap_log_writer(
- request_rec *r,
- void *handle,
- const char **portions,
- int *lengths,
- int nelts,
- apr_size_t len);
-
-typedef struct ap_log_handler {
- ap_log_handler_fn_t *func;
- int want_orig_default;
-} ap_log_handler;
-
-APR_DECLARE_OPTIONAL_FN(void, ap_register_log_handler,
- (apr_pool_t *p, char *tag, ap_log_handler_fn_t *func,
- int def));
-/**
- * you will need to set your init handler *BEFORE* the open_logs
- * in mod_log_config gets executed
- */
-APR_DECLARE_OPTIONAL_FN(ap_log_writer_init*, ap_log_set_writer_init,(ap_log_writer_init *func));
-/**
- * you should probably set the writer at the same time (ie..before open_logs)
- */
-APR_DECLARE_OPTIONAL_FN(ap_log_writer*, ap_log_set_writer, (ap_log_writer* func));
-
-#endif /* MOD_LOG_CONFIG */
diff --git a/modules/loggers/mod_log_forensic.c b/modules/loggers/mod_log_forensic.c
deleted file mode 100644
index 34387d7127..0000000000
--- a/modules/loggers/mod_log_forensic.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * See also support/check_forensic.
- * Relate the forensic log to the transfer log by including
- * %{forensic-id}n in the custom log format, for example:
- * CustomLog logs/custom "%h %l %u %t \"%r\" %>s %b %{forensic-id}n"
- *
- * Credit is due to Tina Bird <tbird precision-guesswork.com>, whose
- * idea this module was.
- *
- * Ben Laurie 29/12/2003
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "apr_strings.h"
-#include "apr_atomic.h"
-#include "http_protocol.h"
-#include "test_char.h"
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-module AP_MODULE_DECLARE_DATA log_forensic_module;
-
-typedef struct fcfg {
- const char *logname;
- apr_file_t *fd;
-} fcfg;
-
-static apr_uint32_t next_id;
-
-static void *make_forensic_log_scfg(apr_pool_t *p, server_rec *s)
-{
- fcfg *cfg = apr_pcalloc(p, sizeof *cfg);
-
- cfg->logname = NULL;
- cfg->fd = NULL;
-
- return cfg;
-}
-
-static void *merge_forensic_log_scfg(apr_pool_t *p, void *parent, void *new)
-{
- fcfg *cfg = apr_pcalloc(p, sizeof *cfg);
- fcfg *pc = parent;
- fcfg *nc = new;
-
- cfg->logname = apr_pstrdup(p, nc->logname ? nc->logname : pc->logname);
- cfg->fd = NULL;
-
- return cfg;
-}
-
-static int open_log(server_rec *s, apr_pool_t *p)
-{
- fcfg *cfg = ap_get_module_config(s->module_config, &log_forensic_module);
-
- if (!cfg->logname || cfg->fd)
- return 1;
-
- if (*cfg->logname == '|') {
- piped_log *pl;
- const char *pname = ap_server_root_relative(p, cfg->logname + 1);
-
- pl = ap_open_piped_log(p, pname);
- if (pl == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "couldn't spawn forensic log pipe %s", cfg->logname);
- return 0;
- }
- cfg->fd = ap_piped_log_write_fd(pl);
- }
- else {
- const char *fname = ap_server_root_relative(p, cfg->logname);
- apr_status_t rv;
-
- if ((rv = apr_file_open(&cfg->fd, fname,
- APR_WRITE | APR_APPEND | APR_CREATE,
- APR_OS_DEFAULT, p)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "could not open forensic log file %s.", fname);
- return 0;
- }
- }
-
- return 1;
-}
-
-static int log_init(apr_pool_t *pc, apr_pool_t *p, apr_pool_t *pt,
- server_rec *s)
-{
- for ( ; s ; s = s->next) {
- if (!open_log(s, p)) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- return OK;
-}
-
-
-/* e is the first _invalid_ location in q
- N.B. returns the terminating NUL.
- */
-static char *log_escape(char *q, const char *e, const char *p)
-{
- for ( ; *p ; ++p) {
- ap_assert(q < e);
- if (test_char_table[*(unsigned char *)p]&T_ESCAPE_FORENSIC) {
- ap_assert(q+2 < e);
- *q++ = '%';
- sprintf(q, "%02x", *(unsigned char *)p);
- q += 2;
- }
- else
- *q++ = *p;
- }
- ap_assert(q < e);
- *q = '\0';
-
- return q;
-}
-
-typedef struct hlog {
- char *log;
- char *pos;
- char *end;
- apr_pool_t *p;
- apr_size_t count;
-} hlog;
-
-static int count_string(const char *p)
-{
- int n;
-
- for (n = 0 ; *p ; ++p, ++n)
- if (test_char_table[*(unsigned char *)p]&T_ESCAPE_FORENSIC)
- n += 2;
- return n;
-}
-
-static int count_headers(void *h_, const char *key, const char *value)
-{
- hlog *h = h_;
-
- h->count += count_string(key)+count_string(value)+2;
-
- return 1;
-}
-
-static int log_headers(void *h_, const char *key, const char *value)
-{
- hlog *h = h_;
-
- /* note that we don't have to check h->pos here, coz its been done
- for us by log_escape */
- *h->pos++ = '|';
- h->pos = log_escape(h->pos, h->end, key);
- *h->pos++ = ':';
- h->pos = log_escape(h->pos, h->end, value);
-
- return 1;
-}
-
-static int log_before(request_rec *r)
-{
- fcfg *cfg = ap_get_module_config(r->server->module_config,
- &log_forensic_module);
- const char *id;
- hlog h;
- apr_size_t n;
- apr_status_t rv;
-
- if (!cfg->fd || r->prev) {
- return DECLINED;
- }
-
- if (!(id = apr_table_get(r->subprocess_env, "UNIQUE_ID"))) {
- /* we make the assumption that we can't go through all the PIDs in
- under 1 second */
- id = apr_psprintf(r->pool, "%x:%lx:%x", getpid(), time(NULL),
- apr_atomic_inc32(&next_id));
- }
- ap_set_module_config(r->request_config, &log_forensic_module, (char *)id);
-
- h.p = r->pool;
- h.count = 0;
-
- apr_table_do(count_headers, &h, r->headers_in, NULL);
-
- h.count += 1+strlen(id)+1+count_string(r->the_request)+1+1;
- h.log = apr_palloc(r->pool, h.count);
- h.pos = h.log;
- h.end = h.log+h.count;
-
- *h.pos++ = '+';
- strcpy(h.pos, id);
- h.pos += strlen(h.pos);
- *h.pos++ = '|';
- h.pos = log_escape(h.pos, h.end, r->the_request);
-
- apr_table_do(log_headers, &h, r->headers_in, NULL);
-
- ap_assert(h.pos < h.end);
- *h.pos++ = '\n';
-
- n = h.count-1;
- rv = apr_file_write(cfg->fd, h.log, &n);
- ap_assert(rv == APR_SUCCESS && n == h.count-1);
-
- apr_table_setn(r->notes, "forensic-id", id);
-
- return OK;
-}
-
-static int log_after(request_rec *r)
-{
- fcfg *cfg = ap_get_module_config(r->server->module_config,
- &log_forensic_module);
- const char *id = ap_get_module_config(r->request_config,
- &log_forensic_module);
- char *s;
- apr_size_t l, n;
- apr_status_t rv;
-
- if (!cfg->fd) {
- return DECLINED;
- }
-
- s = apr_pstrcat(r->pool, "-", id, "\n", NULL);
- l = n = strlen(s);
- rv = apr_file_write(cfg->fd, s, &n);
- ap_assert(rv == APR_SUCCESS && n == l);
-
- return OK;
-}
-
-static const char *set_forensic_log(cmd_parms *cmd, void *dummy, const char *fn)
-{
- fcfg *cfg = ap_get_module_config(cmd->server->module_config,
- &log_forensic_module);
-
- cfg->logname = fn;
- return NULL;
-}
-
-static const command_rec forensic_log_cmds[] =
-{
- AP_INIT_TAKE1("ForensicLog", set_forensic_log, NULL, RSRC_CONF,
- "the filename of the forensic log"),
- { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const pre[] = { "mod_unique_id.c", NULL };
-
- ap_hook_open_logs(log_init,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_post_read_request(log_before,pre,NULL,APR_HOOK_REALLY_FIRST);
- ap_hook_log_transaction(log_after,NULL,NULL,APR_HOOK_REALLY_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA log_forensic_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-dir config */
- NULL, /* merge per-dir config */
- make_forensic_log_scfg, /* server config */
- merge_forensic_log_scfg, /* merge server config */
- forensic_log_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/loggers/mod_log_forensic.dsp b/modules/loggers/mod_log_forensic.dsp
deleted file mode 100644
index 7058215670..0000000000
--- a/modules/loggers/mod_log_forensic.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_log_forensic" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_log_forensic - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_log_forensic.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_log_forensic.mak" CFG="mod_log_forensic - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_log_forensic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_log_forensic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_log_forensic - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../server" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_log_forensic_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_log_forensic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_forensic.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_log_forensic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_forensic.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_log_forensic - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../server" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_log_forensic_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_log_forensic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_forensic.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_log_forensic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_forensic.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_log_forensic - Win32 Release"
-# Name "mod_log_forensic - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_log_forensic.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_log_forensic.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_log_forensic - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_log_forensic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_log_forensic.so "log_forensic_module for Apache" ../../include/ap_release.h > .\mod_log_forensic.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_log_forensic - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_log_forensic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_log_forensic.so "log_forensic_module for Apache" ../../include/ap_release.h > .\mod_log_forensic.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/loggers/mod_log_forensic.exp b/modules/loggers/mod_log_forensic.exp
deleted file mode 100644
index 92f5075b4e..0000000000
--- a/modules/loggers/mod_log_forensic.exp
+++ /dev/null
@@ -1 +0,0 @@
-log_forensic_module
diff --git a/modules/loggers/mod_logio.c b/modules/loggers/mod_logio.c
deleted file mode 100644
index 3154bb87ba..0000000000
--- a/modules/loggers/mod_logio.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Written by Bojan Smojver <bojan rexursive.com>:
- *
- * The argument to LogFormat and CustomLog is a string, which can include
- * literal characters copied into the log files, and '%' directives as
- * follows:
- *
- * %...I: bytes received, including request and headers, cannot be zero
- * %...O: bytes sent, including headers, cannot be zero
- *
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-#include "apr_optional.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "mod_log_config.h"
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_connection.h"
-#include "http_protocol.h"
-
-module AP_MODULE_DECLARE_DATA logio_module;
-
-static const char logio_filter_name[] = "LOG_INPUT_OUTPUT";
-
-/*
- * Logging of input and output config...
- */
-
-typedef struct logio_config_t {
- apr_off_t bytes_in;
- apr_off_t bytes_out;
-} logio_config_t;
-
-/*
- * Optional function for the core to add to bytes_out
- */
-
-static void ap_logio_add_bytes_out(conn_rec *c, apr_off_t bytes){
- logio_config_t *cf = ap_get_module_config(c->conn_config, &logio_module);
-
- cf->bytes_out += bytes;
-}
-
-/*
- * Format items...
- */
-
-static const char *log_bytes_in(request_rec *r, char *a)
-{
- logio_config_t *cf = ap_get_module_config(r->connection->conn_config,
- &logio_module);
-
- return apr_off_t_toa(r->pool, cf->bytes_in);
-}
-
-static const char *log_bytes_out(request_rec *r, char *a)
-{
- logio_config_t *cf = ap_get_module_config(r->connection->conn_config,
- &logio_module);
-
- return apr_off_t_toa(r->pool, cf->bytes_out);
-}
-
-/*
- * Reset counters after logging...
- */
-
-static int logio_transaction(request_rec *r)
-{
- logio_config_t *cf = ap_get_module_config(r->connection->conn_config,
- &logio_module);
-
- cf->bytes_in = cf->bytes_out = 0;
-
- return OK;
-}
-
-/*
- * Logging of input and output filters...
- */
-
-static apr_status_t logio_in_filter(ap_filter_t *f,
- apr_bucket_brigade *bb,
- ap_input_mode_t mode,
- apr_read_type_e block,
- apr_off_t readbytes) {
- apr_off_t length;
- apr_status_t status;
- logio_config_t *cf = ap_get_module_config(f->c->conn_config, &logio_module);
-
- status = ap_get_brigade(f->next, bb, mode, block, readbytes);
-
- apr_brigade_length (bb, 0, &length);
-
- if (length > 0)
- cf->bytes_in += length;
-
- return status;
-}
-
-static apr_status_t logio_out_filter(ap_filter_t *f,
- apr_bucket_brigade *bb) {
- apr_bucket *b = APR_BRIGADE_LAST(bb);
-
- /* End of data, make sure we flush */
- if (APR_BUCKET_IS_EOS(b)) {
- APR_BUCKET_INSERT_BEFORE(b,
- apr_bucket_flush_create(f->c->bucket_alloc));
- }
-
- return ap_pass_brigade(f->next, bb);
-}
-
-/*
- * The hooks...
- */
-
-static int logio_pre_conn(conn_rec *c, void *csd) {
- logio_config_t *cf = apr_pcalloc(c->pool, sizeof(*cf));
-
- ap_set_module_config(c->conn_config, &logio_module, cf);
-
- ap_add_input_filter(logio_filter_name, NULL, NULL, c);
- ap_add_output_filter(logio_filter_name, NULL, NULL, c);
-
- return OK;
-}
-
-static int logio_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register;
-
- log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler);
-
- if (log_pfn_register) {
- log_pfn_register(p, "I", log_bytes_in, 0);
- log_pfn_register(p, "O", log_bytes_out, 0);
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char *pre[] = { "mod_log_config.c", NULL };
-
- ap_hook_pre_connection(logio_pre_conn, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_pre_config(logio_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
- ap_hook_log_transaction(logio_transaction, pre, NULL, APR_HOOK_MIDDLE);
-
- ap_register_input_filter(logio_filter_name, logio_in_filter, NULL,
- AP_FTYPE_NETWORK - 1);
- ap_register_output_filter(logio_filter_name, logio_out_filter, NULL,
- AP_FTYPE_NETWORK - 1);
-
- APR_REGISTER_OPTIONAL_FN(ap_logio_add_bytes_out);
-}
-
-module AP_MODULE_DECLARE_DATA logio_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-dir config */
- NULL, /* merge per-dir config */
- NULL, /* server config */
- NULL, /* merge server config */
- NULL, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/loggers/mod_logio.dsp b/modules/loggers/mod_logio.dsp
deleted file mode 100644
index d26f3de07a..0000000000
--- a/modules/loggers/mod_logio.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_logio" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_logio - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_logio.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_logio.mak" CFG="mod_logio - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_logio - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_logio - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_logio - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_logio_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_logio.so" /base:@..\..\os\win32\BaseAddr.ref,mod_logio.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_logio.so" /base:@..\..\os\win32\BaseAddr.ref,mod_logio.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_logio - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_logio_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_logio.so" /base:@..\..\os\win32\BaseAddr.ref,mod_logio.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_logio.so" /base:@..\..\os\win32\BaseAddr.ref,mod_logio.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_logio - Win32 Release"
-# Name "mod_logio - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_logio.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_logio.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_logio - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_logio.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_logio.so "logio_module for Apache" ../../include/ap_release.h > .\mod_logio.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_logio - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_logio.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_logio.so "logio_module for Apache" ../../include/ap_release.h > .\mod_logio.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/.cvsignore b/modules/mappers/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/mappers/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/mappers/.indent.pro b/modules/mappers/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/mappers/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/mappers/Makefile.in b/modules/mappers/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/mappers/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/mappers/NWGNUmakefile b/modules/mappers/NWGNUmakefile
deleted file mode 100644
index 62c9624d97..0000000000
--- a/modules/mappers/NWGNUmakefile
+++ /dev/null
@@ -1,247 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/rewrite.nlm \
- $(OBJDIR)/speling.nlm \
- $(OBJDIR)/vhost.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/modules/mappers/NWGNUrewrite b/modules/mappers/NWGNUrewrite
deleted file mode 100644
index 5fc146afb1..0000000000
--- a/modules/mappers/NWGNUrewrite
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/modules/ssl \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = rewrite
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Rewrite Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Rewrite Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/rewrite.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_rewrite.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- rewrite_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/mappers/NWGNUspeling b/modules/mappers/NWGNUspeling
deleted file mode 100644
index 097a446bfb..0000000000
--- a/modules/mappers/NWGNUspeling
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = speling
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Speling Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Speling Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/speling.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_speling.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- speling_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/mappers/NWGNUvhost b/modules/mappers/NWGNUvhost
deleted file mode 100644
index 5c466e779d..0000000000
--- a/modules/mappers/NWGNUvhost
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = vhost
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Vhost Alias Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Vhost Alias Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/vhost.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_vhost_alias.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- vhost_alias_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/mappers/config9.m4 b/modules/mappers/config9.m4
deleted file mode 100644
index 198a953dc3..0000000000
--- a/modules/mappers/config9.m4
+++ /dev/null
@@ -1,61 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(mappers)
-
-APACHE_MODULE(vhost_alias, mass virtual hosting module, , , most)
-APACHE_MODULE(negotiation, content negotiation, , , yes)
-APACHE_MODULE(dir, directory request handling, , , yes)
-APACHE_MODULE(imap, server-side imagemaps, , , yes)
-APACHE_MODULE(actions, Action triggering on requests, , , yes)
-APACHE_MODULE(speling, correct common URL misspellings, , , most)
-APACHE_MODULE(userdir, mapping of requests to user-specific directories, , , yes)
-APACHE_MODULE(alias, mapping of requests to different filesystem parts, , , yes)
-
-APACHE_MODULE(rewrite, rule based URL manipulation, , , most)
-
-
-APR_CHECK_APR_DEFINE(APR_HAS_DSO)
-
-case "x$enable_so" in
- "xyes")
- if test $ac_cv_define_APR_HAS_DSO = "no"; then
- AC_MSG_ERROR([mod_so has been requested but cannot be built on your system])
- fi
- ;;
- "xshared")
- AC_MSG_ERROR([mod_so can not be built as a shared DSO])
- ;;
- "xno")
- ;;
- "x")
- enable_so=$ac_cv_define_APR_HAS_DSO
- ;;
-esac
-
-dnl mod_so can only be built statically. If the user wants modules to
-dnl be built as DSOs by default (eg. ./configure --enable-mods-shared=most)
-dnl then we must override the default here.
-if test "x$enable_so" = "xyes"; then
- enable_so="static"
-fi
-
-if test "x$enable_so" = "xstatic"; then
- APR_ADDTO(HTTPD_LDFLAGS, [-export-dynamic])
-fi
-
-if test "$sharedobjs" = "yes"; then
- if test $ac_cv_define_APR_HAS_DSO = "no"; then
- AC_MSG_ERROR([shared objects have been requested but cannot be built since mod_so cannot be built])
- elif test $enable_so = "no"; then
- AC_MSG_ERROR([shared objects have been requested but cannot be built since mod_so was disabled])
- fi
-fi
-
-APACHE_MODULE(so, DSO capability, , , $enable_so)
-
-dnl ### why save the cache?
-AC_CACHE_SAVE
-
-APACHE_MODPATH_FINISH
diff --git a/modules/mappers/mod_actions.c b/modules/mappers/mod_actions.c
deleted file mode 100644
index 7dbba915f7..0000000000
--- a/modules/mappers/mod_actions.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_actions.c: executes scripts based on MIME type or HTTP method
- *
- * by Alexei Kosut; based on mod_cgi.c, mod_mime.c and mod_includes.c,
- * adapted by rst from original NCSA code by Rob McCool
- *
- * Usage instructions:
- *
- * Action mime/type /cgi-bin/script
- *
- * will activate /cgi-bin/script when a file of content type mime/type is
- * requested. It sends the URL and file path of the requested document using
- * the standard CGI PATH_INFO and PATH_TRANSLATED environment variables.
- *
- * Script PUT /cgi-bin/script
- *
- * will activate /cgi-bin/script when a request is received with the
- * HTTP method "PUT". The available method names are defined in httpd.h.
- * If the method is GET, the script will only be activated if the requested
- * URI includes query information (stuff after a ?-mark).
- */
-
-#include "apr_strings.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-
-typedef struct {
- apr_table_t *action_types; /* Added with Action... */
- const char *scripted[METHODS]; /* Added with Script... */
- int configured; /* True if Action or Script has been
- * called at least once
- */
-} action_dir_config;
-
-module AP_MODULE_DECLARE_DATA actions_module;
-
-static void *create_action_dir_config(apr_pool_t *p, char *dummy)
-{
- action_dir_config *new =
- (action_dir_config *) apr_pcalloc(p, sizeof(action_dir_config));
-
- new->action_types = apr_table_make(p, 4);
-
- return new;
-}
-
-static void *merge_action_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- action_dir_config *base = (action_dir_config *) basev;
- action_dir_config *add = (action_dir_config *) addv;
- action_dir_config *new = (action_dir_config *) apr_palloc(p,
- sizeof(action_dir_config));
- int i;
-
- new->action_types = apr_table_overlay(p, add->action_types,
- base->action_types);
-
- for (i = 0; i < METHODS; ++i) {
- new->scripted[i] = add->scripted[i] ? add->scripted[i]
- : base->scripted[i];
- }
-
- new->configured = (base->configured || add->configured);
- return new;
-}
-
-static const char *add_action(cmd_parms *cmd, void *m_v,
- const char *type, const char *script,
- const char *option)
-{
- action_dir_config *m = (action_dir_config *)m_v;
-
- if (option && strcasecmp(option, "virtual")) {
- return apr_pstrcat(cmd->pool,
- "unrecognized option '", option, "'", NULL);
- }
-
- apr_table_setn(m->action_types, type,
- apr_pstrcat(cmd->pool, option ? "1" : "0", script, NULL));
- m->configured = 1;
-
- return NULL;
-}
-
-static const char *set_script(cmd_parms *cmd, void *m_v,
- const char *method, const char *script)
-{
- action_dir_config *m = (action_dir_config *)m_v;
-
- /* ap_method_register recognizes already registered methods,
- * so don't bother to check its previous existence explicitely.
- */
- int methnum = ap_method_register(cmd->pool, method);
-
- if (methnum == M_TRACE) {
- return "TRACE not allowed for Script";
- }
- else if (methnum == M_INVALID) {
- return apr_pstrcat(cmd->pool, "Could not register method '", method,
- "' for Script", NULL);
- }
-
- m->scripted[methnum] = script;
- m->configured = 1;
-
- return NULL;
-}
-
-static const command_rec action_cmds[] =
-{
- AP_INIT_TAKE23("Action", add_action, NULL, OR_FILEINFO,
- "a media type followed by a script name"),
- AP_INIT_TAKE2("Script", set_script, NULL, ACCESS_CONF | RSRC_CONF,
- "a method followed by a script name"),
- {NULL}
-};
-
-static int action_handler(request_rec *r)
-{
- action_dir_config *conf = (action_dir_config *)
- ap_get_module_config(r->per_dir_config, &actions_module);
- const char *t, *action;
- const char *script;
- int i;
-
- if (!conf->configured) {
- return DECLINED;
- }
-
- /* Note that this handler handles _all_ types, so handler is unchecked */
-
- /* Set allowed stuff */
- for (i = 0; i < METHODS; ++i) {
- if (conf->scripted[i])
- r->allowed |= (AP_METHOD_BIT << i);
- }
-
- /* First, check for the method-handling scripts */
- if (r->method_number == M_GET) {
- if (r->args)
- script = conf->scripted[M_GET];
- else
- script = NULL;
- }
- else {
- script = conf->scripted[r->method_number];
- }
-
- /* Check for looping, which can happen if the CGI script isn't */
- if (script && r->prev && r->prev->prev)
- return DECLINED;
-
- /* Second, check for actions (which override the method scripts) */
- action = r->handler ? r->handler :
- ap_field_noparam(r->pool, r->content_type);
- action = action ? action : ap_default_type(r);
-
- if ((t = apr_table_get(conf->action_types, action))) {
- if (*t++ == '0' && r->finfo.filetype == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "File does not exist: %s", r->filename);
- return HTTP_NOT_FOUND;
- }
-
- script = t;
- /* propagate the handler name to the script
- * (will be REDIRECT_HANDLER there)
- */
- apr_table_setn(r->subprocess_env, "HANDLER", action);
- }
-
- if (script == NULL)
- return DECLINED;
-
- ap_internal_redirect_handler(apr_pstrcat(r->pool, script,
- ap_escape_uri(r->pool, r->uri),
- r->args ? "?" : NULL,
- r->args, NULL), r);
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(action_handler,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA actions_module =
-{
- STANDARD20_MODULE_STUFF,
- create_action_dir_config, /* dir config creater */
- merge_action_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- action_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_actions.dsp b/modules/mappers/mod_actions.dsp
deleted file mode 100644
index 673b62ebc4..0000000000
--- a/modules/mappers/mod_actions.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_actions" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_actions - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_actions.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_actions.mak" CFG="mod_actions - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_actions - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_actions - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_actions - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_actions_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_actions - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_actions_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_actions - Win32 Release"
-# Name "mod_actions - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_actions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_actions.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_actions - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_actions.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_actions.so "actions_module for Apache" ../../include/ap_release.h > .\mod_actions.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_actions - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_actions.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_actions.so "actions_module for Apache" ../../include/ap_release.h > .\mod_actions.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_actions.exp b/modules/mappers/mod_actions.exp
deleted file mode 100644
index 8cc6cdb102..0000000000
--- a/modules/mappers/mod_actions.exp
+++ /dev/null
@@ -1 +0,0 @@
-actions_module
diff --git a/modules/mappers/mod_alias.c b/modules/mappers/mod_alias.c
deleted file mode 100644
index aaf339c2dd..0000000000
--- a/modules/mappers/mod_alias.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_alias.c: Stuff for dealing with directory aliases
- *
- * Original by Rob McCool, rewritten in succession by David Robinson
- * and rst.
- *
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-
-
-typedef struct {
- const char *real;
- const char *fake;
- char *handler;
- regex_t *regexp;
- int redir_status; /* 301, 302, 303, 410, etc */
-} alias_entry;
-
-typedef struct {
- apr_array_header_t *aliases;
- apr_array_header_t *redirects;
-} alias_server_conf;
-
-typedef struct {
- apr_array_header_t *redirects;
-} alias_dir_conf;
-
-module AP_MODULE_DECLARE_DATA alias_module;
-
-static void *create_alias_config(apr_pool_t *p, server_rec *s)
-{
- alias_server_conf *a =
- (alias_server_conf *) apr_pcalloc(p, sizeof(alias_server_conf));
-
- a->aliases = apr_array_make(p, 20, sizeof(alias_entry));
- a->redirects = apr_array_make(p, 20, sizeof(alias_entry));
- return a;
-}
-
-static void *create_alias_dir_config(apr_pool_t *p, char *d)
-{
- alias_dir_conf *a =
- (alias_dir_conf *) apr_pcalloc(p, sizeof(alias_dir_conf));
- a->redirects = apr_array_make(p, 2, sizeof(alias_entry));
- return a;
-}
-
-static void *merge_alias_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- alias_server_conf *a =
- (alias_server_conf *) apr_pcalloc(p, sizeof(alias_server_conf));
- alias_server_conf *base = (alias_server_conf *) basev;
- alias_server_conf *overrides = (alias_server_conf *) overridesv;
-
- a->aliases = apr_array_append(p, overrides->aliases, base->aliases);
- a->redirects = apr_array_append(p, overrides->redirects, base->redirects);
- return a;
-}
-
-static void *merge_alias_dir_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- alias_dir_conf *a =
- (alias_dir_conf *) apr_pcalloc(p, sizeof(alias_dir_conf));
- alias_dir_conf *base = (alias_dir_conf *) basev;
- alias_dir_conf *overrides = (alias_dir_conf *) overridesv;
- a->redirects = apr_array_append(p, overrides->redirects, base->redirects);
- return a;
-}
-
-/* need prototype for overlap check */
-static int alias_matches(const char *uri, const char *alias_fakename);
-
-static const char *add_alias_internal(cmd_parms *cmd, void *dummy,
- const char *f, const char *r,
- int use_regex)
-{
- server_rec *s = cmd->server;
- alias_server_conf *conf = ap_get_module_config(s->module_config,
- &alias_module);
- alias_entry *new = apr_array_push(conf->aliases);
- alias_entry *entries = (alias_entry *)conf->aliases->elts;
- int i;
-
- /* XX r can NOT be relative to DocumentRoot here... compat bug. */
-
- if (use_regex) {
- new->regexp = ap_pregcomp(cmd->pool, f, REG_EXTENDED);
- if (new->regexp == NULL)
- return "Regular expression could not be compiled.";
- new->real = r;
- }
- else {
- /* XXX This may be optimized, but we must know that new->real
- * exists. If so, we can dir merge later, trusing new->real
- * and just canonicalizing the remainder. Not till I finish
- * cleaning out the old ap_canonical stuff first.
- */
- new->real = r;
- }
- new->fake = f;
- new->handler = cmd->info;
-
- /* check for overlapping (Script)Alias directives
- * and throw a warning if found one
- */
- if (!use_regex) {
- for (i = 0; i < conf->aliases->nelts - 1; ++i) {
- alias_entry *p = &entries[i];
-
- if ( (!p->regexp && alias_matches(f, p->fake) > 0)
- || (p->regexp && !ap_regexec(p->regexp, f, 0, NULL, 0))) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "The %s directive in %s at line %d will probably "
- "never match because it overlaps an earlier "
- "%sAlias%s.",
- cmd->cmd->name, cmd->directive->filename,
- cmd->directive->line_num,
- p->handler ? "Script" : "",
- p->regexp ? "Match" : "");
-
- break; /* one warning per alias should be sufficient */
- }
- }
- }
-
- return NULL;
-}
-
-static const char *add_alias(cmd_parms *cmd, void *dummy, const char *f,
- const char *r)
-{
- return add_alias_internal(cmd, dummy, f, r, 0);
-}
-
-static const char *add_alias_regex(cmd_parms *cmd, void *dummy, const char *f,
- const char *r)
-{
- return add_alias_internal(cmd, dummy, f, r, 1);
-}
-
-static const char *add_redirect_internal(cmd_parms *cmd,
- alias_dir_conf *dirconf,
- const char *arg1, const char *arg2,
- const char *arg3, int use_regex)
-{
- alias_entry *new;
- server_rec *s = cmd->server;
- alias_server_conf *serverconf = ap_get_module_config(s->module_config,
- &alias_module);
- int status = (int) (long) cmd->info;
- regex_t *r = NULL;
- const char *f = arg2;
- const char *url = arg3;
-
- if (!strcasecmp(arg1, "gone"))
- status = HTTP_GONE;
- else if (!strcasecmp(arg1, "permanent"))
- status = HTTP_MOVED_PERMANENTLY;
- else if (!strcasecmp(arg1, "temp"))
- status = HTTP_MOVED_TEMPORARILY;
- else if (!strcasecmp(arg1, "seeother"))
- status = HTTP_SEE_OTHER;
- else if (apr_isdigit(*arg1))
- status = atoi(arg1);
- else {
- f = arg1;
- url = arg2;
- }
-
- if (use_regex) {
- r = ap_pregcomp(cmd->pool, f, REG_EXTENDED);
- if (r == NULL)
- return "Regular expression could not be compiled.";
- }
-
- if (ap_is_HTTP_REDIRECT(status)) {
- if (!url)
- return "URL to redirect to is missing";
- if (!use_regex && !ap_is_url(url))
- return "Redirect to non-URL";
- }
- else {
- if (url)
- return "Redirect URL not valid for this status";
- }
-
- if (cmd->path)
- new = apr_array_push(dirconf->redirects);
- else
- new = apr_array_push(serverconf->redirects);
-
- new->fake = f;
- new->real = url;
- new->regexp = r;
- new->redir_status = status;
- return NULL;
-}
-
-static const char *add_redirect(cmd_parms *cmd, void *dirconf,
- const char *arg1, const char *arg2,
- const char *arg3)
-{
- return add_redirect_internal(cmd, dirconf, arg1, arg2, arg3, 0);
-}
-
-static const char *add_redirect2(cmd_parms *cmd, void *dirconf,
- const char *arg1, const char *arg2)
-{
- return add_redirect_internal(cmd, dirconf, arg1, arg2, NULL, 0);
-}
-
-static const char *add_redirect_regex(cmd_parms *cmd, void *dirconf,
- const char *arg1, const char *arg2,
- const char *arg3)
-{
- return add_redirect_internal(cmd, dirconf, arg1, arg2, arg3, 1);
-}
-
-static const command_rec alias_cmds[] =
-{
- AP_INIT_TAKE2("Alias", add_alias, NULL, RSRC_CONF,
- "a fakename and a realname"),
- AP_INIT_TAKE2("ScriptAlias", add_alias, "cgi-script", RSRC_CONF,
- "a fakename and a realname"),
- AP_INIT_TAKE23("Redirect", add_redirect, (void *) HTTP_MOVED_TEMPORARILY,
- OR_FILEINFO,
- "an optional status, then document to be redirected and "
- "destination URL"),
- AP_INIT_TAKE2("AliasMatch", add_alias_regex, NULL, RSRC_CONF,
- "a regular expression and a filename"),
- AP_INIT_TAKE2("ScriptAliasMatch", add_alias_regex, "cgi-script", RSRC_CONF,
- "a regular expression and a filename"),
- AP_INIT_TAKE23("RedirectMatch", add_redirect_regex,
- (void *) HTTP_MOVED_TEMPORARILY, OR_FILEINFO,
- "an optional status, then a regular expression and "
- "destination URL"),
- AP_INIT_TAKE2("RedirectTemp", add_redirect2,
- (void *) HTTP_MOVED_TEMPORARILY, OR_FILEINFO,
- "a document to be redirected, then the destination URL"),
- AP_INIT_TAKE2("RedirectPermanent", add_redirect2,
- (void *) HTTP_MOVED_PERMANENTLY, OR_FILEINFO,
- "a document to be redirected, then the destination URL"),
- {NULL}
-};
-
-static int alias_matches(const char *uri, const char *alias_fakename)
-{
- const char *aliasp = alias_fakename, *urip = uri;
-
- while (*aliasp) {
- if (*aliasp == '/') {
- /* any number of '/' in the alias matches any number in
- * the supplied URI, but there must be at least one...
- */
- if (*urip != '/')
- return 0;
-
- do {
- ++aliasp;
- } while (*aliasp == '/');
- do {
- ++urip;
- } while (*urip == '/');
- }
- else {
- /* Other characters are compared literally */
- if (*urip++ != *aliasp++)
- return 0;
- }
- }
-
- /* Check last alias path component matched all the way */
-
- if (aliasp[-1] != '/' && *urip != '\0' && *urip != '/')
- return 0;
-
- /* Return number of characters from URI which matched (may be
- * greater than length of alias, since we may have matched
- * doubled slashes)
- */
-
- return urip - uri;
-}
-
-static char *try_alias_list(request_rec *r, apr_array_header_t *aliases,
- int doesc, int *status)
-{
- alias_entry *entries = (alias_entry *) aliases->elts;
- regmatch_t regm[AP_MAX_REG_MATCH];
- char *found = NULL;
- int i;
-
- for (i = 0; i < aliases->nelts; ++i) {
- alias_entry *p = &entries[i];
- int l;
-
- if (p->regexp) {
- if (!ap_regexec(p->regexp, r->uri, AP_MAX_REG_MATCH, regm, 0)) {
- if (p->real) {
- found = ap_pregsub(r->pool, p->real, r->uri,
- AP_MAX_REG_MATCH, regm);
- if (found && doesc) {
- apr_uri_t uri;
- apr_uri_parse(r->pool, found, &uri);
- /* Do not escape the query string or fragment. */
- found = apr_uri_unparse(r->pool, &uri,
- APR_URI_UNP_OMITQUERY);
- found = ap_escape_uri(r->pool, found);
- if (uri.query) {
- found = apr_pstrcat(r->pool, found, "?",
- uri.query, NULL);
- }
- if (uri.fragment) {
- found = apr_pstrcat(r->pool, found, "#",
- uri.fragment, NULL);
- }
- }
- }
- else {
- /* need something non-null */
- found = apr_pstrdup(r->pool, "");
- }
- }
- }
- else {
- l = alias_matches(r->uri, p->fake);
-
- if (l > 0) {
- if (doesc) {
- char *escurl;
- escurl = ap_os_escape_path(r->pool, r->uri + l, 1);
-
- found = apr_pstrcat(r->pool, p->real, escurl, NULL);
- }
- else
- found = apr_pstrcat(r->pool, p->real, r->uri + l, NULL);
- }
- }
-
- if (found) {
- if (p->handler) { /* Set handler, and leave a note for mod_cgi */
- r->handler = p->handler;
- apr_table_setn(r->notes, "alias-forced-type", r->handler);
- }
- /* XXX This is as SLOW as can be, next step, we optimize
- * and merge to whatever part of the found path was already
- * canonicalized. After I finish eliminating os canonical.
- * Better fail test for ap_server_root_relative needed here.
- */
- if (!doesc) {
- found = ap_server_root_relative(r->pool, found);
- }
- if (found) {
- *status = p->redir_status;
- }
- return found;
- }
-
- }
-
- return NULL;
-}
-
-static int translate_alias_redir(request_rec *r)
-{
- ap_conf_vector_t *sconf = r->server->module_config;
- alias_server_conf *serverconf = ap_get_module_config(sconf, &alias_module);
- char *ret;
- int status;
-
- if (r->uri[0] != '/' && r->uri[0] != '\0') {
- return DECLINED;
- }
-
- if ((ret = try_alias_list(r, serverconf->redirects, 1, &status)) != NULL) {
- if (ap_is_HTTP_REDIRECT(status)) {
- /* include QUERY_STRING if any */
- if (r->args) {
- ret = apr_pstrcat(r->pool, ret, "?", r->args, NULL);
- }
- apr_table_setn(r->headers_out, "Location", ret);
- }
- return status;
- }
-
- if ((ret = try_alias_list(r, serverconf->aliases, 0, &status)) != NULL) {
- r->filename = ret;
- return OK;
- }
-
- return DECLINED;
-}
-
-static int fixup_redir(request_rec *r)
-{
- void *dconf = r->per_dir_config;
- alias_dir_conf *dirconf =
- (alias_dir_conf *) ap_get_module_config(dconf, &alias_module);
- char *ret;
- int status;
-
- /* It may have changed since last time, so try again */
-
- if ((ret = try_alias_list(r, dirconf->redirects, 1, &status)) != NULL) {
- if (ap_is_HTTP_REDIRECT(status)) {
- if (ret[0] == '/') {
- char *orig_target = ret;
-
- ret = ap_construct_url(r->pool, ret, r);
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "incomplete redirection target of '%s' for "
- "URI '%s' modified to '%s'",
- orig_target, r->uri, ret);
- }
- if (!ap_is_url(ret)) {
- status = HTTP_INTERNAL_SERVER_ERROR;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "cannot redirect '%s' to '%s'; "
- "target is not a valid absoluteURI or abs_path",
- r->uri, ret);
- }
- else {
- /* append requested query only, if the config didn't
- * supply its own.
- */
- if (r->args && !ap_strchr(ret, '?')) {
- ret = apr_pstrcat(r->pool, ret, "?", r->args, NULL);
- }
- apr_table_setn(r->headers_out, "Location", ret);
- }
- }
- return status;
- }
-
- return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszSucc[]={ "mod_userdir.c",
- "mod_vhost_alias.c",NULL };
-
- ap_hook_translate_name(translate_alias_redir,NULL,aszSucc,APR_HOOK_MIDDLE);
- ap_hook_fixups(fixup_redir,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA alias_module =
-{
- STANDARD20_MODULE_STUFF,
- create_alias_dir_config, /* dir config creater */
- merge_alias_dir_config, /* dir merger --- default is to override */
- create_alias_config, /* server config */
- merge_alias_config, /* merge server configs */
- alias_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_alias.dsp b/modules/mappers/mod_alias.dsp
deleted file mode 100644
index d83a9376e6..0000000000
--- a/modules/mappers/mod_alias.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_alias" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_alias - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_alias.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_alias.mak" CFG="mod_alias - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_alias - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_alias - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_alias - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_alias_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_alias - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_alias_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_alias - Win32 Release"
-# Name "mod_alias - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_alias.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_alias.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_alias - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_alias.so "alias_module for Apache" ../../include/ap_release.h > .\mod_alias.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_alias - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_alias.so "alias_module for Apache" ../../include/ap_release.h > .\mod_alias.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_alias.exp b/modules/mappers/mod_alias.exp
deleted file mode 100644
index ac386ec3fa..0000000000
--- a/modules/mappers/mod_alias.exp
+++ /dev/null
@@ -1 +0,0 @@
-alias_module
diff --git a/modules/mappers/mod_dir.c b/modules/mappers/mod_dir.c
deleted file mode 100644
index c6e7f0d506..0000000000
--- a/modules/mappers/mod_dir.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_dir.c: handle default index files, and trailing-/ redirects
- */
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-
-module AP_MODULE_DECLARE_DATA dir_module;
-
-typedef enum {
- SLASH_OFF = 0,
- SLASH_ON,
- SLASH_UNSET
-} slash_cfg;
-
-typedef struct dir_config_struct {
- apr_array_header_t *index_names;
- slash_cfg do_slash;
-} dir_config_rec;
-
-#define DIR_CMD_PERMS OR_INDEXES
-
-static const char *add_index(cmd_parms *cmd, void *dummy, const char *arg)
-{
- dir_config_rec *d = dummy;
-
- if (!d->index_names) {
- d->index_names = apr_array_make(cmd->pool, 2, sizeof(char *));
- }
- *(const char **)apr_array_push(d->index_names) = arg;
- return NULL;
-}
-
-static const char *configure_slash(cmd_parms *cmd, void *d_, int arg)
-{
- dir_config_rec *d = d_;
-
- d->do_slash = arg ? SLASH_ON : SLASH_OFF;
- return NULL;
-}
-
-static const command_rec dir_cmds[] =
-{
- AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS,
- "a list of file names"),
- AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS,
- "On or Off"),
- {NULL}
-};
-
-static void *create_dir_config(apr_pool_t *p, char *dummy)
-{
- dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec));
-
- new->index_names = NULL;
- new->do_slash = SLASH_UNSET;
- return (void *) new;
-}
-
-static void *merge_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec));
- dir_config_rec *base = (dir_config_rec *)basev;
- dir_config_rec *add = (dir_config_rec *)addv;
-
- new->index_names = add->index_names ? add->index_names : base->index_names;
- new->do_slash =
- (add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash;
- return new;
-}
-
-static int fixup_dir(request_rec *r)
-{
- dir_config_rec *d;
- char *dummy_ptr[1];
- char **names_ptr;
- int num_names;
- int error_notfound = 0;
-
- /* only handle requests against directories */
- if (r->finfo.filetype != APR_DIR) {
- return DECLINED;
- }
-
- /* In case mod_mime wasn't present, and no handler was assigned. */
- if (!r->handler) {
- r->handler = DIR_MAGIC_TYPE;
- }
-
- /* Never tolerate path_info on dir requests */
- if (r->path_info && *r->path_info) {
- return DECLINED;
- }
-
- d = (dir_config_rec *)ap_get_module_config(r->per_dir_config,
- &dir_module);
-
- /* Redirect requests that are not '/' terminated */
- if (r->uri[0] == '\0' || r->uri[strlen(r->uri) - 1] != '/')
- {
- char *ifile;
-
- if (!d->do_slash) {
- return DECLINED;
- }
-
- /* Only redirect non-get requests if we have no note to warn
- * that this browser cannot handle redirs on non-GET requests
- * (such as Microsoft's WebFolders).
- */
- if ((r->method_number != M_GET)
- && apr_table_get(r->subprocess_env, "redirect-carefully")) {
- return DECLINED;
- }
-
- if (r->args != NULL) {
- ifile = apr_pstrcat(r->pool, ap_escape_uri(r->pool, r->uri),
- "/", "?", r->args, NULL);
- }
- else {
- ifile = apr_pstrcat(r->pool, ap_escape_uri(r->pool, r->uri),
- "/", NULL);
- }
-
- apr_table_setn(r->headers_out, "Location",
- ap_construct_url(r->pool, ifile, r));
- return HTTP_MOVED_PERMANENTLY;
- }
-
- if (strcmp(r->handler, DIR_MAGIC_TYPE)) {
- return DECLINED;
- }
-
- if (d->index_names) {
- names_ptr = (char **)d->index_names->elts;
- num_names = d->index_names->nelts;
- }
- else {
- dummy_ptr[0] = AP_DEFAULT_INDEX;
- names_ptr = dummy_ptr;
- num_names = 1;
- }
-
- for (; num_names; ++names_ptr, --num_names) {
- /* XXX: Is this name_ptr considered escaped yet, or not??? */
- char *name_ptr = *names_ptr;
- request_rec *rr;
-
- /* Once upon a time args were handled _after_ the successful redirect.
- * But that redirect might then _refuse_ the given r->args, creating
- * a nasty tangle. It seems safer to consider the r->args while we
- * determine if name_ptr is our viable index, and therefore set them
- * up correctly on redirect.
- */
- if (r->args != NULL) {
- name_ptr = apr_pstrcat(r->pool, name_ptr, "?", r->args, NULL);
- }
-
- rr = ap_sub_req_lookup_uri(name_ptr, r, NULL);
-
- /* XXX: (filetype == APR_REG) - we can't use a non-file index??? */
- if ( rr->status == HTTP_OK
- && ( (rr->handler && !strcmp(rr->handler, "proxy-server"))
- || rr->finfo.filetype == APR_REG)) {
- ap_internal_fast_redirect(rr, r);
- return OK;
- }
-
- /* If the request returned a redirect, propagate it to the client */
-
- if (ap_is_HTTP_REDIRECT(rr->status)
- || (rr->status == HTTP_NOT_ACCEPTABLE && num_names == 1)
- || (rr->status == HTTP_UNAUTHORIZED && num_names == 1)) {
-
- apr_pool_join(r->pool, rr->pool);
- error_notfound = rr->status;
- r->notes = apr_table_overlay(r->pool, r->notes, rr->notes);
- r->headers_out = apr_table_overlay(r->pool, r->headers_out,
- rr->headers_out);
- r->err_headers_out = apr_table_overlay(r->pool, r->err_headers_out,
- rr->err_headers_out);
- return error_notfound;
- }
-
- /* If the request returned something other than 404 (or 200),
- * it means the module encountered some sort of problem. To be
- * secure, we should return the error, rather than allow autoindex
- * to create a (possibly unsafe) directory index.
- *
- * So we store the error, and if none of the listed files
- * exist, we return the last error response we got, instead
- * of a directory listing.
- */
- if (rr->status && rr->status != HTTP_NOT_FOUND
- && rr->status != HTTP_OK) {
- error_notfound = rr->status;
- }
-
- ap_destroy_sub_req(rr);
- }
-
- if (error_notfound) {
- return error_notfound;
- }
-
- /* nothing for us to do, pass on through */
- return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(fixup_dir,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA dir_module = {
- STANDARD20_MODULE_STUFF,
- create_dir_config, /* create per-directory config structure */
- merge_dir_configs, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- dir_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_dir.dsp b/modules/mappers/mod_dir.dsp
deleted file mode 100644
index e46680c17c..0000000000
--- a/modules/mappers/mod_dir.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_dir" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_dir - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_dir.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_dir.mak" CFG="mod_dir - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_dir - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_dir - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_dir - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_dir_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_dir - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_dir_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_dir - Win32 Release"
-# Name "mod_dir - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_dir.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_dir.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_dir - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_dir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_dir.so "dir_module for Apache" ../../include/ap_release.h > .\mod_dir.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_dir - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_dir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_dir.so "dir_module for Apache" ../../include/ap_release.h > .\mod_dir.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_dir.exp b/modules/mappers/mod_dir.exp
deleted file mode 100644
index 5fbf772991..0000000000
--- a/modules/mappers/mod_dir.exp
+++ /dev/null
@@ -1 +0,0 @@
-dir_module
diff --git a/modules/mappers/mod_imap.c b/modules/mappers/mod_imap.c
deleted file mode 100644
index a5faf7b410..0000000000
--- a/modules/mappers/mod_imap.c
+++ /dev/null
@@ -1,893 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This imagemap module started as a port of the original imagemap.c
- * written by Rob McCool (11/13/93 robm@ncsa.uiuc.edu).
- * This version includes the mapping algorithms found in version 1.3
- * of imagemap.c.
- *
- * Contributors to this code include:
- *
- * Kevin Hughes, kevinh@pulua.hcc.hawaii.edu
- *
- * Eric Haines, erich@eye.com
- * "macmartinized" polygon code copyright 1992 by Eric Haines, erich@eye.com
- *
- * Randy Terbush, randy@zyzzyva.com
- * port to Apache module format, "base_uri" and support for relative URLs
- *
- * James H. Cloos, Jr., cloos@jhcloos.com
- * Added point datatype, using code in NCSA's version 1.8 imagemap.c
- * program, as distributed with version 1.4.1 of their server.
- * The point code is originally added by Craig Milo Rogers, Rogers@ISI.Edu
- *
- * Nathan Kurz, nate@tripod.com
- * Rewrite/reorganization. New handling of default, base and relative URLs.
- * New Configuration directives:
- * ImapMenu {none, formatted, semiformatted, unformatted}
- * ImapDefault {error, nocontent, referer, menu, URL}
- * ImapBase {map, referer, URL}
- * Support for creating non-graphical menu added. (backwards compatible):
- * Old: directive URL [x,y ...]
- * New: directive URL "Menu text" [x,y ...]
- * or: directive URL x,y ... "Menu text"
- * Map format and menu concept courtesy Joshua Bell, jsbell@acs.ucalgary.ca.
- *
- * Mark Cox, mark@ukweb.com, Allow relative URLs even when no base specified
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STDIO /* for sscanf() */
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-
-
-#define IMAP_MAGIC_TYPE "application/x-httpd-imap"
-#define MAXVERTS 100
-#define X 0
-#define Y 1
-
-#define IMAP_MENU_DEFAULT "formatted"
-#define IMAP_DEFAULT_DEFAULT "nocontent"
-#define IMAP_BASE_DEFAULT "map"
-
-#ifdef SUNOS4
-double strtod(); /* SunOS needed this */
-#endif
-
-module AP_MODULE_DECLARE_DATA imap_module;
-
-typedef struct {
- char *imap_menu;
- char *imap_default;
- char *imap_base;
-} imap_conf_rec;
-
-static void *create_imap_dir_config(apr_pool_t *p, char *dummy)
-{
- imap_conf_rec *icr =
- (imap_conf_rec *) apr_palloc(p, sizeof(imap_conf_rec));
-
- icr->imap_menu = NULL;
- icr->imap_default = NULL;
- icr->imap_base = NULL;
-
- return icr;
-}
-
-static void *merge_imap_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- imap_conf_rec *new = (imap_conf_rec *) apr_pcalloc(p, sizeof(imap_conf_rec));
- imap_conf_rec *base = (imap_conf_rec *) basev;
- imap_conf_rec *add = (imap_conf_rec *) addv;
-
- new->imap_menu = add->imap_menu ? add->imap_menu : base->imap_menu;
- new->imap_default = add->imap_default ? add->imap_default
- : base->imap_default;
- new->imap_base = add->imap_base ? add->imap_base : base->imap_base;
-
- return new;
-}
-
-
-static const command_rec imap_cmds[] =
-{
- AP_INIT_TAKE1("ImapMenu", ap_set_string_slot,
- (void *)APR_OFFSETOF(imap_conf_rec, imap_menu), OR_INDEXES,
- "the type of menu generated: none, formatted, semiformatted, "
- "unformatted"),
- AP_INIT_TAKE1("ImapDefault", ap_set_string_slot,
- (void *)APR_OFFSETOF(imap_conf_rec, imap_default), OR_INDEXES,
- "the action taken if no match: error, nocontent, referer, "
- "menu, URL"),
- AP_INIT_TAKE1("ImapBase", ap_set_string_slot,
- (void *)APR_OFFSETOF(imap_conf_rec, imap_base), OR_INDEXES,
- "the base for all URL's: map, referer, URL (or start of)"),
- {NULL}
-};
-
-static int pointinrect(const double point[2], double coords[MAXVERTS][2])
-{
- double max[2], min[2];
- if (coords[0][X] > coords[1][X]) {
- max[0] = coords[0][X];
- min[0] = coords[1][X];
- }
- else {
- max[0] = coords[1][X];
- min[0] = coords[0][X];
- }
-
- if (coords[0][Y] > coords[1][Y]) {
- max[1] = coords[0][Y];
- min[1] = coords[1][Y];
- }
- else {
- max[1] = coords[1][Y];
- min[1] = coords[0][Y];
- }
-
- return ((point[X] >= min[0] && point[X] <= max[0]) &&
- (point[Y] >= min[1] && point[Y] <= max[1]));
-}
-
-static int pointincircle(const double point[2], double coords[MAXVERTS][2])
-{
- double radius1, radius2;
-
- radius1 = ((coords[0][Y] - coords[1][Y]) * (coords[0][Y] - coords[1][Y]))
- + ((coords[0][X] - coords[1][X]) * (coords[0][X] - coords[1][X]));
-
- radius2 = ((coords[0][Y] - point[Y]) * (coords[0][Y] - point[Y]))
- + ((coords[0][X] - point[X]) * (coords[0][X] - point[X]));
-
- return (radius2 <= radius1);
-}
-
-#define fmin(a,b) (((a)>(b))?(b):(a))
-#define fmax(a,b) (((a)>(b))?(a):(b))
-
-static int pointinpoly(const double point[2], double pgon[MAXVERTS][2])
-{
- int i, numverts, crossings = 0;
- double x = point[X], y = point[Y];
-
- for (numverts = 0; pgon[numverts][X] != -1 && numverts < MAXVERTS;
- numverts++) {
- /* just counting the vertexes */
- }
-
- for (i = 0; i < numverts; i++) {
- double x1=pgon[i][X];
- double y1=pgon[i][Y];
- double x2=pgon[(i + 1) % numverts][X];
- double y2=pgon[(i + 1) % numverts][Y];
- double d=(y - y1) * (x2 - x1) - (x - x1) * (y2 - y1);
-
- if ((y1 >= y) != (y2 >= y)) {
- crossings +=y2 - y1 >= 0 ? d >= 0 : d <= 0;
- }
- if (!d && fmin(x1,x2) <= x && x <= fmax(x1,x2)
- && fmin(y1,y2) <= y && y <= fmax(y1,y2)) {
- return 1;
- }
- }
- return crossings & 0x01;
-}
-
-
-static int is_closer(const double point[2], double coords[MAXVERTS][2],
- double *closest)
-{
- double dist_squared = ((point[X] - coords[0][X])
- * (point[X] - coords[0][X]))
- + ((point[Y] - coords[0][Y])
- * (point[Y] - coords[0][Y]));
-
- if (point[X] < 0 || point[Y] < 0) {
- return (0); /* don't mess around with negative coordinates */
- }
-
- if (*closest < 0 || dist_squared < *closest) {
- *closest = dist_squared;
- return (1); /* if this is the first point or is the closest yet
- set 'closest' equal to this distance^2 */
- }
-
- return (0); /* if it's not the first or closest */
-
-}
-
-static double get_x_coord(const char *args)
-{
- char *endptr; /* we want it non-null */
- double x_coord = -1; /* -1 is returned if no coordinate is given */
-
- if (args == NULL) {
- return (-1); /* in case we aren't passed anything */
- }
-
- while (*args && !apr_isdigit(*args) && *args != ',') {
- args++; /* jump to the first digit, but not past
- a comma or end */
- }
-
- x_coord = strtod(args, &endptr);
-
- if (endptr > args) { /* if a conversion was made */
- return (x_coord);
- }
-
- return (-1); /* else if no conversion was made,
- or if no args was given */
-}
-
-static double get_y_coord(const char *args)
-{
- char *endptr; /* we want it non-null */
- const char *start_of_y = NULL;
- double y_coord = -1; /* -1 is returned on error */
-
- if (args == NULL) {
- return (-1); /* in case we aren't passed anything */
- }
-
- start_of_y = ap_strchr_c(args, ','); /* the comma */
-
- if (start_of_y) {
-
- start_of_y++; /* start looking at the character after
- the comma */
-
- while (*start_of_y && !apr_isdigit(*start_of_y)) {
- start_of_y++; /* jump to the first digit, but not
- past the end */
- }
-
- y_coord = strtod(start_of_y, &endptr);
-
- if (endptr > start_of_y) {
- return (y_coord);
- }
- }
-
- return (-1); /* if no conversion was made, or
- no comma was found in args */
-}
-
-
-/* See if string has a "quoted part", and if so set *quoted_part to
- * the first character of the quoted part, then hammer a \0 onto the
- * trailing quote, and set *string to point at the first character
- * past the second quote.
- *
- * Otherwise set *quoted_part to NULL, and leave *string alone.
- */
-static void read_quoted(char **string, char **quoted_part)
-{
- char *strp = *string;
-
- /* assume there's no quoted part */
- *quoted_part = NULL;
-
- while (apr_isspace(*strp)) {
- strp++; /* go along string until non-whitespace */
- }
-
- if (*strp == '"') { /* if that character is a double quote */
- strp++; /* step over it */
- *quoted_part = strp; /* note where the quoted part begins */
-
- while (*strp && *strp != '"') {
- ++strp; /* skip the quoted portion */
- }
-
- *strp = '\0'; /* end the string with a NUL */
-
- strp++; /* step over the last double quote */
- *string = strp;
- }
-}
-
-/*
- * returns the mapped URL or NULL.
- */
-static char *imap_url(request_rec *r, const char *base, const char *value)
-{
-/* translates a value into a URL. */
- int slen, clen;
- char *string_pos = NULL;
- const char *string_pos_const = NULL;
- char *directory = NULL;
- const char *referer = NULL;
- char *my_base;
-
- if (!strcasecmp(value, "map") || !strcasecmp(value, "menu")) {
- return ap_construct_url(r->pool, r->uri, r);
- }
-
- if (!strcasecmp(value, "nocontent") || !strcasecmp(value, "error")) {
- return apr_pstrdup(r->pool, value); /* these are handled elsewhere,
- so just copy them */
- }
-
- if (!strcasecmp(value, "referer")) {
- referer = apr_table_get(r->headers_in, "Referer");
- if (referer && *referer) {
- return apr_pstrdup(r->pool, referer);
- }
- else {
- /* XXX: This used to do *value = '\0'; ... which is totally bogus
- * because it hammers the passed in value, which can be a string
- * constant, or part of a config, or whatever. Total garbage.
- * This works around that without changing the rest of this
- * code much
- */
- value = ""; /* if 'referer' but no referring page,
- null the value */
- }
- }
-
- string_pos_const = value;
- while (apr_isalpha(*string_pos_const)) {
- string_pos_const++; /* go along the URL from the map
- until a non-letter */
- }
- if (*string_pos_const == ':') {
- /* if letters and then a colon (like http:) */
- /* it's an absolute URL, so use it! */
- return apr_pstrdup(r->pool, value);
- }
-
- if (!base || !*base) {
- if (value && *value) {
- return apr_pstrdup(r->pool, value); /* no base: use what is given */
- }
- /* no base, no value: pick a simple default */
- return ap_construct_url(r->pool, "/", r);
- }
-
- /* must be a relative URL to be combined with base */
- if (ap_strchr_c(base, '/') == NULL && (!strncmp(value, "../", 3)
- || !strcmp(value, ".."))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "invalid base directive in map file: %s", r->uri);
- return NULL;
- }
- my_base = apr_pstrdup(r->pool, base);
- string_pos = my_base;
- while (*string_pos) {
- if (*string_pos == '/' && *(string_pos + 1) == '/') {
- string_pos += 2; /* if there are two slashes, jump over them */
- continue;
- }
- if (*string_pos == '/') { /* the first single slash */
- if (value[0] == '/') {
- *string_pos = '\0';
- } /* if the URL from the map starts from root,
- end the base URL string at the first single
- slash */
- else {
- directory = string_pos; /* save the start of
- the directory portion */
-
- string_pos = strrchr(string_pos, '/'); /* now reuse
- string_pos */
- string_pos++; /* step over that last slash */
- *string_pos = '\0';
- } /* but if the map url is relative, leave the
- slash on the base (if there is one) */
- break;
- }
- string_pos++; /* until we get to the end of my_base without
- finding a slash by itself */
- }
-
- while (!strncmp(value, "../", 3) || !strcmp(value, "..")) {
-
- if (directory && (slen = strlen(directory))) {
-
- /* for each '..', knock a directory off the end
- by ending the string right at the last slash.
- But only consider the directory portion: don't eat
- into the server name. And only try if a directory
- portion was found */
-
- clen = slen - 1;
-
- while ((slen - clen) == 1) {
-
- if ((string_pos = strrchr(directory, '/'))) {
- *string_pos = '\0';
- }
- clen = strlen(directory);
- if (clen == 0) {
- break;
- }
- }
-
- value += 2; /* jump over the '..' that we found in the
- value */
- }
- else if (directory) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "invalid directory name in map file: %s", r->uri);
- return NULL;
- }
-
- if (!strncmp(value, "/../", 4) || !strcmp(value, "/..")) {
- value++; /* step over the '/' if there are more '..'
- to do. This way, we leave the starting
- '/' on value after the last '..', but get
- rid of it otherwise */
- }
-
- } /* by this point, value does not start
- with '..' */
-
- if (value && *value) {
- return apr_pstrcat(r->pool, my_base, value, NULL);
- }
- return my_base;
-}
-
-static int imap_reply(request_rec *r, char *redirect)
-{
- if (!strcasecmp(redirect, "error")) {
- /* they actually requested an error! */
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- if (!strcasecmp(redirect, "nocontent")) {
- /* tell the client to keep the page it has */
- return HTTP_NO_CONTENT;
- }
- if (redirect && *redirect) {
- /* must be a URL, so redirect to it */
- apr_table_setn(r->headers_out, "Location", redirect);
- return HTTP_MOVED_TEMPORARILY;
- }
- return HTTP_INTERNAL_SERVER_ERROR;
-}
-
-static void menu_header(request_rec *r, char *menu)
-{
- ap_set_content_type(r, "text/html");
-
- ap_rvputs(r, DOCTYPE_HTML_3_2, "<html><head>\n<title>Menu for ", r->uri,
- "</title>\n</head><body>\n", NULL);
-
- if (!strcasecmp(menu, "formatted")) {
- ap_rvputs(r, "<h1>Menu for ", r->uri, "</h1>\n<hr />\n\n", NULL);
- }
-
- return;
-}
-
-static void menu_blank(request_rec *r, char *menu)
-{
- if (!strcasecmp(menu, "formatted")) {
- ap_rputs("\n", r);
- }
- if (!strcasecmp(menu, "semiformatted")) {
- ap_rputs("<br />\n", r);
- }
- if (!strcasecmp(menu, "unformatted")) {
- ap_rputs("\n", r);
- }
- return;
-}
-
-static void menu_comment(request_rec *r, char *menu, char *comment)
-{
- if (!strcasecmp(menu, "formatted")) {
- ap_rputs("\n", r); /* print just a newline if 'formatted' */
- }
- if (!strcasecmp(menu, "semiformatted") && *comment) {
- ap_rvputs(r, comment, "\n", NULL);
- }
- if (!strcasecmp(menu, "unformatted") && *comment) {
- ap_rvputs(r, comment, "\n", NULL);
- }
- return; /* comments are ignored in the
- 'formatted' form */
-}
-
-static void menu_default(request_rec *r, char *menu, char *href, char *text)
-{
- if (!strcasecmp(href, "error") || !strcasecmp(href, "nocontent")) {
- return; /* don't print such lines, these aren't
- really href's */
- }
- if (!strcasecmp(menu, "formatted")) {
- ap_rvputs(r, "<pre>(Default) <a href=\"", href, "\">", text,
- "</a></pre>\n", NULL);
- }
- if (!strcasecmp(menu, "semiformatted")) {
- ap_rvputs(r, "<pre>(Default) <a href=\"", href, "\">", text,
- "</a></pre>\n", NULL);
- }
- if (!strcasecmp(menu, "unformatted")) {
- ap_rvputs(r, "<a href=\"", href, "\">", text, "</a>", NULL);
- }
- return;
-}
-
-static void menu_directive(request_rec *r, char *menu, char *href, char *text)
-{
- if (!strcasecmp(href, "error") || !strcasecmp(href, "nocontent")) {
- return; /* don't print such lines, as this isn't
- really an href */
- }
- if (!strcasecmp(menu, "formatted")) {
- ap_rvputs(r, "<pre> <a href=\"", href, "\">", text,
- "</a></pre>\n", NULL);
- }
- if (!strcasecmp(menu, "semiformatted")) {
- ap_rvputs(r, "<pre> <a href=\"", href, "\">", text,
- "</a></pre>\n", NULL);
- }
- if (!strcasecmp(menu, "unformatted")) {
- ap_rvputs(r, "<a href=\"", href, "\">", text, "</a>", NULL);
- }
- return;
-}
-
-static void menu_footer(request_rec *r)
-{
- ap_rputs("\n\n</body>\n</html>\n", r); /* finish the menu */
-}
-
-static int imap_handler_internal(request_rec *r)
-{
- char input[MAX_STRING_LEN];
- char *directive;
- char *value;
- char *href_text;
- char *base;
- char *redirect;
- char *mapdflt;
- char *closest = NULL;
- double closest_yet = -1;
- apr_status_t status;
-
- double testpoint[2];
- double pointarray[MAXVERTS + 1][2];
- int vertex;
-
- char *string_pos;
- int showmenu = 0;
-
- imap_conf_rec *icr;
-
- char *imap_menu;
- char *imap_default;
- char *imap_base;
-
- ap_configfile_t *imap;
-
- icr = ap_get_module_config(r->per_dir_config, &imap_module);
-
- imap_menu = icr->imap_menu ? icr->imap_menu : IMAP_MENU_DEFAULT;
- imap_default = icr->imap_default
- ? icr->imap_default : IMAP_DEFAULT_DEFAULT;
- imap_base = icr->imap_base ? icr->imap_base : IMAP_BASE_DEFAULT;
-
- status = ap_pcfg_openfile(&imap, r->pool, r->filename);
-
- if (status != APR_SUCCESS) {
- return HTTP_NOT_FOUND;
- }
-
- base = imap_url(r, NULL, imap_base); /* set base according
- to default */
- if (!base) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- mapdflt = imap_url(r, NULL, imap_default); /* and default to
- global default */
- if (!mapdflt) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- testpoint[X] = get_x_coord(r->args);
- testpoint[Y] = get_y_coord(r->args);
-
- if ((testpoint[X] == -1 || testpoint[Y] == -1) ||
- (testpoint[X] == 0 && testpoint[Y] == 0)) {
- /* if either is -1 or if both are zero (new Lynx) */
- /* we don't have valid coordinates */
- testpoint[X] = -1;
- testpoint[Y] = -1;
- if (strncasecmp(imap_menu, "none", 2)) {
- showmenu = 1; /* show the menu _unless_ ImapMenu is
- 'none' or 'no' */
- }
- }
-
- if (showmenu) { /* send start of imagemap menu if
- we're going to */
- menu_header(r, imap_menu);
- }
-
- while (!ap_cfg_getline(input, sizeof(input), imap)) {
- if (!input[0]) {
- if (showmenu) {
- menu_blank(r, imap_menu);
- }
- continue;
- }
-
- if (input[0] == '#') {
- if (showmenu) {
- menu_comment(r, imap_menu, input + 1);
- }
- continue;
- } /* blank lines and comments are ignored
- if we aren't printing a menu */
-
- /* find the first two space delimited fields, recall that
- * ap_cfg_getline has removed leading/trailing whitespace.
- *
- * note that we're tokenizing as we go... if we were to use the
- * ap_getword() class of functions we would end up allocating extra
- * memory for every line of the map file
- */
- string_pos = input;
- if (!*string_pos) { /* need at least two fields */
- goto need_2_fields;
- }
-
- directive = string_pos;
- while (*string_pos && !apr_isspace(*string_pos)) { /* past directive */
- ++string_pos;
- }
- if (!*string_pos) { /* need at least two fields */
- goto need_2_fields;
- }
- *string_pos++ = '\0';
-
- if (!*string_pos) { /* need at least two fields */
- goto need_2_fields;
- }
- while(*string_pos && apr_isspace(*string_pos)) { /* past whitespace */
- ++string_pos;
- }
-
- value = string_pos;
- while (*string_pos && !apr_isspace(*string_pos)) { /* past value */
- ++string_pos;
- }
- if (apr_isspace(*string_pos)) {
- *string_pos++ = '\0';
- }
- else {
- /* end of input, don't advance past it */
- *string_pos = '\0';
- }
-
- if (!strncasecmp(directive, "base", 4)) { /* base, base_uri */
- base = imap_url(r, NULL, value);
- if (!base) {
- goto menu_bail;
- }
- continue; /* base is never printed to a menu */
- }
-
- read_quoted(&string_pos, &href_text);
-
- if (!strcasecmp(directive, "default")) { /* default */
- mapdflt = imap_url(r, NULL, value);
- if (!mapdflt) {
- goto menu_bail;
- }
- if (showmenu) { /* print the default if there's a menu */
- redirect = imap_url(r, base, mapdflt);
- if (!redirect) {
- goto menu_bail;
- }
- menu_default(r, imap_menu, redirect,
- href_text ? href_text : mapdflt);
- }
- continue;
- }
-
- vertex = 0;
- while (vertex < MAXVERTS &&
- sscanf(string_pos, "%lf%*[, ]%lf",
- &pointarray[vertex][X], &pointarray[vertex][Y]) == 2) {
- /* Now skip what we just read... we can't use ANSIism %n */
- while (apr_isspace(*string_pos)) { /* past whitespace */
- string_pos++;
- }
- while (apr_isdigit(*string_pos)) { /* and the 1st number */
- string_pos++;
- }
- string_pos++; /* skip the ',' */
- while (apr_isspace(*string_pos)) { /* past any more whitespace */
- string_pos++;
- }
- while (apr_isdigit(*string_pos)) { /* 2nd number */
- string_pos++;
- }
- vertex++;
- } /* so long as there are more vertices to
- read, and we have room, read them in.
- We start where we left off of the last
- sscanf, not at the beginning. */
-
- pointarray[vertex][X] = -1; /* signals the end of vertices */
-
- if (showmenu) {
- if (!href_text) {
- read_quoted(&string_pos, &href_text); /* href text could
- be here instead */
- }
- redirect = imap_url(r, base, value);
- if (!redirect) {
- goto menu_bail;
- }
- menu_directive(r, imap_menu, redirect,
- href_text ? href_text : value);
- continue;
- }
- /* note that we don't make it past here if we are making a menu */
-
- if (testpoint[X] == -1 || pointarray[0][X] == -1) {
- continue; /* don't try the following tests if testpoints
- are invalid, or if there are no
- coordinates */
- }
-
- if (!strcasecmp(directive, "poly")) { /* poly */
-
- if (pointinpoly(testpoint, pointarray)) {
- ap_cfg_closefile(imap);
- redirect = imap_url(r, base, value);
- if (!redirect) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- return (imap_reply(r, redirect));
- }
- continue;
- }
-
- if (!strcasecmp(directive, "circle")) { /* circle */
-
- if (pointincircle(testpoint, pointarray)) {
- ap_cfg_closefile(imap);
- redirect = imap_url(r, base, value);
- if (!redirect) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- return (imap_reply(r, redirect));
- }
- continue;
- }
-
- if (!strcasecmp(directive, "rect")) { /* rect */
-
- if (pointinrect(testpoint, pointarray)) {
- ap_cfg_closefile(imap);
- redirect = imap_url(r, base, value);
- if (!redirect) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- return (imap_reply(r, redirect));
- }
- continue;
- }
-
- if (!strcasecmp(directive, "point")) { /* point */
-
- if (is_closer(testpoint, pointarray, &closest_yet)) {
- closest = apr_pstrdup(r->pool, value);
- }
-
- continue;
- } /* move on to next line whether it's
- closest or not */
-
- } /* nothing matched, so we get another line! */
-
- ap_cfg_closefile(imap); /* we are done with the map file; close it */
-
- if (showmenu) {
- menu_footer(r); /* finish the menu and we are done */
- return OK;
- }
-
- if (closest) { /* if a 'point' directive has been seen */
- redirect = imap_url(r, base, closest);
- if (!redirect) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- return (imap_reply(r, redirect));
- }
-
- if (mapdflt) { /* a default should be defined, even if
- only 'nocontent' */
- redirect = imap_url(r, base, mapdflt);
- if (!redirect) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- return (imap_reply(r, redirect));
- }
-
- return HTTP_INTERNAL_SERVER_ERROR; /* If we make it this far,
- we failed. They lose! */
-
-need_2_fields:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "map file %s, line %d syntax error: requires at "
- "least two fields", r->uri, imap->line_number);
- /* fall through */
-menu_bail:
- ap_cfg_closefile(imap);
- if (showmenu) {
- /* There's not much else we can do ... we've already sent the headers
- * to the client.
- */
- ap_rputs("\n\n[an internal server error occured]\n", r);
- menu_footer(r);
- return OK;
- }
- return HTTP_INTERNAL_SERVER_ERROR;
-}
-
-static int imap_handler(request_rec *r)
-{
- /* Optimization: skip the allocation of large local variables on the
- * stack (in imap_handler_internal()) on requests that aren't using
- * imagemaps
- */
- if (r->method_number != M_GET || (strcmp(r->handler,IMAP_MAGIC_TYPE)
- && strcmp(r->handler, "imap-file"))) {
- return DECLINED;
- }
- else {
- return imap_handler_internal(r);
- }
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(imap_handler,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA imap_module =
-{
- STANDARD20_MODULE_STUFF,
- create_imap_dir_config, /* dir config creater */
- merge_imap_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- imap_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_imap.dsp b/modules/mappers/mod_imap.dsp
deleted file mode 100644
index 492bf35bfb..0000000000
--- a/modules/mappers/mod_imap.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_imap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_imap - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_imap.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_imap.mak" CFG="mod_imap - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_imap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_imap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_imap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_imap_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_imap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_imap_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_imap - Win32 Release"
-# Name "mod_imap - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_imap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_imap.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_imap - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_imap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_imap.so "imap_module for Apache" ../../include/ap_release.h > .\mod_imap.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_imap - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_imap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_imap.so "imap_module for Apache" ../../include/ap_release.h > .\mod_imap.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_imap.exp b/modules/mappers/mod_imap.exp
deleted file mode 100644
index 1e0e0b83d0..0000000000
--- a/modules/mappers/mod_imap.exp
+++ /dev/null
@@ -1 +0,0 @@
-imap_module
diff --git a/modules/mappers/mod_negotiation.c b/modules/mappers/mod_negotiation.c
deleted file mode 100644
index 1a8f89695f..0000000000
--- a/modules/mappers/mod_negotiation.c
+++ /dev/null
@@ -1,3211 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_negotiation.c: keeps track of MIME types the client is willing to
- * accept, and contains code to handle type arbitration.
- *
- * rst
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "util_script.h"
-
-
-#define MAP_FILE_MAGIC_TYPE "application/x-type-map"
-
-/* Commands --- configuring document caching on a per (virtual?)
- * server basis...
- */
-
-typedef struct {
- int forcelangpriority;
- apr_array_header_t *language_priority;
-} neg_dir_config;
-
-/* forcelangpriority flags
- */
-#define FLP_UNDEF 0 /* Same as FLP_DEFAULT, but base overrides */
-#define FLP_NONE 1 /* Return 406, HTTP_NOT_ACCEPTABLE */
-#define FLP_PREFER 2 /* Use language_priority rather than MC */
-#define FLP_FALLBACK 4 /* Use language_priority rather than NA */
-
-#define FLP_DEFAULT FLP_PREFER
-
-/* env evaluation
- */
-#define DISCARD_ALL_ENCODINGS 1 /* no-gzip */
-#define DISCARD_ALL_BUT_HTML 2 /* gzip-only-text/html */
-
-module AP_MODULE_DECLARE_DATA negotiation_module;
-
-static void *create_neg_dir_config(apr_pool_t *p, char *dummy)
-{
- neg_dir_config *new = (neg_dir_config *) apr_palloc(p,
- sizeof(neg_dir_config));
-
- new->forcelangpriority = FLP_UNDEF;
- new->language_priority = NULL;
- return new;
-}
-
-static void *merge_neg_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- neg_dir_config *base = (neg_dir_config *) basev;
- neg_dir_config *add = (neg_dir_config *) addv;
- neg_dir_config *new = (neg_dir_config *) apr_palloc(p,
- sizeof(neg_dir_config));
-
- /* give priority to the config in the subdirectory */
- new->forcelangpriority = (add->forcelangpriority != FLP_UNDEF)
- ? add->forcelangpriority
- : base->forcelangpriority;
- new->language_priority = add->language_priority
- ? add->language_priority
- : base->language_priority;
- return new;
-}
-
-static const char *set_language_priority(cmd_parms *cmd, void *n_,
- const char *lang)
-{
- neg_dir_config *n = n_;
- const char **langp;
-
- if (!n->language_priority)
- n->language_priority = apr_array_make(cmd->pool, 4, sizeof(char *));
-
- langp = (const char **) apr_array_push(n->language_priority);
- *langp = lang;
- return NULL;
-}
-
-static const char *set_force_priority(cmd_parms *cmd, void *n_, const char *w)
-{
- neg_dir_config *n = n_;
-
- if (!strcasecmp(w, "None")) {
- if (n->forcelangpriority & ~FLP_NONE) {
- return "Cannot combine ForceLanguagePriority options with None";
- }
- n->forcelangpriority = FLP_NONE;
- }
- else if (!strcasecmp(w, "Prefer")) {
- if (n->forcelangpriority & FLP_NONE) {
- return "Cannot combine ForceLanguagePriority options None and "
- "Prefer";
- }
- n->forcelangpriority |= FLP_PREFER;
- }
- else if (!strcasecmp(w, "Fallback")) {
- if (n->forcelangpriority & FLP_NONE) {
- return "Cannot combine ForceLanguagePriority options None and "
- "Fallback";
- }
- n->forcelangpriority |= FLP_FALLBACK;
- }
- else {
- return apr_pstrcat(cmd->pool, "Invalid ForceLanguagePriority option ",
- w, NULL);
- }
-
- return NULL;
-}
-
-static const char *cache_negotiated_docs(cmd_parms *cmd, void *dummy,
- int arg)
-{
- ap_set_module_config(cmd->server->module_config, &negotiation_module,
- (arg ? "Cache" : NULL));
- return NULL;
-}
-
-static int do_cache_negotiated_docs(server_rec *s)
-{
- return (ap_get_module_config(s->module_config,
- &negotiation_module) != NULL);
-}
-
-static const command_rec negotiation_cmds[] =
-{
- AP_INIT_FLAG("CacheNegotiatedDocs", cache_negotiated_docs, NULL, RSRC_CONF,
- "Either 'on' or 'off' (default)"),
- AP_INIT_ITERATE("LanguagePriority", set_language_priority, NULL,
- OR_FILEINFO,
- "space-delimited list of MIME language abbreviations"),
- AP_INIT_ITERATE("ForceLanguagePriority", set_force_priority, NULL,
- OR_FILEINFO,
- "Force LanguagePriority elections, either None, or "
- "Fallback and/or Prefer"),
- {NULL}
-};
-
-/*
- * Record of available info on a media type specified by the client
- * (we also use 'em for encodings and languages)
- */
-
-typedef struct accept_rec {
- char *name; /* MUST be lowercase */
- float quality;
- float level;
- char *charset; /* for content-type only */
-} accept_rec;
-
-/*
- * Record of available info on a particular variant
- *
- * Note that a few of these fields are updated by the actual negotiation
- * code. These are:
- *
- * level_matched --- initialized to zero. Set to the value of level
- * if the client actually accepts this media type at that
- * level (and *not* if it got in on a wildcard). See level_cmp
- * below.
- * mime_stars -- initialized to zero. Set to the number of stars
- * present in the best matching Accept header element.
- * 1 for star/star, 2 for type/star and 3 for
- * type/subtype.
- *
- * definite -- initialized to 1. Set to 0 if there is a match which
- * makes the variant non-definite according to the rules
- * in rfc2296.
- */
-
-typedef struct var_rec {
- request_rec *sub_req; /* May be NULL (is, for map files) */
- const char *mime_type; /* MUST be lowercase */
- const char *file_name; /* Set to 'this' (for map file body content) */
- apr_off_t body; /* Only for map file body content */
- const char *content_encoding;
- apr_array_header_t *content_languages; /* list of lang. for this variant */
- const char *content_charset;
- const char *description;
-
- /* The next five items give the quality values for the dimensions
- * of negotiation for this variant. They are obtained from the
- * appropriate header lines, except for source_quality, which
- * is obtained from the variant itself (the 'qs' parameter value
- * from the variant's mime-type). Apart from source_quality,
- * these values are set when we find the quality for each variant
- * (see best_match()). source_quality is set from the 'qs' parameter
- * of the variant description or mime type: see set_mime_fields().
- */
- float lang_quality; /* quality of this variant's language */
- float encoding_quality; /* ditto encoding */
- float charset_quality; /* ditto charset */
- float mime_type_quality; /* ditto media type */
- float source_quality; /* source quality for this variant */
-
- /* Now some special values */
- float level; /* Auxiliary to content-type... */
- apr_off_t bytes; /* content length, if known */
- int lang_index; /* Index into LanguagePriority list */
- int is_pseudo_html; /* text/html, *or* the INCLUDES_MAGIC_TYPEs */
-
- /* Above are all written-once properties of the variant. The
- * three fields below are changed during negotiation:
- */
-
- float level_matched;
- int mime_stars;
- int definite;
-} var_rec;
-
-/* Something to carry around the state of negotiation (and to keep
- * all of this thread-safe)...
- */
-
-typedef struct {
- apr_pool_t *pool;
- request_rec *r;
- neg_dir_config *conf;
- char *dir_name;
- int accept_q; /* 1 if an Accept item has a q= param */
- float default_lang_quality; /* fiddle lang q for variants with no lang */
-
- /* the array pointers below are NULL if the corresponding accept
- * headers are not present
- */
- apr_array_header_t *accepts; /* accept_recs */
- apr_array_header_t *accept_encodings; /* accept_recs */
- apr_array_header_t *accept_charsets; /* accept_recs */
- apr_array_header_t *accept_langs; /* accept_recs */
-
- apr_array_header_t *avail_vars; /* available variants */
-
- int count_multiviews_variants; /* number of variants found on disk */
-
- int is_transparent; /* 1 if this resource is trans. negotiable */
-
- int dont_fiddle_headers; /* 1 if we may not fiddle with accept hdrs */
- int ua_supports_trans; /* 1 if ua supports trans negotiation */
- int send_alternates; /* 1 if we want to send an Alternates header */
- int may_choose; /* 1 if we may choose a variant for the client */
- int use_rvsa; /* 1 if we must use RVSA/1.0 negotiation algo */
-} negotiation_state;
-
-/* A few functions to manipulate var_recs.
- * Cleaning out the fields...
- */
-
-static void clean_var_rec(var_rec *mime_info)
-{
- mime_info->sub_req = NULL;
- mime_info->mime_type = "";
- mime_info->file_name = "";
- mime_info->body = 0;
- mime_info->content_encoding = NULL;
- mime_info->content_languages = NULL;
- mime_info->content_charset = "";
- mime_info->description = "";
-
- mime_info->is_pseudo_html = 0;
- mime_info->level = 0.0f;
- mime_info->level_matched = 0.0f;
- mime_info->bytes = -1;
- mime_info->lang_index = -1;
- mime_info->mime_stars = 0;
- mime_info->definite = 1;
-
- mime_info->charset_quality = 1.0f;
- mime_info->encoding_quality = 1.0f;
- mime_info->lang_quality = 1.0f;
- mime_info->mime_type_quality = 1.0f;
- mime_info->source_quality = 0.0f;
-}
-
-/* Initializing the relevant fields of a variant record from the
- * accept_info read out of its content-type, one way or another.
- */
-
-static void set_mime_fields(var_rec *var, accept_rec *mime_info)
-{
- var->mime_type = mime_info->name;
- var->source_quality = mime_info->quality;
- var->level = mime_info->level;
- var->content_charset = mime_info->charset;
-
- var->is_pseudo_html = (!strcmp(var->mime_type, "text/html")
- || !strcmp(var->mime_type, INCLUDES_MAGIC_TYPE)
- || !strcmp(var->mime_type, INCLUDES_MAGIC_TYPE3));
-}
-
-/* Create a variant list validator in r using info from vlistr. */
-
-static void set_vlist_validator(request_rec *r, request_rec *vlistr)
-{
- /* Calculating the variant list validator is similar to
- * calculating an etag for the source of the variant list
- * information, so we use ap_make_etag(). Note that this
- * validator can be 'weak' in extreme case.
- */
- ap_update_mtime(vlistr, vlistr->finfo.mtime);
- r->vlist_validator = ap_make_etag(vlistr, 0);
-
- /* ap_set_etag will later take r->vlist_validator into account
- * when creating the etag header
- */
-}
-
-
-/*****************************************************************
- *
- * Parsing (lists of) media types and their parameters, as seen in
- * HTTPD header lines and elsewhere.
- */
-
-/*
- * parse quality value. atof(3) is not well-usable here, because it
- * depends on the locale (argh).
- *
- * However, RFC 2616 states:
- * 3.9 Quality Values
- *
- * [...] HTTP/1.1 applications MUST NOT generate more than three digits
- * after the decimal point. User configuration of these values SHOULD also
- * be limited in this fashion.
- *
- * qvalue = ( "0" [ "." 0*3DIGIT ] )
- * | ( "1" [ "." 0*3("0") ] )
- *
- * This is quite easy. If the supplied string doesn't match the above
- * definition (loosely), we simply return 1 (same as if there's no qvalue)
- */
-
-static float atoq(const char *string)
-{
- if (!string || !*string) {
- return 1.0f;
- }
-
- while (*string && apr_isspace(*string)) {
- ++string;
- }
-
- /* be tolerant and accept qvalues without leading zero
- * (also for backwards compat, where atof() was in use)
- */
- if (*string != '.' && *string++ != '0') {
- return 1.0f;
- }
-
- if (*string == '.') {
- /* better only one division later, than dealing with fscking
- * IEEE format 0.1 factors ...
- */
- int i = 0;
-
- if (*++string >= '0' && *string <= '9') {
- i += (*string - '0') * 100;
-
- if (*++string >= '0' && *string <= '9') {
- i += (*string - '0') * 10;
-
- if (*++string > '0' && *string <= '9') {
- i += (*string - '0');
- }
- }
- }
-
- return (float)i / 1000.0f;
- }
-
- return 0.0f;
-}
-
-/*
- * Get a single mime type entry --- one media type and parameters;
- * enter the values we recognize into the argument accept_rec
- */
-
-static const char *get_entry(apr_pool_t *p, accept_rec *result,
- const char *accept_line)
-{
- result->quality = 1.0f;
- result->level = 0.0f;
- result->charset = "";
-
- /*
- * Note that this handles what I gather is the "old format",
- *
- * Accept: text/html text/plain moo/zot
- *
- * without any compatibility kludges --- if the token after the
- * MIME type begins with a semicolon, we know we're looking at parms,
- * otherwise, we know we aren't. (So why all the pissing and moaning
- * in the CERN server code? I must be missing something).
- */
-
- result->name = ap_get_token(p, &accept_line, 0);
- ap_str_tolower(result->name); /* You want case insensitive,
- * you'll *get* case insensitive.
- */
-
- /* KLUDGE!!! Default HTML to level 2.0 unless the browser
- * *explicitly* says something else.
- */
-
- if (!strcmp(result->name, "text/html") && (result->level == 0.0)) {
- result->level = 2.0f;
- }
- else if (!strcmp(result->name, INCLUDES_MAGIC_TYPE)) {
- result->level = 2.0f;
- }
- else if (!strcmp(result->name, INCLUDES_MAGIC_TYPE3)) {
- result->level = 3.0f;
- }
-
- while (*accept_line == ';') {
- /* Parameters ... */
-
- char *parm;
- char *cp;
- char *end;
-
- ++accept_line;
- parm = ap_get_token(p, &accept_line, 1);
-
- /* Look for 'var = value' --- and make sure the var is in lcase. */
-
- for (cp = parm; (*cp && !apr_isspace(*cp) && *cp != '='); ++cp) {
- *cp = apr_tolower(*cp);
- }
-
- if (!*cp) {
- continue; /* No '='; just ignore it. */
- }
-
- *cp++ = '\0'; /* Delimit var */
- while (*cp && (apr_isspace(*cp) || *cp == '=')) {
- ++cp;
- }
-
- if (*cp == '"') {
- ++cp;
- for (end = cp;
- (*end && *end != '\n' && *end != '\r' && *end != '\"');
- end++);
- }
- else {
- for (end = cp; (*end && !apr_isspace(*end)); end++);
- }
- if (*end) {
- *end = '\0'; /* strip ending quote or return */
- }
- ap_str_tolower(cp);
-
- if (parm[0] == 'q'
- && (parm[1] == '\0' || (parm[1] == 's' && parm[2] == '\0'))) {
- result->quality = atoq(cp);
- }
- else if (parm[0] == 'l' && !strcmp(&parm[1], "evel")) {
- result->level = (float)atoi(cp);
- }
- else if (!strcmp(parm, "charset")) {
- result->charset = cp;
- }
- }
-
- if (*accept_line == ',') {
- ++accept_line;
- }
-
- return accept_line;
-}
-
-/*****************************************************************
- *
- * Dealing with header lines ...
- *
- * Accept, Accept-Charset, Accept-Language and Accept-Encoding
- * are handled by do_header_line() - they all have the same
- * basic structure of a list of items of the format
- * name; q=N; charset=TEXT
- *
- * where charset is only valid in Accept.
- */
-
-static apr_array_header_t *do_header_line(apr_pool_t *p,
- const char *accept_line)
-{
- apr_array_header_t *accept_recs;
-
- if (!accept_line) {
- return NULL;
- }
-
- accept_recs = apr_array_make(p, 40, sizeof(accept_rec));
-
- while (*accept_line) {
- accept_rec *new = (accept_rec *) apr_array_push(accept_recs);
- accept_line = get_entry(p, new, accept_line);
- }
-
- return accept_recs;
-}
-
-/* Given the text of the Content-Languages: line from the var map file,
- * return an array containing the languages of this variant
- */
-
-static apr_array_header_t *do_languages_line(apr_pool_t *p,
- const char **lang_line)
-{
- apr_array_header_t *lang_recs = apr_array_make(p, 2, sizeof(char *));
-
- if (!lang_line) {
- return lang_recs;
- }
-
- while (**lang_line) {
- char **new = (char **) apr_array_push(lang_recs);
- *new = ap_get_token(p, lang_line, 0);
- ap_str_tolower(*new);
- if (**lang_line == ',' || **lang_line == ';') {
- ++(*lang_line);
- }
- }
-
- return lang_recs;
-}
-
-/*****************************************************************
- *
- * Handling header lines from clients...
- */
-
-static negotiation_state *parse_accept_headers(request_rec *r)
-{
- negotiation_state *new =
- (negotiation_state *) apr_pcalloc(r->pool, sizeof(negotiation_state));
- accept_rec *elts;
- apr_table_t *hdrs = r->headers_in;
- int i;
-
- new->pool = r->pool;
- new->r = r;
- new->conf = (neg_dir_config *)ap_get_module_config(r->per_dir_config,
- &negotiation_module);
-
- new->dir_name = ap_make_dirstr_parent(r->pool, r->filename);
-
- new->accepts = do_header_line(r->pool, apr_table_get(hdrs, "Accept"));
-
- /* calculate new->accept_q value */
- if (new->accepts) {
- elts = (accept_rec *) new->accepts->elts;
-
- for (i = 0; i < new->accepts->nelts; ++i) {
- if (elts[i].quality < 1.0) {
- new->accept_q = 1;
- }
- }
- }
-
- new->accept_encodings =
- do_header_line(r->pool, apr_table_get(hdrs, "Accept-Encoding"));
- new->accept_langs =
- do_header_line(r->pool, apr_table_get(hdrs, "Accept-Language"));
- new->accept_charsets =
- do_header_line(r->pool, apr_table_get(hdrs, "Accept-Charset"));
-
- /* This is possibly overkill for some servers, heck, we have
- * only 33 index.html variants in docs/docroot (today).
- * Make this configurable?
- */
- new->avail_vars = apr_array_make(r->pool, 40, sizeof(var_rec));
-
- return new;
-}
-
-
-static void parse_negotiate_header(request_rec *r, negotiation_state *neg)
-{
- const char *negotiate = apr_table_get(r->headers_in, "Negotiate");
- char *tok;
-
- /* First, default to no TCN, no Alternates, and the original Apache
- * negotiation algorithm with fiddles for broken browser configs.
- *
- * To save network bandwidth, we do not configure to send an
- * Alternates header to the user agent by default. User
- * agents that want an Alternates header for agent-driven
- * negotiation will have to request it by sending an
- * appropriate Negotiate header.
- */
- neg->ua_supports_trans = 0;
- neg->send_alternates = 0;
- neg->may_choose = 1;
- neg->use_rvsa = 0;
- neg->dont_fiddle_headers = 0;
-
- if (!negotiate)
- return;
-
- if (strcmp(negotiate, "trans") == 0) {
- /* Lynx 2.7 and 2.8 send 'negotiate: trans' even though they
- * do not support transparent content negotiation, so for Lynx we
- * ignore the negotiate header when its contents are exactly "trans".
- * If future versions of Lynx ever need to say 'negotiate: trans',
- * they can send the equivalent 'negotiate: trans, trans' instead
- * to avoid triggering the workaround below.
- */
- const char *ua = apr_table_get(r->headers_in, "User-Agent");
-
- if (ua && (strncmp(ua, "Lynx", 4) == 0))
- return;
- }
-
- neg->may_choose = 0; /* An empty Negotiate would require 300 response */
-
- while ((tok = ap_get_list_item(neg->pool, &negotiate)) != NULL) {
-
- if (strcmp(tok, "trans") == 0 ||
- strcmp(tok, "vlist") == 0 ||
- strcmp(tok, "guess-small") == 0 ||
- apr_isdigit(tok[0]) ||
- strcmp(tok, "*") == 0) {
-
- /* The user agent supports transparent negotiation */
- neg->ua_supports_trans = 1;
-
- /* Send-alternates could be configurable, but note
- * that it must be 1 if we have 'vlist' in the
- * negotiate header.
- */
- neg->send_alternates = 1;
-
- if (strcmp(tok, "1.0") == 0) {
- /* we may use the RVSA/1.0 algorithm, configure for it */
- neg->may_choose = 1;
- neg->use_rvsa = 1;
- neg->dont_fiddle_headers = 1;
- }
- else if (tok[0] == '*') {
- /* we may use any variant selection algorithm, configure
- * to use the Apache algorithm
- */
- neg->may_choose = 1;
-
- /* We disable header fiddles on the assumption that a
- * client sending Negotiate knows how to send correct
- * headers which don't need fiddling.
- */
- neg->dont_fiddle_headers = 1;
- }
- }
- }
-
-#ifdef NEG_DEBUG
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "dont_fiddle_headers=%d use_rvsa=%d ua_supports_trans=%d "
- "send_alternates=%d, may_choose=%d",
- neg->dont_fiddle_headers, neg->use_rvsa,
- neg->ua_supports_trans, neg->send_alternates, neg->may_choose);
-#endif
-
-}
-
-/* Sometimes clients will give us no Accept info at all; this routine sets
- * up the standard default for that case, and also arranges for us to be
- * willing to run a CGI script if we find one. (In fact, we set up to
- * dramatically prefer CGI scripts in cases where that's appropriate,
- * e.g., POST or when URI includes query args or extra path info).
- */
-static void maybe_add_default_accepts(negotiation_state *neg,
- int prefer_scripts)
-{
- accept_rec *new_accept;
-
- if (!neg->accepts) {
- neg->accepts = apr_array_make(neg->pool, 4, sizeof(accept_rec));
-
- new_accept = (accept_rec *) apr_array_push(neg->accepts);
-
- new_accept->name = "*/*";
- new_accept->quality = 1.0f;
- new_accept->level = 0.0f;
- }
-
- new_accept = (accept_rec *) apr_array_push(neg->accepts);
-
- new_accept->name = CGI_MAGIC_TYPE;
- if (neg->use_rvsa) {
- new_accept->quality = 0;
- }
- else {
- new_accept->quality = prefer_scripts ? 2.0f : 0.001f;
- }
- new_accept->level = 0.0f;
-}
-
-/*****************************************************************
- *
- * Parsing type-map files, in Roy's meta/http format augmented with
- * #-comments.
- */
-
-/* Reading RFC822-style header lines, ignoring #-comments and
- * handling continuations.
- */
-
-enum header_state {
- header_eof, header_seen, header_sep
-};
-
-static enum header_state get_header_line(char *buffer, int len, apr_file_t *map)
-{
- char *buf_end = buffer + len;
- char *cp;
- char c;
-
- /* Get a noncommented line */
-
- do {
- if (apr_file_gets(buffer, MAX_STRING_LEN, map) != APR_SUCCESS) {
- return header_eof;
- }
- } while (buffer[0] == '#');
-
- /* If blank, just return it --- this ends information on this variant */
-
- for (cp = buffer; (*cp && apr_isspace(*cp)); ++cp) {
- continue;
- }
-
- if (*cp == '\0') {
- return header_sep;
- }
-
- /* If non-blank, go looking for header lines, but note that we still
- * have to treat comments specially...
- */
-
- cp += strlen(cp);
-
- /* We need to shortcut the rest of this block following the Body:
- * tag - we will not look for continutation after this line.
- */
- if (!strncasecmp(buffer, "Body:", 5))
- return header_seen;
-
- while (apr_file_getc(&c, map) != APR_EOF) {
- if (c == '#') {
- /* Comment line */
- while (apr_file_getc(&c, map) != APR_EOF && c != '\n') {
- continue;
- }
- }
- else if (apr_isspace(c)) {
- /* Leading whitespace. POSSIBLE continuation line
- * Also, possibly blank --- if so, we ungetc() the final newline
- * so that we will pick up the blank line the next time 'round.
- */
-
- while (c != '\n' && apr_isspace(c)) {
- if(apr_file_getc(&c, map) != APR_SUCCESS)
- break;
- }
-
- apr_file_ungetc(c, map);
-
- if (c == '\n') {
- return header_seen; /* Blank line */
- }
-
- /* Continuation */
-
- while ( cp < buf_end - 2
- && (apr_file_getc(&c, map)) != APR_EOF
- && c != '\n') {
- *cp++ = c;
- }
-
- *cp++ = '\n';
- *cp = '\0';
- }
- else {
-
- /* Line beginning with something other than whitespace */
-
- apr_file_ungetc(c, map);
- return header_seen;
- }
- }
-
- return header_seen;
-}
-
-static apr_off_t get_body(char *buffer, apr_size_t *len, const char *tag,
- apr_file_t *map)
-{
- char *endbody;
- int bodylen;
- int taglen;
- apr_off_t pos;
-
- taglen = strlen(tag);
- *len -= taglen;
-
- /* We are at the first character following a body:tag\n entry
- * Suck in the body, then backspace to the first char after the
- * closing tag entry. If we fail to read, find the tag or back
- * up then we have a hosed file, so give up already
- */
- if (apr_file_read(map, buffer, len) != APR_SUCCESS) {
- return -1;
- }
-
- /* put a copy of the tag *after* the data read from the file
- * so that strstr() will find something with no reliance on
- * terminating '\0'
- */
- memcpy(buffer + *len, tag, taglen);
- endbody = strstr(buffer, tag);
- if (endbody == buffer + *len) {
- return -1;
- }
- bodylen = endbody - buffer;
- endbody += strlen(tag);
- /* Skip all the trailing cruft after the end tag to the next line */
- while (*endbody) {
- if (*endbody == '\n') {
- ++endbody;
- break;
- }
- ++endbody;
- }
-
- pos = -(apr_off_t)(*len - (endbody - buffer));
- if (apr_file_seek(map, APR_CUR, &pos) != APR_SUCCESS) {
- return -1;
- }
-
- /* Give the caller back the actual body's file offset and length */
- *len = bodylen;
- return pos - (endbody - buffer);
-}
-
-
-/* Stripping out RFC822 comments */
-
-static void strip_paren_comments(char *hdr)
-{
- /* Hmmm... is this correct? In Roy's latest draft, (comments) can nest! */
- /* Nope, it isn't correct. Fails to handle backslash escape as well. */
-
- while (*hdr) {
- if (*hdr == '"') {
- hdr = strchr(hdr, '"');
- if (hdr == NULL) {
- return;
- }
- ++hdr;
- }
- else if (*hdr == '(') {
- while (*hdr && *hdr != ')') {
- *hdr++ = ' ';
- }
-
- if (*hdr) {
- *hdr++ = ' ';
- }
- }
- else {
- ++hdr;
- }
- }
-}
-
-/* Getting to a header body from the header */
-
-static char *lcase_header_name_return_body(char *header, request_rec *r)
-{
- char *cp = header;
-
- for ( ; *cp && *cp != ':' ; ++cp) {
- *cp = apr_tolower(*cp);
- }
-
- if (!*cp) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Syntax error in type map, no ':' in %s for header %s",
- r->filename, header);
- return NULL;
- }
-
- do {
- ++cp;
- } while (*cp && apr_isspace(*cp));
-
- if (!*cp) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Syntax error in type map --- no header body: %s for %s",
- r->filename, header);
- return NULL;
- }
-
- return cp;
-}
-
-static int read_type_map(apr_file_t **map, negotiation_state *neg,
- request_rec *rr)
-{
- request_rec *r = neg->r;
- apr_file_t *map_ = NULL;
- apr_status_t status;
- char buffer[MAX_STRING_LEN];
- enum header_state hstate;
- struct var_rec mime_info;
- int has_content;
-
- if (!map)
- map = &map_;
-
- /* We are not using multiviews */
- neg->count_multiviews_variants = 0;
-
- if ((status = apr_file_open(map, rr->filename, APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, neg->pool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "cannot access type map file: %s", rr->filename);
- return APR_STATUS_IS_ENOENT(status) ? HTTP_NOT_FOUND : HTTP_FORBIDDEN;
- }
-
- clean_var_rec(&mime_info);
- has_content = 0;
-
- do {
- hstate = get_header_line(buffer, MAX_STRING_LEN, *map);
-
- if (hstate == header_seen) {
- char *body1 = lcase_header_name_return_body(buffer, neg->r);
- const char *body;
-
- if (body1 == NULL) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- strip_paren_comments(body1);
- body = body1;
-
- if (!strncmp(buffer, "uri:", 4)) {
- mime_info.file_name = ap_get_token(neg->pool, &body, 0);
- }
- else if (!strncmp(buffer, "content-type:", 13)) {
- struct accept_rec accept_info;
-
- get_entry(neg->pool, &accept_info, body);
- set_mime_fields(&mime_info, &accept_info);
- has_content = 1;
- }
- else if (!strncmp(buffer, "content-length:", 15)) {
- char *errp;
- apr_off_t number;
-
- if (apr_strtoff(&number, body, &errp, 10)
- || *errp || number < 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Parse error in type map, Content-Length: "
- "'%s' in %s is invalid.",
- body, r->filename);
- break;
- }
- mime_info.bytes = number;
- has_content = 1;
- }
- else if (!strncmp(buffer, "content-language:", 17)) {
- mime_info.content_languages = do_languages_line(neg->pool,
- &body);
- has_content = 1;
- }
- else if (!strncmp(buffer, "content-encoding:", 17)) {
- mime_info.content_encoding = ap_get_token(neg->pool, &body, 0);
- has_content = 1;
- }
- else if (!strncmp(buffer, "description:", 12)) {
- char *desc = apr_pstrdup(neg->pool, body);
- char *cp;
-
- for (cp = desc; *cp; ++cp) {
- if (*cp=='\n') *cp=' ';
- }
- if (cp>desc) *(cp-1)=0;
- mime_info.description = desc;
- }
- else if (!strncmp(buffer, "body:", 5)) {
- char *tag = apr_pstrdup(neg->pool, body);
- char *eol = strchr(tag, '\0');
- apr_size_t len = MAX_STRING_LEN;
- while (--eol >= tag && apr_isspace(*eol))
- *eol = '\0';
- if ((mime_info.body = get_body(buffer, &len, tag, *map)) < 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Syntax error in type map, no end tag '%s'"
- "found in %s for Body: content.",
- tag, r->filename);
- break;
- }
- mime_info.bytes = len;
- mime_info.file_name = apr_filepath_name_get(rr->filename);
- }
- }
- else {
- if (*mime_info.file_name && has_content) {
- void *new_var = apr_array_push(neg->avail_vars);
-
- memcpy(new_var, (void *) &mime_info, sizeof(var_rec));
- }
-
- clean_var_rec(&mime_info);
- has_content = 0;
- }
- } while (hstate != header_eof);
-
- if (map_)
- apr_file_close(map_);
-
- set_vlist_validator(r, rr);
-
- return OK;
-}
-
-
-/* Sort function used by read_types_multi. */
-static int variantsortf(var_rec *a, var_rec *b) {
-
- /* First key is the source quality, sort in descending order. */
-
- /* XXX: note that we currently implement no method of setting the
- * source quality for multiviews variants, so we are always comparing
- * 1.0 to 1.0 for now
- */
- if (a->source_quality < b->source_quality)
- return 1;
- if (a->source_quality > b->source_quality)
- return -1;
-
- /* Second key is the variant name */
- return strcmp(a->file_name, b->file_name);
-}
-
-/*****************************************************************
- *
- * Same as read_type_map, except we use a filtered directory listing
- * as the map...
- */
-
-static int read_types_multi(negotiation_state *neg)
-{
- request_rec *r = neg->r;
-
- char *filp;
- int prefix_len;
- apr_dir_t *dirp;
- apr_finfo_t dirent;
- apr_status_t status;
- struct var_rec mime_info;
- struct accept_rec accept_info;
- void *new_var;
- int anymatch = 0;
-
- clean_var_rec(&mime_info);
-
- if (r->proxyreq || !r->filename
- || !ap_os_is_path_absolute(neg->pool, r->filename)) {
- return DECLINED;
- }
-
- /* Only absolute paths here */
- if (!(filp = strrchr(r->filename, '/'))) {
- return DECLINED;
- }
- ++filp;
- prefix_len = strlen(filp);
-
- if ((status = apr_dir_open(&dirp, neg->dir_name,
- neg->pool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "cannot read directory for multi: %s", neg->dir_name);
- return HTTP_FORBIDDEN;
- }
-
- while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp) == APR_SUCCESS) {
- apr_array_header_t *exception_list;
- request_rec *sub_req;
-
- /* Do we have a match? */
-#ifdef CASE_BLIND_FILESYSTEM
- if (strncasecmp(dirent.name, filp, prefix_len)) {
-#else
- if (strncmp(dirent.name, filp, prefix_len)) {
-#endif
- continue;
- }
- if (dirent.name[prefix_len] != '.') {
- continue;
- }
-
- /* Don't negotiate directories and other unusual files
- * Really shouldn't see anything but DIR/LNK/REG here,
- * and we aught to discover if the LNK was interesting.
- *
- * Of course, this only helps platforms that capture the
- * the filetype in apr_dir_read(), which most can once
- * they are optimized with some magic [it's known to the
- * dirent, not associated to the inode, on most FS's.]
- */
- if ((dirent.valid & APR_FINFO_TYPE) && (dirent.filetype == APR_DIR))
- continue;
-
- /* Ok, something's here. Maybe nothing useful. Remember that
- * we tried, if we completely fail, so we can reject the request!
- */
- anymatch = 1;
-
- /* See if it's something which we have access to, and which
- * has a known type and encoding (as opposed to something
- * which we'll be slapping default_type on later).
- */
- sub_req = ap_sub_req_lookup_dirent(&dirent, r, AP_SUBREQ_MERGE_ARGS,
- NULL);
-
- /* Double check, we still don't multi-resolve non-ordinary files
- */
- if (sub_req->finfo.filetype != APR_REG)
- continue;
-
- /* If it has a handler, we'll pretend it's a CGI script,
- * since that's a good indication of the sort of thing it
- * might be doing.
- */
- if (sub_req->handler && !sub_req->content_type) {
- ap_set_content_type(sub_req, CGI_MAGIC_TYPE);
- }
-
- /*
- * mod_mime will _always_ provide us the base name in the
- * ap-mime-exception-list, if it processed anything. If
- * this list is empty, give up immediately, there was
- * nothing interesting. For example, looking at the files
- * readme.txt and readme.foo, we will throw away .foo if
- * it's an insignificant file (e.g. did not identify a
- * language, charset, encoding, content type or handler,)
- */
- exception_list =
- (apr_array_header_t *)apr_table_get(sub_req->notes,
- "ap-mime-exceptions-list");
-
- if (!exception_list) {
- ap_destroy_sub_req(sub_req);
- continue;
- }
-
- /* Each unregonized bit better match our base name, in sequence.
- * A test of index.html.foo will match index.foo or index.html.foo,
- * but it will never transpose the segments and allow index.foo.html
- * because that would introduce too much CPU consumption. Better that
- * we don't attempt a many-to-many match here.
- */
- {
- int nexcept = exception_list->nelts;
- char **cur_except = (char**)exception_list->elts;
- char *segstart = filp, *segend, saveend;
-
- while (*segstart && nexcept) {
- if (!(segend = strchr(segstart, '.')))
- segend = strchr(segstart, '\0');
- saveend = *segend;
- *segend = '\0';
-
-#ifdef CASE_BLIND_FILESYSTEM
- if (strcasecmp(segstart, *cur_except) == 0) {
-#else
- if (strcmp(segstart, *cur_except) == 0) {
-#endif
- --nexcept;
- ++cur_except;
- }
-
- if (!saveend)
- break;
-
- *segend = saveend;
- segstart = segend + 1;
- }
-
- if (nexcept) {
- /* Something you don't know is, something you don't know...
- */
- ap_destroy_sub_req(sub_req);
- continue;
- }
- }
-
- /*
- * ###: be warned, the _default_ content type is already
- * picked up here! If we failed the subrequest, or don't
- * know what we are serving, then continue.
- */
- if (sub_req->status != HTTP_OK || (!sub_req->content_type)) {
- ap_destroy_sub_req(sub_req);
- continue;
- }
-
- /* If it's a map file, we use that instead of the map
- * we're building...
- */
- if (((sub_req->content_type) &&
- !strcmp(sub_req->content_type, MAP_FILE_MAGIC_TYPE)) ||
- ((sub_req->handler) &&
- !strcmp(sub_req->handler, "type-map"))) {
-
- apr_dir_close(dirp);
- neg->avail_vars->nelts = 0;
- if (sub_req->status != HTTP_OK) {
- return sub_req->status;
- }
- return read_type_map(NULL, neg, sub_req);
- }
-
- /* Have reasonable variant --- gather notes. */
-
- mime_info.sub_req = sub_req;
- mime_info.file_name = apr_pstrdup(neg->pool, dirent.name);
- if (sub_req->content_encoding) {
- mime_info.content_encoding = sub_req->content_encoding;
- }
- if (sub_req->content_languages) {
- mime_info.content_languages = sub_req->content_languages;
- }
-
- get_entry(neg->pool, &accept_info, sub_req->content_type);
- set_mime_fields(&mime_info, &accept_info);
-
- new_var = apr_array_push(neg->avail_vars);
- memcpy(new_var, (void *) &mime_info, sizeof(var_rec));
-
- neg->count_multiviews_variants++;
-
- clean_var_rec(&mime_info);
- }
-
- apr_dir_close(dirp);
-
- /* We found some file names that matched. None could be served.
- * Rather than fall out to autoindex or some other mapper, this
- * request must die.
- */
- if (anymatch && !neg->avail_vars->nelts) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Negotiation: discovered file(s) matching request: %s"
- " (None could be negotiated).",
- r->filename);
- return HTTP_NOT_FOUND;
- }
-
- set_vlist_validator(r, r);
-
- /* Sort the variants into a canonical order. The negotiation
- * result sometimes depends on the order of the variants. By
- * sorting the variants into a canonical order, rather than using
- * the order in which readdir() happens to return them, we ensure
- * that the negotiation result will be consistent over filesystem
- * backup/restores and over all mirror sites.
- */
-
- qsort((void *) neg->avail_vars->elts, neg->avail_vars->nelts,
- sizeof(var_rec), (int (*)(const void *, const void *)) variantsortf);
-
- return OK;
-}
-
-
-/*****************************************************************
- * And now for the code you've been waiting for... actually
- * finding a match to the client's requirements.
- */
-
-/* Matching MIME types ... the star/star and foo/star commenting conventions
- * are implemented here. (You know what I mean by star/star, but just
- * try mentioning those three characters in a C comment). Using strcmp()
- * is legit, because everything has already been smashed to lowercase.
- *
- * Note also that if we get an exact match on the media type, we update
- * level_matched for use in level_cmp below...
- *
- * We also give a value for mime_stars, which is used later. It should
- * be 1 for star/star, 2 for type/star and 3 for type/subtype.
- */
-
-static int mime_match(accept_rec *accept_r, var_rec *avail)
-{
- const char *accept_type = accept_r->name;
- const char *avail_type = avail->mime_type;
- int len = strlen(accept_type);
-
- if (accept_type[0] == '*') { /* Anything matches star/star */
- if (avail->mime_stars < 1) {
- avail->mime_stars = 1;
- }
- return 1;
- }
- else if ((accept_type[len - 1] == '*') &&
- !strncmp(accept_type, avail_type, len - 2)) {
- if (avail->mime_stars < 2) {
- avail->mime_stars = 2;
- }
- return 1;
- }
- else if (!strcmp(accept_type, avail_type)
- || (!strcmp(accept_type, "text/html")
- && (!strcmp(avail_type, INCLUDES_MAGIC_TYPE)
- || !strcmp(avail_type, INCLUDES_MAGIC_TYPE3)))) {
- if (accept_r->level >= avail->level) {
- avail->level_matched = avail->level;
- avail->mime_stars = 3;
- return 1;
- }
- }
-
- return OK;
-}
-
-/* This code implements a piece of the tie-breaking algorithm between
- * variants of equal quality. This piece is the treatment of variants
- * of the same base media type, but different levels. What we want to
- * return is the variant at the highest level that the client explicitly
- * claimed to accept.
- *
- * If all the variants available are at a higher level than that, or if
- * the client didn't say anything specific about this media type at all
- * and these variants just got in on a wildcard, we prefer the lowest
- * level, on grounds that that's the one that the client is least likely
- * to choke on.
- *
- * (This is all motivated by treatment of levels in HTML --- we only
- * want to give level 3 to browsers that explicitly ask for it; browsers
- * that don't, including HTTP/0.9 browsers that only get the implicit
- * "Accept: * / *" [space added to avoid confusing cpp --- no, that
- * syntax doesn't really work] should get HTML2 if available).
- *
- * (Note that this code only comes into play when we are choosing among
- * variants of equal quality, where the draft standard gives us a fair
- * bit of leeway about what to do. It ain't specified by the standard;
- * rather, it is a choice made by this server about what to do in cases
- * where the standard does not specify a unique course of action).
- */
-
-static int level_cmp(var_rec *var1, var_rec *var2)
-{
- /* Levels are only comparable between matching media types */
-
- if (var1->is_pseudo_html && !var2->is_pseudo_html) {
- return 0;
- }
-
- if (!var1->is_pseudo_html && strcmp(var1->mime_type, var2->mime_type)) {
- return 0;
- }
- /* The result of the above if statements is that, if we get to
- * here, both variants have the same mime_type or both are
- * pseudo-html.
- */
-
- /* Take highest level that matched, if either did match. */
-
- if (var1->level_matched > var2->level_matched) {
- return 1;
- }
- if (var1->level_matched < var2->level_matched) {
- return -1;
- }
-
- /* Neither matched. Take lowest level, if there's a difference. */
-
- if (var1->level < var2->level) {
- return 1;
- }
- if (var1->level > var2->level) {
- return -1;
- }
-
- /* Tied */
-
- return 0;
-}
-
-/* Finding languages. The main entry point is set_language_quality()
- * which is called for each variant. It sets two elements in the
- * variant record:
- * language_quality - the 'q' value of the 'best' matching language
- * from Accept-Language: header (HTTP/1.1)
- * lang_index - Non-negotiated language priority, using
- * position of language on the Accept-Language:
- * header, if present, else LanguagePriority
- * directive order.
- *
- * When we do the variant checking for best variant, we use language
- * quality first, and if a tie, language_index next (this only applies
- * when _not_ using the RVSA/1.0 algorithm). If using the RVSA/1.0
- * algorithm, lang_index is never used.
- *
- * set_language_quality() calls find_lang_index() and find_default_index()
- * to set lang_index.
- */
-
-static int find_lang_index(apr_array_header_t *accept_langs, char *lang)
-{
- const char **alang;
- int i;
-
- if (!lang || !accept_langs) {
- return -1;
- }
-
- alang = (const char **) accept_langs->elts;
-
- for (i = 0; i < accept_langs->nelts; ++i) {
- if (!strncmp(lang, *alang, strlen(*alang))) {
- return i;
- }
- alang += (accept_langs->elt_size / sizeof(char*));
- }
-
- return -1;
-}
-
-/* set_default_lang_quality() sets the quality we apply to variants
- * which have no language assigned to them. If none of the variants
- * have a language, we are not negotiating on language, so all are
- * acceptable, and we set the default q value to 1.0. However if
- * some of the variants have languages, we set this default to 0.0001.
- * The value of this default will be applied to all variants with
- * no explicit language -- which will have the effect of making them
- * acceptable, but only if no variants with an explicit language
- * are acceptable. The default q value set here is assigned to variants
- * with no language type in set_language_quality().
- *
- * Note that if using the RVSA/1.0 algorithm, we don't use this
- * fiddle.
- */
-
-static void set_default_lang_quality(negotiation_state *neg)
-{
- var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
- int j;
-
- if (!neg->dont_fiddle_headers) {
- for (j = 0; j < neg->avail_vars->nelts; ++j) {
- var_rec *variant = &avail_recs[j];
- if (variant->content_languages &&
- variant->content_languages->nelts) {
- neg->default_lang_quality = 0.0001f;
- return;
- }
- }
- }
-
- neg->default_lang_quality = 1.0f;
-}
-
-/* Set the language_quality value in the variant record. Also
- * assigns lang_index for ForceLanguagePriority.
- *
- * To find the language_quality value, we look for the 'q' value
- * of the 'best' matching language on the Accept-Language
- * header. The 'best' match is the language on Accept-Language
- * header which matches the language of this variant either fully,
- * or as far as the prefix marker (-). If two or more languages
- * match, use the longest string from the Accept-Language header
- * (see HTTP/1.1 [14.4])
- *
- * When a variant has multiple languages, we find the 'best'
- * match for each variant language tag as above, then select the
- * one with the highest q value. Because both the accept-header
- * and variant can have multiple languages, we now have a hairy
- * loop-within-a-loop here.
- *
- * If the variant has no language and we have no Accept-Language
- * items, leave the quality at 1.0 and return.
- *
- * If the variant has no language, we use the default as set by
- * set_default_lang_quality() (1.0 if we are not negotiating on
- * language, 0.001 if we are).
- *
- * Following the setting of the language quality, we drop through to
- * set the old 'lang_index'. This is set based on either the order
- * of the languages on the Accept-Language header, or the
- * order on the LanguagePriority directive. This is only used
- * in the negotiation if the language qualities tie.
- */
-
-static void set_language_quality(negotiation_state *neg, var_rec *variant)
-{
- int forcepriority = neg->conf->forcelangpriority;
- if (forcepriority == FLP_UNDEF) {
- forcepriority = FLP_DEFAULT;
- }
-
- if (!variant->content_languages || !variant->content_languages->nelts) {
- /* This variant has no content-language, so use the default
- * quality factor for variants with no content-language
- * (previously set by set_default_lang_quality()).
- * Leave the factor alone (it remains at 1.0) when we may not fiddle
- * with the headers.
- */
- if (!neg->dont_fiddle_headers) {
- variant->lang_quality = neg->default_lang_quality;
- }
- if (!neg->accept_langs) {
- return; /* no accept-language header */
- }
- return;
- }
- else {
- /* Variant has one (or more) languages. Look for the best
- * match. We do this by going through each language on the
- * variant description looking for a match on the
- * Accept-Language header. The best match is the longest
- * matching language on the header. The final result is the
- * best q value from all the languages on the variant
- * description.
- */
-
- if (!neg->accept_langs) {
- /* no accept-language header makes the variant indefinite */
- variant->definite = 0;
- }
- else { /* There is an accept-language with 0 or more items */
- accept_rec *accs = (accept_rec *) neg->accept_langs->elts;
- accept_rec *best = NULL, *star = NULL;
- accept_rec *bestthistag;
- char *lang, *p;
- float fiddle_q = 0.0f;
- int any_match_on_star = 0;
- int i, j;
- apr_size_t alen, longest_lang_range_len;
-
- for (j = 0; j < variant->content_languages->nelts; ++j) {
- p = NULL;
- bestthistag = NULL;
- longest_lang_range_len = 0;
- alen = 0;
-
- /* lang is the variant's language-tag, which is the one
- * we are allowed to use the prefix of in HTTP/1.1
- */
- lang = ((char **) (variant->content_languages->elts))[j];
-
- /* now find the best (i.e. longest) matching
- * Accept-Language header language. We put the best match
- * for this tag in bestthistag. We cannot update the
- * overall best (based on q value) because the best match
- * for this tag is the longest language item on the accept
- * header, not necessarily the highest q.
- */
- for (i = 0; i < neg->accept_langs->nelts; ++i) {
- if (!strcmp(accs[i].name, "*")) {
- if (!star) {
- star = &accs[i];
- }
- continue;
- }
- /* Find language. We match if either the variant
- * language tag exactly matches the language range
- * from the accept header, or a prefix of the variant
- * language tag up to a '-' character matches the
- * whole of the language range in the Accept-Language
- * header. Note that HTTP/1.x allows any number of
- * '-' characters in a tag or range, currently only
- * tags with zero or one '-' characters are defined
- * for general use (see rfc1766).
- *
- * We only use language range in the Accept-Language
- * header the best match for the variant language tag
- * if it is longer than the previous best match.
- */
-
- alen = strlen(accs[i].name);
-
- if ((strlen(lang) >= alen) &&
- !strncmp(lang, accs[i].name, alen) &&
- ((lang[alen] == 0) || (lang[alen] == '-')) ) {
-
- if (alen > longest_lang_range_len) {
- longest_lang_range_len = alen;
- bestthistag = &accs[i];
- }
- }
-
- if (!bestthistag && !neg->dont_fiddle_headers) {
- /* The next bit is a fiddle. Some browsers might
- * be configured to send more specific language
- * ranges than desirable. For example, an
- * Accept-Language of en-US should never match
- * variants with languages en or en-GB. But US
- * English speakers might pick en-US as their
- * language choice. So this fiddle checks if the
- * language range has a prefix, and if so, it
- * matches variants which match that prefix with a
- * priority of 0.001. So a request for en-US would
- * match variants of types en and en-GB, but at
- * much lower priority than matches of en-US
- * directly, or of any other language listed on
- * the Accept-Language header. Note that this
- * fiddle does not handle multi-level prefixes.
- */
- if ((p = strchr(accs[i].name, '-'))) {
- int plen = p - accs[i].name;
-
- if (!strncmp(lang, accs[i].name, plen)) {
- fiddle_q = 0.001f;
- }
- }
- }
- }
- /* Finished looking at Accept-Language headers, the best
- * (longest) match is in bestthistag, or NULL if no match
- */
- if (!best ||
- (bestthistag && bestthistag->quality > best->quality)) {
- best = bestthistag;
- }
-
- /* See if the tag matches on a * in the Accept-Language
- * header. If so, record this fact for later use
- */
- if (!bestthistag && star) {
- any_match_on_star = 1;
- }
- }
-
- /* If one of the language tags of the variant matched on *, we
- * need to see if its q is better than that of any non-* match
- * on any other tag of the variant. If so the * match takes
- * precedence and the overall match is not definite.
- */
- if ( any_match_on_star &&
- ((best && star->quality > best->quality) ||
- (!best)) ) {
- best = star;
- variant->definite = 0;
- }
-
- variant->lang_quality = best ? best->quality : fiddle_q;
- }
- }
-
- /* Handle the ForceDefaultLanguage overrides, based on the best match
- * to LanguagePriority order. The best match is the lowest index of
- * any LanguagePriority match.
- */
- if (((forcepriority & FLP_PREFER)
- && (variant->lang_index < 0))
- || ((forcepriority & FLP_FALLBACK)
- && !variant->lang_quality))
- {
- int bestidx = -1;
- int j;
-
- for (j = 0; j < variant->content_languages->nelts; ++j)
- {
- /* lang is the variant's language-tag, which is the one
- * we are allowed to use the prefix of in HTTP/1.1
- */
- char *lang = ((char **) (variant->content_languages->elts))[j];
- int idx = -1;
-
- /* If we wish to fallback or
- * we use our own LanguagePriority index.
- */
- idx = find_lang_index(neg->conf->language_priority, lang);
- if ((idx >= 0) && ((bestidx == -1) || (idx < bestidx))) {
- bestidx = idx;
- }
- }
-
- if (bestidx >= 0) {
- if (variant->lang_quality) {
- if (forcepriority & FLP_PREFER) {
- variant->lang_index = bestidx;
- }
- }
- else {
- if (forcepriority & FLP_FALLBACK) {
- variant->lang_index = bestidx;
- variant->lang_quality = .0001f;
- variant->definite = 0;
- }
- }
- }
- }
- return;
-}
-
-/* Determining the content length --- if the map didn't tell us,
- * we have to do a stat() and remember for next time.
- */
-
-static apr_off_t find_content_length(negotiation_state *neg, var_rec *variant)
-{
- apr_finfo_t statb;
-
- if (variant->bytes < 0) {
- if ( variant->sub_req
- && (variant->sub_req->finfo.valid & APR_FINFO_SIZE)) {
- variant->bytes = variant->sub_req->finfo.size;
- }
- else {
- char *fullname = ap_make_full_path(neg->pool, neg->dir_name,
- variant->file_name);
-
- if (apr_stat(&statb, fullname,
- APR_FINFO_SIZE, neg->pool) == APR_SUCCESS) {
- variant->bytes = statb.size;
- }
- }
- }
-
- return variant->bytes;
-}
-
-/* For a given variant, find the best matching Accept: header
- * and assign the Accept: header's quality value to the
- * mime_type_quality field of the variant, for later use in
- * determining the best matching variant.
- */
-
-static void set_accept_quality(negotiation_state *neg, var_rec *variant)
-{
- int i;
- accept_rec *accept_recs;
- float q = 0.0f;
- int q_definite = 1;
-
- /* if no Accept: header, leave quality alone (will
- * remain at the default value of 1)
- *
- * XXX: This if is currently never true because of the effect of
- * maybe_add_default_accepts().
- */
- if (!neg->accepts) {
- if (variant->mime_type && *variant->mime_type)
- variant->definite = 0;
- return;
- }
-
- accept_recs = (accept_rec *) neg->accepts->elts;
-
- /*
- * Go through each of the ranges on the Accept: header,
- * looking for the 'best' match with this variant's
- * content-type. We use the best match's quality
- * value (from the Accept: header) for this variant's
- * mime_type_quality field.
- *
- * The best match is determined like this:
- * type/type is better than type/ * is better than * / *
- * if match is type/type, use the level mime param if available
- */
- for (i = 0; i < neg->accepts->nelts; ++i) {
-
- accept_rec *type = &accept_recs[i];
- int prev_mime_stars;
-
- prev_mime_stars = variant->mime_stars;
-
- if (!mime_match(type, variant)) {
- continue; /* didn't match the content type at all */
- }
- else {
- /* did match - see if there were less or more stars than
- * in previous match
- */
- if (prev_mime_stars == variant->mime_stars) {
- continue; /* more stars => not as good a match */
- }
- }
-
- /* If we are allowed to mess with the q-values
- * and have no explicit q= parameters in the accept header,
- * make wildcards very low, so we have a low chance
- * of ending up with them if there's something better.
- */
-
- if (!neg->dont_fiddle_headers && !neg->accept_q &&
- variant->mime_stars == 1) {
- q = 0.01f;
- }
- else if (!neg->dont_fiddle_headers && !neg->accept_q &&
- variant->mime_stars == 2) {
- q = 0.02f;
- }
- else {
- q = type->quality;
- }
-
- q_definite = (variant->mime_stars == 3);
- }
- variant->mime_type_quality = q;
- variant->definite = variant->definite && q_definite;
-
-}
-
-/* For a given variant, find the 'q' value of the charset given
- * on the Accept-Charset line. If no charsets are listed,
- * assume value of '1'.
- */
-static void set_charset_quality(negotiation_state *neg, var_rec *variant)
-{
- int i;
- accept_rec *accept_recs;
- const char *charset = variant->content_charset;
- accept_rec *star = NULL;
-
- /* if no Accept-Charset: header, leave quality alone (will
- * remain at the default value of 1)
- */
- if (!neg->accept_charsets) {
- if (charset && *charset)
- variant->definite = 0;
- return;
- }
-
- accept_recs = (accept_rec *) neg->accept_charsets->elts;
-
- if (charset == NULL || !*charset) {
- /* Charset of variant not known */
-
- /* if not a text / * type, leave quality alone */
- if (!(!strncmp(variant->mime_type, "text/", 5)
- || !strcmp(variant->mime_type, INCLUDES_MAGIC_TYPE)
- || !strcmp(variant->mime_type, INCLUDES_MAGIC_TYPE3)
- ))
- return;
-
- /* Don't go guessing if we are in strict header mode,
- * e.g. when running the rvsa, as any guess won't be reflected
- * in the variant list or content-location headers.
- */
- if (neg->dont_fiddle_headers)
- return;
-
- charset = "iso-8859-1"; /* The default charset for HTTP text types */
- }
-
- /*
- * Go through each of the items on the Accept-Charset header,
- * looking for a match with this variant's charset. If none
- * match, charset is unacceptable, so set quality to 0.
- */
- for (i = 0; i < neg->accept_charsets->nelts; ++i) {
-
- accept_rec *type = &accept_recs[i];
-
- if (!strcmp(type->name, charset)) {
- variant->charset_quality = type->quality;
- return;
- }
- else if (strcmp(type->name, "*") == 0) {
- star = type;
- }
- }
- /* No explicit match */
- if (star) {
- variant->charset_quality = star->quality;
- variant->definite = 0;
- return;
- }
- /* If this variant is in charset iso-8859-1, the default is 1.0 */
- if (strcmp(charset, "iso-8859-1") == 0) {
- variant->charset_quality = 1.0f;
- }
- else {
- variant->charset_quality = 0.0f;
- }
-}
-
-
-/* is_identity_encoding is included for back-compat, but does anyone
- * use 7bit, 8bin or binary in their var files??
- */
-
-static int is_identity_encoding(const char *enc)
-{
- return (!enc || !enc[0] || !strcmp(enc, "7bit") || !strcmp(enc, "8bit")
- || !strcmp(enc, "binary"));
-}
-
-/*
- * set_encoding_quality determines whether the encoding for a particular
- * variant is acceptable for the user-agent.
- *
- * The rules for encoding are that if the user-agent does not supply
- * any Accept-Encoding header, then all encodings are allowed but a
- * variant with no encoding should be preferred.
- * If there is an empty Accept-Encoding header, then no encodings are
- * acceptable. If there is a non-empty Accept-Encoding header, then
- * any of the listed encodings are acceptable, as well as no encoding
- * unless the "identity" encoding is specifically excluded.
- */
-static void set_encoding_quality(negotiation_state *neg, var_rec *variant)
-{
- accept_rec *accept_recs;
- const char *enc = variant->content_encoding;
- accept_rec *star = NULL;
- float value_if_not_found = 0.0f;
- int i;
-
- if (!neg->accept_encodings) {
- /* We had no Accept-Encoding header, assume that all
- * encodings are acceptable with a low quality,
- * but we prefer no encoding if available.
- */
- if (!enc || is_identity_encoding(enc))
- variant->encoding_quality = 1.0f;
- else
- variant->encoding_quality = 0.5f;
-
- return;
- }
-
- if (!enc || is_identity_encoding(enc)) {
- enc = "identity";
- value_if_not_found = 0.0001f;
- }
-
- accept_recs = (accept_rec *) neg->accept_encodings->elts;
-
- /* Go through each of the encodings on the Accept-Encoding: header,
- * looking for a match with our encoding. x- prefixes are ignored.
- */
- if (enc[0] == 'x' && enc[1] == '-') {
- enc += 2;
- }
- for (i = 0; i < neg->accept_encodings->nelts; ++i) {
-
- char *name = accept_recs[i].name;
-
- if (name[0] == 'x' && name[1] == '-') {
- name += 2;
- }
-
- if (!strcmp(name, enc)) {
- variant->encoding_quality = accept_recs[i].quality;
- return;
- }
-
- if (strcmp(name, "*") == 0) {
- star = &accept_recs[i];
- }
-
- }
- /* No explicit match */
- if (star) {
- variant->encoding_quality = star->quality;
- return;
- }
-
- /* Encoding not found on Accept-Encoding: header, so it is
- * _not_ acceptable unless it is the identity (no encoding)
- */
- variant->encoding_quality = value_if_not_found;
-}
-
-/*************************************************************
- * Possible results of the variant selection algorithm
- */
-enum algorithm_results {
- alg_choice = 1, /* choose variant */
- alg_list /* list variants */
-};
-
-/* Below is the 'best_match' function. It returns an int, which has
- * one of the two values alg_choice or alg_list, which give the result
- * of the variant selection algorithm. alg_list means that no best
- * variant was found by the algorithm, alg_choice means that a best
- * variant was found and should be returned. The list/choice
- * terminology comes from TCN (rfc2295), but is used in a more generic
- * way here. The best variant is returned in *pbest. best_match has
- * two possible algorithms for determining the best variant: the
- * RVSA/1.0 algorithm (from RFC2296), and the standard Apache
- * algorithm. These are split out into separate functions
- * (is_variant_better_rvsa() and is_variant_better()). Selection of
- * one is through the neg->use_rvsa flag.
- *
- * The call to best_match also creates full information, including
- * language, charset, etc quality for _every_ variant. This is needed
- * for generating a correct Vary header, and can be used for the
- * Alternates header, the human-readable list responses and 406 errors.
- */
-
-/* Firstly, the RVSA/1.0 (HTTP Remote Variant Selection Algorithm
- * v1.0) from rfc2296. This is the algorithm that goes together with
- * transparent content negotiation (TCN).
- */
-static int is_variant_better_rvsa(negotiation_state *neg, var_rec *variant,
- var_rec *best, float *p_bestq)
-{
- float bestq = *p_bestq, q;
-
- /* TCN does not cover negotiation on content-encoding. For now,
- * we ignore the encoding unless it was explicitly excluded.
- */
- if (variant->encoding_quality == 0.0f)
- return 0;
-
- q = variant->mime_type_quality *
- variant->source_quality *
- variant->charset_quality *
- variant->lang_quality;
-
- /* RFC 2296 calls for the result to be rounded to 5 decimal places,
- * but we don't do that because it serves no useful purpose other
- * than to ensure that a remote algorithm operates on the same
- * precision as ours. That is silly, since what we obviously want
- * is for the algorithm to operate on the best available precision
- * regardless of who runs it. Since the above calculation may
- * result in significant variance at 1e-12, rounding would be bogus.
- */
-
-#ifdef NEG_DEBUG
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Variant: file=%s type=%s lang=%s sourceq=%1.3f "
- "mimeq=%1.3f langq=%1.3f charq=%1.3f encq=%1.3f "
- "q=%1.5f definite=%d",
- (variant->file_name ? variant->file_name : ""),
- (variant->mime_type ? variant->mime_type : ""),
- (variant->content_languages
- ? apr_array_pstrcat(neg->pool, variant->content_languages, ',')
- : ""),
- variant->source_quality,
- variant->mime_type_quality,
- variant->lang_quality,
- variant->charset_quality,
- variant->encoding_quality,
- q,
- variant->definite);
-#endif
-
- if (q <= 0.0f) {
- return 0;
- }
- if (q > bestq) {
- *p_bestq = q;
- return 1;
- }
- if (q == bestq) {
- /* If the best variant's encoding is of lesser quality than
- * this variant, then we prefer this variant
- */
- if (variant->encoding_quality > best->encoding_quality) {
- *p_bestq = q;
- return 1;
- }
- }
- return 0;
-}
-
-/* Negotiation algorithm as used by previous versions of Apache
- * (just about).
- */
-
-static int is_variant_better(negotiation_state *neg, var_rec *variant,
- var_rec *best, float *p_bestq)
-{
- float bestq = *p_bestq, q;
- int levcmp;
-
- /* For non-transparent negotiation, server can choose how
- * to handle the negotiation. We'll use the following in
- * order: content-type, language, content-type level, charset,
- * content encoding, content length.
- *
- * For each check, we have three possible outcomes:
- * This variant is worse than current best: return 0
- * This variant is better than the current best:
- * assign this variant's q to *p_bestq, and return 1
- * This variant is just as desirable as the current best:
- * drop through to the next test.
- *
- * This code is written in this long-winded way to allow future
- * customisation, either by the addition of additional
- * checks, or to allow the order of the checks to be determined
- * by configuration options (e.g. we might prefer to check
- * language quality _before_ content type).
- */
-
- /* First though, eliminate this variant if it is not
- * acceptable by type, charset, encoding or language.
- */
-
-#ifdef NEG_DEBUG
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Variant: file=%s type=%s lang=%s sourceq=%1.3f "
- "mimeq=%1.3f langq=%1.3f langidx=%d charq=%1.3f encq=%1.3f ",
- (variant->file_name ? variant->file_name : ""),
- (variant->mime_type ? variant->mime_type : ""),
- (variant->content_languages
- ? apr_array_pstrcat(neg->pool, variant->content_languages, ',')
- : ""),
- variant->source_quality,
- variant->mime_type_quality,
- variant->lang_quality,
- variant->lang_index,
- variant->charset_quality,
- variant->encoding_quality);
-#endif
-
- if (variant->encoding_quality == 0.0f ||
- variant->lang_quality == 0.0f ||
- variant->source_quality == 0.0f ||
- variant->charset_quality == 0.0f ||
- variant->mime_type_quality == 0.0f) {
- return 0; /* don't consider unacceptables */
- }
-
- q = variant->mime_type_quality * variant->source_quality;
- if (q == 0.0 || q < bestq) {
- return 0;
- }
- if (q > bestq || !best) {
- *p_bestq = q;
- return 1;
- }
-
- /* language */
- if (variant->lang_quality < best->lang_quality) {
- return 0;
- }
- if (variant->lang_quality > best->lang_quality) {
- *p_bestq = q;
- return 1;
- }
-
- /* if language qualities were equal, try the LanguagePriority stuff */
- if (best->lang_index != -1 &&
- (variant->lang_index == -1 || variant->lang_index > best->lang_index)) {
- return 0;
- }
- if (variant->lang_index != -1 &&
- (best->lang_index == -1 || variant->lang_index < best->lang_index)) {
- *p_bestq = q;
- return 1;
- }
-
- /* content-type level (sometimes used with text/html, though we
- * support it on other types too)
- */
- levcmp = level_cmp(variant, best);
- if (levcmp == -1) {
- return 0;
- }
- if (levcmp == 1) {
- *p_bestq = q;
- return 1;
- }
-
- /* charset */
- if (variant->charset_quality < best->charset_quality) {
- return 0;
- }
- /* If the best variant's charset is ISO-8859-1 and this variant has
- * the same charset quality, then we prefer this variant
- */
-
- if (variant->charset_quality > best->charset_quality ||
- ((variant->content_charset != NULL &&
- *variant->content_charset != '\0' &&
- strcmp(variant->content_charset, "iso-8859-1") != 0) &&
- (best->content_charset == NULL ||
- *best->content_charset == '\0' ||
- strcmp(best->content_charset, "iso-8859-1") == 0))) {
- *p_bestq = q;
- return 1;
- }
-
- /* Prefer the highest value for encoding_quality.
- */
- if (variant->encoding_quality < best->encoding_quality) {
- return 0;
- }
- if (variant->encoding_quality > best->encoding_quality) {
- *p_bestq = q;
- return 1;
- }
-
- /* content length if all else equal */
- if (find_content_length(neg, variant) >= find_content_length(neg, best)) {
- return 0;
- }
-
- /* ok, to get here means every thing turned out equal, except
- * we have a shorter content length, so use this variant
- */
- *p_bestq = q;
- return 1;
-}
-
-/* figure out, whether a variant is in a specific language
- * it returns also false, if the variant has no language.
- */
-static int variant_has_language(var_rec *variant, const char *lang)
-{
- int j, max;
-
- /* fast exit */
- if ( !lang
- || !variant->content_languages
- || !(max = variant->content_languages->nelts)) {
- return 0;
- }
-
- for (j = 0; j < max; ++j) {
- if (!strcmp(lang,
- ((char **) (variant->content_languages->elts))[j])) {
- return 1;
- }
- }
-
- return 0;
-}
-
-/* check for environment variables 'no-gzip' and
- * 'gzip-only-text/html' to get a behaviour similiar
- * to mod_deflate
- */
-static int discard_variant_by_env(var_rec *variant, int discard)
-{
- if ( is_identity_encoding(variant->content_encoding)
- || !strcmp(variant->content_encoding, "identity")) {
- return 0;
- }
-
- return ( (discard == DISCARD_ALL_ENCODINGS)
- || (discard == DISCARD_ALL_BUT_HTML
- && (!variant->mime_type
- || strncmp(variant->mime_type, "text/html", 9))));
-}
-
-static int best_match(negotiation_state *neg, var_rec **pbest)
-{
- int j;
- var_rec *best;
- float bestq = 0.0f;
- enum algorithm_results algorithm_result;
- int may_discard = 0;
-
- var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
-
- /* fetch request dependent variables
- * prefer-language: prefer a certain language.
- */
- const char *preferred_language = apr_table_get(neg->r->subprocess_env,
- "prefer-language");
-
- /* no-gzip: do not send encoded documents */
- if (apr_table_get(neg->r->subprocess_env, "no-gzip")) {
- may_discard = DISCARD_ALL_ENCODINGS;
- }
-
- /* gzip-only-text/html: send encoded documents only
- * if they are text/html. (no-gzip has a higher priority).
- */
- else {
- const char *env_value = apr_table_get(neg->r->subprocess_env,
- "gzip-only-text/html");
-
- if (env_value && !strcmp(env_value, "1")) {
- may_discard = DISCARD_ALL_BUT_HTML;
- }
- }
-
- set_default_lang_quality(neg);
-
- /*
- * Find the 'best' variant
- * We run the loop possibly twice: if "prefer-language"
- * environment variable is set but we did not find an appropriate
- * best variant. In that case forget the preferred language and
- * negotiate over all variants.
- */
-
- do {
- best = NULL;
-
- for (j = 0; j < neg->avail_vars->nelts; ++j) {
- var_rec *variant = &avail_recs[j];
-
- /* if this variant is encoded somehow and there are special
- * variables set, we do not negotiate it. see above.
- */
- if ( may_discard
- && discard_variant_by_env(variant, may_discard)) {
- continue;
- }
-
- /* if a language is preferred, but the current variant
- * is not in that language, then drop it for now
- */
- if ( preferred_language
- && !variant_has_language(variant, preferred_language)) {
- continue;
- }
-
- /* Find all the relevant 'quality' values from the
- * Accept... headers, and store in the variant. This also
- * prepares for sending an Alternates header etc so we need to
- * do it even if we do not actually plan to find a best
- * variant.
- */
- set_accept_quality(neg, variant);
- /* accept the preferred language, even when it's not listed within
- * the Accept-Language header
- */
- if (preferred_language) {
- variant->lang_quality = 1.0f;
- variant->definite = 1;
- }
- else {
- set_language_quality(neg, variant);
- }
- set_encoding_quality(neg, variant);
- set_charset_quality(neg, variant);
-
- /* Only do variant selection if we may actually choose a
- * variant for the client
- */
- if (neg->may_choose) {
-
- /* Now find out if this variant is better than the current
- * best, either using the RVSA/1.0 algorithm, or Apache's
- * internal server-driven algorithm. Presumably other
- * server-driven algorithms are possible, and could be
- * implemented here.
- */
-
- if (neg->use_rvsa) {
- if (is_variant_better_rvsa(neg, variant, best, &bestq)) {
- best = variant;
- }
- }
- else {
- if (is_variant_better(neg, variant, best, &bestq)) {
- best = variant;
- }
- }
- }
- }
-
- /* We now either have a best variant, or no best variant */
-
- if (neg->use_rvsa) {
- /* calculate result for RVSA/1.0 algorithm:
- * only a choice response if the best variant has q>0
- * and is definite
- */
- algorithm_result = (best && best->definite) && (bestq > 0) ?
- alg_choice : alg_list;
- }
- else {
- /* calculate result for Apache negotiation algorithm */
- algorithm_result = bestq > 0 ? alg_choice : alg_list;
- }
-
- /* run the loop again, if the "prefer-language" got no clear result */
- if (preferred_language && (!best || algorithm_result != alg_choice)) {
- preferred_language = NULL;
- continue;
- }
-
- break;
- } while (1);
-
- /* Returning a choice response with a non-neighboring variant is a
- * protocol security error in TCN (see rfc2295). We do *not*
- * verify here that the variant and URI are neighbors, even though
- * we may return alg_choice. We depend on the environment (the
- * caller) to only declare the resource transparently negotiable if
- * all variants are neighbors.
- */
- *pbest = best;
- return algorithm_result;
-}
-
-/* Sets response headers for a negotiated response.
- * neg->is_transparent determines whether a transparently negotiated
- * response or a plain `server driven negotiation' response is
- * created. Applicable headers are Alternates, Vary, and TCN.
- *
- * The Vary header we create is sometimes longer than is required for
- * the correct caching of negotiated results by HTTP/1.1 caches. For
- * example if we have 3 variants x.html, x.ps.en and x.ps.nl, and if
- * the Accept: header assigns a 0 quality to .ps, then the results of
- * the two server-side negotiation algorithms we currently implement
- * will never depend on Accept-Language so we could return `Vary:
- * negotiate, accept' instead of the longer 'Vary: negotiate, accept,
- * accept-language' which the code below will return. A routine for
- * computing the exact minimal Vary header would be a huge pain to code
- * and maintain though, especially because we need to take all possible
- * twiddles in the server-side negotiation algorithms into account.
- */
-static void set_neg_headers(request_rec *r, negotiation_state *neg,
- int alg_result)
-{
- apr_table_t *hdrs;
- var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
- const char *sample_type = NULL;
- const char *sample_language = NULL;
- const char *sample_encoding = NULL;
- const char *sample_charset = NULL;
- char *lang;
- char *qstr;
- apr_off_t len;
- apr_array_header_t *arr;
- int max_vlist_array = (neg->avail_vars->nelts * 21);
- int first_variant = 1;
- int vary_by_type = 0;
- int vary_by_language = 0;
- int vary_by_charset = 0;
- int vary_by_encoding = 0;
- int j;
-
- /* In order to avoid O(n^2) memory copies in building Alternates,
- * we preallocate a apr_table_t with the maximum substrings possible,
- * fill it with the variant list, and then concatenate the entire array.
- * Note that if you change the number of substrings pushed, you also
- * need to change the calculation of max_vlist_array above.
- */
- if (neg->send_alternates && neg->avail_vars->nelts)
- arr = apr_array_make(r->pool, max_vlist_array, sizeof(char *));
- else
- arr = NULL;
-
- /* Put headers into err_headers_out, since send_http_header()
- * outputs both headers_out and err_headers_out.
- */
- hdrs = r->err_headers_out;
-
- for (j = 0; j < neg->avail_vars->nelts; ++j) {
- var_rec *variant = &avail_recs[j];
-
- if (variant->content_languages && variant->content_languages->nelts) {
- lang = apr_array_pstrcat(r->pool, variant->content_languages, ',');
- }
- else {
- lang = NULL;
- }
-
- /* Calculate Vary by looking for any difference between variants */
-
- if (first_variant) {
- sample_type = variant->mime_type;
- sample_charset = variant->content_charset;
- sample_language = lang;
- sample_encoding = variant->content_encoding;
- }
- else {
- if (!vary_by_type &&
- strcmp(sample_type ? sample_type : "",
- variant->mime_type ? variant->mime_type : "")) {
- vary_by_type = 1;
- }
- if (!vary_by_charset &&
- strcmp(sample_charset ? sample_charset : "",
- variant->content_charset ?
- variant->content_charset : "")) {
- vary_by_charset = 1;
- }
- if (!vary_by_language &&
- strcmp(sample_language ? sample_language : "",
- lang ? lang : "")) {
- vary_by_language = 1;
- }
- if (!vary_by_encoding &&
- strcmp(sample_encoding ? sample_encoding : "",
- variant->content_encoding ?
- variant->content_encoding : "")) {
- vary_by_encoding = 1;
- }
- }
- first_variant = 0;
-
- if (!neg->send_alternates)
- continue;
-
- /* Generate the string components for this Alternates entry */
-
- *((const char **) apr_array_push(arr)) = "{\"";
- *((const char **) apr_array_push(arr)) = variant->file_name;
- *((const char **) apr_array_push(arr)) = "\" ";
-
- qstr = (char *) apr_palloc(r->pool, 6);
- apr_snprintf(qstr, 6, "%1.3f", variant->source_quality);
-
- /* Strip trailing zeros (saves those valuable network bytes) */
- if (qstr[4] == '0') {
- qstr[4] = '\0';
- if (qstr[3] == '0') {
- qstr[3] = '\0';
- if (qstr[2] == '0') {
- qstr[1] = '\0';
- }
- }
- }
- *((const char **) apr_array_push(arr)) = qstr;
-
- if (variant->mime_type && *variant->mime_type) {
- *((const char **) apr_array_push(arr)) = " {type ";
- *((const char **) apr_array_push(arr)) = variant->mime_type;
- *((const char **) apr_array_push(arr)) = "}";
- }
- if (variant->content_charset && *variant->content_charset) {
- *((const char **) apr_array_push(arr)) = " {charset ";
- *((const char **) apr_array_push(arr)) = variant->content_charset;
- *((const char **) apr_array_push(arr)) = "}";
- }
- if (lang) {
- *((const char **) apr_array_push(arr)) = " {language ";
- *((const char **) apr_array_push(arr)) = lang;
- *((const char **) apr_array_push(arr)) = "}";
- }
- if (variant->content_encoding && *variant->content_encoding) {
- /* Strictly speaking, this is non-standard, but so is TCN */
-
- *((const char **) apr_array_push(arr)) = " {encoding ";
- *((const char **) apr_array_push(arr)) = variant->content_encoding;
- *((const char **) apr_array_push(arr)) = "}";
- }
-
- /* Note that the Alternates specification (in rfc2295) does
- * not require that we include {length x}, so we could omit it
- * if determining the length is too expensive. We currently
- * always include it though.
- *
- * If the variant is a CGI script, find_content_length would
- * return the length of the script, not the output it
- * produces, so we check for the presence of a handler and if
- * there is one we don't add a length.
- *
- * XXX: TODO: This check does not detect a CGI script if we
- * get the variant from a type map. This needs to be fixed
- * (without breaking things if the type map specifies a
- * content-length, which currently leads to the correct result).
- */
- if (!(variant->sub_req && variant->sub_req->handler)
- && (len = find_content_length(neg, variant)) >= 0) {
-
- *((const char **) apr_array_push(arr)) = " {length ";
- *((const char **) apr_array_push(arr)) = apr_off_t_toa(r->pool,
- len);
- *((const char **) apr_array_push(arr)) = "}";
- }
-
- *((const char **) apr_array_push(arr)) = "}";
- *((const char **) apr_array_push(arr)) = ", "; /* trimmed below */
- }
-
- if (neg->send_alternates && neg->avail_vars->nelts) {
- arr->nelts--; /* remove last comma */
- apr_table_mergen(hdrs, "Alternates",
- apr_array_pstrcat(r->pool, arr, '\0'));
- }
-
- if (neg->is_transparent || vary_by_type || vary_by_language ||
- vary_by_language || vary_by_charset || vary_by_encoding) {
-
- apr_table_mergen(hdrs, "Vary", 2 + apr_pstrcat(r->pool,
- neg->is_transparent ? ", negotiate" : "",
- vary_by_type ? ", accept" : "",
- vary_by_language ? ", accept-language" : "",
- vary_by_charset ? ", accept-charset" : "",
- vary_by_encoding ? ", accept-encoding" : "", NULL));
- }
-
- if (neg->is_transparent) { /* Create TCN response header */
- apr_table_setn(hdrs, "TCN",
- alg_result == alg_list ? "list" : "choice");
- }
-}
-
-/**********************************************************************
- *
- * Return an HTML list of variants. This is output as part of the
- * choice response or 406 status body.
- */
-
-static char *make_variant_list(request_rec *r, negotiation_state *neg)
-{
- apr_array_header_t *arr;
- int i;
- int max_vlist_array = (neg->avail_vars->nelts * 15) + 2;
-
- /* In order to avoid O(n^2) memory copies in building the list,
- * we preallocate a apr_table_t with the maximum substrings possible,
- * fill it with the variant list, and then concatenate the entire array.
- */
- arr = apr_array_make(r->pool, max_vlist_array, sizeof(char *));
-
- *((const char **) apr_array_push(arr)) = "Available variants:\n<ul>\n";
-
- for (i = 0; i < neg->avail_vars->nelts; ++i) {
- var_rec *variant = &((var_rec *) neg->avail_vars->elts)[i];
- const char *filename = variant->file_name ? variant->file_name : "";
- apr_array_header_t *languages = variant->content_languages;
- const char *description = variant->description
- ? variant->description
- : "";
-
- /* The format isn't very neat, and it would be nice to make
- * the tags human readable (eg replace 'language en' with 'English').
- * Note that if you change the number of substrings pushed, you also
- * need to change the calculation of max_vlist_array above.
- */
- *((const char **) apr_array_push(arr)) = "<li><a href=\"";
- *((const char **) apr_array_push(arr)) = filename;
- *((const char **) apr_array_push(arr)) = "\">";
- *((const char **) apr_array_push(arr)) = filename;
- *((const char **) apr_array_push(arr)) = "</a> ";
- *((const char **) apr_array_push(arr)) = description;
-
- if (variant->mime_type && *variant->mime_type) {
- *((const char **) apr_array_push(arr)) = ", type ";
- *((const char **) apr_array_push(arr)) = variant->mime_type;
- }
- if (languages && languages->nelts) {
- *((const char **) apr_array_push(arr)) = ", language ";
- *((const char **) apr_array_push(arr)) = apr_array_pstrcat(r->pool,
- languages, ',');
- }
- if (variant->content_charset && *variant->content_charset) {
- *((const char **) apr_array_push(arr)) = ", charset ";
- *((const char **) apr_array_push(arr)) = variant->content_charset;
- }
- if (variant->content_encoding) {
- *((const char **) apr_array_push(arr)) = ", encoding ";
- *((const char **) apr_array_push(arr)) = variant->content_encoding;
- }
- *((const char **) apr_array_push(arr)) = "</li>\n";
- }
- *((const char **) apr_array_push(arr)) = "</ul>\n";
-
- return apr_array_pstrcat(r->pool, arr, '\0');
-}
-
-static void store_variant_list(request_rec *r, negotiation_state *neg)
-{
- if (r->main == NULL) {
- apr_table_setn(r->notes, "variant-list", make_variant_list(r, neg));
- }
- else {
- apr_table_setn(r->main->notes, "variant-list",
- make_variant_list(r->main, neg));
- }
-}
-
-/* Called if we got a "Choice" response from the variant selection algorithm.
- * It checks the result of the chosen variant to see if it
- * is itself negotiated (if so, return error HTTP_VARIANT_ALSO_VARIES).
- * Otherwise, add the appropriate headers to the current response.
- */
-
-static int setup_choice_response(request_rec *r, negotiation_state *neg,
- var_rec *variant)
-{
- request_rec *sub_req;
- const char *sub_vary;
-
- if (!variant->sub_req) {
- int status;
-
- sub_req = ap_sub_req_lookup_file(variant->file_name, r, NULL);
- status = sub_req->status;
-
- if (status != HTTP_OK &&
- !apr_table_get(sub_req->err_headers_out, "TCN")) {
- ap_destroy_sub_req(sub_req);
- return status;
- }
- variant->sub_req = sub_req;
- }
- else {
- sub_req = variant->sub_req;
- }
-
- /* The variant selection algorithm told us to return a "Choice"
- * response. This is the normal variant response, with
- * some extra headers. First, ensure that the chosen
- * variant did or will not itself engage in transparent negotiation.
- * If not, set the appropriate headers, and fall through to
- * the normal variant handling
- */
-
- /* This catches the error that a transparent type map selects a
- * transparent multiviews resource as the best variant.
- *
- * XXX: We do not signal an error if a transparent type map
- * selects a _non_transparent multiviews resource as the best
- * variant, because we can generate a legal negotiation response
- * in this case. In this case, the vlist_validator of the
- * nontransparent subrequest will be lost however. This could
- * lead to cases in which a change in the set of variants or the
- * negotiation algorithm of the nontransparent resource is never
- * propagated up to a HTTP/1.1 cache which interprets Vary. To be
- * completely on the safe side we should return HTTP_VARIANT_ALSO_VARIES
- * for this type of recursive negotiation too.
- */
- if (neg->is_transparent &&
- apr_table_get(sub_req->err_headers_out, "TCN")) {
- return HTTP_VARIANT_ALSO_VARIES;
- }
-
- /* This catches the error that a transparent type map recursively
- * selects, as the best variant, another type map which itself
- * causes transparent negotiation to be done.
- *
- * XXX: Actually, we catch this error by catching all cases of
- * type map recursion. There are some borderline recursive type
- * map arrangements which would not produce transparent
- * negotiation protocol errors or lack of cache propagation
- * problems, but such arrangements are very hard to detect at this
- * point in the control flow, so we do not bother to single them
- * out.
- *
- * Recursive type maps imply a recursive arrangement of negotiated
- * resources which is visible to outside clients, and this is not
- * supported by the transparent negotiation caching protocols, so
- * if we are to have generic support for recursive type maps, we
- * have to create some configuration setting which makes all type
- * maps non-transparent when recursion is enabled. Also, if we
- * want recursive type map support which ensures propagation of
- * type map changes into HTTP/1.1 caches that handle Vary, we
- * would have to extend the current mechanism for generating
- * variant list validators.
- */
- if (sub_req->handler && strcmp(sub_req->handler, "type-map") == 0) {
- return HTTP_VARIANT_ALSO_VARIES;
- }
-
- /* This adds an appropriate Variant-Vary header if the subrequest
- * is a multiviews resource.
- *
- * XXX: TODO: Note that this does _not_ handle any Vary header
- * returned by a CGI if sub_req is a CGI script, because we don't
- * see that Vary header yet at this point in the control flow.
- * This won't cause any cache consistency problems _unless_ the
- * CGI script also returns a Cache-Control header marking the
- * response as cachable. This needs to be fixed, also there are
- * problems if a CGI returns an Etag header which also need to be
- * fixed.
- */
- if ((sub_vary = apr_table_get(sub_req->err_headers_out, "Vary")) != NULL) {
- apr_table_setn(r->err_headers_out, "Variant-Vary", sub_vary);
-
- /* Move the subreq Vary header into the main request to
- * prevent having two Vary headers in the response, which
- * would be legal but strange.
- */
- apr_table_setn(r->err_headers_out, "Vary", sub_vary);
- apr_table_unset(sub_req->err_headers_out, "Vary");
- }
-
- apr_table_setn(r->err_headers_out, "Content-Location",
- apr_pstrdup(r->pool, variant->file_name));
-
- set_neg_headers(r, neg, alg_choice); /* add Alternates and Vary */
-
- /* Still to do by caller: add Expires */
-
- return 0;
-}
-
-/****************************************************************
- *
- * Executive...
- */
-
-static int do_negotiation(request_rec *r, negotiation_state *neg,
- var_rec **bestp, int prefer_scripts)
-{
- var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
- int alg_result; /* result of variant selection algorithm */
- int res;
- int j;
-
- /* Decide if resource is transparently negotiable */
-
- /* GET or HEAD? (HEAD has same method number as GET) */
- if (r->method_number == M_GET) {
-
- /* maybe this should be configurable, see also the comment
- * about recursive type maps in setup_choice_response()
- */
- neg->is_transparent = 1;
-
- /* We can't be transparent if we are a map file in the middle
- * of the request URI.
- */
- if (r->path_info && *r->path_info)
- neg->is_transparent = 0;
-
- for (j = 0; j < neg->avail_vars->nelts; ++j) {
- var_rec *variant = &avail_recs[j];
-
- /* We can't be transparent, because of internal
- * assumptions in best_match(), if there is a
- * non-neighboring variant. We can have a non-neighboring
- * variant when processing a type map.
- */
- if (ap_strchr_c(variant->file_name, '/'))
- neg->is_transparent = 0;
-
- /* We can't be transparent, because of the behavior
- * of variant typemap bodies.
- */
- if (variant->body) {
- neg->is_transparent = 0;
- }
- }
- }
-
- if (neg->is_transparent) {
- parse_negotiate_header(r, neg);
- }
- else { /* configure negotiation on non-transparent resource */
- neg->may_choose = 1;
- }
-
- maybe_add_default_accepts(neg, prefer_scripts);
-
- alg_result = best_match(neg, bestp);
-
- /* alg_result is one of
- * alg_choice: a best variant is chosen
- * alg_list: no best variant is chosen
- */
-
- if (alg_result == alg_list) {
- /* send a list response or HTTP_NOT_ACCEPTABLE error response */
-
- neg->send_alternates = 1; /* always include Alternates header */
- set_neg_headers(r, neg, alg_result);
- store_variant_list(r, neg);
-
- if (neg->is_transparent && neg->ua_supports_trans) {
- /* XXX todo: expires? cachability? */
-
- /* Some HTTP/1.0 clients are known to choke when they get
- * a 300 (multiple choices) response without a Location
- * header. However the 300 code response we are are about
- * to generate will only reach 1.0 clients which support
- * transparent negotiation, and they should be OK. The
- * response should never reach older 1.0 clients, even if
- * we have CacheNegotiatedDocs enabled, because no 1.0
- * proxy cache (we know of) will cache and return 300
- * responses (they certainly won't if they conform to the
- * HTTP/1.0 specification).
- */
- return HTTP_MULTIPLE_CHOICES;
- }
-
- if (!*bestp) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "no acceptable variant: %s", r->filename);
- return HTTP_NOT_ACCEPTABLE;
- }
- }
-
- /* Variant selection chose a variant */
-
- /* XXX todo: merge the two cases in the if statement below */
- if (neg->is_transparent) {
-
- if ((res = setup_choice_response(r, neg, *bestp)) != 0) {
- return res; /* return if error */
- }
- }
- else {
- set_neg_headers(r, neg, alg_result);
- }
-
- /* Make sure caching works - Vary should handle HTTP/1.1, but for
- * HTTP/1.0, we can't allow caching at all.
- */
-
- /* XXX: Note that we only set r->no_cache to 1, which causes
- * Expires: <now> to be added, when responding to a HTTP/1.0
- * client. If we return the response to a 1.1 client, we do not
- * add Expires <now>, because doing so would degrade 1.1 cache
- * performance by preventing re-use of the response without prior
- * revalidation. On the other hand, if the 1.1 client is a proxy
- * which was itself contacted by a 1.0 client, or a proxy cache
- * which can be contacted later by 1.0 clients, then we currently
- * rely on this 1.1 proxy to add the Expires: <now> when it
- * forwards the response.
- *
- * XXX: TODO: Find out if the 1.1 spec requires proxies and
- * tunnels to add Expires: <now> when forwarding the response to
- * 1.0 clients. I (kh) recall it is rather vague on this point.
- * Testing actual 1.1 proxy implementations would also be nice. If
- * Expires: <now> is not added by proxies then we need to always
- * include Expires: <now> ourselves to ensure correct caching, but
- * this would degrade HTTP/1.1 cache efficiency unless we also add
- * Cache-Control: max-age=N, which we currently don't.
- *
- * Roy: No, we are not going to screw over HTTP future just to
- * ensure that people who can't be bothered to upgrade their
- * clients will always receive perfect server-side negotiation.
- * Hell, those clients are sending bogus accept headers anyway.
- *
- * Manual setting of cache-control/expires always overrides this
- * automated kluge, on purpose.
- */
-
- if ((!do_cache_negotiated_docs(r->server)
- && (r->proto_num < HTTP_VERSION(1,1)))
- && neg->count_multiviews_variants != 1) {
- r->no_cache = 1;
- }
-
- return OK;
-}
-
-static int handle_map_file(request_rec *r)
-{
- negotiation_state *neg;
- apr_file_t *map;
- var_rec *best;
- int res;
- char *udir;
-
- if(strcmp(r->handler,MAP_FILE_MAGIC_TYPE) && strcmp(r->handler,"type-map"))
- return DECLINED;
-
- neg = parse_accept_headers(r);
- if ((res = read_type_map(&map, neg, r))) {
- return res;
- }
-
- res = do_negotiation(r, neg, &best, 0);
- if (res != 0) return res;
-
- if (best->body)
- {
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *e;
-
- ap_allow_standard_methods(r, REPLACE_ALLOW, M_GET, M_OPTIONS,
- M_POST, -1);
- /* XXX: ?
- * if (r->method_number == M_OPTIONS) {
- * return ap_send_http_options(r);
- *}
- */
- if (r->method_number != M_GET && r->method_number != M_POST) {
- return HTTP_METHOD_NOT_ALLOWED;
- }
-
- /* ### These may be implemented by adding some 'extra' info
- * of the file offset onto the etag
- * ap_update_mtime(r, r->finfo.mtime);
- * ap_set_last_modified(r);
- * ap_set_etag(r);
- */
- apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
- ap_set_content_length(r, best->bytes);
-
- /* set MIME type and charset as negotiated */
- if (best->mime_type && *best->mime_type) {
- if (best->content_charset && *best->content_charset) {
- ap_set_content_type(r, apr_pstrcat(r->pool,
- best->mime_type,
- "; charset=",
- best->content_charset,
- NULL));
- }
- else {
- ap_set_content_type(r, apr_pstrdup(r->pool, best->mime_type));
- }
- }
-
- /* set Content-language(s) as negotiated */
- if (best->content_languages && best->content_languages->nelts) {
- r->content_languages = apr_array_copy(r->pool,
- best->content_languages);
- }
-
- /* set Content-Encoding as negotiated */
- if (best->content_encoding && *best->content_encoding) {
- r->content_encoding = apr_pstrdup(r->pool,
- best->content_encoding);
- }
-
- if ((res = ap_meets_conditions(r)) != OK) {
- return res;
- }
-
- if ((res = ap_discard_request_body(r)) != OK) {
- return res;
- }
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- e = apr_bucket_file_create(map, best->body,
- (apr_size_t)best->bytes, r->pool,
- c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
-
- return ap_pass_brigade(r->output_filters, bb);
- }
-
- if (r->path_info && *r->path_info) {
- /* remove any path_info from the end of the uri before trying
- * to change the filename. r->path_info from the original
- * request is passed along on the redirect.
- */
- r->uri[ap_find_path_info(r->uri, r->path_info)] = '\0';
- }
- udir = ap_make_dirstr_parent(r->pool, r->uri);
- udir = ap_escape_uri(r->pool, udir);
- ap_internal_redirect(apr_pstrcat(r->pool, udir, best->file_name,
- r->path_info, NULL), r);
- return OK;
-}
-
-static int handle_multi(request_rec *r)
-{
- negotiation_state *neg;
- var_rec *best, *avail_recs;
- request_rec *sub_req;
- int res;
- int j;
-
- if (r->finfo.filetype != APR_NOFILE
- || !(ap_allow_options(r) & OPT_MULTI)) {
- return DECLINED;
- }
-
- neg = parse_accept_headers(r);
-
- if ((res = read_types_multi(neg))) {
- return_from_multi:
- /* free all allocated memory from subrequests */
- avail_recs = (var_rec *) neg->avail_vars->elts;
- for (j = 0; j < neg->avail_vars->nelts; ++j) {
- var_rec *variant = &avail_recs[j];
- if (variant->sub_req) {
- ap_destroy_sub_req(variant->sub_req);
- }
- }
- return res;
- }
- if (neg->avail_vars->nelts == 0) {
- return DECLINED;
- }
-
- res = do_negotiation(r, neg, &best,
- (r->method_number != M_GET) || r->args ||
- (r->path_info && *r->path_info));
- if (res != 0)
- goto return_from_multi;
-
- if (!(sub_req = best->sub_req)) {
- /* We got this out of a map file, so we don't actually have
- * a sub_req structure yet. Get one now.
- */
-
- sub_req = ap_sub_req_lookup_file(best->file_name, r, NULL);
- if (sub_req->status != HTTP_OK) {
- res = sub_req->status;
- ap_destroy_sub_req(sub_req);
- goto return_from_multi;
- }
- }
-
- /* now do a "fast redirect" ... promotes the sub_req into the main req */
- ap_internal_fast_redirect(sub_req, r);
-
- /* give no advise for time on this subrequest. Perhaps we
- * should tally the last mtime amoung all variants, and date
- * the most recent, but that could confuse the proxies.
- */
- r->mtime = 0;
-
- /* clean up all but our favorite variant, since that sub_req
- * is now merged into the main request!
- */
- avail_recs = (var_rec *) neg->avail_vars->elts;
- for (j = 0; j < neg->avail_vars->nelts; ++j) {
- var_rec *variant = &avail_recs[j];
- if (variant != best && variant->sub_req) {
- ap_destroy_sub_req(variant->sub_req);
- }
- }
- return OK;
-}
-
-/**********************************************************************
- * There is a problem with content-encoding, as some clients send and
- * expect an x- token (e.g. x-gzip) while others expect the plain token
- * (i.e. gzip). To try and deal with this as best as possible we do
- * the following: if the client sent an Accept-Encoding header and it
- * contains a plain token corresponding to the content encoding of the
- * response, then set content encoding using the plain token. Else if
- * the A-E header contains the x- token use the x- token in the C-E
- * header. Else don't do anything.
- *
- * Note that if no A-E header was sent, or it does not contain a token
- * compatible with the final content encoding, then the token in the
- * C-E header will be whatever was specified in the AddEncoding
- * directive.
- */
-static int fix_encoding(request_rec *r)
-{
- const char *enc = r->content_encoding;
- char *x_enc = NULL;
- apr_array_header_t *accept_encodings;
- accept_rec *accept_recs;
- int i;
-
- if (!enc || !*enc) {
- return DECLINED;
- }
-
- if (enc[0] == 'x' && enc[1] == '-') {
- enc += 2;
- }
-
- if ((accept_encodings = do_header_line(r->pool,
- apr_table_get(r->headers_in, "Accept-Encoding"))) == NULL) {
- return DECLINED;
- }
-
- accept_recs = (accept_rec *) accept_encodings->elts;
-
- for (i = 0; i < accept_encodings->nelts; ++i) {
- char *name = accept_recs[i].name;
-
- if (!strcmp(name, enc)) {
- r->content_encoding = name;
- return OK;
- }
-
- if (name[0] == 'x' && name[1] == '-' && !strcmp(name+2, enc)) {
- x_enc = name;
- }
- }
-
- if (x_enc) {
- r->content_encoding = x_enc;
- return OK;
- }
-
- return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(fix_encoding,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_type_checker(handle_multi,NULL,NULL,APR_HOOK_FIRST);
- ap_hook_handler(handle_map_file,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA negotiation_module =
-{
- STANDARD20_MODULE_STUFF,
- create_neg_dir_config, /* dir config creator */
- merge_neg_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- negotiation_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_negotiation.dsp b/modules/mappers/mod_negotiation.dsp
deleted file mode 100644
index 48792fe51c..0000000000
--- a/modules/mappers/mod_negotiation.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_negotiation" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_negotiation - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_negotiation.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_negotiation.mak" CFG="mod_negotiation - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_negotiation - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_negotiation - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_negotiation - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_negotiation_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_negotiation - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_negotiation_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_negotiation - Win32 Release"
-# Name "mod_negotiation - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_negotiation.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_negotiation.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_negotiation - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_negotiation.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_negotiation.so "negotiation_module for Apache" ../../include/ap_release.h > .\mod_negotiation.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_negotiation - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_negotiation.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_negotiation.so "negotiation_module for Apache" ../../include/ap_release.h > .\mod_negotiation.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_negotiation.exp b/modules/mappers/mod_negotiation.exp
deleted file mode 100644
index a7c18da1de..0000000000
--- a/modules/mappers/mod_negotiation.exp
+++ /dev/null
@@ -1 +0,0 @@
-negotiation_module
diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c
deleted file mode 100644
index ca51ce378f..0000000000
--- a/modules/mappers/mod_rewrite.c
+++ /dev/null
@@ -1,4885 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _ _
- * _ __ ___ ___ __| | _ __ _____ ___ __(_) |_ ___
- * | '_ ` _ \ / _ \ / _` | | '__/ _ \ \ /\ / / '__| | __/ _ \
- * | | | | | | (_) | (_| | | | | __/\ V V /| | | | || __/
- * |_| |_| |_|\___/ \__,_|___|_| \___| \_/\_/ |_| |_|\__\___|
- * |_____|
- *
- * URL Rewriting Module
- *
- * This module uses a rule-based rewriting engine (based on a
- * regular-expression parser) to rewrite requested URLs on the fly.
- *
- * It supports an unlimited number of additional rule conditions (which can
- * operate on a lot of variables, even on HTTP headers) for granular
- * matching and even external database lookups (either via plain text
- * tables, DBM hash files or even external processes) for advanced URL
- * substitution.
- *
- * It operates on the full URLs (including the PATH_INFO part) both in
- * per-server context (httpd.conf) and per-dir context (.htaccess) and even
- * can generate QUERY_STRING parts on result. The rewriting result finally
- * can lead to internal subprocessing, external request redirection or even
- * to internal proxy throughput.
- *
- * This module was originally written in April 1996 and
- * gifted exclusively to the The Apache Software Foundation in July 1997 by
- *
- * Ralf S. Engelschall
- * rse engelschall.com
- * www.engelschall.com
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_hash.h"
-#include "apr_user.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-#include "apr_global_mutex.h"
-#include "apr_dbm.h"
-
-#if APR_HAS_THREADS
-#include "apr_thread_mutex.h"
-#endif
-
-#define APR_WANT_MEMFUNC
-#define APR_WANT_STRFUNC
-#define APR_WANT_IOVEC
-#include "apr_want.h"
-
-/* XXX: Do we really need these headers? */
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_vhost.h"
-
-#include "mod_ssl.h"
-
-#include "mod_rewrite.h"
-
-#if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
-#include "unixd.h"
-#define MOD_REWRITE_SET_MUTEX_PERMS /* XXX Apache should define something */
-#endif
-
-/*
- * in order to improve performance on running production systems, you
- * may strip all rewritelog code entirely from mod_rewrite by using the
- * -DREWRITELOG_DISABLED compiler option.
- *
- * DO NOT USE THIS OPTION FOR PUBLIC BINARY RELEASES. Otherwise YOU are
- * responsible for answering all the mod_rewrite questions out there.
- */
-#ifndef REWRITELOG_DISABLED
-
-#define rewritelog(x) do_rewritelog x
-#define REWRITELOG_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
-#define REWRITELOG_FLAGS ( APR_WRITE | APR_APPEND | APR_CREATE )
-
-#else /* !REWRITELOG_DISABLED */
-
-#define rewritelog(x)
-
-#endif /* REWRITELOG_DISABLED */
-
-/* remembered mime-type for [T=...] */
-#define REWRITE_FORCED_MIMETYPE_NOTEVAR "rewrite-forced-mimetype"
-#define REWRITE_FORCED_HANDLER_NOTEVAR "rewrite-forced-handler"
-
-#define ENVVAR_SCRIPT_URL "SCRIPT_URL"
-#define REDIRECT_ENVVAR_SCRIPT_URL "REDIRECT_" ENVVAR_SCRIPT_URL
-#define ENVVAR_SCRIPT_URI "SCRIPT_URI"
-
-#define CONDFLAG_NONE 1<<0
-#define CONDFLAG_NOCASE 1<<1
-#define CONDFLAG_NOTMATCH 1<<2
-#define CONDFLAG_ORNEXT 1<<3
-
-#define RULEFLAG_NONE 1<<0
-#define RULEFLAG_FORCEREDIRECT 1<<1
-#define RULEFLAG_LASTRULE 1<<2
-#define RULEFLAG_NEWROUND 1<<3
-#define RULEFLAG_CHAIN 1<<4
-#define RULEFLAG_IGNOREONSUBREQ 1<<5
-#define RULEFLAG_NOTMATCH 1<<6
-#define RULEFLAG_PROXY 1<<7
-#define RULEFLAG_PASSTHROUGH 1<<8
-#define RULEFLAG_QSAPPEND 1<<9
-#define RULEFLAG_NOCASE 1<<10
-#define RULEFLAG_NOESCAPE 1<<11
-#define RULEFLAG_NOSUB 1<<12
-#define RULEFLAG_STATUS 1<<13
-
-/* return code of the rewrite rule
- * the result may be escaped - or not
- */
-#define ACTION_NORMAL 1<<0
-#define ACTION_NOESCAPE 1<<1
-#define ACTION_STATUS 1<<2
-
-
-#define MAPTYPE_TXT 1<<0
-#define MAPTYPE_DBM 1<<1
-#define MAPTYPE_PRG 1<<2
-#define MAPTYPE_INT 1<<3
-#define MAPTYPE_RND 1<<4
-
-#define ENGINE_DISABLED 1<<0
-#define ENGINE_ENABLED 1<<1
-
-#define OPTION_NONE 1<<0
-#define OPTION_INHERIT 1<<1
-
-#ifndef RAND_MAX
-#define RAND_MAX 32767
-#endif
-
-/* max cookie size in rfc 2109 */
-/* XXX: not used at all. We should do a check somewhere and/or cut the cookie */
-#define MAX_COOKIE_LEN 4096
-
-/* default maximum number of internal redirects */
-#define REWRITE_REDIRECT_LIMIT 10
-
-/* max line length (incl.\n) in text rewrite maps */
-#ifndef REWRITE_MAX_TXT_MAP_LINE
-#define REWRITE_MAX_TXT_MAP_LINE 1024
-#endif
-
-/* buffer length for prg rewrite maps */
-#ifndef REWRITE_PRG_MAP_BUF
-#define REWRITE_PRG_MAP_BUF 1024
-#endif
-
-/* for better readbility */
-#define LEFT_CURLY '{'
-#define RIGHT_CURLY '}'
-
-/*
- * expansion result items on the stack to save some cycles
- *
- * (5 == about 2 variables like "foo%{var}bar%{var}baz")
- */
-#define SMALL_EXPANSION 5
-
-/*
- * check that a subrequest won't cause infinite recursion
- *
- * either not in a subrequest, or in a subrequest
- * and URIs aren't NULL and sub/main URIs differ
- */
-#define subreq_ok(r) (!r->main || \
- (r->main->uri && r->uri && strcmp(r->main->uri, r->uri)))
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Types and Structures
- * | |
- * +-------------------------------------------------------+
- */
-
-typedef struct {
- const char *datafile; /* filename for map data files */
- const char *dbmtype; /* dbm type for dbm map data files */
- const char *checkfile; /* filename to check for map existence */
- const char *cachename; /* for cached maps (txt/rnd/dbm) */
- int type; /* the type of the map */
- apr_file_t *fpin; /* in file pointer for program maps */
- apr_file_t *fpout; /* out file pointer for program maps */
- apr_file_t *fperr; /* err file pointer for program maps */
- char *(*func)(request_rec *, /* function pointer for internal maps */
- char *);
- char **argv; /* argv of the external rewrite map */
-} rewritemap_entry;
-
-/* special pattern types for RewriteCond */
-typedef enum {
- CONDPAT_REGEX = 0,
- CONDPAT_FILE_EXISTS,
- CONDPAT_FILE_SIZE,
- CONDPAT_FILE_LINK,
- CONDPAT_FILE_DIR,
- CONDPAT_FILE_XBIT,
- CONDPAT_LU_URL,
- CONDPAT_LU_FILE,
- CONDPAT_STR_GT,
- CONDPAT_STR_LT,
- CONDPAT_STR_EQ
-} pattern_type;
-
-typedef struct {
- char *input; /* Input string of RewriteCond */
- char *pattern; /* the RegExp pattern string */
- regex_t *regexp; /* the precompiled regexp */
- int flags; /* Flags which control the match */
- pattern_type ptype; /* pattern type */
-} rewritecond_entry;
-
-/* single linked list for env vars and cookies */
-typedef struct data_item {
- struct data_item *next;
- char *data;
-} data_item;
-
-typedef struct {
- apr_array_header_t *rewriteconds;/* the corresponding RewriteCond entries */
- char *pattern; /* the RegExp pattern string */
- regex_t *regexp; /* the RegExp pattern compilation */
- char *output; /* the Substitution string */
- int flags; /* Flags which control the substitution */
- char *forced_mimetype; /* forced MIME type of substitution */
- char *forced_handler; /* forced content handler of subst. */
- int forced_responsecode; /* forced HTTP response status */
- data_item *env; /* added environment variables */
- data_item *cookie; /* added cookies */
- int skip; /* number of next rules to skip */
-} rewriterule_entry;
-
-typedef struct {
- int state; /* the RewriteEngine state */
- int options; /* the RewriteOption state */
-#ifndef REWRITELOG_DISABLED
- const char *rewritelogfile; /* the RewriteLog filename */
- apr_file_t *rewritelogfp; /* the RewriteLog open filepointer */
- int rewriteloglevel; /* the RewriteLog level of verbosity */
-#endif
- apr_hash_t *rewritemaps; /* the RewriteMap entries */
- apr_array_header_t *rewriteconds; /* the RewriteCond entries (temp.) */
- apr_array_header_t *rewriterules; /* the RewriteRule entries */
- server_rec *server; /* the corresponding server indicator */
- int redirect_limit; /* max number of internal redirects */
-} rewrite_server_conf;
-
-typedef struct {
- int state; /* the RewriteEngine state */
- int options; /* the RewriteOption state */
- apr_array_header_t *rewriteconds; /* the RewriteCond entries (temp.) */
- apr_array_header_t *rewriterules; /* the RewriteRule entries */
- char *directory; /* the directory where it applies */
- const char *baseurl; /* the base-URL where it applies */
- int redirect_limit; /* max. number of internal redirects */
-} rewrite_perdir_conf;
-
-typedef struct {
- int redirects; /* current number of redirects */
- int redirect_limit; /* maximum number of redirects */
-} rewrite_request_conf;
-
-/* the (per-child) cache structures.
- */
-typedef struct cache {
- apr_pool_t *pool;
- apr_hash_t *maps;
-#if APR_HAS_THREADS
- apr_thread_mutex_t *lock;
-#endif
-} cache;
-
-/* cached maps contain an mtime for the whole map and live in a subpool
- * of the cachep->pool. That makes it easy to forget them if necessary.
- */
-typedef struct {
- apr_time_t mtime;
- apr_pool_t *pool;
- apr_hash_t *entries;
-} cachedmap;
-
-/* the regex structure for the
- * substitution of backreferences
- */
-typedef struct backrefinfo {
- char *source;
- int nsub;
- regmatch_t regmatch[AP_MAX_REG_MATCH];
-} backrefinfo;
-
-/* single linked list used for
- * variable expansion
- */
-typedef struct result_list {
- struct result_list *next;
- apr_size_t len;
- const char *string;
-} result_list;
-
-/* context structure for variable lookup and expansion
- */
-typedef struct {
- request_rec *r;
- const char *uri;
- const char *vary_this;
- const char *vary;
- char *perdir;
- backrefinfo briRR;
- backrefinfo briRC;
-} rewrite_ctx;
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | static module data
- * | |
- * +-------------------------------------------------------+
- */
-
-/* the global module structure */
-module AP_MODULE_DECLARE_DATA rewrite_module;
-
-/* rewritemap int: handler function registry */
-static apr_hash_t *mapfunc_hash;
-
-/* the cache */
-static cache *cachep;
-
-/* whether proxy module is available or not */
-static int proxy_available;
-
-/* whether random seed can be reaped */
-static int rewrite_rand_init_done = 0;
-
-/* Locks/Mutexes */
-static const char *lockname;
-static apr_global_mutex_t *rewrite_mapr_lock_acquire = NULL;
-
-#ifndef REWRITELOG_DISABLED
-static apr_global_mutex_t *rewrite_log_lock = NULL;
-#endif
-
-/* Optional functions imported from mod_ssl when loaded: */
-static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *rewrite_ssl_lookup = NULL;
-static APR_OPTIONAL_FN_TYPE(ssl_is_https) *rewrite_is_https = NULL;
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | rewriting logfile support
- * | |
- * +-------------------------------------------------------+
- */
-
-#ifndef REWRITELOG_DISABLED
-static char *current_logtime(request_rec *r)
-{
- apr_time_exp_t t;
- char tstr[80];
- apr_size_t len;
-
- apr_time_exp_lt(&t, apr_time_now());
-
- apr_strftime(tstr, &len, sizeof(tstr), "[%d/%b/%Y:%H:%M:%S ", &t);
- apr_snprintf(tstr+len, sizeof(tstr)-len, "%c%.2d%.2d]",
- t.tm_gmtoff < 0 ? '-' : '+',
- t.tm_gmtoff / (60*60), t.tm_gmtoff % (60*60));
-
- return apr_pstrdup(r->pool, tstr);
-}
-
-static int open_rewritelog(server_rec *s, apr_pool_t *p)
-{
- rewrite_server_conf *conf;
- const char *fname;
-
- conf = ap_get_module_config(s->module_config, &rewrite_module);
-
- /* - no logfile configured
- * - logfilename empty
- * - virtual log shared w/ main server
- */
- if (!conf->rewritelogfile || !*conf->rewritelogfile || conf->rewritelogfp) {
- return 1;
- }
-
- if (*conf->rewritelogfile == '|') {
- piped_log *pl;
-
- fname = ap_server_root_relative(p, conf->rewritelogfile+1);
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
- "mod_rewrite: Invalid RewriteLog "
- "path %s", conf->rewritelogfile+1);
- return 0;
- }
-
- if ((pl = ap_open_piped_log(p, fname)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "mod_rewrite: could not open reliable pipe "
- "to RewriteLog filter %s", fname);
- return 0;
- }
- conf->rewritelogfp = ap_piped_log_write_fd(pl);
- }
- else {
- apr_status_t rc;
-
- fname = ap_server_root_relative(p, conf->rewritelogfile);
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
- "mod_rewrite: Invalid RewriteLog "
- "path %s", conf->rewritelogfile);
- return 0;
- }
-
- if ((rc = apr_file_open(&conf->rewritelogfp, fname,
- REWRITELOG_FLAGS, REWRITELOG_MODE, p))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
- "mod_rewrite: could not open RewriteLog "
- "file %s", fname);
- return 0;
- }
- }
-
- return 1;
-}
-
-static void do_rewritelog(request_rec *r, int level, char *perdir,
- const char *fmt, ...)
-{
- rewrite_server_conf *conf;
- char *logline, *text;
- const char *rhost, *rname;
- apr_size_t nbytes;
- int redir;
- apr_status_t rv;
- request_rec *req;
- va_list ap;
-
- conf = ap_get_module_config(r->server->module_config, &rewrite_module);
-
- if (!conf->rewritelogfp || level > conf->rewriteloglevel) {
- return;
- }
-
- rhost = ap_get_remote_host(r->connection, r->per_dir_config,
- REMOTE_NOLOOKUP, NULL);
- rname = ap_get_remote_logname(r);
-
- for (redir=0, req=r; req->prev; req = req->prev) {
- ++redir;
- }
-
- va_start(ap, fmt);
- text = apr_pvsprintf(r->pool, fmt, ap);
- va_end(ap);
-
- logline = apr_psprintf(r->pool, "%s %s %s %s [%s/sid#%pp][rid#%pp/%s%s%s] "
- "(%d) %s%s%s%s" APR_EOL_STR,
- rhost ? rhost : "UNKNOWN-HOST",
- rname ? rname : "-",
- r->user ? (*r->user ? r->user : "\"\"") : "-",
- current_logtime(r),
- ap_get_server_name(r),
- (void *)(r->server),
- (void *)r,
- r->main ? "subreq" : "initial",
- redir ? "/redir#" : "",
- redir ? apr_itoa(r->pool, redir) : "",
- level,
- perdir ? "[perdir " : "",
- perdir ? perdir : "",
- perdir ? "] ": "",
- text);
-
- rv = apr_global_mutex_lock(rewrite_log_lock);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "apr_global_mutex_lock(rewrite_log_lock) failed");
- /* XXX: Maybe this should be fatal? */
- }
-
- nbytes = strlen(logline);
- apr_file_write(conf->rewritelogfp, logline, &nbytes);
-
- rv = apr_global_mutex_unlock(rewrite_log_lock);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "apr_global_mutex_unlock(rewrite_log_lock) failed");
- /* XXX: Maybe this should be fatal? */
- }
-
- return;
-}
-#endif /* !REWRITELOG_DISABLED */
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | URI and path functions
- * | |
- * +-------------------------------------------------------+
- */
-
-/* return number of chars of the scheme (incl. '://')
- * if the URI is absolute (includes a scheme etc.)
- * otherwise 0.
- *
- * NOTE: If you add new schemes here, please have a
- * look at escape_absolute_uri and splitout_queryargs.
- * Not every scheme takes query strings and some schemes
- * may be handled in a special way.
- *
- * XXX: we may consider a scheme registry, perhaps with
- * appropriate escape callbacks to allow other modules
- * to extend mod_rewrite at runtime.
- */
-static unsigned is_absolute_uri(char *uri)
-{
- /* fast exit */
- if (*uri == '/' || strlen(uri) <= 5) {
- return 0;
- }
-
- switch (*uri++) {
- case 'f':
- case 'F':
- if (!strncasecmp(uri, "tp://", 5)) { /* ftp:// */
- return 6;
- }
- break;
-
- case 'g':
- case 'G':
- if (!strncasecmp(uri, "opher://", 8)) { /* gopher:// */
- return 9;
- }
- break;
-
- case 'h':
- case 'H':
- if (!strncasecmp(uri, "ttp://", 6)) { /* http:// */
- return 7;
- }
- else if (!strncasecmp(uri, "ttps://", 7)) { /* https:// */
- return 8;
- }
- break;
-
- case 'l':
- case 'L':
- if (!strncasecmp(uri, "dap://", 6)) { /* ldap:// */
- return 7;
- }
- break;
-
- case 'm':
- case 'M':
- if (!strncasecmp(uri, "ailto:", 6)) { /* mailto: */
- return 7;
- }
- break;
-
- case 'n':
- case 'N':
- if (!strncasecmp(uri, "ews:", 4)) { /* news: */
- return 5;
- }
- else if (!strncasecmp(uri, "ntp://", 6)) { /* nntp:// */
- return 7;
- }
- break;
- }
-
- return 0;
-}
-
-/*
- * escape absolute uri, which may or may not be path oriented.
- * So let's handle them differently.
- */
-static char *escape_absolute_uri(apr_pool_t *p, char *uri, unsigned scheme)
-{
- char *cp;
-
- /* be safe.
- * NULL should indicate elsewhere, that something's wrong
- */
- if (!scheme || strlen(uri) < scheme) {
- return NULL;
- }
-
- cp = uri + scheme;
-
- /* scheme with authority part? */
- if (cp[-1] == '/') {
- /* skip host part */
- while (*cp && *cp != '/') {
- ++cp;
- }
-
- /* nothing after the hostpart. ready! */
- if (!*cp || !*++cp) {
- return apr_pstrdup(p, uri);
- }
-
- /* remember the hostname stuff */
- scheme = cp - uri;
-
- /* special thing for ldap.
- * The parts are separated by question marks. From RFC 2255:
- * ldapurl = scheme "://" [hostport] ["/"
- * [dn ["?" [attributes] ["?" [scope]
- * ["?" [filter] ["?" extensions]]]]]]
- */
- if (!strncasecmp(uri, "ldap", 4)) {
- char *token[5];
- int c = 0;
-
- token[0] = cp = apr_pstrdup(p, cp);
- while (*cp && c < 5) {
- if (*cp == '?') {
- token[++c] = cp + 1;
- *cp = '\0';
- }
- ++cp;
- }
-
- return apr_pstrcat(p, apr_pstrndup(p, uri, scheme),
- ap_escape_uri(p, token[0]),
- (c >= 1) ? "?" : NULL,
- (c >= 1) ? ap_escape_uri(p, token[1]) : NULL,
- (c >= 2) ? "?" : NULL,
- (c >= 2) ? ap_escape_uri(p, token[2]) : NULL,
- (c >= 3) ? "?" : NULL,
- (c >= 3) ? ap_escape_uri(p, token[3]) : NULL,
- (c >= 4) ? "?" : NULL,
- (c >= 4) ? ap_escape_uri(p, token[4]) : NULL,
- NULL);
- }
- }
-
- /* Nothing special here. Apply normal escaping. */
- return apr_pstrcat(p, apr_pstrndup(p, uri, scheme),
- ap_escape_uri(p, cp), NULL);
-}
-
-/*
- * split out a QUERY_STRING part from
- * the current URI string
- */
-static void splitout_queryargs(request_rec *r, int qsappend)
-{
- char *q;
-
- /* don't touch, unless it's an http or mailto URL.
- * See RFC 1738 and RFC 2368.
- */
- if ( is_absolute_uri(r->filename)
- && strncasecmp(r->filename, "http", 4)
- && strncasecmp(r->filename, "mailto", 6)) {
- r->args = NULL; /* forget the query that's still flying around */
- return;
- }
-
- q = ap_strchr(r->filename, '?');
- if (q != NULL) {
- char *olduri;
- apr_size_t len;
-
- olduri = apr_pstrdup(r->pool, r->filename);
- *q++ = '\0';
- if (qsappend) {
- r->args = apr_pstrcat(r->pool, q, "&", r->args, NULL);
- }
- else {
- r->args = apr_pstrdup(r->pool, q);
- }
-
- len = strlen(r->args);
- if (!len) {
- r->args = NULL;
- }
- else if (r->args[len-1] == '&') {
- r->args[len-1] = '\0';
- }
-
- rewritelog((r, 3, NULL, "split uri=%s -> uri=%s, args=%s", olduri,
- r->filename, r->args ? r->args : "<none>"));
- }
-
- return;
-}
-
-/*
- * strip 'http[s]://ourhost/' from URI
- */
-static void reduce_uri(request_rec *r)
-{
- char *cp;
- apr_size_t l;
-
- cp = (char *)ap_http_method(r);
- l = strlen(cp);
- if ( strlen(r->filename) > l+3
- && strncasecmp(r->filename, cp, l) == 0
- && r->filename[l] == ':'
- && r->filename[l+1] == '/'
- && r->filename[l+2] == '/' ) {
-
- unsigned short port;
- char *portp, *host, *url, *scratch;
-
- scratch = apr_pstrdup(r->pool, r->filename); /* our scratchpad */
-
- /* cut the hostname and port out of the URI */
- cp = host = scratch + l + 3; /* 3 == strlen("://") */
- while (*cp && *cp != '/' && *cp != ':') {
- ++cp;
- }
-
- if (*cp == ':') { /* additional port given */
- *cp++ = '\0';
- portp = cp;
- while (*cp && *cp != '/') {
- ++cp;
- }
- *cp = '\0';
-
- port = atoi(portp);
- url = r->filename + (cp - scratch);
- if (!*url) {
- url = "/";
- }
- }
- else if (*cp == '/') { /* default port */
- *cp = '\0';
-
- port = ap_default_port(r);
- url = r->filename + (cp - scratch);
- }
- else {
- port = ap_default_port(r);
- url = "/";
- }
-
- /* now check whether we could reduce it to a local path... */
- if (ap_matches_request_vhost(r, host, port)) {
- rewritelog((r, 3, NULL, "reduce %s -> %s", r->filename, url));
- r->filename = apr_pstrdup(r->pool, url);
- }
- }
-
- return;
-}
-
-/*
- * add 'http[s]://ourhost[:ourport]/' to URI
- * if URI is still not fully qualified
- */
-static void fully_qualify_uri(request_rec *r)
-{
- if (!is_absolute_uri(r->filename)) {
- const char *thisserver;
- char *thisport;
- int port;
-
- thisserver = ap_get_server_name(r);
- port = ap_get_server_port(r);
- thisport = ap_is_default_port(port, r)
- ? ""
- : apr_psprintf(r->pool, ":%u", port);
-
- r->filename = apr_psprintf(r->pool, "%s://%s%s%s%s",
- ap_http_method(r), thisserver, thisport,
- (*r->filename == '/') ? "" : "/",
- r->filename);
- }
-
- return;
-}
-
-/*
- * stat() only the first segment of a path
- */
-static int prefix_stat(const char *path, apr_pool_t *pool)
-{
- const char *curpath = path;
- const char *root;
- const char *slash;
- char *statpath;
- apr_status_t rv;
-
- rv = apr_filepath_root(&root, &curpath, APR_FILEPATH_TRUENAME, pool);
-
- if (rv != APR_SUCCESS) {
- return 0;
- }
-
- /* let's recognize slashes only, the mod_rewrite semantics are opaque
- * enough.
- */
- if ((slash = ap_strchr_c(curpath, '/')) != NULL) {
- rv = apr_filepath_merge(&statpath, root,
- apr_pstrndup(pool, curpath,
- (apr_size_t)(slash - curpath)),
- APR_FILEPATH_NOTABOVEROOT |
- APR_FILEPATH_NOTRELATIVE, pool);
- }
- else {
- rv = apr_filepath_merge(&statpath, root, curpath,
- APR_FILEPATH_NOTABOVEROOT |
- APR_FILEPATH_NOTRELATIVE, pool);
- }
-
- if (rv == APR_SUCCESS) {
- apr_finfo_t sb;
-
- if (apr_stat(&sb, statpath, APR_FINFO_MIN, pool) == APR_SUCCESS) {
- return 1;
- }
- }
-
- return 0;
-}
-
-/*
- * substitute the prefix path 'match' in 'input' with 'subst' (RewriteBase)
- */
-static char *subst_prefix_path(request_rec *r, char *input, char *match,
- const char *subst)
-{
- apr_size_t len = strlen(match);
-
- if (len && match[len - 1] == '/') {
- --len;
- }
-
- if (!strncmp(input, match, len) && input[len++] == '/') {
- apr_size_t slen, outlen;
- char *output;
-
- rewritelog((r, 5, NULL, "strip matching prefix: %s -> %s", input,
- input+len));
-
- slen = strlen(subst);
- if (slen && subst[slen - 1] != '/') {
- ++slen;
- }
-
- outlen = strlen(input) + slen - len;
- output = apr_palloc(r->pool, outlen + 1); /* don't forget the \0 */
-
- memcpy(output, subst, slen);
- if (slen && !output[slen-1]) {
- output[slen-1] = '/';
- }
- memcpy(output+slen, input+len, outlen - slen);
- output[outlen] = '\0';
-
- rewritelog((r, 4, NULL, "add subst prefix: %s -> %s", input+len,
- output));
-
- return output;
- }
-
- /* prefix didn't match */
- return input;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | caching support
- * | |
- * +-------------------------------------------------------+
- */
-
-static void set_cache_value(const char *name, apr_time_t t, char *key,
- char *val)
-{
- cachedmap *map;
-
- if (cachep) {
-#if APR_HAS_THREADS
- apr_thread_mutex_lock(cachep->lock);
-#endif
- map = apr_hash_get(cachep->maps, name, APR_HASH_KEY_STRING);
-
- if (!map) {
- apr_pool_t *p;
-
- if (apr_pool_create(&p, cachep->pool) != APR_SUCCESS) {
-#if APR_HAS_THREADS
- apr_thread_mutex_unlock(cachep->lock);
-#endif
- return;
- }
-
- map = apr_palloc(cachep->pool, sizeof(cachedmap));
- map->pool = p;
- map->entries = apr_hash_make(map->pool);
- map->mtime = t;
-
- apr_hash_set(cachep->maps, name, APR_HASH_KEY_STRING, map);
- }
- else if (map->mtime != t) {
- apr_pool_clear(map->pool);
- map->entries = apr_hash_make(map->pool);
- map->mtime = t;
- }
-
- /* Now we should have a valid map->entries hash, where we
- * can store our value.
- *
- * We need to copy the key and the value into OUR pool,
- * so that we don't leave it during the r->pool cleanup.
- */
- apr_hash_set(map->entries,
- apr_pstrdup(map->pool, key), APR_HASH_KEY_STRING,
- apr_pstrdup(map->pool, val));
-
-#if APR_HAS_THREADS
- apr_thread_mutex_unlock(cachep->lock);
-#endif
- }
-
- return;
-}
-
-static char *get_cache_value(const char *name, apr_time_t t, char *key,
- apr_pool_t *p)
-{
- cachedmap *map;
- char *val = NULL;
-
- if (cachep) {
-#if APR_HAS_THREADS
- apr_thread_mutex_lock(cachep->lock);
-#endif
- map = apr_hash_get(cachep->maps, name, APR_HASH_KEY_STRING);
-
- if (map) {
- /* if this map is outdated, forget it. */
- if (map->mtime != t) {
- apr_pool_clear(map->pool);
- map->entries = apr_hash_make(map->pool);
- map->mtime = t;
- }
- else {
- val = apr_hash_get(map->entries, key, APR_HASH_KEY_STRING);
- if (val) {
- /* copy the cached value into the supplied pool,
- * where it belongs (r->pool usually)
- */
- val = apr_pstrdup(p, val);
- }
- }
- }
-
-#if APR_HAS_THREADS
- apr_thread_mutex_unlock(cachep->lock);
-#endif
- }
-
- return val;
-}
-
-static int init_cache(apr_pool_t *p)
-{
- cachep = apr_palloc(p, sizeof(cache));
- if (apr_pool_create(&cachep->pool, p) != APR_SUCCESS) {
- cachep = NULL; /* turns off cache */
- return 0;
- }
-
- cachep->maps = apr_hash_make(cachep->pool);
-#if APR_HAS_THREADS
- (void)apr_thread_mutex_create(&(cachep->lock), APR_THREAD_MUTEX_DEFAULT, p);
-#endif
-
- return 1;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Map Functions
- * | |
- * +-------------------------------------------------------+
- */
-
-/*
- * General Note: key is already a fresh string, created (expanded) just
- * for the purpose to be passed in here. So one can modify key itself.
- */
-
-static char *rewrite_mapfunc_toupper(request_rec *r, char *key)
-{
- char *p;
-
- for (p = key; *p; ++p) {
- *p = apr_toupper(*p);
- }
-
- return key;
-}
-
-static char *rewrite_mapfunc_tolower(request_rec *r, char *key)
-{
- char *p;
-
- for (p = key; *p; ++p) {
- *p = apr_tolower(*p);
- }
-
- return key;
-}
-
-static char *rewrite_mapfunc_escape(request_rec *r, char *key)
-{
- return ap_escape_uri(r->pool, key);
-}
-
-static char *rewrite_mapfunc_unescape(request_rec *r, char *key)
-{
- ap_unescape_url(key);
-
- return key;
-}
-
-static char *select_random_value_part(request_rec *r, char *value)
-{
- char *p = value;
- unsigned n = 1;
-
- /* count number of distinct values */
- while ((p = ap_strchr(p, '|')) != NULL) {
- ++n;
- ++p;
- }
-
- if (n > 1) {
- /* initialize random generator
- *
- * XXX: Probably this should be wrapped into a thread mutex,
- * shouldn't it? Is it worth the effort?
- */
- if (!rewrite_rand_init_done) {
- srand((unsigned)(getpid()));
- rewrite_rand_init_done = 1;
- }
-
- /* select a random subvalue */
- n = (int)(((double)(rand() % RAND_MAX) / RAND_MAX) * n + 1);
-
- /* extract it from the whole string */
- while (--n && (value = ap_strchr(value, '|')) != NULL) {
- ++value;
- }
-
- if (value) { /* should not be NULL, but ... */
- p = ap_strchr(value, '|');
- if (p) {
- *p = '\0';
- }
- }
- }
-
- return value;
-}
-
-/* child process code */
-static void rewrite_child_errfn(apr_pool_t *p, apr_status_t err,
- const char *desc)
-{
- ap_log_error(APLOG_MARK, APLOG_ERR, err, NULL, "%s", desc);
-}
-
-static apr_status_t rewritemap_program_child(apr_pool_t *p,
- const char *progname, char **argv,
- apr_file_t **fpout,
- apr_file_t **fpin)
-{
- apr_status_t rc;
- apr_procattr_t *procattr;
- apr_proc_t *procnew;
-
- if ( APR_SUCCESS == (rc=apr_procattr_create(&procattr, p))
- && APR_SUCCESS == (rc=apr_procattr_io_set(procattr, APR_FULL_BLOCK,
- APR_FULL_BLOCK, APR_NO_PIPE))
- && APR_SUCCESS == (rc=apr_procattr_dir_set(procattr,
- ap_make_dirstr_parent(p, argv[0])))
- && APR_SUCCESS == (rc=apr_procattr_cmdtype_set(procattr, APR_PROGRAM))
- && APR_SUCCESS == (rc=apr_procattr_child_errfn_set(procattr,
- rewrite_child_errfn))
- && APR_SUCCESS == (rc=apr_procattr_error_check_set(procattr, 1))) {
-
- procnew = apr_pcalloc(p, sizeof(*procnew));
- rc = apr_proc_create(procnew, argv[0], (const char **)argv, NULL,
- procattr, p);
-
- if (rc == APR_SUCCESS) {
- apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-
- if (fpin) {
- (*fpin) = procnew->in;
- }
-
- if (fpout) {
- (*fpout) = procnew->out;
- }
- }
- }
-
- return (rc);
-}
-
-static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p)
-{
- rewrite_server_conf *conf;
- apr_hash_index_t *hi;
- apr_status_t rc;
- int lock_warning_issued = 0;
-
- conf = ap_get_module_config(s->module_config, &rewrite_module);
-
- /* If the engine isn't turned on,
- * don't even try to do anything.
- */
- if (conf->state == ENGINE_DISABLED) {
- return APR_SUCCESS;
- }
-
- for (hi = apr_hash_first(p, conf->rewritemaps); hi; hi = apr_hash_next(hi)){
- apr_file_t *fpin = NULL;
- apr_file_t *fpout = NULL;
- rewritemap_entry *map;
- void *val;
-
- apr_hash_this(hi, NULL, NULL, &val);
- map = val;
-
- if (map->type != MAPTYPE_PRG) {
- continue;
- }
- if (!(map->argv[0]) || !*(map->argv[0]) || map->fpin || map->fpout) {
- continue;
- }
-
- if (!lock_warning_issued && (!lockname || !*lockname)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "mod_rewrite: Running external rewrite maps "
- "without defining a RewriteLock is DANGEROUS!");
- ++lock_warning_issued;
- }
-
- rc = rewritemap_program_child(p, map->argv[0], map->argv,
- &fpout, &fpin);
- if (rc != APR_SUCCESS || fpin == NULL || fpout == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
- "mod_rewrite: could not start RewriteMap "
- "program %s", map->checkfile);
- return rc;
- }
- map->fpin = fpin;
- map->fpout = fpout;
- }
-
- return APR_SUCCESS;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Lookup functions
- * | |
- * +-------------------------------------------------------+
- */
-
-static char *lookup_map_txtfile(request_rec *r, const char *file, char *key)
-{
- apr_file_t *fp = NULL;
- char line[REWRITE_MAX_TXT_MAP_LINE + 1]; /* +1 for \0 */
- char *value, *keylast;
-
- if (apr_file_open(&fp, file, APR_READ, APR_OS_DEFAULT,
- r->pool) != APR_SUCCESS) {
- return NULL;
- }
-
- keylast = key + strlen(key);
- value = NULL;
- while (apr_file_gets(line, sizeof(line), fp) == APR_SUCCESS) {
- char *p, *c;
-
- /* ignore comments and lines starting with whitespaces */
- if (*line == '#' || apr_isspace(*line)) {
- continue;
- }
-
- p = line;
- c = key;
- while (c < keylast && *p == *c && !apr_isspace(*p)) {
- ++p;
- ++c;
- }
-
- /* key doesn't match - ignore. */
- if (c != keylast || !apr_isspace(*p)) {
- continue;
- }
-
- /* jump to the value */
- while (*p && apr_isspace(*p)) {
- ++p;
- }
-
- /* no value? ignore */
- if (!*p) {
- continue;
- }
-
- /* extract the value and return. */
- c = p;
- while (*p && !apr_isspace(*p)) {
- ++p;
- }
- value = apr_pstrmemdup(r->pool, c, p - c);
- break;
- }
- apr_file_close(fp);
-
- return value;
-}
-
-static char *lookup_map_dbmfile(request_rec *r, const char *file,
- const char *dbmtype, char *key)
-{
- apr_dbm_t *dbmfp = NULL;
- apr_datum_t dbmkey;
- apr_datum_t dbmval;
- char *value;
-
- if (apr_dbm_open_ex(&dbmfp, dbmtype, file, APR_DBM_READONLY, APR_OS_DEFAULT,
- r->pool) != APR_SUCCESS) {
- return NULL;
- }
-
- dbmkey.dptr = key;
- dbmkey.dsize = strlen(key);
-
- if (apr_dbm_fetch(dbmfp, dbmkey, &dbmval) == APR_SUCCESS && dbmval.dptr) {
- value = apr_pstrmemdup(r->pool, dbmval.dptr, dbmval.dsize);
- }
- else {
- value = NULL;
- }
-
- apr_dbm_close(dbmfp);
-
- return value;
-}
-
-static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
- apr_file_t *fpout, char *key)
-{
- char *buf;
- char c;
- apr_size_t i, nbytes, combined_len = 0;
- apr_status_t rv;
- const char *eol = APR_EOL_STR;
- int eolc = 0, found_nl = 0;
- result_list *buflist = NULL, *curbuf = NULL;
-
-#ifndef NO_WRITEV
- struct iovec iova[2];
- apr_size_t niov;
-#endif
-
- /* when `RewriteEngine off' was used in the per-server
- * context then the rewritemap-programs were not spawned.
- * In this case using such a map (usually in per-dir context)
- * is useless because it is not available.
- *
- * newlines in the key leave bytes in the pipe and cause
- * bad things to happen (next map lookup will use the chars
- * after the \n instead of the new key etc etc - in other words,
- * the Rewritemap falls out of sync with the requests).
- */
- if (fpin == NULL || fpout == NULL || ap_strchr(key, '\n')) {
- return NULL;
- }
-
- /* take the lock */
- if (rewrite_mapr_lock_acquire) {
- rv = apr_global_mutex_lock(rewrite_mapr_lock_acquire);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "apr_global_mutex_lock(rewrite_mapr_lock_acquire) "
- "failed");
- return NULL; /* Maybe this should be fatal? */
- }
- }
-
- /* write out the request key */
-#ifdef NO_WRITEV
- nbytes = strlen(key);
- apr_file_write(fpin, key, &nbytes);
- nbytes = 1;
- apr_file_write(fpin, "\n", &nbytes);
-#else
- iova[0].iov_base = key;
- iova[0].iov_len = strlen(key);
- iova[1].iov_base = "\n";
- iova[1].iov_len = 1;
-
- niov = 2;
- apr_file_writev(fpin, iova, niov, &nbytes);
-#endif
-
- buf = apr_palloc(r->pool, REWRITE_PRG_MAP_BUF + 1);
-
- /* read in the response value */
- nbytes = 1;
- apr_file_read(fpout, &c, &nbytes);
- do {
- i = 0;
- while (nbytes == 1 && (i < REWRITE_PRG_MAP_BUF)) {
- if (c == eol[eolc]) {
- if (!eol[++eolc]) {
- /* remove eol from the buffer */
- --eolc;
- if (i < eolc) {
- curbuf->len -= eolc-i;
- i = 0;
- }
- else {
- i -= eolc;
- }
- ++found_nl;
- break;
- }
- }
-
- /* only partial (invalid) eol sequence -> reset the counter */
- else if (eolc) {
- eolc = 0;
- }
-
- /* catch binary mode, e.g. on Win32 */
- else if (c == '\n') {
- ++found_nl;
- break;
- }
-
- buf[i++] = c;
- apr_file_read(fpout, &c, &nbytes);
- }
-
- /* well, if there wasn't a newline yet, we need to read further */
- if (buflist || (nbytes == 1 && !found_nl)) {
- if (!buflist) {
- curbuf = buflist = apr_palloc(r->pool, sizeof(*buflist));
- }
- else if (i) {
- curbuf->next = apr_palloc(r->pool, sizeof(*buflist));
- curbuf = curbuf->next;
-
- }
- curbuf->next = NULL;
-
- if (i) {
- curbuf->string = buf;
- curbuf->len = i;
- combined_len += i;
- buf = apr_palloc(r->pool, REWRITE_PRG_MAP_BUF);
- }
-
- if (nbytes == 1 && !found_nl) {
- i = 0;
- continue;
- }
- }
-
- break;
- } while (1);
-
- /* concat the stuff */
- if (buflist) {
- char *p;
-
- p = buf = apr_palloc(r->pool, combined_len + 1); /* \0 */
- while (buflist) {
- if (buflist->len) {
- memcpy(p, buflist->string, buflist->len);
- p += buflist->len;
- }
- buflist = buflist->next;
- }
- *p = '\0';
- i = combined_len;
- }
- else {
- buf[i] = '\0';
- }
-
- /* give the lock back */
- if (rewrite_mapr_lock_acquire) {
- rv = apr_global_mutex_unlock(rewrite_mapr_lock_acquire);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "apr_global_mutex_unlock(rewrite_mapr_lock_acquire) "
- "failed");
- return NULL; /* Maybe this should be fatal? */
- }
- }
-
- /* catch the "failed" case */
- if (i == 4 && !strcasecmp(buf, "NULL")) {
- return NULL;
- }
-
- return buf;
-}
-
-/*
- * generic map lookup
- */
-static char *lookup_map(request_rec *r, char *name, char *key)
-{
- rewrite_server_conf *conf;
- rewritemap_entry *s;
- char *value;
- apr_finfo_t st;
- apr_status_t rv;
-
- /* get map configuration */
- conf = ap_get_module_config(r->server->module_config, &rewrite_module);
- s = apr_hash_get(conf->rewritemaps, name, APR_HASH_KEY_STRING);
-
- /* map doesn't exist */
- if (!s) {
- return NULL;
- }
-
- switch (s->type) {
- /*
- * Text file map (perhaps random)
- */
- case MAPTYPE_RND:
- case MAPTYPE_TXT:
- rv = apr_stat(&st, s->checkfile, APR_FINFO_MIN, r->pool);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "mod_rewrite: can't access text RewriteMap file %s",
- s->checkfile);
- rewritelog((r, 1, NULL,
- "can't open RewriteMap file, see error log"));
- return NULL;
- }
-
- value = get_cache_value(s->cachename, st.mtime, key, r->pool);
- if (!value) {
- rewritelog((r, 6, NULL,
- "cache lookup FAILED, forcing new map lookup"));
-
- value = lookup_map_txtfile(r, s->datafile, key);
- if (!value) {
- rewritelog((r, 5, NULL, "map lookup FAILED: map=%s[txt] key=%s",
- name, key));
- set_cache_value(s->cachename, st.mtime, key, "");
- return NULL;
- }
-
- rewritelog((r, 5, NULL,"map lookup OK: map=%s[txt] key=%s -> val=%s",
- name, key, value));
- set_cache_value(s->cachename, st.mtime, key, value);
- }
- else {
- rewritelog((r,5,NULL,"cache lookup OK: map=%s[txt] key=%s -> val=%s",
- name, key, value));
- }
-
- if (s->type == MAPTYPE_RND && *value) {
- value = select_random_value_part(r, value);
- rewritelog((r, 5, NULL, "randomly chosen the subvalue `%s'",value));
- }
-
- return *value ? value : NULL;
-
- /*
- * DBM file map
- */
- case MAPTYPE_DBM:
- rv = apr_stat(&st, s->checkfile, APR_FINFO_MIN, r->pool);
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "mod_rewrite: can't access DBM RewriteMap file %s",
- s->checkfile);
- rewritelog((r, 1, NULL,
- "can't open DBM RewriteMap file, see error log"));
- return NULL;
- }
-
- value = get_cache_value(s->cachename, st.mtime, key, r->pool);
- if (!value) {
- rewritelog((r, 6, NULL,
- "cache lookup FAILED, forcing new map lookup"));
-
- value = lookup_map_dbmfile(r, s->datafile, s->dbmtype, key);
- if (!value) {
- rewritelog((r, 5, NULL, "map lookup FAILED: map=%s[dbm] key=%s",
- name, key));
- set_cache_value(s->cachename, st.mtime, key, "");
- return NULL;
- }
-
- rewritelog((r, 5, NULL, "map lookup OK: map=%s[dbm] key=%s -> "
- "val=%s", name, key, value));
-
- set_cache_value(s->cachename, st.mtime, key, value);
- return value;
- }
-
- rewritelog((r, 5, NULL, "cache lookup OK: map=%s[dbm] key=%s -> val=%s",
- name, key, value));
- return *value ? value : NULL;
-
- /*
- * Program file map
- */
- case MAPTYPE_PRG:
- value = lookup_map_program(r, s->fpin, s->fpout, key);
- if (!value) {
- rewritelog((r, 5,NULL,"map lookup FAILED: map=%s key=%s", name,
- key));
- return NULL;
- }
-
- rewritelog((r, 5, NULL, "map lookup OK: map=%s key=%s -> val=%s",
- name, key, value));
- return value;
-
- /*
- * Internal Map
- */
- case MAPTYPE_INT:
- value = s->func(r, key);
- if (!value) {
- rewritelog((r, 5,NULL,"map lookup FAILED: map=%s key=%s", name,
- key));
- return NULL;
- }
-
- rewritelog((r, 5, NULL, "map lookup OK: map=%s key=%s -> val=%s",
- name, key, value));
- return value;
- }
-
- return NULL;
-}
-
-/*
- * lookup a HTTP header and set VARY note
- */
-static const char *lookup_header(const char *name, rewrite_ctx *ctx)
-{
- const char *val = apr_table_get(ctx->r->headers_in, name);
-
- if (val) {
- ctx->vary_this = ctx->vary_this
- ? apr_pstrcat(ctx->r->pool, ctx->vary_this, ", ",
- name, NULL)
- : apr_pstrdup(ctx->r->pool, name);
- }
-
- return val;
-}
-
-/*
- * lookahead helper function
- * Determine the correct URI path in perdir context
- */
-static APR_INLINE const char *la_u(rewrite_ctx *ctx)
-{
- rewrite_perdir_conf *conf;
-
- if (*ctx->uri == '/') {
- return ctx->uri;
- }
-
- conf = ap_get_module_config(ctx->r->per_dir_config, &rewrite_module);
-
- return apr_pstrcat(ctx->r->pool, conf->baseurl
- ? conf->baseurl : conf->directory,
- ctx->uri, NULL);
-}
-
-/*
- * generic variable lookup
- */
-static char *lookup_variable(char *var, rewrite_ctx *ctx)
-{
- const char *result;
- request_rec *r = ctx->r;
- apr_size_t varlen = strlen(var);
-
- /* fast exit */
- if (varlen < 4) {
- return apr_pstrdup(r->pool, "");
- }
-
- result = NULL;
-
- /* fast tests for variable length variables (sic) first */
- if (var[3] == ':') {
- if (var[4] && !strncasecmp(var, "ENV", 3)) {
- var += 4;
- result = apr_table_get(r->notes, var);
-
- if (!result) {
- result = apr_table_get(r->subprocess_env, var);
- }
- if (!result) {
- result = getenv(var);
- }
- }
- else if (var[4] && !strncasecmp(var, "SSL", 3) && rewrite_ssl_lookup) {
- result = rewrite_ssl_lookup(r->pool, r->server, r->connection, r,
- var + 4);
- }
- }
- else if (var[4] == ':') {
- if (var[5]) {
- request_rec *rr;
- const char *path;
-
- if (!strncasecmp(var, "HTTP", 4)) {
- result = lookup_header(var+5, ctx);
- }
- else if (!strncasecmp(var, "LA-U", 4)) {
- if (ctx->uri && subreq_ok(r)) {
- path = ctx->perdir ? la_u(ctx) : ctx->uri;
- rr = ap_sub_req_lookup_uri(path, r, NULL);
- ctx->r = rr;
- result = apr_pstrdup(r->pool, lookup_variable(var+5, ctx));
- ctx->r = r;
- ap_destroy_sub_req(rr);
-
- rewritelog((r, 5, ctx->perdir, "lookahead: path=%s var=%s "
- "-> val=%s", path, var+5, result));
-
- return (char *)result;
- }
- }
- else if (!strncasecmp(var, "LA-F", 4)) {
- if (ctx->uri && subreq_ok(r)) {
- path = ctx->uri;
- if (ctx->perdir && *path == '/') {
- /* sigh, the user wants a file based subrequest, but
- * we can't do one, since we don't know what the file
- * path is! In this case behave like LA-U.
- */
- rr = ap_sub_req_lookup_uri(path, r, NULL);
- }
- else {
- if (ctx->perdir) {
- rewrite_perdir_conf *conf;
-
- conf = ap_get_module_config(r->per_dir_config,
- &rewrite_module);
-
- path = apr_pstrcat(r->pool, conf->directory, path,
- NULL);
- }
-
- rr = ap_sub_req_lookup_file(path, r, NULL);
- }
-
- ctx->r = rr;
- result = apr_pstrdup(r->pool, lookup_variable(var+5, ctx));
- ctx->r = r;
- ap_destroy_sub_req(rr);
-
- rewritelog((r, 5, ctx->perdir, "lookahead: path=%s var=%s "
- "-> val=%s", path, var+5, result));
-
- return (char *)result;
- }
- }
- }
- }
-
- /* well, do it the hard way */
- else {
- char *p;
- apr_time_exp_t tm;
-
- /* can't do this above, because of the getenv call */
- for (p = var; *p; ++p) {
- *p = apr_toupper(*p);
- }
-
- switch (varlen) {
- case 4:
- if (!strcmp(var, "TIME")) {
- apr_time_exp_lt(&tm, apr_time_now());
- result = apr_psprintf(r->pool, "%04d%02d%02d%02d%02d%02d",
- tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
- tm.tm_hour, tm.tm_min, tm.tm_sec);
- rewritelog((r, 1, ctx->perdir, "RESULT='%s'", result));
- return (char *)result;
- }
- break;
-
- case 5:
- if (!strcmp(var, "HTTPS")) {
- int flag = rewrite_is_https && rewrite_is_https(r->connection);
- return apr_pstrdup(r->pool, flag ? "on" : "off");
- }
- break;
-
- case 8:
- switch (var[6]) {
- case 'A':
- if (!strcmp(var, "TIME_DAY")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%02d", tm.tm_mday);
- }
- break;
-
- case 'E':
- if (!strcmp(var, "TIME_SEC")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%02d", tm.tm_sec);
- }
- break;
-
- case 'I':
- if (!strcmp(var, "TIME_MIN")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%02d", tm.tm_min);
- }
- break;
-
- case 'O':
- if (!strcmp(var, "TIME_MON")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%02d", tm.tm_mon+1);
- }
- break;
- }
- break;
-
- case 9:
- switch (var[7]) {
- case 'A':
- if (var[8] == 'Y' && !strcmp(var, "TIME_WDAY")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%d", tm.tm_wday);
- }
- else if (!strcmp(var, "TIME_YEAR")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%04d", tm.tm_year+1900);
- }
- break;
-
- case 'E':
- if (!strcmp(var, "IS_SUBREQ")) {
- result = (r->main ? "true" : "false");
- }
- break;
-
- case 'F':
- if (!strcmp(var, "PATH_INFO")) {
- result = r->path_info;
- }
- break;
-
- case 'P':
- if (!strcmp(var, "AUTH_TYPE")) {
- result = r->ap_auth_type;
- }
- break;
-
- case 'S':
- if (!strcmp(var, "HTTP_HOST")) {
- result = lookup_header("Host", ctx);
- }
- break;
-
- case 'U':
- if (!strcmp(var, "TIME_HOUR")) {
- apr_time_exp_lt(&tm, apr_time_now());
- return apr_psprintf(r->pool, "%02d", tm.tm_hour);
- }
- break;
- }
- break;
-
- case 11:
- switch (var[8]) {
- case 'A':
- if (!strcmp(var, "SERVER_NAME")) {
- result = ap_get_server_name(r);
- }
- break;
-
- case 'D':
- if (*var == 'R' && !strcmp(var, "REMOTE_ADDR")) {
- result = r->connection->remote_ip;
- }
- else if (!strcmp(var, "SERVER_ADDR")) {
- result = r->connection->local_ip;
- }
- break;
-
- case 'E':
- if (*var == 'H' && !strcmp(var, "HTTP_ACCEPT")) {
- result = lookup_header("Accept", ctx);
- }
- else if (!strcmp(var, "THE_REQUEST")) {
- result = r->the_request;
- }
- break;
-
- case 'I':
- if (!strcmp(var, "API_VERSION")) {
- return apr_psprintf(r->pool, "%d:%d",
- MODULE_MAGIC_NUMBER_MAJOR,
- MODULE_MAGIC_NUMBER_MINOR);
- }
- break;
-
- case 'K':
- if (!strcmp(var, "HTTP_COOKIE")) {
- result = lookup_header("Cookie", ctx);
- }
- break;
-
- case 'O':
- if (*var == 'S' && !strcmp(var, "SERVER_PORT")) {
- return apr_psprintf(r->pool, "%u", ap_get_server_port(r));
- }
- else if (var[7] == 'H' && !strcmp(var, "REMOTE_HOST")) {
- result = ap_get_remote_host(r->connection,r->per_dir_config,
- REMOTE_NAME, NULL);
- }
- else if (!strcmp(var, "REMOTE_PORT")) {
- return apr_itoa(r->pool, r->connection->remote_addr->port);
- }
- break;
-
- case 'S':
- if (*var == 'R' && !strcmp(var, "REMOTE_USER")) {
- result = r->user;
- }
- else if (!strcmp(var, "SCRIPT_USER")) {
- result = "<unknown>";
- if (r->finfo.valid & APR_FINFO_USER) {
- apr_uid_name_get((char **)&result, r->finfo.user,
- r->pool);
- }
- }
- break;
-
- case 'U':
- if (!strcmp(var, "REQUEST_URI")) {
- result = r->uri;
- }
- break;
- }
- break;
-
- case 12:
- switch (var[3]) {
- case 'I':
- if (!strcmp(var, "SCRIPT_GROUP")) {
- result = "<unknown>";
- if (r->finfo.valid & APR_FINFO_GROUP) {
- apr_gid_name_get((char **)&result, r->finfo.group,
- r->pool);
- }
- }
- break;
-
- case 'O':
- if (!strcmp(var, "REMOTE_IDENT")) {
- result = ap_get_remote_logname(r);
- }
- break;
-
- case 'P':
- if (!strcmp(var, "HTTP_REFERER")) {
- result = lookup_header("Referer", ctx);
- }
- break;
-
- case 'R':
- if (!strcmp(var, "QUERY_STRING")) {
- result = r->args;
- }
- break;
-
- case 'V':
- if (!strcmp(var, "SERVER_ADMIN")) {
- result = r->server->server_admin;
- }
- break;
- }
- break;
-
- case 13:
- if (!strcmp(var, "DOCUMENT_ROOT")) {
- result = ap_document_root(r);
- }
- break;
-
- case 14:
- if (*var == 'H' && !strcmp(var, "HTTP_FORWARDED")) {
- result = lookup_header("Forwarded", ctx);
- }
- else if (!strcmp(var, "REQUEST_METHOD")) {
- result = r->method;
- }
- break;
-
- case 15:
- switch (var[7]) {
- case 'E':
- if (!strcmp(var, "HTTP_USER_AGENT")) {
- result = lookup_header("User-Agent", ctx);
- }
- break;
-
- case 'F':
- if (!strcmp(var, "SCRIPT_FILENAME")) {
- result = r->filename; /* same as request_filename (16) */
- }
- break;
-
- case 'P':
- if (!strcmp(var, "SERVER_PROTOCOL")) {
- result = r->protocol;
- }
- break;
-
- case 'S':
- if (!strcmp(var, "SERVER_SOFTWARE")) {
- result = ap_get_server_version();
- }
- break;
- }
- break;
-
- case 16:
- if (!strcmp(var, "REQUEST_FILENAME")) {
- result = r->filename; /* same as script_filename (15) */
- }
- break;
-
- case 21:
- if (!strcmp(var, "HTTP_PROXY_CONNECTION")) {
- result = lookup_header("Proxy-Connection", ctx);
- }
- break;
- }
- }
-
- return apr_pstrdup(r->pool, result ? result : "");
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Expansion functions
- * | |
- * +-------------------------------------------------------+
- */
-
-/*
- * Bracketed expression handling
- * s points after the opening bracket
- */
-static APR_INLINE char *find_closing_curly(char *s)
-{
- unsigned depth;
-
- for (depth = 1; *s; ++s) {
- if (*s == RIGHT_CURLY && --depth == 0) {
- return s;
- }
- else if (*s == LEFT_CURLY) {
- ++depth;
- }
- }
-
- return NULL;
-}
-
-static APR_INLINE char *find_char_in_curlies(char *s, int c)
-{
- unsigned depth;
-
- for (depth = 1; *s; ++s) {
- if (*s == c && depth == 1) {
- return s;
- }
- else if (*s == RIGHT_CURLY && --depth == 0) {
- return NULL;
- }
- else if (*s == LEFT_CURLY) {
- ++depth;
- }
- }
-
- return NULL;
-}
-
-/* perform all the expansions on the input string
- * putting the result into a new string
- *
- * for security reasons this expansion must be performed in a
- * single pass, otherwise an attacker can arrange for the result
- * of an earlier expansion to include expansion specifiers that
- * are interpreted by a later expansion, producing results that
- * were not intended by the administrator.
- */
-static char *do_expand(char *input, rewrite_ctx *ctx)
-{
- result_list *result, *current;
- result_list sresult[SMALL_EXPANSION];
- unsigned spc = 0;
- apr_size_t span, inputlen, outlen;
- char *p, *c;
- apr_pool_t *pool = ctx->r->pool;
-
- span = strcspn(input, "\\$%");
- inputlen = strlen(input);
-
- /* fast exit */
- if (inputlen == span) {
- return apr_pstrdup(pool, input);
- }
-
- /* well, actually something to do */
- result = current = &(sresult[spc++]);
-
- p = input + span;
- current->next = NULL;
- current->string = input;
- current->len = span;
- outlen = span;
-
- /* loop for specials */
- do {
- /* prepare next entry */
- if (current->len) {
- current->next = (spc < SMALL_EXPANSION)
- ? &(sresult[spc++])
- : (result_list *)apr_palloc(pool,
- sizeof(result_list));
- current = current->next;
- current->next = NULL;
- current->len = 0;
- }
-
- /* escaped character */
- if (*p == '\\') {
- current->len = 1;
- ++outlen;
- if (!p[1]) {
- current->string = p;
- break;
- }
- else {
- current->string = ++p;
- ++p;
- }
- }
-
- /* variable or map lookup */
- else if (p[1] == '{') {
- char *endp;
-
- endp = find_closing_curly(p+2);
- if (!endp) {
- current->len = 2;
- current->string = p;
- outlen += 2;
- p += 2;
- }
-
- /* variable lookup */
- else if (*p == '%') {
- p = lookup_variable(apr_pstrmemdup(pool, p+2, endp-p-2), ctx);
-
- span = strlen(p);
- current->len = span;
- current->string = p;
- outlen += span;
- p = endp + 1;
- }
-
- /* map lookup */
- else { /* *p == '$' */
- char *key;
-
- /*
- * To make rewrite maps useful, the lookup key and
- * default values must be expanded, so we make
- * recursive calls to do the work. For security
- * reasons we must never expand a string that includes
- * verbatim data from the network. The recursion here
- * isn't a problem because the result of expansion is
- * only passed to lookup_map() so it cannot be
- * re-expanded, only re-looked-up. Another way of
- * looking at it is that the recursion is entirely
- * driven by the syntax of the nested curly brackets.
- */
-
- key = find_char_in_curlies(p+2, ':');
- if (!key) {
- current->len = 2;
- current->string = p;
- outlen += 2;
- p += 2;
- }
- else {
- char *map, *dflt;
-
- map = apr_pstrmemdup(pool, p+2, endp-p-2);
- key = map + (key-p-2);
- *key++ = '\0';
- dflt = find_char_in_curlies(key, '|');
- if (dflt) {
- *dflt++ = '\0';
- }
-
- /* reuse of key variable as result */
- key = lookup_map(ctx->r, map, do_expand(key, ctx));
-
- if (!key && dflt && *dflt) {
- key = do_expand(dflt, ctx);
- }
-
- if (key) {
- span = strlen(key);
- current->len = span;
- current->string = key;
- outlen += span;
- }
-
- p = endp + 1;
- }
- }
- }
-
- /* backreference */
- else if (apr_isdigit(p[1])) {
- int n = p[1] - '0';
- backrefinfo *bri = (*p == '$') ? &ctx->briRR : &ctx->briRC;
-
- /* see ap_pregsub() in server/util.c */
- if (bri->source && n < AP_MAX_REG_MATCH
- && bri->regmatch[n].rm_eo > bri->regmatch[n].rm_so) {
- span = bri->regmatch[n].rm_eo - bri->regmatch[n].rm_so;
-
- current->len = span;
- current->string = bri->source + bri->regmatch[n].rm_so;
- outlen += span;
- }
-
- p += 2;
- }
-
- /* not for us, just copy it */
- else {
- current->len = 1;
- current->string = p++;
- ++outlen;
- }
-
- /* check the remainder */
- if (*p && (span = strcspn(p, "\\$%")) > 0) {
- if (current->len) {
- current->next = (spc < SMALL_EXPANSION)
- ? &(sresult[spc++])
- : (result_list *)apr_palloc(pool,
- sizeof(result_list));
- current = current->next;
- current->next = NULL;
- }
-
- current->len = span;
- current->string = p;
- p += span;
- outlen += span;
- }
-
- } while (p < input+inputlen);
-
- /* assemble result */
- c = p = apr_palloc(pool, outlen + 1); /* don't forget the \0 */
- do {
- if (result->len) {
- ap_assert(c+result->len <= p+outlen); /* XXX: can be removed after
- * extensive testing and
- * review
- */
- memcpy(c, result->string, result->len);
- c += result->len;
- }
- result = result->next;
- } while (result);
-
- p[outlen] = '\0';
-
- return p;
-}
-
-/*
- * perform all the expansions on the environment variables
- */
-static void do_expand_env(data_item *env, rewrite_ctx *ctx)
-{
- char *name, *val;
-
- while (env) {
- name = do_expand(env->data, ctx);
- if ((val = ap_strchr(name, ':')) != NULL) {
- *val++ = '\0';
-
- apr_table_set(ctx->r->subprocess_env, name, val);
- rewritelog((ctx->r, 5, NULL, "setting env variable '%s' to '%s'",
- name, val));
- }
-
- env = env->next;
- }
-
- return;
-}
-
-/*
- * perform all the expansions on the cookies
- *
- * TODO: use cached time similar to how logging does it
- */
-static void add_cookie(request_rec *r, char *s)
-{
- char *var;
- char *val;
- char *domain;
- char *expires;
- char *path;
-
- char *tok_cntx;
- char *cookie;
-
- var = apr_strtok(s, ":", &tok_cntx);
- val = apr_strtok(NULL, ":", &tok_cntx);
- domain = apr_strtok(NULL, ":", &tok_cntx);
-
- if (var && val && domain) {
- request_rec *rmain = r;
- char *notename;
- void *data;
-
- while (rmain->main) {
- rmain = rmain->main;
- }
-
- notename = apr_pstrcat(rmain->pool, var, "_rewrite", NULL);
- apr_pool_userdata_get(&data, notename, rmain->pool);
- if (!data) {
- char *exp_time = NULL;
-
- expires = apr_strtok(NULL, ":", &tok_cntx);
- path = expires ? apr_strtok(NULL, ":", &tok_cntx) : NULL;
-
- if (expires) {
- apr_time_exp_t tms;
- apr_time_exp_gmt(&tms, r->request_time
- + apr_time_from_sec((60 * atol(expires))));
- exp_time = apr_psprintf(r->pool, "%s, %.2d-%s-%.4d "
- "%.2d:%.2d:%.2d GMT",
- apr_day_snames[tms.tm_wday],
- tms.tm_mday,
- apr_month_snames[tms.tm_mon],
- tms.tm_year+1900,
- tms.tm_hour, tms.tm_min, tms.tm_sec);
- }
-
- cookie = apr_pstrcat(rmain->pool,
- var, "=", val,
- "; path=", path ? path : "/",
- "; domain=", domain,
- expires ? "; expires=" : NULL,
- expires ? exp_time : NULL,
- NULL);
-
- apr_table_addn(rmain->err_headers_out, "Set-Cookie", cookie);
- apr_pool_userdata_set("set", notename, NULL, rmain->pool);
- rewritelog((rmain, 5, NULL, "setting cookie '%s'", cookie));
- }
- else {
- rewritelog((rmain, 5, NULL, "skipping already set cookie '%s'",
- var));
- }
- }
-
- return;
-}
-
-static void do_expand_cookie(data_item *cookie, rewrite_ctx *ctx)
-{
- while (cookie) {
- add_cookie(ctx->r, do_expand(cookie->data, ctx));
- cookie = cookie->next;
- }
-
- return;
-}
-
-#if APR_HAS_USER
-/*
- * Expand tilde-paths (/~user) through Unix /etc/passwd
- * database information (or other OS-specific database)
- */
-static char *expand_tildepaths(request_rec *r, char *uri)
-{
- if (uri && *uri == '/' && uri[1] == '~') {
- char *p, *user;
-
- p = user = uri + 2;
- while (*p && *p != '/') {
- ++p;
- }
-
- if (p > user) {
- char *homedir;
-
- user = apr_pstrmemdup(r->pool, user, p-user);
- if (apr_uid_homepath_get(&homedir, user, r->pool) == APR_SUCCESS) {
- if (*p) {
- /* reuse of user variable */
- user = homedir + strlen(homedir) - 1;
- if (user >= homedir && *user == '/') {
- *user = '\0';
- }
-
- return apr_pstrcat(r->pool, homedir, p, NULL);
- }
- else {
- return homedir;
- }
- }
- }
- }
-
- return uri;
-}
-#endif /* if APR_HAS_USER */
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | rewriting lockfile support
- * | |
- * +-------------------------------------------------------+
- */
-
-static apr_status_t rewritelock_create(server_rec *s, apr_pool_t *p)
-{
- apr_status_t rc;
-
- /* only operate if a lockfile is used */
- if (lockname == NULL || *(lockname) == '\0') {
- return APR_SUCCESS;
- }
-
- /* create the lockfile */
- rc = apr_global_mutex_create(&rewrite_mapr_lock_acquire, lockname,
- APR_LOCK_DEFAULT, p);
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s,
- "mod_rewrite: Parent could not create RewriteLock "
- "file %s", lockname);
- return rc;
- }
-
-#ifdef MOD_REWRITE_SET_MUTEX_PERMS
- rc = unixd_set_global_mutex_perms(rewrite_mapr_lock_acquire);
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s,
- "mod_rewrite: Parent could not set permissions "
- "on RewriteLock; check User and Group directives");
- return rc;
- }
-#endif
-
- return APR_SUCCESS;
-}
-
-static apr_status_t rewritelock_remove(void *data)
-{
- /* only operate if a lockfile is used */
- if (lockname == NULL || *(lockname) == '\0') {
- return APR_SUCCESS;
- }
-
- /* destroy the rewritelock */
- apr_global_mutex_destroy (rewrite_mapr_lock_acquire);
- rewrite_mapr_lock_acquire = NULL;
- lockname = NULL;
- return(0);
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | configuration directive handling
- * | |
- * +-------------------------------------------------------+
- */
-
-/*
- * own command line parser for RewriteRule and RewriteCond,
- * which doesn't have the '\\' problem.
- * (returns true on error)
- *
- * XXX: what an inclined parser. Seems we have to leave it so
- * for backwards compat. *sigh*
- */
-static int parseargline(char *str, char **a1, char **a2, char **a3)
-{
- char quote;
-
- while (apr_isspace(*str)) {
- ++str;
- }
-
- /*
- * determine first argument
- */
- quote = (*str == '"' || *str == '\'') ? *str++ : '\0';
- *a1 = str;
-
- for (; *str; ++str) {
- if ((apr_isspace(*str) && !quote) || (*str == quote)) {
- break;
- }
- if (*str == '\\' && apr_isspace(str[1])) {
- ++str;
- continue;
- }
- }
-
- if (!*str) {
- return 1;
- }
- *str++ = '\0';
-
- while (apr_isspace(*str)) {
- ++str;
- }
-
- /*
- * determine second argument
- */
- quote = (*str == '"' || *str == '\'') ? *str++ : '\0';
- *a2 = str;
-
- for (; *str; ++str) {
- if ((apr_isspace(*str) && !quote) || (*str == quote)) {
- break;
- }
- if (*str == '\\' && apr_isspace(str[1])) {
- ++str;
- continue;
- }
- }
-
- if (!*str) {
- *a3 = NULL; /* 3rd argument is optional */
- return 0;
- }
- *str++ = '\0';
-
- while (apr_isspace(*str)) {
- ++str;
- }
-
- if (!*str) {
- *a3 = NULL; /* 3rd argument is still optional */
- return 0;
- }
-
- /*
- * determine third argument
- */
- quote = (*str == '"' || *str == '\'') ? *str++ : '\0';
- *a3 = str;
- for (; *str; ++str) {
- if ((apr_isspace(*str) && !quote) || (*str == quote)) {
- break;
- }
- if (*str == '\\' && apr_isspace(str[1])) {
- ++str;
- continue;
- }
- }
- *str = '\0';
-
- return 0;
-}
-
-static void *config_server_create(apr_pool_t *p, server_rec *s)
-{
- rewrite_server_conf *a;
-
- a = (rewrite_server_conf *)apr_pcalloc(p, sizeof(rewrite_server_conf));
-
- a->state = ENGINE_DISABLED;
- a->options = OPTION_NONE;
-#ifndef REWRITELOG_DISABLED
- a->rewritelogfile = NULL;
- a->rewritelogfp = NULL;
- a->rewriteloglevel = 0;
-#endif
- a->rewritemaps = apr_hash_make(p);
- a->rewriteconds = apr_array_make(p, 2, sizeof(rewritecond_entry));
- a->rewriterules = apr_array_make(p, 2, sizeof(rewriterule_entry));
- a->server = s;
- a->redirect_limit = 0; /* unset (use default) */
-
- return (void *)a;
-}
-
-static void *config_server_merge(apr_pool_t *p, void *basev, void *overridesv)
-{
- rewrite_server_conf *a, *base, *overrides;
-
- a = (rewrite_server_conf *)apr_pcalloc(p,
- sizeof(rewrite_server_conf));
- base = (rewrite_server_conf *)basev;
- overrides = (rewrite_server_conf *)overridesv;
-
- a->state = overrides->state;
- a->options = overrides->options;
- a->server = overrides->server;
- a->redirect_limit = overrides->redirect_limit
- ? overrides->redirect_limit
- : base->redirect_limit;
-
- if (a->options & OPTION_INHERIT) {
- /*
- * local directives override
- * and anything else is inherited
- */
-#ifndef REWRITELOG_DISABLED
- a->rewriteloglevel = overrides->rewriteloglevel != 0
- ? overrides->rewriteloglevel
- : base->rewriteloglevel;
- a->rewritelogfile = overrides->rewritelogfile != NULL
- ? overrides->rewritelogfile
- : base->rewritelogfile;
- a->rewritelogfp = overrides->rewritelogfp != NULL
- ? overrides->rewritelogfp
- : base->rewritelogfp;
-#endif
- a->rewritemaps = apr_hash_overlay(p, overrides->rewritemaps,
- base->rewritemaps);
- a->rewriteconds = apr_array_append(p, overrides->rewriteconds,
- base->rewriteconds);
- a->rewriterules = apr_array_append(p, overrides->rewriterules,
- base->rewriterules);
- }
- else {
- /*
- * local directives override
- * and anything else gets defaults
- */
-#ifndef REWRITELOG_DISABLED
- a->rewriteloglevel = overrides->rewriteloglevel;
- a->rewritelogfile = overrides->rewritelogfile;
- a->rewritelogfp = overrides->rewritelogfp;
-#endif
- a->rewritemaps = overrides->rewritemaps;
- a->rewriteconds = overrides->rewriteconds;
- a->rewriterules = overrides->rewriterules;
- }
-
- return (void *)a;
-}
-
-static void *config_perdir_create(apr_pool_t *p, char *path)
-{
- rewrite_perdir_conf *a;
-
- a = (rewrite_perdir_conf *)apr_pcalloc(p, sizeof(rewrite_perdir_conf));
-
- a->state = ENGINE_DISABLED;
- a->options = OPTION_NONE;
- a->baseurl = NULL;
- a->rewriteconds = apr_array_make(p, 2, sizeof(rewritecond_entry));
- a->rewriterules = apr_array_make(p, 2, sizeof(rewriterule_entry));
- a->redirect_limit = 0; /* unset (use server config) */
-
- if (path == NULL) {
- a->directory = NULL;
- }
- else {
- /* make sure it has a trailing slash */
- if (path[strlen(path)-1] == '/') {
- a->directory = apr_pstrdup(p, path);
- }
- else {
- a->directory = apr_pstrcat(p, path, "/", NULL);
- }
- }
-
- return (void *)a;
-}
-
-static void *config_perdir_merge(apr_pool_t *p, void *basev, void *overridesv)
-{
- rewrite_perdir_conf *a, *base, *overrides;
-
- a = (rewrite_perdir_conf *)apr_pcalloc(p,
- sizeof(rewrite_perdir_conf));
- base = (rewrite_perdir_conf *)basev;
- overrides = (rewrite_perdir_conf *)overridesv;
-
- a->state = overrides->state;
- a->options = overrides->options;
- a->directory = overrides->directory;
- a->baseurl = overrides->baseurl;
- a->redirect_limit = overrides->redirect_limit
- ? overrides->redirect_limit
- : base->redirect_limit;
-
- if (a->options & OPTION_INHERIT) {
- a->rewriteconds = apr_array_append(p, overrides->rewriteconds,
- base->rewriteconds);
- a->rewriterules = apr_array_append(p, overrides->rewriterules,
- base->rewriterules);
- }
- else {
- a->rewriteconds = overrides->rewriteconds;
- a->rewriterules = overrides->rewriterules;
- }
-
- return (void *)a;
-}
-
-static const char *cmd_rewriteengine(cmd_parms *cmd,
- void *in_dconf, int flag)
-{
- rewrite_perdir_conf *dconf = in_dconf;
- rewrite_server_conf *sconf;
-
- sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
- if (cmd->path == NULL) { /* is server command */
- sconf->state = (flag ? ENGINE_ENABLED : ENGINE_DISABLED);
- }
- else /* is per-directory command */ {
- dconf->state = (flag ? ENGINE_ENABLED : ENGINE_DISABLED);
- }
-
- return NULL;
-}
-
-static const char *cmd_rewriteoptions(cmd_parms *cmd,
- void *in_dconf, const char *option)
-{
- int options = 0, limit = 0;
- char *w;
-
- while (*option) {
- w = ap_getword_conf(cmd->pool, &option);
-
- if (!strcasecmp(w, "inherit")) {
- options |= OPTION_INHERIT;
- }
- else if (!strncasecmp(w, "MaxRedirects=", 13)) {
- limit = atoi(&w[13]);
- if (limit <= 0) {
- return "RewriteOptions: MaxRedirects takes a number greater "
- "than zero.";
- }
- }
- else if (!strcasecmp(w, "MaxRedirects")) { /* be nice */
- return "RewriteOptions: MaxRedirects has the format MaxRedirects"
- "=n.";
- }
- else {
- return apr_pstrcat(cmd->pool, "RewriteOptions: unknown option '",
- w, "'", NULL);
- }
- }
-
- /* put it into the appropriate config */
- if (cmd->path == NULL) { /* is server command */
- rewrite_server_conf *conf =
- ap_get_module_config(cmd->server->module_config,
- &rewrite_module);
-
- conf->options |= options;
- conf->redirect_limit = limit;
- }
- else { /* is per-directory command */
- rewrite_perdir_conf *conf = in_dconf;
-
- conf->options |= options;
- conf->redirect_limit = limit;
- }
-
- return NULL;
-}
-
-#ifndef REWRITELOG_DISABLED
-static const char *cmd_rewritelog(cmd_parms *cmd, void *dconf, const char *a1)
-{
- rewrite_server_conf *sconf;
-
- sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
- sconf->rewritelogfile = a1;
-
- return NULL;
-}
-
-static const char *cmd_rewriteloglevel(cmd_parms *cmd, void *dconf,
- const char *a1)
-{
- rewrite_server_conf *sconf;
-
- sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
- sconf->rewriteloglevel = atoi(a1);
-
- return NULL;
-}
-#endif /* rewritelog */
-
-static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
- const char *a2)
-{
- rewrite_server_conf *sconf;
- rewritemap_entry *newmap;
- apr_finfo_t st;
- const char *fname;
-
- sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
- newmap = apr_palloc(cmd->pool, sizeof(rewritemap_entry));
- newmap->func = NULL;
-
- if (strncasecmp(a2, "txt:", 4) == 0) {
- if ((fname = ap_server_root_relative(cmd->pool, a2+4)) == NULL) {
- return apr_pstrcat(cmd->pool, "RewriteMap: bad path to txt map: ",
- a2+4, NULL);
- }
-
- newmap->type = MAPTYPE_TXT;
- newmap->datafile = fname;
- newmap->checkfile = fname;
- newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
- (void *)cmd->server, a1);
- }
- else if (strncasecmp(a2, "rnd:", 4) == 0) {
- if ((fname = ap_server_root_relative(cmd->pool, a2+4)) == NULL) {
- return apr_pstrcat(cmd->pool, "RewriteMap: bad path to rnd map: ",
- a2+4, NULL);
- }
-
- newmap->type = MAPTYPE_RND;
- newmap->datafile = fname;
- newmap->checkfile = fname;
- newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
- (void *)cmd->server, a1);
- }
- else if (strncasecmp(a2, "dbm", 3) == 0) {
- const char *ignored_fname;
- apr_status_t rv;
-
- newmap->type = MAPTYPE_DBM;
- fname = NULL;
- newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
- (void *)cmd->server, a1);
-
- if (a2[3] == ':') {
- newmap->dbmtype = "default";
- fname = a2+4;
- }
- else if (a2[3] == '=') {
- const char *colon = ap_strchr_c(a2 + 4, ':');
-
- if (colon) {
- newmap->dbmtype = apr_pstrndup(cmd->pool, a2 + 4,
- colon - (a2 + 3) - 1);
- fname = colon + 1;
- }
- }
-
- if (!fname) {
- return apr_pstrcat(cmd->pool, "RewriteMap: bad map:",
- a2, NULL);
- }
-
- if ((newmap->datafile = ap_server_root_relative(cmd->pool,
- fname)) == NULL) {
- return apr_pstrcat(cmd->pool, "RewriteMap: bad path to dbm map: ",
- fname, NULL);
- }
-
- rv = apr_dbm_get_usednames_ex(cmd->pool, newmap->dbmtype,
- newmap->datafile, &newmap->checkfile,
- &ignored_fname);
- if (rv != APR_SUCCESS) {
- return apr_pstrcat(cmd->pool, "RewriteMap: dbm type ",
- newmap->dbmtype, " is invalid", NULL);
- }
- }
- else if (strncasecmp(a2, "prg:", 4) == 0) {
- apr_tokenize_to_argv(a2 + 4, &newmap->argv, cmd->pool);
-
- fname = newmap->argv[0];
- if ((newmap->argv[0] = ap_server_root_relative(cmd->pool,
- fname)) == NULL) {
- return apr_pstrcat(cmd->pool, "RewriteMap: bad path to prg map: ",
- fname, NULL);
- }
-
- newmap->type = MAPTYPE_PRG;
- newmap->datafile = NULL;
- newmap->checkfile = newmap->argv[0];
- newmap->cachename = NULL;
- }
- else if (strncasecmp(a2, "int:", 4) == 0) {
- newmap->type = MAPTYPE_INT;
- newmap->datafile = NULL;
- newmap->checkfile = NULL;
- newmap->cachename = NULL;
- newmap->func = (char *(*)(request_rec *,char *))
- apr_hash_get(mapfunc_hash, a2+4, strlen(a2+4));
- if ((sconf->state == ENGINE_ENABLED) && (newmap->func == NULL)) {
- return apr_pstrcat(cmd->pool, "RewriteMap: internal map not found:",
- a2+4, NULL);
- }
- }
- else {
- if ((fname = ap_server_root_relative(cmd->pool, a2)) == NULL) {
- return apr_pstrcat(cmd->pool, "RewriteMap: bad path to txt map: ",
- a2, NULL);
- }
-
- newmap->type = MAPTYPE_TXT;
- newmap->datafile = fname;
- newmap->checkfile = fname;
- newmap->cachename = apr_psprintf(cmd->pool, "%pp:%s",
- (void *)cmd->server, a1);
- }
- newmap->fpin = NULL;
- newmap->fpout = NULL;
-
- if (newmap->checkfile && (sconf->state == ENGINE_ENABLED)
- && (apr_stat(&st, newmap->checkfile, APR_FINFO_MIN,
- cmd->pool) != APR_SUCCESS)) {
- return apr_pstrcat(cmd->pool,
- "RewriteMap: file for map ", a1,
- " not found:", newmap->checkfile, NULL);
- }
-
- apr_hash_set(sconf->rewritemaps, a1, APR_HASH_KEY_STRING, newmap);
-
- return NULL;
-}
-
-static const char *cmd_rewritelock(cmd_parms *cmd, void *dconf, const char *a1)
-{
- const char *error;
-
- if ((error = ap_check_cmd_context(cmd, GLOBAL_ONLY)) != NULL)
- return error;
-
- /* fixup the path, especially for rewritelock_remove() */
- lockname = ap_server_root_relative(cmd->pool, a1);
-
- if (!lockname) {
- return apr_pstrcat(cmd->pool, "Invalid RewriteLock path ", a1);
- }
-
- return NULL;
-}
-
-static const char *cmd_rewritebase(cmd_parms *cmd, void *in_dconf,
- const char *a1)
-{
- rewrite_perdir_conf *dconf = in_dconf;
-
- if (cmd->path == NULL || dconf == NULL) {
- return "RewriteBase: only valid in per-directory config files";
- }
- if (a1[0] == '\0') {
- return "RewriteBase: empty URL not allowed";
- }
- if (a1[0] != '/') {
- return "RewriteBase: argument is not a valid URL";
- }
-
- dconf->baseurl = a1;
-
- return NULL;
-}
-
-/*
- * generic lexer for RewriteRule and RewriteCond flags.
- * The parser will be passed in as a function pointer
- * and called if a flag was found
- */
-static const char *cmd_parseflagfield(apr_pool_t *p, void *cfg, char *key,
- const char *(*parse)(apr_pool_t *,
- void *,
- char *, char *))
-{
- char *val, *nextp, *endp;
- const char *err;
-
- endp = key + strlen(key) - 1;
- if (*key != '[' || *endp != ']') {
- return "RewriteCond: bad flag delimiters";
- }
-
- *endp = ','; /* for simpler parsing */
- ++key;
-
- while (*key) {
- /* skip leading spaces */
- while (apr_isspace(*key)) {
- ++key;
- }
-
- if (!*key || (nextp = ap_strchr(key, ',')) == NULL) { /* NULL should not
- * happen, but ...
- */
- break;
- }
-
- /* strip trailing spaces */
- endp = nextp - 1;
- while (apr_isspace(*endp)) {
- --endp;
- }
- *++endp = '\0';
-
- /* split key and val */
- val = ap_strchr(key, '=');
- if (val) {
- *val++ = '\0';
- }
- else {
- val = endp;
- }
-
- err = parse(p, cfg, key, val);
- if (err) {
- return err;
- }
-
- key = nextp + 1;
- }
-
- return NULL;
-}
-
-static const char *cmd_rewritecond_setflag(apr_pool_t *p, void *_cfg,
- char *key, char *val)
-{
- rewritecond_entry *cfg = _cfg;
-
- if ( strcasecmp(key, "nocase") == 0
- || strcasecmp(key, "NC") == 0 ) {
- cfg->flags |= CONDFLAG_NOCASE;
- }
- else if ( strcasecmp(key, "ornext") == 0
- || strcasecmp(key, "OR") == 0 ) {
- cfg->flags |= CONDFLAG_ORNEXT;
- }
- else {
- return apr_pstrcat(p, "RewriteCond: unknown flag '", key, "'", NULL);
- }
- return NULL;
-}
-
-static const char *cmd_rewritecond(cmd_parms *cmd, void *in_dconf,
- const char *in_str)
-{
- rewrite_perdir_conf *dconf = in_dconf;
- char *str = apr_pstrdup(cmd->pool, in_str);
- rewrite_server_conf *sconf;
- rewritecond_entry *newcond;
- regex_t *regexp;
- char *a1;
- char *a2;
- char *a3;
- const char *err;
-
- sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
- /* make a new entry in the internal temporary rewrite rule list */
- if (cmd->path == NULL) { /* is server command */
- newcond = apr_array_push(sconf->rewriteconds);
- }
- else { /* is per-directory command */
- newcond = apr_array_push(dconf->rewriteconds);
- }
-
- /* parse the argument line ourself
- * a1 .. a3 are substrings of str, which is a fresh copy
- * of the argument line. So we can use a1 .. a3 without
- * copying them again.
- */
- if (parseargline(str, &a1, &a2, &a3)) {
- return apr_pstrcat(cmd->pool, "RewriteCond: bad argument line '", str,
- "'", NULL);
- }
-
- /* arg1: the input string */
- newcond->input = a1;
-
- /* arg3: optional flags field
- * (this has to be parsed first, because we need to
- * know if the regex should be compiled with ICASE!)
- */
- newcond->flags = CONDFLAG_NONE;
- if (a3 != NULL) {
- if ((err = cmd_parseflagfield(cmd->pool, newcond, a3,
- cmd_rewritecond_setflag)) != NULL) {
- return err;
- }
- }
-
- /* arg2: the pattern */
- if (*a2 == '!') {
- newcond->flags |= CONDFLAG_NOTMATCH;
- ++a2;
- }
-
- /* determine the pattern type */
- newcond->ptype = 0;
- if (*a2 && a2[1]) {
- if (!a2[2] && *a2 == '-') {
- switch (a2[1]) {
- case 'f': newcond->ptype = CONDPAT_FILE_EXISTS; break;
- case 's': newcond->ptype = CONDPAT_FILE_SIZE; break;
- case 'l': newcond->ptype = CONDPAT_FILE_LINK; break;
- case 'd': newcond->ptype = CONDPAT_FILE_DIR; break;
- case 'x': newcond->ptype = CONDPAT_FILE_XBIT; break;
- case 'U': newcond->ptype = CONDPAT_LU_URL; break;
- case 'F': newcond->ptype = CONDPAT_LU_FILE; break;
- }
- }
- else {
- switch (*a2) {
- case '>': newcond->ptype = CONDPAT_STR_GT; break;
- case '<': newcond->ptype = CONDPAT_STR_LT; break;
- case '=': newcond->ptype = CONDPAT_STR_EQ;
- /* "" represents an empty string */
- if (*++a2 == '"' && a2[1] == '"' && !a2[2]) {
- a2 += 2;
- }
- break;
- }
- }
- }
-
- if (newcond->ptype && newcond->ptype != CONDPAT_STR_EQ &&
- (newcond->flags & CONDFLAG_NOCASE)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "RewriteCond: NoCase option for non-regex pattern '%s' "
- "is not supported and will be ignored.", a2);
- newcond->flags &= ~CONDFLAG_NOCASE;
- }
-
- newcond->pattern = a2;
-
- if (!newcond->ptype) {
- regexp = ap_pregcomp(cmd->pool, a2,
- REG_EXTENDED | ((newcond->flags & CONDFLAG_NOCASE)
- ? REG_ICASE : 0));
- if (!regexp) {
- return apr_pstrcat(cmd->pool, "RewriteCond: cannot compile regular "
- "expression '", a2, "'", NULL);
- }
-
- newcond->regexp = regexp;
- }
-
- return NULL;
-}
-
-static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
- char *key, char *val)
-{
- rewriterule_entry *cfg = _cfg;
- int error = 0;
-
- switch (*key++) {
- case 'c':
- case 'C':
- if (!*key || !strcasecmp(key, "hain")) { /* chain */
- cfg->flags |= RULEFLAG_CHAIN;
- }
- else if (((*key == 'O' || *key == 'o') && !key[1])
- || !strcasecmp(key, "ookie")) { /* cookie */
- data_item *cp = cfg->cookie;
-
- if (!cp) {
- cp = cfg->cookie = apr_palloc(p, sizeof(*cp));
- }
- else {
- while (cp->next) {
- cp = cp->next;
- }
- cp->next = apr_palloc(p, sizeof(*cp));
- cp = cp->next;
- }
-
- cp->next = NULL;
- cp->data = val;
- }
- else {
- ++error;
- }
- break;
-
- case 'e':
- case 'E':
- if (!*key || !strcasecmp(key, "nv")) { /* env */
- data_item *cp = cfg->env;
-
- if (!cp) {
- cp = cfg->env = apr_palloc(p, sizeof(*cp));
- }
- else {
- while (cp->next) {
- cp = cp->next;
- }
- cp->next = apr_palloc(p, sizeof(*cp));
- cp = cp->next;
- }
-
- cp->next = NULL;
- cp->data = val;
- }
- else {
- ++error;
- }
- break;
-
- case 'f':
- case 'F':
- if (!*key || !strcasecmp(key, "orbidden")) { /* forbidden */
- cfg->flags |= (RULEFLAG_STATUS | RULEFLAG_NOSUB);
- cfg->forced_responsecode = HTTP_FORBIDDEN;
- }
- else {
- ++error;
- }
- break;
-
- case 'g':
- case 'G':
- if (!*key || !strcasecmp(key, "one")) { /* gone */
- cfg->flags |= (RULEFLAG_STATUS | RULEFLAG_NOSUB);
- cfg->forced_responsecode = HTTP_GONE;
- }
- else {
- ++error;
- }
- break;
-
- case 'h':
- case 'H':
- if (!*key || !strcasecmp(key, "andler")) { /* handler */
- cfg->forced_handler = val;
- }
- else {
- ++error;
- }
- break;
-
- case 'l':
- case 'L':
- if (!*key || !strcasecmp(key, "ast")) { /* last */
- cfg->flags |= RULEFLAG_LASTRULE;
- }
- else {
- ++error;
- }
- break;
-
- case 'n':
- case 'N':
- if (((*key == 'E' || *key == 'e') && !key[1])
- || !strcasecmp(key, "oescape")) { /* noescape */
- cfg->flags |= RULEFLAG_NOESCAPE;
- }
- else if (!*key || !strcasecmp(key, "ext")) { /* next */
- cfg->flags |= RULEFLAG_NEWROUND;
- }
- else if (((*key == 'S' || *key == 's') && !key[1])
- || !strcasecmp(key, "osubreq")) { /* nosubreq */
- cfg->flags |= RULEFLAG_IGNOREONSUBREQ;
- }
- else if (((*key == 'C' || *key == 'c') && !key[1])
- || !strcasecmp(key, "ocase")) { /* nocase */
- cfg->flags |= RULEFLAG_NOCASE;
- }
- else {
- ++error;
- }
- break;
-
- case 'p':
- case 'P':
- if (!*key || !strcasecmp(key, "roxy")) { /* proxy */
- cfg->flags |= RULEFLAG_PROXY;
- }
- else if (((*key == 'T' || *key == 't') && !key[1])
- || !strcasecmp(key, "assthrough")) { /* passthrough */
- cfg->flags |= RULEFLAG_PASSTHROUGH;
- }
- else {
- ++error;
- }
- break;
-
- case 'q':
- case 'Q':
- if ( !strcasecmp(key, "QSA")
- || !strcasecmp(key, "qsappend")) { /* qsappend */
- cfg->flags |= RULEFLAG_QSAPPEND;
- }
- else {
- ++error;
- }
- break;
-
- case 'r':
- case 'R':
- if (!*key || !strcasecmp(key, "edirect")) { /* redirect */
- int status = 0;
-
- cfg->flags |= RULEFLAG_FORCEREDIRECT;
- if (strlen(val) > 0) {
- if (strcasecmp(val, "permanent") == 0) {
- status = HTTP_MOVED_PERMANENTLY;
- }
- else if (strcasecmp(val, "temp") == 0) {
- status = HTTP_MOVED_TEMPORARILY;
- }
- else if (strcasecmp(val, "seeother") == 0) {
- status = HTTP_SEE_OTHER;
- }
- else if (apr_isdigit(*val)) {
- status = atoi(val);
- if (status != HTTP_INTERNAL_SERVER_ERROR) {
- int idx =
- ap_index_of_response(HTTP_INTERNAL_SERVER_ERROR);
-
- if (ap_index_of_response(status) == idx) {
- return apr_psprintf(p, "RewriteRule: invalid HTTP "
- "response code '%s' for "
- "flag 'R'",
- val);
- }
- }
- if (!ap_is_HTTP_REDIRECT(status)) {
- cfg->flags |= (RULEFLAG_STATUS | RULEFLAG_NOSUB);
- }
- }
- cfg->forced_responsecode = status;
- }
- }
- else {
- ++error;
- }
- break;
-
- case 's':
- case 'S':
- if (!*key || !strcasecmp(key, "kip")) { /* skip */
- cfg->skip = atoi(val);
- }
- else {
- ++error;
- }
- break;
-
- case 't':
- case 'T':
- if (!*key || !strcasecmp(key, "ype")) { /* type */
- cfg->forced_mimetype = val;
- }
- else {
- ++error;
- }
- break;
-
- default:
- ++error;
- break;
- }
-
- if (error) {
- return apr_pstrcat(p, "RewriteRule: unknown flag '", --key, "'", NULL);
- }
-
- return NULL;
-}
-
-static const char *cmd_rewriterule(cmd_parms *cmd, void *in_dconf,
- const char *in_str)
-{
- rewrite_perdir_conf *dconf = in_dconf;
- char *str = apr_pstrdup(cmd->pool, in_str);
- rewrite_server_conf *sconf;
- rewriterule_entry *newrule;
- regex_t *regexp;
- char *a1;
- char *a2;
- char *a3;
- const char *err;
-
- sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
- /* make a new entry in the internal rewrite rule list */
- if (cmd->path == NULL) { /* is server command */
- newrule = apr_array_push(sconf->rewriterules);
- }
- else { /* is per-directory command */
- newrule = apr_array_push(dconf->rewriterules);
- }
-
- /* parse the argument line ourself */
- if (parseargline(str, &a1, &a2, &a3)) {
- return apr_pstrcat(cmd->pool, "RewriteRule: bad argument line '", str,
- "'", NULL);
- }
-
- /* arg3: optional flags field */
- newrule->forced_mimetype = NULL;
- newrule->forced_handler = NULL;
- newrule->forced_responsecode = HTTP_MOVED_TEMPORARILY;
- newrule->flags = RULEFLAG_NONE;
- newrule->env = NULL;
- newrule->cookie = NULL;
- newrule->skip = 0;
- if (a3 != NULL) {
- if ((err = cmd_parseflagfield(cmd->pool, newrule, a3,
- cmd_rewriterule_setflag)) != NULL) {
- return err;
- }
- }
-
- /* arg1: the pattern
- * try to compile the regexp to test if is ok
- */
- if (*a1 == '!') {
- newrule->flags |= RULEFLAG_NOTMATCH;
- ++a1;
- }
-
- regexp = ap_pregcomp(cmd->pool, a1, REG_EXTENDED |
- ((newrule->flags & RULEFLAG_NOCASE)
- ? REG_ICASE : 0));
- if (!regexp) {
- return apr_pstrcat(cmd->pool,
- "RewriteRule: cannot compile regular expression '",
- a1, "'", NULL);
- }
-
- newrule->pattern = a1;
- newrule->regexp = regexp;
-
- /* arg2: the output string */
- newrule->output = a2;
- if (*a2 == '-' && !a2[1]) {
- newrule->flags |= RULEFLAG_NOSUB;
- }
-
- /* now, if the server or per-dir config holds an
- * array of RewriteCond entries, we take it for us
- * and clear the array
- */
- if (cmd->path == NULL) { /* is server command */
- newrule->rewriteconds = sconf->rewriteconds;
- sconf->rewriteconds = apr_array_make(cmd->pool, 2,
- sizeof(rewritecond_entry));
- }
- else { /* is per-directory command */
- newrule->rewriteconds = dconf->rewriteconds;
- dconf->rewriteconds = apr_array_make(cmd->pool, 2,
- sizeof(rewritecond_entry));
- }
-
- return NULL;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | the rewriting engine
- * | |
- * +-------------------------------------------------------+
- */
-
-/* Lexicographic Compare */
-static APR_INLINE int compare_lexicography(char *a, char *b)
-{
- apr_size_t i, lena, lenb;
-
- lena = strlen(a);
- lenb = strlen(b);
-
- if (lena == lenb) {
- for (i = 0; i < lena; ++i) {
- if (a[i] != b[i]) {
- return ((unsigned char)a[i] > (unsigned char)b[i]) ? 1 : -1;
- }
- }
-
- return 0;
- }
-
- return ((lena > lenb) ? 1 : -1);
-}
-
-/*
- * Apply a single rewriteCond
- */
-static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx)
-{
- char *input = do_expand(p->input, ctx);
- apr_finfo_t sb;
- request_rec *rsub, *r = ctx->r;
- regmatch_t regmatch[AP_MAX_REG_MATCH];
- int rc = 0;
-
- switch (p->ptype) {
- case CONDPAT_FILE_EXISTS:
- if ( apr_stat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS
- && sb.filetype == APR_REG) {
- rc = 1;
- }
- break;
-
- case CONDPAT_FILE_SIZE:
- if ( apr_stat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS
- && sb.filetype == APR_REG && sb.size > 0) {
- rc = 1;
- }
- break;
-
- case CONDPAT_FILE_LINK:
-#if !defined(OS2)
- if ( apr_stat(&sb, input, APR_FINFO_MIN | APR_FINFO_LINK,
- r->pool) == APR_SUCCESS
- && sb.filetype == APR_LNK) {
- rc = 1;
- }
-#endif
- break;
-
- case CONDPAT_FILE_DIR:
- if ( apr_stat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS
- && sb.filetype == APR_DIR) {
- rc = 1;
- }
- break;
-
- case CONDPAT_FILE_XBIT:
- if ( apr_stat(&sb, input, APR_FINFO_PROT, r->pool) == APR_SUCCESS
- && (sb.protection & (APR_UEXECUTE | APR_GEXECUTE | APR_WEXECUTE))) {
- rc = 1;
- }
- break;
-
- case CONDPAT_LU_URL:
- if (*input && subreq_ok(r)) {
- rsub = ap_sub_req_lookup_uri(input, r, NULL);
- if (rsub->status < 400) {
- rc = 1;
- }
- rewritelog((r, 5, NULL, "RewriteCond URI (-U) check: "
- "path=%s -> status=%d", input, rsub->status));
- ap_destroy_sub_req(rsub);
- }
- break;
-
- case CONDPAT_LU_FILE:
- if (*input && subreq_ok(r)) {
- rsub = ap_sub_req_lookup_file(input, r, NULL);
- if (rsub->status < 300 &&
- /* double-check that file exists since default result is 200 */
- apr_stat(&sb, rsub->filename, APR_FINFO_MIN,
- r->pool) == APR_SUCCESS) {
- rc = 1;
- }
- rewritelog((r, 5, NULL, "RewriteCond file (-F) check: path=%s "
- "-> file=%s status=%d", input, rsub->filename,
- rsub->status));
- ap_destroy_sub_req(rsub);
- }
- break;
-
- case CONDPAT_STR_GT:
- rc = (compare_lexicography(input, p->pattern+1) == 1) ? 1 : 0;
- break;
-
- case CONDPAT_STR_LT:
- rc = (compare_lexicography(input, p->pattern+1) == -1) ? 1 : 0;
- break;
-
- case CONDPAT_STR_EQ:
- if (p->flags & CONDFLAG_NOCASE) {
- rc = !strcasecmp(input, p->pattern);
- }
- else {
- rc = !strcmp(input, p->pattern);
- }
- break;
-
- default:
- /* it is really a regexp pattern, so apply it */
- rc = !ap_regexec(p->regexp, input, AP_MAX_REG_MATCH, regmatch, 0);
-
- /* update briRC backref info */
- if (rc && !(p->flags & CONDFLAG_NOTMATCH)) {
- ctx->briRC.source = input;
- ctx->briRC.nsub = p->regexp->re_nsub;
- memcpy(ctx->briRC.regmatch, regmatch, sizeof(regmatch));
- }
- break;
- }
-
- if (p->flags & CONDFLAG_NOTMATCH) {
- rc = !rc;
- }
-
- rewritelog((r, 4, ctx->perdir, "RewriteCond: input='%s' pattern='%s%s%s'%s "
- "=> %s", input, (p->flags & CONDFLAG_NOTMATCH) ? "!" : "",
- (p->ptype == CONDPAT_STR_EQ) ? "=" : "", p->pattern,
- (p->flags & CONDFLAG_NOCASE) ? " [NC]" : "",
- rc ? "matched" : "not-matched"));
-
- return rc;
-}
-
-/* check for forced type and handler */
-static APR_INLINE void force_type_handler(rewriterule_entry *p,
- rewrite_ctx *ctx)
-{
- char *expanded;
-
- if (p->forced_mimetype) {
- expanded = do_expand(p->forced_mimetype, ctx);
-
- if (*expanded) {
- ap_str_tolower(expanded);
-
- rewritelog((ctx->r, 2, ctx->perdir, "remember %s to have MIME-type "
- "'%s'", ctx->r->filename, expanded));
-
- apr_table_setn(ctx->r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR,
- expanded);
- }
- }
-
- if (p->forced_handler) {
- expanded = do_expand(p->forced_handler, ctx);
-
- if (*expanded) {
- ap_str_tolower(expanded);
-
- rewritelog((ctx->r, 2, ctx->perdir, "remember %s to have "
- "Content-handler '%s'", ctx->r->filename, expanded));
-
- apr_table_setn(ctx->r->notes, REWRITE_FORCED_HANDLER_NOTEVAR,
- expanded);
- }
- }
-}
-
-/*
- * Apply a single RewriteRule
- */
-static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
-{
- regmatch_t regmatch[AP_MAX_REG_MATCH];
- apr_array_header_t *rewriteconds;
- rewritecond_entry *conds;
- int i, rc;
- char *newuri = NULL;
- request_rec *r = ctx->r;
- int is_proxyreq = 0;
-
- ctx->uri = r->filename;
-
- if (ctx->perdir) {
- apr_size_t dirlen = strlen(ctx->perdir);
-
- /*
- * Proxy request?
- */
- is_proxyreq = ( r->proxyreq && r->filename
- && !strncmp(r->filename, "proxy:", 6));
-
- /* Since we want to match against the (so called) full URL, we have
- * to re-add the PATH_INFO postfix
- */
- if (r->path_info && *r->path_info) {
- rewritelog((r, 3, ctx->perdir, "add path info postfix: %s -> %s%s",
- ctx->uri, ctx->uri, r->path_info));
- ctx->uri = apr_pstrcat(r->pool, ctx->uri, r->path_info, NULL);
- }
-
- /* Additionally we strip the physical path from the url to match
- * it independent from the underlaying filesystem.
- */
- if (!is_proxyreq && strlen(ctx->uri) >= dirlen &&
- !strncmp(ctx->uri, ctx->perdir, dirlen)) {
-
- rewritelog((r, 3, ctx->perdir, "strip per-dir prefix: %s -> %s",
- ctx->uri, ctx->uri + dirlen));
- ctx->uri = ctx->uri + dirlen;
- }
- }
-
- /* Try to match the URI against the RewriteRule pattern
- * and exit immediately if it didn't apply.
- */
- rewritelog((r, 3, ctx->perdir, "applying pattern '%s' to uri '%s'",
- p->pattern, ctx->uri));
-
- rc = !ap_regexec(p->regexp, ctx->uri, AP_MAX_REG_MATCH, regmatch, 0);
- if (! (( rc && !(p->flags & RULEFLAG_NOTMATCH)) ||
- (!rc && (p->flags & RULEFLAG_NOTMATCH)) ) ) {
- return 0;
- }
-
- /* It matched, wow! Now it's time to prepare the context structure for
- * further processing
- */
- ctx->vary_this = NULL;
- ctx->briRC.source = NULL;
-
- if (p->flags & RULEFLAG_NOTMATCH) {
- ctx->briRR.source = NULL;
- }
- else {
- ctx->briRR.source = apr_pstrdup(r->pool, ctx->uri);
- ctx->briRR.nsub = p->regexp->re_nsub;
- memcpy(ctx->briRR.regmatch, regmatch, sizeof(regmatch));
- }
-
- /* Ok, we already know the pattern has matched, but we now
- * additionally have to check for all existing preconditions
- * (RewriteCond) which have to be also true. We do this at
- * this very late stage to avoid unnessesary checks which
- * would slow down the rewriting engine.
- */
- rewriteconds = p->rewriteconds;
- conds = (rewritecond_entry *)rewriteconds->elts;
-
- for (i = 0; i < rewriteconds->nelts; ++i) {
- rewritecond_entry *c = &conds[i];
-
- rc = apply_rewrite_cond(c, ctx);
- if (c->flags & CONDFLAG_ORNEXT) {
- if (!rc) {
- /* One condition is false, but another can be still true. */
- ctx->vary_this = NULL;
- continue;
- }
- else {
- /* skip the rest of the chained OR conditions */
- while ( i < rewriteconds->nelts
- && c->flags & CONDFLAG_ORNEXT) {
- c = &conds[++i];
- }
- continue;
- }
- }
- else if (!rc) {
- return 0;
- }
-
- /* If some HTTP header was involved in the condition, remember it
- * for later use
- */
- if (ctx->vary_this) {
- ctx->vary = ctx->vary
- ? apr_pstrcat(r->pool, ctx->vary, ", ", ctx->vary_this,
- NULL)
- : ctx->vary_this;
- ctx->vary_this = NULL;
- }
- }
-
- /* expand the result */
- if (!(p->flags & RULEFLAG_NOSUB)) {
- newuri = do_expand(p->output, ctx);
- rewritelog((r, 2, ctx->perdir, "rewrite '%s' -> '%s'", ctx->uri,
- newuri));
- }
-
- /* expand [E=var:val] and [CO=<cookie>] */
- do_expand_env(p->env, ctx);
- do_expand_cookie(p->cookie, ctx);
-
- /* non-substitution rules ('RewriteRule <pat> -') end here. */
- if (p->flags & RULEFLAG_NOSUB) {
- force_type_handler(p, ctx);
-
- if (p->flags & RULEFLAG_STATUS) {
- rewritelog((r, 2, ctx->perdir, "forcing responsecode %d for %s",
- p->forced_responsecode, r->filename));
-
- r->status = p->forced_responsecode;
- }
-
- return 2;
- }
-
- /* Now adjust API's knowledge about r->filename and r->args */
- r->filename = newuri;
- splitout_queryargs(r, p->flags & RULEFLAG_QSAPPEND);
-
- /* Add the previously stripped per-directory location prefix, unless
- * (1) it's an absolute URL path and
- * (2) it's a full qualified URL
- */
- if ( ctx->perdir && !is_proxyreq && *r->filename != '/'
- && !is_absolute_uri(r->filename)) {
- rewritelog((r, 3, ctx->perdir, "add per-dir prefix: %s -> %s%s",
- r->filename, ctx->perdir, r->filename));
-
- r->filename = apr_pstrcat(r->pool, ctx->perdir, r->filename, NULL);
- }
-
- /* If this rule is forced for proxy throughput
- * (`RewriteRule ... ... [P]') then emulate mod_proxy's
- * URL-to-filename handler to be sure mod_proxy is triggered
- * for this URL later in the Apache API. But make sure it is
- * a fully-qualified URL. (If not it is qualified with
- * ourself).
- */
- if (p->flags & RULEFLAG_PROXY) {
- fully_qualify_uri(r);
-
- rewritelog((r, 2, ctx->perdir, "forcing proxy-throughput with %s",
- r->filename));
-
- r->filename = apr_pstrcat(r->pool, "proxy:", r->filename, NULL);
- return 1;
- }
-
- /* If this rule is explicitly forced for HTTP redirection
- * (`RewriteRule .. .. [R]') then force an external HTTP
- * redirect. But make sure it is a fully-qualified URL. (If
- * not it is qualified with ourself).
- */
- if (p->flags & RULEFLAG_FORCEREDIRECT) {
- fully_qualify_uri(r);
-
- rewritelog((r, 2, ctx->perdir, "explicitly forcing redirect with %s",
- r->filename));
-
- r->status = p->forced_responsecode;
- return 1;
- }
-
- /* Special Rewriting Feature: Self-Reduction
- * We reduce the URL by stripping a possible
- * http[s]://<ourhost>[:<port>] prefix, i.e. a prefix which
- * corresponds to ourself. This is to simplify rewrite maps
- * and to avoid recursion, etc. When this prefix is not a
- * coincidence then the user has to use [R] explicitly (see
- * above).
- */
- reduce_uri(r);
-
- /* If this rule is still implicitly forced for HTTP
- * redirection (`RewriteRule .. <scheme>://...') then
- * directly force an external HTTP redirect.
- */
- if (is_absolute_uri(r->filename)) {
- rewritelog((r, 2, ctx->perdir, "implicitly forcing redirect (rc=%d) "
- "with %s", p->forced_responsecode, r->filename));
-
- r->status = p->forced_responsecode;
- return 1;
- }
-
- /* Finally remember the forced mime-type */
- force_type_handler(p, ctx);
-
- /* Puuhhhhhhhh... WHAT COMPLICATED STUFF ;_)
- * But now we're done for this particular rule.
- */
- return 1;
-}
-
-/*
- * Apply a complete rule set,
- * i.e. a list of rewrite rules
- */
-static int apply_rewrite_list(request_rec *r, apr_array_header_t *rewriterules,
- char *perdir)
-{
- rewriterule_entry *entries;
- rewriterule_entry *p;
- int i;
- int changed;
- int rc;
- int s;
- rewrite_ctx *ctx;
-
- ctx = apr_palloc(r->pool, sizeof(*ctx));
- ctx->perdir = perdir;
- ctx->r = r;
-
- /*
- * Iterate over all existing rules
- */
- entries = (rewriterule_entry *)rewriterules->elts;
- changed = 0;
- loop:
- for (i = 0; i < rewriterules->nelts; i++) {
- p = &entries[i];
-
- /*
- * Ignore this rule on subrequests if we are explicitly
- * asked to do so or this is a proxy-throughput or a
- * forced redirect rule.
- */
- if (r->main != NULL &&
- (p->flags & RULEFLAG_IGNOREONSUBREQ ||
- p->flags & RULEFLAG_FORCEREDIRECT )) {
- continue;
- }
-
- /*
- * Apply the current rule.
- */
- ctx->vary = NULL;
- rc = apply_rewrite_rule(p, ctx);
-
- if (rc) {
- /* Regardless of what we do next, we've found a match. Check to see
- * if any of the request header fields were involved, and add them
- * to the Vary field of the response.
- */
- if (ctx->vary) {
- apr_table_merge(r->headers_out, "Vary", ctx->vary);
- }
-
- /*
- * The rule sets the response code (implies match-only)
- */
- if (p->flags & RULEFLAG_STATUS) {
- return ACTION_STATUS;
- }
-
- /*
- * Indicate a change if this was not a match-only rule.
- */
- if (rc != 2) {
- changed = ((p->flags & RULEFLAG_NOESCAPE)
- ? ACTION_NOESCAPE : ACTION_NORMAL);
- }
-
- /*
- * Pass-Through Feature (`RewriteRule .. .. [PT]'):
- * Because the Apache 1.x API is very limited we
- * need this hack to pass the rewritten URL to other
- * modules like mod_alias, mod_userdir, etc.
- */
- if (p->flags & RULEFLAG_PASSTHROUGH) {
- rewritelog((r, 2, perdir, "forcing '%s' to get passed through "
- "to next API URI-to-filename handler", r->filename));
- r->filename = apr_pstrcat(r->pool, "passthrough:",
- r->filename, NULL);
- changed = ACTION_NORMAL;
- break;
- }
-
- /*
- * Stop processing also on proxy pass-through and
- * last-rule and new-round flags.
- */
- if (p->flags & (RULEFLAG_PROXY | RULEFLAG_LASTRULE)) {
- break;
- }
-
- /*
- * On "new-round" flag we just start from the top of
- * the rewriting ruleset again.
- */
- if (p->flags & RULEFLAG_NEWROUND) {
- goto loop;
- }
-
- /*
- * If we are forced to skip N next rules, do it now.
- */
- if (p->skip > 0) {
- s = p->skip;
- while ( i < rewriterules->nelts
- && s > 0) {
- i++;
- p = &entries[i];
- s--;
- }
- }
- }
- else {
- /*
- * If current rule is chained with next rule(s),
- * skip all this next rule(s)
- */
- while ( i < rewriterules->nelts
- && p->flags & RULEFLAG_CHAIN) {
- i++;
- p = &entries[i];
- }
- }
- }
- return changed;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Module Initialization Hooks
- * | |
- * +-------------------------------------------------------+
- */
-
-static int pre_config(apr_pool_t *pconf,
- apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- APR_OPTIONAL_FN_TYPE(ap_register_rewrite_mapfunc) *map_pfn_register;
-
- /* register int: rewritemap handlers */
- mapfunc_hash = apr_hash_make(pconf);
- map_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_rewrite_mapfunc);
- if (map_pfn_register) {
- map_pfn_register("tolower", rewrite_mapfunc_tolower);
- map_pfn_register("toupper", rewrite_mapfunc_toupper);
- map_pfn_register("escape", rewrite_mapfunc_escape);
- map_pfn_register("unescape", rewrite_mapfunc_unescape);
- }
- return OK;
-}
-
-static int post_config(apr_pool_t *p,
- apr_pool_t *plog,
- apr_pool_t *ptemp,
- server_rec *s)
-{
- apr_status_t rv;
- void *data;
- int first_time = 0;
- const char *userdata_key = "rewrite_init_module";
-
- apr_pool_userdata_get(&data, userdata_key, s->process->pool);
- if (!data) {
- first_time = 1;
- apr_pool_userdata_set((const void *)1, userdata_key,
- apr_pool_cleanup_null, s->process->pool);
- }
-
- /* check if proxy module is available */
- proxy_available = (ap_find_linked_module("mod_proxy.c") != NULL);
-
-#ifndef REWRITELOG_DISABLED
- /* create the rewriting lockfiles in the parent */
- if ((rv = apr_global_mutex_create(&rewrite_log_lock, NULL,
- APR_LOCK_DEFAULT, p)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
- "mod_rewrite: could not create rewrite_log_lock");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
-#ifdef MOD_REWRITE_SET_MUTEX_PERMS
- rv = unixd_set_global_mutex_perms(rewrite_log_lock);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
- "mod_rewrite: Could not set permissions on "
- "rewrite_log_lock; check User and Group directives");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-#endif /* perms */
-#endif /* rewritelog */
-
- rv = rewritelock_create(s, p);
- if (rv != APR_SUCCESS) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- apr_pool_cleanup_register(p, (void *)s, rewritelock_remove,
- apr_pool_cleanup_null);
-
- /* step through the servers and
- * - open each rewriting logfile
- * - open the RewriteMap prg:xxx programs
- */
- for (; s; s = s->next) {
-#ifndef REWRITELOG_DISABLED
- if (!open_rewritelog(s, p)) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-#endif
-
- if (!first_time) {
- if (run_rewritemap_programs(s, p) != APR_SUCCESS) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- }
-
- rewrite_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
- rewrite_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https);
-
- return OK;
-}
-
-static void init_child(apr_pool_t *p, server_rec *s)
-{
- apr_status_t rv = 0; /* get a rid of gcc warning (REWRITELOG_DISABLED) */
-
- if (lockname != NULL && *(lockname) != '\0') {
- rv = apr_global_mutex_child_init(&rewrite_mapr_lock_acquire,
- lockname, p);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
- "mod_rewrite: could not init rewrite_mapr_lock_acquire"
- " in child");
- }
- }
-
-#ifndef REWRITELOG_DISABLED
- rv = apr_global_mutex_child_init(&rewrite_log_lock, NULL, p);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
- "mod_rewrite: could not init rewrite log lock in child");
- }
-#endif
-
- /* create the lookup cache */
- if (!init_cache(p)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
- "mod_rewrite: could not init map cache in child");
- }
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | runtime hooks
- * | |
- * +-------------------------------------------------------+
- */
-
-/*
- * URI-to-filename hook
- * [deals with RewriteRules in server context]
- */
-static int hook_uri2file(request_rec *r)
-{
- rewrite_server_conf *conf;
- const char *saved_rulestatus;
- const char *var;
- const char *thisserver;
- char *thisport;
- const char *thisurl;
- unsigned int port;
- int rulestatus;
-
- /*
- * retrieve the config structures
- */
- conf = ap_get_module_config(r->server->module_config, &rewrite_module);
-
- /*
- * only do something under runtime if the engine is really enabled,
- * else return immediately!
- */
- if (conf->state == ENGINE_DISABLED) {
- return DECLINED;
- }
-
- /*
- * check for the ugly API case of a virtual host section where no
- * mod_rewrite directives exists. In this situation we became no chance
- * by the API to setup our default per-server config so we have to
- * on-the-fly assume we have the default config. But because the default
- * config has a disabled rewriting engine we are lucky because can
- * just stop operating now.
- */
- if (conf->server != r->server) {
- return DECLINED;
- }
-
- /*
- * add the SCRIPT_URL variable to the env. this is a bit complicated
- * due to the fact that apache uses subrequests and internal redirects
- */
-
- if (r->main == NULL) {
- var = apr_table_get(r->subprocess_env, REDIRECT_ENVVAR_SCRIPT_URL);
- if (var == NULL) {
- apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, r->uri);
- }
- else {
- apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, var);
- }
- }
- else {
- var = apr_table_get(r->main->subprocess_env, ENVVAR_SCRIPT_URL);
- apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, var);
- }
-
- /*
- * create the SCRIPT_URI variable for the env
- */
-
- /* add the canonical URI of this URL */
- thisserver = ap_get_server_name(r);
- port = ap_get_server_port(r);
- if (ap_is_default_port(port, r)) {
- thisport = "";
- }
- else {
- thisport = apr_psprintf(r->pool, ":%u", port);
- }
- thisurl = apr_table_get(r->subprocess_env, ENVVAR_SCRIPT_URL);
-
- /* set the variable */
- var = apr_pstrcat(r->pool, ap_http_method(r), "://", thisserver, thisport,
- thisurl, NULL);
- apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URI, var);
-
- if (!(saved_rulestatus = apr_table_get(r->notes,"mod_rewrite_rewritten"))) {
- /* if filename was not initially set,
- * we start with the requested URI
- */
- if (r->filename == NULL) {
- r->filename = apr_pstrdup(r->pool, r->uri);
- rewritelog((r, 2, NULL, "init rewrite engine with requested uri %s",
- r->filename));
- }
- else {
- rewritelog((r, 2, NULL, "init rewrite engine with passed filename "
- "%s. Original uri = %s", r->filename, r->uri));
- }
-
- /*
- * now apply the rules ...
- */
- rulestatus = apply_rewrite_list(r, conf->rewriterules, NULL);
- apr_table_set(r->notes,"mod_rewrite_rewritten",
- apr_psprintf(r->pool,"%d",rulestatus));
- }
- else {
- rewritelog((r, 2, NULL, "uri already rewritten. Status %s, Uri %s, "
- "r->filename %s", saved_rulestatus, r->uri, r->filename));
-
- rulestatus = atoi(saved_rulestatus);
- }
-
- if (rulestatus) {
- unsigned skip;
- apr_size_t flen;
-
- if (ACTION_STATUS == rulestatus) {
- int n = r->status;
-
- r->status = HTTP_OK;
- return n;
- }
-
- flen = strlen(r->filename);
- if (flen > 6 && strncmp(r->filename, "proxy:", 6) == 0) {
- /* it should be go on as an internal proxy request */
-
- /* check if the proxy module is enabled, so
- * we can actually use it!
- */
- if (!proxy_available) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "attempt to make remote request from mod_rewrite "
- "without proxy enabled: %s", r->filename);
- return HTTP_FORBIDDEN;
- }
-
- /* make sure the QUERY_STRING and
- * PATH_INFO parts get incorporated
- */
- if (r->path_info != NULL) {
- r->filename = apr_pstrcat(r->pool, r->filename,
- r->path_info, NULL);
- }
- if (r->args != NULL &&
- r->uri == r->unparsed_uri) {
- /* see proxy_http:proxy_http_canon() */
- r->filename = apr_pstrcat(r->pool, r->filename,
- "?", r->args, NULL);
- }
-
- /* now make sure the request gets handled by the proxy handler */
- if (PROXYREQ_NONE == r->proxyreq) {
- r->proxyreq = PROXYREQ_REVERSE;
- }
- r->handler = "proxy-server";
-
- rewritelog((r, 1, NULL, "go-ahead with proxy request %s [OK]",
- r->filename));
- return OK;
- }
- else if ((skip = is_absolute_uri(r->filename)) > 0) {
- int n;
-
- /* it was finally rewritten to a remote URL */
-
- if (rulestatus != ACTION_NOESCAPE) {
- rewritelog((r, 1, NULL, "escaping %s for redirect",
- r->filename));
- r->filename = escape_absolute_uri(r->pool, r->filename, skip);
- }
-
- /* append the QUERY_STRING part */
- if (r->args) {
- r->filename = apr_pstrcat(r->pool, r->filename, "?",
- (rulestatus == ACTION_NOESCAPE)
- ? r->args
- : ap_escape_uri(r->pool, r->args),
- NULL);
- }
-
- /* determine HTTP redirect response code */
- if (ap_is_HTTP_REDIRECT(r->status)) {
- n = r->status;
- r->status = HTTP_OK; /* make Apache kernel happy */
- }
- else {
- n = HTTP_MOVED_TEMPORARILY;
- }
-
- /* now do the redirection */
- apr_table_setn(r->headers_out, "Location", r->filename);
- rewritelog((r, 1, NULL, "redirect to %s [REDIRECT/%d]", r->filename,
- n));
-
- return n;
- }
- else if (flen > 12 && strncmp(r->filename, "passthrough:", 12) == 0) {
- /*
- * Hack because of underpowered API: passing the current
- * rewritten filename through to other URL-to-filename handlers
- * just as it were the requested URL. This is to enable
- * post-processing by mod_alias, etc. which always act on
- * r->uri! The difference here is: We do not try to
- * add the document root
- */
- r->uri = apr_pstrdup(r->pool, r->filename+12);
- return DECLINED;
- }
- else {
- /* it was finally rewritten to a local path */
-
- /* expand "/~user" prefix */
-#if APR_HAS_USER
- r->filename = expand_tildepaths(r, r->filename);
-#endif
- rewritelog((r, 2, NULL, "local path result: %s", r->filename));
-
- /* the filename must be either an absolute local path or an
- * absolute local URL.
- */
- if ( *r->filename != '/'
- && !ap_os_is_path_absolute(r->pool, r->filename)) {
- return HTTP_BAD_REQUEST;
- }
-
- /* if there is no valid prefix, we call
- * the translator from the core and
- * prefix the filename with document_root
- *
- * NOTICE:
- * We cannot leave out the prefix_stat because
- * - when we always prefix with document_root
- * then no absolute path can be created, e.g. via
- * emulating a ScriptAlias directive, etc.
- * - when we always NOT prefix with document_root
- * then the files under document_root have to
- * be references directly and document_root
- * gets never used and will be a dummy parameter -
- * this is also bad
- *
- * BUT:
- * Under real Unix systems this is no problem,
- * because we only do stat() on the first directory
- * and this gets cached by the kernel for along time!
- */
- if (!prefix_stat(r->filename, r->pool)) {
- int res;
- char *tmp = r->uri;
-
- r->uri = r->filename;
- res = ap_core_translate(r);
- r->uri = tmp;
-
- if (res != OK) {
- rewritelog((r, 1, NULL, "prefixing with document_root of %s"
- " FAILED", r->filename));
-
- return res;
- }
-
- rewritelog((r, 2, NULL, "prefixed with document_root to %s",
- r->filename));
- }
-
- rewritelog((r, 1, NULL, "go-ahead with %s [OK]", r->filename));
- return OK;
- }
- }
- else {
- rewritelog((r, 1, NULL, "pass through %s", r->filename));
- return DECLINED;
- }
-}
-
-/*
- * Fixup hook
- * [RewriteRules in directory context]
- */
-static int hook_fixup(request_rec *r)
-{
- rewrite_perdir_conf *dconf;
- char *cp;
- char *cp2;
- const char *ccp;
- apr_size_t l;
- int rulestatus;
- int n;
- char *ofilename;
- int is_proxyreq;
-
- dconf = (rewrite_perdir_conf *)ap_get_module_config(r->per_dir_config,
- &rewrite_module);
-
- /* if there is no per-dir config we return immediately */
- if (dconf == NULL) {
- return DECLINED;
- }
-
- /* if there are no real (i.e. no RewriteRule directives!)
- per-dir config of us, we return also immediately */
- if (dconf->directory == NULL) {
- return DECLINED;
- }
-
- /*
- * Proxy request?
- */
- is_proxyreq = ( r->proxyreq && r->filename
- && !strncmp(r->filename, "proxy:", 6));
-
- /*
- * .htaccess file is called before really entering the directory, i.e.:
- * URL: http://localhost/foo and .htaccess is located in foo directory
- * Ignore such attempts, since they may lead to undefined behaviour.
- */
- if (!is_proxyreq) {
- l = strlen(dconf->directory) - 1;
- if (r->filename && strlen(r->filename) == l &&
- (dconf->directory)[l] == '/' &&
- !strncmp(r->filename, dconf->directory, l)) {
- return DECLINED;
- }
- }
-
- /*
- * only do something under runtime if the engine is really enabled,
- * for this directory, else return immediately!
- */
- if (dconf->state == ENGINE_DISABLED) {
- return DECLINED;
- }
-
- /*
- * Do the Options check after engine check, so
- * the user is able to explicitely turn RewriteEngine Off.
- */
- if (!(ap_allow_options(r) & (OPT_SYM_LINKS | OPT_SYM_OWNER))) {
- /* FollowSymLinks is mandatory! */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Options FollowSymLinks or SymLinksIfOwnerMatch is off "
- "which implies that RewriteRule directive is forbidden: "
- "%s", r->filename);
- return HTTP_FORBIDDEN;
- }
-
- /*
- * remember the current filename before rewriting for later check
- * to prevent deadlooping because of internal redirects
- * on final URL/filename which can be equal to the inital one.
- */
- ofilename = r->filename;
-
- /*
- * now apply the rules ...
- */
- rulestatus = apply_rewrite_list(r, dconf->rewriterules, dconf->directory);
- if (rulestatus) {
- unsigned skip;
-
- if (ACTION_STATUS == rulestatus) {
- int n = r->status;
-
- r->status = HTTP_OK;
- return n;
- }
-
- l = strlen(r->filename);
- if (l > 6 && strncmp(r->filename, "proxy:", 6) == 0) {
- /* it should go on as an internal proxy request */
-
- /* make sure the QUERY_STRING and
- * PATH_INFO parts get incorporated
- * (r->path_info was already appended by the
- * rewriting engine because of the per-dir context!)
- */
- if (r->args != NULL) {
- r->filename = apr_pstrcat(r->pool, r->filename,
- "?", r->args, NULL);
- }
-
- /* now make sure the request gets handled by the proxy handler */
- if (PROXYREQ_NONE == r->proxyreq) {
- r->proxyreq = PROXYREQ_REVERSE;
- }
- r->handler = "proxy-server";
-
- rewritelog((r, 1, dconf->directory, "go-ahead with proxy request "
- "%s [OK]", r->filename));
- return OK;
- }
- else if ((skip = is_absolute_uri(r->filename)) > 0) {
- /* it was finally rewritten to a remote URL */
-
- /* because we are in a per-dir context
- * first try to replace the directory with its base-URL
- * if there is a base-URL available
- */
- if (dconf->baseurl != NULL) {
- /* skip 'scheme://' */
- cp = r->filename + skip;
-
- if ((cp = ap_strchr(cp, '/')) != NULL && *(++cp)) {
- rewritelog((r, 2, dconf->directory,
- "trying to replace prefix %s with %s",
- dconf->directory, dconf->baseurl));
-
- /* I think, that hack needs an explanation:
- * well, here is it:
- * mod_rewrite was written for unix systems, were
- * absolute file-system paths start with a slash.
- * URL-paths _also_ start with slashes, so they
- * can be easily compared with system paths.
- *
- * the following assumes, that the actual url-path
- * may be prefixed by the current directory path and
- * tries to replace the system path with the RewriteBase
- * URL.
- * That assumption is true if we use a RewriteRule like
- *
- * RewriteRule ^foo bar [R]
- *
- * (see apply_rewrite_rule function)
- * However on systems that don't have a / as system
- * root this will never match, so we skip the / after the
- * hostname and compare/substitute only the stuff after it.
- *
- * (note that cp was already increased to the right value)
- */
- cp2 = subst_prefix_path(r, cp, (*dconf->directory == '/')
- ? dconf->directory + 1
- : dconf->directory,
- dconf->baseurl + 1);
- if (strcmp(cp2, cp) != 0) {
- *cp = '\0';
- r->filename = apr_pstrcat(r->pool, r->filename,
- cp2, NULL);
- }
- }
- }
-
- /* now prepare the redirect... */
- if (rulestatus != ACTION_NOESCAPE) {
- rewritelog((r, 1, dconf->directory, "escaping %s for redirect",
- r->filename));
- r->filename = escape_absolute_uri(r->pool, r->filename, skip);
- }
-
- /* append the QUERY_STRING part */
- if (r->args) {
- r->filename = apr_pstrcat(r->pool, r->filename, "?",
- (rulestatus == ACTION_NOESCAPE)
- ? r->args
- : ap_escape_uri(r->pool, r->args),
- NULL);
- }
-
- /* determine HTTP redirect response code */
- if (ap_is_HTTP_REDIRECT(r->status)) {
- n = r->status;
- r->status = HTTP_OK; /* make Apache kernel happy */
- }
- else {
- n = HTTP_MOVED_TEMPORARILY;
- }
-
- /* now do the redirection */
- apr_table_setn(r->headers_out, "Location", r->filename);
- rewritelog((r, 1, dconf->directory, "redirect to %s [REDIRECT/%d]",
- r->filename, n));
- return n;
- }
- else {
- /* it was finally rewritten to a local path */
-
- /* if someone used the PASSTHROUGH flag in per-dir
- * context we just ignore it. It is only useful
- * in per-server context
- */
- if (l > 12 && strncmp(r->filename, "passthrough:", 12) == 0) {
- r->filename = apr_pstrdup(r->pool, r->filename+12);
- }
-
- /* the filename must be either an absolute local path or an
- * absolute local URL.
- */
- if ( *r->filename != '/'
- && !ap_os_is_path_absolute(r->pool, r->filename)) {
- return HTTP_BAD_REQUEST;
- }
-
- /* Check for deadlooping:
- * At this point we KNOW that at least one rewriting
- * rule was applied, but when the resulting URL is
- * the same as the initial URL, we are not allowed to
- * use the following internal redirection stuff because
- * this would lead to a deadloop.
- */
- if (strcmp(r->filename, ofilename) == 0) {
- rewritelog((r, 1, dconf->directory, "initial URL equal rewritten"
- " URL: %s [IGNORING REWRITE]", r->filename));
- return OK;
- }
-
- /* if there is a valid base-URL then substitute
- * the per-dir prefix with this base-URL if the
- * current filename still is inside this per-dir
- * context. If not then treat the result as a
- * plain URL
- */
- if (dconf->baseurl != NULL) {
- rewritelog((r, 2, dconf->directory, "trying to replace prefix "
- "%s with %s", dconf->directory, dconf->baseurl));
-
- r->filename = subst_prefix_path(r, r->filename,
- dconf->directory,
- dconf->baseurl);
- }
- else {
- /* if no explicit base-URL exists we assume
- * that the directory prefix is also a valid URL
- * for this webserver and only try to remove the
- * document_root if it is prefix
- */
- if ((ccp = ap_document_root(r)) != NULL) {
- /* strip trailing slash */
- l = strlen(ccp);
- if (ccp[l-1] == '/') {
- --l;
- }
- if (!strncmp(r->filename, ccp, l) &&
- r->filename[l] == '/') {
- rewritelog((r, 2,dconf->directory, "strip document_root"
- " prefix: %s -> %s", r->filename,
- r->filename+l));
-
- r->filename = apr_pstrdup(r->pool, r->filename+l);
- }
- }
- }
-
- /* now initiate the internal redirect */
- rewritelog((r, 1, dconf->directory, "internal redirect with %s "
- "[INTERNAL REDIRECT]", r->filename));
- r->filename = apr_pstrcat(r->pool, "redirect:", r->filename, NULL);
- r->handler = "redirect-handler";
- return OK;
- }
- }
- else {
- rewritelog((r, 1, dconf->directory, "pass through %s", r->filename));
- return DECLINED;
- }
-}
-
-/*
- * MIME-type hook
- * [T=...,H=...] execution
- */
-static int hook_mimetype(request_rec *r)
-{
- const char *t;
-
- /* type */
- t = apr_table_get(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR);
- if (t && *t) {
- rewritelog((r, 1, NULL, "force filename %s to have MIME-type '%s'",
- r->filename, t));
-
- ap_set_content_type(r, t);
- }
-
- /* handler */
- t = apr_table_get(r->notes, REWRITE_FORCED_HANDLER_NOTEVAR);
- if (t && *t) {
- rewritelog((r, 1, NULL, "force filename %s to have the "
- "Content-handler '%s'", r->filename, t));
-
- r->handler = t;
- }
-
- return OK;
-}
-
-/* check whether redirect limit is reached */
-static int is_redirect_limit_exceeded(request_rec *r)
-{
- request_rec *top = r;
- rewrite_request_conf *reqc;
- rewrite_perdir_conf *dconf;
-
- /* we store it in the top request */
- while (top->main) {
- top = top->main;
- }
- while (top->prev) {
- top = top->prev;
- }
-
- /* fetch our config */
- reqc = (rewrite_request_conf *) ap_get_module_config(top->request_config,
- &rewrite_module);
-
- /* no config there? create one. */
- if (!reqc) {
- rewrite_server_conf *sconf;
-
- reqc = apr_palloc(top->pool, sizeof(rewrite_request_conf));
- sconf = ap_get_module_config(r->server->module_config, &rewrite_module);
-
- reqc->redirects = 0;
- reqc->redirect_limit = sconf->redirect_limit
- ? sconf->redirect_limit
- : REWRITE_REDIRECT_LIMIT;
-
- /* associate it with this request */
- ap_set_module_config(top->request_config, &rewrite_module, reqc);
- }
-
- /* allow to change the limit during redirects. */
- dconf = (rewrite_perdir_conf *)ap_get_module_config(r->per_dir_config,
- &rewrite_module);
-
- /* 0 == unset; take server conf ... */
- if (dconf->redirect_limit) {
- reqc->redirect_limit = dconf->redirect_limit;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "mod_rewrite's internal redirect status: %d/%d.",
- reqc->redirects, reqc->redirect_limit);
-
- /* and now give the caller a hint */
- return (reqc->redirects++ >= reqc->redirect_limit);
-}
-
-/*
- * "content" handler for internal redirects
- */
-static int handler_redirect(request_rec *r)
-{
- if (strcmp(r->handler, "redirect-handler")) {
- return DECLINED;
- }
-
- /* just make sure that we are really meant! */
- if (strncmp(r->filename, "redirect:", 9) != 0) {
- return DECLINED;
- }
-
- if (is_redirect_limit_exceeded(r)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "mod_rewrite: maximum number of internal redirects "
- "reached. Assuming configuration error. Use "
- "'RewriteOptions MaxRedirects' to increase the limit "
- "if neccessary.");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* now do the internal redirect */
- ap_internal_redirect(apr_pstrcat(r->pool, r->filename+9,
- r->args ? "?" : NULL, r->args, NULL), r);
-
- /* and return gracefully */
- return OK;
-}
-
-
-/*
- * +-------------------------------------------------------+
- * | |
- * | Module paraphernalia
- * | |
- * +-------------------------------------------------------+
- */
-
-#ifdef REWRITELOG_DISABLED
-static const char *fake_rewritelog(cmd_parms *cmd, void *dummy, const char *a1)
-{
- return "RewriteLog and RewriteLogLevel are not supported by this build "
- "of mod_rewrite because it was compiled using the "
- "-DREWRITELOG_DISABLED compiler option. You have to recompile "
- "mod_rewrite WITHOUT this option in order to use the rewrite log.";
-}
-#endif
-
-static const command_rec command_table[] = {
- AP_INIT_FLAG( "RewriteEngine", cmd_rewriteengine, NULL, OR_FILEINFO,
- "On or Off to enable or disable (default) the whole "
- "rewriting engine"),
- AP_INIT_ITERATE( "RewriteOptions", cmd_rewriteoptions, NULL, OR_FILEINFO,
- "List of option strings to set"),
- AP_INIT_TAKE1( "RewriteBase", cmd_rewritebase, NULL, OR_FILEINFO,
- "the base URL of the per-directory context"),
- AP_INIT_RAW_ARGS("RewriteCond", cmd_rewritecond, NULL, OR_FILEINFO,
- "an input string and a to be applied regexp-pattern"),
- AP_INIT_RAW_ARGS("RewriteRule", cmd_rewriterule, NULL, OR_FILEINFO,
- "an URL-applied regexp-pattern and a substitution URL"),
- AP_INIT_TAKE2( "RewriteMap", cmd_rewritemap, NULL, RSRC_CONF,
- "a mapname and a filename"),
- AP_INIT_TAKE1( "RewriteLock", cmd_rewritelock, NULL, RSRC_CONF,
- "the filename of a lockfile used for inter-process "
- "synchronization"),
-#ifndef REWRITELOG_DISABLED
- AP_INIT_TAKE1( "RewriteLog", cmd_rewritelog, NULL, RSRC_CONF,
- "the filename of the rewriting logfile"),
- AP_INIT_TAKE1( "RewriteLogLevel", cmd_rewriteloglevel, NULL, RSRC_CONF,
- "the level of the rewriting logfile verbosity "
- "(0=none, 1=std, .., 9=max)"),
-#else
- AP_INIT_TAKE1( "RewriteLog", fake_rewritelog, NULL, RSRC_CONF,
- "[DISABLED] the filename of the rewriting logfile"),
- AP_INIT_TAKE1( "RewriteLogLevel", fake_rewritelog, NULL, RSRC_CONF,
- "[DISABLED] the level of the rewriting logfile verbosity"),
-#endif
- { NULL }
-};
-
-static void ap_register_rewrite_mapfunc(char *name, rewrite_mapfunc_t *func)
-{
- apr_hash_set(mapfunc_hash, name, strlen(name), (const void *)func);
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- /* fixup after mod_proxy, so that the proxied url will not
- * escaped accidentally by mod_proxy's fixup.
- */
- static const char * const aszPre[]={ "mod_proxy.c", NULL };
-
- APR_REGISTER_OPTIONAL_FN(ap_register_rewrite_mapfunc);
-
- ap_hook_handler(handler_redirect, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_child_init(init_child, NULL, NULL, APR_HOOK_MIDDLE);
-
- ap_hook_fixups(hook_fixup, aszPre, NULL, APR_HOOK_FIRST);
- ap_hook_fixups(hook_mimetype, NULL, NULL, APR_HOOK_LAST);
- ap_hook_translate_name(hook_uri2file, NULL, NULL, APR_HOOK_FIRST);
-}
-
- /* the main config structure */
-module AP_MODULE_DECLARE_DATA rewrite_module = {
- STANDARD20_MODULE_STUFF,
- config_perdir_create, /* create per-dir config structures */
- config_perdir_merge, /* merge per-dir config structures */
- config_server_create, /* create per-server config structures */
- config_server_merge, /* merge per-server config structures */
- command_table, /* table of config file commands */
- register_hooks /* register hooks */
-};
-
-/*EOF*/
diff --git a/modules/mappers/mod_rewrite.dsp b/modules/mappers/mod_rewrite.dsp
deleted file mode 100644
index 0a267a3abc..0000000000
--- a/modules/mappers/mod_rewrite.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_rewrite" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_rewrite - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_rewrite.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_rewrite.mak" CFG="mod_rewrite - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_rewrite - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_rewrite - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_rewrite - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../ssl" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_rewrite_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_rewrite - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../ssl" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_rewrite_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_rewrite - Win32 Release"
-# Name "mod_rewrite - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_rewrite.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_rewrite.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_rewrite - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_rewrite.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_rewrite.so "rewrite_module for Apache" ../../include/ap_release.h > .\mod_rewrite.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_rewrite - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_rewrite.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_rewrite.so "rewrite_module for Apache" ../../include/ap_release.h > .\mod_rewrite.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_rewrite.exp b/modules/mappers/mod_rewrite.exp
deleted file mode 100644
index 8f2165bfe0..0000000000
--- a/modules/mappers/mod_rewrite.exp
+++ /dev/null
@@ -1 +0,0 @@
-rewrite_module
diff --git a/modules/mappers/mod_rewrite.h b/modules/mappers/mod_rewrite.h
deleted file mode 100644
index 9fdaf702f4..0000000000
--- a/modules/mappers/mod_rewrite.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_REWRITE_H
-#define MOD_REWRITE_H 1
-
-#include "apr_optional.h"
-#include "httpd.h"
-
-/* rewrite map function prototype */
-typedef char *(rewrite_mapfunc_t)(request_rec *r, char *key);
-
-/* optional function declaration */
-APR_DECLARE_OPTIONAL_FN(void, ap_register_rewrite_mapfunc,
- (char *name, rewrite_mapfunc_t *func));
-
-#endif /* MOD_REWRITE_H */
diff --git a/modules/mappers/mod_so.c b/modules/mappers/mod_so.c
deleted file mode 100644
index 2f16beb18e..0000000000
--- a/modules/mappers/mod_so.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This module is used to load Apache modules at runtime. This means that the
- * server functionality can be extended without recompiling and even without
- * taking the server down at all. Only a HUP or AP_SIG_GRACEFUL signal
- * needs to be sent to the server to reload the dynamically loaded modules.
- *
- * To use, you'll first need to build your module as a shared library, then
- * update your configuration (httpd.conf) to get the Apache core to load the
- * module at start-up.
- *
- * The easiest way to build a module as a shared library is to use the
- * `SharedModule' command in the Configuration file, instead of `AddModule'.
- * You should also change the file extension from `.o' to `.so'. So, for
- * example, to build the status module as a shared library edit Configuration
- * and change
- * AddModule modules/standard/mod_status.o
- * to
- * SharedModule modules/standard/mod_status.so
- *
- * Run Configure and make. Now Apache's httpd binary will _not_ include
- * mod_status. Instead a shared object called mod_status.so will be build, in
- * the modules/standard directory. You can build most of the modules as shared
- * libraries like this.
- *
- * To use the shared module, move the .so file(s) into an appropriate
- * directory. You might like to create a directory called "modules" under you
- * server root for this (e.g. /usr/local/httpd/modules).
- *
- * Then edit your conf/httpd.conf file, and add LoadModule lines. For
- * example
- * LoadModule status_module modules/mod_status.so
- *
- * The first argument is the module's structure name (look at the end of the
- * module source to find this). The second option is the path to the module
- * file, relative to the server root. Put these directives right at the top
- * of your httpd.conf file.
- *
- * Now you can start Apache. A message will be logged at "debug" level to your
- * error_log to confirm that the module(s) are loaded (use "LogLevel debug"
- * directive to get these log messages).
- *
- * If you edit the LoadModule directives while the server is live you can get
- * Apache to re-load the modules by sending it a HUP or AP_SIG_GRACEFUL
- * signal as normal. You can use this to dynamically change the capability
- * of your server without bringing it down.
- *
- * Because currently there is only limited builtin support in the Configure
- * script for creating the shared library files (`.so'), please consult your
- * vendors cc(1), ld(1) and dlopen(3) manpages to find out the appropriate
- * compiler and linker flags and insert them manually into the Configuration
- * file under CFLAGS_SHLIB, LDFLAGS_SHLIB and LDFLAGS_SHLIB_EXPORT.
- *
- * If you still have problems figuring out the flags both try the paper
- * http://developer.netscape.com/library/documentation/enterprise
- * /unix/svrplug.htm#1013807
- * or install a Perl 5 interpreter on your platform and then run the command
- *
- * $ perl -V:usedl -V:ccdlflags -V:cccdlflags -V:lddlflags
- *
- * This gives you what type of dynamic loading Perl 5 uses on your platform
- * and which compiler and linker flags Perl 5 uses to create the shared object
- * files.
- *
- * Another location where you can find useful hints is the `ltconfig' script
- * of the GNU libtool 1.2 package. Search for your platform name inside the
- * various "case" constructs.
- *
- */
-
-#include "apr.h"
-#include "apr_dso.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "ap_config.h"
-
-#include "mod_so.h"
-
-module AP_MODULE_DECLARE_DATA so_module;
-
-
-/*
- * Server configuration to keep track of actually
- * loaded modules and the corresponding module name.
- */
-
-typedef struct so_server_conf {
- apr_array_header_t *loaded_modules;
-} so_server_conf;
-
-static void *so_sconf_create(apr_pool_t *p, server_rec *s)
-{
- so_server_conf *soc;
-
- soc = (so_server_conf *)apr_pcalloc(p, sizeof(so_server_conf));
- soc->loaded_modules = apr_array_make(p, DYNAMIC_MODULE_LIMIT,
- sizeof(ap_module_symbol_t));
-
- return (void *)soc;
-}
-
-#ifndef NO_DLOPEN
-
-/*
- * This is the cleanup for a loaded shared object. It unloads the module.
- * This is called as a cleanup function from the core.
- */
-
-static apr_status_t unload_module(void *data)
-{
- ap_module_symbol_t *modi = (ap_module_symbol_t*)data;
-
- /* only unload if module information is still existing */
- if (modi->modp == NULL)
- return APR_SUCCESS;
-
- /* remove the module pointer from the core structure */
- ap_remove_loaded_module(modi->modp);
-
- /* destroy the module information */
- modi->modp = NULL;
- modi->name = NULL;
- return APR_SUCCESS;
-}
-
-/*
- * This is called for the directive LoadModule and actually loads
- * a shared object file into the address space of the server process.
- */
-
-static const char *load_module(cmd_parms *cmd, void *dummy,
- const char *modname, const char *filename)
-{
- apr_dso_handle_t *modhandle;
- apr_dso_handle_sym_t modsym;
- module *modp;
- const char *szModuleFile = ap_server_root_relative(cmd->pool, filename);
- so_server_conf *sconf;
- ap_module_symbol_t *modi;
- ap_module_symbol_t *modie;
- int i;
- const char *error;
-
- /* we need to setup this value for dummy to make sure that we don't try
- * to add a non-existant tree into the build when we return to
- * execute_now.
- */
- *(ap_directive_t **)dummy = NULL;
-
- if (!szModuleFile) {
- return apr_pstrcat(cmd->pool, "Invalid LoadModule path ",
- filename, NULL);
- }
-
- /*
- * check for already existing module
- * If it already exists, we have nothing to do
- * Check both dynamically-loaded modules and statically-linked modules.
- */
- sconf = (so_server_conf *)ap_get_module_config(cmd->server->module_config,
- &so_module);
- modie = (ap_module_symbol_t *)sconf->loaded_modules->elts;
- for (i = 0; i < sconf->loaded_modules->nelts; i++) {
- modi = &modie[i];
- if (modi->name != NULL && strcmp(modi->name, modname) == 0) {
- ap_log_perror(APLOG_MARK, APLOG_WARNING, 0,
- cmd->pool, "module %s is already loaded, skipping",
- modname);
- return NULL;
- }
- }
-
- for (i = 0; ap_preloaded_modules[i]; i++) {
- const char *preload_name;
- apr_size_t preload_len;
- apr_size_t thismod_len;
-
- modp = ap_preloaded_modules[i];
-
- /* make sure we're comparing apples with apples
- * make sure name of preloaded module is mod_FOO.c
- * make sure name of structure being loaded is FOO_module
- */
-
- if (memcmp(modp->name, "mod_", 4)) {
- continue;
- }
-
- preload_name = modp->name + strlen("mod_");
- preload_len = strlen(preload_name) - 2;
-
- if (strlen(modname) <= strlen("_module")) {
- continue;
- }
- thismod_len = strlen(modname) - strlen("_module");
- if (strcmp(modname + thismod_len, "_module")) {
- continue;
- }
-
- if (thismod_len != preload_len) {
- continue;
- }
-
- if (!memcmp(modname, preload_name, preload_len)) {
- return apr_pstrcat(cmd->pool, "module ", modname,
- " is built-in and can't be loaded",
- NULL);
- }
- }
-
- modi = apr_array_push(sconf->loaded_modules);
- modi->name = modname;
-
- /*
- * Load the file into the Apache address space
- */
- if (apr_dso_load(&modhandle, szModuleFile, cmd->pool) != APR_SUCCESS) {
- char my_error[256];
-
- return apr_pstrcat(cmd->pool, "Cannot load ", szModuleFile,
- " into server: ",
- apr_dso_error(modhandle, my_error, sizeof(my_error)),
- NULL);
- }
- ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, cmd->pool,
- "loaded module %s", modname);
-
- /*
- * Retrieve the pointer to the module structure through the module name:
- * First with the hidden variant (prefix `AP_') and then with the plain
- * symbol name.
- */
- if (apr_dso_sym(&modsym, modhandle, modname) != APR_SUCCESS) {
- char my_error[256];
-
- return apr_pstrcat(cmd->pool, "Can't locate API module structure `",
- modname, "' in file ", szModuleFile, ": ",
- apr_dso_error(modhandle, my_error, sizeof(my_error)),
- NULL);
- }
- modp = (module*) modsym;
- modp->dynamic_load_handle = (apr_dso_handle_t *)modhandle;
- modi->modp = modp;
-
- /*
- * Make sure the found module structure is really a module structure
- *
- */
- if (modp->magic != MODULE_MAGIC_COOKIE) {
- return apr_pstrcat(cmd->pool, "API module structure `", modname,
- "' in file ", szModuleFile, " is garbled -"
- " perhaps this is not an Apache module DSO?", NULL);
- }
-
- /*
- * Add this module to the Apache core structures
- */
- error = ap_add_loaded_module(modp, cmd->pool);
- if (error) {
- return error;
- }
-
- /*
- * Register a cleanup in the config apr_pool_t (normally pconf). When
- * we do a restart (or shutdown) this cleanup will cause the
- * shared object to be unloaded.
- */
- apr_pool_cleanup_register(cmd->pool, modi, unload_module, apr_pool_cleanup_null);
-
- /*
- * Finally we need to run the configuration process for the module
- */
- ap_single_module_configure(cmd->pool, cmd->server, modp);
-
- return NULL;
-}
-
-/*
- * This implements the LoadFile directive and loads an arbitrary
- * shared object file into the adress space of the server process.
- */
-
-static const char *load_file(cmd_parms *cmd, void *dummy, const char *filename)
-{
- apr_dso_handle_t *handle;
- const char *file;
-
- file = ap_server_root_relative(cmd->pool, filename);
-
- if (!file) {
- return apr_pstrcat(cmd->pool, "Invalid LoadFile path ",
- filename, NULL);
- }
-
- if (apr_dso_load(&handle, file, cmd->pool) != APR_SUCCESS) {
- char my_error[256];
-
- return apr_pstrcat(cmd->pool, "Cannot load ", filename,
- " into server: ",
- apr_dso_error(handle, my_error, sizeof(my_error)),
- NULL);
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
- "loaded file %s", filename);
-
- return NULL;
-}
-
-static module *ap_find_loaded_module_symbol(server_rec *s, const char *modname)
-{
- so_server_conf *sconf;
- ap_module_symbol_t *modi;
- ap_module_symbol_t *modie;
- int i;
-
- sconf = (so_server_conf *)ap_get_module_config(s->module_config,
- &so_module);
- modie = (ap_module_symbol_t *)sconf->loaded_modules->elts;
-
- for (i = 0; i < sconf->loaded_modules->nelts; i++) {
- modi = &modie[i];
- if (modi->name != NULL && strcmp(modi->name, modname) == 0) {
- return modi->modp;
- }
- }
- return NULL;
-}
-
-static void ap_dump_loaded_modules(apr_pool_t* p, server_rec* s)
-{
- ap_module_symbol_t *modie;
- ap_module_symbol_t *modi;
- so_server_conf *sconf;
- int i;
- apr_file_t *out = NULL;
- apr_file_open_stderr(&out, p);
-
- apr_file_printf(out, "Loaded Modules:\n");
-
- sconf = (so_server_conf *)ap_get_module_config(s->module_config,
- &so_module);
- for (i = 0; ; i++) {
- modi = &ap_prelinked_module_symbols[i];
- if (modi->name != NULL) {
- apr_file_printf(out, " %s (static)\n", modi->name);
- }
- else {
- break;
- }
- }
-
- modie = (ap_module_symbol_t *)sconf->loaded_modules->elts;
- for (i = 0; i < sconf->loaded_modules->nelts; i++) {
- modi = &modie[i];
- if (modi->name != NULL) {
- apr_file_printf(out, " %s (shared)\n", modi->name);
- }
- }
-}
-
-#else /* not NO_DLOPEN */
-
-static const char *load_file(cmd_parms *cmd, void *dummy, const char *filename)
-{
- ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, cmd->pool,
- "WARNING: LoadFile not supported on this platform");
- return NULL;
-}
-
-static const char *load_module(cmd_parms *cmd, void *dummy,
- const char *modname, const char *filename)
-{
- ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, cmd->pool,
- "WARNING: LoadModule not supported on this platform");
- return NULL;
-}
-
-#endif /* NO_DLOPEN */
-
-static void register_hooks(apr_pool_t *p)
-{
-#ifndef NO_DLOPEN
- APR_REGISTER_OPTIONAL_FN(ap_find_loaded_module_symbol);
- APR_REGISTER_OPTIONAL_FN(ap_dump_loaded_modules);
-#endif
-}
-
-static const command_rec so_cmds[] = {
- AP_INIT_TAKE2("LoadModule", load_module, NULL, RSRC_CONF | EXEC_ON_READ,
- "a module name and the name of a shared object file to load it from"),
- AP_INIT_ITERATE("LoadFile", load_file, NULL, RSRC_CONF | EXEC_ON_READ,
- "shared object file or library to load into the server at runtime"),
- { NULL }
-};
-
-module AP_MODULE_DECLARE_DATA so_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-dir config */
- NULL, /* merge per-dir config */
- so_sconf_create, /* server config */
- NULL, /* merge server config */
- so_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_so.h b/modules/mappers/mod_so.h
deleted file mode 100644
index 8c32c820b2..0000000000
--- a/modules/mappers/mod_so.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_SO_H
-#define MOD_SO_H 1
-
-#include "apr_optional.h"
-#include "httpd.h"
-
-/* optional function declaration */
-APR_DECLARE_OPTIONAL_FN(module *, ap_find_loaded_module_symbol,
- (server_rec *s, const char *modname));
-APR_DECLARE_OPTIONAL_FN(void, ap_dump_loaded_modules,
- (apr_pool_t* p, server_rec *s));
-
-#endif /* MOD_SO_H */
-
diff --git a/modules/mappers/mod_speling.c b/modules/mappers/mod_speling.c
deleted file mode 100644
index 32d7d4500f..0000000000
--- a/modules/mappers/mod_speling.c
+++ /dev/null
@@ -1,532 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define WANT_BASENAME_MATCH
-
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-
-/* mod_speling.c - by Alexei Kosut <akosut@organic.com> June, 1996
- *
- * This module is transparent, and simple. It attempts to correct
- * misspellings of URLs that users might have entered, namely by checking
- * capitalizations. If it finds a match, it sends a redirect.
- *
- * 08-Aug-1997 <Martin.Kraemer@Mch.SNI.De>
- * o Upgraded module interface to apache_1.3a2-dev API (more NULL's in
- * speling_module).
- * o Integrated tcsh's "spelling correction" routine which allows one
- * misspelling (character insertion/omission/typo/transposition).
- * Rewrote it to ignore case as well. This ought to catch the majority
- * of misspelled requests.
- * o Commented out the second pass where files' suffixes are stripped.
- * Given the better hit rate of the first pass, this rather ugly
- * (request index.html, receive index.db ?!?!) solution can be
- * omitted.
- * o wrote a "kind of" html page for mod_speling
- *
- * Activate it with "CheckSpelling On"
- */
-
-module AP_MODULE_DECLARE_DATA speling_module;
-
-typedef struct {
- int enabled;
-} spconfig;
-
-/*
- * Create a configuration specific to this module for a server or directory
- * location, and fill it with the default settings.
- *
- * The API says that in the absence of a merge function, the record for the
- * closest ancestor is used exclusively. That's what we want, so we don't
- * bother to have such a function.
- */
-
-static void *mkconfig(apr_pool_t *p)
-{
- spconfig *cfg = apr_pcalloc(p, sizeof(spconfig));
-
- cfg->enabled = 0;
- return cfg;
-}
-
-/*
- * Respond to a callback to create configuration record for a server or
- * vhost environment.
- */
-static void *create_mconfig_for_server(apr_pool_t *p, server_rec *s)
-{
- return mkconfig(p);
-}
-
-/*
- * Respond to a callback to create a config record for a specific directory.
- */
-static void *create_mconfig_for_directory(apr_pool_t *p, char *dir)
-{
- return mkconfig(p);
-}
-
-/*
- * Handler for the CheckSpelling directive, which is FLAG.
- */
-static const char *set_speling(cmd_parms *cmd, void *mconfig, int arg)
-{
- spconfig *cfg = (spconfig *) mconfig;
-
- cfg->enabled = arg;
- return NULL;
-}
-
-/*
- * Define the directives specific to this module. This structure is referenced
- * later by the 'module' structure.
- */
-static const command_rec speling_cmds[] =
-{
- AP_INIT_FLAG("CheckSpelling", set_speling, NULL, OR_OPTIONS,
- "whether or not to fix miscapitalized/misspelled requests"),
- { NULL }
-};
-
-typedef enum {
- SP_IDENTICAL = 0,
- SP_MISCAPITALIZED = 1,
- SP_TRANSPOSITION = 2,
- SP_MISSINGCHAR = 3,
- SP_EXTRACHAR = 4,
- SP_SIMPLETYPO = 5,
- SP_VERYDIFFERENT = 6
-} sp_reason;
-
-static const char *sp_reason_str[] =
-{
- "identical",
- "miscapitalized",
- "transposed characters",
- "character missing",
- "extra character",
- "mistyped character",
- "common basename",
-};
-
-typedef struct {
- const char *name;
- sp_reason quality;
-} misspelled_file;
-
-/*
- * spdist() is taken from Kernighan & Pike,
- * _The_UNIX_Programming_Environment_
- * and adapted somewhat to correspond better to psychological reality.
- * (Note the changes to the return values)
- *
- * According to Pollock and Zamora, CACM April 1984 (V. 27, No. 4),
- * page 363, the correct order for this is:
- * OMISSION = TRANSPOSITION > INSERTION > SUBSTITUTION
- * thus, it was exactly backwards in the old version. -- PWP
- *
- * This routine was taken out of tcsh's spelling correction code
- * (tcsh-6.07.04) and re-converted to apache data types ("char" type
- * instead of tcsh's NLS'ed "Char"). Plus it now ignores the case
- * during comparisons, so is a "approximate strcasecmp()".
- * NOTE that is still allows only _one_ real "typo",
- * it does NOT try to correct multiple errors.
- */
-
-static sp_reason spdist(const char *s, const char *t)
-{
- for (; apr_tolower(*s) == apr_tolower(*t); t++, s++) {
- if (*t == '\0') {
- return SP_MISCAPITALIZED; /* exact match (sans case) */
- }
- }
- if (*s) {
- if (*t) {
- if (s[1] && t[1] && apr_tolower(*s) == apr_tolower(t[1])
- && apr_tolower(*t) == apr_tolower(s[1])
- && strcasecmp(s + 2, t + 2) == 0) {
- return SP_TRANSPOSITION; /* transposition */
- }
- if (strcasecmp(s + 1, t + 1) == 0) {
- return SP_SIMPLETYPO; /* 1 char mismatch */
- }
- }
- if (strcasecmp(s + 1, t) == 0) {
- return SP_EXTRACHAR; /* extra character */
- }
- }
- if (*t && strcasecmp(s, t + 1) == 0) {
- return SP_MISSINGCHAR; /* missing character */
- }
- return SP_VERYDIFFERENT; /* distance too large to fix. */
-}
-
-static int sort_by_quality(const void *left, const void *rite)
-{
- return (int) (((misspelled_file *) left)->quality)
- - (int) (((misspelled_file *) rite)->quality);
-}
-
-static int check_speling(request_rec *r)
-{
- spconfig *cfg;
- char *good, *bad, *postgood, *url;
- apr_finfo_t dirent;
- int filoc, dotloc, urlen, pglen;
- apr_array_header_t *candidates = NULL;
- apr_dir_t *dir;
-
- cfg = ap_get_module_config(r->per_dir_config, &speling_module);
- if (!cfg->enabled) {
- return DECLINED;
- }
-
- /* We only want to worry about GETs */
- if (r->method_number != M_GET) {
- return DECLINED;
- }
-
- /* We've already got a file of some kind or another */
- if (r->proxyreq || (r->finfo.filetype != 0)) {
- return DECLINED;
- }
-
- /* This is a sub request - don't mess with it */
- if (r->main) {
- return DECLINED;
- }
-
- /* we default to reject path info (same as core handler) */
- if ((r->used_path_info != AP_REQ_ACCEPT_PATH_INFO) &&
- r->path_info && *r->path_info) {
- return DECLINED;
- }
-
- /*
- * The request should end up looking like this:
- * r->uri: /correct-url/mispelling/more
- * r->filename: /correct-file/mispelling r->path_info: /more
- *
- * So we do this in steps. First break r->filename into two pieces
- */
-
- filoc = ap_rind(r->filename, '/');
- /*
- * Don't do anything if the request doesn't contain a slash, or
- * requests "/"
- */
- if (filoc == -1 || strcmp(r->uri, "/") == 0) {
- return DECLINED;
- }
-
- /* good = /correct-file */
- good = apr_pstrndup(r->pool, r->filename, filoc);
- /* bad = mispelling */
- bad = apr_pstrdup(r->pool, r->filename + filoc + 1);
- /* postgood = mispelling/more */
- postgood = apr_pstrcat(r->pool, bad, r->path_info, NULL);
-
- urlen = strlen(r->uri);
- pglen = strlen(postgood);
-
- /* Check to see if the URL pieces add up */
- if (strcmp(postgood, r->uri + (urlen - pglen))) {
- return DECLINED;
- }
-
- /* url = /correct-url */
- url = apr_pstrndup(r->pool, r->uri, (urlen - pglen));
-
- /* Now open the directory and do ourselves a check... */
- if (apr_dir_open(&dir, good, r->pool) != APR_SUCCESS) {
- /* Oops, not a directory... */
- return DECLINED;
- }
-
- candidates = apr_array_make(r->pool, 2, sizeof(misspelled_file));
-
- dotloc = ap_ind(bad, '.');
- if (dotloc == -1) {
- dotloc = strlen(bad);
- }
-
- while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dir) == APR_SUCCESS) {
- sp_reason q;
-
- /*
- * If we end up with a "fixed" URL which is identical to the
- * requested one, we must have found a broken symlink or some such.
- * Do _not_ try to redirect this, it causes a loop!
- */
- if (strcmp(bad, dirent.name) == 0) {
- apr_dir_close(dir);
- return OK;
- }
-
- /*
- * miscapitalization errors are checked first (like, e.g., lower case
- * file, upper case request)
- */
- else if (strcasecmp(bad, dirent.name) == 0) {
- misspelled_file *sp_new;
-
- sp_new = (misspelled_file *) apr_array_push(candidates);
- sp_new->name = apr_pstrdup(r->pool, dirent.name);
- sp_new->quality = SP_MISCAPITALIZED;
- }
-
- /*
- * simple typing errors are checked next (like, e.g.,
- * missing/extra/transposed char)
- */
- else if ((q = spdist(bad, dirent.name)) != SP_VERYDIFFERENT) {
- misspelled_file *sp_new;
-
- sp_new = (misspelled_file *) apr_array_push(candidates);
- sp_new->name = apr_pstrdup(r->pool, dirent.name);
- sp_new->quality = q;
- }
-
- /*
- * The spdist() should have found the majority of the misspelled
- * requests. It is of questionable use to continue looking for
- * files with the same base name, but potentially of totally wrong
- * type (index.html <-> index.db).
- * I would propose to not set the WANT_BASENAME_MATCH define.
- * 08-Aug-1997 <Martin.Kraemer@Mch.SNI.De>
- *
- * However, Alexei replied giving some reasons to add it anyway:
- * > Oh, by the way, I remembered why having the
- * > extension-stripping-and-matching stuff is a good idea:
- * >
- * > If you're using MultiViews, and have a file named foobar.html,
- * > which you refer to as "foobar", and someone tried to access
- * > "Foobar", mod_speling won't find it, because it won't find
- * > anything matching that spelling. With the extension-munging,
- * > it would locate "foobar.html". Not perfect, but I ran into
- * > that problem when I first wrote the module.
- */
- else {
-#ifdef WANT_BASENAME_MATCH
- /*
- * Okay... we didn't find anything. Now we take out the hard-core
- * power tools. There are several cases here. Someone might have
- * entered a wrong extension (.htm instead of .html or vice
- * versa) or the document could be negotiated. At any rate, now
- * we just compare stuff before the first dot. If it matches, we
- * figure we got us a match. This can result in wrong things if
- * there are files of different content types but the same prefix
- * (e.g. foo.gif and foo.html) This code will pick the first one
- * it finds. Better than a Not Found, though.
- */
- int entloc = ap_ind(dirent.name, '.');
- if (entloc == -1) {
- entloc = strlen(dirent.name);
- }
-
- if ((dotloc == entloc)
- && !strncasecmp(bad, dirent.name, dotloc)) {
- misspelled_file *sp_new;
-
- sp_new = (misspelled_file *) apr_array_push(candidates);
- sp_new->name = apr_pstrdup(r->pool, dirent.name);
- sp_new->quality = SP_VERYDIFFERENT;
- }
-#endif
- }
- }
- apr_dir_close(dir);
-
- if (candidates->nelts != 0) {
- /* Wow... we found us a mispelling. Construct a fixed url */
- char *nuri;
- const char *ref;
- misspelled_file *variant = (misspelled_file *) candidates->elts;
- int i;
-
- ref = apr_table_get(r->headers_in, "Referer");
-
- qsort((void *) candidates->elts, candidates->nelts,
- sizeof(misspelled_file), sort_by_quality);
-
- /*
- * Conditions for immediate redirection:
- * a) the first candidate was not found by stripping the suffix
- * AND b) there exists only one candidate OR the best match is not
- * ambiguous
- * then return a redirection right away.
- */
- if (variant[0].quality != SP_VERYDIFFERENT
- && (candidates->nelts == 1
- || variant[0].quality != variant[1].quality)) {
-
- nuri = ap_escape_uri(r->pool, apr_pstrcat(r->pool, url,
- variant[0].name,
- r->path_info, NULL));
- if (r->parsed_uri.query)
- nuri = apr_pstrcat(r->pool, nuri, "?", r->parsed_uri.query, NULL);
-
- apr_table_setn(r->headers_out, "Location",
- ap_construct_url(r->pool, nuri, r));
-
- ap_log_rerror(APLOG_MARK, APLOG_INFO, APR_SUCCESS,
- r,
- ref ? "Fixed spelling: %s to %s from %s"
- : "Fixed spelling: %s to %s",
- r->uri, nuri, ref);
-
- return HTTP_MOVED_PERMANENTLY;
- }
- /*
- * Otherwise, a "[300] Multiple Choices" list with the variants is
- * returned.
- */
- else {
- apr_pool_t *p;
- apr_table_t *notes;
- apr_pool_t *sub_pool;
- apr_array_header_t *t;
- apr_array_header_t *v;
-
-
- if (r->main == NULL) {
- p = r->pool;
- notes = r->notes;
- }
- else {
- p = r->main->pool;
- notes = r->main->notes;
- }
-
- if (apr_pool_create(&sub_pool, p) != APR_SUCCESS)
- return DECLINED;
-
- t = apr_array_make(sub_pool, candidates->nelts * 8 + 8,
- sizeof(char *));
- v = apr_array_make(sub_pool, candidates->nelts * 5,
- sizeof(char *));
-
- /* Generate the response text. */
-
- *(const char **)apr_array_push(t) =
- "The document name you requested (<code>";
- *(const char **)apr_array_push(t) = ap_escape_html(sub_pool, r->uri);
- *(const char **)apr_array_push(t) =
- "</code>) could not be found on this server.\n"
- "However, we found documents with names similar "
- "to the one you requested.<p>"
- "Available documents:\n<ul>\n";
-
- for (i = 0; i < candidates->nelts; ++i) {
- char *vuri;
- const char *reason;
-
- reason = sp_reason_str[(int) (variant[i].quality)];
- /* The format isn't very neat... */
- vuri = apr_pstrcat(sub_pool, url, variant[i].name, r->path_info,
- (r->parsed_uri.query != NULL) ? "?" : "",
- (r->parsed_uri.query != NULL)
- ? r->parsed_uri.query : "",
- NULL);
- *(const char **)apr_array_push(v) = "\"";
- *(const char **)apr_array_push(v) = ap_escape_uri(sub_pool, vuri);
- *(const char **)apr_array_push(v) = "\";\"";
- *(const char **)apr_array_push(v) = reason;
- *(const char **)apr_array_push(v) = "\"";
-
- *(const char **)apr_array_push(t) = "<li><a href=\"";
- *(const char **)apr_array_push(t) = ap_escape_uri(sub_pool, vuri);
- *(const char **)apr_array_push(t) = "\">";
- *(const char **)apr_array_push(t) = ap_escape_html(sub_pool, vuri);
- *(const char **)apr_array_push(t) = "</a> (";
- *(const char **)apr_array_push(t) = reason;
- *(const char **)apr_array_push(t) = ")\n";
-
- /*
- * when we have printed the "close matches" and there are
- * more "distant matches" (matched by stripping the suffix),
- * then we insert an additional separator text to suggest
- * that the user LOOK CLOSELY whether these are really the
- * files she wanted.
- */
- if (i > 0 && i < candidates->nelts - 1
- && variant[i].quality != SP_VERYDIFFERENT
- && variant[i + 1].quality == SP_VERYDIFFERENT) {
- *(const char **)apr_array_push(t) =
- "</ul>\nFurthermore, the following related "
- "documents were found:\n<ul>\n";
- }
- }
- *(const char **)apr_array_push(t) = "</ul>\n";
-
- /* If we know there was a referring page, add a note: */
- if (ref != NULL) {
- *(const char **)apr_array_push(t) =
- "Please consider informing the owner of the "
- "<a href=\"";
- *(const char **)apr_array_push(t) = ap_escape_uri(sub_pool, ref);
- *(const char **)apr_array_push(t) = "\">referring page</a> "
- "about the broken link.\n";
- }
-
-
- /* Pass our apr_table_t to http_protocol.c (see mod_negotiation): */
- apr_table_setn(notes, "variant-list", apr_array_pstrcat(p, t, 0));
-
- apr_table_mergen(r->subprocess_env, "VARIANTS",
- apr_array_pstrcat(p, v, ','));
-
- apr_pool_destroy(sub_pool);
-
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- ref ? "Spelling fix: %s: %d candidates from %s"
- : "Spelling fix: %s: %d candidates",
- r->uri, candidates->nelts, ref);
-
- return HTTP_MULTIPLE_CHOICES;
- }
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(check_speling,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA speling_module =
-{
- STANDARD20_MODULE_STUFF,
- create_mconfig_for_directory, /* create per-dir config */
- NULL, /* merge per-dir config */
- create_mconfig_for_server, /* server config */
- NULL, /* merge server config */
- speling_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_speling.dsp b/modules/mappers/mod_speling.dsp
deleted file mode 100644
index 1bced618ce..0000000000
--- a/modules/mappers/mod_speling.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_speling" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_speling - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_speling.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_speling.mak" CFG="mod_speling - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_speling - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_speling - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_speling - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_speling_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_speling - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_speling_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_speling - Win32 Release"
-# Name "mod_speling - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_speling.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_speling.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_speling - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_speling.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_speling.so "speling_module for Apache" ../../include/ap_release.h > .\mod_speling.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_speling - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_speling.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_speling.so "speling_module for Apache" ../../include/ap_release.h > .\mod_speling.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_speling.exp b/modules/mappers/mod_speling.exp
deleted file mode 100644
index a6ee8b5034..0000000000
--- a/modules/mappers/mod_speling.exp
+++ /dev/null
@@ -1 +0,0 @@
-speling_module
diff --git a/modules/mappers/mod_userdir.c b/modules/mappers/mod_userdir.c
deleted file mode 100644
index d916a95e12..0000000000
--- a/modules/mappers/mod_userdir.c
+++ /dev/null
@@ -1,365 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_userdir... implement the UserDir command. Broken away from the
- * Alias stuff for a couple of good and not-so-good reasons:
- *
- * 1) It shows a real minimal working example of how to do something like
- * this.
- * 2) I know people who are actually interested in changing this *particular*
- * aspect of server functionality without changing the rest of it. That's
- * what this whole modular arrangement is supposed to be good at...
- *
- * Modified by Alexei Kosut to support the following constructs
- * (server running at www.foo.com, request for /~bar/one/two.html)
- *
- * UserDir public_html -> ~bar/public_html/one/two.html
- * UserDir /usr/web -> /usr/web/bar/one/two.html
- * UserDir /home/ * /www -> /home/bar/www/one/two.html
- * NOTE: theses ^ ^ space only added allow it to work in a comment, ignore
- * UserDir http://x/users -> (302) http://x/users/bar/one/two.html
- * UserDir http://x/ * /y -> (302) http://x/bar/y/one/two.html
- * NOTE: here also ^ ^
- *
- * In addition, you can use multiple entries, to specify alternate
- * user directories (a la Directory Index). For example:
- *
- * UserDir public_html /usr/web http://www.xyz.com/users
- *
- * Modified by Ken Coar to provide for the following:
- *
- * UserDir disable[d] username ...
- * UserDir enable[d] username ...
- *
- * If "disabled" has no other arguments, *all* ~<username> references are
- * disabled, except those explicitly turned on with the "enabled" keyword.
- */
-
-#include "apr_strings.h"
-#include "apr_user.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-
-#if !defined(WIN32) && !defined(OS2) && !defined(BEOS) && !defined(NETWARE)
-#define HAVE_UNIX_SUEXEC
-#endif
-
-#ifdef HAVE_UNIX_SUEXEC
-#include "unixd.h" /* Contains the suexec_identity hook used on Unix */
-#endif
-
-
-/* The default directory in user's home dir */
-#ifndef DEFAULT_USER_DIR
-#define DEFAULT_USER_DIR "public_html"
-#endif
-
-module AP_MODULE_DECLARE_DATA userdir_module;
-
-typedef struct {
- int globally_disabled;
- char *userdir;
- apr_table_t *enabled_users;
- apr_table_t *disabled_users;
-} userdir_config;
-
-/*
- * Server config for this module: global disablement flag, a list of usernames
- * ineligible for UserDir access, a list of those immune to global (but not
- * explicit) disablement, and the replacement string for all others.
- */
-
-static void *create_userdir_config(apr_pool_t *p, server_rec *s)
-{
- userdir_config *newcfg = apr_pcalloc(p, sizeof(*newcfg));
-
- newcfg->globally_disabled = 0;
- newcfg->userdir = DEFAULT_USER_DIR;
- newcfg->enabled_users = apr_table_make(p, 4);
- newcfg->disabled_users = apr_table_make(p, 4);
-
- return newcfg;
-}
-
-#define O_DEFAULT 0
-#define O_ENABLE 1
-#define O_DISABLE 2
-
-static const char *set_user_dir(cmd_parms *cmd, void *dummy, const char *arg)
-{
- userdir_config *s_cfg = ap_get_module_config(cmd->server->module_config,
- &userdir_module);
- char *username;
- const char *usernames = arg;
- char *kw = ap_getword_conf(cmd->pool, &usernames);
- apr_table_t *usertable;
-
- /* Since we are a raw argument, it is possible for us to be called with
- * zero arguments. So that we aren't ambiguous, flat out reject this.
- */
- if (*kw == '\0') {
- return "UserDir requires an argument.";
- }
-
- /*
- * Let's do the comparisons once.
- */
- if ((!strcasecmp(kw, "disable")) || (!strcasecmp(kw, "disabled"))) {
- /*
- * If there are no usernames specified, this is a global disable - we
- * need do no more at this point than record the fact.
- */
- if (strlen(usernames) == 0) {
- s_cfg->globally_disabled = 1;
- return NULL;
- }
- usertable = s_cfg->disabled_users;
- }
- else if ((!strcasecmp(kw, "enable")) || (!strcasecmp(kw, "enabled"))) {
- /*
- * The "disable" keyword can stand alone or take a list of names, but
- * the "enable" keyword requires the list. Whinge if it doesn't have
- * it.
- */
- if (strlen(usernames) == 0) {
- return "UserDir \"enable\" keyword requires a list of usernames";
- }
- usertable = s_cfg->enabled_users;
- }
- else {
- /*
- * If the first (only?) value isn't one of our keywords, just copy
- * the string to the userdir string.
- */
- s_cfg->userdir = apr_pstrdup(cmd->pool, arg);
- return NULL;
- }
- /*
- * Now we just take each word in turn from the command line and add it to
- * the appropriate table.
- */
- while (*usernames) {
- username = ap_getword_conf(cmd->pool, &usernames);
- apr_table_setn(usertable, username, kw);
- }
- return NULL;
-}
-
-static const command_rec userdir_cmds[] = {
- AP_INIT_RAW_ARGS("UserDir", set_user_dir, NULL, RSRC_CONF,
- "the public subdirectory in users' home directories, or "
- "'disabled', or 'disabled username username...', or "
- "'enabled username username...'"),
- {NULL}
-};
-
-static int translate_userdir(request_rec *r)
-{
- ap_conf_vector_t *server_conf;
- const userdir_config *s_cfg;
- char *name = r->uri;
- const char *userdirs;
- const char *w, *dname;
- char *redirect;
- apr_finfo_t statbuf;
-
- /*
- * If the URI doesn't match our basic pattern, we've nothing to do with
- * it.
- */
- if (name[0] != '/' || name[1] != '~') {
- return DECLINED;
- }
- server_conf = r->server->module_config;
- s_cfg = ap_get_module_config(server_conf, &userdir_module);
- userdirs = s_cfg->userdir;
- if (userdirs == NULL) {
- return DECLINED;
- }
-
- dname = name + 2;
- w = ap_getword(r->pool, &dname, '/');
-
- /*
- * The 'dname' funny business involves backing it up to capture the '/'
- * delimiting the "/~user" part from the rest of the URL, in case there
- * was one (the case where there wasn't being just "GET /~user HTTP/1.0",
- * for which we don't want to tack on a '/' onto the filename).
- */
-
- if (dname[-1] == '/') {
- --dname;
- }
-
- /*
- * If there's no username, it's not for us. Ignore . and .. as well.
- */
- if (w[0] == '\0' || (w[1] == '.' && (w[2] == '\0' || (w[2] == '.' && w[3] == '\0')))) {
- return DECLINED;
- }
- /*
- * Nor if there's an username but it's in the disabled list.
- */
- if (apr_table_get(s_cfg->disabled_users, w) != NULL) {
- return DECLINED;
- }
- /*
- * If there's a global interdiction on UserDirs, check to see if this
- * name is one of the Blessed.
- */
- if (s_cfg->globally_disabled
- && apr_table_get(s_cfg->enabled_users, w) == NULL) {
- return DECLINED;
- }
-
- /*
- * Special cases all checked, onward to normal substitution processing.
- */
-
- while (*userdirs) {
- const char *userdir = ap_getword_conf(r->pool, &userdirs);
- char *filename = NULL, *x = NULL;
- apr_status_t rv;
- int is_absolute = ap_os_is_path_absolute(r->pool, userdir);
-
- if (ap_strchr_c(userdir, '*'))
- x = ap_getword(r->pool, &userdir, '*');
-
- if (userdir[0] == '\0' || is_absolute) {
- if (x) {
-#ifdef HAVE_DRIVE_LETTERS
- /*
- * Crummy hack. Need to figure out whether we have been
- * redirected to a URL or to a file on some drive. Since I
- * know of no protocols that are a single letter, ignore
- * a : as the first or second character, and assume a file
- * was specified
- */
- if (strchr(x + 2, ':'))
-#else
- if (strchr(x, ':') && !is_absolute)
-#endif /* HAVE_DRIVE_LETTERS */
- {
- redirect = apr_pstrcat(r->pool, x, w, userdir, dname, NULL);
- apr_table_setn(r->headers_out, "Location", redirect);
- return HTTP_MOVED_TEMPORARILY;
- }
- else
- filename = apr_pstrcat(r->pool, x, w, userdir, NULL);
- }
- else
- filename = apr_pstrcat(r->pool, userdir, "/", w, NULL);
- }
- else if (x && ap_strchr_c(x, ':')) {
- redirect = apr_pstrcat(r->pool, x, w, dname, NULL);
- apr_table_setn(r->headers_out, "Location", redirect);
- return HTTP_MOVED_TEMPORARILY;
- }
- else {
-#if APR_HAS_USER
- char *homedir;
-
- if (apr_uid_homepath_get(&homedir, w, r->pool) == APR_SUCCESS) {
- filename = apr_pstrcat(r->pool, homedir, "/", userdir, NULL);
- }
-#else
- return DECLINED;
-#endif
- }
-
- /*
- * Now see if it exists, or we're at the last entry. If we are at the
- * last entry, then use the filename generated (if there is one)
- * anyway, in the hope that some handler might handle it. This can be
- * used, for example, to run a CGI script for the user.
- */
- if (filename && (!*userdirs
- || ((rv = apr_stat(&statbuf, filename, APR_FINFO_MIN,
- r->pool)) == APR_SUCCESS
- || rv == APR_INCOMPLETE))) {
- r->filename = apr_pstrcat(r->pool, filename, dname, NULL);
- /* XXX: Does this walk us around FollowSymLink rules?
- * When statbuf contains info on r->filename we can save a syscall
- * by copying it to r->finfo
- */
- if (*userdirs && dname[0] == 0)
- r->finfo = statbuf;
-
- /* For use in the get_suexec_identity phase */
- apr_table_setn(r->notes, "mod_userdir_user", w);
-
- return OK;
- }
- }
-
- return DECLINED;
-}
-
-#ifdef HAVE_UNIX_SUEXEC
-static ap_unix_identity_t *get_suexec_id_doer(const request_rec *r)
-{
- ap_unix_identity_t *ugid = NULL;
-#if APR_HAS_USER
- const char *username = apr_table_get(r->notes, "mod_userdir_user");
-
- if (username == NULL) {
- return NULL;
- }
-
- if ((ugid = apr_palloc(r->pool, sizeof(ap_unix_identity_t *))) == NULL) {
- return NULL;
- }
-
- if (apr_uid_get(&ugid->uid, &ugid->gid, username, r->pool) != APR_SUCCESS) {
- return NULL;
- }
-
- ugid->userdir = 1;
-#endif
- return ugid;
-}
-#endif /* HAVE_UNIX_SUEXEC */
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszPre[]={ "mod_alias.c",NULL };
- static const char * const aszSucc[]={ "mod_vhost_alias.c",NULL };
-
- ap_hook_translate_name(translate_userdir,aszPre,aszSucc,APR_HOOK_MIDDLE);
-#ifdef HAVE_UNIX_SUEXEC
- ap_hook_get_suexec_identity(get_suexec_id_doer,NULL,NULL,APR_HOOK_MIDDLE);
-#endif
-}
-
-module AP_MODULE_DECLARE_DATA userdir_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_userdir_config, /* server config */
- NULL, /* merge server config */
- userdir_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/mappers/mod_userdir.dsp b/modules/mappers/mod_userdir.dsp
deleted file mode 100644
index 701af8d87b..0000000000
--- a/modules/mappers/mod_userdir.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_userdir" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_userdir - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_userdir.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_userdir.mak" CFG="mod_userdir - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_userdir - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_userdir - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_userdir - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_userdir_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_userdir - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_userdir_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_userdir - Win32 Release"
-# Name "mod_userdir - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_userdir.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_userdir.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_userdir - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_userdir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_userdir.so "userdir_module for Apache" ../../include/ap_release.h > .\mod_userdir.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_userdir - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_userdir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_userdir.so "userdir_module for Apache" ../../include/ap_release.h > .\mod_userdir.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_userdir.exp b/modules/mappers/mod_userdir.exp
deleted file mode 100644
index 6b8b81d5c3..0000000000
--- a/modules/mappers/mod_userdir.exp
+++ /dev/null
@@ -1 +0,0 @@
-userdir_module
diff --git a/modules/mappers/mod_vhost_alias.c b/modules/mappers/mod_vhost_alias.c
deleted file mode 100644
index 83839d5e3b..0000000000
--- a/modules/mappers/mod_vhost_alias.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_vhost_alias.c: support for dynamically configured mass virtual hosting
- *
- * Copyright (c) 1998-1999 Demon Internet Ltd.
- *
- * This software was submitted by Demon Internet to the Apache Software Foundation
- * in May 1999. Future revisions and derivatives of this source code
- * must acknowledge Demon Internet as the original contributor of
- * this module. All other licensing and usage conditions are those
- * of the Apache Software Foundation.
- *
- * Originally written by Tony Finch <fanf@demon.net> <dot@dotat.at>.
- *
- * Implementation ideas were taken from mod_alias.c. The overall
- * concept is derived from the OVERRIDE_DOC_ROOT/OVERRIDE_CGIDIR
- * patch to Apache 1.3b3 and a similar feature in Demon's thttpd,
- * both written by James Grinter <jrg@blodwen.demon.co.uk>.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_hooks.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h" /* for ap_hook_translate_name */
-
-
-module AP_MODULE_DECLARE_DATA vhost_alias_module;
-
-
-/*
- * basic configuration things
- * we abbreviate "mod_vhost_alias" to "mva" for shorter names
- */
-
-typedef enum {
- VHOST_ALIAS_UNSET, VHOST_ALIAS_NONE, VHOST_ALIAS_NAME, VHOST_ALIAS_IP
-} mva_mode_e;
-
-/*
- * Per-server module config record.
- */
-typedef struct mva_sconf_t {
- const char *doc_root;
- const char *cgi_root;
- mva_mode_e doc_root_mode;
- mva_mode_e cgi_root_mode;
-} mva_sconf_t;
-
-static void *mva_create_server_config(apr_pool_t *p, server_rec *s)
-{
- mva_sconf_t *conf;
-
- conf = (mva_sconf_t *) apr_pcalloc(p, sizeof(mva_sconf_t));
- conf->doc_root = NULL;
- conf->cgi_root = NULL;
- conf->doc_root_mode = VHOST_ALIAS_UNSET;
- conf->cgi_root_mode = VHOST_ALIAS_UNSET;
- return conf;
-}
-
-static void *mva_merge_server_config(apr_pool_t *p, void *parentv, void *childv)
-{
- mva_sconf_t *parent = (mva_sconf_t *) parentv;
- mva_sconf_t *child = (mva_sconf_t *) childv;
- mva_sconf_t *conf;
-
- conf = (mva_sconf_t *) apr_pcalloc(p, sizeof(*conf));
- if (child->doc_root_mode == VHOST_ALIAS_UNSET) {
- conf->doc_root_mode = parent->doc_root_mode;
- conf->doc_root = parent->doc_root;
- }
- else {
- conf->doc_root_mode = child->doc_root_mode;
- conf->doc_root = child->doc_root;
- }
- if (child->cgi_root_mode == VHOST_ALIAS_UNSET) {
- conf->cgi_root_mode = parent->cgi_root_mode;
- conf->cgi_root = parent->cgi_root;
- }
- else {
- conf->cgi_root_mode = child->cgi_root_mode;
- conf->cgi_root = child->cgi_root;
- }
- return conf;
-}
-
-
-/*
- * These are just here to tell us what vhost_alias_set should do.
- * We don't put anything into them; we just use the cell addresses.
- */
-static int vhost_alias_set_doc_root_ip,
- vhost_alias_set_cgi_root_ip,
- vhost_alias_set_doc_root_name,
- vhost_alias_set_cgi_root_name;
-
-static const char *vhost_alias_set(cmd_parms *cmd, void *dummy, const char *map)
-{
- mva_sconf_t *conf;
- mva_mode_e mode, *pmode;
- const char **pmap;
- const char *p;
-
- conf = (mva_sconf_t *) ap_get_module_config(cmd->server->module_config,
- &vhost_alias_module);
- /* there ought to be a better way of doing this */
- if (&vhost_alias_set_doc_root_ip == cmd->info) {
- mode = VHOST_ALIAS_IP;
- pmap = &conf->doc_root;
- pmode = &conf->doc_root_mode;
- }
- else if (&vhost_alias_set_cgi_root_ip == cmd->info) {
- mode = VHOST_ALIAS_IP;
- pmap = &conf->cgi_root;
- pmode = &conf->cgi_root_mode;
- }
- else if (&vhost_alias_set_doc_root_name == cmd->info) {
- mode = VHOST_ALIAS_NAME;
- pmap = &conf->doc_root;
- pmode = &conf->doc_root_mode;
- }
- else if (&vhost_alias_set_cgi_root_name == cmd->info) {
- mode = VHOST_ALIAS_NAME;
- pmap = &conf->cgi_root;
- pmode = &conf->cgi_root_mode;
- }
- else {
- return "INTERNAL ERROR: unknown command info";
- }
-
- if (!ap_os_is_path_absolute(cmd->pool, map)) {
- if (strcasecmp(map, "none")) {
- return "format string must be an absolute path, or 'none'";
- }
- *pmap = NULL;
- *pmode = VHOST_ALIAS_NONE;
- return NULL;
- }
-
- /* sanity check */
- p = map;
- while (*p != '\0') {
- if (*p++ != '%') {
- continue;
- }
- /* we just found a '%' */
- if (*p == 'p' || *p == '%') {
- ++p;
- continue;
- }
- /* optional dash */
- if (*p == '-') {
- ++p;
- }
- /* digit N */
- if (apr_isdigit(*p)) {
- ++p;
- }
- else {
- return "syntax error in format string";
- }
- /* optional plus */
- if (*p == '+') {
- ++p;
- }
- /* do we end here? */
- if (*p != '.') {
- continue;
- }
- ++p;
- /* optional dash */
- if (*p == '-') {
- ++p;
- }
- /* digit M */
- if (apr_isdigit(*p)) {
- ++p;
- }
- else {
- return "syntax error in format string";
- }
- /* optional plus */
- if (*p == '+') {
- ++p;
- }
- }
- *pmap = map;
- *pmode = mode;
- return NULL;
-}
-
-static const command_rec mva_commands[] =
-{
- AP_INIT_TAKE1("VirtualScriptAlias", vhost_alias_set,
- &vhost_alias_set_cgi_root_name, RSRC_CONF,
- "how to create a ScriptAlias based on the host"),
- AP_INIT_TAKE1("VirtualDocumentRoot", vhost_alias_set,
- &vhost_alias_set_doc_root_name, RSRC_CONF,
- "how to create the DocumentRoot based on the host"),
- AP_INIT_TAKE1("VirtualScriptAliasIP", vhost_alias_set,
- &vhost_alias_set_cgi_root_ip, RSRC_CONF,
- "how to create a ScriptAlias based on the host"),
- AP_INIT_TAKE1("VirtualDocumentRootIP", vhost_alias_set,
- &vhost_alias_set_doc_root_ip, RSRC_CONF,
- "how to create the DocumentRoot based on the host"),
- { NULL }
-};
-
-
-/*
- * This really wants to be a nested function
- * but C is too feeble to support them.
- */
-static APR_INLINE void vhost_alias_checkspace(request_rec *r, char *buf,
- char **pdest, int size)
-{
- /* XXX: what if size > HUGE_STRING_LEN? */
- if (*pdest + size > buf + HUGE_STRING_LEN) {
- **pdest = '\0';
- if (r->filename) {
- r->filename = apr_pstrcat(r->pool, r->filename, buf, NULL);
- }
- else {
- r->filename = apr_pstrdup(r->pool, buf);
- }
- *pdest = buf;
- }
-}
-
-static void vhost_alias_interpolate(request_rec *r, const char *name,
- const char *map, const char *uri)
-{
- /* 0..9 9..0 */
- enum { MAXDOTS = 19 };
- const char *dots[MAXDOTS+1];
- int ndots;
-
- char buf[HUGE_STRING_LEN];
- char *dest, last;
-
- int N, M, Np, Mp, Nd, Md;
- const char *start, *end;
-
- const char *p;
-
- ndots = 0;
- dots[ndots++] = name-1; /* slightly naughty */
- for (p = name; *p; ++p){
- if (*p == '.' && ndots < MAXDOTS) {
- dots[ndots++] = p;
- }
- }
- dots[ndots] = p;
-
- r->filename = NULL;
-
- dest = buf;
- last = '\0';
- while (*map) {
- if (*map != '%') {
- /* normal characters */
- vhost_alias_checkspace(r, buf, &dest, 1);
- last = *dest++ = *map++;
- continue;
- }
- /* we are in a format specifier */
- ++map;
- /* can't be a slash */
- last = '\0';
- /* %% -> % */
- if (*map == '%') {
- ++map;
- vhost_alias_checkspace(r, buf, &dest, 1);
- *dest++ = '%';
- continue;
- }
- /* port number */
- if (*map == 'p') {
- ++map;
- /* no. of decimal digits in a short plus one */
- vhost_alias_checkspace(r, buf, &dest, 7);
- dest += apr_snprintf(dest, 7, "%d", ap_get_server_port(r));
- continue;
- }
- /* deal with %-N+.-M+ -- syntax is already checked */
- N = M = 0; /* value */
- Np = Mp = 0; /* is there a plus? */
- Nd = Md = 0; /* is there a dash? */
- if (*map == '-') ++map, Nd = 1;
- N = *map++ - '0';
- if (*map == '+') ++map, Np = 1;
- if (*map == '.') {
- ++map;
- if (*map == '-') {
- ++map, Md = 1;
- }
- M = *map++ - '0';
- if (*map == '+') {
- ++map, Mp = 1;
- }
- }
- /* note that N and M are one-based indices, not zero-based */
- start = dots[0]+1; /* ptr to the first character */
- end = dots[ndots]; /* ptr to the character after the last one */
- if (N != 0) {
- if (N > ndots) {
- start = "_";
- end = start+1;
- }
- else if (!Nd) {
- start = dots[N-1]+1;
- if (!Np) {
- end = dots[N];
- }
- }
- else {
- if (!Np) {
- start = dots[ndots-N]+1;
- }
- end = dots[ndots-N+1];
- }
- }
- if (M != 0) {
- if (M > end - start) {
- start = "_";
- end = start+1;
- }
- else if (!Md) {
- start = start+M-1;
- if (!Mp) {
- end = start+1;
- }
- }
- else {
- if (!Mp) {
- start = end-M;
- }
- end = end-M+1;
- }
- }
- vhost_alias_checkspace(r, buf, &dest, end - start);
- for (p = start; p < end; ++p) {
- *dest++ = apr_tolower(*p);
- }
- }
- *dest = '\0';
- /* no double slashes */
- if (last == '/') {
- ++uri;
- }
-
- if (r->filename) {
- r->filename = apr_pstrcat(r->pool, r->filename, buf, uri, NULL);
- }
- else {
- r->filename = apr_pstrcat(r->pool, buf, uri, NULL);
- }
-}
-
-static int mva_translate(request_rec *r)
-{
- mva_sconf_t *conf;
- const char *name, *map, *uri;
- mva_mode_e mode;
- const char *cgi;
-
- conf = (mva_sconf_t *) ap_get_module_config(r->server->module_config,
- &vhost_alias_module);
- cgi = NULL;
- if (conf->cgi_root) {
- cgi = strstr(r->uri, "cgi-bin/");
- if (cgi && (cgi != r->uri + strspn(r->uri, "/"))) {
- cgi = NULL;
- }
- }
- if (cgi) {
- mode = conf->cgi_root_mode;
- map = conf->cgi_root;
- uri = cgi + strlen("cgi-bin");
- }
- else if (r->uri[0] == '/') {
- mode = conf->doc_root_mode;
- map = conf->doc_root;
- uri = r->uri;
- }
- else {
- return DECLINED;
- }
-
- if (mode == VHOST_ALIAS_NAME) {
- name = ap_get_server_name(r);
- }
- else if (mode == VHOST_ALIAS_IP) {
- name = r->connection->local_ip;
- }
- else {
- return DECLINED;
- }
-
- /* ### There is an optimization available here to determine the
- * absolute portion of the path from the server config phase,
- * through the first % segment, and note that portion of the path
- * canonical_path buffer.
- */
- r->canonical_filename = "";
- vhost_alias_interpolate(r, name, map, uri);
-
- if (cgi) {
- /* see is_scriptaliased() in mod_cgi */
- r->handler = "cgi-script";
- apr_table_setn(r->notes, "alias-forced-type", r->handler);
- }
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszPre[]={ "mod_alias.c","mod_userdir.c",NULL };
-
- ap_hook_translate_name(mva_translate, aszPre, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA vhost_alias_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- mva_create_server_config, /* server config */
- mva_merge_server_config, /* merge server configs */
- mva_commands, /* command apr_table_t */
- register_hooks /* register hooks */
-};
-
diff --git a/modules/mappers/mod_vhost_alias.dsp b/modules/mappers/mod_vhost_alias.dsp
deleted file mode 100644
index 56a310f9a0..0000000000
--- a/modules/mappers/mod_vhost_alias.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_vhost_alias" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_vhost_alias - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_vhost_alias.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_vhost_alias.mak" CFG="mod_vhost_alias - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_vhost_alias - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_vhost_alias - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_vhost_alias - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_vhost_alias_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_vhost_alias - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_vhost_alias_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_vhost_alias - Win32 Release"
-# Name "mod_vhost_alias - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_vhost_alias.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_vhost_alias.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_vhost_alias - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_vhost_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_vhost_alias.so "vhost_alias_module for Apache" ../../include/ap_release.h > .\mod_vhost_alias.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_vhost_alias - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_vhost_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_vhost_alias.so "vhost_alias_module for Apache" ../../include/ap_release.h > .\mod_vhost_alias.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_vhost_alias.exp b/modules/mappers/mod_vhost_alias.exp
deleted file mode 100644
index b17666fc86..0000000000
--- a/modules/mappers/mod_vhost_alias.exp
+++ /dev/null
@@ -1 +0,0 @@
-vhost_alias_module
diff --git a/modules/metadata/.cvsignore b/modules/metadata/.cvsignore
deleted file mode 100644
index cb902f0c14..0000000000
--- a/modules/metadata/.cvsignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/modules/metadata/.indent.pro b/modules/metadata/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/metadata/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/metadata/Makefile.in b/modules/metadata/Makefile.in
deleted file mode 100644
index 167b343d0d..0000000000
--- a/modules/metadata/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/metadata/NWGNUcernmeta b/modules/metadata/NWGNUcernmeta
deleted file mode 100644
index 14d6727e0d..0000000000
--- a/modules/metadata/NWGNUcernmeta
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = cernmeta
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) CERN Meta Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = CERN Meta Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/cernmeta.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_cern_meta.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- cern_meta_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUexpires b/modules/metadata/NWGNUexpires
deleted file mode 100644
index bb59bef3fa..0000000000
--- a/modules/metadata/NWGNUexpires
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = expires
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Expires Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Expires Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/expires.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_expires.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- expires_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUheaders b/modules/metadata/NWGNUheaders
deleted file mode 100644
index 04bf615aad..0000000000
--- a/modules/metadata/NWGNUheaders
+++ /dev/null
@@ -1,251 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/modules/ssl \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = headers
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Headers Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Headers Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/headers.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_headers.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- headers_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUmakefile b/modules/metadata/NWGNUmakefile
deleted file mode 100644
index 58d1a19856..0000000000
--- a/modules/metadata/NWGNUmakefile
+++ /dev/null
@@ -1,253 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/cernmeta.nlm \
- $(OBJDIR)/expires.nlm \
- $(OBJDIR)/headers.nlm \
- $(OBJDIR)/mimemagi.nlm \
- $(OBJDIR)/modident.nlm \
- $(OBJDIR)/uniqueid.nlm \
- $(OBJDIR)/usertrk.nlm \
- $(OBJDIR)/modversion.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/modules/metadata/NWGNUmimemagi b/modules/metadata/NWGNUmimemagi
deleted file mode 100644
index a2ea5a24d9..0000000000
--- a/modules/metadata/NWGNUmimemagi
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = mimemagi
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Mime Magic Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = CERN Meta Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/mimemagi.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_mime_magic.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- mime_magic_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUmodident b/modules/metadata/NWGNUmodident
deleted file mode 100644
index dc7e031482..0000000000
--- a/modules/metadata/NWGNUmodident
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = modident
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Remote User Identity Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Mod_Ident Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/modident.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_ident.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- ident_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUmodversion b/modules/metadata/NWGNUmodversion
deleted file mode 100644
index 47b24699c9..0000000000
--- a/modules/metadata/NWGNUmodversion
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = modversion
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Version Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Version Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/$(NLM_NAME).nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_version.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- version_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUuniqueid b/modules/metadata/NWGNUuniqueid
deleted file mode 100644
index 42078edc95..0000000000
--- a/modules/metadata/NWGNUuniqueid
+++ /dev/null
@@ -1,254 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = uniqueid
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Unique ID Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = Unique ID Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/uniqueid.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_unique_id.o \
- $(OBJDIR)/libprews.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- @ws2nlm.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- unique_id_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-vpath %.c ../arch/netware
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUusertrk b/modules/metadata/NWGNUusertrk
deleted file mode 100644
index 6059066fa4..0000000000
--- a/modules/metadata/NWGNUusertrk
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/include \
- $(NWOS) \
- $(AP_WORK)/modules/arch/netware \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- -prefix pre_nw.h \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = usertrk
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) User Track Module
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = User Track Module
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/usertrk.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/mod_usertrack.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @$(NWOS)/httpd.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- usertrack_module \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/config.m4 b/modules/metadata/config.m4
deleted file mode 100644
index c970a71723..0000000000
--- a/modules/metadata/config.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(metadata)
-
-APACHE_MODULE(env, clearing/setting of ENV vars, , , yes)
-APACHE_MODULE(mime_magic, automagically determining MIME type)
-APACHE_MODULE(cern_meta, CERN-type meta files)
-APACHE_MODULE(expires, Expires header control, , , most)
-APACHE_MODULE(headers, HTTP header control, , , most)
-APACHE_MODULE(ident, RFC 1413 identity check, , , most)
-
-APACHE_MODULE(usertrack, user-session tracking, , , , [
- AC_CHECK_HEADERS(sys/times.h)
- AC_CHECK_FUNCS(times)
-])
-
-APACHE_MODULE(unique_id, per-request unique ids)
-APACHE_MODULE(setenvif, basing ENV vars on headers, , , yes)
-APACHE_MODULE(version, determining httpd version in config files)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/metadata/mod_cern_meta.c b/modules/metadata/mod_cern_meta.c
deleted file mode 100644
index 435d01f766..0000000000
--- a/modules/metadata/mod_cern_meta.c
+++ /dev/null
@@ -1,370 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_cern_meta.c
- * version 0.1.0
- * status beta
- *
- * Andrew Wilson <Andrew.Wilson@cm.cf.ac.uk> 25.Jan.96
- *
- * *** IMPORTANT ***
- * This version of mod_cern_meta.c controls Meta File behaviour on a
- * per-directory basis. Previous versions of the module defined behaviour
- * on a per-server basis. The upshot is that you'll need to revisit your
- * configuration files in order to make use of the new module.
- * ***
- *
- * Emulate the CERN HTTPD Meta file semantics. Meta files are HTTP
- * headers that can be output in addition to the normal range of
- * headers for each file accessed. They appear rather like the Apache
- * .asis files, and are able to provide a crude way of influencing
- * the Expires: header, as well as providing other curiosities.
- * There are many ways to manage meta information, this one was
- * chosen because there is already a large number of CERN users
- * who can exploit this module. It should be noted that there are probably
- * more sensitive ways of managing the Expires: header specifically.
- *
- * The module obeys the following directives, which can appear
- * in the server's .conf files and in .htaccess files.
- *
- * MetaFiles <on|off>
- *
- * turns on|off meta file processing for any directory.
- * Default value is off
- *
- * # turn on MetaFiles in this directory
- * MetaFiles on
- *
- * MetaDir <directory name>
- *
- * specifies the name of the directory in which Apache can find
- * meta information files. The directory is usually a 'hidden'
- * subdirectory of the directory that contains the file being
- * accessed. eg:
- *
- * # .meta files are in the *same* directory as the
- * # file being accessed
- * MetaDir .
- *
- * the default is to look in a '.web' subdirectory. This is the
- * same as for CERN 3.+ webservers and behaviour is the same as
- * for the directive:
- *
- * MetaDir .web
- *
- * MetaSuffix <meta file suffix>
- *
- * specifies the file name suffix for the file containing the
- * meta information. eg:
- *
- * # our meta files are suffixed with '.cern_meta'
- * MetaSuffix .cern_meta
- *
- * the default is to look for files with the suffix '.meta'. This
- * behaviour is the same as for the directive:
- *
- * MetaSuffix .meta
- *
- * When accessing the file
- *
- * DOCUMENT_ROOT/somedir/index.html
- *
- * this module will look for the file
- *
- * DOCUMENT_ROOT/somedir/.web/index.html.meta
- *
- * and will use its contents to generate additional MIME header
- * information.
- *
- * For more information on the CERN Meta file semantics see:
- *
- * http://www.w3.org/hypertext/WWW/Daemon/User/Config/General.html#MetaDir
- *
- * Change-log:
- * 29.Jan.96 pfopen/pfclose instead of fopen/fclose
- * DECLINE when real file not found, we may be checking each
- * of the index.html/index.shtml/index.htm variants and don't
- * need to report missing ones as spurious errors.
- * 31.Jan.96 log_error reports about a malformed .meta file, rather
- * than a script error.
- * 20.Jun.96 MetaFiles <on|off> default off, added, so that module
- * can be configured per-directory. Prior to this the module
- * was running for each request anywhere on the server, naughty..
- * 29.Jun.96 All directives made per-directory.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "util_script.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "apr_lib.h"
-
-#define DIR_CMD_PERMS OR_INDEXES
-
-#define DEFAULT_METADIR ".web"
-#define DEFAULT_METASUFFIX ".meta"
-#define DEFAULT_METAFILES 0
-
-module AP_MODULE_DECLARE_DATA cern_meta_module;
-
-typedef struct {
- const char *metadir;
- const char *metasuffix;
- int metafiles;
-} cern_meta_dir_config;
-
-static void *create_cern_meta_dir_config(apr_pool_t *p, char *dummy)
-{
- cern_meta_dir_config *new =
- (cern_meta_dir_config *) apr_palloc(p, sizeof(cern_meta_dir_config));
-
- new->metadir = NULL;
- new->metasuffix = NULL;
- new->metafiles = DEFAULT_METAFILES;
-
- return new;
-}
-
-static void *merge_cern_meta_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- cern_meta_dir_config *base = (cern_meta_dir_config *) basev;
- cern_meta_dir_config *add = (cern_meta_dir_config *) addv;
- cern_meta_dir_config *new =
- (cern_meta_dir_config *) apr_palloc(p, sizeof(cern_meta_dir_config));
-
- new->metadir = add->metadir ? add->metadir : base->metadir;
- new->metasuffix = add->metasuffix ? add->metasuffix : base->metasuffix;
- new->metafiles = add->metafiles;
-
- return new;
-}
-
-static const char *set_metadir(cmd_parms *parms, void *in_dconf, const char *arg)
-{
- cern_meta_dir_config *dconf = in_dconf;
-
- dconf->metadir = arg;
- return NULL;
-}
-
-static const char *set_metasuffix(cmd_parms *parms, void *in_dconf, const char *arg)
-{
- cern_meta_dir_config *dconf = in_dconf;
-
- dconf->metasuffix = arg;
- return NULL;
-}
-
-static const char *set_metafiles(cmd_parms *parms, void *in_dconf, int arg)
-{
- cern_meta_dir_config *dconf = in_dconf;
-
- dconf->metafiles = arg;
- return NULL;
-}
-
-
-static const command_rec cern_meta_cmds[] =
-{
- AP_INIT_FLAG("MetaFiles", set_metafiles, NULL, DIR_CMD_PERMS,
- "Limited to 'on' or 'off'"),
- AP_INIT_TAKE1("MetaDir", set_metadir, NULL, DIR_CMD_PERMS,
- "the name of the directory containing meta files"),
- AP_INIT_TAKE1("MetaSuffix", set_metasuffix, NULL, DIR_CMD_PERMS,
- "the filename suffix for meta files"),
- {NULL}
-};
-
-/* XXX: this is very similar to ap_scan_script_header_err_core...
- * are the differences deliberate, or just a result of bit rot?
- */
-static int scan_meta_file(request_rec *r, apr_file_t *f)
-{
- char w[MAX_STRING_LEN];
- char *l;
- int p;
- apr_table_t *tmp_headers;
-
- tmp_headers = apr_table_make(r->pool, 5);
- while (apr_file_gets(w, MAX_STRING_LEN - 1, f) == APR_SUCCESS) {
-
- /* Delete terminal (CR?)LF */
- p = strlen(w);
- if (p > 0 && w[p - 1] == '\n') {
- if (p > 1 && w[p - 2] == '\015')
- w[p - 2] = '\0';
- else
- w[p - 1] = '\0';
- }
-
- if (w[0] == '\0') {
- return OK;
- }
-
- /* if we see a bogus header don't ignore it. Shout and scream */
-
- if (!(l = strchr(w, ':'))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "malformed header in meta file: %s", r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- *l++ = '\0';
- while (*l && apr_isspace(*l))
- ++l;
-
- if (!strcasecmp(w, "Content-type")) {
- char *tmp;
- /* Nuke trailing whitespace */
-
- char *endp = l + strlen(l) - 1;
- while (endp > l && apr_isspace(*endp))
- *endp-- = '\0';
-
- tmp = apr_pstrdup(r->pool, l);
- ap_content_type_tolower(tmp);
- ap_set_content_type(r, tmp);
- }
- else if (!strcasecmp(w, "Status")) {
- sscanf(l, "%d", &r->status);
- r->status_line = apr_pstrdup(r->pool, l);
- }
- else {
- apr_table_set(tmp_headers, w, l);
- }
- }
- apr_table_overlap(r->headers_out, tmp_headers, APR_OVERLAP_TABLES_SET);
- return OK;
-}
-
-static int add_cern_meta_data(request_rec *r)
-{
- char *metafilename;
- char *leading_slash;
- char *last_slash;
- char *real_file;
- char *scrap_book;
- apr_file_t *f = NULL;
- apr_status_t retcode;
- cern_meta_dir_config *dconf;
- int rv;
- request_rec *rr;
-
- dconf = ap_get_module_config(r->per_dir_config, &cern_meta_module);
-
- if (!dconf->metafiles) {
- return DECLINED;
- };
-
- /* if ./.web/$1.meta exists then output 'asis' */
-
- if (r->finfo.filetype == 0) {
- return DECLINED;
- };
-
- /* is this a directory? */
- if (r->finfo.filetype == APR_DIR || r->uri[strlen(r->uri) - 1] == '/') {
- return DECLINED;
- };
-
- /* what directory is this file in? */
- scrap_book = apr_pstrdup(r->pool, r->filename);
-
- leading_slash = strchr(scrap_book, '/');
- last_slash = strrchr(scrap_book, '/');
- if ((last_slash != NULL) && (last_slash != leading_slash)) {
- /* skip over last slash */
- real_file = last_slash;
- real_file++;
- *last_slash = '\0';
- }
- else {
- /* no last slash, buh?! */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "internal error in mod_cern_meta: %s", r->filename);
- /* should really barf, but hey, let's be friends... */
- return DECLINED;
- };
-
- metafilename = apr_pstrcat(r->pool, scrap_book, "/",
- dconf->metadir ? dconf->metadir : DEFAULT_METADIR,
- "/", real_file,
- dconf->metasuffix ? dconf->metasuffix : DEFAULT_METASUFFIX,
- NULL);
-
- /* It sucks to require this subrequest to complete, because this
- * means people must leave their meta files accessible to the world.
- * A better solution might be a "safe open" feature of pfopen to avoid
- * pipes, symlinks, and crap like that.
- *
- * In fact, this doesn't suck. Because <Location > blocks are never run
- * against sub_req_lookup_file, the meta can be somewhat protected by
- * either masking it with a <Location > directive or alias, or stowing
- * the file outside of the web document tree, while providing the
- * appropriate directory blocks to allow access to it as a file.
- */
- rr = ap_sub_req_lookup_file(metafilename, r, NULL);
- if (rr->status != HTTP_OK) {
- ap_destroy_sub_req(rr);
- return DECLINED;
- }
- ap_destroy_sub_req(rr);
-
- retcode = apr_file_open(&f, metafilename, APR_READ, APR_OS_DEFAULT, r->pool);
- if (retcode != APR_SUCCESS) {
- if (APR_STATUS_IS_ENOENT(retcode)) {
- return DECLINED;
- }
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "meta file permissions deny server access: %s", metafilename);
- return HTTP_FORBIDDEN;
- };
-
- /* read the headers in */
- rv = scan_meta_file(r, f);
- apr_file_close(f);
-
- return rv;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(add_cern_meta_data,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA cern_meta_module =
-{
- STANDARD20_MODULE_STUFF,
- create_cern_meta_dir_config, /* dir config creater */
- merge_cern_meta_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- cern_meta_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_cern_meta.dsp b/modules/metadata/mod_cern_meta.dsp
deleted file mode 100644
index 1e56da8e08..0000000000
--- a/modules/metadata/mod_cern_meta.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_cern_meta" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_cern_meta - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_cern_meta.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_cern_meta.mak" CFG="mod_cern_meta - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_cern_meta - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_cern_meta - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_cern_meta - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_cern_meta_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_cern_meta - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_cern_meta_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_cern_meta - Win32 Release"
-# Name "mod_cern_meta - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_cern_meta.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cern_meta.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_cern_meta - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cern_meta.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_cern_meta.so "cern_meta_module for Apache" ../../include/ap_release.h > .\mod_cern_meta.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_cern_meta - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cern_meta.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_cern_meta.so "cern_meta_module for Apache" ../../include/ap_release.h > .\mod_cern_meta.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_cern_meta.exp b/modules/metadata/mod_cern_meta.exp
deleted file mode 100644
index d36e2be6a8..0000000000
--- a/modules/metadata/mod_cern_meta.exp
+++ /dev/null
@@ -1 +0,0 @@
-cern_meta_module
diff --git a/modules/metadata/mod_env.c b/modules/metadata/mod_env.c
deleted file mode 100644
index 5886f946e9..0000000000
--- a/modules/metadata/mod_env.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-
-typedef struct {
- apr_table_t *vars;
- apr_table_t *unsetenv;
-} env_dir_config_rec;
-
-module AP_MODULE_DECLARE_DATA env_module;
-
-static void *create_env_dir_config(apr_pool_t *p, char *dummy)
-{
- env_dir_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->vars = apr_table_make(p, 10);
- conf->unsetenv = apr_table_make(p, 10);
-
- return conf;
-}
-
-static void *merge_env_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- env_dir_config_rec *base = basev;
- env_dir_config_rec *add = addv;
- env_dir_config_rec *res = apr_palloc(p, sizeof(*res));
-
- const apr_table_entry_t *elts;
- const apr_array_header_t *arr;
-
- int i;
-
- /*
- * res->vars = copy_table( p, base->vars );
- * foreach $unsetenv ( @add->unsetenv )
- * table_unset( res->vars, $unsetenv );
- * foreach $element ( @add->vars )
- * table_set( res->vars, $element.key, $element.val );
- *
- * add->unsetenv already removed the vars from add->vars,
- * if they preceeded the UnsetEnv directive.
- */
- res->vars = apr_table_copy(p, base->vars);
- res->unsetenv = NULL;
-
- arr = apr_table_elts(add->unsetenv);
- if (arr) {
- elts = (const apr_table_entry_t *)arr->elts;
-
- for (i = 0; i < arr->nelts; ++i) {
- apr_table_unset(res->vars, elts[i].key);
- }
- }
-
- arr = apr_table_elts(add->vars);
- if (arr) {
- elts = (const apr_table_entry_t *)arr->elts;
-
- for (i = 0; i < arr->nelts; ++i) {
- apr_table_setn(res->vars, elts[i].key, elts[i].val);
- }
- }
-
- return res;
-}
-
-static const char *add_env_module_vars_passed(cmd_parms *cmd, void *sconf_,
- const char *arg)
-{
- env_dir_config_rec *sconf = sconf_;
- apr_table_t *vars = sconf->vars;
- const char *env_var;
-
- env_var = getenv(arg);
- if (env_var != NULL) {
- apr_table_setn(vars, arg, apr_pstrdup(cmd->pool, env_var));
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "PassEnv variable %s was undefined", arg);
- }
-
- return NULL;
-}
-
-static const char *add_env_module_vars_set(cmd_parms *cmd, void *sconf_,
- const char *name, const char *value)
-{
- env_dir_config_rec *sconf = sconf_;
-
- /* name is mandatory, value is optional. no value means
- * set the variable to an empty string
- */
- apr_table_setn(sconf->vars, name, value ? value : "");
-
- return NULL;
-}
-
-static const char *add_env_module_vars_unset(cmd_parms *cmd, void *sconf_,
- const char *arg)
-{
- env_dir_config_rec *sconf = sconf_;
-
- /* Always UnsetEnv FOO in the same context as {Set,Pass}Env FOO
- * only if this UnsetEnv follows the {Set,Pass}Env. The merge
- * will only apply unsetenv to the parent env (main server).
- */
- apr_table_set(sconf->unsetenv, arg, NULL);
- apr_table_unset(sconf->vars, arg);
-
- return NULL;
-}
-
-static const command_rec env_module_cmds[] =
-{
-AP_INIT_ITERATE("PassEnv", add_env_module_vars_passed, NULL,
- OR_FILEINFO, "a list of environment variables to pass to CGI."),
-AP_INIT_TAKE12("SetEnv", add_env_module_vars_set, NULL,
- OR_FILEINFO, "an environment variable name and optional value to pass to CGI."),
-AP_INIT_ITERATE("UnsetEnv", add_env_module_vars_unset, NULL,
- OR_FILEINFO, "a list of variables to remove from the CGI environment."),
- {NULL},
-};
-
-static int fixup_env_module(request_rec *r)
-{
- apr_table_t *e = r->subprocess_env;
- env_dir_config_rec *sconf = ap_get_module_config(r->per_dir_config,
- &env_module);
- apr_table_t *vars = sconf->vars;
-
- if (!apr_table_elts(sconf->vars)->nelts)
- return DECLINED;
-
- r->subprocess_env = apr_table_overlay(r->pool, e, vars);
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(fixup_env_module, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA env_module =
-{
- STANDARD20_MODULE_STUFF,
- create_env_dir_config, /* dir config creater */
- merge_env_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- env_module_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_env.dsp b/modules/metadata/mod_env.dsp
deleted file mode 100644
index 027884043c..0000000000
--- a/modules/metadata/mod_env.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_env" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_env - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_env.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_env.mak" CFG="mod_env - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_env - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_env - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_env - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_env_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_env - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_env_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_env - Win32 Release"
-# Name "mod_env - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_env.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_env.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_env - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_env.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_env.so "env_module for Apache" ../../include/ap_release.h > .\mod_env.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_env - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_env.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_env.so "env_module for Apache" ../../include/ap_release.h > .\mod_env.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_env.exp b/modules/metadata/mod_env.exp
deleted file mode 100644
index b487bf09c8..0000000000
--- a/modules/metadata/mod_env.exp
+++ /dev/null
@@ -1 +0,0 @@
-env_module
diff --git a/modules/metadata/mod_expires.c b/modules/metadata/mod_expires.c
deleted file mode 100644
index b70c123088..0000000000
--- a/modules/metadata/mod_expires.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_expires.c
- * version 0.0.11
- * status beta
- *
- * Andrew Wilson <Andrew.Wilson@cm.cf.ac.uk> 26.Jan.96
- *
- * This module allows you to control the form of the Expires: header
- * that Apache issues for each access. Directives can appear in
- * configuration files or in .htaccess files so expiry semantics can
- * be defined on a per-directory basis.
- *
- * DIRECTIVE SYNTAX
- *
- * Valid directives are:
- *
- * ExpiresActive on | off
- * ExpiresDefault <code><seconds>
- * ExpiresByType type/encoding <code><seconds>
- *
- * Valid values for <code> are:
- *
- * 'M' expires header shows file modification date + <seconds>
- * 'A' expires header shows access time + <seconds>
- *
- * [I'm not sure which of these is best under different
- * circumstances, I guess it's for other people to explore.
- * The effects may be indistinguishable for a number of cases]
- *
- * <seconds> should be an integer value [acceptable to atoi()]
- *
- * There is NO space between the <code> and <seconds>.
- *
- * For example, a directory which contains information which changes
- * frequently might contain:
- *
- * # reports generated by cron every hour. don't let caches
- * # hold onto stale information
- * ExpiresDefault M3600
- *
- * Another example, our html pages can change all the time, the gifs
- * tend not to change often:
- *
- * # pages are hot (1 week), images are cold (1 month)
- * ExpiresByType text/html A604800
- * ExpiresByType image/gif A2592000
- *
- * Expires can be turned on for all URLs on the server by placing the
- * following directive in a conf file:
- *
- * ExpiresActive on
- *
- * ExpiresActive can also appear in .htaccess files, enabling the
- * behaviour to be turned on or off for each chosen directory.
- *
- * # turn off Expires behaviour in this directory
- * # and subdirectories
- * ExpiresActive off
- *
- * Directives defined for a directory are valid in subdirectories
- * unless explicitly overridden by new directives in the subdirectory
- * .htaccess files.
- *
- * ALTERNATIVE DIRECTIVE SYNTAX
- *
- * Directives can also be defined in a more readable syntax of the form:
- *
- * ExpiresDefault "<base> [plus] {<num> <type>}*"
- * ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"
- *
- * where <base> is one of:
- * access
- * now equivalent to 'access'
- * modification
- *
- * where the 'plus' keyword is optional
- *
- * where <num> should be an integer value [acceptable to atoi()]
- *
- * where <type> is one of:
- * years
- * months
- * weeks
- * days
- * hours
- * minutes
- * seconds
- *
- * For example, any of the following directives can be used to make
- * documents expire 1 month after being accessed, by default:
- *
- * ExpiresDefault "access plus 1 month"
- * ExpiresDefault "access plus 4 weeks"
- * ExpiresDefault "access plus 30 days"
- *
- * The expiry time can be fine-tuned by adding several '<num> <type>'
- * clauses:
- *
- * ExpiresByType text/html "access plus 1 month 15 days 2 hours"
- * ExpiresByType image/gif "modification plus 5 hours 3 minutes"
- *
- * ---
- *
- * Change-log:
- * 29.Jan.96 Hardened the add_* functions. Server will now bail out
- * if bad directives are given in the conf files.
- * 02.Feb.96 Returns DECLINED if not 'ExpiresActive on', giving other
- * expires-aware modules a chance to play with the same
- * directives. [Michael Rutman]
- * 03.Feb.96 Call tzset() before localtime(). Trying to get the module
- * to work properly in non GMT timezones.
- * 12.Feb.96 Modified directive syntax to allow more readable commands:
- * ExpiresDefault "now plus 10 days 20 seconds"
- * ExpiresDefault "access plus 30 days"
- * ExpiresDefault "modification plus 1 year 10 months 30 days"
- * 13.Feb.96 Fix call to table_get() with NULL 2nd parameter [Rob Hartill]
- * 19.Feb.96 Call gm_timestr_822() to get time formatted correctly, can't
- * rely on presence of HTTP_TIME_FORMAT in Apache 1.1+.
- * 21.Feb.96 This version (0.0.9) reverses assumptions made in 0.0.8
- * about star/star handlers. Reverting to 0.0.7 behaviour.
- * 08.Jun.96 allows ExpiresDefault to be used with responses that use
- * the DefaultType by not DECLINING, but instead skipping
- * the table_get check and then looking for an ExpiresDefault.
- * [Rob Hartill]
- * 04.Nov.96 'const' definitions added.
- *
- * TODO
- * add support for Cache-Control: max-age=20 from the HTTP/1.1
- * proposal (in this case, a ttl of 20 seconds) [ask roy]
- * add per-file expiry and explicit expiry times - duplicates some
- * of the mod_cern_meta.c functionality. eg:
- * ExpiresExplicit index.html "modification plus 30 days"
- *
- * BUGS
- * Hi, welcome to the internet.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "http_protocol.h"
-
-typedef struct {
- int active;
- int wildcards;
- char *expiresdefault;
- apr_table_t *expiresbytype;
-} expires_dir_config;
-
-/* from mod_dir, why is this alias used?
- */
-#define DIR_CMD_PERMS OR_INDEXES
-
-#define ACTIVE_ON 1
-#define ACTIVE_OFF 0
-#define ACTIVE_DONTCARE 2
-
-module AP_MODULE_DECLARE_DATA expires_module;
-
-static void *create_dir_expires_config(apr_pool_t *p, char *dummy)
-{
- expires_dir_config *new =
- (expires_dir_config *) apr_pcalloc(p, sizeof(expires_dir_config));
- new->active = ACTIVE_DONTCARE;
- new->wildcards = 0;
- new->expiresdefault = NULL;
- new->expiresbytype = apr_table_make(p, 4);
- return (void *) new;
-}
-
-static const char *set_expiresactive(cmd_parms *cmd, void *in_dir_config, int arg)
-{
- expires_dir_config *dir_config = in_dir_config;
-
- /* if we're here at all it's because someone explicitly
- * set the active flag
- */
- dir_config->active = ACTIVE_ON;
- if (arg == 0) {
- dir_config->active = ACTIVE_OFF;
- }
- return NULL;
-}
-
-/* check_code() parse 'code' and return NULL or an error response
- * string. If we return NULL then real_code contains code converted
- * to the cnnnn format.
- */
-static char *check_code(apr_pool_t *p, const char *code, char **real_code)
-{
- char *word;
- char base = 'X';
- int modifier = 0;
- int num = 0;
- int factor = 0;
-
- /* 0.0.4 compatibility?
- */
- if ((code[0] == 'A') || (code[0] == 'M')) {
- *real_code = (char *)code;
- return NULL;
- }
-
- /* <base> [plus] {<num> <type>}*
- */
-
- /* <base>
- */
- word = ap_getword_conf(p, &code);
- if (!strncasecmp(word, "now", 1) ||
- !strncasecmp(word, "access", 1)) {
- base = 'A';
- }
- else if (!strncasecmp(word, "modification", 1)) {
- base = 'M';
- }
- else {
- return apr_pstrcat(p, "bad expires code, unrecognised <base> '",
- word, "'", NULL);
- }
-
- /* [plus]
- */
- word = ap_getword_conf(p, &code);
- if (!strncasecmp(word, "plus", 1)) {
- word = ap_getword_conf(p, &code);
- }
-
- /* {<num> <type>}*
- */
- while (word[0]) {
- /* <num>
- */
- if (apr_isdigit(word[0])) {
- num = atoi(word);
- }
- else {
- return apr_pstrcat(p, "bad expires code, numeric value expected <num> '",
- word, "'", NULL);
- }
-
- /* <type>
- */
- word = ap_getword_conf(p, &code);
- if (word[0]) {
- /* do nothing */
- }
- else {
- return apr_pstrcat(p, "bad expires code, missing <type>", NULL);
- }
-
- factor = 0;
- if (!strncasecmp(word, "years", 1)) {
- factor = 60 * 60 * 24 * 365;
- }
- else if (!strncasecmp(word, "months", 2)) {
- factor = 60 * 60 * 24 * 30;
- }
- else if (!strncasecmp(word, "weeks", 1)) {
- factor = 60 * 60 * 24 * 7;
- }
- else if (!strncasecmp(word, "days", 1)) {
- factor = 60 * 60 * 24;
- }
- else if (!strncasecmp(word, "hours", 1)) {
- factor = 60 * 60;
- }
- else if (!strncasecmp(word, "minutes", 2)) {
- factor = 60;
- }
- else if (!strncasecmp(word, "seconds", 1)) {
- factor = 1;
- }
- else {
- return apr_pstrcat(p, "bad expires code, unrecognised <type>",
- "'", word, "'", NULL);
- }
-
- modifier = modifier + factor * num;
-
- /* next <num>
- */
- word = ap_getword_conf(p, &code);
- }
-
- *real_code = apr_psprintf(p, "%c%d", base, modifier);
-
- return NULL;
-}
-
-static const char *set_expiresbytype(cmd_parms *cmd, void *in_dir_config,
- const char *mime, const char *code)
-{
- expires_dir_config *dir_config = in_dir_config;
- char *response, *real_code;
- const char *check;
-
- check = ap_strrchr_c(mime, '/');
- if ((strlen(++check) == 1) && (*check == '*')) {
- dir_config->wildcards = 1;
- }
-
- if ((response = check_code(cmd->pool, code, &real_code)) == NULL) {
- apr_table_setn(dir_config->expiresbytype, mime, real_code);
- return NULL;
- }
- return apr_pstrcat(cmd->pool,
- "'ExpiresByType ", mime, " ", code, "': ", response, NULL);
-}
-
-static const char *set_expiresdefault(cmd_parms *cmd, void *in_dir_config,
- const char *code)
-{
- expires_dir_config * dir_config = in_dir_config;
- char *response, *real_code;
-
- if ((response = check_code(cmd->pool, code, &real_code)) == NULL) {
- dir_config->expiresdefault = real_code;
- return NULL;
- }
- return apr_pstrcat(cmd->pool,
- "'ExpiresDefault ", code, "': ", response, NULL);
-}
-
-static const command_rec expires_cmds[] =
-{
- AP_INIT_FLAG("ExpiresActive", set_expiresactive, NULL, DIR_CMD_PERMS,
- "Limited to 'on' or 'off'"),
- AP_INIT_TAKE2("ExpiresByType", set_expiresbytype, NULL, DIR_CMD_PERMS,
- "a MIME type followed by an expiry date code"),
- AP_INIT_TAKE1("ExpiresDefault", set_expiresdefault, NULL, DIR_CMD_PERMS,
- "an expiry date code"),
- {NULL}
-};
-
-static void *merge_expires_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- expires_dir_config *new = (expires_dir_config *) apr_pcalloc(p, sizeof(expires_dir_config));
- expires_dir_config *base = (expires_dir_config *) basev;
- expires_dir_config *add = (expires_dir_config *) addv;
-
- if (add->active == ACTIVE_DONTCARE) {
- new->active = base->active;
- }
- else {
- new->active = add->active;
- }
-
- if (add->expiresdefault != NULL) {
- new->expiresdefault = add->expiresdefault;
- }
- else {
- new->expiresdefault = base->expiresdefault;
- }
- new->wildcards = add->wildcards;
- new->expiresbytype = apr_table_overlay(p, add->expiresbytype,
- base->expiresbytype);
- return new;
-}
-
-/*
- * Handle the setting of the expiration response header fields according
- * to our criteria.
- */
-
-static int set_expiration_fields(request_rec *r, const char *code,
- apr_table_t *t)
-{
- apr_time_t base;
- apr_time_t additional;
- apr_time_t expires;
- int additional_sec;
- char *timestr;
-
- switch (code[0]) {
- case 'M':
- if (r->finfo.filetype == 0) {
- /* file doesn't exist on disk, so we can't do anything based on
- * modification time. Note that this does _not_ log an error.
- */
- return DECLINED;
- }
- base = r->finfo.mtime;
- additional_sec = atoi(&code[1]);
- additional = apr_time_from_sec(additional_sec);
- break;
- case 'A':
- /* there's been some discussion and it's possible that
- * 'access time' will be stored in request structure
- */
- base = r->request_time;
- additional_sec = atoi(&code[1]);
- additional = apr_time_from_sec(additional_sec);
- break;
- default:
- /* expecting the add_* routines to be case-hardened this
- * is just a reminder that module is beta
- */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "internal error: bad expires code: %s", r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- expires = base + additional;
- apr_table_mergen(t, "Cache-Control",
- apr_psprintf(r->pool, "max-age=%" APR_TIME_T_FMT,
- apr_time_sec(expires - r->request_time)));
- timestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
- apr_rfc822_date(timestr, expires);
- apr_table_setn(t, "Expires", timestr);
- return OK;
-}
-
-/*
- * Output filter to set the Expires response header field
- * according to the content-type of the response -- if it hasn't
- * already been set.
- */
-static apr_status_t expires_filter(ap_filter_t *f,
- apr_bucket_brigade *b)
-{
- request_rec *r;
- expires_dir_config *conf;
- const char *expiry;
- apr_table_t *t;
-
- r = f->r;
- conf = (expires_dir_config *) ap_get_module_config(r->per_dir_config,
- &expires_module);
-
- /*
- * Check to see which output header table we should use;
- * mod_cgi loads script fields into r->err_headers_out,
- * for instance.
- */
- expiry = apr_table_get(r->err_headers_out, "Expires");
- if (expiry != NULL) {
- t = r->err_headers_out;
- }
- else {
- expiry = apr_table_get(r->headers_out, "Expires");
- t = r->headers_out;
- }
- if (expiry == NULL) {
- /*
- * No expiration has been set, so we can apply any managed by
- * this module. First, check to see if there is an applicable
- * ExpiresByType directive.
- */
- expiry = apr_table_get(conf->expiresbytype,
- ap_field_noparam(r->pool, r->content_type));
- if (expiry == NULL) {
- int usedefault = 1;
- /*
- * See if we have a wildcard entry for the major type.
- */
- if (conf->wildcards) {
- char *checkmime;
- char *spos;
- checkmime = apr_pstrdup(r->pool, r->content_type);
- spos = checkmime ? ap_strchr(checkmime, '/') : NULL;
- if (spos != NULL) {
- /*
- * Without a '/' character, nothing we have will match.
- * However, we have one.
- */
- if (strlen(++spos) > 0) {
- *spos++ = '*';
- *spos = '\0';
- }
- else {
- checkmime = apr_pstrcat(r->pool, checkmime, "*", NULL);
- }
- expiry = apr_table_get(conf->expiresbytype, checkmime);
- usedefault = (expiry == NULL);
- }
- }
- if (usedefault) {
- /*
- * Use the ExpiresDefault directive
- */
- expiry = conf->expiresdefault;
- }
- }
- if (expiry != NULL) {
- set_expiration_fields(r, expiry, t);
- }
- }
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, b);
-}
-
-static void expires_insert_filter(request_rec *r)
-{
- expires_dir_config *conf;
-
- /* Don't add Expires headers to errors */
- if (ap_is_HTTP_ERROR(r->status)) {
- return;
- }
- /* Say no to subrequests */
- if (r->main != NULL) {
- return;
- }
- conf = (expires_dir_config *) ap_get_module_config(r->per_dir_config,
- &expires_module);
-
- /* Check to see if the filter is enabled and if there are any applicable
- * config directives for this directory scope
- */
- if (conf->active != ACTIVE_ON ||
- (apr_is_empty_table(conf->expiresbytype) && !conf->expiresdefault)) {
- return;
- }
- ap_add_output_filter("MOD_EXPIRES", NULL, r, r->connection);
- return;
-}
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_output_filter("MOD_EXPIRES", expires_filter, NULL,
- AP_FTYPE_CONTENT_SET);
- ap_hook_insert_error_filter(expires_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_insert_filter(expires_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA expires_module =
-{
- STANDARD20_MODULE_STUFF,
- create_dir_expires_config, /* dir config creater */
- merge_expires_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- expires_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_expires.dsp b/modules/metadata/mod_expires.dsp
deleted file mode 100644
index 3271a42325..0000000000
--- a/modules/metadata/mod_expires.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_expires" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_expires - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_expires.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_expires.mak" CFG="mod_expires - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_expires - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_expires - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_expires - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_expires_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_expires - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_expires_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_expires - Win32 Release"
-# Name "mod_expires - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_expires.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_expires.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_expires - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_expires.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_expires.so "expires_module for Apache" ../../include/ap_release.h > .\mod_expires.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_expires - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_expires.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_expires.so "expires_module for Apache" ../../include/ap_release.h > .\mod_expires.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_expires.exp b/modules/metadata/mod_expires.exp
deleted file mode 100644
index 863a96878e..0000000000
--- a/modules/metadata/mod_expires.exp
+++ /dev/null
@@ -1 +0,0 @@
-expires_module
diff --git a/modules/metadata/mod_headers.c b/modules/metadata/mod_headers.c
deleted file mode 100644
index 988473f8c4..0000000000
--- a/modules/metadata/mod_headers.c
+++ /dev/null
@@ -1,747 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_headers.c: Add/append/remove HTTP response headers
- * Written by Paul Sutton, paul@ukweb.com, 1 Oct 1996
- *
- * The Header directive can be used to add/replace/remove HTTP headers
- * within the response message. The RequestHeader directive can be used
- * to add/replace/remove HTTP headers before a request message is processed.
- * Valid in both per-server and per-dir configurations.
- *
- * Syntax is:
- *
- * Header action header value
- * RequestHeader action header value
- *
- * Where action is one of:
- * set - set this header, replacing any old value
- * add - add this header, possible resulting in two or more
- * headers with the same name
- * append - append this text onto any existing header of this same
- * unset - remove this header
- *
- * Where action is unset, the third argument (value) should not be given.
- * The header name can include the colon, or not.
- *
- * The Header and RequestHeader directives can only be used where allowed
- * by the FileInfo override.
- *
- * When the request is processed, the header directives are processed in
- * this order: firstly, the main server, then the virtual server handling
- * this request (if any), then any <Directory> sections (working downwards
- * from the root dir), then an <Location> sections (working down from
- * shortest URL component), the any <File> sections. This order is
- * important if any 'set' or 'unset' actions are used. For example,
- * the following two directives have different effect if applied in
- * the reverse order:
- *
- * Header append Author "John P. Doe"
- * Header unset Author
- *
- * Examples:
- *
- * To set the "Author" header, use
- * Header add Author "John P. Doe"
- *
- * To remove a header:
- * Header unset Author
- *
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-
-#include "apr_hash.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_filter.h"
-#include "http_protocol.h"
-
-#include "mod_ssl.h" /* for the ssl_var_lookup optional function defn */
-
-/* format_tag_hash is initialized during pre-config */
-static apr_hash_t *format_tag_hash;
-
-typedef enum {
- hdr_add = 'a', /* add header (could mean multiple hdrs) */
- hdr_set = 's', /* set (replace old value) */
- hdr_append = 'm', /* append (merge into any old value) */
- hdr_unset = 'u', /* unset header */
- hdr_echo = 'e' /* echo headers from request to response */
-} hdr_actions;
-
-/*
- * magic cmd->info values
- */
-static char hdr_in = '0'; /* RequestHeader */
-static char hdr_out = '1'; /* Header onsuccess */
-static char hdr_err = '2'; /* Header always */
-
-/*
- * There is an array of struct format_tag per Header/RequestHeader
- * config directive
- */
-typedef struct {
- const char* (*func)(request_rec *r,char *arg);
- char *arg;
-} format_tag;
-
-/* 'Magic' condition_var value to run action in post_read_request */
-static const char* condition_early = "early";
-/*
- * There is one "header_entry" per Header/RequestHeader config directive
- */
-typedef struct {
- hdr_actions action;
- const char *header;
- apr_array_header_t *ta; /* Array of format_tag structs */
- regex_t *regex;
- const char *condition_var;
-} header_entry;
-
-/* echo_do is used for Header echo to iterate through the request headers*/
-typedef struct {
- request_rec *r;
- header_entry *hdr;
-} echo_do;
-
-/*
- * headers_conf is our per-module configuration. This is used as both
- * a per-dir and per-server config
- */
-typedef struct {
- apr_array_header_t *fixup_in;
- apr_array_header_t *fixup_out;
- apr_array_header_t *fixup_err;
-} headers_conf;
-
-module AP_MODULE_DECLARE_DATA headers_module;
-
-/* Pointer to ssl_var_lookup, if available. */
-static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *header_ssl_lookup = NULL;
-
-/*
- * Tag formatting functions
- */
-static const char *constant_item(request_rec *r, char *stuff)
-{
- return stuff;
-}
-static const char *header_request_duration(request_rec *r, char *a)
-{
- return apr_psprintf(r->pool, "D=%" APR_TIME_T_FMT,
- (apr_time_now() - r->request_time));
-}
-static const char *header_request_time(request_rec *r, char *a)
-{
- return apr_psprintf(r->pool, "t=%" APR_TIME_T_FMT, r->request_time);
-}
-
-/* unwrap_header returns HDR with any newlines converted into
- * whitespace if necessary. */
-static const char *unwrap_header(apr_pool_t *p, const char *hdr)
-{
- if (ap_strchr_c(hdr, APR_ASCII_LF) || ap_strchr_c(hdr, APR_ASCII_CR)) {
- char *ptr;
-
- hdr = ptr = apr_pstrdup(p, hdr);
-
- do {
- if (*ptr == APR_ASCII_LF || *ptr == APR_ASCII_CR)
- *ptr = APR_ASCII_BLANK;
- } while (*ptr++);
- }
- return hdr;
-}
-
-static const char *header_request_env_var(request_rec *r, char *a)
-{
- const char *s = apr_table_get(r->subprocess_env,a);
-
- if (s)
- return unwrap_header(r->pool, s);
- else
- return "(null)";
-}
-
-static const char *header_request_ssl_var(request_rec *r, char *name)
-{
- if (header_ssl_lookup) {
- const char *val = header_ssl_lookup(r->pool, r->server,
- r->connection, r, name);
- if (val && val[0])
- return unwrap_header(r->pool, val);
- else
- return "(null)";
- }
- else {
- return "(null)";
- }
-}
-
-/*
- * Config routines
- */
-
-static void *create_headers_dir_config(apr_pool_t *p, char *d)
-{
- headers_conf *conf = apr_pcalloc(p, sizeof(*conf));
-
- conf->fixup_in = apr_array_make(p, 2, sizeof(header_entry));
- conf->fixup_out = apr_array_make(p, 2, sizeof(header_entry));
- conf->fixup_err = apr_array_make(p, 2, sizeof(header_entry));
-
- return conf;
-}
-
-static void *merge_headers_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- headers_conf *newconf = apr_pcalloc(p, sizeof(*newconf));
- headers_conf *base = basev;
- headers_conf *overrides = overridesv;
-
- newconf->fixup_in = apr_array_append(p, base->fixup_in,
- overrides->fixup_in);
- newconf->fixup_out = apr_array_append(p, base->fixup_out,
- overrides->fixup_out);
- newconf->fixup_err = apr_array_append(p, base->fixup_err,
- overrides->fixup_err);
-
- return newconf;
-}
-
-static char *parse_misc_string(apr_pool_t *p, format_tag *tag, const char **sa)
-{
- const char *s;
- char *d;
-
- tag->func = constant_item;
-
- s = *sa;
- while (*s && *s != '%') {
- s++;
- }
- /*
- * This might allocate a few chars extra if there's a backslash
- * escape in the format string.
- */
- tag->arg = apr_palloc(p, s - *sa + 1);
-
- d = tag->arg;
- s = *sa;
- while (*s && *s != '%') {
- if (*s != '\\') {
- *d++ = *s++;
- }
- else {
- s++;
- switch (*s) {
- case '\\':
- *d++ = '\\';
- s++;
- break;
- case 'r':
- *d++ = '\r';
- s++;
- break;
- case 'n':
- *d++ = '\n';
- s++;
- break;
- case 't':
- *d++ = '\t';
- s++;
- break;
- default:
- /* copy verbatim */
- *d++ = '\\';
- /*
- * Allow the loop to deal with this *s in the normal
- * fashion so that it handles end of string etc.
- * properly.
- */
- break;
- }
- }
- }
- *d = '\0';
-
- *sa = s;
- return NULL;
-}
-
-static char *parse_format_tag(apr_pool_t *p, format_tag *tag, const char **sa)
-{
- const char *s = *sa;
- const char * (*tag_handler)(request_rec *,char *);
-
- /* Handle string literal/conditionals */
- if (*s != '%') {
- return parse_misc_string(p, tag, sa);
- }
- s++; /* skip the % */
-
- /* Pass through %% as % */
- if (*s == '%') {
- tag->func = constant_item;
- tag->arg = "%";
- *sa = ++s;
- return NULL;
- }
-
- tag->arg = '\0';
- /* grab the argument if there is one */
- if (*s == '{') {
- ++s;
- tag->arg = ap_getword(p,&s,'}');
- }
-
- tag_handler = (const char * (*)(request_rec *,char *))apr_hash_get(format_tag_hash, s++, 1);
-
- if (!tag_handler) {
- char dummy[2];
- dummy[0] = s[-1];
- dummy[1] = '\0';
- return apr_pstrcat(p, "Unrecognized header format %", dummy, NULL);
- }
- tag->func = tag_handler;
-
- *sa = s;
- return NULL;
-}
-
-/*
- * A format string consists of white space, text and optional format
- * tags in any order. E.g.,
- *
- * Header add MyHeader "Free form text %D %t more text"
- *
- * Decompose the format string into its tags. Each tag (struct format_tag)
- * contains a pointer to the function used to format the tag. Then save each
- * tag in the tag array anchored in the header_entry.
- */
-static char *parse_format_string(apr_pool_t *p, header_entry *hdr, const char *s)
-{
- char *res;
-
- /* No string to parse with unset and echo commands */
- if (hdr->action == hdr_unset ||
- hdr->action == hdr_echo) {
- return NULL;
- }
-
- hdr->ta = apr_array_make(p, 10, sizeof(format_tag));
-
- while (*s) {
- if ((res = parse_format_tag(p, (format_tag *) apr_array_push(hdr->ta), &s))) {
- return res;
- }
- }
- return NULL;
-}
-
-/* handle RequestHeader and Header directive */
-static APR_INLINE const char *header_inout_cmd(cmd_parms *cmd,
- void *indirconf,
- const char *action,
- const char *hdr,
- const char *value,
- const char* envclause)
-{
- headers_conf *dirconf = indirconf;
- const char *condition_var = NULL;
- const char *colon;
- header_entry *new;
-
- apr_array_header_t *fixup = (cmd->info == &hdr_in)
- ? dirconf->fixup_in : (cmd->info == &hdr_err)
- ? dirconf->fixup_err
- : dirconf->fixup_out;
-
- new = (header_entry *) apr_array_push(fixup);
-
- if (!strcasecmp(action, "set"))
- new->action = hdr_set;
- else if (!strcasecmp(action, "add"))
- new->action = hdr_add;
- else if (!strcasecmp(action, "append"))
- new->action = hdr_append;
- else if (!strcasecmp(action, "unset"))
- new->action = hdr_unset;
- else if (!strcasecmp(action, "echo"))
- new->action = hdr_echo;
- else
- return "first argument must be 'add', 'set', 'append', 'unset' or "
- "'echo'.";
-
- if (new->action == hdr_unset) {
- if (value) {
- if (envclause) {
- return "header unset takes two arguments";
- }
- envclause = value;
- value = NULL;
- }
- }
- else if (new->action == hdr_echo) {
- regex_t *regex;
-
- if (value) {
- if (envclause) {
- return "Header echo takes two arguments";
- }
- envclause = value;
- value = NULL;
- }
- if (cmd->info != &hdr_out && cmd->info != &hdr_err)
- return "Header echo only valid on Header "
- "directives";
- else {
- regex = ap_pregcomp(cmd->pool, hdr, REG_EXTENDED | REG_NOSUB);
- if (regex == NULL) {
- return "Header echo regex could not be compiled";
- }
- }
- new->regex = regex;
- }
- else if (!value)
- return "Header requires three arguments";
-
- /* Handle the envclause on Header */
- if (envclause != NULL) {
- if (strcasecmp(envclause, "early") == 0) {
- condition_var = condition_early;
- }
- else {
- if (strncasecmp(envclause, "env=", 4) != 0) {
- return "error: envclause should be in the form env=envar";
- }
- if ((envclause[4] == '\0')
- || ((envclause[4] == '!') && (envclause[5] == '\0'))) {
- return "error: missing environment variable name. "
- "envclause should be in the form env=envar ";
- }
- condition_var = envclause + 4;
- }
- }
-
- if ((colon = ap_strchr_c(hdr, ':'))) {
- hdr = apr_pstrmemdup(cmd->pool, hdr, colon-hdr);
- }
-
- new->header = hdr;
- new->condition_var = condition_var;
-
- return parse_format_string(cmd->pool, new, value);
-}
-
-/* Handle all (xxx)Header directives */
-static const char *header_cmd(cmd_parms *cmd, void *indirconf,
- const char *args)
-{
- const char *action;
- const char *hdr;
- const char *val;
- const char *envclause;
-
- action = ap_getword_conf(cmd->pool, &args);
- if (cmd->info == &hdr_out) {
- if (!strcasecmp(action, "always")) {
- cmd->info = &hdr_err;
- action = ap_getword_conf(cmd->pool, &args);
- }
- else if (!strcasecmp(action, "onsuccess")) {
- action = ap_getword_conf(cmd->pool, &args);
- }
- }
- hdr = ap_getword_conf(cmd->pool, &args);
- val = *args ? ap_getword_conf(cmd->pool, &args) : NULL;
- envclause = *args ? ap_getword_conf(cmd->pool, &args) : NULL;
-
- if (*args) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name,
- " has too many arguments", NULL);
- }
-
- return header_inout_cmd(cmd, indirconf, action, hdr, val, envclause);
-}
-
-/*
- * Process the tags in the format string. Tags may be format specifiers
- * (%D, %t, etc.), whitespace or text strings. For each tag, run the handler
- * (formatter) specific to the tag. Handlers return text strings.
- * Concatenate the return from each handler into one string that is
- * returned from this call.
- */
-static char* process_tags(header_entry *hdr, request_rec *r)
-{
- int i;
- const char *s;
- char *str = NULL;
-
- format_tag *tag = (format_tag*) hdr->ta->elts;
-
- for (i = 0; i < hdr->ta->nelts; i++) {
- s = tag[i].func(r, tag[i].arg);
- if (str == NULL)
- str = apr_pstrdup(r->pool, s);
- else
- str = apr_pstrcat(r->pool, str, s, NULL);
- }
- return str ? str : "";
-}
-
-static int echo_header(echo_do *v, const char *key, const char *val)
-{
- /* If the input header (key) matches the regex, echo it intact to
- * r->headers_out.
- */
- if (!ap_regexec(v->hdr->regex, key, 0, NULL, 0)) {
- apr_table_add(v->r->headers_out, key, val);
- }
-
- return 1;
-}
-
-static void do_headers_fixup(request_rec *r, apr_table_t *headers,
- apr_array_header_t *fixup, int early)
-{
- int i;
-
- for (i = 0; i < fixup->nelts; ++i) {
- header_entry *hdr = &((header_entry *) (fixup->elts))[i];
- const char *envar = hdr->condition_var;
-
- /* ignore early headers in late calls */
- if (!early && (envar == condition_early)) {
- continue;
- }
- /* ignore late headers in early calls */
- else if (early && (envar != condition_early)) {
- continue;
- }
- /* Have any conditional envar-controlled Header processing to do? */
- else if (envar && !early) {
- if (*envar != '!') {
- if (apr_table_get(r->subprocess_env, envar) == NULL)
- continue;
- }
- else {
- if (apr_table_get(r->subprocess_env, &envar[1]) != NULL)
- continue;
- }
- }
-
- switch (hdr->action) {
- case hdr_add:
- apr_table_addn(headers, hdr->header, process_tags(hdr, r));
- break;
- case hdr_append:
- apr_table_mergen(headers, hdr->header, process_tags(hdr, r));
- break;
- case hdr_set:
- apr_table_setn(headers, hdr->header, process_tags(hdr, r));
- break;
- case hdr_unset:
- apr_table_unset(headers, hdr->header);
- break;
- case hdr_echo:
- {
- echo_do v;
- v.r = r;
- v.hdr = hdr;
- apr_table_do((int (*) (void *, const char *, const char *))
- echo_header, (void *) &v, r->headers_in, NULL);
- break;
- }
- }
- }
-}
-
-static void ap_headers_insert_output_filter(request_rec *r)
-{
- headers_conf *dirconf = ap_get_module_config(r->per_dir_config,
- &headers_module);
-
- if (dirconf->fixup_out->nelts || dirconf->fixup_err->nelts) {
- ap_add_output_filter("FIXUP_HEADERS_OUT", NULL, r, r->connection);
- }
-}
-
-/*
- * Make sure our error-path filter is in place.
- */
-static void ap_headers_insert_error_filter(request_rec *r)
-{
- headers_conf *dirconf = ap_get_module_config(r->per_dir_config,
- &headers_module);
-
- if (dirconf->fixup_err->nelts) {
- ap_add_output_filter("FIXUP_HEADERS_ERR", NULL, r, r->connection);
- }
-}
-
-static apr_status_t ap_headers_output_filter(ap_filter_t *f,
- apr_bucket_brigade *in)
-{
- headers_conf *dirconf = ap_get_module_config(f->r->per_dir_config,
- &headers_module);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, f->r->server,
- "headers: ap_headers_output_filter()");
-
- /* do the fixup */
- do_headers_fixup(f->r, f->r->err_headers_out, dirconf->fixup_err, 0);
- do_headers_fixup(f->r, f->r->headers_out, dirconf->fixup_out, 0);
-
- /* remove ourselves from the filter chain */
- ap_remove_output_filter(f);
-
- /* send the data up the stack */
- return ap_pass_brigade(f->next,in);
-}
-
-/*
- * Make sure we propagate any "Header always" settings on the error
- * path through http_protocol.c.
- */
-static apr_status_t ap_headers_error_filter(ap_filter_t *f,
- apr_bucket_brigade *in)
-{
- headers_conf *dirconf;
-
- dirconf = ap_get_module_config(f->r->per_dir_config,
- &headers_module);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, f->r->server,
- "headers: ap_headers_error_filter()");
-
- /*
- * Add any header fields defined by "Header always" to r->err_headers_out.
- * Server-wide first, then per-directory to allow overriding.
- */
- do_headers_fixup(f->r, f->r->err_headers_out, dirconf->fixup_err, 0);
-
- /*
- * We've done our bit; remove ourself from the filter chain so there's
- * no possibility we'll be called again.
- */
- ap_remove_output_filter(f);
-
- /*
- * Pass the buck. (euro?)
- */
- return ap_pass_brigade(f->next, in);
-}
-
-static apr_status_t ap_headers_fixup(request_rec *r)
-{
- headers_conf *dirconf = ap_get_module_config(r->per_dir_config,
- &headers_module);
-
- /* do the fixup */
- if (dirconf->fixup_in->nelts) {
- do_headers_fixup(r, r->headers_in, dirconf->fixup_in, 0);
- }
-
- return DECLINED;
-}
-static apr_status_t ap_headers_early(request_rec *r)
-{
- headers_conf *dirconf = ap_get_module_config(r->per_dir_config,
- &headers_module);
-
- /* do the fixup */
- if (dirconf->fixup_in->nelts) {
- do_headers_fixup(r, r->headers_in, dirconf->fixup_in, 1);
- }
- if (dirconf->fixup_err->nelts) {
- do_headers_fixup(r, r->err_headers_out, dirconf->fixup_err, 1);
- }
- if (dirconf->fixup_out->nelts) {
- do_headers_fixup(r, r->headers_out, dirconf->fixup_out, 1);
- }
-
- return DECLINED;
-}
-
-static const command_rec headers_cmds[] =
-{
- AP_INIT_RAW_ARGS("Header", header_cmd, &hdr_out, OR_FILEINFO,
- "an optional condition, an action, header and value "
- "followed by optional env clause"),
- AP_INIT_RAW_ARGS("RequestHeader", header_cmd, &hdr_in, OR_FILEINFO,
- "an action, header and value followed by optional env "
- "clause"),
- {NULL}
-};
-
-static void register_format_tag_handler(const char *tag,
- const void *tag_handler)
-{
- apr_hash_set(format_tag_hash, tag, 1, tag_handler);
-}
-
-static int header_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- format_tag_hash = apr_hash_make(p);
- register_format_tag_handler("D", (const void *)header_request_duration);
- register_format_tag_handler("t", (const void *)header_request_time);
- register_format_tag_handler("e", (const void *)header_request_env_var);
- register_format_tag_handler("s", (const void *)header_request_ssl_var);
-
- return OK;
-}
-
-static int header_post_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s)
-{
- header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_register_output_filter("FIXUP_HEADERS_OUT", ap_headers_output_filter,
- NULL, AP_FTYPE_CONTENT_SET);
- ap_register_output_filter("FIXUP_HEADERS_ERR", ap_headers_error_filter,
- NULL, AP_FTYPE_CONTENT_SET);
- ap_hook_pre_config(header_pre_config,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_post_config(header_post_config,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_insert_filter(ap_headers_insert_output_filter, NULL, NULL, APR_HOOK_LAST);
- ap_hook_insert_error_filter(ap_headers_insert_error_filter,
- NULL, NULL, APR_HOOK_LAST);
- ap_hook_fixups(ap_headers_fixup, NULL, NULL, APR_HOOK_LAST);
- ap_hook_post_read_request(ap_headers_early, NULL, NULL, APR_HOOK_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA headers_module =
-{
- STANDARD20_MODULE_STUFF,
- create_headers_dir_config, /* dir config creater */
- merge_headers_config, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- headers_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_headers.dsp b/modules/metadata/mod_headers.dsp
deleted file mode 100644
index 7c5c3d297d..0000000000
--- a/modules/metadata/mod_headers.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_headers" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_headers - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_headers.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_headers.mak" CFG="mod_headers - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_headers - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_headers - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_headers - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../ssl" /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_headers_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Release/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_headers - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../ssl" /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_headers_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_headers - Win32 Release"
-# Name "mod_headers - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_headers.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_headers.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_headers - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_headers.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_headers.so "headers_module for Apache" ../../include/ap_release.h > .\mod_headers.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_headers - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_headers.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_headers.so "headers_module for Apache" ../../include/ap_release.h > .\mod_headers.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_headers.exp b/modules/metadata/mod_headers.exp
deleted file mode 100644
index 3f3063808a..0000000000
--- a/modules/metadata/mod_headers.exp
+++ /dev/null
@@ -1 +0,0 @@
-headers_module
diff --git a/modules/metadata/mod_ident.c b/modules/metadata/mod_ident.c
deleted file mode 100644
index bdf09d4307..0000000000
--- a/modules/metadata/mod_ident.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* Copyright 2003-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_ident: Handle RFC 1413 ident request
- * obtained from rfc1413.c
- *
- * rfc1413() speaks a common subset of the RFC 1413, AUTH, TAP and IDENT
- * protocols. The code queries an RFC 1413 etc. compatible daemon on a remote
- * host to look up the owner of a connection. The information should not be
- * used for authentication purposes. This routine intercepts alarm signals.
- *
- * Author: Wietse Venema, Eindhoven University of Technology,
- * The Netherlands.
- */
-
-/* Some small additions for Apache --- ditch the "sccsid" var if
- * compiling with gcc (it *has* changed), include ap_config.h for the
- * prototypes it defines on at least one system (SunlOSs) which has
- * them missing from the standard header files, and one minor change
- * below (extra parens around assign "if (foo = bar) ..." to shut up
- * gcc -Wall).
- */
-
-/* Rewritten by David Robinson */
-
-#include "apr.h"
-#include "apr_network_io.h"
-#include "apr_strings.h"
-#include "apr_optional.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h" /* for server_rec, conn_rec, etc. */
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h" /* for aplog_error */
-#include "util_ebcdic.h"
-
-/* Whether we should enable rfc1413 identity checking */
-#ifndef DEFAULT_RFC1413
-#define DEFAULT_RFC1413 0
-#endif
-
-#define RFC1413_UNSET 2
-
-/* request timeout (sec) */
-#ifndef RFC1413_TIMEOUT
-#define RFC1413_TIMEOUT 30
-#endif
-
-/* Local stuff. */
-
-/* Semi-well-known port */
-#define RFC1413_PORT 113
-
-/* maximum allowed length of userid */
-#define RFC1413_USERLEN 512
-
-/* rough limit on the amount of data we accept. */
-#define RFC1413_MAXDATA 1000
-
-/* default username, if it could not determined */
-#define FROM_UNKNOWN "unknown"
-
-typedef struct {
- int do_rfc1413;
- int timeout_unset;
- apr_time_t timeout;
-} ident_config_rec;
-
-static apr_status_t rfc1413_connect(apr_socket_t **newsock, conn_rec *conn,
- server_rec *srv, apr_time_t timeout)
-{
- apr_status_t rv;
- apr_sockaddr_t *localsa, *destsa;
-
- if ((rv = apr_sockaddr_info_get(&localsa, conn->local_ip, APR_UNSPEC,
- 0, /* ephemeral port */
- 0, conn->pool)) != APR_SUCCESS) {
- /* This should not fail since we have a numeric address string
- * as the host. */
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
- "rfc1413: apr_sockaddr_info_get(%s) failed",
- conn->local_ip);
- return rv;
- }
-
- if ((rv = apr_sockaddr_info_get(&destsa, conn->remote_ip,
- localsa->family, /* has to match */
- RFC1413_PORT, 0, conn->pool)) != APR_SUCCESS) {
- /* This should not fail since we have a numeric address string
- * as the host. */
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
- "rfc1413: apr_sockaddr_info_get(%s) failed",
- conn->remote_ip);
- return rv;
- }
-
- if ((rv = apr_socket_create(newsock,
- localsa->family, /* has to match */
- SOCK_STREAM, 0, conn->pool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
- "rfc1413: error creating query socket");
- return rv;
- }
-
- if ((rv = apr_socket_timeout_set(*newsock, timeout)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
- "rfc1413: error setting query socket timeout");
- apr_socket_close(*newsock);
- return rv;
- }
-
-/*
- * Bind the local and remote ends of the query socket to the same
- * IP addresses as the connection under investigation. We go
- * through all this trouble because the local or remote system
- * might have more than one network address. The RFC1413 etc.
- * client sends only port numbers; the server takes the IP
- * addresses from the query socket.
- */
-
- if ((rv = apr_socket_bind(*newsock, localsa)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
- "rfc1413: Error binding query socket to local port");
- apr_socket_close(*newsock);
- return rv;
- }
-
-/*
- * errors from connect usually imply the remote machine doesn't support
- * the service; don't log such an error
- */
- if ((rv = apr_socket_connect(*newsock, destsa)) != APR_SUCCESS) {
- apr_socket_close(*newsock);
- return rv;
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t rfc1413_query(apr_socket_t *sock, conn_rec *conn,
- server_rec *srv)
-{
- apr_port_t rmt_port, our_port;
- apr_port_t sav_rmt_port, sav_our_port;
- apr_size_t i;
- char *cp;
- char buffer[RFC1413_MAXDATA + 1];
- char user[RFC1413_USERLEN + 1]; /* XXX */
- apr_size_t buflen;
-
- sav_our_port = conn->local_addr->port;
- sav_rmt_port = conn->remote_addr->port;
-
- /* send the data */
- buflen = apr_snprintf(buffer, sizeof(buffer), "%hu,%hu\r\n", sav_rmt_port,
- sav_our_port);
- ap_xlate_proto_to_ascii(buffer, buflen);
-
- /* send query to server. Handle short write. */
- i = 0;
- while (i < buflen) {
- apr_size_t j = strlen(buffer + i);
- apr_status_t status;
- status = apr_socket_send(sock, buffer+i, &j);
- if (status != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
- "write: rfc1413: error sending request");
- return status;
- }
- else if (j > 0) {
- i+=j;
- }
- }
-
- /*
- * Read response from server. - the response should be newline
- * terminated according to rfc - make sure it doesn't stomp its
- * way out of the buffer.
- */
-
- i = 0;
- memset(buffer, '\0', sizeof(buffer));
- /*
- * Note that the strchr function below checks for \012 instead of '\n'
- * this allows it to work on both ASCII and EBCDIC machines.
- */
- while((cp = strchr(buffer, '\012')) == NULL && i < sizeof(buffer) - 1) {
- apr_size_t j = sizeof(buffer) - 1 - i;
- apr_status_t status;
- status = apr_socket_recv(sock, buffer+i, &j);
- if (status != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
- "read: rfc1413: error reading response");
- return status;
- }
- else if (j > 0) {
- i+=j;
- }
- else if (status == APR_SUCCESS && j == 0) {
- /* Oops... we ran out of data before finding newline */
- return APR_EINVAL;
- }
- }
-
-/* RFC1413_USERLEN = 512 */
- ap_xlate_proto_from_ascii(buffer, i);
- if (sscanf(buffer, "%hu , %hu : USERID :%*[^:]:%512s", &rmt_port, &our_port,
- user) != 3 || sav_rmt_port != rmt_port
- || sav_our_port != our_port)
- return APR_EINVAL;
-
- /*
- * Strip trailing carriage return. It is part of the
- * protocol, not part of the data.
- */
-
- if ((cp = strchr(user, '\r')))
- *cp = '\0';
-
- conn->remote_logname = apr_pstrdup(conn->pool, user);
-
- return APR_SUCCESS;
-}
-
-static const char *set_idcheck(cmd_parms *cmd, void *d_, int arg)
-{
- ident_config_rec *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (!err) {
- d->do_rfc1413 = arg ? 1 : 0;
- }
-
- return err;
-}
-
-static const char *set_timeout(cmd_parms *cmd, void *d_, const char *arg)
-{
- ident_config_rec *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (!err) {
- d->timeout = apr_time_from_sec(atoi(arg));
- d->timeout_unset = 0;
- }
-
- return err;
-}
-
-static void *create_ident_dir_config(apr_pool_t *p, char *d)
-{
- ident_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->do_rfc1413 = DEFAULT_RFC1413 | RFC1413_UNSET;
- conf->timeout = apr_time_from_sec(RFC1413_TIMEOUT);
- conf->timeout_unset = 1;
-
- return (void *)conf;
-}
-
-static void *merge_ident_dir_config(apr_pool_t *p, void *old_, void *new_)
-{
- ident_config_rec *conf = (ident_config_rec *)apr_pcalloc(p, sizeof(*conf));
- ident_config_rec *old = (ident_config_rec *) old_;
- ident_config_rec *new = (ident_config_rec *) new_;
-
- conf->timeout = new->timeout_unset
- ? old->timeout
- : new->timeout;
-
- conf->do_rfc1413 = new->do_rfc1413 & RFC1413_UNSET
- ? old->do_rfc1413
- : new->do_rfc1413;
-
- return (void *)conf;
-}
-
-static const command_rec ident_cmds[] =
-{
- AP_INIT_FLAG("IdentityCheck", set_idcheck, NULL, RSRC_CONF|ACCESS_CONF,
- "Enable identd (RFC 1413) user lookups - SLOW"),
- AP_INIT_TAKE1("IdentityCheckTimeout", set_timeout, NULL,
- RSRC_CONF|ACCESS_CONF,
- "Identity check (RFC 1413) timeout duration (sec)"),
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA ident_module;
-
-/*
- * Optional function for the core to to the actual ident request
- */
-static const char *ap_ident_lookup(request_rec *r)
-{
- ident_config_rec *conf;
- apr_socket_t *sock;
- apr_status_t rv;
- conn_rec *conn = r->connection;
- server_rec *srv = r->server;
-
- conf = ap_get_module_config(r->per_dir_config, &ident_module);
-
- /* return immediately if ident requests are disabled */
- if (!(conf->do_rfc1413 & ~RFC1413_UNSET)) {
- return NULL;
- }
-
- rv = rfc1413_connect(&sock, conn, srv, conf->timeout);
- if (rv == APR_SUCCESS) {
- rv = rfc1413_query(sock, conn, srv);
- apr_socket_close(sock);
- }
- if (rv != APR_SUCCESS) {
- conn->remote_logname = FROM_UNKNOWN;
- }
-
- return (const char *)conn->remote_logname;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- APR_REGISTER_OPTIONAL_FN(ap_ident_lookup);
-}
-
-module AP_MODULE_DECLARE_DATA ident_module =
-{
- STANDARD20_MODULE_STUFF,
- create_ident_dir_config, /* dir config creater */
- merge_ident_dir_config, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server config */
- ident_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_ident.dsp b/modules/metadata/mod_ident.dsp
deleted file mode 100644
index c840cc5494..0000000000
--- a/modules/metadata/mod_ident.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_ident" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_ident - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_ident.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_ident.mak" CFG="mod_ident - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_ident - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_ident - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_ident - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_ident_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_ident.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ident.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_ident.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ident.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_ident - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_ident_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_ident.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ident.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_ident.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ident.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_ident - Win32 Release"
-# Name "mod_ident - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_ident.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_ident.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_ident - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ident.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_ident.so "ident_module for Apache" ../../include/ap_release.h > .\mod_ident.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_ident - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ident.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_ident.so "ident_module for Apache" ../../include/ap_release.h > .\mod_ident.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_ident.exp b/modules/metadata/mod_ident.exp
deleted file mode 100644
index 26fe353de8..0000000000
--- a/modules/metadata/mod_ident.exp
+++ /dev/null
@@ -1 +0,0 @@
-ident_module
diff --git a/modules/metadata/mod_mime_magic.c b/modules/metadata/mod_mime_magic.c
deleted file mode 100644
index 41065ca549..0000000000
--- a/modules/metadata/mod_mime_magic.c
+++ /dev/null
@@ -1,2471 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Software Foundation in July
- * 1997. Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Software Foundation.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix. Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- * For compliance with Mr Darwin's terms: this has been very significantly
- * modified from the free "file" command.
- * - all-in-one file for compilation convenience when moving from one
- * version of Apache to the next.
- * - Memory allocation is done through the Apache API's apr_pool_t structure.
- * - All functions have had necessary Apache API request or server
- * structures passed to them where necessary to call other Apache API
- * routines. (i.e. usually for logging, files, or memory allocation in
- * itself or a called function.)
- * - struct magic has been converted from an array to a single-ended linked
- * list because it only grows one record at a time, it's only accessed
- * sequentially, and the Apache API has no equivalent of realloc().
- * - Functions have been changed to get their parameters from the server
- * configuration instead of globals. (It should be reentrant now but has
- * not been tested in a threaded environment.)
- * - Places where it used to print results to stdout now saves them in a
- * list where they're used to set the MIME type in the Apache request
- * record.
- * - Command-line flags have been removed since they will never be used here.
- *
- * Ian Kluft <ikluft@cisco.com>
- * Engineering Information Framework
- * Central Engineering
- * Cisco Systems, Inc.
- * San Jose, CA, USA
- *
- * Initial installation July/August 1996
- * Misc bug fixes May 1997
- * Submission to Apache Software Foundation July 1997
- *
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "util_script.h"
-
-/* ### this isn't set by configure? does anybody set this? */
-#ifdef HAVE_UTIME_H
-#include <utime.h>
-#endif
-
-/*
- * data structures and related constants
- */
-
-#define MODNAME "mod_mime_magic"
-#define MIME_MAGIC_DEBUG 0
-
-#define MIME_BINARY_UNKNOWN "application/octet-stream"
-#define MIME_TEXT_UNKNOWN "text/plain"
-
-#define MAXMIMESTRING 256
-
-/* HOWMANY must be at least 4096 to make gzip -dcq work */
-#define HOWMANY 4096
-/* SMALL_HOWMANY limits how much work we do to figure out text files */
-#define SMALL_HOWMANY 1024
-#define MAXDESC 50 /* max leng of text description */
-#define MAXstring 64 /* max leng of "string" types */
-
-struct magic {
- struct magic *next; /* link to next entry */
- int lineno; /* line number from magic file */
-
- short flag;
-#define INDIR 1 /* if '>(...)' appears, */
-#define UNSIGNED 2 /* comparison is unsigned */
- short cont_level; /* level of ">" */
- struct {
- char type; /* byte short long */
- long offset; /* offset from indirection */
- } in;
- long offset; /* offset to magic number */
- unsigned char reln; /* relation (0=eq, '>'=gt, etc) */
- char type; /* int, short, long or string. */
- char vallen; /* length of string value, if any */
-#define BYTE 1
-#define SHORT 2
-#define LONG 4
-#define STRING 5
-#define DATE 6
-#define BESHORT 7
-#define BELONG 8
-#define BEDATE 9
-#define LESHORT 10
-#define LELONG 11
-#define LEDATE 12
- union VALUETYPE {
- unsigned char b;
- unsigned short h;
- unsigned long l;
- char s[MAXstring];
- unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
- unsigned char hl[4]; /* 2 bytes of a fixed-endian "long" */
- } value; /* either number or string */
- unsigned long mask; /* mask before comparison with value */
- char nospflag; /* supress space character */
-
- /* NOTE: this string is suspected of overrunning - find it! */
- char desc[MAXDESC]; /* description */
-};
-
-/*
- * data structures for tar file recognition
- * --------------------------------------------------------------------------
- * Header file for public domain tar (tape archive) program.
- *
- * @(#)tar.h 1.20 86/10/29 Public Domain. Created 25 August 1985 by John
- * Gilmore, ihnp4!hoptoad!gnu.
- *
- * Header block on tape.
- *
- * I'm going to use traditional DP naming conventions here. A "block" is a big
- * chunk of stuff that we do I/O on. A "record" is a piece of info that we
- * care about. Typically many "record"s fit into a "block".
- */
-#define RECORDSIZE 512
-#define NAMSIZ 100
-#define TUNMLEN 32
-#define TGNMLEN 32
-
-union record {
- char charptr[RECORDSIZE];
- struct header {
- char name[NAMSIZ];
- char mode[8];
- char uid[8];
- char gid[8];
- char size[12];
- char mtime[12];
- char chksum[8];
- char linkflag;
- char linkname[NAMSIZ];
- char magic[8];
- char uname[TUNMLEN];
- char gname[TGNMLEN];
- char devmajor[8];
- char devminor[8];
- } header;
-};
-
-/* The magic field is filled with this if uname and gname are valid. */
-#define TMAGIC "ustar " /* 7 chars and a null */
-
-/*
- * file-function prototypes
- */
-static int ascmagic(request_rec *, unsigned char *, apr_size_t);
-static int is_tar(unsigned char *, apr_size_t);
-static int softmagic(request_rec *, unsigned char *, apr_size_t);
-static int tryit(request_rec *, unsigned char *, apr_size_t, int);
-static int zmagic(request_rec *, unsigned char *, apr_size_t);
-
-static int getvalue(server_rec *, struct magic *, char **);
-static int hextoint(int);
-static char *getstr(server_rec *, char *, char *, int, int *);
-static int parse(server_rec *, apr_pool_t *p, char *, int);
-
-static int match(request_rec *, unsigned char *, apr_size_t);
-static int mget(request_rec *, union VALUETYPE *, unsigned char *,
- struct magic *, apr_size_t);
-static int mcheck(request_rec *, union VALUETYPE *, struct magic *);
-static void mprint(request_rec *, union VALUETYPE *, struct magic *);
-
-static int uncompress(request_rec *, int,
- unsigned char **, apr_size_t);
-static long from_oct(int, char *);
-static int fsmagic(request_rec *r, const char *fn);
-
-/*
- * includes for ASCII substring recognition formerly "names.h" in file
- * command
- *
- * Original notes: names and types used by ascmagic in file(1). These tokens are
- * here because they can appear anywhere in the first HOWMANY bytes, while
- * tokens in /etc/magic must appear at fixed offsets into the file. Don't
- * make HOWMANY too high unless you have a very fast CPU.
- */
-
-/* these types are used to index the apr_table_t 'types': keep em in sync! */
-/* HTML inserted in first because this is a web server module now */
-#define L_HTML 0 /* HTML */
-#define L_C 1 /* first and foremost on UNIX */
-#define L_FORT 2 /* the oldest one */
-#define L_MAKE 3 /* Makefiles */
-#define L_PLI 4 /* PL/1 */
-#define L_MACH 5 /* some kinda assembler */
-#define L_ENG 6 /* English */
-#define L_PAS 7 /* Pascal */
-#define L_MAIL 8 /* Electronic mail */
-#define L_NEWS 9 /* Usenet Netnews */
-
-static char *types[] =
-{
- "text/html", /* HTML */
- "text/plain", /* "c program text", */
- "text/plain", /* "fortran program text", */
- "text/plain", /* "make commands text", */
- "text/plain", /* "pl/1 program text", */
- "text/plain", /* "assembler program text", */
- "text/plain", /* "English text", */
- "text/plain", /* "pascal program text", */
- "message/rfc822", /* "mail text", */
- "message/news", /* "news text", */
- "application/binary", /* "can't happen error on names.h/types", */
- 0
-};
-
-static struct names {
- char *name;
- short type;
-} names[] = {
-
- /* These must be sorted by eye for optimal hit rate */
- /* Add to this list only after substantial meditation */
- {
- "<html>", L_HTML
- },
- {
- "<HTML>", L_HTML
- },
- {
- "<head>", L_HTML
- },
- {
- "<HEAD>", L_HTML
- },
- {
- "<title>", L_HTML
- },
- {
- "<TITLE>", L_HTML
- },
- {
- "<h1>", L_HTML
- },
- {
- "<H1>", L_HTML
- },
- {
- "<!--", L_HTML
- },
- {
- "<!DOCTYPE HTML", L_HTML
- },
- {
- "/*", L_C
- }, /* must precede "The", "the", etc. */
- {
- "#include", L_C
- },
- {
- "char", L_C
- },
- {
- "The", L_ENG
- },
- {
- "the", L_ENG
- },
- {
- "double", L_C
- },
- {
- "extern", L_C
- },
- {
- "float", L_C
- },
- {
- "real", L_C
- },
- {
- "struct", L_C
- },
- {
- "union", L_C
- },
- {
- "CFLAGS", L_MAKE
- },
- {
- "LDFLAGS", L_MAKE
- },
- {
- "all:", L_MAKE
- },
- {
- ".PRECIOUS", L_MAKE
- },
- /*
- * Too many files of text have these words in them. Find another way to
- * recognize Fortrash.
- */
-#ifdef NOTDEF
- {
- "subroutine", L_FORT
- },
- {
- "function", L_FORT
- },
- {
- "block", L_FORT
- },
- {
- "common", L_FORT
- },
- {
- "dimension", L_FORT
- },
- {
- "integer", L_FORT
- },
- {
- "data", L_FORT
- },
-#endif /* NOTDEF */
- {
- ".ascii", L_MACH
- },
- {
- ".asciiz", L_MACH
- },
- {
- ".byte", L_MACH
- },
- {
- ".even", L_MACH
- },
- {
- ".globl", L_MACH
- },
- {
- "clr", L_MACH
- },
- {
- "(input,", L_PAS
- },
- {
- "dcl", L_PLI
- },
- {
- "Received:", L_MAIL
- },
- {
- ">From", L_MAIL
- },
- {
- "Return-Path:", L_MAIL
- },
- {
- "Cc:", L_MAIL
- },
- {
- "Newsgroups:", L_NEWS
- },
- {
- "Path:", L_NEWS
- },
- {
- "Organization:", L_NEWS
- },
- {
- NULL, 0
- }
-};
-
-#define NNAMES ((sizeof(names)/sizeof(struct names)) - 1)
-
-/*
- * Result String List (RSL)
- *
- * The file(1) command prints its output. Instead, we store the various
- * "printed" strings in a list (allocating memory as we go) and concatenate
- * them at the end when we finally know how much space they'll need.
- */
-
-typedef struct magic_rsl_s {
- char *str; /* string, possibly a fragment */
- struct magic_rsl_s *next; /* pointer to next fragment */
-} magic_rsl;
-
-/*
- * Apache module configuration structures
- */
-
-/* per-server info */
-typedef struct {
- const char *magicfile; /* where magic be found */
- struct magic *magic; /* head of magic config list */
- struct magic *last;
-} magic_server_config_rec;
-
-/* per-request info */
-typedef struct {
- magic_rsl *head; /* result string list */
- magic_rsl *tail;
- unsigned suf_recursion; /* recursion depth in suffix check */
-} magic_req_rec;
-
-/*
- * configuration functions - called by Apache API routines
- */
-
-module AP_MODULE_DECLARE_DATA mime_magic_module;
-
-static void *create_magic_server_config(apr_pool_t *p, server_rec *d)
-{
- /* allocate the config - use pcalloc because it needs to be zeroed */
- return apr_pcalloc(p, sizeof(magic_server_config_rec));
-}
-
-static void *merge_magic_server_config(apr_pool_t *p, void *basev, void *addv)
-{
- magic_server_config_rec *base = (magic_server_config_rec *) basev;
- magic_server_config_rec *add = (magic_server_config_rec *) addv;
- magic_server_config_rec *new = (magic_server_config_rec *)
- apr_palloc(p, sizeof(magic_server_config_rec));
-
- new->magicfile = add->magicfile ? add->magicfile : base->magicfile;
- new->magic = NULL;
- new->last = NULL;
- return new;
-}
-
-static const char *set_magicfile(cmd_parms *cmd, void *dummy, const char *arg)
-{
- magic_server_config_rec *conf = (magic_server_config_rec *)
- ap_get_module_config(cmd->server->module_config,
- &mime_magic_module);
-
- if (!conf) {
- return MODNAME ": server structure not allocated";
- }
- conf->magicfile = arg;
- return NULL;
-}
-
-/*
- * configuration file commands - exported to Apache API
- */
-
-static const command_rec mime_magic_cmds[] =
-{
- AP_INIT_TAKE1("MimeMagicFile", set_magicfile, NULL, RSRC_CONF,
- "Path to MIME Magic file (in file(1) format)"),
- {NULL}
-};
-
-/*
- * RSL (result string list) processing routines
- *
- * These collect strings that would have been printed in fragments by file(1)
- * into a list of magic_rsl structures with the strings. When complete,
- * they're concatenated together to become the MIME content and encoding
- * types.
- *
- * return value conventions for these functions: functions which return int:
- * failure = -1, other = result functions which return pointers: failure = 0,
- * other = result
- */
-
-/* allocate a per-request structure and put it in the request record */
-static magic_req_rec *magic_set_config(request_rec *r)
-{
- magic_req_rec *req_dat = (magic_req_rec *) apr_palloc(r->pool,
- sizeof(magic_req_rec));
-
- req_dat->head = req_dat->tail = (magic_rsl *) NULL;
- ap_set_module_config(r->request_config, &mime_magic_module, req_dat);
- return req_dat;
-}
-
-/* add a string to the result string list for this request */
-/* it is the responsibility of the caller to allocate "str" */
-static int magic_rsl_add(request_rec *r, char *str)
-{
- magic_req_rec *req_dat = (magic_req_rec *)
- ap_get_module_config(r->request_config, &mime_magic_module);
- magic_rsl *rsl;
-
- /* make sure we have a list to put it in */
- if (!req_dat) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EINVAL, r,
- MODNAME ": request config should not be NULL");
- if (!(req_dat = magic_set_config(r))) {
- /* failure */
- return -1;
- }
- }
-
- /* allocate the list entry */
- rsl = (magic_rsl *) apr_palloc(r->pool, sizeof(magic_rsl));
-
- /* fill it */
- rsl->str = str;
- rsl->next = (magic_rsl *) NULL;
-
- /* append to the list */
- if (req_dat->head && req_dat->tail) {
- req_dat->tail->next = rsl;
- req_dat->tail = rsl;
- }
- else {
- req_dat->head = req_dat->tail = rsl;
- }
-
- /* success */
- return 0;
-}
-
-/* RSL hook for puts-type functions */
-static int magic_rsl_puts(request_rec *r, char *str)
-{
- return magic_rsl_add(r, str);
-}
-
-/* RSL hook for printf-type functions */
-static int magic_rsl_printf(request_rec *r, char *str,...)
-{
- va_list ap;
-
- char buf[MAXMIMESTRING];
-
- /* assemble the string into the buffer */
- va_start(ap, str);
- apr_vsnprintf(buf, sizeof(buf), str, ap);
- va_end(ap);
-
- /* add the buffer to the list */
- return magic_rsl_add(r, apr_pstrdup(r->pool, buf));
-}
-
-/* RSL hook for putchar-type functions */
-static int magic_rsl_putchar(request_rec *r, char c)
-{
- char str[2];
-
- /* high overhead for 1 char - just hope they don't do this much */
- str[0] = c;
- str[1] = '\0';
- return magic_rsl_add(r, str);
-}
-
-/* allocate and copy a contiguous string from a result string list */
-static char *rsl_strdup(request_rec *r, int start_frag, int start_pos, int len)
-{
- char *result; /* return value */
- int cur_frag, /* current fragment number/counter */
- cur_pos, /* current position within fragment */
- res_pos; /* position in result string */
- magic_rsl *frag; /* list-traversal pointer */
- magic_req_rec *req_dat = (magic_req_rec *)
- ap_get_module_config(r->request_config, &mime_magic_module);
-
- /* allocate the result string */
- result = (char *) apr_palloc(r->pool, len + 1);
-
- /* loop through and collect the string */
- res_pos = 0;
- for (frag = req_dat->head, cur_frag = 0;
- frag->next;
- frag = frag->next, cur_frag++) {
- /* loop to the first fragment */
- if (cur_frag < start_frag)
- continue;
-
- /* loop through and collect chars */
- for (cur_pos = (cur_frag == start_frag) ? start_pos : 0;
- frag->str[cur_pos];
- cur_pos++) {
- if (cur_frag >= start_frag
- && cur_pos >= start_pos
- && res_pos <= len) {
- result[res_pos++] = frag->str[cur_pos];
- if (res_pos > len) {
- break;
- }
- }
- }
- }
-
- /* clean up and return */
- result[res_pos] = 0;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": rsl_strdup() %d chars: %s", res_pos - 1, result);
-#endif
- return result;
-}
-
-/* states for the state-machine algorithm in magic_rsl_to_request() */
-typedef enum {
- rsl_leading_space, rsl_type, rsl_subtype, rsl_separator, rsl_encoding
-} rsl_states;
-
-/* process the RSL and set the MIME info in the request record */
-static int magic_rsl_to_request(request_rec *r)
-{
- int cur_frag, /* current fragment number/counter */
- cur_pos, /* current position within fragment */
- type_frag, /* content type starting point: fragment */
- type_pos, /* content type starting point: position */
- type_len, /* content type length */
- encoding_frag, /* content encoding starting point: fragment */
- encoding_pos, /* content encoding starting point: position */
- encoding_len; /* content encoding length */
-
- magic_rsl *frag; /* list-traversal pointer */
- rsl_states state;
-
- magic_req_rec *req_dat = (magic_req_rec *)
- ap_get_module_config(r->request_config, &mime_magic_module);
-
- /* check if we have a result */
- if (!req_dat || !req_dat->head) {
- /* empty - no match, we defer to other Apache modules */
- return DECLINED;
- }
-
- /* start searching for the type and encoding */
- state = rsl_leading_space;
- type_frag = type_pos = type_len = 0;
- encoding_frag = encoding_pos = encoding_len = 0;
- for (frag = req_dat->head, cur_frag = 0;
- frag && frag->next;
- frag = frag->next, cur_frag++) {
- /* loop through the characters in the fragment */
- for (cur_pos = 0; frag->str[cur_pos]; cur_pos++) {
- if (apr_isspace(frag->str[cur_pos])) {
- /* process whitespace actions for each state */
- if (state == rsl_leading_space) {
- /* eat whitespace in this state */
- continue;
- }
- else if (state == rsl_type) {
- /* whitespace: type has no slash! */
- return DECLINED;
- }
- else if (state == rsl_subtype) {
- /* whitespace: end of MIME type */
- state++;
- continue;
- }
- else if (state == rsl_separator) {
- /* eat whitespace in this state */
- continue;
- }
- else if (state == rsl_encoding) {
- /* whitespace: end of MIME encoding */
- /* we're done */
- frag = req_dat->tail;
- break;
- }
- else {
- /* should not be possible */
- /* abandon malfunctioning module */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": bad state %d (ws)", state);
- return DECLINED;
- }
- /* NOTREACHED */
- }
- else if (state == rsl_type &&
- frag->str[cur_pos] == '/') {
- /* copy the char and go to rsl_subtype state */
- type_len++;
- state++;
- }
- else {
- /* process non-space actions for each state */
- if (state == rsl_leading_space) {
- /* non-space: begin MIME type */
- state++;
- type_frag = cur_frag;
- type_pos = cur_pos;
- type_len = 1;
- continue;
- }
- else if (state == rsl_type ||
- state == rsl_subtype) {
- /* non-space: adds to type */
- type_len++;
- continue;
- }
- else if (state == rsl_separator) {
- /* non-space: begin MIME encoding */
- state++;
- encoding_frag = cur_frag;
- encoding_pos = cur_pos;
- encoding_len = 1;
- continue;
- }
- else if (state == rsl_encoding) {
- /* non-space: adds to encoding */
- encoding_len++;
- continue;
- }
- else {
- /* should not be possible */
- /* abandon malfunctioning module */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": bad state %d (ns)", state);
- return DECLINED;
- }
- /* NOTREACHED */
- }
- /* NOTREACHED */
- }
- }
-
- /* if we ended prior to state rsl_subtype, we had incomplete info */
- if (state != rsl_subtype && state != rsl_separator &&
- state != rsl_encoding) {
- /* defer to other modules */
- return DECLINED;
- }
-
- /* save the info in the request record */
- if (state == rsl_subtype || state == rsl_encoding ||
- state == rsl_encoding) {
- char *tmp;
- tmp = rsl_strdup(r, type_frag, type_pos, type_len);
- /* XXX: this could be done at config time I'm sure... but I'm
- * confused by all this magic_rsl stuff. -djg */
- ap_content_type_tolower(tmp);
- ap_set_content_type(r, tmp);
- }
- if (state == rsl_encoding) {
- char *tmp;
- tmp = rsl_strdup(r, encoding_frag,
- encoding_pos, encoding_len);
- /* XXX: this could be done at config time I'm sure... but I'm
- * confused by all this magic_rsl stuff. -djg */
- ap_str_tolower(tmp);
- r->content_encoding = tmp;
- }
-
- /* detect memory allocation or other errors */
- if (!r->content_type ||
- (state == rsl_encoding && !r->content_encoding)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": unexpected state %d; could be caused by bad "
- "data in magic file",
- state);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* success! */
- return OK;
-}
-
-/*
- * magic_process - process input file r Apache API request record
- * (formerly called "process" in file command, prefix added for clarity) Opens
- * the file and reads a fixed-size buffer to begin processing the contents.
- */
-static int magic_process(request_rec *r)
-{
- apr_file_t *fd = NULL;
- unsigned char buf[HOWMANY + 1]; /* one extra for terminating '\0' */
- apr_size_t nbytes = 0; /* number of bytes read from a datafile */
- int result;
-
- /*
- * first try judging the file based on its filesystem status
- */
- switch ((result = fsmagic(r, r->filename))) {
- case DONE:
- magic_rsl_putchar(r, '\n');
- return OK;
- case OK:
- break;
- default:
- /* fatal error, bail out */
- return result;
- }
-
- if (apr_file_open(&fd, r->filename, APR_READ, APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
- /* We can't open it, but we were able to stat it. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": can't read `%s'", r->filename);
- /* let some other handler decide what the problem is */
- return DECLINED;
- }
-
- /*
- * try looking at the first HOWMANY bytes
- */
- nbytes = sizeof(buf) - 1;
- if ((result = apr_file_read(fd, (char *) buf, &nbytes)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, result, r,
- MODNAME ": read failed: %s", r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (nbytes == 0) {
- return DECLINED;
- }
- else {
- buf[nbytes++] = '\0'; /* null-terminate it */
- result = tryit(r, buf, nbytes, 1);
- if (result != OK) {
- return result;
- }
- }
-
- (void) apr_file_close(fd);
- (void) magic_rsl_putchar(r, '\n');
-
- return OK;
-}
-
-
-static int tryit(request_rec *r, unsigned char *buf, apr_size_t nb,
- int checkzmagic)
-{
- /*
- * Try compression stuff
- */
- if (checkzmagic == 1) {
- if (zmagic(r, buf, nb) == 1)
- return OK;
- }
-
- /*
- * try tests in /etc/magic (or surrogate magic file)
- */
- if (softmagic(r, buf, nb) == 1)
- return OK;
-
- /*
- * try known keywords, check for ascii-ness too.
- */
- if (ascmagic(r, buf, nb) == 1)
- return OK;
-
- /*
- * abandon hope, all ye who remain here
- */
- return DECLINED;
-}
-
-#define EATAB {while (apr_isspace(*l)) ++l;}
-
-/*
- * apprentice - load configuration from the magic file r
- * API request record
- */
-static int apprentice(server_rec *s, apr_pool_t *p)
-{
- apr_file_t *f = NULL;
- apr_status_t result;
- char line[BUFSIZ + 1];
- int errs = 0;
- int lineno;
-#if MIME_MAGIC_DEBUG
- int rule = 0;
- struct magic *m, *prevm;
-#endif
- magic_server_config_rec *conf = (magic_server_config_rec *)
- ap_get_module_config(s->module_config, &mime_magic_module);
- const char *fname = ap_server_root_relative(p, conf->magicfile);
-
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
- MODNAME ": Invalid magic file path %s", conf->magicfile);
- return -1;
- }
- if ((result = apr_file_open(&f, fname, APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, p) != APR_SUCCESS)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, result, s,
- MODNAME ": can't read magic file %s", fname);
- return -1;
- }
-
- /* set up the magic list (empty) */
- conf->magic = conf->last = NULL;
-
- /* parse it */
- for (lineno = 1; apr_file_gets(line, BUFSIZ, f) == APR_SUCCESS; lineno++) {
- int ws_offset;
-
- /* delete newline */
- if (line[0]) {
- line[strlen(line) - 1] = '\0';
- }
-
- /* skip leading whitespace */
- ws_offset = 0;
- while (line[ws_offset] && apr_isspace(line[ws_offset])) {
- ws_offset++;
- }
-
- /* skip blank lines */
- if (line[ws_offset] == 0) {
- continue;
- }
-
- /* comment, do not parse */
- if (line[ws_offset] == '#')
- continue;
-
-#if MIME_MAGIC_DEBUG
- /* if we get here, we're going to use it so count it */
- rule++;
-#endif
-
- /* parse it */
- if (parse(s, p, line + ws_offset, lineno) != 0)
- ++errs;
- }
-
- (void) apr_file_close(f);
-
-#if MIME_MAGIC_DEBUG
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- MODNAME ": apprentice conf=%x file=%s m=%s m->next=%s last=%s",
- conf,
- conf->magicfile ? conf->magicfile : "NULL",
- conf->magic ? "set" : "NULL",
- (conf->magic && conf->magic->next) ? "set" : "NULL",
- conf->last ? "set" : "NULL");
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- MODNAME ": apprentice read %d lines, %d rules, %d errors",
- lineno, rule, errs);
-#endif
-
-#if MIME_MAGIC_DEBUG
- prevm = 0;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- MODNAME ": apprentice test");
- for (m = conf->magic; m; m = m->next) {
- if (apr_isprint((((unsigned long) m) >> 24) & 255) &&
- apr_isprint((((unsigned long) m) >> 16) & 255) &&
- apr_isprint((((unsigned long) m) >> 8) & 255) &&
- apr_isprint(((unsigned long) m) & 255)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- MODNAME ": apprentice: POINTER CLOBBERED! "
- "m=\"%c%c%c%c\" line=%d",
- (((unsigned long) m) >> 24) & 255,
- (((unsigned long) m) >> 16) & 255,
- (((unsigned long) m) >> 8) & 255,
- ((unsigned long) m) & 255,
- prevm ? prevm->lineno : -1);
- break;
- }
- prevm = m;
- }
-#endif
-
- return (errs ? -1 : 0);
-}
-
-/*
- * extend the sign bit if the comparison is to be signed
- */
-static unsigned long signextend(server_rec *s, struct magic *m, unsigned long v)
-{
- if (!(m->flag & UNSIGNED))
- switch (m->type) {
- /*
- * Do not remove the casts below. They are vital. When later
- * compared with the data, the sign extension must have happened.
- */
- case BYTE:
- v = (char) v;
- break;
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = (short) v;
- break;
- case DATE:
- case BEDATE:
- case LEDATE:
- case LONG:
- case BELONG:
- case LELONG:
- v = (long) v;
- break;
- case STRING:
- break;
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- MODNAME ": can't happen: m->type=%d", m->type);
- return -1;
- }
- return v;
-}
-
-/*
- * parse one line from magic file, put into magic[index++] if valid
- */
-static int parse(server_rec *serv, apr_pool_t *p, char *l, int lineno)
-{
- struct magic *m;
- char *t, *s;
- magic_server_config_rec *conf = (magic_server_config_rec *)
- ap_get_module_config(serv->module_config, &mime_magic_module);
-
- /* allocate magic structure entry */
- m = (struct magic *) apr_pcalloc(p, sizeof(struct magic));
-
- /* append to linked list */
- m->next = NULL;
- if (!conf->magic || !conf->last) {
- conf->magic = conf->last = m;
- }
- else {
- conf->last->next = m;
- conf->last = m;
- }
-
- /* set values in magic structure */
- m->flag = 0;
- m->cont_level = 0;
- m->lineno = lineno;
-
- while (*l == '>') {
- ++l; /* step over */
- m->cont_level++;
- }
-
- if (m->cont_level != 0 && *l == '(') {
- ++l; /* step over */
- m->flag |= INDIR;
- }
-
- /* get offset, then skip over it */
- m->offset = (int) strtol(l, &t, 0);
- if (l == t) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, serv,
- MODNAME ": offset %s invalid", l);
- }
- l = t;
-
- if (m->flag & INDIR) {
- m->in.type = LONG;
- m->in.offset = 0;
- /*
- * read [.lbs][+-]nnnnn)
- */
- if (*l == '.') {
- switch (*++l) {
- case 'l':
- m->in.type = LONG;
- break;
- case 's':
- m->in.type = SHORT;
- break;
- case 'b':
- m->in.type = BYTE;
- break;
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, serv,
- MODNAME ": indirect offset type %c invalid", *l);
- break;
- }
- l++;
- }
- s = l;
- if (*l == '+' || *l == '-')
- l++;
- if (apr_isdigit((unsigned char) *l)) {
- m->in.offset = strtol(l, &t, 0);
- if (*s == '-')
- m->in.offset = -m->in.offset;
- }
- else
- t = l;
- if (*t++ != ')') {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, serv,
- MODNAME ": missing ')' in indirect offset");
- }
- l = t;
- }
-
-
- while (apr_isdigit((unsigned char) *l))
- ++l;
- EATAB;
-
-#define NBYTE 4
-#define NSHORT 5
-#define NLONG 4
-#define NSTRING 6
-#define NDATE 4
-#define NBESHORT 7
-#define NBELONG 6
-#define NBEDATE 6
-#define NLESHORT 7
-#define NLELONG 6
-#define NLEDATE 6
-
- if (*l == 'u') {
- ++l;
- m->flag |= UNSIGNED;
- }
-
- /* get type, skip it */
- if (strncmp(l, "byte", NBYTE) == 0) {
- m->type = BYTE;
- l += NBYTE;
- }
- else if (strncmp(l, "short", NSHORT) == 0) {
- m->type = SHORT;
- l += NSHORT;
- }
- else if (strncmp(l, "long", NLONG) == 0) {
- m->type = LONG;
- l += NLONG;
- }
- else if (strncmp(l, "string", NSTRING) == 0) {
- m->type = STRING;
- l += NSTRING;
- }
- else if (strncmp(l, "date", NDATE) == 0) {
- m->type = DATE;
- l += NDATE;
- }
- else if (strncmp(l, "beshort", NBESHORT) == 0) {
- m->type = BESHORT;
- l += NBESHORT;
- }
- else if (strncmp(l, "belong", NBELONG) == 0) {
- m->type = BELONG;
- l += NBELONG;
- }
- else if (strncmp(l, "bedate", NBEDATE) == 0) {
- m->type = BEDATE;
- l += NBEDATE;
- }
- else if (strncmp(l, "leshort", NLESHORT) == 0) {
- m->type = LESHORT;
- l += NLESHORT;
- }
- else if (strncmp(l, "lelong", NLELONG) == 0) {
- m->type = LELONG;
- l += NLELONG;
- }
- else if (strncmp(l, "ledate", NLEDATE) == 0) {
- m->type = LEDATE;
- l += NLEDATE;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, serv,
- MODNAME ": type %s invalid", l);
- return -1;
- }
- /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
- if (*l == '&') {
- ++l;
- m->mask = signextend(serv, m, strtol(l, &l, 0));
- }
- else
- m->mask = ~0L;
- EATAB;
-
- switch (*l) {
- case '>':
- case '<':
- /* Old-style anding: "0 byte &0x80 dynamically linked" */
- case '&':
- case '^':
- case '=':
- m->reln = *l;
- ++l;
- break;
- case '!':
- if (m->type != STRING) {
- m->reln = *l;
- ++l;
- break;
- }
- /* FALL THROUGH */
- default:
- if (*l == 'x' && apr_isspace(l[1])) {
- m->reln = *l;
- ++l;
- goto GetDesc; /* Bill The Cat */
- }
- m->reln = '=';
- break;
- }
- EATAB;
-
- if (getvalue(serv, m, &l))
- return -1;
- /*
- * now get last part - the description
- */
- GetDesc:
- EATAB;
- if (l[0] == '\b') {
- ++l;
- m->nospflag = 1;
- }
- else if ((l[0] == '\\') && (l[1] == 'b')) {
- ++l;
- ++l;
- m->nospflag = 1;
- }
- else
- m->nospflag = 0;
- strncpy(m->desc, l, sizeof(m->desc) - 1);
- m->desc[sizeof(m->desc) - 1] = '\0';
-
-#if MIME_MAGIC_DEBUG
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, serv,
- MODNAME ": parse line=%d m=%x next=%x cont=%d desc=%s",
- lineno, m, m->next, m->cont_level, m->desc);
-#endif /* MIME_MAGIC_DEBUG */
-
- return 0;
-}
-
-/*
- * Read a numeric value from a pointer, into the value union of a magic
- * pointer, according to the magic type. Update the string pointer to point
- * just after the number read. Return 0 for success, non-zero for failure.
- */
-static int getvalue(server_rec *s, struct magic *m, char **p)
-{
- int slen;
-
- if (m->type == STRING) {
- *p = getstr(s, *p, m->value.s, sizeof(m->value.s), &slen);
- m->vallen = slen;
- }
- else if (m->reln != 'x')
- m->value.l = signextend(s, m, strtol(*p, p, 0));
- return 0;
-}
-
-/*
- * Convert a string containing C character escapes. Stop at an unescaped
- * space or tab. Copy the converted version to "p", returning its length in
- * *slen. Return updated scan pointer as function result.
- */
-static char *getstr(server_rec *serv, register char *s, register char *p,
- int plen, int *slen)
-{
- char *origs = s, *origp = p;
- char *pmax = p + plen - 1;
- register int c;
- register int val;
-
- while ((c = *s++) != '\0') {
- if (apr_isspace(c))
- break;
- if (p >= pmax) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, serv,
- MODNAME ": string too long: %s", origs);
- break;
- }
- if (c == '\\') {
- switch (c = *s++) {
-
- case '\0':
- goto out;
-
- default:
- *p++ = (char) c;
- break;
-
- case 'n':
- *p++ = '\n';
- break;
-
- case 'r':
- *p++ = '\r';
- break;
-
- case 'b':
- *p++ = '\b';
- break;
-
- case 't':
- *p++ = '\t';
- break;
-
- case 'f':
- *p++ = '\f';
- break;
-
- case 'v':
- *p++ = '\v';
- break;
-
- /* \ and up to 3 octal digits */
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- val = c - '0';
- c = *s++; /* try for 2 */
- if (c >= '0' && c <= '7') {
- val = (val << 3) | (c - '0');
- c = *s++; /* try for 3 */
- if (c >= '0' && c <= '7')
- val = (val << 3) | (c - '0');
- else
- --s;
- }
- else
- --s;
- *p++ = (char) val;
- break;
-
- /* \x and up to 3 hex digits */
- case 'x':
- val = 'x'; /* Default if no digits */
- c = hextoint(*s++); /* Get next char */
- if (c >= 0) {
- val = c;
- c = hextoint(*s++);
- if (c >= 0) {
- val = (val << 4) + c;
- c = hextoint(*s++);
- if (c >= 0) {
- val = (val << 4) + c;
- }
- else
- --s;
- }
- else
- --s;
- }
- else
- --s;
- *p++ = (char) val;
- break;
- }
- }
- else
- *p++ = (char) c;
- }
- out:
- *p = '\0';
- *slen = p - origp;
- return s;
-}
-
-
-/* Single hex char to int; -1 if not a hex char. */
-static int hextoint(int c)
-{
- if (apr_isdigit(c))
- return c - '0';
- if ((c >= 'a') && (c <= 'f'))
- return c + 10 - 'a';
- if ((c >= 'A') && (c <= 'F'))
- return c + 10 - 'A';
- return -1;
-}
-
-
-/*
- * return DONE to indicate it's been handled
- * return OK to indicate it's a regular file still needing handling
- * other returns indicate a failure of some sort
- */
-static int fsmagic(request_rec *r, const char *fn)
-{
- switch (r->finfo.filetype) {
- case APR_DIR:
- magic_rsl_puts(r, DIR_MAGIC_TYPE);
- return DONE;
- case APR_CHR:
- /*
- * (void) magic_rsl_printf(r,"character special (%d/%d)",
- * major(sb->st_rdev), minor(sb->st_rdev));
- */
- (void) magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
- return DONE;
- case APR_BLK:
- /*
- * (void) magic_rsl_printf(r,"block special (%d/%d)",
- * major(sb->st_rdev), minor(sb->st_rdev));
- */
- (void) magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
- return DONE;
- /* TODO add code to handle V7 MUX and Blit MUX files */
- case APR_PIPE:
- /*
- * magic_rsl_puts(r,"fifo (named pipe)");
- */
- (void) magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
- return DONE;
- case APR_LNK:
- /* We used stat(), the only possible reason for this is that the
- * symlink is broken.
- */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": broken symlink (%s)", fn);
- return HTTP_INTERNAL_SERVER_ERROR;
- case APR_SOCK:
- magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
- return DONE;
- case APR_REG:
- break;
- default:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": invalid file type %d.", r->finfo.filetype);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /*
- * regular file, check next possibility
- */
- if (r->finfo.size == 0) {
- magic_rsl_puts(r, MIME_TEXT_UNKNOWN);
- return DONE;
- }
- return OK;
-}
-
-/*
- * softmagic - lookup one file in database (already read from /etc/magic by
- * apprentice.c). Passed the name and FILE * of one file to be typed.
- */
- /* ARGSUSED1 *//* nbytes passed for regularity, maybe need later */
-static int softmagic(request_rec *r, unsigned char *buf, apr_size_t nbytes)
-{
- if (match(r, buf, nbytes))
- return 1;
-
- return 0;
-}
-
-/*
- * Go through the whole list, stopping if you find a match. Process all the
- * continuations of that match before returning.
- *
- * We support multi-level continuations:
- *
- * At any time when processing a successful top-level match, there is a current
- * continuation level; it represents the level of the last successfully
- * matched continuation.
- *
- * Continuations above that level are skipped as, if we see one, it means that
- * the continuation that controls them - i.e, the lower-level continuation
- * preceding them - failed to match.
- *
- * Continuations below that level are processed as, if we see one, it means
- * we've finished processing or skipping higher-level continuations under the
- * control of a successful or unsuccessful lower-level continuation, and are
- * now seeing the next lower-level continuation and should process it. The
- * current continuation level reverts to the level of the one we're seeing.
- *
- * Continuations at the current level are processed as, if we see one, there's
- * no lower-level continuation that may have failed.
- *
- * If a continuation matches, we bump the current continuation level so that
- * higher-level continuations are processed.
- */
-static int match(request_rec *r, unsigned char *s, apr_size_t nbytes)
-{
-#if MIME_MAGIC_DEBUG
- int rule_counter = 0;
-#endif
- int cont_level = 0;
- int need_separator = 0;
- union VALUETYPE p;
- magic_server_config_rec *conf = (magic_server_config_rec *)
- ap_get_module_config(r->server->module_config, &mime_magic_module);
- struct magic *m;
-
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": match conf=%x file=%s m=%s m->next=%s last=%s",
- conf,
- conf->magicfile ? conf->magicfile : "NULL",
- conf->magic ? "set" : "NULL",
- (conf->magic && conf->magic->next) ? "set" : "NULL",
- conf->last ? "set" : "NULL");
-#endif
-
-#if MIME_MAGIC_DEBUG
- for (m = conf->magic; m; m = m->next) {
- if (apr_isprint((((unsigned long) m) >> 24) & 255) &&
- apr_isprint((((unsigned long) m) >> 16) & 255) &&
- apr_isprint((((unsigned long) m) >> 8) & 255) &&
- apr_isprint(((unsigned long) m) & 255)) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": match: POINTER CLOBBERED! "
- "m=\"%c%c%c%c\"",
- (((unsigned long) m) >> 24) & 255,
- (((unsigned long) m) >> 16) & 255,
- (((unsigned long) m) >> 8) & 255,
- ((unsigned long) m) & 255);
- break;
- }
- }
-#endif
-
- for (m = conf->magic; m; m = m->next) {
-#if MIME_MAGIC_DEBUG
- rule_counter++;
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": line=%d desc=%s", m->lineno, m->desc);
-#endif
-
- /* check if main entry matches */
- if (!mget(r, &p, s, m, nbytes) ||
- !mcheck(r, &p, m)) {
- struct magic *m_cont;
-
- /*
- * main entry didn't match, flush its continuations
- */
- if (!m->next || (m->next->cont_level == 0)) {
- continue;
- }
-
- m_cont = m->next;
- while (m_cont && (m_cont->cont_level != 0)) {
-#if MIME_MAGIC_DEBUG
- rule_counter++;
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": line=%d mc=%x mc->next=%x cont=%d desc=%s",
- m_cont->lineno, m_cont,
- m_cont->next, m_cont->cont_level,
- m_cont->desc);
-#endif
- /*
- * this trick allows us to keep *m in sync when the continue
- * advances the pointer
- */
- m = m_cont;
- m_cont = m_cont->next;
- }
- continue;
- }
-
- /* if we get here, the main entry rule was a match */
- /* this will be the last run through the loop */
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": rule matched, line=%d type=%d %s",
- m->lineno, m->type,
- (m->type == STRING) ? m->value.s : "");
-#endif
-
- /* print the match */
- mprint(r, &p, m);
-
- /*
- * If we printed something, we'll need to print a blank before we
- * print something else.
- */
- if (m->desc[0])
- need_separator = 1;
- /* and any continuations that match */
- cont_level++;
- /*
- * while (m && m->next && m->next->cont_level != 0 && ( m = m->next
- * ))
- */
- m = m->next;
- while (m && (m->cont_level != 0)) {
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": match line=%d cont=%d type=%d %s",
- m->lineno, m->cont_level, m->type,
- (m->type == STRING) ? m->value.s : "");
-#endif
- if (cont_level >= m->cont_level) {
- if (cont_level > m->cont_level) {
- /*
- * We're at the end of the level "cont_level"
- * continuations.
- */
- cont_level = m->cont_level;
- }
- if (mget(r, &p, s, m, nbytes) &&
- mcheck(r, &p, m)) {
- /*
- * This continuation matched. Print its message, with a
- * blank before it if the previous item printed and this
- * item isn't empty.
- */
- /* space if previous printed */
- if (need_separator
- && (m->nospflag == 0)
- && (m->desc[0] != '\0')
- ) {
- (void) magic_rsl_putchar(r, ' ');
- need_separator = 0;
- }
- mprint(r, &p, m);
- if (m->desc[0])
- need_separator = 1;
-
- /*
- * If we see any continuations at a higher level, process
- * them.
- */
- cont_level++;
- }
- }
-
- /* move to next continuation record */
- m = m->next;
- }
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": matched after %d rules", rule_counter);
-#endif
- return 1; /* all through */
- }
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": failed after %d rules", rule_counter);
-#endif
- return 0; /* no match at all */
-}
-
-static void mprint(request_rec *r, union VALUETYPE *p, struct magic *m)
-{
- char *pp;
- unsigned long v;
- char time_str[APR_CTIME_LEN];
-
- switch (m->type) {
- case BYTE:
- v = p->b;
- break;
-
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = p->h;
- break;
-
- case LONG:
- case BELONG:
- case LELONG:
- v = p->l;
- break;
-
- case STRING:
- if (m->reln == '=') {
- (void) magic_rsl_printf(r, m->desc, m->value.s);
- }
- else {
- (void) magic_rsl_printf(r, m->desc, p->s);
- }
- return;
-
- case DATE:
- case BEDATE:
- case LEDATE:
- apr_ctime(time_str, apr_time_from_sec(*(time_t *)&p->l));
- pp = time_str;
- (void) magic_rsl_printf(r, m->desc, pp);
- return;
- default:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": invalid m->type (%d) in mprint().",
- m->type);
- return;
- }
-
- v = signextend(r->server, m, v) & m->mask;
- (void) magic_rsl_printf(r, m->desc, (unsigned long) v);
-}
-
-/*
- * Convert the byte order of the data we are looking at
- */
-static int mconvert(request_rec *r, union VALUETYPE *p, struct magic *m)
-{
- char *rt;
-
- switch (m->type) {
- case BYTE:
- case SHORT:
- case LONG:
- case DATE:
- return 1;
- case STRING:
- /* Null terminate and eat the return */
- p->s[sizeof(p->s) - 1] = '\0';
- if ((rt = strchr(p->s, '\n')) != NULL)
- *rt = '\0';
- return 1;
- case BESHORT:
- p->h = (short) ((p->hs[0] << 8) | (p->hs[1]));
- return 1;
- case BELONG:
- case BEDATE:
- p->l = (long)
- ((p->hl[0] << 24) | (p->hl[1] << 16) | (p->hl[2] << 8) | (p->hl[3]));
- return 1;
- case LESHORT:
- p->h = (short) ((p->hs[1] << 8) | (p->hs[0]));
- return 1;
- case LELONG:
- case LEDATE:
- p->l = (long)
- ((p->hl[3] << 24) | (p->hl[2] << 16) | (p->hl[1] << 8) | (p->hl[0]));
- return 1;
- default:
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": invalid type %d in mconvert().", m->type);
- return 0;
- }
-}
-
-
-static int mget(request_rec *r, union VALUETYPE *p, unsigned char *s,
- struct magic *m, apr_size_t nbytes)
-{
- long offset = m->offset;
-
- if (offset + sizeof(union VALUETYPE) > nbytes)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
-
- if (!mconvert(r, p, m))
- return 0;
-
- if (m->flag & INDIR) {
-
- switch (m->in.type) {
- case BYTE:
- offset = p->b + m->in.offset;
- break;
- case SHORT:
- offset = p->h + m->in.offset;
- break;
- case LONG:
- offset = p->l + m->in.offset;
- break;
- }
-
- if (offset + sizeof(union VALUETYPE) > nbytes)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
-
- if (!mconvert(r, p, m))
- return 0;
- }
- return 1;
-}
-
-static int mcheck(request_rec *r, union VALUETYPE *p, struct magic *m)
-{
- register unsigned long l = m->value.l;
- register unsigned long v;
- int matched;
-
- if ((m->value.s[0] == 'x') && (m->value.s[1] == '\0')) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": BOINK");
- return 1;
- }
-
- switch (m->type) {
- case BYTE:
- v = p->b;
- break;
-
- case SHORT:
- case BESHORT:
- case LESHORT:
- v = p->h;
- break;
-
- case LONG:
- case BELONG:
- case LELONG:
- case DATE:
- case BEDATE:
- case LEDATE:
- v = p->l;
- break;
-
- case STRING:
- l = 0;
- /*
- * What we want here is: v = strncmp(m->value.s, p->s, m->vallen);
- * but ignoring any nulls. bcmp doesn't give -/+/0 and isn't
- * universally available anyway.
- */
- v = 0;
- {
- register unsigned char *a = (unsigned char *) m->value.s;
- register unsigned char *b = (unsigned char *) p->s;
- register int len = m->vallen;
-
- while (--len >= 0)
- if ((v = *b++ - *a++) != 0)
- break;
- }
- break;
- default:
- /* bogosity, pretend that it just wasn't a match */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": invalid type %d in mcheck().", m->type);
- return 0;
- }
-
- v = signextend(r->server, m, v) & m->mask;
-
- switch (m->reln) {
- case 'x':
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%lu == *any* = 1", v);
-#endif
- matched = 1;
- break;
-
- case '!':
- matched = v != l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%lu != %lu = %d", v, l, matched);
-#endif
- break;
-
- case '=':
- matched = v == l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%lu == %lu = %d", v, l, matched);
-#endif
- break;
-
- case '>':
- if (m->flag & UNSIGNED) {
- matched = v > l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%lu > %lu = %d", v, l, matched);
-#endif
- }
- else {
- matched = (long) v > (long) l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%ld > %ld = %d", v, l, matched);
-#endif
- }
- break;
-
- case '<':
- if (m->flag & UNSIGNED) {
- matched = v < l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%lu < %lu = %d", v, l, matched);
-#endif
- }
- else {
- matched = (long) v < (long) l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "%ld < %ld = %d", v, l, matched);
-#endif
- }
- break;
-
- case '&':
- matched = (v & l) == l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "((%lx & %lx) == %lx) = %d", v, l, l, matched);
-#endif
- break;
-
- case '^':
- matched = (v & l) != l;
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "((%lx & %lx) != %lx) = %d", v, l, l, matched);
-#endif
- break;
-
- default:
- /* bogosity, pretend it didn't match */
- matched = 0;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- MODNAME ": mcheck: can't happen: invalid relation %d.",
- m->reln);
- break;
- }
-
- return matched;
-}
-
-/* an optimization over plain strcmp() */
-#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-static int ascmagic(request_rec *r, unsigned char *buf, apr_size_t nbytes)
-{
- int has_escapes = 0;
- unsigned char *s;
- char nbuf[HOWMANY + 1]; /* one extra for terminating '\0' */
- char *token;
- register struct names *p;
- int small_nbytes;
- char *strtok_state;
-
- /* these are easy, do them first */
-
- /*
- * for troff, look for . + letter + letter or .\"; this must be done to
- * disambiguate tar archives' ./file and other trash from real troff
- * input.
- */
- if (*buf == '.') {
- unsigned char *tp = buf + 1;
-
- while (apr_isspace(*tp))
- ++tp; /* skip leading whitespace */
- if ((apr_isalnum(*tp) || *tp == '\\') &&
- (apr_isalnum(*(tp + 1)) || *tp == '"')) {
- magic_rsl_puts(r, "application/x-troff");
- return 1;
- }
- }
- if ((*buf == 'c' || *buf == 'C') && apr_isspace(*(buf + 1))) {
- /* Fortran */
- magic_rsl_puts(r, "text/plain");
- return 1;
- }
-
- /* look for tokens from names.h - this is expensive!, so we'll limit
- * ourselves to only SMALL_HOWMANY bytes */
- small_nbytes = (nbytes > SMALL_HOWMANY) ? SMALL_HOWMANY : nbytes;
- /* make a copy of the buffer here because apr_strtok() will destroy it */
- s = (unsigned char *) memcpy(nbuf, buf, small_nbytes);
- s[small_nbytes] = '\0';
- has_escapes = (memchr(s, '\033', small_nbytes) != NULL);
- while ((token = apr_strtok((char *) s, " \t\n\r\f", &strtok_state)) != NULL) {
- s = NULL; /* make apr_strtok() keep on tokin' */
- for (p = names; p < names + NNAMES; p++) {
- if (STREQ(p->name, token)) {
- magic_rsl_puts(r, types[p->type]);
- if (has_escapes)
- magic_rsl_puts(r, " (with escape sequences)");
- return 1;
- }
- }
- }
-
- switch (is_tar(buf, nbytes)) {
- case 1:
- /* V7 tar archive */
- magic_rsl_puts(r, "application/x-tar");
- return 1;
- case 2:
- /* POSIX tar archive */
- magic_rsl_puts(r, "application/x-tar");
- return 1;
- }
-
- /* all else fails, but it is ascii... */
- return 0;
-}
-
-
-/*
- * compress routines: zmagic() - returns 0 if not recognized, uncompresses
- * and prints information if recognized uncompress(s, method, old, n, newch)
- * - uncompress old into new, using method, return sizeof new
- */
-
-static struct {
- char *magic;
- apr_size_t maglen;
- char *argv[3];
- int silent;
- char *encoding; /* MUST be lowercase */
-} compr[] = {
-
- /* we use gzip here rather than uncompress because we have to pass
- * it a full filename -- and uncompress only considers filenames
- * ending with .Z
- */
- {
- "\037\235", 2, {
- "gzip", "-dcq", NULL
- }, 0, "x-compress"
- },
- {
- "\037\213", 2, {
- "gzip", "-dcq", NULL
- }, 1, "x-gzip"
- },
- /*
- * XXX pcat does not work, cause I don't know how to make it read stdin,
- * so we use gzip
- */
- {
- "\037\036", 2, {
- "gzip", "-dcq", NULL
- }, 0, "x-gzip"
- },
-};
-
-static int ncompr = sizeof(compr) / sizeof(compr[0]);
-
-static int zmagic(request_rec *r, unsigned char *buf, apr_size_t nbytes)
-{
- unsigned char *newbuf;
- int newsize;
- int i;
-
- for (i = 0; i < ncompr; i++) {
- if (nbytes < compr[i].maglen)
- continue;
- if (memcmp(buf, compr[i].magic, compr[i].maglen) == 0)
- break;
- }
-
- if (i == ncompr)
- return 0;
-
- if ((newsize = uncompress(r, i, &newbuf, nbytes)) > 0) {
- if (tryit(r, newbuf, newsize, 0) != OK) {
- return 0;
- }
-
- /* set encoding type in the request record */
- r->content_encoding = compr[i].encoding;
- }
- return 1;
-}
-
-
-struct uncompress_parms {
- request_rec *r;
- int method;
-};
-
-static int create_uncompress_child(struct uncompress_parms *parm, apr_pool_t *cntxt,
- apr_file_t **pipe_in)
-{
- int rc = 1;
- const char *new_argv[4];
- const char *const *env;
- request_rec *r = parm->r;
- apr_pool_t *child_context = cntxt;
- apr_procattr_t *procattr;
- apr_proc_t *procnew;
-
- /* XXX missing 1.3 logic:
- *
- * what happens when !compr[parm->method].silent?
- * Should we create the err pipe, read it, and copy to the log?
- */
-
- env = (const char *const *)ap_create_environment(child_context, r->subprocess_env);
-
- if ((apr_procattr_create(&procattr, child_context) != APR_SUCCESS) ||
- (apr_procattr_io_set(procattr, APR_FULL_BLOCK,
- APR_FULL_BLOCK, APR_NO_PIPE) != APR_SUCCESS) ||
- (apr_procattr_dir_set(procattr, r->filename) != APR_SUCCESS) ||
- (apr_procattr_cmdtype_set(procattr, APR_PROGRAM) != APR_SUCCESS)) {
- /* Something bad happened, tell the world. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_ENOPROC, r,
- "couldn't setup child process: %s", r->filename);
- }
- else {
- new_argv[0] = compr[parm->method].argv[0];
- new_argv[1] = compr[parm->method].argv[1];
- new_argv[2] = r->filename;
- new_argv[3] = NULL;
-
- procnew = apr_pcalloc(child_context, sizeof(*procnew));
- rc = apr_proc_create(procnew, compr[parm->method].argv[0],
- new_argv, env, procattr, child_context);
-
- if (rc != APR_SUCCESS) {
- /* Bad things happened. Everyone should have cleaned up. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_ENOPROC, r,
- MODNAME ": could not execute `%s'.",
- compr[parm->method].argv[0]);
- }
- else {
- apr_pool_note_subprocess(child_context, procnew, APR_KILL_AFTER_TIMEOUT);
- *pipe_in = procnew->out;
- }
- }
-
- return (rc);
-}
-
-static int uncompress(request_rec *r, int method,
- unsigned char **newch, apr_size_t n)
-{
- struct uncompress_parms parm;
- apr_file_t *pipe_out = NULL;
- apr_pool_t *sub_context;
- apr_status_t rv;
-
- parm.r = r;
- parm.method = method;
-
- /* We make a sub_pool so that we can collect our child early, otherwise
- * there are cases (i.e. generating directory indicies with mod_autoindex)
- * where we would end up with LOTS of zombies.
- */
- if (apr_pool_create(&sub_context, r->pool) != APR_SUCCESS)
- return -1;
-
- if ((rv = create_uncompress_child(&parm, sub_context, &pipe_out)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- MODNAME ": couldn't spawn uncompress process: %s", r->uri);
- return -1;
- }
-
- *newch = (unsigned char *) apr_palloc(r->pool, n);
- rv = apr_file_read(pipe_out, *newch, &n);
- if (n == 0) {
- apr_pool_destroy(sub_context);
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- MODNAME ": read failed from uncompress of %s", r->filename);
- return -1;
- }
- apr_pool_destroy(sub_context);
- return n;
-}
-
-/*
- * is_tar() -- figure out whether file is a tar archive.
- *
- * Stolen (by author of file utility) from the public domain tar program: Public
- * Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
- *
- * @(#)list.c 1.18 9/23/86 Public Domain - gnu $Id: mod_mime_magic.c,v 1.7
- * 1997/06/24 00:41:02 ikluft Exp ikluft $
- *
- * Comments changed and some code/comments reformatted for file command by Ian
- * Darwin.
- */
-
-#define isodigit(c) (((unsigned char)(c) >= '0') && ((unsigned char)(c) <= '7'))
-
-/*
- * Return 0 if the checksum is bad (i.e., probably not a tar archive), 1 for
- * old UNIX tar file, 2 for Unix Std (POSIX) tar file.
- */
-
-static int is_tar(unsigned char *buf, apr_size_t nbytes)
-{
- register union record *header = (union record *) buf;
- register int i;
- register long sum, recsum;
- register char *p;
-
- if (nbytes < sizeof(union record))
- return 0;
-
- recsum = from_oct(8, header->header.chksum);
-
- sum = 0;
- p = header->charptr;
- for (i = sizeof(union record); --i >= 0;) {
- /*
- * We can't use unsigned char here because of old compilers, e.g. V7.
- */
- sum += 0xFF & *p++;
- }
-
- /* Adjust checksum to count the "chksum" field as blanks. */
- for (i = sizeof(header->header.chksum); --i >= 0;)
- sum -= 0xFF & header->header.chksum[i];
- sum += ' ' * sizeof header->header.chksum;
-
- if (sum != recsum)
- return 0; /* Not a tar archive */
-
- if (0 == strcmp(header->header.magic, TMAGIC))
- return 2; /* Unix Standard tar archive */
-
- return 1; /* Old fashioned tar archive */
-}
-
-
-/*
- * Quick and dirty octal conversion.
- *
- * Result is -1 if the field is invalid (all blank, or nonoctal).
- */
-static long from_oct(int digs, char *where)
-{
- register long value;
-
- while (apr_isspace(*where)) { /* Skip spaces */
- where++;
- if (--digs <= 0)
- return -1; /* All blank field */
- }
- value = 0;
- while (digs > 0 && isodigit(*where)) { /* Scan til nonoctal */
- value = (value << 3) | (*where++ - '0');
- --digs;
- }
-
- if (digs > 0 && *where && !apr_isspace(*where))
- return -1; /* Ended on non-space/nul */
-
- return value;
-}
-
-/*
- * Check for file-revision suffix
- *
- * This is for an obscure document control system used on an intranet.
- * The web representation of each file's revision has an @1, @2, etc
- * appended with the revision number. This needs to be stripped off to
- * find the file suffix, which can be recognized by sending the name back
- * through a sub-request. The base file name (without the @num suffix)
- * must exist because its type will be used as the result.
- */
-static int revision_suffix(request_rec *r)
-{
- int suffix_pos, result;
- char *sub_filename;
- request_rec *sub;
-
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": revision_suffix checking %s", r->filename);
-#endif /* MIME_MAGIC_DEBUG */
-
- /* check for recognized revision suffix */
- suffix_pos = strlen(r->filename) - 1;
- if (!apr_isdigit(r->filename[suffix_pos])) {
- return 0;
- }
- while (suffix_pos >= 0 && apr_isdigit(r->filename[suffix_pos]))
- suffix_pos--;
- if (suffix_pos < 0 || r->filename[suffix_pos] != '@') {
- return 0;
- }
-
- /* perform sub-request for the file name without the suffix */
- result = 0;
- sub_filename = apr_pstrndup(r->pool, r->filename, suffix_pos);
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": subrequest lookup for %s", sub_filename);
-#endif /* MIME_MAGIC_DEBUG */
- sub = ap_sub_req_lookup_file(sub_filename, r, NULL);
-
- /* extract content type/encoding/language from sub-request */
- if (sub->content_type) {
- ap_set_content_type(r, apr_pstrdup(r->pool, sub->content_type));
-#if MIME_MAGIC_DEBUG
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- MODNAME ": subrequest %s got %s",
- sub_filename, r->content_type);
-#endif /* MIME_MAGIC_DEBUG */
- if (sub->content_encoding)
- r->content_encoding =
- apr_pstrdup(r->pool, sub->content_encoding);
- if (sub->content_languages) {
- int n;
- r->content_languages = apr_array_copy(r->pool,
- sub->content_languages);
- for (n = 0; n < r->content_languages->nelts; ++n) {
- char **lang = ((char **)r->content_languages->elts) + n;
- *lang = apr_pstrdup(r->pool, *lang);
- }
- }
- result = 1;
- }
-
- /* clean up */
- ap_destroy_sub_req(sub);
-
- return result;
-}
-
-/*
- * initialize the module
- */
-static int magic_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
-{
- int result;
- magic_server_config_rec *conf;
- magic_server_config_rec *main_conf;
- server_rec *s;
-#if MIME_MAGIC_DEBUG
- struct magic *m, *prevm;
-#endif /* MIME_MAGIC_DEBUG */
-
- main_conf = ap_get_module_config(main_server->module_config, &mime_magic_module);
- for (s = main_server; s; s = s->next) {
- conf = ap_get_module_config(s->module_config, &mime_magic_module);
- if (conf->magicfile == NULL && s != main_server) {
- /* inherits from the parent */
- *conf = *main_conf;
- }
- else if (conf->magicfile) {
- result = apprentice(s, p);
- if (result == -1)
- return OK;
-#if MIME_MAGIC_DEBUG
- prevm = 0;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- MODNAME ": magic_init 1 test");
- for (m = conf->magic; m; m = m->next) {
- if (apr_isprint((((unsigned long) m) >> 24) & 255) &&
- apr_isprint((((unsigned long) m) >> 16) & 255) &&
- apr_isprint((((unsigned long) m) >> 8) & 255) &&
- apr_isprint(((unsigned long) m) & 255)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- MODNAME ": magic_init 1: POINTER CLOBBERED! "
- "m=\"%c%c%c%c\" line=%d",
- (((unsigned long) m) >> 24) & 255,
- (((unsigned long) m) >> 16) & 255,
- (((unsigned long) m) >> 8) & 255,
- ((unsigned long) m) & 255,
- prevm ? prevm->lineno : -1);
- break;
- }
- prevm = m;
- }
-#endif
- }
- }
- return OK;
-}
-
-/*
- * Find the Content-Type from any resource this module has available
- */
-
-static int magic_find_ct(request_rec *r)
-{
- int result;
- magic_server_config_rec *conf;
-
- /* the file has to exist */
- if (r->finfo.filetype == 0 || !r->filename) {
- return DECLINED;
- }
-
- /* was someone else already here? */
- if (r->content_type) {
- return DECLINED;
- }
-
- conf = ap_get_module_config(r->server->module_config, &mime_magic_module);
- if (!conf || !conf->magic) {
- return DECLINED;
- }
-
- /* initialize per-request info */
- if (!magic_set_config(r)) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* try excluding file-revision suffixes */
- if (revision_suffix(r) != 1) {
- /* process it based on the file contents */
- if ((result = magic_process(r)) != OK) {
- return result;
- }
- }
-
- /* if we have any results, put them in the request structure */
- return magic_rsl_to_request(r);
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- static const char * const aszPre[]={ "mod_mime.c", NULL };
-
- /* mod_mime_magic should be run after mod_mime, if at all. */
-
- ap_hook_type_checker(magic_find_ct, aszPre, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(magic_init, NULL, NULL, APR_HOOK_FIRST);
-}
-
-/*
- * Apache API module interface
- */
-
-module AP_MODULE_DECLARE_DATA mime_magic_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creator */
- NULL, /* dir merger --- default is to override */
- create_magic_server_config, /* server config */
- merge_magic_server_config, /* merge server config */
- mime_magic_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
-
-
diff --git a/modules/metadata/mod_mime_magic.dsp b/modules/metadata/mod_mime_magic.dsp
deleted file mode 100644
index c4e096b740..0000000000
--- a/modules/metadata/mod_mime_magic.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_mime_magic" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_mime_magic - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_mime_magic.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_mime_magic.mak" CFG="mod_mime_magic - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_mime_magic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_mime_magic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_mime_magic - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_mime_magic_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic.so
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_mime_magic - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_mime_magic_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic.so
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_mime_magic - Win32 Release"
-# Name "mod_mime_magic - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_mime_magic.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_mime_magic.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_mime_magic - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime_magic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_mime_magic.so "mime_magic_module for Apache" ../../include/ap_release.h > .\mod_mime_magic.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_mime_magic - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime_magic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_mime_magic.so "mime_magic_module for Apache" ../../include/ap_release.h > .\mod_mime_magic.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_mime_magic.exp b/modules/metadata/mod_mime_magic.exp
deleted file mode 100644
index 42068a4342..0000000000
--- a/modules/metadata/mod_mime_magic.exp
+++ /dev/null
@@ -1 +0,0 @@
-mime_magic_module
diff --git a/modules/metadata/mod_setenvif.c b/modules/metadata/mod_setenvif.c
deleted file mode 100644
index bf2e0ec02e..0000000000
--- a/modules/metadata/mod_setenvif.c
+++ /dev/null
@@ -1,585 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_setenvif.c
- * Set environment variables based on matching request headers or
- * attributes against regex strings
- *
- * Paul Sutton <paul@ukweb.com> 27 Oct 1996
- * Based on mod_browser by Alexei Kosut <akosut@organic.com>
- */
-
-/*
- * Used to set environment variables based on the incoming request headers,
- * or some selected other attributes of the request (e.g., the remote host
- * name).
- *
- * Usage:
- *
- * SetEnvIf name regex var ...
- *
- * where name is either a HTTP request header name, or one of the
- * special values (see below). 'name' may be a regex when it is used
- * to specify an HTTP request header name. The 'value' of the header
- & (or the value of the special value from below) are compared against
- * the regex argument. If this is a simple string, a simple sub-string
- * match is performed. Otherwise, a request expression match is
- * done. If the value matches the string or regular expression, the
- * environment variables listed as var ... are set. Each var can
- * be in one of three formats: var, which sets the named variable
- * (the value value "1"); var=value, which sets the variable to
- * the given value; or !var, which unsets the variable is it has
- * been previously set.
- *
- * Normally the strings are compared with regard to case. To ignore
- * case, use the directive SetEnvIfNoCase instead.
- *
- * Special values for 'name' are:
- *
- * server_addr IP address of interface on which request arrived
- * (analogous to SERVER_ADDR set in ap_add_common_vars())
- * remote_host Remote host name (if available)
- * remote_addr Remote IP address
- * request_method Request method (GET, POST, etc)
- * request_uri Requested URI
- *
- * Examples:
- *
- * To set the enviroment variable LOCALHOST if the client is the local
- * machine:
- *
- * SetEnvIf remote_addr 127.0.0.1 LOCALHOST
- *
- * To set LOCAL if the client is the local host, or within our company's
- * domain (192.168.10):
- *
- * SetEnvIf remote_addr 192.168.10. LOCAL
- * SetEnvIf remote_addr 127.0.0.1 LOCALHOST
- *
- * This could be written as:
- *
- * SetEnvIf remote_addr (127.0.0.1|192.168.10.) LOCAL
- *
- * To set HAVE_TS if the client request contains any header beginning
- * with "TS" with a value beginning with a lower case alphabet:
- *
- * SetEnvIf ^TS* ^[a-z].* HAVE_TS
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_strmatch.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-
-
-enum special {
- SPECIAL_NOT,
- SPECIAL_REMOTE_ADDR,
- SPECIAL_REMOTE_HOST,
- SPECIAL_REQUEST_URI,
- SPECIAL_REQUEST_METHOD,
- SPECIAL_REQUEST_PROTOCOL,
- SPECIAL_SERVER_ADDR
-};
-typedef struct {
- char *name; /* header name */
- regex_t *pnamereg; /* compiled header name regex */
- char *regex; /* regex to match against */
- regex_t *preg; /* compiled regex */
- const apr_strmatch_pattern *pattern; /* non-regex pattern to match */
- apr_table_t *features; /* env vars to set (or unset) */
- enum special special_type; /* is it a "special" header ? */
- int icase; /* ignoring case? */
-} sei_entry;
-
-typedef struct {
- apr_array_header_t *conditionals;
-} sei_cfg_rec;
-
-module AP_MODULE_DECLARE_DATA setenvif_module;
-
-/*
- * These routines, the create- and merge-config functions, are called
- * for both the server-wide and the per-directory contexts. This is
- * because the different definitions are used at different times; the
- * server-wide ones are used in the post-read-request phase, and the
- * per-directory ones are used during the header-parse phase (after
- * the URI has been mapped to a file and we have anything from the
- * .htaccess file and <Directory> and <Files> containers).
- */
-static void *create_setenvif_config(apr_pool_t *p)
-{
- sei_cfg_rec *new = (sei_cfg_rec *) apr_palloc(p, sizeof(sei_cfg_rec));
-
- new->conditionals = apr_array_make(p, 20, sizeof(sei_entry));
- return (void *) new;
-}
-
-static void *create_setenvif_config_svr(apr_pool_t *p, server_rec *dummy)
-{
- return create_setenvif_config(p);
-}
-
-static void *create_setenvif_config_dir(apr_pool_t *p, char *dummy)
-{
- return create_setenvif_config(p);
-}
-
-static void *merge_setenvif_config(apr_pool_t *p, void *basev, void *overridesv)
-{
- sei_cfg_rec *a = apr_pcalloc(p, sizeof(sei_cfg_rec));
- sei_cfg_rec *base = basev, *overrides = overridesv;
-
- a->conditionals = apr_array_append(p, base->conditionals,
- overrides->conditionals);
- return a;
-}
-
-/*
- * any non-NULL magic constant will do... used to indicate if REG_ICASE should
- * be used
- */
-#define ICASE_MAGIC ((void *)(&setenvif_module))
-#define SEI_MAGIC_HEIRLOOM "setenvif-phase-flag"
-
-static int is_header_regex(apr_pool_t *p, const char* name)
-{
- /* If a Header name contains characters other than:
- * -,_,[A-Z\, [a-z] and [0-9].
- * assume the header name is a regular expression.
- */
- regex_t *preg = ap_pregcomp(p, "^[-A-Za-z0-9_]*$",
- (REG_EXTENDED | REG_NOSUB ));
- ap_assert(preg != NULL);
-
- if (ap_regexec(preg, name, 0, NULL, 0)) {
- return 1;
- }
-
- return 0;
-}
-
-/* If the input string does not take advantage of regular
- * expression metacharacters, return a pointer to an equivalent
- * string that can be searched using apr_strmatch(). (The
- * returned string will often be the input string. But if
- * the input string contains escaped characters, the returned
- * string will be a copy with the escapes removed.)
- */
-static const char *non_regex_pattern(apr_pool_t *p, const char *s)
-{
- const char *src = s;
- int escapes_found = 0;
- int in_escape = 0;
-
- while (*src) {
- switch (*src) {
- case '^':
- case '.':
- case '$':
- case '|':
- case '(':
- case ')':
- case '[':
- case ']':
- case '*':
- case '+':
- case '?':
- case '{':
- case '}':
- if (!in_escape) {
- return NULL;
- }
- in_escape = 0;
- break;
- case '\\':
- if (!in_escape) {
- in_escape = 1;
- escapes_found = 1;
- }
- else {
- in_escape = 0;
- }
- break;
- default:
- if (in_escape) {
- return NULL;
- }
- break;
- }
- src++;
- }
- if (!escapes_found) {
- return s;
- }
- else {
- char *unescaped = (char *)apr_palloc(p, src - s + 1);
- char *dst = unescaped;
- src = s;
- do {
- if (*src == '\\') {
- src++;
- }
- } while ((*dst++ = *src++));
- return unescaped;
- }
-}
-
-static const char *add_setenvif_core(cmd_parms *cmd, void *mconfig,
- char *fname, const char *args)
-{
- char *regex;
- const char *simple_pattern;
- const char *feature;
- sei_cfg_rec *sconf;
- sei_entry *new;
- sei_entry *entries;
- char *var;
- int i;
- int beenhere = 0;
- int icase;
-
- /*
- * Determine from our context into which record to put the entry.
- * cmd->path == NULL means we're in server-wide context; otherwise,
- * we're dealing with a per-directory setting.
- */
- sconf = (cmd->path != NULL)
- ? (sei_cfg_rec *) mconfig
- : (sei_cfg_rec *) ap_get_module_config(cmd->server->module_config,
- &setenvif_module);
- entries = (sei_entry *) sconf->conditionals->elts;
- /* get regex */
- regex = ap_getword_conf(cmd->pool, &args);
- if (!*regex) {
- return apr_pstrcat(cmd->pool, "Missing regular expression for ",
- cmd->cmd->name, NULL);
- }
-
- /*
- * If we've already got a sei_entry with the same name we want to
- * just copy the name pointer... so that later on we can compare
- * two header names just by comparing the pointers.
- */
- for (i = 0; i < sconf->conditionals->nelts; ++i) {
- new = &entries[i];
- if (!strcasecmp(new->name, fname)) {
- fname = new->name;
- break;
- }
- }
-
- /* if the last entry has an identical headername and regex then
- * merge with it
- */
- i = sconf->conditionals->nelts - 1;
- icase = cmd->info == ICASE_MAGIC;
- if (i < 0
- || entries[i].name != fname
- || entries[i].icase != icase
- || strcmp(entries[i].regex, regex)) {
-
- /* no match, create a new entry */
- new = apr_array_push(sconf->conditionals);
- new->name = fname;
- new->regex = regex;
- new->icase = icase;
- if ((simple_pattern = non_regex_pattern(cmd->pool, regex))) {
- new->pattern = apr_strmatch_precompile(cmd->pool,
- simple_pattern, !icase);
- if (new->pattern == NULL) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name,
- " pattern could not be compiled.", NULL);
- }
- new->preg = NULL;
- }
- else {
- new->preg = ap_pregcomp(cmd->pool, regex,
- (REG_EXTENDED | (icase ? REG_ICASE : 0)));
- if (new->preg == NULL) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name,
- " regex could not be compiled.", NULL);
- }
- new->pattern = NULL;
- }
- new->features = apr_table_make(cmd->pool, 2);
-
- if (!strcasecmp(fname, "remote_addr")) {
- new->special_type = SPECIAL_REMOTE_ADDR;
- }
- else if (!strcasecmp(fname, "remote_host")) {
- new->special_type = SPECIAL_REMOTE_HOST;
- }
- else if (!strcasecmp(fname, "request_uri")) {
- new->special_type = SPECIAL_REQUEST_URI;
- }
- else if (!strcasecmp(fname, "request_method")) {
- new->special_type = SPECIAL_REQUEST_METHOD;
- }
- else if (!strcasecmp(fname, "request_protocol")) {
- new->special_type = SPECIAL_REQUEST_PROTOCOL;
- }
- else if (!strcasecmp(fname, "server_addr")) {
- new->special_type = SPECIAL_SERVER_ADDR;
- }
- else {
- new->special_type = SPECIAL_NOT;
- /* Handle fname as a regular expression.
- * If fname a simple header string, identify as such
- * (new->pnamereg = NULL) to avoid the overhead of searching
- * through headers_in for a regex match.
- */
- if (is_header_regex(cmd->pool, fname)) {
- new->pnamereg = ap_pregcomp(cmd->pool, fname,
- (REG_EXTENDED | REG_NOSUB
- | (icase ? REG_ICASE : 0)));
- if (new->pnamereg == NULL)
- return apr_pstrcat(cmd->pool, cmd->cmd->name,
- "Header name regex could not be "
- "compiled.", NULL);
- }
- else {
- new->pnamereg = NULL;
- }
- }
- }
- else {
- new = &entries[i];
- }
-
- for ( ; ; ) {
- feature = ap_getword_conf(cmd->pool, &args);
- if (!*feature) {
- break;
- }
- beenhere++;
-
- var = ap_getword(cmd->pool, &feature, '=');
- if (*feature) {
- apr_table_setn(new->features, var, feature);
- }
- else if (*var == '!') {
- apr_table_setn(new->features, var + 1, "!");
- }
- else {
- apr_table_setn(new->features, var, "1");
- }
- }
-
- if (!beenhere) {
- return apr_pstrcat(cmd->pool, "Missing envariable expression for ",
- cmd->cmd->name, NULL);
- }
-
- return NULL;
-}
-
-static const char *add_setenvif(cmd_parms *cmd, void *mconfig,
- const char *args)
-{
- char *fname;
-
- /* get header name */
- fname = ap_getword_conf(cmd->pool, &args);
- if (!*fname) {
- return apr_pstrcat(cmd->pool, "Missing header-field name for ",
- cmd->cmd->name, NULL);
- }
- return add_setenvif_core(cmd, mconfig, fname, args);
-}
-
-/*
- * This routine handles the BrowserMatch* directives. It simply turns around
- * and feeds them, with the appropriate embellishments, to the general-purpose
- * command handler.
- */
-static const char *add_browser(cmd_parms *cmd, void *mconfig, const char *args)
-{
- return add_setenvif_core(cmd, mconfig, "User-Agent", args);
-}
-
-static const command_rec setenvif_module_cmds[] =
-{
- AP_INIT_RAW_ARGS("SetEnvIf", add_setenvif, NULL, OR_FILEINFO,
- "A header-name, regex and a list of variables."),
- AP_INIT_RAW_ARGS("SetEnvIfNoCase", add_setenvif, ICASE_MAGIC, OR_FILEINFO,
- "a header-name, regex and a list of variables."),
- AP_INIT_RAW_ARGS("BrowserMatch", add_browser, NULL, OR_FILEINFO,
- "A browser regex and a list of variables."),
- AP_INIT_RAW_ARGS("BrowserMatchNoCase", add_browser, ICASE_MAGIC,
- OR_FILEINFO,
- "A browser regex and a list of variables."),
- { NULL },
-};
-
-/*
- * This routine gets called at two different points in request processing:
- * once before the URI has been translated (during the post-read-request
- * phase) and once after (during the header-parse phase). We use different
- * config records for the two different calls to reduce overhead (by not
- * re-doing the server-wide settings during directory processing), and
- * signal which call it is by having the earlier one pass a flag to the
- * later one.
- */
-static int match_headers(request_rec *r)
-{
- sei_cfg_rec *sconf;
- sei_entry *entries;
- const apr_table_entry_t *elts;
- const char *val;
- apr_size_t val_len = 0;
- int i, j;
- char *last_name;
- regmatch_t regm[AP_MAX_REG_MATCH];
-
- if (!ap_get_module_config(r->request_config, &setenvif_module)) {
- ap_set_module_config(r->request_config, &setenvif_module,
- SEI_MAGIC_HEIRLOOM);
- sconf = (sei_cfg_rec *) ap_get_module_config(r->server->module_config,
- &setenvif_module);
- }
- else {
- sconf = (sei_cfg_rec *) ap_get_module_config(r->per_dir_config,
- &setenvif_module);
- }
- entries = (sei_entry *) sconf->conditionals->elts;
- last_name = NULL;
- val = NULL;
- for (i = 0; i < sconf->conditionals->nelts; ++i) {
- sei_entry *b = &entries[i];
-
- /* Optimize the case where a bunch of directives in a row use the
- * same header. Remember we don't need to strcmp the two header
- * names because we made sure the pointers were equal during
- * configuration.
- */
- if (b->name != last_name) {
- last_name = b->name;
- switch (b->special_type) {
- case SPECIAL_REMOTE_ADDR:
- val = r->connection->remote_ip;
- break;
- case SPECIAL_SERVER_ADDR:
- val = r->connection->local_ip;
- break;
- case SPECIAL_REMOTE_HOST:
- val = ap_get_remote_host(r->connection, r->per_dir_config,
- REMOTE_NAME, NULL);
- break;
- case SPECIAL_REQUEST_URI:
- val = r->uri;
- break;
- case SPECIAL_REQUEST_METHOD:
- val = r->method;
- break;
- case SPECIAL_REQUEST_PROTOCOL:
- val = r->protocol;
- break;
- case SPECIAL_NOT:
- if (b->pnamereg) {
- /* Matching headers_in against a regex. Iterate through
- * the headers_in until we find a match or run out of
- * headers.
- */
- const apr_array_header_t
- *arr = apr_table_elts(r->headers_in);
-
- elts = (const apr_table_entry_t *) arr->elts;
- val = NULL;
- for (j = 0; j < arr->nelts; ++j) {
- if (!ap_regexec(b->pnamereg, elts[j].key, 0, NULL, 0)) {
- val = elts[j].val;
- }
- }
- }
- else {
- /* Not matching against a regex */
- val = apr_table_get(r->headers_in, b->name);
- if (val == NULL) {
- val = apr_table_get(r->subprocess_env, b->name);
- }
- }
- }
- val_len = val ? strlen(val) : 0;
- }
-
- /*
- * A NULL value indicates that the header field or special entity
- * wasn't present or is undefined. Represent that as an empty string
- * so that REs like "^$" will work and allow envariable setting
- * based on missing or empty field.
- */
- if (val == NULL) {
- val = "";
- val_len = 0;
- }
-
- if ((b->pattern && apr_strmatch(b->pattern, val, val_len)) ||
- (!b->pattern && !ap_regexec(b->preg, val, AP_MAX_REG_MATCH, regm,
- 0))) {
- const apr_array_header_t *arr = apr_table_elts(b->features);
- elts = (const apr_table_entry_t *) arr->elts;
-
- for (j = 0; j < arr->nelts; ++j) {
- if (*(elts[j].val) == '!') {
- apr_table_unset(r->subprocess_env, elts[j].key);
- }
- else {
- if (!b->pattern) {
- char *replaced = ap_pregsub(r->pool, elts[j].val, val,
- AP_MAX_REG_MATCH, regm);
- if (replaced) {
- apr_table_setn(r->subprocess_env, elts[j].key,
- replaced);
- }
- }
- else {
- apr_table_setn(r->subprocess_env, elts[j].key,
- elts[j].val);
- }
- }
- }
- }
- }
-
- return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_header_parser(match_headers, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_read_request(match_headers, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA setenvif_module =
-{
- STANDARD20_MODULE_STUFF,
- create_setenvif_config_dir, /* dir config creater */
- merge_setenvif_config, /* dir merger --- default is to override */
- create_setenvif_config_svr, /* server config */
- merge_setenvif_config, /* merge server configs */
- setenvif_module_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_setenvif.dsp b/modules/metadata/mod_setenvif.dsp
deleted file mode 100644
index 4de3f37aba..0000000000
--- a/modules/metadata/mod_setenvif.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_setenvif" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_setenvif - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_setenvif.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_setenvif.mak" CFG="mod_setenvif - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_setenvif - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_setenvif - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_setenvif - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_setenvif_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_setenvif - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_setenvif_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_setenvif - Win32 Release"
-# Name "mod_setenvif - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_setenvif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_setenvif.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_setenvif - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_setenvif.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_setenvif.so "setenvif_module for Apache" ../../include/ap_release.h > .\mod_setenvif.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_setenvif - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_setenvif.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_setenvif.so "setenvif_module for Apache" ../../include/ap_release.h > .\mod_setenvif.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_setenvif.exp b/modules/metadata/mod_setenvif.exp
deleted file mode 100644
index 4f3800e3a8..0000000000
--- a/modules/metadata/mod_setenvif.exp
+++ /dev/null
@@ -1 +0,0 @@
-setenvif_module
diff --git a/modules/metadata/mod_unique_id.c b/modules/metadata/mod_unique_id.c
deleted file mode 100644
index 21d232f88a..0000000000
--- a/modules/metadata/mod_unique_id.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_unique_id.c: generate a unique identifier for each request
- *
- * Original author: Dean Gaudet <dgaudet@arctic.org>
- * UUencoding modified by: Alvaro Martinez Echevarria <alvaro@lander.es>
- */
-
-#define APR_WANT_BYTEFUNC /* for htons() et al */
-#include "apr_want.h"
-#include "apr_general.h" /* for APR_OFFSETOF */
-#include "apr_network_io.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_protocol.h" /* for ap_hook_post_read_request */
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h> /* for getpid() */
-#endif
-
-typedef struct {
- unsigned int stamp;
- unsigned int in_addr;
- unsigned int pid;
- unsigned short counter;
- unsigned int thread_index;
-} unique_id_rec;
-
-/* We are using thread_index (the index into the scoreboard), because we
- * cannot guarantee the thread_id will be an integer.
- *
- * This code looks like it won't give a unique ID with the new thread logic.
- * It will. The reason is, we don't increment the counter in a thread_safe
- * manner. Because the thread_index is also in the unique ID now, this does
- * not matter. In order for the id to not be unique, the same thread would
- * have to get the same counter twice in the same second.
- */
-
-/* Comments:
- *
- * We want an identifier which is unique across all hits, everywhere.
- * "everywhere" includes multiple httpd instances on the same machine, or on
- * multiple machines. Essentially "everywhere" should include all possible
- * httpds across all servers at a particular "site". We make some assumptions
- * that if the site has a cluster of machines then their time is relatively
- * synchronized. We also assume that the first address returned by a
- * gethostbyname (gethostname()) is unique across all the machines at the
- * "site".
- *
- * We also further assume that pids fit in 32-bits. If something uses more
- * than 32-bits, the fix is trivial, but it requires the unrolled uuencoding
- * loop to be extended. * A similar fix is needed to support multithreaded
- * servers, using a pid/tid combo.
- *
- * Together, the in_addr and pid are assumed to absolutely uniquely identify
- * this one child from all other currently running children on all servers
- * (including this physical server if it is running multiple httpds) from each
- * other.
- *
- * The stamp and counter are used to distinguish all hits for a particular
- * (in_addr,pid) pair. The stamp is updated using r->request_time,
- * saving cpu cycles. The counter is never reset, and is used to permit up to
- * 64k requests in a single second by a single child.
- *
- * The 112-bits of unique_id_rec are encoded using the alphabet
- * [A-Za-z0-9@-], resulting in 19 bytes of printable characters. That is then
- * stuffed into the environment variable UNIQUE_ID so that it is available to
- * other modules. The alphabet choice differs from normal base64 encoding
- * [A-Za-z0-9+/] because + and / are special characters in URLs and we want to
- * make it easy to use UNIQUE_ID in URLs.
- *
- * Note that UNIQUE_ID should be considered an opaque token by other
- * applications. No attempt should be made to dissect its internal components.
- * It is an abstraction that may change in the future as the needs of this
- * module change.
- *
- * It is highly desirable that identifiers exist for "eternity". But future
- * needs (such as much faster webservers, moving to 64-bit pids, or moving to a
- * multithreaded server) may dictate a need to change the contents of
- * unique_id_rec. Such a future implementation should ensure that the first
- * field is still a time_t stamp. By doing that, it is possible for a site to
- * have a "flag second" in which they stop all of their old-format servers,
- * wait one entire second, and then start all of their new-servers. This
- * procedure will ensure that the new space of identifiers is completely unique
- * from the old space. (Since the first four unencoded bytes always differ.)
- */
-/*
- * Sun Jun 7 05:43:49 CEST 1998 -- Alvaro
- * More comments:
- * 1) The UUencoding prodecure is now done in a general way, avoiding the problems
- * with sizes and paddings that can arise depending on the architecture. Now the
- * offsets and sizes of the elements of the unique_id_rec structure are calculated
- * in unique_id_global_init; and then used to duplicate the structure without the
- * paddings that might exist. The multithreaded server fix should be now very easy:
- * just add a new "tid" field to the unique_id_rec structure, and increase by one
- * UNIQUE_ID_REC_MAX.
- * 2) unique_id_rec.stamp has been changed from "time_t" to "unsigned int", because
- * its size is 64bits on some platforms (linux/alpha), and this caused problems with
- * htonl/ntohl. Well, this shouldn't be a problem till year 2106.
- */
-
-static unsigned global_in_addr;
-
-static unique_id_rec cur_unique_id;
-
-/*
- * Number of elements in the structure unique_id_rec.
- */
-#define UNIQUE_ID_REC_MAX 5
-
-static unsigned short unique_id_rec_offset[UNIQUE_ID_REC_MAX],
- unique_id_rec_size[UNIQUE_ID_REC_MAX],
- unique_id_rec_total_size,
- unique_id_rec_size_uu;
-
-static int unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
-{
- char str[APRMAXHOSTLEN + 1];
- apr_status_t rv;
- char *ipaddrstr;
- apr_sockaddr_t *sockaddr;
-
- /*
- * Calculate the sizes and offsets in cur_unique_id.
- */
- unique_id_rec_offset[0] = APR_OFFSETOF(unique_id_rec, stamp);
- unique_id_rec_size[0] = sizeof(cur_unique_id.stamp);
- unique_id_rec_offset[1] = APR_OFFSETOF(unique_id_rec, in_addr);
- unique_id_rec_size[1] = sizeof(cur_unique_id.in_addr);
- unique_id_rec_offset[2] = APR_OFFSETOF(unique_id_rec, pid);
- unique_id_rec_size[2] = sizeof(cur_unique_id.pid);
- unique_id_rec_offset[3] = APR_OFFSETOF(unique_id_rec, counter);
- unique_id_rec_size[3] = sizeof(cur_unique_id.counter);
- unique_id_rec_offset[4] = APR_OFFSETOF(unique_id_rec, thread_index);
- unique_id_rec_size[4] = sizeof(cur_unique_id.thread_index);
- unique_id_rec_total_size = unique_id_rec_size[0] + unique_id_rec_size[1] +
- unique_id_rec_size[2] + unique_id_rec_size[3] +
- unique_id_rec_size[4];
-
- /*
- * Calculate the size of the structure when encoded.
- */
- unique_id_rec_size_uu = (unique_id_rec_total_size*8+5)/6;
-
- /*
- * Now get the global in_addr. Note that it is not sufficient to use one
- * of the addresses from the main_server, since those aren't as likely to
- * be unique as the physical address of the machine
- */
- if ((rv = apr_gethostname(str, sizeof(str) - 1, p)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
- "mod_unique_id: unable to find hostname of the server");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if ((rv = apr_sockaddr_info_get(&sockaddr, str, AF_INET, 0, 0, p)) == APR_SUCCESS) {
- global_in_addr = sockaddr->sa.sin.sin_addr.s_addr;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
- "mod_unique_id: unable to find IPv4 address of \"%s\"", str);
-#if APR_HAVE_IPV6
- if ((rv = apr_sockaddr_info_get(&sockaddr, str, AF_INET6, 0, 0, p)) == APR_SUCCESS) {
- memcpy(&global_in_addr,
- (char *)sockaddr->ipaddr_ptr + sockaddr->ipaddr_len - sizeof(global_in_addr),
- sizeof(global_in_addr));
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
- "mod_unique_id: using low-order bits of IPv6 address "
- "as if they were unique");
- }
- else
-#endif
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- apr_sockaddr_ip_get(&ipaddrstr, sockaddr);
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, main_server,
- "mod_unique_id: using ip addr %s",
- ipaddrstr);
-
- /*
- * If the server is pummelled with restart requests we could possibly end
- * up in a situation where we're starting again during the same second
- * that has been used in previous identifiers. Avoid that situation.
- *
- * In truth, for this to actually happen not only would it have to restart
- * in the same second, but it would have to somehow get the same pids as
- * one of the other servers that was running in that second. Which would
- * mean a 64k wraparound on pids ... not very likely at all.
- *
- * But protecting against it is relatively cheap. We just sleep into the
- * next second.
- */
- apr_sleep(apr_time_from_sec(1) - apr_time_usec(apr_time_now()));
- return OK;
-}
-
-static void unique_id_child_init(apr_pool_t *p, server_rec *s)
-{
- pid_t pid;
- apr_time_t tv;
-
- /*
- * Note that we use the pid because it's possible that on the same
- * physical machine there are multiple servers (i.e. using Listen). But
- * it's guaranteed that none of them will share the same pids between
- * children.
- *
- * XXX: for multithread this needs to use a pid/tid combo and probably
- * needs to be expanded to 32 bits
- */
- pid = getpid();
- cur_unique_id.pid = pid;
-
- /*
- * Test our assumption that the pid is 32-bits. It's possible that
- * 64-bit machines will declare pid_t to be 64 bits but only use 32
- * of them. It would have been really nice to test this during
- * global_init ... but oh well.
- */
- if ((pid_t)cur_unique_id.pid != pid) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
- "oh no! pids are greater than 32-bits! I'm broken!");
- }
-
- cur_unique_id.in_addr = global_in_addr;
-
- /*
- * If we use 0 as the initial counter we have a little less protection
- * against restart problems, and a little less protection against a clock
- * going backwards in time.
- */
- tv = apr_time_now();
- /* Some systems have very low variance on the low end of their system
- * counter, defend against that.
- */
- cur_unique_id.counter = (unsigned short)(apr_time_usec(tv) / 10);
-
- /*
- * We must always use network ordering for these bytes, so that
- * identifiers are comparable between machines of different byte
- * orderings. Note in_addr is already in network order.
- */
- cur_unique_id.pid = htonl(cur_unique_id.pid);
- cur_unique_id.counter = htons(cur_unique_id.counter);
-}
-
-/* NOTE: This is *NOT* the same encoding used by base64encode ... the last two
- * characters should be + and /. But those two characters have very special
- * meanings in URLs, and we want to make it easy to use identifiers in
- * URLs. So we replace them with @ and -.
- */
-static const char uuencoder[64] = {
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '@', '-',
-};
-
-static int gen_unique_id(request_rec *r)
-{
- char *str;
- /*
- * Buffer padded with two final bytes, used to copy the unique_id_red
- * structure without the internal paddings that it could have.
- */
- unique_id_rec new_unique_id;
- struct {
- unique_id_rec foo;
- unsigned char pad[2];
- } paddedbuf;
- unsigned char *x,*y;
- unsigned short counter;
- const char *e;
- int i,j,k;
-
- /* copy the unique_id if this is an internal redirect (we're never
- * actually called for sub requests, so we don't need to test for
- * them) */
- if (r->prev && (e = apr_table_get(r->subprocess_env, "REDIRECT_UNIQUE_ID"))) {
- apr_table_setn(r->subprocess_env, "UNIQUE_ID", e);
- return DECLINED;
- }
-
- new_unique_id.in_addr = cur_unique_id.in_addr;
- new_unique_id.pid = cur_unique_id.pid;
- new_unique_id.counter = cur_unique_id.counter;
-
- new_unique_id.stamp = htonl((unsigned int)r->request_time);
- new_unique_id.thread_index = htonl((unsigned int)r->connection->id);
-
- /* we'll use a temporal buffer to avoid uuencoding the possible internal
- * paddings of the original structure */
- x = (unsigned char *) &paddedbuf;
- y = (unsigned char *) &new_unique_id;
- k = 0;
- for (i = 0; i < UNIQUE_ID_REC_MAX; i++) {
- y = ((unsigned char *) &new_unique_id) + unique_id_rec_offset[i];
- for (j = 0; j < unique_id_rec_size[i]; j++, k++) {
- x[k] = y[j];
- }
- }
- /*
- * We reset two more bytes just in case padding is needed for the uuencoding.
- */
- x[k++] = '\0';
- x[k++] = '\0';
-
- /* alloc str and do the uuencoding */
- str = (char *)apr_palloc(r->pool, unique_id_rec_size_uu + 1);
- k = 0;
- for (i = 0; i < unique_id_rec_total_size; i += 3) {
- y = x + i;
- str[k++] = uuencoder[y[0] >> 2];
- str[k++] = uuencoder[((y[0] & 0x03) << 4) | ((y[1] & 0xf0) >> 4)];
- if (k == unique_id_rec_size_uu) break;
- str[k++] = uuencoder[((y[1] & 0x0f) << 2) | ((y[2] & 0xc0) >> 6)];
- if (k == unique_id_rec_size_uu) break;
- str[k++] = uuencoder[y[2] & 0x3f];
- }
- str[k++] = '\0';
-
- /* set the environment variable */
- apr_table_setn(r->subprocess_env, "UNIQUE_ID", str);
-
- /* and increment the identifier for the next call */
-
- counter = ntohs(new_unique_id.counter) + 1;
- cur_unique_id.counter = htons(counter);
-
- return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_post_config(unique_id_global_init, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_child_init(unique_id_child_init, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_read_request(gen_unique_id, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA unique_id_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- NULL, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_unique_id.dsp b/modules/metadata/mod_unique_id.dsp
deleted file mode 100644
index c3838b5745..0000000000
--- a/modules/metadata/mod_unique_id.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_unique_id" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_unique_id - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_unique_id.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_unique_id.mak" CFG="mod_unique_id - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_unique_id - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_unique_id - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_unique_id - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_unique_id_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id.so
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_unique_id - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_unique_id_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id.so
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_unique_id - Win32 Release"
-# Name "mod_unique_id - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_unique_id.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_unique_id.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_unique_id - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_unique_id.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_unique_id.so "unique_id_module for Apache" ../../include/ap_release.h > .\mod_unique_id.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_unique_id - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_unique_id.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_unique_id.so "unique_id_module for Apache" ../../include/ap_release.h > .\mod_unique_id.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_unique_id.exp b/modules/metadata/mod_unique_id.exp
deleted file mode 100644
index 93000f1ee6..0000000000
--- a/modules/metadata/mod_unique_id.exp
+++ /dev/null
@@ -1 +0,0 @@
-unique_id_module
diff --git a/modules/metadata/mod_usertrack.c b/modules/metadata/mod_usertrack.c
deleted file mode 100644
index a707617997..0000000000
--- a/modules/metadata/mod_usertrack.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* User Tracking Module (Was mod_cookies.c)
- *
- * *** IMPORTANT NOTE: This module is not designed to generate
- * *** cryptographically secure cookies. This means you should not
- * *** use cookies generated by this module for authentication purposes
- *
- * This Apache module is designed to track users paths through a site.
- * It uses the client-side state ("Cookie") protocol developed by Netscape.
- * It is known to work on most browsers.
- *
- * Each time a page is requested we look to see if the browser is sending
- * us a Cookie: header that we previously generated.
- *
- * If we don't find one then the user hasn't been to this site since
- * starting their browser or their browser doesn't support cookies. So
- * we generate a unique Cookie for the transaction and send it back to
- * the browser (via a "Set-Cookie" header)
- * Future requests from the same browser should keep the same Cookie line.
- *
- * By matching up all the requests with the same cookie you can
- * work out exactly what path a user took through your site. To log
- * the cookie use the " %{Cookie}n " directive in a custom access log;
- *
- * Example 1 : If you currently use the standard Log file format (CLF)
- * and use the command "TransferLog somefilename", add the line
- * LogFormat "%h %l %u %t \"%r\" %s %b %{Cookie}n"
- * to your config file.
- *
- * Example 2 : If you used to use the old "CookieLog" directive, you
- * can emulate it by adding the following command to your config file
- * CustomLog filename "%{Cookie}n \"%r\" %t"
- *
- * Mark Cox, mjc@apache.org, 6 July 95
- *
- * This file replaces mod_cookies.c
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-
-
-module AP_MODULE_DECLARE_DATA usertrack_module;
-
-typedef struct {
- int always;
- int expires;
-} cookie_log_state;
-
-typedef enum {
- CT_UNSET,
- CT_NETSCAPE,
- CT_COOKIE,
- CT_COOKIE2
-} cookie_type_e;
-
-typedef struct {
- int enabled;
- cookie_type_e style;
- char *cookie_name;
- char *cookie_domain;
- char *regexp_string; /* used to compile regexp; save for debugging */
- regex_t *regexp; /* used to find usertrack cookie in cookie header */
-} cookie_dir_rec;
-
-/* Make Cookie: Now we have to generate something that is going to be
- * pretty unique. We can base it on the pid, time, hostip */
-
-#define COOKIE_NAME "Apache"
-
-static void make_cookie(request_rec *r)
-{
- cookie_log_state *cls = ap_get_module_config(r->server->module_config,
- &usertrack_module);
- /* 1024 == hardcoded constant */
- char cookiebuf[1024];
- char *new_cookie;
- const char *rname = ap_get_remote_host(r->connection, r->per_dir_config,
- REMOTE_NAME, NULL);
- cookie_dir_rec *dcfg;
-
- dcfg = ap_get_module_config(r->per_dir_config, &usertrack_module);
-
- /* XXX: hmm, this should really tie in with mod_unique_id */
- apr_snprintf(cookiebuf, sizeof(cookiebuf), "%s.%" APR_TIME_T_FMT, rname,
- apr_time_now());
-
- if (cls->expires) {
-
- /* Cookie with date; as strftime '%a, %d-%h-%y %H:%M:%S GMT' */
- new_cookie = apr_psprintf(r->pool, "%s=%s; path=/",
- dcfg->cookie_name, cookiebuf);
-
- if ((dcfg->style == CT_UNSET) || (dcfg->style == CT_NETSCAPE)) {
- apr_time_exp_t tms;
- apr_time_exp_gmt(&tms, r->request_time
- + apr_time_from_sec(cls->expires));
- new_cookie = apr_psprintf(r->pool,
- "%s; expires=%s, "
- "%.2d-%s-%.2d %.2d:%.2d:%.2d GMT",
- new_cookie, apr_day_snames[tms.tm_wday],
- tms.tm_mday,
- apr_month_snames[tms.tm_mon],
- tms.tm_year % 100,
- tms.tm_hour, tms.tm_min, tms.tm_sec);
- }
- else {
- new_cookie = apr_psprintf(r->pool, "%s; max-age=%d",
- new_cookie, cls->expires);
- }
- }
- else {
- new_cookie = apr_psprintf(r->pool, "%s=%s; path=/",
- dcfg->cookie_name, cookiebuf);
- }
- if (dcfg->cookie_domain != NULL) {
- new_cookie = apr_pstrcat(r->pool, new_cookie, "; domain=",
- dcfg->cookie_domain,
- (dcfg->style == CT_COOKIE2
- ? "; version=1"
- : ""),
- NULL);
- }
-
- apr_table_addn(r->headers_out,
- (dcfg->style == CT_COOKIE2 ? "Set-Cookie2" : "Set-Cookie"),
- new_cookie);
- apr_table_setn(r->notes, "cookie", apr_pstrdup(r->pool, cookiebuf)); /* log first time */
- return;
-}
-
-/* dcfg->regexp is "^cookie_name=([^;]+)|;[ \t]+cookie_name=([^;]+)",
- * which has three subexpressions, $0..$2 */
-#define NUM_SUBS 3
-
-static void set_and_comp_regexp(cookie_dir_rec *dcfg,
- apr_pool_t *p,
- const char *cookie_name)
-{
- int danger_chars = 0;
- const char *sp = cookie_name;
-
- /* The goal is to end up with this regexp,
- * ^cookie_name=([^;,]+)|[;,][ \t]+cookie_name=([^;,]+)
- * with cookie_name obviously substituted either
- * with the real cookie name set by the user in httpd.conf, or with the
- * default COOKIE_NAME. */
-
- /* Anyway, we need to escape the cookie_name before pasting it
- * into the regex
- */
- while (*sp) {
- if (!apr_isalnum(*sp)) {
- ++danger_chars;
- }
- ++sp;
- }
-
- if (danger_chars) {
- char *cp;
- cp = apr_palloc(p, sp - cookie_name + danger_chars + 1); /* 1 == \0 */
- sp = cookie_name;
- cookie_name = cp;
- while (*sp) {
- if (!apr_isalnum(*sp)) {
- *cp++ = '\\';
- }
- *cp++ = *sp++;
- }
- *cp = '\0';
- }
-
- dcfg->regexp_string = apr_pstrcat(p, "^",
- cookie_name,
- "=([^;,]+)|[;,][ \t]*",
- cookie_name,
- "=([^;,]+)", NULL);
-
- dcfg->regexp = ap_pregcomp(p, dcfg->regexp_string, REG_EXTENDED);
- ap_assert(dcfg->regexp != NULL);
-}
-
-static int spot_cookie(request_rec *r)
-{
- cookie_dir_rec *dcfg = ap_get_module_config(r->per_dir_config,
- &usertrack_module);
- const char *cookie_header;
- regmatch_t regm[NUM_SUBS];
-
- /* Do not run in subrequests */
- if (!dcfg->enabled || r->main) {
- return DECLINED;
- }
-
- if ((cookie_header = apr_table_get(r->headers_in, "Cookie"))) {
- if (!ap_regexec(dcfg->regexp, cookie_header, NUM_SUBS, regm, 0)) {
- char *cookieval = NULL;
- /* Our regexp,
- * ^cookie_name=([^;]+)|;[ \t]+cookie_name=([^;]+)
- * only allows for $1 or $2 to be available. ($0 is always
- * filled with the entire matched expression, not just
- * the part in parentheses.) So just check for either one
- * and assign to cookieval if present. */
- if (regm[1].rm_so != -1) {
- cookieval = ap_pregsub(r->pool, "$1", cookie_header,
- NUM_SUBS, regm);
- }
- if (regm[2].rm_so != -1) {
- cookieval = ap_pregsub(r->pool, "$2", cookie_header,
- NUM_SUBS, regm);
- }
- /* Set the cookie in a note, for logging */
- apr_table_setn(r->notes, "cookie", cookieval);
-
- return DECLINED; /* There's already a cookie, no new one */
- }
- }
- make_cookie(r);
- return OK; /* We set our cookie */
-}
-
-static void *make_cookie_log_state(apr_pool_t *p, server_rec *s)
-{
- cookie_log_state *cls =
- (cookie_log_state *) apr_palloc(p, sizeof(cookie_log_state));
-
- cls->expires = 0;
-
- return (void *) cls;
-}
-
-static void *make_cookie_dir(apr_pool_t *p, char *d)
-{
- cookie_dir_rec *dcfg;
-
- dcfg = (cookie_dir_rec *) apr_pcalloc(p, sizeof(cookie_dir_rec));
- dcfg->cookie_name = COOKIE_NAME;
- dcfg->cookie_domain = NULL;
- dcfg->style = CT_UNSET;
- dcfg->enabled = 0;
-
- /* In case the user does not use the CookieName directive,
- * we need to compile the regexp for the default cookie name. */
- set_and_comp_regexp(dcfg, p, COOKIE_NAME);
-
- return dcfg;
-}
-
-static const char *set_cookie_enable(cmd_parms *cmd, void *mconfig, int arg)
-{
- cookie_dir_rec *dcfg = mconfig;
-
- dcfg->enabled = arg;
- return NULL;
-}
-
-static const char *set_cookie_exp(cmd_parms *parms, void *dummy,
- const char *arg)
-{
- cookie_log_state *cls;
- time_t factor, modifier = 0;
- time_t num = 0;
- char *word;
-
- cls = ap_get_module_config(parms->server->module_config,
- &usertrack_module);
- /* The simple case first - all numbers (we assume) */
- if (apr_isdigit(arg[0]) && apr_isdigit(arg[strlen(arg) - 1])) {
- cls->expires = atol(arg);
- return NULL;
- }
-
- /*
- * The harder case - stolen from mod_expires
- *
- * CookieExpires "[plus] {<num> <type>}*"
- */
-
- word = ap_getword_conf(parms->pool, &arg);
- if (!strncasecmp(word, "plus", 1)) {
- word = ap_getword_conf(parms->pool, &arg);
- };
-
- /* {<num> <type>}* */
- while (word[0]) {
- /* <num> */
- if (apr_isdigit(word[0]))
- num = atoi(word);
- else
- return "bad expires code, numeric value expected.";
-
- /* <type> */
- word = ap_getword_conf(parms->pool, &arg);
- if (!word[0])
- return "bad expires code, missing <type>";
-
- factor = 0;
- if (!strncasecmp(word, "years", 1))
- factor = 60 * 60 * 24 * 365;
- else if (!strncasecmp(word, "months", 2))
- factor = 60 * 60 * 24 * 30;
- else if (!strncasecmp(word, "weeks", 1))
- factor = 60 * 60 * 24 * 7;
- else if (!strncasecmp(word, "days", 1))
- factor = 60 * 60 * 24;
- else if (!strncasecmp(word, "hours", 1))
- factor = 60 * 60;
- else if (!strncasecmp(word, "minutes", 2))
- factor = 60;
- else if (!strncasecmp(word, "seconds", 1))
- factor = 1;
- else
- return "bad expires code, unrecognized type";
-
- modifier = modifier + factor * num;
-
- /* next <num> */
- word = ap_getword_conf(parms->pool, &arg);
- }
-
- cls->expires = modifier;
-
- return NULL;
-}
-
-static const char *set_cookie_name(cmd_parms *cmd, void *mconfig,
- const char *name)
-{
- cookie_dir_rec *dcfg = (cookie_dir_rec *) mconfig;
-
- dcfg->cookie_name = apr_pstrdup(cmd->pool, name);
-
- set_and_comp_regexp(dcfg, cmd->pool, name);
-
- if (dcfg->regexp == NULL) {
- return "Regular expression could not be compiled.";
- }
- if (dcfg->regexp->re_nsub + 1 != NUM_SUBS) {
- return apr_pstrcat(cmd->pool, "Invalid cookie name \"",
- name, "\"", NULL);
- }
-
- return NULL;
-}
-
-/*
- * Set the value for the 'Domain=' attribute.
- */
-static const char *set_cookie_domain(cmd_parms *cmd, void *mconfig,
- const char *name)
-{
- cookie_dir_rec *dcfg;
-
- dcfg = (cookie_dir_rec *) mconfig;
-
- /*
- * Apply the restrictions on cookie domain attributes.
- */
- if (strlen(name) == 0) {
- return "CookieDomain values may not be null";
- }
- if (name[0] != '.') {
- return "CookieDomain values must begin with a dot";
- }
- if (ap_strchr_c(&name[1], '.') == NULL) {
- return "CookieDomain values must contain at least one embedded dot";
- }
-
- dcfg->cookie_domain = apr_pstrdup(cmd->pool, name);
- return NULL;
-}
-
-/*
- * Make a note of the cookie style we should use.
- */
-static const char *set_cookie_style(cmd_parms *cmd, void *mconfig,
- const char *name)
-{
- cookie_dir_rec *dcfg;
-
- dcfg = (cookie_dir_rec *) mconfig;
-
- if (strcasecmp(name, "Netscape") == 0) {
- dcfg->style = CT_NETSCAPE;
- }
- else if ((strcasecmp(name, "Cookie") == 0)
- || (strcasecmp(name, "RFC2109") == 0)) {
- dcfg->style = CT_COOKIE;
- }
- else if ((strcasecmp(name, "Cookie2") == 0)
- || (strcasecmp(name, "RFC2965") == 0)) {
- dcfg->style = CT_COOKIE2;
- }
- else {
- return apr_psprintf(cmd->pool, "Invalid %s keyword: '%s'",
- cmd->cmd->name, name);
- }
-
- return NULL;
-}
-
-static const command_rec cookie_log_cmds[] = {
- AP_INIT_TAKE1("CookieExpires", set_cookie_exp, NULL, OR_FILEINFO,
- "an expiry date code"),
- AP_INIT_TAKE1("CookieDomain", set_cookie_domain, NULL, OR_FILEINFO,
- "domain to which this cookie applies"),
- AP_INIT_TAKE1("CookieStyle", set_cookie_style, NULL, OR_FILEINFO,
- "'Netscape', 'Cookie' (RFC2109), or 'Cookie2' (RFC2965)"),
- AP_INIT_FLAG("CookieTracking", set_cookie_enable, NULL, OR_FILEINFO,
- "whether or not to enable cookies"),
- AP_INIT_TAKE1("CookieName", set_cookie_name, NULL, OR_FILEINFO,
- "name of the tracking cookie"),
- {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(spot_cookie,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA usertrack_module = {
- STANDARD20_MODULE_STUFF,
- make_cookie_dir, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- make_cookie_log_state, /* server config */
- NULL, /* merge server configs */
- cookie_log_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
diff --git a/modules/metadata/mod_usertrack.dsp b/modules/metadata/mod_usertrack.dsp
deleted file mode 100644
index a5f75dc1df..0000000000
--- a/modules/metadata/mod_usertrack.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_usertrack" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_usertrack - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_usertrack.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_usertrack.mak" CFG="mod_usertrack - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_usertrack - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_usertrack - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_usertrack - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_usertrack_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_usertrack - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_usertrack_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_usertrack - Win32 Release"
-# Name "mod_usertrack - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_usertrack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_usertrack.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_usertrack - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_usertrack.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_usertrack.so "usertrack_module for Apache" ../../include/ap_release.h > .\mod_usertrack.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_usertrack - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_usertrack.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_usertrack.so "usertrack_module for Apache" ../../include/ap_release.h > .\mod_usertrack.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_usertrack.exp b/modules/metadata/mod_usertrack.exp
deleted file mode 100644
index 234a5f759d..0000000000
--- a/modules/metadata/mod_usertrack.exp
+++ /dev/null
@@ -1 +0,0 @@
-usertrack_module
diff --git a/modules/metadata/mod_version.c b/modules/metadata/mod_version.c
deleted file mode 100644
index e4ade983ca..0000000000
--- a/modules/metadata/mod_version.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/* Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_version.c
- * Allow conditional configuration depending on the httpd version
- *
- * André Malo (nd/perlig.de), January 2004
- *
- * Some stuff coded here is heavily based on the core <IfModule>
- * containers.
- *
- * The module makes the following confgurations possible:
- *
- * <IfVersion op major.minor.patch>
- * # conditional config here ...
- *</IfVersion>
- *
- * where "op" is one of:
- * = / == equal
- * > greater than
- * >= greater or equal
- * < less than
- * <= less or equal
- *
- * If minor version and patch level are omitted they are assumed to be 0.
- *
- * Alternatively you can match the whole version (including some vendor-added
- * string of the CORE version, see ap_release.h) against a regular expression:
- *
- * <IfVersion op regex>
- * # conditional config here ...
- *</IfVersion>
- *
- * where "op" is one of:
- * = / == match; regex must be surrounded by slashes
- * ~ match; regex MAY NOT be surrounded by slashes
- *
- * Note that all operators may be preceeded by an exclamation mark
- * (without spaces) in order to reverse their meaning.
- *
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-
-
-/* module structure */
-module AP_MODULE_DECLARE_DATA version_module;
-
-/* queried httpd version */
-static ap_version_t httpd_version;
-
-
-/*
- * compare the supplied version with the core one
- */
-static int compare_version(char *version_string, const char **error)
-{
- char *p = version_string, *ep;
- int version[3] = {0, 0, 0};
- int c = 0;
-
- *error = "Version appears to be invalid. It must have the format "
- "major[.minor[.patch]] where major, minor and patch are "
- "numbers.";
-
- if (!apr_isdigit(*p)) {
- return 0;
- }
-
- /* parse supplied version */
- ep = version_string + strlen(version_string);
- while (p <= ep && c < 3) {
- if (*p == '.') {
- *p = '\0';
- }
-
- if (!*p) {
- version[c++] = atoi(version_string);
- version_string = ++p;
- continue;
- }
-
- if (!apr_isdigit(*p)) {
- break;
- }
-
- ++p;
- }
-
- if (p < ep) { /* syntax error */
- return 0;
- }
-
- *error = NULL;
-
- if (httpd_version.major > version[0]) {
- return 1;
- }
- else if (httpd_version.major < version[0]) {
- return -1;
- }
- else if (httpd_version.minor > version[1]) {
- return 1;
- }
- else if (httpd_version.minor < version[1]) {
- return -1;
- }
- else if (httpd_version.patch > version[2]) {
- return 1;
- }
- else if (httpd_version.patch < version[2]) {
- return -1;
- }
-
- /* seems to be the same */
- return 0;
-}
-
-/*
- * match version against a regular expression
- */
-static int match_version(apr_pool_t *pool, char *version_string,
- const char **error)
-{
- regex_t *compiled;
- const char *to_match;
- int rc;
-
- compiled = ap_pregcomp(pool, version_string, REG_EXTENDED);
- if (!compiled) {
- *error = "Unable to compile regular expression";
- return 0;
- }
-
- *error = NULL;
-
- to_match = apr_psprintf(pool, "%d.%d.%d%s",
- httpd_version.major,
- httpd_version.minor,
- httpd_version.patch,
- httpd_version.add_string);
-
- rc = !ap_regexec(compiled, to_match, 0, NULL, 0);
-
- ap_pregfree(pool, compiled);
- return rc;
-}
-
-/*
- * Implements the <IfVersion> container
- */
-static const char *start_ifversion(cmd_parms *cmd, void *mconfig,
- const char *arg1, const char *arg2,
- const char *arg3)
-{
- const char *endp;
- int reverse = 0, done = 0, match = 0, compare;
- const char *p, *error;
- char c;
-
- /* supplying one argument is possible, we assume an equality check then */
- if (!arg2) {
- arg2 = arg1;
- arg1 = "=";
- }
-
- /* surrounding quotes without operator */
- if (!arg3 && *arg2 == '>' && !arg2[1]) {
- arg3 = ">";
- arg2 = arg1;
- arg1 = "=";
- }
-
- /* the third argument makes version surrounding quotes plus operator
- * possible.
- */
- endp = arg2 + strlen(arg2);
- if ( endp == arg2
- || (!(arg3 && *arg3 == '>' && !arg3[1]) && *--endp != '>')) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name,
- "> directive missing closing '>'", NULL);
- }
-
- p = arg1;
- if (*p == '!') {
- reverse = 1;
- if (p[1]) {
- ++p;
- }
- }
-
- c = *p++;
- if (!*p || (*p == '=' && !p[1] && c != '~')) {
- if (!httpd_version.major) {
- ap_get_server_revision(&httpd_version);
- }
-
- done = 1;
- switch (c) {
- case '=':
- /* normal comparison */
- if (*arg2 != '/') {
- compare = compare_version(apr_pstrmemdup(cmd->pool, arg2,
- endp-arg2),
- &error);
- if (error) {
- return error;
- }
-
- match = !compare;
- break;
- }
-
- /* regexp otherwise */
- if (endp == ++arg2 || *--endp != '/') {
- return "Missing delimiting / of regular expression.";
- }
-
- case '~':
- /* regular expression */
- match = match_version(cmd->pool, apr_pstrmemdup(cmd->pool, arg2,
- endp-arg2),
- &error);
- if (error) {
- return error;
- }
- break;
-
- case '<':
- compare = compare_version(apr_pstrmemdup(cmd->pool, arg2,
- endp-arg2),
- &error);
- if (error) {
- return error;
- }
-
- match = ((-1 == compare) || (*p && !compare));
- break;
-
- case '>':
- compare = compare_version(apr_pstrmemdup(cmd->pool, arg2,
- endp-arg2),
- &error);
- if (error) {
- return error;
- }
-
- match = ((1 == compare) || (*p && !compare));
- break;
-
- default:
- done = 0;
- break;
- }
- }
-
- if (!done) {
- return apr_pstrcat(cmd->pool, "unrecognized operator '", arg1, "'",
- NULL);
- }
-
- if ((!reverse && match) || (reverse && !match)) {
- ap_directive_t *parent = NULL;
- ap_directive_t *current = NULL;
- const char *retval;
-
- retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
- &current, &parent, "<IfVersion");
- *(ap_directive_t **)mconfig = current;
- return retval;
- }
-
- *(ap_directive_t **)mconfig = NULL;
- return ap_soak_end_container(cmd, "<IfVersion");
-}
-
-static const command_rec version_cmds[] = {
- AP_INIT_TAKE123("<IfVersion", start_ifversion, NULL, EXEC_ON_READ | OR_ALL,
- "a comparison operator, a version (and a delimiter)"),
- { NULL }
-};
-
-module AP_MODULE_DECLARE_DATA version_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- version_cmds, /* command apr_table_t */
- NULL, /* register hooks */
-};
diff --git a/modules/metadata/mod_version.dsp b/modules/metadata/mod_version.dsp
deleted file mode 100644
index 9b4a9bbce1..0000000000
--- a/modules/metadata/mod_version.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_version" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_version - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_version.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_version.mak" CFG="mod_version - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_version - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_version - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_version - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_version_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_version - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_version_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_version.so" /base:@..\..\os\win32\BaseAddr.ref,mod_version.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_version - Win32 Release"
-# Name "mod_version - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_version.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_version.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_version - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_version.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_version.so "version_module for Apache" ../../include/ap_release.h > .\mod_version.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_version - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_version.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_version.so "version_module for Apache" ../../include/ap_release.h > .\mod_version.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_version.exp b/modules/metadata/mod_version.exp
deleted file mode 100644
index 3dce845626..0000000000
--- a/modules/metadata/mod_version.exp
+++ /dev/null
@@ -1 +0,0 @@
-version_module
diff --git a/modules/ssl/.cvsignore b/modules/ssl/.cvsignore
deleted file mode 100644
index 22b7c7c8b8..0000000000
--- a/modules/ssl/.cvsignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.libs
-.deps
-Makefile
-modules.mk
-*.lo
-*.slo
-*.la
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
-*.x
diff --git a/modules/ssl/Makefile.in b/modules/ssl/Makefile.in
deleted file mode 100644
index 836ad3e5a5..0000000000
--- a/modules/ssl/Makefile.in
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#
-# standard stuff
-#
-
-include $(top_srcdir)/build/special.mk
-
-#
-# developer stuff
-# (we really don't expect end users to use these targets!)
-#
-
-ssl_expr_scan.c: $(top_srcdir)/modules/ssl/ssl_expr_scan.l ssl_expr_parse.h
- flex -Pssl_expr_yy -s -B $(top_srcdir)/modules/ssl/ssl_expr_scan.l
- sed -e '/$$Header:/d' <lex.ssl_expr_yy.c >ssl_expr_scan.c && rm -f lex.ssl_expr_yy.c
-
-ssl_expr_parse.c ssl_expr_parse.h: $(top_srcdir)/modules/ssl/ssl_expr_parse.y
- yacc -d $(top_srcdir)/modules/ssl/ssl_expr_parse.y
- sed -e 's;yy;ssl_expr_yy;g' \
- -e '/#if defined(c_plusplus) || defined(__cplusplus)/,/#endif/d' \
- <y.tab.c >ssl_expr_parse.c && rm -f y.tab.c
- sed -e 's;yy;ssl_expr_yy;g' \
- <y.tab.h >ssl_expr_parse.h && rm -f y.tab.h
-
diff --git a/modules/ssl/README b/modules/ssl/README
deleted file mode 100644
index 5f9421cf50..0000000000
--- a/modules/ssl/README
+++ /dev/null
@@ -1,107 +0,0 @@
-SYNOPSIS
-
- This Apache module provides strong cryptography for the Apache 2 webserver
- via the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS
- v1) protocols by the help of the SSL/TLS implementation library OpenSSL which
- is based on SSLeay from Eric A. Young and Tim J. Hudson.
-
- The mod_ssl package was created in April 1998 by Ralf S. Engelschall
- and was originally derived from software developed by Ben Laurie for
- use in the Apache-SSL HTTP server project. The mod_ssl implementation
- for Apache 1.3 continues to be supported by the modssl project
- <http://www.modssl.org/>.
-
-SOURCES
-
- See the top-level LAYOUT file in httpd-2.1 for file descriptions.
-
- The source files are written in clean ANSI C and pass the ``gcc -O -g
- -ggdb3 -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes
- -Wmissing-declarations -Wnested-externs -Winline'' compiler test
- (assuming `gcc' is GCC 2.95.2 or newer) without any complains. When
- you make changes or additions make sure the source still passes this
- compiler test.
-
-FUNCTIONS
-
- Inside the source code you will be confronted with the following types of
- functions which can be identified by their prefixes:
-
- ap_xxxx() ............... Apache API function
- ssl_xxxx() .............. mod_ssl function
- SSL_xxxx() .............. OpenSSL function (SSL library)
- OpenSSL_xxxx() .......... OpenSSL function (SSL library)
- X509_xxxx() ............. OpenSSL function (Crypto library)
- PEM_xxxx() .............. OpenSSL function (Crypto library)
- EVP_xxxx() .............. OpenSSL function (Crypto library)
- RSA_xxxx() .............. OpenSSL function (Crypto library)
-
-DATA STRUCTURES
-
- Inside the source code you will be confronted with the following
- data structures:
-
- server_rec .............. Apache (Virtual) Server
- conn_rec ................ Apache Connection
- request_rec ............. Apache Request
- SSLModConfig ............ mod_ssl (Global) Module Configuration
- SSLSrvConfig ............ mod_ssl (Virtual) Server Configuration
- SSLDirConfig ............ mod_ssl Directory Configuration
- SSLConnConfig ........... mod_ssl Connection Configuration
- SSLFilterRec ............ mod_ssl Filter Context
- SSL_CTX ................. OpenSSL Context
- SSL_METHOD .............. OpenSSL Protocol Method
- SSL_CIPHER .............. OpenSSL Cipher
- SSL_SESSION ............. OpenSSL Session
- SSL ..................... OpenSSL Connection
- BIO ..................... OpenSSL Connection Buffer
-
- For an overview how these are related and chained together have a look at the
- page in README.dsov.{fig,ps}. It contains overview diagrams for those data
- structures. It's designed for DIN A4 paper size, but you can easily generate
- a smaller version inside XFig by specifing a magnification on the Export
- panel.
-
-INCOMPATIBILITIES
-
- The following intentional incompatibilities exist between mod_ssl 2.x
- from Apache 1.3 and this mod_ssl version for Apache 2:
-
- o The complete EAPI-based SSL_VENDOR stuff was removed.
- o The complete EAPI-based SSL_COMPAT stuff was removed.
- o The <IfDefine> variable MOD_SSL is no longer provided automatically
-
-MAJOR CHANGES
-
- For a complete history of changes for Apache 2 mod_ssl, see the
- CHANGES file in the top-level httpd-2.1 directory. The following
- is a condensed summary of the major changes were made between
- mod_ssl 2.x from Apache 1.3 and this mod_ssl version for Apache 2:
-
- o The DBM based session cache is now based on APR's DBM API only.
- o The shared memory based session cache is now based on APR's APIs.
- o SSL I/O is now implemented in terms of filters rather than BUFF
- o Eliminated ap_global_ctx. Storing Persistant information in
- process_rec->pool->user_data. The ssl_pphrase_Handle_CB() and
- ssl_config_global_* () functions have an extra parameter now -
- "server_rec *" - which is used to retrieve the SSLModConfigRec.
- o Properly support restarts, allowing mod_ssl to be added to a server
- that is already running and to change server certs/keys on restart
- o Various performance enhancements
- o proxy support is no longer an "extension", much of the mod_ssl core
- was re-written (ssl_engine_{init,kernel,config}.c) to be generic so
- it could be re-used in proxy mode.
- - the optional function ssl_proxy_enable is provide for mod_proxy
- to enable proxy support
- - proxy support now requires 'SSLProxyEngine on' to be configured
- - proxy now supports SSLProxyCARevocation{Path,File} in addition to
- the original SSLProxy* directives
- o per-directory SSLCACertificate{File,Path} is now thread-safe but
- requires SSL_set_cert_store patch to OpenSSL
- o RSA sslc is supported via ssl_toolkit_compat.h
- o the ssl_engine_{ds,ext}.c source files are obsolete and no longer
- exist
-
-TODO
-
- See the top-level STATUS file in httpd-2.1 for current efforts and goals.
diff --git a/modules/ssl/README.dsov.fig b/modules/ssl/README.dsov.fig
deleted file mode 100644
index d8d03db247..0000000000
--- a/modules/ssl/README.dsov.fig
+++ /dev/null
@@ -1,346 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Metric
-Letter
-100.00
-Single
--2
-1200 2
-0 32 #616561
-0 33 #b6b2b6
-0 34 #f7f3f7
-0 35 #cfcfcf
-0 36 #ffffff
-6 6345 2835 7155 3150
-6 6345 2970 7110 3150
-4 0 0 200 0 20 8 0.0000 4 120 585 6345 3105 "ssl_module")\001
--6
-4 0 0 200 0 20 8 0.0000 4 120 660 6345 2970 ap_ctx_get(...,\001
--6
-6 10800 2610 12240 3060
-4 0 0 200 0 20 8 0.0000 4 120 1170 10800 2745 ap_get_module_config(...\001
-4 0 0 200 0 20 8 0.0000 4 120 795 10800 2880 ->per_dir_config,\001
-4 0 0 200 0 20 8 0.0000 4 120 585 10800 3015 &ssl_module)\001
--6
-6 7920 4770 9135 4995
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 9135 4995 7920 4995 7920 4770 9135 4770 9135 4995
-4 0 0 100 0 18 12 0.0000 4 180 1065 8010 4950 request_rec\001
--6
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 6975 3330 7425 2520
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 7200 4230 9450 2520
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 7875 4905 7200 5220
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 6750 5130 6750 4545
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 6705 5445 7155 6120
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 7875 4815 7200 4590
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 9585 2565 11475 4230
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 10170 5130 11835 4545
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 7920 6075 9855 5400
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 9990 5445 10935 5625
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 10215 5310 10935 5310
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 11925 4590 11925 5085
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 9810 5490 9810 6840
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 9945 5445 10935 6030
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 8865 4725 10800 2565
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 675 6075 5850 6075
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 675 6525 675 6075
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 5850 6075 5850 6525
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 900 5625 5625 5625
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 1125 5175 5400 5175
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 1350 4725 5175 4725
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 1575 4275 4950 4275
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 1800 3825 4725 3825
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 2025 3375 4500 3375
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 2250 2925 4275 2925
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 2475 2475 4050 2475
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 2700 2025 3825 2025
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
- 2925 1575 3600 1575
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 900 6075 900 5625
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 1125 6525 1125 5175
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 1350 5175 1350 4725
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 1575 4725 1575 4275
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 1800 6525 1800 3825
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 2025 3825 2025 3375
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 2250 3375 2250 2925
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 2475 2925 2475 2475
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 5625 5625 5625 6075
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 5400 5175 5400 6525
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 5175 4725 5175 5175
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 4950 4275 4950 4725
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 4725 3825 4725 6525
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 4500 3375 4500 3825
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 4275 2925 4275 3375
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 4050 2475 4050 2925
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 2700 6525 2700 2025
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 3825 2025 3825 6525
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 0 1.00 60.00 120.00
- 3600 1575 3600 2025
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 2925 2025 2925 1575
-2 1 0 4 0 0 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 4.00 60.00 120.00
- 540 6525 6300 6525
-2 3 0 1 7 7 800 0 20 0.000 0 0 -1 0 0 9
- 675 6525 5850 6525 5850 6075 5625 6075 5625 5625 900 5625
- 900 6075 675 6075 675 6525
-2 3 0 1 34 34 700 0 20 0.000 0 0 -1 0 0 13
- 1125 6525 5355 6525 5400 5175 5175 5175 5175 4725 4950 4725
- 4950 4275 1575 4275 1575 4725 1350 4725 1350 5175 1125 5175
- 1125 6525
-2 3 0 1 35 35 500 0 20 0.000 0 0 -1 0 0 17
- 1800 6525 4725 6525 4725 3825 4500 3825 4500 3375 4275 3375
- 4275 2925 4050 2925 4050 2475 2475 2475 2475 2925 2250 2925
- 2250 3375 2025 3375 2025 3825 1800 3825 1800 6525
-2 3 0 1 33 33 400 0 20 0.000 0 0 -1 0 0 9
- 2700 6525 3825 6525 3825 2025 3600 2025 3600 1575 2925 1575
- 2925 2025 2700 2025 2700 6525
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
- 2 0 1.00 60.00 120.00
- 2 0 1.00 60.00 120.00
- 2700 6750 3825 6750
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
- 2 0 1.00 60.00 120.00
- 2 0 1.00 60.00 120.00
- 1125 7200 5400 7200
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
- 2 0 1.00 60.00 120.00
- 2 0 1.00 60.00 120.00
- 1800 6975 4725 6975
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
- 2 0 1.00 60.00 120.00
- 2 0 1.00 60.00 120.00
- 675 7425 5850 7425
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 675 6570 675 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 1125 6570 1125 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 1800 6570 1800 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 2700 6570 2700 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 3825 6570 3825 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 4725 6570 4725 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 5400 6570 5400 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
- 5850 6570 5850 7650
-2 4 0 2 0 7 100 0 -1 0.000 0 0 20 0 0 5
- 12600 8550 450 8550 450 225 12600 225 12600 8550
-2 4 0 1 0 34 200 0 20 0.000 0 0 20 0 0 5
- 12600 1350 450 1350 450 225 12600 225 12600 1350
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 10170 2475 8775 2475 8775 2250 10170 2250 10170 2475
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 11925 2475 10575 2475 10575 2250 11925 2250 11925 2475
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 12375 4500 11430 4500 11430 4275 12375 4275 12375 4500
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 12375 5400 10980 5400 10980 5175 12375 5175 12375 5400
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 10170 5400 9675 5400 9675 5175 10170 5175 10170 5400
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 7875 6300 7200 6300 7200 6075 7875 6075 7875 6300
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 8190 2475 6750 2475 6750 2250 8190 2250 8190 2475
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 7605 3600 6300 3600 6300 3375 7605 3375 7605 3600
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 7335 4500 6300 4500 6300 4275 7335 4275 7335 4500
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 7200 5400 6300 5400 6300 5175 7200 5175 7200 5400
-2 1 0 6 7 7 600 0 -1 0.000 0 0 -1 0 0 2
- 9450 4500 6075 1935
-2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2
- 9450 4500 12465 2205
-2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2
- 9450 4500 9450 7785
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 9630 5310 7245 5310
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 11385 4365 7380 4365
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 12240 5805 10980 5805 10980 5580 12240 5580 12240 5805
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 12375 6210 10980 6210 10980 5985 12375 5985 12375 6210
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 11205 6885 9900 5445
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 12285 7155 10530 7155 10530 6930 12285 6930 12285 7155
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
- 10170 7155 9630 7155 9630 6930 10170 6930 10170 7155
-2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2
- 12510 6435 9450 6435
-2 1 0 1 0 34 300 0 20 0.000 0 0 7 1 0 4
- 1 1 1.00 60.00 120.00
- 12375 4455 12510 4635 12510 6210 11970 6885
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 9850 5143 9175 4918
-3 1 0 1 34 34 800 0 20 0.000 0 0 0 41
- 7380 1710 6390 2115 5535 2115 6075 3015 5670 3465 6165 3915
- 5715 4410 6030 5040 6030 5310 6480 5715 6390 6255 6975 6300
- 7065 6975 7965 6750 8100 7560 8955 7290 9360 7740 9720 7560
- 10755 8145 12060 8280 12375 7650 12420 7200 12510 7065 12330 6660
- 12510 6390 12420 5940 12375 5400 12510 5220 12510 4725 12600 4275
- 12375 3645 12105 3240 12150 2745 12375 2700 12330 1980 11790 1575
- 11250 1935 10125 1485 8955 2070 7785 1620 7695 1575
- 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
- 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
- 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
- 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
- 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
- 1.000
-4 0 0 100 0 0 12 0.0000 4 180 1440 10575 675 Ralf S. Engelschall\001
-4 0 0 100 0 18 20 0.0000 4 270 3840 4275 675 Apache+mod_ssl+OpenSSL\001
-4 0 0 100 0 0 10 0.0000 4 135 1320 10575 855 rse@engelschall.com\001
-4 0 0 100 0 0 10 0.0000 4 135 1410 10575 1035 www.engelschall.com\001
-4 0 0 100 0 0 12 0.0000 4 135 870 900 675 Version 1.3\001
-4 0 0 100 0 0 12 0.0000 4 180 1035 900 855 12-Apr-1999\001
-4 0 0 200 0 20 8 0.0000 4 60 390 6210 4680 ->server\001
-4 0 0 200 0 20 8 0.0000 4 120 855 8280 6120 ap_ctx_get(...,"ssl")\001
-4 0 0 200 0 20 8 0.0000 4 120 1170 7740 2700 ap_get_module_config(...\001
-4 0 0 200 0 20 8 0.0000 4 120 810 7740 2835 ->module_config,\001
-4 0 0 200 0 20 8 0.0000 4 120 585 7740 2970 &ssl_module)\001
-4 0 0 100 0 18 20 0.0000 4 270 1200 9000 8100 Chaining\001
-4 0 0 100 0 18 20 0.0000 4 210 1095 2745 8100 Lifetime\001
-4 0 0 100 0 18 12 0.0000 4 180 1215 810 6255 ap_global_ctx\001
-4 0 0 100 0 18 12 0.0000 4 180 1305 990 5805 SSLModConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 840 4050 4455 SSL_CTX\001
-4 0 0 100 0 18 12 0.0000 4 150 975 4455 5355 server_rec\001
-4 0 0 100 0 18 12 0.0000 4 180 1260 3870 4905 SSLSrvConfig\001
-4 0 0 100 0 18 12 0.0000 4 135 480 1845 4005 BUFF\001
-4 0 0 100 0 18 12 0.0000 4 150 810 2070 3555 conn_rec\001
-4 0 0 100 0 18 12 0.0000 4 135 345 2295 3105 BIO\001
-4 0 0 100 0 18 12 0.0000 4 135 375 2565 2655 SSL\001
-4 0 0 100 0 18 12 0.0000 4 180 1185 3645 1620 SSLDirConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 1065 3915 2070 request_rec\001
-4 0 0 200 0 0 8 0.0000 4 120 1440 900 7560 Startup, Runtime, Shutdown\001
-4 0 0 200 0 0 8 0.0000 4 105 975 1350 7335 Configuration Time\001
-4 0 0 200 0 0 8 0.0000 4 90 1050 2025 7110 Connection Duration\001
-4 0 0 200 0 0 8 0.0000 4 120 885 2835 6885 Request Duration\001
-4 0 0 200 0 18 20 0.0000 4 195 90 6345 6795 t\001
-4 0 0 200 0 20 8 0.0000 4 90 345 7110 5985 ->client\001
-4 0 0 100 0 18 12 0.0000 4 180 1305 6795 2430 SSLModConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 1260 8865 2430 SSLSrvConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 1215 6345 3555 ap_global_ctx\001
-4 0 0 100 0 18 12 0.0000 4 150 975 6345 4455 server_rec\001
-4 0 0 100 0 18 12 0.0000 4 150 810 6345 5355 conn_rec\001
-4 0 0 100 0 18 12 0.0000 4 135 375 9720 5355 SSL\001
-4 0 0 100 0 18 12 0.0000 4 180 1185 10665 2430 SSLDirConfig\001
-4 0 0 100 0 18 12 0.0000 4 135 480 7290 6255 BUFF\001
-4 0 0 100 0 18 12 0.0000 4 180 1305 11025 5355 SSL_METHOD\001
-4 0 0 100 0 18 12 0.0000 4 180 840 11475 4455 SSL_CTX\001
-4 0 0 100 0 18 24 0.0000 4 285 4365 3915 1080 Data Structure Overview\001
-4 0 0 200 0 20 8 0.0000 4 90 615 7065 5085 ->connection\001
-4 0 0 200 0 20 8 0.0000 4 60 390 7065 4770 ->server\001
-4 0 0 200 0 20 8 0.0000 4 120 960 8010 5445 SSL_get_app_data()\001
-4 0 0 200 0 20 8 0.0000 4 120 510 10530 4050 ->pSSLCtx\001
-4 0 0 200 0 20 8 0.0000 4 120 1215 7875 4275 SSL_CTX_get_app_data()\001
-4 0 0 200 0 20 8 0.0000 4 120 1155 10305 5535 SSL_get_current_cipher()\001
-4 0 0 100 0 18 12 0.0000 4 180 1170 11025 5760 SSL_CIPHER\001
-4 0 0 100 0 18 12 0.0000 4 180 1350 10980 6165 SSL_SESSION\001
-4 0 0 200 0 20 8 0.0000 4 120 840 10440 5940 SSL_get_session()\001
-4 0 0 100 0 18 12 0.0000 4 180 1665 10575 7110 X509_STORE_CTX\001
-4 0 0 100 0 18 12 0.0000 4 135 345 9720 7110 BIO\001
-4 0 0 200 0 20 8 0.0000 4 120 840 9540 7335 SSL_get_{r,w}bio()\001
-4 0 0 100 0 18 20 0.0000 4 270 1170 8730 3465 mod_ssl\001
-4 0 0 100 0 18 20 0.0000 4 270 1050 8145 6750 Apache\001
-4 0 0 200 0 20 8 0.0000 4 120 945 10125 4680 SSL_get_SSL_CTX()\001
-4 0 0 200 0 20 8 0.0000 4 120 1170 10350 5175 SSL_get_SSL_METHOD()\001
-4 0 0 200 0 20 8 0.0000 4 90 465 11745 4770 ->method\001
-4 0 0 200 0 20 8 0.0000 4 120 1665 9945 6480 X509_STORE_CTX_get_app_data()\001
-4 0 0 200 0 20 8 0.0000 4 120 1215 10980 6705 SSL_CTX_get_cert_store()\001
-4 0 0 200 0 20 8 0.0000 4 120 1020 8280 5130 SSL_get_app_data2()\001
-4 0 0 100 0 18 20 0.0000 4 270 1290 10710 7605 OpenSSL\001
-4 0 0 100 0 18 12 0.0000 4 180 720 10710 7785 [Crypto]\001
-4 0 0 100 0 18 20 0.0000 4 270 1290 10935 3645 OpenSSL\001
-4 0 0 100 0 18 12 0.0000 4 180 495 10935 3825 [SSL]\001
diff --git a/modules/ssl/README.dsov.ps b/modules/ssl/README.dsov.ps
deleted file mode 100644
index def19dbecf..0000000000
--- a/modules/ssl/README.dsov.ps
+++ /dev/null
@@ -1,1138 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: README.dsov.ps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Mon Apr 12 17:09:11 1999
-%%For: rse@en1.engelschall.com (Ralf S. Engelschall)
-%%Orientation: Landscape
-%%BoundingBox: 59 37 553 755
-%%Pages: 1
-%%BeginSetup
-%%IncludeFeature: *PageSize Letter
-%%EndSetup
-%%Magnification: 0.9340
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-/col32 {0.380 0.396 0.380 srgb} bind def
-/col33 {0.714 0.698 0.714 srgb} bind def
-/col34 {0.969 0.953 0.969 srgb} bind def
-/col35 {0.812 0.812 0.812 srgb} bind def
-/col36 {1.000 1.000 1.000 srgb} bind def
-
-end
-save
-48.0 12.0 translate
- 90 rotate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
- bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
- 4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
-/Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 9572 m -1000 -1000 l 13622 -1000 l 13622 9572 l cp clip
- 0.05883 0.05883 sc
-%%Page: 1 1
-% Polyline
-7.500 slw
-n 6413 2048 m 6380 2054 l 6348 2061 l 6315 2067 l 6283 2073 l 6250 2079 l
- 6217 2084 l 6185 2090 l 6152 2095 l 6120 2101 l 6088 2107 l
- 6057 2113 l 6027 2120 l 5998 2126 l 5970 2134 l 5943 2141 l
- 5918 2149 l 5894 2158 l 5873 2167 l 5853 2177 l 5835 2187 l
- 5819 2198 l 5805 2210 l 5793 2222 l 5782 2235 l 5774 2250 l
- 5768 2265 l 5763 2281 l 5760 2299 l 5759 2318 l 5759 2339 l
- 5761 2360 l 5764 2383 l 5768 2408 l 5774 2433 l 5780 2460 l
- 5788 2488 l 5797 2516 l 5806 2546 l 5815 2575 l 5825 2606 l
- 5836 2636 l 5846 2666 l 5856 2696 l 5866 2726 l 5875 2755 l
- 5884 2784 l 5892 2812 l 5899 2839 l 5905 2866 l 5910 2891 l
- 5915 2916 l 5918 2940 l 5919 2968 l 5920 2995 l 5919 3022 l
- 5916 3048 l 5912 3075 l 5908 3101 l 5902 3127 l 5895 3153 l
- 5887 3179 l 5880 3205 l 5871 3230 l 5863 3254 l 5855 3278 l
- 5848 3302 l 5841 3324 l 5834 3346 l 5829 3367 l 5824 3388 l
- 5821 3408 l 5819 3427 l 5819 3446 l 5820 3465 l 5823 3484 l
- 5827 3503 l 5833 3522 l 5840 3542 l 5848 3562 l 5858 3582 l
- 5868 3603 l 5880 3625 l 5891 3647 l 5904 3669 l 5916 3691 l
- 5929 3713 l 5941 3736 l 5953 3758 l 5964 3779 l 5974 3801 l
- 5983 3822 l 5991 3843 l 5997 3863 l 6002 3883 l 6006 3903 l
- 6008 3923 l 6008 3942 l 6006 3962 l 6003 3983 l 5998 4004 l
- 5992 4025 l 5985 4048 l 5977 4070 l 5968 4094 l 5958 4118 l
- 5947 4142 l 5936 4167 l 5925 4192 l 5913 4216 l 5902 4241 l
- 5892 4266 l 5882 4291 l 5872 4315 l 5864 4339 l 5857 4362 l
- 5851 4386 l 5846 4409 l 5843 4433 l 5840 4456 l 5840 4480 l
- 5840 4505 l 5842 4530 l 5845 4556 l 5849 4582 l 5854 4609 l
- 5860 4636 l 5867 4664 l 5875 4692 l 5883 4720 l 5892 4747 l
- 5901 4774 l 5910 4801 l 5920 4827 l 5929 4852 l 5938 4875 l
- 5947 4898 l 5955 4920 l 5963 4941 l 5971 4961 l 5978 4980 l
- 5985 5002 l 5992 5024 l 5999 5046 l 6005 5067 l 6010 5088 l
- 6016 5109 l 6022 5129 l 6027 5150 l 6033 5170 l 6039 5190 l
- 6045 5209 l 6052 5228 l 6059 5246 l 6067 5264 l 6075 5281 l
- 6084 5298 l 6094 5315 l 6105 5333 l 6115 5347 l 6125 5361 l
- 6137 5376 l 6149 5392 l 6162 5408 l 6176 5425 l 6191 5443 l
- 6206 5461 l 6221 5480 l 6237 5499 l 6253 5519 l 6269 5539 l
- 6284 5559 l 6299 5579 l 6313 5599 l 6327 5619 l 6340 5639 l
- 6352 5659 l 6363 5679 l 6373 5698 l 6382 5718 l 6390 5738 l
- 6398 5759 l 6404 5782 l 6410 5805 l 6415 5828 l 6420 5852 l
- 6424 5877 l 6428 5902 l 6431 5927 l 6435 5952 l 6438 5977 l
- 6442 6001 l 6446 6025 l 6450 6048 l 6455 6069 l 6461 6090 l
- 6467 6109 l 6474 6127 l 6483 6143 l 6492 6159 l 6503 6173 l
- 6515 6185 l 6528 6197 l 6543 6209 l 6560 6220 l 6578 6230 l
- 6598 6240 l 6619 6250 l 6641 6260 l 6663 6270 l 6687 6281 l
- 6710 6291 l 6733 6302 l 6757 6312 l 6779 6324 l 6801 6335 l
- 6821 6348 l 6841 6361 l 6859 6374 l 6876 6389 l 6893 6405 l
- 6906 6421 l 6919 6437 l 6932 6455 l 6944 6475 l 6955 6495 l
- 6967 6516 l 6979 6538 l 6991 6561 l 7003 6584 l 7015 6608 l
- 7027 6631 l 7040 6654 l 7053 6677 l 7067 6699 l 7081 6720 l
- 7096 6739 l 7111 6758 l 7127 6774 l 7144 6789 l 7161 6803 l
- 7180 6815 l 7200 6825 l 7220 6833 l 7240 6840 l 7263 6845 l
- 7286 6850 l 7311 6854 l 7338 6857 l 7365 6859 l 7394 6861 l
- 7424 6862 l 7454 6864 l 7485 6865 l 7516 6866 l 7547 6867 l
- 7578 6868 l 7609 6870 l 7639 6872 l 7668 6875 l 7696 6879 l
- 7723 6883 l 7748 6889 l 7773 6895 l 7795 6903 l 7817 6912 l
- 7838 6923 l 7857 6934 l 7875 6948 l 7892 6963 l 7909 6980 l
- 7926 6998 l 7941 7017 l 7957 7038 l 7972 7060 l 7987 7083 l
- 8002 7106 l 8017 7130 l 8031 7154 l 8046 7178 l 8061 7202 l
- 8075 7225 l 8090 7247 l 8105 7269 l 8120 7289 l 8135 7308 l
- 8151 7326 l 8167 7342 l 8184 7356 l 8202 7369 l 8220 7380 l
- 8239 7390 l 8260 7397 l 8282 7404 l 8305 7409 l 8330 7413 l
- 8356 7416 l 8383 7418 l 8412 7420 l 8441 7420 l 8471 7419 l
- 8502 7418 l 8534 7417 l 8565 7415 l 8597 7413 l 8629 7411 l
- 8660 7409 l 8690 7407 l 8720 7405 l 8749 7404 l 8777 7404 l
- 8804 7404 l 8830 7405 l 8856 7407 l 8880 7410 l 8906 7414 l
- 8931 7420 l 8956 7427 l 8981 7435 l 9005 7444 l 9029 7455 l
- 9053 7466 l 9077 7478 l 9100 7491 l 9123 7504 l 9146 7517 l
- 9168 7531 l 9190 7544 l 9210 7557 l 9230 7570 l 9250 7582 l
- 9268 7593 l 9286 7604 l 9304 7613 l 9320 7621 l 9336 7629 l
- 9353 7635 l 9370 7641 l 9388 7645 l 9406 7648 l 9425 7650 l
- 9444 7652 l 9464 7653 l 9485 7653 l 9508 7653 l 9531 7653 l
- 9555 7653 l 9579 7653 l 9605 7654 l 9631 7655 l 9658 7656 l
- 9685 7659 l 9713 7662 l 9742 7666 l 9771 7672 l 9801 7679 l
- 9833 7688 l 9853 7694 l 9874 7700 l 9895 7708 l 9918 7716 l
- 9941 7725 l 9966 7734 l 9991 7745 l 10017 7755 l 10045 7767 l
- 10073 7779 l 10102 7791 l 10132 7804 l 10163 7818 l 10194 7831 l
- 10227 7845 l 10259 7860 l 10293 7874 l 10326 7889 l 10360 7903 l
- 10394 7918 l 10429 7932 l 10463 7947 l 10497 7961 l 10531 7974 l
- 10565 7988 l 10599 8001 l 10633 8013 l 10667 8025 l 10700 8037 l
- 10733 8049 l 10767 8059 l 10800 8070 l 10834 8080 l 10868 8090 l
- 10902 8099 l 10937 8108 l 10973 8117 l 11009 8125 l 11045 8133 l
- 11083 8141 l 11120 8148 l 11158 8155 l 11197 8161 l 11236 8167 l
- 11275 8172 l 11313 8177 l 11352 8181 l 11391 8184 l 11429 8187 l
- 11467 8190 l 11504 8191 l 11540 8192 l 11576 8192 l 11610 8192 l
- 11644 8191 l 11676 8189 l 11707 8187 l 11738 8184 l 11767 8180 l
- 11794 8176 l 11821 8171 l 11847 8165 l 11871 8159 l 11895 8153 l
- 11923 8143 l 11950 8133 l 11976 8122 l 12001 8109 l 12025 8096 l
- 12048 8081 l 12071 8065 l 12092 8048 l 12113 8031 l 12133 8012 l
- 12153 7992 l 12171 7972 l 12188 7951 l 12205 7930 l 12220 7909 l
- 12235 7887 l 12248 7865 l 12260 7843 l 12272 7822 l 12282 7800 l
- 12292 7779 l 12301 7759 l 12309 7739 l 12316 7719 l 12323 7699 l
- 12330 7680 l 12338 7655 l 12345 7631 l 12352 7607 l 12359 7582 l
- 12365 7558 l 12371 7533 l 12377 7508 l 12382 7484 l 12388 7460 l
- 12392 7436 l 12397 7414 l 12401 7391 l 12405 7370 l 12409 7350 l
- 12412 7331 l 12415 7313 l 12418 7297 l 12421 7281 l 12424 7266 l
- 12428 7253 l 12432 7234 l 12437 7216 l 12442 7199 l 12446 7183 l
- 12451 7166 l 12456 7150 l 12460 7134 l 12463 7117 l 12466 7101 l
- 12468 7086 l 12469 7070 l 12469 7054 l 12467 7037 l 12465 7020 l
- 12462 7006 l 12459 6991 l 12455 6975 l 12450 6958 l 12445 6940 l
- 12440 6921 l 12434 6901 l 12428 6880 l 12422 6859 l 12416 6838 l
- 12411 6817 l 12406 6796 l 12401 6776 l 12397 6756 l 12394 6736 l
- 12392 6718 l 12390 6700 l 12390 6683 l 12390 6665 l 12392 6649 l
- 12394 6631 l 12397 6614 l 12401 6597 l 12406 6579 l 12411 6561 l
- 12416 6542 l 12422 6524 l 12428 6505 l 12434 6487 l 12440 6468 l
- 12445 6450 l 12450 6432 l 12455 6414 l 12459 6396 l 12462 6378 l
- 12465 6360 l 12467 6343 l 12468 6326 l 12469 6308 l 12469 6289 l
- 12468 6269 l 12468 6249 l 12466 6227 l 12464 6205 l 12462 6182 l
- 12460 6159 l 12457 6135 l 12454 6111 l 12451 6087 l 12447 6063 l
- 12444 6040 l 12441 6016 l 12437 5993 l 12434 5970 l 12431 5948 l
- 12428 5925 l 12424 5902 l 12421 5879 l 12419 5855 l 12416 5831 l
- 12413 5806 l 12411 5781 l 12408 5755 l 12406 5729 l 12404 5702 l
- 12403 5676 l 12401 5651 l 12400 5625 l 12400 5601 l 12399 5578 l
- 12399 5555 l 12400 5534 l 12401 5514 l 12402 5495 l 12403 5477 l
- 12405 5460 l 12408 5440 l 12411 5421 l 12416 5402 l 12420 5384 l
- 12426 5365 l 12431 5347 l 12437 5329 l 12444 5311 l 12450 5293 l
- 12456 5275 l 12462 5258 l 12468 5240 l 12474 5222 l 12479 5205 l
- 12483 5186 l 12488 5168 l 12490 5152 l 12493 5135 l 12496 5117 l
- 12498 5099 l 12500 5079 l 12502 5058 l 12504 5036 l 12506 5014 l
- 12507 4990 l 12509 4966 l 12510 4942 l 12512 4918 l 12513 4893 l
- 12515 4869 l 12516 4845 l 12518 4822 l 12520 4799 l 12521 4776 l
- 12523 4754 l 12525 4733 l 12527 4713 l 12529 4693 l 12531 4673 l
- 12534 4653 l 12536 4632 l 12539 4610 l 12541 4588 l 12543 4566 l
- 12546 4543 l 12548 4520 l 12550 4497 l 12552 4473 l 12553 4450 l
- 12554 4426 l 12555 4403 l 12555 4380 l 12555 4357 l 12555 4334 l
- 12554 4312 l 12552 4290 l 12550 4267 l 12548 4245 l 12545 4224 l
- 12541 4203 l 12537 4181 l 12533 4159 l 12528 4136 l 12523 4112 l
- 12517 4088 l 12510 4064 l 12503 4038 l 12496 4013 l 12488 3987 l
- 12479 3961 l 12471 3935 l 12462 3909 l 12452 3884 l 12443 3859 l
- 12434 3835 l 12424 3811 l 12415 3788 l 12405 3766 l 12396 3744 l
- 12386 3723 l 12377 3702 l 12368 3683 l 12357 3661 l 12347 3640 l
- 12336 3619 l 12325 3598 l 12314 3576 l 12303 3555 l 12291 3533 l
- 12280 3511 l 12269 3489 l 12257 3467 l 12246 3446 l 12235 3424 l
- 12225 3402 l 12215 3381 l 12206 3360 l 12197 3340 l 12189 3320 l
- 12181 3301 l 12174 3281 l 12168 3262 l 12162 3244 l 12158 3225 l
- 12153 3204 l 12149 3183 l 12145 3162 l 12142 3139 l 12140 3117 l
- 12138 3094 l 12137 3071 l 12137 3047 l 12138 3024 l 12139 3001 l
- 12141 2978 l 12143 2956 l 12146 2935 l 12150 2915 l 12154 2896 l
- 12158 2879 l 12163 2862 l 12168 2847 l 12174 2833 l 12180 2820 l
- 12188 2805 l 12197 2792 l 12206 2779 l 12216 2766 l 12227 2754 l
- 12238 2742 l 12249 2730 l 12260 2717 l 12272 2704 l 12282 2691 l
- 12292 2676 l 12302 2661 l 12310 2645 l 12318 2627 l 12324 2608 l
- 12330 2588 l 12334 2571 l 12336 2553 l 12339 2534 l 12341 2513 l
- 12342 2491 l 12343 2467 l 12343 2442 l 12342 2416 l 12340 2389 l
- 12338 2360 l 12335 2332 l 12331 2303 l 12326 2273 l 12320 2244 l
- 12314 2215 l 12307 2187 l 12299 2159 l 12290 2132 l 12280 2106 l
- 12270 2081 l 12259 2056 l 12248 2033 l 12236 2011 l 12224 1990 l
- 12210 1970 l 12196 1949 l 12181 1929 l 12164 1910 l 12147 1890 l
- 12129 1871 l 12110 1853 l 12090 1835 l 12070 1818 l 12049 1802 l
- 12027 1787 l 12005 1773 l 11983 1761 l 11961 1749 l 11939 1739 l
- 11917 1730 l 11895 1722 l 11874 1716 l 11852 1710 l 11831 1707 l
- 11811 1704 l 11790 1703 l 11769 1702 l 11748 1703 l 11727 1705 l
- 11706 1708 l 11683 1711 l 11660 1716 l 11636 1721 l 11612 1727 l
- 11587 1733 l 11560 1740 l 11534 1747 l 11506 1754 l 11479 1761 l
- 11450 1768 l 11422 1774 l 11393 1780 l 11364 1786 l 11334 1791 l
- 11305 1795 l 11275 1798 l 11245 1800 l 11215 1801 l 11184 1801 l
- 11153 1800 l 11128 1798 l 11104 1796 l 11078 1793 l 11052 1790 l
- 11025 1785 l 10997 1781 l 10968 1776 l 10939 1770 l 10908 1764 l
- 10877 1758 l 10844 1751 l 10811 1744 l 10778 1737 l 10743 1730 l
- 10708 1722 l 10673 1715 l 10637 1708 l 10601 1701 l 10565 1695 l
- 10530 1688 l 10494 1682 l 10458 1677 l 10422 1672 l 10387 1668 l
- 10352 1664 l 10318 1661 l 10284 1658 l 10250 1657 l 10216 1656 l
- 10183 1655 l 10150 1656 l 10118 1658 l 10087 1660 l 10055 1663 l
- 10024 1666 l 9992 1671 l 9960 1676 l 9927 1682 l 9894 1688 l
- 9861 1695 l 9827 1703 l 9792 1711 l 9757 1720 l 9721 1729 l
- 9685 1738 l 9649 1748 l 9613 1757 l 9576 1767 l 9539 1778 l
- 9502 1788 l 9465 1798 l 9429 1807 l 9392 1817 l 9356 1826 l
- 9320 1835 l 9285 1844 l 9250 1852 l 9216 1860 l 9182 1867 l
- 9148 1873 l 9115 1879 l 9082 1884 l 9050 1889 l 9018 1892 l
- 8987 1895 l 8955 1898 l 8919 1899 l 8883 1900 l 8847 1899 l
- 8811 1898 l 8774 1896 l 8737 1893 l 8699 1889 l 8661 1884 l
- 8623 1878 l 8585 1872 l 8546 1865 l 8508 1857 l 8470 1849 l
- 8432 1840 l 8395 1830 l 8358 1821 l 8322 1811 l 8287 1801 l
- 8254 1790 l 8221 1780 l 8189 1770 l 8159 1760 l 8130 1750 l
- 8102 1740 l 8076 1730 l 8051 1721 l 8028 1712 l 8006 1703 l
- 7985 1695 l 7965 1688 l 7931 1674 l 7899 1662 l 7871 1650 l
- 7844 1640 l 7820 1631 l 7798 1623 l 7778 1617 l 7760 1611 l
- 7743 1607 l 7728 1603 l 7715 1601 l 7702 1600 l 7691 1600 l
- 7680 1601 l 7669 1603 l 7658 1605 l 7648 1607 l 7638 1610 l
- 7627 1613 l 7615 1617 l 7601 1621 l 7587 1626 l 7571 1632 l
- 7554 1638 l 7536 1645 l 7517 1653 l 7496 1661 l 7474 1670 l
- 7452 1679 l 7428 1689 l 7403 1699 l 7378 1709 l 7352 1720 l
- 7325 1731 l 7297 1743 l 7268 1755 l 7247 1763 l 7226 1772 l
- 7204 1781 l 7182 1790 l 7158 1800 l 7133 1810 l 7108 1820 l
- 7081 1831 l 7053 1842 l 7025 1853 l 6996 1864 l 6966 1875 l
- 6935 1886 l 6904 1898 l 6873 1909 l 6841 1921 l 6809 1932 l
- 6776 1943 l 6744 1954 l 6712 1964 l 6680 1974 l 6649 1984 l
- 6618 1994 l 6587 2003 l 6557 2011 l 6527 2019 l 6498 2027 l
- 6469 2034 l 6441 2041 l cp gs col34 1.00 shd ef gr gs col34 s gr
-% Polyline
-n 675 6525 m 5850 6525 l 5850 6075 l 5625 6075 l 5625 5625 l 900 5625 l
- 900 6075 l 675 6075 l cp gs col7 1.00 shd ef gr gs col7 s gr
-% Polyline
-n 1125 6525 m 5355 6525 l 5400 5175 l 5175 5175 l 5175 4725 l 4950 4725 l
- 4950 4275 l 1575 4275 l 1575 4725 l 1350 4725 l 1350 5175 l
- 1125 5175 l cp gs col34 1.00 shd ef gr gs col34 s gr
-% Polyline
-75.000 slw
-n 9450 4500 m 12465 2205 l gs col7 s gr
-% Polyline
-n 9450 4500 m 9450 7785 l gs col7 s gr
-% Polyline
-n 9450 4500 m 6075 1935 l gs col7 s gr
-% Polyline
-n 12510 6435 m 9450 6435 l gs col7 s gr
-% Polyline
-7.500 slw
-n 1800 6525 m 4725 6525 l 4725 3825 l 4500 3825 l 4500 3375 l 4275 3375 l
- 4275 2925 l 4050 2925 l 4050 2475 l 2475 2475 l 2475 2925 l
- 2250 2925 l 2250 3375 l 2025 3375 l 2025 3825 l 1800 3825 l
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 2700 6525 m 3825 6525 l 3825 2025 l 3600 2025 l 3600 1575 l 2925 1575 l
- 2925 2025 l 2700 2025 l cp gs col33 1.00 shd ef gr gs col33 s gr
-% Polyline
-gs clippath
-12068 6810 m 11970 6885 l 12022 6773 l 11937 6878 l 11984 6915 l cp
-clip
-n 12375 4455 m 12510 4635 l 12510 6210 l 11970 6885 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 12068 6810 m 11970 6885 l 12022 6773 l 12045 6791 l 12068 6810 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-7113 6004 m 7155 6120 l 7063 6037 l 7138 6149 l 7188 6116 l cp
-clip
-n 6705 5445 m 7155 6120 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7113 6004 m 7155 6120 l 7063 6037 l 7088 6020 l 7113 6004 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-7304 4656 m 7200 4590 l 7323 4599 l 7195 4557 l 7176 4614 l cp
-clip
-n 7875 4815 m 7200 4590 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7304 4656 m 7200 4590 l 7323 4599 l 7314 4628 l 7304 4656 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-11405 4128 m 11475 4230 l 11365 4173 l 11466 4262 l 11506 4217 l cp
-clip
-n 9585 2565 m 11475 4230 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 11405 4128 m 11475 4230 l 11365 4173 l 11385 4151 l 11405 4128 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-11712 4556 m 11835 4545 l 11732 4613 l 11859 4568 l 11839 4512 l cp
-clip
-n 10170 5130 m 11835 4545 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 11712 4556 m 11835 4545 l 11732 4613 l 11722 4585 l 11712 4556 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-9732 5411 m 9855 5400 l 9752 5468 l 9879 5423 l 9859 5367 l cp
-clip
-n 7920 6075 m 9855 5400 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9732 5411 m 9855 5400 l 9752 5468 l 9742 5440 l 9732 5411 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-10823 5573 m 10935 5625 l 10812 5632 l 10944 5657 l 10955 5598 l cp
-clip
-n 9990 5445 m 10935 5625 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10823 5573 m 10935 5625 l 10812 5632 l 10817 5603 l 10823 5573 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-10815 5280 m 10935 5310 l 10815 5340 l 10950 5340 l 10950 5280 l cp
-clip
-n 10215 5310 m 10935 5310 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10815 5280 m 10935 5310 l 10815 5340 l 10815 5310 l 10815 5280 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-11955 4965 m 11925 5085 l 11895 4965 l 11895 5100 l 11955 5100 l cp
-clip
-n 11925 4590 m 11925 5085 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 11955 4965 m 11925 5085 l 11895 4965 l 11925 4965 l 11955 4965 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-9840 6720 m 9810 6840 l 9780 6720 l 9780 6855 l 9840 6855 l cp
-clip
-n 9810 5490 m 9810 6840 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9840 6720 m 9810 6840 l 9780 6720 l 9810 6720 l 9840 6720 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-10847 5943 m 10935 6030 l 10816 5995 l 10933 6063 l 10963 6012 l cp
-clip
-n 9945 5445 m 10935 6030 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10847 5943 m 10935 6030 l 10816 5995 l 10832 5969 l 10847 5943 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-10698 2634 m 10800 2565 l 10742 2674 l 10832 2574 l 10788 2534 l cp
-clip
-n 8865 4725 m 10800 2565 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10698 2634 m 10800 2565 l 10742 2674 l 10720 2654 l 10698 2634 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-30.000 slw
-n 675 6075 m 5850 6075 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-7.500 slw
- [15 15] 15 sd
-gs clippath
-645 6195 m 675 6075 l 705 6195 l 705 6060 l 645 6060 l cp
-clip
-n 675 6525 m 675 6075 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 645 6195 m 675 6075 l 705 6195 l 675 6195 l 645 6195 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-5880 6405 m 5850 6525 l 5820 6405 l 5820 6540 l 5880 6540 l cp
-clip
-n 5850 6075 m 5850 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5880 6405 m 5850 6525 l 5820 6405 l 5850 6405 l 5880 6405 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
-30.000 slw
-n 900 5625 m 5625 5625 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 1125 5175 m 5400 5175 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 1350 4725 m 5175 4725 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 1575 4275 m 4950 4275 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 1800 3825 m 4725 3825 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 2025 3375 m 4500 3375 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 2250 2925 m 4275 2925 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 2475 2475 m 4050 2475 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 2700 2025 m 3825 2025 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 2925 1575 m 3600 1575 l gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-7.500 slw
- [15 15] 15 sd
-gs clippath
-870 5745 m 900 5625 l 930 5745 l 930 5610 l 870 5610 l cp
-clip
-n 900 6075 m 900 5625 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 870 5745 m 900 5625 l 930 5745 l 900 5745 l 870 5745 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-1095 5295 m 1125 5175 l 1155 5295 l 1155 5160 l 1095 5160 l cp
-clip
-n 1125 6525 m 1125 5175 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1095 5295 m 1125 5175 l 1155 5295 l 1125 5295 l 1095 5295 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-1320 4845 m 1350 4725 l 1380 4845 l 1380 4710 l 1320 4710 l cp
-clip
-n 1350 5175 m 1350 4725 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1320 4845 m 1350 4725 l 1380 4845 l 1350 4845 l 1320 4845 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-1545 4395 m 1575 4275 l 1605 4395 l 1605 4260 l 1545 4260 l cp
-clip
-n 1575 4725 m 1575 4275 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1545 4395 m 1575 4275 l 1605 4395 l 1575 4395 l 1545 4395 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-1770 3945 m 1800 3825 l 1830 3945 l 1830 3810 l 1770 3810 l cp
-clip
-n 1800 6525 m 1800 3825 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1770 3945 m 1800 3825 l 1830 3945 l 1800 3945 l 1770 3945 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-1995 3495 m 2025 3375 l 2055 3495 l 2055 3360 l 1995 3360 l cp
-clip
-n 2025 3825 m 2025 3375 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1995 3495 m 2025 3375 l 2055 3495 l 2025 3495 l 1995 3495 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-2220 3045 m 2250 2925 l 2280 3045 l 2280 2910 l 2220 2910 l cp
-clip
-n 2250 3375 m 2250 2925 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2220 3045 m 2250 2925 l 2280 3045 l 2250 3045 l 2220 3045 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-2445 2595 m 2475 2475 l 2505 2595 l 2505 2460 l 2445 2460 l cp
-clip
-n 2475 2925 m 2475 2475 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2445 2595 m 2475 2475 l 2505 2595 l 2475 2595 l 2445 2595 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-5655 5955 m 5625 6075 l 5595 5955 l 5595 6090 l 5655 6090 l cp
-clip
-n 5625 5625 m 5625 6075 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5655 5955 m 5625 6075 l 5595 5955 l 5625 5955 l 5655 5955 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-5430 6405 m 5400 6525 l 5370 6405 l 5370 6540 l 5430 6540 l cp
-clip
-n 5400 5175 m 5400 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5430 6405 m 5400 6525 l 5370 6405 l 5400 6405 l 5430 6405 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-5205 5055 m 5175 5175 l 5145 5055 l 5145 5190 l 5205 5190 l cp
-clip
-n 5175 4725 m 5175 5175 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5205 5055 m 5175 5175 l 5145 5055 l 5175 5055 l 5205 5055 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-4980 4605 m 4950 4725 l 4920 4605 l 4920 4740 l 4980 4740 l cp
-clip
-n 4950 4275 m 4950 4725 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4980 4605 m 4950 4725 l 4920 4605 l 4950 4605 l 4980 4605 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-4755 6405 m 4725 6525 l 4695 6405 l 4695 6540 l 4755 6540 l cp
-clip
-n 4725 3825 m 4725 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4755 6405 m 4725 6525 l 4695 6405 l 4725 6405 l 4755 6405 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-4530 3705 m 4500 3825 l 4470 3705 l 4470 3840 l 4530 3840 l cp
-clip
-n 4500 3375 m 4500 3825 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4530 3705 m 4500 3825 l 4470 3705 l 4500 3705 l 4530 3705 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-4305 3255 m 4275 3375 l 4245 3255 l 4245 3390 l 4305 3390 l cp
-clip
-n 4275 2925 m 4275 3375 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4305 3255 m 4275 3375 l 4245 3255 l 4275 3255 l 4305 3255 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-4080 2805 m 4050 2925 l 4020 2805 l 4020 2940 l 4080 2940 l cp
-clip
-n 4050 2475 m 4050 2925 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4080 2805 m 4050 2925 l 4020 2805 l 4050 2805 l 4080 2805 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-2670 2145 m 2700 2025 l 2730 2145 l 2730 2010 l 2670 2010 l cp
-clip
-n 2700 6525 m 2700 2025 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2670 2145 m 2700 2025 l 2730 2145 l 2700 2145 l 2670 2145 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-3855 6405 m 3825 6525 l 3795 6405 l 3795 6540 l 3855 6540 l cp
-clip
-n 3825 2025 m 3825 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 3855 6405 m 3825 6525 l 3795 6405 l 3825 6405 l 3855 6405 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-3630 1905 m 3600 2025 l 3570 1905 l 3570 2040 l 3630 2040 l cp
-clip
-n 3600 1575 m 3600 2025 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 3630 1905 m 3600 2025 l 3570 1905 l 3600 1905 l 3630 1905 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-2895 1695 m 2925 1575 l 2955 1695 l 2955 1560 l 2895 1560 l cp
-clip
-n 2925 2025 m 2925 1575 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2895 1695 m 2925 1575 l 2955 1695 l 2925 1695 l 2895 1695 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-45.000 slw
-gs clippath
-6087 6495 m 6207 6525 l 6087 6555 l 6360 6555 l 6360 6495 l cp
-clip
-n 540 6525 m 6300 6525 l gs 0.00 setgray ef gr gs col0 s gr gr
-
-% arrowhead
-n 6087 6495 m 6207 6525 l 6087 6555 l 6087 6525 l 6087 6495 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-7.500 slw
-gs clippath
-3681 6720 m 3825 6750 l 3681 6780 l 3840 6780 l 3840 6720 l cp
-2844 6780 m 2700 6750 l 2844 6720 l 2685 6720 l 2685 6780 l cp
-clip
-n 2700 6750 m 3825 6750 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2844 6780 m 2700 6750 l 2844 6720 l 2820 6750 l 2844 6780 l cp gs col7 1.00 shd ef gr col0 s
-% arrowhead
-n 3681 6720 m 3825 6750 l 3681 6780 l 3705 6750 l 3681 6720 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
-gs clippath
-5256 7170 m 5400 7200 l 5256 7230 l 5415 7230 l 5415 7170 l cp
-1269 7230 m 1125 7200 l 1269 7170 l 1110 7170 l 1110 7230 l cp
-clip
-n 1125 7200 m 5400 7200 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1269 7230 m 1125 7200 l 1269 7170 l 1245 7200 l 1269 7230 l cp gs col7 1.00 shd ef gr col0 s
-% arrowhead
-n 5256 7170 m 5400 7200 l 5256 7230 l 5280 7200 l 5256 7170 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
-gs clippath
-4581 6945 m 4725 6975 l 4581 7005 l 4740 7005 l 4740 6945 l cp
-1944 7005 m 1800 6975 l 1944 6945 l 1785 6945 l 1785 7005 l cp
-clip
-n 1800 6975 m 4725 6975 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1944 7005 m 1800 6975 l 1944 6945 l 1920 6975 l 1944 7005 l cp gs col7 1.00 shd ef gr col0 s
-% arrowhead
-n 4581 6945 m 4725 6975 l 4581 7005 l 4605 6975 l 4581 6945 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
-gs clippath
-5706 7395 m 5850 7425 l 5706 7455 l 5865 7455 l 5865 7395 l cp
-819 7455 m 675 7425 l 819 7395 l 660 7395 l 660 7455 l cp
-clip
-n 675 7425 m 5850 7425 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 819 7455 m 675 7425 l 819 7395 l 795 7425 l 819 7455 l cp gs col7 1.00 shd ef gr col0 s
-% arrowhead
-n 5706 7395 m 5850 7425 l 5706 7455 l 5730 7425 l 5706 7395 l cp gs col7 1.00 shd ef gr col0 s
-% Polyline
-1 slc
- [15 45] 45 sd
-n 675 6570 m 675 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 1125 6570 m 1125 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 1800 6570 m 1800 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 2700 6570 m 2700 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 3825 6570 m 3825 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 4725 6570 m 4725 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 5400 6570 m 5400 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 5850 6570 m 5850 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd
-% Polyline
-0 slc
-n 750 225 m 450 225 450 1050 300 arcto 4 {pop} repeat
- 450 1350 12300 1350 300 arcto 4 {pop} repeat
- 12600 1350 12600 525 300 arcto 4 {pop} repeat
- 12600 225 750 225 300 arcto 4 {pop} repeat
- cp gs col34 1.00 shd ef gr gs col0 s gr
-% Polyline
-n 8835 2250 m 8775 2250 8775 2415 60 arcto 4 {pop} repeat
- 8775 2475 10110 2475 60 arcto 4 {pop} repeat
- 10170 2475 10170 2310 60 arcto 4 {pop} repeat
- 10170 2250 8835 2250 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 10635 2250 m 10575 2250 10575 2415 60 arcto 4 {pop} repeat
- 10575 2475 11865 2475 60 arcto 4 {pop} repeat
- 11925 2475 11925 2310 60 arcto 4 {pop} repeat
- 11925 2250 10635 2250 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 11490 4275 m 11430 4275 11430 4440 60 arcto 4 {pop} repeat
- 11430 4500 12315 4500 60 arcto 4 {pop} repeat
- 12375 4500 12375 4335 60 arcto 4 {pop} repeat
- 12375 4275 11490 4275 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 11040 5175 m 10980 5175 10980 5340 60 arcto 4 {pop} repeat
- 10980 5400 12315 5400 60 arcto 4 {pop} repeat
- 12375 5400 12375 5235 60 arcto 4 {pop} repeat
- 12375 5175 11040 5175 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 9735 5175 m 9675 5175 9675 5340 60 arcto 4 {pop} repeat
- 9675 5400 10110 5400 60 arcto 4 {pop} repeat
- 10170 5400 10170 5235 60 arcto 4 {pop} repeat
- 10170 5175 9735 5175 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 7260 6075 m 7200 6075 7200 6240 60 arcto 4 {pop} repeat
- 7200 6300 7815 6300 60 arcto 4 {pop} repeat
- 7875 6300 7875 6135 60 arcto 4 {pop} repeat
- 7875 6075 7260 6075 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 6810 2250 m 6750 2250 6750 2415 60 arcto 4 {pop} repeat
- 6750 2475 8130 2475 60 arcto 4 {pop} repeat
- 8190 2475 8190 2310 60 arcto 4 {pop} repeat
- 8190 2250 6810 2250 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 6360 3375 m 6300 3375 6300 3540 60 arcto 4 {pop} repeat
- 6300 3600 7545 3600 60 arcto 4 {pop} repeat
- 7605 3600 7605 3435 60 arcto 4 {pop} repeat
- 7605 3375 6360 3375 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 6360 4275 m 6300 4275 6300 4440 60 arcto 4 {pop} repeat
- 6300 4500 7275 4500 60 arcto 4 {pop} repeat
- 7335 4500 7335 4335 60 arcto 4 {pop} repeat
- 7335 4275 6360 4275 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 6360 5175 m 6300 5175 6300 5340 60 arcto 4 {pop} repeat
- 6300 5400 7140 5400 60 arcto 4 {pop} repeat
- 7200 5400 7200 5235 60 arcto 4 {pop} repeat
- 7200 5175 6360 5175 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-gs clippath
-7365 5340 m 7245 5310 l 7365 5280 l 7230 5280 l 7230 5340 l cp
-clip
-n 9630 5310 m 7245 5310 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7365 5340 m 7245 5310 l 7365 5280 l 7365 5310 l 7365 5340 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-7500 4395 m 7380 4365 l 7500 4335 l 7365 4335 l 7365 4395 l cp
-clip
-n 11385 4365 m 7380 4365 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7500 4395 m 7380 4365 l 7500 4335 l 7500 4365 l 7500 4395 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-n 11040 5580 m 10980 5580 10980 5745 60 arcto 4 {pop} repeat
- 10980 5805 12180 5805 60 arcto 4 {pop} repeat
- 12240 5805 12240 5640 60 arcto 4 {pop} repeat
- 12240 5580 11040 5580 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 11040 5985 m 10980 5985 10980 6150 60 arcto 4 {pop} repeat
- 10980 6210 12315 6210 60 arcto 4 {pop} repeat
- 12375 6210 12375 6045 60 arcto 4 {pop} repeat
- 12375 5985 11040 5985 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-gs clippath
-9958 5554 m 9900 5445 l 10003 5514 l 9912 5414 l 9868 5454 l cp
-clip
-n 11205 6885 m 9900 5445 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9958 5554 m 9900 5445 l 10003 5514 l 9981 5534 l 9958 5554 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-n 10590 6930 m 10530 6930 10530 7095 60 arcto 4 {pop} repeat
- 10530 7155 12225 7155 60 arcto 4 {pop} repeat
- 12285 7155 12285 6990 60 arcto 4 {pop} repeat
- 12285 6930 10590 6930 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-n 9690 6930 m 9630 6930 9630 7095 60 arcto 4 {pop} repeat
- 9630 7155 10110 7155 60 arcto 4 {pop} repeat
- 10170 7155 10170 6990 60 arcto 4 {pop} repeat
- 10170 6930 9690 6930 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-/Times-Roman-iso ff 120.00 scf sf
-900 7560 m
-gs 1 -1 sc (Startup, Runtime, Shutdown) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-6345 2970 m
-gs 1 -1 sc (ap_ctx_get\(...,) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10800 2745 m
-gs 1 -1 sc (ap_get_module_config\(...) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10800 2880 m
-gs 1 -1 sc (->per_dir_config,) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10800 3015 m
-gs 1 -1 sc (&ssl_module\)) col0 sh gr
-% Polyline
-n 7980 4770 m 7920 4770 7920 4935 60 arcto 4 {pop} repeat
- 7920 4995 9075 4995 60 arcto 4 {pop} repeat
- 9135 4995 9135 4830 60 arcto 4 {pop} repeat
- 9135 4770 7980 4770 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr
-% Polyline
-gs clippath
-7340 2610 m 7425 2520 l 7393 2639 l 7459 2521 l 7406 2492 l cp
-clip
-n 6975 3330 m 7425 2520 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7340 2610 m 7425 2520 l 7393 2639 l 7367 2625 l 7340 2610 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-9336 2569 m 9450 2520 l 9373 2616 l 9480 2535 l 9444 2487 l cp
-clip
-n 7200 4230 m 9450 2520 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9336 2569 m 9450 2520 l 9373 2616 l 9354 2593 l 9336 2569 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-7321 5196 m 7200 5220 l 7296 5142 l 7174 5199 l 7199 5254 l cp
-clip
-n 7875 4905 m 7200 5220 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7321 5196 m 7200 5220 l 7296 5142 l 7309 5169 l 7321 5196 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
-gs clippath
-6720 4665 m 6750 4545 l 6780 4665 l 6780 4530 l 6720 4530 l cp
-clip
-n 6750 5130 m 6750 4545 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 6720 4665 m 6750 4545 l 6780 4665 l 6750 4665 l 6720 4665 l cp gs 0.00 setgray ef gr col0 s
-% Polyline
- [15 15] 15 sd
-gs clippath
-9279 4984 m 9175 4918 l 9298 4927 l 9170 4885 l 9151 4942 l cp
-clip
-n 9850 5143 m 9175 4918 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 9279 4984 m 9175 4918 l 9298 4927 l 9289 4956 l 9279 4984 l cp gs 0.00 setgray ef gr col0 s
-/Helvetica-Narrow-iso ff 120.00 scf sf
-6210 4680 m
-gs 1 -1 sc (->server) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-8280 6120 m
-gs 1 -1 sc (ap_ctx_get\(...,"ssl"\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7740 2700 m
-gs 1 -1 sc (ap_get_module_config\(...) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7740 2835 m
-gs 1 -1 sc (->module_config,) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7740 2970 m
-gs 1 -1 sc (&ssl_module\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-6345 3105 m
-gs 1 -1 sc ("ssl_module"\)) col0 sh gr
-/Times-Roman-iso ff 120.00 scf sf
-1350 7335 m
-gs 1 -1 sc (Configuration Time) col0 sh gr
-/Times-Roman-iso ff 120.00 scf sf
-2025 7110 m
-gs 1 -1 sc (Connection Duration) col0 sh gr
-/Times-Roman-iso ff 120.00 scf sf
-2835 6885 m
-gs 1 -1 sc (Request Duration) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-6345 6795 m
-gs 1 -1 sc (t) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7110 5985 m
-gs 1 -1 sc (->client) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7065 5085 m
-gs 1 -1 sc (->connection) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7065 4770 m
-gs 1 -1 sc (->server) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-8010 5445 m
-gs 1 -1 sc (SSL_get_app_data\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10530 4050 m
-gs 1 -1 sc (->pSSLCtx) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7875 4275 m
-gs 1 -1 sc (SSL_CTX_get_app_data\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10305 5535 m
-gs 1 -1 sc (SSL_get_current_cipher\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10440 5940 m
-gs 1 -1 sc (SSL_get_session\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-9540 7335 m
-gs 1 -1 sc (SSL_get_{r,w}bio\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10125 4680 m
-gs 1 -1 sc (SSL_get_SSL_CTX\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10350 5175 m
-gs 1 -1 sc (SSL_get_SSL_METHOD\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-11745 4770 m
-gs 1 -1 sc (->method) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-9945 6480 m
-gs 1 -1 sc (X509_STORE_CTX_get_app_data\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10980 6705 m
-gs 1 -1 sc (SSL_CTX_get_cert_store\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-8280 5130 m
-gs 1 -1 sc (SSL_get_app_data2\(\)) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-3645 1620 m
-gs 1 -1 sc (SSLDirConfig) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-10935 3645 m
-gs 1 -1 sc (OpenSSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10935 3825 m
-gs 1 -1 sc ([SSL]) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-11025 5760 m
-gs 1 -1 sc (SSL_CIPHER) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10980 6165 m
-gs 1 -1 sc (SSL_SESSION) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-10710 7605 m
-gs 1 -1 sc (OpenSSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10575 7110 m
-gs 1 -1 sc (X509_STORE_CTX) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6795 2430 m
-gs 1 -1 sc (SSLModConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-8865 2430 m
-gs 1 -1 sc (SSLSrvConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6345 3555 m
-gs 1 -1 sc (ap_global_ctx) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6345 4455 m
-gs 1 -1 sc (server_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6345 5355 m
-gs 1 -1 sc (conn_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-9720 5355 m
-gs 1 -1 sc (SSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10665 2430 m
-gs 1 -1 sc (SSLDirConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-7290 6255 m
-gs 1 -1 sc (BUFF) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-11025 5355 m
-gs 1 -1 sc (SSL_METHOD) col0 sh gr
-% Polyline
-15.000 slw
-n 750 225 m 450 225 450 8250 300 arcto 4 {pop} repeat
- 450 8550 12300 8550 300 arcto 4 {pop} repeat
- 12600 8550 12600 525 300 arcto 4 {pop} repeat
- 12600 225 750 225 300 arcto 4 {pop} repeat
- cp gs col0 s gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-11475 4455 m
-gs 1 -1 sc (SSL_CTX) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-8010 4950 m
-gs 1 -1 sc (request_rec) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-10575 675 m
-gs 1 -1 sc (Ralf S. Engelschall) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-4275 675 m
-gs 1 -1 sc (Apache+mod_ssl+OpenSSL) col0 sh gr
-/Times-Roman-iso ff 150.00 scf sf
-10575 855 m
-gs 1 -1 sc (rse@engelschall.com) col0 sh gr
-/Times-Roman-iso ff 150.00 scf sf
-10575 1035 m
-gs 1 -1 sc (www.engelschall.com) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-900 675 m
-gs 1 -1 sc (Version 1.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-900 855 m
-gs 1 -1 sc (12-Apr-1999) col0 sh gr
-/Helvetica-Bold-iso ff 360.00 scf sf
-3915 1080 m
-gs 1 -1 sc (Data Structure Overview) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-9720 7110 m
-gs 1 -1 sc (BIO) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10710 7785 m
-gs 1 -1 sc ([Crypto]) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-8730 3465 m
-gs 1 -1 sc (mod_ssl) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-8145 6750 m
-gs 1 -1 sc (Apache) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-9000 8100 m
-gs 1 -1 sc (Chaining) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-2745 8100 m
-gs 1 -1 sc (Lifetime) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-810 6255 m
-gs 1 -1 sc (ap_global_ctx) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-990 5805 m
-gs 1 -1 sc (SSLModConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-4050 4455 m
-gs 1 -1 sc (SSL_CTX) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-4455 5355 m
-gs 1 -1 sc (server_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-3870 4905 m
-gs 1 -1 sc (SSLSrvConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-1845 4005 m
-gs 1 -1 sc (BUFF) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2070 3555 m
-gs 1 -1 sc (conn_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2295 3105 m
-gs 1 -1 sc (BIO) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2565 2655 m
-gs 1 -1 sc (SSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-3915 2070 m
-gs 1 -1 sc (request_rec) col0 sh gr
-$F2psEnd
-rs
-showpage
diff --git a/modules/ssl/config.m4 b/modules/ssl/config.m4
deleted file mode 100644
index 4c115761cb..0000000000
--- a/modules/ssl/config.m4
+++ /dev/null
@@ -1,126 +0,0 @@
-dnl Copyright 2001-2004 The Apache Software Foundation
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
-dnl
-dnl http://www.apache.org/licenses/LICENSE-2.0
-dnl
-dnl Unless required by applicable law or agreed to in writing, software
-dnl distributed under the License is distributed on an "AS IS" BASIS,
-dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-dnl See the License for the specific language governing permissions and
-dnl limitations under the License.
-
-AC_DEFUN([CHECK_DISTCACHE], [
- AC_MSG_CHECKING(whether Distcache is required)
- ap_ssltk_dc="no"
- tmp_nomessage=""
- tmp_forced="no"
- AC_ARG_ENABLE(distcache,
- APACHE_HELP_STRING(--enable-distcache,Select distcache support in mod_ssl),
- ap_ssltk_dc="$enableval"
- tmp_nomessage=""
- tmp_forced="yes"
- if test "x$ap_ssltk_dc" = "x"; then
- ap_ssltk_dc="yes"
- dnl our "error"s become "tests revealed that..."
- tmp_forced="no"
- fi
- if test "$ap_ssltk_dc" != "yes" -a "$ap_ssltk_dc" != "no"; then
- tmp_nomessage="--enable-distcache had illegal syntax - disabling"
- ap_ssltk_dc="no"
- fi)
- if test "$tmp_forced" = "no"; then
- AC_MSG_RESULT($ap_ssltk_dc (default))
- else
- AC_MSG_RESULT($ap_ssltk_dc (specified))
- fi
- if test "$tmp_forced" = "yes" -a "x$ap_ssltk_dc" = "xno" -a "x$tmp_nomessage" != "x"; then
- AC_MSG_ERROR(distcache support failed: $tmp_nomessage)
- fi
- if test "$ap_ssltk_dc" = "yes"; then
- AC_CHECK_HEADER(
- [distcache/dc_client.h],
- [],
- [tmp_nomessage="can't include distcache headers"
- ap_ssltk_dc="no"])
- if test "$tmp_forced" = "yes" -a "x$ap_ssltk_dc" = "xno"; then
- AC_MSG_ERROR(distcache support failed: $tmp_nomessage)
- fi
- fi
- if test "$ap_ssltk_dc" = "yes"; then
- AC_MSG_CHECKING(for Distcache version)
- AC_TRY_COMPILE(
-[#include <distcache/dc_client.h>],
-[#if DISTCACHE_CLIENT_API != 0x0001
-#error "distcache API version is unrecognised"
-#endif],
-[],
-[tmp_nomessage="distcache has an unsupported API version"
-ap_ssltk_dc="no"])
- AC_MSG_RESULT($ap_ssltk_dc)
- if test "$tmp_forced" = "yes" -a "x$ap_ssltk_dc" = "xno"; then
- AC_MSG_ERROR(distcache support failed: $tmp_nomessage)
- fi
- fi
- if test "$ap_ssltk_dc" = "yes"; then
- AC_MSG_CHECKING(for Distcache libraries)
- save_libs=$LIBS
- LIBS="$LIBS -ldistcache -lnal"
- AC_TRY_LINK(
- [#include <distcache/dc_client.h>],
- [DC_CTX *foo = DC_CTX_new((const char *)0,0);],
- [],
- [tmp_no_message="failed to link with distcache libraries"
- ap_ssltk_dc="no"])
- LIBS=$save_libs
- AC_MSG_RESULT($ap_ssltk_dc)
- if test "$tmp_forced" = "yes" -a "x$ap_ssltk_dc" = "xno"; then
- AC_MSG_ERROR(distcache support failed: $tmp_nomessage)
- else
- APR_ADDTO(MOD_SSL_LDADD, [-ldistcache -lnal])
- AC_DEFINE(HAVE_DISTCACHE, 1, [Define if distcache support is enabled])
- fi
- fi
-])
-
-dnl # start of module specific part
-APACHE_MODPATH_INIT(ssl)
-
-dnl # list of module object files
-ssl_objs="dnl
-mod_ssl.lo dnl
-ssl_engine_config.lo dnl
-ssl_engine_dh.lo dnl
-ssl_engine_init.lo dnl
-ssl_engine_io.lo dnl
-ssl_engine_kernel.lo dnl
-ssl_engine_log.lo dnl
-ssl_engine_mutex.lo dnl
-ssl_engine_pphrase.lo dnl
-ssl_engine_rand.lo dnl
-ssl_engine_vars.lo dnl
-ssl_expr.lo dnl
-ssl_expr_eval.lo dnl
-ssl_expr_parse.lo dnl
-ssl_expr_scan.lo dnl
-ssl_scache.lo dnl
-ssl_scache_dbm.lo dnl
-ssl_scache_shmcb.lo dnl
-ssl_scache_dc.lo dnl
-ssl_util.lo dnl
-ssl_util_ssl.lo dnl
-"
-dnl # hook module into the Autoconf mechanism (--enable-ssl option)
-APACHE_MODULE(ssl, [SSL/TLS support (mod_ssl)], $ssl_objs, , no, [
- APACHE_CHECK_SSL_TOOLKIT
- APR_SETVAR(MOD_SSL_LDADD, [\$(SSL_LIBS)])
- CHECK_DISTCACHE
-])
-
-# Ensure that other modules can pick up mod_ssl.h
-APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current])
-
-dnl # end of module specific part
-APACHE_MODPATH_FINISH
-
diff --git a/modules/ssl/mod_ssl.c b/modules/ssl/mod_ssl.c
deleted file mode 100644
index 0d93fea0ed..0000000000
--- a/modules/ssl/mod_ssl.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * mod_ssl.c
- * Apache API interface structures
- */
-
-#include "ssl_private.h"
-#include "mod_ssl.h"
-#include "util_md5.h"
-#include <assert.h>
-
-/*
- * the table of configuration directives we provide
- */
-
-#define SSL_CMD_ALL(name, args, desc) \
- AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \
- NULL, RSRC_CONF|OR_AUTHCFG, desc),
-
-#define SSL_CMD_SRV(name, args, desc) \
- AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \
- NULL, RSRC_CONF, desc),
-
-#define SSL_CMD_DIR(name, type, args, desc) \
- AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \
- NULL, OR_##type, desc),
-
-#define AP_END_CMD { NULL }
-
-const char ssl_valid_ssl_mutex_string[] =
- "Valid SSLMutex mechanisms are: `none', `default'"
-#if APR_HAS_FLOCK_SERIALIZE
- ", `flock:/path/to/file'"
-#endif
-#if APR_HAS_FCNTL_SERIALIZE
- ", `fcntl:/path/to/file'"
-#endif
-#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
- ", `sysvsem'"
-#endif
-#if APR_HAS_POSIXSEM_SERIALIZE
- ", `posixsem'"
-#endif
-#if APR_HAS_PROC_PTHREAD_SERIALIZE
- ", `pthread'"
-#endif
-#if APR_HAS_FLOCK_SERIALIZE || APR_HAS_FCNTL_SERIALIZE
- ", `file:/path/to/file'"
-#endif
-#if (APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)) || APR_HAS_POSIXSEM_SERIALIZE
- ", `sem'"
-#endif
- " ";
-
-static const command_rec ssl_config_cmds[] = {
- /*
- * Global (main-server) context configuration directives
- */
- SSL_CMD_SRV(Mutex, TAKE1, ssl_valid_ssl_mutex_string)
- SSL_CMD_SRV(PassPhraseDialog, TAKE1,
- "SSL dialog mechanism for the pass phrase query "
- "(`builtin', `|/path/to/pipe_program`, "
- "or `exec:/path/to/cgi_program')")
- SSL_CMD_SRV(SessionCache, TAKE1,
- "SSL Session Cache storage "
- "(`none', `dbm:/path/to/file')")
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
- SSL_CMD_SRV(CryptoDevice, TAKE1,
- "SSL external Crypto Device usage "
- "(`builtin', `...')")
-#endif
- SSL_CMD_SRV(RandomSeed, TAKE23,
- "SSL Pseudo Random Number Generator (PRNG) seeding source "
- "(`startup|connect builtin|file:/path|exec:/path [bytes]')")
-
- /*
- * Per-server context configuration directives
- */
- SSL_CMD_SRV(Engine, TAKE1,
- "SSL switch for the protocol engine "
- "(`on', `off')")
- SSL_CMD_ALL(CipherSuite, TAKE1,
- "Colon-delimited list of permitted SSL Ciphers "
- "(`XXX:...:XXX' - see manual)")
- SSL_CMD_SRV(CertificateFile, TAKE1,
- "SSL Server Certificate file "
- "(`/path/to/file' - PEM or DER encoded)")
- SSL_CMD_SRV(CertificateKeyFile, TAKE1,
- "SSL Server Private Key file "
- "(`/path/to/file' - PEM or DER encoded)")
- SSL_CMD_SRV(CertificateChainFile, TAKE1,
- "SSL Server CA Certificate Chain file "
- "(`/path/to/file' - PEM encoded)")
- SSL_CMD_ALL(CACertificatePath, TAKE1,
- "SSL CA Certificate path "
- "(`/path/to/dir' - contains PEM encoded files)")
- SSL_CMD_ALL(CACertificateFile, TAKE1,
- "SSL CA Certificate file "
- "(`/path/to/file' - PEM encoded)")
- SSL_CMD_SRV(CARevocationPath, TAKE1,
- "SSL CA Certificate Revocation List (CRL) path "
- "(`/path/to/dir' - contains PEM encoded files)")
- SSL_CMD_SRV(CARevocationFile, TAKE1,
- "SSL CA Certificate Revocation List (CRL) file "
- "(`/path/to/file' - PEM encoded)")
- SSL_CMD_ALL(VerifyClient, TAKE1,
- "SSL Client verify type "
- "(`none', `optional', `require', `optional_no_ca')")
- SSL_CMD_ALL(VerifyDepth, TAKE1,
- "SSL Client verify depth "
- "(`N' - number of intermediate certificates)")
- SSL_CMD_SRV(SessionCacheTimeout, TAKE1,
- "SSL Session Cache object lifetime "
- "(`N' - number of seconds)")
- SSL_CMD_SRV(Protocol, RAW_ARGS,
- "Enable or disable various SSL protocols"
- "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
- SSL_CMD_SRV(HonorCipherOrder, FLAG,
- "Use the server's cipher ordering preference")
- SSL_CMD_ALL(UserName, TAKE1,
- "Set user name to SSL variable value")
-
- /*
- * Proxy configuration for remote SSL connections
- */
- SSL_CMD_SRV(ProxyEngine, FLAG,
- "SSL switch for the proxy protocol engine "
- "(`on', `off')")
- SSL_CMD_SRV(ProxyProtocol, RAW_ARGS,
- "SSL Proxy: enable or disable SSL protocol flavors "
- "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
- SSL_CMD_SRV(ProxyCipherSuite, TAKE1,
- "SSL Proxy: colon-delimited list of permitted SSL ciphers "
- "(`XXX:...:XXX' - see manual)")
- SSL_CMD_SRV(ProxyVerify, TAKE1,
- "SSL Proxy: whether to verify the remote certificate "
- "(`on' or `off')")
- SSL_CMD_SRV(ProxyVerifyDepth, TAKE1,
- "SSL Proxy: maximum certificate verification depth "
- "(`N' - number of intermediate certificates)")
- SSL_CMD_SRV(ProxyCACertificateFile, TAKE1,
- "SSL Proxy: file containing server certificates "
- "(`/path/to/file' - PEM encoded certificates)")
- SSL_CMD_SRV(ProxyCACertificatePath, TAKE1,
- "SSL Proxy: directory containing server certificates "
- "(`/path/to/dir' - contains PEM encoded certificates)")
- SSL_CMD_SRV(ProxyCARevocationPath, TAKE1,
- "SSL Proxy: CA Certificate Revocation List (CRL) path "
- "(`/path/to/dir' - contains PEM encoded files)")
- SSL_CMD_SRV(ProxyCARevocationFile, TAKE1,
- "SSL Proxy: CA Certificate Revocation List (CRL) file "
- "(`/path/to/file' - PEM encoded)")
- SSL_CMD_SRV(ProxyMachineCertificateFile, TAKE1,
- "SSL Proxy: file containing client certificates "
- "(`/path/to/file' - PEM encoded certificates)")
- SSL_CMD_SRV(ProxyMachineCertificatePath, TAKE1,
- "SSL Proxy: directory containing client certificates "
- "(`/path/to/dir' - contains PEM encoded certificates)")
-
- /*
- * Per-directory context configuration directives
- */
- SSL_CMD_DIR(Options, OPTIONS, RAW_ARGS,
- "Set one or more options to configure the SSL engine"
- "(`[+-]option[=value] ...' - see manual)")
- SSL_CMD_DIR(RequireSSL, AUTHCFG, NO_ARGS,
- "Require the SSL protocol for the per-directory context "
- "(no arguments)")
- SSL_CMD_DIR(Require, AUTHCFG, RAW_ARGS,
- "Require a boolean expression to evaluate to true for granting access"
- "(arbitrary complex boolean expression - see manual)")
-
- /* Deprecated directives. */
- AP_INIT_RAW_ARGS("SSLLog", ap_set_deprecated, NULL, OR_ALL,
- "SSLLog directive is no longer supported - use ErrorLog."),
- AP_INIT_RAW_ARGS("SSLLogLevel", ap_set_deprecated, NULL, OR_ALL,
- "SSLLogLevel directive is no longer supported - use LogLevel."),
-
- AP_END_CMD
-};
-
-/*
- * the various processing hooks
- */
-static apr_status_t ssl_cleanup_pre_config(void *data)
-{
- /*
- * Try to kill the internals of the SSL library.
- */
-#ifdef HAVE_OPENSSL
-#if OPENSSL_VERSION_NUMBER >= 0x00907001
- /* Corresponds to OPENSSL_load_builtin_modules():
- * XXX: borrowed from apps.h, but why not CONF_modules_free()
- * which also invokes CONF_modules_finish()?
- */
- CONF_modules_unload(1);
-#endif
-#endif
- /* Corresponds to SSL_library_init: */
- EVP_cleanup();
-#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES
- ENGINE_cleanup();
-#endif
-#ifdef HAVE_OPENSSL
-#if OPENSSL_VERSION_NUMBER >= 0x00907001
- CRYPTO_cleanup_all_ex_data();
-#endif
-#endif
- ERR_remove_state(0);
-
- /* Don't call ERR_free_strings here; ERR_load_*_strings only
- * actually load the error strings once per process due to static
- * variable abuse in OpenSSL. */
-
- /*
- * TODO: determine somewhere we can safely shove out diagnostics
- * (when enabled) at this late stage in the game:
- * CRYPTO_mem_leaks_fp(stderr);
- */
- return APR_SUCCESS;
-}
-
-static int ssl_hook_pre_config(apr_pool_t *pconf,
- apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- /* We must register the library in full, to ensure our configuration
- * code can successfully test the SSL environment.
- */
- CRYPTO_malloc_init();
-#ifdef HAVE_OPENSSL
- ERR_load_crypto_strings();
-#endif
- SSL_load_error_strings();
- SSL_library_init();
-#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES
- ENGINE_load_builtin_engines();
-#endif
-#ifdef HAVE_OPENSSL
-#if OPENSSL_VERSION_NUMBER >= 0x00907001
- OPENSSL_load_builtin_modules();
-#endif
-#endif
-
- /*
- * Let us cleanup the ssl library when the module is unloaded
- */
- apr_pool_cleanup_register(pconf, NULL, ssl_cleanup_pre_config,
- apr_pool_cleanup_null);
-
- /* Register us to handle mod_log_config %c/%x variables */
- ssl_var_log_config_register(pconf);
-
- /* Register to handle mod_status status page generation */
- ssl_scache_status_register(pconf);
-
- return OK;
-}
-
-static SSLConnRec *ssl_init_connection_ctx(conn_rec *c)
-{
- SSLConnRec *sslconn = myConnConfig(c);
-
- if (sslconn) {
- return sslconn;
- }
-
- sslconn = apr_pcalloc(c->pool, sizeof(*sslconn));
-
- myConnConfigSet(c, sslconn);
-
- return sslconn;
-}
-
-int ssl_proxy_enable(conn_rec *c)
-{
- SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
-
- SSLConnRec *sslconn = ssl_init_connection_ctx(c);
-
- if (!sc->proxy_enabled) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, c->base_server,
- "SSL Proxy requested for %s but not enabled "
- "[Hint: SSLProxyEngine]", sc->vhost_id);
-
- return 0;
- }
-
- sslconn->is_proxy = 1;
- sslconn->disabled = 0;
-
- return 1;
-}
-
-int ssl_engine_disable(conn_rec *c)
-{
- SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
-
- SSLConnRec *sslconn;
-
- if (sc->enabled == SSL_ENABLED_FALSE) {
- return 0;
- }
-
- sslconn = ssl_init_connection_ctx(c);
-
- sslconn->disabled = 1;
-
- return 1;
-}
-
-int ssl_init_ssl_connection(conn_rec *c)
-{
- SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
- SSL *ssl;
- SSLConnRec *sslconn = myConnConfig(c);
- char *vhost_md5;
- modssl_ctx_t *mctx;
-
- /*
- * Seed the Pseudo Random Number Generator (PRNG)
- */
- ssl_rand_seed(c->base_server, c->pool, SSL_RSCTX_CONNECT, "");
-
- if (!sslconn) {
- sslconn = ssl_init_connection_ctx(c);
- }
-
- mctx = sslconn->is_proxy ? sc->proxy : sc->server;
-
- /*
- * Create a new SSL connection with the configured server SSL context and
- * attach this to the socket. Additionally we register this attachment
- * so we can detach later.
- */
- if (!(ssl = SSL_new(mctx->ssl_ctx))) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, c->base_server,
- "Unable to create a new SSL connection from the SSL "
- "context");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, c->base_server);
-
- c->aborted = 1;
-
- return DECLINED; /* XXX */
- }
-
- vhost_md5 = ap_md5_binary(c->pool, (unsigned char *)sc->vhost_id,
- sc->vhost_id_len);
-
- if (!SSL_set_session_id_context(ssl, (unsigned char *)vhost_md5,
- APR_MD5_DIGESTSIZE*2))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, c->base_server,
- "Unable to set session id context to `%s'", vhost_md5);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, c->base_server);
-
- c->aborted = 1;
-
- return DECLINED; /* XXX */
- }
-
- SSL_set_app_data(ssl, c);
- SSL_set_app_data2(ssl, NULL); /* will be request_rec */
-
- sslconn->ssl = ssl;
-
- /*
- * Configure callbacks for SSL connection
- */
- SSL_set_tmp_rsa_callback(ssl, ssl_callback_TmpRSA);
- SSL_set_tmp_dh_callback(ssl, ssl_callback_TmpDH);
-
- SSL_set_verify_result(ssl, X509_V_OK);
-
- ssl_io_filter_init(c, ssl);
-
- return APR_SUCCESS;
-}
-
-static const char *ssl_hook_http_method(const request_rec *r)
-{
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
- if (sc->enabled == SSL_ENABLED_FALSE) {
- return NULL;
- }
-
- return "https";
-}
-
-static apr_port_t ssl_hook_default_port(const request_rec *r)
-{
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
- if (sc->enabled == SSL_ENABLED_FALSE) {
- return 0;
- }
-
- return 443;
-}
-
-static int ssl_hook_pre_connection(conn_rec *c, void *csd)
-{
- SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
- SSLConnRec *sslconn = myConnConfig(c);
-
- /*
- * Immediately stop processing if SSL is disabled for this connection
- */
- if (!(sc && (sc->enabled == SSL_ENABLED_TRUE ||
- (sslconn && sslconn->is_proxy))))
- {
- return DECLINED;
- }
-
- /*
- * Create SSL context
- */
- if (!sslconn) {
- sslconn = ssl_init_connection_ctx(c);
- }
-
- if (sslconn->disabled) {
- return DECLINED;
- }
-
- /*
- * Remember the connection information for
- * later access inside callback functions
- */
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, c->base_server,
- "Connection to child %ld established "
- "(server %s, client %s)", c->id, sc->vhost_id,
- c->remote_ip ? c->remote_ip : "unknown");
-
- return ssl_init_ssl_connection(c);
-}
-
-
-static void ssl_hook_Insert_Filter(request_rec *r)
-{
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
- if (sc->enabled == SSL_ENABLED_OPTIONAL) {
- ap_add_output_filter("UPGRADE_FILTER", NULL, r, r->connection);
- }
-}
-
-/*
- * the module registration phase
- */
-
-static void ssl_register_hooks(apr_pool_t *p)
-{
- ssl_io_filter_register(p);
-
- ap_hook_pre_connection(ssl_hook_pre_connection,NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config (ssl_init_Module, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_http_method (ssl_hook_http_method, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_default_port (ssl_hook_default_port, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_pre_config (ssl_hook_pre_config, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_child_init (ssl_init_Child, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_translate_name(ssl_hook_Translate, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_check_user_id (ssl_hook_UserCheck, NULL,NULL, APR_HOOK_FIRST);
- ap_hook_fixups (ssl_hook_Fixup, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_access_checker(ssl_hook_Access, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_auth_checker (ssl_hook_Auth, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_post_read_request(ssl_hook_ReadReq, NULL,NULL, APR_HOOK_MIDDLE);
- ap_hook_insert_filter (ssl_hook_Insert_Filter, NULL,NULL, APR_HOOK_MIDDLE);
-/* ap_hook_handler (ssl_hook_Upgrade, NULL,NULL, APR_HOOK_MIDDLE); */
-
- ssl_var_register();
-
- APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable);
- APR_REGISTER_OPTIONAL_FN(ssl_engine_disable);
-}
-
-module AP_MODULE_DECLARE_DATA ssl_module = {
- STANDARD20_MODULE_STUFF,
- ssl_config_perdir_create, /* create per-dir config structures */
- ssl_config_perdir_merge, /* merge per-dir config structures */
- ssl_config_server_create, /* create per-server config structures */
- ssl_config_server_merge, /* merge per-server config structures */
- ssl_config_cmds, /* table of configuration directives */
- ssl_register_hooks /* register hooks */
-};
diff --git a/modules/ssl/mod_ssl.dsp b/modules/ssl/mod_ssl.dsp
deleted file mode 100644
index f0d6ec3089..0000000000
--- a/modules/ssl/mod_ssl.dsp
+++ /dev/null
@@ -1,328 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_ssl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_ssl - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_ssl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_ssl.mak" CFG="mod_ssl - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_ssl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_ssl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_ssl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE=1" /Fd"Release\mod_ssl_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_ssl.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so
-# ADD LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib advapi32.lib gdi32.lib ssleay32.lib libeay32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_ssl.so" /libpath:"../../srclib/openssl/out32dll" /libpath:"../../srclib/openssl/out32" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE=1" /Fd"Debug\mod_ssl_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_ssl.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so
-# ADD LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib advapi32.lib gdi32.lib ssleay32.lib libeay32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_ssl.so" /libpath:"../../srclib/openssl/out32dll.dbg" /libpath:"../../srclib/openssl/out32.dbg" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_ssl - Win32 Release"
-# Name "mod_ssl - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\mod_ssl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_dh.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_init.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_io.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_kernel.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_log.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_mutex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_pphrase.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_rand.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_vars.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_eval.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_parse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_scan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache_shmcb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache_dc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_ssl.c
-# End Source File
-# End Group
- # Begin Group "Header Files"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\mod_ssl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_parse.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_toolkit_compat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_ssl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_table.h
-# End Source File
-# End Group
-# Begin Group "Generated Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\ssl_expr_parse.y
-
-!IF "$(CFG)" == "mod_ssl - Win32 Release"
-
-# Begin Custom Build - Generating ssl_expr_parse.c/.h from ssl_expr_parse.y
-InputPath=.\ssl_expr_parse.y
-
-BuildCmds= \
- bison -y -d ssl_expr_parse.y \
- sed -e "s;yy;ssl_expr_yy;g" -e "/#if defined(c_plusplus) || defined(__cplusplus)/,/#endif/d" <y.tab.c >ssl_expr_parse.c \
- del y.tab.c \
- sed -e "s;yy;ssl_expr_yy;g" <y.tab.h >ssl_expr_parse.h \
- del y.tab.h \
-
-
-"ssl_expr_parse.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"ssl_expr_parse.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# Begin Custom Build - Generating ssl_expr_parse.c/.h from ssl_expr_parse.y
-InputPath=.\ssl_expr_parse.y
-
-BuildCmds= \
- bison -y -d ssl_expr_parse.y \
- sed -e "s;yy;ssl_expr_yy;g" -e "/#if defined(c_plusplus) || defined(__cplusplus)/,/#endif/d" <y.tab.c >ssl_expr_parse.c \
- del y.tab.c \
- sed -e "s;yy;ssl_expr_yy;g" <y.tab.h >ssl_expr_parse.h \
- del y.tab.h \
-
-
-"ssl_expr_parse.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-
-"ssl_expr_parse.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- $(BuildCmds)
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_scan.l
-
-!IF "$(CFG)" == "mod_ssl - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating ssl_expr_scan.c from ssl_expr_scan.l
-InputPath=.\ssl_expr_scan.l
-
-"ssl_expr_scan.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -Pssl_expr_yy -s -B ssl_expr_scan.l
- sed -e "/$$Header:/d" <lex.ssl_expr_yy.c >ssl_expr_scan.c
- del lex.ssl_expr_yy.c
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating ssl_expr_scan.c from ssl_expr_scan.l
-InputPath=.\ssl_expr_scan.l
-
-"ssl_expr_scan.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- flex -Pssl_expr_yy -s -B ssl_expr_scan.l
- sed -e "/$$Header:/d" <lex.ssl_expr_yy.c >ssl_expr_scan.c
- del lex.ssl_expr_yy.c
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_ssl.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_ssl - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ssl.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_ssl.so "ssl_module for Apache" ../../include/ap_release.h > .\mod_ssl.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ssl.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_ssl.so "ssl_module for Apache" ../../include/ap_release.h > .\mod_ssl.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/ssl/mod_ssl.h b/modules/ssl/mod_ssl.h
deleted file mode 100644
index c52ec3b723..0000000000
--- a/modules/ssl/mod_ssl.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __MOD_SSL_H__
-#define __MOD_SSL_H__
-
-#include "httpd.h"
-#include "apr_optional.h"
-
-/* The ssl_var_lookup() optional function retrieves SSL environment
- * variables. */
-APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,
- (apr_pool_t *, server_rec *,
- conn_rec *, request_rec *,
- char *));
-
-/* An optional function which returns non-zero if the given connection
- * is using SSL/TLS. */
-APR_DECLARE_OPTIONAL_FN(int, ssl_is_https, (conn_rec *));
-
-/* The ssl_proxy_enable() and ssl_engine_disable() optional functions
- * are used by mod_proxy to enable use of SSL for outgoing
- * connections. */
-
-APR_DECLARE_OPTIONAL_FN(int, ssl_proxy_enable, (conn_rec *));
-
-APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *));
-
-#endif /* __MOD_SSL_H__ */
diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c
deleted file mode 100644
index d43810929a..0000000000
--- a/modules/ssl/ssl_engine_config.c
+++ /dev/null
@@ -1,1383 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_config.c
- * Apache Configuration Directives
- */
- /* ``Damned if you do,
- damned if you don't.''
- -- Unknown */
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Support for Global Configuration
-** _________________________________________________________________
-*/
-
-#define SSL_MOD_CONFIG_KEY "ssl_module"
-
-SSLModConfigRec *ssl_config_global_create(server_rec *s)
-{
- apr_pool_t *pool = s->process->pool;
- SSLModConfigRec *mc;
- void *vmc;
-
- apr_pool_userdata_get(&vmc, SSL_MOD_CONFIG_KEY, pool);
- if (vmc) {
- return vmc; /* reused for lifetime of the server */
- }
-
- /*
- * allocate an own subpool which survives server restarts
- */
- mc = (SSLModConfigRec *)apr_palloc(pool, sizeof(*mc));
- mc->pPool = pool;
- mc->bFixed = FALSE;
-
- /*
- * initialize per-module configuration
- */
- mc->nSessionCacheMode = SSL_SCMODE_UNSET;
- mc->szSessionCacheDataFile = NULL;
- mc->nSessionCacheDataSize = 0;
- mc->pSessionCacheDataMM = NULL;
- mc->pSessionCacheDataRMM = NULL;
- mc->tSessionCacheDataTable = NULL;
- mc->nMutexMode = SSL_MUTEXMODE_UNSET;
- mc->nMutexMech = APR_LOCK_DEFAULT;
- mc->szMutexFile = NULL;
- mc->pMutex = NULL;
- mc->aRandSeed = apr_array_make(pool, 4,
- sizeof(ssl_randseed_t));
- mc->tVHostKeys = apr_hash_make(pool);
- mc->tPrivateKey = apr_hash_make(pool);
- mc->tPublicCert = apr_hash_make(pool);
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
- mc->szCryptoDevice = NULL;
-#endif
-
- memset(mc->pTmpKeys, 0, sizeof(mc->pTmpKeys));
-
- apr_pool_userdata_set(mc, SSL_MOD_CONFIG_KEY,
- apr_pool_cleanup_null,
- pool);
-
- return mc;
-}
-
-void ssl_config_global_fix(SSLModConfigRec *mc)
-{
- mc->bFixed = TRUE;
-}
-
-BOOL ssl_config_global_isfixed(SSLModConfigRec *mc)
-{
- return mc->bFixed;
-}
-
-/* _________________________________________________________________
-**
-** Configuration handling
-** _________________________________________________________________
-*/
-
-static void modssl_ctx_init(modssl_ctx_t *mctx)
-{
- mctx->sc = NULL; /* set during module init */
-
- mctx->ssl_ctx = NULL; /* set during module init */
-
- mctx->pks = NULL;
- mctx->pkp = NULL;
-
- mctx->protocol = SSL_PROTOCOL_ALL;
-
- mctx->pphrase_dialog_type = SSL_PPTYPE_UNSET;
- mctx->pphrase_dialog_path = NULL;
-
- mctx->cert_chain = NULL;
-
- mctx->crl_path = NULL;
- mctx->crl_file = NULL;
- mctx->crl = NULL; /* set during module init */
-
- mctx->auth.ca_cert_path = NULL;
- mctx->auth.ca_cert_file = NULL;
- mctx->auth.cipher_suite = NULL;
- mctx->auth.verify_depth = UNSET;
- mctx->auth.verify_mode = SSL_CVERIFY_UNSET;
-}
-
-static void modssl_ctx_init_proxy(SSLSrvConfigRec *sc,
- apr_pool_t *p)
-{
- modssl_ctx_t *mctx;
-
- mctx = sc->proxy = apr_palloc(p, sizeof(*sc->proxy));
-
- modssl_ctx_init(mctx);
-
- mctx->pkp = apr_palloc(p, sizeof(*mctx->pkp));
-
- mctx->pkp->cert_file = NULL;
- mctx->pkp->cert_path = NULL;
- mctx->pkp->certs = NULL;
-}
-
-static void modssl_ctx_init_server(SSLSrvConfigRec *sc,
- apr_pool_t *p)
-{
- modssl_ctx_t *mctx;
-
- mctx = sc->server = apr_palloc(p, sizeof(*sc->server));
-
- modssl_ctx_init(mctx);
-
- mctx->pks = apr_palloc(p, sizeof(*mctx->pks));
-
- memset((void*)mctx->pks->cert_files, 0, sizeof(mctx->pks->cert_files));
-
- memset((void*)mctx->pks->key_files, 0, sizeof(mctx->pks->key_files));
-
- /* certs/keys are set during module init */
-
- memset(mctx->pks->certs, 0, sizeof(mctx->pks->certs));
-
- memset(mctx->pks->keys, 0, sizeof(mctx->pks->keys));
-}
-
-static SSLSrvConfigRec *ssl_config_server_new(apr_pool_t *p)
-{
- SSLSrvConfigRec *sc = apr_palloc(p, sizeof(*sc));
-
- sc->mc = NULL;
- sc->enabled = SSL_ENABLED_FALSE;
- sc->proxy_enabled = UNSET;
- sc->vhost_id = NULL; /* set during module init */
- sc->vhost_id_len = 0; /* set during module init */
- sc->session_cache_timeout = UNSET;
- sc->cipher_server_pref = UNSET;
-
- modssl_ctx_init_proxy(sc, p);
-
- modssl_ctx_init_server(sc, p);
-
- return sc;
-}
-
-/*
- * Create per-server SSL configuration
- */
-void *ssl_config_server_create(apr_pool_t *p, server_rec *s)
-{
- SSLSrvConfigRec *sc = ssl_config_server_new(p);
-
- sc->mc = ssl_config_global_create(s);
-
- return sc;
-}
-
-#define cfgMerge(el,unset) mrg->el = (add->el == (unset)) ? base->el : add->el
-#define cfgMergeArray(el) mrg->el = apr_array_append(p, add->el, base->el)
-#define cfgMergeString(el) cfgMerge(el, NULL)
-#define cfgMergeBool(el) cfgMerge(el, UNSET)
-#define cfgMergeInt(el) cfgMerge(el, UNSET)
-
-static void modssl_ctx_cfg_merge(modssl_ctx_t *base,
- modssl_ctx_t *add,
- modssl_ctx_t *mrg)
-{
- cfgMerge(protocol, SSL_PROTOCOL_ALL);
-
- cfgMerge(pphrase_dialog_type, SSL_PPTYPE_UNSET);
- cfgMergeString(pphrase_dialog_path);
-
- cfgMergeString(cert_chain);
-
- cfgMerge(crl_path, NULL);
- cfgMerge(crl_file, NULL);
-
- cfgMergeString(auth.ca_cert_path);
- cfgMergeString(auth.ca_cert_file);
- cfgMergeString(auth.cipher_suite);
- cfgMergeInt(auth.verify_depth);
- cfgMerge(auth.verify_mode, SSL_CVERIFY_UNSET);
-}
-
-static void modssl_ctx_cfg_merge_proxy(modssl_ctx_t *base,
- modssl_ctx_t *add,
- modssl_ctx_t *mrg)
-{
- modssl_ctx_cfg_merge(base, add, mrg);
-
- cfgMergeString(pkp->cert_file);
- cfgMergeString(pkp->cert_path);
-}
-
-static void modssl_ctx_cfg_merge_server(modssl_ctx_t *base,
- modssl_ctx_t *add,
- modssl_ctx_t *mrg)
-{
- int i;
-
- modssl_ctx_cfg_merge(base, add, mrg);
-
- for (i = 0; i < SSL_AIDX_MAX; i++) {
- cfgMergeString(pks->cert_files[i]);
- cfgMergeString(pks->key_files[i]);
- }
-}
-
-/*
- * Merge per-server SSL configurations
- */
-void *ssl_config_server_merge(apr_pool_t *p, void *basev, void *addv)
-{
- SSLSrvConfigRec *base = (SSLSrvConfigRec *)basev;
- SSLSrvConfigRec *add = (SSLSrvConfigRec *)addv;
- SSLSrvConfigRec *mrg = ssl_config_server_new(p);
-
- cfgMerge(mc, NULL);
- cfgMerge(enabled, SSL_ENABLED_UNSET);
- cfgMergeBool(proxy_enabled);
- cfgMergeInt(session_cache_timeout);
- cfgMergeBool(cipher_server_pref);
-
- modssl_ctx_cfg_merge_proxy(base->proxy, add->proxy, mrg->proxy);
-
- modssl_ctx_cfg_merge_server(base->server, add->server, mrg->server);
-
- return mrg;
-}
-
-/*
- * Create per-directory SSL configuration
- */
-void *ssl_config_perdir_create(apr_pool_t *p, char *dir)
-{
- SSLDirConfigRec *dc = apr_palloc(p, sizeof(*dc));
-
- dc->bSSLRequired = FALSE;
- dc->aRequirement = apr_array_make(p, 4, sizeof(ssl_require_t));
- dc->nOptions = SSL_OPT_NONE|SSL_OPT_RELSET;
- dc->nOptionsAdd = SSL_OPT_NONE;
- dc->nOptionsDel = SSL_OPT_NONE;
-
- dc->szCipherSuite = NULL;
- dc->nVerifyClient = SSL_CVERIFY_UNSET;
- dc->nVerifyDepth = UNSET;
-
- dc->szCACertificatePath = NULL;
- dc->szCACertificateFile = NULL;
- dc->szUserName = NULL;
-
- return dc;
-}
-
-/*
- * Merge per-directory SSL configurations
- */
-void *ssl_config_perdir_merge(apr_pool_t *p, void *basev, void *addv)
-{
- SSLDirConfigRec *base = (SSLDirConfigRec *)basev;
- SSLDirConfigRec *add = (SSLDirConfigRec *)addv;
- SSLDirConfigRec *mrg = (SSLDirConfigRec *)apr_palloc(p, sizeof(*mrg));
-
- cfgMerge(bSSLRequired, FALSE);
- cfgMergeArray(aRequirement);
-
- if (add->nOptions & SSL_OPT_RELSET) {
- mrg->nOptionsAdd =
- (base->nOptionsAdd & ~(add->nOptionsDel)) | add->nOptionsAdd;
- mrg->nOptionsDel =
- (base->nOptionsDel & ~(add->nOptionsAdd)) | add->nOptionsDel;
- mrg->nOptions =
- (base->nOptions & ~(mrg->nOptionsDel)) | mrg->nOptionsAdd;
- }
- else {
- mrg->nOptions = add->nOptions;
- mrg->nOptionsAdd = add->nOptionsAdd;
- mrg->nOptionsDel = add->nOptionsDel;
- }
-
- cfgMergeString(szCipherSuite);
- cfgMerge(nVerifyClient, SSL_CVERIFY_UNSET);
- cfgMergeInt(nVerifyDepth);
-
- cfgMergeString(szCACertificatePath);
- cfgMergeString(szCACertificateFile);
- cfgMergeString(szUserName);
-
- return mrg;
-}
-
-/*
- * Configuration functions for particular directives
- */
-
-const char *ssl_cmd_SSLMutex(cmd_parms *cmd,
- void *dcfg,
- const char *arg_)
-{
- const char *err;
- SSLModConfigRec *mc = myModConfig(cmd->server);
- /* Split arg_ into meth and file */
- char *meth = apr_pstrdup(cmd->temp_pool, arg_);
- char *file = strchr(meth, ':');
- if (file) {
- *(file++) = '\0';
- if (!*file) {
- file = NULL;
- }
- }
-
- if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
- return err;
- }
-
- if (ssl_config_global_isfixed(mc)) {
- return NULL;
- }
- if (!strcasecmp(meth, "none") || !strcasecmp(meth, "no")) {
- mc->nMutexMode = SSL_MUTEXMODE_NONE;
- return NULL;
- }
-
- /* APR determines temporary filename unless overridden below,
- * we presume file indicates an szMutexFile is a file path
- * unless the method sets szMutexFile=file and NULLs file
- */
- mc->nMutexMode = SSL_MUTEXMODE_USED;
- mc->szMutexFile = NULL;
-
- /* NOTE: previously, 'yes' implied 'sem' */
- if (!strcasecmp(meth, "default") || !strcasecmp(meth, "yes")) {
- mc->nMutexMech = APR_LOCK_DEFAULT;
- }
-#if APR_HAS_FCNTL_SERIALIZE
- else if ((!strcasecmp(meth, "fcntl") || !strcasecmp(meth, "file")) && file) {
- mc->nMutexMech = APR_LOCK_FCNTL;
- }
-#endif
-#if APR_HAS_FLOCK_SERIALIZE
- else if ((!strcasecmp(meth, "flock") || !strcasecmp(meth, "file")) && file) {
- mc->nMutexMech = APR_LOCK_FLOCK;
- }
-#endif
-#if APR_HAS_POSIXSEM_SERIALIZE
- else if (!strcasecmp(meth, "posixsem") || !strcasecmp(meth, "sem")) {
- mc->nMutexMech = APR_LOCK_POSIXSEM;
- /* Posix/SysV semaphores aren't file based, use the literal name
- * if provided and fall back on APR's default if not. Today, APR
- * will ignore it, but once supported it has an absurdly short limit.
- */
- if (file) {
- mc->szMutexFile = apr_pstrdup(cmd->server->process->pool, file);
-
- file = NULL;
- }
- }
-#endif
-#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
- else if (!strcasecmp(meth, "sysvsem") || !strcasecmp(meth, "sem")) {
- mc->nMutexMech = APR_LOCK_SYSVSEM;
- }
-#endif
-#if APR_HAS_PROC_PTHREAD_SERIALIZE
- else if (!strcasecmp(meth, "pthread")) {
- mc->nMutexMech = APR_LOCK_PROC_PTHREAD;
- }
-#endif
- else {
- return apr_pstrcat(cmd->pool, "Invalid SSLMutex argument ", arg_,
- " (", ssl_valid_ssl_mutex_string, ")", NULL);
- }
-
- /* Unless the method above assumed responsibility for setting up
- * mc->szMutexFile and NULLing out file, presume it is a file we
- * are looking to use
- */
- if (file) {
- mc->szMutexFile = ap_server_root_relative(cmd->server->process->pool, file);
- if (!mc->szMutexFile) {
- return apr_pstrcat(cmd->pool, "Invalid SSLMutex ", meth,
- ": filepath ", file, NULL);
- }
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLPassPhraseDialog(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
- int arglen = strlen(arg);
-
- if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
- return err;
- }
-
- if (strcEQ(arg, "builtin")) {
- sc->server->pphrase_dialog_type = SSL_PPTYPE_BUILTIN;
- sc->server->pphrase_dialog_path = NULL;
- }
- else if ((arglen > 5) && strEQn(arg, "exec:", 5)) {
- sc->server->pphrase_dialog_type = SSL_PPTYPE_FILTER;
- /* ### This is broken, exec: may contain args, no? */
- sc->server->pphrase_dialog_path =
- ap_server_root_relative(cmd->pool, arg+5);
- if (!sc->server->pphrase_dialog_path) {
- return apr_pstrcat(cmd->pool,
- "Invalid SSLPassPhraseDialog exec: path ",
- arg+5, NULL);
- }
- if (!ssl_util_path_check(SSL_PCM_EXISTS,
- sc->server->pphrase_dialog_path,
- cmd->pool))
- {
- return apr_pstrcat(cmd->pool,
- "SSLPassPhraseDialog: file '",
- sc->server->pphrase_dialog_path,
- "' does not exist", NULL);
- }
-
- }
- else if ((arglen > 1) && (arg[0] == '|')) {
- sc->server->pphrase_dialog_type = SSL_PPTYPE_PIPE;
- sc->server->pphrase_dialog_path = arg + 1;
- }
- else {
- return "SSLPassPhraseDialog: Invalid argument";
- }
-
- return NULL;
-}
-
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
-const char *ssl_cmd_SSLCryptoDevice(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLModConfigRec *mc = myModConfig(cmd->server);
- const char *err;
- ENGINE *e;
-
- if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
- return err;
- }
-
- if (strcEQ(arg, "builtin")) {
- mc->szCryptoDevice = NULL;
- }
- else if ((e = ENGINE_by_id(arg))) {
- mc->szCryptoDevice = arg;
- ENGINE_free(e);
- }
- else {
- err = "SSLCryptoDevice: Invalid argument; must be one of: "
- "'builtin' (none)";
- e = ENGINE_get_first();
- while (e) {
- ENGINE *en;
- err = apr_pstrcat(cmd->pool, err, ", '", ENGINE_get_id(e),
- "' (", ENGINE_get_name(e), ")", NULL);
- en = ENGINE_get_next(e);
- ENGINE_free(e);
- e = en;
- }
- return err;
- }
-
- return NULL;
-}
-#endif
-
-const char *ssl_cmd_SSLRandomSeed(cmd_parms *cmd,
- void *dcfg,
- const char *arg1,
- const char *arg2,
- const char *arg3)
-{
- SSLModConfigRec *mc = myModConfig(cmd->server);
- const char *err;
- ssl_randseed_t *seed;
- int arg2len = strlen(arg2);
-
- if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
- return err;
- }
-
- if (ssl_config_global_isfixed(mc)) {
- return NULL;
- }
-
- seed = apr_array_push(mc->aRandSeed);
-
- if (strcEQ(arg1, "startup")) {
- seed->nCtx = SSL_RSCTX_STARTUP;
- }
- else if (strcEQ(arg1, "connect")) {
- seed->nCtx = SSL_RSCTX_CONNECT;
- }
- else {
- return apr_pstrcat(cmd->pool, "SSLRandomSeed: "
- "invalid context: `", arg1, "'",
- NULL);
- }
-
- if ((arg2len > 5) && strEQn(arg2, "file:", 5)) {
- seed->nSrc = SSL_RSSRC_FILE;
- seed->cpPath = ap_server_root_relative(mc->pPool, arg2+5);
- }
- else if ((arg2len > 5) && strEQn(arg2, "exec:", 5)) {
- seed->nSrc = SSL_RSSRC_EXEC;
- seed->cpPath = ap_server_root_relative(mc->pPool, arg2+5);
- }
- else if ((arg2len > 4) && strEQn(arg2, "egd:", 4)) {
-#ifdef HAVE_SSL_RAND_EGD
- seed->nSrc = SSL_RSSRC_EGD;
- seed->cpPath = ap_server_root_relative(mc->pPool, arg2+4);
-#else
- return "egd not supported with this SSL toolkit";
-#endif
- }
- else if (strcEQ(arg2, "builtin")) {
- seed->nSrc = SSL_RSSRC_BUILTIN;
- seed->cpPath = NULL;
- }
- else {
- seed->nSrc = SSL_RSSRC_FILE;
- seed->cpPath = ap_server_root_relative(mc->pPool, arg2);
- }
-
- if (seed->nSrc != SSL_RSSRC_BUILTIN) {
- if (!seed->cpPath) {
- return apr_pstrcat(cmd->pool,
- "Invalid SSLRandomSeed path ",
- arg2, NULL);
- }
- if (!ssl_util_path_check(SSL_PCM_EXISTS, seed->cpPath, cmd->pool)) {
- return apr_pstrcat(cmd->pool,
- "SSLRandomSeed: source path '",
- seed->cpPath, "' does not exist", NULL);
- }
- }
-
- if (!arg3) {
- seed->nBytes = 0; /* read whole file */
- }
- else {
- if (seed->nSrc == SSL_RSSRC_BUILTIN) {
- return "SSLRandomSeed: byte specification not "
- "allowed for builtin seed source";
- }
-
- seed->nBytes = atoi(arg3);
-
- if (seed->nBytes < 0) {
- return "SSLRandomSeed: invalid number of bytes specified";
- }
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLEngine(cmd_parms *cmd, void *dcfg, const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
- if (!strcasecmp(arg, "On")) {
- sc->enabled = SSL_ENABLED_TRUE;
- return NULL;
- }
- else if (!strcasecmp(arg, "Off")) {
- sc->enabled = SSL_ENABLED_FALSE;
- return NULL;
- }
- else if (!strcasecmp(arg, "Optional")) {
- sc->enabled = SSL_ENABLED_OPTIONAL;
- return NULL;
- }
-
- return "Argument must be On, Off, or Optional";
-}
-
-const char *ssl_cmd_SSLCipherSuite(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
-
- if (cmd->path) {
- dc->szCipherSuite = arg;
- }
- else {
- sc->server->auth.cipher_suite = arg;
- }
-
- return NULL;
-}
-
-#define SSL_FLAGS_CHECK_FILE \
- (SSL_PCM_EXISTS|SSL_PCM_ISREG|SSL_PCM_ISNONZERO)
-
-#define SSL_FLAGS_CHECK_DIR \
- (SSL_PCM_EXISTS|SSL_PCM_ISDIR)
-
-static const char *ssl_cmd_check_file(cmd_parms *parms,
- const char **file)
-{
- const char *filepath = ap_server_root_relative(parms->pool, *file);
-
- if (!filepath) {
- return apr_pstrcat(parms->pool, parms->cmd->name,
- ": Invalid file path ", *file, NULL);
- }
- *file = filepath;
-
- if (ssl_util_path_check(SSL_FLAGS_CHECK_FILE, *file, parms->pool)) {
- return NULL;
- }
-
- return apr_pstrcat(parms->pool, parms->cmd->name,
- ": file '", *file,
- "' does not exist or is empty", NULL);
-
-}
-
-const char *ssl_cmd_SSLHonorCipherOrder(cmd_parms *cmd, void *dcfg, int flag)
-{
-#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- sc->cipher_server_pref = flag?TRUE:FALSE;
- return NULL;
-#else
- return "SSLHonorCiperOrder unsupported; not implemented by the SSL library";
-#endif
-}
-
-static const char *ssl_cmd_check_dir(cmd_parms *parms,
- const char **dir)
-{
- const char *dirpath = ap_server_root_relative(parms->pool, *dir);
-
- if (!dirpath) {
- return apr_pstrcat(parms->pool, parms->cmd->name,
- ": Invalid dir path ", *dir, NULL);
- }
- *dir = dirpath;
-
- if (ssl_util_path_check(SSL_FLAGS_CHECK_DIR, *dir, parms->pool)) {
- return NULL;
- }
-
- return apr_pstrcat(parms->pool, parms->cmd->name,
- ": directory '", *dir,
- "' does not exist", NULL);
-
-}
-
-#define SSL_AIDX_CERTS 1
-#define SSL_AIDX_KEYS 2
-
-static const char *ssl_cmd_check_aidx_max(cmd_parms *parms,
- const char *arg,
- int idx)
-{
- SSLSrvConfigRec *sc = mySrvConfig(parms->server);
- const char *err, *desc=NULL, **files=NULL;
- int i;
-
- if ((err = ssl_cmd_check_file(parms, &arg))) {
- return err;
- }
-
- switch (idx) {
- case SSL_AIDX_CERTS:
- desc = "certificates";
- files = sc->server->pks->cert_files;
- break;
- case SSL_AIDX_KEYS:
- desc = "private keys";
- files = sc->server->pks->key_files;
- break;
- }
-
- for (i = 0; i < SSL_AIDX_MAX; i++) {
- if (!files[i]) {
- files[i] = arg;
- return NULL;
- }
- }
-
- return apr_psprintf(parms->pool,
- "%s: only up to %d "
- "different %s per virtual host allowed",
- parms->cmd->name, SSL_AIDX_MAX, desc);
-}
-
-const char *ssl_cmd_SSLCertificateFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
-
- const char *err;
-
- if ((err = ssl_cmd_check_aidx_max(cmd, arg, SSL_AIDX_CERTS))) {
- return err;
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLCertificateKeyFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- const char *err;
-
- if ((err = ssl_cmd_check_aidx_max(cmd, arg, SSL_AIDX_KEYS))) {
- return err;
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLCertificateChainFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_file(cmd, &arg))) {
- return err;
- }
-
- sc->server->cert_chain = arg;
-
- return NULL;
-}
-
-#define NO_PER_DIR_SSL_CA \
- "Your ssl library does not have support for per-directory CA"
-
-#ifdef HAVE_SSL_SET_CERT_STORE
-# define MODSSL_HAVE_SSL_SET_CERT_STORE 1
-#else
-# define MODSSL_HAVE_SSL_SET_CERT_STORE 0
-#endif
-
-#define MODSSL_SET_CA(f) \
- if (cmd->path) \
- if (MODSSL_HAVE_SSL_SET_CERT_STORE) \
- dc->f = arg; \
- else \
- return NO_PER_DIR_SSL_CA; \
- else \
- sc->f = arg \
-
-const char *ssl_cmd_SSLCACertificatePath(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- /*SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;*/
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_dir(cmd, &arg))) {
- return err;
- }
-
- /* XXX: bring back per-dir */
- sc->server->auth.ca_cert_path = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLCACertificateFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- /*SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;*/
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_file(cmd, &arg))) {
- return err;
- }
-
- /* XXX: bring back per-dir */
- sc->server->auth.ca_cert_file = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLCARevocationPath(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_dir(cmd, &arg))) {
- return err;
- }
-
- sc->server->crl_path = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLCARevocationFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_file(cmd, &arg))) {
- return err;
- }
-
- sc->server->crl_file = arg;
-
- return NULL;
-}
-
-static const char *ssl_cmd_verify_parse(cmd_parms *parms,
- const char *arg,
- ssl_verify_t *id)
-{
- if (strcEQ(arg, "none") || strcEQ(arg, "off")) {
- *id = SSL_CVERIFY_NONE;
- }
- else if (strcEQ(arg, "optional")) {
- *id = SSL_CVERIFY_OPTIONAL;
- }
- else if (strcEQ(arg, "require") || strcEQ(arg, "on")) {
- *id = SSL_CVERIFY_REQUIRE;
- }
- else if (strcEQ(arg, "optional_no_ca")) {
- *id = SSL_CVERIFY_OPTIONAL_NO_CA;
- }
- else {
- return apr_pstrcat(parms->temp_pool, parms->cmd->name,
- ": Invalid argument '", arg, "'",
- NULL);
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLVerifyClient(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- ssl_verify_t mode;
- const char *err;
-
- if ((err = ssl_cmd_verify_parse(cmd, arg, &mode))) {
- return err;
- }
-
- if (cmd->path) {
- dc->nVerifyClient = mode;
- }
- else {
- sc->server->auth.verify_mode = mode;
- }
-
- return NULL;
-}
-
-static const char *ssl_cmd_verify_depth_parse(cmd_parms *parms,
- const char *arg,
- int *depth)
-{
- if ((*depth = atoi(arg)) >= 0) {
- return NULL;
- }
-
- return apr_pstrcat(parms->temp_pool, parms->cmd->name,
- ": Invalid argument '", arg, "'",
- NULL);
-}
-
-const char *ssl_cmd_SSLVerifyDepth(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- int depth;
- const char *err;
-
- if ((err = ssl_cmd_verify_depth_parse(cmd, arg, &depth))) {
- return err;
- }
-
- if (cmd->path) {
- dc->nVerifyDepth = depth;
- }
- else {
- sc->server->auth.verify_depth = depth;
- }
-
- return NULL;
-}
-
-#define MODSSL_NO_SHARED_MEMORY_ERROR \
- "SSLSessionCache: shared memory cache not useable on this platform"
-
-const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLModConfigRec *mc = myModConfig(cmd->server);
- const char *err, *colon;
- char *cp, *cp2;
- int arglen = strlen(arg);
-
- if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
- return err;
- }
-
- if (ssl_config_global_isfixed(mc)) {
- return NULL;
- }
-
- if (strcEQ(arg, "none")) {
- mc->nSessionCacheMode = SSL_SCMODE_NONE;
- mc->szSessionCacheDataFile = NULL;
- }
- else if ((arglen > 4) && strcEQn(arg, "dbm:", 4)) {
- mc->nSessionCacheMode = SSL_SCMODE_DBM;
- mc->szSessionCacheDataFile = ap_server_root_relative(mc->pPool, arg+4);
- if (!mc->szSessionCacheDataFile) {
- return apr_psprintf(cmd->pool,
- "SSLSessionCache: Invalid cache file path %s",
- arg+4);
- }
- }
- else if (((arglen > 4) && strcEQn(arg, "shm:", 4)) ||
- ((arglen > 6) && strcEQn(arg, "shmht:", 6)) ||
- ((arglen > 6) && strcEQn(arg, "shmcb:", 6))) {
-#if !APR_HAS_SHARED_MEMORY
- return MODSSL_NO_SHARED_MEMORY_ERROR;
-#endif
- mc->nSessionCacheMode = SSL_SCMODE_SHMCB;
- colon = ap_strchr_c(arg, ':');
- mc->szSessionCacheDataFile =
- ap_server_root_relative(mc->pPool, colon+1);
- if (!mc->szSessionCacheDataFile) {
- return apr_psprintf(cmd->pool,
- "SSLSessionCache: Invalid cache file path %s",
- colon+1);
- }
- mc->tSessionCacheDataTable = NULL;
- mc->nSessionCacheDataSize = 1024*512; /* 512KB */
-
- if ((cp = strchr(mc->szSessionCacheDataFile, '('))) {
- *cp++ = NUL;
-
- if (!(cp2 = strchr(cp, ')'))) {
- return "SSLSessionCache: Invalid argument: "
- "no closing parenthesis";
- }
-
- *cp2 = NUL;
-
- mc->nSessionCacheDataSize = atoi(cp);
-
- if (mc->nSessionCacheDataSize < 8192) {
- return "SSLSessionCache: Invalid argument: "
- "size has to be >= 8192 bytes";
-
- }
-
- if (mc->nSessionCacheDataSize >= APR_SHM_MAXSIZE) {
- return apr_psprintf(cmd->pool,
- "SSLSessionCache: Invalid argument: "
- "size has to be < %d bytes on this "
- "platform", APR_SHM_MAXSIZE);
-
- }
- }
- }
- else if ((arglen > 3) && strcEQn(arg, "dc:", 3)) {
-#ifdef HAVE_DISTCACHE
- mc->nSessionCacheMode = SSL_SCMODE_DC;
- mc->szSessionCacheDataFile = apr_pstrdup(mc->pPool, arg+3);
- if (!mc->szSessionCacheDataFile) {
- return apr_pstrcat(cmd->pool,
- "SSLSessionCache: Invalid cache file path: ",
- arg+3, NULL);
- }
-#else
- return "SSLSessionCache: distcache support disabled";
-#endif
- }
- else {
- return "SSLSessionCache: Invalid argument";
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLSessionCacheTimeout(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
- sc->session_cache_timeout = atoi(arg);
-
- if (sc->session_cache_timeout < 0) {
- return "SSLSessionCacheTimeout: Invalid argument";
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLOptions(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
- ssl_opt_t opt;
- int first = TRUE;
- char action, *w;
-
- while (*arg) {
- w = ap_getword_conf(cmd->pool, &arg);
- action = NUL;
-
- if ((*w == '+') || (*w == '-')) {
- action = *(w++);
- }
- else if (first) {
- dc->nOptions = SSL_OPT_NONE;
- first = FALSE;
- }
-
- if (strcEQ(w, "StdEnvVars")) {
- opt = SSL_OPT_STDENVVARS;
- }
- else if (strcEQ(w, "ExportCertData")) {
- opt = SSL_OPT_EXPORTCERTDATA;
- }
- else if (strcEQ(w, "FakeBasicAuth")) {
- opt = SSL_OPT_FAKEBASICAUTH;
- }
- else if (strcEQ(w, "StrictRequire")) {
- opt = SSL_OPT_STRICTREQUIRE;
- }
- else if (strcEQ(w, "OptRenegotiate")) {
- opt = SSL_OPT_OPTRENEGOTIATE;
- }
- else {
- return apr_pstrcat(cmd->pool,
- "SSLOptions: Illegal option '", w, "'",
- NULL);
- }
-
- if (action == '-') {
- dc->nOptionsAdd &= ~opt;
- dc->nOptionsDel |= opt;
- dc->nOptions &= ~opt;
- }
- else if (action == '+') {
- dc->nOptionsAdd |= opt;
- dc->nOptionsDel &= ~opt;
- dc->nOptions |= opt;
- }
- else {
- dc->nOptions = opt;
- dc->nOptionsAdd = opt;
- dc->nOptionsDel = SSL_OPT_NONE;
- }
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLRequireSSL(cmd_parms *cmd, void *dcfg)
-{
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
-
- dc->bSSLRequired = TRUE;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLRequire(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
- ssl_expr *expr;
- ssl_require_t *require;
-
- if (!(expr = ssl_expr_comp(cmd->pool, (char *)arg))) {
- return apr_pstrcat(cmd->pool, "SSLRequire: ",
- ssl_expr_get_error(), NULL);
- }
-
- require = apr_array_push(dc->aRequirement);
- require->cpExpr = apr_pstrdup(cmd->pool, arg);
- require->mpExpr = expr;
-
- return NULL;
-}
-
-static const char *ssl_cmd_protocol_parse(cmd_parms *parms,
- const char *arg,
- ssl_proto_t *options)
-{
- ssl_proto_t thisopt;
-
- *options = SSL_PROTOCOL_NONE;
-
- while (*arg) {
- char *w = ap_getword_conf(parms->temp_pool, &arg);
- char action = '\0';
-
- if ((*w == '+') || (*w == '-')) {
- action = *(w++);
- }
-
- if (strcEQ(w, "SSLv2")) {
- thisopt = SSL_PROTOCOL_SSLV2;
- }
- else if (strcEQ(w, "SSLv3")) {
- thisopt = SSL_PROTOCOL_SSLV3;
- }
- else if (strcEQ(w, "TLSv1")) {
- thisopt = SSL_PROTOCOL_TLSV1;
- }
- else if (strcEQ(w, "all")) {
- thisopt = SSL_PROTOCOL_ALL;
- }
- else {
- return apr_pstrcat(parms->temp_pool,
- parms->cmd->name,
- ": Illegal protocol '",
- w, "'", NULL);
- }
-
- if (action == '-') {
- *options &= ~thisopt;
- }
- else if (action == '+') {
- *options |= thisopt;
- }
- else {
- *options = thisopt;
- }
- }
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProtocol(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
- return ssl_cmd_protocol_parse(cmd, arg, &sc->server->protocol);
-}
-
-const char *ssl_cmd_SSLProxyEngine(cmd_parms *cmd, void *dcfg, int flag)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
- sc->proxy_enabled = flag ? TRUE : FALSE;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyProtocol(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
- return ssl_cmd_protocol_parse(cmd, arg, &sc->proxy->protocol);
-}
-
-const char *ssl_cmd_SSLProxyCipherSuite(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
- sc->proxy->auth.cipher_suite = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyVerify(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- ssl_verify_t mode;
- const char *err;
-
- if ((err = ssl_cmd_verify_parse(cmd, arg, &mode))) {
- return err;
- }
-
- sc->proxy->auth.verify_mode = mode;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- int depth;
- const char *err;
-
- if ((err = ssl_cmd_verify_depth_parse(cmd, arg, &depth))) {
- return err;
- }
-
- sc->proxy->auth.verify_depth = depth;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_file(cmd, &arg))) {
- return err;
- }
-
- sc->proxy->auth.ca_cert_file = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_dir(cmd, &arg))) {
- return err;
- }
-
- sc->proxy->auth.ca_cert_path = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyCARevocationPath(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_dir(cmd, &arg))) {
- return err;
- }
-
- sc->proxy->crl_path = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyCARevocationFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_file(cmd, &arg))) {
- return err;
- }
-
- sc->proxy->crl_file = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_file(cmd, &arg))) {
- return err;
- }
-
- sc->proxy->pkp->cert_file = arg;
-
- return NULL;
-}
-
-const char *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *cmd,
- void *dcfg,
- const char *arg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
- const char *err;
-
- if ((err = ssl_cmd_check_dir(cmd, &arg))) {
- return err;
- }
-
- sc->proxy->pkp->cert_path = arg;
-
- return NULL;
-}
-
-
-const char *ssl_cmd_SSLUserName(cmd_parms *cmd, void *dcfg,
- const char *arg)
-{
- SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;
- dc->szUserName = arg;
- return NULL;
-}
diff --git a/modules/ssl/ssl_engine_dh.c b/modules/ssl/ssl_engine_dh.c
deleted file mode 100644
index 3121b65631..0000000000
--- a/modules/ssl/ssl_engine_dh.c
+++ /dev/null
@@ -1,207 +0,0 @@
-#if 0
-=pod
-#endif
-
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_dh.c
- * Diffie-Hellman Built-in Temporary Parameters
- */
-
-#include "ssl_private.h"
-
-/* ----BEGIN GENERATED SECTION-------- */
-
-/*
-** Diffie-Hellman-Parameters: (512 bit)
-** prime:
-** 00:d4:bc:d5:24:06:f6:9b:35:99:4b:88:de:5d:b8:
-** 96:82:c8:15:7f:62:d8:f3:36:33:ee:57:72:f1:1f:
-** 05:ab:22:d6:b5:14:5b:9f:24:1e:5a:cc:31:ff:09:
-** 0a:4b:c7:11:48:97:6f:76:79:50:94:e7:1e:79:03:
-** 52:9f:5a:82:4b
-** generator: 2 (0x2)
-** Diffie-Hellman-Parameters: (1024 bit)
-** prime:
-** 00:e6:96:9d:3d:49:5b:e3:2c:7c:f1:80:c3:bd:d4:
-** 79:8e:91:b7:81:82:51:bb:05:5e:2a:20:64:90:4a:
-** 79:a7:70:fa:15:a2:59:cb:d5:23:a6:a6:ef:09:c4:
-** 30:48:d5:a2:2f:97:1f:3c:20:12:9b:48:00:0e:6e:
-** dd:06:1c:bc:05:3e:37:1d:79:4e:53:27:df:61:1e:
-** bb:be:1b:ac:9b:5c:60:44:cf:02:3d:76:e0:5e:ea:
-** 9b:ad:99:1b:13:a6:3c:97:4e:9e:f1:83:9e:b5:db:
-** 12:51:36:f7:26:2e:56:a8:87:15:38:df:d8:23:c6:
-** 50:50:85:e2:1f:0d:d5:c8:6b
-** generator: 2 (0x2)
-*/
-
-static unsigned char dh512_p[] =
-{
- 0xD4, 0xBC, 0xD5, 0x24, 0x06, 0xF6, 0x9B, 0x35, 0x99, 0x4B, 0x88, 0xDE,
- 0x5D, 0xB8, 0x96, 0x82, 0xC8, 0x15, 0x7F, 0x62, 0xD8, 0xF3, 0x36, 0x33,
- 0xEE, 0x57, 0x72, 0xF1, 0x1F, 0x05, 0xAB, 0x22, 0xD6, 0xB5, 0x14, 0x5B,
- 0x9F, 0x24, 0x1E, 0x5A, 0xCC, 0x31, 0xFF, 0x09, 0x0A, 0x4B, 0xC7, 0x11,
- 0x48, 0x97, 0x6F, 0x76, 0x79, 0x50, 0x94, 0xE7, 0x1E, 0x79, 0x03, 0x52,
- 0x9F, 0x5A, 0x82, 0x4B,
-};
-static unsigned char dh512_g[] =
-{
- 0x02,
-};
-
-static DH *get_dh512(void)
-{
- return modssl_dh_configure(dh512_p, sizeof(dh512_p),
- dh512_g, sizeof(dh512_g));
-}
-
-static unsigned char dh1024_p[] =
-{
- 0xE6, 0x96, 0x9D, 0x3D, 0x49, 0x5B, 0xE3, 0x2C, 0x7C, 0xF1, 0x80, 0xC3,
- 0xBD, 0xD4, 0x79, 0x8E, 0x91, 0xB7, 0x81, 0x82, 0x51, 0xBB, 0x05, 0x5E,
- 0x2A, 0x20, 0x64, 0x90, 0x4A, 0x79, 0xA7, 0x70, 0xFA, 0x15, 0xA2, 0x59,
- 0xCB, 0xD5, 0x23, 0xA6, 0xA6, 0xEF, 0x09, 0xC4, 0x30, 0x48, 0xD5, 0xA2,
- 0x2F, 0x97, 0x1F, 0x3C, 0x20, 0x12, 0x9B, 0x48, 0x00, 0x0E, 0x6E, 0xDD,
- 0x06, 0x1C, 0xBC, 0x05, 0x3E, 0x37, 0x1D, 0x79, 0x4E, 0x53, 0x27, 0xDF,
- 0x61, 0x1E, 0xBB, 0xBE, 0x1B, 0xAC, 0x9B, 0x5C, 0x60, 0x44, 0xCF, 0x02,
- 0x3D, 0x76, 0xE0, 0x5E, 0xEA, 0x9B, 0xAD, 0x99, 0x1B, 0x13, 0xA6, 0x3C,
- 0x97, 0x4E, 0x9E, 0xF1, 0x83, 0x9E, 0xB5, 0xDB, 0x12, 0x51, 0x36, 0xF7,
- 0x26, 0x2E, 0x56, 0xA8, 0x87, 0x15, 0x38, 0xDF, 0xD8, 0x23, 0xC6, 0x50,
- 0x50, 0x85, 0xE2, 0x1F, 0x0D, 0xD5, 0xC8, 0x6B,
-};
-static unsigned char dh1024_g[] =
-{
- 0x02,
-};
-
-static DH *get_dh1024(void)
-{
- return modssl_dh_configure(dh1024_p, sizeof(dh1024_p),
- dh1024_g, sizeof(dh1024_g));
-}
-/* ----END GENERATED SECTION---------- */
-
-DH *ssl_dh_GetTmpParam(int nKeyLen)
-{
- DH *dh;
-
- if (nKeyLen == 512)
- dh = get_dh512();
- else if (nKeyLen == 1024)
- dh = get_dh1024();
- else
- dh = get_dh1024();
- return dh;
-}
-
-DH *ssl_dh_GetParamFromFile(char *file)
-{
- DH *dh = NULL;
- BIO *bio;
-
- if ((bio = BIO_new_file(file, "r")) == NULL)
- return NULL;
-#if SSL_LIBRARY_VERSION < 0x00904000
- dh = PEM_read_bio_DHparams(bio, NULL, NULL);
-#else
- dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
-#endif
- BIO_free(bio);
- return (dh);
-}
-
-/*
-=cut
-##
-## Embedded Perl script for generating the temporary DH parameters
-##
-
-require 5.003;
-use strict;
-
-# configuration
-my $file = $0;
-my $begin = '----BEGIN GENERATED SECTION--------';
-my $end = '----END GENERATED SECTION----------';
-
-# read ourself and keep a backup
-open(FP, "<$file") || die;
-my $source = '';
-$source .= $_ while (<FP>);
-close(FP);
-open(FP, ">$file.bak") || die;
-print FP $source;
-close(FP);
-
-# generate the DH parameters
-print "1. Generate 512 and 1024 bit Diffie-Hellman parameters (p, g)\n";
-my $rand = '';
-foreach $file (qw(/var/log/messages /var/adm/messages
- /kernel /vmunix /vmlinuz /etc/hosts /etc/resolv.conf)) {
- if (-f $file) {
- $rand = $file if ($rand eq '');
- $rand .= ":$file" if ($rand ne '');
- }
-}
-$rand = "-rand $rand" if ($rand ne '');
-system("openssl gendh $rand -out dh512.pem 512");
-system("openssl gendh $rand -out dh1024.pem 1024");
-
-# generate DH param info
-my $dhinfo = '';
-open(FP, "openssl dh -noout -text -in dh512.pem |") || die;
-$dhinfo .= $_ while (<FP>);
-close(FP);
-open(FP, "openssl dh -noout -text -in dh1024.pem |") || die;
-$dhinfo .= $_ while (<FP>);
-close(FP);
-$dhinfo =~ s|^|** |mg;
-$dhinfo = "\n\/\*\n$dhinfo\*\/\n\n";
-
-# generate C source from DH params
-my $dhsource = '';
-open(FP, "openssl dh -noout -C -in dh512.pem | indent | expand |") || die;
-$dhsource .= $_ while (<FP>);
-close(FP);
-open(FP, "openssl dh -noout -C -in dh1024.pem | indent | expand |") || die;
-$dhsource .= $_ while (<FP>);
-close(FP);
-$dhsource =~ s|(DH\s+\*get_dh)|static $1|sg;
-
-# generate output
-my $o = $dhinfo . $dhsource;
-
-# insert the generated code at the target location
-$source =~ s|(\/\* $begin.+?\n).*\n(.*?\/\* $end)|$1$o$2|s;
-
-# and update the source on disk
-print "Updating file `$file'\n";
-open(FP, ">$file") || die;
-print FP $source;
-close(FP);
-
-# cleanup
-unlink("dh512.pem");
-unlink("dh1024.pem");
-
-=pod
-*/
diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c
deleted file mode 100644
index d0521171a9..0000000000
--- a/modules/ssl/ssl_engine_init.c
+++ /dev/null
@@ -1,1250 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_init.c
- * Initialization of Servers
- */
- /* ``Recursive, adj.;
- see Recursive.''
- -- Unknown */
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Module Initialization
-** _________________________________________________________________
-*/
-
-static char *ssl_add_version_component(apr_pool_t *p,
- server_rec *s,
- char *name)
-{
- char *val = ssl_var_lookup(p, s, NULL, NULL, name);
-
- if (val && *val) {
- ap_add_version_component(p, val);
- }
-
- return val;
-}
-
-static char *version_components[] = {
- "SSL_VERSION_PRODUCT",
- "SSL_VERSION_INTERFACE",
- "SSL_VERSION_LIBRARY",
- NULL
-};
-
-static void ssl_add_version_components(apr_pool_t *p,
- server_rec *s)
-{
- char *vals[sizeof(version_components)/sizeof(char *)];
- int i;
-
- for (i=0; version_components[i]; i++) {
- vals[i] = ssl_add_version_component(p, s,
- version_components[i]);
- }
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Server: %s, Interface: %s, Library: %s",
- AP_SERVER_BASEVERSION,
- vals[1], /* SSL_VERSION_INTERFACE */
- vals[2]); /* SSL_VERSION_LIBRARY */
-}
-
-
-/*
- * Handle the Temporary RSA Keys and DH Params
- */
-
-#define MODSSL_TMP_KEY_FREE(mc, type, idx) \
- if (mc->pTmpKeys[idx]) { \
- type##_free((type *)mc->pTmpKeys[idx]); \
- mc->pTmpKeys[idx] = NULL; \
- }
-
-#define MODSSL_TMP_KEYS_FREE(mc, type) \
- MODSSL_TMP_KEY_FREE(mc, type, SSL_TMP_KEY_##type##_512); \
- MODSSL_TMP_KEY_FREE(mc, type, SSL_TMP_KEY_##type##_1024)
-
-static void ssl_tmp_keys_free(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- MODSSL_TMP_KEYS_FREE(mc, RSA);
- MODSSL_TMP_KEYS_FREE(mc, DH);
-}
-
-static int ssl_tmp_key_init_rsa(server_rec *s,
- int bits, int idx)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- if (!(mc->pTmpKeys[idx] =
- RSA_generate_key(bits, RSA_F4, NULL, NULL)))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Failed to generate temporary "
- "%d bit RSA private key", bits);
- return !OK;
- }
-
- return OK;
-}
-
-static int ssl_tmp_key_init_dh(server_rec *s,
- int bits, int idx)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- if (!(mc->pTmpKeys[idx] =
- ssl_dh_GetTmpParam(bits)))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Failed to generate temporary "
- "%d bit DH parameters", bits);
- return !OK;
- }
-
- return OK;
-}
-
-#define MODSSL_TMP_KEY_INIT_RSA(s, bits) \
- ssl_tmp_key_init_rsa(s, bits, SSL_TMP_KEY_RSA_##bits)
-
-#define MODSSL_TMP_KEY_INIT_DH(s, bits) \
- ssl_tmp_key_init_dh(s, bits, SSL_TMP_KEY_DH_##bits)
-
-static int ssl_tmp_keys_init(server_rec *s)
-{
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Generating temporary RSA private keys (512/1024 bits)");
-
- if (MODSSL_TMP_KEY_INIT_RSA(s, 512) ||
- MODSSL_TMP_KEY_INIT_RSA(s, 1024)) {
- return !OK;
- }
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Generating temporary DH parameters (512/1024 bits)");
-
- if (MODSSL_TMP_KEY_INIT_DH(s, 512) ||
- MODSSL_TMP_KEY_INIT_DH(s, 1024)) {
- return !OK;
- }
-
- return OK;
-}
-
-/*
- * Per-module initialization
- */
-int ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
- apr_pool_t *ptemp,
- server_rec *base_server)
-{
- SSLModConfigRec *mc = myModConfig(base_server);
- SSLSrvConfigRec *sc;
- server_rec *s;
-
- /* We initialize mc->pid per-process in the child init,
- * but it should be initialized for startup before we
- * call ssl_rand_seed() below.
- */
- mc->pid = getpid();
-
- /*
- * Let us cleanup on restarts and exists
- */
- apr_pool_cleanup_register(p, base_server,
- ssl_init_ModuleKill,
- apr_pool_cleanup_null);
-
- /*
- * Any init round fixes the global config
- */
- ssl_config_global_create(base_server); /* just to avoid problems */
- ssl_config_global_fix(mc);
-
- /*
- * try to fix the configuration and open the dedicated SSL
- * logfile as early as possible
- */
- for (s = base_server; s; s = s->next) {
- sc = mySrvConfig(s);
-
- if (sc->server) {
- sc->server->sc = sc;
- }
-
- if (sc->proxy) {
- sc->proxy->sc = sc;
- }
-
- /*
- * Create the server host:port string because we need it a lot
- */
- sc->vhost_id = ssl_util_vhostid(p, s);
- sc->vhost_id_len = strlen(sc->vhost_id);
-
- /* If sc->enabled is UNSET, then SSL is optional on this vhost */
- /* Fix up stuff that may not have been set */
- if (sc->enabled == SSL_ENABLED_UNSET) {
- sc->enabled = SSL_ENABLED_FALSE;
- }
- if (sc->proxy_enabled == UNSET) {
- sc->proxy_enabled = FALSE;
- }
-
- if (sc->session_cache_timeout == UNSET) {
- sc->session_cache_timeout = SSL_SESSION_CACHE_TIMEOUT;
- }
-
- if (sc->server->pphrase_dialog_type == SSL_PPTYPE_UNSET) {
- sc->server->pphrase_dialog_type = SSL_PPTYPE_BUILTIN;
- }
-
- }
-
- /*
- * SSL external crypto device ("engine") support
- */
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
- ssl_init_Engine(base_server, p);
-#endif
-
-#if APR_HAS_THREADS
- ssl_util_thread_setup(p);
-#endif
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Initialized %s library", SSL_LIBRARY_NAME);
-
- /*
- * Seed the Pseudo Random Number Generator (PRNG)
- * only need ptemp here; nothing inside allocated from the pool
- * needs to live once we return from ssl_rand_seed().
- */
- ssl_rand_seed(base_server, ptemp, SSL_RSCTX_STARTUP, "Init: ");
-
- /*
- * read server private keys/public certs into memory.
- * decrypting any encrypted keys via configured SSLPassPhraseDialogs
- * anything that needs to live longer than ptemp needs to also survive
- * restarts, in which case they'll live inside s->process->pool.
- */
- ssl_pphrase_Handle(base_server, ptemp);
-
- if (ssl_tmp_keys_init(base_server)) {
- return !OK;
- }
-
- /*
- * initialize the mutex handling
- */
- if (!ssl_mutex_init(base_server, p)) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /*
- * initialize session caching
- */
- ssl_scache_init(base_server, p);
-
- /*
- * initialize servers
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, base_server,
- "Init: Initializing (virtual) servers for SSL");
-
- for (s = base_server; s; s = s->next) {
- sc = mySrvConfig(s);
- /*
- * Either now skip this server when SSL is disabled for
- * it or give out some information about what we're
- * configuring.
- */
-
- /*
- * Read the server certificate and key
- */
- ssl_init_ConfigureServer(s, p, ptemp, sc);
- }
-
- /*
- * Configuration consistency checks
- */
- ssl_init_CheckServers(base_server, ptemp);
-
- /*
- * Announce mod_ssl and SSL library in HTTP Server field
- * as ``mod_ssl/X.X.X OpenSSL/X.X.X''
- */
- ssl_add_version_components(p, base_server);
-
- SSL_init_app_data2_idx(); /* for SSL_get_app_data2() at request time */
-
- return OK;
-}
-
-/*
- * Support for external a Crypto Device ("engine"), usually
- * a hardware accellerator card for crypto operations.
- */
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
-void ssl_init_Engine(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
- ENGINE *e;
-
- if (mc->szCryptoDevice) {
- if (!(e = ENGINE_by_id(mc->szCryptoDevice))) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Failed to load Crypto Device API `%s'",
- mc->szCryptoDevice);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- if (strEQ(mc->szCryptoDevice, "chil")) {
- ENGINE_ctrl(e, ENGINE_CTRL_CHIL_SET_FORKCHECK, 1, 0, 0);
- }
-
- if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Failed to enable Crypto Device API `%s'",
- mc->szCryptoDevice);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- ENGINE_free(e);
- }
-}
-#endif
-
-static void ssl_init_server_check(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- /*
- * check for important parameters and the
- * possibility that the user forgot to set them.
- */
- if (!mctx->pks->cert_files[0]) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "No SSL Certificate set [hint: SSLCertificateFile]");
- ssl_die();
- }
-
- /*
- * Check for problematic re-initializations
- */
- if (mctx->pks->certs[SSL_AIDX_RSA] ||
- mctx->pks->certs[SSL_AIDX_DSA])
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Illegal attempt to re-initialise SSL for server "
- "(theoretically shouldn't happen!)");
- ssl_die();
- }
-}
-
-static void ssl_init_ctx_protocol(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- SSL_CTX *ctx = NULL;
- SSL_METHOD *method = NULL;
- char *cp;
- int protocol = mctx->protocol;
-
- /*
- * Create the new per-server SSL context
- */
- if (protocol == SSL_PROTOCOL_NONE) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "No SSL protocols available [hint: SSLProtocol]");
- ssl_die();
- }
-
- cp = apr_pstrcat(p,
- (protocol & SSL_PROTOCOL_SSLV2 ? "SSLv2, " : ""),
- (protocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""),
- (protocol & SSL_PROTOCOL_TLSV1 ? "TLSv1, " : ""),
- NULL);
- cp[strlen(cp)-2] = NUL;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Creating new SSL context (protocols: %s)", cp);
-
- if (protocol == SSL_PROTOCOL_SSLV2) {
- method = mctx->pkp ?
- SSLv2_client_method() : /* proxy */
- SSLv2_server_method(); /* server */
- ctx = SSL_CTX_new(method); /* only SSLv2 is left */
- }
- else {
- method = mctx->pkp ?
- SSLv23_client_method() : /* proxy */
- SSLv23_server_method(); /* server */
- ctx = SSL_CTX_new(method); /* be more flexible */
- }
-
- mctx->ssl_ctx = ctx;
-
- SSL_CTX_set_options(ctx, SSL_OP_ALL);
-
- if (!(protocol & SSL_PROTOCOL_SSLV2)) {
- SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
- }
-
- if (!(protocol & SSL_PROTOCOL_SSLV3)) {
- SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3);
- }
-
- if (!(protocol & SSL_PROTOCOL_TLSV1)) {
- SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1);
- }
-
-#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
- {
- SSLSrvConfigRec *sc = mySrvConfig(s);
- if (sc->cipher_server_pref == TRUE) {
- SSL_CTX_set_options(ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
- }
- }
-#endif
-
- SSL_CTX_set_app_data(ctx, s);
-
- /*
- * Configure additional context ingredients
- */
- SSL_CTX_set_options(ctx, SSL_OP_SINGLE_DH_USE);
-}
-
-static void ssl_init_ctx_session_cache(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- SSL_CTX *ctx = mctx->ssl_ctx;
- SSLModConfigRec *mc = myModConfig(s);
- long cache_mode = SSL_SESS_CACHE_OFF;
-
- if (mc->nSessionCacheMode != SSL_SCMODE_NONE) {
- /* SSL_SESS_CACHE_NO_INTERNAL will force OpenSSL
- * to ignore process local-caching and
- * to always get/set/delete sessions using mod_ssl's callbacks.
- */
- cache_mode = SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL;
- }
-
- SSL_CTX_set_session_cache_mode(ctx, cache_mode);
-
- SSL_CTX_sess_set_new_cb(ctx, ssl_callback_NewSessionCacheEntry);
- SSL_CTX_sess_set_get_cb(ctx, ssl_callback_GetSessionCacheEntry);
- SSL_CTX_sess_set_remove_cb(ctx, ssl_callback_DelSessionCacheEntry);
-}
-
-static void ssl_init_ctx_callbacks(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- SSL_CTX *ctx = mctx->ssl_ctx;
-
- SSL_CTX_set_tmp_rsa_callback(ctx, ssl_callback_TmpRSA);
- SSL_CTX_set_tmp_dh_callback(ctx, ssl_callback_TmpDH);
-
- if (s->loglevel >= APLOG_DEBUG) {
- /* this callback only logs if LogLevel >= info */
- SSL_CTX_set_info_callback(ctx, ssl_callback_LogTracingState);
- }
-}
-
-static void ssl_init_ctx_verify(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- SSL_CTX *ctx = mctx->ssl_ctx;
-
- int verify = SSL_VERIFY_NONE;
- STACK_OF(X509_NAME) *ca_list;
-
- if (mctx->auth.verify_mode == SSL_CVERIFY_UNSET) {
- mctx->auth.verify_mode = SSL_CVERIFY_NONE;
- }
-
- if (mctx->auth.verify_depth == UNSET) {
- mctx->auth.verify_depth = 1;
- }
-
- /*
- * Configure callbacks for SSL context
- */
- if (mctx->auth.verify_mode == SSL_CVERIFY_REQUIRE) {
- verify |= SSL_VERIFY_PEER_STRICT;
- }
-
- if ((mctx->auth.verify_mode == SSL_CVERIFY_OPTIONAL) ||
- (mctx->auth.verify_mode == SSL_CVERIFY_OPTIONAL_NO_CA))
- {
- verify |= SSL_VERIFY_PEER;
- }
-
- SSL_CTX_set_verify(ctx, verify, ssl_callback_SSLVerify);
-
- /*
- * Configure Client Authentication details
- */
- if (mctx->auth.ca_cert_file || mctx->auth.ca_cert_path) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Configuring client authentication");
-
- if (!SSL_CTX_load_verify_locations(ctx,
- MODSSL_PCHAR_CAST mctx->auth.ca_cert_file,
- MODSSL_PCHAR_CAST mctx->auth.ca_cert_path))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to configure verify locations "
- "for client authentication");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- ca_list = ssl_init_FindCAList(s, ptemp,
- mctx->auth.ca_cert_file,
- mctx->auth.ca_cert_path);
- if (!ca_list) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to determine list of available "
- "CA certificates for client authentication");
- ssl_die();
- }
-
- SSL_CTX_set_client_CA_list(ctx, (STACK *)ca_list);
- }
-
- /*
- * Give a warning when no CAs were configured but client authentication
- * should take place. This cannot work.
- */
- if (mctx->auth.verify_mode == SSL_CVERIFY_REQUIRE) {
- ca_list = (STACK_OF(X509_NAME) *)SSL_CTX_get_client_CA_list(ctx);
-
- if (sk_X509_NAME_num(ca_list) == 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "Init: Oops, you want to request client "
- "authentication, but no CAs are known for "
- "verification!? [Hint: SSLCACertificate*]");
- }
- }
-}
-
-static void ssl_init_ctx_cipher_suite(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- SSL_CTX *ctx = mctx->ssl_ctx;
- const char *suite = mctx->auth.cipher_suite;
-
- /*
- * Configure SSL Cipher Suite
- */
- if (!suite) {
- return;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Configuring permitted SSL ciphers [%s]",
- suite);
-
- if (!SSL_CTX_set_cipher_list(ctx, MODSSL_PCHAR_CAST suite)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to configure permitted SSL ciphers");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-}
-
-static void ssl_init_ctx_crl(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- /*
- * Configure Certificate Revocation List (CRL) Details
- */
-
- if (!(mctx->crl_file || mctx->crl_path)) {
- return;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Configuring certificate revocation facility");
-
- mctx->crl =
- SSL_X509_STORE_create((char *)mctx->crl_file,
- (char *)mctx->crl_path);
-
- if (!mctx->crl) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to configure X.509 CRL storage "
- "for certificate revocation");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-}
-
-static void ssl_init_ctx_cert_chain(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- BOOL skip_first = FALSE;
- int i, n;
- const char *chain = mctx->cert_chain;
-
- /*
- * Optionally configure extra server certificate chain certificates.
- * This is usually done by OpenSSL automatically when one of the
- * server cert issuers are found under SSLCACertificatePath or in
- * SSLCACertificateFile. But because these are intended for client
- * authentication it can conflict. For instance when you use a
- * Global ID server certificate you've to send out the intermediate
- * CA certificate, too. When you would just configure this with
- * SSLCACertificateFile and also use client authentication mod_ssl
- * would accept all clients also issued by this CA. Obviously this
- * isn't what we want in this situation. So this feature here exists
- * to allow one to explicity configure CA certificates which are
- * used only for the server certificate chain.
- */
- if (!chain) {
- return;
- }
-
- for (i = 0; (i < SSL_AIDX_MAX) && mctx->pks->cert_files[i]; i++) {
- if (strEQ(mctx->pks->cert_files[i], chain)) {
- skip_first = TRUE;
- break;
- }
- }
-
- n = SSL_CTX_use_certificate_chain(mctx->ssl_ctx,
- (char *)chain,
- skip_first, NULL);
- if (n < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Failed to configure CA certificate chain!");
- ssl_die();
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Configuring server certificate chain "
- "(%d CA certificate%s)",
- n, n == 1 ? "" : "s");
-}
-
-static void ssl_init_ctx(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- ssl_init_ctx_protocol(s, p, ptemp, mctx);
-
- ssl_init_ctx_session_cache(s, p, ptemp, mctx);
-
- ssl_init_ctx_callbacks(s, p, ptemp, mctx);
-
- ssl_init_ctx_verify(s, p, ptemp, mctx);
-
- ssl_init_ctx_cipher_suite(s, p, ptemp, mctx);
-
- ssl_init_ctx_crl(s, p, ptemp, mctx);
-
- if (mctx->pks) {
- /* XXX: proxy support? */
- ssl_init_ctx_cert_chain(s, p, ptemp, mctx);
- }
-}
-
-static int ssl_server_import_cert(server_rec *s,
- modssl_ctx_t *mctx,
- const char *id,
- int idx)
-{
- SSLModConfigRec *mc = myModConfig(s);
- ssl_asn1_t *asn1;
- unsigned char *ptr;
- const char *type = ssl_asn1_keystr(idx);
- X509 *cert;
-
- if (!(asn1 = ssl_asn1_table_get(mc->tPublicCert, id))) {
- return FALSE;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Configuring %s server certificate", type);
-
- ptr = asn1->cpData;
- if (!(cert = d2i_X509(NULL, &ptr, asn1->nData))) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to import %s server certificate", type);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- if (SSL_CTX_use_certificate(mctx->ssl_ctx, cert) <= 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to configure %s server certificate", type);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- mctx->pks->certs[idx] = cert;
-
- return TRUE;
-}
-
-static int ssl_server_import_key(server_rec *s,
- modssl_ctx_t *mctx,
- const char *id,
- int idx)
-{
- SSLModConfigRec *mc = myModConfig(s);
- ssl_asn1_t *asn1;
- unsigned char *ptr;
- const char *type = ssl_asn1_keystr(idx);
- int pkey_type = (idx == SSL_AIDX_RSA) ? EVP_PKEY_RSA : EVP_PKEY_DSA;
- EVP_PKEY *pkey;
-
- if (!(asn1 = ssl_asn1_table_get(mc->tPrivateKey, id))) {
- return FALSE;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Configuring %s server private key", type);
-
- ptr = asn1->cpData;
- if (!(pkey = d2i_PrivateKey(pkey_type, NULL, &ptr, asn1->nData)))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to import %s server private key", type);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- if (SSL_CTX_use_PrivateKey(mctx->ssl_ctx, pkey) <= 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Unable to configure %s server private key", type);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- /*
- * XXX: wonder if this is still needed, this is old todo doc.
- * (see http://www.psy.uq.edu.au/~ftp/Crypto/ssleay/TODO.html)
- */
- if ((pkey_type == EVP_PKEY_DSA) && mctx->pks->certs[idx]) {
- EVP_PKEY *pubkey = X509_get_pubkey(mctx->pks->certs[idx]);
-
- if (pubkey && EVP_PKEY_missing_parameters(pubkey)) {
- EVP_PKEY_copy_parameters(pubkey, pkey);
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Copying DSA parameters from private key to certificate");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- EVP_PKEY_free(pubkey);
- }
- }
-
- mctx->pks->keys[idx] = pkey;
-
- return TRUE;
-}
-
-static void ssl_check_public_cert(server_rec *s,
- apr_pool_t *ptemp,
- X509 *cert,
- int type)
-{
- int is_ca, pathlen;
- char *cn;
-
- if (!cert) {
- return;
- }
-
- /*
- * Some information about the certificate(s)
- */
-
- if (SSL_X509_isSGC(cert)) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "%s server certificate enables "
- "Server Gated Cryptography (SGC)",
- ssl_asn1_keystr(type));
- }
-
- if (SSL_X509_getBC(cert, &is_ca, &pathlen)) {
- if (is_ca) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "%s server certificate is a CA certificate "
- "(BasicConstraints: CA == TRUE !?)",
- ssl_asn1_keystr(type));
- }
-
- if (pathlen > 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "%s server certificate is not a leaf certificate "
- "(BasicConstraints: pathlen == %d > 0 !?)",
- ssl_asn1_keystr(type), pathlen);
- }
- }
-
- if (SSL_X509_getCN(ptemp, cert, &cn)) {
- int fnm_flags = APR_FNM_PERIOD|APR_FNM_CASE_BLIND;
-
- if (apr_fnmatch_test(cn) &&
- (apr_fnmatch(cn, s->server_hostname,
- fnm_flags) == APR_FNM_NOMATCH))
- {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "%s server certificate wildcard CommonName (CN) `%s' "
- "does NOT match server name!?",
- ssl_asn1_keystr(type), cn);
- }
- else if (strNE(s->server_hostname, cn)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "%s server certificate CommonName (CN) `%s' "
- "does NOT match server name!?",
- ssl_asn1_keystr(type), cn);
- }
- }
-}
-
-static void ssl_init_server_certs(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- const char *rsa_id, *dsa_id;
- const char *vhost_id = mctx->sc->vhost_id;
- int i;
- int have_rsa, have_dsa;
-
- rsa_id = ssl_asn1_table_keyfmt(ptemp, vhost_id, SSL_AIDX_RSA);
- dsa_id = ssl_asn1_table_keyfmt(ptemp, vhost_id, SSL_AIDX_DSA);
-
- have_rsa = ssl_server_import_cert(s, mctx, rsa_id, SSL_AIDX_RSA);
- have_dsa = ssl_server_import_cert(s, mctx, dsa_id, SSL_AIDX_DSA);
-
- if (!(have_rsa || have_dsa)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Oops, no RSA or DSA server certificate found?!");
- ssl_die();
- }
-
- for (i = 0; i < SSL_AIDX_MAX; i++) {
- ssl_check_public_cert(s, ptemp, mctx->pks->certs[i], i);
- }
-
- have_rsa = ssl_server_import_key(s, mctx, rsa_id, SSL_AIDX_RSA);
- have_dsa = ssl_server_import_key(s, mctx, dsa_id, SSL_AIDX_DSA);
-
- if (!(have_rsa || have_dsa)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Oops, no RSA or DSA server private key found?!");
- ssl_die();
- }
-}
-
-static void ssl_init_proxy_certs(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- modssl_ctx_t *mctx)
-{
- int n, ncerts = 0;
- STACK_OF(X509_INFO) *sk;
- modssl_pk_proxy_t *pkp = mctx->pkp;
-
- SSL_CTX_set_client_cert_cb(mctx->ssl_ctx,
- ssl_callback_proxy_cert);
-
- if (!(pkp->cert_file || pkp->cert_path)) {
- return;
- }
-
- sk = sk_X509_INFO_new_null();
-
- if (pkp->cert_file) {
- SSL_X509_INFO_load_file(ptemp, sk, pkp->cert_file);
- }
-
- if (pkp->cert_path) {
- SSL_X509_INFO_load_path(ptemp, sk, pkp->cert_path);
- }
-
- if ((ncerts = sk_X509_INFO_num(sk)) <= 0) {
- sk_X509_INFO_free(sk);
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "no client certs found for SSL proxy");
- return;
- }
-
- /* Check that all client certs have got certificates and private
- * keys. */
- for (n = 0; n < ncerts; n++) {
- X509_INFO *inf = sk_X509_INFO_value(sk, n);
-
- if (!inf->x509 || !inf->x_pkey) {
- sk_X509_INFO_free(sk);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, s,
- "incomplete client cert configured for SSL proxy "
- "(missing or encrypted private key?)");
- ssl_die();
- return;
- }
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "loaded %d client certs for SSL proxy",
- ncerts);
- pkp->certs = sk;
-}
-
-static void ssl_init_proxy_ctx(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- SSLSrvConfigRec *sc)
-{
- ssl_init_ctx(s, p, ptemp, sc->proxy);
-
- ssl_init_proxy_certs(s, p, ptemp, sc->proxy);
-}
-
-static void ssl_init_server_ctx(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- SSLSrvConfigRec *sc)
-{
- ssl_init_server_check(s, p, ptemp, sc->server);
-
- ssl_init_ctx(s, p, ptemp, sc->server);
-
- ssl_init_server_certs(s, p, ptemp, sc->server);
-}
-
-/*
- * Configure a particular server
- */
-void ssl_init_ConfigureServer(server_rec *s,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- SSLSrvConfigRec *sc)
-{
- /* Initialize the server if SSL is enabled or optional.
- */
- if ((sc->enabled == SSL_ENABLED_TRUE) || (sc->enabled == SSL_ENABLED_OPTIONAL)) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Configuring server for SSL protocol");
- ssl_init_server_ctx(s, p, ptemp, sc);
- }
-
- if (sc->proxy_enabled) {
- ssl_init_proxy_ctx(s, p, ptemp, sc);
- }
-}
-
-void ssl_init_CheckServers(server_rec *base_server, apr_pool_t *p)
-{
- server_rec *s, *ps;
- SSLSrvConfigRec *sc;
- apr_hash_t *table;
- const char *key;
- apr_ssize_t klen;
-
- BOOL conflict = FALSE;
-
- /*
- * Give out warnings when a server has HTTPS configured
- * for the HTTP port or vice versa
- */
- for (s = base_server; s; s = s->next) {
- sc = mySrvConfig(s);
-
- if ((sc->enabled == SSL_ENABLED_TRUE) && (s->port == DEFAULT_HTTP_PORT)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- base_server,
- "Init: (%s) You configured HTTPS(%d) "
- "on the standard HTTP(%d) port!",
- ssl_util_vhostid(p, s),
- DEFAULT_HTTPS_PORT, DEFAULT_HTTP_PORT);
- }
-
- if ((sc->enabled == SSL_ENABLED_FALSE) && (s->port == DEFAULT_HTTPS_PORT)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- base_server,
- "Init: (%s) You configured HTTP(%d) "
- "on the standard HTTPS(%d) port!",
- ssl_util_vhostid(p, s),
- DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT);
- }
- }
-
- /*
- * Give out warnings when more than one SSL-aware virtual server uses the
- * same IP:port. This doesn't work because mod_ssl then will always use
- * just the certificate/keys of one virtual host (which one cannot be said
- * easily - but that doesn't matter here).
- */
- table = apr_hash_make(p);
-
- for (s = base_server; s; s = s->next) {
- sc = mySrvConfig(s);
-
- if (!((sc->enabled == SSL_ENABLED_TRUE) && s->addrs)) {
- continue;
- }
-
- key = apr_psprintf(p, "%pA:%u",
- &s->addrs->host_addr, s->addrs->host_port);
- klen = strlen(key);
-
- if ((ps = (server_rec *)apr_hash_get(table, key, klen))) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- base_server,
- "Init: SSL server IP/port conflict: "
- "%s (%s:%d) vs. %s (%s:%d)",
- ssl_util_vhostid(p, s),
- (s->defn_name ? s->defn_name : "unknown"),
- s->defn_line_number,
- ssl_util_vhostid(p, ps),
- (ps->defn_name ? ps->defn_name : "unknown"),
- ps->defn_line_number);
- conflict = TRUE;
- continue;
- }
-
- apr_hash_set(table, key, klen, s);
- }
-
- if (conflict) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, base_server,
- "Init: You should not use name-based "
- "virtual hosts in conjunction with SSL!!");
- }
-}
-
-#ifdef SSLC_VERSION_NUMBER
-static int ssl_init_FindCAList_X509NameCmp(char **a, char **b)
-{
- return(X509_NAME_cmp((void*)*a, (void*)*b));
-}
-#else
-static int ssl_init_FindCAList_X509NameCmp(X509_NAME **a, X509_NAME **b)
-{
- return(X509_NAME_cmp(*a, *b));
-}
-#endif
-
-static void ssl_init_PushCAList(STACK_OF(X509_NAME) *ca_list,
- server_rec *s, const char *file)
-{
- int n;
- STACK_OF(X509_NAME) *sk;
-
- sk = (STACK_OF(X509_NAME) *)
- SSL_load_client_CA_file(MODSSL_PCHAR_CAST file);
-
- if (!sk) {
- return;
- }
-
- for (n = 0; n < sk_X509_NAME_num(sk); n++) {
- char name_buf[256];
- X509_NAME *name = sk_X509_NAME_value(sk, n);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "CA certificate: %s",
- X509_NAME_oneline(name, name_buf, sizeof(name_buf)));
-
- /*
- * note that SSL_load_client_CA_file() checks for duplicates,
- * but since we call it multiple times when reading a directory
- * we must also check for duplicates ourselves.
- */
-
- if (sk_X509_NAME_find(ca_list, name) < 0) {
- /* this will be freed when ca_list is */
- sk_X509_NAME_push(ca_list, name);
- }
- else {
- /* need to free this ourselves, else it will leak */
- X509_NAME_free(name);
- }
- }
-
- sk_X509_NAME_free(sk);
-}
-
-STACK_OF(X509_NAME) *ssl_init_FindCAList(server_rec *s,
- apr_pool_t *ptemp,
- const char *ca_file,
- const char *ca_path)
-{
- STACK_OF(X509_NAME) *ca_list;
-
- /*
- * Start with a empty stack/list where new
- * entries get added in sorted order.
- */
- ca_list = sk_X509_NAME_new(ssl_init_FindCAList_X509NameCmp);
-
- /*
- * Process CA certificate bundle file
- */
- if (ca_file) {
- ssl_init_PushCAList(ca_list, s, ca_file);
- }
-
- /*
- * Process CA certificate path files
- */
- if (ca_path) {
- apr_dir_t *dir;
- apr_finfo_t direntry;
- apr_int32_t finfo_flags = APR_FINFO_TYPE|APR_FINFO_NAME;
- apr_status_t rv;
-
- if ((rv = apr_dir_open(&dir, ca_path, ptemp)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Failed to open SSLCACertificatePath `%s'",
- ca_path);
- ssl_die();
- }
-
- while ((apr_dir_read(&direntry, finfo_flags, dir)) == APR_SUCCESS) {
- const char *file;
- if (direntry.filetype == APR_DIR) {
- continue; /* don't try to load directories */
- }
- file = apr_pstrcat(ptemp, ca_path, "/", direntry.name, NULL);
- ssl_init_PushCAList(ca_list, s, file);
- }
-
- apr_dir_close(dir);
- }
-
- /*
- * Cleanup
- */
- sk_X509_NAME_set_cmp_func(ca_list, NULL);
-
- return ca_list;
-}
-
-void ssl_init_Child(apr_pool_t *p, server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
- mc->pid = getpid(); /* only call getpid() once per-process */
-
- /* XXX: there should be an ap_srand() function */
- srand((unsigned int)time(NULL));
-
- /* open the mutex lockfile */
- ssl_mutex_reinit(s, p);
-}
-
-#define MODSSL_CFG_ITEM_FREE(func, item) \
- if (item) { \
- func(item); \
- item = NULL; \
- }
-
-static void ssl_init_ctx_cleanup(modssl_ctx_t *mctx)
-{
- MODSSL_CFG_ITEM_FREE(X509_STORE_free, mctx->crl);
-
- MODSSL_CFG_ITEM_FREE(SSL_CTX_free, mctx->ssl_ctx);
-}
-
-static void ssl_init_ctx_cleanup_proxy(modssl_ctx_t *mctx)
-{
- ssl_init_ctx_cleanup(mctx);
-
- if (mctx->pkp->certs) {
- sk_X509_INFO_pop_free(mctx->pkp->certs, X509_INFO_free);
- }
-}
-
-static void ssl_init_ctx_cleanup_server(modssl_ctx_t *mctx)
-{
- int i;
-
- ssl_init_ctx_cleanup(mctx);
-
- for (i=0; i < SSL_AIDX_MAX; i++) {
- MODSSL_CFG_ITEM_FREE(X509_free,
- mctx->pks->certs[i]);
-
- MODSSL_CFG_ITEM_FREE(EVP_PKEY_free,
- mctx->pks->keys[i]);
- }
-}
-
-apr_status_t ssl_init_ModuleKill(void *data)
-{
- SSLSrvConfigRec *sc;
- server_rec *base_server = (server_rec *)data;
- server_rec *s;
-
- /*
- * Drop the session cache and mutex
- */
- ssl_scache_kill(base_server);
-
- /*
- * Destroy the temporary keys and params
- */
- ssl_tmp_keys_free(base_server);
-
- /*
- * Free the non-pool allocated structures
- * in the per-server configurations
- */
- for (s = base_server; s; s = s->next) {
- sc = mySrvConfig(s);
-
- ssl_init_ctx_cleanup_proxy(sc->proxy);
-
- ssl_init_ctx_cleanup_server(sc->server);
- }
-
- return APR_SUCCESS;
-}
-
diff --git a/modules/ssl/ssl_engine_io.c b/modules/ssl/ssl_engine_io.c
deleted file mode 100644
index d48292c50e..0000000000
--- a/modules/ssl/ssl_engine_io.c
+++ /dev/null
@@ -1,1630 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_io.c
- * I/O Functions
- */
- /* ``MY HACK: This universe.
- Just one little problem:
- core keeps dumping.''
- -- Unknown */
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** I/O Hooks
-** _________________________________________________________________
-*/
-
-/* This file is designed to be the bridge between OpenSSL and httpd.
- * However, we really don't expect anyone (let alone ourselves) to
- * remember what is in this file. So, first, a quick overview.
- *
- * In this file, you will find:
- * - ssl_io_filter_input (Apache input filter)
- * - ssl_io_filter_output (Apache output filter)
- *
- * - bio_filter_in_* (OpenSSL input filter)
- * - bio_filter_out_* (OpenSSL output filter)
- *
- * The input chain is roughly:
- *
- * ssl_io_filter_input->ssl_io_input_read->SSL_read->...
- * ...->bio_filter_in_read->ap_get_brigade/next-httpd-filter
- *
- * In mortal terminology, we do the following:
- * - Receive a request for data to the SSL input filter
- * - Call a helper function once we know we should perform a read
- * - Call OpenSSL's SSL_read()
- * - SSL_read() will then call bio_filter_in_read
- * - bio_filter_in_read will then try to fetch data from the next httpd filter
- * - bio_filter_in_read will flatten that data and return it to SSL_read
- * - SSL_read will then decrypt the data
- * - ssl_io_input_read will then receive decrypted data as a char* and
- * ensure that there were no read errors
- * - The char* is placed in a brigade and returned
- *
- * Since connection-level input filters in httpd need to be able to
- * handle AP_MODE_GETLINE calls (namely identifying LF-terminated strings),
- * ssl_io_input_getline which will handle this special case.
- *
- * Due to AP_MODE_GETLINE and AP_MODE_SPECULATIVE, we may sometimes have
- * 'leftover' decoded data which must be setaside for the next read. That
- * is currently handled by the char_buffer_{read|write} functions. So,
- * ssl_io_input_read may be able to fulfill reads without invoking
- * SSL_read().
- *
- * Note that the filter context of ssl_io_filter_input and bio_filter_in_*
- * are shared as bio_filter_in_ctx_t.
- *
- * Note that the filter is by choice limited to reading at most
- * AP_IOBUFSIZE (8192 bytes) per call.
- *
- */
-
-/* this custom BIO allows us to hook SSL_write directly into
- * an apr_bucket_brigade and use transient buckets with the SSL
- * malloc-ed buffer, rather than copying into a mem BIO.
- * also allows us to pass the brigade as data is being written
- * rather than buffering up the entire response in the mem BIO.
- *
- * when SSL needs to flush (e.g. SSL_accept()), it will call BIO_flush()
- * which will trigger a call to bio_filter_out_ctrl() -> bio_filter_out_flush().
- * so we only need to flush the output ourselves if we receive an
- * EOS or FLUSH bucket. this was not possible with the mem BIO where we
- * had to flush all over the place not really knowing when it was required
- * to do so.
- */
-
-typedef struct {
- SSL *pssl;
- BIO *pbioRead;
- BIO *pbioWrite;
- ap_filter_t *pInputFilter;
- ap_filter_t *pOutputFilter;
- int nobuffer; /* non-zero to prevent buffering */
-} ssl_filter_ctx_t;
-
-typedef struct {
- ssl_filter_ctx_t *filter_ctx;
- conn_rec *c;
- apr_bucket_brigade *bb;
- apr_size_t length;
- char buffer[AP_IOBUFSIZE];
- apr_size_t blen;
- apr_status_t rc;
-} bio_filter_out_ctx_t;
-
-static bio_filter_out_ctx_t *bio_filter_out_ctx_new(ssl_filter_ctx_t *filter_ctx,
- conn_rec *c)
-{
- bio_filter_out_ctx_t *outctx = apr_palloc(c->pool, sizeof(*outctx));
-
- outctx->filter_ctx = filter_ctx;
- outctx->c = c;
- outctx->bb = apr_brigade_create(c->pool, c->bucket_alloc);
- outctx->blen = 0;
- outctx->length = 0;
-
- return outctx;
-}
-
-static int bio_filter_out_flush(BIO *bio)
-{
- bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)(bio->ptr);
- apr_bucket *e;
-
- if (!(outctx->blen || outctx->length)) {
- outctx->rc = APR_SUCCESS;
- return 1;
- }
-
- if (outctx->blen) {
- e = apr_bucket_transient_create(outctx->buffer, outctx->blen,
- outctx->bb->bucket_alloc);
- /* we filled this buffer first so add it to the
- * head of the brigade
- */
- APR_BRIGADE_INSERT_HEAD(outctx->bb, e);
- outctx->blen = 0;
- }
-
- outctx->length = 0;
- e = apr_bucket_flush_create(outctx->bb->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(outctx->bb, e);
-
- outctx->rc = ap_pass_brigade(outctx->filter_ctx->pOutputFilter->next,
- outctx->bb);
- /* create new brigade ready for next time through */
- outctx->bb = apr_brigade_create(outctx->c->pool, outctx->c->bucket_alloc);
- return (outctx->rc == APR_SUCCESS) ? 1 : -1;
-}
-
-static int bio_filter_create(BIO *bio)
-{
- bio->shutdown = 1;
- bio->init = 1;
- bio->num = -1;
- bio->ptr = NULL;
-
- return 1;
-}
-
-static int bio_filter_destroy(BIO *bio)
-{
- if (bio == NULL) {
- return 0;
- }
-
- /* nothing to free here.
- * apache will destroy the bucket brigade for us
- */
- return 1;
-}
-
-static int bio_filter_out_read(BIO *bio, char *out, int outl)
-{
- /* this is never called */
- return -1;
-}
-
-static int bio_filter_out_write(BIO *bio, const char *in, int inl)
-{
- bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)(bio->ptr);
-
- /* when handshaking we'll have a small number of bytes.
- * max size SSL will pass us here is about 16k.
- * (16413 bytes to be exact)
- */
- BIO_clear_retry_flags(bio);
-
- if (!outctx->length && (inl + outctx->blen < sizeof(outctx->buffer)) &&
- !outctx->filter_ctx->nobuffer) {
- /* the first two SSL_writes (of 1024 and 261 bytes)
- * need to be in the same packet (vec[0].iov_base)
- */
- /* XXX: could use apr_brigade_write() to make code look cleaner
- * but this way we avoid the malloc(APR_BUCKET_BUFF_SIZE)
- * and free() of it later
- */
- memcpy(&outctx->buffer[outctx->blen], in, inl);
- outctx->blen += inl;
- }
- else {
- /* pass along the encrypted data
- * need to flush since we're using SSL's malloc-ed buffer
- * which will be overwritten once we leave here
- */
- apr_bucket *bucket = apr_bucket_transient_create(in, inl,
- outctx->bb->bucket_alloc);
-
- outctx->length += inl;
- APR_BRIGADE_INSERT_TAIL(outctx->bb, bucket);
-
- if (bio_filter_out_flush(bio) < 0) {
- return -1;
- }
- }
-
- return inl;
-}
-
-static long bio_filter_out_ctrl(BIO *bio, int cmd, long num, void *ptr)
-{
- long ret = 1;
- char **pptr;
-
- bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)(bio->ptr);
-
- switch (cmd) {
- case BIO_CTRL_RESET:
- outctx->blen = outctx->length = 0;
- break;
- case BIO_CTRL_EOF:
- ret = (long)((outctx->blen + outctx->length) == 0);
- break;
- case BIO_C_SET_BUF_MEM_EOF_RETURN:
- outctx->blen = outctx->length = (apr_size_t)num;
- break;
- case BIO_CTRL_INFO:
- ret = (long)(outctx->blen + outctx->length);
- if (ptr) {
- pptr = (char **)ptr;
- *pptr = (char *)&(outctx->buffer[0]);
- }
- break;
- case BIO_CTRL_GET_CLOSE:
- ret = (long)bio->shutdown;
- break;
- case BIO_CTRL_SET_CLOSE:
- bio->shutdown = (int)num;
- break;
- case BIO_CTRL_WPENDING:
- ret = 0L;
- break;
- case BIO_CTRL_PENDING:
- ret = (long)(outctx->blen + outctx->length);
- break;
- case BIO_CTRL_FLUSH:
- ret = bio_filter_out_flush(bio);
- break;
- case BIO_CTRL_DUP:
- ret = 1;
- break;
- /* N/A */
- case BIO_C_SET_BUF_MEM:
- case BIO_C_GET_BUF_MEM_PTR:
- /* we don't care */
- case BIO_CTRL_PUSH:
- case BIO_CTRL_POP:
- default:
- ret = 0;
- break;
- }
-
- return ret;
-}
-
-static int bio_filter_out_gets(BIO *bio, char *buf, int size)
-{
- /* this is never called */
- return -1;
-}
-
-static int bio_filter_out_puts(BIO *bio, const char *str)
-{
- /* this is never called */
- return -1;
-}
-
-static BIO_METHOD bio_filter_out_method = {
- BIO_TYPE_MEM,
- "APR output filter",
- bio_filter_out_write,
- bio_filter_out_read, /* read is never called */
- bio_filter_out_puts, /* puts is never called */
- bio_filter_out_gets, /* gets is never called */
- bio_filter_out_ctrl,
- bio_filter_create,
- bio_filter_destroy,
-#ifdef OPENSSL_VERSION_NUMBER
- NULL /* sslc does not have the callback_ctrl field */
-#endif
-};
-
-typedef struct {
- int length;
- char *value;
-} char_buffer_t;
-
-typedef struct {
- SSL *ssl;
- BIO *bio_out;
- ap_filter_t *f;
- apr_status_t rc;
- ap_input_mode_t mode;
- apr_read_type_e block;
- apr_bucket_brigade *bb;
- char_buffer_t cbuf;
- apr_pool_t *pool;
- char buffer[AP_IOBUFSIZE];
- ssl_filter_ctx_t *filter_ctx;
-} bio_filter_in_ctx_t;
-
-/*
- * this char_buffer api might seem silly, but we don't need to copy
- * any of this data and we need to remember the length.
- */
-static int char_buffer_read(char_buffer_t *buffer, char *in, int inl)
-{
- if (!buffer->length) {
- return 0;
- }
-
- if (buffer->length > inl) {
- /* we have have enough to fill the caller's buffer */
- memcpy(in, buffer->value, inl);
- buffer->value += inl;
- buffer->length -= inl;
- }
- else {
- /* swallow remainder of the buffer */
- memcpy(in, buffer->value, buffer->length);
- inl = buffer->length;
- buffer->value = NULL;
- buffer->length = 0;
- }
-
- return inl;
-}
-
-static int char_buffer_write(char_buffer_t *buffer, char *in, int inl)
-{
- buffer->value = in;
- buffer->length = inl;
- return inl;
-}
-
-/* This function will read from a brigade and discard the read buckets as it
- * proceeds. It will read at most *len bytes.
- */
-static apr_status_t brigade_consume(apr_bucket_brigade *bb,
- apr_read_type_e block,
- char *c, apr_size_t *len)
-{
- apr_size_t actual = 0;
- apr_status_t status = APR_SUCCESS;
-
- while (!APR_BRIGADE_EMPTY(bb)) {
- apr_bucket *b = APR_BRIGADE_FIRST(bb);
- const char *str;
- apr_size_t str_len;
- apr_size_t consume;
-
- /* Justin points out this is an http-ism that might
- * not fit if brigade_consume is added to APR. Perhaps
- * apr_bucket_read(eos_bucket) should return APR_EOF?
- * Then this becomes mainline instead of a one-off.
- */
- if (APR_BUCKET_IS_EOS(b)) {
- status = APR_EOF;
- break;
- }
-
- /* The reason I'm not offering brigade_consume yet
- * across to apr-util is that the following call
- * illustrates how borked that API really is. For
- * this sort of case (caller provided buffer) it
- * would be much more trivial for apr_bucket_consume
- * to do all the work that follows, based on the
- * particular characteristics of the bucket we are
- * consuming here.
- */
- status = apr_bucket_read(b, &str, &str_len, block);
-
- if (status != APR_SUCCESS) {
- if (APR_STATUS_IS_EOF(status)) {
- /* This stream bucket was consumed */
- apr_bucket_delete(b);
- continue;
- }
- break;
- }
-
- if (str_len > 0) {
- /* Do not block once some data has been consumed */
- block = APR_NONBLOCK_READ;
-
- /* Assure we don't overflow. */
- consume = (str_len + actual > *len) ? *len - actual : str_len;
-
- memcpy(c, str, consume);
-
- c += consume;
- actual += consume;
-
- if (consume >= b->length) {
- /* This physical bucket was consumed */
- apr_bucket_delete(b);
- }
- else {
- /* Only part of this physical bucket was consumed */
- b->start += consume;
- b->length -= consume;
- }
- }
- else if (b->length == 0) {
- apr_bucket_delete(b);
- }
-
- /* This could probably be actual == *len, but be safe from stray
- * photons. */
- if (actual >= *len) {
- break;
- }
- }
-
- *len = actual;
- return status;
-}
-
-/*
- * this is the function called by SSL_read()
- */
-static int bio_filter_in_read(BIO *bio, char *in, int inlen)
-{
- apr_size_t inl = inlen;
- bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)(bio->ptr);
- apr_read_type_e block = inctx->block;
- SSLConnRec *sslconn = myConnConfig(inctx->f->c);
-
- inctx->rc = APR_SUCCESS;
-
- /* OpenSSL catches this case, so should we. */
- if (!in)
- return 0;
-
- /* XXX: flush here only required for SSLv2;
- * OpenSSL calls BIO_flush() at the appropriate times for
- * the other protocols.
- */
- if ((SSL_version(inctx->ssl) == SSL2_VERSION) || sslconn->is_proxy) {
- if (bio_filter_out_flush(inctx->bio_out) < 0) {
- bio_filter_out_ctx_t *outctx =
- (bio_filter_out_ctx_t *)(inctx->bio_out->ptr);
- inctx->rc = outctx->rc;
- return -1;
- }
- }
-
- BIO_clear_retry_flags(bio);
-
- if (!inctx->bb) {
- inctx->rc = APR_EOF;
- return -1;
- }
-
- if (APR_BRIGADE_EMPTY(inctx->bb)) {
-
- inctx->rc = ap_get_brigade(inctx->f->next, inctx->bb,
- AP_MODE_READBYTES, block,
- inl);
-
- /* Not a problem, there was simply no data ready yet.
- */
- if (APR_STATUS_IS_EAGAIN(inctx->rc) || APR_STATUS_IS_EINTR(inctx->rc)
- || (inctx->rc == APR_SUCCESS && APR_BRIGADE_EMPTY(inctx->bb))) {
- BIO_set_retry_read(bio);
- return 0;
- }
-
- if (inctx->rc != APR_SUCCESS) {
- /* Unexpected errors discard the brigade */
- apr_brigade_cleanup(inctx->bb);
- inctx->bb = NULL;
- return -1;
- }
- }
-
- inctx->rc = brigade_consume(inctx->bb, block, in, &inl);
-
- if (inctx->rc == APR_SUCCESS) {
- return (int)inl;
- }
-
- if (APR_STATUS_IS_EAGAIN(inctx->rc)
- || APR_STATUS_IS_EINTR(inctx->rc)) {
- BIO_set_retry_read(bio);
- return (int)inl;
- }
-
- /* Unexpected errors and APR_EOF clean out the brigade.
- * Subsequent calls will return APR_EOF.
- */
- apr_brigade_cleanup(inctx->bb);
- inctx->bb = NULL;
-
- if (APR_STATUS_IS_EOF(inctx->rc) && inl) {
- /* Provide the results of this read pass,
- * without resetting the BIO retry_read flag
- */
- return (int)inl;
- }
-
- return -1;
-}
-
-
-static BIO_METHOD bio_filter_in_method = {
- BIO_TYPE_MEM,
- "APR input filter",
- NULL, /* write is never called */
- bio_filter_in_read,
- NULL, /* puts is never called */
- NULL, /* gets is never called */
- NULL, /* ctrl is never called */
- bio_filter_create,
- bio_filter_destroy,
-#ifdef OPENSSL_VERSION_NUMBER
- NULL /* sslc does not have the callback_ctrl field */
-#endif
-};
-
-
-static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx,
- char *buf,
- apr_size_t *len)
-{
- apr_size_t wanted = *len;
- apr_size_t bytes = 0;
- int rc;
-
- *len = 0;
-
- /* If we have something leftover from last time, try that first. */
- if ((bytes = char_buffer_read(&inctx->cbuf, buf, wanted))) {
- *len = bytes;
- if (inctx->mode == AP_MODE_SPECULATIVE) {
- /* We want to rollback this read. */
- inctx->cbuf.value -= bytes;
- inctx->cbuf.length += bytes;
- return APR_SUCCESS;
- }
- /* This could probably be *len == wanted, but be safe from stray
- * photons.
- */
- if (*len >= wanted) {
- return APR_SUCCESS;
- }
- if (inctx->mode == AP_MODE_GETLINE) {
- if (memchr(buf, APR_ASCII_LF, *len)) {
- return APR_SUCCESS;
- }
- }
- else {
- /* Down to a nonblock pattern as we have some data already
- */
- inctx->block = APR_NONBLOCK_READ;
- }
- }
-
- while (1) {
-
- if (!inctx->filter_ctx->pssl) {
- break;
- }
-
- /* SSL_read may not read because we haven't taken enough data
- * from the stack. This is where we want to consider all of
- * the blocking and SPECULATIVE semantics
- */
- rc = SSL_read(inctx->filter_ctx->pssl, buf + bytes, wanted - bytes);
-
- if (rc > 0) {
- *len += rc;
- if (inctx->mode == AP_MODE_SPECULATIVE) {
- /* We want to rollback this read. */
- char_buffer_write(&inctx->cbuf, buf, rc);
- }
- return inctx->rc;
- }
- else if (rc == 0) {
- /* If EAGAIN, we will loop given a blocking read,
- * otherwise consider ourselves at EOF.
- */
- if (APR_STATUS_IS_EAGAIN(inctx->rc)
- || APR_STATUS_IS_EINTR(inctx->rc)) {
- /* Already read something, return APR_SUCCESS instead.
- * On win32 in particular, but perhaps on other kernels,
- * a blocking call isn't 'always' blocking.
- */
- if (*len > 0) {
- inctx->rc = APR_SUCCESS;
- break;
- }
- if (inctx->block == APR_NONBLOCK_READ) {
- break;
- }
- }
- else {
- if (*len > 0) {
- inctx->rc = APR_SUCCESS;
- }
- else {
- inctx->rc = APR_EOF;
- }
- break;
- }
- }
- else /* (rc < 0) */ {
- int ssl_err = SSL_get_error(inctx->filter_ctx->pssl, rc);
- conn_rec *c = (conn_rec*)SSL_get_app_data(inctx->filter_ctx->pssl);
-
- if (ssl_err == SSL_ERROR_WANT_READ) {
- /*
- * If OpenSSL wants to read more, and we were nonblocking,
- * report as an EAGAIN. Otherwise loop, pulling more
- * data from network filter.
- *
- * (This is usually the case when the client forces an SSL
- * renegotation which is handled implicitly by OpenSSL.)
- */
- inctx->rc = APR_EAGAIN;
-
- if (*len > 0) {
- inctx->rc = APR_SUCCESS;
- break;
- }
- if (inctx->block == APR_NONBLOCK_READ) {
- break;
- }
- continue; /* Blocking and nothing yet? Try again. */
- }
- else if (ssl_err == SSL_ERROR_SYSCALL) {
- if (APR_STATUS_IS_EAGAIN(inctx->rc)
- || APR_STATUS_IS_EINTR(inctx->rc)) {
- /* Already read something, return APR_SUCCESS instead. */
- if (*len > 0) {
- inctx->rc = APR_SUCCESS;
- break;
- }
- if (inctx->block == APR_NONBLOCK_READ) {
- break;
- }
- continue; /* Blocking and nothing yet? Try again. */
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_INFO, inctx->rc, c->base_server,
- "SSL input filter read failed.");
- }
- }
- else /* if (ssl_err == SSL_ERROR_SSL) */ {
- /*
- * Log SSL errors and any unexpected conditions.
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, inctx->rc, c->base_server,
- "SSL library error %d reading data", ssl_err);
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
-
- }
- if (inctx->rc == APR_SUCCESS) {
- inctx->rc = APR_EGENERAL;
- }
- break;
- }
- }
- return inctx->rc;
-}
-
-static apr_status_t ssl_io_input_getline(bio_filter_in_ctx_t *inctx,
- char *buf,
- apr_size_t *len)
-{
- const char *pos = NULL;
- apr_status_t status;
- apr_size_t tmplen = *len, buflen = *len, offset = 0;
-
- *len = 0;
-
- /*
- * in most cases we get all the headers on the first SSL_read.
- * however, in certain cases SSL_read will only get a partial
- * chunk of the headers, so we try to read until LF is seen.
- */
-
- while (tmplen > 0) {
- status = ssl_io_input_read(inctx, buf + offset, &tmplen);
-
- if (status != APR_SUCCESS) {
- return status;
- }
-
- *len += tmplen;
-
- if ((pos = memchr(buf, APR_ASCII_LF, *len))) {
- break;
- }
-
- offset += tmplen;
- tmplen = buflen - offset;
- }
-
- if (pos) {
- char *value;
- int length;
- apr_size_t bytes = pos - buf;
-
- bytes += 1;
- value = buf + bytes;
- length = *len - bytes;
-
- char_buffer_write(&inctx->cbuf, value, length);
-
- *len = bytes;
- }
-
- return APR_SUCCESS;
-}
-
-
-static apr_status_t ssl_filter_write(ap_filter_t *f,
- const char *data,
- apr_size_t len)
-{
- ssl_filter_ctx_t *filter_ctx = f->ctx;
- bio_filter_out_ctx_t *outctx;
- int res;
-
- /* write SSL */
- if (filter_ctx->pssl == NULL) {
- return APR_EGENERAL;
- }
-
- outctx = (bio_filter_out_ctx_t *)filter_ctx->pbioWrite->ptr;
- res = SSL_write(filter_ctx->pssl, (unsigned char *)data, len);
-
- if (res < 0) {
- int ssl_err = SSL_get_error(filter_ctx->pssl, res);
- conn_rec *c = (conn_rec*)SSL_get_app_data(outctx->filter_ctx->pssl);
-
- if (ssl_err == SSL_ERROR_WANT_WRITE) {
- /*
- * If OpenSSL wants to write more, and we were nonblocking,
- * report as an EAGAIN. Otherwise loop, pushing more
- * data at the network filter.
- *
- * (This is usually the case when the client forces an SSL
- * renegotation which is handled implicitly by OpenSSL.)
- */
- outctx->rc = APR_EAGAIN;
- }
- else if (ssl_err == SSL_ERROR_SYSCALL) {
- ap_log_error(APLOG_MARK, APLOG_INFO, outctx->rc, c->base_server,
- "SSL output filter write failed.");
- }
- else /* if (ssl_err == SSL_ERROR_SSL) */ {
- /*
- * Log SSL errors
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, outctx->rc, c->base_server,
- "SSL library error %d writing data", ssl_err);
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
- }
- if (outctx->rc == APR_SUCCESS) {
- outctx->rc = APR_EGENERAL;
- }
- }
- else if ((apr_size_t)res != len) {
- conn_rec *c = f->c;
- char *reason = "reason unknown";
-
- /* XXX: probably a better way to determine this */
- if (SSL_total_renegotiations(filter_ctx->pssl)) {
- reason = "likely due to failed renegotiation";
- }
-
- ap_log_error(APLOG_MARK, APLOG_INFO, outctx->rc, c->base_server,
- "failed to write %" APR_SSIZE_T_FMT
- " of %" APR_SIZE_T_FMT " bytes (%s)",
- len - (apr_size_t)res, len, reason);
-
- outctx->rc = APR_EGENERAL;
- }
- return outctx->rc;
-}
-
-/* Just use a simple request. Any request will work for this, because
- * we use a flag in the conn_rec->conn_vector now. The fake request just
- * gets the request back to the Apache core so that a response can be sent.
- *
- * To avoid calling back for more data from the socket, use an HTTP/0.9
- * request, and tack on an EOS bucket.
- */
-#define HTTP_ON_HTTPS_PORT \
- "GET /" CRLF
-
-#define HTTP_ON_HTTPS_PORT_BUCKET(alloc) \
- apr_bucket_immortal_create(HTTP_ON_HTTPS_PORT, \
- sizeof(HTTP_ON_HTTPS_PORT) - 1, \
- alloc)
-
-static void ssl_io_filter_disable(SSLConnRec *sslconn, ap_filter_t *f)
-{
- bio_filter_in_ctx_t *inctx = f->ctx;
- SSL_free(inctx->ssl);
- sslconn->ssl = NULL;
- inctx->ssl = NULL;
- inctx->filter_ctx->pssl = NULL;
-}
-
-static apr_status_t ssl_io_filter_error(ap_filter_t *f,
- apr_bucket_brigade *bb,
- apr_status_t status)
-{
- SSLConnRec *sslconn = myConnConfig(f->c);
- apr_bucket *bucket;
-
- switch (status) {
- case HTTP_BAD_REQUEST:
- /* log the situation */
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- f->c->base_server,
- "SSL handshake failed: HTTP spoken on HTTPS port; "
- "trying to send HTML error page");
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, f->c->base_server);
-
- sslconn->non_ssl_request = 1;
- ssl_io_filter_disable(sslconn, f);
-
- /* fake the request line */
- bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc);
- break;
-
- default:
- return status;
- }
-
- APR_BRIGADE_INSERT_TAIL(bb, bucket);
- bucket = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, bucket);
-
- return APR_SUCCESS;
-}
-
-static const char ssl_io_filter[] = "SSL/TLS Filter";
-
-/*
- * Close the SSL part of the socket connection
- * (called immediately _before_ the socket is closed)
- * or called with
- */
-static apr_status_t ssl_filter_io_shutdown(ssl_filter_ctx_t *filter_ctx,
- conn_rec *c,
- int abortive)
-{
- SSL *ssl = filter_ctx->pssl;
- const char *type = "";
- SSLConnRec *sslconn = myConnConfig(c);
- int shutdown_type;
-
- if (!ssl) {
- return APR_SUCCESS;
- }
-
- /*
- * Now close the SSL layer of the connection. We've to take
- * the TLSv1 standard into account here:
- *
- * | 7.2.1. Closure alerts
- * |
- * | The client and the server must share knowledge that the connection is
- * | ending in order to avoid a truncation attack. Either party may
- * | initiate the exchange of closing messages.
- * |
- * | close_notify
- * | This message notifies the recipient that the sender will not send
- * | any more messages on this connection. The session becomes
- * | unresumable if any connection is terminated without proper
- * | close_notify messages with level equal to warning.
- * |
- * | Either party may initiate a close by sending a close_notify alert.
- * | Any data received after a closure alert is ignored.
- * |
- * | Each party is required to send a close_notify alert before closing
- * | the write side of the connection. It is required that the other party
- * | respond with a close_notify alert of its own and close down the
- * | connection immediately, discarding any pending writes. It is not
- * | required for the initiator of the close to wait for the responding
- * | close_notify alert before closing the read side of the connection.
- *
- * This means we've to send a close notify message, but haven't to wait
- * for the close notify of the client. Actually we cannot wait for the
- * close notify of the client because some clients (including Netscape
- * 4.x) don't send one, so we would hang.
- */
-
- /*
- * exchange close notify messages, but allow the user
- * to force the type of handshake via SetEnvIf directive
- */
- if (abortive) {
- shutdown_type = SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN;
- type = "abortive";
- }
- else switch (sslconn->shutdown_type) {
- case SSL_SHUTDOWN_TYPE_UNCLEAN:
- /* perform no close notify handshake at all
- (violates the SSL/TLS standard!) */
- shutdown_type = SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN;
- type = "unclean";
- break;
- case SSL_SHUTDOWN_TYPE_ACCURATE:
- /* send close notify and wait for clients close notify
- (standard compliant, but usually causes connection hangs) */
- shutdown_type = 0;
- type = "accurate";
- break;
- default:
- /*
- * case SSL_SHUTDOWN_TYPE_UNSET:
- * case SSL_SHUTDOWN_TYPE_STANDARD:
- */
- /* send close notify, but don't wait for clients close notify
- (standard compliant and safe, so it's the DEFAULT!) */
- shutdown_type = SSL_RECEIVED_SHUTDOWN;
- type = "standard";
- break;
- }
-
- SSL_set_shutdown(ssl, shutdown_type);
- SSL_smart_shutdown(ssl);
-
- /* and finally log the fact that we've closed the connection */
- if (c->base_server->loglevel >= APLOG_INFO) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, c->base_server,
- "Connection to child %ld closed with %s shutdown"
- "(server %s, client %s)",
- c->id, type,
- ssl_util_vhostid(c->pool, c->base_server),
- c->remote_ip ? c->remote_ip : "unknown");
- }
-
- /* deallocate the SSL connection */
- if (sslconn->client_cert) {
- X509_free(sslconn->client_cert);
- sslconn->client_cert = NULL;
- }
- SSL_free(ssl);
- sslconn->ssl = NULL;
- filter_ctx->pssl = NULL; /* so filters know we've been shutdown */
-
- if (abortive) {
- /* prevent any further I/O */
- c->aborted = 1;
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t ssl_io_filter_cleanup(void *data)
-{
- ssl_filter_ctx_t *filter_ctx = data;
-
- if (filter_ctx->pssl) {
- conn_rec *c = (conn_rec *)SSL_get_app_data(filter_ctx->pssl);
- SSLConnRec *sslconn = myConnConfig(c);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
- "SSL connection destroyed without being closed");
-
- SSL_free(filter_ctx->pssl);
- sslconn->ssl = filter_ctx->pssl = NULL;
- }
-
- return APR_SUCCESS;
-}
-
-/*
- * The hook is NOT registered with ap_hook_process_connection. Instead, it is
- * called manually from the churn () before it tries to read any data.
- * There is some problem if I accept conn_rec *. Still investigating..
- * Adv. if conn_rec * can be accepted is we can hook this function using the
- * ap_hook_process_connection hook.
- */
-static int ssl_io_filter_connect(ssl_filter_ctx_t *filter_ctx)
-{
- conn_rec *c = (conn_rec *)SSL_get_app_data(filter_ctx->pssl);
- SSLConnRec *sslconn = myConnConfig(c);
- SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
- X509 *cert;
- int n;
- int ssl_err;
- long verify_result;
-
- if (SSL_is_init_finished(filter_ctx->pssl)) {
- return APR_SUCCESS;
- }
-
- if (sslconn->is_proxy) {
- if ((n = SSL_connect(filter_ctx->pssl)) <= 0) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- c->base_server,
- "SSL Proxy connect failed");
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
- return ssl_filter_io_shutdown(filter_ctx, c, 1);
- }
-
- return APR_SUCCESS;
- }
-
- if ((n = SSL_accept(filter_ctx->pssl)) <= 0) {
- bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)
- (filter_ctx->pbioRead->ptr);
- bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)
- (filter_ctx->pbioWrite->ptr);
- apr_status_t rc = inctx->rc ? inctx->rc : outctx->rc ;
- ssl_err = SSL_get_error(filter_ctx->pssl, n);
-
- if (ssl_err == SSL_ERROR_ZERO_RETURN) {
- /*
- * The case where the connection was closed before any data
- * was transferred. That's not a real error and can occur
- * sporadically with some clients.
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, rc,
- c->base_server,
- "SSL handshake stopped: connection was closed");
- }
- else if (ssl_err == SSL_ERROR_WANT_READ) {
- /*
- * This is in addition to what was present earlier. It is
- * borrowed from openssl_state_machine.c [mod_tls].
- * TBD.
- */
- outctx->rc = APR_EAGAIN;
- return SSL_ERROR_WANT_READ;
- }
- else if (ERR_GET_LIB(ERR_peek_error()) == ERR_LIB_SSL &&
- ERR_GET_REASON(ERR_peek_error()) == SSL_R_HTTP_REQUEST) {
- /*
- * The case where OpenSSL has recognized a HTTP request:
- * This means the client speaks plain HTTP on our HTTPS port.
- * ssl_io_filter_error will disable the ssl filters when it
- * sees this status code.
- */
- return HTTP_BAD_REQUEST;
- }
- else if (ssl_err == SSL_ERROR_SYSCALL) {
- ap_log_error(APLOG_MARK, APLOG_INFO, rc, c->base_server,
- "SSL handshake interrupted by system "
- "[Hint: Stop button pressed in browser?!]");
- }
- else /* if (ssl_err == SSL_ERROR_SSL) */ {
- /*
- * Log SSL errors and any unexpected conditions.
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, rc, c->base_server,
- "SSL library error %d in handshake "
- "(server %s, client %s)", ssl_err,
- ssl_util_vhostid(c->pool, c->base_server),
- c->remote_ip ? c->remote_ip : "unknown");
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
-
- }
- if (inctx->rc == APR_SUCCESS) {
- inctx->rc = APR_EGENERAL;
- }
-
- return ssl_filter_io_shutdown(filter_ctx, c, 1);
- }
-
- /*
- * Check for failed client authentication
- */
- verify_result = SSL_get_verify_result(filter_ctx->pssl);
-
- if ((verify_result != X509_V_OK) ||
- sslconn->verify_error)
- {
- if (ssl_verify_error_is_optional(verify_result) &&
- (sc->server->auth.verify_mode == SSL_CVERIFY_OPTIONAL_NO_CA))
- {
- /* leaving this log message as an error for the moment,
- * according to the mod_ssl docs:
- * "level optional_no_ca is actually against the idea
- * of authentication (but can be used to establish
- * SSL test pages, etc.)"
- * optional_no_ca doesn't appear to work as advertised
- * in 1.x
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- c->base_server,
- "SSL client authentication failed, "
- "accepting certificate based on "
- "\"SSLVerifyClient optional_no_ca\" "
- "configuration");
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
- }
- else {
- const char *error = sslconn->verify_error ?
- sslconn->verify_error :
- X509_verify_cert_error_string(verify_result);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- c->base_server,
- "SSL client authentication failed: %s",
- error ? error : "unknown");
- ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
-
- return ssl_filter_io_shutdown(filter_ctx, c, 1);
- }
- }
-
- /*
- * Remember the peer certificate's DN
- */
- if ((cert = SSL_get_peer_certificate(filter_ctx->pssl))) {
- if (sslconn->client_cert) {
- X509_free(sslconn->client_cert);
- }
- sslconn->client_cert = cert;
- sslconn->client_dn = NULL;
- }
-
- /*
- * Make really sure that when a peer certificate
- * is required we really got one... (be paranoid)
- */
- if ((sc->server->auth.verify_mode == SSL_CVERIFY_REQUIRE) &&
- !sslconn->client_cert)
- {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, c->base_server,
- "No acceptable peer certificate available");
-
- return ssl_filter_io_shutdown(filter_ctx, c, 1);
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t ssl_io_filter_Upgrade(ap_filter_t *f,
- apr_bucket_brigade *bb)
-
-{
-#define SWITCH_STATUS_LINE "HTTP/1.1 101 Switching Protocols"
-#define UPGRADE_HEADER "Upgrade: TLS/1.0, HTTP/1.1"
-#define CONNECTION_HEADER "Connection: Upgrade"
- const char *upgrade;
- const char *connection;
- apr_bucket_brigade *upgradebb;
- request_rec *r = f->r;
- SSLConnRec *sslconn;
- SSL *ssl;
- char *token_string;
- char *token;
- char *token_state;
-
- /* Just remove the filter, if it doesn't work the first time, it won't
- * work at all for this request.
- */
- ap_remove_output_filter(f);
-
- /* No need to ensure that this is a server with optional SSL, the filter
- * is only inserted if that is true.
- */
-
- upgrade = apr_table_get(r->headers_in, "Upgrade");
- if (upgrade == NULL) {
- return ap_pass_brigade(f->next, bb);
- }
- token_string = apr_pstrdup(r->pool,upgrade);
- token = apr_strtok(token_string,", ",&token_state);
- while (token && strcmp(token,"TLS/1.0")) {
- apr_strtok(NULL,", ",&token_state);
- }
- /* "Upgrade: TLS/1.0" header not found, don't do Upgrade */
- if (!token) {
- return ap_pass_brigade(f->next, bb);
- }
-
- connection = apr_table_get(r->headers_in, "Connection");
-
- token_string = apr_pstrdup(r->pool,connection);
- token = apr_strtok(token_string,",",&token_state);
- while (token && strcmp(token,"Upgrade")) {
- apr_strtok(NULL,",",&token_state);
- }
- /* "Connection: Upgrade" header not found, don't do Upgrade */
- if (!token) {
- return ap_pass_brigade(f->next, bb);
- }
-
- apr_table_unset(r->headers_out, "Upgrade");
-
- if (r->method_number == M_OPTIONS) {
- apr_bucket *b = NULL;
- /* This is a mandatory SSL upgrade. */
-
- upgradebb = apr_brigade_create(r->pool, f->c->bucket_alloc);
-
- ap_fputstrs(f->next, upgradebb, SWITCH_STATUS_LINE, CRLF,
- UPGRADE_HEADER, CRLF, CONNECTION_HEADER, CRLF, CRLF, NULL);
-
- b = apr_bucket_flush_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(upgradebb, b);
-
- ap_pass_brigade(f->next, upgradebb);
- }
- else {
- /* This is optional, and should be configurable, for now don't bother
- * doing anything.
- */
- return ap_pass_brigade(f->next, bb);
- }
-
- ssl_init_ssl_connection(f->c);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Awaiting re-negotiation handshake");
-
- sslconn = myConnConfig(f->c);
- ssl = sslconn->ssl;
-
- /* XXX: Should replace SSL_set_state with SSL_renegotiate(ssl);
- * However, this causes failures in perl-framework currently,
- * perhaps pre-test if we have already negotiated?
- */
- SSL_set_accept_state(ssl);
- SSL_do_handshake(ssl);
-
- if (SSL_get_state(ssl) != SSL_ST_OK) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "TLS Upgrade handshake failed: "
- "Not accepted by client!?");
-
- return AP_FILTER_ERROR;
- }
-
- /* Now that we have initialized the ssl connection which added the ssl_io_filter,
- pass the brigade off to the connection based output filters so that the
- request can complete encrypted */
- return ap_pass_brigade(f->c->output_filters, bb);
-
-}
-
-static apr_status_t ssl_io_filter_input(ap_filter_t *f,
- apr_bucket_brigade *bb,
- ap_input_mode_t mode,
- apr_read_type_e block,
- apr_off_t readbytes)
-{
- apr_status_t status;
- bio_filter_in_ctx_t *inctx = f->ctx;
-
- apr_size_t len = sizeof(inctx->buffer);
- int is_init = (mode == AP_MODE_INIT);
-
- if (f->c->aborted) {
- /* XXX: Ok, if we aborted, we ARE at the EOS. We also have
- * aborted. This 'double protection' is probably redundant,
- * but also effective against just about anything.
- */
- apr_bucket *bucket = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, bucket);
- return APR_ECONNABORTED;
- }
-
- if (!inctx->ssl) {
- return ap_get_brigade(f->next, bb, mode, block, readbytes);
- }
-
- /* XXX: we don't currently support anything other than these modes. */
- if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE &&
- mode != AP_MODE_SPECULATIVE && mode != AP_MODE_INIT) {
- return APR_ENOTIMPL;
- }
-
- inctx->mode = mode;
- inctx->block = block;
-
- /* XXX: we could actually move ssl_io_filter_connect to an
- * ap_hook_process_connection but would still need to call it for
- * AP_MODE_INIT for protocols that may upgrade the connection
- * rather than have SSLEngine On configured.
- */
- if ((status = ssl_io_filter_connect(inctx->filter_ctx)) != APR_SUCCESS) {
- return ssl_io_filter_error(f, bb, status);
- }
-
- if (is_init) {
- /* protocol module needs to handshake before sending
- * data to client (e.g. NNTP or FTP)
- */
- return APR_SUCCESS;
- }
-
- if (inctx->mode == AP_MODE_READBYTES ||
- inctx->mode == AP_MODE_SPECULATIVE) {
- /* Protected from truncation, readbytes < MAX_SIZE_T
- * FIXME: No, it's *not* protected. -- jre */
- if (readbytes < len) {
- len = (apr_size_t)readbytes;
- }
- status = ssl_io_input_read(inctx, inctx->buffer, &len);
- }
- else if (inctx->mode == AP_MODE_GETLINE) {
- status = ssl_io_input_getline(inctx, inctx->buffer, &len);
- }
- else {
- /* We have no idea what you are talking about, so return an error. */
- return APR_ENOTIMPL;
- }
-
- if (status != APR_SUCCESS) {
- return ssl_io_filter_error(f, bb, status);
- }
-
- /* Create a transient bucket out of the decrypted data. */
- if (len > 0) {
- apr_bucket *bucket =
- apr_bucket_transient_create(inctx->buffer, len, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, bucket);
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t ssl_io_filter_output(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- apr_status_t status = APR_SUCCESS;
- ssl_filter_ctx_t *filter_ctx = f->ctx;
- bio_filter_in_ctx_t *inctx;
- bio_filter_out_ctx_t *outctx;
- apr_read_type_e rblock = APR_NONBLOCK_READ;
-
- if (f->c->aborted) {
- apr_brigade_cleanup(bb);
- return APR_ECONNABORTED;
- }
-
- if (!filter_ctx->pssl) {
- /* ssl_filter_io_shutdown was called */
- return ap_pass_brigade(f->next, bb);
- }
-
- inctx = (bio_filter_in_ctx_t *)filter_ctx->pbioRead->ptr;
- outctx = (bio_filter_out_ctx_t *)filter_ctx->pbioWrite->ptr;
-
- /* When we are the writer, we must initialize the inctx
- * mode so that we block for any required ssl input, because
- * output filtering is always nonblocking.
- */
- inctx->mode = AP_MODE_READBYTES;
- inctx->block = APR_BLOCK_READ;
-
- if ((status = ssl_io_filter_connect(filter_ctx)) != APR_SUCCESS) {
- return ssl_io_filter_error(f, bb, status);
- }
-
- while (!APR_BRIGADE_EMPTY(bb)) {
- apr_bucket *bucket = APR_BRIGADE_FIRST(bb);
-
- /* If it is a flush or EOS, we need to pass this down.
- * These types do not require translation by OpenSSL.
- */
- if (APR_BUCKET_IS_EOS(bucket) || APR_BUCKET_IS_FLUSH(bucket)) {
- if (bio_filter_out_flush(filter_ctx->pbioWrite) < 0) {
- status = outctx->rc;
- break;
- }
-
- if (APR_BUCKET_IS_EOS(bucket)) {
- /*
- * By definition, nothing can come after EOS.
- * which also means we can pass the rest of this brigade
- * without creating a new one since it only contains the
- * EOS bucket.
- */
-
- if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
- return status;
- }
- break;
- }
- else {
- /* bio_filter_out_flush() already passed down a flush bucket
- * if there was any data to be flushed.
- */
- apr_bucket_delete(bucket);
- }
- }
- else if (AP_BUCKET_IS_EOC(bucket)) {
- /* The special "EOC" bucket means a shutdown is needed;
- * - turn off buffering in bio_filter_out_write
- * - issue the SSL_shutdown
- */
- filter_ctx->nobuffer = 1;
- status = ssl_filter_io_shutdown(filter_ctx, f->c, 0);
- if (status != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_INFO, status, NULL,
- "SSL filter error shutting down I/O");
- }
- if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
- return status;
- }
- break;
- }
- else {
- /* filter output */
- const char *data;
- apr_size_t len;
-
- status = apr_bucket_read(bucket, &data, &len, rblock);
-
- if (APR_STATUS_IS_EAGAIN(status)) {
- /* No data available: flush... */
- if (bio_filter_out_flush(filter_ctx->pbioWrite) < 0) {
- status = outctx->rc;
- break;
- }
- rblock = APR_BLOCK_READ;
- continue; /* and try again with a blocking read. */
- }
-
- rblock = APR_NONBLOCK_READ;
-
- if (!APR_STATUS_IS_EOF(status) && (status != APR_SUCCESS)) {
- break;
- }
-
- status = ssl_filter_write(f, data, len);
- apr_bucket_delete(bucket);
-
- if (status != APR_SUCCESS) {
- break;
- }
- }
- }
-
- return status;
-}
-
-static void ssl_io_input_add_filter(ssl_filter_ctx_t *filter_ctx, conn_rec *c,
- SSL *ssl)
-{
- bio_filter_in_ctx_t *inctx;
-
- inctx = apr_palloc(c->pool, sizeof(*inctx));
-
- filter_ctx->pInputFilter = ap_add_input_filter(ssl_io_filter, inctx, NULL, c);
-
- filter_ctx->pbioRead = BIO_new(&bio_filter_in_method);
- filter_ctx->pbioRead->ptr = (void *)inctx;
-
- inctx->ssl = ssl;
- inctx->bio_out = filter_ctx->pbioWrite;
- inctx->f = filter_ctx->pInputFilter;
- inctx->rc = APR_SUCCESS;
- inctx->mode = AP_MODE_READBYTES;
- inctx->cbuf.length = 0;
- inctx->bb = apr_brigade_create(c->pool, c->bucket_alloc);
- inctx->block = APR_BLOCK_READ;
- inctx->pool = c->pool;
- inctx->filter_ctx = filter_ctx;
-}
-
-void ssl_io_filter_init(conn_rec *c, SSL *ssl)
-{
- ssl_filter_ctx_t *filter_ctx;
-
- filter_ctx = apr_palloc(c->pool, sizeof(ssl_filter_ctx_t));
-
- filter_ctx->pOutputFilter = ap_add_output_filter(ssl_io_filter,
- filter_ctx, NULL, c);
-
- filter_ctx->pbioWrite = BIO_new(&bio_filter_out_method);
- filter_ctx->pbioWrite->ptr = (void *)bio_filter_out_ctx_new(filter_ctx, c);
-
- ssl_io_input_add_filter(filter_ctx, c, ssl);
-
- SSL_set_bio(ssl, filter_ctx->pbioRead, filter_ctx->pbioWrite);
- filter_ctx->pssl = ssl;
-
- apr_pool_cleanup_register(c->pool, (void*)filter_ctx,
- ssl_io_filter_cleanup, apr_pool_cleanup_null);
-
- if (c->base_server->loglevel >= APLOG_DEBUG) {
- BIO_set_callback(SSL_get_rbio(ssl), ssl_io_data_cb);
- BIO_set_callback_arg(SSL_get_rbio(ssl), (void *)ssl);
- }
-
- return;
-}
-
-void ssl_io_filter_register(apr_pool_t *p)
-{
- /* This filter MUST be after the HTTP_HEADER filter, but it also must be
- * a resource-level filter so it has the request_rec.
- */
- ap_register_output_filter ("UPGRADE_FILTER", ssl_io_filter_Upgrade, NULL, AP_FTYPE_PROTOCOL + 5);
-
- ap_register_input_filter (ssl_io_filter, ssl_io_filter_input, NULL, AP_FTYPE_CONNECTION + 5);
- ap_register_output_filter (ssl_io_filter, ssl_io_filter_output, NULL, AP_FTYPE_CONNECTION + 5);
- return;
-}
-
-/* _________________________________________________________________
-**
-** I/O Data Debugging
-** _________________________________________________________________
-*/
-
-#define DUMP_WIDTH 16
-
-static void ssl_io_data_dump(server_rec *srvr,
- MODSSL_BIO_CB_ARG_TYPE *s,
- long len)
-{
- char buf[256];
- char tmp[64];
- int i, j, rows, trunc;
- unsigned char ch;
-
- trunc = 0;
- for(; (len > 0) && ((s[len-1] == ' ') || (s[len-1] == '\0')); len--)
- trunc++;
- rows = (len / DUMP_WIDTH);
- if ((rows * DUMP_WIDTH) < len)
- rows++;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, srvr,
- "+-------------------------------------------------------------------------+");
- for(i = 0 ; i< rows; i++) {
- apr_snprintf(tmp, sizeof(tmp), "| %04x: ", i * DUMP_WIDTH);
- apr_cpystrn(buf, tmp, sizeof(buf));
- for (j = 0; j < DUMP_WIDTH; j++) {
- if (((i * DUMP_WIDTH) + j) >= len)
- apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
- else {
- ch = ((unsigned char)*((char *)(s) + i * DUMP_WIDTH + j)) & 0xff;
- apr_snprintf(tmp, sizeof(tmp), "%02x%c", ch , j==7 ? '-' : ' ');
- apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf));
- }
- }
- apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
- for (j = 0; j < DUMP_WIDTH; j++) {
- if (((i * DUMP_WIDTH) + j) >= len)
- apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
- else {
- ch = ((unsigned char)*((char *)(s) + i * DUMP_WIDTH + j)) & 0xff;
- apr_snprintf(tmp, sizeof(tmp), "%c", ((ch >= ' ') && (ch <= '~')) ? ch : '.');
- apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf));
- }
- }
- apr_cpystrn(buf+strlen(buf), " |", sizeof(buf)-strlen(buf));
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, srvr,
- "%s", buf);
- }
- if (trunc > 0)
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, srvr,
- "| %04ld - <SPACES/NULS>", len + trunc);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, srvr,
- "+-------------------------------------------------------------------------+");
- return;
-}
-
-long ssl_io_data_cb(BIO *bio, int cmd,
- MODSSL_BIO_CB_ARG_TYPE *argp,
- int argi, long argl, long rc)
-{
- SSL *ssl;
- conn_rec *c;
- server_rec *s;
-
- if ((ssl = (SSL *)BIO_get_callback_arg(bio)) == NULL)
- return rc;
- if ((c = (conn_rec *)SSL_get_app_data(ssl)) == NULL)
- return rc;
- s = c->base_server;
-
- if ( cmd == (BIO_CB_WRITE|BIO_CB_RETURN)
- || cmd == (BIO_CB_READ |BIO_CB_RETURN) ) {
- if (rc >= 0) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: %s %ld/%d bytes %s BIO#%pp [mem: %pp] %s",
- SSL_LIBRARY_NAME,
- (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "write" : "read"),
- rc, argi, (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "to" : "from"),
- bio, argp,
- (argp != NULL ? "(BIO dump follows)" : "(Oops, no memory buffer?)"));
- if (argp != NULL)
- ssl_io_data_dump(s, argp, rc);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: I/O error, %d bytes expected to %s on BIO#%pp [mem: %pp]",
- SSL_LIBRARY_NAME, argi,
- (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "write" : "read"),
- bio, argp);
- }
- }
- return rc;
-}
diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c
deleted file mode 100644
index 6022ef9262..0000000000
--- a/modules/ssl/ssl_engine_kernel.c
+++ /dev/null
@@ -1,1834 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_kernel.c
- * The SSL engine kernel
- */
- /* ``It took me fifteen years to discover
- I had no talent for programming, but
- I couldn't give it up because by that
- time I was too famous.''
- -- Unknown */
-#include "ssl_private.h"
-
-/*
- * Post Read Request Handler
- */
-int ssl_hook_ReadReq(request_rec *r)
-{
- SSLConnRec *sslconn = myConnConfig(r->connection);
- SSL *ssl;
-
- if (!sslconn) {
- return DECLINED;
- }
-
- if (sslconn->non_ssl_request) {
- const char *errmsg;
- char *thisurl;
- char *thisport = "";
- int port = ap_get_server_port(r);
-
- if (!ap_is_default_port(port, r)) {
- thisport = apr_psprintf(r->pool, ":%u", port);
- }
-
- thisurl = ap_escape_html(r->pool,
- apr_psprintf(r->pool, "https://%s%s/",
- ap_get_server_name(r),
- thisport));
-
- errmsg = apr_psprintf(r->pool,
- "Reason: You're speaking plain HTTP "
- "to an SSL-enabled server port.<br />\n"
- "Instead use the HTTPS scheme to access "
- "this URL, please.<br />\n"
- "<blockquote>Hint: "
- "<a href=\"%s\"><b>%s</b></a></blockquote>",
- thisurl, thisurl);
-
- apr_table_setn(r->notes, "error-notes", errmsg);
-
- /* Now that we have caught this error, forget it. we are done
- * with using SSL on this request.
- */
- sslconn->non_ssl_request = 0;
-
-
- return HTTP_BAD_REQUEST;
- }
-
- /*
- * Get the SSL connection structure and perform the
- * delayed interlinking from SSL back to request_rec
- */
- if ((ssl = sslconn->ssl)) {
- SSL_set_app_data2(ssl, r);
- }
-
- return DECLINED;
-}
-
-/*
- * Move SetEnvIf information from request_rec to conn_rec/BUFF
- * to allow the close connection handler to use them.
- */
-
-static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn)
-{
- int i;
- const apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
- const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
-
- sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
-
- for (i = 0; i < arr->nelts; i++) {
- const char *key = elts[i].key;
-
- switch (*key) {
- case 's':
- /* being case-sensitive here.
- * and not checking for the -shutdown since these are the only
- * SetEnvIf "flags" we support
- */
- if (!strncmp(key+1, "sl-", 3)) {
- key += 4;
- if (!strncmp(key, "unclean", 7)) {
- sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
- }
- else if (!strncmp(key, "accurate", 8)) {
- sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_ACCURATE;
- }
- return; /* should only ever be one ssl-*-shutdown */
- }
- break;
- }
- }
-}
-
-/*
- * URL Translation Handler
- */
-int ssl_hook_Translate(request_rec *r)
-{
- SSLConnRec *sslconn = myConnConfig(r->connection);
-
- if (!(sslconn && sslconn->ssl)) {
- return DECLINED;
- }
-
- /*
- * Log information about incoming HTTPS requests
- */
- if (r->server->loglevel >= APLOG_INFO && ap_is_initial_req(r)) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "%s HTTPS request received for child %ld (server %s)",
- (r->connection->keepalives <= 0 ?
- "Initial (No.1)" :
- apr_psprintf(r->pool, "Subsequent (No.%d)",
- r->connection->keepalives+1)),
- r->connection->id,
- ssl_util_vhostid(r->pool, r->server));
- }
-
- /* SetEnvIf ssl-*-shutdown flags can only be per-server,
- * so they won't change across keepalive requests
- */
- if (sslconn->shutdown_type == SSL_SHUTDOWN_TYPE_UNSET) {
- ssl_configure_env(r, sslconn);
- }
-
- return DECLINED;
-}
-
-/*
- * Access Handler
- */
-int ssl_hook_Access(request_rec *r)
-{
- SSLDirConfigRec *dc = myDirConfig(r);
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
- SSLConnRec *sslconn = myConnConfig(r->connection);
- SSL *ssl = sslconn ? sslconn->ssl : NULL;
- SSL_CTX *ctx = NULL;
- apr_array_header_t *requires;
- ssl_require_t *ssl_requires;
- char *cp;
- int ok, i;
- BOOL renegotiate = FALSE, renegotiate_quick = FALSE;
- X509 *cert;
- X509 *peercert;
- X509_STORE *cert_store = NULL;
- X509_STORE_CTX cert_store_ctx;
- STACK_OF(SSL_CIPHER) *cipher_list_old = NULL, *cipher_list = NULL;
- SSL_CIPHER *cipher = NULL;
- int depth, verify_old, verify, n;
-
- if (ssl) {
- ctx = SSL_get_SSL_CTX(ssl);
- }
-
- /*
- * Support for SSLRequireSSL directive
- */
- if (dc->bSSLRequired && !ssl) {
- if (sc->enabled == SSL_ENABLED_OPTIONAL) {
- /* This vhost was configured for optional SSL, just tell the
- * client that we need to upgrade.
- */
- apr_table_setn(r->err_headers_out, "Upgrade", "TLS/1.0, HTTP/1.1");
- apr_table_setn(r->err_headers_out, "Connection", "Upgrade");
-
- return HTTP_UPGRADE_REQUIRED;
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "access to %s failed, reason: %s",
- r->filename, "SSL connection required");
-
- /* remember forbidden access for strict require option */
- apr_table_setn(r->notes, "ssl-access-forbidden", "1");
-
- return HTTP_FORBIDDEN;
- }
-
- /*
- * Check to see if SSL protocol is on
- */
- if (!((sc->enabled == SSL_ENABLED_TRUE) || (sc->enabled == SSL_ENABLED_OPTIONAL) || ssl)) {
- return DECLINED;
- }
- /*
- * Support for per-directory reconfigured SSL connection parameters.
- *
- * This is implemented by forcing an SSL renegotiation with the
- * reconfigured parameter suite. But Apache's internal API processing
- * makes our life very hard here, because when internal sub-requests occur
- * we nevertheless should avoid multiple unnecessary SSL handshakes (they
- * require extra network I/O and especially time to perform).
- *
- * But the optimization for filtering out the unnecessary handshakes isn't
- * obvious and trivial. Especially because while Apache is in its
- * sub-request processing the client could force additional handshakes,
- * too. And these take place perhaps without our notice. So the only
- * possibility is to explicitly _ask_ OpenSSL whether the renegotiation
- * has to be performed or not. It has to performed when some parameters
- * which were previously known (by us) are not those we've now
- * reconfigured (as known by OpenSSL) or (in optimized way) at least when
- * the reconfigured parameter suite is stronger (more restrictions) than
- * the currently active one.
- */
-
- /*
- * Override of SSLCipherSuite
- *
- * We provide two options here:
- *
- * o The paranoid and default approach where we force a renegotiation when
- * the cipher suite changed in _any_ way (which is straight-forward but
- * often forces renegotiations too often and is perhaps not what the
- * user actually wanted).
- *
- * o The optimized and still secure way where we force a renegotiation
- * only if the currently active cipher is no longer contained in the
- * reconfigured/new cipher suite. Any other changes are not important
- * because it's the servers choice to select a cipher from the ones the
- * client supports. So as long as the current cipher is still in the new
- * cipher suite we're happy. Because we can assume we would have
- * selected it again even when other (better) ciphers exists now in the
- * new cipher suite. This approach is fine because the user explicitly
- * has to enable this via ``SSLOptions +OptRenegotiate''. So we do no
- * implicit optimizations.
- */
- if (dc->szCipherSuite) {
- /* remember old state */
-
- if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) {
- cipher = SSL_get_current_cipher(ssl);
- }
- else {
- cipher_list_old = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl);
-
- if (cipher_list_old) {
- cipher_list_old = sk_SSL_CIPHER_dup(cipher_list_old);
- }
- }
-
- /* configure new state */
- if (!modssl_set_cipher_list(ssl, dc->szCipherSuite)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- r->server,
- "Unable to reconfigure (per-directory) "
- "permitted SSL ciphers");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, r->server);
-
- if (cipher_list_old) {
- sk_SSL_CIPHER_free(cipher_list_old);
- }
-
- return HTTP_FORBIDDEN;
- }
-
- /* determine whether a renegotiation has to be forced */
- cipher_list = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl);
-
- if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) {
- /* optimized way */
- if ((!cipher && cipher_list) ||
- (cipher && !cipher_list))
- {
- renegotiate = TRUE;
- }
- else if (cipher && cipher_list &&
- (sk_SSL_CIPHER_find(cipher_list, cipher) < 0))
- {
- renegotiate = TRUE;
- }
- }
- else {
- /* paranoid way */
- if ((!cipher_list_old && cipher_list) ||
- (cipher_list_old && !cipher_list))
- {
- renegotiate = TRUE;
- }
- else if (cipher_list_old && cipher_list) {
- for (n = 0;
- !renegotiate && (n < sk_SSL_CIPHER_num(cipher_list));
- n++)
- {
- SSL_CIPHER *value = sk_SSL_CIPHER_value(cipher_list, n);
-
- if (sk_SSL_CIPHER_find(cipher_list_old, value) < 0) {
- renegotiate = TRUE;
- }
- }
-
- for (n = 0;
- !renegotiate && (n < sk_SSL_CIPHER_num(cipher_list_old));
- n++)
- {
- SSL_CIPHER *value = sk_SSL_CIPHER_value(cipher_list_old, n);
-
- if (sk_SSL_CIPHER_find(cipher_list, value) < 0) {
- renegotiate = TRUE;
- }
- }
- }
- }
-
- /* cleanup */
- if (cipher_list_old) {
- sk_SSL_CIPHER_free(cipher_list_old);
- }
-
- /* tracing */
- if (renegotiate) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "Reconfigured cipher suite will force renegotiation");
- }
- }
-
- /*
- * override of SSLVerifyDepth
- *
- * The depth checks are handled by us manually inside the verify callback
- * function and not by OpenSSL internally (and our function is aware of
- * both the per-server and per-directory contexts). So we cannot ask
- * OpenSSL about the currently verify depth. Instead we remember it in our
- * ap_ctx attached to the SSL* of OpenSSL. We've to force the
- * renegotiation if the reconfigured/new verify depth is less than the
- * currently active/remembered verify depth (because this means more
- * restriction on the certificate chain).
- */
- if (dc->nVerifyDepth != UNSET) {
- /* XXX: doesnt look like sslconn->verify_depth is actually used */
- if (!(n = sslconn->verify_depth)) {
- sslconn->verify_depth = n = sc->server->auth.verify_depth;
- }
-
- /* determine whether a renegotiation has to be forced */
- if (dc->nVerifyDepth < n) {
- renegotiate = TRUE;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "Reduced client verification depth will force "
- "renegotiation");
- }
- }
-
- /*
- * override of SSLVerifyClient
- *
- * We force a renegotiation if the reconfigured/new verify type is
- * stronger than the currently active verify type.
- *
- * The order is: none << optional_no_ca << optional << require
- *
- * Additionally the following optimization is possible here: When the
- * currently active verify type is "none" but a client certificate is
- * already known/present, it's enough to manually force a client
- * verification but at least skip the I/O-intensive renegotation
- * handshake.
- */
- if (dc->nVerifyClient != SSL_CVERIFY_UNSET) {
- /* remember old state */
- verify_old = SSL_get_verify_mode(ssl);
- /* configure new state */
- verify = SSL_VERIFY_NONE;
-
- if (dc->nVerifyClient == SSL_CVERIFY_REQUIRE) {
- verify |= SSL_VERIFY_PEER_STRICT;
- }
-
- if ((dc->nVerifyClient == SSL_CVERIFY_OPTIONAL) ||
- (dc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA))
- {
- verify |= SSL_VERIFY_PEER;
- }
-
- modssl_set_verify(ssl, verify, ssl_callback_SSLVerify);
- SSL_set_verify_result(ssl, X509_V_OK);
-
- /* determine whether we've to force a renegotiation */
- if (!renegotiate && verify != verify_old) {
- if (((verify_old == SSL_VERIFY_NONE) &&
- (verify != SSL_VERIFY_NONE)) ||
-
- (!(verify_old & SSL_VERIFY_PEER) &&
- (verify & SSL_VERIFY_PEER)) ||
-
- (!(verify_old & SSL_VERIFY_PEER_STRICT) &&
- (verify & SSL_VERIFY_PEER_STRICT)))
- {
- renegotiate = TRUE;
- /* optimization */
-
- if ((dc->nOptions & SSL_OPT_OPTRENEGOTIATE) &&
- (verify_old == SSL_VERIFY_NONE) &&
- ((peercert = SSL_get_peer_certificate(ssl)) != NULL))
- {
- renegotiate_quick = TRUE;
- X509_free(peercert);
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0,
- r->server,
- "Changed client verification type will force "
- "%srenegotiation",
- renegotiate_quick ? "quick " : "");
- }
- }
- }
-
- /*
- * override SSLCACertificateFile & SSLCACertificatePath
- * This is only enabled if the SSL_set_cert_store() function
- * is available in the ssl library. the 1.x based mod_ssl
- * used SSL_CTX_set_cert_store which is not thread safe.
- */
-
-#ifdef HAVE_SSL_SET_CERT_STORE
- /*
- * check if per-dir and per-server config field are not the same.
- * if f is defined in per-dir and not defined in per-server
- * or f is defined in both but not the equal ...
- */
-#define MODSSL_CFG_NE(f) \
- (dc->f && (!sc->f || (sc->f && strNE(dc->f, sc->f))))
-
-#define MODSSL_CFG_CA(f) \
- (dc->f ? dc->f : sc->f)
-
- if (MODSSL_CFG_NE(szCACertificateFile) ||
- MODSSL_CFG_NE(szCACertificatePath))
- {
- STACK_OF(X509_NAME) *ca_list;
- const char *ca_file = MODSSL_CFG_CA(szCACertificateFile);
- const char *ca_path = MODSSL_CFG_CA(szCACertificatePath);
-
- cert_store = X509_STORE_new();
-
- if (!X509_STORE_load_locations(cert_store, ca_file, ca_path)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Unable to reconfigure verify locations "
- "for client authentication");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, r->server);
-
- X509_STORE_free(cert_store);
-
- return HTTP_FORBIDDEN;
- }
-
- /* SSL_free will free cert_store */
- SSL_set_cert_store(ssl, cert_store);
-
- if (!(ca_list = ssl_init_FindCAList(r->server, r->pool,
- ca_file, ca_path)))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Unable to determine list of available "
- "CA certificates for client authentication");
-
- return HTTP_FORBIDDEN;
- }
-
- SSL_set_client_CA_list(ssl, ca_list);
- renegotiate = TRUE;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "Changed client verification locations will force "
- "renegotiation");
- }
-#endif /* HAVE_SSL_SET_CERT_STORE */
-
- /*
- * SSL renegotiations in conjunction with HTTP
- * requests using the POST method are not supported.
- *
- * Background:
- *
- * 1. When the client sends a HTTP/HTTPS request, Apache's core code
- * reads only the request line ("METHOD /path HTTP/x.y") and the
- * attached MIME headers ("Foo: bar") up to the terminating line ("CR
- * LF"). An attached request body (for instance the data of a POST
- * method) is _NOT_ read. Instead it is read by mod_cgi's content
- * handler and directly passed to the CGI script.
- *
- * 2. mod_ssl supports per-directory re-configuration of SSL parameters.
- * This is implemented by performing an SSL renegotiation of the
- * re-configured parameters after the request is read, but before the
- * response is sent. In more detail: the renegotiation happens after the
- * request line and MIME headers were read, but _before_ the attached
- * request body is read. The reason simply is that in the HTTP protocol
- * usually there is no acknowledgment step between the headers and the
- * body (there is the 100-continue feature and the chunking facility
- * only), so Apache has no API hook for this step.
- *
- * 3. the problem now occurs when the client sends a POST request for
- * URL /foo via HTTPS the server and the server has SSL parameters
- * re-configured on a per-URL basis for /foo. Then mod_ssl has to
- * perform an SSL renegotiation after the request was read and before
- * the response is sent. But the problem is the pending POST body data
- * in the receive buffer of SSL (which Apache still has not read - it's
- * pending until mod_cgi sucks it in). When mod_ssl now tries to perform
- * the renegotiation the pending data leads to an I/O error.
- *
- * Solution Idea:
- *
- * There are only two solutions: Either to simply state that POST
- * requests to URLs with SSL re-configurations are not allowed, or to
- * renegotiate really after the _complete_ request (i.e. including
- * the POST body) was read. Obviously the latter would be preferred,
- * but it cannot be done easily inside Apache, because as already
- * mentioned, there is no API step between the body reading and the body
- * processing. And even when we mod_ssl would hook directly into the
- * loop of mod_cgi, we wouldn't solve the problem for other handlers, of
- * course. So the only general solution is to suck in the pending data
- * of the request body from the OpenSSL BIO into the Apache BUFF. Then
- * the renegotiation can be done and after this step Apache can proceed
- * processing the request as before.
- *
- * Solution Implementation:
- *
- * We cannot simply suck in the data via an SSL_read-based loop because of
- * HTTP chunking. Instead we _have_ to use the Apache API for this step which
- * is aware of HTTP chunking. So the trick is to suck in the pending request
- * data via the Apache API (which uses Apache's BUFF code and in the
- * background mod_ssl's I/O glue code) and re-inject it later into the Apache
- * BUFF code again. This way the data flows twice through the Apache BUFF, of
- * course. But this way the solution doesn't depend on any Apache specifics
- * and is fully transparent to Apache modules.
- *
- * !! BUT ALL THIS IS STILL NOT RE-IMPLEMENTED FOR APACHE 2.0 !!
- */
- if (renegotiate && !renegotiate_quick && (r->method_number == M_POST)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "SSL Re-negotiation in conjunction "
- "with POST method not supported!\n"
- "hint: try SSLOptions +OptRenegotiate");
-
- return HTTP_METHOD_NOT_ALLOWED;
- }
-
- /*
- * now do the renegotiation if anything was actually reconfigured
- */
- if (renegotiate) {
- /*
- * Now we force the SSL renegotation by sending the Hello Request
- * message to the client. Here we have to do a workaround: Actually
- * OpenSSL returns immediately after sending the Hello Request (the
- * intent AFAIK is because the SSL/TLS protocol says it's not a must
- * that the client replies to a Hello Request). But because we insist
- * on a reply (anything else is an error for us) we have to go to the
- * ACCEPT state manually. Using SSL_set_accept_state() doesn't work
- * here because it resets too much of the connection. So we set the
- * state explicitly and continue the handshake manually.
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Requesting connection re-negotiation");
-
- if (renegotiate_quick) {
- STACK_OF(X509) *cert_stack;
-
- /* perform just a manual re-verification of the peer */
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "Performing quick renegotiation: "
- "just re-verifying the peer");
-
- cert_stack = (STACK_OF(X509) *)SSL_get_peer_cert_chain(ssl);
-
- cert = SSL_get_peer_certificate(ssl);
-
- if (!cert_stack && cert) {
- /* client cert is in the session cache, but there is
- * no chain, since ssl3_get_client_certificate()
- * sk_X509_shift-ed the peer cert out of the chain.
- * we put it back here for the purpose of quick_renegotiation.
- */
- cert_stack = sk_new_null();
- sk_X509_push(cert_stack, MODSSL_PCHAR_CAST cert);
- }
-
- if (!cert_stack || (sk_X509_num(cert_stack) == 0)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Cannot find peer certificate chain");
-
- return HTTP_FORBIDDEN;
- }
-
- if (!(cert_store ||
- (cert_store = SSL_CTX_get_cert_store(ctx))))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Cannot find certificate storage");
-
- return HTTP_FORBIDDEN;
- }
-
- if (!cert) {
- cert = sk_X509_value(cert_stack, 0);
- }
-
- X509_STORE_CTX_init(&cert_store_ctx, cert_store, cert, cert_stack);
- depth = SSL_get_verify_depth(ssl);
-
- if (depth >= 0) {
- X509_STORE_CTX_set_depth(&cert_store_ctx, depth);
- }
-
- X509_STORE_CTX_set_ex_data(&cert_store_ctx,
- SSL_get_ex_data_X509_STORE_CTX_idx(),
- (char *)ssl);
-
- if (!modssl_X509_verify_cert(&cert_store_ctx)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Re-negotiation verification step failed");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, r->server);
- }
-
- SSL_set_verify_result(ssl, cert_store_ctx.error);
- X509_STORE_CTX_cleanup(&cert_store_ctx);
-
- if (cert_stack != SSL_get_peer_cert_chain(ssl)) {
- /* we created this ourselves, so free it */
- sk_X509_pop_free(cert_stack, X509_free);
- }
- }
- else {
- request_rec *id = r->main ? r->main : r;
-
- /* do a full renegotiation */
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "Performing full renegotiation: "
- "complete handshake protocol");
-
- SSL_set_session_id_context(ssl,
- (unsigned char *)&id,
- sizeof(id));
-
- SSL_renegotiate(ssl);
- SSL_do_handshake(ssl);
-
- if (SSL_get_state(ssl) != SSL_ST_OK) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Re-negotiation request failed");
-
- r->connection->aborted = 1;
- return HTTP_FORBIDDEN;
- }
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Awaiting re-negotiation handshake");
-
- /* XXX: Should replace SSL_set_state with SSL_renegotiate(ssl);
- * However, this causes failures in perl-framework currently,
- * perhaps pre-test if we have already negotiated?
- */
- SSL_set_state(ssl, SSL_ST_ACCEPT);
- SSL_do_handshake(ssl);
-
- if (SSL_get_state(ssl) != SSL_ST_OK) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Re-negotiation handshake failed: "
- "Not accepted by client!?");
-
- r->connection->aborted = 1;
- return HTTP_FORBIDDEN;
- }
- }
-
- /*
- * Remember the peer certificate's DN
- */
- if ((cert = SSL_get_peer_certificate(ssl))) {
- if (sslconn->client_cert) {
- X509_free(sslconn->client_cert);
- }
- sslconn->client_cert = cert;
- sslconn->client_dn = NULL;
- }
-
- /*
- * Finally check for acceptable renegotiation results
- */
- if (dc->nVerifyClient != SSL_CVERIFY_NONE) {
- BOOL do_verify = (dc->nVerifyClient == SSL_CVERIFY_REQUIRE);
-
- if (do_verify && (SSL_get_verify_result(ssl) != X509_V_OK)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Re-negotiation handshake failed: "
- "Client verification failed");
-
- return HTTP_FORBIDDEN;
- }
-
- if (do_verify) {
- if ((peercert = SSL_get_peer_certificate(ssl)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "Re-negotiation handshake failed: "
- "Client certificate missing");
-
- return HTTP_FORBIDDEN;
- }
-
- X509_free(peercert);
- }
- }
- }
-
- /*
- * Check SSLRequire boolean expressions
- */
- requires = dc->aRequirement;
- ssl_requires = (ssl_require_t *)requires->elts;
-
- for (i = 0; i < requires->nelts; i++) {
- ssl_require_t *req = &ssl_requires[i];
- ok = ssl_expr_exec(r, req->mpExpr);
-
- if (ok < 0) {
- cp = apr_psprintf(r->pool,
- "Failed to execute "
- "SSL requirement expression: %s",
- ssl_expr_get_error());
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "access to %s failed, reason: %s",
- r->filename, cp);
-
- /* remember forbidden access for strict require option */
- apr_table_setn(r->notes, "ssl-access-forbidden", "1");
-
- return HTTP_FORBIDDEN;
- }
-
- if (ok != 1) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Access to %s denied for %s "
- "(requirement expression not fulfilled)",
- r->filename, r->connection->remote_ip);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Failed expression: %s", req->cpExpr);
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "access to %s failed, reason: %s",
- r->filename,
- "SSL requirement expression not fulfilled "
- "(see SSL logfile for more details)");
-
- /* remember forbidden access for strict require option */
- apr_table_setn(r->notes, "ssl-access-forbidden", "1");
-
- return HTTP_FORBIDDEN;
- }
- }
-
- /*
- * Else access is granted from our point of view (except vendor
- * handlers override). But we have to return DECLINED here instead
- * of OK, because mod_auth and other modules still might want to
- * deny access.
- */
-
- return DECLINED;
-}
-
-/*
- * Authentication Handler:
- * Fake a Basic authentication from the X509 client certificate.
- *
- * This must be run fairly early on to prevent a real authentication from
- * occuring, in particular it must be run before anything else that
- * authenticates a user. This means that the Module statement for this
- * module should be LAST in the Configuration file.
- */
-int ssl_hook_UserCheck(request_rec *r)
-{
- SSLConnRec *sslconn = myConnConfig(r->connection);
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
- SSLDirConfigRec *dc = myDirConfig(r);
- char *clientdn;
- const char *auth_line, *username, *password;
-
- /*
- * Additionally forbid access (again)
- * when strict require option is used.
- */
- if ((dc->nOptions & SSL_OPT_STRICTREQUIRE) &&
- (apr_table_get(r->notes, "ssl-access-forbidden")))
- {
- return HTTP_FORBIDDEN;
- }
-
- /*
- * We decline when we are in a subrequest. The Authorization header
- * would already be present if it was added in the main request.
- */
- if (!ap_is_initial_req(r)) {
- return DECLINED;
- }
-
- /*
- * Make sure the user is not able to fake the client certificate
- * based authentication by just entering an X.509 Subject DN
- * ("/XX=YYY/XX=YYY/..") as the username and "password" as the
- * password.
- */
- if ((auth_line = apr_table_get(r->headers_in, "Authorization"))) {
- if (strcEQ(ap_getword(r->pool, &auth_line, ' '), "Basic")) {
- while ((*auth_line == ' ') || (*auth_line == '\t')) {
- auth_line++;
- }
-
- auth_line = ap_pbase64decode(r->pool, auth_line);
- username = ap_getword_nulls(r->pool, &auth_line, ':');
- password = auth_line;
-
- if ((username[0] == '/') && strEQ(password, "password")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Encountered FakeBasicAuth spoof: %s", username);
- return HTTP_FORBIDDEN;
- }
- }
- }
-
- /*
- * We decline operation in various situations...
- * - SSLOptions +FakeBasicAuth not configured
- * - r->user already authenticated
- * - ssl not enabled
- * - client did not present a certificate
- */
- if (!((sc->enabled == SSL_ENABLED_TRUE || sc->enabled == SSL_ENABLED_OPTIONAL) && sslconn->ssl && sslconn->client_cert) ||
- !(dc->nOptions & SSL_OPT_FAKEBASICAUTH) || r->user)
- {
- return DECLINED;
- }
-
- if (!sslconn->client_dn) {
- X509_NAME *name = X509_get_subject_name(sslconn->client_cert);
- char *cp = X509_NAME_oneline(name, NULL, 0);
- sslconn->client_dn = apr_pstrdup(r->connection->pool, cp);
- modssl_free(cp);
- }
-
- clientdn = (char *)sslconn->client_dn;
-
- /*
- * Fake a password - which one would be immaterial, as, it seems, an empty
- * password in the users file would match ALL incoming passwords, if only
- * we were using the standard crypt library routine. Unfortunately, OpenSSL
- * "fixes" a "bug" in crypt and thus prevents blank passwords from
- * working. (IMHO what they really fix is a bug in the users of the code
- * - failing to program correctly for shadow passwords). We need,
- * therefore, to provide a password. This password can be matched by
- * adding the string "xxj31ZMTZzkVA" as the password in the user file.
- * This is just the crypted variant of the word "password" ;-)
- */
- auth_line = apr_pstrcat(r->pool, "Basic ",
- ap_pbase64encode(r->pool,
- apr_pstrcat(r->pool, clientdn,
- ":password", NULL)),
- NULL);
- apr_table_set(r->headers_in, "Authorization", auth_line);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,
- "Faking HTTP Basic Auth header: \"Authorization: %s\"",
- auth_line);
-
- return DECLINED;
-}
-
-/* authorization phase */
-int ssl_hook_Auth(request_rec *r)
-{
- SSLDirConfigRec *dc = myDirConfig(r);
-
- /*
- * Additionally forbid access (again)
- * when strict require option is used.
- */
- if ((dc->nOptions & SSL_OPT_STRICTREQUIRE) &&
- (apr_table_get(r->notes, "ssl-access-forbidden")))
- {
- return HTTP_FORBIDDEN;
- }
-
- return DECLINED;
-}
-
-/*
- * Fixup Handler
- */
-
-static const char *ssl_hook_Fixup_vars[] = {
- "SSL_VERSION_INTERFACE",
- "SSL_VERSION_LIBRARY",
- "SSL_PROTOCOL",
- "SSL_CIPHER",
- "SSL_CIPHER_EXPORT",
- "SSL_CIPHER_USEKEYSIZE",
- "SSL_CIPHER_ALGKEYSIZE",
- "SSL_CLIENT_VERIFY",
- "SSL_CLIENT_M_VERSION",
- "SSL_CLIENT_M_SERIAL",
- "SSL_CLIENT_V_START",
- "SSL_CLIENT_V_END",
- "SSL_CLIENT_S_DN",
- "SSL_CLIENT_S_DN_C",
- "SSL_CLIENT_S_DN_ST",
- "SSL_CLIENT_S_DN_L",
- "SSL_CLIENT_S_DN_O",
- "SSL_CLIENT_S_DN_OU",
- "SSL_CLIENT_S_DN_CN",
- "SSL_CLIENT_S_DN_T",
- "SSL_CLIENT_S_DN_I",
- "SSL_CLIENT_S_DN_G",
- "SSL_CLIENT_S_DN_S",
- "SSL_CLIENT_S_DN_D",
- "SSL_CLIENT_S_DN_UID",
- "SSL_CLIENT_S_DN_Email",
- "SSL_CLIENT_I_DN",
- "SSL_CLIENT_I_DN_C",
- "SSL_CLIENT_I_DN_ST",
- "SSL_CLIENT_I_DN_L",
- "SSL_CLIENT_I_DN_O",
- "SSL_CLIENT_I_DN_OU",
- "SSL_CLIENT_I_DN_CN",
- "SSL_CLIENT_I_DN_T",
- "SSL_CLIENT_I_DN_I",
- "SSL_CLIENT_I_DN_G",
- "SSL_CLIENT_I_DN_S",
- "SSL_CLIENT_I_DN_D",
- "SSL_CLIENT_I_DN_UID",
- "SSL_CLIENT_I_DN_Email",
- "SSL_CLIENT_A_KEY",
- "SSL_CLIENT_A_SIG",
- "SSL_SERVER_M_VERSION",
- "SSL_SERVER_M_SERIAL",
- "SSL_SERVER_V_START",
- "SSL_SERVER_V_END",
- "SSL_SERVER_S_DN",
- "SSL_SERVER_S_DN_C",
- "SSL_SERVER_S_DN_ST",
- "SSL_SERVER_S_DN_L",
- "SSL_SERVER_S_DN_O",
- "SSL_SERVER_S_DN_OU",
- "SSL_SERVER_S_DN_CN",
- "SSL_SERVER_S_DN_T",
- "SSL_SERVER_S_DN_I",
- "SSL_SERVER_S_DN_G",
- "SSL_SERVER_S_DN_S",
- "SSL_SERVER_S_DN_D",
- "SSL_SERVER_S_DN_UID",
- "SSL_SERVER_S_DN_Email",
- "SSL_SERVER_I_DN",
- "SSL_SERVER_I_DN_C",
- "SSL_SERVER_I_DN_ST",
- "SSL_SERVER_I_DN_L",
- "SSL_SERVER_I_DN_O",
- "SSL_SERVER_I_DN_OU",
- "SSL_SERVER_I_DN_CN",
- "SSL_SERVER_I_DN_T",
- "SSL_SERVER_I_DN_I",
- "SSL_SERVER_I_DN_G",
- "SSL_SERVER_I_DN_S",
- "SSL_SERVER_I_DN_D",
- "SSL_SERVER_I_DN_UID",
- "SSL_SERVER_I_DN_Email",
- "SSL_SERVER_A_KEY",
- "SSL_SERVER_A_SIG",
- "SSL_SESSION_ID",
- NULL
-};
-
-int ssl_hook_Fixup(request_rec *r)
-{
- SSLConnRec *sslconn = myConnConfig(r->connection);
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
- SSLDirConfigRec *dc = myDirConfig(r);
- apr_table_t *env = r->subprocess_env;
- char *var, *val = "";
- STACK_OF(X509) *peer_certs;
- SSL *ssl;
- int i;
-
- if (sc->enabled == SSL_ENABLED_OPTIONAL && !(sslconn && sslconn->ssl)) {
- apr_table_setn(r->headers_out, "Upgrade", "TLS/1.0, HTTP/1.1");
- }
-
- /*
- * Check to see if SSL is on
- */
- if (!(((sc->enabled == SSL_ENABLED_TRUE) || (sc->enabled == SSL_ENABLED_OPTIONAL)) && sslconn && (ssl = sslconn->ssl))) {
- return DECLINED;
- }
-
- /*
- * Set r->user if requested
- */
- if (dc->szUserName) {
- val = ssl_var_lookup(r->pool, r->server, r->connection,
- r, (char *)dc->szUserName);
- if (val && val[0]) {
- r->user = val;
- }
- }
-
- /*
- * Annotate the SSI/CGI environment with standard SSL information
- */
- /* the always present HTTPS (=HTTP over SSL) flag! */
- apr_table_setn(env, "HTTPS", "on");
-
- /* standard SSL environment variables */
- if (dc->nOptions & SSL_OPT_STDENVVARS) {
- for (i = 0; ssl_hook_Fixup_vars[i]; i++) {
- var = (char *)ssl_hook_Fixup_vars[i];
- val = ssl_var_lookup(r->pool, r->server, r->connection, r, var);
- if (!strIsEmpty(val)) {
- apr_table_setn(env, var, val);
- }
- }
- }
-
- /*
- * On-demand bloat up the SSI/CGI environment with certificate data
- */
- if (dc->nOptions & SSL_OPT_EXPORTCERTDATA) {
- val = ssl_var_lookup(r->pool, r->server, r->connection,
- r, "SSL_SERVER_CERT");
-
- apr_table_setn(env, "SSL_SERVER_CERT", val);
-
- val = ssl_var_lookup(r->pool, r->server, r->connection,
- r, "SSL_CLIENT_CERT");
-
- apr_table_setn(env, "SSL_CLIENT_CERT", val);
-
- if ((peer_certs = (STACK_OF(X509) *)SSL_get_peer_cert_chain(ssl))) {
- for (i = 0; i < sk_X509_num(peer_certs); i++) {
- var = apr_psprintf(r->pool, "SSL_CLIENT_CERT_CHAIN_%d", i);
- val = ssl_var_lookup(r->pool, r->server, r->connection,
- r, var);
- if (val) {
- apr_table_setn(env, var, val);
- }
- }
- }
- }
-
- return DECLINED;
-}
-
-/* _________________________________________________________________
-**
-** OpenSSL Callback Functions
-** _________________________________________________________________
-*/
-
-/*
- * Handle out temporary RSA private keys on demand
- *
- * The background of this as the TLSv1 standard explains it:
- *
- * | D.1. Temporary RSA keys
- * |
- * | US Export restrictions limit RSA keys used for encryption to 512
- * | bits, but do not place any limit on lengths of RSA keys used for
- * | signing operations. Certificates often need to be larger than 512
- * | bits, since 512-bit RSA keys are not secure enough for high-value
- * | transactions or for applications requiring long-term security. Some
- * | certificates are also designated signing-only, in which case they
- * | cannot be used for key exchange.
- * |
- * | When the public key in the certificate cannot be used for encryption,
- * | the server signs a temporary RSA key, which is then exchanged. In
- * | exportable applications, the temporary RSA key should be the maximum
- * | allowable length (i.e., 512 bits). Because 512-bit RSA keys are
- * | relatively insecure, they should be changed often. For typical
- * | electronic commerce applications, it is suggested that keys be
- * | changed daily or every 500 transactions, and more often if possible.
- * | Note that while it is acceptable to use the same temporary key for
- * | multiple transactions, it must be signed each time it is used.
- * |
- * | RSA key generation is a time-consuming process. In many cases, a
- * | low-priority process can be assigned the task of key generation.
- * | Whenever a new key is completed, the existing temporary key can be
- * | replaced with the new one.
- *
- * XXX: base on comment above, if thread support is enabled,
- * we should spawn a low-priority thread to generate new keys
- * on the fly.
- *
- * So we generated 512 and 1024 bit temporary keys on startup
- * which we now just hand out on demand....
- */
-
-RSA *ssl_callback_TmpRSA(SSL *ssl, int export, int keylen)
-{
- conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
- SSLModConfigRec *mc = myModConfig(c->base_server);
- int idx;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
- "handing out temporary %d bit RSA key", keylen);
-
- /* doesn't matter if export flag is on,
- * we won't be asked for keylen > 512 in that case.
- * if we are asked for a keylen > 1024, it is too expensive
- * to generate on the fly.
- * XXX: any reason not to generate 2048 bit keys at startup?
- */
-
- switch (keylen) {
- case 512:
- idx = SSL_TMP_KEY_RSA_512;
- break;
-
- case 1024:
- default:
- idx = SSL_TMP_KEY_RSA_1024;
- }
-
- return (RSA *)mc->pTmpKeys[idx];
-}
-
-/*
- * Hand out the already generated DH parameters...
- */
-DH *ssl_callback_TmpDH(SSL *ssl, int export, int keylen)
-{
- conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
- SSLModConfigRec *mc = myModConfig(c->base_server);
- int idx;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, c->base_server,
- "handing out temporary %d bit DH key", keylen);
-
- switch (keylen) {
- case 512:
- idx = SSL_TMP_KEY_DH_512;
- break;
-
- case 1024:
- default:
- idx = SSL_TMP_KEY_DH_1024;
- }
-
- return (DH *)mc->pTmpKeys[idx];
-}
-
-/*
- * This OpenSSL callback function is called when OpenSSL
- * does client authentication and verifies the certificate chain.
- */
-int ssl_callback_SSLVerify(int ok, X509_STORE_CTX *ctx)
-{
- /* Get Apache context back through OpenSSL context */
- SSL *ssl = (SSL *)X509_STORE_CTX_get_app_data(ctx);
- conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl);
- server_rec *s = conn->base_server;
- request_rec *r = (request_rec *)SSL_get_app_data2(ssl);
-
- SSLSrvConfigRec *sc = mySrvConfig(s);
- SSLDirConfigRec *dc = r ? myDirConfig(r) : NULL;
- SSLConnRec *sslconn = myConnConfig(conn);
- modssl_ctx_t *mctx = myCtxConfig(sslconn, sc);
-
- /* Get verify ingredients */
- int errnum = X509_STORE_CTX_get_error(ctx);
- int errdepth = X509_STORE_CTX_get_error_depth(ctx);
- int depth, verify;
-
- /*
- * Log verification information
- */
- if (s->loglevel >= APLOG_DEBUG) {
- X509 *cert = X509_STORE_CTX_get_current_cert(ctx);
- char *sname = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
- char *iname = X509_NAME_oneline(X509_get_issuer_name(cert), NULL, 0);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Certificate Verification: "
- "depth: %d, subject: %s, issuer: %s",
- errdepth,
- sname ? sname : "-unknown-",
- iname ? iname : "-unknown-");
-
- if (sname) {
- modssl_free(sname);
- }
-
- if (iname) {
- modssl_free(iname);
- }
- }
-
- /*
- * Check for optionally acceptable non-verifiable issuer situation
- */
- if (dc && (dc->nVerifyClient != SSL_CVERIFY_UNSET)) {
- verify = dc->nVerifyClient;
- }
- else {
- verify = mctx->auth.verify_mode;
- }
-
- if (verify == SSL_CVERIFY_NONE) {
- /*
- * SSLProxyVerify is either not configured or set to "none".
- * (this callback doesn't happen in the server context if SSLVerify
- * is not configured or set to "none")
- */
- return TRUE;
- }
-
- if (ssl_verify_error_is_optional(errnum) &&
- (verify == SSL_CVERIFY_OPTIONAL_NO_CA))
- {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Certificate Verification: Verifiable Issuer is "
- "configured as optional, therefore we're accepting "
- "the certificate");
-
- sslconn->verify_info = "GENEROUS";
- ok = TRUE;
- }
-
- /*
- * Additionally perform CRL-based revocation checks
- */
- if (ok) {
- if (!(ok = ssl_callback_SSLVerify_CRL(ok, ctx, conn))) {
- errnum = X509_STORE_CTX_get_error(ctx);
- }
- }
-
- /*
- * If we already know it's not ok, log the real reason
- */
- if (!ok) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Certificate Verification: Error (%d): %s",
- errnum, X509_verify_cert_error_string(errnum));
-
- if (sslconn->client_cert) {
- X509_free(sslconn->client_cert);
- sslconn->client_cert = NULL;
- }
- sslconn->client_dn = NULL;
- sslconn->verify_error = X509_verify_cert_error_string(errnum);
- }
-
- /*
- * Finally check the depth of the certificate verification
- */
- if (dc && (dc->nVerifyDepth != UNSET)) {
- depth = dc->nVerifyDepth;
- }
- else {
- depth = mctx->auth.verify_depth;
- }
-
- if (errdepth > depth) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Certificate Verification: Certificate Chain too long "
- "(chain has %d certificates, but maximum allowed are "
- "only %d)",
- errdepth, depth);
-
- errnum = X509_V_ERR_CERT_CHAIN_TOO_LONG;
- sslconn->verify_error = X509_verify_cert_error_string(errnum);
-
- ok = FALSE;
- }
-
- /*
- * And finally signal OpenSSL the (perhaps changed) state
- */
- return ok;
-}
-
-int ssl_callback_SSLVerify_CRL(int ok, X509_STORE_CTX *ctx, conn_rec *c)
-{
- server_rec *s = c->base_server;
- SSLSrvConfigRec *sc = mySrvConfig(s);
- SSLConnRec *sslconn = myConnConfig(c);
- modssl_ctx_t *mctx = myCtxConfig(sslconn, sc);
- X509_OBJECT obj;
- X509_NAME *subject, *issuer;
- X509 *cert;
- X509_CRL *crl;
- EVP_PKEY *pubkey;
- int i, n, rc;
-
- /*
- * Unless a revocation store for CRLs was created we
- * cannot do any CRL-based verification, of course.
- */
- if (!mctx->crl) {
- return ok;
- }
-
- /*
- * Determine certificate ingredients in advance
- */
- cert = X509_STORE_CTX_get_current_cert(ctx);
- subject = X509_get_subject_name(cert);
- issuer = X509_get_issuer_name(cert);
-
- /*
- * OpenSSL provides the general mechanism to deal with CRLs but does not
- * use them automatically when verifying certificates, so we do it
- * explicitly here. We will check the CRL for the currently checked
- * certificate, if there is such a CRL in the store.
- *
- * We come through this procedure for each certificate in the certificate
- * chain, starting with the root-CA's certificate. At each step we've to
- * both verify the signature on the CRL (to make sure it's a valid CRL)
- * and it's revocation list (to make sure the current certificate isn't
- * revoked). But because to check the signature on the CRL we need the
- * public key of the issuing CA certificate (which was already processed
- * one round before), we've a little problem. But we can both solve it and
- * at the same time optimize the processing by using the following
- * verification scheme (idea and code snippets borrowed from the GLOBUS
- * project):
- *
- * 1. We'll check the signature of a CRL in each step when we find a CRL
- * through the _subject_ name of the current certificate. This CRL
- * itself will be needed the first time in the next round, of course.
- * But we do the signature processing one round before this where the
- * public key of the CA is available.
- *
- * 2. We'll check the revocation list of a CRL in each step when
- * we find a CRL through the _issuer_ name of the current certificate.
- * This CRLs signature was then already verified one round before.
- *
- * This verification scheme allows a CA to revoke its own certificate as
- * well, of course.
- */
-
- /*
- * Try to retrieve a CRL corresponding to the _subject_ of
- * the current certificate in order to verify it's integrity.
- */
- memset((char *)&obj, 0, sizeof(obj));
- rc = SSL_X509_STORE_lookup(mctx->crl,
- X509_LU_CRL, subject, &obj);
- crl = obj.data.crl;
-
- if ((rc > 0) && crl) {
- /*
- * Log information about CRL
- * (A little bit complicated because of ASN.1 and BIOs...)
- */
- if (s->loglevel >= APLOG_DEBUG) {
- char buff[512]; /* should be plenty */
- BIO *bio = BIO_new(BIO_s_mem());
-
- BIO_printf(bio, "CA CRL: Issuer: ");
- X509_NAME_print(bio, issuer, 0);
-
- BIO_printf(bio, ", lastUpdate: ");
- ASN1_UTCTIME_print(bio, X509_CRL_get_lastUpdate(crl));
-
- BIO_printf(bio, ", nextUpdate: ");
- ASN1_UTCTIME_print(bio, X509_CRL_get_nextUpdate(crl));
-
- n = BIO_read(bio, buff, sizeof(buff));
- buff[n] = '\0';
-
- BIO_free(bio);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, buff);
- }
-
- /*
- * Verify the signature on this CRL
- */
- pubkey = X509_get_pubkey(cert);
- rc = X509_CRL_verify(crl, pubkey);
-#ifdef OPENSSL_VERSION_NUMBER
- /* Only refcounted in OpenSSL */
- if (pubkey)
- EVP_PKEY_free(pubkey);
-#endif
- if (rc <= 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "Invalid signature on CRL");
-
- X509_STORE_CTX_set_error(ctx, X509_V_ERR_CRL_SIGNATURE_FAILURE);
- X509_OBJECT_free_contents(&obj);
- return FALSE;
- }
-
- /*
- * Check date of CRL to make sure it's not expired
- */
- i = X509_cmp_current_time(X509_CRL_get_nextUpdate(crl));
-
- if (i == 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "Found CRL has invalid nextUpdate field");
-
- X509_STORE_CTX_set_error(ctx,
- X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD);
- X509_OBJECT_free_contents(&obj);
-
- return FALSE;
- }
-
- if (i < 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "Found CRL is expired - "
- "revoking all certificates until you get updated CRL");
-
- X509_STORE_CTX_set_error(ctx, X509_V_ERR_CRL_HAS_EXPIRED);
- X509_OBJECT_free_contents(&obj);
-
- return FALSE;
- }
-
- X509_OBJECT_free_contents(&obj);
- }
-
- /*
- * Try to retrieve a CRL corresponding to the _issuer_ of
- * the current certificate in order to check for revocation.
- */
- memset((char *)&obj, 0, sizeof(obj));
- rc = SSL_X509_STORE_lookup(mctx->crl,
- X509_LU_CRL, issuer, &obj);
-
- crl = obj.data.crl;
- if ((rc > 0) && crl) {
- /*
- * Check if the current certificate is revoked by this CRL
- */
- n = sk_X509_REVOKED_num(X509_CRL_get_REVOKED(crl));
-
- for (i = 0; i < n; i++) {
- X509_REVOKED *revoked =
- sk_X509_REVOKED_value(X509_CRL_get_REVOKED(crl), i);
-
- ASN1_INTEGER *sn = X509_REVOKED_get_serialNumber(revoked);
-
- if (!ASN1_INTEGER_cmp(sn, X509_get_serialNumber(cert))) {
- if (s->loglevel >= APLOG_DEBUG) {
- char *cp = X509_NAME_oneline(issuer, NULL, 0);
- long serial = ASN1_INTEGER_get(sn);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Certificate with serial %ld (0x%lX) "
- "revoked per CRL from issuer %s",
- serial, serial, cp);
- modssl_free(cp);
- }
-
- X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REVOKED);
- X509_OBJECT_free_contents(&obj);
-
- return FALSE;
- }
- }
-
- X509_OBJECT_free_contents(&obj);
- }
-
- return ok;
-}
-
-#define SSLPROXY_CERT_CB_LOG_FMT \
- "Proxy client certificate callback: (%s) "
-
-static void modssl_proxy_info_log(server_rec *s,
- X509_INFO *info,
- const char *msg)
-{
- SSLSrvConfigRec *sc = mySrvConfig(s);
- char name_buf[256];
- X509_NAME *name;
- char *dn;
-
- if (s->loglevel < APLOG_DEBUG) {
- return;
- }
-
- name = X509_get_subject_name(info->x509);
- dn = X509_NAME_oneline(name, name_buf, sizeof(name_buf));
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- SSLPROXY_CERT_CB_LOG_FMT "%s, sending %s",
- sc->vhost_id, msg, dn ? dn : "-uknown-");
-}
-
-/*
- * caller will decrement the cert and key reference
- * so we need to increment here to prevent them from
- * being freed.
- */
-#define modssl_set_cert_info(info, cert, pkey) \
- *cert = info->x509; \
- X509_reference_inc(*cert); \
- *pkey = info->x_pkey->dec_pkey; \
- EVP_PKEY_reference_inc(*pkey)
-
-int ssl_callback_proxy_cert(SSL *ssl, MODSSL_CLIENT_CERT_CB_ARG_TYPE **x509, EVP_PKEY **pkey)
-{
- conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
- server_rec *s = c->base_server;
- SSLSrvConfigRec *sc = mySrvConfig(s);
- X509_NAME *ca_name, *issuer;
- X509_INFO *info;
- STACK_OF(X509_NAME) *ca_list;
- STACK_OF(X509_INFO) *certs = sc->proxy->pkp->certs;
- int i, j;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- SSLPROXY_CERT_CB_LOG_FMT "entered",
- sc->vhost_id);
-
- if (!certs || (sk_X509_INFO_num(certs) <= 0)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- SSLPROXY_CERT_CB_LOG_FMT
- "downstream server wanted client certificate "
- "but none are configured", sc->vhost_id);
- return FALSE;
- }
-
- ca_list = SSL_get_client_CA_list(ssl);
-
- if (!ca_list || (sk_X509_NAME_num(ca_list) <= 0)) {
- /*
- * downstream server didn't send us a list of acceptable CA certs,
- * so we send the first client cert in the list.
- */
- info = sk_X509_INFO_value(certs, 0);
-
- modssl_proxy_info_log(s, info, "no acceptable CA list");
-
- modssl_set_cert_info(info, x509, pkey);
-
- return TRUE;
- }
-
- for (i = 0; i < sk_X509_NAME_num(ca_list); i++) {
- ca_name = sk_X509_NAME_value(ca_list, i);
-
- for (j = 0; j < sk_X509_INFO_num(certs); j++) {
- info = sk_X509_INFO_value(certs, j);
- issuer = X509_get_issuer_name(info->x509);
-
- if (X509_NAME_cmp(issuer, ca_name) == 0) {
- modssl_proxy_info_log(s, info, "found acceptable cert");
-
- modssl_set_cert_info(info, x509, pkey);
-
- return TRUE;
- }
- }
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- SSLPROXY_CERT_CB_LOG_FMT
- "no client certificate found!?", sc->vhost_id);
-
- return FALSE;
-}
-
-static void ssl_session_log(server_rec *s,
- const char *request,
- unsigned char *id,
- unsigned int idlen,
- const char *status,
- const char *result,
- long timeout)
-{
- char buf[SSL_SESSION_ID_STRING_LEN];
- char timeout_str[56] = {'\0'};
-
- if (s->loglevel < APLOG_DEBUG) {
- return;
- }
-
- if (timeout) {
- apr_snprintf(timeout_str, sizeof(timeout_str),
- "timeout=%lds ", (timeout - time(NULL)));
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Inter-Process Session Cache: "
- "request=%s status=%s id=%s %s(session %s)",
- request, status,
- SSL_SESSION_id2sz(id, idlen, buf, sizeof(buf)),
- timeout_str, result);
-}
-
-/*
- * This callback function is executed by OpenSSL whenever a new SSL_SESSION is
- * added to the internal OpenSSL session cache. We use this hook to spread the
- * SSL_SESSION also to the inter-process disk-cache to make share it with our
- * other Apache pre-forked server processes.
- */
-int ssl_callback_NewSessionCacheEntry(SSL *ssl, SSL_SESSION *session)
-{
- /* Get Apache context back through OpenSSL context */
- conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl);
- server_rec *s = conn->base_server;
- SSLSrvConfigRec *sc = mySrvConfig(s);
- long timeout = sc->session_cache_timeout;
- BOOL rc;
- unsigned char *id;
- unsigned int idlen;
-
- /*
- * Set the timeout also for the internal OpenSSL cache, because this way
- * our inter-process cache is consulted only when it's really necessary.
- */
- SSL_set_timeout(session, timeout);
-
- /*
- * Store the SSL_SESSION in the inter-process cache with the
- * same expire time, so it expires automatically there, too.
- */
- id = SSL_SESSION_get_session_id(session);
- idlen = SSL_SESSION_get_session_id_length(session);
-
- timeout += modssl_session_get_time(session);
-
- rc = ssl_scache_store(s, id, idlen, timeout, session);
-
- ssl_session_log(s, "SET", id, idlen,
- rc == TRUE ? "OK" : "BAD",
- "caching", timeout);
-
- /*
- * return 0 which means to OpenSSL that the session is still
- * valid and was not freed by us with SSL_SESSION_free().
- */
- return 0;
-}
-
-/*
- * This callback function is executed by OpenSSL whenever a
- * SSL_SESSION is looked up in the internal OpenSSL cache and it
- * was not found. We use this to lookup the SSL_SESSION in the
- * inter-process disk-cache where it was perhaps stored by one
- * of our other Apache pre-forked server processes.
- */
-SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *ssl,
- unsigned char *id,
- int idlen, int *do_copy)
-{
- /* Get Apache context back through OpenSSL context */
- conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl);
- server_rec *s = conn->base_server;
- SSL_SESSION *session;
-
- /*
- * Try to retrieve the SSL_SESSION from the inter-process cache
- */
- session = ssl_scache_retrieve(s, id, idlen);
-
- ssl_session_log(s, "GET", id, idlen,
- session ? "FOUND" : "MISSED",
- session ? "reuse" : "renewal", 0);
-
- /*
- * Return NULL or the retrieved SSL_SESSION. But indicate (by
- * setting do_copy to 0) that the reference count on the
- * SSL_SESSION should not be incremented by the SSL library,
- * because we will no longer hold a reference to it ourself.
- */
- *do_copy = 0;
-
- return session;
-}
-
-/*
- * This callback function is executed by OpenSSL whenever a
- * SSL_SESSION is removed from the the internal OpenSSL cache.
- * We use this to remove the SSL_SESSION in the inter-process
- * disk-cache, too.
- */
-void ssl_callback_DelSessionCacheEntry(SSL_CTX *ctx,
- SSL_SESSION *session)
-{
- server_rec *s;
- SSLSrvConfigRec *sc;
- unsigned char *id;
- unsigned int idlen;
-
- /*
- * Get Apache context back through OpenSSL context
- */
- if (!(s = (server_rec *)SSL_CTX_get_app_data(ctx))) {
- return; /* on server shutdown Apache is already gone */
- }
-
- sc = mySrvConfig(s);
-
- /*
- * Remove the SSL_SESSION from the inter-process cache
- */
- id = SSL_SESSION_get_session_id(session);
- idlen = SSL_SESSION_get_session_id_length(session);
-
- ssl_scache_remove(s, id, idlen);
-
- ssl_session_log(s, "REM", id, idlen,
- "OK", "dead", 0);
-
- return;
-}
-
-/*
- * This callback function is executed while OpenSSL processes the
- * SSL handshake and does SSL record layer stuff. We use it to
- * trace OpenSSL's processing in out SSL logfile.
- */
-void ssl_callback_LogTracingState(MODSSL_INFO_CB_ARG_TYPE ssl, int where, int rc)
-{
- conn_rec *c;
- server_rec *s;
- SSLSrvConfigRec *sc;
-
- /*
- * find corresponding server
- */
- if (!(c = (conn_rec *)SSL_get_app_data((SSL *)ssl))) {
- return;
- }
-
- s = c->base_server;
- if (!(sc = mySrvConfig(s))) {
- return;
- }
-
- /*
- * create the various trace messages
- */
- if (s->loglevel >= APLOG_DEBUG) {
- if (where & SSL_CB_HANDSHAKE_START) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Handshake: start", SSL_LIBRARY_NAME);
- }
- else if (where & SSL_CB_HANDSHAKE_DONE) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Handshake: done", SSL_LIBRARY_NAME);
- }
- else if (where & SSL_CB_LOOP) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Loop: %s",
- SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
- }
- else if (where & SSL_CB_READ) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Read: %s",
- SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
- }
- else if (where & SSL_CB_WRITE) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Write: %s",
- SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
- }
- else if (where & SSL_CB_ALERT) {
- char *str = (where & SSL_CB_READ) ? "read" : "write";
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Alert: %s:%s:%s\n",
- SSL_LIBRARY_NAME, str,
- SSL_alert_type_string_long(rc),
- SSL_alert_desc_string_long(rc));
- }
- else if (where & SSL_CB_EXIT) {
- if (rc == 0) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Exit: failed in %s",
- SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
- }
- else if (rc < 0) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "%s: Exit: error in %s",
- SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
- }
- }
- }
-
- /*
- * Because SSL renegotations can happen at any time (not only after
- * SSL_accept()), the best way to log the current connection details is
- * right after a finished handshake.
- */
- if (where & SSL_CB_HANDSHAKE_DONE) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Connection: Client IP: %s, Protocol: %s, "
- "Cipher: %s (%s/%s bits)",
- ssl_var_lookup(NULL, s, c, NULL, "REMOTE_ADDR"),
- ssl_var_lookup(NULL, s, c, NULL, "SSL_PROTOCOL"),
- ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER"),
- ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER_USEKEYSIZE"),
- ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER_ALGKEYSIZE"));
- }
-}
-
diff --git a/modules/ssl/ssl_engine_log.c b/modules/ssl/ssl_engine_log.c
deleted file mode 100644
index 0e16e1c3bc..0000000000
--- a/modules/ssl/ssl_engine_log.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_log.c
- * Logging Facility
- */
- /* ``The difference between a computer
- industry job and open-source software
- hacking is about 30 hours a week.''
- -- Ralf S. Engelschall */
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Logfile Support
-** _________________________________________________________________
-*/
-
-static const struct {
- const char *cpPattern;
- const char *cpAnnotation;
-} ssl_log_annotate[] = {
- { "*envelope*bad*decrypt*", "wrong pass phrase!?" },
- { "*CLIENT_HELLO*unknown*protocol*", "speaking not SSL to HTTPS port!?" },
- { "*CLIENT_HELLO*http*request*", "speaking HTTP to HTTPS port!?" },
- { "*SSL3_READ_BYTES:sslv3*alert*bad*certificate*", "Subject CN in certificate not server name or identical to CA!?" },
- { "*self signed certificate in certificate chain*", "Client certificate signed by CA not known to server?" },
- { "*peer did not return a certificate*", "No CAs known to server for verification?" },
- { "*no shared cipher*", "Too restrictive SSLCipherSuite or using DSA server certificate?" },
- { "*no start line*", "Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?" },
- { "*bad password read*", "You entered an incorrect pass phrase!?" },
- { "*bad mac decode*", "Browser still remembered details of a re-created server certificate?" },
- { NULL, NULL }
-};
-
-static const char *ssl_log_annotation(const char *error)
-{
- int i = 0;
-
- while (ssl_log_annotate[i].cpPattern != NULL
- && ap_strcmp_match(error, ssl_log_annotate[i].cpPattern) != 0)
- i++;
-
- return ssl_log_annotate[i].cpAnnotation;
-}
-
-void ssl_die(void)
-{
- /*
- * This is used for fatal errors and here
- * it is common module practice to really
- * exit from the complete program.
- */
- exit(1);
-}
-
-/*
- * Prints the SSL library error information.
- */
-void ssl_log_ssl_error(const char *file, int line, int level, server_rec *s)
-{
- unsigned long e;
-
- while ((e = ERR_get_error())) {
- const char *annotation;
- char err[256];
-
- ERR_error_string_n(e, err, sizeof err);
- annotation = ssl_log_annotation(err);
-
- if (annotation) {
- ap_log_error(file, line, level, 0, s,
- "SSL Library Error: %lu %s %s",
- e, err, annotation);
- }
- else {
- ap_log_error(file, line, level, 0, s,
- "SSL Library Error: %lu %s",
- e, err);
- }
- }
-}
diff --git a/modules/ssl/ssl_engine_mutex.c b/modules/ssl/ssl_engine_mutex.c
deleted file mode 100644
index 2756107c32..0000000000
--- a/modules/ssl/ssl_engine_mutex.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_mutex.c
- * Semaphore for Mutual Exclusion
- */
- /* ``Real programmers confuse
- Christmas and Halloween
- because DEC 25 = OCT 31.''
- -- Unknown */
-
-#include "ssl_private.h"
-#if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
-#include "unixd.h"
-#define MOD_SSL_SET_MUTEX_PERMS /* XXX Apache should define something */
-#endif
-
-int ssl_mutex_init(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_status_t rv;
-
- if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
- return TRUE;
-
- if (mc->pMutex) {
- return TRUE;
- }
- if ((rv = apr_global_mutex_create(&mc->pMutex, mc->szMutexFile,
- mc->nMutexMech, s->process->pool))
- != APR_SUCCESS) {
- if (mc->szMutexFile)
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot create SSLMutex with file `%s'",
- mc->szMutexFile);
- else
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot create SSLMutex");
- return FALSE;
- }
-
-#ifdef MOD_SSL_SET_MUTEX_PERMS
- rv = unixd_set_global_mutex_perms(mc->pMutex);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Could not set permissions on ssl_mutex; check User "
- "and Group directives");
- return FALSE;
- }
-#endif
- return TRUE;
-}
-
-int ssl_mutex_reinit(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_status_t rv;
-
- if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
- return TRUE;
-
- if ((rv = apr_global_mutex_child_init(&mc->pMutex,
- mc->szMutexFile, p)) != APR_SUCCESS) {
- if (mc->szMutexFile)
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot reinit SSLMutex with file `%s'",
- mc->szMutexFile);
- else
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s,
- "Cannot reinit SSLMutex");
- return FALSE;
- }
- return TRUE;
-}
-
-int ssl_mutex_on(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_status_t rv;
-
- if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
- return TRUE;
- if ((rv = apr_global_mutex_lock(mc->pMutex)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s,
- "Failed to acquire global mutex lock");
- return FALSE;
- }
- return TRUE;
-}
-
-int ssl_mutex_off(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_status_t rv;
-
- if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
- return TRUE;
- if ((rv = apr_global_mutex_unlock(mc->pMutex)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s,
- "Failed to release global mutex lock");
- return FALSE;
- }
- return TRUE;
-}
-
diff --git a/modules/ssl/ssl_engine_pphrase.c b/modules/ssl/ssl_engine_pphrase.c
deleted file mode 100644
index af8bc72a2f..0000000000
--- a/modules/ssl/ssl_engine_pphrase.c
+++ /dev/null
@@ -1,788 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_pphrase.c
- * Pass Phrase Dialog
- */
- /* ``Treat your password like your
- toothbrush. Don't let anybody
- else use it, and get a new one
- every six months.''
- -- Clifford Stoll */
-#include "ssl_private.h"
-
-/*
- * Return true if the named file exists and is readable
- */
-
-static apr_status_t exists_and_readable(char *fname, apr_pool_t *pool, apr_time_t *mtime)
-{
- apr_status_t stat;
- apr_finfo_t sbuf;
- apr_file_t *fd;
-
- if ((stat = apr_stat(&sbuf, fname, APR_FINFO_MIN, pool)) != APR_SUCCESS)
- return stat;
-
- if (sbuf.filetype != APR_REG)
- return APR_EGENERAL;
-
- if ((stat = apr_file_open(&fd, fname, APR_READ, 0, pool)) != APR_SUCCESS)
- return stat;
-
- if (mtime) {
- *mtime = sbuf.mtime;
- }
-
- apr_file_close(fd);
- return APR_SUCCESS;
-}
-
-/*
- * reuse vhost keys for asn1 tables where keys are allocated out
- * of s->process->pool to prevent "leaking" each time we format
- * a vhost key. since the key is stored in a table with lifetime
- * of s->process->pool, the key needs to have the same lifetime.
- *
- * XXX: probably seems silly to use a hash table with keys and values
- * being the same, but it is easier than doing a linear search
- * and will make it easier to remove keys if needed in the future.
- * also have the problem with apr_array_header_t that if we
- * underestimate the number of vhost keys when we apr_array_make(),
- * the array will get resized when we push past the initial number
- * of elts. this resizing in the s->process->pool means "leaking"
- * since apr_array_push() will apr_alloc arr->nalloc * 2 elts,
- * leaving the original arr->elts to waste.
- */
-static char *asn1_table_vhost_key(SSLModConfigRec *mc, apr_pool_t *p,
- char *id, char *an)
-{
- /* 'p' pool used here is cleared on restarts (or sooner) */
- char *key = apr_psprintf(p, "%s:%s", id, an);
- void *keyptr = apr_hash_get(mc->tVHostKeys, key,
- APR_HASH_KEY_STRING);
-
- if (!keyptr) {
- /* make a copy out of s->process->pool */
- keyptr = apr_pstrdup(mc->pPool, key);
- apr_hash_set(mc->tVHostKeys, keyptr,
- APR_HASH_KEY_STRING, keyptr);
- }
-
- return (char *)keyptr;
-}
-
-/* _________________________________________________________________
-**
-** Pass Phrase and Private Key Handling
-** _________________________________________________________________
-*/
-
-#define BUILTIN_DIALOG_BACKOFF 2
-#define BUILTIN_DIALOG_RETRIES 5
-
-static apr_file_t *writetty = NULL;
-static apr_file_t *readtty = NULL;
-
-/*
- * sslc has a nasty flaw where its
- * PEM_read_bio_PrivateKey does not take a callback arg.
- */
-static server_rec *ssl_pphrase_server_rec = NULL;
-
-#ifdef SSLC_VERSION_NUMBER
-int ssl_pphrase_Handle_CB(char *, int, int);
-#else
-int ssl_pphrase_Handle_CB(char *, int, int, void *);
-#endif
-
-static char *pphrase_array_get(apr_array_header_t *arr, int idx)
-{
- if ((idx < 0) || (idx >= arr->nelts)) {
- return NULL;
- }
-
- return ((char **)arr->elts)[idx];
-}
-
-static void pphrase_array_clear(apr_array_header_t *arr)
-{
- if (arr->nelts > 0) {
- memset(arr->elts, 0, arr->elt_size * arr->nelts);
- }
- arr->nelts = 0;
-}
-
-void ssl_pphrase_Handle(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
- SSLSrvConfigRec *sc;
- server_rec *pServ;
- char *cpVHostID;
- char szPath[MAX_STRING_LEN];
- EVP_PKEY *pPrivateKey;
- ssl_asn1_t *asn1;
- unsigned char *ucp;
- long int length;
- X509 *pX509Cert;
- BOOL bReadable;
- apr_array_header_t *aPassPhrase;
- int nPassPhrase;
- int nPassPhraseCur;
- char *cpPassPhraseCur;
- int nPassPhraseRetry;
- int nPassPhraseDialog;
- int nPassPhraseDialogCur;
- BOOL bPassPhraseDialogOnce;
- char **cpp;
- int i, j;
- ssl_algo_t algoCert, algoKey, at;
- char *an;
- char *cp;
- apr_time_t pkey_mtime = 0;
- int isterm = 1;
- apr_status_t rv;
- /*
- * Start with a fresh pass phrase array
- */
- aPassPhrase = apr_array_make(p, 2, sizeof(char *));
- nPassPhrase = 0;
- nPassPhraseDialog = 0;
-
- /*
- * Walk through all configured servers
- */
- for (pServ = s; pServ != NULL; pServ = pServ->next) {
- sc = mySrvConfig(pServ);
-
- if (!sc->enabled)
- continue;
-
- cpVHostID = ssl_util_vhostid(p, pServ);
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, pServ,
- "Loading certificate & private key of SSL-aware server");
-
- /*
- * Read in server certificate(s): This is the easy part
- * because this file isn't encrypted in any way.
- */
- if (sc->server->pks->cert_files[0] == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, pServ,
- "Server should be SSL-aware but has no certificate "
- "configured [Hint: SSLCertificateFile]");
- ssl_die();
- }
- algoCert = SSL_ALGO_UNKNOWN;
- algoKey = SSL_ALGO_UNKNOWN;
- for (i = 0, j = 0; i < SSL_AIDX_MAX && sc->server->pks->cert_files[i] != NULL; i++) {
-
- apr_cpystrn(szPath, sc->server->pks->cert_files[i], sizeof(szPath));
- if ((rv = exists_and_readable(szPath, p, NULL)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Init: Can't open server certificate file %s",
- szPath);
- ssl_die();
- }
- if ((pX509Cert = SSL_read_X509(szPath, NULL, NULL)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Unable to read server certificate from file %s", szPath);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- /*
- * check algorithm type of certificate and make
- * sure only one certificate per type is used.
- */
- at = ssl_util_algotypeof(pX509Cert, NULL);
- an = ssl_util_algotypestr(at);
- if (algoCert & at) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Multiple %s server certificates not "
- "allowed", an);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
- algoCert |= at;
-
- /*
- * Insert the certificate into global module configuration to let it
- * survive the processing between the 1st Apache API init round (where
- * we operate here) and the 2nd Apache init round (where the
- * certificate is actually used to configure mod_ssl's per-server
- * configuration structures).
- */
- cp = asn1_table_vhost_key(mc, p, cpVHostID, an);
- length = i2d_X509(pX509Cert, NULL);
- ucp = ssl_asn1_table_set(mc->tPublicCert, cp, length);
- (void)i2d_X509(pX509Cert, &ucp); /* 2nd arg increments */
-
- /*
- * Free the X509 structure
- */
- X509_free(pX509Cert);
-
- /*
- * Read in the private key: This is the non-trivial part, because the
- * key is typically encrypted, so a pass phrase dialog has to be used
- * to request it from the user (or it has to be alternatively gathered
- * from a dialog program). The important point here is that ISPs
- * usually have hundrets of virtual servers configured and a lot of
- * them use SSL, so really we have to minimize the pass phrase
- * dialogs.
- *
- * The idea is this: When N virtual hosts are configured and all of
- * them use encrypted private keys with different pass phrases, we
- * have no chance and have to pop up N pass phrase dialogs. But
- * usually the admin is clever enough and uses the same pass phrase
- * for more private key files (typically he even uses one single pass
- * phrase for all). When this is the case we can minimize the dialogs
- * by trying to re-use already known/entered pass phrases.
- */
- if (sc->server->pks->key_files[j] != NULL)
- apr_cpystrn(szPath, sc->server->pks->key_files[j++], sizeof(szPath));
-
- /*
- * Try to read the private key file with the help of
- * the callback function which serves the pass
- * phrases to OpenSSL
- */
- myCtxVarSet(mc, 1, pServ);
- myCtxVarSet(mc, 2, p);
- myCtxVarSet(mc, 3, aPassPhrase);
- myCtxVarSet(mc, 4, &nPassPhraseCur);
- myCtxVarSet(mc, 5, &cpPassPhraseCur);
- myCtxVarSet(mc, 6, cpVHostID);
- myCtxVarSet(mc, 7, an);
- myCtxVarSet(mc, 8, &nPassPhraseDialog);
- myCtxVarSet(mc, 9, &nPassPhraseDialogCur);
- myCtxVarSet(mc, 10, &bPassPhraseDialogOnce);
-
- nPassPhraseCur = 0;
- nPassPhraseRetry = 0;
- nPassPhraseDialogCur = 0;
- bPassPhraseDialogOnce = TRUE;
-
- pPrivateKey = NULL;
-
- for (;;) {
- /*
- * Try to read the private key file with the help of
- * the callback function which serves the pass
- * phrases to OpenSSL
- */
- if ((rv = exists_and_readable(szPath, p,
- &pkey_mtime)) != APR_SUCCESS ) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Init: Can't open server private key file "
- "%s",szPath);
- ssl_die();
- }
-
- /*
- * if the private key is encrypted and SSLPassPhraseDialog
- * is configured to "builtin" it isn't possible to prompt for
- * a password after httpd has detached from the tty.
- * in this case if we already have a private key and the
- * file name/mtime hasn't changed, then reuse the existing key.
- * we also reuse existing private keys that were encrypted for
- * exec: and pipe: dialogs to minimize chances to snoop the
- * password. that and pipe: dialogs might prompt the user
- * for password, which on win32 for example could happen 4
- * times at startup. twice for each child and twice within
- * each since apache "restarts itself" on startup.
- * of course this will not work for the builtin dialog if
- * the server was started without LoadModule ssl_module
- * configured, then restarted with it configured.
- * but we fall through with a chance of success if the key
- * is not encrypted or can be handled via exec or pipe dialog.
- * and in the case of fallthrough, pkey_mtime and isatty()
- * are used to give a better idea as to what failed.
- */
- if (pkey_mtime) {
- int i;
-
- for (i=0; i < SSL_AIDX_MAX; i++) {
- const char *key_id =
- ssl_asn1_table_keyfmt(p, cpVHostID, i);
- ssl_asn1_t *asn1 =
- ssl_asn1_table_get(mc->tPrivateKey, key_id);
-
- if (asn1 && (asn1->source_mtime == pkey_mtime)) {
- ap_log_error(APLOG_MARK, APLOG_INFO,
- 0, pServ,
- "%s reusing existing "
- "%s private key on restart",
- cpVHostID, ssl_asn1_keystr(i));
- return;
- }
- }
- }
-
- cpPassPhraseCur = NULL;
- ssl_pphrase_server_rec = s; /* to make up for sslc flaw */
-
- /* Ensure that the error stack is empty; some SSL
- * functions will fail spuriously if the error stack
- * is not empty. */
- ERR_clear_error();
-
- bReadable = ((pPrivateKey = SSL_read_PrivateKey(szPath, NULL,
- ssl_pphrase_Handle_CB, s)) != NULL ? TRUE : FALSE);
-
- /*
- * when the private key file now was readable,
- * it's fine and we go out of the loop
- */
- if (bReadable)
- break;
-
- /*
- * when we have more remembered pass phrases
- * try to reuse these first.
- */
- if (nPassPhraseCur < nPassPhrase) {
- nPassPhraseCur++;
- continue;
- }
-
- /*
- * else it's not readable and we have no more
- * remembered pass phrases. Then this has to mean
- * that the callback function popped up the dialog
- * but a wrong pass phrase was entered. We give the
- * user (but not the dialog program) a few more
- * chances...
- */
-#ifndef WIN32
- if ((sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN
- || sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE)
-#else
- if (sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE
-#endif
- && cpPassPhraseCur != NULL
- && nPassPhraseRetry < BUILTIN_DIALOG_RETRIES ) {
- apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase incorrect "
- "(%d more retr%s permitted).\n",
- (BUILTIN_DIALOG_RETRIES-nPassPhraseRetry),
- (BUILTIN_DIALOG_RETRIES-nPassPhraseRetry) == 1 ? "y" : "ies");
- nPassPhraseRetry++;
- if (nPassPhraseRetry > BUILTIN_DIALOG_BACKOFF)
- apr_sleep((nPassPhraseRetry-BUILTIN_DIALOG_BACKOFF)
- * 5 * APR_USEC_PER_SEC);
- continue;
- }
-#ifdef WIN32
- if (sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: SSLPassPhraseDialog builtin is not "
- "supported on Win32 (key file "
- "%s)", szPath);
- ssl_die();
- }
-#endif /* WIN32 */
-
- /*
- * Ok, anything else now means a fatal error.
- */
- if (cpPassPhraseCur == NULL) {
- if (nPassPhraseDialogCur && pkey_mtime &&
- !(isterm = isatty(fileno(stdout)))) /* XXX: apr_isatty() */
- {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- pServ,
- "Init: Unable to read pass phrase "
- "[Hint: key introduced or changed "
- "before restart?]");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, pServ);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- pServ, "Init: Private key not found");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, pServ);
- }
- if (writetty) {
- apr_file_printf(writetty, "Apache:mod_ssl:Error: Private key not found.\n");
- apr_file_printf(writetty, "**Stopped\n");
- }
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- pServ, "Init: Pass phrase incorrect");
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, pServ);
-
- if (writetty) {
- apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase incorrect.\n");
- apr_file_printf(writetty, "**Stopped\n");
- }
- }
- ssl_die();
- }
-
- if (pPrivateKey == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Unable to read server private key from "
- "file %s [Hint: Perhaps it is in a separate file? "
- " See SSLCertificateKeyFile]", szPath);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
-
- /*
- * check algorithm type of private key and make
- * sure only one private key per type is used.
- */
- at = ssl_util_algotypeof(NULL, pPrivateKey);
- an = ssl_util_algotypestr(at);
- if (algoKey & at) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Multiple %s server private keys not "
- "allowed", an);
- ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
- ssl_die();
- }
- algoKey |= at;
-
- /*
- * Log the type of reading
- */
- if (nPassPhraseDialogCur == 0) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, pServ,
- "unencrypted %s private key - pass phrase not "
- "required", an);
- }
- else {
- if (cpPassPhraseCur != NULL) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0,
- pServ,
- "encrypted %s private key - pass phrase "
- "requested", an);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0,
- pServ,
- "encrypted %s private key - pass phrase"
- " reused", an);
- }
- }
-
- /*
- * Ok, when we have one more pass phrase store it
- */
- if (cpPassPhraseCur != NULL) {
- cpp = (char **)apr_array_push(aPassPhrase);
- *cpp = cpPassPhraseCur;
- nPassPhrase++;
- }
-
- /*
- * Insert private key into the global module configuration
- * (we convert it to a stand-alone DER byte sequence
- * because the SSL library uses static variables inside a
- * RSA structure which do not survive DSO reloads!)
- */
- cp = asn1_table_vhost_key(mc, p, cpVHostID, an);
- length = i2d_PrivateKey(pPrivateKey, NULL);
- ucp = ssl_asn1_table_set(mc->tPrivateKey, cp, length);
- (void)i2d_PrivateKey(pPrivateKey, &ucp); /* 2nd arg increments */
-
- if (nPassPhraseDialogCur != 0) {
- /* remember mtime of encrypted keys */
- asn1 = ssl_asn1_table_get(mc->tPrivateKey, cp);
- asn1->source_mtime = pkey_mtime;
- }
-
- /*
- * Free the private key structure
- */
- EVP_PKEY_free(pPrivateKey);
- }
- }
-
- /*
- * Let the user know when we're successful.
- */
- if (nPassPhraseDialog > 0) {
- sc = mySrvConfig(s);
- if (writetty) {
- apr_file_printf(writetty, "\n"
- "OK: Pass Phrase Dialog successful.\n");
- }
- }
-
- /*
- * Wipe out the used memory from the
- * pass phrase array and then deallocate it
- */
- if (aPassPhrase->nelts) {
- pphrase_array_clear(aPassPhrase);
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Wiped out the queried pass phrases from memory");
- }
-
- /* Close the pipes if they were opened
- */
- if (readtty) {
- apr_file_close(readtty);
- apr_file_close(writetty);
- readtty = writetty = NULL;
- }
- return;
-}
-
-static apr_status_t ssl_pipe_child_create(apr_pool_t *p, const char *progname)
-{
- /* Child process code for 'ErrorLog "|..."';
- * may want a common framework for this, since I expect it will
- * be common for other foo-loggers to want this sort of thing...
- */
- apr_status_t rc;
- apr_procattr_t *procattr;
- apr_proc_t *procnew;
-
- if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS) &&
- ((rc = apr_procattr_io_set(procattr,
- APR_FULL_BLOCK,
- APR_FULL_BLOCK,
- APR_NO_PIPE)) == APR_SUCCESS)) {
- char **args;
- const char *pname;
-
- apr_tokenize_to_argv(progname, &args, p);
- pname = apr_pstrdup(p, args[0]);
- procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
- rc = apr_proc_create(procnew, pname, (const char * const *)args,
- NULL, procattr, p);
- if (rc == APR_SUCCESS) {
- /* XXX: not sure if we aught to...
- * apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
- */
- writetty = procnew->in;
- readtty = procnew->out;
- }
- }
-
- return rc;
-}
-
-static int pipe_get_passwd_cb(char *buf, int length, char *prompt, int verify)
-{
- apr_status_t rc;
- char *p;
-
- apr_file_puts(prompt, writetty);
-
- buf[0]='\0';
- rc = apr_file_gets(buf, length, readtty);
- apr_file_puts(APR_EOL_STR, writetty);
-
- if (rc != APR_SUCCESS || apr_file_eof(readtty)) {
- memset(buf, 0, length);
- return 1; /* failure */
- }
- if ((p = strchr(buf, '\n')) != NULL) {
- *p = '\0';
- }
-#ifdef WIN32
- /* XXX: apr_sometest */
- if ((p = strchr(buf, '\r')) != NULL) {
- *p = '\0';
- }
-#endif
- return 0;
-}
-
-#ifdef SSLC_VERSION_NUMBER
-int ssl_pphrase_Handle_CB(char *buf, int bufsize, int verify)
-{
- void *srv = ssl_pphrase_server_rec;
-#else
-int ssl_pphrase_Handle_CB(char *buf, int bufsize, int verify, void *srv)
-{
-#endif
- SSLModConfigRec *mc;
- server_rec *s;
- apr_pool_t *p;
- apr_array_header_t *aPassPhrase;
- SSLSrvConfigRec *sc;
- int *pnPassPhraseCur;
- char **cppPassPhraseCur;
- char *cpVHostID;
- char *cpAlgoType;
- int *pnPassPhraseDialog;
- int *pnPassPhraseDialogCur;
- BOOL *pbPassPhraseDialogOnce;
- char *cpp;
- int len = -1;
-
- mc = myModConfig((server_rec *)srv);
-
- /*
- * Reconnect to the context of ssl_phrase_Handle()
- */
- s = myCtxVarGet(mc, 1, server_rec *);
- p = myCtxVarGet(mc, 2, apr_pool_t *);
- aPassPhrase = myCtxVarGet(mc, 3, apr_array_header_t *);
- pnPassPhraseCur = myCtxVarGet(mc, 4, int *);
- cppPassPhraseCur = myCtxVarGet(mc, 5, char **);
- cpVHostID = myCtxVarGet(mc, 6, char *);
- cpAlgoType = myCtxVarGet(mc, 7, char *);
- pnPassPhraseDialog = myCtxVarGet(mc, 8, int *);
- pnPassPhraseDialogCur = myCtxVarGet(mc, 9, int *);
- pbPassPhraseDialogOnce = myCtxVarGet(mc, 10, BOOL *);
- sc = mySrvConfig(s);
-
- (*pnPassPhraseDialog)++;
- (*pnPassPhraseDialogCur)++;
-
- /*
- * When remembered pass phrases are available use them...
- */
- if ((cpp = pphrase_array_get(aPassPhrase, *pnPassPhraseCur)) != NULL) {
- apr_cpystrn(buf, cpp, bufsize);
- len = strlen(buf);
- return len;
- }
-
- /*
- * Builtin or Pipe dialog
- */
- if (sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN
- || sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) {
- char *prompt;
- int i;
-
- if (sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) {
- if (!readtty) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Creating pass phrase dialog pipe child "
- "'%s'", sc->server->pphrase_dialog_path);
- if (ssl_pipe_child_create(p, sc->server->pphrase_dialog_path)
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Init: Failed to create pass phrase pipe '%s'",
- sc->server->pphrase_dialog_path);
- PEMerr(PEM_F_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
- memset(buf, 0, (unsigned int)bufsize);
- return (-1);
- }
- }
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Requesting pass phrase via piped dialog");
- }
- else { /* sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN */
-#ifdef WIN32
- PEMerr(PEM_F_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
- memset(buf, 0, (unsigned int)bufsize);
- return (-1);
-#else
- /*
- * stderr has already been redirected to the error_log.
- * rather than attempting to temporarily rehook it to the terminal,
- * we print the prompt to stdout before EVP_read_pw_string turns
- * off tty echo
- */
- apr_file_open_stdout(&writetty, p);
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Requesting pass phrase via builtin terminal "
- "dialog");
-#endif
- }
-
- /*
- * The first time display a header to inform the user about what
- * program he actually speaks to, which module is responsible for
- * this terminal dialog and why to the hell he has to enter
- * something...
- */
- if (*pnPassPhraseDialog == 1) {
- apr_file_printf(writetty, "%s mod_ssl/%s (Pass Phrase Dialog)\n",
- AP_SERVER_BASEVERSION, MOD_SSL_VERSION);
- apr_file_printf(writetty, "Some of your private key files are encrypted for security reasons.\n");
- apr_file_printf(writetty, "In order to read them you have to provide the pass phrases.\n");
- }
- if (*pbPassPhraseDialogOnce) {
- *pbPassPhraseDialogOnce = FALSE;
- apr_file_printf(writetty, "\n");
- apr_file_printf(writetty, "Server %s (%s)\n", cpVHostID, cpAlgoType);
- }
-
- /*
- * Emulate the OpenSSL internal pass phrase dialog
- * (see crypto/pem/pem_lib.c:def_callback() for details)
- */
- prompt = "Enter pass phrase:";
-
- for (;;) {
- apr_file_puts(prompt, writetty);
- if (sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) {
- i = pipe_get_passwd_cb(buf, bufsize, "", FALSE);
- }
- else { /* sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN */
- i = EVP_read_pw_string(buf, bufsize, "", FALSE);
- }
- if (i != 0) {
- PEMerr(PEM_F_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
- memset(buf, 0, (unsigned int)bufsize);
- return (-1);
- }
- len = strlen(buf);
- if (len < 1)
- apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase empty (needs to be at least 1 character).\n");
- else
- break;
- }
- }
-
- /*
- * Filter program
- */
- else if (sc->server->pphrase_dialog_type == SSL_PPTYPE_FILTER) {
- const char *cmd = sc->server->pphrase_dialog_path;
- const char **argv = apr_palloc(p, sizeof(char *) * 4);
- char *result;
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Init: Requesting pass phrase from dialog filter "
- "program (%s)", cmd);
-
- argv[0] = cmd;
- argv[1] = cpVHostID;
- argv[2] = cpAlgoType;
- argv[3] = NULL;
-
- result = ssl_util_readfilter(s, p, cmd, argv);
- apr_cpystrn(buf, result, bufsize);
- len = strlen(buf);
- }
-
- /*
- * Ok, we now have the pass phrase, so give it back
- */
- *cppPassPhraseCur = apr_pstrdup(p, buf);
-
- /*
- * And return it's length to OpenSSL...
- */
- return (len);
-}
-
diff --git a/modules/ssl/ssl_engine_rand.c b/modules/ssl/ssl_engine_rand.c
deleted file mode 100644
index 6836d76caf..0000000000
--- a/modules/ssl/ssl_engine_rand.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_rand.c
- * Random Number Generator Seeding
- */
- /* ``The generation of random
- numbers is too important
- to be left to chance.'' */
-
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Support for better seeding of SSL library's RNG
-** _________________________________________________________________
-*/
-
-static int ssl_rand_choosenum(int, int);
-static int ssl_rand_feedfp(apr_pool_t *, apr_file_t *, int);
-
-int ssl_rand_seed(server_rec *s, apr_pool_t *p, ssl_rsctx_t nCtx, char *prefix)
-{
- SSLModConfigRec *mc;
- apr_array_header_t *apRandSeed;
- ssl_randseed_t *pRandSeeds;
- ssl_randseed_t *pRandSeed;
- unsigned char stackdata[256];
- int nReq, nDone;
- apr_file_t *fp;
- int i, n, l;
-
- mc = myModConfig(s);
- nReq = 0;
- nDone = 0;
- apRandSeed = mc->aRandSeed;
- pRandSeeds = (ssl_randseed_t *)apRandSeed->elts;
- for (i = 0; i < apRandSeed->nelts; i++) {
- pRandSeed = &pRandSeeds[i];
- if (pRandSeed->nCtx == nCtx) {
- nReq += pRandSeed->nBytes;
- if (pRandSeed->nSrc == SSL_RSSRC_FILE) {
- /*
- * seed in contents of an external file
- */
- if (apr_file_open(&fp, pRandSeed->cpPath,
- APR_READ, APR_OS_DEFAULT, p) != APR_SUCCESS)
- continue;
- nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes);
- apr_file_close(fp);
- }
- else if (pRandSeed->nSrc == SSL_RSSRC_EXEC) {
- const char *cmd = pRandSeed->cpPath;
- const char **argv = apr_palloc(p, sizeof(char *) * 3);
- /*
- * seed in contents generated by an external program
- */
- argv[0] = cmd;
- argv[1] = apr_itoa(p, pRandSeed->nBytes);
- argv[2] = NULL;
-
- if ((fp = ssl_util_ppopen(s, p, cmd, argv)) == NULL)
- continue;
- nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes);
- ssl_util_ppclose(s, p, fp);
- }
-#ifdef HAVE_SSL_RAND_EGD
- else if (pRandSeed->nSrc == SSL_RSSRC_EGD) {
- /*
- * seed in contents provided by the external
- * Entropy Gathering Daemon (EGD)
- */
- if ((n = RAND_egd(pRandSeed->cpPath)) == -1)
- continue;
- nDone += n;
- }
-#endif
- else if (pRandSeed->nSrc == SSL_RSSRC_BUILTIN) {
- struct {
- time_t t;
- pid_t pid;
- } my_seed;
-
- /*
- * seed in the current time (usually just 4 bytes)
- */
- my_seed.t = time(NULL);
-
- /*
- * seed in the current process id (usually just 4 bytes)
- */
- my_seed.pid = mc->pid;
-
- l = sizeof(my_seed);
- RAND_seed((unsigned char *)&my_seed, l);
- nDone += l;
-
- /*
- * seed in some current state of the run-time stack (128 bytes)
- */
- n = ssl_rand_choosenum(0, sizeof(stackdata)-128-1);
- RAND_seed(stackdata+n, 128);
- nDone += 128;
-
- }
- }
- }
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "%sSeeding PRNG with %d bytes of entropy", prefix, nDone);
-
- if (RAND_status() == 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "%sPRNG still contains insufficient entropy!", prefix);
-
- return nDone;
-}
-
-#define BUFSIZE 8192
-
-static int ssl_rand_feedfp(apr_pool_t *p, apr_file_t *fp, int nReq)
-{
- apr_size_t nDone;
- unsigned char caBuf[BUFSIZE];
- apr_size_t nBuf;
- apr_size_t nRead;
- apr_size_t nTodo;
-
- nDone = 0;
- nRead = BUFSIZE;
- nTodo = nReq;
- while (1) {
- if (nReq > 0)
- nRead = (nTodo < BUFSIZE ? nTodo : BUFSIZE);
- nBuf = nRead;
- if (apr_file_read(fp, caBuf, &nBuf) != APR_SUCCESS)
- break;
- RAND_seed(caBuf, nBuf);
- nDone += nBuf;
- if (nReq > 0) {
- nTodo -= nBuf;
- if (nTodo <= 0)
- break;
- }
- }
- return nDone;
-}
-
-static int ssl_rand_choosenum(int l, int h)
-{
- int i;
- char buf[50];
-
- apr_snprintf(buf, sizeof(buf), "%.0f",
- (((double)(rand()%RAND_MAX)/RAND_MAX)*(h-l)));
- i = atoi(buf)+1;
- if (i < l) i = l;
- if (i > h) i = h;
- return i;
-}
-
diff --git a/modules/ssl/ssl_engine_vars.c b/modules/ssl/ssl_engine_vars.c
deleted file mode 100644
index 9dc7aecd74..0000000000
--- a/modules/ssl/ssl_engine_vars.c
+++ /dev/null
@@ -1,684 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_engine_vars.c
- * Variable Lookup Facility
- */
- /* ``Those of you who think they
- know everything are very annoying
- to those of us who do.''
- -- Unknown */
-#include "ssl_private.h"
-#include "mod_ssl.h"
-
-/* _________________________________________________________________
-**
-** Variable Lookup
-** _________________________________________________________________
-*/
-
-static char *ssl_var_lookup_ssl(apr_pool_t *p, conn_rec *c, char *var);
-static char *ssl_var_lookup_ssl_cert(apr_pool_t *p, X509 *xs, char *var);
-static char *ssl_var_lookup_ssl_cert_dn(apr_pool_t *p, X509_NAME *xsname, char *var);
-static char *ssl_var_lookup_ssl_cert_valid(apr_pool_t *p, ASN1_UTCTIME *tm);
-static char *ssl_var_lookup_ssl_cert_serial(apr_pool_t *p, X509 *xs);
-static char *ssl_var_lookup_ssl_cert_chain(apr_pool_t *p, STACK_OF(X509) *sk, char *var);
-static char *ssl_var_lookup_ssl_cert_PEM(apr_pool_t *p, X509 *xs);
-static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, conn_rec *c);
-static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, conn_rec *c, char *var);
-static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize);
-static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var);
-
-static int ssl_is_https(conn_rec *c)
-{
- SSLConnRec *sslconn = myConnConfig(c);
- return sslconn && sslconn->ssl;
-}
-
-void ssl_var_register(void)
-{
- APR_REGISTER_OPTIONAL_FN(ssl_is_https);
- APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
- return;
-}
-
-/* This function must remain safe to use for a non-SSL connection. */
-char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var)
-{
- SSLModConfigRec *mc = myModConfig(s);
- const char *result;
- BOOL resdup;
- apr_time_exp_t tm;
-
- result = NULL;
- resdup = TRUE;
-
- /*
- * When no pool is given try to find one
- */
- if (p == NULL) {
- if (r != NULL)
- p = r->pool;
- else if (c != NULL)
- p = c->pool;
- else
- p = mc->pPool;
- }
-
- /*
- * Request dependent stuff
- */
- if (r != NULL) {
- switch (var[0]) {
- case 'H':
- case 'h':
- if (strcEQ(var, "HTTP_USER_AGENT"))
- result = apr_table_get(r->headers_in, "User-Agent");
- else if (strcEQ(var, "HTTP_REFERER"))
- result = apr_table_get(r->headers_in, "Referer");
- else if (strcEQ(var, "HTTP_COOKIE"))
- result = apr_table_get(r->headers_in, "Cookie");
- else if (strcEQ(var, "HTTP_FORWARDED"))
- result = apr_table_get(r->headers_in, "Forwarded");
- else if (strcEQ(var, "HTTP_HOST"))
- result = apr_table_get(r->headers_in, "Host");
- else if (strcEQ(var, "HTTP_PROXY_CONNECTION"))
- result = apr_table_get(r->headers_in, "Proxy-Connection");
- else if (strcEQ(var, "HTTP_ACCEPT"))
- result = apr_table_get(r->headers_in, "Accept");
- else if (strlen(var) > 5 && strcEQn(var, "HTTP:", 5))
- /* all other headers from which we are still not know about */
- result = apr_table_get(r->headers_in, var+5);
- break;
-
- case 'R':
- case 'r':
- if (strcEQ(var, "REQUEST_METHOD"))
- result = r->method;
- else if (strcEQ(var, "REQUEST_SCHEME"))
- result = ap_http_method(r);
- else if (strcEQ(var, "REQUEST_URI"))
- result = r->uri;
- else if (strcEQ(var, "REQUEST_FILENAME"))
- result = r->filename;
- else if (strcEQ(var, "REMOTE_HOST"))
- result = ap_get_remote_host(r->connection, r->per_dir_config,
- REMOTE_NAME, NULL);
- else if (strcEQ(var, "REMOTE_IDENT"))
- result = ap_get_remote_logname(r);
- else if (strcEQ(var, "REMOTE_USER"))
- result = r->user;
- break;
-
- case 'S':
- case 's':
- if (strcEQn(var, "SSL", 3)) break; /* shortcut common case */
-
- if (strcEQ(var, "SERVER_ADMIN"))
- result = r->server->server_admin;
- else if (strcEQ(var, "SERVER_NAME"))
- result = ap_get_server_name(r);
- else if (strcEQ(var, "SERVER_PORT"))
- result = apr_psprintf(p, "%u", ap_get_server_port(r));
- else if (strcEQ(var, "SERVER_PROTOCOL"))
- result = r->protocol;
- else if (strcEQ(var, "SCRIPT_FILENAME"))
- result = r->filename;
- break;
-
- default:
- if (strcEQ(var, "PATH_INFO"))
- result = r->path_info;
- else if (strcEQ(var, "QUERY_STRING"))
- result = r->args;
- else if (strcEQ(var, "IS_SUBREQ"))
- result = (r->main != NULL ? "true" : "false");
- else if (strcEQ(var, "DOCUMENT_ROOT"))
- result = ap_document_root(r);
- else if (strcEQ(var, "AUTH_TYPE"))
- result = r->ap_auth_type;
- else if (strcEQ(var, "THE_REQUEST"))
- result = r->the_request;
- break;
- }
- }
-
- /*
- * Connection stuff
- */
- if (result == NULL && c != NULL) {
- SSLConnRec *sslconn = myConnConfig(c);
- if (strlen(var) > 4 && strcEQn(var, "SSL_", 4)
- && sslconn && sslconn->ssl)
- result = ssl_var_lookup_ssl(p, c, var+4);
- else if (strcEQ(var, "REMOTE_ADDR"))
- result = c->remote_ip;
- else if (strcEQ(var, "HTTPS")) {
- if (sslconn && sslconn->ssl)
- result = "on";
- else
- result = "off";
- }
- }
-
- /*
- * Totally independent stuff
- */
- if (result == NULL) {
- if (strlen(var) > 12 && strcEQn(var, "SSL_VERSION_", 12))
- result = ssl_var_lookup_ssl_version(p, var+12);
- else if (strcEQ(var, "SERVER_SOFTWARE"))
- result = ap_get_server_version();
- else if (strcEQ(var, "API_VERSION")) {
- result = apr_itoa(p, MODULE_MAGIC_NUMBER);
- resdup = FALSE;
- }
- else if (strcEQ(var, "TIME_YEAR")) {
- apr_time_exp_lt(&tm, apr_time_now());
- result = apr_psprintf(p, "%02d%02d",
- (tm.tm_year / 100) + 19, tm.tm_year % 100);
- resdup = FALSE;
- }
-#define MKTIMESTR(format, tmfield) \
- apr_time_exp_lt(&tm, apr_time_now()); \
- result = apr_psprintf(p, format, tm.tmfield); \
- resdup = FALSE;
- else if (strcEQ(var, "TIME_MON")) {
- MKTIMESTR("%02d", tm_mon+1)
- }
- else if (strcEQ(var, "TIME_DAY")) {
- MKTIMESTR("%02d", tm_mday)
- }
- else if (strcEQ(var, "TIME_HOUR")) {
- MKTIMESTR("%02d", tm_hour)
- }
- else if (strcEQ(var, "TIME_MIN")) {
- MKTIMESTR("%02d", tm_min)
- }
- else if (strcEQ(var, "TIME_SEC")) {
- MKTIMESTR("%02d", tm_sec)
- }
- else if (strcEQ(var, "TIME_WDAY")) {
- MKTIMESTR("%d", tm_wday)
- }
- else if (strcEQ(var, "TIME")) {
- apr_time_exp_lt(&tm, apr_time_now());
- result = apr_psprintf(p,
- "%02d%02d%02d%02d%02d%02d%02d", (tm.tm_year / 100) + 19,
- (tm.tm_year % 100), tm.tm_mon+1, tm.tm_mday,
- tm.tm_hour, tm.tm_min, tm.tm_sec);
- resdup = FALSE;
- }
- /* all other env-variables from the parent Apache process */
- else if (strlen(var) > 4 && strcEQn(var, "ENV:", 4)) {
- result = apr_table_get(r->notes, var+4);
- if (result == NULL)
- result = apr_table_get(r->subprocess_env, var+4);
- if (result == NULL)
- result = getenv(var+4);
- }
- }
-
- if (result != NULL && resdup)
- result = apr_pstrdup(p, result);
- if (result == NULL)
- result = "";
- return (char *)result;
-}
-
-static char *ssl_var_lookup_ssl(apr_pool_t *p, conn_rec *c, char *var)
-{
- SSLConnRec *sslconn = myConnConfig(c);
- char *result;
- X509 *xs;
- STACK_OF(X509) *sk;
- SSL *ssl;
-
- result = NULL;
-
- ssl = sslconn->ssl;
- if (strlen(var) > 8 && strcEQn(var, "VERSION_", 8)) {
- result = ssl_var_lookup_ssl_version(p, var+8);
- }
- else if (ssl != NULL && strcEQ(var, "PROTOCOL")) {
- result = (char *)SSL_get_version(ssl);
- }
- else if (ssl != NULL && strcEQ(var, "SESSION_ID")) {
- char buf[SSL_SESSION_ID_STRING_LEN];
- SSL_SESSION *pSession = SSL_get_session(ssl);
- if (pSession) {
- result = apr_pstrdup(p, SSL_SESSION_id2sz(
- SSL_SESSION_get_session_id(pSession),
- SSL_SESSION_get_session_id_length(pSession),
- buf, sizeof(buf)));
- }
- }
- else if (ssl != NULL && strlen(var) >= 6 && strcEQn(var, "CIPHER", 6)) {
- result = ssl_var_lookup_ssl_cipher(p, c, var+6);
- }
- else if (ssl != NULL && strlen(var) > 18 && strcEQn(var, "CLIENT_CERT_CHAIN_", 18)) {
- sk = SSL_get_peer_cert_chain(ssl);
- result = ssl_var_lookup_ssl_cert_chain(p, sk, var+18);
- }
- else if (ssl != NULL && strcEQ(var, "CLIENT_VERIFY")) {
- result = ssl_var_lookup_ssl_cert_verify(p, c);
- }
- else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "CLIENT_", 7)) {
- if ((xs = SSL_get_peer_certificate(ssl)) != NULL) {
- result = ssl_var_lookup_ssl_cert(p, xs, var+7);
- X509_free(xs);
- }
- }
- else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "SERVER_", 7)) {
- if ((xs = SSL_get_certificate(ssl)) != NULL)
- result = ssl_var_lookup_ssl_cert(p, xs, var+7);
- }
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cert(apr_pool_t *p, X509 *xs, char *var)
-{
- char *result;
- BOOL resdup;
- X509_NAME *xsname;
- int nid;
- char *cp;
-
- result = NULL;
- resdup = TRUE;
-
- if (strcEQ(var, "M_VERSION")) {
- result = apr_psprintf(p, "%lu", X509_get_version(xs)+1);
- resdup = FALSE;
- }
- else if (strcEQ(var, "M_SERIAL")) {
- result = ssl_var_lookup_ssl_cert_serial(p, xs);
- }
- else if (strcEQ(var, "V_START")) {
- result = ssl_var_lookup_ssl_cert_valid(p, X509_get_notBefore(xs));
- }
- else if (strcEQ(var, "V_END")) {
- result = ssl_var_lookup_ssl_cert_valid(p, X509_get_notAfter(xs));
- }
- else if (strcEQ(var, "S_DN")) {
- xsname = X509_get_subject_name(xs);
- cp = X509_NAME_oneline(xsname, NULL, 0);
- result = apr_pstrdup(p, cp);
- modssl_free(cp);
- resdup = FALSE;
- }
- else if (strlen(var) > 5 && strcEQn(var, "S_DN_", 5)) {
- xsname = X509_get_subject_name(xs);
- result = ssl_var_lookup_ssl_cert_dn(p, xsname, var+5);
- resdup = FALSE;
- }
- else if (strcEQ(var, "I_DN")) {
- xsname = X509_get_issuer_name(xs);
- cp = X509_NAME_oneline(xsname, NULL, 0);
- result = apr_pstrdup(p, cp);
- modssl_free(cp);
- resdup = FALSE;
- }
- else if (strlen(var) > 5 && strcEQn(var, "I_DN_", 5)) {
- xsname = X509_get_issuer_name(xs);
- result = ssl_var_lookup_ssl_cert_dn(p, xsname, var+5);
- resdup = FALSE;
- }
- else if (strcEQ(var, "A_SIG")) {
- nid = OBJ_obj2nid((ASN1_OBJECT *)X509_get_signature_algorithm(xs));
- result = apr_pstrdup(p,
- (nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(nid));
- resdup = FALSE;
- }
- else if (strcEQ(var, "A_KEY")) {
- nid = OBJ_obj2nid((ASN1_OBJECT *)X509_get_key_algorithm(xs));
- result = apr_pstrdup(p,
- (nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(nid));
- resdup = FALSE;
- }
- else if (strcEQ(var, "CERT")) {
- result = ssl_var_lookup_ssl_cert_PEM(p, xs);
- }
-
- if (result != NULL && resdup)
- result = apr_pstrdup(p, result);
- return result;
-}
-
-static const struct {
- char *name;
- int nid;
-} ssl_var_lookup_ssl_cert_dn_rec[] = {
- { "C", NID_countryName },
- { "ST", NID_stateOrProvinceName }, /* officially (RFC2156) */
- { "SP", NID_stateOrProvinceName }, /* compatibility (SSLeay) */
- { "L", NID_localityName },
- { "O", NID_organizationName },
- { "OU", NID_organizationalUnitName },
- { "CN", NID_commonName },
- { "T", NID_title },
- { "I", NID_initials },
- { "G", NID_givenName },
- { "S", NID_surname },
- { "D", NID_description },
-/* This has been removed in OpenSSL 0.9.8-dev. */
-#ifdef NID_uniqueIdentifier
- { "UID", NID_uniqueIdentifier },
-#endif
- { "Email", NID_pkcs9_emailAddress },
- { NULL, 0 }
-};
-
-static char *ssl_var_lookup_ssl_cert_dn(apr_pool_t *p, X509_NAME *xsname, char *var)
-{
- char *result, *ptr;
- X509_NAME_ENTRY *xsne;
- int i, j, n, idx = 0;
- apr_size_t varlen;
-
- /* if an _N suffix is used, find the Nth attribute of given name */
- ptr = strchr(var, '_');
- if (ptr != NULL && strspn(ptr + 1, "0123456789") == strlen(ptr + 1)) {
- idx = atoi(ptr + 1);
- varlen = ptr - var;
- } else {
- varlen = strlen(var);
- }
-
- result = NULL;
-
- for (i = 0; ssl_var_lookup_ssl_cert_dn_rec[i].name != NULL; i++) {
- if (strEQn(var, ssl_var_lookup_ssl_cert_dn_rec[i].name, varlen)
- && strlen(ssl_var_lookup_ssl_cert_dn_rec[i].name) == varlen) {
- for (j = 0; j < sk_X509_NAME_ENTRY_num((STACK_OF(X509_NAME_ENTRY) *)
- X509_NAME_get_entries(xsname));
- j++) {
- xsne = sk_X509_NAME_ENTRY_value((STACK_OF(X509_NAME_ENTRY) *)
- X509_NAME_get_entries(xsname), j);
-
- n =OBJ_obj2nid((ASN1_OBJECT *)X509_NAME_ENTRY_get_object(xsne));
-
- if (n == ssl_var_lookup_ssl_cert_dn_rec[i].nid && idx-- == 0) {
- result = apr_pstrmemdup(p,
- X509_NAME_ENTRY_get_data_ptr(xsne),
- X509_NAME_ENTRY_get_data_len(xsne));
-#if APR_CHARSET_EBCDIC
- ap_xlate_proto_from_ascii(result, data_len);
-#endif /* APR_CHARSET_EBCDIC */
- break;
- }
- }
- break;
- }
- }
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_valid(apr_pool_t *p, ASN1_UTCTIME *tm)
-{
- char *result;
- BIO* bio;
- int n;
-
- if ((bio = BIO_new(BIO_s_mem())) == NULL)
- return NULL;
- ASN1_UTCTIME_print(bio, tm);
- n = BIO_pending(bio);
- result = apr_pcalloc(p, n+1);
- n = BIO_read(bio, result, n);
- result[n] = NUL;
- BIO_free(bio);
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_serial(apr_pool_t *p, X509 *xs)
-{
- char *result;
- BIO *bio;
- int n;
-
- if ((bio = BIO_new(BIO_s_mem())) == NULL)
- return NULL;
- i2a_ASN1_INTEGER(bio, X509_get_serialNumber(xs));
- n = BIO_pending(bio);
- result = apr_pcalloc(p, n+1);
- n = BIO_read(bio, result, n);
- result[n] = NUL;
- BIO_free(bio);
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_chain(apr_pool_t *p, STACK_OF(X509) *sk, char *var)
-{
- char *result;
- X509 *xs;
- int n;
-
- result = NULL;
-
- if (strspn(var, "0123456789") == strlen(var)) {
- n = atoi(var);
- if (n < sk_X509_num(sk)) {
- xs = sk_X509_value(sk, n);
- result = ssl_var_lookup_ssl_cert_PEM(p, xs);
- }
- }
-
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_PEM(apr_pool_t *p, X509 *xs)
-{
- char *result;
- BIO *bio;
- int n;
-
- if ((bio = BIO_new(BIO_s_mem())) == NULL)
- return NULL;
- PEM_write_bio_X509(bio, xs);
- n = BIO_pending(bio);
- result = apr_pcalloc(p, n+1);
- n = BIO_read(bio, result, n);
- result[n] = NUL;
- BIO_free(bio);
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, conn_rec *c)
-{
- SSLConnRec *sslconn = myConnConfig(c);
- char *result;
- long vrc;
- const char *verr;
- const char *vinfo;
- SSL *ssl;
- X509 *xs;
-
- result = NULL;
- ssl = sslconn->ssl;
- verr = sslconn->verify_error;
- vinfo = sslconn->verify_info;
- vrc = SSL_get_verify_result(ssl);
- xs = SSL_get_peer_certificate(ssl);
-
- if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs == NULL)
- /* no client verification done at all */
- result = "NONE";
- else if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs != NULL)
- /* client verification done successful */
- result = "SUCCESS";
- else if (vrc == X509_V_OK && vinfo != NULL && strEQ(vinfo, "GENEROUS"))
- /* client verification done in generous way */
- result = "GENEROUS";
- else
- /* client verification failed */
- result = apr_psprintf(p, "FAILED:%s", verr);
-
- if (xs)
- X509_free(xs);
- return result;
-}
-
-static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, conn_rec *c, char *var)
-{
- SSLConnRec *sslconn = myConnConfig(c);
- char *result;
- BOOL resdup;
- int usekeysize, algkeysize;
- SSL *ssl;
-
- result = NULL;
- resdup = TRUE;
-
- ssl = sslconn->ssl;
- ssl_var_lookup_ssl_cipher_bits(ssl, &usekeysize, &algkeysize);
-
- if (ssl && strEQ(var, "")) {
- SSL_CIPHER *cipher = SSL_get_current_cipher(ssl);
- result = (cipher != NULL ? (char *)SSL_CIPHER_get_name(cipher) : NULL);
- }
- else if (strcEQ(var, "_EXPORT"))
- result = (usekeysize < 56 ? "true" : "false");
- else if (strcEQ(var, "_USEKEYSIZE")) {
- result = apr_itoa(p, usekeysize);
- resdup = FALSE;
- }
- else if (strcEQ(var, "_ALGKEYSIZE")) {
- result = apr_itoa(p, algkeysize);
- resdup = FALSE;
- }
-
- if (result != NULL && resdup)
- result = apr_pstrdup(p, result);
- return result;
-}
-
-static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize)
-{
- SSL_CIPHER *cipher;
-
- *usekeysize = 0;
- *algkeysize = 0;
- if (ssl != NULL)
- if ((cipher = SSL_get_current_cipher(ssl)) != NULL)
- *usekeysize = SSL_CIPHER_get_bits(cipher, algkeysize);
- return;
-}
-
-static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var)
-{
- char *result;
- char *cp, *cp2;
-
- result = NULL;
-
- if (strEQ(var, "PRODUCT")) {
-#if defined(SSL_PRODUCT_NAME) && defined(SSL_PRODUCT_VERSION)
- result = apr_psprintf(p, "%s/%s", SSL_PRODUCT_NAME, SSL_PRODUCT_VERSION);
-#else
- result = NULL;
-#endif
- }
- else if (strEQ(var, "INTERFACE")) {
- result = apr_psprintf(p, "mod_ssl/%s", MOD_SSL_VERSION);
- }
- else if (strEQ(var, "LIBRARY")) {
- result = apr_pstrdup(p, SSLeay_version(SSLEAY_VERSION));
- if ((cp = strchr(result, ' ')) != NULL) {
- *cp = '/';
- if ((cp2 = strchr(cp, ' ')) != NULL)
- *cp2 = NUL;
- }
- }
- return result;
-}
-
-/* _________________________________________________________________
-**
-** SSL Extension to mod_log_config
-** _________________________________________________________________
-*/
-
-#include "../../modules/loggers/mod_log_config.h"
-
-static const char *ssl_var_log_handler_c(request_rec *r, char *a);
-static const char *ssl_var_log_handler_x(request_rec *r, char *a);
-
-/*
- * register us for the mod_log_config function registering phase
- * to establish %{...}c and to be able to expand %{...}x variables.
- */
-void ssl_var_log_config_register(apr_pool_t *p)
-{
- static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register;
-
- log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler);
-
- if (log_pfn_register) {
- log_pfn_register(p, "c", ssl_var_log_handler_c, 0);
- log_pfn_register(p, "x", ssl_var_log_handler_x, 0);
- }
- return;
-}
-
-/*
- * implement the %{..}c log function
- * (we are the only function)
- */
-static const char *ssl_var_log_handler_c(request_rec *r, char *a)
-{
- SSLConnRec *sslconn = myConnConfig(r->connection);
- char *result;
-
- if (sslconn == NULL || sslconn->ssl == NULL)
- return NULL;
- result = NULL;
- if (strEQ(a, "version"))
- result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_PROTOCOL");
- else if (strEQ(a, "cipher"))
- result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER");
- else if (strEQ(a, "subjectdn") || strEQ(a, "clientcert"))
- result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CLIENT_S_DN");
- else if (strEQ(a, "issuerdn") || strEQ(a, "cacert"))
- result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CLIENT_I_DN");
- else if (strEQ(a, "errcode"))
- result = "-";
- else if (strEQ(a, "errstr"))
- result = (char *)sslconn->verify_error;
- if (result != NULL && result[0] == NUL)
- result = NULL;
- return result;
-}
-
-/*
- * extend the implementation of the %{..}x log function
- * (there can be more functions)
- */
-static const char *ssl_var_log_handler_x(request_rec *r, char *a)
-{
- char *result;
-
- result = ssl_var_lookup(r->pool, r->server, r->connection, r, a);
- if (result != NULL && result[0] == NUL)
- result = NULL;
- return result;
-}
-
diff --git a/modules/ssl/ssl_expr.c b/modules/ssl/ssl_expr.c
deleted file mode 100644
index 6da0c6eb0f..0000000000
--- a/modules/ssl/ssl_expr.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_expr.c
- * Expression Handling
- */
- /* ``It is hard to fly with
- the eagles when you work
- with the turkeys.''
- -- Unknown */
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Expression Handling
-** _________________________________________________________________
-*/
-
-ssl_expr_info_type ssl_expr_info;
-char *ssl_expr_error;
-
-ssl_expr *ssl_expr_comp(apr_pool_t *p, char *expr)
-{
- ssl_expr_info.pool = p;
- ssl_expr_info.inputbuf = expr;
- ssl_expr_info.inputlen = strlen(expr);
- ssl_expr_info.inputptr = ssl_expr_info.inputbuf;
- ssl_expr_info.expr = FALSE;
-
- ssl_expr_error = NULL;
- if (ssl_expr_yyparse())
- return NULL;
- return ssl_expr_info.expr;
-}
-
-char *ssl_expr_get_error(void)
-{
- if (ssl_expr_error == NULL)
- return "";
- return ssl_expr_error;
-}
-
-ssl_expr *ssl_expr_make(ssl_expr_node_op op, void *a1, void *a2)
-{
- ssl_expr *node;
-
- node = (ssl_expr *)apr_palloc(ssl_expr_info.pool, sizeof(ssl_expr));
- node->node_op = op;
- node->node_arg1 = (char *)a1;
- node->node_arg2 = (char *)a2;
- return node;
-}
-
-int ssl_expr_exec(request_rec *r, ssl_expr *expr)
-{
- BOOL rc;
-
- rc = ssl_expr_eval(r, expr);
- if (ssl_expr_error != NULL)
- return (-1);
- else
- return (rc ? 1 : 0);
-}
diff --git a/modules/ssl/ssl_expr.h b/modules/ssl/ssl_expr.h
deleted file mode 100644
index 8399159c2b..0000000000
--- a/modules/ssl/ssl_expr.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_expr.h
- * Expression Handling (Header)
- */
- /* ``May all your PUSHes be POPed.'' */
-
-#ifndef __SSL_EXPR_H__
-#define __SSL_EXPR_H__
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef TRUE
-#define TRUE !FALSE
-#endif
-
-#ifndef YY_NULL
-#define YY_NULL 0
-#endif
-
-#ifndef MIN
-#define MIN(a,b) (((a)<(b))?(a):(b))
-#endif
-
-#ifndef BOOL
-#define BOOL unsigned int
-#endif
-
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-#ifndef NUL
-#define NUL '\0'
-#endif
-
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-
-typedef enum {
- op_NOP, op_ListElement,
- op_True, op_False, op_Not, op_Or, op_And, op_Comp,
- op_EQ, op_NE, op_LT, op_LE, op_GT, op_GE, op_IN, op_REG, op_NRE,
- op_Digit, op_String, op_Regex, op_Var, op_Func
-} ssl_expr_node_op;
-
-typedef struct {
- ssl_expr_node_op node_op;
- void *node_arg1;
- void *node_arg2;
- apr_pool_t *p;
-} ssl_expr_node;
-
-typedef ssl_expr_node ssl_expr;
-
-typedef struct {
- apr_pool_t *pool;
- char *inputbuf;
- int inputlen;
- char *inputptr;
- ssl_expr *expr;
-} ssl_expr_info_type;
-
-extern ssl_expr_info_type ssl_expr_info;
-extern char *ssl_expr_error;
-
-#define yylval ssl_expr_yylval
-#define yyerror ssl_expr_yyerror
-#define yyinput ssl_expr_yyinput
-
-extern int ssl_expr_yyparse(void);
-extern int ssl_expr_yyerror(char *);
-extern int ssl_expr_yylex(void);
-
-extern ssl_expr *ssl_expr_comp(apr_pool_t *, char *);
-extern int ssl_expr_exec(request_rec *, ssl_expr *);
-extern char *ssl_expr_get_error(void);
-extern ssl_expr *ssl_expr_make(ssl_expr_node_op, void *, void *);
-extern BOOL ssl_expr_eval(request_rec *, ssl_expr *);
-
-#endif /* __SSL_EXPR_H__ */
diff --git a/modules/ssl/ssl_expr_eval.c b/modules/ssl/ssl_expr_eval.c
deleted file mode 100644
index 8e3275803f..0000000000
--- a/modules/ssl/ssl_expr_eval.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_expr_eval.c
- * Expression Evaluation
- */
- /* ``Make love,
- not software!''
- -- Unknown */
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Expression Evaluation
-** _________________________________________________________________
-*/
-
-static BOOL ssl_expr_eval_comp(request_rec *, ssl_expr *);
-static char *ssl_expr_eval_word(request_rec *, ssl_expr *);
-static char *ssl_expr_eval_func_file(request_rec *, char *);
-static int ssl_expr_eval_strcmplex(char *, char *);
-
-BOOL ssl_expr_eval(request_rec *r, ssl_expr *node)
-{
- switch (node->node_op) {
- case op_True: {
- return TRUE;
- }
- case op_False: {
- return FALSE;
- }
- case op_Not: {
- ssl_expr *e = (ssl_expr *)node->node_arg1;
- return (!ssl_expr_eval(r, e));
- }
- case op_Or: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval(r, e1) || ssl_expr_eval(r, e2));
- }
- case op_And: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval(r, e1) && ssl_expr_eval(r, e2));
- }
- case op_Comp: {
- ssl_expr *e = (ssl_expr *)node->node_arg1;
- return ssl_expr_eval_comp(r, e);
- }
- default: {
- ssl_expr_error = "Internal evaluation error: Unknown expression node";
- return FALSE;
- }
- }
-}
-
-static BOOL ssl_expr_eval_comp(request_rec *r, ssl_expr *node)
-{
- switch (node->node_op) {
- case op_EQ: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) == 0);
- }
- case op_NE: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) != 0);
- }
- case op_LT: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) < 0);
- }
- case op_LE: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) <= 0);
- }
- case op_GT: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) > 0);
- }
- case op_GE: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) >= 0);
- }
- case op_IN: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- ssl_expr *e3;
- char *w1 = ssl_expr_eval_word(r, e1);
- BOOL found = FALSE;
- do {
- e3 = (ssl_expr *)e2->node_arg1;
- e2 = (ssl_expr *)e2->node_arg2;
- if (strcmp(w1, ssl_expr_eval_word(r, e3)) == 0) {
- found = TRUE;
- break;
- }
- } while (e2 != NULL);
- return found;
- }
- case op_REG: {
- ssl_expr *e1;
- ssl_expr *e2;
- char *word;
- regex_t *regex;
-
- e1 = (ssl_expr *)node->node_arg1;
- e2 = (ssl_expr *)node->node_arg2;
- word = ssl_expr_eval_word(r, e1);
- regex = (regex_t *)(e2->node_arg1);
- return (ap_regexec(regex, word, 0, NULL, 0) == 0);
- }
- case op_NRE: {
- ssl_expr *e1;
- ssl_expr *e2;
- char *word;
- regex_t *regex;
-
- e1 = (ssl_expr *)node->node_arg1;
- e2 = (ssl_expr *)node->node_arg2;
- word = ssl_expr_eval_word(r, e1);
- regex = (regex_t *)(e2->node_arg1);
- return !(ap_regexec(regex, word, 0, NULL, 0) == 0);
- }
- default: {
- ssl_expr_error = "Internal evaluation error: Unknown expression node";
- return FALSE;
- }
- }
-}
-
-static char *ssl_expr_eval_word(request_rec *r, ssl_expr *node)
-{
- switch (node->node_op) {
- case op_Digit: {
- char *string = (char *)node->node_arg1;
- return string;
- }
- case op_String: {
- char *string = (char *)node->node_arg1;
- return string;
- }
- case op_Var: {
- char *var = (char *)node->node_arg1;
- char *val = ssl_var_lookup(r->pool, r->server, r->connection, r, var);
- return (val == NULL ? "" : val);
- }
- case op_Func: {
- char *name = (char *)node->node_arg1;
- ssl_expr *args = (ssl_expr *)node->node_arg2;
- if (strEQ(name, "file"))
- return ssl_expr_eval_func_file(r, (char *)(args->node_arg1));
- else {
- ssl_expr_error = "Internal evaluation error: Unknown function name";
- return "";
- }
- }
- default: {
- ssl_expr_error = "Internal evaluation error: Unknown expression node";
- return FALSE;
- }
- }
-}
-
-static char *ssl_expr_eval_func_file(request_rec *r, char *filename)
-{
- apr_file_t *fp;
- char *buf;
- apr_off_t offset;
- apr_size_t len;
- apr_finfo_t finfo;
-
- if (apr_file_open(&fp, filename, APR_READ|APR_BUFFERED,
- APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
- ssl_expr_error = "Cannot open file";
- return "";
- }
- apr_file_info_get(&finfo, APR_FINFO_SIZE, fp);
- if ((finfo.size + 1) != ((apr_size_t)finfo.size + 1)) {
- ssl_expr_error = "Huge file cannot be read";
- apr_file_close(fp);
- return "";
- }
- len = (apr_size_t)finfo.size;
- if (len == 0) {
- buf = (char *)apr_palloc(r->pool, sizeof(char) * 1);
- *buf = NUL;
- }
- else {
- if ((buf = (char *)apr_palloc(r->pool, sizeof(char)*(len+1))) == NULL) {
- ssl_expr_error = "Cannot allocate memory";
- apr_file_close(fp);
- return "";
- }
- offset = 0;
- apr_file_seek(fp, APR_SET, &offset);
- if (apr_file_read(fp, buf, &len) != APR_SUCCESS) {
- ssl_expr_error = "Cannot read from file";
- apr_file_close(fp);
- return "";
- }
- buf[len] = NUL;
- }
- apr_file_close(fp);
- return buf;
-}
-
-/* a variant of strcmp(3) which works correctly also for number strings */
-static int ssl_expr_eval_strcmplex(char *cpNum1, char *cpNum2)
-{
- int i, n1, n2;
-
- if (cpNum1 == NULL)
- return -1;
- if (cpNum2 == NULL)
- return +1;
- n1 = strlen(cpNum1);
- n2 = strlen(cpNum2);
- if (n1 > n2)
- return 1;
- if (n1 < n2)
- return -1;
- for (i = 0; i < n1; i++) {
- if (cpNum1[i] > cpNum2[i])
- return 1;
- if (cpNum1[i] < cpNum2[i])
- return -1;
- }
- return 0;
-}
diff --git a/modules/ssl/ssl_expr_parse.c b/modules/ssl/ssl_expr_parse.c
deleted file mode 100644
index 967d4da4dd..0000000000
--- a/modules/ssl/ssl_expr_parse.c
+++ /dev/null
@@ -1,1081 +0,0 @@
-
-/* A Bison parser, made from ssl_expr_parse.y
- by GNU Bison version 1.28 */
-
-#define YYBISON 1 /* Identify Bison output. */
-
-#define T_TRUE 257
-#define T_FALSE 258
-#define T_DIGIT 259
-#define T_ID 260
-#define T_STRING 261
-#define T_REGEX 262
-#define T_REGEX_I 263
-#define T_FUNC_FILE 264
-#define T_OP_EQ 265
-#define T_OP_NE 266
-#define T_OP_LT 267
-#define T_OP_LE 268
-#define T_OP_GT 269
-#define T_OP_GE 270
-#define T_OP_REG 271
-#define T_OP_NRE 272
-#define T_OP_IN 273
-#define T_OP_OR 274
-#define T_OP_AND 275
-#define T_OP_NOT 276
-
-#line 68 "ssl_expr_parse.y"
-
-#include "ssl_private.h"
-
-#line 72 "ssl_expr_parse.y"
-typedef union {
- char *cpVal;
- ssl_expr *exVal;
-} YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define YYFINAL 53
-#define YYFLAG -32768
-#define YYNTBASE 29
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 276 ? ssl_expr_yytranslate[x] : 36)
-
-static const char ssl_expr_yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 28, 2, 2, 23,
- 24, 2, 2, 27, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 25, 2, 26, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22
-};
-
-#if YYDEBUG != 0
-static const short ssl_expr_yyprhs[] = { 0,
- 0, 2, 4, 6, 9, 13, 17, 19, 23, 27,
- 31, 35, 39, 43, 47, 53, 57, 61, 63, 67,
- 69, 71, 76, 78, 80, 82
-};
-
-static const short ssl_expr_yyrhs[] = { 30,
- 0, 3, 0, 4, 0, 22, 30, 0, 30, 20,
- 30, 0, 30, 21, 30, 0, 31, 0, 23, 30,
- 24, 0, 33, 11, 33, 0, 33, 12, 33, 0,
- 33, 13, 33, 0, 33, 14, 33, 0, 33, 15,
- 33, 0, 33, 16, 33, 0, 33, 19, 25, 32,
- 26, 0, 33, 17, 34, 0, 33, 18, 34, 0,
- 33, 0, 32, 27, 33, 0, 5, 0, 7, 0,
- 28, 25, 6, 26, 0, 35, 0, 8, 0, 9,
- 0, 10, 23, 7, 24, 0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short ssl_expr_yyrline[] = { 0,
- 115, 118, 119, 120, 121, 122, 123, 124, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 138, 139, 142,
- 143, 144, 145, 148, 158, 170
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const ssl_expr_yytname[] = { "$","error","$undefined.","T_TRUE",
-"T_FALSE","T_DIGIT","T_ID","T_STRING","T_REGEX","T_REGEX_I","T_FUNC_FILE","T_OP_EQ",
-"T_OP_NE","T_OP_LT","T_OP_LE","T_OP_GT","T_OP_GE","T_OP_REG","T_OP_NRE","T_OP_IN",
-"T_OP_OR","T_OP_AND","T_OP_NOT","'('","')'","'{'","'}'","','","'%'","root","expr",
-"comparison","words","word","regex","funccall", NULL
-};
-#endif
-
-static const short ssl_expr_yyr1[] = { 0,
- 29, 30, 30, 30, 30, 30, 30, 30, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 32, 32, 33,
- 33, 33, 33, 34, 34, 35
-};
-
-static const short ssl_expr_yyr2[] = { 0,
- 1, 1, 1, 2, 3, 3, 1, 3, 3, 3,
- 3, 3, 3, 3, 5, 3, 3, 1, 3, 1,
- 1, 4, 1, 1, 1, 4
-};
-
-static const short ssl_expr_yydefact[] = { 0,
- 2, 3, 20, 21, 0, 0, 0, 0, 1, 7,
- 0, 23, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,
- 5, 6, 9, 10, 11, 12, 13, 14, 24, 25,
- 16, 17, 0, 26, 22, 0, 18, 15, 0, 19,
- 0, 0, 0
-};
-
-static const short ssl_expr_yydefgoto[] = { 51,
- 9, 10, 46, 11, 41, 12
-};
-
-static const short ssl_expr_yypact[] = { 3,
--32768,-32768,-32768,-32768, -11, 3, 3, -10, 0,-32768,
- 22,-32768, 16,-32768, -2, 23, 3, 3, 4, 4,
- 4, 4, 4, 4, 34, 34, 21, 24,-32768, 25,
- 26,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768, 4,-32768,-32768, 18,-32768,-32768, 4,-32768,
- 49, 50,-32768
-};
-
-static const short ssl_expr_yypgoto[] = {-32768,
- 10,-32768,-32768, -19, 27,-32768
-};
-
-
-#define YYLAST 53
-
-
-static const short ssl_expr_yytable[] = { 33,
- 34, 35, 36, 37, 38, 1, 2, 3, 3, 4,
- 4, 13, 5, 5, 16, 14, 15, 17, 18, 17,
- 18, 29, 28, 47, 6, 7, 31, 32, 30, 50,
- 8, 8, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 39, 40, 48, 49, 43, 18, 44, 52, 53,
- 45, 0, 42
-};
-
-static const short ssl_expr_yycheck[] = { 19,
- 20, 21, 22, 23, 24, 3, 4, 5, 5, 7,
- 7, 23, 10, 10, 25, 6, 7, 20, 21, 20,
- 21, 24, 7, 43, 22, 23, 17, 18, 6, 49,
- 28, 28, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 8, 9, 26, 27, 25, 21, 24, 0, 0,
- 26, -1, 26
-};
-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
-#line 3 "/usr/local/share/bison.simple"
-/* This file comes from bison-1.28. */
-
-/* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-
-/* This is the parser code that is written into each bison parser
- when the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
-#ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
-#include <alloca.h>
-#else /* not sparc */
-/* We think this test detects Watcom and Microsoft C. */
-/* This used to test MSDOS, but that is a bad idea
- since that symbol is in the user namespace. */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
- instead, just don't use alloca. */
-#include <malloc.h>
-#endif
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
- So I turned it off. rms, 2 May 1997. */
-/* #include <malloc.h> */
-#pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
- and on HPUX 10. Eventually we can turn this on. */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#endif /* __hpux */
-#endif
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
-
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
-#else
-#define YYSTACK_ALLOC malloc
-#endif
-
-/* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
-
-#define ssl_expr_yyerrok (ssl_expr_yyerrstatus = 0)
-#define ssl_expr_yyclearin (ssl_expr_yychar = YYEMPTY)
-#define YYEMPTY -2
-#define YYEOF 0
-#define YYACCEPT goto ssl_expr_yyacceptlab
-#define YYABORT goto ssl_expr_yyabortlab
-#define YYERROR goto ssl_expr_yyerrlab1
-/* Like YYERROR except do call ssl_expr_yyerror.
- This remains here temporarily to ease the
- transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-#define YYFAIL goto ssl_expr_yyerrlab
-#define YYRECOVERING() (!!ssl_expr_yyerrstatus)
-#define YYBACKUP(token, value) \
-do \
- if (ssl_expr_yychar == YYEMPTY && ssl_expr_yylen == 1) \
- { ssl_expr_yychar = (token), ssl_expr_yylval = (value); \
- ssl_expr_yychar1 = YYTRANSLATE (ssl_expr_yychar); \
- YYPOPSTACK; \
- goto ssl_expr_yybackup; \
- } \
- else \
- { ssl_expr_yyerror ("syntax error: cannot back up"); YYERROR; } \
-while (0)
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-#ifndef YYPURE
-#define YYLEX ssl_expr_yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX ssl_expr_yylex(&ssl_expr_yylval, &ssl_expr_yylloc, YYLEX_PARAM)
-#else
-#define YYLEX ssl_expr_yylex(&ssl_expr_yylval, &ssl_expr_yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX ssl_expr_yylex(&ssl_expr_yylval, YYLEX_PARAM)
-#else
-#define YYLEX ssl_expr_yylex(&ssl_expr_yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int ssl_expr_yychar; /* the lookahead symbol */
-YYSTYPE ssl_expr_yylval; /* the semantic value of the */
- /* lookahead symbol */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE ssl_expr_yylloc; /* location data for the lookahead */
- /* symbol */
-#endif
-
-int ssl_expr_yynerrs; /* number of parse errors so far */
-#endif /* not YYPURE */
-
-#if YYDEBUG != 0
-int ssl_expr_yydebug; /* nonzero means print parse trace */
-/* Since this is uninitialized, it does not stop multiple parsers
- from coexisting. */
-#endif
-
-/* YYINITDEPTH indicates the initial size of the parser's stacks */
-
-#ifndef YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH is the maximum size the stacks can grow to
- (effective only if the built-in stack extension method is used). */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Define __ssl_expr_yy_memcpy. Note that the size argument
- should be passed with type unsigned int, because that is what the non-GCC
- definitions require. With GCC, __builtin_memcpy takes an arg
- of type size_t, but it can handle unsigned int. */
-
-#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
-#define __ssl_expr_yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
-#else /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__ssl_expr_yy_memcpy (to, from, count)
- char *to;
- char *from;
- unsigned int count;
-{
- register char *f = from;
- register char *t = to;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__ssl_expr_yy_memcpy (char *to, char *from, unsigned int count)
-{
- register char *t = to;
- register char *f = from;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#endif
-#endif
-
-#line 217 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
- into ssl_expr_yyparse. The argument should have type void *.
- It should actually point to an object.
- Grammar actions can access the variable by casting it
- to the proper pointer type. */
-
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes. */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int ssl_expr_yyparse (void *);
-#else
-int ssl_expr_yyparse (void);
-#endif
-#endif
-
-int
-ssl_expr_yyparse(YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
-{
- register int ssl_expr_yystate;
- register int ssl_expr_yyn;
- register short *ssl_expr_yyssp;
- register YYSTYPE *ssl_expr_yyvsp;
- int ssl_expr_yyerrstatus; /* number of tokens to shift before error messages enabled */
- int ssl_expr_yychar1 = 0; /* lookahead token as an internal (translated) token number */
-
- short ssl_expr_yyssa[YYINITDEPTH]; /* the state stack */
- YYSTYPE ssl_expr_yyvsa[YYINITDEPTH]; /* the semantic value stack */
-
- short *ssl_expr_yyss = ssl_expr_yyssa; /* refer to the stacks thru separate pointers */
- YYSTYPE *ssl_expr_yyvs = ssl_expr_yyvsa; /* to allow ssl_expr_yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
- YYLTYPE ssl_expr_yylsa[YYINITDEPTH]; /* the location stack */
- YYLTYPE *ssl_expr_yyls = ssl_expr_yylsa;
- YYLTYPE *ssl_expr_yylsp;
-
-#define YYPOPSTACK (ssl_expr_yyvsp--, ssl_expr_yyssp--, ssl_expr_yylsp--)
-#else
-#define YYPOPSTACK (ssl_expr_yyvsp--, ssl_expr_yyssp--)
-#endif
-
- int ssl_expr_yystacksize = YYINITDEPTH;
- int ssl_expr_yyfree_stacks = 0;
-
-#ifdef YYPURE
- int ssl_expr_yychar;
- YYSTYPE ssl_expr_yylval;
- int ssl_expr_yynerrs;
-#ifdef YYLSP_NEEDED
- YYLTYPE ssl_expr_yylloc;
-#endif
-#endif
-
- YYSTYPE ssl_expr_yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
-
- int ssl_expr_yylen;
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Starting parse\n");
-#endif
-
- ssl_expr_yystate = 0;
- ssl_expr_yyerrstatus = 0;
- ssl_expr_yynerrs = 0;
- ssl_expr_yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- ssl_expr_yyssp = ssl_expr_yyss - 1;
- ssl_expr_yyvsp = ssl_expr_yyvs;
-#ifdef YYLSP_NEEDED
- ssl_expr_yylsp = ssl_expr_yyls;
-#endif
-
-/* Push a new state, which is found in ssl_expr_yystate . */
-/* In all cases, when you get here, the value and location stacks
- have just been pushed. so pushing a state here evens the stacks. */
-ssl_expr_yynewstate:
-
- *++ssl_expr_yyssp = ssl_expr_yystate;
-
- if (ssl_expr_yyssp >= ssl_expr_yyss + ssl_expr_yystacksize - 1)
- {
- /* Give user a chance to reallocate the stack */
- /* Use copies of these so that the &'s don't force the real ones into memory. */
- YYSTYPE *ssl_expr_yyvs1 = ssl_expr_yyvs;
- short *ssl_expr_yyss1 = ssl_expr_yyss;
-#ifdef YYLSP_NEEDED
- YYLTYPE *ssl_expr_yyls1 = ssl_expr_yyls;
-#endif
-
- /* Get the current used size of the three stacks, in elements. */
- int size = ssl_expr_yyssp - ssl_expr_yyss + 1;
-
-#ifdef ssl_expr_yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
-#ifdef YYLSP_NEEDED
- /* This used to be a conditional around just the two extra args,
- but that might be undefined if ssl_expr_yyoverflow is a macro. */
- ssl_expr_yyoverflow("parser stack overflow",
- &ssl_expr_yyss1, size * sizeof (*ssl_expr_yyssp),
- &ssl_expr_yyvs1, size * sizeof (*ssl_expr_yyvsp),
- &ssl_expr_yyls1, size * sizeof (*ssl_expr_yylsp),
- &ssl_expr_yystacksize);
-#else
- ssl_expr_yyoverflow("parser stack overflow",
- &ssl_expr_yyss1, size * sizeof (*ssl_expr_yyssp),
- &ssl_expr_yyvs1, size * sizeof (*ssl_expr_yyvsp),
- &ssl_expr_yystacksize);
-#endif
-
- ssl_expr_yyss = ssl_expr_yyss1; ssl_expr_yyvs = ssl_expr_yyvs1;
-#ifdef YYLSP_NEEDED
- ssl_expr_yyls = ssl_expr_yyls1;
-#endif
-#else /* no ssl_expr_yyoverflow */
- /* Extend the stack our own way. */
- if (ssl_expr_yystacksize >= YYMAXDEPTH)
- {
- ssl_expr_yyerror("parser stack overflow");
- if (ssl_expr_yyfree_stacks)
- {
- free (ssl_expr_yyss);
- free (ssl_expr_yyvs);
-#ifdef YYLSP_NEEDED
- free (ssl_expr_yyls);
-#endif
- }
- return 2;
- }
- ssl_expr_yystacksize *= 2;
- if (ssl_expr_yystacksize > YYMAXDEPTH)
- ssl_expr_yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
- ssl_expr_yyfree_stacks = 1;
-#endif
- ssl_expr_yyss = (short *) YYSTACK_ALLOC (ssl_expr_yystacksize * sizeof (*ssl_expr_yyssp));
- __ssl_expr_yy_memcpy ((char *)ssl_expr_yyss, (char *)ssl_expr_yyss1,
- size * (unsigned int) sizeof (*ssl_expr_yyssp));
- ssl_expr_yyvs = (YYSTYPE *) YYSTACK_ALLOC (ssl_expr_yystacksize * sizeof (*ssl_expr_yyvsp));
- __ssl_expr_yy_memcpy ((char *)ssl_expr_yyvs, (char *)ssl_expr_yyvs1,
- size * (unsigned int) sizeof (*ssl_expr_yyvsp));
-#ifdef YYLSP_NEEDED
- ssl_expr_yyls = (YYLTYPE *) YYSTACK_ALLOC (ssl_expr_yystacksize * sizeof (*ssl_expr_yylsp));
- __ssl_expr_yy_memcpy ((char *)ssl_expr_yyls, (char *)ssl_expr_yyls1,
- size * (unsigned int) sizeof (*ssl_expr_yylsp));
-#endif
-#endif /* no ssl_expr_yyoverflow */
-
- ssl_expr_yyssp = ssl_expr_yyss + size - 1;
- ssl_expr_yyvsp = ssl_expr_yyvs + size - 1;
-#ifdef YYLSP_NEEDED
- ssl_expr_yylsp = ssl_expr_yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Stack size increased to %d\n", ssl_expr_yystacksize);
-#endif
-
- if (ssl_expr_yyssp >= ssl_expr_yyss + ssl_expr_yystacksize - 1)
- YYABORT;
- }
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Entering state %d\n", ssl_expr_yystate);
-#endif
-
- goto ssl_expr_yybackup;
- ssl_expr_yybackup:
-
-/* Do appropriate processing given the current state. */
-/* Read a lookahead token if we need one and don't already have one. */
-/* ssl_expr_yyresume: */
-
- /* First try to decide what to do without reference to lookahead token. */
-
- ssl_expr_yyn = ssl_expr_yypact[ssl_expr_yystate];
- if (ssl_expr_yyn == YYFLAG)
- goto ssl_expr_yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* ssl_expr_yychar is either YYEMPTY or YYEOF
- or a valid token in external form. */
-
- if (ssl_expr_yychar == YYEMPTY)
- {
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Reading a token: ");
-#endif
- ssl_expr_yychar = YYLEX;
- }
-
- /* Convert token to internal form (in ssl_expr_yychar1) for indexing tables with */
-
- if (ssl_expr_yychar <= 0) /* This means end of input. */
- {
- ssl_expr_yychar1 = 0;
- ssl_expr_yychar = YYEOF; /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Now at end of input.\n");
-#endif
- }
- else
- {
- ssl_expr_yychar1 = YYTRANSLATE(ssl_expr_yychar);
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- {
- fprintf (stderr, "Next token is %d (%s", ssl_expr_yychar, ssl_expr_yytname[ssl_expr_yychar1]);
- /* Give the individual parser a way to print the precise meaning
- of a token, for further debugging info. */
-#ifdef YYPRINT
- YYPRINT (stderr, ssl_expr_yychar, ssl_expr_yylval);
-#endif
- fprintf (stderr, ")\n");
- }
-#endif
- }
-
- ssl_expr_yyn += ssl_expr_yychar1;
- if (ssl_expr_yyn < 0 || ssl_expr_yyn > YYLAST || ssl_expr_yycheck[ssl_expr_yyn] != ssl_expr_yychar1)
- goto ssl_expr_yydefault;
-
- ssl_expr_yyn = ssl_expr_yytable[ssl_expr_yyn];
-
- /* ssl_expr_yyn is what to do for this token type in this state.
- Negative => reduce, -ssl_expr_yyn is rule number.
- Positive => shift, ssl_expr_yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
-
- if (ssl_expr_yyn < 0)
- {
- if (ssl_expr_yyn == YYFLAG)
- goto ssl_expr_yyerrlab;
- ssl_expr_yyn = -ssl_expr_yyn;
- goto ssl_expr_yyreduce;
- }
- else if (ssl_expr_yyn == 0)
- goto ssl_expr_yyerrlab;
-
- if (ssl_expr_yyn == YYFINAL)
- YYACCEPT;
-
- /* Shift the lookahead token. */
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Shifting token %d (%s), ", ssl_expr_yychar, ssl_expr_yytname[ssl_expr_yychar1]);
-#endif
-
- /* Discard the token being shifted unless it is eof. */
- if (ssl_expr_yychar != YYEOF)
- ssl_expr_yychar = YYEMPTY;
-
- *++ssl_expr_yyvsp = ssl_expr_yylval;
-#ifdef YYLSP_NEEDED
- *++ssl_expr_yylsp = ssl_expr_yylloc;
-#endif
-
- /* count tokens shifted since error; after three, turn off error status. */
- if (ssl_expr_yyerrstatus) ssl_expr_yyerrstatus--;
-
- ssl_expr_yystate = ssl_expr_yyn;
- goto ssl_expr_yynewstate;
-
-/* Do the default action for the current state. */
-ssl_expr_yydefault:
-
- ssl_expr_yyn = ssl_expr_yydefact[ssl_expr_yystate];
- if (ssl_expr_yyn == 0)
- goto ssl_expr_yyerrlab;
-
-/* Do a reduction. ssl_expr_yyn is the number of a rule to reduce with. */
-ssl_expr_yyreduce:
- ssl_expr_yylen = ssl_expr_yyr2[ssl_expr_yyn];
- if (ssl_expr_yylen > 0)
- ssl_expr_yyval = ssl_expr_yyvsp[1-ssl_expr_yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- {
- int i;
-
- fprintf (stderr, "Reducing via rule %d (line %d), ",
- ssl_expr_yyn, ssl_expr_yyrline[ssl_expr_yyn]);
-
- /* Print the symbols being reduced, and their result. */
- for (i = ssl_expr_yyprhs[ssl_expr_yyn]; ssl_expr_yyrhs[i] > 0; i++)
- fprintf (stderr, "%s ", ssl_expr_yytname[ssl_expr_yyrhs[i]]);
- fprintf (stderr, " -> %s\n", ssl_expr_yytname[ssl_expr_yyr1[ssl_expr_yyn]]);
- }
-#endif
-
-
- switch (ssl_expr_yyn) {
-
-case 1:
-#line 115 "ssl_expr_parse.y"
-{ ssl_expr_info.expr = ssl_expr_yyvsp[0].exVal; ;
- break;}
-case 2:
-#line 118 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_True, NULL, NULL); ;
- break;}
-case 3:
-#line 119 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_False, NULL, NULL); ;
- break;}
-case 4:
-#line 120 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Not, ssl_expr_yyvsp[0].exVal, NULL); ;
- break;}
-case 5:
-#line 121 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Or, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 6:
-#line 122 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_And, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 7:
-#line 123 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Comp, ssl_expr_yyvsp[0].exVal, NULL); ;
- break;}
-case 8:
-#line 124 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_yyvsp[-1].exVal; ;
- break;}
-case 9:
-#line 127 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_EQ, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 10:
-#line 128 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_NE, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 11:
-#line 129 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_LT, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 12:
-#line 130 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_LE, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 13:
-#line 131 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_GT, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 14:
-#line 132 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_GE, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 15:
-#line 133 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_IN, ssl_expr_yyvsp[-4].exVal, ssl_expr_yyvsp[-1].exVal); ;
- break;}
-case 16:
-#line 134 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_REG, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 17:
-#line 135 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_NRE, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
- break;}
-case 18:
-#line 138 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_ListElement, ssl_expr_yyvsp[0].exVal, NULL); ;
- break;}
-case 19:
-#line 139 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_ListElement, ssl_expr_yyvsp[0].exVal, ssl_expr_yyvsp[-2].exVal); ;
- break;}
-case 20:
-#line 142 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Digit, ssl_expr_yyvsp[0].cpVal, NULL); ;
- break;}
-case 21:
-#line 143 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_String, ssl_expr_yyvsp[0].cpVal, NULL); ;
- break;}
-case 22:
-#line 144 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Var, ssl_expr_yyvsp[-1].cpVal, NULL); ;
- break;}
-case 23:
-#line 145 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_yyvsp[0].exVal; ;
- break;}
-case 24:
-#line 148 "ssl_expr_parse.y"
-{
- regex_t *regex;
- if ((regex = ap_pregcomp(ssl_expr_info.pool, ssl_expr_yyvsp[0].cpVal,
- REG_EXTENDED|REG_NOSUB)) == NULL) {
- ssl_expr_error = "Failed to compile regular expression";
- YYERROR;
- regex = NULL;
- }
- ssl_expr_yyval.exVal = ssl_expr_make(op_Regex, regex, NULL);
- ;
- break;}
-case 25:
-#line 158 "ssl_expr_parse.y"
-{
- regex_t *regex;
- if ((regex = ap_pregcomp(ssl_expr_info.pool, ssl_expr_yyvsp[0].cpVal,
- REG_EXTENDED|REG_NOSUB|REG_ICASE)) == NULL) {
- ssl_expr_error = "Failed to compile regular expression";
- YYERROR;
- regex = NULL;
- }
- ssl_expr_yyval.exVal = ssl_expr_make(op_Regex, regex, NULL);
- ;
- break;}
-case 26:
-#line 170 "ssl_expr_parse.y"
-{
- ssl_expr *args = ssl_expr_make(op_ListElement, ssl_expr_yyvsp[-1].cpVal, NULL);
- ssl_expr_yyval.exVal = ssl_expr_make(op_Func, "file", args);
- ;
- break;}
-}
- /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/local/share/bison.simple"
-
- ssl_expr_yyvsp -= ssl_expr_yylen;
- ssl_expr_yyssp -= ssl_expr_yylen;
-#ifdef YYLSP_NEEDED
- ssl_expr_yylsp -= ssl_expr_yylen;
-#endif
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- {
- short *ssp1 = ssl_expr_yyss - 1;
- fprintf (stderr, "state stack now");
- while (ssp1 != ssl_expr_yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
- *++ssl_expr_yyvsp = ssl_expr_yyval;
-
-#ifdef YYLSP_NEEDED
- ssl_expr_yylsp++;
- if (ssl_expr_yylen == 0)
- {
- ssl_expr_yylsp->first_line = ssl_expr_yylloc.first_line;
- ssl_expr_yylsp->first_column = ssl_expr_yylloc.first_column;
- ssl_expr_yylsp->last_line = (ssl_expr_yylsp-1)->last_line;
- ssl_expr_yylsp->last_column = (ssl_expr_yylsp-1)->last_column;
- ssl_expr_yylsp->text = 0;
- }
- else
- {
- ssl_expr_yylsp->last_line = (ssl_expr_yylsp+ssl_expr_yylen-1)->last_line;
- ssl_expr_yylsp->last_column = (ssl_expr_yylsp+ssl_expr_yylen-1)->last_column;
- }
-#endif
-
- /* Now "shift" the result of the reduction.
- Determine what state that goes to,
- based on the state we popped back to
- and the rule number reduced by. */
-
- ssl_expr_yyn = ssl_expr_yyr1[ssl_expr_yyn];
-
- ssl_expr_yystate = ssl_expr_yypgoto[ssl_expr_yyn - YYNTBASE] + *ssl_expr_yyssp;
- if (ssl_expr_yystate >= 0 && ssl_expr_yystate <= YYLAST && ssl_expr_yycheck[ssl_expr_yystate] == *ssl_expr_yyssp)
- ssl_expr_yystate = ssl_expr_yytable[ssl_expr_yystate];
- else
- ssl_expr_yystate = ssl_expr_yydefgoto[ssl_expr_yyn - YYNTBASE];
-
- goto ssl_expr_yynewstate;
-
-ssl_expr_yyerrlab: /* here on detecting error */
-
- if (! ssl_expr_yyerrstatus)
- /* If not already recovering from an error, report this error. */
- {
- ++ssl_expr_yynerrs;
-
-#ifdef YYERROR_VERBOSE
- ssl_expr_yyn = ssl_expr_yypact[ssl_expr_yystate];
-
- if (ssl_expr_yyn > YYFLAG && ssl_expr_yyn < YYLAST)
- {
- int size = 0;
- char *msg;
- int x, count;
-
- count = 0;
- /* Start X at -ssl_expr_yyn if nec to avoid negative indexes in ssl_expr_yycheck. */
- for (x = (ssl_expr_yyn < 0 ? -ssl_expr_yyn : 0);
- x < (sizeof(ssl_expr_yytname) / sizeof(char *)); x++)
- if (ssl_expr_yycheck[x + ssl_expr_yyn] == x)
- size += strlen(ssl_expr_yytname[x]) + 15, count++;
- msg = (char *) malloc(size + 15);
- if (msg != 0)
- {
- strcpy(msg, "parse error");
-
- if (count < 5)
- {
- count = 0;
- for (x = (ssl_expr_yyn < 0 ? -ssl_expr_yyn : 0);
- x < (sizeof(ssl_expr_yytname) / sizeof(char *)); x++)
- if (ssl_expr_yycheck[x + ssl_expr_yyn] == x)
- {
- strcat(msg, count == 0 ? ", expecting `" : " or `");
- strcat(msg, ssl_expr_yytname[x]);
- strcat(msg, "'");
- count++;
- }
- }
- ssl_expr_yyerror(msg);
- free(msg);
- }
- else
- ssl_expr_yyerror ("parse error; also virtual memory exceeded");
- }
- else
-#endif /* YYERROR_VERBOSE */
- ssl_expr_yyerror("parse error");
- }
-
- goto ssl_expr_yyerrlab1;
-ssl_expr_yyerrlab1: /* here on error raised explicitly by an action */
-
- if (ssl_expr_yyerrstatus == 3)
- {
- /* if just tried and failed to reuse lookahead token after an error, discard it. */
-
- /* return failure if at end of input */
- if (ssl_expr_yychar == YYEOF)
- YYABORT;
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Discarding token %d (%s).\n", ssl_expr_yychar, ssl_expr_yytname[ssl_expr_yychar1]);
-#endif
-
- ssl_expr_yychar = YYEMPTY;
- }
-
- /* Else will try to reuse lookahead token
- after shifting the error token. */
-
- ssl_expr_yyerrstatus = 3; /* Each real token shifted decrements this */
-
- goto ssl_expr_yyerrhandle;
-
-ssl_expr_yyerrdefault: /* current state does not do anything special for the error token. */
-
-#if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
- ssl_expr_yyn = ssl_expr_yydefact[ssl_expr_yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
- if (ssl_expr_yyn) goto ssl_expr_yydefault;
-#endif
-
-ssl_expr_yyerrpop: /* pop the current state because it cannot handle the error token */
-
- if (ssl_expr_yyssp == ssl_expr_yyss) YYABORT;
- ssl_expr_yyvsp--;
- ssl_expr_yystate = *--ssl_expr_yyssp;
-#ifdef YYLSP_NEEDED
- ssl_expr_yylsp--;
-#endif
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- {
- short *ssp1 = ssl_expr_yyss - 1;
- fprintf (stderr, "Error: state stack now");
- while (ssp1 != ssl_expr_yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
-ssl_expr_yyerrhandle:
-
- ssl_expr_yyn = ssl_expr_yypact[ssl_expr_yystate];
- if (ssl_expr_yyn == YYFLAG)
- goto ssl_expr_yyerrdefault;
-
- ssl_expr_yyn += YYTERROR;
- if (ssl_expr_yyn < 0 || ssl_expr_yyn > YYLAST || ssl_expr_yycheck[ssl_expr_yyn] != YYTERROR)
- goto ssl_expr_yyerrdefault;
-
- ssl_expr_yyn = ssl_expr_yytable[ssl_expr_yyn];
- if (ssl_expr_yyn < 0)
- {
- if (ssl_expr_yyn == YYFLAG)
- goto ssl_expr_yyerrpop;
- ssl_expr_yyn = -ssl_expr_yyn;
- goto ssl_expr_yyreduce;
- }
- else if (ssl_expr_yyn == 0)
- goto ssl_expr_yyerrpop;
-
- if (ssl_expr_yyn == YYFINAL)
- YYACCEPT;
-
-#if YYDEBUG != 0
- if (ssl_expr_yydebug)
- fprintf(stderr, "Shifting error token, ");
-#endif
-
- *++ssl_expr_yyvsp = ssl_expr_yylval;
-#ifdef YYLSP_NEEDED
- *++ssl_expr_yylsp = ssl_expr_yylloc;
-#endif
-
- ssl_expr_yystate = ssl_expr_yyn;
- goto ssl_expr_yynewstate;
-
- ssl_expr_yyacceptlab:
- /* YYACCEPT comes here. */
- if (ssl_expr_yyfree_stacks)
- {
- free (ssl_expr_yyss);
- free (ssl_expr_yyvs);
-#ifdef YYLSP_NEEDED
- free (ssl_expr_yyls);
-#endif
- }
- return 0;
-
- ssl_expr_yyabortlab:
- /* YYABORT comes here. */
- if (ssl_expr_yyfree_stacks)
- {
- free (ssl_expr_yyss);
- free (ssl_expr_yyvs);
-#ifdef YYLSP_NEEDED
- free (ssl_expr_yyls);
-#endif
- }
- return 1;
-}
-#line 176 "ssl_expr_parse.y"
-
-
-int ssl_expr_yyerror(char *s)
-{
- ssl_expr_error = s;
- return 2;
-}
-
diff --git a/modules/ssl/ssl_expr_parse.h b/modules/ssl/ssl_expr_parse.h
deleted file mode 100644
index 5378e2874c..0000000000
--- a/modules/ssl/ssl_expr_parse.h
+++ /dev/null
@@ -1,27 +0,0 @@
-typedef union {
- char *cpVal;
- ssl_expr *exVal;
-} YYSTYPE;
-#define T_TRUE 257
-#define T_FALSE 258
-#define T_DIGIT 259
-#define T_ID 260
-#define T_STRING 261
-#define T_REGEX 262
-#define T_REGEX_I 263
-#define T_FUNC_FILE 264
-#define T_OP_EQ 265
-#define T_OP_NE 266
-#define T_OP_LT 267
-#define T_OP_LE 268
-#define T_OP_GT 269
-#define T_OP_GE 270
-#define T_OP_REG 271
-#define T_OP_NRE 272
-#define T_OP_IN 273
-#define T_OP_OR 274
-#define T_OP_AND 275
-#define T_OP_NOT 276
-
-
-extern YYSTYPE ssl_expr_yylval;
diff --git a/modules/ssl/ssl_expr_parse.y b/modules/ssl/ssl_expr_parse.y
deleted file mode 100644
index dab095f0dc..0000000000
--- a/modules/ssl/ssl_expr_parse.y
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| |
- * | '_ ` _ \ / _ \ / _` | / __/ __| |
- * | | | | | | (_) | (_| | \__ \__ \ | mod_ssl - Apache Interface to OpenSSL
- * |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/
- * |_____|
- * ssl_expr_parse.y
- * Expression LR(1) Parser
- */
- /* ``What you see is all you get.''
- -- Brian Kernighan */
-
-/* _________________________________________________________________
-**
-** Expression Parser
-** _________________________________________________________________
-*/
-
-%{
-#include "ssl_private.h"
-%}
-
-%union {
- char *cpVal;
- ssl_expr *exVal;
-}
-
-%token T_TRUE
-%token T_FALSE
-
-%token <cpVal> T_DIGIT
-%token <cpVal> T_ID
-%token <cpVal> T_STRING
-%token <cpVal> T_REGEX
-%token <cpVal> T_REGEX_I
-
-%token T_FUNC_FILE
-
-%token T_OP_EQ
-%token T_OP_NE
-%token T_OP_LT
-%token T_OP_LE
-%token T_OP_GT
-%token T_OP_GE
-%token T_OP_REG
-%token T_OP_NRE
-%token T_OP_IN
-
-%token T_OP_OR
-%token T_OP_AND
-%token T_OP_NOT
-
-%left T_OP_OR
-%left T_OP_AND
-%left T_OP_NOT
-
-%type <exVal> expr
-%type <exVal> comparison
-%type <exVal> funccall
-%type <exVal> regex
-%type <exVal> words
-%type <exVal> word
-
-%%
-
-root : expr { ssl_expr_info.expr = $1; }
- ;
-
-expr : T_TRUE { $$ = ssl_expr_make(op_True, NULL, NULL); }
- | T_FALSE { $$ = ssl_expr_make(op_False, NULL, NULL); }
- | T_OP_NOT expr { $$ = ssl_expr_make(op_Not, $2, NULL); }
- | expr T_OP_OR expr { $$ = ssl_expr_make(op_Or, $1, $3); }
- | expr T_OP_AND expr { $$ = ssl_expr_make(op_And, $1, $3); }
- | comparison { $$ = ssl_expr_make(op_Comp, $1, NULL); }
- | '(' expr ')' { $$ = $2; }
- ;
-
-comparison: word T_OP_EQ word { $$ = ssl_expr_make(op_EQ, $1, $3); }
- | word T_OP_NE word { $$ = ssl_expr_make(op_NE, $1, $3); }
- | word T_OP_LT word { $$ = ssl_expr_make(op_LT, $1, $3); }
- | word T_OP_LE word { $$ = ssl_expr_make(op_LE, $1, $3); }
- | word T_OP_GT word { $$ = ssl_expr_make(op_GT, $1, $3); }
- | word T_OP_GE word { $$ = ssl_expr_make(op_GE, $1, $3); }
- | word T_OP_IN '{' words '}' { $$ = ssl_expr_make(op_IN, $1, $4); }
- | word T_OP_REG regex { $$ = ssl_expr_make(op_REG, $1, $3); }
- | word T_OP_NRE regex { $$ = ssl_expr_make(op_NRE, $1, $3); }
- ;
-
-words : word { $$ = ssl_expr_make(op_ListElement, $1, NULL); }
- | words ',' word { $$ = ssl_expr_make(op_ListElement, $3, $1); }
- ;
-
-word : T_DIGIT { $$ = ssl_expr_make(op_Digit, $1, NULL); }
- | T_STRING { $$ = ssl_expr_make(op_String, $1, NULL); }
- | '%' '{' T_ID '}' { $$ = ssl_expr_make(op_Var, $3, NULL); }
- | funccall { $$ = $1; }
- ;
-
-regex : T_REGEX {
- regex_t *regex;
- if ((regex = ap_pregcomp(ssl_expr_info.pool, $1,
- REG_EXTENDED|REG_NOSUB)) == NULL) {
- ssl_expr_error = "Failed to compile regular expression";
- YYERROR;
- }
- $$ = ssl_expr_make(op_Regex, regex, NULL);
- }
- | T_REGEX_I {
- regex_t *regex;
- if ((regex = ap_pregcomp(ssl_expr_info.pool, $1,
- REG_EXTENDED|REG_NOSUB|REG_ICASE)) == NULL) {
- ssl_expr_error = "Failed to compile regular expression";
- YYERROR;
- }
- $$ = ssl_expr_make(op_Regex, regex, NULL);
- }
- ;
-
-funccall : T_FUNC_FILE '(' T_STRING ')' {
- ssl_expr *args = ssl_expr_make(op_ListElement, $3, NULL);
- $$ = ssl_expr_make(op_Func, "file", args);
- }
- ;
-
-%%
-
-int yyerror(char *s)
-{
- ssl_expr_error = s;
- return 2;
-}
-
diff --git a/modules/ssl/ssl_expr_scan.c b/modules/ssl/ssl_expr_scan.c
deleted file mode 100644
index 3e4f0af1dc..0000000000
--- a/modules/ssl/ssl_expr_scan.c
+++ /dev/null
@@ -1,1969 +0,0 @@
-#define yy_create_buffer ssl_expr_yy_create_buffer
-#define yy_delete_buffer ssl_expr_yy_delete_buffer
-#define yy_scan_buffer ssl_expr_yy_scan_buffer
-#define yy_scan_string ssl_expr_yy_scan_string
-#define yy_scan_bytes ssl_expr_yy_scan_bytes
-#define yy_flex_debug ssl_expr_yy_flex_debug
-#define yy_init_buffer ssl_expr_yy_init_buffer
-#define yy_flush_buffer ssl_expr_yy_flush_buffer
-#define yy_load_buffer_state ssl_expr_yy_load_buffer_state
-#define yy_switch_to_buffer ssl_expr_yy_switch_to_buffer
-#define yyin ssl_expr_yyin
-#define yyleng ssl_expr_yyleng
-#define yylex ssl_expr_yylex
-#define yyout ssl_expr_yyout
-#define yyrestart ssl_expr_yyrestart
-#define yytext ssl_expr_yytext
-
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /home/striker/cvs2svn/dumps/httpd-2.0/../../httpd-2.0/modules/ssl/ssl_expr_scan.c,v 1.19 2004/02/28 18:06:35 jorton Exp $
- */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-
-#include <stdio.h>
-
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
-#endif
-
-
-#ifdef __cplusplus
-
-#include <stdlib.h>
-#include <unistd.h>
-
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_PROTOS
-#define YY_USE_CONST
-
-#endif /* __STDC__ */
-#endif /* ! __cplusplus */
-
-#ifdef __TURBOC__
-#pragma warn -rch
-#pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN yy_start = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START ((yy_start - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#define YY_BUF_SIZE 16384
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-
-extern int yyleng;
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
- YY_RESTORE_YY_MORE_OFFSET \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
-
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
- };
-
-static YY_BUFFER_STATE yy_current_buffer = 0;
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- */
-#define YY_CURRENT_BUFFER yy_current_buffer
-
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
-static int yy_start = 0; /* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart YY_PROTO(( FILE *input_file ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
-
-
-#define yywrap() 1
-#define YY_SKIP_YYWRAP
-typedef unsigned char YY_CHAR;
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-typedef int yy_state_type;
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
- yy_hold_char = *yy_cp; \
- *yy_cp = '\0'; \
- yy_c_buf_p = yy_cp;
-
-#define YY_NUM_RULES 46
-#define YY_END_OF_BUFFER 47
-static yyconst short int yy_accept[86] =
- { 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 47, 45,
- 1, 38, 2, 45, 43, 24, 45, 28, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
- 13, 4, 3, 14, 16, 18, 17, 1, 22, 32,
- 34, 43, 26, 20, 31, 30, 44, 44, 19, 44,
- 44, 29, 27, 39, 25, 23, 15, 15, 21, 44,
- 35, 44, 36, 13, 12, 5, 6, 10, 11, 7,
- 8, 9, 33, 44, 44, 37, 44, 5, 6, 44,
- 40, 41, 5, 42, 0
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 4, 5, 1, 1, 1, 6, 1, 1,
- 1, 1, 1, 1, 7, 1, 1, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 7, 1, 10,
- 11, 12, 1, 1, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 1, 14, 1, 1, 7, 1, 15, 16, 13, 17,
-
- 18, 19, 20, 13, 21, 13, 13, 22, 23, 24,
- 25, 13, 26, 27, 28, 29, 30, 13, 13, 13,
- 13, 13, 1, 31, 1, 32, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
- } ;
-
-static yyconst int yy_meta[33] =
- { 0,
- 1, 1, 2, 1, 3, 1, 4, 4, 4, 1,
- 1, 1, 4, 3, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 1, 1
- } ;
-
-static yyconst short int yy_base[93] =
- { 0,
- 0, 0, 30, 31, 0, 0, 82, 81, 101, 142,
- 35, 28, 142, 94, 32, 88, 31, 87, 0, 69,
- 66, 28, 28, 67, 29, 63, 30, 63, 62, 57,
- 0, 142, 142, 88, 142, 142, 142, 48, 142, 142,
- 142, 44, 142, 142, 142, 142, 0, 70, 0, 64,
- 63, 0, 0, 0, 0, 0, 142, 0, 0, 55,
- 0, 46, 142, 0, 142, 53, 62, 142, 142, 142,
- 142, 142, 0, 44, 48, 0, 41, 70, 72, 38,
- 0, 0, 74, 0, 142, 117, 121, 125, 50, 129,
- 133, 137
-
- } ;
-
-static yyconst short int yy_def[93] =
- { 0,
- 85, 1, 86, 86, 87, 87, 88, 88, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 89, 89,
- 89, 89, 89, 89, 89, 90, 89, 89, 89, 85,
- 91, 85, 85, 92, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 89, 89, 89, 89,
- 89, 89, 89, 89, 89, 89, 85, 89, 89, 89,
- 89, 89, 85, 91, 85, 85, 85, 85, 85, 85,
- 85, 85, 89, 89, 89, 89, 89, 85, 85, 89,
- 89, 89, 85, 89, 0, 85, 85, 85, 85, 85,
- 85, 85
-
- } ;
-
-static yyconst short int yy_nxt[175] =
- { 0,
- 10, 11, 11, 12, 13, 14, 10, 15, 15, 16,
- 17, 18, 19, 10, 20, 19, 19, 21, 22, 23,
- 24, 25, 26, 27, 28, 19, 19, 19, 29, 19,
- 30, 10, 32, 32, 33, 33, 38, 38, 39, 42,
- 42, 44, 50, 34, 34, 52, 55, 59, 51, 38,
- 38, 42, 42, 47, 60, 84, 53, 56, 82, 40,
- 78, 79, 45, 57, 57, 81, 57, 57, 57, 79,
- 79, 80, 57, 57, 57, 77, 57, 83, 79, 79,
- 79, 79, 79, 76, 75, 74, 73, 63, 62, 61,
- 54, 49, 48, 57, 57, 66, 67, 46, 43, 41,
-
- 85, 37, 37, 68, 85, 85, 69, 85, 85, 85,
- 85, 70, 85, 85, 71, 85, 72, 31, 31, 31,
- 31, 35, 35, 35, 35, 36, 36, 36, 36, 58,
- 85, 58, 58, 64, 85, 85, 64, 65, 65, 65,
- 65, 9, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85
- } ;
-
-static yyconst short int yy_chk[175] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 3, 4, 3, 4, 11, 11, 12, 15,
- 15, 17, 22, 3, 4, 23, 25, 27, 22, 38,
- 38, 42, 42, 89, 27, 80, 23, 25, 77, 12,
- 66, 66, 17, 26, 26, 75, 26, 26, 26, 67,
- 67, 74, 26, 26, 26, 62, 26, 78, 78, 79,
- 79, 83, 83, 60, 51, 50, 48, 30, 29, 28,
- 24, 21, 20, 26, 26, 34, 34, 18, 16, 14,
-
- 9, 8, 7, 34, 0, 0, 34, 0, 0, 0,
- 0, 34, 0, 0, 34, 0, 34, 86, 86, 86,
- 86, 87, 87, 87, 87, 88, 88, 88, 88, 90,
- 0, 90, 90, 91, 0, 0, 91, 92, 92, 92,
- 92, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85
- } ;
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
-#line 1 "ssl_expr_scan.l"
-#define INITIAL 0
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| |
- * | '_ ` _ \ / _ \ / _` | / __/ __| |
- * | | | | | | (_) | (_| | \__ \__ \ | mod_ssl - Apache Interface to OpenSSL
- * |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/
- * |_____|
- * ssl_expr_scan.l
- * Expression Scanner
- */
- /* ``Killing for peace is
- like fucking for virginity.''
- -- Unknown */
-
-/* _________________________________________________________________
-**
-** Expression Scanner
-** _________________________________________________________________
-*/
-#line 38 "ssl_expr_scan.l"
-#include "ssl_private.h"
-
-#include "ssl_expr_parse.h"
-
-#define YY_NO_UNPUT 1
-int yyinput(char *buf, int max_size);
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- (result = yyinput(buf, max_size))
-
-#define MAX_STR_LEN 2048
-/* %option stack */
-#define YY_NEVER_INTERACTIVE 1
-#define str 1
-
-#define regex 2
-#define regex_flags 3
-
-#line 535 "lex.ssl_expr_yy.c"
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
-#else
-extern int yywrap YY_PROTO(( void ));
-#endif
-#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
-#endif
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
-#endif
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- if ( yy_current_buffer->yy_is_interactive ) \
- { \
- int c = '*', n; \
- for ( n = 0; n < max_size && \
- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
- buf[n] = (char) c; \
- if ( c == '\n' ) \
- buf[n++] = (char) c; \
- if ( c == EOF && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- result = n; \
- } \
- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
- && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
- YY_USER_ACTION
-
-YY_DECL
- {
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-#line 91 "ssl_expr_scan.l"
-
-
- char caStr[MAX_STR_LEN];
- char *cpStr = NULL;
- char caRegex[MAX_STR_LEN];
- char *cpRegex = NULL;
- char cRegexDel = NUL;
-
- /*
- * Whitespaces
- */
-#line 698 "lex.ssl_expr_yy.c"
-
- if ( yy_init )
- {
- yy_init = 0;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! yy_start )
- yy_start = 1; /* first start state */
-
- if ( ! yyin )
- yyin = stdin;
-
- if ( ! yyout )
- yyout = stdout;
-
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
-
- yy_load_buffer_state();
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
- yy_cp = yy_c_buf_p;
-
- /* Support of yytext. */
- *yy_cp = yy_hold_char;
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
- yy_current_state = yy_start;
-yy_match:
- do
- {
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
- if ( yy_accept[yy_current_state] )
- {
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 86 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- ++yy_cp;
- }
- while ( yy_current_state != 85 );
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
-
-yy_find_action:
- yy_act = yy_accept[yy_current_state];
-
- YY_DO_BEFORE_ACTION;
-
-
-do_action: /* This label is used only to access EOF actions. */
-
-
- switch ( yy_act )
- { /* beginning of action switch */
- case 0: /* must back up */
- /* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = yy_hold_char;
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
- goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 102 "ssl_expr_scan.l"
-{
- /* NOP */
-}
- YY_BREAK
-/*
- * C-style strings ("...")
- */
-case 2:
-YY_RULE_SETUP
-#line 109 "ssl_expr_scan.l"
-{
- cpStr = caStr;
- BEGIN(str);
-}
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 113 "ssl_expr_scan.l"
-{
- BEGIN(INITIAL);
- *cpStr = NUL;
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caStr);
- return T_STRING;
-}
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 119 "ssl_expr_scan.l"
-{
- yyerror("Unterminated string");
-}
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 122 "ssl_expr_scan.l"
-{
- int result;
-
- (void)sscanf(yytext+1, "%o", &result);
- if (result > 0xff)
- yyerror("Escape sequence out of bound");
- else
- *cpStr++ = result;
-}
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 131 "ssl_expr_scan.l"
-{
- yyerror("Bad escape sequence");
-}
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 134 "ssl_expr_scan.l"
-{ *cpStr++ = '\n'; }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 135 "ssl_expr_scan.l"
-{ *cpStr++ = '\r'; }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 136 "ssl_expr_scan.l"
-{ *cpStr++ = '\t'; }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 137 "ssl_expr_scan.l"
-{ *cpStr++ = '\b'; }
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 138 "ssl_expr_scan.l"
-{ *cpStr++ = '\f'; }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 139 "ssl_expr_scan.l"
-{
- *cpStr++ = yytext[1];
-}
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 142 "ssl_expr_scan.l"
-{
- char *cp = yytext;
- while (*cp != NUL)
- *cpStr++ = *cp++;
-}
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 147 "ssl_expr_scan.l"
-{
- *cpStr++ = yytext[1];
-}
- YY_BREAK
-/*
- * Regular Expression
- */
-case 15:
-YY_RULE_SETUP
-#line 154 "ssl_expr_scan.l"
-{
- cRegexDel = yytext[1];
- cpRegex = caRegex;
- BEGIN(regex);
-}
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 159 "ssl_expr_scan.l"
-{
- if (yytext[0] == cRegexDel) {
- *cpRegex = NUL;
- BEGIN(regex_flags);
- }
- else {
- *cpRegex++ = yytext[0];
- }
-}
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 168 "ssl_expr_scan.l"
-{
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
- BEGIN(INITIAL);
- return T_REGEX_I;
-}
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 173 "ssl_expr_scan.l"
-{
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
- yyless(0);
- BEGIN(INITIAL);
- return T_REGEX;
-}
- YY_BREAK
-case YY_STATE_EOF(regex_flags):
-#line 179 "ssl_expr_scan.l"
-{
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
- BEGIN(INITIAL);
- return T_REGEX;
-}
- YY_BREAK
-/*
- * Operators
- */
-case 19:
-YY_RULE_SETUP
-#line 188 "ssl_expr_scan.l"
-{ return T_OP_EQ; }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 189 "ssl_expr_scan.l"
-{ return T_OP_EQ; }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 190 "ssl_expr_scan.l"
-{ return T_OP_NE; }
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 191 "ssl_expr_scan.l"
-{ return T_OP_NE; }
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 192 "ssl_expr_scan.l"
-{ return T_OP_LT; }
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 193 "ssl_expr_scan.l"
-{ return T_OP_LT; }
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 194 "ssl_expr_scan.l"
-{ return T_OP_LE; }
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 195 "ssl_expr_scan.l"
-{ return T_OP_LE; }
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 196 "ssl_expr_scan.l"
-{ return T_OP_GT; }
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 197 "ssl_expr_scan.l"
-{ return T_OP_GT; }
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 198 "ssl_expr_scan.l"
-{ return T_OP_GE; }
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 199 "ssl_expr_scan.l"
-{ return T_OP_GE; }
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 200 "ssl_expr_scan.l"
-{ return T_OP_REG; }
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 201 "ssl_expr_scan.l"
-{ return T_OP_NRE; }
- YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 202 "ssl_expr_scan.l"
-{ return T_OP_AND; }
- YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 203 "ssl_expr_scan.l"
-{ return T_OP_AND; }
- YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 204 "ssl_expr_scan.l"
-{ return T_OP_OR; }
- YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 205 "ssl_expr_scan.l"
-{ return T_OP_OR; }
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 206 "ssl_expr_scan.l"
-{ return T_OP_NOT; }
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 207 "ssl_expr_scan.l"
-{ return T_OP_NOT; }
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 208 "ssl_expr_scan.l"
-{ return T_OP_IN; }
- YY_BREAK
-/*
- * Functions
- */
-case 40:
-YY_RULE_SETUP
-#line 213 "ssl_expr_scan.l"
-{ return T_FUNC_FILE; }
- YY_BREAK
-/*
- * Specials
- */
-case 41:
-YY_RULE_SETUP
-#line 218 "ssl_expr_scan.l"
-{ return T_TRUE; }
- YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 219 "ssl_expr_scan.l"
-{ return T_FALSE; }
- YY_BREAK
-/*
- * Digits
- */
-case 43:
-YY_RULE_SETUP
-#line 224 "ssl_expr_scan.l"
-{
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
- return T_DIGIT;
-}
- YY_BREAK
-/*
- * Identifiers
- */
-case 44:
-YY_RULE_SETUP
-#line 232 "ssl_expr_scan.l"
-{
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
- return T_ID;
-}
- YY_BREAK
-/*
- * Anything else is returned as is...
- */
-case 45:
-YY_RULE_SETUP
-#line 240 "ssl_expr_scan.l"
-{
- return yytext[0];
-}
- YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 244 "ssl_expr_scan.l"
-YY_FATAL_ERROR( "flex scanner jammed" );
- YY_BREAK
-#line 1098 "lex.ssl_expr_yy.c"
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(str):
-case YY_STATE_EOF(regex):
- yyterminate();
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
- YY_RESTORE_YY_MORE_OFFSET
-
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state();
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state );
-
- yy_bp = yytext_ptr + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer() )
- {
- case EOB_ACT_END_OF_FILE:
- {
- yy_did_buffer_switch_on_eof = 0;
-
- if ( yywrap() )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * yytext, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! yy_did_buffer_switch_on_eof )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state();
-
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
-
- yy_current_state = yy_get_previous_state();
-
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
- } /* end of yylex */
-
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-
-static int yy_get_next_buffer()
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
- register int number_to_move, i;
- int ret_val;
-
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( yy_current_buffer->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
- {
- /* We matched a single character, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
-
- else
- {
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
- YY_FATAL_ERROR(
-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
-
- int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = yy_current_buffer->yy_buf_size -
- number_to_move - 1;
-#endif
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
-
- yy_current_buffer->yy_n_chars = yy_n_chars;
- }
-
- if ( yy_n_chars == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
-
- return ret_val;
- }
-
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-static yy_state_type yy_get_previous_state()
- {
- register yy_state_type yy_current_state;
- register char *yy_cp;
-
- yy_current_state = yy_start;
-
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
- {
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- if ( yy_accept[yy_current_state] )
- {
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 86 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- }
-
- return yy_current_state;
- }
-
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
- {
- register int yy_is_jam;
- register char *yy_cp = yy_c_buf_p;
-
- register YY_CHAR yy_c = 1;
- if ( yy_accept[yy_current_state] )
- {
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 86 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 85);
-
- return yy_is_jam ? 0 : yy_current_state;
- }
-
-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
- {
- register char *yy_cp = yy_c_buf_p;
-
- /* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register int number_to_move = yy_n_chars + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
- register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
-
- while ( source > yy_current_buffer->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- yy_n_chars = yy_current_buffer->yy_buf_size;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-#endif /* ifndef YY_NO_UNPUT */
-
-
-#ifdef __cplusplus
-static int yyinput()
-#else
-static int input()
-#endif
- {
- int c;
-
- *yy_c_buf_p = yy_hold_char;
-
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
- /* This was really a NUL. */
- *yy_c_buf_p = '\0';
-
- else
- { /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
-
- switch ( yy_get_next_buffer() )
- {
- case EOB_ACT_LAST_MATCH:
- /* This happens because yy_g_n_b()
- * sees that we've accumulated a
- * token and flags that we need to
- * try matching the token before
- * proceeding. But for input(),
- * there's no matching to consider.
- * So convert the EOB_ACT_LAST_MATCH
- * to EOB_ACT_END_OF_FILE.
- */
-
- /* Reset buffer status. */
- yyrestart( yyin );
-
- /* fall through */
-
- case EOB_ACT_END_OF_FILE:
- {
- if ( yywrap() )
- return EOF;
-
- if ( ! yy_did_buffer_switch_on_eof )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput();
-#else
- return input();
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
- break;
- }
- }
- }
-
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
-
-
- return c;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
-
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
- {
- if ( yy_current_buffer == new_buffer )
- return;
-
- if ( yy_current_buffer )
- {
- /* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
- }
-
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
-
- /* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
- * to go ahead and always set it.
- */
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
-
-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
- {
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- yy_init_buffer( b, file );
-
- return b;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
- {
- if ( ! b )
- return;
-
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
-
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
-
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-
-
- {
- yy_flush_buffer( b );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
-#if YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-
- {
- if ( ! b )
- return;
-
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
- }
-
-
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- yy_switch_to_buffer( b );
-
- return b;
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
-
- return yy_scan_bytes( yy_str, len );
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n;
- int i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
-
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = yy_scan_buffer( buf, n );
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
- }
-#endif
-
-
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
- {
- yy_size_t new_size;
-
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
-
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
-
- else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
-
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
- }
-
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
-
- BEGIN(new_state);
- }
-#endif
-
-
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
- {
- if ( --yy_start_stack_ptr < 0 )
- YY_FATAL_ERROR( "start-condition stack underflow" );
-
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
- }
-
-
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
- } \
- while ( 0 )
-
-
-/* Internal utility routines. */
-
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
- {
- register int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
- }
-#endif
-
-#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
- register int n;
- for ( n = 0; s[n]; ++n )
- ;
-
- return n;
- }
-#endif
-
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
- return (void *) malloc( size );
- }
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
- }
-
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
-
-#if YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
-#line 244 "ssl_expr_scan.l"
-
-
-int yyinput(char *buf, int max_size)
-{
- int n;
-
- if ((n = MIN(max_size, ssl_expr_info.inputbuf
- + ssl_expr_info.inputlen
- - ssl_expr_info.inputptr)) <= 0)
- return YY_NULL;
- memcpy(buf, ssl_expr_info.inputptr, n);
- ssl_expr_info.inputptr += n;
- return n;
-}
-
diff --git a/modules/ssl/ssl_expr_scan.l b/modules/ssl/ssl_expr_scan.l
deleted file mode 100644
index da172fd3a5..0000000000
--- a/modules/ssl/ssl_expr_scan.l
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| |
- * | '_ ` _ \ / _ \ / _` | / __/ __| |
- * | | | | | | (_) | (_| | \__ \__ \ | mod_ssl - Apache Interface to OpenSSL
- * |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/
- * |_____|
- * ssl_expr_scan.l
- * Expression Scanner
- */
- /* ``Killing for peace is
- like fucking for virginity.''
- -- Unknown */
-
-/* _________________________________________________________________
-**
-** Expression Scanner
-** _________________________________________________________________
-*/
-
-%{
-#include "ssl_private.h"
-
-#include "ssl_expr_parse.h"
-
-#define YY_NO_UNPUT 1
-int yyinput(char *buf, int max_size);
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- (result = yyinput(buf, max_size))
-
-#define MAX_STR_LEN 2048
-%}
-
-%pointer
-/* %option stack */
-%option never-interactive
-%option noyywrap
-%x str
-%x regex regex_flags
-
-%%
-
- char caStr[MAX_STR_LEN];
- char *cpStr = NULL;
- char caRegex[MAX_STR_LEN];
- char *cpRegex = NULL;
- char cRegexDel = NUL;
-
- /*
- * Whitespaces
- */
-[ \t\n]+ {
- /* NOP */
-}
-
- /*
- * C-style strings ("...")
- */
-\" {
- cpStr = caStr;
- BEGIN(str);
-}
-<str>\" {
- BEGIN(INITIAL);
- *cpStr = NUL;
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caStr);
- return T_STRING;
-}
-<str>\n {
- yyerror("Unterminated string");
-}
-<str>\\[0-7]{1,3} {
- int result;
-
- (void)sscanf(yytext+1, "%o", &result);
- if (result > 0xff)
- yyerror("Escape sequence out of bound");
- else
- *cpStr++ = result;
-}
-<str>\\[0-9]+ {
- yyerror("Bad escape sequence");
-}
-<str>\\n { *cpStr++ = '\n'; }
-<str>\\r { *cpStr++ = '\r'; }
-<str>\\t { *cpStr++ = '\t'; }
-<str>\\b { *cpStr++ = '\b'; }
-<str>\\f { *cpStr++ = '\f'; }
-<str>\\(.|\n) {
- *cpStr++ = yytext[1];
-}
-<str>[^\\\n\"]+ {
- char *cp = yytext;
- while (*cp != NUL)
- *cpStr++ = *cp++;
-}
-<str>. {
- *cpStr++ = yytext[1];
-}
-
- /*
- * Regular Expression
- */
-"m". {
- cRegexDel = yytext[1];
- cpRegex = caRegex;
- BEGIN(regex);
-}
-<regex>.|\n {
- if (yytext[0] == cRegexDel) {
- *cpRegex = NUL;
- BEGIN(regex_flags);
- }
- else {
- *cpRegex++ = yytext[0];
- }
-}
-<regex_flags>i {
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
- BEGIN(INITIAL);
- return T_REGEX_I;
-}
-<regex_flags>.|\n {
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
- yyless(0);
- BEGIN(INITIAL);
- return T_REGEX;
-}
-<regex_flags><<EOF>> {
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
- BEGIN(INITIAL);
- return T_REGEX;
-}
-
- /*
- * Operators
- */
-"eq" { return T_OP_EQ; }
-"==" { return T_OP_EQ; }
-"ne" { return T_OP_NE; }
-"!=" { return T_OP_NE; }
-"lt" { return T_OP_LT; }
-"<" { return T_OP_LT; }
-"le" { return T_OP_LE; }
-"<=" { return T_OP_LE; }
-"gt" { return T_OP_GT; }
-">" { return T_OP_GT; }
-"ge" { return T_OP_GE; }
-">=" { return T_OP_GE; }
-"=~" { return T_OP_REG; }
-"!~" { return T_OP_NRE; }
-"and" { return T_OP_AND; }
-"&&" { return T_OP_AND; }
-"or" { return T_OP_OR; }
-"||" { return T_OP_OR; }
-"not" { return T_OP_NOT; }
-"!" { return T_OP_NOT; }
-"in" { return T_OP_IN; }
-
- /*
- * Functions
- */
-"file" { return T_FUNC_FILE; }
-
- /*
- * Specials
- */
-"true" { return T_TRUE; }
-"false" { return T_FALSE; }
-
- /*
- * Digits
- */
-[0-9]+ {
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
- return T_DIGIT;
-}
-
- /*
- * Identifiers
- */
-[a-zA-Z][a-zA-Z0-9_:-]* {
- yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
- return T_ID;
-}
-
- /*
- * Anything else is returned as is...
- */
-.|\n {
- return yytext[0];
-}
-
-%%
-
-int yyinput(char *buf, int max_size)
-{
- int n;
-
- if ((n = MIN(max_size, ssl_expr_info.inputbuf
- + ssl_expr_info.inputlen
- - ssl_expr_info.inputptr)) <= 0)
- return YY_NULL;
- memcpy(buf, ssl_expr_info.inputptr, n);
- ssl_expr_info.inputptr += n;
- return n;
-}
-
diff --git a/modules/ssl/ssl_private.h b/modules/ssl/ssl_private.h
deleted file mode 100644
index e044f3a80f..0000000000
--- a/modules/ssl/ssl_private.h
+++ /dev/null
@@ -1,639 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SSL_PRIVATE_H
-#define SSL_PRIVATE_H
-
-/*
- * Internal interfaces private to mod_ssl.
- */
-
-/* Apache headers */
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_connection.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "util_script.h"
-#include "util_filter.h"
-#include "util_ebcdic.h"
-#include "mpm.h"
-#include "apr.h"
-#include "apr_strings.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_tables.h"
-#include "apr_lib.h"
-#include "apr_fnmatch.h"
-#include "apr_strings.h"
-#include "apr_dbm.h"
-#include "apr_rmm.h"
-#include "apr_shm.h"
-#include "apr_global_mutex.h"
-#include "apr_optional.h"
-
-#define MOD_SSL_VERSION AP_SERVER_BASEREVISION
-
-/* mod_ssl headers */
-#include "ssl_toolkit_compat.h"
-#include "ssl_expr.h"
-#include "ssl_util_ssl.h"
-
-/* The #ifdef macros are only defined AFTER including the above
- * therefore we cannot include these system files at the top :-(
- */
-#if APR_HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h> /* needed for STDIN_FILENO et.al., at least on FreeBSD */
-#endif
-
-/*
- * Provide reasonable default for some defines
- */
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-#ifndef PFALSE
-#define PFALSE ((void *)FALSE)
-#endif
-#ifndef PTRUE
-#define PTRUE ((void *)TRUE)
-#endif
-#ifndef UNSET
-#define UNSET (-1)
-#endif
-#ifndef NUL
-#define NUL '\0'
-#endif
-#ifndef RAND_MAX
-#include <limits.h>
-#define RAND_MAX INT_MAX
-#endif
-
-/*
- * Provide reasonable defines for some types
- */
-#ifndef BOOL
-#define BOOL unsigned int
-#endif
-#ifndef UCHAR
-#define UCHAR unsigned char
-#endif
-
-/*
- * Provide useful shorthands
- */
-#define strEQ(s1,s2) (strcmp(s1,s2) == 0)
-#define strNE(s1,s2) (strcmp(s1,s2) != 0)
-#define strEQn(s1,s2,n) (strncmp(s1,s2,n) == 0)
-#define strNEn(s1,s2,n) (strncmp(s1,s2,n) != 0)
-
-#define strcEQ(s1,s2) (strcasecmp(s1,s2) == 0)
-#define strcNE(s1,s2) (strcasecmp(s1,s2) != 0)
-#define strcEQn(s1,s2,n) (strncasecmp(s1,s2,n) == 0)
-#define strcNEn(s1,s2,n) (strncasecmp(s1,s2,n) != 0)
-
-#define strIsEmpty(s) (s == NULL || s[0] == NUL)
-
-#define myConnConfig(c) \
-(SSLConnRec *)ap_get_module_config(c->conn_config, &ssl_module)
-#define myCtxConfig(sslconn, sc) (sslconn->is_proxy ? sc->proxy : sc->server)
-#define myConnConfigSet(c, val) \
-ap_set_module_config(c->conn_config, &ssl_module, val)
-#define mySrvConfig(srv) (SSLSrvConfigRec *)ap_get_module_config(srv->module_config, &ssl_module)
-#define myDirConfig(req) (SSLDirConfigRec *)ap_get_module_config(req->per_dir_config, &ssl_module)
-#define myModConfig(srv) (mySrvConfig((srv)))->mc
-
-#define myCtxVarSet(mc,num,val) mc->rCtx.pV##num = val
-#define myCtxVarGet(mc,num,type) (type)(mc->rCtx.pV##num)
-
-/*
- * Defaults for the configuration
- */
-#ifndef SSL_SESSION_CACHE_TIMEOUT
-#define SSL_SESSION_CACHE_TIMEOUT 300
-#endif
-
-/*
- * Support for MM library
- */
-#define SSL_MM_FILE_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
-
-/*
- * Support for DBM library
- */
-#define SSL_DBM_FILE_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
-
-#if !defined(SSL_DBM_FILE_SUFFIX_DIR) && !defined(SSL_DBM_FILE_SUFFIX_PAG)
-#if defined(DBM_SUFFIX)
-#define SSL_DBM_FILE_SUFFIX_DIR DBM_SUFFIX
-#define SSL_DBM_FILE_SUFFIX_PAG DBM_SUFFIX
-#elif defined(__FreeBSD__) || (defined(DB_LOCK) && defined(DB_SHMEM))
-#define SSL_DBM_FILE_SUFFIX_DIR ".db"
-#define SSL_DBM_FILE_SUFFIX_PAG ".db"
-#else
-#define SSL_DBM_FILE_SUFFIX_DIR ".dir"
-#define SSL_DBM_FILE_SUFFIX_PAG ".pag"
-#endif
-#endif
-
-/*
- * Define the certificate algorithm types
- */
-
-typedef int ssl_algo_t;
-
-#define SSL_ALGO_UNKNOWN (0)
-#define SSL_ALGO_RSA (1<<0)
-#define SSL_ALGO_DSA (1<<1)
-#define SSL_ALGO_ALL (SSL_ALGO_RSA|SSL_ALGO_DSA)
-
-#define SSL_AIDX_RSA (0)
-#define SSL_AIDX_DSA (1)
-#define SSL_AIDX_MAX (2)
-
-
-/*
- * Define IDs for the temporary RSA keys and DH params
- */
-
-#define SSL_TMP_KEY_RSA_512 (0)
-#define SSL_TMP_KEY_RSA_1024 (1)
-#define SSL_TMP_KEY_DH_512 (2)
-#define SSL_TMP_KEY_DH_1024 (3)
-#define SSL_TMP_KEY_MAX (4)
-
-/*
- * Define the SSL options
- */
-#define SSL_OPT_NONE (0)
-#define SSL_OPT_RELSET (1<<0)
-#define SSL_OPT_STDENVVARS (1<<1)
-#define SSL_OPT_EXPORTCERTDATA (1<<3)
-#define SSL_OPT_FAKEBASICAUTH (1<<4)
-#define SSL_OPT_STRICTREQUIRE (1<<5)
-#define SSL_OPT_OPTRENEGOTIATE (1<<6)
-#define SSL_OPT_ALL (SSL_OPT_STDENVVARS|SSL_OPT_EXPORTCERTDATA|SSL_OPT_FAKEBASICAUTH|SSL_OPT_STRICTREQUIRE|SSL_OPT_OPTRENEGOTIATE)
-typedef int ssl_opt_t;
-
-/*
- * Define the SSL Protocol options
- */
-#define SSL_PROTOCOL_NONE (0)
-#define SSL_PROTOCOL_SSLV2 (1<<0)
-#define SSL_PROTOCOL_SSLV3 (1<<1)
-#define SSL_PROTOCOL_TLSV1 (1<<2)
-#define SSL_PROTOCOL_ALL (SSL_PROTOCOL_SSLV2|SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1)
-typedef int ssl_proto_t;
-
-/*
- * Define the SSL verify levels
- */
-typedef enum {
- SSL_CVERIFY_UNSET = UNSET,
- SSL_CVERIFY_NONE = 0,
- SSL_CVERIFY_OPTIONAL = 1,
- SSL_CVERIFY_REQUIRE = 2,
- SSL_CVERIFY_OPTIONAL_NO_CA = 3
-} ssl_verify_t;
-
-#define SSL_VERIFY_PEER_STRICT \
- (SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT)
-
-#ifndef X509_V_ERR_CERT_UNTRUSTED
-#define X509_V_ERR_CERT_UNTRUSTED 27
-#endif
-
-#define ssl_verify_error_is_optional(errnum) \
- ((errnum == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) \
- || (errnum == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) \
- || (errnum == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) \
- || (errnum == X509_V_ERR_CERT_UNTRUSTED) \
- || (errnum == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE))
-
-/*
- * Define the SSL pass phrase dialog types
- */
-typedef enum {
- SSL_PPTYPE_UNSET = UNSET,
- SSL_PPTYPE_BUILTIN = 0,
- SSL_PPTYPE_FILTER = 1,
- SSL_PPTYPE_PIPE = 2
-} ssl_pphrase_t;
-
-/*
- * Define the Path Checking modes
- */
-#define SSL_PCM_EXISTS 1
-#define SSL_PCM_ISREG 2
-#define SSL_PCM_ISDIR 4
-#define SSL_PCM_ISNONZERO 8
-typedef unsigned int ssl_pathcheck_t;
-
-/*
- * Define the SSL session cache modes and structures
- */
-typedef enum {
- SSL_SCMODE_UNSET = UNSET,
- SSL_SCMODE_NONE = 0,
- SSL_SCMODE_DBM = 1,
- SSL_SCMODE_SHMCB = 3,
- SSL_SCMODE_DC = 4
-} ssl_scmode_t;
-
-/*
- * Define the SSL mutex modes
- */
-typedef enum {
- SSL_MUTEXMODE_UNSET = UNSET,
- SSL_MUTEXMODE_NONE = 0,
- SSL_MUTEXMODE_USED = 1
-} ssl_mutexmode_t;
-
-/*
- * Define the SSL enabled state
- */
-typedef enum {
- SSL_ENABLED_UNSET = UNSET,
- SSL_ENABLED_FALSE = 0,
- SSL_ENABLED_TRUE = 1,
- SSL_ENABLED_OPTIONAL = 3
-} ssl_enabled_t;
-
-/*
- * Define the SSL requirement structure
- */
-typedef struct {
- char *cpExpr;
- ssl_expr *mpExpr;
-} ssl_require_t;
-
-/*
- * Define the SSL random number generator seeding source
- */
-typedef enum {
- SSL_RSCTX_STARTUP = 1,
- SSL_RSCTX_CONNECT = 2
-} ssl_rsctx_t;
-typedef enum {
- SSL_RSSRC_BUILTIN = 1,
- SSL_RSSRC_FILE = 2,
- SSL_RSSRC_EXEC = 3,
- SSL_RSSRC_EGD = 4
-} ssl_rssrc_t;
-typedef struct {
- ssl_rsctx_t nCtx;
- ssl_rssrc_t nSrc;
- char *cpPath;
- int nBytes;
-} ssl_randseed_t;
-
-/*
- * Define the structure of an ASN.1 anything
- */
-typedef struct {
- long int nData;
- unsigned char *cpData;
- apr_time_t source_mtime;
-} ssl_asn1_t;
-
-/*
- * Define the mod_ssl per-module configuration structure
- * (i.e. the global configuration for each httpd process)
- */
-
-typedef enum {
- SSL_SHUTDOWN_TYPE_UNSET,
- SSL_SHUTDOWN_TYPE_STANDARD,
- SSL_SHUTDOWN_TYPE_UNCLEAN,
- SSL_SHUTDOWN_TYPE_ACCURATE
-} ssl_shutdown_type_e;
-
-typedef struct {
- SSL *ssl;
- const char *client_dn;
- X509 *client_cert;
- ssl_shutdown_type_e shutdown_type;
- const char *verify_info;
- const char *verify_error;
- int verify_depth;
- int is_proxy;
- int disabled;
- int non_ssl_request;
-} SSLConnRec;
-
-typedef struct {
- pid_t pid;
- apr_pool_t *pPool;
- BOOL bFixed;
- int nSessionCacheMode;
- char *szSessionCacheDataFile;
- int nSessionCacheDataSize;
- apr_shm_t *pSessionCacheDataMM;
- apr_rmm_t *pSessionCacheDataRMM;
- void *tSessionCacheDataTable;
- ssl_mutexmode_t nMutexMode;
- apr_lockmech_e nMutexMech;
- const char *szMutexFile;
- apr_global_mutex_t *pMutex;
- apr_array_header_t *aRandSeed;
- apr_hash_t *tVHostKeys;
- void *pTmpKeys[SSL_TMP_KEY_MAX];
- apr_hash_t *tPublicCert;
- apr_hash_t *tPrivateKey;
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
- const char *szCryptoDevice;
-#endif
- struct {
- void *pV1, *pV2, *pV3, *pV4, *pV5, *pV6, *pV7, *pV8, *pV9, *pV10;
- } rCtx;
-} SSLModConfigRec;
-
-/* public cert/private key */
-typedef struct {
- /*
- * server only has 1-2 certs/keys
- * 1 RSA and/or 1 DSA
- */
- const char *cert_files[SSL_AIDX_MAX];
- const char *key_files[SSL_AIDX_MAX];
- X509 *certs[SSL_AIDX_MAX];
- EVP_PKEY *keys[SSL_AIDX_MAX];
-} modssl_pk_server_t;
-
-typedef struct {
- /* proxy can have any number of cert/key pairs */
- const char *cert_file;
- const char *cert_path;
- STACK_OF(X509_INFO) *certs;
-} modssl_pk_proxy_t;
-
-/* stuff related to authentication that can also be per-dir */
-typedef struct {
- /* known/trusted CAs */
- const char *ca_cert_path;
- const char *ca_cert_file;
-
- const char *cipher_suite;
-
- /* for client or downstream server authentication */
- int verify_depth;
- ssl_verify_t verify_mode;
-} modssl_auth_ctx_t;
-
-typedef struct SSLSrvConfigRec SSLSrvConfigRec;
-
-typedef struct {
- SSLSrvConfigRec *sc; /* pointer back to server config */
- SSL_CTX *ssl_ctx;
-
- /* we are one or the other */
- modssl_pk_server_t *pks;
- modssl_pk_proxy_t *pkp;
-
- ssl_proto_t protocol;
-
- /* config for handling encrypted keys */
- ssl_pphrase_t pphrase_dialog_type;
- const char *pphrase_dialog_path;
-
- const char *cert_chain;
-
- /* certificate revocation list */
- const char *crl_path;
- const char *crl_file;
- X509_STORE *crl;
-
- modssl_auth_ctx_t auth;
-} modssl_ctx_t;
-
-struct SSLSrvConfigRec {
- SSLModConfigRec *mc;
- ssl_enabled_t enabled;
- BOOL proxy_enabled;
- const char *vhost_id;
- int vhost_id_len;
- int session_cache_timeout;
- BOOL cipher_server_pref;
- modssl_ctx_t *server;
- modssl_ctx_t *proxy;
-};
-
-/*
- * Define the mod_ssl per-directory configuration structure
- * (i.e. the local configuration for all <Directory>
- * and .htaccess contexts)
- */
-typedef struct {
- BOOL bSSLRequired;
- apr_array_header_t *aRequirement;
- ssl_opt_t nOptions;
- ssl_opt_t nOptionsAdd;
- ssl_opt_t nOptionsDel;
- const char *szCipherSuite;
- ssl_verify_t nVerifyClient;
- int nVerifyDepth;
- const char *szCACertificatePath;
- const char *szCACertificateFile;
- const char *szUserName;
-} SSLDirConfigRec;
-
-/*
- * function prototypes
- */
-
-/* API glue structures */
-extern module AP_MODULE_DECLARE_DATA ssl_module;
-
-/* "global" stuff */
-extern const char ssl_valid_ssl_mutex_string[];
-
-/* configuration handling */
-SSLModConfigRec *ssl_config_global_create(server_rec *);
-void ssl_config_global_fix(SSLModConfigRec *);
-BOOL ssl_config_global_isfixed(SSLModConfigRec *);
-void *ssl_config_server_create(apr_pool_t *, server_rec *);
-void *ssl_config_server_merge(apr_pool_t *, void *, void *);
-void *ssl_config_perdir_create(apr_pool_t *, char *);
-void *ssl_config_perdir_merge(apr_pool_t *, void *, void *);
-const char *ssl_cmd_SSLMutex(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLPassPhraseDialog(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCryptoDevice(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLRandomSeed(cmd_parms *, void *, const char *, const char *, const char *);
-const char *ssl_cmd_SSLEngine(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCipherSuite(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCertificateFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCertificateKeyFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCertificateChainFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCACertificatePath(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCACertificateFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCARevocationPath(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLCARevocationFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLHonorCipherOrder(cmd_parms *cmd, void *dcfg, int flag);
-const char *ssl_cmd_SSLVerifyClient(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLVerifyDepth(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLSessionCache(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLSessionCacheTimeout(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProtocol(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLOptions(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLRequireSSL(cmd_parms *, void *);
-const char *ssl_cmd_SSLRequire(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLUserName(cmd_parms *, void *, const char *);
-
-const char *ssl_cmd_SSLProxyEngine(cmd_parms *cmd, void *dcfg, int flag);
-const char *ssl_cmd_SSLProxyProtocol(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyCipherSuite(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyVerify(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyCARevocationPath(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyCARevocationFile(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *, void *, const char *);
-const char *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *, void *, const char *);
-
-/* module initialization */
-int ssl_init_Module(apr_pool_t *, apr_pool_t *, apr_pool_t *, server_rec *);
-void ssl_init_Engine(server_rec *, apr_pool_t *);
-void ssl_init_ConfigureServer(server_rec *, apr_pool_t *, apr_pool_t *, SSLSrvConfigRec *);
-void ssl_init_CheckServers(server_rec *, apr_pool_t *);
-STACK_OF(X509_NAME)
- *ssl_init_FindCAList(server_rec *, apr_pool_t *, const char *, const char *);
-void ssl_init_Child(apr_pool_t *, server_rec *);
-apr_status_t ssl_init_ModuleKill(void *data);
-
-/* Apache API hooks */
-int ssl_hook_Translate(request_rec *);
-int ssl_hook_Auth(request_rec *);
-int ssl_hook_UserCheck(request_rec *);
-int ssl_hook_Access(request_rec *);
-int ssl_hook_Fixup(request_rec *);
-int ssl_hook_ReadReq(request_rec *);
-int ssl_hook_Upgrade(request_rec *);
-
-/* OpenSSL callbacks */
-RSA *ssl_callback_TmpRSA(SSL *, int, int);
-DH *ssl_callback_TmpDH(SSL *, int, int);
-int ssl_callback_SSLVerify(int, X509_STORE_CTX *);
-int ssl_callback_SSLVerify_CRL(int, X509_STORE_CTX *, conn_rec *);
-int ssl_callback_proxy_cert(SSL *ssl, MODSSL_CLIENT_CERT_CB_ARG_TYPE **x509, EVP_PKEY **pkey);
-int ssl_callback_NewSessionCacheEntry(SSL *, SSL_SESSION *);
-SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *, unsigned char *, int, int *);
-void ssl_callback_DelSessionCacheEntry(SSL_CTX *, SSL_SESSION *);
-void ssl_callback_LogTracingState(MODSSL_INFO_CB_ARG_TYPE, int, int);
-
-/* Session Cache Support */
-void ssl_scache_init(server_rec *, apr_pool_t *);
-void ssl_scache_status_register(apr_pool_t *p);
-void ssl_scache_kill(server_rec *);
-BOOL ssl_scache_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_retrieve(server_rec *, UCHAR *, int);
-void ssl_scache_remove(server_rec *, UCHAR *, int);
-
-char *ssl_scache_id2sz(UCHAR *, int);
-void ssl_scache_dbm_init(server_rec *, apr_pool_t *);
-void ssl_scache_dbm_kill(server_rec *);
-BOOL ssl_scache_dbm_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_dbm_retrieve(server_rec *, UCHAR *, int);
-void ssl_scache_dbm_remove(server_rec *, UCHAR *, int);
-void ssl_scache_dbm_status(request_rec *r, int flags, apr_pool_t *pool);
-
-void ssl_scache_shmcb_init(server_rec *, apr_pool_t *);
-void ssl_scache_shmcb_kill(server_rec *);
-BOOL ssl_scache_shmcb_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *, UCHAR *, int);
-void ssl_scache_shmcb_remove(server_rec *, UCHAR *, int);
-void ssl_scache_shmcb_status(request_rec *r, int flags, apr_pool_t *pool);
-
-void ssl_scache_dc_init(server_rec *, apr_pool_t *);
-void ssl_scache_dc_kill(server_rec *);
-BOOL ssl_scache_dc_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_dc_retrieve(server_rec *, UCHAR *, int);
-void ssl_scache_dc_remove(server_rec *, UCHAR *, int);
-void ssl_scache_dc_status(request_rec *r, int flags, apr_pool_t *pool);
-
-/* Proxy Support */
-int ssl_proxy_enable(conn_rec *c);
-int ssl_engine_disable(conn_rec *c);
-
-/* I/O */
-void ssl_io_filter_init(conn_rec *, SSL *);
-void ssl_io_filter_register(apr_pool_t *);
-long ssl_io_data_cb(BIO *, int, MODSSL_BIO_CB_ARG_TYPE *, int, long, long);
-
-/* PRNG */
-int ssl_rand_seed(server_rec *, apr_pool_t *, ssl_rsctx_t, char *);
-
-/* Utility Functions */
-char *ssl_util_vhostid(apr_pool_t *, server_rec *);
-apr_file_t *ssl_util_ppopen(server_rec *, apr_pool_t *, const char *,
- const char * const *);
-void ssl_util_ppclose(server_rec *, apr_pool_t *, apr_file_t *);
-char *ssl_util_readfilter(server_rec *, apr_pool_t *, const char *,
- const char * const *);
-BOOL ssl_util_path_check(ssl_pathcheck_t, const char *, apr_pool_t *);
-ssl_algo_t ssl_util_algotypeof(X509 *, EVP_PKEY *);
-char *ssl_util_algotypestr(ssl_algo_t);
-void ssl_util_thread_setup(apr_pool_t *);
-int ssl_init_ssl_connection(conn_rec *c);
-
-/* Pass Phrase Support */
-void ssl_pphrase_Handle(server_rec *, apr_pool_t *);
-
-/* Diffie-Hellman Parameter Support */
-DH *ssl_dh_GetTmpParam(int);
-DH *ssl_dh_GetParamFromFile(char *);
-
-unsigned char *ssl_asn1_table_set(apr_hash_t *table,
- const char *key,
- long int length);
-
-ssl_asn1_t *ssl_asn1_table_get(apr_hash_t *table,
- const char *key);
-
-void ssl_asn1_table_unset(apr_hash_t *table,
- const char *key);
-
-const char *ssl_asn1_keystr(int keytype);
-
-const char *ssl_asn1_table_keyfmt(apr_pool_t *p,
- const char *id,
- int keytype);
-/* Mutex Support */
-int ssl_mutex_init(server_rec *, apr_pool_t *);
-int ssl_mutex_reinit(server_rec *, apr_pool_t *);
-int ssl_mutex_on(server_rec *);
-int ssl_mutex_off(server_rec *);
-
-/* Logfile Support */
-void ssl_die(void);
-void ssl_log_ssl_error(const char *, int, int, server_rec *);
-
-/* Variables */
-void ssl_var_register(void);
-char *ssl_var_lookup(apr_pool_t *, server_rec *, conn_rec *, request_rec *, char *);
-void ssl_var_log_config_register(apr_pool_t *p);
-
-#define APR_SHM_MAXSIZE (64 * 1024 * 1024)
-
-#endif /* SSL_PRIVATE_H */
diff --git a/modules/ssl/ssl_scache.c b/modules/ssl/ssl_scache.c
deleted file mode 100644
index 2d787a268e..0000000000
--- a/modules/ssl/ssl_scache.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_scache.c
- * Session Cache Abstraction
- */
- /* ``Open-Source Software: generous
- programmers from around the world all
- join forces to help you shoot
- yourself in the foot for free.''
- -- Unknown */
-#include "ssl_private.h"
-#include "mod_status.h"
-
-/* _________________________________________________________________
-**
-** Session Cache: Common Abstraction Layer
-** _________________________________________________________________
-*/
-
-void ssl_scache_init(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- /*
- * Warn the user that he should use the session cache.
- * But we can operate without it, of course.
- */
- if (mc->nSessionCacheMode == SSL_SCMODE_UNSET) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "Init: Session Cache is not configured "
- "[hint: SSLSessionCache]");
- mc->nSessionCacheMode = SSL_SCMODE_NONE;
- return;
- }
-
- if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
- ssl_scache_dbm_init(s, p);
-#ifdef HAVE_DISTCACHE
- else if (mc->nSessionCacheMode == SSL_SCMODE_DC)
- ssl_scache_dc_init(s, p);
-#endif
- else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB) {
- void *data;
- const char *userdata_key = "ssl_scache_init";
-
- apr_pool_userdata_get(&data, userdata_key, s->process->pool);
- if (!data) {
- apr_pool_userdata_set((const void *)1, userdata_key,
- apr_pool_cleanup_null, s->process->pool);
- return;
- }
- ssl_scache_shmcb_init(s, p);
- }
-}
-
-void ssl_scache_kill(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
- ssl_scache_dbm_kill(s);
- else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
- ssl_scache_shmcb_kill(s);
-#ifdef HAVE_DISTCACHE
- else if (mc->nSessionCacheMode == SSL_SCMODE_DC)
- ssl_scache_dc_kill(s);
-#endif
- return;
-}
-
-BOOL ssl_scache_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SESSION *sess)
-{
- SSLModConfigRec *mc = myModConfig(s);
- BOOL rv = FALSE;
-
- if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
- rv = ssl_scache_dbm_store(s, id, idlen, expiry, sess);
- else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
- rv = ssl_scache_shmcb_store(s, id, idlen, expiry, sess);
-#ifdef HAVE_DISTCACHE
- else if (mc->nSessionCacheMode == SSL_SCMODE_DC)
- rv = ssl_scache_dc_store(s, id, idlen, expiry, sess);
-#endif
- return rv;
-}
-
-SSL_SESSION *ssl_scache_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
- SSL_SESSION *sess = NULL;
-
- if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
- sess = ssl_scache_dbm_retrieve(s, id, idlen);
- else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
- sess = ssl_scache_shmcb_retrieve(s, id, idlen);
-#ifdef HAVE_DISTCACHE
- else if (mc->nSessionCacheMode == SSL_SCMODE_DC)
- sess = ssl_scache_dc_retrieve(s, id, idlen);
-#endif
- return sess;
-}
-
-void ssl_scache_remove(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
- ssl_scache_dbm_remove(s, id, idlen);
- else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
- ssl_scache_shmcb_remove(s, id, idlen);
-#ifdef HAVE_DISTCACHE
- else if (mc->nSessionCacheMode == SSL_SCMODE_DC)
- ssl_scache_dc_remove(s, id, idlen);
-#endif
- return;
-}
-
-/* _________________________________________________________________
-**
-** SSL Extension to mod_status
-** _________________________________________________________________
-*/
-static int ssl_ext_status_hook(request_rec *r, int flags)
-{
- SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
- if (sc == NULL || flags & AP_STATUS_SHORT)
- return OK;
-
- ap_rputs("<hr>\n", r);
- ap_rputs("<table cellspacing=0 cellpadding=0>\n", r);
- ap_rputs("<tr><td bgcolor=\"#000000\">\n", r);
- ap_rputs("<b><font color=\"#ffffff\" face=\"Arial,Helvetica\">SSL/TLS Session Cache Status:</font></b>\r", r);
- ap_rputs("</td></tr>\n", r);
- ap_rputs("<tr><td bgcolor=\"#ffffff\">\n", r);
-
- if (sc->mc->nSessionCacheMode == SSL_SCMODE_DBM)
- ssl_scache_dbm_status(r, flags, r->pool);
- else if (sc->mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
- ssl_scache_shmcb_status(r, flags, r->pool);
-#ifdef HAVE_DISTCACHE
- else if (sc->mc->nSessionCacheMode == SSL_SCMODE_DC)
- ssl_scache_dc_status(r, flags, r->pool);
-#endif
-
- ap_rputs("</td></tr>\n", r);
- ap_rputs("</table>\n", r);
- return OK;
-}
-
-void ssl_scache_status_register(apr_pool_t *p)
-{
- APR_OPTIONAL_HOOK(ap, status_hook, ssl_ext_status_hook, NULL, NULL,
- APR_HOOK_MIDDLE);
-}
-
diff --git a/modules/ssl/ssl_scache_dbm.c b/modules/ssl/ssl_scache_dbm.c
deleted file mode 100644
index 4dbfacbf87..0000000000
--- a/modules/ssl/ssl_scache_dbm.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_scache_dbm.c
- * Session Cache via DBM
- */
-
-#include "ssl_private.h"
-
-static void ssl_scache_dbm_expire(server_rec *s);
-
-void ssl_scache_dbm_init(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_dbm_t *dbm;
- apr_status_t rv;
-
- /* for the DBM we need the data file */
- if (mc->szSessionCacheDataFile == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "SSLSessionCache required");
- ssl_die();
- }
-
- /* open it once to create it and to make sure it _can_ be created */
- ssl_mutex_on(s);
- if ((rv = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot create SSLSessionCache DBM file `%s'",
- mc->szSessionCacheDataFile);
- ssl_mutex_off(s);
- return;
- }
- apr_dbm_close(dbm);
-
-#if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
- /*
- * We have to make sure the Apache child processes have access to
- * the DBM file. But because there are brain-dead platforms where we
- * cannot exactly determine the suffixes we try all possibilities.
- */
- if (geteuid() == 0 /* is superuser */) {
- chown(mc->szSessionCacheDataFile, unixd_config.user_id, -1 /* no gid change */);
- if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_DIR, NULL),
- unixd_config.user_id, -1) == -1) {
- if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".db", NULL),
- unixd_config.user_id, -1) == -1)
- chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".dir", NULL),
- unixd_config.user_id, -1);
- }
- if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_PAG, NULL),
- unixd_config.user_id, -1) == -1) {
- if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".db", NULL),
- unixd_config.user_id, -1) == -1)
- chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".pag", NULL),
- unixd_config.user_id, -1);
- }
- }
-#endif
- ssl_mutex_off(s);
- ssl_scache_dbm_expire(s);
- return;
-}
-
-void ssl_scache_dbm_kill(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_pool_t *p;
-
- apr_pool_create_ex(&p, mc->pPool, NULL, NULL);
- if (p != NULL) {
- /* the correct way */
- unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_DIR, NULL));
- unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_PAG, NULL));
- /* the additional ways to be sure */
- unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, ".dir", NULL));
- unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, ".pag", NULL));
- unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, ".db", NULL));
- unlink(mc->szSessionCacheDataFile);
- apr_pool_destroy(p);
- }
- return;
-}
-
-BOOL ssl_scache_dbm_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SESSION *sess)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_dbm_t *dbm;
- apr_datum_t dbmkey;
- apr_datum_t dbmval;
- UCHAR ucaData[SSL_SESSION_MAX_DER];
- int nData;
- UCHAR *ucp;
- apr_status_t rv;
-
- /* streamline session data */
- if ((nData = i2d_SSL_SESSION(sess, NULL)) > sizeof(ucaData)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "streamline session data size too large: %d > "
- "%" APR_SIZE_T_FMT,
- nData, sizeof(ucaData));
- return FALSE;
- }
- ucp = ucaData;
- i2d_SSL_SESSION(sess, &ucp);
-
- /* be careful: do not try to store too much bytes in a DBM file! */
-#ifdef PAIRMAX
- if ((idlen + nData) >= PAIRMAX) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "data size too large for DBM session cache: %d >= %d",
- (idlen + nData), PAIRMAX);
- return FALSE;
- }
-#else
- if ((idlen + nData) >= 950 /* at least less than approx. 1KB */) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "data size too large for DBM session cache: %d >= %d",
- (idlen + nData), 950);
- return FALSE;
- }
-#endif
-
- /* create DBM key */
- dbmkey.dptr = (char *)id;
- dbmkey.dsize = idlen;
-
- /* create DBM value */
- dbmval.dsize = sizeof(time_t) + nData;
- dbmval.dptr = (char *)malloc(dbmval.dsize);
- if (dbmval.dptr == NULL) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "malloc error creating DBM value");
- return FALSE;
- }
- memcpy((char *)dbmval.dptr, &expiry, sizeof(time_t));
- memcpy((char *)dbmval.dptr+sizeof(time_t), ucaData, nData);
-
- /* and store it to the DBM file */
- ssl_mutex_on(s);
- if ((rv = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot open SSLSessionCache DBM file `%s' for writing "
- "(store)",
- mc->szSessionCacheDataFile);
- ssl_mutex_off(s);
- free(dbmval.dptr);
- return FALSE;
- }
- if ((rv = apr_dbm_store(dbm, dbmkey, dbmval)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot store SSL session to DBM file `%s'",
- mc->szSessionCacheDataFile);
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
- free(dbmval.dptr);
- return FALSE;
- }
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
-
- /* free temporary buffers */
- free(dbmval.dptr);
-
- /* allow the regular expiring to occur */
- ssl_scache_dbm_expire(s);
-
- return TRUE;
-}
-
-SSL_SESSION *ssl_scache_dbm_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_dbm_t *dbm;
- apr_datum_t dbmkey;
- apr_datum_t dbmval;
- SSL_SESSION *sess = NULL;
- UCHAR *ucpData;
- int nData;
- time_t expiry;
- time_t now;
- apr_status_t rc;
-
- /* allow the regular expiring to occur */
- ssl_scache_dbm_expire(s);
-
- /* create DBM key and values */
- dbmkey.dptr = (char *)id;
- dbmkey.dsize = idlen;
-
- /* and fetch it from the DBM file
- * XXX: Should we open the dbm against r->pool so the cleanup will
- * do the apr_dbm_close? This would make the code a bit cleaner.
- */
- ssl_mutex_on(s);
- if ((rc = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
- "Cannot open SSLSessionCache DBM file `%s' for reading "
- "(fetch)",
- mc->szSessionCacheDataFile);
- ssl_mutex_off(s);
- return NULL;
- }
- rc = apr_dbm_fetch(dbm, dbmkey, &dbmval);
- if (rc != APR_SUCCESS) {
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
- return NULL;
- }
- if (dbmval.dptr == NULL || dbmval.dsize <= sizeof(time_t)) {
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
- return NULL;
- }
-
- /* parse resulting data */
- nData = dbmval.dsize-sizeof(time_t);
- ucpData = (UCHAR *)malloc(nData);
- if (ucpData == NULL) {
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
- return NULL;
- }
- memcpy(ucpData, (char *)dbmval.dptr+sizeof(time_t), nData);
- memcpy(&expiry, dbmval.dptr, sizeof(time_t));
-
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
-
- /* make sure the stuff is still not expired */
- now = time(NULL);
- if (expiry <= now) {
- ssl_scache_dbm_remove(s, id, idlen);
- return NULL;
- }
-
- /* unstreamed SSL_SESSION */
- sess = d2i_SSL_SESSION(NULL, &ucpData, nData);
-
- return sess;
-}
-
-void ssl_scache_dbm_remove(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
- apr_dbm_t *dbm;
- apr_datum_t dbmkey;
- apr_status_t rv;
-
- /* create DBM key and values */
- dbmkey.dptr = (char *)id;
- dbmkey.dsize = idlen;
-
- /* and delete it from the DBM file */
- ssl_mutex_on(s);
- if ((rv = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot open SSLSessionCache DBM file `%s' for writing "
- "(delete)",
- mc->szSessionCacheDataFile);
- ssl_mutex_off(s);
- return;
- }
- apr_dbm_delete(dbm, dbmkey);
- apr_dbm_close(dbm);
- ssl_mutex_off(s);
-
- return;
-}
-
-static void ssl_scache_dbm_expire(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
- SSLSrvConfigRec *sc = mySrvConfig(s);
- static time_t tLast = 0;
- apr_dbm_t *dbm;
- apr_datum_t dbmkey;
- apr_datum_t dbmval;
- apr_pool_t *p;
- time_t tExpiresAt;
- int nElements = 0;
- int nDeleted = 0;
- int bDelete;
- apr_datum_t *keylist;
- int keyidx;
- int i;
- time_t tNow;
- apr_status_t rv;
-
- /*
- * make sure the expiration for still not-accessed session
- * cache entries is done only from time to time
- */
- tNow = time(NULL);
- if (tNow < tLast+sc->session_cache_timeout)
- return;
- tLast = tNow;
-
- /*
- * Here we have to be very carefully: Not all DBM libraries are
- * smart enough to allow one to iterate over the elements and at the
- * same time delete expired ones. Some of them get totally crazy
- * while others have no problems. So we have to do it the slower but
- * more safe way: we first iterate over all elements and remember
- * those which have to be expired. Then in a second pass we delete
- * all those expired elements. Additionally we reopen the DBM file
- * to be really safe in state.
- */
-
-#define KEYMAX 1024
-
- ssl_mutex_on(s);
- for (;;) {
- /* allocate the key array in a memory sub pool */
- apr_pool_create_ex(&p, mc->pPool, NULL, NULL);
- if (p == NULL)
- break;
- if ((keylist = apr_palloc(p, sizeof(dbmkey)*KEYMAX)) == NULL) {
- apr_pool_destroy(p);
- break;
- }
-
- /* pass 1: scan DBM database */
- keyidx = 0;
- if ((rv = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE,SSL_DBM_FILE_MODE,
- p)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot open SSLSessionCache DBM file `%s' for "
- "scanning",
- mc->szSessionCacheDataFile);
- apr_pool_destroy(p);
- break;
- }
- apr_dbm_firstkey(dbm, &dbmkey);
- while (dbmkey.dptr != NULL) {
- nElements++;
- bDelete = FALSE;
- apr_dbm_fetch(dbm, dbmkey, &dbmval);
- if (dbmval.dsize <= sizeof(time_t) || dbmval.dptr == NULL)
- bDelete = TRUE;
- else {
- memcpy(&tExpiresAt, dbmval.dptr, sizeof(time_t));
- if (tExpiresAt <= tNow)
- bDelete = TRUE;
- }
- if (bDelete) {
- if ((keylist[keyidx].dptr = apr_palloc(p, dbmkey.dsize)) != NULL) {
- memcpy(keylist[keyidx].dptr, dbmkey.dptr, dbmkey.dsize);
- keylist[keyidx].dsize = dbmkey.dsize;
- keyidx++;
- if (keyidx == KEYMAX)
- break;
- }
- }
- apr_dbm_nextkey(dbm, &dbmkey);
- }
- apr_dbm_close(dbm);
-
- /* pass 2: delete expired elements */
- if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE,SSL_DBM_FILE_MODE, p) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
- "Cannot re-open SSLSessionCache DBM file `%s' for "
- "expiring",
- mc->szSessionCacheDataFile);
- apr_pool_destroy(p);
- break;
- }
- for (i = 0; i < keyidx; i++) {
- apr_dbm_delete(dbm, keylist[i]);
- nDeleted++;
- }
- apr_dbm_close(dbm);
-
- /* destroy temporary pool */
- apr_pool_destroy(p);
-
- if (keyidx < KEYMAX)
- break;
- }
- ssl_mutex_off(s);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "Inter-Process Session Cache (DBM) Expiry: "
- "old: %d, new: %d, removed: %d",
- nElements, nElements-nDeleted, nDeleted);
- return;
-}
-
-void ssl_scache_dbm_status(request_rec *r, int flags, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(r->server);
- apr_dbm_t *dbm;
- apr_datum_t dbmkey;
- apr_datum_t dbmval;
- int nElem;
- int nSize;
- int nAverage;
- apr_status_t rv;
-
- nElem = 0;
- nSize = 0;
- ssl_mutex_on(r->server);
- /*
- * XXX - Check what pool is to be used - TBD
- */
- if ((rv = apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
- APR_DBM_RWCREATE, SSL_DBM_FILE_MODE,
- mc->pPool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "Cannot open SSLSessionCache DBM file `%s' for status "
- "retrival",
- mc->szSessionCacheDataFile);
- ssl_mutex_off(r->server);
- return;
- }
- /*
- * XXX - Check the return value of apr_dbm_firstkey, apr_dbm_fetch - TBD
- */
- apr_dbm_firstkey(dbm, &dbmkey);
- for ( ; dbmkey.dptr != NULL; apr_dbm_nextkey(dbm, &dbmkey)) {
- apr_dbm_fetch(dbm, dbmkey, &dbmval);
- if (dbmval.dptr == NULL)
- continue;
- nElem += 1;
- nSize += dbmval.dsize;
- }
- apr_dbm_close(dbm);
- ssl_mutex_off(r->server);
- if (nSize > 0 && nElem > 0)
- nAverage = nSize / nElem;
- else
- nAverage = 0;
- ap_rprintf(r, "cache type: <b>DBM</b>, maximum size: <b>unlimited</b><br>");
- ap_rprintf(r, "current sessions: <b>%d</b>, current size: <b>%d</b> bytes<br>", nElem, nSize);
- ap_rprintf(r, "average session size: <b>%d</b> bytes<br>", nAverage);
- return;
-}
-
diff --git a/modules/ssl/ssl_scache_dc.c b/modules/ssl/ssl_scache_dc.c
deleted file mode 100644
index d8aa1eb2a9..0000000000
--- a/modules/ssl/ssl_scache_dc.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_scache_dc.c
- * Distributed Session Cache (client support)
- */
-
-#include "ssl_private.h"
-
-/* Only build this code if it's enabled at configure-time. */
-#ifdef HAVE_DISTCACHE
-
-#include "distcache/dc_client.h"
-
-#if !defined(DISTCACHE_CLIENT_API) || (DISTCACHE_CLIENT_API < 0x0001)
-#error "You must compile with a more recent version of the distcache-base package"
-#endif
-
-/*
- * This cache implementation allows modssl to access 'distcache' servers (or
- * proxies) to facilitate distributed session caching. It is based on code
- * released as open source by Cryptographic Appliances Inc, and was developed by
- * Geoff Thorpe, Steve Robb, and Chris Zimmerman.
- */
-
-/*
-**
-** High-Level "handlers" as per ssl_scache.c
-**
-*/
-
-void ssl_scache_dc_init(server_rec *s, apr_pool_t *p)
-{
- DC_CTX *ctx;
- SSLModConfigRec *mc = myModConfig(s);
- /*
- * Create a session context
- */
- if (mc->szSessionCacheDataFile == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "SSLSessionCache required");
- ssl_die();
- }
-#if 0
- /* If a "persistent connection" mode of operation is preferred, you *must*
- * also use the PIDCHECK flag to ensure fork()'d processes don't interlace
- * comms on the same connection as each other. */
-#define SESSION_CTX_FLAGS SESSION_CTX_FLAG_PERSISTENT | \
- SESSION_CTX_FLAG_PERSISTENT_PIDCHECK | \
- SESSION_CTX_FLAG_PERSISTENT_RETRY | \
- SESSION_CTX_FLAG_PERSISTENT_LATE
-#else
- /* This mode of operation will open a temporary connection to the 'target'
- * for each cache operation - this makes it safe against fork()
- * automatically. This mode is preferred when running a local proxy (over
- * unix domain sockets) because overhead is negligable and it reduces the
- * performance/stability danger of file-descriptor bloatage. */
-#define SESSION_CTX_FLAGS 0
-#endif
- ctx = DC_CTX_new(mc->szSessionCacheDataFile, SESSION_CTX_FLAGS);
- if (!ctx) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache failed to obtain context");
- ssl_die();
- }
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, "distributed scache context initialised");
- /*
- * Success ...
- */
- mc->tSessionCacheDataTable = ctx;
- return;
-}
-
-void ssl_scache_dc_kill(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- if (mc->tSessionCacheDataTable)
- DC_CTX_free(mc->tSessionCacheDataTable);
- mc->tSessionCacheDataTable = NULL;
-}
-
-BOOL ssl_scache_dc_store(server_rec *s, UCHAR *id, int idlen,
- time_t timeout, SSL_SESSION * pSession)
-{
- unsigned char der[SSL_SESSION_MAX_DER];
- int der_len;
- unsigned char *pder = der;
- SSLModConfigRec *mc = myModConfig(s);
- DC_CTX *ctx = mc->tSessionCacheDataTable;
-
- /* Serialise the SSL_SESSION object */
- if ((der_len = i2d_SSL_SESSION(pSession, NULL)) > SSL_SESSION_MAX_DER)
- return FALSE;
- i2d_SSL_SESSION(pSession, &pder);
- /* !@#$%^ - why do we deal with *absolute* time anyway??? */
- timeout -= time(NULL);
- /* Send the serialised session to the distributed cache context */
- if (!DC_CTX_add_session(ctx, id, idlen, der, der_len,
- (unsigned long)timeout * 1000)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'add_session' failed");
- return FALSE;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "distributed scache 'add_session' successful");
- return TRUE;
-}
-
-SSL_SESSION *ssl_scache_dc_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
- unsigned char der[SSL_SESSION_MAX_DER];
- unsigned int der_len;
- SSL_SESSION *pSession;
- unsigned char *pder = der;
- SSLModConfigRec *mc = myModConfig(s);
- DC_CTX *ctx = mc->tSessionCacheDataTable;
-
- /* Retrieve any corresponding session from the distributed cache context */
- if (!DC_CTX_get_session(ctx, id, idlen, der, SSL_SESSION_MAX_DER,
- &der_len)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "distributed scache 'get_session' MISS");
- return NULL;
- }
- if (der_len > SSL_SESSION_MAX_DER) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'get_session' OVERFLOW");
- return NULL;
- }
- pSession = d2i_SSL_SESSION(NULL, &pder, der_len);
- if (!pSession) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'get_session' CORRUPT");
- return NULL;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "distributed scache 'get_session' HIT");
- return pSession;
-}
-
-void ssl_scache_dc_remove(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
- DC_CTX *ctx = mc->tSessionCacheDataTable;
-
- /* Remove any corresponding session from the distributed cache context */
- if (!DC_CTX_remove_session(ctx, id, idlen)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'remove_session' MISS");
- } else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'remove_session' HIT");
- }
-}
-
-void ssl_scache_dc_status(request_rec *r, int flags, apr_pool_t *pool)
-{
- SSLModConfigRec *mc = myModConfig(r->server);
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "distributed scache 'ssl_scache_dc_status'");
- ap_rprintf(r, "cache type: <b>DC (Distributed Cache)</b>, "
- " target: <b>%s</b><br>", mc->szSessionCacheDataFile);
-}
-
-#endif
-
diff --git a/modules/ssl/ssl_scache_shmcb.c b/modules/ssl/ssl_scache_shmcb.c
deleted file mode 100644
index ee02a407ec..0000000000
--- a/modules/ssl/ssl_scache_shmcb.c
+++ /dev/null
@@ -1,1338 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_scache_shmcb.c
- * Session Cache via Shared Memory (Cyclic Buffer Variant)
- */
-
-#include "ssl_private.h"
-
-/*
- * This shared memory based SSL session cache implementation was
- * originally written by Geoff Thorpe <geoff geoffthorpe.net> for C2Net
- * Europe as a contribution to Ralf Engelschall's mod_ssl project.
- */
-
-/*
- * The shared-memory segment header can be cast to and from the
- * SHMCBHeader type, all other structures need to be initialised by
- * utility functions.
- *
- * The "header" looks like this;
- *
- * data applying to the overall structure:
- * - division_offset (unsigned int):
- * how far into the shared memory segment the first division is.
- * - division_size (unsigned int):
- * how many bytes each division occupies.
- * (NB: This includes the queue and the cache)
- * - division_mask (unsigned char):
- * the "mask" in the next line. Add one to this,
- * and that's the number of divisions.
- *
- * data applying to within each division:
- * - queue_size (unsigned int):
- * how big each "queue" is. NB: The queue is the first block in each
- * division and is followed immediately by the cache itself so so
- * there's no cache_offset value.
- *
- * data applying to within each queue:
- * - index_num (unsigned char):
- * how many indexes in each cache's queue
- * - index_offset (unsigned char):
- * how far into the queue the first index is.
- * - index_size:
- * how big each index is.
- *
- * data applying to within each cache:
- * - cache_data_offset (unsigned int):
- * how far into the cache the session-data array is stored.
- * - cache_data_size (unsigned int):
- * how big each cache's data block is.
- *
- * statistics data (this will eventually be per-division but right now
- * there's only one mutex):
- * - stores (unsigned long):
- * how many stores have been performed in the cache.
- * - expiries (unsigned long):
- * how many session have been expired from the cache.
- * - scrolled (unsigned long):
- * how many sessions have been scrolled out of full cache during a
- * "store" operation. This is different to the "removes" stats as
- * they are requested by mod_ssl/Apache, these are done because of
- * cache logistics. (NB: Also, this value should be deducible from
- * the others if my code has no bugs, but I count it anyway - plus
- * it helps debugging :-).
- * - retrieves_hit (unsigned long):
- * how many session-retrieves have succeeded.
- * - retrieves_miss (unsigned long):
- * how many session-retrieves have failed.
- * - removes_hit (unsigned long):
- * - removes_miss (unsigned long):
- *
- * Following immediately after the header is an array of "divisions".
- * Each division is simply a "queue" immediately followed by its
- * corresponding "cache". Each division handles some pre-defined band
- * of sessions by using the "division_mask" in the header. Eg. if
- * division_mask=0x1f then there are 32 divisions, the first of which
- * will store sessions whose least-significant 5 bits are 0, the second
- * stores session whose LS 5 bits equal 1, etc. A queue is an indexing
- * structure referring to its corresponding cache.
- *
- * A "queue" looks like this;
- *
- * - first_pos (unsigned int):
- * the location within the array of indexes where the virtual
- * "left-hand-edge" of the cyclic buffer is.
- * - pos_count (unsigned int):
- * the number of indexes occupied from first_pos onwards.
- *
- * ...followed by an array of indexes, each of which can be
- * memcpy'd to and from an SHMCBIndex, and look like this;
- *
- * - expires (time_t):
- * the time() value at which this session expires.
- * - offset (unsigned int):
- * the offset within the cache data block where the corresponding
- * session is stored.
- * - s_id2 (unsigned char):
- * the second byte of the session_id, stored as an optimisation to
- * reduce the number of d2i_SSL_SESSION calls that are made when doing
- * a lookup.
- * - removed (unsigned char):
- * a byte used to indicate whether a session has been "passively"
- * removed. Ie. it is still in the cache but is to be disregarded by
- * any "retrieve" operation.
- *
- * A "cache" looks like this;
- *
- * - first_pos (unsigned int):
- * the location within the data block where the virtual
- * "left-hand-edge" of the cyclic buffer is.
- * - pos_count (unsigned int):
- * the number of bytes used in the data block from first_pos onwards.
- *
- * ...followed by the data block in which actual DER-encoded SSL
- * sessions are stored.
- */
-
-/*
- * Header - can be memcpy'd to and from the front of the shared
- * memory segment. NB: The first copy (commented out) has the
- * elements in a meaningful order, but due to data-alignment
- * braindeadness, the second (uncommented) copy has the types grouped
- * so as to decrease "struct-bloat". sigh.
- */
-typedef struct {
- unsigned long num_stores;
- unsigned long num_expiries;
- unsigned long num_scrolled;
- unsigned long num_retrieves_hit;
- unsigned long num_retrieves_miss;
- unsigned long num_removes_hit;
- unsigned long num_removes_miss;
- unsigned int division_offset;
- unsigned int division_size;
- unsigned int queue_size;
- unsigned int cache_data_offset;
- unsigned int cache_data_size;
- unsigned char division_mask;
- unsigned int index_num;
- unsigned int index_offset;
- unsigned int index_size;
-} SHMCBHeader;
-
-/*
- * Index - can be memcpy'd to and from an index inside each
- * queue's index array.
- */
-typedef struct {
- time_t expires;
- unsigned int offset;
- unsigned char s_id2;
- unsigned char removed;
-} SHMCBIndex;
-
-/*
- * Queue - must be populated by a call to shmcb_get_division
- * and the structure's pointers are used for updating (ie.
- * the structure doesn't need any "set" to update values).
- */
-typedef struct {
- SHMCBHeader *header;
- unsigned int *first_pos;
- unsigned int *pos_count;
- SHMCBIndex *indexes;
-} SHMCBQueue;
-
-/*
- * Cache - same comment as for Queue. 'Queue's are in a 1-1
- * correspondance with 'Cache's and are usually carried round
- * in a pair, they are only seperated for clarity.
- */
-typedef struct {
- SHMCBHeader *header;
- unsigned int *first_pos;
- unsigned int *pos_count;
- unsigned char *data;
-} SHMCBCache;
-
-/*
- * Forward function prototypes.
- */
-
-/* Functions for working around data-alignment-picky systems (sparcs,
- Irix, etc). These use "memcpy" as a way of foxing these systems into
- treating the composite types as byte-arrays rather than higher-level
- primitives that it prefers to have 4-(or 8-)byte aligned. I don't
- envisage this being a performance issue as a couple of 2 or 4 byte
- memcpys can hardly make a dent on the massive memmove operations this
- cache technique avoids, nor the overheads of ASN en/decoding. */
-static unsigned int shmcb_get_safe_uint(unsigned int *);
-static void shmcb_set_safe_uint_ex(unsigned char *, const unsigned char *);
-#define shmcb_set_safe_uint(pdest, src) \
- do { \
- unsigned int tmp_uint = src; \
- shmcb_set_safe_uint_ex((unsigned char *)pdest, \
- (const unsigned char *)(&tmp_uint)); \
- } while(0)
-#if 0 /* Unused so far */
-static unsigned long shmcb_get_safe_ulong(unsigned long *);
-static void shmcb_set_safe_ulong_ex(unsigned char *, const unsigned char *);
-#define shmcb_set_safe_ulong(pdest, src) \
- do { \
- unsigned long tmp_ulong = src; \
- shmcb_set_safe_ulong_ex((unsigned char *)pdest, \
- (const unsigned char *)(&tmp_ulong)); \
- } while(0)
-#endif
-static time_t shmcb_get_safe_time(time_t *);
-static void shmcb_set_safe_time_ex(unsigned char *, const unsigned char *);
-#define shmcb_set_safe_time(pdest, src) \
- do { \
- time_t tmp_time = src; \
- shmcb_set_safe_time_ex((unsigned char *)pdest, \
- (const unsigned char *)(&tmp_time)); \
- } while(0)
-
-/* This is necessary simply so that the size passed to memset() is not a
- * compile-time constant, preventing the compiler from optimising it. */
-static void shmcb_safe_clear(void *ptr, size_t size)
-{
- memset(ptr, 0, size);
-}
-
-/* Underlying functions for session-caching */
-static BOOL shmcb_init_memory(server_rec *, void *, unsigned int);
-static BOOL shmcb_store_session(server_rec *, void *, UCHAR *, int, SSL_SESSION *, time_t);
-static SSL_SESSION *shmcb_retrieve_session(server_rec *, void *, UCHAR *, int);
-static BOOL shmcb_remove_session(server_rec *, void *, UCHAR *, int);
-
-/* Utility functions for manipulating the structures */
-static void shmcb_get_header(void *, SHMCBHeader **);
-static BOOL shmcb_get_division(SHMCBHeader *, SHMCBQueue *, SHMCBCache *, unsigned int);
-static SHMCBIndex *shmcb_get_index(const SHMCBQueue *, unsigned int);
-static unsigned int shmcb_expire_division(server_rec *, SHMCBQueue *, SHMCBCache *);
-static BOOL shmcb_insert_encoded_session(server_rec *, SHMCBQueue *, SHMCBCache *, unsigned char *, unsigned int, unsigned char *, time_t);
-static SSL_SESSION *shmcb_lookup_session_id(server_rec *, SHMCBQueue *, SHMCBCache *, UCHAR *, unsigned int);
-static BOOL shmcb_remove_session_id(server_rec *, SHMCBQueue *, SHMCBCache *, UCHAR *, unsigned int);
-
-/*
- * Data-alignment functions (a.k.a. avoidance tactics)
- *
- * NB: On HPUX (and possibly others) there is a *very* mischievous little
- * "optimisation" in the compilers where it will convert the following;
- * memcpy(dest_ptr, &source, sizeof(unsigned int));
- * (where dest_ptr is of type (unsigned int *) and source is (unsigned int))
- * into;
- * *dest_ptr = source; (or *dest_ptr = *(&source), not sure).
- * Either way, it completely destroys the whole point of these _safe_
- * functions, because the assignment operation will fall victim to the
- * architecture's byte-alignment dictations, whereas the memcpy (as a
- * byte-by-byte copy) should not. sigh. So, if you're wondering about the
- * apparently unnecessary conversions to (unsigned char *) in these
- * functions, you now have an explanation. Don't just revert them back and
- * say "ooh look, it still works" - if you try it on HPUX (well, 32-bit
- * HPUX 11.00 at least) you may find it fails with a SIGBUS. :-(
- */
-
-static unsigned int shmcb_get_safe_uint(unsigned int *ptr)
-{
- unsigned int ret;
- shmcb_set_safe_uint_ex((unsigned char *)(&ret),
- (const unsigned char *)ptr);
- return ret;
-}
-
-static void shmcb_set_safe_uint_ex(unsigned char *dest,
- const unsigned char *src)
-{
- memcpy(dest, src, sizeof(unsigned int));
-}
-
-#if 0 /* Unused so far */
-static unsigned long shmcb_get_safe_ulong(unsigned long *ptr)
-{
- unsigned long ret;
- shmcb_set_safe_ulong_ex((unsigned char *)(&ret),
- (const unsigned char *)ptr);
- return ret;
-}
-
-static void shmcb_set_safe_ulong_ex(unsigned char *dest,
- const unsigned char *src)
-{
- memcpy(dest, src, sizeof(unsigned long));
-}
-#endif
-
-static time_t shmcb_get_safe_time(time_t * ptr)
-{
- time_t ret;
- shmcb_set_safe_time_ex((unsigned char *)(&ret),
- (const unsigned char *)ptr);
- return ret;
-}
-
-static void shmcb_set_safe_time_ex(unsigned char *dest,
- const unsigned char *src)
-{
- memcpy(dest, src, sizeof(time_t));
-}
-/*
-**
-** High-Level "handlers" as per ssl_scache.c
-**
-*/
-
-void ssl_scache_shmcb_init(server_rec *s, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(s);
- void *shm_segment;
- apr_size_t shm_segsize;
- apr_status_t rv;
-
- /*
- * Create shared memory segment
- */
- if (mc->szSessionCacheDataFile == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "SSLSessionCache required");
- ssl_die();
- }
-
- /* Use anonymous shm by default, fall back on name-based. */
- rv = apr_shm_create(&(mc->pSessionCacheDataMM),
- mc->nSessionCacheDataSize,
- NULL, mc->pPool);
-
- if (APR_STATUS_IS_ENOTIMPL(rv)) {
- rv = apr_shm_create(&(mc->pSessionCacheDataMM),
- mc->nSessionCacheDataSize,
- mc->szSessionCacheDataFile,
- mc->pPool);
- }
-
- if (rv != APR_SUCCESS) {
- char buf[100];
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Cannot allocate shared memory: (%d)%s", rv,
- apr_strerror(rv, buf, sizeof(buf)));
- ssl_die();
- }
- shm_segment = apr_shm_baseaddr_get(mc->pSessionCacheDataMM);
- shm_segsize = apr_shm_size_get(mc->pSessionCacheDataMM);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "shmcb_init allocated %" APR_SIZE_T_FMT
- " bytes of shared memory",
- shm_segsize);
- if (!shmcb_init_memory(s, shm_segment, shm_segsize)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "Failure initialising 'shmcb' shared memory");
- ssl_die();
- }
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Shared memory session cache initialised");
-
- /*
- * Success ...
- */
- mc->tSessionCacheDataTable = shm_segment;
- return;
-}
-
-void ssl_scache_shmcb_kill(server_rec *s)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- if (mc->pSessionCacheDataMM != NULL) {
- apr_shm_destroy(mc->pSessionCacheDataMM);
- mc->pSessionCacheDataMM = NULL;
- }
- return;
-}
-
-BOOL ssl_scache_shmcb_store(server_rec *s, UCHAR *id, int idlen,
- time_t timeout, SSL_SESSION * pSession)
-{
- SSLModConfigRec *mc = myModConfig(s);
- BOOL to_return = FALSE;
-
- ssl_mutex_on(s);
- if (!shmcb_store_session(s, mc->tSessionCacheDataTable, id, idlen,
- pSession, timeout))
- /* in this cache engine, "stores" should never fail. */
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "'shmcb' code was unable to store a "
- "session in the cache.");
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "shmcb_store successful");
- to_return = TRUE;
- }
- ssl_mutex_off(s);
- return to_return;
-}
-
-SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
- SSL_SESSION *pSession;
-
- ssl_mutex_on(s);
- pSession = shmcb_retrieve_session(s, mc->tSessionCacheDataTable, id, idlen);
- ssl_mutex_off(s);
- if (pSession)
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "shmcb_retrieve had a hit");
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "shmcb_retrieve had a miss");
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,
- "Client requested a 'session-resume' but "
- "we have no such session.");
- }
- return pSession;
-}
-
-void ssl_scache_shmcb_remove(server_rec *s, UCHAR *id, int idlen)
-{
- SSLModConfigRec *mc = myModConfig(s);
-
- ssl_mutex_on(s);
- shmcb_remove_session(s, mc->tSessionCacheDataTable, id, idlen);
- ssl_mutex_off(s);
-}
-
-void ssl_scache_shmcb_status(request_rec *r, int flags, apr_pool_t *p)
-{
- SSLModConfigRec *mc = myModConfig(r->server);
- SHMCBHeader *header;
- SHMCBQueue queue;
- SHMCBCache cache;
- SHMCBIndex *idx;
- unsigned int loop, total, cache_total, non_empty_divisions;
- int index_pct, cache_pct;
- double expiry_total;
- time_t average_expiry, now, max_expiry, min_expiry, idxexpiry;
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "inside shmcb_status");
-
- /* Get the header structure. */
- shmcb_get_header(mc->tSessionCacheDataTable, &header);
- total = cache_total = non_empty_divisions = 0;
- average_expiry = max_expiry = min_expiry = 0;
- expiry_total = 0;
-
- /* It may seem strange to grab "now" at this point, but in theory
- * we should never have a negative threshold but grabbing "now" after
- * the loop (which performs expiries) could allow that chance. */
- now = time(NULL);
- for (loop = 0; loop <= header->division_mask; loop++) {
- if (shmcb_get_division(header, &queue, &cache, loop)) {
- shmcb_expire_division(r->server, &queue, &cache);
- total += shmcb_get_safe_uint(queue.pos_count);
- cache_total += shmcb_get_safe_uint(cache.pos_count);
- if (shmcb_get_safe_uint(queue.pos_count) > 0) {
- idx = shmcb_get_index(&queue,
- shmcb_get_safe_uint(queue.first_pos));
- non_empty_divisions++;
- idxexpiry = shmcb_get_safe_time(&(idx->expires));
- expiry_total += (double) idxexpiry;
- max_expiry = (idxexpiry > max_expiry ? idxexpiry :
- max_expiry);
- if (min_expiry == 0)
- min_expiry = idxexpiry;
- else
- min_expiry = (idxexpiry < min_expiry ? idxexpiry :
- min_expiry);
- }
- }
- }
- index_pct = (100 * total) / (header->index_num * (header->division_mask + 1));
- cache_pct = (100 * cache_total) / (header->cache_data_size * (header->division_mask + 1));
- ap_rprintf(r, "cache type: <b>SHMCB</b>, shared memory: <b>%d</b> "
- "bytes, current sessions: <b>%d</b><br>",
- mc->nSessionCacheDataSize, total);
- ap_rprintf(r, "sub-caches: <b>%d</b>, indexes per sub-cache: "
- "<b>%d</b><br>", (int) header->division_mask + 1,
- (int) header->index_num);
- if (non_empty_divisions != 0) {
- average_expiry = (time_t)(expiry_total / (double)non_empty_divisions);
- ap_rprintf(r, "time left on oldest entries' SSL sessions: ");
- if (now < average_expiry)
- ap_rprintf(r, "avg: <b>%d</b> seconds, (range: %d...%d)<br>",
- (int)(average_expiry - now), (int) (min_expiry - now),
- (int)(max_expiry - now));
- else
- ap_rprintf(r, "expiry threshold: <b>Calculation Error!</b>"
- "<br>");
-
- }
- ap_rprintf(r, "index usage: <b>%d%%</b>, cache usage: <b>%d%%</b>"
- "<br>", index_pct, cache_pct);
- ap_rprintf(r, "total sessions stored since starting: <b>%lu</b><br>",
- header->num_stores);
- ap_rprintf(r, "total sessions expired since starting: <b>%lu</b><br>",
- header->num_expiries);
- ap_rprintf(r, "total (pre-expiry) sessions scrolled out of the "
- "cache: <b>%lu</b><br>", header->num_scrolled);
- ap_rprintf(r, "total retrieves since starting: <b>%lu</b> hit, "
- "<b>%lu</b> miss<br>", header->num_retrieves_hit,
- header->num_retrieves_miss);
- ap_rprintf(r, "total removes since starting: <b>%lu</b> hit, "
- "<b>%lu</b> miss<br>", header->num_removes_hit,
- header->num_removes_miss);
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "leaving shmcb_status");
- return;
-}
-
-/*
-**
-** Memory manipulation and low-level cache operations
-**
-*/
-
-static BOOL shmcb_init_memory(
- server_rec *s, void *shm_mem,
- unsigned int shm_mem_size)
-{
- SHMCBHeader *header;
- SHMCBQueue queue;
- SHMCBCache cache;
- unsigned int temp, loop, granularity;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "entered shmcb_init_memory()");
-
- /* Calculate some sizes... */
- temp = sizeof(SHMCBHeader);
-
- /* If the segment is ridiculously too small, bail out */
- if (shm_mem_size < (2*temp)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shared memory segment too small");
- return FALSE;
- }
-
- /* Make temp the amount of memory without the header */
- temp = shm_mem_size - temp;
-
- /* Work on the basis that you need 10 bytes index for each session
- * (approx 150 bytes), which is to divide temp by 160 - and then
- * make sure we err on having too index space to burn even when
- * the cache is full, which is a lot less stupid than having
- * having not enough index space to utilise the whole cache!. */
- temp /= 120;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "for %u bytes, recommending %u indexes",
- shm_mem_size, temp);
-
- /* We should divide these indexes evenly amongst the queues. Try
- * to get it so that there are roughly half the number of divisions
- * as there are indexes in each division. */
- granularity = 256;
- while ((temp / granularity) < (2 * granularity))
- granularity /= 2;
-
- /* So we have 'granularity' divisions, set 'temp' equal to the
- * number of indexes in each division. */
- temp /= granularity;
-
- /* Too small? Bail ... */
- if (temp < 5) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shared memory segment too small");
- return FALSE;
- }
-
- /* OK, we're sorted - from here on in, the return should be TRUE */
- header = (SHMCBHeader *)shm_mem;
- header->division_mask = (unsigned char)(granularity - 1);
- header->division_offset = sizeof(SHMCBHeader);
- header->index_num = temp;
- header->index_offset = (2 * sizeof(unsigned int));
- header->index_size = sizeof(SHMCBIndex);
- header->queue_size = header->index_offset +
- (header->index_num * header->index_size);
-
- /* Now calculate the space for each division */
- temp = shm_mem_size - header->division_offset;
- header->division_size = temp / granularity;
-
- /* Calculate the space left in each division for the cache */
- temp -= header->queue_size;
- header->cache_data_offset = (2 * sizeof(unsigned int));
- header->cache_data_size = header->division_size -
- header->queue_size - header->cache_data_offset;
-
- /* Output trace info */
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "shmcb_init_memory choices follow");
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "division_mask = 0x%02X", header->division_mask);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "division_offset = %u", header->division_offset);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "division_size = %u", header->division_size);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "queue_size = %u", header->queue_size);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "index_num = %u", header->index_num);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "index_offset = %u", header->index_offset);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "index_size = %u", header->index_size);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "cache_data_offset = %u", header->cache_data_offset);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "cache_data_size = %u", header->cache_data_size);
-
- /* The header is done, make the caches empty */
- for (loop = 0; loop < granularity; loop++) {
- if (!shmcb_get_division(header, &queue, &cache, loop))
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "shmcb_init_memory, " "internal error");
- shmcb_set_safe_uint(cache.first_pos, 0);
- shmcb_set_safe_uint(cache.pos_count, 0);
- shmcb_set_safe_uint(queue.first_pos, 0);
- shmcb_set_safe_uint(queue.pos_count, 0);
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving shmcb_init_memory()");
- return TRUE;
-}
-
-static BOOL shmcb_store_session(
- server_rec *s, void *shm_segment, UCHAR *id,
- int idlen, SSL_SESSION * pSession,
- time_t timeout)
-{
- SHMCBHeader *header;
- SHMCBQueue queue;
- SHMCBCache cache;
- unsigned char masked_index;
- unsigned char encoded[SSL_SESSION_MAX_DER];
- unsigned char *ptr_encoded;
- unsigned int len_encoded;
- time_t expiry_time;
- unsigned char *session_id = SSL_SESSION_get_session_id(pSession);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "inside shmcb_store_session");
-
- /* Get the header structure, which division this session will fall into etc. */
- shmcb_get_header(shm_segment, &header);
- masked_index = session_id[0] & header->division_mask;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "session_id[0]=%u, masked index=%u",
- session_id[0], masked_index);
- if (!shmcb_get_division(header, &queue, &cache, (unsigned int)masked_index)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shmcb_store_session internal error");
- return FALSE;
- }
-
- /* Serialise the session, work out how much we're dealing
- * with. NB: This check could be removed if we're not paranoid
- * or we find some assurance that it will never be necessary. */
- len_encoded = i2d_SSL_SESSION(pSession, NULL);
- if (len_encoded > SSL_SESSION_MAX_DER) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "session is too big (%u bytes)", len_encoded);
- return FALSE;
- }
- ptr_encoded = encoded;
- len_encoded = i2d_SSL_SESSION(pSession, &ptr_encoded);
- expiry_time = timeout;
- if (!shmcb_insert_encoded_session(s, &queue, &cache, encoded,
- len_encoded, session_id,
- expiry_time)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "can't store a session!");
- return FALSE;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving shmcb_store successfully");
- header->num_stores++;
- return TRUE;
-}
-
-static SSL_SESSION *shmcb_retrieve_session(
- server_rec *s, void *shm_segment,
- UCHAR *id, int idlen)
-{
- SHMCBHeader *header;
- SHMCBQueue queue;
- SHMCBCache cache;
- unsigned char masked_index;
- SSL_SESSION *pSession;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "inside shmcb_retrieve_session");
- if (idlen < 2) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "unusably short session_id provided "
- "(%u bytes)", idlen);
- return FALSE;
- }
-
- /* Get the header structure, which division this session lookup
- * will come from etc. */
- shmcb_get_header(shm_segment, &header);
- masked_index = id[0] & header->division_mask;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "id[0]=%u, masked index=%u", id[0], masked_index);
- if (!shmcb_get_division(header, &queue, &cache, (unsigned int) masked_index)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shmcb_retrieve_session internal error");
- header->num_retrieves_miss++;
- return FALSE;
- }
-
- /* Get the session corresponding to the session_id or NULL if it
- * doesn't exist (or is flagged as "removed"). */
- pSession = shmcb_lookup_session_id(s, &queue, &cache, id, idlen);
- if (pSession)
- header->num_retrieves_hit++;
- else
- header->num_retrieves_miss++;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving shmcb_retrieve_session");
- return pSession;
-}
-
-static BOOL shmcb_remove_session(
- server_rec *s, void *shm_segment,
- UCHAR *id, int idlen)
-{
- SHMCBHeader *header;
- SHMCBQueue queue;
- SHMCBCache cache;
- unsigned char masked_index;
- BOOL res;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "inside shmcb_remove_session");
- if (id == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "remove called with NULL session_id!");
- return FALSE;
- }
-
- /* Get the header structure, which division this session remove
- * will happen in etc. */
- shmcb_get_header(shm_segment, &header);
- masked_index = id[0] & header->division_mask;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "id[0]=%u, masked index=%u", id[0], masked_index);
- if (!shmcb_get_division(header, &queue, &cache, (unsigned int)masked_index)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "shmcb_remove_session, internal error");
- header->num_removes_miss++;
- return FALSE;
- }
- res = shmcb_remove_session_id(s, &queue, &cache, id, idlen);
- if (res)
- header->num_removes_hit++;
- else
- header->num_removes_miss++;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving shmcb_remove_session");
- return res;
-}
-
-
-/*
-**
-** Weirdo cyclic buffer functions
-**
-*/
-
-/* This gets used in the cyclic "index array" (in the 'Queue's) and
- * in the cyclic 'Cache's too ... you provide the "width" of the
- * cyclic store, the starting position and how far to move (with
- * wrapping if necessary). Basically it's addition modulo buf_size. */
-static unsigned int shmcb_cyclic_increment(
- unsigned int buf_size,
- unsigned int start_pos,
- unsigned int to_add)
-{
- start_pos += to_add;
- while (start_pos >= buf_size)
- start_pos -= buf_size;
- return start_pos;
-}
-
-/* Given two positions in a cyclic buffer, calculate the "distance".
- * This is to cover the case ("non-trivial") where the 'next' offset
- * is to the left of the 'start' offset. NB: This calculates the
- * space inclusive of one end-point but not the other. There is an
- * ambiguous case (which is why we use the <start_pos,offset>
- * coordinate system rather than <start_pos,end_pos> one) when 'start'
- * is the same as 'next'. It could indicate the buffer is full or it
- * can indicate the buffer is empty ... I choose the latter as it's
- * easier and usually necessary to check if the buffer is full anyway
- * before doing incremental logic (which is this useful for), but we
- * definitely need the empty case handled - in fact it's our starting
- * state!! */
-static unsigned int shmcb_cyclic_space(
- unsigned int buf_size,
- unsigned int start_offset,
- unsigned int next_offset)
-{
- /* Is it the trivial case? */
- if (start_offset <= next_offset)
- return (next_offset - start_offset); /* yes */
- else
- return ((buf_size - start_offset) + next_offset); /* no */
-}
-
-/* A "normal-to-cyclic" memcpy ... this takes a linear block of
- * memory and copies it onto a cyclic buffer. The purpose and
- * function of this is pretty obvious, you need to cover the case
- * that the destination (cyclic) buffer has to wrap round. */
-static void shmcb_cyclic_ntoc_memcpy(
- unsigned int buf_size,
- unsigned char *data,
- unsigned int dest_offset,
- unsigned char *src, unsigned int src_len)
-{
- /* Cover the case that src_len > buf_size */
- if (src_len > buf_size)
- src_len = buf_size;
-
- /* Can it be copied all in one go? */
- if (dest_offset + src_len < buf_size)
- /* yes */
- memcpy(data + dest_offset, src, src_len);
- else {
- /* no */
- memcpy(data + dest_offset, src, buf_size - dest_offset);
- memcpy(data, src + buf_size - dest_offset,
- src_len + dest_offset - buf_size);
- }
- return;
-}
-
-/* A "cyclic-to-normal" memcpy ... given the last function, this
- * one's purpose is clear, it copies out of a cyclic buffer handling
- * wrapping. */
-static void shmcb_cyclic_cton_memcpy(
- unsigned int buf_size,
- unsigned char *dest,
- unsigned char *data,
- unsigned int src_offset,
- unsigned int src_len)
-{
- /* Cover the case that src_len > buf_size */
- if (src_len > buf_size)
- src_len = buf_size;
-
- /* Can it be copied all in one go? */
- if (src_offset + src_len < buf_size)
- /* yes */
- memcpy(dest, data + src_offset, src_len);
- else {
- /* no */
- memcpy(dest, data + src_offset, buf_size - src_offset);
- memcpy(dest + buf_size - src_offset, data,
- src_len + src_offset - buf_size);
- }
- return;
-}
-
-/* Here's the cool hack that makes it all work ... by simply
- * making the first collection of bytes *be* our header structure
- * (casting it into the C structure), we have the perfect way to
- * maintain state in a shared-memory session cache from one call
- * (and process) to the next, use the shared memory itself! The
- * original mod_ssl shared-memory session cache uses variables
- * inside the context, but we simply use that for storing the
- * pointer to the shared memory itself. And don't forget, after
- * Apache's initialisation, this "header" is constant/read-only
- * so we can read it outside any locking.
- * <grin> - sometimes I just *love* coding y'know?! */
-static void shmcb_get_header(void *shm_mem, SHMCBHeader **header)
-{
- *header = (SHMCBHeader *)shm_mem;
- return;
-}
-
-/* This is what populates our "interesting" structures. Given a
- * pointer to the header, and an index into the appropriate
- * division (this must have already been masked using the
- * division_mask by the caller!), we can populate the provided
- * SHMCBQueue and SHMCBCache structures with values and
- * pointers to the underlying shared memory. Upon returning
- * (if not FALSE), the caller can meddle with the pointer
- * values and they will map into the shared-memory directly,
- * as such there's no need to "free" or "set" the Queue or
- * Cache values, they were themselves references to the *real*
- * data. */
-static BOOL shmcb_get_division(
- SHMCBHeader *header, SHMCBQueue *queue,
- SHMCBCache *cache, unsigned int idx)
-{
- unsigned char *pQueue;
- unsigned char *pCache;
-
- /* bounds check */
- if (idx > (unsigned int) header->division_mask)
- return FALSE;
-
- /* Locate the blocks of memory storing the corresponding data */
- pQueue = ((unsigned char *) header) + header->division_offset +
- (idx * header->division_size);
- pCache = pQueue + header->queue_size;
-
- /* Populate the structures with appropriate pointers */
- queue->first_pos = (unsigned int *) pQueue;
-
- /* Our structures stay packed, no matter what the system's
- * data-alignment regime is. */
- queue->pos_count = (unsigned int *) (pQueue + sizeof(unsigned int));
- queue->indexes = (SHMCBIndex *) (pQueue + (2 * sizeof(unsigned int)));
- cache->first_pos = (unsigned int *) pCache;
- cache->pos_count = (unsigned int *) (pCache + sizeof(unsigned int));
- cache->data = (unsigned char *) (pCache + (2 * sizeof(unsigned int)));
- queue->header = cache->header = header;
-
- return TRUE;
-}
-
-/* This returns a pointer to the piece of shared memory containing
- * a specified 'Index'. SHMCBIndex, like SHMCBHeader, is a fixed
- * width non-referencing structure of primitive types that can be
- * cast onto the corresponding block of shared memory. Thus, by
- * returning a cast pointer to that section of shared memory, the
- * caller can read and write values to and from the "structure" and
- * they are actually reading and writing the underlying shared
- * memory. */
-static SHMCBIndex *shmcb_get_index(
- const SHMCBQueue *queue, unsigned int idx)
-{
- /* bounds check */
- if (idx > queue->header->index_num)
- return NULL;
-
- /* Return a pointer to the index. NB: I am being horribly pendantic
- * here so as to avoid any potential data-alignment assumptions being
- * placed on the pointer arithmetic by the compiler (sigh). */
- return (SHMCBIndex *)(((unsigned char *) queue->indexes) +
- (idx * sizeof(SHMCBIndex)));
-}
-
-/* This functions rolls expired cache (and index) entries off the front
- * of the cyclic buffers in a division. The function returns the number
- * of expired sessions. */
-static unsigned int shmcb_expire_division(
- server_rec *s, SHMCBQueue *queue, SHMCBCache *cache)
-{
- SHMCBIndex *idx;
- time_t now;
- unsigned int loop, index_num, pos_count, new_pos;
- SHMCBHeader *header;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "entering shmcb_expire_division");
-
- /* We must calculate num and space ourselves based on expiry times. */
- now = time(NULL);
- loop = 0;
- new_pos = shmcb_get_safe_uint(queue->first_pos);
-
- /* Cache useful values */
- header = queue->header;
- index_num = header->index_num;
- pos_count = shmcb_get_safe_uint(queue->pos_count);
- while (loop < pos_count) {
- idx = shmcb_get_index(queue, new_pos);
- if (shmcb_get_safe_time(&(idx->expires)) > now)
- /* it hasn't expired yet, we're done iterating */
- break;
- /* This one should be expired too. Shift to the next entry. */
- loop++;
- new_pos = shmcb_cyclic_increment(index_num, new_pos, 1);
- }
-
- /* Find the new_offset and make the expiries happen. */
- if (loop > 0) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "will be expiring %u sessions", loop);
- /* We calculate the new_offset by "peeking" (or in the
- * case it's the last entry, "sneaking" ;-). */
- if (loop == pos_count) {
- /* We are expiring everything! This is easy to do... */
- shmcb_set_safe_uint(queue->pos_count, 0);
- shmcb_set_safe_uint(cache->pos_count, 0);
- }
- else {
- /* The Queue is easy to adjust */
- shmcb_set_safe_uint(queue->pos_count,
- shmcb_get_safe_uint(queue->pos_count) - loop);
- shmcb_set_safe_uint(queue->first_pos, new_pos);
- /* peek to the start of the next session */
- idx = shmcb_get_index(queue, new_pos);
- /* We can use shmcb_cyclic_space because we've guaranteed
- * we don't fit the ambiguous full/empty case. */
- shmcb_set_safe_uint(cache->pos_count,
- shmcb_get_safe_uint(cache->pos_count) -
- shmcb_cyclic_space(header->cache_data_size,
- shmcb_get_safe_uint(cache->first_pos),
- shmcb_get_safe_uint(&(idx->offset))));
- shmcb_set_safe_uint(cache->first_pos, shmcb_get_safe_uint(&(idx->offset)));
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "we now have %u sessions",
- shmcb_get_safe_uint(queue->pos_count));
- }
- header->num_expiries += loop;
- return loop;
-}
-
-/* Inserts a new encoded session into a queue/cache pair - expiring
- * (early or otherwise) any leading sessions as necessary to ensure
- * there is room. An error return (FALSE) should only happen in the
- * event of surreal values being passed on, or ridiculously small
- * cache sizes. NB: For tracing purposes, this function is also given
- * the server_rec to allow "ssl_log()". */
-static BOOL shmcb_insert_encoded_session(
- server_rec *s, SHMCBQueue * queue,
- SHMCBCache * cache,
- unsigned char *encoded,
- unsigned int encoded_len,
- unsigned char *session_id,
- time_t expiry_time)
-{
- SHMCBHeader *header;
- SHMCBIndex *idx = NULL;
- unsigned int gap, new_pos, loop, new_offset;
- int need;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "entering shmcb_insert_encoded_session, "
- "*queue->pos_count = %u",
- shmcb_get_safe_uint(queue->pos_count));
-
- /* If there's entries to expire, ditch them first thing. */
- shmcb_expire_division(s, queue, cache);
- header = cache->header;
- gap = header->cache_data_size - shmcb_get_safe_uint(cache->pos_count);
- if (gap < encoded_len) {
- new_pos = shmcb_get_safe_uint(queue->first_pos);
- loop = 0;
- need = (int) encoded_len - (int) gap;
- while ((need > 0) && (loop + 1 < shmcb_get_safe_uint(queue->pos_count))) {
- new_pos = shmcb_cyclic_increment(header->index_num, new_pos, 1);
- loop += 1;
- idx = shmcb_get_index(queue, new_pos);
- need = (int) encoded_len - (int) gap -
- shmcb_cyclic_space(header->cache_data_size,
- shmcb_get_safe_uint(cache->first_pos),
- shmcb_get_safe_uint(&(idx->offset)));
- }
- if (loop > 0) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "about to scroll %u sessions from %u",
- loop, shmcb_get_safe_uint(queue->pos_count));
- /* We are removing "loop" items from the cache. */
- shmcb_set_safe_uint(cache->pos_count,
- shmcb_get_safe_uint(cache->pos_count) -
- shmcb_cyclic_space(header->cache_data_size,
- shmcb_get_safe_uint(cache->first_pos),
- shmcb_get_safe_uint(&(idx->offset))));
- shmcb_set_safe_uint(cache->first_pos, shmcb_get_safe_uint(&(idx->offset)));
- shmcb_set_safe_uint(queue->pos_count, shmcb_get_safe_uint(queue->pos_count) - loop);
- shmcb_set_safe_uint(queue->first_pos, new_pos);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "now only have %u sessions",
- shmcb_get_safe_uint(queue->pos_count));
- /* Update the stats!!! */
- header->num_scrolled += loop;
- }
- }
-
- /* probably unecessary checks, but I'll leave them until this code
- * is verified. */
- if (shmcb_get_safe_uint(cache->pos_count) + encoded_len >
- header->cache_data_size) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shmcb_insert_encoded_session internal error");
- return FALSE;
- }
- if (shmcb_get_safe_uint(queue->pos_count) == header->index_num) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shmcb_insert_encoded_session internal error");
- return FALSE;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "we have %u bytes and %u indexes free - enough",
- header->cache_data_size -
- shmcb_get_safe_uint(cache->pos_count), header->index_num -
- shmcb_get_safe_uint(queue->pos_count));
-
-
- /* HERE WE ASSUME THAT THE NEW SESSION SHOULD GO ON THE END! I'M NOT
- * CHECKING WHETHER IT SHOULD BE GENUINELY "INSERTED" SOMEWHERE.
- *
- * We either fix that, or find out at a "higher" (read "mod_ssl")
- * level whether it is possible to have distinct session caches for
- * any attempted tomfoolery to do with different session timeouts.
- * Knowing in advance that we can have a cache-wide constant timeout
- * would make this stuff *MUCH* more efficient. Mind you, it's very
- * efficient right now because I'm ignoring this problem!!!
- */
-
- /* Increment to the first unused byte */
- new_offset = shmcb_cyclic_increment(header->cache_data_size,
- shmcb_get_safe_uint(cache->first_pos),
- shmcb_get_safe_uint(cache->pos_count));
- /* Copy the DER-encoded session into place */
- shmcb_cyclic_ntoc_memcpy(header->cache_data_size, cache->data,
- new_offset, encoded, encoded_len);
- /* Get the new index that this session is stored in. */
- new_pos = shmcb_cyclic_increment(header->index_num,
- shmcb_get_safe_uint(queue->first_pos),
- shmcb_get_safe_uint(queue->pos_count));
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "storing in index %u, at offset %u",
- new_pos, new_offset);
- idx = shmcb_get_index(queue, new_pos);
- if (idx == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shmcb_insert_encoded_session internal error");
- return FALSE;
- }
- shmcb_safe_clear(idx, sizeof(SHMCBIndex));
- shmcb_set_safe_time(&(idx->expires), expiry_time);
- shmcb_set_safe_uint(&(idx->offset), new_offset);
-
- /* idx->removed = (unsigned char)0; */ /* Not needed given the memset above. */
- idx->s_id2 = session_id[1];
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "session_id[0]=%u, idx->s_id2=%u",
- session_id[0], session_id[1]);
-
- /* All that remains is to adjust the cache's and queue's "pos_count"s. */
- shmcb_set_safe_uint(cache->pos_count,
- shmcb_get_safe_uint(cache->pos_count) + encoded_len);
- shmcb_set_safe_uint(queue->pos_count,
- shmcb_get_safe_uint(queue->pos_count) + 1);
-
- /* And just for good debugging measure ... */
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving now with %u bytes in the cache and %u indexes",
- shmcb_get_safe_uint(cache->pos_count),
- shmcb_get_safe_uint(queue->pos_count));
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving shmcb_insert_encoded_session");
- return TRUE;
-}
-
-/* Performs a lookup into a queue/cache pair for a
- * session_id. If found, the session is deserialised
- * and returned, otherwise NULL. */
-static SSL_SESSION *shmcb_lookup_session_id(
- server_rec *s, SHMCBQueue *queue,
- SHMCBCache *cache, UCHAR *id,
- unsigned int idlen)
-{
- unsigned char tempasn[SSL_SESSION_MAX_DER];
- SHMCBIndex *idx;
- SHMCBHeader *header;
- SSL_SESSION *pSession = NULL;
- unsigned int curr_pos, loop, count;
- unsigned char *ptr;
- time_t now;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "entering shmcb_lookup_session_id");
-
- /* If there are entries to expire, ditch them first thing. */
- shmcb_expire_division(s, queue, cache);
- now = time(NULL);
- curr_pos = shmcb_get_safe_uint(queue->first_pos);
- count = shmcb_get_safe_uint(queue->pos_count);
- header = queue->header;
- for (loop = 0; loop < count; loop++) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "loop=%u, count=%u, curr_pos=%u",
- loop, count, curr_pos);
- idx = shmcb_get_index(queue, curr_pos);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "idx->s_id2=%u, id[1]=%u, offset=%u",
- idx->s_id2, id[1], shmcb_get_safe_uint(&(idx->offset)));
- /* Only look into the session further if;
- * (a) the second byte of the session_id matches,
- * (b) the "removed" flag isn't set,
- * (c) the session hasn't expired yet.
- * We do (c) like this so that it saves us having to
- * do natural expiries ... naturally expired sessions
- * scroll off the front anyway when the cache is full and
- * "rotating", the only real issue that remains is the
- * removal or disabling of forcibly killed sessions. */
- if ((idx->s_id2 == id[1]) && !idx->removed &&
- (shmcb_get_safe_time(&(idx->expires)) > now)) {
- unsigned int session_id_length;
- unsigned char *session_id;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "at index %u, found possible session match",
- curr_pos);
- shmcb_cyclic_cton_memcpy(header->cache_data_size,
- tempasn, cache->data,
- shmcb_get_safe_uint(&(idx->offset)),
- SSL_SESSION_MAX_DER);
- ptr = tempasn;
- pSession = d2i_SSL_SESSION(NULL, &ptr, SSL_SESSION_MAX_DER);
- session_id_length = SSL_SESSION_get_session_id_length(pSession);
- session_id = SSL_SESSION_get_session_id(pSession);
-
- if (pSession == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "scach2_lookup_session_id internal error");
- return NULL;
- }
- if ((session_id_length == idlen) &&
- (memcmp(session_id, id, idlen) == 0)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "a match!");
- return pSession;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "not a match");
- SSL_SESSION_free(pSession);
- pSession = NULL;
- }
- curr_pos = shmcb_cyclic_increment(header->index_num, curr_pos, 1);
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "no matching sessions were found");
- return NULL;
-}
-
-static BOOL shmcb_remove_session_id(
- server_rec *s, SHMCBQueue *queue,
- SHMCBCache *cache, UCHAR *id, unsigned int idlen)
-{
- unsigned char tempasn[SSL_SESSION_MAX_DER];
- SSL_SESSION *pSession = NULL;
- SHMCBIndex *idx;
- SHMCBHeader *header;
- unsigned int curr_pos, loop, count;
- unsigned char *ptr;
- BOOL to_return = FALSE;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "entering shmcb_remove_session_id");
-
- /* If there's entries to expire, ditch them first thing. */
- /* shmcb_expire_division(s, queue, cache); */
-
- /* Regarding the above ... hmmm ... I know my expiry code is slightly
- * "faster" than all this remove stuff ... but if the higher level
- * code calls a "remove" operation (and this *only* seems to happen
- * when it has spotted an expired session before we had a chance to)
- * then it should get credit for a remove (stats-wise). Also, in the
- * off-chance that the server *requests* a renegotiate and wants to
- * wipe the session clean we should give that priority over our own
- * routine expiry handling. So I've moved the expiry check to *after*
- * this general remove stuff. */
- curr_pos = shmcb_get_safe_uint(queue->first_pos);
- count = shmcb_get_safe_uint(queue->pos_count);
- header = cache->header;
- for (loop = 0; loop < count; loop++) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "loop=%u, count=%u, curr_pos=%u",
- loop, count, curr_pos);
- idx = shmcb_get_index(queue, curr_pos);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "idx->s_id2=%u, id[1]=%u", idx->s_id2,
- id[1]);
- /* Only look into the session further if the second byte of the
- * session_id matches. */
- if (idx->s_id2 == id[1]) {
- unsigned int session_id_length;
- unsigned char *session_id;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "at index %u, found possible "
- "session match", curr_pos);
- shmcb_cyclic_cton_memcpy(header->cache_data_size,
- tempasn, cache->data,
- shmcb_get_safe_uint(&(idx->offset)),
- SSL_SESSION_MAX_DER);
- ptr = tempasn;
- pSession = d2i_SSL_SESSION(NULL, &ptr, SSL_SESSION_MAX_DER);
- if (pSession == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
- "shmcb_remove_session_id, internal error");
- goto end;
- }
- session_id_length = SSL_SESSION_get_session_id_length(pSession);
- session_id = SSL_SESSION_get_session_id(pSession);
-
- if ((session_id_length == idlen)
- && (memcmp(id, session_id, idlen) == 0)) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "a match!");
- /* Scrub out this session "quietly" */
- idx->removed = (unsigned char) 1;
- SSL_SESSION_free(pSession);
- to_return = TRUE;
- goto end;
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "not a match");
- SSL_SESSION_free(pSession);
- pSession = NULL;
- }
- curr_pos = shmcb_cyclic_increment(header->index_num, curr_pos, 1);
- }
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "no matching sessions were found");
-
- /* If there's entries to expire, ditch them now. */
- shmcb_expire_division(s, queue, cache);
-end:
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
- "leaving shmcb_remove_session_id");
- return to_return;
-}
diff --git a/modules/ssl/ssl_toolkit_compat.h b/modules/ssl/ssl_toolkit_compat.h
deleted file mode 100644
index 367e12e60d..0000000000
--- a/modules/ssl/ssl_toolkit_compat.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SSL_TOOLKIT_COMPAT_H
-#define SSL_TOOLKIT_COMPAT_H
-
-/*
- * this header file provides a compatiblity layer
- * between OpenSSL and RSA sslc
- */
-
-#ifdef HAVE_OPENSSL
-
-/* OpenSSL headers */
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#include <openssl/x509.h>
-#include <openssl/pem.h>
-#include <openssl/crypto.h>
-#include <openssl/evp.h>
-#include <openssl/rand.h>
-#include <openssl/x509v3.h>
-/* Avoid tripping over an engine build installed globally and detected
- * when the user points at an explicit non-engine flavor of OpenSSL
- */
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
-#include <openssl/engine.h>
-#endif
-
-/*
- * rsa sslc uses incomplete types for most structures
- * so we macroize for OpenSSL those which cannot be dereferenced
- * using the same sames as the sslc functions
- */
-
-#define EVP_PKEY_key_type(k) (EVP_PKEY_type(k->type))
-
-#define X509_NAME_get_entries(xs) (xs->entries)
-#define X509_REVOKED_get_serialNumber(xs) (xs->serialNumber)
-
-#define X509_get_signature_algorithm(xs) (xs->cert_info->signature->algorithm)
-#define X509_get_key_algorithm(xs) (xs->cert_info->key->algor->algorithm)
-
-#define X509_NAME_ENTRY_get_data_ptr(xs) (xs->value->data)
-#define X509_NAME_ENTRY_get_data_len(xs) (xs->value->length)
-
-#define SSL_CTX_get_extra_certs(ctx) (ctx->extra_certs)
-#define SSL_CTX_set_extra_certs(ctx,value) {ctx->extra_certs = value;}
-
-#define SSL_CIPHER_get_name(s) (s->name)
-#define SSL_CIPHER_get_valid(s) (s->valid)
-
-#define SSL_SESSION_get_session_id(s) (s->session_id)
-#define SSL_SESSION_get_session_id_length(s) (s->session_id_length)
-
-/*
- * Support for retrieving/overriding states
- */
-#ifndef SSL_get_state
-#define SSL_get_state(ssl) SSL_state(ssl)
-#endif
-
-#define SSL_set_state(ssl,val) (ssl)->state = val
-
-#define MODSSL_BIO_CB_ARG_TYPE const char
-#define MODSSL_CRYPTO_CB_ARG_TYPE const char
-#if (OPENSSL_VERSION_NUMBER < 0x00907000)
-#define MODSSL_INFO_CB_ARG_TYPE SSL*
-#else
-#define MODSSL_INFO_CB_ARG_TYPE const SSL*
-#endif
-#define MODSSL_CLIENT_CERT_CB_ARG_TYPE X509
-#define MODSSL_PCHAR_CAST
-
-#define modssl_X509_verify_cert X509_verify_cert
-
-typedef int (modssl_read_bio_cb_fn)(char*,int,int,void*);
-
-#if (OPENSSL_VERSION_NUMBER < 0x00904000)
-#define modssl_PEM_read_bio_X509(b, x, cb, arg) PEM_read_bio_X509(b, x, cb)
-#else
-#define modssl_PEM_read_bio_X509(b, x, cb, arg) PEM_read_bio_X509(b, x, cb, arg)
-#endif
-
-#define modssl_PEM_X509_INFO_read_bio PEM_X509_INFO_read_bio
-
-#define modssl_PEM_read_bio_PrivateKey PEM_read_bio_PrivateKey
-
-#define modssl_set_cipher_list SSL_set_cipher_list
-
-#define modssl_free OPENSSL_free
-
-#define EVP_PKEY_reference_inc(pkey) \
- CRYPTO_add(&((pkey)->references), +1, CRYPTO_LOCK_X509_PKEY)
-
-#define X509_reference_inc(cert) \
- CRYPTO_add(&((cert)->references), +1, CRYPTO_LOCK_X509)
-
-#define HAVE_SSL_RAND_EGD /* since 9.5.1 */
-
-#define HAVE_SSL_X509V3_EXT_d2i
-
-#elif defined(HAVE_SSLC)
-
-#include <bio.h>
-#include <ssl.h>
-#include <err.h>
-#include <x509.h>
-#include <pem.h>
-#include <evp.h>
-#include <objects.h>
-#include <sslc.h>
-
-/* sslc does not support this function, OpenSSL has since 9.5.1 */
-#define RAND_status() 1
-
-/* sslc names this function a bit differently */
-#define CRYPTO_num_locks() CRYPTO_get_num_locks()
-
-#ifndef STACK_OF
-#define STACK_OF(type) STACK
-#endif
-
-#define MODSSL_BIO_CB_ARG_TYPE char
-#define MODSSL_CRYPTO_CB_ARG_TYPE char
-#define MODSSL_INFO_CB_ARG_TYPE SSL*
-#define MODSSL_CLIENT_CERT_CB_ARG_TYPE void
-#define MODSSL_PCHAR_CAST (char *)
-
-typedef int (modssl_read_bio_cb_fn)(char*,int,int);
-
-#define modssl_X509_verify_cert(c) X509_verify_cert(c, NULL)
-
-#define modssl_PEM_read_bio_X509(b, x, cb, arg) \
- PEM_read_bio_X509(b, x, cb)
-
-#define modssl_PEM_X509_INFO_read_bio(b, x, cb, arg)\
- PEM_X509_INFO_read_bio(b, x, cb)
-
-#define modssl_PEM_read_bio_PrivateKey(b, k, cb, arg) \
- PEM_read_bio_PrivateKey(b, k, cb)
-
-#ifndef HAVE_SSL_SET_STATE
-#define SSL_set_state(ssl, state) /* XXX: should throw an error */
-#endif
-
-#define modssl_set_cipher_list(ssl, l) \
- SSL_set_cipher_list(ssl, (char *)l)
-
-#define modssl_free free
-
-#ifndef PEM_F_DEF_CALLBACK
-#define PEM_F_DEF_CALLBACK PEM_F_DEF_CB
-#endif
-
-#if SSLC_VERSION_NUMBER < 0x2000
-
-#define X509_STORE_CTX_set_depth(st, d)
-#define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate)
-#define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate)
-#define X509_CRL_get_REVOKED(x) ((x)->crl->revoked)
-#define X509_REVOKED_get_serialNumber(xs) (xs->serialNumber)
-
-#define modssl_set_verify(ssl, verify, cb) \
- SSL_set_verify(ssl, verify)
-
-#else /* SSLC_VERSION_NUMBER >= 0x2000 */
-
-#define CRYPTO_malloc_init R_malloc_init
-
-#define EVP_cleanup()
-
-#endif /* SSLC_VERSION_NUMBER >= 0x2000 */
-
-typedef void (*modssl_popfree_fn)(char *data);
-
-#define sk_SSL_CIPHER_dup sk_dup
-#define sk_SSL_CIPHER_find(st, data) sk_find(st, (void *)data)
-#define sk_SSL_CIPHER_free sk_free
-#define sk_SSL_CIPHER_num sk_num
-#define sk_SSL_CIPHER_value (SSL_CIPHER *)sk_value
-#define sk_X509_num sk_num
-#define sk_X509_push sk_push
-#define sk_X509_pop_free(st, free) sk_pop_free((STACK*)(st), (modssl_popfree_fn)(free))
-#define sk_X509_value (X509 *)sk_value
-#define sk_X509_INFO_free sk_free
-#define sk_X509_INFO_pop_free(st, free) sk_pop_free((STACK*)(st), (modssl_popfree_fn)(free))
-#define sk_X509_INFO_num sk_num
-#define sk_X509_INFO_new_null sk_new_null
-#define sk_X509_INFO_value (X509_INFO *)sk_value
-#define sk_X509_NAME_find(st, data) sk_find(st, (void *)data)
-#define sk_X509_NAME_free sk_free
-#define sk_X509_NAME_new sk_new
-#define sk_X509_NAME_num sk_num
-#define sk_X509_NAME_push(st, data) sk_push(st, (void *)data)
-#define sk_X509_NAME_value (X509_NAME *)sk_value
-#define sk_X509_NAME_ENTRY_num sk_num
-#define sk_X509_NAME_ENTRY_value (X509_NAME_ENTRY *)sk_value
-#define sk_X509_NAME_set_cmp_func sk_set_cmp_func
-#define sk_X509_REVOKED_num sk_num
-#define sk_X509_REVOKED_value (X509_REVOKED *)sk_value
-
-#else /* ! HAVE_OPENSSL && ! HAVE_SSLC */
-
-#error "Unrecognized SSL Toolkit!"
-
-#endif /* ! HAVE_OPENSSL && ! HAVE_SSLC */
-
-#ifndef modssl_set_verify
-#define modssl_set_verify(ssl, verify, cb) \
- SSL_set_verify(ssl, verify, cb)
-#endif
-
-#ifndef SSL_SESS_CACHE_NO_INTERNAL
-#define SSL_SESS_CACHE_NO_INTERNAL SSL_SESS_CACHE_NO_INTERNAL_LOOKUP
-#endif
-
-#endif /* SSL_TOOLKIT_COMPAT_H */
diff --git a/modules/ssl/ssl_util.c b/modules/ssl/ssl_util.c
deleted file mode 100644
index e675d3929c..0000000000
--- a/modules/ssl/ssl_util.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_util.c
- * Utility Functions
- */
- /* ``Every day of my life
- I am forced to add another
- name to the list of people
- who piss me off!''
- -- Calvin */
-
-#include "ssl_private.h"
-#include "ap_mpm.h"
-#include "apr_thread_mutex.h"
-
-/* _________________________________________________________________
-**
-** Utility Functions
-** _________________________________________________________________
-*/
-
-char *ssl_util_vhostid(apr_pool_t *p, server_rec *s)
-{
- char *id;
- SSLSrvConfigRec *sc;
- char *host;
- apr_port_t port;
-
- host = s->server_hostname;
- if (s->port != 0)
- port = s->port;
- else {
- sc = mySrvConfig(s);
- if (sc->enabled == TRUE)
- port = DEFAULT_HTTPS_PORT;
- else
- port = DEFAULT_HTTP_PORT;
- }
- id = apr_psprintf(p, "%s:%lu", host, (unsigned long)port);
- return id;
-}
-
-apr_file_t *ssl_util_ppopen(server_rec *s, apr_pool_t *p, const char *cmd,
- const char * const *argv)
-{
- apr_procattr_t *procattr;
- apr_proc_t *proc;
-
- if (apr_procattr_create(&procattr, p) != APR_SUCCESS)
- return NULL;
- if (apr_procattr_io_set(procattr, APR_FULL_BLOCK, APR_FULL_BLOCK,
- APR_FULL_BLOCK) != APR_SUCCESS)
- return NULL;
- if (apr_procattr_dir_set(procattr,
- ap_make_dirstr_parent(p, cmd)) != APR_SUCCESS)
- return NULL;
- if (apr_procattr_cmdtype_set(procattr, APR_PROGRAM) != APR_SUCCESS)
- return NULL;
- if ((proc = (apr_proc_t *)apr_pcalloc(p, sizeof(apr_proc_t))) == NULL)
- return NULL;
- if (apr_proc_create(proc, cmd, argv, NULL, procattr, p) != APR_SUCCESS)
- return NULL;
- return proc->out;
-}
-
-void ssl_util_ppclose(server_rec *s, apr_pool_t *p, apr_file_t *fp)
-{
- apr_file_close(fp);
- return;
-}
-
-/*
- * Run a filter program and read the first line of its stdout output
- */
-char *ssl_util_readfilter(server_rec *s, apr_pool_t *p, const char *cmd,
- const char * const *argv)
-{
- static char buf[MAX_STRING_LEN];
- apr_file_t *fp;
- apr_size_t nbytes = 1;
- char c;
- int k;
-
- if ((fp = ssl_util_ppopen(s, p, cmd, argv)) == NULL)
- return NULL;
- /* XXX: we are reading 1 byte at a time here */
- for (k = 0; apr_file_read(fp, &c, &nbytes) == APR_SUCCESS
- && nbytes == 1 && (k < MAX_STRING_LEN-1) ; ) {
- if (c == '\n' || c == '\r')
- break;
- buf[k++] = c;
- }
- buf[k] = NUL;
- ssl_util_ppclose(s, p, fp);
-
- return buf;
-}
-
-BOOL ssl_util_path_check(ssl_pathcheck_t pcm, const char *path, apr_pool_t *p)
-{
- apr_finfo_t finfo;
-
- if (path == NULL)
- return FALSE;
- if (pcm & SSL_PCM_EXISTS && apr_stat(&finfo, path,
- APR_FINFO_TYPE|APR_FINFO_SIZE, p) != 0)
- return FALSE;
- if (pcm & SSL_PCM_ISREG && finfo.filetype != APR_REG)
- return FALSE;
- if (pcm & SSL_PCM_ISDIR && finfo.filetype != APR_DIR)
- return FALSE;
- if (pcm & SSL_PCM_ISNONZERO && finfo.size <= 0)
- return FALSE;
- return TRUE;
-}
-
-ssl_algo_t ssl_util_algotypeof(X509 *pCert, EVP_PKEY *pKey)
-{
- ssl_algo_t t;
-
- t = SSL_ALGO_UNKNOWN;
- if (pCert != NULL)
- pKey = X509_get_pubkey(pCert);
- if (pKey != NULL) {
- switch (EVP_PKEY_key_type(pKey)) {
- case EVP_PKEY_RSA:
- t = SSL_ALGO_RSA;
- break;
- case EVP_PKEY_DSA:
- t = SSL_ALGO_DSA;
- break;
- default:
- break;
- }
- }
- return t;
-}
-
-char *ssl_util_algotypestr(ssl_algo_t t)
-{
- char *cp;
-
- cp = "UNKNOWN";
- switch (t) {
- case SSL_ALGO_RSA:
- cp = "RSA";
- break;
- case SSL_ALGO_DSA:
- cp = "DSA";
- break;
- default:
- break;
- }
- return cp;
-}
-
-/*
- * certain key and cert data needs to survive restarts,
- * which are stored in the user data table of s->process->pool.
- * to prevent "leaking" of this data, we use malloc/free
- * rather than apr_palloc and these wrappers to help make sure
- * we do not leak the malloc-ed data.
- */
-unsigned char *ssl_asn1_table_set(apr_hash_t *table,
- const char *key,
- long int length)
-{
- apr_ssize_t klen = strlen(key);
- ssl_asn1_t *asn1 = apr_hash_get(table, key, klen);
-
- /*
- * if a value for this key already exists,
- * reuse as much of the already malloc-ed data
- * as possible.
- */
- if (asn1) {
- if (asn1->nData != length) {
- free(asn1->cpData); /* XXX: realloc? */
- asn1->cpData = NULL;
- }
- }
- else {
- asn1 = malloc(sizeof(*asn1));
- asn1->source_mtime = 0; /* used as a note for encrypted private keys */
- asn1->cpData = NULL;
- }
-
- asn1->nData = length;
- if (!asn1->cpData) {
- asn1->cpData = malloc(length);
- }
-
- apr_hash_set(table, key, klen, asn1);
-
- return asn1->cpData; /* caller will assign a value to this */
-}
-
-ssl_asn1_t *ssl_asn1_table_get(apr_hash_t *table,
- const char *key)
-{
- return (ssl_asn1_t *)apr_hash_get(table, key, APR_HASH_KEY_STRING);
-}
-
-void ssl_asn1_table_unset(apr_hash_t *table,
- const char *key)
-{
- apr_ssize_t klen = strlen(key);
- ssl_asn1_t *asn1 = apr_hash_get(table, key, klen);
-
- if (!asn1) {
- return;
- }
-
- if (asn1->cpData) {
- free(asn1->cpData);
- }
- free(asn1);
-
- apr_hash_set(table, key, klen, NULL);
-}
-
-static const char *ssl_asn1_key_types[] = {"RSA", "DSA"};
-
-const char *ssl_asn1_keystr(int keytype)
-{
- if (keytype >= SSL_AIDX_MAX) {
- return NULL;
- }
-
- return ssl_asn1_key_types[keytype];
-}
-
-const char *ssl_asn1_table_keyfmt(apr_pool_t *p,
- const char *id,
- int keytype)
-{
- const char *keystr = ssl_asn1_keystr(keytype);
-
- return apr_pstrcat(p, id, ":", keystr, NULL);
-}
-
-
-#if APR_HAS_THREADS
-/*
- * To ensure thread-safetyness in OpenSSL - work in progress
- */
-
-static apr_thread_mutex_t **lock_cs;
-static int lock_num_locks;
-
-#ifdef HAVE_SSLC
-#if SSLC_VERSION_NUMBER >= 0x2000
-static int ssl_util_thr_lock(int mode, int type,
- char *file, int line)
-#else
-static void ssl_util_thr_lock(int mode, int type,
- char *file, int line)
-#endif
-#else
-static void ssl_util_thr_lock(int mode, int type,
- const char *file, int line)
-#endif
-{
- if (type < lock_num_locks) {
- if (mode & CRYPTO_LOCK) {
- apr_thread_mutex_lock(lock_cs[type]);
- }
- else {
- apr_thread_mutex_unlock(lock_cs[type]);
- }
-#ifdef HAVE_SSLC
-#if SSLC_VERSION_NUMBER >= 0x2000
- return 1;
- }
- else {
- return -1;
-#endif
-#endif
- }
-}
-
-static unsigned long ssl_util_thr_id(void)
-{
- /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread
- * id is a structure twice that big. Use the TCB pointer instead as a
- * unique unsigned long.
- */
-#ifdef __MVS__
- struct PSA {
- char unmapped[540];
- unsigned long PSATOLD;
- } *psaptr = 0;
-
- return psaptr->PSATOLD;
-#else
- return (unsigned long) apr_os_thread_current();
-#endif
-}
-
-static apr_status_t ssl_util_thread_cleanup(void *data)
-{
- CRYPTO_set_locking_callback(NULL);
- CRYPTO_set_id_callback(NULL);
-
- /* Let the registered mutex cleanups do their own thing
- */
- return APR_SUCCESS;
-}
-
-void ssl_util_thread_setup(apr_pool_t *p)
-{
- int i;
-
- lock_num_locks = CRYPTO_num_locks();
- lock_cs = apr_palloc(p, lock_num_locks * sizeof(*lock_cs));
-
- for (i = 0; i < lock_num_locks; i++) {
- apr_thread_mutex_create(&(lock_cs[i]), APR_THREAD_MUTEX_DEFAULT, p);
- }
-
- CRYPTO_set_id_callback(ssl_util_thr_id);
-
- CRYPTO_set_locking_callback(ssl_util_thr_lock);
-
- apr_pool_cleanup_register(p, NULL, ssl_util_thread_cleanup,
- apr_pool_cleanup_null);
-}
-#endif
diff --git a/modules/ssl/ssl_util_ssl.c b/modules/ssl/ssl_util_ssl.c
deleted file mode 100644
index b5d36ba2a5..0000000000
--- a/modules/ssl/ssl_util_ssl.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_util_ssl.c
- * Additional Utility Functions for OpenSSL
- */
-
-#include "ssl_private.h"
-
-/* _________________________________________________________________
-**
-** Additional High-Level Functions for OpenSSL
-** _________________________________________________________________
-*/
-
-/* we initialize this index at startup time
- * and never write to it at request time,
- * so this static is thread safe.
- * also note that OpenSSL increments at static variable when
- * SSL_get_ex_new_index() is called, so we _must_ do this at startup.
- */
-static int SSL_app_data2_idx = -1;
-
-void SSL_init_app_data2_idx(void)
-{
- int i;
-
- if (SSL_app_data2_idx > -1) {
- return;
- }
-
- /* we _do_ need to call this twice */
- for (i=0; i<=1; i++) {
- SSL_app_data2_idx =
- SSL_get_ex_new_index(0,
- "Second Application Data for SSL",
- NULL, NULL, NULL);
- }
-}
-
-void *SSL_get_app_data2(SSL *ssl)
-{
- return (void *)SSL_get_ex_data(ssl, SSL_app_data2_idx);
-}
-
-void SSL_set_app_data2(SSL *ssl, void *arg)
-{
- SSL_set_ex_data(ssl, SSL_app_data2_idx, (char *)arg);
- return;
-}
-
-/* _________________________________________________________________
-**
-** High-Level Certificate / Private Key Loading
-** _________________________________________________________________
-*/
-
-X509 *SSL_read_X509(char* filename, X509 **x509, modssl_read_bio_cb_fn *cb)
-{
- X509 *rc;
- BIO *bioS;
- BIO *bioF;
-
- /* 1. try PEM (= DER+Base64+headers) */
- if ((bioS=BIO_new_file(filename, "r")) == NULL)
- return NULL;
- rc = modssl_PEM_read_bio_X509 (bioS, x509, cb, NULL);
- BIO_free(bioS);
-
- if (rc == NULL) {
- /* 2. try DER+Base64 */
- if ((bioS=BIO_new_file(filename, "r")) == NULL)
- return NULL;
-
- if ((bioF = BIO_new(BIO_f_base64())) == NULL) {
- BIO_free(bioS);
- return NULL;
- }
- bioS = BIO_push(bioF, bioS);
- rc = d2i_X509_bio(bioS, NULL);
- BIO_free_all(bioS);
-
- if (rc == NULL) {
- /* 3. try plain DER */
- if ((bioS=BIO_new_file(filename, "r")) == NULL)
- return NULL;
- rc = d2i_X509_bio(bioS, NULL);
- BIO_free(bioS);
- }
- }
- if (rc != NULL && x509 != NULL) {
- if (*x509 != NULL)
- X509_free(*x509);
- *x509 = rc;
- }
- return rc;
-}
-
-#if SSL_LIBRARY_VERSION <= 0x00904100
-static EVP_PKEY *d2i_PrivateKey_bio(BIO *bio, EVP_PKEY **key)
-{
- return ((EVP_PKEY *)ASN1_d2i_bio(
- (char *(*)())EVP_PKEY_new,
- (char *(*)())d2i_PrivateKey,
- (bio), (unsigned char **)(key)));
-}
-#endif
-
-EVP_PKEY *SSL_read_PrivateKey(char* filename, EVP_PKEY **key, modssl_read_bio_cb_fn *cb, void *s)
-{
- EVP_PKEY *rc;
- BIO *bioS;
- BIO *bioF;
-
- /* 1. try PEM (= DER+Base64+headers) */
- if ((bioS=BIO_new_file(filename, "r")) == NULL)
- return NULL;
- rc = modssl_PEM_read_bio_PrivateKey(bioS, key, cb, s);
- BIO_free(bioS);
-
- if (rc == NULL) {
- /* 2. try DER+Base64 */
- if ((bioS = BIO_new_file(filename, "r")) == NULL)
- return NULL;
-
- if ((bioF = BIO_new(BIO_f_base64())) == NULL) {
- BIO_free(bioS);
- return NULL;
- }
- bioS = BIO_push(bioF, bioS);
- rc = d2i_PrivateKey_bio(bioS, NULL);
- BIO_free_all(bioS);
-
- if (rc == NULL) {
- /* 3. try plain DER */
- if ((bioS = BIO_new_file(filename, "r")) == NULL)
- return NULL;
- rc = d2i_PrivateKey_bio(bioS, NULL);
- BIO_free(bioS);
- }
- }
- if (rc != NULL && key != NULL) {
- if (*key != NULL)
- EVP_PKEY_free(*key);
- *key = rc;
- }
- return rc;
-}
-
-/* _________________________________________________________________
-**
-** Smart shutdown
-** _________________________________________________________________
-*/
-
-int SSL_smart_shutdown(SSL *ssl)
-{
- int i;
- int rc;
-
- /*
- * Repeat the calls, because SSL_shutdown internally dispatches through a
- * little state machine. Usually only one or two interation should be
- * needed, so we restrict the total number of restrictions in order to
- * avoid process hangs in case the client played bad with the socket
- * connection and OpenSSL cannot recognize it.
- */
- rc = 0;
- for (i = 0; i < 4 /* max 2x pending + 2x data = 4 */; i++) {
- if ((rc = SSL_shutdown(ssl)))
- break;
- }
- return rc;
-}
-
-/* _________________________________________________________________
-**
-** Certificate Revocation List (CRL) Storage
-** _________________________________________________________________
-*/
-
-X509_STORE *SSL_X509_STORE_create(char *cpFile, char *cpPath)
-{
- X509_STORE *pStore;
- X509_LOOKUP *pLookup;
-
- if (cpFile == NULL && cpPath == NULL)
- return NULL;
- if ((pStore = X509_STORE_new()) == NULL)
- return NULL;
- if (cpFile != NULL) {
- pLookup = X509_STORE_add_lookup(pStore, X509_LOOKUP_file());
- if (pLookup == NULL) {
- X509_STORE_free(pStore);
- return NULL;
- }
- X509_LOOKUP_load_file(pLookup, cpFile, X509_FILETYPE_PEM);
- }
- if (cpPath != NULL) {
- pLookup = X509_STORE_add_lookup(pStore, X509_LOOKUP_hash_dir());
- if (pLookup == NULL) {
- X509_STORE_free(pStore);
- return NULL;
- }
- X509_LOOKUP_add_dir(pLookup, cpPath, X509_FILETYPE_PEM);
- }
- return pStore;
-}
-
-int SSL_X509_STORE_lookup(X509_STORE *pStore, int nType,
- X509_NAME *pName, X509_OBJECT *pObj)
-{
- X509_STORE_CTX pStoreCtx;
- int rc;
-
- X509_STORE_CTX_init(&pStoreCtx, pStore, NULL, NULL);
- rc = X509_STORE_get_by_subject(&pStoreCtx, nType, pName, pObj);
- X509_STORE_CTX_cleanup(&pStoreCtx);
- return rc;
-}
-
-/* _________________________________________________________________
-**
-** Cipher Suite Spec String Creation
-** _________________________________________________________________
-*/
-
-char *SSL_make_ciphersuite(apr_pool_t *p, SSL *ssl)
-{
- STACK_OF(SSL_CIPHER) *sk;
- SSL_CIPHER *c;
- int i;
- int l;
- char *cpCipherSuite;
- char *cp;
-
- if (ssl == NULL)
- return "";
- if ((sk = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl)) == NULL)
- return "";
- l = 0;
- for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
- c = sk_SSL_CIPHER_value(sk, i);
- l += strlen(SSL_CIPHER_get_name(c))+2+1;
- }
- if (l == 0)
- return "";
- cpCipherSuite = (char *)apr_palloc(p, l+1);
- cp = cpCipherSuite;
- for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
- c = sk_SSL_CIPHER_value(sk, i);
- l = strlen(SSL_CIPHER_get_name(c));
- memcpy(cp, SSL_CIPHER_get_name(c), l);
- cp += l;
- *cp++ = '/';
- *cp++ = (SSL_CIPHER_get_valid(c) == 1 ? '1' : '0');
- *cp++ = ':';
- }
- *(cp-1) = NUL;
- return cpCipherSuite;
-}
-
-/* _________________________________________________________________
-**
-** Certificate Checks
-** _________________________________________________________________
-*/
-
-/* check whether cert contains extended key usage with a SGC tag */
-BOOL SSL_X509_isSGC(X509 *cert)
-{
-#ifdef HAVE_SSL_X509V3_EXT_d2i
- X509_EXTENSION *ext;
- int ext_nid;
- STACK *sk;
- BOOL is_sgc;
- int idx;
- int i;
-
- is_sgc = FALSE;
- idx = X509_get_ext_by_NID(cert, NID_ext_key_usage, -1);
- if (idx >= 0) {
- ext = X509_get_ext(cert, idx);
- if ((sk = (STACK *)X509V3_EXT_d2i(ext)) != NULL) {
- for (i = 0; i < sk_num(sk); i++) {
- ext_nid = OBJ_obj2nid((ASN1_OBJECT *)sk_value(sk, i));
- if (ext_nid == NID_ms_sgc || ext_nid == NID_ns_sgc) {
- is_sgc = TRUE;
- break;
- }
- }
- }
- }
- return is_sgc;
-#else
- return FALSE;
-#endif
-}
-
-/* retrieve basic constraints ingredients */
-BOOL SSL_X509_getBC(X509 *cert, int *ca, int *pathlen)
-{
-#ifdef HAVE_SSL_X509V3_EXT_d2i
- X509_EXTENSION *ext;
- BASIC_CONSTRAINTS *bc;
- int idx;
- BIGNUM *bn = NULL;
- char *cp;
-
- if ((idx = X509_get_ext_by_NID(cert, NID_basic_constraints, -1)) < 0)
- return FALSE;
- ext = X509_get_ext(cert, idx);
- if (ext == NULL)
- return FALSE;
- if ((bc = (BASIC_CONSTRAINTS *)X509V3_EXT_d2i(ext)) == NULL)
- return FALSE;
- *ca = bc->ca;
- *pathlen = -1 /* unlimited */;
- if (bc->pathlen != NULL) {
- if ((bn = ASN1_INTEGER_to_BN(bc->pathlen, NULL)) == NULL)
- return FALSE;
- if ((cp = BN_bn2dec(bn)) == NULL)
- return FALSE;
- *pathlen = atoi(cp);
- free(cp);
- BN_free(bn);
- }
- BASIC_CONSTRAINTS_free(bc);
- return TRUE;
-#else
- return FALSE;
-#endif
-}
-
-/* retrieve subject CommonName of certificate */
-BOOL SSL_X509_getCN(apr_pool_t *p, X509 *xs, char **cppCN)
-{
- X509_NAME *xsn;
- X509_NAME_ENTRY *xsne;
- int i, nid;
- unsigned char *data_ptr;
- int data_len;
-
- xsn = X509_get_subject_name(xs);
- for (i = 0; i < sk_X509_NAME_ENTRY_num((STACK_OF(X509_NAME_ENTRY) *)
- X509_NAME_get_entries(xsn)); i++) {
- xsne = sk_X509_NAME_ENTRY_value((STACK_OF(X509_NAME_ENTRY) *)
- X509_NAME_get_entries(xsn), i);
- nid = OBJ_obj2nid((ASN1_OBJECT *)X509_NAME_ENTRY_get_object(xsne));
- if (nid == NID_commonName) {
- data_ptr = X509_NAME_ENTRY_get_data_ptr(xsne);
- data_len = X509_NAME_ENTRY_get_data_len(xsne);
- *cppCN = apr_palloc(p, data_len+1);
- apr_cpystrn(*cppCN, (char *)data_ptr, data_len+1);
- (*cppCN)[data_len] = NUL;
- ap_xlate_proto_from_ascii(*cppCN, data_len);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/* _________________________________________________________________
-**
-** Low-Level CA Certificate Loading
-** _________________________________________________________________
-*/
-
-BOOL SSL_X509_INFO_load_file(apr_pool_t *ptemp,
- STACK_OF(X509_INFO) *sk,
- const char *filename)
-{
- BIO *in;
-
- if (!(in = BIO_new(BIO_s_file()))) {
- return FALSE;
- }
-
- if (BIO_read_filename(in, MODSSL_PCHAR_CAST filename) <= 0) {
- BIO_free(in);
- return FALSE;
- }
-
- ERR_clear_error();
-
- modssl_PEM_X509_INFO_read_bio(in, sk, NULL, NULL);
-
- BIO_free(in);
-
- return TRUE;
-}
-
-BOOL SSL_X509_INFO_load_path(apr_pool_t *ptemp,
- STACK_OF(X509_INFO) *sk,
- const char *pathname)
-{
- /* XXX: this dir read code is exactly the same as that in
- * ssl_engine_init.c, only the call to handle the fullname is different,
- * should fold the duplication.
- */
- apr_dir_t *dir;
- apr_finfo_t dirent;
- apr_int32_t finfo_flags = APR_FINFO_TYPE|APR_FINFO_NAME;
- const char *fullname;
- BOOL ok = FALSE;
-
- if (apr_dir_open(&dir, pathname, ptemp) != APR_SUCCESS) {
- return FALSE;
- }
-
- while ((apr_dir_read(&dirent, finfo_flags, dir)) == APR_SUCCESS) {
- if (dirent.filetype == APR_DIR) {
- continue; /* don't try to load directories */
- }
-
- fullname = apr_pstrcat(ptemp,
- pathname, "/", dirent.name,
- NULL);
-
- if (SSL_X509_INFO_load_file(ptemp, sk, fullname)) {
- ok = TRUE;
- }
- }
-
- apr_dir_close(dir);
-
- return ok;
-}
-
-/* _________________________________________________________________
-**
-** Extra Server Certificate Chain Support
-** _________________________________________________________________
-*/
-
-/*
- * Read a file that optionally contains the server certificate in PEM
- * format, possibly followed by a sequence of CA certificates that
- * should be sent to the peer in the SSL Certificate message.
- */
-int SSL_CTX_use_certificate_chain(
- SSL_CTX *ctx, char *file, int skipfirst, modssl_read_bio_cb_fn *cb)
-{
- BIO *bio;
- X509 *x509;
- unsigned long err;
- int n;
- STACK *extra_certs;
-
- if ((bio = BIO_new(BIO_s_file_internal())) == NULL)
- return -1;
- if (BIO_read_filename(bio, file) <= 0) {
- BIO_free(bio);
- return -1;
- }
- /* optionally skip a leading server certificate */
- if (skipfirst) {
- if ((x509 = modssl_PEM_read_bio_X509(bio, NULL, cb, NULL)) == NULL) {
- BIO_free(bio);
- return -1;
- }
- X509_free(x509);
- }
- /* free a perhaps already configured extra chain */
- extra_certs=SSL_CTX_get_extra_certs(ctx);
- if (extra_certs != NULL) {
- sk_X509_pop_free((STACK_OF(X509) *)extra_certs, X509_free);
- SSL_CTX_set_extra_certs(ctx,NULL);
- }
- /* create new extra chain by loading the certs */
- n = 0;
- while ((x509 = modssl_PEM_read_bio_X509(bio, NULL, cb, NULL)) != NULL) {
- if (!SSL_CTX_add_extra_chain_cert(ctx, x509)) {
- X509_free(x509);
- BIO_free(bio);
- return -1;
- }
- n++;
- }
- /* Make sure that only the error is just an EOF */
- if ((err = ERR_peek_error()) > 0) {
- if (!( ERR_GET_LIB(err) == ERR_LIB_PEM
- && ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) {
- BIO_free(bio);
- return -1;
- }
- while (ERR_get_error() > 0) ;
- }
- BIO_free(bio);
- return n;
-}
-
-/* _________________________________________________________________
-**
-** Session Stuff
-** _________________________________________________________________
-*/
-
-char *SSL_SESSION_id2sz(unsigned char *id, int idlen,
- char *str, int strsize)
-{
- char *cp;
- int n;
-
- cp = str;
- for (n = 0; n < idlen && n < SSL_MAX_SSL_SESSION_ID_LENGTH; n++) {
- apr_snprintf(cp, strsize - (cp-str), "%02X", id[n]);
- cp += 2;
- }
- *cp = NUL;
- return str;
-}
-
-/* sslc+OpenSSL compat */
-
-int modssl_session_get_time(SSL_SESSION *session)
-{
-#ifdef OPENSSL_VERSION_NUMBER
- return SSL_SESSION_get_time(session);
-#else /* assume sslc */
- CRYPTO_TIME_T ct;
- SSL_SESSION_get_time(session, &ct);
- return CRYPTO_time_to_int(&ct);
-#endif
-}
-
-#ifndef SSLC_VERSION_NUMBER
-#define SSLC_VERSION_NUMBER 0x0000
-#endif
-
-DH *modssl_dh_configure(unsigned char *p, int plen,
- unsigned char *g, int glen)
-{
- DH *dh;
-
- if (!(dh = DH_new())) {
- return NULL;
- }
-
-#if defined(OPENSSL_VERSION_NUMBER) || (SSLC_VERSION_NUMBER < 0x2000)
- dh->p = BN_bin2bn(p, plen, NULL);
- dh->g = BN_bin2bn(g, glen, NULL);
- if (!(dh->p && dh->g)) {
- DH_free(dh);
- return NULL;
- }
-#else
- R_EITEMS_add(dh->data, PK_TYPE_DH, PK_DH_P, 0, p, plen, R_EITEMS_PF_COPY);
- R_EITEMS_add(dh->data, PK_TYPE_DH, PK_DH_G, 0, g, glen, R_EITEMS_PF_COPY);
-#endif
-
- return dh;
-}
diff --git a/modules/ssl/ssl_util_ssl.h b/modules/ssl/ssl_util_ssl.h
deleted file mode 100644
index 9256f65c83..0000000000
--- a/modules/ssl/ssl_util_ssl.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_util_ssl.h
- * Additional Utility Functions for OpenSSL
- */
-
-#ifndef __SSL_UTIL_SSL_H__
-#define __SSL_UTIL_SSL_H__
-
-/*
- * Determine SSL library version number
- */
-#ifdef OPENSSL_VERSION_NUMBER
-#define SSL_LIBRARY_VERSION OPENSSL_VERSION_NUMBER
-#define SSL_LIBRARY_NAME "OpenSSL"
-#define SSL_LIBRARY_TEXT OPENSSL_VERSION_TEXT
-#elif !defined(SSL_LIBRARY_VERSION)
-#define SSL_LIBRARY_VERSION 0x0000
-#define SSL_LIBRARY_NAME "OtherSSL"
-#define SSL_LIBRARY_TEXT "OtherSSL 0.0.0 00 XXX 0000"
-#endif
-
-/*
- * Maximum length of a DER encoded session.
- * FIXME: There is no define in OpenSSL, but OpenSSL uses 1024*10,
- * so this value should be ok. Although we have no warm feeling.
- */
-#define SSL_SESSION_MAX_DER 1024*10
-
-/* max length for SSL_SESSION_id2sz */
-#define SSL_SESSION_ID_STRING_LEN \
- ((SSL_MAX_SSL_SESSION_ID_LENGTH + 1) * 2)
-
-/*
- * Additional Functions
- */
-void SSL_init_app_data2_idx(void);
-void *SSL_get_app_data2(SSL *);
-void SSL_set_app_data2(SSL *, void *);
-X509 *SSL_read_X509(char *, X509 **, modssl_read_bio_cb_fn *);
-EVP_PKEY *SSL_read_PrivateKey(char *, EVP_PKEY **, modssl_read_bio_cb_fn *, void *);
-int SSL_smart_shutdown(SSL *ssl);
-X509_STORE *SSL_X509_STORE_create(char *, char *);
-int SSL_X509_STORE_lookup(X509_STORE *, int, X509_NAME *, X509_OBJECT *);
-char *SSL_make_ciphersuite(apr_pool_t *, SSL *);
-BOOL SSL_X509_isSGC(X509 *);
-BOOL SSL_X509_getBC(X509 *, int *, int *);
-BOOL SSL_X509_getCN(apr_pool_t *, X509 *, char **);
-BOOL SSL_X509_INFO_load_file(apr_pool_t *, STACK_OF(X509_INFO) *, const char *);
-BOOL SSL_X509_INFO_load_path(apr_pool_t *, STACK_OF(X509_INFO) *, const char *);
-int SSL_CTX_use_certificate_chain(SSL_CTX *, char *, int, modssl_read_bio_cb_fn *);
-char *SSL_SESSION_id2sz(unsigned char *, int, char *, int);
-
-/* util functions for OpenSSL+sslc compat */
-int modssl_session_get_time(SSL_SESSION *session);
-
-DH *modssl_dh_configure(unsigned char *p, int plen,
- unsigned char *g, int glen);
-
-#endif /* __SSL_UTIL_SSL_H__ */
diff --git a/modules/test/.cvsignore b/modules/test/.cvsignore
deleted file mode 100644
index aeabff36e6..0000000000
--- a/modules/test/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/test/.indent.pro b/modules/test/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/modules/test/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/test/Makefile.in b/modules/test/Makefile.in
deleted file mode 100644
index 7c5c149d85..0000000000
--- a/modules/test/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/test/README b/modules/test/README
deleted file mode 100644
index f122368a7f..0000000000
--- a/modules/test/README
+++ /dev/null
@@ -1 +0,0 @@
-test modules have moved to httpd-test/perl-framework/c-modules
diff --git a/modules/test/config.m4 b/modules/test/config.m4
deleted file mode 100644
index 337d095723..0000000000
--- a/modules/test/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-
-APACHE_MODPATH_INIT(test)
-
-APACHE_MODULE(optional_hook_export, example optional hook exporter, , , no)
-APACHE_MODULE(optional_hook_import, example optional hook importer, , , no)
-APACHE_MODULE(optional_fn_import, example optional function importer, , , no)
-APACHE_MODULE(optional_fn_export, example optional function exporter, , , no)
-APACHE_MODULE(bucketeer, buckets manipulation filter, , , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/test/mod_bucketeer.c b/modules/test/mod_bucketeer.c
deleted file mode 100644
index cbcd00cc1c..0000000000
--- a/modules/test/mod_bucketeer.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * mod_bucketeer.c: split buckets whenever we find a control-char
- *
- * Written by Ian Holsman
- *
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "apr_strings.h"
-#include "apr_general.h"
-#include "util_filter.h"
-#include "apr_buckets.h"
-#include "http_request.h"
-#include "http_protocol.h"
-
-static const char bucketeerFilterName[] = "BUCKETEER";
-module AP_MODULE_DECLARE_DATA bucketeer_module;
-
-typedef struct bucketeer_filter_config_t
-{
- char bucketdelimiter;
- char passdelimiter;
- char flushdelimiter;
-} bucketeer_filter_config_t;
-
-
-static void *create_bucketeer_server_config(apr_pool_t *p, server_rec *s)
-{
- bucketeer_filter_config_t *c = apr_pcalloc(p, sizeof *c);
-
- c->bucketdelimiter = 0x02; /* ^B */
- c->passdelimiter = 0x10; /* ^P */
- c->flushdelimiter = 0x06; /* ^F */
-
- return c;
-}
-
-typedef struct bucketeer_ctx_t
-{
- apr_bucket_brigade *bb;
-} bucketeer_ctx_t;
-
-static apr_status_t bucketeer_out_filter(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- apr_bucket *e;
- request_rec *r = f->r;
- bucketeer_ctx_t *ctx = f->ctx;
- bucketeer_filter_config_t *c;
-
- c = ap_get_module_config(r->server->module_config, &bucketeer_module);
-
- /* If have a context, it means we've done this before successfully. */
- if (!ctx) {
- if (!r->content_type || strncmp(r->content_type, "text/", 5)) {
- ap_remove_output_filter(f);
- return ap_pass_brigade(f->next, bb);
- }
-
- /* We're cool with filtering this. */
- ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
- ctx->bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- apr_table_unset(f->r->headers_out, "Content-Length");
- }
-
- for (e = APR_BRIGADE_FIRST(bb);
- e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- const char *data;
- apr_size_t len, i, lastpos;
-
- if (APR_BUCKET_IS_EOS(e)) {
- APR_BUCKET_REMOVE(e);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
-
- /* Okay, we've seen the EOS.
- * Time to pass it along down the chain.
- */
- return ap_pass_brigade(f->next, ctx->bb);
- }
-
- if (APR_BUCKET_IS_FLUSH(e)) {
- /*
- * Ignore flush buckets for the moment..
- * we decide what to stream
- */
- continue;
- }
-
- if (APR_BUCKET_IS_METADATA(e)) {
- /* metadata bucket */
- apr_bucket *cpy;
- apr_bucket_copy(e, &cpy);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, cpy);
- continue;
- }
-
- /* read */
- apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
-
- if (len > 0) {
- lastpos = 0;
- for (i = 0; i < len; i++) {
- if (data[i] == c->flushdelimiter ||
- data[i] == c->bucketdelimiter ||
- data[i] == c->passdelimiter) {
- apr_bucket *p;
- if (i - lastpos > 0) {
- p = apr_bucket_pool_create(apr_pmemdup(f->r->pool,
- &data[lastpos],
- i - lastpos),
- i - lastpos,
- f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, p);
- }
- lastpos = i + 1;
- if (data[i] == c->flushdelimiter) {
- p = apr_bucket_flush_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->bb, p);
- }
- if (data[i] == c->flushdelimiter ||
- data[i] == c->passdelimiter) {
- ap_pass_brigade(f->next, ctx->bb);
- /* apr_brigade_cleanup(ctx->bb);*/
- }
- }
- }
- /* XXX: really should append this to the next 'real' bucket */
- if (lastpos < i) {
- apr_bucket *p;
- p = apr_bucket_pool_create(apr_pmemdup(f->r->pool,
- &data[lastpos],
- i - lastpos),
- i - lastpos,
- f->r->pool,
- f->c->bucket_alloc);
- lastpos = i;
- APR_BRIGADE_INSERT_TAIL(ctx->bb, p);
- }
- }
- }
-
- return APR_SUCCESS;
-}
-
-static void register_hooks(apr_pool_t * p)
-{
- ap_register_output_filter(bucketeerFilterName, bucketeer_out_filter,
- NULL, AP_FTYPE_RESOURCE-1);
-}
-
-static const command_rec bucketeer_filter_cmds[] = {
- {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA bucketeer_module = {
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- create_bucketeer_server_config,
- NULL,
- bucketeer_filter_cmds,
- register_hooks
-};
diff --git a/modules/test/mod_bucketeer.dsp b/modules/test/mod_bucketeer.dsp
deleted file mode 100644
index 39338d8b4b..0000000000
--- a/modules/test/mod_bucketeer.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_bucketeer" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_bucketeer - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mod_bucketeer.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mod_bucketeer.mak" CFG="mod_bucketeer - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mod_bucketeer - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_bucketeer - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mod_bucketeer - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_bucketeer_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/mod_bucketeer.so" /base:@..\..\os\win32\BaseAddr.ref,mod_bucketeer.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Release/mod_bucketeer.so" /base:@..\..\os\win32\BaseAddr.ref,mod_bucketeer.so /opt:ref
-
-!ELSEIF "$(CFG)" == "mod_bucketeer - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_bucketeer_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_bucketeer.so" /base:@..\..\os\win32\BaseAddr.ref,mod_bucketeer.so
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"Debug/mod_bucketeer.so" /base:@..\..\os\win32\BaseAddr.ref,mod_bucketeer.so
-
-!ENDIF
-
-# Begin Target
-
-# Name "mod_bucketeer - Win32 Release"
-# Name "mod_bucketeer - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_bucketeer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_bucketeer.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "mod_bucketeer - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_bucketeer.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_bucketeer.so "bucketeer_module for Apache" ../../include/ap_release.h > .\mod_bucketeer.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "mod_bucketeer - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_bucketeer.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk mod_bucketeer.so "bucketeer_module for Apache" ../../include/ap_release.h > .\mod_bucketeer.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/test/mod_optional_fn_export.c b/modules/test/mod_optional_fn_export.c
deleted file mode 100644
index d7bdd6111d..0000000000
--- a/modules/test/mod_optional_fn_export.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "mod_optional_fn_export.h"
-
-/* The alert will note a strange mirror-image style resemblance to
- * mod_optional_hook_import.c. Yes, I _did_ mean import. Think about it.
- */
-
-static int TestOptionalFn(const char *szStr)
-{
- ap_log_error(APLOG_MARK,APLOG_ERR,OK,NULL,
- "Optional function test said: %s",szStr);
-
- return OK;
-}
-
-static void ExportRegisterHooks(apr_pool_t *p)
-{
- APR_REGISTER_OPTIONAL_FN(TestOptionalFn);
-}
-
-module AP_MODULE_DECLARE_DATA optional_fn_export_module=
-{
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- ExportRegisterHooks
-};
diff --git a/modules/test/mod_optional_fn_export.h b/modules/test/mod_optional_fn_export.h
deleted file mode 100644
index c6a22cbb49..0000000000
--- a/modules/test/mod_optional_fn_export.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_optional.h"
-
-APR_DECLARE_OPTIONAL_FN(int,TestOptionalFn,(const char *));
diff --git a/modules/test/mod_optional_fn_import.c b/modules/test/mod_optional_fn_import.c
deleted file mode 100644
index cc7de63c48..0000000000
--- a/modules/test/mod_optional_fn_import.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "mod_optional_fn_export.h"
-#include "http_protocol.h"
-
-/* The alert will note a strange mirror-image style resemblance to
- * mod_optional_hook_export.c. Yes, I _did_ mean export. Think about it.
- */
-
-static APR_OPTIONAL_FN_TYPE(TestOptionalFn) *pfn;
-
-static int ImportLogTransaction(request_rec *r)
-{
- if(pfn)
- return pfn(r->the_request);
- return DECLINED;
-}
-
-static void ImportFnRetrieve(void)
-{
- pfn=APR_RETRIEVE_OPTIONAL_FN(TestOptionalFn);
-}
-
-static void ImportRegisterHooks(apr_pool_t *p)
-{
- ap_hook_log_transaction(ImportLogTransaction,NULL,NULL,APR_HOOK_MIDDLE);
- ap_hook_optional_fn_retrieve(ImportFnRetrieve,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA optional_fn_import_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- ImportRegisterHooks
-};
diff --git a/modules/test/mod_optional_hook_export.c b/modules/test/mod_optional_hook_export.c
deleted file mode 100644
index fbe8362fc1..0000000000
--- a/modules/test/mod_optional_hook_export.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "mod_optional_hook_export.h"
-#include "http_protocol.h"
-
-AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(int,optional_hook_test,(const char *szStr),
- (szStr),OK,DECLINED)
-
-static int ExportLogTransaction(request_rec *r)
-{
- return ap_run_optional_hook_test(r->the_request);
-}
-
-static void ExportRegisterHooks(apr_pool_t *p)
-{
- ap_hook_log_transaction(ExportLogTransaction,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA optional_hook_export_module =
-{
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- ExportRegisterHooks
-};
diff --git a/modules/test/mod_optional_hook_export.h b/modules/test/mod_optional_hook_export.h
deleted file mode 100644
index 8a7fef5e8c..0000000000
--- a/modules/test/mod_optional_hook_export.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOD_OPTIONAL_HOOK_EXPORT_H
-#define MOD_OPTOPNAL_HOOK_EXPORT_H
-
-#include "ap_config.h"
-
-AP_DECLARE_HOOK(int,optional_hook_test,(const char *))
-
-#endif /* def MOD_OPTIONAL_HOOK_EXPORT_H */
diff --git a/modules/test/mod_optional_hook_import.c b/modules/test/mod_optional_hook_import.c
deleted file mode 100644
index b72ea493f4..0000000000
--- a/modules/test/mod_optional_hook_import.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "mod_optional_hook_export.h"
-
-static int ImportOptionalHookTestHook(const char *szStr)
-{
- ap_log_error(APLOG_MARK,APLOG_ERR,OK,NULL,"Optional hook test said: %s",
- szStr);
-
- return OK;
-}
-
-static void ImportRegisterHooks(apr_pool_t *p)
-{
- AP_OPTIONAL_HOOK(optional_hook_test,ImportOptionalHookTestHook,NULL,
- NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA optional_hook_import_module=
-{
- STANDARD20_MODULE_STUFF,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- ImportRegisterHooks
-};
diff --git a/os/.cvsignore b/os/.cvsignore
deleted file mode 100644
index bd5fe06963..0000000000
--- a/os/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/os/.indent.pro b/os/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/os/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/os/Makefile.in b/os/Makefile.in
deleted file mode 100644
index 9b35d49198..0000000000
--- a/os/Makefile.in
+++ /dev/null
@@ -1,4 +0,0 @@
-
-SUBDIRS = $(OS_DIR)
-
-include $(top_builddir)/build/rules.mk
diff --git a/os/beos/.cvsignore b/os/beos/.cvsignore
deleted file mode 100644
index bbc8ba00d1..0000000000
--- a/os/beos/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/os/beos/Makefile.in b/os/beos/Makefile.in
deleted file mode 100644
index 66272ecc46..0000000000
--- a/os/beos/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libos.la
-LTLIBRARY_SOURCES = os.c beosd.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/os/beos/beosd.c b/os/beos/beosd.c
deleted file mode 100644
index 03ce825889..0000000000
--- a/os/beos/beosd.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <unistd.h>
-#include "httpd.h"
-#include "http_config.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "beosd.h"
-#include "mpm_common.h"
-
-beosd_config_rec beosd_config;
-
-/* Set group privileges.
- *
- * Note that until we get the multi-user situation sorted on beos,
- * this is just a no-op to allow common configuration files!
- */
-
-#if B_BEOS_VERSION < 0x0460
-static int set_group_privs(void)
-{
- /* no-op */
- return 0;
-}
-#endif
-
-
-int beosd_setup_child(void)
-{
- /* TODO: revisit the whole issue of users/groups for BeOS as
- * R5 and below doesn't really have much concept of them.
- */
-
- return 0;
-}
-
-
-AP_DECLARE(const char *) beosd_set_user(cmd_parms *cmd,
- void *dummy, const char *arg)
-{
- /* no-op */
- return NULL;
-}
-
-AP_DECLARE(const char *) beosd_set_group(cmd_parms *cmd,
- void *dummy, const char *arg)
-{
- /* no-op */
- return NULL;
-}
-
-void beosd_pre_config(void)
-{
- /* Until the multi-user situation on BeOS is fixed,
- simply have a no-op here to allow for common conf files
- */
-}
-
-AP_DECLARE(apr_status_t) beosd_accept(void **accepted, ap_listen_rec *lr,
- apr_pool_t *ptrans)
-{
- apr_socket_t *csd;
- apr_status_t status;
- int sockdes;
-
- status = apr_socket_accept(&csd, lr->sd, ptrans);
- if (status == APR_SUCCESS) {
- *accepted = csd;
- apr_os_sock_get(&sockdes, csd);
- if (sockdes >= FD_SETSIZE) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
- "new file descriptor %d is too large; you probably need "
- "to rebuild Apache with a larger FD_SETSIZE "
- "(currently %d)",
- sockdes, FD_SETSIZE);
- apr_socket_close(csd);
- return APR_EINTR;
- }
- return status;
- }
-
- if (APR_STATUS_IS_EINTR(status)) {
- return status;
- }
- /* Our old behaviour here was to continue after accept()
- * errors. But this leads us into lots of troubles
- * because most of the errors are quite fatal. For
- * example, EMFILE can be caused by slow descriptor
- * leaks (say in a 3rd party module, or libc). It's
- * foolish for us to continue after an EMFILE. We also
- * seem to tickle kernel bugs on some platforms which
- * lead to never-ending loops here. So it seems best
- * to just exit in most cases.
- */
- switch (status) {
-#ifdef EPROTO
- /* EPROTO on certain older kernels really means
- * ECONNABORTED, so we need to ignore it for them.
- * See discussion in new-httpd archives nh.9701
- * search for EPROTO.
- *
- * Also see nh.9603, search for EPROTO:
- * There is potentially a bug in Solaris 2.x x<6,
- * and other boxes that implement tcp sockets in
- * userland (i.e. on top of STREAMS). On these
- * systems, EPROTO can actually result in a fatal
- * loop. See PR#981 for example. It's hard to
- * handle both uses of EPROTO.
- */
- case EPROTO:
-#endif
-#ifdef ECONNABORTED
- case ECONNABORTED:
-#endif
-#ifdef ETIMEDOUT
- case ETIMEDOUT:
-#endif
-#ifdef EHOSTUNREACH
- case EHOSTUNREACH:
-#endif
-#ifdef ENETUNREACH
- case ENETUNREACH:
-#endif
- break;
-#ifdef ENETDOWN
- case ENETDOWN:
- /*
- * When the network layer has been shut down, there
- * is not much use in simply exiting: the parent
- * would simply re-create us (and we'd fail again).
- * Use the CHILDFATAL code to tear the server down.
- * @@@ Martin's idea for possible improvement:
- * A different approach would be to define
- * a new APEXIT_NETDOWN exit code, the reception
- * of which would make the parent shutdown all
- * children, then idle-loop until it detected that
- * the network is up again, and restart the children.
- * Ben Hyde noted that temporary ENETDOWN situations
- * occur in mobile IP.
- */
- ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
- "apr_socket_accept: giving up.");
- return APR_EGENERAL;
-#endif /*ENETDOWN*/
-
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, status, ap_server_conf,
- "apr_socket_accept: (client socket)");
- return APR_EGENERAL;
- }
- return status;
-}
diff --git a/os/beos/beosd.h b/os/beos/beosd.h
deleted file mode 100644
index 4d4695735a..0000000000
--- a/os/beos/beosd.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef BEOSD_H
-#define BEOSD_H
-
-#include "httpd.h"
-#include "ap_listen.h"
-/* common stuff that beos MPMs will want */
-
-/* Default user name and group name. These may be specified as numbers by
- * placing a # before a number */
-
-#ifndef DEFAULT_USER
-#define DEFAULT_USER "#-1"
-#endif
-#ifndef DEFAULT_GROUP
-#define DEFAULT_GROUP "#"
-#endif
-
-typedef struct {
- char *user_name;
- uid_t user_id;
- gid_t group_id;
-} beosd_config_rec;
-extern beosd_config_rec beosd_config;
-
-void beosd_detach(void);
-int beosd_setup_child(void);
-void beosd_pre_config(void);
-AP_DECLARE(const char *) beosd_set_user (cmd_parms *cmd, void *dummy,
- const char *arg);
-AP_DECLARE(const char *) beosd_set_group(cmd_parms *cmd, void *dummy,
- const char *arg);
-AP_DECLARE(apr_status_t) beosd_accept(void **accepted, ap_listen_rec *lr,
- apr_pool_t *ptrans);
-
-#define beosd_killpg(x, y) (kill (-(x), (y)))
-#define ap_os_killpg(x, y) (kill (-(x), (y)))
-
-#define BEOS_DAEMON_COMMANDS \
-AP_INIT_TAKE1("User", beosd_set_user, NULL, RSRC_CONF, \
- "Effective user id for this server (NO-OP)"), \
-AP_INIT_TAKE1("Group", beosd_set_group, NULL, RSRC_CONF, \
- "Effective group id for this server (NO-OP)")
-
-#endif /* BEOSD_H */
diff --git a/os/beos/config.m4 b/os/beos/config.m4
deleted file mode 100644
index 4fe95b7509..0000000000
--- a/os/beos/config.m4
+++ /dev/null
@@ -1,3 +0,0 @@
-if test "$OS" = "beos" ; then
- APR_ADDTO(CFLAGS,-DBEOS)
-fi
diff --git a/os/beos/os.c b/os/beos/os.c
deleted file mode 100644
index 6095370519..0000000000
--- a/os/beos/os.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This file will include OS specific functions which are not inlineable.
- * Any inlineable functions should be defined in os-inline.c instead.
- */
-
-#include "ap_config.h"
-#include "os.h"
-#include "httpd.h"
-#include "apr_thread_proc.h"
-#include "ap_mpm.h" /* needed for definition of
- * ap_os_create_privileged_process */
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, apr_pool_t *p)
-{
- return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/os/beos/os.h b/os/beos/os.h
deleted file mode 100644
index 66c8767620..0000000000
--- a/os/beos/os.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#include "ap_config.h"
-
-#ifndef PLATFORM
-# ifdef BONE_VERSION
-# define PLATFORM "BeOS BONE"
-# else
-# define PLATFORM "BeOS R5"
-# endif
-#endif
-
-#endif /* !APACHE_OS_H */
diff --git a/os/bs2000/.cvsignore b/os/bs2000/.cvsignore
deleted file mode 100644
index bd5fe06963..0000000000
--- a/os/bs2000/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/os/bs2000/ebcdic.c b/os/bs2000/ebcdic.c
deleted file mode 100644
index 6a675ebfb2..0000000000
--- a/os/bs2000/ebcdic.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-#if APR_CHARSET_EBCDIC
-#include "ebcdic.h"
-/*
- Initial Port for Apache-1.3 by <Martin.Kraemer Mch.SNI.De>
-
-"BS2000 OSD" is a POSIX on a main frame. It is made by Siemens AG, Germany.
-Within the POSIX subsystem, the same character set was chosen as in
-"native BS2000", namely EBCDIC.
-
-EBCDIC Table. (Yes, in EBCDIC, the letters 'a'..'z' are not contiguous!)
-This apr_table_t is bijective, i.e. there are no ambigous or duplicate characters
-00 00 01 02 03 85 09 86 7f 87 8d 8e 0b 0c 0d 0e 0f *................*
-10 10 11 12 13 8f 0a 08 97 18 19 9c 9d 1c 1d 1e 1f *................*
-20 80 81 82 83 84 92 17 1b 88 89 8a 8b 8c 05 06 07 *................*
-30 90 91 16 93 94 95 96 04 98 99 9a 9b 14 15 9e 1a *................*
-40 20 a0 e2 e4 e0 e1 e3 e5 e7 f1 60 2e 3c 28 2b 7c * .........`.<(+|*
-50 26 e9 ea eb e8 ed ee ef ec df 21 24 2a 29 3b 9f *&.........!$*);.*
-60 2d 2f c2 c4 c0 c1 c3 c5 c7 d1 5e 2c 25 5f 3e 3f *-/........^,%_>?*
-70 f8 c9 ca cb c8 cd ce cf cc a8 3a 23 40 27 3d 22 *..........:#@'="*
-80 d8 61 62 63 64 65 66 67 68 69 ab bb f0 fd fe b1 *.abcdefghi......*
-90 b0 6a 6b 6c 6d 6e 6f 70 71 72 aa ba e6 b8 c6 a4 *.jklmnopqr......*
-a0 b5 af 73 74 75 76 77 78 79 7a a1 bf d0 dd de ae *..stuvwxyz......*
-b0 a2 a3 a5 b7 a9 a7 b6 bc bd be ac 5b 5c 5d b4 d7 *...........[\]..*
-c0 f9 41 42 43 44 45 46 47 48 49 ad f4 f6 f2 f3 f5 *.ABCDEFGHI......*
-d0 a6 4a 4b 4c 4d 4e 4f 50 51 52 b9 fb fc db fa ff *.JKLMNOPQR......*
-e0 d9 f7 53 54 55 56 57 58 59 5a b2 d4 d6 d2 d3 d5 *..STUVWXYZ......*
-f0 30 31 32 33 34 35 36 37 38 39 b3 7b dc 7d da 7e *0123456789.{.}.~*
-*/
-
-/* The bijective ebcdic-to-ascii table: */
-const unsigned char os_toascii_strictly[256] = {
-/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
- 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
-/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
-/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
-/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
-/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
- 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
-/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
-/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
- 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
-/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
- 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
-/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
-/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
-/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
-/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
- 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
-/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
-/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
-/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
-/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/
-};
-
-/* This apr_table_t is (almost) identical to the previous one. The only difference
- * is the fact that it maps every EBCDIC *except 0x0A* to its ASCII
- * equivalent. The reason for this apr_table_t is simple: Throughout the
- * server, protocol strings are used in the form
- * "Content-Type: text/plain\015\012". Now all the characters in the string
- * are stored as EBCDIC, only the semantics of \012 is completely
- * different from LF (look it up in the apr_table_t above). \015 happens to be
- * mapped to \015 anyway, so there's no special case for it.
- *
- * In THIS table, EBCDIC-\012 is mapped to ASCII-\012.
- * This apr_table_t is therefore used wherever an EBCDIC to ASCII conversion is
- * needed in the server.
- */
-/* ebcdic-to-ascii with \012 mapped to ASCII-\n */
-const unsigned char os_toascii[256] = {
-/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
- 0x87, 0x8d, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
-/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
-/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
-/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
-/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
- 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
-/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
-/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
- 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
-/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
- 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
-/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
-/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
-/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
-/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
- 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
-/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
-/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
-/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
-/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/
-};
-
-/* The ascii-to-ebcdic table:
-00 00 01 02 03 37 2d 2e 2f 16 05 15 0b 0c 0d 0e 0f *................*
-10 10 11 12 13 3c 3d 32 26 18 19 3f 27 1c 1d 1e 1f *................*
-20 40 5a 7f 7b 5b 6c 50 7d 4d 5d 5c 4e 6b 60 4b 61 * !"#$%&'()*+,-./
-30 f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 7a 5e 4c 7e 6e 6f *0123456789:;<=>?*
-40 7c c1 c2 c3 c4 c5 c6 c7 c8 c9 d1 d2 d3 d4 d5 d6 *@ABCDEFGHIJKLMNO*
-50 d7 d8 d9 e2 e3 e4 e5 e6 e7 e8 e9 bb bc bd 6a 6d *PQRSTUVWXYZ[\]^_*
-60 4a 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 *`abcdefghijklmno*
-70 97 98 99 a2 a3 a4 a5 a6 a7 a8 a9 fb 4f fd ff 07 *pqrstuvwxyz{|}~.*
-80 20 21 22 23 24 04 06 08 28 29 2a 2b 2c 09 0a 14 *................*
-90 30 31 25 33 34 35 36 17 38 39 3a 3b 1a 1b 3e 5f *................*
-a0 41 aa b0 b1 9f b2 d0 b5 79 b4 9a 8a ba ca af a1 *................*
-b0 90 8f ea fa be a0 b6 b3 9d da 9b 8b b7 b8 b9 ab *................*
-c0 64 65 62 66 63 67 9e 68 74 71 72 73 78 75 76 77 *................*
-d0 ac 69 ed ee eb ef ec bf 80 e0 fe dd fc ad ae 59 *................*
-e0 44 45 42 46 43 47 9c 48 54 51 52 53 58 55 56 57 *................*
-f0 8c 49 cd ce cb cf cc e1 70 c0 de db dc 8d 8e df *................*
-*/
-const unsigned char os_toebcdic[256] = {
-/*00*/ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
- 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
-/*10*/ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
- 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
-/*20*/ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
- 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */
-/*30*/ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /*0123456789:;<=>?*/
-/*40*/ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
- 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /*@ABCDEFGHIJKLMNO*/
-/*50*/ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
- 0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d, /*PQRSTUVWXYZ[\]^_*/
-/*60*/ 0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
- 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /*`abcdefghijklmno*/
-/*70*/ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
- 0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07, /*pqrstuvwxyz{|}~.*/
-/*80*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08,
- 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /*................*/
-/*90*/ 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17,
- 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f, /*................*/
-/*a0*/ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5,
- 0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1, /*................*/
-/*b0*/ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
- 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /*................*/
-/*c0*/ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
- 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /*................*/
-/*d0*/ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
- 0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59, /*................*/
-/*e0*/ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
- 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /*................*/
-/*f0*/ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
- 0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /*................*/
-};
-
-/* Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
- * dest and srce may be identical, or separate memory blocks, but
- * should not overlap.
- */
-void
-ebcdic2ascii(unsigned char *dest, const unsigned char *srce, size_t count)
-{
- while (count-- != 0) {
- *dest++ = os_toascii[*srce++];
- }
-}
-void
-ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count)
-{
- while (count-- != 0) {
- *dest++ = os_toascii_strictly[*srce++];
- }
-}
-void
-ascii2ebcdic(unsigned char *dest, const unsigned char *srce, size_t count)
-{
- while (count-- != 0) {
- *dest++ = os_toebcdic[*srce++];
- }
-}
-#endif /*APR_CHARSET_EBCDIC*/
diff --git a/os/bs2000/ebcdic.h b/os/bs2000/ebcdic.h
deleted file mode 100644
index 053d04961a..0000000000
--- a/os/bs2000/ebcdic.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-
-extern const unsigned char os_toascii[256];
-extern const unsigned char os_toebcdic[256];
-void ebcdic2ascii(unsigned char *dest, const unsigned char *srce, size_t count);
-void ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count);
-void ascii2ebcdic(unsigned char *dest, const unsigned char *srce, size_t count);
-
diff --git a/os/bs2000/os.c b/os/bs2000/os.c
deleted file mode 100644
index de151cdd38..0000000000
--- a/os/bs2000/os.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This file will include OS specific functions which are not inlineable.
- * Any inlineable functions should be defined in os-inline.c instead.
- */
-
-#ifdef _OSD_POSIX
-
-#include "os.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "apr_lib.h"
-
-#define USER_LEN 8
-
-typedef enum
-{
- bs2_unknown, /* not initialized yet. */
- bs2_noFORK, /* no fork() because -X flag was specified */
- bs2_FORK, /* only fork() because uid != 0 */
- bs2_UFORK /* Normally, ufork() is used to switch identities. */
-} bs2_ForkType;
-
-static bs2_ForkType forktype = bs2_unknown;
-
-
-static void ap_str_toupper(char *str)
-{
- while (*str) {
- *str = apr_toupper(*str);
- ++str;
- }
-}
-
-/* Determine the method for forking off a child in such a way as to
- * set both the POSIX and BS2000 user id's to the unprivileged user.
- */
-static bs2_ForkType os_forktype(int one_process)
-{
- /* have we checked the OS version before? If yes return the previous
- * result - the OS release isn't going to change suddenly!
- */
- if (forktype == bs2_unknown) {
- /* not initialized yet */
-
- /* No fork if the one_process option was set */
- if (one_process) {
- forktype = bs2_noFORK;
- }
- /* If the user is unprivileged, use the normal fork() only. */
- else if (getuid() != 0) {
- forktype = bs2_FORK;
- }
- else
- forktype = bs2_UFORK;
- }
- return forktype;
-}
-
-
-
-/* This routine complements the setuid() call: it causes the BS2000 job
- * environment to be switched to the target user's user id.
- * That is important if CGI scripts try to execute native BS2000 commands.
- */
-int os_init_job_environment(server_rec *server, const char *user_name, int one_process)
-{
- bs2_ForkType type = os_forktype(one_process);
-
- /* We can be sure that no change to uid==0 is possible because of
- * the checks in http_core.c:set_user()
- */
-
- if (one_process) {
-
- type = forktype = bs2_noFORK;
-
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server,
- "The debug mode of Apache should only "
- "be started by an unprivileged user!");
- return 0;
- }
-
- return 0;
-}
-
-/* BS2000 requires a "special" version of fork() before a setuid() call */
-pid_t os_fork(const char *user)
-{
- pid_t pid;
- char username[USER_LEN+1];
-
- switch (os_forktype(0)) {
-
- case bs2_FORK:
- pid = fork();
- break;
-
- case bs2_UFORK:
- apr_cpystrn(username, user, sizeof username);
-
- /* Make user name all upper case - for some versions of ufork() */
- ap_str_toupper(username);
-
- pid = ufork(username);
- if (pid == -1 && errno == EPERM) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, errno,
- NULL, "ufork: Possible mis-configuration "
- "for user %s - Aborting.", user);
- exit(1);
- }
- break;
-
- default:
- pid = 0;
- break;
- }
-
- return pid;
-}
-
-#else /* _OSD_POSIX */
-void bs2000_os_is_not_here()
-{
-}
-#endif /* _OSD_POSIX */
diff --git a/os/bs2000/os.h b/os/bs2000/os.h
deleted file mode 100644
index ec81c5e097..0000000000
--- a/os/bs2000/os.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_OS_BS2000_H
-#define APACHE_OS_BS2000_H
-
-#define PLATFORM "BS2000"
-
-#include "../unix/os.h"
-
-/*
- * This file in included in all Apache source code. It contains definitions
- * of facilities available on _this_ operating system (HAVE_* macros),
- * and prototypes of OS specific functions defined in os.c or os-inline.c
- */
-
-/* Other ap_os_ routines not used by this platform */
-
-extern pid_t os_fork(const char *user);
-
-#endif /* APACHE_OS_BS2000_H */
diff --git a/os/config.m4 b/os/config.m4
deleted file mode 100644
index 8dbe925fda..0000000000
--- a/os/config.m4
+++ /dev/null
@@ -1,26 +0,0 @@
-AC_MSG_CHECKING(for target platform)
-
-case $host in
-*beos*)
- OS="beos"
- OS_DIR=$OS
- ;;
-*pc-os2_emx*)
- OS="os2"
- OS_DIR=$OS
- ;;
-bs2000*)
- OS="unix"
- OS_DIR=bs2000 # only the OS_DIR is platform specific.
- ;;
-*cygwin*)
- OS="cygwin"
- OS_DIR="unix"
- ;;
-*)
- OS="unix"
- OS_DIR=$OS;;
-esac
-
-AC_MSG_RESULT($OS)
-APACHE_FAST_OUTPUT(os/${OS_DIR}/Makefile)
diff --git a/os/netware/Apache.def b/os/netware/Apache.def
deleted file mode 100644
index 6d8bf9f41e..0000000000
--- a/os/netware/Apache.def
+++ /dev/null
@@ -1,5 +0,0 @@
-MODULE APRLIB.NLM
-MODULE LIBC.NLM
-MODULE WS2_32.NLM
-EXPORT @HTTPD.IMP
-IMPORT GetCurrentAddressSpace
diff --git a/os/netware/apache.xdc b/os/netware/apache.xdc
deleted file mode 100644
index 12a7f6ba2d..0000000000
--- a/os/netware/apache.xdc
+++ /dev/null
Binary files differ
diff --git a/os/netware/modules.c b/os/netware/modules.c
deleted file mode 100644
index 0115cc8f4e..0000000000
--- a/os/netware/modules.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* modules.c --- major modules compiled into Apache for NetWare.
- * Only insert an entry for a module if it must be compiled into
- * the core server
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-
-extern module core_module;
-extern module mpm_netware_module;
-extern module http_module;
-extern module so_module;
-extern module mime_module;
-extern module authz_host_module;
-extern module negotiation_module;
-extern module include_module;
-extern module autoindex_module;
-extern module dir_module;
-extern module cgi_module;
-extern module userdir_module;
-extern module alias_module;
-extern module env_module;
-extern module log_config_module;
-extern module asis_module;
-extern module imap_module;
-extern module actions_module;
-extern module setenvif_module;
-extern module nwssl_module;
-extern module netware_module;
-
-module *ap_prelinked_modules[] = {
- &core_module,
- &mpm_netware_module,
- &http_module,
- &so_module,
- &mime_module,
- &authz_host_module,
- &negotiation_module,
- &include_module,
- &autoindex_module,
- &dir_module,
- &cgi_module,
- &userdir_module,
- &alias_module,
- &env_module,
- &log_config_module,
- &asis_module,
- &imap_module,
- &actions_module,
- &setenvif_module,
- &nwssl_module,
- &netware_module,
- NULL
-};
-
-ap_module_symbol_t ap_prelinked_module_symbols[] = {
- {"core_module", &core_module},
- {"mpm_netware_module", &mpm_netware_module},
- {"http_module", &http_module},
- {"so_module", &so_module},
- {"mime_module", &mime_module},
- {"authz_host_module", &authz_host_module},
- {"negotiation_module", &negotiation_module},
- {"include_module", &include_module},
- {"autoindex_module", &autoindex_module},
- {"dir_module", &dir_module},
- {"cgi_module", &cgi_module},
- {"userdir_module", &userdir_module},
- {"alias_module", &alias_module},
- {"env_module", &env_module},
- {"log_config_module", &log_config_module},
- {"asis_module", &asis_module},
- {"imap_module", &imap_module},
- {"actions_module", &actions_module},
- {"setenvif_module", &setenvif_module},
- {"nwssl_module", &nwssl_module},
- {"netware_module", &netware_module},
- {NULL, NULL}
-};
-
-module *ap_preloaded_modules[] = {
- &core_module,
- &mpm_netware_module,
- &http_module,
- &so_module,
- &mime_module,
- &authz_host_module,
- &negotiation_module,
- &include_module,
- &autoindex_module,
- &dir_module,
- &cgi_module,
- &userdir_module,
- &alias_module,
- &env_module,
- &log_config_module,
- &asis_module,
- &imap_module,
- &actions_module,
- &setenvif_module,
- &nwssl_module,
- &netware_module,
- NULL
-};
diff --git a/os/netware/os.h b/os/netware/os.h
deleted file mode 100644
index 774bb3fb4d..0000000000
--- a/os/netware/os.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#ifndef PLATFORM
-#define PLATFORM "NETWARE"
-#endif
-
-#include <screen.h>
-
-AP_DECLARE_DATA extern int hold_screen_on_exit; /* Indicates whether the screen should be held open on exit*/
-
-#define CASE_BLIND_FILESYSTEM
-#define NO_WRITEV
-
-#define APACHE_MPM_DIR "server/mpm/netware" /* generated on unix */
-
-#define getpid NXThreadGetId
-
-/* Hold the screen open if there is an exit code and the hold_screen_on_exit flag >= 0 or the
- hold_screen_on_exit > 0. If the hold_screen_on_exit flag is < 0 then close the screen no
- matter what the exit code is. */
-#define exit(s) {if((s||hold_screen_on_exit)&&(hold_screen_on_exit>=0)){pressanykey();}apr_terminate();exit(s);}
-
-#endif /* ! APACHE_OS_H */
diff --git a/os/netware/pre_nw.h b/os/netware/pre_nw.h
deleted file mode 100644
index 0f2a9327a9..0000000000
--- a/os/netware/pre_nw.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __pre_nw__
-#define __pre_nw__
-
-#include <stdint.h>
-
-#ifndef __GNUC__
-#pragma precompile_target "precomp.mch"
-#endif
-
-#define NETWARE
-
-#define N_PLAT_NLM
-
-/* hint for MSL C++ that we're on NetWare platform */
-#define __NETWARE__
-
-/* the FAR keyword has no meaning in a 32-bit environment
- but is used in the SDK headers so we take it out */
-#define FAR
-#define far
-
-/* no-op for Codewarrior C compiler; a functions are cdecl
- by default */
-#define cdecl
-
-/* if we have wchar_t enabled in C++, predefine this type to avoid
- a conflict in Novell's header files */
-#ifndef __GNUC__
-#if (__option(cplusplus) && __option(wchar_type))
-#define _WCHAR_T
-#endif
-#endif
-
-/* C9X defintion used by MSL C++ library */
-#define DECIMAL_DIG 17
-
-/* some code may want to use the MS convention for long long */
-#ifndef __int64
-#define __int64 long long
-#endif
-
-/* Don't use the DBM rewrite map for mod_rewrite */
-#define NO_DBM_REWRITEMAP
-
-/* Allow MOD_AUTH_DBM to use APR */
-#define AP_AUTH_DBM_USE_APR
-
-/* Restrict the number of nested includes */
-#define AP_MAX_INCLUDE_DEPTH 48
-
-#endif
-
-
-
diff --git a/os/netware/util_nw.c b/os/netware/util_nw.c
deleted file mode 100644
index 78ad9ca0b2..0000000000
--- a/os/netware/util_nw.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_log.h"
-
-#include <netware.h>
-#include <nks\netware.h>
-
-int nlmUnloadSignaled(int wait);
-event_handle_t eh;
-Warn_t ref;
-Report_t dum;
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, apr_pool_t *p)
-{
- return apr_proc_create(newproc, progname, args, env, attr, p);
-}
-
-int _NonAppCheckUnload( void )
-{
- return nlmUnloadSignaled(1);
-}
-
-// down server event callback
-void ap_down_server_cb(void *, void *)
-{
- nlmUnloadSignaled(0);
- return;
-}
-
-// Required place holder event callback
-void ap_dummy_cb(void *, void *)
-{
- return;
-}
-
-// destroy callback resources
-void ap_cb_destroy(void *)
-{
- // cleanup down event notification
- UnRegisterEventNotification(eh);
- NX_UNWRAP_INTERFACE(ref);
- NX_UNWRAP_INTERFACE(dum);
-}
-
-int _NonAppStart
-(
- void *NLMHandle,
- void *errorScreen,
- const char *cmdLine,
- const char *loadDirPath,
- size_t uninitializedDataLength,
- void *NLMFileHandle,
- int (*readRoutineP)( int conn, void *fileHandle, size_t offset,
- size_t nbytes, size_t *bytesRead, void *buffer ),
- size_t customDataOffset,
- size_t customDataSize,
- int messageCount,
- const char **messages
-)
-{
-#pragma unused(cmdLine)
-#pragma unused(loadDirPath)
-#pragma unused(uninitializedDataLength)
-#pragma unused(NLMFileHandle)
-#pragma unused(readRoutineP)
-#pragma unused(customDataOffset)
-#pragma unused(customDataSize)
-#pragma unused(messageCount)
-#pragma unused(messages)
-
- // register for down server event
- rtag_t rt = AllocateResourceTag(NLMHandle, "Apache2 Down Server Callback",
- EventSignature);
-
- NX_WRAP_INTERFACE((void *)ap_down_server_cb, 2, (void **)&ref);
- NX_WRAP_INTERFACE((void *)ap_dummy_cb, 2, (void **)&dum);
- eh = RegisterForEventNotification(rt, EVENT_DOWN_SERVER,
- EVENT_PRIORITY_APPLICATION,
- ref, dum, NULL);
-
- // clean-up
- NXVmRegisterExitHandler(ap_cb_destroy, NULL);
-
-}
-
diff --git a/os/os2/.cvsignore b/os/os2/.cvsignore
deleted file mode 100644
index a00af59e15..0000000000
--- a/os/os2/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-.deps
-*.lo
-*.la
-.libs
diff --git a/os/os2/Makefile.in b/os/os2/Makefile.in
deleted file mode 100644
index fba497279b..0000000000
--- a/os/os2/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libos.la
-LTLIBRARY_SOURCES = util_os2.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/os/os2/config.m4 b/os/os2/config.m4
deleted file mode 100644
index b62d214e1d..0000000000
--- a/os/os2/config.m4
+++ /dev/null
@@ -1,3 +0,0 @@
-if test "$OS" = "os2" ; then
- APR_ADDTO(CFLAGS, [-DOS2 -O2])
-fi
diff --git a/os/os2/core.mk b/os/os2/core.mk
deleted file mode 100644
index 639417e8e7..0000000000
--- a/os/os2/core.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-# Some rules for making a shared core dll on OS/2
-
-os2core: httpd.dll $(CORE_IMPLIB)
- $(LIBTOOL) --mode=link gcc -Zstack 512 $(LDFLAGS) $(EXTRA_LDFLAGS) -o httpd $(CORE_IMPLIB)
-
-httpd.dll: $(PROGRAM_DEPENDENCIES) $(CORE_IMPLIB)
- $(LINK) -Zdll $(EXTRA_LDFLAGS) -s -o $@ server/exports.lo modules.lo $(PROGRAM_DEPENDENCIES) $(AP_LIBS) server/ApacheCoreOS2.def
diff --git a/os/os2/core_header.def b/os/os2/core_header.def
deleted file mode 100644
index ec3703a669..0000000000
--- a/os/os2/core_header.def
+++ /dev/null
@@ -1,19 +0,0 @@
-LIBRARY httpd INITINSTANCE
-DESCRIPTION "Apache Server Core"
-DATA NONSHARED
-
-EXPORTS
- "main"
-
-; One for mod_dav from socket library
- "_swaps"
-
-; And some more for mod_unique_id
- "gethostname"
- "gethostbyname"
- "_swapl"
- "h_errno"
- "inet_ntoa"
-
-; mod_proxy needs this one
- "inet_addr"
diff --git a/os/os2/os.h b/os/os2/os.h
deleted file mode 100644
index c67fdfb0a3..0000000000
--- a/os/os2/os.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#define PLATFORM "OS/2"
-
-/* going away shortly... */
-#define HAVE_DRIVE_LETTERS
-#define HAVE_UNC_PATHS
-#define CASE_BLIND_FILESYSTEM
-
-/*
- * This file in included in all Apache source code. It contains definitions
- * of facilities available on _this_ operating system (HAVE_* macros),
- * and prototypes of OS specific functions defined in os.c or os-inline.c
- */
-
-#endif /* ! APACHE_OS_H */
diff --git a/os/os2/util_os2.c b/os/os2/util_os2.c
deleted file mode 100644
index ee95471ec4..0000000000
--- a/os/os2/util_os2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define INCL_DOS
-#define INCL_DOSERRORS
-#include <os2.h>
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_log.h"
-#include "os.h"
-#include <sys/time.h>
-#include <sys/signal.h>
-#include <ctype.h>
-#include <string.h>
-#include "apr_strings.h"
-
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, apr_pool_t *p)
-{
- return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/os/tpf/.cvsignore b/os/tpf/.cvsignore
deleted file mode 100644
index bd5fe06963..0000000000
--- a/os/tpf/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/os/tpf/TPFExport b/os/tpf/TPFExport
deleted file mode 100644
index 449ebf2f93..0000000000
--- a/os/tpf/TPFExport
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-echo " Setting TPF/c89 environment variables"
-export _C89_CCMODE=1
-# replace the following with the location of your TPF include files
-export _C89_INCDIRS="/u/tpf41/currentmaint/include /u/tpf41/currentmaint/include/oco"
-export TPF=YES
-echo "Done"
diff --git a/os/tpf/ebcdic.c b/os/tpf/ebcdic.c
deleted file mode 100644
index 3b8723e909..0000000000
--- a/os/tpf/ebcdic.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-#if APR_CHARSET_EBCDIC
-#include "ebcdic.h"
-/*
-This code does basic character mapping for IBM's TPF operating system.
-It is a modified version of <Martin.Kraemer@Mch.SNI.De>'s code for
-the BS2000 (apache/src/os/bs2000/ebcdic.c).
-*/
-
-/*
-Bijective EBCDIC (character set IBM-1047) to US-ASCII table:
-This apr_table_t is bijective - there are no ambigous or duplicate characters.
-*/
-const unsigned char os_toascii_strictly[256] = {
- 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */
- 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
- 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
- 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
- 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */
- 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */
- 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
- 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */
- 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
- 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */
- 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
- 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
- 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
- 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
- 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */
- 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
- 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
- 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
- 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
- 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */
- 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */
-};
-
-/*
-Server EBCDIC (character set IBM-1047) to US-ASCII table:
-This apr_table_t is a copy of the os_toascii_strictly bijective apr_table_t above.
-The only change is that hex 0a (\012 octal) is mapped to hex 0a
-(ASCII's line feed) instead of hex 8e. This is done because throughout
-Apache, protocol string definitions hardcode the linefeed as \012 (octal):
-"Content-Type: text/plain\015\012". Without this kludge all protocol
-string definitions would need to be changed from ...\012 to ...\025.
-*/
-const unsigned char os_toascii[256] = {
- 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */
- 0x87, 0x8d, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
- 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
- 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
- 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */
- 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */
- 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
- 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */
- 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
- 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */
- 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
- 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
- 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
- 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
- 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */
- 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
- 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
- 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
- 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
- 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */
- 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */
-};
-
-/*
-The US-ASCII to EBCDIC (character set IBM-1047) table:
-This apr_table_t is bijective (no ambiguous or duplicate characters)
-*/
-const unsigned char os_toebcdic[256] = {
- 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */
- 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
- 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */
- 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
- 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */
- 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */
- 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */
- 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */
- 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */
- 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */
- 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */
- 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */
- 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */
- 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */
- 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */
- 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */
- 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */
- 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */
- 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */
- 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */
- 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */
- 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */
- 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */
- 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */
- 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */
- 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */
- 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */
- 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */
- 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */
- 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */
- 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */
- 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */
-};
-
-/* Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
- * dest and srce may be identical, or separate memory blocks, but
- * should not overlap.
- */
-void
-ebcdic2ascii(void *dest, const void *srce, size_t count)
-{
- unsigned char *udest = dest;
- const unsigned char *usrce = srce;
- while (count-- != 0) {
- *udest++ = os_toascii[*usrce++];
- }
-}
-void
-ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count)
-{
- while (count-- != 0) {
- *dest++ = os_toascii_strictly[*srce++];
- }
-}
-void
-ascii2ebcdic(void *dest, const void *srce, size_t count)
-{
- unsigned char *udest = dest;
- const unsigned char *usrce = srce;
-
- while (count-- != 0) {
- *udest++ = os_toebcdic[*usrce++];
- }
-}
-#endif /*APR_CHARSET_EBCDIC*/
-
diff --git a/os/tpf/ebcdic.h b/os/tpf/ebcdic.h
deleted file mode 100644
index 5958a66bdc..0000000000
--- a/os/tpf/ebcdic.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-
-extern const unsigned char os_toascii[256];
-extern const unsigned char os_toebcdic[256];
-void ebcdic2ascii(void *dest, const void *srce, size_t count);
-void ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count);
-void ascii2ebcdic(void *dest, const void *srce, size_t count);
-
diff --git a/os/tpf/os.c b/os/tpf/os.c
deleted file mode 100644
index cb6a8423a4..0000000000
--- a/os/tpf/os.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This file will include OS specific functions which are not inlineable.
- * Any inlineable functions should be defined in os-inline.c instead.
- */
-
-#include "httpd.h"
-#include "http_core.h"
-#include "os.h"
-#include "scoreboard.h"
-#include "http_log.h"
-
-static FILE *sock_fp;
-
-#ifndef __PIPE_
-int pipe(int fildes[2])
-{
- errno = ENOSYS;
- return(-1);
-}
-#endif
-
-/* fork and exec functions are not defined on
- TPF due to the implementation of tpf_fork() */
-
-pid_t fork(void)
-{
- errno = ENOSYS;
- return(-1);
-}
-
-int execl(const char *path, const char *arg0, ...)
-{
- errno = ENOSYS;
- return(-1);
-}
-
-int execle(const char *path, const char *arg0, ...)
-{
- errno = ENOSYS;
- return(-1);
-}
-
-int execve(const char *path, char *const argv[], char *const envp[])
-{
- errno = ENOSYS;
- return(-1);
-}
-
-int execvp(const char *file, char *const argv[])
-{
- errno = ENOSYS;
- return(-1);
-}
-
-
-pid_t os_fork(server_rec *s, int slot)
-{
- struct tpf_fork_input fork_input;
- APACHE_TPF_INPUT input_parms;
- int count;
- listen_rec *lr;
-
- fflush(stdin);
- if (dup2(fileno(sock_fp), STDIN_FILENO) == -1)
- ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s,
- "unable to replace stdin with sock device driver");
- fflush(stdout);
- if (dup2(fileno(sock_fp), STDOUT_FILENO) == -1)
- ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s,
- "unable to replace stdout with sock device driver");
- input_parms.generation = ap_my_generation;
- input_parms.scoreboard_heap = ap_scoreboard_image;
-
- lr = ap_listeners;
- count = 0;
- do {
- input_parms.listeners[count] = lr->fd;
- lr = lr->next;
- count++;
- } while(lr != ap_listeners);
-
- input_parms.slot = slot;
- input_parms.restart_time = ap_restart_time;
- fork_input.ebw_data = &input_parms;
- fork_input.program = ap_server_argv0;
- fork_input.prog_type = TPF_FORK_NAME;
- fork_input.istream = TPF_FORK_IS_BALANCE;
- fork_input.ebw_data_length = sizeof(input_parms);
- fork_input.parm_data = "-x";
- return tpf_fork(&fork_input);
-}
-
-int os_check_server(char *server) {
-#ifndef USE_TPF_DAEMON
- int rv;
- int *current_acn;
- if((rv = inetd_getServerStatus(server)) == INETD_SERVER_STATUS_INACTIVE)
- return 1;
- else {
- current_acn = (int *)cinfc_fast(CINFC_CMMACNUM);
- if(ecbp2()->ce2acn != *current_acn)
- return 1;
- }
-#endif
- return 0;
-}
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, apr_pool_t *p)
-{
- return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/os/tpf/os.h b/os/tpf/os.h
deleted file mode 100644
index 521d2bfa30..0000000000
--- a/os/tpf/os.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#define PLATFORM "TPF"
-
-#ifdef errno
-#undef errno
-#endif
-
-/*
- * This file in included in all Apache source code. It contains definitions
- * of facilities available on _this_ operating system (HAVE_* macros),
- * and prototypes of OS specific functions defined in os.c or os-inline.c
- */
-
-#include "apr.h"
-#include "ap_config.h"
-#include <strings.h>
-#ifndef __strings_h
-
-#define FD_SETSIZE 2048
-
-typedef long fd_mask;
-
-#define NBBY 8 /* number of bits in a byte */
-#define NFDBITS (sizeof(fd_mask) * NBBY)
-#define howmany(x, y) (((x)+((y)-1))/(y))
-
-typedef struct fd_set {
- fd_mask fds_bits [howmany(FD_SETSIZE, NFDBITS)];
-} fd_set;
-
-#define FD_CLR(n, p)((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
-#define FD_ISSET(n, p)((p)->fds_bits[(n)/NFDBITS] & (1 <<((n) % NFDBITS)))
-#define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
-#endif
-
-#ifdef FD_SET
-#undef FD_SET
-#define FD_SET(n, p) (0)
-#endif
-
-#include <i$netd.h>
-struct apache_input {
- INETD_SERVER_INPUT inetd_server;
- void *scoreboard_heap; /* scoreboard system heap address */
- int scoreboard_fd; /* scoreboard file descriptor */
- int slot; /* child number */
- int generation; /* server generation number */
- int listeners[10];
- time_t restart_time;
-};
-
-typedef struct apache_input APACHE_TPF_INPUT;
-
-extern int tpf_child;
-
-struct server_rec;
-pid_t os_fork(struct server_rec *s, int slot);
-int os_check_server(char *server);
-
-extern char *ap_server_argv0;
-extern int scoreboard_fd;
-#include <signal.h>
-#ifndef SIGPIPE
-#define SIGPIPE 14
-#endif
-#ifdef NSIG
-#undef NSIG
-#endif
-#endif /*! APACHE_OS_H*/
diff --git a/os/tpf/samples/linkdll.jcl b/os/tpf/samples/linkdll.jcl
deleted file mode 100644
index 16524bf3c9..0000000000
--- a/os/tpf/samples/linkdll.jcl
+++ /dev/null
@@ -1,121 +0,0 @@
-//APACH JOB MSGLEVEL=(1,1),CLASS=A,MSGCLASS=A
-/*ROUTE PRINT XXXXXX.XXXXXX
-/*ROUTE PUNCH XXXXXX.XXXXXX
-/*NOTIFY XXXXXX.XXXXXX
-//CCLE JCLLIB ORDER=(SYS1.CBC.SCBCPRC,SYS1.CEE.SCEEPROC)
-//PRELINK EXEC EDCPL,COND.LKED=(0,NE),
-// PPARM='OMVS,DLLNAME(pppp)',
-// LREGSIZ='2048K',
-// LPARM='AMODE=31,RMODE=ANY,LIST,XREF'
-//PLKED.SYSLIB DD DISP=SHR,DSN=FSE0000.DEVP.STUB.OB
-// DD DISP=SHR,DSN=FSE0000.DEVP.CLIB.OB
-// DD DISP=SHR,DSN=ACP.CLIB.RLSE46.WEB
-// DD DISP=SHR,DSN=ACP.STUB.RLSE46.WEB
-// DD DISP=SHR,DSN=ACP.CLIB.RLSE40
-// DD DISP=SHR,DSN=ACP.STUB.RLSE40
-//PLKED.SYSDEFSD DD DSN=APA0000.DEVP.IMPORTS.DSD(ppppvv),DISP=SHR
-//PLKED.DSD DD DSN=APA0000.DEVP.IMPORTS.DSD,DISP=SHR
-//PLKED.OBJLIB DD DISP=SHR,DSN=FSE0000.DEVP.TEST.OB
-// DD DISP=SHR,DSN=ACP.OBJ.RLSE46.WEB
-// DD DISP=SHR,DSN=ACP.OBJ.INTG98.NBS
-// DD DISP=SHR,DSN=ACP.MAIN.SYST.OBBSS
-// DD DISP=SHR,DSN=ACP.DF.MAIN.SYST.OBBSS
-// DD DISP=SHR,DSN=ACP.OBJ.RLSE40.BSS
-//PLKED.OBJ1 DD PATH='/usr/local/apache/src/ap/ap_cpystrn.o'
-//PLKED.OBJ2 DD PATH='/usr/local/apache/src/ap/ap_execve.o'
-//PLKED.OBJ3 DD PATH='/usr/local/apache/src/ap/ap_signal.o'
-//PLKED.OBJ4 DD PATH='/usr/local/apache/src/ap/ap_slack.o'
-//PLKED.OBJ5 DD PATH='/usr/local/apache/src/ap/ap_snprintf.o'
-//PLKED.OBJ6 DD PATH='/usr/local/apache/src/ap/ap_strings.o'
-//PLKED.OBJ7 DD PATH='/usr/local/apache/src/os/tpf/ebcdic.o'
-//PLKED.OBJ8 DD PATH='/usr/local/apache/src/os/tpf/os.o'
-//PLKED.OBJ9 DD PATH='/usr/local/apache/src/os/tpf/os-inline.o'
-//PLKED.OBJ10 DD PATH='/usr/local/apache/src/regex/regcomp.o'
-//PLKED.OBJ11 DD PATH='/usr/local/apache/src/regex/regerror.o'
-//PLKED.OBJ12 DD PATH='/usr/local/apache/src/regex/regexec.o'
-//PLKED.OBJ13 DD PATH='/usr/local/apache/src/regex/regfree.o'
-//PLKED.OBJ14 DD PATH='/usr/local/apache/src/main/alloc.o'
-//PLKED.OBJ15 DD PATH='/usr/local/apache/src/main/buff.o'
-//PLKED.OBJ16 DD PATH='/usr/local/apache/src/main/fnmatch.o'
-//PLKED.OBJ17 DD PATH='/usr/local/apache/src/main/http_config.o'
-//PLKED.OBJ18 DD PATH='/usr/local/apache/src/main/http_core.o'
-//PLKED.OBJ19 DD PATH='/usr/local/apache/src/main/http_log.o'
-//PLKED.OBJ20 DD PATH='/usr/local/apache/src/main/http_main.o'
-//PLKED.OBJ21 DD PATH='/usr/local/apache/src/main/http_protocol.o'
-//PLKED.OBJ22 DD PATH='/usr/local/apache/src/main/http_request.o'
-//PLKED.OBJ23 DD PATH='/usr/local/apache/src/main/http_vhost.o'
-//PLKED.OBJ24 DD PATH='/usr/local/apache/src/main/md5c.o'
-//PLKED.OBJ25 DD PATH='/usr/local/apache/src/main/rfc1413.o'
-//PLKED.OBJ26 DD PATH='/usr/local/apache/src/main/util.o'
-//PLKED.OBJ27 DD PATH='/usr/local/apache/src/main/util_date.o'
-//PLKED.OBJ28 DD PATH='/usr/local/apache/src/main/util_md5.o'
-//PLKED.OBJ29 DD PATH='/usr/local/apache/src/main/util_script.o'
-//PLKED.OBJ30 DD PATH='/usr/local/apache/src/main/util_uri.o'
-//PLKED.OBJ31 DD PATH='/usr/local/apache/src/modules.o'
-//PLKED.OBJ32 DD PATH='/usr/local/apache/src/buildmark.o'
-//PLKED.OBJ33 DD PATH='/usr/local/apache/src/modules/standard/mod_auto\
-// index.o'
-//PLKED.OBJ34 DD PATH='/usr/local/apache/src/modules/standard/mod_dir.\
-// o'
-//PLKED.OBJ35 DD PATH='/usr/local/apache/src/modules/standard/mod_mime\
-// .o'
-//PLKED.OBJ36 DD PATH='/usr/local/apache/src/modules/standard/mod_sete\
-// nvif.o'
-//PLKED.OBJ37 DD PATH='/usr/local/apache/src/modules/standard/mod_alia\
-// s.o'
-//PLKED.OBJ38 DD PATH='/usr/local/apache/src/modules/standard/mod_acce\
-// ss.o'
-//PLKED.OBJ39 DD PATH='/usr/local/apache/src/modules/standard/mod_user\
-// dir.o'
-//PLKED.OBJ40 DD PATH='/usr/local/apache/src/modules/standard/mod_spel\
-// ing.o'
-//PLKED.OBJ41 DD PATH='/usr/local/apache/src/modules/standard/mod_nego\
-// tiation.o'
-//PLKED.SYSIN DD *
- ORDER @@DLMHDR
- INCLUDE OBJLIB(CSTRTD40)
- INCLUDE OBJ1
- INCLUDE OBJ2
- INCLUDE OBJ3
- INCLUDE OBJ4
- INCLUDE OBJ5
- INCLUDE OBJ6
- INCLUDE OBJ7
- INCLUDE OBJ8
- INCLUDE OBJ9
- INCLUDE OBJ10
- INCLUDE OBJ11
- INCLUDE OBJ12
- INCLUDE OBJ13
- INCLUDE OBJ14
- INCLUDE OBJ15
- INCLUDE OBJ16
- INCLUDE OBJ17
- INCLUDE OBJ18
- INCLUDE OBJ19
- INCLUDE OBJ20
- INCLUDE OBJ21
- INCLUDE OBJ22
- INCLUDE OBJ23
- INCLUDE OBJ24
- INCLUDE OBJ25
- INCLUDE OBJ26
- INCLUDE OBJ27
- INCLUDE OBJ28
- INCLUDE OBJ29
- INCLUDE OBJ30
- INCLUDE OBJ31
- INCLUDE OBJ32
- INCLUDE OBJ33
- INCLUDE OBJ34
- INCLUDE OBJ35
- INCLUDE OBJ36
- INCLUDE OBJ37
- INCLUDE OBJ38
- INCLUDE OBJ39
- INCLUDE OBJ40
- INCLUDE OBJ41
-/*
-//*** WARNING *** NEVER change .LK to .OB in SYSLMOD!!!
-//LKED.SYSLMOD DD DISP=OLD,DSN=xxxxxx.xxxx(ppppvv)
-//
diff --git a/os/tpf/samples/loadset.jcl b/os/tpf/samples/loadset.jcl
deleted file mode 100644
index 405af82847..0000000000
--- a/os/tpf/samples/loadset.jcl
+++ /dev/null
@@ -1,58 +0,0 @@
-//OLDRWEB JOB MSGLEVEL=1,CLASS=A,MSGCLASS=S
-//JOBCAT DD DSN=ICFCAT.ESAWK2,DISP=SHR
-/*ROUTE PRINT xxxxxx.xxxxxxx
-/*ROUTE PUNCH xxxxxx.xxxxxxx
-//TLDR EXEC PGM=TPFLDRCA,REGION=8M,
-// PARM='OLDR,SYS=ACP,CLMSIZE=8000000'
-//STEPLIB DD DSN=ACP.LINK.RLSE46.WEB,DISP=SHR
-// DD DSN=ACP.LINK.RLSE40.BSS,DISP=SHR
-// DD DSN=VIS0000.DEVP.TEST.LK,DISP=SHR
-// DD DSN=SYS1.CEE.SCEERUN,DISP=SHR
-//SALTB DD DSN=ACP.SALTBL.RLSE46.WEB,DISP=SHR
-// DD DSN=ACP.SALTBL.INTG46.WEB,DISP=SHR
-//OBJLIB DD DSN=FSE0000.DEVP.TEST.OB,DISP=SHR
-// DD DSN=APA0000.DEVP.TEST.OB,DISP=SHR
-// DD DSN=ACP.DRVE.TEST.OB,DISP=SHR
-// DD DSN=ACP.OBJ.RLSE46.WEB,DISP=SHR
-// DD DSN=ACP.OBJ.INTG36.DRV,DISP=SHR
-// DD DSN=ACP.OBJ.INTG46.WEB,DISP=SHR
-// DD DSN=ACP.OBJ.INTG40.BSS,DISP=SHR
-//LOADMOD DD DSN=FSE0000.DEVP.TEST.LK,DISP=SHR
-// DD DSN=APA0000.DEVP.TEST.LK,DISP=SHR
-// DD DSN=CWEISS.LINK,DISP=SHR
-// DD DSN=ACP.DRVE.TEST.LK,DISP=SHR
-// DD DSN=ACP.LINK.RLSE46.WEB,DISP=SHR
-// DD DSN=ACP.LINK.INTG98.NBS,DISP=SHR
-// DD DSN=ACP.LINK.INTG46.WEB,DISP=SHR
-// DD DSN=ACP.LINK.INTG36.DRV,DISP=SHR
-// DD DSN=ACP.LINK.INTG40.BSS,DISP=SHR
-//LOADSUM DD DSN=&&LOADSUM,DISP=(NEW,PASS),UNIT=SYSDA,
-// LRECL=133,SPACE=(TRK,(10,10)),RECFM=FBA
-//CPRTEMP DD UNIT=SYSDA,
-// DSN=&&CPRTEMP,SPACE=(TRK,(100,20)),
-// DCB=(RECFM=FB,BLKSIZE=4095,LRECL=4095),
-// DISP=(NEW,DELETE)
-//PROGTEMP DD UNIT=SYSDA,
-// DSN=&&PRTEMP,SPACE=(TRK,(100,20)),
-// DCB=(RECFM=FB,BLKSIZE=4095,LRECL=4095),
-// DISP=(NEW,DELETE)
-//OUTPUT DD DSN=&&VRDROUT,DISP=(NEW,PASS),UNIT=SYSDA,
-// DCB=(RECFM=F,BLKSIZE=4095,LRECL=4095)
-//SYSUDUMP DD DUMMY
-//SYSABEND DD DUMMY
-//SYSOUT DD SYSOUT=A
-//SYSPRINT DD SYSOUT=A
-//PRINTER DD SYSOUT=A
-//CEEDUMP DD SYSOUT=A
-//SYSIN DD *
-SYSID=BSS
-PATVERS=NONE
-SALVERS=40
-LOADER LOADSET lllllll
-LOADER CALL PROG ppppvv
-/*
-//TRANSMIT EXEC PGM=IKJEFT01,
-// PARM='TRANSMIT xxxxxx.xxxxxx DDNAME(SYSTSIN) NOLOG NONOTIFY SEQ'
-//SYSTSIN DD UNIT=SYSDA,
-// DSN=&&VRDROUT,DISP=(OLD,DELETE)
-//SYSTSPRT DD DUMMY
diff --git a/os/unix/.cvsignore b/os/unix/.cvsignore
deleted file mode 100644
index bbc8ba00d1..0000000000
--- a/os/unix/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/os/unix/Makefile.in b/os/unix/Makefile.in
deleted file mode 100644
index eddb2c2644..0000000000
--- a/os/unix/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libos.la
-LTLIBRARY_SOURCES = unixd.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/os/unix/config.m4 b/os/unix/config.m4
deleted file mode 100644
index dacbf6b539..0000000000
--- a/os/unix/config.m4
+++ /dev/null
@@ -1,7 +0,0 @@
-if test "$OS" = "unix" ; then
- APACHE_TYPE_RLIM_T
-
- AC_CHECK_HEADERS(sys/time.h sys/resource.h sys/sem.h sys/ipc.h)
-
- AC_CHECK_FUNCS(setsid killpg)
-fi
diff --git a/os/unix/os.h b/os/unix/os.h
deleted file mode 100644
index 322ad8f1a6..0000000000
--- a/os/unix/os.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#include "apr.h"
-#include "ap_config.h"
-
-#ifndef PLATFORM
-#define PLATFORM "Unix"
-#endif
-
-#endif /* !APACHE_OS_H */
diff --git a/os/unix/unixd.c b/os/unix/unixd.c
deleted file mode 100644
index 1d4c770bf0..0000000000
--- a/os/unix/unixd.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "os.h"
-#include "ap_mpm.h"
-#include "apr_thread_proc.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-/* XXX */
-#include <sys/stat.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_SYS_SEM_H
-#include <sys/sem.h>
-#endif
-#ifdef HAVE_SYS_PRCTL_H
-#include <sys/prctl.h>
-#endif
-
-unixd_config_rec unixd_config;
-
-/* Set group privileges.
- *
- * Note that we use the username as set in the config files, rather than
- * the lookup of to uid --- the same uid may have multiple passwd entries,
- * with different sets of groups for each.
- */
-
-static int set_group_privs(void)
-{
- if (!geteuid()) {
- const char *name;
-
- /* Get username if passed as a uid */
-
- if (unixd_config.user_name[0] == '#') {
- struct passwd *ent;
- uid_t uid = atoi(&unixd_config.user_name[1]);
-
- if ((ent = getpwuid(uid)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "getpwuid: couldn't determine user name from uid %u, "
- "you probably need to modify the User directive",
- (unsigned)uid);
- return -1;
- }
-
- name = ent->pw_name;
- }
- else
- name = unixd_config.user_name;
-
-#if !defined(OS2) && !defined(TPF)
- /* OS/2 and TPF don't support groups. */
-
- /*
- * Set the GID before initgroups(), since on some platforms
- * setgid() is known to zap the group list.
- */
- if (setgid(unixd_config.group_id) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "setgid: unable to set group id to Group %u",
- (unsigned)unixd_config.group_id);
- return -1;
- }
-
- /* Reset `groups' attributes. */
-
- if (initgroups(name, unixd_config.group_id) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "initgroups: unable to set groups for User %s "
- "and Group %u", name, (unsigned)unixd_config.group_id);
- return -1;
- }
-#endif /* !defined(OS2) && !defined(TPF) */
- }
- return 0;
-}
-
-
-AP_DECLARE(int) unixd_setup_child(void)
-{
- if (set_group_privs()) {
- return -1;
- }
-#ifdef MPE
- /* Only try to switch if we're running as MANAGER.SYS */
- if (geteuid() == 1 && unixd_config.user_id > 1) {
- GETPRIVMODE();
- if (setuid(unixd_config.user_id) == -1) {
- GETUSERMODE();
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "setuid: unable to change to uid: %ld",
- (long) unixd_config.user_id);
- exit(1);
- }
- GETUSERMODE();
- }
-#else
- /* Only try to switch if we're running as root */
- if (!geteuid() && (
-#ifdef _OSD_POSIX
- os_init_job_environment(NULL, unixd_config.user_name, ap_exists_config_define("DEBUG")) != 0 ||
-#endif
- setuid(unixd_config.user_id) == -1)) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "setuid: unable to change to uid: %ld",
- (long) unixd_config.user_id);
- return -1;
- }
-#if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE)
- /* this applies to Linux 2.4+ */
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
- if (ap_coredumpdir_configured) {
- if (prctl(PR_SET_DUMPABLE, 1)) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "set dumpable failed - this child will not coredump"
- " after software errors");
- }
- }
-#endif
-#endif
-#endif
- return 0;
-}
-
-
-AP_DECLARE(const char *) unixd_set_user(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- unixd_config.user_name = arg;
- unixd_config.user_id = ap_uname2id(arg);
-#if !defined (BIG_SECURITY_HOLE) && !defined (OS2)
- if (unixd_config.user_id == 0) {
- return "Error:\tApache has not been designed to serve pages while\n"
- "\trunning as root. There are known race conditions that\n"
- "\twill allow any local user to read any file on the system.\n"
- "\tIf you still desire to serve pages as root then\n"
- "\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n"
- "\tand then rebuild the server.\n"
- "\tIt is strongly suggested that you instead modify the User\n"
- "\tdirective in your httpd.conf file to list a non-root\n"
- "\tuser.\n";
- }
-#endif
-
- return NULL;
-}
-
-AP_DECLARE(const char *) unixd_set_group(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- unixd_config.group_id = ap_gname2id(arg);
-
- return NULL;
-}
-
-AP_DECLARE(void) unixd_pre_config(apr_pool_t *ptemp)
-{
- apr_finfo_t wrapper;
-
- unixd_config.user_name = DEFAULT_USER;
- unixd_config.user_id = ap_uname2id(DEFAULT_USER);
- unixd_config.group_id = ap_gname2id(DEFAULT_GROUP);
-
- /* Check for suexec */
- unixd_config.suexec_enabled = 0;
- if ((apr_stat(&wrapper, SUEXEC_BIN,
- APR_FINFO_NORM, ptemp)) != APR_SUCCESS) {
- return;
- }
-
- if ((wrapper.protection & APR_USETID) && wrapper.user == 0) {
- unixd_config.suexec_enabled = 1;
- }
-}
-
-
-AP_DECLARE(void) unixd_set_rlimit(cmd_parms *cmd, struct rlimit **plimit,
- const char *arg, const char * arg2, int type)
-{
-#if (defined(RLIMIT_CPU) || defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_NPROC) || defined(RLIMIT_AS)) && APR_HAVE_STRUCT_RLIMIT && APR_HAVE_GETRLIMIT
- char *str;
- struct rlimit *limit;
- /* If your platform doesn't define rlim_t then typedef it in ap_config.h */
- rlim_t cur = 0;
- rlim_t max = 0;
-
- *plimit = (struct rlimit *)apr_pcalloc(cmd->pool, sizeof(**plimit));
- limit = *plimit;
- if ((getrlimit(type, limit)) != 0) {
- *plimit = NULL;
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, cmd->server,
- "%s: getrlimit failed", cmd->cmd->name);
- return;
- }
-
- if ((str = ap_getword_conf(cmd->pool, &arg))) {
- if (!strcasecmp(str, "max")) {
- cur = limit->rlim_max;
- }
- else {
- cur = atol(str);
- }
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, cmd->server,
- "Invalid parameters for %s", cmd->cmd->name);
- return;
- }
-
- if (arg2 && (str = ap_getword_conf(cmd->pool, &arg2))) {
- max = atol(str);
- }
-
- /* if we aren't running as root, cannot increase max */
- if (geteuid()) {
- limit->rlim_cur = cur;
- if (max) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, cmd->server,
- "Must be uid 0 to raise maximum %s", cmd->cmd->name);
- }
- }
- else {
- if (cur) {
- limit->rlim_cur = cur;
- }
- if (max) {
- limit->rlim_max = max;
- }
- }
-#else
-
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, cmd->server,
- "Platform does not support rlimit for %s", cmd->cmd->name);
-#endif
-}
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(get_suexec_identity)
-)
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(ap_unix_identity_t *, get_suexec_identity,
- (const request_rec *r), (r), NULL)
-
-static apr_status_t ap_unix_create_privileged_process(
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, ap_unix_identity_t *ugid,
- apr_pool_t *p)
-{
- int i = 0;
- const char **newargs;
- char *newprogname;
- char *execuser, *execgroup;
- const char *argv0;
-
- if (!unixd_config.suexec_enabled) {
- return apr_proc_create(newproc, progname, args, env, attr, p);
- }
-
- argv0 = ap_strrchr_c(progname, '/');
- /* Allow suexec's "/" check to succeed */
- if (argv0 != NULL) {
- argv0++;
- }
- else {
- argv0 = progname;
- }
-
-
- if (ugid->userdir) {
- execuser = apr_psprintf(p, "~%ld", (long) ugid->uid);
- }
- else {
- execuser = apr_psprintf(p, "%ld", (long) ugid->uid);
- }
- execgroup = apr_psprintf(p, "%ld", (long) ugid->gid);
-
- if (!execuser || !execgroup) {
- return APR_ENOMEM;
- }
-
- i = 0;
- if (args) {
- while (args[i]) {
- i++;
- }
- }
- /* allocate space for 4 new args, the input args, and a null terminator */
- newargs = apr_palloc(p, sizeof(char *) * (i + 4));
- newprogname = SUEXEC_BIN;
- newargs[0] = SUEXEC_BIN;
- newargs[1] = execuser;
- newargs[2] = execgroup;
- newargs[3] = apr_pstrdup(p, argv0);
-
- /*
- ** using a shell to execute suexec makes no sense thus
- ** we force everything to be APR_PROGRAM, and never
- ** APR_SHELLCMD
- */
- if(apr_procattr_cmdtype_set(attr, APR_PROGRAM) != APR_SUCCESS) {
- return APR_EGENERAL;
- }
-
- i = 1;
- do {
- newargs[i + 3] = args[i];
- } while (args[i++]);
-
- return apr_proc_create(newproc, newprogname, newargs, env, attr, p);
-}
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, apr_pool_t *p)
-{
- ap_unix_identity_t *ugid = ap_run_get_suexec_identity(r);
-
- if (ugid == NULL) {
- return apr_proc_create(newproc, progname, args, env, attr, p);
- }
-
- return ap_unix_create_privileged_process(newproc, progname, args, env,
- attr, ugid, p);
-}
-
-/* XXX move to APR and externalize (but implement differently :) ) */
-static apr_lockmech_e proc_mutex_mech(apr_proc_mutex_t *pmutex)
-{
- const char *mechname = apr_proc_mutex_name(pmutex);
-
- if (!strcmp(mechname, "sysvsem")) {
- return APR_LOCK_SYSVSEM;
- }
- else if (!strcmp(mechname, "flock")) {
- return APR_LOCK_FLOCK;
- }
- return APR_LOCK_DEFAULT;
-}
-
-AP_DECLARE(apr_status_t) unixd_set_proc_mutex_perms(apr_proc_mutex_t *pmutex)
-{
- if (!geteuid()) {
- apr_lockmech_e mech = proc_mutex_mech(pmutex);
-
- switch(mech) {
-#if APR_HAS_SYSVSEM_SERIALIZE
- case APR_LOCK_SYSVSEM:
- {
- apr_os_proc_mutex_t ospmutex;
-#if !APR_HAVE_UNION_SEMUN
- union semun {
- long val;
- struct semid_ds *buf;
- unsigned short *array;
- };
-#endif
- union semun ick;
- struct semid_ds buf;
-
- apr_os_proc_mutex_get(&ospmutex, pmutex);
- buf.sem_perm.uid = unixd_config.user_id;
- buf.sem_perm.gid = unixd_config.group_id;
- buf.sem_perm.mode = 0600;
- ick.buf = &buf;
- if (semctl(ospmutex.crossproc, 0, IPC_SET, ick) < 0) {
- return errno;
- }
- }
- break;
-#endif
-#if APR_HAS_FLOCK_SERIALIZE
- case APR_LOCK_FLOCK:
- {
- const char *lockfile = apr_proc_mutex_lockfile(pmutex);
-
- if (lockfile) {
- if (chown(lockfile, unixd_config.user_id,
- -1 /* no gid change */) < 0) {
- return errno;
- }
- }
- }
- break;
-#endif
- default:
- /* do nothing */
- break;
- }
- }
- return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_status_t) unixd_set_global_mutex_perms(apr_global_mutex_t *gmutex)
-{
-#if !APR_PROC_MUTEX_IS_GLOBAL
- apr_os_global_mutex_t osgmutex;
- apr_os_global_mutex_get(&osgmutex, gmutex);
- return unixd_set_proc_mutex_perms(osgmutex.proc_mutex);
-#else /* APR_PROC_MUTEX_IS_GLOBAL */
- /* In this case, apr_proc_mutex_t and apr_global_mutex_t are the same. */
- return unixd_set_proc_mutex_perms(gmutex);
-#endif /* APR_PROC_MUTEX_IS_GLOBAL */
-}
-
-AP_DECLARE(apr_status_t) unixd_accept(void **accepted, ap_listen_rec *lr,
- apr_pool_t *ptrans)
-{
- apr_socket_t *csd;
- apr_status_t status;
-
- *accepted = NULL;
- status = apr_socket_accept(&csd, lr->sd, ptrans);
- if (status == APR_SUCCESS) {
- *accepted = csd;
- return APR_SUCCESS;
- }
-
- if (APR_STATUS_IS_EINTR(status)) {
- return status;
- }
- /* Our old behaviour here was to continue after accept()
- * errors. But this leads us into lots of troubles
- * because most of the errors are quite fatal. For
- * example, EMFILE can be caused by slow descriptor
- * leaks (say in a 3rd party module, or libc). It's
- * foolish for us to continue after an EMFILE. We also
- * seem to tickle kernel bugs on some platforms which
- * lead to never-ending loops here. So it seems best
- * to just exit in most cases.
- */
- switch (status) {
-#if defined(HPUX11) && defined(ENOBUFS)
- /* On HPUX 11.x, the 'ENOBUFS, No buffer space available'
- * error occurs because the accept() cannot complete.
- * You will not see ENOBUFS with 10.20 because the kernel
- * hides any occurrence from being returned to user space.
- * ENOBUFS with 11.x's TCP/IP stack is possible, and could
- * occur intermittently. As a work-around, we are going to
- * ignore ENOBUFS.
- */
- case ENOBUFS:
-#endif
-
-#ifdef EPROTO
- /* EPROTO on certain older kernels really means
- * ECONNABORTED, so we need to ignore it for them.
- * See discussion in new-httpd archives nh.9701
- * search for EPROTO.
- *
- * Also see nh.9603, search for EPROTO:
- * There is potentially a bug in Solaris 2.x x<6,
- * and other boxes that implement tcp sockets in
- * userland (i.e. on top of STREAMS). On these
- * systems, EPROTO can actually result in a fatal
- * loop. See PR#981 for example. It's hard to
- * handle both uses of EPROTO.
- */
- case EPROTO:
-#endif
-#ifdef ECONNABORTED
- case ECONNABORTED:
-#endif
- /* Linux generates the rest of these, other tcp
- * stacks (i.e. bsd) tend to hide them behind
- * getsockopt() interfaces. They occur when
- * the net goes sour or the client disconnects
- * after the three-way handshake has been done
- * in the kernel but before userland has picked
- * up the socket.
- */
-#ifdef ECONNRESET
- case ECONNRESET:
-#endif
-#ifdef ETIMEDOUT
- case ETIMEDOUT:
-#endif
-#ifdef EHOSTUNREACH
- case EHOSTUNREACH:
-#endif
-#ifdef ENETUNREACH
- case ENETUNREACH:
-#endif
- /* EAGAIN/EWOULDBLOCK can be returned on BSD-derived
- * TCP stacks when the connection is aborted before
- * we call connect, but only because our listener
- * sockets are non-blocking (AP_NONBLOCK_WHEN_MULTI_LISTEN)
- */
-#ifdef EAGAIN
- case EAGAIN:
-#endif
-#ifdef EWOULDBLOCK
-#if !defined(EAGAIN) || EAGAIN != EWOULDBLOCK
- case EWOULDBLOCK:
-#endif
-#endif
- break;
-#ifdef ENETDOWN
- case ENETDOWN:
- /*
- * When the network layer has been shut down, there
- * is not much use in simply exiting: the parent
- * would simply re-create us (and we'd fail again).
- * Use the CHILDFATAL code to tear the server down.
- * @@@ Martin's idea for possible improvement:
- * A different approach would be to define
- * a new APEXIT_NETDOWN exit code, the reception
- * of which would make the parent shutdown all
- * children, then idle-loop until it detected that
- * the network is up again, and restart the children.
- * Ben Hyde noted that temporary ENETDOWN situations
- * occur in mobile IP.
- */
- ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
- "apr_socket_accept: giving up.");
- return APR_EGENERAL;
-#endif /*ENETDOWN*/
-
-#ifdef TPF
- case EINACT:
- ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
- "offload device inactive");
- return APR_EGENERAL;
- break;
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf,
- "select/accept error (%d)", status);
- return APR_EGENERAL;
-#else
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, status, ap_server_conf,
- "apr_socket_accept: (client socket)");
- return APR_EGENERAL;
-#endif
- }
- return status;
-}
-
diff --git a/os/unix/unixd.h b/os/unix/unixd.h
deleted file mode 100644
index a96ecbc861..0000000000
--- a/os/unix/unixd.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef UNIXD_H
-#define UNIXD_H
-
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_listen.h"
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-#include "apr_hooks.h"
-#include "apr_thread_proc.h"
-#include "apr_proc_mutex.h"
-#include "apr_global_mutex.h"
-
-#include <pwd.h>
-#include <grp.h>
-#ifdef APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_IPC_H
-#include <sys/ipc.h>
-#endif
-
-typedef struct {
- uid_t uid;
- gid_t gid;
- int userdir;
-} ap_unix_identity_t;
-
-AP_DECLARE_HOOK(ap_unix_identity_t *, get_suexec_identity,(const request_rec *r))
-
-/* common stuff that unix MPMs will want */
-
-/* Default user name and group name. These may be specified as numbers by
- * placing a # before a number */
-
-#ifndef DEFAULT_USER
-#define DEFAULT_USER "#-1"
-#endif
-#ifndef DEFAULT_GROUP
-#define DEFAULT_GROUP "#-1"
-#endif
-
-typedef struct {
- const char *user_name;
- uid_t user_id;
- gid_t group_id;
- int suexec_enabled;
-} unixd_config_rec;
-AP_DECLARE_DATA extern unixd_config_rec unixd_config;
-
-AP_DECLARE(int) unixd_setup_child(void);
-AP_DECLARE(void) unixd_pre_config(apr_pool_t *ptemp);
-AP_DECLARE(const char *) unixd_set_user(cmd_parms *cmd, void *dummy,
- const char *arg);
-AP_DECLARE(const char *) unixd_set_group(cmd_parms *cmd, void *dummy,
- const char *arg);
-#if defined(RLIMIT_CPU) || defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_NPROC) || defined(RLIMIT_AS)
-AP_DECLARE(void) unixd_set_rlimit(cmd_parms *cmd, struct rlimit **plimit,
- const char *arg, const char * arg2, int type);
-#endif
-
-/**
- * One of the functions to set mutex permissions should be called in
- * the parent process on platforms that switch identity when the
- * server is started as root.
- * If the child init logic is performed before switching identity
- * (e.g., MPM setup for an accept mutex), it should only be called
- * for SysV semaphores. Otherwise, it is safe to call it for all
- * mutex types.
- */
-AP_DECLARE(apr_status_t) unixd_set_proc_mutex_perms(apr_proc_mutex_t *pmutex);
-AP_DECLARE(apr_status_t) unixd_set_global_mutex_perms(apr_global_mutex_t *gmutex);
-AP_DECLARE(apr_status_t) unixd_accept(void **accepted, ap_listen_rec *lr, apr_pool_t *ptrans);
-
-#ifdef HAVE_KILLPG
-#define unixd_killpg(x, y) (killpg ((x), (y)))
-#define ap_os_killpg(x, y) (killpg ((x), (y)))
-#else /* HAVE_KILLPG */
-#define unixd_killpg(x, y) (kill (-(x), (y)))
-#define ap_os_killpg(x, y) (kill (-(x), (y)))
-#endif /* HAVE_KILLPG */
-
-#define UNIX_DAEMON_COMMANDS \
-AP_INIT_TAKE1("User", unixd_set_user, NULL, RSRC_CONF, \
- "Effective user id for this server"), \
-AP_INIT_TAKE1("Group", unixd_set_group, NULL, RSRC_CONF, \
- "Effective group id for this server")
-
-#endif
diff --git a/os/win32/BaseAddr.ref b/os/win32/BaseAddr.ref
deleted file mode 100644
index 0f62aa17e7..0000000000
--- a/os/win32/BaseAddr.ref
+++ /dev/null
@@ -1,66 +0,0 @@
-; os/win32/BaseAddr.ref contains the central repository
-; of all module base addresses
-; to avoid relocation
-
-; WARNING: Update this file by reviewing the image size
-; of the debug-generated dll files; release images
-; should fit in the larger debug-sized space.
-
-; module name base-address max-size
-
-libhttpd.dll 0x6FF00000 0x000A0000
-mod_auth_basic.so 0x6FEF0000 0x00010000
-mod_auth_digest.so 0x6FED0000 0x00020000
-mod_cern_meta.so 0x6FEC0000 0x00010000
-mod_expires.so 0x6FEB0000 0x00010000
-mod_headers.so 0x6FEA0000 0x00010000
-mod_info.so 0x6FE90000 0x00010000
-mod_rewrite.so 0x6FE70000 0x00020000
-mod_speling.so 0x6FE60000 0x00010000
-mod_status.so 0x6FE50000 0x00010000
-mod_usertrack.so 0x6FE40000 0x00010000
-mod_file_cache.so 0x6FE20000 0x00020000
-mod_unique_id.so 0x6FE00000 0x00010000
-mod_vhost_alias.so 0x6FDF0000 0x00010000
-mod_mime_magic.so 0x6FDE0000 0x00010000
-mod_dav.so 0x6FDC0000 0x00020000
-mod_dav_fs.so 0x6FDB0000 0x00010000
-mod_proxy.so 0x6FDA0000 0x00010000
-mod_proxy_connect.so 0x6FD90000 0x00010000
-mod_proxy_ftp.so 0x6FD80000 0x00010000
-mod_proxy_http.so 0x6FD70000 0x00010000
-mod_ssl.so 0x6FD00000 0x00070000
-mod_actions.so 0x6FCE0000 0x00010000
-mod_alias.so 0x6FCD0000 0x00010000
-mod_asis.so 0x6FCC0000 0x00010000
-mod_autoindex.so 0x6FCA0000 0x00010000
-mod_cgi.so 0x6FC90000 0x00010000
-mod_dir.so 0x6FC80000 0x00010000
-mod_env.so 0x6FC70000 0x00010000
-mod_imap.so 0x6FC60000 0x00010000
-mod_include.so 0x6FC50000 0x00010000
-mod_isapi.so 0x6FC40000 0x00010000
-mod_log_config.so 0x6FC30000 0x00010000
-mod_mime.so 0x6FC20000 0x00010000
-mod_negotiation.so 0x6FC10000 0x00010000
-mod_setenvif.so 0x6FC00000 0x00010000
-mod_userdir.so 0x6FBF0000 0x00010000
-mod_cache.so 0x6FBE0000 0x00010000
-mod_disk_cache.so 0x6FBD0000 0x00010000
-mod_mem_cache.so 0x6FBC0000 0x00010000
-mod_deflate.so 0x6FBA0000 0x00020000
-mod_ext_filter.so 0x6FB90000 0x00010000
-mod_charset_lite.so 0x6FB80000 0x00010000
-mod_authn_anon.so 0x6FB70000 0x00010000
-mod_authn_dbm.so 0x6FB60000 0x00010000
-mod_authn_default.so 0x6FB50000 0x00010000
-mod_authn_file.so 0x6FB40000 0x00010000
-mod_authz_dbm.so 0x6FB30000 0x00010000
-mod_authz_default.so 0x6FB20000 0x00010000
-mod_authz_groupfile.so 0x6FB10000 0x00010000
-mod_authz_host.so 0x6FB00000 0x00010000
-mod_authz_user.so 0x6FAF0000 0x00010000
-mod_logio.so 0x6FAE0000 0x00010000
-util_ldap.so 0x6FAD0000 0x00010000
-mod_auth_ldap.so 0x6FAC0000 0x00010000
-mod_ident.so 0x6FAB0000 0x00010000
diff --git a/os/win32/ap_regkey.c b/os/win32/ap_regkey.c
deleted file mode 100644
index a351391ff7..0000000000
--- a/os/win32/ap_regkey.c
+++ /dev/null
@@ -1,643 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef WIN32
-
-#include "apr.h"
-#include "arch/win32/apr_arch_file_io.h"
-#include "arch/win32/apr_arch_misc.h"
-#include "ap_regkey.h"
-
-struct ap_regkey_t {
- apr_pool_t *pool;
- HKEY hkey;
-};
-
-
-AP_DECLARE(const ap_regkey_t *) ap_regkey_const(int i)
-{
- static struct ap_regkey_t ap_regkey_consts[7] =
- {
- {NULL, HKEY_CLASSES_ROOT},
- {NULL, HKEY_CURRENT_CONFIG},
- {NULL, HKEY_CURRENT_USER},
- {NULL, HKEY_LOCAL_MACHINE},
- {NULL, HKEY_USERS},
- {NULL, HKEY_PERFORMANCE_DATA},
- {NULL, HKEY_DYN_DATA}
- };
- return ap_regkey_consts + i;
-}
-
-
-apr_status_t regkey_cleanup(void *key)
-{
- ap_regkey_t *regkey = key;
-
- if (regkey->hkey && regkey->hkey != INVALID_HANDLE_VALUE) {
- RegCloseKey(regkey->hkey);
- regkey->hkey = INVALID_HANDLE_VALUE;
- }
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_open(ap_regkey_t **newkey,
- const ap_regkey_t *parentkey,
- const char *keyname,
- apr_int32_t flags,
- apr_pool_t *pool)
-{
- DWORD access = KEY_QUERY_VALUE;
- DWORD exists;
- HKEY hkey;
- LONG rc;
-
- if (flags & APR_READ)
- access |= KEY_READ;
- if (flags & APR_WRITE)
- access |= KEY_WRITE;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t keylen = strlen(keyname) + 1;
- apr_size_t wkeylen = 256;
- apr_wchar_t wkeyname[256];
- apr_status_t rv = apr_conv_utf8_to_ucs2(keyname, &keylen, wkeyname, &wkeylen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (keylen)
- return APR_ENAMETOOLONG;
-
- if (flags & APR_CREATE)
- rc = RegCreateKeyExW(parentkey->hkey, wkeyname, 0, NULL, 0,
- access, NULL, &hkey, &exists);
- else
- rc = RegOpenKeyExW(parentkey->hkey, wkeyname, 0, access, &hkey);
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- if (flags & APR_CREATE)
- rc = RegCreateKeyEx(parentkey->hkey, keyname, 0, NULL, 0,
- access, NULL, &hkey, &exists);
- else
- rc = RegOpenKeyEx(parentkey->hkey, keyname, 0, access, &hkey);
- }
-#endif
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
- if ((flags & APR_EXCL) && (exists == REG_OPENED_EXISTING_KEY)) {
- RegCloseKey(hkey);
- return APR_EEXIST;
- }
-
- *newkey = apr_palloc(pool, sizeof(**newkey));
- (*newkey)->pool = pool;
- (*newkey)->hkey = hkey;
- apr_pool_cleanup_register((*newkey)->pool, (void *)(*newkey),
- regkey_cleanup, apr_pool_cleanup_null);
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_close(ap_regkey_t *regkey)
-{
- apr_status_t stat;
- if ((stat = regkey_cleanup(regkey)) == APR_SUCCESS) {
- apr_pool_cleanup_kill(regkey->pool, regkey, regkey_cleanup);
- }
- return stat;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_remove(const ap_regkey_t *parent,
- const char *keyname,
- apr_pool_t *pool)
-{
- LONG rc;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t keylen = strlen(keyname) + 1;
- apr_size_t wkeylen = 256;
- apr_wchar_t wkeyname[256];
- apr_status_t rv = apr_conv_utf8_to_ucs2(keyname, &keylen, wkeyname, &wkeylen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (keylen)
- return APR_ENAMETOOLONG;
- rc = RegDeleteKeyW(parent->hkey, wkeyname);
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- /* We need to determine if subkeys exist on Win9x, to provide
- * consistent behavior with NT, which returns access denied
- * if subkeys exist when attempting to delete a key.
- */
- DWORD subkeys;
- HKEY hkey;
- rc = RegOpenKeyEx(parent->hkey, keyname, 0, KEY_READ, &hkey);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
- rc = RegQueryInfoKey(hkey, NULL, NULL, NULL, &subkeys, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL);
- RegCloseKey(hkey);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
- else if (subkeys)
- return APR_FROM_OS_ERROR(ERROR_ACCESS_DENIED);
- rc = RegDeleteKey(parent->hkey, keyname);
- }
-#endif
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_get(char **result,
- ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool)
-{
- /* Retrieve a registry string value, and explode any envvars
- * that the system has configured (e.g. %SystemRoot%/someapp.exe)
- */
- LONG rc;
- DWORD type;
- DWORD size = 0;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t valuelen = strlen(valuename) + 1;
- apr_size_t wvallen = 256;
- apr_wchar_t wvalname[256];
- apr_wchar_t *wvalue;
- apr_status_t rv;
- rv = apr_conv_utf8_to_ucs2(valuename, &valuelen, wvalname, &wvallen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (valuelen)
- return APR_ENAMETOOLONG;
- /* Read to NULL buffer to determine value size */
- rc = RegQueryValueExW(key->hkey, wvalname, 0, &type, NULL, &size);
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
- if ((size < 2) || (type != REG_SZ && type != REG_EXPAND_SZ)) {
- return APR_FROM_OS_ERROR(ERROR_INVALID_PARAMETER);
- }
-
- wvalue = apr_palloc(pool, size);
- /* Read value based on size query above */
- rc = RegQueryValueExW(key->hkey, wvalname, 0, &type,
- (LPBYTE)wvalue, &size);
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
- if (type == REG_EXPAND_SZ) {
- apr_wchar_t zbuf[1];
- size = ExpandEnvironmentStringsW(wvalue, zbuf, 0);
- if (size) {
- apr_wchar_t *tmp = wvalue;
- /* The size returned by ExpandEnvironmentStringsW is wchars */
- wvalue = apr_palloc(pool, size * 2);
- size = ExpandEnvironmentStringsW(tmp, wvalue, size);
- }
- }
- else {
- /* count wchars from RegQueryValueExW, rather than bytes */
- size /= 2;
- }
- /* ###: deliberately overallocate all but the trailing null.
- * We could precalculate the exact buffer here instead, the question
- * is a matter of storage v.s. cpu cycles.
- */
- valuelen = (size - 1) * 3 + 1;
- *result = apr_palloc(pool, valuelen);
- rv = apr_conv_ucs2_to_utf8(wvalue, &size, *result, &valuelen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (size)
- return APR_ENAMETOOLONG;
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- /* Read to NULL buffer to determine value size */
- rc = RegQueryValueEx(key->hkey, valuename, 0, &type, NULL, &size);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
-
- if ((size < 1) || (type != REG_SZ && type != REG_EXPAND_SZ)) {
- return APR_FROM_OS_ERROR(ERROR_INVALID_PARAMETER);
- }
-
- *result = apr_palloc(pool, size);
- /* Read value based on size query above */
- rc = RegQueryValueEx(key->hkey, valuename, 0, &type, *result, &size);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
-
- if (type == REG_EXPAND_SZ) {
- /* Advise ExpandEnvironmentStrings that we have a zero char
- * buffer to force computation of the required length.
- */
- char zbuf[1];
- size = ExpandEnvironmentStrings(*result, zbuf, 0);
- if (size) {
- char *tmp = *result;
- *result = apr_palloc(pool, size);
- size = ExpandEnvironmentStrings(tmp, *result, size);
- }
- }
- }
-#endif
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_set(ap_regkey_t *key,
- const char *valuename,
- const char *value,
- apr_int32_t flags,
- apr_pool_t *pool)
-{
- /* Retrieve a registry string value, and explode any envvars
- * that the system has configured (e.g. %SystemRoot%/someapp.exe)
- */
- LONG rc;
- DWORD size = strlen(value) + 1;
- DWORD type = (flags & AP_REGKEY_EXPAND) ? REG_EXPAND_SZ : REG_SZ;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t alloclen;
- apr_size_t valuelen = strlen(valuename) + 1;
- apr_size_t wvallen = 256;
- apr_wchar_t wvalname[256];
- apr_wchar_t *wvalue;
- apr_status_t rv;
- rv = apr_conv_utf8_to_ucs2(valuename, &valuelen, wvalname, &wvallen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (valuelen)
- return APR_ENAMETOOLONG;
-
- wvallen = alloclen = size;
- wvalue = apr_palloc(pool, alloclen * 2);
- rv = apr_conv_utf8_to_ucs2(value, &size, wvalue, &wvallen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (size)
- return APR_ENAMETOOLONG;
-
- /* The size is the number of wchars consumed by apr_conv_utf8_to_ucs2
- * converted to bytes; the trailing L'\0' continues to be counted.
- */
- size = (alloclen - wvallen) * 2;
- rc = RegSetValueExW(key->hkey, wvalname, 0, type,
- (LPBYTE)wvalue, size);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- rc = RegSetValueEx(key->hkey, valuename, 0, type, value, size);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
- }
-#endif
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_raw_get(void **result,
- apr_size_t *resultsize,
- apr_int32_t *resulttype,
- ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool)
-{
- /* Retrieve a registry string value, and explode any envvars
- * that the system has configured (e.g. %SystemRoot%/someapp.exe)
- */
- LONG rc;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t valuelen = strlen(valuename) + 1;
- apr_size_t wvallen = 256;
- apr_wchar_t wvalname[256];
- apr_status_t rv;
- rv = apr_conv_utf8_to_ucs2(valuename, &valuelen, wvalname, &wvallen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (valuelen)
- return APR_ENAMETOOLONG;
- /* Read to NULL buffer to determine value size */
- rc = RegQueryValueExW(key->hkey, wvalname, 0, resulttype,
- NULL, resultsize);
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
-
- /* Read value based on size query above */
- *result = apr_palloc(pool, *resultsize);
- rc = RegQueryValueExW(key->hkey, wvalname, 0, resulttype,
- (LPBYTE)*result, resultsize);
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- /* Read to NULL buffer to determine value size */
- rc = RegQueryValueEx(key->hkey, valuename, 0, resulttype,
- NULL, resultsize);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
-
- /* Read value based on size query above */
- *result = apr_palloc(pool, *resultsize);
- rc = RegQueryValueEx(key->hkey, valuename, 0, resulttype,
- (LPBYTE)*result, resultsize);
- if (rc != ERROR_SUCCESS)
- return APR_FROM_OS_ERROR(rc);
- }
-#endif
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
-
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_raw_set(ap_regkey_t *key,
- const char *valuename,
- const void *value,
- apr_size_t valuesize,
- apr_int32_t valuetype,
- apr_pool_t *pool)
-{
- LONG rc;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t valuelen = strlen(valuename) + 1;
- apr_size_t wvallen = 256;
- apr_wchar_t wvalname[256];
- apr_status_t rv;
- rv = apr_conv_utf8_to_ucs2(valuename, &valuelen, wvalname, &wvallen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (valuelen)
- return APR_ENAMETOOLONG;
-
- rc = RegSetValueExW(key->hkey, wvalname, 0, valuetype,
- (LPBYTE)value, valuesize);
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- rc = RegSetValueEx(key->hkey, valuename, 0, valuetype,
- (LPBYTE)value, valuesize);
- }
-#endif
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_array_get(apr_array_header_t **result,
- ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool)
-{
- /* Retrieve a registry string value, and explode any envvars
- * that the system has configured (e.g. %SystemRoot%/someapp.exe)
- */
- apr_status_t rv;
- void *value;
- char *buf;
- char *tmp;
- DWORD type;
- DWORD size = 0;
-
- rv = ap_regkey_value_raw_get(&value, &size, &type, key, valuename, pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- else if (type != REG_MULTI_SZ) {
- return APR_EINVAL;
- }
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t alloclen;
- apr_size_t valuelen = strlen(valuename) + 1;
- apr_size_t wvallen = 256;
- apr_wchar_t *wvalue = (apr_wchar_t *)value;
-
- /* ###: deliberately overallocate plus two extra nulls.
- * We could precalculate the exact buffer here instead, the question
- * is a matter of storage v.s. cpu cycles.
- */
- size /= 2;
- alloclen = valuelen = size * 3 + 2;
- buf = apr_palloc(pool, valuelen);
- rv = apr_conv_ucs2_to_utf8(value, &size, buf, &valuelen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (size)
- return APR_ENAMETOOLONG;
- buf[(alloclen - valuelen)] = '\0';
- buf[(alloclen - valuelen) + 1] = '\0';
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- /* Small possiblity the array is either unterminated
- * or single NULL terminated. Avert.
- */
- buf = (char *)value;
- if (size < 2 || buf[size - 1] != '\0' || buf[size - 2] != '\0') {
- buf = apr_palloc(pool, size + 2);
- memcpy(buf, value, size);
- buf[size + 1] = '\0';
- buf[size] = '\0';
- }
- }
-#endif
-
- size = 0; /* Element Count */
- for (tmp = buf; *tmp; ++tmp) {
- ++size;
- while (*tmp) {
- ++tmp;
- }
- }
-
- *result = apr_array_make(pool, size, sizeof(char *));
- for (tmp = buf; *tmp; ++tmp) {
- char **newelem = (char **) apr_array_push(*result);
- *newelem = tmp;
- while (*tmp) {
- ++tmp;
- }
- }
-
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_array_set(ap_regkey_t *key,
- const char *valuename,
- int nelts,
- const char * const * elts,
- apr_pool_t *pool)
-{
- /* Retrieve a registry string value, and explode any envvars
- * that the system has configured (e.g. %SystemRoot%/someapp.exe)
- */
- int i;
- const void *value;
- apr_size_t bufsize;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_status_t rv;
- apr_wchar_t *buf;
- apr_wchar_t *tmp;
- apr_size_t bufrem;
-
- bufsize = 1; /* For trailing second null */
- for (i = 0; i < nelts; ++i) {
- bufsize += strlen(elts[i]) + 1;
- }
- if (!nelts) {
- ++bufsize;
- }
-
- bufrem = bufsize;
- buf = apr_palloc(pool, bufsize * 2);
- tmp = buf;
- for (i = 0; i < nelts; ++i) {
- apr_size_t eltsize = strlen(elts[i]) + 1;
- apr_size_t size = eltsize;
- rv = apr_conv_utf8_to_ucs2(elts[i], &size, tmp, &bufrem);
- if (rv != APR_SUCCESS)
- return rv;
- else if (size)
- return APR_ENAMETOOLONG;
- tmp += eltsize;
- }
- if (!nelts) {
- --bufrem;
- (*tmp++) = L'\0';
- }
- --bufrem;
- *tmp = L'\0'; /* Trailing second null */
-
- bufsize = (bufsize - bufrem) * 2;
- value = (void*)buf;
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- char *buf;
- char *tmp;
-
- bufsize = 1; /* For trailing second null */
- for (i = 0; i < nelts; ++i) {
- bufsize += strlen(elts[i]) + 1;
- }
- if (!nelts) {
- ++bufsize;
- }
- buf = apr_palloc(pool, bufsize);
- tmp = buf;
- for (i = 0; i < nelts; ++i) {
- apr_size_t len = strlen(elts[i]) + 1;
- memcpy(tmp, elts[i], len);
- tmp += len;
- }
- if (!nelts) {
- (*tmp++) = '\0';
- }
- *tmp = '\0'; /* Trailing second null */
- value = buf;
- }
-#endif
- return ap_regkey_value_raw_set(key, valuename, value,
- bufsize, REG_MULTI_SZ, pool);
-}
-
-
-AP_DECLARE(apr_status_t) ap_regkey_value_remove(const ap_regkey_t *key,
- const char *valuename,
- apr_pool_t *pool)
-{
- LONG rc;
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t valuelen = strlen(valuename) + 1;
- apr_size_t wvallen = 256;
- apr_wchar_t wvalname[256];
- apr_status_t rv = apr_conv_utf8_to_ucs2(valuename, &valuelen, wvalname, &wvallen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (valuelen)
- return APR_ENAMETOOLONG;
- rc = RegDeleteValueW(key->hkey, wvalname);
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- rc = RegDeleteValue(key->hkey, valuename);
- }
-#endif
- if (rc != ERROR_SUCCESS) {
- return APR_FROM_OS_ERROR(rc);
- }
- return APR_SUCCESS;
-}
-
-#endif /* defined WIN32 */
diff --git a/os/win32/modules.c b/os/win32/modules.c
deleted file mode 100644
index 447f9cd886..0000000000
--- a/os/win32/modules.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* modules.c --- major modules compiled into Apache for Win32.
- * Only insert an entry for a module if it must be compiled into
- * the core server
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-
-extern module core_module;
-extern module win32_module;
-extern module mpm_winnt_module;
-extern module http_module;
-extern module so_module;
-
-AP_DECLARE_DATA module *ap_prelinked_modules[] = {
- &core_module,
- &win32_module,
- &mpm_winnt_module,
- &http_module,
- &so_module,
- NULL
-};
-
-ap_module_symbol_t ap_prelinked_module_symbols[] = {
- {"core_module", &core_module},
- {"win32_module", &win32_module},
- {"mpm_winnt_module", &mpm_winnt_module},
- {"http_module", &http_module},
- {"so_module", &so_module},
- {NULL, NULL}
-};
-
-AP_DECLARE_DATA module *ap_preloaded_modules[] = {
- &core_module,
- &win32_module,
- &mpm_winnt_module,
- &http_module,
- &so_module,
- NULL
-};
diff --git a/os/win32/os.h b/os/win32/os.h
deleted file mode 100644
index 1a0fafcbdb..0000000000
--- a/os/win32/os.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef WIN32
-
-#ifndef AP_OS_H
-#define AP_OS_H
-/* Delegate windows include to the apr.h header, if USER or GDI declarations
- * are required (for a window rather than console application), include
- * windows.h prior to any other Apache header files.
- */
-#include "apr_pools.h"
-
-#include <io.h>
-#include <fcntl.h>
-
-#define PLATFORM "Win32"
-
-/* going away shortly... */
-#define HAVE_DRIVE_LETTERS
-#define HAVE_UNC_PATHS
-#define CASE_BLIND_FILESYSTEM
-
-#define APACHE_MPM_DIR "server/mpm/winnt" /* generated on unix */
-
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* BIG RED WARNING: exit() is mapped to allow us to capture the exit
- * status. This header must only be included from modules linked into
- * the ApacheCore.dll - since it's a horrible behavior to exit() from
- * any module outside the main() block, and we -will- assume it's a
- * fatal error.
- */
-
-AP_DECLARE_DATA extern int real_exit_code;
-
-#define exit(status) ((exit)((real_exit_code==2) ? (real_exit_code = (status)) \
- : ((real_exit_code = 0), (status))))
-
-
-#ifdef AP_DECLARE_EXPORT
-
-/* Defined in util_win32.c and available only to the core module for
- * win32 MPM design.
- */
-
-AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p);
-
-typedef enum {
- AP_DLL_WINBASEAPI = 0, // kernel32 From WinBase.h
- AP_DLL_WINADVAPI = 1, // advapi32 From WinBase.h
- AP_DLL_WINSOCKAPI = 2, // mswsock From WinSock.h
- AP_DLL_WINSOCK2API = 3, // ws2_32 From WinSock2.h
- AP_DLL_defined = 4 // must define as last idx_ + 1
-} ap_dlltoken_e;
-
-FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal);
-
-PSECURITY_ATTRIBUTES GetNullACL();
-void CleanNullACL(void *sa);
-
-DWORD wait_for_many_objects(DWORD nCount, CONST HANDLE *lpHandles,
- DWORD dwSeconds);
-
-int set_listeners_noninheritable(apr_pool_t *p);
-
-
-#define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
- typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
- static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
- __inline rettype ap_winapi_##fn args \
- { if (!ap_winapi_pfn_##fn) \
- ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
- return (*(ap_winapi_pfn_##fn)) names; }; \
-
-/* Win2K kernel only */
-AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINADVAPI, BOOL, WINAPI, ChangeServiceConfig2A, 0, (
- SC_HANDLE hService,
- DWORD dwInfoLevel,
- LPVOID lpInfo),
- (hService, dwInfoLevel, lpInfo));
-#undef ChangeServiceConfig2
-#define ChangeServiceConfig2 ap_winapi_ChangeServiceConfig2A
-
-/* WinNT kernel only */
-AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
- IN HANDLE hFile),
- (hFile));
-#undef CancelIo
-#define CancelIo ap_winapi_CancelIo
-
-/* Win9x kernel only */
-AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, DWORD, WINAPI, RegisterServiceProcess, 0, (
- DWORD dwProcessId,
- DWORD dwType),
- (dwProcessId, dwType));
-#define RegisterServiceProcess ap_winapi_RegisterServiceProcess
-
-#endif /* def AP_DECLARE_EXPORT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ndef AP_OS_H */
-#endif /* def WIN32 */
diff --git a/os/win32/util_win32.c b/os/win32/util_win32.c
deleted file mode 100644
index c456e444f1..0000000000
--- a/os/win32/util_win32.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_strings.h"
-#include "arch/win32/apr_arch_file_io.h"
-#include "arch/win32/apr_arch_misc.h"
-
-#include "httpd.h"
-#include "http_log.h"
-
-#include <stdarg.h>
-#include <time.h>
-#include <stdlib.h>
-
-
-AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p)
-{
- apr_wchar_t wbinpath[APR_PATH_MAX];
-
-#if APR_HAS_UNICODE_FS
- IF_WIN_OS_IS_UNICODE
- {
- apr_size_t binlen;
- apr_size_t wbinlen;
- apr_status_t rv;
- if (!GetModuleFileNameW(NULL, wbinpath, sizeof(wbinpath)
- / sizeof(apr_wchar_t))) {
- return apr_get_os_error();
- }
- wbinlen = wcslen(wbinpath) + 1;
- binlen = (wbinlen - 1) * 3 + 1;
- *binpath = apr_palloc(p, binlen);
- rv = apr_conv_ucs2_to_utf8(wbinpath, &wbinlen, *binpath, &binlen);
- if (rv != APR_SUCCESS)
- return rv;
- else if (wbinlen)
- return APR_ENAMETOOLONG;
- }
-#endif /* APR_HAS_UNICODE_FS */
-#if APR_HAS_ANSI_FS
- ELSE_WIN_OS_IS_ANSI
- {
- /* share the same scratch buffer */
- char *pathbuf = (char*) wbinpath;
- if (!GetModuleFileName(NULL, pathbuf, sizeof(wbinpath))) {
- return apr_get_os_error();
- }
- *binpath = apr_pstrdup(p, pathbuf);
- }
-#endif
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
- const request_rec *r,
- apr_proc_t *newproc, const char *progname,
- const char * const *args,
- const char * const *env,
- apr_procattr_t *attr, apr_pool_t *p)
-{
- return apr_proc_create(newproc, progname, args, env, attr, p);
-}
-
-
-/* This code is stolen from misc/win32/misc.c and apr_private.h
- * This helper code resolves late bound entry points
- * missing from one or more releases of the Win32 API...
- * but it sure would be nice if we didn't duplicate this code
- * from the APR ;-)
- */
-static const char* const lateDllName[DLL_defined] = {
- "kernel32", "advapi32", "mswsock", "ws2_32" };
-static HMODULE lateDllHandle[DLL_defined] = {
- NULL, NULL, NULL, NULL };
-
-
-FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal)
-{
- if (!lateDllHandle[fnLib]) {
- lateDllHandle[fnLib] = LoadLibrary(lateDllName[fnLib]);
- if (!lateDllHandle[fnLib])
- return NULL;
- }
- if (ordinal)
- return GetProcAddress(lateDllHandle[fnLib], (char *) ordinal);
- else
- return GetProcAddress(lateDllHandle[fnLib], fnName);
-}
-
-
-/* To share the semaphores with other processes, we need a NULL ACL
- * Code from MS KB Q106387
- */
-PSECURITY_ATTRIBUTES GetNullACL()
-{
- PSECURITY_DESCRIPTOR pSD;
- PSECURITY_ATTRIBUTES sa;
-
- sa = (PSECURITY_ATTRIBUTES) LocalAlloc(LPTR, sizeof(SECURITY_ATTRIBUTES));
- sa->nLength = sizeof(sizeof(SECURITY_ATTRIBUTES));
-
- pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
- sa->lpSecurityDescriptor = pSD;
-
- if (pSD == NULL || sa == NULL) {
- return NULL;
- }
- apr_set_os_error(0);
- if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)
- || apr_get_os_error()) {
- LocalFree( pSD );
- LocalFree( sa );
- return NULL;
- }
- if (!SetSecurityDescriptorDacl(pSD, TRUE, (PACL) NULL, FALSE)
- || apr_get_os_error()) {
- LocalFree( pSD );
- LocalFree( sa );
- return NULL;
- }
-
- sa->bInheritHandle = FALSE;
- return sa;
-}
-
-
-void CleanNullACL(void *sa)
-{
- if (sa) {
- LocalFree(((PSECURITY_ATTRIBUTES)sa)->lpSecurityDescriptor);
- LocalFree(sa);
- }
-}
-
-
-/*
- * The Win32 call WaitForMultipleObjects will only allow you to wait for
- * a maximum of MAXIMUM_WAIT_OBJECTS (current 64). Since the threading
- * model in the multithreaded version of apache wants to use this call,
- * we are restricted to a maximum of 64 threads. This is a simplistic
- * routine that will increase this size.
- */
-DWORD wait_for_many_objects(DWORD nCount, CONST HANDLE *lpHandles,
- DWORD dwSeconds)
-{
- time_t tStopTime;
- DWORD dwRet = WAIT_TIMEOUT;
- DWORD dwIndex=0;
- BOOL bFirst = TRUE;
-
- tStopTime = time(NULL) + dwSeconds;
-
- do {
- if (!bFirst)
- Sleep(1000);
- else
- bFirst = FALSE;
-
- for (dwIndex = 0; dwIndex * MAXIMUM_WAIT_OBJECTS < nCount; dwIndex++) {
- dwRet = WaitForMultipleObjects(
- min(MAXIMUM_WAIT_OBJECTS, nCount - (dwIndex * MAXIMUM_WAIT_OBJECTS)),
- lpHandles + (dwIndex * MAXIMUM_WAIT_OBJECTS),
- 0, 0);
-
- if (dwRet != WAIT_TIMEOUT) {
- break;
- }
- }
- } while((time(NULL) < tStopTime) && (dwRet == WAIT_TIMEOUT));
-
- return dwRet;
-}
diff --git a/server/.cvsignore b/server/.cvsignore
deleted file mode 100644
index 43f85eb239..0000000000
--- a/server/.cvsignore
+++ /dev/null
@@ -1,23 +0,0 @@
-Makefile
-.deps
-.libs
-*.lo
-*.la
-test_char.h
-gen_test_char
-export_files
-exports.c
-export_vars.h
-Debug
-Release
-ApacheCoreOS2.def
-httpd.exp
-*.plg
-*.dep
-*.mak
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
-buildmarked.c
diff --git a/server/.indent.pro b/server/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/server/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/server/Makefile.in b/server/Makefile.in
deleted file mode 100644
index 871d4e8dd7..0000000000
--- a/server/Makefile.in
+++ /dev/null
@@ -1,82 +0,0 @@
-
-CLEAN_TARGETS = gen_test_char test_char.h gen_uri_delims uri_delims.h \
- ApacheCoreOS2.def httpd.exp export_files \
- exports.c export_vars.h
-
-SUBDIRS = mpm
-
-LTLIBRARY_NAME = libmain.la
-LTLIBRARY_SOURCES = \
- test_char.h \
- config.c log.c main.c vhost.c util.c \
- util_script.c util_md5.c util_cfgtree.c util_ebcdic.c util_time.c \
- connection.c listen.c \
- mpm_common.c util_charset.c util_debug.c util_xml.c \
- util_filter.c exports.c buildmark.c \
- scoreboard.c error_bucket.c protocol.c core.c request.c provider.c \
- eoc_bucket.c
-
-TARGETS = delete-exports $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h httpd.exp
-
-include $(top_builddir)/build/rules.mk
-include $(top_srcdir)/build/library.mk
-
-gen_test_char_OBJECTS = gen_test_char.lo util_debug.lo
-gen_test_char: $(gen_test_char_OBJECTS)
- $(LINK) $(EXTRA_LDFLAGS) $(gen_test_char_OBJECTS) $(EXTRA_LIBS)
-
-test_char.h: gen_test_char
- ./gen_test_char > test_char.h
-
-util.lo: test_char.h
-
-EXPORT_DIRS = $(top_srcdir)/include $(top_srcdir)/os/$(OS_DIR) $(APR_INCLUDEDIR) $(APU_INCLUDEDIR) $(top_srcdir)/modules/http
-
-# If export_files is a dependency here, but we remove it during this stage,
-# when exports.c is generated, make will not detect that export_files is no
-# longer here and deadlock. So, export_files can't be a dependency of
-# delete-exports.
-delete-exports:
- rm -f buildmark.lo
- @if test -f exports.c; then \
- if test -f export_files; then \
- files=`cat export_files`; \
- headers="`find $$files -newer exports.c`"; \
- if test -n "$$headers"; then \
- echo Found newer headers. Will rebuild exports.c.; \
- echo rm -f exports.c export_files; \
- rm -f exports.c export_files; \
- fi; \
- else \
- rm -f exports.c; \
- fi; \
- fi
-
-export_files:
- tmp=export_files_unsorted.txt; \
- rm -f $$tmp && touch $$tmp; \
- for dir in $(EXPORT_DIRS); do \
- ls $$dir/*.h >> $$tmp; \
- done; \
- sort -u $$tmp > $@; \
- rm -f $$tmp
-
-exports.c: export_files
- $(AWK) -f $(top_srcdir)/build/make_exports.awk `cat $?` > $@
-
-export_vars.h: export_files
- $(AWK) -f $(top_srcdir)/build/make_var_export.awk `cat $?` > $@
-
-# Rule to make def file for OS/2 core dll
-ApacheCoreOS2.def: exports.c export_vars.h $(top_srcdir)/os/$(OS_DIR)/core_header.def
- cat $(top_srcdir)/os/$(OS_DIR)/core_header.def > $@
- $(CPP) $< $(ALL_CPPFLAGS) $(ALL_INCLUDES) | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$$/ "\1"/' >> $@
- $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep "^[a-z]" | sed -e 's/^\(.*\)$$/ "\1"/' >> $@
-
-# Rule to make exp file for AIX DSOs
-httpd.exp: exports.c export_vars.h
- @echo "#! ." > $@
- @echo "* This file was AUTOGENERATED at build time." >> $@
- @echo "* Please do not edit by hand." >> $@
- $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) exports.c | grep "ap_hack_" | grep -v apr_ | sed -e 's/^.*[)]\(.*\);$$/\1/' >> $@
- $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep -v apr_ | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' >> $@
diff --git a/server/NWGNUmakefile b/server/NWGNUmakefile
deleted file mode 100644
index f2f6da75f7..0000000000
--- a/server/NWGNUmakefile
+++ /dev/null
@@ -1,251 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- ../build \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(APR)/include \
- $(AP_WORK)/include \
- $(APRUTIL)/include \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = genchars
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Generate Test Characters
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = genchars
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\NWGNUNetWare.rul
-#
-NLM_VERSION = 1,0,0
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =_LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =_LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-$(OBJDIR)/genchars.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/gen_test_char.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place.
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/server/buildmark.c b/server/buildmark.c
deleted file mode 100644
index 62cccdf487..0000000000
--- a/server/buildmark.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-#include "httpd.h"
-
-#if defined(__DATE__) && defined(__TIME__)
-static const char server_built[] = __DATE__ " " __TIME__;
-#else
-static const char server_built[] = "unknown";
-#endif
-
-AP_DECLARE(const char *) ap_get_server_built()
-{
- return server_built;
-}
diff --git a/server/config.c b/server/config.c
deleted file mode 100644
index 5b48492644..0000000000
--- a/server/config.c
+++ /dev/null
@@ -1,2056 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_config.c: once was auxillary functions for reading httpd's config
- * file and converting filenames into a namespace
- *
- * Rob McCool
- *
- * Wall-to-wall rewrite for Apache... commands which are part of the
- * server core can now be found next door in "http_core.c". Now contains
- * general command loop, and functions which do bookkeeping for the new
- * Apache config stuff (modules and configuration vectors).
- *
- * rst
- *
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_file_io.h"
-#include "apr_fnmatch.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "http_core.h"
-#include "http_log.h" /* for errors in parse_htaccess */
-#include "http_request.h" /* for default_handler (see invoke_handler) */
-#include "http_main.h"
-#include "http_vhost.h"
-#include "util_cfgtree.h"
-#include "mpm.h"
-
-
-AP_DECLARE_DATA const char *ap_server_argv0 = NULL;
-
-AP_DECLARE_DATA const char *ap_server_root = NULL;
-
-AP_DECLARE_DATA apr_array_header_t *ap_server_pre_read_config = NULL;
-AP_DECLARE_DATA apr_array_header_t *ap_server_post_read_config = NULL;
-AP_DECLARE_DATA apr_array_header_t *ap_server_config_defines = NULL;
-
-AP_DECLARE_DATA ap_directive_t *ap_conftree = NULL;
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(header_parser)
- APR_HOOK_LINK(pre_config)
- APR_HOOK_LINK(post_config)
- APR_HOOK_LINK(open_logs)
- APR_HOOK_LINK(child_init)
- APR_HOOK_LINK(handler)
- APR_HOOK_LINK(quick_handler)
- APR_HOOK_LINK(optional_fn_retrieve)
-)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, header_parser,
- (request_rec *r), (r), OK, DECLINED)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, pre_config,
- (apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp),
- (pconf, plog, ptemp), OK, DECLINED)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, post_config,
- (apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s),
- (pconf, plog, ptemp, s), OK, DECLINED)
-
-/* During the course of debugging I expanded this macro out, so
- * rather than remove all the useful information there is in the
- * following lines, I'm going to leave it here in case anyone
- * else finds it useful.
- *
- * Ben has looked at it and thinks it correct :)
- *
-AP_DECLARE(int) ap_hook_post_config(ap_HOOK_post_config_t *pf,
- const char * const *aszPre,
- const char * const *aszSucc,
- int nOrder)
-{
- ap_LINK_post_config_t *pHook;
-
- if (!_hooks.link_post_config) {
- _hooks.link_post_config = apr_array_make(apr_hook_global_pool, 1,
- sizeof(ap_LINK_post_config_t));
- apr_hook_sort_register("post_config", &_hooks.link_post_config);
- }
-
- pHook = apr_array_push(_hooks.link_post_config);
- pHook->pFunc = pf;
- pHook->aszPredecessors = aszPre;
- pHook->aszSuccessors = aszSucc;
- pHook->nOrder = nOrder;
- pHook->szName = apr_hook_debug_current;
-
- if (apr_hook_debug_enabled)
- apr_hook_debug_show("post_config", aszPre, aszSucc);
-}
-
-AP_DECLARE(apr_array_header_t *) ap_hook_get_post_config(void) {
- return _hooks.link_post_config;
-}
-
-AP_DECLARE(int) ap_run_post_config(apr_pool_t *pconf,
- apr_pool_t *plog,
- apr_pool_t *ptemp,
- server_rec *s)
-{
- ap_LINK_post_config_t *pHook;
- int n;
-
- if(!_hooks.link_post_config)
- return;
-
- pHook = (ap_LINK_post_config_t *)_hooks.link_post_config->elts;
- for (n = 0; n < _hooks.link_post_config->nelts; ++n)
- pHook[n].pFunc (pconf, plog, ptemp, s);
-}
- */
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, open_logs,
- (apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp, server_rec *s),
- (pconf, plog, ptemp, s), OK, DECLINED)
-
-AP_IMPLEMENT_HOOK_VOID(child_init,
- (apr_pool_t *pchild, server_rec *s),
- (pchild, s))
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(int, handler, (request_rec *r),
- (r), DECLINED)
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r, int lookup),
- (r, lookup), DECLINED)
-
-AP_IMPLEMENT_HOOK_VOID(optional_fn_retrieve, (void), ())
-
-/****************************************************************
- *
- * We begin with the functions which deal with the linked list
- * of modules which control just about all of the server operation.
- */
-
-/* total_modules is the number of modules that have been linked
- * into the server.
- */
-static int total_modules = 0;
-
-/* dynamic_modules is the number of modules that have been added
- * after the pre-loaded ones have been set up. It shouldn't be larger
- * than DYNAMIC_MODULE_LIMIT.
- */
-static int dynamic_modules = 0;
-
-AP_DECLARE_DATA module *ap_top_module = NULL;
-AP_DECLARE_DATA module **ap_loaded_modules=NULL;
-
-typedef int (*handler_func)(request_rec *);
-typedef void *(*dir_maker_func)(apr_pool_t *, char *);
-typedef void *(*merger_func)(apr_pool_t *, void *, void *);
-
-/* maximum nesting level for config directories */
-#ifndef AP_MAX_INCLUDE_DIR_DEPTH
-#define AP_MAX_INCLUDE_DIR_DEPTH (128)
-#endif
-
-/* Dealing with config vectors. These are associated with per-directory,
- * per-server, and per-request configuration, and have a void* pointer for
- * each modules. The nature of the structure pointed to is private to the
- * module in question... the core doesn't (and can't) know. However, there
- * are defined interfaces which allow it to create instances of its private
- * per-directory and per-server structures, and to merge the per-directory
- * structures of a directory and its subdirectory (producing a new one in
- * which the defaults applying to the base directory have been properly
- * overridden).
- */
-
-static ap_conf_vector_t *create_empty_config(apr_pool_t *p)
-{
- void *conf_vector = apr_pcalloc(p, sizeof(void *) *
- (total_modules + DYNAMIC_MODULE_LIMIT));
- return conf_vector;
-}
-
-static ap_conf_vector_t *create_default_per_dir_config(apr_pool_t *p)
-{
- void **conf_vector = apr_pcalloc(p, sizeof(void *) *
- (total_modules + DYNAMIC_MODULE_LIMIT));
- module *modp;
-
- for (modp = ap_top_module; modp; modp = modp->next) {
- dir_maker_func df = modp->create_dir_config;
-
- if (df)
- conf_vector[modp->module_index] = (*df)(p, NULL);
- }
-
- return (ap_conf_vector_t *)conf_vector;
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_merge_per_dir_configs(apr_pool_t *p,
- ap_conf_vector_t *base,
- ap_conf_vector_t *new_conf)
-{
- void **conf_vector = apr_palloc(p, sizeof(void *) * total_modules);
- void **base_vector = (void **)base;
- void **new_vector = (void **)new_conf;
- module *modp;
-
- for (modp = ap_top_module; modp; modp = modp->next) {
- int i = modp->module_index;
-
- if (!new_vector[i]) {
- conf_vector[i] = base_vector[i];
- }
- else {
- merger_func df = modp->merge_dir_config;
- if (df && base_vector[i]) {
- conf_vector[i] = (*df)(p, base_vector[i], new_vector[i]);
- }
- else
- conf_vector[i] = new_vector[i];
- }
- }
-
- return (ap_conf_vector_t *)conf_vector;
-}
-
-static ap_conf_vector_t *create_server_config(apr_pool_t *p, server_rec *s)
-{
- void **conf_vector = apr_pcalloc(p, sizeof(void *) *
- (total_modules + DYNAMIC_MODULE_LIMIT));
- module *modp;
-
- for (modp = ap_top_module; modp; modp = modp->next) {
- if (modp->create_server_config)
- conf_vector[modp->module_index] = (*modp->create_server_config)(p, s);
- }
-
- return (ap_conf_vector_t *)conf_vector;
-}
-
-static void merge_server_configs(apr_pool_t *p, ap_conf_vector_t *base,
- ap_conf_vector_t *virt)
-{
- /* Can reuse the 'virt' vector for the spine of it, since we don't
- * have to deal with the moral equivalent of .htaccess files here...
- */
-
- void **base_vector = (void **)base;
- void **virt_vector = (void **)virt;
- module *modp;
-
- for (modp = ap_top_module; modp; modp = modp->next) {
- merger_func df = modp->merge_server_config;
- int i = modp->module_index;
-
- if (!virt_vector[i])
- virt_vector[i] = base_vector[i];
- else if (df)
- virt_vector[i] = (*df)(p, base_vector[i], virt_vector[i]);
- }
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_request_config(apr_pool_t *p)
-{
- return create_empty_config(p);
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_conn_config(apr_pool_t *p)
-{
- return create_empty_config(p);
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_per_dir_config(apr_pool_t *p)
-{
- return create_empty_config(p);
-}
-
-static int ap_invoke_filter_init(ap_filter_t *filters)
-{
- while (filters) {
- if (filters->frec->filter_init_func) {
- int result = filters->frec->filter_init_func(filters);
- if (result != OK) {
- return result;
- }
- }
- filters = filters->next;
- }
- return OK;
-}
-
-AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r)
-{
- const char *handler;
- const char *p;
- int result;
- const char *old_handler = r->handler;
-
- /*
- * The new insert_filter stage makes the most sense here. We only use
- * it when we are going to run the request, so we must insert filters
- * if any are available. Since the goal of this phase is to allow all
- * modules to insert a filter if they want to, this filter returns
- * void. I just can't see any way that this filter can reasonably
- * fail, either your modules inserts something or it doesn't. rbb
- */
- ap_run_insert_filter(r);
-
- /* Before continuing, allow each filter that is in the two chains to
- * run their init function to let them do any magic before we could
- * start generating data.
- */
- result = ap_invoke_filter_init(r->input_filters);
- if (result != OK) {
- return result;
- }
- result = ap_invoke_filter_init(r->output_filters);
- if (result != OK) {
- return result;
- }
-
- if (!r->handler) {
- handler = r->content_type ? r->content_type : ap_default_type(r);
- if ((p=ap_strchr_c(handler, ';')) != NULL) {
- char *new_handler = (char *)apr_pmemdup(r->pool, handler,
- p - handler + 1);
- char *p2 = new_handler + (p - handler);
- handler = new_handler;
-
- /* MIME type arguments */
- while (p2 > handler && p2[-1] == ' ')
- --p2; /* strip trailing spaces */
-
- *p2='\0';
- }
-
- r->handler = handler;
- }
-
- result = ap_run_handler(r);
-
- r->handler = old_handler;
-
- if (result == DECLINED && r->handler && r->filename) {
- ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
- "handler \"%s\" not found for: %s", r->handler, r->filename);
- }
-
- return result == DECLINED ? HTTP_INTERNAL_SERVER_ERROR : result;
-}
-
-AP_DECLARE(int) ap_method_is_limited(cmd_parms *cmd, const char *method)
-{
- int methnum;
-
- methnum = ap_method_number_of(method);
-
- /*
- * A method number either hardcoded into apache or
- * added by a module and registered.
- */
- if (methnum != M_INVALID) {
- return (cmd->limited & (AP_METHOD_BIT << methnum)) ? 1 : 0;
- }
-
- return 0; /* not found */
-}
-
-AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p)
-{
- if (m->register_hooks) {
- if (getenv("SHOW_HOOKS")) {
- printf("Registering hooks for %s\n", m->name);
- apr_hook_debug_enabled = 1;
- }
-
- apr_hook_debug_current = m->name;
- m->register_hooks(p);
- }
-}
-
-/* One-time setup for precompiled modules --- NOT to be done on restart */
-
-AP_DECLARE(const char *) ap_add_module(module *m, apr_pool_t *p)
-{
- /* This could be called from a LoadModule httpd.conf command,
- * after the file has been linked and the module structure within it
- * teased out...
- */
-
- if (m->version != MODULE_MAGIC_NUMBER_MAJOR) {
- return apr_psprintf(p, "Module \"%s\" is not compatible with this "
- "version of Apache (found %d, need %d). Please "
- "contact the vendor for the correct version.",
- m->name, m->version, MODULE_MAGIC_NUMBER_MAJOR);
- }
-
- if (m->next == NULL) {
- m->next = ap_top_module;
- ap_top_module = m;
- }
-
- if (m->module_index == -1) {
- m->module_index = total_modules++;
- dynamic_modules++;
-
- if (dynamic_modules > DYNAMIC_MODULE_LIMIT) {
- return apr_psprintf(p, "Module \"%s\" could not be loaded, "
- "because the dynamic module limit was "
- "reached. Please increase "
- "DYNAMIC_MODULE_LIMIT and recompile.", m->name);
- }
- }
-
- /* Some C compilers put a complete path into __FILE__, but we want
- * only the filename (e.g. mod_includes.c). So check for path
- * components (Unix and DOS), and remove them.
- */
-
- if (ap_strrchr_c(m->name, '/'))
- m->name = 1 + ap_strrchr_c(m->name, '/');
-
- if (ap_strrchr_c(m->name, '\\'))
- m->name = 1 + ap_strrchr_c(m->name, '\\');
-
-#ifdef _OSD_POSIX
- /* __FILE__ =
- * "*POSIX(/home/martin/apache/src/modules/standard/mod_info.c)"
- */
-
- /* We cannot fix the string in-place, because it's const */
- if (m->name[strlen(m->name)-1] == ')') {
- char *tmp = strdup(m->name); /* FIXME: memory leak, albeit a small one */
- tmp[strlen(tmp)-1] = '\0';
- m->name = tmp;
- }
-#endif /*_OSD_POSIX*/
-
- /* FIXME: is this the right place to call this?
- * It doesn't appear to be
- */
- ap_register_hooks(m, p);
-
- return NULL;
-}
-
-/*
- * remove_module undoes what add_module did. There are some caveats:
- * when the module is removed, its slot is lost so all the current
- * per-dir and per-server configurations are invalid. So we should
- * only ever call this function when you are invalidating almost
- * all our current data. I.e. when doing a restart.
- */
-
-AP_DECLARE(void) ap_remove_module(module *m)
-{
- module *modp;
-
- modp = ap_top_module;
- if (modp == m) {
- /* We are the top module, special case */
- ap_top_module = modp->next;
- m->next = NULL;
- }
- else {
- /* Not the top module, find use. When found modp will
- * point to the module _before_ us in the list
- */
-
- while (modp && modp->next != m) {
- modp = modp->next;
- }
-
- if (!modp) {
- /* Uh-oh, this module doesn't exist */
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "Cannot remove module %s: not found in module list",
- m->name);
- return;
- }
-
- /* Eliminate us from the module list */
- modp->next = modp->next->next;
- }
-
- m->module_index = -1; /* simulate being unloaded, should
- * be unnecessary */
- dynamic_modules--;
- total_modules--;
-}
-
-AP_DECLARE(const char *) ap_add_loaded_module(module *mod, apr_pool_t *p)
-{
- module **m;
- const char *error;
-
- /*
- * Add module pointer to top of chained module list
- */
- error = ap_add_module(mod, p);
- if (error) {
- return error;
- }
-
- /*
- * And module pointer to list of loaded modules
- *
- * Notes: 1. ap_add_module() would already complain if no more space
- * exists for adding a dynamically loaded module
- * 2. ap_add_module() accepts double inclusion, so we have
- * to accept this, too.
- */
- for (m = ap_loaded_modules; *m != NULL; m++)
- ;
- *m++ = mod;
- *m = NULL;
-
- return NULL;
-}
-
-AP_DECLARE(void) ap_remove_loaded_module(module *mod)
-{
- module **m;
- module **m2;
- int done;
-
- /*
- * Remove module pointer from chained module list
- */
- ap_remove_module(mod);
-
- /*
- * Remove module pointer from list of loaded modules
- *
- * Note: 1. We cannot determine if the module was successfully
- * removed by ap_remove_module().
- * 2. We have not to complain explicity when the module
- * is not found because ap_remove_module() did it
- * for us already.
- */
- for (m = m2 = ap_loaded_modules, done = 0; *m2 != NULL; m2++) {
- if (*m2 == mod && done == 0)
- done = 1;
- else
- *m++ = *m2;
- }
-
- *m = NULL;
-}
-
-AP_DECLARE(const char *) ap_setup_prelinked_modules(process_rec *process)
-{
- module **m;
- module **m2;
- const char *error;
-
- apr_hook_global_pool=process->pconf;
-
- /*
- * Initialise total_modules variable and module indices
- */
- total_modules = 0;
- for (m = ap_preloaded_modules; *m != NULL; m++)
- (*m)->module_index = total_modules++;
-
- /*
- * Initialise list of loaded modules
- */
- ap_loaded_modules = (module **)apr_palloc(process->pool,
- sizeof(module *) * (total_modules + DYNAMIC_MODULE_LIMIT + 1));
-
- if (ap_loaded_modules == NULL) {
- return "Ouch! Out of memory in ap_setup_prelinked_modules()!";
- }
-
- for (m = ap_preloaded_modules, m2 = ap_loaded_modules; *m != NULL; )
- *m2++ = *m++;
-
- *m2 = NULL;
-
- /*
- * Initialize chain of linked (=activate) modules
- */
- for (m = ap_prelinked_modules; *m != NULL; m++) {
- error = ap_add_module(*m, process->pconf);
- if (error) {
- return error;
- }
- }
-
- apr_hook_sort_all();
-
- return NULL;
-}
-
-AP_DECLARE(const char *) ap_find_module_name(module *m)
-{
- return m->name;
-}
-
-AP_DECLARE(module *) ap_find_linked_module(const char *name)
-{
- module *modp;
-
- for (modp = ap_top_module; modp; modp = modp->next) {
- if (strcmp(modp->name, name) == 0)
- return modp;
- }
-
- return NULL;
-}
-
-/*****************************************************************
- *
- * Resource, access, and .htaccess config files now parsed by a common
- * command loop.
- *
- * Let's begin with the basics; parsing the line and
- * invoking the function...
- */
-
-static const char *invoke_cmd(const command_rec *cmd, cmd_parms *parms,
- void *mconfig, const char *args)
-{
- char *w, *w2, *w3;
- const char *errmsg = NULL;
-
- if ((parms->override & cmd->req_override) == 0)
- return apr_pstrcat(parms->pool, cmd->name, " not allowed here", NULL);
-
- parms->info = cmd->cmd_data;
- parms->cmd = cmd;
-
- switch (cmd->args_how) {
- case RAW_ARGS:
-#ifdef RESOLVE_ENV_PER_TOKEN
- args = ap_resolve_env(parms->pool,args);
-#endif
- return cmd->AP_RAW_ARGS(parms, mconfig, args);
-
- case NO_ARGS:
- if (*args != 0)
- return apr_pstrcat(parms->pool, cmd->name, " takes no arguments",
- NULL);
-
- return cmd->AP_NO_ARGS(parms, mconfig);
-
- case TAKE1:
- w = ap_getword_conf(parms->pool, &args);
-
- if (*w == '\0' || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name, " takes one argument",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE1(parms, mconfig, w);
-
- case TAKE2:
- w = ap_getword_conf(parms->pool, &args);
- w2 = ap_getword_conf(parms->pool, &args);
-
- if (*w == '\0' || *w2 == '\0' || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name, " takes two arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE2(parms, mconfig, w, w2);
-
- case TAKE12:
- w = ap_getword_conf(parms->pool, &args);
- w2 = ap_getword_conf(parms->pool, &args);
-
- if (*w == '\0' || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name, " takes 1-2 arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE2(parms, mconfig, w, *w2 ? w2 : NULL);
-
- case TAKE3:
- w = ap_getword_conf(parms->pool, &args);
- w2 = ap_getword_conf(parms->pool, &args);
- w3 = ap_getword_conf(parms->pool, &args);
-
- if (*w == '\0' || *w2 == '\0' || *w3 == '\0' || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name, " takes three arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
- case TAKE23:
- w = ap_getword_conf(parms->pool, &args);
- w2 = ap_getword_conf(parms->pool, &args);
- w3 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-
- if (*w == '\0' || *w2 == '\0' || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name,
- " takes two or three arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
- case TAKE123:
- w = ap_getword_conf(parms->pool, &args);
- w2 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
- w3 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-
- if (*w == '\0' || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name,
- " takes one, two or three arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
- case TAKE13:
- w = ap_getword_conf(parms->pool, &args);
- w2 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
- w3 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-
- if (*w == '\0' || (w2 && *w2 && !w3) || *args != 0)
- return apr_pstrcat(parms->pool, cmd->name,
- " takes one or three arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
- case ITERATE:
- while (*(w = ap_getword_conf(parms->pool, &args)) != '\0') {
-
- errmsg = cmd->AP_TAKE1(parms, mconfig, w);
-
- if (errmsg && strcmp(errmsg, DECLINE_CMD) != 0)
- return errmsg;
- }
-
- return errmsg;
-
- case ITERATE2:
- w = ap_getword_conf(parms->pool, &args);
-
- if (*w == '\0' || *args == 0)
- return apr_pstrcat(parms->pool, cmd->name,
- " requires at least two arguments",
- cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
- while (*(w2 = ap_getword_conf(parms->pool, &args)) != '\0') {
-
- errmsg = cmd->AP_TAKE2(parms, mconfig, w, w2);
-
- if (errmsg && strcmp(errmsg, DECLINE_CMD) != 0)
- return errmsg;
- }
-
- return errmsg;
-
- case FLAG:
- w = ap_getword_conf(parms->pool, &args);
-
- if (*w == '\0' || (strcasecmp(w, "on") && strcasecmp(w, "off")))
- return apr_pstrcat(parms->pool, cmd->name, " must be On or Off",
- NULL);
-
- return cmd->AP_FLAG(parms, mconfig, strcasecmp(w, "off") != 0);
-
- default:
- return apr_pstrcat(parms->pool, cmd->name,
- " is improperly configured internally (server bug)",
- NULL);
- }
-}
-
-AP_CORE_DECLARE(const command_rec *) ap_find_command(const char *name,
- const command_rec *cmds)
-{
- while (cmds->name) {
- if (!strcasecmp(name, cmds->name))
- return cmds;
-
- ++cmds;
- }
-
- return NULL;
-}
-
-AP_CORE_DECLARE(const command_rec *) ap_find_command_in_modules(
- const char *cmd_name, module **mod)
-{
- const command_rec *cmdp;
- module *modp;
-
- for (modp = *mod; modp; modp = modp->next) {
- if (modp->cmds && (cmdp = ap_find_command(cmd_name, modp->cmds))) {
- *mod = modp;
- return cmdp;
- }
- }
-
- return NULL;
-}
-
-AP_CORE_DECLARE(void *) ap_set_config_vectors(server_rec *server,
- ap_conf_vector_t *section_vector,
- const char *section,
- module *mod, apr_pool_t *pconf)
-{
- void *section_config = ap_get_module_config(section_vector, mod);
- void *server_config = ap_get_module_config(server->module_config, mod);
-
- if (!section_config && mod->create_dir_config) {
- /* ### need to fix the create_dir_config functions' prototype... */
- section_config = (*mod->create_dir_config)(pconf, (char *)section);
- ap_set_module_config(section_vector, mod, section_config);
- }
-
- if (!server_config && mod->create_server_config) {
- server_config = (*mod->create_server_config)(pconf, server);
- ap_set_module_config(server->module_config, mod, server_config);
- }
-
- return section_config;
-}
-
-static const char *execute_now(char *cmd_line, const char *args,
- cmd_parms *parms,
- apr_pool_t *p, apr_pool_t *ptemp,
- ap_directive_t **sub_tree,
- ap_directive_t *parent);
-
-static const char *ap_build_config_sub(apr_pool_t *p, apr_pool_t *temp_pool,
- const char *l, cmd_parms *parms,
- ap_directive_t **current,
- ap_directive_t **curr_parent,
- ap_directive_t **conftree)
-{
- const char *retval = NULL;
- const char *args;
- char *cmd_name;
- ap_directive_t *newdir;
- module *mod = ap_top_module;
- const command_rec *cmd;
-
- if (*l == '#' || *l == '\0')
- return NULL;
-
-#if RESOLVE_ENV_PER_TOKEN
- args = l;
-#else
- args = ap_resolve_env(temp_pool, l);
-#endif
-
- cmd_name = ap_getword_conf(p, &args);
- if (*cmd_name == '\0') {
- /* Note: this branch should not occur. An empty line should have
- * triggered the exit further above.
- */
- return NULL;
- }
-
- if (cmd_name[1] != '/') {
- char *lastc = cmd_name + strlen(cmd_name) - 1;
- if (*lastc == '>') {
- *lastc = '\0' ;
- }
- if (cmd_name[0] == '<' && *args == '\0') {
- args = ">";
- }
- }
-
- newdir = apr_pcalloc(p, sizeof(ap_directive_t));
- newdir->filename = parms->config_file->name;
- newdir->line_num = parms->config_file->line_number;
- newdir->directive = cmd_name;
- newdir->args = apr_pstrdup(p, args);
-
- if ((cmd = ap_find_command_in_modules(cmd_name, &mod)) != NULL) {
- if (cmd->req_override & EXEC_ON_READ) {
- ap_directive_t *sub_tree = NULL;
-
- parms->err_directive = newdir;
- retval = execute_now(cmd_name, args, parms, p, temp_pool,
- &sub_tree, *curr_parent);
- if (*current) {
- (*current)->next = sub_tree;
- }
- else {
- *current = sub_tree;
- if (*curr_parent) {
- (*curr_parent)->first_child = (*current);
- }
- if (*current) {
- (*current)->parent = (*curr_parent);
- }
- }
- if (*current) {
- if (!*conftree) {
- /* Before walking *current to the end of the list,
- * set the head to *current.
- */
- *conftree = *current;
- }
- while ((*current)->next != NULL) {
- (*current) = (*current)->next;
- (*current)->parent = (*curr_parent);
- }
- }
- return retval;
- }
- }
-
- if (cmd_name[0] == '<') {
- if (cmd_name[1] != '/') {
- (*current) = ap_add_node(curr_parent, *current, newdir, 1);
- }
- else if (*curr_parent == NULL) {
- parms->err_directive = newdir;
- return apr_pstrcat(p, cmd_name,
- " without matching <", cmd_name + 2,
- " section", NULL);
- }
- else {
- char *bracket = cmd_name + strlen(cmd_name) - 1;
-
- if (*bracket != '>') {
- parms->err_directive = newdir;
- return apr_pstrcat(p, cmd_name,
- "> directive missing closing '>'", NULL);
- }
-
- *bracket = '\0';
-
- if (strcasecmp(cmd_name + 2,
- (*curr_parent)->directive + 1) != 0) {
- parms->err_directive = newdir;
- return apr_pstrcat(p, "Expected </",
- (*curr_parent)->directive + 1, "> but saw ",
- cmd_name, ">", NULL);
- }
-
- *bracket = '>';
-
- /* done with this section; move up a level */
- *current = *curr_parent;
- *curr_parent = (*current)->parent;
- }
- }
- else {
- *current = ap_add_node(curr_parent, *current, newdir, 0);
- }
-
- return retval;
-}
-
-AP_DECLARE(const char *) ap_build_cont_config(apr_pool_t *p,
- apr_pool_t *temp_pool,
- cmd_parms *parms,
- ap_directive_t **current,
- ap_directive_t **curr_parent,
- char *orig_directive)
-{
- char *l;
- char *bracket;
- const char *retval;
- ap_directive_t *sub_tree = NULL;
-
- /* Since this function can be called recursively, allocate
- * the temporary 8k string buffer from the temp_pool rather
- * than the stack to avoid over-running a fixed length stack.
- */
- l = apr_palloc(temp_pool, MAX_STRING_LEN);
-
- bracket = apr_pstrcat(p, orig_directive + 1, ">", NULL);
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, parms->config_file))) {
- if (!memcmp(l, "</", 2)
- && (strcasecmp(l + 2, bracket) == 0)
- && (*curr_parent == NULL)) {
- break;
- }
- retval = ap_build_config_sub(p, temp_pool, l, parms, current,
- curr_parent, &sub_tree);
- if (retval != NULL)
- return retval;
-
- if (sub_tree == NULL && curr_parent != NULL) {
- sub_tree = *curr_parent;
- }
-
- if (sub_tree == NULL && current != NULL) {
- sub_tree = *current;
- }
- }
-
- *current = sub_tree;
- return NULL;
-}
-
-static const char *ap_walk_config_sub(const ap_directive_t *current,
- cmd_parms *parms,
- ap_conf_vector_t *section_vector)
-{
- module *mod = ap_top_module;
-
- while (1) {
- const command_rec *cmd;
-
- if (!(cmd = ap_find_command_in_modules(current->directive, &mod))) {
- parms->err_directive = current;
- return apr_pstrcat(parms->pool, "Invalid command '",
- current->directive,
- "', perhaps mis-spelled or defined by a module "
- "not included in the server configuration",
- NULL);
- }
- else {
- void *dir_config = ap_set_config_vectors(parms->server,
- section_vector,
- parms->path,
- mod,
- parms->pool);
- const char *retval;
-
- /* Once was enough? */
- if (cmd->req_override & EXEC_ON_READ) {
- return NULL;
- }
-
- retval = invoke_cmd(cmd, parms, dir_config, current->args);
- if (retval == NULL) {
- return NULL;
- }
-
- if (strcmp(retval, DECLINE_CMD) != 0) {
- /* If the directive in error has already been set, don't
- * replace it. Otherwise, an error inside a container
- * will be reported as occuring on the first line of the
- * container.
- */
- if (!parms->err_directive) {
- parms->err_directive = current;
- }
-
- return retval;
- }
-
- mod = mod->next; /* Next time around, skip this one */
- }
- }
- /* NOTREACHED */
-}
-
-AP_DECLARE(const char *) ap_walk_config(ap_directive_t *current,
- cmd_parms *parms,
- ap_conf_vector_t *section_vector)
-{
- ap_conf_vector_t *oldconfig = parms->context;
-
- parms->context = section_vector;
-
- /* scan through all directives, executing each one */
- for (; current != NULL; current = current->next) {
- const char *errmsg;
-
- parms->directive = current;
-
- /* actually parse the command and execute the correct function */
- errmsg = ap_walk_config_sub(current, parms, section_vector);
- if (errmsg != NULL) {
- /* restore the context (just in case) */
- parms->context = oldconfig;
- return errmsg;
- }
- }
-
- parms->context = oldconfig;
- return NULL;
-}
-
-AP_DECLARE(const char *) ap_build_config(cmd_parms *parms,
- apr_pool_t *p, apr_pool_t *temp_pool,
- ap_directive_t **conftree)
-{
- ap_directive_t *current = *conftree;
- ap_directive_t *curr_parent = NULL;
- char *l = apr_palloc (temp_pool, MAX_STRING_LEN);
- const char *errmsg;
-
- if (current != NULL) {
- while (current->next) {
- current = current->next;
- }
- }
-
- while (!(ap_cfg_getline(l, MAX_STRING_LEN, parms->config_file))) {
- errmsg = ap_build_config_sub(p, temp_pool, l, parms,
- &current, &curr_parent, conftree);
- if (errmsg != NULL)
- return errmsg;
-
- if (*conftree == NULL && curr_parent != NULL) {
- *conftree = curr_parent;
- }
-
- if (*conftree == NULL && current != NULL) {
- *conftree = current;
- }
- }
-
- if (curr_parent != NULL) {
- errmsg = "";
-
- while (curr_parent != NULL) {
- errmsg = apr_psprintf(p, "%s%s%s:%u: %s> was not closed.",
- errmsg,
- *errmsg == '\0' ? "" : APR_EOL_STR,
- curr_parent->filename,
- curr_parent->line_num,
- curr_parent->directive);
-
- parms->err_directive = curr_parent;
- curr_parent = curr_parent->parent;
- }
-
- return errmsg;
- }
-
- return NULL;
-}
-
-/*
- * Generic command functions...
- */
-
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg)
-{
- int offset = (int)(long)cmd->info;
-
- *(const char **)((char *)struct_ptr + offset) = arg;
-
- return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_int_slot(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg)
-{
- char *endptr;
- char *error_str = NULL;
- int offset = (int)(long)cmd->info;
-
- *(int *)((char*)struct_ptr + offset) = strtol(arg, &endptr, 10);
-
- if ((*arg == '\0') || (*endptr != '\0')) {
- error_str = apr_psprintf(cmd->pool,
- "Invalid value for directive %s, expected integer",
- cmd->directive->directive);
- }
-
- return error_str;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot_lower(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg_)
-{
- char *arg = apr_pstrdup(cmd->pool,arg_);
- int offset = (int)(long)cmd->info;
-
- ap_str_tolower(arg);
- *(char **)((char *)struct_ptr + offset) = arg;
-
- return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_flag_slot(cmd_parms *cmd,
- void *struct_ptr_v, int arg)
-{
- int offset = (int)(long)cmd->info;
- char *struct_ptr = (char *)struct_ptr_v;
-
- *(int *)(struct_ptr + offset) = arg ? 1 : 0;
-
- return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_file_slot(cmd_parms *cmd, void *struct_ptr,
- const char *arg)
-{
- /* Prepend server_root to relative arg.
- * This allows most args to be independent of server_root,
- * so the server can be moved or mirrored with less pain.
- */
- const char *path;
- int offset = (int)(long)cmd->info;
-
- path = ap_server_root_relative(cmd->pool, arg);
-
- if (!path) {
- return apr_pstrcat(cmd->pool, "Invalid file path ",
- arg, NULL);
- }
-
- *(const char **) ((char*)struct_ptr + offset) = path;
-
- return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_deprecated(cmd_parms *cmd,
- void *struct_ptr,
- const char *arg)
-{
- return cmd->cmd->errmsg;
-}
-
-/*****************************************************************
- *
- * Reading whole config files...
- */
-
-static cmd_parms default_parms =
-{NULL, 0, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
-
-AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *file)
-{
- char *newpath = NULL;
- apr_status_t rv;
- rv = apr_filepath_merge(&newpath, ap_server_root, file,
- APR_FILEPATH_TRUENAME, p);
- if (newpath && (rv == APR_SUCCESS || APR_STATUS_IS_EPATHWILD(rv)
- || APR_STATUS_IS_ENOENT(rv)
- || APR_STATUS_IS_ENOTDIR(rv))) {
- return newpath;
- }
- else {
- return NULL;
- }
-}
-
-AP_DECLARE(const char *) ap_soak_end_container(cmd_parms *cmd, char *directive)
-{
- char l[MAX_STRING_LEN];
- const char *args;
- char *cmd_name;
-
- while(!(ap_cfg_getline(l, MAX_STRING_LEN, cmd->config_file))) {
-#if RESOLVE_ENV_PER_TOKEN
- args = l;
-#else
- args = ap_resolve_env(cmd->temp_pool, l);
-#endif
-
- cmd_name = ap_getword_conf(cmd->pool, &args);
- if (cmd_name[0] == '<') {
- if (cmd_name[1] == '/') {
- cmd_name[strlen(cmd_name) - 1] = '\0';
-
- if (strcasecmp(cmd_name + 2, directive + 1) != 0) {
- return apr_pstrcat(cmd->pool, "Expected </",
- directive + 1, "> but saw ",
- cmd_name, ">", NULL);
- }
-
- return NULL; /* found end of container */
- }
- else {
- const char *msg;
-
- if (*args == '\0' && cmd_name[strlen(cmd_name) - 1] == '>') {
- cmd_name[strlen(cmd_name) - 1] = '\0';
- }
-
- if ((msg = ap_soak_end_container(cmd, cmd_name)) != NULL) {
- return msg;
- }
- }
- }
- }
-
- return apr_pstrcat(cmd->pool, "Expected </",
- directive + 1, "> before end of configuration",
- NULL);
-}
-
-static const char *execute_now(char *cmd_line, const char *args,
- cmd_parms *parms,
- apr_pool_t *p, apr_pool_t *ptemp,
- ap_directive_t **sub_tree,
- ap_directive_t *parent)
-{
- module *mod = ap_top_module;
- const command_rec *cmd;
-
- if (!(cmd = ap_find_command_in_modules(cmd_line, &mod))) {
- return apr_pstrcat(parms->pool, "Invalid command '",
- cmd_line,
- "', perhaps mis-spelled or defined by a module "
- "not included in the server configuration",
- NULL);
- }
- else {
- return invoke_cmd(cmd, parms, sub_tree, args);
- }
-}
-
-/* This structure and the following functions are needed for the
- * table-based config file reading. They are passed to the
- * cfg_open_custom() routine.
- */
-
-/* Structure to be passed to cfg_open_custom(): it contains an
- * index which is incremented from 0 to nelts on each call to
- * cfg_getline() (which in turn calls arr_elts_getstr())
- * and an apr_array_header_t pointer for the string array.
- */
-typedef struct {
- apr_array_header_t *array;
- int curr_idx;
-} arr_elts_param_t;
-
-
-/* arr_elts_getstr() returns the next line from the string array. */
-static void *arr_elts_getstr(void *buf, size_t bufsiz, void *param)
-{
- arr_elts_param_t *arr_param = (arr_elts_param_t *)param;
-
- /* End of array reached? */
- if (++arr_param->curr_idx > arr_param->array->nelts)
- return NULL;
-
- /* return the line */
- apr_cpystrn(buf,
- ((char **)arr_param->array->elts)[arr_param->curr_idx - 1],
- bufsiz);
-
- return buf;
-}
-
-
-/* arr_elts_close(): dummy close routine (makes sure no more lines can be read) */
-static int arr_elts_close(void *param)
-{
- arr_elts_param_t *arr_param = (arr_elts_param_t *)param;
-
- arr_param->curr_idx = arr_param->array->nelts;
-
- return 0;
-}
-
-static const char *process_command_config(server_rec *s,
- apr_array_header_t *arr,
- ap_directive_t **conftree,
- apr_pool_t *p,
- apr_pool_t *ptemp)
-{
- const char *errmsg;
- cmd_parms parms;
- arr_elts_param_t arr_parms;
-
- arr_parms.curr_idx = 0;
- arr_parms.array = arr;
-
- parms = default_parms;
- parms.pool = p;
- parms.temp_pool = ptemp;
- parms.server = s;
- parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
- parms.override_opts = OPT_ALL | OPT_INCNOEXEC | OPT_SYM_OWNER | OPT_MULTI;
-
- parms.config_file = ap_pcfg_open_custom(p, "-c/-C directives",
- &arr_parms, NULL,
- arr_elts_getstr, arr_elts_close);
-
- errmsg = ap_build_config(&parms, p, ptemp, conftree);
- ap_cfg_closefile(parms.config_file);
-
- if (errmsg) {
- return apr_pstrcat(p, "Syntax error in -C/-c directive: ", errmsg,
- NULL);
- }
-
- return NULL;
-}
-
-typedef struct {
- char *fname;
-} fnames;
-
-static int fname_alphasort(const void *fn1, const void *fn2)
-{
- const fnames *f1 = fn1;
- const fnames *f2 = fn2;
-
- return strcmp(f1->fname,f2->fname);
-}
-
-static const char *process_resource_config_nofnmatch(server_rec *s,
- const char *fname,
- ap_directive_t **conftree,
- apr_pool_t *p,
- apr_pool_t *ptemp,
- unsigned depth)
-{
- cmd_parms parms;
- ap_configfile_t *cfp;
- const char *error;
-
- if (ap_is_directory(p, fname)) {
- apr_dir_t *dirp;
- apr_finfo_t dirent;
- int current;
- apr_array_header_t *candidates = NULL;
- fnames *fnew;
- apr_status_t rv;
- char *path = apr_pstrdup(p, fname);
-
- if (++depth > AP_MAX_INCLUDE_DIR_DEPTH) {
- return apr_psprintf(p, "Directory %s exceeds the maximum include "
- "directory nesting level of %u. You have "
- "probably a recursion somewhere.", path,
- AP_MAX_INCLUDE_DIR_DEPTH);
- }
-
- /*
- * first course of business is to grok all the directory
- * entries here and store 'em away. Recall we need full pathnames
- * for this.
- */
- rv = apr_dir_open(&dirp, path, p);
- if (rv != APR_SUCCESS) {
- char errmsg[120];
- return apr_psprintf(p, "Could not open config directory %s: %s",
- path, apr_strerror(rv, errmsg, sizeof errmsg));
- }
-
- candidates = apr_array_make(p, 1, sizeof(fnames));
- while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp) == APR_SUCCESS) {
- /* strip out '.' and '..' */
- if (strcmp(dirent.name, ".")
- && strcmp(dirent.name, "..")) {
- fnew = (fnames *) apr_array_push(candidates);
- fnew->fname = ap_make_full_path(p, path, dirent.name);
- }
- }
-
- apr_dir_close(dirp);
- if (candidates->nelts != 0) {
- qsort((void *) candidates->elts, candidates->nelts,
- sizeof(fnames), fname_alphasort);
-
- /*
- * Now recurse these... we handle errors and subdirectories
- * via the recursion, which is nice
- */
- for (current = 0; current < candidates->nelts; ++current) {
- fnew = &((fnames *) candidates->elts)[current];
- error = process_resource_config_nofnmatch(s, fnew->fname,
- conftree, p, ptemp,
- depth);
- if (error) {
- return error;
- }
- }
- }
-
- return NULL;
- }
-
- /* GCC's initialization extensions are soooo nice here... */
- parms = default_parms;
- parms.pool = p;
- parms.temp_pool = ptemp;
- parms.server = s;
- parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
- parms.override_opts = OPT_ALL | OPT_INCNOEXEC | OPT_SYM_OWNER | OPT_MULTI;
-
- if (ap_pcfg_openfile(&cfp, p, fname) != APR_SUCCESS) {
- return apr_pstrcat(p, "Could not open document config file ",
- fname, NULL);
- }
-
- parms.config_file = cfp;
- error = ap_build_config(&parms, p, ptemp, conftree);
- ap_cfg_closefile(cfp);
-
- if (error) {
- return apr_psprintf(p, "Syntax error on line %d of %s: %s",
- parms.err_directive->line_num,
- parms.err_directive->filename, error);
- }
-
- return NULL;
-}
-
-AP_DECLARE(const char *) ap_process_resource_config(server_rec *s,
- const char *fname,
- ap_directive_t **conftree,
- apr_pool_t *p,
- apr_pool_t *ptemp)
-{
- /* XXX: lstat() won't work on the wildcard pattern...
- */
-
- /* don't require conf/httpd.conf if we have a -C or -c switch */
- if ((ap_server_pre_read_config->nelts
- || ap_server_post_read_config->nelts)
- && !(strcmp(fname, ap_server_root_relative(p, SERVER_CONFIG_FILE)))) {
- apr_finfo_t finfo;
-
- if (apr_stat(&finfo, fname, APR_FINFO_LINK | APR_FINFO_TYPE, p) != APR_SUCCESS)
- return NULL;
- }
-
- if (!apr_fnmatch_test(fname)) {
- return process_resource_config_nofnmatch(s, fname, conftree, p, ptemp,
- 0);
- }
- else {
- apr_dir_t *dirp;
- apr_finfo_t dirent;
- int current;
- apr_array_header_t *candidates = NULL;
- fnames *fnew;
- apr_status_t rv;
- char *path = apr_pstrdup(p, fname), *pattern = NULL;
-
- pattern = ap_strrchr(path, '/');
-
- AP_DEBUG_ASSERT(pattern != NULL); /* path must be absolute. */
-
- *pattern++ = '\0';
-
- if (apr_fnmatch_test(path)) {
- return apr_pstrcat(p, "Wildcard patterns not allowed in Include ",
- fname, NULL);
- }
-
- if (!ap_is_directory(p, path)){
- return apr_pstrcat(p, "Include directory '", path, "' not found",
- NULL);
- }
-
- if (!apr_fnmatch_test(pattern)) {
- return apr_pstrcat(p, "Must include a wildcard pattern for "
- "Include ", fname, NULL);
- }
-
- /*
- * first course of business is to grok all the directory
- * entries here and store 'em away. Recall we need full pathnames
- * for this.
- */
- rv = apr_dir_open(&dirp, path, p);
- if (rv != APR_SUCCESS) {
- char errmsg[120];
- return apr_psprintf(p, "Could not open config directory %s: %s",
- path, apr_strerror(rv, errmsg, sizeof errmsg));
- }
-
- candidates = apr_array_make(p, 1, sizeof(fnames));
- while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp) == APR_SUCCESS) {
- /* strip out '.' and '..' */
- if (strcmp(dirent.name, ".")
- && strcmp(dirent.name, "..")
- && (apr_fnmatch(pattern, dirent.name,
- APR_FNM_PERIOD) == APR_SUCCESS)) {
- fnew = (fnames *) apr_array_push(candidates);
- fnew->fname = ap_make_full_path(p, path, dirent.name);
- }
- }
-
- apr_dir_close(dirp);
- if (candidates->nelts != 0) {
- const char *error;
-
- qsort((void *) candidates->elts, candidates->nelts,
- sizeof(fnames), fname_alphasort);
-
- /*
- * Now recurse these... we handle errors and subdirectories
- * via the recursion, which is nice
- */
- for (current = 0; current < candidates->nelts; ++current) {
- fnew = &((fnames *) candidates->elts)[current];
- error = process_resource_config_nofnmatch(s, fnew->fname,
- conftree, p,
- ptemp, 0);
- if (error) {
- return error;
- }
- }
- }
- }
-
- return NULL;
-}
-
-AP_DECLARE(int) ap_process_config_tree(server_rec *s,
- ap_directive_t *conftree,
- apr_pool_t *p,
- apr_pool_t *ptemp)
-{
- const char *errmsg;
- cmd_parms parms;
-
- parms = default_parms;
- parms.pool = p;
- parms.temp_pool = ptemp;
- parms.server = s;
- parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
- parms.override_opts = OPT_ALL | OPT_INCNOEXEC | OPT_SYM_OWNER | OPT_MULTI;
- parms.limited = -1;
-
- errmsg = ap_walk_config(conftree, &parms, s->lookup_defaults);
- if (errmsg) {
- ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, p,
- "Syntax error on line %d of %s:",
- parms.err_directive->line_num,
- parms.err_directive->filename);
- ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, p,
- "%s", errmsg);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- return OK;
-}
-
-AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result,
- request_rec *r, int override,
- int override_opts,
- const char *d, const char *access_name)
-{
- ap_configfile_t *f = NULL;
- cmd_parms parms;
- char *filename = NULL;
- const struct htaccess_result *cache;
- struct htaccess_result *new;
- ap_conf_vector_t *dc = NULL;
- apr_status_t status;
-
- /* firstly, search cache */
- for (cache = r->htaccess; cache != NULL; cache = cache->next) {
- if (cache->override == override && strcmp(cache->dir, d) == 0) {
- *result = cache->htaccess;
- return OK;
- }
- }
-
- parms = default_parms;
- parms.override = override;
- parms.override_opts = override_opts;
- parms.pool = r->pool;
- parms.temp_pool = r->pool;
- parms.server = r->server;
- parms.path = apr_pstrdup(r->pool, d);
-
- /* loop through the access names and find the first one */
- while (access_name[0]) {
- /* AFAICT; there is no use of the actual 'filename' against
- * any canonicalization, so we will simply take the given
- * name, ignoring case sensitivity and aliases
- */
- filename = ap_make_full_path(r->pool, d,
- ap_getword_conf(r->pool, &access_name));
- status = ap_pcfg_openfile(&f, r->pool, filename);
-
- if (status == APR_SUCCESS) {
- const char *errmsg;
- ap_directive_t *temptree = NULL;
-
- dc = ap_create_per_dir_config(r->pool);
-
- parms.config_file = f;
- errmsg = ap_build_config(&parms, r->pool, r->pool, &temptree);
- if (errmsg == NULL)
- errmsg = ap_walk_config(temptree, &parms, dc);
-
- ap_cfg_closefile(f);
-
- if (errmsg) {
- ap_log_rerror(APLOG_MARK, APLOG_ALERT, 0, r,
- "%s: %s", filename, errmsg);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- *result = dc;
- break;
- }
- else {
- if (!APR_STATUS_IS_ENOENT(status)
- && !APR_STATUS_IS_ENOTDIR(status)) {
- ap_log_rerror(APLOG_MARK, APLOG_CRIT, status, r,
- "%s pcfg_openfile: unable to check htaccess file, "
- "ensure it is readable",
- filename);
- apr_table_setn(r->notes, "error-notes",
- "Server unable to read htaccess file, denying "
- "access to be safe");
- return HTTP_FORBIDDEN;
- }
- }
- }
-
- /* cache it */
- new = apr_palloc(r->pool, sizeof(struct htaccess_result));
- new->dir = parms.path;
- new->override = override;
- new->override_opts = override_opts;
- new->htaccess = dc;
-
- /* add to head of list */
- new->next = r->htaccess;
- r->htaccess = new;
-
- return OK;
-}
-
-AP_CORE_DECLARE(const char *) ap_init_virtual_host(apr_pool_t *p,
- const char *hostname,
- server_rec *main_server,
- server_rec **ps)
-{
- server_rec *s = (server_rec *) apr_pcalloc(p, sizeof(server_rec));
-
- /* TODO: this crap belongs in http_core */
- s->process = main_server->process;
- s->server_admin = NULL;
- s->server_hostname = NULL;
- s->error_fname = NULL;
- s->timeout = 0;
- s->keep_alive_timeout = 0;
- s->keep_alive = -1;
- s->keep_alive_max = -1;
- s->error_log = main_server->error_log;
- s->loglevel = main_server->loglevel;
- /* useful default, otherwise we get a port of 0 on redirects */
- s->port = main_server->port;
- s->next = NULL;
-
- s->is_virtual = 1;
- s->names = apr_array_make(p, 4, sizeof(char **));
- s->wild_names = apr_array_make(p, 4, sizeof(char **));
-
- s->module_config = create_empty_config(p);
- s->lookup_defaults = ap_create_per_dir_config(p);
-
- s->limit_req_line = main_server->limit_req_line;
- s->limit_req_fieldsize = main_server->limit_req_fieldsize;
- s->limit_req_fields = main_server->limit_req_fields;
-
- *ps = s;
-
- return ap_parse_vhost_addrs(p, hostname, s);
-}
-
-
-AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server)
-{
- server_rec *virt;
-
- for (virt = main_server->next; virt; virt = virt->next) {
- merge_server_configs(p, main_server->module_config,
- virt->module_config);
-
- virt->lookup_defaults =
- ap_merge_per_dir_configs(p, main_server->lookup_defaults,
- virt->lookup_defaults);
-
- if (virt->server_admin == NULL)
- virt->server_admin = main_server->server_admin;
-
- if (virt->timeout == 0)
- virt->timeout = main_server->timeout;
-
- if (virt->keep_alive_timeout == 0)
- virt->keep_alive_timeout = main_server->keep_alive_timeout;
-
- if (virt->keep_alive == -1)
- virt->keep_alive = main_server->keep_alive;
-
- if (virt->keep_alive_max == -1)
- virt->keep_alive_max = main_server->keep_alive_max;
-
- /* XXX: this is really something that should be dealt with by a
- * post-config api phase
- */
- ap_core_reorder_directories(p, virt);
- }
-
- ap_core_reorder_directories(p, main_server);
-}
-
-/*****************************************************************
- *
- * Getting *everything* configured...
- */
-
-static void init_config_globals(apr_pool_t *p)
-{
- /* Global virtual host hash bucket pointers. Init to null. */
- ap_init_vhost_config(p);
-}
-
-static server_rec *init_server_config(process_rec *process, apr_pool_t *p)
-{
- apr_status_t rv;
- server_rec *s = (server_rec *) apr_pcalloc(p, sizeof(server_rec));
-
- apr_file_open_stderr(&s->error_log, p);
- s->process = process;
- s->port = 0;
- s->server_admin = DEFAULT_ADMIN;
- s->server_hostname = NULL;
- s->error_fname = DEFAULT_ERRORLOG;
- s->loglevel = DEFAULT_LOGLEVEL;
- s->limit_req_line = DEFAULT_LIMIT_REQUEST_LINE;
- s->limit_req_fieldsize = DEFAULT_LIMIT_REQUEST_FIELDSIZE;
- s->limit_req_fields = DEFAULT_LIMIT_REQUEST_FIELDS;
- s->timeout = apr_time_from_sec(DEFAULT_TIMEOUT);
- s->keep_alive_timeout = apr_time_from_sec(DEFAULT_KEEPALIVE_TIMEOUT);
- s->keep_alive_max = DEFAULT_KEEPALIVE;
- s->keep_alive = 1;
- s->next = NULL;
- s->addrs = apr_pcalloc(p, sizeof(server_addr_rec));
-
- /* NOT virtual host; don't match any real network interface */
- rv = apr_sockaddr_info_get(&s->addrs->host_addr,
- NULL, APR_INET, 0, 0, p);
- ap_assert(rv == APR_SUCCESS); /* otherwise: bug or no storage */
-
- s->addrs->host_port = 0; /* matches any port */
- s->addrs->virthost = ""; /* must be non-NULL */
- s->names = s->wild_names = NULL;
-
- s->module_config = create_server_config(p, s);
- s->lookup_defaults = create_default_per_dir_config(p);
-
- return s;
-}
-
-
-AP_DECLARE(server_rec*) ap_read_config(process_rec *process, apr_pool_t *ptemp,
- const char *filename,
- ap_directive_t **conftree)
-{
- const char *confname, *error;
- apr_pool_t *p = process->pconf;
- server_rec *s = init_server_config(process, p);
-
- init_config_globals(p);
-
- /* All server-wide config files now have the SAME syntax... */
- error = process_command_config(s, ap_server_pre_read_config, conftree,
- p, ptemp);
- if (error) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, 0, NULL, "%s: %s",
- ap_server_argv0, error);
- return NULL;
- }
-
- /* process_command_config may change the ServerRoot so
- * compute this config file name afterwards.
- */
- confname = ap_server_root_relative(p, filename);
-
- if (!confname) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT,
- APR_EBADPATH, NULL, "Invalid config file path %s",
- filename);
- return NULL;
- }
-
- error = ap_process_resource_config(s, confname, conftree, p, ptemp);
- if (error) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, 0, NULL,
- "%s: %s", ap_server_argv0, error);
- return NULL;
- }
-
- error = process_command_config(s, ap_server_post_read_config, conftree,
- p, ptemp);
-
- if (error) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, 0, NULL, "%s: %s",
- ap_server_argv0, error);
- return NULL;
- }
-
- return s;
-}
-
-AP_DECLARE(void) ap_single_module_configure(apr_pool_t *p, server_rec *s,
- module *m)
-{
- if (m->create_server_config)
- ap_set_module_config(s->module_config, m,
- (*m->create_server_config)(p, s));
-
- if (m->create_dir_config)
- ap_set_module_config(s->lookup_defaults, m,
- (*m->create_dir_config)(p, NULL));
-}
-
-AP_DECLARE(void) ap_run_rewrite_args(process_rec *process)
-{
- module *m;
-
- for (m = ap_top_module; m; m = m->next) {
- if (m->rewrite_args) {
- (*m->rewrite_args)(process);
- }
- }
-}
-
-/********************************************************************
- * Configuration directives are restricted in terms of where they may
- * appear in the main configuration files and/or .htaccess files according
- * to the bitmask req_override in the command_rec structure.
- * If any of the overrides set in req_override are also allowed in the
- * context in which the command is read, then the command is allowed.
- * The context is determined as follows:
- *
- * inside *.conf --> override = (RSRC_CONF|OR_ALL)&~(OR_AUTHCFG|OR_LIMIT);
- * within <Directory> or <Location> --> override = OR_ALL|ACCESS_CONF;
- * within .htaccess --> override = AllowOverride for current directory;
- *
- * the result is, well, a rather confusing set of possibilities for when
- * a particular directive is allowed to be used. This procedure prints
- * in English where the given (pc) directive can be used.
- */
-static void show_overrides(const command_rec *pc, module *pm)
-{
- int n = 0;
-
- printf("\tAllowed in *.conf ");
- if ((pc->req_override & (OR_OPTIONS | OR_FILEINFO | OR_INDEXES))
- || ((pc->req_override & RSRC_CONF)
- && ((pc->req_override & (ACCESS_CONF | OR_AUTHCFG | OR_LIMIT))))) {
- printf("anywhere");
- }
- else if (pc->req_override & RSRC_CONF) {
- printf("only outside <Directory>, <Files> or <Location>");
- }
- else {
- printf("only inside <Directory>, <Files> or <Location>");
- }
-
- /* Warn if the directive is allowed inside <Directory> or .htaccess
- * but module doesn't support per-dir configuration
- */
- if ((pc->req_override & (OR_ALL | ACCESS_CONF)) && !pm->create_dir_config)
- printf(" [no per-dir config]");
-
- if (pc->req_override & OR_ALL) {
- printf(" and in .htaccess\n\twhen AllowOverride");
-
- if ((pc->req_override & OR_ALL) == OR_ALL) {
- printf(" isn't None");
- }
- else {
- printf(" includes ");
-
- if (pc->req_override & OR_AUTHCFG) {
- if (n++)
- printf(" or ");
-
- printf("AuthConfig");
- }
-
- if (pc->req_override & OR_LIMIT) {
- if (n++)
- printf(" or ");
-
- printf("Limit");
- }
-
- if (pc->req_override & OR_OPTIONS) {
- if (n++)
- printf(" or ");
-
- printf("Options");
- }
-
- if (pc->req_override & OR_FILEINFO) {
- if (n++)
- printf(" or ");
-
- printf("FileInfo");
- }
-
- if (pc->req_override & OR_INDEXES) {
- if (n++)
- printf(" or ");
-
- printf("Indexes");
- }
- }
- }
-
- printf("\n");
-}
-
-/* Show the preloaded configuration directives, the help string explaining
- * the directive arguments, in what module they are handled, and in
- * what parts of the configuration they are allowed. Used for httpd -L.
- */
-AP_DECLARE(void) ap_show_directives(void)
-{
- const command_rec *pc;
- int n;
-
- for (n = 0; ap_loaded_modules[n]; ++n) {
- for (pc = ap_loaded_modules[n]->cmds; pc && pc->name; ++pc) {
- printf("%s (%s)\n", pc->name, ap_loaded_modules[n]->name);
-
- if (pc->errmsg)
- printf("\t%s\n", pc->errmsg);
-
- show_overrides(pc, ap_loaded_modules[n]);
- }
- }
-}
-
-/* Show the preloaded module names. Used for httpd -l. */
-AP_DECLARE(void) ap_show_modules(void)
-{
- int n;
-
- printf("Compiled in modules:\n");
- for (n = 0; ap_loaded_modules[n]; ++n)
- printf(" %s\n", ap_loaded_modules[n]->name);
-}
-
-AP_DECLARE(const char *) ap_show_mpm(void)
-{
- return MPM_NAME;
-}
diff --git a/server/config.m4 b/server/config.m4
deleted file mode 100644
index 85fa4d1791..0000000000
--- a/server/config.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-dnl ## Check for libraries
-
-dnl ## Check for header files
-
-AC_CHECK_HEADERS(bstring.h unistd.h)
-
-dnl ## Check for typedefs, structures, and compiler characteristics.
-
-dnl ## Check for library functions
-
-AC_CHECK_FUNCS(syslog)
-
-dnl Obsolete scoreboard code uses this.
- AC_CHECK_HEADERS(sys/times.h)
- AC_CHECK_FUNCS(times)
diff --git a/server/connection.c b/server/connection.c
deleted file mode 100644
index b444c0b758..0000000000
--- a/server/connection.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_connection.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "ap_mpm.h"
-#include "mpm_default.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_vhost.h"
-#include "scoreboard.h"
-#include "http_log.h"
-#include "util_filter.h"
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(create_connection)
- APR_HOOK_LINK(process_connection)
- APR_HOOK_LINK(pre_connection)
-)
-AP_IMPLEMENT_HOOK_RUN_FIRST(conn_rec *,create_connection,
- (apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh, apr_bucket_alloc_t *alloc),
- (p, server, csd, conn_id, sbh, alloc), NULL)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,process_connection,(conn_rec *c),(c),DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_connection,(conn_rec *c, void *csd),(c, csd),OK,DECLINED)
-/*
- * More machine-dependent networking gooo... on some systems,
- * you've got to be *really* sure that all the packets are acknowledged
- * before closing the connection, since the client will not be able
- * to see the last response if their TCP buffer is flushed by a RST
- * packet from us, which is what the server's TCP stack will send
- * if it receives any request data after closing the connection.
- *
- * In an ideal world, this function would be accomplished by simply
- * setting the socket option SO_LINGER and handling it within the
- * server's TCP stack while the process continues on to the next request.
- * Unfortunately, it seems that most (if not all) operating systems
- * block the server process on close() when SO_LINGER is used.
- * For those that don't, see USE_SO_LINGER below. For the rest,
- * we have created a home-brew lingering_close.
- *
- * Many operating systems tend to block, puke, or otherwise mishandle
- * calls to shutdown only half of the connection. You should define
- * NO_LINGCLOSE in ap_config.h if such is the case for your system.
- */
-#ifndef MAX_SECS_TO_LINGER
-#define MAX_SECS_TO_LINGER 30
-#endif
-
-AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c)
-{
- apr_bucket_brigade *bb;
- apr_bucket *b;
-
- bb = apr_brigade_create(c->pool, c->bucket_alloc);
-
- /* FLUSH bucket */
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- /* End Of Connection bucket */
- b = ap_bucket_eoc_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- ap_pass_brigade(c->output_filters, bb);
-}
-
-/* we now proceed to read from the client until we get EOF, or until
- * MAX_SECS_TO_LINGER has passed. the reasons for doing this are
- * documented in a draft:
- *
- * http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt
- *
- * in a nutshell -- if we don't make this effort we risk causing
- * TCP RST packets to be sent which can tear down a connection before
- * all the response data has been sent to the client.
- */
-#define SECONDS_TO_LINGER 2
-AP_DECLARE(void) ap_lingering_close(conn_rec *c)
-{
- char dummybuf[512];
- apr_size_t nbytes = sizeof(dummybuf);
- apr_status_t rc;
- apr_int32_t timeout;
- apr_int32_t total_linger_time = 0;
- apr_socket_t *csd = ap_get_module_config(c->conn_config, &core_module);
-
- if (!csd) {
- return;
- }
-
- ap_update_child_status(c->sbh, SERVER_CLOSING, NULL);
-
-#ifdef NO_LINGCLOSE
- ap_flush_conn(c); /* just close it */
- apr_socket_close(csd);
- return;
-#endif
-
- /* Close the connection, being careful to send out whatever is still
- * in our buffers. If possible, try to avoid a hard close until the
- * client has ACKed our FIN and/or has stopped sending us data.
- */
-
- /* Send any leftover data to the client, but never try to again */
- ap_flush_conn(c);
-
- if (c->aborted) {
- apr_socket_close(csd);
- return;
- }
-
- /* Shut down the socket for write, which will send a FIN
- * to the peer.
- */
- if (apr_socket_shutdown(csd, APR_SHUTDOWN_WRITE) != APR_SUCCESS
- || c->aborted) {
- apr_socket_close(csd);
- return;
- }
-
- /* Read all data from the peer until we reach "end-of-file" (FIN
- * from peer) or we've exceeded our overall timeout. If the client does
- * not send us bytes within 2 seconds (a value pulled from Apache 1.3
- * which seems to work well), close the connection.
- */
- timeout = apr_time_from_sec(SECONDS_TO_LINGER);
- apr_socket_timeout_set(csd, timeout);
- apr_socket_opt_set(csd, APR_INCOMPLETE_READ, 1);
- while (1) {
- nbytes = sizeof(dummybuf);
- rc = apr_socket_recv(csd, dummybuf, &nbytes);
- if (rc != APR_SUCCESS || nbytes == 0)
- break;
-
- total_linger_time += SECONDS_TO_LINGER;
- if (total_linger_time >= MAX_SECS_TO_LINGER) {
- break;
- }
- }
-
- apr_socket_close(csd);
- return;
-}
-
-AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, void *csd)
-{
- int rc;
- ap_update_vhost_given_ip(c);
-
- rc = ap_run_pre_connection(c, csd);
- if (rc != OK && rc != DONE) {
- c->aborted = 1;
- }
-
- if (!c->aborted) {
- ap_run_process_connection(c);
- }
-}
-
diff --git a/server/core.c b/server/core.c
deleted file mode 100644
index e6c664396c..0000000000
--- a/server/core.c
+++ /dev/null
@@ -1,4628 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_fnmatch.h"
-#include "apr_hash.h"
-#include "apr_thread_proc.h" /* for RLIMIT stuff */
-#include "apr_hooks.h"
-
-#define APR_WANT_IOVEC
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h" /* For index_of_response(). Grump. */
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_main.h" /* For the default_handler below... */
-#include "http_log.h"
-#include "util_md5.h"
-#include "http_connection.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-#include "util_ebcdic.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "scoreboard.h"
-#include "mod_core.h"
-#include "mod_proxy.h"
-#include "ap_listen.h"
-
-#include "mod_so.h" /* for ap_find_loaded_module_symbol */
-
-/* LimitRequestBody handling */
-#define AP_LIMIT_REQ_BODY_UNSET ((apr_off_t) -1)
-#define AP_DEFAULT_LIMIT_REQ_BODY ((apr_off_t) 0)
-
-/* LimitXMLRequestBody handling */
-#define AP_LIMIT_UNSET ((long) -1)
-#define AP_DEFAULT_LIMIT_XML_BODY ((size_t)1000000)
-
-#define AP_MIN_SENDFILE_BYTES (256)
-
-/* maximum include nesting level */
-#ifndef AP_MAX_INCLUDE_DEPTH
-#define AP_MAX_INCLUDE_DEPTH (128)
-#endif
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(get_mgmt_items)
-)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, get_mgmt_items,
- (apr_pool_t *p, const char *val, apr_hash_t *ht),
- (p, val, ht), OK, DECLINED)
-
-/* Server core module... This module provides support for really basic
- * server operations, including options and commands which control the
- * operation of other modules. Consider this the bureaucracy module.
- *
- * The core module also defines handlers, etc., do handle just enough
- * to allow a server with the core module ONLY to actually serve documents
- * (though it slaps DefaultType on all of 'em); this was useful in testing,
- * but may not be worth preserving.
- *
- * This file could almost be mod_core.c, except for the stuff which affects
- * the http_conf_globals.
- */
-
-/* Handles for core filters */
-AP_DECLARE_DATA ap_filter_rec_t *ap_subreq_core_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_core_output_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_content_length_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_net_time_filter_handle;
-AP_DECLARE_DATA ap_filter_rec_t *ap_core_input_filter_handle;
-
-/* magic pointer for ErrorDocument xxx "default" */
-static char errordocument_default;
-
-static void *create_core_dir_config(apr_pool_t *a, char *dir)
-{
- core_dir_config *conf;
- int i;
-
- conf = (core_dir_config *)apr_pcalloc(a, sizeof(core_dir_config));
-
- /* conf->r and conf->d[_*] are initialized by dirsection() or left NULL */
-
- conf->opts = dir ? OPT_UNSET : OPT_UNSET|OPT_ALL;
- conf->opts_add = conf->opts_remove = OPT_NONE;
- conf->override = dir ? OR_UNSET : OR_UNSET|OR_ALL;
- conf->override_opts = OPT_UNSET | OPT_ALL | OPT_INCNOEXEC | OPT_SYM_OWNER
- | OPT_MULTI;
-
- conf->content_md5 = 2;
- conf->accept_path_info = 3;
-
- conf->use_canonical_name = USE_CANONICAL_NAME_UNSET;
-
- conf->hostname_lookups = HOSTNAME_LOOKUP_UNSET;
- conf->satisfy = apr_palloc(a, sizeof(*conf->satisfy) * METHODS);
- for (i = 0; i < METHODS; ++i) {
- conf->satisfy[i] = SATISFY_NOSPEC;
- }
-
-#ifdef RLIMIT_CPU
- conf->limit_cpu = NULL;
-#endif
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
- conf->limit_mem = NULL;
-#endif
-#ifdef RLIMIT_NPROC
- conf->limit_nproc = NULL;
-#endif
-
- conf->limit_req_body = AP_LIMIT_REQ_BODY_UNSET;
- conf->limit_xml_body = AP_LIMIT_UNSET;
- conf->sec_file = apr_array_make(a, 2, sizeof(ap_conf_vector_t *));
-
- conf->server_signature = srv_sig_unset;
-
- conf->add_default_charset = ADD_DEFAULT_CHARSET_UNSET;
- conf->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
-
- /* Overriding all negotiation
- */
- conf->mime_type = NULL;
- conf->handler = NULL;
- conf->output_filters = NULL;
- conf->input_filters = NULL;
-
- /*
- * Flag for use of inodes in ETags.
- */
- conf->etag_bits = ETAG_UNSET;
- conf->etag_add = ETAG_UNSET;
- conf->etag_remove = ETAG_UNSET;
-
- conf->enable_mmap = ENABLE_MMAP_UNSET;
- conf->enable_sendfile = ENABLE_SENDFILE_UNSET;
- conf->allow_encoded_slashes = 0;
-
- return (void *)conf;
-}
-
-/*
- * Overlay one hash table of ct_output_filters onto another
- */
-static void *merge_ct_filters(apr_pool_t *p,
- const void *key,
- apr_ssize_t klen,
- const void *overlay_val,
- const void *base_val,
- const void *data)
-{
- ap_filter_rec_t *cur;
- const ap_filter_rec_t *overlay_info = (const ap_filter_rec_t *)overlay_val;
- const ap_filter_rec_t *base_info = (const ap_filter_rec_t *)base_val;
-
- cur = NULL;
-
- while (overlay_info) {
- ap_filter_rec_t *new;
-
- new = apr_pcalloc(p, sizeof(ap_filter_rec_t));
- new->name = apr_pstrdup(p, overlay_info->name);
- new->next = cur;
- cur = new;
- overlay_info = overlay_info->next;
- }
-
- while (base_info) {
- ap_filter_rec_t *f;
- int found = 0;
-
- /* We can't have dups. */
- f = cur;
- while (f) {
- if (!strcasecmp(base_info->name, f->name)) {
- found = 1;
- break;
- }
-
- f = f->next;
- }
-
- if (!found) {
- f = apr_pcalloc(p, sizeof(ap_filter_rec_t));
- f->name = apr_pstrdup(p, base_info->name);
- f->next = cur;
- cur = f;
- }
-
- base_info = base_info->next;
- }
-
- return cur;
-}
-
-static void *merge_core_dir_configs(apr_pool_t *a, void *basev, void *newv)
-{
- core_dir_config *base = (core_dir_config *)basev;
- core_dir_config *new = (core_dir_config *)newv;
- core_dir_config *conf;
- int i;
-
- /* Create this conf by duplicating the base, replacing elements
- * (or creating copies for merging) where new-> values exist.
- */
- conf = (core_dir_config *)apr_palloc(a, sizeof(core_dir_config));
- memcpy(conf, base, sizeof(core_dir_config));
-
- conf->d = new->d;
- conf->d_is_fnmatch = new->d_is_fnmatch;
- conf->d_components = new->d_components;
- conf->r = new->r;
-
- if (new->opts & OPT_UNSET) {
- /* there was no explicit setting of new->opts, so we merge
- * preserve the invariant (opts_add & opts_remove) == 0
- */
- conf->opts_add = (conf->opts_add & ~new->opts_remove) | new->opts_add;
- conf->opts_remove = (conf->opts_remove & ~new->opts_add)
- | new->opts_remove;
- conf->opts = (conf->opts & ~conf->opts_remove) | conf->opts_add;
- if ((base->opts & OPT_INCNOEXEC) && (new->opts & OPT_INCLUDES)) {
- conf->opts = (conf->opts & ~OPT_INCNOEXEC) | OPT_INCLUDES;
- }
- }
- else {
- /* otherwise we just copy, because an explicit opts setting
- * overrides all earlier +/- modifiers
- */
- conf->opts = new->opts;
- conf->opts_add = new->opts_add;
- conf->opts_remove = new->opts_remove;
- }
-
- if (!(new->override & OR_UNSET)) {
- conf->override = new->override;
- }
-
- if (!(new->override_opts & OPT_UNSET)) {
- conf->override_opts = new->override_opts;
- }
-
- if (new->ap_default_type) {
- conf->ap_default_type = new->ap_default_type;
- }
-
- if (new->ap_auth_type) {
- conf->ap_auth_type = new->ap_auth_type;
- }
-
- if (new->ap_auth_name) {
- conf->ap_auth_name = new->ap_auth_name;
- }
-
- if (new->ap_requires) {
- conf->ap_requires = new->ap_requires;
- }
-
- if (conf->response_code_strings == NULL) {
- conf->response_code_strings = new->response_code_strings;
- }
- else if (new->response_code_strings != NULL) {
- /* If we merge, the merge-result must have it's own array
- */
- conf->response_code_strings = apr_palloc(a,
- sizeof(*conf->response_code_strings) * RESPONSE_CODES);
- memcpy(conf->response_code_strings, base->response_code_strings,
- sizeof(*conf->response_code_strings) * RESPONSE_CODES);
-
- for (i = 0; i < RESPONSE_CODES; ++i) {
- if (new->response_code_strings[i] != NULL) {
- conf->response_code_strings[i] = new->response_code_strings[i];
- }
- }
- }
- /* Otherwise we simply use the base->response_code_strings array
- */
-
- if (new->hostname_lookups != HOSTNAME_LOOKUP_UNSET) {
- conf->hostname_lookups = new->hostname_lookups;
- }
-
- if ((new->content_md5 & 2) == 0) {
- conf->content_md5 = new->content_md5;
- }
-
- if (new->accept_path_info != 3) {
- conf->accept_path_info = new->accept_path_info;
- }
-
- if (new->use_canonical_name != USE_CANONICAL_NAME_UNSET) {
- conf->use_canonical_name = new->use_canonical_name;
- }
-
-#ifdef RLIMIT_CPU
- if (new->limit_cpu) {
- conf->limit_cpu = new->limit_cpu;
- }
-#endif
-
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
- if (new->limit_mem) {
- conf->limit_mem = new->limit_mem;
- }
-#endif
-
-#ifdef RLIMIT_NPROC
- if (new->limit_nproc) {
- conf->limit_nproc = new->limit_nproc;
- }
-#endif
-
- if (new->limit_req_body != AP_LIMIT_REQ_BODY_UNSET) {
- conf->limit_req_body = new->limit_req_body;
- }
-
- if (new->limit_xml_body != AP_LIMIT_UNSET)
- conf->limit_xml_body = new->limit_xml_body;
- else
- conf->limit_xml_body = base->limit_xml_body;
-
- if (!conf->sec_file) {
- conf->sec_file = new->sec_file;
- }
- else if (new->sec_file) {
- /* If we merge, the merge-result must have it's own array
- */
- conf->sec_file = apr_array_append(a, base->sec_file, new->sec_file);
- }
- /* Otherwise we simply use the base->sec_file array
- */
-
- for (i = 0; i < METHODS; ++i) {
- if (new->satisfy[i] != SATISFY_NOSPEC) {
- conf->satisfy[i] = new->satisfy[i];
- }
- }
-
- if (new->server_signature != srv_sig_unset) {
- conf->server_signature = new->server_signature;
- }
-
- if (new->add_default_charset != ADD_DEFAULT_CHARSET_UNSET) {
- conf->add_default_charset = new->add_default_charset;
- conf->add_default_charset_name = new->add_default_charset_name;
- }
-
- /* Overriding all negotiation
- */
- if (new->mime_type) {
- conf->mime_type = new->mime_type;
- }
-
- if (new->handler) {
- conf->handler = new->handler;
- }
-
- if (new->output_filters) {
- conf->output_filters = new->output_filters;
- }
-
- if (new->input_filters) {
- conf->input_filters = new->input_filters;
- }
-
- if (conf->ct_output_filters && new->ct_output_filters) {
- conf->ct_output_filters = apr_hash_merge(a,
- new->ct_output_filters,
- conf->ct_output_filters,
- merge_ct_filters,
- NULL);
- }
- else if (new->ct_output_filters) {
- conf->ct_output_filters = apr_hash_copy(a, new->ct_output_filters);
- }
- else if (conf->ct_output_filters) {
- /* That memcpy above isn't enough. */
- conf->ct_output_filters = apr_hash_copy(a, base->ct_output_filters);
- }
-
- /*
- * Now merge the setting of the FileETag directive.
- */
- if (new->etag_bits == ETAG_UNSET) {
- conf->etag_add =
- (conf->etag_add & (~ new->etag_remove)) | new->etag_add;
- conf->etag_remove =
- (conf->opts_remove & (~ new->etag_add)) | new->etag_remove;
- conf->etag_bits =
- (conf->etag_bits & (~ conf->etag_remove)) | conf->etag_add;
- }
- else {
- conf->etag_bits = new->etag_bits;
- conf->etag_add = new->etag_add;
- conf->etag_remove = new->etag_remove;
- }
-
- if (conf->etag_bits != ETAG_NONE) {
- conf->etag_bits &= (~ ETAG_NONE);
- }
-
- if (new->enable_mmap != ENABLE_MMAP_UNSET) {
- conf->enable_mmap = new->enable_mmap;
- }
-
- if (new->enable_sendfile != ENABLE_SENDFILE_UNSET) {
- conf->enable_sendfile = new->enable_sendfile;
- }
-
- conf->allow_encoded_slashes = new->allow_encoded_slashes;
-
- return (void*)conf;
-}
-
-static void *create_core_server_config(apr_pool_t *a, server_rec *s)
-{
- core_server_config *conf;
- int is_virtual = s->is_virtual;
-
- conf = (core_server_config *)apr_pcalloc(a, sizeof(core_server_config));
-
-#ifdef GPROF
- conf->gprof_dir = NULL;
-#endif
-
- conf->access_name = is_virtual ? NULL : DEFAULT_ACCESS_FNAME;
- conf->ap_document_root = is_virtual ? NULL : DOCUMENT_LOCATION;
- conf->sec_dir = apr_array_make(a, 40, sizeof(ap_conf_vector_t *));
- conf->sec_url = apr_array_make(a, 40, sizeof(ap_conf_vector_t *));
-
- /* recursion stopper */
- conf->redirect_limit = 0; /* 0 == unset */
- conf->subreq_limit = 0;
-
- return (void *)conf;
-}
-
-static void *merge_core_server_configs(apr_pool_t *p, void *basev, void *virtv)
-{
- core_server_config *base = (core_server_config *)basev;
- core_server_config *virt = (core_server_config *)virtv;
- core_server_config *conf;
-
- conf = (core_server_config *)apr_palloc(p, sizeof(core_server_config));
- memcpy(conf, virt, sizeof(core_server_config));
-
- if (!conf->access_name) {
- conf->access_name = base->access_name;
- }
-
- if (!conf->ap_document_root) {
- conf->ap_document_root = base->ap_document_root;
- }
-
- conf->sec_dir = apr_array_append(p, base->sec_dir, virt->sec_dir);
- conf->sec_url = apr_array_append(p, base->sec_url, virt->sec_url);
-
- conf->redirect_limit = virt->redirect_limit
- ? virt->redirect_limit
- : base->redirect_limit;
-
- conf->subreq_limit = virt->subreq_limit
- ? virt->subreq_limit
- : base->subreq_limit;
-
- return conf;
-}
-
-/* Add per-directory configuration entry (for <directory> section);
- * these are part of the core server config.
- */
-
-AP_CORE_DECLARE(void) ap_add_per_dir_conf(server_rec *s, void *dir_config)
-{
- core_server_config *sconf = ap_get_module_config(s->module_config,
- &core_module);
- void **new_space = (void **)apr_array_push(sconf->sec_dir);
-
- *new_space = dir_config;
-}
-
-AP_CORE_DECLARE(void) ap_add_per_url_conf(server_rec *s, void *url_config)
-{
- core_server_config *sconf = ap_get_module_config(s->module_config,
- &core_module);
- void **new_space = (void **)apr_array_push(sconf->sec_url);
-
- *new_space = url_config;
-}
-
-AP_CORE_DECLARE(void) ap_add_file_conf(core_dir_config *conf, void *url_config)
-{
- void **new_space = (void **)apr_array_push(conf->sec_file);
-
- *new_space = url_config;
-}
-
-/* We need to do a stable sort, qsort isn't stable. So to make it stable
- * we'll be maintaining the original index into the list, and using it
- * as the minor key during sorting. The major key is the number of
- * components (where the root component is zero).
- */
-struct reorder_sort_rec {
- ap_conf_vector_t *elt;
- int orig_index;
-};
-
-static int reorder_sorter(const void *va, const void *vb)
-{
- const struct reorder_sort_rec *a = va;
- const struct reorder_sort_rec *b = vb;
- core_dir_config *core_a;
- core_dir_config *core_b;
-
- core_a = ap_get_module_config(a->elt, &core_module);
- core_b = ap_get_module_config(b->elt, &core_module);
-
- /* a regex always sorts after a non-regex
- */
- if (!core_a->r && core_b->r) {
- return -1;
- }
- else if (core_a->r && !core_b->r) {
- return 1;
- }
-
- /* we always sort next by the number of components
- */
- if (core_a->d_components < core_b->d_components) {
- return -1;
- }
- else if (core_a->d_components > core_b->d_components) {
- return 1;
- }
-
- /* They have the same number of components, we now have to compare
- * the minor key to maintain the original order (from the config.)
- */
- return a->orig_index - b->orig_index;
-}
-
-void ap_core_reorder_directories(apr_pool_t *p, server_rec *s)
-{
- core_server_config *sconf;
- apr_array_header_t *sec_dir;
- struct reorder_sort_rec *sortbin;
- int nelts;
- ap_conf_vector_t **elts;
- int i;
- apr_pool_t *tmp;
-
- sconf = ap_get_module_config(s->module_config, &core_module);
- sec_dir = sconf->sec_dir;
- nelts = sec_dir->nelts;
- elts = (ap_conf_vector_t **)sec_dir->elts;
-
- if (!nelts) {
- /* simple case of already being sorted... */
- /* We're not checking this condition to be fast... we're checking
- * it to avoid trying to palloc zero bytes, which can trigger some
- * memory debuggers to barf
- */
- return;
- }
-
- /* we have to allocate tmp space to do a stable sort */
- apr_pool_create(&tmp, p);
- sortbin = apr_palloc(tmp, sec_dir->nelts * sizeof(*sortbin));
- for (i = 0; i < nelts; ++i) {
- sortbin[i].orig_index = i;
- sortbin[i].elt = elts[i];
- }
-
- qsort(sortbin, nelts, sizeof(*sortbin), reorder_sorter);
-
- /* and now copy back to the original array */
- for (i = 0; i < nelts; ++i) {
- elts[i] = sortbin[i].elt;
- }
-
- apr_pool_destroy(tmp);
-}
-
-/*****************************************************************
- *
- * There are some elements of the core config structures in which
- * other modules have a legitimate interest (this is ugly, but necessary
- * to preserve NCSA back-compatibility). So, we have a bunch of accessors
- * here...
- */
-
-AP_DECLARE(int) ap_allow_options(request_rec *r)
-{
- core_dir_config *conf =
- (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
-
- return conf->opts;
-}
-
-AP_DECLARE(int) ap_allow_overrides(request_rec *r)
-{
- core_dir_config *conf;
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- return conf->override;
-}
-
-AP_DECLARE(const char *) ap_auth_type(request_rec *r)
-{
- core_dir_config *conf;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- return conf->ap_auth_type;
-}
-
-AP_DECLARE(const char *) ap_auth_name(request_rec *r)
-{
- core_dir_config *conf;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- return conf->ap_auth_name;
-}
-
-AP_DECLARE(const char *) ap_default_type(request_rec *r)
-{
- core_dir_config *conf;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- return conf->ap_default_type
- ? conf->ap_default_type
- : DEFAULT_CONTENT_TYPE;
-}
-
-AP_DECLARE(const char *) ap_document_root(request_rec *r) /* Don't use this! */
-{
- core_server_config *conf;
-
- conf = (core_server_config *)ap_get_module_config(r->server->module_config,
- &core_module);
-
- return conf->ap_document_root;
-}
-
-AP_DECLARE(const apr_array_header_t *) ap_requires(request_rec *r)
-{
- core_dir_config *conf;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- return conf->ap_requires;
-}
-
-AP_DECLARE(int) ap_satisfies(request_rec *r)
-{
- core_dir_config *conf;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- return conf->satisfy[r->method_number];
-}
-
-/* Should probably just get rid of this... the only code that cares is
- * part of the core anyway (and in fact, it isn't publicised to other
- * modules).
- */
-
-char *ap_response_code_string(request_rec *r, int error_index)
-{
- core_dir_config *dirconf;
- core_request_config *reqconf;
-
- /* check for string registered via ap_custom_response() first */
- reqconf = (core_request_config *)ap_get_module_config(r->request_config,
- &core_module);
- if (reqconf->response_code_strings != NULL &&
- reqconf->response_code_strings[error_index] != NULL) {
- return reqconf->response_code_strings[error_index];
- }
-
- /* check for string specified via ErrorDocument */
- dirconf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- if (dirconf->response_code_strings == NULL) {
- return NULL;
- }
-
- if (dirconf->response_code_strings[error_index] == &errordocument_default) {
- return NULL;
- }
-
- return dirconf->response_code_strings[error_index];
-}
-
-
-/* Code from Harald Hanche-Olsen <hanche@imf.unit.no> */
-static APR_INLINE void do_double_reverse (conn_rec *conn)
-{
- apr_sockaddr_t *sa;
- apr_status_t rv;
-
- if (conn->double_reverse) {
- /* already done */
- return;
- }
-
- if (conn->remote_host == NULL || conn->remote_host[0] == '\0') {
- /* single reverse failed, so don't bother */
- conn->double_reverse = -1;
- return;
- }
-
- rv = apr_sockaddr_info_get(&sa, conn->remote_host, APR_UNSPEC, 0, 0, conn->pool);
- if (rv == APR_SUCCESS) {
- while (sa) {
- if (apr_sockaddr_equal(sa, conn->remote_addr)) {
- conn->double_reverse = 1;
- return;
- }
-
- sa = sa->next;
- }
- }
-
- conn->double_reverse = -1;
-}
-
-AP_DECLARE(const char *) ap_get_remote_host(conn_rec *conn, void *dir_config,
- int type, int *str_is_ip)
-{
- int hostname_lookups;
- int ignored_str_is_ip;
-
- if (!str_is_ip) { /* caller doesn't want to know */
- str_is_ip = &ignored_str_is_ip;
- }
- *str_is_ip = 0;
-
- /* If we haven't checked the host name, and we want to */
- if (dir_config) {
- hostname_lookups =
- ((core_dir_config *)ap_get_module_config(dir_config, &core_module))
- ->hostname_lookups;
-
- if (hostname_lookups == HOSTNAME_LOOKUP_UNSET) {
- hostname_lookups = HOSTNAME_LOOKUP_OFF;
- }
- }
- else {
- /* the default */
- hostname_lookups = HOSTNAME_LOOKUP_OFF;
- }
-
- if (type != REMOTE_NOLOOKUP
- && conn->remote_host == NULL
- && (type == REMOTE_DOUBLE_REV
- || hostname_lookups != HOSTNAME_LOOKUP_OFF)) {
-
- if (apr_getnameinfo(&conn->remote_host, conn->remote_addr, 0)
- == APR_SUCCESS) {
- ap_str_tolower(conn->remote_host);
-
- if (hostname_lookups == HOSTNAME_LOOKUP_DOUBLE) {
- do_double_reverse(conn);
- if (conn->double_reverse != 1) {
- conn->remote_host = NULL;
- }
- }
- }
-
- /* if failed, set it to the NULL string to indicate error */
- if (conn->remote_host == NULL) {
- conn->remote_host = "";
- }
- }
-
- if (type == REMOTE_DOUBLE_REV) {
- do_double_reverse(conn);
- if (conn->double_reverse == -1) {
- return NULL;
- }
- }
-
- /*
- * Return the desired information; either the remote DNS name, if found,
- * or either NULL (if the hostname was requested) or the IP address
- * (if any identifier was requested).
- */
- if (conn->remote_host != NULL && conn->remote_host[0] != '\0') {
- return conn->remote_host;
- }
- else {
- if (type == REMOTE_HOST || type == REMOTE_DOUBLE_REV) {
- return NULL;
- }
- else {
- *str_is_ip = 1;
- return conn->remote_ip;
- }
- }
-}
-
-/*
- * Optional function coming from mod_ident, used for looking up ident user
- */
-static APR_OPTIONAL_FN_TYPE(ap_ident_lookup) *ident_lookup;
-
-AP_DECLARE(const char *) ap_get_remote_logname(request_rec *r)
-{
- if (r->connection->remote_logname != NULL) {
- return r->connection->remote_logname;
- }
-
- if (ident_lookup) {
- return ident_lookup(r);
- }
-
- return NULL;
-}
-
-/* There are two options regarding what the "name" of a server is. The
- * "canonical" name as defined by ServerName and Port, or the "client's
- * name" as supplied by a possible Host: header or full URI. We never
- * trust the port passed in the client's headers, we always use the
- * port of the actual socket.
- *
- * The DNS option to UseCanonicalName causes this routine to do a
- * reverse lookup on the local IP address of the connection and use
- * that for the ServerName. This makes its value more reliable while
- * at the same time allowing Demon's magic virtual hosting to work.
- * The assumption is that DNS lookups are sufficiently quick...
- * -- fanf 1998-10-03
- */
-AP_DECLARE(const char *) ap_get_server_name(request_rec *r)
-{
- conn_rec *conn = r->connection;
- core_dir_config *d;
-
- d = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- if (d->use_canonical_name == USE_CANONICAL_NAME_OFF) {
- return r->hostname ? r->hostname : r->server->server_hostname;
- }
-
- if (d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
- if (conn->local_host == NULL) {
- if (apr_getnameinfo(&conn->local_host,
- conn->local_addr, 0) != APR_SUCCESS)
- conn->local_host = apr_pstrdup(conn->pool,
- r->server->server_hostname);
- else {
- ap_str_tolower(conn->local_host);
- }
- }
-
- return conn->local_host;
- }
-
- /* default */
- return r->server->server_hostname;
-}
-
-/*
- * Get the current server name from the request for the purposes
- * of using in a URL. If the server name is an IPv6 literal
- * address, it will be returned in URL format (e.g., "[fe80::1]").
- */
-static const char *get_server_name_for_url(request_rec *r)
-{
- const char *plain_server_name = ap_get_server_name(r);
-
-#if APR_HAVE_IPV6
- if (ap_strchr_c(plain_server_name, ':')) { /* IPv6 literal? */
- return apr_psprintf(r->pool, "[%s]", plain_server_name);
- }
-#endif
- return plain_server_name;
-}
-
-AP_DECLARE(apr_port_t) ap_get_server_port(const request_rec *r)
-{
- apr_port_t port;
- core_dir_config *d =
- (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
-
- if (d->use_canonical_name == USE_CANONICAL_NAME_OFF
- || d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
-
- /* With UseCanonicalName off Apache will form self-referential
- * URLs using the hostname and port supplied by the client if
- * any are supplied (otherwise it will use the canonical name).
- */
- port = r->parsed_uri.port_str ? r->parsed_uri.port :
- r->connection->local_addr->port ? r->connection->local_addr->port :
- r->server->port ? r->server->port :
- ap_default_port(r);
- }
- else { /* d->use_canonical_name == USE_CANONICAL_NAME_ON */
-
- /* With UseCanonicalName on (and in all versions prior to 1.3)
- * Apache will use the hostname and port specified in the
- * ServerName directive to construct a canonical name for the
- * server. (If no port was specified in the ServerName
- * directive, Apache uses the port supplied by the client if
- * any is supplied, and finally the default port for the protocol
- * used.
- */
- port = r->server->port ? r->server->port :
- r->connection->local_addr->port ? r->connection->local_addr->port :
- ap_default_port(r);
- }
-
- /* default */
- return port;
-}
-
-AP_DECLARE(char *) ap_construct_url(apr_pool_t *p, const char *uri,
- request_rec *r)
-{
- unsigned port = ap_get_server_port(r);
- const char *host = get_server_name_for_url(r);
-
- if (ap_is_default_port(port, r)) {
- return apr_pstrcat(p, ap_http_method(r), "://", host, uri, NULL);
- }
-
- return apr_psprintf(p, "%s://%s:%u%s", ap_http_method(r), host, port, uri);
-}
-
-AP_DECLARE(apr_off_t) ap_get_limit_req_body(const request_rec *r)
-{
- core_dir_config *d =
- (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
-
- if (d->limit_req_body == AP_LIMIT_REQ_BODY_UNSET) {
- return AP_DEFAULT_LIMIT_REQ_BODY;
- }
-
- return d->limit_req_body;
-}
-
-
-/*****************************************************************
- *
- * Commands... this module handles almost all of the NCSA httpd.conf
- * commands, but most of the old srm.conf is in the the modules.
- */
-
-
-/* returns a parent if it matches the given directive */
-static const ap_directive_t * find_parent(const ap_directive_t *dirp,
- const char *what)
-{
- while (dirp->parent != NULL) {
- dirp = dirp->parent;
-
- /* ### it would be nice to have atom-ized directives */
- if (strcasecmp(dirp->directive, what) == 0)
- return dirp;
- }
-
- return NULL;
-}
-
-AP_DECLARE(const char *) ap_check_cmd_context(cmd_parms *cmd,
- unsigned forbidden)
-{
- const char *gt = (cmd->cmd->name[0] == '<'
- && cmd->cmd->name[strlen(cmd->cmd->name)-1] != '>')
- ? ">" : "";
- const ap_directive_t *found;
-
- if ((forbidden & NOT_IN_VIRTUALHOST) && cmd->server->is_virtual) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
- " cannot occur within <VirtualHost> section", NULL);
- }
-
- if ((forbidden & NOT_IN_LIMIT) && cmd->limited != -1) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
- " cannot occur within <Limit> section", NULL);
- }
-
- if ((forbidden & NOT_IN_DIR_LOC_FILE) == NOT_IN_DIR_LOC_FILE) {
- if (cmd->path != NULL) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
- " cannot occur within <Directory/Location/Files> "
- "section", NULL);
- }
- if (cmd->cmd->req_override & EXEC_ON_READ) {
- /* EXEC_ON_READ must be NOT_IN_DIR_LOC_FILE, if not, it will
- * (deliberately) segfault below in the individual tests...
- */
- return NULL;
- }
- }
-
- if (((forbidden & NOT_IN_DIRECTORY)
- && ((found = find_parent(cmd->directive, "<Directory"))
- || (found = find_parent(cmd->directive, "<DirectoryMatch"))))
- || ((forbidden & NOT_IN_LOCATION)
- && ((found = find_parent(cmd->directive, "<Location"))
- || (found = find_parent(cmd->directive, "<LocationMatch"))))
- || ((forbidden & NOT_IN_FILES)
- && ((found = find_parent(cmd->directive, "<Files"))
- || (found = find_parent(cmd->directive, "<FilesMatch"))))) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
- " cannot occur within ", found->directive,
- "> section", NULL);
- }
-
- return NULL;
-}
-
-static const char *set_access_name(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- void *sconf = cmd->server->module_config;
- core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- conf->access_name = apr_pstrdup(cmd->pool, arg);
- return NULL;
-}
-
-#ifdef GPROF
-static const char *set_gprof_dir(cmd_parms *cmd, void *dummy, const char *arg)
-{
- void *sconf = cmd->server->module_config;
- core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- conf->gprof_dir = apr_pstrdup(cmd->pool, arg);
- return NULL;
-}
-#endif /*GPROF*/
-
-static const char *set_add_default_charset(cmd_parms *cmd,
- void *d_, const char *arg)
-{
- core_dir_config *d = d_;
-
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- if (!strcasecmp(arg, "Off")) {
- d->add_default_charset = ADD_DEFAULT_CHARSET_OFF;
- }
- else if (!strcasecmp(arg, "On")) {
- d->add_default_charset = ADD_DEFAULT_CHARSET_ON;
- d->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
- }
- else {
- d->add_default_charset = ADD_DEFAULT_CHARSET_ON;
- d->add_default_charset_name = arg;
- }
-
- return NULL;
-}
-
-static const char *set_document_root(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- void *sconf = cmd->server->module_config;
- core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- /* Make it absolute, relative to ServerRoot */
- arg = ap_server_root_relative(cmd->pool, arg);
-
- /* TODO: ap_configtestonly && ap_docrootcheck && */
- if (apr_filepath_merge((char**)&conf->ap_document_root, NULL, arg,
- APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS
- || !ap_is_directory(cmd->pool, arg)) {
- if (cmd->server->is_virtual) {
- ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0,
- cmd->pool,
- "Warning: DocumentRoot [%s] does not exist",
- arg);
- conf->ap_document_root = arg;
- }
- else {
- return "DocumentRoot must be a directory";
- }
- }
- return NULL;
-}
-
-AP_DECLARE(void) ap_custom_response(request_rec *r, int status,
- const char *string)
-{
- core_request_config *conf =
- ap_get_module_config(r->request_config, &core_module);
- int idx;
-
- if (conf->response_code_strings == NULL) {
- conf->response_code_strings =
- apr_pcalloc(r->pool,
- sizeof(*conf->response_code_strings) * RESPONSE_CODES);
- }
-
- idx = ap_index_of_response(status);
-
- conf->response_code_strings[idx] =
- ((ap_is_url(string) || (*string == '/')) && (*string != '"')) ?
- apr_pstrdup(r->pool, string) : apr_pstrcat(r->pool, "\"", string, NULL);
-}
-
-static const char *set_error_document(cmd_parms *cmd, void *conf_,
- const char *errno_str, const char *msg)
-{
- core_dir_config *conf = conf_;
- int error_number, index_number, idx500;
- enum { MSG, LOCAL_PATH, REMOTE_PATH } what = MSG;
-
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- /* 1st parameter should be a 3 digit number, which we recognize;
- * convert it into an array index
- */
- error_number = atoi(errno_str);
- idx500 = ap_index_of_response(HTTP_INTERNAL_SERVER_ERROR);
-
- if (error_number == HTTP_INTERNAL_SERVER_ERROR) {
- index_number = idx500;
- }
- else if ((index_number = ap_index_of_response(error_number)) == idx500) {
- return apr_pstrcat(cmd->pool, "Unsupported HTTP response code ",
- errno_str, NULL);
- }
-
- /* Heuristic to determine second argument. */
- if (ap_strchr_c(msg,' '))
- what = MSG;
- else if (msg[0] == '/')
- what = LOCAL_PATH;
- else if (ap_is_url(msg))
- what = REMOTE_PATH;
- else
- what = MSG;
-
- /* The entry should be ignored if it is a full URL for a 401 error */
-
- if (error_number == 401 && what == REMOTE_PATH) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, cmd->server,
- "cannot use a full URL in a 401 ErrorDocument "
- "directive --- ignoring!");
- }
- else { /* Store it... */
- if (conf->response_code_strings == NULL) {
- conf->response_code_strings =
- apr_pcalloc(cmd->pool,
- sizeof(*conf->response_code_strings) *
- RESPONSE_CODES);
- }
-
- if (strcmp(msg, "default") == 0) {
- /* special case: ErrorDocument 404 default restores the
- * canned server error response
- */
- conf->response_code_strings[index_number] = &errordocument_default;
- }
- else {
- /* hack. Prefix a " if it is a msg; as that is what
- * http_protocol.c relies on to distinguish between
- * a msg and a (local) path.
- */
- conf->response_code_strings[index_number] = (what == MSG) ?
- apr_pstrcat(cmd->pool, "\"",msg,NULL) :
- apr_pstrdup(cmd->pool, msg);
- }
- }
-
- return NULL;
-}
-
-static const char *set_allow_opts(cmd_parms *cmd, allow_options_t *opts,
- const char *l)
-{
- allow_options_t opt;
- int first = 1;
-
- char *w, *p = (char *) l;
- char *tok_state;
-
- while ((w = apr_strtok(p, ",", &tok_state)) != NULL) {
-
- if (first) {
- p = NULL;
- *opts = OPT_NONE;
- first = 0;
- }
-
- if (!strcasecmp(w, "Indexes")) {
- opt = OPT_INDEXES;
- }
- else if (!strcasecmp(w, "Includes")) {
- opt = OPT_INCLUDES;
- }
- else if (!strcasecmp(w, "IncludesNOEXEC")) {
- opt = (OPT_INCLUDES | OPT_INCNOEXEC);
- }
- else if (!strcasecmp(w, "FollowSymLinks")) {
- opt = OPT_SYM_LINKS;
- }
- else if (!strcasecmp(w, "SymLinksIfOwnerMatch")) {
- opt = OPT_SYM_OWNER;
- }
- else if (!strcasecmp(w, "ExecCGI")) {
- opt = OPT_EXECCGI;
- }
- else if (!strcasecmp(w, "MultiViews")) {
- opt = OPT_MULTI;
- }
- else if (!strcasecmp(w, "RunScripts")) { /* AI backcompat. Yuck */
- opt = OPT_MULTI|OPT_EXECCGI;
- }
- else if (!strcasecmp(w, "None")) {
- opt = OPT_NONE;
- }
- else if (!strcasecmp(w, "All")) {
- opt = OPT_ALL;
- }
- else {
- return apr_pstrcat(cmd->pool, "Illegal option ", w, NULL);
- }
-
- *opts |= opt;
- }
-
- (*opts) &= (~OPT_UNSET);
-
- return NULL;
-}
-
-static const char *set_override(cmd_parms *cmd, void *d_, const char *l)
-{
- core_dir_config *d = d_;
- char *w;
- char *k, *v;
-
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- /* Throw a warning if we're in <Location> or <Files> */
- if (ap_check_cmd_context(cmd, NOT_IN_LOCATION | NOT_IN_FILES)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "Useless use of AllowOverride in line %d.",
- cmd->directive->line_num);
- }
-
- d->override = OR_NONE;
- while (l[0]) {
- w = ap_getword_conf(cmd->pool, &l);
-
- k = w;
- v = strchr(k, '=');
- if (v) {
- *v++ = '\0';
- }
-
- if (!strcasecmp(w, "Limit")) {
- d->override |= OR_LIMIT;
- }
- else if (!strcasecmp(k, "Options")) {
- d->override |= OR_OPTIONS;
- if (v)
- set_allow_opts(cmd, &(d->override_opts), v);
- else
- d->override_opts = OPT_ALL;
- }
- else if (!strcasecmp(w, "FileInfo")) {
- d->override |= OR_FILEINFO;
- }
- else if (!strcasecmp(w, "AuthConfig")) {
- d->override |= OR_AUTHCFG;
- }
- else if (!strcasecmp(w, "Indexes")) {
- d->override |= OR_INDEXES;
- }
- else if (!strcasecmp(w, "None")) {
- d->override = OR_NONE;
- }
- else if (!strcasecmp(w, "All")) {
- d->override = OR_ALL;
- }
- else {
- return apr_pstrcat(cmd->pool, "Illegal override option ", w, NULL);
- }
-
- d->override &= ~OR_UNSET;
- }
-
- return NULL;
-}
-
-static const char *set_options(cmd_parms *cmd, void *d_, const char *l)
-{
- core_dir_config *d = d_;
- allow_options_t opt;
- int first = 1;
- char action;
-
- while (l[0]) {
- char *w = ap_getword_conf(cmd->pool, &l);
- action = '\0';
-
- if (*w == '+' || *w == '-') {
- action = *(w++);
- }
- else if (first) {
- d->opts = OPT_NONE;
- first = 0;
- }
-
- if (!strcasecmp(w, "Indexes")) {
- opt = OPT_INDEXES;
- }
- else if (!strcasecmp(w, "Includes")) {
- opt = OPT_INCLUDES;
- }
- else if (!strcasecmp(w, "IncludesNOEXEC")) {
- opt = (OPT_INCLUDES | OPT_INCNOEXEC);
- }
- else if (!strcasecmp(w, "FollowSymLinks")) {
- opt = OPT_SYM_LINKS;
- }
- else if (!strcasecmp(w, "SymLinksIfOwnerMatch")) {
- opt = OPT_SYM_OWNER;
- }
- else if (!strcasecmp(w, "ExecCGI")) {
- opt = OPT_EXECCGI;
- }
- else if (!strcasecmp(w, "MultiViews")) {
- opt = OPT_MULTI;
- }
- else if (!strcasecmp(w, "RunScripts")) { /* AI backcompat. Yuck */
- opt = OPT_MULTI|OPT_EXECCGI;
- }
- else if (!strcasecmp(w, "None")) {
- opt = OPT_NONE;
- }
- else if (!strcasecmp(w, "All")) {
- opt = OPT_ALL;
- }
- else {
- return apr_pstrcat(cmd->pool, "Illegal option ", w, NULL);
- }
-
- if (!(cmd->override_opts & opt) && opt != OPT_NONE) {
- return apr_pstrcat(cmd->pool, "Option ", w, " not allowed here", NULL);
- }
- else if (action == '-') {
- /* we ensure the invariant (d->opts_add & d->opts_remove) == 0 */
- d->opts_remove |= opt;
- d->opts_add &= ~opt;
- d->opts &= ~opt;
- }
- else if (action == '+') {
- d->opts_add |= opt;
- d->opts_remove &= ~opt;
- d->opts |= opt;
- }
- else {
- d->opts |= opt;
- }
- }
-
- return NULL;
-}
-
-/*
- * Note what data should be used when forming file ETag values.
- * It would be nicer to do this as an ITERATE, but then we couldn't
- * remember the +/- state properly.
- */
-static const char *set_etag_bits(cmd_parms *cmd, void *mconfig,
- const char *args_p)
-{
- core_dir_config *cfg;
- etag_components_t bit;
- char action;
- char *token;
- const char *args;
- int valid;
- int first;
- int explicit;
-
- cfg = (core_dir_config *)mconfig;
-
- args = args_p;
- first = 1;
- explicit = 0;
- while (args[0] != '\0') {
- action = '*';
- bit = ETAG_UNSET;
- valid = 1;
- token = ap_getword_conf(cmd->pool, &args);
- if ((*token == '+') || (*token == '-')) {
- action = *token;
- token++;
- }
- else {
- /*
- * The occurrence of an absolute setting wipes
- * out any previous relative ones. The first such
- * occurrence forgets any inherited ones, too.
- */
- if (first) {
- cfg->etag_bits = ETAG_UNSET;
- cfg->etag_add = ETAG_UNSET;
- cfg->etag_remove = ETAG_UNSET;
- first = 0;
- }
- }
-
- if (strcasecmp(token, "None") == 0) {
- if (action != '*') {
- valid = 0;
- }
- else {
- cfg->etag_bits = bit = ETAG_NONE;
- explicit = 1;
- }
- }
- else if (strcasecmp(token, "All") == 0) {
- if (action != '*') {
- valid = 0;
- }
- else {
- explicit = 1;
- cfg->etag_bits = bit = ETAG_ALL;
- }
- }
- else if (strcasecmp(token, "Size") == 0) {
- bit = ETAG_SIZE;
- }
- else if ((strcasecmp(token, "LMTime") == 0)
- || (strcasecmp(token, "MTime") == 0)
- || (strcasecmp(token, "LastModified") == 0)) {
- bit = ETAG_MTIME;
- }
- else if (strcasecmp(token, "INode") == 0) {
- bit = ETAG_INODE;
- }
- else {
- return apr_pstrcat(cmd->pool, "Unknown keyword '",
- token, "' for ", cmd->cmd->name,
- " directive", NULL);
- }
-
- if (! valid) {
- return apr_pstrcat(cmd->pool, cmd->cmd->name, " keyword '",
- token, "' cannot be used with '+' or '-'",
- NULL);
- }
-
- if (action == '+') {
- /*
- * Make sure it's in the 'add' list and absent from the
- * 'subtract' list.
- */
- cfg->etag_add |= bit;
- cfg->etag_remove &= (~ bit);
- }
- else if (action == '-') {
- cfg->etag_remove |= bit;
- cfg->etag_add &= (~ bit);
- }
- else {
- /*
- * Non-relative values wipe out any + or - values
- * accumulated so far.
- */
- cfg->etag_bits |= bit;
- cfg->etag_add = ETAG_UNSET;
- cfg->etag_remove = ETAG_UNSET;
- explicit = 1;
- }
- }
-
- /*
- * Any setting at all will clear the 'None' and 'Unset' bits.
- */
-
- if (cfg->etag_add != ETAG_UNSET) {
- cfg->etag_add &= (~ ETAG_UNSET);
- }
-
- if (cfg->etag_remove != ETAG_UNSET) {
- cfg->etag_remove &= (~ ETAG_UNSET);
- }
-
- if (explicit) {
- cfg->etag_bits &= (~ ETAG_UNSET);
-
- if ((cfg->etag_bits & ETAG_NONE) != ETAG_NONE) {
- cfg->etag_bits &= (~ ETAG_NONE);
- }
- }
-
- return NULL;
-}
-
-static const char *set_enable_mmap(cmd_parms *cmd, void *d_,
- const char *arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- if (strcasecmp(arg, "on") == 0) {
- d->enable_mmap = ENABLE_MMAP_ON;
- }
- else if (strcasecmp(arg, "off") == 0) {
- d->enable_mmap = ENABLE_MMAP_OFF;
- }
- else {
- return "parameter must be 'on' or 'off'";
- }
-
- return NULL;
-}
-
-static const char *set_enable_sendfile(cmd_parms *cmd, void *d_,
- const char *arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- if (strcasecmp(arg, "on") == 0) {
- d->enable_sendfile = ENABLE_SENDFILE_ON;
- }
- else if (strcasecmp(arg, "off") == 0) {
- d->enable_sendfile = ENABLE_SENDFILE_OFF;
- }
- else {
- return "parameter must be 'on' or 'off'";
- }
-
- return NULL;
-}
-
-static const char *satisfy(cmd_parms *cmd, void *c_, const char *arg)
-{
- core_dir_config *c = c_;
- int satisfy = SATISFY_NOSPEC;
- int i;
-
- if (!strcasecmp(arg, "all")) {
- satisfy = SATISFY_ALL;
- }
- else if (!strcasecmp(arg, "any")) {
- satisfy = SATISFY_ANY;
- }
- else {
- return "Satisfy either 'any' or 'all'.";
- }
-
- for (i = 0; i < METHODS; ++i) {
- if (cmd->limited & (AP_METHOD_BIT << i)) {
- c->satisfy[i] = satisfy;
- }
- }
-
- return NULL;
-}
-
-static const char *require(cmd_parms *cmd, void *c_, const char *arg)
-{
- require_line *r;
- core_dir_config *c = c_;
-
- if (!c->ap_requires) {
- c->ap_requires = apr_array_make(cmd->pool, 2, sizeof(require_line));
- }
-
- r = (require_line *)apr_array_push(c->ap_requires);
- r->requirement = apr_pstrdup(cmd->pool, arg);
- r->method_mask = cmd->limited;
-
- return NULL;
-}
-
-/*
- * Report a missing-'>' syntax error.
- */
-static char *unclosed_directive(cmd_parms *cmd)
-{
- return apr_pstrcat(cmd->pool, cmd->cmd->name,
- "> directive missing closing '>'", NULL);
-}
-
-AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd,
- void *dummy,
- const char *arg)
-{
- const char *endp = ap_strrchr_c(arg, '>');
- const char *limited_methods;
- void *tog = cmd->cmd->cmd_data;
- apr_int64_t limited = 0;
- const char *errmsg;
-
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- limited_methods = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- while (limited_methods[0]) {
- char *method = ap_getword_conf(cmd->pool, &limited_methods);
- int methnum;
-
- /* check for builtin or module registered method number */
- methnum = ap_method_number_of(method);
-
- if (methnum == M_TRACE && !tog) {
- return "TRACE cannot be controlled by <Limit>";
- }
- else if (methnum == M_INVALID) {
- /* method has not been registered yet, but resorce restriction
- * is always checked before method handling, so register it.
- */
- methnum = ap_method_register(cmd->pool, method);
- }
-
- limited |= (AP_METHOD_BIT << methnum);
- }
-
- /* Killing two features with one function,
- * if (tog == NULL) <Limit>, else <LimitExcept>
- */
- cmd->limited = tog ? ~limited : limited;
-
- errmsg = ap_walk_config(cmd->directive->first_child, cmd, cmd->context);
-
- cmd->limited = -1;
-
- return errmsg;
-}
-
-/* XXX: Bogus - need to do this differently (at least OS2/Netware suffer
- * the same problem!!!
- * We use this in <DirectoryMatch> and <FilesMatch>, to ensure that
- * people don't get bitten by wrong-cased regex matches
- */
-
-#ifdef WIN32
-#define USE_ICASE REG_ICASE
-#else
-#define USE_ICASE 0
-#endif
-
-static const char *dirsection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
- const char *errmsg;
- const char *endp = ap_strrchr_c(arg, '>');
- int old_overrides = cmd->override;
- char *old_path = cmd->path;
- core_dir_config *conf;
- ap_conf_vector_t *new_dir_conf = ap_create_per_dir_config(cmd->pool);
- regex_t *r = NULL;
- const command_rec *thiscmd = cmd->cmd;
-
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- if (!arg) {
- if (thiscmd->cmd_data)
- return "<DirectoryMatch > block must specify a path";
- else
- return "<Directory > block must specify a path";
- }
-
- cmd->path = ap_getword_conf(cmd->pool, &arg);
- cmd->override = OR_ALL|ACCESS_CONF;
-
- if (!strcmp(cmd->path, "~")) {
- cmd->path = ap_getword_conf(cmd->pool, &arg);
- if (!cmd->path)
- return "<Directory ~ > block must specify a path";
- r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
- if (!r) {
- return "Regex could not be compiled";
- }
- }
- else if (thiscmd->cmd_data) { /* <DirectoryMatch> */
- r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
- if (!r) {
- return "Regex could not be compiled";
- }
- }
- else if (!strcmp(cmd->path, "/") == 0)
- {
- char *newpath;
-
- /*
- * Ensure that the pathname is canonical, and append the trailing /
- */
- apr_status_t rv = apr_filepath_merge(&newpath, NULL, cmd->path,
- APR_FILEPATH_TRUENAME, cmd->pool);
- if (rv != APR_SUCCESS && rv != APR_EPATHWILD) {
- return apr_pstrcat(cmd->pool, "<Directory \"", cmd->path,
- "\"> path is invalid.", NULL);
- }
-
- cmd->path = newpath;
- if (cmd->path[strlen(cmd->path) - 1] != '/')
- cmd->path = apr_pstrcat(cmd->pool, cmd->path, "/", NULL);
- }
-
- /* initialize our config and fetch it */
- conf = ap_set_config_vectors(cmd->server, new_dir_conf, cmd->path,
- &core_module, cmd->pool);
-
- errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_dir_conf);
- if (errmsg != NULL)
- return errmsg;
-
- conf->r = r;
- conf->d = cmd->path;
- conf->d_is_fnmatch = (apr_fnmatch_test(conf->d) != 0);
-
- /* Make this explicit - the "/" root has 0 elements, that is, we
- * will always merge it, and it will always sort and merge first.
- * All others are sorted and tested by the number of slashes.
- */
- if (strcmp(conf->d, "/") == 0)
- conf->d_components = 0;
- else
- conf->d_components = ap_count_dirs(conf->d);
-
- ap_add_per_dir_conf(cmd->server, new_dir_conf);
-
- if (*arg != '\0') {
- return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
- "> arguments not (yet) supported.", NULL);
- }
-
- cmd->path = old_path;
- cmd->override = old_overrides;
-
- return NULL;
-}
-
-static const char *urlsection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
- const char *errmsg;
- const char *endp = ap_strrchr_c(arg, '>');
- int old_overrides = cmd->override;
- char *old_path = cmd->path;
- core_dir_config *conf;
- regex_t *r = NULL;
- const command_rec *thiscmd = cmd->cmd;
- ap_conf_vector_t *new_url_conf = ap_create_per_dir_config(cmd->pool);
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- cmd->path = ap_getword_conf(cmd->pool, &arg);
- cmd->override = OR_ALL|ACCESS_CONF;
-
- if (thiscmd->cmd_data) { /* <LocationMatch> */
- r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED);
- if (!r) {
- return "Regex could not be compiled";
- }
- }
- else if (!strcmp(cmd->path, "~")) {
- cmd->path = ap_getword_conf(cmd->pool, &arg);
- r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED);
- if (!r) {
- return "Regex could not be compiled";
- }
- }
-
- /* initialize our config and fetch it */
- conf = ap_set_config_vectors(cmd->server, new_url_conf, cmd->path,
- &core_module, cmd->pool);
-
- errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_url_conf);
- if (errmsg != NULL)
- return errmsg;
-
- conf->d = apr_pstrdup(cmd->pool, cmd->path); /* No mangling, please */
- conf->d_is_fnmatch = apr_fnmatch_test(conf->d) != 0;
- conf->r = r;
-
- ap_add_per_url_conf(cmd->server, new_url_conf);
-
- if (*arg != '\0') {
- return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
- "> arguments not (yet) supported.", NULL);
- }
-
- cmd->path = old_path;
- cmd->override = old_overrides;
-
- return NULL;
-}
-
-static const char *filesection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
- const char *errmsg;
- const char *endp = ap_strrchr_c(arg, '>');
- int old_overrides = cmd->override;
- char *old_path = cmd->path;
- core_dir_config *conf;
- regex_t *r = NULL;
- const command_rec *thiscmd = cmd->cmd;
- core_dir_config *c = mconfig;
- ap_conf_vector_t *new_file_conf = ap_create_per_dir_config(cmd->pool);
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT|NOT_IN_LOCATION);
-
- if (err != NULL) {
- return err;
- }
-
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- cmd->path = ap_getword_conf(cmd->pool, &arg);
- /* Only if not an .htaccess file */
- if (!old_path) {
- cmd->override = OR_ALL|ACCESS_CONF;
- }
-
- if (thiscmd->cmd_data) { /* <FilesMatch> */
- r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
- if (!r) {
- return "Regex could not be compiled";
- }
- }
- else if (!strcmp(cmd->path, "~")) {
- cmd->path = ap_getword_conf(cmd->pool, &arg);
- r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
- if (!r) {
- return "Regex could not be compiled";
- }
- }
- else {
- char *newpath;
- /* Ensure that the pathname is canonical, but we
- * can't test the case/aliases without a fixed path */
- if (apr_filepath_merge(&newpath, "", cmd->path,
- 0, cmd->pool) != APR_SUCCESS)
- return apr_pstrcat(cmd->pool, "<Files \"", cmd->path,
- "\"> is invalid.", NULL);
- cmd->path = newpath;
- }
-
- /* initialize our config and fetch it */
- conf = ap_set_config_vectors(cmd->server, new_file_conf, cmd->path,
- &core_module, cmd->pool);
-
- errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_file_conf);
- if (errmsg != NULL)
- return errmsg;
-
- conf->d = cmd->path;
- conf->d_is_fnmatch = apr_fnmatch_test(conf->d) != 0;
- conf->r = r;
-
- ap_add_file_conf(c, new_file_conf);
-
- if (*arg != '\0') {
- return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
- "> arguments not (yet) supported.", NULL);
- }
-
- cmd->path = old_path;
- cmd->override = old_overrides;
-
- return NULL;
-}
-
-static const char *start_ifmod(cmd_parms *cmd, void *mconfig, const char *arg)
-{
- const char *endp = ap_strrchr_c(arg, '>');
- int not = (arg[0] == '!');
- module *found;
-
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- if (not) {
- arg++;
- }
-
- found = ap_find_linked_module(arg);
-
- /* search prelinked stuff */
- if (!found) {
- ap_module_symbol_t *current = ap_prelinked_module_symbols;
-
- for (; current->name; ++current) {
- if (!strcmp(current->name, arg)) {
- found = current->modp;
- break;
- }
- }
- }
-
- /* search dynamic stuff */
- if (!found) {
- APR_OPTIONAL_FN_TYPE(ap_find_loaded_module_symbol) *check_symbol =
- APR_RETRIEVE_OPTIONAL_FN(ap_find_loaded_module_symbol);
-
- if (check_symbol) {
- found = check_symbol(cmd->server, arg);
- }
- }
-
- if ((!not && found) || (not && !found)) {
- ap_directive_t *parent = NULL;
- ap_directive_t *current = NULL;
- const char *retval;
-
- retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
- &current, &parent, "<IfModule");
- *(ap_directive_t **)mconfig = current;
- return retval;
- }
- else {
- *(ap_directive_t **)mconfig = NULL;
- return ap_soak_end_container(cmd, "<IfModule");
- }
-}
-
-AP_DECLARE(int) ap_exists_config_define(const char *name)
-{
- char **defines;
- int i;
-
- defines = (char **)ap_server_config_defines->elts;
- for (i = 0; i < ap_server_config_defines->nelts; i++) {
- if (strcmp(defines[i], name) == 0) {
- return 1;
- }
- }
-
- return 0;
-}
-
-static const char *start_ifdefine(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *endp;
- int defined;
- int not = 0;
-
- endp = ap_strrchr_c(arg, '>');
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- if (arg[0] == '!') {
- not = 1;
- arg++;
- }
-
- defined = ap_exists_config_define(arg);
- if ((!not && defined) || (not && !defined)) {
- ap_directive_t *parent = NULL;
- ap_directive_t *current = NULL;
- const char *retval;
-
- retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
- &current, &parent, "<IfDefine");
- *(ap_directive_t **)dummy = current;
- return retval;
- }
- else {
- *(ap_directive_t **)dummy = NULL;
- return ap_soak_end_container(cmd, "<IfDefine");
- }
-}
-
-/* httpd.conf commands... beginning with the <VirtualHost> business */
-
-static const char *virtualhost_section(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- server_rec *main_server = cmd->server, *s;
- const char *errmsg;
- const char *endp = ap_strrchr_c(arg, '>');
- apr_pool_t *p = cmd->pool;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- if (endp == NULL) {
- return unclosed_directive(cmd);
- }
-
- arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
- /* FIXME: There's another feature waiting to happen here -- since you
- can now put multiple addresses/names on a single <VirtualHost>
- you might want to use it to group common definitions and then
- define other "subhosts" with their individual differences. But
- personally I'd rather just do it with a macro preprocessor. -djg */
- if (main_server->is_virtual) {
- return "<VirtualHost> doesn't nest!";
- }
-
- errmsg = ap_init_virtual_host(p, arg, main_server, &s);
- if (errmsg) {
- return errmsg;
- }
-
- s->next = main_server->next;
- main_server->next = s;
-
- s->defn_name = cmd->directive->filename;
- s->defn_line_number = cmd->directive->line_num;
-
- cmd->server = s;
-
- errmsg = ap_walk_config(cmd->directive->first_child, cmd,
- s->lookup_defaults);
-
- cmd->server = main_server;
-
- return errmsg;
-}
-
-static const char *set_server_alias(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- if (!cmd->server->names) {
- return "ServerAlias only used in <VirtualHost>";
- }
-
- while (*arg) {
- char **item, *name = ap_getword_conf(cmd->pool, &arg);
-
- if (ap_is_matchexp(name)) {
- item = (char **)apr_array_push(cmd->server->wild_names);
- }
- else {
- item = (char **)apr_array_push(cmd->server->names);
- }
-
- *item = name;
- }
-
- return NULL;
-}
-
-static const char *set_server_string_slot(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- /* This one's pretty generic... */
-
- int offset = (int)(long)cmd->info;
- char *struct_ptr = (char *)cmd->server;
-
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- *(const char **)(struct_ptr + offset) = arg;
- return NULL;
-}
-
-static const char *server_hostname_port(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- const char *portstr;
- int port;
-
- if (err != NULL) {
- return err;
- }
-
- portstr = ap_strchr_c(arg, ':');
- if (portstr) {
- cmd->server->server_hostname = apr_pstrndup(cmd->pool, arg,
- portstr - arg);
- portstr++;
- port = atoi(portstr);
- if (port <= 0 || port >= 65536) { /* 65536 == 1<<16 */
- return apr_pstrcat(cmd->temp_pool, "The port number \"", arg,
- "\" is outside the appropriate range "
- "(i.e., 1..65535).", NULL);
- }
- }
- else {
- cmd->server->server_hostname = apr_pstrdup(cmd->pool, arg);
- port = 0;
- }
-
- cmd->server->port = port;
- return NULL;
-}
-
-static const char *set_signature_flag(cmd_parms *cmd, void *d_,
- const char *arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- if (strcasecmp(arg, "On") == 0) {
- d->server_signature = srv_sig_on;
- }
- else if (strcasecmp(arg, "Off") == 0) {
- d->server_signature = srv_sig_off;
- }
- else if (strcasecmp(arg, "EMail") == 0) {
- d->server_signature = srv_sig_withmail;
- }
- else {
- return "ServerSignature: use one of: off | on | email";
- }
-
- return NULL;
-}
-
-static const char *set_server_root(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- if ((apr_filepath_merge((char**)&ap_server_root, NULL, arg,
- APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS)
- || !ap_is_directory(cmd->pool, ap_server_root)) {
- return "ServerRoot must be a valid directory";
- }
-
- return NULL;
-}
-
-static const char *set_timeout(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- cmd->server->timeout = apr_time_from_sec(atoi(arg));
- return NULL;
-}
-
-static const char *set_allow2f(cmd_parms *cmd, void *d_, int arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- d->allow_encoded_slashes = arg != 0;
- return NULL;
-}
-
-static const char *set_hostname_lookups(cmd_parms *cmd, void *d_,
- const char *arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- if (!strcasecmp(arg, "on")) {
- d->hostname_lookups = HOSTNAME_LOOKUP_ON;
- }
- else if (!strcasecmp(arg, "off")) {
- d->hostname_lookups = HOSTNAME_LOOKUP_OFF;
- }
- else if (!strcasecmp(arg, "double")) {
- d->hostname_lookups = HOSTNAME_LOOKUP_DOUBLE;
- }
- else {
- return "parameter must be 'on', 'off', or 'double'";
- }
-
- return NULL;
-}
-
-static const char *set_serverpath(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- cmd->server->path = arg;
- cmd->server->pathlen = strlen(arg);
- return NULL;
-}
-
-static const char *set_content_md5(cmd_parms *cmd, void *d_, int arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- d->content_md5 = arg != 0;
- return NULL;
-}
-
-static const char *set_accept_path_info(cmd_parms *cmd, void *d_, const char *arg)
-{
- core_dir_config *d = d_;
-
- if (strcasecmp(arg, "on") == 0) {
- d->accept_path_info = AP_REQ_ACCEPT_PATH_INFO;
- }
- else if (strcasecmp(arg, "off") == 0) {
- d->accept_path_info = AP_REQ_REJECT_PATH_INFO;
- }
- else if (strcasecmp(arg, "default") == 0) {
- d->accept_path_info = AP_REQ_DEFAULT_PATH_INFO;
- }
- else {
- return "AcceptPathInfo must be set to on, off or default";
- }
-
- return NULL;
-}
-
-static const char *set_use_canonical_name(cmd_parms *cmd, void *d_,
- const char *arg)
-{
- core_dir_config *d = d_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- if (strcasecmp(arg, "on") == 0) {
- d->use_canonical_name = USE_CANONICAL_NAME_ON;
- }
- else if (strcasecmp(arg, "off") == 0) {
- d->use_canonical_name = USE_CANONICAL_NAME_OFF;
- }
- else if (strcasecmp(arg, "dns") == 0) {
- d->use_canonical_name = USE_CANONICAL_NAME_DNS;
- }
- else {
- return "parameter must be 'on', 'off', or 'dns'";
- }
-
- return NULL;
-}
-
-
-static const char *include_config (cmd_parms *cmd, void *dummy,
- const char *name)
-{
- ap_directive_t *conftree = NULL;
- const char* conffile, *error;
- unsigned *recursion;
- void *data;
-
- apr_pool_userdata_get(&data, "ap_include_sentinel", cmd->pool);
- if (data) {
- recursion = data;
- }
- else {
- data = recursion = apr_palloc(cmd->pool, sizeof(*recursion));
- *recursion = 0;
- apr_pool_userdata_setn(data, "ap_include_sentinel", NULL, cmd->pool);
- }
-
- if (++*recursion > AP_MAX_INCLUDE_DEPTH) {
- *recursion = 0;
- return apr_psprintf(cmd->pool, "Exceeded maximum include depth of %u. "
- "You have probably a recursion somewhere.",
- AP_MAX_INCLUDE_DEPTH);
- }
-
- conffile = ap_server_root_relative(cmd->pool, name);
- if (!conffile) {
- *recursion = 0;
- return apr_pstrcat(cmd->pool, "Invalid Include path ",
- name, NULL);
- }
-
- error = ap_process_resource_config(cmd->server, conffile,
- &conftree, cmd->pool, cmd->temp_pool);
- if (error) {
- *recursion = 0;
- return error;
- }
-
- *(ap_directive_t **)dummy = conftree;
-
- /* recursion level done */
- if (*recursion) {
- --*recursion;
- }
-
- return NULL;
-}
-
-static const char *set_loglevel(cmd_parms *cmd, void *dummy, const char *arg)
-{
- char *str;
-
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- if (err != NULL) {
- return err;
- }
-
- if ((str = ap_getword_conf(cmd->pool, &arg))) {
- if (!strcasecmp(str, "emerg")) {
- cmd->server->loglevel = APLOG_EMERG;
- }
- else if (!strcasecmp(str, "alert")) {
- cmd->server->loglevel = APLOG_ALERT;
- }
- else if (!strcasecmp(str, "crit")) {
- cmd->server->loglevel = APLOG_CRIT;
- }
- else if (!strcasecmp(str, "error")) {
- cmd->server->loglevel = APLOG_ERR;
- }
- else if (!strcasecmp(str, "warn")) {
- cmd->server->loglevel = APLOG_WARNING;
- }
- else if (!strcasecmp(str, "notice")) {
- cmd->server->loglevel = APLOG_NOTICE;
- }
- else if (!strcasecmp(str, "info")) {
- cmd->server->loglevel = APLOG_INFO;
- }
- else if (!strcasecmp(str, "debug")) {
- cmd->server->loglevel = APLOG_DEBUG;
- }
- else {
- return "LogLevel requires level keyword: one of "
- "emerg/alert/crit/error/warn/notice/info/debug";
- }
- }
- else {
- return "LogLevel requires level keyword";
- }
-
- return NULL;
-}
-
-AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r)
-{
- char sport[20];
- core_dir_config *conf;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
- if ((conf->server_signature == srv_sig_off)
- || (conf->server_signature == srv_sig_unset)) {
- return "";
- }
-
- apr_snprintf(sport, sizeof sport, "%u", (unsigned) ap_get_server_port(r));
-
- if (conf->server_signature == srv_sig_withmail) {
- return apr_pstrcat(r->pool, prefix, "<address>",
- ap_get_server_version(),
- " Server at <a href=\"",
- ap_is_url(r->server->server_admin) ? "" : "mailto:",
- ap_escape_html(r->pool, r->server->server_admin),
- "\">",
- ap_escape_html(r->pool, ap_get_server_name(r)),
- "</a> Port ", sport,
- "</address>\n", NULL);
- }
-
- return apr_pstrcat(r->pool, prefix, "<address>", ap_get_server_version(),
- " Server at ",
- ap_escape_html(r->pool, ap_get_server_name(r)),
- " Port ", sport,
- "</address>\n", NULL);
-}
-
-/*
- * Load an authorisation realm into our location configuration, applying the
- * usual rules that apply to realms.
- */
-static const char *set_authname(cmd_parms *cmd, void *mconfig,
- const char *word1)
-{
- core_dir_config *aconfig = (core_dir_config *)mconfig;
-
- aconfig->ap_auth_name = ap_escape_quotes(cmd->pool, word1);
- return NULL;
-}
-
-/*
- * Handle a request to include the server's OS platform in the Server
- * response header field (the ServerTokens directive). Unfortunately
- * this requires a new global in order to communicate the setting back to
- * http_main so it can insert the information in the right place in the
- * string.
- */
-
-static char *server_version = NULL;
-static int version_locked = 0;
-
-enum server_token_type {
- SrvTk_MAJOR, /* eg: Apache/2 */
- SrvTk_MINOR, /* eg. Apache/2.0 */
- SrvTk_MINIMAL, /* eg: Apache/2.0.41 */
- SrvTk_OS, /* eg: Apache/2.0.41 (UNIX) */
- SrvTk_FULL, /* eg: Apache/2.0.41 (UNIX) PHP/4.2.2 FooBar/1.2b */
- SrvTk_PRODUCT_ONLY /* eg: Apache */
-};
-static enum server_token_type ap_server_tokens = SrvTk_FULL;
-
-static apr_status_t reset_version(void *dummy)
-{
- version_locked = 0;
- ap_server_tokens = SrvTk_FULL;
- server_version = NULL;
- return APR_SUCCESS;
-}
-
-AP_DECLARE(void) ap_get_server_revision(ap_version_t *version)
-{
- version->major = AP_SERVER_MAJORVERSION_NUMBER;
- version->minor = AP_SERVER_MINORVERSION_NUMBER;
- version->patch = AP_SERVER_PATCHLEVEL_NUMBER;
- version->add_string = AP_SERVER_ADD_STRING;
-}
-
-AP_DECLARE(const char *) ap_get_server_version(void)
-{
- return (server_version ? server_version : AP_SERVER_BASEVERSION);
-}
-
-AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *component)
-{
- if (! version_locked) {
- /*
- * If the version string is null, register our cleanup to reset the
- * pointer on pool destruction. We also know that, if NULL,
- * we are adding the original SERVER_BASEVERSION string.
- */
- if (server_version == NULL) {
- apr_pool_cleanup_register(pconf, NULL, reset_version,
- apr_pool_cleanup_null);
- server_version = apr_pstrdup(pconf, component);
- }
- else {
- /*
- * Tack the given component identifier to the end of
- * the existing string.
- */
- server_version = apr_pstrcat(pconf, server_version, " ",
- component, NULL);
- }
- }
-}
-
-/*
- * This routine adds the real server base identity to the version string,
- * and then locks out changes until the next reconfig.
- */
-static void ap_set_version(apr_pool_t *pconf)
-{
- if (ap_server_tokens == SrvTk_PRODUCT_ONLY) {
- ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT);
- }
- else if (ap_server_tokens == SrvTk_MINIMAL) {
- ap_add_version_component(pconf, AP_SERVER_BASEVERSION);
- }
- else if (ap_server_tokens == SrvTk_MINOR) {
- ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT "/" AP_SERVER_MINORREVISION);
- }
- else if (ap_server_tokens == SrvTk_MAJOR) {
- ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT "/" AP_SERVER_MAJORVERSION);
- }
- else {
- ap_add_version_component(pconf, AP_SERVER_BASEVERSION " (" PLATFORM ")");
- }
-
- /*
- * Lock the server_version string if we're not displaying
- * the full set of tokens
- */
- if (ap_server_tokens != SrvTk_FULL) {
- version_locked++;
- }
-}
-
-static const char *set_serv_tokens(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- if (!strcasecmp(arg, "OS")) {
- ap_server_tokens = SrvTk_OS;
- }
- else if (!strcasecmp(arg, "Min") || !strcasecmp(arg, "Minimal")) {
- ap_server_tokens = SrvTk_MINIMAL;
- }
- else if (!strcasecmp(arg, "Major")) {
- ap_server_tokens = SrvTk_MAJOR;
- }
- else if (!strcasecmp(arg, "Minor") ) {
- ap_server_tokens = SrvTk_MINOR;
- }
- else if (!strcasecmp(arg, "Prod") || !strcasecmp(arg, "ProductOnly")) {
- ap_server_tokens = SrvTk_PRODUCT_ONLY;
- }
- else {
- ap_server_tokens = SrvTk_FULL;
- }
-
- return NULL;
-}
-
-static const char *set_limit_req_line(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- int lim;
-
- if (err != NULL) {
- return err;
- }
-
- lim = atoi(arg);
- if (lim < 0) {
- return apr_pstrcat(cmd->temp_pool, "LimitRequestLine \"", arg,
- "\" must be a non-negative integer", NULL);
- }
-
- cmd->server->limit_req_line = lim;
- return NULL;
-}
-
-static const char *set_limit_req_fieldsize(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- int lim;
-
- if (err != NULL) {
- return err;
- }
-
- lim = atoi(arg);
- if (lim < 0) {
- return apr_pstrcat(cmd->temp_pool, "LimitRequestFieldsize \"", arg,
- "\" must be a non-negative integer (0 = no limit)",
- NULL);
- }
-
- if (lim > DEFAULT_LIMIT_REQUEST_FIELDSIZE) {
- return apr_psprintf(cmd->temp_pool, "LimitRequestFieldsize \"%s\" "
- "must not exceed the precompiled maximum of %d",
- arg, DEFAULT_LIMIT_REQUEST_FIELDSIZE);
- }
-
- cmd->server->limit_req_fieldsize = lim;
- return NULL;
-}
-
-static const char *set_limit_req_fields(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd,
- NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- int lim;
-
- if (err != NULL) {
- return err;
- }
-
- lim = atoi(arg);
- if (lim < 0) {
- return apr_pstrcat(cmd->temp_pool, "LimitRequestFields \"", arg,
- "\" must be a non-negative integer (0 = no limit)",
- NULL);
- }
-
- cmd->server->limit_req_fields = lim;
- return NULL;
-}
-
-static const char *set_limit_req_body(cmd_parms *cmd, void *conf_,
- const char *arg)
-{
- core_dir_config *conf = conf_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
- char *errp;
-
- if (err != NULL) {
- return err;
- }
-
- if (APR_SUCCESS != apr_strtoff(&conf->limit_req_body, arg, &errp, 10)) {
- return "LimitRequestBody argument is not parsable.";
- }
- if (*errp || conf->limit_req_body < 0) {
- return "LimitRequestBody requires a non-negative integer.";
- }
-
- return NULL;
-}
-
-static const char *set_limit_xml_req_body(cmd_parms *cmd, void *conf_,
- const char *arg)
-{
- core_dir_config *conf = conf_;
- const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
- if (err != NULL) {
- return err;
- }
-
- conf->limit_xml_body = atol(arg);
- if (conf->limit_xml_body < 0)
- return "LimitXMLRequestBody requires a non-negative integer.";
-
- return NULL;
-}
-
-AP_DECLARE(size_t) ap_get_limit_xml_body(const request_rec *r)
-{
- core_dir_config *conf;
-
- conf = ap_get_module_config(r->per_dir_config, &core_module);
- if (conf->limit_xml_body == AP_LIMIT_UNSET)
- return AP_DEFAULT_LIMIT_XML_BODY;
-
- return (size_t)conf->limit_xml_body;
-}
-
-#if !defined (RLIMIT_CPU) || !(defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)) || !defined (RLIMIT_NPROC)
-static const char *no_set_limit(cmd_parms *cmd, void *conf_,
- const char *arg, const char *arg2)
-{
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, cmd->server,
- "%s not supported on this platform", cmd->cmd->name);
-
- return NULL;
-}
-#endif
-
-#ifdef RLIMIT_CPU
-static const char *set_limit_cpu(cmd_parms *cmd, void *conf_,
- const char *arg, const char *arg2)
-{
- core_dir_config *conf = conf_;
-
- unixd_set_rlimit(cmd, &conf->limit_cpu, arg, arg2, RLIMIT_CPU);
- return NULL;
-}
-#endif
-
-#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
-static const char *set_limit_mem(cmd_parms *cmd, void *conf_,
- const char *arg, const char * arg2)
-{
- core_dir_config *conf = conf_;
-
-#if defined(RLIMIT_AS)
- unixd_set_rlimit(cmd, &conf->limit_mem, arg, arg2 ,RLIMIT_AS);
-#elif defined(RLIMIT_DATA)
- unixd_set_rlimit(cmd, &conf->limit_mem, arg, arg2, RLIMIT_DATA);
-#elif defined(RLIMIT_VMEM)
- unixd_set_rlimit(cmd, &conf->limit_mem, arg, arg2, RLIMIT_VMEM);
-#endif
-
- return NULL;
-}
-#endif
-
-#ifdef RLIMIT_NPROC
-static const char *set_limit_nproc(cmd_parms *cmd, void *conf_,
- const char *arg, const char * arg2)
-{
- core_dir_config *conf = conf_;
-
- unixd_set_rlimit(cmd, &conf->limit_nproc, arg, arg2, RLIMIT_NPROC);
- return NULL;
-}
-#endif
-
-static const char *set_recursion_limit(cmd_parms *cmd, void *dummy,
- const char *arg1, const char *arg2)
-{
- core_server_config *conf = ap_get_module_config(cmd->server->module_config,
- &core_module);
- int limit = atoi(arg1);
-
- if (limit <= 0) {
- return "The recursion limit must be greater than zero.";
- }
- if (limit < 4) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "Limiting internal redirects to very low numbers may "
- "cause normal requests to fail.");
- }
-
- conf->redirect_limit = limit;
-
- if (arg2) {
- limit = atoi(arg2);
-
- if (limit <= 0) {
- return "The recursion limit must be greater than zero.";
- }
- if (limit < 4) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
- "Limiting the subrequest depth to a very low level may"
- " cause normal requests to fail.");
- }
- }
-
- conf->subreq_limit = limit;
-
- return NULL;
-}
-
-static void log_backtrace(const request_rec *r)
-{
- const request_rec *top = r;
-
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "r->uri = %s", r->uri ? r->uri : "(unexpectedly NULL)");
-
- while (top && (top->prev || top->main)) {
- if (top->prev) {
- top = top->prev;
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "redirected from r->uri = %s",
- top->uri ? top->uri : "(unexpectedly NULL)");
- }
-
- if (!top->prev && top->main) {
- top = top->main;
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "subrequested from r->uri = %s",
- top->uri ? top->uri : "(unexpectedly NULL)");
- }
- }
-}
-
-/*
- * check whether redirect limit is reached
- */
-AP_DECLARE(int) ap_is_recursion_limit_exceeded(const request_rec *r)
-{
- core_server_config *conf = ap_get_module_config(r->server->module_config,
- &core_module);
- const request_rec *top = r;
- int redirects = 0, subreqs = 0;
- int rlimit = conf->redirect_limit
- ? conf->redirect_limit
- : AP_DEFAULT_MAX_INTERNAL_REDIRECTS;
- int slimit = conf->subreq_limit
- ? conf->subreq_limit
- : AP_DEFAULT_MAX_SUBREQ_DEPTH;
-
-
- while (top->prev || top->main) {
- if (top->prev) {
- if (++redirects >= rlimit) {
- /* uuh, too much. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Request exceeded the limit of %d internal "
- "redirects due to probable configuration error. "
- "Use 'LimitInternalRecursion' to increase the "
- "limit if necessary. Use 'LogLevel debug' to get "
- "a backtrace.", rlimit);
-
- /* post backtrace */
- log_backtrace(r);
-
- /* return failure */
- return 1;
- }
-
- top = top->prev;
- }
-
- if (!top->prev && top->main) {
- if (++subreqs >= slimit) {
- /* uuh, too much. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Request exceeded the limit of %d subrequest "
- "nesting levels due to probable confguration "
- "error. Use 'LimitInternalRecursion' to increase "
- "the limit if necessary. Use 'LogLevel debug' to "
- "get a backtrace.", slimit);
-
- /* post backtrace */
- log_backtrace(r);
-
- /* return failure */
- return 1;
- }
-
- top = top->main;
- }
- }
-
- /* recursion state: ok */
- return 0;
-}
-
-static const char *add_ct_output_filters(cmd_parms *cmd, void *conf_,
- const char *arg, const char *arg2)
-{
- core_dir_config *conf = conf_;
- ap_filter_rec_t *old, *new = NULL;
- const char *filter_name;
-
- if (!conf->ct_output_filters) {
- conf->ct_output_filters = apr_hash_make(cmd->pool);
- old = NULL;
- }
- else {
- old = (ap_filter_rec_t*) apr_hash_get(conf->ct_output_filters, arg2,
- APR_HASH_KEY_STRING);
- /* find last entry */
- if (old) {
- while (old->next) {
- old = old->next;
- }
- }
- }
-
- while (*arg &&
- (filter_name = ap_getword(cmd->pool, &arg, ';')) &&
- strcmp(filter_name, "")) {
- new = apr_pcalloc(cmd->pool, sizeof(ap_filter_rec_t));
- new->name = filter_name;
-
- /* We found something, so let's append it. */
- if (old) {
- old->next = new;
- }
- else {
- apr_hash_set(conf->ct_output_filters, arg2,
- APR_HASH_KEY_STRING, new);
- }
- old = new;
- }
-
- if (!new) {
- return "invalid filter name";
- }
-
- return NULL;
-}
-/*
- * Insert filters requested by the AddOutputFilterByType
- * configuration directive. We cannot add filters based
- * on content-type until after the handler has started
- * to run. Only then do we reliably know the content-type.
- */
-void ap_add_output_filters_by_type(request_rec *r)
-{
- core_dir_config *conf;
- const char *ctype;
-
- conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- /* We can't do anything with proxy requests, no content-types or if
- * we don't have a filter configured.
- */
- if (r->proxyreq != PROXYREQ_NONE || !r->content_type ||
- !conf->ct_output_filters) {
- return;
- }
-
- /* remove c-t decoration */
- ctype = ap_field_noparam(r->pool, r->content_type);
- if (ctype) {
- ap_filter_rec_t *ct_filter;
- ct_filter = apr_hash_get(conf->ct_output_filters, ctype,
- APR_HASH_KEY_STRING);
- while (ct_filter) {
- ap_add_output_filter(ct_filter->name, NULL, r, r->connection);
- ct_filter = ct_filter->next;
- }
- }
-
- return;
-}
-
-static apr_status_t writev_it_all(apr_socket_t *s,
- struct iovec *vec, int nvec,
- apr_size_t len, apr_size_t *nbytes)
-{
- apr_size_t bytes_written = 0;
- apr_status_t rv;
- apr_size_t n = len;
- int i = 0;
-
- *nbytes = 0;
-
- /* XXX handle checking for non-blocking socket */
- while (bytes_written != len) {
- rv = apr_socket_sendv(s, vec + i, nvec - i, &n);
- *nbytes += n;
- bytes_written += n;
- if (rv != APR_SUCCESS)
- return rv;
-
- /* If the write did not complete, adjust the iovecs and issue
- * apr_socket_sendv again
- */
- if (bytes_written < len) {
- /* Skip over the vectors that have already been written */
- apr_size_t cnt = vec[i].iov_len;
- while (n >= cnt && i + 1 < nvec) {
- i++;
- cnt += vec[i].iov_len;
- }
-
- if (n < cnt) {
- /* Handle partial write of vec i */
- vec[i].iov_base = (char *) vec[i].iov_base +
- (vec[i].iov_len - (cnt - n));
- vec[i].iov_len = cnt -n;
- }
- }
-
- n = len - bytes_written;
- }
-
- return APR_SUCCESS;
-}
-
-/* sendfile_it_all()
- * send the entire file using sendfile()
- * handle partial writes
- * return only when all bytes have been sent or an error is encountered.
- */
-
-#if APR_HAS_SENDFILE
-static apr_status_t sendfile_it_all(core_net_rec *c,
- apr_file_t *fd,
- apr_hdtr_t *hdtr,
- apr_off_t file_offset,
- apr_size_t file_bytes_left,
- apr_size_t total_bytes_left,
- apr_size_t *bytes_sent,
- apr_int32_t flags)
-{
- apr_status_t rv;
-#ifdef AP_DEBUG
- apr_interval_time_t timeout = 0;
-#endif
-
- AP_DEBUG_ASSERT((apr_socket_timeout_get(c->client_socket, &timeout)
- == APR_SUCCESS)
- && timeout > 0); /* socket must be in timeout mode */
-
- /* Reset the bytes_sent field */
- *bytes_sent = 0;
-
- do {
- apr_size_t tmplen = file_bytes_left;
-
- rv = apr_socket_sendfile(c->client_socket, fd, hdtr, &file_offset, &tmplen,
- flags);
- *bytes_sent += tmplen;
- total_bytes_left -= tmplen;
- if (!total_bytes_left || rv != APR_SUCCESS) {
- return rv; /* normal case & error exit */
- }
-
- AP_DEBUG_ASSERT(total_bytes_left > 0 && tmplen > 0);
-
- /* partial write, oooh noooo...
- * Skip over any header data which was written
- */
- while (tmplen && hdtr->numheaders) {
- if (tmplen >= hdtr->headers[0].iov_len) {
- tmplen -= hdtr->headers[0].iov_len;
- --hdtr->numheaders;
- ++hdtr->headers;
- }
- else {
- char *iov_base = (char *)hdtr->headers[0].iov_base;
-
- hdtr->headers[0].iov_len -= tmplen;
- iov_base += tmplen;
- hdtr->headers[0].iov_base = iov_base;
- tmplen = 0;
- }
- }
-
- /* Skip over any file data which was written */
-
- if (tmplen <= file_bytes_left) {
- file_offset += tmplen;
- file_bytes_left -= tmplen;
- continue;
- }
-
- tmplen -= file_bytes_left;
- file_bytes_left = 0;
- file_offset = 0;
-
- /* Skip over any trailer data which was written */
-
- while (tmplen && hdtr->numtrailers) {
- if (tmplen >= hdtr->trailers[0].iov_len) {
- tmplen -= hdtr->trailers[0].iov_len;
- --hdtr->numtrailers;
- ++hdtr->trailers;
- }
- else {
- char *iov_base = (char *)hdtr->trailers[0].iov_base;
-
- hdtr->trailers[0].iov_len -= tmplen;
- iov_base += tmplen;
- hdtr->trailers[0].iov_base = iov_base;
- tmplen = 0;
- }
- }
- } while (1);
-}
-#endif
-
-/*
- * emulate_sendfile()
- * Sends the contents of file fd along with header/trailer bytes, if any,
- * to the network. emulate_sendfile will return only when all the bytes have been
- * sent (i.e., it handles partial writes) or on a network error condition.
- */
-static apr_status_t emulate_sendfile(core_net_rec *c, apr_file_t *fd,
- apr_hdtr_t *hdtr, apr_off_t offset,
- apr_size_t length, apr_size_t *nbytes)
-{
- apr_status_t rv = APR_SUCCESS;
- apr_int32_t togo; /* Remaining number of bytes in the file to send */
- apr_size_t sendlen = 0;
- apr_size_t bytes_sent;
- apr_int32_t i;
- apr_off_t o; /* Track the file offset for partial writes */
- char buffer[8192];
-
- *nbytes = 0;
-
- /* Send the headers
- * writev_it_all handles partial writes.
- * XXX: optimization... if headers are less than MIN_WRITE_SIZE, copy
- * them into buffer
- */
- if (hdtr && hdtr->numheaders > 0 ) {
- for (i = 0; i < hdtr->numheaders; i++) {
- sendlen += hdtr->headers[i].iov_len;
- }
-
- rv = writev_it_all(c->client_socket, hdtr->headers, hdtr->numheaders,
- sendlen, &bytes_sent);
- *nbytes += bytes_sent; /* track total bytes sent */
- }
-
- /* Seek the file to 'offset' */
- if (offset >= 0 && rv == APR_SUCCESS) {
- rv = apr_file_seek(fd, APR_SET, &offset);
- }
-
- /* Send the file, making sure to handle partial writes */
- togo = length;
- while (rv == APR_SUCCESS && togo) {
- sendlen = togo > sizeof(buffer) ? sizeof(buffer) : togo;
- o = 0;
- rv = apr_file_read(fd, buffer, &sendlen);
- while (rv == APR_SUCCESS && sendlen) {
- bytes_sent = sendlen;
- rv = apr_socket_send(c->client_socket, &buffer[o], &bytes_sent);
- *nbytes += bytes_sent;
- if (rv == APR_SUCCESS) {
- sendlen -= bytes_sent; /* sendlen != bytes_sent ==> partial write */
- o += bytes_sent; /* o is where we are in the buffer */
- togo -= bytes_sent; /* track how much of the file we've sent */
- }
- }
- }
-
- /* Send the trailers
- * XXX: optimization... if it will fit, send this on the last send in the
- * loop above
- */
- sendlen = 0;
- if ( rv == APR_SUCCESS && hdtr && hdtr->numtrailers > 0 ) {
- for (i = 0; i < hdtr->numtrailers; i++) {
- sendlen += hdtr->trailers[i].iov_len;
- }
- rv = writev_it_all(c->client_socket, hdtr->trailers, hdtr->numtrailers,
- sendlen, &bytes_sent);
- *nbytes += bytes_sent;
- }
-
- return rv;
-}
-
-/* Note --- ErrorDocument will now work from .htaccess files.
- * The AllowOverride of Fileinfo allows webmasters to turn it off
- */
-
-static const command_rec core_cmds[] = {
-
-/* Old access config file commands */
-
-AP_INIT_RAW_ARGS("<Directory", dirsection, NULL, RSRC_CONF,
- "Container for directives affecting resources located in the specified "
- "directories"),
-AP_INIT_RAW_ARGS("<Location", urlsection, NULL, RSRC_CONF,
- "Container for directives affecting resources accessed through the "
- "specified URL paths"),
-AP_INIT_RAW_ARGS("<VirtualHost", virtualhost_section, NULL, RSRC_CONF,
- "Container to map directives to a particular virtual host, takes one or "
- "more host addresses"),
-AP_INIT_RAW_ARGS("<Files", filesection, NULL, OR_ALL,
- "Container for directives affecting files matching specified patterns"),
-AP_INIT_RAW_ARGS("<Limit", ap_limit_section, NULL, OR_ALL,
- "Container for authentication directives when accessed using specified HTTP "
- "methods"),
-AP_INIT_RAW_ARGS("<LimitExcept", ap_limit_section, (void*)1, OR_ALL,
- "Container for authentication directives to be applied when any HTTP "
- "method other than those specified is used to access the resource"),
-AP_INIT_TAKE1("<IfModule", start_ifmod, NULL, EXEC_ON_READ | OR_ALL,
- "Container for directives based on existance of specified modules"),
-AP_INIT_TAKE1("<IfDefine", start_ifdefine, NULL, EXEC_ON_READ | OR_ALL,
- "Container for directives based on existance of command line defines"),
-AP_INIT_RAW_ARGS("<DirectoryMatch", dirsection, (void*)1, RSRC_CONF,
- "Container for directives affecting resources located in the "
- "specified directories"),
-AP_INIT_RAW_ARGS("<LocationMatch", urlsection, (void*)1, RSRC_CONF,
- "Container for directives affecting resources accessed through the "
- "specified URL paths"),
-AP_INIT_RAW_ARGS("<FilesMatch", filesection, (void*)1, OR_ALL,
- "Container for directives affecting files matching specified patterns"),
-AP_INIT_TAKE1("AuthType", ap_set_string_slot,
- (void*)APR_OFFSETOF(core_dir_config, ap_auth_type), OR_AUTHCFG,
- "An HTTP authorization type (e.g., \"Basic\")"),
-AP_INIT_TAKE1("AuthName", set_authname, NULL, OR_AUTHCFG,
- "The authentication realm (e.g. \"Members Only\")"),
-AP_INIT_RAW_ARGS("Require", require, NULL, OR_AUTHCFG,
- "Selects which authenticated users or groups may access a protected space"),
-AP_INIT_TAKE1("Satisfy", satisfy, NULL, OR_AUTHCFG,
- "access policy if both allow and require used ('all' or 'any')"),
-#ifdef GPROF
-AP_INIT_TAKE1("GprofDir", set_gprof_dir, NULL, RSRC_CONF,
- "Directory to plop gmon.out files"),
-#endif
-AP_INIT_TAKE1("AddDefaultCharset", set_add_default_charset, NULL, OR_FILEINFO,
- "The name of the default charset to add to any Content-Type without one or 'Off' to disable"),
-AP_INIT_TAKE1("AcceptPathInfo", set_accept_path_info, NULL, OR_FILEINFO,
- "Set to on or off for PATH_INFO to be accepted by handlers, or default for the per-handler preference"),
-
-/* Old resource config file commands */
-
-AP_INIT_RAW_ARGS("AccessFileName", set_access_name, NULL, RSRC_CONF,
- "Name(s) of per-directory config files (default: .htaccess)"),
-AP_INIT_TAKE1("DocumentRoot", set_document_root, NULL, RSRC_CONF,
- "Root directory of the document tree"),
-AP_INIT_TAKE2("ErrorDocument", set_error_document, NULL, OR_FILEINFO,
- "Change responses for HTTP errors"),
-AP_INIT_RAW_ARGS("AllowOverride", set_override, NULL, ACCESS_CONF,
- "Controls what groups of directives can be configured by per-directory "
- "config files"),
-AP_INIT_RAW_ARGS("Options", set_options, NULL, OR_OPTIONS,
- "Set a number of attributes for a given directory"),
-AP_INIT_TAKE1("DefaultType", ap_set_string_slot,
- (void*)APR_OFFSETOF(core_dir_config, ap_default_type),
- OR_FILEINFO, "the default MIME type for untypable files"),
-AP_INIT_RAW_ARGS("FileETag", set_etag_bits, NULL, OR_FILEINFO,
- "Specify components used to construct a file's ETag"),
-AP_INIT_TAKE1("EnableMMAP", set_enable_mmap, NULL, OR_FILEINFO,
- "Controls whether memory-mapping may be used to read files"),
-AP_INIT_TAKE1("EnableSendfile", set_enable_sendfile, NULL, OR_FILEINFO,
- "Controls whether sendfile may be used to transmit files"),
-
-/* Old server config file commands */
-
-AP_INIT_TAKE1("Port", ap_set_deprecated, NULL, RSRC_CONF,
- "Port was replaced with Listen in Apache 2.0"),
-AP_INIT_TAKE1("HostnameLookups", set_hostname_lookups, NULL,
- ACCESS_CONF|RSRC_CONF,
- "\"on\" to enable, \"off\" to disable reverse DNS lookups, or \"double\" to "
- "enable double-reverse DNS lookups"),
-AP_INIT_TAKE1("ServerAdmin", set_server_string_slot,
- (void *)APR_OFFSETOF(server_rec, server_admin), RSRC_CONF,
- "The email address of the server administrator"),
-AP_INIT_TAKE1("ServerName", server_hostname_port, NULL, RSRC_CONF,
- "The hostname and port of the server"),
-AP_INIT_TAKE1("ServerSignature", set_signature_flag, NULL, OR_ALL,
- "En-/disable server signature (on|off|email)"),
-AP_INIT_TAKE1("ServerRoot", set_server_root, NULL, RSRC_CONF | EXEC_ON_READ,
- "Common directory of server-related files (logs, confs, etc.)"),
-AP_INIT_TAKE1("ErrorLog", set_server_string_slot,
- (void *)APR_OFFSETOF(server_rec, error_fname), RSRC_CONF,
- "The filename of the error log"),
-AP_INIT_RAW_ARGS("ServerAlias", set_server_alias, NULL, RSRC_CONF,
- "A name or names alternately used to access the server"),
-AP_INIT_TAKE1("ServerPath", set_serverpath, NULL, RSRC_CONF,
- "The pathname the server can be reached at"),
-AP_INIT_TAKE1("Timeout", set_timeout, NULL, RSRC_CONF,
- "Timeout duration (sec)"),
-AP_INIT_FLAG("ContentDigest", set_content_md5, NULL, OR_OPTIONS,
- "whether or not to send a Content-MD5 header with each request"),
-AP_INIT_TAKE1("UseCanonicalName", set_use_canonical_name, NULL,
- RSRC_CONF|ACCESS_CONF,
- "How to work out the ServerName : Port when constructing URLs"),
-/* TODO: RlimitFoo should all be part of mod_cgi, not in the core */
-/* TODO: ListenBacklog in MPM */
-AP_INIT_TAKE1("Include", include_config, NULL,
- (RSRC_CONF | ACCESS_CONF | EXEC_ON_READ),
- "Name of the config file to be included"),
-AP_INIT_TAKE1("LogLevel", set_loglevel, NULL, RSRC_CONF,
- "Level of verbosity in error logging"),
-AP_INIT_TAKE1("NameVirtualHost", ap_set_name_virtual_host, NULL, RSRC_CONF,
- "A numeric IP address:port, or the name of a host"),
-AP_INIT_TAKE1("ServerTokens", set_serv_tokens, NULL, RSRC_CONF,
- "Determine tokens displayed in the Server: header - Min(imal), OS or Full"),
-AP_INIT_TAKE1("LimitRequestLine", set_limit_req_line, NULL, RSRC_CONF,
- "Limit on maximum size of an HTTP request line"),
-AP_INIT_TAKE1("LimitRequestFieldsize", set_limit_req_fieldsize, NULL,
- RSRC_CONF,
- "Limit on maximum size of an HTTP request header field"),
-AP_INIT_TAKE1("LimitRequestFields", set_limit_req_fields, NULL, RSRC_CONF,
- "Limit (0 = unlimited) on max number of header fields in a request message"),
-AP_INIT_TAKE1("LimitRequestBody", set_limit_req_body,
- (void*)APR_OFFSETOF(core_dir_config, limit_req_body), OR_ALL,
- "Limit (in bytes) on maximum size of request message body"),
-AP_INIT_TAKE1("LimitXMLRequestBody", set_limit_xml_req_body, NULL, OR_ALL,
- "Limit (in bytes) on maximum size of an XML-based request "
- "body"),
-
-/* System Resource Controls */
-#ifdef RLIMIT_CPU
-AP_INIT_TAKE12("RLimitCPU", set_limit_cpu,
- (void*)APR_OFFSETOF(core_dir_config, limit_cpu),
- OR_ALL, "Soft/hard limits for max CPU usage in seconds"),
-#else
-AP_INIT_TAKE12("RLimitCPU", no_set_limit, NULL,
- OR_ALL, "Soft/hard limits for max CPU usage in seconds"),
-#endif
-#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined (RLIMIT_AS)
-AP_INIT_TAKE12("RLimitMEM", set_limit_mem,
- (void*)APR_OFFSETOF(core_dir_config, limit_mem),
- OR_ALL, "Soft/hard limits for max memory usage per process"),
-#else
-AP_INIT_TAKE12("RLimitMEM", no_set_limit, NULL,
- OR_ALL, "Soft/hard limits for max memory usage per process"),
-#endif
-#ifdef RLIMIT_NPROC
-AP_INIT_TAKE12("RLimitNPROC", set_limit_nproc,
- (void*)APR_OFFSETOF(core_dir_config, limit_nproc),
- OR_ALL, "soft/hard limits for max number of processes per uid"),
-#else
-AP_INIT_TAKE12("RLimitNPROC", no_set_limit, NULL,
- OR_ALL, "soft/hard limits for max number of processes per uid"),
-#endif
-
-/* internal recursion stopper */
-AP_INIT_TAKE12("LimitInternalRecursion", set_recursion_limit, NULL, RSRC_CONF,
- "maximum recursion depth of internal redirects and subrequests"),
-
-AP_INIT_TAKE1("ForceType", ap_set_string_slot_lower,
- (void *)APR_OFFSETOF(core_dir_config, mime_type), OR_FILEINFO,
- "a mime type that overrides other configured type"),
-AP_INIT_TAKE1("SetHandler", ap_set_string_slot_lower,
- (void *)APR_OFFSETOF(core_dir_config, handler), OR_FILEINFO,
- "a handler name that overrides any other configured handler"),
-AP_INIT_TAKE1("SetOutputFilter", ap_set_string_slot,
- (void *)APR_OFFSETOF(core_dir_config, output_filters), OR_FILEINFO,
- "filter (or ; delimited list of filters) to be run on the request content"),
-AP_INIT_TAKE1("SetInputFilter", ap_set_string_slot,
- (void *)APR_OFFSETOF(core_dir_config, input_filters), OR_FILEINFO,
- "filter (or ; delimited list of filters) to be run on the request body"),
-AP_INIT_ITERATE2("AddOutputFilterByType", add_ct_output_filters,
- (void *)APR_OFFSETOF(core_dir_config, ct_output_filters), OR_FILEINFO,
- "output filter name followed by one or more content-types"),
-AP_INIT_FLAG("AllowEncodedSlashes", set_allow2f, NULL, RSRC_CONF,
- "Allow URLs containing '/' encoded as '%2F'"),
-
-/*
- * These are default configuration directives that mpms can/should
- * pay attention to. If an mpm wishes to use these, they should
- * #defined them in mpm.h.
- */
-#ifdef AP_MPM_WANT_SET_PIDFILE
-AP_INIT_TAKE1("PidFile", ap_mpm_set_pidfile, NULL, RSRC_CONF,
- "A file for logging the server process ID"),
-#endif
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-AP_INIT_TAKE1("ScoreBoardFile", ap_mpm_set_scoreboard, NULL, RSRC_CONF,
- "A file for Apache to maintain runtime process management information"),
-#endif
-#ifdef AP_MPM_WANT_SET_LOCKFILE
-AP_INIT_TAKE1("LockFile", ap_mpm_set_lockfile, NULL, RSRC_CONF,
- "The lockfile used when Apache needs to lock the accept() call"),
-#endif
-#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
-AP_INIT_TAKE1("MaxRequestsPerChild", ap_mpm_set_max_requests, NULL, RSRC_CONF,
- "Maximum number of requests a particular child serves before dying."),
-#endif
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
-AP_INIT_TAKE1("CoreDumpDirectory", ap_mpm_set_coredumpdir, NULL, RSRC_CONF,
- "The location of the directory Apache changes to before dumping core"),
-#endif
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-AP_INIT_TAKE1("AcceptMutex", ap_mpm_set_accept_lock_mech, NULL, RSRC_CONF,
- ap_valid_accept_mutex_string),
-#endif
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
-AP_INIT_TAKE1("MaxMemFree", ap_mpm_set_max_mem_free, NULL, RSRC_CONF,
- "Maximum number of 1k blocks a particular childs allocator may hold."),
-#endif
-#ifdef AP_MPM_WANT_SET_STACKSIZE
-AP_INIT_TAKE1("ThreadStackSize", ap_mpm_set_thread_stacksize, NULL, RSRC_CONF,
- "Size in bytes of stack used by threads handling client connections"),
-#endif
-#if AP_ENABLE_EXCEPTION_HOOK
-AP_INIT_TAKE1("EnableExceptionHook", ap_mpm_set_exception_hook, NULL, RSRC_CONF,
- "Controls whether exception hook may be called after a crash"),
-#endif
-{ NULL }
-};
-
-/*****************************************************************
- *
- * Core handlers for various phases of server operation...
- */
-
-AP_DECLARE_NONSTD(int) ap_core_translate(request_rec *r)
-{
- void *sconf = r->server->module_config;
- core_server_config *conf = ap_get_module_config(sconf, &core_module);
- apr_status_t rv;
-
- /* XXX this seems too specific, this should probably become
- * some general-case test
- */
- if (r->proxyreq) {
- return HTTP_FORBIDDEN;
- }
- if (!r->uri || ((r->uri[0] != '/') && strcmp(r->uri, "*"))) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid URI in request %s", r->the_request);
- return HTTP_BAD_REQUEST;
- }
-
- if (r->server->path
- && !strncmp(r->uri, r->server->path, r->server->pathlen)
- && (r->server->path[r->server->pathlen - 1] == '/'
- || r->uri[r->server->pathlen] == '/'
- || r->uri[r->server->pathlen] == '\0'))
- {
- /* skip all leading /'s (e.g. http://localhost///foo)
- * so we are looking at only the relative path.
- */
- char *path = r->uri + r->server->pathlen;
- while (*path == '/') {
- ++path;
- }
- if ((rv = apr_filepath_merge(&r->filename, conf->ap_document_root, path,
- APR_FILEPATH_TRUENAME
- | APR_FILEPATH_SECUREROOT, r->pool))
- != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "Cannot map %s to file", r->the_request);
- return HTTP_FORBIDDEN;
- }
- r->canonical_filename = r->filename;
- }
- else {
- /*
- * Make sure that we do not mess up the translation by adding two
- * /'s in a row. This happens under windows when the document
- * root ends with a /
- */
- /* skip all leading /'s (e.g. http://localhost///foo)
- * so we are looking at only the relative path.
- */
- char *path = r->uri;
- while (*path == '/') {
- ++path;
- }
- if ((rv = apr_filepath_merge(&r->filename, conf->ap_document_root, path,
- APR_FILEPATH_TRUENAME
- | APR_FILEPATH_SECUREROOT, r->pool))
- != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "Cannot map %s to file", r->the_request);
- return HTTP_FORBIDDEN;
- }
- r->canonical_filename = r->filename;
- }
-
- return OK;
-}
-
-/*****************************************************************
- *
- * Test the filesystem name through directory_walk and file_walk
- */
-static int core_map_to_storage(request_rec *r)
-{
- int access_status;
-
- if ((access_status = ap_directory_walk(r))) {
- return access_status;
- }
-
- if ((access_status = ap_file_walk(r))) {
- return access_status;
- }
-
- return OK;
-}
-
-
-static int do_nothing(request_rec *r) { return OK; }
-
-
-static int core_override_type(request_rec *r)
-{
- core_dir_config *conf =
- (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
-
- /* Check for overrides with ForceType / SetHandler
- */
- if (conf->mime_type && strcmp(conf->mime_type, "none"))
- ap_set_content_type(r, (char*) conf->mime_type);
-
- if (conf->handler && strcmp(conf->handler, "none"))
- r->handler = conf->handler;
-
- /* Deal with the poor soul who is trying to force path_info to be
- * accepted within the core_handler, where they will let the subreq
- * address its contents. This is toggled by the user in the very
- * beginning of the fixup phase, so modules should override the user's
- * discretion in their own module fixup phase. It is tristate, if
- * the user doesn't specify, the result is 2 (which the module may
- * interpret to its own customary behavior.) It won't be touched
- * if the value is no longer undefined (2), so any module changing
- * the value prior to the fixup phase OVERRIDES the user's choice.
- */
- if ((r->used_path_info == AP_REQ_DEFAULT_PATH_INFO)
- && (conf->accept_path_info != 3)) {
- r->used_path_info = conf->accept_path_info;
- }
-
- return OK;
-}
-
-
-
-static int default_handler(request_rec *r)
-{
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *e;
- core_dir_config *d;
- int errstatus;
- apr_file_t *fd = NULL;
- apr_status_t status;
- /* XXX if/when somebody writes a content-md5 filter we either need to
- * remove this support or coordinate when to use the filter vs.
- * when to use this code
- * The current choice of when to compute the md5 here matches the 1.3
- * support fairly closely (unlike 1.3, we don't handle computing md5
- * when the charset is translated).
- */
- int bld_content_md5;
-
- d = (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
- bld_content_md5 = (d->content_md5 & 1)
- && r->output_filters->frec->ftype != AP_FTYPE_RESOURCE;
-
- ap_allow_standard_methods(r, MERGE_ALLOW, M_GET, M_OPTIONS, M_POST, -1);
-
- /* If filters intend to consume the request body, they must
- * register an InputFilter to slurp the contents of the POST
- * data from the POST input stream. It no longer exists when
- * the output filters are invoked by the default handler.
- */
- if ((errstatus = ap_discard_request_body(r)) != OK) {
- return errstatus;
- }
-
- if (r->method_number == M_GET || r->method_number == M_POST) {
- if (r->finfo.filetype == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "File does not exist: %s", r->filename);
- return HTTP_NOT_FOUND;
- }
-
- /* Don't try to serve a dir. Some OSs do weird things with
- * raw I/O on a dir.
- */
- if (r->finfo.filetype == APR_DIR) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Attempt to serve directory: %s", r->filename);
- return HTTP_NOT_FOUND;
- }
-
- if ((r->used_path_info != AP_REQ_ACCEPT_PATH_INFO) &&
- r->path_info && *r->path_info)
- {
- /* default to reject */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "File does not exist: %s",
- apr_pstrcat(r->pool, r->filename, r->path_info, NULL));
- return HTTP_NOT_FOUND;
- }
-
- /* We understood the (non-GET) method, but it might not be legal for
- this particular resource. Check to see if the 'deliver_script'
- flag is set. If so, then we go ahead and deliver the file since
- it isn't really content (only GET normally returns content).
-
- Note: based on logic further above, the only possible non-GET
- method at this point is POST. In the future, we should enable
- script delivery for all methods. */
- if (r->method_number != M_GET) {
- core_request_config *req_cfg;
-
- req_cfg = ap_get_module_config(r->request_config, &core_module);
- if (!req_cfg->deliver_script) {
- /* The flag hasn't been set for this request. Punt. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "This resource does not accept the %s method.",
- r->method);
- return HTTP_METHOD_NOT_ALLOWED;
- }
- }
-
-
- if ((status = apr_file_open(&fd, r->filename, APR_READ | APR_BINARY
-#if APR_HAS_SENDFILE
- | ((d->enable_sendfile == ENABLE_SENDFILE_OFF)
- ? 0 : APR_SENDFILE_ENABLED)
-#endif
- , 0, r->pool)) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
- "file permissions deny server access: %s", r->filename);
- return HTTP_FORBIDDEN;
- }
-
- ap_update_mtime(r, r->finfo.mtime);
- ap_set_last_modified(r);
- ap_set_etag(r);
- apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
- ap_set_content_length(r, r->finfo.size);
- if ((errstatus = ap_meets_conditions(r)) != OK) {
- apr_file_close(fd);
- return errstatus;
- }
-
- if (bld_content_md5) {
- apr_table_setn(r->headers_out, "Content-MD5",
- ap_md5digest(r->pool, fd));
- }
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
-#if APR_HAS_LARGE_FILES
-#if APR_HAS_SENDFILE
- if ((d->enable_sendfile != ENABLE_SENDFILE_OFF) &&
-#else
- if (
-#endif
- (r->finfo.size > AP_MAX_SENDFILE)) {
- /* APR_HAS_LARGE_FILES issue; must split into mutiple buckets,
- * no greater than MAX(apr_size_t), and more granular than that
- * in case the brigade code/filters attempt to read it directly.
- */
- apr_off_t fsize = r->finfo.size;
- e = apr_bucket_file_create(fd, 0, AP_MAX_SENDFILE, r->pool,
- c->bucket_alloc);
- while (fsize > AP_MAX_SENDFILE) {
- apr_bucket *ce;
- apr_bucket_copy(e, &ce);
- APR_BRIGADE_INSERT_TAIL(bb, ce);
- e->start += AP_MAX_SENDFILE;
- fsize -= AP_MAX_SENDFILE;
- }
- e->length = (apr_size_t)fsize; /* Resize just the last bucket */
- }
- else
-#endif
- e = apr_bucket_file_create(fd, 0, (apr_size_t)r->finfo.size,
- r->pool, c->bucket_alloc);
-
-#if APR_HAS_MMAP
- if (d->enable_mmap == ENABLE_MMAP_OFF) {
- (void)apr_bucket_file_enable_mmap(e, 0);
- }
-#endif
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
-
- return ap_pass_brigade(r->output_filters, bb);
- }
- else { /* unusual method (not GET or POST) */
- if (r->method_number == M_INVALID) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Invalid method in request %s", r->the_request);
- return HTTP_NOT_IMPLEMENTED;
- }
-
- if (r->method_number == M_OPTIONS) {
- return ap_send_http_options(r);
- }
- return HTTP_METHOD_NOT_ALLOWED;
- }
-}
-
-typedef struct net_time_filter_ctx {
- apr_socket_t *csd;
- int first_line;
-} net_time_filter_ctx_t;
-static int net_time_filter(ap_filter_t *f, apr_bucket_brigade *b,
- ap_input_mode_t mode, apr_read_type_e block,
- apr_off_t readbytes)
-{
- net_time_filter_ctx_t *ctx = f->ctx;
- int keptalive = f->c->keepalive == AP_CONN_KEEPALIVE;
-
- if (!ctx) {
- f->ctx = ctx = apr_palloc(f->r->pool, sizeof(*ctx));
- ctx->first_line = 1;
- ctx->csd = ap_get_module_config(f->c->conn_config, &core_module);
- }
-
- if (mode != AP_MODE_INIT && mode != AP_MODE_EATCRLF) {
- if (ctx->first_line) {
- apr_socket_timeout_set(ctx->csd,
- keptalive
- ? f->c->base_server->keep_alive_timeout
- : f->c->base_server->timeout);
- ctx->first_line = 0;
- }
- else {
- if (keptalive) {
- apr_socket_timeout_set(ctx->csd, f->c->base_server->timeout);
- }
- }
- }
- return ap_get_brigade(f->next, b, mode, block, readbytes);
-}
-
-/**
- * Remove all zero length buckets from the brigade.
- */
-#define BRIGADE_NORMALIZE(b) \
-do { \
- apr_bucket *e = APR_BRIGADE_FIRST(b); \
- do { \
- if (e->length == 0 && !APR_BUCKET_IS_METADATA(e)) { \
- apr_bucket *d; \
- d = APR_BUCKET_NEXT(e); \
- apr_bucket_delete(e); \
- e = d; \
- } \
- e = APR_BUCKET_NEXT(e); \
- } while (!APR_BRIGADE_EMPTY(b) && (e != APR_BRIGADE_SENTINEL(b))); \
-} while (0)
-
-static int core_input_filter(ap_filter_t *f, apr_bucket_brigade *b,
- ap_input_mode_t mode, apr_read_type_e block,
- apr_off_t readbytes)
-{
- apr_bucket *e;
- apr_status_t rv;
- core_net_rec *net = f->ctx;
- core_ctx_t *ctx = net->in_ctx;
- const char *str;
- apr_size_t len;
-
- if (mode == AP_MODE_INIT) {
- /*
- * this mode is for filters that might need to 'initialize'
- * a connection before reading request data from a client.
- * NNTP over SSL for example needs to handshake before the
- * server sends the welcome message.
- * such filters would have changed the mode before this point
- * is reached. however, protocol modules such as NNTP should
- * not need to know anything about SSL. given the example, if
- * SSL is not in the filter chain, AP_MODE_INIT is a noop.
- */
- return APR_SUCCESS;
- }
-
- if (!ctx)
- {
- ctx = apr_pcalloc(f->c->pool, sizeof(*ctx));
- ctx->b = apr_brigade_create(f->c->pool, f->c->bucket_alloc);
-
- /* seed the brigade with the client socket. */
- e = apr_bucket_socket_create(net->client_socket, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(ctx->b, e);
- net->in_ctx = ctx;
- }
- else if (APR_BRIGADE_EMPTY(ctx->b)) {
- return APR_EOF;
- }
-
- /* ### This is bad. */
- BRIGADE_NORMALIZE(ctx->b);
-
- /* check for empty brigade again *AFTER* BRIGADE_NORMALIZE()
- * If we have lost our socket bucket (see above), we are EOF.
- *
- * Ideally, this should be returning SUCCESS with EOS bucket, but
- * some higher-up APIs (spec. read_request_line via ap_rgetline)
- * want an error code. */
- if (APR_BRIGADE_EMPTY(ctx->b)) {
- return APR_EOF;
- }
-
- if (mode == AP_MODE_GETLINE) {
- /* we are reading a single LF line, e.g. the HTTP headers */
- rv = apr_brigade_split_line(b, ctx->b, block, HUGE_STRING_LEN);
- /* We should treat EAGAIN here the same as we do for EOF (brigade is
- * empty). We do this by returning whatever we have read. This may
- * or may not be bogus, but is consistent (for now) with EOF logic.
- */
- if (APR_STATUS_IS_EAGAIN(rv)) {
- rv = APR_SUCCESS;
- }
- return rv;
- }
-
- /* ### AP_MODE_PEEK is a horrific name for this mode because we also
- * eat any CRLFs that we see. That's not the obvious intention of
- * this mode. Determine whether anyone actually uses this or not. */
- if (mode == AP_MODE_EATCRLF) {
- apr_bucket *e;
- const char *c;
-
- /* The purpose of this loop is to ignore any CRLF (or LF) at the end
- * of a request. Many browsers send extra lines at the end of POST
- * requests. We use the PEEK method to determine if there is more
- * data on the socket, so that we know if we should delay sending the
- * end of one request until we have served the second request in a
- * pipelined situation. We don't want to actually delay sending a
- * response if the server finds a CRLF (or LF), becuause that doesn't
- * mean that there is another request, just a blank line.
- */
- while (1) {
- if (APR_BRIGADE_EMPTY(ctx->b))
- return APR_EOF;
-
- e = APR_BRIGADE_FIRST(ctx->b);
-
- rv = apr_bucket_read(e, &str, &len, APR_NONBLOCK_READ);
-
- if (rv != APR_SUCCESS)
- return rv;
-
- c = str;
- while (c < str + len) {
- if (*c == APR_ASCII_LF)
- c++;
- else if (*c == APR_ASCII_CR && *(c + 1) == APR_ASCII_LF)
- c += 2;
- else
- return APR_SUCCESS;
- }
-
- /* If we reach here, we were a bucket just full of CRLFs, so
- * just toss the bucket. */
- /* FIXME: Is this the right thing to do in the core? */
- apr_bucket_delete(e);
- }
- return APR_SUCCESS;
- }
-
- /* If mode is EXHAUSTIVE, we want to just read everything until the end
- * of the brigade, which in this case means the end of the socket.
- * To do this, we attach the brigade that has currently been setaside to
- * the brigade that was passed down, and send that brigade back.
- *
- * NOTE: This is VERY dangerous to use, and should only be done with
- * extreme caution. However, the Perchild MPM needs this feature
- * if it is ever going to work correctly again. With this, the Perchild
- * MPM can easily request the socket and all data that has been read,
- * which means that it can pass it to the correct child process.
- */
- if (mode == AP_MODE_EXHAUSTIVE) {
- apr_bucket *e;
-
- /* Tack on any buckets that were set aside. */
- APR_BRIGADE_CONCAT(b, ctx->b);
-
- /* Since we've just added all potential buckets (which will most
- * likely simply be the socket bucket) we know this is the end,
- * so tack on an EOS too. */
- /* We have read until the brigade was empty, so we know that we
- * must be EOS. */
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- return APR_SUCCESS;
- }
-
- /* read up to the amount they specified. */
- if (mode == AP_MODE_READBYTES || mode == AP_MODE_SPECULATIVE) {
- apr_bucket *e;
- apr_bucket_brigade *newbb;
-
- AP_DEBUG_ASSERT(readbytes > 0);
-
- e = APR_BRIGADE_FIRST(ctx->b);
- rv = apr_bucket_read(e, &str, &len, block);
-
- if (APR_STATUS_IS_EAGAIN(rv)) {
- return APR_SUCCESS;
- }
- else if (rv != APR_SUCCESS) {
- return rv;
- }
- else if (block == APR_BLOCK_READ && len == 0) {
- /* We wanted to read some bytes in blocking mode. We read
- * 0 bytes. Hence, we now assume we are EOS.
- *
- * When we are in normal mode, return an EOS bucket to the
- * caller.
- * When we are in speculative mode, leave ctx->b empty, so
- * that the next call returns an EOS bucket.
- */
- apr_bucket_delete(e);
-
- if (mode == AP_MODE_READBYTES) {
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(b, e);
- }
- return APR_SUCCESS;
- }
-
- /* We can only return at most what we read. */
- if (len < readbytes) {
- readbytes = len;
- }
-
- rv = apr_brigade_partition(ctx->b, readbytes, &e);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- /* Must do split before CONCAT */
- newbb = apr_brigade_split(ctx->b, e);
-
- if (mode == AP_MODE_READBYTES) {
- APR_BRIGADE_CONCAT(b, ctx->b);
- }
- else if (mode == AP_MODE_SPECULATIVE) {
- apr_bucket *copy_bucket;
-
- for (e = APR_BRIGADE_FIRST(ctx->b);
- e != APR_BRIGADE_SENTINEL(ctx->b);
- e = APR_BUCKET_NEXT(e))
- {
- rv = apr_bucket_copy(e, &copy_bucket);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- APR_BRIGADE_INSERT_TAIL(b, copy_bucket);
- }
- }
-
- /* Take what was originally there and place it back on ctx->b */
- APR_BRIGADE_CONCAT(ctx->b, newbb);
- }
- return APR_SUCCESS;
-}
-
-#define MAX_IOVEC_TO_WRITE 16
-
-/* Optional function coming from mod_logio, used for logging of output
- * traffic
- */
-static APR_OPTIONAL_FN_TYPE(ap_logio_add_bytes_out) *logio_add_bytes_out;
-
-static apr_status_t core_output_filter(ap_filter_t *f, apr_bucket_brigade *b)
-{
- apr_status_t rv;
- apr_bucket_brigade *more;
- conn_rec *c = f->c;
- core_net_rec *net = f->ctx;
- core_output_filter_ctx_t *ctx = net->out_ctx;
- apr_read_type_e eblock = APR_NONBLOCK_READ;
- apr_pool_t *input_pool = b->p;
-
- if (ctx == NULL) {
- ctx = apr_pcalloc(c->pool, sizeof(*ctx));
- net->out_ctx = ctx;
- }
-
- /* If we have a saved brigade, concatenate the new brigade to it */
- if (ctx->b) {
- APR_BRIGADE_CONCAT(ctx->b, b);
- b = ctx->b;
- ctx->b = NULL;
- }
-
- /* Perform multiple passes over the brigade, sending batches of output
- to the connection. */
- while (b && !APR_BRIGADE_EMPTY(b)) {
- apr_size_t nbytes = 0;
- apr_bucket *last_e = NULL; /* initialized for debugging */
- apr_bucket *e;
-
- /* one group of iovecs per pass over the brigade */
- apr_size_t nvec = 0;
- apr_size_t nvec_trailers = 0;
- struct iovec vec[MAX_IOVEC_TO_WRITE];
- struct iovec vec_trailers[MAX_IOVEC_TO_WRITE];
-
- /* one file per pass over the brigade */
- apr_file_t *fd = NULL;
- apr_size_t flen = 0;
- apr_off_t foffset = 0;
-
- /* keep track of buckets that we've concatenated
- * to avoid small writes
- */
- apr_bucket *last_merged_bucket = NULL;
-
- /* tail of brigade if we need another pass */
- more = NULL;
-
- /* Iterate over the brigade: collect iovecs and/or a file */
- for (e = APR_BRIGADE_FIRST(b);
- e != APR_BRIGADE_SENTINEL(b);
- e = APR_BUCKET_NEXT(e))
- {
- /* keep track of the last bucket processed */
- last_e = e;
- if (APR_BUCKET_IS_EOS(e) || AP_BUCKET_IS_EOC(e)) {
- break;
- }
- else if (APR_BUCKET_IS_FLUSH(e)) {
- if (e != APR_BRIGADE_LAST(b)) {
- more = apr_brigade_split(b, APR_BUCKET_NEXT(e));
- }
- break;
- }
-
- /* It doesn't make any sense to use sendfile for a file bucket
- * that represents 10 bytes.
- */
- else if (APR_BUCKET_IS_FILE(e)
- && (e->length >= AP_MIN_SENDFILE_BYTES)) {
- apr_bucket_file *a = e->data;
-
- /* We can't handle more than one file bucket at a time
- * so we split here and send the file we have already
- * found.
- */
- if (fd) {
- more = apr_brigade_split(b, e);
- break;
- }
-
- fd = a->fd;
- flen = e->length;
- foffset = e->start;
- }
- else {
- const char *str;
- apr_size_t n;
-
- rv = apr_bucket_read(e, &str, &n, eblock);
- if (APR_STATUS_IS_EAGAIN(rv)) {
- /* send what we have so far since we shouldn't expect more
- * output for a while... next time we read, block
- */
- more = apr_brigade_split(b, e);
- eblock = APR_BLOCK_READ;
- break;
- }
- eblock = APR_NONBLOCK_READ;
- if (n) {
- if (!fd) {
- if (nvec == MAX_IOVEC_TO_WRITE) {
- /* woah! too many. buffer them up, for use later. */
- apr_bucket *temp, *next;
- apr_bucket_brigade *temp_brig;
-
- if (nbytes >= AP_MIN_BYTES_TO_WRITE) {
- /* We have enough data in the iovec
- * to justify doing a writev
- */
- more = apr_brigade_split(b, e);
- break;
- }
-
- /* Create a temporary brigade as a means
- * of concatenating a bunch of buckets together
- */
- if (last_merged_bucket) {
- /* If we've concatenated together small
- * buckets already in a previous pass,
- * the initial buckets in this brigade
- * are heap buckets that may have extra
- * space left in them (because they
- * were created by apr_brigade_write()).
- * We can take advantage of this by
- * building the new temp brigade out of
- * these buckets, so that the content
- * in them doesn't have to be copied again.
- */
- apr_bucket_brigade *bb;
- bb = apr_brigade_split(b,
- APR_BUCKET_NEXT(last_merged_bucket));
- temp_brig = b;
- b = bb;
- }
- else {
- temp_brig = apr_brigade_create(f->c->pool,
- f->c->bucket_alloc);
- }
-
- temp = APR_BRIGADE_FIRST(b);
- while (temp != e) {
- apr_bucket *d;
- rv = apr_bucket_read(temp, &str, &n, APR_BLOCK_READ);
- apr_brigade_write(temp_brig, NULL, NULL, str, n);
- d = temp;
- temp = APR_BUCKET_NEXT(temp);
- apr_bucket_delete(d);
- }
-
- nvec = 0;
- nbytes = 0;
- temp = APR_BRIGADE_FIRST(temp_brig);
- APR_BUCKET_REMOVE(temp);
- APR_BRIGADE_INSERT_HEAD(b, temp);
- apr_bucket_read(temp, &str, &n, APR_BLOCK_READ);
- vec[nvec].iov_base = (char*) str;
- vec[nvec].iov_len = n;
- nvec++;
-
- /* Just in case the temporary brigade has
- * multiple buckets, recover the rest of
- * them and put them in the brigade that
- * we're sending.
- */
- for (next = APR_BRIGADE_FIRST(temp_brig);
- next != APR_BRIGADE_SENTINEL(temp_brig);
- next = APR_BRIGADE_FIRST(temp_brig)) {
- APR_BUCKET_REMOVE(next);
- APR_BUCKET_INSERT_AFTER(temp, next);
- temp = next;
- apr_bucket_read(next, &str, &n,
- APR_BLOCK_READ);
- vec[nvec].iov_base = (char*) str;
- vec[nvec].iov_len = n;
- nvec++;
- }
-
- apr_brigade_destroy(temp_brig);
-
- last_merged_bucket = temp;
- e = temp;
- last_e = e;
- }
- else {
- vec[nvec].iov_base = (char*) str;
- vec[nvec].iov_len = n;
- nvec++;
- }
- }
- else {
- /* The bucket is a trailer to a file bucket */
-
- if (nvec_trailers == MAX_IOVEC_TO_WRITE) {
- /* woah! too many. stop now. */
- more = apr_brigade_split(b, e);
- break;
- }
-
- vec_trailers[nvec_trailers].iov_base = (char*) str;
- vec_trailers[nvec_trailers].iov_len = n;
- nvec_trailers++;
- }
-
- nbytes += n;
- }
- }
- }
-
-
- /* Completed iterating over the brigade, now determine if we want
- * to buffer the brigade or send the brigade out on the network.
- *
- * Save if we haven't accumulated enough bytes to send, the connection
- * is not about to be closed, and:
- *
- * 1) we didn't see a file, we don't have more passes over the
- * brigade to perform, AND we didn't stop at a FLUSH bucket.
- * (IOW, we will save plain old bytes such as HTTP headers)
- * or
- * 2) we hit the EOS and have a keep-alive connection
- * (IOW, this response is a bit more complex, but we save it
- * with the hope of concatenating with another response)
- */
- if (nbytes + flen < AP_MIN_BYTES_TO_WRITE
- && !AP_BUCKET_IS_EOC(last_e)
- && ((!fd && !more && !APR_BUCKET_IS_FLUSH(last_e))
- || (APR_BUCKET_IS_EOS(last_e)
- && c->keepalive == AP_CONN_KEEPALIVE))) {
-
- /* NEVER save an EOS in here. If we are saving a brigade with
- * an EOS bucket, then we are doing keepalive connections, and
- * we want to process to second request fully.
- */
- if (APR_BUCKET_IS_EOS(last_e)) {
- apr_bucket *bucket;
- int file_bucket_saved = 0;
- apr_bucket_delete(last_e);
- for (bucket = APR_BRIGADE_FIRST(b);
- bucket != APR_BRIGADE_SENTINEL(b);
- bucket = APR_BUCKET_NEXT(bucket)) {
-
- /* Do a read on each bucket to pull in the
- * data from pipe and socket buckets, so
- * that we don't leave their file descriptors
- * open indefinitely. Do the same for file
- * buckets, with one exception: allow the
- * first file bucket in the brigade to remain
- * a file bucket, so that we don't end up
- * doing an mmap+memcpy every time a client
- * requests a <8KB file over a keepalive
- * connection.
- */
- if (APR_BUCKET_IS_FILE(bucket) && !file_bucket_saved) {
- file_bucket_saved = 1;
- }
- else {
- const char *buf;
- apr_size_t len = 0;
- rv = apr_bucket_read(bucket, &buf, &len,
- APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv,
- c->base_server, "core_output_filter:"
- " Error reading from bucket.");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- }
- }
- if (!ctx->deferred_write_pool) {
- apr_pool_create(&ctx->deferred_write_pool, c->pool);
- apr_pool_tag(ctx->deferred_write_pool, "deferred_write");
- }
- ap_save_brigade(f, &ctx->b, &b, ctx->deferred_write_pool);
-
- return APR_SUCCESS;
- }
-
- if (fd) {
- apr_hdtr_t hdtr;
- apr_size_t bytes_sent;
-
-#if APR_HAS_SENDFILE
- apr_int32_t flags = 0;
-#endif
-
- memset(&hdtr, '\0', sizeof(hdtr));
- if (nvec) {
- hdtr.numheaders = nvec;
- hdtr.headers = vec;
- }
-
- if (nvec_trailers) {
- hdtr.numtrailers = nvec_trailers;
- hdtr.trailers = vec_trailers;
- }
-
-#if APR_HAS_SENDFILE
- if (apr_file_flags_get(fd) & APR_SENDFILE_ENABLED) {
-
- if (c->keepalive == AP_CONN_CLOSE && APR_BUCKET_IS_EOS(last_e)) {
- /* Prepare the socket to be reused */
- flags |= APR_SENDFILE_DISCONNECT_SOCKET;
- }
-
- rv = sendfile_it_all(net, /* the network information */
- fd, /* the file to send */
- &hdtr, /* header and trailer iovecs */
- foffset, /* offset in the file to begin
- sending from */
- flen, /* length of file */
- nbytes + flen, /* total length including
- headers */
- &bytes_sent, /* how many bytes were
- sent */
- flags); /* apr_sendfile flags */
- }
- else
-#endif
- {
- rv = emulate_sendfile(net, fd, &hdtr, foffset, flen,
- &bytes_sent);
- }
-
- if (logio_add_bytes_out && bytes_sent > 0)
- logio_add_bytes_out(c, bytes_sent);
-
- fd = NULL;
- }
- else {
- apr_size_t bytes_sent;
-
- rv = writev_it_all(net->client_socket,
- vec, nvec,
- nbytes, &bytes_sent);
-
- if (logio_add_bytes_out && bytes_sent > 0)
- logio_add_bytes_out(c, bytes_sent);
- }
-
- apr_brigade_destroy(b);
-
- /* drive cleanups for resources which were set aside
- * this may occur before or after termination of the request which
- * created the resource
- */
- if (ctx->deferred_write_pool) {
- if (more && more->p == ctx->deferred_write_pool) {
- /* "more" belongs to the deferred_write_pool,
- * which is about to be cleared.
- */
- if (APR_BRIGADE_EMPTY(more)) {
- more = NULL;
- }
- else {
- /* uh oh... change more's lifetime
- * to the input brigade's lifetime
- */
- apr_bucket_brigade *tmp_more = more;
- more = NULL;
- ap_save_brigade(f, &more, &tmp_more, input_pool);
- }
- }
- apr_pool_clear(ctx->deferred_write_pool);
- }
-
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_INFO, rv, c->base_server,
- "core_output_filter: writing data to the network");
-
- if (more)
- apr_brigade_destroy(more);
-
- /* No need to check for SUCCESS, we did that above. */
- if (!APR_STATUS_IS_EAGAIN(rv)) {
- c->aborted = 1;
- }
-
- /* The client has aborted, but the request was successful. We
- * will report success, and leave it to the access and error
- * logs to note that the connection was aborted.
- */
- return APR_SUCCESS;
- }
-
- b = more;
- more = NULL;
- } /* end while () */
-
- return APR_SUCCESS;
-}
-
-static int core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- logio_add_bytes_out = APR_RETRIEVE_OPTIONAL_FN(ap_logio_add_bytes_out);
- ident_lookup = APR_RETRIEVE_OPTIONAL_FN(ap_ident_lookup);
-
- ap_set_version(pconf);
- ap_setup_make_content_type(pconf);
- return OK;
-}
-
-static void core_insert_filter(request_rec *r)
-{
- core_dir_config *conf = (core_dir_config *)
- ap_get_module_config(r->per_dir_config,
- &core_module);
- const char *filter, *filters = conf->output_filters;
-
- if (filters) {
- while (*filters && (filter = ap_getword(r->pool, &filters, ';'))) {
- ap_add_output_filter(filter, NULL, r, r->connection);
- }
- }
-
- filters = conf->input_filters;
- if (filters) {
- while (*filters && (filter = ap_getword(r->pool, &filters, ';'))) {
- ap_add_input_filter(filter, NULL, r, r->connection);
- }
- }
-}
-
-static apr_size_t num_request_notes = AP_NUM_STD_NOTES;
-
-static apr_status_t reset_request_notes(void *dummy)
-{
- num_request_notes = AP_NUM_STD_NOTES;
- return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_size_t) ap_register_request_note(void)
-{
- apr_pool_cleanup_register(apr_hook_global_pool, NULL, reset_request_notes,
- apr_pool_cleanup_null);
- return num_request_notes++;
-}
-
-AP_DECLARE(void **) ap_get_request_note(request_rec *r, apr_size_t note_num)
-{
- core_request_config *req_cfg;
-
- if (note_num >= num_request_notes) {
- return NULL;
- }
-
- req_cfg = (core_request_config *)
- ap_get_module_config(r->request_config, &core_module);
-
- if (!req_cfg) {
- return NULL;
- }
-
- return &(req_cfg->notes[note_num]);
-}
-
-static int core_create_req(request_rec *r)
-{
- /* Alloc the config struct and the array of request notes in
- * a single block for efficiency
- */
- core_request_config *req_cfg;
-
- req_cfg = apr_pcalloc(r->pool, sizeof(core_request_config) +
- sizeof(void *) * num_request_notes);
- req_cfg->notes = (void **)((char *)req_cfg + sizeof(core_request_config));
-
- /* ### temporarily enable script delivery as the default */
- req_cfg->deliver_script = 1;
-
- if (r->main) {
- core_request_config *main_req_cfg = (core_request_config *)
- ap_get_module_config(r->main->request_config, &core_module);
- req_cfg->bb = main_req_cfg->bb;
- }
- else {
- req_cfg->bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- if (!r->prev) {
- ap_add_input_filter_handle(ap_net_time_filter_handle,
- NULL, r, r->connection);
- }
- }
-
- ap_set_module_config(r->request_config, &core_module, req_cfg);
-
- /* Begin by presuming any module can make its own path_info assumptions,
- * until some module interjects and changes the value.
- */
- r->used_path_info = AP_REQ_DEFAULT_PATH_INFO;
-
- return OK;
-}
-
-static int core_create_proxy_req(request_rec *r, request_rec *pr)
-{
- return core_create_req(pr);
-}
-
-static conn_rec *core_create_conn(apr_pool_t *ptrans, server_rec *server,
- apr_socket_t *csd, long id, void *sbh,
- apr_bucket_alloc_t *alloc)
-{
- apr_status_t rv;
- conn_rec *c = (conn_rec *) apr_pcalloc(ptrans, sizeof(conn_rec));
-
- c->sbh = sbh;
- (void)ap_update_child_status(c->sbh, SERVER_BUSY_READ, (request_rec *)NULL);
-
- /* Got a connection structure, so initialize what fields we can
- * (the rest are zeroed out by pcalloc).
- */
- c->conn_config = ap_create_conn_config(ptrans);
- c->notes = apr_table_make(ptrans, 5);
-
- c->pool = ptrans;
- if ((rv = apr_socket_addr_get(&c->local_addr, APR_LOCAL, csd))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_INFO, rv, server,
- "apr_socket_addr_get(APR_LOCAL)");
- apr_socket_close(csd);
- return NULL;
- }
-
- apr_sockaddr_ip_get(&c->local_ip, c->local_addr);
- if ((rv = apr_socket_addr_get(&c->remote_addr, APR_REMOTE, csd))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_INFO, rv, server,
- "apr_socket_addr_get(APR_REMOTE)");
- apr_socket_close(csd);
- return NULL;
- }
-
- apr_sockaddr_ip_get(&c->remote_ip, c->remote_addr);
- c->base_server = server;
-
- c->id = id;
- c->bucket_alloc = alloc;
-
- return c;
-}
-
-static int core_pre_connection(conn_rec *c, void *csd)
-{
- core_net_rec *net = apr_palloc(c->pool, sizeof(*net));
-
-#ifdef AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
- /* BillS says perhaps this should be moved to the MPMs. Some OSes
- * allow listening socket attributes to be inherited by the
- * accept sockets which means this call only needs to be made
- * once on the listener
- */
- ap_sock_disable_nagle(csd);
-#endif
- net->c = c;
- net->in_ctx = NULL;
- net->out_ctx = NULL;
- net->client_socket = csd;
-
- ap_set_module_config(net->c->conn_config, &core_module, csd);
- ap_add_input_filter_handle(ap_core_input_filter_handle, net, NULL, net->c);
- ap_add_output_filter_handle(ap_core_output_filter_handle, net, NULL, net->c);
- return DONE;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- /* create_connection and install_transport_filters are
- * hooks that should always be APR_HOOK_REALLY_LAST to give other
- * modules the opportunity to install alternate network transports
- * and stop other functions from being run.
- */
- ap_hook_create_connection(core_create_conn, NULL, NULL,
- APR_HOOK_REALLY_LAST);
- ap_hook_pre_connection(core_pre_connection, NULL, NULL,
- APR_HOOK_REALLY_LAST);
-
- ap_hook_post_config(core_post_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
- ap_hook_translate_name(ap_core_translate,NULL,NULL,APR_HOOK_REALLY_LAST);
- ap_hook_map_to_storage(core_map_to_storage,NULL,NULL,APR_HOOK_REALLY_LAST);
- ap_hook_open_logs(ap_open_logs,NULL,NULL,APR_HOOK_REALLY_FIRST);
- ap_hook_handler(default_handler,NULL,NULL,APR_HOOK_REALLY_LAST);
- /* FIXME: I suspect we can eliminate the need for these do_nothings - Ben */
- ap_hook_type_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
- ap_hook_fixups(core_override_type,NULL,NULL,APR_HOOK_REALLY_FIRST);
- ap_hook_access_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
- ap_hook_create_request(core_create_req, NULL, NULL, APR_HOOK_MIDDLE);
- APR_OPTIONAL_HOOK(proxy, create_req, core_create_proxy_req, NULL, NULL,
- APR_HOOK_MIDDLE);
- ap_hook_pre_mpm(ap_create_scoreboard, NULL, NULL, APR_HOOK_MIDDLE);
-
- /* register the core's insert_filter hook and register core-provided
- * filters
- */
- ap_hook_insert_filter(core_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
-
- ap_core_input_filter_handle =
- ap_register_input_filter("CORE_IN", core_input_filter,
- NULL, AP_FTYPE_NETWORK);
- ap_net_time_filter_handle =
- ap_register_input_filter("NET_TIME", net_time_filter,
- NULL, AP_FTYPE_PROTOCOL);
- ap_content_length_filter_handle =
- ap_register_output_filter("CONTENT_LENGTH", ap_content_length_filter,
- NULL, AP_FTYPE_PROTOCOL);
- ap_core_output_filter_handle =
- ap_register_output_filter("CORE", core_output_filter,
- NULL, AP_FTYPE_NETWORK);
- ap_subreq_core_filter_handle =
- ap_register_output_filter("SUBREQ_CORE", ap_sub_req_output_filter,
- NULL, AP_FTYPE_CONTENT_SET);
- ap_old_write_func =
- ap_register_output_filter("OLD_WRITE", ap_old_write_filter,
- NULL, AP_FTYPE_RESOURCE - 10);
-}
-
-AP_DECLARE_DATA module core_module = {
- STANDARD20_MODULE_STUFF,
- create_core_dir_config, /* create per-directory config structure */
- merge_core_dir_configs, /* merge per-directory config structures */
- create_core_server_config, /* create per-server config structure */
- merge_core_server_configs, /* merge per-server config structures */
- core_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};
-
diff --git a/server/eoc_bucket.c b/server/eoc_bucket.c
deleted file mode 100644
index 4d99d2351d..0000000000
--- a/server/eoc_bucket.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "http_connection.h"
-
-static apr_status_t eoc_bucket_read(apr_bucket *b, const char **str,
- apr_size_t *len, apr_read_type_e block)
-{
- *str = NULL;
- *len = 0;
- return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_bucket *) ap_bucket_eoc_make(apr_bucket *b)
-{
- b->length = 0;
- b->start = 0;
- b->data = NULL;
- b->type = &ap_bucket_type_eoc;
-
- return b;
-}
-
-AP_DECLARE(apr_bucket *) ap_bucket_eoc_create(apr_bucket_alloc_t *list)
-{
- apr_bucket *b = apr_bucket_alloc(sizeof(*b), list);
-
- APR_BUCKET_INIT(b);
- b->free = apr_bucket_free;
- b->list = list;
- return ap_bucket_eoc_make(b);
-}
-
-AP_DECLARE_DATA const apr_bucket_type_t ap_bucket_type_eoc = {
- "EOC", 5, APR_BUCKET_METADATA,
- apr_bucket_destroy_noop,
- eoc_bucket_read,
- apr_bucket_setaside_noop,
- apr_bucket_split_notimpl,
- apr_bucket_simple_copy
-};
diff --git a/server/error_bucket.c b/server/error_bucket.c
deleted file mode 100644
index a9f01a0849..0000000000
--- a/server/error_bucket.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "http_protocol.h"
-#include "apr_buckets.h"
-#include "apr_strings.h"
-#if APR_HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-static apr_status_t error_bucket_read(apr_bucket *b, const char **str,
- apr_size_t *len, apr_read_type_e block)
-{
- *str = NULL;
- *len = 0;
- return APR_SUCCESS;
-}
-
-static void error_bucket_destroy(void *data)
-{
- ap_bucket_error *h = data;
-
- if (apr_bucket_shared_destroy(h)) {
- apr_bucket_free(h);
- }
-}
-
-AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
- const char *buf, apr_pool_t *p)
-{
- ap_bucket_error *h;
-
- h = apr_bucket_alloc(sizeof(*h), b->list);
- h->status = error;
- h->data = (buf) ? apr_pstrdup(p, buf) : NULL;
-
- b = apr_bucket_shared_make(b, h, 0, 0);
- b->type = &ap_bucket_type_error;
- return b;
-}
-
-AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error, const char *buf,
- apr_pool_t *p,
- apr_bucket_alloc_t *list)
-{
- apr_bucket *b = apr_bucket_alloc(sizeof(*b), list);
-
- APR_BUCKET_INIT(b);
- b->free = apr_bucket_free;
- b->list = list;
- return ap_bucket_error_make(b, error, buf, p);
-}
-
-AP_DECLARE_DATA const apr_bucket_type_t ap_bucket_type_error = {
- "ERROR", 5, APR_BUCKET_METADATA,
- error_bucket_destroy,
- error_bucket_read,
- apr_bucket_setaside_notimpl,
- apr_bucket_split_notimpl,
- apr_bucket_shared_copy
-};
diff --git a/server/gen_test_char.c b/server/gen_test_char.c
deleted file mode 100644
index d3c1ab85b6..0000000000
--- a/server/gen_test_char.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-
-/* A bunch of functions in util.c scan strings looking for certain characters.
- * To make that more efficient we encode a lookup table.
- */
-#define T_ESCAPE_SHELL_CMD (0x01)
-#define T_ESCAPE_PATH_SEGMENT (0x02)
-#define T_OS_ESCAPE_PATH (0x04)
-#define T_HTTP_TOKEN_STOP (0x08)
-#define T_ESCAPE_LOGITEM (0x10)
-#define T_ESCAPE_FORENSIC (0x20)
-
-int main(int argc, char *argv[])
-{
- unsigned c;
- unsigned char flags;
-
- printf("/* this file is automatically generated by gen_test_char, "
- "do not edit */\n"
- "#define T_ESCAPE_SHELL_CMD (%u)\n"
- "#define T_ESCAPE_PATH_SEGMENT (%u)\n"
- "#define T_OS_ESCAPE_PATH (%u)\n"
- "#define T_HTTP_TOKEN_STOP (%u)\n"
- "#define T_ESCAPE_LOGITEM (%u)\n"
- "#define T_ESCAPE_FORENSIC (%u)\n"
- "\n"
- "static const unsigned char test_char_table[256] = {",
- T_ESCAPE_SHELL_CMD,
- T_ESCAPE_PATH_SEGMENT,
- T_OS_ESCAPE_PATH,
- T_HTTP_TOKEN_STOP,
- T_ESCAPE_LOGITEM,
- T_ESCAPE_FORENSIC);
-
- for (c = 0; c < 256; ++c) {
- flags = 0;
- if (c % 20 == 0)
- printf("\n ");
-
- /* escape_shell_cmd */
-#if defined(WIN32) || defined(OS2)
- /* Win32/OS2 have many of the same vulnerable characters
- * as Unix sh, plus the carriage return and percent char.
- * The proper escaping of these characters varies from unix
- * since Win32/OS2 use carets or doubled-double quotes,
- * and neither lf nor cr can be escaped. We escape unix
- * specific as well, to assure that cross-compiled unix
- * applications behave similiarly when invoked on win32/os2.
- *
- * Rem please keep in-sync with apr's list in win32/filesys.c
- */
- if (c && strchr("&;`'\"|*?~<>^()[]{}$\\\n\r%", c)) {
- flags |= T_ESCAPE_SHELL_CMD;
- }
-#else
- if (c && strchr("&;`'\"|*?~<>^()[]{}$\\\n", c)) {
- flags |= T_ESCAPE_SHELL_CMD;
- }
-#endif
-
- if (!apr_isalnum(c) && !strchr("$-_.+!*'(),:@&=~", c)) {
- flags |= T_ESCAPE_PATH_SEGMENT;
- }
-
- if (!apr_isalnum(c) && !strchr("$-_.+!*'(),:@&=/~", c)) {
- flags |= T_OS_ESCAPE_PATH;
- }
-
- /* these are the "tspecials" from RFC2068 */
- if (c && (apr_iscntrl(c) || strchr(" \t()<>@,;:\\/[]?={}", c))) {
- flags |= T_HTTP_TOKEN_STOP;
- }
-
- /* For logging, escape all control characters,
- * double quotes (because they delimit the request in the log file)
- * backslashes (because we use backslash for escaping)
- * and 8-bit chars with the high bit set
- */
- if (c && (!apr_isprint(c) || c == '"' || c == '\\' || apr_iscntrl(c))) {
- flags |= T_ESCAPE_LOGITEM;
- }
-
- /* For forensic logging, escape all control characters, top bit set,
- * :, | (used as delimiters) and % (used for escaping).
- */
- if (!apr_isprint(c) || c == ':' || c == '|' || c == '%'
- || apr_iscntrl(c) || !c) {
- flags |= T_ESCAPE_FORENSIC;
- }
-
- printf("%u%c", flags, (c < 255) ? ',' : ' ');
- }
-
- printf("\n};\n");
-
- return 0;
-}
diff --git a/server/gen_test_char.dsp b/server/gen_test_char.dsp
deleted file mode 100644
index 44475a190e..0000000000
--- a/server/gen_test_char.dsp
+++ /dev/null
@@ -1,94 +0,0 @@
-# Microsoft Developer Studio Project File - Name="gen_test_char" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=gen_test_char - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gen_test_char.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gen_test_char.mak" CFG="gen_test_char - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gen_test_char - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "gen_test_char - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gen_test_char - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "..\include" /I "..\srclib\apr\include" /I "..\srclib\apr-util\include" /I "..\os\win32" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Release\gen_test_char" /FD /c
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\gen_test_char.pdb" /machine:I386
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\gen_test_char.pdb" /machine:I386 /opt:ref
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "gen_test_char - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\include" /I "..\srclib\apr\include" /I "..\srclib\apr-util\include" /I "..\os\win32" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Debug\gen_test_char" /FD /c
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\gen_test_char.pdb" /debug /machine:I386 /pdbtype:sept
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\gen_test_char.pdb" /debug /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "gen_test_char - Win32 Release"
-# Name "gen_test_char - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\gen_test_char.c
-# End Source File
-# End Target
-# End Project
diff --git a/server/listen.c b/server/listen.c
deleted file mode 100644
index 13a53ac7fd..0000000000
--- a/server/listen.c
+++ /dev/null
@@ -1,511 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_network_io.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_listen.h"
-#include "http_log.h"
-#include "mpm.h"
-#include "mpm_common.h"
-
-ap_listen_rec *ap_listeners = NULL;
-
-static ap_listen_rec *old_listeners;
-static int ap_listenbacklog;
-static int send_buffer_size;
-
-/* TODO: make_sock is just begging and screaming for APR abstraction */
-static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
-{
- apr_socket_t *s = server->sd;
- int one = 1;
-#if APR_HAVE_IPV6
-#ifdef AP_ENABLE_V4_MAPPED
- int v6only_setting = 0;
-#else
- int v6only_setting = 1;
-#endif
-#endif
- apr_status_t stat;
-
-#ifndef WIN32
- stat = apr_socket_opt_set(s, APR_SO_REUSEADDR, one);
- if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
- "make_sock: for address %pI, apr_socket_opt_set: (SO_REUSEADDR)",
- server->bind_addr);
- apr_socket_close(s);
- return stat;
- }
-#endif
-
- stat = apr_socket_opt_set(s, APR_SO_KEEPALIVE, one);
- if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
- "make_sock: for address %pI, apr_socket_opt_set: (SO_KEEPALIVE)",
- server->bind_addr);
- apr_socket_close(s);
- return stat;
- }
-
-#if APR_HAVE_IPV6
- if (server->bind_addr->family == APR_INET6) {
- stat = apr_socket_opt_set(s, APR_IPV6_V6ONLY, v6only_setting);
- if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
- "make_sock: for address %pI, apr_socket_opt_set: "
- "(IPV6_V6ONLY)",
- server->bind_addr);
- apr_socket_close(s);
- return stat;
- }
- }
-#endif
-
- /*
- * To send data over high bandwidth-delay connections at full
- * speed we must force the TCP window to open wide enough to keep the
- * pipe full. The default window size on many systems
- * is only 4kB. Cross-country WAN connections of 100ms
- * at 1Mb/s are not impossible for well connected sites.
- * If we assume 100ms cross-country latency,
- * a 4kB buffer limits throughput to 40kB/s.
- *
- * To avoid this problem I've added the SendBufferSize directive
- * to allow the web master to configure send buffer size.
- *
- * The trade-off of larger buffers is that more kernel memory
- * is consumed. YMMV, know your customers and your network!
- *
- * -John Heidemann <johnh@isi.edu> 25-Oct-96
- *
- * If no size is specified, use the kernel default.
- */
- if (send_buffer_size) {
- stat = apr_socket_opt_set(s, APR_SO_SNDBUF, send_buffer_size);
- if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
- ap_log_perror(APLOG_MARK, APLOG_WARNING, stat, p,
- "make_sock: failed to set SendBufferSize for "
- "address %pI, using default",
- server->bind_addr);
- /* not a fatal error */
- }
- }
-
-#if APR_TCP_NODELAY_INHERITED
- ap_sock_disable_nagle(s);
-#endif
-
- if ((stat = apr_socket_bind(s, server->bind_addr)) != APR_SUCCESS) {
- ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, stat, p,
- "make_sock: could not bind to address %pI",
- server->bind_addr);
- apr_socket_close(s);
- return stat;
- }
-
- if ((stat = apr_socket_listen(s, ap_listenbacklog)) != APR_SUCCESS) {
- ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, stat, p,
- "make_sock: unable to listen for connections "
- "on address %pI",
- server->bind_addr);
- apr_socket_close(s);
- return stat;
- }
-
-#ifdef WIN32
- /* I seriously doubt that this would work on Unix; I have doubts that
- * it entirely solves the problem on Win32. However, since setting
- * reuseaddr on the listener -prior- to binding the socket has allowed
- * us to attach to the same port as an already running instance of
- * Apache, or even another web server, we cannot identify that this
- * port was exclusively granted to this instance of Apache.
- *
- * So set reuseaddr, but do not attempt to do so until we have the
- * parent listeners successfully bound.
- */
- stat = apr_socket_opt_set(s, APR_SO_REUSEADDR, one);
- if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
- "make_sock: for address %pI, apr_socket_opt_set: (SO_REUSEADDR)",
- server->bind_addr);
- apr_socket_close(s);
- return stat;
- }
-#endif
-
-#if APR_HAS_SO_ACCEPTFILTER
-#ifndef ACCEPT_FILTER_NAME
-#define ACCEPT_FILTER_NAME "httpready"
-#ifdef __FreeBSD_version
-#if __FreeBSD_version < 411000 /* httpready broken before 4.1.1 */
-#undef ACCEPT_FILTER_NAME
-#define ACCEPT_FILTER_NAME "dataready"
-#endif
-#endif
-#endif
- apr_socket_accept_filter(s, ACCEPT_FILTER_NAME, "");
-#endif
-
- server->sd = s;
- server->active = 1;
-
-#ifdef MPM_ACCEPT_FUNC
- server->accept_func = MPM_ACCEPT_FUNC;
-#else
- server->accept_func = NULL;
-#endif
-
- return APR_SUCCESS;
-}
-
-static apr_status_t close_listeners_on_exec(void *v)
-{
- ap_listen_rec *lr;
-
- for (lr = ap_listeners; lr; lr = lr->next) {
- apr_socket_close(lr->sd);
- lr->active = 0;
- }
-
- return APR_SUCCESS;
-}
-
-
-static const char *alloc_listener(process_rec *process, char *addr, apr_port_t port)
-{
- ap_listen_rec **walk, *last;
- apr_status_t status;
- apr_sockaddr_t *sa;
- int found_listener = 0;
-
- /* see if we've got an old listener for this address:port */
- for (walk = &old_listeners; *walk;) {
- sa = (*walk)->bind_addr;
- /* Some listeners are not real so they will not have a bind_addr. */
- if (sa) {
- ap_listen_rec *new;
- apr_port_t oldport;
-
- oldport = sa->port;
- /* If both ports are equivalent, then if their names are equivalent,
- * then we will re-use the existing record.
- */
- if (port == oldport &&
- ((!addr && !sa->hostname) ||
- ((addr && sa->hostname) && !strcmp(sa->hostname, addr)))) {
- new = *walk;
- *walk = new->next;
- new->next = ap_listeners;
- ap_listeners = new;
- found_listener = 1;
- continue;
- }
- }
-
- walk = &(*walk)->next;
- }
-
- if (found_listener) {
- return NULL;
- }
-
- if ((status = apr_sockaddr_info_get(&sa, addr, APR_UNSPEC, port, 0,
- process->pool))
- != APR_SUCCESS) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, status, process->pool,
- "alloc_listener: failed to set up sockaddr for %s",
- addr);
- return "Listen setup failed";
- }
-
- /* Initialize to our last configured ap_listener. */
- last = ap_listeners;
- while (last && last->next) {
- last = last->next;
- }
-
- while (sa) {
- ap_listen_rec *new;
-
- /* this has to survive restarts */
- new = apr_palloc(process->pool, sizeof(ap_listen_rec));
- new->active = 0;
- new->next = 0;
- new->bind_addr = sa;
-
- /* Go to the next sockaddr. */
- sa = sa->next;
-
- status = apr_socket_create(&new->sd, new->bind_addr->family,
- SOCK_STREAM, 0, process->pool);
-
-#if APR_HAVE_IPV6
- /* What could happen is that we got an IPv6 address, but this system
- * doesn't actually support IPv6. Try the next address.
- */
- if (status != APR_SUCCESS && !addr &&
- new->bind_addr->family == APR_INET6) {
- continue;
- }
-#endif
- if (status != APR_SUCCESS) {
- ap_log_perror(APLOG_MARK, APLOG_CRIT, status, process->pool,
- "alloc_listener: failed to get a socket for %s",
- addr);
- return "Listen setup failed";
- }
-
- /* We need to preserve the order returned by getaddrinfo() */
- if (last == NULL) {
- ap_listeners = last = new;
- } else {
- last->next = new;
- last = new;
- }
- }
-
- return NULL;
-}
-
-static int ap_listen_open(apr_pool_t *pool, apr_port_t port)
-{
- ap_listen_rec *lr;
- ap_listen_rec *next;
- ap_listen_rec *previous;
- int num_open;
- const char *userdata_key = "ap_listen_open";
- void *data;
-
- /* Don't allocate a default listener. If we need to listen to a
- * port, then the user needs to have a Listen directive in their
- * config file.
- */
- num_open = 0;
- previous = NULL;
- for (lr = ap_listeners; lr; previous = lr, lr = lr->next) {
- if (lr->active) {
- ++num_open;
- }
- else {
-#if APR_HAVE_IPV6
- int v6only_setting;
- /* If we are trying to bind to 0.0.0.0 and the previous listener
- * was :: on the same port and in turn that socket does not have
- * the IPV6_V6ONLY flag set; we must skip the current attempt to
- * listen (which would generate an error). IPv4 will be handled
- * on the established IPv6 socket.
- */
- if (previous != NULL &&
- lr->bind_addr->family == APR_INET &&
- lr->bind_addr->sa.sin.sin_addr.s_addr == INADDR_ANY &&
- lr->bind_addr->port == previous->bind_addr->port &&
- previous->bind_addr->family == APR_INET6 &&
- IN6_IS_ADDR_UNSPECIFIED(
- &previous->bind_addr->sa.sin6.sin6_addr) &&
- apr_socket_opt_get(previous->sd, APR_IPV6_V6ONLY,
- &v6only_setting) == APR_SUCCESS &&
- v6only_setting == 0) {
-
- /* Remove the current listener from the list */
- previous->next = lr->next;
- continue;
- }
-#endif
- if (make_sock(pool, lr) == APR_SUCCESS) {
- ++num_open;
- lr->active = 1;
- }
- else {
-#if APR_HAVE_IPV6
- /* If we tried to bind to ::, and the next listener is
- * on 0.0.0.0 with the same port, don't give a fatal
- * error. The user will still get a warning from make_sock
- * though.
- */
- if (lr->next != NULL && lr->bind_addr->family == APR_INET6 &&
- IN6_IS_ADDR_UNSPECIFIED(
- &lr->bind_addr->sa.sin6.sin6_addr) &&
- lr->bind_addr->port == lr->next->bind_addr->port &&
- lr->next->bind_addr->family == APR_INET &&
- lr->next->bind_addr->sa.sin.sin_addr.s_addr == INADDR_ANY) {
-
- /* Remove the current listener from the list */
- if (previous) {
- previous->next = lr->next;
- }
- else {
- ap_listeners = lr->next;
- }
-
- /* Although we've removed ourselves from the list,
- * we need to make sure that the next iteration won't
- * consider "previous" a working IPv6 '::' socket.
- * Changing the family is enough to make sure the
- * conditions before make_sock() fail.
- */
- lr->bind_addr->family = AF_INET;
-
- continue;
- }
-#endif
- /* fatal error */
- return -1;
- }
- }
- }
-
- /* close the old listeners */
- for (lr = old_listeners; lr; lr = next) {
- apr_socket_close(lr->sd);
- lr->active = 0;
- next = lr->next;
- }
- old_listeners = NULL;
-
-#if AP_NONBLOCK_WHEN_MULTI_LISTEN
- /* if multiple listening sockets, make them non-blocking so that
- * if select()/poll() reports readability for a reset connection that
- * is already forgotten about by the time we call accept, we won't
- * be hung until another connection arrives on that port
- */
- if (ap_listeners && ap_listeners->next) {
- for (lr = ap_listeners; lr; lr = lr->next) {
- apr_status_t status;
-
- status = apr_socket_opt_set(lr->sd, APR_SO_NONBLOCK, 1);
- if (status != APR_SUCCESS) {
- ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, status, pool,
- "ap_listen_open: unable to make socket non-blocking");
- return -1;
- }
- }
- }
-#endif /* AP_NONBLOCK_WHEN_MULTI_LISTEN */
-
- /* we come through here on both passes of the open logs phase
- * only register the cleanup once... otherwise we try to close
- * listening sockets twice when cleaning up prior to exec
- */
- apr_pool_userdata_get(&data, userdata_key, pool);
- if (!data) {
- apr_pool_userdata_set((const void *)1, userdata_key,
- apr_pool_cleanup_null, pool);
- apr_pool_cleanup_register(pool, NULL, apr_pool_cleanup_null,
- close_listeners_on_exec);
- }
-
- return num_open ? 0 : -1;
-}
-
-int ap_setup_listeners(server_rec *s)
-{
- ap_listen_rec *lr;
- int num_listeners = 0;
-
- if (ap_listen_open(s->process->pool, s->port)) {
- return 0;
- }
-
- for (lr = ap_listeners; lr; lr = lr->next) {
- num_listeners++;
- }
-
- return num_listeners;
-}
-
-void ap_listen_pre_config(void)
-{
- old_listeners = ap_listeners;
- ap_listeners = NULL;
- ap_listenbacklog = DEFAULT_LISTENBACKLOG;
-}
-
-
-const char *ap_set_listener(cmd_parms *cmd, void *dummy, const char *ips)
-{
- char *host, *scope_id;
- apr_port_t port;
- apr_status_t rv;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- rv = apr_parse_addr_port(&host, &scope_id, &port, ips, cmd->pool);
- if (rv != APR_SUCCESS) {
- return "Invalid address or port";
- }
-
- if (host && !strcmp(host, "*")) {
- host = NULL;
- }
-
- if (scope_id) {
- /* XXX scope id support is useful with link-local IPv6 addresses */
- return "Scope id is not supported";
- }
-
- if (!port) {
- return "Port must be specified";
- }
-
- return alloc_listener(cmd->server->process, host, port);
-}
-
-const char *ap_set_listenbacklog(cmd_parms *cmd, void *dummy, const char *arg)
-{
- int b;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- b = atoi(arg);
- if (b < 1) {
- return "ListenBacklog must be > 0";
- }
-
- ap_listenbacklog = b;
- return NULL;
-}
-
-const char *ap_set_send_buffer_size(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- int s = atoi(arg);
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- if (s < 512 && s != 0) {
- return "SendBufferSize must be >= 512 bytes, or 0 for system default.";
- }
-
- send_buffer_size = s;
- return NULL;
-}
diff --git a/server/log.c b/server/log.c
deleted file mode 100644
index f8c2af4204..0000000000
--- a/server/log.c
+++ /dev/null
@@ -1,917 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_log.c: Dealing with the logs and errors
- *
- * Rob McCool
- *
- */
-
-#include "apr.h"
-#include "apr_general.h" /* for signal stuff */
-#include "apr_strings.h"
-#include "apr_errno.h"
-#include "apr_thread_proc.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_time.h"
-#include "ap_mpm.h"
-
-typedef struct {
- char *t_name;
- int t_val;
-} TRANS;
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(error_log)
-)
-
-int AP_DECLARE_DATA ap_default_loglevel = DEFAULT_LOGLEVEL;
-
-#ifdef HAVE_SYSLOG
-
-static const TRANS facilities[] = {
- {"auth", LOG_AUTH},
-#ifdef LOG_AUTHPRIV
- {"authpriv",LOG_AUTHPRIV},
-#endif
-#ifdef LOG_CRON
- {"cron", LOG_CRON},
-#endif
-#ifdef LOG_DAEMON
- {"daemon", LOG_DAEMON},
-#endif
-#ifdef LOG_FTP
- {"ftp", LOG_FTP},
-#endif
-#ifdef LOG_KERN
- {"kern", LOG_KERN},
-#endif
-#ifdef LOG_LPR
- {"lpr", LOG_LPR},
-#endif
-#ifdef LOG_MAIL
- {"mail", LOG_MAIL},
-#endif
-#ifdef LOG_NEWS
- {"news", LOG_NEWS},
-#endif
-#ifdef LOG_SYSLOG
- {"syslog", LOG_SYSLOG},
-#endif
-#ifdef LOG_USER
- {"user", LOG_USER},
-#endif
-#ifdef LOG_UUCP
- {"uucp", LOG_UUCP},
-#endif
-#ifdef LOG_LOCAL0
- {"local0", LOG_LOCAL0},
-#endif
-#ifdef LOG_LOCAL1
- {"local1", LOG_LOCAL1},
-#endif
-#ifdef LOG_LOCAL2
- {"local2", LOG_LOCAL2},
-#endif
-#ifdef LOG_LOCAL3
- {"local3", LOG_LOCAL3},
-#endif
-#ifdef LOG_LOCAL4
- {"local4", LOG_LOCAL4},
-#endif
-#ifdef LOG_LOCAL5
- {"local5", LOG_LOCAL5},
-#endif
-#ifdef LOG_LOCAL6
- {"local6", LOG_LOCAL6},
-#endif
-#ifdef LOG_LOCAL7
- {"local7", LOG_LOCAL7},
-#endif
- {NULL, -1},
-};
-#endif
-
-static const TRANS priorities[] = {
- {"emerg", APLOG_EMERG},
- {"alert", APLOG_ALERT},
- {"crit", APLOG_CRIT},
- {"error", APLOG_ERR},
- {"warn", APLOG_WARNING},
- {"notice", APLOG_NOTICE},
- {"info", APLOG_INFO},
- {"debug", APLOG_DEBUG},
- {NULL, -1},
-};
-
-static apr_file_t *stderr_log = NULL;
-
-AP_DECLARE(void) ap_open_stderr_log(apr_pool_t *p)
-{
- apr_file_open_stderr(&stderr_log, p);
-}
-
-AP_DECLARE(apr_status_t) ap_replace_stderr_log(apr_pool_t *p,
- const char *fname)
-{
- apr_file_t *stderr_file;
- apr_status_t rc;
- char *filename = ap_server_root_relative(p, fname);
- if (!filename) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT,
- APR_EBADPATH, NULL, "Invalid -E error log file %s",
- fname);
- return APR_EBADPATH;
- }
- if ((rc = apr_file_open(&stderr_file, filename,
- APR_APPEND | APR_WRITE | APR_CREATE | APR_LARGEFILE,
- APR_OS_DEFAULT, p)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
- "%s: could not open error log file %s.",
- ap_server_argv0, fname);
- return rc;
- }
- if ((rc = apr_file_open_stderr(&stderr_log, p)) == APR_SUCCESS) {
- apr_file_flush(stderr_log);
- if ((rc = apr_file_dup2(stderr_log, stderr_file, p)) == APR_SUCCESS) {
- apr_file_close(stderr_file);
- }
- }
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rc, NULL,
- "unable to replace stderr with error_log");
- }
- return rc;
-}
-
-static void log_child_errfn(apr_pool_t *pool, apr_status_t err,
- const char *description)
-{
- ap_log_error(APLOG_MARK, APLOG_ERR, err, NULL,
- "%s", description);
-}
-
-static int log_child(apr_pool_t *p, const char *progname,
- apr_file_t **fpin)
-{
- /* Child process code for 'ErrorLog "|..."';
- * may want a common framework for this, since I expect it will
- * be common for other foo-loggers to want this sort of thing...
- */
- apr_status_t rc;
- apr_procattr_t *procattr;
- apr_proc_t *procnew;
-
- if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS)
- && ((rc = apr_procattr_cmdtype_set(procattr,
- APR_SHELLCMD_ENV)) == APR_SUCCESS)
- && ((rc = apr_procattr_io_set(procattr,
- APR_FULL_BLOCK,
- APR_NO_PIPE,
- APR_NO_PIPE)) == APR_SUCCESS)
- && ((rc = apr_procattr_error_check_set(procattr, 1)) == APR_SUCCESS)
- && ((rc = apr_procattr_child_errfn_set(procattr, log_child_errfn)) == APR_SUCCESS)) {
- char **args;
- const char *pname;
-
- apr_tokenize_to_argv(progname, &args, p);
- pname = apr_pstrdup(p, args[0]);
- procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
- rc = apr_proc_create(procnew, pname, (const char * const *)args,
- NULL, procattr, p);
-
- if (rc == APR_SUCCESS) {
- apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
- (*fpin) = procnew->in;
- }
- }
-
- return rc;
-}
-
-static int open_error_log(server_rec *s, apr_pool_t *p)
-{
- const char *fname;
- int rc;
-
- if (*s->error_fname == '|') {
- apr_file_t *dummy = NULL;
-
- /* This starts a new process... */
- rc = log_child (p, s->error_fname + 1, &dummy);
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
- "Couldn't start ErrorLog process");
- return DONE;
- }
-
- s->error_log = dummy;
- }
-
-#ifdef HAVE_SYSLOG
- else if (!strncasecmp(s->error_fname, "syslog", 6)) {
- if ((fname = strchr(s->error_fname, ':'))) {
- const TRANS *fac;
-
- fname++;
- for (fac = facilities; fac->t_name; fac++) {
- if (!strcasecmp(fname, fac->t_name)) {
- openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID,
- fac->t_val);
- s->error_log = NULL;
- return OK;
- }
- }
- }
- else {
- openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID, LOG_LOCAL7);
- }
-
- s->error_log = NULL;
- }
-#endif
- else {
- fname = ap_server_root_relative(p, s->error_fname);
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, APR_EBADPATH, NULL,
- "%s: Invalid error log path %s.",
- ap_server_argv0, s->error_fname);
- return DONE;
- }
- if ((rc = apr_file_open(&s->error_log, fname,
- APR_APPEND | APR_WRITE | APR_CREATE | APR_LARGEFILE,
- APR_OS_DEFAULT, p)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
- "%s: could not open error log file %s.",
- ap_server_argv0, fname);
- return DONE;
- }
- }
-
- return OK;
-}
-
-int ap_open_logs(apr_pool_t *pconf, apr_pool_t *p /* plog */,
- apr_pool_t *ptemp, server_rec *s_main)
-{
- apr_status_t rc = APR_SUCCESS;
- server_rec *virt, *q;
- int replace_stderr;
- apr_file_t *errfile = NULL;
-
- if (open_error_log(s_main, p) != OK) {
- return DONE;
- }
-
- replace_stderr = 1;
- if (s_main->error_log) {
- /* replace stderr with this new log */
- apr_file_flush(s_main->error_log);
- if ((rc = apr_file_open_stderr(&errfile, p)) == APR_SUCCESS) {
- rc = apr_file_dup2(errfile, s_main->error_log, p);
- }
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s_main,
- "unable to replace stderr with error_log");
- }
- else {
- replace_stderr = 0;
- }
- }
- /* note that stderr may still need to be replaced with something
- * because it points to the old error log, or back to the tty
- * of the submitter.
- * XXX: This is BS - /dev/null is non-portable
- */
- if (replace_stderr && freopen("/dev/null", "w", stderr) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s_main,
- "unable to replace stderr with /dev/null");
- }
-
- for (virt = s_main->next; virt; virt = virt->next) {
- if (virt->error_fname) {
- for (q=s_main; q != virt; q = q->next) {
- if (q->error_fname != NULL
- && strcmp(q->error_fname, virt->error_fname) == 0) {
- break;
- }
- }
-
- if (q == virt) {
- if (open_error_log(virt, p) != OK) {
- return DONE;
- }
- }
- else {
- virt->error_log = q->error_log;
- }
- }
- else {
- virt->error_log = s_main->error_log;
- }
- }
- return OK;
-}
-
-AP_DECLARE(void) ap_error_log2stderr(server_rec *s) {
- apr_file_t *errfile = NULL;
-
- apr_file_open_stderr(&errfile, s->process->pool);
- if (s->error_log != NULL) {
- apr_file_dup2(s->error_log, errfile, s->process->pool);
- }
-}
-
-static void log_error_core(const char *file, int line, int level,
- apr_status_t status, const server_rec *s,
- const request_rec *r, apr_pool_t *pool,
- const char *fmt, va_list args)
-{
- char errstr[MAX_STRING_LEN];
-#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
- char scratch[MAX_STRING_LEN];
-#endif
- apr_size_t len, errstrlen;
- apr_file_t *logf = NULL;
- const char *referer;
- int level_and_mask = level & APLOG_LEVELMASK;
-
- if (s == NULL) {
- /*
- * If we are doing stderr logging (startup), don't log messages that are
- * above the default server log level unless it is a startup/shutdown
- * notice
- */
- if ((level_and_mask != APLOG_NOTICE)
- && (level_and_mask > ap_default_loglevel)) {
- return;
- }
-
- logf = stderr_log;
- }
- else if (s->error_log) {
- /*
- * If we are doing normal logging, don't log messages that are
- * above the server log level unless it is a startup/shutdown notice
- */
- if ((level_and_mask != APLOG_NOTICE)
- && (level_and_mask > s->loglevel)) {
- return;
- }
-
- logf = s->error_log;
- }
-#ifdef TPF
- else if (tpf_child) {
- /*
- * If we are doing normal logging, don't log messages that are
- * above the server log level unless it is a startup/shutdown notice
- */
- if ((level_and_mask != APLOG_NOTICE)
- && (level_and_mask > s->loglevel)) {
- return;
- }
-
- logf = stderr;
- }
-#endif /* TPF */
- else {
- /*
- * If we are doing syslog logging, don't log messages that are
- * above the server log level (including a startup/shutdown notice)
- */
- if (level_and_mask > s->loglevel) {
- return;
- }
- }
-
- if (logf && ((level & APLOG_STARTUP) != APLOG_STARTUP)) {
- errstr[0] = '[';
- ap_recent_ctime(errstr + 1, apr_time_now());
- errstr[1 + APR_CTIME_LEN - 1] = ']';
- errstr[1 + APR_CTIME_LEN ] = ' ';
- len = 1 + APR_CTIME_LEN + 1;
- } else {
- len = 0;
- }
-
- if ((level & APLOG_STARTUP) != APLOG_STARTUP) {
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "[%s] ", priorities[level_and_mask].t_name);
- }
-
-#ifndef TPF
- if (file && level_and_mask == APLOG_DEBUG) {
-#if defined(_OSD_POSIX) || defined(WIN32)
- char tmp[256];
- char *e = strrchr(file, '/');
-#ifdef WIN32
- if (!e) {
- e = strrchr(file, '\\');
- }
-#endif
-
- /* In OSD/POSIX, the compiler returns for __FILE__
- * a string like: __FILE__="*POSIX(/usr/include/stdio.h)"
- * (it even returns an absolute path for sources in
- * the current directory). Here we try to strip this
- * down to the basename.
- */
- if (e != NULL && e[1] != '\0') {
- apr_snprintf(tmp, sizeof(tmp), "%s", &e[1]);
- e = &tmp[strlen(tmp)-1];
- if (*e == ')') {
- *e = '\0';
- }
- file = tmp;
- }
-#endif /*_OSD_POSIX*/
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "%s(%d): ", file, line);
- }
-#endif /* TPF */
-
- if (r && r->connection) {
- /* XXX: TODO: add a method of selecting whether logged client
- * addresses are in dotted quad or resolved form... dotted
- * quad is the most secure, which is why I'm implementing it
- * first. -djg
- */
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "[client %s] ", r->connection->remote_ip);
- }
- if (status != 0) {
- if (status < APR_OS_START_EAIERR) {
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "(%d)", status);
- }
- else if (status < APR_OS_START_SYSERR) {
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "(EAI %d)", status - APR_OS_START_EAIERR);
- }
- else if (status < 100000 + APR_OS_START_SYSERR) {
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "(OS %d)", status - APR_OS_START_SYSERR);
- }
- else {
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- "(os 0x%08x)", status - APR_OS_START_SYSERR);
- }
- apr_strerror(status, errstr + len, MAX_STRING_LEN - len);
- len += strlen(errstr + len);
- if (MAX_STRING_LEN - len > 2) {
- errstr[len++] = ':';
- errstr[len++] = ' ';
- errstr[len] = '\0';
- }
- }
-
- errstrlen = len;
-#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
- if (apr_vsnprintf(scratch, MAX_STRING_LEN - len, fmt, args)) {
- len += ap_escape_errorlog_item(errstr + len, scratch,
- MAX_STRING_LEN - len);
- }
-#else
- len += apr_vsnprintf(errstr + len, MAX_STRING_LEN - len, fmt, args);
-#endif
-
- if ( r && (referer = apr_table_get(r->headers_in, "Referer"))
-#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
- && ap_escape_errorlog_item(scratch, referer, MAX_STRING_LEN - len)
-#endif
- ) {
- len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
- ", referer: %s",
-#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
- scratch
-#else
- referer
-#endif
- );
- }
-
- /* NULL if we are logging to syslog */
- if (logf) {
- /* Truncate for the terminator (as apr_snprintf does) */
- if (len > MAX_STRING_LEN - sizeof(APR_EOL_STR)) {
- len = MAX_STRING_LEN - sizeof(APR_EOL_STR);
- }
- strcpy(errstr + len, APR_EOL_STR);
- apr_file_puts(errstr, logf);
- apr_file_flush(logf);
- }
-#ifdef HAVE_SYSLOG
- else {
- syslog(level_and_mask, "%s", errstr);
- }
-#endif
-
- ap_run_error_log(file, line, level, status, s, r, pool, errstr + errstrlen);
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
- apr_status_t status, const server_rec *s,
- const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- log_error_core(file, line, level, status, s, NULL, NULL, fmt, args);
- va_end(args);
-}
-
-AP_DECLARE(void) ap_log_perror(const char *file, int line, int level,
- apr_status_t status, apr_pool_t *p,
- const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- log_error_core(file, line, level, status, NULL, NULL, p, fmt, args);
- va_end(args);
-}
-
-AP_DECLARE(void) ap_log_rerror(const char *file, int line, int level,
- apr_status_t status, const request_rec *r,
- const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- log_error_core(file, line, level, status, r->server, r, NULL, fmt, args);
-
- /*
- * IF APLOG_TOCLIENT is set,
- * AND the error level is 'warning' or more severe,
- * AND there isn't already error text associated with this request,
- * THEN make the message text available to ErrorDocument and
- * other error processors.
- */
- va_end(args);
- va_start(args,fmt);
- if ((level & APLOG_TOCLIENT)
- && ((level & APLOG_LEVELMASK) <= APLOG_WARNING)
- && (apr_table_get(r->notes, "error-notes") == NULL)) {
- apr_table_setn(r->notes, "error-notes",
- ap_escape_html(r->pool, apr_pvsprintf(r->pool, fmt,
- args)));
- }
- va_end(args);
-}
-
-AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *filename)
-{
- apr_file_t *pid_file = NULL;
- apr_finfo_t finfo;
- static pid_t saved_pid = -1;
- pid_t mypid;
- apr_status_t rv;
- const char *fname;
-
- if (!filename) {
- return;
- }
-
- fname = ap_server_root_relative(p, filename);
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, APR_EBADPATH,
- NULL, "Invalid PID file path %s, ignoring.", filename);
- return;
- }
-
- mypid = getpid();
- if (mypid != saved_pid
- && apr_stat(&finfo, fname, APR_FINFO_MTIME, p) == APR_SUCCESS) {
- /* AP_SIG_GRACEFUL and HUP call this on each restart.
- * Only warn on first time through for this pid.
- *
- * XXX: Could just write first time through too, although
- * that may screw up scripts written to do something
- * based on the last modification time of the pid file.
- */
- ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, p,
- apr_psprintf(p, "pid file %s overwritten -- Unclean "
- "shutdown of previous Apache run?",
- fname));
- }
-
- if ((rv = apr_file_open(&pid_file, fname,
- APR_WRITE | APR_CREATE | APR_TRUNCATE,
- APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD, p))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "could not create %s", fname);
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "%s: could not log pid to file %s",
- ap_server_argv0, fname);
- exit(1);
- }
- apr_file_printf(pid_file, "%ld" APR_EOL_STR, (long)mypid);
- apr_file_close(pid_file);
- saved_pid = mypid;
-}
-
-AP_DECLARE(apr_status_t) ap_read_pid(apr_pool_t *p, const char *filename,
- pid_t *mypid)
-{
- const apr_size_t BUFFER_SIZE = sizeof(long) * 3 + 2; /* see apr_ltoa */
- apr_file_t *pid_file = NULL;
- apr_status_t rv;
- const char *fname;
- char *buf, *endptr;
- apr_size_t bytes_read;
-
- if (!filename) {
- return APR_EGENERAL;
- }
-
- fname = ap_server_root_relative(p, filename);
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, APR_EBADPATH,
- NULL, "Invalid PID file path %s, ignoring.", filename);
- return APR_EGENERAL;
- }
-
- rv = apr_file_open(&pid_file, fname, APR_READ, APR_OS_DEFAULT, p);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- /* Ensure null-termination, so that strtol doesn't go crazy. */
- buf = apr_palloc(p, BUFFER_SIZE);
- buf[BUFFER_SIZE - 1] = '\0';
-
- rv = apr_file_read_full(pid_file, buf, BUFFER_SIZE - 1, &bytes_read);
- if (rv != APR_SUCCESS && rv != APR_EOF) {
- return rv;
- }
-
- /* If we fill the buffer, we're probably reading a corrupt pid file.
- * To be nice, let's also ensure the first char is a digit. */
- if (bytes_read == BUFFER_SIZE - 1 || !apr_isdigit(*buf)) {
- return APR_EGENERAL;
- }
-
- *mypid = strtol(buf, &endptr, 10);
-
- apr_file_close(pid_file);
- return APR_SUCCESS;
-}
-
-AP_DECLARE(void) ap_log_assert(const char *szExp, const char *szFile,
- int nLine)
-{
- char time_str[APR_CTIME_LEN];
-
- apr_ctime(time_str, apr_time_now());
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL,
- "[%s] file %s, line %d, assertion \"%s\" failed",
- time_str, szFile, nLine, szExp);
-#if defined(WIN32)
- DebugBreak();
-#else
- /* unix assert does an abort leading to a core dump */
- abort();
-#endif
-}
-
-/* piped log support */
-
-#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
-/* forward declaration */
-static void piped_log_maintenance(int reason, void *data, apr_wait_t status);
-
-static int piped_log_spawn(piped_log *pl)
-{
- int rc = 0;
- apr_procattr_t *procattr;
- apr_proc_t *procnew = NULL;
- apr_status_t status;
-
- if (((status = apr_procattr_create(&procattr, pl->p)) != APR_SUCCESS) ||
- ((status = apr_procattr_cmdtype_set(procattr,
- APR_SHELLCMD_ENV)) != APR_SUCCESS) ||
- ((status = apr_procattr_child_in_set(procattr,
- ap_piped_log_read_fd(pl),
- ap_piped_log_write_fd(pl)))
- != APR_SUCCESS) ||
- ((status = apr_procattr_child_errfn_set(procattr, log_child_errfn))
- != APR_SUCCESS) ||
- ((status = apr_procattr_error_check_set(procattr, 1)) != APR_SUCCESS)) {
- char buf[120];
- /* Something bad happened, give up and go away. */
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "piped_log_spawn: unable to setup child process '%s': %s",
- pl->program, apr_strerror(status, buf, sizeof(buf)));
- rc = -1;
- }
- else {
- char **args;
- const char *pname;
-
- apr_tokenize_to_argv(pl->program, &args, pl->p);
- pname = apr_pstrdup(pl->p, args[0]);
- procnew = apr_pcalloc(pl->p, sizeof(apr_proc_t));
- status = apr_proc_create(procnew, pname, (const char * const *) args,
- NULL, procattr, pl->p);
-
- if (status == APR_SUCCESS) {
- pl->pid = procnew;
- ap_piped_log_write_fd(pl) = procnew->in;
- apr_proc_other_child_register(procnew, piped_log_maintenance, pl,
- ap_piped_log_write_fd(pl), pl->p);
- }
- else {
- char buf[120];
- /* Something bad happened, give up and go away. */
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "unable to start piped log program '%s': %s",
- pl->program, apr_strerror(status, buf, sizeof(buf)));
- rc = -1;
- }
- }
-
- return rc;
-}
-
-
-static void piped_log_maintenance(int reason, void *data, apr_wait_t status)
-{
- piped_log *pl = data;
- apr_status_t stats;
- int mpm_state;
-
- switch (reason) {
- case APR_OC_REASON_DEATH:
- case APR_OC_REASON_LOST:
- pl->pid = NULL; /* in case we don't get it going again, this
- * tells other logic not to try to kill it
- */
- apr_proc_other_child_unregister(pl);
- stats = ap_mpm_query(AP_MPMQ_MPM_STATE, &mpm_state);
- if (stats != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "can't query MPM state; not restarting "
- "piped log program '%s'",
- pl->program);
- }
- else if (mpm_state != AP_MPMQ_STOPPING) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "piped log program '%s' failed unexpectedly",
- pl->program);
- if ((stats = piped_log_spawn(pl)) != APR_SUCCESS) {
- /* what can we do? This could be the error log we're having
- * problems opening up... */
- char buf[120];
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "piped_log_maintenance: unable to respawn '%s': %s",
- pl->program, apr_strerror(stats, buf, sizeof(buf)));
- }
- }
- break;
-
- case APR_OC_REASON_UNWRITABLE:
- /* We should not kill off the pipe here, since it may only be full.
- * If it really is locked, we should kill it off manually. */
- break;
-
- case APR_OC_REASON_RESTART:
- if (pl->pid != NULL) {
- apr_proc_kill(pl->pid, SIGTERM);
- pl->pid = NULL;
- }
- break;
-
- case APR_OC_REASON_UNREGISTER:
- break;
- }
-}
-
-
-static apr_status_t piped_log_cleanup_for_exec(void *data)
-{
- piped_log *pl = data;
-
- apr_file_close(ap_piped_log_read_fd(pl));
- apr_file_close(ap_piped_log_write_fd(pl));
- return APR_SUCCESS;
-}
-
-
-static apr_status_t piped_log_cleanup(void *data)
-{
- piped_log *pl = data;
-
- if (pl->pid != NULL) {
- apr_proc_kill(pl->pid, SIGTERM);
- }
- return piped_log_cleanup_for_exec(data);
-}
-
-
-AP_DECLARE(piped_log *) ap_open_piped_log(apr_pool_t *p, const char *program)
-{
- piped_log *pl;
-
- pl = apr_palloc(p, sizeof (*pl));
- pl->p = p;
- pl->program = apr_pstrdup(p, program);
- pl->pid = NULL;
- if (apr_file_pipe_create(&ap_piped_log_read_fd(pl),
- &ap_piped_log_write_fd(pl), p) != APR_SUCCESS) {
- return NULL;
- }
- apr_pool_cleanup_register(p, pl, piped_log_cleanup,
- piped_log_cleanup_for_exec);
- if (piped_log_spawn(pl) == -1) {
- int save_errno = errno;
- apr_pool_cleanup_kill(p, pl, piped_log_cleanup);
- apr_file_close(ap_piped_log_read_fd(pl));
- apr_file_close(ap_piped_log_write_fd(pl));
- errno = save_errno;
- return NULL;
- }
- return pl;
-}
-
-#else /* !AP_HAVE_RELIABLE_PIPED_LOGS */
-
-static apr_status_t piped_log_cleanup(void *data)
-{
- piped_log *pl = data;
-
- apr_file_close(ap_piped_log_write_fd(pl));
- return APR_SUCCESS;
-}
-
-AP_DECLARE(piped_log *) ap_open_piped_log(apr_pool_t *p, const char *program)
-{
- piped_log *pl;
- apr_file_t *dummy = NULL;
- int rc;
-
- rc = log_child(p, program, &dummy);
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
- "Couldn't start piped log process");
- return NULL;
- }
-
- pl = apr_palloc(p, sizeof (*pl));
- pl->p = p;
- ap_piped_log_read_fd(pl) = NULL;
- ap_piped_log_write_fd(pl) = dummy;
- apr_pool_cleanup_register(p, pl, piped_log_cleanup, piped_log_cleanup);
-
- return pl;
-}
-
-#endif
-
-AP_DECLARE(void) ap_close_piped_log(piped_log *pl)
-{
- apr_pool_cleanup_run(pl->p, pl, piped_log_cleanup);
-}
-
-AP_IMPLEMENT_HOOK_VOID(error_log,
- (const char *file, int line, int level,
- apr_status_t status, const server_rec *s,
- const request_rec *r, apr_pool_t *pool,
- const char *errstr), (file, line, level,
- status, s, r, pool, errstr))
-
diff --git a/server/main.c b/server/main.c
deleted file mode 100644
index 500009550f..0000000000
--- a/server/main.c
+++ /dev/null
@@ -1,748 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_getopt.h"
-#include "apr_general.h"
-#include "apr_lib.h"
-#include "apr_md5.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_vhost.h"
-#include "apr_uri.h"
-#include "util_ebcdic.h"
-#include "ap_mpm.h"
-#include "mpm_common.h"
-
-#include "mod_so.h" /* for dumping loaded modules */
-
-/* WARNING: Win32 binds http_main.c dynamically to the server. Please place
- * extern functions and global data in another appropriate module.
- *
- * Most significant main() global data can be found in http_config.c
- */
-
-static void show_mpm_settings(void)
-{
- int mpm_query_info;
- apr_status_t retval;
-
- printf("Server MPM: %s\n", ap_show_mpm());
-
- retval = ap_mpm_query(AP_MPMQ_IS_THREADED, &mpm_query_info);
-
- if (retval == APR_SUCCESS) {
- printf(" threaded: ");
-
- if (mpm_query_info == AP_MPMQ_DYNAMIC) {
- printf("yes (variable thread count)\n");
- }
- else if (mpm_query_info == AP_MPMQ_STATIC) {
- printf("yes (fixed thread count)\n");
- }
- else {
- printf("no\n");
- }
- }
-
- retval = ap_mpm_query(AP_MPMQ_IS_FORKED, &mpm_query_info);
-
- if (retval == APR_SUCCESS) {
- printf(" forked: ");
-
- if (mpm_query_info == AP_MPMQ_DYNAMIC) {
- printf("yes (variable process count)\n");
- }
- else if (mpm_query_info == AP_MPMQ_STATIC) {
- printf("yes (fixed process count)\n");
- }
- else {
- printf("no\n");
- }
- }
-}
-
-static void show_compile_settings(void)
-{
- printf("Server version: %s\n", ap_get_server_version());
- printf("Server built: %s\n", ap_get_server_built());
- printf("Server's Module Magic Number: %u:%u\n",
- MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR);
-
- /* sizeof(foo) is long on some platforms so we might as well
- * make it long everywhere to keep the printf format
- * consistent
- */
- printf("Architecture: %ld-bit\n", 8 * (long)sizeof(void *));
-
- show_mpm_settings();
-
- printf("Server compiled with....\n");
-#ifdef BIG_SECURITY_HOLE
- printf(" -D BIG_SECURITY_HOLE\n");
-#endif
-
-#ifdef SECURITY_HOLE_PASS_AUTHORIZATION
- printf(" -D SECURITY_HOLE_PASS_AUTHORIZATION\n");
-#endif
-
-#ifdef OS
- printf(" -D OS=\"" OS "\"\n");
-#endif
-
-#ifdef APACHE_MPM_DIR
- printf(" -D APACHE_MPM_DIR=\"" APACHE_MPM_DIR "\"\n");
-#endif
-
-#ifdef HAVE_SHMGET
- printf(" -D HAVE_SHMGET\n");
-#endif
-
-#if APR_FILE_BASED_SHM
- printf(" -D APR_FILE_BASED_SHM\n");
-#endif
-
-#if APR_HAS_SENDFILE
- printf(" -D APR_HAS_SENDFILE\n");
-#endif
-
-#if APR_HAS_MMAP
- printf(" -D APR_HAS_MMAP\n");
-#endif
-
-#ifdef NO_WRITEV
- printf(" -D NO_WRITEV\n");
-#endif
-
-#ifdef NO_LINGCLOSE
- printf(" -D NO_LINGCLOSE\n");
-#endif
-
-#if APR_HAVE_IPV6
- printf(" -D APR_HAVE_IPV6 (IPv4-mapped addresses ");
-#ifdef AP_ENABLE_V4_MAPPED
- printf("enabled)\n");
-#else
- printf("disabled)\n");
-#endif
-#endif
-
-#if APR_USE_FLOCK_SERIALIZE
- printf(" -D APR_USE_FLOCK_SERIALIZE\n");
-#endif
-
-#if APR_USE_SYSVSEM_SERIALIZE
- printf(" -D APR_USE_SYSVSEM_SERIALIZE\n");
-#endif
-
-#if APR_USE_POSIXSEM_SERIALIZE
- printf(" -D APR_USE_POSIXSEM_SERIALIZE\n");
-#endif
-
-#if APR_USE_FCNTL_SERIALIZE
- printf(" -D APR_USE_FCNTL_SERIALIZE\n");
-#endif
-
-#if APR_USE_PROC_PTHREAD_SERIALIZE
- printf(" -D APR_USE_PROC_PTHREAD_SERIALIZE\n");
-#endif
-
-#if APR_USE_PTHREAD_SERIALIZE
- printf(" -D APR_USE_PTHREAD_SERIALIZE\n");
-#endif
-
-#if APR_PROCESS_LOCK_IS_GLOBAL
- printf(" -D APR_PROCESS_LOCK_IS_GLOBAL\n");
-#endif
-
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
- printf(" -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT\n");
-#endif
-
-#if APR_HAS_OTHER_CHILD
- printf(" -D APR_HAS_OTHER_CHILD\n");
-#endif
-
-#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
- printf(" -D AP_HAVE_RELIABLE_PIPED_LOGS\n");
-#endif
-
-#ifdef BUFFERED_LOGS
- printf(" -D BUFFERED_LOGS\n");
-#ifdef PIPE_BUF
- printf(" -D PIPE_BUF=%ld\n",(long)PIPE_BUF);
-#endif
-#endif
-
-#if APR_CHARSET_EBCDIC
- printf(" -D APR_CHARSET_EBCDIC\n");
-#endif
-
-#ifdef NEED_HASHBANG_EMUL
- printf(" -D NEED_HASHBANG_EMUL\n");
-#endif
-
-#ifdef SHARED_CORE
- printf(" -D SHARED_CORE\n");
-#endif
-
-/* This list displays the compiled in default paths: */
-#ifdef HTTPD_ROOT
- printf(" -D HTTPD_ROOT=\"" HTTPD_ROOT "\"\n");
-#endif
-
-#ifdef SUEXEC_BIN
- printf(" -D SUEXEC_BIN=\"" SUEXEC_BIN "\"\n");
-#endif
-
-#if defined(SHARED_CORE) && defined(SHARED_CORE_DIR)
- printf(" -D SHARED_CORE_DIR=\"" SHARED_CORE_DIR "\"\n");
-#endif
-
-#ifdef DEFAULT_PIDLOG
- printf(" -D DEFAULT_PIDLOG=\"" DEFAULT_PIDLOG "\"\n");
-#endif
-
-#ifdef DEFAULT_SCOREBOARD
- printf(" -D DEFAULT_SCOREBOARD=\"" DEFAULT_SCOREBOARD "\"\n");
-#endif
-
-#ifdef DEFAULT_LOCKFILE
- printf(" -D DEFAULT_LOCKFILE=\"" DEFAULT_LOCKFILE "\"\n");
-#endif
-
-#ifdef DEFAULT_ERRORLOG
- printf(" -D DEFAULT_ERRORLOG=\"" DEFAULT_ERRORLOG "\"\n");
-#endif
-
-#ifdef AP_TYPES_CONFIG_FILE
- printf(" -D AP_TYPES_CONFIG_FILE=\"" AP_TYPES_CONFIG_FILE "\"\n");
-#endif
-
-#ifdef SERVER_CONFIG_FILE
- printf(" -D SERVER_CONFIG_FILE=\"" SERVER_CONFIG_FILE "\"\n");
-#endif
-}
-
-static void destroy_and_exit_process(process_rec *process,
- int process_exit_value)
-{
- apr_pool_destroy(process->pool); /* and destroy all descendent pools */
- apr_terminate();
- exit(process_exit_value);
-}
-
-static process_rec *create_process(int argc, const char * const *argv)
-{
- process_rec *process;
- apr_pool_t *cntx;
- apr_status_t stat;
-
- stat = apr_pool_create(&cntx, NULL);
- if (stat != APR_SUCCESS) {
- /* XXX From the time that we took away the NULL pool->malloc mapping
- * we have been unable to log here without segfaulting.
- */
- ap_log_error(APLOG_MARK, APLOG_ERR, stat, NULL,
- "apr_pool_create() failed to create "
- "initial context");
- apr_terminate();
- exit(1);
- }
-
- apr_pool_tag(cntx, "process");
- ap_open_stderr_log(cntx);
-
- process = apr_palloc(cntx, sizeof(process_rec));
- process->pool = cntx;
-
- apr_pool_create(&process->pconf, process->pool);
- apr_pool_tag(process->pconf, "pconf");
- process->argc = argc;
- process->argv = argv;
- process->short_name = apr_filepath_name_get(argv[0]);
- return process;
-}
-
-static void usage(process_rec *process)
-{
- const char *bin = process->argv[0];
- char pad[MAX_STRING_LEN];
- unsigned i;
-
- for (i = 0; i < strlen(bin); i++) {
- pad[i] = ' ';
- }
-
- pad[i] = '\0';
-
-#ifdef SHARED_CORE
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL ,
- "Usage: %s [-R directory] [-D name] [-d directory] [-f file]",
- bin);
-#else
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Usage: %s [-D name] [-d directory] [-f file]", bin);
-#endif
-
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " %s [-C \"directive\"] [-c \"directive\"]", pad);
-
-#ifdef WIN32
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " %s [-w] [-k start|restart|stop|shutdown]", pad);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " %s [-k install|config|uninstall] [-n service_name]",
- pad);
-#endif
-#ifdef AP_MPM_WANT_SIGNAL_SERVER
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " %s [-k start|restart|graceful|stop]",
- pad);
-#endif
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " %s [-v] [-V] [-h] [-l] [-L] [-t] [-S]", pad);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Options:");
-
-#ifdef SHARED_CORE
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -R directory : specify an alternate location for "
- "shared object files");
-#endif
-
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -D name : define a name for use in "
- "<IfDefine name> directives");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -d directory : specify an alternate initial "
- "ServerRoot");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -f file : specify an alternate ServerConfigFile");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -C \"directive\" : process directive before reading "
- "config files");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -c \"directive\" : process directive after reading "
- "config files");
-
-#ifdef NETWARE
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -n name : set screen name");
-#endif
-#ifdef WIN32
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -n name : set service name and use its "
- "ServerConfigFile");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -k start : tell Apache to start");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -k restart : tell running Apache to do a graceful "
- "restart");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -k stop|shutdown : tell running Apache to shutdown");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -k install : install an Apache service");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -k config : change startup Options of an Apache "
- "service");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -k uninstall : uninstall an Apache service");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -w : hold open the console window on error");
-#endif
-
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -e level : show startup errors of level "
- "(see LogLevel)");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -E file : log startup errors to file");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -v : show version number");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -V : show compile settings");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -h : list available command line options "
- "(this page)");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -l : list compiled in modules");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -L : list available configuration "
- "directives");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -t -D DUMP_VHOSTS : show parsed settings (currently only "
- "vhost settings)");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -S : a synonym for -t -D DUMP_VHOSTS");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -t -D DUMP_MODULES : show all loaded modules ");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -M : a synonym for -t -D DUMP_MODULES");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " -t : run syntax check for config files");
-
- destroy_and_exit_process(process, 1);
-}
-
-int main(int argc, const char * const argv[])
-{
- char c;
- int configtestonly = 0;
- const char *confname = SERVER_CONFIG_FILE;
- const char *def_server_root = HTTPD_ROOT;
- const char *temp_error_log = NULL;
- const char *error;
- process_rec *process;
- server_rec *server_conf;
- apr_pool_t *pglobal;
- apr_pool_t *pconf;
- apr_pool_t *plog; /* Pool of log streams, reset _after_ each read of conf */
- apr_pool_t *ptemp; /* Pool for temporary config stuff, reset often */
- apr_pool_t *pcommands; /* Pool for -D, -C and -c switches */
- apr_getopt_t *opt;
- apr_status_t rv;
- module **mod;
- const char *optarg;
- APR_OPTIONAL_FN_TYPE(ap_signal_server) *signal_server;
-
- AP_MONCONTROL(0); /* turn off profiling of startup */
-
- apr_app_initialize(&argc, &argv, NULL);
-
- process = create_process(argc, argv);
- pglobal = process->pool;
- pconf = process->pconf;
- ap_server_argv0 = process->short_name;
-
-#if APR_CHARSET_EBCDIC
- if (ap_init_ebcdic(pglobal) != APR_SUCCESS) {
- destroy_and_exit_process(process, 1);
- }
-#endif
-
- apr_pool_create(&pcommands, pglobal);
- apr_pool_tag(pcommands, "pcommands");
- ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *));
- ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *));
- ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *));
-
- error = ap_setup_prelinked_modules(process);
- if (error) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_EMERG, 0, NULL, "%s: %s",
- ap_server_argv0, error);
- destroy_and_exit_process(process, 1);
- }
-
- ap_run_rewrite_args(process);
-
- /* Maintain AP_SERVER_BASEARGS list in http_main.h to allow the MPM
- * to safely pass on our args from its rewrite_args() handler.
- */
- apr_getopt_init(&opt, pcommands, process->argc, process->argv);
-
- while ((rv = apr_getopt(opt, AP_SERVER_BASEARGS, &c, &optarg))
- == APR_SUCCESS) {
- char **new;
-
- switch (c) {
- case 'c':
- new = (char **)apr_array_push(ap_server_post_read_config);
- *new = apr_pstrdup(pcommands, optarg);
- break;
-
- case 'C':
- new = (char **)apr_array_push(ap_server_pre_read_config);
- *new = apr_pstrdup(pcommands, optarg);
- break;
-
- case 'd':
- def_server_root = optarg;
- break;
-
- case 'D':
- new = (char **)apr_array_push(ap_server_config_defines);
- *new = apr_pstrdup(pcommands, optarg);
- /* Setting -D DUMP_VHOSTS is equivalent to setting -S */
- if (strcmp(optarg, "DUMP_VHOSTS") == 0)
- configtestonly = 1;
- /* Setting -D DUMP_MODULES is equivalent to setting -M */
- if (strcmp(optarg, "DUMP_MODULES") == 0)
- configtestonly = 1;
- break;
-
- case 'e':
- if (strcasecmp(optarg, "emerg") == 0) {
- ap_default_loglevel = APLOG_EMERG;
- }
- else if (strcasecmp(optarg, "alert") == 0) {
- ap_default_loglevel = APLOG_ALERT;
- }
- else if (strcasecmp(optarg, "crit") == 0) {
- ap_default_loglevel = APLOG_CRIT;
- }
- else if (strncasecmp(optarg, "err", 3) == 0) {
- ap_default_loglevel = APLOG_ERR;
- }
- else if (strncasecmp(optarg, "warn", 4) == 0) {
- ap_default_loglevel = APLOG_WARNING;
- }
- else if (strcasecmp(optarg, "notice") == 0) {
- ap_default_loglevel = APLOG_NOTICE;
- }
- else if (strcasecmp(optarg, "info") == 0) {
- ap_default_loglevel = APLOG_INFO;
- }
- else if (strcasecmp(optarg, "debug") == 0) {
- ap_default_loglevel = APLOG_DEBUG;
- }
- else {
- usage(process);
- }
- break;
-
- case 'E':
- temp_error_log = apr_pstrdup(process->pool, optarg);
- break;
-
- case 'X':
- new = (char **)apr_array_push(ap_server_config_defines);
- *new = "DEBUG";
- break;
-
- case 'f':
- confname = optarg;
- break;
-
- case 'v':
- printf("Server version: %s\n", ap_get_server_version());
- printf("Server built: %s\n", ap_get_server_built());
- destroy_and_exit_process(process, 0);
-
- case 'V':
- show_compile_settings();
- destroy_and_exit_process(process, 0);
-
- case 'l':
- ap_show_modules();
- destroy_and_exit_process(process, 0);
-
- case 'L':
- ap_show_directives();
- destroy_and_exit_process(process, 0);
-
- case 't':
- configtestonly = 1;
- break;
-
- case 'S':
- configtestonly = 1;
- new = (char **)apr_array_push(ap_server_config_defines);
- *new = "DUMP_VHOSTS";
- break;
-
- case 'M':
- configtestonly = 1;
- new = (char **)apr_array_push(ap_server_config_defines);
- *new = "DUMP_MODULES";
- break;
-
- case 'h':
- case '?':
- usage(process);
- }
- }
-
- /* bad cmdline option? then we die */
- if (rv != APR_EOF || opt->ind < opt->argc) {
- usage(process);
- }
-
- apr_pool_create(&plog, pglobal);
- apr_pool_tag(plog, "plog");
- apr_pool_create(&ptemp, pconf);
- apr_pool_tag(ptemp, "ptemp");
-
- /* Note that we preflight the config file once
- * before reading it _again_ in the main loop.
- * This allows things, log files configuration
- * for example, to settle down.
- */
-
- ap_server_root = def_server_root;
- if (temp_error_log) {
- ap_replace_stderr_log(process->pool, temp_error_log);
- }
- server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);
- if (!server_conf) {
- destroy_and_exit_process(process, 1);
- }
-
- if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0,
- NULL, "Pre-configuration failed");
- destroy_and_exit_process(process, 1);
- }
-
- rv = ap_process_config_tree(server_conf, ap_conftree,
- process->pconf, ptemp);
- if (rv == OK) {
- APR_OPTIONAL_FN_TYPE(ap_dump_loaded_modules) *dump_modules =
- APR_RETRIEVE_OPTIONAL_FN(ap_dump_loaded_modules);
-
- ap_fixup_virtual_hosts(pconf, server_conf);
- ap_fini_vhost_config(pconf, server_conf);
- apr_hook_sort_all();
-
- if (dump_modules && ap_exists_config_define("DUMP_MODULES")) {
- dump_modules(pconf, server_conf);
- }
-
- if (configtestonly) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, "Syntax OK");
- destroy_and_exit_process(process, 0);
- }
- }
-
- signal_server = APR_RETRIEVE_OPTIONAL_FN(ap_signal_server);
- if (signal_server) {
- int exit_status;
-
- if (signal_server(&exit_status, pconf) != 0) {
- destroy_and_exit_process(process, exit_status);
- }
- }
-
- /* If our config failed, deal with that here. */
- if (rv != OK) {
- destroy_and_exit_process(process, 1);
- }
-
- apr_pool_clear(plog);
-
- if ( ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR,
- 0, NULL, "Unable to open logs");
- destroy_and_exit_process(process, 1);
- }
-
- if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0,
- NULL, "Configuration Failed");
- destroy_and_exit_process(process, 1);
- }
-
- apr_pool_destroy(ptemp);
-
- for (;;) {
- apr_hook_deregister_all();
- apr_pool_clear(pconf);
-
- for (mod = ap_prelinked_modules; *mod != NULL; mod++) {
- ap_register_hooks(*mod, pconf);
- }
-
- /* This is a hack until we finish the code so that it only reads
- * the config file once and just operates on the tree already in
- * memory. rbb
- */
- ap_conftree = NULL;
- apr_pool_create(&ptemp, pconf);
- apr_pool_tag(ptemp, "ptemp");
- ap_server_root = def_server_root;
- server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);
- if (!server_conf) {
- destroy_and_exit_process(process, 1);
- }
-
- if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR,
- 0, NULL, "Pre-configuration failed");
- destroy_and_exit_process(process, 1);
- }
-
- if (ap_process_config_tree(server_conf, ap_conftree, process->pconf,
- ptemp) != OK) {
- destroy_and_exit_process(process, 1);
- }
- ap_fixup_virtual_hosts(pconf, server_conf);
- ap_fini_vhost_config(pconf, server_conf);
- apr_hook_sort_all();
- apr_pool_clear(plog);
- if (ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR,
- 0, NULL, "Unable to open logs");
- destroy_and_exit_process(process, 1);
- }
-
- if (ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR,
- 0, NULL, "Configuration Failed");
- destroy_and_exit_process(process, 1);
- }
-
- apr_pool_destroy(ptemp);
- apr_pool_lock(pconf, 1);
-
- ap_run_optional_fn_retrieve();
-
- if (ap_mpm_run(pconf, plog, server_conf))
- break;
-
- apr_pool_lock(pconf, 0);
- }
-
- apr_pool_lock(pconf, 0);
- destroy_and_exit_process(process, 0);
-
- return 0; /* Termination 'ok' */
-}
-
-#ifndef SHARED_CORE_BOOTSTRAP
-/*
- * Force apr_password_validate() into the image so that modules like
- * mod_auth can use it even if they're dynamically loaded.
- */
-void suck_in_apr_password_validate(void);
-void suck_in_apr_password_validate(void)
-{
- apr_password_validate("a", "b");
-}
-#endif
-
-#ifdef AP_USING_AUTOCONF
-/* This ugly little hack pulls any function referenced in exports.c into
- * the web server. exports.c is generated during the build, and it
- * has all of the APR functions specified by the apr/apr.exports and
- * apr-util/aprutil.exports files.
- */
-const void *suck_in_APR(void);
-const void *suck_in_APR(void)
-{
- extern const void *ap_ugly_hack;
-
- return ap_ugly_hack;
-}
-#endif
diff --git a/server/mpm/.cvsignore b/server/mpm/.cvsignore
deleted file mode 100644
index bd5fe06963..0000000000
--- a/server/mpm/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/server/mpm/MPM.NAMING b/server/mpm/MPM.NAMING
deleted file mode 100644
index 83c0694d11..0000000000
--- a/server/mpm/MPM.NAMING
+++ /dev/null
@@ -1,15 +0,0 @@
-
-The following MPMs currently exist:
-
- prefork ....... Multi Process Model with Preforking (Apache 1.3)
- perchild ...... Multi Process Model with Threading.
- Constant number of processes, variable number of threads
- each child process can have a different uid/gid.
- mpmt_os2 ...... Multi Process Model with Threading on OS/2
- Constant number of processes, variable number of threads.
- One acceptor thread per process, multiple workers threads.
- winnt ......... Single Process Model with Threading on Windows NT
- worker ........ Multi Process model with threads. One acceptor thread,
- multiple worker threads.
- netware ....... Multi-threaded MPM for Netware
- beos .......... Single Process Model with Threading on BeOS
diff --git a/server/mpm/Makefile.in b/server/mpm/Makefile.in
deleted file mode 100644
index 2decbde60f..0000000000
--- a/server/mpm/Makefile.in
+++ /dev/null
@@ -1,4 +0,0 @@
-
-SUBDIRS = $(MPM_SUBDIR_NAME)
-
-include $(top_builddir)/build/rules.mk
diff --git a/server/mpm/beos/.cvsignore b/server/mpm/beos/.cvsignore
deleted file mode 100644
index 84df257214..0000000000
--- a/server/mpm/beos/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/beos/Makefile.in b/server/mpm/beos/Makefile.in
deleted file mode 100644
index 3f88b0415f..0000000000
--- a/server/mpm/beos/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libbeos.la
-LTLIBRARY_SOURCES = beos.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/beos/beos.c b/server/mpm/beos/beos.c
deleted file mode 100644
index 17d45c8e04..0000000000
--- a/server/mpm/beos/beos.c
+++ /dev/null
@@ -1,1206 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* The BeOS MPM!
- *
- * This is a single process, with multiple worker threads.
- *
- * Under testing I found that given the inability of BeOS to handle threads
- * and forks it didn't make sense to try and have a set of "children" threads
- * that spawned the "worker" threads, so just missed out the middle mand and
- * somehow arrived here.
- *
- * For 2.1 this has been rewritten to have simpler logic, though there is still
- * some simplification that can be done. It's still a work in progress!
- *
- * TODO Items
- *
- * - on exit most worker threads segfault trying to access a kernel page.
- */
-
-#define CORE_PRIVATE
-
-#include <kernel/OS.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <signal.h>
-
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "beosd.h"
-#include "ap_listen.h"
-#include "scoreboard.h"
-#include "mpm_common.h"
-#include "mpm.h"
-#include "mpm_default.h"
-#include "apr_thread_mutex.h"
-#include "apr_poll.h"
-
-extern int _kset_fd_limit_(int num);
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons:
- * 1) in case something goes seriously wrong, we want to stop the server starting
- * threads ad infinitum and crashing the server (remember that BeOS has a 192
- * thread per team limit).
- * 2) it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-
-/* we only ever have 1 main process running... */
-#define HARD_SERVER_LIMIT 1
-
-/* Limit on the threads per process. Clients will be locked out if more than
- * this * HARD_SERVER_LIMIT are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifdef NO_THREADS
-#define HARD_THREAD_LIMIT 1
-#endif
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 50
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-static int ap_threads_to_start=0;
-static int ap_max_requests_per_thread = 0;
-static int min_spare_threads=0;
-static int max_spare_threads=0;
-static int ap_thread_limit=0;
-static int num_listening_sockets = 0;
-static int mpm_state = AP_MPMQ_STARTING;
-apr_thread_mutex_t *accept_mutex = NULL;
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-
-static int server_pid;
-
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts. We use
- * this value to optimize routines that have to scan the entire scoreboard.
- */
-int ap_max_child_assigned = -1;
-int ap_max_threads_limit = -1;
-
-static apr_socket_t *udp_sock;
-static apr_sockaddr_t *udp_sa;
-
-server_rec *ap_server_conf;
-
-/* one_process */
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static void check_restart(void *data);
-
-/* When a worker thread gets to the end of it's life it dies with an
- * exit value of the code supplied to this function. The thread has
- * already had check_restart() registered to be called when dying, so
- * we don't concern ourselves with restarting at all here. We do however
- * mark the scoreboard slot as belonging to a dead server and zero out
- * it's thread_id.
- *
- * TODO - use the status we set to determine if we need to restart the
- * thread.
- */
-static void clean_child_exit(int code, int slot)
-{
- (void) ap_update_child_status_from_indexes(0, slot, SERVER_DEAD,
- (request_rec*)NULL);
- ap_scoreboard_image->servers[0][slot].tid = 0;
- exit_thread(code);
-}
-
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile child_fatal;
-ap_generation_t volatile ap_my_generation = 0;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals.
- * Previously this was initiated in sig_term() and restart() signal handlers,
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate. Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
- /* If the user tries to shut us down twice in quick succession then we
- * may well get triggered while we are working through previous attempt
- * to shutdown. We won't worry about even reporting it as it seems a little
- * pointless.
- */
- if (shutdown_pending == 1)
- return;
-
- shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = graceful;
-}
-
-/* sig_coredump attempts to handle all the potential signals we
- * may get that should result in a core dump. This is called from
- * the signal handler routine, so when we enter we are essentially blocked
- * on the signal. Once we exit we will allow the signal to be processed by
- * system, which may or may not produce a .core file. All this function does
- * is try and respect the users wishes about where that file should be
- * located (chdir) and then signal the parent with the signal.
- *
- * If we called abort() the parent would only see SIGABRT which doesn't provide
- * as much information.
- */
-static void sig_coredump(int sig)
-{
- chdir(ap_coredump_dir);
- signal(sig, SIG_DFL);
- kill(server_pid, sig);
-}
-
-static void sig_term(int sig)
-{
- ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
- ap_start_restart(sig == AP_SIG_GRACEFUL);
-}
-
-/* Handle queries about our inner workings... */
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_max_child_assigned;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_NOT_SUPPORTED;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = HARD_SERVER_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = HARD_THREAD_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = HARD_THREAD_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = max_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = min_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_thread;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = HARD_SERVER_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-/* This accepts a connection and allows us to handle the error codes better than
- * the previous code, while also making it more obvious.
- */
-static apr_status_t beos_accept(void **accepted, ap_listen_rec *lr, apr_pool_t *ptrans)
-{
- apr_socket_t *csd;
- apr_status_t status;
- int sockdes;
-
- *accepted = NULL;
- status = apr_socket_accept(&csd, lr->sd, ptrans);
- if (status == APR_SUCCESS) {
- *accepted = csd;
- apr_os_sock_get(&sockdes, csd);
- return status;
- }
-
- if (APR_STATUS_IS_EINTR(status)) {
- return status;
- }
- /* This switch statement provides us with better error details. */
- switch (status) {
-#ifdef ECONNABORTED
- case ECONNABORTED:
-#endif
-#ifdef ETIMEDOUT
- case ETIMEDOUT:
-#endif
-#ifdef EHOSTUNREACH
- case EHOSTUNREACH:
-#endif
-#ifdef ENETUNREACH
- case ENETUNREACH:
-#endif
- break;
-#ifdef ENETDOWN
- case ENETDOWN:
- /*
- * When the network layer has been shut down, there
- * is not much use in simply exiting: the parent
- * would simply re-create us (and we'd fail again).
- * Use the CHILDFATAL code to tear the server down.
- * @@@ Martin's idea for possible improvement:
- * A different approach would be to define
- * a new APEXIT_NETDOWN exit code, the reception
- * of which would make the parent shutdown all
- * children, then idle-loop until it detected that
- * the network is up again, and restart the children.
- * Ben Hyde noted that temporary ENETDOWN situations
- * occur in mobile IP.
- */
- ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
- "apr_socket_accept: giving up.");
- return APR_EGENERAL;
-#endif /*ENETDOWN*/
-
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, status, ap_server_conf,
- "apr_socket_accept: (client socket)");
- return APR_EGENERAL;
- }
- return status;
-}
-
-static void tell_workers_to_exit(void)
-{
- apr_size_t len;
- int i = 0;
- for (i = 0 ; i < ap_max_child_assigned; i++){
- len = 4;
- if (apr_socket_sendto(udp_sock, udp_sa, 0, "die!", &len) != APR_SUCCESS)
- break;
- }
-}
-
-static void set_signals(void)
-{
- struct sigaction sa;
-
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- /* The first batch get handled by sig_coredump */
- if (!one_process) {
- sa.sa_handler = sig_coredump;
-
- if (sigaction(SIGSEGV, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGSEGV)");
- if (sigaction(SIGBUS, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGBUS)");
- if (sigaction(SIGABRT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGABRT)");
- if (sigaction(SIGILL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGILL)");
- sa.sa_flags = 0;
- }
-
- /* These next two are handled by sig_term */
- sa.sa_handler = sig_term;
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGINT)");
-
- /* We ignore SIGPIPE */
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGPIPE)");
-
- /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
- * processing one */
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
- sa.sa_handler = restart;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
- if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
-{
- return is_graceful;
-}
-
-/* This is the thread that actually does all the work. */
-static int32 worker_thread(void *dummy)
-{
- int worker_slot = (int)dummy;
- apr_allocator_t *allocator;
- apr_bucket_alloc_t *bucket_alloc;
- apr_status_t rv = APR_EINIT;
- int last_poll_idx = 0;
- sigset_t sig_mask;
- int requests_this_child = 0;
- apr_pollset_t *pollset = NULL;
- ap_listen_rec *lr = NULL;
- ap_sb_handle_t *sbh = NULL;
- int i;
- /* each worker thread is in control of its own destiny...*/
- int this_worker_should_exit = 0;
- /* We have 2 pools that we create/use throughout the lifetime of this
- * worker. The first and longest lived is the pworker pool. From
- * this we create the ptrans pool, the lifetime of which is the same
- * as each connection and is reset prior to each attempt to
- * process a connection.
- */
- apr_pool_t *ptrans = NULL;
- apr_pool_t *pworker = NULL;
-
- mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as this
- * child initializes
- */
-
- on_exit_thread(check_restart, (void*)worker_slot);
-
- /* block the signals for this thread only if we're not running as a
- * single process.
- */
- if (!one_process) {
- sigfillset(&sig_mask);
- sigprocmask(SIG_BLOCK, &sig_mask, NULL);
- }
-
- /* Each worker thread is fully in control of it's destinay and so
- * to allow each thread to handle the lifetime of it's own resources
- * we create and use a subcontext for every thread.
- * The subcontext is a child of the pconf pool.
- */
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- apr_pool_create_ex(&pworker, pconf, NULL, allocator);
- apr_allocator_owner_set(allocator, pworker);
-
- apr_pool_create(&ptrans, pworker);
- apr_pool_tag(ptrans, "transaction");
-
- ap_create_sb_handle(&sbh, pworker, 0, worker_slot);
- (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
-
- /* We add an extra socket here as we add the udp_sock we use for signalling
- * death. This gets added after the others.
- */
- apr_pollset_create(&pollset, num_listening_sockets + 1, pworker, 0);
-
- for (lr = ap_listeners, i = num_listening_sockets; i--; lr = lr->next) {
- apr_pollfd_t pfd = {0};
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = lr->sd;
- pfd.reqevents = APR_POLLIN;
- pfd.client_data = lr;
-
- apr_pollset_add(pollset, &pfd);
- }
- {
- apr_pollfd_t pfd = {0};
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = udp_sock;
- pfd.reqevents = APR_POLLIN;
-
- apr_pollset_add(pollset, &pfd);
- }
-
- bucket_alloc = apr_bucket_alloc_create(pworker);
-
- mpm_state = AP_MPMQ_RUNNING;
-
- while (!this_worker_should_exit) {
- conn_rec *current_conn;
- void *csd;
-
- /* (Re)initialize this child to a pre-connection state. */
- apr_pool_clear(ptrans);
-
- if ((ap_max_requests_per_thread > 0
- && requests_this_child++ >= ap_max_requests_per_thread))
- clean_child_exit(0, worker_slot);
-
- (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
-
- apr_thread_mutex_lock(accept_mutex);
-
- /* We always (presently) have at least 2 sockets we listen on, so
- * we don't have the ability for a fast path for a single socket
- * as some MPM's allow :(
- */
- for (;;) {
- apr_int32_t numdesc = 0;
- const apr_pollfd_t *pdesc = NULL;
-
- rv = apr_pollset_poll(pollset, -1, &numdesc, &pdesc);
- if (rv != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(rv)) {
- if (one_process && shutdown_pending)
- return;
- continue;
- }
- ap_log_error(APLOG_MARK, APLOG_ERR, rv,
- ap_server_conf, "apr_pollset_poll: (listen)");
- clean_child_exit(1, worker_slot);
- }
- /* We can always use pdesc[0], but sockets at position N
- * could end up completely starved of attention in a very
- * busy server. Therefore, we round-robin across the
- * returned set of descriptors. While it is possible that
- * the returned set of descriptors might flip around and
- * continue to starve some sockets, we happen to know the
- * internal pollset implementation retains ordering
- * stability of the sockets. Thus, the round-robin should
- * ensure that a socket will eventually be serviced.
- */
- if (last_poll_idx >= numdesc)
- last_poll_idx = 0;
-
- /* Grab a listener record from the client_data of the poll
- * descriptor, and advance our saved index to round-robin
- * the next fetch.
- *
- * ### hmm... this descriptor might have POLLERR rather
- * ### than POLLIN
- */
-
- lr = pdesc[last_poll_idx++].client_data;
-
- /* The only socket we add without client_data is the first, the UDP socket
- * we listen on for restart signals. If we've therefore gotten a hit on that
- * listener lr will be NULL here and we know we've been told to die.
- * Before we jump to the end of the while loop with this_worker_should_exit
- * set to 1 (causing us to exit normally we hope) we release the accept_mutex
- * as we want every thread to go through this same routine :)
- * Bit of a hack, but compared to what I had before...
- */
- if (lr == NULL) {
- this_worker_should_exit = 1;
- apr_thread_mutex_unlock(accept_mutex);
- goto got_a_black_spot;
- }
- goto got_fd;
- }
-got_fd:
- /* Run beos_accept to accept the connection and set things up to
- * allow us to process it. We always release the accept_lock here,
- * even if we failt o accept as otherwise we'll starve other workers
- * which would be bad.
- */
- rv = beos_accept(&csd, lr, ptrans);
- apr_thread_mutex_unlock(accept_mutex);
-
- if (rv == APR_EGENERAL) {
- /* resource shortage or should-not-occur occured */
- clean_child_exit(1, worker_slot);
- } else if (rv != APR_SUCCESS)
- continue;
-
- current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, worker_slot, sbh, bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, csd);
- ap_lingering_close(current_conn);
- }
-
- if (ap_my_generation !=
- ap_scoreboard_image->global->running_generation) { /* restart? */
- /* yeah, this could be non-graceful restart, in which case the
- * parent will kill us soon enough, but why bother checking?
- */
- this_worker_should_exit = 1;
- }
-got_a_black_spot:
- }
-
- apr_pool_destroy(ptrans);
- apr_pool_destroy(pworker);
-
- clean_child_exit(0, worker_slot);
-}
-
-static int make_worker(int slot)
-{
- thread_id tid;
-
- if (slot + 1 > ap_max_child_assigned)
- ap_max_child_assigned = slot + 1;
-
- (void) ap_update_child_status_from_indexes(0, slot, SERVER_STARTING, (request_rec*)NULL);
-
- if (one_process) {
- set_signals();
- ap_scoreboard_image->parent[0].pid = getpid();
- ap_scoreboard_image->servers[0][slot].tid = find_thread(NULL);
- return 0;
- }
-
- tid = spawn_thread(worker_thread, "apache_worker", B_NORMAL_PRIORITY,
- (void *)slot);
- if (tid < B_NO_ERROR) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, NULL,
- "spawn_thread: Unable to start a new thread");
- /* In case system resources are maxed out, we don't want
- * Apache running away with the CPU trying to fork over and
- * over and over again.
- */
- (void) ap_update_child_status_from_indexes(0, slot, SERVER_DEAD,
- (request_rec*)NULL);
-
- sleep(10);
- return -1;
- }
- resume_thread(tid);
-
- ap_scoreboard_image->servers[0][slot].tid = tid;
- return 0;
-}
-
-/* When a worker thread exits, this function is called. If we are not in
- * a shutdown situation then we restart the worker in the slot that was
- * just vacated.
- */
-static void check_restart(void *data)
-{
- if (!restart_pending && !shutdown_pending) {
- int slot = (int)data;
- make_worker(slot);
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, NULL,
- "spawning a new worker thread in slot %d", slot);
- }
-}
-
-/* Start number_to_start children. This is used to start both the
- * initial 'pool' of workers but also to replace existing workers who
- * have reached the end of their time. It walks through the scoreboard to find
- * an empty slot and starts the worker thread in that slot.
- */
-static void startup_threads(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < ap_thread_limit; ++i) {
- if (ap_scoreboard_image->servers[0][i].tid)
- continue;
-
- if (make_worker(i) < 0)
- break;
-
- --number_to_start;
- }
-}
-
-
-/*
- * spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(void)
-{
- int i;
- int free_length;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead = -1;
-
- /* initialize the free_list */
- free_length = 0;
-
- for (i = 0; i < ap_thread_limit; ++i) {
- if (ap_scoreboard_image->servers[0][i].tid == 0) {
- if (free_length < spawn_rate) {
- free_slots[free_length] = i;
- ++free_length;
- }
- }
- else {
- last_non_dead = i;
- }
-
- if (i >= ap_max_child_assigned && free_length >= spawn_rate) {
- break;
- }
- }
- ap_max_child_assigned = last_non_dead + 1;
-
- if (free_length > 0) {
- for (i = 0; i < free_length; ++i) {
- make_worker(free_slots[i]);
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- } else if (spawn_rate < MAX_SPAWN_RATE) {
- spawn_rate *= 2;
- }
- } else {
- spawn_rate = 1;
- }
-}
-
-static void server_main_loop(int remaining_threads_to_start)
-{
- int child_slot;
- apr_exit_why_e exitwhy;
- int status;
- apr_proc_t pid;
- int i;
-
- while (!restart_pending && !shutdown_pending) {
-
- ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
- if (pid.pid >= 0) {
- if (ap_process_child_status(&pid, exitwhy, status) == APEXIT_CHILDFATAL) {
- shutdown_pending = 1;
- child_fatal = 1;
- return;
- }
- /* non-fatal death... note that it's gone in the scoreboard. */
- child_slot = -1;
- for (i = 0; i < ap_max_child_assigned; ++i) {
- if (ap_scoreboard_image->servers[0][i].tid == pid.pid) {
- child_slot = i;
- break;
- }
- }
- if (child_slot >= 0) {
- ap_scoreboard_image->servers[0][child_slot].tid = 0;
- (void) ap_update_child_status_from_indexes(0, child_slot,
- SERVER_DEAD,
- (request_rec*)NULL);
-
- if (remaining_threads_to_start
- && child_slot < ap_thread_limit) {
- /* we're still doing a 1-for-1 replacement of dead
- * children with new children
- */
- make_worker(child_slot);
- --remaining_threads_to_start;
- }
-/* TODO
-#if APR_HAS_OTHER_CHILD
- }
- else if (apr_proc_other_child_refresh(&pid, status) == 0) {
-#endif
-*/
- }
- else if (is_graceful) {
- /* Great, we've probably just lost a slot in the
- * scoreboard. Somehow we don't know about this
- * child.
- */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf,
- "long lost child came home! (pid %ld)", pid.pid);
- }
-
- /* Don't perform idle maintenance when a child dies,
- * only do it when there's a timeout. Remember only a
- * finite number of children can die, and it's pretty
- * pathological for a lot to die suddenly.
- */
- continue;
- }
- else if (remaining_threads_to_start) {
- /* we hit a 1 second timeout in which none of the previous
- * generation of children needed to be reaped... so assume
- * they're all done, and pick up the slack if any is left.
- */
- startup_threads(remaining_threads_to_start);
- remaining_threads_to_start = 0;
- /* In any event we really shouldn't do the code below because
- * few of the servers we just started are in the IDLE state
- * yet, so we'd mistakenly create an extra server.
- */
- continue;
- }
- perform_idle_server_maintenance();
- }
-}
-
-/* This is called to not only setup and run for the initial time, but also
- * when we've asked for a restart. This means it must be able to handle both
- * situations. It also means that when we exit here we should have tidied
- * up after ourselves fully.
- */
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- int remaining_threads_to_start, i,j;
- apr_status_t rv;
- ap_listen_rec *lr;
- pconf = _pconf;
- ap_server_conf = s;
-
- /* Increase the available pool of fd's. This code from
- * Joe Kloss <joek@be.com>
- */
- if( FD_SETSIZE > 128 && (i = _kset_fd_limit_( 128 )) < 0 ){
- ap_log_error(APLOG_MARK, APLOG_ERR, i, s,
- "could not set FD_SETSIZE (_kset_fd_limit_ failed)");
- }
-
- /* BeOS R5 doesn't support pipes on select() calls, so we use a
- * UDP socket as these are supported in both R5 and BONE. If we only cared
- * about BONE we'd use a pipe, but there it is.
- * As we have UDP support in APR, now use the APR functions and check all the
- * return values...
- */
- if (apr_sockaddr_info_get(&udp_sa, "127.0.0.1", APR_UNSPEC, 7772, 0, _pconf)
- != APR_SUCCESS){
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, s,
- "couldn't create control socket information, shutting down");
- return 1;
- }
- if (apr_socket_create(&udp_sock, udp_sa->family, SOCK_DGRAM, 0,
- _pconf) != APR_SUCCESS){
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, s,
- "couldn't create control socket, shutting down");
- return 1;
- }
- if (apr_socket_bind(udp_sock, udp_sa) != APR_SUCCESS){
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, s,
- "couldn't bind UDP socket!");
- return 1;
- }
-
- if ((num_listening_sockets = ap_setup_listeners(ap_server_conf)) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, 0, s,
- "no listening sockets available, shutting down");
- return 1;
- }
-
- ap_log_pid(pconf, ap_pid_fname);
-
- /*
- * Create our locks...
- */
-
- /* accept_mutex
- * used to lock around select so we only have one thread
- * in select at a time
- */
- rv = apr_thread_mutex_create(&accept_mutex, 0, pconf);
- if (rv != APR_SUCCESS) {
- /* tsch tsch, can't have more than one thread in the accept loop
- at a time so we need to fall on our sword... */
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't create accept lock");
- return 1;
- }
-
- /*
- * Startup/shutdown...
- */
-
- if (!is_graceful) {
- /* setup the scoreboard shared memory */
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- return 1;
- }
-
- for (i = 0; i < HARD_SERVER_LIMIT; i++) {
- ap_scoreboard_image->parent[i].pid = 0;
- for (j = 0;j < HARD_THREAD_LIMIT; j++)
- ap_scoreboard_image->servers[i][j].tid = 0;
- }
- }
-
- if (HARD_SERVER_LIMIT == 1)
- ap_scoreboard_image->parent[0].pid = getpid();
-
- set_signals();
-
- /* Sanity checks to avoid thrashing... */
- if (max_spare_threads < min_spare_threads )
- max_spare_threads = min_spare_threads;
-
- /* If we're doing a graceful_restart then we're going to see a lot
- * of threads exiting immediately when we get into the main loop
- * below (because we just sent them AP_SIG_GRACEFUL). This happens
- * pretty rapidly... and for each one that exits we'll start a new one
- * until we reach at least threads_min_free. But we may be permitted to
- * start more than that, so we'll just keep track of how many we're
- * supposed to start up without the 1 second penalty between each fork.
- */
- remaining_threads_to_start = ap_threads_to_start;
- /* sanity check on the number to start... */
- if (remaining_threads_to_start > ap_thread_limit) {
- remaining_threads_to_start = ap_thread_limit;
- }
-
- /* If we're doing the single process thing or we're in a graceful_restart
- * then we don't start threads here.
- * if we're in one_process mode we don't want to start threads
- * do we??
- */
- if (!is_graceful && !one_process) {
- startup_threads(remaining_threads_to_start);
- remaining_threads_to_start = 0;
- } else {
- /* give the system some time to recover before kicking into
- * exponential mode */
- hold_off_on_exponential_spawning = 10;
- }
-
- /*
- * record that we've entered the world !
- */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
-
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-
- restart_pending = shutdown_pending = 0;
-
- mpm_state = AP_MPMQ_RUNNING;
-
- /* We sit in the server_main_loop() until we somehow manage to exit. When
- * we do, we need to kill the workers we have, so we start by using the
- * tell_workers_to_exit() function, but as it sometimes takes a short while
- * to accomplish this we have a pause builtin to allow them the chance to
- * gracefully exit.
- */
- if (!one_process) {
- server_main_loop(remaining_threads_to_start);
- tell_workers_to_exit();
- snooze(1000000);
- } else {
- worker_thread((void*)0);
- }
- mpm_state = AP_MPMQ_STOPPING;
-
- /* close the UDP socket we've been using... */
- apr_socket_close(udp_sock);
-
- if ((one_process || shutdown_pending) && !child_fatal) {
- const char *pidfile = NULL;
- pidfile = ap_server_root_relative (pconf, ap_pid_fname);
- if ( pidfile != NULL && unlink(pidfile) == 0)
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "removed PID file %s (pid=%ld)", pidfile,
- (long)getpid());
- }
-
- if (one_process) {
- return 1;
- }
-
- /*
- * If we get here we're shutting down...
- */
- if (shutdown_pending) {
- /* Time to gracefully shut down:
- * Kill child processes, tell them to call child_exit, etc...
- */
- if (beosd_killpg(getpgrp(), SIGTERM) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "killpg SIGTERM");
-
- /* use ap_reclaim_child_processes starting with SIGTERM */
- ap_reclaim_child_processes(1);
-
- if (!child_fatal) { /* already recorded */
- /* record the shutdown in the log */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "caught SIGTERM, shutting down");
- }
-
- return 1;
- }
-
- /* we've been told to restart */
- signal(SIGHUP, SIG_IGN);
-
- if (is_graceful) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- AP_SIG_GRACEFUL_STRING " received. Doing graceful restart");
- } else {
- /* Kill 'em all. Since the child acts the same on the parents SIGTERM
- * and a SIGHUP, we may as well use the same signal, because some user
- * pthreads are stealing signals from us left and right.
- */
-
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "SIGHUP received. Attempting to restart");
- }
-
- /* just before we go, tidy up the lock we created to prevent a
- * potential leak of semaphores...
- */
- apr_thread_mutex_destroy(accept_mutex);
-
- return 0;
-}
-
-static int beos_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- static int restart_num = 0;
- int no_detach, debug, foreground;
- apr_status_t rv;
-
- mpm_state = AP_MPMQ_STARTING;
-
- debug = ap_exists_config_define("DEBUG");
-
- if (debug) {
- foreground = one_process = 1;
- no_detach = 0;
- }
- else
- {
- one_process = ap_exists_config_define("ONE_PROCESS");
- no_detach = ap_exists_config_define("NO_DETACH");
- foreground = ap_exists_config_define("FOREGROUND");
- }
-
- /* sigh, want this only the second time around */
- if (restart_num++ == 1) {
- is_graceful = 0;
-
- if (!one_process && !foreground) {
- rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
- : APR_PROC_DETACH_DAEMONIZE);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "apr_proc_detach failed");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- server_pid = getpid();
- }
-
- beosd_pre_config();
- ap_listen_pre_config();
- ap_threads_to_start = DEFAULT_START_THREADS;
- min_spare_threads = DEFAULT_MIN_FREE_THREADS;
- max_spare_threads = DEFAULT_MAX_FREE_THREADS;
- ap_thread_limit = HARD_THREAD_LIMIT;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_max_requests_per_thread = DEFAULT_MAX_REQUESTS_PER_THREAD;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- return OK;
-}
-
-static void beos_hooks(apr_pool_t *p)
-{
- one_process = 0;
-
- ap_hook_pre_config(beos_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_to_start = atoi(arg);
- if (ap_threads_to_start < 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "StartThreads set to a value less than 0, reset to 1");
- ap_threads_to_start = 1;
- }
- return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- min_spare_threads = atoi(arg);
- if (min_spare_threads <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- min_spare_threads = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- max_spare_threads = atoi(arg);
- return NULL;
-}
-
-static const char *set_threads_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_thread_limit = atoi(arg);
- if (ap_thread_limit > HARD_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients of %d exceeds compile time limit "
- "of %d servers,", ap_thread_limit, HARD_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering MaxClients to %d. To increase, please "
- "see the", HARD_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " HARD_THREAD_LIMIT define in server/mpm/beos/mpm_default.h.");
- ap_thread_limit = HARD_THREAD_LIMIT;
- }
- else if (ap_thread_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require MaxClients > 0, setting to %d", HARD_THREAD_LIMIT);
- ap_thread_limit = HARD_THREAD_LIMIT;
- }
- return NULL;
-}
-
-static const char *set_max_requests_per_thread (cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_max_requests_per_thread = atoi(arg);
- if (ap_max_requests_per_thread < 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxRequestsPerThread was set below 0"
- "reset to 0, but this may not be what you want.");
- ap_max_requests_per_thread = 0;
- }
-
- return NULL;
-}
-
-static const command_rec beos_cmds[] = {
-BEOS_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1( "StartThreads", set_threads_to_start, NULL, RSRC_CONF,
- "Number of threads to launch at server startup"),
-AP_INIT_TAKE1( "MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
- "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1( "MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
- "Maximum number of idle children" ),
-AP_INIT_TAKE1( "MaxClients", set_threads_limit, NULL, RSRC_CONF,
- "Maximum number of children alive at the same time (max threads)" ),
-AP_INIT_TAKE1( "MaxRequestsPerThread", set_max_requests_per_thread, NULL, RSRC_CONF,
- "Maximum number of requests served by a thread" ),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_beos_module = {
- MPM20_MODULE_STUFF,
- NULL, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- beos_cmds, /* command apr_table_t */
- beos_hooks /* register_hooks */
-};
-
diff --git a/server/mpm/beos/beos.h b/server/mpm/beos/beos.h
deleted file mode 100644
index 8ca7d0dd34..0000000000
--- a/server/mpm/beos/beos.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_BEOS_H
-#define APACHE_MPM_BEOS_H
-
-extern int ap_threads_per_child;
-extern int ap_pipe_of_death[2];
-extern int ap_extended_status;
-extern void clean_child_exit(int);
-extern int max_daemons_limit;
-
-#endif /* APACHE_MPM_BEOS_H */
diff --git a/server/mpm/beos/config5.m4 b/server/mpm/beos/config5.m4
deleted file mode 100644
index 4f201408d6..0000000000
--- a/server/mpm/beos/config5.m4
+++ /dev/null
@@ -1,7 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "beos" ; then
- apache_apr_flags="--enable-threads"
-
- APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/beos/mpm.h b/server/mpm/beos/mpm.h
deleted file mode 100644
index 3e35434f20..0000000000
--- a/server/mpm/beos/mpm.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_BEOS_H
-#define APACHE_MPM_BEOS_H
-
-#define BEOS_MPM
-#include "scoreboard.h"
-
-#define MPM_NAME "Beos"
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->servers[0][i].tid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-
-extern int ap_max_child_assigned;
-extern server_rec *ap_server_conf;
-extern int ap_threads_per_child;
-
-#endif /* APACHE_MPM_BEOS_H */
diff --git a/server/mpm/beos/mpm_default.h b/server/mpm/beos/mpm_default.h
deleted file mode 100644
index 17c2733ddd..0000000000
--- a/server/mpm/beos/mpm_default.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* we use the child (c) as zero in our code... */
-#define AP_ID_FROM_CHILD_THREAD(c, t) t
-/* as the child is always zero, just return the id... */
-#define AP_CHILD_THREAD_FROM_ID(i) 0 , i
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREADS
-#define DEFAULT_START_THREADS 10
-#endif
-
-#ifdef NO_THREADS
-#define DEFAULT_THREADS 1
-#endif
-#ifndef DEFAULT_THREADS
-#define DEFAULT_THREADS 10
-#endif
-
-/* The following 2 settings are used to control the number of threads
- * we have available. Normally the DEFAULT_MAX_FREE_THREADS is set
- * to the same as the HARD_THREAD_LIMIT to avoid churning of starting
- * new threads to replace threads killed off...
- */
-
-/* Maximum number of *free* threads --- more than this, and
- * they will die off.
- */
-#ifndef DEFAULT_MAX_FREE_THREADS
-#define DEFAULT_MAX_FREE_THREADS HARD_THREAD_LIMIT
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-#ifndef DEFAULT_MIN_FREE_THREADS
-#define DEFAULT_MIN_FREE_THREADS 1
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If == 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_THREAD
-#define DEFAULT_MAX_REQUESTS_PER_THREAD 0
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/config.m4 b/server/mpm/config.m4
deleted file mode 100644
index c86a624ec4..0000000000
--- a/server/mpm/config.m4
+++ /dev/null
@@ -1,45 +0,0 @@
-AC_MSG_CHECKING(which MPM to use)
-AC_ARG_WITH(mpm,
-APACHE_HELP_STRING(--with-mpm=MPM,Choose the process model for Apache to use.
- MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool}),[
- APACHE_MPM=$withval
-],[
- if test "x$APACHE_MPM" = "x"; then
- APACHE_MPM=prefork
- fi
-])
-AC_MSG_RESULT($APACHE_MPM)
-
-apache_cv_mpm=$APACHE_MPM
-
-if test "$apache_cv_mpm" = "worker" -o "$apache_cv_mpm" = "perchild" -o "$apache_cv_mpm" = "leader" -o "$apache_cv_mpm" = "threadpool" ; then
- APR_CHECK_APR_DEFINE(APR_HAS_THREADS)
-
- if test "x$ac_cv_define_APR_HAS_THREADS" = "xno"; then
- AC_MSG_RESULT(The currently selected MPM requires threads which your system seems to lack)
- AC_MSG_CHECKING(checking for replacement)
- AC_MSG_RESULT(prefork selected)
- apache_cv_mpm=prefork
- fi
-fi
-
-APACHE_FAST_OUTPUT(server/mpm/Makefile)
-
-MPM_NAME=$apache_cv_mpm
-if test "$MPM_NAME" = "leader" -o "$MPM_NAME" = "threadpool" -o "$MPM_NAME" = "perchild"; then
- AC_MSG_WARN(You have selected an EXPERIMENTAL MPM. Be warned!)
- MPM_SUBDIR_NAME=experimental/$MPM_NAME
-else
- MPM_SUBDIR_NAME=$MPM_NAME
-fi
-MPM_DIR=server/mpm/$MPM_SUBDIR_NAME
-MPM_LIB=$MPM_DIR/lib${MPM_NAME}.la
-
-if test ! -f "$abs_srcdir/$MPM_DIR/mpm.h"; then
- AC_MSG_ERROR(the selected mpm -- $apache_cv_mpm -- is not supported)
-fi
-
-APACHE_SUBST(MPM_NAME)
-APACHE_SUBST(MPM_SUBDIR_NAME)
-MODLIST="$MODLIST mpm_${MPM_NAME}"
-
diff --git a/server/mpm/experimental/leader/.cvsignore b/server/mpm/experimental/leader/.cvsignore
deleted file mode 100644
index 84df257214..0000000000
--- a/server/mpm/experimental/leader/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/experimental/leader/Makefile.in b/server/mpm/experimental/leader/Makefile.in
deleted file mode 100644
index 03f1765edd..0000000000
--- a/server/mpm/experimental/leader/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libleader.la
-LTLIBRARY_SOURCES = leader.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/experimental/leader/README b/server/mpm/experimental/leader/README
deleted file mode 100644
index 1981a5beed..0000000000
--- a/server/mpm/experimental/leader/README
+++ /dev/null
@@ -1,15 +0,0 @@
-Leader MPM:
-This is an experimental variant of the standard worker MPM.
-It uses a Leader/Followers design pattern to coordinate work among threads:
-http://deuce.doc.wustl.edu/doc/pspdfs/lf.pdf
-
-To use the leader MPM, add "--with-mpm=leader" to the configure
-script's arguments when building the httpd.
-
-This MPM depends on APR's atomic compare-and-swap operations for
-thread synchronization. If you are compiling for an x86 target
-and you don't need to support 386s, or you're compiling for a
-SPARC and you don't need to run on pre-UltraSPARC chips, add
-"--enable-nonportable-atomics=yes" to the configure script's
-arguments. This will cause APR to implement atomic operations
-using efficient opcodes not available in older CPUs.
diff --git a/server/mpm/experimental/leader/config5.m4 b/server/mpm/experimental/leader/config5.m4
deleted file mode 100644
index 9a915abf1b..0000000000
--- a/server/mpm/experimental/leader/config5.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "leader" ; then
- AC_CHECK_FUNCS(pthread_kill)
- APACHE_FAST_OUTPUT(server/mpm/$MPM_SUBDIR_NAME/Makefile)
-fi
diff --git a/server/mpm/experimental/leader/leader.c b/server/mpm/experimental/leader/leader.c
deleted file mode 100644
index 88d24b9851..0000000000
--- a/server/mpm/experimental/leader/leader.c
+++ /dev/null
@@ -1,1997 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_thread_cond.h"
-#include "apr_thread_mutex.h"
-#include "apr_proc_mutex.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-#if !APR_HAS_THREADS
-#error The Leader/Follower MPM requires APR threads, but they are unavailable.
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "scoreboard.h"
-#include "mpm_default.h"
-#include "apr_poll.h"
-
-#include <signal.h>
-#include <limits.h> /* for INT_MAX */
-
-#include "apr_atomic.h"
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table. Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 16
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/* Limit on the threads per process. Clients will be locked out if more than
- * this * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-int ap_threads_per_child = 0; /* Worker threads per child */
-static int ap_daemons_to_start = 0;
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int ap_daemons_limit = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int dying = 0;
-static int workers_may_exit = 0;
-static int start_thread_may_exit = 0;
-static int requests_this_child;
-static int num_listensocks = 0;
-static int resource_shortage = 0;
-static int mpm_state = AP_MPMQ_STARTING;
-
-typedef struct worker_wakeup_info worker_wakeup_info;
-
-/* The structure used to pass unique initialization info to each thread */
-typedef struct {
- int pid;
- int tid;
- int sd;
-} proc_info;
-
-
-/* Structure used to pass information to the thread responsible for
- * creating the rest of the threads.
- */
-typedef struct {
- apr_thread_t **threads;
- int child_num_arg;
- apr_threadattr_t *threadattr;
-} thread_starter;
-
-#define ID_FROM_CHILD_THREAD(c, t) ((c * thread_limit) + t)
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts. We
- * use this value to optimize routines that have to scan the entire
- * scoreboard.
- */
-int ap_max_daemons_limit = -1;
-
-static ap_pod_t *pod;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* This MPM respects a couple of runtime flags that can aid in debugging.
- * Setting the -DNO_DETACH flag will prevent the root process from
- * detaching from its controlling terminal. Additionally, setting
- * the -DONE_PROCESS flag (which implies -DNO_DETACH) will get you the
- * child_main loop running in the process which originally started up.
- * This gives you a pretty nice debugging environment. (You'll get a SIGHUP
- * early in standalone_main; just continue through. This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-static apr_pool_t *pchild; /* Pool for httpd child stuff */
-
-static pid_t ap_my_pid; /* Linux getpid() doesn't work except in main
- thread. Use this instead */
-static pid_t parent_pid;
-
-/* Locks for accept serialization */
-static apr_proc_mutex_t *accept_mutex;
-
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) (ap_listeners->next ? (stmt) : APR_SUCCESS)
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-#endif
-
-
-/* Structure used to wake up an idle worker thread
- */
-struct worker_wakeup_info {
- apr_uint32_t next; /* index into worker_wakeups array,
- * used to build a linked list
- */
- apr_thread_cond_t *cond;
- apr_thread_mutex_t *mutex;
-};
-
-static worker_wakeup_info *worker_wakeup_create(apr_pool_t *pool)
-{
- apr_status_t rv;
- worker_wakeup_info *wakeup;
-
- wakeup = (worker_wakeup_info *)apr_palloc(pool, sizeof(*wakeup));
- if ((rv = apr_thread_cond_create(&wakeup->cond, pool)) != APR_SUCCESS) {
- return NULL;
- }
- if ((rv = apr_thread_mutex_create(&wakeup->mutex, APR_THREAD_MUTEX_DEFAULT,
- pool)) != APR_SUCCESS) {
- return NULL;
- }
- /* The wakeup's mutex will be unlocked automatically when
- * the worker blocks on the condition variable
- */
- apr_thread_mutex_lock(wakeup->mutex);
- return wakeup;
-}
-
-
-/* Structure used to hold a stack of idle worker threads
- */
-typedef struct {
- /* 'state' consists of several fields concatenated into a
- * single 32-bit int for use with the apr_atomic_cas32() API:
- * state & STACK_FIRST is the thread ID of the first thread
- * in a linked list of idle threads
- * state & STACK_TERMINATED indicates whether the proc is shutting down
- * state & STACK_NO_LISTENER indicates whether the process has
- * no current listener thread
- */
- apr_uint32_t state;
-} worker_stack;
-
-#define STACK_FIRST 0xffff
-#define STACK_LIST_END 0xffff
-#define STACK_TERMINATED 0x10000
-#define STACK_NO_LISTENER 0x20000
-
-static worker_wakeup_info **worker_wakeups = NULL;
-
-static worker_stack* worker_stack_create(apr_pool_t *pool, apr_size_t max)
-{
- worker_stack *stack = (worker_stack *)apr_palloc(pool, sizeof(*stack));
- stack->state = STACK_NO_LISTENER | STACK_LIST_END;
- return stack;
-}
-
-static apr_status_t worker_stack_wait(worker_stack *stack,
- apr_uint32_t worker_id)
-{
- worker_wakeup_info *wakeup = worker_wakeups[worker_id];
-
- while (1) {
- apr_uint32_t state = stack->state;
- if (state & (STACK_TERMINATED | STACK_NO_LISTENER)) {
- if (state & STACK_TERMINATED) {
- return APR_EINVAL;
- }
- if (apr_atomic_cas32(&(stack->state), STACK_LIST_END, state) !=
- state) {
- continue;
- }
- else {
- return APR_SUCCESS;
- }
- }
- wakeup->next = state;
- if (apr_atomic_cas32(&(stack->state), worker_id, state) != state) {
- continue;
- }
- else {
- return apr_thread_cond_wait(wakeup->cond, wakeup->mutex);
- }
- }
-}
-
-static apr_status_t worker_stack_awaken_next(worker_stack *stack)
-{
-
- while (1) {
- apr_uint32_t state = stack->state;
- apr_uint32_t first = state & STACK_FIRST;
- if (first == STACK_LIST_END) {
- if (apr_atomic_cas32(&(stack->state), state | STACK_NO_LISTENER,
- state) != state) {
- continue;
- }
- else {
- return APR_SUCCESS;
- }
- }
- else {
- worker_wakeup_info *wakeup = worker_wakeups[first];
- if (apr_atomic_cas32(&(stack->state), (state ^ first) | wakeup->next,
- state) != state) {
- continue;
- }
- else {
- /* Acquire and release the idle worker's mutex to ensure
- * that it's actually waiting on its condition variable
- */
- apr_status_t rv;
- if ((rv = apr_thread_mutex_lock(wakeup->mutex)) !=
- APR_SUCCESS) {
- return rv;
- }
- if ((rv = apr_thread_mutex_unlock(wakeup->mutex)) !=
- APR_SUCCESS) {
- return rv;
- }
- return apr_thread_cond_signal(wakeup->cond);
- }
- }
- }
-}
-
-static apr_status_t worker_stack_term(worker_stack *stack)
-{
- int i;
- apr_status_t rv;
-
- while (1) {
- apr_uint32_t state = stack->state;
- if (apr_atomic_cas32(&(stack->state), state | STACK_TERMINATED,
- state) == state) {
- break;
- }
- }
- for (i = 0; i < ap_threads_per_child; i++) {
- if ((rv = worker_stack_awaken_next(stack)) != APR_SUCCESS) {
- return rv;
- }
- }
- return APR_SUCCESS;
-}
-
-static worker_stack *idle_worker_stack;
-
-#define ST_INIT 0
-#define ST_GRACEFUL 1
-#define ST_UNGRACEFUL 2
-
-static int terminate_mode = ST_INIT;
-
-static void signal_threads(int mode)
-{
- if (terminate_mode == mode) {
- return;
- }
- terminate_mode = mode;
- mpm_state = AP_MPMQ_STOPPING;
- workers_may_exit = 1;
-
- worker_stack_term(idle_worker_stack);
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_max_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_STATIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = server_limit;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = thread_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = ap_threads_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = min_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = max_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = ap_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code) __attribute__ ((noreturn));
-static void clean_child_exit(int code)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (pchild) {
- apr_pool_destroy(pchild);
- }
- ap_mpm_pod_close(pod);
- exit(code);
-}
-
-static void just_die(int sig)
-{
- clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static volatile int child_fatal;
-ap_generation_t volatile ap_my_generation;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals.
- * Previously this was initiated in sig_term() and restart() signal handlers,
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate. Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (shutdown_pending == 1) {
- /* Um, is this _probably_ not an error, if the user has
- * tried to do a shutdown twice quickly, so we won't
- * worry about reporting it.
- */
- return;
- }
- shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = graceful;
-}
-
-static void sig_term(int sig)
-{
- if (ap_my_pid == parent_pid) {
- ap_start_shutdown();
- }
- else {
- signal_threads(ST_GRACEFUL);
- }
-}
-
-static void restart(int sig)
-{
- ap_start_restart(sig == AP_SIG_GRACEFUL);
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
- struct sigaction sa;
-#endif
-
- if (!one_process) {
- ap_fatal_signal_setup(ap_server_conf, pconf);
- }
-
-#ifndef NO_USE_SIGACTION
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sa.sa_handler = sig_term;
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGTERM)");
-#ifdef SIGINT
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXCPU, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXFSZ, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGPIPE)");
-#endif
-
- /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
- * processing one */
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
- sa.sa_handler = restart;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGHUP)");
- if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
- if (!one_process) {
-#ifdef SIGXCPU
- apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
- apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
- }
-
- apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
- apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
- apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
- apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
- /* XXX this is really a bad confusing obsolete name
- * maybe it should be ap_mpm_process_exiting?
- */
-{
- return workers_may_exit;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num,
- int my_thread_num, apr_bucket_alloc_t *bucket_alloc)
-{
- conn_rec *current_conn;
- long conn_id = ID_FROM_CHILD_THREAD(my_child_num, my_thread_num);
- int csd;
- ap_sb_handle_t *sbh;
-
- ap_create_sb_handle(&sbh, p, my_child_num, my_thread_num);
- apr_os_sock_get(&csd, sock);
-
- current_conn = ap_run_create_connection(p, ap_server_conf, sock,
- conn_id, sbh, bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, sock);
- ap_lingering_close(current_conn);
- }
-}
-
-/* requests_this_child has gone to zero or below. See if the admin coded
- "MaxRequestsPerChild 0", and keep going in that case. Doing it this way
- simplifies the hot path in worker_thread */
-static void check_infinite_requests(void)
-{
- if (ap_max_requests_per_child) {
- signal_threads(ST_GRACEFUL);
- }
- else {
- /* wow! if you're executing this code, you may have set a record.
- * either this child process has served over 2 billion requests, or
- * you're running a threaded 2.0 on a 16 bit machine.
- *
- * I'll buy pizza and beers at Apachecon for the first person to do
- * the former without cheating (dorking with INT_MAX, or running with
- * uncommitted performance patches, for example).
- *
- * for the latter case, you probably deserve a beer too. Greg Ames
- */
-
- requests_this_child = INT_MAX; /* keep going */
- }
-}
-
-static void unblock_signal(int sig)
-{
- sigset_t sig_mask;
-
- sigemptyset(&sig_mask);
- sigaddset(&sig_mask, sig);
-#if defined(SIGPROCMASK_SETS_THREAD_MASK)
- sigprocmask(SIG_UNBLOCK, &sig_mask, NULL);
-#else
- pthread_sigmask(SIG_UNBLOCK, &sig_mask, NULL);
-#endif
-}
-
-static void *worker_thread(apr_thread_t *thd, void * dummy)
-{
- proc_info * ti = dummy;
- int process_slot = ti->pid;
- int thread_slot = ti->tid;
- apr_uint32_t my_worker_num = (apr_uint32_t)(ti->tid);
- apr_pool_t *tpool = apr_thread_pool_get(thd);
- void *csd = NULL;
- apr_allocator_t *allocator;
- apr_pool_t *ptrans; /* Pool for per-transaction stuff */
- apr_bucket_alloc_t *bucket_alloc;
- int numdesc;
- apr_pollset_t *pollset;
- apr_status_t rv;
- ap_listen_rec *lr;
- int is_listener;
- int last_poll_idx = 0;
-
- ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_STARTING, NULL);
-
- free(ti);
-
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- /* XXX: why is ptrans's parent not tpool? --jcw 08/2003 */
- apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
- apr_allocator_owner_set(allocator, ptrans);
- bucket_alloc = apr_bucket_alloc_create_ex(allocator);
-
- apr_pollset_create(&pollset, num_listensocks, tpool, 0);
- for (lr = ap_listeners ; lr != NULL ; lr = lr->next) {
- apr_pollfd_t pfd = { 0 };
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = lr->sd;
- pfd.reqevents = APR_POLLIN;
- pfd.client_data = lr;
-
- /* ### check the status */
- (void) apr_pollset_add(pollset, &pfd);
- }
-
- /* TODO: Switch to a system where threads reuse the results from earlier
- poll calls - manoj */
- is_listener = 0;
- while (!workers_may_exit) {
-
- ap_update_child_status_from_indexes(process_slot, thread_slot,
- SERVER_READY, NULL);
- if (!is_listener) {
- /* Wait until it's our turn to become the listener */
- if ((rv = worker_stack_wait(idle_worker_stack, my_worker_num)) !=
- APR_SUCCESS) {
- if (rv != APR_EINVAL) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "worker_stack_wait failed. Shutting down");
- }
- break;
- }
- if (workers_may_exit) {
- break;
- }
- is_listener = 1;
- }
-
- /* TODO: requests_this_child should be synchronized - aaron */
- if (requests_this_child <= 0) {
- check_infinite_requests();
- }
- if (workers_may_exit) break;
-
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex)))
- != APR_SUCCESS) {
- int level = APLOG_EMERG;
-
- if (workers_may_exit) {
- break;
- }
- if (ap_scoreboard_image->parent[process_slot].generation !=
- ap_scoreboard_image->global->running_generation) {
- level = APLOG_DEBUG; /* common to get these at restart time */
- }
- ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
- "apr_proc_mutex_lock failed. Attempting to shutdown "
- "process gracefully.");
- signal_threads(ST_GRACEFUL);
- break; /* skip the lock release */
- }
-
- if (!ap_listeners->next) {
- /* Only one listener, so skip the poll */
- lr = ap_listeners;
- }
- else {
- while (!workers_may_exit) {
- apr_status_t ret;
- const apr_pollfd_t *pdesc;
-
- ret = apr_pollset_poll(pollset, -1, &numdesc, &pdesc);
- if (ret != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(ret)) {
- continue;
- }
-
- /* apr_pollset_poll() will only return errors in catastrophic
- * circumstances. Let's try exiting gracefully, for now. */
- ap_log_error(APLOG_MARK, APLOG_ERR, ret, (const server_rec *)
- ap_server_conf, "apr_pollset_poll: (listen)");
- signal_threads(ST_GRACEFUL);
- }
-
- if (workers_may_exit) break;
-
- /* We can always use pdesc[0], but sockets at position N
- * could end up completely starved of attention in a very
- * busy server. Therefore, we round-robin across the
- * returned set of descriptors. While it is possible that
- * the returned set of descriptors might flip around and
- * continue to starve some sockets, we happen to know the
- * internal pollset implementation retains ordering
- * stability of the sockets. Thus, the round-robin should
- * ensure that a socket will eventually be serviced.
- */
- if (last_poll_idx >= numdesc)
- last_poll_idx = 0;
-
- /* Grab a listener record from the client_data of the poll
- * descriptor, and advance our saved index to round-robin
- * the next fetch.
- *
- * ### hmm... this descriptor might have POLLERR rather
- * ### than POLLIN
- */
- lr = pdesc[last_poll_idx++].client_data;
- goto got_fd;
- }
- }
- got_fd:
- if (!workers_may_exit) {
- rv = lr->accept_func(&csd, lr, ptrans);
- /* later we trash rv and rely on csd to indicate success/failure */
- AP_DEBUG_ASSERT(rv == APR_SUCCESS || !csd);
-
- if (rv == APR_EGENERAL) {
- /* E[NM]FILE, ENOMEM, etc */
- resource_shortage = 1;
- signal_threads(ST_GRACEFUL);
- }
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
- != APR_SUCCESS) {
- int level = APLOG_EMERG;
-
- if (workers_may_exit) {
- break;
- }
- if (ap_scoreboard_image->parent[process_slot].generation !=
- ap_scoreboard_image->global->running_generation) {
- level = APLOG_DEBUG; /* common to get these at restart time */
- }
- ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- }
- if (csd != NULL) {
- is_listener = 0;
- worker_stack_awaken_next(idle_worker_stack);
- process_socket(ptrans, csd, process_slot,
- thread_slot, bucket_alloc);
- apr_pool_clear(ptrans);
- requests_this_child--;
- }
- if ((ap_mpm_pod_check(pod) == APR_SUCCESS) ||
- (ap_my_generation !=
- ap_scoreboard_image->global->running_generation)) {
- signal_threads(ST_GRACEFUL);
- break;
- }
- }
- else {
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- }
- break;
- }
- }
-
- dying = 1;
- ap_scoreboard_image->parent[process_slot].quiescing = 1;
-
- worker_stack_term(idle_worker_stack);
-
- ap_update_child_status_from_indexes(process_slot, thread_slot,
- (dying) ? SERVER_DEAD : SERVER_GRACEFUL, (request_rec *) NULL);
-
- apr_bucket_alloc_destroy(bucket_alloc);
-
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-static int check_signal(int signum)
-{
- switch (signum) {
- case SIGTERM:
- case SIGINT:
- return 1;
- }
- return 0;
-}
-
-/* XXX under some circumstances not understood, children can get stuck
- * in start_threads forever trying to take over slots which will
- * never be cleaned up; for now there is an APLOG_DEBUG message issued
- * every so often when this condition occurs
- */
-static void * APR_THREAD_FUNC start_threads(apr_thread_t *thd, void *dummy)
-{
- thread_starter *ts = dummy;
- apr_thread_t **threads = ts->threads;
- apr_threadattr_t *thread_attr = ts->threadattr;
- int child_num_arg = ts->child_num_arg;
- int my_child_num = child_num_arg;
- proc_info *my_info;
- apr_status_t rv;
- int i;
- int threads_created = 0;
- int loops;
- int prev_threads_created;
-
- idle_worker_stack = worker_stack_create(pchild, ap_threads_per_child);
- if (idle_worker_stack == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, 0, ap_server_conf,
- "worker_stack_create() failed");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- worker_wakeups = (worker_wakeup_info **)
- apr_palloc(pchild, sizeof(worker_wakeup_info *) *
- ap_threads_per_child);
-
- loops = prev_threads_created = 0;
- while (1) {
- for (i = 0; i < ap_threads_per_child; i++) {
- int status = ap_scoreboard_image->servers[child_num_arg][i].status;
- worker_wakeup_info *wakeup;
-
- if (status != SERVER_GRACEFUL && status != SERVER_DEAD) {
- continue;
- }
-
- wakeup = worker_wakeup_create(pchild);
- if (wakeup == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, 0,
- ap_server_conf, "worker_wakeup_create failed");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- worker_wakeups[threads_created] = wakeup;
- my_info = (proc_info *)malloc(sizeof(proc_info));
- if (my_info == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
- "malloc: out of memory");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- my_info->pid = my_child_num;
- my_info->tid = i;
- my_info->sd = 0;
-
- /* We are creating threads right now */
- ap_update_child_status_from_indexes(my_child_num, i,
- SERVER_STARTING, NULL);
- /* We let each thread update its own scoreboard entry. This is
- * done because it lets us deal with tid better.
- */
- rv = apr_thread_create(&threads[i], thread_attr,
- worker_thread, my_info, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- apr_sleep(10 * APR_USEC_PER_SEC);
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- threads_created++;
- }
- if (start_thread_may_exit || threads_created == ap_threads_per_child) {
- break;
- }
- /* wait for previous generation to clean up an entry */
- apr_sleep(1 * APR_USEC_PER_SEC);
- ++loops;
- if (loops % 120 == 0) { /* every couple of minutes */
- if (prev_threads_created == threads_created) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "child %" APR_PID_T_FMT " isn't taking over "
- "slots very quickly (%d of %d)",
- ap_my_pid, threads_created, ap_threads_per_child);
- }
- prev_threads_created = threads_created;
- }
- }
-
- /* What state should this child_main process be listed as in the
- * scoreboard...?
- * ap_update_child_status_from_indexes(my_child_num, i, SERVER_STARTING,
- * (request_rec *) NULL);
- *
- * This state should be listed separately in the scoreboard, in some kind
- * of process_status, not mixed in with the worker threads' status.
- * "life_status" is almost right, but it's in the worker's structure, and
- * the name could be clearer. gla
- */
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-static void join_workers(apr_thread_t **threads)
-{
- int i;
- apr_status_t rv, thread_rv;
-
- for (i = 0; i < ap_threads_per_child; i++) {
- if (threads[i]) { /* if we ever created this thread */
- rv = apr_thread_join(&thread_rv, threads[i]);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join worker "
- "thread %d",
- i);
- }
- }
- }
-}
-
-static void join_start_thread(apr_thread_t *start_thread_id)
-{
- apr_status_t rv, thread_rv;
-
- start_thread_may_exit = 1; /* tell it to give up in case it is still
- * trying to take over slots from a
- * previous generation
- */
- rv = apr_thread_join(&thread_rv, start_thread_id);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join the start "
- "thread");
- }
-}
-
-static void child_main(int child_num_arg)
-{
- apr_thread_t **threads;
- apr_status_t rv;
- thread_starter *ts;
- apr_threadattr_t *thread_attr;
- apr_thread_t *start_thread_id;
-
- mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as this
- * child initializes
- */
-
- ap_my_pid = getpid();
- ap_fatal_signal_child_setup(ap_server_conf);
- apr_pool_create(&pchild, pconf);
-
- /*stuff to do before we switch id's, so we have permissions.*/
- ap_reopen_scoreboard(pchild, NULL, 0);
-
- rv = SAFE_ACCEPT(apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname,
- pchild));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize cross-process lock in child");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (unixd_setup_child()) {
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_run_child_init(pchild, ap_server_conf);
-
- /* done with init critical section */
-
- /* Just use the standard apr_setup_signal_thread to block all signals
- * from being received. The child processes no longer use signals for
- * any communication with the parent process.
- */
- rv = apr_setup_signal_thread();
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize signal thread");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (ap_max_requests_per_child) {
- requests_this_child = ap_max_requests_per_child;
- }
- else {
- /* coding a value of zero means infinity */
- requests_this_child = INT_MAX;
- }
-
- /* Setup worker threads */
-
- /* clear the storage; we may not create all our threads immediately,
- * and we want a 0 entry to indicate a thread which was not created
- */
- threads = (apr_thread_t **)calloc(1,
- sizeof(apr_thread_t *) * ap_threads_per_child);
- if (threads == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
- "malloc: out of memory");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ts = (thread_starter *)apr_palloc(pchild, sizeof(*ts));
-
- apr_threadattr_create(&thread_attr, pchild);
- /* 0 means PTHREAD_CREATE_JOINABLE */
- apr_threadattr_detach_set(thread_attr, 0);
- if (ap_thread_stacksize != 0) {
- apr_threadattr_stacksize_set(thread_attr, ap_thread_stacksize);
- }
-
- ts->threads = threads;
- ts->child_num_arg = child_num_arg;
- ts->threadattr = thread_attr;
-
- rv = apr_thread_create(&start_thread_id, thread_attr, start_threads,
- ts, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- apr_sleep(10 * APR_USEC_PER_SEC);
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- mpm_state = AP_MPMQ_RUNNING;
-
- /* If we are only running in one_process mode, we will want to
- * still handle signals. */
- if (one_process) {
- /* Block until we get a terminating signal. */
- apr_signal_thread(check_signal);
- /* make sure the start thread has finished; signal_threads()
- * and join_workers() depend on that
- */
- /* XXX join_start_thread() won't be awakened if one of our
- * threads encounters a critical error and attempts to
- * shutdown this child
- */
- join_start_thread(start_thread_id);
- signal_threads(ST_UNGRACEFUL); /* helps us terminate a little more
- * quickly than the dispatch of the signal thread
- * beats the Pipe of Death and the browsers
- */
- /* A terminating signal was received. Now join each of the
- * workers to clean them up.
- * If the worker already exited, then the join frees
- * their resources and returns.
- * If the worker hasn't exited, then this blocks until
- * they have (then cleans up).
- */
- join_workers(threads);
- }
- else { /* !one_process */
- /* remove SIGTERM from the set of blocked signals... if one of
- * the other threads in the process needs to take us down
- * (e.g., for MaxRequestsPerChild) it will send us SIGTERM
- */
- unblock_signal(SIGTERM);
- join_start_thread(start_thread_id);
- join_workers(threads);
- }
-
- free(threads);
-
- clean_child_exit(resource_shortage ? APEXIT_CHILDSICK : 0);
-}
-
-static int make_child(server_rec *s, int slot)
-{
- int pid;
-
- if (slot + 1 > ap_max_daemons_limit) {
- ap_max_daemons_limit = slot + 1;
- }
-
- if (one_process) {
- set_signals();
- ap_scoreboard_image->parent[slot].pid = getpid();
- child_main(slot);
- }
-
- if ((pid = fork()) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, s,
- "fork: Unable to fork new process");
-
- /* fork didn't succeed. Fix the scoreboard or else
- * it will say SERVER_STARTING forever and ever
- */
- ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD, NULL);
-
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again. */
- apr_sleep(10 * APR_USEC_PER_SEC);
-
- return -1;
- }
-
- if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
- /* By default, AIX binds to a single processor. This bit unbinds
- * children which will then bind to another CPU.
- */
- int status = bindprocessor(BINDPROCESS, (int)getpid(),
- PROCESSOR_CLASS_ANY);
- if (status != OK)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno,
- ap_server_conf,
- "processor unbind failed %d", status);
-#endif
- RAISE_SIGSTOP(MAKE_CHILD);
-
- apr_signal(SIGTERM, just_die);
- child_main(slot);
-
- clean_child_exit(0);
- }
- /* else */
- ap_scoreboard_image->parent[slot].quiescing = 0;
- ap_scoreboard_image->parent[slot].pid = pid;
- return 0;
-}
-
-/* start up a bunch of children */
-static void startup_children(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
- if (ap_scoreboard_image->parent[i].pid != 0) {
- continue;
- }
- if (make_child(ap_server_conf, i) < 0) {
- break;
- }
- --number_to_start;
- }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(void)
-{
- int i, j;
- int idle_thread_count;
- worker_score *ws;
- process_score *ps;
- int free_length;
- int totally_free_length = 0;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead;
- int total_non_dead;
-
- /* initialize the free_list */
- free_length = 0;
-
- idle_thread_count = 0;
- last_non_dead = -1;
- total_non_dead = 0;
-
- for (i = 0; i < ap_daemons_limit; ++i) {
- /* Initialization to satisfy the compiler. It doesn't know
- * that ap_threads_per_child is always > 0 */
- int status = SERVER_DEAD;
- int any_dying_threads = 0;
- int any_dead_threads = 0;
- int all_dead_threads = 1;
-
- if (i >= ap_max_daemons_limit && totally_free_length == idle_spawn_rate)
- break;
- ps = &ap_scoreboard_image->parent[i];
- for (j = 0; j < ap_threads_per_child; j++) {
- ws = &ap_scoreboard_image->servers[i][j];
- status = ws->status;
-
- /* XXX any_dying_threads is probably no longer needed GLA */
- any_dying_threads = any_dying_threads ||
- (status == SERVER_GRACEFUL);
- any_dead_threads = any_dead_threads || (status == SERVER_DEAD);
- all_dead_threads = all_dead_threads &&
- (status == SERVER_DEAD ||
- status == SERVER_GRACEFUL);
-
- /* We consider a starting server as idle because we started it
- * at least a cycle ago, and if it still hasn't finished starting
- * then we're just going to swamp things worse by forking more.
- * So we hopefully won't need to fork more if we count it.
- * This depends on the ordering of SERVER_READY and SERVER_STARTING.
- */
- if (status <= SERVER_READY && status != SERVER_DEAD &&
- !ps->quiescing &&
- ps->generation == ap_my_generation &&
- /* XXX the following shouldn't be necessary if we clean up
- * properly after seg faults, but we're not yet GLA
- */
- ps->pid != 0) {
- ++idle_thread_count;
- }
- }
- if (any_dead_threads && totally_free_length < idle_spawn_rate
- && (!ps->pid /* no process in the slot */
- || ps->quiescing)) { /* or at least one is going away */
- if (all_dead_threads) {
- /* great! we prefer these, because the new process can
- * start more threads sooner. So prioritize this slot
- * by putting it ahead of any slots with active threads.
- *
- * first, make room by moving a slot that's potentially still
- * in use to the end of the array
- */
- free_slots[free_length] = free_slots[totally_free_length];
- free_slots[totally_free_length++] = i;
- }
- else {
- /* slot is still in use - back of the bus
- */
- free_slots[free_length] = i;
- }
- ++free_length;
- }
- /* XXX if (!ps->quiescing) is probably more reliable GLA */
- if (!any_dying_threads) {
- last_non_dead = i;
- ++total_non_dead;
- }
- }
- ap_max_daemons_limit = last_non_dead + 1;
-
- if (idle_thread_count > max_spare_threads) {
- /* Kill off one child */
- ap_mpm_pod_signal(pod);
- idle_spawn_rate = 1;
- }
- else if (idle_thread_count < min_spare_threads) {
- /* terminate the free list */
- if (free_length == 0) {
- /* only report this condition once */
- static int reported = 0;
-
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- ap_server_conf,
- "server reached MaxClients setting, consider"
- " raising the MaxClients setting");
- reported = 1;
- }
- idle_spawn_rate = 1;
- }
- else {
- if (free_length > idle_spawn_rate) {
- free_length = idle_spawn_rate;
- }
- if (idle_spawn_rate >= 8) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "server seems busy, (you may need "
- "to increase StartServers, ThreadsPerChild "
- "or Min/MaxSpareThreads), "
- "spawning %d children, there are around %d idle "
- "threads, and %d total children", free_length,
- idle_thread_count, total_non_dead);
- }
- for (i = 0; i < free_length; ++i) {
- make_child(ap_server_conf, free_slots[i]);
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- }
- else if (idle_spawn_rate < MAX_SPAWN_RATE) {
- idle_spawn_rate *= 2;
- }
- }
- }
- else {
- idle_spawn_rate = 1;
- }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
- int child_slot;
- apr_exit_why_e exitwhy;
- int status, processed_status;
- apr_proc_t pid;
- int i;
-
- while (!restart_pending && !shutdown_pending) {
- ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
- if (pid.pid != -1) {
- processed_status = ap_process_child_status(&pid, exitwhy, status);
- if (processed_status == APEXIT_CHILDFATAL) {
- shutdown_pending = 1;
- child_fatal = 1;
- return;
- }
- /* non-fatal death... note that it's gone in the scoreboard. */
- child_slot = find_child_by_pid(&pid);
- if (child_slot >= 0) {
- for (i = 0; i < ap_threads_per_child; i++)
- ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD,
- (request_rec *) NULL);
-
- ap_scoreboard_image->parent[child_slot].pid = 0;
- ap_scoreboard_image->parent[child_slot].quiescing = 0;
- if (processed_status == APEXIT_CHILDSICK) {
- /* resource shortage, minimize the fork rate */
- idle_spawn_rate = 1;
- }
- else if (remaining_children_to_start
- && child_slot < ap_daemons_limit) {
- /* we're still doing a 1-for-1 replacement of dead
- * children with new children
- */
- make_child(ap_server_conf, child_slot);
- --remaining_children_to_start;
- }
-#if APR_HAS_OTHER_CHILD
- }
- else if (apr_proc_other_child_alert(&pid, APR_OC_REASON_DEATH,
- status) == 0) {
- /* handled */
-#endif
- }
- else if (is_graceful) {
- /* Great, we've probably just lost a slot in the
- * scoreboard. Somehow we don't know about this child.
- */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- ap_server_conf,
- "long lost child came home! (pid %ld)",
- (long)pid.pid);
- }
- /* Don't perform idle maintenance when a child dies,
- * only do it when there's a timeout. Remember only a
- * finite number of children can die, and it's pretty
- * pathological for a lot to die suddenly.
- */
- continue;
- }
- else if (remaining_children_to_start) {
- /* we hit a 1 second timeout in which none of the previous
- * generation of children needed to be reaped... so assume
- * they're all done, and pick up the slack if any is left.
- */
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- /* In any event we really shouldn't do the code below because
- * few of the servers we just started are in the IDLE state
- * yet, so we'd mistakenly create an extra server.
- */
- continue;
- }
-
- perform_idle_server_maintenance();
- }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- int remaining_children_to_start;
- apr_status_t rv;
-
- ap_log_pid(pconf, ap_pid_fname);
-
- first_server_limit = server_limit;
- first_thread_limit = thread_limit;
- if (changed_limit_at_restart) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "WARNING: Attempt to change ServerLimit or ThreadLimit "
- "ignored during restart");
- changed_limit_at_restart = 0;
- }
-
- /* Initialize cross-process accept lock */
- ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
- ap_server_root_relative(_pconf, ap_lock_fname),
- ap_my_pid);
-
- rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname,
- ap_accept_lock_mech, _pconf);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't create accept lock");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
-
-#if APR_USE_SYSVSEM_SERIALIZE
- if (ap_accept_lock_mech == APR_LOCK_DEFAULT ||
- ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#else
- if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#endif
- rv = unixd_set_proc_mutex_perms(accept_mutex);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't set permissions on cross-process lock; "
- "check User and Group directives");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- }
-
- if (!is_graceful) {
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- /* fix the generation number in the global score; we just got a new,
- * cleared scoreboard
- */
- ap_scoreboard_image->global->running_generation = ap_my_generation;
- }
-
- set_signals();
- /* Don't thrash... */
- if (max_spare_threads < min_spare_threads + ap_threads_per_child)
- max_spare_threads = min_spare_threads + ap_threads_per_child;
-
- /* If we're doing a graceful_restart then we're going to see a lot
- * of children exiting immediately when we get into the main loop
- * below (because we just sent them AP_SIG_GRACEFUL). This happens pretty
- * rapidly... and for each one that exits we'll start a new one until
- * we reach at least daemons_min_free. But we may be permitted to
- * start more than that, so we'll just keep track of how many we're
- * supposed to start up without the 1 second penalty between each fork.
- */
- remaining_children_to_start = ap_daemons_to_start;
- if (remaining_children_to_start > ap_daemons_limit) {
- remaining_children_to_start = ap_daemons_limit;
- }
- if (!is_graceful) {
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- }
- else {
- /* give the system some time to recover before kicking into
- * exponential mode */
- hold_off_on_exponential_spawning = 10;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(accept_mutex),
- apr_proc_mutex_defname());
-#endif
- restart_pending = shutdown_pending = 0;
- mpm_state = AP_MPMQ_RUNNING;
-
- server_main_loop(remaining_children_to_start);
- mpm_state = AP_MPMQ_STOPPING;
-
- if (shutdown_pending) {
- /* Time to gracefully shut down:
- * Kill child processes, tell them to call child_exit, etc...
- * (By "gracefully" we don't mean graceful in the same sense as
- * "apachectl graceful" where we allow old connections to finish.)
- */
- if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGTERM");
- }
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
-
- if (!child_fatal) {
- /* cleanup pid file on normal shutdown */
- const char *pidfile = NULL;
- pidfile = ap_server_root_relative (pconf, ap_pid_fname);
- if ( pidfile != NULL && unlink(pidfile) == 0)
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "removed PID file %s (pid=%ld)",
- pidfile, (long)getpid());
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0,
- ap_server_conf, "caught SIGTERM, shutting down");
- }
- return 1;
- }
-
- /* we've been told to restart */
- apr_signal(SIGHUP, SIG_IGN);
-
- if (one_process) {
- /* not worth thinking about */
- return 1;
- }
-
- /* advance to the next generation */
- /* XXX: we really need to make sure this new generation number isn't in
- * use by any of the children.
- */
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
-
- if (is_graceful) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- AP_SIG_GRACEFUL_STRING " received. Doing graceful restart");
- /* wake up the children...time to die. But we'll have more soon */
- ap_mpm_pod_killpg(pod, ap_daemons_limit);
-
-
- /* This is mostly for debugging... so that we know what is still
- * gracefully dealing with existing request.
- */
-
- }
- else {
- /* Kill 'em all. Since the child acts the same on the parents SIGTERM
- * and a SIGHUP, we may as well use the same signal, because some user
- * pthreads are stealing signals from us left and right.
- */
- ap_mpm_pod_killpg(pod, ap_daemons_limit);
-
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "SIGHUP received. Attempting to restart");
- }
-
- return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int leader_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- apr_status_t rv;
-
- pconf = p;
- ap_server_conf = s;
-
- if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
- NULL, "no listening sockets available, shutting down");
- return DONE;
- }
-
- if (!one_process) {
- if ((rv = ap_mpm_pod_open(pconf, &pod))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
- "Could not open pipe-of-death.");
- return DONE;
- }
- }
- return OK;
-}
-
-static int leader_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- static int restart_num = 0;
- int no_detach, debug, foreground;
- ap_directive_t *pdir;
- ap_directive_t *max_clients = NULL;
- apr_status_t rv;
-
- mpm_state = AP_MPMQ_STARTING;
-
- /* make sure that "ThreadsPerChild" gets set before "MaxClients" */
- for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
- if (strncasecmp(pdir->directive, "ThreadsPerChild", 15) == 0) {
- if (!max_clients) {
- break; /* we're in the clear, got ThreadsPerChild first */
- }
- else {
- /* now to swap the data */
- ap_directive_t temp;
-
- temp.directive = pdir->directive;
- temp.args = pdir->args;
- /* Make sure you don't change 'next', or you may get loops! */
- /* XXX: first_child, parent, and data can never be set
- * for these directives, right? -aaron */
- temp.filename = pdir->filename;
- temp.line_num = pdir->line_num;
-
- pdir->directive = max_clients->directive;
- pdir->args = max_clients->args;
- pdir->filename = max_clients->filename;
- pdir->line_num = max_clients->line_num;
-
- max_clients->directive = temp.directive;
- max_clients->args = temp.args;
- max_clients->filename = temp.filename;
- max_clients->line_num = temp.line_num;
- break;
- }
- }
- else if (!max_clients
- && strncasecmp(pdir->directive, "MaxClients", 10) == 0) {
- max_clients = pdir;
- }
- }
-
- debug = ap_exists_config_define("DEBUG");
-
- if (debug) {
- foreground = one_process = 1;
- no_detach = 0;
- }
- else {
- one_process = ap_exists_config_define("ONE_PROCESS");
- no_detach = ap_exists_config_define("NO_DETACH");
- foreground = ap_exists_config_define("FOREGROUND");
- }
-
- /* sigh, want this only the second time around */
- if (restart_num++ == 1) {
- is_graceful = 0;
-
- if (!one_process && !foreground) {
- rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
- : APR_PROC_DETACH_DAEMONIZE);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "apr_proc_detach failed");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- parent_pid = ap_my_pid = getpid();
- }
-
- unixd_pre_config(ptemp);
- ap_listen_pre_config();
- ap_daemons_to_start = DEFAULT_START_DAEMON;
- min_spare_threads = DEFAULT_MIN_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
- max_spare_threads = DEFAULT_MAX_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
- ap_daemons_limit = server_limit;
- ap_threads_per_child = DEFAULT_THREADS_PER_CHILD;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_lock_fname = DEFAULT_LOCKFILE;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- ap_extended_status = 0;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- return OK;
-}
-
-static void leader_hooks(apr_pool_t *p)
-{
- /* The leader open_logs phase must run before the core's, or stderr
- * will be redirected to a file, and the messages won't print to the
- * console.
- */
- static const char *const aszSucc[] = {"core.c", NULL};
- one_process = 0;
-
- ap_hook_open_logs(leader_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
- /* we need to set the MPM state before other pre-config hooks use MPM query
- * to retrieve it, so register as REALLY_FIRST
- */
- ap_hook_pre_config(leader_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_to_start = atoi(arg);
- return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- min_spare_threads = atoi(arg);
- if (min_spare_threads <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- min_spare_threads = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- max_spare_threads = atoi(arg);
- return NULL;
-}
-
-static const char *set_max_clients (cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- int max_clients;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- /* It is ok to use ap_threads_per_child here because we are
- * sure that it gets set before MaxClients in the pre_config stage. */
- max_clients = atoi(arg);
- if (max_clients < ap_threads_per_child) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients (%d) must be at least as large",
- max_clients);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " large as ThreadsPerChild (%d). Automatically",
- ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " increasing MaxClients to %d.",
- ap_threads_per_child);
- max_clients = ap_threads_per_child;
- }
- ap_daemons_limit = max_clients / ap_threads_per_child;
- if ((max_clients > 0) && (max_clients % ap_threads_per_child)) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients (%d) is not an integer multiple",
- max_clients);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " of ThreadsPerChild (%d), lowering MaxClients to %d",
- ap_threads_per_child,
- ap_daemons_limit * ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " for a maximum of %d child processes,",
- ap_daemons_limit);
- max_clients = ap_daemons_limit * ap_threads_per_child;
- }
- if (ap_daemons_limit > server_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients of %d would require %d servers,",
- max_clients, ap_daemons_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " and would exceed the ServerLimit value of %d.",
- server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " Automatically lowering MaxClients to %d. To increase,",
- server_limit * ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " please see the ServerLimit directive.");
- ap_daemons_limit = server_limit;
- }
- else if (ap_daemons_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require MaxClients > 0, setting to 1");
- ap_daemons_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_threads_per_child (cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_per_child = atoi(arg);
- if (ap_threads_per_child > thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadsPerChild of %d exceeds ThreadLimit "
- "value of %d", ap_threads_per_child,
- thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "threads, lowering ThreadsPerChild to %d. To increase, please"
- " see the", thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " ThreadLimit directive.");
- ap_threads_per_child = thread_limit;
- }
- else if (ap_threads_per_child < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadsPerChild > 0, setting to 1");
- ap_threads_per_child = 1;
- }
- return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_server_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_server_limit = atoi(arg);
- /* you cannot change ServerLimit across a restart; ignore
- * any such attempts
- */
- if (first_server_limit &&
- tmp_server_limit != server_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- server_limit = tmp_server_limit;
-
- if (server_limit > MAX_SERVER_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ServerLimit of %d exceeds compile time limit "
- "of %d servers,", server_limit, MAX_SERVER_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
- server_limit = MAX_SERVER_LIMIT;
- }
- else if (server_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ServerLimit > 0, setting to 1");
- server_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_thread_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_thread_limit = atoi(arg);
- /* you cannot change ThreadLimit across a restart; ignore
- * any such attempts
- */
- if (first_thread_limit &&
- tmp_thread_limit != thread_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- thread_limit = tmp_thread_limit;
-
- if (thread_limit > MAX_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadLimit of %d exceeds compile time limit "
- "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
- thread_limit = MAX_THREAD_LIMIT;
- }
- else if (thread_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadLimit > 0, setting to 1");
- thread_limit = 1;
- }
- return NULL;
-}
-
-static const command_rec leader_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
- "Number of child processes launched at server startup"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
- "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
- "Maximum number of idle children"),
-AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
- "Maximum number of children alive at the same time"),
-AP_INIT_TAKE1("ThreadsPerChild", set_threads_per_child, NULL, RSRC_CONF,
- "Number of threads each child creates"),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
- "Maximum value of MaxClients for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
- "Maximum worker threads in a server for this run of Apache"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_leader_module = {
- MPM20_MODULE_STUFF,
- ap_mpm_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- leader_cmds, /* command apr_table_t */
- leader_hooks /* register_hooks */
-};
-
diff --git a/server/mpm/experimental/leader/mpm.h b/server/mpm/experimental/leader/mpm.h
deleted file mode 100644
index 9ad7da214f..0000000000
--- a/server/mpm/experimental/leader/mpm.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "scoreboard.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_LEADER_H
-#define APACHE_MPM_LEADER_H
-
-#define LEADER_MPM
-
-#define MPM_NAME "Leader-Follower"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_WANT_SIGNAL_SERVER
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-#define AP_MPM_WANT_SET_STACKSIZE
-#define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#define AP_MPM_USES_POD 1
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-extern char ap_coredump_dir[MAX_STRING_LEN];
-
-#endif /* APACHE_MPM_LEADER_H */
diff --git a/server/mpm/experimental/leader/mpm_default.h b/server/mpm/experimental/leader/mpm_default.h
deleted file mode 100644
index 5aaebd324f..0000000000
--- a/server/mpm/experimental/leader/mpm_default.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 3
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 3
-#endif
-
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 25
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/experimental/perchild/.cvsignore b/server/mpm/experimental/perchild/.cvsignore
deleted file mode 100644
index 84df257214..0000000000
--- a/server/mpm/experimental/perchild/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/experimental/perchild/Makefile.in b/server/mpm/experimental/perchild/Makefile.in
deleted file mode 100644
index 374f130646..0000000000
--- a/server/mpm/experimental/perchild/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libperchild.la
-LTLIBRARY_SOURCES = perchild.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/experimental/perchild/config5.m4 b/server/mpm/experimental/perchild/config5.m4
deleted file mode 100644
index 368052f59f..0000000000
--- a/server/mpm/experimental/perchild/config5.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "perchild" ; then
- AC_CHECK_FUNCS(pthread_kill)
- APACHE_FAST_OUTPUT(server/mpm/$MPM_SUBDIR_NAME/Makefile)
-fi
diff --git a/server/mpm/experimental/perchild/mpm.h b/server/mpm/experimental/perchild/mpm.h
deleted file mode 100644
index cb17ba9bc5..0000000000
--- a/server/mpm/experimental/perchild/mpm.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_PERCHILD_H
-#define APACHE_MPM_PERCHILD_H
-
-#define PERCHILD_MPM
-
-#define MPM_NAME "Perchild"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_WANT_SIGNAL_SERVER
-#define AP_MPM_WANT_SET_STACKSIZE
-#define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-#define AP_MPM_USES_POD
-
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-/* Table of child status */
-#define SERVER_DEAD 0
-#define SERVER_DYING 1
-#define SERVER_ALIVE 2
-
-typedef struct ap_ctable{
- pid_t pid;
- unsigned char status;
-} ap_ctable;
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_PERCHILD_H */
diff --git a/server/mpm/experimental/perchild/mpm_default.h b/server/mpm/experimental/perchild/mpm_default.h
deleted file mode 100644
index d779e052c6..0000000000
--- a/server/mpm/experimental/perchild/mpm_default.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREAD
-#define DEFAULT_START_THREAD 5
-#endif
-
-/* Maximum number of *free* server threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_SPARE_THREAD
-#define DEFAULT_MAX_SPARE_THREAD 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_SPARE_THREAD
-#define DEFAULT_MIN_SPARE_THREAD 5
-#endif
-
-/* Number of servers to spawn off by default
- */
-#ifndef DEFAULT_NUM_DAEMON
-#define DEFAULT_NUM_DAEMON 2
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/experimental/perchild/perchild.c b/server/mpm/experimental/perchild/perchild.c
deleted file mode 100644
index c2bd609dca..0000000000
--- a/server/mpm/experimental/perchild/perchild.c
+++ /dev/null
@@ -1,2050 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_hash.h"
-#include "apr_strings.h"
-#include "apr_pools.h"
-#include "apr_portable.h"
-#include "apr_file_io.h"
-#include "apr_signal.h"
-
-#define APR_WANT_IOVEC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#if !APR_HAS_THREADS
-#error The perchild MPM requires APR threads, but they are unavailable.
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_protocol.h"
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-#include "mpm.h"
-#include "scoreboard.h"
-#include "util_filter.h"
-#include "apr_poll.h"
-
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#endif
-#ifdef HAVE_SYS_POLL_H
-#include <sys/poll.h>
-#endif
-
-/* ### should be APR-ized */
-#include <grp.h>
-#include <pwd.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-#include <setjmp.h>
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-/*
- * Define some magic numbers that we use for the state of the incomming
- * request. These must be < 0 so they don't collide with a file descriptor.
- */
-#define AP_PERCHILD_THISCHILD -1
-#define AP_PERCHILD_OTHERCHILD -2
-
-/* Limit on the threads per process. Clients will be locked out if more than
- * this * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table. Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 8
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-static int threads_to_start = 0; /* Worker threads per child */
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int max_threads = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int num_daemons = 0;
-static int curr_child_num = 0;
-static int workers_may_exit = 0;
-static int requests_this_child;
-static int num_listensocks = 0;
-static ap_pod_t *pod;
-static jmp_buf *jmpbuffers;
-
-struct child_info_t {
- uid_t uid;
- gid_t gid;
- int input; /* The socket descriptor */
- int output; /* The socket descriptor */
-};
-
-typedef struct {
- const char *sockname; /* The base name for the socket */
- const char *fullsockname; /* socket base name + extension */
- int input; /* The socket descriptor */
- int output; /* The socket descriptor */
-} perchild_server_conf;
-
-typedef struct child_info_t child_info_t;
-
-/* Tables used to determine the user and group each child process should
- * run as. The hash table is used to correlate a server name with a child
- * process.
- */
-static child_info_t *child_info_table;
-static int *thread_socket_table;
-struct ap_ctable *ap_child_table;
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with NumServers changes across AP_SIG_GRACEFUL restarts. We
- * use this value to optimize routines that have to scan the entire child
- * table.
- *
- * XXX - It might not be worth keeping this code in. There aren't very
- * many child processes in this MPM.
- */
-int ap_max_daemons_limit = -1;
-int ap_threads_per_child; /* XXX not part of API! axe it! */
-
-module AP_MODULE_DECLARE_DATA mpm_perchild_module;
-
-static apr_file_t *pipe_of_death_in = NULL;
-static apr_file_t *pipe_of_death_out = NULL;
-static apr_thread_mutex_t *pipe_of_death_mutex;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* one_process --- debugging mode variable; can be set from the command line
- * with the -X flag. If set, this gets you the child_main loop running
- * in the process which originally started up (no detach, no make_child),
- * which is a pretty nice debugging environment. (You'll get a SIGHUP
- * early in standalone_main; just continue through. This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-static apr_pool_t *pchild; /* Pool for httpd child stuff */
-static apr_pool_t *thread_pool_parent; /* Parent of per-thread pools */
-static apr_thread_mutex_t *thread_pool_parent_mutex;
-
-static int child_num;
-static unsigned int my_pid; /* Linux getpid() doesn't work except in
- main thread. Use this instead */
-/* Keep track of the number of worker threads currently active */
-static int worker_thread_count;
-static apr_thread_mutex_t *worker_thread_count_mutex;
-static int *worker_thread_free_ids;
-static apr_threadattr_t *worker_thread_attr;
-
-/* Keep track of the number of idle worker threads */
-static int idle_thread_count;
-static apr_thread_mutex_t *idle_thread_count_mutex;
-
-/* Locks for accept serialization */
-#ifdef NO_SERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) APR_SUCCESS
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-static apr_proc_mutex_t *process_accept_mutex;
-#endif /* NO_SERIALIZED_ACCEPT */
-static apr_thread_mutex_t *thread_accept_mutex;
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_max_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_STATIC;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = server_limit;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = thread_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = max_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = min_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = max_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = num_daemons;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code)
-{
- if (pchild) {
- apr_pool_destroy(pchild);
- }
- exit(code);
-}
-
-static void just_die(int sig)
-{
- clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile child_fatal;
-/* we don't currently track ap_my_generation, but mod_status
- * references it so it must be defined */
-ap_generation_t volatile ap_my_generation=0;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals.
- * Previously this was initiated in sig_term() and restart() signal handlers,
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate. Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
- if (shutdown_pending == 1) {
- /* Um, is this _probably_ not an error, if the user has
- * tried to do a shutdown twice quickly, so we won't
- * worry about reporting it.
- */
- return;
- }
- shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
-
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = graceful;
-}
-
-static void sig_term(int sig)
-{
- ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
-#ifndef WIN32
- ap_start_restart(sig == AP_SIG_GRACEFUL);
-#else
- ap_start_restart(1);
-#endif
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
- struct sigaction sa;
-#endif
-
- if (!one_process) {
- ap_fatal_signal_setup(ap_server_conf, pconf);
- }
-
-#ifndef NO_USE_SIGACTION
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sa.sa_handler = sig_term;
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGTERM)");
-#ifdef SIGINT
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXCPU, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXFSZ, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGPIPE)");
-#endif
-
- /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
- * processing one */
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
- sa.sa_handler = restart;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGHUP)");
- if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
- if (!one_process) {
-#ifdef SIGXCPU
- apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
- apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
- }
-
- apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
- apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
- apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
- apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
-{
- /* XXX - Does this really work? - Manoj */
- return is_graceful;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, long conn_id,
- apr_bucket_alloc_t *bucket_alloc)
-{
- conn_rec *current_conn;
- int csd;
- apr_status_t rv;
- int thread_num = conn_id % thread_limit;
- ap_sb_handle_t *sbh;
-
- if ((rv = apr_os_sock_get(&csd, sock)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL, "apr_os_sock_get");
- }
-
- if (thread_socket_table[thread_num] < 0) {
- ap_sock_disable_nagle(sock);
- }
-
- ap_create_sb_handle(&sbh, p, conn_id / thread_limit, thread_num);
- current_conn = ap_run_create_connection(p, ap_server_conf, sock, conn_id,
- sbh, bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, sock);
- ap_lingering_close(current_conn);
- }
-}
-
-static int perchild_process_connection(conn_rec *c)
-{
- ap_filter_t *f;
- apr_bucket_brigade *bb;
- core_net_rec *net;
-
- apr_pool_userdata_get((void **)&bb, "PERCHILD_SOCKETS", c->pool);
- if (bb != NULL) {
- for (f = c->output_filters; f != NULL; f = f->next) {
- if (!strcmp(f->frec->name, "core")) {
- break;
- }
- }
- if (f != NULL) {
- net = f->ctx;
- net->in_ctx = apr_palloc(c->pool, sizeof(*net->in_ctx));
- net->in_ctx->b = bb;
- }
- }
- return DECLINED;
-}
-
-
-static void *worker_thread(apr_thread_t *, void *);
-
-/* Starts a thread as long as we're below max_threads */
-static int start_thread(void)
-{
- apr_thread_t *thread;
- int rc;
-
- apr_thread_mutex_lock(worker_thread_count_mutex);
- if (worker_thread_count < max_threads - 1) {
- rc = apr_thread_create(&thread, worker_thread_attr, worker_thread,
- &worker_thread_free_ids[worker_thread_count], pchild);
- if (rc != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rc, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- sleep(10);
- workers_may_exit = 1;
- apr_thread_mutex_unlock(worker_thread_count_mutex);
- return 0;
- }
- else {
- worker_thread_count++;
- }
- }
- else {
- static int reported = 0;
-
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- ap_server_conf,
- "server reached MaxThreadsPerChild setting, "
- "consider raising the MaxThreadsPerChild or "
- "NumServers settings");
- reported = 1;
- }
- apr_thread_mutex_unlock(worker_thread_count_mutex);
- return 0;
- }
- apr_thread_mutex_unlock(worker_thread_count_mutex);
- return 1;
-
-}
-
-/* Sets workers_may_exit if we received a character on the pipe_of_death */
-static apr_status_t check_pipe_of_death(void **csd, ap_listen_rec *lr,
- apr_pool_t *ptrans)
-{
- apr_thread_mutex_lock(pipe_of_death_mutex);
- if (!workers_may_exit) {
- int ret;
- char pipe_read_char;
- apr_size_t n = 1;
-
- ret = apr_socket_recv(lr->sd, &pipe_read_char, &n);
- if (APR_STATUS_IS_EAGAIN(ret)) {
- /* It lost the lottery. It must continue to suffer
- * through a life of servitude. */
- }
- else {
- /* It won the lottery (or something else is very
- * wrong). Embrace death with open arms. */
- workers_may_exit = 1;
- }
- }
- apr_thread_mutex_unlock(pipe_of_death_mutex);
- return APR_SUCCESS;
-}
-
-static apr_status_t receive_from_other_child(void **csd, ap_listen_rec *lr,
- apr_pool_t *ptrans)
-{
- struct msghdr msg;
- struct cmsghdr *cmsg;
- char buffer[HUGE_STRING_LEN * 2], *headers, *body;
- int headerslen, bodylen;
- struct iovec iov;
- int ret, dp;
- apr_os_sock_t sd;
- apr_bucket_alloc_t *alloc = apr_bucket_alloc_create(ptrans);
- apr_bucket_brigade *bb = apr_brigade_create(ptrans, alloc);
- apr_bucket *bucket;
-
- apr_os_sock_get(&sd, lr->sd);
-
- iov.iov_base = buffer;
- iov.iov_len = sizeof(buffer);
-
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
-
- cmsg = apr_palloc(ptrans, sizeof(*cmsg) + sizeof(sd));
- cmsg->cmsg_len = sizeof(*cmsg) + sizeof(sd);
- msg.msg_control = cmsg;
- msg.msg_controllen = cmsg->cmsg_len;
-
- ret = recvmsg(sd, &msg, 0);
-
- memcpy(&dp, CMSG_DATA(cmsg), sizeof(dp));
-
- *csd = NULL; /* tell apr_os_sock_put() to allocate new apr_socket_t */
- apr_os_sock_put((apr_socket_t **)csd, &dp, ptrans);
-
- bucket = apr_bucket_eos_create(alloc);
- APR_BRIGADE_INSERT_HEAD(bb, bucket);
- bucket = apr_bucket_socket_create(*csd, alloc);
- APR_BRIGADE_INSERT_HEAD(bb, bucket);
-
- body = strchr(iov.iov_base, 0);
- if (!body) {
- return 1;
- }
-
- body++;
- bodylen = strlen(body);
-
- headers = iov.iov_base;
- headerslen = body - headers;
-
- bucket = apr_bucket_heap_create(body, bodylen, NULL, alloc);
- APR_BRIGADE_INSERT_HEAD(bb, bucket);
- bucket = apr_bucket_heap_create(headers, headerslen, NULL, alloc);
- APR_BRIGADE_INSERT_HEAD(bb, bucket);
-
- apr_pool_userdata_set(bb, "PERCHILD_SOCKETS", NULL, ptrans);
-
- return 0;
-}
-
-/* idle_thread_count should be incremented before starting a worker_thread */
-
-static void *worker_thread(apr_thread_t *thd, void *arg)
-{
- void *csd;
- apr_pool_t *tpool; /* Pool for this thread */
- apr_pool_t *ptrans; /* Pool for per-transaction stuff */
- volatile int thread_just_started = 1;
- int srv;
- int thread_num = *((int *) arg);
- long conn_id = child_num * thread_limit + thread_num;
- apr_pollfd_t *pollset;
- apr_status_t rv;
- ap_listen_rec *lr, *last_lr = ap_listeners;
- int n;
- apr_bucket_alloc_t *bucket_alloc;
-
- apr_thread_mutex_lock(thread_pool_parent_mutex);
- apr_pool_create(&tpool, thread_pool_parent);
- apr_thread_mutex_unlock(thread_pool_parent_mutex);
- apr_pool_create(&ptrans, tpool);
-
- (void) ap_update_child_status_from_indexes(child_num, thread_num,
- SERVER_STARTING,
- (request_rec *) NULL);
-
- bucket_alloc = apr_bucket_alloc_create(apr_thread_pool_get(thd));
-
- apr_poll_setup(&pollset, num_listensocks, tpool);
- for(lr = ap_listeners; lr != NULL; lr = lr->next) {
- int fd;
- apr_poll_socket_add(pollset, lr->sd, APR_POLLIN);
-
- apr_os_sock_get(&fd, lr->sd);
- }
-
- while (!workers_may_exit) {
- workers_may_exit |= ((ap_max_requests_per_child != 0)
- && (requests_this_child <= 0));
- if (workers_may_exit) break;
- if (!thread_just_started) {
- apr_thread_mutex_lock(idle_thread_count_mutex);
- if (idle_thread_count < max_spare_threads) {
- idle_thread_count++;
- apr_thread_mutex_unlock(idle_thread_count_mutex);
- }
- else {
- apr_thread_mutex_unlock(idle_thread_count_mutex);
- break;
- }
- }
- else {
- thread_just_started = 0;
- }
-
- (void) ap_update_child_status_from_indexes(child_num, thread_num,
- SERVER_READY,
- (request_rec *) NULL);
-
- apr_thread_mutex_lock(thread_accept_mutex);
- if (workers_may_exit) {
- apr_thread_mutex_unlock(thread_accept_mutex);
- break;
- }
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(process_accept_mutex)))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_proc_mutex_lock failed. Attempting to shutdown "
- "process gracefully.");
- workers_may_exit = 1;
- }
-
- while (!workers_may_exit) {
- apr_int16_t event;
- srv = apr_poll(pollset, num_listensocks, &n, -1);
-
- if (srv != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(srv)) {
- continue;
- }
-
- /* apr_poll() will only return errors in catastrophic
- * circumstances. Let's try exiting gracefully, for now. */
- ap_log_error(APLOG_MARK, APLOG_ERR, srv, (const server_rec *)
- ap_server_conf, "apr_poll: (listen)");
- workers_may_exit = 1;
- }
- if (workers_may_exit) break;
-
- /* find a listener */
- lr = last_lr;
- do {
- lr = lr->next;
- if (lr == NULL) {
- lr = ap_listeners;
- }
- /* XXX: Should we check for POLLERR? */
- apr_poll_revents_get(&event, lr->sd, pollset);
- if (event & (APR_POLLIN)) {
- last_lr = lr;
- goto got_fd;
- }
- } while (lr != last_lr);
- }
- got_fd:
- if (!workers_may_exit) {
- rv = lr->accept_func(&csd, lr, ptrans);
- if (rv == APR_EGENERAL) {
- /* E[NM]FILE, ENOMEM, etc */
- workers_may_exit = 1;
- }
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(process_accept_mutex)))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to shutdown "
- "process gracefully.");
- workers_may_exit = 1;
- }
- apr_thread_mutex_unlock(thread_accept_mutex);
- apr_thread_mutex_lock(idle_thread_count_mutex);
- if (idle_thread_count > min_spare_threads) {
- idle_thread_count--;
- }
- else {
- if (!start_thread()) {
- idle_thread_count--;
- }
- }
- apr_thread_mutex_unlock(idle_thread_count_mutex);
- if (setjmp(jmpbuffers[thread_num]) != 1) {
- process_socket(ptrans, csd, conn_id, bucket_alloc);
- }
- else {
- thread_socket_table[thread_num] = AP_PERCHILD_THISCHILD;
- }
- requests_this_child--;
- }
- else {
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(process_accept_mutex)))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to shutdown "
- "process gracefully.");
- workers_may_exit = 1;
- }
- apr_thread_mutex_unlock(thread_accept_mutex);
- apr_thread_mutex_lock(idle_thread_count_mutex);
- idle_thread_count--;
- apr_thread_mutex_unlock(idle_thread_count_mutex);
- break;
- }
- apr_pool_clear(ptrans);
- }
-
- apr_thread_mutex_lock(thread_pool_parent_mutex);
- ap_update_child_status_from_indexes(child_num, thread_num, SERVER_DEAD,
- (request_rec *) NULL);
- apr_pool_destroy(tpool);
- apr_thread_mutex_unlock(thread_pool_parent_mutex);
- apr_thread_mutex_lock(worker_thread_count_mutex);
- worker_thread_count--;
- worker_thread_free_ids[worker_thread_count] = thread_num;
- if (worker_thread_count == 0) {
- /* All the threads have exited, now finish the shutdown process
- * by signalling the sigwait thread */
- kill(my_pid, SIGTERM);
- }
- apr_thread_mutex_unlock(worker_thread_count_mutex);
-
- apr_bucket_alloc_destroy(bucket_alloc);
-
- return NULL;
-}
-
-
-
-/* Set group privileges.
- *
- * Note that we use the username as set in the config files, rather than
- * the lookup of to uid --- the same uid may have multiple passwd entries,
- * with different sets of groups for each.
- */
-
-static int set_group_privs(uid_t uid, gid_t gid)
-{
- if (!geteuid()) {
- const char *name;
-
- /* Get username if passed as a uid */
-
- struct passwd *ent;
-
- if ((ent = getpwuid(uid)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "getpwuid: couldn't determine user name from uid %u, "
- "you probably need to modify the User directive",
- (unsigned)uid);
- return -1;
- }
-
- name = ent->pw_name;
-
- /*
- * Set the GID before initgroups(), since on some platforms
- * setgid() is known to zap the group list.
- */
- if (setgid(gid) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "setgid: unable to set group id to Group %u",
- (unsigned)gid);
- return -1;
- }
-
- /* Reset `groups' attributes. */
-
- if (initgroups(name, gid) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "initgroups: unable to set groups for User %s "
- "and Group %u", name, (unsigned)gid);
- return -1;
- }
- }
- return 0;
-}
-
-
-static int perchild_setup_child(int childnum)
-{
- child_info_t *ug = &child_info_table[childnum];
-
- if (ug->uid == -1 && ug->gid == -1) {
- return unixd_setup_child();
- }
- if (set_group_privs(ug->uid, ug->gid)) {
- return -1;
- }
- /* Only try to switch if we're running as root */
- if (!geteuid()
- && (
-#ifdef _OSD_POSIX
- os_init_job_environment(server_conf, unixd_config.user_name,
- one_process) != 0 ||
-#endif
- setuid(ug->uid) == -1)) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
- "setuid: unable to change to uid: %ld",
- (long) ug->uid);
- return -1;
- }
- return 0;
-}
-
-static int check_signal(int signum)
-{
- switch (signum) {
- case SIGTERM:
- case SIGINT:
- just_die(signum);
- return 1;
- }
- return 0;
-}
-
-typedef struct perchild_header {
- char *headers;
- apr_pool_t *p;
-} perchild_header;
-
-/* Send a single HTTP header field to the client. Note that this function
- * is used in calls to table_do(), so their interfaces are co-dependent.
- * In other words, don't change this one without checking table_do in alloc.c.
- * It returns true unless there was a write error of some kind.
- */
-static int perchild_header_field(perchild_header *h,
- const char *fieldname, const char *fieldval)
-{
- apr_pstrcat(h->p, h->headers, fieldname, ": ", fieldval, CRLF, NULL);
- return 1;
-}
-
-
-static void child_main(int child_num_arg)
-{
- int i;
- apr_status_t rv;
- apr_socket_t *sock = NULL;
- ap_listen_rec *lr;
-
- my_pid = getpid();
- ap_fatal_signal_child_setup(ap_server_conf);
- child_num = child_num_arg;
- apr_pool_create(&pchild, pconf);
-
- for (lr = ap_listeners ; lr->next != NULL; lr = lr->next) {
- continue;
- }
-
- apr_os_sock_put(&sock, &child_info_table[child_num].input, pconf);
- lr->next = apr_palloc(pconf, sizeof(*lr));
- lr->next->sd = sock;
- lr->next->active = 1;
- lr->next->accept_func = receive_from_other_child;
- lr->next->next = NULL;
- lr = lr->next;
- num_listensocks++;
-
- /*stuff to do before we switch id's, so we have permissions.*/
-
- rv = SAFE_ACCEPT(apr_proc_mutex_child_init(&process_accept_mutex,
- ap_lock_fname, pchild));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize cross-process lock in child");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (perchild_setup_child(child_num)) {
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_run_child_init(pchild, ap_server_conf);
-
- /*done with init critical section */
-
- apr_setup_signal_thread();
-
- requests_this_child = ap_max_requests_per_child;
-
-
- /* Setup worker threads */
-
- if (threads_to_start > max_threads) {
- threads_to_start = max_threads;
- }
- idle_thread_count = threads_to_start;
- worker_thread_count = 0;
- worker_thread_free_ids = (int *)apr_pcalloc(pchild, thread_limit * sizeof(int));
- for (i = 0; i < max_threads; i++) {
- worker_thread_free_ids[i] = i;
- }
- apr_pool_create(&thread_pool_parent, pchild);
- apr_thread_mutex_create(&thread_pool_parent_mutex,
- APR_THREAD_MUTEX_DEFAULT, pchild);
- apr_thread_mutex_create(&idle_thread_count_mutex,
- APR_THREAD_MUTEX_DEFAULT, pchild);
- apr_thread_mutex_create(&worker_thread_count_mutex,
- APR_THREAD_MUTEX_DEFAULT, pchild);
- apr_thread_mutex_create(&pipe_of_death_mutex,
- APR_THREAD_MUTEX_DEFAULT, pchild);
- apr_thread_mutex_create(&thread_accept_mutex,
- APR_THREAD_MUTEX_DEFAULT, pchild);
-
- apr_threadattr_create(&worker_thread_attr, pchild);
- apr_threadattr_detach_set(worker_thread_attr, 1);
- if (ap_thread_stacksize != 0) {
- apr_threadattr_stacksize_set(thread_attr, ap_thread_stacksize);
- }
-
- /* We are creating worker threads right now */
- for (i=0; i < threads_to_start; i++) {
- /* start_thread shouldn't fail here */
- if (!start_thread()) {
- break;
- }
- }
-
- apr_signal_thread(check_signal);
-}
-
-static int make_child(server_rec *s, int slot)
-{
- int pid;
-
- if (slot + 1 > ap_max_daemons_limit) {
- ap_max_daemons_limit = slot + 1;
- }
-
- if (one_process) {
- set_signals();
- ap_child_table[slot].pid = getpid();
- ap_child_table[slot].status = SERVER_ALIVE;
- child_main(slot);
- }
- (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
- (request_rec *) NULL);
-
- if ((pid = fork()) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, s,
- "fork: Unable to fork new process");
- /* In case system resources are maxxed out, we don't want
- * Apache running away with the CPU trying to fork over and
- * over and over again. */
- sleep(10);
-
- return -1;
- }
-
- if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
- /* By default, AIX binds to a single processor. This bit unbinds
- * children which will then bind to another CPU.
- */
- int status = bindprocessor(BINDPROCESS, (int)getpid(),
- PROCESSOR_CLASS_ANY);
- if (status != OK) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno,
- ap_server_conf, "processor unbind failed %d", status);
- }
-#endif
-
- RAISE_SIGSTOP(MAKE_CHILD);
-
- /* XXX - For an unthreaded server, a signal handler will be necessary
- * apr_signal(SIGTERM, just_die);
- */
- child_main(slot);
- clean_child_exit(0);
- }
- /* else */
- ap_child_table[slot].pid = pid;
- ap_child_table[slot].status = SERVER_ALIVE;
-
- return 0;
-}
-
-/* start up a bunch of children */
-static int startup_children(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < num_daemons; ++i) {
- if (ap_child_table[i].pid) {
- continue;
- }
- if (make_child(ap_server_conf, i) < 0) {
- break;
- }
- --number_to_start;
- }
- return number_to_start;
-}
-
-
-/*
- * spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_child_maintenance(void)
-{
- int i;
- int free_length;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead = -1;
-
- /* initialize the free_list */
- free_length = 0;
-
- for (i = 0; i < num_daemons; ++i) {
- if (ap_child_table[i].pid == 0) {
- if (free_length < spawn_rate) {
- free_slots[free_length] = i;
- ++free_length;
- }
- }
- else {
- last_non_dead = i;
- }
-
- if (i >= ap_max_daemons_limit && free_length >= spawn_rate) {
- break;
- }
- }
- ap_max_daemons_limit = last_non_dead + 1;
-
- if (free_length > 0) {
- for (i = 0; i < free_length; ++i) {
- make_child(ap_server_conf, free_slots[i]);
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- }
- else if (spawn_rate < MAX_SPAWN_RATE) {
- spawn_rate *= 2;
- }
- }
- else {
- spawn_rate = 1;
- }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
- int child_slot;
- apr_exit_why_e exitwhy;
- int status;
- apr_proc_t pid;
- int i;
-
- while (!restart_pending && !shutdown_pending) {
- ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
- if (pid.pid != -1) {
- if (ap_process_child_status(&pid, exitwhy, status)
- == APEXIT_CHILDFATAL) {
- shutdown_pending = 1;
- child_fatal = 1;
- return;
- }
- /* non-fatal death... note that it's gone in the child table and
- * clean out the status table. */
- child_slot = -1;
- for (i = 0; i < ap_max_daemons_limit; ++i) {
- if (ap_child_table[i].pid == pid.pid) {
- child_slot = i;
- break;
- }
- }
- if (child_slot >= 0) {
- ap_child_table[child_slot].pid = 0;
- ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD,
- (request_rec *) NULL);
-
-
- if (remaining_children_to_start
- && child_slot < num_daemons) {
- /* we're still doing a 1-for-1 replacement of dead
- * children with new children
- */
- make_child(ap_server_conf, child_slot);
- --remaining_children_to_start;
- }
-#if APR_HAS_OTHER_CHILD
- }
- else if (apr_proc_other_child_alert(&pid, APR_OC_REASON_DEATH,
- status) == 0) {
- /* handled */
-#endif
- }
- else if (is_graceful) {
- /* Great, we've probably just lost a slot in the
- * child table. Somehow we don't know about this
- * child.
- */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- ap_server_conf,
- "long lost child came home! (pid %ld)",
- (long)pid.pid);
- }
- /* Don't perform idle maintenance when a child dies,
- * only do it when there's a timeout. Remember only a
- * finite number of children can die, and it's pretty
- * pathological for a lot to die suddenly.
- */
- continue;
- }
- else if (remaining_children_to_start) {
- /* we hit a 1 second timeout in which none of the previous
- * generation of children needed to be reaped... so assume
- * they're all done, and pick up the slack if any is left.
- */
- remaining_children_to_start = \
- startup_children(remaining_children_to_start);
- /* In any event we really shouldn't do the code below because
- * few of the servers we just started are in the IDLE state
- * yet, so we'd mistakenly create an extra server.
- */
- continue;
- }
-
- perform_child_maintenance();
- }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- int remaining_children_to_start;
- int i;
- apr_status_t rv;
- apr_size_t one = 1;
- ap_listen_rec *lr;
- apr_socket_t *sock = NULL;
- int fd;
-
- ap_log_pid(pconf, ap_pid_fname);
-
- first_server_limit = server_limit;
- first_thread_limit = thread_limit;
- if (changed_limit_at_restart) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "WARNING: Attempt to change ServerLimit or ThreadLimit "
- "ignored during restart");
- changed_limit_at_restart = 0;
- }
-
- ap_server_conf = s;
-
- if ((ap_accept_lock_mech == APR_LOCK_SYSVSEM) ||
- (ap_accept_lock_mech == APR_LOCK_POSIXSEM)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "Server configured for an accept lock mechanism that "
- "cannot be used with perchild. Falling back to FCNTL.");
- ap_accept_lock_mech = APR_LOCK_FCNTL;
- }
-
- /* Initialize cross-process accept lock */
- ap_lock_fname = apr_psprintf(_pconf, "%s.%u",
- ap_server_root_relative(_pconf, ap_lock_fname),
- my_pid);
- rv = SAFE_ACCEPT(apr_proc_mutex_create(&process_accept_mutex,
- ap_lock_fname, ap_accept_lock_mech,
- _pconf));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't create cross-process lock");
- return 1;
- }
-
- if (!is_graceful) {
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- return 1;
- }
- }
- /* Initialize the child table */
- if (!is_graceful) {
- for (i = 0; i < server_limit; i++) {
- ap_child_table[i].pid = 0;
- }
- }
-
- /* We need to put the new listeners at the end of the ap_listeners
- * list. If we don't, then the pool will be cleared before the
- * open_logs phase is called for the second time, and ap_listeners
- * will have only invalid data. If that happens, then the sockets
- * that we opened using make_sock() will be lost, and the server
- * won't start.
- */
- for (lr = ap_listeners ; lr->next != NULL; lr = lr->next) {
- continue;
- }
-
- apr_os_file_get(&fd, pipe_of_death_in);
- apr_os_sock_put(&sock, &fd, pconf);
- lr->next = apr_palloc(pconf, sizeof(*lr));
- lr->next->sd = sock;
- lr->next->active = 1;
- lr->next->accept_func = check_pipe_of_death;
- lr->next->next = NULL;
- lr = lr->next;
- num_listensocks++;
-
- set_signals();
-
- /* If we're doing a graceful_restart then we're going to see a lot
- * of children exiting immediately when we get into the main loop
- * below (because we just sent them AP_SIG_GRACEFUL). This happens
- * pretty rapidly... and for each one that exits we'll start a new one
- * until we reach at least daemons_min_free. But we may be permitted to
- * start more than that, so we'll just keep track of how many we're
- * supposed to start up without the 1 second penalty between each fork.
- */
- remaining_children_to_start = num_daemons;
- if (!is_graceful) {
- remaining_children_to_start = \
- startup_children(remaining_children_to_start);
- }
- else {
- /* give the system some time to recover before kicking into
- * exponential mode */
- hold_off_on_exponential_spawning = 10;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(process_accept_mutex),
- apr_proc_mutex_defname());
-#endif
- restart_pending = shutdown_pending = 0;
-
- server_main_loop(remaining_children_to_start);
-
- if (shutdown_pending) {
- /* Time to gracefully shut down:
- * Kill child processes, tell them to call child_exit, etc...
- */
- if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "killpg SIGTERM");
- }
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
-
- if (!child_fatal) {
- /* cleanup pid file on normal shutdown */
- const char *pidfile = NULL;
- pidfile = ap_server_root_relative (pconf, ap_pid_fname);
- if (pidfile != NULL && unlink(pidfile) == 0) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "removed PID file %s (pid=%ld)",
- pidfile, (long)getpid());
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0,
- ap_server_conf, "caught SIGTERM, shutting down");
- }
- return 1;
- }
-
- /* we've been told to restart */
- apr_signal(SIGHUP, SIG_IGN);
-
- if (one_process) {
- /* not worth thinking about */
- return 1;
- }
-
- if (is_graceful) {
- char char_of_death = '!';
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0,
- ap_server_conf, AP_SIG_GRACEFUL_STRING " received. "
- "Doing graceful restart");
-
- /* This is mostly for debugging... so that we know what is still
- * gracefully dealing with existing request.
- */
-
- for (i = 0; i < num_daemons; ++i) {
- if (ap_child_table[i].pid) {
- ap_child_table[i].status = SERVER_DYING;
- }
- }
- /* give the children the signal to die */
- for (i = 0; i < num_daemons;) {
- if ((rv = apr_file_write(pipe_of_death_out, &char_of_death,
- &one)) != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(rv)) continue;
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
- "write pipe_of_death");
- }
- i++;
- }
- }
- else {
- /* Kill 'em all. Since the child acts the same on the parents SIGTERM
- * and a SIGHUP, we may as well use the same signal, because some user
- * pthreads are stealing signals from us left and right.
- */
- if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "killpg SIGTERM");
- }
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0,
- ap_server_conf, "SIGHUP received. Attempting to restart");
- }
- return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int perchild_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- apr_status_t rv;
-
- pconf = p;
- ap_server_conf = s;
-
- if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
- NULL, "no listening sockets available, shutting down");
- return DONE;
- }
-
- ap_log_pid(pconf, ap_pid_fname);
-
- if ((rv = ap_mpm_pod_open(pconf, &pod))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
- "Could not open pipe-of-death.");
- return DONE;
- }
-
- if ((rv = apr_file_pipe_create(&pipe_of_death_in, &pipe_of_death_out,
- pconf)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv,
- (const server_rec*) ap_server_conf,
- "apr_file_pipe_create (pipe_of_death)");
- exit(1);
- }
- if ((rv = apr_file_pipe_timeout_set(pipe_of_death_in, 0)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv,
- (const server_rec*) ap_server_conf,
- "apr_file_pipe_timeout_set (pipe_of_death)");
- exit(1);
- }
-
- return OK;
-}
-
-static int perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- static int restart_num = 0;
- int no_detach, debug, foreground;
- ap_directive_t *pdir;
- int i;
- int tmp_server_limit = DEFAULT_SERVER_LIMIT;
- int tmp_thread_limit = DEFAULT_THREAD_LIMIT;
- apr_status_t rv;
-
- debug = ap_exists_config_define("DEBUG");
-
- if (debug) {
- foreground = one_process = 1;
- no_detach = 0;
- }
- else {
- one_process = ap_exists_config_define("ONE_PROCESS");
- no_detach = ap_exists_config_define("NO_DETACH");
- foreground = ap_exists_config_define("FOREGROUND");
- }
-
- /* sigh, want this only the second time around */
- if (restart_num++ == 1) {
- is_graceful = 0;
-
- if (!one_process && !foreground) {
- rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
- : APR_PROC_DETACH_DAEMONIZE);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "apr_proc_detach failed");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- my_pid = getpid();
- }
-
- unixd_pre_config(ptemp);
- ap_listen_pre_config();
- num_daemons = DEFAULT_NUM_DAEMON;
- threads_to_start = DEFAULT_START_THREAD;
- min_spare_threads = DEFAULT_MIN_SPARE_THREAD;
- max_spare_threads = DEFAULT_MAX_SPARE_THREAD;
- max_threads = thread_limit;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_lock_fname = DEFAULT_LOCKFILE;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- curr_child_num = 0;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- /* we need to know ServerLimit and ThreadLimit before we start processing
- * the tree because we need to already have allocated child_info_table
- */
- for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
- if (!strcasecmp(pdir->directive, "ServerLimit")) {
- if (atoi(pdir->args) > tmp_server_limit) {
- tmp_server_limit = atoi(pdir->args);
- if (tmp_server_limit > MAX_SERVER_LIMIT) {
- tmp_server_limit = MAX_SERVER_LIMIT;
- }
- }
- }
- else if (!strcasecmp(pdir->directive, "ThreadLimit")) {
- if (atoi(pdir->args) > tmp_thread_limit) {
- tmp_thread_limit = atoi(pdir->args);
- if (tmp_thread_limit > MAX_THREAD_LIMIT) {
- tmp_thread_limit = MAX_THREAD_LIMIT;
- }
- }
- }
- }
-
- child_info_table = (child_info_t *)apr_pcalloc(p, tmp_server_limit * sizeof(child_info_t));
- for (i = 0; i < tmp_server_limit; i++) {
- child_info_table[i].uid = -1;
- child_info_table[i].gid = -1;
- child_info_table[i].input = -1;
- child_info_table[i].output = -1;
- }
-
- return OK;
-}
-
-static int pass_request(request_rec *r)
-{
- int rv;
- apr_socket_t *thesock = ap_get_module_config(r->connection->conn_config, &core_module);
- struct msghdr msg;
- struct cmsghdr *cmsg;
- int sfd;
- struct iovec iov[2];
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
- apr_bucket_brigade *sockbb;
- char request_body[HUGE_STRING_LEN] = "\0";
- apr_size_t l = sizeof(request_body);
- perchild_header h;
- apr_bucket *sockbuck;
- perchild_server_conf *sconf = (perchild_server_conf *)
- ap_get_module_config(r->server->module_config,
- &mpm_perchild_module);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "passing request to another child. Vhost: %s, child %d %d",
- apr_table_get(r->headers_in, "Host"), child_num, sconf->output);
- ap_get_brigade(r->connection->input_filters, bb, AP_MODE_EXHAUSTIVE, APR_NONBLOCK_READ,
- 0);
-
- for (sockbuck = APR_BRIGADE_FIRST(bb); sockbuck != APR_BRIGADE_SENTINEL(bb);
- sockbuck = APR_BUCKET_NEXT(sockbuck)) {
- if (APR_BUCKET_IS_SOCKET(sockbuck)) {
- break;
- }
- }
-
- if (!sockbuck) {
- }
- sockbb = apr_brigade_split(bb, sockbuck);
-
- if (apr_brigade_flatten(bb, request_body, &l) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Unable to flatten brigade, declining request");
- return DECLINED;
- }
-
- apr_os_sock_get(&sfd, thesock);
-
- h.p = r->pool;
- h.headers = apr_pstrcat(h.p, r->the_request, CRLF, "Host: ", r->hostname,
- CRLF, NULL);
- apr_table_do((int (*) (void *, const char *, const char *))
- perchild_header_field, (void *) &h, r->headers_in, NULL);
- h.headers = apr_pstrcat(h.p, h.headers, CRLF, NULL);
-
- iov[0].iov_base = h.headers;
- iov[0].iov_len = strlen(h.headers) + 1;
- iov[1].iov_base = request_body;
- iov[1].iov_len = l + 1;
-
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- msg.msg_iov = iov;
- msg.msg_iovlen = 2;
-
- cmsg = apr_palloc(r->pool, sizeof(*cmsg) + sizeof(sfd));
- cmsg->cmsg_len = sizeof(*cmsg) + sizeof(sfd);
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
-
- memcpy(CMSG_DATA(cmsg), &sfd, sizeof(sfd));
-
- msg.msg_control = cmsg;
- msg.msg_controllen = cmsg->cmsg_len;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Writing message to %d, passing sd: %d", sconf->output, sfd);
-
- if ((rv = sendmsg(sconf->output, &msg, 0)) == -1) {
- apr_pool_destroy(r->pool);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Writing message failed %d %d", rv, errno);
- return -1;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Writing message succeeded %d", rv);
-
- apr_pool_destroy(r->pool);
- return 1;
-}
-
-static char *make_perchild_socket(const char *fullsockname, int sd[2])
-{
- socketpair(PF_UNIX, SOCK_STREAM, 0, sd);
- return NULL;
-}
-
-static int perchild_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- int i;
- server_rec *sr;
- perchild_server_conf *sconf;
- int def_sd[2];
-
- def_sd[0] = -1;
- def_sd[1] = -1;
-
- for (sr = s; sr; sr = sr->next) {
- sconf = (perchild_server_conf *)ap_get_module_config(sr->module_config,
- &mpm_perchild_module);
-
- if (sconf->input == -1) {
- sconf->fullsockname = apr_pstrcat(sr->process->pool,
- sconf->sockname, ".DEFAULT", NULL);
- if (def_sd[0] == -1) {
- if (!make_perchild_socket(sconf->fullsockname, def_sd)) {
- /* log error */
- }
- }
- sconf->input = def_sd[0];
- sconf->output = def_sd[1];
- }
- }
-
- for (i = 0; i < num_daemons; i++) {
- if (child_info_table[i].uid == -1) {
- child_info_table[i].input = def_sd[0];
- child_info_table[i].output = def_sd[1];
- }
- }
-
- thread_socket_table = (int *)apr_pcalloc(p, thread_limit * sizeof(int));
- for (i = 0; i < thread_limit; i++) {
- thread_socket_table[i] = AP_PERCHILD_THISCHILD;
- }
- ap_child_table = (ap_ctable *)apr_pcalloc(p, server_limit * sizeof(ap_ctable));
-
- jmpbuffers = (jmp_buf *)apr_palloc(p, thread_limit * sizeof(jmp_buf));
-
- return OK;
-}
-
-static int perchild_post_read(request_rec *r)
-{
- int thread_num = r->connection->id % thread_limit;
- perchild_server_conf *sconf = (perchild_server_conf *)
- ap_get_module_config(r->server->module_config,
- &mpm_perchild_module);
-
- if (thread_socket_table[thread_num] != AP_PERCHILD_THISCHILD) {
- apr_socket_t *csd = NULL;
-
- apr_os_sock_put(&csd, &thread_socket_table[thread_num],
- r->connection->pool);
- ap_sock_disable_nagle(csd);
- ap_set_module_config(r->connection->conn_config, &core_module, csd);
- return OK;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Determining if request should be passed. "
- "Child Num: %d, SD: %d, sd from table: %d, hostname from server: %s", child_num,
- sconf->input, child_info_table[child_num].input,
- r->server->server_hostname);
- /* sconf is the server config for this vhost, so if our socket
- * is not the same that was set in the config, then the request
- * needs to be passed to another child. */
- if (sconf->input != child_info_table[child_num].input) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Passing request.");
- if (pass_request(r) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- ap_server_conf, "Could not pass request to proper "
- "child, request will not be honored.");
- }
- longjmp(jmpbuffers[thread_num], 1);
- }
- return OK;
- }
- return OK;
-}
-
-static void perchild_hooks(apr_pool_t *p)
-{
- /* The perchild open_logs phase must run before the core's, or stderr
- * will be redirected to a file, and the messages won't print to the
- * console.
- */
- static const char *const aszSucc[] = {"core.c", NULL};
- one_process = 0;
-
- ap_hook_open_logs(perchild_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
- ap_hook_pre_config(perchild_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(perchild_post_config, NULL, NULL, APR_HOOK_MIDDLE);
-
- /* Both of these must be run absolutely first. If this request isn't for
- * this server then we need to forward it to the proper child. No sense
- * tying up this server running more post_read request hooks if it is
- * just going to be forwarded along. The process_connection hook allows
- * perchild to receive the passed request correctly, by automatically
- * filling in the core_input_filter's ctx pointer.
- */
- ap_hook_post_read_request(perchild_post_read, NULL, NULL,
- APR_HOOK_REALLY_FIRST);
- ap_hook_process_connection(perchild_process_connection, NULL, NULL,
- APR_HOOK_REALLY_FIRST);
-}
-
-static const char *set_num_daemons(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- num_daemons = atoi(arg);
- if (num_daemons > server_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: NumServers of %d exceeds ServerLimit value "
- "of %d servers,", num_daemons, server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering NumServers to %d. To increase, please "
- "see the", server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " ServerLimit directive.");
- num_daemons = server_limit;
- }
- else if (num_daemons < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require NumServers > 0, setting to 1");
- num_daemons = 1;
- }
- return NULL;
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- threads_to_start = atoi(arg);
- if (threads_to_start > thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: StartThreads of %d exceeds ThreadLimit value"
- " of %d threads,", threads_to_start,
- thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering StartThreads to %d. To increase, please"
- " see the", thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " ThreadLimit directive.");
- }
- else if (threads_to_start < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require StartThreads > 0, setting to 1");
- threads_to_start = 1;
- }
- return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- min_spare_threads = atoi(arg);
- if (min_spare_threads <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- min_spare_threads = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- max_spare_threads = atoi(arg);
- if (max_spare_threads >= thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set higher than");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "ThreadLimit. Resetting to %d", thread_limit);
- max_spare_threads = thread_limit;
- }
- return NULL;
-}
-
-static const char *set_max_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- max_threads = atoi(arg);
- if (max_threads > thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MaxThreadsPerChild set higher than");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "ThreadLimit. Resetting to %d", thread_limit);
- max_threads = thread_limit;
- }
- return NULL;
-}
-
-static const char *set_child_per_uid(cmd_parms *cmd, void *dummy, const char *u,
- const char *g, const char *num)
-{
- int i;
- int max_this_time = atoi(num) + curr_child_num;
-
-
- for (i = curr_child_num; i < max_this_time; i++, curr_child_num++) {
- if (i > num_daemons) {
- return "Trying to use more child ID's than NumServers. Increase "
- "NumServers in your config file.";
- }
-
- child_info_table[i].uid = ap_uname2id(u);
- child_info_table[i].gid = ap_gname2id(g);
-
-#ifndef BIG_SECURITY_HOLE
- if (child_info_table[i].uid == 0 || child_info_table[i].gid == 0) {
- return "Assigning root user/group to a child.";
- }
-#endif
- }
- return NULL;
-}
-
-static const char *assign_childuid(cmd_parms *cmd, void *dummy, const char *uid,
- const char *gid)
-{
- int i;
- int matching = 0;
- int u = ap_uname2id(uid);
- int g = ap_gname2id(gid);
- const char *errstr;
- int socks[2];
- perchild_server_conf *sconf = (perchild_server_conf *)
- ap_get_module_config(cmd->server->module_config,
- &mpm_perchild_module);
-
- sconf->fullsockname = apr_pstrcat(cmd->pool, sconf->sockname, ".", uid,
- ":", gid, NULL);
-
- if ((errstr = make_perchild_socket(sconf->fullsockname, socks))) {
- return errstr;
- }
-
- sconf->input = socks[0];
- sconf->output = socks[1];
-
- for (i = 0; i < num_daemons; i++) {
- if (u == child_info_table[i].uid && g == child_info_table[i].gid) {
- child_info_table[i].input = sconf->input;
- child_info_table[i].output = sconf->output;
- matching++;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server,
- "filling out child_info_table; UID: %d, GID: %d, "
- "SD: %d %d, OUTPUT: %d %d, Child Num: %d",
- child_info_table[i].uid, child_info_table[i].gid,
- sconf->input, child_info_table[i].input, sconf->output,
- child_info_table[i].output, i);
- }
- }
-
- if (!matching) {
- return "Unable to find process with matching uid/gid.";
- }
- return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_server_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_server_limit = atoi(arg);
- /* you cannot change ServerLimit across a restart; ignore
- * any such attempts
- */
- if (first_server_limit &&
- tmp_server_limit != server_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- server_limit = tmp_server_limit;
-
- if (server_limit > MAX_SERVER_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ServerLimit of %d exceeds compile time limit "
- "of %d servers,", server_limit, MAX_SERVER_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
- server_limit = MAX_SERVER_LIMIT;
- }
- else if (server_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ServerLimit > 0, setting to 1");
- server_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_thread_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_thread_limit = atoi(arg);
- /* you cannot change ThreadLimit across a restart; ignore
- * any such attempts
- */
- if (first_thread_limit &&
- tmp_thread_limit != thread_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- thread_limit = tmp_thread_limit;
-
- if (thread_limit > MAX_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadLimit of %d exceeds compile time limit "
- "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
- thread_limit = MAX_THREAD_LIMIT;
- }
- else if (thread_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadLimit > 0, setting to 1");
- thread_limit = 1;
- }
- return NULL;
-}
-
-static const command_rec perchild_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("NumServers", set_num_daemons, NULL, RSRC_CONF,
- "Number of children alive at the same time"),
-AP_INIT_TAKE1("StartThreads", set_threads_to_start, NULL, RSRC_CONF,
- "Number of threads each child creates"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
- "Minimum number of idle threads per child, to handle "
- "request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
- "Maximum number of idle threads per child"),
-AP_INIT_TAKE1("MaxThreadsPerChild", set_max_threads, NULL, RSRC_CONF,
- "Maximum number of threads per child"),
-AP_INIT_TAKE3("ChildperUserID", set_child_per_uid, NULL, RSRC_CONF,
- "Specify a User and Group for a specific child process."),
-AP_INIT_TAKE2("AssignUserID", assign_childuid, NULL, RSRC_CONF,
- "Tie a virtual host to a specific child process."),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
- "Maximum value of NumServers for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
- "Maximum worker threads in a server for this run of Apache"),
-{ NULL }
-};
-
-static void *perchild_create_config(apr_pool_t *p, server_rec *s)
-{
- perchild_server_conf *c = (perchild_server_conf *)
- apr_pcalloc(p, sizeof(perchild_server_conf));
-
- c->input = -1;
- c->output = -1;
- return c;
-}
-
-module AP_MODULE_DECLARE_DATA mpm_perchild_module = {
- MPM20_MODULE_STUFF,
- ap_mpm_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- perchild_create_config, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- perchild_cmds, /* command apr_table_t */
- perchild_hooks /* register_hooks */
-};
-
diff --git a/server/mpm/experimental/threadpool/.cvsignore b/server/mpm/experimental/threadpool/.cvsignore
deleted file mode 100644
index 84df257214..0000000000
--- a/server/mpm/experimental/threadpool/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/experimental/threadpool/Makefile.in b/server/mpm/experimental/threadpool/Makefile.in
deleted file mode 100644
index ea0acb693b..0000000000
--- a/server/mpm/experimental/threadpool/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libthreadpool.la
-LTLIBRARY_SOURCES = threadpool.c pod.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/experimental/threadpool/README b/server/mpm/experimental/threadpool/README
deleted file mode 100644
index 86e8524cb6..0000000000
--- a/server/mpm/experimental/threadpool/README
+++ /dev/null
@@ -1,12 +0,0 @@
-Threadpool MPM:
-This is an experimental variant of the standard worker MPM.
-Rather than queuing connections like the worker MPM, the threadpool
-MPM queues idle worker threads and hands each accepted connection
-to the next available worker.
-
-The threadpool MPM can't match the performance of the worker MPM
-in benchmark testing. As of 2.0.39, some of the key load-throtting
-concepts from the threadpool MPM have been incorporated into the
-worker MPM. The threadpool code is useful primarily as a research
-platform; for general-purpose use, and for any production environments,
-use worker instead.
diff --git a/server/mpm/experimental/threadpool/config5.m4 b/server/mpm/experimental/threadpool/config5.m4
deleted file mode 100644
index 667b534a6d..0000000000
--- a/server/mpm/experimental/threadpool/config5.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "threadpool" ; then
- AC_CHECK_FUNCS(pthread_kill)
- APACHE_FAST_OUTPUT(server/mpm/$MPM_SUBDIR_NAME/Makefile)
-fi
diff --git a/server/mpm/experimental/threadpool/mpm.h b/server/mpm/experimental/threadpool/mpm.h
deleted file mode 100644
index ff631b067f..0000000000
--- a/server/mpm/experimental/threadpool/mpm.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "scoreboard.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_THREADPOOL_H
-#define APACHE_MPM_THREADPOOL_H
-
-#define THREADPOOL_MPM
-
-#define MPM_NAME "ThreadPool"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_WANT_SIGNAL_SERVER
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-#define AP_MPM_WANT_SET_STACKSIZE
-#define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-extern char ap_coredump_dir[MAX_STRING_LEN];
-
-#endif /* APACHE_MPM_THREADPOOL_H */
diff --git a/server/mpm/experimental/threadpool/mpm_default.h b/server/mpm/experimental/threadpool/mpm_default.h
deleted file mode 100644
index 5aaebd324f..0000000000
--- a/server/mpm/experimental/threadpool/mpm_default.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 3
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 3
-#endif
-
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 25
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/experimental/threadpool/pod.c b/server/mpm/experimental/threadpool/pod.c
deleted file mode 100644
index 7248768793..0000000000
--- a/server/mpm/experimental/threadpool/pod.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "pod.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
-{
- apr_status_t rv;
-
- *pod = apr_palloc(p, sizeof(**pod));
- rv = apr_file_pipe_create(&((*pod)->pod_in), &((*pod)->pod_out), p);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-/*
- apr_file_pipe_timeout_set((*pod)->pod_in, 0);
-*/
- (*pod)->p = p;
-
- return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_mpm_pod_check(ap_pod_t *pod)
-{
- char c;
- apr_os_file_t fd;
- int rc;
-
- /* we need to surface EINTR so we'll have to grab the
- * native file descriptor and do the OS read() ourselves
- */
- apr_os_file_get(&fd, pod->pod_in);
- rc = read(fd, &c, 1);
- if (rc == 1) {
- switch(c) {
- case RESTART_CHAR:
- return AP_RESTART;
- case GRACEFUL_CHAR:
- return AP_GRACEFUL;
- }
- }
- return AP_NORESTART;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod)
-{
- apr_status_t rv;
-
- rv = apr_file_close(pod->pod_out);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- rv = apr_file_close(pod->pod_in);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- return rv;
-}
-
-static apr_status_t pod_signal_internal(ap_pod_t *pod, int graceful)
-{
- apr_status_t rv;
- char char_of_death = graceful ? GRACEFUL_CHAR : RESTART_CHAR;
- apr_size_t one = 1;
-
- do {
- rv = apr_file_write(pod->pod_out, &char_of_death, &one);
- } while (APR_STATUS_IS_EINTR(rv));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
- "write pipe_of_death");
- }
- return rv;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int graceful)
-{
- return pod_signal_internal(pod, graceful);
-}
-
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int graceful)
-{
- int i;
- apr_status_t rv = APR_SUCCESS;
-
- for (i = 0; i < num && rv == APR_SUCCESS; i++) {
- rv = pod_signal_internal(pod, graceful);
- }
-}
-
diff --git a/server/mpm/experimental/threadpool/pod.h b/server/mpm/experimental/threadpool/pod.h
deleted file mode 100644
index f2204a4850..0000000000
--- a/server/mpm/experimental/threadpool/pod.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-
-#define RESTART_CHAR '$'
-#define GRACEFUL_CHAR '!'
-
-#define AP_RESTART 0
-#define AP_GRACEFUL 1
-
-typedef struct ap_pod_t ap_pod_t;
-
-struct ap_pod_t {
- apr_file_t *pod_in;
- apr_file_t *pod_out;
- apr_pool_t *p;
-};
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod);
-AP_DECLARE(int) ap_mpm_pod_check(ap_pod_t *pod);
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod);
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int graceful);
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int graceful);
diff --git a/server/mpm/experimental/threadpool/threadpool.c b/server/mpm/experimental/threadpool/threadpool.c
deleted file mode 100644
index 299088c22a..0000000000
--- a/server/mpm/experimental/threadpool/threadpool.c
+++ /dev/null
@@ -1,2251 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* The purpose of this MPM is to fix the design flaws in the threaded
- * model. Because of the way that pthreads and mutex locks interact,
- * it is basically impossible to cleanly gracefully shutdown a child
- * process if multiple threads are all blocked in accept. This model
- * fixes those problems.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_poll.h"
-#include "apr_thread_mutex.h"
-#include "apr_thread_cond.h"
-#include "apr_proc_mutex.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-#if !APR_HAS_THREADS
-#error The Worker MPM requires APR threads, but they are unavailable.
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "pod.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "scoreboard.h"
-#include "mpm_default.h"
-
-#include <signal.h>
-#include <limits.h> /* for INT_MAX */
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table. Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 16
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/* Limit on the threads per process. Clients will be locked out if more than
- * this * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-int ap_threads_per_child = 0; /* Worker threads per child */
-static int ap_daemons_to_start = 0;
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int ap_daemons_limit = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int dying = 0;
-static int workers_may_exit = 0;
-static int start_thread_may_exit = 0;
-static int listener_may_exit = 0;
-static int requests_this_child;
-static int num_listensocks = 0;
-static int resource_shortage = 0;
-static int mpm_state = AP_MPMQ_STARTING;
-
-/* The structure used to pass unique initialization info to each thread */
-typedef struct {
- int pid;
- int tid;
- int sd;
-} proc_info;
-
-/* Structure used to pass information to the thread responsible for
- * creating the rest of the threads.
- */
-typedef struct {
- apr_thread_t **threads;
- apr_thread_t *listener;
- int child_num_arg;
- apr_threadattr_t *threadattr;
-} thread_starter;
-
-#define ID_FROM_CHILD_THREAD(c, t) ((c * thread_limit) + t)
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts. We
- * use this value to optimize routines that have to scan the entire
- * scoreboard.
- */
-int ap_max_daemons_limit = -1;
-
-static ap_pod_t *pod;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* The worker MPM respects a couple of runtime flags that can aid
- * in debugging. Setting the -DNO_DETACH flag will prevent the root process
- * from detaching from its controlling terminal. Additionally, setting
- * the -DONE_PROCESS flag (which implies -DNO_DETACH) will get you the
- * child_main loop running in the process which originally started up.
- * This gives you a pretty nice debugging environment. (You'll get a SIGHUP
- * early in standalone_main; just continue through. This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-static apr_pool_t *pchild; /* Pool for httpd child stuff */
-
-static pid_t ap_my_pid; /* Linux getpid() doesn't work except in main
- thread. Use this instead */
-static pid_t parent_pid;
-static apr_os_thread_t *listener_os_thread;
-
-/* Locks for accept serialization */
-static apr_proc_mutex_t *accept_mutex;
-
-#if APR_O_NONBLOCK_INHERITED
-#undef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#endif /* APR_O_NONBLOCK_INHERITED */
-
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) (ap_listeners->next ? (stmt) : APR_SUCCESS)
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-#endif
-
-/* The LISTENER_SIGNAL signal will be sent from the main thread to the
- * listener thread to wake it up for graceful termination (what a child
- * process from an old generation does when the admin does "apachectl
- * graceful"). This signal will be blocked in all threads of a child
- * process except for the listener thread.
- */
-#define LISTENER_SIGNAL SIGHUP
-
-
-/* Possible states of a worker thread. */
-typedef enum {
- WORKER_IDLE,
- WORKER_BUSY,
- WORKER_TERMINATED
-} worker_state_e;
-
-/* Structure used to wake up an idle worker thread
- */
-typedef struct {
- apr_pool_t *pool;
- apr_socket_t *csd;
- worker_state_e state;
- apr_thread_cond_t *cond;
- apr_thread_mutex_t *mutex;
-} worker_wakeup_info;
-
-/* Structure used to hold a stack of idle worker threads
- */
-typedef struct {
- apr_thread_mutex_t *mutex;
- apr_thread_cond_t *cond;
- worker_wakeup_info **stack;
- apr_size_t nelts;
- apr_size_t nalloc;
- int terminated;
-} worker_stack;
-
-static worker_stack* worker_stack_create(apr_pool_t *pool, apr_size_t max)
-{
- apr_status_t rv;
- worker_stack *stack = (worker_stack *)apr_palloc(pool, sizeof(*stack));
-
- if ((rv = apr_thread_mutex_create(&stack->mutex, APR_THREAD_MUTEX_DEFAULT,
- pool)) != APR_SUCCESS) {
- return NULL;
- }
- if ((rv = apr_thread_cond_create(&stack->cond, pool)) != APR_SUCCESS) {
- return NULL;
- }
- stack->nelts = 0;
- stack->nalloc = max;
- stack->stack =
- (worker_wakeup_info **)apr_palloc(pool, stack->nalloc *
- sizeof(worker_wakeup_info *));
- stack->terminated = 0;
- return stack;
-}
-
-static apr_status_t worker_stack_wait(worker_stack *stack,
- worker_wakeup_info *wakeup)
-{
- apr_status_t rv;
-
- wakeup->state = WORKER_IDLE;
-
- if ((rv = apr_thread_mutex_lock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- if (stack->terminated) {
- if ((rv = apr_thread_mutex_unlock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- return APR_EOF;
- }
- if (stack->nelts == stack->nalloc) {
- if ((rv = apr_thread_mutex_unlock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- return APR_ENOSPC;
- }
- stack->stack[stack->nelts] = wakeup;
- /* Signal a blocking listener thread only if we just made the
- * stack non-empty. */
- if (stack->nelts++ == 0) {
- (void)apr_thread_cond_signal(stack->cond);
- }
- if ((rv = apr_thread_mutex_unlock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
-
- /* At this point we've already added this worker to the stack, now
- * we just wait until the listener has accept()ed a connection
- * for us. */
- if ((rv = apr_thread_mutex_lock(wakeup->mutex)) != APR_SUCCESS) {
- return rv;
- }
- while (wakeup->state == WORKER_IDLE) {
- if ((rv = apr_thread_cond_wait(wakeup->cond, wakeup->mutex)) !=
- APR_SUCCESS) {
- return rv;
- }
- }
- if ((rv = apr_thread_mutex_unlock(wakeup->mutex)) != APR_SUCCESS) {
- return rv;
- }
- return APR_SUCCESS;
-}
-
-static apr_status_t worker_stack_pop(worker_stack *stack,
- worker_wakeup_info **worker)
-{
- apr_status_t rv;
- if ((rv = apr_thread_mutex_lock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- AP_DEBUG_ASSERT(stack->nelts >= 0);
- while ((stack->nelts == 0) && (!stack->terminated)) {
- rv = apr_thread_cond_wait(stack->cond, stack->mutex);
- if (rv != APR_SUCCESS) {
- apr_status_t rv2;
- rv2 = apr_thread_mutex_unlock(stack->mutex);
- if (rv2 != APR_SUCCESS) {
- return rv2;
- }
- return rv;
- }
- }
- if (stack->terminated) {
- if ((rv = apr_thread_mutex_unlock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- return APR_EOF;
- }
- *worker = stack->stack[--stack->nelts];
- if ((rv = apr_thread_mutex_unlock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- return APR_SUCCESS;
-}
-
-static apr_status_t worker_stack_terminate(worker_stack *stack)
-{
- apr_status_t rv;
- worker_wakeup_info *worker;
-
- if ((rv = apr_thread_mutex_lock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- stack->terminated = 1;
- /* Wake up the listener thread. Although there will never be
- * more than one thread blocking on this condition, broadcast
- * just in case. */
- apr_thread_cond_broadcast(stack->cond);
- while (stack->nelts) {
- worker = stack->stack[--stack->nelts];
- apr_thread_mutex_lock(worker->mutex);
- worker->csd = 0;
- worker->state = WORKER_TERMINATED;
- apr_thread_cond_signal(worker->cond);
- apr_thread_mutex_unlock(worker->mutex);
- }
- if ((rv = apr_thread_mutex_unlock(stack->mutex)) != APR_SUCCESS) {
- return rv;
- }
- return APR_SUCCESS;
-}
-
-static worker_stack *idle_worker_stack;
-
-static void wakeup_listener(void)
-{
- apr_status_t rv;
-
- listener_may_exit = 1;
- if (!idle_worker_stack) {
- return;
- }
- if ((rv = apr_thread_mutex_lock(idle_worker_stack->mutex)) != APR_SUCCESS) {
- return;
- }
- if ((rv = apr_thread_cond_signal(idle_worker_stack->cond)) !=
- APR_SUCCESS) {
- return;
- }
- if ((rv = apr_thread_mutex_unlock(idle_worker_stack->mutex)) != APR_SUCCESS) {
- return;
- }
- if (!listener_os_thread) {
- /* XXX there is an obscure path that this doesn't handle perfectly:
- * right after listener thread is created but before
- * listener_os_thread is set, the first worker thread hits an
- * error and starts graceful termination
- */
- return;
- }
- /*
- * we should just be able to "kill(ap_my_pid, LISTENER_SIGNAL)" on all
- * platforms and wake up the listener thread since it is the only thread
- * with SIGHUP unblocked, but that doesn't work on Linux
- */
-#ifdef HAVE_PTHREAD_KILL
- pthread_kill(*listener_os_thread, LISTENER_SIGNAL);
-#else
- kill(ap_my_pid, LISTENER_SIGNAL);
-#endif
-}
-
-#define ST_INIT 0
-#define ST_GRACEFUL 1
-#define ST_UNGRACEFUL 2
-
-static int terminate_mode = ST_INIT;
-
-static void signal_threads(int mode)
-{
- if (terminate_mode == mode) {
- return;
- }
- terminate_mode = mode;
- mpm_state = AP_MPMQ_STOPPING;
-
- /* in case we weren't called from the listener thread, wake up the
- * listener thread
- */
- wakeup_listener();
-
- /* for ungraceful termination, let the workers exit now;
- * for graceful termination, the listener thread will notify the
- * workers to exit once it has stopped accepting new connections
- */
- if (mode == ST_UNGRACEFUL) {
- workers_may_exit = 1;
- worker_stack_terminate(idle_worker_stack);
- }
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_max_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_STATIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = server_limit;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = thread_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = ap_threads_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = min_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = max_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = ap_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code) __attribute__ ((noreturn));
-static void clean_child_exit(int code)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (pchild) {
- apr_pool_destroy(pchild);
- }
- exit(code);
-}
-
-static void just_die(int sig)
-{
- clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static volatile int child_fatal;
-ap_generation_t volatile ap_my_generation;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals.
- * Previously this was initiated in sig_term() and restart() signal handlers,
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate. Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (shutdown_pending == 1) {
- /* Um, is this _probably_ not an error, if the user has
- * tried to do a shutdown twice quickly, so we won't
- * worry about reporting it.
- */
- return;
- }
- shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = graceful;
-}
-
-static void sig_term(int sig)
-{
- ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
- ap_start_restart(sig == AP_SIG_GRACEFUL);
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
- struct sigaction sa;
-#endif
-
- if (!one_process) {
- ap_fatal_signal_setup(ap_server_conf, pconf);
- }
-
-#ifndef NO_USE_SIGACTION
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sa.sa_handler = sig_term;
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGTERM)");
-#ifdef SIGINT
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXCPU, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXFSZ, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGPIPE)");
-#endif
-
- /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
- * processing one */
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
- sa.sa_handler = restart;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGHUP)");
- if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
- if (!one_process) {
-#ifdef SIGXCPU
- apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
- apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
- }
-
- apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
- apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
- apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
- apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
- /* XXX this is really a bad confusing obsolete name
- * maybe it should be ap_mpm_process_exiting?
- */
-{
- /* note: for a graceful termination, listener_may_exit will be set before
- * workers_may_exit, so check listener_may_exit
- */
- return listener_may_exit;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num,
- int my_thread_num, apr_bucket_alloc_t *bucket_alloc)
-{
- conn_rec *current_conn;
- long conn_id = ID_FROM_CHILD_THREAD(my_child_num, my_thread_num);
- int csd;
- ap_sb_handle_t *sbh;
-
- ap_create_sb_handle(&sbh, p, my_child_num, my_thread_num);
- apr_os_sock_get(&csd, sock);
-
- current_conn = ap_run_create_connection(p, ap_server_conf, sock,
- conn_id, sbh, bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, sock);
- ap_lingering_close(current_conn);
- }
-}
-
-/* requests_this_child has gone to zero or below. See if the admin coded
- "MaxRequestsPerChild 0", and keep going in that case. Doing it this way
- simplifies the hot path in worker_thread */
-static void check_infinite_requests(void)
-{
- if (ap_max_requests_per_child) {
- signal_threads(ST_GRACEFUL);
- }
- else {
- /* wow! if you're executing this code, you may have set a record.
- * either this child process has served over 2 billion requests, or
- * you're running a threaded 2.0 on a 16 bit machine.
- *
- * I'll buy pizza and beers at Apachecon for the first person to do
- * the former without cheating (dorking with INT_MAX, or running with
- * uncommitted performance patches, for example).
- *
- * for the latter case, you probably deserve a beer too. Greg Ames
- */
-
- requests_this_child = INT_MAX; /* keep going */
- }
-}
-
-static void unblock_signal(int sig)
-{
- sigset_t sig_mask;
-
- sigemptyset(&sig_mask);
- sigaddset(&sig_mask, sig);
-#if defined(SIGPROCMASK_SETS_THREAD_MASK)
- sigprocmask(SIG_UNBLOCK, &sig_mask, NULL);
-#else
- pthread_sigmask(SIG_UNBLOCK, &sig_mask, NULL);
-#endif
-}
-
-static void dummy_signal_handler(int sig)
-{
- /* XXX If specifying SIG_IGN is guaranteed to unblock a syscall,
- * then we don't need this goofy function.
- */
-}
-
-static void *listener_thread(apr_thread_t *thd, void * dummy)
-{
- proc_info * ti = dummy;
- int process_slot = ti->pid;
- apr_pool_t *tpool = apr_thread_pool_get(thd);
- void *csd = NULL;
- apr_pool_t *ptrans = NULL; /* Pool for per-transaction stuff */
- apr_pollset_t *pollset;
- apr_status_t rv;
- ap_listen_rec *lr;
- worker_wakeup_info *worker = NULL;
- int last_poll_idx = 0;
-
- free(ti);
-
- /* ### check the status */
- (void) apr_pollset_create(&pollset, num_listensocks, tpool, 0);
-
- for (lr = ap_listeners; lr != NULL; lr = lr->next) {
- apr_pollfd_t pfd = { 0 };
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = lr->sd;
- pfd.reqevents = APR_POLLIN;
- pfd.client_data = lr;
-
- /* ### check the status */
- (void) apr_pollset_add(pollset, &pfd);
- }
-
- /* Unblock the signal used to wake this thread up, and set a handler for
- * it.
- */
- unblock_signal(LISTENER_SIGNAL);
- apr_signal(LISTENER_SIGNAL, dummy_signal_handler);
-
- /* TODO: Switch to a system where threads reuse the results from earlier
- poll calls - manoj */
- while (1) {
- /* TODO: requests_this_child should be synchronized - aaron */
- if (requests_this_child <= 0) {
- check_infinite_requests();
- }
- if (listener_may_exit) break;
-
- if (worker == NULL) {
- rv = worker_stack_pop(idle_worker_stack, &worker);
- if (APR_STATUS_IS_EOF(rv)) {
- break;
- }
- else if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "worker_stack_pop failed");
- break;
- }
- ptrans = worker->pool;
- }
- AP_DEBUG_ASSERT(worker->state == WORKER_IDLE);
-
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex)))
- != APR_SUCCESS) {
- int level = APLOG_EMERG;
-
- if (listener_may_exit) {
- break;
- }
- if (ap_scoreboard_image->parent[process_slot].generation !=
- ap_scoreboard_image->global->running_generation) {
- level = APLOG_DEBUG; /* common to get these at restart time */
- }
- ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
- "apr_proc_mutex_lock failed. Attempting to shutdown "
- "process gracefully.");
- signal_threads(ST_GRACEFUL);
- break; /* skip the lock release */
- }
-
- if (!APR_O_NONBLOCK_INHERITED && !ap_listeners->next) {
- /* Only one listener, so skip the poll */
- lr = ap_listeners;
- }
- else {
- while (!listener_may_exit) {
- apr_status_t ret;
- apr_int32_t numdesc;
- const apr_pollfd_t *pdesc;
-
- ret = apr_pollset_poll(pollset, -1, &numdesc, &pdesc);
- if (ret != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(ret)) {
- continue;
- }
-
- /* apr_pollset_poll() will only return errors in catastrophic
- * circumstances. Let's try exiting gracefully, for now. */
- ap_log_error(APLOG_MARK, APLOG_ERR, ret, (const server_rec *)
- ap_server_conf, "apr_pollset_poll: (listen)");
- signal_threads(ST_GRACEFUL);
- }
-
- if (listener_may_exit) break;
-
- /* We can always use pdesc[0], but sockets at position N
- * could end up completely starved of attention in a very
- * busy server. Therefore, we round-robin across the
- * returned set of descriptors. While it is possible that
- * the returned set of descriptors might flip around and
- * continue to starve some sockets, we happen to know the
- * internal pollset implementation retains ordering
- * stability of the sockets. Thus, the round-robin should
- * ensure that a socket will eventually be serviced.
- */
- if (last_poll_idx >= numdesc)
- last_poll_idx = 0;
-
- /* Grab a listener record from the client_data of the poll
- * descriptor, and advance our saved index to round-robin
- * the next fetch.
- *
- * ### hmm... this descriptor might have POLLERR rather
- * ### than POLLIN
- */
- lr = pdesc[last_poll_idx++].client_data;
- break;
- }
- }
- if (!listener_may_exit) {
- rv = lr->accept_func(&csd, lr, ptrans);
- /* later we trash rv and rely on csd to indicate success/failure */
- AP_DEBUG_ASSERT(rv == APR_SUCCESS || !csd);
-
- if (rv == APR_EGENERAL) {
- /* E[NM]FILE, ENOMEM, etc */
- resource_shortage = 1;
- signal_threads(ST_GRACEFUL);
- }
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
- != APR_SUCCESS) {
- int level = APLOG_EMERG;
-
- if (listener_may_exit) {
- break;
- }
- if (ap_scoreboard_image->parent[process_slot].generation !=
- ap_scoreboard_image->global->running_generation) {
- level = APLOG_DEBUG; /* common to get these at restart time */
- }
- ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- }
- if (csd != NULL) {
- /* Wake up the sleeping worker. */
- apr_thread_mutex_lock(worker->mutex);
- worker->csd = (apr_socket_t *)csd;
- worker->state = WORKER_BUSY;
- /* Posix allows us to signal this condition without
- * owning the associated mutex, but in that case it can
- * not guarantee predictable scheduling. See
- * _UNIX Network Programming: Interprocess Communication_
- * by W. Richard Stevens, Vol 2, 2nd Ed, pp. 170-171. */
- apr_thread_cond_signal(worker->cond);
- apr_thread_mutex_unlock(worker->mutex);
- worker = NULL;
- }
- }
- else {
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- }
- break;
- }
- }
-
- workers_may_exit = 1;
- if (worker) {
- apr_thread_mutex_lock(worker->mutex);
- worker->state = WORKER_TERMINATED;
- /* Posix allows us to signal this condition without
- * owning the associated mutex, but in that case it can
- * not guarantee predictable scheduling. See
- * _UNIX Network Programming: Interprocess Communication_
- * by W. Richard Stevens, Vol 2, 2nd Ed, pp. 170-171. */
- apr_thread_cond_signal(worker->cond);
- apr_thread_mutex_unlock(worker->mutex);
- }
- worker_stack_terminate(idle_worker_stack);
- dying = 1;
- ap_scoreboard_image->parent[process_slot].quiescing = 1;
-
- /* wake up the main thread */
- kill(ap_my_pid, SIGTERM);
-
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-/* XXX For ungraceful termination/restart, we definitely don't want to
- * wait for active connections to finish but we may want to wait
- * for idle workers to get out of the queue code and release mutexes,
- * since those mutexes are cleaned up pretty soon and some systems
- * may not react favorably (i.e., segfault) if operations are attempted
- * on cleaned-up mutexes.
- */
-static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
-{
- proc_info * ti = dummy;
- int process_slot = ti->pid;
- int thread_slot = ti->tid;
- apr_bucket_alloc_t *bucket_alloc;
- apr_pool_t *tpool = apr_thread_pool_get(thd);
- apr_pool_t *ptrans; /* Pool for per-transaction stuff */
- apr_allocator_t *allocator;
- apr_status_t rv;
- worker_wakeup_info *wakeup;
-
- free(ti);
-
- ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_STARTING, NULL);
-
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- /* XXX: why is ptrans's parent not tpool? --jcw 08/2003 */
- apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
- apr_allocator_owner_set(allocator, ptrans);
- bucket_alloc = apr_bucket_alloc_create_ex(allocator);
-
- wakeup = (worker_wakeup_info *)apr_palloc(tpool, sizeof(*wakeup));
- wakeup->pool = ptrans;
- if ((rv = apr_thread_cond_create(&wakeup->cond, tpool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_thread_cond_create failed. Attempting to shutdown "
- "process gracefully.");
- signal_threads(ST_GRACEFUL);
- apr_thread_exit(thd, rv);
- }
- if ((rv = apr_thread_mutex_create(&wakeup->mutex, APR_THREAD_MUTEX_DEFAULT,
- tpool)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_thread_mutex_create failed. Attempting to shutdown "
- "process gracefully.");
- signal_threads(ST_GRACEFUL);
- apr_thread_exit(thd, rv);
- }
-
- while (!workers_may_exit) {
- ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL);
- rv = worker_stack_wait(idle_worker_stack, wakeup);
- if (APR_STATUS_IS_EOF(rv)) {
- break; /* The queue has been terminated. */
- }
- else if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "worker_stack_wait failed");
- break; /* Treat all other errors as fatal. */
- }
- else if (wakeup->state == WORKER_TERMINATED) {
- break; /* They told us to quit. */
- }
- AP_DEBUG_ASSERT(wakeup->state != WORKER_IDLE);
- process_socket(ptrans, wakeup->csd,
- process_slot, thread_slot, bucket_alloc);
- requests_this_child--; /* FIXME: should be synchronized - aaron */
- apr_pool_clear(ptrans);
- }
-
- ap_update_child_status_from_indexes(process_slot, thread_slot,
- (dying) ? SERVER_DEAD : SERVER_GRACEFUL, (request_rec *) NULL);
-
- apr_bucket_alloc_destroy(bucket_alloc);
-
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-static int check_signal(int signum)
-{
- switch (signum) {
- case SIGTERM:
- case SIGINT:
- return 1;
- }
- return 0;
-}
-
-static void create_listener_thread(thread_starter *ts)
-{
- int my_child_num = ts->child_num_arg;
- apr_threadattr_t *thread_attr = ts->threadattr;
- proc_info *my_info;
- apr_status_t rv;
-
- my_info = (proc_info *)malloc(sizeof(proc_info));
- my_info->pid = my_child_num;
- my_info->tid = -1; /* listener thread doesn't have a thread slot */
- my_info->sd = 0;
- rv = apr_thread_create(&ts->listener, thread_attr, listener_thread,
- my_info, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create listener thread");
- /* In case system resources are maxxed out, we don't want
- * Apache running away with the CPU trying to fork over and
- * over and over again if we exit.
- * XXX Jeff doesn't see how Apache is going to try to fork again since
- * the exit code is APEXIT_CHILDFATAL
- */
- apr_sleep(10 * APR_USEC_PER_SEC);
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- apr_os_thread_get(&listener_os_thread, ts->listener);
-}
-
-/* XXX under some circumstances not understood, children can get stuck
- * in start_threads forever trying to take over slots which will
- * never be cleaned up; for now there is an APLOG_DEBUG message issued
- * every so often when this condition occurs
- */
-static void * APR_THREAD_FUNC start_threads(apr_thread_t *thd, void *dummy)
-{
- thread_starter *ts = dummy;
- apr_thread_t **threads = ts->threads;
- apr_threadattr_t *thread_attr = ts->threadattr;
- int child_num_arg = ts->child_num_arg;
- int my_child_num = child_num_arg;
- proc_info *my_info;
- apr_status_t rv;
- int i;
- int threads_created = 0;
- int loops;
- int prev_threads_created;
-
- idle_worker_stack = worker_stack_create(pchild, ap_threads_per_child);
- if (idle_worker_stack == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, 0, ap_server_conf,
- "worker_stack_create() failed");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- loops = prev_threads_created = 0;
- while (1) {
- /* ap_threads_per_child does not include the listener thread */
- for (i = 0; i < ap_threads_per_child; i++) {
- int status = ap_scoreboard_image->servers[child_num_arg][i].status;
-
- if (status != SERVER_GRACEFUL && status != SERVER_DEAD) {
- continue;
- }
-
- my_info = (proc_info *)malloc(sizeof(proc_info));
- if (my_info == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
- "malloc: out of memory");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- my_info->pid = my_child_num;
- my_info->tid = i;
- my_info->sd = 0;
-
- /* We are creating threads right now */
- ap_update_child_status_from_indexes(my_child_num, i,
- SERVER_STARTING, NULL);
- /* We let each thread update its own scoreboard entry. This is
- * done because it lets us deal with tid better.
- */
- rv = apr_thread_create(&threads[i], thread_attr,
- worker_thread, my_info, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- apr_sleep(10 * APR_USEC_PER_SEC);
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- threads_created++;
- if (threads_created == 1) {
- /* now that we have a worker thread, it makes sense to create
- * a listener thread (we don't want a listener without a worker!)
- */
- create_listener_thread(ts);
- }
- }
- if (start_thread_may_exit || threads_created == ap_threads_per_child) {
- break;
- }
- /* wait for previous generation to clean up an entry */
- apr_sleep(1 * APR_USEC_PER_SEC);
- ++loops;
- if (loops % 120 == 0) { /* every couple of minutes */
- if (prev_threads_created == threads_created) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "child %" APR_PID_T_FMT " isn't taking over "
- "slots very quickly (%d of %d)",
- ap_my_pid, threads_created, ap_threads_per_child);
- }
- prev_threads_created = threads_created;
- }
- }
-
- /* What state should this child_main process be listed as in the
- * scoreboard...?
- * ap_update_child_status_from_indexes(my_child_num, i, SERVER_STARTING,
- * (request_rec *) NULL);
- *
- * This state should be listed separately in the scoreboard, in some kind
- * of process_status, not mixed in with the worker threads' status.
- * "life_status" is almost right, but it's in the worker's structure, and
- * the name could be clearer. gla
- */
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-static void join_workers(apr_thread_t *listener, apr_thread_t **threads)
-{
- int i;
- apr_status_t rv, thread_rv;
-
- if (listener) {
- int iter;
-
- /* deal with a rare timing window which affects waking up the
- * listener thread... if the signal sent to the listener thread
- * is delivered between the time it verifies that the
- * listener_may_exit flag is clear and the time it enters a
- * blocking syscall, the signal didn't do any good... work around
- * that by sleeping briefly and sending it again
- */
-
- iter = 0;
- while (iter < 10 &&
-#ifdef HAVE_PTHREAD_KILL
- pthread_kill(*listener_os_thread, 0)
-#else
- kill(ap_my_pid, 0)
-#endif
- == 0) {
- /* listener not dead yet */
- apr_sleep(APR_USEC_PER_SEC / 2);
- wakeup_listener();
- ++iter;
- }
- if (iter >= 10) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "the listener thread didn't exit");
- }
- else {
- rv = apr_thread_join(&thread_rv, listener);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join listener thread");
- }
- }
- }
-
- for (i = 0; i < ap_threads_per_child; i++) {
- if (threads[i]) { /* if we ever created this thread */
- rv = apr_thread_join(&thread_rv, threads[i]);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join worker "
- "thread %d",
- i);
- }
- }
- }
-}
-
-static void join_start_thread(apr_thread_t *start_thread_id)
-{
- apr_status_t rv, thread_rv;
-
- start_thread_may_exit = 1; /* tell it to give up in case it is still
- * trying to take over slots from a
- * previous generation
- */
- rv = apr_thread_join(&thread_rv, start_thread_id);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join the start "
- "thread");
- }
-}
-
-static void child_main(int child_num_arg)
-{
- apr_thread_t **threads;
- apr_status_t rv;
- thread_starter *ts;
- apr_threadattr_t *thread_attr;
- apr_thread_t *start_thread_id;
-
- mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as this
- * child initializes
- */
- ap_my_pid = getpid();
- ap_fatal_signal_child_setup(ap_server_conf);
- apr_pool_create(&pchild, pconf);
-
- /*stuff to do before we switch id's, so we have permissions.*/
- ap_reopen_scoreboard(pchild, NULL, 0);
-
- rv = SAFE_ACCEPT(apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname,
- pchild));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize cross-process lock in child");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (unixd_setup_child()) {
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_run_child_init(pchild, ap_server_conf);
-
- /* done with init critical section */
-
- /* Just use the standard apr_setup_signal_thread to block all signals
- * from being received. The child processes no longer use signals for
- * any communication with the parent process.
- */
- rv = apr_setup_signal_thread();
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize signal thread");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (ap_max_requests_per_child) {
- requests_this_child = ap_max_requests_per_child;
- }
- else {
- /* coding a value of zero means infinity */
- requests_this_child = INT_MAX;
- }
-
- /* Setup worker threads */
-
- /* clear the storage; we may not create all our threads immediately,
- * and we want a 0 entry to indicate a thread which was not created
- */
- threads = (apr_thread_t **)calloc(1,
- sizeof(apr_thread_t *) * ap_threads_per_child);
- if (threads == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
- "malloc: out of memory");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ts = (thread_starter *)apr_palloc(pchild, sizeof(*ts));
-
- apr_threadattr_create(&thread_attr, pchild);
- /* 0 means PTHREAD_CREATE_JOINABLE */
- apr_threadattr_detach_set(thread_attr, 0);
- if (ap_thread_stacksize != 0) {
- apr_threadattr_stacksize_set(thread_attr, ap_thread_stacksize);
- }
-
- ts->threads = threads;
- ts->listener = NULL;
- ts->child_num_arg = child_num_arg;
- ts->threadattr = thread_attr;
-
- rv = apr_thread_create(&start_thread_id, thread_attr, start_threads,
- ts, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- apr_sleep(10 * APR_USEC_PER_SEC);
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- mpm_state = AP_MPMQ_RUNNING;
-
- /* If we are only running in one_process mode, we will want to
- * still handle signals. */
- if (one_process) {
- /* Block until we get a terminating signal. */
- apr_signal_thread(check_signal);
- /* make sure the start thread has finished; signal_threads()
- * and join_workers() depend on that
- */
- /* XXX join_start_thread() won't be awakened if one of our
- * threads encounters a critical error and attempts to
- * shutdown this child
- */
- join_start_thread(start_thread_id);
- signal_threads(ST_UNGRACEFUL); /* helps us terminate a little more
- * quickly than the dispatch of the signal thread
- * beats the Pipe of Death and the browsers
- */
- /* A terminating signal was received. Now join each of the
- * workers to clean them up.
- * If the worker already exited, then the join frees
- * their resources and returns.
- * If the worker hasn't exited, then this blocks until
- * they have (then cleans up).
- */
- join_workers(ts->listener, threads);
- }
- else { /* !one_process */
- /* remove SIGTERM from the set of blocked signals... if one of
- * the other threads in the process needs to take us down
- * (e.g., for MaxRequestsPerChild) it will send us SIGTERM
- */
- unblock_signal(SIGTERM);
- apr_signal(SIGTERM, dummy_signal_handler);
- /* Watch for any messages from the parent over the POD */
- while (1) {
- rv = ap_mpm_pod_check(pod);
- if (rv == AP_NORESTART) {
- /* see if termination was triggered while we slept */
- switch(terminate_mode) {
- case ST_GRACEFUL:
- rv = AP_GRACEFUL;
- break;
- case ST_UNGRACEFUL:
- rv = AP_RESTART;
- break;
- }
- }
- if (rv == AP_GRACEFUL || rv == AP_RESTART) {
- /* make sure the start thread has finished;
- * signal_threads() and join_workers depend on that
- */
- join_start_thread(start_thread_id);
- signal_threads(rv == AP_GRACEFUL ? ST_GRACEFUL : ST_UNGRACEFUL);
- break;
- }
- }
-
- if (rv == AP_GRACEFUL) {
- /* A terminating signal was received. Now join each of the
- * workers to clean them up.
- * If the worker already exited, then the join frees
- * their resources and returns.
- * If the worker hasn't exited, then this blocks until
- * they have (then cleans up).
- */
- join_workers(ts->listener, threads);
- }
- }
-
- free(threads);
-
- clean_child_exit(resource_shortage ? APEXIT_CHILDSICK : 0);
-}
-
-static int make_child(server_rec *s, int slot)
-{
- int pid;
-
- if (slot + 1 > ap_max_daemons_limit) {
- ap_max_daemons_limit = slot + 1;
- }
-
- if (one_process) {
- set_signals();
- ap_scoreboard_image->parent[slot].pid = getpid();
- child_main(slot);
- }
-
- if ((pid = fork()) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, s,
- "fork: Unable to fork new process");
-
- /* fork didn't succeed. Fix the scoreboard or else
- * it will say SERVER_STARTING forever and ever
- */
- ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD, NULL);
-
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again. */
- apr_sleep(10 * APR_USEC_PER_SEC);
-
- return -1;
- }
-
- if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
- /* By default, AIX binds to a single processor. This bit unbinds
- * children which will then bind to another CPU.
- */
- int status = bindprocessor(BINDPROCESS, (int)getpid(),
- PROCESSOR_CLASS_ANY);
- if (status != OK)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno,
- ap_server_conf,
- "processor unbind failed %d", status);
-#endif
- RAISE_SIGSTOP(MAKE_CHILD);
-
- apr_signal(SIGTERM, just_die);
- child_main(slot);
-
- clean_child_exit(0);
- }
- /* else */
- ap_scoreboard_image->parent[slot].quiescing = 0;
- ap_scoreboard_image->parent[slot].pid = pid;
- return 0;
-}
-
-/* start up a bunch of children */
-static void startup_children(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
- if (ap_scoreboard_image->parent[i].pid != 0) {
- continue;
- }
- if (make_child(ap_server_conf, i) < 0) {
- break;
- }
- --number_to_start;
- }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(void)
-{
- int i, j;
- int idle_thread_count;
- worker_score *ws;
- process_score *ps;
- int free_length;
- int totally_free_length = 0;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead;
- int total_non_dead;
-
- /* initialize the free_list */
- free_length = 0;
-
- idle_thread_count = 0;
- last_non_dead = -1;
- total_non_dead = 0;
-
- for (i = 0; i < ap_daemons_limit; ++i) {
- /* Initialization to satisfy the compiler. It doesn't know
- * that ap_threads_per_child is always > 0 */
- int status = SERVER_DEAD;
- int any_dying_threads = 0;
- int any_dead_threads = 0;
- int all_dead_threads = 1;
-
- if (i >= ap_max_daemons_limit && totally_free_length == idle_spawn_rate)
- break;
- ps = &ap_scoreboard_image->parent[i];
- for (j = 0; j < ap_threads_per_child; j++) {
- ws = &ap_scoreboard_image->servers[i][j];
- status = ws->status;
-
- /* XXX any_dying_threads is probably no longer needed GLA */
- any_dying_threads = any_dying_threads ||
- (status == SERVER_GRACEFUL);
- any_dead_threads = any_dead_threads || (status == SERVER_DEAD);
- all_dead_threads = all_dead_threads &&
- (status == SERVER_DEAD ||
- status == SERVER_GRACEFUL);
-
- /* We consider a starting server as idle because we started it
- * at least a cycle ago, and if it still hasn't finished starting
- * then we're just going to swamp things worse by forking more.
- * So we hopefully won't need to fork more if we count it.
- * This depends on the ordering of SERVER_READY and SERVER_STARTING.
- */
- if (status <= SERVER_READY && status != SERVER_DEAD &&
- !ps->quiescing &&
- ps->generation == ap_my_generation &&
- /* XXX the following shouldn't be necessary if we clean up
- * properly after seg faults, but we're not yet GLA
- */
- ps->pid != 0) {
- ++idle_thread_count;
- }
- }
- if (any_dead_threads && totally_free_length < idle_spawn_rate
- && (!ps->pid /* no process in the slot */
- || ps->quiescing)) { /* or at least one is going away */
- if (all_dead_threads) {
- /* great! we prefer these, because the new process can
- * start more threads sooner. So prioritize this slot
- * by putting it ahead of any slots with active threads.
- *
- * first, make room by moving a slot that's potentially still
- * in use to the end of the array
- */
- free_slots[free_length] = free_slots[totally_free_length];
- free_slots[totally_free_length++] = i;
- }
- else {
- /* slot is still in use - back of the bus
- */
- free_slots[free_length] = i;
- }
- ++free_length;
- }
- /* XXX if (!ps->quiescing) is probably more reliable GLA */
- if (!any_dying_threads) {
- last_non_dead = i;
- ++total_non_dead;
- }
- }
- ap_max_daemons_limit = last_non_dead + 1;
-
- if (idle_thread_count > max_spare_threads) {
- /* Kill off one child */
- ap_mpm_pod_signal(pod, TRUE);
- idle_spawn_rate = 1;
- }
- else if (idle_thread_count < min_spare_threads) {
- /* terminate the free list */
- if (free_length == 0) {
- /* only report this condition once */
- static int reported = 0;
-
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- ap_server_conf,
- "server reached MaxClients setting, consider"
- " raising the MaxClients setting");
- reported = 1;
- }
- idle_spawn_rate = 1;
- }
- else {
- if (free_length > idle_spawn_rate) {
- free_length = idle_spawn_rate;
- }
- if (idle_spawn_rate >= 8) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "server seems busy, (you may need "
- "to increase StartServers, ThreadsPerChild "
- "or Min/MaxSpareThreads), "
- "spawning %d children, there are around %d idle "
- "threads, and %d total children", free_length,
- idle_thread_count, total_non_dead);
- }
- for (i = 0; i < free_length; ++i) {
- make_child(ap_server_conf, free_slots[i]);
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- }
- else if (idle_spawn_rate < MAX_SPAWN_RATE) {
- idle_spawn_rate *= 2;
- }
- }
- }
- else {
- idle_spawn_rate = 1;
- }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
- int child_slot;
- apr_exit_why_e exitwhy;
- int status, processed_status;
- apr_proc_t pid;
- int i;
-
- while (!restart_pending && !shutdown_pending) {
- ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
- if (pid.pid != -1) {
- processed_status = ap_process_child_status(&pid, exitwhy, status);
- if (processed_status == APEXIT_CHILDFATAL) {
- shutdown_pending = 1;
- child_fatal = 1;
- return;
- }
- /* non-fatal death... note that it's gone in the scoreboard. */
- child_slot = find_child_by_pid(&pid);
- if (child_slot >= 0) {
- for (i = 0; i < ap_threads_per_child; i++)
- ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD,
- (request_rec *) NULL);
-
- ap_scoreboard_image->parent[child_slot].pid = 0;
- ap_scoreboard_image->parent[child_slot].quiescing = 0;
- if (processed_status == APEXIT_CHILDSICK) {
- /* resource shortage, minimize the fork rate */
- idle_spawn_rate = 1;
- }
- else if (remaining_children_to_start
- && child_slot < ap_daemons_limit) {
- /* we're still doing a 1-for-1 replacement of dead
- * children with new children
- */
- make_child(ap_server_conf, child_slot);
- --remaining_children_to_start;
- }
-#if APR_HAS_OTHER_CHILD
- }
- else if (apr_proc_other_child_alert(&pid, APR_OC_REASON_DEATH,
- status) == 0) {
- /* handled */
-#endif
- }
- else if (is_graceful) {
- /* Great, we've probably just lost a slot in the
- * scoreboard. Somehow we don't know about this child.
- */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- ap_server_conf,
- "long lost child came home! (pid %ld)",
- (long)pid.pid);
- }
- /* Don't perform idle maintenance when a child dies,
- * only do it when there's a timeout. Remember only a
- * finite number of children can die, and it's pretty
- * pathological for a lot to die suddenly.
- */
- continue;
- }
- else if (remaining_children_to_start) {
- /* we hit a 1 second timeout in which none of the previous
- * generation of children needed to be reaped... so assume
- * they're all done, and pick up the slack if any is left.
- */
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- /* In any event we really shouldn't do the code below because
- * few of the servers we just started are in the IDLE state
- * yet, so we'd mistakenly create an extra server.
- */
- continue;
- }
-
- perform_idle_server_maintenance();
- }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- int remaining_children_to_start;
- apr_status_t rv;
-
- ap_log_pid(pconf, ap_pid_fname);
-
- first_server_limit = server_limit;
- first_thread_limit = thread_limit;
- if (changed_limit_at_restart) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "WARNING: Attempt to change ServerLimit or ThreadLimit "
- "ignored during restart");
- changed_limit_at_restart = 0;
- }
-
- /* Initialize cross-process accept lock */
- ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
- ap_server_root_relative(_pconf, ap_lock_fname),
- ap_my_pid);
-
- rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname,
- ap_accept_lock_mech, _pconf);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't create accept lock");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
-
-#if APR_USE_SYSVSEM_SERIALIZE
- if (ap_accept_lock_mech == APR_LOCK_DEFAULT ||
- ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#else
- if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#endif
- rv = unixd_set_proc_mutex_perms(accept_mutex);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't set permissions on cross-process lock; "
- "check User and Group directives");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- }
-
- if (!is_graceful) {
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- /* fix the generation number in the global score; we just got a new,
- * cleared scoreboard
- */
- ap_scoreboard_image->global->running_generation = ap_my_generation;
- }
-
- set_signals();
- /* Don't thrash... */
- if (max_spare_threads < min_spare_threads + ap_threads_per_child)
- max_spare_threads = min_spare_threads + ap_threads_per_child;
-
- /* If we're doing a graceful_restart then we're going to see a lot
- * of children exiting immediately when we get into the main loop
- * below (because we just sent them AP_SIG_GRACEFUL). This happens pretty
- * rapidly... and for each one that exits we'll start a new one until
- * we reach at least daemons_min_free. But we may be permitted to
- * start more than that, so we'll just keep track of how many we're
- * supposed to start up without the 1 second penalty between each fork.
- */
- remaining_children_to_start = ap_daemons_to_start;
- if (remaining_children_to_start > ap_daemons_limit) {
- remaining_children_to_start = ap_daemons_limit;
- }
- if (!is_graceful) {
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- }
- else {
- /* give the system some time to recover before kicking into
- * exponential mode */
- hold_off_on_exponential_spawning = 10;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(accept_mutex),
- apr_proc_mutex_defname());
-#endif
- restart_pending = shutdown_pending = 0;
- mpm_state = AP_MPMQ_RUNNING;
-
- server_main_loop(remaining_children_to_start);
- mpm_state = AP_MPMQ_STOPPING;
-
- if (shutdown_pending) {
- /* Time to gracefully shut down:
- * Kill child processes, tell them to call child_exit, etc...
- * (By "gracefully" we don't mean graceful in the same sense as
- * "apachectl graceful" where we allow old connections to finish.)
- */
- ap_mpm_pod_killpg(pod, ap_daemons_limit, FALSE);
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
-
- if (!child_fatal) {
- /* cleanup pid file on normal shutdown */
- const char *pidfile = NULL;
- pidfile = ap_server_root_relative (pconf, ap_pid_fname);
- if ( pidfile != NULL && unlink(pidfile) == 0)
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "removed PID file %s (pid=%ld)",
- pidfile, (long)getpid());
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0,
- ap_server_conf, "caught SIGTERM, shutting down");
- }
- return 1;
- }
-
- /* we've been told to restart */
- apr_signal(SIGHUP, SIG_IGN);
-
- if (one_process) {
- /* not worth thinking about */
- return 1;
- }
-
- /* advance to the next generation */
- /* XXX: we really need to make sure this new generation number isn't in
- * use by any of the children.
- */
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
-
- if (is_graceful) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- AP_SIG_GRACEFUL_STRING " received. Doing graceful restart");
- /* wake up the children...time to die. But we'll have more soon */
- ap_mpm_pod_killpg(pod, ap_daemons_limit, TRUE);
-
-
- /* This is mostly for debugging... so that we know what is still
- * gracefully dealing with existing request.
- */
-
- }
- else {
- /* Kill 'em all. Since the child acts the same on the parents SIGTERM
- * and a SIGHUP, we may as well use the same signal, because some user
- * pthreads are stealing signals from us left and right.
- */
- ap_mpm_pod_killpg(pod, ap_daemons_limit, FALSE);
-
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "SIGHUP received. Attempting to restart");
- }
-
- return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int worker_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- apr_status_t rv;
- ap_listen_rec *lr;
-
- pconf = p;
- ap_server_conf = s;
-
- if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
- NULL, "no listening sockets available, shutting down");
- return DONE;
- }
-
-#if APR_O_NONBLOCK_INHERITED
- for(lr = ap_listeners ; lr != NULL ; lr = lr->next) {
- apr_socket_opt_set(lr->sd, APR_SO_NONBLOCK, 1);
- }
-#endif /* APR_O_NONBLOCK_INHERITED */
-
- if (!one_process) {
- if ((rv = ap_mpm_pod_open(pconf, &pod))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
- "Could not open pipe-of-death.");
- return DONE;
- }
- }
- return OK;
-}
-
-static int worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- static int restart_num = 0;
- int no_detach, debug, foreground;
- ap_directive_t *pdir;
- ap_directive_t *max_clients = NULL;
- apr_status_t rv;
-
- mpm_state = AP_MPMQ_STARTING;
-
- /* make sure that "ThreadsPerChild" gets set before "MaxClients" */
- for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
- if (strncasecmp(pdir->directive, "ThreadsPerChild", 15) == 0) {
- if (!max_clients) {
- break; /* we're in the clear, got ThreadsPerChild first */
- }
- else {
- /* now to swap the data */
- ap_directive_t temp;
-
- temp.directive = pdir->directive;
- temp.args = pdir->args;
- /* Make sure you don't change 'next', or you may get loops! */
- /* XXX: first_child, parent, and data can never be set
- * for these directives, right? -aaron */
- temp.filename = pdir->filename;
- temp.line_num = pdir->line_num;
-
- pdir->directive = max_clients->directive;
- pdir->args = max_clients->args;
- pdir->filename = max_clients->filename;
- pdir->line_num = max_clients->line_num;
-
- max_clients->directive = temp.directive;
- max_clients->args = temp.args;
- max_clients->filename = temp.filename;
- max_clients->line_num = temp.line_num;
- break;
- }
- }
- else if (!max_clients
- && strncasecmp(pdir->directive, "MaxClients", 10) == 0) {
- max_clients = pdir;
- }
- }
-
- debug = ap_exists_config_define("DEBUG");
-
- if (debug) {
- foreground = one_process = 1;
- no_detach = 0;
- }
- else {
- one_process = ap_exists_config_define("ONE_PROCESS");
- no_detach = ap_exists_config_define("NO_DETACH");
- foreground = ap_exists_config_define("FOREGROUND");
- }
-
- /* sigh, want this only the second time around */
- if (restart_num++ == 1) {
- is_graceful = 0;
-
- if (!one_process && !foreground) {
- rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
- : APR_PROC_DETACH_DAEMONIZE);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "apr_proc_detach failed");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- parent_pid = ap_my_pid = getpid();
- }
-
- unixd_pre_config(ptemp);
- ap_listen_pre_config();
- ap_daemons_to_start = DEFAULT_START_DAEMON;
- min_spare_threads = DEFAULT_MIN_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
- max_spare_threads = DEFAULT_MAX_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
- ap_daemons_limit = server_limit;
- ap_threads_per_child = DEFAULT_THREADS_PER_CHILD;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_lock_fname = DEFAULT_LOCKFILE;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- ap_extended_status = 0;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- return OK;
-}
-
-static void threadpool_hooks(apr_pool_t *p)
-{
- /* The worker open_logs phase must run before the core's, or stderr
- * will be redirected to a file, and the messages won't print to the
- * console.
- */
- static const char *const aszSucc[] = {"core.c", NULL};
- one_process = 0;
-
- ap_hook_open_logs(worker_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
- /* we need to set the MPM state before other pre-config hooks use MPM query
- * to retrieve it, so register as REALLY_FIRST
- */
- ap_hook_pre_config(worker_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_to_start = atoi(arg);
- return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- min_spare_threads = atoi(arg);
- if (min_spare_threads <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- min_spare_threads = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- max_spare_threads = atoi(arg);
- return NULL;
-}
-
-static const char *set_max_clients (cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- int max_clients;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- /* It is ok to use ap_threads_per_child here because we are
- * sure that it gets set before MaxClients in the pre_config stage. */
- max_clients = atoi(arg);
- if (max_clients < ap_threads_per_child) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients (%d) must be at least as large",
- max_clients);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " large as ThreadsPerChild (%d). Automatically",
- ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " increasing MaxClients to %d.",
- ap_threads_per_child);
- max_clients = ap_threads_per_child;
- }
- ap_daemons_limit = max_clients / ap_threads_per_child;
- if ((max_clients > 0) && (max_clients % ap_threads_per_child)) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients (%d) is not an integer multiple",
- max_clients);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " of ThreadsPerChild (%d), lowering MaxClients to %d",
- ap_threads_per_child,
- ap_daemons_limit * ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " for a maximum of %d child processes,",
- ap_daemons_limit);
- max_clients = ap_daemons_limit * ap_threads_per_child;
- }
- if (ap_daemons_limit > server_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients of %d would require %d servers,",
- max_clients, ap_daemons_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " and would exceed the ServerLimit value of %d.",
- server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " Automatically lowering MaxClients to %d. To increase,",
- server_limit * ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " please see the ServerLimit directive.");
- ap_daemons_limit = server_limit;
- }
- else if (ap_daemons_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require MaxClients > 0, setting to 1");
- ap_daemons_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_threads_per_child (cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_per_child = atoi(arg);
- if (ap_threads_per_child > thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadsPerChild of %d exceeds ThreadLimit "
- "value of %d", ap_threads_per_child,
- thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "threads, lowering ThreadsPerChild to %d. To increase, please"
- " see the", thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " ThreadLimit directive.");
- ap_threads_per_child = thread_limit;
- }
- else if (ap_threads_per_child < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadsPerChild > 0, setting to 1");
- ap_threads_per_child = 1;
- }
- return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_server_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_server_limit = atoi(arg);
- /* you cannot change ServerLimit across a restart; ignore
- * any such attempts
- */
- if (first_server_limit &&
- tmp_server_limit != server_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- server_limit = tmp_server_limit;
-
- if (server_limit > MAX_SERVER_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ServerLimit of %d exceeds compile time limit "
- "of %d servers,", server_limit, MAX_SERVER_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
- server_limit = MAX_SERVER_LIMIT;
- }
- else if (server_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ServerLimit > 0, setting to 1");
- server_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_thread_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_thread_limit = atoi(arg);
- /* you cannot change ThreadLimit across a restart; ignore
- * any such attempts
- */
- if (first_thread_limit &&
- tmp_thread_limit != thread_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- thread_limit = tmp_thread_limit;
-
- if (thread_limit > MAX_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadLimit of %d exceeds compile time limit "
- "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
- thread_limit = MAX_THREAD_LIMIT;
- }
- else if (thread_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadLimit > 0, setting to 1");
- thread_limit = 1;
- }
- return NULL;
-}
-
-static const command_rec threadpool_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
- "Number of child processes launched at server startup"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
- "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
- "Maximum number of idle children"),
-AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
- "Maximum number of children alive at the same time"),
-AP_INIT_TAKE1("ThreadsPerChild", set_threads_per_child, NULL, RSRC_CONF,
- "Number of threads each child creates"),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
- "Maximum value of MaxClients for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
- "Maximum worker threads in a server for this run of Apache"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_threadpool_module = {
- MPM20_MODULE_STUFF,
- ap_mpm_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- threadpool_cmds, /* command apr_table_t */
- threadpool_hooks /* register_hooks */
-};
-
diff --git a/server/mpm/monitoring-services.txt b/server/mpm/monitoring-services.txt
deleted file mode 100644
index 2466589025..0000000000
--- a/server/mpm/monitoring-services.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-From: William A. Rowe, Jr.
-Date: June 7th '00
-Subject: service monitoring in Apache 1.3.13
-
-The concept for a taskbar monitor has been thrown around
-for a very long while. 1.3.13 introduced Win9x services,
-and that added fuel to the mix. Here are some sideband
-observations I've made for other developers...
-
-About Apache as a console, don't start Apache hidden without
-any command line arguments if you want to launch it yourself
-in a hidden window (it will do the classic test for
-AllocConsole/FreeConsole)... drop in some arguments such as
-the -f or -r option and it will fly without thinking it is a
-service under 9x and NT.
-
-Rule two, don't use --ntservice as an argument, ever. Only
-the Windows NT Service Control Manager is allowed to pass that
-flag, and only that flag, when it runs Apache.exe. Do use
---ntservice as the sole argument to the executable name if
-you are installing an Apache NT service yourself.
-
-Rule three, use -k start and -n name when maintaining the
-HKLM/Software/Microsoft/Windows/CurrentVersion/RunServices
-list, since there is no other way for Apache to know what
-the service is named :) And look at any 9x installed service's
-RunServices entry in the registry for the start service semantic.
-
-Rule four, use the WinNT Service Control Manager exclusively
-for starting, stopping and restarting Apache as an NT service.
-The restart signal is the value 128, as documented in service.h
-and service.c - this will continue to work in Apache 2.0. If
-it fails, you are handling an older version (pre 1.3.13) of
-Apache, and need to stop and then start the service instead.
-
-Rule five, use the legacy pid-named events to signal Win9x
-service Apache to restart and stop the service. But don't
-bother looking for httpd.pid files... you can get the pid
-right from the hidden service control window. Apache 1.3.13
-and 2.x create a hidden window named for the name of the
-service (without the spaces), with a window class of
-"ApacheWin95ServiceMonitor", so can use FindWindow to track
-down running Win9x services. See the service.c code for how
-I accomplished this pretty simply in the -k stop/-k restart
-handler.
-
-Taskbar Monitor App
--------------------
-
-Basic requirements: a C code application using strictly the
-Win32 API, and not MFC or other Win32 frameworks. Could use
-the service.c module to share some basic functions. That
-module could be extended in Apache 2.0 to make this all easier.
-
-I think we are looking for an external app that simply acts
-as a monitor or allows a stopped service to be started. If
-the user logs off, we loose the monitor app, but installed as
-a shortcut in the Start group or in the registry key
-HKLM/Software/Microsoft/Windows/CurrentVersion/Run
-we will be just fine. I'd like to see the monitor run only
-one instance to monitor all running services, for memory
-and resource conservation.
-
-I was thinking that the hover/iconbar title would tell them
-"Test service is running", or "Test service is stopped".
-If they left click, they could stop or restart, or simply
-start if it is stopped. There could be a preference that
-each service doesn't get it's own individual task icon unless
-it is running, if it is a manual start service (or missing
-from the RunServices list, which is the equivilant under 9x).
-
-If a specific service is set to Auto start or is in the
-RunServices Win9x registry key, we must show them the stopped
-icon, of course. We might also keep the icon for any running
-service that stops abruptly. But there could be a 'single
-icon' option for the taskbar icon monitor that says show only
-a single status icon, for simplicity if the administrator runs
-many Apache services.
-
-But I was hoping that any right click would provide a menu
-of all Apache services with their status. e.g.
- Test service is stopped
- Apache_2 service is running
- MyWeb service is running
-and each would do the logical submenu, same as if that
-specific taskbar icon were left clicked, offering to start or
-offering to stop or restart the server, as appropriate.
-
-Finally, to identify all installed Apache services, just query
-the registry key HKLM\SYSTEM\CurrentControlSet\Services for any
-key that has the ImagePath value of "...\Apache.exe"... (quotes
-are significant here, if the leading quote is ommitted the
-entire string ends with the text \Apache.exe - based on Apache's
-own service installer in every released version.)
diff --git a/server/mpm/mpmt_os2/.cvsignore b/server/mpm/mpmt_os2/.cvsignore
deleted file mode 100644
index dc53ac865d..0000000000
--- a/server/mpm/mpmt_os2/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.lo
-*.la
-Makefile
-.deps
-.libs
diff --git a/server/mpm/mpmt_os2/Makefile.in b/server/mpm/mpmt_os2/Makefile.in
deleted file mode 100644
index 38e598edf3..0000000000
--- a/server/mpm/mpmt_os2/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libmpmt_os2.la
-LTLIBRARY_SOURCES = mpmt_os2.c mpmt_os2_child.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/mpmt_os2/config5.m4 b/server/mpm/mpmt_os2/config5.m4
deleted file mode 100644
index b27c296d2a..0000000000
--- a/server/mpm/mpmt_os2/config5.m4
+++ /dev/null
@@ -1,5 +0,0 @@
-if test "$MPM_NAME" = "mpmt_os2" ; then
- AC_CACHE_SAVE
- APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
- APR_ADDTO(CFLAGS,-Zmt)
-fi
diff --git a/server/mpm/mpmt_os2/mpm.h b/server/mpm/mpmt_os2/mpm.h
deleted file mode 100644
index 3b8944040e..0000000000
--- a/server/mpm/mpmt_os2/mpm.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_MPMT_OS2_H
-#define APACHE_MPM_MPMT_OS2_H
-
-#define MPMT_OS2_MPM
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "scoreboard.h"
-
-#define MPM_NAME "MPMT_OS2"
-
-extern server_rec *ap_server_conf;
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-
-#endif /* APACHE_MPM_MPMT_OS2_H */
diff --git a/server/mpm/mpmt_os2/mpm_default.h b/server/mpm/mpmt_os2/mpm_default.h
deleted file mode 100644
index 640b01360c..0000000000
--- a/server/mpm/mpmt_os2/mpm_default.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers processes to spawn off by default
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 2
-#endif
-
-/* Maximum number of *free* server threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_SPARE_THREAD
-#define DEFAULT_MAX_SPARE_THREAD 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_SPARE_THREAD
-#define DEFAULT_MIN_SPARE_THREAD 5
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/mpmt_os2/mpmt_os2.c b/server/mpm/mpmt_os2/mpmt_os2.c
deleted file mode 100644
index 90e774a2fe..0000000000
--- a/server/mpm/mpmt_os2/mpmt_os2.c
+++ /dev/null
@@ -1,576 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Multi-process, multi-threaded MPM for OS/2
- *
- * Server consists of
- * - a main, parent process
- * - a small, static number of child processes
- *
- * The parent process's job is to manage the child processes. This involves
- * spawning children as required to ensure there are always ap_daemons_to_start
- * processes accepting connections.
- *
- * Each child process consists of a a pool of worker threads and a
- * main thread that accepts connections & passes them to the workers via
- * a work queue. The worker thread pool is dynamic, managed by a maintanence
- * thread so that the number of idle threads is kept between
- * min_spare_threads & max_spare_threads.
- *
- */
-
-/*
- Todo list
- - Enforce MaxClients somehow
-*/
-#define CORE_PRIVATE
-#define INCL_NOPMAPI
-#define INCL_DOS
-#define INCL_DOSERRORS
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "mpm.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "apr_portable.h"
-#include "mpm_common.h"
-#include "apr_strings.h"
-#include <os2.h>
-#include <process.h>
-
-/* We don't need many processes,
- * they're only for redundancy in the event of a crash
- */
-#define HARD_SERVER_LIMIT 10
-
-/* Limit on the total number of threads per process
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 256
-#endif
-
-server_rec *ap_server_conf;
-static apr_pool_t *pconf = NULL; /* Pool for config stuff */
-static const char *ap_pid_fname=NULL;
-
-/* Config globals */
-static int one_process = 0;
-static int ap_daemons_to_start = 0;
-static int ap_thread_limit = 0;
-static int ap_max_requests_per_child = 0;
-int ap_min_spare_threads = 0;
-int ap_max_spare_threads = 0;
-
-/* Keep track of a few interesting statistics */
-int ap_max_daemons_limit = -1;
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful = 0;
-ap_generation_t volatile ap_my_generation=0; /* Used by the scoreboard */
-static int is_parent_process=TRUE;
-HMTX ap_mpm_accept_mutex = 0;
-
-/* An array of these is stored in a shared memory area for passing
- * sockets from the parent to child processes
- */
-typedef struct {
- struct sockaddr_in name;
- apr_os_sock_t listen_fd;
-} listen_socket_t;
-
-typedef struct {
- HMTX accept_mutex;
- listen_socket_t listeners[1];
-} parent_info_t;
-
-static char master_main();
-static void spawn_child(int slot);
-void ap_mpm_child_main(apr_pool_t *pconf);
-static void set_signals();
-
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s )
-{
- char *listener_shm_name;
- parent_info_t *parent_info;
- ULONG rc;
- pconf = _pconf;
- ap_server_conf = s;
- restart_pending = 0;
-
- DosSetMaxFH(ap_thread_limit * 2);
- listener_shm_name = apr_psprintf(pconf, "/sharemem/httpd/parent_info.%d", getppid());
- rc = DosGetNamedSharedMem((PPVOID)&parent_info, listener_shm_name, PAG_READ);
- is_parent_process = rc != 0;
- ap_scoreboard_fname = apr_psprintf(pconf, "/sharemem/httpd/scoreboard.%d", is_parent_process ? getpid() : getppid());
-
- if (rc == 0) {
- /* Child process */
- ap_listen_rec *lr;
- int num_listeners = 0;
-
- ap_mpm_accept_mutex = parent_info->accept_mutex;
-
- /* Set up a default listener if necessary */
- if (ap_listeners == NULL) {
- ap_listen_rec *lr = apr_pcalloc(s->process->pool, sizeof(ap_listen_rec));
- ap_listeners = lr;
- apr_sockaddr_info_get(&lr->bind_addr, "0.0.0.0", APR_UNSPEC,
- DEFAULT_HTTP_PORT, 0, s->process->pool);
- apr_socket_create(&lr->sd, lr->bind_addr->family,
- SOCK_STREAM, 0, s->process->pool);
- }
-
- for (lr = ap_listeners; lr; lr = lr->next) {
- apr_sockaddr_t *sa;
- apr_os_sock_put(&lr->sd, &parent_info->listeners[num_listeners].listen_fd, pconf);
- apr_socket_addr_get(&sa, APR_LOCAL, lr->sd);
- num_listeners++;
- }
-
- DosFreeMem(parent_info);
-
- /* Do the work */
- ap_mpm_child_main(pconf);
-
- /* Outta here */
- return 1;
- }
- else {
- /* Parent process */
- char restart;
- is_parent_process = TRUE;
-
- if (ap_setup_listeners(ap_server_conf) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, 0, s,
- "no listening sockets available, shutting down");
- return 1;
- }
-
- ap_log_pid(pconf, ap_pid_fname);
-
- restart = master_main();
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
-
- if (!restart) {
- const char *pidfile = ap_server_root_relative(pconf, ap_pid_fname);
-
- if (pidfile != NULL && remove(pidfile) == 0) {
- ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS,
- ap_server_conf, "removed PID file %s (pid=%d)",
- pidfile, getpid());
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "caught SIGTERM, shutting down");
- return 1;
- }
- } /* Parent process */
-
- return 0; /* Restart */
-}
-
-
-
-/* Main processing of the parent process
- * returns TRUE if restarting
- */
-static char master_main()
-{
- server_rec *s = ap_server_conf;
- ap_listen_rec *lr;
- parent_info_t *parent_info;
- char *listener_shm_name;
- int listener_num, num_listeners, slot;
- ULONG rc;
-
- printf("%s \n", ap_get_server_version());
- set_signals();
-
- if (ap_setup_listeners(ap_server_conf) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, 0, s,
- "no listening sockets available, shutting down");
- return FALSE;
- }
-
- /* Allocate a shared memory block for the array of listeners */
- for (num_listeners = 0, lr = ap_listeners; lr; lr = lr->next) {
- num_listeners++;
- }
-
- listener_shm_name = apr_psprintf(pconf, "/sharemem/httpd/parent_info.%d", getpid());
- rc = DosAllocSharedMem((PPVOID)&parent_info, listener_shm_name,
- sizeof(parent_info_t) + num_listeners * sizeof(listen_socket_t),
- PAG_READ|PAG_WRITE|PAG_COMMIT);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, APR_FROM_OS_ERROR(rc), s,
- "failure allocating shared memory, shutting down");
- return FALSE;
- }
-
- /* Store the listener sockets in the shared memory area for our children to see */
- for (listener_num = 0, lr = ap_listeners; lr; lr = lr->next, listener_num++) {
- apr_os_sock_get(&parent_info->listeners[listener_num].listen_fd, lr->sd);
- }
-
- /* Create mutex to prevent multiple child processes from detecting
- * a connection with apr_poll()
- */
-
- rc = DosCreateMutexSem(NULL, &ap_mpm_accept_mutex, DC_SEM_SHARED, FALSE);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, APR_FROM_OS_ERROR(rc), s,
- "failure creating accept mutex, shutting down");
- return FALSE;
- }
-
- parent_info->accept_mutex = ap_mpm_accept_mutex;
-
- /* Allocate shared memory for scoreboard */
- if (ap_scoreboard_image == NULL) {
- void *sb_mem;
- rc = DosAllocSharedMem(&sb_mem, ap_scoreboard_fname,
- ap_calc_scoreboard_size(),
- PAG_COMMIT|PAG_READ|PAG_WRITE);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "unable to allocate shared memory for scoreboard , exiting");
- return FALSE;
- }
-
- ap_init_scoreboard(sb_mem);
- }
-
- ap_scoreboard_image->global->restart_time = apr_time_now();
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(accept_mutex),
- apr_proc_mutex_defname());
-#endif
- if (one_process) {
- ap_scoreboard_image->parent[0].pid = getpid();
- ap_mpm_child_main(pconf);
- return FALSE;
- }
-
- while (!restart_pending && !shutdown_pending) {
- RESULTCODES proc_rc;
- PID child_pid;
- int active_children = 0;
-
- /* Count number of active children */
- for (slot=0; slot < HARD_SERVER_LIMIT; slot++) {
- active_children += ap_scoreboard_image->parent[slot].pid != 0 &&
- !ap_scoreboard_image->parent[slot].quiescing;
- }
-
- /* Spawn children if needed */
- for (slot=0; slot < HARD_SERVER_LIMIT && active_children < ap_daemons_to_start; slot++) {
- if (ap_scoreboard_image->parent[slot].pid == 0) {
- spawn_child(slot);
- active_children++;
- }
- }
-
- rc = DosWaitChild(DCWA_PROCESSTREE, DCWW_NOWAIT, &proc_rc, &child_pid, 0);
-
- if (rc == 0) {
- /* A child has terminated, remove its scoreboard entry & terminate if necessary */
- for (slot=0; ap_scoreboard_image->parent[slot].pid != child_pid && slot < HARD_SERVER_LIMIT; slot++);
-
- if (slot < HARD_SERVER_LIMIT) {
- ap_scoreboard_image->parent[slot].pid = 0;
- ap_scoreboard_image->parent[slot].quiescing = 0;
-
- if (proc_rc.codeTerminate == TC_EXIT) {
- /* Child terminated normally, check its exit code and
- * terminate server if child indicates a fatal error
- */
- if (proc_rc.codeResult == APEXIT_CHILDFATAL)
- break;
- }
- }
- } else if (rc == ERROR_CHILD_NOT_COMPLETE) {
- /* No child exited, lets sleep for a while.... */
- apr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
- }
- }
-
- /* Signal children to shut down, either gracefully or immediately */
- for (slot=0; slot<HARD_SERVER_LIMIT; slot++) {
- kill(ap_scoreboard_image->parent[slot].pid, is_graceful ? SIGHUP : SIGTERM);
- }
-
- DosFreeMem(parent_info);
- return restart_pending;
-}
-
-
-
-static void spawn_child(int slot)
-{
- PPIB ppib;
- PTIB ptib;
- char fail_module[100];
- char progname[CCHMAXPATH];
- RESULTCODES proc_rc;
- ULONG rc;
-
- ap_scoreboard_image->parent[slot].generation = ap_my_generation;
- DosGetInfoBlocks(&ptib, &ppib);
- DosQueryModuleName(ppib->pib_hmte, sizeof(progname), progname);
- rc = DosExecPgm(fail_module, sizeof(fail_module), EXEC_ASYNCRESULT,
- ppib->pib_pchcmd, NULL, &proc_rc, progname);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "error spawning child, slot %d", slot);
- }
-
- if (ap_max_daemons_limit < slot) {
- ap_max_daemons_limit = slot;
- }
-
- ap_scoreboard_image->parent[slot].pid = proc_rc.codeTerminate;
-}
-
-
-
-/* Signal handling routines */
-
-static void sig_term(int sig)
-{
- shutdown_pending = 1;
- signal(SIGTERM, SIG_DFL);
-}
-
-
-
-static void sig_restart(int sig)
-{
- if (sig == SIGUSR1) {
- is_graceful = 1;
- }
-
- restart_pending = 1;
-}
-
-
-
-static void set_signals()
-{
- struct sigaction sa;
-
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- sa.sa_handler = sig_term;
-
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGINT)");
-
- sa.sa_handler = sig_restart;
-
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
- if (sigaction(SIGUSR1, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGUSR1)");
-}
-
-
-
-/* Enquiry functions used get MPM status info */
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch (query_code) {
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_max_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_NOT_SUPPORTED;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = HARD_SERVER_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = HARD_THREAD_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-
-
-int ap_graceful_stop_signalled(void)
-{
- return is_graceful;
-}
-
-
-
-/* Configuration handling stuff */
-
-static int mpmt_os2_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- one_process = ap_exists_config_define("ONE_PROCESS") ||
- ap_exists_config_define("DEBUG");
- is_graceful = 0;
- ap_listen_pre_config();
- ap_daemons_to_start = DEFAULT_START_DAEMON;
- ap_thread_limit = HARD_THREAD_LIMIT;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- ap_extended_status = 0;
- ap_min_spare_threads = DEFAULT_MIN_SPARE_THREAD;
- ap_max_spare_threads = DEFAULT_MAX_SPARE_THREAD;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- return OK;
-}
-
-
-
-static void mpmt_os2_hooks(apr_pool_t *p)
-{
- ap_hook_pre_config(mpmt_os2_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_to_start = atoi(arg);
- return NULL;
-}
-
-
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- ap_min_spare_threads = atoi(arg);
-
- if (ap_min_spare_threads <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- ap_min_spare_threads = 1;
- }
-
- return NULL;
-}
-
-
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
- if (err != NULL) {
- return err;
- }
-
- ap_max_spare_threads = atoi(arg);
- return NULL;
-}
-
-
-
-static const char *ignore_cmd(cmd_parms *cmd, void *dummy, const char *arg)
-{
- return NULL;
-}
-
-
-
-static const command_rec mpmt_os2_cmds[] = {
-LISTEN_COMMANDS,
-AP_INIT_TAKE1( "StartServers", set_daemons_to_start, NULL, RSRC_CONF,
- "Number of child processes launched at server startup" ),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
- "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
- "Maximum number of idle children"),
-AP_INIT_TAKE1("User", ignore_cmd, NULL, RSRC_CONF,
- "Not applicable on this platform"),
-AP_INIT_TAKE1("Group", ignore_cmd, NULL, RSRC_CONF,
- "Not applicable on this platform"),
-AP_INIT_TAKE1("ScoreBoardFile", ignore_cmd, NULL, RSRC_CONF, \
- "Not applicable on this platform"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_mpmt_os2_module = {
- MPM20_MODULE_STUFF,
- NULL, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- mpmt_os2_cmds, /* command apr_table_t */
- mpmt_os2_hooks, /* register_hooks */
-};
diff --git a/server/mpm/mpmt_os2/mpmt_os2_child.c b/server/mpm/mpmt_os2/mpmt_os2_child.c
deleted file mode 100644
index b69d9f2f9a..0000000000
--- a/server/mpm/mpmt_os2/mpmt_os2_child.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-#define INCL_NOPMAPI
-#define INCL_DOS
-#define INCL_DOSERRORS
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "mpm.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "apr_portable.h"
-#include "apr_poll.h"
-#include "mpm_common.h"
-#include "apr_strings.h"
-#include <os2.h>
-#include <process.h>
-
-/* XXXXXX move these to header file private to this MPM */
-
-/* We don't need many processes,
- * they're only for redundancy in the event of a crash
- */
-#define HARD_SERVER_LIMIT 10
-
-/* Limit on the total number of threads per process
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 256
-#endif
-
-#define ID_FROM_CHILD_THREAD(c, t) ((c * HARD_THREAD_LIMIT) + t)
-
-typedef struct {
- apr_pool_t *pconn;
- apr_socket_t *conn_sd;
-} worker_args_t;
-
-#define WORKTYPE_CONN 0
-#define WORKTYPE_EXIT 1
-
-static apr_pool_t *pchild = NULL;
-static int child_slot;
-static int shutdown_pending = 0;
-extern int ap_my_generation;
-static int volatile is_graceful = 1;
-HEV shutdown_event; /* signaled when this child is shutting down */
-
-/* grab some MPM globals */
-extern int ap_min_spare_threads;
-extern int ap_max_spare_threads;
-extern HMTX ap_mpm_accept_mutex;
-
-static void worker_main(void *vpArg);
-static void clean_child_exit(int code);
-static void set_signals();
-static void server_maintenance(void *vpArg);
-
-
-static void clean_child_exit(int code)
-{
- if (pchild) {
- apr_pool_destroy(pchild);
- }
-
- exit(code);
-}
-
-
-
-void ap_mpm_child_main(apr_pool_t *pconf)
-{
- ap_listen_rec *lr = NULL;
- int requests_this_child = 0;
- int rv = 0;
- unsigned long ulTimes;
- int my_pid = getpid();
- ULONG rc, c;
- HQUEUE workq;
- apr_pollset_t *pollset;
- int num_listeners;
- TID server_maint_tid;
- void *sb_mem;
-
- /* Stop Ctrl-C/Ctrl-Break signals going to child processes */
- DosSetSignalExceptionFocus(0, &ulTimes);
- set_signals();
-
- /* Create pool for child */
- apr_pool_create(&pchild, pconf);
-
- ap_run_child_init(pchild, ap_server_conf);
-
- /* Create an event semaphore used to trigger other threads to shutdown */
- rc = DosCreateEventSem(NULL, &shutdown_event, 0, FALSE);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "unable to create shutdown semaphore, exiting");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- /* Gain access to the scoreboard. */
- rc = DosGetNamedSharedMem(&sb_mem, ap_scoreboard_fname,
- PAG_READ|PAG_WRITE);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "scoreboard not readable in child, exiting");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_calc_scoreboard_size();
- ap_init_scoreboard(sb_mem);
-
- /* Gain access to the accpet mutex */
- rc = DosOpenMutexSem(NULL, &ap_mpm_accept_mutex);
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "accept mutex couldn't be accessed in child, exiting");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- /* Find our pid in the scoreboard so we know what slot our parent allocated us */
- for (child_slot = 0; ap_scoreboard_image->parent[child_slot].pid != my_pid && child_slot < HARD_SERVER_LIMIT; child_slot++);
-
- if (child_slot == HARD_SERVER_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf,
- "child pid not found in scoreboard, exiting");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_my_generation = ap_scoreboard_image->parent[child_slot].generation;
- memset(ap_scoreboard_image->servers[child_slot], 0, sizeof(worker_score) * HARD_THREAD_LIMIT);
-
- /* Set up an OS/2 queue for passing connections & termination requests
- * to worker threads
- */
- rc = DosCreateQueue(&workq, QUE_FIFO, apr_psprintf(pchild, "/queues/httpd/work.%d", my_pid));
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "unable to create work queue, exiting");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- /* Create initial pool of worker threads */
- for (c = 0; c < ap_min_spare_threads; c++) {
-// ap_scoreboard_image->servers[child_slot][c].tid = _beginthread(worker_main, NULL, 128*1024, (void *)c);
- }
-
- /* Start maintenance thread */
- server_maint_tid = _beginthread(server_maintenance, NULL, 32768, NULL);
-
- /* Set up poll */
- for (num_listeners = 0, lr = ap_listeners; lr; lr = lr->next) {
- num_listeners++;
- }
-
- apr_pollset_create(&pollset, num_listeners, pchild, 0);
-
- for (lr = ap_listeners; lr != NULL; lr = lr->next) {
- apr_pollfd_t pfd = { 0 };
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = lr->sd;
- pfd.reqevents = APR_POLLIN;
- pfd.client_data = lr;
- apr_pollset_add(pollset, &pfd);
- }
-
- /* Main connection accept loop */
- do {
- apr_pool_t *pconn;
- worker_args_t *worker_args;
- int last_poll_idx = 0;
-
- apr_pool_create(&pconn, pchild);
- worker_args = apr_palloc(pconn, sizeof(worker_args_t));
- worker_args->pconn = pconn;
-
- if (num_listeners == 1) {
- rv = apr_socket_accept(&worker_args->conn_sd, ap_listeners->sd, pconn);
- } else {
- const apr_pollfd_t *poll_results;
- apr_int32_t num_poll_results;
-
- rc = DosRequestMutexSem(ap_mpm_accept_mutex, SEM_INDEFINITE_WAIT);
-
- if (shutdown_pending) {
- DosReleaseMutexSem(ap_mpm_accept_mutex);
- break;
- }
-
- rv = APR_FROM_OS_ERROR(rc);
-
- if (rv == APR_SUCCESS) {
- rv = apr_pollset_poll(pollset, -1, &num_poll_results, &poll_results);
- DosReleaseMutexSem(ap_mpm_accept_mutex);
- }
-
- if (rv == APR_SUCCESS) {
- if (last_poll_idx >= num_listeners) {
- last_poll_idx = 0;
- }
-
- lr = poll_results[last_poll_idx++].client_data;
- rv = apr_socket_accept(&worker_args->conn_sd, lr->sd, pconn);
- last_poll_idx++;
- }
- }
-
- if (rv != APR_SUCCESS) {
- if (!APR_STATUS_IS_EINTR(rv)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
- "apr_socket_accept");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- } else {
- DosWriteQueue(workq, WORKTYPE_CONN, sizeof(worker_args_t), worker_args, 0);
- requests_this_child++;
- }
-
- if (ap_max_requests_per_child != 0 && requests_this_child >= ap_max_requests_per_child)
- break;
- } while (!shutdown_pending && ap_my_generation == ap_scoreboard_image->global->running_generation);
-
- ap_scoreboard_image->parent[child_slot].quiescing = 1;
- DosPostEventSem(shutdown_event);
- DosWaitThread(&server_maint_tid, DCWW_WAIT);
-
- if (is_graceful) {
- char someleft;
-
- /* tell our worker threads to exit */
- for (c=0; c<HARD_THREAD_LIMIT; c++) {
- if (ap_scoreboard_image->servers[child_slot][c].status != SERVER_DEAD) {
- DosWriteQueue(workq, WORKTYPE_EXIT, 0, NULL, 0);
- }
- }
-
- do {
- someleft = 0;
-
- for (c=0; c<HARD_THREAD_LIMIT; c++) {
- if (ap_scoreboard_image->servers[child_slot][c].status != SERVER_DEAD) {
- someleft = 1;
- DosSleep(1000);
- break;
- }
- }
- } while (someleft);
- } else {
- DosPurgeQueue(workq);
-
- for (c=0; c<HARD_THREAD_LIMIT; c++) {
- if (ap_scoreboard_image->servers[child_slot][c].status != SERVER_DEAD) {
- DosKillThread(ap_scoreboard_image->servers[child_slot][c].tid);
- }
- }
- }
-
- apr_pool_destroy(pchild);
-}
-
-
-
-void add_worker()
-{
- int thread_slot;
-
- /* Find a free thread slot */
- for (thread_slot=0; thread_slot < HARD_THREAD_LIMIT; thread_slot++) {
- if (ap_scoreboard_image->servers[child_slot][thread_slot].status == SERVER_DEAD) {
- ap_scoreboard_image->servers[child_slot][thread_slot].status = SERVER_STARTING;
- ap_scoreboard_image->servers[child_slot][thread_slot].tid =
- _beginthread(worker_main, NULL, 128*1024, (void *)thread_slot);
- break;
- }
- }
-}
-
-
-
-ULONG APIENTRY thread_exception_handler(EXCEPTIONREPORTRECORD *pReportRec,
- EXCEPTIONREGISTRATIONRECORD *pRegRec,
- CONTEXTRECORD *pContext,
- PVOID p)
-{
- int c;
-
- if (pReportRec->fHandlerFlags & EH_NESTED_CALL) {
- return XCPT_CONTINUE_SEARCH;
- }
-
- if (pReportRec->ExceptionNum == XCPT_ACCESS_VIOLATION ||
- pReportRec->ExceptionNum == XCPT_INTEGER_DIVIDE_BY_ZERO) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf,
- "caught exception in worker thread, initiating child shutdown pid=%d", getpid());
- for (c=0; c<HARD_THREAD_LIMIT; c++) {
- if (ap_scoreboard_image->servers[child_slot][c].tid == _gettid()) {
- ap_scoreboard_image->servers[child_slot][c].status = SERVER_DEAD;
- break;
- }
- }
-
- /* Shut down process ASAP, it could be quite unhealthy & leaking resources */
- shutdown_pending = 1;
- ap_scoreboard_image->parent[child_slot].quiescing = 1;
- kill(getpid(), SIGHUP);
- DosUnwindException(UNWIND_ALL, 0, 0);
- }
-
- return XCPT_CONTINUE_SEARCH;
-}
-
-
-
-static void worker_main(void *vpArg)
-{
- long conn_id;
- conn_rec *current_conn;
- apr_pool_t *pconn;
- apr_allocator_t *allocator;
- apr_bucket_alloc_t *bucket_alloc;
- worker_args_t *worker_args;
- HQUEUE workq;
- PID owner;
- int rc;
- REQUESTDATA rd;
- ULONG len;
- BYTE priority;
- int thread_slot = (int)vpArg;
- EXCEPTIONREGISTRATIONRECORD reg_rec = { NULL, thread_exception_handler };
- ap_sb_handle_t *sbh;
-
- /* Trap exceptions in this thread so we don't take down the whole process */
- DosSetExceptionHandler( &reg_rec );
-
- rc = DosOpenQueue(&owner, &workq,
- apr_psprintf(pchild, "/queues/httpd/work.%d", getpid()));
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "unable to open work queue, exiting");
- ap_scoreboard_image->servers[child_slot][thread_slot].tid = 0;
- }
-
- conn_id = ID_FROM_CHILD_THREAD(child_slot, thread_slot);
- ap_update_child_status_from_indexes(child_slot, thread_slot, SERVER_READY,
- NULL);
-
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- bucket_alloc = apr_bucket_alloc_create_ex(allocator);
-
- while (rc = DosReadQueue(workq, &rd, &len, (PPVOID)&worker_args, 0, DCWW_WAIT, &priority, NULLHANDLE),
- rc == 0 && rd.ulData != WORKTYPE_EXIT) {
- pconn = worker_args->pconn;
- ap_create_sb_handle(&sbh, pconn, child_slot, thread_slot);
- current_conn = ap_run_create_connection(pconn, ap_server_conf,
- worker_args->conn_sd, conn_id,
- sbh, bucket_alloc);
-
- if (current_conn) {
- ap_process_connection(current_conn, worker_args->conn_sd);
- ap_lingering_close(current_conn);
- }
-
- apr_pool_destroy(pconn);
- ap_update_child_status_from_indexes(child_slot, thread_slot,
- SERVER_READY, NULL);
- }
-
- ap_update_child_status_from_indexes(child_slot, thread_slot, SERVER_DEAD,
- NULL);
-
- apr_bucket_alloc_destroy(bucket_alloc);
- apr_allocator_destroy(allocator);
-}
-
-
-
-static void server_maintenance(void *vpArg)
-{
- int num_idle, num_needed;
- ULONG num_pending = 0;
- int threadnum;
- HQUEUE workq;
- ULONG rc;
- PID owner;
-
- rc = DosOpenQueue(&owner, &workq,
- apr_psprintf(pchild, "/queues/httpd/work.%d", getpid()));
-
- if (rc) {
- ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
- "unable to open work queue in maintenance thread");
- return;
- }
-
- do {
- for (num_idle=0, threadnum=0; threadnum < HARD_THREAD_LIMIT; threadnum++) {
- num_idle += ap_scoreboard_image->servers[child_slot][threadnum].status == SERVER_READY;
- }
-
- DosQueryQueue(workq, &num_pending);
- num_needed = ap_min_spare_threads - num_idle + num_pending;
-
- if (num_needed > 0) {
- for (threadnum=0; threadnum < num_needed; threadnum++) {
- add_worker();
- }
- }
-
- if (num_idle - num_pending > ap_max_spare_threads) {
- DosWriteQueue(workq, WORKTYPE_EXIT, 0, NULL, 0);
- }
- } while (DosWaitEventSem(shutdown_event, 500) == ERROR_TIMEOUT);
-}
-
-
-
-/* Signal handling routines */
-
-static void sig_term(int sig)
-{
- shutdown_pending = 1;
- is_graceful = 0;
- signal(SIGTERM, SIG_DFL);
-}
-
-
-
-static void sig_hup(int sig)
-{
- shutdown_pending = 1;
- is_graceful = 1;
-}
-
-
-
-static void set_signals()
-{
- struct sigaction sa;
-
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- sa.sa_handler = sig_term;
-
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-
- sa.sa_handler = sig_hup;
-
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
-}
diff --git a/server/mpm/netware/mpm.h b/server/mpm/netware/mpm.h
deleted file mode 100644
index 68528ff131..0000000000
--- a/server/mpm/netware/mpm.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "scoreboard.h"
-
-#ifndef APACHE_MPM_THREADED_H
-#define APACHE_MPM_THREADED_H
-
-#define THREADED_MPM
-
-#define MPM_NAME "NetWare_Threaded"
-
-/*#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
- #define AP_MPM_WANT_WAIT_OR_TIMEOUT
- #define AP_MPM_WANT_PROCESS_CHILD_STATUS
- #define AP_MPM_WANT_SET_PIDFILE
- #define AP_MPM_WANT_SET_SCOREBOARD
- #define AP_MPM_WANT_SET_LOCKFILE
-*/
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-#define AP_MPM_WANT_SET_STACKSIZE
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-/*#define AP_MPM_WANT_SET_COREDUMPDIR
- #define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-*/
-
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-
-extern int ap_threads_per_child;
-extern int ap_max_workers_limit;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_THREADED_H */
diff --git a/server/mpm/netware/mpm_default.h b/server/mpm/netware/mpm_default.h
deleted file mode 100644
index f0bddbd0d8..0000000000
--- a/server/mpm/netware/mpm_default.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 1
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 1
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 1
-#endif
-
-/* Limit on the threads per process. Clients will be locked out if more than
- * this * HARD_SERVER_LIMIT are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 2048
-#endif
-
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 50
-#endif
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREADS
-#define DEFAULT_START_THREADS DEFAULT_THREADS_PER_CHILD
-#endif
-
-/* Maximum number of *free* threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_THREADS
-#define DEFAULT_MAX_FREE_THREADS 100
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_THREADS
-#define DEFAULT_MIN_FREE_THREADS 10
-#endif
-
-/* Check for definition of DEFAULT_REL_RUNTIMEDIR */
-#ifndef DEFAULT_REL_RUNTIMEDIR
-#define DEFAULT_REL_RUNTIMEDIR "logs"
-#endif
-
-/* File used for accept locking, when we use a file */
-/*#ifndef DEFAULT_LOCKFILE
- #define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
- #endif
-*/
-
-/* Where the main/parent process's pid is logged */
-/*#ifndef DEFAULT_PIDLOG
- #define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
- #endif
-*/
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 0
-#endif
-
-/* Default stack size allocated for each worker thread.
- */
-#ifndef DEFAULT_THREAD_STACKSIZE
-#define DEFAULT_THREAD_STACKSIZE 65536
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/netware/mpm_netware.c b/server/mpm/netware/mpm_netware.c
deleted file mode 100644
index 819a6cac39..0000000000
--- a/server/mpm/netware/mpm_netware.c
+++ /dev/null
@@ -1,1280 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * httpd.c: simple http daemon for answering WWW file requests
- *
- *
- * 03-21-93 Rob McCool wrote original code (up to NCSA HTTPd 1.3)
- *
- * 03-06-95 blong
- * changed server number for child-alone processes to 0 and changed name
- * of processes
- *
- * 03-10-95 blong
- * Added numerous speed hacks proposed by Robert S. Thau (rst@ai.mit.edu)
- * including set group before fork, and call gettime before to fork
- * to set up libraries.
- *
- * 04-14-95 rst / rh
- * Brandon's code snarfed from NCSA 1.4, but tinkered to work with the
- * Apache server, and also to have child processes do accept() directly.
- *
- * April-July '95 rst
- * Extensive rework for Apache.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_tables.h"
-#include "apr_getopt.h"
-#include "apr_thread_mutex.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "scoreboard.h"
-#include "ap_mpm.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "ap_mmn.h"
-
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-#include <signal.h>
-
-#include <netware.h>
-#include <nks/netware.h>
-#include <library.h>
-#include <screen.h>
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table. Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef HARD_SERVER_LIMIT
-#define HARD_SERVER_LIMIT 1
-#endif
-
-#define WORKER_DEAD SERVER_DEAD
-#define WORKER_STARTING SERVER_STARTING
-#define WORKER_READY SERVER_READY
-#define WORKER_IDLE_KILL SERVER_IDLE_KILL
-
-/* config globals */
-
-int ap_threads_per_child=0; /* Worker threads per child */
-static int ap_threads_to_start=0;
-static int ap_threads_min_free=0;
-static int ap_threads_max_free=0;
-static int ap_threads_limit=0;
-static int mpm_state = AP_MPMQ_STARTING;
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with MaxClients changes across SIGWINCH restarts. We use this
- * value to optimize routines that have to scan the entire scoreboard.
- */
-int ap_max_workers_limit = -1;
-server_rec *ap_server_conf;
-
-/* *Non*-shared http_main globals... */
-
-int hold_screen_on_exit = 0; /* Indicates whether the screen should be held open */
-
-static fd_set listenfds;
-static int listenmaxfd;
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-static apr_pool_t *pmain; /* Pool for httpd child stuff */
-
-static pid_t ap_my_pid; /* it seems silly to call getpid all the time */
-static char *ap_my_addrspace = NULL;
-
-static int die_now = 0;
-
-/* Keep track of the number of worker threads currently active */
-static unsigned long worker_thread_count;
-static int request_count;
-
-/* Structure used to register/deregister a console handler with the OS */
-static int InstallConsoleHandler(void);
-static void RemoveConsoleHandler(void);
-static int CommandLineInterpreter(scr_t screenID, const char *commandLine);
-static CommandParser_t ConsoleHandler = {0, NULL, 0};
-#define HANDLEDCOMMAND 0
-#define NOTMYCOMMAND 1
-
-static int show_settings = 0;
-
-//#define DBINFO_ON
-//#define DBPRINT_ON
-#ifdef DBPRINT_ON
-#define DBPRINT0(s) printf(s)
-#define DBPRINT1(s,v1) printf(s,v1)
-#define DBPRINT2(s,v1,v2) printf(s,v1,v2)
-#else
-#define DBPRINT0(s)
-#define DBPRINT1(s,v1)
-#define DBPRINT2(s,v1,v2)
-#endif
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile wait_to_finish=1;
-ap_generation_t volatile ap_my_generation=0;
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code, int worker_num, apr_pool_t *ptrans,
- apr_bucket_alloc_t *bucket_alloc) __attribute__ ((noreturn));
-static void clean_child_exit(int code, int worker_num, apr_pool_t *ptrans,
- apr_bucket_alloc_t *bucket_alloc)
-{
- apr_bucket_alloc_destroy(bucket_alloc);
- if (!shutdown_pending) {
- apr_pool_destroy(ptrans);
- }
-
- atomic_dec (&worker_thread_count);
- if (worker_num >=0)
- ap_update_child_status_from_indexes(0, worker_num, WORKER_DEAD,
- (request_rec *) NULL);
- NXThreadExit((void*)&code);
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = 1;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_NOT_SUPPORTED;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = HARD_SERVER_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = HARD_THREAD_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = ap_threads_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = ap_threads_min_free;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = ap_threads_max_free;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = 1;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-static void mpm_term(void)
-{
- RemoveConsoleHandler();
- wait_to_finish = 0;
- NXThreadYield();
-}
-
-static void sig_term(int sig)
-{
- if (shutdown_pending == 1) {
- /* Um, is this _probably_ not an error, if the user has
- * tried to do a shutdown twice quickly, so we won't
- * worry about reporting it.
- */
- return;
- }
- shutdown_pending = 1;
-
- DBPRINT0 ("waiting for threads\n");
- while (wait_to_finish) {
- apr_thread_yield();
- }
- DBPRINT0 ("goodbye\n");
-}
-
-/* restart() is the signal handler for SIGHUP and SIGWINCH
- * in the parent process, unless running in ONE_PROCESS mode
- */
-static void restart(void)
-{
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = 1;
-}
-
-static void set_signals(void)
-{
- apr_signal(SIGTERM, sig_term);
- apr_signal(SIGABRT, sig_term);
-}
-
-int nlmUnloadSignaled(int wait)
-{
- shutdown_pending = 1;
-
- if (wait) {
- while (wait_to_finish) {
- NXThreadYield();
- }
- }
-
- return 0;
-}
-
-/*****************************************************************
- * Child process main loop.
- * The following vars are static to avoid getting clobbered by longjmp();
- * they are really private to child_main.
- */
-
-
-int ap_graceful_stop_signalled(void)
-{
- /* not ever called anymore... */
- return 0;
-}
-
-#define MAX_WB_RETRIES 3
-#ifdef DBINFO_ON
-static int would_block = 0;
-static int retry_success = 0;
-static int retry_fail = 0;
-static int avg_retries = 0;
-#endif
-
-/*static */
-void worker_main(void *arg)
-{
- ap_listen_rec *lr, *first_lr, *last_lr = NULL;
- apr_pool_t *ptrans;
- apr_pool_t *pbucket;
- apr_allocator_t *allocator;
- apr_bucket_alloc_t *bucket_alloc;
- conn_rec *current_conn;
- apr_status_t stat = APR_EINIT;
- ap_sb_handle_t *sbh;
-
- int my_worker_num = (int)arg;
- apr_socket_t *csd = NULL;
- int requests_this_child = 0;
- apr_socket_t *sd = NULL;
- fd_set main_fds;
-
- int sockdes;
- int srv;
- struct timeval tv;
- int wouldblock_retry;
-
- tv.tv_sec = 1;
- tv.tv_usec = 0;
-
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
-
- apr_pool_create_ex(&ptrans, pmain, NULL, allocator);
- apr_allocator_owner_set(allocator, ptrans);
- apr_pool_tag(ptrans, "transaction");
-
- bucket_alloc = apr_bucket_alloc_create_ex(allocator);
-
- atomic_inc (&worker_thread_count);
-
- while (!die_now) {
- /*
- * (Re)initialize this child to a pre-connection state.
- */
- current_conn = NULL;
- apr_pool_clear(ptrans);
-
- if ((ap_max_requests_per_child > 0
- && requests_this_child++ >= ap_max_requests_per_child)) {
- DBPRINT1 ("\n**Thread slot %d is shutting down", my_worker_num);
- clean_child_exit(0, my_worker_num, ptrans, bucket_alloc);
- }
-
- ap_update_child_status_from_indexes(0, my_worker_num, WORKER_READY,
- (request_rec *) NULL);
-
- /*
- * Wait for an acceptable connection to arrive.
- */
-
- for (;;) {
- if (shutdown_pending || restart_pending || (ap_scoreboard_image->servers[0][my_worker_num].status == WORKER_IDLE_KILL)) {
- DBPRINT1 ("\nThread slot %d is shutting down\n", my_worker_num);
- clean_child_exit(0, my_worker_num, ptrans, bucket_alloc);
- }
-
- /* Check the listen queue on all sockets for requests */
- memcpy(&main_fds, &listenfds, sizeof(fd_set));
- srv = select(listenmaxfd + 1, &main_fds, NULL, NULL, &tv);
-
- if (srv <= 0) {
- if (srv < 0) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, WSAGetLastError(), ap_server_conf,
- "select() failed on listen socket");
- apr_thread_yield();
- }
- continue;
- }
-
- /* remember the last_lr we searched last time around so that
- we don't end up starving any particular listening socket */
- if (last_lr == NULL) {
- lr = ap_listeners;
- }
- else {
- lr = last_lr->next;
- if (!lr)
- lr = ap_listeners;
- }
- first_lr = lr;
- do {
- apr_os_sock_get(&sockdes, lr->sd);
- if (FD_ISSET(sockdes, &main_fds))
- goto got_listener;
- lr = lr->next;
- if (!lr)
- lr = ap_listeners;
- } while (lr != first_lr);
- /* if we get here, something unexpected happened. Go back
- into the select state and try again.
- */
- continue;
- got_listener:
- last_lr = lr;
- sd = lr->sd;
-
- wouldblock_retry = MAX_WB_RETRIES;
-
- while (wouldblock_retry) {
- if ((stat = apr_socket_accept(&csd, sd, ptrans)) == APR_SUCCESS) {
- break;
- }
- else {
- /* if the error is a wouldblock then maybe we were too
- quick try to pull the next request from the listen
- queue. Try a few more times then return to our idle
- listen state. */
- if (!APR_STATUS_IS_EAGAIN(stat)) {
- break;
- }
-
- if (wouldblock_retry--) {
- apr_thread_yield();
- }
- }
- }
-
- /* If we got a new socket, set it to non-blocking mode and process
- it. Otherwise handle the error. */
- if (stat == APR_SUCCESS) {
- apr_socket_opt_set(csd, APR_SO_NONBLOCK, 0);
-#ifdef DBINFO_ON
- if (wouldblock_retry < MAX_WB_RETRIES) {
- retry_success++;
- avg_retries += (MAX_WB_RETRIES-wouldblock_retry);
- }
-#endif
- break; /* We have a socket ready for reading */
- }
- else {
-#ifdef DBINFO_ON
- if (APR_STATUS_IS_EAGAIN(stat)) {
- would_block++;
- retry_fail++;
- }
- else if (
-#else
- if (APR_STATUS_IS_EAGAIN(stat) ||
-#endif
- APR_STATUS_IS_ECONNRESET(stat) ||
- APR_STATUS_IS_ETIMEDOUT(stat) ||
- APR_STATUS_IS_EHOSTUNREACH(stat) ||
- APR_STATUS_IS_ENETUNREACH(stat)) {
- ;
- }
- else if (APR_STATUS_IS_ENETDOWN(stat)) {
- /*
- * When the network layer has been shut down, there
- * is not much use in simply exiting: the parent
- * would simply re-create us (and we'd fail again).
- * Use the CHILDFATAL code to tear the server down.
- * @@@ Martin's idea for possible improvement:
- * A different approach would be to define
- * a new APEXIT_NETDOWN exit code, the reception
- * of which would make the parent shutdown all
- * children, then idle-loop until it detected that
- * the network is up again, and restart the children.
- * Ben Hyde noted that temporary ENETDOWN situations
- * occur in mobile IP.
- */
- ap_log_error(APLOG_MARK, APLOG_EMERG, stat, ap_server_conf,
- "apr_socket_accept: giving up.");
- clean_child_exit(APEXIT_CHILDFATAL, my_worker_num, ptrans,
- bucket_alloc);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, stat, ap_server_conf,
- "apr_socket_accept: (client socket)");
- clean_child_exit(1, my_worker_num, ptrans, bucket_alloc);
- }
- }
- }
-
- ap_create_sb_handle(&sbh, ptrans, 0, my_worker_num);
- /*
- * We now have a connection, so set it up with the appropriate
- * socket options, file descriptors, and read/write buffers.
- */
- current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd,
- my_worker_num, sbh,
- bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, csd);
- ap_lingering_close(current_conn);
- }
- request_count++;
- }
- clean_child_exit(0, my_worker_num, ptrans, bucket_alloc);
-}
-
-
-static int make_child(server_rec *s, int slot)
-{
- int tid;
- int err=0;
- NXContext_t ctx;
-
- if (slot + 1 > ap_max_workers_limit) {
- ap_max_workers_limit = slot + 1;
- }
-
- ap_update_child_status_from_indexes(0, slot, WORKER_STARTING,
- (request_rec *) NULL);
-
- if (ctx = NXContextAlloc((void (*)(void *)) worker_main, (void*)slot, NX_PRIO_MED, ap_thread_stacksize, NX_CTX_NORMAL, &err)) {
- char threadName[32];
-
- sprintf (threadName, "Apache_Worker %d", slot);
- NXContextSetName(ctx, threadName);
- err = NXThreadCreate(ctx, NX_THR_BIND_CONTEXT, &tid);
- if (err) {
- NXContextFree (ctx);
- }
- }
-
- if (err) {
- /* create thread didn't succeed. Fix the scoreboard or else
- * it will say SERVER_STARTING forever and ever
- */
- ap_update_child_status_from_indexes(0, slot, WORKER_DEAD,
- (request_rec *) NULL);
-
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again. */
- apr_thread_yield();
-
- return -1;
- }
-
- ap_scoreboard_image->servers[0][slot].tid = tid;
-
- return 0;
-}
-
-
-/* start up a bunch of worker threads */
-static void startup_workers(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < ap_threads_limit; ++i) {
- if (ap_scoreboard_image->servers[0][i].status != WORKER_DEAD) {
- continue;
- }
- if (make_child(ap_server_conf, i) < 0) {
- break;
- }
- --number_to_start;
- }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (64)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(apr_pool_t *p)
-{
- int i;
- int to_kill;
- int idle_count;
- worker_score *ws;
- int free_length;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead;
- int total_non_dead;
-
- /* initialize the free_list */
- free_length = 0;
-
- to_kill = -1;
- idle_count = 0;
- last_non_dead = -1;
- total_non_dead = 0;
-
- for (i = 0; i < ap_threads_limit; ++i) {
- int status;
-
- if (i >= ap_max_workers_limit && free_length == idle_spawn_rate)
- break;
- ws = &ap_scoreboard_image->servers[0][i];
- status = ws->status;
- if (status == WORKER_DEAD) {
- /* try to keep children numbers as low as possible */
- if (free_length < idle_spawn_rate) {
- free_slots[free_length] = i;
- ++free_length;
- }
- }
- else if (status == WORKER_IDLE_KILL) {
- /* If it is already marked to die, skip it */
- continue;
- }
- else {
- /* We consider a starting server as idle because we started it
- * at least a cycle ago, and if it still hasn't finished starting
- * then we're just going to swamp things worse by forking more.
- * So we hopefully won't need to fork more if we count it.
- * This depends on the ordering of SERVER_READY and SERVER_STARTING.
- */
- if (status <= WORKER_READY) {
- ++ idle_count;
- /* always kill the highest numbered child if we have to...
- * no really well thought out reason ... other than observing
- * the server behaviour under linux where lower numbered children
- * tend to service more hits (and hence are more likely to have
- * their data in cpu caches).
- */
- to_kill = i;
- }
-
- ++total_non_dead;
- last_non_dead = i;
- }
- }
- DBPRINT2("Total: %d Idle Count: %d \r", total_non_dead, idle_count);
- ap_max_workers_limit = last_non_dead + 1;
- if (idle_count > ap_threads_max_free) {
- /* kill off one child... we use the pod because that'll cause it to
- * shut down gracefully, in case it happened to pick up a request
- * while we were counting
- */
- idle_spawn_rate = 1;
- ap_update_child_status_from_indexes(0, last_non_dead, WORKER_IDLE_KILL,
- (request_rec *) NULL);
- DBPRINT1("\nKilling idle thread: %d\n", last_non_dead);
- }
- else if (idle_count < ap_threads_min_free) {
- /* terminate the free list */
- if (free_length == 0) {
- /* only report this condition once */
- static int reported = 0;
-
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf,
- "server reached MaxClients setting, consider"
- " raising the MaxClients setting");
- reported = 1;
- }
- idle_spawn_rate = 1;
- }
- else {
- if (idle_spawn_rate >= 8) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "server seems busy, (you may need "
- "to increase StartServers, or Min/MaxSpareServers), "
- "spawning %d children, there are %d idle, and "
- "%d total children", idle_spawn_rate,
- idle_count, total_non_dead);
- }
- DBPRINT0("\n");
- for (i = 0; i < free_length; ++i) {
- DBPRINT1("Spawning additional thread slot: %d\n", free_slots[i]);
- make_child(ap_server_conf, free_slots[i]);
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- }
- else if (idle_spawn_rate < MAX_SPAWN_RATE) {
- idle_spawn_rate *= 2;
- }
- }
- }
- else {
- idle_spawn_rate = 1;
- }
-}
-
-static void display_settings ()
-{
- int status_array[SERVER_NUM_STATUS];
- int i, status, total=0;
- int reqs = request_count;
-#ifdef DBINFO_ON
- int wblock = would_block;
-
- would_block = 0;
-#endif
-
- request_count = 0;
-
- ClearScreen (getscreenhandle());
- printf("%s \n", ap_get_server_version());
-
- for (i=0;i<SERVER_NUM_STATUS;i++) {
- status_array[i] = 0;
- }
-
- for (i = 0; i < ap_threads_limit; ++i) {
- status = (ap_scoreboard_image->servers[0][i]).status;
- status_array[status]++;
- }
-
- for (i=0;i<SERVER_NUM_STATUS;i++) {
- switch(i)
- {
- case SERVER_DEAD:
- printf ("Available:\t%d\n", status_array[i]);
- break;
- case SERVER_STARTING:
- printf ("Starting:\t%d\n", status_array[i]);
- break;
- case SERVER_READY:
- printf ("Ready:\t\t%d\n", status_array[i]);
- break;
- case SERVER_BUSY_READ:
- printf ("Busy:\t\t%d\n", status_array[i]);
- break;
- case SERVER_BUSY_WRITE:
- printf ("Busy Write:\t%d\n", status_array[i]);
- break;
- case SERVER_BUSY_KEEPALIVE:
- printf ("Busy Keepalive:\t%d\n", status_array[i]);
- break;
- case SERVER_BUSY_LOG:
- printf ("Busy Log:\t%d\n", status_array[i]);
- break;
- case SERVER_BUSY_DNS:
- printf ("Busy DNS:\t%d\n", status_array[i]);
- break;
- case SERVER_CLOSING:
- printf ("Closing:\t%d\n", status_array[i]);
- break;
- case SERVER_GRACEFUL:
- printf ("Restart:\t%d\n", status_array[i]);
- break;
- case SERVER_IDLE_KILL:
- printf ("Idle Kill:\t%d\n", status_array[i]);
- break;
- default:
- printf ("Unknown Status:\t%d\n", status_array[i]);
- break;
- }
- if (i != SERVER_DEAD)
- total+=status_array[i];
- }
- printf ("Total Running:\t%d\tout of: \t%d\n", total, ap_threads_limit);
- printf ("Requests per interval:\t%d\n", reqs);
-
-#ifdef DBINFO_ON
- printf ("Would blocks:\t%d\n", wblock);
- printf ("Successful retries:\t%d\n", retry_success);
- printf ("Failed retries:\t%d\n", retry_fail);
- printf ("Avg retries:\t%d\n", retry_success == 0 ? 0 : avg_retries / retry_success);
-#endif
-}
-
-static void show_server_data()
-{
- ap_listen_rec *lr;
- module **m;
-
- printf("%s\n", ap_get_server_version());
- if (ap_my_addrspace && (ap_my_addrspace[0] != 'O') && (ap_my_addrspace[1] != 'S'))
- printf(" Running in address space %s\n", ap_my_addrspace);
-
-
- /* Display listening ports */
- printf(" Listening on port(s):");
- lr = ap_listeners;
- do {
- printf(" %d", lr->bind_addr->port);
- lr = lr->next;
- } while(lr && lr != ap_listeners);
-
- /* Display dynamic modules loaded */
- printf("\n");
- for (m = ap_loaded_modules; *m != NULL; m++) {
- if (((module*)*m)->dynamic_load_handle) {
- printf(" Loaded dynamic module %s\n", ((module*)*m)->name);
- }
- }
-}
-
-
-static int setup_listeners(server_rec *s)
-{
- ap_listen_rec *lr;
- int sockdes;
-
- if (ap_setup_listeners(s) < 1 ) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, 0, s,
- "no listening sockets available, shutting down");
- return -1;
- }
-
- listenmaxfd = -1;
- FD_ZERO(&listenfds);
- for (lr = ap_listeners; lr; lr = lr->next) {
- apr_os_sock_get(&sockdes, lr->sd);
- FD_SET(sockdes, &listenfds);
- if (sockdes > listenmaxfd) {
- listenmaxfd = sockdes;
- }
- }
- return 0;
-}
-
-static int shutdown_listeners()
-{
- ap_listen_rec *lr;
-
- for (lr = ap_listeners; lr; lr = lr->next) {
- apr_socket_close(lr->sd);
- }
- ap_listeners = NULL;
- return 0;
-}
-
-/*****************************************************************
- * Executive routines.
- */
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- apr_status_t status=0;
-
- pconf = _pconf;
- ap_server_conf = s;
-
- if (setup_listeners(s)) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, status, s,
- "no listening sockets available, shutting down");
- return -1;
- }
-
- restart_pending = shutdown_pending = 0;
- worker_thread_count = 0;
-
- if (!is_graceful) {
- if (ap_run_pre_mpm(s->process->pool, SB_NOT_SHARED) != OK) {
- return 1;
- }
- }
-
- /* Only set slot 0 since that is all NetWare will ever have. */
- ap_scoreboard_image->parent[0].pid = getpid();
-
- set_signals();
-
- apr_pool_create(&pmain, pconf);
- ap_run_child_init(pmain, ap_server_conf);
-
- if (ap_threads_max_free < ap_threads_min_free + 1) /* Don't thrash... */
- ap_threads_max_free = ap_threads_min_free + 1;
- request_count = 0;
-
- startup_workers(ap_threads_to_start);
-
- /* Allow the Apache screen to be closed normally on exit() only if it
- has not been explicitly forced to close on exit(). (ie. the -E flag
- was specified at startup) */
- if (hold_screen_on_exit > 0) {
- hold_screen_on_exit = 0;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(accept_mutex),
- apr_proc_mutex_defname());
-#endif
- show_server_data();
-
- mpm_state = AP_MPMQ_RUNNING;
- while (!restart_pending && !shutdown_pending) {
- perform_idle_server_maintenance(pconf);
- if (show_settings)
- display_settings();
- apr_thread_yield();
- apr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
- }
- mpm_state = AP_MPMQ_STOPPING;
-
-
- /* Shutdown the listen sockets so that we don't get stuck in a blocking call.
- shutdown_listeners();*/
-
- if (shutdown_pending) { /* Got an unload from the console */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "caught SIGTERM, shutting down");
-
- while (worker_thread_count > 0) {
- printf ("\rShutdown pending. Waiting for %d thread(s) to terminate...",
- worker_thread_count);
- apr_thread_yield();
- }
-
- return 1;
- }
- else { /* the only other way out is a restart */
- /* advance to the next generation */
- /* XXX: we really need to make sure this new generation number isn't in
- * use by any of the children.
- */
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "Graceful restart requested, doing restart");
-
- /* Wait for all of the threads to terminate before initiating the restart */
- while (worker_thread_count > 0) {
- printf ("\rRestart pending. Waiting for %d thread(s) to terminate...",
- worker_thread_count);
- apr_thread_yield();
- }
- printf ("\nRestarting...\n");
- }
-
- return 0;
-}
-
-static int netware_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- int debug;
- char *addrname = NULL;
-
- mpm_state = AP_MPMQ_STARTING;
-
- debug = ap_exists_config_define("DEBUG");
-
- is_graceful = 0;
- ap_my_pid = getpid();
- addrname = getaddressspacename (NULL, NULL);
- if (addrname) {
- ap_my_addrspace = apr_pstrdup (p, addrname);
- free (addrname);
- }
-
- ap_listen_pre_config();
- ap_threads_to_start = DEFAULT_START_THREADS;
- ap_threads_min_free = DEFAULT_MIN_FREE_THREADS;
- ap_threads_max_free = DEFAULT_MAX_FREE_THREADS;
- ap_threads_limit = HARD_THREAD_LIMIT;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- ap_extended_status = 0;
- ap_thread_stacksize = DEFAULT_THREAD_STACKSIZE;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- return OK;
-}
-
-static void netware_mpm_hooks(apr_pool_t *p)
-{
- ap_hook_pre_config(netware_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-void netware_rewrite_args(process_rec *process)
-{
- char *def_server_root;
- char optbuf[3];
- const char *opt_arg;
- apr_getopt_t *opt;
- apr_array_header_t *mpm_new_argv;
-
-
- atexit (mpm_term);
- InstallConsoleHandler();
-
- /* Make sure to hold the Apache screen open if exit() is called */
- hold_screen_on_exit = 1;
-
- /* Rewrite process->argv[];
- *
- * add default -d serverroot from the path of this executable
- *
- * The end result will look like:
- * The -d serverroot default from the running executable
- */
- if (process->argc > 0) {
- char *s = apr_pstrdup (process->pconf, process->argv[0]);
- if (s) {
- int i, len = strlen(s);
-
- for (i=len; i; i--) {
- if (s[i] == '\\' || s[i] == '/') {
- s[i] = NULL;
- apr_filepath_merge(&def_server_root, NULL, s,
- APR_FILEPATH_TRUENAME, process->pool);
- break;
- }
- }
- /* Use process->pool so that the rewritten argv
- * lasts for the lifetime of the server process,
- * because pconf will be destroyed after the
- * initial pre-flight of the config parser.
- */
- mpm_new_argv = apr_array_make(process->pool, process->argc + 2,
- sizeof(const char *));
- *(const char **)apr_array_push(mpm_new_argv) = process->argv[0];
- *(const char **)apr_array_push(mpm_new_argv) = "-d";
- *(const char **)apr_array_push(mpm_new_argv) = def_server_root;
-
- optbuf[0] = '-';
- optbuf[2] = '\0';
- apr_getopt_init(&opt, process->pool, process->argc, (char**) process->argv);
- while (apr_getopt(opt, AP_SERVER_BASEARGS"n:", optbuf + 1, &opt_arg) == APR_SUCCESS) {
- switch (optbuf[1]) {
- case 'n':
- if (opt_arg) {
- renamescreen(opt_arg);
- }
- break;
- case 'E':
- /* Don't need to hold the screen open if the output is going to a file */
- hold_screen_on_exit = -1;
- default:
- *(const char **)apr_array_push(mpm_new_argv) =
- apr_pstrdup(process->pool, optbuf);
-
- if (opt_arg) {
- *(const char **)apr_array_push(mpm_new_argv) = opt_arg;
- }
- break;
- }
- }
- process->argc = mpm_new_argv->nelts;
- process->argv = (const char * const *) mpm_new_argv->elts;
- }
- }
-}
-
-static int CommandLineInterpreter(scr_t screenID, const char *commandLine)
-{
- char *szCommand = "APACHE2 ";
- int iCommandLen = 8;
- char szcommandLine[256];
- char *pID;
- screenID = screenID;
-
-
- if (commandLine == NULL)
- return NOTMYCOMMAND;
- if (strlen(commandLine) <= strlen(szCommand))
- return NOTMYCOMMAND;
-
- strncpy (szcommandLine, commandLine, sizeof(szcommandLine)-1);
-
- /* All added commands begin with "APACHE2 " */
-
- if (!strnicmp(szCommand, szcommandLine, iCommandLen)) {
- ActivateScreen (getscreenhandle());
-
- /* If an instance id was not given but the nlm is loaded in
- protected space, then the the command belongs to the
- OS address space instance to pass it on. */
- pID = strstr (szcommandLine, "-p");
- if ((pID == NULL) && nlmisloadedprotected())
- return NOTMYCOMMAND;
-
- /* If we got an instance id but it doesn't match this
- instance of the nlm, pass it on. */
- if (pID) {
- pID = &pID[2];
- while (*pID && (*pID == ' '))
- pID++;
- }
- if (pID && ap_my_addrspace && strnicmp(pID, ap_my_addrspace, strlen(ap_my_addrspace)))
- return NOTMYCOMMAND;
-
- /* If we have determined that this command belongs to this
- instance of the nlm, then handle it. */
- if (!strnicmp("RESTART",&szcommandLine[iCommandLen],3)) {
- printf("Restart Requested...\n");
- restart();
- }
- else if (!strnicmp("VERSION",&szcommandLine[iCommandLen],3)) {
- printf("Server version: %s\n", ap_get_server_version());
- printf("Server built: %s\n", ap_get_server_built());
- }
- else if (!strnicmp("MODULES",&szcommandLine[iCommandLen],3)) {
- ap_show_modules();
- }
- else if (!strnicmp("DIRECTIVES",&szcommandLine[iCommandLen],3)) {
- ap_show_directives();
- }
- else if (!strnicmp("SHUTDOWN",&szcommandLine[iCommandLen],3)) {
- printf("Shutdown Requested...\n");
- shutdown_pending = 1;
- }
- else if (!strnicmp("SETTINGS",&szcommandLine[iCommandLen],3)) {
- if (show_settings) {
- show_settings = 0;
- ClearScreen (getscreenhandle());
- show_server_data();
- }
- else {
- show_settings = 1;
- display_settings();
- }
- }
- else {
- show_settings = 0;
- if (strnicmp("HELP",&szcommandLine[iCommandLen],3))
- printf("Unknown APACHE2 command %s\n", &szcommandLine[iCommandLen]);
- printf("Usage: APACHE2 [command] [-p <instance ID>]\n");
- printf("Commands:\n");
- printf("\tDIRECTIVES - Show directives\n");
- printf("\tHELP - Display this help information\n");
- printf("\tMODULES - Show a list of the loaded modules\n");
- printf("\tRESTART - Reread the configuration file and restart Apache\n");
- printf("\tSETTINGS - Show current thread status\n");
- printf("\tSHUTDOWN - Shutdown Apache\n");
- printf("\tVERSION - Display the server version information\n");
- }
-
- /* Tell NetWare we handled the command */
- return HANDLEDCOMMAND;
- }
-
- /* Tell NetWare that the command isn't mine */
- return NOTMYCOMMAND;
-}
-
-static int InstallConsoleHandler(void)
-{
- /* Our command line handler interfaces the system operator
- with this NLM */
-
- NX_WRAP_INTERFACE(CommandLineInterpreter, 2, (void*)&(ConsoleHandler.parser));
-
- ConsoleHandler.rTag = AllocateResourceTag(getnlmhandle(), "Command Line Processor",
- ConsoleCommandSignature);
- if (!ConsoleHandler.rTag)
- {
- printf("Error on allocate resource tag\n");
- return 1;
- }
-
- RegisterConsoleCommand(&ConsoleHandler);
-
- /* The Remove procedure unregisters the console handler */
-
- return 0;
-}
-
-static void RemoveConsoleHandler(void)
-{
- UnRegisterConsoleCommand(&ConsoleHandler);
- NX_UNWRAP_INTERFACE(ConsoleHandler.parser);
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_to_start = atoi(arg);
- return NULL;
-}
-
-static const char *set_min_free_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_min_free = atoi(arg);
- if (ap_threads_min_free <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareServers set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- ap_threads_min_free = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_free_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_max_free = atoi(arg);
- return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_limit = atoi(arg);
- if (ap_threads_limit > HARD_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxThreads of %d exceeds compile time limit "
- "of %d threads,", ap_threads_limit, HARD_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering MaxThreads to %d. To increase, please "
- "see the", HARD_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " HARD_THREAD_LIMIT define in %s.",
- AP_MPM_HARD_LIMITS_FILE);
- ap_threads_limit = HARD_THREAD_LIMIT;
- }
- else if (ap_threads_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require MaxThreads > 0, setting to 1");
- ap_threads_limit = 1;
- }
- return NULL;
-}
-
-static const command_rec netware_mpm_cmds[] = {
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartThreads", set_threads_to_start, NULL, RSRC_CONF,
- "Number of worker threads launched at server startup"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_free_threads, NULL, RSRC_CONF,
- "Minimum number of idle threads, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_free_threads, NULL, RSRC_CONF,
- "Maximum number of idle threads"),
-AP_INIT_TAKE1("MaxThreads", set_thread_limit, NULL, RSRC_CONF,
- "Maximum number of worker threads alive at the same time"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_netware_module = {
- MPM20_MODULE_STUFF,
- netware_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- netware_mpm_cmds, /* command apr_table_t */
- netware_mpm_hooks, /* register hooks */
-};
diff --git a/server/mpm/prefork/.cvsignore b/server/mpm/prefork/.cvsignore
deleted file mode 100644
index dc53ac865d..0000000000
--- a/server/mpm/prefork/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.lo
-*.la
-Makefile
-.deps
-.libs
diff --git a/server/mpm/prefork/Makefile.in b/server/mpm/prefork/Makefile.in
deleted file mode 100644
index 034bf5ce84..0000000000
--- a/server/mpm/prefork/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libprefork.la
-LTLIBRARY_SOURCES = prefork.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/prefork/config.m4 b/server/mpm/prefork/config.m4
deleted file mode 100644
index 9c189a8642..0000000000
--- a/server/mpm/prefork/config.m4
+++ /dev/null
@@ -1,3 +0,0 @@
-if test "$MPM_NAME" = "prefork" ; then
- APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/prefork/mpm.h b/server/mpm/prefork/mpm.h
deleted file mode 100644
index 64c1114866..0000000000
--- a/server/mpm/prefork/mpm.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "scoreboard.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_PREFORK_H
-#define APACHE_MPM_PREFORK_H
-
-#define PREFORK_MPM
-
-#define MPM_NAME "Prefork"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_WANT_SIGNAL_SERVER
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-#define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#define AP_MPM_USES_POD 1
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-#endif /* APACHE_MPM_PREFORK_H */
diff --git a/server/mpm/prefork/mpm_default.h b/server/mpm/prefork/mpm_default.h
deleted file mode 100644
index 03f62b32e1..0000000000
--- a/server/mpm/prefork/mpm_default.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 5
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 5
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
deleted file mode 100644
index 3dbbe58fff..0000000000
--- a/server/mpm/prefork/prefork.c
+++ /dev/null
@@ -1,1376 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "scoreboard.h"
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "ap_mmn.h"
-#include "apr_poll.h"
-
-#ifdef HAVE_BSTRING_H
-#include <bstring.h> /* for IRIX, FD_SET calls bzero() */
-#endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-#include <signal.h>
-#include <sys/times.h>
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table. Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 256
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 200000
-#endif
-
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 1
-#endif
-
-/* config globals */
-
-int ap_threads_per_child=0; /* Worker threads per child */
-static apr_proc_mutex_t *accept_mutex;
-static int ap_daemons_to_start=0;
-static int ap_daemons_min_free=0;
-static int ap_daemons_max_free=0;
-static int ap_daemons_limit=0; /* MaxClients */
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int changed_limit_at_restart;
-static int mpm_state = AP_MPMQ_STARTING;
-static ap_pod_t *pod;
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts. We
- * use this value to optimize routines that have to scan the entire scoreboard.
- */
-int ap_max_daemons_limit = -1;
-server_rec *ap_server_conf;
-
-/* one_process --- debugging mode variable; can be set from the command line
- * with the -X flag. If set, this gets you the child_main loop running
- * in the process which originally started up (no detach, no make_child),
- * which is a pretty nice debugging environment. (You'll get a SIGHUP
- * early in standalone_main; just continue through. This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-static apr_pool_t *pchild; /* Pool for httpd child stuff */
-
-static pid_t ap_my_pid; /* it seems silly to call getpid all the time */
-static pid_t parent_pid;
-#ifndef MULTITHREAD
-static int my_child_num;
-#endif
-ap_generation_t volatile ap_my_generation=0;
-
-#ifdef TPF
-int tpf_child = 0;
-char tpf_server_name[INETD_SERVNAME_LENGTH+1];
-#endif /* TPF */
-
-static int die_now = 0;
-
-#ifdef GPROF
-/*
- * change directory for gprof to plop the gmon.out file
- * configure in httpd.conf:
- * GprofDir $RuntimeDir/ -> $ServerRoot/$RuntimeDir/gmon.out
- * GprofDir $RuntimeDir/% -> $ServerRoot/$RuntimeDir/gprof.$pid/gmon.out
- */
-static void chdir_for_gprof(void)
-{
- core_server_config *sconf =
- ap_get_module_config(ap_server_conf->module_config, &core_module);
- char *dir = sconf->gprof_dir;
- const char *use_dir;
-
- if(dir) {
- apr_status_t res;
- char buf[512];
- int len = strlen(sconf->gprof_dir) - 1;
- if(*(dir + len) == '%') {
- dir[len] = '\0';
- apr_snprintf(buf, sizeof(buf), "%sgprof.%d", dir, (int)getpid());
- }
- else {
- buf[0] = '\0';
- }
- use_dir = ap_server_root_relative(pconf, buf[0] ? buf : dir);
- res = apr_dir_make(use_dir,
- APR_UREAD | APR_UWRITE | APR_UEXECUTE |
- APR_GREAD | APR_GEXECUTE |
- APR_WREAD | APR_WEXECUTE, pconf);
- if(res != APR_SUCCESS && !APR_STATUS_IS_EEXIST(res)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, res, ap_server_conf,
- "gprof: error creating directory %s", dir);
- }
- }
- else {
- use_dir = ap_server_root_relative(pconf, DEFAULT_REL_RUNTIMEDIR);
- }
-
- chdir(use_dir);
-}
-#else
-#define chdir_for_gprof()
-#endif
-
-/* XXX - I don't know if TPF will ever use this module or not, so leave
- * the ap_check_signals calls in but disable them - manoj */
-#define ap_check_signals()
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code) __attribute__ ((noreturn));
-static void clean_child_exit(int code)
-{
- mpm_state = AP_MPMQ_STOPPING;
-
- if (pchild) {
- apr_pool_destroy(pchild);
- }
- ap_mpm_pod_close(pod);
- chdir_for_gprof();
- exit(code);
-}
-
-static void accept_mutex_on(void)
-{
- apr_status_t rv = apr_proc_mutex_lock(accept_mutex);
- if (rv != APR_SUCCESS) {
- const char *msg = "couldn't grab the accept mutex";
-
- if (ap_my_generation !=
- ap_scoreboard_image->global->running_generation) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, NULL, msg);
- clean_child_exit(0);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, NULL, msg);
- exit(APEXIT_CHILDFATAL);
- }
- }
-}
-
-static void accept_mutex_off(void)
-{
- apr_status_t rv = apr_proc_mutex_unlock(accept_mutex);
- if (rv != APR_SUCCESS) {
- const char *msg = "couldn't release the accept mutex";
-
- if (ap_my_generation !=
- ap_scoreboard_image->global->running_generation) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, NULL, msg);
- /* don't exit here... we have a connection to
- * process, after which point we'll see that the
- * generation changed and we'll exit cleanly
- */
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, NULL, msg);
- exit(APEXIT_CHILDFATAL);
- }
- }
-}
-
-/* On some architectures it's safe to do unserialized accept()s in the single
- * Listen case. But it's never safe to do it in the case where there's
- * multiple Listen statements. Define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
- * when it's safe in the single Listen case.
- */
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) do {if (ap_listeners->next) {stmt;}} while(0)
-#else
-#define SAFE_ACCEPT(stmt) do {stmt;} while(0)
-#endif
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_NOT_SUPPORTED;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = server_limit;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = HARD_THREAD_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = ap_daemons_min_free;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = ap_daemons_max_free;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = server_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-#if defined(NEED_WAITPID)
-/*
- Systems without a real waitpid sometimes lose a child's exit while waiting
- for another. Search through the scoreboard for missing children.
- */
-int reap_children(int *exitcode, apr_exit_why_e *status)
-{
- int n, pid;
-
- for (n = 0; n < ap_max_daemons_limit; ++n) {
- if (ap_scoreboard_image->servers[n][0].status != SERVER_DEAD &&
- kill((pid = ap_scoreboard_image->parent[n].pid), 0) == -1) {
- ap_update_child_status_from_indexes(n, 0, SERVER_DEAD, NULL);
- /* just mark it as having a successful exit status */
- *status = APR_PROC_EXIT;
- *exitcode = 0;
- return(pid);
- }
- }
- return 0;
-}
-#endif
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-static void just_die(int sig)
-{
- clean_child_exit(0);
-}
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-
-static void sig_term(int sig)
-{
- if (shutdown_pending == 1) {
- /* Um, is this _probably_ not an error, if the user has
- * tried to do a shutdown twice quickly, so we won't
- * worry about reporting it.
- */
- return;
- }
- shutdown_pending = 1;
-}
-
-/* restart() is the signal handler for SIGHUP and AP_SIG_GRACEFUL
- * in the parent process, unless running in ONE_PROCESS mode
- */
-static void restart(int sig)
-{
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = (sig == AP_SIG_GRACEFUL);
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
- struct sigaction sa;
-#endif
-
- if (!one_process) {
- ap_fatal_signal_setup(ap_server_conf, pconf);
- }
-
-#ifndef NO_USE_SIGACTION
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sa.sa_handler = sig_term;
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-#ifdef SIGINT
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXCPU, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXFSZ, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGPIPE)");
-#endif
-
- /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
- * processing one
- */
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
- sa.sa_handler = restart;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
- if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
- if (!one_process) {
-#ifdef SIGXCPU
- apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
- apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
- }
-
- apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
- apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
- apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
- apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Child process main loop.
- * The following vars are static to avoid getting clobbered by longjmp();
- * they are really private to child_main.
- */
-
-static int requests_this_child;
-static int num_listensocks = 0;
-
-
-int ap_graceful_stop_signalled(void)
-{
- /* not ever called anymore... */
- return 0;
-}
-
-
-static void child_main(int child_num_arg)
-{
- apr_pool_t *ptrans;
- apr_allocator_t *allocator;
- apr_status_t status;
- int i;
- ap_listen_rec *lr;
- apr_pollset_t *pollset;
- ap_sb_handle_t *sbh;
- apr_bucket_alloc_t *bucket_alloc;
- int last_poll_idx = 0;
-
- mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as this
- * child initializes
- */
-
- my_child_num = child_num_arg;
- ap_my_pid = getpid();
- requests_this_child = 0;
-
- ap_fatal_signal_child_setup(ap_server_conf);
-
- /* Get a sub context for global allocations in this child, so that
- * we can have cleanups occur when the child exits.
- */
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- apr_pool_create_ex(&pchild, pconf, NULL, allocator);
- apr_allocator_owner_set(allocator, pchild);
-
- apr_pool_create(&ptrans, pchild);
- apr_pool_tag(ptrans, "transaction");
-
- /* needs to be done before we switch UIDs so we have permissions */
- ap_reopen_scoreboard(pchild, NULL, 0);
- status = apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname, pchild);
- if (status != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
- "Couldn't initialize cross-process lock in child "
- "(%s) (%d)", ap_lock_fname, ap_accept_lock_mech);
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (unixd_setup_child()) {
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_run_child_init(pchild, ap_server_conf);
-
- ap_create_sb_handle(&sbh, pchild, my_child_num, 0);
-
- (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
-
- /* Set up the pollfd array */
- /* ### check the status */
- (void) apr_pollset_create(&pollset, num_listensocks, pchild, 0);
-
- for (lr = ap_listeners, i = num_listensocks; i--; lr = lr->next) {
- apr_pollfd_t pfd = { 0 };
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = lr->sd;
- pfd.reqevents = APR_POLLIN;
- pfd.client_data = lr;
-
- /* ### check the status */
- (void) apr_pollset_add(pollset, &pfd);
- }
-
- mpm_state = AP_MPMQ_RUNNING;
-
- bucket_alloc = apr_bucket_alloc_create(pchild);
-
- while (!die_now) {
- conn_rec *current_conn;
- void *csd;
-
- /*
- * (Re)initialize this child to a pre-connection state.
- */
-
- apr_pool_clear(ptrans);
-
- if ((ap_max_requests_per_child > 0
- && requests_this_child++ >= ap_max_requests_per_child)) {
- clean_child_exit(0);
- }
-
- (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
-
- /*
- * Wait for an acceptable connection to arrive.
- */
-
- /* Lock around "accept", if necessary */
- SAFE_ACCEPT(accept_mutex_on());
-
- if (num_listensocks == 1) {
- /* There is only one listener record, so refer to that one. */
- lr = ap_listeners;
- }
- else {
- /* multiple listening sockets - need to poll */
- for (;;) {
- apr_int32_t numdesc;
- const apr_pollfd_t *pdesc;
-
- /* timeout == -1 == wait forever */
- status = apr_pollset_poll(pollset, -1, &numdesc, &pdesc);
- if (status != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(status)) {
- if (one_process && shutdown_pending) {
- return;
- }
- continue;
- }
- /* Single Unix documents select as returning errnos
- * EBADF, EINTR, and EINVAL... and in none of those
- * cases does it make sense to continue. In fact
- * on Linux 2.0.x we seem to end up with EFAULT
- * occasionally, and we'd loop forever due to it.
- */
- ap_log_error(APLOG_MARK, APLOG_ERR, status,
- ap_server_conf, "apr_pollset_poll: (listen)");
- clean_child_exit(1);
- }
-
- /* We can always use pdesc[0], but sockets at position N
- * could end up completely starved of attention in a very
- * busy server. Therefore, we round-robin across the
- * returned set of descriptors. While it is possible that
- * the returned set of descriptors might flip around and
- * continue to starve some sockets, we happen to know the
- * internal pollset implementation retains ordering
- * stability of the sockets. Thus, the round-robin should
- * ensure that a socket will eventually be serviced.
- */
- if (last_poll_idx >= numdesc)
- last_poll_idx = 0;
-
- /* Grab a listener record from the client_data of the poll
- * descriptor, and advance our saved index to round-robin
- * the next fetch.
- *
- * ### hmm... this descriptor might have POLLERR rather
- * ### than POLLIN
- */
- lr = pdesc[last_poll_idx++].client_data;
- goto got_fd;
- }
- }
- got_fd:
- /* if we accept() something we don't want to die, so we have to
- * defer the exit
- */
- status = lr->accept_func(&csd, lr, ptrans);
-
- SAFE_ACCEPT(accept_mutex_off()); /* unlock after "accept" */
-
- if (status == APR_EGENERAL) {
- /* resource shortage or should-not-occur occured */
- clean_child_exit(1);
- }
- else if (status != APR_SUCCESS) {
- continue;
- }
-
- /*
- * We now have a connection, so set it up with the appropriate
- * socket options, file descriptors, and read/write buffers.
- */
-
- current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, my_child_num, sbh, bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, csd);
- ap_lingering_close(current_conn);
- }
-
- /* Check the pod and the generation number after processing a
- * connection so that we'll go away if a graceful restart occurred
- * while we were processing the connection or we are the lucky
- * idle server process that gets to die.
- */
- if (ap_mpm_pod_check(pod) == APR_SUCCESS) { /* selected as idle? */
- die_now = 1;
- }
- else if (ap_my_generation !=
- ap_scoreboard_image->global->running_generation) { /* restart? */
- /* yeah, this could be non-graceful restart, in which case the
- * parent will kill us soon enough, but why bother checking?
- */
- die_now = 1;
- }
- }
- clean_child_exit(0);
-}
-
-
-static int make_child(server_rec *s, int slot)
-{
- int pid;
-
- if (slot + 1 > ap_max_daemons_limit) {
- ap_max_daemons_limit = slot + 1;
- }
-
- if (one_process) {
- apr_signal(SIGHUP, sig_term);
- /* Don't catch AP_SIG_GRACEFUL in ONE_PROCESS mode :) */
- apr_signal(SIGINT, sig_term);
-#ifdef SIGQUIT
- apr_signal(SIGQUIT, SIG_DFL);
-#endif
- apr_signal(SIGTERM, sig_term);
- child_main(slot);
- return 0;
- }
-
- (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
- (request_rec *) NULL);
-
-
-#ifdef _OSD_POSIX
- /* BS2000 requires a "special" version of fork() before a setuid() call */
- if ((pid = os_fork(unixd_config.user_name)) == -1) {
-#elif defined(TPF)
- if ((pid = os_fork(s, slot)) == -1) {
-#else
- if ((pid = fork()) == -1) {
-#endif
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, s, "fork: Unable to fork new process");
-
- /* fork didn't succeed. Fix the scoreboard or else
- * it will say SERVER_STARTING forever and ever
- */
- (void) ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD,
- (request_rec *) NULL);
-
- /* In case system resources are maxxed out, we don't want
- * Apache running away with the CPU trying to fork over and
- * over and over again.
- */
- sleep(10);
-
- return -1;
- }
-
- if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
- /* by default AIX binds to a single processor
- * this bit unbinds children which will then bind to another cpu
- */
- int status = bindprocessor(BINDPROCESS, (int)getpid(),
- PROCESSOR_CLASS_ANY);
- if (status != OK) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno,
- ap_server_conf, "processor unbind failed %d", status);
- }
-#endif
- RAISE_SIGSTOP(MAKE_CHILD);
- AP_MONCONTROL(1);
- /* Disable the parent's signal handlers and set up proper handling in
- * the child.
- */
- apr_signal(SIGHUP, just_die);
- apr_signal(SIGTERM, just_die);
- /* The child process doesn't do anything for AP_SIG_GRACEFUL.
- * Instead, the pod is used for signalling graceful restart.
- */
- apr_signal(AP_SIG_GRACEFUL, SIG_IGN);
- child_main(slot);
- }
-
- ap_scoreboard_image->parent[slot].pid = pid;
-
- return 0;
-}
-
-
-/* start up a bunch of children */
-static void startup_children(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
- if (ap_scoreboard_image->servers[i][0].status != SERVER_DEAD) {
- continue;
- }
- if (make_child(ap_server_conf, i) < 0) {
- break;
- }
- --number_to_start;
- }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(apr_pool_t *p)
-{
- int i;
- int to_kill;
- int idle_count;
- worker_score *ws;
- int free_length;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead;
- int total_non_dead;
-
- /* initialize the free_list */
- free_length = 0;
-
- to_kill = -1;
- idle_count = 0;
- last_non_dead = -1;
- total_non_dead = 0;
-
- for (i = 0; i < ap_daemons_limit; ++i) {
- int status;
-
- if (i >= ap_max_daemons_limit && free_length == idle_spawn_rate)
- break;
- ws = &ap_scoreboard_image->servers[i][0];
- status = ws->status;
- if (status == SERVER_DEAD) {
- /* try to keep children numbers as low as possible */
- if (free_length < idle_spawn_rate) {
- free_slots[free_length] = i;
- ++free_length;
- }
- }
- else {
- /* We consider a starting server as idle because we started it
- * at least a cycle ago, and if it still hasn't finished starting
- * then we're just going to swamp things worse by forking more.
- * So we hopefully won't need to fork more if we count it.
- * This depends on the ordering of SERVER_READY and SERVER_STARTING.
- */
- if (status <= SERVER_READY) {
- ++ idle_count;
- /* always kill the highest numbered child if we have to...
- * no really well thought out reason ... other than observing
- * the server behaviour under linux where lower numbered children
- * tend to service more hits (and hence are more likely to have
- * their data in cpu caches).
- */
- to_kill = i;
- }
-
- ++total_non_dead;
- last_non_dead = i;
- }
- }
- ap_max_daemons_limit = last_non_dead + 1;
- if (idle_count > ap_daemons_max_free) {
- /* kill off one child... we use the pod because that'll cause it to
- * shut down gracefully, in case it happened to pick up a request
- * while we were counting
- */
- ap_mpm_pod_signal(pod);
- idle_spawn_rate = 1;
- }
- else if (idle_count < ap_daemons_min_free) {
- /* terminate the free list */
- if (free_length == 0) {
- /* only report this condition once */
- static int reported = 0;
-
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf,
- "server reached MaxClients setting, consider"
- " raising the MaxClients setting");
- reported = 1;
- }
- idle_spawn_rate = 1;
- }
- else {
- if (idle_spawn_rate >= 8) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "server seems busy, (you may need "
- "to increase StartServers, or Min/MaxSpareServers), "
- "spawning %d children, there are %d idle, and "
- "%d total children", idle_spawn_rate,
- idle_count, total_non_dead);
- }
- for (i = 0; i < free_length; ++i) {
-#ifdef TPF
- if (make_child(ap_server_conf, free_slots[i]) == -1) {
- if(free_length == 1) {
- shutdown_pending = 1;
- ap_log_error(APLOG_MARK, APLOG_EMERG, 0, ap_server_conf,
- "No active child processes: shutting down");
- }
- }
-#else
- make_child(ap_server_conf, free_slots[i]);
-#endif /* TPF */
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- }
- else if (idle_spawn_rate < MAX_SPAWN_RATE) {
- idle_spawn_rate *= 2;
- }
- }
- }
- else {
- idle_spawn_rate = 1;
- }
-}
-
-/*****************************************************************
- * Executive routines.
- */
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- int index;
- int remaining_children_to_start;
- apr_status_t rv;
-
- ap_log_pid(pconf, ap_pid_fname);
-
- first_server_limit = server_limit;
- if (changed_limit_at_restart) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "WARNING: Attempt to change ServerLimit "
- "ignored during restart");
- changed_limit_at_restart = 0;
- }
-
- /* Initialize cross-process accept lock */
- ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
- ap_server_root_relative(_pconf, ap_lock_fname),
- ap_my_pid);
-
- rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname,
- ap_accept_lock_mech, _pconf);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't create accept lock (%s) (%d)",
- ap_lock_fname, ap_accept_lock_mech);
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
-
-#if APR_USE_SYSVSEM_SERIALIZE
- if (ap_accept_lock_mech == APR_LOCK_DEFAULT ||
- ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#else
- if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#endif
- rv = unixd_set_proc_mutex_perms(accept_mutex);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't set permissions on cross-process lock; "
- "check User and Group directives");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- }
-
- if (!is_graceful) {
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- /* fix the generation number in the global score; we just got a new,
- * cleared scoreboard
- */
- ap_scoreboard_image->global->running_generation = ap_my_generation;
- }
-
- set_signals();
-
- if (one_process) {
- AP_MONCONTROL(1);
- make_child(ap_server_conf, 0);
- }
- else {
- if (ap_daemons_max_free < ap_daemons_min_free + 1) /* Don't thrash... */
- ap_daemons_max_free = ap_daemons_min_free + 1;
-
- /* If we're doing a graceful_restart then we're going to see a lot
- * of children exiting immediately when we get into the main loop
- * below (because we just sent them AP_SIG_GRACEFUL). This happens pretty
- * rapidly... and for each one that exits we'll start a new one until
- * we reach at least daemons_min_free. But we may be permitted to
- * start more than that, so we'll just keep track of how many we're
- * supposed to start up without the 1 second penalty between each fork.
- */
- remaining_children_to_start = ap_daemons_to_start;
- if (remaining_children_to_start > ap_daemons_limit) {
- remaining_children_to_start = ap_daemons_limit;
- }
- if (!is_graceful) {
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- }
- else {
- /* give the system some time to recover before kicking into
- * exponential mode
- */
- hold_off_on_exponential_spawning = 10;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(accept_mutex),
- apr_proc_mutex_defname());
-#endif
- restart_pending = shutdown_pending = 0;
-
- mpm_state = AP_MPMQ_RUNNING;
-
- while (!restart_pending && !shutdown_pending) {
- int child_slot;
- apr_exit_why_e exitwhy;
- int status, processed_status;
- /* this is a memory leak, but I'll fix it later. */
- apr_proc_t pid;
-
- ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
- /* XXX: if it takes longer than 1 second for all our children
- * to start up and get into IDLE state then we may spawn an
- * extra child
- */
- if (pid.pid != -1) {
- processed_status = ap_process_child_status(&pid, exitwhy, status);
- if (processed_status == APEXIT_CHILDFATAL) {
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
-
- /* non-fatal death... note that it's gone in the scoreboard. */
- child_slot = find_child_by_pid(&pid);
- if (child_slot >= 0) {
- (void) ap_update_child_status_from_indexes(child_slot, 0, SERVER_DEAD,
- (request_rec *) NULL);
- if (processed_status == APEXIT_CHILDSICK) {
- /* child detected a resource shortage (E[NM]FILE, ENOBUFS, etc)
- * cut the fork rate to the minimum
- */
- idle_spawn_rate = 1;
- }
- else if (remaining_children_to_start
- && child_slot < ap_daemons_limit) {
- /* we're still doing a 1-for-1 replacement of dead
- * children with new children
- */
- make_child(ap_server_conf, child_slot);
- --remaining_children_to_start;
- }
-#if APR_HAS_OTHER_CHILD
- }
- else if (apr_proc_other_child_alert(&pid, APR_OC_REASON_DEATH, status) == APR_SUCCESS) {
- /* handled */
-#endif
- }
- else if (is_graceful) {
- /* Great, we've probably just lost a slot in the
- * scoreboard. Somehow we don't know about this
- * child.
- */
- ap_log_error(APLOG_MARK, APLOG_WARNING,
- 0, ap_server_conf,
- "long lost child came home! (pid %ld)", (long)pid.pid);
- }
- /* Don't perform idle maintenance when a child dies,
- * only do it when there's a timeout. Remember only a
- * finite number of children can die, and it's pretty
- * pathological for a lot to die suddenly.
- */
- continue;
- }
- else if (remaining_children_to_start) {
- /* we hit a 1 second timeout in which none of the previous
- * generation of children needed to be reaped... so assume
- * they're all done, and pick up the slack if any is left.
- */
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- /* In any event we really shouldn't do the code below because
- * few of the servers we just started are in the IDLE state
- * yet, so we'd mistakenly create an extra server.
- */
- continue;
- }
-
- perform_idle_server_maintenance(pconf);
-#ifdef TPF
- shutdown_pending = os_check_server(tpf_server_name);
- ap_check_signals();
- sleep(1);
-#endif /*TPF */
- }
- } /* one_process */
-
- mpm_state = AP_MPMQ_STOPPING;
-
- if (shutdown_pending) {
- /* Time to gracefully shut down:
- * Kill child processes, tell them to call child_exit, etc...
- */
- if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGTERM");
- }
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
-
- /* cleanup pid file on normal shutdown */
- {
- const char *pidfile = NULL;
- pidfile = ap_server_root_relative (pconf, ap_pid_fname);
- if ( pidfile != NULL && unlink(pidfile) == 0)
- ap_log_error(APLOG_MARK, APLOG_INFO,
- 0, ap_server_conf,
- "removed PID file %s (pid=%ld)",
- pidfile, (long)getpid());
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "caught SIGTERM, shutting down");
- return 1;
- }
-
- /* we've been told to restart */
- apr_signal(SIGHUP, SIG_IGN);
- if (one_process) {
- /* not worth thinking about */
- return 1;
- }
-
- /* advance to the next generation */
- /* XXX: we really need to make sure this new generation number isn't in
- * use by any of the children.
- */
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
-
- if (is_graceful) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "Graceful restart requested, doing restart");
-
- /* kill off the idle ones */
- ap_mpm_pod_killpg(pod, ap_max_daemons_limit);
-
- /* This is mostly for debugging... so that we know what is still
- * gracefully dealing with existing request. This will break
- * in a very nasty way if we ever have the scoreboard totally
- * file-based (no shared memory)
- */
- for (index = 0; index < ap_daemons_limit; ++index) {
- if (ap_scoreboard_image->servers[index][0].status != SERVER_DEAD) {
- ap_scoreboard_image->servers[index][0].status = SERVER_GRACEFUL;
- }
- }
- }
- else {
- /* Kill 'em off */
- if (unixd_killpg(getpgrp(), SIGHUP) < 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGHUP");
- }
- ap_reclaim_child_processes(0); /* Not when just starting up */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "SIGHUP received. Attempting to restart");
- }
-
- return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int prefork_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- apr_status_t rv;
-
- pconf = p;
- ap_server_conf = s;
-
- if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
- NULL, "no listening sockets available, shutting down");
- return DONE;
- }
-
- if ((rv = ap_mpm_pod_open(pconf, &pod))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
- "Could not open pipe-of-death.");
- return DONE;
- }
- return OK;
-}
-
-static int prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- static int restart_num = 0;
- int no_detach, debug, foreground;
- apr_status_t rv;
-
- mpm_state = AP_MPMQ_STARTING;
-
- debug = ap_exists_config_define("DEBUG");
-
- if (debug) {
- foreground = one_process = 1;
- no_detach = 0;
- }
- else
- {
- no_detach = ap_exists_config_define("NO_DETACH");
- one_process = ap_exists_config_define("ONE_PROCESS");
- foreground = ap_exists_config_define("FOREGROUND");
- }
-
- /* sigh, want this only the second time around */
- if (restart_num++ == 1) {
- is_graceful = 0;
-
- if (!one_process && !foreground) {
- rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
- : APR_PROC_DETACH_DAEMONIZE);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "apr_proc_detach failed");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
-
- parent_pid = ap_my_pid = getpid();
- }
-
- unixd_pre_config(ptemp);
- ap_listen_pre_config();
- ap_daemons_to_start = DEFAULT_START_DAEMON;
- ap_daemons_min_free = DEFAULT_MIN_FREE_DAEMON;
- ap_daemons_max_free = DEFAULT_MAX_FREE_DAEMON;
- ap_daemons_limit = server_limit;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_lock_fname = DEFAULT_LOCKFILE;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- ap_extended_status = 0;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- return OK;
-}
-
-static void prefork_hooks(apr_pool_t *p)
-{
- /* The prefork open_logs phase must run before the core's, or stderr
- * will be redirected to a file, and the messages won't print to the
- * console.
- */
- static const char *const aszSucc[] = {"core.c", NULL};
-
-#ifdef AUX3
- (void) set42sig();
-#endif
-
- ap_hook_open_logs(prefork_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
- /* we need to set the MPM state before other pre-config hooks use MPM query
- * to retrieve it, so register as REALLY_FIRST
- */
- ap_hook_pre_config(prefork_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_to_start = atoi(arg);
- return NULL;
-}
-
-static const char *set_min_free_servers(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_min_free = atoi(arg);
- if (ap_daemons_min_free <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareServers set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- ap_daemons_min_free = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_free_servers(cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_max_free = atoi(arg);
- return NULL;
-}
-
-static const char *set_max_clients (cmd_parms *cmd, void *dummy, const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_limit = atoi(arg);
- if (ap_daemons_limit > server_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients of %d exceeds ServerLimit value "
- "of %d servers,", ap_daemons_limit, server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering MaxClients to %d. To increase, please "
- "see the ServerLimit", server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " directive.");
- ap_daemons_limit = server_limit;
- }
- else if (ap_daemons_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require MaxClients > 0, setting to 1");
- ap_daemons_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_server_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_server_limit = atoi(arg);
- /* you cannot change ServerLimit across a restart; ignore
- * any such attempts
- */
- if (first_server_limit &&
- tmp_server_limit != server_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- server_limit = tmp_server_limit;
-
- if (server_limit > MAX_SERVER_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ServerLimit of %d exceeds compile time limit "
- "of %d servers,", server_limit, MAX_SERVER_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
- server_limit = MAX_SERVER_LIMIT;
- }
- else if (server_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ServerLimit > 0, setting to 1");
- server_limit = 1;
- }
- return NULL;
-}
-
-static const command_rec prefork_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
- "Number of child processes launched at server startup"),
-AP_INIT_TAKE1("MinSpareServers", set_min_free_servers, NULL, RSRC_CONF,
- "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareServers", set_max_free_servers, NULL, RSRC_CONF,
- "Maximum number of idle children"),
-AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
- "Maximum number of children alive at the same time"),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
- "Maximum value of MaxClients for this run of Apache"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_prefork_module = {
- MPM20_MODULE_STUFF,
- ap_mpm_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- prefork_cmds, /* command apr_table_t */
- prefork_hooks, /* register hooks */
-};
diff --git a/server/mpm/winnt/Win9xConHook.c b/server/mpm/winnt/Win9xConHook.c
deleted file mode 100644
index 862ec9c435..0000000000
--- a/server/mpm/winnt/Win9xConHook.c
+++ /dev/null
@@ -1,696 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef WIN32
-
-/*
- * Win9xConHook.dll - a hook proc to clean up Win95/98 console behavior.
- *
- * It is well(?) documented by Microsoft that the Win9x HandlerRoutine
- * hooked by the SetConsoleCtrlHandler never receives the CTRL_CLOSE_EVENT,
- * CTRL_LOGOFF_EVENT or CTRL_SHUTDOWN_EVENT signals.
- *
- * It is possible to have a second window to monitor the WM_ENDSESSION
- * message, but the close button still fails..
- *
- * There is a 16bit polling method for the close window option, but this
- * is CPU intensive and requires thunking.
- *
- * Attempts to subclass the 'tty' console fail, since that message thread
- * is actually owned by the 16 bit winoldap.mod process, although the
- * window reports it is owned by the process/thread of the console app.
- *
- * Win9xConHook is thunks the WM_CLOSE and WM_ENDSESSION messages,
- * first through a window hook procedure in the winoldap context, into
- * a subclass WndProc, and on to a second hidden monitor window in the
- * console application's context that dispatches them to the console app's
- * registered HandlerRoutine.
- */
-
-/* This debugging define turns on output to COM1, although you better init
- * the port first (even using hyperterm). It's the only way to catch the
- * goings on within system logoff/shutdown.
- * #define DBG 1
- */
-
-#include <windows.h>
-
-/* Variables used within any process context:
- * hookwndmsg is a shared message to send Win9xConHook signals
- * origwndprop is a wndprop atom to store the orig wndproc of the tty
- * hookwndprop is a wndprop atom to store the hwnd of the hidden child
- * is_service reminds us to unmark this process on the way out
- */
-static UINT hookwndmsg = 0;
-static LPCTSTR origwndprop;
-static LPCTSTR hookwndprop;
-static BOOL is_service = 0;
-//static HMODULE hmodThis = NULL;
-
-/* Variables used within the tty processes' context:
- * is_tty flags this process; -1 == unknown, 1 == if tty, 0 == if not
- * hw_tty is the handle of the top level tty in this process context
- * is_subclassed is toggled to assure DllMain removes the subclass on unload
- * hmodLock is there to try and prevent this dll from being unloaded if the
- * hook is removed while we are subclassed
- */
-static int is_tty = -1;
-static HWND hwtty = NULL;
-static BOOL is_subclassed = 0;
-
-// This simply causes a gpfault the moment it tries to FreeLibrary within
-// the subclass procedure ... not good.
-//static HMODULE hmodLock = NULL;
-
-/* Variables used within the service or console app's context:
- * hmodHook is the instance handle of this module for registering the hooks
- * hhkGetMessage is the hook handle for catching Posted messages
- * hhkGetMessage is the hook handle for catching Sent messages
- * monitor_hwnd is the invisible window that handles our tty messages
- * the tty_info strucure is used to pass args into the hidden window's thread
- */
-static HMODULE hmodHook = NULL;
-static HHOOK hhkGetMessage;
-//static HHOOK hhkCallWndProc;
-static HWND monitor_hwnd = NULL;
-
-typedef struct {
- PHANDLER_ROUTINE phandler;
- HINSTANCE instance;
- HWND parent;
- INT type;
- LPCSTR name;
-} tty_info;
-
-/* These are the GetWindowLong offsets for the hidden window's internal info
- * gwltty_phandler is the address of the app's HandlerRoutine
- * gwltty_ttywnd is the tty this hidden window will handle messages from
- */
-#define gwltty_phandler 0
-#define gwltty_ttywnd 4
-
-/* Forward declaration prototypes for internal functions
- */
-static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd);
-static LRESULT WINAPI RegisterWindows9xService(BOOL set_service);
-static LRESULT CALLBACK ttyConsoleCtrlWndProc(HWND hwnd, UINT msg,
- WPARAM wParam, LPARAM lParam);
-static DWORD WINAPI ttyConsoleCtrlThread(LPVOID tty);
-static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
- WPARAM wParam, LPARAM lParam);
-static int HookProc(int hc, HWND *hwnd, UINT *msg,
- WPARAM *wParam, LPARAM *lParam);
-#ifdef DBG
-static VOID DbgPrintf(LPTSTR fmt, ...);
-#endif
-
-
-/* DllMain is invoked by every process in the entire system that is hooked
- * by our window hooks, notably the tty processes' context, and by the user
- * who wants tty messages (the app). Keep it light and simple.
- */
-BOOL __declspec(dllexport) APIENTRY DllMain(HINSTANCE hModule, ULONG ulReason,
- LPVOID pctx)
-{
- if (ulReason == DLL_PROCESS_ATTACH)
- {
- //hmodThis = hModule;
- if (!hookwndmsg) {
- origwndprop = MAKEINTATOM(GlobalAddAtom("Win9xConHookOrigProc"));
- hookwndprop = MAKEINTATOM(GlobalAddAtom("Win9xConHookThunkWnd"));
- hookwndmsg = RegisterWindowMessage("Win9xConHookMsg");
- }
-#ifdef DBG
-// DbgPrintf("H ProcessAttach:%8.8x\r\n",
-// GetCurrentProcessId());
-#endif
- }
- else if ( ulReason == DLL_PROCESS_DETACH )
- {
-#ifdef DBG
-// DbgPrintf("H ProcessDetach:%8.8x\r\n", GetCurrentProcessId());
-#endif
- if (monitor_hwnd)
- SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
- if (is_subclassed)
- SendMessage(hwtty, hookwndmsg, 0, (LPARAM)hwtty);
- if (hmodHook)
- {
- if (hhkGetMessage) {
- UnhookWindowsHookEx(hhkGetMessage);
- hhkGetMessage = NULL;
- }
- //if (hhkCallWndProc) {
- // UnhookWindowsHookEx(hhkCallWndProc);
- // hhkCallWndProc = NULL;
- //}
- FreeLibrary(hmodHook);
- hmodHook = NULL;
- }
- if (is_service)
- RegisterWindows9xService(FALSE);
- if (hookwndmsg) {
- GlobalDeleteAtom((ATOM)origwndprop);
- GlobalDeleteAtom((ATOM)hookwndprop);
- hookwndmsg = 0;
- }
- }
- return TRUE;
-}
-
-
-/* This group of functions are provided for the service/console app
- * to register itself a HandlerRoutine to accept tty or service messages
- */
-
-
-/* Exported function that creates a Win9x 'service' via a hidden window,
- * that notifies the process via the HandlerRoutine messages.
- */
-BOOL __declspec(dllexport) WINAPI Windows9xServiceCtrlHandler(
- PHANDLER_ROUTINE phandler,
- LPCSTR name)
-{
- /* If we have not yet done so */
- FreeConsole();
-
- if (name)
- {
- DWORD tid;
- HANDLE hThread;
- /* NOTE: this is static so the module can continue to
- * access these args while we go on to other things
- */
- static tty_info tty;
- tty.instance = GetModuleHandle(NULL);
- tty.phandler = phandler;
- tty.parent = NULL;
- tty.name = name;
- tty.type = 2;
- RegisterWindows9xService(TRUE);
- hThread = CreateThread(NULL, 0, ttyConsoleCtrlThread,
- (LPVOID)&tty, 0, &tid);
- if (hThread)
- {
- CloseHandle(hThread);
- return TRUE;
- }
- }
- else /* remove */
- {
- if (monitor_hwnd)
- SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
- RegisterWindows9xService(FALSE);
- return TRUE;
- }
- return FALSE;
-}
-
-
-/* Exported function that registers a HandlerRoutine to accept missing
- * Win9x CTRL_EVENTs from the tty window, as NT does without a hassle.
- * If add is 1 or 2, register the handler, if 2 also mark it as a service.
- * If add is 0 deregister the handler, and unmark if a service
- */
-BOOL __declspec(dllexport) WINAPI FixConsoleCtrlHandler(
- PHANDLER_ROUTINE phandler,
- INT add)
-{
- HWND parent;
-
- if (add)
- {
- HANDLE hThread;
- DWORD tid;
- /* NOTE: this is static so the module can continue to
- * access these args while we go on to other things
- */
- static tty_info tty;
- EnumWindows(EnumttyWindow, (LPARAM)&parent);
- if (!parent) {
-#ifdef DBG
- DbgPrintf("A EnumttyWindow failed (%d)\r\n", GetLastError());
-#endif
- return FALSE;
- }
- tty.instance = GetModuleHandle(NULL);
- tty.phandler = phandler;
- tty.parent = parent;
- tty.type = add;
- if (add == 2) {
- tty.name = "ttyService";
- RegisterWindows9xService(TRUE);
- }
- else
- tty.name = "ttyMonitor";
- hThread = CreateThread(NULL, 0, ttyConsoleCtrlThread,
- (LPVOID)&tty, 0, &tid);
- if (!hThread)
- return FALSE;
- CloseHandle(hThread);
- hmodHook = LoadLibrary("Win9xConHook.dll");
- if (hmodHook)
- {
- hhkGetMessage = SetWindowsHookEx(WH_GETMESSAGE,
- (HOOKPROC)GetProcAddress(hmodHook, "GetMsgProc"), hmodHook, 0);
- //hhkCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC,
- // (HOOKPROC)GetProcAddress(hmodHook, "CallWndProc"), hmodHook, 0);
- }
- return TRUE;
- }
- else /* remove */
- {
- if (monitor_hwnd) {
- SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
- }
- if (hmodHook)
- {
- if (hhkGetMessage) {
- UnhookWindowsHookEx(hhkGetMessage);
- hhkGetMessage = NULL;
- }
- //if (hhkCallWndProc) {
- // UnhookWindowsHookEx(hhkCallWndProc);
- // hhkCallWndProc = NULL;
- //}
- FreeLibrary(hmodHook);
- hmodHook = NULL;
- }
- if (is_service)
- RegisterWindows9xService(FALSE);
- return TRUE;
- }
- return FALSE;
-}
-
-
-/* The following internal helpers are only used within the app's context
- */
-
-/* ttyConsoleCreateThread is the process that runs within the user app's
- * context. It creates and pumps the messages of a hidden monitor window,
- * watching for messages from the system, or the associated subclassed tty
- * window. Things can happen in our context that can't be done from the
- * tty's context, and visa versa, so the subclass procedure and this hidden
- * window work together to make it all happen.
- */
-static DWORD WINAPI ttyConsoleCtrlThread(LPVOID tty)
-{
- WNDCLASS wc;
- MSG msg;
- wc.style = CS_GLOBALCLASS;
- wc.lpfnWndProc = ttyConsoleCtrlWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 8;
- wc.hInstance = NULL;
- wc.hIcon = NULL;
- wc.hCursor = NULL;
- wc.hbrBackground = NULL;
- wc.lpszMenuName = NULL;
- if (((tty_info*)tty)->parent)
- wc.lpszClassName = "ttyConHookChild";
- else
- wc.lpszClassName = "ApacheWin95ServiceMonitor";
-
- if (!RegisterClass(&wc)) {
-#ifdef DBG
- DbgPrintf("A proc %8.8x Error creating class %s (%d)\r\n",
- GetCurrentProcessId(), wc.lpszClassName, GetLastError());
-#endif
- return 0;
- }
-
- /* Create an invisible window */
- monitor_hwnd = CreateWindow(wc.lpszClassName, ((tty_info*)tty)->name,
- WS_OVERLAPPED & ~WS_VISIBLE,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL,
- ((tty_info*)tty)->instance, tty);
-
- if (!monitor_hwnd) {
-#ifdef DBG
- DbgPrintf("A proc %8.8x Error creating window %s %s (%d)\r\n",
- GetCurrentProcessId(), wc.lpszClassName,
- ((tty_info*)tty)->name, GetLastError());
-#endif
- return 0;
- }
-
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
- /* Tag again as deleted, just in case we missed WM_DESTROY */
- monitor_hwnd = NULL;
- return 0;
-}
-
-
-/* This is the WndProc procedure for our invisible window.
- * When our subclasssed tty window receives the WM_CLOSE, WM_ENDSESSION,
- * or WM_QUERYENDSESSION messages, the message is dispatched to our hidden
- * window (this message process), and we call the installed HandlerRoutine
- * that was registered by the app.
- */
-static LRESULT CALLBACK ttyConsoleCtrlWndProc(HWND hwnd, UINT msg,
- WPARAM wParam, LPARAM lParam)
-{
- if (msg == WM_CREATE)
- {
- tty_info *tty = (tty_info*)(((LPCREATESTRUCT)lParam)->lpCreateParams);
- SetWindowLong(hwnd, gwltty_phandler, (LONG)tty->phandler);
- SetWindowLong(hwnd, gwltty_ttywnd, (LONG)tty->parent);
-#ifdef DBG
- DbgPrintf("A proc %8.8x created %8.8x %s for tty wnd %8.8x\r\n",
- GetCurrentProcessId(), hwnd,
- tty->name, tty->parent);
-#endif
- if (tty->parent) {
- SetProp(tty->parent, hookwndprop, hwnd);
- PostMessage(tty->parent, hookwndmsg,
- tty->type, (LPARAM)tty->parent);
- }
- return 0;
- }
- else if (msg == WM_DESTROY)
- {
- HWND parent = (HWND)GetWindowLong(hwnd, gwltty_ttywnd);
-#ifdef DBG
- DbgPrintf("A proc %8.8x destroyed %8.8x ttyConHookChild\r\n",
- GetCurrentProcessId(), hwnd);
-#endif
- if (parent) {
- RemoveProp(parent, hookwndprop);
- SendMessage(parent, hookwndmsg, 0, (LPARAM)parent);
- }
- monitor_hwnd = NULL;
- }
- else if (msg == WM_CLOSE)
- {
- PHANDLER_ROUTINE phandler =
- (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
- LRESULT rv = phandler(CTRL_CLOSE_EVENT);
-#ifdef DBG
- DbgPrintf("A proc %8.8x invoked CTRL_CLOSE_EVENT "
- "returning %d\r\n",
- GetCurrentProcessId(), rv);
-#endif
- if (rv)
- return !rv;
- }
- else if ((msg == WM_QUERYENDSESSION) || (msg == WM_ENDSESSION))
- {
- if (lParam & ENDSESSION_LOGOFF)
- {
- PHANDLER_ROUTINE phandler =
- (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
- LRESULT rv = phandler(CTRL_LOGOFF_EVENT);
-#ifdef DBG
- DbgPrintf("A proc %8.8x invoked CTRL_LOGOFF_EVENT "
- "returning %d\r\n",
- GetCurrentProcessId(), rv);
-#endif
- if (rv)
- return ((msg == WM_QUERYENDSESSION) ? rv : !rv);
- }
- else
- {
- PHANDLER_ROUTINE phandler =
- (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
- LRESULT rv = phandler(CTRL_SHUTDOWN_EVENT);
-#ifdef DBG
- DbgPrintf("A proc %8.8x invoked CTRL_SHUTDOWN_EVENT "
- "returning %d\r\n", GetCurrentProcessId(), rv);
-#endif
- if (rv)
- return ((msg == WM_QUERYENDSESSION) ? rv : !rv);
- }
- }
- return (DefWindowProc(hwnd, msg, wParam, lParam));
-}
-
-
-/* The following internal helpers are invoked by the hooked tty and our app
- */
-
-
-/* Register or deregister the current process as a Windows9x style service.
- * Experience shows this call is ignored across processes, so the second
- * arg to RegisterServiceProcess (process group id) is effectively useless.
- */
-static LRESULT WINAPI RegisterWindows9xService(BOOL set_service)
-{
- static HINSTANCE hkernel;
- static DWORD (WINAPI *register_service_process)(DWORD, DWORD) = NULL;
- BOOL rv;
-
- if (set_service == is_service)
- return 1;
-
-#ifdef DBG
- DbgPrintf("R %s proc %8.8x as a service\r\n",
- set_service ? "installing" : "removing",
- GetCurrentProcessId());
-#endif
-
- if (!register_service_process)
- {
- /* Obtain a handle to the kernel library */
- hkernel = LoadLibrary("KERNEL32.DLL");
- if (!hkernel)
- return 0;
-
- /* Find the RegisterServiceProcess function */
- register_service_process = (DWORD (WINAPI *)(DWORD, DWORD))
- GetProcAddress(hkernel, "RegisterServiceProcess");
- if (register_service_process == NULL) {
- FreeLibrary(hkernel);
- return 0;
- }
- }
-
- /* Register this process as a service */
- rv = register_service_process(0, set_service != FALSE);
- if (rv)
- is_service = set_service;
-
- if (!is_service)
- {
- /* Unload the kernel library */
- FreeLibrary(hkernel);
- register_service_process = NULL;
- }
- return rv;
-}
-
-
-/*
- * This function only works when this process is the active process
- * (e.g. once it is running a child process, it can no longer determine
- * which console window is its own.)
- */
-static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd)
-{
- char tmp[8];
- if (GetClassName(wnd, tmp, sizeof(tmp)) && !strcmp(tmp, "tty"))
- {
- DWORD wndproc, thisproc = GetCurrentProcessId();
- GetWindowThreadProcessId(wnd, &wndproc);
- if (wndproc == thisproc) {
- *((HWND*)retwnd) = wnd;
- return FALSE;
- }
- }
- return TRUE;
-}
-
-
-/* The remaining code all executes --in the tty's own process context--
- *
- * That means special attention must be paid to what it's doing...
- */
-
-/* Subclass message process for the tty window
- *
- * This code -handles- WM_CLOSE, WM_ENDSESSION and WM_QUERYENDSESSION
- * by dispatching them to the window identified by the hookwndprop
- * property atom set against our window. Messages are then dispatched
- * to origwndprop property atom we set against the window when we
- * injected this subclass. This trick did not work with simply a hook.
- */
-static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
- WPARAM wParam, LPARAM lParam)
-{
- WNDPROC origproc = (WNDPROC) GetProp(hwnd, origwndprop);
- if (!origproc)
- return 0;
-
- if (msg == WM_NCDESTROY
- || (msg == hookwndmsg && !LOWORD(wParam) && (HWND)lParam == hwnd))
- {
- if (is_subclassed) {
-#ifdef DBG
- DbgPrintf("W proc %08x hwnd:%08x Subclass removed\r\n",
- GetCurrentProcessId(), hwnd);
-#endif
- if (is_service)
- RegisterWindows9xService(FALSE);
- SetWindowLong(hwnd, GWL_WNDPROC, (LONG)origproc);
- RemoveProp(hwnd, origwndprop);
- RemoveProp(hwnd, hookwndprop);
- is_subclassed = FALSE;
- //if (hmodLock)
- // FreeLibrary(hmodLock);
- //hmodLock = NULL;
- }
- }
- else if (msg == WM_CLOSE || msg == WM_ENDSESSION
- || msg == WM_QUERYENDSESSION)
- {
- HWND child = (HWND)GetProp(hwnd, hookwndprop);
- if (child) {
-#ifdef DBG
- DbgPrintf("W proc %08x hwnd:%08x forwarded msg:%d\r\n",
- GetCurrentProcessId(), hwnd, msg);
-#endif
- return SendMessage(child, msg, wParam, lParam);
- }
- }
- return CallWindowProc(origproc, hwnd, msg, wParam, lParam);
-}
-
-
-/* HookProc, once installed, is responsible for subclassing the system
- * tty windows. It generally does nothing special itself, since
- * research indicates that it cannot deal well with the messages we are
- * interested in, that is, WM_CLOSE, WM_QUERYSHUTDOWN and WM_SHUTDOWN
- * of the tty process.
- *
- * Respond and subclass only when a WM_NULL is received by the window.
- */
-int HookProc(int hc, HWND *hwnd, UINT *msg, WPARAM *wParam, LPARAM *lParam)
-{
- if (is_tty == -1 && *hwnd)
- {
- char ttybuf[8];
- HWND htty;
- hwtty = *hwnd;
- while (htty = GetParent(hwtty))
- hwtty = htty;
- is_tty = (GetClassName(hwtty, ttybuf, sizeof(ttybuf))
- && !strcmp(ttybuf, "tty"));
-#ifdef DBG
- if (is_tty)
- DbgPrintf("H proc %08x tracking hwnd %08x\r\n",
- GetCurrentProcessId(), hwtty);
-#endif
- }
-
- if (*msg == hookwndmsg && *wParam && *lParam == (LPARAM)hwtty && is_tty)
- {
- WNDPROC origproc = (WNDPROC)GetWindowLong(hwtty, GWL_WNDPROC);
- //char myname[MAX_PATH];
- //if (GetModuleFileName(hmodThis, myname, sizeof(myname)))
- // hmodLock = LoadLibrary(myname);
- SetProp(hwtty, origwndprop, origproc);
- SetWindowLong(hwtty, GWL_WNDPROC, (LONG)WndProc);
- is_subclassed = TRUE;
-#ifdef DBG
- DbgPrintf("H proc %08x hwnd:%08x Subclassed\r\n",
- GetCurrentProcessId(), hwtty);
-#endif
- if (LOWORD(*wParam) == 2)
- RegisterWindows9xService(TRUE);
- }
-
- return -1;
-}
-
-
-/*
- * PostMessage Hook:
- */
-LRESULT __declspec(dllexport) CALLBACK GetMsgProc(INT hc, WPARAM wParam,
- LPARAM lParam)
-{
- PMSG pmsg;
-
- pmsg = (PMSG)lParam;
-
- if (pmsg) {
- int rv = HookProc(hc, &pmsg->hwnd, &pmsg->message,
- &pmsg->wParam, &pmsg->lParam);
- if (rv != -1)
- return rv;
- }
- /*
- * CallNextHookEx apparently ignores the hhook argument, so pass NULL
- */
- return CallNextHookEx(NULL, hc, wParam, lParam);
-}
-
-
-/*
- * SendMessage Hook:
- */
-LRESULT __declspec(dllexport) CALLBACK CallWndProc(INT hc, WPARAM wParam,
- LPARAM lParam)
-{
- PCWPSTRUCT pcwps = (PCWPSTRUCT)lParam;
-
- if (pcwps) {
- int rv = HookProc(hc, &pcwps->hwnd, &pcwps->message,
- &pcwps->wParam, &pcwps->lParam);
- if (rv != -1)
- return rv;
- }
- /*
- * CallNextHookEx apparently ignores the hhook argument, so pass NULL
- */
- return CallNextHookEx(NULL, hc, wParam, lParam);
-}
-
-
-#ifdef DBG
-VOID DbgPrintf(
- LPTSTR fmt,
- ...
- )
-{
- static HANDLE mutex;
- va_list marker;
- TCHAR szBuf[256];
- DWORD t;
- HANDLE gDbgOut;
-
- va_start(marker, fmt);
- wvsprintf(szBuf, fmt, marker);
- va_end(marker);
-
- if (!mutex)
- mutex = CreateMutex(NULL, FALSE, "Win9xConHookDbgOut");
- WaitForSingleObject(mutex, INFINITE);
- gDbgOut = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0,
- NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
- WriteFile(gDbgOut, szBuf, strlen(szBuf), &t, NULL);
- CloseHandle(gDbgOut);
- ReleaseMutex(mutex);
-}
-#endif
-
-#endif /* WIN32 */
diff --git a/server/mpm/winnt/Win9xConHook.def b/server/mpm/winnt/Win9xConHook.def
deleted file mode 100644
index 85ec166404..0000000000
--- a/server/mpm/winnt/Win9xConHook.def
+++ /dev/null
@@ -1,10 +0,0 @@
-LIBRARY Win9xConHook
-
-EXETYPE WINDOWS
-
-EXPORTS
- DllMain
- GetMsgProc
- CallWndProc
- FixConsoleCtrlHandler
- Windows9xServiceCtrlHandler
diff --git a/server/mpm/winnt/Win9xConHook.dsp b/server/mpm/winnt/Win9xConHook.dsp
deleted file mode 100644
index d5446c89a5..0000000000
--- a/server/mpm/winnt/Win9xConHook.dsp
+++ /dev/null
@@ -1,103 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Win9xConHook" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=Win9xConHook - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "Win9xConHook.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "Win9xConHook.mak" CFG="Win9xConHook - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "Win9xConHook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "Win9xConHook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "Win9xConHook - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ".\Release"
-# PROP BASE Intermediate_Dir ".\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\Win9xConHook" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /machine:I386 /base:"0x1c0f0000"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /machine:I386 /base:"0x1c0f0000" /opt:ref
-
-!ELSEIF "$(CFG)" == "Win9xConHook - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\Win9xConHook" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:"0x1c0f0000"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /base:"0x1c0f0000"
-
-!ENDIF
-
-# Begin Target
-
-# Name "Win9xConHook - Win32 Release"
-# Name "Win9xConHook - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\Win9xConHook.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\Win9xConHook.def
-# End Source File
-# Begin Source File
-
-SOURCE=.\Win9xConHook.h
-# End Source File
-# End Target
-# End Project
diff --git a/server/mpm/winnt/Win9xConHook.h b/server/mpm/winnt/Win9xConHook.h
deleted file mode 100644
index 5c8c599d4c..0000000000
--- a/server/mpm/winnt/Win9xConHook.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef AP_WIN9XCONHOOK_H
-#define AP_WIN9XCONHOOK_H
-
-#ifdef WIN32
-
-/* Windows9xServiceCtrlHandler registers a handler routine, frees the
- * console window, and registers this process as a service in Win9x.
- * It creats a hidden window of class "ApacheWin95ServiceMonitor"
- * and titled by the name passed, which passes the WM_SHUTDOWN message
- * through the given HandlerRoutine's CTRL_SHUTDOWN event.
- * Call with name of NULL to remove the Service handler.
- */
-BOOL WINAPI Windows9xServiceCtrlHandler(PHANDLER_ROUTINE phandler, LPCSTR name);
-
-
-/* FixConsoleControlHandler registers a handler routine with the
- * Win9xConHook.dll, creating a hidden window and forwarding the
- * WM_ENDSESSION and WM_CLOSE messages to the given HandlerRoutine
- * as CTRL_SHUTDOWN_EVENT, CTRL_LOGOFF_EVENT and CTRL_CLOSE_EVENT.
- * The application should still use SetConsoleCtrlHandler to grab
- * the CTRL_BREAK_EVENT and CTRL_C_EVENT, if desired.
- */
-BOOL WINAPI FixConsoleCtrlHandler(PHANDLER_ROUTINE phandler, BOOL add);
-
-
-/*
- * Exported PostMessage Hook, never use this directly:
- *
- * LRESULT CALLBACK GetMsgProc(INT hc, WPARAM wParam, LPARAM lParam);
- */
-
-
-/*
- * Exported SendMessage Hook, never use this directly:
- *
- * LRESULT CALLBACK CallWndProc(INT hc, WPARAM wParam, LPARAM lParam);
- */
-
-#endif /* WIN32 */
-
-#endif AP_WIN9XCONHOOK_H
diff --git a/server/mpm/winnt/child.c b/server/mpm/winnt/child.c
deleted file mode 100644
index 716703d340..0000000000
--- a/server/mpm/winnt/child.c
+++ /dev/null
@@ -1,1155 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef WIN32
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "apr_portable.h"
-#include "apr_thread_proc.h"
-#include "apr_getopt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_shm.h"
-#include "apr_thread_mutex.h"
-#include "ap_mpm.h"
-#include "ap_config.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-#include "mpm_winnt.h"
-#include "mpm_common.h"
-#include <malloc.h>
-#include "apr_atomic.h"
-
-/* shared with mpm_winnt.c */
-extern DWORD my_pid;
-
-/* used by parent to signal the child to start and exit */
-/* shared with mpm_winnt.c, but should be private to child.c */
-apr_proc_mutex_t *start_mutex;
-HANDLE exit_event;
-
-/* child_main() should never need to modify is_graceful!?! */
-extern int volatile is_graceful;
-
-/* Queue for managing the passing of COMP_CONTEXTs between
- * the accept and worker threads.
- */
-static apr_pool_t *pchild;
-static int shutdown_in_progress = 0;
-static int workers_may_exit = 0;
-static unsigned int g_blocked_threads = 0;
-static HANDLE max_requests_per_child_event;
-
-static apr_thread_mutex_t *child_lock;
-static apr_thread_mutex_t *qlock;
-static PCOMP_CONTEXT qhead = NULL;
-static PCOMP_CONTEXT qtail = NULL;
-static int num_completion_contexts = 0;
-static int max_num_completion_contexts = 0;
-static HANDLE ThreadDispatchIOCP = NULL;
-static HANDLE qwait_event = NULL;
-
-
-AP_DECLARE(void) mpm_recycle_completion_context(PCOMP_CONTEXT context)
-{
- /* Recycle the completion context.
- * - clear the ptrans pool
- * - put the context on the queue to be consumed by the accept thread
- * Note:
- * context->accept_socket may be in a disconnected but reusable
- * state so -don't- close it.
- */
- if (context) {
- apr_pool_clear(context->ptrans);
- context->next = NULL;
- ResetEvent(context->Overlapped.hEvent);
- apr_thread_mutex_lock(qlock);
- if (qtail) {
- qtail->next = context;
- } else {
- qhead = context;
- SetEvent(qwait_event);
- }
- qtail = context;
- apr_thread_mutex_unlock(qlock);
- }
-}
-
-AP_DECLARE(PCOMP_CONTEXT) mpm_get_completion_context(void)
-{
- apr_status_t rv;
- PCOMP_CONTEXT context = NULL;
-
- while (1) {
- /* Grab a context off the queue */
- apr_thread_mutex_lock(qlock);
- if (qhead) {
- context = qhead;
- qhead = qhead->next;
- if (!qhead)
- qtail = NULL;
- } else {
- ResetEvent(qwait_event);
- }
- apr_thread_mutex_unlock(qlock);
-
- if (!context) {
- /* We failed to grab a context off the queue, consider allocating
- * a new one out of the child pool. There may be up to
- * (ap_threads_per_child + num_listeners) contexts in the system
- * at once.
- */
- if (num_completion_contexts >= max_num_completion_contexts) {
- /* All workers are busy, need to wait for one */
- static int reported = 0;
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf,
- "Server ran out of threads to serve requests. Consider "
- "raising the ThreadsPerChild setting");
- reported = 1;
- }
-
- /* Wait for a worker to free a context. Once per second, give
- * the caller a chance to check for shutdown. If the wait
- * succeeds, get the context off the queue. It must be available,
- * since there's only one consumer.
- */
- rv = WaitForSingleObject(qwait_event, 1000);
- if (rv == WAIT_OBJECT_0)
- continue;
- else /* Hopefully, WAIT_TIMEOUT */
- return NULL;
- } else {
- /* Allocate another context.
- * Note:
- * Multiple failures in the next two steps will cause the pchild pool
- * to 'leak' storage. I don't think this is worth fixing...
- */
- apr_allocator_t *allocator;
-
- apr_thread_mutex_lock(child_lock);
- context = (PCOMP_CONTEXT) apr_pcalloc(pchild, sizeof(COMP_CONTEXT));
-
- context->Overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (context->Overlapped.hEvent == NULL) {
- /* Hopefully this is a temporary condition ... */
- ap_log_error(APLOG_MARK,APLOG_WARNING, apr_get_os_error(), ap_server_conf,
- "mpm_get_completion_context: CreateEvent failed.");
-
- apr_thread_mutex_unlock(child_lock);
- return NULL;
- }
-
- /* Create the tranaction pool */
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- rv = apr_pool_create_ex(&context->ptrans, pchild, NULL, allocator);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_WARNING, rv, ap_server_conf,
- "mpm_get_completion_context: Failed to create the transaction pool.");
- CloseHandle(context->Overlapped.hEvent);
-
- apr_thread_mutex_unlock(child_lock);
- return NULL;
- }
- apr_allocator_owner_set(allocator, context->ptrans);
- apr_pool_tag(context->ptrans, "transaction");
-
- context->accept_socket = INVALID_SOCKET;
- context->ba = apr_bucket_alloc_create(pchild);
- apr_atomic_inc32(&num_completion_contexts);
-
- apr_thread_mutex_unlock(child_lock);
- break;
- }
- } else {
- /* Got a context from the queue */
- break;
- }
- }
-
- return context;
-}
-
-AP_DECLARE(apr_status_t) mpm_post_completion_context(PCOMP_CONTEXT context,
- io_state_e state)
-{
- LPOVERLAPPED pOverlapped;
- if (context)
- pOverlapped = &context->Overlapped;
- else
- pOverlapped = NULL;
-
- PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, state, pOverlapped);
- return APR_SUCCESS;
-}
-
-
-/*
- * find_ready_listener()
- * Only used by Win9* and should go away when the win9*_accept() function is
- * reimplemented using apr_poll().
- */
-static ap_listen_rec *head_listener;
-
-static APR_INLINE ap_listen_rec *find_ready_listener(fd_set * main_fds)
-{
- ap_listen_rec *lr;
- SOCKET nsd;
-
- lr = head_listener;
- do {
- apr_os_sock_get(&nsd, lr->sd);
- if (FD_ISSET(nsd, main_fds)) {
- head_listener = lr->next;
- if (!head_listener) {
- head_listener = ap_listeners;
- }
- return lr;
- }
- lr = lr->next;
- if (!lr) {
- lr = ap_listeners;
- }
- } while (lr != head_listener);
- return NULL;
-}
-
-
-/* Windows 9x specific code...
- * Accept processing for on Windows 95/98 uses a producer/consumer queue
- * model. A single thread accepts connections and queues the accepted socket
- * to the accept queue for consumption by a pool of worker threads.
- *
- * win9x_accept()
- * The accept threads runs this function, which accepts connections off
- * the network and calls add_job() to queue jobs to the accept_queue.
- * add_job()/remove_job()
- * Add or remove an accepted socket from the list of sockets
- * connected to clients. allowed_globals.jobmutex protects
- * against multiple concurrent access to the linked list of jobs.
- * win9x_get_connection()
- * Calls remove_job() to pull a job from the accept queue. All the worker
- * threads block on remove_job.
- */
-
-typedef struct joblist_s {
- struct joblist_s *next;
- int sock;
-} joblist;
-
-typedef struct globals_s {
- HANDLE jobsemaphore;
- joblist *jobhead;
- joblist *jobtail;
- apr_thread_mutex_t *jobmutex;
- int jobcount;
-} globals;
-
-globals allowed_globals = {NULL, NULL, NULL, NULL, 0};
-
-#define MAX_SELECT_ERRORS 100
-
-
-static void add_job(int sock)
-{
- joblist *new_job;
-
- new_job = (joblist *) malloc(sizeof(joblist));
- if (new_job == NULL) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Ouch! Out of memory in add_job()!");
- return;
- }
- new_job->next = NULL;
- new_job->sock = sock;
-
- apr_thread_mutex_lock(allowed_globals.jobmutex);
-
- if (allowed_globals.jobtail != NULL)
- allowed_globals.jobtail->next = new_job;
- allowed_globals.jobtail = new_job;
- if (!allowed_globals.jobhead)
- allowed_globals.jobhead = new_job;
- allowed_globals.jobcount++;
- ReleaseSemaphore(allowed_globals.jobsemaphore, 1, NULL);
-
- apr_thread_mutex_unlock(allowed_globals.jobmutex);
-}
-
-
-static int remove_job(void)
-{
- joblist *job;
- int sock;
-
- WaitForSingleObject(allowed_globals.jobsemaphore, INFINITE);
- apr_thread_mutex_lock(allowed_globals.jobmutex);
-
- if (shutdown_in_progress && !allowed_globals.jobhead) {
- apr_thread_mutex_unlock(allowed_globals.jobmutex);
- return (INVALID_SOCKET);
- }
- job = allowed_globals.jobhead;
- ap_assert(job);
- allowed_globals.jobhead = job->next;
- if (allowed_globals.jobhead == NULL)
- allowed_globals.jobtail = NULL;
- apr_thread_mutex_unlock(allowed_globals.jobmutex);
- sock = job->sock;
- free(job);
-
- return (sock);
-}
-
-
-static void win9x_accept(void * dummy)
-{
- struct timeval tv;
- fd_set main_fds;
- int wait_time = 1;
- int csd;
- SOCKET nsd = INVALID_SOCKET;
- int count_select_errors = 0;
- int rc;
- int clen;
- ap_listen_rec *lr;
- struct fd_set listenfds;
- SOCKET listenmaxfd = INVALID_SOCKET;
-#if APR_HAVE_IPV6
- struct sockaddr_in6 sa_client;
-#else
- struct sockaddr_in sa_client;
-#endif
-
- /* Setup the listeners
- * ToDo: Use apr_poll()
- */
- FD_ZERO(&listenfds);
- for (lr = ap_listeners; lr; lr = lr->next) {
- if (lr->sd != NULL) {
- apr_os_sock_get(&nsd, lr->sd);
- FD_SET(nsd, &listenfds);
- if (listenmaxfd == INVALID_SOCKET || nsd > listenmaxfd) {
- listenmaxfd = nsd;
- }
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "Child %d: Listening on port %d.", my_pid, lr->bind_addr->port);
- }
- }
-
- head_listener = ap_listeners;
-
- while (!shutdown_in_progress) {
- tv.tv_sec = wait_time;
- tv.tv_usec = 0;
- memcpy(&main_fds, &listenfds, sizeof(fd_set));
-
- rc = select(listenmaxfd + 1, &main_fds, NULL, NULL, &tv);
-
- if (rc == 0 || (rc == SOCKET_ERROR && APR_STATUS_IS_EINTR(apr_get_netos_error()))) {
- count_select_errors = 0; /* reset count of errors */
- continue;
- }
- else if (rc == SOCKET_ERROR) {
- /* A "real" error occurred, log it and increment the count of
- * select errors. This count is used to ensure we don't go into
- * a busy loop of continuous errors.
- */
- ap_log_error(APLOG_MARK, APLOG_INFO, apr_get_netos_error(), ap_server_conf,
- "select failed with error %d", apr_get_netos_error());
- count_select_errors++;
- if (count_select_errors > MAX_SELECT_ERRORS) {
- shutdown_in_progress = 1;
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_netos_error(), ap_server_conf,
- "Too many errors in select loop. Child process exiting.");
- break;
- }
- } else {
- ap_listen_rec *lr;
-
- lr = find_ready_listener(&main_fds);
- if (lr != NULL) {
- /* fetch the native socket descriptor */
- apr_os_sock_get(&nsd, lr->sd);
- }
- }
-
- do {
- clen = sizeof(sa_client);
- csd = accept(nsd, (struct sockaddr *) &sa_client, &clen);
- } while (csd < 0 && APR_STATUS_IS_EINTR(apr_get_netos_error()));
-
- if (csd < 0) {
- if (APR_STATUS_IS_ECONNABORTED(apr_get_netos_error())) {
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_netos_error(), ap_server_conf,
- "accept: (client socket)");
- }
- }
- else {
- add_job(csd);
- }
- }
- SetEvent(exit_event);
-}
-
-
-static PCOMP_CONTEXT win9x_get_connection(PCOMP_CONTEXT context)
-{
- apr_os_sock_info_t sockinfo;
- int len, salen;
-#if APR_HAVE_IPV6
- salen = sizeof(struct sockaddr_in6);
-#else
- salen = sizeof(struct sockaddr_in);
-#endif
-
-
- if (context == NULL) {
- /* allocate the completion context and the transaction pool */
- apr_allocator_t *allocator;
- apr_thread_mutex_lock(child_lock);
- context = apr_pcalloc(pchild, sizeof(COMP_CONTEXT));
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- apr_pool_create_ex(&context->ptrans, pchild, NULL, allocator);
- apr_allocator_owner_set(allocator, context->ptrans);
- apr_pool_tag(context->ptrans, "transaction");
- context->ba = apr_bucket_alloc_create(pchild);
- apr_thread_mutex_unlock(child_lock);
- }
-
- while (1) {
- apr_pool_clear(context->ptrans);
- context->accept_socket = remove_job();
- if (context->accept_socket == INVALID_SOCKET) {
- return NULL;
- }
- len = salen;
- context->sa_server = apr_palloc(context->ptrans, len);
- if (getsockname(context->accept_socket,
- context->sa_server, &len)== SOCKET_ERROR) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
- "getsockname failed");
- continue;
- }
- len = salen;
- context->sa_client = apr_palloc(context->ptrans, len);
- if ((getpeername(context->accept_socket,
- context->sa_client, &len)) == SOCKET_ERROR) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
- "getpeername failed");
- memset(&context->sa_client, '\0', sizeof(context->sa_client));
- }
- sockinfo.os_sock = &context->accept_socket;
- sockinfo.local = context->sa_server;
- sockinfo.remote = context->sa_client;
- sockinfo.family = context->sa_server->sa_family;
- sockinfo.type = SOCK_STREAM;
- apr_os_sock_make(&context->sock, &sockinfo, context->ptrans);
-
- return context;
- }
-}
-
-
-/* Windows NT/2000 specific code...
- * Accept processing for on Windows NT uses a producer/consumer queue
- * model. An accept thread accepts connections off the network then issues
- * PostQueuedCompletionStatus() to awake a thread blocked on the ThreadDispatch
- * IOCompletionPort.
- *
- * winnt_accept()
- * One or more accept threads run in this function, each of which accepts
- * connections off the network and calls PostQueuedCompletionStatus() to
- * queue an io completion packet to the ThreadDispatch IOCompletionPort.
- * winnt_get_connection()
- * Worker threads block on the ThreadDispatch IOCompletionPort awaiting
- * connections to service.
- */
-#define MAX_ACCEPTEX_ERR_COUNT 100
-static void winnt_accept(void *lr_)
-{
- ap_listen_rec *lr = (ap_listen_rec *)lr_;
- apr_os_sock_info_t sockinfo;
- PCOMP_CONTEXT context = NULL;
- DWORD BytesRead;
- SOCKET nlsd;
- int rv, err_count = 0;
-#if APR_HAVE_IPV6
- SOCKADDR_STORAGE ss_listen;
- int namelen = sizeof(ss_listen);
-#endif
-
- apr_os_sock_get(&nlsd, lr->sd);
-
-#if APR_HAVE_IPV6
- if (getsockname(nlsd, (struct sockaddr *)&ss_listen, &namelen) == SOCKET_ERROR) {
- ap_log_error(APLOG_MARK,APLOG_ERR, apr_get_netos_error(), ap_server_conf,
- "winnt_accept: getsockname error on listening socket, is IPv6 available?");
- return;
- }
-#endif
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "Child %d: Starting thread to listen on port %d.", my_pid, lr->bind_addr->port);
- while (!shutdown_in_progress) {
- if (!context) {
- context = mpm_get_completion_context();
- if (!context) {
- /* Temporary resource constraint? */
- Sleep(0);
- continue;
- }
- }
-
- /* Create and initialize the accept socket */
-#if APR_HAVE_IPV6
- if (context->accept_socket == INVALID_SOCKET) {
- context->accept_socket = socket(ss_listen.ss_family, SOCK_STREAM, IPPROTO_TCP);
- context->socket_family = ss_listen.ss_family;
- }
- else if (context->socket_family != ss_listen.ss_family) {
- closesocket(context->accept_socket);
- context->accept_socket = socket(ss_listen.ss_family, SOCK_STREAM, IPPROTO_TCP);
- context->socket_family = ss_listen.ss_family;
- }
-
- if (context->accept_socket == INVALID_SOCKET) {
- ap_log_error(APLOG_MARK,APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
- "winnt_accept: Failed to allocate an accept socket. "
- "Temporary resource constraint? Try again.");
- Sleep(100);
- continue;
- }
-#else
- if (context->accept_socket == INVALID_SOCKET) {
- context->accept_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (context->accept_socket == INVALID_SOCKET) {
- /* Another temporary condition? */
- ap_log_error(APLOG_MARK,APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
- "winnt_accept: Failed to allocate an accept socket. "
- "Temporary resource constraint? Try again.");
- Sleep(100);
- continue;
- }
- }
-#endif
- /* AcceptEx on the completion context. The completion context will be
- * signaled when a connection is accepted.
- */
- if (!AcceptEx(nlsd, context->accept_socket,
- context->buff,
- 0,
- PADDED_ADDR_SIZE,
- PADDED_ADDR_SIZE,
- &BytesRead,
- &context->Overlapped)) {
- rv = apr_get_netos_error();
- if ((rv == APR_FROM_OS_ERROR(WSAEINVAL)) ||
- (rv == APR_FROM_OS_ERROR(WSAENOTSOCK))) {
- /* We can get here when:
- * 1) the client disconnects early
- * 2) TransmitFile does not properly recycle the accept socket (typically
- * because the client disconnected)
- * 3) there is VPN or Firewall software installed with buggy AcceptEx implementation
- * 4) the webserver is using a dynamic address that has changed
- */
- ++err_count;
- closesocket(context->accept_socket);
- context->accept_socket = INVALID_SOCKET;
- if (err_count > MAX_ACCEPTEX_ERR_COUNT) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
- "Child %d: Encountered too many errors accepting client connections. "
- "Possible causes: dynamic address renewal, or incompatible VPN or firewall software. "
- "Try using the Win32DisableAcceptEx directive.", my_pid);
- err_count = 0;
- }
- continue;
- }
- else if ((rv != APR_FROM_OS_ERROR(ERROR_IO_PENDING)) &&
- (rv != APR_FROM_OS_ERROR(WSA_IO_PENDING))) {
- ++err_count;
- if (err_count > MAX_ACCEPTEX_ERR_COUNT) {
- ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
- "Child %d: Encountered too many errors accepting client connections. "
- "Possible causes: Unknown. "
- "Try using the Win32DisableAcceptEx directive.", my_pid);
- err_count = 0;
- }
- closesocket(context->accept_socket);
- context->accept_socket = INVALID_SOCKET;
- continue;
- }
- err_count = 0;
-
- /* Wait for pending i/o.
- * Wake up once per second to check for shutdown .
- * XXX: We should be waiting on exit_event instead of polling
- */
- while (1) {
- rv = WaitForSingleObject(context->Overlapped.hEvent, 1000);
- if (rv == WAIT_OBJECT_0) {
- if (context->accept_socket == INVALID_SOCKET) {
- /* socket already closed */
- break;
- }
- if (!GetOverlappedResult((HANDLE)context->accept_socket,
- &context->Overlapped,
- &BytesRead, FALSE)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING,
- apr_get_os_error(), ap_server_conf,
- "winnt_accept: Asynchronous AcceptEx failed.");
- closesocket(context->accept_socket);
- context->accept_socket = INVALID_SOCKET;
- }
- break;
- }
- /* WAIT_TIMEOUT */
- if (shutdown_in_progress) {
- closesocket(context->accept_socket);
- context->accept_socket = INVALID_SOCKET;
- break;
- }
- }
- if (context->accept_socket == INVALID_SOCKET) {
- continue;
- }
- }
- err_count = 0;
- /* Inherit the listen socket settings. Required for
- * shutdown() to work
- */
- if (setsockopt(context->accept_socket, SOL_SOCKET,
- SO_UPDATE_ACCEPT_CONTEXT, (char *)&nlsd,
- sizeof(nlsd))) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
- "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed.");
- /* Not a failure condition. Keep running. */
- }
-
- /* Get the local & remote address */
- GetAcceptExSockaddrs(context->buff,
- 0,
- PADDED_ADDR_SIZE,
- PADDED_ADDR_SIZE,
- &context->sa_server,
- &context->sa_server_len,
- &context->sa_client,
- &context->sa_client_len);
-
- sockinfo.os_sock = &context->accept_socket;
- sockinfo.local = context->sa_server;
- sockinfo.remote = context->sa_client;
- sockinfo.family = context->sa_server->sa_family;
- sockinfo.type = SOCK_STREAM;
- apr_os_sock_make(&context->sock, &sockinfo, context->ptrans);
-
- /* When a connection is received, send an io completion notification to
- * the ThreadDispatchIOCP. This function could be replaced by
- * mpm_post_completion_context(), but why do an extra function call...
- */
- PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, IOCP_CONNECTION_ACCEPTED,
- &context->Overlapped);
- context = NULL;
- }
- if (!shutdown_in_progress) {
- /* Yow, hit an irrecoverable error! Tell the child to die. */
- SetEvent(exit_event);
- }
- ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
- "Child %d: Accept thread exiting.", my_pid);
-}
-
-
-static PCOMP_CONTEXT winnt_get_connection(PCOMP_CONTEXT context)
-{
- int rc;
- DWORD BytesRead;
- DWORD CompKey;
- LPOVERLAPPED pol;
-
- mpm_recycle_completion_context(context);
-
- apr_atomic_inc32(&g_blocked_threads);
- while (1) {
- if (workers_may_exit) {
- apr_atomic_dec32(&g_blocked_threads);
- return NULL;
- }
- rc = GetQueuedCompletionStatus(ThreadDispatchIOCP, &BytesRead, &CompKey,
- &pol, INFINITE);
- if (!rc) {
- rc = apr_get_os_error();
- ap_log_error(APLOG_MARK,APLOG_DEBUG, rc, ap_server_conf,
- "Child %d: GetQueuedComplationStatus returned %d", my_pid, rc);
- continue;
- }
-
- switch (CompKey) {
- case IOCP_CONNECTION_ACCEPTED:
- context = CONTAINING_RECORD(pol, COMP_CONTEXT, Overlapped);
- break;
- case IOCP_SHUTDOWN:
- apr_atomic_dec32(&g_blocked_threads);
- return NULL;
- default:
- apr_atomic_dec32(&g_blocked_threads);
- return NULL;
- }
- break;
- }
- apr_atomic_dec32(&g_blocked_threads);
-
- return context;
-}
-
-
-/*
- * worker_main()
- * Main entry point for the worker threads. Worker threads block in
- * win*_get_connection() awaiting a connection to service.
- */
-static void worker_main(long thread_num)
-{
- static int requests_this_child = 0;
- PCOMP_CONTEXT context = NULL;
- ap_sb_handle_t *sbh;
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ap_server_conf,
- "Child %d: Worker thread %d starting.", my_pid, thread_num);
- while (1) {
- conn_rec *c;
- apr_int32_t disconnected;
-
- ap_update_child_status_from_indexes(0, thread_num, SERVER_READY, NULL);
-
- /* Grab a connection off the network */
- if (use_acceptex) {
- context = winnt_get_connection(context);
- }
- else {
- context = win9x_get_connection(context);
- }
-
- if (!context) {
- /* Time for the thread to exit */
- break;
- }
-
- /* Have we hit MaxRequestPerChild connections? */
- if (ap_max_requests_per_child) {
- requests_this_child++;
- if (requests_this_child > ap_max_requests_per_child) {
- SetEvent(max_requests_per_child_event);
- }
- }
-
- ap_create_sb_handle(&sbh, context->ptrans, 0, thread_num);
- c = ap_run_create_connection(context->ptrans, ap_server_conf,
- context->sock, thread_num, sbh,
- context->ba);
-
- if (c) {
- ap_process_connection(c, context->sock);
- apr_socket_opt_get(context->sock, APR_SO_DISCONNECTED,
- &disconnected);
- if (!disconnected) {
- context->accept_socket = INVALID_SOCKET;
- ap_lingering_close(c);
- }
- else if (!use_acceptex) {
- /* If the socket is disconnected but we are not using acceptex,
- * we cannot reuse the socket. Disconnected sockets are removed
- * from the apr_socket_t struct by apr_sendfile() to prevent the
- * socket descriptor from being inadvertently closed by a call
- * to apr_socket_close(), so close it directly.
- */
- closesocket(context->accept_socket);
- context->accept_socket = INVALID_SOCKET;
- }
- }
- else {
- /* ap_run_create_connection closes the socket on failure */
- context->accept_socket = INVALID_SOCKET;
- }
- }
-
- ap_update_child_status_from_indexes(0, thread_num, SERVER_DEAD,
- (request_rec *) NULL);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ap_server_conf,
- "Child %d: Worker thread %d exiting.", my_pid, thread_num);
-}
-
-
-static void cleanup_thread(HANDLE *handles, int *thread_cnt, int thread_to_clean)
-{
- int i;
-
- CloseHandle(handles[thread_to_clean]);
- for (i = thread_to_clean; i < ((*thread_cnt) - 1); i++)
- handles[i] = handles[i + 1];
- (*thread_cnt)--;
-}
-
-
-/*
- * child_main()
- * Entry point for the main control thread for the child process.
- * This thread creates the accept thread, worker threads and
- * monitors the child process for maintenance and shutdown
- * events.
- */
-static void create_listener_thread()
-{
- int tid;
- int num_listeners = 0;
- if (!use_acceptex) {
- _beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE) win9x_accept,
- NULL, 0, &tid);
- } else {
- /* Start an accept thread per listener
- * XXX: Why would we have a NULL sd in our listeners?
- */
- ap_listen_rec *lr;
-
- /* Number of completion_contexts allowed in the system is
- * (ap_threads_per_child + num_listeners). We need the additional
- * completion contexts to prevent server hangs when ThreadsPerChild
- * is configured to something less than or equal to the number
- * of listeners. This is not a usual case, but people have
- * encountered it.
- * */
- for (lr = ap_listeners; lr ; lr = lr->next) {
- num_listeners++;
- }
- max_num_completion_contexts = ap_threads_per_child + num_listeners;
-
- /* Now start a thread per listener */
- for (lr = ap_listeners; lr; lr = lr->next) {
- if (lr->sd != NULL) {
- _beginthreadex(NULL, 1000, (LPTHREAD_START_ROUTINE) winnt_accept,
- (void *) lr, 0, &tid);
- }
- }
- }
-}
-
-
-void child_main(apr_pool_t *pconf)
-{
- apr_status_t status;
- apr_hash_t *ht;
- ap_listen_rec *lr;
- HANDLE child_events[2];
- int threads_created = 0;
- int listener_started = 0;
- int tid;
- HANDLE *child_handles;
- int rv;
- time_t end_time;
- int i;
- int cld;
-
- apr_pool_create(&pchild, pconf);
- apr_pool_tag(pchild, "pchild");
-
- ap_run_child_init(pchild, ap_server_conf);
- ht = apr_hash_make(pchild);
-
- /* Initialize the child_events */
- max_requests_per_child_event = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (!max_requests_per_child_event) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: Failed to create a max_requests event.", my_pid);
- exit(APEXIT_CHILDINIT);
- }
- child_events[0] = exit_event;
- child_events[1] = max_requests_per_child_event;
-
- allowed_globals.jobsemaphore = CreateSemaphore(NULL, 0, 1000000, NULL);
- apr_thread_mutex_create(&allowed_globals.jobmutex,
- APR_THREAD_MUTEX_DEFAULT, pchild);
-
- /*
- * Wait until we have permission to start accepting connections.
- * start_mutex is used to ensure that only one child ever
- * goes into the listen/accept loop at once.
- */
- status = apr_proc_mutex_lock(start_mutex);
- if (status != APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_ERR, status, ap_server_conf,
- "Child %d: Failed to acquire the start_mutex. Process will exit.", my_pid);
- exit(APEXIT_CHILDINIT);
- }
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Acquired the start mutex.", my_pid);
-
- /*
- * Create the worker thread dispatch IOCompletionPort
- * on Windows NT/2000
- */
- if (use_acceptex) {
- /* Create the worker thread dispatch IOCP */
- ThreadDispatchIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
- NULL,
- 0,
- 0); /* CONCURRENT ACTIVE THREADS */
- apr_thread_mutex_create(&qlock, APR_THREAD_MUTEX_DEFAULT, pchild);
- qwait_event = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (!qwait_event) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: Failed to create a qwait event.", my_pid);
- exit(APEXIT_CHILDINIT);
- }
- }
-
- /*
- * Create the pool of worker threads
- */
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Starting %d worker threads.", my_pid, ap_threads_per_child);
- child_handles = (HANDLE) apr_pcalloc(pchild, ap_threads_per_child * sizeof(int));
- apr_thread_mutex_create(&child_lock, APR_THREAD_MUTEX_DEFAULT, pchild);
-
- while (1) {
- for (i = 0; i < ap_threads_per_child; i++) {
- int *score_idx;
- int status = ap_scoreboard_image->servers[0][i].status;
- if (status != SERVER_GRACEFUL && status != SERVER_DEAD) {
- continue;
- }
- ap_update_child_status_from_indexes(0, i, SERVER_STARTING, NULL);
- child_handles[i] = (HANDLE) _beginthreadex(NULL, (unsigned)ap_thread_stacksize,
- (LPTHREAD_START_ROUTINE) worker_main,
- (void *) i, 0, &tid);
- if (child_handles[i] == 0) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: _beginthreadex failed. Unable to create all worker threads. "
- "Created %d of the %d threads requested with the ThreadsPerChild configuration directive.",
- my_pid, threads_created, ap_threads_per_child);
- ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
- goto shutdown;
- }
- threads_created++;
- /* Save the score board index in ht keyed to the thread handle. We need this
- * when cleaning up threads down below...
- */
- apr_thread_mutex_lock(child_lock);
- score_idx = apr_pcalloc(pchild, sizeof(int));
- *score_idx = i;
- apr_hash_set(ht, &child_handles[i], sizeof(HANDLE), score_idx);
- apr_thread_mutex_unlock(child_lock);
- }
- /* Start the listener only when workers are available */
- if (!listener_started && threads_created) {
- create_listener_thread();
- listener_started = 1;
- winnt_mpm_state = AP_MPMQ_RUNNING;
- }
- if (threads_created == ap_threads_per_child) {
- break;
- }
- /* Check to see if the child has been told to exit */
- if (WaitForSingleObject(exit_event, 0) != WAIT_TIMEOUT) {
- break;
- }
- /* wait for previous generation to clean up an entry in the scoreboard */
- apr_sleep(1 * APR_USEC_PER_SEC);
- }
-
- /* Wait for one of three events:
- * exit_event:
- * The exit_event is signaled by the parent process to notify
- * the child that it is time to exit.
- *
- * max_requests_per_child_event:
- * This event is signaled by the worker threads to indicate that
- * the process has handled MaxRequestsPerChild connections.
- *
- * TIMEOUT:
- * To do periodic maintenance on the server (check for thread exits,
- * number of completion contexts, etc.)
- *
- * XXX: thread exits *aren't* being checked.
- *
- * XXX: other_child - we need the process handles to the other children
- * in order to map them to apr_proc_other_child_read (which is not
- * named well, it's more like a_p_o_c_died.)
- *
- * XXX: however - if we get a_p_o_c handle inheritance working, and
- * the parent process creates other children and passes the pipes
- * to our worker processes, then we have no business doing such
- * things in the child_main loop, but should happen in master_main.
- */
- while (1) {
-#if !APR_HAS_OTHER_CHILD
- rv = WaitForMultipleObjects(2, (HANDLE *) child_events, FALSE, INFINITE);
- cld = rv - WAIT_OBJECT_0;
-#else
- rv = WaitForMultipleObjects(2, (HANDLE *) child_events, FALSE, 1000);
- cld = rv - WAIT_OBJECT_0;
- if (rv == WAIT_TIMEOUT) {
- apr_proc_other_child_refresh_all(APR_OC_REASON_RUNNING);
- }
- else
-#endif
- if (rv == WAIT_FAILED) {
- /* Something serious is wrong */
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: WAIT_FAILED -- shutting down server", my_pid);
- break;
- }
- else if (cld == 0) {
- /* Exit event was signaled */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Exit event signaled. Child process is ending.", my_pid);
- break;
- }
- else {
- /* MaxRequestsPerChild event set by the worker threads.
- * Signal the parent to restart
- */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Process exiting because it reached "
- "MaxRequestsPerChild. Signaling the parent to "
- "restart a new child process.", my_pid);
- ap_signal_parent(SIGNAL_PARENT_RESTART);
- break;
- }
- }
-
- /*
- * Time to shutdown the child process
- */
-
- shutdown:
-
- winnt_mpm_state = AP_MPMQ_STOPPING;
- /* Setting is_graceful will cause threads handling keep-alive connections
- * to close the connection after handling the current request.
- */
- is_graceful = 1;
-
- /* Close the listening sockets. Note, we must close the listeners
- * before closing any accept sockets pending in AcceptEx to prevent
- * memory leaks in the kernel.
- */
- for (lr = ap_listeners; lr ; lr = lr->next) {
- apr_socket_close(lr->sd);
- }
-
- /* Shutdown listener threads and pending AcceptEx socksts
- * but allow the worker threads to continue consuming from
- * the queue of accepted connections.
- */
- shutdown_in_progress = 1;
-
- Sleep(1000);
-
- /* Tell the worker threads to exit */
- workers_may_exit = 1;
-
- /* Release the start_mutex to let the new process (in the restart
- * scenario) a chance to begin accepting and servicing requests
- */
- rv = apr_proc_mutex_unlock(start_mutex);
- if (rv == APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_NOTICE, rv, ap_server_conf,
- "Child %d: Released the start mutex", my_pid);
- }
- else {
- ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
- "Child %d: Failure releasing the start mutex", my_pid);
- }
-
- /* Shutdown the worker threads */
- if (!use_acceptex) {
- for (i = 0; i < threads_created; i++) {
- add_job(INVALID_SOCKET);
- }
- }
- else { /* Windows NT/2000 */
- /* Post worker threads blocked on the ThreadDispatch IOCompletion port */
- while (g_blocked_threads > 0) {
- ap_log_error(APLOG_MARK,APLOG_INFO, APR_SUCCESS, ap_server_conf,
- "Child %d: %d threads blocked on the completion port", my_pid, g_blocked_threads);
- for (i=g_blocked_threads; i > 0; i--) {
- PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, IOCP_SHUTDOWN, NULL);
- }
- Sleep(1000);
- }
- /* Empty the accept queue of completion contexts */
- apr_thread_mutex_lock(qlock);
- while (qhead) {
- CloseHandle(qhead->Overlapped.hEvent);
- closesocket(qhead->accept_socket);
- qhead = qhead->next;
- }
- apr_thread_mutex_unlock(qlock);
- }
-
- /* Give busy worker threads a chance to service their connections */
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Waiting for %d worker threads to exit.", my_pid, threads_created);
- end_time = time(NULL) + 180;
- while (threads_created) {
- rv = wait_for_many_objects(threads_created, child_handles, end_time - time(NULL));
- if (rv != WAIT_TIMEOUT) {
- rv = rv - WAIT_OBJECT_0;
- ap_assert((rv >= 0) && (rv < threads_created));
- cleanup_thread(child_handles, &threads_created, rv);
- continue;
- }
- break;
- }
-
- /* Kill remaining threads off the hard way */
- if (threads_created) {
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Terminating %d threads that failed to exit.", my_pid);
- }
- for (i = 0; i < threads_created; i++) {
- int *score_idx;
- TerminateThread(child_handles[i], 1);
- CloseHandle(child_handles[i]);
- /* Reset the scoreboard entry for the thread we just whacked */
- score_idx = apr_hash_get(ht, &child_handles[i], sizeof(HANDLE));
- ap_update_child_status_from_indexes(0, *score_idx, SERVER_DEAD, NULL);
- }
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: All worker threads have exited.", my_pid);
-
- CloseHandle(allowed_globals.jobsemaphore);
- apr_thread_mutex_destroy(allowed_globals.jobmutex);
- apr_thread_mutex_destroy(child_lock);
-
- if (use_acceptex) {
- apr_thread_mutex_destroy(qlock);
- CloseHandle(qwait_event);
- }
-
- apr_pool_destroy(pchild);
- CloseHandle(exit_event);
-}
-
-#endif /* def WIN32 */
diff --git a/server/mpm/winnt/mpm.h b/server/mpm/winnt/mpm.h
deleted file mode 100644
index 9d4ed5a9a8..0000000000
--- a/server/mpm/winnt/mpm.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_H
-#define APACHE_MPM_H
-
-/* mpm.h is the place to make declarations that are MPM specific but that must be
- * shared with non-mpm specific code in the server. Hummm, perhaps we can
- * move most of this stuff to mpm_common.h?
- */
-
-#include "scoreboard.h"
-
-#define MPM_NAME "WinNT"
-
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-#define AP_MPM_WANT_SET_STACKSIZE
-
-extern int ap_threads_per_child;
-extern int ap_thread_limit;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_H */
diff --git a/server/mpm/winnt/mpm_default.h b/server/mpm/winnt/mpm_default.h
deleted file mode 100644
index 65c264c7c5..0000000000
--- a/server/mpm/winnt/mpm_default.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Default limit on the maximum setting of the ThreadsPerChild configuration
- * directive. This limit can be overridden with the ThreadLimit directive.
- * This limit directly influences the amount of shared storage that is allocated
- * for the scoreboard. DEFAULT_THREAD_LIMIT represents a good compromise
- * between scoreboard size and the ability of the server to handle the most
- * common installation requirements.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 1920
-#endif
-
-/* The ThreadLimit directive can be used to override the DEFAULT_THREAD_LIMIT.
- * ThreadLimit cannot be tuned larger than MAX_THREAD_LIMIT.
- * This is a sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 15000
-#endif
-
-/* Number of threads started in the child process in the absence
- * of a ThreadsPerChild configuration directive
- */
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 64
-#endif
-
-/* Max number of child processes allowed.
- */
-#define HARD_SERVER_LIMIT 1
-
-/* Number of servers to spawn off by default
- */
-#ifndef DEFAULT_NUM_DAEMON
-#define DEFAULT_NUM_DAEMON 1
-#endif
-
-/* Check for definition of DEFAULT_REL_RUNTIMEDIR */
-#ifndef DEFAULT_REL_RUNTIMEDIR
-#define DEFAULT_REL_RUNTIMEDIR "logs"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 0
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/winnt/mpm_winnt.c b/server/mpm/winnt/mpm_winnt.c
deleted file mode 100644
index 7dd58c444e..0000000000
--- a/server/mpm/winnt/mpm_winnt.c
+++ /dev/null
@@ -1,1682 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef WIN32
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "apr_portable.h"
-#include "apr_thread_proc.h"
-#include "apr_getopt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_shm.h"
-#include "apr_thread_mutex.h"
-#include "ap_mpm.h"
-#include "ap_config.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-#include "mpm_winnt.h"
-#include "mpm_common.h"
-#include <malloc.h>
-#include "apr_atomic.h"
-
-
-/* scoreboard.c does the heavy lifting; all we do is create the child
- * score by moving a handle down the pipe into the child's stdin.
- */
-extern apr_shm_t *ap_scoreboard_shm;
-server_rec *ap_server_conf;
-
-/* Definitions of WINNT MPM specific config globals */
-static HANDLE shutdown_event; /* used to signal the parent to shutdown */
-static HANDLE restart_event; /* used to signal the parent to restart */
-
-static char ap_coredump_dir[MAX_STRING_LEN];
-
-static int one_process = 0;
-static char const* signal_arg = NULL;
-
-OSVERSIONINFO osver; /* VER_PLATFORM_WIN32_NT */
-
-static DWORD parent_pid;
-DWORD my_pid;
-
-int ap_threads_per_child = 0;
-int use_acceptex = 1;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit = 0;
-static int changed_limit_at_restart;
-int winnt_mpm_state = AP_MPMQ_STARTING;
-
-/* ap_my_generation are used by the scoreboard code */
-ap_generation_t volatile ap_my_generation=0;
-
-
-/* shared by service.c as global, although
- * perhaps it should be private.
- */
-apr_pool_t *pconf;
-
-
-/* definitions from child.c */
-void child_main(apr_pool_t *pconf);
-
-/* used by parent to signal the child to start and exit
- * NOTE: these are not sophisticated enough for multiple children
- * so they ultimately should not be shared with child.c
- */
-extern apr_proc_mutex_t *start_mutex;
-extern HANDLE exit_event;
-
-
-/* Stub functions until this MPM supports the connection status API */
-
-AP_DECLARE(void) ap_update_connection_status(long conn_id, const char *key, \
- const char *value)
-{
- /* NOP */
-}
-
-AP_DECLARE(void) ap_reset_connection_status(long conn_id)
-{
- /* NOP */
-}
-
-AP_DECLARE(apr_array_header_t *) ap_get_status_table(apr_pool_t *p)
-{
- /* NOP */
- return NULL;
-}
-
-/*
- * Command processors
- */
-
-static const char *set_threads_per_child (cmd_parms *cmd, void *dummy, char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_per_child = atoi(arg);
- if (ap_threads_per_child > thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadsPerChild of %d exceeds ThreadLimit "
- "value of %d threads,", ap_threads_per_child,
- thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ThreadsPerChild to %d. To increase, please"
- " see the", thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " ThreadLimit directive.");
- ap_threads_per_child = thread_limit;
- }
- else if (ap_threads_per_child < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadsPerChild > 0, setting to 1");
- ap_threads_per_child = 1;
- }
- return NULL;
-}
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_thread_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_thread_limit = atoi(arg);
- /* you cannot change ThreadLimit across a restart; ignore
- * any such attempts
- */
- if (first_thread_limit &&
- tmp_thread_limit != thread_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- thread_limit = tmp_thread_limit;
-
- if (thread_limit > MAX_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadLimit of %d exceeds compile time limit "
- "of %d threads,", thread_limit, MAX_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
- thread_limit = MAX_THREAD_LIMIT;
- }
- else if (thread_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadLimit > 0, setting to 1");
- thread_limit = 1;
- }
- return NULL;
-}
-static const char *set_disable_acceptex(cmd_parms *cmd, void *dummy, char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
- if (use_acceptex) {
- use_acceptex = 0;
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
- "Disabled use of AcceptEx() WinSock2 API");
- }
- return NULL;
-}
-
-static const command_rec winnt_cmds[] = {
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("ThreadsPerChild", set_threads_per_child, NULL, RSRC_CONF,
- "Number of threads each child creates" ),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
- "Maximum worker threads in a server for this run of Apache"),
-AP_INIT_NO_ARGS("Win32DisableAcceptEx", set_disable_acceptex, NULL, RSRC_CONF,
- "Disable use of the high performance AcceptEx WinSock2 API to work around buggy VPN or Firewall software"),
-
-{ NULL }
-};
-
-
-/*
- * Signalling Apache on NT.
- *
- * Under Unix, Apache can be told to shutdown or restart by sending various
- * signals (HUP, USR, TERM). On NT we don't have easy access to signals, so
- * we use "events" instead. The parent apache process goes into a loop
- * where it waits forever for a set of events. Two of those events are
- * called
- *
- * apPID_shutdown
- * apPID_restart
- *
- * (where PID is the PID of the apache parent process). When one of these
- * is signalled, the Apache parent performs the appropriate action. The events
- * can become signalled through internal Apache methods (e.g. if the child
- * finds a fatal error and needs to kill its parent), via the service
- * control manager (the control thread will signal the shutdown event when
- * requested to stop the Apache service), from the -k Apache command line,
- * or from any external program which finds the Apache PID from the
- * httpd.pid file.
- *
- * The signal_parent() function, below, is used to signal one of these events.
- * It can be called by any child or parent process, since it does not
- * rely on global variables.
- *
- * On entry, type gives the event to signal. 0 means shutdown, 1 means
- * graceful restart.
- */
-/*
- * Initialise the signal names, in the global variables signal_name_prefix,
- * signal_restart_name and signal_shutdown_name.
- */
-#define MAX_SIGNAL_NAME 30 /* Long enough for apPID_shutdown, where PID is an int */
-char signal_name_prefix[MAX_SIGNAL_NAME];
-char signal_restart_name[MAX_SIGNAL_NAME];
-char signal_shutdown_name[MAX_SIGNAL_NAME];
-void setup_signal_names(char *prefix)
-{
- apr_snprintf(signal_name_prefix, sizeof(signal_name_prefix), prefix);
- apr_snprintf(signal_shutdown_name, sizeof(signal_shutdown_name),
- "%s_shutdown", signal_name_prefix);
- apr_snprintf(signal_restart_name, sizeof(signal_restart_name),
- "%s_restart", signal_name_prefix);
-}
-
-int volatile is_graceful = 0;
-
-AP_DECLARE(int) ap_graceful_stop_signalled(void)
-{
- return is_graceful;
-}
-
-AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type)
-{
- HANDLE e;
- char *signal_name;
-
- if (parent_pid == my_pid) {
- switch(type) {
- case SIGNAL_PARENT_SHUTDOWN:
- {
- SetEvent(shutdown_event);
- break;
- }
- /* This MPM supports only graceful restarts right now */
- case SIGNAL_PARENT_RESTART:
- case SIGNAL_PARENT_RESTART_GRACEFUL:
- {
- is_graceful = 1;
- SetEvent(restart_event);
- break;
- }
- }
- return;
- }
-
- switch(type) {
- case SIGNAL_PARENT_SHUTDOWN:
- {
- signal_name = signal_shutdown_name;
- break;
- }
- /* This MPM supports only graceful restarts right now */
- case SIGNAL_PARENT_RESTART:
- case SIGNAL_PARENT_RESTART_GRACEFUL:
- {
- signal_name = signal_restart_name;
- is_graceful = 1;
- break;
- }
- default:
- return;
- }
-
- e = OpenEvent(EVENT_MODIFY_STATE, FALSE, signal_name);
- if (!e) {
- /* Um, problem, can't signal the parent, which means we can't
- * signal ourselves to die. Ignore for now...
- */
- ap_log_error(APLOG_MARK, APLOG_EMERG, apr_get_os_error(), ap_server_conf,
- "OpenEvent on %s event", signal_name);
- return;
- }
- if (SetEvent(e) == 0) {
- /* Same problem as above */
- ap_log_error(APLOG_MARK, APLOG_EMERG, apr_get_os_error(), ap_server_conf,
- "SetEvent on %s event", signal_name);
- CloseHandle(e);
- return;
- }
- CloseHandle(e);
-}
-
-
-/*
- * Passed the following handles [in sync with send_handles_to_child()]
- *
- * ready event [signal the parent immediately, then close]
- * exit event [save to poll later]
- * start mutex [signal from the parent to begin accept()]
- * scoreboard shm handle [to recreate the ap_scoreboard]
- */
-void get_handles_from_parent(server_rec *s, HANDLE *child_exit_event,
- apr_proc_mutex_t **child_start_mutex,
- apr_shm_t **scoreboard_shm)
-{
- HANDLE pipe;
- HANDLE hScore;
- HANDLE ready_event;
- HANDLE os_start;
- DWORD BytesRead;
- void *sb_shared;
- apr_status_t rv;
-
- pipe = GetStdHandle(STD_INPUT_HANDLE);
- if (!ReadFile(pipe, &ready_event, sizeof(HANDLE),
- &BytesRead, (LPOVERLAPPED) NULL)
- || (BytesRead != sizeof(HANDLE))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: Unable to retrieve the ready event from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
-
- SetEvent(ready_event);
- CloseHandle(ready_event);
-
- if (!ReadFile(pipe, child_exit_event, sizeof(HANDLE),
- &BytesRead, (LPOVERLAPPED) NULL)
- || (BytesRead != sizeof(HANDLE))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: Unable to retrieve the exit event from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
-
- if (!ReadFile(pipe, &os_start, sizeof(os_start),
- &BytesRead, (LPOVERLAPPED) NULL)
- || (BytesRead != sizeof(os_start))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: Unable to retrieve the start_mutex from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
- *child_start_mutex = NULL;
- if ((rv = apr_os_proc_mutex_put(child_start_mutex, &os_start, s->process->pool))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Child %d: Unable to access the start_mutex from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
-
- if (!ReadFile(pipe, &hScore, sizeof(hScore),
- &BytesRead, (LPOVERLAPPED) NULL)
- || (BytesRead != sizeof(hScore))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Child %d: Unable to retrieve the scoreboard from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
- *scoreboard_shm = NULL;
- if ((rv = apr_os_shm_put(scoreboard_shm, &hScore, s->process->pool))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Child %d: Unable to access the scoreboard from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
-
- rv = ap_reopen_scoreboard(s->process->pool, scoreboard_shm, 1);
- if (rv || !(sb_shared = apr_shm_baseaddr_get(*scoreboard_shm))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "Child %d: Unable to reopen the scoreboard from the parent", my_pid);
- exit(APEXIT_CHILDINIT);
- }
- /* We must 'initialize' the scoreboard to relink all the
- * process-local pointer arrays into the shared memory block.
- */
- ap_init_scoreboard(sb_shared);
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Child %d: Retrieved our scoreboard from the parent.", my_pid);
-}
-
-
-static int send_handles_to_child(apr_pool_t *p,
- HANDLE child_ready_event,
- HANDLE child_exit_event,
- apr_proc_mutex_t *child_start_mutex,
- apr_shm_t *scoreboard_shm,
- HANDLE hProcess,
- apr_file_t *child_in)
-{
- apr_status_t rv;
- HANDLE hCurrentProcess = GetCurrentProcess();
- HANDLE hDup;
- HANDLE os_start;
- HANDLE hScore;
- DWORD BytesWritten;
-
- if (!DuplicateHandle(hCurrentProcess, child_ready_event, hProcess, &hDup,
- EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, 0)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Unable to duplicate the ready event handle for the child");
- return -1;
- }
- if ((rv = apr_file_write_full(child_in, &hDup, sizeof(hDup), &BytesWritten))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to send the exit event handle to the child");
- return -1;
- }
- if (!DuplicateHandle(hCurrentProcess, child_exit_event, hProcess, &hDup,
- EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, 0)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Unable to duplicate the exit event handle for the child");
- return -1;
- }
- if ((rv = apr_file_write_full(child_in, &hDup, sizeof(hDup), &BytesWritten))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to send the exit event handle to the child");
- return -1;
- }
- if ((rv = apr_os_proc_mutex_get(&os_start, child_start_mutex)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to retrieve the start mutex for the child");
- return -1;
- }
- if (!DuplicateHandle(hCurrentProcess, os_start, hProcess, &hDup,
- SYNCHRONIZE, FALSE, 0)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Unable to duplicate the start mutex to the child");
- return -1;
- }
- if ((rv = apr_file_write_full(child_in, &hDup, sizeof(hDup), &BytesWritten))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to send the start mutex to the child");
- return -1;
- }
- if ((rv = apr_os_shm_get(&hScore, scoreboard_shm)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to retrieve the scoreboard handle for the child");
- return -1;
- }
- if (!DuplicateHandle(hCurrentProcess, hScore, hProcess, &hDup,
- FILE_MAP_READ | FILE_MAP_WRITE, FALSE, 0)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Unable to duplicate the scoreboard handle to the child");
- return -1;
- }
- if ((rv = apr_file_write_full(child_in, &hDup, sizeof(hDup), &BytesWritten))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to send the scoreboard handle to the child");
- return -1;
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Parent: Sent the scoreboard to the child");
- return 0;
-}
-
-
-/*
- * get_listeners_from_parent()
- * The listen sockets are opened in the parent. This function, which runs
- * exclusively in the child process, receives them from the parent and
- * makes them availeble in the child.
- */
-void get_listeners_from_parent(server_rec *s)
-{
- WSAPROTOCOL_INFO WSAProtocolInfo;
- HANDLE pipe;
- ap_listen_rec *lr;
- DWORD BytesRead;
- int lcnt = 0;
- SOCKET nsd;
-
- /* Set up a default listener if necessary */
- if (ap_listeners == NULL) {
- ap_listen_rec *lr;
- lr = apr_palloc(s->process->pool, sizeof(ap_listen_rec));
- lr->sd = NULL;
- lr->next = ap_listeners;
- ap_listeners = lr;
- }
-
- /* Open the pipe to the parent process to receive the inherited socket
- * data. The sockets have been set to listening in the parent process.
- */
- pipe = GetStdHandle(STD_INPUT_HANDLE);
-
- for (lr = ap_listeners; lr; lr = lr->next, ++lcnt) {
- if (!ReadFile(pipe, &WSAProtocolInfo, sizeof(WSAPROTOCOL_INFO),
- &BytesRead, (LPOVERLAPPED) NULL)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "setup_inherited_listeners: Unable to read socket data from parent");
- exit(APEXIT_CHILDINIT);
- }
- nsd = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
- &WSAProtocolInfo, 0, 0);
- if (nsd == INVALID_SOCKET) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_netos_error(), ap_server_conf,
- "Child %d: setup_inherited_listeners(), WSASocket failed to open the inherited socket.", my_pid);
- exit(APEXIT_CHILDINIT);
- }
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
- HANDLE hProcess = GetCurrentProcess();
- HANDLE dup;
- if (DuplicateHandle(hProcess, (HANDLE) nsd, hProcess, &dup,
- 0, FALSE, DUPLICATE_SAME_ACCESS)) {
- closesocket(nsd);
- nsd = (SOCKET) dup;
- }
- }
- else {
- /* A different approach. Many users report errors such as
- * (32538)An operation was attempted on something that is not
- * a socket. : Parent: WSADuplicateSocket failed...
- *
- * This appears that the duplicated handle is no longer recognized
- * as a socket handle. SetHandleInformation should overcome that
- * problem by not altering the handle identifier. But this won't
- * work on 9x - it's unsupported.
- */
- if (!SetHandleInformation((HANDLE)nsd, HANDLE_FLAG_INHERIT, 0)) {
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), ap_server_conf,
- "set_listeners_noninheritable: SetHandleInformation failed.");
- }
- }
- apr_os_sock_put(&lr->sd, &nsd, s->process->pool);
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Child %d: retrieved %d listeners from parent", my_pid, lcnt);
-}
-
-
-static int send_listeners_to_child(apr_pool_t *p, DWORD dwProcessId,
- apr_file_t *child_in)
-{
- apr_status_t rv;
- int lcnt = 0;
- ap_listen_rec *lr;
- LPWSAPROTOCOL_INFO lpWSAProtocolInfo;
- DWORD BytesWritten;
-
- /* Run the chain of open sockets. For each socket, duplicate it
- * for the target process then send the WSAPROTOCOL_INFO
- * (returned by dup socket) to the child.
- */
- for (lr = ap_listeners; lr; lr = lr->next, ++lcnt) {
- int nsd;
- lpWSAProtocolInfo = apr_pcalloc(p, sizeof(WSAPROTOCOL_INFO));
- apr_os_sock_get(&nsd,lr->sd);
- ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
- "Parent: Duplicating socket %d and sending it to child process %d",
- nsd, dwProcessId);
- if (WSADuplicateSocket(nsd, dwProcessId,
- lpWSAProtocolInfo) == SOCKET_ERROR) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_netos_error(), ap_server_conf,
- "Parent: WSADuplicateSocket failed for socket %d. Check the FAQ.", lr->sd );
- return -1;
- }
-
- if ((rv = apr_file_write_full(child_in, lpWSAProtocolInfo,
- sizeof(WSAPROTOCOL_INFO), &BytesWritten))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to write duplicated socket %d to the child.", lr->sd );
- return -1;
- }
- }
-
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "Parent: Sent %d listeners to child %d", lcnt, dwProcessId);
- return 0;
-}
-
-enum waitlist_e {
- waitlist_ready = 0,
- waitlist_term = 1
-};
-
-static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_event,
- DWORD *child_pid)
-{
- /* These NEVER change for the lifetime of this parent
- */
- static char **args = NULL;
- static char **env = NULL;
- static char pidbuf[28];
-
- apr_status_t rv;
- apr_pool_t *ptemp;
- apr_procattr_t *attr;
- apr_file_t *child_out;
- apr_file_t *child_err;
- apr_proc_t new_child;
- HANDLE hExitEvent;
- HANDLE waitlist[2]; /* see waitlist_e */
- char *cmd;
- char *cwd;
-
- apr_pool_create_ex(&ptemp, p, NULL, NULL);
-
- /* Build the command line. Should look something like this:
- * C:/apache/bin/apache.exe -f ap_server_confname
- * First, get the path to the executable...
- */
- apr_procattr_create(&attr, ptemp);
- apr_procattr_cmdtype_set(attr, APR_PROGRAM);
- apr_procattr_detach_set(attr, 1);
- if (((rv = apr_filepath_get(&cwd, 0, ptemp)) != APR_SUCCESS)
- || ((rv = apr_procattr_dir_set(attr, cwd)) != APR_SUCCESS)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Failed to get the current path");
- }
-
- if (!args) {
- /* Build the args array, only once since it won't change
- * for the lifetime of this parent process.
- */
- if ((rv = ap_os_proc_filepath(&cmd, ptemp))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, ERROR_BAD_PATHNAME, ap_server_conf,
- "Parent: Failed to get full path of %s",
- ap_server_conf->process->argv[0]);
- apr_pool_destroy(ptemp);
- return -1;
- }
-
- args = malloc((ap_server_conf->process->argc + 1) * sizeof (char*));
- memcpy(args + 1, ap_server_conf->process->argv + 1,
- (ap_server_conf->process->argc - 1) * sizeof (char*));
- args[0] = malloc(strlen(cmd) + 1);
- strcpy(args[0], cmd);
- args[ap_server_conf->process->argc] = NULL;
- }
- else {
- cmd = args[0];
- }
-
- /* Create a pipe to send handles to the child */
- if ((rv = apr_procattr_io_set(attr, APR_FULL_BLOCK,
- APR_NO_PIPE, APR_NO_PIPE)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to create child stdin pipe.\n");
- apr_pool_destroy(ptemp);
- return -1;
- }
-
- /* Open a null handle to soak info from the child */
- if (((rv = apr_file_open(&child_out, "NUL", APR_READ | APR_WRITE,
- APR_OS_DEFAULT, ptemp)) != APR_SUCCESS)
- || ((rv = apr_procattr_child_out_set(attr, child_out, NULL))
- != APR_SUCCESS)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to connect child stdout to NUL.\n");
- apr_pool_destroy(ptemp);
- return -1;
- }
-
- /* Connect the child's initial stderr to our main server error log
- * or share our own stderr handle.
- */
- if (ap_server_conf->error_log) {
- child_err = ap_server_conf->error_log;
- }
- else {
- rv = apr_file_open_stderr(&child_err, ptemp);
- }
- if (rv == APR_SUCCESS) {
- if ((rv = apr_procattr_child_err_set(attr, child_err, NULL))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Unable to connect child stderr.\n");
- apr_pool_destroy(ptemp);
- return -1;
- }
- }
-
- /* Create the child_ready_event */
- waitlist[waitlist_ready] = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (!waitlist[waitlist_ready]) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Could not create ready event for child process");
- apr_pool_destroy (ptemp);
- return -1;
- }
-
- /* Create the child_exit_event */
- hExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (!hExitEvent) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Could not create exit event for child process");
- apr_pool_destroy(ptemp);
- CloseHandle(waitlist[waitlist_ready]);
- return -1;
- }
-
- if (!env)
- {
- /* Build the env array, only once since it won't change
- * for the lifetime of this parent process.
- */
- int envc;
- for (envc = 0; _environ[envc]; ++envc) {
- ;
- }
- env = malloc((envc + 2) * sizeof (char*));
- memcpy(env, _environ, envc * sizeof (char*));
- apr_snprintf(pidbuf, sizeof(pidbuf), "AP_PARENT_PID=%i", parent_pid);
- env[envc] = pidbuf;
- env[envc + 1] = NULL;
- }
-
- rv = apr_proc_create(&new_child, cmd, args, env, attr, ptemp);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "Parent: Failed to create the child process.");
- apr_pool_destroy(ptemp);
- CloseHandle(hExitEvent);
- CloseHandle(waitlist[waitlist_ready]);
- CloseHandle(new_child.hproc);
- return -1;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Parent: Created child process %d", new_child.pid);
-
- if (send_handles_to_child(ptemp, waitlist[waitlist_ready], hExitEvent,
- start_mutex, ap_scoreboard_shm,
- new_child.hproc, new_child.in)) {
- /*
- * This error is fatal, mop up the child and move on
- * We toggle the child's exit event to cause this child
- * to quit even as it is attempting to start.
- */
- SetEvent(hExitEvent);
- apr_pool_destroy(ptemp);
- CloseHandle(hExitEvent);
- CloseHandle(waitlist[waitlist_ready]);
- CloseHandle(new_child.hproc);
- return -1;
- }
-
- /* Important:
- * Give the child process a chance to run before dup'ing the sockets.
- * We have already set the listening sockets noninheritable, but if
- * WSADuplicateSocket runs before the child process initializes
- * the listeners will be inherited anyway.
- */
- waitlist[waitlist_term] = new_child.hproc;
- rv = WaitForMultipleObjects(2, waitlist, FALSE, INFINITE);
- CloseHandle(waitlist[waitlist_ready]);
- if (rv != WAIT_OBJECT_0) {
- /*
- * Outch... that isn't a ready signal. It's dead, Jim!
- */
- SetEvent(hExitEvent);
- apr_pool_destroy(ptemp);
- CloseHandle(hExitEvent);
- CloseHandle(new_child.hproc);
- return -1;
- }
-
- if (send_listeners_to_child(ptemp, new_child.pid, new_child.in)) {
- /*
- * This error is fatal, mop up the child and move on
- * We toggle the child's exit event to cause this child
- * to quit even as it is attempting to start.
- */
- SetEvent(hExitEvent);
- apr_pool_destroy(ptemp);
- CloseHandle(hExitEvent);
- CloseHandle(new_child.hproc);
- return -1;
- }
-
- *child_exit_event = hExitEvent;
- *child_proc = new_child.hproc;
- *child_pid = new_child.pid;
-
- return 0;
-}
-
-/***********************************************************************
- * master_main()
- * master_main() runs in the parent process. It creates the child
- * process which handles HTTP requests then waits on one of three
- * events:
- *
- * restart_event
- * -------------
- * The restart event causes master_main to start a new child process and
- * tells the old child process to exit (by setting the child_exit_event).
- * The restart event is set as a result of one of the following:
- * 1. An apache -k restart command on the command line
- * 2. A command received from Windows service manager which gets
- * translated into an ap_signal_parent(SIGNAL_PARENT_RESTART)
- * call by code in service.c.
- * 3. The child process calling ap_signal_parent(SIGNAL_PARENT_RESTART)
- * as a result of hitting MaxRequestsPerChild.
- *
- * shutdown_event
- * --------------
- * The shutdown event causes master_main to tell the child process to
- * exit and that the server is shutting down. The shutdown event is
- * set as a result of one of the following:
- * 1. An apache -k shutdown command on the command line
- * 2. A command received from Windows service manager which gets
- * translated into an ap_signal_parent(SIGNAL_PARENT_SHUTDOWN)
- * call by code in service.c.
- *
- * child process handle
- * --------------------
- * The child process handle will be signaled if the child process
- * exits for any reason. In a normal running server, the signaling
- * of this event means that the child process has exited prematurely
- * due to a seg fault or other irrecoverable error. For server
- * robustness, master_main will restart the child process under this
- * condtion.
- *
- * master_main uses the child_exit_event to signal the child process
- * to exit.
- **********************************************************************/
-#define NUM_WAIT_HANDLES 3
-#define CHILD_HANDLE 0
-#define SHUTDOWN_HANDLE 1
-#define RESTART_HANDLE 2
-static int master_main(server_rec *s, HANDLE shutdown_event, HANDLE restart_event)
-{
- int rv, cld;
- int restart_pending;
- int shutdown_pending;
- HANDLE child_exit_event;
- HANDLE event_handles[NUM_WAIT_HANDLES];
- DWORD child_pid;
-
- restart_pending = shutdown_pending = 0;
-
- event_handles[SHUTDOWN_HANDLE] = shutdown_event;
- event_handles[RESTART_HANDLE] = restart_event;
-
- /* Create a single child process */
- rv = create_process(pconf, &event_handles[CHILD_HANDLE],
- &child_exit_event, &child_pid);
- if (rv < 0)
- {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "master_main: create child process failed. Exiting.");
- shutdown_pending = 1;
- goto die_now;
- }
- if (!strcasecmp(signal_arg, "runservice")) {
- mpm_service_started();
- }
-
- /* Update the scoreboard. Note that there is only a single active
- * child at once.
- */
- ap_scoreboard_image->parent[0].quiescing = 0;
- ap_scoreboard_image->parent[0].pid = child_pid;
-
- /* Wait for shutdown or restart events or for child death */
- winnt_mpm_state = AP_MPMQ_RUNNING;
- rv = WaitForMultipleObjects(NUM_WAIT_HANDLES, (HANDLE *) event_handles, FALSE, INFINITE);
- cld = rv - WAIT_OBJECT_0;
- if (rv == WAIT_FAILED) {
- /* Something serious is wrong */
- ap_log_error(APLOG_MARK,APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "master_main: WaitForMultipeObjects WAIT_FAILED -- doing server shutdown");
- shutdown_pending = 1;
- }
- else if (rv == WAIT_TIMEOUT) {
- /* Hey, this cannot happen */
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
- "master_main: WaitForMultipeObjects with INFINITE wait exited with WAIT_TIMEOUT");
- shutdown_pending = 1;
- }
- else if (cld == SHUTDOWN_HANDLE) {
- /* shutdown_event signalled */
- shutdown_pending = 1;
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, s,
- "Parent: Received shutdown signal -- Shutting down the server.");
- if (ResetEvent(shutdown_event) == 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
- "ResetEvent(shutdown_event)");
- }
- }
- else if (cld == RESTART_HANDLE) {
- /* Received a restart event. Prepare the restart_event to be reused
- * then signal the child process to exit.
- */
- restart_pending = 1;
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
- "Parent: Received restart signal -- Restarting the server.");
- if (ResetEvent(restart_event) == 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
- "Parent: ResetEvent(restart_event) failed.");
- }
- if (SetEvent(child_exit_event) == 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
- "Parent: SetEvent for child process %d failed.",
- event_handles[CHILD_HANDLE]);
- }
- /* Don't wait to verify that the child process really exits,
- * just move on with the restart.
- */
- CloseHandle(event_handles[CHILD_HANDLE]);
- event_handles[CHILD_HANDLE] = NULL;
- }
- else {
- /* The child process exited prematurely due to a fatal error. */
- DWORD exitcode;
- if (!GetExitCodeProcess(event_handles[CHILD_HANDLE], &exitcode)) {
- /* HUH? We did exit, didn't we? */
- exitcode = APEXIT_CHILDFATAL;
- }
- if ( exitcode == APEXIT_CHILDFATAL
- || exitcode == APEXIT_CHILDINIT
- || exitcode == APEXIT_INIT) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, ap_server_conf,
- "Parent: child process exited with status %u -- Aborting.", exitcode);
- shutdown_pending = 1;
- }
- else {
- int i;
- restart_pending = 1;
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Parent: child process exited with status %u -- Restarting.", exitcode);
- for (i = 0; i < ap_threads_per_child; i++) {
- ap_update_child_status_from_indexes(0, i, SERVER_DEAD, NULL);
- }
- }
- CloseHandle(event_handles[CHILD_HANDLE]);
- event_handles[CHILD_HANDLE] = NULL;
- }
- if (restart_pending) {
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
- }
-die_now:
- if (shutdown_pending)
- {
- int timeout = 30000; /* Timeout is milliseconds */
- winnt_mpm_state = AP_MPMQ_STOPPING;
-
- /* This shutdown is only marginally graceful. We will give the
- * child a bit of time to exit gracefully. If the time expires,
- * the child will be wacked.
- */
- if (!strcasecmp(signal_arg, "runservice")) {
- mpm_service_stopping();
- }
- /* Signal the child processes to exit */
- if (SetEvent(child_exit_event) == 0) {
- ap_log_error(APLOG_MARK,APLOG_ERR, apr_get_os_error(), ap_server_conf,
- "Parent: SetEvent for child process %d failed", event_handles[CHILD_HANDLE]);
- }
- if (event_handles[CHILD_HANDLE]) {
- rv = WaitForSingleObject(event_handles[CHILD_HANDLE], timeout);
- if (rv == WAIT_OBJECT_0) {
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Parent: Child process exited successfully.");
- CloseHandle(event_handles[CHILD_HANDLE]);
- event_handles[CHILD_HANDLE] = NULL;
- }
- else {
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Parent: Forcing termination of child process %d ", event_handles[CHILD_HANDLE]);
- TerminateProcess(event_handles[CHILD_HANDLE], 1);
- CloseHandle(event_handles[CHILD_HANDLE]);
- event_handles[CHILD_HANDLE] = NULL;
- }
- }
- return 0; /* Tell the caller we do not want to restart */
- }
- winnt_mpm_state = AP_MPMQ_STARTING;
- return 1; /* Tell the caller we want a restart */
-}
-
-/* service_nt_main_fn needs to append the StartService() args
- * outside of our call stack and thread as the service starts...
- */
-apr_array_header_t *mpm_new_argv;
-
-/* Remember service_to_start failures to log and fail in pre_config.
- * Remember inst_argc and inst_argv for installing or starting the
- * service after we preflight the config.
- */
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = MAXIMUM_WAIT_OBJECTS;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_STATIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_NOT_SUPPORTED;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = HARD_SERVER_LIMIT;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = thread_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = ap_threads_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = winnt_mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-#define SERVICE_UNSET (-1)
-static apr_status_t service_set = SERVICE_UNSET;
-static apr_status_t service_to_start_success;
-static int inst_argc;
-static const char * const *inst_argv;
-static char *service_name = NULL;
-
-void winnt_rewrite_args(process_rec *process)
-{
- /* Handle the following SCM aspects in this phase:
- *
- * -k runservice [transition for WinNT, nothing for Win9x]
- * -k (!)install [error out if name is not installed]
- * -k uninstall
- * -k stop
- * -k shutdown (same as -k stop). Maintained for backward compatability.
- *
- * We can't leave this phase until we know our identity
- * and modify the command arguments appropriately.
- *
- * We do not care if the .conf file exists or is parsable when
- * attempting to stop or uninstall a service.
- */
- apr_status_t rv;
- char *def_server_root;
- char *binpath;
- char optbuf[3];
- const char *optarg;
- int fixed_args;
- char *pid;
- apr_getopt_t *opt;
- int running_as_service = 1;
- int errout = 0;
-
- pconf = process->pconf;
-
- osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetVersionEx(&osver);
-
- /* AP_PARENT_PID is only valid in the child */
- pid = getenv("AP_PARENT_PID");
- if (pid)
- {
- /* This is the child */
- my_pid = GetCurrentProcessId();
- parent_pid = (DWORD) atol(pid);
-
- /* Prevent holding open the (nonexistant) console */
- real_exit_code = 0;
-
- /* The parent is responsible for providing the
- * COMPLETE ARGUMENTS REQUIRED to the child.
- *
- * No further argument parsing is needed, but
- * for good measure we will provide a simple
- * signal string for later testing.
- */
- signal_arg = "runchild";
- return;
- }
-
- /* This is the parent, we have a long way to go :-) */
- parent_pid = my_pid = GetCurrentProcessId();
-
- /* This behavior is voided by setting real_exit_code to 0 */
- atexit(hold_console_open_on_error);
-
- /* Rewrite process->argv[];
- *
- * strip out -k signal into signal_arg
- * strip out -n servicename and set the names
- * add default -d serverroot from the path of this executable
- *
- * The end result will look like:
- *
- * The invocation command (%0)
- * The -d serverroot default from the running executable
- * The requested service's (-n) registry ConfigArgs
- * The WinNT SCM's StartService() args
- */
- if ((rv = ap_os_proc_filepath(&binpath, process->pconf))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_CRIT, rv, NULL,
- "Failed to get the full path of %s", process->argv[0]);
- exit(APEXIT_INIT);
- }
- /* WARNING: There is an implict assumption here that the
- * executable resides in ServerRoot or ServerRoot\bin
- */
- def_server_root = (char *) apr_filepath_name_get(binpath);
- if (def_server_root > binpath) {
- *(def_server_root - 1) = '\0';
- def_server_root = (char *) apr_filepath_name_get(binpath);
- if (!strcasecmp(def_server_root, "bin"))
- *(def_server_root - 1) = '\0';
- }
- apr_filepath_merge(&def_server_root, NULL, binpath,
- APR_FILEPATH_TRUENAME, process->pool);
-
- /* Use process->pool so that the rewritten argv
- * lasts for the lifetime of the server process,
- * because pconf will be destroyed after the
- * initial pre-flight of the config parser.
- */
- mpm_new_argv = apr_array_make(process->pool, process->argc + 2,
- sizeof(const char *));
- *(const char **)apr_array_push(mpm_new_argv) = process->argv[0];
- *(const char **)apr_array_push(mpm_new_argv) = "-d";
- *(const char **)apr_array_push(mpm_new_argv) = def_server_root;
-
- fixed_args = mpm_new_argv->nelts;
-
- optbuf[0] = '-';
- optbuf[2] = '\0';
- apr_getopt_init(&opt, process->pool, process->argc, (char**) process->argv);
- opt->errfn = NULL;
- while ((rv = apr_getopt(opt, "wn:k:" AP_SERVER_BASEARGS,
- optbuf + 1, &optarg)) == APR_SUCCESS) {
- switch (optbuf[1]) {
-
- /* Shortcuts; include the -w option to hold the window open on error.
- * This must not be toggled once we reset real_exit_code to 0!
- */
- case 'w':
- if (real_exit_code)
- real_exit_code = 2;
- break;
-
- case 'n':
- service_set = mpm_service_set_name(process->pool, &service_name,
- optarg);
- break;
-
- case 'k':
- signal_arg = optarg;
- break;
-
- case 'E':
- errout = 1;
- /* Fall through so the Apache main() handles the 'E' arg */
- default:
- *(const char **)apr_array_push(mpm_new_argv) =
- apr_pstrdup(process->pool, optbuf);
-
- if (optarg) {
- *(const char **)apr_array_push(mpm_new_argv) = optarg;
- }
- break;
- }
- }
-
- /* back up to capture the bad argument */
- if (rv == APR_BADCH || rv == APR_BADARG) {
- opt->ind--;
- }
-
- while (opt->ind < opt->argc) {
- *(const char **)apr_array_push(mpm_new_argv) =
- apr_pstrdup(process->pool, opt->argv[opt->ind++]);
- }
-
- /* Track the number of args actually entered by the user */
- inst_argc = mpm_new_argv->nelts - fixed_args;
-
- /* Provide a default 'run' -k arg to simplify signal_arg tests */
- if (!signal_arg)
- {
- signal_arg = "run";
- running_as_service = 0;
- }
-
- if (!strcasecmp(signal_arg, "runservice"))
- {
- /* Start the NT Service _NOW_ because the WinNT SCM is
- * expecting us to rapidly assume control of our own
- * process, the SCM will tell us our service name, and
- * may have extra StartService() command arguments to
- * add for us.
- *
- * The SCM will generally invoke the executable with
- * the c:\win\system32 default directory. This is very
- * lethal if folks use ServerRoot /foopath on windows
- * without a drive letter. Change to the default root
- * (path to apache root, above /bin) for safety.
- */
- apr_filepath_set(def_server_root, process->pool);
-
- /* Any other process has a console, so we don't to begin
- * a Win9x service until the configuration is parsed and
- * any command line errors are reported.
- *
- * We hold the return value so that we can die in pre_config
- * after logging begins, and the failure can land in the log.
- */
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- if (!errout) {
- mpm_nt_eventlog_stderr_open(service_name, process->pool);
- }
- service_to_start_success = mpm_service_to_start(&service_name,
- process->pool);
- if (service_to_start_success == APR_SUCCESS) {
- service_set = APR_SUCCESS;
- }
- }
- }
-
- /* Get the default for any -k option, except run */
- if (service_set == SERVICE_UNSET && strcasecmp(signal_arg, "run")) {
- service_set = mpm_service_set_name(process->pool, &service_name,
- AP_DEFAULT_SERVICE_NAME);
- }
-
- if (!strcasecmp(signal_arg, "install")) /* -k install */
- {
- if (service_set == APR_SUCCESS)
- {
- ap_log_error(APLOG_MARK,APLOG_ERR, 0, NULL,
- "%s: Service is already installed.", service_name);
- exit(APEXIT_INIT);
- }
- }
- else if (running_as_service)
- {
- if (service_set == APR_SUCCESS)
- {
- /* Attempt to Uninstall, or stop, before
- * we can read the arguments or .conf files
- */
- if (!strcasecmp(signal_arg, "uninstall")) {
- rv = mpm_service_uninstall();
- exit(rv);
- }
-
- if ((!strcasecmp(signal_arg, "stop")) ||
- (!strcasecmp(signal_arg, "shutdown"))) {
- mpm_signal_service(process->pool, 0);
- exit(0);
- }
-
- rv = mpm_merge_service_args(process->pool, mpm_new_argv,
- fixed_args);
- if (rv == APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_INFO, 0, NULL,
- "Using ConfigArgs of the installed service "
- "\"%s\".", service_name);
- }
- else {
- ap_log_error(APLOG_MARK,APLOG_WARNING, rv, NULL,
- "No installed ConfigArgs for the service "
- "\"%s\", using Apache defaults.", service_name);
- }
- }
- else
- {
- ap_log_error(APLOG_MARK,APLOG_ERR, service_set, NULL,
- "No installed service named \"%s\".", service_name);
- exit(APEXIT_INIT);
- }
- }
- if (strcasecmp(signal_arg, "install") && service_set && service_set != SERVICE_UNSET)
- {
- ap_log_error(APLOG_MARK,APLOG_ERR, service_set, NULL,
- "No installed service named \"%s\".", service_name);
- exit(APEXIT_INIT);
- }
-
- /* Track the args actually entered by the user.
- * These will be used for the -k install parameters, as well as
- * for the -k start service override arguments.
- */
- inst_argv = (const char * const *)mpm_new_argv->elts
- + mpm_new_argv->nelts - inst_argc;
-
- process->argc = mpm_new_argv->nelts;
- process->argv = (const char * const *) mpm_new_argv->elts;
-}
-
-
-static int winnt_pre_config(apr_pool_t *pconf_, apr_pool_t *plog, apr_pool_t *ptemp)
-{
- /* Handle the following SCM aspects in this phase:
- *
- * -k runservice [WinNT errors logged from rewrite_args]
- */
-
- /* Initialize shared static objects.
- * TODO: Put config related statics into an sconf structure.
- */
- pconf = pconf_;
-
- if (ap_exists_config_define("ONE_PROCESS") ||
- ap_exists_config_define("DEBUG"))
- one_process = -1;
-
- if (!strcasecmp(signal_arg, "runservice")
- && (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- && (service_to_start_success != APR_SUCCESS)) {
- ap_log_error(APLOG_MARK,APLOG_CRIT, service_to_start_success, NULL,
- "%s: Unable to start the service manager.",
- service_name);
- exit(APEXIT_INIT);
- }
-
- /* Win9x: disable AcceptEx */
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
- use_acceptex = 0;
- }
-
- ap_listen_pre_config();
- ap_threads_per_child = DEFAULT_THREADS_PER_CHILD;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
- /* use_acceptex which is enabled by default is not available on Win9x.
- */
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
- use_acceptex = 0;
- }
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- return OK;
-}
-
-static int winnt_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec* s)
-{
- static int restart_num = 0;
- apr_status_t rv = 0;
-
- /* Handle the following SCM aspects in this phase:
- *
- * -k install
- * -k config
- * -k start
- * -k restart
- * -k runservice [Win95, only once - after we parsed the config]
- *
- * because all of these signals are useful _only_ if there
- * is a valid conf\httpd.conf environment to start.
- *
- * We reached this phase by avoiding errors that would cause
- * these options to fail unexpectedly in another process.
- */
-
- if (!strcasecmp(signal_arg, "install")) {
- rv = mpm_service_install(ptemp, inst_argc, inst_argv, 0);
- exit (rv);
- }
- if (!strcasecmp(signal_arg, "config")) {
- rv = mpm_service_install(ptemp, inst_argc, inst_argv, 1);
- exit (rv);
- }
-
- if (!strcasecmp(signal_arg, "start")) {
- ap_listen_rec *lr;
-
- /* Close the listening sockets. */
- for (lr = ap_listeners; lr; lr = lr->next) {
- apr_socket_close(lr->sd);
- lr->active = 0;
- }
- rv = mpm_service_start(ptemp, inst_argc, inst_argv);
- exit (rv);
- }
-
- if (!strcasecmp(signal_arg, "restart")) {
- mpm_signal_service(ptemp, 1);
- exit (rv);
- }
-
- if (parent_pid == my_pid)
- {
- if (restart_num++ == 1)
- {
- /* This code should be run once in the parent and not run
- * across a restart
- */
- PSECURITY_ATTRIBUTES sa = GetNullACL(); /* returns NULL if invalid (Win95?) */
- setup_signal_names(apr_psprintf(pconf,"ap%d", parent_pid));
-
- ap_log_pid(pconf, ap_pid_fname);
-
- /* Create shutdown event, apPID_shutdown, where PID is the parent
- * Apache process ID. Shutdown is signaled by 'apache -k shutdown'.
- */
- shutdown_event = CreateEvent(sa, FALSE, FALSE, signal_shutdown_name);
- if (!shutdown_event) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Cannot create shutdown event %s", signal_shutdown_name);
- CleanNullACL((void *)sa);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* Create restart event, apPID_restart, where PID is the parent
- * Apache process ID. Restart is signaled by 'apache -k restart'.
- */
- restart_event = CreateEvent(sa, FALSE, FALSE, signal_restart_name);
- if (!restart_event) {
- CloseHandle(shutdown_event);
- ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
- "Parent: Cannot create restart event %s", signal_restart_name);
- CleanNullACL((void *)sa);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- CleanNullACL((void *)sa);
-
- /* Now that we are flying at 15000 feet...
- * wipe out the Win95 service console,
- * signal the SCM the WinNT service started, or
- * if not a service, setup console handlers instead.
- */
- if (!strcasecmp(signal_arg, "runservice"))
- {
- if (osver.dwPlatformId != VER_PLATFORM_WIN32_NT)
- {
- rv = mpm_service_to_start(&service_name,
- s->process->pool);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
- "%s: Unable to start the service manager.",
- service_name);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- }
- else /* ! -k runservice */
- {
- mpm_start_console_handler();
- }
-
- /* Create the start mutex, as an unnamed object for security.
- * Ths start mutex is used during a restart to prevent more than
- * one child process from entering the accept loop at once.
- */
- rv = apr_proc_mutex_create(&start_mutex, NULL,
- APR_LOCK_DEFAULT,
- ap_server_conf->process->pool);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
- "%s: Unable to create the start_mutex.",
- service_name);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- }
- else /* parent_pid != my_pid */
- {
- mpm_start_child_console_handler();
- }
- return OK;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int winnt_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- /* Initialize shared static objects.
- */
- ap_server_conf = s;
-
- if (parent_pid != my_pid) {
- return OK;
- }
-
- /* We cannot initialize our listeners if we are restarting
- * (the parent process already has glomed on to them)
- * nor should we do so for service reconfiguration
- * (since the service may already be running.)
- */
- if (!strcasecmp(signal_arg, "restart")
- || !strcasecmp(signal_arg, "config")) {
- return OK;
- }
-
- if (ap_setup_listeners(s) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
- NULL, "no listening sockets available, shutting down");
- return DONE;
- }
-
- return OK;
-}
-
-static void winnt_child_init(apr_pool_t *pchild, struct server_rec *s)
-{
- apr_status_t rv;
-
- setup_signal_names(apr_psprintf(pchild,"ap%d", parent_pid));
-
- /* This is a child process, not in single process mode */
- if (!one_process) {
- /* Set up events and the scoreboard */
- get_handles_from_parent(s, &exit_event, &start_mutex,
- &ap_scoreboard_shm);
-
- /* Set up the listeners */
- get_listeners_from_parent(s);
-
- ap_my_generation = ap_scoreboard_image->global->running_generation;
- }
- else {
- /* Single process mode - this lock doesn't even need to exist */
- rv = apr_proc_mutex_create(&start_mutex, signal_name_prefix,
- APR_LOCK_DEFAULT, s->process->pool);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
- "%s child %d: Unable to init the start_mutex.",
- service_name, my_pid);
- exit(APEXIT_CHILDINIT);
- }
-
- /* Borrow the shutdown_even as our _child_ loop exit event */
- exit_event = shutdown_event;
- }
-}
-
-
-AP_DECLARE(int) ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s )
-{
- static int restart = 0; /* Default is "not a restart" */
-
- if (!restart) {
- first_thread_limit = thread_limit;
- }
-
- if (changed_limit_at_restart) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, APR_SUCCESS, ap_server_conf,
- "WARNING: Attempt to change ThreadLimit ignored "
- "during restart");
- changed_limit_at_restart = 0;
- }
-
- /* ### If non-graceful restarts are ever introduced - we need to rerun
- * the pre_mpm hook on subsequent non-graceful restarts. But Win32
- * has only graceful style restarts - and we need this hook to act
- * the same on Win32 as on Unix.
- */
- if (!restart && ((parent_pid == my_pid) || one_process)) {
- /* Set up the scoreboard. */
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- return 1;
- }
- }
-
- if ((parent_pid != my_pid) || one_process)
- {
- /* The child process or in one_process (debug) mode
- */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Child process is running", my_pid);
-
- child_main(pconf);
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Child process is exiting", my_pid);
- return 1;
- }
- else
- {
- /* A real-honest to goodness parent */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-
- restart = master_main(ap_server_conf, shutdown_event, restart_event);
-
- if (!restart)
- {
- /* Shutting down. Clean up... */
- const char *pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-
- if (pidfile != NULL && unlink(pidfile) == 0) {
- ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS,
- ap_server_conf, "removed PID file %s (pid=%ld)",
- pidfile, GetCurrentProcessId());
- }
- apr_proc_mutex_destroy(start_mutex);
-
- CloseHandle(restart_event);
- CloseHandle(shutdown_event);
-
- return 1;
- }
- }
-
- return 0; /* Restart */
-}
-
-static void winnt_hooks(apr_pool_t *p)
-{
- /* The prefork open_logs phase must run before the core's, or stderr
- * will be redirected to a file, and the messages won't print to the
- * console.
- */
- static const char *const aszSucc[] = {"core.c", NULL};
-
- ap_hook_pre_config(winnt_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_post_config(winnt_post_config, NULL, NULL, 0);
- ap_hook_child_init(winnt_child_init, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_open_logs(winnt_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
-}
-
-AP_MODULE_DECLARE_DATA module mpm_winnt_module = {
- MPM20_MODULE_STUFF,
- winnt_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- winnt_cmds, /* command apr_table_t */
- winnt_hooks /* register_hooks */
-};
-
-#endif /* def WIN32 */
diff --git a/server/mpm/winnt/mpm_winnt.h b/server/mpm/winnt/mpm_winnt.h
deleted file mode 100644
index cfe7635d85..0000000000
--- a/server/mpm/winnt/mpm_winnt.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_WINNT_H
-#define APACHE_MPM_WINNT_H
-
-#include "ap_listen.h"
-
-/* From service.c: */
-
-#define SERVICE_APACHE_RESTART 128
-
-#ifndef AP_DEFAULT_SERVICE_NAME
-#define AP_DEFAULT_SERVICE_NAME "Apache2"
-#endif
-
-#define SERVICECONFIG9X "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices"
-#define SERVICECONFIG "System\\CurrentControlSet\\Services\\%s"
-#define SERVICEPARAMS "System\\CurrentControlSet\\Services\\%s\\Parameters"
-
-apr_status_t mpm_service_set_name(apr_pool_t *p, const char **display_name,
- const char *set_name);
-apr_status_t mpm_merge_service_args(apr_pool_t *p, apr_array_header_t *args,
- int fixed_args);
-
-apr_status_t mpm_service_to_start(const char **display_name, apr_pool_t *p);
-apr_status_t mpm_service_started(void);
-apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
- char const* const* argv, int reconfig);
-apr_status_t mpm_service_uninstall(void);
-
-apr_status_t mpm_service_start(apr_pool_t *ptemp, int argc,
- char const* const* argv);
-
-void mpm_signal_service(apr_pool_t *ptemp, int signal);
-
-void mpm_service_stopping(void);
-
-void mpm_start_console_handler(void);
-void mpm_start_child_console_handler(void);
-
-/* From nt_eventlog.c: */
-
-void mpm_nt_eventlog_stderr_open(char *display_name, apr_pool_t *p);
-void mpm_nt_eventlog_stderr_flush(void);
-
-/* From winnt.c: */
-
-extern int use_acceptex;
-extern int winnt_mpm_state;
-extern OSVERSIONINFO osver;
-extern void clean_child_exit(int);
-
-void setup_signal_names(char *prefix);
-
-typedef enum {
- SIGNAL_PARENT_SHUTDOWN,
- SIGNAL_PARENT_RESTART,
- SIGNAL_PARENT_RESTART_GRACEFUL
-} ap_signal_parent_e;
-AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type);
-
-/*
- * The Windoes MPM uses a queue of completion contexts that it passes
- * between the accept threads and the worker threads. Declare the
- * functions to access the queue and the structures passed on the
- * queue in the header file to enable modules to access them
- * if necessary. The queue resides in the MPM.
- */
-#ifdef CONTAINING_RECORD
-#undef CONTAINING_RECORD
-#endif
-#define CONTAINING_RECORD(address, type, field) ((type *)( \
- (PCHAR)(address) - \
- (PCHAR)(&((type *)0)->field)))
-#if APR_HAVE_IPV6
-#define PADDED_ADDR_SIZE sizeof(SOCKADDR_IN6)+16
-#else
-#define PADDED_ADDR_SIZE sizeof(SOCKADDR_IN)+16
-#endif
-
-typedef struct CompContext {
- struct CompContext *next;
- OVERLAPPED Overlapped;
- apr_socket_t *sock;
- SOCKET accept_socket;
- char buff[2*PADDED_ADDR_SIZE];
- struct sockaddr *sa_server;
- int sa_server_len;
- struct sockaddr *sa_client;
- int sa_client_len;
- apr_pool_t *ptrans;
- apr_bucket_alloc_t *ba;
- short socket_family;
-} COMP_CONTEXT, *PCOMP_CONTEXT;
-
-typedef enum {
- IOCP_CONNECTION_ACCEPTED = 1,
- IOCP_WAIT_FOR_RECEIVE = 2,
- IOCP_WAIT_FOR_TRANSMITFILE = 3,
- IOCP_SHUTDOWN = 4
-} io_state_e;
-
-AP_DECLARE(PCOMP_CONTEXT) mpm_get_completion_context(void);
-AP_DECLARE(void) mpm_recycle_completion_context(PCOMP_CONTEXT pCompContext);
-AP_DECLARE(apr_status_t) mpm_post_completion_context(PCOMP_CONTEXT pCompContext, io_state_e state);
-void hold_console_open_on_error(void);
-#endif /* APACHE_MPM_WINNT_H */
diff --git a/server/mpm/winnt/nt_eventlog.c b/server/mpm/winnt/nt_eventlog.c
deleted file mode 100644
index 79abcaea4b..0000000000
--- a/server/mpm/winnt/nt_eventlog.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-
-#include "httpd.h"
-#include "http_log.h"
-#include "mpm_winnt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "ap_regkey.h"
-
-static char *display_name = NULL;
-static HANDLE stderr_thread = NULL;
-static HANDLE stderr_ready;
-
-static DWORD WINAPI service_stderr_thread(LPVOID hPipe)
-{
- HANDLE hPipeRead = (HANDLE) hPipe;
- HANDLE hEventSource;
- char errbuf[256];
- char *errmsg = errbuf;
- const char *errarg[9];
- DWORD errres;
- ap_regkey_t *regkey;
- apr_status_t rv;
- apr_pool_t *p;
-
- apr_pool_create_ex(&p, NULL, NULL, NULL);
-
- errarg[0] = "The Apache service named";
- errarg[1] = display_name;
- errarg[2] = "reported the following error:\r\n>>>";
- errarg[3] = errbuf;
- errarg[4] = NULL;
- errarg[5] = NULL;
- errarg[6] = NULL;
- errarg[7] = NULL;
- errarg[8] = NULL;
-
- /* What are we going to do in here, bail on the user? not. */
- if ((rv = ap_regkey_open(&regkey, AP_REGKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Services\\"
- "EventLog\\Application\\Apache Service",
- APR_READ | APR_WRITE | APR_CREATE, p))
- == APR_SUCCESS)
- {
- DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
- EVENTLOG_INFORMATION_TYPE;
-
- /* The stock message file */
- ap_regkey_value_set(regkey, "EventMessageFile",
- "%SystemRoot%\\System32\\netmsg.dll",
- AP_REGKEY_EXPAND, p);
-
- ap_regkey_value_raw_set(regkey, "TypesSupported", &dwData,
- sizeof(dwData), REG_DWORD, p);
- ap_regkey_close(regkey);
- }
-
- hEventSource = RegisterEventSourceW(NULL, L"Apache Service");
-
- SetEvent(stderr_ready);
-
- while (ReadFile(hPipeRead, errmsg, 1, &errres, NULL) && (errres == 1))
- {
- if ((errmsg > errbuf) || !apr_isspace(*errmsg))
- {
- ++errmsg;
- if ((*(errmsg - 1) == '\n')
- || (errmsg >= errbuf + sizeof(errbuf) - 1))
- {
- while ((errmsg > errbuf) && apr_isspace(*(errmsg - 1))) {
- --errmsg;
- }
- *errmsg = '\0';
-
- /* Generic message: '%1 %2 %3 %4 %5 %6 %7 %8 %9'
- * The event code in netmsg.dll is 3299
- */
- ReportEvent(hEventSource, EVENTLOG_ERROR_TYPE, 0,
- 3299, NULL, 9, 0, errarg, NULL);
- errmsg = errbuf;
- }
- }
- }
-
- if ((errres = GetLastError()) != ERROR_BROKEN_PIPE) {
- apr_snprintf(errbuf, sizeof(errbuf),
- "Win32 error %d reading stderr pipe stream\r\n",
- GetLastError());
-
- ReportEvent(hEventSource, EVENTLOG_ERROR_TYPE, 0,
- 3299, NULL, 9, 0, errarg, NULL);
- }
-
- CloseHandle(hPipeRead);
- DeregisterEventSource(hEventSource);
- CloseHandle(stderr_thread);
- stderr_thread = NULL;
- apr_pool_destroy(p);
- return 0;
-}
-
-
-void mpm_nt_eventlog_stderr_flush(void)
-{
- HANDLE cleanup_thread = stderr_thread;
-
- if (cleanup_thread) {
- HANDLE hErr = GetStdHandle(STD_ERROR_HANDLE);
- fclose(stderr);
- CloseHandle(hErr);
- WaitForSingleObject(cleanup_thread, 30000);
- CloseHandle(cleanup_thread);
- }
-}
-
-
-void mpm_nt_eventlog_stderr_open(char *argv0, apr_pool_t *p)
-{
- SECURITY_ATTRIBUTES sa;
- HANDLE hProc = GetCurrentProcess();
- HANDLE hPipeRead = NULL;
- HANDLE hPipeWrite = NULL;
- HANDLE hDup = NULL;
- DWORD threadid;
- int fd;
-
- display_name = argv0;
-
- /* Create a pipe to send stderr messages to the system error log.
- *
- * _dup2() duplicates the write handle inheritable for us.
- */
- sa.nLength = sizeof(sa);
- sa.lpSecurityDescriptor = NULL;
- sa.bInheritHandle = FALSE;
- CreatePipe(&hPipeRead, &hPipeWrite, NULL, 0);
- ap_assert(hPipeRead && hPipeWrite);
-
- stderr_ready = CreateEvent(NULL, FALSE, FALSE, NULL);
- stderr_thread = CreateThread(NULL, 0, service_stderr_thread,
- (LPVOID) hPipeRead, 0, &threadid);
- ap_assert(stderr_ready && stderr_thread);
-
- WaitForSingleObject(stderr_ready, INFINITE);
-
- /* Flush stderr and unset its buffer, then commit and replace stderr.
- * This is typically a noop for Win2K/XP since services with NULL std
- * handles [but valid FILE *'s, oddly enough], but is required
- * for NT 4.0 and to use this code outside of services.
- */
- fflush(stderr);
- setvbuf(stderr, NULL, _IONBF, 0);
- _commit(2 /* stderr */);
- fd = _open_osfhandle((long) hPipeWrite,
- _O_WRONLY | _O_BINARY);
- _dup2(fd, 2);
- _close(fd);
- _setmode(2, _O_BINARY);
-
- /* hPipeWrite was _close()'ed above, and _dup2()'ed
- * to fd 2 creating a new, inherited Win32 handle.
- * Recover that real handle from fd 2.
- */
- hPipeWrite = (HANDLE)_get_osfhandle(2);
-
- SetStdHandle(STD_ERROR_HANDLE, hPipeWrite);
-
- /* The code above _will_ corrupt the StdHandle...
- * and we must do so anyways. We set this up only
- * after we initialized the posix stderr API.
- */
- ap_open_stderr_log(p);
-}
diff --git a/server/mpm/winnt/service.c b/server/mpm/winnt/service.c
deleted file mode 100644
index dc81c2a55a..0000000000
--- a/server/mpm/winnt/service.c
+++ /dev/null
@@ -1,1345 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This module ALONE requires the window message API from user.h
- * and the default APR include of windows.h will omit it, so
- * preload the API symbols now...
- */
-
-#define CORE_PRIVATE
-#define _WINUSER_
-
-#include "httpd.h"
-#include "http_log.h"
-#include "mpm_winnt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "ap_regkey.h"
-
-#ifdef NOUSER
-#undef NOUSER
-#endif
-#undef _WINUSER_
-#include <winuser.h>
-
-static char *mpm_service_name = NULL;
-static char *mpm_display_name = NULL;
-
-static struct
-{
- HANDLE mpm_thread; /* primary thread handle of the apache server */
- HANDLE service_thread; /* thread service/monitor handle */
- DWORD service_thread_id;/* thread service/monitor ID */
- HANDLE service_init; /* controller thread init mutex */
- HANDLE service_term; /* NT service thread kill signal */
- SERVICE_STATUS ssStatus;
- SERVICE_STATUS_HANDLE hServiceStatus;
-} globdat;
-
-static int ReportStatusToSCMgr(int currentState, int exitCode, int waitHint);
-
-
-#define PRODREGKEY "SOFTWARE\\" AP_SERVER_BASEVENDOR "\\" \
- AP_SERVER_BASEPRODUCT "\\" AP_SERVER_BASEREVISION
-
-/*
- * Get the server root from the registry into 'dir' which is
- * size bytes long. Returns 0 if the server root was found
- * or if the serverroot key does not exist (in which case
- * dir will contain an empty string), or -1 if there was
- * an error getting the key.
- */
-apr_status_t ap_registry_get_server_root(apr_pool_t *p, char **buf)
-{
- apr_status_t rv;
- ap_regkey_t *key;
-
- if ((rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, PRODREGKEY,
- APR_READ, p)) == APR_SUCCESS) {
- rv = ap_regkey_value_get(buf, key, "ServerRoot", p);
- ap_regkey_close(key);
- if (rv == APR_SUCCESS)
- return rv;
- }
-
- if ((rv = ap_regkey_open(&key, AP_REGKEY_CURRENT_USER, PRODREGKEY,
- APR_READ, p)) == APR_SUCCESS) {
- rv = ap_regkey_value_get(buf, key, "ServerRoot", p);
- ap_regkey_close(key);
- if (rv == APR_SUCCESS)
- return rv;
- }
-
- *buf = NULL;
- return rv;
-}
-
-
-/* The service configuration's is stored under the following trees:
- *
- * HKLM\System\CurrentControlSet\Services\[service name]
- *
- * \DisplayName
- * \ImagePath
- * \Parameters\ConfigArgs
- *
- * For Win9x, the launch service command is stored under:
- *
- * HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices\[service name]
- */
-
-
-/* exit() for Win32 is macro mapped (horrible, we agree) that allows us
- * to catch the non-zero conditions and inform the console process that
- * the application died, and hang on to the console a bit longer.
- *
- * The macro only maps for http_main.c and other sources that include
- * the service.h header, so we best assume it's an error to exit from
- * _any_ other module.
- *
- * If real_exit_code is reset to 0, it will not be set or trigger this
- * behavior on exit. All service and child processes are expected to
- * reset this flag to zero to avoid undesireable side effects.
- */
-AP_DECLARE_DATA int real_exit_code = 1;
-
-void hold_console_open_on_error(void)
-{
- HANDLE hConIn;
- HANDLE hConErr;
- DWORD result;
- time_t start;
- time_t remains;
- char *msg = "Note the errors or messages above, "
- "and press the <ESC> key to exit. ";
- CONSOLE_SCREEN_BUFFER_INFO coninfo;
- INPUT_RECORD in;
- char count[16];
-
- if (!real_exit_code)
- return;
- hConIn = GetStdHandle(STD_INPUT_HANDLE);
- hConErr = GetStdHandle(STD_ERROR_HANDLE);
- if ((hConIn == INVALID_HANDLE_VALUE) || (hConErr == INVALID_HANDLE_VALUE))
- return;
- if (!WriteConsole(hConErr, msg, strlen(msg), &result, NULL) || !result)
- return;
- if (!GetConsoleScreenBufferInfo(hConErr, &coninfo))
- return;
- if (!SetConsoleMode(hConIn, ENABLE_MOUSE_INPUT | 0x80))
- return;
-
- start = time(NULL);
- do
- {
- while (PeekConsoleInput(hConIn, &in, 1, &result) && result)
- {
- if (!ReadConsoleInput(hConIn, &in, 1, &result) || !result)
- return;
- if ((in.EventType == KEY_EVENT) && in.Event.KeyEvent.bKeyDown
- && (in.Event.KeyEvent.uChar.AsciiChar == 27))
- return;
- if (in.EventType == MOUSE_EVENT
- && (in.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK))
- return;
- }
- remains = ((start + 30) - time(NULL));
- sprintf (count, "%d...", remains);
- if (!SetConsoleCursorPosition(hConErr, coninfo.dwCursorPosition))
- return;
- if (!WriteConsole(hConErr, count, strlen(count), &result, NULL)
- || !result)
- return;
- }
- while ((remains > 0) && WaitForSingleObject(hConIn, 1000) != WAIT_FAILED);
-}
-
-static BOOL die_on_logoff = FALSE;
-
-static LRESULT CALLBACK monitor_service_9x_proc(HWND hWnd, UINT msg,
- WPARAM wParam, LPARAM lParam)
-{
-/* This is the WndProc procedure for our invisible window.
- * When the user shuts down the system, this window is sent
- * a signal WM_ENDSESSION. We clean up by signaling Apache
- * to shut down, and idle until Apache's primary thread quits.
- */
- if ((msg == WM_ENDSESSION)
- && (die_on_logoff || (lParam != ENDSESSION_LOGOFF)))
- {
- ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
- if (wParam)
- /* Don't leave this message until we are dead! */
- WaitForSingleObject(globdat.mpm_thread, 30000);
- return 0;
- }
- return (DefWindowProc(hWnd, msg, wParam, lParam));
-}
-
-static DWORD WINAPI monitor_service_9x_thread(void *service_name)
-{
- /* When running as a service under Windows 9x, there is no console
- * window present, and no ConsoleCtrlHandler to call when the system
- * is shutdown. If the WatchWindow thread is created with a NULL
- * service_name argument, then the ...SystemMonitor window class is
- * used to create the "Apache" window to watch for logoff and shutdown.
- * If the service_name is provided, the ...ServiceMonitor window class
- * is used to create the window named by the service_name argument,
- * and the logoff message is ignored.
- */
- WNDCLASS wc;
- HWND hwndMain;
- MSG msg;
-
- wc.style = CS_GLOBALCLASS;
- wc.lpfnWndProc = monitor_service_9x_proc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = NULL;
- wc.hIcon = NULL;
- wc.hCursor = NULL;
- wc.hbrBackground = NULL;
- wc.lpszMenuName = NULL;
- if (service_name)
- wc.lpszClassName = "ApacheWin95ServiceMonitor";
- else
- wc.lpszClassName = "ApacheWin95SystemMonitor";
-
- die_on_logoff = service_name ? FALSE : TRUE;
-
- if (!RegisterClass(&wc))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(),
- NULL, "Could not register window class for WatchWindow");
- globdat.service_thread_id = 0;
- return 0;
- }
-
- /* Create an invisible window */
- hwndMain = CreateWindow(wc.lpszClassName,
- service_name ? (char *) service_name : "Apache",
- WS_OVERLAPPEDWINDOW & ~WS_VISIBLE,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, NULL, NULL, NULL, NULL);
-
- if (!hwndMain)
- {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(),
- NULL, "Could not create WatchWindow");
- globdat.service_thread_id = 0;
- return 0;
- }
-
- /* If we succeed, eliminate the console window.
- * Signal the parent we are all set up, and
- * watch the message queue while the window lives.
- */
- FreeConsole();
- SetEvent(globdat.service_init);
-
- while (GetMessage(&msg, NULL, 0, 0))
- {
- if (msg.message == WM_CLOSE)
- DestroyWindow(hwndMain);
- else {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- globdat.service_thread_id = 0;
- return 0;
-}
-
-
-static BOOL CALLBACK console_control_handler(DWORD ctrl_type)
-{
- switch (ctrl_type)
- {
- case CTRL_BREAK_EVENT:
- fprintf(stderr, "Apache server restarting...\n");
- ap_signal_parent(SIGNAL_PARENT_RESTART);
- return TRUE;
- case CTRL_C_EVENT:
- fprintf(stderr, "Apache server interrupted...\n");
- /* for Interrupt signals, shut down the server.
- * Tell the system we have dealt with the signal
- * without waiting for Apache to terminate.
- */
- ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
- return TRUE;
-
- case CTRL_CLOSE_EVENT:
- case CTRL_LOGOFF_EVENT:
- case CTRL_SHUTDOWN_EVENT:
- /* for Terminate signals, shut down the server.
- * Wait for Apache to terminate, but respond
- * after a reasonable time to tell the system
- * that we did attempt to shut ourself down.
- * THESE EVENTS WILL NOT OCCUR UNDER WIN9x!
- */
- fprintf(stderr, "Apache server shutdown initiated...\n");
- ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
- Sleep(30000);
- return TRUE;
- }
-
- /* We should never get here, but this is (mostly) harmless */
- return FALSE;
-}
-
-
-static void stop_console_handler(void)
-{
- SetConsoleCtrlHandler(console_control_handler, FALSE);
-}
-
-
-void mpm_start_console_handler(void)
-{
- SetConsoleCtrlHandler(console_control_handler, TRUE);
- atexit(stop_console_handler);
-}
-
-
-/* Special situation - children of services need to mind their
- * P's & Q's and wait quietly, ignoring the mean OS signaling
- * shutdown and other horrors, to kill them gracefully...
- */
-
-static BOOL CALLBACK child_control_handler(DWORD ctrl_type)
-{
- switch (ctrl_type)
- {
- case CTRL_C_EVENT:
- case CTRL_BREAK_EVENT:
- /* for Interrupt signals, ignore them.
- * The system will also signal the parent process,
- * which will terminate Apache.
- */
- return TRUE;
-
- case CTRL_CLOSE_EVENT:
- case CTRL_LOGOFF_EVENT:
- case CTRL_SHUTDOWN_EVENT:
- /* for Shutdown signals, ignore them, but... .
- * The system will also signal the parent process,
- * which will terminate Apache, so we need to wait.
- */
- Sleep(30000);
- return TRUE;
- }
-
- /* We should never get here, but this is (mostly) harmless */
- return FALSE;
-}
-
-
-static void stop_child_console_handler(void)
-{
- SetConsoleCtrlHandler(child_control_handler, FALSE);
-}
-
-
-void mpm_start_child_console_handler(void)
-{
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
- FreeConsole();
- }
- else
- {
- SetConsoleCtrlHandler(child_control_handler, TRUE);
- atexit(stop_child_console_handler);
- }
-}
-
-
-/**********************************
- WinNT service control management
- **********************************/
-
-static int ReportStatusToSCMgr(int currentState, int exitCode, int waitHint)
-{
- static int checkPoint = 1;
- int rv = APR_SUCCESS;
-
- if (globdat.hServiceStatus)
- {
- if (currentState == SERVICE_RUNNING) {
- globdat.ssStatus.dwWaitHint = 0;
- globdat.ssStatus.dwCheckPoint = 0;
- globdat.ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
- }
- else if (currentState == SERVICE_STOPPED) {
- globdat.ssStatus.dwWaitHint = 0;
- globdat.ssStatus.dwCheckPoint = 0;
- if (!exitCode && globdat.ssStatus.dwCurrentState
- != SERVICE_STOP_PENDING) {
- /* An unexpected exit? Better to error! */
- exitCode = 1;
- }
- if (exitCode) {
- globdat.ssStatus.dwWin32ExitCode =ERROR_SERVICE_SPECIFIC_ERROR;
- globdat.ssStatus.dwServiceSpecificExitCode = exitCode;
- }
- }
- else {
- globdat.ssStatus.dwCheckPoint = ++checkPoint;
- globdat.ssStatus.dwControlsAccepted = 0;
- if(waitHint)
- globdat.ssStatus.dwWaitHint = waitHint;
- }
-
- globdat.ssStatus.dwCurrentState = currentState;
-
- rv = SetServiceStatus(globdat.hServiceStatus, &globdat.ssStatus);
- }
- return(rv);
-}
-
-/* Set the service description regardless of platform.
- * We revert to set_service_description on NT/9x, the
- * very long way so any Apache management program can grab the
- * description. This would be bad on Win2000, since it wouldn't
- * notify the service control manager of the name change.
- */
-
-/* borrowed from mpm_winnt.c */
-extern apr_pool_t *pconf;
-
-/* Windows 2000 alone supports ChangeServiceConfig2 in order to
- * register our server_version string... so we need some fixups
- * to avoid binding to that function if we are on WinNT/9x.
- */
-static void set_service_description(void)
-{
- const char *full_description;
- SC_HANDLE schSCManager;
- BOOL ret = 0;
-
- /* Nothing to do if we are a console
- */
- if (!mpm_service_name)
- return;
-
- /* Time to fix up the description, upon each successful restart
- */
- full_description = ap_get_server_version();
-
- if ((osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- && (osver.dwMajorVersion > 4)
- && (ChangeServiceConfig2)
- && (schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT)))
- {
- SC_HANDLE schService = OpenService(schSCManager, mpm_service_name,
- SERVICE_CHANGE_CONFIG);
- if (schService) {
- /* Cast is necessary, ChangeServiceConfig2 handles multiple
- * object types, some volatile, some not.
- */
- /* ###: utf-ize */
- if (ChangeServiceConfig2(schService,
- 1 /* SERVICE_CONFIG_DESCRIPTION */,
- (LPVOID) &full_description)) {
- full_description = NULL;
- }
- CloseServiceHandle(schService);
- }
- CloseServiceHandle(schSCManager);
- }
-
- if (full_description)
- {
- char szPath[MAX_PATH];
- ap_regkey_t *svckey;
- apr_status_t rv;
-
- /* Find the Service key that Monitor Applications iterate */
- apr_snprintf(szPath, sizeof(szPath),
- "SYSTEM\\CurrentControlSet\\Services\\%s",
- mpm_service_name);
- rv = ap_regkey_open(&svckey, AP_REGKEY_LOCAL_MACHINE, szPath,
- APR_READ | APR_WRITE, pconf);
- if (rv != APR_SUCCESS) {
- return;
- }
- /* Attempt to set the Description value for our service */
- ap_regkey_value_set(svckey, "Description", full_description, 0, pconf);
- ap_regkey_close(svckey);
- }
-}
-
-/* handle the SCM's ControlService() callbacks to our service */
-
-static VOID WINAPI service_nt_ctrl(DWORD dwCtrlCode)
-{
- if (dwCtrlCode == SERVICE_CONTROL_STOP)
- {
- ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
- ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 30000);
- return;
- }
- if (dwCtrlCode == SERVICE_APACHE_RESTART)
- {
- ap_signal_parent(SIGNAL_PARENT_RESTART);
- ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 30000);
- return;
- }
-
- ReportStatusToSCMgr(globdat.ssStatus.dwCurrentState, NO_ERROR, 0);
-}
-
-
-/* service_nt_main_fn is outside of the call stack and outside of the
- * primary server thread... so now we _really_ need a placeholder!
- * The winnt_rewrite_args has created and shared mpm_new_argv with us.
- */
-extern apr_array_header_t *mpm_new_argv;
-
-/* ###: utf-ize */
-static void __stdcall service_nt_main_fn(DWORD argc, LPTSTR *argv)
-{
- const char *ignored;
-
- /* args and service names live in the same pool */
- mpm_service_set_name(mpm_new_argv->pool, &ignored, argv[0]);
-
- memset(&globdat.ssStatus, 0, sizeof(globdat.ssStatus));
- globdat.ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
- globdat.ssStatus.dwCurrentState = SERVICE_START_PENDING;
- globdat.ssStatus.dwCheckPoint = 1;
-
- /* ###: utf-ize */
- if (!(globdat.hServiceStatus = RegisterServiceCtrlHandler(argv[0], service_nt_ctrl)))
- {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(),
- NULL, "Failure registering service handler");
- return;
- }
-
- /* Report status, no errors, and buy 3 more seconds */
- ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 30000);
-
- /* We need to append all the command arguments passed via StartService()
- * to our running service... which just got here via the SCM...
- * but we hvae no interest in argv[0] for the mpm_new_argv list.
- */
- if (argc > 1)
- {
- char **cmb_data;
-
- mpm_new_argv->nalloc = mpm_new_argv->nelts + argc - 1;
- cmb_data = malloc(mpm_new_argv->nalloc * sizeof(const char *));
-
- /* mpm_new_argv remains first (of lower significance) */
- memcpy (cmb_data, mpm_new_argv->elts,
- mpm_new_argv->elt_size * mpm_new_argv->nelts);
-
- /* Service args follow from StartService() invocation */
- memcpy (cmb_data + mpm_new_argv->nelts, argv + 1,
- mpm_new_argv->elt_size * (argc - 1));
-
- /* The replacement arg list is complete */
- mpm_new_argv->elts = (char *)cmb_data;
- mpm_new_argv->nelts = mpm_new_argv->nalloc;
- }
-
- /* Let the main thread continue now... but hang on to the
- * signal_monitor event so we can take further action
- */
- SetEvent(globdat.service_init);
-
- WaitForSingleObject(globdat.service_term, INFINITE);
-}
-
-
-DWORD WINAPI service_nt_dispatch_thread(LPVOID nada)
-{
- apr_status_t rv = APR_SUCCESS;
-
- SERVICE_TABLE_ENTRY dispatchTable[] =
- {
- { "", service_nt_main_fn },
- { NULL, NULL }
- };
-
- /* ###: utf-ize */
- if (!StartServiceCtrlDispatcher(dispatchTable))
- {
- /* This is a genuine failure of the SCM. */
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "Error starting service control dispatcher");
- }
-
- return (rv);
-}
-
-
-apr_status_t mpm_service_set_name(apr_pool_t *p, const char **display_name,
- const char *set_name)
-{
- char key_name[MAX_PATH];
- ap_regkey_t *key;
- apr_status_t rv;
-
- /* ### Needs improvement, on Win2K the user can _easily_
- * change the display name to a string that doesn't reflect
- * the internal service name + whitespace!
- */
- mpm_service_name = apr_palloc(p, strlen(set_name) + 1);
- apr_collapse_spaces((char*) mpm_service_name, set_name);
- apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
- rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, key_name, APR_READ, pconf);
- if (rv == APR_SUCCESS) {
- rv = ap_regkey_value_get(&mpm_display_name, key, "DisplayName", pconf);
- ap_regkey_close(key);
- }
- if (rv != APR_SUCCESS) {
- /* Take the given literal name if there is no service entry */
- mpm_display_name = apr_pstrdup(p, set_name);
- }
- *display_name = mpm_display_name;
- return rv;
-}
-
-
-apr_status_t mpm_merge_service_args(apr_pool_t *p,
- apr_array_header_t *args,
- int fixed_args)
-{
- apr_array_header_t *svc_args = NULL;
- char conf_key[MAX_PATH];
- char **cmb_data;
- apr_status_t rv;
- ap_regkey_t *key;
-
- apr_snprintf(conf_key, sizeof(conf_key), SERVICEPARAMS, mpm_service_name);
- rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, conf_key, APR_READ, p);
- if (rv == APR_SUCCESS) {
- rv = ap_regkey_value_array_get(&svc_args, key, "ConfigArgs", p);
- ap_regkey_close(key);
- }
- if (rv != APR_SUCCESS) {
- if (rv == ERROR_FILE_NOT_FOUND) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, NULL,
- "No ConfigArgs registered for %s, perhaps "
- "this service is not installed?",
- mpm_service_name);
- return APR_SUCCESS;
- }
- else
- return (rv);
- }
-
- if (!svc_args || svc_args->nelts == 0) {
- return (APR_SUCCESS);
- }
-
- /* Now we have the mpm_service_name arg, and the mpm_runservice_nt()
- * call appended the arguments passed by StartService(), so it's
- * time to _prepend_ the default arguments for the server from
- * the service's default arguments (all others override them)...
- */
- args->nalloc = args->nelts + svc_args->nelts;
- cmb_data = malloc(args->nalloc * sizeof(const char *));
-
- /* First three args (argv[0], -f, path) remain first */
- memcpy(cmb_data, args->elts, args->elt_size * fixed_args);
-
- /* Service args follow from service registry array */
- memcpy(cmb_data + fixed_args, svc_args->elts,
- svc_args->elt_size * svc_args->nelts);
-
- /* Remaining new args follow */
- memcpy(cmb_data + fixed_args + svc_args->nelts,
- (const char **)args->elts + fixed_args,
- args->elt_size * (args->nelts - fixed_args));
-
- args->elts = (char *)cmb_data;
- args->nelts = args->nalloc;
-
- return APR_SUCCESS;
-}
-
-
-void service_stopped(void)
-{
- /* Still have a thread & window to clean up, so signal now */
- if (globdat.service_thread)
- {
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- /* Stop logging to the event log */
- mpm_nt_eventlog_stderr_flush();
-
- /* Cause the service_nt_main_fn to complete */
- ReleaseMutex(globdat.service_term);
-
- ReportStatusToSCMgr(SERVICE_STOPPED, // service state
- NO_ERROR, // exit code
- 0); // wait hint
- }
- else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
- {
- RegisterServiceProcess(0, 0);
- PostThreadMessage(globdat.service_thread_id, WM_CLOSE, 0, 0);
- }
-
- WaitForSingleObject(globdat.service_thread, 5000);
- CloseHandle(globdat.service_thread);
- }
-}
-
-
-apr_status_t mpm_service_to_start(const char **display_name, apr_pool_t *p)
-{
- HANDLE hProc = GetCurrentProcess();
- HANDLE hThread = GetCurrentThread();
- HANDLE waitfor[2];
-
- /* Prevent holding open the (hidden) console */
- real_exit_code = 0;
-
- /* GetCurrentThread returns a psuedo-handle, we need
- * a real handle for another thread to wait upon.
- */
- if (!DuplicateHandle(hProc, hThread, hProc, &(globdat.mpm_thread),
- 0, FALSE, DUPLICATE_SAME_ACCESS)) {
- return APR_ENOTHREAD;
- }
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- globdat.service_init = CreateEvent(NULL, FALSE, FALSE, NULL);
- globdat.service_term = CreateMutex(NULL, TRUE, NULL);
- if (!globdat.service_init || !globdat.service_term) {
- return APR_EGENERAL;
- }
-
- globdat.service_thread = CreateThread(NULL, 0, service_nt_dispatch_thread,
- NULL, 0, &globdat.service_thread_id);
- }
- else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
- {
- if (!RegisterServiceProcess(0, 1))
- return GetLastError();
-
- globdat.service_init = CreateEvent(NULL, FALSE, FALSE, NULL);
- if (!globdat.service_init) {
- return APR_EGENERAL;
- }
-
- globdat.service_thread = CreateThread(NULL, 0, monitor_service_9x_thread,
- (LPVOID) mpm_service_name, 0,
- &globdat.service_thread_id);
- }
-
- if (!globdat.service_thread) {
- return APR_ENOTHREAD;
- }
-
- waitfor[0] = globdat.service_init;
- waitfor[1] = globdat.service_thread;
-
- /* Wait for controlling thread init or termination */
- if (WaitForMultipleObjects(2, waitfor, FALSE, 10000) != WAIT_OBJECT_0) {
- return APR_ENOTHREAD;
- }
-
- atexit(service_stopped);
- *display_name = mpm_display_name;
- return APR_SUCCESS;
-}
-
-
-apr_status_t mpm_service_started(void)
-{
- set_service_description();
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- ReportStatusToSCMgr(SERVICE_RUNNING, // service state
- NO_ERROR, // exit code
- 0); // wait hint
- }
- return APR_SUCCESS;
-}
-
-
-void mpm_service_stopping(void)
-{
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- ReportStatusToSCMgr(SERVICE_STOP_PENDING, // service state
- NO_ERROR, // exit code
- 30000); // wait hint
-}
-
-
-apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
- const char * const * argv, int reconfig)
-{
- char key_name[MAX_PATH];
- char exe_path[MAX_PATH];
- char *launch_cmd;
- ap_regkey_t *key;
- apr_status_t rv;
-
- fprintf(stderr,reconfig ? "Reconfiguring the %s service\n"
- : "Installing the %s service\n", mpm_display_name);
-
- /* ###: utf-ize */
- if (GetModuleFileName(NULL, exe_path, sizeof(exe_path)) == 0)
- {
- apr_status_t rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "GetModuleFileName failed");
- return rv;
- }
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- SC_HANDLE schService;
- SC_HANDLE schSCManager;
-
- schSCManager = OpenSCManager(NULL, NULL, /* local, default database */
- SC_MANAGER_CREATE_SERVICE);
- if (!schSCManager) {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "Failed to open the WinNT service manager");
- return (rv);
- }
-
- launch_cmd = apr_psprintf(ptemp, "\"%s\" -k runservice", exe_path);
-
- if (reconfig) {
- /* ###: utf-ize */
- schService = OpenService(schSCManager, mpm_service_name,
- SERVICE_CHANGE_CONFIG);
- if (!schService) {
- ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_ERR,
- apr_get_os_error(), NULL,
- "OpenService failed");
- }
- /* ###: utf-ize */
- else if (!ChangeServiceConfig(schService,
- SERVICE_WIN32_OWN_PROCESS,
- SERVICE_AUTO_START,
- SERVICE_ERROR_NORMAL,
- launch_cmd, NULL, NULL,
- "Tcpip\0Afd\0", NULL, NULL,
- mpm_display_name)) {
- ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_ERR,
- apr_get_os_error(), NULL,
- "ChangeServiceConfig failed");
- /* !schService aborts configuration below */
- CloseServiceHandle(schService);
- schService = NULL;
- }
- }
- else {
- /* RPCSS is the Remote Procedure Call (RPC) Locator required
- * for DCOM communication pipes. I am far from convinced we
- * should add this to the default service dependencies, but
- * be warned that future apache modules or ISAPI dll's may
- * depend on it.
- */
- /* ###: utf-ize */
- schService = CreateService(schSCManager, // SCManager database
- mpm_service_name, // name of service
- mpm_display_name, // name to display
- SERVICE_ALL_ACCESS, // access required
- SERVICE_WIN32_OWN_PROCESS, // service type
- SERVICE_AUTO_START, // start type
- SERVICE_ERROR_NORMAL, // error control type
- launch_cmd, // service's binary
- NULL, // no load svc group
- NULL, // no tag identifier
- "Tcpip\0Afd\0", // dependencies
- NULL, // use SYSTEM account
- NULL); // no password
-
- if (!schService)
- {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "Failed to create WinNT Service Profile");
- CloseServiceHandle(schSCManager);
- return (rv);
- }
- }
-
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- }
- else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
- {
- /* Store the launch command in the registry */
- launch_cmd = apr_psprintf(ptemp, "\"%s\" -n %s -k runservice",
- exe_path, mpm_service_name);
- rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, SERVICECONFIG9X,
- APR_READ | APR_WRITE | APR_CREATE, pconf);
- if (rv == APR_SUCCESS) {
- rv = ap_regkey_value_set(key, mpm_service_name,
- launch_cmd, 0, pconf);
- ap_regkey_close(key);
- }
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to add the RunServices registry entry.",
- mpm_display_name);
- return (rv);
- }
-
- apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
- rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, key_name,
- APR_READ | APR_WRITE | APR_CREATE, pconf);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to create the registry service key.",
- mpm_display_name);
- return (rv);
- }
- rv = ap_regkey_value_set(key, "ImagePath", launch_cmd, 0, pconf);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to store ImagePath in the registry.",
- mpm_display_name);
- ap_regkey_close(key);
- return (rv);
- }
- rv = ap_regkey_value_set(key, "DisplayName",
- mpm_display_name, 0, pconf);
- ap_regkey_close(key);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to store DisplayName in the registry.",
- mpm_display_name);
- return (rv);
- }
- }
-
- set_service_description();
-
- /* For both WinNT & Win9x store the service ConfigArgs in the registry...
- */
- apr_snprintf(key_name, sizeof(key_name), SERVICEPARAMS, mpm_service_name);
- rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, key_name,
- APR_READ | APR_WRITE | APR_CREATE, pconf);
- if (rv == APR_SUCCESS) {
- rv = ap_regkey_value_array_set(key, "ConfigArgs", argc, argv, pconf);
- ap_regkey_close(key);
- }
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to store the ConfigArgs in the registry.",
- mpm_display_name);
- return (rv);
- }
- fprintf(stderr,"The %s service is successfully installed.\n", mpm_display_name);
- return APR_SUCCESS;
-}
-
-
-apr_status_t mpm_service_uninstall(void)
-{
- char key_name[MAX_PATH];
- apr_status_t rv;
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- SC_HANDLE schService;
- SC_HANDLE schSCManager;
-
- fprintf(stderr,"Removing the %s service\n", mpm_display_name);
-
- schSCManager = OpenSCManager(NULL, NULL, /* local, default database */
- SC_MANAGER_CONNECT);
- if (!schSCManager) {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "Failed to open the WinNT service manager.");
- return (rv);
- }
-
- /* ###: utf-ize */
- schService = OpenService(schSCManager, mpm_service_name, DELETE);
-
- if (!schService) {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: OpenService failed", mpm_display_name);
- return (rv);
- }
-
- /* assure the service is stopped before continuing
- *
- * This may be out of order... we might not be able to be
- * granted all access if the service is running anyway.
- *
- * And do we want to make it *this easy* for them
- * to uninstall their service unintentionally?
- */
- // ap_stop_service(schService);
-
- if (DeleteService(schService) == 0) {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to delete the service.", mpm_display_name);
- return (rv);
- }
-
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- }
- else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
- {
- apr_status_t rv2, rv3;
- ap_regkey_t *key;
- fprintf(stderr,"Removing the %s service\n", mpm_display_name);
-
- /* TODO: assure the service is stopped before continuing */
-
- rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, SERVICECONFIG9X,
- APR_READ | APR_WRITE | APR_CREATE, pconf);
- if (rv == APR_SUCCESS) {
- rv = ap_regkey_value_remove(key, mpm_service_name, pconf);
- ap_regkey_close(key);
- }
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to remove the RunServices registry "
- "entry.", mpm_display_name);
- }
-
- /* we blast Services/us, not just the Services/us/Parameters branch */
- apr_snprintf(key_name, sizeof(key_name), SERVICEPARAMS, mpm_service_name);
- rv2 = ap_regkey_remove(AP_REGKEY_LOCAL_MACHINE, key_name, pconf);
- apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
- rv3 = ap_regkey_remove(AP_REGKEY_LOCAL_MACHINE, key_name, pconf);
- rv2 = (rv2 != APR_SUCCESS) ? rv2 : rv3;
- if (rv2 != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv2, NULL,
- "%s: Failed to remove the service config from the "
- "registry.", mpm_display_name);
- }
- rv = (rv != APR_SUCCESS) ? rv : rv2;
- if (rv != APR_SUCCESS)
- return rv;
- }
- fprintf(stderr,"The %s service has been removed successfully.\n", mpm_display_name);
- return APR_SUCCESS;
-}
-
-
-/* signal_service_transition is a simple thunk to signal the service
- * and monitor its successful transition. If the signal passed is 0,
- * then the caller is assumed to already have performed some service
- * operation to be monitored (such as StartService), and no actual
- * ControlService signal is sent.
- */
-
-static int signal_service_transition(SC_HANDLE schService, DWORD signal, DWORD pending, DWORD complete)
-{
- if (signal && !ControlService(schService, signal, &globdat.ssStatus))
- return FALSE;
-
- do {
- Sleep(1000);
- if (!QueryServiceStatus(schService, &globdat.ssStatus))
- return FALSE;
- } while (globdat.ssStatus.dwCurrentState == pending);
-
- return (globdat.ssStatus.dwCurrentState == complete);
-}
-
-
-apr_status_t mpm_service_start(apr_pool_t *ptemp, int argc,
- const char * const * argv)
-{
- apr_status_t rv;
-
- fprintf(stderr,"Starting the %s service\n", mpm_display_name);
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- char **start_argv;
- SC_HANDLE schService;
- SC_HANDLE schSCManager;
-
- schSCManager = OpenSCManager(NULL, NULL, /* local, default database */
- SC_MANAGER_CONNECT);
- if (!schSCManager) {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "Failed to open the WinNT service manager");
- return (rv);
- }
-
- /* ###: utf-ize */
- schService = OpenService(schSCManager, mpm_service_name,
- SERVICE_START | SERVICE_QUERY_STATUS);
- if (!schService) {
- rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "%s: Failed to open the service.", mpm_display_name);
- CloseServiceHandle(schSCManager);
- return (rv);
- }
-
- if (QueryServiceStatus(schService, &globdat.ssStatus)
- && (globdat.ssStatus.dwCurrentState == SERVICE_RUNNING)) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, NULL,
- "Service %s is already started!", mpm_display_name);
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- return 0;
- }
-
- start_argv = malloc((argc + 1) * sizeof(const char **));
- memcpy(start_argv, argv, argc * sizeof(const char **));
- start_argv[argc] = NULL;
-
- rv = APR_EINIT;
- /* ###: utf-ize */
- if (StartService(schService, argc, start_argv)
- && signal_service_transition(schService, 0, /* test only */
- SERVICE_START_PENDING,
- SERVICE_RUNNING))
- rv = APR_SUCCESS;
-
- if (rv != APR_SUCCESS)
- rv = apr_get_os_error();
-
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- }
- else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
- {
- STARTUPINFO si; /* Filled in prior to call to CreateProcess */
- PROCESS_INFORMATION pi; /* filled in on call to CreateProcess */
- char exe_path[MAX_PATH];
- char exe_cmd[MAX_PATH * 4];
- char *next_arg;
- int i;
-
- /* Locate the active top level window named service_name
- * provided the class is ApacheWin95ServiceMonitor
- */
- if (FindWindow("ApacheWin95ServiceMonitor", mpm_service_name)) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, NULL,
- "Service %s is already started!", mpm_display_name);
- return 0;
- }
-
- /* This may not appear intuitive, but Win9x will not allow a process
- * to detach from the console without releasing the entire console.
- * Ergo, we must spawn a new process for the service to get back our
- * console window.
- * The config is pre-flighted, so there should be no danger of failure.
- */
-
- if (GetModuleFileName(NULL, exe_path, sizeof(exe_path)) == 0)
- {
- apr_status_t rv = apr_get_os_error();
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
- "GetModuleFileName failed");
- return rv;
- }
-
- apr_snprintf(exe_cmd, sizeof(exe_cmd),
- "\"%s\" -n %s -k runservice",
- exe_path, mpm_service_name);
- next_arg = strchr(exe_cmd, '\0');
- for (i = 0; i < argc; ++i) {
- apr_snprintf(next_arg, sizeof(exe_cmd) - (next_arg - exe_cmd),
- " \"%s\"", argv[i]);
- next_arg = strchr(exe_cmd, '\0');
- }
-
- memset(&si, 0, sizeof(si));
- memset(&pi, 0, sizeof(pi));
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE; /* This might be redundant */
-
- rv = APR_EINIT;
- if (CreateProcess(NULL, exe_cmd, NULL, NULL, FALSE,
- DETACHED_PROCESS, /* Creation flags */
- NULL, NULL, &si, &pi))
- {
- DWORD code;
- while (GetExitCodeProcess(pi.hProcess, &code) == STILL_ACTIVE) {
- if (FindWindow("ApacheWin95ServiceMonitor", mpm_service_name)) {
- rv = APR_SUCCESS;
- break;
- }
- Sleep (1000);
- }
- }
-
- if (rv != APR_SUCCESS)
- rv = apr_get_os_error();
-
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
- }
-
- if (rv == APR_SUCCESS)
- fprintf(stderr,"The %s service is running.\n", mpm_display_name);
- else
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "%s: Failed to start the service process.",
- mpm_display_name);
-
- return rv;
-}
-
-
-/* signal is zero to stop, non-zero for restart */
-
-void mpm_signal_service(apr_pool_t *ptemp, int signal)
-{
- int success = FALSE;
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- SC_HANDLE schService;
- SC_HANDLE schSCManager;
-
- schSCManager = OpenSCManager(NULL, NULL, // default machine & database
- SC_MANAGER_CONNECT);
-
- if (!schSCManager) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), NULL,
- "Failed to open the NT Service Manager");
- return;
- }
-
- /* ###: utf-ize */
- schService = OpenService(schSCManager, mpm_service_name,
- SERVICE_INTERROGATE | SERVICE_QUERY_STATUS |
- SERVICE_USER_DEFINED_CONTROL |
- SERVICE_START | SERVICE_STOP);
-
- if (schService == NULL) {
- /* Could not open the service */
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), NULL,
- "Failed to open the %s Service", mpm_display_name);
- CloseServiceHandle(schSCManager);
- return;
- }
-
- if (!QueryServiceStatus(schService, &globdat.ssStatus)) {
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), NULL,
- "Query of Service %s failed", mpm_display_name);
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- return;
- }
-
- if (!signal && (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED)) {
- fprintf(stderr,"The %s service is not started.\n", mpm_display_name);
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- return;
- }
-
- fprintf(stderr,"The %s service is %s.\n", mpm_display_name,
- signal ? "restarting" : "stopping");
-
- if (!signal)
- success = signal_service_transition(schService,
- SERVICE_CONTROL_STOP,
- SERVICE_STOP_PENDING,
- SERVICE_STOPPED);
- else if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED) {
- mpm_service_start(ptemp, 0, NULL);
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- return;
- }
- else
- success = signal_service_transition(schService,
- SERVICE_APACHE_RESTART,
- SERVICE_START_PENDING,
- SERVICE_RUNNING);
-
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- }
- else /* !isWindowsNT() */
- {
- DWORD service_pid;
- HANDLE hwnd;
- char prefix[20];
- /* Locate the active top level window named service_name
- * provided the class is ApacheWin95ServiceMonitor
- */
- hwnd = FindWindow("ApacheWin95ServiceMonitor", mpm_service_name);
- if (hwnd && GetWindowThreadProcessId(hwnd, &service_pid))
- globdat.ssStatus.dwCurrentState = SERVICE_RUNNING;
- else
- {
- globdat.ssStatus.dwCurrentState = SERVICE_STOPPED;
- if (!signal) {
- fprintf(stderr,"The %s service is not started.\n", mpm_display_name);
- return;
- }
- }
-
- fprintf(stderr,"The %s service is %s.\n", mpm_display_name,
- signal ? "restarting" : "stopping");
-
- apr_snprintf(prefix, sizeof(prefix), "ap%ld", (long)service_pid);
- setup_signal_names(prefix);
-
- if (!signal)
- {
- int ticks = 60;
- ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
- while (--ticks)
- {
- if (!IsWindow(hwnd)) {
- success = TRUE;
- break;
- }
- Sleep(1000);
- }
- }
- else /* !stop */
- {
- /* TODO: Aught to add a little test to the restart logic, and
- * store the restart counter in the window's user dword.
- * Then we can hang on and report a successful restart. But
- * that's a project for another day.
- */
- if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED) {
- mpm_service_start(ptemp, 0, NULL);
- return;
- }
- else {
- success = TRUE;
- ap_signal_parent(SIGNAL_PARENT_RESTART);
- }
- }
- }
-
- if (success)
- fprintf(stderr,"The %s service has %s.\n", mpm_display_name,
- signal ? "restarted" : "stopped");
- else
- fprintf(stderr,"Failed to %s the %s service.\n",
- signal ? "restart" : "stop", mpm_display_name);
-}
diff --git a/server/mpm/worker/.cvsignore b/server/mpm/worker/.cvsignore
deleted file mode 100644
index 84df257214..0000000000
--- a/server/mpm/worker/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/worker/Makefile.in b/server/mpm/worker/Makefile.in
deleted file mode 100644
index b45b848341..0000000000
--- a/server/mpm/worker/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME = libworker.la
-LTLIBRARY_SOURCES = worker.c fdqueue.c pod.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/worker/config5.m4 b/server/mpm/worker/config5.m4
deleted file mode 100644
index cc13134845..0000000000
--- a/server/mpm/worker/config5.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "worker" ; then
- AC_CHECK_FUNCS(pthread_kill)
- APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/worker/fdqueue.c b/server/mpm/worker/fdqueue.c
deleted file mode 100644
index b747c63e9b..0000000000
--- a/server/mpm/worker/fdqueue.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "fdqueue.h"
-#include "apr_atomic.h"
-
-typedef struct recycled_pool {
- apr_pool_t *pool;
- struct recycled_pool *next;
-} recycled_pool;
-
-struct fd_queue_info_t {
- apr_uint32_t idlers;
- apr_thread_mutex_t *idlers_mutex;
- apr_thread_cond_t *wait_for_idler;
- int terminated;
- int max_idlers;
- recycled_pool *recycled_pools;
-};
-
-static apr_status_t queue_info_cleanup(void *data_)
-{
- fd_queue_info_t *qi = data_;
- apr_thread_cond_destroy(qi->wait_for_idler);
- apr_thread_mutex_destroy(qi->idlers_mutex);
-
- /* Clean up any pools in the recycled list */
- for (;;) {
- struct recycled_pool *first_pool = qi->recycled_pools;
- if (first_pool == NULL) {
- break;
- }
- if (apr_atomic_casptr((volatile void**)&(qi->recycled_pools), first_pool->next,
- first_pool) == first_pool) {
- apr_pool_destroy(first_pool->pool);
- }
- }
-
- return APR_SUCCESS;
-}
-
-apr_status_t ap_queue_info_create(fd_queue_info_t **queue_info,
- apr_pool_t *pool, int max_idlers)
-{
- apr_status_t rv;
- fd_queue_info_t *qi;
-
- qi = apr_palloc(pool, sizeof(*qi));
- memset(qi, 0, sizeof(*qi));
-
- rv = apr_thread_mutex_create(&qi->idlers_mutex, APR_THREAD_MUTEX_DEFAULT,
- pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- rv = apr_thread_cond_create(&qi->wait_for_idler, pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- qi->recycled_pools = NULL;
- qi->max_idlers = max_idlers;
- apr_pool_cleanup_register(pool, qi, queue_info_cleanup,
- apr_pool_cleanup_null);
-
- *queue_info = qi;
-
- return APR_SUCCESS;
-}
-
-apr_status_t ap_queue_info_set_idle(fd_queue_info_t *queue_info,
- apr_pool_t *pool_to_recycle)
-{
- apr_status_t rv;
- int prev_idlers;
-
- /* If we have been given a pool to recycle, atomically link
- * it into the queue_info's list of recycled pools
- */
- if (pool_to_recycle) {
- struct recycled_pool *new_recycle;
- new_recycle = (struct recycled_pool *)apr_palloc(pool_to_recycle,
- sizeof(*new_recycle));
- new_recycle->pool = pool_to_recycle;
- for (;;) {
- new_recycle->next = queue_info->recycled_pools;
- if (apr_atomic_casptr((volatile void**)&(queue_info->recycled_pools),
- new_recycle, new_recycle->next) ==
- new_recycle->next) {
- break;
- }
- }
- }
-
- /* Atomically increment the count of idle workers */
- for (;;) {
- prev_idlers = queue_info->idlers;
- if (apr_atomic_cas32(&(queue_info->idlers), prev_idlers + 1,
- prev_idlers) == prev_idlers) {
- break;
- }
- }
-
- /* If this thread just made the idle worker count nonzero,
- * wake up the listener. */
- if (prev_idlers == 0) {
- rv = apr_thread_mutex_lock(queue_info->idlers_mutex);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- rv = apr_thread_cond_signal(queue_info->wait_for_idler);
- if (rv != APR_SUCCESS) {
- apr_thread_mutex_unlock(queue_info->idlers_mutex);
- return rv;
- }
- rv = apr_thread_mutex_unlock(queue_info->idlers_mutex);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- }
-
- return APR_SUCCESS;
-}
-
-apr_status_t ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info,
- apr_pool_t **recycled_pool)
-{
- apr_status_t rv;
-
- *recycled_pool = NULL;
-
- /* Block if the count of idle workers is zero */
- if (queue_info->idlers == 0) {
- rv = apr_thread_mutex_lock(queue_info->idlers_mutex);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- /* Re-check the idle worker count to guard against a
- * race condition. Now that we're in the mutex-protected
- * region, one of two things may have happened:
- * - If the idle worker count is still zero, the
- * workers are all still busy, so it's safe to
- * block on a condition variable.
- * - If the idle worker count is nonzero, then a
- * worker has become idle since the first check
- * of queue_info->idlers above. It's possible
- * that the worker has also signaled the condition
- * variable--and if so, the listener missed it
- * because it wasn't yet blocked on the condition
- * variable. But if the idle worker count is
- * now nonzero, it's safe for this function to
- * return immediately.
- */
- if (queue_info->idlers == 0) {
- rv = apr_thread_cond_wait(queue_info->wait_for_idler,
- queue_info->idlers_mutex);
- if (rv != APR_SUCCESS) {
- apr_status_t rv2;
- rv2 = apr_thread_mutex_unlock(queue_info->idlers_mutex);
- if (rv2 != APR_SUCCESS) {
- return rv2;
- }
- return rv;
- }
- }
- rv = apr_thread_mutex_unlock(queue_info->idlers_mutex);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- }
-
- /* Atomically decrement the idle worker count */
- apr_atomic_dec32(&(queue_info->idlers));
-
- /* Atomically pop a pool from the recycled list */
- for (;;) {
- struct recycled_pool *first_pool = queue_info->recycled_pools;
- if (first_pool == NULL) {
- break;
- }
- if (apr_atomic_casptr((volatile void**)&(queue_info->recycled_pools), first_pool->next,
- first_pool) == first_pool) {
- *recycled_pool = first_pool->pool;
- break;
- }
- }
-
- if (queue_info->terminated) {
- return APR_EOF;
- }
- else {
- return APR_SUCCESS;
- }
-}
-
-apr_status_t ap_queue_info_term(fd_queue_info_t *queue_info)
-{
- apr_status_t rv;
- rv = apr_thread_mutex_lock(queue_info->idlers_mutex);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- queue_info->terminated = 1;
- apr_thread_cond_broadcast(queue_info->wait_for_idler);
- return apr_thread_mutex_unlock(queue_info->idlers_mutex);
-}
-
-/**
- * Detects when the fd_queue_t is full. This utility function is expected
- * to be called from within critical sections, and is not threadsafe.
- */
-#define ap_queue_full(queue) ((queue)->nelts == (queue)->bounds)
-
-/**
- * Detects when the fd_queue_t is empty. This utility function is expected
- * to be called from within critical sections, and is not threadsafe.
- */
-#define ap_queue_empty(queue) ((queue)->nelts == 0)
-
-/**
- * Callback routine that is called to destroy this
- * fd_queue_t when its pool is destroyed.
- */
-static apr_status_t ap_queue_destroy(void *data)
-{
- fd_queue_t *queue = data;
-
- /* Ignore errors here, we can't do anything about them anyway.
- * XXX: We should at least try to signal an error here, it is
- * indicative of a programmer error. -aaron */
- apr_thread_cond_destroy(queue->not_empty);
- apr_thread_mutex_destroy(queue->one_big_mutex);
-
- return APR_SUCCESS;
-}
-
-/**
- * Initialize the fd_queue_t.
- */
-apr_status_t ap_queue_init(fd_queue_t *queue, int queue_capacity, apr_pool_t *a)
-{
- int i;
- apr_status_t rv;
-
- if ((rv = apr_thread_mutex_create(&queue->one_big_mutex,
- APR_THREAD_MUTEX_DEFAULT, a)) != APR_SUCCESS) {
- return rv;
- }
- if ((rv = apr_thread_cond_create(&queue->not_empty, a)) != APR_SUCCESS) {
- return rv;
- }
-
- queue->data = apr_palloc(a, queue_capacity * sizeof(fd_queue_elem_t));
- queue->bounds = queue_capacity;
- queue->nelts = 0;
-
- /* Set all the sockets in the queue to NULL */
- for (i = 0; i < queue_capacity; ++i)
- queue->data[i].sd = NULL;
-
- apr_pool_cleanup_register(a, queue, ap_queue_destroy, apr_pool_cleanup_null);
-
- return APR_SUCCESS;
-}
-
-/**
- * Push a new socket onto the queue. Blocks if the queue is full. Once
- * the push operation has completed, it signals other threads waiting
- * in ap_queue_pop() that they may continue consuming sockets.
- */
-apr_status_t ap_queue_push(fd_queue_t *queue, apr_socket_t *sd, apr_pool_t *p)
-{
- fd_queue_elem_t *elem;
- apr_status_t rv;
-
- if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
- return rv;
- }
-
- AP_DEBUG_ASSERT(!queue->terminated);
- AP_DEBUG_ASSERT(!ap_queue_full(queue));
-
- elem = &queue->data[queue->nelts];
- elem->sd = sd;
- elem->p = p;
- queue->nelts++;
-
- apr_thread_cond_signal(queue->not_empty);
-
- if ((rv = apr_thread_mutex_unlock(queue->one_big_mutex)) != APR_SUCCESS) {
- return rv;
- }
-
- return APR_SUCCESS;
-}
-
-/**
- * Retrieves the next available socket from the queue. If there are no
- * sockets available, it will block until one becomes available.
- * Once retrieved, the socket is placed into the address specified by
- * 'sd'.
- */
-apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p)
-{
- fd_queue_elem_t *elem;
- apr_status_t rv;
-
- if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
- return rv;
- }
-
- /* Keep waiting until we wake up and find that the queue is not empty. */
- if (ap_queue_empty(queue)) {
- if (!queue->terminated) {
- apr_thread_cond_wait(queue->not_empty, queue->one_big_mutex);
- }
- /* If we wake up and it's still empty, then we were interrupted */
- if (ap_queue_empty(queue)) {
- rv = apr_thread_mutex_unlock(queue->one_big_mutex);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- if (queue->terminated) {
- return APR_EOF; /* no more elements ever again */
- }
- else {
- return APR_EINTR;
- }
- }
- }
-
- elem = &queue->data[--queue->nelts];
- *sd = elem->sd;
- *p = elem->p;
-#ifdef AP_DEBUG
- elem->sd = NULL;
- elem->p = NULL;
-#endif /* AP_DEBUG */
-
- rv = apr_thread_mutex_unlock(queue->one_big_mutex);
- return rv;
-}
-
-apr_status_t ap_queue_interrupt_all(fd_queue_t *queue)
-{
- apr_status_t rv;
-
- if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
- return rv;
- }
- apr_thread_cond_broadcast(queue->not_empty);
- return apr_thread_mutex_unlock(queue->one_big_mutex);
-}
-
-apr_status_t ap_queue_term(fd_queue_t *queue)
-{
- apr_status_t rv;
-
- if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
- return rv;
- }
- /* we must hold one_big_mutex when setting this... otherwise,
- * we could end up setting it and waking everybody up just after a
- * would-be popper checks it but right before they block
- */
- queue->terminated = 1;
- if ((rv = apr_thread_mutex_unlock(queue->one_big_mutex)) != APR_SUCCESS) {
- return rv;
- }
- return ap_queue_interrupt_all(queue);
-}
diff --git a/server/mpm/worker/fdqueue.h b/server/mpm/worker/fdqueue.h
deleted file mode 100644
index 13e7c5710b..0000000000
--- a/server/mpm/worker/fdqueue.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FDQUEUE_H
-#define FDQUEUE_H
-#include "httpd.h"
-#include <stdlib.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <apr_thread_mutex.h>
-#include <apr_thread_cond.h>
-#include <sys/types.h>
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#include <apr_errno.h>
-
-typedef struct fd_queue_info_t fd_queue_info_t;
-
-apr_status_t ap_queue_info_create(fd_queue_info_t **queue_info,
- apr_pool_t *pool, int max_idlers);
-apr_status_t ap_queue_info_set_idle(fd_queue_info_t *queue_info,
- apr_pool_t *pool_to_recycle);
-apr_status_t ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info,
- apr_pool_t **recycled_pool);
-apr_status_t ap_queue_info_term(fd_queue_info_t *queue_info);
-
-struct fd_queue_elem_t {
- apr_socket_t *sd;
- apr_pool_t *p;
-};
-typedef struct fd_queue_elem_t fd_queue_elem_t;
-
-struct fd_queue_t {
- fd_queue_elem_t *data;
- int nelts;
- int bounds;
- apr_thread_mutex_t *one_big_mutex;
- apr_thread_cond_t *not_empty;
- int terminated;
-};
-typedef struct fd_queue_t fd_queue_t;
-
-apr_status_t ap_queue_init(fd_queue_t *queue, int queue_capacity, apr_pool_t *a);
-apr_status_t ap_queue_push(fd_queue_t *queue, apr_socket_t *sd, apr_pool_t *p);
-apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p);
-apr_status_t ap_queue_interrupt_all(fd_queue_t *queue);
-apr_status_t ap_queue_term(fd_queue_t *queue);
-
-#endif /* FDQUEUE_H */
diff --git a/server/mpm/worker/mpm.h b/server/mpm/worker/mpm.h
deleted file mode 100644
index f84cbcf661..0000000000
--- a/server/mpm/worker/mpm.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "scoreboard.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_WORKER_H
-#define APACHE_MPM_WORKER_H
-
-#define WORKER_MPM
-
-#define MPM_NAME "Worker"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_WANT_SIGNAL_SERVER
-#define AP_MPM_WANT_SET_MAX_MEM_FREE
-#define AP_MPM_WANT_SET_STACKSIZE
-#define AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-extern char ap_coredump_dir[MAX_STRING_LEN];
-
-#endif /* APACHE_MPM_WORKER_H */
diff --git a/server/mpm/worker/mpm_default.h b/server/mpm/worker/mpm_default.h
deleted file mode 100644
index 2d3869e4fc..0000000000
--- a/server/mpm/worker/mpm_default.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 3
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 3
-#endif
-
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 25
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE DEFAULT_REL_RUNTIMEDIR "/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG DEFAULT_REL_RUNTIMEDIR "/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process. If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/worker/pod.c b/server/mpm/worker/pod.c
deleted file mode 100644
index 2c3117bf03..0000000000
--- a/server/mpm/worker/pod.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "pod.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
-{
- apr_status_t rv;
-
- *pod = apr_palloc(p, sizeof(**pod));
- rv = apr_file_pipe_create(&((*pod)->pod_in), &((*pod)->pod_out), p);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-/*
- apr_file_pipe_timeout_set((*pod)->pod_in, 0);
-*/
- (*pod)->p = p;
-
- /* close these before exec. */
- apr_file_inherit_unset((*pod)->pod_in);
- apr_file_inherit_unset((*pod)->pod_out);
-
- return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_mpm_pod_check(ap_pod_t *pod)
-{
- char c;
- apr_os_file_t fd;
- int rc;
-
- /* we need to surface EINTR so we'll have to grab the
- * native file descriptor and do the OS read() ourselves
- */
- apr_os_file_get(&fd, pod->pod_in);
- rc = read(fd, &c, 1);
- if (rc == 1) {
- switch(c) {
- case RESTART_CHAR:
- return AP_RESTART;
- case GRACEFUL_CHAR:
- return AP_GRACEFUL;
- }
- }
- return AP_NORESTART;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod)
-{
- apr_status_t rv;
-
- rv = apr_file_close(pod->pod_out);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- rv = apr_file_close(pod->pod_in);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- return rv;
-}
-
-static apr_status_t pod_signal_internal(ap_pod_t *pod, int graceful)
-{
- apr_status_t rv;
- char char_of_death = graceful ? GRACEFUL_CHAR : RESTART_CHAR;
- apr_size_t one = 1;
-
- rv = apr_file_write(pod->pod_out, &char_of_death, &one);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
- "write pipe_of_death");
- }
- return rv;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int graceful)
-{
- return pod_signal_internal(pod, graceful);
-}
-
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int graceful)
-{
- int i;
- apr_status_t rv = APR_SUCCESS;
-
- for (i = 0; i < num && rv == APR_SUCCESS; i++) {
- rv = pod_signal_internal(pod, graceful);
- }
-}
-
diff --git a/server/mpm/worker/pod.h b/server/mpm/worker/pod.h
deleted file mode 100644
index f2204a4850..0000000000
--- a/server/mpm/worker/pod.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-
-#define RESTART_CHAR '$'
-#define GRACEFUL_CHAR '!'
-
-#define AP_RESTART 0
-#define AP_GRACEFUL 1
-
-typedef struct ap_pod_t ap_pod_t;
-
-struct ap_pod_t {
- apr_file_t *pod_in;
- apr_file_t *pod_out;
- apr_pool_t *p;
-};
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod);
-AP_DECLARE(int) ap_mpm_pod_check(ap_pod_t *pod);
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod);
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int graceful);
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int graceful);
diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c
deleted file mode 100644
index b13facdd33..0000000000
--- a/server/mpm/worker/worker.c
+++ /dev/null
@@ -1,2118 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* The purpose of this MPM is to fix the design flaws in the threaded
- * model. Because of the way that pthreads and mutex locks interact,
- * it is basically impossible to cleanly gracefully shutdown a child
- * process if multiple threads are all blocked in accept. This model
- * fixes those problems.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_thread_mutex.h"
-#include "apr_proc_mutex.h"
-#include "apr_poll.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-#if !APR_HAS_THREADS
-#error The Worker MPM requires APR threads, but they are unavailable.
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h" /* for read_config */
-#include "http_core.h" /* for get_remote_host */
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "pod.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "scoreboard.h"
-#include "fdqueue.h"
-#include "mpm_default.h"
-
-#include <signal.h>
-#include <limits.h> /* for INT_MAX */
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed. It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table. Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 16
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/* Limit on the threads per process. Clients will be locked out if more than
- * this * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT. We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-int ap_threads_per_child = 0; /* Worker threads per child */
-static int ap_daemons_to_start = 0;
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int ap_daemons_limit = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int dying = 0;
-static int workers_may_exit = 0;
-static int start_thread_may_exit = 0;
-static int listener_may_exit = 0;
-static int requests_this_child;
-static int num_listensocks = 0;
-static int resource_shortage = 0;
-static fd_queue_t *worker_queue;
-static fd_queue_info_t *worker_queue_info;
-static int mpm_state = AP_MPMQ_STARTING;
-
-/* The structure used to pass unique initialization info to each thread */
-typedef struct {
- int pid;
- int tid;
- int sd;
-} proc_info;
-
-/* Structure used to pass information to the thread responsible for
- * creating the rest of the threads.
- */
-typedef struct {
- apr_thread_t **threads;
- apr_thread_t *listener;
- int child_num_arg;
- apr_threadattr_t *threadattr;
-} thread_starter;
-
-#define ID_FROM_CHILD_THREAD(c, t) ((c * thread_limit) + t)
-
-/*
- * The max child slot ever assigned, preserved across restarts. Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts. We
- * use this value to optimize routines that have to scan the entire
- * scoreboard.
- */
-int ap_max_daemons_limit = -1;
-
-static ap_pod_t *pod;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* The worker MPM respects a couple of runtime flags that can aid
- * in debugging. Setting the -DNO_DETACH flag will prevent the root process
- * from detaching from its controlling terminal. Additionally, setting
- * the -DONE_PROCESS flag (which implies -DNO_DETACH) will get you the
- * child_main loop running in the process which originally started up.
- * This gives you a pretty nice debugging environment. (You'll get a SIGHUP
- * early in standalone_main; just continue through. This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf; /* Pool for config stuff */
-static apr_pool_t *pchild; /* Pool for httpd child stuff */
-
-static pid_t ap_my_pid; /* Linux getpid() doesn't work except in main
- thread. Use this instead */
-static pid_t parent_pid;
-static apr_os_thread_t *listener_os_thread;
-
-/* Locks for accept serialization */
-static apr_proc_mutex_t *accept_mutex;
-
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) (ap_listeners->next ? (stmt) : APR_SUCCESS)
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-#endif
-
-/* The LISTENER_SIGNAL signal will be sent from the main thread to the
- * listener thread to wake it up for graceful termination (what a child
- * process from an old generation does when the admin does "apachectl
- * graceful"). This signal will be blocked in all threads of a child
- * process except for the listener thread.
- */
-#define LISTENER_SIGNAL SIGHUP
-
-/* An array of socket descriptors in use by each thread used to
- * perform a non-graceful (forced) shutdown of the server. */
-static apr_socket_t **worker_sockets;
-
-static void close_worker_sockets(void)
-{
- int i;
- for (i = 0; i < ap_threads_per_child; i++) {
- if (worker_sockets[i]) {
- apr_socket_close(worker_sockets[i]);
- worker_sockets[i] = NULL;
- }
- }
-}
-
-static void wakeup_listener(void)
-{
- listener_may_exit = 1;
- if (!listener_os_thread) {
- /* XXX there is an obscure path that this doesn't handle perfectly:
- * right after listener thread is created but before
- * listener_os_thread is set, the first worker thread hits an
- * error and starts graceful termination
- */
- return;
- }
- /*
- * we should just be able to "kill(ap_my_pid, LISTENER_SIGNAL)" on all
- * platforms and wake up the listener thread since it is the only thread
- * with SIGHUP unblocked, but that doesn't work on Linux
- */
-#ifdef HAVE_PTHREAD_KILL
- pthread_kill(*listener_os_thread, LISTENER_SIGNAL);
-#else
- kill(ap_my_pid, LISTENER_SIGNAL);
-#endif
-}
-
-#define ST_INIT 0
-#define ST_GRACEFUL 1
-#define ST_UNGRACEFUL 2
-
-static int terminate_mode = ST_INIT;
-
-static void signal_threads(int mode)
-{
- if (terminate_mode == mode) {
- return;
- }
- terminate_mode = mode;
- mpm_state = AP_MPMQ_STOPPING;
-
- /* in case we weren't called from the listener thread, wake up the
- * listener thread
- */
- wakeup_listener();
-
- /* for ungraceful termination, let the workers exit now;
- * for graceful termination, the listener thread will notify the
- * workers to exit once it has stopped accepting new connections
- */
- if (mode == ST_UNGRACEFUL) {
- workers_may_exit = 1;
- ap_queue_interrupt_all(worker_queue);
- ap_queue_info_term(worker_queue_info);
- close_worker_sockets(); /* forcefully kill all current connections */
- }
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
- switch(query_code){
- case AP_MPMQ_MAX_DAEMON_USED:
- *result = ap_max_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_IS_THREADED:
- *result = AP_MPMQ_STATIC;
- return APR_SUCCESS;
- case AP_MPMQ_IS_FORKED:
- *result = AP_MPMQ_DYNAMIC;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_DAEMONS:
- *result = server_limit;
- return APR_SUCCESS;
- case AP_MPMQ_HARD_LIMIT_THREADS:
- *result = thread_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_THREADS:
- *result = ap_threads_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MIN_SPARE_THREADS:
- *result = min_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_DAEMONS:
- *result = 0;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_SPARE_THREADS:
- *result = max_spare_threads;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_REQUESTS_DAEMON:
- *result = ap_max_requests_per_child;
- return APR_SUCCESS;
- case AP_MPMQ_MAX_DAEMONS:
- *result = ap_daemons_limit;
- return APR_SUCCESS;
- case AP_MPMQ_MPM_STATE:
- *result = mpm_state;
- return APR_SUCCESS;
- }
- return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code) __attribute__ ((noreturn));
-static void clean_child_exit(int code)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (pchild) {
- apr_pool_destroy(pchild);
- }
- exit(code);
-}
-
-static void just_die(int sig)
-{
- clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static volatile int child_fatal;
-ap_generation_t volatile ap_my_generation;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals.
- * Previously this was initiated in sig_term() and restart() signal handlers,
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate. Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (shutdown_pending == 1) {
- /* Um, is this _probably_ not an error, if the user has
- * tried to do a shutdown twice quickly, so we won't
- * worry about reporting it.
- */
- return;
- }
- shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
- mpm_state = AP_MPMQ_STOPPING;
- if (restart_pending == 1) {
- /* Probably not an error - don't bother reporting it */
- return;
- }
- restart_pending = 1;
- is_graceful = graceful;
-}
-
-static void sig_term(int sig)
-{
- ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
- ap_start_restart(sig == AP_SIG_GRACEFUL);
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
- struct sigaction sa;
-#endif
-
- if (!one_process) {
- ap_fatal_signal_setup(ap_server_conf, pconf);
- }
-
-#ifndef NO_USE_SIGACTION
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
-
- sa.sa_handler = sig_term;
- if (sigaction(SIGTERM, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGTERM)");
-#ifdef SIGINT
- if (sigaction(SIGINT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXCPU, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
- sa.sa_handler = SIG_DFL;
- if (sigaction(SIGXFSZ, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
- sa.sa_handler = SIG_IGN;
- if (sigaction(SIGPIPE, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGPIPE)");
-#endif
-
- /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy
- * processing one */
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
- sa.sa_handler = restart;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(SIGHUP)");
- if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
- "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
- if (!one_process) {
-#ifdef SIGXCPU
- apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
- apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
- }
-
- apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
- apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
- apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
- apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
- /* XXX this is really a bad confusing obsolete name
- * maybe it should be ap_mpm_process_exiting?
- */
-{
- /* note: for a graceful termination, listener_may_exit will be set before
- * workers_may_exit, so check listener_may_exit
- */
- return listener_may_exit;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num,
- int my_thread_num, apr_bucket_alloc_t *bucket_alloc)
-{
- conn_rec *current_conn;
- long conn_id = ID_FROM_CHILD_THREAD(my_child_num, my_thread_num);
- int csd;
- ap_sb_handle_t *sbh;
-
- ap_create_sb_handle(&sbh, p, my_child_num, my_thread_num);
- apr_os_sock_get(&csd, sock);
-
- current_conn = ap_run_create_connection(p, ap_server_conf, sock,
- conn_id, sbh, bucket_alloc);
- if (current_conn) {
- ap_process_connection(current_conn, sock);
- ap_lingering_close(current_conn);
- }
-}
-
-/* requests_this_child has gone to zero or below. See if the admin coded
- "MaxRequestsPerChild 0", and keep going in that case. Doing it this way
- simplifies the hot path in worker_thread */
-static void check_infinite_requests(void)
-{
- if (ap_max_requests_per_child) {
- signal_threads(ST_GRACEFUL);
- }
- else {
- /* wow! if you're executing this code, you may have set a record.
- * either this child process has served over 2 billion requests, or
- * you're running a threaded 2.0 on a 16 bit machine.
- *
- * I'll buy pizza and beers at Apachecon for the first person to do
- * the former without cheating (dorking with INT_MAX, or running with
- * uncommitted performance patches, for example).
- *
- * for the latter case, you probably deserve a beer too. Greg Ames
- */
-
- requests_this_child = INT_MAX; /* keep going */
- }
-}
-
-static void unblock_signal(int sig)
-{
- sigset_t sig_mask;
-
- sigemptyset(&sig_mask);
- sigaddset(&sig_mask, sig);
-#if defined(SIGPROCMASK_SETS_THREAD_MASK)
- sigprocmask(SIG_UNBLOCK, &sig_mask, NULL);
-#else
- pthread_sigmask(SIG_UNBLOCK, &sig_mask, NULL);
-#endif
-}
-
-static void dummy_signal_handler(int sig)
-{
- /* XXX If specifying SIG_IGN is guaranteed to unblock a syscall,
- * then we don't need this goofy function.
- */
-}
-
-static void *listener_thread(apr_thread_t *thd, void * dummy)
-{
- proc_info * ti = dummy;
- int process_slot = ti->pid;
- apr_pool_t *tpool = apr_thread_pool_get(thd);
- void *csd = NULL;
- apr_pool_t *ptrans; /* Pool for per-transaction stuff */
- apr_pool_t *recycled_pool = NULL;
- apr_pollset_t *pollset;
- apr_status_t rv;
- ap_listen_rec *lr;
- int have_idle_worker = 0;
- int last_poll_idx = 0;
-
- free(ti);
-
- /* ### check the status */
- (void) apr_pollset_create(&pollset, num_listensocks, tpool, 0);
-
- for (lr = ap_listeners; lr != NULL; lr = lr->next) {
- apr_pollfd_t pfd = { 0 };
-
- pfd.desc_type = APR_POLL_SOCKET;
- pfd.desc.s = lr->sd;
- pfd.reqevents = APR_POLLIN;
- pfd.client_data = lr;
-
- /* ### check the status */
- (void) apr_pollset_add(pollset, &pfd);
- }
-
- /* Unblock the signal used to wake this thread up, and set a handler for
- * it.
- */
- unblock_signal(LISTENER_SIGNAL);
- apr_signal(LISTENER_SIGNAL, dummy_signal_handler);
-
- /* TODO: Switch to a system where threads reuse the results from earlier
- poll calls - manoj */
- while (1) {
- /* TODO: requests_this_child should be synchronized - aaron */
- if (requests_this_child <= 0) {
- check_infinite_requests();
- }
- if (listener_may_exit) break;
-
- if (!have_idle_worker) {
- rv = ap_queue_info_wait_for_idler(worker_queue_info,
- &recycled_pool);
- if (APR_STATUS_IS_EOF(rv)) {
- break; /* we've been signaled to die now */
- }
- else if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_queue_info_wait failed. Attempting to "
- " shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- break;
- }
- have_idle_worker = 1;
- }
-
- /* We've already decremented the idle worker count inside
- * ap_queue_info_wait_for_idler. */
-
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex)))
- != APR_SUCCESS) {
- int level = APLOG_EMERG;
-
- if (listener_may_exit) {
- break;
- }
- if (ap_scoreboard_image->parent[process_slot].generation !=
- ap_scoreboard_image->global->running_generation) {
- level = APLOG_DEBUG; /* common to get these at restart time */
- }
- ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
- "apr_proc_mutex_lock failed. Attempting to shutdown "
- "process gracefully.");
- signal_threads(ST_GRACEFUL);
- break; /* skip the lock release */
- }
-
- if (!ap_listeners->next) {
- /* Only one listener, so skip the poll */
- lr = ap_listeners;
- }
- else {
- while (!listener_may_exit) {
- apr_int32_t numdesc;
- const apr_pollfd_t *pdesc;
-
- rv = apr_pollset_poll(pollset, -1, &numdesc, &pdesc);
- if (rv != APR_SUCCESS) {
- if (APR_STATUS_IS_EINTR(rv)) {
- continue;
- }
-
- /* apr_pollset_poll() will only return errors in catastrophic
- * circumstances. Let's try exiting gracefully, for now. */
- ap_log_error(APLOG_MARK, APLOG_ERR, rv,
- (const server_rec *) ap_server_conf,
- "apr_pollset_poll: (listen)");
- signal_threads(ST_GRACEFUL);
- }
-
- if (listener_may_exit) break;
-
- /* We can always use pdesc[0], but sockets at position N
- * could end up completely starved of attention in a very
- * busy server. Therefore, we round-robin across the
- * returned set of descriptors. While it is possible that
- * the returned set of descriptors might flip around and
- * continue to starve some sockets, we happen to know the
- * internal pollset implementation retains ordering
- * stability of the sockets. Thus, the round-robin should
- * ensure that a socket will eventually be serviced.
- */
- if (last_poll_idx >= numdesc)
- last_poll_idx = 0;
-
- /* Grab a listener record from the client_data of the poll
- * descriptor, and advance our saved index to round-robin
- * the next fetch.
- *
- * ### hmm... this descriptor might have POLLERR rather
- * ### than POLLIN
- */
- lr = pdesc[last_poll_idx++].client_data;
- break;
-
- } /* while */
-
- } /* if/else */
-
- if (!listener_may_exit) {
- /* create a new transaction pool for each accepted socket */
- if (recycled_pool == NULL) {
- apr_allocator_t *allocator;
-
- apr_allocator_create(&allocator);
- apr_allocator_max_free_set(allocator, ap_max_mem_free);
- apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
- apr_allocator_owner_set(allocator, ptrans);
- }
- else {
- ptrans = recycled_pool;
- }
- apr_pool_tag(ptrans, "transaction");
- rv = lr->accept_func(&csd, lr, ptrans);
- /* later we trash rv and rely on csd to indicate success/failure */
- AP_DEBUG_ASSERT(rv == APR_SUCCESS || !csd);
-
- if (rv == APR_EGENERAL) {
- /* E[NM]FILE, ENOMEM, etc */
- resource_shortage = 1;
- signal_threads(ST_GRACEFUL);
- }
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
- != APR_SUCCESS) {
- int level = APLOG_EMERG;
-
- if (listener_may_exit) {
- break;
- }
- if (ap_scoreboard_image->parent[process_slot].generation !=
- ap_scoreboard_image->global->running_generation) {
- level = APLOG_DEBUG; /* common to get these at restart time */
- }
- ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- }
- if (csd != NULL) {
- rv = ap_queue_push(worker_queue, csd, ptrans);
- if (rv) {
- /* trash the connection; we couldn't queue the connected
- * socket to a worker
- */
- apr_socket_close(csd);
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "ap_queue_push failed");
- }
- else {
- have_idle_worker = 0;
- }
- }
- }
- else {
- if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
- != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "apr_proc_mutex_unlock failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- }
- break;
- }
- }
-
- ap_queue_term(worker_queue);
- dying = 1;
- ap_scoreboard_image->parent[process_slot].quiescing = 1;
-
- /* wake up the main thread */
- kill(ap_my_pid, SIGTERM);
-
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-/* XXX For ungraceful termination/restart, we definitely don't want to
- * wait for active connections to finish but we may want to wait
- * for idle workers to get out of the queue code and release mutexes,
- * since those mutexes are cleaned up pretty soon and some systems
- * may not react favorably (i.e., segfault) if operations are attempted
- * on cleaned-up mutexes.
- */
-static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
-{
- proc_info * ti = dummy;
- int process_slot = ti->pid;
- int thread_slot = ti->tid;
- apr_socket_t *csd = NULL;
- apr_bucket_alloc_t *bucket_alloc;
- apr_pool_t *last_ptrans = NULL;
- apr_pool_t *ptrans; /* Pool for per-transaction stuff */
- apr_status_t rv;
- int is_idle = 0;
-
- free(ti);
-
- ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_STARTING, NULL);
-
- while (!workers_may_exit) {
- if (!is_idle) {
- rv = ap_queue_info_set_idle(worker_queue_info, last_ptrans);
- last_ptrans = NULL;
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "ap_queue_info_set_idle failed. Attempting to "
- "shutdown process gracefully.");
- signal_threads(ST_GRACEFUL);
- break;
- }
- is_idle = 1;
- }
-
- ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL);
-worker_pop:
- if (workers_may_exit) {
- break;
- }
- rv = ap_queue_pop(worker_queue, &csd, &ptrans);
-
- if (rv != APR_SUCCESS) {
- /* We get APR_EOF during a graceful shutdown once all the connections
- * accepted by this server process have been handled.
- */
- if (APR_STATUS_IS_EOF(rv)) {
- break;
- }
- /* We get APR_EINTR whenever ap_queue_pop() has been interrupted
- * from an explicit call to ap_queue_interrupt_all(). This allows
- * us to unblock threads stuck in ap_queue_pop() when a shutdown
- * is pending.
- *
- * If workers_may_exit is set and this is ungraceful termination/
- * restart, we are bound to get an error on some systems (e.g.,
- * AIX, which sanity-checks mutex operations) since the queue
- * may have already been cleaned up. Don't log the "error" if
- * workers_may_exit is set.
- */
- else if (APR_STATUS_IS_EINTR(rv)) {
- goto worker_pop;
- }
- /* We got some other error. */
- else if (!workers_may_exit) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "ap_queue_pop failed");
- }
- continue;
- }
- is_idle = 0;
- worker_sockets[thread_slot] = csd;
- bucket_alloc = apr_bucket_alloc_create(ptrans);
- process_socket(ptrans, csd, process_slot, thread_slot, bucket_alloc);
- worker_sockets[thread_slot] = NULL;
- requests_this_child--; /* FIXME: should be synchronized - aaron */
- apr_pool_clear(ptrans);
- last_ptrans = ptrans;
- }
-
- ap_update_child_status_from_indexes(process_slot, thread_slot,
- (dying) ? SERVER_DEAD : SERVER_GRACEFUL, (request_rec *) NULL);
-
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-static int check_signal(int signum)
-{
- switch (signum) {
- case SIGTERM:
- case SIGINT:
- return 1;
- }
- return 0;
-}
-
-static void create_listener_thread(thread_starter *ts)
-{
- int my_child_num = ts->child_num_arg;
- apr_threadattr_t *thread_attr = ts->threadattr;
- proc_info *my_info;
- apr_status_t rv;
-
- my_info = (proc_info *)malloc(sizeof(proc_info));
- my_info->pid = my_child_num;
- my_info->tid = -1; /* listener thread doesn't have a thread slot */
- my_info->sd = 0;
- rv = apr_thread_create(&ts->listener, thread_attr, listener_thread,
- my_info, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create listener thread");
- /* In case system resources are maxxed out, we don't want
- * Apache running away with the CPU trying to fork over and
- * over and over again if we exit.
- * XXX Jeff doesn't see how Apache is going to try to fork again since
- * the exit code is APEXIT_CHILDFATAL
- */
- apr_sleep(apr_time_from_sec(10));
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- apr_os_thread_get(&listener_os_thread, ts->listener);
-}
-
-/* XXX under some circumstances not understood, children can get stuck
- * in start_threads forever trying to take over slots which will
- * never be cleaned up; for now there is an APLOG_DEBUG message issued
- * every so often when this condition occurs
- */
-static void * APR_THREAD_FUNC start_threads(apr_thread_t *thd, void *dummy)
-{
- thread_starter *ts = dummy;
- apr_thread_t **threads = ts->threads;
- apr_threadattr_t *thread_attr = ts->threadattr;
- int child_num_arg = ts->child_num_arg;
- int my_child_num = child_num_arg;
- proc_info *my_info;
- apr_status_t rv;
- int i;
- int threads_created = 0;
- int listener_started = 0;
- int loops;
- int prev_threads_created;
-
- /* We must create the fd queues before we start up the listener
- * and worker threads. */
- worker_queue = apr_pcalloc(pchild, sizeof(*worker_queue));
- rv = ap_queue_init(worker_queue, ap_threads_per_child, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "ap_queue_init() failed");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- rv = ap_queue_info_create(&worker_queue_info, pchild,
- ap_threads_per_child);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "ap_queue_info_create() failed");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- worker_sockets = apr_pcalloc(pchild, ap_threads_per_child
- * sizeof(apr_socket_t *));
-
- loops = prev_threads_created = 0;
- while (1) {
- /* ap_threads_per_child does not include the listener thread */
- for (i = 0; i < ap_threads_per_child; i++) {
- int status = ap_scoreboard_image->servers[child_num_arg][i].status;
-
- if (status != SERVER_GRACEFUL && status != SERVER_DEAD) {
- continue;
- }
-
- my_info = (proc_info *)malloc(sizeof(proc_info));
- if (my_info == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
- "malloc: out of memory");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- my_info->pid = my_child_num;
- my_info->tid = i;
- my_info->sd = 0;
-
- /* We are creating threads right now */
- ap_update_child_status_from_indexes(my_child_num, i,
- SERVER_STARTING, NULL);
- /* We let each thread update its own scoreboard entry. This is
- * done because it lets us deal with tid better.
- */
- rv = apr_thread_create(&threads[i], thread_attr,
- worker_thread, my_info, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- apr_sleep(apr_time_from_sec(10));
- clean_child_exit(APEXIT_CHILDFATAL);
- }
- threads_created++;
- }
- /* Start the listener only when there are workers available */
- if (!listener_started && threads_created) {
- create_listener_thread(ts);
- listener_started = 1;
- }
- if (start_thread_may_exit || threads_created == ap_threads_per_child) {
- break;
- }
- /* wait for previous generation to clean up an entry */
- apr_sleep(apr_time_from_sec(1));
- ++loops;
- if (loops % 120 == 0) { /* every couple of minutes */
- if (prev_threads_created == threads_created) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "child %" APR_PID_T_FMT " isn't taking over "
- "slots very quickly (%d of %d)",
- ap_my_pid, threads_created, ap_threads_per_child);
- }
- prev_threads_created = threads_created;
- }
- }
-
- /* What state should this child_main process be listed as in the
- * scoreboard...?
- * ap_update_child_status_from_indexes(my_child_num, i, SERVER_STARTING,
- * (request_rec *) NULL);
- *
- * This state should be listed separately in the scoreboard, in some kind
- * of process_status, not mixed in with the worker threads' status.
- * "life_status" is almost right, but it's in the worker's structure, and
- * the name could be clearer. gla
- */
- apr_thread_exit(thd, APR_SUCCESS);
- return NULL;
-}
-
-static void join_workers(apr_thread_t *listener, apr_thread_t **threads)
-{
- int i;
- apr_status_t rv, thread_rv;
-
- if (listener) {
- int iter;
-
- /* deal with a rare timing window which affects waking up the
- * listener thread... if the signal sent to the listener thread
- * is delivered between the time it verifies that the
- * listener_may_exit flag is clear and the time it enters a
- * blocking syscall, the signal didn't do any good... work around
- * that by sleeping briefly and sending it again
- */
-
- iter = 0;
- while (iter < 10 &&
-#ifdef HAVE_PTHREAD_KILL
- pthread_kill(*listener_os_thread, 0)
-#else
- kill(ap_my_pid, 0)
-#endif
- == 0) {
- /* listener not dead yet */
- apr_sleep(apr_time_make(0, 500000));
- wakeup_listener();
- ++iter;
- }
- if (iter >= 10) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "the listener thread didn't exit");
- }
- else {
- rv = apr_thread_join(&thread_rv, listener);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join listener thread");
- }
- }
- }
-
- for (i = 0; i < ap_threads_per_child; i++) {
- if (threads[i]) { /* if we ever created this thread */
- rv = apr_thread_join(&thread_rv, threads[i]);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join worker "
- "thread %d",
- i);
- }
- }
- }
-}
-
-static void join_start_thread(apr_thread_t *start_thread_id)
-{
- apr_status_t rv, thread_rv;
-
- start_thread_may_exit = 1; /* tell it to give up in case it is still
- * trying to take over slots from a
- * previous generation
- */
- rv = apr_thread_join(&thread_rv, start_thread_id);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
- "apr_thread_join: unable to join the start "
- "thread");
- }
-}
-
-static void child_main(int child_num_arg)
-{
- apr_thread_t **threads;
- apr_status_t rv;
- thread_starter *ts;
- apr_threadattr_t *thread_attr;
- apr_thread_t *start_thread_id;
-
- mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as this
- * child initializes
- */
- ap_my_pid = getpid();
- ap_fatal_signal_child_setup(ap_server_conf);
- apr_pool_create(&pchild, pconf);
-
- /*stuff to do before we switch id's, so we have permissions.*/
- ap_reopen_scoreboard(pchild, NULL, 0);
-
- rv = SAFE_ACCEPT(apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname,
- pchild));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize cross-process lock in child");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (unixd_setup_child()) {
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ap_run_child_init(pchild, ap_server_conf);
-
- /* done with init critical section */
-
- /* Just use the standard apr_setup_signal_thread to block all signals
- * from being received. The child processes no longer use signals for
- * any communication with the parent process.
- */
- rv = apr_setup_signal_thread();
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
- "Couldn't initialize signal thread");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- if (ap_max_requests_per_child) {
- requests_this_child = ap_max_requests_per_child;
- }
- else {
- /* coding a value of zero means infinity */
- requests_this_child = INT_MAX;
- }
-
- /* Setup worker threads */
-
- /* clear the storage; we may not create all our threads immediately,
- * and we want a 0 entry to indicate a thread which was not created
- */
- threads = (apr_thread_t **)calloc(1,
- sizeof(apr_thread_t *) * ap_threads_per_child);
- if (threads == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
- "malloc: out of memory");
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- ts = (thread_starter *)apr_palloc(pchild, sizeof(*ts));
-
- apr_threadattr_create(&thread_attr, pchild);
- /* 0 means PTHREAD_CREATE_JOINABLE */
- apr_threadattr_detach_set(thread_attr, 0);
-
- if (ap_thread_stacksize != 0) {
- apr_threadattr_stacksize_set(thread_attr, ap_thread_stacksize);
- }
-
- ts->threads = threads;
- ts->listener = NULL;
- ts->child_num_arg = child_num_arg;
- ts->threadattr = thread_attr;
-
- rv = apr_thread_create(&start_thread_id, thread_attr, start_threads,
- ts, pchild);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
- "apr_thread_create: unable to create worker thread");
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again if we exit. */
- apr_sleep(apr_time_from_sec(10));
- clean_child_exit(APEXIT_CHILDFATAL);
- }
-
- mpm_state = AP_MPMQ_RUNNING;
-
- /* If we are only running in one_process mode, we will want to
- * still handle signals. */
- if (one_process) {
- /* Block until we get a terminating signal. */
- apr_signal_thread(check_signal);
- /* make sure the start thread has finished; signal_threads()
- * and join_workers() depend on that
- */
- /* XXX join_start_thread() won't be awakened if one of our
- * threads encounters a critical error and attempts to
- * shutdown this child
- */
- join_start_thread(start_thread_id);
- signal_threads(ST_UNGRACEFUL); /* helps us terminate a little more
- * quickly than the dispatch of the signal thread
- * beats the Pipe of Death and the browsers
- */
- /* A terminating signal was received. Now join each of the
- * workers to clean them up.
- * If the worker already exited, then the join frees
- * their resources and returns.
- * If the worker hasn't exited, then this blocks until
- * they have (then cleans up).
- */
- join_workers(ts->listener, threads);
- }
- else { /* !one_process */
- /* remove SIGTERM from the set of blocked signals... if one of
- * the other threads in the process needs to take us down
- * (e.g., for MaxRequestsPerChild) it will send us SIGTERM
- */
- unblock_signal(SIGTERM);
- apr_signal(SIGTERM, dummy_signal_handler);
- /* Watch for any messages from the parent over the POD */
- while (1) {
- rv = ap_mpm_pod_check(pod);
- if (rv == AP_NORESTART) {
- /* see if termination was triggered while we slept */
- switch(terminate_mode) {
- case ST_GRACEFUL:
- rv = AP_GRACEFUL;
- break;
- case ST_UNGRACEFUL:
- rv = AP_RESTART;
- break;
- }
- }
- if (rv == AP_GRACEFUL || rv == AP_RESTART) {
- /* make sure the start thread has finished;
- * signal_threads() and join_workers depend on that
- */
- join_start_thread(start_thread_id);
- signal_threads(rv == AP_GRACEFUL ? ST_GRACEFUL : ST_UNGRACEFUL);
- break;
- }
- }
-
- /* A terminating signal was received. Now join each of the
- * workers to clean them up.
- * If the worker already exited, then the join frees
- * their resources and returns.
- * If the worker hasn't exited, then this blocks until
- * they have (then cleans up).
- */
- join_workers(ts->listener, threads);
- }
-
- free(threads);
-
- clean_child_exit(resource_shortage ? APEXIT_CHILDSICK : 0);
-}
-
-static int make_child(server_rec *s, int slot)
-{
- int pid;
-
- if (slot + 1 > ap_max_daemons_limit) {
- ap_max_daemons_limit = slot + 1;
- }
-
- if (one_process) {
- set_signals();
- ap_scoreboard_image->parent[slot].pid = getpid();
- child_main(slot);
- }
-
- if ((pid = fork()) == -1) {
- ap_log_error(APLOG_MARK, APLOG_ERR, errno, s,
- "fork: Unable to fork new process");
-
- /* fork didn't succeed. Fix the scoreboard or else
- * it will say SERVER_STARTING forever and ever
- */
- ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD, NULL);
-
- /* In case system resources are maxxed out, we don't want
- Apache running away with the CPU trying to fork over and
- over and over again. */
- apr_sleep(apr_time_from_sec(10));
-
- return -1;
- }
-
- if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
- /* By default, AIX binds to a single processor. This bit unbinds
- * children which will then bind to another CPU.
- */
- int status = bindprocessor(BINDPROCESS, (int)getpid(),
- PROCESSOR_CLASS_ANY);
- if (status != OK)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno,
- ap_server_conf,
- "processor unbind failed %d", status);
-#endif
- RAISE_SIGSTOP(MAKE_CHILD);
-
- apr_signal(SIGTERM, just_die);
- child_main(slot);
-
- clean_child_exit(0);
- }
- /* else */
- ap_scoreboard_image->parent[slot].quiescing = 0;
- ap_scoreboard_image->parent[slot].pid = pid;
- return 0;
-}
-
-/* start up a bunch of children */
-static void startup_children(int number_to_start)
-{
- int i;
-
- for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
- if (ap_scoreboard_image->parent[i].pid != 0) {
- continue;
- }
- if (make_child(ap_server_conf, i) < 0) {
- break;
- }
- --number_to_start;
- }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers. It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(void)
-{
- int i, j;
- int idle_thread_count;
- worker_score *ws;
- process_score *ps;
- int free_length;
- int totally_free_length = 0;
- int free_slots[MAX_SPAWN_RATE];
- int last_non_dead;
- int total_non_dead;
-
- /* initialize the free_list */
- free_length = 0;
-
- idle_thread_count = 0;
- last_non_dead = -1;
- total_non_dead = 0;
-
- for (i = 0; i < ap_daemons_limit; ++i) {
- /* Initialization to satisfy the compiler. It doesn't know
- * that ap_threads_per_child is always > 0 */
- int status = SERVER_DEAD;
- int any_dying_threads = 0;
- int any_dead_threads = 0;
- int all_dead_threads = 1;
-
- if (i >= ap_max_daemons_limit && totally_free_length == idle_spawn_rate)
- break;
- ps = &ap_scoreboard_image->parent[i];
- for (j = 0; j < ap_threads_per_child; j++) {
- ws = &ap_scoreboard_image->servers[i][j];
- status = ws->status;
-
- /* XXX any_dying_threads is probably no longer needed GLA */
- any_dying_threads = any_dying_threads ||
- (status == SERVER_GRACEFUL);
- any_dead_threads = any_dead_threads || (status == SERVER_DEAD);
- all_dead_threads = all_dead_threads &&
- (status == SERVER_DEAD ||
- status == SERVER_GRACEFUL);
-
- /* We consider a starting server as idle because we started it
- * at least a cycle ago, and if it still hasn't finished starting
- * then we're just going to swamp things worse by forking more.
- * So we hopefully won't need to fork more if we count it.
- * This depends on the ordering of SERVER_READY and SERVER_STARTING.
- */
- if (status <= SERVER_READY && status != SERVER_DEAD &&
- !ps->quiescing &&
- ps->generation == ap_my_generation &&
- /* XXX the following shouldn't be necessary if we clean up
- * properly after seg faults, but we're not yet GLA
- */
- ps->pid != 0) {
- ++idle_thread_count;
- }
- }
- if (any_dead_threads && totally_free_length < idle_spawn_rate
- && free_length < MAX_SPAWN_RATE
- && (!ps->pid /* no process in the slot */
- || ps->quiescing)) { /* or at least one is going away */
- if (all_dead_threads) {
- /* great! we prefer these, because the new process can
- * start more threads sooner. So prioritize this slot
- * by putting it ahead of any slots with active threads.
- *
- * first, make room by moving a slot that's potentially still
- * in use to the end of the array
- */
- free_slots[free_length] = free_slots[totally_free_length];
- free_slots[totally_free_length++] = i;
- }
- else {
- /* slot is still in use - back of the bus
- */
- free_slots[free_length] = i;
- }
- ++free_length;
- }
- /* XXX if (!ps->quiescing) is probably more reliable GLA */
- if (!any_dying_threads) {
- last_non_dead = i;
- ++total_non_dead;
- }
- }
- ap_max_daemons_limit = last_non_dead + 1;
-
- if (idle_thread_count > max_spare_threads) {
- /* Kill off one child */
- ap_mpm_pod_signal(pod, TRUE);
- idle_spawn_rate = 1;
- }
- else if (idle_thread_count < min_spare_threads) {
- /* terminate the free list */
- if (free_length == 0) {
- /* only report this condition once */
- static int reported = 0;
-
- if (!reported) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0,
- ap_server_conf,
- "server reached MaxClients setting, consider"
- " raising the MaxClients setting");
- reported = 1;
- }
- idle_spawn_rate = 1;
- }
- else {
- if (free_length > idle_spawn_rate) {
- free_length = idle_spawn_rate;
- }
- if (idle_spawn_rate >= 8) {
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "server seems busy, (you may need "
- "to increase StartServers, ThreadsPerChild "
- "or Min/MaxSpareThreads), "
- "spawning %d children, there are around %d idle "
- "threads, and %d total children", free_length,
- idle_thread_count, total_non_dead);
- }
- for (i = 0; i < free_length; ++i) {
- make_child(ap_server_conf, free_slots[i]);
- }
- /* the next time around we want to spawn twice as many if this
- * wasn't good enough, but not if we've just done a graceful
- */
- if (hold_off_on_exponential_spawning) {
- --hold_off_on_exponential_spawning;
- }
- else if (idle_spawn_rate < MAX_SPAWN_RATE) {
- idle_spawn_rate *= 2;
- }
- }
- }
- else {
- idle_spawn_rate = 1;
- }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
- int child_slot;
- apr_exit_why_e exitwhy;
- int status, processed_status;
- apr_proc_t pid;
- int i;
-
- while (!restart_pending && !shutdown_pending) {
- ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
- if (pid.pid != -1) {
- processed_status = ap_process_child_status(&pid, exitwhy, status);
- if (processed_status == APEXIT_CHILDFATAL) {
- shutdown_pending = 1;
- child_fatal = 1;
- return;
- }
- /* non-fatal death... note that it's gone in the scoreboard. */
- child_slot = find_child_by_pid(&pid);
- if (child_slot >= 0) {
- for (i = 0; i < ap_threads_per_child; i++)
- ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD,
- (request_rec *) NULL);
-
- ap_scoreboard_image->parent[child_slot].pid = 0;
- ap_scoreboard_image->parent[child_slot].quiescing = 0;
- if (processed_status == APEXIT_CHILDSICK) {
- /* resource shortage, minimize the fork rate */
- idle_spawn_rate = 1;
- }
- else if (remaining_children_to_start
- && child_slot < ap_daemons_limit) {
- /* we're still doing a 1-for-1 replacement of dead
- * children with new children
- */
- make_child(ap_server_conf, child_slot);
- --remaining_children_to_start;
- }
-#if APR_HAS_OTHER_CHILD
- }
- else if (apr_proc_other_child_alert(&pid, APR_OC_REASON_DEATH,
- status) == 0) {
- /* handled */
-#endif
- }
- else if (is_graceful) {
- /* Great, we've probably just lost a slot in the
- * scoreboard. Somehow we don't know about this child.
- */
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
- ap_server_conf,
- "long lost child came home! (pid %ld)",
- (long)pid.pid);
- }
- /* Don't perform idle maintenance when a child dies,
- * only do it when there's a timeout. Remember only a
- * finite number of children can die, and it's pretty
- * pathological for a lot to die suddenly.
- */
- continue;
- }
- else if (remaining_children_to_start) {
- /* we hit a 1 second timeout in which none of the previous
- * generation of children needed to be reaped... so assume
- * they're all done, and pick up the slack if any is left.
- */
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- /* In any event we really shouldn't do the code below because
- * few of the servers we just started are in the IDLE state
- * yet, so we'd mistakenly create an extra server.
- */
- continue;
- }
-
- perform_idle_server_maintenance();
- }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
- int remaining_children_to_start;
- apr_status_t rv;
-
- ap_log_pid(pconf, ap_pid_fname);
-
- first_server_limit = server_limit;
- first_thread_limit = thread_limit;
- if (changed_limit_at_restart) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
- "WARNING: Attempt to change ServerLimit or ThreadLimit "
- "ignored during restart");
- changed_limit_at_restart = 0;
- }
-
- /* Initialize cross-process accept lock */
- ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
- ap_server_root_relative(_pconf, ap_lock_fname),
- ap_my_pid);
-
- rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname,
- ap_accept_lock_mech, _pconf);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't create accept lock");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
-
-#if APR_USE_SYSVSEM_SERIALIZE
- if (ap_accept_lock_mech == APR_LOCK_DEFAULT ||
- ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#else
- if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#endif
- rv = unixd_set_proc_mutex_perms(accept_mutex);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
- "Couldn't set permissions on cross-process lock; "
- "check User and Group directives");
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- }
-
- if (!is_graceful) {
- if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) {
- mpm_state = AP_MPMQ_STOPPING;
- return 1;
- }
- /* fix the generation number in the global score; we just got a new,
- * cleared scoreboard
- */
- ap_scoreboard_image->global->running_generation = ap_my_generation;
- }
-
- set_signals();
- /* Don't thrash... */
- if (max_spare_threads < min_spare_threads + ap_threads_per_child)
- max_spare_threads = min_spare_threads + ap_threads_per_child;
-
- /* If we're doing a graceful_restart then we're going to see a lot
- * of children exiting immediately when we get into the main loop
- * below (because we just sent them AP_SIG_GRACEFUL). This happens pretty
- * rapidly... and for each one that exits we'll start a new one until
- * we reach at least daemons_min_free. But we may be permitted to
- * start more than that, so we'll just keep track of how many we're
- * supposed to start up without the 1 second penalty between each fork.
- */
- remaining_children_to_start = ap_daemons_to_start;
- if (remaining_children_to_start > ap_daemons_limit) {
- remaining_children_to_start = ap_daemons_limit;
- }
- if (!is_graceful) {
- startup_children(remaining_children_to_start);
- remaining_children_to_start = 0;
- }
- else {
- /* give the system some time to recover before kicking into
- * exponential mode */
- hold_off_on_exponential_spawning = 10;
- }
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "%s configured -- resuming normal operations",
- ap_get_server_version());
- ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
- "Server built: %s", ap_get_server_built());
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
- "AcceptMutex: %s (default: %s)",
- apr_proc_mutex_name(accept_mutex),
- apr_proc_mutex_defname());
-#endif
- restart_pending = shutdown_pending = 0;
- mpm_state = AP_MPMQ_RUNNING;
-
- server_main_loop(remaining_children_to_start);
- mpm_state = AP_MPMQ_STOPPING;
-
- if (shutdown_pending) {
- /* Time to gracefully shut down:
- * Kill child processes, tell them to call child_exit, etc...
- * (By "gracefully" we don't mean graceful in the same sense as
- * "apachectl graceful" where we allow old connections to finish.)
- */
- ap_mpm_pod_killpg(pod, ap_daemons_limit, FALSE);
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
-
- if (!child_fatal) {
- /* cleanup pid file on normal shutdown */
- const char *pidfile = NULL;
- pidfile = ap_server_root_relative (pconf, ap_pid_fname);
- if ( pidfile != NULL && unlink(pidfile) == 0)
- ap_log_error(APLOG_MARK, APLOG_INFO, 0,
- ap_server_conf,
- "removed PID file %s (pid=%ld)",
- pidfile, (long)getpid());
-
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0,
- ap_server_conf, "caught SIGTERM, shutting down");
- }
- return 1;
- }
-
- /* we've been told to restart */
- apr_signal(SIGHUP, SIG_IGN);
-
- if (one_process) {
- /* not worth thinking about */
- return 1;
- }
-
- /* advance to the next generation */
- /* XXX: we really need to make sure this new generation number isn't in
- * use by any of the children.
- */
- ++ap_my_generation;
- ap_scoreboard_image->global->running_generation = ap_my_generation;
-
- if (is_graceful) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- AP_SIG_GRACEFUL_STRING " received. Doing graceful restart");
- /* wake up the children...time to die. But we'll have more soon */
- ap_mpm_pod_killpg(pod, ap_daemons_limit, TRUE);
-
-
- /* This is mostly for debugging... so that we know what is still
- * gracefully dealing with existing request.
- */
-
- }
- else {
- /* Kill 'em all. Since the child acts the same on the parents SIGTERM
- * and a SIGHUP, we may as well use the same signal, because some user
- * pthreads are stealing signals from us left and right.
- */
- ap_mpm_pod_killpg(pod, ap_daemons_limit, FALSE);
-
- ap_reclaim_child_processes(1); /* Start with SIGTERM */
- ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
- "SIGHUP received. Attempting to restart");
- }
-
- return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int worker_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
- apr_status_t rv;
-
- pconf = p;
- ap_server_conf = s;
-
- if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
- ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0,
- NULL, "no listening sockets available, shutting down");
- return DONE;
- }
-
- if (!one_process) {
- if ((rv = ap_mpm_pod_open(pconf, &pod))) {
- ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
- "Could not open pipe-of-death.");
- return DONE;
- }
- }
- return OK;
-}
-
-static int worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
- apr_pool_t *ptemp)
-{
- static int restart_num = 0;
- int no_detach, debug, foreground;
- ap_directive_t *pdir;
- ap_directive_t *max_clients = NULL;
- apr_status_t rv;
-
- mpm_state = AP_MPMQ_STARTING;
-
- /* make sure that "ThreadsPerChild" gets set before "MaxClients" */
- for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
- if (strncasecmp(pdir->directive, "ThreadsPerChild", 15) == 0) {
- if (!max_clients) {
- break; /* we're in the clear, got ThreadsPerChild first */
- }
- else {
- /* now to swap the data */
- ap_directive_t temp;
-
- temp.directive = pdir->directive;
- temp.args = pdir->args;
- /* Make sure you don't change 'next', or you may get loops! */
- /* XXX: first_child, parent, and data can never be set
- * for these directives, right? -aaron */
- temp.filename = pdir->filename;
- temp.line_num = pdir->line_num;
-
- pdir->directive = max_clients->directive;
- pdir->args = max_clients->args;
- pdir->filename = max_clients->filename;
- pdir->line_num = max_clients->line_num;
-
- max_clients->directive = temp.directive;
- max_clients->args = temp.args;
- max_clients->filename = temp.filename;
- max_clients->line_num = temp.line_num;
- break;
- }
- }
- else if (!max_clients
- && strncasecmp(pdir->directive, "MaxClients", 10) == 0) {
- max_clients = pdir;
- }
- }
-
- debug = ap_exists_config_define("DEBUG");
-
- if (debug) {
- foreground = one_process = 1;
- no_detach = 0;
- }
- else {
- one_process = ap_exists_config_define("ONE_PROCESS");
- no_detach = ap_exists_config_define("NO_DETACH");
- foreground = ap_exists_config_define("FOREGROUND");
- }
-
- /* sigh, want this only the second time around */
- if (restart_num++ == 1) {
- is_graceful = 0;
-
- if (!one_process && !foreground) {
- rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
- : APR_PROC_DETACH_DAEMONIZE);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "apr_proc_detach failed");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- parent_pid = ap_my_pid = getpid();
- }
-
- unixd_pre_config(ptemp);
- ap_listen_pre_config();
- ap_daemons_to_start = DEFAULT_START_DAEMON;
- min_spare_threads = DEFAULT_MIN_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
- max_spare_threads = DEFAULT_MAX_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
- ap_daemons_limit = server_limit;
- ap_threads_per_child = DEFAULT_THREADS_PER_CHILD;
- ap_pid_fname = DEFAULT_PIDLOG;
- ap_lock_fname = DEFAULT_LOCKFILE;
- ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
- ap_extended_status = 0;
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
- ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-#endif
-
- apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
- return OK;
-}
-
-static void worker_hooks(apr_pool_t *p)
-{
- /* The worker open_logs phase must run before the core's, or stderr
- * will be redirected to a file, and the messages won't print to the
- * console.
- */
- static const char *const aszSucc[] = {"core.c", NULL};
- one_process = 0;
-
- ap_hook_open_logs(worker_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
- /* we need to set the MPM state before other pre-config hooks use MPM query
- * to retrieve it, so register as REALLY_FIRST
- */
- ap_hook_pre_config(worker_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_daemons_to_start = atoi(arg);
- return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- min_spare_threads = atoi(arg);
- if (min_spare_threads <= 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: detected MinSpareThreads set to non-positive.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Resetting to 1 to avoid almost certain Apache failure.");
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "Please read the documentation.");
- min_spare_threads = 1;
- }
-
- return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- max_spare_threads = atoi(arg);
- return NULL;
-}
-
-static const char *set_max_clients (cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- int max_clients;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- /* It is ok to use ap_threads_per_child here because we are
- * sure that it gets set before MaxClients in the pre_config stage. */
- max_clients = atoi(arg);
- if (max_clients < ap_threads_per_child) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients (%d) must be at least as large",
- max_clients);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " as ThreadsPerChild (%d). Automatically",
- ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " increasing MaxClients to %d.",
- ap_threads_per_child);
- max_clients = ap_threads_per_child;
- }
- ap_daemons_limit = max_clients / ap_threads_per_child;
- if ((max_clients > 0) && (max_clients % ap_threads_per_child)) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients (%d) is not an integer multiple",
- max_clients);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " of ThreadsPerChild (%d), lowering MaxClients to %d",
- ap_threads_per_child,
- ap_daemons_limit * ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " for a maximum of %d child processes,",
- ap_daemons_limit);
- max_clients = ap_daemons_limit * ap_threads_per_child;
- }
- if (ap_daemons_limit > server_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: MaxClients of %d would require %d servers,",
- max_clients, ap_daemons_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " and would exceed the ServerLimit value of %d.",
- server_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " Automatically lowering MaxClients to %d. To increase,",
- server_limit * ap_threads_per_child);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " please see the ServerLimit directive.");
- ap_daemons_limit = server_limit;
- }
- else if (ap_daemons_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require MaxClients > 0, setting to 1");
- ap_daemons_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_threads_per_child (cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_threads_per_child = atoi(arg);
- if (ap_threads_per_child > thread_limit) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadsPerChild of %d exceeds ThreadLimit "
- "value of %d", ap_threads_per_child,
- thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "threads, lowering ThreadsPerChild to %d. To increase, please"
- " see the", thread_limit);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " ThreadLimit directive.");
- ap_threads_per_child = thread_limit;
- }
- else if (ap_threads_per_child < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadsPerChild > 0, setting to 1");
- ap_threads_per_child = 1;
- }
- return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_server_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_server_limit = atoi(arg);
- /* you cannot change ServerLimit across a restart; ignore
- * any such attempts
- */
- if (first_server_limit &&
- tmp_server_limit != server_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- server_limit = tmp_server_limit;
-
- if (server_limit > MAX_SERVER_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ServerLimit of %d exceeds compile time limit "
- "of %d servers,", server_limit, MAX_SERVER_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
- server_limit = MAX_SERVER_LIMIT;
- }
- else if (server_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ServerLimit > 0, setting to 1");
- server_limit = 1;
- }
- return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg)
-{
- int tmp_thread_limit;
-
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- tmp_thread_limit = atoi(arg);
- /* you cannot change ThreadLimit across a restart; ignore
- * any such attempts
- */
- if (first_thread_limit &&
- tmp_thread_limit != thread_limit) {
- /* how do we log a message? the error log is a bit bucket at this
- * point; we'll just have to set a flag so that ap_mpm_run()
- * logs a warning later
- */
- changed_limit_at_restart = 1;
- return NULL;
- }
- thread_limit = tmp_thread_limit;
-
- if (thread_limit > MAX_THREAD_LIMIT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: ThreadLimit of %d exceeds compile time limit "
- "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
- thread_limit = MAX_THREAD_LIMIT;
- }
- else if (thread_limit < 1) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "WARNING: Require ThreadLimit > 0, setting to 1");
- thread_limit = 1;
- }
- return NULL;
-}
-
-static const command_rec worker_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
- "Number of child processes launched at server startup"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
- "Minimum number of idle threads, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
- "Maximum number of idle threads"),
-AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
- "Maximum number of threads alive at the same time"),
-AP_INIT_TAKE1("ThreadsPerChild", set_threads_per_child, NULL, RSRC_CONF,
- "Number of threads each child creates"),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
- "Maximum number of child processes for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
- "Maximum number of worker threads per child process for this run of Apache - Upper limit for ThreadsPerChild"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_worker_module = {
- MPM20_MODULE_STUFF,
- ap_mpm_rewrite_args, /* hook to run before apache parses args */
- NULL, /* create per-directory config structure */
- NULL, /* merge per-directory config structures */
- NULL, /* create per-server config structure */
- NULL, /* merge per-server config structures */
- worker_cmds, /* command apr_table_t */
- worker_hooks /* register_hooks */
-};
-
diff --git a/server/mpm_common.c b/server/mpm_common.c
deleted file mode 100644
index 36d8e6de17..0000000000
--- a/server/mpm_common.c
+++ /dev/null
@@ -1,1053 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* The purpose of this file is to store the code that MOST mpm's will need
- * this does not mean a function only goes into this file if every MPM needs
- * it. It means that if a function is needed by more than one MPM, and
- * future maintenance would be served by making the code common, then the
- * function belongs here.
- *
- * This is going in src/main because it is not platform specific, it is
- * specific to multi-process servers, but NOT to Unix. Which is why it
- * does not belong in src/os/unix
- */
-
-#include "apr.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_strings.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_getopt.h"
-#include "apr_optional.h"
-#include "apr_allocator.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-#include "scoreboard.h"
-#endif
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-void ap_reclaim_child_processes(int terminate)
-{
- int i;
- long int waittime = 1024 * 16; /* in usecs */
- apr_status_t waitret;
- int tries;
- int not_dead_yet;
- int max_daemons;
-
- ap_mpm_query(AP_MPMQ_MAX_DAEMON_USED, &max_daemons);
-
- for (tries = terminate ? 4 : 1; tries <= 9; ++tries) {
- /* don't want to hold up progress any more than
- * necessary, but we need to allow children a few moments to exit.
- * Set delay with an exponential backoff.
- */
- apr_sleep(waittime);
- waittime = waittime * 4;
-
- /* now see who is done */
- not_dead_yet = 0;
- for (i = 0; i < max_daemons; ++i) {
- pid_t pid = MPM_CHILD_PID(i);
- apr_proc_t proc;
-
- if (pid == 0)
- continue;
-
- proc.pid = pid;
- waitret = apr_proc_wait(&proc, NULL, NULL, APR_NOWAIT);
- if (waitret != APR_CHILD_NOTDONE) {
- MPM_NOTE_CHILD_KILLED(i);
- continue;
- }
-
- ++not_dead_yet;
- switch (tries) {
- case 1: /* 16ms */
- case 2: /* 82ms */
- case 3: /* 344ms */
- case 4: /* 16ms */
- break;
-
- case 5: /* 82ms */
- case 6: /* 344ms */
- case 7: /* 1.4sec */
- /* ok, now it's being annoying */
- ap_log_error(APLOG_MARK, APLOG_WARNING,
- 0, ap_server_conf,
- "child process %ld still did not exit, "
- "sending a SIGTERM",
- (long)pid);
- kill(pid, SIGTERM);
- break;
-
- case 8: /* 6 sec */
- /* die child scum */
- ap_log_error(APLOG_MARK, APLOG_ERR,
- 0, ap_server_conf,
- "child process %ld still did not exit, "
- "sending a SIGKILL",
- (long)pid);
-#ifndef BEOS
- kill(pid, SIGKILL);
-#else
- /* sending a SIGKILL kills the entire team on BeOS, and as
- * httpd thread is part of that team it removes any chance
- * of ever doing a restart. To counter this I'm changing to
- * use a kinder, gentler way of killing a specific thread
- * that is just as effective.
- */
- kill_thread(pid);
-#endif
- break;
-
- case 9: /* 14 sec */
- /* gave it our best shot, but alas... If this really
- * is a child we are trying to kill and it really hasn't
- * exited, we will likely fail to bind to the port
- * after the restart.
- */
- ap_log_error(APLOG_MARK, APLOG_ERR,
- 0, ap_server_conf,
- "could not make child process %ld exit, "
- "attempting to continue anyway",
- (long)pid);
- break;
- }
- }
-
-#if APR_HAS_OTHER_CHILD
- apr_proc_other_child_refresh_all(APR_OC_REASON_RESTART);
-#endif
-
- if (!not_dead_yet) {
- /* nothing left to wait for */
- break;
- }
- }
-}
-#endif /* AP_MPM_WANT_RECLAIM_CHILD_PROCESSES */
-
-#ifdef AP_MPM_WANT_WAIT_OR_TIMEOUT
-
-/* number of calls to wait_or_timeout between writable probes */
-#ifndef INTERVAL_OF_WRITABLE_PROBES
-#define INTERVAL_OF_WRITABLE_PROBES 10
-#endif
-static int wait_or_timeout_counter;
-
-void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret,
- apr_pool_t *p)
-{
- apr_status_t rv;
-
- ++wait_or_timeout_counter;
- if (wait_or_timeout_counter == INTERVAL_OF_WRITABLE_PROBES) {
- wait_or_timeout_counter = 0;
- }
-
- rv = apr_proc_wait_all_procs(ret, exitcode, status, APR_NOWAIT, p);
- if (APR_STATUS_IS_EINTR(rv)) {
- ret->pid = -1;
- return;
- }
-
- if (APR_STATUS_IS_CHILD_DONE(rv)) {
- return;
- }
-
-#ifdef NEED_WAITPID
- if ((ret = reap_children(exitcode, status)) > 0) {
- return;
- }
-#endif
-
- apr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
- ret->pid = -1;
- return;
-}
-#endif /* AP_MPM_WANT_WAIT_OR_TIMEOUT */
-
-#ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS
-int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status)
-{
- int signum = status;
- const char *sigdesc = apr_signal_description_get(signum);
-
- /* Child died... if it died due to a fatal error,
- * we should simply bail out. The caller needs to
- * check for bad rc from us and exit, running any
- * appropriate cleanups.
- *
- * If the child died due to a resource shortage,
- * the parent should limit the rate of forking
- */
- if (APR_PROC_CHECK_EXIT(why)) {
- if (status == APEXIT_CHILDSICK) {
- return status;
- }
-
- if (status == APEXIT_CHILDFATAL) {
- ap_log_error(APLOG_MARK, APLOG_ALERT,
- 0, ap_server_conf,
- "Child %" APR_PID_T_FMT
- " returned a Fatal error... server is exiting!",
- pid->pid);
- return APEXIT_CHILDFATAL;
- }
-
- return 0;
- }
-
- if (APR_PROC_CHECK_SIGNALED(why)) {
- switch (signum) {
- case SIGTERM:
- case SIGHUP:
- case AP_SIG_GRACEFUL:
- case SIGKILL:
- break;
-
- default:
- if (APR_PROC_CHECK_CORE_DUMP(why)) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE,
- 0, ap_server_conf,
- "child pid %ld exit signal %s (%d), "
- "possible coredump in %s",
- (long)pid->pid, sigdesc, signum,
- ap_coredump_dir);
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_NOTICE,
- 0, ap_server_conf,
- "child pid %ld exit signal %s (%d)",
- (long)pid->pid, sigdesc, signum);
- }
- }
- }
- return 0;
-}
-#endif /* AP_MPM_WANT_PROCESS_CHILD_STATUS */
-
-#if defined(TCP_NODELAY) && !defined(MPE) && !defined(TPF)
-void ap_sock_disable_nagle(apr_socket_t *s)
-{
- /* The Nagle algorithm says that we should delay sending partial
- * packets in hopes of getting more data. We don't want to do
- * this; we are not telnet. There are bad interactions between
- * persistent connections and Nagle's algorithm that have very severe
- * performance penalties. (Failing to disable Nagle is not much of a
- * problem with simple HTTP.)
- *
- * In spite of these problems, failure here is not a shooting offense.
- */
- apr_status_t status = apr_socket_opt_set(s, APR_TCP_NODELAY, 1);
-
- if (status != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, status, ap_server_conf,
- "apr_socket_opt_set: (TCP_NODELAY)");
- }
-}
-#endif
-
-#ifdef HAVE_GETPWNAM
-AP_DECLARE(uid_t) ap_uname2id(const char *name)
-{
- struct passwd *ent;
-
- if (name[0] == '#')
- return (atoi(&name[1]));
-
- if (!(ent = getpwnam(name))) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "%s: bad user name %s", ap_server_argv0, name);
- exit(1);
- }
-
- return (ent->pw_uid);
-}
-#endif
-
-#ifdef HAVE_GETGRNAM
-AP_DECLARE(gid_t) ap_gname2id(const char *name)
-{
- struct group *ent;
-
- if (name[0] == '#')
- return (atoi(&name[1]));
-
- if (!(ent = getgrnam(name))) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
- "%s: bad group name %s", ap_server_argv0, name);
- exit(1);
- }
-
- return (ent->gr_gid);
-}
-#endif
-
-#ifndef HAVE_INITGROUPS
-int initgroups(const char *name, gid_t basegid)
-{
-#if defined(QNX) || defined(MPE) || defined(BEOS) || defined(_OSD_POSIX) || defined(TPF) || defined(__TANDEM) || defined(OS2) || defined(WIN32) || defined(NETWARE)
-/* QNX, MPE and BeOS do not appear to support supplementary groups. */
- return 0;
-#else /* ndef QNX */
- gid_t groups[NGROUPS_MAX];
- struct group *g;
- int index = 0;
-
- setgrent();
-
- groups[index++] = basegid;
-
- while (index < NGROUPS_MAX && ((g = getgrent()) != NULL)) {
- if (g->gr_gid != basegid) {
- char **names;
-
- for (names = g->gr_mem; *names != NULL; ++names) {
- if (!strcmp(*names, name))
- groups[index++] = g->gr_gid;
- }
- }
- }
-
- endgrent();
-
- return setgroups(index, groups);
-#endif /* def QNX */
-}
-#endif /* def NEED_INITGROUPS */
-
-#ifdef AP_MPM_USES_POD
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
-{
- apr_status_t rv;
-
- *pod = apr_palloc(p, sizeof(**pod));
- rv = apr_file_pipe_create(&((*pod)->pod_in), &((*pod)->pod_out), p);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- apr_file_pipe_timeout_set((*pod)->pod_in, 0);
- (*pod)->p = p;
-
- /* close these before exec. */
- apr_file_inherit_unset((*pod)->pod_in);
- apr_file_inherit_unset((*pod)->pod_out);
-
- return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_check(ap_pod_t *pod)
-{
- char c;
- apr_size_t len = 1;
- apr_status_t rv;
-
- rv = apr_file_read(pod->pod_in, &c, &len);
-
- if ((rv == APR_SUCCESS) && (len == 1)) {
- return APR_SUCCESS;
- }
-
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- return AP_NORESTART;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod)
-{
- apr_status_t rv;
-
- rv = apr_file_close(pod->pod_out);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- rv = apr_file_close(pod->pod_in);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- return APR_SUCCESS;
-}
-
-static apr_status_t pod_signal_internal(ap_pod_t *pod)
-{
- apr_status_t rv;
- char char_of_death = '!';
- apr_size_t one = 1;
-
- rv = apr_file_write(pod->pod_out, &char_of_death, &one);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
- "write pipe_of_death");
- }
-
- return rv;
-}
-
-/* This function connects to the server, then immediately closes the connection.
- * This permits the MPM to skip the poll when there is only one listening
- * socket, because it provides a alternate way to unblock an accept() when
- * the pod is used.
- */
-static apr_status_t dummy_connection(ap_pod_t *pod)
-{
- apr_status_t rv;
- apr_socket_t *sock;
- apr_pool_t *p;
-
- /* create a temporary pool for the socket. pconf stays around too long */
- rv = apr_pool_create(&p, pod->p);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- rv = apr_socket_create(&sock, ap_listeners->bind_addr->family,
- SOCK_STREAM, 0, p);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
- "get socket to connect to listener");
- apr_pool_destroy(p);
- return rv;
- }
-
- /* on some platforms (e.g., FreeBSD), the kernel won't accept many
- * queued connections before it starts blocking local connects...
- * we need to keep from blocking too long and instead return an error,
- * because the MPM won't want to hold up a graceful restart for a
- * long time
- */
- rv = apr_socket_timeout_set(sock, apr_time_from_sec(3));
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
- "set timeout on socket to connect to listener");
- apr_socket_close(sock);
- apr_pool_destroy(p);
- return rv;
- }
-
- rv = apr_socket_connect(sock, ap_listeners->bind_addr);
- if (rv != APR_SUCCESS) {
- int log_level = APLOG_WARNING;
-
- if (APR_STATUS_IS_TIMEUP(rv)) {
- /* probably some server processes bailed out already and there
- * is nobody around to call accept and clear out the kernel
- * connection queue; usually this is not worth logging
- */
- log_level = APLOG_DEBUG;
- }
-
- ap_log_error(APLOG_MARK, log_level, rv, ap_server_conf,
- "connect to listener");
- }
-
- apr_socket_close(sock);
- apr_pool_destroy(p);
-
- return rv;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod)
-{
- apr_status_t rv;
-
- rv = pod_signal_internal(pod);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- return dummy_connection(pod);
-}
-
-void ap_mpm_pod_killpg(ap_pod_t *pod, int num)
-{
- int i;
- apr_status_t rv = APR_SUCCESS;
-
- /* we don't write anything to the pod here... we assume
- * that the would-be reader of the pod has another way to
- * see that it is time to die once we wake it up
- *
- * writing lots of things to the pod at once is very
- * problematic... we can fill the kernel pipe buffer and
- * be blocked until somebody consumes some bytes or
- * we hit a timeout... if we hit a timeout we can't just
- * keep trying because maybe we'll never successfully
- * write again... but then maybe we'll leave would-be
- * readers stranded (a number of them could be tied up for
- * a while serving time-consuming requests)
- */
- for (i = 0; i < num && rv == APR_SUCCESS; i++) {
- rv = dummy_connection(pod);
- }
-}
-#endif /* #ifdef AP_MPM_USES_POD */
-
-/* standard mpm configuration handling */
-#ifdef AP_MPM_WANT_SET_PIDFILE
-const char *ap_pid_fname = NULL;
-
-const char *ap_mpm_set_pidfile(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- if (cmd->server->is_virtual) {
- return "PidFile directive not allowed in <VirtualHost>";
- }
-
- ap_pid_fname = arg;
- return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-const char * ap_mpm_set_scoreboard(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_scoreboard_fname = arg;
- return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_LOCKFILE
-const char *ap_lock_fname = NULL;
-
-const char *ap_mpm_set_lockfile(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_lock_fname = arg;
- return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
-int ap_max_requests_per_child = 0;
-
-const char *ap_mpm_set_max_requests(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- ap_max_requests_per_child = atoi(arg);
-
- return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
-char ap_coredump_dir[MAX_STRING_LEN];
-int ap_coredumpdir_configured;
-
-const char *ap_mpm_set_coredumpdir(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- apr_status_t rv;
- apr_finfo_t finfo;
- const char *fname;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- fname = ap_server_root_relative(cmd->pool, arg);
- if (!fname) {
- return apr_pstrcat(cmd->pool, "Invalid CoreDumpDirectory path ",
- arg, NULL);
- }
- if ((rv = apr_stat(&finfo, fname, APR_FINFO_TYPE, cmd->pool)) != APR_SUCCESS) {
- return apr_pstrcat(cmd->pool, "CoreDumpDirectory ", fname,
- " does not exist", NULL);
- }
- if (finfo.filetype != APR_DIR) {
- return apr_pstrcat(cmd->pool, "CoreDumpDirectory ", fname,
- " is not a directory", NULL);
- }
- apr_cpystrn(ap_coredump_dir, fname, sizeof(ap_coredump_dir));
- ap_coredumpdir_configured = 1;
- return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-apr_lockmech_e ap_accept_lock_mech = APR_LOCK_DEFAULT;
-
-const char ap_valid_accept_mutex_string[] =
- "Valid accept mutexes for this platform and MPM are: default"
-#if APR_HAS_FLOCK_SERIALIZE
- ", flock"
-#endif
-#if APR_HAS_FCNTL_SERIALIZE
- ", fcntl"
-#endif
-#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
- ", sysvsem"
-#endif
-#if APR_HAS_POSIXSEM_SERIALIZE
- ", posixsem"
-#endif
-#if APR_HAS_PROC_PTHREAD_SERIALIZE
- ", pthread"
-#endif
- ".";
-
-AP_DECLARE(const char *) ap_mpm_set_accept_lock_mech(cmd_parms *cmd,
- void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- if (!strcasecmp(arg, "default")) {
- ap_accept_lock_mech = APR_LOCK_DEFAULT;
- }
-#if APR_HAS_FLOCK_SERIALIZE
- else if (!strcasecmp(arg, "flock")) {
- ap_accept_lock_mech = APR_LOCK_FLOCK;
- }
-#endif
-#if APR_HAS_FCNTL_SERIALIZE
- else if (!strcasecmp(arg, "fcntl")) {
- ap_accept_lock_mech = APR_LOCK_FCNTL;
- }
-#endif
-
- /* perchild can't use SysV sems because the permissions on the accept
- * mutex can't be set to allow all processes to use the mutex and
- * at the same time keep all users from being able to dink with the
- * mutex
- */
-#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
- else if (!strcasecmp(arg, "sysvsem")) {
- ap_accept_lock_mech = APR_LOCK_SYSVSEM;
- }
-#endif
-#if APR_HAS_POSIXSEM_SERIALIZE
- else if (!strcasecmp(arg, "posixsem")) {
- ap_accept_lock_mech = APR_LOCK_POSIXSEM;
- }
-#endif
-#if APR_HAS_PROC_PTHREAD_SERIALIZE
- else if (!strcasecmp(arg, "pthread")) {
- ap_accept_lock_mech = APR_LOCK_PROC_PTHREAD;
- }
-#endif
- else {
- return apr_pstrcat(cmd->pool, arg, " is an invalid mutex mechanism; ",
- ap_valid_accept_mutex_string, NULL);
- }
- return NULL;
-}
-
-#endif
-
-#ifdef AP_MPM_WANT_SIGNAL_SERVER
-
-static const char *dash_k_arg;
-
-static int send_signal(pid_t pid, int sig)
-{
- if (kill(pid, sig) < 0) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, errno, NULL,
- "sending signal to server");
- return 1;
- }
- return 0;
-}
-
-int ap_signal_server(int *exit_status, apr_pool_t *pconf)
-{
- apr_status_t rv;
- pid_t otherpid;
- int running = 0;
- int have_pid_file = 0;
- const char *status;
-
- *exit_status = 0;
-
- rv = ap_read_pid(pconf, ap_pid_fname, &otherpid);
- if (rv != APR_SUCCESS) {
- if (rv != APR_ENOENT) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP, rv, NULL,
- "Error retrieving pid file %s", ap_pid_fname);
- *exit_status = 1;
- return 1;
- }
- status = "httpd (no pid file) not running";
- }
- else {
- have_pid_file = 1;
- if (kill(otherpid, 0) == 0) {
- running = 1;
- status = apr_psprintf(pconf,
- "httpd (pid %" APR_PID_T_FMT ") already "
- "running", otherpid);
- }
- else {
- status = apr_psprintf(pconf,
- "httpd (pid %" APR_PID_T_FMT "?) not running",
- otherpid);
- }
- }
-
- if (!strcmp(dash_k_arg, "start")) {
- if (running) {
- printf("%s\n", status);
- return 1;
- }
- }
-
- if (!strcmp(dash_k_arg, "stop")) {
- if (!running) {
- printf("%s\n", status);
- }
- else {
- send_signal(otherpid, SIGTERM);
- }
- return 1;
- }
-
- if (!strcmp(dash_k_arg, "restart")) {
- if (!running) {
- printf("httpd not running, trying to start\n");
- }
- else {
- *exit_status = send_signal(otherpid, SIGHUP);
- return 1;
- }
- }
-
- if (!strcmp(dash_k_arg, "graceful")) {
- if (!running) {
- printf("httpd not running, trying to start\n");
- }
- else {
- *exit_status = send_signal(otherpid, SIGUSR1);
- return 1;
- }
- }
-
- return 0;
-}
-
-void ap_mpm_rewrite_args(process_rec *process)
-{
- apr_array_header_t *mpm_new_argv;
- apr_status_t rv;
- apr_getopt_t *opt;
- char optbuf[3];
- const char *optarg;
- int fixed_args;
-
- mpm_new_argv = apr_array_make(process->pool, process->argc,
- sizeof(const char **));
- *(const char **)apr_array_push(mpm_new_argv) = process->argv[0];
- fixed_args = mpm_new_argv->nelts;
- apr_getopt_init(&opt, process->pool, process->argc, process->argv);
- opt->errfn = NULL;
- optbuf[0] = '-';
- /* option char returned by apr_getopt() will be stored in optbuf[1] */
- optbuf[2] = '\0';
- while ((rv = apr_getopt(opt, "k:" AP_SERVER_BASEARGS,
- optbuf + 1, &optarg)) == APR_SUCCESS) {
- switch(optbuf[1]) {
- case 'k':
- if (!dash_k_arg) {
- if (!strcmp(optarg, "start") || !strcmp(optarg, "stop") ||
- !strcmp(optarg, "restart") || !strcmp(optarg, "graceful")) {
- dash_k_arg = optarg;
- break;
- }
- }
- default:
- *(const char **)apr_array_push(mpm_new_argv) =
- apr_pstrdup(process->pool, optbuf);
- if (optarg) {
- *(const char **)apr_array_push(mpm_new_argv) = optarg;
- }
- }
- }
-
- /* back up to capture the bad argument */
- if (rv == APR_BADCH || rv == APR_BADARG) {
- opt->ind--;
- }
-
- while (opt->ind < opt->argc) {
- *(const char **)apr_array_push(mpm_new_argv) =
- apr_pstrdup(process->pool, opt->argv[opt->ind++]);
- }
-
- process->argc = mpm_new_argv->nelts;
- process->argv = (const char * const *)mpm_new_argv->elts;
-
- if (dash_k_arg) {
- APR_REGISTER_OPTIONAL_FN(ap_signal_server);
- }
-}
-
-#endif /* AP_MPM_WANT_SIGNAL_SERVER */
-
-#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
-apr_uint32_t ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
-
-const char *ap_mpm_set_max_mem_free(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- long value;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- value = strtol(arg, NULL, 0);
- if (value < 0 || errno == ERANGE)
- return apr_pstrcat(cmd->pool, "Invalid MaxMemFree value: ",
- arg, NULL);
-
- ap_max_mem_free = (apr_uint32_t)value * 1024;
-
- return NULL;
-}
-
-#endif /* AP_MPM_WANT_SET_MAX_MEM_FREE */
-
-#ifdef AP_MPM_WANT_SET_STACKSIZE
-apr_size_t ap_thread_stacksize = 0; /* use system default */
-
-const char *ap_mpm_set_thread_stacksize(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- long value;
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- value = strtol(arg, NULL, 0);
- if (value < 0 || errno == ERANGE)
- return apr_pstrcat(cmd->pool, "Invalid ThreadStackSize value: ",
- arg, NULL);
-
- ap_thread_stacksize = (apr_size_t)value;
-
- return NULL;
-}
-
-#endif /* AP_MPM_WANT_SET_STACKSIZE */
-
-#ifdef AP_MPM_WANT_FATAL_SIGNAL_HANDLER
-
-static pid_t parent_pid, my_pid;
-apr_pool_t *pconf;
-
-#if AP_ENABLE_EXCEPTION_HOOK
-
-static int exception_hook_enabled;
-
-const char *ap_mpm_set_exception_hook(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
- if (err != NULL) {
- return err;
- }
-
- if (cmd->server->is_virtual) {
- return "EnableExceptionHook directive not allowed in <VirtualHost>";
- }
-
- if (strcasecmp(arg, "on") == 0) {
- exception_hook_enabled = 1;
- }
- else if (strcasecmp(arg, "off") == 0) {
- exception_hook_enabled = 0;
- }
- else {
- return "parameter must be 'on' or 'off'";
- }
-
- return NULL;
-}
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(fatal_exception)
-)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, fatal_exception,
- (ap_exception_info_t *ei), (ei), OK, DECLINED)
-
-static void run_fatal_exception_hook(int sig)
-{
- ap_exception_info_t ei = {0};
-
- if (exception_hook_enabled &&
- geteuid() != 0 &&
- my_pid != parent_pid) {
- ei.sig = sig;
- ei.pid = my_pid;
- ap_run_fatal_exception(&ei);
- }
-}
-#endif /* AP_ENABLE_EXCEPTION_HOOK */
-
-/* handle all varieties of core dumping signals */
-static void sig_coredump(int sig)
-{
- apr_filepath_set(ap_coredump_dir, pconf);
- apr_signal(sig, SIG_DFL);
-#if AP_ENABLE_EXCEPTION_HOOK
- run_fatal_exception_hook(sig);
-#endif
- /* linuxthreads issue calling getpid() here:
- * This comparison won't match if the crashing thread is
- * some module's thread that runs in the parent process.
- * The fallout, which is limited to linuxthreads:
- * The special log message won't be written when such a
- * thread in the parent causes the parent to crash.
- */
- if (getpid() == parent_pid) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE,
- 0, ap_server_conf,
- "seg fault or similar nasty error detected "
- "in the parent process");
- /* XXX we can probably add some rudimentary cleanup code here,
- * like getting rid of the pid file. If any additional bad stuff
- * happens, we are protected from recursive errors taking down the
- * system since this function is no longer the signal handler GLA
- */
- }
- kill(getpid(), sig);
- /* At this point we've got sig blocked, because we're still inside
- * the signal handler. When we leave the signal handler it will
- * be unblocked, and we'll take the signal... and coredump or whatever
- * is appropriate for this particular Unix. In addition the parent
- * will see the real signal we received -- whereas if we called
- * abort() here, the parent would only see SIGABRT.
- */
-}
-
-apr_status_t ap_fatal_signal_child_setup(server_rec *s)
-{
- my_pid = getpid();
- return APR_SUCCESS;
-}
-
-apr_status_t ap_fatal_signal_setup(server_rec *s, apr_pool_t *in_pconf)
-{
-#ifndef NO_USE_SIGACTION
- struct sigaction sa;
-
- sigemptyset(&sa.sa_mask);
-
-#if defined(SA_ONESHOT)
- sa.sa_flags = SA_ONESHOT;
-#elif defined(SA_RESETHAND)
- sa.sa_flags = SA_RESETHAND;
-#else
- sa.sa_flags = 0;
-#endif
-
- sa.sa_handler = sig_coredump;
- if (sigaction(SIGSEGV, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, s, "sigaction(SIGSEGV)");
-#ifdef SIGBUS
- if (sigaction(SIGBUS, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, s, "sigaction(SIGBUS)");
-#endif
-#ifdef SIGABORT
- if (sigaction(SIGABORT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, s, "sigaction(SIGABORT)");
-#endif
-#ifdef SIGABRT
- if (sigaction(SIGABRT, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, s, "sigaction(SIGABRT)");
-#endif
-#ifdef SIGILL
- if (sigaction(SIGILL, &sa, NULL) < 0)
- ap_log_error(APLOG_MARK, APLOG_WARNING, errno, s, "sigaction(SIGILL)");
-#endif
-
-#else /* NO_USE_SIGACTION */
-
- apr_signal(SIGSEGV, sig_coredump);
-#ifdef SIGBUS
- apr_signal(SIGBUS, sig_coredump);
-#endif /* SIGBUS */
-#ifdef SIGABORT
- apr_signal(SIGABORT, sig_coredump);
-#endif /* SIGABORT */
-#ifdef SIGABRT
- apr_signal(SIGABRT, sig_coredump);
-#endif /* SIGABRT */
-#ifdef SIGILL
- apr_signal(SIGILL, sig_coredump);
-#endif /* SIGILL */
-
-#endif /* NO_USE_SIGACTION */
-
- pconf = in_pconf;
- parent_pid = my_pid = getpid();
-
- return APR_SUCCESS;
-}
-
-#endif /* AP_MPM_WANT_FATAL_SIGNAL_HANDLER */
diff --git a/server/protocol.c b/server/protocol.c
deleted file mode 100644
index 6407a6f5a2..0000000000
--- a/server/protocol.c
+++ /dev/null
@@ -1,1558 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_protocol.c --- routines which directly communicate with the client.
- *
- * Code originally by Rob McCool; much redone by Robert S. Thau
- * and the Apache Software Foundation.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-#include "apr_strmatch.h"
-
-#define APR_WANT_STDIO /* for sscanf */
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "util_filter.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_log.h" /* For errors detected in basic auth common
- * support code... */
-#include "mod_core.h"
-#include "util_charset.h"
-#include "util_ebcdic.h"
-#include "scoreboard.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(post_read_request)
- APR_HOOK_LINK(log_transaction)
- APR_HOOK_LINK(http_method)
- APR_HOOK_LINK(default_port)
-)
-
-AP_DECLARE_DATA ap_filter_rec_t *ap_old_write_func = NULL;
-
-
-/* Patterns to match in ap_make_content_type() */
-static const char *needcset[] = {
- "text/plain",
- "text/html",
- NULL
-};
-static const apr_strmatch_pattern **needcset_patterns;
-static const apr_strmatch_pattern *charset_pattern;
-
-AP_DECLARE(void) ap_setup_make_content_type(apr_pool_t *pool)
-{
- int i;
- for (i = 0; needcset[i]; i++) {
- continue;
- }
- needcset_patterns = (const apr_strmatch_pattern **)
- apr_palloc(pool, (i + 1) * sizeof(apr_strmatch_pattern *));
- for (i = 0; needcset[i]; i++) {
- needcset_patterns[i] = apr_strmatch_precompile(pool, needcset[i], 0);
- }
- needcset_patterns[i] = NULL;
- charset_pattern = apr_strmatch_precompile(pool, "charset=", 0);
-}
-
-/*
- * Builds the content-type that should be sent to the client from the
- * content-type specified. The following rules are followed:
- * - if type is NULL, type is set to ap_default_type(r)
- * - if charset adding is disabled, stop processing and return type.
- * - then, if there are no parameters on type, add the default charset
- * - return type
- */
-AP_DECLARE(const char *)ap_make_content_type(request_rec *r, const char *type)
-{
- const apr_strmatch_pattern **pcset;
- core_dir_config *conf =
- (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
- apr_size_t type_len;
-
- if (!type) {
- type = ap_default_type(r);
- }
-
- if (conf->add_default_charset != ADD_DEFAULT_CHARSET_ON) {
- return type;
- }
-
- type_len = strlen(type);
-
- if (apr_strmatch(charset_pattern, type, type_len) != NULL) {
- /* already has parameter, do nothing */
- /* XXX we don't check the validity */
- ;
- }
- else {
- /* see if it makes sense to add the charset. At present,
- * we only add it if the Content-type is one of needcset[]
- */
- for (pcset = needcset_patterns; *pcset ; pcset++) {
- if (apr_strmatch(*pcset, type, type_len) != NULL) {
- struct iovec concat[3];
- concat[0].iov_base = (void *)type;
- concat[0].iov_len = type_len;
- concat[1].iov_base = (void *)"; charset=";
- concat[1].iov_len = sizeof("; charset=") - 1;
- concat[2].iov_base = (void *)(conf->add_default_charset_name);
- concat[2].iov_len = strlen(conf->add_default_charset_name);
- type = apr_pstrcatv(r->pool, concat, 3, NULL);
- break;
- }
- }
- }
-
- return type;
-}
-
-AP_DECLARE(void) ap_set_content_length(request_rec *r, apr_off_t clength)
-{
- r->clength = clength;
- apr_table_setn(r->headers_out, "Content-Length",
- apr_off_t_toa(r->pool, clength));
-}
-
-/*
- * Return the latest rational time from a request/mtime (modification time)
- * pair. We return the mtime unless it's in the future, in which case we
- * return the current time. We use the request time as a reference in order
- * to limit the number of calls to time(). We don't check for futurosity
- * unless the mtime is at least as new as the reference.
- */
-AP_DECLARE(apr_time_t) ap_rationalize_mtime(request_rec *r, apr_time_t mtime)
-{
- apr_time_t now;
-
- /* For all static responses, it's almost certain that the file was
- * last modified before the beginning of the request. So there's
- * no reason to call time(NULL) again. But if the response has been
- * created on demand, then it might be newer than the time the request
- * started. In this event we really have to call time(NULL) again
- * so that we can give the clients the most accurate Last-Modified. If we
- * were given a time in the future, we return the current time - the
- * Last-Modified can't be in the future.
- */
- now = (mtime < r->request_time) ? r->request_time : apr_time_now();
- return (mtime > now) ? now : mtime;
-}
-
-/* Min # of bytes to allocate when reading a request line */
-#define MIN_LINE_ALLOC 80
-
-/* Get a line of protocol input, including any continuation lines
- * caused by MIME folding (or broken clients) if fold != 0, and place it
- * in the buffer s, of size n bytes, without the ending newline.
- *
- * If s is NULL, ap_rgetline_core will allocate necessary memory from r->pool.
- *
- * Returns APR_SUCCESS if there are no problems and sets *read to be
- * the full length of s.
- *
- * APR_ENOSPC is returned if there is not enough buffer space.
- * Other errors may be returned on other errors.
- *
- * The LF is *not* returned in the buffer. Therefore, a *read of 0
- * indicates that an empty line was read.
- *
- * Notes: Because the buffer uses 1 char for NUL, the most we can return is
- * (n - 1) actual characters.
- *
- * If no LF is detected on the last line due to a dropped connection
- * or a full buffer, that's considered an error.
- */
-AP_DECLARE(apr_status_t) ap_rgetline_core(char **s, apr_size_t n,
- apr_size_t *read, request_rec *r,
- int fold, apr_bucket_brigade *bb)
-{
- apr_status_t rv;
- apr_bucket *e;
- apr_size_t bytes_handled = 0, current_alloc = 0;
- char *pos, *last_char = *s;
- int do_alloc = (*s == NULL), saw_eos = 0;
-
- for (;;) {
- apr_brigade_cleanup(bb);
- rv = ap_get_brigade(r->input_filters, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- /* Something horribly wrong happened. Someone didn't block! */
- if (APR_BRIGADE_EMPTY(bb)) {
- return APR_EGENERAL;
- }
-
- for (e = APR_BRIGADE_FIRST(bb);
- e != APR_BRIGADE_SENTINEL(bb);
- e = APR_BUCKET_NEXT(e))
- {
- const char *str;
- apr_size_t len;
-
- /* If we see an EOS, don't bother doing anything more. */
- if (APR_BUCKET_IS_EOS(e)) {
- saw_eos = 1;
- break;
- }
-
- rv = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- if (len == 0) {
- /* no use attempting a zero-byte alloc (hurts when
- * using --with-efence --enable-pool-debug) or
- * doing any of the other logic either
- */
- continue;
- }
-
- /* Would this overrun our buffer? If so, we'll die. */
- if (n < bytes_handled + len) {
- *read = bytes_handled;
- if (*s) {
- /* ensure this string is terminated */
- if (bytes_handled < n) {
- (*s)[bytes_handled] = '\0';
- }
- else {
- (*s)[n-1] = '\0';
- }
- }
- return APR_ENOSPC;
- }
-
- /* Do we have to handle the allocation ourselves? */
- if (do_alloc) {
- /* We'll assume the common case where one bucket is enough. */
- if (!*s) {
- current_alloc = len;
- if (current_alloc < MIN_LINE_ALLOC) {
- current_alloc = MIN_LINE_ALLOC;
- }
- *s = apr_palloc(r->pool, current_alloc);
- }
- else if (bytes_handled + len > current_alloc) {
- /* Increase the buffer size */
- apr_size_t new_size = current_alloc * 2;
- char *new_buffer;
-
- if (bytes_handled + len > new_size) {
- new_size = (bytes_handled + len) * 2;
- }
-
- new_buffer = apr_palloc(r->pool, new_size);
-
- /* Copy what we already had. */
- memcpy(new_buffer, *s, bytes_handled);
- current_alloc = new_size;
- *s = new_buffer;
- }
- }
-
- /* Just copy the rest of the data to the end of the old buffer. */
- pos = *s + bytes_handled;
- memcpy(pos, str, len);
- last_char = pos + len - 1;
-
- /* We've now processed that new data - update accordingly. */
- bytes_handled += len;
- }
-
- /* If we got a full line of input, stop reading */
- if (last_char && (*last_char == APR_ASCII_LF)) {
- break;
- }
- }
-
- /* We now go backwards over any CR (if present) or white spaces.
- *
- * Trim any extra trailing spaces or tabs except for the first
- * space or tab at the beginning of a blank string. This makes
- * it much easier to check field values for exact matches, and
- * saves memory as well. Terminate string at end of line.
- */
- pos = last_char;
- if (pos > *s && *(pos - 1) == APR_ASCII_CR) {
- --pos;
- }
-
- /* Trim any extra trailing spaces or tabs except for the first
- * space or tab at the beginning of a blank string. This makes
- * it much easier to check field values for exact matches, and
- * saves memory as well.
- */
- while (pos > ((*s) + 1)
- && (*(pos - 1) == APR_ASCII_BLANK || *(pos - 1) == APR_ASCII_TAB)) {
- --pos;
- }
-
- /* Since we want to remove the LF from the line, we'll go ahead
- * and set this last character to be the term NULL and reset
- * bytes_handled accordingly.
- */
- *pos = '\0';
- last_char = pos;
- bytes_handled = pos - *s;
-
- /* If we're folding, we have more work to do.
- *
- * Note that if an EOS was seen, we know we can't have another line.
- */
- if (fold && bytes_handled && !saw_eos) {
- for (;;) {
- const char *str;
- apr_size_t len;
- char c;
-
- /* Clear the temp brigade for this filter read. */
- apr_brigade_cleanup(bb);
-
- /* We only care about the first byte. */
- rv = ap_get_brigade(r->input_filters, bb, AP_MODE_SPECULATIVE,
- APR_BLOCK_READ, 1);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- if (APR_BRIGADE_EMPTY(bb)) {
- break;
- }
-
- e = APR_BRIGADE_FIRST(bb);
-
- /* If we see an EOS, don't bother doing anything more. */
- if (APR_BUCKET_IS_EOS(e)) {
- break;
- }
-
- rv = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
- if (rv != APR_SUCCESS) {
- apr_brigade_cleanup(bb);
- return rv;
- }
-
- /* Found one, so call ourselves again to get the next line.
- *
- * FIXME: If the folding line is completely blank, should we
- * stop folding? Does that require also looking at the next
- * char?
- */
- /* When we call destroy, the buckets are deleted, so save that
- * one character we need. This simplifies our execution paths
- * at the cost of one character read.
- */
- c = *str;
- if (c == APR_ASCII_BLANK || c == APR_ASCII_TAB) {
- /* Do we have enough space? We may be full now. */
- if (bytes_handled >= n) {
- *read = n;
- /* ensure this string is terminated */
- (*s)[n-1] = '\0';
- return APR_ENOSPC;
- }
- else {
- apr_size_t next_size, next_len;
- char *tmp;
-
- /* If we're doing the allocations for them, we have to
- * give ourselves a NULL and copy it on return.
- */
- if (do_alloc) {
- tmp = NULL;
- } else {
- /* We're null terminated. */
- tmp = last_char;
- }
-
- next_size = n - bytes_handled;
-
- rv = ap_rgetline_core(&tmp, next_size,
- &next_len, r, 0, bb);
- if (rv != APR_SUCCESS) {
- return rv;
- }
-
- if (do_alloc && next_len > 0) {
- char *new_buffer;
- apr_size_t new_size = bytes_handled + next_len + 1;
-
- /* we need to alloc an extra byte for a null */
- new_buffer = apr_palloc(r->pool, new_size);
-
- /* Copy what we already had. */
- memcpy(new_buffer, *s, bytes_handled);
-
- /* copy the new line, including the trailing null */
- memcpy(new_buffer + bytes_handled, tmp, next_len + 1);
- *s = new_buffer;
- }
-
- last_char += next_len;
- bytes_handled += next_len;
- }
- }
- else { /* next character is not tab or space */
- break;
- }
- }
- }
-
- *read = bytes_handled;
- return APR_SUCCESS;
-}
-
-#if APR_CHARSET_EBCDIC
-AP_DECLARE(apr_status_t) ap_rgetline(char **s, apr_size_t n,
- apr_size_t *read, request_rec *r,
- int fold, apr_bucket_brigade *bb)
-{
- /* on ASCII boxes, ap_rgetline is a macro which simply invokes
- * ap_rgetline_core with the same parms
- *
- * on EBCDIC boxes, each complete http protocol input line needs to be
- * translated into the code page used by the compiler. Since
- * ap_rgetline_core uses recursion, we do the translation in a wrapper
- * function to insure that each input character gets translated only once.
- */
- apr_status_t rv;
-
- rv = ap_rgetline_core(s, n, read, r, fold, bb);
- if (rv == APR_SUCCESS) {
- ap_xlate_proto_from_ascii(*s, *read);
- }
- return rv;
-}
-#endif
-
-AP_DECLARE(int) ap_getline(char *s, int n, request_rec *r, int fold)
-{
- char *tmp_s = s;
- apr_status_t rv;
- apr_size_t len;
- apr_bucket_brigade *tmp_bb;
-
- tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- rv = ap_rgetline(&tmp_s, n, &len, r, fold, tmp_bb);
- apr_brigade_destroy(tmp_bb);
-
- /* Map the out-of-space condition to the old API. */
- if (rv == APR_ENOSPC) {
- return n;
- }
-
- /* Anything else is just bad. */
- if (rv != APR_SUCCESS) {
- return -1;
- }
-
- return (int)len;
-}
-
-/* parse_uri: break apart the uri
- * Side Effects:
- * - sets r->args to rest after '?' (or NULL if no '?')
- * - sets r->uri to request uri (without r->args part)
- * - sets r->hostname (if not set already) from request (scheme://host:port)
- */
-AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri)
-{
- int status = HTTP_OK;
-
- r->unparsed_uri = apr_pstrdup(r->pool, uri);
-
- if (r->method_number == M_CONNECT) {
- status = apr_uri_parse_hostinfo(r->pool, uri, &r->parsed_uri);
- }
- else {
- /* Simple syntax Errors in URLs are trapped by
- * parse_uri_components().
- */
- status = apr_uri_parse(r->pool, uri, &r->parsed_uri);
- }
-
- if (status == APR_SUCCESS) {
- /* if it has a scheme we may need to do absoluteURI vhost stuff */
- if (r->parsed_uri.scheme
- && !strcasecmp(r->parsed_uri.scheme, ap_http_method(r))) {
- r->hostname = r->parsed_uri.hostname;
- }
- else if (r->method_number == M_CONNECT) {
- r->hostname = r->parsed_uri.hostname;
- }
-
- r->args = r->parsed_uri.query;
- r->uri = r->parsed_uri.path ? r->parsed_uri.path
- : apr_pstrdup(r->pool, "/");
-
-#if defined(OS2) || defined(WIN32)
- /* Handle path translations for OS/2 and plug security hole.
- * This will prevent "http://www.wherever.com/..\..\/" from
- * returning a directory for the root drive.
- */
- {
- char *x;
-
- for (x = r->uri; (x = strchr(x, '\\')) != NULL; )
- *x = '/';
- }
-#endif /* OS2 || WIN32 */
- }
- else {
- r->args = NULL;
- r->hostname = NULL;
- r->status = HTTP_BAD_REQUEST; /* set error status */
- r->uri = apr_pstrdup(r->pool, uri);
- }
-}
-
-static int read_request_line(request_rec *r, apr_bucket_brigade *bb)
-{
- const char *ll;
- const char *uri;
- const char *pro;
-
-#if 0
- conn_rec *conn = r->connection;
-#endif
- int major = 1, minor = 0; /* Assume HTTP/1.0 if non-"HTTP" protocol */
- char http[5];
- apr_size_t len;
- int num_blank_lines = 0;
- int max_blank_lines = r->server->limit_req_fields;
-
- if (max_blank_lines <= 0) {
- max_blank_lines = DEFAULT_LIMIT_REQUEST_FIELDS;
- }
-
- /* Read past empty lines until we get a real request line,
- * a read error, the connection closes (EOF), or we timeout.
- *
- * We skip empty lines because browsers have to tack a CRLF on to the end
- * of POSTs to support old CERN webservers. But note that we may not
- * have flushed any previous response completely to the client yet.
- * We delay the flush as long as possible so that we can improve
- * performance for clients that are pipelining requests. If a request
- * is pipelined then we won't block during the (implicit) read() below.
- * If the requests aren't pipelined, then the client is still waiting
- * for the final buffer flush from us, and we will block in the implicit
- * read(). B_SAFEREAD ensures that the BUFF layer flushes if it will
- * have to block during a read.
- */
-
- do {
- apr_status_t rv;
-
- /* insure ap_rgetline allocates memory each time thru the loop
- * if there are empty lines
- */
- r->the_request = NULL;
- rv = ap_rgetline(&(r->the_request), (apr_size_t)(r->server->limit_req_line + 2),
- &len, r, 0, bb);
-
- if (rv != APR_SUCCESS) {
- r->request_time = apr_time_now();
-
- /* ap_rgetline returns APR_ENOSPC if it fills up the
- * buffer before finding the end-of-line. This is only going to
- * happen if it exceeds the configured limit for a request-line.
- */
- if (rv == APR_ENOSPC) {
- r->status = HTTP_REQUEST_URI_TOO_LARGE;
- r->proto_num = HTTP_VERSION(1,0);
- r->protocol = apr_pstrdup(r->pool, "HTTP/1.0");
- }
-
- return 0;
- }
- } while ((len <= 0) && (++num_blank_lines < max_blank_lines));
-
- /* we've probably got something to do, ignore graceful restart requests */
-
- r->request_time = apr_time_now();
- ll = r->the_request;
- r->method = ap_getword_white(r->pool, &ll);
-
-#if 0
-/* XXX If we want to keep track of the Method, the protocol module should do
- * it. That support isn't in the scoreboard yet. Hopefully next week
- * sometime. rbb */
- ap_update_connection_status(AP_CHILD_THREAD_FROM_ID(conn->id), "Method",
- r->method);
-#endif
-
- uri = ap_getword_white(r->pool, &ll);
-
- /* Provide quick information about the request method as soon as known */
-
- r->method_number = ap_method_number_of(r->method);
- if (r->method_number == M_GET && r->method[0] == 'H') {
- r->header_only = 1;
- }
-
- ap_parse_uri(r, uri);
-
- if (ll[0]) {
- r->assbackwards = 0;
- pro = ll;
- len = strlen(ll);
- } else {
- r->assbackwards = 1;
- pro = "HTTP/0.9";
- len = 8;
- }
- r->protocol = apr_pstrmemdup(r->pool, pro, len);
-
- /* XXX ap_update_connection_status(conn->id, "Protocol", r->protocol); */
-
- /* Avoid sscanf in the common case */
- if (len == 8
- && pro[0] == 'H' && pro[1] == 'T' && pro[2] == 'T' && pro[3] == 'P'
- && pro[4] == '/' && apr_isdigit(pro[5]) && pro[6] == '.'
- && apr_isdigit(pro[7])) {
- r->proto_num = HTTP_VERSION(pro[5] - '0', pro[7] - '0');
- }
- else if (3 == sscanf(r->protocol, "%4s/%u.%u", http, &major, &minor)
- && (strcasecmp("http", http) == 0)
- && (minor < HTTP_VERSION(1, 0)) ) /* don't allow HTTP/0.1000 */
- r->proto_num = HTTP_VERSION(major, minor);
- else
- r->proto_num = HTTP_VERSION(1, 0);
-
- return 1;
-}
-
-AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r, apr_bucket_brigade *bb)
-{
- char *last_field = NULL;
- apr_size_t last_len = 0;
- apr_size_t alloc_len = 0;
- char *field;
- char *value;
- apr_size_t len;
- int fields_read = 0;
- char *tmp_field;
-
- /*
- * Read header lines until we get the empty separator line, a read error,
- * the connection closes (EOF), reach the server limit, or we timeout.
- */
- while(1) {
- apr_status_t rv;
- int folded = 0;
-
- field = NULL;
- rv = ap_rgetline(&field, r->server->limit_req_fieldsize + 2,
- &len, r, 0, bb);
-
- if (rv != APR_SUCCESS) {
- r->status = HTTP_BAD_REQUEST;
-
- /* ap_rgetline returns APR_ENOSPC if it fills up the buffer before
- * finding the end-of-line. This is only going to happen if it
- * exceeds the configured limit for a field size.
- */
- if (rv == APR_ENOSPC && field) {
- /* insure ap_escape_html will terminate correctly */
- field[len - 1] = '\0';
- apr_table_setn(r->notes, "error-notes",
- apr_pstrcat(r->pool,
- "Size of a request header field "
- "exceeds server limit.<br />\n"
- "<pre>\n",
- ap_escape_html(r->pool, field),
- "</pre>\n", NULL));
- }
- return;
- }
-
- if (last_field != NULL) {
- if ((len > 0) && ((*field == '\t') || *field == ' ')) {
- /* This line is a continuation of the preceding line(s),
- * so append it to the line that we've set aside.
- * Note: this uses a power-of-two allocator to avoid
- * doing O(n) allocs and using O(n^2) space for
- * continuations that span many many lines.
- */
- apr_size_t fold_len = last_len + len + 1; /* trailing null */
-
- if ((fold_len - 1) > r->server->limit_req_fieldsize) {
- r->status = HTTP_BAD_REQUEST;
- /* report what we have accumulated so far before the
- * overflow (last_field) as the field with the problem
- */
- apr_table_setn(r->notes, "error-notes",
- apr_pstrcat(r->pool,
- "Size of a request header field "
- "after folding "
- "exceeds server limit.<br />\n"
- "<pre>\n",
- ap_escape_html(r->pool, last_field),
- "</pre>\n", NULL));
- return;
- }
-
- if (fold_len > alloc_len) {
- char *fold_buf;
- alloc_len += alloc_len;
- if (fold_len > alloc_len) {
- alloc_len = fold_len;
- }
- fold_buf = (char *)apr_palloc(r->pool, alloc_len);
- memcpy(fold_buf, last_field, last_len);
- last_field = fold_buf;
- }
- memcpy(last_field + last_len, field, len +1); /* +1 for nul */
- last_len += len;
- folded = 1;
- }
- else {
-
- if (r->server->limit_req_fields
- && (++fields_read > r->server->limit_req_fields)) {
- r->status = HTTP_BAD_REQUEST;
- apr_table_setn(r->notes, "error-notes",
- "The number of request header fields "
- "exceeds this server's limit.");
- return;
- }
-
- if (!(value = strchr(last_field, ':'))) { /* Find ':' or */
- r->status = HTTP_BAD_REQUEST; /* abort bad request */
- apr_table_setn(r->notes, "error-notes",
- apr_pstrcat(r->pool,
- "Request header field is "
- "missing ':' separator.<br />\n"
- "<pre>\n",
- ap_escape_html(r->pool,
- last_field),
- "</pre>\n", NULL));
- return;
- }
-
- *value = '\0';
- tmp_field = value; /* used to trim the whitespace between key
- * token and separator
- */
- ++value;
- while (*value == ' ' || *value == '\t') {
- ++value; /* Skip to start of value */
- }
-
- /* This check is to avoid any invalid memory reference while
- * traversing backwards in the key. To avoid a case where
- * the header starts with ':' (or with just some white
- * space and the ':') followed by the value
- */
- if (tmp_field > last_field) {
- --tmp_field;
- while ((tmp_field > last_field) &&
- (*tmp_field == ' ' || *tmp_field == '\t')) {
- --tmp_field; /* Removing LWS between key and ':' */
- }
- ++tmp_field;
- *tmp_field = '\0';
- }
-
- apr_table_addn(r->headers_in, last_field, value);
-
- /* reset the alloc_len so that we'll allocate a new
- * buffer if we have to do any more folding: we can't
- * use the previous buffer because its contents are
- * now part of r->headers_in
- */
- alloc_len = 0;
-
- } /* end if current line is not a continuation starting with tab */
- }
-
- /* Found a blank line, stop. */
- if (len == 0) {
- break;
- }
-
- /* Keep track of this line so that we can parse it on
- * the next loop iteration. (In the folded case, last_field
- * has been updated already.)
- */
- if (!folded) {
- last_field = field;
- last_len = len;
- }
- }
-
- apr_table_compress(r->headers_in, APR_OVERLAP_TABLES_MERGE);
-}
-
-AP_DECLARE(void) ap_get_mime_headers(request_rec *r)
-{
- apr_bucket_brigade *tmp_bb;
- tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- ap_get_mime_headers_core(r, tmp_bb);
- apr_brigade_destroy(tmp_bb);
-}
-
-request_rec *ap_read_request(conn_rec *conn)
-{
- request_rec *r;
- apr_pool_t *p;
- const char *expect;
- int access_status;
- apr_bucket_brigade *tmp_bb;
-
- apr_pool_create(&p, conn->pool);
- apr_pool_tag(p, "request");
- r = apr_pcalloc(p, sizeof(request_rec));
- r->pool = p;
- r->connection = conn;
- r->server = conn->base_server;
-
- r->user = NULL;
- r->ap_auth_type = NULL;
-
- r->allowed_methods = ap_make_method_list(p, 2);
-
- r->headers_in = apr_table_make(r->pool, 25);
- r->subprocess_env = apr_table_make(r->pool, 25);
- r->headers_out = apr_table_make(r->pool, 12);
- r->err_headers_out = apr_table_make(r->pool, 5);
- r->notes = apr_table_make(r->pool, 5);
-
- r->request_config = ap_create_request_config(r->pool);
- /* Must be set before we run create request hook */
-
- r->proto_output_filters = conn->output_filters;
- r->output_filters = r->proto_output_filters;
- r->proto_input_filters = conn->input_filters;
- r->input_filters = r->proto_input_filters;
- ap_run_create_request(r);
- r->per_dir_config = r->server->lookup_defaults;
-
- r->sent_bodyct = 0; /* bytect isn't for body */
-
- r->read_length = 0;
- r->read_body = REQUEST_NO_BODY;
-
- r->status = HTTP_REQUEST_TIME_OUT; /* Until we get a request */
- r->the_request = NULL;
-
- tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
-
- /* Get the request... */
- if (!read_request_line(r, tmp_bb)) {
- if (r->status == HTTP_REQUEST_URI_TOO_LARGE) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "request failed: URI too long (longer than %d)", r->server->limit_req_line);
- ap_send_error_response(r, 0);
- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
- apr_brigade_destroy(tmp_bb);
- return r;
- }
-
- apr_brigade_destroy(tmp_bb);
- return NULL;
- }
-
- if (!r->assbackwards) {
- ap_get_mime_headers_core(r, tmp_bb);
- if (r->status != HTTP_REQUEST_TIME_OUT) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "request failed: error reading the headers");
- ap_send_error_response(r, 0);
- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
- apr_brigade_destroy(tmp_bb);
- return r;
- }
- }
- else {
- if (r->header_only) {
- /*
- * Client asked for headers only with HTTP/0.9, which doesn't send
- * headers! Have to dink things just to make sure the error message
- * comes through...
- */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "client sent invalid HTTP/0.9 request: HEAD %s",
- r->uri);
- r->header_only = 0;
- r->status = HTTP_BAD_REQUEST;
- ap_send_error_response(r, 0);
- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
- apr_brigade_destroy(tmp_bb);
- return r;
- }
- }
-
- apr_brigade_destroy(tmp_bb);
-
- r->status = HTTP_OK; /* Until further notice. */
-
- /* update what we think the virtual host is based on the headers we've
- * now read. may update status.
- */
- ap_update_vhost_from_headers(r);
-
- /* we may have switched to another server */
- r->per_dir_config = r->server->lookup_defaults;
-
- if ((!r->hostname && (r->proto_num >= HTTP_VERSION(1, 1)))
- || ((r->proto_num == HTTP_VERSION(1, 1))
- && !apr_table_get(r->headers_in, "Host"))) {
- /*
- * Client sent us an HTTP/1.1 or later request without telling us the
- * hostname, either with a full URL or a Host: header. We therefore
- * need to (as per the 1.1 spec) send an error. As a special case,
- * HTTP/1.1 mentions twice (S9, S14.23) that a request MUST contain
- * a Host: header, and the server MUST respond with 400 if it doesn't.
- */
- r->status = HTTP_BAD_REQUEST;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "client sent HTTP/1.1 request without hostname "
- "(see RFC2616 section 14.23): %s", r->uri);
- }
-
- if (r->status != HTTP_OK) {
- ap_send_error_response(r, 0);
- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
- return r;
- }
-
- if ((access_status = ap_run_post_read_request(r))) {
- ap_die(access_status, r);
- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
- return NULL;
- }
-
- if (((expect = apr_table_get(r->headers_in, "Expect")) != NULL)
- && (expect[0] != '\0')) {
- /*
- * The Expect header field was added to HTTP/1.1 after RFC 2068
- * as a means to signal when a 100 response is desired and,
- * unfortunately, to signal a poor man's mandatory extension that
- * the server must understand or return 417 Expectation Failed.
- */
- if (strcasecmp(expect, "100-continue") == 0) {
- r->expecting_100 = 1;
- }
- else {
- r->status = HTTP_EXPECTATION_FAILED;
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "client sent an unrecognized expectation value of "
- "Expect: %s", expect);
- ap_send_error_response(r, 0);
- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r);
- ap_run_log_transaction(r);
- return r;
- }
- }
-
- ap_add_input_filter_handle(ap_http_input_filter_handle,
- NULL, r, r->connection);
-
- return r;
-}
-
-/*
- * A couple of other functions which initialize some of the fields of
- * a request structure, as appropriate for adjuncts of one kind or another
- * to a request in progress. Best here, rather than elsewhere, since
- * *someone* has to set the protocol-specific fields...
- */
-
-AP_DECLARE(void) ap_set_sub_req_protocol(request_rec *rnew,
- const request_rec *r)
-{
- rnew->the_request = r->the_request; /* Keep original request-line */
-
- rnew->assbackwards = 1; /* Don't send headers from this. */
- rnew->no_local_copy = 1; /* Don't try to send HTTP_NOT_MODIFIED for a
- * fragment. */
- rnew->method = "GET";
- rnew->method_number = M_GET;
- rnew->protocol = "INCLUDED";
-
- rnew->status = HTTP_OK;
-
- rnew->headers_in = r->headers_in;
- rnew->subprocess_env = apr_table_copy(rnew->pool, r->subprocess_env);
- rnew->headers_out = apr_table_make(rnew->pool, 5);
- rnew->err_headers_out = apr_table_make(rnew->pool, 5);
- rnew->notes = apr_table_make(rnew->pool, 5);
-
- rnew->expecting_100 = r->expecting_100;
- rnew->read_length = r->read_length;
- rnew->read_body = REQUEST_NO_BODY;
-
- rnew->main = (request_rec *) r;
-}
-
-static void end_output_stream(request_rec *r)
-{
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *b;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_eos_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- ap_pass_brigade(r->output_filters, bb);
-}
-
-AP_DECLARE(void) ap_finalize_sub_req_protocol(request_rec *sub)
-{
- /* tell the filter chain there is no more content coming */
- if (!sub->eos_sent) {
- end_output_stream(sub);
- }
-}
-
-/* finalize_request_protocol is called at completion of sending the
- * response. Its sole purpose is to send the terminating protocol
- * information for any wrappers around the response message body
- * (i.e., transfer encodings). It should have been named finalize_response.
- */
-AP_DECLARE(void) ap_finalize_request_protocol(request_rec *r)
-{
- (void) ap_discard_request_body(r);
-
- /* tell the filter chain there is no more content coming */
- if (!r->eos_sent) {
- end_output_stream(r);
- }
-}
-
-/*
- * Support for the Basic authentication protocol, and a bit for Digest.
- */
-AP_DECLARE(void) ap_note_auth_failure(request_rec *r)
-{
- const char *type = ap_auth_type(r);
- if (type) {
- if (!strcasecmp(type, "Basic"))
- ap_note_basic_auth_failure(r);
- else if (!strcasecmp(type, "Digest"))
- ap_note_digest_auth_failure(r);
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- 0, r, "need AuthType to note auth failure: %s", r->uri);
- }
-}
-
-AP_DECLARE(void) ap_note_basic_auth_failure(request_rec *r)
-{
- const char *type = ap_auth_type(r);
-
- /* if there is no AuthType configure or it is something other than
- * Basic, let ap_note_auth_failure() deal with it
- */
- if (!type || strcasecmp(type, "Basic"))
- ap_note_auth_failure(r);
- else
- apr_table_setn(r->err_headers_out,
- (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
- : "WWW-Authenticate",
- apr_pstrcat(r->pool, "Basic realm=\"", ap_auth_name(r),
- "\"", NULL));
-}
-
-AP_DECLARE(void) ap_note_digest_auth_failure(request_rec *r)
-{
- apr_table_setn(r->err_headers_out,
- (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
- : "WWW-Authenticate",
- apr_psprintf(r->pool, "Digest realm=\"%s\", nonce=\""
- "%" APR_UINT64_T_HEX_FMT "\"",
- ap_auth_name(r), (apr_uint64_t)r->request_time));
-}
-
-AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw)
-{
- const char *auth_line = apr_table_get(r->headers_in,
- (PROXYREQ_PROXY == r->proxyreq)
- ? "Proxy-Authorization"
- : "Authorization");
- const char *t;
-
- if (!(t = ap_auth_type(r)) || strcasecmp(t, "Basic"))
- return DECLINED;
-
- if (!ap_auth_name(r)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR,
- 0, r, "need AuthName: %s", r->uri);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (!auth_line) {
- ap_note_basic_auth_failure(r);
- return HTTP_UNAUTHORIZED;
- }
-
- if (strcasecmp(ap_getword(r->pool, &auth_line, ' '), "Basic")) {
- /* Client tried to authenticate using wrong auth scheme */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "client used wrong authentication scheme: %s", r->uri);
- ap_note_basic_auth_failure(r);
- return HTTP_UNAUTHORIZED;
- }
-
- while (*auth_line == ' ' || *auth_line == '\t') {
- auth_line++;
- }
-
- t = ap_pbase64decode(r->pool, auth_line);
- r->user = ap_getword_nulls (r->pool, &t, ':');
- r->ap_auth_type = "Basic";
-
- *pw = t;
-
- return OK;
-}
-
-struct content_length_ctx {
- int data_sent; /* true if the C-L filter has already sent at
- * least one bucket on to the next output filter
- * for this request
- */
-};
-
-/* This filter computes the content length, but it also computes the number
- * of bytes sent to the client. This means that this filter will always run
- * through all of the buckets in all brigades
- */
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_content_length_filter(
- ap_filter_t *f,
- apr_bucket_brigade *b)
-{
- request_rec *r = f->r;
- struct content_length_ctx *ctx;
- apr_bucket *e;
- int eos = 0;
- apr_read_type_e eblock = APR_NONBLOCK_READ;
-
- ctx = f->ctx;
- if (!ctx) {
- f->ctx = ctx = apr_palloc(r->pool, sizeof(*ctx));
- ctx->data_sent = 0;
- }
-
- /* Loop through this set of buckets to compute their length
- */
- e = APR_BRIGADE_FIRST(b);
- while (e != APR_BRIGADE_SENTINEL(b)) {
- if (APR_BUCKET_IS_EOS(e)) {
- eos = 1;
- break;
- }
- if (e->length == (apr_size_t)-1) {
- apr_size_t len;
- const char *ignored;
- apr_status_t rv;
-
- /* This is probably a pipe bucket. Send everything
- * prior to this, and then read the data for this bucket.
- */
- rv = apr_bucket_read(e, &ignored, &len, eblock);
- if (rv == APR_SUCCESS) {
- /* Attempt a nonblocking read next time through */
- eblock = APR_NONBLOCK_READ;
- r->bytes_sent += len;
- }
- else if (APR_STATUS_IS_EAGAIN(rv)) {
- /* Output everything prior to this bucket, and then
- * do a blocking read on the next batch.
- */
- if (e != APR_BRIGADE_FIRST(b)) {
- apr_bucket_brigade *split = apr_brigade_split(b, e);
- apr_bucket *flush = apr_bucket_flush_create(r->connection->bucket_alloc);
-
- APR_BRIGADE_INSERT_TAIL(b, flush);
- rv = ap_pass_brigade(f->next, b);
- if (rv != APR_SUCCESS || f->c->aborted) {
- apr_brigade_destroy(split);
- return rv;
- }
- b = split;
- e = APR_BRIGADE_FIRST(b);
-
- ctx->data_sent = 1;
- }
- eblock = APR_BLOCK_READ;
- continue;
- }
- else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "ap_content_length_filter: "
- "apr_bucket_read() failed");
- return rv;
- }
- }
- else {
- r->bytes_sent += e->length;
- }
- e = APR_BUCKET_NEXT(e);
- }
-
- /* If we've now seen the entire response and it's otherwise
- * okay to set the C-L in the response header, then do so now.
- *
- * We can only set a C-L in the response header if we haven't already
- * sent any buckets on to the next output filter for this request.
- */
- if (ctx->data_sent == 0 && eos) {
- ap_set_content_length(r, r->bytes_sent);
- }
-
- ctx->data_sent = 1;
- return ap_pass_brigade(f->next, b);
-}
-
-/*
- * Send the body of a response to the client.
- */
-AP_DECLARE(apr_status_t) ap_send_fd(apr_file_t *fd, request_rec *r,
- apr_off_t offset, apr_size_t len,
- apr_size_t *nbytes)
-{
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb = NULL;
- apr_bucket *b;
- apr_status_t rv;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_file_create(fd, offset, len, r->pool, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- rv = ap_pass_brigade(r->output_filters, bb);
- if (rv != APR_SUCCESS) {
- *nbytes = 0; /* no way to tell how many were actually sent */
- }
- else {
- *nbytes = len;
- }
-
- return rv;
-}
-
-#if APR_HAS_MMAP
-/* send data from an in-memory buffer */
-AP_DECLARE(size_t) ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset,
- size_t length)
-{
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb = NULL;
- apr_bucket *b;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_mmap_create(mm, offset, length, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- ap_pass_brigade(r->output_filters, bb);
-
- return mm->size; /* XXX - change API to report apr_status_t? */
-}
-#endif /* APR_HAS_MMAP */
-
-typedef struct {
- apr_bucket_brigade *bb;
-} old_write_filter_ctx;
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_old_write_filter(
- ap_filter_t *f, apr_bucket_brigade *bb)
-{
- old_write_filter_ctx *ctx = f->ctx;
-
- AP_DEBUG_ASSERT(ctx);
-
- if (ctx->bb != 0) {
- /* whatever is coming down the pipe (we don't care), we
- * can simply insert our buffered data at the front and
- * pass the whole bundle down the chain.
- */
- APR_BRIGADE_CONCAT(ctx->bb, bb);
- bb = ctx->bb;
- ctx->bb = NULL;
- }
-
- return ap_pass_brigade(f->next, bb);
-}
-
-static apr_status_t buffer_output(request_rec *r,
- const char *str, apr_size_t len)
-{
- conn_rec *c = r->connection;
- ap_filter_t *f;
- old_write_filter_ctx *ctx;
-
- if (len == 0)
- return APR_SUCCESS;
-
- /* future optimization: record some flags in the request_rec to
- * say whether we've added our filter, and whether it is first.
- */
-
- /* this will typically exit on the first test */
- for (f = r->output_filters; f != NULL; f = f->next) {
- if (ap_old_write_func == f->frec)
- break;
- }
-
- if (f == NULL) {
- /* our filter hasn't been added yet */
- ctx = apr_pcalloc(r->pool, sizeof(*ctx));
- ap_add_output_filter("OLD_WRITE", ctx, r, r->connection);
- f = r->output_filters;
- }
-
- /* if the first filter is not our buffering filter, then we have to
- * deliver the content through the normal filter chain
- */
- if (f != r->output_filters) {
- apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
- apr_bucket *b = apr_bucket_transient_create(str, len, c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
-
- return ap_pass_brigade(r->output_filters, bb);
- }
-
- /* grab the context from our filter */
- ctx = r->output_filters->ctx;
-
- if (ctx->bb == NULL) {
- ctx->bb = apr_brigade_create(r->pool, c->bucket_alloc);
- }
-
- return ap_fwrite(f->next, ctx->bb, str, len);
-}
-
-AP_DECLARE(int) ap_rputc(int c, request_rec *r)
-{
- char c2 = (char)c;
-
- if (r->connection->aborted) {
- return -1;
- }
-
- if (buffer_output(r, &c2, 1) != APR_SUCCESS)
- return -1;
-
- return c;
-}
-
-AP_DECLARE(int) ap_rputs(const char *str, request_rec *r)
-{
- apr_size_t len;
-
- if (r->connection->aborted)
- return -1;
-
- if (buffer_output(r, str, len = strlen(str)) != APR_SUCCESS)
- return -1;
-
- return len;
-}
-
-AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r)
-{
- if (r->connection->aborted)
- return -1;
-
- if (buffer_output(r, buf, nbyte) != APR_SUCCESS)
- return -1;
-
- return nbyte;
-}
-
-struct ap_vrprintf_data {
- apr_vformatter_buff_t vbuff;
- request_rec *r;
- char *buff;
-};
-
-static apr_status_t r_flush(apr_vformatter_buff_t *buff)
-{
- /* callback function passed to ap_vformatter to be called when
- * vformatter needs to write into buff and buff.curpos > buff.endpos */
-
- /* ap_vrprintf_data passed as a apr_vformatter_buff_t, which is then
- * "downcast" to an ap_vrprintf_data */
- struct ap_vrprintf_data *vd = (struct ap_vrprintf_data*)buff;
-
- if (vd->r->connection->aborted)
- return -1;
-
- /* r_flush is called when vbuff is completely full */
- if (buffer_output(vd->r, vd->buff, AP_IOBUFSIZE)) {
- return -1;
- }
-
- /* reset the buffer position */
- vd->vbuff.curpos = vd->buff;
- vd->vbuff.endpos = vd->buff + AP_IOBUFSIZE;
-
- return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list va)
-{
- apr_size_t written;
- struct ap_vrprintf_data vd;
- char vrprintf_buf[AP_IOBUFSIZE];
-
- vd.vbuff.curpos = vrprintf_buf;
- vd.vbuff.endpos = vrprintf_buf + AP_IOBUFSIZE;
- vd.r = r;
- vd.buff = vrprintf_buf;
-
- if (r->connection->aborted)
- return -1;
-
- written = apr_vformatter(r_flush, &vd.vbuff, fmt, va);
-
- /* tack on null terminator on remaining string */
- *(vd.vbuff.curpos) = '\0';
-
- if (written != -1) {
- int n = vd.vbuff.curpos - vrprintf_buf;
-
- /* last call to buffer_output, to finish clearing the buffer */
- if (buffer_output(r, vrprintf_buf,n) != APR_SUCCESS)
- return -1;
-
- written += n;
- }
-
- return written;
-}
-
-AP_DECLARE_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt, ...)
-{
- va_list va;
- int n;
-
- if (r->connection->aborted)
- return -1;
-
- va_start(va, fmt);
- n = ap_vrprintf(r, fmt, va);
- va_end(va);
-
- return n;
-}
-
-AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r, ...)
-{
- va_list va;
- const char *s;
- apr_size_t len;
- apr_size_t written = 0;
-
- if (r->connection->aborted)
- return -1;
-
- /* ### TODO: if the total output is large, put all the strings
- * ### into a single brigade, rather than flushing each time we
- * ### fill the buffer
- */
- va_start(va, r);
- while (1) {
- s = va_arg(va, const char *);
- if (s == NULL)
- break;
-
- len = strlen(s);
- if (buffer_output(r, s, len) != APR_SUCCESS) {
- return -1;
- }
-
- written += len;
- }
- va_end(va);
-
- return written;
-}
-
-AP_DECLARE(int) ap_rflush(request_rec *r)
-{
- conn_rec *c = r->connection;
- apr_bucket_brigade *bb;
- apr_bucket *b;
-
- bb = apr_brigade_create(r->pool, c->bucket_alloc);
- b = apr_bucket_flush_create(c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
- return -1;
-
- return 0;
-}
-
-/*
- * This function sets the Last-Modified output header field to the value
- * of the mtime field in the request structure - rationalized to keep it from
- * being in the future.
- */
-AP_DECLARE(void) ap_set_last_modified(request_rec *r)
-{
- if (!r->assbackwards) {
- apr_time_t mod_time = ap_rationalize_mtime(r, r->mtime);
- char *datestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-
- apr_rfc822_date(datestr, mod_time);
- apr_table_setn(r->headers_out, "Last-Modified", datestr);
- }
-}
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int,post_read_request,
- (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,log_transaction,
- (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(const char *,http_method,
- (const request_rec *r), (r), NULL)
-AP_IMPLEMENT_HOOK_RUN_FIRST(unsigned short,default_port,
- (const request_rec *r), (r), 0)
diff --git a/server/provider.c b/server/provider.c
deleted file mode 100644
index 87fbaade5f..0000000000
--- a/server/provider.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_pools.h"
-#include "apr_hash.h"
-
-#include "ap_provider.h"
-
-static apr_hash_t *global_providers = NULL;
-
-static apr_status_t cleanup_global_providers(void *ctx)
-{
- global_providers = NULL;
- return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_status_t) ap_register_provider(apr_pool_t *pool,
- const char *provider_group,
- const char *provider_name,
- const char *provider_version,
- const void *provider)
-{
- apr_hash_t *provider_group_hash;
- apr_hash_t *provider_version_hash;
-
- if (global_providers == NULL) {
- global_providers = apr_hash_make(pool);
- apr_pool_cleanup_register(pool, NULL, cleanup_global_providers,
- apr_pool_cleanup_null);
- }
-
- provider_group_hash = apr_hash_get(global_providers, provider_group,
- APR_HASH_KEY_STRING);
-
- if (!provider_group_hash) {
- provider_group_hash = apr_hash_make(pool);
- apr_hash_set(global_providers, provider_group, APR_HASH_KEY_STRING,
- provider_group_hash);
-
- }
-
- provider_version_hash = apr_hash_get(provider_group_hash, provider_name,
- APR_HASH_KEY_STRING);
-
- if (!provider_version_hash) {
- provider_version_hash = apr_hash_make(pool);
- apr_hash_set(provider_group_hash, provider_name, APR_HASH_KEY_STRING,
- provider_version_hash);
-
- }
-
- /* just set it. no biggy if it was there before. */
- apr_hash_set(provider_version_hash, provider_version, APR_HASH_KEY_STRING,
- provider);
-
- return APR_SUCCESS;
-}
-
-AP_DECLARE(void *) ap_lookup_provider(const char *provider_group,
- const char *provider_name,
- const char *provider_version)
-{
- apr_hash_t *provider_group_hash, *provider_name_hash;
-
- if (global_providers == NULL) {
- return NULL;
- }
-
- provider_group_hash = apr_hash_get(global_providers, provider_group,
- APR_HASH_KEY_STRING);
-
- if (provider_group_hash == NULL) {
- return NULL;
- }
-
- provider_name_hash = apr_hash_get(provider_group_hash, provider_name,
- APR_HASH_KEY_STRING);
-
- if (provider_name_hash == NULL) {
- return NULL;
- }
-
- return apr_hash_get(provider_name_hash, provider_version,
- APR_HASH_KEY_STRING);
-}
diff --git a/server/request.c b/server/request.c
deleted file mode 100644
index 9d5ca67f9e..0000000000
--- a/server/request.c
+++ /dev/null
@@ -1,1897 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_request.c: functions to get and process requests
- *
- * Rob McCool 3/21/93
- *
- * Thoroughly revamped by rst for Apache. NB this file reads
- * best from the bottom up.
- *
- */
-
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_fnmatch.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_filter.h"
-#include "util_charset.h"
-#include "util_script.h"
-
-#include "mod_core.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(translate_name)
- APR_HOOK_LINK(map_to_storage)
- APR_HOOK_LINK(check_user_id)
- APR_HOOK_LINK(fixups)
- APR_HOOK_LINK(type_checker)
- APR_HOOK_LINK(access_checker)
- APR_HOOK_LINK(auth_checker)
- APR_HOOK_LINK(insert_filter)
- APR_HOOK_LINK(create_request)
-)
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,translate_name,
- (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,map_to_storage,
- (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,check_user_id,
- (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,fixups,
- (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,type_checker,
- (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,access_checker,
- (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,auth_checker,
- (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_VOID(insert_filter, (request_rec *r), (r))
-AP_IMPLEMENT_HOOK_RUN_ALL(int, create_request,
- (request_rec *r), (r), OK, DECLINED)
-
-
-static int decl_die(int status, char *phase, request_rec *r)
-{
- if (status == DECLINED) {
- ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
- "configuration error: couldn't %s: %s", phase, r->uri);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- else {
- return status;
- }
-}
-
-/* This is the master logic for processing requests. Do NOT duplicate
- * this logic elsewhere, or the security model will be broken by future
- * API changes. Each phase must be individually optimized to pick up
- * redundant/duplicate calls by subrequests, and redirects.
- */
-AP_DECLARE(int) ap_process_request_internal(request_rec *r)
-{
- int file_req = (r->main && r->filename);
- int access_status;
-
- /* Ignore embedded %2F's in path for proxy requests */
- if (!r->proxyreq && r->parsed_uri.path) {
- core_dir_config *d;
- d = ap_get_module_config(r->per_dir_config, &core_module);
- if (d->allow_encoded_slashes) {
- access_status = ap_unescape_url_keep2f(r->parsed_uri.path);
- }
- else {
- access_status = ap_unescape_url(r->parsed_uri.path);
- }
- if (access_status) {
- if (access_status == HTTP_NOT_FOUND) {
- if (! d->allow_encoded_slashes) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "found %%2f (encoded '/') in URI "
- "(decoded='%s'), returning 404",
- r->parsed_uri.path);
- }
- }
- return access_status;
- }
- }
-
- ap_getparents(r->uri); /* OK --- shrinking transformations... */
-
- /* All file subrequests are a huge pain... they cannot bubble through the
- * next several steps. Only file subrequests are allowed an empty uri,
- * otherwise let translate_name kill the request.
- */
- if (!file_req) {
- if ((access_status = ap_location_walk(r))) {
- return access_status;
- }
-
- if ((access_status = ap_run_translate_name(r))) {
- return decl_die(access_status, "translate", r);
- }
- }
-
- /* Reset to the server default config prior to running map_to_storage
- */
- r->per_dir_config = r->server->lookup_defaults;
-
- if ((access_status = ap_run_map_to_storage(r))) {
- /* This request wasn't in storage (e.g. TRACE) */
- return access_status;
- }
-
- /* Excluding file-specific requests with no 'true' URI...
- */
- if (!file_req) {
- /* Rerun the location walk, which overrides any map_to_storage config.
- */
- if ((access_status = ap_location_walk(r))) {
- return access_status;
- }
- }
-
- /* Only on the main request! */
- if (r->main == NULL) {
- if ((access_status = ap_run_header_parser(r))) {
- return access_status;
- }
- }
-
- /* Skip authn/authz if the parent or prior request passed the authn/authz,
- * and that configuration didn't change (this requires optimized _walk()
- * functions in map_to_storage that use the same merge results given
- * identical input.) If the config changes, we must re-auth.
- */
- if (r->main && (r->main->per_dir_config == r->per_dir_config)) {
- r->user = r->main->user;
- r->ap_auth_type = r->main->ap_auth_type;
- }
- else if (r->prev && (r->prev->per_dir_config == r->per_dir_config)) {
- r->user = r->prev->user;
- r->ap_auth_type = r->prev->ap_auth_type;
- }
- else {
- switch (ap_satisfies(r)) {
- case SATISFY_ALL:
- case SATISFY_NOSPEC:
- if ((access_status = ap_run_access_checker(r)) != 0) {
- return decl_die(access_status, "check access", r);
- }
-
- if (ap_some_auth_required(r)) {
- if (((access_status = ap_run_check_user_id(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check user. No user file?"
- : "perform authentication. AuthType not set!",
- r);
- }
-
- if (((access_status = ap_run_auth_checker(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check access. No groups file?"
- : "perform authentication. AuthType not set!",
- r);
- }
- }
- break;
-
- case SATISFY_ANY:
- if (((access_status = ap_run_access_checker(r)) != 0)) {
- if (!ap_some_auth_required(r)) {
- return decl_die(access_status, "check access", r);
- }
-
- if (((access_status = ap_run_check_user_id(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check user. No user file?"
- : "perform authentication. AuthType not set!",
- r);
- }
-
- if (((access_status = ap_run_auth_checker(r)) != 0)
- || !ap_auth_type(r)) {
- return decl_die(access_status, ap_auth_type(r)
- ? "check access. No groups file?"
- : "perform authentication. AuthType not set!",
- r);
- }
- }
- break;
- }
- }
- /* XXX Must make certain the ap_run_type_checker short circuits mime
- * in mod-proxy for r->proxyreq && r->parsed_uri.scheme
- * && !strcmp(r->parsed_uri.scheme, "http")
- */
- if ((access_status = ap_run_type_checker(r)) != 0) {
- return decl_die(access_status, "find types", r);
- }
-
- if ((access_status = ap_run_fixups(r)) != 0) {
- return access_status;
- }
-
- return OK;
-}
-
-
-/* Useful caching structures to repeat _walk/merge sequences as required
- * when a subrequest or redirect reuses substantially the same config.
- *
- * Directive order in the httpd.conf file and its Includes significantly
- * impact this optimization. Grouping common blocks at the front of the
- * config that are less likely to change between a request and
- * its subrequests, or between a request and its redirects reduced
- * the work of these functions significantly.
- */
-
-typedef struct walk_walked_t {
- ap_conf_vector_t *matched; /* A dir_conf sections we matched */
- ap_conf_vector_t *merged; /* The dir_conf merged result */
-} walk_walked_t;
-
-typedef struct walk_cache_t {
- const char *cached; /* The identifier we matched */
- ap_conf_vector_t **dir_conf_tested; /* The sections we matched against */
- ap_conf_vector_t *dir_conf_merged; /* Base per_dir_config */
- ap_conf_vector_t *per_dir_result; /* per_dir_config += walked result */
- apr_array_header_t *walked; /* The list of walk_walked_t results */
-} walk_cache_t;
-
-static walk_cache_t *prep_walk_cache(apr_size_t t, request_rec *r)
-{
- walk_cache_t *cache;
- void **note;
-
- /* Find the most relevant, recent entry to work from. That would be
- * this request (on the second call), or the parent request of a
- * subrequest, or the prior request of an internal redirect. Provide
- * this _walk()er with a copy it is allowed to munge. If there is no
- * parent or prior cached request, then create a new walk cache.
- */
- note = ap_get_request_note(r, t);
- if (!note) {
- return NULL;
- }
-
- if (!(cache = *note)) {
- void **inherit_note;
-
- if ((r->main
- && ((inherit_note = ap_get_request_note(r->main, t)))
- && *inherit_note)
- || (r->prev
- && ((inherit_note = ap_get_request_note(r->prev, t)))
- && *inherit_note)) {
- cache = apr_pmemdup(r->pool, *inherit_note,
- sizeof(*cache));
- cache->walked = apr_array_copy(r->pool, cache->walked);
- }
- else {
- cache = apr_pcalloc(r->pool, sizeof(*cache));
- cache->walked = apr_array_make(r->pool, 4, sizeof(walk_walked_t));
- }
-
- *note = cache;
- }
- return cache;
-}
-
-/*****************************************************************
- *
- * Getting and checking directory configuration. Also checks the
- * FollowSymlinks and FollowSymOwner stuff, since this is really the
- * only place that can happen (barring a new mid_dir_walk callout).
- *
- * We can't do it as an access_checker module function which gets
- * called with the final per_dir_config, since we could have a directory
- * with FollowSymLinks disabled, which contains a symlink to another
- * with a .htaccess file which turns FollowSymLinks back on --- and
- * access in such a case must be denied. So, whatever it is that
- * checks FollowSymLinks needs to know the state of the options as
- * they change, all the way down.
- */
-
-
-/*
- * resolve_symlink must _always_ be called on an APR_LNK file type!
- * It will resolve the actual target file type, modification date, etc,
- * and provide any processing required for symlink evaluation.
- * Path must already be cleaned, no trailing slash, no multi-slashes,
- * and don't call this on the root!
- *
- * Simply, the number of times we deref a symlink are minimal compared
- * to the number of times we had an extra lstat() since we 'weren't sure'.
- *
- * To optimize, we stat() anything when given (opts & OPT_SYM_LINKS), otherwise
- * we start off with an lstat(). Every lstat() must be dereferenced in case
- * it points at a 'nasty' - we must always rerun check_safe_file (or similar.)
- */
-static int resolve_symlink(char *d, apr_finfo_t *lfi, int opts, apr_pool_t *p)
-{
- apr_finfo_t fi;
- int res;
- const char *savename;
-
- if (!(opts & (OPT_SYM_OWNER | OPT_SYM_LINKS))) {
- return HTTP_FORBIDDEN;
- }
-
- /* Save the name from the valid bits. */
- savename = (lfi->valid & APR_FINFO_NAME) ? lfi->name : NULL;
-
- if (opts & OPT_SYM_LINKS) {
- if ((res = apr_stat(&fi, d, lfi->valid & ~(APR_FINFO_NAME
- | APR_FINFO_LINK), p))
- != APR_SUCCESS) {
- return HTTP_FORBIDDEN;
- }
-
- /* Give back the target */
- memcpy(lfi, &fi, sizeof(fi));
- if (savename) {
- lfi->name = savename;
- lfi->valid |= APR_FINFO_NAME;
- }
-
- return OK;
- }
-
- /* OPT_SYM_OWNER only works if we can get the owner of
- * both the file and symlink. First fill in a missing
- * owner of the symlink, then get the info of the target.
- */
- if (!(lfi->valid & APR_FINFO_OWNER)) {
- if ((res = apr_stat(&fi, d,
- lfi->valid | APR_FINFO_LINK | APR_FINFO_OWNER, p))
- != APR_SUCCESS) {
- return HTTP_FORBIDDEN;
- }
- }
-
- if ((res = apr_stat(&fi, d, lfi->valid & ~(APR_FINFO_NAME), p))
- != APR_SUCCESS) {
- return HTTP_FORBIDDEN;
- }
-
- if (apr_uid_compare(fi.user, lfi->user) != APR_SUCCESS) {
- return HTTP_FORBIDDEN;
- }
-
- /* Give back the target */
- memcpy(lfi, &fi, sizeof(fi));
- if (savename) {
- lfi->name = savename;
- lfi->valid |= APR_FINFO_NAME;
- }
-
- return OK;
-}
-
-
-/*
- * As we walk the directory configuration, the merged config won't
- * be 'rooted' to a specific vhost until the very end of the merge.
- *
- * We need a very fast mini-merge to a real, vhost-rooted merge
- * of core.opts and core.override, the only options tested within
- * directory_walk itself.
- *
- * See core.c::merge_core_dir_configs() for explanation.
- */
-
-typedef struct core_opts_t {
- allow_options_t opts;
- allow_options_t add;
- allow_options_t remove;
- overrides_t override;
- overrides_t override_opts;
-} core_opts_t;
-
-static void core_opts_merge(const ap_conf_vector_t *sec, core_opts_t *opts)
-{
- core_dir_config *this_dir = ap_get_module_config(sec, &core_module);
-
- if (!this_dir) {
- return;
- }
-
- if (this_dir->opts & OPT_UNSET) {
- opts->add = (opts->add & ~this_dir->opts_remove)
- | this_dir->opts_add;
- opts->remove = (opts->remove & ~this_dir->opts_add)
- | this_dir->opts_remove;
- opts->opts = (opts->opts & ~opts->remove) | opts->add;
- }
- else {
- opts->opts = this_dir->opts;
- opts->add = this_dir->opts_add;
- opts->remove = this_dir->opts_remove;
- }
-
- if (!(this_dir->override & OR_UNSET)) {
- opts->override = this_dir->override;
- }
- if (!(this_dir->override_opts & OR_UNSET)) {
- opts->override_opts = this_dir->override_opts;
- }
-}
-
-
-/*****************************************************************
- *
- * Getting and checking directory configuration. Also checks the
- * FollowSymlinks and FollowSymOwner stuff, since this is really the
- * only place that can happen (barring a new mid_dir_walk callout).
- *
- * We can't do it as an access_checker module function which gets
- * called with the final per_dir_config, since we could have a directory
- * with FollowSymLinks disabled, which contains a symlink to another
- * with a .htaccess file which turns FollowSymLinks back on --- and
- * access in such a case must be denied. So, whatever it is that
- * checks FollowSymLinks needs to know the state of the options as
- * they change, all the way down.
- */
-
-AP_DECLARE(int) ap_directory_walk(request_rec *r)
-{
- ap_conf_vector_t *now_merged = NULL;
- core_server_config *sconf = ap_get_module_config(r->server->module_config,
- &core_module);
- ap_conf_vector_t **sec_ent = (ap_conf_vector_t **) sconf->sec_dir->elts;
- int num_sec = sconf->sec_dir->nelts;
- walk_cache_t *cache;
- char *entry_dir;
- apr_status_t rv;
-
- /* XXX: Better (faster) tests needed!!!
- *
- * "OK" as a response to a real problem is not _OK_, but to allow broken
- * modules to proceed, we will permit the not-a-path filename to pass the
- * following two tests. This behavior may be revoked in future versions
- * of Apache. We still must catch it later if it's heading for the core
- * handler. Leave INFO notes here for module debugging.
- */
- if (r->filename == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "Module bug? Request filename is missing for URI %s",
- r->uri);
- return OK;
- }
-
- /* Canonicalize the file path without resolving filename case or aliases
- * so we can begin by checking the cache for a recent directory walk.
- * This call will ensure we have an absolute path in the same pass.
- */
- if ((rv = apr_filepath_merge(&entry_dir, NULL, r->filename,
- APR_FILEPATH_NOTRELATIVE, r->pool))
- != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
- "Module bug? Request filename path %s is invalid or "
- "or not absolute for uri %s",
- r->filename, r->uri);
- return OK;
- }
-
- /* XXX Notice that this forces path_info to be canonical. That might
- * not be desired by all apps. However, some of those same apps likely
- * have significant security holes.
- */
- r->filename = entry_dir;
-
- cache = prep_walk_cache(AP_NOTE_DIRECTORY_WALK, r);
-
- /* If this is not a dirent subrequest with a preconstructed
- * r->finfo value, then we can simply stat the filename to
- * save burning mega-cycles with unneeded stats - if this is
- * an exact file match. We don't care about failure... we
- * will stat by component failing this meager attempt.
- *
- * It would be nice to distinguish APR_ENOENT from other
- * types of failure, such as APR_ENOTDIR. We can do something
- * with APR_ENOENT, knowing that the path is good.
- */
- if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {
- rv = apr_stat(&r->finfo, r->filename, APR_FINFO_MIN, r->pool);
-
- /* some OSs will return APR_SUCCESS/APR_REG if we stat
- * a regular file but we have '/' at the end of the name;
- *
- * other OSs will return APR_ENOTDIR for that situation;
- *
- * handle it the same everywhere by simulating a failure
- * if it looks like a directory but really isn't
- *
- * Also reset if the stat failed, just for safety.
- */
- if ((rv != APR_SUCCESS) ||
- (r->finfo.filetype &&
- (r->finfo.filetype != APR_DIR) &&
- (r->filename[strlen(r->filename) - 1] == '/'))) {
- r->finfo.filetype = 0; /* forget what we learned */
- }
- }
-
- if (r->finfo.filetype == APR_REG) {
- entry_dir = ap_make_dirstr_parent(r->pool, entry_dir);
- }
- else if (r->filename[strlen(r->filename) - 1] != '/') {
- entry_dir = apr_pstrcat(r->pool, r->filename, "/", NULL);
- }
-
- /* If we have a file already matches the path of r->filename,
- * and the vhost's list of directory sections hasn't changed,
- * we can skip rewalking the directory_walk entries.
- */
- if (cache->cached
- && ((r->finfo.filetype == APR_REG)
- || ((r->finfo.filetype == APR_DIR)
- && (!r->path_info || !*r->path_info)))
- && (cache->dir_conf_tested == sec_ent)
- && (strcmp(entry_dir, cache->cached) == 0)) {
- /* Well this looks really familiar! If our end-result (per_dir_result)
- * didn't change, we have absolutely nothing to do :)
- * Otherwise (as is the case with most dir_merged/file_merged requests)
- * we must merge our dir_conf_merged onto this new r->per_dir_config.
- */
- if (r->per_dir_config == cache->per_dir_result) {
- return OK;
- }
-
- if (r->per_dir_config == cache->dir_conf_merged) {
- r->per_dir_config = cache->per_dir_result;
- return OK;
- }
-
- if (cache->walked->nelts) {
- now_merged = ((walk_walked_t*)cache->walked->elts)
- [cache->walked->nelts - 1].merged;
- }
- }
- else {
- /* We start now_merged from NULL since we want to build
- * a locations list that can be merged to any vhost.
- */
- int sec_idx;
- int matches = cache->walked->nelts;
- walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
- core_dir_config *this_dir;
- core_opts_t opts;
- apr_finfo_t thisinfo;
- char *save_path_info;
- apr_size_t buflen;
- char *buf;
- unsigned int seg, startseg;
-
- /* Invariant: from the first time filename_len is set until
- * it goes out of scope, filename_len==strlen(r->filename)
- */
- apr_size_t filename_len;
-#ifdef CASE_BLIND_FILESYSTEM
- apr_size_t canonical_len;
-#endif
-
- /*
- * We must play our own mini-merge game here, for the few
- * running dir_config values we care about within dir_walk.
- * We didn't start the merge from r->per_dir_config, so we
- * accumulate opts and override as we merge, from the globals.
- */
- this_dir = ap_get_module_config(r->per_dir_config, &core_module);
- opts.opts = this_dir->opts;
- opts.add = this_dir->opts_add;
- opts.remove = this_dir->opts_remove;
- opts.override = this_dir->override;
-
- /* Set aside path_info to merge back onto path_info later.
- * If r->filename is a directory, we must remerge the path_info,
- * before we continue! [Directories cannot, by defintion, have
- * path info. Either the next segment is not-found, or a file.]
- *
- * r->path_info tracks the unconsumed source path.
- * r->filename tracks the path as we process it
- */
- if ((r->finfo.filetype == APR_DIR) && r->path_info && *r->path_info)
- {
- if ((rv = apr_filepath_merge(&r->path_info, r->filename,
- r->path_info,
- APR_FILEPATH_NOTABOVEROOT, r->pool))
- != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "dir_walk error, path_info %s is not relative "
- "to the filename path %s for uri %s",
- r->path_info, r->filename, r->uri);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- save_path_info = NULL;
- }
- else {
- save_path_info = r->path_info;
- r->path_info = r->filename;
- }
-
-#ifdef CASE_BLIND_FILESYSTEM
-
- canonical_len = 0;
- while (r->canonical_filename && r->canonical_filename[canonical_len]
- && (r->canonical_filename[canonical_len]
- == r->path_info[canonical_len])) {
- ++canonical_len;
- }
-
- while (canonical_len
- && ((r->canonical_filename[canonical_len - 1] != '/'
- && r->canonical_filename[canonical_len - 1])
- || (r->path_info[canonical_len - 1] != '/'
- && r->path_info[canonical_len - 1]))) {
- --canonical_len;
- }
-
- /*
- * Now build r->filename component by component, starting
- * with the root (on Unix, simply "/"). We will make a huge
- * assumption here for efficiency, that any canonical path
- * already given included a canonical root.
- */
- rv = apr_filepath_root((const char **)&r->filename,
- (const char **)&r->path_info,
- canonical_len ? 0 : APR_FILEPATH_TRUENAME,
- r->pool);
- filename_len = strlen(r->filename);
-
- /*
- * Bad assumption above? If the root's length is longer
- * than the canonical length, then it cannot be trusted as
- * a truename. So try again, this time more seriously.
- */
- if ((rv == APR_SUCCESS) && canonical_len
- && (filename_len > canonical_len)) {
- rv = apr_filepath_root((const char **)&r->filename,
- (const char **)&r->path_info,
- APR_FILEPATH_TRUENAME, r->pool);
- filename_len = strlen(r->filename);
- canonical_len = 0;
- }
-
-#else /* ndef CASE_BLIND_FILESYSTEM, really this simple for Unix today; */
-
- rv = apr_filepath_root((const char **)&r->filename,
- (const char **)&r->path_info,
- 0, r->pool);
- filename_len = strlen(r->filename);
-
-#endif
-
- if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "dir_walk error, could not determine the root "
- "path of filename %s%s for uri %s",
- r->filename, r->path_info, r->uri);
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* Working space for terminating null and an extra / is required.
- */
- buflen = filename_len + strlen(r->path_info) + 2;
- buf = apr_palloc(r->pool, buflen);
- memcpy(buf, r->filename, filename_len + 1);
- r->filename = buf;
- thisinfo.valid = APR_FINFO_TYPE;
- thisinfo.filetype = APR_DIR; /* It's the root, of course it's a dir */
-
- /*
- * seg keeps track of which segment we've copied.
- * sec_idx keeps track of which section we're on, since sections are
- * ordered by number of segments. See core_reorder_directories
- * startseg tells us how many segments describe the root path
- * e.g. the complete path "//host/foo/" to a UNC share (4)
- */
- startseg = seg = ap_count_dirs(r->filename);
- sec_idx = 0;
-
- /*
- * Go down the directory hierarchy. Where we have to check for
- * symlinks, do so. Where a .htaccess file has permission to
- * override anything, try to find one.
- */
- do {
- int res;
- char *seg_name;
- char *delim;
- int temp_slash=0;
-
- /* We have no trailing slash, but we sure would appreciate one.
- * However, we don't want to append a / our first time through.
- */
- if ((seg > startseg) && r->filename[filename_len-1] != '/') {
- r->filename[filename_len++] = '/';
- r->filename[filename_len] = 0;
- temp_slash=1;
- }
-
- /* Begin *this* level by looking for matching <Directory> sections
- * from the server config.
- */
- for (; sec_idx < num_sec; ++sec_idx) {
-
- ap_conf_vector_t *entry_config = sec_ent[sec_idx];
- core_dir_config *entry_core;
- entry_core = ap_get_module_config(entry_config, &core_module);
-
- /* No more possible matches for this many segments?
- * We are done when we find relative/regex/longer components.
- */
- if (entry_core->r || entry_core->d_components > seg) {
- break;
- }
-
- /* We will never skip '0' element components, e.g. plain old
- * <Directory >, and <Directory "/"> are classified as zero
- * so that Win32/Netware/OS2 etc all pick them up.
- * Otherwise, skip over the mismatches.
- */
- if (entry_core->d_components
- && ((entry_core->d_components < seg)
- || (entry_core->d_is_fnmatch
- ? (apr_fnmatch(entry_core->d, r->filename,
- APR_FNM_PATHNAME) != APR_SUCCESS)
- : (strcmp(r->filename, entry_core->d) != 0)))) {
- continue;
- }
-
- /* If we haven't continue'd above, we have a match.
- *
- * Calculate our full-context core opts & override.
- */
- core_opts_merge(sec_ent[sec_idx], &opts);
-
- /* If we merged this same section last time, reuse it
- */
- if (matches) {
- if (last_walk->matched == sec_ent[sec_idx]) {
- now_merged = last_walk->merged;
- ++last_walk;
- --matches;
- continue;
- }
-
- /* We fell out of sync. This is our own copy of walked,
- * so truncate the remaining matches and reset remaining.
- */
- cache->walked->nelts -= matches;
- matches = 0;
- }
-
- if (now_merged) {
- now_merged = ap_merge_per_dir_configs(r->pool,
- now_merged,
- sec_ent[sec_idx]);
- }
- else {
- now_merged = sec_ent[sec_idx];
- }
-
- last_walk = (walk_walked_t*)apr_array_push(cache->walked);
- last_walk->matched = sec_ent[sec_idx];
- last_walk->merged = now_merged;
- }
-
- /* If .htaccess files are enabled, check for one, provided we
- * have reached a real path.
- */
- do { /* Not really a loop, just a break'able code block */
-
- ap_conf_vector_t *htaccess_conf = NULL;
-
- /* No htaccess in an incomplete root path,
- * nor if it's disabled
- */
- if (seg < startseg || !opts.override) {
- break;
- }
-
- res = ap_parse_htaccess(&htaccess_conf, r, opts.override,
- opts.override_opts,
- apr_pstrdup(r->pool, r->filename),
- sconf->access_name);
- if (res) {
- return res;
- }
-
- if (!htaccess_conf) {
- break;
- }
-
- /* If we are still here, we found our htaccess.
- *
- * Calculate our full-context core opts & override.
- */
- core_opts_merge(htaccess_conf, &opts);
-
- /* If we merged this same htaccess last time, reuse it...
- * this wouldn't work except that we cache the htaccess
- * sections for the lifetime of the request, so we match
- * the same conf. Good planning (no, pure luck ;)
- */
- if (matches) {
- if (last_walk->matched == htaccess_conf) {
- now_merged = last_walk->merged;
- ++last_walk;
- --matches;
- break;
- }
-
- /* We fell out of sync. This is our own copy of walked,
- * so truncate the remaining matches and reset
- * remaining.
- */
- cache->walked->nelts -= matches;
- matches = 0;
- }
-
- if (now_merged) {
- now_merged = ap_merge_per_dir_configs(r->pool,
- now_merged,
- htaccess_conf);
- }
- else {
- now_merged = htaccess_conf;
- }
-
- last_walk = (walk_walked_t*)apr_array_push(cache->walked);
- last_walk->matched = htaccess_conf;
- last_walk->merged = now_merged;
-
- } while (0); /* Only one htaccess, not a real loop */
-
- /* That temporary trailing slash was useful, now drop it.
- */
- if (temp_slash) {
- r->filename[--filename_len] = '\0';
- }
-
- /* Time for all good things to come to an end?
- */
- if (!r->path_info || !*r->path_info) {
- break;
- }
-
- /* Now it's time for the next segment...
- * We will assume the next element is an end node, and fix it up
- * below as necessary...
- */
-
- seg_name = r->filename + filename_len;
- delim = strchr(r->path_info + (*r->path_info == '/' ? 1 : 0), '/');
- if (delim) {
- size_t path_info_len = delim - r->path_info;
- *delim = '\0';
- memcpy(seg_name, r->path_info, path_info_len + 1);
- filename_len += path_info_len;
- r->path_info = delim;
- *delim = '/';
- }
- else {
- size_t path_info_len = strlen(r->path_info);
- memcpy(seg_name, r->path_info, path_info_len + 1);
- filename_len += path_info_len;
- r->path_info += path_info_len;
- }
- if (*seg_name == '/')
- ++seg_name;
-
- /* If nothing remained but a '/' string, we are finished
- * XXX: NO WE ARE NOT!!! Now process this puppy!!! */
- if (!*seg_name) {
- break;
- }
-
- /* First optimization;
- * If...we knew r->filename was a file, and
- * if...we have strict (case-sensitive) filenames, or
- * we know the canonical_filename matches to _this_ name, and
- * if...we have allowed symlinks
- * skip the lstat and dummy up an APR_DIR value for thisinfo.
- */
- if (r->finfo.filetype
-#ifdef CASE_BLIND_FILESYSTEM
- && (filename_len <= canonical_len)
-#endif
- && ((opts.opts & (OPT_SYM_OWNER | OPT_SYM_LINKS)) == OPT_SYM_LINKS))
- {
-
- thisinfo.filetype = APR_DIR;
- ++seg;
- continue;
- }
-
- /* We choose apr_stat with flag APR_FINFO_LINK here, rather that
- * plain apr_stat, so that we capture this path object rather than
- * its target. We will replace the info with our target's info
- * below. We especially want the name of this 'link' object, not
- * the name of its target, if we are fixing the filename
- * case/resolving aliases.
- */
- rv = apr_stat(&thisinfo, r->filename,
- APR_FINFO_MIN | APR_FINFO_NAME | APR_FINFO_LINK,
- r->pool);
-
- if (APR_STATUS_IS_ENOENT(rv)) {
- /* Nothing? That could be nice. But our directory
- * walk is done.
- */
- thisinfo.filetype = APR_NOFILE;
- break;
- }
- else if (APR_STATUS_IS_EACCES(rv)) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "access to %s denied", r->uri);
- return r->status = HTTP_FORBIDDEN;
- }
- else if ((rv != APR_SUCCESS && rv != APR_INCOMPLETE)
- || !(thisinfo.valid & APR_FINFO_TYPE)) {
- /* If we hit ENOTDIR, we must have over-optimized, deny
- * rather than assume not found.
- */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
- "access to %s failed", r->uri);
- return r->status = HTTP_FORBIDDEN;
- }
-
- /* Fix up the path now if we have a name, and they don't agree
- */
- if ((thisinfo.valid & APR_FINFO_NAME)
- && strcmp(seg_name, thisinfo.name)) {
- /* TODO: provide users an option that an internal/external
- * redirect is required here? We need to walk the URI and
- * filename in tandem to properly correlate these.
- */
- strcpy(seg_name, thisinfo.name);
- filename_len = strlen(r->filename);
- }
-
- if (thisinfo.filetype == APR_LNK) {
- /* Is this a possibly acceptable symlink?
- */
- if ((res = resolve_symlink(r->filename, &thisinfo,
- opts.opts, r->pool)) != OK) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Symbolic link not allowed: %s",
- r->filename);
- return r->status = res;
- }
- }
-
- /* Ok, we are done with the link's info, test the real target
- */
- if (thisinfo.filetype == APR_REG ||
- thisinfo.filetype == APR_NOFILE) {
- /* That was fun, nothing left for us here
- */
- break;
- }
- else if (thisinfo.filetype != APR_DIR) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Forbidden: %s doesn't point to "
- "a file or directory",
- r->filename);
- return r->status = HTTP_FORBIDDEN;
- }
-
- ++seg;
- } while (thisinfo.filetype == APR_DIR);
-
- /* If we have _not_ optimized, this is the time to recover
- * the final stat result.
- */
- if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {
- r->finfo = thisinfo;
- }
-
- /* Now splice the saved path_info back onto any new path_info
- */
- if (save_path_info) {
- if (r->path_info && *r->path_info) {
- r->path_info = ap_make_full_path(r->pool, r->path_info,
- save_path_info);
- }
- else {
- r->path_info = save_path_info;
- }
- }
-
- /*
- * Now we'll deal with the regexes, note we pick up sec_idx
- * where we left off (we gave up after we hit entry_core->r)
- */
- for (; sec_idx < num_sec; ++sec_idx) {
-
- core_dir_config *entry_core;
- entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
- if (!entry_core->r) {
- continue;
- }
-
- if (ap_regexec(entry_core->r, r->filename, 0, NULL, REG_NOTEOL)) {
- continue;
- }
-
- /* If we haven't already continue'd above, we have a match.
- *
- * Calculate our full-context core opts & override.
- */
- core_opts_merge(sec_ent[sec_idx], &opts);
-
- /* If we merged this same section last time, reuse it
- */
- if (matches) {
- if (last_walk->matched == sec_ent[sec_idx]) {
- now_merged = last_walk->merged;
- ++last_walk;
- --matches;
- continue;
- }
-
- /* We fell out of sync. This is our own copy of walked,
- * so truncate the remaining matches and reset remaining.
- */
- cache->walked->nelts -= matches;
- matches = 0;
- }
-
- if (now_merged) {
- now_merged = ap_merge_per_dir_configs(r->pool,
- now_merged,
- sec_ent[sec_idx]);
- }
- else {
- now_merged = sec_ent[sec_idx];
- }
-
- last_walk = (walk_walked_t*)apr_array_push(cache->walked);
- last_walk->matched = sec_ent[sec_idx];
- last_walk->merged = now_merged;
- }
-
- /* Whoops - everything matched in sequence, but the original walk
- * found some additional matches. Truncate them.
- */
- if (matches) {
- cache->walked->nelts -= matches;
- }
- }
-
-/* It seems this shouldn't be needed anymore. We translated the
- x symlink above into a real resource, and should have died up there.
- x Even if we keep this, it needs more thought (maybe an r->file_is_symlink)
- x perhaps it should actually happen in file_walk, so we catch more
- x obscure cases in autoindex sub requests, etc.
- x
- x * Symlink permissions are determined by the parent. If the request is
- x * for a directory then applying the symlink test here would use the
- x * permissions of the directory as opposed to its parent. Consider a
- x * symlink pointing to a dir with a .htaccess disallowing symlinks. If
- x * you access /symlink (or /symlink/) you would get a 403 without this
- x * APR_DIR test. But if you accessed /symlink/index.html, for example,
- x * you would *not* get the 403.
- x
- x if (r->finfo.filetype != APR_DIR
- x && (res = resolve_symlink(r->filename, r->info, ap_allow_options(r),
- x r->pool))) {
- x ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- x "Symbolic link not allowed: %s", r->filename);
- x return res;
- x }
- */
-
- /* Save future sub-requestors much angst in processing
- * this subrequest. If dir_walk couldn't canonicalize
- * the file path, nothing can.
- */
- r->canonical_filename = r->filename;
-
- if (r->finfo.filetype == APR_DIR) {
- cache->cached = r->filename;
- }
- else {
- cache->cached = ap_make_dirstr_parent(r->pool, r->filename);
- }
-
- cache->dir_conf_tested = sec_ent;
- cache->dir_conf_merged = r->per_dir_config;
-
- /* Merge our cache->dir_conf_merged construct with the r->per_dir_configs,
- * and note the end result to (potentially) skip this step next time.
- */
- if (now_merged) {
- r->per_dir_config = ap_merge_per_dir_configs(r->pool,
- r->per_dir_config,
- now_merged);
- }
- cache->per_dir_result = r->per_dir_config;
-
- return OK;
-}
-
-
-AP_DECLARE(int) ap_location_walk(request_rec *r)
-{
- ap_conf_vector_t *now_merged = NULL;
- core_server_config *sconf = ap_get_module_config(r->server->module_config,
- &core_module);
- ap_conf_vector_t **sec_ent = (ap_conf_vector_t **)sconf->sec_url->elts;
- int num_sec = sconf->sec_url->nelts;
- walk_cache_t *cache;
- const char *entry_uri;
-
- /* No tricks here, there are no <Locations > to parse in this vhost.
- * We won't destroy the cache, just in case _this_ redirect is later
- * redirected again to a vhost with <Location > blocks to optimize.
- */
- if (!num_sec) {
- return OK;
- }
-
- cache = prep_walk_cache(AP_NOTE_LOCATION_WALK, r);
-
- /* Location and LocationMatch differ on their behaviour w.r.t. multiple
- * slashes. Location matches multiple slashes with a single slash,
- * LocationMatch doesn't. An exception, for backwards brokenness is
- * absoluteURIs... in which case neither match multiple slashes.
- */
- if (r->uri[0] != '/') {
- entry_uri = r->uri;
- }
- else {
- char *uri = apr_pstrdup(r->pool, r->uri);
- ap_no2slash(uri);
- entry_uri = uri;
- }
-
- /* If we have an cache->cached location that matches r->uri,
- * and the vhost's list of locations hasn't changed, we can skip
- * rewalking the location_walk entries.
- */
- if (cache->cached
- && (cache->dir_conf_tested == sec_ent)
- && (strcmp(entry_uri, cache->cached) == 0)) {
- /* Well this looks really familiar! If our end-result (per_dir_result)
- * didn't change, we have absolutely nothing to do :)
- * Otherwise (as is the case with most dir_merged/file_merged requests)
- * we must merge our dir_conf_merged onto this new r->per_dir_config.
- */
- if (r->per_dir_config == cache->per_dir_result) {
- return OK;
- }
-
- if (r->per_dir_config == cache->dir_conf_merged) {
- r->per_dir_config = cache->per_dir_result;
- return OK;
- }
-
- if (cache->walked->nelts) {
- now_merged = ((walk_walked_t*)cache->walked->elts)
- [cache->walked->nelts - 1].merged;
- }
- }
- else {
- /* We start now_merged from NULL since we want to build
- * a locations list that can be merged to any vhost.
- */
- int len, sec_idx;
- int matches = cache->walked->nelts;
- walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
- cache->cached = entry_uri;
-
- /* Go through the location entries, and check for matches.
- * We apply the directive sections in given order, we should
- * really try them with the most general first.
- */
- for (sec_idx = 0; sec_idx < num_sec; ++sec_idx) {
-
- core_dir_config *entry_core;
- entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
- /* ### const strlen can be optimized in location config parsing */
- len = strlen(entry_core->d);
-
- /* Test the regex, fnmatch or string as appropriate.
- * If it's a strcmp, and the <Location > pattern was
- * not slash terminated, then this uri must be slash
- * terminated (or at the end of the string) to match.
- */
- if (entry_core->r
- ? ap_regexec(entry_core->r, r->uri, 0, NULL, 0)
- : (entry_core->d_is_fnmatch
- ? apr_fnmatch(entry_core->d, cache->cached, APR_FNM_PATHNAME)
- : (strncmp(entry_core->d, cache->cached, len)
- || (entry_core->d[len - 1] != '/'
- && cache->cached[len] != '/'
- && cache->cached[len] != '\0')))) {
- continue;
- }
-
- /* If we merged this same section last time, reuse it
- */
- if (matches) {
- if (last_walk->matched == sec_ent[sec_idx]) {
- now_merged = last_walk->merged;
- ++last_walk;
- --matches;
- continue;
- }
-
- /* We fell out of sync. This is our own copy of walked,
- * so truncate the remaining matches and reset remaining.
- */
- cache->walked->nelts -= matches;
- matches = 0;
- }
-
- if (now_merged) {
- now_merged = ap_merge_per_dir_configs(r->pool,
- now_merged,
- sec_ent[sec_idx]);
- }
- else {
- now_merged = sec_ent[sec_idx];
- }
-
- last_walk = (walk_walked_t*)apr_array_push(cache->walked);
- last_walk->matched = sec_ent[sec_idx];
- last_walk->merged = now_merged;
- }
-
- /* Whoops - everything matched in sequence, but the original walk
- * found some additional matches. Truncate them.
- */
- if (matches) {
- cache->walked->nelts -= matches;
- }
- }
-
- cache->dir_conf_tested = sec_ent;
- cache->dir_conf_merged = r->per_dir_config;
-
- /* Merge our cache->dir_conf_merged construct with the r->per_dir_configs,
- * and note the end result to (potentially) skip this step next time.
- */
- if (now_merged) {
- r->per_dir_config = ap_merge_per_dir_configs(r->pool,
- r->per_dir_config,
- now_merged);
- }
- cache->per_dir_result = r->per_dir_config;
-
- return OK;
-}
-
-AP_DECLARE(int) ap_file_walk(request_rec *r)
-{
- ap_conf_vector_t *now_merged = NULL;
- core_dir_config *dconf = ap_get_module_config(r->per_dir_config,
- &core_module);
- ap_conf_vector_t **sec_ent = (ap_conf_vector_t **)dconf->sec_file->elts;
- int num_sec = dconf->sec_file->nelts;
- walk_cache_t *cache;
- const char *test_file;
-
- /* To allow broken modules to proceed, we allow missing filenames to pass.
- * We will catch it later if it's heading for the core handler.
- * directory_walk already posted an INFO note for module debugging.
- */
- if (r->filename == NULL) {
- return OK;
- }
-
- cache = prep_walk_cache(AP_NOTE_FILE_WALK, r);
-
- /* No tricks here, there are just no <Files > to parse in this context.
- * We won't destroy the cache, just in case _this_ redirect is later
- * redirected again to a context containing the same or similar <Files >.
- */
- if (!num_sec) {
- return OK;
- }
-
- /* Get the basename .. and copy for the cache just
- * in case r->filename is munged by another module
- */
- test_file = strrchr(r->filename, '/');
- if (test_file == NULL) {
- test_file = apr_pstrdup(r->pool, r->filename);
- }
- else {
- test_file = apr_pstrdup(r->pool, ++test_file);
- }
-
- /* If we have an cache->cached file name that matches test_file,
- * and the directory's list of file sections hasn't changed, we
- * can skip rewalking the file_walk entries.
- */
- if (cache->cached
- && (cache->dir_conf_tested == sec_ent)
- && (strcmp(test_file, cache->cached) == 0)) {
- /* Well this looks really familiar! If our end-result (per_dir_result)
- * didn't change, we have absolutely nothing to do :)
- * Otherwise (as is the case with most dir_merged requests)
- * we must merge our dir_conf_merged onto this new r->per_dir_config.
- */
- if (r->per_dir_config == cache->per_dir_result) {
- return OK;
- }
-
- if (r->per_dir_config == cache->dir_conf_merged) {
- r->per_dir_config = cache->per_dir_result;
- return OK;
- }
-
- if (cache->walked->nelts) {
- now_merged = ((walk_walked_t*)cache->walked->elts)
- [cache->walked->nelts - 1].merged;
- }
- }
- else {
- /* We start now_merged from NULL since we want to build
- * a file section list that can be merged to any dir_walk.
- */
- int sec_idx;
- int matches = cache->walked->nelts;
- walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
- cache->cached = test_file;
-
- /* Go through the location entries, and check for matches.
- * We apply the directive sections in given order, we should
- * really try them with the most general first.
- */
- for (sec_idx = 0; sec_idx < num_sec; ++sec_idx) {
-
- core_dir_config *entry_core;
- entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
- if (entry_core->r
- ? ap_regexec(entry_core->r, cache->cached , 0, NULL, 0)
- : (entry_core->d_is_fnmatch
- ? apr_fnmatch(entry_core->d, cache->cached, APR_FNM_PATHNAME)
- : strcmp(entry_core->d, cache->cached))) {
- continue;
- }
-
- /* If we merged this same section last time, reuse it
- */
- if (matches) {
- if (last_walk->matched == sec_ent[sec_idx]) {
- now_merged = last_walk->merged;
- ++last_walk;
- --matches;
- continue;
- }
-
- /* We fell out of sync. This is our own copy of walked,
- * so truncate the remaining matches and reset remaining.
- */
- cache->walked->nelts -= matches;
- matches = 0;
- }
-
- if (now_merged) {
- now_merged = ap_merge_per_dir_configs(r->pool,
- now_merged,
- sec_ent[sec_idx]);
- }
- else {
- now_merged = sec_ent[sec_idx];
- }
-
- last_walk = (walk_walked_t*)apr_array_push(cache->walked);
- last_walk->matched = sec_ent[sec_idx];
- last_walk->merged = now_merged;
- }
-
- /* Whoops - everything matched in sequence, but the original walk
- * found some additional matches. Truncate them.
- */
- if (matches) {
- cache->walked->nelts -= matches;
- }
- }
-
- cache->dir_conf_tested = sec_ent;
- cache->dir_conf_merged = r->per_dir_config;
-
- /* Merge our cache->dir_conf_merged construct with the r->per_dir_configs,
- * and note the end result to (potentially) skip this step next time.
- */
- if (now_merged) {
- r->per_dir_config = ap_merge_per_dir_configs(r->pool,
- r->per_dir_config,
- now_merged);
- }
- cache->per_dir_result = r->per_dir_config;
-
- return OK;
-}
-
-/*****************************************************************
- *
- * The sub_request mechanism.
- *
- * Fns to look up a relative URI from, e.g., a map file or SSI document.
- * These do all access checks, etc., but don't actually run the transaction
- * ... use run_sub_req below for that. Also, be sure to use destroy_sub_req
- * as appropriate if you're likely to be creating more than a few of these.
- * (An early Apache version didn't destroy the sub_reqs used in directory
- * indexing. The result, when indexing a directory with 800-odd files in
- * it, was massively excessive storage allocation).
- *
- * Note more manipulation of protocol-specific vars in the request
- * structure...
- */
-
-static request_rec *make_sub_request(const request_rec *r,
- ap_filter_t *next_filter)
-{
- apr_pool_t *rrp;
- request_rec *rnew;
-
- apr_pool_create(&rrp, r->pool);
- apr_pool_tag(rrp, "subrequest");
- rnew = apr_pcalloc(rrp, sizeof(request_rec));
- rnew->pool = rrp;
-
- rnew->hostname = r->hostname;
- rnew->request_time = r->request_time;
- rnew->connection = r->connection;
- rnew->server = r->server;
-
- rnew->request_config = ap_create_request_config(rnew->pool);
-
- /* Start a clean config from this subrequest's vhost. Optimization in
- * Location/File/Dir walks from the parent request assure that if the
- * config blocks of the subrequest match the parent request, no merges
- * will actually occur (and generally a minimal number of merges are
- * required, even if the parent and subrequest aren't quite identical.)
- */
- rnew->per_dir_config = r->server->lookup_defaults;
-
- rnew->htaccess = r->htaccess;
- rnew->allowed_methods = ap_make_method_list(rnew->pool, 2);
-
- /* make a copy of the allowed-methods list */
- ap_copy_method_list(rnew->allowed_methods, r->allowed_methods);
-
- /* start with the same set of output filters */
- if (next_filter) {
- /* while there are no input filters for a subrequest, we will
- * try to insert some, so if we don't have valid data, the code
- * will seg fault.
- */
- rnew->input_filters = r->input_filters;
- rnew->proto_input_filters = r->proto_input_filters;
- rnew->output_filters = next_filter;
- rnew->proto_output_filters = r->proto_output_filters;
- ap_add_output_filter_handle(ap_subreq_core_filter_handle,
- NULL, rnew, rnew->connection);
- }
- else {
- /* If NULL - we are expecting to be internal_fast_redirect'ed
- * to this subrequest - or this request will never be invoked.
- * Ignore the original request filter stack entirely, and
- * drill the input and output stacks back to the connection.
- */
- rnew->proto_input_filters = r->proto_input_filters;
- rnew->proto_output_filters = r->proto_output_filters;
-
- rnew->input_filters = r->proto_input_filters;
- rnew->output_filters = r->proto_output_filters;
- }
-
- /* no input filters for a subrequest */
-
- ap_set_sub_req_protocol(rnew, r);
-
- /* We have to run this after we fill in sub req vars,
- * or the r->main pointer won't be setup
- */
- ap_run_create_request(rnew);
-
- return rnew;
-}
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_sub_req_output_filter(ap_filter_t *f,
- apr_bucket_brigade *bb)
-{
- apr_bucket *e = APR_BRIGADE_LAST(bb);
-
- if (APR_BUCKET_IS_EOS(e)) {
- apr_bucket_delete(e);
- }
-
- if (!APR_BRIGADE_EMPTY(bb)) {
- return ap_pass_brigade(f->next, bb);
- }
-
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(int) ap_some_auth_required(request_rec *r)
-{
- /* Is there a require line configured for the type of *this* req? */
-
- const apr_array_header_t *reqs_arr = ap_requires(r);
- require_line *reqs;
- int i;
-
- if (!reqs_arr) {
- return 0;
- }
-
- reqs = (require_line *) reqs_arr->elts;
-
- for (i = 0; i < reqs_arr->nelts; ++i) {
- if (reqs[i].method_mask & (AP_METHOD_BIT << r->method_number)) {
- return 1;
- }
- }
-
- return 0;
-}
-
-
-AP_DECLARE(request_rec *) ap_sub_req_method_uri(const char *method,
- const char *new_file,
- const request_rec *r,
- ap_filter_t *next_filter)
-{
- request_rec *rnew;
- int res;
- char *udir;
-
- rnew = make_sub_request(r, next_filter);
-
- /* would be nicer to pass "method" to ap_set_sub_req_protocol */
- rnew->method = method;
- rnew->method_number = ap_method_number_of(method);
-
- if (new_file[0] == '/') {
- ap_parse_uri(rnew, new_file);
- }
- else {
- udir = ap_make_dirstr_parent(rnew->pool, r->uri);
- udir = ap_escape_uri(rnew->pool, udir); /* re-escape it */
- ap_parse_uri(rnew, ap_make_full_path(rnew->pool, udir, new_file));
- }
-
- /* We cannot return NULL without violating the API. So just turn this
- * subrequest into a 500 to indicate the failure. */
- if (ap_is_recursion_limit_exceeded(r)) {
- rnew->status = HTTP_INTERNAL_SERVER_ERROR;
- return rnew;
- }
-
- /* lookup_uri
- * If the content can be served by the quick_handler, we can
- * safely bypass request_internal processing.
- */
- res = ap_run_quick_handler(rnew, 1);
-
- if (res != OK) {
- if ((res = ap_process_request_internal(rnew))) {
- rnew->status = res;
- }
- }
-
- return rnew;
-}
-
-AP_DECLARE(request_rec *) ap_sub_req_lookup_uri(const char *new_file,
- const request_rec *r,
- ap_filter_t *next_filter)
-{
- return ap_sub_req_method_uri("GET", new_file, r, next_filter);
-}
-
-AP_DECLARE(request_rec *) ap_sub_req_lookup_dirent(const apr_finfo_t *dirent,
- const request_rec *r,
- int subtype,
- ap_filter_t *next_filter)
-{
- request_rec *rnew;
- int res;
- char *fdir;
- char *udir;
-
- rnew = make_sub_request(r, next_filter);
-
- /* Special case: we are looking at a relative lookup in the same directory.
- * This is 100% safe, since dirent->name just came from the filesystem.
- */
- if (r->path_info && *r->path_info) {
- /* strip path_info off the end of the uri to keep it in sync
- * with r->filename, which has already been stripped by directory_walk,
- * merge the dirent->name, and then, if the caller wants us to remerge
- * the original path info, do so. Note we never fix the path_info back
- * to r->filename, since dir_walk would do so (but we don't expect it
- * to happen in the usual cases)
- */
- udir = apr_pstrdup(rnew->pool, r->uri);
- udir[ap_find_path_info(udir, r->path_info)] = '\0';
- udir = ap_make_dirstr_parent(rnew->pool, udir);
-
- rnew->uri = ap_make_full_path(rnew->pool, udir, dirent->name);
- if (subtype == AP_SUBREQ_MERGE_ARGS) {
- rnew->uri = ap_make_full_path(rnew->pool, rnew->uri, r->path_info + 1);
- rnew->path_info = apr_pstrdup(rnew->pool, r->path_info);
- }
- rnew->uri = ap_escape_uri(rnew->pool, rnew->uri);
- }
- else {
- udir = ap_make_dirstr_parent(rnew->pool, r->uri);
- rnew->uri = ap_escape_uri(rnew->pool, ap_make_full_path(rnew->pool,
- udir,
- dirent->name));
- }
-
- fdir = ap_make_dirstr_parent(rnew->pool, r->filename);
- rnew->filename = ap_make_full_path(rnew->pool, fdir, dirent->name);
- if (r->canonical_filename == r->filename) {
- rnew->canonical_filename = rnew->filename;
- }
-
- /* XXX This is now less relevant; we will do a full location walk
- * these days for this case. Preserve the apr_stat results, and
- * perhaps we also tag that symlinks were tested and/or found for
- * r->filename.
- */
- rnew->per_dir_config = r->server->lookup_defaults;
-
- if ((dirent->valid & APR_FINFO_MIN) != APR_FINFO_MIN) {
- /*
- * apr_dir_read isn't very complete on this platform, so
- * we need another apr_stat (with or without APR_FINFO_LINK
- * depending on whether we allow all symlinks here.) If this
- * is an APR_LNK that resolves to an APR_DIR, then we will rerun
- * everything anyways... this should be safe.
- */
- apr_status_t rv;
- if (ap_allow_options(rnew) & OPT_SYM_LINKS) {
- if (((rv = apr_stat(&rnew->finfo, rnew->filename,
- APR_FINFO_MIN, rnew->pool)) != APR_SUCCESS)
- && (rv != APR_INCOMPLETE)) {
- rnew->finfo.filetype = 0;
- }
- }
- else {
- if (((rv = apr_stat(&rnew->finfo, rnew->filename,
- APR_FINFO_LINK | APR_FINFO_MIN,
- rnew->pool)) != APR_SUCCESS)
- && (rv != APR_INCOMPLETE)) {
- rnew->finfo.filetype = 0;
- }
- }
- }
- else {
- memcpy(&rnew->finfo, dirent, sizeof(apr_finfo_t));
- }
-
- if (rnew->finfo.filetype == APR_LNK) {
- /*
- * Resolve this symlink. We should tie this back to dir_walk's cache
- */
- if ((res = resolve_symlink(rnew->filename, &rnew->finfo,
- ap_allow_options(rnew), rnew->pool))
- != OK) {
- rnew->status = res;
- return rnew;
- }
- }
-
- if (rnew->finfo.filetype == APR_DIR) {
- /* ap_make_full_path overallocated the buffers
- * by one character to help us out here.
- */
- strcpy(rnew->filename + strlen(rnew->filename), "/");
- if (!rnew->path_info || !*rnew->path_info) {
- strcpy(rnew->uri + strlen(rnew->uri ), "/");
- }
- }
-
- /* fill in parsed_uri values
- */
- if (r->args && *r->args && (subtype == AP_SUBREQ_MERGE_ARGS)) {
- ap_parse_uri(rnew, apr_pstrcat(r->pool, rnew->uri, "?",
- r->args, NULL));
- }
- else {
- ap_parse_uri(rnew, rnew->uri);
- }
-
- /* We cannot return NULL without violating the API. So just turn this
- * subrequest into a 500. */
- if (ap_is_recursion_limit_exceeded(r)) {
- rnew->status = HTTP_INTERNAL_SERVER_ERROR;
- return rnew;
- }
-
- if ((res = ap_process_request_internal(rnew))) {
- rnew->status = res;
- }
-
- return rnew;
-}
-
-AP_DECLARE(request_rec *) ap_sub_req_lookup_file(const char *new_file,
- const request_rec *r,
- ap_filter_t *next_filter)
-{
- request_rec *rnew;
- int res;
- char *fdir;
- apr_size_t fdirlen;
-
- rnew = make_sub_request(r, next_filter);
-
- fdir = ap_make_dirstr_parent(rnew->pool, r->filename);
- fdirlen = strlen(fdir);
-
- /* Translate r->filename, if it was canonical, it stays canonical
- */
- if (r->canonical_filename == r->filename) {
- rnew->canonical_filename = (char*)(1);
- }
-
- if (apr_filepath_merge(&rnew->filename, fdir, new_file,
- APR_FILEPATH_TRUENAME, rnew->pool) != APR_SUCCESS) {
- rnew->status = HTTP_FORBIDDEN;
- return rnew;
- }
-
- if (rnew->canonical_filename) {
- rnew->canonical_filename = rnew->filename;
- }
-
- /*
- * Check for a special case... if there are no '/' characters in new_file
- * at all, and the path was the same, then we are looking at a relative
- * lookup in the same directory. Fixup the URI to match.
- */
-
- if (strncmp(rnew->filename, fdir, fdirlen) == 0
- && rnew->filename[fdirlen]
- && ap_strchr_c(rnew->filename + fdirlen, '/') == NULL) {
- apr_status_t rv;
- if (ap_allow_options(rnew) & OPT_SYM_LINKS) {
- if (((rv = apr_stat(&rnew->finfo, rnew->filename,
- APR_FINFO_MIN, rnew->pool)) != APR_SUCCESS)
- && (rv != APR_INCOMPLETE)) {
- rnew->finfo.filetype = 0;
- }
- }
- else {
- if (((rv = apr_stat(&rnew->finfo, rnew->filename,
- APR_FINFO_LINK | APR_FINFO_MIN,
- rnew->pool)) != APR_SUCCESS)
- && (rv != APR_INCOMPLETE)) {
- rnew->finfo.filetype = 0;
- }
- }
-
- if (r->uri && *r->uri) {
- char *udir = ap_make_dirstr_parent(rnew->pool, r->uri);
- rnew->uri = ap_make_full_path(rnew->pool, udir,
- rnew->filename + fdirlen);
- ap_parse_uri(rnew, rnew->uri); /* fill in parsed_uri values */
- }
- else {
- ap_parse_uri(rnew, new_file); /* fill in parsed_uri values */
- rnew->uri = apr_pstrdup(rnew->pool, "");
- }
- }
- else {
- /* XXX: @@@: What should be done with the parsed_uri values?
- * We would be better off stripping down to the 'common' elements
- * of the path, then reassembling the URI as best as we can.
- */
- ap_parse_uri(rnew, new_file); /* fill in parsed_uri values */
- /*
- * XXX: this should be set properly like it is in the same-dir case
- * but it's actually sometimes to impossible to do it... because the
- * file may not have a uri associated with it -djg
- */
- rnew->uri = apr_pstrdup(rnew->pool, "");
- }
-
- /* We cannot return NULL without violating the API. So just turn this
- * subrequest into a 500. */
- if (ap_is_recursion_limit_exceeded(r)) {
- rnew->status = HTTP_INTERNAL_SERVER_ERROR;
- return rnew;
- }
-
- if ((res = ap_process_request_internal(rnew))) {
- rnew->status = res;
- }
-
- return rnew;
-}
-
-AP_DECLARE(int) ap_run_sub_req(request_rec *r)
-{
- int retval = DECLINED;
- /* Run the quick handler if the subrequest is not a dirent or file
- * subrequest
- */
- if (!(r->filename && r->finfo.filetype)) {
- retval = ap_run_quick_handler(r, 0);
- }
- if (retval != OK) {
- retval = ap_invoke_handler(r);
- if (retval == DONE) {
- retval = OK;
- }
- }
- ap_finalize_sub_req_protocol(r);
- return retval;
-}
-
-AP_DECLARE(void) ap_destroy_sub_req(request_rec *r)
-{
- /* Reclaim the space */
- apr_pool_destroy(r->pool);
-}
-
-/*
- * Function to set the r->mtime field to the specified value if it's later
- * than what's already there.
- */
-AP_DECLARE(void) ap_update_mtime(request_rec *r, apr_time_t dependency_mtime)
-{
- if (r->mtime < dependency_mtime) {
- r->mtime = dependency_mtime;
- }
-}
-
-/*
- * Is it the initial main request, which we only get *once* per HTTP request?
- */
-AP_DECLARE(int) ap_is_initial_req(request_rec *r)
-{
- return (r->main == NULL) /* otherwise, this is a sub-request */
- && (r->prev == NULL); /* otherwise, this is an internal redirect */
-}
diff --git a/server/scoreboard.c b/server/scoreboard.c
deleted file mode 100644
index df4dddf086..0000000000
--- a/server/scoreboard.c
+++ /dev/null
@@ -1,505 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "ap_mpm.h"
-
-#include "mpm.h"
-#include "scoreboard.h"
-
-AP_DECLARE_DATA scoreboard *ap_scoreboard_image = NULL;
-AP_DECLARE_DATA const char *ap_scoreboard_fname = NULL;
-AP_DECLARE_DATA int ap_extended_status = 0;
-
-#if APR_HAS_SHARED_MEMORY
-
-#include "apr_shm.h"
-
-#ifndef WIN32
-static /* but must be exported to mpm_winnt */
-#endif
- apr_shm_t *ap_scoreboard_shm = NULL;
-
-#endif
-
-APR_HOOK_STRUCT(
- APR_HOOK_LINK(pre_mpm)
-)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_mpm,
- (apr_pool_t *p, ap_scoreboard_e sb_type),
- (p, sb_type),OK,DECLINED)
-
-static APR_OPTIONAL_FN_TYPE(ap_proxy_lb_workers)
- *proxy_lb_workers;
-
-struct ap_sb_handle_t {
- int child_num;
- int thread_num;
-};
-
-static int server_limit, thread_limit, lb_limit;
-static apr_size_t scoreboard_size;
-
-/*
- * ToDo:
- * This function should be renamed to cleanup_shared
- * and it should handle cleaning up a scoreboard shared
- * between processes using any form of IPC (file, shared memory
- * segment, etc.). Leave it as is now because it is being used
- * by various MPMs.
- */
-static apr_status_t ap_cleanup_shared_mem(void *d)
-{
-#if APR_HAS_SHARED_MEMORY
- free(ap_scoreboard_image);
- ap_scoreboard_image = NULL;
- apr_shm_destroy(ap_scoreboard_shm);
-#endif
- return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_calc_scoreboard_size(void)
-{
- ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
- ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
-
- if (!proxy_lb_workers)
- proxy_lb_workers = APR_RETRIEVE_OPTIONAL_FN(ap_proxy_lb_workers);
- if (proxy_lb_workers)
- lb_limit = proxy_lb_workers();
- else
- lb_limit = 0;
-
- scoreboard_size = sizeof(global_score);
- scoreboard_size += sizeof(process_score) * server_limit;
- scoreboard_size += sizeof(worker_score) * server_limit * thread_limit;
- if (lb_limit)
- scoreboard_size += sizeof(lb_score) * server_limit * lb_limit;
-
- return scoreboard_size;
-}
-
-void ap_init_scoreboard(void *shared_score)
-{
- char *more_storage;
- int i;
-
- ap_calc_scoreboard_size();
- ap_scoreboard_image =
- calloc(1, sizeof(scoreboard) + server_limit * sizeof(worker_score *) +
- server_limit * lb_limit * sizeof(lb_score *));
- more_storage = shared_score;
- ap_scoreboard_image->global = (global_score *)more_storage;
- more_storage += sizeof(global_score);
- ap_scoreboard_image->parent = (process_score *)more_storage;
- more_storage += sizeof(process_score) * server_limit;
- ap_scoreboard_image->servers =
- (worker_score **)((char*)ap_scoreboard_image + sizeof(scoreboard));
- for (i = 0; i < server_limit; i++) {
- ap_scoreboard_image->servers[i] = (worker_score *)more_storage;
- more_storage += thread_limit * sizeof(worker_score);
- }
- if (lb_limit) {
- ap_scoreboard_image->balancers =
- (lb_score **)((char*)ap_scoreboard_image + sizeof(scoreboard) +
- server_limit * sizeof(worker_score *));
- for (i = 0; i < server_limit; i++) {
- ap_scoreboard_image->balancers[i] = (lb_score *)more_storage;
- more_storage += lb_limit * sizeof(lb_score);
- }
- }
- ap_assert(more_storage == (char*)shared_score + scoreboard_size);
- ap_scoreboard_image->global->server_limit = server_limit;
- ap_scoreboard_image->global->thread_limit = thread_limit;
- ap_scoreboard_image->global->lb_limit = lb_limit;
-}
-
-/**
- * Create a name-based scoreboard in the given pool using the
- * given filename.
- */
-static apr_status_t create_namebased_scoreboard(apr_pool_t *pool,
- const char *fname)
-{
-#if APR_HAS_SHARED_MEMORY
- apr_status_t rv;
-
- /* The shared memory file must not exist before we create the
- * segment. */
- apr_file_remove(fname, pool); /* ignore errors */
-
- rv = apr_shm_create(&ap_scoreboard_shm, scoreboard_size, fname, pool);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "unable to create scoreboard \"%s\" "
- "(name-based shared memory failure)", fname);
- return rv;
- }
-#endif /* APR_HAS_SHARED_MEMORY */
- return APR_SUCCESS;
-}
-
-/* ToDo: This function should be made to handle setting up
- * a scoreboard shared between processes using any IPC technique,
- * not just a shared memory segment
- */
-static apr_status_t open_scoreboard(apr_pool_t *pconf)
-{
-#if APR_HAS_SHARED_MEMORY
- apr_status_t rv;
- char *fname = NULL;
- apr_pool_t *global_pool;
-
- /* We don't want to have to recreate the scoreboard after
- * restarts, so we'll create a global pool and never clean it.
- */
- rv = apr_pool_create(&global_pool, NULL);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "Fatal error: unable to create global pool "
- "for use with by the scoreboard");
- return rv;
- }
-
- /* The config says to create a name-based shmem */
- if (ap_scoreboard_fname) {
- /* make sure it's an absolute pathname */
- fname = ap_server_root_relative(pconf, ap_scoreboard_fname);
- if (!fname) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, APR_EBADPATH, NULL,
- "Fatal error: Invalid Scoreboard path %s",
- ap_scoreboard_fname);
- return APR_EBADPATH;
- }
- return create_namebased_scoreboard(global_pool, fname);
- }
- else { /* config didn't specify, we get to choose shmem type */
- rv = apr_shm_create(&ap_scoreboard_shm, scoreboard_size, NULL,
- global_pool); /* anonymous shared memory */
- if ((rv != APR_SUCCESS) && (rv != APR_ENOTIMPL)) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "Unable to create scoreboard "
- "(anonymous shared memory failure)");
- return rv;
- }
- /* Make up a filename and do name-based shmem */
- else if (rv == APR_ENOTIMPL) {
- /* Make sure it's an absolute pathname */
- ap_scoreboard_fname = DEFAULT_SCOREBOARD;
- fname = ap_server_root_relative(pconf, ap_scoreboard_fname);
-
- return create_namebased_scoreboard(global_pool, fname);
- }
- }
-#endif /* APR_HAS_SHARED_MEMORY */
- return APR_SUCCESS;
-}
-
-/* If detach is non-zero, this is a seperate child process,
- * if zero, it is a forked child.
- */
-apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached)
-{
-#if APR_HAS_SHARED_MEMORY
- if (!detached) {
- return APR_SUCCESS;
- }
- if (apr_shm_size_get(ap_scoreboard_shm) < scoreboard_size) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL,
- "Fatal error: shared scoreboard too small for child!");
- apr_shm_detach(ap_scoreboard_shm);
- ap_scoreboard_shm = NULL;
- return APR_EINVAL;
- }
- /* everything will be cleared shortly */
- if (*shm) {
- *shm = ap_scoreboard_shm;
- }
-#endif
- return APR_SUCCESS;
-}
-
-apr_status_t ap_cleanup_scoreboard(void *d)
-{
- if (ap_scoreboard_image == NULL) {
- return APR_SUCCESS;
- }
- if (ap_scoreboard_image->global->sb_type == SB_SHARED) {
- ap_cleanup_shared_mem(NULL);
- }
- else {
- free(ap_scoreboard_image->global);
- free(ap_scoreboard_image);
- ap_scoreboard_image = NULL;
- }
- return APR_SUCCESS;
-}
-
-/* Create or reinit an existing scoreboard. The MPM can control whether
- * the scoreboard is shared across multiple processes or not
- */
-int ap_create_scoreboard(apr_pool_t *p, ap_scoreboard_e sb_type)
-{
- int running_gen = 0;
- int i;
-#if APR_HAS_SHARED_MEMORY
- apr_status_t rv;
-#endif
-
- if (ap_scoreboard_image) {
- running_gen = ap_scoreboard_image->global->running_generation;
- ap_scoreboard_image->global->restart_time = apr_time_now();
- memset(ap_scoreboard_image->parent, 0,
- sizeof(process_score) * server_limit);
- for (i = 0; i < server_limit; i++) {
- memset(ap_scoreboard_image->servers[i], 0,
- sizeof(worker_score) * thread_limit);
- }
- /* Clean up the lb workers data */
- if (lb_limit) {
- for (i = 0; i < server_limit; i++) {
- memset(ap_scoreboard_image->balancers[i], 0,
- sizeof(lb_score) * lb_limit);
- }
- }
- return OK;
- }
-
- ap_calc_scoreboard_size();
-#if APR_HAS_SHARED_MEMORY
- if (sb_type == SB_SHARED) {
- void *sb_shared;
- rv = open_scoreboard(p);
- if (rv || !(sb_shared = apr_shm_baseaddr_get(ap_scoreboard_shm))) {
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- memset(sb_shared, 0, scoreboard_size);
- ap_init_scoreboard(sb_shared);
- }
- else
-#endif
- {
- /* A simple malloc will suffice */
- void *sb_mem = calloc(1, scoreboard_size);
- if (sb_mem == NULL) {
- ap_log_error(APLOG_MARK, APLOG_CRIT, 0, NULL,
- "(%d)%s: cannot allocate scoreboard",
- errno, strerror(errno));
- return HTTP_INTERNAL_SERVER_ERROR;
- }
- ap_init_scoreboard(sb_mem);
- }
-
- ap_scoreboard_image->global->sb_type = sb_type;
- ap_scoreboard_image->global->running_generation = running_gen;
- ap_scoreboard_image->global->restart_time = apr_time_now();
-
- apr_pool_cleanup_register(p, NULL, ap_cleanup_scoreboard, apr_pool_cleanup_null);
-
- return OK;
-}
-
-/* Routines called to deal with the scoreboard image
- * --- note that we do *not* need write locks, since update_child_status
- * only updates a *single* record in place, and only one process writes to
- * a given scoreboard slot at a time (either the child process owning that
- * slot, or the parent, noting that the child has died).
- *
- * As a final note --- setting the score entry to getpid() is always safe,
- * since when the parent is writing an entry, it's only noting SERVER_DEAD
- * anyway.
- */
-
-AP_DECLARE(int) ap_exists_scoreboard_image(void)
-{
- return (ap_scoreboard_image ? 1 : 0);
-}
-
-AP_DECLARE(void) ap_increment_counts(ap_sb_handle_t *sb, request_rec *r)
-{
- worker_score *ws;
-
- ws = &ap_scoreboard_image->servers[sb->child_num][sb->thread_num];
-
-#ifdef HAVE_TIMES
- times(&ws->times);
-#endif
- ws->access_count++;
- ws->my_access_count++;
- ws->conn_count++;
- ws->bytes_served += r->bytes_sent;
- ws->my_bytes_served += r->bytes_sent;
- ws->conn_bytes += r->bytes_sent;
-}
-
-AP_DECLARE(int) find_child_by_pid(apr_proc_t *pid)
-{
- int i;
- int max_daemons_limit;
-
- ap_mpm_query(AP_MPMQ_MAX_DAEMONS, &max_daemons_limit);
-
- for (i = 0; i < max_daemons_limit; ++i) {
- if (ap_scoreboard_image->parent[i].pid == pid->pid) {
- return i;
- }
- }
-
- return -1;
-}
-
-AP_DECLARE(void) ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p,
- int child_num, int thread_num)
-{
- *new_sbh = (ap_sb_handle_t *)apr_palloc(p, sizeof(ap_sb_handle_t));
- (*new_sbh)->child_num = child_num;
- (*new_sbh)->thread_num = thread_num;
-}
-
-AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num,
- int thread_num,
- int status,
- request_rec *r)
-{
- int old_status;
- worker_score *ws;
- process_score *ps;
-
- if (child_num < 0) {
- return -1;
- }
-
- ws = &ap_scoreboard_image->servers[child_num][thread_num];
- old_status = ws->status;
- ws->status = status;
-
- ps = &ap_scoreboard_image->parent[child_num];
-
- if (status == SERVER_READY
- && old_status == SERVER_STARTING) {
- ws->thread_num = child_num * thread_limit + thread_num;
- ps->generation = ap_my_generation;
- }
-
- if (ap_extended_status) {
- ws->last_used = apr_time_now();
- if (status == SERVER_READY || status == SERVER_DEAD) {
- /*
- * Reset individual counters
- */
- if (status == SERVER_DEAD) {
- ws->my_access_count = 0L;
- ws->my_bytes_served = 0L;
- }
- ws->conn_count = 0;
- ws->conn_bytes = 0;
- }
- if (r) {
- conn_rec *c = r->connection;
- apr_cpystrn(ws->client, ap_get_remote_host(c, r->per_dir_config,
- REMOTE_NOLOOKUP, NULL), sizeof(ws->client));
- if (r->the_request == NULL) {
- apr_cpystrn(ws->request, "NULL", sizeof(ws->request));
- } else if (r->parsed_uri.password == NULL) {
- apr_cpystrn(ws->request, r->the_request, sizeof(ws->request));
- } else {
- /* Don't reveal the password in the server-status view */
- apr_cpystrn(ws->request, apr_pstrcat(r->pool, r->method, " ",
- apr_uri_unparse(r->pool, &r->parsed_uri,
- APR_URI_UNP_OMITPASSWORD),
- r->assbackwards ? NULL : " ", r->protocol, NULL),
- sizeof(ws->request));
- }
- apr_cpystrn(ws->vhost, r->server->server_hostname,
- sizeof(ws->vhost));
- }
- }
-
- return old_status;
-}
-
-AP_DECLARE(int) ap_update_child_status(ap_sb_handle_t *sbh, int status,
- request_rec *r)
-{
- return ap_update_child_status_from_indexes(sbh->child_num, sbh->thread_num,
- status, r);
-}
-
-void ap_time_process_request(int child_num, int thread_num, int status)
-{
- worker_score *ws;
-
- if (child_num < 0) {
- return;
- }
-
- ws = &ap_scoreboard_image->servers[child_num][thread_num];
-
- if (status == START_PREQUEST) {
- ws->start_time = apr_time_now();
- }
- else if (status == STOP_PREQUEST) {
- ws->stop_time = apr_time_now();
- }
-}
-
-AP_DECLARE(worker_score *) ap_get_scoreboard_worker(int x, int y)
-{
- if (((x < 0) || (server_limit < x)) ||
- ((y < 0) || (thread_limit < y))) {
- return(NULL); /* Out of range */
- }
- return &ap_scoreboard_image->servers[x][y];
-}
-
-AP_DECLARE(process_score *) ap_get_scoreboard_process(int x)
-{
- if ((x < 0) || (server_limit < x)) {
- return(NULL); /* Out of range */
- }
- return &ap_scoreboard_image->parent[x];
-}
-
-AP_DECLARE(global_score *) ap_get_scoreboard_global()
-{
- return ap_scoreboard_image->global;
-}
-
-AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int child_num, int lb_num)
-{
- if (((child_num < 0) || (server_limit < child_num)) ||
- ((lb_num < 0) || (lb_limit < lb_num))) {
- return(NULL); /* Out of range */
- }
- return &ap_scoreboard_image->balancers[child_num][lb_num];
-}
diff --git a/server/util.c b/server/util.c
deleted file mode 100644
index 23a968ee28..0000000000
--- a/server/util.c
+++ /dev/null
@@ -1,2120 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * util.c: string utility things
- *
- * 3/21/93 Rob McCool
- * 1995-96 Many changes by the Apache Software Foundation
- *
- */
-
-/* Debugging aid:
- * #define DEBUG to trace all cfg_open*()/cfg_closefile() calls
- * #define DEBUG_CFG_LINES to trace every line read from the config files
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_NETDB_H
-#include <netdb.h> /* for gethostbyname() */
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "apr_base64.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_config.h"
-#include "util_ebcdic.h"
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-
-/* A bunch of functions in util.c scan strings looking for certain characters.
- * To make that more efficient we encode a lookup table. The test_char_table
- * is generated automatically by gen_test_char.c.
- */
-#include "test_char.h"
-
-/* we assume the folks using this ensure 0 <= c < 256... which means
- * you need a cast to (unsigned char) first, you can't just plug a
- * char in here and get it to work, because if char is signed then it
- * will first be sign extended.
- */
-#define TEST_CHAR(c, f) (test_char_table[(unsigned)(c)] & (f))
-
-/* Win32/NetWare/OS2 need to check for both forward and back slashes
- * in ap_getparents() and ap_escape_url.
- */
-#ifdef CASE_BLIND_FILESYSTEM
-#define IS_SLASH(s) ((s == '/') || (s == '\\'))
-#else
-#define IS_SLASH(s) (s == '/')
-#endif
-
-
-/*
- * Examine a field value (such as a media-/content-type) string and return
- * it sans any parameters; e.g., strip off any ';charset=foo' and the like.
- */
-AP_DECLARE(char *) ap_field_noparam(apr_pool_t *p, const char *intype)
-{
- const char *semi;
-
- if (intype == NULL) return NULL;
-
- semi = ap_strchr_c(intype, ';');
- if (semi == NULL) {
- return apr_pstrdup(p, intype);
- }
- else {
- while ((semi > intype) && apr_isspace(semi[-1])) {
- semi--;
- }
- return apr_pstrndup(p, intype, semi - intype);
- }
-}
-
-AP_DECLARE(char *) ap_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt,
- int gmt)
-{
- apr_size_t retcode;
- char ts[MAX_STRING_LEN];
- char tf[MAX_STRING_LEN];
- apr_time_exp_t xt;
-
- if (gmt) {
- const char *f;
- char *strp;
-
- apr_time_exp_gmt(&xt, t);
- /* Convert %Z to "GMT" and %z to "+0000";
- * on hosts that do not have a time zone string in struct tm,
- * strftime must assume its argument is local time.
- */
- for(strp = tf, f = fmt; strp < tf + sizeof(tf) - 6 && (*strp = *f)
- ; f++, strp++) {
- if (*f != '%') continue;
- switch (f[1]) {
- case '%':
- *++strp = *++f;
- break;
- case 'Z':
- *strp++ = 'G';
- *strp++ = 'M';
- *strp = 'T';
- f++;
- break;
- case 'z': /* common extension */
- *strp++ = '+';
- *strp++ = '0';
- *strp++ = '0';
- *strp++ = '0';
- *strp = '0';
- f++;
- break;
- }
- }
- *strp = '\0';
- fmt = tf;
- }
- else {
- apr_time_exp_lt(&xt, t);
- }
-
- /* check return code? */
- apr_strftime(ts, &retcode, MAX_STRING_LEN, fmt, &xt);
- ts[MAX_STRING_LEN - 1] = '\0';
- return apr_pstrdup(p, ts);
-}
-
-/* Roy owes Rob beer. */
-/* Rob owes Roy dinner. */
-
-/* These legacy comments would make a lot more sense if Roy hadn't
- * replaced the old later_than() routine with util_date.c.
- *
- * Well, okay, they still wouldn't make any sense.
- */
-
-/* Match = 0, NoMatch = 1, Abort = -1
- * Based loosely on sections of wildmat.c by Rich Salz
- * Hmmm... shouldn't this really go component by component?
- */
-AP_DECLARE(int) ap_strcmp_match(const char *str, const char *expected)
-{
- int x, y;
-
- for (x = 0, y = 0; expected[y]; ++y, ++x) {
- if ((!str[x]) && (expected[y] != '*'))
- return -1;
- if (expected[y] == '*') {
- while (expected[++y] == '*');
- if (!expected[y])
- return 0;
- while (str[x]) {
- int ret;
- if ((ret = ap_strcmp_match(&str[x++], &expected[y])) != 1)
- return ret;
- }
- return -1;
- }
- else if ((expected[y] != '?') && (str[x] != expected[y]))
- return 1;
- }
- return (str[x] != '\0');
-}
-
-AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *expected)
-{
- int x, y;
-
- for (x = 0, y = 0; expected[y]; ++y, ++x) {
- if (!str[x] && expected[y] != '*')
- return -1;
- if (expected[y] == '*') {
- while (expected[++y] == '*');
- if (!expected[y])
- return 0;
- while (str[x]) {
- int ret;
- if ((ret = ap_strcasecmp_match(&str[x++], &expected[y])) != 1)
- return ret;
- }
- return -1;
- }
- else if (expected[y] != '?'
- && apr_tolower(str[x]) != apr_tolower(expected[y]))
- return 1;
- }
- return (str[x] != '\0');
-}
-
-/* We actually compare the canonical root to this root, (but we don't
- * waste time checking the case), since every use of this function in
- * httpd-2.1 tests if the path is 'proper', meaning we've already passed
- * it through apr_filepath_merge, or we haven't.
- */
-AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir)
-{
- const char *newpath;
- const char *ourdir = dir;
- if (apr_filepath_root(&newpath, &dir, 0, p) != APR_SUCCESS
- || strncmp(newpath, ourdir, strlen(newpath)) != 0) {
- return 0;
- }
- return 1;
-}
-
-AP_DECLARE(int) ap_is_matchexp(const char *str)
-{
- register int x;
-
- for (x = 0; str[x]; x++)
- if ((str[x] == '*') || (str[x] == '?'))
- return 1;
- return 0;
-}
-
-/*
- * Here's a pool-based interface to POSIX regex's regcomp().
- * Note that we return regex_t instead of being passed one.
- * The reason is that if you use an already-used regex_t structure,
- * the memory that you've already allocated gets forgotten, and
- * regfree() doesn't clear it. So we don't allow it.
- */
-
-static apr_status_t regex_cleanup(void *preg)
-{
- regfree((regex_t *) preg);
- return APR_SUCCESS;
-}
-
-AP_DECLARE(regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern,
- int cflags)
-{
- regex_t *preg = apr_palloc(p, sizeof(regex_t));
-
- if (regcomp(preg, pattern, cflags)) {
- return NULL;
- }
-
- apr_pool_cleanup_register(p, (void *) preg, regex_cleanup,
- apr_pool_cleanup_null);
-
- return preg;
-}
-
-AP_DECLARE(void) ap_pregfree(apr_pool_t *p, regex_t * reg)
-{
- regfree(reg);
- apr_pool_cleanup_kill(p, (void *) reg, regex_cleanup);
-}
-
-/*
- * Similar to standard strstr() but we ignore case in this version.
- * Based on the strstr() implementation further below.
- */
-AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2)
-{
- char *p1, *p2;
- if (*s2 == '\0') {
- /* an empty s2 */
- return((char *)s1);
- }
- while(1) {
- for ( ; (*s1 != '\0') && (apr_tolower(*s1) != apr_tolower(*s2)); s1++);
- if (*s1 == '\0') {
- return(NULL);
- }
- /* found first character of s2, see if the rest matches */
- p1 = (char *)s1;
- p2 = (char *)s2;
- for (++p1, ++p2; apr_tolower(*p1) == apr_tolower(*p2); ++p1, ++p2) {
- if (*p1 == '\0') {
- /* both strings ended together */
- return((char *)s1);
- }
- }
- if (*p2 == '\0') {
- /* second string ended, a match */
- break;
- }
- /* didn't find a match here, try starting at next character in s1 */
- s1++;
- }
- return((char *)s1);
-}
-
-/*
- * Returns an offsetted pointer in bigstring immediately after
- * prefix. Returns bigstring if bigstring doesn't start with
- * prefix or if prefix is longer than bigstring while still matching.
- * NOTE: pointer returned is relative to bigstring, so we
- * can use standard pointer comparisons in the calling function
- * (eg: test if ap_stripprefix(a,b) == a)
- */
-AP_DECLARE(const char *) ap_stripprefix(const char *bigstring,
- const char *prefix)
-{
- const char *p1;
-
- if (*prefix == '\0')
- return bigstring;
-
- p1 = bigstring;
- while (*p1 && *prefix) {
- if (*p1++ != *prefix++)
- return bigstring;
- }
- if (*prefix == '\0')
- return p1;
-
- /* hit the end of bigstring! */
- return bigstring;
-}
-
-/*
- * Apache stub function for the regex libraries regexec() to make sure the
- * whole regex(3) API is available through the Apache (exported) namespace.
- * This is especially important for the DSO situations of modules.
- * DO NOT MAKE A MACRO OUT OF THIS FUNCTION!
- */
-AP_DECLARE(int) ap_regexec(regex_t *preg, const char *string,
- size_t nmatch, regmatch_t pmatch[], int eflags)
-{
- return regexec(preg, string, nmatch, pmatch, eflags);
-}
-
-AP_DECLARE(size_t) ap_regerror(int errcode, const regex_t *preg, char *errbuf,
- size_t errbuf_size)
-{
- return regerror(errcode, preg, errbuf, errbuf_size);
-}
-
-
-/* This function substitutes for $0-$9, filling in regular expression
- * submatches. Pass it the same nmatch and pmatch arguments that you
- * passed ap_regexec(). pmatch should not be greater than the maximum number
- * of subexpressions - i.e. one more than the re_nsub member of regex_t.
- *
- * input should be the string with the $-expressions, source should be the
- * string that was matched against.
- *
- * It returns the substituted string, or NULL on error.
- *
- * Parts of this code are based on Henry Spencer's regsub(), from his
- * AT&T V8 regexp package.
- */
-
-AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input,
- const char *source, size_t nmatch,
- regmatch_t pmatch[])
-{
- const char *src = input;
- char *dest, *dst;
- char c;
- size_t no;
- int len;
-
- if (!source)
- return NULL;
- if (!nmatch)
- return apr_pstrdup(p, src);
-
- /* First pass, find the size */
-
- len = 0;
-
- while ((c = *src++) != '\0') {
- if (c == '&')
- no = 0;
- else if (c == '$' && apr_isdigit(*src))
- no = *src++ - '0';
- else
- no = 10;
-
- if (no > 9) { /* Ordinary character. */
- if (c == '\\' && (*src == '$' || *src == '&'))
- c = *src++;
- len++;
- }
- else if (no < nmatch && pmatch[no].rm_so < pmatch[no].rm_eo) {
- len += pmatch[no].rm_eo - pmatch[no].rm_so;
- }
-
- }
-
- dest = dst = apr_pcalloc(p, len + 1);
-
- /* Now actually fill in the string */
-
- src = input;
-
- while ((c = *src++) != '\0') {
- if (c == '&')
- no = 0;
- else if (c == '$' && apr_isdigit(*src))
- no = *src++ - '0';
- else
- no = 10;
-
- if (no > 9) { /* Ordinary character. */
- if (c == '\\' && (*src == '$' || *src == '&'))
- c = *src++;
- *dst++ = c;
- }
- else if (no < nmatch && pmatch[no].rm_so < pmatch[no].rm_eo) {
- len = pmatch[no].rm_eo - pmatch[no].rm_so;
- memcpy(dst, source + pmatch[no].rm_so, len);
- dst += len;
- }
-
- }
- *dst = '\0';
-
- return dest;
-}
-
-/*
- * Parse .. so we don't compromise security
- */
-AP_DECLARE(void) ap_getparents(char *name)
-{
- char *next;
- int l, w, first_dot;
-
- /* Four paseses, as per RFC 1808 */
- /* a) remove ./ path segments */
- for (next = name; *next && (*next != '.'); next++) {
- }
-
- l = w = first_dot = next - name;
- while (name[l] != '\0') {
- if (name[l] == '.' && IS_SLASH(name[l + 1])
- && (l == 0 || IS_SLASH(name[l - 1])))
- l += 2;
- else
- name[w++] = name[l++];
- }
-
- /* b) remove trailing . path, segment */
- if (w == 1 && name[0] == '.')
- w--;
- else if (w > 1 && name[w - 1] == '.' && IS_SLASH(name[w - 2]))
- w--;
- name[w] = '\0';
-
- /* c) remove all xx/../ segments. (including leading ../ and /../) */
- l = first_dot;
-
- while (name[l] != '\0') {
- if (name[l] == '.' && name[l + 1] == '.' && IS_SLASH(name[l + 2])
- && (l == 0 || IS_SLASH(name[l - 1]))) {
- register int m = l + 3, n;
-
- l = l - 2;
- if (l >= 0) {
- while (l >= 0 && !IS_SLASH(name[l]))
- l--;
- l++;
- }
- else
- l = 0;
- n = l;
- while ((name[n] = name[m]))
- (++n, ++m);
- }
- else
- ++l;
- }
-
- /* d) remove trailing xx/.. segment. */
- if (l == 2 && name[0] == '.' && name[1] == '.')
- name[0] = '\0';
- else if (l > 2 && name[l - 1] == '.' && name[l - 2] == '.'
- && IS_SLASH(name[l - 3])) {
- l = l - 4;
- if (l >= 0) {
- while (l >= 0 && !IS_SLASH(name[l]))
- l--;
- l++;
- }
- else
- l = 0;
- name[l] = '\0';
- }
-}
-
-AP_DECLARE(void) ap_no2slash(char *name)
-{
- char *d, *s;
-
- s = d = name;
-
-#ifdef HAVE_UNC_PATHS
- /* Check for UNC names. Leave leading two slashes. */
- if (s[0] == '/' && s[1] == '/')
- *d++ = *s++;
-#endif
-
- while (*s) {
- if ((*d++ = *s) == '/') {
- do {
- ++s;
- } while (*s == '/');
- }
- else {
- ++s;
- }
- }
- *d = '\0';
-}
-
-
-/*
- * copy at most n leading directories of s into d
- * d should be at least as large as s plus 1 extra byte
- * assumes n > 0
- * the return value is the ever useful pointer to the trailing \0 of d
- *
- * MODIFIED FOR HAVE_DRIVE_LETTERS and NETWARE environments,
- * so that if n == 0, "/" is returned in d with n == 1
- * and s == "e:/test.html", "e:/" is returned in d
- * *** See also directory_walk in modules/http/http_request.c
-
- * examples:
- * /a/b, 0 ==> / (true for all platforms)
- * /a/b, 1 ==> /
- * /a/b, 2 ==> /a/
- * /a/b, 3 ==> /a/b/
- * /a/b, 4 ==> /a/b/
- *
- * c:/a/b 0 ==> /
- * c:/a/b 1 ==> c:/
- * c:/a/b 2 ==> c:/a/
- * c:/a/b 3 ==> c:/a/b
- * c:/a/b 4 ==> c:/a/b
- */
-AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n)
-{
- if (n < 1) {
- *d = '/';
- *++d = '\0';
- return (d);
- }
-
- for (;;) {
- if (*s == '\0' || (*s == '/' && (--n) == 0)) {
- *d = '/';
- break;
- }
- *d++ = *s++;
- }
- *++d = 0;
- return (d);
-}
-
-
-/*
- * return the parent directory name including trailing / of the file s
- */
-AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s)
-{
- const char *last_slash = ap_strrchr_c(s, '/');
- char *d;
- int l;
-
- if (last_slash == NULL) {
- return apr_pstrdup(p, "");
- }
- l = (last_slash - s) + 1;
- d = apr_palloc(p, l + 1);
- memcpy(d, s, l);
- d[l] = 0;
- return (d);
-}
-
-
-AP_DECLARE(int) ap_count_dirs(const char *path)
-{
- register int x, n;
-
- for (x = 0, n = 0; path[x]; x++)
- if (path[x] == '/')
- n++;
- return n;
-}
-
-AP_DECLARE(char *) ap_getword_nc(apr_pool_t *atrans, char **line, char stop)
-{
- return ap_getword(atrans, (const char **) line, stop);
-}
-
-AP_DECLARE(char *) ap_getword(apr_pool_t *atrans, const char **line, char stop)
-{
- const char *pos = *line;
- int len;
- char *res;
-
- while ((*pos != stop) && *pos) {
- ++pos;
- }
-
- len = pos - *line;
- res = (char *)apr_palloc(atrans, len + 1);
- memcpy(res, *line, len);
- res[len] = 0;
-
- if (stop) {
- while (*pos == stop) {
- ++pos;
- }
- }
- *line = pos;
-
- return res;
-}
-
-AP_DECLARE(char *) ap_getword_white_nc(apr_pool_t *atrans, char **line)
-{
- return ap_getword_white(atrans, (const char **) line);
-}
-
-AP_DECLARE(char *) ap_getword_white(apr_pool_t *atrans, const char **line)
-{
- const char *pos = *line;
- int len;
- char *res;
-
- while (!apr_isspace(*pos) && *pos) {
- ++pos;
- }
-
- len = pos - *line;
- res = (char *)apr_palloc(atrans, len + 1);
- memcpy(res, *line, len);
- res[len] = 0;
-
- while (apr_isspace(*pos)) {
- ++pos;
- }
-
- *line = pos;
-
- return res;
-}
-
-AP_DECLARE(char *) ap_getword_nulls_nc(apr_pool_t *atrans, char **line,
- char stop)
-{
- return ap_getword_nulls(atrans, (const char **) line, stop);
-}
-
-AP_DECLARE(char *) ap_getword_nulls(apr_pool_t *atrans, const char **line,
- char stop)
-{
- const char *pos = ap_strchr_c(*line, stop);
- char *res;
-
- if (!pos) {
- res = apr_pstrdup(atrans, *line);
- *line += strlen(*line);
- return res;
- }
-
- res = apr_pstrndup(atrans, *line, pos - *line);
-
- ++pos;
-
- *line = pos;
-
- return res;
-}
-
-/* Get a word, (new) config-file style --- quoted strings and backslashes
- * all honored
- */
-
-static char *substring_conf(apr_pool_t *p, const char *start, int len,
- char quote)
-{
- char *result = apr_palloc(p, len + 2);
- char *resp = result;
- int i;
-
- for (i = 0; i < len; ++i) {
- if (start[i] == '\\' && (start[i + 1] == '\\'
- || (quote && start[i + 1] == quote)))
- *resp++ = start[++i];
- else
- *resp++ = start[i];
- }
-
- *resp++ = '\0';
-#if RESOLVE_ENV_PER_TOKEN
- return ap_resolve_env(p,result);
-#else
- return result;
-#endif
-}
-
-AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line)
-{
- return ap_getword_conf(p, (const char **) line);
-}
-
-AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
-{
- const char *str = *line, *strend;
- char *res;
- char quote;
-
- while (*str && apr_isspace(*str))
- ++str;
-
- if (!*str) {
- *line = str;
- return "";
- }
-
- if ((quote = *str) == '"' || quote == '\'') {
- strend = str + 1;
- while (*strend && *strend != quote) {
- if (*strend == '\\' && strend[1] && strend[1] == quote)
- strend += 2;
- else
- ++strend;
- }
- res = substring_conf(p, str + 1, strend - str - 1, quote);
-
- if (*strend == quote)
- ++strend;
- }
- else {
- strend = str;
- while (*strend && !apr_isspace(*strend))
- ++strend;
-
- res = substring_conf(p, str, strend - str, 0);
- }
-
- while (*strend && apr_isspace(*strend))
- ++strend;
- *line = strend;
- return res;
-}
-
-/* Check a string for any ${ENV} environment variable
- * construct and replace each them by the value of
- * that environment variable, if it exists. If the
- * environment value does not exist, leave the ${ENV}
- * construct alone; it means something else.
- */
-AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word)
-{
- char tmp[ MAX_STRING_LEN ];
- const char *s, *e;
- tmp[0] = '\0';
-
- if (!(s=ap_strchr_c(word,'$')))
- return word;
-
- do {
- /* XXX - relies on strncat() to add '\0'
- */
- strncat(tmp,word,s - word);
- if ((s[1] == '{') && (e=ap_strchr_c(s,'}'))) {
- const char *e2 = e;
- char *var;
- word = e + 1;
- var = apr_pstrndup(p, s+2, e2-(s+2));
- e = getenv(var);
- if (e) {
- strcat(tmp,e);
- } else {
- strncat(tmp, s, e2-s);
- strcat(tmp,"}");
- }
- } else {
- /* ignore invalid strings */
- word = s+1;
- strcat(tmp,"$");
- };
- } while ((s=ap_strchr_c(word,'$')));
- strcat(tmp,word);
-
- return apr_pstrdup(p,tmp);
-}
-AP_DECLARE(int) ap_cfg_closefile(ap_configfile_t *cfp)
-{
-#ifdef DEBUG
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
- "Done with config file %s", cfp->name);
-#endif
- return (cfp->close == NULL) ? 0 : cfp->close(cfp->param);
-}
-
-static apr_status_t cfg_close(void *param)
-{
- apr_file_t *cfp = (apr_file_t *) param;
- return (apr_file_close(cfp));
-}
-
-static int cfg_getch(void *param)
-{
- char ch;
- apr_file_t *cfp = (apr_file_t *) param;
- if (apr_file_getc(&ch, cfp) == APR_SUCCESS)
- return ch;
- return (int)EOF;
-}
-
-static void *cfg_getstr(void *buf, size_t bufsiz, void *param)
-{
- apr_file_t *cfp = (apr_file_t *) param;
- apr_status_t rv;
- rv = apr_file_gets(buf, bufsiz, cfp);
- if (rv == APR_SUCCESS) {
- return buf;
- }
- return NULL;
-}
-
-/* Open a ap_configfile_t as FILE, return open ap_configfile_t struct pointer */
-AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg,
- apr_pool_t *p, const char *name)
-{
- ap_configfile_t *new_cfg;
- apr_file_t *file = NULL;
- apr_finfo_t finfo;
- apr_status_t status;
-#ifdef DEBUG
- char buf[120];
-#endif
-
- if (name == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "Internal error: pcfg_openfile() called with NULL filename");
- return APR_EBADF;
- }
-
- status = apr_file_open(&file, name, APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, p);
-#ifdef DEBUG
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
- "Opening config file %s (%s)",
- name, (status != APR_SUCCESS) ?
- apr_strerror(status, buf, sizeof(buf)) : "successful");
-#endif
- if (status != APR_SUCCESS)
- return status;
-
- status = apr_file_info_get(&finfo, APR_FINFO_TYPE, file);
- if (status != APR_SUCCESS)
- return status;
-
- if (finfo.filetype != APR_REG &&
-#if defined(WIN32) || defined(OS2) || defined(NETWARE)
- strcasecmp(apr_filepath_name_get(name), "nul") != 0) {
-#else
- strcmp(name, "/dev/null") != 0) {
-#endif /* WIN32 || OS2 */
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "Access to file %s denied by server: not a regular file",
- name);
- apr_file_close(file);
- return APR_EBADF;
- }
-
-#ifdef WIN32
- /* Some twisted character [no pun intended] at MS decided that a
- * zero width joiner as the lead wide character would be ideal for
- * describing Unicode text files. This was further convoluted to
- * another MSism that the same character mapped into utf-8, EF BB BF
- * would signify utf-8 text files.
- *
- * Since MS configuration files are all protecting utf-8 encoded
- * Unicode path, file and resource names, we already have the correct
- * WinNT encoding. But at least eat the stupid three bytes up front.
- */
- {
- unsigned char buf[4];
- apr_size_t len = 3;
- status = apr_file_read(file, buf, &len);
- if ((status != APR_SUCCESS) || (len < 3)
- || memcmp(buf, "\xEF\xBB\xBF", 3) != 0) {
- apr_off_t zero = 0;
- apr_file_seek(file, APR_SET, &zero);
- }
- }
-#endif
-
- new_cfg = apr_palloc(p, sizeof(*new_cfg));
- new_cfg->param = file;
- new_cfg->name = apr_pstrdup(p, name);
- new_cfg->getch = (int (*)(void *)) cfg_getch;
- new_cfg->getstr = (void *(*)(void *, size_t, void *)) cfg_getstr;
- new_cfg->close = (int (*)(void *)) cfg_close;
- new_cfg->line_number = 0;
- *ret_cfg = new_cfg;
- return APR_SUCCESS;
-}
-
-
-/* Allocate a ap_configfile_t handle with user defined functions and params */
-AP_DECLARE(ap_configfile_t *) ap_pcfg_open_custom(apr_pool_t *p,
- const char *descr,
- void *param,
- int(*getch)(void *param),
- void *(*getstr) (void *buf, size_t bufsiz, void *param),
- int(*close_func)(void *param))
-{
- ap_configfile_t *new_cfg = apr_palloc(p, sizeof(*new_cfg));
-#ifdef DEBUG
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
- "Opening config handler %s", descr);
-#endif
- new_cfg->param = param;
- new_cfg->name = descr;
- new_cfg->getch = getch;
- new_cfg->getstr = getstr;
- new_cfg->close = close_func;
- new_cfg->line_number = 0;
- return new_cfg;
-}
-
-/* Read one character from a configfile_t */
-AP_DECLARE(int) ap_cfg_getc(ap_configfile_t *cfp)
-{
- register int ch = cfp->getch(cfp->param);
- if (ch == LF)
- ++cfp->line_number;
- return ch;
-}
-
-/* Read one line from open ap_configfile_t, strip LF, increase line number */
-/* If custom handler does not define a getstr() function, read char by char */
-AP_DECLARE(int) ap_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp)
-{
- /* If a "get string" function is defined, use it */
- if (cfp->getstr != NULL) {
- char *src, *dst;
- char *cp;
- char *cbuf = buf;
- size_t cbufsize = bufsize;
-
- while (1) {
- ++cfp->line_number;
- if (cfp->getstr(cbuf, cbufsize, cfp->param) == NULL)
- return 1;
-
- /*
- * check for line continuation,
- * i.e. match [^\\]\\[\r]\n only
- */
- cp = cbuf;
- while (cp < cbuf+cbufsize && *cp != '\0')
- cp++;
- if (cp > cbuf && cp[-1] == LF) {
- cp--;
- if (cp > cbuf && cp[-1] == CR)
- cp--;
- if (cp > cbuf && cp[-1] == '\\') {
- cp--;
- if (!(cp > cbuf && cp[-1] == '\\')) {
- /*
- * line continuation requested -
- * then remove backslash and continue
- */
- cbufsize -= (cp-cbuf);
- cbuf = cp;
- continue;
- }
- else {
- /*
- * no real continuation because escaped -
- * then just remove escape character
- */
- for ( ; cp < cbuf+cbufsize && *cp != '\0'; cp++)
- cp[0] = cp[1];
- }
- }
- }
- break;
- }
-
- /*
- * Leading and trailing white space is eliminated completely
- */
- src = buf;
- while (apr_isspace(*src))
- ++src;
- /* blast trailing whitespace */
- dst = &src[strlen(src)];
- while (--dst >= src && apr_isspace(*dst))
- *dst = '\0';
- /* Zap leading whitespace by shifting */
- if (src != buf)
- for (dst = buf; (*dst++ = *src++) != '\0'; )
- ;
-
-#ifdef DEBUG_CFG_LINES
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL, "Read config: %s", buf);
-#endif
- return 0;
- } else {
- /* No "get string" function defined; read character by character */
- register int c;
- register size_t i = 0;
-
- buf[0] = '\0';
- /* skip leading whitespace */
- do {
- c = cfp->getch(cfp->param);
- } while (c == '\t' || c == ' ');
-
- if (c == EOF)
- return 1;
-
- if(bufsize < 2) {
- /* too small, assume caller is crazy */
- return 1;
- }
-
- while (1) {
- if ((c == '\t') || (c == ' ')) {
- buf[i++] = ' ';
- while ((c == '\t') || (c == ' '))
- c = cfp->getch(cfp->param);
- }
- if (c == CR) {
- /* silently ignore CR (_assume_ that a LF follows) */
- c = cfp->getch(cfp->param);
- }
- if (c == LF) {
- /* increase line number and return on LF */
- ++cfp->line_number;
- }
- if (c == EOF || c == 0x4 || c == LF || i >= (bufsize - 2)) {
- /*
- * check for line continuation
- */
- if (i > 0 && buf[i-1] == '\\') {
- i--;
- if (!(i > 0 && buf[i-1] == '\\')) {
- /* line is continued */
- c = cfp->getch(cfp->param);
- continue;
- }
- /* else nothing needs be done because
- * then the backslash is escaped and
- * we just strip to a single one
- */
- }
- /* blast trailing whitespace */
- while (i > 0 && apr_isspace(buf[i - 1]))
- --i;
- buf[i] = '\0';
-#ifdef DEBUG_CFG_LINES
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
- "Read config: %s", buf);
-#endif
- return 0;
- }
- buf[i] = c;
- ++i;
- c = cfp->getch(cfp->param);
- }
- }
-}
-
-/* Size an HTTP header field list item, as separated by a comma.
- * The return value is a pointer to the beginning of the non-empty list item
- * within the original string (or NULL if there is none) and the address
- * of field is shifted to the next non-comma, non-whitespace character.
- * len is the length of the item excluding any beginning whitespace.
- */
-AP_DECLARE(const char *) ap_size_list_item(const char **field, int *len)
-{
- const unsigned char *ptr = (const unsigned char *)*field;
- const unsigned char *token;
- int in_qpair, in_qstr, in_com;
-
- /* Find first non-comma, non-whitespace byte */
-
- while (*ptr == ',' || apr_isspace(*ptr))
- ++ptr;
-
- token = ptr;
-
- /* Find the end of this item, skipping over dead bits */
-
- for (in_qpair = in_qstr = in_com = 0;
- *ptr && (in_qpair || in_qstr || in_com || *ptr != ',');
- ++ptr) {
-
- if (in_qpair) {
- in_qpair = 0;
- }
- else {
- switch (*ptr) {
- case '\\': in_qpair = 1; /* quoted-pair */
- break;
- case '"' : if (!in_com) /* quoted string delim */
- in_qstr = !in_qstr;
- break;
- case '(' : if (!in_qstr) /* comment (may nest) */
- ++in_com;
- break;
- case ')' : if (in_com) /* end comment */
- --in_com;
- break;
- default : break;
- }
- }
- }
-
- if ((*len = (ptr - token)) == 0) {
- *field = (const char *)ptr;
- return NULL;
- }
-
- /* Advance field pointer to the next non-comma, non-white byte */
-
- while (*ptr == ',' || apr_isspace(*ptr))
- ++ptr;
-
- *field = (const char *)ptr;
- return (const char *)token;
-}
-
-/* Retrieve an HTTP header field list item, as separated by a comma,
- * while stripping insignificant whitespace and lowercasing anything not in
- * a quoted string or comment. The return value is a new string containing
- * the converted list item (or NULL if none) and the address pointed to by
- * field is shifted to the next non-comma, non-whitespace.
- */
-AP_DECLARE(char *) ap_get_list_item(apr_pool_t *p, const char **field)
-{
- const char *tok_start;
- const unsigned char *ptr;
- unsigned char *pos;
- char *token;
- int addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0, tok_len = 0;
-
- /* Find the beginning and maximum length of the list item so that
- * we can allocate a buffer for the new string and reset the field.
- */
- if ((tok_start = ap_size_list_item(field, &tok_len)) == NULL) {
- return NULL;
- }
- token = apr_palloc(p, tok_len + 1);
-
- /* Scan the token again, but this time copy only the good bytes.
- * We skip extra whitespace and any whitespace around a '=', '/',
- * or ';' and lowercase normal characters not within a comment,
- * quoted-string or quoted-pair.
- */
- for (ptr = (const unsigned char *)tok_start, pos = (unsigned char *)token;
- *ptr && (in_qpair || in_qstr || in_com || *ptr != ',');
- ++ptr) {
-
- if (in_qpair) {
- in_qpair = 0;
- *pos++ = *ptr;
- }
- else {
- switch (*ptr) {
- case '\\': in_qpair = 1;
- if (addspace == 1)
- *pos++ = ' ';
- *pos++ = *ptr;
- addspace = 0;
- break;
- case '"' : if (!in_com)
- in_qstr = !in_qstr;
- if (addspace == 1)
- *pos++ = ' ';
- *pos++ = *ptr;
- addspace = 0;
- break;
- case '(' : if (!in_qstr)
- ++in_com;
- if (addspace == 1)
- *pos++ = ' ';
- *pos++ = *ptr;
- addspace = 0;
- break;
- case ')' : if (in_com)
- --in_com;
- *pos++ = *ptr;
- addspace = 0;
- break;
- case ' ' :
- case '\t': if (addspace)
- break;
- if (in_com || in_qstr)
- *pos++ = *ptr;
- else
- addspace = 1;
- break;
- case '=' :
- case '/' :
- case ';' : if (!(in_com || in_qstr))
- addspace = -1;
- *pos++ = *ptr;
- break;
- default : if (addspace == 1)
- *pos++ = ' ';
- *pos++ = (in_com || in_qstr) ? *ptr
- : apr_tolower(*ptr);
- addspace = 0;
- break;
- }
- }
- }
- *pos = '\0';
-
- return token;
-}
-
-/* Find an item in canonical form (lowercase, no extra spaces) within
- * an HTTP field value list. Returns 1 if found, 0 if not found.
- * This would be much more efficient if we stored header fields as
- * an array of list items as they are received instead of a plain string.
- */
-AP_DECLARE(int) ap_find_list_item(apr_pool_t *p, const char *line,
- const char *tok)
-{
- const unsigned char *pos;
- const unsigned char *ptr = (const unsigned char *)line;
- int good = 0, addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0;
-
- if (!line || !tok)
- return 0;
-
- do { /* loop for each item in line's list */
-
- /* Find first non-comma, non-whitespace byte */
-
- while (*ptr == ',' || apr_isspace(*ptr))
- ++ptr;
-
- if (*ptr)
- good = 1; /* until proven otherwise for this item */
- else
- break; /* no items left and nothing good found */
-
- /* We skip extra whitespace and any whitespace around a '=', '/',
- * or ';' and lowercase normal characters not within a comment,
- * quoted-string or quoted-pair.
- */
- for (pos = (const unsigned char *)tok;
- *ptr && (in_qpair || in_qstr || in_com || *ptr != ',');
- ++ptr) {
-
- if (in_qpair) {
- in_qpair = 0;
- if (good)
- good = (*pos++ == *ptr);
- }
- else {
- switch (*ptr) {
- case '\\': in_qpair = 1;
- if (addspace == 1)
- good = good && (*pos++ == ' ');
- good = good && (*pos++ == *ptr);
- addspace = 0;
- break;
- case '"' : if (!in_com)
- in_qstr = !in_qstr;
- if (addspace == 1)
- good = good && (*pos++ == ' ');
- good = good && (*pos++ == *ptr);
- addspace = 0;
- break;
- case '(' : if (!in_qstr)
- ++in_com;
- if (addspace == 1)
- good = good && (*pos++ == ' ');
- good = good && (*pos++ == *ptr);
- addspace = 0;
- break;
- case ')' : if (in_com)
- --in_com;
- good = good && (*pos++ == *ptr);
- addspace = 0;
- break;
- case ' ' :
- case '\t': if (addspace || !good)
- break;
- if (in_com || in_qstr)
- good = (*pos++ == *ptr);
- else
- addspace = 1;
- break;
- case '=' :
- case '/' :
- case ';' : if (!(in_com || in_qstr))
- addspace = -1;
- good = good && (*pos++ == *ptr);
- break;
- default : if (!good)
- break;
- if (addspace == 1)
- good = (*pos++ == ' ');
- if (in_com || in_qstr)
- good = good && (*pos++ == *ptr);
- else
- good = good && (*pos++ == apr_tolower(*ptr));
- addspace = 0;
- break;
- }
- }
- }
- if (good && *pos)
- good = 0; /* not good if only a prefix was matched */
-
- } while (*ptr && !good);
-
- return good;
-}
-
-
-/* Retrieve a token, spacing over it and returning a pointer to
- * the first non-white byte afterwards. Note that these tokens
- * are delimited by semis and commas; and can also be delimited
- * by whitespace at the caller's option.
- */
-
-AP_DECLARE(char *) ap_get_token(apr_pool_t *p, const char **accept_line,
- int accept_white)
-{
- const char *ptr = *accept_line;
- const char *tok_start;
- char *token;
- int tok_len;
-
- /* Find first non-white byte */
-
- while (*ptr && apr_isspace(*ptr))
- ++ptr;
-
- tok_start = ptr;
-
- /* find token end, skipping over quoted strings.
- * (comments are already gone).
- */
-
- while (*ptr && (accept_white || !apr_isspace(*ptr))
- && *ptr != ';' && *ptr != ',') {
- if (*ptr++ == '"')
- while (*ptr)
- if (*ptr++ == '"')
- break;
- }
-
- tok_len = ptr - tok_start;
- token = apr_pstrndup(p, tok_start, tok_len);
-
- /* Advance accept_line pointer to the next non-white byte */
-
- while (*ptr && apr_isspace(*ptr))
- ++ptr;
-
- *accept_line = ptr;
- return token;
-}
-
-
-/* find http tokens, see the definition of token from RFC2068 */
-AP_DECLARE(int) ap_find_token(apr_pool_t *p, const char *line, const char *tok)
-{
- const unsigned char *start_token;
- const unsigned char *s;
-
- if (!line)
- return 0;
-
- s = (const unsigned char *)line;
- for (;;) {
- /* find start of token, skip all stop characters, note NUL
- * isn't a token stop, so we don't need to test for it
- */
- while (TEST_CHAR(*s, T_HTTP_TOKEN_STOP)) {
- ++s;
- }
- if (!*s) {
- return 0;
- }
- start_token = s;
- /* find end of the token */
- while (*s && !TEST_CHAR(*s, T_HTTP_TOKEN_STOP)) {
- ++s;
- }
- if (!strncasecmp((const char *)start_token, (const char *)tok,
- s - start_token)) {
- return 1;
- }
- if (!*s) {
- return 0;
- }
- }
-}
-
-
-AP_DECLARE(int) ap_find_last_token(apr_pool_t *p, const char *line,
- const char *tok)
-{
- int llen, tlen, lidx;
-
- if (!line)
- return 0;
-
- llen = strlen(line);
- tlen = strlen(tok);
- lidx = llen - tlen;
-
- if (lidx < 0 ||
- (lidx > 0 && !(apr_isspace(line[lidx - 1]) || line[lidx - 1] == ',')))
- return 0;
-
- return (strncasecmp(&line[lidx], tok, tlen) == 0);
-}
-
-AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *str)
-{
- char *cmd;
- unsigned char *d;
- const unsigned char *s;
-
- cmd = apr_palloc(p, 2 * strlen(str) + 1); /* Be safe */
- d = (unsigned char *)cmd;
- s = (const unsigned char *)str;
- for (; *s; ++s) {
-
-#if defined(OS2) || defined(WIN32)
- /*
- * Newlines to Win32/OS2 CreateProcess() are ill advised.
- * Convert them to spaces since they are effectively white
- * space to most applications
- */
- if (*s == '\r' || *s == '\n') {
- *d++ = ' ';
- continue;
- }
-#endif
-
- if (TEST_CHAR(*s, T_ESCAPE_SHELL_CMD)) {
- *d++ = '\\';
- }
- *d++ = *s;
- }
- *d = '\0';
-
- return cmd;
-}
-
-static char x2c(const char *what)
-{
- register char digit;
-
-#if !APR_CHARSET_EBCDIC
- digit = ((what[0] >= 'A') ? ((what[0] & 0xdf) - 'A') + 10
- : (what[0] - '0'));
- digit *= 16;
- digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A') + 10
- : (what[1] - '0'));
-#else /*APR_CHARSET_EBCDIC*/
- char xstr[5];
- xstr[0]='0';
- xstr[1]='x';
- xstr[2]=what[0];
- xstr[3]=what[1];
- xstr[4]='\0';
- digit = apr_xlate_conv_byte(ap_hdrs_from_ascii,
- 0xFF & strtol(xstr, NULL, 16));
-#endif /*APR_CHARSET_EBCDIC*/
- return (digit);
-}
-
-/*
- * Unescapes a URL.
- * Returns 0 on success, non-zero on error
- * Failure is due to
- * bad % escape returns HTTP_BAD_REQUEST
- *
- * decoding %00 -> \0 (the null character)
- * decoding %2f -> / (a special character)
- * returns HTTP_NOT_FOUND
- */
-AP_DECLARE(int) ap_unescape_url(char *url)
-{
- register int badesc, badpath;
- char *x, *y;
-
- badesc = 0;
- badpath = 0;
- /* Initial scan for first '%'. Don't bother writing values before
- * seeing a '%' */
- y = strchr(url, '%');
- if (y == NULL) {
- return OK;
- }
- for (x = y; *y; ++x, ++y) {
- if (*y != '%')
- *x = *y;
- else {
- if (!apr_isxdigit(*(y + 1)) || !apr_isxdigit(*(y + 2))) {
- badesc = 1;
- *x = '%';
- }
- else {
- *x = x2c(y + 1);
- y += 2;
- if (IS_SLASH(*x) || *x == '\0')
- badpath = 1;
- }
- }
- }
- *x = '\0';
- if (badesc)
- return HTTP_BAD_REQUEST;
- else if (badpath)
- return HTTP_NOT_FOUND;
- else
- return OK;
-}
-
-AP_DECLARE(int) ap_unescape_url_keep2f(char *url)
-{
- register int badesc, badpath;
- char *x, *y;
-
- badesc = 0;
- badpath = 0;
- /* Initial scan for first '%'. Don't bother writing values before
- * seeing a '%' */
- y = strchr(url, '%');
- if (y == NULL) {
- return OK;
- }
- for (x = y; *y; ++x, ++y) {
- if (*y != '%') {
- *x = *y;
- }
- else {
- if (!apr_isxdigit(*(y + 1)) || !apr_isxdigit(*(y + 2))) {
- badesc = 1;
- *x = '%';
- }
- else {
- char decoded;
- decoded = x2c(y + 1);
- if (IS_SLASH(decoded)) {
- *x++ = *y++;
- *x = *y;
- }
- else {
- *x = decoded;
- y += 2;
- if (decoded == '\0') {
- badpath = 1;
- }
- }
- }
- }
- }
- *x = '\0';
- if (badesc) {
- return HTTP_BAD_REQUEST;
- }
- else if (badpath) {
- return HTTP_NOT_FOUND;
- }
- else {
- return OK;
- }
-}
-
-AP_DECLARE(char *) ap_construct_server(apr_pool_t *p, const char *hostname,
- apr_port_t port, const request_rec *r)
-{
- if (ap_is_default_port(port, r)) {
- return apr_pstrdup(p, hostname);
- }
- else {
- return apr_psprintf(p, "%s:%u", hostname, port);
- }
-}
-
-/* c2x takes an unsigned, and expects the caller has guaranteed that
- * 0 <= what < 256... which usually means that you have to cast to
- * unsigned char first, because (unsigned)(char)(x) first goes through
- * signed extension to an int before the unsigned cast.
- *
- * The reason for this assumption is to assist gcc code generation --
- * the unsigned char -> unsigned extension is already done earlier in
- * both uses of this code, so there's no need to waste time doing it
- * again.
- */
-static const char c2x_table[] = "0123456789abcdef";
-
-static APR_INLINE unsigned char *c2x(unsigned what, unsigned char *where)
-{
-#if APR_CHARSET_EBCDIC
- what = apr_xlate_conv_byte(ap_hdrs_to_ascii, (unsigned char)what);
-#endif /*APR_CHARSET_EBCDIC*/
- *where++ = '%';
- *where++ = c2x_table[what >> 4];
- *where++ = c2x_table[what & 0xf];
- return where;
-}
-
-/*
- * escape_path_segment() escapes a path segment, as defined in RFC 1808. This
- * routine is (should be) OS independent.
- *
- * os_escape_path() converts an OS path to a URL, in an OS dependent way. In all
- * cases if a ':' occurs before the first '/' in the URL, the URL should be
- * prefixed with "./" (or the ':' escaped). In the case of Unix, this means
- * leaving '/' alone, but otherwise doing what escape_path_segment() does. For
- * efficiency reasons, we don't use escape_path_segment(), which is provided for
- * reference. Again, RFC 1808 is where this stuff is defined.
- *
- * If partial is set, os_escape_path() assumes that the path will be appended to
- * something with a '/' in it (and thus does not prefix "./").
- */
-
-AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *segment)
-{
- char *copy = apr_palloc(p, 3 * strlen(segment) + 1);
- const unsigned char *s = (const unsigned char *)segment;
- unsigned char *d = (unsigned char *)copy;
- unsigned c;
-
- while ((c = *s)) {
- if (TEST_CHAR(c, T_ESCAPE_PATH_SEGMENT)) {
- d = c2x(c, d);
- }
- else {
- *d++ = c;
- }
- ++s;
- }
- *d = '\0';
- return copy;
-}
-
-AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partial)
-{
- char *copy = apr_palloc(p, 3 * strlen(path) + 3);
- const unsigned char *s = (const unsigned char *)path;
- unsigned char *d = (unsigned char *)copy;
- unsigned c;
-
- if (!partial) {
- const char *colon = ap_strchr_c(path, ':');
- const char *slash = ap_strchr_c(path, '/');
-
- if (colon && (!slash || colon < slash)) {
- *d++ = '.';
- *d++ = '/';
- }
- }
- while ((c = *s)) {
- if (TEST_CHAR(c, T_OS_ESCAPE_PATH)) {
- d = c2x(c, d);
- }
- else {
- *d++ = c;
- }
- ++s;
- }
- *d = '\0';
- return copy;
-}
-
-/* ap_escape_uri is now a macro for os_escape_path */
-
-AP_DECLARE(char *) ap_escape_html(apr_pool_t *p, const char *s)
-{
- int i, j;
- char *x;
-
- /* first, count the number of extra characters */
- for (i = 0, j = 0; s[i] != '\0'; i++)
- if (s[i] == '<' || s[i] == '>')
- j += 3;
- else if (s[i] == '&')
- j += 4;
-
- if (j == 0)
- return apr_pstrmemdup(p, s, i);
-
- x = apr_palloc(p, i + j + 1);
- for (i = 0, j = 0; s[i] != '\0'; i++, j++)
- if (s[i] == '<') {
- memcpy(&x[j], "&lt;", 4);
- j += 3;
- }
- else if (s[i] == '>') {
- memcpy(&x[j], "&gt;", 4);
- j += 3;
- }
- else if (s[i] == '&') {
- memcpy(&x[j], "&amp;", 5);
- j += 4;
- }
- else
- x[j] = s[i];
-
- x[j] = '\0';
- return x;
-}
-
-AP_DECLARE(char *) ap_escape_logitem(apr_pool_t *p, const char *str)
-{
- char *ret;
- unsigned char *d;
- const unsigned char *s;
-
- if (!str) {
- return NULL;
- }
-
- ret = apr_palloc(p, 4 * strlen(str) + 1); /* Be safe */
- d = (unsigned char *)ret;
- s = (const unsigned char *)str;
- for (; *s; ++s) {
-
- if (TEST_CHAR(*s, T_ESCAPE_LOGITEM)) {
- *d++ = '\\';
- switch(*s) {
- case '\b':
- *d++ = 'b';
- break;
- case '\n':
- *d++ = 'n';
- break;
- case '\r':
- *d++ = 'r';
- break;
- case '\t':
- *d++ = 't';
- break;
- case '\v':
- *d++ = 'v';
- break;
- case '\\':
- case '"':
- *d++ = *s;
- break;
- default:
- c2x(*s, d);
- *d = 'x';
- d += 3;
- }
- }
- else {
- *d++ = *s;
- }
- }
- *d = '\0';
-
- return ret;
-}
-
-AP_DECLARE(apr_size_t) ap_escape_errorlog_item(char *dest, const char *source,
- apr_size_t buflen)
-{
- unsigned char *d, *ep;
- const unsigned char *s;
-
- if (!source || !buflen) { /* be safe */
- return 0;
- }
-
- d = (unsigned char *)dest;
- s = (const unsigned char *)source;
- ep = d + buflen - 1;
-
- for (; d < ep && *s; ++s) {
-
- if (TEST_CHAR(*s, T_ESCAPE_LOGITEM)) {
- *d++ = '\\';
- if (d >= ep) {
- --d;
- break;
- }
-
- switch(*s) {
- case '\b':
- *d++ = 'b';
- break;
- case '\n':
- *d++ = 'n';
- break;
- case '\r':
- *d++ = 'r';
- break;
- case '\t':
- *d++ = 't';
- break;
- case '\v':
- *d++ = 'v';
- break;
- case '\\':
- *d++ = *s;
- break;
- case '"': /* no need for this in error log */
- d[-1] = *s;
- break;
- default:
- if (d >= ep - 2) {
- ep = --d; /* break the for loop as well */
- break;
- }
- c2x(*s, d);
- *d = 'x';
- d += 3;
- }
- }
- else {
- *d++ = *s;
- }
- }
- *d = '\0';
-
- return (d - (unsigned char *)dest);
-}
-
-AP_DECLARE(int) ap_is_directory(apr_pool_t *p, const char *path)
-{
- apr_finfo_t finfo;
-
- if (apr_stat(&finfo, path, APR_FINFO_TYPE, p) != APR_SUCCESS)
- return 0; /* in error condition, just return no */
-
- return (finfo.filetype == APR_DIR);
-}
-
-AP_DECLARE(int) ap_is_rdirectory(apr_pool_t *p, const char *path)
-{
- apr_finfo_t finfo;
-
- if (apr_stat(&finfo, path, APR_FINFO_LINK | APR_FINFO_TYPE, p) != APR_SUCCESS)
- return 0; /* in error condition, just return no */
-
- return (finfo.filetype == APR_DIR);
-}
-
-AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *src1,
- const char *src2)
-{
- apr_size_t len1, len2;
- char *path;
-
- len1 = strlen(src1);
- len2 = strlen(src2);
- /* allocate +3 for '/' delimiter, trailing NULL and overallocate
- * one extra byte to allow the caller to add a trailing '/'
- */
- path = (char *)apr_palloc(a, len1 + len2 + 3);
- if (len1 == 0) {
- *path = '/';
- memcpy(path + 1, src2, len2 + 1);
- }
- else {
- char *next;
- memcpy(path, src1, len1);
- next = path + len1;
- if (next[-1] != '/') {
- *next++ = '/';
- }
- memcpy(next, src2, len2 + 1);
- }
- return path;
-}
-
-/*
- * Check for an absoluteURI syntax (see section 3.2 in RFC2068).
- */
-AP_DECLARE(int) ap_is_url(const char *u)
-{
- register int x;
-
- for (x = 0; u[x] != ':'; x++) {
- if ((!u[x]) ||
- ((!apr_isalpha(u[x])) && (!apr_isdigit(u[x])) &&
- (u[x] != '+') && (u[x] != '-') && (u[x] != '.'))) {
- return 0;
- }
- }
-
- return (x ? 1 : 0); /* If the first character is ':', it's broken, too */
-}
-
-AP_DECLARE(int) ap_ind(const char *s, char c)
-{
- const char *p = ap_strchr_c(s, c);
-
- if (p == NULL)
- return -1;
- return p - s;
-}
-
-AP_DECLARE(int) ap_rind(const char *s, char c)
-{
- const char *p = ap_strrchr_c(s, c);
-
- if (p == NULL)
- return -1;
- return p - s;
-}
-
-AP_DECLARE(void) ap_str_tolower(char *str)
-{
- while (*str) {
- *str = apr_tolower(*str);
- ++str;
- }
-}
-
-static char *find_fqdn(apr_pool_t *a, struct hostent *p)
-{
- int x;
-
- if (!strchr(p->h_name, '.')) {
- if (p->h_aliases) {
- for (x = 0; p->h_aliases[x]; ++x) {
- if (strchr(p->h_aliases[x], '.') &&
- (!strncasecmp(p->h_aliases[x], p->h_name,
- strlen(p->h_name))))
- return apr_pstrdup(a, p->h_aliases[x]);
- }
- }
- return NULL;
- }
- return apr_pstrdup(a, (void *) p->h_name);
-}
-
-char *ap_get_local_host(apr_pool_t *a)
-{
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 256
-#endif
- char str[MAXHOSTNAMELEN + 1];
- char *server_hostname = NULL;
- struct hostent *p;
-
-#ifdef BEOS_R5
- if (gethostname(str, sizeof(str) - 1) == 0)
-#else
- if (gethostname(str, sizeof(str) - 1) != 0)
-#endif
- {
- ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_WARNING, 0, a,
- "%s: gethostname() failed to determine ServerName",
- ap_server_argv0);
- }
- else
- {
- str[sizeof(str) - 1] = '\0';
- /* TODO: Screaming for APR-ization */
- if ((!(p = gethostbyname(str)))
- || (!(server_hostname = find_fqdn(a, p)))) {
- /* Recovery - return the default servername by IP: */
- if (p && p->h_addr_list[0]) {
- apr_snprintf(str, sizeof(str), "%pA", p->h_addr_list[0]);
- server_hostname = apr_pstrdup(a, str);
- /* We will drop through to report the IP-named server */
- }
- }
- else {
- /* Since we found a fdqn, return it with no logged message. */
- return server_hostname;
- }
- }
-
- if (!server_hostname)
- server_hostname = apr_pstrdup(a, "127.0.0.1");
-
- ap_log_perror(APLOG_MARK, APLOG_ALERT|APLOG_STARTUP, 0, a,
- "%s: Could not determine the server's fully qualified "
- "domain name, using %s for ServerName",
- ap_server_argv0, server_hostname);
-
- return server_hostname;
-}
-
-/* simple 'pool' alloc()ing glue to apr_base64.c
- */
-AP_DECLARE(char *) ap_pbase64decode(apr_pool_t *p, const char *bufcoded)
-{
- char *decoded;
- int l;
-
- decoded = (char *) apr_palloc(p, 1 + apr_base64_decode_len(bufcoded));
- l = apr_base64_decode(decoded, bufcoded);
- decoded[l] = '\0'; /* make binary sequence into string */
-
- return decoded;
-}
-
-AP_DECLARE(char *) ap_pbase64encode(apr_pool_t *p, char *string)
-{
- char *encoded;
- int l = strlen(string);
-
- encoded = (char *) apr_palloc(p, 1 + apr_base64_encode_len(l));
- l = apr_base64_encode(encoded, string, l);
- encoded[l] = '\0'; /* make binary sequence into string */
-
- return encoded;
-}
-
-/* we want to downcase the type/subtype for comparison purposes
- * but nothing else because ;parameter=foo values are case sensitive.
- * XXX: in truth we want to downcase parameter names... but really,
- * apache has never handled parameters and such correctly. You
- * also need to compress spaces and such to be able to compare
- * properly. -djg
- */
-AP_DECLARE(void) ap_content_type_tolower(char *str)
-{
- char *semi;
-
- semi = strchr(str, ';');
- if (semi) {
- *semi = '\0';
- }
- while (*str) {
- *str = apr_tolower(*str);
- ++str;
- }
- if (semi) {
- *semi = ';';
- }
-}
-
-/*
- * Given a string, replace any bare " with \" .
- */
-AP_DECLARE(char *) ap_escape_quotes(apr_pool_t *p, const char *instring)
-{
- int newlen = 0;
- const char *inchr = instring;
- char *outchr, *outstring;
-
- /*
- * Look through the input string, jogging the length of the output
- * string up by an extra byte each time we find an unescaped ".
- */
- while (*inchr != '\0') {
- newlen++;
- if (*inchr == '"') {
- newlen++;
- }
- /*
- * If we find a slosh, and it's not the last byte in the string,
- * it's escaping something - advance past both bytes.
- */
- if ((*inchr == '\\') && (inchr[1] != '\0')) {
- inchr++;
- newlen++;
- }
- inchr++;
- }
- outstring = apr_palloc(p, newlen + 1);
- inchr = instring;
- outchr = outstring;
- /*
- * Now copy the input string to the output string, inserting a slosh
- * in front of every " that doesn't already have one.
- */
- while (*inchr != '\0') {
- if ((*inchr == '\\') && (inchr[1] != '\0')) {
- *outchr++ = *inchr++;
- *outchr++ = *inchr++;
- }
- if (*inchr == '"') {
- *outchr++ = '\\';
- }
- if (*inchr != '\0') {
- *outchr++ = *inchr++;
- }
- }
- *outchr = '\0';
- return outstring;
-}
diff --git a/server/util_cfgtree.c b/server/util_cfgtree.c
deleted file mode 100644
index 984a1ce751..0000000000
--- a/server/util_cfgtree.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CORE_PRIVATE
-#include "util_cfgtree.h"
-#include <stdlib.h>
-
-ap_directive_t *ap_add_node(ap_directive_t **parent, ap_directive_t *current,
- ap_directive_t *toadd, int child)
-{
- if (current == NULL) {
- /* we just started a new parent */
- if (*parent != NULL) {
- (*parent)->first_child = toadd;
- toadd->parent = *parent;
- }
- if (child) {
- /* First item in config file or container is a container */
- *parent = toadd;
- return NULL;
- }
- return toadd;
- }
- current->next = toadd;
- toadd->parent = *parent;
- if (child) {
- /* switch parents, navigate into child */
- *parent = toadd;
- return NULL;
- }
- return toadd;
-}
-
-
diff --git a/server/util_charset.c b/server/util_charset.c
deleted file mode 100644
index 7c329018b7..0000000000
--- a/server/util_charset.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-
-#if APR_CHARSET_EBCDIC
-
-#include "httpd.h"
-#include "http_log.h"
-#include "http_core.h"
-#include "util_charset.h"
-
-/* ap_hdrs_to_ascii, ap_hdrs_from_ascii
- *
- * These are the translation handles used to translate between the network
- * format of protocol headers and the local machine format.
- *
- * For an EBCDIC machine, these are valid handles which are set up at
- * initialization to translate between ISO-8859-1 and the code page of
- * the source code.
- *
- * For an ASCII machine, these remain NULL so that when they are stored
- * in the BUFF via ap_bsetop(BO_RXLATE) it ensures that no translation is
- * performed.
- */
-
-apr_xlate_t *ap_hdrs_to_ascii, *ap_hdrs_from_ascii;
-
-#endif /*APR_CHARSET_EBCDIC */
diff --git a/server/util_debug.c b/server/util_debug.c
deleted file mode 100644
index 37a92ab634..0000000000
--- a/server/util_debug.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-
-/* Possibly get rid of the macros we defined in httpd.h */
-#if defined(strchr)
-#undef strchr
-#endif
-
-#if defined (strrchr)
-#undef strrchr
-#endif
-
-#if defined (strstr)
-#undef strstr
-#endif
-
-
-#if defined(ap_strchr)
-#undef ap_strchr
-AP_DECLARE(char *) ap_strchr(char *s, int c);
-#endif
-
-AP_DECLARE(char *) ap_strchr(char *s, int c)
-{
- return strchr(s,c);
-}
-
-#if defined(ap_strchr_c)
-#undef ap_strchr_c
-AP_DECLARE(const char *) ap_strchr_c(const char *s, int c);
-#endif
-
-AP_DECLARE(const char *) ap_strchr_c(const char *s, int c)
-{
- return strchr(s,c);
-}
-
-#if defined(ap_strrchr)
-#undef ap_strrchr
-AP_DECLARE(char *) ap_strrchr(char *s, int c);
-#endif
-
-AP_DECLARE(char *) ap_strrchr(char *s, int c)
-{
- return strrchr(s,c);
-}
-
-#if defined(ap_strrchr_c)
-#undef ap_strrchr_c
-AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c);
-#endif
-
-AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c)
-{
- return strrchr(s,c);
-}
-
-#if defined(ap_strstr)
-#undef ap_strstr
-AP_DECLARE(char *) ap_strstr(char *s, const char *c);
-#endif
-
-AP_DECLARE(char *) ap_strstr(char *s, const char *c)
-{
- return strstr(s,c);
-}
-
-#if defined(ap_strstr_c)
-#undef ap_strstr_c
-AP_DECLARE(const char *) ap_strstr_c(const char *s, const char *c);
-#endif
-
-AP_DECLARE(const char *) ap_strstr_c(const char *s, const char *c)
-{
- return strstr(s,c);
-}
-
-#if defined(ap_get_module_config)
-#undef ap_get_module_config
-AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv,
- const module *m);
-#endif
-
-AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv,
- const module *m)
-{
- return ((void **)cv)[m->module_index];
-}
-
-/**
- * Generic accessors for other modules to set at their own module-specific
- * data
- * @param conf_vector The vector in which the modules configuration is stored.
- * usually r->per_dir_config or s->module_config
- * @param m The module to set the data for.
- * @param val The module-specific data to set
- * @deffunc void ap_set_module_config(ap_conf_vector_t *cv, const module *m, void *val)
- */
-#if defined(ap_set_module_config)
-#undef ap_set_module_config
-AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m,
- void *val);
-#endif
-
-AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m,
- void *val)
-{
- ((void **)cv)[m->module_index] = val;
-}
diff --git a/server/util_ebcdic.c b/server/util_ebcdic.c
deleted file mode 100644
index b47f9b28dd..0000000000
--- a/server/util_ebcdic.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ap_config.h"
-
-#if APR_CHARSET_EBCDIC
-
-#include "apr_strings.h"
-#include "httpd.h"
-#include "http_log.h"
-#include "http_core.h"
-#include "util_ebcdic.h"
-
-apr_status_t ap_init_ebcdic(apr_pool_t *pool)
-{
- apr_status_t rv;
- char buf[80];
-
- rv = apr_xlate_open(&ap_hdrs_to_ascii, "ISO-8859-1", APR_DEFAULT_CHARSET, pool);
- if (rv) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "apr_xlate_open() failed");
- return rv;
- }
-
- rv = apr_xlate_open(&ap_hdrs_from_ascii, APR_DEFAULT_CHARSET, "ISO-8859-1", pool);
- if (rv) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "apr_xlate_open() failed");
- return rv;
- }
-
- rv = apr_MD5InitEBCDIC(ap_hdrs_to_ascii);
- if (rv) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "apr_MD5InitEBCDIC() failed");
- return rv;
- }
-
- rv = apr_base64init_ebcdic(ap_hdrs_to_ascii, ap_hdrs_from_ascii);
- if (rv) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "apr_base64init_ebcdic() failed");
- return rv;
- }
-
- rv = apr_SHA1InitEBCDIC(ap_hdrs_to_ascii);
- if (rv) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "apr_SHA1InitEBCDIC() failed");
- return rv;
- }
-
- return APR_SUCCESS;
-}
-
-void ap_xlate_proto_to_ascii(char *buffer, apr_size_t len)
-{
- apr_size_t inbytes_left, outbytes_left;
-
- inbytes_left = outbytes_left = len;
- apr_xlate_conv_buffer(ap_hdrs_to_ascii, buffer, &inbytes_left,
- buffer, &outbytes_left);
-}
-
-void ap_xlate_proto_from_ascii(char *buffer, apr_size_t len)
-{
- apr_size_t inbytes_left, outbytes_left;
-
- inbytes_left = outbytes_left = len;
- apr_xlate_conv_buffer(ap_hdrs_from_ascii, buffer, &inbytes_left,
- buffer, &outbytes_left);
-}
-
-int ap_rvputs_proto_in_ascii(request_rec *r, ...)
-{
- va_list va;
- const char *s;
- char *ascii_s;
- apr_size_t len;
- apr_size_t written = 0;
-
- va_start(va, r);
- while (1) {
- s = va_arg(va, const char *);
- if (s == NULL)
- break;
- len = strlen(s);
- ascii_s = apr_pstrndup(r->pool, s, len);
- ap_xlate_proto_to_ascii(ascii_s, len);
- if (ap_rputs(ascii_s, r) < 0)
- return -1;
- written += len;
- }
- va_end(va);
-
- return written;
-}
-#endif /* APR_CHARSET_EBCDIC */
diff --git a/server/util_filter.c b/server/util_filter.c
deleted file mode 100644
index def0eb0422..0000000000
--- a/server/util_filter.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-#include "apr_strings.h"
-
-#include "httpd.h"
-#include "http_log.h"
-#include "util_filter.h"
-
-/* NOTE: Apache's current design doesn't allow a pool to be passed thru,
- so we depend on a global to hold the correct pool
-*/
-#define FILTER_POOL apr_hook_global_pool
-#include "apr_hooks.h" /* for apr_hook_global_pool */
-
-/*
-** This macro returns true/false if a given filter should be inserted BEFORE
-** another filter. This will happen when one of: 1) there isn't another
-** filter; 2) that filter has a higher filter type (class); 3) that filter
-** corresponds to a different request.
-*/
-#define INSERT_BEFORE(f, before_this) ((before_this) == NULL \
- || (before_this)->frec->ftype > (f)->frec->ftype \
- || (before_this)->r != (f)->r)
-
-/* Trie structure to hold the mapping from registered
- * filter names to filters
- */
-
-typedef struct filter_trie_node filter_trie_node;
-
-typedef struct {
- int c;
- filter_trie_node *child;
-} filter_trie_child_ptr;
-
-/* Each trie node has an array of pointers to its children.
- * The array is kept in sorted order so that add_any_filter()
- * can do a binary search
- */
-struct filter_trie_node {
- ap_filter_rec_t *frec;
- filter_trie_child_ptr *children;
- int nchildren;
- int size;
-};
-
-#define TRIE_INITIAL_SIZE 4
-
-/* Link a trie node to its parent
- */
-static void trie_node_link(apr_pool_t *p, filter_trie_node *parent,
- filter_trie_node *child, int c)
-{
- int i, j;
-
- if (parent->nchildren == parent->size) {
- filter_trie_child_ptr *new;
- parent->size *= 2;
- new = (filter_trie_child_ptr *)apr_palloc(p, parent->size *
- sizeof(filter_trie_child_ptr));
- memcpy(new, parent->children, parent->nchildren *
- sizeof(filter_trie_child_ptr));
- parent->children = new;
- }
-
- for (i = 0; i < parent->nchildren; i++) {
- if (c == parent->children[i].c) {
- return;
- }
- else if (c < parent->children[i].c) {
- break;
- }
- }
- for (j = parent->nchildren; j > i; j--) {
- parent->children[j].c = parent->children[j - 1].c;
- parent->children[j].child = parent->children[j - 1].child;
- }
- parent->children[i].c = c;
- parent->children[i].child = child;
-
- parent->nchildren++;
-}
-
-/* Allocate a new node for a trie.
- * If parent is non-NULL, link the new node under the parent node with
- * key 'c' (or, if an existing child node matches, return that one)
- */
-static filter_trie_node *trie_node_alloc(apr_pool_t *p,
- filter_trie_node *parent, char c)
-{
- filter_trie_node *new_node;
- if (parent) {
- int i;
- for (i = 0; i < parent->nchildren; i++) {
- if (c == parent->children[i].c) {
- return parent->children[i].child;
- }
- else if (c < parent->children[i].c) {
- break;
- }
- }
- new_node =
- (filter_trie_node *)apr_palloc(p, sizeof(filter_trie_node));
- trie_node_link(p, parent, new_node, c);
- }
- else { /* No parent node */
- new_node = (filter_trie_node *)apr_palloc(p,
- sizeof(filter_trie_node));
- }
-
- new_node->frec = NULL;
- new_node->nchildren = 0;
- new_node->size = TRIE_INITIAL_SIZE;
- new_node->children = (filter_trie_child_ptr *)apr_palloc(p,
- new_node->size * sizeof(filter_trie_child_ptr));
- return new_node;
-}
-
-static filter_trie_node *registered_output_filters = NULL;
-static filter_trie_node *registered_input_filters = NULL;
-
-
-static apr_status_t filter_cleanup(void *ctx)
-{
- registered_output_filters = NULL;
- registered_input_filters = NULL;
- return APR_SUCCESS;
-}
-
-static ap_filter_rec_t *get_filter_handle(const char *name,
- const filter_trie_node *filter_set)
-{
- if (filter_set) {
- const char *n;
- const filter_trie_node *node;
-
- node = filter_set;
- for (n = name; *n; n++) {
- int start, end;
- start = 0;
- end = node->nchildren - 1;
- while (end >= start) {
- int middle = (end + start) / 2;
- char ch = node->children[middle].c;
- if (*n == ch) {
- node = node->children[middle].child;
- break;
- }
- else if (*n < ch) {
- end = middle - 1;
- }
- else {
- start = middle + 1;
- }
- }
- if (end < start) {
- node = NULL;
- break;
- }
- }
-
- if (node && node->frec) {
- return node->frec;
- }
- }
- return NULL;
-}
-
-AP_DECLARE(ap_filter_rec_t *)ap_get_output_filter_handle(const char *name)
-{
- return get_filter_handle(name, registered_output_filters);
-}
-
-AP_DECLARE(ap_filter_rec_t *)ap_get_input_filter_handle(const char *name)
-{
- return get_filter_handle(name, registered_input_filters);
-}
-
-static ap_filter_rec_t *register_filter(const char *name,
- ap_filter_func filter_func,
- ap_init_filter_func filter_init,
- ap_filter_type ftype,
- filter_trie_node **reg_filter_set)
-{
- ap_filter_rec_t *frec;
- char *normalized_name;
- const char *n;
- filter_trie_node *node;
-
- if (!*reg_filter_set) {
- *reg_filter_set = trie_node_alloc(FILTER_POOL, NULL, 0);
- }
-
- normalized_name = apr_pstrdup(FILTER_POOL, name);
- ap_str_tolower(normalized_name);
-
- node = *reg_filter_set;
- for (n = normalized_name; *n; n++) {
- filter_trie_node *child = trie_node_alloc(FILTER_POOL, node, *n);
- if (apr_isalpha(*n)) {
- trie_node_link(FILTER_POOL, node, child, apr_toupper(*n));
- }
- node = child;
- }
- if (node->frec) {
- frec = node->frec;
- }
- else {
- frec = apr_palloc(FILTER_POOL, sizeof(*frec));
- node->frec = frec;
- frec->name = normalized_name;
- }
- frec->filter_func = filter_func;
- frec->filter_init_func = filter_init;
- frec->ftype = ftype;
-
- apr_pool_cleanup_register(FILTER_POOL, NULL, filter_cleanup,
- apr_pool_cleanup_null);
- return frec;
-}
-
-AP_DECLARE(ap_filter_rec_t *) ap_register_input_filter(const char *name,
- ap_in_filter_func filter_func,
- ap_init_filter_func filter_init,
- ap_filter_type ftype)
-{
- ap_filter_func f;
- f.in_func = filter_func;
- return register_filter(name, f, filter_init, ftype,
- &registered_input_filters);
-}
-
-AP_DECLARE(ap_filter_rec_t *) ap_register_output_filter(const char *name,
- ap_out_filter_func filter_func,
- ap_init_filter_func filter_init,
- ap_filter_type ftype)
-{
- ap_filter_func f;
- f.out_func = filter_func;
- return register_filter(name, f, filter_init, ftype,
- &registered_output_filters);
-}
-
-static ap_filter_t *add_any_filter_handle(ap_filter_rec_t *frec, void *ctx,
- request_rec *r, conn_rec *c,
- ap_filter_t **r_filters,
- ap_filter_t **p_filters,
- ap_filter_t **c_filters)
-{
- apr_pool_t* p = r ? r->pool : c->pool;
- ap_filter_t *f = apr_palloc(p, sizeof(*f));
- ap_filter_t **outf;
-
- if (frec->ftype < AP_FTYPE_PROTOCOL) {
- if (r) {
- outf = r_filters;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "a content filter was added without a request: %s", frec->name);
- return NULL;
- }
- }
- else if (frec->ftype < AP_FTYPE_CONNECTION) {
- if (r) {
- outf = p_filters;
- }
- else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "a protocol filter was added without a request: %s", frec->name);
- return NULL;
- }
- }
- else {
- outf = c_filters;
- }
-
- f->frec = frec;
- f->ctx = ctx;
- f->r = r;
- f->c = c;
- f->next = NULL;
-
- if (INSERT_BEFORE(f, *outf)) {
- f->next = *outf;
-
- if (*outf) {
- ap_filter_t *first = NULL;
-
- if (r) {
- /* If we are adding our first non-connection filter,
- * Then don't try to find the right location, it is
- * automatically first.
- */
- if (*r_filters != *c_filters) {
- first = *r_filters;
- while (first && (first->next != (*outf))) {
- first = first->next;
- }
- }
- }
- if (first && first != (*outf)) {
- first->next = f;
- }
- }
- *outf = f;
- }
- else {
- ap_filter_t *fscan = *outf;
- while (!INSERT_BEFORE(f, fscan->next))
- fscan = fscan->next;
-
- f->next = fscan->next;
- fscan->next = f;
- }
-
- if (frec->ftype < AP_FTYPE_CONNECTION && (*r_filters == *c_filters)) {
- *r_filters = *p_filters;
- }
- return f;
-}
-
-static ap_filter_t *add_any_filter(const char *name, void *ctx,
- request_rec *r, conn_rec *c,
- const filter_trie_node *reg_filter_set,
- ap_filter_t **r_filters,
- ap_filter_t **p_filters,
- ap_filter_t **c_filters)
-{
- if (reg_filter_set) {
- const char *n;
- const filter_trie_node *node;
-
- node = reg_filter_set;
- for (n = name; *n; n++) {
- int start, end;
- start = 0;
- end = node->nchildren - 1;
- while (end >= start) {
- int middle = (end + start) / 2;
- char ch = node->children[middle].c;
- if (*n == ch) {
- node = node->children[middle].child;
- break;
- }
- else if (*n < ch) {
- end = middle - 1;
- }
- else {
- start = middle + 1;
- }
- }
- if (end < start) {
- node = NULL;
- break;
- }
- }
-
- if (node && node->frec) {
- return add_any_filter_handle(node->frec, ctx, r, c, r_filters,
- p_filters, c_filters);
- }
- }
-
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
- "an unknown filter was not added: %s", name);
- return NULL;
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_input_filter(const char *name, void *ctx,
- request_rec *r, conn_rec *c)
-{
- return add_any_filter(name, ctx, r, c, registered_input_filters,
- r ? &r->input_filters : NULL,
- r ? &r->proto_input_filters : NULL, &c->input_filters);
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_input_filter_handle(ap_filter_rec_t *f,
- void *ctx,
- request_rec *r,
- conn_rec *c)
-{
- return add_any_filter_handle(f, ctx, r, c, r ? &r->input_filters : NULL,
- r ? &r->proto_input_filters : NULL,
- &c->input_filters);
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_output_filter(const char *name, void *ctx,
- request_rec *r, conn_rec *c)
-{
- return add_any_filter(name, ctx, r, c, registered_output_filters,
- r ? &r->output_filters : NULL,
- r ? &r->proto_output_filters : NULL, &c->output_filters);
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_output_filter_handle(ap_filter_rec_t *f,
- void *ctx,
- request_rec *r,
- conn_rec *c)
-{
- return add_any_filter_handle(f, ctx, r, c, r ? &r->output_filters : NULL,
- r ? &r->proto_output_filters : NULL,
- &c->output_filters);
-}
-
-static void remove_any_filter(ap_filter_t *f, ap_filter_t **r_filt, ap_filter_t **p_filt,
- ap_filter_t **c_filt)
-{
- ap_filter_t **curr = r_filt ? r_filt : c_filt;
- ap_filter_t *fscan = *curr;
-
- if (p_filt && *p_filt == f)
- *p_filt = (*p_filt)->next;
-
- if (*curr == f) {
- *curr = (*curr)->next;
- return;
- }
-
- while (fscan->next != f) {
- if (!(fscan = fscan->next)) {
- return;
- }
- }
-
- fscan->next = f->next;
-}
-
-AP_DECLARE(void) ap_remove_input_filter(ap_filter_t *f)
-{
- remove_any_filter(f, f->r ? &f->r->input_filters : NULL,
- f->r ? &f->r->proto_input_filters : NULL,
- &f->c->input_filters);
-}
-
-AP_DECLARE(void) ap_remove_output_filter(ap_filter_t *f)
-{
- remove_any_filter(f, f->r ? &f->r->output_filters : NULL,
- f->r ? &f->r->proto_output_filters : NULL,
- &f->c->output_filters);
-}
-
-/*
- * Read data from the next filter in the filter stack. Data should be
- * modified in the bucket brigade that is passed in. The core allocates the
- * bucket brigade, modules that wish to replace large chunks of data or to
- * save data off to the side should probably create their own temporary
- * brigade especially for that use.
- */
-AP_DECLARE(apr_status_t) ap_get_brigade(ap_filter_t *next,
- apr_bucket_brigade *bb,
- ap_input_mode_t mode,
- apr_read_type_e block,
- apr_off_t readbytes)
-{
- if (next) {
- return next->frec->filter_func.in_func(next, bb, mode, block,
- readbytes);
- }
- return AP_NOBODY_READ;
-}
-
-/* Pass the buckets to the next filter in the filter stack. If the
- * current filter is a handler, we should get NULL passed in instead of
- * the current filter. At that point, we can just call the first filter in
- * the stack, or r->output_filters.
- */
-AP_DECLARE(apr_status_t) ap_pass_brigade(ap_filter_t *next,
- apr_bucket_brigade *bb)
-{
- if (next) {
- apr_bucket *e;
- if ((e = APR_BRIGADE_LAST(bb)) && APR_BUCKET_IS_EOS(e) && next->r) {
- /* This is only safe because HTTP_HEADER filter is always in
- * the filter stack. This ensures that there is ALWAYS a
- * request-based filter that we can attach this to. If the
- * HTTP_FILTER is removed, and another filter is not put in its
- * place, then handlers like mod_cgi, which attach their own
- * EOS bucket to the brigade will be broken, because we will
- * get two EOS buckets on the same request.
- */
- next->r->eos_sent = 1;
-
- /* remember the eos for internal redirects, too */
- if (next->r->prev) {
- request_rec *prev = next->r->prev;
-
- while (prev) {
- prev->eos_sent = 1;
- prev = prev->prev;
- }
- }
- }
- return next->frec->filter_func.out_func(next, bb);
- }
- return AP_NOBODY_WROTE;
-}
-
-AP_DECLARE(apr_status_t) ap_save_brigade(ap_filter_t *f,
- apr_bucket_brigade **saveto,
- apr_bucket_brigade **b, apr_pool_t *p)
-{
- apr_bucket *e;
- apr_status_t rv;
-
- /* If have never stored any data in the filter, then we had better
- * create an empty bucket brigade so that we can concat.
- */
- if (!(*saveto)) {
- *saveto = apr_brigade_create(p, f->c->bucket_alloc);
- }
-
- for (e = APR_BRIGADE_FIRST(*b);
- e != APR_BRIGADE_SENTINEL(*b);
- e = APR_BUCKET_NEXT(e))
- {
- rv = apr_bucket_setaside(e, p);
- if (rv != APR_SUCCESS
- /* ### this ENOTIMPL will go away once we implement setaside
- ### for all bucket types. */
- && rv != APR_ENOTIMPL) {
- return rv;
- }
- }
- APR_BRIGADE_CONCAT(*saveto, *b);
- return APR_SUCCESS;
-}
-
-AP_DECLARE_NONSTD(apr_status_t) ap_filter_flush(apr_bucket_brigade *bb,
- void *ctx)
-{
- ap_filter_t *f = ctx;
-
- return ap_pass_brigade(f, bb);
-}
-
-AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)
-{
- apr_bucket *b;
-
- b = apr_bucket_flush_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, b);
- return ap_pass_brigade(f, bb);
-}
-
-AP_DECLARE_NONSTD(apr_status_t) ap_fputstrs(ap_filter_t *f,
- apr_bucket_brigade *bb, ...)
-{
- va_list args;
- apr_status_t rv;
-
- va_start(args, bb);
- rv = apr_brigade_vputstrs(bb, ap_filter_flush, f, args);
- va_end(args);
- return rv;
-}
-
-AP_DECLARE_NONSTD(apr_status_t) ap_fprintf(ap_filter_t *f,
- apr_bucket_brigade *bb,
- const char *fmt,
- ...)
-{
- va_list args;
- apr_status_t rv;
-
- va_start(args, fmt);
- rv = apr_brigade_vprintf(bb, ap_filter_flush, f, fmt, args);
- va_end(args);
- return rv;
-}
diff --git a/server/util_md5.c b/server/util_md5.c
deleted file mode 100644
index 67805f9d7e..0000000000
--- a/server/util_md5.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/************************************************************************
- * NCSA HTTPd Server
- * Software Development Group
- * National Center for Supercomputing Applications
- * University of Illinois at Urbana-Champaign
- * 605 E. Springfield, Champaign, IL 61820
- * httpd@ncsa.uiuc.edu
- *
- * Copyright (C) 1995, Board of Trustees of the University of Illinois
- *
- ************************************************************************
- *
- * md5.c: NCSA HTTPd code which uses the md5c.c RSA Code
- *
- * Original Code Copyright (C) 1994, Jeff Hostetler, Spyglass, Inc.
- * Portions of Content-MD5 code Copyright (C) 1993, 1994 by Carnegie Mellon
- * University (see Copyright below).
- * Portions of Content-MD5 code Copyright (C) 1991 Bell Communications
- * Research, Inc. (Bellcore) (see Copyright below).
- * Portions extracted from mpack, John G. Myers - jgm+@cmu.edu
- * Content-MD5 Code contributed by Martin Hamilton (martin@net.lut.ac.uk)
- *
- */
-
-
-
-/* md5.c --Module Interface to MD5. */
-/* Jeff Hostetler, Spyglass, Inc., 1994. */
-
-#include "ap_config.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "httpd.h"
-#include "util_md5.h"
-#include "util_ebcdic.h"
-
-AP_DECLARE(char *) ap_md5_binary(apr_pool_t *p, const unsigned char *buf, int length)
-{
- const char *hex = "0123456789abcdef";
- apr_md5_ctx_t my_md5;
- unsigned char hash[APR_MD5_DIGESTSIZE];
- char *r, result[33]; /* (MD5_DIGESTSIZE * 2) + 1 */
- int i;
-
- /*
- * Take the MD5 hash of the string argument.
- */
-
- apr_md5_init(&my_md5);
-#if APR_CHARSET_EBCDIC
- apr_md5_set_xlate(&my_md5, ap_hdrs_to_ascii);
-#endif
- apr_md5_update(&my_md5, buf, (unsigned int)length);
- apr_md5_final(hash, &my_md5);
-
- for (i = 0, r = result; i < APR_MD5_DIGESTSIZE; i++) {
- *r++ = hex[hash[i] >> 4];
- *r++ = hex[hash[i] & 0xF];
- }
- *r = '\0';
-
- return apr_pstrndup(p, result, APR_MD5_DIGESTSIZE*2);
-}
-
-AP_DECLARE(char *) ap_md5(apr_pool_t *p, const unsigned char *string)
-{
- return ap_md5_binary(p, string, (int) strlen((char *)string));
-}
-
-/* these portions extracted from mpack, John G. Myers - jgm+@cmu.edu */
-
-/* (C) Copyright 1993,1994 by Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of Carnegie
- * Mellon University not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission. Carnegie Mellon University makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
- * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
- * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)
- *
- * Permission to use, copy, modify, and distribute this material
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice and this permission notice
- * appear in all copies, and that the name of Bellcore not be
- * used in advertising or publicity pertaining to this
- * material without the specific, prior written permission
- * of an authorized representative of Bellcore. BELLCORE
- * MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
- * OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS",
- * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
- */
-
-static char basis_64[] =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-AP_DECLARE(char *) ap_md5contextTo64(apr_pool_t *a, apr_md5_ctx_t *context)
-{
- unsigned char digest[18];
- char *encodedDigest;
- int i;
- char *p;
-
- encodedDigest = (char *) apr_pcalloc(a, 25 * sizeof(char));
-
- apr_md5_final(digest, context);
- digest[sizeof(digest) - 1] = digest[sizeof(digest) - 2] = 0;
-
- p = encodedDigest;
- for (i = 0; i < sizeof(digest); i += 3) {
- *p++ = basis_64[digest[i] >> 2];
- *p++ = basis_64[((digest[i] & 0x3) << 4) | ((int) (digest[i + 1] & 0xF0) >> 4)];
- *p++ = basis_64[((digest[i + 1] & 0xF) << 2) | ((int) (digest[i + 2] & 0xC0) >> 6)];
- *p++ = basis_64[digest[i + 2] & 0x3F];
- }
- *p-- = '\0';
- *p-- = '=';
- *p-- = '=';
- return encodedDigest;
-}
-
-AP_DECLARE(char *) ap_md5digest(apr_pool_t *p, apr_file_t *infile)
-{
- apr_md5_ctx_t context;
- unsigned char buf[4096]; /* keep this a multiple of 64 */
- apr_size_t nbytes;
- apr_off_t offset = 0L;
-
- apr_md5_init(&context);
- nbytes = sizeof(buf);
- while (apr_file_read(infile, buf, &nbytes) == APR_SUCCESS) {
- apr_md5_update(&context, buf, nbytes);
- nbytes = sizeof(buf);
- }
- apr_file_seek(infile, APR_SET, &offset);
- return ap_md5contextTo64(p, &context);
-}
-
diff --git a/server/util_script.c b/server/util_script.c
deleted file mode 100644
index f7788926b3..0000000000
--- a/server/util_script.c
+++ /dev/null
@@ -1,703 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h" /* for sub_req_lookup_uri() */
-#include "util_script.h"
-#include "apr_date.h" /* For apr_date_parse_http() */
-#include "util_ebcdic.h"
-
-#ifdef OS2
-#define INCL_DOS
-#include <os2.h>
-#endif
-
-/*
- * Various utility functions which are common to a whole lot of
- * script-type extensions mechanisms, and might as well be gathered
- * in one place (if only to avoid creating inter-module dependancies
- * where there don't have to be).
- */
-
-#define MALFORMED_MESSAGE "malformed header from script. Bad header="
-#define MALFORMED_HEADER_LENGTH_TO_SHOW 30
-
-static char *http2env(apr_pool_t *a, const char *w)
-{
- char *res = (char *)apr_palloc(a, sizeof("HTTP_") + strlen(w));
- char *cp = res;
- char c;
-
- *cp++ = 'H';
- *cp++ = 'T';
- *cp++ = 'T';
- *cp++ = 'P';
- *cp++ = '_';
-
- while ((c = *w++) != 0) {
- if (!apr_isalnum(c)) {
- *cp++ = '_';
- }
- else {
- *cp++ = apr_toupper(c);
- }
- }
- *cp = 0;
-
- return res;
-}
-
-AP_DECLARE(char **) ap_create_environment(apr_pool_t *p, apr_table_t *t)
-{
- const apr_array_header_t *env_arr = apr_table_elts(t);
- const apr_table_entry_t *elts = (const apr_table_entry_t *) env_arr->elts;
- char **env = (char **) apr_palloc(p, (env_arr->nelts + 2) * sizeof(char *));
- int i, j;
- char *tz;
- char *whack;
-
- j = 0;
- if (!apr_table_get(t, "TZ")) {
- tz = getenv("TZ");
- if (tz != NULL) {
- env[j++] = apr_pstrcat(p, "TZ=", tz, NULL);
- }
- }
- for (i = 0; i < env_arr->nelts; ++i) {
- if (!elts[i].key) {
- continue;
- }
- env[j] = apr_pstrcat(p, elts[i].key, "=", elts[i].val, NULL);
- whack = env[j];
- if (apr_isdigit(*whack)) {
- *whack++ = '_';
- }
- while (*whack != '=') {
- if (!apr_isalnum(*whack) && *whack != '_') {
- *whack = '_';
- }
- ++whack;
- }
- ++j;
- }
-
- env[j] = NULL;
- return env;
-}
-
-AP_DECLARE(void) ap_add_common_vars(request_rec *r)
-{
- apr_table_t *e;
- server_rec *s = r->server;
- conn_rec *c = r->connection;
- const char *rem_logname;
- char *env_path;
-#if defined(WIN32) || defined(OS2) || defined(BEOS)
- char *env_temp;
-#endif
- const char *host;
- const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
- const apr_table_entry_t *hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
- int i;
- apr_port_t rport;
-
- /* use a temporary apr_table_t which we'll overlap onto
- * r->subprocess_env later
- * (exception: if r->subprocess_env is empty at the start,
- * write directly into it)
- */
- if (apr_is_empty_table(r->subprocess_env)) {
- e = r->subprocess_env;
- }
- else {
- e = apr_table_make(r->pool, 25 + hdrs_arr->nelts);
- }
-
- /* First, add environment vars from headers... this is as per
- * CGI specs, though other sorts of scripting interfaces see
- * the same vars...
- */
-
- for (i = 0; i < hdrs_arr->nelts; ++i) {
- if (!hdrs[i].key) {
- continue;
- }
-
- /* A few headers are special cased --- Authorization to prevent
- * rogue scripts from capturing passwords; content-type and -length
- * for no particular reason.
- */
-
- if (!strcasecmp(hdrs[i].key, "Content-type")) {
- apr_table_addn(e, "CONTENT_TYPE", hdrs[i].val);
- }
- else if (!strcasecmp(hdrs[i].key, "Content-length")) {
- apr_table_addn(e, "CONTENT_LENGTH", hdrs[i].val);
- }
- /*
- * You really don't want to disable this check, since it leaves you
- * wide open to CGIs stealing passwords and people viewing them
- * in the environment with "ps -e". But, if you must...
- */
-#ifndef SECURITY_HOLE_PASS_AUTHORIZATION
- else if (!strcasecmp(hdrs[i].key, "Authorization")
- || !strcasecmp(hdrs[i].key, "Proxy-Authorization")) {
- continue;
- }
-#endif
- else {
- apr_table_addn(e, http2env(r->pool, hdrs[i].key), hdrs[i].val);
- }
- }
-
- if (!(env_path = getenv("PATH"))) {
- env_path = DEFAULT_PATH;
- }
- apr_table_addn(e, "PATH", apr_pstrdup(r->pool, env_path));
-
-#ifdef WIN32
- if (env_temp = getenv("SystemRoot")) {
- apr_table_addn(e, "SystemRoot", env_temp);
- }
- if (env_temp = getenv("COMSPEC")) {
- apr_table_addn(e, "COMSPEC", env_temp);
- }
- if (env_temp = getenv("PATHEXT")) {
- apr_table_addn(e, "PATHEXT", env_temp);
- }
- if (env_temp = getenv("WINDIR")) {
- apr_table_addn(e, "WINDIR", env_temp);
- }
-#endif
-
-#ifdef OS2
- if ((env_temp = getenv("COMSPEC")) != NULL) {
- apr_table_addn(e, "COMSPEC", env_temp);
- }
- if ((env_temp = getenv("ETC")) != NULL) {
- apr_table_addn(e, "ETC", env_temp);
- }
- if ((env_temp = getenv("DPATH")) != NULL) {
- apr_table_addn(e, "DPATH", env_temp);
- }
- if ((env_temp = getenv("PERLLIB_PREFIX")) != NULL) {
- apr_table_addn(e, "PERLLIB_PREFIX", env_temp);
- }
-#endif
-
-#ifdef BEOS
- if ((env_temp = getenv("LIBRARY_PATH")) != NULL) {
- apr_table_addn(e, "LIBRARY_PATH", env_temp);
- }
-#endif
-
- apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r));
- apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_version());
- apr_table_addn(e, "SERVER_NAME",
- ap_escape_html(r->pool, ap_get_server_name(r)));
- apr_table_addn(e, "SERVER_ADDR", r->connection->local_ip); /* Apache */
- apr_table_addn(e, "SERVER_PORT",
- apr_psprintf(r->pool, "%u", ap_get_server_port(r)));
- host = ap_get_remote_host(c, r->per_dir_config, REMOTE_HOST, NULL);
- if (host) {
- apr_table_addn(e, "REMOTE_HOST", host);
- }
- apr_table_addn(e, "REMOTE_ADDR", c->remote_ip);
- apr_table_addn(e, "DOCUMENT_ROOT", ap_document_root(r)); /* Apache */
- apr_table_addn(e, "SERVER_ADMIN", s->server_admin); /* Apache */
- apr_table_addn(e, "SCRIPT_FILENAME", r->filename); /* Apache */
-
- rport = c->remote_addr->port;
- apr_table_addn(e, "REMOTE_PORT", apr_itoa(r->pool, rport));
-
- if (r->user) {
- apr_table_addn(e, "REMOTE_USER", r->user);
- }
- else if (r->prev) {
- request_rec *back = r->prev;
-
- while (back) {
- if (back->user) {
- apr_table_addn(e, "REDIRECT_REMOTE_USER", back->user);
- break;
- }
- back = back->prev;
- }
- }
- if (r->ap_auth_type) {
- apr_table_addn(e, "AUTH_TYPE", r->ap_auth_type);
- }
- rem_logname = ap_get_remote_logname(r);
- if (rem_logname) {
- apr_table_addn(e, "REMOTE_IDENT", apr_pstrdup(r->pool, rem_logname));
- }
-
- /* Apache custom error responses. If we have redirected set two new vars */
-
- if (r->prev) {
- if (r->prev->args) {
- apr_table_addn(e, "REDIRECT_QUERY_STRING", r->prev->args);
- }
- if (r->prev->uri) {
- apr_table_addn(e, "REDIRECT_URL", r->prev->uri);
- }
- }
-
- if (e != r->subprocess_env) {
- apr_table_overlap(r->subprocess_env, e, APR_OVERLAP_TABLES_SET);
- }
-}
-
-/* This "cute" little function comes about because the path info on
- * filenames and URLs aren't always the same. So we take the two,
- * and find as much of the two that match as possible.
- */
-
-AP_DECLARE(int) ap_find_path_info(const char *uri, const char *path_info)
-{
- int lu = strlen(uri);
- int lp = strlen(path_info);
-
- while (lu-- && lp-- && uri[lu] == path_info[lp]);
-
- if (lu == -1) {
- lu = 0;
- }
-
- while (uri[lu] != '\0' && uri[lu] != '/') {
- lu++;
- }
- return lu;
-}
-
-/* Obtain the Request-URI from the original request-line, returning
- * a new string from the request pool containing the URI or "".
- */
-static char *original_uri(request_rec *r)
-{
- char *first, *last;
-
- if (r->the_request == NULL) {
- return (char *) apr_pcalloc(r->pool, 1);
- }
-
- first = r->the_request; /* use the request-line */
-
- while (*first && !apr_isspace(*first)) {
- ++first; /* skip over the method */
- }
- while (apr_isspace(*first)) {
- ++first; /* and the space(s) */
- }
-
- last = first;
- while (*last && !apr_isspace(*last)) {
- ++last; /* end at next whitespace */
- }
-
- return apr_pstrmemdup(r->pool, first, last - first);
-}
-
-AP_DECLARE(void) ap_add_cgi_vars(request_rec *r)
-{
- apr_table_t *e = r->subprocess_env;
-
- apr_table_setn(e, "GATEWAY_INTERFACE", "CGI/1.1");
- apr_table_setn(e, "SERVER_PROTOCOL", r->protocol);
- apr_table_setn(e, "REQUEST_METHOD", r->method);
- apr_table_setn(e, "QUERY_STRING", r->args ? r->args : "");
- apr_table_setn(e, "REQUEST_URI", original_uri(r));
-
- /* Note that the code below special-cases scripts run from includes,
- * because it "knows" that the sub_request has been hacked to have the
- * args and path_info of the original request, and not any that may have
- * come with the script URI in the include command. Ugh.
- */
-
- if (!strcmp(r->protocol, "INCLUDED")) {
- apr_table_setn(e, "SCRIPT_NAME", r->uri);
- if (r->path_info && *r->path_info) {
- apr_table_setn(e, "PATH_INFO", r->path_info);
- }
- }
- else if (!r->path_info || !*r->path_info) {
- apr_table_setn(e, "SCRIPT_NAME", r->uri);
- }
- else {
- int path_info_start = ap_find_path_info(r->uri, r->path_info);
-
- apr_table_setn(e, "SCRIPT_NAME",
- apr_pstrndup(r->pool, r->uri, path_info_start));
-
- apr_table_setn(e, "PATH_INFO", r->path_info);
- }
-
- if (r->path_info && r->path_info[0]) {
- /*
- * To get PATH_TRANSLATED, treat PATH_INFO as a URI path.
- * Need to re-escape it for this, since the entire URI was
- * un-escaped before we determined where the PATH_INFO began.
- */
- request_rec *pa_req;
-
- pa_req = ap_sub_req_lookup_uri(ap_escape_uri(r->pool, r->path_info), r,
- NULL);
-
- if (pa_req->filename) {
- char *pt = apr_pstrcat(r->pool, pa_req->filename, pa_req->path_info,
- NULL);
-#ifdef WIN32
- /* We need to make this a real Windows path name */
- apr_filepath_merge(&pt, "", pt, APR_FILEPATH_NATIVE, r->pool);
-#endif
- apr_table_setn(e, "PATH_TRANSLATED", pt);
- }
- ap_destroy_sub_req(pa_req);
- }
-}
-
-
-static int set_cookie_doo_doo(void *v, const char *key, const char *val)
-{
- apr_table_addn(v, key, val);
- return 1;
-}
-
-AP_DECLARE(int) ap_scan_script_header_err_core(request_rec *r, char *buffer,
- int (*getsfunc) (char *, int, void *),
- void *getsfunc_data)
-{
- char x[MAX_STRING_LEN];
- char *w, *l;
- int p;
- int cgi_status = HTTP_OK;
- apr_table_t *merge;
- apr_table_t *cookie_table;
-
- if (buffer) {
- *buffer = '\0';
- }
- w = buffer ? buffer : x;
-
- /* temporary place to hold headers to merge in later */
- merge = apr_table_make(r->pool, 10);
-
- /* The HTTP specification says that it is legal to merge duplicate
- * headers into one. Some browsers that support Cookies don't like
- * merged headers and prefer that each Set-Cookie header is sent
- * separately. Lets humour those browsers by not merging.
- * Oh what a pain it is.
- */
- cookie_table = apr_table_make(r->pool, 2);
- apr_table_do(set_cookie_doo_doo, cookie_table, r->err_headers_out, "Set-Cookie", NULL);
-
- while (1) {
-
- if ((*getsfunc) (w, MAX_STRING_LEN - 1, getsfunc_data) == 0) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_TOCLIENT, 0, r,
- "Premature end of script headers: %s",
- apr_filepath_name_get(r->filename));
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- /* Delete terminal (CR?)LF */
-
- p = strlen(w);
- /* Indeed, the host's '\n':
- '\012' for UNIX; '\015' for MacOS; '\025' for OS/390
- -- whatever the script generates.
- */
- if (p > 0 && w[p - 1] == '\n') {
- if (p > 1 && w[p - 2] == CR) {
- w[p - 2] = '\0';
- }
- else {
- w[p - 1] = '\0';
- }
- }
-
- /*
- * If we've finished reading the headers, check to make sure any
- * HTTP/1.1 conditions are met. If so, we're done; normal processing
- * will handle the script's output. If not, just return the error.
- * The appropriate thing to do would be to send the script process a
- * SIGPIPE to let it know we're ignoring it, close the channel to the
- * script process, and *then* return the failed-to-meet-condition
- * error. Otherwise we'd be waiting for the script to finish
- * blithering before telling the client the output was no good.
- * However, we don't have the information to do that, so we have to
- * leave it to an upper layer.
- */
- if (w[0] == '\0') {
- int cond_status = OK;
-
- if ((cgi_status == HTTP_OK) && (r->method_number == M_GET)) {
- cond_status = ap_meets_conditions(r);
- }
- apr_table_overlap(r->err_headers_out, merge,
- APR_OVERLAP_TABLES_MERGE);
- if (!apr_is_empty_table(cookie_table)) {
- /* the cookies have already been copied to the cookie_table */
- apr_table_unset(r->err_headers_out, "Set-Cookie");
- r->err_headers_out = apr_table_overlay(r->pool,
- r->err_headers_out, cookie_table);
- }
- return cond_status;
- }
-
- /* if we see a bogus header don't ignore it. Shout and scream */
-
-#if APR_CHARSET_EBCDIC
- /* Chances are that we received an ASCII header text instead of
- * the expected EBCDIC header lines. Try to auto-detect:
- */
- if (!(l = strchr(w, ':'))) {
- int maybeASCII = 0, maybeEBCDIC = 0;
- unsigned char *cp, native;
- apr_size_t inbytes_left, outbytes_left;
-
- for (cp = w; *cp != '\0'; ++cp) {
- native = apr_xlate_conv_byte(ap_hdrs_from_ascii, *cp);
- if (apr_isprint(*cp) && !apr_isprint(native))
- ++maybeEBCDIC;
- if (!apr_isprint(*cp) && apr_isprint(native))
- ++maybeASCII;
- }
- if (maybeASCII > maybeEBCDIC) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
- "CGI Interface Error: Script headers apparently ASCII: (CGI = %s)",
- r->filename);
- inbytes_left = outbytes_left = cp - w;
- apr_xlate_conv_buffer(ap_hdrs_from_ascii,
- w, &inbytes_left, w, &outbytes_left);
- }
- }
-#endif /*APR_CHARSET_EBCDIC*/
- if (!(l = strchr(w, ':'))) {
- char malformed[(sizeof MALFORMED_MESSAGE) + 1
- + MALFORMED_HEADER_LENGTH_TO_SHOW];
-
- strcpy(malformed, MALFORMED_MESSAGE);
- strncat(malformed, w, MALFORMED_HEADER_LENGTH_TO_SHOW);
-
- if (!buffer) {
- /* Soak up all the script output - may save an outright kill */
- while ((*getsfunc) (w, MAX_STRING_LEN - 1, getsfunc_data)) {
- continue;
- }
- }
-
- ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_TOCLIENT, 0, r,
- "%s: %s", malformed,
- apr_filepath_name_get(r->filename));
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
- *l++ = '\0';
- while (*l && apr_isspace(*l)) {
- ++l;
- }
-
- if (!strcasecmp(w, "Content-type")) {
- char *tmp;
-
- /* Nuke trailing whitespace */
-
- char *endp = l + strlen(l) - 1;
- while (endp > l && apr_isspace(*endp)) {
- *endp-- = '\0';
- }
-
- tmp = apr_pstrdup(r->pool, l);
- ap_content_type_tolower(tmp);
- ap_set_content_type(r, tmp);
- }
- /*
- * If the script returned a specific status, that's what
- * we'll use - otherwise we assume 200 OK.
- */
- else if (!strcasecmp(w, "Status")) {
- r->status = cgi_status = atoi(l);
- r->status_line = apr_pstrdup(r->pool, l);
- }
- else if (!strcasecmp(w, "Location")) {
- apr_table_set(r->headers_out, w, l);
- }
- else if (!strcasecmp(w, "Content-Length")) {
- apr_table_set(r->headers_out, w, l);
- }
- else if (!strcasecmp(w, "Content-Range")) {
- apr_table_set(r->headers_out, w, l);
- }
- else if (!strcasecmp(w, "Transfer-Encoding")) {
- apr_table_set(r->headers_out, w, l);
- }
- /*
- * If the script gave us a Last-Modified header, we can't just
- * pass it on blindly because of restrictions on future values.
- */
- else if (!strcasecmp(w, "Last-Modified")) {
- ap_update_mtime(r, apr_date_parse_http(l));
- ap_set_last_modified(r);
- }
- else if (!strcasecmp(w, "Set-Cookie")) {
- apr_table_add(cookie_table, w, l);
- }
- else {
- apr_table_add(merge, w, l);
- }
- }
-
- return OK;
-}
-
-static int getsfunc_FILE(char *buf, int len, void *f)
-{
- return apr_file_gets(buf, len, (apr_file_t *) f) == APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_scan_script_header_err(request_rec *r, apr_file_t *f,
- char *buffer)
-{
- return ap_scan_script_header_err_core(r, buffer, getsfunc_FILE, f);
-}
-
-static int getsfunc_BRIGADE(char *buf, int len, void *arg)
-{
- apr_bucket_brigade *bb = (apr_bucket_brigade *)arg;
- const char *dst_end = buf + len - 1; /* leave room for terminating null */
- char *dst = buf;
- apr_bucket *e = APR_BRIGADE_FIRST(bb);
- apr_status_t rv;
- int done = 0;
-
- while ((dst < dst_end) && !done && !APR_BUCKET_IS_EOS(e)) {
- const char *bucket_data;
- apr_size_t bucket_data_len;
- const char *src;
- const char *src_end;
- apr_bucket * next;
-
- rv = apr_bucket_read(e, &bucket_data, &bucket_data_len,
- APR_BLOCK_READ);
- if (rv != APR_SUCCESS || (bucket_data_len == 0)) {
- return 0;
- }
- src = bucket_data;
- src_end = bucket_data + bucket_data_len;
- while ((src < src_end) && (dst < dst_end) && !done) {
- if (*src == '\n') {
- done = 1;
- }
- else if (*src != '\r') {
- *dst++ = *src;
- }
- src++;
- }
-
- if (src < src_end) {
- apr_bucket_split(e, src - bucket_data);
- }
- next = APR_BUCKET_NEXT(e);
- APR_BUCKET_REMOVE(e);
- apr_bucket_destroy(e);
- e = next;
- }
- *dst = 0;
- return 1;
-}
-
-AP_DECLARE(int) ap_scan_script_header_err_brigade(request_rec *r,
- apr_bucket_brigade *bb,
- char *buffer)
-{
- return ap_scan_script_header_err_core(r, buffer, getsfunc_BRIGADE, bb);
-}
-
-struct vastrs {
- va_list args;
- int arg;
- const char *curpos;
-};
-
-static int getsfunc_STRING(char *w, int len, void *pvastrs)
-{
- struct vastrs *strs = (struct vastrs*) pvastrs;
- const char *p;
- int t;
-
- if (!strs->curpos || !*strs->curpos)
- return 0;
- p = ap_strchr_c(strs->curpos, '\n');
- if (p)
- ++p;
- else
- p = ap_strchr_c(strs->curpos, '\0');
- t = p - strs->curpos;
- if (t > len)
- t = len;
- strncpy (w, strs->curpos, t);
- w[t] = '\0';
- if (!strs->curpos[t]) {
- ++strs->arg;
- strs->curpos = va_arg(strs->args, const char *);
- }
- else
- strs->curpos += t;
- return t;
-}
-
-/* ap_scan_script_header_err_strs() accepts additional const char* args...
- * each is treated as one or more header lines, and the first non-header
- * character is returned to **arg, **data. (The first optional arg is
- * counted as 0.)
- */
-AP_DECLARE_NONSTD(int) ap_scan_script_header_err_strs(request_rec *r,
- char *buffer,
- const char **termch,
- int *termarg, ...)
-{
- struct vastrs strs;
- int res;
-
- va_start(strs.args, termarg);
- strs.arg = 0;
- strs.curpos = va_arg(strs.args, char*);
- res = ap_scan_script_header_err_core(r, buffer, getsfunc_STRING, (void *) &strs);
- if (termch)
- *termch = strs.curpos;
- if (termarg)
- *termarg = strs.arg;
- va_end(strs.args);
- return res;
-}
diff --git a/server/util_time.c b/server/util_time.c
deleted file mode 100644
index 42d1db751e..0000000000
--- a/server/util_time.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "util_time.h"
-
-/* Cache for exploded values of recent timestamps
- */
-
-struct exploded_time_cache_element {
- apr_int64_t t;
- apr_time_exp_t xt;
- apr_int64_t t_validate; /* please see comments in cached_explode() */
-};
-
-/* the "+ 1" is for the current second: */
-#define TIME_CACHE_SIZE (AP_TIME_RECENT_THRESHOLD + 1)
-
-/* Note that AP_TIME_RECENT_THRESHOLD is defined to
- * be a power of two minus one in util_time.h, so that
- * we can replace a modulo operation with a bitwise AND
- * when hashing items into a cache of size
- * AP_TIME_RECENT_THRESHOLD+1
- */
-#define TIME_CACHE_MASK (AP_TIME_RECENT_THRESHOLD)
-
-static struct exploded_time_cache_element exploded_cache_localtime[TIME_CACHE_SIZE];
-static struct exploded_time_cache_element exploded_cache_gmt[TIME_CACHE_SIZE];
-
-
-static apr_status_t cached_explode(apr_time_exp_t *xt, apr_time_t t,
- struct exploded_time_cache_element *cache,
- int use_gmt)
-{
- apr_int64_t seconds = apr_time_sec(t);
- struct exploded_time_cache_element *cache_element =
- &(cache[seconds & TIME_CACHE_MASK]);
- struct exploded_time_cache_element cache_element_snapshot;
-
- /* The cache is implemented as a ring buffer. Each second,
- * it uses a different element in the buffer. The timestamp
- * in the element indicates whether the element contains the
- * exploded time for the current second (vs the time
- * 'now - AP_TIME_RECENT_THRESHOLD' seconds ago). If the
- * cached value is for the current time, we use it. Otherwise,
- * we compute the apr_time_exp_t and store it in this
- * cache element. Note that the timestamp in the cache
- * element is updated only after the exploded time. Thus
- * if two threads hit this cache element simultaneously
- * at the start of a new second, they'll both explode the
- * time and store it. I.e., the writers will collide, but
- * they'll be writing the same value.
- */
- if (cache_element->t >= seconds) {
- /* There is an intentional race condition in this design:
- * in a multithreaded app, one thread might be reading
- * from this cache_element to resolve a timestamp from
- * TIME_CACHE_SIZE seconds ago at the same time that
- * another thread is copying the exploded form of the
- * current time into the same cache_element. (I.e., the
- * first thread might hit this element of the ring buffer
- * just as the element is being recycled.) This can
- * also happen at the start of a new second, if a
- * reader accesses the cache_element after a writer
- * has updated cache_element.t but before the writer
- * has finished updating the whole cache_element.
- *
- * Rather than trying to prevent this race condition
- * with locks, we allow it to happen and then detect
- * and correct it. The detection works like this:
- * Step 1: Take a "snapshot" of the cache element by
- * copying it into a temporary buffer.
- * Step 2: Check whether the snapshot contains consistent
- * data: the timestamps at the start and end of
- * the cache_element should both match the 'seconds'
- * value that we computed from the input time.
- * If these three don't match, then the snapshot
- * shows the cache_element in the middle of an
- * update, and its contents are invalid.
- * Step 3: If the snapshot is valid, use it. Otherwise,
- * just give up on the cache and explode the
- * input time.
- */
- memcpy(&cache_element_snapshot, cache_element,
- sizeof(struct exploded_time_cache_element));
- if ((seconds != cache_element_snapshot.t) ||
- (seconds != cache_element_snapshot.t_validate)) {
- /* Invalid snapshot */
- if (use_gmt) {
- return apr_time_exp_gmt(xt, t);
- }
- else {
- return apr_time_exp_lt(xt, t);
- }
- }
- else {
- /* Valid snapshot */
- memcpy(xt, &(cache_element_snapshot.xt),
- sizeof(apr_time_exp_t));
- }
- }
- else {
- apr_status_t r;
- if (use_gmt) {
- r = apr_time_exp_gmt(xt, t);
- }
- else {
- r = apr_time_exp_lt(xt, t);
- }
- if (r != APR_SUCCESS) {
- return r;
- }
- cache_element->t = seconds;
- memcpy(&(cache_element->xt), xt, sizeof(apr_time_exp_t));
- cache_element->t_validate = seconds;
- }
- xt->tm_usec = (int)apr_time_usec(t);
- return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_explode_recent_localtime(apr_time_exp_t * tm,
- apr_time_t t)
-{
- return cached_explode(tm, t, exploded_cache_localtime, 0);
-}
-
-AP_DECLARE(apr_status_t) ap_explode_recent_gmt(apr_time_exp_t * tm,
- apr_time_t t)
-{
- return cached_explode(tm, t, exploded_cache_gmt, 1);
-}
-
-AP_DECLARE(apr_status_t) ap_recent_ctime(char *date_str, apr_time_t t)
-{
- /* ### This code is a clone of apr_ctime(), except that it
- * uses ap_explode_recent_localtime() instead of apr_time_exp_lt().
- */
- apr_time_exp_t xt;
- const char *s;
- int real_year;
-
- /* example: "Wed Jun 30 21:49:08 1993" */
- /* 123456789012345678901234 */
-
- ap_explode_recent_localtime(&xt, t);
- s = &apr_day_snames[xt.tm_wday][0];
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = ' ';
- s = &apr_month_snames[xt.tm_mon][0];
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = ' ';
- *date_str++ = xt.tm_mday / 10 + '0';
- *date_str++ = xt.tm_mday % 10 + '0';
- *date_str++ = ' ';
- *date_str++ = xt.tm_hour / 10 + '0';
- *date_str++ = xt.tm_hour % 10 + '0';
- *date_str++ = ':';
- *date_str++ = xt.tm_min / 10 + '0';
- *date_str++ = xt.tm_min % 10 + '0';
- *date_str++ = ':';
- *date_str++ = xt.tm_sec / 10 + '0';
- *date_str++ = xt.tm_sec % 10 + '0';
- *date_str++ = ' ';
- real_year = 1900 + xt.tm_year;
- *date_str++ = real_year / 1000 + '0';
- *date_str++ = real_year % 1000 / 100 + '0';
- *date_str++ = real_year % 100 / 10 + '0';
- *date_str++ = real_year % 10 + '0';
- *date_str++ = 0;
-
- return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_status_t) ap_recent_rfc822_date(char *date_str, apr_time_t t)
-{
- /* ### This code is a clone of apr_rfc822_date(), except that it
- * uses ap_explode_recent_gmt() instead of apr_time_exp_gmt().
- */
- apr_time_exp_t xt;
- const char *s;
- int real_year;
-
- ap_explode_recent_gmt(&xt, t);
-
- /* example: "Sat, 08 Jan 2000 18:31:41 GMT" */
- /* 12345678901234567890123456789 */
-
- s = &apr_day_snames[xt.tm_wday][0];
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = ',';
- *date_str++ = ' ';
- *date_str++ = xt.tm_mday / 10 + '0';
- *date_str++ = xt.tm_mday % 10 + '0';
- *date_str++ = ' ';
- s = &apr_month_snames[xt.tm_mon][0];
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = *s++;
- *date_str++ = ' ';
- real_year = 1900 + xt.tm_year;
- /* This routine isn't y10k ready. */
- *date_str++ = real_year / 1000 + '0';
- *date_str++ = real_year % 1000 / 100 + '0';
- *date_str++ = real_year % 100 / 10 + '0';
- *date_str++ = real_year % 10 + '0';
- *date_str++ = ' ';
- *date_str++ = xt.tm_hour / 10 + '0';
- *date_str++ = xt.tm_hour % 10 + '0';
- *date_str++ = ':';
- *date_str++ = xt.tm_min / 10 + '0';
- *date_str++ = xt.tm_min % 10 + '0';
- *date_str++ = ':';
- *date_str++ = xt.tm_sec / 10 + '0';
- *date_str++ = xt.tm_sec % 10 + '0';
- *date_str++ = ' ';
- *date_str++ = 'G';
- *date_str++ = 'M';
- *date_str++ = 'T';
- *date_str++ = 0;
- return APR_SUCCESS;
-}
diff --git a/server/util_xml.c b/server/util_xml.c
deleted file mode 100644
index 2019917c2d..0000000000
--- a/server/util_xml.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright 2000-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_xml.h"
-
-#include "httpd.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_core.h"
-
-#include "util_charset.h"
-#include "util_xml.h"
-
-
-/* used for reading input blocks */
-#define READ_BLOCKSIZE 2048
-
-
-AP_DECLARE(int) ap_xml_parse_input(request_rec * r, apr_xml_doc **pdoc)
-{
- apr_xml_parser *parser;
- apr_bucket_brigade *brigade;
- int seen_eos;
- apr_status_t status;
- char errbuf[200];
- apr_size_t total_read = 0;
- apr_size_t limit_xml_body = ap_get_limit_xml_body(r);
- int result = HTTP_BAD_REQUEST;
-
- parser = apr_xml_parser_create(r->pool);
- brigade = apr_brigade_create(r->pool, r->connection->bucket_alloc);
-
- seen_eos = 0;
- total_read = 0;
-
- do {
- apr_bucket *bucket;
-
- /* read the body, stuffing it into the parser */
- status = ap_get_brigade(r->input_filters, brigade,
- AP_MODE_READBYTES, APR_BLOCK_READ,
- READ_BLOCKSIZE);
-
- if (status != APR_SUCCESS) {
- goto read_error;
- }
-
- for (bucket = APR_BRIGADE_FIRST(brigade);
- bucket != APR_BRIGADE_SENTINEL(brigade);
- bucket = APR_BUCKET_NEXT(bucket))
- {
- const char *data;
- apr_size_t len;
-
- if (APR_BUCKET_IS_EOS(bucket)) {
- seen_eos = 1;
- break;
- }
-
- if (APR_BUCKET_IS_METADATA(bucket)) {
- continue;
- }
-
- status = apr_bucket_read(bucket, &data, &len, APR_BLOCK_READ);
- if (status != APR_SUCCESS) {
- goto read_error;
- }
-
- total_read += len;
- if (limit_xml_body && total_read > limit_xml_body) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "XML request body is larger than the configured "
- "limit of %lu", (unsigned long)limit_xml_body);
- result = HTTP_REQUEST_ENTITY_TOO_LARGE;
- goto read_error;
- }
-
- status = apr_xml_parser_feed(parser, data, len);
- if (status) {
- goto parser_error;
- }
- }
-
- apr_brigade_cleanup(brigade);
- } while (!seen_eos);
-
- apr_brigade_destroy(brigade);
-
- /* tell the parser that we're done */
- status = apr_xml_parser_done(parser, pdoc);
- if (status) {
- /* Some parsers are stupid and return an error on blank documents. */
- if (!total_read) {
- *pdoc = NULL;
- return OK;
- }
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "XML parser error (at end). status=%d", status);
- return HTTP_BAD_REQUEST;
- }
-
-#if APR_CHARSET_EBCDIC
- apr_xml_parser_convert_doc(r->pool, *pdoc, ap_hdrs_from_ascii);
-#endif
- return OK;
-
- parser_error:
- (void) apr_xml_parser_geterror(parser, errbuf, sizeof(errbuf));
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "%s", errbuf);
-
- /* FALLTHRU */
-
- read_error:
- /* make sure the parser is terminated */
- (void) apr_xml_parser_done(parser, NULL);
-
- apr_brigade_destroy(brigade);
-
- /* Apache will supply a default error, plus the error log above. */
- return result;
-}
diff --git a/server/vhost.c b/server/vhost.c
deleted file mode 100644
index 86119e4834..0000000000
--- a/server/vhost.c
+++ /dev/null
@@ -1,1014 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * http_vhost.c: functions pertaining to virtual host addresses
- * (configuration and run-time)
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_vhost.h"
-#include "http_protocol.h"
-#include "http_core.h"
-
-#if APR_HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-/*
- * After all the definitions there's an explanation of how it's all put
- * together.
- */
-
-/* meta-list of name-vhosts. Each server_rec can be in possibly multiple
- * lists of name-vhosts.
- */
-typedef struct name_chain name_chain;
-struct name_chain {
- name_chain *next;
- server_addr_rec *sar; /* the record causing it to be in
- * this chain (needed for port comparisons) */
- server_rec *server; /* the server to use on a match */
-};
-
-/* meta-list of ip addresses. Each server_rec can be in possibly multiple
- * hash chains since it can have multiple ips.
- */
-typedef struct ipaddr_chain ipaddr_chain;
-struct ipaddr_chain {
- ipaddr_chain *next;
- server_addr_rec *sar; /* the record causing it to be in
- * this chain (need for both ip addr and port
- * comparisons) */
- server_rec *server; /* the server to use if this matches */
- name_chain *names; /* if non-NULL then a list of name-vhosts
- * sharing this address */
-};
-
-/* This defines the size of the hash table used for hashing ip addresses
- * of virtual hosts. It must be a power of two.
- */
-#ifndef IPHASH_TABLE_SIZE
-#define IPHASH_TABLE_SIZE 256
-#endif
-
-/* A (n) bucket hash table, each entry has a pointer to a server rec and
- * a pointer to the other entries in that bucket. Each individual address,
- * even for virtualhosts with multiple addresses, has an entry in this hash
- * table. There are extra buckets for _default_, and name-vhost entries.
- *
- * Note that after config time this is constant, so it is thread-safe.
- */
-static ipaddr_chain *iphash_table[IPHASH_TABLE_SIZE];
-
-/* dump out statistics about the hash function */
-/* #define IPHASH_STATISTICS */
-
-/* list of the _default_ servers */
-static ipaddr_chain *default_list;
-
-/* list of the NameVirtualHost addresses */
-static server_addr_rec *name_vhost_list;
-static server_addr_rec **name_vhost_list_tail;
-
-/*
- * How it's used:
- *
- * The ip address determines which chain in iphash_table is interesting, then
- * a comparison is done down that chain to find the first ipaddr_chain whose
- * sar matches the address:port pair.
- *
- * If that ipaddr_chain has names == NULL then you're done, it's an ip-vhost.
- *
- * Otherwise it's a name-vhost list, and the default is the server in the
- * ipaddr_chain record. We tuck away the ipaddr_chain record in the
- * conn_rec field vhost_lookup_data. Later on after the headers we get a
- * second chance, and we use the name_chain to figure out what name-vhost
- * matches the headers.
- *
- * If there was no ip address match in the iphash_table then do a lookup
- * in the default_list.
- *
- * How it's put together ... well you should be able to figure that out
- * from how it's used. Or something like that.
- */
-
-
-/* called at the beginning of the config */
-AP_DECLARE(void) ap_init_vhost_config(apr_pool_t *p)
-{
- memset(iphash_table, 0, sizeof(iphash_table));
- default_list = NULL;
- name_vhost_list = NULL;
- name_vhost_list_tail = &name_vhost_list;
-}
-
-
-/*
- * Parses a host of the form <address>[:port]
- * paddr is used to create a list in the order of input
- * **paddr is the ->next pointer of the last entry (or s->addrs)
- * *paddr is the variable used to keep track of **paddr between calls
- * port is the default port to assume
- */
-static const char *get_addresses(apr_pool_t *p, const char *w_,
- server_addr_rec ***paddr,
- apr_port_t default_port)
-{
- apr_sockaddr_t *my_addr;
- server_addr_rec *sar;
- char *w, *host, *scope_id;
- int wild_port;
- apr_size_t wlen;
- apr_port_t port;
- apr_status_t rv;
-
- if (*w_ == '\0')
- return NULL;
-
- w = apr_pstrdup(p, w_);
- /* apr_parse_addr_port() doesn't understand ":*" so handle that first. */
- wlen = strlen(w); /* wlen must be > 0 at this point */
- wild_port = 0;
- if (w[wlen - 1] == '*') {
- if (wlen < 2) {
- wild_port = 1;
- }
- else if (w[wlen - 2] == ':') {
- w[wlen - 2] = '\0';
- wild_port = 1;
- }
- }
- rv = apr_parse_addr_port(&host, &scope_id, &port, w, p);
- /* If the string is "80", apr_parse_addr_port() will be happy and set
- * host to NULL and port to 80, so watch out for that.
- */
- if (rv != APR_SUCCESS) {
- return "The address or port is invalid";
- }
- if (!host) {
- return "Missing address for VirtualHost";
- }
- if (scope_id) {
- return "Scope ids are not supported";
- }
- if (!port && !wild_port) {
- port = default_port;
- }
-
- if (strcmp(host, "*") == 0) {
- rv = apr_sockaddr_info_get(&my_addr, "0.0.0.0", APR_INET, port, 0, p);
- ap_assert(rv == APR_SUCCESS); /* must be bug or out of storage */
- }
- else if (strcasecmp(host, "_default_") == 0
- || strcmp(host, "255.255.255.255") == 0) {
- rv = apr_sockaddr_info_get(&my_addr, "255.255.255.255", APR_INET, port, 0, p);
- ap_assert(rv == APR_SUCCESS); /* must be bug or out of storage */
- }
- else {
- rv = apr_sockaddr_info_get(&my_addr, host, APR_UNSPEC, port, 0, p);
- if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
- "Cannot resolve host name %s --- ignoring!", host);
- return NULL;
- }
- }
-
- /* Remember all addresses for the host */
-
- do {
- sar = apr_pcalloc(p, sizeof(server_addr_rec));
- **paddr = sar;
- *paddr = &sar->next;
- sar->host_addr = my_addr;
- sar->host_port = port;
- sar->virthost = host;
- my_addr = my_addr->next;
- } while (my_addr);
-
- return NULL;
-}
-
-
-/* parse the <VirtualHost> addresses */
-const char *ap_parse_vhost_addrs(apr_pool_t *p,
- const char *hostname,
- server_rec *s)
-{
- server_addr_rec **addrs;
- const char *err;
-
- /* start the list of addreses */
- addrs = &s->addrs;
- while (hostname[0]) {
- err = get_addresses(p, ap_getword_conf(p, &hostname), &addrs, s->port);
- if (err) {
- *addrs = NULL;
- return err;
- }
- }
- /* terminate the list */
- *addrs = NULL;
- if (s->addrs) {
- if (s->addrs->host_port) {
- /* override the default port which is inherited from main_server */
- s->port = s->addrs->host_port;
- }
- }
- return NULL;
-}
-
-
-const char *ap_set_name_virtual_host(cmd_parms *cmd, void *dummy,
- const char *arg)
-{
- /* use whatever port the main server has at this point */
- return get_addresses(cmd->pool, arg, &name_vhost_list_tail,
- cmd->server->port);
-}
-
-
-/* hash table statistics, keep this in here for the beta period so
- * we can find out if the hash function is ok
- */
-#ifdef IPHASH_STATISTICS
-static int iphash_compare(const void *a, const void *b)
-{
- return (*(const int *) b - *(const int *) a);
-}
-
-
-static void dump_iphash_statistics(server_rec *main_s)
-{
- unsigned count[IPHASH_TABLE_SIZE];
- int i;
- ipaddr_chain *src;
- unsigned total;
- char buf[HUGE_STRING_LEN];
- char *p;
-
- total = 0;
- for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
- count[i] = 0;
- for (src = iphash_table[i]; src; src = src->next) {
- ++count[i];
- if (i < IPHASH_TABLE_SIZE) {
- /* don't count the slop buckets in the total */
- ++total;
- }
- }
- }
- qsort(count, IPHASH_TABLE_SIZE, sizeof(count[0]), iphash_compare);
- p = buf + apr_snprintf(buf, sizeof(buf),
- "iphash: total hashed = %u, avg chain = %u, "
- "chain lengths (count x len):",
- total, total / IPHASH_TABLE_SIZE);
- total = 1;
- for (i = 1; i < IPHASH_TABLE_SIZE; ++i) {
- if (count[i - 1] != count[i]) {
- p += apr_snprintf(p, sizeof(buf) - (p - buf), " %ux%u",
- total, count[i - 1]);
- total = 1;
- }
- else {
- ++total;
- }
- }
- p += apr_snprintf(p, sizeof(buf) - (p - buf), " %ux%u",
- total, count[IPHASH_TABLE_SIZE - 1]);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, main_s, buf);
-}
-#endif
-
-
-/* This hashing function is designed to get good distribution in the cases
- * where the server is handling entire "networks" of servers. i.e. a
- * whack of /24s. This is probably the most common configuration for
- * ISPs with large virtual servers.
- *
- * NOTE: This function is symmetric (i.e. collapses all 4 octets
- * into one), so machine byte order (big/little endianness) does not matter.
- *
- * Hash function provided by David Hankins.
- */
-static APR_INLINE unsigned hash_inaddr(unsigned key)
-{
- key ^= (key >> 16);
- return ((key >> 8) ^ key) % IPHASH_TABLE_SIZE;
-}
-
-static APR_INLINE unsigned hash_addr(struct apr_sockaddr_t *sa)
-{
- unsigned key;
-
- /* The key is the last four bytes of the IP address.
- * For IPv4, this is the entire address, as always.
- * For IPv6, this is usually part of the MAC address.
- */
- key = *(unsigned *)((char *)sa->ipaddr_ptr + sa->ipaddr_len - 4);
- return hash_inaddr(key);
-}
-
-static ipaddr_chain *new_ipaddr_chain(apr_pool_t *p,
- server_rec *s, server_addr_rec *sar)
-{
- ipaddr_chain *new;
-
- new = apr_palloc(p, sizeof(*new));
- new->names = NULL;
- new->server = s;
- new->sar = sar;
- new->next = NULL;
- return new;
-}
-
-
-static name_chain *new_name_chain(apr_pool_t *p,
- server_rec *s, server_addr_rec *sar)
-{
- name_chain *new;
-
- new = apr_palloc(p, sizeof(*new));
- new->server = s;
- new->sar = sar;
- new->next = NULL;
- return new;
-}
-
-
-static APR_INLINE ipaddr_chain *find_ipaddr(apr_sockaddr_t *sa)
-{
- unsigned bucket;
- ipaddr_chain *trav;
-
- /* scan the hash table for an exact match first */
- bucket = hash_addr(sa);
- for (trav = iphash_table[bucket]; trav; trav = trav->next) {
- server_addr_rec *sar = trav->sar;
- apr_sockaddr_t *cur = sar->host_addr;
-
- if (cur->port == 0 || sa->port == 0 || cur->port == sa->port) {
- if (apr_sockaddr_equal(cur, sa)) {
- return trav;
- }
- }
- }
- return NULL;
-}
-
-static ipaddr_chain *find_default_server(apr_port_t port)
-{
- server_addr_rec *sar;
- ipaddr_chain *trav;
-
- for (trav = default_list; trav; trav = trav->next) {
- sar = trav->sar;
- if (sar->host_port == 0 || sar->host_port == port) {
- /* match! */
- return trav;
- }
- }
- return NULL;
-}
-
-static void dump_a_vhost(apr_file_t *f, ipaddr_chain *ic)
-{
- name_chain *nc;
- int len;
- char buf[MAX_STRING_LEN];
- apr_sockaddr_t *ha = ic->sar->host_addr;
-
- if (ha->family == APR_INET &&
- ha->sa.sin.sin_addr.s_addr == DEFAULT_VHOST_ADDR) {
- len = apr_snprintf(buf, sizeof(buf), "_default_:%u",
- ic->sar->host_port);
- }
- else if (ha->family == APR_INET &&
- ha->sa.sin.sin_addr.s_addr == INADDR_ANY) {
- len = apr_snprintf(buf, sizeof(buf), "*:%u",
- ic->sar->host_port);
- }
- else {
- len = apr_snprintf(buf, sizeof(buf), "%pI", ha);
- }
- if (ic->sar->host_port == 0) {
- buf[len-1] = '*';
- }
- if (ic->names == NULL) {
- apr_file_printf(f, "%-22s %s (%s:%u)\n", buf,
- ic->server->server_hostname,
- ic->server->defn_name, ic->server->defn_line_number);
- return;
- }
- apr_file_printf(f, "%-22s is a NameVirtualHost\n"
- "%8s default server %s (%s:%u)\n",
- buf, "", ic->server->server_hostname,
- ic->server->defn_name, ic->server->defn_line_number);
- for (nc = ic->names; nc; nc = nc->next) {
- if (nc->sar->host_port) {
- apr_file_printf(f, "%8s port %u ", "", nc->sar->host_port);
- }
- else {
- apr_file_printf(f, "%8s port * ", "");
- }
- apr_file_printf(f, "namevhost %s (%s:%u)\n",
- nc->server->server_hostname,
- nc->server->defn_name, nc->server->defn_line_number);
- }
-}
-
-static void dump_vhost_config(apr_file_t *f)
-{
- ipaddr_chain *ic;
- int i;
-
- apr_file_printf(f, "VirtualHost configuration:\n");
- for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
- for (ic = iphash_table[i]; ic; ic = ic->next) {
- dump_a_vhost(f, ic);
- }
- }
- if (default_list) {
- apr_file_printf(f, "wildcard NameVirtualHosts and _default_ servers:\n");
- for (ic = default_list; ic; ic = ic->next) {
- dump_a_vhost(f, ic);
- }
- }
-}
-
-/*
- * Two helper functions for ap_fini_vhost_config()
- */
-static int add_name_vhost_config(apr_pool_t *p, server_rec *main_s,
- server_rec *s, server_addr_rec *sar,
- ipaddr_chain *ic)
-{
- /* the first time we encounter a NameVirtualHost address
- * ic->server will be NULL, on subsequent encounters
- * ic->names will be non-NULL.
- */
- if (ic->names || ic->server == NULL) {
- name_chain *nc = new_name_chain(p, s, sar);
- nc->next = ic->names;
- ic->names = nc;
- ic->server = s;
- if (sar->host_port != ic->sar->host_port) {
- /* one of the two is a * port, the other isn't */
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_s,
- "VirtualHost %s:%u -- mixing * "
- "ports and non-* ports with "
- "a NameVirtualHost address is not supported,"
- " proceeding with undefined results",
- sar->virthost, sar->host_port);
- }
- return 1;
- }
- else {
- /* IP-based vhosts are handled by the caller */
- return 0;
- }
-}
-
-static void remove_unused_name_vhosts(server_rec *main_s, ipaddr_chain **pic)
-{
- while (*pic) {
- ipaddr_chain *ic = *pic;
-
- if (ic->server == NULL) {
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, main_s,
- "NameVirtualHost %s:%u has no VirtualHosts",
- ic->sar->virthost, ic->sar->host_port);
- *pic = ic->next;
- }
- else {
- pic = &ic->next;
- }
- }
-}
-
-/* compile the tables and such we need to do the run-time vhost lookups */
-AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_s)
-{
- server_addr_rec *sar;
- int has_default_vhost_addr;
- server_rec *s;
- int i;
- ipaddr_chain **iphash_table_tail[IPHASH_TABLE_SIZE];
-
- /* terminate the name_vhost list */
- *name_vhost_list_tail = NULL;
-
- /* Main host first */
- s = main_s;
-
- if (!s->server_hostname) {
- s->server_hostname = ap_get_local_host(p);
- }
-
- /* initialize the tails */
- for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
- iphash_table_tail[i] = &iphash_table[i];
- }
-
- /* The first things to go into the hash table are the NameVirtualHosts
- * Since name_vhost_list is in the same order that the directives
- * occured in the config file, we'll copy it in that order.
- */
- for (sar = name_vhost_list; sar; sar = sar->next) {
- char inaddr_any[16] = {0}; /* big enough to handle IPv4 or IPv6 */
- unsigned bucket = hash_addr(sar->host_addr);
- ipaddr_chain *ic = new_ipaddr_chain(p, NULL, sar);
-
- if (memcmp(sar->host_addr->ipaddr_ptr, inaddr_any,
- sar->host_addr->ipaddr_len)) { /* not IN[6]ADDR_ANY */
- *iphash_table_tail[bucket] = ic;
- iphash_table_tail[bucket] = &ic->next;
- }
- else {
- /* A wildcard NameVirtualHost goes on the default_list so
- * that it can catch incoming requests on any address.
- */
- ic->next = default_list;
- default_list = ic;
- }
- /* Notice that what we've done is insert an ipaddr_chain with
- * both server and names NULL. This fact is used to spot name-
- * based vhosts in add_name_vhost_config().
- */
- }
-
- /* The next things to go into the hash table are the virtual hosts
- * themselves. They're listed off of main_s->next in the reverse
- * order they occured in the config file, so we insert them at
- * the iphash_table_tail but don't advance the tail.
- */
-
- for (s = main_s->next; s; s = s->next) {
- has_default_vhost_addr = 0;
- for (sar = s->addrs; sar; sar = sar->next) {
- ipaddr_chain *ic;
- char inaddr_any[16] = {0}; /* big enough to handle IPv4 or IPv6 */
-
- if ((sar->host_addr->family == AF_INET &&
- sar->host_addr->sa.sin.sin_addr.s_addr == DEFAULT_VHOST_ADDR)
- || !memcmp(sar->host_addr->ipaddr_ptr, inaddr_any, sar->host_addr->ipaddr_len)) {
- ic = find_default_server(sar->host_port);
- if (!ic || !add_name_vhost_config(p, main_s, s, sar, ic)) {
- if (ic && ic->sar->host_port != 0) {
- ap_log_error(APLOG_MARK, APLOG_WARNING,
- 0, main_s, "_default_ VirtualHost "
- "overlap on port %u, the first has "
- "precedence", sar->host_port);
- }
- ic = new_ipaddr_chain(p, s, sar);
- ic->next = default_list;
- default_list = ic;
- }
- has_default_vhost_addr = 1;
- }
- else {
- /* see if it matches something we've already got */
- ic = find_ipaddr(sar->host_addr);
-
- if (!ic) {
- unsigned bucket = hash_addr(sar->host_addr);
-
- ic = new_ipaddr_chain(p, s, sar);
- ic->next = *iphash_table_tail[bucket];
- *iphash_table_tail[bucket] = ic;
- }
- else if (!add_name_vhost_config(p, main_s, s, sar, ic)) {
- ap_log_error(APLOG_MARK, APLOG_WARNING,
- 0, main_s, "VirtualHost %s:%u overlaps "
- "with VirtualHost %s:%u, the first has "
- "precedence, perhaps you need a "
- "NameVirtualHost directive",
- sar->virthost, sar->host_port,
- ic->sar->virthost, ic->sar->host_port);
- ic->sar = sar;
- ic->server = s;
- }
- }
- }
-
- /* Ok now we want to set up a server_hostname if the user was
- * silly enough to forget one.
- * XXX: This is silly we should just crash and burn.
- */
- if (!s->server_hostname) {
- if (has_default_vhost_addr) {
- s->server_hostname = main_s->server_hostname;
- }
- else if (!s->addrs) {
- /* what else can we do? at this point this vhost has
- no configured name, probably because they used
- DNS in the VirtualHost statement. It's disabled
- anyhow by the host matching code. -djg */
- s->server_hostname =
- apr_pstrdup(p, "bogus_host_without_forward_dns");
- }
- else {
- apr_status_t rv;
- char *hostname;
-
- rv = apr_getnameinfo(&hostname, s->addrs->host_addr, 0);
- if (rv == APR_SUCCESS) {
- s->server_hostname = apr_pstrdup(p, hostname);
- }
- else {
- /* again, what can we do? They didn't specify a
- ServerName, and their DNS isn't working. -djg */
- char *ipaddr_str;
-
- apr_sockaddr_ip_get(&ipaddr_str, s->addrs->host_addr);
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, main_s,
- "Failed to resolve server name "
- "for %s (check DNS) -- or specify an explicit "
- "ServerName",
- ipaddr_str);
- s->server_hostname =
- apr_pstrdup(p, "bogus_host_without_reverse_dns");
- }
- }
- }
- }
-
- /* now go through and delete any NameVirtualHosts that didn't have any
- * hosts associated with them. Lamers.
- */
- for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
- remove_unused_name_vhosts(main_s, &iphash_table[i]);
- }
- remove_unused_name_vhosts(main_s, &default_list);
-
-#ifdef IPHASH_STATISTICS
- dump_iphash_statistics(main_s);
-#endif
- if (ap_exists_config_define("DUMP_VHOSTS")) {
- apr_file_t *thefile = NULL;
- apr_file_open_stderr(&thefile, p);
- dump_vhost_config(thefile);
- }
-}
-
-
-/*****************************************************************************
- * run-time vhost matching functions
- */
-
-/* Lowercase and remove any trailing dot and/or :port from the hostname,
- * and check that it is sane.
- *
- * In most configurations the exact syntax of the hostname isn't
- * important so strict sanity checking isn't necessary. However, in
- * mass hosting setups (using mod_vhost_alias or mod_rewrite) where
- * the hostname is interpolated into the filename, we need to be sure
- * that the interpolation doesn't expose parts of the filesystem.
- * We don't do strict RFC 952 / RFC 1123 syntax checking in order
- * to support iDNS and people who erroneously use underscores.
- * Instead we just check for filesystem metacharacters: directory
- * separators / and \ and sequences of more than one dot.
- */
-static void fix_hostname(request_rec *r)
-{
- char *host, *scope_id;
- char *dst;
- apr_port_t port;
- apr_status_t rv;
-
- /* According to RFC 2616, Host header field CAN be blank. */
- if (!*r->hostname) {
- return;
- }
-
- rv = apr_parse_addr_port(&host, &scope_id, &port, r->hostname, r->pool);
- if (rv != APR_SUCCESS || scope_id) {
- goto bad;
- }
-
- if (!host && port) {
- /* silly looking host ("Host: 123") but that isn't our job
- * here to judge; apr_parse_addr_port() would think we had a port
- * but no address
- */
- host = apr_itoa(r->pool, (int)port);
- }
- else if (port) {
- /* Don't throw the Host: header's port number away:
- save it in parsed_uri -- ap_get_server_port() needs it! */
- /* @@@ XXX there should be a better way to pass the port.
- * Like r->hostname, there should be a r->portno
- */
- r->parsed_uri.port = port;
- r->parsed_uri.port_str = apr_itoa(r->pool, (int)port);
- }
-
- /* if the hostname is an IPv6 numeric address string, it was validated
- * already; otherwise, further validation is needed
- */
- if (r->hostname[0] != '[') {
- for (dst = host; *dst; dst++) {
- if (apr_islower(*dst)) {
- /* leave char unchanged */
- }
- else if (*dst == '.') {
- if (*(dst + 1) == '.') {
- goto bad;
- }
- }
- else if (apr_isupper(*dst)) {
- *dst = apr_tolower(*dst);
- }
- else if (*dst == '/' || *dst == '\\') {
- goto bad;
- }
- }
- /* strip trailing gubbins */
- if (dst > host && dst[-1] == '.') {
- dst[-1] = '\0';
- }
- }
- r->hostname = host;
- return;
-
-bad:
- r->status = HTTP_BAD_REQUEST;
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "Client sent malformed Host header");
- return;
-}
-
-
-/* return 1 if host matches ServerName or ServerAliases */
-static int matches_aliases(server_rec *s, const char *host)
-{
- int i;
- apr_array_header_t *names;
-
- /* match ServerName */
- if (!strcasecmp(host, s->server_hostname)) {
- return 1;
- }
-
- /* search all the aliases from ServerAlias directive */
- names = s->names;
- if (names) {
- char **name = (char **) names->elts;
- for (i = 0; i < names->nelts; ++i) {
- if(!name[i]) continue;
- if (!strcasecmp(host, name[i]))
- return 1;
- }
- }
- names = s->wild_names;
- if (names) {
- char **name = (char **) names->elts;
- for (i = 0; i < names->nelts; ++i) {
- if(!name[i]) continue;
- if (!ap_strcasecmp_match(host, name[i]))
- return 1;
- }
- }
- return 0;
-}
-
-
-/* Suppose a request came in on the same socket as this r, and included
- * a header "Host: host:port", would it map to r->server? It's more
- * than just that though. When we do the normal matches for each request
- * we don't even bother considering Host: etc on non-namevirtualhosts,
- * we just call it a match. But here we require the host:port to match
- * the ServerName and/or ServerAliases.
- */
-AP_DECLARE(int) ap_matches_request_vhost(request_rec *r, const char *host,
- apr_port_t port)
-{
- server_rec *s;
- server_addr_rec *sar;
-
- s = r->server;
-
- /* search all the <VirtualHost> values */
- /* XXX: If this is a NameVirtualHost then we may not be doing the Right Thing
- * consider:
- *
- * NameVirtualHost 10.1.1.1
- * <VirtualHost 10.1.1.1>
- * ServerName v1
- * </VirtualHost>
- * <VirtualHost 10.1.1.1>
- * ServerName v2
- * </VirtualHost>
- *
- * Suppose r->server is v2, and we're asked to match "10.1.1.1". We'll say
- * "yup it's v2", when really it isn't... if a request came in for 10.1.1.1
- * it would really go to v1.
- */
- for (sar = s->addrs; sar; sar = sar->next) {
- if ((sar->host_port == 0 || port == sar->host_port)
- && !strcasecmp(host, sar->virthost)) {
- return 1;
- }
- }
-
- /* the Port has to match now, because the rest don't have ports associated
- * with them. */
- if (port != s->port) {
- return 0;
- }
-
- return matches_aliases(s, host);
-}
-
-
-static void check_hostalias(request_rec *r)
-{
- /*
- * Even if the request has a Host: header containing a port we ignore
- * that port. We always use the physical port of the socket. There
- * are a few reasons for this:
- *
- * - the default of 80 or 443 for SSL is easier to handle this way
- * - there is less of a possibility of a security problem
- * - it simplifies the data structure
- * - the client may have no idea that a proxy somewhere along the way
- * translated the request to another ip:port
- * - except for the addresses from the VirtualHost line, none of the other
- * names we'll match have ports associated with them
- */
- const char *host = r->hostname;
- apr_port_t port;
- server_rec *s;
- server_rec *last_s;
- name_chain *src;
-
- last_s = NULL;
-
- port = r->connection->local_addr->port;
-
- /* Recall that the name_chain is a list of server_addr_recs, some of
- * whose ports may not match. Also each server may appear more than
- * once in the chain -- specifically, it will appear once for each
- * address from its VirtualHost line which matched. We only want to
- * do the full ServerName/ServerAlias comparisons once for each
- * server, fortunately we know that all the VirtualHost addresses for
- * a single server are adjacent to each other.
- */
-
- for (src = r->connection->vhost_lookup_data; src; src = src->next) {
- server_addr_rec *sar;
-
- /* We only consider addresses on the name_chain which have a matching
- * port
- */
- sar = src->sar;
- if (sar->host_port != 0 && port != sar->host_port) {
- continue;
- }
-
- s = src->server;
-
- /* does it match the virthost from the sar? */
- if (!strcasecmp(host, sar->virthost)) {
- goto found;
- }
-
- if (s == last_s) {
- /* we've already done ServerName and ServerAlias checks for this
- * vhost
- */
- continue;
- }
- last_s = s;
-
- if (matches_aliases(s, host)) {
- goto found;
- }
- }
- return;
-
-found:
- /* s is the first matching server, we're done */
- r->server = s;
-}
-
-
-static void check_serverpath(request_rec *r)
-{
- server_rec *s;
- server_rec *last_s;
- name_chain *src;
- apr_port_t port;
-
- port = r->connection->local_addr->port;
-
- /*
- * This is in conjunction with the ServerPath code in http_core, so we
- * get the right host attached to a non- Host-sending request.
- *
- * See the comment in check_hostalias about how each vhost can be
- * listed multiple times.
- */
-
- last_s = NULL;
- for (src = r->connection->vhost_lookup_data; src; src = src->next) {
- /* We only consider addresses on the name_chain which have a matching
- * port
- */
- if (src->sar->host_port != 0 && port != src->sar->host_port) {
- continue;
- }
-
- s = src->server;
- if (s == last_s) {
- continue;
- }
- last_s = s;
-
- if (s->path && !strncmp(r->uri, s->path, s->pathlen) &&
- (s->path[s->pathlen - 1] == '/' ||
- r->uri[s->pathlen] == '/' ||
- r->uri[s->pathlen] == '\0')) {
- r->server = s;
- return;
- }
- }
-}
-
-
-AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r)
-{
- /* must set this for HTTP/1.1 support */
- if (r->hostname || (r->hostname = apr_table_get(r->headers_in, "Host"))) {
- fix_hostname(r);
- if (r->status != HTTP_OK)
- return;
- }
- /* check if we tucked away a name_chain */
- if (r->connection->vhost_lookup_data) {
- if (r->hostname)
- check_hostalias(r);
- else
- check_serverpath(r);
- }
-}
-
-
-/* Called for a new connection which has a known local_addr. Note that the
- * new connection is assumed to have conn->server == main server.
- */
-AP_DECLARE(void) ap_update_vhost_given_ip(conn_rec *conn)
-{
- ipaddr_chain *trav;
- apr_port_t port;
-
- /* scan the hash table for an exact match first */
- trav = find_ipaddr(conn->local_addr);
-
- if (trav) {
- /* save the name_chain for later in case this is a name-vhost */
- conn->vhost_lookup_data = trav->names;
- conn->base_server = trav->server;
- return;
- }
-
- /* maybe there's a default server or wildcard name-based vhost
- * matching this port
- */
- port = conn->local_addr->port;
-
- trav = find_default_server(port);
- if (trav) {
- conn->vhost_lookup_data = trav->names;
- conn->base_server = trav->server;
- return;
- }
-
- /* otherwise we're stuck with just the main server
- * and no name-based vhosts
- */
- conn->vhost_lookup_data = NULL;
-}
diff --git a/srclib/.cvsignore b/srclib/.cvsignore
deleted file mode 100644
index e64da03211..0000000000
--- a/srclib/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-pth
-.deps
-openssl
-zlib
diff --git a/srclib/Makefile.in b/srclib/Makefile.in
deleted file mode 100644
index 1fb910ad32..0000000000
--- a/srclib/Makefile.in
+++ /dev/null
@@ -1,6 +0,0 @@
-
-SUBDIRS = pcre
-BUILD_SUBDIRS = $(AP_BUILD_SRCLIB_DIRS)
-CLEAN_SUBDIRS = $(AP_CLEAN_SRCLIB_DIRS)
-
-include $(top_builddir)/build/rules.mk
diff --git a/srclib/pcre/.cvsignore b/srclib/pcre/.cvsignore
deleted file mode 100644
index 2a103f227f..0000000000
--- a/srclib/pcre/.cvsignore
+++ /dev/null
@@ -1,30 +0,0 @@
-*.la
-*.lo
-.libs
-Makefile
-chartables.c
-config.h
-config.log
-config.status
-configure
-dftables
-dftables.exe
-Debug
-Release
-libtool
-pcre-config
-pcretest
-pgrep
-LibD
-LibR
-.deps
-pcre.h
-*.plg
-*.dep
-*.mak
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
-autom4te.cache
diff --git a/srclib/pcre/AUTHORS b/srclib/pcre/AUTHORS
deleted file mode 100644
index 832dddca45..0000000000
--- a/srclib/pcre/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2001 University of Cambridge
diff --git a/srclib/pcre/COPYING b/srclib/pcre/COPYING
deleted file mode 100644
index 8effa66492..0000000000
--- a/srclib/pcre/COPYING
+++ /dev/null
@@ -1,50 +0,0 @@
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2001 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software which you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
- then the terms of that licence shall supersede any condition above with
- which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
-
-End
diff --git a/srclib/pcre/ChangeLog b/srclib/pcre/ChangeLog
deleted file mode 100644
index a93f347f45..0000000000
--- a/srclib/pcre/ChangeLog
+++ /dev/null
@@ -1,790 +0,0 @@
-ChangeLog for PCRE
-------------------
-
-Version 3.0 02-Jan-02
----------------------
-
-1. A bit of extraneous text had somehow crept into the pcregrep documentation.
-
-2. If --disable-static was given, the building process failed when trying to
-build pcretest and pcregrep. (For some reason it was using libtool to compile
-them, which is not right, as they aren't part of the library.)
-
-
-Version 3.8 18-Dec-01
----------------------
-
-1. The experimental UTF-8 code was completely screwed up. It was packing the
-bytes in the wrong order. How dumb can you get?
-
-
-Version 3.7 29-Oct-01
----------------------
-
-1. In updating pcretest to check change 1 of version 3.6, I screwed up.
-This caused pcretest, when used on the test data, to segfault. Unfortunately,
-this didn't happen under Solaris 8, where I normally test things.
-
-2. The Makefile had to be changed to make it work on BSD systems, where 'make'
-doesn't seem to recognize that ./xxx and xxx are the same file. (This entry
-isn't in ChangeLog distributed with 3.7 because I forgot when I hastily made
-this fix an hour or so after the initial 3.7 release.)
-
-
-Version 3.6 23-Oct-01
----------------------
-
-1. Crashed with /(sens|respons)e and \1ibility/ and "sense and sensibility" if
-offsets passed as NULL with zero offset count.
-
-2. The config.guess and config.sub files had not been updated when I moved to
-the latest autoconf.
-
-
-Version 3.5 15-Aug-01
----------------------
-
-1. Added some missing #if !defined NOPOSIX conditionals in pcretest.c that
-had been forgotten.
-
-2. By using declared but undefined structures, we can avoid using "void"
-definitions in pcre.h while keeping the internal definitions of the structures
-private.
-
-3. The distribution is now built using autoconf 2.50 and libtool 1.4. From a
-user point of view, this means that both static and shared libraries are built
-by default, but this can be individually controlled. More of the work of
-handling this static/shared cases is now inside libtool instead of PCRE's make
-file.
-
-4. The pcretest utility is now installed along with pcregrep because it is
-useful for users (to test regexs) and by doing this, it automatically gets
-relinked by libtool. The documentation has been turned into a man page, so
-there are now .1, .txt, and .html versions in /doc.
-
-5. Upgrades to pcregrep:
- (i) Added long-form option names like gnu grep.
- (ii) Added --help to list all options with an explanatory phrase.
- (iii) Added -r, --recursive to recurse into sub-directories.
- (iv) Added -f, --file to read patterns from a file.
-
-6. pcre_exec() was referring to its "code" argument before testing that
-argument for NULL (and giving an error if it was NULL).
-
-7. Upgraded Makefile.in to allow for compiling in a different directory from
-the source directory.
-
-8. Tiny buglet in pcretest: when pcre_fullinfo() was called to retrieve the
-options bits, the pointer it was passed was to an int instead of to an unsigned
-long int. This mattered only on 64-bit systems.
-
-9. Fixed typo (3.4/1) in pcre.h again. Sigh. I had changed pcre.h (which is
-generated) instead of pcre.in, which it its source. Also made the same change
-in several of the .c files.
-
-10. A new release of gcc defines printf() as a macro, which broke pcretest
-because it had an ifdef in the middle of a string argument for printf(). Fixed
-by using separate calls to printf().
-
-11. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
-script, to force use of CR or LF instead of \n in the source. On non-Unix
-systems, the value can be set in config.h.
-
-12. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
-absolute limit. Changed the text of the error message to make this clear, and
-likewise updated the man page.
-
-13. The limit of 99 on the number of capturing subpatterns has been removed.
-The new limit is 65535, which I hope will not be a "real" limit.
-
-
-Version 3.4 22-Aug-00
----------------------
-
-1. Fixed typo in pcre.h: unsigned const char * changed to const unsigned char *.
-
-2. Diagnose condition (?(0) as an error instead of crashing on matching.
-
-
-Version 3.3 01-Aug-00
----------------------
-
-1. If an octal character was given, but the value was greater than \377, it
-was not getting masked to the least significant bits, as documented. This could
-lead to crashes in some systems.
-
-2. Perl 5.6 (if not earlier versions) accepts classes like [a-\d] and treats
-the hyphen as a literal. PCRE used to give an error; it now behaves like Perl.
-
-3. Added the functions pcre_free_substring() and pcre_free_substring_list().
-These just pass their arguments on to (pcre_free)(), but they are provided
-because some uses of PCRE bind it to non-C systems that can call its functions,
-but cannot call free() or pcre_free() directly.
-
-4. Add "make test" as a synonym for "make check". Corrected some comments in
-the Makefile.
-
-5. Add $(DESTDIR)/ in front of all the paths in the "install" target in the
-Makefile.
-
-6. Changed the name of pgrep to pcregrep, because Solaris has introduced a
-command called pgrep for grepping around the active processes.
-
-7. Added the beginnings of support for UTF-8 character strings.
-
-8. Arranged for the Makefile to pass over the settings of CC, CFLAGS, and
-RANLIB to ./ltconfig so that they are used by libtool. I think these are all
-the relevant ones. (AR is not passed because ./ltconfig does its own figuring
-out for the ar command.)
-
-
-Version 3.2 12-May-00
----------------------
-
-This is purely a bug fixing release.
-
-1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
-of ZA. This was just one example of several cases that could provoke this bug,
-which was introduced by change 9 of version 2.00. The code for breaking
-infinite loops after an iteration that matches an empty string was't working
-correctly.
-
-2. The pcretest program was not imitating Perl correctly for the pattern /a*/g
-when matched against abbab (for example). After matching an empty string, it
-wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this
-caused it to match further down the string than it should.
-
-3. The code contained an inclusion of sys/types.h. It isn't clear why this
-was there because it doesn't seem to be needed, and it causes trouble on some
-systems, as it is not a Standard C header. It has been removed.
-
-4. Made 4 silly changes to the source to avoid stupid compiler warnings that
-were reported on the Macintosh. The changes were from
-
- while ((c = *(++ptr)) != 0 && c != '\n');
-to
- while ((c = *(++ptr)) != 0 && c != '\n') ;
-
-Totally extraordinary, but if that's what it takes...
-
-5. PCRE is being used in one environment where neither memmove() nor bcopy() is
-available. Added HAVE_BCOPY and an autoconf test for it; if neither
-HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which
-assumes the way PCRE uses memmove() (always moving upwards).
-
-6. PCRE is being used in one environment where strchr() is not available. There
-was only one use in pcre.c, and writing it out to avoid strchr() probably gives
-faster code anyway.
-
-
-Version 3.2 12-May-00
----------------------
-
-This is purely a bug fixing release.
-
-1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
-of ZA. This was just one example of several cases that could provoke this bug,
-which was introduced by change 9 of version 2.00. The code for breaking
-infinite loops after an iteration that matches an empty string was't working
-correctly.
-
-2. The pcretest program was not imitating Perl correctly for the pattern /a*/g
-when matched against abbab (for example). After matching an empty string, it
-wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this
-caused it to match further down the string than it should.
-
-3. The code contained an inclusion of sys/types.h. It isn't clear why this
-was there because it doesn't seem to be needed, and it causes trouble on some
-systems, as it is not a Standard C header. It has been removed.
-
-4. Made 4 silly changes to the source to avoid stupid compiler warnings that
-were reported on the Macintosh. The changes were from
-
- while ((c = *(++ptr)) != 0 && c != '\n');
-to
- while ((c = *(++ptr)) != 0 && c != '\n') ;
-
-Totally extraordinary, but if that's what it takes...
-
-5. PCRE is being used in one environment where neither memmove() nor bcopy() is
-available. Added HAVE_BCOPY and an autoconf test for it; if neither
-HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which
-assumes the way PCRE uses memmove() (always moving upwards).
-
-6. PCRE is being used in one environment where strchr() is not available. There
-was only one use in pcre.c, and writing it out to avoid strchr() probably gives
-faster code anyway.
-
-
-Version 3.1 09-Feb-00
----------------------
-
-The only change in this release is the fixing of some bugs in Makefile.in for
-the "install" target:
-
-(1) It was failing to install pcreposix.h.
-
-(2) It was overwriting the pcre.3 man page with the pcreposix.3 man page.
-
-
-Version 3.0 01-Feb-00
----------------------
-
-1. Add support for the /+ modifier to perltest (to output $` like it does in
-pcretest).
-
-2. Add support for the /g modifier to perltest.
-
-3. Fix pcretest so that it behaves even more like Perl for /g when the pattern
-matches null strings.
-
-4. Fix perltest so that it doesn't do unwanted things when fed an empty
-pattern. Perl treats empty patterns specially - it reuses the most recent
-pattern, which is not what we want. Replace // by /(?#)/ in order to avoid this
-effect.
-
-5. The POSIX interface was broken in that it was just handing over the POSIX
-captured string vector to pcre_exec(), but (since release 2.00) PCRE has
-required a bigger vector, with some working space on the end. This means that
-the POSIX wrapper now has to get and free some memory, and copy the results.
-
-6. Added some simple autoconf support, placing the test data and the
-documentation in separate directories, re-organizing some of the
-information files, and making it build pcre-config (a GNU standard). Also added
-libtool support for building PCRE as a shared library, which is now the
-default.
-
-7. Got rid of the leading zero in the definition of PCRE_MINOR because 08 and
-09 are not valid octal constants. Single digits will be used for minor values
-less than 10.
-
-8. Defined REG_EXTENDED and REG_NOSUB as zero in the POSIX header, so that
-existing programs that set these in the POSIX interface can use PCRE without
-modification.
-
-9. Added a new function, pcre_fullinfo() with an extensible interface. It can
-return all that pcre_info() returns, plus additional data. The pcre_info()
-function is retained for compatibility, but is considered to be obsolete.
-
-10. Added experimental recursion feature (?R) to handle one common case that
-Perl 5.6 will be able to do with (?p{...}).
-
-11. Added support for POSIX character classes like [:alpha:], which Perl is
-adopting.
-
-
-Version 2.08 31-Aug-99
-----------------------
-
-1. When startoffset was not zero and the pattern began with ".*", PCRE was not
-trying to match at the startoffset position, but instead was moving forward to
-the next newline as if a previous match had failed.
-
-2. pcretest was not making use of PCRE_NOTEMPTY when repeating for /g and /G,
-and could get into a loop if a null string was matched other than at the start
-of the subject.
-
-3. Added definitions of PCRE_MAJOR and PCRE_MINOR to pcre.h so the version can
-be distinguished at compile time, and for completeness also added PCRE_DATE.
-
-5. Added Paul Sokolovsky's minor changes to make it easy to compile a Win32 DLL
-in GnuWin32 environments.
-
-
-Version 2.07 29-Jul-99
-----------------------
-
-1. The documentation is now supplied in plain text form and HTML as well as in
-the form of man page sources.
-
-2. C++ compilers don't like assigning (void *) values to other pointer types.
-In particular this affects malloc(). Although there is no problem in Standard
-C, I've put in casts to keep C++ compilers happy.
-
-3. Typo on pcretest.c; a cast of (unsigned char *) in the POSIX regexec() call
-should be (const char *).
-
-4. If NOPOSIX is defined, pcretest.c compiles without POSIX support. This may
-be useful for non-Unix systems who don't want to bother with the POSIX stuff.
-However, I haven't made this a standard facility. The documentation doesn't
-mention it, and the Makefile doesn't support it.
-
-5. The Makefile now contains an "install" target, with editable destinations at
-the top of the file. The pcretest program is not installed.
-
-6. pgrep -V now gives the PCRE version number and date.
-
-7. Fixed bug: a zero repetition after a literal string (e.g. /abcde{0}/) was
-causing the entire string to be ignored, instead of just the last character.
-
-8. If a pattern like /"([^\\"]+|\\.)*"/ is applied in the normal way to a
-non-matching string, it can take a very, very long time, even for strings of
-quite modest length, because of the nested recursion. PCRE now does better in
-some of these cases. It does this by remembering the last required literal
-character in the pattern, and pre-searching the subject to ensure it is present
-before running the real match. In other words, it applies a heuristic to detect
-some types of certain failure quickly, and in the above example, if presented
-with a string that has no trailing " it gives "no match" very quickly.
-
-9. A new runtime option PCRE_NOTEMPTY causes null string matches to be ignored;
-other alternatives are tried instead.
-
-
-Version 2.06 09-Jun-99
-----------------------
-
-1. Change pcretest's output for amount of store used to show just the code
-space, because the remainder (the data block) varies in size between 32-bit and
-64-bit systems.
-
-2. Added an extra argument to pcre_exec() to supply an offset in the subject to
-start matching at. This allows lookbehinds to work when searching for multiple
-occurrences in a string.
-
-3. Added additional options to pcretest for testing multiple occurrences:
-
- /+ outputs the rest of the string that follows a match
- /g loops for multiple occurrences, using the new startoffset argument
- /G loops for multiple occurrences by passing an incremented pointer
-
-4. PCRE wasn't doing the "first character" optimization for patterns starting
-with \b or \B, though it was doing it for other lookbehind assertions. That is,
-it wasn't noticing that a match for a pattern such as /\bxyz/ has to start with
-the letter 'x'. On long subject strings, this gives a significant speed-up.
-
-
-Version 2.05 21-Apr-99
-----------------------
-
-1. Changed the type of magic_number from int to long int so that it works
-properly on 16-bit systems.
-
-2. Fixed a bug which caused patterns starting with .* not to work correctly
-when the subject string contained newline characters. PCRE was assuming
-anchoring for such patterns in all cases, which is not correct because .* will
-not pass a newline unless PCRE_DOTALL is set. It now assumes anchoring only if
-DOTALL is set at top level; otherwise it knows that patterns starting with .*
-must be retried after every newline in the subject.
-
-
-Version 2.04 18-Feb-99
-----------------------
-
-1. For parenthesized subpatterns with repeats whose minimum was zero, the
-computation of the store needed to hold the pattern was incorrect (too large).
-If such patterns were nested a few deep, this could multiply and become a real
-problem.
-
-2. Added /M option to pcretest to show the memory requirement of a specific
-pattern. Made -m a synonym of -s (which does this globally) for compatibility.
-
-3. Subpatterns of the form (regex){n,m} (i.e. limited maximum) were being
-compiled in such a way that the backtracking after subsequent failure was
-pessimal. Something like (a){0,3} was compiled as (a)?(a)?(a)? instead of
-((a)((a)(a)?)?)? with disastrous performance if the maximum was of any size.
-
-
-Version 2.03 02-Feb-99
-----------------------
-
-1. Fixed typo and small mistake in man page.
-
-2. Added 4th condition (GPL supersedes if conflict) and created separate
-LICENCE file containing the conditions.
-
-3. Updated pcretest so that patterns such as /abc\/def/ work like they do in
-Perl, that is the internal \ allows the delimiter to be included in the
-pattern. Locked out the use of \ as a delimiter. If \ immediately follows
-the final delimiter, add \ to the end of the pattern (to test the error).
-
-4. Added the convenience functions for extracting substrings after a successful
-match. Updated pcretest to make it able to test these functions.
-
-
-Version 2.02 14-Jan-99
-----------------------
-
-1. Initialized the working variables associated with each extraction so that
-their saving and restoring doesn't refer to uninitialized store.
-
-2. Put dummy code into study.c in order to trick the optimizer of the IBM C
-compiler for OS/2 into generating correct code. Apparently IBM isn't going to
-fix the problem.
-
-3. Pcretest: the timing code wasn't using LOOPREPEAT for timing execution
-calls, and wasn't printing the correct value for compiling calls. Increased the
-default value of LOOPREPEAT, and the number of significant figures in the
-times.
-
-4. Changed "/bin/rm" in the Makefile to "-rm" so it works on Windows NT.
-
-5. Renamed "deftables" as "dftables" to get it down to 8 characters, to avoid
-a building problem on Windows NT with a FAT file system.
-
-
-Version 2.01 21-Oct-98
-----------------------
-
-1. Changed the API for pcre_compile() to allow for the provision of a pointer
-to character tables built by pcre_maketables() in the current locale. If NULL
-is passed, the default tables are used.
-
-
-Version 2.00 24-Sep-98
-----------------------
-
-1. Since the (>?) facility is in Perl 5.005, don't require PCRE_EXTRA to enable
-it any more.
-
-2. Allow quantification of (?>) groups, and make it work correctly.
-
-3. The first character computation wasn't working for (?>) groups.
-
-4. Correct the implementation of \Z (it is permitted to match on the \n at the
-end of the subject) and add 5.005's \z, which really does match only at the
-very end of the subject.
-
-5. Remove the \X "cut" facility; Perl doesn't have it, and (?> is neater.
-
-6. Remove the ability to specify CASELESS, MULTILINE, DOTALL, and
-DOLLAR_END_ONLY at runtime, to make it possible to implement the Perl 5.005
-localized options. All options to pcre_study() were also removed.
-
-7. Add other new features from 5.005:
-
- $(?<= positive lookbehind
- $(?<! negative lookbehind
- (?imsx-imsx) added the unsetting capability
- such a setting is global if at outer level; local otherwise
- (?imsx-imsx:) non-capturing groups with option setting
- (?(cond)re|re) conditional pattern matching
-
- A backreference to itself in a repeated group matches the previous
- captured string.
-
-8. General tidying up of studying (both automatic and via "study")
-consequential on the addition of new assertions.
-
-9. As in 5.005, unlimited repeated groups that could match an empty substring
-are no longer faulted at compile time. Instead, the loop is forcibly broken at
-runtime if any iteration does actually match an empty substring.
-
-10. Include the RunTest script in the distribution.
-
-11. Added tests from the Perl 5.005_02 distribution. This showed up a few
-discrepancies, some of which were old and were also with respect to 5.004. They
-have now been fixed.
-
-
-Version 1.09 28-Apr-98
-----------------------
-
-1. A negated single character class followed by a quantifier with a minimum
-value of one (e.g. [^x]{1,6} ) was not compiled correctly. This could lead to
-program crashes, or just wrong answers. This did not apply to negated classes
-containing more than one character, or to minima other than one.
-
-
-Version 1.08 27-Mar-98
-----------------------
-
-1. Add PCRE_UNGREEDY to invert the greediness of quantifiers.
-
-2. Add (?U) and (?X) to set PCRE_UNGREEDY and PCRE_EXTRA respectively. The
-latter must appear before anything that relies on it in the pattern.
-
-
-Version 1.07 16-Feb-98
-----------------------
-
-1. A pattern such as /((a)*)*/ was not being diagnosed as in error (unlimited
-repeat of a potentially empty string).
-
-
-Version 1.06 23-Jan-98
-----------------------
-
-1. Added Markus Oberhumer's little patches for C++.
-
-2. Literal strings longer than 255 characters were broken.
-
-
-Version 1.05 23-Dec-97
-----------------------
-
-1. Negated character classes containing more than one character were failing if
-PCRE_CASELESS was set at run time.
-
-
-Version 1.04 19-Dec-97
-----------------------
-
-1. Corrected the man page, where some "const" qualifiers had been omitted.
-
-2. Made debugging output print "{0,xxx}" instead of just "{,xxx}" to agree with
-input syntax.
-
-3. Fixed memory leak which occurred when a regex with back references was
-matched with an offsets vector that wasn't big enough. The temporary memory
-that is used in this case wasn't being freed if the match failed.
-
-4. Tidied pcretest to ensure it frees memory that it gets.
-
-5. Temporary memory was being obtained in the case where the passed offsets
-vector was exactly big enough.
-
-6. Corrected definition of offsetof() from change 5 below.
-
-7. I had screwed up change 6 below and broken the rules for the use of
-setjmp(). Now fixed.
-
-
-Version 1.03 18-Dec-97
-----------------------
-
-1. A erroneous regex with a missing opening parenthesis was correctly
-diagnosed, but PCRE attempted to access brastack[-1], which could cause crashes
-on some systems.
-
-2. Replaced offsetof(real_pcre, code) by offsetof(real_pcre, code[0]) because
-it was reported that one broken compiler failed on the former because "code" is
-also an independent variable.
-
-3. The erroneous regex a[]b caused an array overrun reference.
-
-4. A regex ending with a one-character negative class (e.g. /[^k]$/) did not
-fail on data ending with that character. (It was going on too far, and checking
-the next character, typically a binary zero.) This was specific to the
-optimized code for single-character negative classes.
-
-5. Added a contributed patch from the TIN world which does the following:
-
- + Add an undef for memmove, in case the the system defines a macro for it.
-
- + Add a definition of offsetof(), in case there isn't one. (I don't know
- the reason behind this - offsetof() is part of the ANSI standard - but
- it does no harm).
-
- + Reduce the ifdef's in pcre.c using macro DPRINTF, thereby eliminating
- most of the places where whitespace preceded '#'. I have given up and
- allowed the remaining 2 cases to be at the margin.
-
- + Rename some variables in pcre to eliminate shadowing. This seems very
- pedantic, but does no harm, of course.
-
-6. Moved the call to setjmp() into its own function, to get rid of warnings
-from gcc -Wall, and avoided calling it at all unless PCRE_EXTRA is used.
-
-7. Constructs such as \d{8,} were compiling into the equivalent of
-\d{8}\d{0,65527} instead of \d{8}\d* which didn't make much difference to the
-outcome, but in this particular case used more store than had been allocated,
-which caused the bug to be discovered because it threw up an internal error.
-
-8. The debugging code in both pcre and pcretest for outputting the compiled
-form of a regex was going wrong in the case of back references followed by
-curly-bracketed repeats.
-
-
-Version 1.02 12-Dec-97
-----------------------
-
-1. Typos in pcre.3 and comments in the source fixed.
-
-2. Applied a contributed patch to get rid of places where it used to remove
-'const' from variables, and fixed some signed/unsigned and uninitialized
-variable warnings.
-
-3. Added the "runtest" target to Makefile.
-
-4. Set default compiler flag to -O2 rather than just -O.
-
-
-Version 1.01 19-Nov-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeat of empty string for patterns
-like /([ab]*)*/, that is, for classes with more than one character in them.
-
-2. Likewise, it wasn't diagnosing patterns with "once-only" subpatterns, such
-as /((?>a*))*/ (a PCRE_EXTRA facility).
-
-
-Version 1.00 18-Nov-97
-----------------------
-
-1. Added compile-time macros to support systems such as SunOS4 which don't have
-memmove() or strerror() but have other things that can be used instead.
-
-2. Arranged that "make clean" removes the executables.
-
-
-Version 0.99 27-Oct-97
-----------------------
-
-1. Fixed bug in code for optimizing classes with only one character. It was
-initializing a 32-byte map regardless, which could cause it to run off the end
-of the memory it had got.
-
-2. Added, conditional on PCRE_EXTRA, the proposed (?>REGEX) construction.
-
-
-Version 0.98 22-Oct-97
-----------------------
-
-1. Fixed bug in code for handling temporary memory usage when there are more
-back references than supplied space in the ovector. This could cause segfaults.
-
-
-Version 0.97 21-Oct-97
-----------------------
-
-1. Added the \X "cut" facility, conditional on PCRE_EXTRA.
-
-2. Optimized negated single characters not to use a bit map.
-
-3. Brought error texts together as macro definitions; clarified some of them;
-fixed one that was wrong - it said "range out of order" when it meant "invalid
-escape sequence".
-
-4. Changed some char * arguments to const char *.
-
-5. Added PCRE_NOTBOL and PCRE_NOTEOL (from POSIX).
-
-6. Added the POSIX-style API wrapper in pcreposix.a and testing facilities in
-pcretest.
-
-
-Version 0.96 16-Oct-97
-----------------------
-
-1. Added a simple "pgrep" utility to the distribution.
-
-2. Fixed an incompatibility with Perl: "{" is now treated as a normal character
-unless it appears in one of the precise forms "{ddd}", "{ddd,}", or "{ddd,ddd}"
-where "ddd" means "one or more decimal digits".
-
-3. Fixed serious bug. If a pattern had a back reference, but the call to
-pcre_exec() didn't supply a large enough ovector to record the related
-identifying subpattern, the match always failed. PCRE now remembers the number
-of the largest back reference, and gets some temporary memory in which to save
-the offsets during matching if necessary, in order to ensure that
-backreferences always work.
-
-4. Increased the compatibility with Perl in a number of ways:
-
- (a) . no longer matches \n by default; an option PCRE_DOTALL is provided
- to request this handling. The option can be set at compile or exec time.
-
- (b) $ matches before a terminating newline by default; an option
- PCRE_DOLLAR_ENDONLY is provided to override this (but not in multiline
- mode). The option can be set at compile or exec time.
-
- (c) The handling of \ followed by a digit other than 0 is now supposed to be
- the same as Perl's. If the decimal number it represents is less than 10
- or there aren't that many previous left capturing parentheses, an octal
- escape is read. Inside a character class, it's always an octal escape,
- even if it is a single digit.
-
- (d) An escaped but undefined alphabetic character is taken as a literal,
- unless PCRE_EXTRA is set. Currently this just reserves the remaining
- escapes.
-
- (e) {0} is now permitted. (The previous item is removed from the compiled
- pattern).
-
-5. Changed all the names of code files so that the basic parts are no longer
-than 10 characters, and abolished the teeny "globals.c" file.
-
-6. Changed the handling of character classes; they are now done with a 32-byte
-bit map always.
-
-7. Added the -d and /D options to pcretest to make it possible to look at the
-internals of compilation without having to recompile pcre.
-
-
-Version 0.95 23-Sep-97
-----------------------
-
-1. Fixed bug in pre-pass concerning escaped "normal" characters such as \x5c or
-\x20 at the start of a run of normal characters. These were being treated as
-real characters, instead of the source characters being re-checked.
-
-
-Version 0.94 18-Sep-97
-----------------------
-
-1. The functions are now thread-safe, with the caveat that the global variables
-containing pointers to malloc() and free() or alternative functions are the
-same for all threads.
-
-2. Get pcre_study() to generate a bitmap of initial characters for non-
-anchored patterns when this is possible, and use it if passed to pcre_exec().
-
-
-Version 0.93 15-Sep-97
-----------------------
-
-1. /(b)|(:+)/ was computing an incorrect first character.
-
-2. Add pcre_study() to the API and the passing of pcre_extra to pcre_exec(),
-but not actually doing anything yet.
-
-3. Treat "-" characters in classes that cannot be part of ranges as literals,
-as Perl does (e.g. [-az] or [az-]).
-
-4. Set the anchored flag if a branch starts with .* or .*? because that tests
-all possible positions.
-
-5. Split up into different modules to avoid including unneeded functions in a
-compiled binary. However, compile and exec are still in one module. The "study"
-function is split off.
-
-6. The character tables are now in a separate module whose source is generated
-by an auxiliary program - but can then be edited by hand if required. There are
-now no calls to isalnum(), isspace(), isdigit(), isxdigit(), tolower() or
-toupper() in the code.
-
-7. Turn the malloc/free funtions variables into pcre_malloc and pcre_free and
-make them global. Abolish the function for setting them, as the caller can now
-set them directly.
-
-
-Version 0.92 11-Sep-97
-----------------------
-
-1. A repeat with a fixed maximum and a minimum of 1 for an ordinary character
-(e.g. /a{1,3}/) was broken (I mis-optimized it).
-
-2. Caseless matching was not working in character classes if the characters in
-the pattern were in upper case.
-
-3. Make ranges like [W-c] work in the same way as Perl for caseless matching.
-
-4. Make PCRE_ANCHORED public and accept as a compile option.
-
-5. Add an options word to pcre_exec() and accept PCRE_ANCHORED and
-PCRE_CASELESS at run time. Add escapes \A and \I to pcretest to cause it to
-pass them.
-
-6. Give an error if bad option bits passed at compile or run time.
-
-7. Add PCRE_MULTILINE at compile and exec time, and (?m) as well. Add \M to
-pcretest to cause it to pass that flag.
-
-8. Add pcre_info(), to get the number of identifying subpatterns, the stored
-options, and the first character, if set.
-
-9. Recognize C+ or C{n,m} where n >= 1 as providing a fixed starting character.
-
-
-Version 0.91 10-Sep-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeats of subpatterns that could
-match the empty string as in /(a*)*/. It was looping and ultimately crashing.
-
-2. PCRE was looping on encountering an indefinitely repeated back reference to
-a subpattern that had matched an empty string, e.g. /(a|)\1*/. It now does what
-Perl does - treats the match as successful.
-
-****
diff --git a/srclib/pcre/INSTALL b/srclib/pcre/INSTALL
deleted file mode 100644
index 08802812de..0000000000
--- a/srclib/pcre/INSTALL
+++ /dev/null
@@ -1,185 +0,0 @@
-Basic Installation
-==================
-
- These are generic installation instructions that apply to systems that
-can run the `configure' shell script - Unix systems and any that imitate
-it. They are not specific to PCRE. There are PCRE-specific instructions
-for non-Unix systems in the file NON-UNIX-USE.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. You can give `configure'
-initial values for variables by setting them in the environment. Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory. After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
- CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
- If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
- Use and save the results of the tests in FILE instead of
- `./config.cache'. Set FILE to `/dev/null' to disable caching, for
- debugging `configure'.
-
-`--help'
- Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`--version'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
diff --git a/srclib/pcre/LICENCE b/srclib/pcre/LICENCE
deleted file mode 100644
index 8effa66492..0000000000
--- a/srclib/pcre/LICENCE
+++ /dev/null
@@ -1,50 +0,0 @@
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2001 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission. In practice, this means that if you use
- PCRE in software which you distribute to others, commercially or
- otherwise, you must put a sentence like this
-
- Regular expression support is provided by the PCRE library package,
- which is open source software, written by Philip Hazel, and copyright
- by the University of Cambridge, England.
-
- somewhere reasonably visible in your documentation and in any relevant
- files or online help data or similar. A reference to the ftp site for
- the source, that is, to
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
- should also be given in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
- then the terms of that licence shall supersede any condition above with
- which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
-
-End
diff --git a/srclib/pcre/Makefile.in b/srclib/pcre/Makefile.in
deleted file mode 100644
index 357ce6e2a1..0000000000
--- a/srclib/pcre/Makefile.in
+++ /dev/null
@@ -1,20 +0,0 @@
-LTLIBRARY_NAME = libpcre.la
-LTLIBRARY_SOURCES = maketables.c get.c study.c pcre.c pcreposix.c
-
-CLEAN_TARGETS = dftables chartables.c
-DISTCLEAN_TARGETS = pcre.h pcre-config config.h config.log config.status $(CLEAN_TARGETS)
-
-include $(top_srcdir)/build/ltlib.mk
-
-config.h:
- touch $@
-
-$(LTLIBRARY_OBJECTS) dftables.lo: config.h
-
-dftables: dftables.lo
- $(LINK) $(EXTRA_LDFLAGS) dftables.lo $(EXTRA_LIBS)
-
-$(srcdir)/chartables.c: dftables
- ./dftables > $@
-
-pcre.lo: $(srcdir)/chartables.c
diff --git a/srclib/pcre/NEWS b/srclib/pcre/NEWS
deleted file mode 100644
index 27866b68a2..0000000000
--- a/srclib/pcre/NEWS
+++ /dev/null
@@ -1,85 +0,0 @@
-News about PCRE releases
-------------------------
-
-Release 3.5 15-Aug-01
----------------------
-
-1. The configuring system has been upgraded to use later versions of autoconf
-and libtool. By default it builds both a shared and a static library if the OS
-supports it. You can use --disable-shared or --disable-static on the configure
-command if you want only one of them.
-
-2. The pcretest utility is now installed along with pcregrep because it is
-useful for users (to test regexs) and by doing this, it automatically gets
-relinked by libtool. The documentation has been turned into a man page, so
-there are now .1, .txt, and .html versions in /doc.
-
-3. Upgrades to pcregrep:
- (i) Added long-form option names like gnu grep.
- (ii) Added --help to list all options with an explanatory phrase.
- (iii) Added -r, --recursive to recurse into sub-directories.
- (iv) Added -f, --file to read patterns from a file.
-
-4. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
-script, to force use of CR or LF instead of \n in the source. On non-Unix
-systems, the value can be set in config.h.
-
-5. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
-absolute limit. Changed the text of the error message to make this clear, and
-likewise updated the man page.
-
-6. The limit of 99 on the number of capturing subpatterns has been removed.
-The new limit is 65535, which I hope will not be a "real" limit.
-
-
-Release 3.3 01-Aug-00
----------------------
-
-There is some support for UTF-8 character strings. This is incomplete and
-experimental. The documentation describes what is and what is not implemented.
-Otherwise, this is just a bug-fixing release.
-
-
-Release 3.0 01-Feb-00
----------------------
-
-1. A "configure" script is now used to configure PCRE for Unix systems. It
-builds a Makefile, a config.h file, and the pcre-config script.
-
-2. PCRE is built as a shared library by default.
-
-3. There is support for POSIX classes such as [:alpha:].
-
-5. There is an experimental recursion feature.
-
-----------------------------------------------------------------------------
- IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00
-
-Please note that there has been a change in the API such that a larger
-ovector is required at matching time, to provide some additional workspace.
-The new man page has details. This change was necessary in order to support
-some of the new functionality in Perl 5.005.
-
- IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00
-
-Another (I hope this is the last!) change has been made to the API for the
-pcre_compile() function. An additional argument has been added to make it
-possible to pass over a pointer to character tables built in the current
-locale by pcre_maketables(). To use the default tables, this new arguement
-should be passed as NULL.
-
- IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05
-
-Yet another (and again I hope this really is the last) change has been made
-to the API for the pcre_exec() function. An additional argument has been
-added to make it possible to start the match other than at the start of the
-subject string. This is important if there are lookbehinds. The new man
-page has the details, but you just want to convert existing programs, all
-you need to do is to stick in a new fifth argument to pcre_exec(), with a
-value of zero. For example, change
-
- pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize)
-to
- pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize)
-
-****
diff --git a/srclib/pcre/NON-UNIX-USE b/srclib/pcre/NON-UNIX-USE
deleted file mode 100644
index 14b1cc0d05..0000000000
--- a/srclib/pcre/NON-UNIX-USE
+++ /dev/null
@@ -1,53 +0,0 @@
-Compiling PCRE on non-Unix systems
-----------------------------------
-
-If you want to compile PCRE for a non-Unix system, note that it consists
-entirely of code written in Standard C, and so should compile successfully
-on any machine with a Standard C compiler and library, using normal compiling
-commands to do the following:
-
-(1) Copy or rename the file config.in as config.h, and change the macros that
-define HAVE_STRERROR and HAVE_MEMMOVE to define them as 1 rather than 0.
-Unfortunately, because of the way Unix autoconf works, the default setting has
-to be 0. You may also want to make changes to other macros in config.h. In
-particular, if you want to force a specific value for newline, you can define
-the NEWLINE macro. The default is to use '\n', thereby using whatever value
-your compiler gives to '\n'.
-
-(2) Copy or rename the file pcre.in as pcre.h, and change the macro definitions
-for PCRE_MAJOR, PCRE_MINOR, and PCRE_DATE near its start to the values set in
-configure.in.
-
-(3) Compile dftables.c as a stand-alone program, and then run it with
-the standard output sent to chartables.c. This generates a set of standard
-character tables.
-
-(4) Compile maketables.c, get.c, study.c and pcre.c and link them all
-together into an object library in whichever form your system keeps such
-libraries. This is the pcre library (chartables.c gets included by means of an
-#include directive).
-
-(5) Similarly, compile pcreposix.c and link it as the pcreposix library.
-
-(6) Compile the test program pcretest.c. This needs the functions in the
-pcre and pcreposix libraries when linking.
-
-(7) Run pcretest on the testinput files in the testdata directory, and check
-that the output matches the corresponding testoutput files. You must use the
--i option when checking testinput2.
-
-If you have a system without "configure" but where you can use a Makefile, edit
-Makefile.in to create Makefile, substituting suitable values for the variables
-at the head of the file.
-
-Some help in building a Win32 DLL of PCRE in GnuWin32 environments was
-contributed by Paul.Sokolovsky@technologist.com. These environments are
-Mingw32 (http://www.xraylith.wisc.edu/~khan/software/gnu-win32/) and
-CygWin (http://sourceware.cygnus.com/cygwin/). Paul comments:
-
- For CygWin, set CFLAGS=-mno-cygwin, and do 'make dll'. You'll get
- pcre.dll (containing pcreposix also), libpcre.dll.a, and dynamically
- linked pgrep and pcretest. If you have /bin/sh, run RunTest (three
- main test go ok, locale not supported).
-
-****
diff --git a/srclib/pcre/NWGNUmakefile b/srclib/pcre/NWGNUmakefile
deleted file mode 100644
index e87a5effe7..0000000000
--- a/srclib/pcre/NWGNUmakefile
+++ /dev/null
@@ -1,267 +0,0 @@
-#
-# NWGNUmakefile for DfTables.nlm (Apache2)
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(APR_WORK)\build\NWGNUhead.inc
-
-PCRE = $(AP_WORK)/srclib/pcre
-
-#
-# build this level's files
-
-FILES_prebuild_headers = \
- $(PCRE)/config.h \
- $(PCRE)/pcre.h \
- $(EOLIST)
-
-$(PCRE)/%.h: $(subst /,\,$(PCRE))\%.hw
- @echo Creating $(subst /,\,$@)
- copy $< $(subst /,\,$(PCRE))\$(@F)
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(AP_WORK)/os/netware \
- $(APR_WORK)/include/arch/netware \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = dftables
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Generate character tables
-
-#$(FILES_prebuild_headers)
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = dftables
-
-#
-# If this is specified, it will override VERSION value in
-# $(APR_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION = 1,0,0
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =_LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =_LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(APR)/misc/netware/apr.xdc. XDCData can
-# be disabled by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-$(OBJDIR)/dftables.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(FILES_prebuild_headers) \
- $(OBJDIR)/dftables.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- Libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(APR_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(APR_WORK)\build\NWGNUtail.inc
-
-# End of NWGNUmakefile for DfTables.nlm (Apache2)
diff --git a/srclib/pcre/README b/srclib/pcre/README
deleted file mode 100644
index 7557374791..0000000000
--- a/srclib/pcre/README
+++ /dev/null
@@ -1,307 +0,0 @@
-README file for PCRE (Perl-compatible regular expression library)
------------------------------------------------------------------
-
-The latest release of PCRE is always available from
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
-
-Please read the NEWS file if you are upgrading from a previous release.
-
-PCRE has its own native API, but a set of "wrapper" functions that are based on
-the POSIX API are also supplied in the library libpcreposix. Note that this
-just provides a POSIX calling interface to PCRE: the regular expressions
-themselves still follow Perl syntax and semantics. The header file
-for the POSIX-style functions is called pcreposix.h. The official POSIX name is
-regex.h, but I didn't want to risk possible problems with existing files of
-that name by distributing it that way. To use it with an existing program that
-uses the POSIX API, it will have to be renamed or pointed at by a link.
-
-
-Contributions by users of PCRE
-------------------------------
-
-You can find contributions from PCRE users in the directory
-
- ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
-
-where there is also a README file giving brief descriptions of what they are.
-Several of them provide support for compiling PCRE on various flavours of
-Windows systems (I myself do not use Windows). Some are complete in themselves;
-others are pointers to URLs containing relevant files.
-
-
-Building PCRE on a Unix system
-------------------------------
-
-To build PCRE on a Unix system, first run the "configure" command from the PCRE
-distribution directory, with your current directory set to the directory where
-you want the files to be created. This command is a standard GNU "autoconf"
-configuration script, for which generic instructions are supplied in INSTALL.
-
-Most commonly, people build PCRE within its own distribution directory, and in
-this case, on many systems, just running "./configure" is sufficient, but the
-usual methods of changing standard defaults are available. For example,
-
-CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
-
-specifies that the C compiler should be run with the flags '-O2 -Wall' instead
-of the default, and that "make install" should install PCRE under /opt/local
-instead of the default /usr/local.
-
-If you want to build in a different directory, just run "configure" with that
-directory as current. For example, suppose you have unpacked the PCRE source
-into /source/pcre/pcre-xxx, but you want to build it in /build/pcre/pcre-xxx:
-
-cd /build/pcre/pcre-xxx
-/source/pcre/pcre-xxx/configure
-
-If you want to make use of the experimential, incomplete support for UTF-8
-character strings in PCRE, you must add --enable-utf8 to the "configure"
-command. Without it, the code for handling UTF-8 is not included in the
-library. (Even when included, it still has to be enabled by an option at run
-time.)
-
-The "configure" script builds five files:
-
-. libtool is a script that builds shared and/or static libraries
-. Makefile is built by copying Makefile.in and making substitutions.
-. config.h is built by copying config.in and making substitutions.
-. pcre-config is built by copying pcre-config.in and making substitutions.
-. RunTest is a script for running tests
-
-Once "configure" has run, you can run "make". It builds two libraries called
-libpcre and libpcreposix, a test program called pcretest, and the pcregrep
-command. You can use "make install" to copy these, the public header files
-pcre.h and pcreposix.h, and the man pages to appropriate live directories on
-your system, in the normal way.
-
-Running "make install" also installs the command pcre-config, which can be used
-to recall information about the PCRE configuration and installation. For
-example,
-
- pcre-config --version
-
-prints the version number, and
-
- pcre-config --libs
-
-outputs information about where the library is installed. This command can be
-included in makefiles for programs that use PCRE, saving the programmer from
-having to remember too many details.
-
-There is one esoteric feature that is controlled by "configure". It concerns
-the character value used for "newline", and is something that you probably do
-not want to change on a Unix system. The default is to use whatever value your
-compiler gives to '\n'. By using --enable-newline-is-cr or
---enable-newline-is-lf you can force the value to be CR (13) or LF (10) if you
-really want to.
-
-
-Shared libraries on Unix systems
---------------------------------
-
-The default distribution builds PCRE as two shared libraries and two static
-libraries, as long as the operating system supports shared libraries. Shared
-library support relies on the "libtool" script which is built as part of the
-"configure" process.
-
-The libtool script is used to compile and link both shared and static
-libraries. They are placed in a subdirectory called .libs when they are newly
-built. The programs pcretest and pcregrep are built to use these uninstalled
-libraries (by means of wrapper scripts in the case of shared libraries). When
-you use "make install" to install shared libraries, pcregrep and pcretest are
-automatically re-built to use the newly installed shared libraries before being
-installed themselves. However, the versions left in the source directory still
-use the uninstalled libraries.
-
-To build PCRE using static libraries only you must use --disable-shared when
-configuring it. For example
-
-./configure --prefix=/usr/gnu --disable-shared
-
-Then run "make" in the usual way. Similarly, you can use --disable-static to
-build only shared libraries.
-
-
-Building on non-Unix systems
-----------------------------
-
-For a non-Unix system, read the comments in the file NON-UNIX-USE. PCRE has
-been compiled on Windows systems and on Macintoshes, but I don't know the
-details because I don't use those systems. It should be straightforward to
-build PCRE on any system that has a Standard C compiler, because it uses only
-Standard C functions.
-
-
-Testing PCRE
-------------
-
-To test PCRE on a Unix system, run the RunTest script that is created by the
-configuring process. (This can also be run by "make runtest", "make check", or
-"make test".) For other systems, see the instruction in NON-UNIX-USE.
-
-The script runs the pcretest test program (which is documented in the doc
-directory) on each of the testinput files (in the testdata directory) in turn,
-and compares the output with the contents of the corresponding testoutput file.
-A file called testtry is used to hold the output from pcretest. To run pcretest
-on just one of the test files, give its number as an argument to RunTest, for
-example:
-
- RunTest 3
-
-The first and third test files can also be fed directly into the perltest
-script to check that Perl gives the same results. The third file requires the
-additional features of release 5.005, which is why it is kept separate from the
-main test input, which needs only Perl 5.004. In the long run, when 5.005 (or
-higher) is widespread, these two test files may get amalgamated.
-
-The second set of tests check pcre_fullinfo(), pcre_info(), pcre_study(),
-pcre_copy_substring(), pcre_get_substring(), pcre_get_substring_list(), error
-detection, and run-time flags that are specific to PCRE, as well as the POSIX
-wrapper API. It also uses the debugging flag to check some of the internals of
-pcre_compile().
-
-If you build PCRE with a locale setting that is not the standard C locale, the
-character tables may be different (see next paragraph). In some cases, this may
-cause failures in the second set of tests. For example, in a locale where the
-isprint() function yields TRUE for characters in the range 128-255, the use of
-[:isascii:] inside a character class defines a different set of characters, and
-this shows up in this test as a difference in the compiled code, which is being
-listed for checking. Where the comparison test output contains [\x00-\x7f] the
-test will contain [\x00-\xff], and similarly in some other cases. This is not a
-bug in PCRE.
-
-The fourth set of tests checks pcre_maketables(), the facility for building a
-set of character tables for a specific locale and using them instead of the
-default tables. The tests make use of the "fr" (French) locale. Before running
-the test, the script checks for the presence of this locale by running the
-"locale" command. If that command fails, or if it doesn't include "fr" in the
-list of available locales, the fourth test cannot be run, and a comment is
-output to say why. If running this test produces instances of the error
-
- ** Failed to set locale "fr"
-
-in the comparison output, it means that locale is not available on your system,
-despite being listed by "locale". This does not mean that PCRE is broken.
-
-The fifth test checks the experimental, incomplete UTF-8 support. It is not run
-automatically unless PCRE is built with UTF-8 support. This file can be fed
-directly to the perltest8 script, which requires Perl 5.6 or higher. The sixth
-file tests internal UTF-8 features of PCRE that are not relevant to Perl.
-
-
-Character tables
-----------------
-
-PCRE uses four tables for manipulating and identifying characters. The final
-argument of the pcre_compile() function is a pointer to a block of memory
-containing the concatenated tables. A call to pcre_maketables() can be used to
-generate a set of tables in the current locale. If the final argument for
-pcre_compile() is passed as NULL, a set of default tables that is built into
-the binary is used.
-
-The source file called chartables.c contains the default set of tables. This is
-not supplied in the distribution, but is built by the program dftables
-(compiled from dftables.c), which uses the ANSI C character handling functions
-such as isalnum(), isalpha(), isupper(), islower(), etc. to build the table
-sources. This means that the default C locale which is set for your system will
-control the contents of these default tables. You can change the default tables
-by editing chartables.c and then re-building PCRE. If you do this, you should
-probably also edit Makefile to ensure that the file doesn't ever get
-re-generated.
-
-The first two 256-byte tables provide lower casing and case flipping functions,
-respectively. The next table consists of three 32-byte bit maps which identify
-digits, "word" characters, and white space, respectively. These are used when
-building 32-byte bit maps that represent character classes.
-
-The final 256-byte table has bits indicating various character types, as
-follows:
-
- 1 white space character
- 2 letter
- 4 decimal digit
- 8 hexadecimal digit
- 16 alphanumeric or '_'
- 128 regular expression metacharacter or binary zero
-
-You should not alter the set of characters that contain the 128 bit, as that
-will cause PCRE to malfunction.
-
-
-Manifest
---------
-
-The distribution should contain the following files:
-
-(A) The actual source files of the PCRE library functions and their
- headers:
-
- dftables.c auxiliary program for building chartables.c
- get.c )
- maketables.c )
- study.c ) source of
- pcre.c ) the functions
- pcreposix.c )
- pcre.in "source" for the header for the external API; pcre.h
- is built from this by "configure"
- pcreposix.h header for the external POSIX wrapper API
- internal.h header for internal use
- config.in template for config.h, which is built by configure
-
-(B) Auxiliary files:
-
- AUTHORS information about the author of PCRE
- ChangeLog log of changes to the code
- INSTALL generic installation instructions
- LICENCE conditions for the use of PCRE
- COPYING the same, using GNU's standard name
- Makefile.in template for Unix Makefile, which is built by configure
- NEWS important changes in this release
- NON-UNIX-USE notes on building PCRE on non-Unix systems
- README this file
- RunTest.in template for a Unix shell script for running tests
- config.guess ) files used by libtool,
- config.sub ) used only when building a shared library
- configure a configuring shell script (built by autoconf)
- configure.in the autoconf input used to build configure
- doc/Tech.Notes notes on the encoding
- doc/pcre.3 man page source for the PCRE functions
- doc/pcre.html HTML version
- doc/pcre.txt plain text version
- doc/pcreposix.3 man page source for the POSIX wrapper API
- doc/pcreposix.html HTML version
- doc/pcreposix.txt plain text version
- doc/pcretest.txt documentation of test program
- doc/perltest.txt documentation of Perl test program
- doc/pcregrep.1 man page source for the pcregrep utility
- doc/pcregrep.html HTML version
- doc/pcregrep.txt plain text version
- install-sh a shell script for installing files
- ltmain.sh file used to build a libtool script
- pcretest.c comprehensive test program
- pcredemo.c simple demonstration of coding calls to PCRE
- perltest Perl test program
- perltest8 Perl test program for UTF-8 tests
- pcregrep.c source of a grep utility that uses PCRE
- pcre-config.in source of script which retains PCRE information
- testdata/testinput1 test data, compatible with Perl 5.004 and 5.005
- testdata/testinput2 test data for error messages and non-Perl things
- testdata/testinput3 test data, compatible with Perl 5.005
- testdata/testinput4 test data for locale-specific tests
- testdata/testinput5 test data for UTF-8 tests compatible with Perl 5.6
- testdata/testinput6 test data for other UTF-8 tests
- testdata/testoutput1 test results corresponding to testinput1
- testdata/testoutput2 test results corresponding to testinput2
- testdata/testoutput3 test results corresponding to testinput3
- testdata/testoutput4 test results corresponding to testinput4
- testdata/testoutput5 test results corresponding to testinput5
- testdata/testoutput6 test results corresponding to testinput6
-
-(C) Auxiliary files for Win32 DLL
-
- dll.mk
- pcre.def
-
-Philip Hazel <ph10@cam.ac.uk>
-August 2001
diff --git a/srclib/pcre/RunTest b/srclib/pcre/RunTest
deleted file mode 100755
index 85eeb6245e..0000000000
--- a/srclib/pcre/RunTest
+++ /dev/null
@@ -1,94 +0,0 @@
-#! /bin/sh
-
-# Run PCRE tests
-
-cf=diff
-
-# Select which tests to run; if no selection, run all
-
-do1=no
-do2=no
-do3=no
-do4=no
-
-while [ $# -gt 0 ] ; do
- case $1 in
- 1) do1=yes;;
- 2) do2=yes;;
- 3) do3=yes;;
- 4) do4=yes;;
- *) echo "Unknown test number $1"; exit 1;;
- esac
- shift
-done
-
-if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no ] ; then
- do1=yes
- do2=yes
- do3=yes
- do4=yes
-fi
-
-# Primary test, Perl-compatible
-
-if [ $do1 = yes ] ; then
- echo "Testing main functionality (Perl compatible)"
- ./pcretest testdata/testinput1 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput1
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-# PCRE tests that are not Perl-compatible - API & error tests, mostly
-
-if [ $do2 = yes ] ; then
- echo "Testing API and error handling (not Perl compatible)"
- ./pcretest -i testdata/testinput2 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput2
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-# Additional Perl-compatible tests for Perl 5.005's new features
-
-if [ $do3 = yes ] ; then
- echo "Testing Perl 5.005 features (Perl 5.005 compatible)"
- ./pcretest testdata/testinput3 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput3
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-if [ $do1 = yes -a $do2 = yes -a $do3 = yes ] ; then
- echo "The three main tests all ran OK"
- echo " "
-fi
-
-# Locale-specific tests, provided the "fr" locale is available
-
-if [ $do4 = yes ] ; then
- locale -a | grep '^fr$' >/dev/null
- if [ $? -eq 0 ] ; then
- echo "Testing locale-specific features (using 'fr' locale)"
- ./pcretest testdata/testinput4 testtry
- if [ $? = 0 ] ; then
- $cf testtry testdata/testoutput4
- if [ $? != 0 ] ; then exit 1; fi
- echo "Locale test ran OK"
- echo " "
- else exit 1
- fi
- else
- echo "Cannot test locale-specific features - 'fr' locale not found,"
- echo "or the \"locale\" command is not available to check for it."
- echo " "
- fi
-fi
-
-# End
diff --git a/srclib/pcre/RunTest.in b/srclib/pcre/RunTest.in
deleted file mode 100755
index 63c4b26b15..0000000000
--- a/srclib/pcre/RunTest.in
+++ /dev/null
@@ -1,149 +0,0 @@
-#! /bin/sh
-
-# This file is generated by configure from RunTest.in. Make any changes
-# to that file.
-
-# Run PCRE tests
-
-cf=diff
-testdata=@top_srcdir@/testdata
-
-# Select which tests to run; if no selection, run all
-
-do1=no
-do2=no
-do3=no
-do4=no
-do5=no
-do6=no
-
-while [ $# -gt 0 ] ; do
- case $1 in
- 1) do1=yes;;
- 2) do2=yes;;
- 3) do3=yes;;
- 4) do4=yes;;
- 5) do5=yes;;
- 6) do6=yes;;
- *) echo "Unknown test number $1"; exit 1;;
- esac
- shift
-done
-
-if [ "@UTF8@" = "" ] ; then
- if [ $do5 = yes ] ; then
- echo "Can't run test 5 because UFT8 support is not configured"
- exit 1
- fi
- if [ $do6 = yes ] ; then
- echo "Can't run test 6 because UFT8 support is not configured"
- exit 1
- fi
-fi
-
-if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a\
- $do5 = no -a $do6 = no ] ; then
- do1=yes
- do2=yes
- do3=yes
- do4=yes
- if [ "@UTF8@" != "" ] ; then do5=yes; fi
- if [ "@UTF8@" != "" ] ; then do6=yes; fi
-fi
-
-# Primary test, Perl-compatible
-
-if [ $do1 = yes ] ; then
- echo "Testing main functionality (Perl compatible)"
- ./pcretest $testdata/testinput1 testtry
- if [ $? = 0 ] ; then
- $cf testtry $testdata/testoutput1
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-# PCRE tests that are not Perl-compatible - API & error tests, mostly
-
-if [ $do2 = yes ] ; then
- echo "Testing API and error handling (not Perl compatible)"
- ./pcretest -i $testdata/testinput2 testtry
- if [ $? = 0 ] ; then
- $cf testtry $testdata/testoutput2
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-# Additional Perl-compatible tests for Perl 5.005's new features
-
-if [ $do3 = yes ] ; then
- echo "Testing Perl 5.005 features (Perl 5.005 compatible)"
- ./pcretest $testdata/testinput3 testtry
- if [ $? = 0 ] ; then
- $cf testtry $testdata/testoutput3
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
-fi
-
-if [ $do1 = yes -a $do2 = yes -a $do3 = yes ] ; then
- echo " "
- echo "The three main tests all ran OK"
- echo " "
-fi
-
-# Locale-specific tests, provided the "fr" locale is available
-
-if [ $do4 = yes ] ; then
- locale -a | grep '^fr$' >/dev/null
- if [ $? -eq 0 ] ; then
- echo "Testing locale-specific features (using 'fr' locale)"
- ./pcretest $testdata/testinput4 testtry
- if [ $? = 0 ] ; then
- $cf testtry $testdata/testoutput4
- if [ $? != 0 ] ; then
- echo " "
- echo "Locale test did not run entirely successfully."
- echo "This usually means that there is a problem with the locale"
- echo "settings rather than a bug in PCRE."
- else
- echo "Locale test ran OK"
- fi
- echo " "
- else exit 1
- fi
- else
- echo "Cannot test locale-specific features - 'fr' locale not found,"
- echo "or the \"locale\" command is not available to check for it."
- echo " "
- fi
-fi
-
-# Additional tests for UTF8 support
-
-if [ $do5 = yes ] ; then
- echo "Testing experimental, incomplete UTF8 support (Perl compatible)"
- ./pcretest $testdata/testinput5 testtry
- if [ $? = 0 ] ; then
- $cf testtry $testdata/testoutput5
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
- echo "UTF8 test ran OK"
- echo " "
-fi
-
-if [ $do6 = yes ] ; then
- echo "Testing API and internals for UTF8 support (not Perl compatible)"
- ./pcretest $testdata/testinput6 testtry
- if [ $? = 0 ] ; then
- $cf testtry $testdata/testoutput6
- if [ $? != 0 ] ; then exit 1; fi
- else exit 1
- fi
- echo "UTF8 internals test ran OK"
- echo " "
-fi
-
-# End
diff --git a/srclib/pcre/config.guess b/srclib/pcre/config.guess
deleted file mode 100644
index 6cfac28c85..0000000000
--- a/srclib/pcre/config.guess
+++ /dev/null
@@ -1,1344 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002 Free Software Foundation, Inc.
-
-timestamp='2002-03-20'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-#####################################################################
-# This file contains changes for Apache, clearly marked below.
-# These changes are hereby donated to the public domain.
-#####################################################################
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script.
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int dummy(){}" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
- if test $? = 0 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- rm -f $dummy.c $dummy.o $dummy.rel ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mipseb-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- eval $set_cc_for_build
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- 2-1307)
- UNAME_MACHINE="alphaev68"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit 0 ;;
-#########################
-# Apache changes
-#
-# *:OS/390:*:*)
-# echo i370-ibm-openedition
-# exit 0 ;;
- *:OS390:*:* | *:OS/390:*:*)
- echo s390-ibm-os390
- exit 0 ;;
- *:OS400:*:* | *:OS/400:*:*)
- echo as400-ibm-os400
- exit 0 ;;
- *:OS/2:*:*)
- echo "i386-pc-os2_emx"
- exit 0;;
-#
-# end Apache changes
-#########################
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy \
- && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
- if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
- rm -f $dummy.c $dummy
- fi ;;
- esac
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3D:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- x86:Interix*:3*)
- echo i386-pc-interix3
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips
- #undef mipsel
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- rm -f $dummy.c
- test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #ifdef __INTEL_COMPILER
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- rm -f $dummy.c
- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/srclib/pcre/config.hw b/srclib/pcre/config.hw
deleted file mode 100644
index e192e8bc6e..0000000000
--- a/srclib/pcre/config.hw
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/* On Unix systems config.in is converted by configure into config.h. PCRE is
-written in Standard C, but there are a few non-standard things it can cope
-with, allowing it to run on SunOS4 and other "close to standard" systems.
-
-On a non-Unix system you should just copy this file into config.h, and set up
-the macros the way you need them. You should normally change the definitions of
-HAVE_STRERROR and HAVE_MEMMOVE to 1. Unfortunately, because of the way autoconf
-works, these cannot be made the defaults. If your system has bcopy() and not
-memmove(), change the definition of HAVE_BCOPY instead of HAVE_MEMMOVE. If your
-system has neither bcopy() nor memmove(), leave them both as 0; an emulation
-function will be used. */
-
-/* Define to empty if the keyword does not work. */
-
-#undef const
-
-/* Define to `unsigned' if <stddef.h> doesn't define size_t. */
-
-#undef size_t
-
-/* The following two definitions are mainly for the benefit of SunOS4, which
-doesn't have the strerror() or memmove() functions that should be present in
-all Standard C libraries. The macros should normally be defined with the value
-1 for other systems, but unfortunately we can't make this the default because
-"configure" files generated by autoconf will only change 0 to 1; they won't
-change 1 to 0 if the functions are not found. */
-
-#define HAVE_STRERROR 1
-#define HAVE_MEMMOVE 1
-
-/* There are some non-Unix systems that don't even have bcopy(). If this macro
-is false, an emulation is used. If HAVE_MEMMOVE is set to 1, the value of
-HAVE_BCOPY is not relevant. */
-
-#define HAVE_BCOPY 0
-
-/* The value of NEWLINE determines the newline character. The default is to
-leave it up to the compiler, but some sites want to force a particular value.
-On Unix systems, "configure" can be used to override this default. */
-
-#ifndef NEWLINE
-#define NEWLINE '\n'
-#endif
-
-/* End */
diff --git a/srclib/pcre/config.in b/srclib/pcre/config.in
deleted file mode 100644
index 767cbd055c..0000000000
--- a/srclib/pcre/config.in
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/* On Unix systems config.in is converted by configure into config.h. PCRE is
-written in Standard C, but there are a few non-standard things it can cope
-with, allowing it to run on SunOS4 and other "close to standard" systems.
-
-On a non-Unix system you should just copy this file into config.h, and set up
-the macros the way you need them. You should normally change the definitions of
-HAVE_STRERROR and HAVE_MEMMOVE to 1. Unfortunately, because of the way autoconf
-works, these cannot be made the defaults. If your system has bcopy() and not
-memmove(), change the definition of HAVE_BCOPY instead of HAVE_MEMMOVE. If your
-system has neither bcopy() nor memmove(), leave them both as 0; an emulation
-function will be used. */
-
-/* Define to empty if the keyword does not work. */
-
-#undef const
-
-/* Define to `unsigned' if <stddef.h> doesn't define size_t. */
-
-#undef size_t
-
-/* The following two definitions are mainly for the benefit of SunOS4, which
-doesn't have the strerror() or memmove() functions that should be present in
-all Standard C libraries. The macros HAVE_STRERROR and HAVE_MEMMOVE should
-normally be defined with the value 1 for other systems, but unfortunately we
-can't make this the default because "configure" files generated by autoconf
-will only change 0 to 1; they won't change 1 to 0 if the functions are not
-found. */
-
-#define HAVE_STRERROR 0
-#define HAVE_MEMMOVE 0
-
-/* There are some non-Unix systems that don't even have bcopy(). If this macro
-is false, an emulation is used. If HAVE_MEMMOVE is set to 1, the value of
-HAVE_BCOPY is not relevant. */
-
-#define HAVE_BCOPY 0
-
-/* The value of NEWLINE determines the newline character. The default is to
-leave it up to the compiler, but some sites want to force a particular value.
-On Unix systems, "configure" can be used to override this default. */
-
-#ifndef NEWLINE
-#define NEWLINE '\n'
-#endif
-
-/* End */
diff --git a/srclib/pcre/config.sub b/srclib/pcre/config.sub
deleted file mode 100644
index 043d45b398..0000000000
--- a/srclib/pcre/config.sub
+++ /dev/null
@@ -1,1507 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002 Free Software Foundation, Inc.
-
-timestamp='2002-03-07'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-#####################################################################
-# This file contains changes for Apache, clearly marked below.
-# These changes are hereby donated to the public domain.
-#####################################################################
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
-########################
-# changes for Apache
-#
- tpf | os390 | vmcms)
- os=-$maybe_os
- basic_machine=s390;
- ;;
- os400)
- os=-$maybe_os
- basic_machine=as400;
- ;;
- mvs)
- os=-mvs
- basic_machine=i370;
- ;;
-#
-# end Apache changes
-########################
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
- | d10v | d30v | dsp16xx \
- | fr30 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | m32r | m68000 | m68k | m88k | mcore \
- | mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el | mips64vr4300 \
- | mips64vr4300el | mips64vr5000 | mips64vr5000el \
- | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
- | mipsisa32 | mipsisa64 \
- | mn10200 | mn10300 \
- | ns16k | ns32k \
- | openrisc | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \
- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xscale | xstormy16 | xtensa \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armv*-* \
- | avr-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c54x-* \
- | clipper-* | cydra-* \
- | d10v-* | d30v-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | m32r-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
- | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
- | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- | xtensa-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- or32 | or32-*)
- basic_machine=or32-unknown
- os=-coff
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2)
- basic_machine=i686-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
-########################
-# changes for Apache
-#
- as400*)
- basic_machine=as400-ibm
- ;;
-#
-# end Apache changes
-########################
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3d)
- basic_machine=alpha-cray
- os=-unicos
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- windows32)
- basic_machine=i386-pc
- os=-windows32-msvcrt
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh3eb | sh4eb)
- basic_machine=sh-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- c4x*)
- basic_machine=c4x-none
- os=-coff
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
-########################
-# changes for Apache
-#
- -os2_emx | -tpf* | -os390* | -vmcms* | -os400* )
- ;;
-#
-# end Apache changes
-########################
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto*)
- os=-nto-qnx
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
-########################
-# changes for Apache
-#
-# *-ibm)
-# os=-aix
-# ;;
-#
- *-ibm)
- case $basic_machine in
- s390*)
- os=-os390;
- ;;
- i370*)
- os=-mvs;
- ;;
- as400*)
- os=-os400;
- ;;
- *)
- os=-aix
- ;;
- esac
- ;;
-#
-# end Apache changes
-########################
-
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/srclib/pcre/configure.in b/srclib/pcre/configure.in
deleted file mode 100644
index 061cfb68df..0000000000
--- a/srclib/pcre/configure.in
+++ /dev/null
@@ -1,104 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-dnl This is required at the start; the name is the name of a file
-dnl it should be seeing, to verify it is in the same directory.
-
-AC_INIT(dftables.c)
-
-dnl Arrange to build config.h from config.in. Note that pcre.h is
-dnl built differently, as it is just a "substitution" file.
-dnl Manual says this macro should come right after AC_INIT.
-AC_CONFIG_HEADER(config.h:config.in)
-
-dnl Provide the current PCRE version information. Do not use numbers
-dnl with leading zeros for the minor version, as they end up in a C
-dnl macro, and may be treated as octal constants. Stick to single
-dnl digits for minor numbers less than 10. There are unlikely to be
-dnl that many releases anyway.
-
-PCRE_MAJOR=3
-PCRE_MINOR=9
-PCRE_DATE=02-Jan-2002
-PCRE_VERSION=${PCRE_MAJOR}.${PCRE_MINOR}
-
-dnl Provide versioning information for libtool shared libraries that
-dnl are built by default on Unix systems.
-
-PCRE_LIB_VERSION=0:1:0
-PCRE_POSIXLIB_VERSION=0:0:0
-
-dnl Checks for programs.
-
-AC_PROG_CC
-AC_PROG_RANLIB
-
-dnl Checks for header files.
-
-AC_HEADER_STDC
-AC_CHECK_HEADERS(limits.h)
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-
-AC_C_CONST
-AC_TYPE_SIZE_T
-
-dnl Checks for library functions.
-
-AC_CHECK_FUNCS(bcopy memmove strerror)
-
-dnl Handle --enable-shared-libraries
-
-LIBTOOL=./libtool
-LIBSUFFIX=la
-AC_ARG_ENABLE(shared,
-[ --disable-shared build PCRE as a static library],
-if test "$enableval" = "no"; then
- LIBTOOL=
- LIBSUFFIX=a
-fi
-)
-
-dnl Handle --enable-utf8
-
-AC_ARG_ENABLE(utf8,
-[ --enable-utf8 enable UTF8 support (incomplete)],
-if test "$enableval" = "yes"; then
- UTF8=-DSUPPORT_UTF8
-fi
-)
-
-dnl Handle --enable-newline-is-cr
-
-AC_ARG_ENABLE(newline-is-cr,
-[ --enable-newline-is-cr use CR as the newline character],
-if test "$enableval" = "yes"; then
- NEWLINE=-DNEWLINE=13
-fi
-)
-
-dnl Handle --enable-newline-is-lf
-
-AC_ARG_ENABLE(newline-is-lf,
-[ --enable-newline-is-lf use LF as the newline character],
-if test "$enableval" = "yes"; then
- NEWLINE=-DNEWLINE=10
-fi
-)
-
-dnl "Export" these variables
-
-AC_SUBST(HAVE_MEMMOVE)
-AC_SUBST(HAVE_STRERROR)
-AC_SUBST(LIBTOOL)
-AC_SUBST(LIBSUFFIX)
-AC_SUBST(NEWLINE)
-AC_SUBST(UTF8)
-AC_SUBST(PCRE_MAJOR)
-AC_SUBST(PCRE_MINOR)
-AC_SUBST(PCRE_DATE)
-AC_SUBST(PCRE_VERSION)
-AC_SUBST(PCRE_LIB_VERSION)
-AC_SUBST(PCRE_POSIXLIB_VERSION)
-
-dnl This must be last; it determines what files are written as well as config.h
-AC_OUTPUT(Makefile pcre.h:pcre.in pcre-config,[chmod a+x pcre-config])
diff --git a/srclib/pcre/dftables.c b/srclib/pcre/dftables.c
deleted file mode 100644
index fe4ffcdb7a..0000000000
--- a/srclib/pcre/dftables.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This is a support program to generate the file chartables.c, containing
-character tables of various kinds. They are built according to the default C
-locale and used as the default tables by PCRE. Now that pcre_maketables is
-a function visible to the outside world, we make use of its code from here in
-order to be consistent. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "internal.h"
-
-#define DFTABLES /* maketables.c notices this */
-#include "maketables.c"
-
-
-int main(void)
-{
-int i;
-const unsigned char *tables = pcre_maketables();
-
-printf(
- "/*************************************************\n"
- "* Perl-Compatible Regular Expressions *\n"
- "*************************************************/\n\n"
- "/* This file is automatically written by the dftables auxiliary \n"
- "program. If you edit it by hand, you might like to edit the Makefile to \n"
- "prevent its ever being regenerated.\n\n"
- "This file is #included in the compilation of pcre.c to build the default\n"
- "character tables which are used when no tables are passed to the compile\n"
- "function. */\n\n"
- "static unsigned char pcre_default_tables[] = {\n\n"
- "/* This table is a lower casing table. */\n\n");
-
-printf(" ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0) printf("\n ");
- printf("%3d", *tables++);
- if (i != 255) printf(",");
- }
-printf(",\n\n");
-
-printf("/* This table is a case flipping table. */\n\n");
-
-printf(" ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0) printf("\n ");
- printf("%3d", *tables++);
- if (i != 255) printf(",");
- }
-printf(",\n\n");
-
-printf(
- "/* This table contains bit maps for various character classes.\n"
- "Each map is 32 bytes long and the bits run from the least\n"
- "significant end of each byte. The classes that have their own\n"
- "maps are: space, xdigit, digit, upper, lower, word, graph\n"
- "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
-
-printf(" ");
-for (i = 0; i < cbit_length; i++)
- {
- if ((i & 7) == 0 && i != 0)
- {
- if ((i & 31) == 0) printf("\n");
- printf("\n ");
- }
- printf("0x%02x", *tables++);
- if (i != cbit_length - 1) printf(",");
- }
-printf(",\n\n");
-
-printf(
- "/* This table identifies various classes of character by individual bits:\n"
- " 0x%02x white space character\n"
- " 0x%02x letter\n"
- " 0x%02x decimal digit\n"
- " 0x%02x hexadecimal digit\n"
- " 0x%02x alphanumeric or '_'\n"
- " 0x%02x regular expression metacharacter or binary zero\n*/\n\n",
- ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
- ctype_meta);
-
-printf(" ");
-for (i = 0; i < 256; i++)
- {
- if ((i & 7) == 0 && i != 0)
- {
- printf(" /* ");
- if (isprint(i-8)) printf(" %c -", i-8);
- else printf("%3d-", i-8);
- if (isprint(i-1)) printf(" %c ", i-1);
- else printf("%3d", i-1);
- printf(" */\n ");
- }
- printf("0x%02x", *tables++);
- if (i != 255) printf(",");
- }
-
-printf("};/* ");
-if (isprint(i-8)) printf(" %c -", i-8);
- else printf("%3d-", i-8);
-if (isprint(i-1)) printf(" %c ", i-1);
- else printf("%3d", i-1);
-printf(" */\n\n/* End of chartables.c */\n");
-
-return 0;
-}
-
-/* End of dftables.c */
diff --git a/srclib/pcre/dftables.dsp b/srclib/pcre/dftables.dsp
deleted file mode 100644
index 3c8272b212..0000000000
--- a/srclib/pcre/dftables.dsp
+++ /dev/null
@@ -1,165 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dftables" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=dftables - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "dftables.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "dftables.mak" CFG="dftables - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "dftables - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "dftables - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "dftables - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Release\dftables" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Release\dftables" /FD /c
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\dftables.pdb" /machine:I386
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\dftables.pdb" /machine:I386 /opt:ref
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "dftables - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Debug\dftables" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Debug\dftables" /FD /c
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\dftables.pdb" /debug /machine:I386 /pdbtype:sept
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\dftables.pdb" /debug /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "dftables - Win32 Release"
-# Name "dftables - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\dftables.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hw"
-# Begin Source File
-
-SOURCE=.\config.hw
-
-!IF "$(CFG)" == "dftables - Win32 Release"
-
-# Begin Custom Build - Creating pcre config.h from config.hw
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\config.hw > .\config.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "dftables - Win32 Debug"
-
-# Begin Custom Build - Creating pcre config.h from config.hw
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\config.hw > .\config.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\maketables.c
-# PROP Exclude_From_Build 1
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.hw
-
-!IF "$(CFG)" == "dftables - Win32 Release"
-
-# Begin Custom Build - Creating pcre.h from pcre.hw
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\pcre.hw > .\pcre.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "dftables - Win32 Debug"
-
-# Begin Custom Build - Creating pcre.h from pcre.hw
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\pcre.hw > .\pcre.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/srclib/pcre/dll.mk b/srclib/pcre/dll.mk
deleted file mode 100644
index d8b728e57e..0000000000
--- a/srclib/pcre/dll.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-# dll.mk - auxilary Makefile to easy build dll's for mingw32 target
-# ver. 0.6 of 1999-03-25
-#
-# Homepage of this makefile - http://www.is.lg.ua/~paul/devel/
-# Homepage of original mingw32 project -
-# http://www.fu.is.saga-u.ac.jp/~colin/gcc.html
-#
-# How to use:
-# This makefile can:
-# 1. Create automatical .def file from list of objects
-# 2. Create .dll from objects and .def file, either automatical, or your
-# hand-written (maybe) file, which must have same basename as dll
-# WARNING! There MUST be object, which name match dll's name. Make sux.
-# 3. Create import library from .def (as for .dll, only its name required,
-# not dll itself)
-# By convention implibs for dll have .dll.a suffix, e.g. libstuff.dll.a
-# Why not just libstuff.a? 'Cos that's name for static lib, ok?
-# Process divided into 3 phases because:
-# 1. Pre-existent .def possible
-# 2. Generating implib is enough time-consuming
-#
-# Variables:
-# DLL_LDLIBS - libs for linking dll
-# DLL_LDFLAGS - flags for linking dll
-#
-# By using $(DLL_SUFFIX) instead of 'dll', e.g. stuff.$(DLL_SUFFIX)
-# you may help porting makefiles to other platforms
-#
-# Put this file in your make's include path (e.g. main include dir, for
-# more information see include section in make doc). Put in the beginning
-# of your own Makefile line "include dll.mk". Specify dependences, e.g.:
-#
-# Do all stuff in one step
-# libstuff.dll.a: $(OBJECTS) stuff.def
-# stuff.def: $(OBJECTS)
-#
-# Steps separated, pre-provided .def, link with user32
-#
-# DLL_LDLIBS=-luser32
-# stuff.dll: $(OBJECTS)
-# libstuff.dll.a: $(OBJECTS)
-
-
-DLLWRAP=dllwrap
-DLLTOOL=dlltool
-
-DLL_SUFFIX=dll
-
-.SUFFIXES: .o .$(DLL_SUFFIX)
-
-_%.def: %.o
- $(DLLTOOL) --export-all --output-def $@ $^
-
-%.$(DLL_SUFFIX): %.o
- $(DLLWRAP) --dllname $(notdir $@) --driver-name $(CC) --def $*.def -o $@ $(filter %.o,$^) $(DLL_LDFLAGS) $(DLL_LDLIBS)
-
-lib%.$(DLL_SUFFIX).a:%.def
- $(DLLTOOL) --dllname $(notdir $*.dll) --def $< --output-lib $@
-
-# End
diff --git a/srclib/pcre/doc/Tech.Notes b/srclib/pcre/doc/Tech.Notes
deleted file mode 100644
index f5ca280115..0000000000
--- a/srclib/pcre/doc/Tech.Notes
+++ /dev/null
@@ -1,253 +0,0 @@
-Technical Notes about PCRE
---------------------------
-
-Many years ago I implemented some regular expression functions to an algorithm
-suggested by Martin Richards. These were not Unix-like in form, and were quite
-restricted in what they could do by comparison with Perl. The interesting part
-about the algorithm was that the amount of space required to hold the compiled
-form of an expression was known in advance. The code to apply an expression did
-not operate by backtracking, as the Henry Spencer and Perl code does, but
-instead checked all possibilities simultaneously by keeping a list of current
-states and checking all of them as it advanced through the subject string. (In
-the terminology of Jeffrey Friedl's book, it was a "DFA algorithm".) When the
-pattern was all used up, all remaining states were possible matches, and the
-one matching the longest subset of the subject string was chosen. This did not
-necessarily maximize the individual wild portions of the pattern, as is
-expected in Unix and Perl-style regular expressions.
-
-By contrast, the code originally written by Henry Spencer and subsequently
-heavily modified for Perl actually compiles the expression twice: once in a
-dummy mode in order to find out how much store will be needed, and then for
-real. The execution function operates by backtracking and maximizing (or,
-optionally, minimizing in Perl) the amount of the subject that matches
-individual wild portions of the pattern. This is an "NFA algorithm" in Friedl's
-terminology.
-
-For the set of functions that forms PCRE (which are unrelated to those
-mentioned above), I tried at first to invent an algorithm that used an amount
-of store bounded by a multiple of the number of characters in the pattern, to
-save on compiling time. However, because of the greater complexity in Perl
-regular expressions, I couldn't do this. In any case, a first pass through the
-pattern is needed, in order to find internal flag settings like (?i) at top
-level. So PCRE works by running a very degenerate first pass to calculate a
-maximum store size, and then a second pass to do the real compile - which may
-use a bit less than the predicted amount of store. The idea is that this is
-going to turn out faster because the first pass is degenerate and the second
-pass can just store stuff straight into the vector. It does make the compiling
-functions bigger, of course, but they have got quite big anyway to handle all
-the Perl stuff.
-
-The compiled form of a pattern is a vector of bytes, containing items of
-variable length. The first byte in an item is an opcode, and the length of the
-item is either implicit in the opcode or contained in the data bytes which
-follow it. A list of all the opcodes follows:
-
-Opcodes with no following data
-------------------------------
-
-These items are all just one byte long
-
- OP_END end of pattern
- OP_ANY match any character
- OP_SOD match start of data: \A
- OP_CIRC ^ (start of data, or after \n in multiline)
- OP_NOT_WORD_BOUNDARY \W
- OP_WORD_BOUNDARY \w
- OP_NOT_DIGIT \D
- OP_DIGIT \d
- OP_NOT_WHITESPACE \S
- OP_WHITESPACE \s
- OP_NOT_WORDCHAR \W
- OP_WORDCHAR \w
- OP_EODN match end of data or \n at end: \Z
- OP_EOD match end of data: \z
- OP_DOLL $ (end of data, or before \n in multiline)
- OP_RECURSE match the pattern recursively
-
-
-Repeating single characters
----------------------------
-
-The common repeats (*, +, ?) when applied to a single character appear as
-two-byte items using the following opcodes:
-
- OP_STAR
- OP_MINSTAR
- OP_PLUS
- OP_MINPLUS
- OP_QUERY
- OP_MINQUERY
-
-Those with "MIN" in their name are the minimizing versions. Each is followed by
-the character that is to be repeated. Other repeats make use of
-
- OP_UPTO
- OP_MINUPTO
- OP_EXACT
-
-which are followed by a two-byte count (most significant first) and the
-repeated character. OP_UPTO matches from 0 to the given number. A repeat with a
-non-zero minimum and a fixed maximum is coded as an OP_EXACT followed by an
-OP_UPTO (or OP_MINUPTO).
-
-
-Repeating character types
--------------------------
-
-Repeats of things like \d are done exactly as for single characters, except
-that instead of a character, the opcode for the type is stored in the data
-byte. The opcodes are:
-
- OP_TYPESTAR
- OP_TYPEMINSTAR
- OP_TYPEPLUS
- OP_TYPEMINPLUS
- OP_TYPEQUERY
- OP_TYPEMINQUERY
- OP_TYPEUPTO
- OP_TYPEMINUPTO
- OP_TYPEEXACT
-
-
-Matching a character string
----------------------------
-
-The OP_CHARS opcode is followed by a one-byte count and then that number of
-characters. If there are more than 255 characters in sequence, successive
-instances of OP_CHARS are used.
-
-
-Character classes
------------------
-
-OP_CLASS is used for a character class, provided there are at least two
-characters in the class. If there is only one character, OP_CHARS is used for a
-positive class, and OP_NOT for a negative one (that is, for something like
-[^a]). Another set of repeating opcodes (OP_NOTSTAR etc.) are used for a
-repeated, negated, single-character class. The normal ones (OP_STAR etc.) are
-used for a repeated positive single-character class.
-
-OP_CLASS is followed by a 32-byte bit map containing a 1 bit for every
-character that is acceptable. The bits are counted from the least significant
-end of each byte.
-
-
-Back references
----------------
-
-OP_REF is followed by two bytes containing the reference number.
-
-
-Repeating character classes and back references
------------------------------------------------
-
-Single-character classes are handled specially (see above). This applies to
-OP_CLASS and OP_REF. In both cases, the repeat information follows the base
-item. The matching code looks at the following opcode to see if it is one of
-
- OP_CRSTAR
- OP_CRMINSTAR
- OP_CRPLUS
- OP_CRMINPLUS
- OP_CRQUERY
- OP_CRMINQUERY
- OP_CRRANGE
- OP_CRMINRANGE
-
-All but the last two are just single-byte items. The others are followed by
-four bytes of data, comprising the minimum and maximum repeat counts.
-
-
-Brackets and alternation
-------------------------
-
-A pair of non-capturing (round) brackets is wrapped round each expression at
-compile time, so alternation always happens in the context of brackets.
-
-Non-capturing brackets use the opcode OP_BRA, while capturing brackets use
-OP_BRA+1, OP_BRA+2, etc. [Note for North Americans: "bracket" to some English
-speakers, including myself, can be round, square, curly, or pointy. Hence this
-usage.]
-
-Originally PCRE was limited to 99 capturing brackets (so as not to use up all
-the opcodes). From release 3.5, there is no limit. What happens is that the
-first ones, up to EXTRACT_BASIC_MAX are handled with separate opcodes, as
-above. If there are more, the opcode is set to EXTRACT_BASIC_MAX+1, and the
-first operation in the bracket is OP_BRANUMBER, followed by a 2-byte bracket
-number. This opcode is ignored while matching, but is fished out when handling
-the bracket itself. (They could have all been done like this, but I was making
-minimal changes.)
-
-A bracket opcode is followed by two bytes which give the offset to the next
-alternative OP_ALT or, if there aren't any branches, to the matching KET
-opcode. Each OP_ALT is followed by two bytes giving the offset to the next one,
-or to the KET opcode.
-
-OP_KET is used for subpatterns that do not repeat indefinitely, while
-OP_KETRMIN and OP_KETRMAX are used for indefinite repetitions, minimally or
-maximally respectively. All three are followed by two bytes giving (as a
-positive number) the offset back to the matching BRA opcode.
-
-If a subpattern is quantified such that it is permitted to match zero times, it
-is preceded by one of OP_BRAZERO or OP_BRAMINZERO. These are single-byte
-opcodes which tell the matcher that skipping this subpattern entirely is a
-valid branch.
-
-A subpattern with an indefinite maximum repetition is replicated in the
-compiled data its minimum number of times (or once with a BRAZERO if the
-minimum is zero), with the final copy terminating with a KETRMIN or KETRMAX as
-appropriate.
-
-A subpattern with a bounded maximum repetition is replicated in a nested
-fashion up to the maximum number of times, with BRAZERO or BRAMINZERO before
-each replication after the minimum, so that, for example, (abc){2,5} is
-compiled as (abc)(abc)((abc)((abc)(abc)?)?)?. The 99 and 200 bracket limits do
-not apply to these internally generated brackets.
-
-
-Assertions
-----------
-
-Forward assertions are just like other subpatterns, but starting with one of
-the opcodes OP_ASSERT or OP_ASSERT_NOT. Backward assertions use the opcodes
-OP_ASSERTBACK and OP_ASSERTBACK_NOT, and the first opcode inside the assertion
-is OP_REVERSE, followed by a two byte count of the number of characters to move
-back the pointer in the subject string. When operating in UTF-8 mode, the count
-is a character count rather than a byte count. A separate count is present in
-each alternative of a lookbehind assertion, allowing them to have different
-fixed lengths.
-
-
-Once-only subpatterns
----------------------
-
-These are also just like other subpatterns, but they start with the opcode
-OP_ONCE.
-
-
-Conditional subpatterns
------------------------
-
-These are like other subpatterns, but they start with the opcode OP_COND. If
-the condition is a back reference, this is stored at the start of the
-subpattern using the opcode OP_CREF followed by two bytes containing the
-reference number. Otherwise, a conditional subpattern will always start with
-one of the assertions.
-
-
-Changing options
-----------------
-
-If any of the /i, /m, or /s options are changed within a parenthesized group,
-an OP_OPT opcode is compiled, followed by one byte containing the new settings
-of these flags. If there are several alternatives in a group, there is an
-occurrence of OP_OPT at the start of all those following the first options
-change, to set appropriate options for the start of the alternative.
-Immediately after the end of the group there is another such item to reset the
-flags to their previous values. Other changes of flag within the pattern can be
-handled entirely at compile time, and so do not cause anything to be put into
-the compiled data.
-
-
-Philip Hazel
-August 2001
diff --git a/srclib/pcre/doc/pcre.3 b/srclib/pcre/doc/pcre.3
deleted file mode 100644
index 738f76b4a9..0000000000
--- a/srclib/pcre/doc/pcre.3
+++ /dev/null
@@ -1,1991 +0,0 @@
-.TH PCRE 3
-.SH NAME
-pcre - Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B #include <pcre.h>
-.PP
-.SM
-.br
-.B pcre *pcre_compile(const char *\fIpattern\fR, int \fIoptions\fR,
-.ti +5n
-.B const char **\fIerrptr\fR, int *\fIerroffset\fR,
-.ti +5n
-.B const unsigned char *\fItableptr\fR);
-.PP
-.br
-.B pcre_extra *pcre_study(const pcre *\fIcode\fR, int \fIoptions\fR,
-.ti +5n
-.B const char **\fIerrptr\fR);
-.PP
-.br
-.B int pcre_exec(const pcre *\fIcode\fR, "const pcre_extra *\fIextra\fR,"
-.ti +5n
-.B "const char *\fIsubject\fR," int \fIlength\fR, int \fIstartoffset\fR,
-.ti +5n
-.B int \fIoptions\fR, int *\fIovector\fR, int \fIovecsize\fR);
-.PP
-.br
-.B int pcre_copy_substring(const char *\fIsubject\fR, int *\fIovector\fR,
-.ti +5n
-.B int \fIstringcount\fR, int \fIstringnumber\fR, char *\fIbuffer\fR,
-.ti +5n
-.B int \fIbuffersize\fR);
-.PP
-.br
-.B int pcre_get_substring(const char *\fIsubject\fR, int *\fIovector\fR,
-.ti +5n
-.B int \fIstringcount\fR, int \fIstringnumber\fR,
-.ti +5n
-.B const char **\fIstringptr\fR);
-.PP
-.br
-.B int pcre_get_substring_list(const char *\fIsubject\fR,
-.ti +5n
-.B int *\fIovector\fR, int \fIstringcount\fR, "const char ***\fIlistptr\fR);"
-.PP
-.br
-.B void pcre_free_substring(const char *\fIstringptr\fR);
-.PP
-.br
-.B void pcre_free_substring_list(const char **\fIstringptr\fR);
-.PP
-.br
-.B const unsigned char *pcre_maketables(void);
-.PP
-.br
-.B int pcre_fullinfo(const pcre *\fIcode\fR, "const pcre_extra *\fIextra\fR,"
-.ti +5n
-.B int \fIwhat\fR, void *\fIwhere\fR);
-.PP
-.br
-.B int pcre_info(const pcre *\fIcode\fR, int *\fIoptptr\fR, int
-.B *\fIfirstcharptr\fR);
-.PP
-.br
-.B char *pcre_version(void);
-.PP
-.br
-.B void *(*pcre_malloc)(size_t);
-.PP
-.br
-.B void (*pcre_free)(void *);
-
-
-
-.SH DESCRIPTION
-The PCRE library is a set of functions that implement regular expression
-pattern matching using the same syntax and semantics as Perl 5, with just a few
-differences (see below). The current implementation corresponds to Perl 5.005,
-with some additional features from later versions. This includes some
-experimental, incomplete support for UTF-8 encoded strings. Details of exactly
-what is and what is not supported are given below.
-
-PCRE has its own native API, which is described in this document. There is also
-a set of wrapper functions that correspond to the POSIX regular expression API.
-These are described in the \fBpcreposix\fR documentation.
-
-The native API function prototypes are defined in the header file \fBpcre.h\fR,
-and on Unix systems the library itself is called \fBlibpcre.a\fR, so can be
-accessed by adding \fB-lpcre\fR to the command for linking an application which
-calls it. The header file defines the macros PCRE_MAJOR and PCRE_MINOR to
-contain the major and minor release numbers for the library. Applications can
-use these to include support for different releases.
-
-The functions \fBpcre_compile()\fR, \fBpcre_study()\fR, and \fBpcre_exec()\fR
-are used for compiling and matching regular expressions. A sample program that
-demonstrates the simplest way of using them is given in the file
-\fIpcredemo.c\fR. The last section of this man page describes how to run it.
-
-The functions \fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
-\fBpcre_get_substring_list()\fR are convenience functions for extracting
-captured substrings from a matched subject string; \fBpcre_free_substring()\fR
-and \fBpcre_free_substring_list()\fR are also provided, to free the memory used
-for extracted strings.
-
-The function \fBpcre_maketables()\fR is used (optionally) to build a set of
-character tables in the current locale for passing to \fBpcre_compile()\fR.
-
-The function \fBpcre_fullinfo()\fR is used to find out information about a
-compiled pattern; \fBpcre_info()\fR is an obsolete version which returns only
-some of the available information, but is retained for backwards compatibility.
-The function \fBpcre_version()\fR returns a pointer to a string containing the
-version of PCRE and its date of release.
-
-The global variables \fBpcre_malloc\fR and \fBpcre_free\fR initially contain
-the entry points of the standard \fBmalloc()\fR and \fBfree()\fR functions
-respectively. PCRE calls the memory management functions via these variables,
-so a calling program can replace them if it wishes to intercept the calls. This
-should be done before calling any PCRE functions.
-
-
-.SH MULTI-THREADING
-The PCRE functions can be used in multi-threading applications, with the
-proviso that the memory management functions pointed to by \fBpcre_malloc\fR
-and \fBpcre_free\fR are shared by all threads.
-
-The compiled form of a regular expression is not altered during matching, so
-the same compiled pattern can safely be used by several threads at once.
-
-
-.SH COMPILING A PATTERN
-The function \fBpcre_compile()\fR is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument \fIpattern\fR. A pointer to a single block of memory
-that is obtained via \fBpcre_malloc\fR is returned. This contains the compiled
-code and related data. The \fBpcre\fR type is defined for the returned block;
-this is a typedef for a structure whose contents are not externally defined. It
-is up to the caller to free the memory when it is no longer required.
-
-Although the compiled code of a PCRE regex is relocatable, that is, it does not
-depend on memory location, the complete \fBpcre\fR data block is not
-fully relocatable, because it contains a copy of the \fItableptr\fR argument,
-which is an address (see below).
-
-The size of a compiled pattern is roughly proportional to the length of the
-pattern string, except that each character class (other than those containing
-just a single character, negated or not) requires 33 bytes, and repeat
-quantifiers with a minimum greater than one or a bounded maximum cause the
-relevant portions of the compiled pattern to be replicated.
-
-The \fIoptions\fR argument contains independent bits that affect the
-compilation. It should be zero if no options are required. Some of the options,
-in particular, those that are compatible with Perl, can also be set and unset
-from within the pattern (see the detailed description of regular expressions
-below). For these options, the contents of the \fIoptions\fR argument specifies
-their initial settings at the start of compilation and execution. The
-PCRE_ANCHORED option can be set at the time of matching as well as at compile
-time.
-
-If \fIerrptr\fR is NULL, \fBpcre_compile()\fR returns NULL immediately.
-Otherwise, if compilation of a pattern fails, \fBpcre_compile()\fR returns
-NULL, and sets the variable pointed to by \fIerrptr\fR to point to a textual
-error message. The offset from the start of the pattern to the character where
-the error was discovered is placed in the variable pointed to by
-\fIerroffset\fR, which must not be NULL. If it is, an immediate error is given.
-
-If the final argument, \fItableptr\fR, is NULL, PCRE uses a default set of
-character tables which are built when it is compiled, using the default C
-locale. Otherwise, \fItableptr\fR must be the result of a call to
-\fBpcre_maketables()\fR. See the section on locale support below.
-
-This code fragment shows a typical straightforward call to \fBpcre_compile()\fR:
-
- pcre *re;
- const char *error;
- int erroffset;
- re = pcre_compile(
- "^A.*Z", /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-
-The following option bits are defined in the header file:
-
- PCRE_ANCHORED
-
-If this bit is set, the pattern is forced to be "anchored", that is, it is
-constrained to match only at the start of the string which is being searched
-(the "subject string"). This effect can also be achieved by appropriate
-constructs in the pattern itself, which is the only way to do it in Perl.
-
- PCRE_CASELESS
-
-If this bit is set, letters in the pattern match both upper and lower case
-letters. It is equivalent to Perl's /i option.
-
- PCRE_DOLLAR_ENDONLY
-
-If this bit is set, a dollar metacharacter in the pattern matches only at the
-end of the subject string. Without this option, a dollar also matches
-immediately before the final character if it is a newline (but not before any
-other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
-set. There is no equivalent to this option in Perl.
-
- PCRE_DOTALL
-
-If this bit is set, a dot metacharater in the pattern matches all characters,
-including newlines. Without it, newlines are excluded. This option is
-equivalent to Perl's /s option. A negative class such as [^a] always matches a
-newline character, independent of the setting of this option.
-
- PCRE_EXTENDED
-
-If this bit is set, whitespace data characters in the pattern are totally
-ignored except when escaped or inside a character class, and characters between
-an unescaped # outside a character class and the next newline character,
-inclusive, are also ignored. This is equivalent to Perl's /x option, and makes
-it possible to include comments inside complicated patterns. Note, however,
-that this applies only to data characters. Whitespace characters may never
-appear within special character sequences in a pattern, for example within the
-sequence (?( which introduces a conditional subpattern.
-
- PCRE_EXTRA
-
-This option was invented in order to turn on additional functionality of PCRE
-that is incompatible with Perl, but it is currently of very little use. When
-set, any backslash in a pattern that is followed by a letter that has no
-special meaning causes an error, thus reserving these combinations for future
-expansion. By default, as in Perl, a backslash followed by a letter with no
-special meaning is treated as a literal. There are at present no other features
-controlled by this option. It can also be set by a (?X) option setting within a
-pattern.
-
- PCRE_MULTILINE
-
-By default, PCRE treats the subject string as consisting of a single "line" of
-characters (even if it actually contains several newlines). The "start of line"
-metacharacter (^) matches only at the start of the string, while the "end of
-line" metacharacter ($) matches only at the end of the string, or before a
-terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as
-Perl.
-
-When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs
-match immediately following or immediately before any newline in the subject
-string, respectively, as well as at the very start and end. This is equivalent
-to Perl's /m option. If there are no "\\n" characters in a subject string, or
-no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no
-effect.
-
- PCRE_UNGREEDY
-
-This option inverts the "greediness" of the quantifiers so that they are not
-greedy by default, but become greedy if followed by "?". It is not compatible
-with Perl. It can also be set by a (?U) option setting within the pattern.
-
- PCRE_UTF8
-
-This option causes PCRE to regard both the pattern and the subject as strings
-of UTF-8 characters instead of just byte strings. However, it is available only
-if PCRE has been built to include UTF-8 support. If not, the use of this option
-provokes an error. Support for UTF-8 is new, experimental, and incomplete.
-Details of exactly what it entails are given below.
-
-
-.SH STUDYING A PATTERN
-When a pattern is going to be used several times, it is worth spending more
-time analyzing it in order to speed up the time taken for matching. The
-function \fBpcre_study()\fR takes a pointer to a compiled pattern as its first
-argument, and returns a pointer to a \fBpcre_extra\fR block (another typedef
-for a structure with hidden contents) containing additional information about
-the pattern; this can be passed to \fBpcre_exec()\fR. If no additional
-information is available, NULL is returned.
-
-The second argument contains option bits. At present, no options are defined
-for \fBpcre_study()\fR, and this argument should always be zero.
-
-The third argument for \fBpcre_study()\fR is a pointer to an error message. If
-studying succeeds (even if no data is returned), the variable it points to is
-set to NULL. Otherwise it points to a textual error message.
-
-This is a typical call to \fBpcre_study\fR():
-
- pcre_extra *pe;
- pe = pcre_study(
- re, /* result of pcre_compile() */
- 0, /* no options exist */
- &error); /* set to NULL or points to a message */
-
-At present, studying a pattern is useful only for non-anchored patterns that do
-not have a single fixed starting character. A bitmap of possible starting
-characters is created.
-
-
-.SH LOCALE SUPPORT
-PCRE handles caseless matching, and determines whether characters are letters,
-digits, or whatever, by reference to a set of tables. The library contains a
-default set of tables which is created in the default C locale when PCRE is
-compiled. This is used when the final argument of \fBpcre_compile()\fR is NULL,
-and is sufficient for many applications.
-
-An alternative set of tables can, however, be supplied. Such tables are built
-by calling the \fBpcre_maketables()\fR function, which has no arguments, in the
-relevant locale. The result can then be passed to \fBpcre_compile()\fR as often
-as necessary. For example, to build and use tables that are appropriate for the
-French locale (where accented characters with codes greater than 128 are
-treated as letters), the following code could be used:
-
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-
-The tables are built in memory that is obtained via \fBpcre_malloc\fR. The
-pointer that is passed to \fBpcre_compile\fR is saved with the compiled
-pattern, and the same tables are used via this pointer by \fBpcre_study()\fR
-and \fBpcre_exec()\fR. Thus for any single pattern, compilation, studying and
-matching all happen in the same locale, but different patterns can be compiled
-in different locales. It is the caller's responsibility to ensure that the
-memory containing the tables remains available for as long as it is needed.
-
-
-.SH INFORMATION ABOUT A PATTERN
-The \fBpcre_fullinfo()\fR function returns information about a compiled
-pattern. It replaces the obsolete \fBpcre_info()\fR function, which is
-nevertheless retained for backwards compability (and is documented below).
-
-The first argument for \fBpcre_fullinfo()\fR is a pointer to the compiled
-pattern. The second argument is the result of \fBpcre_study()\fR, or NULL if
-the pattern was not studied. The third argument specifies which piece of
-information is required, while the fourth argument is a pointer to a variable
-to receive the data. The yield of the function is zero for success, or one of
-the following negative numbers:
-
- PCRE_ERROR_NULL the argument \fIcode\fR was NULL
- the argument \fIwhere\fR was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of \fIwhat\fR was invalid
-
-Here is a typical call of \fBpcre_fullinfo()\fR, to obtain the length of the
-compiled pattern:
-
- int rc;
- unsigned long int length;
- rc = pcre_fullinfo(
- re, /* result of pcre_compile() */
- pe, /* result of pcre_study(), or NULL */
- PCRE_INFO_SIZE, /* what is required */
- &length); /* where to put the data */
-
-The possible values for the third argument are defined in \fBpcre.h\fR, and are
-as follows:
-
- PCRE_INFO_OPTIONS
-
-Return a copy of the options with which the pattern was compiled. The fourth
-argument should point to an \fBunsigned long int\fR variable. These option bits
-are those specified in the call to \fBpcre_compile()\fR, modified by any
-top-level option settings within the pattern itself, and with the PCRE_ANCHORED
-bit forcibly set if the form of the pattern implies that it can match only at
-the start of a subject string.
-
- PCRE_INFO_SIZE
-
-Return the size of the compiled pattern, that is, the value that was passed as
-the argument to \fBpcre_malloc()\fR when PCRE was getting memory in which to
-place the compiled data. The fourth argument should point to a \fBsize_t\fR
-variable.
-
- PCRE_INFO_CAPTURECOUNT
-
-Return the number of capturing subpatterns in the pattern. The fourth argument
-should point to an \fbint\fR variable.
-
- PCRE_INFO_BACKREFMAX
-
-Return the number of the highest back reference in the pattern. The fourth
-argument should point to an \fBint\fR variable. Zero is returned if there are
-no back references.
-
- PCRE_INFO_FIRSTCHAR
-
-Return information about the first character of any matched string, for a
-non-anchored pattern. If there is a fixed first character, e.g. from a pattern
-such as (cat|cow|coyote), it is returned in the integer pointed to by
-\fIwhere\fR. Otherwise, if either
-
-(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
-starts with "^", or
-
-(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not set
-(if it were set, the pattern would be anchored),
-
--1 is returned, indicating that the pattern matches only at the start of a
-subject string or after any "\\n" within the string. Otherwise -2 is returned.
-For anchored patterns, -2 is returned.
-
- PCRE_INFO_FIRSTTABLE
-
-If the pattern was studied, and this resulted in the construction of a 256-bit
-table indicating a fixed set of characters for the first character in any
-matching string, a pointer to the table is returned. Otherwise NULL is
-returned. The fourth argument should point to an \fBunsigned char *\fR
-variable.
-
- PCRE_INFO_LASTLITERAL
-
-For a non-anchored pattern, return the value of the rightmost literal character
-which must exist in any matched string, other than at its start. The fourth
-argument should point to an \fBint\fR variable. If there is no such character,
-or if the pattern is anchored, -1 is returned. For example, for the pattern
-/a\\d+z\\d+/ the returned value is 'z'.
-
-The \fBpcre_info()\fR function is now obsolete because its interface is too
-restrictive to return all the available data about a compiled pattern. New
-programs should use \fBpcre_fullinfo()\fR instead. The yield of
-\fBpcre_info()\fR is the number of capturing subpatterns, or one of the
-following negative numbers:
-
- PCRE_ERROR_NULL the argument \fIcode\fR was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
-
-If the \fIoptptr\fR argument is not NULL, a copy of the options with which the
-pattern was compiled is placed in the integer it points to (see
-PCRE_INFO_OPTIONS above).
-
-If the pattern is not anchored and the \fIfirstcharptr\fR argument is not NULL,
-it is used to pass back information about the first character of any matched
-string (see PCRE_INFO_FIRSTCHAR above).
-
-
-.SH MATCHING A PATTERN
-The function \fBpcre_exec()\fR is called to match a subject string against a
-pre-compiled pattern, which is passed in the \fIcode\fR argument. If the
-pattern has been studied, the result of the study should be passed in the
-\fIextra\fR argument. Otherwise this must be NULL.
-
-Here is an example of a simple call to \fBpcre_exec()\fR:
-
- int rc;
- int ovector[30];
- rc = pcre_exec(
- re, /* result of pcre_compile() */
- NULL, /* we didn't study the pattern */
- "some string", /* the subject string */
- 11, /* the length of the subject string */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- 30); /* number of elements in the vector */
-
-The PCRE_ANCHORED option can be passed in the \fIoptions\fR argument, whose
-unused bits must be zero. However, if a pattern was compiled with
-PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
-cannot be made unachored at matching time.
-
-There are also three further options that can be set only at matching time:
-
- PCRE_NOTBOL
-
-The first character of the string is not the beginning of a line, so the
-circumflex metacharacter should not match before it. Setting this without
-PCRE_MULTILINE (at compile time) causes circumflex never to match.
-
- PCRE_NOTEOL
-
-The end of the string is not the end of a line, so the dollar metacharacter
-should not match it nor (except in multiline mode) a newline immediately before
-it. Setting this without PCRE_MULTILINE (at compile time) causes dollar never
-to match.
-
- PCRE_NOTEMPTY
-
-An empty string is not considered to be a valid match if this option is set. If
-there are alternatives in the pattern, they are tried. If all the alternatives
-match the empty string, the entire match fails. For example, if the pattern
-
- a?b?
-
-is applied to a string not beginning with "a" or "b", it matches the empty
-string at the start of the subject. With PCRE_NOTEMPTY set, this match is not
-valid, so PCRE searches further into the string for occurrences of "a" or "b".
-
-Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a special case
-of a pattern match of the empty string within its \fBsplit()\fR function, and
-when using the /g modifier. It is possible to emulate Perl's behaviour after
-matching a null string by first trying the match again at the same offset with
-PCRE_NOTEMPTY set, and then if that fails by advancing the starting offset (see
-below) and trying an ordinary match again.
-
-The subject string is passed as a pointer in \fIsubject\fR, a length in
-\fIlength\fR, and a starting offset in \fIstartoffset\fR. Unlike the pattern
-string, the subject may contain binary zero characters. When the starting
-offset is zero, the search for a match starts at the beginning of the subject,
-and this is by far the most common case.
-
-A non-zero starting offset is useful when searching for another match in the
-same subject by calling \fBpcre_exec()\fR again after a previous success.
-Setting \fIstartoffset\fR differs from just passing over a shortened string and
-setting PCRE_NOTBOL in the case of a pattern that begins with any kind of
-lookbehind. For example, consider the pattern
-
- \\Biss\\B
-
-which finds occurrences of "iss" in the middle of words. (\\B matches only if
-the current position in the subject is not a word boundary.) When applied to
-the string "Mississipi" the first call to \fBpcre_exec()\fR finds the first
-occurrence. If \fBpcre_exec()\fR is called again with just the remainder of the
-subject, namely "issipi", it does not match, because \\B is always false at the
-start of the subject, which is deemed to be a word boundary. However, if
-\fBpcre_exec()\fR is passed the entire string again, but with \fIstartoffset\fR
-set to 4, it finds the second occurrence of "iss" because it is able to look
-behind the starting point to discover that it is preceded by a letter.
-
-If a non-zero starting offset is passed when the pattern is anchored, one
-attempt to match at the given offset is tried. This can only succeed if the
-pattern does not require the match to be at the start of the subject.
-
-In general, a pattern matches a certain portion of the subject, and in
-addition, further substrings from the subject may be picked out by parts of the
-pattern. Following the usage in Jeffrey Friedl's book, this is called
-"capturing" in what follows, and the phrase "capturing subpattern" is used for
-a fragment of a pattern that picks out a substring. PCRE supports several other
-kinds of parenthesized subpattern that do not cause substrings to be captured.
-
-Captured substrings are returned to the caller via a vector of integer offsets
-whose address is passed in \fIovector\fR. The number of elements in the vector
-is passed in \fIovecsize\fR. The first two-thirds of the vector is used to pass
-back captured substrings, each substring using a pair of integers. The
-remaining third of the vector is used as workspace by \fBpcre_exec()\fR while
-matching capturing subpatterns, and is not available for passing back
-information. The length passed in \fIovecsize\fR should always be a multiple of
-three. If it is not, it is rounded down.
-
-When a match has been successful, information about captured substrings is
-returned in pairs of integers, starting at the beginning of \fIovector\fR, and
-continuing up to two-thirds of its length at the most. The first element of a
-pair is set to the offset of the first character in a substring, and the second
-is set to the offset of the first character after the end of a substring. The
-first pair, \fIovector[0]\fR and \fIovector[1]\fR, identify the portion of the
-subject string matched by the entire pattern. The next pair is used for the
-first capturing subpattern, and so on. The value returned by \fBpcre_exec()\fR
-is the number of pairs that have been set. If there are no capturing
-subpatterns, the return value from a successful match is 1, indicating that
-just the first pair of offsets has been set.
-
-Some convenience functions are provided for extracting the captured substrings
-as separate strings. These are described in the following section.
-
-It is possible for an capturing subpattern number \fIn+1\fR to match some
-part of the subject when subpattern \fIn\fR has not been used at all. For
-example, if the string "abc" is matched against the pattern (a|(z))(bc)
-subpatterns 1 and 3 are matched, but 2 is not. When this happens, both offset
-values corresponding to the unused subpattern are set to -1.
-
-If a capturing subpattern is matched repeatedly, it is the last portion of the
-string that it matched that gets returned.
-
-If the vector is too small to hold all the captured substrings, it is used as
-far as possible (up to two-thirds of its length), and the function returns a
-value of zero. In particular, if the substring offsets are not of interest,
-\fBpcre_exec()\fR may be called with \fIovector\fR passed as NULL and
-\fIovecsize\fR as zero. However, if the pattern contains back references and
-the \fIovector\fR isn't big enough to remember the related substrings, PCRE has
-to get additional memory for use during matching. Thus it is usually advisable
-to supply an \fIovector\fR.
-
-Note that \fBpcre_info()\fR can be used to find out how many capturing
-subpatterns there are in a compiled pattern. The smallest size for
-\fIovector\fR that will allow for \fIn\fR captured substrings in addition to
-the offsets of the substring matched by the whole pattern is (\fIn\fR+1)*3.
-
-If \fBpcre_exec()\fR fails, it returns a negative number. The following are
-defined in the header file:
-
- PCRE_ERROR_NOMATCH (-1)
-
-The subject string did not match the pattern.
-
- PCRE_ERROR_NULL (-2)
-
-Either \fIcode\fR or \fIsubject\fR was passed as NULL, or \fIovector\fR was
-NULL and \fIovecsize\fR was not zero.
-
- PCRE_ERROR_BADOPTION (-3)
-
-An unrecognized bit was set in the \fIoptions\fR argument.
-
- PCRE_ERROR_BADMAGIC (-4)
-
-PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch
-the case when it is passed a junk pointer. This is the error it gives when the
-magic number isn't present.
-
- PCRE_ERROR_UNKNOWN_NODE (-5)
-
-While running the pattern match, an unknown item was encountered in the
-compiled pattern. This error could be caused by a bug in PCRE or by overwriting
-of the compiled pattern.
-
- PCRE_ERROR_NOMEMORY (-6)
-
-If a pattern contains back references, but the \fIovector\fR that is passed to
-\fBpcre_exec()\fR is not big enough to remember the referenced substrings, PCRE
-gets a block of memory at the start of matching to use for this purpose. If the
-call via \fBpcre_malloc()\fR fails, this error is given. The memory is freed at
-the end of matching.
-
-
-.SH EXTRACTING CAPTURED SUBSTRINGS
-Captured substrings can be accessed directly by using the offsets returned by
-\fBpcre_exec()\fR in \fIovector\fR. For convenience, the functions
-\fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
-\fBpcre_get_substring_list()\fR are provided for extracting captured substrings
-as new, separate, zero-terminated strings. A substring that contains a binary
-zero is correctly extracted and has a further zero added on the end, but the
-result does not, of course, function as a C string.
-
-The first three arguments are the same for all three functions: \fIsubject\fR
-is the subject string which has just been successfully matched, \fIovector\fR
-is a pointer to the vector of integer offsets that was passed to
-\fBpcre_exec()\fR, and \fIstringcount\fR is the number of substrings that
-were captured by the match, including the substring that matched the entire
-regular expression. This is the value returned by \fBpcre_exec\fR if it
-is greater than zero. If \fBpcre_exec()\fR returned zero, indicating that it
-ran out of space in \fIovector\fR, the value passed as \fIstringcount\fR should
-be the size of the vector divided by three.
-
-The functions \fBpcre_copy_substring()\fR and \fBpcre_get_substring()\fR
-extract a single substring, whose number is given as \fIstringnumber\fR. A
-value of zero extracts the substring that matched the entire pattern, while
-higher values extract the captured substrings. For \fBpcre_copy_substring()\fR,
-the string is placed in \fIbuffer\fR, whose length is given by
-\fIbuffersize\fR, while for \fBpcre_get_substring()\fR a new block of memory is
-obtained via \fBpcre_malloc\fR, and its address is returned via
-\fIstringptr\fR. The yield of the function is the length of the string, not
-including the terminating zero, or one of
-
- PCRE_ERROR_NOMEMORY (-6)
-
-The buffer was too small for \fBpcre_copy_substring()\fR, or the attempt to get
-memory failed for \fBpcre_get_substring()\fR.
-
- PCRE_ERROR_NOSUBSTRING (-7)
-
-There is no substring whose number is \fIstringnumber\fR.
-
-The \fBpcre_get_substring_list()\fR function extracts all available substrings
-and builds a list of pointers to them. All this is done in a single block of
-memory which is obtained via \fBpcre_malloc\fR. The address of the memory block
-is returned via \fIlistptr\fR, which is also the start of the list of string
-pointers. The end of the list is marked by a NULL pointer. The yield of the
-function is zero if all went well, or
-
- PCRE_ERROR_NOMEMORY (-6)
-
-if the attempt to get the memory block failed.
-
-When any of these functions encounter a substring that is unset, which can
-happen when capturing subpattern number \fIn+1\fR matches some part of the
-subject, but subpattern \fIn\fR has not been used at all, they return an empty
-string. This can be distinguished from a genuine zero-length substring by
-inspecting the appropriate offset in \fIovector\fR, which is negative for unset
-substrings.
-
-The two convenience functions \fBpcre_free_substring()\fR and
-\fBpcre_free_substring_list()\fR can be used to free the memory returned by
-a previous call of \fBpcre_get_substring()\fR or
-\fBpcre_get_substring_list()\fR, respectively. They do nothing more than call
-the function pointed to by \fBpcre_free\fR, which of course could be called
-directly from a C program. However, PCRE is used in some situations where it is
-linked via a special interface to another programming language which cannot use
-\fBpcre_free\fR directly; it is for these cases that the functions are
-provided.
-
-
-.SH LIMITATIONS
-There are some size limitations in PCRE but it is hoped that they will never in
-practice be relevant.
-The maximum length of a compiled pattern is 65539 (sic) bytes.
-All values in repeating quantifiers must be less than 65536.
-There maximum number of capturing subpatterns is 65535.
-There is no limit to the number of non-capturing subpatterns, but the maximum
-depth of nesting of all kinds of parenthesized subpattern, including capturing
-subpatterns, assertions, and other types of subpattern, is 200.
-
-The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
-
-
-.SH DIFFERENCES FROM PERL
-The differences described here are with respect to Perl 5.005.
-
-1. By default, a whitespace character is any character that the C library
-function \fBisspace()\fR recognizes, though it is possible to compile PCRE with
-alternative character type tables. Normally \fBisspace()\fR matches space,
-formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5
-no longer includes vertical tab in its set of whitespace characters. The \\v
-escape that was in the Perl documentation for a long time was never in fact
-recognized. However, the character itself was treated as whitespace at least
-up to 5.002. In 5.004 and 5.005 it does not match \\s.
-
-2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits
-them, but they do not mean what you might think. For example, (?!a){3} does
-not assert that the next three characters are not "a". It just asserts that the
-next character is not "a" three times.
-
-3. Capturing subpatterns that occur inside negative lookahead assertions are
-counted, but their entries in the offsets vector are never set. Perl sets its
-numerical variables from any such patterns that are matched before the
-assertion fails to match something (thereby succeeding), but only if the
-negative lookahead assertion contains just one branch.
-
-4. Though binary zero characters are supported in the subject string, they are
-not allowed in a pattern string because it is passed as a normal C string,
-terminated by zero. The escape sequence "\\0" can be used in the pattern to
-represent a binary zero.
-
-5. The following Perl escape sequences are not supported: \\l, \\u, \\L, \\U,
-\\E, \\Q. In fact these are implemented by Perl's general string-handling and
-are not part of its pattern matching engine.
-
-6. The Perl \\G assertion is not supported as it is not relevant to single
-pattern matches.
-
-7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-constructions. However, there is some experimental support for recursive
-patterns using the non-Perl item (?R).
-
-8. There are at the time of writing some oddities in Perl 5.005_02 concerned
-with the settings of captured strings when part of a pattern is repeated. For
-example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
-"b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if
-the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-
-In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the
-future Perl changes to a consistent state that is different, PCRE may change to
-follow.
-
-9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern
-/^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not.
-However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-
-10. PCRE provides some extensions to the Perl regular expression facilities:
-
-(a) Although lookbehind assertions must match fixed length strings, each
-alternative branch of a lookbehind assertion can match a different length of
-string. Perl 5.005 requires them all to have the same length.
-
-(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-
-character matches only at the very end of the string.
-
-(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
-meaning is faulted.
-
-(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
-inverted, that is, by default they are not greedy, but if followed by a
-question mark they are.
-
-(e) PCRE_ANCHORED can be used to force a pattern to be tried only at the start
-of the subject.
-
-(f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options for
-\fBpcre_exec()\fR have no Perl equivalents.
-
-(g) The (?R) construct allows for recursive pattern matching (Perl 5.6 can do
-this using the (?p{code}) construct, which PCRE cannot of course support.)
-
-
-.SH REGULAR EXPRESSION DETAILS
-The syntax and semantics of the regular expressions supported by PCRE are
-described below. Regular expressions are also described in the Perl
-documentation and in a number of other books, some of which have copious
-examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
-O'Reilly (ISBN 1-56592-257), covers them in great detail.
-
-The description here is intended as reference documentation. The basic
-operation of PCRE is on strings of bytes. However, there is the beginnings of
-some support for UTF-8 character strings. To use this support you must
-configure PCRE to include it, and then call \fBpcre_compile()\fR with the
-PCRE_UTF8 option. How this affects the pattern matching is described in the
-final section of this document.
-
-A regular expression is a pattern that is matched against a subject string from
-left to right. Most characters stand for themselves in a pattern, and match the
-corresponding characters in the subject. As a trivial example, the pattern
-
- The quick brown fox
-
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
-\fImeta-characters\fR, which do not stand for themselves but instead are
-interpreted in some special way.
-
-There are two different sets of meta-characters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized in square brackets. Outside square brackets, the meta-characters are
-as follows:
-
- \\ general escape character with several uses
- ^ assert start of subject (or line, in multiline mode)
- $ assert end of subject (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- { start min/max quantifier
-
-Part of a pattern that is in square brackets is called a "character class". In
-a character class the only meta-characters are:
-
- \\ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- ] terminates the character class
-
-The following sections describe the use of each of the meta-characters.
-
-
-.SH BACKSLASH
-The backslash character has several uses. Firstly, if it is followed by a
-non-alphameric character, it takes away any special meaning that character may
-have. This use of backslash as an escape character applies both inside and
-outside character classes.
-
-For example, if you want to match a "*" character, you write "\\*" in the
-pattern. This applies whether or not the following character would otherwise be
-interpreted as a meta-character, so it is always safe to precede a
-non-alphameric with "\\" to specify that it stands for itself. In particular,
-if you want to match a backslash, you write "\\\\".
-
-If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the
-pattern (other than in a character class) and characters between a "#" outside
-a character class and the next newline character are ignored. An escaping
-backslash can be used to include a whitespace or "#" character as part of the
-pattern.
-
-A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:
-
- \\a alarm, that is, the BEL character (hex 07)
- \\cx "control-x", where x is any character
- \\e escape (hex 1B)
- \\f formfeed (hex 0C)
- \\n newline (hex 0A)
- \\r carriage return (hex 0D)
- \\t tab (hex 09)
- \\xhh character with hex code hh
- \\ddd character with octal code ddd, or backreference
-
-The precise effect of "\\cx" is as follows: if "x" is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus "\\cz" becomes hex 1A, but "\\c{" becomes hex 3B, while "\\c;" becomes hex
-7B.
-
-After "\\x", up to two hexadecimal digits are read (letters can be in upper or
-lower case).
-
-After "\\0" up to two further octal digits are read. In both cases, if there
-are fewer than two digits, just those that are present are used. Thus the
-sequence "\\0\\x\\07" specifies two binary zeros followed by a BEL character.
-Make sure you supply two digits after the initial zero if the character that
-follows is itself an octal digit.
-
-The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a \fIback reference\fR. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.
-
-Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and generates a single byte from the least
-significant 8 bits of the value. Any subsequent digits stand for themselves.
-For example:
-
- \\040 is another way of writing a space
- \\40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \\7 is always a back reference
- \\11 might be a back reference, or another way of
- writing a tab
- \\011 is always a tab
- \\0113 is a tab followed by the character "3"
- \\113 is the character with octal code 113 (since there
- can be no more than 99 back references)
- \\377 is a byte consisting entirely of 1 bits
- \\81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-
-Note that octal values of 100 or greater must not be introduced by a leading
-zero, because no more than three octal digits are ever read.
-
-All the sequences that define a single byte value can be used both inside and
-outside character classes. In addition, inside a character class, the sequence
-"\\b" is interpreted as the backspace character (hex 08). Outside a character
-class it has a different meaning (see below).
-
-The third use of backslash is for specifying generic character types:
-
- \\d any decimal digit
- \\D any character that is not a decimal digit
- \\s any whitespace character
- \\S any character that is not a whitespace character
- \\w any "word" character
- \\W any "non-word" character
-
-Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.
-
-A "word" character is any letter or digit or the underscore character, that is,
-any character which can be part of a Perl "word". The definition of letters and
-digits is controlled by PCRE's character tables, and may vary if locale-
-specific matching is taking place (see "Locale support" above). For example, in
-the "fr" (French) locale, some character codes greater than 128 are used for
-accented letters, and these are matched by \\w.
-
-These character type sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
-there is no character to match.
-
-The fourth use of backslash is for certain simple assertions. An assertion
-specifies a condition that has to be met at a particular point in a match,
-without consuming any characters from the subject string. The use of
-subpatterns for more complicated assertions is described below. The backslashed
-assertions are
-
- \\b word boundary
- \\B not a word boundary
- \\A start of subject (independent of multiline mode)
- \\Z end of subject or newline at end (independent of multiline mode)
- \\z end of subject (independent of multiline mode)
-
-These assertions may not appear in character classes (but note that "\\b" has a
-different meaning, namely the backspace character, inside a character class).
-
-A word boundary is a position in the subject string where the current character
-and the previous character do not both match \\w or \\W (i.e. one matches
-\\w and the other matches \\W), or the start or end of the string if the
-first or last character matches \\w, respectively.
-
-The \\A, \\Z, and \\z assertions differ from the traditional circumflex and
-dollar (described below) in that they only ever match at the very start and end
-of the subject string, whatever options are set. They are not affected by the
-PCRE_NOTBOL or PCRE_NOTEOL options. If the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero, \\A can never match. The difference between \\Z
-and \\z is that \\Z matches before a newline that is the last character of the
-string as well as at the end of the string, whereas \\z matches only at the
-end.
-
-
-.SH CIRCUMFLEX AND DOLLAR
-Outside a character class, in the default matching mode, the circumflex
-character is an assertion which is true only if the current matching point is
-at the start of the subject string. If the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero, circumflex can never match. Inside a character
-class, circumflex has an entirely different meaning (see below).
-
-Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)
-
-A dollar character is an assertion which is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-character that is the last character in the string (by default). Dollar need
-not be the last character of the pattern if a number of alternatives are
-involved, but it should be the last item in any branch in which it appears.
-Dollar has no special meaning in a character class.
-
-The meaning of dollar can be changed so that it matches only at the very end of
-the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching
-time. This does not affect the \\Z assertion.
-
-The meanings of the circumflex and dollar characters are changed if the
-PCRE_MULTILINE option is set. When this is the case, they match immediately
-after and immediately before an internal "\\n" character, respectively, in
-addition to matching at the start and end of the subject string. For example,
-the pattern /^abc$/ matches the subject string "def\\nabc" in multiline mode,
-but not otherwise. Consequently, patterns that are anchored in single line mode
-because all branches start with "^" are not anchored in multiline mode, and a
-match for circumflex is possible when the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
-PCRE_MULTILINE is set.
-
-Note that the sequences \\A, \\Z, and \\z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\\A it is always anchored, whether PCRE_MULTILINE is set or not.
-
-
-.SH FULL STOP (PERIOD, DOT)
-Outside a character class, a dot in the pattern matches any one character in
-the subject, including a non-printing character, but not (by default) newline.
-If the PCRE_DOTALL option is set, dots match newlines as well. The handling of
-dot is entirely independent of the handling of circumflex and dollar, the only
-relationship being that they both involve newline characters. Dot has no
-special meaning in a character class.
-
-
-.SH SQUARE BRACKETS
-An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special. If a
-closing square bracket is required as a member of the class, it should be the
-first data character in the class (after an initial circumflex, if present) or
-escaped with a backslash.
-
-A character class matches a single character in the subject; the character must
-be in the set of characters defined by the class, unless the first character in
-the class is a circumflex, in which case the subject character must not be in
-the set defined by the class. If a circumflex is actually required as a member
-of the class, ensure it is not the first character, or escape it with a
-backslash.
-
-For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters which
-are in the class by enumerating those that are not. It is not an assertion: it
-still consumes a character from the subject string, and fails if the current
-pointer is at the end of the string.
-
-When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-
-The newline character is never treated in any special way in character classes,
-whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
-such as [^a] will always match a newline.
-
-The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.
-
-It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\\]46] is interpreted as a single class containing a
-range followed by two separate characters. The octal or hexadecimal
-representation of "]" can also be used to end a range.
-
-Ranges operate in ASCII collating sequence. They can also be used for
-characters specified numerically, for example [\\000-\\037]. If a range that
-includes letters is used when caseless matching is set, it matches the letters
-in either case. For example, [W-c] is equivalent to [][\\^_`wxyzabc], matched
-caselessly, and if character tables for the "fr" locale are in use,
-[\\xc8-\\xcb] matches accented E characters in both cases.
-
-The character types \\d, \\D, \\s, \\S, \\w, and \\W may also appear in a
-character class, and add the characters that they match to the class. For
-example, [\\dABCDEF] matches any hexadecimal digit. A circumflex can
-conveniently be used with the upper case character types to specify a more
-restricted set of characters than the matching lower case type. For example,
-the class [^\\W_] matches any letter or digit, but not underscore.
-
-All non-alphameric characters other than \\, -, ^ (at the start) and the
-terminating ] are non-special in character classes, but it does no harm if they
-are escaped.
-
-
-.SH POSIX CHARACTER CLASSES
-Perl 5.6 (not yet released at the time of writing) is going to support the
-POSIX notation for character classes, which uses names enclosed by [: and :]
-within the enclosing square brackets. PCRE supports this notation. For example,
-
- [01[:alpha:]%]
-
-matches "0", "1", any alphabetic character, or "%". The supported class names
-are
-
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- cntrl control characters
- digit decimal digits (same as \\d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (same as \\s)
- upper upper case letters
- word "word" characters (same as \\w)
- xdigit hexadecimal digits
-
-The names "ascii" and "word" are Perl extensions. Another Perl extension is
-negation, which is indicated by a ^ character after the colon. For example,
-
- [12[:^digit:]]
-
-matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.
-
-
-.SH VERTICAL BAR
-Vertical bar characters are used to separate alternative patterns. For example,
-the pattern
-
- gilbert|sullivan
-
-matches either "gilbert" or "sullivan". Any number of alternatives may appear,
-and an empty alternative is permitted (matching the empty string).
-The matching process tries each alternative in turn, from left to right,
-and the first one that succeeds is used. If the alternatives are within a
-subpattern (defined below), "succeeds" means matching the rest of the main
-pattern as well as the alternative in the subpattern.
-
-
-.SH INTERNAL OPTION SETTING
-The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED
-can be changed from within the pattern by a sequence of Perl option letters
-enclosed between "(?" and ")". The option letters are
-
- i for PCRE_CASELESS
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-
-For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets PCRE_CASELESS and
-PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.
-
-The scope of these option changes depends on where in the pattern the setting
-occurs. For settings that are outside any subpattern (defined below), the
-effect is the same as if the options were set or unset at the start of
-matching. The following patterns all behave in exactly the same way:
-
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-
-which in turn is the same as compiling the pattern abc with PCRE_CASELESS set.
-In other words, such "top level" settings apply to the whole pattern (unless
-there are other changes inside subpatterns). If there is more than one setting
-of the same option at top level, the rightmost setting is used.
-
-If an option change occurs inside a subpattern, the effect is different. This
-is a change of behaviour in Perl 5.005. An option change inside a subpattern
-affects only that part of the subpattern that follows it, so
-
- (a(?i)b)c
-
-matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used).
-By this means, options can be made to have different settings in different
-parts of the pattern. Any changes made in one alternative do carry on
-into subsequent branches within the same subpattern. For example,
-
- (a(?i)b|c)
-
-matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.
-
-The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the
-same way as the Perl-compatible options by using the characters U and X
-respectively. The (?X) flag setting is special in that it must always occur
-earlier in the pattern than any of the additional features it turns on, even
-when it is at top level. It is best put at the start.
-
-
-.SH SUBPATTERNS
-Subpatterns are delimited by parentheses (round brackets), which can be nested.
-Marking part of a pattern as a subpattern does two things:
-
-1. It localizes a set of alternatives. For example, the pattern
-
- cat(aract|erpillar|)
-
-matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or the empty string.
-
-2. It sets up the subpattern as a capturing subpattern (as defined above).
-When the whole pattern matches, that portion of the subject string that matched
-the subpattern is passed back to the caller via the \fIovector\fR argument of
-\fBpcre_exec()\fR. Opening parentheses are counted from left to right (starting
-from 1) to obtain the numbers of the capturing subpatterns.
-
-For example, if the string "the red king" is matched against the pattern
-
- the ((red|white) (king|queen))
-
-the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3, respectively.
-
-The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by "?:", the
-subpattern does not do any capturing, and is not counted when computing the
-number of any subsequent capturing subpatterns. For example, if the string "the
-white queen" is matched against the pattern
-
- the ((?:red|white) (king|queen))
-
-the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of captured substrings is 99, and the maximum number of
-all subpatterns, both capturing and non-capturing, is 200.
-
-As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns
-
- (?i:saturday|sunday)
- (?:(?i)saturday|sunday)
-
-match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".
-
-
-.SH REPETITION
-Repetition is specified by quantifiers, which can follow any of the following
-items:
-
- a single character, possibly escaped
- the . metacharacter
- a character class
- a back reference (see next section)
- a parenthesized subpattern (unless it is an assertion - see below)
-
-The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:
-
- z{2,4}
-
-matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus
-
- [aeiou]{3,}
-
-matches at least 3 successive vowels, but may match many more, while
-
- \\d{8}
-
-matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.
-
-The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.
-
-For convenience (and historical compatibility) the three most common
-quantifiers have single-character abbreviations:
-
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-
-It is possible to construct infinite loops by following a subpattern that can
-match no characters with a quantifier that has no upper limit, for example:
-
- (a?)*
-
-Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.
-
-By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between the
-sequences /* and */ and within the sequence, individual * and / characters may
-appear. An attempt to match C comments by applying the pattern
-
- /\\*.*\\*/
-
-to the string
-
- /* first command */ not comment /* second comment */
-
-fails, because it matches the entire string owing to the greediness of the .*
-item.
-
-However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern
-
- /\\*.*?\\*/
-
-does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in
-
- \\d??\\d
-
-which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.
-
-If the PCRE_UNGREEDY option is set (an option which is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.
-
-When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more store is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.
-
-If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent
-to Perl's /s) is set, thus allowing the . to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE treats such a pattern as
-though it were preceded by \\A. In cases where it is known that the subject
-string contains no newlines, it is worth setting PCRE_DOTALL when the pattern
-begins with .* in order to obtain this optimization, or alternatively using ^
-to indicate anchoring explicitly.
-
-When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after
-
- (tweedle[dume]{3}\\s*)+
-
-has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after
-
- /(a|(b))+/
-
-matches "aba" the value of the second captured substring is "b".
-
-
-.SH BACK REFERENCES
-Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(i.e. to its left) in the pattern, provided there have been that many previous
-capturing left parentheses.
-
-However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. See the section entitled "Backslash" above for further
-details of the handling of digits following a backslash.
-
-A back reference matches whatever actually matched the capturing subpattern in
-the current subject string, rather than anything matching the subpattern
-itself. So the pattern
-
- (sens|respons)e and \\1ibility
-
-matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,
-
- ((?i)rah)\\s+\\1
-
-matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.
-
-There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern
-
- (a|(bc))\\2
-
-always fails if it starts to match "a" rather than "bc". Because there may be
-up to 99 back references, all digits following the backslash are taken
-as part of a potential back reference number. If the pattern continues with a
-digit character, some delimiter must be used to terminate the back reference.
-If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty
-comment can be used.
-
-A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern
-
- (a|b\\1)+
-
-matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.
-
-
-.SH ASSERTIONS
-An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \\b, \\B, \\A, \\Z, \\z, ^ and $ are described above. More
-complicated assertions are coded as subpatterns. There are two kinds: those
-that look ahead of the current position in the subject string, and those that
-look behind it.
-
-An assertion subpattern is matched in the normal way, except that it does not
-cause the current matching position to be changed. Lookahead assertions start
-with (?= for positive assertions and (?! for negative assertions. For example,
-
- \\w+(?=;)
-
-matches a word followed by a semicolon, but does not include the semicolon in
-the match, and
-
- foo(?!bar)
-
-matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern
-
- (?!foo)bar
-
-does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve this effect.
-
-Lookbehind assertions start with (?<= for positive assertions and (?<! for
-negative assertions. For example,
-
- (?<!foo)bar
-
-does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several alternatives, they do not
-all have to have the same fixed length. Thus
-
- (?<=bullock|donkey)
-
-is permitted, but
-
- (?<!dogs?|cats?)
-
-causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl 5.005, which requires all branches to match the
-same length of string. An assertion such as
-
- (?<=ab(c|de))
-
-is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:
-
- (?<=abc|abde)
-
-The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed width and then try to
-match. If there are insufficient characters before the current position, the
-match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns
-can be particularly useful for matching at the ends of strings; an example is
-given at the end of the section on once-only subpatterns.
-
-Several assertions (of any sort) may occur in succession. For example,
-
- (?<=\\d{3})(?<!999)foo
-
-matches "foo" preceded by three digits that are not "999". Notice that each of
-the assertions is applied independently at the same point in the subject
-string. First there is a check that the previous three characters are all
-digits, and then there is a check that the same three characters are not "999".
-This pattern does \fInot\fR match "foo" preceded by six characters, the first
-of which are digits and the last three of which are not "999". For example, it
-doesn't match "123abcfoo". A pattern to do that is
-
- (?<=\\d{3}...)(?<!999)foo
-
-This time the first assertion looks at the preceding six characters, checking
-that the first three are digits, and then the second assertion checks that the
-preceding three characters are not "999".
-
-Assertions can be nested in any combination. For example,
-
- (?<=(?<!foo)bar)baz
-
-matches an occurrence of "baz" that is preceded by "bar" which in turn is not
-preceded by "foo", while
-
- (?<=\\d{3}(?!999)...)foo
-
-is another pattern which matches "foo" preceded by three digits and any three
-characters that are not "999".
-
-Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.
-
-Assertions count towards the maximum of 200 parenthesized subpatterns.
-
-
-.SH ONCE-ONLY SUBPATTERNS
-With both maximizing and minimizing repetition, failure of what follows
-normally causes the repeated item to be re-evaluated to see if a different
-number of repeats allows the rest of the pattern to match. Sometimes it is
-useful to prevent this, either to change the nature of the match, or to cause
-it fail earlier than it otherwise might, when the author of the pattern knows
-there is no point in carrying on.
-
-Consider, for example, the pattern \\d+foo when applied to the subject line
-
- 123456bar
-
-After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \\d+
-item, and then with 4, and so on, before ultimately failing. Once-only
-subpatterns provide the means for specifying that once a portion of the pattern
-has matched, it is not to be re-evaluated in this way, so the matcher would
-give up immediately on failing to match "foo" the first time. The notation is
-another kind of special parenthesis, starting with (?> as in this example:
-
- (?>\\d+)bar
-
-This kind of parenthesis "locks up" the part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.
-
-An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.
-
-Once-only subpatterns are not capturing subpatterns. Simple cases such as the
-above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \\d+ and \\d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?>\\d+) can only match an entire sequence of digits.
-
-This construction can of course contain arbitrarily complicated subpatterns,
-and it can be nested.
-
-Once-only subpatterns can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as
-
- abcd$
-
-when applied to a long string which does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as
-
- ^.*abcd$
-
-the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as
-
- ^(?>.*)(?<=abcd)
-
-there can be no backtracking for the .* item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.
-
-When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of a once-only subpattern is
-the only way to avoid some failing matches taking a very long time indeed.
-The pattern
-
- (\\D+|<\\d+>)*[!?]
-
-matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in <>, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to
-
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-it takes a long time before reporting failure. This is because the string can
-be divided between the two repeats in a large number of ways, and all have to
-be tried. (The example used [!?] rather than a single character at the end,
-because both PCRE and Perl have an optimization that allows for fast failure
-when a single character is used. They remember the last single character that
-is required for a match, and fail early if it is not present in the string.)
-If the pattern is changed to
-
- ((?>\\D+)|<\\d+>)*[!?]
-
-sequences of non-digits cannot be broken, and failure happens quickly.
-
-
-.SH CONDITIONAL SUBPATTERNS
-It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are
-
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-
-If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.
-
-There are two kinds of condition. If the text between the parentheses consists
-of a sequence of digits, the condition is satisfied if the capturing subpattern
-of that number has previously matched. The number must be greater than zero.
-Consider the following pattern, which contains non-significant white space to
-make it more readable (assume the PCRE_EXTENDED option) and to divide it into
-three parts for ease of discussion:
-
- ( \\( )? [^()]+ (?(1) \\) )
-
-The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.
-
-If the condition is not a sequence of digits, it must be an assertion. This may
-be a positive or negative lookahead or lookbehind assertion. Consider this
-pattern, again containing non-significant white space, and with the two
-alternatives on the second line:
-
- (?(?=[^a-z]*[a-z])
- \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} )
-
-The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
-
-
-.SH COMMENTS
-The sequence (?# marks the start of a comment which continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.
-
-If the PCRE_EXTENDED option is set, an unescaped # character outside a
-character class introduces a comment that continues up to the next newline
-character in the pattern.
-
-
-.SH RECURSIVE PATTERNS
-Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth. Perl 5.6 has provided an
-experimental facility that allows regular expressions to recurse (amongst other
-things). It does this by interpolating Perl code in the expression at run time,
-and the code can refer to the expression itself. A Perl pattern to solve the
-parentheses problem can be created like this:
-
- $re = qr{\\( (?: (?>[^()]+) | (?p{$re}) )* \\)}x;
-
-The (?p{...}) item interpolates Perl code at run time, and in this case refers
-recursively to the pattern in which it appears. Obviously, PCRE cannot support
-the interpolation of Perl code. Instead, the special item (?R) is provided for
-the specific case of recursion. This PCRE pattern solves the parentheses
-problem (assume the PCRE_EXTENDED option is set so that white space is
-ignored):
-
- \\( ( (?>[^()]+) | (?R) )* \\)
-
-First it matches an opening parenthesis. Then it matches any number of
-substrings which can either be a sequence of non-parentheses, or a recursive
-match of the pattern itself (i.e. a correctly parenthesized substring). Finally
-there is a closing parenthesis.
-
-This particular example pattern contains nested unlimited repeats, and so the
-use of a once-only subpattern for matching strings of non-parentheses is
-important when applying the pattern to strings that do not match. For example,
-when it is applied to
-
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
-it yields "no match" quickly. However, if a once-only subpattern is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.
-
-The values set for any capturing subpatterns are those from the outermost level
-of the recursion at which the subpattern value is set. If the pattern above is
-matched against
-
- (ab(cd)ef)
-
-the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving
-
- \\( ( ( (?>[^()]+) | (?R) )* ) \\)
- ^ ^
- ^ ^
-the string they capture is "ab(cd)ef", the contents of the top level
-parentheses. If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using \fBpcre_malloc\fR, freeing it via \fBpcre_free\fR afterwards. If no
-memory can be obtained, it saves data for the first 15 capturing parentheses
-only, as there is no way to give an out-of-memory error from within a
-recursion.
-
-
-.SH PERFORMANCE
-Certain items that may appear in patterns are more efficient than others. It is
-more efficient to use a character class like [aeiou] than a set of alternatives
-such as (a|e|i|o|u). In general, the simplest construction that provides the
-required behaviour is usually the most efficient. Jeffrey Friedl's book
-contains a lot of discussion about optimizing regular expressions for efficient
-performance.
-
-When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is
-implicitly anchored by PCRE, since it can match only at the start of a subject
-string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization,
-because the . metacharacter does not then match a newline, and if the subject
-string contains newlines, the pattern may match from the character immediately
-following one of them instead of from the very start. For example, the pattern
-
- (.*) second
-
-matches the subject "first\\nand second" (where \\n stands for a newline
-character) with the first captured substring being "and". In order to do this,
-PCRE has to retry the match starting after every newline in the subject.
-
-If you are using such a pattern with subject strings that do not contain
-newlines, the best performance is obtained by setting PCRE_DOTALL, or starting
-the pattern with ^.* to indicate explicit anchoring. That saves PCRE from
-having to scan along the subject looking for a newline to restart at.
-
-Beware of patterns that contain nested indefinite repeats. These can take a
-long time to run when applied to a string that does not match. Consider the
-pattern fragment
-
- (a+)*
-
-This can match "aaaa" in 33 different ways, and this number increases very
-rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
-times, and for each of those cases other than 0, the + repeats can match
-different numbers of times.) When the remainder of the pattern is such that the
-entire match is going to fail, PCRE has in principle to try every possible
-variation, and this can take an extremely long time.
-
-An optimization catches some of the more simple cases such as
-
- (a+)*b
-
-where a literal character follows. Before embarking on the standard matching
-procedure, PCRE checks that there is a "b" later in the subject string, and if
-there is not, it fails the match immediately. However, when there is no
-following literal this optimization cannot be used. You can see the difference
-by comparing the behaviour of
-
- (a+)*\\d
-
-with the pattern above. The former gives a failure almost instantly when
-applied to a whole line of "a" characters, whereas the latter takes an
-appreciable time with strings longer than about 20 characters.
-
-
-.SH UTF-8 SUPPORT
-Starting at release 3.3, PCRE has some support for character strings encoded
-in the UTF-8 format. This is incomplete, and is regarded as experimental. In
-order to use it, you must configure PCRE to include UTF-8 support in the code,
-and, in addition, you must call \fBpcre_compile()\fR with the PCRE_UTF8 option
-flag. When you do this, both the pattern and any subject strings that are
-matched against it are treated as UTF-8 strings instead of just strings of
-bytes, but only in the cases that are mentioned below.
-
-If you compile PCRE with UTF-8 support, but do not use it at run time, the
-library will be a bit bigger, but the additional run time overhead is limited
-to testing the PCRE_UTF8 flag in several places, so should not be very large.
-
-PCRE assumes that the strings it is given contain valid UTF-8 codes. It does
-not diagnose invalid UTF-8 strings. If you pass invalid UTF-8 strings to PCRE,
-the results are undefined.
-
-Running with PCRE_UTF8 set causes these changes in the way PCRE works:
-
-1. In a pattern, the escape sequence \\x{...}, where the contents of the braces
-is a string of hexadecimal digits, is interpreted as a UTF-8 character whose
-code number is the given hexadecimal number, for example: \\x{1234}. This
-inserts from one to six literal bytes into the pattern, using the UTF-8
-encoding. If a non-hexadecimal digit appears between the braces, the item is
-not recognized.
-
-2. The original hexadecimal escape sequence, \\xhh, generates a two-byte UTF-8
-character if its value is greater than 127.
-
-3. Repeat quantifiers are NOT correctly handled if they follow a multibyte
-character. For example, \\x{100}* and \\xc3+ do not work. If you want to
-repeat such characters, you must enclose them in non-capturing parentheses,
-for example (?:\\x{100}), at present.
-
-4. The dot metacharacter matches one UTF-8 character instead of a single byte.
-
-5. Unlike literal UTF-8 characters, the dot metacharacter followed by a
-repeat quantifier does operate correctly on UTF-8 characters instead of
-single bytes.
-
-4. Although the \\x{...} escape is permitted in a character class, characters
-whose values are greater than 255 cannot be included in a class.
-
-5. A class is matched against a UTF-8 character instead of just a single byte,
-but it can match only characters whose values are less than 256. Characters
-with greater values always fail to match a class.
-
-6. Repeated classes work correctly on multiple characters.
-
-7. Classes containing just a single character whose value is greater than 127
-(but less than 256), for example, [\\x80] or [^\\x{93}], do not work because
-these are optimized into single byte matches. In the first case, of course,
-the class brackets are just redundant.
-
-8. Lookbehind assertions move backwards in the subject by a fixed number of
-characters instead of a fixed number of bytes. Simple cases have been tested
-to work correctly, but there may be hidden gotchas herein.
-
-9. The character types such as \\d and \\w do not work correctly with UTF-8
-characters. They continue to test a single byte.
-
-10. Anything not explicitly mentioned here continues to work in bytes rather
-than in characters.
-
-The following UTF-8 features of Perl 5.6 are not implemented:
-
-1. The escape sequence \\C to match a single byte.
-
-2. The use of Unicode tables and properties and escapes \\p, \\P, and \\X.
-
-
-.SH SAMPLE PROGRAM
-The code below is a simple, complete demonstration program, to get you started
-with using PCRE. This code is also supplied in the file \fIpcredemo.c\fR in the
-PCRE distribution.
-
-The program compiles the regular expression that is its first argument, and
-matches it against the subject string in its second argument. No options are
-set, and default character tables are used. If matching succeeds, the program
-outputs the portion of the subject that matched, together with the contents of
-any captured substrings.
-
-On a Unix system that has PCRE installed in \fI/usr/local\fR, you can compile
-the demonstration program using a command like this:
-
- gcc -o pcredemo pcredemo.c -I/usr/local/include -L/usr/local/lib -lpcre
-
-Then you can run simple tests like this:
-
- ./pcredemo 'cat|dog' 'the cat sat on the mat'
-
-Note that there is a much more comprehensive test program, called
-\fBpcretest\fR, which supports many more facilities for testing regular
-expressions. The \fBpcredemo\fR program is provided as a simple coding example.
-
-On some operating systems (e.g. Solaris) you may get an error like this when
-you try to run \fBpcredemo\fR:
-
- ld.so.1: a.out: fatal: libpcre.so.0: open failed: No such file or directory
-
-This is caused by the way shared library support works on those systems. You
-need to add
-
- -R/usr/local/lib
-
-to the compile command to get round this problem. Here's the code:
-
- #include <stdio.h>
- #include <string.h>
- #include <pcre.h>
-
- #define OVECCOUNT 30 /* should be a multiple of 3 */
-
- int main(int argc, char **argv)
- {
- pcre *re;
- const char *error;
- int erroffset;
- int ovector[OVECCOUNT];
- int rc, i;
-
- if (argc != 3)
- {
- printf("Two arguments required: a regex and a "
- "subject string\\n");
- return 1;
- }
-
- /* Compile the regular expression in the first argument */
-
- re = pcre_compile(
- argv[1], /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-
- /* Compilation failed: print the error message and exit */
-
- if (re == NULL)
- {
- printf("PCRE compilation failed at offset %d: %s\\n",
- erroffset, error);
- return 1;
- }
-
- /* Compilation succeeded: match the subject in the second
- argument */
-
- rc = pcre_exec(
- re, /* the compiled pattern */
- NULL, /* we didn't study the pattern */
- argv[2], /* the subject string */
- (int)strlen(argv[2]), /* the length of the subject */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- OVECCOUNT); /* number of elements in the vector */
-
- /* Matching failed: handle error cases */
-
- if (rc < 0)
- {
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: printf("No match\\n"); break;
- /*
- Handle other special cases if you like
- */
- default: printf("Matching error %d\\n", rc); break;
- }
- return 1;
- }
-
- /* Match succeded */
-
- printf("Match succeeded\\n");
-
- /* The output vector wasn't big enough */
-
- if (rc == 0)
- {
- rc = OVECCOUNT/3;
- printf("ovector only has room for %d captured "
- substrings\\n", rc - 1);
- }
-
- /* Show substrings stored in the output vector */
-
- for (i = 0; i < rc; i++)
- {
- char *substring_start = argv[2] + ovector[2*i];
- int substring_length = ovector[2*i+1] - ovector[2*i];
- printf("%2d: %.*s\\n", i, substring_length,
- substring_start);
- }
-
- return 0;
- }
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Last updated: 15 August 2001
-.br
-Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcre.html b/srclib/pcre/doc/pcre.html
deleted file mode 100644
index 3e9eb36b68..0000000000
--- a/srclib/pcre/doc/pcre.html
+++ /dev/null
@@ -1,2669 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcre specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcre specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">MULTI-THREADING</A>
-<LI><A NAME="TOC5" HREF="#SEC5">COMPILING A PATTERN</A>
-<LI><A NAME="TOC6" HREF="#SEC6">STUDYING A PATTERN</A>
-<LI><A NAME="TOC7" HREF="#SEC7">LOCALE SUPPORT</A>
-<LI><A NAME="TOC8" HREF="#SEC8">INFORMATION ABOUT A PATTERN</A>
-<LI><A NAME="TOC9" HREF="#SEC9">MATCHING A PATTERN</A>
-<LI><A NAME="TOC10" HREF="#SEC10">EXTRACTING CAPTURED SUBSTRINGS</A>
-<LI><A NAME="TOC11" HREF="#SEC11">LIMITATIONS</A>
-<LI><A NAME="TOC12" HREF="#SEC12">DIFFERENCES FROM PERL</A>
-<LI><A NAME="TOC13" HREF="#SEC13">REGULAR EXPRESSION DETAILS</A>
-<LI><A NAME="TOC14" HREF="#SEC14">BACKSLASH</A>
-<LI><A NAME="TOC15" HREF="#SEC15">CIRCUMFLEX AND DOLLAR</A>
-<LI><A NAME="TOC16" HREF="#SEC16">FULL STOP (PERIOD, DOT)</A>
-<LI><A NAME="TOC17" HREF="#SEC17">SQUARE BRACKETS</A>
-<LI><A NAME="TOC18" HREF="#SEC18">POSIX CHARACTER CLASSES</A>
-<LI><A NAME="TOC19" HREF="#SEC19">VERTICAL BAR</A>
-<LI><A NAME="TOC20" HREF="#SEC20">INTERNAL OPTION SETTING</A>
-<LI><A NAME="TOC21" HREF="#SEC21">SUBPATTERNS</A>
-<LI><A NAME="TOC22" HREF="#SEC22">REPETITION</A>
-<LI><A NAME="TOC23" HREF="#SEC23">BACK REFERENCES</A>
-<LI><A NAME="TOC24" HREF="#SEC24">ASSERTIONS</A>
-<LI><A NAME="TOC25" HREF="#SEC25">ONCE-ONLY SUBPATTERNS</A>
-<LI><A NAME="TOC26" HREF="#SEC26">CONDITIONAL SUBPATTERNS</A>
-<LI><A NAME="TOC27" HREF="#SEC27">COMMENTS</A>
-<LI><A NAME="TOC28" HREF="#SEC28">RECURSIVE PATTERNS</A>
-<LI><A NAME="TOC29" HREF="#SEC29">PERFORMANCE</A>
-<LI><A NAME="TOC30" HREF="#SEC30">UTF-8 SUPPORT</A>
-<LI><A NAME="TOC31" HREF="#SEC31">SAMPLE PROGRAM</A>
-<LI><A NAME="TOC32" HREF="#SEC32">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcre - Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>#include &#60;pcre.h&#62;</B>
-</P>
-<P>
-<B>pcre *pcre_compile(const char *<I>pattern</I>, int <I>options</I>,</B>
-<B>const char **<I>errptr</I>, int *<I>erroffset</I>,</B>
-<B>const unsigned char *<I>tableptr</I>);</B>
-</P>
-<P>
-<B>pcre_extra *pcre_study(const pcre *<I>code</I>, int <I>options</I>,</B>
-<B>const char **<I>errptr</I>);</B>
-</P>
-<P>
-<B>int pcre_exec(const pcre *<I>code</I>, const pcre_extra *<I>extra</I>,</B>
-<B>const char *<I>subject</I>, int <I>length</I>, int <I>startoffset</I>,</B>
-<B>int <I>options</I>, int *<I>ovector</I>, int <I>ovecsize</I>);</B>
-</P>
-<P>
-<B>int pcre_copy_substring(const char *<I>subject</I>, int *<I>ovector</I>,</B>
-<B>int <I>stringcount</I>, int <I>stringnumber</I>, char *<I>buffer</I>,</B>
-<B>int <I>buffersize</I>);</B>
-</P>
-<P>
-<B>int pcre_get_substring(const char *<I>subject</I>, int *<I>ovector</I>,</B>
-<B>int <I>stringcount</I>, int <I>stringnumber</I>,</B>
-<B>const char **<I>stringptr</I>);</B>
-</P>
-<P>
-<B>int pcre_get_substring_list(const char *<I>subject</I>,</B>
-<B>int *<I>ovector</I>, int <I>stringcount</I>, const char ***<I>listptr</I>);</B>
-</P>
-<P>
-<B>void pcre_free_substring(const char *<I>stringptr</I>);</B>
-</P>
-<P>
-<B>void pcre_free_substring_list(const char **<I>stringptr</I>);</B>
-</P>
-<P>
-<B>const unsigned char *pcre_maketables(void);</B>
-</P>
-<P>
-<B>int pcre_fullinfo(const pcre *<I>code</I>, const pcre_extra *<I>extra</I>,</B>
-<B>int <I>what</I>, void *<I>where</I>);</B>
-</P>
-<P>
-<B>int pcre_info(const pcre *<I>code</I>, int *<I>optptr</I>, int</B>
-<B>*<I>firstcharptr</I>);</B>
-</P>
-<P>
-<B>char *pcre_version(void);</B>
-</P>
-<P>
-<B>void *(*pcre_malloc)(size_t);</B>
-</P>
-<P>
-<B>void (*pcre_free)(void *);</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-The PCRE library is a set of functions that implement regular expression
-pattern matching using the same syntax and semantics as Perl 5, with just a few
-differences (see below). The current implementation corresponds to Perl 5.005,
-with some additional features from later versions. This includes some
-experimental, incomplete support for UTF-8 encoded strings. Details of exactly
-what is and what is not supported are given below.
-</P>
-<P>
-PCRE has its own native API, which is described in this document. There is also
-a set of wrapper functions that correspond to the POSIX regular expression API.
-These are described in the <B>pcreposix</B> documentation.
-</P>
-<P>
-The native API function prototypes are defined in the header file <B>pcre.h</B>,
-and on Unix systems the library itself is called <B>libpcre.a</B>, so can be
-accessed by adding <B>-lpcre</B> to the command for linking an application which
-calls it. The header file defines the macros PCRE_MAJOR and PCRE_MINOR to
-contain the major and minor release numbers for the library. Applications can
-use these to include support for different releases.
-</P>
-<P>
-The functions <B>pcre_compile()</B>, <B>pcre_study()</B>, and <B>pcre_exec()</B>
-are used for compiling and matching regular expressions. A sample program that
-demonstrates the simplest way of using them is given in the file
-<I>pcredemo.c</I>. The last section of this man page describes how to run it.
-</P>
-<P>
-The functions <B>pcre_copy_substring()</B>, <B>pcre_get_substring()</B>, and
-<B>pcre_get_substring_list()</B> are convenience functions for extracting
-captured substrings from a matched subject string; <B>pcre_free_substring()</B>
-and <B>pcre_free_substring_list()</B> are also provided, to free the memory used
-for extracted strings.
-</P>
-<P>
-The function <B>pcre_maketables()</B> is used (optionally) to build a set of
-character tables in the current locale for passing to <B>pcre_compile()</B>.
-</P>
-<P>
-The function <B>pcre_fullinfo()</B> is used to find out information about a
-compiled pattern; <B>pcre_info()</B> is an obsolete version which returns only
-some of the available information, but is retained for backwards compatibility.
-The function <B>pcre_version()</B> returns a pointer to a string containing the
-version of PCRE and its date of release.
-</P>
-<P>
-The global variables <B>pcre_malloc</B> and <B>pcre_free</B> initially contain
-the entry points of the standard <B>malloc()</B> and <B>free()</B> functions
-respectively. PCRE calls the memory management functions via these variables,
-so a calling program can replace them if it wishes to intercept the calls. This
-should be done before calling any PCRE functions.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">MULTI-THREADING</A>
-<P>
-The PCRE functions can be used in multi-threading applications, with the
-proviso that the memory management functions pointed to by <B>pcre_malloc</B>
-and <B>pcre_free</B> are shared by all threads.
-</P>
-<P>
-The compiled form of a regular expression is not altered during matching, so
-the same compiled pattern can safely be used by several threads at once.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">COMPILING A PATTERN</A>
-<P>
-The function <B>pcre_compile()</B> is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument <I>pattern</I>. A pointer to a single block of memory
-that is obtained via <B>pcre_malloc</B> is returned. This contains the compiled
-code and related data. The <B>pcre</B> type is defined for the returned block;
-this is a typedef for a structure whose contents are not externally defined. It
-is up to the caller to free the memory when it is no longer required.
-</P>
-<P>
-Although the compiled code of a PCRE regex is relocatable, that is, it does not
-depend on memory location, the complete <B>pcre</B> data block is not
-fully relocatable, because it contains a copy of the <I>tableptr</I> argument,
-which is an address (see below).
-</P>
-<P>
-The size of a compiled pattern is roughly proportional to the length of the
-pattern string, except that each character class (other than those containing
-just a single character, negated or not) requires 33 bytes, and repeat
-quantifiers with a minimum greater than one or a bounded maximum cause the
-relevant portions of the compiled pattern to be replicated.
-</P>
-<P>
-The <I>options</I> argument contains independent bits that affect the
-compilation. It should be zero if no options are required. Some of the options,
-in particular, those that are compatible with Perl, can also be set and unset
-from within the pattern (see the detailed description of regular expressions
-below). For these options, the contents of the <I>options</I> argument specifies
-their initial settings at the start of compilation and execution. The
-PCRE_ANCHORED option can be set at the time of matching as well as at compile
-time.
-</P>
-<P>
-If <I>errptr</I> is NULL, <B>pcre_compile()</B> returns NULL immediately.
-Otherwise, if compilation of a pattern fails, <B>pcre_compile()</B> returns
-NULL, and sets the variable pointed to by <I>errptr</I> to point to a textual
-error message. The offset from the start of the pattern to the character where
-the error was discovered is placed in the variable pointed to by
-<I>erroffset</I>, which must not be NULL. If it is, an immediate error is given.
-</P>
-<P>
-If the final argument, <I>tableptr</I>, is NULL, PCRE uses a default set of
-character tables which are built when it is compiled, using the default C
-locale. Otherwise, <I>tableptr</I> must be the result of a call to
-<B>pcre_maketables()</B>. See the section on locale support below.
-</P>
-<P>
-This code fragment shows a typical straightforward call to <B>pcre_compile()</B>:
-</P>
-<P>
-<PRE>
- pcre *re;
- const char *error;
- int erroffset;
- re = pcre_compile(
- "^A.*Z", /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-</PRE>
-</P>
-<P>
-The following option bits are defined in the header file:
-</P>
-<P>
-<PRE>
- PCRE_ANCHORED
-</PRE>
-</P>
-<P>
-If this bit is set, the pattern is forced to be "anchored", that is, it is
-constrained to match only at the start of the string which is being searched
-(the "subject string"). This effect can also be achieved by appropriate
-constructs in the pattern itself, which is the only way to do it in Perl.
-</P>
-<P>
-<PRE>
- PCRE_CASELESS
-</PRE>
-</P>
-<P>
-If this bit is set, letters in the pattern match both upper and lower case
-letters. It is equivalent to Perl's /i option.
-</P>
-<P>
-<PRE>
- PCRE_DOLLAR_ENDONLY
-</PRE>
-</P>
-<P>
-If this bit is set, a dollar metacharacter in the pattern matches only at the
-end of the subject string. Without this option, a dollar also matches
-immediately before the final character if it is a newline (but not before any
-other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
-set. There is no equivalent to this option in Perl.
-</P>
-<P>
-<PRE>
- PCRE_DOTALL
-</PRE>
-</P>
-<P>
-If this bit is set, a dot metacharater in the pattern matches all characters,
-including newlines. Without it, newlines are excluded. This option is
-equivalent to Perl's /s option. A negative class such as [^a] always matches a
-newline character, independent of the setting of this option.
-</P>
-<P>
-<PRE>
- PCRE_EXTENDED
-</PRE>
-</P>
-<P>
-If this bit is set, whitespace data characters in the pattern are totally
-ignored except when escaped or inside a character class, and characters between
-an unescaped # outside a character class and the next newline character,
-inclusive, are also ignored. This is equivalent to Perl's /x option, and makes
-it possible to include comments inside complicated patterns. Note, however,
-that this applies only to data characters. Whitespace characters may never
-appear within special character sequences in a pattern, for example within the
-sequence (?( which introduces a conditional subpattern.
-</P>
-<P>
-<PRE>
- PCRE_EXTRA
-</PRE>
-</P>
-<P>
-This option was invented in order to turn on additional functionality of PCRE
-that is incompatible with Perl, but it is currently of very little use. When
-set, any backslash in a pattern that is followed by a letter that has no
-special meaning causes an error, thus reserving these combinations for future
-expansion. By default, as in Perl, a backslash followed by a letter with no
-special meaning is treated as a literal. There are at present no other features
-controlled by this option. It can also be set by a (?X) option setting within a
-pattern.
-</P>
-<P>
-<PRE>
- PCRE_MULTILINE
-</PRE>
-</P>
-<P>
-By default, PCRE treats the subject string as consisting of a single "line" of
-characters (even if it actually contains several newlines). The "start of line"
-metacharacter (^) matches only at the start of the string, while the "end of
-line" metacharacter ($) matches only at the end of the string, or before a
-terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as
-Perl.
-</P>
-<P>
-When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs
-match immediately following or immediately before any newline in the subject
-string, respectively, as well as at the very start and end. This is equivalent
-to Perl's /m option. If there are no "\n" characters in a subject string, or
-no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no
-effect.
-</P>
-<P>
-<PRE>
- PCRE_UNGREEDY
-</PRE>
-</P>
-<P>
-This option inverts the "greediness" of the quantifiers so that they are not
-greedy by default, but become greedy if followed by "?". It is not compatible
-with Perl. It can also be set by a (?U) option setting within the pattern.
-</P>
-<P>
-<PRE>
- PCRE_UTF8
-</PRE>
-</P>
-<P>
-This option causes PCRE to regard both the pattern and the subject as strings
-of UTF-8 characters instead of just byte strings. However, it is available only
-if PCRE has been built to include UTF-8 support. If not, the use of this option
-provokes an error. Support for UTF-8 is new, experimental, and incomplete.
-Details of exactly what it entails are given below.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">STUDYING A PATTERN</A>
-<P>
-When a pattern is going to be used several times, it is worth spending more
-time analyzing it in order to speed up the time taken for matching. The
-function <B>pcre_study()</B> takes a pointer to a compiled pattern as its first
-argument, and returns a pointer to a <B>pcre_extra</B> block (another typedef
-for a structure with hidden contents) containing additional information about
-the pattern; this can be passed to <B>pcre_exec()</B>. If no additional
-information is available, NULL is returned.
-</P>
-<P>
-The second argument contains option bits. At present, no options are defined
-for <B>pcre_study()</B>, and this argument should always be zero.
-</P>
-<P>
-The third argument for <B>pcre_study()</B> is a pointer to an error message. If
-studying succeeds (even if no data is returned), the variable it points to is
-set to NULL. Otherwise it points to a textual error message.
-</P>
-<P>
-This is a typical call to <B>pcre_study</B>():
-</P>
-<P>
-<PRE>
- pcre_extra *pe;
- pe = pcre_study(
- re, /* result of pcre_compile() */
- 0, /* no options exist */
- &error); /* set to NULL or points to a message */
-</PRE>
-</P>
-<P>
-At present, studying a pattern is useful only for non-anchored patterns that do
-not have a single fixed starting character. A bitmap of possible starting
-characters is created.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">LOCALE SUPPORT</A>
-<P>
-PCRE handles caseless matching, and determines whether characters are letters,
-digits, or whatever, by reference to a set of tables. The library contains a
-default set of tables which is created in the default C locale when PCRE is
-compiled. This is used when the final argument of <B>pcre_compile()</B> is NULL,
-and is sufficient for many applications.
-</P>
-<P>
-An alternative set of tables can, however, be supplied. Such tables are built
-by calling the <B>pcre_maketables()</B> function, which has no arguments, in the
-relevant locale. The result can then be passed to <B>pcre_compile()</B> as often
-as necessary. For example, to build and use tables that are appropriate for the
-French locale (where accented characters with codes greater than 128 are
-treated as letters), the following code could be used:
-</P>
-<P>
-<PRE>
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-</PRE>
-</P>
-<P>
-The tables are built in memory that is obtained via <B>pcre_malloc</B>. The
-pointer that is passed to <B>pcre_compile</B> is saved with the compiled
-pattern, and the same tables are used via this pointer by <B>pcre_study()</B>
-and <B>pcre_exec()</B>. Thus for any single pattern, compilation, studying and
-matching all happen in the same locale, but different patterns can be compiled
-in different locales. It is the caller's responsibility to ensure that the
-memory containing the tables remains available for as long as it is needed.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">INFORMATION ABOUT A PATTERN</A>
-<P>
-The <B>pcre_fullinfo()</B> function returns information about a compiled
-pattern. It replaces the obsolete <B>pcre_info()</B> function, which is
-nevertheless retained for backwards compability (and is documented below).
-</P>
-<P>
-The first argument for <B>pcre_fullinfo()</B> is a pointer to the compiled
-pattern. The second argument is the result of <B>pcre_study()</B>, or NULL if
-the pattern was not studied. The third argument specifies which piece of
-information is required, while the fourth argument is a pointer to a variable
-to receive the data. The yield of the function is zero for success, or one of
-the following negative numbers:
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NULL the argument <I>code</I> was NULL
- the argument <I>where</I> was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of <I>what</I> was invalid
-</PRE>
-</P>
-<P>
-Here is a typical call of <B>pcre_fullinfo()</B>, to obtain the length of the
-compiled pattern:
-</P>
-<P>
-<PRE>
- int rc;
- unsigned long int length;
- rc = pcre_fullinfo(
- re, /* result of pcre_compile() */
- pe, /* result of pcre_study(), or NULL */
- PCRE_INFO_SIZE, /* what is required */
- &length); /* where to put the data */
-</PRE>
-</P>
-<P>
-The possible values for the third argument are defined in <B>pcre.h</B>, and are
-as follows:
-</P>
-<P>
-<PRE>
- PCRE_INFO_OPTIONS
-</PRE>
-</P>
-<P>
-Return a copy of the options with which the pattern was compiled. The fourth
-argument should point to an <B>unsigned long int</B> variable. These option bits
-are those specified in the call to <B>pcre_compile()</B>, modified by any
-top-level option settings within the pattern itself, and with the PCRE_ANCHORED
-bit forcibly set if the form of the pattern implies that it can match only at
-the start of a subject string.
-</P>
-<P>
-<PRE>
- PCRE_INFO_SIZE
-</PRE>
-</P>
-<P>
-Return the size of the compiled pattern, that is, the value that was passed as
-the argument to <B>pcre_malloc()</B> when PCRE was getting memory in which to
-place the compiled data. The fourth argument should point to a <B>size_t</B>
-variable.
-</P>
-<P>
-<PRE>
- PCRE_INFO_CAPTURECOUNT
-</PRE>
-</P>
-<P>
-Return the number of capturing subpatterns in the pattern. The fourth argument
-should point to an \fbint\fR variable.
-</P>
-<P>
-<PRE>
- PCRE_INFO_BACKREFMAX
-</PRE>
-</P>
-<P>
-Return the number of the highest back reference in the pattern. The fourth
-argument should point to an <B>int</B> variable. Zero is returned if there are
-no back references.
-</P>
-<P>
-<PRE>
- PCRE_INFO_FIRSTCHAR
-</PRE>
-</P>
-<P>
-Return information about the first character of any matched string, for a
-non-anchored pattern. If there is a fixed first character, e.g. from a pattern
-such as (cat|cow|coyote), it is returned in the integer pointed to by
-<I>where</I>. Otherwise, if either
-</P>
-<P>
-(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
-starts with "^", or
-</P>
-<P>
-(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not set
-(if it were set, the pattern would be anchored),
-</P>
-<P>
--1 is returned, indicating that the pattern matches only at the start of a
-subject string or after any "\n" within the string. Otherwise -2 is returned.
-For anchored patterns, -2 is returned.
-</P>
-<P>
-<PRE>
- PCRE_INFO_FIRSTTABLE
-</PRE>
-</P>
-<P>
-If the pattern was studied, and this resulted in the construction of a 256-bit
-table indicating a fixed set of characters for the first character in any
-matching string, a pointer to the table is returned. Otherwise NULL is
-returned. The fourth argument should point to an <B>unsigned char *</B>
-variable.
-</P>
-<P>
-<PRE>
- PCRE_INFO_LASTLITERAL
-</PRE>
-</P>
-<P>
-For a non-anchored pattern, return the value of the rightmost literal character
-which must exist in any matched string, other than at its start. The fourth
-argument should point to an <B>int</B> variable. If there is no such character,
-or if the pattern is anchored, -1 is returned. For example, for the pattern
-/a\d+z\d+/ the returned value is 'z'.
-</P>
-<P>
-The <B>pcre_info()</B> function is now obsolete because its interface is too
-restrictive to return all the available data about a compiled pattern. New
-programs should use <B>pcre_fullinfo()</B> instead. The yield of
-<B>pcre_info()</B> is the number of capturing subpatterns, or one of the
-following negative numbers:
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NULL the argument <I>code</I> was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
-</PRE>
-</P>
-<P>
-If the <I>optptr</I> argument is not NULL, a copy of the options with which the
-pattern was compiled is placed in the integer it points to (see
-PCRE_INFO_OPTIONS above).
-</P>
-<P>
-If the pattern is not anchored and the <I>firstcharptr</I> argument is not NULL,
-it is used to pass back information about the first character of any matched
-string (see PCRE_INFO_FIRSTCHAR above).
-</P>
-<LI><A NAME="SEC9" HREF="#TOC1">MATCHING A PATTERN</A>
-<P>
-The function <B>pcre_exec()</B> is called to match a subject string against a
-pre-compiled pattern, which is passed in the <I>code</I> argument. If the
-pattern has been studied, the result of the study should be passed in the
-<I>extra</I> argument. Otherwise this must be NULL.
-</P>
-<P>
-Here is an example of a simple call to <B>pcre_exec()</B>:
-</P>
-<P>
-<PRE>
- int rc;
- int ovector[30];
- rc = pcre_exec(
- re, /* result of pcre_compile() */
- NULL, /* we didn't study the pattern */
- "some string", /* the subject string */
- 11, /* the length of the subject string */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- 30); /* number of elements in the vector */
-</PRE>
-</P>
-<P>
-The PCRE_ANCHORED option can be passed in the <I>options</I> argument, whose
-unused bits must be zero. However, if a pattern was compiled with
-PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
-cannot be made unachored at matching time.
-</P>
-<P>
-There are also three further options that can be set only at matching time:
-</P>
-<P>
-<PRE>
- PCRE_NOTBOL
-</PRE>
-</P>
-<P>
-The first character of the string is not the beginning of a line, so the
-circumflex metacharacter should not match before it. Setting this without
-PCRE_MULTILINE (at compile time) causes circumflex never to match.
-</P>
-<P>
-<PRE>
- PCRE_NOTEOL
-</PRE>
-</P>
-<P>
-The end of the string is not the end of a line, so the dollar metacharacter
-should not match it nor (except in multiline mode) a newline immediately before
-it. Setting this without PCRE_MULTILINE (at compile time) causes dollar never
-to match.
-</P>
-<P>
-<PRE>
- PCRE_NOTEMPTY
-</PRE>
-</P>
-<P>
-An empty string is not considered to be a valid match if this option is set. If
-there are alternatives in the pattern, they are tried. If all the alternatives
-match the empty string, the entire match fails. For example, if the pattern
-</P>
-<P>
-<PRE>
- a?b?
-</PRE>
-</P>
-<P>
-is applied to a string not beginning with "a" or "b", it matches the empty
-string at the start of the subject. With PCRE_NOTEMPTY set, this match is not
-valid, so PCRE searches further into the string for occurrences of "a" or "b".
-</P>
-<P>
-Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a special case
-of a pattern match of the empty string within its <B>split()</B> function, and
-when using the /g modifier. It is possible to emulate Perl's behaviour after
-matching a null string by first trying the match again at the same offset with
-PCRE_NOTEMPTY set, and then if that fails by advancing the starting offset (see
-below) and trying an ordinary match again.
-</P>
-<P>
-The subject string is passed as a pointer in <I>subject</I>, a length in
-<I>length</I>, and a starting offset in <I>startoffset</I>. Unlike the pattern
-string, the subject may contain binary zero characters. When the starting
-offset is zero, the search for a match starts at the beginning of the subject,
-and this is by far the most common case.
-</P>
-<P>
-A non-zero starting offset is useful when searching for another match in the
-same subject by calling <B>pcre_exec()</B> again after a previous success.
-Setting <I>startoffset</I> differs from just passing over a shortened string and
-setting PCRE_NOTBOL in the case of a pattern that begins with any kind of
-lookbehind. For example, consider the pattern
-</P>
-<P>
-<PRE>
- \Biss\B
-</PRE>
-</P>
-<P>
-which finds occurrences of "iss" in the middle of words. (\B matches only if
-the current position in the subject is not a word boundary.) When applied to
-the string "Mississipi" the first call to <B>pcre_exec()</B> finds the first
-occurrence. If <B>pcre_exec()</B> is called again with just the remainder of the
-subject, namely "issipi", it does not match, because \B is always false at the
-start of the subject, which is deemed to be a word boundary. However, if
-<B>pcre_exec()</B> is passed the entire string again, but with <I>startoffset</I>
-set to 4, it finds the second occurrence of "iss" because it is able to look
-behind the starting point to discover that it is preceded by a letter.
-</P>
-<P>
-If a non-zero starting offset is passed when the pattern is anchored, one
-attempt to match at the given offset is tried. This can only succeed if the
-pattern does not require the match to be at the start of the subject.
-</P>
-<P>
-In general, a pattern matches a certain portion of the subject, and in
-addition, further substrings from the subject may be picked out by parts of the
-pattern. Following the usage in Jeffrey Friedl's book, this is called
-"capturing" in what follows, and the phrase "capturing subpattern" is used for
-a fragment of a pattern that picks out a substring. PCRE supports several other
-kinds of parenthesized subpattern that do not cause substrings to be captured.
-</P>
-<P>
-Captured substrings are returned to the caller via a vector of integer offsets
-whose address is passed in <I>ovector</I>. The number of elements in the vector
-is passed in <I>ovecsize</I>. The first two-thirds of the vector is used to pass
-back captured substrings, each substring using a pair of integers. The
-remaining third of the vector is used as workspace by <B>pcre_exec()</B> while
-matching capturing subpatterns, and is not available for passing back
-information. The length passed in <I>ovecsize</I> should always be a multiple of
-three. If it is not, it is rounded down.
-</P>
-<P>
-When a match has been successful, information about captured substrings is
-returned in pairs of integers, starting at the beginning of <I>ovector</I>, and
-continuing up to two-thirds of its length at the most. The first element of a
-pair is set to the offset of the first character in a substring, and the second
-is set to the offset of the first character after the end of a substring. The
-first pair, <I>ovector[0]</I> and <I>ovector[1]</I>, identify the portion of the
-subject string matched by the entire pattern. The next pair is used for the
-first capturing subpattern, and so on. The value returned by <B>pcre_exec()</B>
-is the number of pairs that have been set. If there are no capturing
-subpatterns, the return value from a successful match is 1, indicating that
-just the first pair of offsets has been set.
-</P>
-<P>
-Some convenience functions are provided for extracting the captured substrings
-as separate strings. These are described in the following section.
-</P>
-<P>
-It is possible for an capturing subpattern number <I>n+1</I> to match some
-part of the subject when subpattern <I>n</I> has not been used at all. For
-example, if the string "abc" is matched against the pattern (a|(z))(bc)
-subpatterns 1 and 3 are matched, but 2 is not. When this happens, both offset
-values corresponding to the unused subpattern are set to -1.
-</P>
-<P>
-If a capturing subpattern is matched repeatedly, it is the last portion of the
-string that it matched that gets returned.
-</P>
-<P>
-If the vector is too small to hold all the captured substrings, it is used as
-far as possible (up to two-thirds of its length), and the function returns a
-value of zero. In particular, if the substring offsets are not of interest,
-<B>pcre_exec()</B> may be called with <I>ovector</I> passed as NULL and
-<I>ovecsize</I> as zero. However, if the pattern contains back references and
-the <I>ovector</I> isn't big enough to remember the related substrings, PCRE has
-to get additional memory for use during matching. Thus it is usually advisable
-to supply an <I>ovector</I>.
-</P>
-<P>
-Note that <B>pcre_info()</B> can be used to find out how many capturing
-subpatterns there are in a compiled pattern. The smallest size for
-<I>ovector</I> that will allow for <I>n</I> captured substrings in addition to
-the offsets of the substring matched by the whole pattern is (<I>n</I>+1)*3.
-</P>
-<P>
-If <B>pcre_exec()</B> fails, it returns a negative number. The following are
-defined in the header file:
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMATCH (-1)
-</PRE>
-</P>
-<P>
-The subject string did not match the pattern.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NULL (-2)
-</PRE>
-</P>
-<P>
-Either <I>code</I> or <I>subject</I> was passed as NULL, or <I>ovector</I> was
-NULL and <I>ovecsize</I> was not zero.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_BADOPTION (-3)
-</PRE>
-</P>
-<P>
-An unrecognized bit was set in the <I>options</I> argument.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_BADMAGIC (-4)
-</PRE>
-</P>
-<P>
-PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch
-the case when it is passed a junk pointer. This is the error it gives when the
-magic number isn't present.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_UNKNOWN_NODE (-5)
-</PRE>
-</P>
-<P>
-While running the pattern match, an unknown item was encountered in the
-compiled pattern. This error could be caused by a bug in PCRE or by overwriting
-of the compiled pattern.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMEMORY (-6)
-</PRE>
-</P>
-<P>
-If a pattern contains back references, but the <I>ovector</I> that is passed to
-<B>pcre_exec()</B> is not big enough to remember the referenced substrings, PCRE
-gets a block of memory at the start of matching to use for this purpose. If the
-call via <B>pcre_malloc()</B> fails, this error is given. The memory is freed at
-the end of matching.
-</P>
-<LI><A NAME="SEC10" HREF="#TOC1">EXTRACTING CAPTURED SUBSTRINGS</A>
-<P>
-Captured substrings can be accessed directly by using the offsets returned by
-<B>pcre_exec()</B> in <I>ovector</I>. For convenience, the functions
-<B>pcre_copy_substring()</B>, <B>pcre_get_substring()</B>, and
-<B>pcre_get_substring_list()</B> are provided for extracting captured substrings
-as new, separate, zero-terminated strings. A substring that contains a binary
-zero is correctly extracted and has a further zero added on the end, but the
-result does not, of course, function as a C string.
-</P>
-<P>
-The first three arguments are the same for all three functions: <I>subject</I>
-is the subject string which has just been successfully matched, <I>ovector</I>
-is a pointer to the vector of integer offsets that was passed to
-<B>pcre_exec()</B>, and <I>stringcount</I> is the number of substrings that
-were captured by the match, including the substring that matched the entire
-regular expression. This is the value returned by <B>pcre_exec</B> if it
-is greater than zero. If <B>pcre_exec()</B> returned zero, indicating that it
-ran out of space in <I>ovector</I>, the value passed as <I>stringcount</I> should
-be the size of the vector divided by three.
-</P>
-<P>
-The functions <B>pcre_copy_substring()</B> and <B>pcre_get_substring()</B>
-extract a single substring, whose number is given as <I>stringnumber</I>. A
-value of zero extracts the substring that matched the entire pattern, while
-higher values extract the captured substrings. For <B>pcre_copy_substring()</B>,
-the string is placed in <I>buffer</I>, whose length is given by
-<I>buffersize</I>, while for <B>pcre_get_substring()</B> a new block of memory is
-obtained via <B>pcre_malloc</B>, and its address is returned via
-<I>stringptr</I>. The yield of the function is the length of the string, not
-including the terminating zero, or one of
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMEMORY (-6)
-</PRE>
-</P>
-<P>
-The buffer was too small for <B>pcre_copy_substring()</B>, or the attempt to get
-memory failed for <B>pcre_get_substring()</B>.
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOSUBSTRING (-7)
-</PRE>
-</P>
-<P>
-There is no substring whose number is <I>stringnumber</I>.
-</P>
-<P>
-The <B>pcre_get_substring_list()</B> function extracts all available substrings
-and builds a list of pointers to them. All this is done in a single block of
-memory which is obtained via <B>pcre_malloc</B>. The address of the memory block
-is returned via <I>listptr</I>, which is also the start of the list of string
-pointers. The end of the list is marked by a NULL pointer. The yield of the
-function is zero if all went well, or
-</P>
-<P>
-<PRE>
- PCRE_ERROR_NOMEMORY (-6)
-</PRE>
-</P>
-<P>
-if the attempt to get the memory block failed.
-</P>
-<P>
-When any of these functions encounter a substring that is unset, which can
-happen when capturing subpattern number <I>n+1</I> matches some part of the
-subject, but subpattern <I>n</I> has not been used at all, they return an empty
-string. This can be distinguished from a genuine zero-length substring by
-inspecting the appropriate offset in <I>ovector</I>, which is negative for unset
-substrings.
-</P>
-<P>
-The two convenience functions <B>pcre_free_substring()</B> and
-<B>pcre_free_substring_list()</B> can be used to free the memory returned by
-a previous call of <B>pcre_get_substring()</B> or
-<B>pcre_get_substring_list()</B>, respectively. They do nothing more than call
-the function pointed to by <B>pcre_free</B>, which of course could be called
-directly from a C program. However, PCRE is used in some situations where it is
-linked via a special interface to another programming language which cannot use
-<B>pcre_free</B> directly; it is for these cases that the functions are
-provided.
-</P>
-<LI><A NAME="SEC11" HREF="#TOC1">LIMITATIONS</A>
-<P>
-There are some size limitations in PCRE but it is hoped that they will never in
-practice be relevant.
-The maximum length of a compiled pattern is 65539 (sic) bytes.
-All values in repeating quantifiers must be less than 65536.
-There maximum number of capturing subpatterns is 65535.
-There is no limit to the number of non-capturing subpatterns, but the maximum
-depth of nesting of all kinds of parenthesized subpattern, including capturing
-subpatterns, assertions, and other types of subpattern, is 200.
-</P>
-<P>
-The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
-</P>
-<LI><A NAME="SEC12" HREF="#TOC1">DIFFERENCES FROM PERL</A>
-<P>
-The differences described here are with respect to Perl 5.005.
-</P>
-<P>
-1. By default, a whitespace character is any character that the C library
-function <B>isspace()</B> recognizes, though it is possible to compile PCRE with
-alternative character type tables. Normally <B>isspace()</B> matches space,
-formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5
-no longer includes vertical tab in its set of whitespace characters. The \v
-escape that was in the Perl documentation for a long time was never in fact
-recognized. However, the character itself was treated as whitespace at least
-up to 5.002. In 5.004 and 5.005 it does not match \s.
-</P>
-<P>
-2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits
-them, but they do not mean what you might think. For example, (?!a){3} does
-not assert that the next three characters are not "a". It just asserts that the
-next character is not "a" three times.
-</P>
-<P>
-3. Capturing subpatterns that occur inside negative lookahead assertions are
-counted, but their entries in the offsets vector are never set. Perl sets its
-numerical variables from any such patterns that are matched before the
-assertion fails to match something (thereby succeeding), but only if the
-negative lookahead assertion contains just one branch.
-</P>
-<P>
-4. Though binary zero characters are supported in the subject string, they are
-not allowed in a pattern string because it is passed as a normal C string,
-terminated by zero. The escape sequence "\0" can be used in the pattern to
-represent a binary zero.
-</P>
-<P>
-5. The following Perl escape sequences are not supported: \l, \u, \L, \U,
-\E, \Q. In fact these are implemented by Perl's general string-handling and
-are not part of its pattern matching engine.
-</P>
-<P>
-6. The Perl \G assertion is not supported as it is not relevant to single
-pattern matches.
-</P>
-<P>
-7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-constructions. However, there is some experimental support for recursive
-patterns using the non-Perl item (?R).
-</P>
-<P>
-8. There are at the time of writing some oddities in Perl 5.005_02 concerned
-with the settings of captured strings when part of a pattern is repeated. For
-example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
-"b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if
-the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-</P>
-<P>
-In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the
-future Perl changes to a consistent state that is different, PCRE may change to
-follow.
-</P>
-<P>
-9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern
-/^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not.
-However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-</P>
-<P>
-10. PCRE provides some extensions to the Perl regular expression facilities:
-</P>
-<P>
-(a) Although lookbehind assertions must match fixed length strings, each
-alternative branch of a lookbehind assertion can match a different length of
-string. Perl 5.005 requires them all to have the same length.
-</P>
-<P>
-(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-
-character matches only at the very end of the string.
-</P>
-<P>
-(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
-meaning is faulted.
-</P>
-<P>
-(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
-inverted, that is, by default they are not greedy, but if followed by a
-question mark they are.
-</P>
-<P>
-(e) PCRE_ANCHORED can be used to force a pattern to be tried only at the start
-of the subject.
-</P>
-<P>
-(f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options for
-<B>pcre_exec()</B> have no Perl equivalents.
-</P>
-<P>
-(g) The (?R) construct allows for recursive pattern matching (Perl 5.6 can do
-this using the (?p{code}) construct, which PCRE cannot of course support.)
-</P>
-<LI><A NAME="SEC13" HREF="#TOC1">REGULAR EXPRESSION DETAILS</A>
-<P>
-The syntax and semantics of the regular expressions supported by PCRE are
-described below. Regular expressions are also described in the Perl
-documentation and in a number of other books, some of which have copious
-examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
-O'Reilly (ISBN 1-56592-257), covers them in great detail.
-</P>
-<P>
-The description here is intended as reference documentation. The basic
-operation of PCRE is on strings of bytes. However, there is the beginnings of
-some support for UTF-8 character strings. To use this support you must
-configure PCRE to include it, and then call <B>pcre_compile()</B> with the
-PCRE_UTF8 option. How this affects the pattern matching is described in the
-final section of this document.
-</P>
-<P>
-A regular expression is a pattern that is matched against a subject string from
-left to right. Most characters stand for themselves in a pattern, and match the
-corresponding characters in the subject. As a trivial example, the pattern
-</P>
-<P>
-<PRE>
- The quick brown fox
-</PRE>
-</P>
-<P>
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
-<I>meta-characters</I>, which do not stand for themselves but instead are
-interpreted in some special way.
-</P>
-<P>
-There are two different sets of meta-characters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized in square brackets. Outside square brackets, the meta-characters are
-as follows:
-</P>
-<P>
-<PRE>
- \ general escape character with several uses
- ^ assert start of subject (or line, in multiline mode)
- $ assert end of subject (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- { start min/max quantifier
-</PRE>
-</P>
-<P>
-Part of a pattern that is in square brackets is called a "character class". In
-a character class the only meta-characters are:
-</P>
-<P>
-<PRE>
- \ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- ] terminates the character class
-</PRE>
-</P>
-<P>
-The following sections describe the use of each of the meta-characters.
-</P>
-<LI><A NAME="SEC14" HREF="#TOC1">BACKSLASH</A>
-<P>
-The backslash character has several uses. Firstly, if it is followed by a
-non-alphameric character, it takes away any special meaning that character may
-have. This use of backslash as an escape character applies both inside and
-outside character classes.
-</P>
-<P>
-For example, if you want to match a "*" character, you write "\*" in the
-pattern. This applies whether or not the following character would otherwise be
-interpreted as a meta-character, so it is always safe to precede a
-non-alphameric with "\" to specify that it stands for itself. In particular,
-if you want to match a backslash, you write "\\".
-</P>
-<P>
-If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the
-pattern (other than in a character class) and characters between a "#" outside
-a character class and the next newline character are ignored. An escaping
-backslash can be used to include a whitespace or "#" character as part of the
-pattern.
-</P>
-<P>
-A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:
-</P>
-<P>
-<PRE>
- \a alarm, that is, the BEL character (hex 07)
- \cx "control-x", where x is any character
- \e escape (hex 1B)
- \f formfeed (hex 0C)
- \n newline (hex 0A)
- \r carriage return (hex 0D)
- \t tab (hex 09)
- \xhh character with hex code hh
- \ddd character with octal code ddd, or backreference
-</PRE>
-</P>
-<P>
-The precise effect of "\cx" is as follows: if "x" is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus "\cz" becomes hex 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex
-7B.
-</P>
-<P>
-After "\x", up to two hexadecimal digits are read (letters can be in upper or
-lower case).
-</P>
-<P>
-After "\0" up to two further octal digits are read. In both cases, if there
-are fewer than two digits, just those that are present are used. Thus the
-sequence "\0\x\07" specifies two binary zeros followed by a BEL character.
-Make sure you supply two digits after the initial zero if the character that
-follows is itself an octal digit.
-</P>
-<P>
-The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a <I>back reference</I>. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.
-</P>
-<P>
-Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and generates a single byte from the least
-significant 8 bits of the value. Any subsequent digits stand for themselves.
-For example:
-</P>
-<P>
-<PRE>
- \040 is another way of writing a space
- \40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \7 is always a back reference
- \11 might be a back reference, or another way of
- writing a tab
- \011 is always a tab
- \0113 is a tab followed by the character "3"
- \113 is the character with octal code 113 (since there
- can be no more than 99 back references)
- \377 is a byte consisting entirely of 1 bits
- \81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-</PRE>
-</P>
-<P>
-Note that octal values of 100 or greater must not be introduced by a leading
-zero, because no more than three octal digits are ever read.
-</P>
-<P>
-All the sequences that define a single byte value can be used both inside and
-outside character classes. In addition, inside a character class, the sequence
-"\b" is interpreted as the backspace character (hex 08). Outside a character
-class it has a different meaning (see below).
-</P>
-<P>
-The third use of backslash is for specifying generic character types:
-</P>
-<P>
-<PRE>
- \d any decimal digit
- \D any character that is not a decimal digit
- \s any whitespace character
- \S any character that is not a whitespace character
- \w any "word" character
- \W any "non-word" character
-</PRE>
-</P>
-<P>
-Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.
-</P>
-<P>
-A "word" character is any letter or digit or the underscore character, that is,
-any character which can be part of a Perl "word". The definition of letters and
-digits is controlled by PCRE's character tables, and may vary if locale-
-specific matching is taking place (see "Locale support" above). For example, in
-the "fr" (French) locale, some character codes greater than 128 are used for
-accented letters, and these are matched by \w.
-</P>
-<P>
-These character type sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
-there is no character to match.
-</P>
-<P>
-The fourth use of backslash is for certain simple assertions. An assertion
-specifies a condition that has to be met at a particular point in a match,
-without consuming any characters from the subject string. The use of
-subpatterns for more complicated assertions is described below. The backslashed
-assertions are
-</P>
-<P>
-<PRE>
- \b word boundary
- \B not a word boundary
- \A start of subject (independent of multiline mode)
- \Z end of subject or newline at end (independent of multiline mode)
- \z end of subject (independent of multiline mode)
-</PRE>
-</P>
-<P>
-These assertions may not appear in character classes (but note that "\b" has a
-different meaning, namely the backspace character, inside a character class).
-</P>
-<P>
-A word boundary is a position in the subject string where the current character
-and the previous character do not both match \w or \W (i.e. one matches
-\w and the other matches \W), or the start or end of the string if the
-first or last character matches \w, respectively.
-</P>
-<P>
-The \A, \Z, and \z assertions differ from the traditional circumflex and
-dollar (described below) in that they only ever match at the very start and end
-of the subject string, whatever options are set. They are not affected by the
-PCRE_NOTBOL or PCRE_NOTEOL options. If the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero, \A can never match. The difference between \Z
-and \z is that \Z matches before a newline that is the last character of the
-string as well as at the end of the string, whereas \z matches only at the
-end.
-</P>
-<LI><A NAME="SEC15" HREF="#TOC1">CIRCUMFLEX AND DOLLAR</A>
-<P>
-Outside a character class, in the default matching mode, the circumflex
-character is an assertion which is true only if the current matching point is
-at the start of the subject string. If the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero, circumflex can never match. Inside a character
-class, circumflex has an entirely different meaning (see below).
-</P>
-<P>
-Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)
-</P>
-<P>
-A dollar character is an assertion which is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-character that is the last character in the string (by default). Dollar need
-not be the last character of the pattern if a number of alternatives are
-involved, but it should be the last item in any branch in which it appears.
-Dollar has no special meaning in a character class.
-</P>
-<P>
-The meaning of dollar can be changed so that it matches only at the very end of
-the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching
-time. This does not affect the \Z assertion.
-</P>
-<P>
-The meanings of the circumflex and dollar characters are changed if the
-PCRE_MULTILINE option is set. When this is the case, they match immediately
-after and immediately before an internal "\n" character, respectively, in
-addition to matching at the start and end of the subject string. For example,
-the pattern /^abc$/ matches the subject string "def\nabc" in multiline mode,
-but not otherwise. Consequently, patterns that are anchored in single line mode
-because all branches start with "^" are not anchored in multiline mode, and a
-match for circumflex is possible when the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
-PCRE_MULTILINE is set.
-</P>
-<P>
-Note that the sequences \A, \Z, and \z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\A it is always anchored, whether PCRE_MULTILINE is set or not.
-</P>
-<LI><A NAME="SEC16" HREF="#TOC1">FULL STOP (PERIOD, DOT)</A>
-<P>
-Outside a character class, a dot in the pattern matches any one character in
-the subject, including a non-printing character, but not (by default) newline.
-If the PCRE_DOTALL option is set, dots match newlines as well. The handling of
-dot is entirely independent of the handling of circumflex and dollar, the only
-relationship being that they both involve newline characters. Dot has no
-special meaning in a character class.
-</P>
-<LI><A NAME="SEC17" HREF="#TOC1">SQUARE BRACKETS</A>
-<P>
-An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special. If a
-closing square bracket is required as a member of the class, it should be the
-first data character in the class (after an initial circumflex, if present) or
-escaped with a backslash.
-</P>
-<P>
-A character class matches a single character in the subject; the character must
-be in the set of characters defined by the class, unless the first character in
-the class is a circumflex, in which case the subject character must not be in
-the set defined by the class. If a circumflex is actually required as a member
-of the class, ensure it is not the first character, or escape it with a
-backslash.
-</P>
-<P>
-For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters which
-are in the class by enumerating those that are not. It is not an assertion: it
-still consumes a character from the subject string, and fails if the current
-pointer is at the end of the string.
-</P>
-<P>
-When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-</P>
-<P>
-The newline character is never treated in any special way in character classes,
-whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
-such as [^a] will always match a newline.
-</P>
-<P>
-The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.
-</P>
-<P>
-It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\]46] is interpreted as a single class containing a
-range followed by two separate characters. The octal or hexadecimal
-representation of "]" can also be used to end a range.
-</P>
-<P>
-Ranges operate in ASCII collating sequence. They can also be used for
-characters specified numerically, for example [\000-\037]. If a range that
-includes letters is used when caseless matching is set, it matches the letters
-in either case. For example, [W-c] is equivalent to [][\^_`wxyzabc], matched
-caselessly, and if character tables for the "fr" locale are in use,
-[\xc8-\xcb] matches accented E characters in both cases.
-</P>
-<P>
-The character types \d, \D, \s, \S, \w, and \W may also appear in a
-character class, and add the characters that they match to the class. For
-example, [\dABCDEF] matches any hexadecimal digit. A circumflex can
-conveniently be used with the upper case character types to specify a more
-restricted set of characters than the matching lower case type. For example,
-the class [^\W_] matches any letter or digit, but not underscore.
-</P>
-<P>
-All non-alphameric characters other than \, -, ^ (at the start) and the
-terminating ] are non-special in character classes, but it does no harm if they
-are escaped.
-</P>
-<LI><A NAME="SEC18" HREF="#TOC1">POSIX CHARACTER CLASSES</A>
-<P>
-Perl 5.6 (not yet released at the time of writing) is going to support the
-POSIX notation for character classes, which uses names enclosed by [: and :]
-within the enclosing square brackets. PCRE supports this notation. For example,
-</P>
-<P>
-<PRE>
- [01[:alpha:]%]
-</PRE>
-</P>
-<P>
-matches "0", "1", any alphabetic character, or "%". The supported class names
-are
-</P>
-<P>
-<PRE>
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- cntrl control characters
- digit decimal digits (same as \d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (same as \s)
- upper upper case letters
- word "word" characters (same as \w)
- xdigit hexadecimal digits
-</PRE>
-</P>
-<P>
-The names "ascii" and "word" are Perl extensions. Another Perl extension is
-negation, which is indicated by a ^ character after the colon. For example,
-</P>
-<P>
-<PRE>
- [12[:^digit:]]
-</PRE>
-</P>
-<P>
-matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.
-</P>
-<LI><A NAME="SEC19" HREF="#TOC1">VERTICAL BAR</A>
-<P>
-Vertical bar characters are used to separate alternative patterns. For example,
-the pattern
-</P>
-<P>
-<PRE>
- gilbert|sullivan
-</PRE>
-</P>
-<P>
-matches either "gilbert" or "sullivan". Any number of alternatives may appear,
-and an empty alternative is permitted (matching the empty string).
-The matching process tries each alternative in turn, from left to right,
-and the first one that succeeds is used. If the alternatives are within a
-subpattern (defined below), "succeeds" means matching the rest of the main
-pattern as well as the alternative in the subpattern.
-</P>
-<LI><A NAME="SEC20" HREF="#TOC1">INTERNAL OPTION SETTING</A>
-<P>
-The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED
-can be changed from within the pattern by a sequence of Perl option letters
-enclosed between "(?" and ")". The option letters are
-</P>
-<P>
-<PRE>
- i for PCRE_CASELESS
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-</PRE>
-</P>
-<P>
-For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets PCRE_CASELESS and
-PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.
-</P>
-<P>
-The scope of these option changes depends on where in the pattern the setting
-occurs. For settings that are outside any subpattern (defined below), the
-effect is the same as if the options were set or unset at the start of
-matching. The following patterns all behave in exactly the same way:
-</P>
-<P>
-<PRE>
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-</PRE>
-</P>
-<P>
-which in turn is the same as compiling the pattern abc with PCRE_CASELESS set.
-In other words, such "top level" settings apply to the whole pattern (unless
-there are other changes inside subpatterns). If there is more than one setting
-of the same option at top level, the rightmost setting is used.
-</P>
-<P>
-If an option change occurs inside a subpattern, the effect is different. This
-is a change of behaviour in Perl 5.005. An option change inside a subpattern
-affects only that part of the subpattern that follows it, so
-</P>
-<P>
-<PRE>
- (a(?i)b)c
-</PRE>
-</P>
-<P>
-matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used).
-By this means, options can be made to have different settings in different
-parts of the pattern. Any changes made in one alternative do carry on
-into subsequent branches within the same subpattern. For example,
-</P>
-<P>
-<PRE>
- (a(?i)b|c)
-</PRE>
-</P>
-<P>
-matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.
-</P>
-<P>
-The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the
-same way as the Perl-compatible options by using the characters U and X
-respectively. The (?X) flag setting is special in that it must always occur
-earlier in the pattern than any of the additional features it turns on, even
-when it is at top level. It is best put at the start.
-</P>
-<LI><A NAME="SEC21" HREF="#TOC1">SUBPATTERNS</A>
-<P>
-Subpatterns are delimited by parentheses (round brackets), which can be nested.
-Marking part of a pattern as a subpattern does two things:
-</P>
-<P>
-1. It localizes a set of alternatives. For example, the pattern
-</P>
-<P>
-<PRE>
- cat(aract|erpillar|)
-</PRE>
-</P>
-<P>
-matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or the empty string.
-</P>
-<P>
-2. It sets up the subpattern as a capturing subpattern (as defined above).
-When the whole pattern matches, that portion of the subject string that matched
-the subpattern is passed back to the caller via the <I>ovector</I> argument of
-<B>pcre_exec()</B>. Opening parentheses are counted from left to right (starting
-from 1) to obtain the numbers of the capturing subpatterns.
-</P>
-<P>
-For example, if the string "the red king" is matched against the pattern
-</P>
-<P>
-<PRE>
- the ((red|white) (king|queen))
-</PRE>
-</P>
-<P>
-the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3, respectively.
-</P>
-<P>
-The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by "?:", the
-subpattern does not do any capturing, and is not counted when computing the
-number of any subsequent capturing subpatterns. For example, if the string "the
-white queen" is matched against the pattern
-</P>
-<P>
-<PRE>
- the ((?:red|white) (king|queen))
-</PRE>
-</P>
-<P>
-the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of captured substrings is 99, and the maximum number of
-all subpatterns, both capturing and non-capturing, is 200.
-</P>
-<P>
-As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns
-</P>
-<P>
-<PRE>
- (?i:saturday|sunday)
- (?:(?i)saturday|sunday)
-</PRE>
-</P>
-<P>
-match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".
-</P>
-<LI><A NAME="SEC22" HREF="#TOC1">REPETITION</A>
-<P>
-Repetition is specified by quantifiers, which can follow any of the following
-items:
-</P>
-<P>
-<PRE>
- a single character, possibly escaped
- the . metacharacter
- a character class
- a back reference (see next section)
- a parenthesized subpattern (unless it is an assertion - see below)
-</PRE>
-</P>
-<P>
-The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:
-</P>
-<P>
-<PRE>
- z{2,4}
-</PRE>
-</P>
-<P>
-matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus
-</P>
-<P>
-<PRE>
- [aeiou]{3,}
-</PRE>
-</P>
-<P>
-matches at least 3 successive vowels, but may match many more, while
-</P>
-<P>
-<PRE>
- \d{8}
-</PRE>
-</P>
-<P>
-matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.
-</P>
-<P>
-The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.
-</P>
-<P>
-For convenience (and historical compatibility) the three most common
-quantifiers have single-character abbreviations:
-</P>
-<P>
-<PRE>
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-</PRE>
-</P>
-<P>
-It is possible to construct infinite loops by following a subpattern that can
-match no characters with a quantifier that has no upper limit, for example:
-</P>
-<P>
-<PRE>
- (a?)*
-</PRE>
-</P>
-<P>
-Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.
-</P>
-<P>
-By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between the
-sequences /* and */ and within the sequence, individual * and / characters may
-appear. An attempt to match C comments by applying the pattern
-</P>
-<P>
-<PRE>
- /\*.*\*/
-</PRE>
-</P>
-<P>
-to the string
-</P>
-<P>
-<PRE>
- /* first command */ not comment /* second comment */
-</PRE>
-</P>
-<P>
-fails, because it matches the entire string owing to the greediness of the .*
-item.
-</P>
-<P>
-However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern
-</P>
-<P>
-<PRE>
- /\*.*?\*/
-</PRE>
-</P>
-<P>
-does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in
-</P>
-<P>
-<PRE>
- \d??\d
-</PRE>
-</P>
-<P>
-which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.
-</P>
-<P>
-If the PCRE_UNGREEDY option is set (an option which is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.
-</P>
-<P>
-When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more store is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.
-</P>
-<P>
-If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent
-to Perl's /s) is set, thus allowing the . to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE treats such a pattern as
-though it were preceded by \A. In cases where it is known that the subject
-string contains no newlines, it is worth setting PCRE_DOTALL when the pattern
-begins with .* in order to obtain this optimization, or alternatively using ^
-to indicate anchoring explicitly.
-</P>
-<P>
-When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after
-</P>
-<P>
-<PRE>
- (tweedle[dume]{3}\s*)+
-</PRE>
-</P>
-<P>
-has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after
-</P>
-<P>
-<PRE>
- /(a|(b))+/
-</PRE>
-</P>
-<P>
-matches "aba" the value of the second captured substring is "b".
-</P>
-<LI><A NAME="SEC23" HREF="#TOC1">BACK REFERENCES</A>
-<P>
-Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(i.e. to its left) in the pattern, provided there have been that many previous
-capturing left parentheses.
-</P>
-<P>
-However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. See the section entitled "Backslash" above for further
-details of the handling of digits following a backslash.
-</P>
-<P>
-A back reference matches whatever actually matched the capturing subpattern in
-the current subject string, rather than anything matching the subpattern
-itself. So the pattern
-</P>
-<P>
-<PRE>
- (sens|respons)e and \1ibility
-</PRE>
-</P>
-<P>
-matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,
-</P>
-<P>
-<PRE>
- ((?i)rah)\s+\1
-</PRE>
-</P>
-<P>
-matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.
-</P>
-<P>
-There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern
-</P>
-<P>
-<PRE>
- (a|(bc))\2
-</PRE>
-</P>
-<P>
-always fails if it starts to match "a" rather than "bc". Because there may be
-up to 99 back references, all digits following the backslash are taken
-as part of a potential back reference number. If the pattern continues with a
-digit character, some delimiter must be used to terminate the back reference.
-If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty
-comment can be used.
-</P>
-<P>
-A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern
-</P>
-<P>
-<PRE>
- (a|b\1)+
-</PRE>
-</P>
-<P>
-matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.
-</P>
-<LI><A NAME="SEC24" HREF="#TOC1">ASSERTIONS</A>
-<P>
-An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \b, \B, \A, \Z, \z, ^ and $ are described above. More
-complicated assertions are coded as subpatterns. There are two kinds: those
-that look ahead of the current position in the subject string, and those that
-look behind it.
-</P>
-<P>
-An assertion subpattern is matched in the normal way, except that it does not
-cause the current matching position to be changed. Lookahead assertions start
-with (?= for positive assertions and (?! for negative assertions. For example,
-</P>
-<P>
-<PRE>
- \w+(?=;)
-</PRE>
-</P>
-<P>
-matches a word followed by a semicolon, but does not include the semicolon in
-the match, and
-</P>
-<P>
-<PRE>
- foo(?!bar)
-</PRE>
-</P>
-<P>
-matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern
-</P>
-<P>
-<PRE>
- (?!foo)bar
-</PRE>
-</P>
-<P>
-does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve this effect.
-</P>
-<P>
-Lookbehind assertions start with (?&#60;= for positive assertions and (?&#60;! for
-negative assertions. For example,
-</P>
-<P>
-<PRE>
- (?&#60;!foo)bar
-</PRE>
-</P>
-<P>
-does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several alternatives, they do not
-all have to have the same fixed length. Thus
-</P>
-<P>
-<PRE>
- (?&#60;=bullock|donkey)
-</PRE>
-</P>
-<P>
-is permitted, but
-</P>
-<P>
-<PRE>
- (?&#60;!dogs?|cats?)
-</PRE>
-</P>
-<P>
-causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl 5.005, which requires all branches to match the
-same length of string. An assertion such as
-</P>
-<P>
-<PRE>
- (?&#60;=ab(c|de))
-</PRE>
-</P>
-<P>
-is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:
-</P>
-<P>
-<PRE>
- (?&#60;=abc|abde)
-</PRE>
-</P>
-<P>
-The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed width and then try to
-match. If there are insufficient characters before the current position, the
-match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns
-can be particularly useful for matching at the ends of strings; an example is
-given at the end of the section on once-only subpatterns.
-</P>
-<P>
-Several assertions (of any sort) may occur in succession. For example,
-</P>
-<P>
-<PRE>
- (?&#60;=\d{3})(?&#60;!999)foo
-</PRE>
-</P>
-<P>
-matches "foo" preceded by three digits that are not "999". Notice that each of
-the assertions is applied independently at the same point in the subject
-string. First there is a check that the previous three characters are all
-digits, and then there is a check that the same three characters are not "999".
-This pattern does <I>not</I> match "foo" preceded by six characters, the first
-of which are digits and the last three of which are not "999". For example, it
-doesn't match "123abcfoo". A pattern to do that is
-</P>
-<P>
-<PRE>
- (?&#60;=\d{3}...)(?&#60;!999)foo
-</PRE>
-</P>
-<P>
-This time the first assertion looks at the preceding six characters, checking
-that the first three are digits, and then the second assertion checks that the
-preceding three characters are not "999".
-</P>
-<P>
-Assertions can be nested in any combination. For example,
-</P>
-<P>
-<PRE>
- (?&#60;=(?&#60;!foo)bar)baz
-</PRE>
-</P>
-<P>
-matches an occurrence of "baz" that is preceded by "bar" which in turn is not
-preceded by "foo", while
-</P>
-<P>
-<PRE>
- (?&#60;=\d{3}(?!999)...)foo
-</PRE>
-</P>
-<P>
-is another pattern which matches "foo" preceded by three digits and any three
-characters that are not "999".
-</P>
-<P>
-Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.
-</P>
-<P>
-Assertions count towards the maximum of 200 parenthesized subpatterns.
-</P>
-<LI><A NAME="SEC25" HREF="#TOC1">ONCE-ONLY SUBPATTERNS</A>
-<P>
-With both maximizing and minimizing repetition, failure of what follows
-normally causes the repeated item to be re-evaluated to see if a different
-number of repeats allows the rest of the pattern to match. Sometimes it is
-useful to prevent this, either to change the nature of the match, or to cause
-it fail earlier than it otherwise might, when the author of the pattern knows
-there is no point in carrying on.
-</P>
-<P>
-Consider, for example, the pattern \d+foo when applied to the subject line
-</P>
-<P>
-<PRE>
- 123456bar
-</PRE>
-</P>
-<P>
-After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \d+
-item, and then with 4, and so on, before ultimately failing. Once-only
-subpatterns provide the means for specifying that once a portion of the pattern
-has matched, it is not to be re-evaluated in this way, so the matcher would
-give up immediately on failing to match "foo" the first time. The notation is
-another kind of special parenthesis, starting with (?&#62; as in this example:
-</P>
-<P>
-<PRE>
- (?&#62;\d+)bar
-</PRE>
-</P>
-<P>
-This kind of parenthesis "locks up" the part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.
-</P>
-<P>
-An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.
-</P>
-<P>
-Once-only subpatterns are not capturing subpatterns. Simple cases such as the
-above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \d+ and \d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?&#62;\d+) can only match an entire sequence of digits.
-</P>
-<P>
-This construction can of course contain arbitrarily complicated subpatterns,
-and it can be nested.
-</P>
-<P>
-Once-only subpatterns can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as
-</P>
-<P>
-<PRE>
- abcd$
-</PRE>
-</P>
-<P>
-when applied to a long string which does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as
-</P>
-<P>
-<PRE>
- ^.*abcd$
-</PRE>
-</P>
-<P>
-the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as
-</P>
-<P>
-<PRE>
- ^(?&#62;.*)(?&#60;=abcd)
-</PRE>
-</P>
-<P>
-there can be no backtracking for the .* item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.
-</P>
-<P>
-When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of a once-only subpattern is
-the only way to avoid some failing matches taking a very long time indeed.
-The pattern
-</P>
-<P>
-<PRE>
- (\D+|&#60;\d+&#62;)*[!?]
-</PRE>
-</P>
-<P>
-matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in &#60;&#62;, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to
-</P>
-<P>
-<PRE>
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-</PRE>
-</P>
-<P>
-it takes a long time before reporting failure. This is because the string can
-be divided between the two repeats in a large number of ways, and all have to
-be tried. (The example used [!?] rather than a single character at the end,
-because both PCRE and Perl have an optimization that allows for fast failure
-when a single character is used. They remember the last single character that
-is required for a match, and fail early if it is not present in the string.)
-If the pattern is changed to
-</P>
-<P>
-<PRE>
- ((?&#62;\D+)|&#60;\d+&#62;)*[!?]
-</PRE>
-</P>
-<P>
-sequences of non-digits cannot be broken, and failure happens quickly.
-</P>
-<LI><A NAME="SEC26" HREF="#TOC1">CONDITIONAL SUBPATTERNS</A>
-<P>
-It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are
-</P>
-<P>
-<PRE>
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-</PRE>
-</P>
-<P>
-If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.
-</P>
-<P>
-There are two kinds of condition. If the text between the parentheses consists
-of a sequence of digits, the condition is satisfied if the capturing subpattern
-of that number has previously matched. The number must be greater than zero.
-Consider the following pattern, which contains non-significant white space to
-make it more readable (assume the PCRE_EXTENDED option) and to divide it into
-three parts for ease of discussion:
-</P>
-<P>
-<PRE>
- ( \( )? [^()]+ (?(1) \) )
-</PRE>
-</P>
-<P>
-The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.
-</P>
-<P>
-If the condition is not a sequence of digits, it must be an assertion. This may
-be a positive or negative lookahead or lookbehind assertion. Consider this
-pattern, again containing non-significant white space, and with the two
-alternatives on the second line:
-</P>
-<P>
-<PRE>
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
-</PRE>
-</P>
-<P>
-The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
-</P>
-<LI><A NAME="SEC27" HREF="#TOC1">COMMENTS</A>
-<P>
-The sequence (?# marks the start of a comment which continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.
-</P>
-<P>
-If the PCRE_EXTENDED option is set, an unescaped # character outside a
-character class introduces a comment that continues up to the next newline
-character in the pattern.
-</P>
-<LI><A NAME="SEC28" HREF="#TOC1">RECURSIVE PATTERNS</A>
-<P>
-Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth. Perl 5.6 has provided an
-experimental facility that allows regular expressions to recurse (amongst other
-things). It does this by interpolating Perl code in the expression at run time,
-and the code can refer to the expression itself. A Perl pattern to solve the
-parentheses problem can be created like this:
-</P>
-<P>
-<PRE>
- $re = qr{\( (?: (?&#62;[^()]+) | (?p{$re}) )* \)}x;
-</PRE>
-</P>
-<P>
-The (?p{...}) item interpolates Perl code at run time, and in this case refers
-recursively to the pattern in which it appears. Obviously, PCRE cannot support
-the interpolation of Perl code. Instead, the special item (?R) is provided for
-the specific case of recursion. This PCRE pattern solves the parentheses
-problem (assume the PCRE_EXTENDED option is set so that white space is
-ignored):
-</P>
-<P>
-<PRE>
- \( ( (?&#62;[^()]+) | (?R) )* \)
-</PRE>
-</P>
-<P>
-First it matches an opening parenthesis. Then it matches any number of
-substrings which can either be a sequence of non-parentheses, or a recursive
-match of the pattern itself (i.e. a correctly parenthesized substring). Finally
-there is a closing parenthesis.
-</P>
-<P>
-This particular example pattern contains nested unlimited repeats, and so the
-use of a once-only subpattern for matching strings of non-parentheses is
-important when applying the pattern to strings that do not match. For example,
-when it is applied to
-</P>
-<P>
-<PRE>
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-</PRE>
-</P>
-<P>
-it yields "no match" quickly. However, if a once-only subpattern is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.
-</P>
-<P>
-The values set for any capturing subpatterns are those from the outermost level
-of the recursion at which the subpattern value is set. If the pattern above is
-matched against
-</P>
-<P>
-<PRE>
- (ab(cd)ef)
-</PRE>
-</P>
-<P>
-the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving
-</P>
-<P>
-<PRE>
- \( ( ( (?&#62;[^()]+) | (?R) )* ) \)
- ^ ^
- ^ ^
-</PRE>
-the string they capture is "ab(cd)ef", the contents of the top level
-parentheses. If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using <B>pcre_malloc</B>, freeing it via <B>pcre_free</B> afterwards. If no
-memory can be obtained, it saves data for the first 15 capturing parentheses
-only, as there is no way to give an out-of-memory error from within a
-recursion.
-</P>
-<LI><A NAME="SEC29" HREF="#TOC1">PERFORMANCE</A>
-<P>
-Certain items that may appear in patterns are more efficient than others. It is
-more efficient to use a character class like [aeiou] than a set of alternatives
-such as (a|e|i|o|u). In general, the simplest construction that provides the
-required behaviour is usually the most efficient. Jeffrey Friedl's book
-contains a lot of discussion about optimizing regular expressions for efficient
-performance.
-</P>
-<P>
-When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is
-implicitly anchored by PCRE, since it can match only at the start of a subject
-string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization,
-because the . metacharacter does not then match a newline, and if the subject
-string contains newlines, the pattern may match from the character immediately
-following one of them instead of from the very start. For example, the pattern
-</P>
-<P>
-<PRE>
- (.*) second
-</PRE>
-</P>
-<P>
-matches the subject "first\nand second" (where \n stands for a newline
-character) with the first captured substring being "and". In order to do this,
-PCRE has to retry the match starting after every newline in the subject.
-</P>
-<P>
-If you are using such a pattern with subject strings that do not contain
-newlines, the best performance is obtained by setting PCRE_DOTALL, or starting
-the pattern with ^.* to indicate explicit anchoring. That saves PCRE from
-having to scan along the subject looking for a newline to restart at.
-</P>
-<P>
-Beware of patterns that contain nested indefinite repeats. These can take a
-long time to run when applied to a string that does not match. Consider the
-pattern fragment
-</P>
-<P>
-<PRE>
- (a+)*
-</PRE>
-</P>
-<P>
-This can match "aaaa" in 33 different ways, and this number increases very
-rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
-times, and for each of those cases other than 0, the + repeats can match
-different numbers of times.) When the remainder of the pattern is such that the
-entire match is going to fail, PCRE has in principle to try every possible
-variation, and this can take an extremely long time.
-</P>
-<P>
-An optimization catches some of the more simple cases such as
-</P>
-<P>
-<PRE>
- (a+)*b
-</PRE>
-</P>
-<P>
-where a literal character follows. Before embarking on the standard matching
-procedure, PCRE checks that there is a "b" later in the subject string, and if
-there is not, it fails the match immediately. However, when there is no
-following literal this optimization cannot be used. You can see the difference
-by comparing the behaviour of
-</P>
-<P>
-<PRE>
- (a+)*\d
-</PRE>
-</P>
-<P>
-with the pattern above. The former gives a failure almost instantly when
-applied to a whole line of "a" characters, whereas the latter takes an
-appreciable time with strings longer than about 20 characters.
-</P>
-<LI><A NAME="SEC30" HREF="#TOC1">UTF-8 SUPPORT</A>
-<P>
-Starting at release 3.3, PCRE has some support for character strings encoded
-in the UTF-8 format. This is incomplete, and is regarded as experimental. In
-order to use it, you must configure PCRE to include UTF-8 support in the code,
-and, in addition, you must call <B>pcre_compile()</B> with the PCRE_UTF8 option
-flag. When you do this, both the pattern and any subject strings that are
-matched against it are treated as UTF-8 strings instead of just strings of
-bytes, but only in the cases that are mentioned below.
-</P>
-<P>
-If you compile PCRE with UTF-8 support, but do not use it at run time, the
-library will be a bit bigger, but the additional run time overhead is limited
-to testing the PCRE_UTF8 flag in several places, so should not be very large.
-</P>
-<P>
-PCRE assumes that the strings it is given contain valid UTF-8 codes. It does
-not diagnose invalid UTF-8 strings. If you pass invalid UTF-8 strings to PCRE,
-the results are undefined.
-</P>
-<P>
-Running with PCRE_UTF8 set causes these changes in the way PCRE works:
-</P>
-<P>
-1. In a pattern, the escape sequence \x{...}, where the contents of the braces
-is a string of hexadecimal digits, is interpreted as a UTF-8 character whose
-code number is the given hexadecimal number, for example: \x{1234}. This
-inserts from one to six literal bytes into the pattern, using the UTF-8
-encoding. If a non-hexadecimal digit appears between the braces, the item is
-not recognized.
-</P>
-<P>
-2. The original hexadecimal escape sequence, \xhh, generates a two-byte UTF-8
-character if its value is greater than 127.
-</P>
-<P>
-3. Repeat quantifiers are NOT correctly handled if they follow a multibyte
-character. For example, \x{100}* and \xc3+ do not work. If you want to
-repeat such characters, you must enclose them in non-capturing parentheses,
-for example (?:\x{100}), at present.
-</P>
-<P>
-4. The dot metacharacter matches one UTF-8 character instead of a single byte.
-</P>
-<P>
-5. Unlike literal UTF-8 characters, the dot metacharacter followed by a
-repeat quantifier does operate correctly on UTF-8 characters instead of
-single bytes.
-</P>
-<P>
-4. Although the \x{...} escape is permitted in a character class, characters
-whose values are greater than 255 cannot be included in a class.
-</P>
-<P>
-5. A class is matched against a UTF-8 character instead of just a single byte,
-but it can match only characters whose values are less than 256. Characters
-with greater values always fail to match a class.
-</P>
-<P>
-6. Repeated classes work correctly on multiple characters.
-</P>
-<P>
-7. Classes containing just a single character whose value is greater than 127
-(but less than 256), for example, [\x80] or [^\x{93}], do not work because
-these are optimized into single byte matches. In the first case, of course,
-the class brackets are just redundant.
-</P>
-<P>
-8. Lookbehind assertions move backwards in the subject by a fixed number of
-characters instead of a fixed number of bytes. Simple cases have been tested
-to work correctly, but there may be hidden gotchas herein.
-</P>
-<P>
-9. The character types such as \d and \w do not work correctly with UTF-8
-characters. They continue to test a single byte.
-</P>
-<P>
-10. Anything not explicitly mentioned here continues to work in bytes rather
-than in characters.
-</P>
-<P>
-The following UTF-8 features of Perl 5.6 are not implemented:
-</P>
-<P>
-1. The escape sequence \C to match a single byte.
-</P>
-<P>
-2. The use of Unicode tables and properties and escapes \p, \P, and \X.
-</P>
-<LI><A NAME="SEC31" HREF="#TOC1">SAMPLE PROGRAM</A>
-<P>
-The code below is a simple, complete demonstration program, to get you started
-with using PCRE. This code is also supplied in the file <I>pcredemo.c</I> in the
-PCRE distribution.
-</P>
-<P>
-The program compiles the regular expression that is its first argument, and
-matches it against the subject string in its second argument. No options are
-set, and default character tables are used. If matching succeeds, the program
-outputs the portion of the subject that matched, together with the contents of
-any captured substrings.
-</P>
-<P>
-On a Unix system that has PCRE installed in <I>/usr/local</I>, you can compile
-the demonstration program using a command like this:
-</P>
-<P>
-<PRE>
- gcc -o pcredemo pcredemo.c -I/usr/local/include -L/usr/local/lib -lpcre
-</PRE>
-</P>
-<P>
-Then you can run simple tests like this:
-</P>
-<P>
-<PRE>
- ./pcredemo 'cat|dog' 'the cat sat on the mat'
-</PRE>
-</P>
-<P>
-Note that there is a much more comprehensive test program, called
-<B>pcretest</B>, which supports many more facilities for testing regular
-expressions. The <B>pcredemo</B> program is provided as a simple coding example.
-</P>
-<P>
-On some operating systems (e.g. Solaris) you may get an error like this when
-you try to run <B>pcredemo</B>:
-</P>
-<P>
-<PRE>
- ld.so.1: a.out: fatal: libpcre.so.0: open failed: No such file or directory
-</PRE>
-</P>
-<P>
-This is caused by the way shared library support works on those systems. You
-need to add
-</P>
-<P>
-<PRE>
- -R/usr/local/lib
-</PRE>
-</P>
-<P>
-to the compile command to get round this problem. Here's the code:
-</P>
-<P>
-<PRE>
- #include &#60;stdio.h&#62;
- #include &#60;string.h&#62;
- #include &#60;pcre.h&#62;
-</PRE>
-</P>
-<P>
-<PRE>
- #define OVECCOUNT 30 /* should be a multiple of 3 */
-</PRE>
-</P>
-<P>
-<PRE>
- int main(int argc, char **argv)
- {
- pcre *re;
- const char *error;
- int erroffset;
- int ovector[OVECCOUNT];
- int rc, i;
-</PRE>
-</P>
-<P>
-<PRE>
- if (argc != 3)
- {
- printf("Two arguments required: a regex and a "
- "subject string\n");
- return 1;
- }
-</PRE>
-</P>
-<P>
-<PRE>
- /* Compile the regular expression in the first argument */
-</PRE>
-</P>
-<P>
-<PRE>
- re = pcre_compile(
- argv[1], /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-</PRE>
-</P>
-<P>
-<PRE>
- /* Compilation failed: print the error message and exit */
-</PRE>
-</P>
-<P>
-<PRE>
- if (re == NULL)
- {
- printf("PCRE compilation failed at offset %d: %s\n",
- erroffset, error);
- return 1;
- }
-</PRE>
-</P>
-<P>
-<PRE>
- /* Compilation succeeded: match the subject in the second
- argument */
-</PRE>
-</P>
-<P>
-<PRE>
- rc = pcre_exec(
- re, /* the compiled pattern */
- NULL, /* we didn't study the pattern */
- argv[2], /* the subject string */
- (int)strlen(argv[2]), /* the length of the subject */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- OVECCOUNT); /* number of elements in the vector */
-</PRE>
-</P>
-<P>
-<PRE>
- /* Matching failed: handle error cases */
-</PRE>
-</P>
-<P>
-<PRE>
- if (rc &#60; 0)
- {
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: printf("No match\n"); break;
- /*
- Handle other special cases if you like
- */
- default: printf("Matching error %d\n", rc); break;
- }
- return 1;
- }
-</PRE>
-</P>
-<P>
-<PRE>
- /* Match succeded */
-</PRE>
-</P>
-<P>
-<PRE>
- printf("Match succeeded\n");
-</PRE>
-</P>
-<P>
-<PRE>
- /* The output vector wasn't big enough */
-</PRE>
-</P>
-<P>
-<PRE>
- if (rc == 0)
- {
- rc = OVECCOUNT/3;
- printf("ovector only has room for %d captured "
- substrings\n", rc - 1);
- }
-</PRE>
-</P>
-<P>
-<PRE>
- /* Show substrings stored in the output vector */
-</PRE>
-</P>
-<P>
-<PRE>
- for (i = 0; i &#60; rc; i++)
- {
- char *substring_start = argv[2] + ovector[2*i];
- int substring_length = ovector[2*i+1] - ovector[2*i];
- printf("%2d: %.*s\n", i, substring_length,
- substring_start);
- }
-</PRE>
-</P>
-<P>
-<PRE>
- return 0;
- }
-</PRE>
-</P>
-<LI><A NAME="SEC32" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Last updated: 15 August 2001
-<BR>
-Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcre.txt b/srclib/pcre/doc/pcre.txt
deleted file mode 100644
index 95f148f3de..0000000000
--- a/srclib/pcre/doc/pcre.txt
+++ /dev/null
@@ -1,2315 +0,0 @@
-NAME
- pcre - Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
- #include <pcre.h>
-
- pcre *pcre_compile(const char *pattern, int options,
- const char **errptr, int *erroffset,
- const unsigned char *tableptr);
-
- pcre_extra *pcre_study(const pcre *code, int options,
- const char **errptr);
-
- int pcre_exec(const pcre *code, const pcre_extra *extra,
- const char *subject, int length, int startoffset,
- int options, int *ovector, int ovecsize);
-
- int pcre_copy_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber, char *buffer,
- int buffersize);
-
- int pcre_get_substring(const char *subject, int *ovector,
- int stringcount, int stringnumber,
- const char **stringptr);
-
- int pcre_get_substring_list(const char *subject,
- int *ovector, int stringcount, const char ***listptr);
-
- void pcre_free_substring(const char *stringptr);
-
- void pcre_free_substring_list(const char **stringptr);
-
- const unsigned char *pcre_maketables(void);
-
- int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
- int what, void *where);
-
- int pcre_info(const pcre *code, int *optptr, *firstcharptr);
-
- char *pcre_version(void);
-
- void *(*pcre_malloc)(size_t);
-
- void (*pcre_free)(void *);
-
-
-
-
-DESCRIPTION
- The PCRE library is a set of functions that implement regu-
- lar expression pattern matching using the same syntax and
- semantics as Perl 5, with just a few differences (see
-
- below). The current implementation corresponds to Perl
- 5.005, with some additional features from later versions.
- This includes some experimental, incomplete support for
- UTF-8 encoded strings. Details of exactly what is and what
- is not supported are given below.
-
- PCRE has its own native API, which is described in this
- document. There is also a set of wrapper functions that
- correspond to the POSIX regular expression API. These are
- described in the pcreposix documentation.
-
- The native API function prototypes are defined in the header
- file pcre.h, and on Unix systems the library itself is
- called libpcre.a, so can be accessed by adding -lpcre to the
- command for linking an application which calls it. The
- header file defines the macros PCRE_MAJOR and PCRE_MINOR to
- contain the major and minor release numbers for the library.
- Applications can use these to include support for different
- releases.
-
- The functions pcre_compile(), pcre_study(), and pcre_exec()
- are used for compiling and matching regular expressions. A
- sample program that demonstrates the simplest way of using
- them is given in the file pcredemo.c. The last section of
- this man page describes how to run it.
-
- The functions pcre_copy_substring(), pcre_get_substring(),
- and pcre_get_substring_list() are convenience functions for
- extracting captured substrings from a matched subject
- string; pcre_free_substring() and pcre_free_substring_list()
- are also provided, to free the memory used for extracted
- strings.
-
- The function pcre_maketables() is used (optionally) to build
- a set of character tables in the current locale for passing
- to pcre_compile().
-
- The function pcre_fullinfo() is used to find out information
- about a compiled pattern; pcre_info() is an obsolete version
- which returns only some of the available information, but is
- retained for backwards compatibility. The function
- pcre_version() returns a pointer to a string containing the
- version of PCRE and its date of release.
-
- The global variables pcre_malloc and pcre_free initially
- contain the entry points of the standard malloc() and free()
- functions respectively. PCRE calls the memory management
- functions via these variables, so a calling program can
- replace them if it wishes to intercept the calls. This
- should be done before calling any PCRE functions.
-
-
-
-MULTI-THREADING
- The PCRE functions can be used in multi-threading applica-
- tions, with the proviso that the memory management functions
- pointed to by pcre_malloc and pcre_free are shared by all
- threads.
-
- The compiled form of a regular expression is not altered
- during matching, so the same compiled pattern can safely be
- used by several threads at once.
-
-
-
-COMPILING A PATTERN
- The function pcre_compile() is called to compile a pattern
- into an internal form. The pattern is a C string terminated
- by a binary zero, and is passed in the argument pattern. A
- pointer to a single block of memory that is obtained via
- pcre_malloc is returned. This contains the compiled code and
- related data. The pcre type is defined for the returned
- block; this is a typedef for a structure whose contents are
- not externally defined. It is up to the caller to free the
- memory when it is no longer required.
-
- Although the compiled code of a PCRE regex is relocatable,
- that is, it does not depend on memory location, the complete
- pcre data block is not fully relocatable, because it con-
- tains a copy of the tableptr argument, which is an address
- (see below).
-
- The size of a compiled pattern is roughly proportional to
- the length of the pattern string, except that each character
- class (other than those containing just a single character,
- negated or not) requires 33 bytes, and repeat quantifiers
- with a minimum greater than one or a bounded maximum cause
- the relevant portions of the compiled pattern to be repli-
- cated.
-
- The options argument contains independent bits that affect
- the compilation. It should be zero if no options are
- required. Some of the options, in particular, those that are
- compatible with Perl, can also be set and unset from within
- the pattern (see the detailed description of regular expres-
- sions below). For these options, the contents of the options
- argument specifies their initial settings at the start of
- compilation and execution. The PCRE_ANCHORED option can be
- set at the time of matching as well as at compile time.
-
- If errptr is NULL, pcre_compile() returns NULL immediately.
- Otherwise, if compilation of a pattern fails, pcre_compile()
- returns NULL, and sets the variable pointed to by errptr to
- point to a textual error message. The offset from the start
- of the pattern to the character where the error was
- discovered is placed in the variable pointed to by
- erroffset, which must not be NULL. If it is, an immediate
- error is given.
-
- If the final argument, tableptr, is NULL, PCRE uses a
- default set of character tables which are built when it is
- compiled, using the default C locale. Otherwise, tableptr
- must be the result of a call to pcre_maketables(). See the
- section on locale support below.
-
- This code fragment shows a typical straightforward call to
- pcre_compile():
-
- pcre *re;
- const char *error;
- int erroffset;
- re = pcre_compile(
- "^A.*Z", /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-
- The following option bits are defined in the header file:
-
- PCRE_ANCHORED
-
- If this bit is set, the pattern is forced to be "anchored",
- that is, it is constrained to match only at the start of the
- string which is being searched (the "subject string"). This
- effect can also be achieved by appropriate constructs in the
- pattern itself, which is the only way to do it in Perl.
-
- PCRE_CASELESS
-
- If this bit is set, letters in the pattern match both upper
- and lower case letters. It is equivalent to Perl's /i
- option.
-
- PCRE_DOLLAR_ENDONLY
-
- If this bit is set, a dollar metacharacter in the pattern
- matches only at the end of the subject string. Without this
- option, a dollar also matches immediately before the final
- character if it is a newline (but not before any other new-
- lines). The PCRE_DOLLAR_ENDONLY option is ignored if
- PCRE_MULTILINE is set. There is no equivalent to this option
- in Perl.
-
- PCRE_DOTALL
-
- If this bit is set, a dot metacharater in the pattern
- matches all characters, including newlines. Without it, new-
- lines are excluded. This option is equivalent to Perl's /s
- option. A negative class such as [^a] always matches a new-
- line character, independent of the setting of this option.
-
- PCRE_EXTENDED
-
- If this bit is set, whitespace data characters in the pat-
- tern are totally ignored except when escaped or inside a
- character class, and characters between an unescaped # out-
- side a character class and the next newline character,
- inclusive, are also ignored. This is equivalent to Perl's /x
- option, and makes it possible to include comments inside
- complicated patterns. Note, however, that this applies only
- to data characters. Whitespace characters may never appear
- within special character sequences in a pattern, for example
- within the sequence (?( which introduces a conditional sub-
- pattern.
-
- PCRE_EXTRA
-
- This option was invented in order to turn on additional
- functionality of PCRE that is incompatible with Perl, but it
- is currently of very little use. When set, any backslash in
- a pattern that is followed by a letter that has no special
- meaning causes an error, thus reserving these combinations
- for future expansion. By default, as in Perl, a backslash
- followed by a letter with no special meaning is treated as a
- literal. There are at present no other features controlled
- by this option. It can also be set by a (?X) option setting
- within a pattern.
-
- PCRE_MULTILINE
-
- By default, PCRE treats the subject string as consisting of
- a single "line" of characters (even if it actually contains
- several newlines). The "start of line" metacharacter (^)
- matches only at the start of the string, while the "end of
- line" metacharacter ($) matches only at the end of the
- string, or before a terminating newline (unless
- PCRE_DOLLAR_ENDONLY is set). This is the same as Perl.
-
- When PCRE_MULTILINE it is set, the "start of line" and "end
- of line" constructs match immediately following or immedi-
- ately before any newline in the subject string, respec-
- tively, as well as at the very start and end. This is
- equivalent to Perl's /m option. If there are no "\n" charac-
- ters in a subject string, or no occurrences of ^ or $ in a
- pattern, setting PCRE_MULTILINE has no effect.
-
- PCRE_UNGREEDY
-
- This option inverts the "greediness" of the quantifiers so
- that they are not greedy by default, but become greedy if
- followed by "?". It is not compatible with Perl. It can also
- be set by a (?U) option setting within the pattern.
-
- PCRE_UTF8
-
- This option causes PCRE to regard both the pattern and the
- subject as strings of UTF-8 characters instead of just byte
- strings. However, it is available only if PCRE has been
- built to include UTF-8 support. If not, the use of this
- option provokes an error. Support for UTF-8 is new, experi-
- mental, and incomplete. Details of exactly what it entails
- are given below.
-
-
-
-STUDYING A PATTERN
- When a pattern is going to be used several times, it is
- worth spending more time analyzing it in order to speed up
- the time taken for matching. The function pcre_study() takes
- a pointer to a compiled pattern as its first argument, and
- returns a pointer to a pcre_extra block (another typedef for
- a structure with hidden contents) containing additional
- information about the pattern; this can be passed to
- pcre_exec(). If no additional information is available, NULL
- is returned.
-
- The second argument contains option bits. At present, no
- options are defined for pcre_study(), and this argument
- should always be zero.
-
- The third argument for pcre_study() is a pointer to an error
- message. If studying succeeds (even if no data is returned),
- the variable it points to is set to NULL. Otherwise it
- points to a textual error message.
-
- This is a typical call to pcre_study():
-
- pcre_extra *pe;
- pe = pcre_study(
- re, /* result of pcre_compile() */
- 0, /* no options exist */
- &error); /* set to NULL or points to a message */
-
- At present, studying a pattern is useful only for non-
- anchored patterns that do not have a single fixed starting
- character. A bitmap of possible starting characters is
- created.
-
-
-
-LOCALE SUPPORT
- PCRE handles caseless matching, and determines whether char-
- acters are letters, digits, or whatever, by reference to a
- set of tables. The library contains a default set of tables
- which is created in the default C locale when PCRE is com-
- piled. This is used when the final argument of
- pcre_compile() is NULL, and is sufficient for many applica-
- tions.
-
- An alternative set of tables can, however, be supplied. Such
- tables are built by calling the pcre_maketables() function,
- which has no arguments, in the relevant locale. The result
- can then be passed to pcre_compile() as often as necessary.
- For example, to build and use tables that are appropriate
- for the French locale (where accented characters with codes
- greater than 128 are treated as letters), the following code
- could be used:
-
- setlocale(LC_CTYPE, "fr");
- tables = pcre_maketables();
- re = pcre_compile(..., tables);
-
- The tables are built in memory that is obtained via
- pcre_malloc. The pointer that is passed to pcre_compile is
- saved with the compiled pattern, and the same tables are
- used via this pointer by pcre_study() and pcre_exec(). Thus
- for any single pattern, compilation, studying and matching
- all happen in the same locale, but different patterns can be
- compiled in different locales. It is the caller's responsi-
- bility to ensure that the memory containing the tables
- remains available for as long as it is needed.
-
-
-
-INFORMATION ABOUT A PATTERN
- The pcre_fullinfo() function returns information about a
- compiled pattern. It replaces the obsolete pcre_info() func-
- tion, which is nevertheless retained for backwards compabil-
- ity (and is documented below).
-
- The first argument for pcre_fullinfo() is a pointer to the
- compiled pattern. The second argument is the result of
- pcre_study(), or NULL if the pattern was not studied. The
- third argument specifies which piece of information is
- required, while the fourth argument is a pointer to a vari-
- able to receive the data. The yield of the function is zero
- for success, or one of the following negative numbers:
-
- PCRE_ERROR_NULL the argument code was NULL
- the argument where was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
- PCRE_ERROR_BADOPTION the value of what was invalid
-
- Here is a typical call of pcre_fullinfo(), to obtain the
- length of the compiled pattern:
-
- int rc;
- unsigned long int length;
- rc = pcre_fullinfo(
- re, /* result of pcre_compile() */
- pe, /* result of pcre_study(), or NULL */
- PCRE_INFO_SIZE, /* what is required */
- &length); /* where to put the data */
-
- The possible values for the third argument are defined in
- pcre.h, and are as follows:
-
- PCRE_INFO_OPTIONS
-
- Return a copy of the options with which the pattern was com-
- piled. The fourth argument should point to an unsigned long
- int variable. These option bits are those specified in the
- call to pcre_compile(), modified by any top-level option
- settings within the pattern itself, and with the
- PCRE_ANCHORED bit forcibly set if the form of the pattern
- implies that it can match only at the start of a subject
- string.
-
- PCRE_INFO_SIZE
-
- Return the size of the compiled pattern, that is, the value
- that was passed as the argument to pcre_malloc() when PCRE
- was getting memory in which to place the compiled data. The
- fourth argument should point to a size_t variable.
-
- PCRE_INFO_CAPTURECOUNT
-
- Return the number of capturing subpatterns in the pattern.
- The fourth argument should point to an int variable.
-
- PCRE_INFO_BACKREFMAX
-
- Return the number of the highest back reference in the pat-
- tern. The fourth argument should point to an int variable.
- Zero is returned if there are no back references.
-
- PCRE_INFO_FIRSTCHAR
-
- Return information about the first character of any matched
- string, for a non-anchored pattern. If there is a fixed
- first character, e.g. from a pattern such as
- (cat|cow|coyote), it is returned in the integer pointed to
- by where. Otherwise, if either
-
- (a) the pattern was compiled with the PCRE_MULTILINE option,
- and every branch starts with "^", or
-
- (b) every branch of the pattern starts with ".*" and
- PCRE_DOTALL is not set (if it were set, the pattern would be
- anchored),
-
- -1 is returned, indicating that the pattern matches only at
- the start of a subject string or after any "\n" within the
- string. Otherwise -2 is returned. For anchored patterns, -2
- is returned.
-
- PCRE_INFO_FIRSTTABLE
-
- If the pattern was studied, and this resulted in the con-
- struction of a 256-bit table indicating a fixed set of char-
- acters for the first character in any matching string, a
- pointer to the table is returned. Otherwise NULL is
- returned. The fourth argument should point to an unsigned
- char * variable.
-
- PCRE_INFO_LASTLITERAL
-
- For a non-anchored pattern, return the value of the right-
- most literal character which must exist in any matched
- string, other than at its start. The fourth argument should
- point to an int variable. If there is no such character, or
- if the pattern is anchored, -1 is returned. For example, for
- the pattern /a\d+z\d+/ the returned value is 'z'.
-
- The pcre_info() function is now obsolete because its inter-
- face is too restrictive to return all the available data
- about a compiled pattern. New programs should use
- pcre_fullinfo() instead. The yield of pcre_info() is the
- number of capturing subpatterns, or one of the following
- negative numbers:
-
- PCRE_ERROR_NULL the argument code was NULL
- PCRE_ERROR_BADMAGIC the "magic number" was not found
-
- If the optptr argument is not NULL, a copy of the options
- with which the pattern was compiled is placed in the integer
- it points to (see PCRE_INFO_OPTIONS above).
-
- If the pattern is not anchored and the firstcharptr argument
- is not NULL, it is used to pass back information about the
- first character of any matched string (see
- PCRE_INFO_FIRSTCHAR above).
-
-
-
-MATCHING A PATTERN
- The function pcre_exec() is called to match a subject string
-
-
-
-
-
-SunOS 5.8 Last change: 9
-
-
-
- against a pre-compiled pattern, which is passed in the code
- argument. If the pattern has been studied, the result of the
- study should be passed in the extra argument. Otherwise this
- must be NULL.
-
- Here is an example of a simple call to pcre_exec():
-
- int rc;
- int ovector[30];
- rc = pcre_exec(
- re, /* result of pcre_compile() */
- NULL, /* we didn't study the pattern */
- "some string", /* the subject string */
- 11, /* the length of the subject string */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- 30); /* number of elements in the vector */
-
- The PCRE_ANCHORED option can be passed in the options argu-
- ment, whose unused bits must be zero. However, if a pattern
- was compiled with PCRE_ANCHORED, or turned out to be
- anchored by virtue of its contents, it cannot be made
- unachored at matching time.
-
- There are also three further options that can be set only at
- matching time:
-
- PCRE_NOTBOL
-
- The first character of the string is not the beginning of a
- line, so the circumflex metacharacter should not match
- before it. Setting this without PCRE_MULTILINE (at compile
- time) causes circumflex never to match.
-
- PCRE_NOTEOL
-
- The end of the string is not the end of a line, so the dol-
- lar metacharacter should not match it nor (except in multi-
- line mode) a newline immediately before it. Setting this
- without PCRE_MULTILINE (at compile time) causes dollar never
- to match.
-
- PCRE_NOTEMPTY
-
- An empty string is not considered to be a valid match if
- this option is set. If there are alternatives in the pat-
- tern, they are tried. If all the alternatives match the
- empty string, the entire match fails. For example, if the
- pattern
-
- a?b?
-
- is applied to a string not beginning with "a" or "b", it
- matches the empty string at the start of the subject. With
- PCRE_NOTEMPTY set, this match is not valid, so PCRE searches
- further into the string for occurrences of "a" or "b".
-
- Perl has no direct equivalent of PCRE_NOTEMPTY, but it does
- make a special case of a pattern match of the empty string
- within its split() function, and when using the /g modifier.
- It is possible to emulate Perl's behaviour after matching a
- null string by first trying the match again at the same
- offset with PCRE_NOTEMPTY set, and then if that fails by
- advancing the starting offset (see below) and trying an
- ordinary match again.
-
- The subject string is passed as a pointer in subject, a
- length in length, and a starting offset in startoffset.
- Unlike the pattern string, the subject may contain binary
- zero characters. When the starting offset is zero, the
- search for a match starts at the beginning of the subject,
- and this is by far the most common case.
-
- A non-zero starting offset is useful when searching for
- another match in the same subject by calling pcre_exec()
- again after a previous success. Setting startoffset differs
- from just passing over a shortened string and setting
- PCRE_NOTBOL in the case of a pattern that begins with any
- kind of lookbehind. For example, consider the pattern
-
- \Biss\B
-
- which finds occurrences of "iss" in the middle of words. (\B
- matches only if the current position in the subject is not a
- word boundary.) When applied to the string "Mississipi" the
- first call to pcre_exec() finds the first occurrence. If
- pcre_exec() is called again with just the remainder of the
- subject, namely "issipi", it does not match, because \B is
- always false at the start of the subject, which is deemed to
- be a word boundary. However, if pcre_exec() is passed the
- entire string again, but with startoffset set to 4, it finds
- the second occurrence of "iss" because it is able to look
- behind the starting point to discover that it is preceded by
- a letter.
-
- If a non-zero starting offset is passed when the pattern is
- anchored, one attempt to match at the given offset is tried.
- This can only succeed if the pattern does not require the
- match to be at the start of the subject.
-
- In general, a pattern matches a certain portion of the sub-
- ject, and in addition, further substrings from the subject
- may be picked out by parts of the pattern. Following the
- usage in Jeffrey Friedl's book, this is called "capturing"
- in what follows, and the phrase "capturing subpattern" is
- used for a fragment of a pattern that picks out a substring.
- PCRE supports several other kinds of parenthesized subpat-
- tern that do not cause substrings to be captured.
-
- Captured substrings are returned to the caller via a vector
- of integer offsets whose address is passed in ovector. The
- number of elements in the vector is passed in ovecsize. The
- first two-thirds of the vector is used to pass back captured
- substrings, each substring using a pair of integers. The
- remaining third of the vector is used as workspace by
- pcre_exec() while matching capturing subpatterns, and is not
- available for passing back information. The length passed in
- ovecsize should always be a multiple of three. If it is not,
- it is rounded down.
-
- When a match has been successful, information about captured
- substrings is returned in pairs of integers, starting at the
- beginning of ovector, and continuing up to two-thirds of its
- length at the most. The first element of a pair is set to
- the offset of the first character in a substring, and the
- second is set to the offset of the first character after the
- end of a substring. The first pair, ovector[0] and ovec-
- tor[1], identify the portion of the subject string matched
- by the entire pattern. The next pair is used for the first
- capturing subpattern, and so on. The value returned by
- pcre_exec() is the number of pairs that have been set. If
- there are no capturing subpatterns, the return value from a
- successful match is 1, indicating that just the first pair
- of offsets has been set.
-
- Some convenience functions are provided for extracting the
- captured substrings as separate strings. These are described
- in the following section.
-
- It is possible for an capturing subpattern number n+1 to
- match some part of the subject when subpattern n has not
- been used at all. For example, if the string "abc" is
- matched against the pattern (a|(z))(bc) subpatterns 1 and 3
- are matched, but 2 is not. When this happens, both offset
- values corresponding to the unused subpattern are set to -1.
-
- If a capturing subpattern is matched repeatedly, it is the
- last portion of the string that it matched that gets
- returned.
-
- If the vector is too small to hold all the captured sub-
- strings, it is used as far as possible (up to two-thirds of
- its length), and the function returns a value of zero. In
- particular, if the substring offsets are not of interest,
- pcre_exec() may be called with ovector passed as NULL and
- ovecsize as zero. However, if the pattern contains back
- references and the ovector isn't big enough to remember the
- related substrings, PCRE has to get additional memory for
- use during matching. Thus it is usually advisable to supply
- an ovector.
-
- Note that pcre_info() can be used to find out how many cap-
- turing subpatterns there are in a compiled pattern. The
- smallest size for ovector that will allow for n captured
- substrings in addition to the offsets of the substring
- matched by the whole pattern is (n+1)*3.
-
- If pcre_exec() fails, it returns a negative number. The fol-
- lowing are defined in the header file:
-
- PCRE_ERROR_NOMATCH (-1)
-
- The subject string did not match the pattern.
-
- PCRE_ERROR_NULL (-2)
-
- Either code or subject was passed as NULL, or ovector was
- NULL and ovecsize was not zero.
-
- PCRE_ERROR_BADOPTION (-3)
-
- An unrecognized bit was set in the options argument.
-
- PCRE_ERROR_BADMAGIC (-4)
-
- PCRE stores a 4-byte "magic number" at the start of the com-
- piled code, to catch the case when it is passed a junk
- pointer. This is the error it gives when the magic number
- isn't present.
-
- PCRE_ERROR_UNKNOWN_NODE (-5)
-
- While running the pattern match, an unknown item was encoun-
- tered in the compiled pattern. This error could be caused by
- a bug in PCRE or by overwriting of the compiled pattern.
-
- PCRE_ERROR_NOMEMORY (-6)
-
- If a pattern contains back references, but the ovector that
- is passed to pcre_exec() is not big enough to remember the
- referenced substrings, PCRE gets a block of memory at the
- start of matching to use for this purpose. If the call via
- pcre_malloc() fails, this error is given. The memory is
- freed at the end of matching.
-
-
-
-
-EXTRACTING CAPTURED SUBSTRINGS
- Captured substrings can be accessed directly by using the
- offsets returned by pcre_exec() in ovector. For convenience,
- the functions pcre_copy_substring(), pcre_get_substring(),
- and pcre_get_substring_list() are provided for extracting
- captured substrings as new, separate, zero-terminated
- strings. A substring that contains a binary zero is
- correctly extracted and has a further zero added on the end,
- but the result does not, of course, function as a C string.
-
- The first three arguments are the same for all three func-
- tions: subject is the subject string which has just been
- successfully matched, ovector is a pointer to the vector of
- integer offsets that was passed to pcre_exec(), and
- stringcount is the number of substrings that were captured
- by the match, including the substring that matched the
- entire regular expression. This is the value returned by
- pcre_exec if it is greater than zero. If pcre_exec()
- returned zero, indicating that it ran out of space in ovec-
- tor, the value passed as stringcount should be the size of
- the vector divided by three.
-
- The functions pcre_copy_substring() and pcre_get_substring()
- extract a single substring, whose number is given as string-
- number. A value of zero extracts the substring that matched
- the entire pattern, while higher values extract the captured
- substrings. For pcre_copy_substring(), the string is placed
- in buffer, whose length is given by buffersize, while for
- pcre_get_substring() a new block of memory is obtained via
- pcre_malloc, and its address is returned via stringptr. The
- yield of the function is the length of the string, not
- including the terminating zero, or one of
-
- PCRE_ERROR_NOMEMORY (-6)
-
- The buffer was too small for pcre_copy_substring(), or the
- attempt to get memory failed for pcre_get_substring().
-
- PCRE_ERROR_NOSUBSTRING (-7)
-
- There is no substring whose number is stringnumber.
-
- The pcre_get_substring_list() function extracts all avail-
- able substrings and builds a list of pointers to them. All
- this is done in a single block of memory which is obtained
- via pcre_malloc. The address of the memory block is returned
- via listptr, which is also the start of the list of string
- pointers. The end of the list is marked by a NULL pointer.
- The yield of the function is zero if all went well, or
-
- PCRE_ERROR_NOMEMORY (-6)
-
- if the attempt to get the memory block failed.
-
- When any of these functions encounter a substring that is
- unset, which can happen when capturing subpattern number n+1
- matches some part of the subject, but subpattern n has not
- been used at all, they return an empty string. This can be
- distinguished from a genuine zero-length substring by
- inspecting the appropriate offset in ovector, which is nega-
- tive for unset substrings.
-
- The two convenience functions pcre_free_substring() and
- pcre_free_substring_list() can be used to free the memory
- returned by a previous call of pcre_get_substring() or
- pcre_get_substring_list(), respectively. They do nothing
- more than call the function pointed to by pcre_free, which
- of course could be called directly from a C program. How-
- ever, PCRE is used in some situations where it is linked via
- a special interface to another programming language which
- cannot use pcre_free directly; it is for these cases that
- the functions are provided.
-
-
-
-LIMITATIONS
- There are some size limitations in PCRE but it is hoped that
- they will never in practice be relevant. The maximum length
- of a compiled pattern is 65539 (sic) bytes. All values in
- repeating quantifiers must be less than 65536. There max-
- imum number of capturing subpatterns is 65535. There is no
- limit to the number of non-capturing subpatterns, but the
- maximum depth of nesting of all kinds of parenthesized sub-
- pattern, including capturing subpatterns, assertions, and
- other types of subpattern, is 200.
-
- The maximum length of a subject string is the largest posi-
- tive number that an integer variable can hold. However, PCRE
- uses recursion to handle subpatterns and indefinite repeti-
- tion. This means that the available stack space may limit
- the size of a subject string that can be processed by cer-
- tain patterns.
-
-
-
-DIFFERENCES FROM PERL
- The differences described here are with respect to Perl
- 5.005.
-
- 1. By default, a whitespace character is any character that
- the C library function isspace() recognizes, though it is
- possible to compile PCRE with alternative character type
- tables. Normally isspace() matches space, formfeed, newline,
- carriage return, horizontal tab, and vertical tab. Perl 5 no
- longer includes vertical tab in its set of whitespace char-
- acters. The \v escape that was in the Perl documentation for
- a long time was never in fact recognized. However, the char-
- acter itself was treated as whitespace at least up to 5.002.
- In 5.004 and 5.005 it does not match \s.
-
- 2. PCRE does not allow repeat quantifiers on lookahead
- assertions. Perl permits them, but they do not mean what you
- might think. For example, (?!a){3} does not assert that the
- next three characters are not "a". It just asserts that the
- next character is not "a" three times.
-
- 3. Capturing subpatterns that occur inside negative looka-
- head assertions are counted, but their entries in the
- offsets vector are never set. Perl sets its numerical vari-
- ables from any such patterns that are matched before the
- assertion fails to match something (thereby succeeding), but
- only if the negative lookahead assertion contains just one
- branch.
-
- 4. Though binary zero characters are supported in the sub-
- ject string, they are not allowed in a pattern string
- because it is passed as a normal C string, terminated by
- zero. The escape sequence "\0" can be used in the pattern to
- represent a binary zero.
-
- 5. The following Perl escape sequences are not supported:
- \l, \u, \L, \U, \E, \Q. In fact these are implemented by
- Perl's general string-handling and are not part of its pat-
- tern matching engine.
-
- 6. The Perl \G assertion is not supported as it is not
- relevant to single pattern matches.
-
- 7. Fairly obviously, PCRE does not support the (?{code}) and
- (?p{code}) constructions. However, there is some experimen-
- tal support for recursive patterns using the non-Perl item
- (?R).
-
- 8. There are at the time of writing some oddities in Perl
- 5.005_02 concerned with the settings of captured strings
- when part of a pattern is repeated. For example, matching
- "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
- "b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2
- unset. However, if the pattern is changed to
- /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-
- In Perl 5.004 $2 is set in both cases, and that is also true
- of PCRE. If in the future Perl changes to a consistent state
- that is different, PCRE may change to follow.
-
- 9. Another as yet unresolved discrepancy is that in Perl
- 5.005_02 the pattern /^(a)?(?(1)a|b)+$/ matches the string
- "a", whereas in PCRE it does not. However, in both Perl and
- PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-
- 10. PCRE provides some extensions to the Perl regular
- expression facilities:
-
- (a) Although lookbehind assertions must match fixed length
- strings, each alternative branch of a lookbehind assertion
- can match a different length of string. Perl 5.005 requires
- them all to have the same length.
-
- (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not
- set, the $ meta- character matches only at the very end of
- the string.
-
- (c) If PCRE_EXTRA is set, a backslash followed by a letter
- with no special meaning is faulted.
-
- (d) If PCRE_UNGREEDY is set, the greediness of the repeti-
- tion quantifiers is inverted, that is, by default they are
- not greedy, but if followed by a question mark they are.
-
- (e) PCRE_ANCHORED can be used to force a pattern to be tried
- only at the start of the subject.
-
- (f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options
- for pcre_exec() have no Perl equivalents.
-
- (g) The (?R) construct allows for recursive pattern matching
- (Perl 5.6 can do this using the (?p{code}) construct, which
- PCRE cannot of course support.)
-
-
-
-REGULAR EXPRESSION DETAILS
- The syntax and semantics of the regular expressions sup-
- ported by PCRE are described below. Regular expressions are
- also described in the Perl documentation and in a number of
- other books, some of which have copious examples. Jeffrey
- Friedl's "Mastering Regular Expressions", published by
- O'Reilly (ISBN 1-56592-257), covers them in great detail.
-
- The description here is intended as reference documentation.
- The basic operation of PCRE is on strings of bytes. However,
- there is the beginnings of some support for UTF-8 character
- strings. To use this support you must configure PCRE to
- include it, and then call pcre_compile() with the PCRE_UTF8
- option. How this affects the pattern matching is described
- in the final section of this document.
-
- A regular expression is a pattern that is matched against a
- subject string from left to right. Most characters stand for
- themselves in a pattern, and match the corresponding charac-
- ters in the subject. As a trivial example, the pattern
-
- The quick brown fox
-
- matches a portion of a subject string that is identical to
- itself. The power of regular expressions comes from the
- ability to include alternatives and repetitions in the pat-
- tern. These are encoded in the pattern by the use of meta-
- characters, which do not stand for themselves but instead
- are interpreted in some special way.
-
- There are two different sets of meta-characters: those that
- are recognized anywhere in the pattern except within square
- brackets, and those that are recognized in square brackets.
- Outside square brackets, the meta-characters are as follows:
-
- \ general escape character with several uses
- ^ assert start of subject (or line, in multiline
- mode)
- $ assert end of subject (or line, in multiline mode)
- . match any character except newline (by default)
- [ start character class definition
- | start of alternative branch
- ( start subpattern
- ) end subpattern
- ? extends the meaning of (
- also 0 or 1 quantifier
- also quantifier minimizer
- * 0 or more quantifier
- + 1 or more quantifier
- { start min/max quantifier
-
- Part of a pattern that is in square brackets is called a
- "character class". In a character class the only meta-
- characters are:
-
- \ general escape character
- ^ negate the class, but only if the first character
- - indicates character range
- ] terminates the character class
-
- The following sections describe the use of each of the
- meta-characters.
-
-
-
-BACKSLASH
- The backslash character has several uses. Firstly, if it is
- followed by a non-alphameric character, it takes away any
- special meaning that character may have. This use of
-
- backslash as an escape character applies both inside and
- outside character classes.
-
- For example, if you want to match a "*" character, you write
- "\*" in the pattern. This applies whether or not the follow-
- ing character would otherwise be interpreted as a meta-
- character, so it is always safe to precede a non-alphameric
- with "\" to specify that it stands for itself. In particu-
- lar, if you want to match a backslash, you write "\\".
-
- If a pattern is compiled with the PCRE_EXTENDED option, whi-
- tespace in the pattern (other than in a character class) and
- characters between a "#" outside a character class and the
- next newline character are ignored. An escaping backslash
- can be used to include a whitespace or "#" character as part
- of the pattern.
-
- A second use of backslash provides a way of encoding non-
- printing characters in patterns in a visible manner. There
- is no restriction on the appearance of non-printing charac-
- ters, apart from the binary zero that terminates a pattern,
- but when a pattern is being prepared by text editing, it is
- usually easier to use one of the following escape sequences
- than the binary character it represents:
-
- \a alarm, that is, the BEL character (hex 07)
- \cx "control-x", where x is any character
- \e escape (hex 1B)
- \f formfeed (hex 0C)
- \n newline (hex 0A)
- \r carriage return (hex 0D)
- \t tab (hex 09)
- \xhh character with hex code hh
- \ddd character with octal code ddd, or backreference
-
- The precise effect of "\cx" is as follows: if "x" is a lower
- case letter, it is converted to upper case. Then bit 6 of
- the character (hex 40) is inverted. Thus "\cz" becomes hex
- 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex 7B.
-
- After "\x", up to two hexadecimal digits are read (letters
- can be in upper or lower case).
-
- After "\0" up to two further octal digits are read. In both
- cases, if there are fewer than two digits, just those that
- are present are used. Thus the sequence "\0\x\07" specifies
- two binary zeros followed by a BEL character. Make sure you
- supply two digits after the initial zero if the character
- that follows is itself an octal digit.
-
- The handling of a backslash followed by a digit other than 0
- is complicated. Outside a character class, PCRE reads it
- and any following digits as a decimal number. If the number
- is less than 10, or if there have been at least that many
- previous capturing left parentheses in the expression, the
- entire sequence is taken as a back reference. A description
- of how this works is given later, following the discussion
- of parenthesized subpatterns.
-
- Inside a character class, or if the decimal number is
- greater than 9 and there have not been that many capturing
- subpatterns, PCRE re-reads up to three octal digits follow-
- ing the backslash, and generates a single byte from the
- least significant 8 bits of the value. Any subsequent digits
- stand for themselves. For example:
-
- \040 is another way of writing a space
- \40 is the same, provided there are fewer than 40
- previous capturing subpatterns
- \7 is always a back reference
- \11 might be a back reference, or another way of
- writing a tab
- \011 is always a tab
- \0113 is a tab followed by the character "3"
- \113 is the character with octal code 113 (since there
- can be no more than 99 back references)
- \377 is a byte consisting entirely of 1 bits
- \81 is either a back reference, or a binary zero
- followed by the two characters "8" and "1"
-
- Note that octal values of 100 or greater must not be intro-
- duced by a leading zero, because no more than three octal
- digits are ever read.
-
- All the sequences that define a single byte value can be
- used both inside and outside character classes. In addition,
- inside a character class, the sequence "\b" is interpreted
- as the backspace character (hex 08). Outside a character
- class it has a different meaning (see below).
-
- The third use of backslash is for specifying generic charac-
- ter types:
-
- \d any decimal digit
- \D any character that is not a decimal digit
- \s any whitespace character
- \S any character that is not a whitespace character
- \w any "word" character
- \W any "non-word" character
-
- Each pair of escape sequences partitions the complete set of
- characters into two disjoint sets. Any given character
- matches one, and only one, of each pair.
-
- A "word" character is any letter or digit or the underscore
- character, that is, any character which can be part of a
- Perl "word". The definition of letters and digits is con-
- trolled by PCRE's character tables, and may vary if locale-
- specific matching is taking place (see "Locale support"
- above). For example, in the "fr" (French) locale, some char-
- acter codes greater than 128 are used for accented letters,
- and these are matched by \w.
-
- These character type sequences can appear both inside and
- outside character classes. They each match one character of
- the appropriate type. If the current matching point is at
- the end of the subject string, all of them fail, since there
- is no character to match.
-
- The fourth use of backslash is for certain simple asser-
- tions. An assertion specifies a condition that has to be met
- at a particular point in a match, without consuming any
- characters from the subject string. The use of subpatterns
- for more complicated assertions is described below. The
- backslashed assertions are
-
- \b word boundary
- \B not a word boundary
- \A start of subject (independent of multiline mode)
- \Z end of subject or newline at end (independent of
- multiline mode)
- \z end of subject (independent of multiline mode)
-
- These assertions may not appear in character classes (but
- note that "\b" has a different meaning, namely the backspace
- character, inside a character class).
-
- A word boundary is a position in the subject string where
- the current character and the previous character do not both
- match \w or \W (i.e. one matches \w and the other matches
- \W), or the start or end of the string if the first or last
- character matches \w, respectively.
-
- The \A, \Z, and \z assertions differ from the traditional
- circumflex and dollar (described below) in that they only
- ever match at the very start and end of the subject string,
- whatever options are set. They are not affected by the
- PCRE_NOTBOL or PCRE_NOTEOL options. If the startoffset argu-
- ment of pcre_exec() is non-zero, \A can never match. The
- difference between \Z and \z is that \Z matches before a
- newline that is the last character of the string as well as
- at the end of the string, whereas \z matches only at the
- end.
-
-
-
-CIRCUMFLEX AND DOLLAR
- Outside a character class, in the default matching mode, the
- circumflex character is an assertion which is true only if
- the current matching point is at the start of the subject
- string. If the startoffset argument of pcre_exec() is non-
- zero, circumflex can never match. Inside a character class,
- circumflex has an entirely different meaning (see below).
-
- Circumflex need not be the first character of the pattern if
- a number of alternatives are involved, but it should be the
- first thing in each alternative in which it appears if the
- pattern is ever to match that branch. If all possible alter-
- natives start with a circumflex, that is, if the pattern is
- constrained to match only at the start of the subject, it is
- said to be an "anchored" pattern. (There are also other con-
- structs that can cause a pattern to be anchored.)
-
- A dollar character is an assertion which is true only if the
- current matching point is at the end of the subject string,
- or immediately before a newline character that is the last
- character in the string (by default). Dollar need not be the
- last character of the pattern if a number of alternatives
- are involved, but it should be the last item in any branch
- in which it appears. Dollar has no special meaning in a
- character class.
-
- The meaning of dollar can be changed so that it matches only
- at the very end of the string, by setting the
- PCRE_DOLLAR_ENDONLY option at compile or matching time. This
- does not affect the \Z assertion.
-
- The meanings of the circumflex and dollar characters are
- changed if the PCRE_MULTILINE option is set. When this is
- the case, they match immediately after and immediately
- before an internal "\n" character, respectively, in addition
- to matching at the start and end of the subject string. For
- example, the pattern /^abc$/ matches the subject string
- "def\nabc" in multiline mode, but not otherwise. Conse-
- quently, patterns that are anchored in single line mode
- because all branches start with "^" are not anchored in mul-
- tiline mode, and a match for circumflex is possible when the
- startoffset argument of pcre_exec() is non-zero. The
- PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
- set.
-
- Note that the sequences \A, \Z, and \z can be used to match
- the start and end of the subject in both modes, and if all
- branches of a pattern start with \A it is always anchored,
- whether PCRE_MULTILINE is set or not.
-
-
-
-FULL STOP (PERIOD, DOT)
- Outside a character class, a dot in the pattern matches any
- one character in the subject, including a non-printing char-
- acter, but not (by default) newline. If the PCRE_DOTALL
- option is set, dots match newlines as well. The handling of
- dot is entirely independent of the handling of circumflex
- and dollar, the only relationship being that they both
- involve newline characters. Dot has no special meaning in a
- character class.
-
-
-
-SQUARE BRACKETS
- An opening square bracket introduces a character class, ter-
- minated by a closing square bracket. A closing square
- bracket on its own is not special. If a closing square
- bracket is required as a member of the class, it should be
- the first data character in the class (after an initial cir-
- cumflex, if present) or escaped with a backslash.
-
- A character class matches a single character in the subject;
- the character must be in the set of characters defined by
- the class, unless the first character in the class is a cir-
- cumflex, in which case the subject character must not be in
- the set defined by the class. If a circumflex is actually
- required as a member of the class, ensure it is not the
- first character, or escape it with a backslash.
-
- For example, the character class [aeiou] matches any lower
- case vowel, while [^aeiou] matches any character that is not
- a lower case vowel. Note that a circumflex is just a con-
- venient notation for specifying the characters which are in
- the class by enumerating those that are not. It is not an
- assertion: it still consumes a character from the subject
- string, and fails if the current pointer is at the end of
- the string.
-
- When caseless matching is set, any letters in a class
- represent both their upper case and lower case versions, so
- for example, a caseless [aeiou] matches "A" as well as "a",
- and a caseless [^aeiou] does not match "A", whereas a case-
- ful version would.
-
- The newline character is never treated in any special way in
- character classes, whatever the setting of the PCRE_DOTALL
- or PCRE_MULTILINE options is. A class such as [^a] will
- always match a newline.
-
- The minus (hyphen) character can be used to specify a range
- of characters in a character class. For example, [d-m]
- matches any letter between d and m, inclusive. If a minus
- character is required in a class, it must be escaped with a
- backslash or appear in a position where it cannot be inter-
- preted as indicating a range, typically as the first or last
- character in the class.
-
- It is not possible to have the literal character "]" as the
- end character of a range. A pattern such as [W-]46] is
- interpreted as a class of two characters ("W" and "-") fol-
- lowed by a literal string "46]", so it would match "W46]" or
- "-46]". However, if the "]" is escaped with a backslash it
- is interpreted as the end of range, so [W-\]46] is inter-
- preted as a single class containing a range followed by two
- separate characters. The octal or hexadecimal representation
- of "]" can also be used to end a range.
-
- Ranges operate in ASCII collating sequence. They can also be
- used for characters specified numerically, for example
- [\000-\037]. If a range that includes letters is used when
- caseless matching is set, it matches the letters in either
- case. For example, [W-c] is equivalent to [][\^_`wxyzabc],
- matched caselessly, and if character tables for the "fr"
- locale are in use, [\xc8-\xcb] matches accented E characters
- in both cases.
-
- The character types \d, \D, \s, \S, \w, and \W may also
- appear in a character class, and add the characters that
- they match to the class. For example, [\dABCDEF] matches any
- hexadecimal digit. A circumflex can conveniently be used
- with the upper case character types to specify a more res-
- tricted set of characters than the matching lower case type.
- For example, the class [^\W_] matches any letter or digit,
- but not underscore.
-
- All non-alphameric characters other than \, -, ^ (at the
- start) and the terminating ] are non-special in character
- classes, but it does no harm if they are escaped.
-
-
-
-POSIX CHARACTER CLASSES
- Perl 5.6 (not yet released at the time of writing) is going
- to support the POSIX notation for character classes, which
- uses names enclosed by [: and :] within the enclosing
- square brackets. PCRE supports this notation. For example,
-
- [01[:alpha:]%]
-
- matches "0", "1", any alphabetic character, or "%". The sup-
- ported class names are
-
- alnum letters and digits
- alpha letters
- ascii character codes 0 - 127
- cntrl control characters
- digit decimal digits (same as \d)
- graph printing characters, excluding space
- lower lower case letters
- print printing characters, including space
- punct printing characters, excluding letters and digits
- space white space (same as \s)
- upper upper case letters
- word "word" characters (same as \w)
- xdigit hexadecimal digits
-
- The names "ascii" and "word" are Perl extensions. Another
- Perl extension is negation, which is indicated by a ^ char-
- acter after the colon. For example,
-
- [12[:^digit:]]
-
- matches "1", "2", or any non-digit. PCRE (and Perl) also
- recognize the POSIX syntax [.ch.] and [=ch=] where "ch" is a
- "collating element", but these are not supported, and an
- error is given if they are encountered.
-
-
-
-VERTICAL BAR
- Vertical bar characters are used to separate alternative
- patterns. For example, the pattern
-
- gilbert|sullivan
-
- matches either "gilbert" or "sullivan". Any number of alter-
- natives may appear, and an empty alternative is permitted
- (matching the empty string). The matching process tries
- each alternative in turn, from left to right, and the first
- one that succeeds is used. If the alternatives are within a
- subpattern (defined below), "succeeds" means matching the
- rest of the main pattern as well as the alternative in the
- subpattern.
-
-
-
-INTERNAL OPTION SETTING
- The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL,
- and PCRE_EXTENDED can be changed from within the pattern by
- a sequence of Perl option letters enclosed between "(?" and
- ")". The option letters are
-
- i for PCRE_CASELESS
- m for PCRE_MULTILINE
- s for PCRE_DOTALL
- x for PCRE_EXTENDED
-
- For example, (?im) sets caseless, multiline matching. It is
- also possible to unset these options by preceding the letter
- with a hyphen, and a combined setting and unsetting such as
- (?im-sx), which sets PCRE_CASELESS and PCRE_MULTILINE while
- unsetting PCRE_DOTALL and PCRE_EXTENDED, is also permitted.
- If a letter appears both before and after the hyphen, the
- option is unset.
-
- The scope of these option changes depends on where in the
- pattern the setting occurs. For settings that are outside
- any subpattern (defined below), the effect is the same as if
- the options were set or unset at the start of matching. The
- following patterns all behave in exactly the same way:
-
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-
- which in turn is the same as compiling the pattern abc with
- PCRE_CASELESS set. In other words, such "top level" set-
- tings apply to the whole pattern (unless there are other
- changes inside subpatterns). If there is more than one set-
- ting of the same option at top level, the rightmost setting
- is used.
-
- If an option change occurs inside a subpattern, the effect
- is different. This is a change of behaviour in Perl 5.005.
- An option change inside a subpattern affects only that part
- of the subpattern that follows it, so
-
- (a(?i)b)c
-
- matches abc and aBc and no other strings (assuming
- PCRE_CASELESS is not used). By this means, options can be
- made to have different settings in different parts of the
- pattern. Any changes made in one alternative do carry on
- into subsequent branches within the same subpattern. For
- example,
-
- (a(?i)b|c)
-
- matches "ab", "aB", "c", and "C", even though when matching
- "C" the first branch is abandoned before the option setting.
- This is because the effects of option settings happen at
- compile time. There would be some very weird behaviour oth-
- erwise.
-
- The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can
- be changed in the same way as the Perl-compatible options by
- using the characters U and X respectively. The (?X) flag
- setting is special in that it must always occur earlier in
- the pattern than any of the additional features it turns on,
- even when it is at top level. It is best put at the start.
-
-
-
-SUBPATTERNS
- Subpatterns are delimited by parentheses (round brackets),
- which can be nested. Marking part of a pattern as a subpat-
- tern does two things:
-
- 1. It localizes a set of alternatives. For example, the pat-
- tern
-
- cat(aract|erpillar|)
-
- matches one of the words "cat", "cataract", or "caterpil-
- lar". Without the parentheses, it would match "cataract",
- "erpillar" or the empty string.
-
- 2. It sets up the subpattern as a capturing subpattern (as
- defined above). When the whole pattern matches, that por-
- tion of the subject string that matched the subpattern is
- passed back to the caller via the ovector argument of
- pcre_exec(). Opening parentheses are counted from left to
- right (starting from 1) to obtain the numbers of the captur-
- ing subpatterns.
-
- For example, if the string "the red king" is matched against
- the pattern
-
- the ((red|white) (king|queen))
-
- the captured substrings are "red king", "red", and "king",
- and are numbered 1, 2, and 3, respectively.
-
- The fact that plain parentheses fulfil two functions is not
- always helpful. There are often times when a grouping sub-
- pattern is required without a capturing requirement. If an
- opening parenthesis is followed by "?:", the subpattern does
- not do any capturing, and is not counted when computing the
- number of any subsequent capturing subpatterns. For example,
- if the string "the white queen" is matched against the pat-
- tern
-
- the ((?:red|white) (king|queen))
-
- the captured substrings are "white queen" and "queen", and
- are numbered 1 and 2. The maximum number of captured sub-
- strings is 99, and the maximum number of all subpatterns,
- both capturing and non-capturing, is 200.
-
- As a convenient shorthand, if any option settings are
- required at the start of a non-capturing subpattern, the
- option letters may appear between the "?" and the ":". Thus
- the two patterns
-
- (?i:saturday|sunday)
- (?:(?i)saturday|sunday)
-
- match exactly the same set of strings. Because alternative
- branches are tried from left to right, and options are not
- reset until the end of the subpattern is reached, an option
- setting in one branch does affect subsequent branches, so
- the above patterns match "SUNDAY" as well as "Saturday".
-
-
-
-REPETITION
- Repetition is specified by quantifiers, which can follow any
- of the following items:
-
- a single character, possibly escaped
- the . metacharacter
- a character class
- a back reference (see next section)
- a parenthesized subpattern (unless it is an assertion -
- see below)
-
- The general repetition quantifier specifies a minimum and
- maximum number of permitted matches, by giving the two
- numbers in curly brackets (braces), separated by a comma.
- The numbers must be less than 65536, and the first must be
- less than or equal to the second. For example:
-
- z{2,4}
-
- matches "zz", "zzz", or "zzzz". A closing brace on its own
- is not a special character. If the second number is omitted,
- but the comma is present, there is no upper limit; if the
- second number and the comma are both omitted, the quantifier
- specifies an exact number of required matches. Thus
-
- [aeiou]{3,}
-
- matches at least 3 successive vowels, but may match many
- more, while
-
- \d{8}
-
- matches exactly 8 digits. An opening curly bracket that
- appears in a position where a quantifier is not allowed, or
- one that does not match the syntax of a quantifier, is taken
- as a literal character. For example, {,6} is not a quantif-
- ier, but a literal string of four characters.
- The quantifier {0} is permitted, causing the expression to
- behave as if the previous item and the quantifier were not
- present.
-
- For convenience (and historical compatibility) the three
- most common quantifiers have single-character abbreviations:
-
- * is equivalent to {0,}
- + is equivalent to {1,}
- ? is equivalent to {0,1}
-
- It is possible to construct infinite loops by following a
- subpattern that can match no characters with a quantifier
- that has no upper limit, for example:
-
- (a?)*
-
- Earlier versions of Perl and PCRE used to give an error at
- compile time for such patterns. However, because there are
- cases where this can be useful, such patterns are now
- accepted, but if any repetition of the subpattern does in
- fact match no characters, the loop is forcibly broken.
-
- By default, the quantifiers are "greedy", that is, they
- match as much as possible (up to the maximum number of per-
- mitted times), without causing the rest of the pattern to
- fail. The classic example of where this gives problems is in
- trying to match comments in C programs. These appear between
- the sequences /* and */ and within the sequence, individual
- * and / characters may appear. An attempt to match C com-
- ments by applying the pattern
-
- /\*.*\*/
-
- to the string
-
- /* first command */ not comment /* second comment */
-
- fails, because it matches the entire string owing to the
- greediness of the .* item.
-
- However, if a quantifier is followed by a question mark, it
- ceases to be greedy, and instead matches the minimum number
- of times possible, so the pattern
-
- /\*.*?\*/
-
- does the right thing with the C comments. The meaning of the
- various quantifiers is not otherwise changed, just the pre-
- ferred number of matches. Do not confuse this use of ques-
- tion mark with its use as a quantifier in its own right.
- Because it has two uses, it can sometimes appear doubled, as
- in
-
- \d??\d
-
- which matches one digit by preference, but can match two if
- that is the only way the rest of the pattern matches.
-
- If the PCRE_UNGREEDY option is set (an option which is not
- available in Perl), the quantifiers are not greedy by
- default, but individual ones can be made greedy by following
- them with a question mark. In other words, it inverts the
- default behaviour.
-
- When a parenthesized subpattern is quantified with a minimum
- repeat count that is greater than 1 or with a limited max-
- imum, more store is required for the compiled pattern, in
- proportion to the size of the minimum or maximum.
-
- If a pattern starts with .* or .{0,} and the PCRE_DOTALL
- option (equivalent to Perl's /s) is set, thus allowing the .
- to match newlines, the pattern is implicitly anchored,
- because whatever follows will be tried against every charac-
- ter position in the subject string, so there is no point in
- retrying the overall match at any position after the first.
- PCRE treats such a pattern as though it were preceded by \A.
- In cases where it is known that the subject string contains
- no newlines, it is worth setting PCRE_DOTALL when the pat-
- tern begins with .* in order to obtain this optimization, or
- alternatively using ^ to indicate anchoring explicitly.
-
- When a capturing subpattern is repeated, the value captured
- is the substring that matched the final iteration. For exam-
- ple, after
-
- (tweedle[dume]{3}\s*)+
-
- has matched "tweedledum tweedledee" the value of the cap-
- tured substring is "tweedledee". However, if there are
- nested capturing subpatterns, the corresponding captured
- values may have been set in previous iterations. For exam-
- ple, after
-
- /(a|(b))+/
-
- matches "aba" the value of the second captured substring is
- "b".
-
-
-
-BACK REFERENCES
- Outside a character class, a backslash followed by a digit
- greater than 0 (and possibly further digits) is a back
-
-
-
-
-SunOS 5.8 Last change: 30
-
-
-
- reference to a capturing subpattern earlier (i.e. to its
- left) in the pattern, provided there have been that many
- previous capturing left parentheses.
-
- However, if the decimal number following the backslash is
- less than 10, it is always taken as a back reference, and
- causes an error only if there are not that many capturing
- left parentheses in the entire pattern. In other words, the
- parentheses that are referenced need not be to the left of
- the reference for numbers less than 10. See the section
- entitled "Backslash" above for further details of the han-
- dling of digits following a backslash.
-
- A back reference matches whatever actually matched the cap-
- turing subpattern in the current subject string, rather than
- anything matching the subpattern itself. So the pattern
-
- (sens|respons)e and \1ibility
-
- matches "sense and sensibility" and "response and responsi-
- bility", but not "sense and responsibility". If caseful
- matching is in force at the time of the back reference, the
- case of letters is relevant. For example,
-
- ((?i)rah)\s+\1
-
- matches "rah rah" and "RAH RAH", but not "RAH rah", even
- though the original capturing subpattern is matched case-
- lessly.
-
- There may be more than one back reference to the same sub-
- pattern. If a subpattern has not actually been used in a
- particular match, any back references to it always fail. For
- example, the pattern
-
- (a|(bc))\2
-
- always fails if it starts to match "a" rather than "bc".
- Because there may be up to 99 back references, all digits
- following the backslash are taken as part of a potential
- back reference number. If the pattern continues with a digit
- character, some delimiter must be used to terminate the back
- reference. If the PCRE_EXTENDED option is set, this can be
- whitespace. Otherwise an empty comment can be used.
-
- A back reference that occurs inside the parentheses to which
- it refers fails when the subpattern is first used, so, for
- example, (a\1) never matches. However, such references can
- be useful inside repeated subpatterns. For example, the pat-
- tern
-
- (a|b\1)+
-
- matches any number of "a"s and also "aba", "ababbaa" etc. At
- each iteration of the subpattern, the back reference matches
- the character string corresponding to the previous itera-
- tion. In order for this to work, the pattern must be such
- that the first iteration does not need to match the back
- reference. This can be done using alternation, as in the
- example above, or by a quantifier with a minimum of zero.
-
-
-
-ASSERTIONS
- An assertion is a test on the characters following or
- preceding the current matching point that does not actually
- consume any characters. The simple assertions coded as \b,
- \B, \A, \Z, \z, ^ and $ are described above. More compli-
- cated assertions are coded as subpatterns. There are two
- kinds: those that look ahead of the current position in the
- subject string, and those that look behind it.
-
- An assertion subpattern is matched in the normal way, except
- that it does not cause the current matching position to be
- changed. Lookahead assertions start with (?= for positive
- assertions and (?! for negative assertions. For example,
-
- \w+(?=;)
-
- matches a word followed by a semicolon, but does not include
- the semicolon in the match, and
-
- foo(?!bar)
-
- matches any occurrence of "foo" that is not followed by
- "bar". Note that the apparently similar pattern
-
- (?!foo)bar
-
- does not find an occurrence of "bar" that is preceded by
- something other than "foo"; it finds any occurrence of "bar"
- whatsoever, because the assertion (?!foo) is always true
- when the next three characters are "bar". A lookbehind
- assertion is needed to achieve this effect.
-
- Lookbehind assertions start with (?<= for positive asser-
- tions and (?<! for negative assertions. For example,
-
- (?<!foo)bar
-
- does find an occurrence of "bar" that is not preceded by
- "foo". The contents of a lookbehind assertion are restricted
- such that all the strings it matches must have a fixed
- length. However, if there are several alternatives, they do
- not all have to have the same fixed length. Thus
-
- (?<=bullock|donkey)
-
- is permitted, but
-
- (?<!dogs?|cats?)
-
- causes an error at compile time. Branches that match dif-
- ferent length strings are permitted only at the top level of
- a lookbehind assertion. This is an extension compared with
- Perl 5.005, which requires all branches to match the same
- length of string. An assertion such as
-
- (?<=ab(c|de))
-
- is not permitted, because its single top-level branch can
- match two different lengths, but it is acceptable if rewrit-
- ten to use two top-level branches:
-
- (?<=abc|abde)
-
- The implementation of lookbehind assertions is, for each
- alternative, to temporarily move the current position back
- by the fixed width and then try to match. If there are
- insufficient characters before the current position, the
- match is deemed to fail. Lookbehinds in conjunction with
- once-only subpatterns can be particularly useful for match-
- ing at the ends of strings; an example is given at the end
- of the section on once-only subpatterns.
-
- Several assertions (of any sort) may occur in succession.
- For example,
-
- (?<=\d{3})(?<!999)foo
-
- matches "foo" preceded by three digits that are not "999".
- Notice that each of the assertions is applied independently
- at the same point in the subject string. First there is a
- check that the previous three characters are all digits, and
- then there is a check that the same three characters are not
- "999". This pattern does not match "foo" preceded by six
- characters, the first of which are digits and the last three
- of which are not "999". For example, it doesn't match
- "123abcfoo". A pattern to do that is
-
- (?<=\d{3}...)(?<!999)foo
-
- This time the first assertion looks at the preceding six
- characters, checking that the first three are digits, and
- then the second assertion checks that the preceding three
- characters are not "999".
-
- Assertions can be nested in any combination. For example,
-
- (?<=(?<!foo)bar)baz
-
- matches an occurrence of "baz" that is preceded by "bar"
- which in turn is not preceded by "foo", while
-
- (?<=\d{3}(?!999)...)foo
-
- is another pattern which matches "foo" preceded by three
- digits and any three characters that are not "999".
-
- Assertion subpatterns are not capturing subpatterns, and may
- not be repeated, because it makes no sense to assert the
- same thing several times. If any kind of assertion contains
- capturing subpatterns within it, these are counted for the
- purposes of numbering the capturing subpatterns in the whole
- pattern. However, substring capturing is carried out only
- for positive assertions, because it does not make sense for
- negative assertions.
-
- Assertions count towards the maximum of 200 parenthesized
- subpatterns.
-
-
-
-ONCE-ONLY SUBPATTERNS
- With both maximizing and minimizing repetition, failure of
- what follows normally causes the repeated item to be re-
- evaluated to see if a different number of repeats allows the
- rest of the pattern to match. Sometimes it is useful to
- prevent this, either to change the nature of the match, or
- to cause it fail earlier than it otherwise might, when the
- author of the pattern knows there is no point in carrying
- on.
-
- Consider, for example, the pattern \d+foo when applied to
- the subject line
-
- 123456bar
-
- After matching all 6 digits and then failing to match "foo",
- the normal action of the matcher is to try again with only 5
- digits matching the \d+ item, and then with 4, and so on,
- before ultimately failing. Once-only subpatterns provide the
- means for specifying that once a portion of the pattern has
- matched, it is not to be re-evaluated in this way, so the
- matcher would give up immediately on failing to match "foo"
- the first time. The notation is another kind of special
- parenthesis, starting with (?> as in this example:
-
- (?>\d+)bar
-
- This kind of parenthesis "locks up" the part of the pattern
- it contains once it has matched, and a failure further into
- the pattern is prevented from backtracking into it. Back-
- tracking past it to previous items, however, works as nor-
- mal.
-
- An alternative description is that a subpattern of this type
- matches the string of characters that an identical stan-
- dalone pattern would match, if anchored at the current point
- in the subject string.
-
- Once-only subpatterns are not capturing subpatterns. Simple
- cases such as the above example can be thought of as a max-
- imizing repeat that must swallow everything it can. So,
- while both \d+ and \d+? are prepared to adjust the number of
- digits they match in order to make the rest of the pattern
- match, (?>\d+) can only match an entire sequence of digits.
-
- This construction can of course contain arbitrarily compli-
- cated subpatterns, and it can be nested.
-
- Once-only subpatterns can be used in conjunction with look-
- behind assertions to specify efficient matching at the end
- of the subject string. Consider a simple pattern such as
-
- abcd$
-
- when applied to a long string which does not match. Because
- matching proceeds from left to right, PCRE will look for
- each "a" in the subject and then see if what follows matches
- the rest of the pattern. If the pattern is specified as
-
- ^.*abcd$
-
- the initial .* matches the entire string at first, but when
- this fails (because there is no following "a"), it back-
- tracks to match all but the last character, then all but the
- last two characters, and so on. Once again the search for
- "a" covers the entire string, from right to left, so we are
- no better off. However, if the pattern is written as
-
- ^(?>.*)(?<=abcd)
-
- there can be no backtracking for the .* item; it can match
- only the entire string. The subsequent lookbehind assertion
- does a single test on the last four characters. If it fails,
- the match fails immediately. For long strings, this approach
- makes a significant difference to the processing time.
-
- When a pattern contains an unlimited repeat inside a subpat-
- tern that can itself be repeated an unlimited number of
- times, the use of a once-only subpattern is the only way to
- avoid some failing matches taking a very long time indeed.
- The pattern
-
- (\D+|<\d+>)*[!?]
-
- matches an unlimited number of substrings that either con-
- sist of non-digits, or digits enclosed in <>, followed by
- either ! or ?. When it matches, it runs quickly. However, if
- it is applied to
-
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
- it takes a long time before reporting failure. This is
- because the string can be divided between the two repeats in
- a large number of ways, and all have to be tried. (The exam-
- ple used [!?] rather than a single character at the end,
- because both PCRE and Perl have an optimization that allows
- for fast failure when a single character is used. They
- remember the last single character that is required for a
- match, and fail early if it is not present in the string.)
- If the pattern is changed to
-
- ((?>\D+)|<\d+>)*[!?]
-
- sequences of non-digits cannot be broken, and failure hap-
- pens quickly.
-
-
-
-CONDITIONAL SUBPATTERNS
- It is possible to cause the matching process to obey a sub-
- pattern conditionally or to choose between two alternative
- subpatterns, depending on the result of an assertion, or
- whether a previous capturing subpattern matched or not. The
- two possible forms of conditional subpattern are
-
- (?(condition)yes-pattern)
- (?(condition)yes-pattern|no-pattern)
-
- If the condition is satisfied, the yes-pattern is used; oth-
- erwise the no-pattern (if present) is used. If there are
- more than two alternatives in the subpattern, a compile-time
- error occurs.
-
- There are two kinds of condition. If the text between the
- parentheses consists of a sequence of digits, the condition
- is satisfied if the capturing subpattern of that number has
- previously matched. The number must be greater than zero.
- Consider the following pattern, which contains non-
- significant white space to make it more readable (assume the
- PCRE_EXTENDED option) and to divide it into three parts for
- ease of discussion:
-
- ( \( )? [^()]+ (?(1) \) )
-
- The first part matches an optional opening parenthesis, and
- if that character is present, sets it as the first captured
- substring. The second part matches one or more characters
- that are not parentheses. The third part is a conditional
- subpattern that tests whether the first set of parentheses
- matched or not. If they did, that is, if subject started
- with an opening parenthesis, the condition is true, and so
- the yes-pattern is executed and a closing parenthesis is
- required. Otherwise, since no-pattern is not present, the
- subpattern matches nothing. In other words, this pattern
- matches a sequence of non-parentheses, optionally enclosed
- in parentheses.
-
- If the condition is not a sequence of digits, it must be an
- assertion. This may be a positive or negative lookahead or
- lookbehind assertion. Consider this pattern, again contain-
- ing non-significant white space, and with the two alterna-
- tives on the second line:
-
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
-
- The condition is a positive lookahead assertion that matches
- an optional sequence of non-letters followed by a letter. In
- other words, it tests for the presence of at least one
- letter in the subject. If a letter is found, the subject is
- matched against the first alternative; otherwise it is
- matched against the second. This pattern matches strings in
- one of the two forms dd-aaa-dd or dd-dd-dd, where aaa are
- letters and dd are digits.
-
-
-
-COMMENTS
- The sequence (?# marks the start of a comment which contin-
- ues up to the next closing parenthesis. Nested parentheses
- are not permitted. The characters that make up a comment
- play no part in the pattern matching at all.
-
- If the PCRE_EXTENDED option is set, an unescaped # character
- outside a character class introduces a comment that contin-
- ues up to the next newline character in the pattern.
-
-
-
-RECURSIVE PATTERNS
- Consider the problem of matching a string in parentheses,
- allowing for unlimited nested parentheses. Without the use
- of recursion, the best that can be done is to use a pattern
- that matches up to some fixed depth of nesting. It is not
- possible to handle an arbitrary nesting depth. Perl 5.6 has
- provided an experimental facility that allows regular
- expressions to recurse (amongst other things). It does this
- by interpolating Perl code in the expression at run time,
- and the code can refer to the expression itself. A Perl pat-
- tern to solve the parentheses problem can be created like
- this:
-
- $re = qr{\( (?: (?>[^()]+) | (?p{$re}) )* \)}x;
-
- The (?p{...}) item interpolates Perl code at run time, and
- in this case refers recursively to the pattern in which it
- appears. Obviously, PCRE cannot support the interpolation of
- Perl code. Instead, the special item (?R) is provided for
- the specific case of recursion. This PCRE pattern solves the
- parentheses problem (assume the PCRE_EXTENDED option is set
- so that white space is ignored):
-
- \( ( (?>[^()]+) | (?R) )* \)
-
- First it matches an opening parenthesis. Then it matches any
- number of substrings which can either be a sequence of non-
- parentheses, or a recursive match of the pattern itself
- (i.e. a correctly parenthesized substring). Finally there is
- a closing parenthesis.
-
- This particular example pattern contains nested unlimited
- repeats, and so the use of a once-only subpattern for match-
- ing strings of non-parentheses is important when applying
- the pattern to strings that do not match. For example, when
- it is applied to
-
- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
- it yields "no match" quickly. However, if a once-only sub-
- pattern is not used, the match runs for a very long time
- indeed because there are so many different ways the + and *
- repeats can carve up the subject, and all have to be tested
- before failure can be reported.
-
- The values set for any capturing subpatterns are those from
- the outermost level of the recursion at which the subpattern
- value is set. If the pattern above is matched against
-
- (ab(cd)ef)
-
- the value for the capturing parentheses is "ef", which is
- the last value taken on at the top level. If additional
- parentheses are added, giving
-
- \( ( ( (?>[^()]+) | (?R) )* ) \)
- ^ ^
- ^ ^ the string they capture is
- "ab(cd)ef", the contents of the top level parentheses. If
- there are more than 15 capturing parentheses in a pattern,
- PCRE has to obtain extra memory to store data during a
- recursion, which it does by using pcre_malloc, freeing it
- via pcre_free afterwards. If no memory can be obtained, it
- saves data for the first 15 capturing parentheses only, as
- there is no way to give an out-of-memory error from within a
- recursion.
-
-
-
-PERFORMANCE
- Certain items that may appear in patterns are more efficient
- than others. It is more efficient to use a character class
- like [aeiou] than a set of alternatives such as (a|e|i|o|u).
- In general, the simplest construction that provides the
- required behaviour is usually the most efficient. Jeffrey
- Friedl's book contains a lot of discussion about optimizing
- regular expressions for efficient performance.
-
- When a pattern begins with .* and the PCRE_DOTALL option is
- set, the pattern is implicitly anchored by PCRE, since it
- can match only at the start of a subject string. However, if
- PCRE_DOTALL is not set, PCRE cannot make this optimization,
- because the . metacharacter does not then match a newline,
- and if the subject string contains newlines, the pattern may
- match from the character immediately following one of them
- instead of from the very start. For example, the pattern
-
- (.*) second
-
- matches the subject "first\nand second" (where \n stands for
- a newline character) with the first captured substring being
- "and". In order to do this, PCRE has to retry the match
- starting after every newline in the subject.
-
- If you are using such a pattern with subject strings that do
- not contain newlines, the best performance is obtained by
- setting PCRE_DOTALL, or starting the pattern with ^.* to
- indicate explicit anchoring. That saves PCRE from having to
- scan along the subject looking for a newline to restart at.
-
- Beware of patterns that contain nested indefinite repeats.
- These can take a long time to run when applied to a string
- that does not match. Consider the pattern fragment
-
- (a+)*
-
- This can match "aaaa" in 33 different ways, and this number
- increases very rapidly as the string gets longer. (The *
- repeat can match 0, 1, 2, 3, or 4 times, and for each of
- those cases other than 0, the + repeats can match different
- numbers of times.) When the remainder of the pattern is such
- that the entire match is going to fail, PCRE has in princi-
- ple to try every possible variation, and this can take an
- extremely long time.
-
- An optimization catches some of the more simple cases such
- as
-
- (a+)*b
-
- where a literal character follows. Before embarking on the
- standard matching procedure, PCRE checks that there is a "b"
- later in the subject string, and if there is not, it fails
- the match immediately. However, when there is no following
- literal this optimization cannot be used. You can see the
- difference by comparing the behaviour of
-
- (a+)*\d
-
- with the pattern above. The former gives a failure almost
- instantly when applied to a whole line of "a" characters,
- whereas the latter takes an appreciable time with strings
- longer than about 20 characters.
-
-
-
-UTF-8 SUPPORT
- Starting at release 3.3, PCRE has some support for character
- strings encoded in the UTF-8 format. This is incomplete, and
- is regarded as experimental. In order to use it, you must
- configure PCRE to include UTF-8 support in the code, and, in
- addition, you must call pcre_compile() with the PCRE_UTF8
- option flag. When you do this, both the pattern and any sub-
- ject strings that are matched against it are treated as
- UTF-8 strings instead of just strings of bytes, but only in
- the cases that are mentioned below.
-
- If you compile PCRE with UTF-8 support, but do not use it at
- run time, the library will be a bit bigger, but the addi-
- tional run time overhead is limited to testing the PCRE_UTF8
- flag in several places, so should not be very large.
-
- PCRE assumes that the strings it is given contain valid
- UTF-8 codes. It does not diagnose invalid UTF-8 strings. If
- you pass invalid UTF-8 strings to PCRE, the results are
- undefined.
-
- Running with PCRE_UTF8 set causes these changes in the way
- PCRE works:
-
- 1. In a pattern, the escape sequence \x{...}, where the
- contents of the braces is a string of hexadecimal digits, is
- interpreted as a UTF-8 character whose code number is the
- given hexadecimal number, for example: \x{1234}. This
- inserts from one to six literal bytes into the pattern,
- using the UTF-8 encoding. If a non-hexadecimal digit appears
- between the braces, the item is not recognized.
-
- 2. The original hexadecimal escape sequence, \xhh, generates
- a two-byte UTF-8 character if its value is greater than 127.
-
- 3. Repeat quantifiers are NOT correctly handled if they fol-
- low a multibyte character. For example, \x{100}* and \xc3+
- do not work. If you want to repeat such characters, you must
- enclose them in non-capturing parentheses, for example
- (?:\x{100}), at present.
-
- 4. The dot metacharacter matches one UTF-8 character instead
- of a single byte.
-
- 5. Unlike literal UTF-8 characters, the dot metacharacter
- followed by a repeat quantifier does operate correctly on
- UTF-8 characters instead of single bytes.
-
- 4. Although the \x{...} escape is permitted in a character
- class, characters whose values are greater than 255 cannot
- be included in a class.
-
- 5. A class is matched against a UTF-8 character instead of
- just a single byte, but it can match only characters whose
- values are less than 256. Characters with greater values
- always fail to match a class.
-
- 6. Repeated classes work correctly on multiple characters.
-
- 7. Classes containing just a single character whose value is
- greater than 127 (but less than 256), for example, [\x80] or
- [^\x{93}], do not work because these are optimized into sin-
- gle byte matches. In the first case, of course, the class
- brackets are just redundant.
-
- 8. Lookbehind assertions move backwards in the subject by a
- fixed number of characters instead of a fixed number of
- bytes. Simple cases have been tested to work correctly, but
- there may be hidden gotchas herein.
-
- 9. The character types such as \d and \w do not work
- correctly with UTF-8 characters. They continue to test a
- single byte.
-
- 10. Anything not explicitly mentioned here continues to work
- in bytes rather than in characters.
-
- The following UTF-8 features of Perl 5.6 are not imple-
- mented:
-
- 1. The escape sequence \C to match a single byte.
-
- 2. The use of Unicode tables and properties and escapes \p,
- \P, and \X.
-
-
-
-SAMPLE PROGRAM
- The code below is a simple, complete demonstration program,
- to get you started with using PCRE. This code is also sup-
- plied in the file pcredemo.c in the PCRE distribution.
-
- The program compiles the regular expression that is its
- first argument, and matches it against the subject string in
- its second argument. No options are set, and default charac-
- ter tables are used. If matching succeeds, the program out-
- puts the portion of the subject that matched, together with
- the contents of any captured substrings.
-
- On a Unix system that has PCRE installed in /usr/local, you
- can compile the demonstration program using a command like
- this:
-
- gcc -o pcredemo pcredemo.c -I/usr/local/include
- -L/usr/local/lib -lpcre
-
- Then you can run simple tests like this:
-
- ./pcredemo 'cat|dog' 'the cat sat on the mat'
-
- Note that there is a much more comprehensive test program,
- called pcretest, which supports many more facilities for
- testing regular expressions. The pcredemo program is pro-
- vided as a simple coding example.
-
- On some operating systems (e.g. Solaris) you may get an
- error like this when you try to run pcredemo:
-
- ld.so.1: a.out: fatal: libpcre.so.0: open failed: No such
- file or directory
-
- This is caused by the way shared library support works on
- those systems. You need to add
-
- -R/usr/local/lib
-
- to the compile command to get round this problem. Here's the
- code:
-
- #include <stdio.h>
- #include <string.h>
- #include <pcre.h>
-
- #define OVECCOUNT 30 /* should be a multiple of 3 */
-
- int main(int argc, char **argv)
- {
- pcre *re;
- const char *error;
- int erroffset;
- int ovector[OVECCOUNT];
- int rc, i;
-
- if (argc != 3)
- {
- printf("Two arguments required: a regex and a "
- "subject string\n");
- return 1;
- }
-
- /* Compile the regular expression in the first argument */
-
- re = pcre_compile(
- argv[1], /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-
- /* Compilation failed: print the error message and exit */
-
- if (re == NULL)
- {
- printf("PCRE compilation failed at offset %d: %s\n",
- erroffset, error);
- return 1;
- }
-
- /* Compilation succeeded: match the subject in the second
- argument */
-
- rc = pcre_exec(
- re, /* the compiled pattern */
- NULL, /* we didn't study the pattern */
- argv[2], /* the subject string */
- (int)strlen(argv[2]), /* the length of the subject */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* vector for substring information */
- OVECCOUNT); /* number of elements in the vector */
-
- /* Matching failed: handle error cases */
-
- if (rc < 0)
- {
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: printf("No match\n"); break;
- /*
- Handle other special cases if you like
- */
- default: printf("Matching error %d\n", rc); break;
- }
- return 1;
- }
-
- /* Match succeded */
-
- printf("Match succeeded\n");
-
- /* The output vector wasn't big enough */
-
- if (rc == 0)
- {
- rc = OVECCOUNT/3;
- printf("ovector only has room for %d captured "
- substrings\n", rc - 1);
- }
-
- /* Show substrings stored in the output vector */
-
- for (i = 0; i < rc; i++)
- {
- char *substring_start = argv[2] + ovector[2*i];
- int substring_length = ovector[2*i+1] - ovector[2*i];
- printf("%2d: %.*s\n", i, substring_length,
- substring_start);
- }
-
- return 0;
- }
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- New Museums Site,
- Cambridge CB2 3QG, England.
- Phone: +44 1223 334714
-
- Last updated: 15 August 2001
- Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcregrep.1 b/srclib/pcre/doc/pcregrep.1
deleted file mode 100644
index 5d3151e867..0000000000
--- a/srclib/pcre/doc/pcregrep.1
+++ /dev/null
@@ -1,88 +0,0 @@
-.TH PCREGREP 1
-.SH NAME
-pcregrep - a grep with Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B pcregrep [-Vcfhilnrsvx] pattern [file] ...
-
-
-.SH DESCRIPTION
-\fBpcregrep\fR searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-\fBpcre(3)\fR for a full description of syntax and semantics.
-
-If no files are specified, \fBpcregrep\fR reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how \fBpcregrep\fR behaves.
-
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in \fB<stdio.h>\fR.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-
-
-.SH OPTIONS
-.TP 10
-\fB-V\fR
-Write the version number of the PCRE library being used to the standard error
-stream.
-.TP
-\fB-c\fR
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-.TP
-\fB-f\fIfilename\fR
-Read patterns from the file, one per line, and match all patterns against each
-line. There is a maximum of 100 patterns. Trailing white space is removed, and
-blank lines are ignored. An empty file contains no patterns and therefore
-matches nothing.
-.TP
-\fB-h\fR
-Suppress printing of filenames when searching multiple files.
-.TP
-\fB-i\fR
-Ignore upper/lower case distinctions during comparisons.
-.TP
-\fB-l\fR
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-.TP
-\fB-n\fR
-Precede each line by its line number in the file.
-.TP
-\fB-r\fR
-If any file is a directory, recursively scan the files it contains. Without
-\fB-r\fR a directory is scanned as a normal file.
-.TP
-\fB-s\fR
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-.TP
-\fB-v\fR
-Invert the sense of the match, so that lines which do \fInot\fR match the
-pattern are now the ones that are found.
-.TP
-\fB-x\fR
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-
-
-.SH SEE ALSO
-\fBpcre(3)\fR, Perl 5 documentation
-
-
-.SH DIAGNOSTICS
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-
-Last updated: 15 August 2001
-.br
-Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcregrep.html b/srclib/pcre/doc/pcregrep.html
deleted file mode 100644
index 7bc210c65a..0000000000
--- a/srclib/pcre/doc/pcregrep.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcregrep specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcregrep specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">OPTIONS</A>
-<LI><A NAME="TOC5" HREF="#SEC5">SEE ALSO</A>
-<LI><A NAME="TOC6" HREF="#SEC6">DIAGNOSTICS</A>
-<LI><A NAME="TOC7" HREF="#SEC7">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcregrep - a grep with Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>pcregrep [-Vcfhilnrsvx] pattern [file] ...</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-<B>pcregrep</B> searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-<B>pcre(3)</B> for a full description of syntax and semantics.
-</P>
-<P>
-If no files are specified, <B>pcregrep</B> reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how <B>pcregrep</B> behaves.
-</P>
-<P>
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in <B>&#60;stdio.h&#62;</B>.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">OPTIONS</A>
-<P>
-<B>-V</B>
-Write the version number of the PCRE library being used to the standard error
-stream.
-</P>
-<P>
-<B>-c</B>
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-</P>
-<P>
-\fB-f<I>filename</I>
-Read patterns from the file, one per line, and match all patterns against each
-line. There is a maximum of 100 patterns. Trailing white space is removed, and
-blank lines are ignored. An empty file contains no patterns and therefore
-matches nothing.
-</P>
-<P>
-<B>-h</B>
-Suppress printing of filenames when searching multiple files.
-</P>
-<P>
-<B>-i</B>
-Ignore upper/lower case distinctions during comparisons.
-</P>
-<P>
-<B>-l</B>
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-</P>
-<P>
-<B>-n</B>
-Precede each line by its line number in the file.
-</P>
-<P>
-<B>-r</B>
-If any file is a directory, recursively scan the files it contains. Without
-<B>-r</B> a directory is scanned as a normal file.
-</P>
-<P>
-<B>-s</B>
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-</P>
-<P>
-<B>-v</B>
-Invert the sense of the match, so that lines which do <I>not</I> match the
-pattern are now the ones that are found.
-</P>
-<P>
-<B>-x</B>
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">SEE ALSO</A>
-<P>
-<B>pcre(3)</B>, Perl 5 documentation
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">DIAGNOSTICS</A>
-<P>
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-</P>
-<P>
-Last updated: 15 August 2001
-<BR>
-Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcregrep.txt b/srclib/pcre/doc/pcregrep.txt
deleted file mode 100644
index 1600228402..0000000000
--- a/srclib/pcre/doc/pcregrep.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-NAME
- pcregrep - a grep with Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
- pcregrep [-Vcfhilnrsvx] pattern [file] ...
-
-
-
-DESCRIPTION
- pcregrep searches files for character patterns, in the same
- way as other grep commands do, but it uses the PCRE regular
- expression library to support patterns that are compatible
- with the regular expressions of Perl 5. See pcre(3) for a
- full description of syntax and semantics.
-
- If no files are specified, pcregrep reads the standard
- input. By default, each line that matches the pattern is
- copied to the standard output, and if there is more than one
- file, the file name is printed before each line of output.
- However, there are options that can change how pcregrep
- behaves.
-
- Lines are limited to BUFSIZ characters. BUFSIZ is defined in
- <stdio.h>. The newline character is removed from the end of
- each line before it is matched against the pattern.
-
-
-
-OPTIONS
- -V Write the version number of the PCRE library being
- used to the standard error stream.
-
- -c Do not print individual lines; instead just print
- a count of the number of lines that would other-
- wise have been printed. If several files are
- given, a count is printed for each of them.
-
- -ffilename
- Read patterns from the file, one per line, and
- match all patterns against each line. There is a
- maximum of 100 patterns. Trailing white space is
- removed, and blank lines are ignored. An empty
- file contains no patterns and therefore matches
- nothing.
-
- -h Suppress printing of filenames when searching mul-
- tiple files.
-
- -i Ignore upper/lower case distinctions during com-
- parisons.
-
- -l Instead of printing lines from the files, just
-
- print the names of the files containing lines that
- would have been printed. Each file name is printed
- once, on a separate line.
-
- -n Precede each line by its line number in the file.
-
- -r If any file is a directory, recursively scan the
- files it contains. Without -r a directory is
- scanned as a normal file.
-
- -s Work silently, that is, display nothing except
- error messages. The exit status indicates whether
- any matches were found.
-
- -v Invert the sense of the match, so that lines which
- do not match the pattern are now the ones that are
- found.
-
- -x Force the pattern to be anchored (it must start
- matching at the beginning of the line) and in
- addition, require it to match the entire line.
- This is equivalent to having ^ and $ characters at
- the start and end of each alternative branch in
- the regular expression.
-
-
-
-SEE ALSO
- pcre(3), Perl 5 documentation
-
-
-
-
-
-DIAGNOSTICS
- Exit status is 0 if any matches were found, 1 if no matches
- were found, and 2 for syntax errors or inacessible files
- (even if matches were found).
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
-
- Last updated: 15 August 2001
- Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcreposix.3 b/srclib/pcre/doc/pcreposix.3
deleted file mode 100644
index 41716ead91..0000000000
--- a/srclib/pcre/doc/pcreposix.3
+++ /dev/null
@@ -1,149 +0,0 @@
-.TH PCRE 3
-.SH NAME
-pcreposix - POSIX API for Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B #include <pcreposix.h>
-.PP
-.SM
-.br
-.B int regcomp(regex_t *\fIpreg\fR, const char *\fIpattern\fR,
-.ti +5n
-.B int \fIcflags\fR);
-.PP
-.br
-.B int regexec(regex_t *\fIpreg\fR, const char *\fIstring\fR,
-.ti +5n
-.B size_t \fInmatch\fR, regmatch_t \fIpmatch\fR[], int \fIeflags\fR);
-.PP
-.br
-.B size_t regerror(int \fIerrcode\fR, const regex_t *\fIpreg\fR,
-.ti +5n
-.B char *\fIerrbuf\fR, size_t \fIerrbuf_size\fR);
-.PP
-.br
-.B void regfree(regex_t *\fIpreg\fR);
-
-
-.SH DESCRIPTION
-This set of functions provides a POSIX-style API to the PCRE regular expression
-package. See the \fBpcre\fR documentation for a description of the native API,
-which contains additional functionality.
-
-The functions described here are just wrapper functions that ultimately call
-the native API. Their prototypes are defined in the \fBpcreposix.h\fR header
-file, and on Unix systems the library itself is called \fBpcreposix.a\fR, so
-can be accessed by adding \fB-lpcreposix\fR to the command for linking an
-application which uses them. Because the POSIX functions call the native ones,
-it is also necessary to add \fR-lpcre\fR.
-
-I have implemented only those option bits that can be reasonably mapped to PCRE
-native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
-with the value zero. They have no effect, but since programs that are written
-to the POSIX interface often use them, this makes it easier to slot in PCRE as
-a replacement library. Other POSIX options are not even defined.
-
-When PCRE is called via these functions, it is only the API that is POSIX-like
-in style. The syntax and semantics of the regular expressions themselves are
-still those of Perl, subject to the setting of various PCRE options, as
-described below.
-
-The header for these functions is supplied as \fBpcreposix.h\fR to avoid any
-potential clash with other POSIX libraries. It can, of course, be renamed or
-aliased as \fBregex.h\fR, which is the "correct" name. It provides two
-structure types, \fIregex_t\fR for compiled internal forms, and
-\fIregmatch_t\fR for returning captured substrings. It also defines some
-constants whose names start with "REG_"; these are used for setting options and
-identifying error codes.
-
-
-.SH COMPILING A PATTERN
-
-The function \fBregcomp()\fR is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument \fIpattern\fR. The \fIpreg\fR argument is a pointer
-to a regex_t structure which is used as a base for storing information about
-the compiled expression.
-
-The argument \fIcflags\fR is either zero, or contains one or more of the bits
-defined by the following macros:
-
- REG_ICASE
-
-The PCRE_CASELESS option is set when the expression is passed for compilation
-to the native function.
-
- REG_NEWLINE
-
-The PCRE_MULTILINE option is set when the expression is passed for compilation
-to the native function.
-
-In the absence of these flags, no options are passed to the native function.
-This means the the regex is compiled with PCRE default semantics. In
-particular, the way it handles newline characters in the subject string is the
-Perl way, not the POSIX way. Note that setting PCRE_MULTILINE has only
-\fIsome\fR of the effects specified for REG_NEWLINE. It does not affect the way
-newlines are matched by . (they aren't) or a negative class such as [^a] (they
-are).
-
-The yield of \fBregcomp()\fR is zero on success, and non-zero otherwise. The
-\fIpreg\fR structure is filled in on success, and one member of the structure
-is publicized: \fIre_nsub\fR contains the number of capturing subpatterns in
-the regular expression. Various error codes are defined in the header file.
-
-
-.SH MATCHING A PATTERN
-The function \fBregexec()\fR is called to match a pre-compiled pattern
-\fIpreg\fR against a given \fIstring\fR, which is terminated by a zero byte,
-subject to the options in \fIeflags\fR. These can be:
-
- REG_NOTBOL
-
-The PCRE_NOTBOL option is set when calling the underlying PCRE matching
-function.
-
- REG_NOTEOL
-
-The PCRE_NOTEOL option is set when calling the underlying PCRE matching
-function.
-
-The portion of the string that was matched, and also any captured substrings,
-are returned via the \fIpmatch\fR argument, which points to an array of
-\fInmatch\fR structures of type \fIregmatch_t\fR, containing the members
-\fIrm_so\fR and \fIrm_eo\fR. These contain the offset to the first character of
-each substring and the offset to the first character after the end of each
-substring, respectively. The 0th element of the vector relates to the entire
-portion of \fIstring\fR that was matched; subsequent elements relate to the
-capturing subpatterns of the regular expression. Unused entries in the array
-have both structure members set to -1.
-
-A successful match yields a zero return; various error codes are defined in the
-header file, of which REG_NOMATCH is the "expected" failure code.
-
-
-.SH ERROR MESSAGES
-The \fBregerror()\fR function maps a non-zero errorcode from either
-\fBregcomp\fR or \fBregexec\fR to a printable message. If \fIpreg\fR is not
-NULL, the error should have arisen from the use of that structure. A message
-terminated by a binary zero is placed in \fIerrbuf\fR. The length of the
-message, including the zero, is limited to \fIerrbuf_size\fR. The yield of the
-function is the size of buffer needed to hold the whole message.
-
-
-.SH STORAGE
-Compiling a regular expression causes memory to be allocated and associated
-with the \fIpreg\fR structure. The function \fBregfree()\fR frees all such
-memory, after which \fIpreg\fR may no longer be used as a compiled expression.
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/srclib/pcre/doc/pcreposix.html b/srclib/pcre/doc/pcreposix.html
deleted file mode 100644
index 9c89478420..0000000000
--- a/srclib/pcre/doc/pcreposix.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcreposix specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcreposix specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">COMPILING A PATTERN</A>
-<LI><A NAME="TOC5" HREF="#SEC5">MATCHING A PATTERN</A>
-<LI><A NAME="TOC6" HREF="#SEC6">ERROR MESSAGES</A>
-<LI><A NAME="TOC7" HREF="#SEC7">STORAGE</A>
-<LI><A NAME="TOC8" HREF="#SEC8">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcreposix - POSIX API for Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>#include &#60;pcreposix.h&#62;</B>
-</P>
-<P>
-<B>int regcomp(regex_t *<I>preg</I>, const char *<I>pattern</I>,</B>
-<B>int <I>cflags</I>);</B>
-</P>
-<P>
-<B>int regexec(regex_t *<I>preg</I>, const char *<I>string</I>,</B>
-<B>size_t <I>nmatch</I>, regmatch_t <I>pmatch</I>[], int <I>eflags</I>);</B>
-</P>
-<P>
-<B>size_t regerror(int <I>errcode</I>, const regex_t *<I>preg</I>,</B>
-<B>char *<I>errbuf</I>, size_t <I>errbuf_size</I>);</B>
-</P>
-<P>
-<B>void regfree(regex_t *<I>preg</I>);</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-This set of functions provides a POSIX-style API to the PCRE regular expression
-package. See the <B>pcre</B> documentation for a description of the native API,
-which contains additional functionality.
-</P>
-<P>
-The functions described here are just wrapper functions that ultimately call
-the native API. Their prototypes are defined in the <B>pcreposix.h</B> header
-file, and on Unix systems the library itself is called <B>pcreposix.a</B>, so
-can be accessed by adding <B>-lpcreposix</B> to the command for linking an
-application which uses them. Because the POSIX functions call the native ones,
-it is also necessary to add \fR-lpcre\fR.
-</P>
-<P>
-I have implemented only those option bits that can be reasonably mapped to PCRE
-native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
-with the value zero. They have no effect, but since programs that are written
-to the POSIX interface often use them, this makes it easier to slot in PCRE as
-a replacement library. Other POSIX options are not even defined.
-</P>
-<P>
-When PCRE is called via these functions, it is only the API that is POSIX-like
-in style. The syntax and semantics of the regular expressions themselves are
-still those of Perl, subject to the setting of various PCRE options, as
-described below.
-</P>
-<P>
-The header for these functions is supplied as <B>pcreposix.h</B> to avoid any
-potential clash with other POSIX libraries. It can, of course, be renamed or
-aliased as <B>regex.h</B>, which is the "correct" name. It provides two
-structure types, <I>regex_t</I> for compiled internal forms, and
-<I>regmatch_t</I> for returning captured substrings. It also defines some
-constants whose names start with "REG_"; these are used for setting options and
-identifying error codes.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">COMPILING A PATTERN</A>
-<P>
-The function <B>regcomp()</B> is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument <I>pattern</I>. The <I>preg</I> argument is a pointer
-to a regex_t structure which is used as a base for storing information about
-the compiled expression.
-</P>
-<P>
-The argument <I>cflags</I> is either zero, or contains one or more of the bits
-defined by the following macros:
-</P>
-<P>
-<PRE>
- REG_ICASE
-</PRE>
-</P>
-<P>
-The PCRE_CASELESS option is set when the expression is passed for compilation
-to the native function.
-</P>
-<P>
-<PRE>
- REG_NEWLINE
-</PRE>
-</P>
-<P>
-The PCRE_MULTILINE option is set when the expression is passed for compilation
-to the native function.
-</P>
-<P>
-In the absence of these flags, no options are passed to the native function.
-This means the the regex is compiled with PCRE default semantics. In
-particular, the way it handles newline characters in the subject string is the
-Perl way, not the POSIX way. Note that setting PCRE_MULTILINE has only
-<I>some</I> of the effects specified for REG_NEWLINE. It does not affect the way
-newlines are matched by . (they aren't) or a negative class such as [^a] (they
-are).
-</P>
-<P>
-The yield of <B>regcomp()</B> is zero on success, and non-zero otherwise. The
-<I>preg</I> structure is filled in on success, and one member of the structure
-is publicized: <I>re_nsub</I> contains the number of capturing subpatterns in
-the regular expression. Various error codes are defined in the header file.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">MATCHING A PATTERN</A>
-<P>
-The function <B>regexec()</B> is called to match a pre-compiled pattern
-<I>preg</I> against a given <I>string</I>, which is terminated by a zero byte,
-subject to the options in <I>eflags</I>. These can be:
-</P>
-<P>
-<PRE>
- REG_NOTBOL
-</PRE>
-</P>
-<P>
-The PCRE_NOTBOL option is set when calling the underlying PCRE matching
-function.
-</P>
-<P>
-<PRE>
- REG_NOTEOL
-</PRE>
-</P>
-<P>
-The PCRE_NOTEOL option is set when calling the underlying PCRE matching
-function.
-</P>
-<P>
-The portion of the string that was matched, and also any captured substrings,
-are returned via the <I>pmatch</I> argument, which points to an array of
-<I>nmatch</I> structures of type <I>regmatch_t</I>, containing the members
-<I>rm_so</I> and <I>rm_eo</I>. These contain the offset to the first character of
-each substring and the offset to the first character after the end of each
-substring, respectively. The 0th element of the vector relates to the entire
-portion of <I>string</I> that was matched; subsequent elements relate to the
-capturing subpatterns of the regular expression. Unused entries in the array
-have both structure members set to -1.
-</P>
-<P>
-A successful match yields a zero return; various error codes are defined in the
-header file, of which REG_NOMATCH is the "expected" failure code.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">ERROR MESSAGES</A>
-<P>
-The <B>regerror()</B> function maps a non-zero errorcode from either
-<B>regcomp</B> or <B>regexec</B> to a printable message. If <I>preg</I> is not
-NULL, the error should have arisen from the use of that structure. A message
-terminated by a binary zero is placed in <I>errbuf</I>. The length of the
-message, including the zero, is limited to <I>errbuf_size</I>. The yield of the
-function is the size of buffer needed to hold the whole message.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">STORAGE</A>
-<P>
-Compiling a regular expression causes memory to be allocated and associated
-with the <I>preg</I> structure. The function <B>regfree()</B> frees all such
-memory, after which <I>preg</I> may no longer be used as a compiled expression.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/srclib/pcre/doc/pcreposix.txt b/srclib/pcre/doc/pcreposix.txt
deleted file mode 100644
index 2d76f7cdcc..0000000000
--- a/srclib/pcre/doc/pcreposix.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-NAME
- pcreposix - POSIX API for Perl-compatible regular expres-
- sions.
-
-
-
-SYNOPSIS
- #include <pcreposix.h>
-
- int regcomp(regex_t *preg, const char *pattern,
- int cflags);
-
- int regexec(regex_t *preg, const char *string,
- size_t nmatch, regmatch_t pmatch[], int eflags);
-
- size_t regerror(int errcode, const regex_t *preg,
- char *errbuf, size_t errbuf_size);
-
- void regfree(regex_t *preg);
-
-
-
-DESCRIPTION
- This set of functions provides a POSIX-style API to the PCRE
- regular expression package. See the pcre documentation for a
- description of the native API, which contains additional
- functionality.
-
- The functions described here are just wrapper functions that
- ultimately call the native API. Their prototypes are defined
- in the pcreposix.h header file, and on Unix systems the
- library itself is called pcreposix.a, so can be accessed by
- adding -lpcreposix to the command for linking an application
- which uses them. Because the POSIX functions call the native
- ones, it is also necessary to add -lpcre.
-
- I have implemented only those option bits that can be rea-
- sonably mapped to PCRE native options. In addition, the
- options REG_EXTENDED and REG_NOSUB are defined with the
- value zero. They have no effect, but since programs that are
- written to the POSIX interface often use them, this makes it
- easier to slot in PCRE as a replacement library. Other POSIX
- options are not even defined.
-
- When PCRE is called via these functions, it is only the API
- that is POSIX-like in style. The syntax and semantics of the
- regular expressions themselves are still those of Perl, sub-
- ject to the setting of various PCRE options, as described
- below.
-
- The header for these functions is supplied as pcreposix.h to
- avoid any potential clash with other POSIX libraries. It
- can, of course, be renamed or aliased as regex.h, which is
- the "correct" name. It provides two structure types, regex_t
- for compiled internal forms, and regmatch_t for returning
- captured substrings. It also defines some constants whose
- names start with "REG_"; these are used for setting options
- and identifying error codes.
-
-
-
-COMPILING A PATTERN
- The function regcomp() is called to compile a pattern into
- an internal form. The pattern is a C string terminated by a
- binary zero, and is passed in the argument pattern. The preg
- argument is a pointer to a regex_t structure which is used
- as a base for storing information about the compiled expres-
- sion.
-
- The argument cflags is either zero, or contains one or more
- of the bits defined by the following macros:
-
- REG_ICASE
-
- The PCRE_CASELESS option is set when the expression is
- passed for compilation to the native function.
-
- REG_NEWLINE
-
- The PCRE_MULTILINE option is set when the expression is
- passed for compilation to the native function.
-
- In the absence of these flags, no options are passed to the
- native function. This means the the regex is compiled with
- PCRE default semantics. In particular, the way it handles
- newline characters in the subject string is the Perl way,
- not the POSIX way. Note that setting PCRE_MULTILINE has only
- some of the effects specified for REG_NEWLINE. It does not
- affect the way newlines are matched by . (they aren't) or a
- negative class such as [^a] (they are).
-
- The yield of regcomp() is zero on success, and non-zero oth-
- erwise. The preg structure is filled in on success, and one
- member of the structure is publicized: re_nsub contains the
- number of capturing subpatterns in the regular expression.
- Various error codes are defined in the header file.
-
-
-
-MATCHING A PATTERN
- The function regexec() is called to match a pre-compiled
- pattern preg against a given string, which is terminated by
- a zero byte, subject to the options in eflags. These can be:
-
- REG_NOTBOL
-
- The PCRE_NOTBOL option is set when calling the underlying
- PCRE matching function.
-
- REG_NOTEOL
-
- The PCRE_NOTEOL option is set when calling the underlying
- PCRE matching function.
-
- The portion of the string that was matched, and also any
- captured substrings, are returned via the pmatch argument,
- which points to an array of nmatch structures of type
- regmatch_t, containing the members rm_so and rm_eo. These
- contain the offset to the first character of each substring
- and the offset to the first character after the end of each
- substring, respectively. The 0th element of the vector
- relates to the entire portion of string that was matched;
- subsequent elements relate to the capturing subpatterns of
- the regular expression. Unused entries in the array have
- both structure members set to -1.
-
- A successful match yields a zero return; various error codes
- are defined in the header file, of which REG_NOMATCH is the
- "expected" failure code.
-
-
-
-ERROR MESSAGES
- The regerror() function maps a non-zero errorcode from
- either regcomp or regexec to a printable message. If preg is
- not NULL, the error should have arisen from the use of that
- structure. A message terminated by a binary zero is placed
- in errbuf. The length of the message, including the zero, is
- limited to errbuf_size. The yield of the function is the
- size of buffer needed to hold the whole message.
-
-
-
-STORAGE
- Compiling a regular expression causes memory to be allocated
- and associated with the preg structure. The function reg-
- free() frees all such memory, after which preg may no longer
- be used as a compiled expression.
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- New Museums Site,
- Cambridge CB2 3QG, England.
- Phone: +44 1223 334714
-
- Copyright (c) 1997-2000 University of Cambridge.
diff --git a/srclib/pcre/doc/pcretest.1 b/srclib/pcre/doc/pcretest.1
deleted file mode 100644
index b2e25560d7..0000000000
--- a/srclib/pcre/doc/pcretest.1
+++ /dev/null
@@ -1,282 +0,0 @@
-.TH PCRETEST 1
-.SH NAME
-pcretest - a program for testing Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B pcretest "[-d] [-i] [-m] [-o osize] [-p] [-t] [source] [destination]"
-
-\fBpcretest\fR was written as a test program for the PCRE regular expression
-library itself, but it can also be used for experimenting with regular
-expressions. This man page describes the features of the test program; for
-details of the regular expressions themselves, see the \fBpcre\fR man page.
-
-.SH OPTIONS
-.TP 10
-\fB-d\fR
-Behave as if each regex had the \fB/D\fR modifier (see below); the internal
-form is output after compilation.
-.TP 10
-\fB-i\fR
-Behave as if each regex had the \fB/I\fR modifier; information about the
-compiled pattern is given after compilation.
-.TP 10
-\fB-m\fR
-Output the size of each compiled pattern after it has been compiled. This is
-equivalent to adding /M to each regular expression. For compatibility with
-earlier versions of pcretest, \fB-s\fR is a synonym for \fB-m\fR.
-.TP 10
-\fB-o\fR \fIosize\fR
-Set the number of elements in the output vector that is used when calling PCRE
-to be \fIosize\fR. The default value is 45, which is enough for 14 capturing
-subexpressions. The vector size can be changed for individual matching calls by
-including \\O in the data line (see below).
-.TP 10
-\fB-p\fR
-Behave as if each regex has \fB/P\fR modifier; the POSIX wrapper API is used
-to call PCRE. None of the other options has any effect when \fB-p\fR is set.
-.TP 10
-\fB-t\fR
-Run each compile, study, and match 20000 times with a timer, and output
-resulting time per compile or match (in milliseconds). Do not set \fB-t\fR with
-\fB-m\fR, because you will then get the size output 20000 times and the timing
-will be distorted.
-
-
-.SH DESCRIPTION
-
-If \fBpcretest\fR is given two filename arguments, it reads from the first and
-writes to the second. If it is given only one filename argument, it reads from
-that file and writes to stdout. Otherwise, it reads from stdin and writes to
-stdout, and prompts for each line of input, using "re>" to prompt for regular
-expressions, and "data>" to prompt for data lines.
-
-The program handles any number of sets of input on a single input file. Each
-set starts with a regular expression, and continues with any number of data
-lines to be matched against the pattern. An empty line signals the end of the
-data lines, at which point a new regular expression is read. The regular
-expressions are given enclosed in any non-alphameric delimiters other than
-backslash, for example
-
- /(a|bc)x+yz/
-
-White space before the initial delimiter is ignored. A regular expression may
-be continued over several input lines, in which case the newline characters are
-included within it. It is possible to include the delimiter within the pattern
-by escaping it, for example
-
- /abc\\/def/
-
-If you do so, the escape and the delimiter form part of the pattern, but since
-delimiters are always non-alphameric, this does not affect its interpretation.
-If the terminating delimiter is immediately followed by a backslash, for
-example,
-
- /abc/\\
-
-then a backslash is added to the end of the pattern. This is done to provide a
-way of testing the error condition that arises if a pattern finishes with a
-backslash, because
-
- /abc\\/
-
-is interpreted as the first line of a pattern that starts with "abc/", causing
-pcretest to read the next line as a continuation of the regular expression.
-
-
-.SH PATTERN MODIFIERS
-
-The pattern may be followed by \fBi\fR, \fBm\fR, \fBs\fR, or \fBx\fR to set the
-PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, or PCRE_EXTENDED options,
-respectively. For example:
-
- /caseless/i
-
-These modifier letters have the same effect as they do in Perl. There are
-others which set PCRE options that do not correspond to anything in Perl:
-\fB/A\fR, \fB/E\fR, and \fB/X\fR set PCRE_ANCHORED, PCRE_DOLLAR_ENDONLY, and
-PCRE_EXTRA respectively.
-
-Searching for all possible matches within each subject string can be requested
-by the \fB/g\fR or \fB/G\fR modifier. After finding a match, PCRE is called
-again to search the remainder of the subject string. The difference between
-\fB/g\fR and \fB/G\fR is that the former uses the \fIstartoffset\fR argument to
-\fBpcre_exec()\fR to start searching at a new point within the entire string
-(which is in effect what Perl does), whereas the latter passes over a shortened
-substring. This makes a difference to the matching process if the pattern
-begins with a lookbehind assertion (including \\b or \\B).
-
-If any call to \fBpcre_exec()\fR in a \fB/g\fR or \fB/G\fR sequence matches an
-empty string, the next call is done with the PCRE_NOTEMPTY and PCRE_ANCHORED
-flags set in order to search for another, non-empty, match at the same point.
-If this second match fails, the start offset is advanced by one, and the normal
-match is retried. This imitates the way Perl handles such cases when using the
-\fB/g\fR modifier or the \fBsplit()\fR function.
-
-There are a number of other modifiers for controlling the way \fBpcretest\fR
-operates.
-
-The \fB/+\fR modifier requests that as well as outputting the substring that
-matched the entire pattern, pcretest should in addition output the remainder of
-the subject string. This is useful for tests where the subject contains
-multiple copies of the same substring.
-
-The \fB/L\fR modifier must be followed directly by the name of a locale, for
-example,
-
- /pattern/Lfr
-
-For this reason, it must be the last modifier letter. The given locale is set,
-\fBpcre_maketables()\fR is called to build a set of character tables for the
-locale, and this is then passed to \fBpcre_compile()\fR when compiling the
-regular expression. Without an \fB/L\fR modifier, NULL is passed as the tables
-pointer; that is, \fB/L\fR applies only to the expression on which it appears.
-
-The \fB/I\fR modifier requests that \fBpcretest\fR output information about the
-compiled expression (whether it is anchored, has a fixed first character, and
-so on). It does this by calling \fBpcre_fullinfo()\fR after compiling an
-expression, and outputting the information it gets back. If the pattern is
-studied, the results of that are also output.
-
-The \fB/D\fR modifier is a PCRE debugging feature, which also assumes \fB/I\fR.
-It causes the internal form of compiled regular expressions to be output after
-compilation.
-
-The \fB/S\fR modifier causes \fBpcre_study()\fR to be called after the
-expression has been compiled, and the results used when the expression is
-matched.
-
-The \fB/M\fR modifier causes the size of memory block used to hold the compiled
-pattern to be output.
-
-The \fB/P\fR modifier causes \fBpcretest\fR to call PCRE via the POSIX wrapper
-API rather than its native API. When this is done, all other modifiers except
-\fB/i\fR, \fB/m\fR, and \fB/+\fR are ignored. REG_ICASE is set if \fB/i\fR is
-present, and REG_NEWLINE is set if \fB/m\fR is present. The wrapper functions
-force PCRE_DOLLAR_ENDONLY always, and PCRE_DOTALL unless REG_NEWLINE is set.
-
-The \fB/8\fR modifier causes \fBpcretest\fR to call PCRE with the PCRE_UTF8
-option set. This turns on the (currently incomplete) support for UTF-8
-character handling in PCRE, provided that it was compiled with this support
-enabled. This modifier also causes any non-printing characters in output
-strings to be printed using the \\x{hh...} notation if they are valid UTF-8
-sequences.
-
-
-.SH DATA LINES
-
-Before each data line is passed to \fBpcre_exec()\fR, leading and trailing
-whitespace is removed, and it is then scanned for \\ escapes. The following are
-recognized:
-
- \\a alarm (= BEL)
- \\b backspace
- \\e escape
- \\f formfeed
- \\n newline
- \\r carriage return
- \\t tab
- \\v vertical tab
- \\nnn octal character (up to 3 octal digits)
- \\xhh hexadecimal character (up to 2 hex digits)
- \\x{hh...} hexadecimal UTF-8 character
-
- \\A pass the PCRE_ANCHORED option to \fBpcre_exec()\fR
- \\B pass the PCRE_NOTBOL option to \fBpcre_exec()\fR
- \\Cdd call pcre_copy_substring() for substring dd
- after a successful match (any decimal number
- less than 32)
- \\Gdd call pcre_get_substring() for substring dd
- after a successful match (any decimal number
- less than 32)
- \\L call pcre_get_substringlist() after a
- successful match
- \\N pass the PCRE_NOTEMPTY option to \fBpcre_exec()\fR
- \\Odd set the size of the output vector passed to
- \fBpcre_exec()\fR to dd (any number of decimal
- digits)
- \\Z pass the PCRE_NOTEOL option to \fBpcre_exec()\fR
-
-When \\O is used, it may be higher or lower than the size set by the \fB-O\fR
-option (or defaulted to 45); \\O applies only to the call of \fBpcre_exec()\fR
-for the line in which it appears.
-
-A backslash followed by anything else just escapes the anything else. If the
-very last character is a backslash, it is ignored. This gives a way of passing
-an empty line as data, since a real empty line terminates the data input.
-
-If \fB/P\fR was present on the regex, causing the POSIX wrapper API to be used,
-only \fB\B\fR, and \fB\Z\fR have any effect, causing REG_NOTBOL and REG_NOTEOL
-to be passed to \fBregexec()\fR respectively.
-
-The use of \\x{hh...} to represent UTF-8 characters is not dependent on the use
-of the \fB/8\fR modifier on the pattern. It is recognized always. There may be
-any number of hexadecimal digits inside the braces. The result is from one to
-six bytes, encoded according to the UTF-8 rules.
-
-
-.SH OUTPUT FROM PCRETEST
-
-When a match succeeds, pcretest outputs the list of captured substrings that
-\fBpcre_exec()\fR returns, starting with number 0 for the string that matched
-the whole pattern. Here is an example of an interactive pcretest run.
-
- $ pcretest
- PCRE version 2.06 08-Jun-1999
-
- re> /^abc(\\d+)/
- data> abc123
- 0: abc123
- 1: 123
- data> xyz
- No match
-
-If the strings contain any non-printing characters, they are output as \\0x
-escapes, or as \\x{...} escapes if the \fB/8\fR modifier was present on the
-pattern. If the pattern has the \fB/+\fR modifier, then the output for
-substring 0 is followed by the the rest of the subject string, identified by
-"0+" like this:
-
- re> /cat/+
- data> cataract
- 0: cat
- 0+ aract
-
-If the pattern has the \fB/g\fR or \fB/G\fR modifier, the results of successive
-matching attempts are output in sequence, like this:
-
- re> /\\Bi(\\w\\w)/g
- data> Mississippi
- 0: iss
- 1: ss
- 0: iss
- 1: ss
- 0: ipp
- 1: pp
-
-"No match" is output only if the first match attempt fails.
-
-If any of the sequences \fB\\C\fR, \fB\\G\fR, or \fB\\L\fR are present in a
-data line that is successfully matched, the substrings extracted by the
-convenience functions are output with C, G, or L after the string number
-instead of a colon. This is in addition to the normal full list. The string
-length (that is, the return from the extraction function) is given in
-parentheses after each string for \fB\\C\fR and \fB\\G\fR.
-
-Note that while patterns can be continued over several lines (a plain ">"
-prompt is used for continuations), data lines may not. However newlines can be
-included in data by means of the \\n escape.
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Last updated: 15 August 2001
-.br
-Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcretest.html b/srclib/pcre/doc/pcretest.html
deleted file mode 100644
index 918e6dec2b..0000000000
--- a/srclib/pcre/doc/pcretest.html
+++ /dev/null
@@ -1,369 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcretest specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcretest specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">OPTIONS</A>
-<LI><A NAME="TOC4" HREF="#SEC4">DESCRIPTION</A>
-<LI><A NAME="TOC5" HREF="#SEC5">PATTERN MODIFIERS</A>
-<LI><A NAME="TOC6" HREF="#SEC6">DATA LINES</A>
-<LI><A NAME="TOC7" HREF="#SEC7">OUTPUT FROM PCRETEST</A>
-<LI><A NAME="TOC8" HREF="#SEC8">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcretest - a program for testing Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>pcretest [-d] [-i] [-m] [-o osize] [-p] [-t] [source] [destination]</B>
-</P>
-<P>
-<B>pcretest</B> was written as a test program for the PCRE regular expression
-library itself, but it can also be used for experimenting with regular
-expressions. This man page describes the features of the test program; for
-details of the regular expressions themselves, see the <B>pcre</B> man page.
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">OPTIONS</A>
-<P>
-<B>-d</B>
-Behave as if each regex had the <B>/D</B> modifier (see below); the internal
-form is output after compilation.
-</P>
-<P>
-<B>-i</B>
-Behave as if each regex had the <B>/I</B> modifier; information about the
-compiled pattern is given after compilation.
-</P>
-<P>
-<B>-m</B>
-Output the size of each compiled pattern after it has been compiled. This is
-equivalent to adding /M to each regular expression. For compatibility with
-earlier versions of pcretest, <B>-s</B> is a synonym for <B>-m</B>.
-</P>
-<P>
-<B>-o</B> <I>osize</I>
-Set the number of elements in the output vector that is used when calling PCRE
-to be <I>osize</I>. The default value is 45, which is enough for 14 capturing
-subexpressions. The vector size can be changed for individual matching calls by
-including \O in the data line (see below).
-</P>
-<P>
-<B>-p</B>
-Behave as if each regex has <B>/P</B> modifier; the POSIX wrapper API is used
-to call PCRE. None of the other options has any effect when <B>-p</B> is set.
-</P>
-<P>
-<B>-t</B>
-Run each compile, study, and match 20000 times with a timer, and output
-resulting time per compile or match (in milliseconds). Do not set <B>-t</B> with
-<B>-m</B>, because you will then get the size output 20000 times and the timing
-will be distorted.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">DESCRIPTION</A>
-<P>
-If <B>pcretest</B> is given two filename arguments, it reads from the first and
-writes to the second. If it is given only one filename argument, it reads from
-that file and writes to stdout. Otherwise, it reads from stdin and writes to
-stdout, and prompts for each line of input, using "re&#62;" to prompt for regular
-expressions, and "data&#62;" to prompt for data lines.
-</P>
-<P>
-The program handles any number of sets of input on a single input file. Each
-set starts with a regular expression, and continues with any number of data
-lines to be matched against the pattern. An empty line signals the end of the
-data lines, at which point a new regular expression is read. The regular
-expressions are given enclosed in any non-alphameric delimiters other than
-backslash, for example
-</P>
-<P>
-<PRE>
- /(a|bc)x+yz/
-</PRE>
-</P>
-<P>
-White space before the initial delimiter is ignored. A regular expression may
-be continued over several input lines, in which case the newline characters are
-included within it. It is possible to include the delimiter within the pattern
-by escaping it, for example
-</P>
-<P>
-<PRE>
- /abc\/def/
-</PRE>
-</P>
-<P>
-If you do so, the escape and the delimiter form part of the pattern, but since
-delimiters are always non-alphameric, this does not affect its interpretation.
-If the terminating delimiter is immediately followed by a backslash, for
-example,
-</P>
-<P>
-<PRE>
- /abc/\
-</PRE>
-</P>
-<P>
-then a backslash is added to the end of the pattern. This is done to provide a
-way of testing the error condition that arises if a pattern finishes with a
-backslash, because
-</P>
-<P>
-<PRE>
- /abc\/
-</PRE>
-</P>
-<P>
-is interpreted as the first line of a pattern that starts with "abc/", causing
-pcretest to read the next line as a continuation of the regular expression.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">PATTERN MODIFIERS</A>
-<P>
-The pattern may be followed by <B>i</B>, <B>m</B>, <B>s</B>, or <B>x</B> to set the
-PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, or PCRE_EXTENDED options,
-respectively. For example:
-</P>
-<P>
-<PRE>
- /caseless/i
-</PRE>
-</P>
-<P>
-These modifier letters have the same effect as they do in Perl. There are
-others which set PCRE options that do not correspond to anything in Perl:
-<B>/A</B>, <B>/E</B>, and <B>/X</B> set PCRE_ANCHORED, PCRE_DOLLAR_ENDONLY, and
-PCRE_EXTRA respectively.
-</P>
-<P>
-Searching for all possible matches within each subject string can be requested
-by the <B>/g</B> or <B>/G</B> modifier. After finding a match, PCRE is called
-again to search the remainder of the subject string. The difference between
-<B>/g</B> and <B>/G</B> is that the former uses the <I>startoffset</I> argument to
-<B>pcre_exec()</B> to start searching at a new point within the entire string
-(which is in effect what Perl does), whereas the latter passes over a shortened
-substring. This makes a difference to the matching process if the pattern
-begins with a lookbehind assertion (including \b or \B).
-</P>
-<P>
-If any call to <B>pcre_exec()</B> in a <B>/g</B> or <B>/G</B> sequence matches an
-empty string, the next call is done with the PCRE_NOTEMPTY and PCRE_ANCHORED
-flags set in order to search for another, non-empty, match at the same point.
-If this second match fails, the start offset is advanced by one, and the normal
-match is retried. This imitates the way Perl handles such cases when using the
-<B>/g</B> modifier or the <B>split()</B> function.
-</P>
-<P>
-There are a number of other modifiers for controlling the way <B>pcretest</B>
-operates.
-</P>
-<P>
-The <B>/+</B> modifier requests that as well as outputting the substring that
-matched the entire pattern, pcretest should in addition output the remainder of
-the subject string. This is useful for tests where the subject contains
-multiple copies of the same substring.
-</P>
-<P>
-The <B>/L</B> modifier must be followed directly by the name of a locale, for
-example,
-</P>
-<P>
-<PRE>
- /pattern/Lfr
-</PRE>
-</P>
-<P>
-For this reason, it must be the last modifier letter. The given locale is set,
-<B>pcre_maketables()</B> is called to build a set of character tables for the
-locale, and this is then passed to <B>pcre_compile()</B> when compiling the
-regular expression. Without an <B>/L</B> modifier, NULL is passed as the tables
-pointer; that is, <B>/L</B> applies only to the expression on which it appears.
-</P>
-<P>
-The <B>/I</B> modifier requests that <B>pcretest</B> output information about the
-compiled expression (whether it is anchored, has a fixed first character, and
-so on). It does this by calling <B>pcre_fullinfo()</B> after compiling an
-expression, and outputting the information it gets back. If the pattern is
-studied, the results of that are also output.
-</P>
-<P>
-The <B>/D</B> modifier is a PCRE debugging feature, which also assumes <B>/I</B>.
-It causes the internal form of compiled regular expressions to be output after
-compilation.
-</P>
-<P>
-The <B>/S</B> modifier causes <B>pcre_study()</B> to be called after the
-expression has been compiled, and the results used when the expression is
-matched.
-</P>
-<P>
-The <B>/M</B> modifier causes the size of memory block used to hold the compiled
-pattern to be output.
-</P>
-<P>
-The <B>/P</B> modifier causes <B>pcretest</B> to call PCRE via the POSIX wrapper
-API rather than its native API. When this is done, all other modifiers except
-<B>/i</B>, <B>/m</B>, and <B>/+</B> are ignored. REG_ICASE is set if <B>/i</B> is
-present, and REG_NEWLINE is set if <B>/m</B> is present. The wrapper functions
-force PCRE_DOLLAR_ENDONLY always, and PCRE_DOTALL unless REG_NEWLINE is set.
-</P>
-<P>
-The <B>/8</B> modifier causes <B>pcretest</B> to call PCRE with the PCRE_UTF8
-option set. This turns on the (currently incomplete) support for UTF-8
-character handling in PCRE, provided that it was compiled with this support
-enabled. This modifier also causes any non-printing characters in output
-strings to be printed using the \x{hh...} notation if they are valid UTF-8
-sequences.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">DATA LINES</A>
-<P>
-Before each data line is passed to <B>pcre_exec()</B>, leading and trailing
-whitespace is removed, and it is then scanned for \ escapes. The following are
-recognized:
-</P>
-<P>
-<PRE>
- \a alarm (= BEL)
- \b backspace
- \e escape
- \f formfeed
- \n newline
- \r carriage return
- \t tab
- \v vertical tab
- \nnn octal character (up to 3 octal digits)
- \xhh hexadecimal character (up to 2 hex digits)
- \x{hh...} hexadecimal UTF-8 character
-</PRE>
-</P>
-<P>
-<PRE>
- \A pass the PCRE_ANCHORED option to <B>pcre_exec()</B>
- \B pass the PCRE_NOTBOL option to <B>pcre_exec()</B>
- \Cdd call pcre_copy_substring() for substring dd
- after a successful match (any decimal number
- less than 32)
- \Gdd call pcre_get_substring() for substring dd
- after a successful match (any decimal number
- less than 32)
- \L call pcre_get_substringlist() after a
- successful match
- \N pass the PCRE_NOTEMPTY option to <B>pcre_exec()</B>
- \Odd set the size of the output vector passed to
- <B>pcre_exec()</B> to dd (any number of decimal
- digits)
- \Z pass the PCRE_NOTEOL option to <B>pcre_exec()</B>
-</PRE>
-</P>
-<P>
-When \O is used, it may be higher or lower than the size set by the <B>-O</B>
-option (or defaulted to 45); \O applies only to the call of <B>pcre_exec()</B>
-for the line in which it appears.
-</P>
-<P>
-A backslash followed by anything else just escapes the anything else. If the
-very last character is a backslash, it is ignored. This gives a way of passing
-an empty line as data, since a real empty line terminates the data input.
-</P>
-<P>
-If <B>/P</B> was present on the regex, causing the POSIX wrapper API to be used,
-only <B>\B</B>, and <B>\Z</B> have any effect, causing REG_NOTBOL and REG_NOTEOL
-to be passed to <B>regexec()</B> respectively.
-</P>
-<P>
-The use of \x{hh...} to represent UTF-8 characters is not dependent on the use
-of the <B>/8</B> modifier on the pattern. It is recognized always. There may be
-any number of hexadecimal digits inside the braces. The result is from one to
-six bytes, encoded according to the UTF-8 rules.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">OUTPUT FROM PCRETEST</A>
-<P>
-When a match succeeds, pcretest outputs the list of captured substrings that
-<B>pcre_exec()</B> returns, starting with number 0 for the string that matched
-the whole pattern. Here is an example of an interactive pcretest run.
-</P>
-<P>
-<PRE>
- $ pcretest
- PCRE version 2.06 08-Jun-1999
-</PRE>
-</P>
-<P>
-<PRE>
- re&#62; /^abc(\d+)/
- data&#62; abc123
- 0: abc123
- 1: 123
- data&#62; xyz
- No match
-</PRE>
-</P>
-<P>
-If the strings contain any non-printing characters, they are output as \0x
-escapes, or as \x{...} escapes if the <B>/8</B> modifier was present on the
-pattern. If the pattern has the <B>/+</B> modifier, then the output for
-substring 0 is followed by the the rest of the subject string, identified by
-"0+" like this:
-</P>
-<P>
-<PRE>
- re&#62; /cat/+
- data&#62; cataract
- 0: cat
- 0+ aract
-</PRE>
-</P>
-<P>
-If the pattern has the <B>/g</B> or <B>/G</B> modifier, the results of successive
-matching attempts are output in sequence, like this:
-</P>
-<P>
-<PRE>
- re&#62; /\Bi(\w\w)/g
- data&#62; Mississippi
- 0: iss
- 1: ss
- 0: iss
- 1: ss
- 0: ipp
- 1: pp
-</PRE>
-</P>
-<P>
-"No match" is output only if the first match attempt fails.
-</P>
-<P>
-If any of the sequences <B>\C</B>, <B>\G</B>, or <B>\L</B> are present in a
-data line that is successfully matched, the substrings extracted by the
-convenience functions are output with C, G, or L after the string number
-instead of a colon. This is in addition to the normal full list. The string
-length (that is, the return from the extraction function) is given in
-parentheses after each string for <B>\C</B> and <B>\G</B>.
-</P>
-<P>
-Note that while patterns can be continued over several lines (a plain "&#62;"
-prompt is used for continuations), data lines may not. However newlines can be
-included in data by means of the \n escape.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Last updated: 15 August 2001
-<BR>
-Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/pcretest.txt b/srclib/pcre/doc/pcretest.txt
deleted file mode 100644
index 0e13b6c6c5..0000000000
--- a/srclib/pcre/doc/pcretest.txt
+++ /dev/null
@@ -1,319 +0,0 @@
-NAME
- pcretest - a program for testing Perl-compatible regular
- expressions.
-
-
-
-SYNOPSIS
- pcretest [-d] [-i] [-m] [-o osize] [-p] [-t] [source] [des-
- tination]
-
- pcretest was written as a test program for the PCRE regular
- expression library itself, but it can also be used for
- experimenting with regular expressions. This man page
- describes the features of the test program; for details of
- the regular expressions themselves, see the pcre man page.
-
-
-
-OPTIONS
- -d Behave as if each regex had the /D modifier (see
- below); the internal form is output after compila-
- tion.
-
- -i Behave as if each regex had the /I modifier;
- information about the compiled pattern is given
- after compilation.
-
- -m Output the size of each compiled pattern after it
- has been compiled. This is equivalent to adding /M
- to each regular expression. For compatibility with
- earlier versions of pcretest, -s is a synonym for
- -m.
-
- -o osize Set the number of elements in the output vector
- that is used when calling PCRE to be osize. The
- default value is 45, which is enough for 14 cap-
- turing subexpressions. The vector size can be
- changed for individual matching calls by including
- \O in the data line (see below).
-
- -p Behave as if each regex has /P modifier; the POSIX
- wrapper API is used to call PCRE. None of the
- other options has any effect when -p is set.
-
- -t Run each compile, study, and match 20000 times
- with a timer, and output resulting time per com-
- pile or match (in milliseconds). Do not set -t
- with -m, because you will then get the size output
- 20000 times and the timing will be distorted.
-
-
-
-DESCRIPTION
- If pcretest is given two filename arguments, it reads from
- the first and writes to the second. If it is given only one
-
-
-
-
-SunOS 5.8 Last change: 1
-
-
-
- filename argument, it reads from that file and writes to
- stdout. Otherwise, it reads from stdin and writes to stdout,
- and prompts for each line of input, using "re>" to prompt
- for regular expressions, and "data>" to prompt for data
- lines.
-
- The program handles any number of sets of input on a single
- input file. Each set starts with a regular expression, and
- continues with any number of data lines to be matched
- against the pattern. An empty line signals the end of the
- data lines, at which point a new regular expression is read.
- The regular expressions are given enclosed in any non-
- alphameric delimiters other than backslash, for example
-
- /(a|bc)x+yz/
-
- White space before the initial delimiter is ignored. A regu-
- lar expression may be continued over several input lines, in
- which case the newline characters are included within it. It
- is possible to include the delimiter within the pattern by
- escaping it, for example
-
- /abc\/def/
-
- If you do so, the escape and the delimiter form part of the
- pattern, but since delimiters are always non-alphameric,
- this does not affect its interpretation. If the terminating
- delimiter is immediately followed by a backslash, for exam-
- ple,
-
- /abc/\
-
- then a backslash is added to the end of the pattern. This is
- done to provide a way of testing the error condition that
- arises if a pattern finishes with a backslash, because
-
- /abc\/
-
- is interpreted as the first line of a pattern that starts
- with "abc/", causing pcretest to read the next line as a
- continuation of the regular expression.
-
-
-
-PATTERN MODIFIERS
- The pattern may be followed by i, m, s, or x to set the
- PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, or PCRE_EXTENDED
- options, respectively. For example:
-
- /caseless/i
-
- These modifier letters have the same effect as they do in
- Perl. There are others which set PCRE options that do not
- correspond to anything in Perl: /A, /E, and /X set
- PCRE_ANCHORED, PCRE_DOLLAR_ENDONLY, and PCRE_EXTRA respec-
- tively.
-
- Searching for all possible matches within each subject
- string can be requested by the /g or /G modifier. After
- finding a match, PCRE is called again to search the
- remainder of the subject string. The difference between /g
- and /G is that the former uses the startoffset argument to
- pcre_exec() to start searching at a new point within the
- entire string (which is in effect what Perl does), whereas
- the latter passes over a shortened substring. This makes a
- difference to the matching process if the pattern begins
- with a lookbehind assertion (including \b or \B).
-
- If any call to pcre_exec() in a /g or /G sequence matches an
- empty string, the next call is done with the PCRE_NOTEMPTY
- and PCRE_ANCHORED flags set in order to search for another,
- non-empty, match at the same point. If this second match
- fails, the start offset is advanced by one, and the normal
- match is retried. This imitates the way Perl handles such
- cases when using the /g modifier or the split() function.
-
- There are a number of other modifiers for controlling the
- way pcretest operates.
-
- The /+ modifier requests that as well as outputting the sub-
- string that matched the entire pattern, pcretest should in
- addition output the remainder of the subject string. This is
- useful for tests where the subject contains multiple copies
- of the same substring.
-
- The /L modifier must be followed directly by the name of a
- locale, for example,
-
- /pattern/Lfr
-
- For this reason, it must be the last modifier letter. The
- given locale is set, pcre_maketables() is called to build a
- set of character tables for the locale, and this is then
- passed to pcre_compile() when compiling the regular expres-
- sion. Without an /L modifier, NULL is passed as the tables
- pointer; that is, /L applies only to the expression on which
- it appears.
-
- The /I modifier requests that pcretest output information
- about the compiled expression (whether it is anchored, has a
- fixed first character, and so on). It does this by calling
- pcre_fullinfo() after compiling an expression, and output-
- ting the information it gets back. If the pattern is stu-
- died, the results of that are also output.
- The /D modifier is a PCRE debugging feature, which also
- assumes /I. It causes the internal form of compiled regular
- expressions to be output after compilation.
-
- The /S modifier causes pcre_study() to be called after the
- expression has been compiled, and the results used when the
- expression is matched.
-
- The /M modifier causes the size of memory block used to hold
- the compiled pattern to be output.
-
- The /P modifier causes pcretest to call PCRE via the POSIX
- wrapper API rather than its native API. When this is done,
- all other modifiers except /i, /m, and /+ are ignored.
- REG_ICASE is set if /i is present, and REG_NEWLINE is set if
- /m is present. The wrapper functions force
- PCRE_DOLLAR_ENDONLY always, and PCRE_DOTALL unless
- REG_NEWLINE is set.
-
- The /8 modifier causes pcretest to call PCRE with the
- PCRE_UTF8 option set. This turns on the (currently incom-
- plete) support for UTF-8 character handling in PCRE, pro-
- vided that it was compiled with this support enabled. This
- modifier also causes any non-printing characters in output
- strings to be printed using the \x{hh...} notation if they
- are valid UTF-8 sequences.
-
-
-
-DATA LINES
- Before each data line is passed to pcre_exec(), leading and
- trailing whitespace is removed, and it is then scanned for \
- escapes. The following are recognized:
-
- \a alarm (= BEL)
- \b backspace
- \e escape
- \f formfeed
- \n newline
- \r carriage return
- \t tab
- \v vertical tab
- \nnn octal character (up to 3 octal digits)
- \xhh hexadecimal character (up to 2 hex digits)
- \x{hh...} hexadecimal UTF-8 character
-
- \A pass the PCRE_ANCHORED option to pcre_exec()
- \B pass the PCRE_NOTBOL option to pcre_exec()
- \Cdd call pcre_copy_substring() for substring dd
- after a successful match (any decimal number
- less than 32)
- \Gdd call pcre_get_substring() for substring dd
-
- after a successful match (any decimal number
- less than 32)
- \L call pcre_get_substringlist() after a
- successful match
- \N pass the PCRE_NOTEMPTY option to pcre_exec()
- \Odd set the size of the output vector passed to
- pcre_exec() to dd (any number of decimal
- digits)
- \Z pass the PCRE_NOTEOL option to pcre_exec()
-
- When \O is used, it may be higher or lower than the size set
- by the -O option (or defaulted to 45); \O applies only to
- the call of pcre_exec() for the line in which it appears.
-
- A backslash followed by anything else just escapes the any-
- thing else. If the very last character is a backslash, it is
- ignored. This gives a way of passing an empty line as data,
- since a real empty line terminates the data input.
-
- If /P was present on the regex, causing the POSIX wrapper
- API to be used, only B, and Z have any effect, causing
- REG_NOTBOL and REG_NOTEOL to be passed to regexec() respec-
- tively.
-
- The use of \x{hh...} to represent UTF-8 characters is not
- dependent on the use of the /8 modifier on the pattern. It
- is recognized always. There may be any number of hexadecimal
- digits inside the braces. The result is from one to six
- bytes, encoded according to the UTF-8 rules.
-
-
-
-OUTPUT FROM PCRETEST
- When a match succeeds, pcretest outputs the list of captured
- substrings that pcre_exec() returns, starting with number 0
- for the string that matched the whole pattern. Here is an
- example of an interactive pcretest run.
-
- $ pcretest
- PCRE version 2.06 08-Jun-1999
-
- re> /^abc(\d+)/
- data> abc123
- 0: abc123
- 1: 123
- data> xyz
- No match
-
- If the strings contain any non-printing characters, they are
- output as \0x escapes, or as \x{...} escapes if the /8
- modifier was present on the pattern. If the pattern has the
- /+ modifier, then the output for substring 0 is followed by
- the the rest of the subject string, identified by "0+" like
- this:
-
- re> /cat/+
- data> cataract
- 0: cat
- 0+ aract
-
- If the pattern has the /g or /G modifier, the results of
- successive matching attempts are output in sequence, like
- this:
-
- re> /\Bi(\w\w)/g
- data> Mississippi
- 0: iss
- 1: ss
- 0: iss
- 1: ss
- 0: ipp
- 1: pp
-
- "No match" is output only if the first match attempt fails.
-
- If any of the sequences \C, \G, or \L are present in a data
- line that is successfully matched, the substrings extracted
- by the convenience functions are output with C, G, or L
- after the string number instead of a colon. This is in addi-
- tion to the normal full list. The string length (that is,
- the return from the extraction function) is given in
- parentheses after each string for \C and \G.
-
- Note that while patterns can be continued over several lines
- (a plain ">" prompt is used for continuations), data lines
- may not. However newlines can be included in data by means
- of the \n escape.
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- University Computing Service,
- New Museums Site,
- Cambridge CB2 3QG, England.
- Phone: +44 1223 334714
-
- Last updated: 15 August 2001
- Copyright (c) 1997-2001 University of Cambridge.
diff --git a/srclib/pcre/doc/perltest.txt b/srclib/pcre/doc/perltest.txt
deleted file mode 100644
index 5a404016b5..0000000000
--- a/srclib/pcre/doc/perltest.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-The perltest program
---------------------
-
-The perltest program tests Perl's regular expressions; it has the same
-specification as pcretest, and so can be given identical input, except that
-input patterns can be followed only by Perl's lower case modifiers and /+ (as
-used by pcretest), which is recognized and handled by the program.
-
-The data lines are processed as Perl double-quoted strings, so if they contain
-" \ $ or @ characters, these have to be escaped. For this reason, all such
-characters in testinput1 and testinput3 are escaped so that they can be used
-for perltest as well as for pcretest, and the special upper case modifiers such
-as /A that pcretest recognizes are not used in these files. The output should
-be identical, apart from the initial identifying banner.
-
-For testing UTF-8 features, an alternative form of perltest, called perltest8,
-is supplied. This requires Perl 5.6 or higher. It recognizes the special
-modifier /8 that pcretest uses to invoke UTF-8 functionality. The testinput5
-file can be fed to perltest8.
-
-The testinput2 and testinput4 files are not suitable for feeding to perltest,
-since they do make use of the special upper case modifiers and escapes that
-pcretest uses to test some features of PCRE. The first of these files also
-contains malformed regular expressions, in order to check that PCRE diagnoses
-them correctly. Similarly, testinput6 tests UTF-8 features that do not relate
-to Perl.
-
-Philip Hazel <ph10@cam.ac.uk>
-August 2000
diff --git a/srclib/pcre/doc/pgrep.1 b/srclib/pcre/doc/pgrep.1
deleted file mode 100644
index d9e9b575e0..0000000000
--- a/srclib/pcre/doc/pgrep.1
+++ /dev/null
@@ -1,76 +0,0 @@
-.TH PGREP 1
-.SH NAME
-pgrep - a grep with Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B pgrep [-Vchilnsvx] pattern [file] ...
-
-
-.SH DESCRIPTION
-\fBpgrep\fR searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-\fBpcre(3)\fR for a full description of syntax and semantics.
-
-If no files are specified, \fBpgrep\fR reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how \fBpgrep\fR behaves.
-
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in \fB<stdio.h>\fR.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-
-
-.SH OPTIONS
-.TP 10
-\fB-V\fR
-Write the version number of the PCRE library being used to the standard error
-stream.
-.TP
-\fB-c\fR
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-.TP
-\fB-h\fR
-Suppress printing of filenames when searching multiple files.
-.TP
-\fB-i\fR
-Ignore upper/lower case distinctions during comparisons.
-.TP
-\fB-l\fR
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-.TP
-\fB-n\fR
-Precede each line by its line number in the file.
-.TP
-\fB-s\fR
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-.TP
-\fB-v\fR
-Invert the sense of the match, so that lines which do \fInot\fR match the
-pattern are now the ones that are found.
-.TP
-\fB-x\fR
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-
-
-.SH SEE ALSO
-\fBpcre(3)\fR, Perl 5 documentation
-
-
-.SH DIAGNOSTICS
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pgrep.html b/srclib/pcre/doc/pgrep.html
deleted file mode 100644
index 54efed6785..0000000000
--- a/srclib/pcre/doc/pgrep.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pgrep specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pgrep specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">OPTIONS</A>
-<LI><A NAME="TOC5" HREF="#SEC5">SEE ALSO</A>
-<LI><A NAME="TOC6" HREF="#SEC6">DIAGNOSTICS</A>
-<LI><A NAME="TOC7" HREF="#SEC7">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pgrep - a grep with Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>pgrep [-Vchilnsvx] pattern [file] ...</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-<B>pgrep</B> searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-<B>pcre(3)</B> for a full description of syntax and semantics.
-</P>
-<P>
-If no files are specified, <B>pgrep</B> reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how <B>pgrep</B> behaves.
-</P>
-<P>
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in <B>&#60;stdio.h&#62;</B>.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">OPTIONS</A>
-<P>
-<B>-V</B>
-Write the version number of the PCRE library being used to the standard error
-stream.
-</P>
-<P>
-<B>-c</B>
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-</P>
-<P>
-<B>-h</B>
-Suppress printing of filenames when searching multiple files.
-</P>
-<P>
-<B>-i</B>
-Ignore upper/lower case distinctions during comparisons.
-</P>
-<P>
-<B>-l</B>
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-</P>
-<P>
-<B>-n</B>
-Precede each line by its line number in the file.
-</P>
-<P>
-<B>-s</B>
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-</P>
-<P>
-<B>-v</B>
-Invert the sense of the match, so that lines which do <I>not</I> match the
-pattern are now the ones that are found.
-</P>
-<P>
-<B>-x</B>
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">SEE ALSO</A>
-<P>
-<B>pcre(3)</B>, Perl 5 documentation
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">DIAGNOSTICS</A>
-<P>
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pgrep.txt b/srclib/pcre/doc/pgrep.txt
deleted file mode 100644
index bcd08c0aab..0000000000
--- a/srclib/pcre/doc/pgrep.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-NAME
- pgrep - a grep with Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
- pgrep [-Vchilnsvx] pattern [file] ...
-
-
-
-DESCRIPTION
- pgrep searches files for character patterns, in the same way
- as other grep commands do, but it uses the PCRE regular
- expression library to support patterns that are compatible
- with the regular expressions of Perl 5. See pcre(3) for a
- full description of syntax and semantics.
-
- If no files are specified, pgrep reads the standard input.
- By default, each line that matches the pattern is copied to
- the standard output, and if there is more than one file, the
- file name is printed before each line of output. However,
- there are options that can change how pgrep behaves.
-
- Lines are limited to BUFSIZ characters. BUFSIZ is defined in
- <stdio.h>. The newline character is removed from the end of
- each line before it is matched against the pattern.
-
-
-
-OPTIONS
- -V Write the version number of the PCRE library being
- used to the standard error stream.
-
- -c Do not print individual lines; instead just print
- a count of the number of lines that would other-
- wise have been printed. If several files are
- given, a count is printed for each of them.
-
- -h Suppress printing of filenames when searching mul-
- tiple files.
-
- -i Ignore upper/lower case distinctions during com-
- parisons.
-
- -l Instead of printing lines from the files, just
- print the names of the files containing lines that
- would have been printed. Each file name is printed
- once, on a separate line.
-
- -n Precede each line by its line number in the file.
-
- -s Work silently, that is, display nothing except
- error messages. The exit status indicates whether
- any matches were found.
-
- -v Invert the sense of the match, so that lines which
- do not match the pattern are now the ones that are
- found.
-
- -x Force the pattern to be anchored (it must start
- matching at the beginning of the line) and in
- addition, require it to match the entire line.
- This is equivalent to having ^ and $ characters at
- the start and end of each alternative branch in
- the regular expression.
-
-
-
-SEE ALSO
- pcre(3), Perl 5 documentation
-
-
-
-
-
-DIAGNOSTICS
- Exit status is 0 if any matches were found, 1 if no matches
- were found, and 2 for syntax errors or inacessible files
- (even if matches were found).
-
-
-
-AUTHOR
- Philip Hazel <ph10@cam.ac.uk>
- Copyright (c) 1997-1999 University of Cambridge.
-
diff --git a/srclib/pcre/get.c b/srclib/pcre/get.c
deleted file mode 100644
index 55e736dc24..0000000000
--- a/srclib/pcre/get.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This module contains some convenience functions for extracting substrings
-from the subject string after a regex match has succeeded. The original idea
-for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-* Copy captured string to given buffer *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer.
-Note that we use memcpy() rather than strncpy() in case there are binary zeros
-in the string.
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringnumber the number of the required substring
- buffer where to put the substring
- size the size of the buffer
-
-Returns: if successful:
- the length of the copied string, not including the zero
- that is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) buffer too small
- PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_substring(const char *subject, int *ovector, int stringcount,
- int stringnumber, char *buffer, int size)
-{
-int yield;
-if (stringnumber < 0 || stringnumber >= stringcount)
- return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
-memcpy(buffer, subject + ovector[stringnumber], yield);
-buffer[yield] = 0;
-return yield;
-}
-
-
-
-/*************************************************
-* Copy all captured strings to new store *
-*************************************************/
-
-/* This function gets one chunk of store and builds a list of pointers and all
-of the captured substrings in it. A NULL pointer is put on the end of the list.
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- listptr set to point to the list of pointers
-
-Returns: if successful: 0
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) failed to get store
-*/
-
-int
-pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
- const char ***listptr)
-{
-int i;
-int size = sizeof(char *);
-int double_count = stringcount * 2;
-char **stringlist;
-char *p;
-
-for (i = 0; i < double_count; i += 2)
- size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
-
-stringlist = (char **)(pcre_malloc)(size);
-if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
-
-*listptr = (const char **)stringlist;
-p = (char *)(stringlist + stringcount + 1);
-
-for (i = 0; i < double_count; i += 2)
- {
- int len = ovector[i+1] - ovector[i];
- memcpy(p, subject + ovector[i], len);
- *stringlist++ = p;
- p += len;
- *p++ = 0;
- }
-
-*stringlist = NULL;
-return 0;
-}
-
-
-
-/*************************************************
-* Free store obtained by get_substring_list *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument: the result of a previous pcre_get_substring_list()
-Returns: nothing
-*/
-
-void
-pcre_free_substring_list(const char **pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-
-
-/*************************************************
-* Copy captured string to new store *
-*************************************************/
-
-/* This function copies a single captured substring into a piece of new
-store
-
-Arguments:
- subject the subject string that was matched
- ovector pointer to the offsets table
- stringcount the number of substrings that were captured
- (i.e. the yield of the pcre_exec call, unless
- that was zero, in which case it should be 1/3
- of the offset table size)
- stringnumber the number of the required substring
- stringptr where to put a pointer to the substring
-
-Returns: if successful:
- the length of the string, not including the zero that
- is put on the end; can be zero
- if not successful:
- PCRE_ERROR_NOMEMORY (-6) failed to get store
- PCRE_ERROR_NOSUBSTRING (-7) substring not present
-*/
-
-int
-pcre_get_substring(const char *subject, int *ovector, int stringcount,
- int stringnumber, const char **stringptr)
-{
-int yield;
-char *substring;
-if (stringnumber < 0 || stringnumber >= stringcount)
- return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-substring = (char *)(pcre_malloc)(yield + 1);
-if (substring == NULL) return PCRE_ERROR_NOMEMORY;
-memcpy(substring, subject + ovector[stringnumber], yield);
-substring[yield] = 0;
-*stringptr = substring;
-return yield;
-}
-
-
-
-/*************************************************
-* Free store obtained by get_substring *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument: the result of a previous pcre_get_substring()
-Returns: nothing
-*/
-
-void
-pcre_free_substring(const char *pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-/* End of get.c */
diff --git a/srclib/pcre/install-sh b/srclib/pcre/install-sh
deleted file mode 100755
index e9de23842d..0000000000
--- a/srclib/pcre/install-sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- chmodcmd=""
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/srclib/pcre/internal.h b/srclib/pcre/internal.h
deleted file mode 100644
index 0c8c1c9df6..0000000000
--- a/srclib/pcre/internal.h
+++ /dev/null
@@ -1,412 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-
-/* This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This header contains definitions that are shared between the different
-modules, but which are not relevant to the outside. */
-
-/* Get the definitions provided by running "configure" */
-
-#include "config.h"
-
-/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
-define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
-is set. Otherwise, include an emulating function for those systems that have
-neither (there some non-Unix environments where this is the case). This assumes
-that all calls to memmove are moving strings upwards in store, which is the
-case in PCRE. */
-
-#if ! HAVE_MEMMOVE
-#undef memmove /* some systems may have a macro */
-#if HAVE_BCOPY
-#define memmove(a, b, c) bcopy(b, a, c)
-#else
-void *
-pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)
-{
-int i;
-dest += n;
-src += n;
-for (i = 0; i < n; ++i) *(--dest) = *(--src);
-}
-#define memmove(a, b, c) pcre_memmove(a, b, c)
-#endif
-#endif
-
-/* Standard C headers plus the external interface definition */
-
-#include <ctype.h>
-#include <limits.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "pcre.h"
-
-/* In case there is no definition of offsetof() provided - though any proper
-Standard C system should have one. */
-
-#ifndef offsetof
-#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
-#endif
-
-/* These are the public options that can change during matching. */
-
-#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
-
-/* Private options flags start at the most significant end of the four bytes,
-but skip the top bit so we can use ints for convenience without getting tangled
-with negative values. The public options defined in pcre.h start at the least
-significant end. Make sure they don't overlap, though now that we have expanded
-to four bytes there is plenty of space. */
-
-#define PCRE_FIRSTSET 0x40000000 /* first_char is set */
-#define PCRE_REQCHSET 0x20000000 /* req_char is set */
-#define PCRE_STARTLINE 0x10000000 /* start after \n for multiline */
-#define PCRE_INGROUP 0x08000000 /* compiling inside a group */
-#define PCRE_ICHANGED 0x04000000 /* i option changes within regex */
-
-/* Options for the "extra" block produced by pcre_study(). */
-
-#define PCRE_STUDY_MAPPED 0x01 /* a map of starting chars exists */
-
-/* Masks for identifying the public options which are permitted at compile
-time, run time or study time, respectively. */
-
-#define PUBLIC_OPTIONS \
- (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
- PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)
-
-#define PUBLIC_EXEC_OPTIONS \
- (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
-
-#define PUBLIC_STUDY_OPTIONS 0 /* None defined */
-
-/* Magic number to provide a small check against being handed junk. */
-
-#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */
-
-/* Miscellaneous definitions */
-
-typedef int BOOL;
-
-#define FALSE 0
-#define TRUE 1
-
-/* Escape items that are just an encoding of a particular data value. Note that
-ESC_N is defined as yet another macro, which is set in config.h to either \n
-(the default) or \r (which some people want). */
-
-#ifndef ESC_E
-#define ESC_E 27
-#endif
-
-#ifndef ESC_F
-#define ESC_F '\f'
-#endif
-
-#ifndef ESC_N
-#define ESC_N NEWLINE
-#endif
-
-#ifndef ESC_R
-#define ESC_R '\r'
-#endif
-
-#ifndef ESC_T
-#define ESC_T '\t'
-#endif
-
-/* These are escaped items that aren't just an encoding of a particular data
-value such as \n. They must have non-zero values, as check_escape() returns
-their negation. Also, they must appear in the same order as in the opcode
-definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
-values are used for \1, \2, \3, etc. There is a test in the code for an escape
-greater than ESC_b and less than ESC_Z to detect the types that may be
-repeated. If any new escapes are put in-between that don't consume a character,
-that code will have to change. */
-
-enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
- ESC_Z, ESC_z, ESC_REF };
-
-/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
-that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
-OP_EOD must correspond in order to the list of escapes immediately above. */
-
-enum {
- OP_END, /* End of pattern */
-
- /* Values corresponding to backslashed metacharacters */
-
- OP_SOD, /* Start of data: \A */
- OP_NOT_WORD_BOUNDARY, /* \B */
- OP_WORD_BOUNDARY, /* \b */
- OP_NOT_DIGIT, /* \D */
- OP_DIGIT, /* \d */
- OP_NOT_WHITESPACE, /* \S */
- OP_WHITESPACE, /* \s */
- OP_NOT_WORDCHAR, /* \W */
- OP_WORDCHAR, /* \w */
- OP_EODN, /* End of data or \n at end of data: \Z. */
- OP_EOD, /* End of data: \z */
-
- OP_OPT, /* Set runtime options */
- OP_CIRC, /* Start of line - varies with multiline switch */
- OP_DOLL, /* End of line - varies with multiline switch */
- OP_ANY, /* Match any character */
- OP_CHARS, /* Match string of characters */
- OP_NOT, /* Match anything but the following char */
-
- OP_STAR, /* The maximizing and minimizing versions of */
- OP_MINSTAR, /* all these opcodes must come in pairs, with */
- OP_PLUS, /* the minimizing one second. */
- OP_MINPLUS, /* This first set applies to single characters */
- OP_QUERY,
- OP_MINQUERY,
- OP_UPTO, /* From 0 to n matches */
- OP_MINUPTO,
- OP_EXACT, /* Exactly n matches */
-
- OP_NOTSTAR, /* The maximizing and minimizing versions of */
- OP_NOTMINSTAR, /* all these opcodes must come in pairs, with */
- OP_NOTPLUS, /* the minimizing one second. */
- OP_NOTMINPLUS, /* This first set applies to "not" single characters */
- OP_NOTQUERY,
- OP_NOTMINQUERY,
- OP_NOTUPTO, /* From 0 to n matches */
- OP_NOTMINUPTO,
- OP_NOTEXACT, /* Exactly n matches */
-
- OP_TYPESTAR, /* The maximizing and minimizing versions of */
- OP_TYPEMINSTAR, /* all these opcodes must come in pairs, with */
- OP_TYPEPLUS, /* the minimizing one second. These codes must */
- OP_TYPEMINPLUS, /* be in exactly the same order as those above. */
- OP_TYPEQUERY, /* This set applies to character types such as \d */
- OP_TYPEMINQUERY,
- OP_TYPEUPTO, /* From 0 to n matches */
- OP_TYPEMINUPTO,
- OP_TYPEEXACT, /* Exactly n matches */
-
- OP_CRSTAR, /* The maximizing and minimizing versions of */
- OP_CRMINSTAR, /* all these opcodes must come in pairs, with */
- OP_CRPLUS, /* the minimizing one second. These codes must */
- OP_CRMINPLUS, /* be in exactly the same order as those above. */
- OP_CRQUERY, /* These are for character classes and back refs */
- OP_CRMINQUERY,
- OP_CRRANGE, /* These are different to the three seta above. */
- OP_CRMINRANGE,
-
- OP_CLASS, /* Match a character class */
- OP_REF, /* Match a back reference */
- OP_RECURSE, /* Match this pattern recursively */
-
- OP_ALT, /* Start of alternation */
- OP_KET, /* End of group that doesn't have an unbounded repeat */
- OP_KETRMAX, /* These two must remain together and in this */
- OP_KETRMIN, /* order. They are for groups the repeat for ever. */
-
- /* The assertions must come before ONCE and COND */
-
- OP_ASSERT, /* Positive lookahead */
- OP_ASSERT_NOT, /* Negative lookahead */
- OP_ASSERTBACK, /* Positive lookbehind */
- OP_ASSERTBACK_NOT, /* Negative lookbehind */
- OP_REVERSE, /* Move pointer back - used in lookbehind assertions */
-
- /* ONCE and COND must come after the assertions, with ONCE first, as there's
- a test for >= ONCE for a subpattern that isn't an assertion. */
-
- OP_ONCE, /* Once matched, don't back up into the subpattern */
- OP_COND, /* Conditional group */
- OP_CREF, /* Used to hold an extraction string number (cond ref) */
-
- OP_BRAZERO, /* These two must remain together and in this */
- OP_BRAMINZERO, /* order. */
-
- OP_BRANUMBER, /* Used for extracting brackets whose number is greater
- than can fit into an opcode. */
-
- OP_BRA /* This and greater values are used for brackets that
- extract substrings up to a basic limit. After that,
- use is made of OP_BRANUMBER. */
-};
-
-/* The highest extraction number before we have to start using additional
-bytes. (Originally PCRE didn't have support for extraction counts highter than
-this number.) The value is limited by the number of opcodes left after OP_BRA,
-i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
-opcodes. */
-
-#define EXTRACT_BASIC_MAX 150
-
-/* The texts of compile-time error messages are defined as macros here so that
-they can be accessed by the POSIX wrapper and converted into error codes. Yes,
-I could have used error codes in the first place, but didn't feel like changing
-just to accommodate the POSIX wrapper. */
-
-#define ERR1 "\\ at end of pattern"
-#define ERR2 "\\c at end of pattern"
-#define ERR3 "unrecognized character follows \\"
-#define ERR4 "numbers out of order in {} quantifier"
-#define ERR5 "number too big in {} quantifier"
-#define ERR6 "missing terminating ] for character class"
-#define ERR7 "invalid escape sequence in character class"
-#define ERR8 "range out of order in character class"
-#define ERR9 "nothing to repeat"
-#define ERR10 "operand of unlimited repeat could match the empty string"
-#define ERR11 "internal error: unexpected repeat"
-#define ERR12 "unrecognized character after (?"
-#define ERR13 "unused error"
-#define ERR14 "missing )"
-#define ERR15 "back reference to non-existent subpattern"
-#define ERR16 "erroffset passed as NULL"
-#define ERR17 "unknown option bit(s) set"
-#define ERR18 "missing ) after comment"
-#define ERR19 "parentheses nested too deeply"
-#define ERR20 "regular expression too large"
-#define ERR21 "failed to get memory"
-#define ERR22 "unmatched parentheses"
-#define ERR23 "internal error: code overflow"
-#define ERR24 "unrecognized character after (?<"
-#define ERR25 "lookbehind assertion is not fixed length"
-#define ERR26 "malformed number after (?("
-#define ERR27 "conditional group contains more than two branches"
-#define ERR28 "assertion expected after (?("
-#define ERR29 "(?p must be followed by )"
-#define ERR30 "unknown POSIX class name"
-#define ERR31 "POSIX collating elements are not supported"
-#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
-#define ERR33 "characters with values > 255 are not yet supported in classes"
-#define ERR34 "character value in \\x{...} sequence is too large"
-#define ERR35 "invalid condition (?(0)"
-
-/* All character handling must be done as unsigned characters. Otherwise there
-are problems with top-bit-set characters and functions such as isspace().
-However, we leave the interface to the outside world as char *, because that
-should make things easier for callers. We define a short type for unsigned char
-to save lots of typing. I tried "uchar", but it causes problems on Digital
-Unix, where it is defined in sys/types, so use "uschar" instead. */
-
-typedef unsigned char uschar;
-
-/* The real format of the start of the pcre block; the actual code vector
-runs on as long as necessary after the end. */
-
-typedef struct real_pcre {
- unsigned long int magic_number;
- size_t size;
- const unsigned char *tables;
- unsigned long int options;
- unsigned short int top_bracket;
- unsigned short int top_backref;
- uschar first_char;
- uschar req_char;
- uschar code[1];
-} real_pcre;
-
-/* The real format of the extra block returned by pcre_study(). */
-
-typedef struct real_pcre_extra {
- uschar options;
- uschar start_bits[32];
-} real_pcre_extra;
-
-
-/* Structure for passing "static" information around between the functions
-doing the compiling, so that they are thread-safe. */
-
-typedef struct compile_data {
- const uschar *lcc; /* Points to lower casing table */
- const uschar *fcc; /* Points to case-flipping table */
- const uschar *cbits; /* Points to character type table */
- const uschar *ctypes; /* Points to table of type maps */
-} compile_data;
-
-/* Structure for passing "static" information around between the functions
-doing the matching, so that they are thread-safe. */
-
-typedef struct match_data {
- int errorcode; /* As it says */
- int *offset_vector; /* Offset vector */
- int offset_end; /* One past the end */
- int offset_max; /* The maximum usable for return data */
- const uschar *lcc; /* Points to lower casing table */
- const uschar *ctypes; /* Points to table of type maps */
- BOOL offset_overflow; /* Set if too many extractions */
- BOOL notbol; /* NOTBOL flag */
- BOOL noteol; /* NOTEOL flag */
- BOOL utf8; /* UTF8 flag */
- BOOL endonly; /* Dollar not before final \n */
- BOOL notempty; /* Empty string match not wanted */
- const uschar *start_pattern; /* For use when recursing */
- const uschar *start_subject; /* Start of the subject string */
- const uschar *end_subject; /* End of the subject string */
- const uschar *start_match; /* Start of this match attempt */
- const uschar *end_match_ptr; /* Subject position at end match */
- int end_offset_top; /* Highwater mark at end of match */
-} match_data;
-
-/* Bit definitions for entries in the pcre_ctypes table. */
-
-#define ctype_space 0x01
-#define ctype_letter 0x02
-#define ctype_digit 0x04
-#define ctype_xdigit 0x08
-#define ctype_word 0x10 /* alphameric or '_' */
-#define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */
-
-/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
-of bits for a class map. Some classes are built by combining these tables. */
-
-#define cbit_space 0 /* [:space:] or \s */
-#define cbit_xdigit 32 /* [:xdigit:] */
-#define cbit_digit 64 /* [:digit:] or \d */
-#define cbit_upper 96 /* [:upper:] */
-#define cbit_lower 128 /* [:lower:] */
-#define cbit_word 160 /* [:word:] or \w */
-#define cbit_graph 192 /* [:graph:] */
-#define cbit_print 224 /* [:print:] */
-#define cbit_punct 256 /* [:punct:] */
-#define cbit_cntrl 288 /* [:cntrl:] */
-#define cbit_length 320 /* Length of the cbits table */
-
-/* Offsets of the various tables from the base tables pointer, and
-total length. */
-
-#define lcc_offset 0
-#define fcc_offset 256
-#define cbits_offset 512
-#define ctypes_offset (cbits_offset + cbit_length)
-#define tables_length (ctypes_offset + 256)
-
-/* End of internal.h */
diff --git a/srclib/pcre/ltconfig b/srclib/pcre/ltconfig
deleted file mode 100755
index a01334f921..0000000000
--- a/srclib/pcre/ltconfig
+++ /dev/null
@@ -1,3078 +0,0 @@
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-echo=echo
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell.
- exec "$SHELL" "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# Find the correct PATH separator. Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
- UNAME=${UNAME-`uname 2>/dev/null`}
- case X$UNAME in
- *-DOS) PATH_SEPARATOR=';' ;;
- *) PATH_SEPARATOR=':' ;;
- esac
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if (echo_test_string="`eval $cmd`") 2>/dev/null &&
- echo_test_string="`eval $cmd`" &&
- (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
- break
- fi
- done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
- test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH /usr/ucb; do
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- echo="$dir/echo"
- break
- fi
- done
- IFS="$save_ifs"
-
- if test "X$echo" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
- test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- echo='print -r'
- elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running ltconfig again with it.
- ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- echo='printf "%s\n"'
- if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- # Cool, printf works
- :
- elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- echo="$CONFIG_SHELL $0 --fallback-echo"
- elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
- test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
- echo="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- echo=echo
- fi
- fi
- fi
- fi
-fi
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# The name of this program.
-progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-enable_static=yes
-enable_fast_install=yes
-enable_dlopen=unknown
-enable_win32_dll=no
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-nonopt=
-ofile="$default_ofile"
-verify_host=yes
-with_gcc=no
-with_gnu_ld=no
-need_locks=yes
-ac_ext=c
-objext=o
-libext=a
-exeext=
-cache_file=
-
-old_AR="$AR"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_LIBS="$LIBS"
-old_NM="$NM"
-old_RANLIB="$RANLIB"
-old_DLLTOOL="$DLLTOOL"
-old_OBJDUMP="$OBJDUMP"
-old_AS="$AS"
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
- case "$option" in
- -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- eval "$prev=\$option"
- prev=
- continue
- fi
-
- case "$option" in
- --help) cat <<EOM
-Usage: $progname [OPTION]... [HOST [LTMAIN]]
-
-Generate a system-specific libtool script.
-
- --debug enable verbose shell tracing
- --disable-shared do not build shared libraries
- --disable-static do not build static libraries
- --disable-fast-install do not optimize for fast installation
- --enable-dlopen enable dlopen support
- --enable-win32-dll enable building dlls on win32 hosts
- --help display this help and exit
- --no-verify do not verify that HOST is a valid host type
--o, --output=FILE specify the output file [default=$default_ofile]
- --quiet same as \`--silent'
- --silent do not print informational messages
- --srcdir=DIR find \`config.guess' in DIR
- --version output version information and exit
- --with-gcc assume that the GNU C compiler will be used
- --with-gnu-ld assume that the C compiler uses the GNU linker
- --disable-lock disable file locking
- --cache-file=FILE configure cache file
-
-LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
-that provides basic libtool functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
- exit 0
- ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --disable-shared) enable_shared=no ;;
-
- --disable-static) enable_static=no ;;
-
- --disable-fast-install) enable_fast_install=no ;;
-
- --enable-dlopen) enable_dlopen=yes ;;
-
- --enable-win32-dll) enable_win32_dll=yes ;;
-
- --quiet | --silent) silent=yes ;;
-
- --srcdir) prev=srcdir ;;
- --srcdir=*) srcdir="$optarg" ;;
-
- --no-verify) verify_host=no ;;
-
- --output | -o) prev=ofile ;;
- --output=*) ofile="$optarg" ;;
-
- --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
-
- --with-gcc) with_gcc=yes ;;
- --with-gnu-ld) with_gnu_ld=yes ;;
-
- --disable-lock) need_locks=no ;;
-
- --cache-file=*) cache_file="$optarg" ;;
-
- -*)
- echo "$progname: unrecognized option \`$option'" 1>&2
- echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- if test -z "$ltmain"; then
- ltmain="$option"
- elif test -z "$host"; then
-# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-# echo "$progname: warning \`$option' is not a valid host type" 1>&2
-# fi
- host="$option"
- else
- echo "$progname: too many arguments" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
-done
-
-if test -z "$ltmain"; then
- echo "$progname: you must specify a LTMAIN file" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-if test ! -f "$ltmain"; then
- echo "$progname: \`$ltmain' does not exist" 1>&2
- echo "$help" 1>&2
- exit 1
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
- case "$arg" in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ltconfig_args="$ltconfig_args '$arg'" ;;
- *) ltconfig_args="$ltconfig_args $arg" ;;
- esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
-if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi
-
-if test -n "$cache_file" && test -r "$cache_file"; then
- echo "loading cache $cache_file within ltconfig"
- . $cache_file
-fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
- # Assume the source directory is the same one as the path to LTMAIN.
- srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
- test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-trap "$rm conftest*; exit 1" 1 2 15
-if test "$verify_host" = yes; then
- # Check for config.guess and config.sub.
- ac_aux_dir=
- for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/config.guess; then
- ac_aux_dir=$ac_dir
- break
- fi
- done
- if test -z "$ac_aux_dir"; then
- echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
- echo "$help" 1>&2
- exit 1
- fi
- ac_config_guess=$ac_aux_dir/config.guess
- ac_config_sub=$ac_aux_dir/config.sub
-
- # Make sure we can run config.sub.
- if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
- else
- echo "$progname: cannot run $ac_config_sub" 1>&2
- echo "$help" 1>&2
- exit 1
- fi
-
- echo $ac_n "checking host system type""... $ac_c" 1>&6
-
- host_alias=$host
- case "$host_alias" in
- "")
- if host_alias=`$SHELL $ac_config_guess`; then :
- else
- echo "$progname: cannot guess host type; you must specify one" 1>&2
- echo "$help" 1>&2
- exit 1
- fi ;;
- esac
- host=`$SHELL $ac_config_sub $host_alias`
- echo "$ac_t$host" 1>&6
-
- # Make sure the host verified.
- test -z "$host" && exit 1
-
-elif test -z "$host"; then
- echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
- echo "$help" 1>&2
- exit 1
-else
- host_alias=$host
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$host_os" in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-case "$host_os" in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR cru $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-# Set a sane default for `AR'.
-test -z "$AR" && AR=ar
-
-# Set a sane default for `OBJDUMP'.
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-# If RANLIB is not set, then run the test.
-if test "${RANLIB+set}" != "set"; then
- result=no
-
- echo $ac_n "checking for ranlib... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
- RANLIB="ranlib"
- result="ranlib"
- break
- fi
- done
- IFS="$save_ifs"
-
- echo "$ac_t$result" 1>&6
-fi
-
-if test -n "$RANLIB"; then
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-fi
-
-# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$AS" && AS=as
-
-# Check to see if we are using GCC.
-if test "$with_gcc" != yes || test -z "$CC"; then
- # If CC is not set, then try to find GCC or a usable CC.
- if test -z "$CC"; then
- echo $ac_n "checking for gcc... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
- CC="gcc"
- break
- fi
- done
- IFS="$save_ifs"
-
- if test -n "$CC"; then
- echo "$ac_t$CC" 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
- fi
-
- # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
- if test -z "$CC"; then
- echo $ac_n "checking for cc... $ac_c" 1>&6
- IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- cc_rejected=no
- for dir in $PATH; do
- test -z "$dir" && dir=.
- if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
- if test "$dir/cc" = "/usr/ucb/cc"; then
- cc_rejected=yes
- continue
- fi
- CC="cc"
- break
- fi
- done
- IFS="$save_ifs"
- if test $cc_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same name, so the bogon will be chosen
- # first if we set CC to just the name; use the full file name.
- shift
- set dummy "$dir/cc" "$@"
- shift
- CC="$@"
- fi
- fi
-
- if test -n "$CC"; then
- echo "$ac_t$CC" 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-
- if test -z "$CC"; then
- echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
- exit 1
- fi
- fi
-
- # Now see if the compiler is really GCC.
- with_gcc=no
- echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
- echo "$progname:581: checking whether we are using GNU C" >&5
-
- $rm conftest.c
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
- if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- with_gcc=yes
- fi
- $rm conftest.c
- echo "$ac_t$with_gcc" 1>&6
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo $ac_n "checking for object suffix... $ac_c" 1>&6
-$rm conftest*
-echo 'int i = 1;' > conftest.c
-echo "$progname:603: checking for object suffix" >& 5
-if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- for ac_file in conftest.*; do
- case $ac_file in
- *.c) ;;
- *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
- esac
- done
-else
- cat conftest.err 1>&5
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
-fi
-$rm conftest*
-echo "$ac_t$objext" 1>&6
-
-echo $ac_n "checking for executable suffix... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_cv_exeext="no"
- $rm conftest*
- echo 'main () { return 0; }' > conftest.c
- echo "$progname:629: checking for executable suffix" >& 5
- if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- for ac_file in conftest.*; do
- case $ac_file in
- *.c | *.err | *.$objext ) ;;
- *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
- esac
- done
- else
- cat conftest.err 1>&5
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
- fi
- $rm conftest*
-fi
-if test "X$ac_cv_exeext" = Xno; then
- exeext=""
-else
- exeext="$ac_cv_exeext"
-fi
-echo "$ac_t$ac_cv_exeext" 1>&6
-
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-pic_flag=
-special_shlib_compile_flags=
-wl=
-link_static_flag=
-no_builtin_flag=
-
-if test "$with_gcc" = yes; then
- wl='-Wl,'
- link_static_flag='-static'
-
- case "$host_os" in
- beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- aix*)
- # Below there is a dirty hack to force normal static linking with -ldl
- # The problem is because libdl dynamically linked with both libc and
- # libC (AIX C++ library), which obviously doesn't included in libraries
- # list by gcc. This cause undefined symbols with -static flags.
- # This hack allows C programs to be linked with "-static -ldl", but
- # we not sure about C++ programs.
- link_static_flag="$link_static_flag ${wl}-lC"
- ;;
- cygwin* | mingw* | os2*)
- # We can build DLLs from non-PIC.
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- pic_flag='-m68020 -resident32 -malways-restore-a4'
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- pic_flag=-Kconform_pic
- fi
- ;;
- *)
- pic_flag='-fPIC'
- ;;
- esac
-else
- # PORTME Check for PIC flags for the system compiler.
- case "$host_os" in
- aix3* | aix4*)
- # All AIX code is PIC.
- link_static_flag='-bnso -bI:/lib/syscalls.exp'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- # Is there a better link_static_flag that works with the bundled CC?
- wl='-Wl,'
- link_static_flag="${wl}-a ${wl}archive"
- pic_flag='+Z'
- ;;
-
- irix5* | irix6*)
- wl='-Wl,'
- link_static_flag='-non_shared'
- # PIC (with -KPIC) is the default.
- ;;
-
- cygwin* | mingw* | os2*)
- # We can build DLLs from non-PIC.
- ;;
-
- osf3* | osf4* | osf5*)
- # All OSF/1 code is PIC.
- wl='-Wl,'
- link_static_flag='-non_shared'
- ;;
-
- sco3.2v5*)
- pic_flag='-Kpic'
- link_static_flag='-dn'
- special_shlib_compile_flags='-belf'
- ;;
-
- solaris*)
- pic_flag='-KPIC'
- link_static_flag='-Bstatic'
- wl='-Wl,'
- ;;
-
- sunos4*)
- pic_flag='-PIC'
- link_static_flag='-Bstatic'
- wl='-Qoption ld '
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- pic_flag='-KPIC'
- link_static_flag='-Bstatic'
- wl='-Wl,'
- ;;
-
- uts4*)
- pic_flag='-pic'
- link_static_flag='-Bstatic'
- ;;
- sysv4*MP*)
- if test -d /usr/nec ;then
- pic_flag='-Kconform_pic'
- link_static_flag='-Bstatic'
- fi
- ;;
- *)
- can_build_shared=no
- ;;
- esac
-fi
-
-if test -n "$pic_flag"; then
- echo "$ac_t$pic_flag" 1>&6
-
- # Check to make sure the pic_flag actually works.
- echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $pic_flag -DPIC"
- echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
- if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
- # Append any warnings to the config.log.
- cat conftest.err 1>&5
-
- case "$host_os" in
- hpux9* | hpux10* | hpux11*)
- # On HP-UX, both CC and GCC only warn that PIC is supported... then they
- # create non-PIC objects. So, if there were any warnings, we assume that
- # PIC is not supported.
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- can_build_shared=no
- pic_flag=
- else
- echo "$ac_t"yes 1>&6
- pic_flag=" $pic_flag"
- fi
- ;;
- *)
- echo "$ac_t"yes 1>&6
- pic_flag=" $pic_flag"
- ;;
- esac
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- can_build_shared=no
- pic_flag=
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-else
- echo "$ac_t"none 1>&6
-fi
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-$rm conftest*
-echo "int some_variable = 0;" > conftest.c
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory. Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.o"
-echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
-if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_c_o=no
- else
- echo "$ac_t"yes 1>&6
- compiler_c_o=yes
- fi
-else
- # Append any errors to the config.log.
- cat out/conftest.err 1>&5
- compiler_c_o=no
- echo "$ac_t"no 1>&6
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-
-if test x"$compiler_c_o" = x"yes"; then
- # Check to see if we can write to a .lo
- echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -c -o conftest.lo"
- echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
-if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_o_lo=no
- else
- echo "$ac_t"yes 1>&6
- compiler_o_lo=yes
- fi
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- compiler_o_lo=no
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-else
- compiler_o_lo=no
-fi
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
- # do not overwrite the value of need_locks provided by the user
- echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
- hard_links=yes
- $rm conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- echo "$ac_t$hard_links" 1>&6
- $rm conftest*
- if test "$hard_links" = no; then
- echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-if test "$with_gcc" = yes; then
- # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
- echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
- $rm conftest*
- echo "int some_variable = 0;" > conftest.c
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
- echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
- if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
-
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- echo "$ac_t"no 1>&6
- compiler_rtti_exceptions=no
- else
- echo "$ac_t"yes 1>&6
- compiler_rtti_exceptions=yes
- fi
- else
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- compiler_rtti_exceptions=no
- echo "$ac_t"no 1>&6
- fi
- CFLAGS="$save_CFLAGS"
- $rm conftest*
-
- if test "$compiler_rtti_exceptions" = "yes"; then
- no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
- else
- no_builtin_flag=' -fno-builtin'
- fi
-
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$special_shlib_compile_flags"; then
- echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
- if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then :
- else
- echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
- can_build_shared=no
- fi
-fi
-
-echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
-$rm conftest*
-echo 'main(){return(0);}' > conftest.c
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS $link_static_flag"
-echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
-if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- echo "$ac_t$link_static_flag" 1>&6
-else
- echo "$ac_t"none 1>&6
- link_static_flag=
-fi
-LDFLAGS="$save_LDFLAGS"
-$rm conftest*
-
-if test -z "$LN_S"; then
- # Check to see if we can use ln -s, or we need hard links.
- echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
- $rm conftest.dat
- if ln -s X conftest.dat 2>/dev/null; then
- $rm conftest.dat
- LN_S="ln -s"
- else
- LN_S=ln
- fi
- if test "$LN_S" = "ln -s"; then
- echo "$ac_t"yes 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-fi
-
-# Make sure LD is an absolute path.
-if test -z "$LD"; then
- ac_prog=ld
- if test "$with_gcc" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
- echo "$progname:991: checking for ld used by GCC" >&5
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
- # Accept absolute paths.
- [\\/]* | [A-Za-z]:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we are not using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
- elif test "$with_gnu_ld" = yes; then
- echo $ac_n "checking for GNU ld... $ac_c" 1>&6
- echo "$progname:1015: checking for GNU ld" >&5
- else
- echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
- echo "$progname:1018: checking for non-GNU ld" >&5
- fi
-
- if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
- fi
-
- if test -n "$LD"; then
- echo "$ac_t$LD" 1>&6
- else
- echo "$ac_t"no 1>&6
- fi
-
- if test -z "$LD"; then
- echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
- exit 1
- fi
-fi
-
-# Check to see if it really is or is not GNU ld.
-echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
-# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-echo "$ac_t$with_gnu_ld" 1>&6
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced. Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-
-case "$host_os" in
-cygwin* | mingw*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$with_gcc" != yes; then
- with_gnu_ld=no
- fi
- ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # See if GNU ld supports shared libraries.
- case "$host_os" in
- aix3* | aix4*)
- # On AIX, the GNU linker is very broken
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- ;;
-
- amigaos*)
- archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=yes
-
- # Extract the symbol export list from an `--export-all' def file,
- # then regenerate the def file from the symbol export list, so that
- # the compiled dll only exports the symbol export list.
- export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
- test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
- $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~
- sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
-
- archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
- _lt_hint=1;
- for symbol in `cat $export_symbols`; do
- echo " \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
- _lt_hint=`expr 1 + \$_lt_hint`;
- done~
- test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
- test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
- $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
- $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
- $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
-
- old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a'
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
- # can we support soname and/or expsyms with a.out? -oliva
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = yes; then
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- case $host_os in
- cygwin* | mingw*)
- # dlltool doesn't understand --whole-archive et. al.
- whole_archive_flag_spec=
- ;;
- *)
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- ;;
- esac
- fi
-else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case "$host_os" in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$with_gcc" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix4*)
- hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
- hardcode_libdir_separator=':'
- if test "$with_gcc" = yes; then
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- shared_flag='-shared'
- else
- shared_flag='${wl}-bM:SRE'
- hardcode_direct=yes
- fi
- allow_undefined_flag=' ${wl}-berok'
- archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
- archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
- case "$host_os" in aix4.[01]|aix4.[01].*)
- # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
- always_export_symbols=yes ;;
- esac
- ;;
-
- amigaos*)
- archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- cygwin* | mingw*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib /OUT:$oldlib$oldobjs'
- fix_srcfile_path='`cygpath -w $srcfile`'
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9* | hpux10* | hpux11*)
- case "$host_os" in
- hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
- *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
- esac
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_minus_L=yes # Not in the search PATH, but as the default
- # location of the library.
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- irix5* | irix6*)
- if test "$with_gcc" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF
- fi
- hardcode_libdir_flag_spec='${wl}-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # As osf3* with the addition of the -msym flag
- if test "$with_gcc" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ;;
-
- solaris*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case "$host_os" in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *) # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv5*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
- hardcode_libdir_flag_spec=
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
- hardcode_direct=yes
- hardcode_minus_L=no
- hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- unixware7*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-fi
-echo "$ac_t$ld_shlibs" 1>&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-if test -z "$NM"; then
- echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
- case "$NM" in
- [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
- for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the `sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- NM="$ac_dir/nm -B"
- break
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- NM="$ac_dir/nm -p"
- break
- else
- NM=${NM="$ac_dir/nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- fi
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$NM" && NM=nm
- ;;
- esac
- echo "$ac_t$NM" 1>&6
-fi
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Define system-specific variables.
-case "$host_os" in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
- ;;
-irix*)
- symcode='[BCDEGRST]'
- ;;
-solaris*)
- symcode='[BDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
- symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Write the raw and C identifiers.
- global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
- $rm conftest*
- cat > conftest.c <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
- echo "$progname:1635: checking if global_symbol_pipe works" >&5
- if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
-
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if egrep ' nm_test_var$' "$nlist" >/dev/null; then
- if egrep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.c
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
- # Now generate the symbol file.
- eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
-
- cat <<EOF >> conftest.c
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
- sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
- cat <<\EOF >> conftest.c
- {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$objext conftstm.$objext
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$objext"
- CFLAGS="$CFLAGS$no_builtin_flag"
- if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
- pipe_works=yes
- else
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
- fi
- LIBS="$save_LIBS"
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.c >&5
- fi
- $rm conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- global_symbol_pipe=
- fi
-done
-if test "$pipe_works" = yes; then
- echo "${ac_t}ok" 1>&6
-else
- echo "${ac_t}failed" 1>&6
-fi
-
-if test -z "$global_symbol_pipe"; then
- global_symbol_to_cdecl=
-fi
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var"; then
-
- # We can hardcode non-existant directories.
- if test "$hardcode_direct" != no &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test "$hardcode_shlibpath_var" != no &&
- test "$hardcode_minus_L" != no; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-echo "$ac_t$hardcode_action" 1>&6
-
-
-reload_flag=
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
-# PORTME Some linkers may need a different reload flag.
-reload_flag='-r'
-echo "$ac_t$reload_flag" 1>&6
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-file_magic_cmd=
-file_magic_test_file=
-deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [regex]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case "$host_os" in
-aix3*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}.so$major'
- ;;
-
-aix4*)
- version_type=linux
- # AIX has no versioning support, so currently we can not hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- # We preserve .a as extension for shared libraries though AIX4.2
- # and later linker supports .so
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
- shlibpath_var=LIBPATH
- deplibs_check_method=pass_all
- ;;
-
-amigaos*)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
- ;;
-
-beos*)
- library_names_spec='${libname}.so'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- deplibs_check_method=pass_all
- lt_cv_dlopen="load_add_on"
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
-bsdi4*)
- version_type=linux
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/shlib/libc.so
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- export_dynamic_flag_spec=-rdynamic
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw*)
- version_type=windows
- need_version=no
- need_lib_prefix=no
- if test "$with_gcc" = yes; then
- library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
- else
- library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
- fi
- dynamic_linker='Win32 ld.exe'
- deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- file_magic_cmd='${OBJDUMP} -f'
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- lt_cv_dlopen="LoadLibrary"
- lt_cv_dlopen_libs=
- ;;
-
-freebsd1*)
- dynamic_linker=no
- ;;
-
-freebsd*)
- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case "$version_type" in
- freebsd-elf*)
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /usr/lib/libc.so*`
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- deplibs_check_method=unknown
- library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case "$host_os" in
- freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- ;;
- *) # from 3.2 on
- shlibpath_overrides_runpath=no
- ;;
- esac
- ;;
-
-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- dynamic_linker="$host_os dld.sl"
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
- soname_spec='${libname}${release}.sl$major'
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
- postinstall_cmds='chmod 555 $lib'
- ;;
-
-irix5* | irix6*)
- version_type=irix
- need_lib_prefix=no
- need_version=no
- soname_spec='${libname}${release}.so.$major'
- library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
- case "$host_os" in
- irix5*)
- libsuff= shlibsuff=
- # this will be overridden with pass_all, but let us keep it just in case
- deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
- ;;
- *)
- case "$LD" in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
- sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /lib${libsuff}/libc.so*`
- deplibs_check_method='pass_all'
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
- dynamic_linker=no
- ;;
-
-# This must be Linux ELF.
-linux-gnu*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-
- if test -f /lib/ld.so.1; then
- dynamic_linker='GNU ld.so'
- else
- # Only the GNU ld.so supports shared libraries on MkLinux.
- case "$host_cpu" in
- powerpc*) dynamic_linker=no ;;
- *) dynamic_linker='Linux ld.so' ;;
- esac
- fi
- ;;
-
-netbsd*)
- version_type=sunos
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
- soname_spec='${libname}${release}.so$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-openbsd*)
- version_type=sunos
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- need_version=no
- fi
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-os2*)
- libname_spec='$name'
- need_lib_prefix=no
- library_names_spec='$libname.dll $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_version=no
- soname_spec='${libname}${release}.so'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- # this will be overridden with pass_all, but let us keep it just in case
- deplibs_check_method='file_magic COFF format alpha shared library'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/shlib/libc.so
- deplibs_check_method='pass_all'
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
- ;;
-
-sco3.2v5*)
- version_type=osf
- soname_spec='${libname}${release}.so$major'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-solaris*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=/lib/libc.so
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test "$with_gnu_ld" = yes; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- case "$host_vendor" in
- ncr)
- deplibs_check_method='pass_all'
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- file_magic_cmd=/usr/bin/file
- file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- esac
- ;;
-
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec ;then
- version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- soname_spec='$libname.so.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-echo "$ac_t$dynamic_linker" 1>&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Report the final consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
-# configure.in, otherwise build static only libraries.
-case "$host_os" in
-cygwin* | mingw* | os2*)
- if test x$can_build_shared = xyes; then
- test x$enable_win32_dll = xno && can_build_shared=no
- echo "checking if package supports dlls... $can_build_shared" 1>&6
- fi
-;;
-esac
-
-if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
- case "$deplibs_check_method" in
- "file_magic "*)
- file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- egrep "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
- fi ;;
- esac
-fi
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
-aix4*)
- test "$enable_shared" = yes && enable_static=no
- ;;
-esac
-
-echo "$ac_t$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-echo $ac_n "checking for objdir... $ac_c" 1>&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$ac_t$objdir" 1>&6
-
-if test "x$enable_dlopen" != xyes; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
-if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
- lt_cv_dlopen=no lt_cv_dlopen_libs=
-echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2212: checking for dlopen in -ldl" >&5
-ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2220 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2252: checking for dlopen" >&5
-if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2257 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char dlopen(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-dlopen();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_dlopen=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_dlopen=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dlopen"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2299: checking for dld_link in -ldld" >&5
-ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2307 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link();
-
-int main() {
-dld_link()
-; return 0; }
-EOF
-if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2339: checking for shl_load" >&5
-if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2344 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char shl_load(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-shl_load();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_shl_load=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_shl_load=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="shl_load"
-else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2387: checking for shl_load in -ldld" >&5
-ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldld $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2395 "ltconfig"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-shl_load()
-; return 0; }
-EOF
-if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-fi
-
- if test "x$lt_cv_dlopen" != xno; then
- enable_dlopen=yes
- fi
-
- case "$lt_cv_dlopen" in
- dlopen)
-for ac_hdr in dlfcn.h; do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2452: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2457 "ltconfig"
-#include <$ac_hdr>
-int fnord = 0;
-EOF
-ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
- if test "x$ac_cv_header_dlfcn_h" = xyes; then
- CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
- fi
- eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2490: checking whether a program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self+set}" = set; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- lt_cv_dlopen_self=cross
- else
- cat > conftest.c <<EOF
-#line 2498 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LTDL_GLOBAL DL_GLOBAL
-# else
-# define LTDL_GLOBAL 0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LTDL_LAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LTDL_LAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LTDL_LAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LTDL_LAZY_OR_NOW DL_NOW
-# else
-# define LTDL_LAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
- if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
-
-EOF
-if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- lt_cv_dlopen_self=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- lt_cv_dlopen_self=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self" 1>&6
-
- if test "$lt_cv_dlopen_self" = yes; then
- LDFLAGS="$LDFLAGS $link_static_flag"
- echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self_static+set}" = set; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- lt_cv_dlopen_self_static=cross
- else
- cat > conftest.c <<EOF
-#line 2571 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LTDL_GLOBAL DL_GLOBAL
-# else
-# define LTDL_GLOBAL 0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LTDL_LAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LTDL_LAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LTDL_LAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LTDL_LAZY_OR_NOW DL_NOW
-# else
-# define LTDL_LAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
- if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
-
-EOF
-if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
- lt_cv_dlopen_self_static=yes
-else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- lt_cv_dlopen_self_static=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
-fi
- ;;
- esac
-
- case "$lt_cv_dlopen_self" in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case "$lt_cv_dlopen_self_static" in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-# Copy echo and quote the copy, instead of the original, because it is
-# used later.
-ltecho="$echo"
-if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- ltecho="$CONFIG_SHELL \$0 --fallback-echo"
-fi
-LTSHELL="$SHELL"
-
-LTCONFIG_VERSION="$VERSION"
-
-# Only quote variables if we're using ltmain.sh.
-case "$ltmain" in
-*.sh)
- # Now quote all the things that may contain metacharacters.
- for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
- old_LD old_LDFLAGS old_LIBS \
- old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
- AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
- reload_flag reload_cmds wl \
- pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
- thread_safe_flag_spec whole_archive_flag_spec libname_spec \
- library_names_spec soname_spec \
- RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
- old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
- file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
- finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
- hardcode_libdir_flag_spec hardcode_libdir_separator \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
-
- case "$var" in
- reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
- esac
- done
-
- case "$ltecho" in
- *'\$0 --fallback-echo"')
- ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
- ;;
- esac
-
- trap "$rm \"$ofile\"; exit 1" 1 2 15
- echo "creating $ofile"
- $rm "$ofile"
- cat <<EOF > "$ofile"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-### BEGIN LIBTOOL CONFIG
-EOF
- cfgfile="$ofile"
- ;;
-
-*)
- # Double-quote the variables that need it (for aesthetics).
- for var in old_CC old_CFLAGS old_CPPFLAGS \
- old_LD old_LDFLAGS old_LIBS \
- old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
- eval "$var=\\\"\$var\\\""
- done
-
- # Just create a config file.
- cfgfile="$ofile.cfg"
- trap "$rm \"$cfgfile\"; exit 1" 1 2 15
- echo "creating $cfgfile"
- $rm "$cfgfile"
- cat <<EOF > "$cfgfile"
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-EOF
- ;;
-esac
-
-cat <<EOF >> "$cfgfile"
-# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
-# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
-# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
-# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
-# $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION=$LTCONFIG_VERSION
-
-# Shell to use when invoking shell scripts.
-SHELL=$LTSHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$ltecho
-
-# The archiver.
-AR=$AR
-
-# The default C compiler.
-CC=$CC
-
-# The linker used to build libraries.
-LD=$LD
-
-# Whether we need hard or soft links.
-LN_S=$LN_S
-
-# A BSD-compatible nm program.
-NM=$NM
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$reload_flag
-reload_cmds=$reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$wl
-
-# Object file suffix (normally "o").
-objext="$objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$pic_flag
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$RANLIB
-old_archive_cmds=$old_archive_cmds
-old_postinstall_cmds=$old_postinstall_cmds
-old_postuninstall_cmds=$old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$old_archive_from_new_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$archive_cmds
-archive_expsym_cmds=$archive_expsym_cmds
-postinstall_cmds=$postinstall_cmds
-postuninstall_cmds=$postuninstall_cmds
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$global_symbol_to_cdecl
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$include_expsyms
-
-EOF
-
-case "$ltmain" in
-*.sh)
- echo '### END LIBTOOL CONFIG' >> "$ofile"
- echo >> "$ofile"
- case "$host_os" in
- aix3*)
- cat <<\EOF >> "$ofile"
-
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-EOF
- ;;
- esac
-
- # Append the ltmain.sh script.
- sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
-
- chmod +x "$ofile"
- ;;
-
-*)
- # Compile the libtool program.
- echo "FIXME: would compile $ltmain"
- ;;
-esac
-
-test -n "$cache_file" || exit 0
-
-# AC_CACHE_SAVE
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/srclib/pcre/ltmain.sh b/srclib/pcre/ltmain.sh
deleted file mode 100644
index 5959c479b0..0000000000
--- a/srclib/pcre/ltmain.sh
+++ /dev/null
@@ -1,4946 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
- # Yippee, $echo works!
- :
-else
- # Restart under the correct shell, and then maybe $echo will work.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit 0
-fi
-
-# The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.4
-TIMESTAMP=" (1.920 2001/04/24 23:26:18)"
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-SP2NL='tr \040 \012'
-NL2SP='tr \015\012 \040\040'
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
- save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
- save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- echo "$modename: not configured to build any kind of library" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-
-# Parse our command line options once, thoroughly.
-while test $# -gt 0
-do
- arg="$1"
- shift
-
- case $arg in
- -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- execute_dlfiles)
- execute_dlfiles="$execute_dlfiles $arg"
- ;;
- *)
- eval "$prev=\$arg"
- ;;
- esac
-
- prev=
- prevopt=
- continue
- fi
-
- # Have we seen a non-optional argument yet?
- case $arg in
- --help)
- show_help=yes
- ;;
-
- --version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
- exit 0
- ;;
-
- --config)
- sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
- exit 0
- ;;
-
- --debug)
- echo "$progname: enabling shell trace mode"
- set -x
- ;;
-
- --dry-run | -n)
- run=:
- ;;
-
- --features)
- echo "host: $host"
- if test "$build_libtool_libs" = yes; then
- echo "enable shared libraries"
- else
- echo "disable shared libraries"
- fi
- if test "$build_old_libs" = yes; then
- echo "enable static libraries"
- else
- echo "disable static libraries"
- fi
- exit 0
- ;;
-
- --finish) mode="finish" ;;
-
- --mode) prevopt="--mode" prev=mode ;;
- --mode=*) mode="$optarg" ;;
-
- --quiet | --silent)
- show=:
- ;;
-
- -dlopen)
- prevopt="-dlopen"
- prev=execute_dlfiles
- ;;
-
- -*)
- $echo "$modename: unrecognized option \`$arg'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-
- *)
- nonopt="$arg"
- break
- ;;
- esac
-done
-
-if test -n "$prevopt"; then
- $echo "$modename: option \`$prevopt' requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
-fi
-
-if test -z "$show_help"; then
-
- # Infer the operation mode.
- if test -z "$mode"; then
- case $nonopt in
- *cc | *++ | gcc* | *-gcc*)
- mode=link
- for arg
- do
- case $arg in
- -c)
- mode=compile
- break
- ;;
- esac
- done
- ;;
- *db | *dbx | *strace | *truss)
- mode=execute
- ;;
- *install*|cp|mv)
- mode=install
- ;;
- *rm)
- mode=uninstall
- ;;
- *)
- # If we have no mode, but dlfiles were specified, then do execute mode.
- test -n "$execute_dlfiles" && mode=execute
-
- # Just use the default operation mode.
- if test -z "$mode"; then
- if test -n "$nonopt"; then
- $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
- else
- $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
- fi
- fi
- ;;
- esac
- fi
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$mode" != execute; then
- $echo "$modename: unrecognized option \`-dlopen'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Change the help message to a mode-specific one.
- generic_help="$help"
- help="Try \`$modename --help --mode=$mode' for more information."
-
- # These modes are in order of execution frequency so that they run quickly.
- case $mode in
- # libtool compile mode
- compile)
- modename="$modename: compile"
- # Get the compilation command and the source file.
- base_compile=
- prev=
- lastarg=
- srcfile="$nonopt"
- suppress_output=
-
- user_target=no
- for arg
- do
- case $prev in
- "") ;;
- xcompiler)
- # Aesthetically quote the previous argument.
- prev=
- lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-
- case $arg in
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
-
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- continue
- ;;
- esac
-
- # Accept any command-line options.
- case $arg in
- -o)
- if test "$user_target" != "no"; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit 1
- fi
- user_target=next
- ;;
-
- -static)
- build_old_libs=yes
- continue
- ;;
-
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
-
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
- lastarg=
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=','
- for arg in $args; do
- IFS="$save_ifs"
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- lastarg="$lastarg $arg"
- done
- IFS="$save_ifs"
- lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
- # Add the arguments to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- continue
- ;;
- esac
-
- case $user_target in
- next)
- # The next one is the -o target name
- user_target=yes
- continue
- ;;
- yes)
- # We got the output file
- user_target=set
- libobj="$arg"
- continue
- ;;
- esac
-
- # Accept the current argument as the source file.
- lastarg="$srcfile"
- srcfile="$arg"
-
- # Aesthetically quote the previous argument.
-
- # Backslashify any backslashes, double quotes, and dollar signs.
- # These are the only characters that are still specially
- # interpreted inside of double-quoted scrings.
- lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
- # Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- case $lastarg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- lastarg="\"$lastarg\""
- ;;
- esac
-
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- done
-
- case $user_target in
- set)
- ;;
- no)
- # Get the name of the library object.
- libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
- ;;
- *)
- $echo "$modename: you must specify a target with \`-o'" 1>&2
- exit 1
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSfmso]'
- case $libobj in
- *.ada) xform=ada ;;
- *.adb) xform=adb ;;
- *.ads) xform=ads ;;
- *.asm) xform=asm ;;
- *.c++) xform=c++ ;;
- *.cc) xform=cc ;;
- *.cpp) xform=cpp ;;
- *.cxx) xform=cxx ;;
- *.f90) xform=f90 ;;
- *.for) xform=for ;;
- esac
-
- libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
- case $libobj in
- *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
- *)
- $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
- exit 1
- ;;
- esac
-
- if test -z "$base_compile"; then
- $echo "$modename: you must specify a compilation command" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Delete any leftover library objects.
- if test "$build_old_libs" = yes; then
- removelist="$obj $libobj"
- else
- removelist="$libobj"
- fi
-
- $run $rm $removelist
- trap "$run $rm $removelist; exit 1" 1 2 15
-
- # On Cygwin there's no "real" PIC flag so we must build both object types
- case $host_os in
- cygwin* | mingw* | pw32* | os2*)
- pic_mode=default
- ;;
- esac
- if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
- # non-PIC code in shared libraries is not supported
- pic_mode=default
- fi
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
- lockfile="$output_obj.lock"
- removelist="$removelist $output_obj $lockfile"
- trap "$run $rm $removelist; exit 1" 1 2 15
- else
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test "$need_locks" = yes; then
- until $run ln "$0" "$lockfile" 2>/dev/null; do
- $show "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test "$need_locks" = warn; then
- if test -f "$lockfile"; then
- echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
- echo $srcfile > "$lockfile"
- fi
-
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
-
- # Only build a PIC object if we are building libtool libraries.
- if test "$build_libtool_libs" = yes; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- if test "$pic_mode" != no; then
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
- else
- # Don't build PIC code
- command="$base_compile $srcfile"
- fi
- if test "$build_old_libs" = yes; then
- lo_libobj="$libobj"
- dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$libobj"; then
- dir="$objdir"
- else
- dir="$dir/$objdir"
- fi
- libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-
- if test -d "$dir"; then
- $show "$rm $libobj"
- $run $rm $libobj
- else
- $show "$mkdir $dir"
- $run $mkdir $dir
- status=$?
- if test $status -ne 0 && test ! -d $dir; then
- exit $status
- fi
- fi
- fi
- if test "$compiler_o_lo" = yes; then
- output_obj="$libobj"
- command="$command -o $output_obj"
- elif test "$compiler_c_o" = yes; then
- output_obj="$obj"
- command="$command -o $output_obj"
- fi
-
- $run $rm "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- test -n "$output_obj" && $run $rm $removelist
- exit 1
- fi
-
- if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test x"$output_obj" != x"$libobj"; then
- $show "$mv $output_obj $libobj"
- if $run $mv $output_obj $libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # If we have no pic_flag, then copy the object into place and finish.
- if (test -z "$pic_flag" || test "$pic_mode" != default) &&
- test "$build_old_libs" = yes; then
- # Rename the .lo from within objdir to obj
- if test -f $obj; then
- $show $rm $obj
- $run $rm $obj
- fi
-
- $show "$mv $libobj $obj"
- if $run $mv $libobj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
-
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
- libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- # Now arrange that obj and lo_libobj become the same file
- $show "(cd $xdir && $LN_S $baseobj $libobj)"
- if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
- exit 0
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Allow error messages only from the first compilation.
- suppress_output=' >/dev/null 2>&1'
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test "$build_old_libs" = yes; then
- if test "$pic_mode" != yes; then
- # Don't build PIC code
- command="$base_compile $srcfile"
- else
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
- fi
- if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
- output_obj="$obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
- $run $rm "$output_obj"
- $show "$command"
- if $run eval "$command"; then :
- else
- $run $rm $removelist
- exit 1
- fi
-
- if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $run $rm $removelist
- exit 1
- fi
-
- # Just move the object if needed
- if test x"$output_obj" != x"$obj"; then
- $show "$mv $output_obj $obj"
- if $run $mv $output_obj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
-
- # Create an invalid libtool object if no PIC, so that we do not
- # accidentally link it into a program.
- if test "$build_libtool_libs" != yes; then
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > \$libobj" || exit $?
- else
- # Move the .lo from within objdir
- $show "$mv $libobj $lo_libobj"
- if $run $mv $libobj $lo_libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
- fi
-
- # Unlock the critical section if it was locked
- if test "$need_locks" != no; then
- $run $rm "$lockfile"
- fi
-
- exit 0
- ;;
-
- # libtool link mode
- link | relink)
- modename="$modename: link"
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # which system we are compiling for in order to pass an extra
- # flag for every libtool invokation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll which has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- libtool_args="$nonopt"
- compile_command="$nonopt"
- finalize_command="$nonopt"
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- old_deplibs=
- compiler_flags=
- linker_flags=
- dllsearchpath=
- lib_search_path=`pwd`
-
- avoid_version=no
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- ltlibs=
- module=no
- no_install=no
- objs=
- prefer_static_libs=no
- preload=no
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case $arg in
- -all-static | -static)
- if test "X$arg" = "X-all-static"; then
- if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
- $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- else
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- fi
- build_libtool_libs=no
- build_old_libs=yes
- prefer_static_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test $# -gt 0; do
- arg="$1"
- shift
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
- ;;
- *) qarg=$arg ;;
- esac
- libtool_args="$libtool_args $qarg"
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- output)
- compile_command="$compile_command @OUTPUT@"
- finalize_command="$finalize_command @OUTPUT@"
- ;;
- esac
-
- case $prev in
- dlfiles|dlprefiles)
- if test "$preload" = no; then
- # Add the symbol object into the linking commands.
- compile_command="$compile_command @SYMFILE@"
- finalize_command="$finalize_command @SYMFILE@"
- preload=yes
- fi
- case $arg in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test "$dlself" = no; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test "$prev" = dlprefiles; then
- dlself=yes
- elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- else
- dlprefiles="$dlprefiles $arg"
- fi
- prev=
- continue
- ;;
- esac
- ;;
- expsyms)
- export_symbols="$arg"
- if test ! -f "$arg"; then
- $echo "$modename: symbol file \`$arg' does not exist"
- exit 1
- fi
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex="$arg"
- prev=
- continue
- ;;
- release)
- release="-$arg"
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case $arg in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
- ;;
- esac
- if test "$prev" = rpath; then
- case "$rpath " in
- *" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- xcompiler)
- compiler_flags="$compiler_flags $qarg"
- prev=
- compile_command="$compile_command $qarg"
- finalize_command="$finalize_command $qarg"
- continue
- ;;
- xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
- prev=
- compile_command="$compile_command $wl$qarg"
- finalize_command="$finalize_command $wl$qarg"
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi # test -n $prev
-
- prevarg="$arg"
-
- case $arg in
- -all-static)
- if test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
- continue
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: more than one -exported-symbols argument is not allowed"
- exit 1
- fi
- if test "X$arg" = "X-export-symbols"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
- # so, if we see these flags be careful not to treat them like -L
- -L[A-Z][A-Z]*:*)
- case $with_gcc/$host in
- no/*-*-irix*)
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- ;;
- esac
- continue
- ;;
-
- -L*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
- exit 1
- fi
- dir="$absdir"
- ;;
- esac
- case "$deplibs " in
- *" -L$dir "*) ;;
- *)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dir";;
- esac
- ;;
- esac
- continue
- ;;
-
- -l*)
- if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
- case $host in
- *-*-cygwin* | *-*-pw32* | *-*-beos*)
- # These systems don't actually have a C or math library (as such)
- continue
- ;;
- *-*-mingw* | *-*-os2*)
- # These systems don't actually have a C library (as such)
- test "X$arg" = "X-lc" && continue
- ;;
- esac
- fi
- deplibs="$deplibs $arg"
- continue
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- -no-fast-install)
- fast_install=no
- continue
- ;;
-
- -no-install)
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- # The PATH hackery in wrapper scripts is required on Windows
- # in order for the loader to find any dlls it needs.
- $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
- $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
- fast_install=no
- ;;
- *) no_install=yes ;;
- esac
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -o) prev=output ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- $echo "$modename: only absolute run-paths are allowed" 1>&2
- exit 1
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- continue
- ;;
-
- -static)
- # The effects of -static are defined in a previous loop.
- # We used to do the same as -all-static on platforms that
- # didn't have a PIC flag, but the assumption that the effects
- # would be equivalent was wrong. It would break on at least
- # Digital Unix and AIX.
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
-
- -Wc,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
- arg=
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Wl,*)
- args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
- arg=
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=','
- for flag in $args; do
- IFS="$save_ifs"
- case $flag in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- flag="\"$flag\""
- ;;
- esac
- arg="$arg $wl$flag"
- compiler_flags="$compiler_flags $wl$flag"
- linker_flags="$linker_flags $flag"
- done
- IFS="$save_ifs"
- arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Xlinker)
- prev=xlinker
- continue
- ;;
-
- # Some other compiler flag.
- -* | +*)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- ;;
-
- *.lo | *.$objext)
- # A library or standard object.
- if test "$prev" = dlfiles; then
- # This file was specified with -dlopen.
- if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $arg"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
- prev=
- else
- case $arg in
- *.lo) libobjs="$libobjs $arg" ;;
- *) objs="$objs $arg" ;;
- esac
- fi
- ;;
-
- *.$libext)
- # An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- if test "$prev" = dlfiles; then
- # This library was specified with -dlopen.
- dlfiles="$dlfiles $arg"
- prev=
- elif test "$prev" = dlprefiles; then
- # The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
- prev=
- else
- deplibs="$deplibs $arg"
- fi
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac # arg
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
- done # argument parsing loop
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- shlib_search_path=
- fi
- eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
- # Create the object directory.
- if test ! -d $output_objdir; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
-
- # Determine the type of output
- case $output in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- *.$libext) linkmode=oldlib ;;
- *.lo | *.$objext) linkmode=obj ;;
- *.la) linkmode=lib ;;
- *) linkmode=prog ;; # Anything else should be a program.
- esac
-
- specialdeplibs=
- libs=
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
- case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- libs="$libs $deplib"
- done
- deplibs=
- newdependency_libs=
- newlib_search_path=
- need_relink=no # whether we're linking any uninstalled libtool libraries
- notinst_deplibs= # not-installed libtool libraries
- notinst_path= # paths that contain not-installed libtool libraries
- case $linkmode in
- lib)
- passes="conv link"
- for file in $dlfiles $dlprefiles; do
- case $file in
- *.la) ;;
- *)
- $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
- exit 1
- ;;
- esac
- done
- ;;
- prog)
- compile_deplibs=
- finalize_deplibs=
- alldeplibs=no
- newdlfiles=
- newdlprefiles=
- passes="conv scan dlopen dlpreopen link"
- ;;
- *) passes="conv"
- ;;
- esac
- for pass in $passes; do
- if test $linkmode = prog; then
- # Determine which files to process
- case $pass in
- dlopen)
- libs="$dlfiles"
- save_deplibs="$deplibs" # Collect dlpreopened libraries
- deplibs=
- ;;
- dlpreopen) libs="$dlprefiles" ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- esac
- fi
- for deplib in $libs; do
- lib=
- found=no
- case $deplib in
- -l*)
- if test $linkmode = oldlib && test $linkmode = obj; then
- $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
- continue
- fi
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
- for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
- # Search the libtool library
- lib="$searchdir/lib${name}.la"
- if test -f "$lib"; then
- found=yes
- break
- fi
- done
- if test "$found" != yes; then
- # deplib doesn't seem to be a libtool library
- if test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- ;; # -l
- -L*)
- case $linkmode in
- lib)
- deplibs="$deplib $deplibs"
- test $pass = conv && continue
- newdependency_libs="$deplib $newdependency_libs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- ;;
- prog)
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- if test $pass = scan; then
- deplibs="$deplib $deplibs"
- newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- ;;
- *)
- $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
- ;;
- esac # linkmode
- continue
- ;; # -L
- -R*)
- if test $pass = link; then
- dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
- *.la) lib="$deplib" ;;
- *.$libext)
- if test $pass = conv; then
- deplibs="$deplib $deplibs"
- continue
- fi
- case $linkmode in
- lib)
- if test "$deplibs_check_method" != pass_all; then
- echo
- echo "*** Warning: This library needs some functionality provided by $deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- else
- echo
- echo "*** Warning: Linking the shared library $output against the"
- echo "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- fi
- continue
- ;;
- prog)
- if test $pass != link; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- continue
- ;;
- esac # linkmode
- ;; # *.$libext
- *.lo | *.$objext)
- if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- newdlprefiles="$newdlprefiles $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- newdlfiles="$newdlfiles $deplib"
- fi
- continue
- ;;
- %DEPLIBS%)
- alldeplibs=yes
- continue
- ;;
- esac # case $deplib
- if test $found = yes || test -f "$lib"; then :
- else
- $echo "$modename: cannot find the library \`$lib'" 1>&2
- exit 1
- fi
-
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
-
- ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$ladir" = "X$lib" && ladir="."
-
- dlname=
- dlopen=
- dlpreopen=
- libdir=
- library_names=
- old_library=
- # If the library was installed with an old release of libtool,
- # it will not redefine variable installed.
- installed=yes
-
- # Read the .la file
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
-
- if test "$linkmode,$pass" = "lib,link" ||
- test "$linkmode,$pass" = "prog,scan" ||
- { test $linkmode = oldlib && test $linkmode = obj; }; then
- # Add dl[pre]opened files of deplib
- test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
- fi
-
- if test $pass = conv; then
- # Only check for convenience libraries
- deplibs="$lib $deplibs"
- if test -z "$libdir"; then
- if test -z "$old_library"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit 1
- fi
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- tmp_libs="$tmp_libs $deplib"
- done
- elif test $linkmode != prog && test $linkmode != lib; then
- $echo "$modename: \`$lib' is not a convenience library" 1>&2
- exit 1
- fi
- continue
- fi # $pass = conv
-
- # Get the name of the library we link against.
- linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
- if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
- exit 1
- fi
-
- # This library was specified with -dlopen.
- if test $pass = dlopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
- exit 1
- fi
- if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload.
- dlprefiles="$dlprefiles $lib"
- else
- newdlfiles="$newdlfiles $lib"
- fi
- continue
- fi # $pass = dlopen
-
- # We need an absolute path.
- case $ladir in
- [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
- *)
- abs_ladir=`cd "$ladir" && pwd`
- if test -z "$abs_ladir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- abs_ladir="$ladir"
- fi
- ;;
- esac
- laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
- # Find the relevant object directory and library name.
- if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- $echo "$modename: warning: library \`$lib' was moved." 1>&2
- dir="$ladir"
- absdir="$abs_ladir"
- libdir="$abs_ladir"
- else
- dir="$libdir"
- absdir="$libdir"
- fi
- else
- dir="$ladir/$objdir"
- absdir="$abs_ladir/$objdir"
- # Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
- fi # $installed = yes
- name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
- # This library was specified with -dlpreopen.
- if test $pass = dlpreopen; then
- if test -z "$libdir"; then
- $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
- exit 1
- fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$newdlprefiles $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
- fi
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
- # Link the convenience library
- if test $linkmode = lib; then
- deplibs="$dir/$old_library $deplibs"
- elif test "$linkmode,$pass" = "prog,link"; then
- compile_deplibs="$dir/$old_library $compile_deplibs"
- finalize_deplibs="$dir/$old_library $finalize_deplibs"
- else
- deplibs="$lib $deplibs"
- fi
- continue
- fi
-
- if test $linkmode = prog && test $pass != link; then
- newlib_search_path="$newlib_search_path $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=no
- if test "$link_all_deplibs" != no || test -z "$library_names" ||
- test "$build_libtool_libs" = no; then
- linkalldeplibs=yes
- fi
-
- tmp_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
- esac
- # Need to link against all dependency_libs?
- if test $linkalldeplibs = yes; then
- deplibs="$deplib $deplibs"
- else
- # Need to hardcode shared library paths
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- tmp_libs="$tmp_libs $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-
- link_static=no # Whether the deplib will be linked statically
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- # Link against this shared library
-
- if test "$linkmode,$pass" = "prog,link" ||
- { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
- esac
- ;;
- esac
- if test $linkmode = prog; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *" $absdir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
- fi
- fi
- fi # $linkmode,$pass = prog,link...
-
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
-
- if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
- fi
-
- if test -n "$old_archive_from_expsyms_cmds"; then
- # figure out the soname
- set dummy $library_names
- realname="$2"
- shift; shift
- libname=`eval \\$echo \"$libname_spec\"`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname="$dlname"
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
- *cygwin*)
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
- esac
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
-
- # Make a new name for the extract_expsyms_cmds to use
- soroot="$soname"
- soname=`echo $soroot | sed -e 's/^.*\///'`
- newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
-
- # If the library has no export list, then create one now
- if test -f "$output_objdir/$soname-def"; then :
- else
- $show "extracting exported symbol list from \`$soname'"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- eval cmds=\"$extract_expsyms_cmds\"
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Create $newlib
- if test -f "$output_objdir/$newlib"; then :; else
- $show "generating import library for \`$soname'"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- eval cmds=\"$old_archive_from_expsyms_cmds\"
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
- # make sure the library variables are pointing to the new library
- dir=$output_objdir
- linklib=$newlib
- fi # test -n $old_archive_from_expsyms_cmds
-
- if test $linkmode = prog || test "$mode" != relink; then
- add_shlibpath=
- add_dir=
- add=
- lib_linked=yes
- case $hardcode_action in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = no; then
- case $host in
- *-*-sunos*) add_shlibpath="$dir" ;;
- esac
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- relink)
- if test "$hardcode_direct" = yes; then
- add="$dir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- add_shlibpath="$dir"
- add="-l$name"
- else
- lib_linked=no
- fi
- ;;
- *) lib_linked=no ;;
- esac
-
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit 1
- fi
-
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
- esac
- fi
- if test $linkmode = prog; then
- test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- test -n "$add" && compile_deplibs="$add $compile_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- if test "$hardcode_direct" != yes && \
- test "$hardcode_minus_L" != yes && \
- test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- fi
- fi
- fi
-
- if test $linkmode = prog || test "$mode" = relink; then
- add_shlibpath=
- add_dir=
- add=
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- add="$libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$libdir"
- add="-l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
- esac
- add="-l$name"
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- add_dir="-L$libdir"
- add="-l$name"
- fi
-
- if test $linkmode = prog; then
- test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- fi
- fi
- elif test $linkmode = prog; then
- if test "$alldeplibs" = yes &&
- { test "$deplibs_check_method" = pass_all ||
- { test "$build_libtool_libs" = yes &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
-
- # Try to link the static library
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test "$hardcode_direct" != unsupported; then
- test -n "$old_library" && linklib="$old_library"
- compile_deplibs="$dir/$linklib $compile_deplibs"
- finalize_deplibs="$dir/$linklib $finalize_deplibs"
- else
- compile_deplibs="-l$name -L$dir $compile_deplibs"
- finalize_deplibs="-l$name -L$dir $finalize_deplibs"
- fi
- elif test "$build_libtool_libs" = yes; then
- # Not a shared library
- if test "$deplibs_check_method" != pass_all; then
- # We're trying link a shared library against a static one
- # but the system doesn't support it.
-
- # Just print a warning and add the library to dependency_libs so
- # that the program can be linked against the static library.
- echo
- echo "*** Warning: This library needs some functionality provided by $lib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- if test "$module" = yes; then
- echo "*** Therefore, libtool will create a static module, that should work "
- echo "*** as long as the dlopening application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- else
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
- deplibs="$dir/$old_library $deplibs"
- link_static=yes
- fi
- fi # link shared/static library?
-
- if test $linkmode = lib; then
- if test -n "$dependency_libs" &&
- { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
- test $link_static = yes; }; then
- # Extract -R from dependency_libs
- temp_deplibs=
- for libdir in $dependency_libs; do
- case $libdir in
- -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- newlib_search_path="$newlib_search_path $absdir"
- # Link against this library
- test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
- case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
- esac
- tmp_libs="$tmp_libs $deplib"
- done
-
- if test $link_all_deplibs != no; then
- # Add the search paths of all dependency libraries
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) path="$deplib" ;;
- *.la)
- dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$deplib" && dir="."
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- absdir="$dir"
- fi
- ;;
- esac
- if grep "^installed=no" $deplib > /dev/null; then
- path="-L$absdir/$objdir"
- else
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- if test "$absdir" != "$libdir"; then
- $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
- fi
- path="-L$absdir"
- fi
- ;;
- *) continue ;;
- esac
- case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$deplibs $path" ;;
- esac
- done
- fi # link_all_deplibs != no
- fi # linkmode = lib
- done # for deplib in $libs
- if test $pass = dlpreopen; then
- # Link the dlpreopened libraries before other libraries
- for deplib in $save_deplibs; do
- deplibs="$deplib $deplibs"
- done
- fi
- if test $pass != dlopen; then
- test $pass != scan && dependency_libs="$newdependency_libs"
- if test $pass != conv; then
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
- esac
- done
- newlib_search_path=
- fi
-
- if test "$linkmode,$pass" != "prog,link"; then
- vars="deplibs"
- else
- vars="compile_deplibs finalize_deplibs"
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
- eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- *)
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- tmp_libs=
- for deplib in $new_libs; do
- case $deplib in
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
- esac
- done
- eval $var=\"$tmp_libs\"
- done # for var
- fi
- if test "$pass" = "conv" &&
- { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
- libs="$deplibs" # reset libs
- deplibs=
- fi
- done # for pass
- if test $linkmode = prog; then
- dlfiles="$newdlfiles"
- dlprefiles="$newdlprefiles"
- fi
-
- case $linkmode in
- oldlib)
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
- fi
-
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
- fi
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs="$output"
- objs="$objs$old_deplibs"
- ;;
-
- lib)
- # Make sure we only generate libraries of the form `libNAME.la'.
- case $outputname in
- lib*)
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- eval libname=\"$libname_spec\"
- ;;
- *)
- if test "$module" = no; then
- $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- if test "$need_lib_prefix" != no; then
- # Add the "lib" prefix for modules if required
- name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- eval libname=\"$libname_spec\"
- else
- libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
- fi
- ;;
- esac
-
- if test -n "$objs"; then
- if test "$deplibs_check_method" != pass_all; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
- exit 1
- else
- echo
- echo "*** Warning: Linking the shared library $output against the non-libtool"
- echo "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
- fi
- fi
-
- if test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
- fi
-
- set dummy $rpath
- if test $# -gt 2; then
- $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
- fi
- install_libdir="$2"
-
- oldlibs=
- if test -z "$rpath"; then
- if test "$build_libtool_libs" = yes; then
- # Building a libtool convenience library.
- libext=al
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
- fi
- else
-
- # Parse the version information argument.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
- set dummy $vinfo 0 0 0
- IFS="$save_ifs"
-
- if test -n "$8"; then
- $echo "$modename: too many parameters to \`-version-info'" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- current="$2"
- revision="$3"
- age="$4"
-
- # Check that each of the things are valid numbers.
- case $current in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
- *)
- $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case $revision in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
- *)
- $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- case $age in
- 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
- *)
- $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- ;;
- esac
-
- if test $age -gt $current; then
- $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
- $echo "$modename: \`$vinfo' is not valid version information" 1>&2
- exit 1
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case $version_type in
- none) ;;
-
- darwin)
- # Like Linux, but with the current version available in
- # verstring for coding it into the library header
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- # Darwin ld doesn't like 0 for these options...
- minor_current=`expr $current + 1`
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- ;;
-
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
- irix)
- major=`expr $current - $age + 1`
- verstring="sgi$major.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test $loop != 0; do
- iface=`expr $revision - $loop`
- loop=`expr $loop - 1`
- verstring="sgi$major.$iface:$verstring"
- done
-
- # Before this point, $major must not contain `.'.
- major=.$major
- versuffix="$major.$revision"
- ;;
-
- linux)
- major=.`expr $current - $age`
- versuffix="$major.$age.$revision"
- ;;
-
- osf)
- major=`expr $current - $age`
- versuffix=".$current.$age.$revision"
- verstring="$current.$age.$revision"
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test $loop != 0; do
- iface=`expr $current - $loop`
- loop=`expr $loop - 1`
- verstring="$verstring:${iface}.0"
- done
-
- # Make executables depend on our current version.
- verstring="$verstring:${current}.0"
- ;;
-
- sunos)
- major=".$current"
- versuffix=".$current.$revision"
- ;;
-
- windows)
- # Use '-' rather than '.', since we only want one
- # extension on DOS 8.3 filesystems.
- major=`expr $current - $age`
- versuffix="-$major"
- ;;
-
- *)
- $echo "$modename: unknown library version type \`$version_type'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- verstring="0.0"
- if test "$need_version" = no; then
- versuffix=
- else
- versuffix=".0.0"
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test "$avoid_version" = yes && test "$need_version" = no; then
- major=
- versuffix=
- verstring=""
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test "$allow_undefined" = yes; then
- if test "$allow_undefined_flag" = unsupported; then
- $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
- build_libtool_libs=no
- build_old_libs=yes
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag="$no_undefined_flag"
- fi
- fi
-
- if test "$mode" != relink; then
- # Remove our outputs.
- $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
- $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
- fi
-
- # Now set the variables for building old libraries.
- if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
- fi
-
- # Eliminate all temporary directories.
- for path in $notinst_path; do
- lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
- deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
- dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
- done
-
- if test -n "$xrpath"; then
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
- fi
-
- # Make sure dlfiles contains only unique files that won't be dlpreopened
- old_dlfiles="$dlfiles"
- dlfiles=
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
- esac
- done
-
- # Make sure dlprefiles contains only unique files
- old_dlprefiles="$dlprefiles"
- dlprefiles=
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
- *) dlprefiles="$dlprefiles $lib" ;;
- esac
- done
-
- if test "$build_libtool_libs" = yes; then
- if test -n "$rpath"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
- deplibs="$deplibs -framework System"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
- ;;
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test $build_libtool_need_lc = "yes"; then
- deplibs="$deplibs -lc"
- fi
- ;;
- esac
- fi
-
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=""
- versuffix=""
- major=""
- newdeplibs=
- droppeddeps=no
- case $deplibs_check_method in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behaviour.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $rm conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $rm conftest
- $CC -o conftest conftest.c $deplibs
- if test $? -eq 0 ; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- else
- # Error occured in the first compile. Let's try to salvage the situation:
- # Compile a seperate program for each library.
- for i in $deplibs; do
- name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- $rm conftest
- $CC -o conftest conftest.c $i
- # Did it work?
- if test $? -eq 0 ; then
- ldd_output=`ldd conftest`
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- droppeddeps=yes
- echo
- echo "*** Warning! Library $i is needed by this library but I was not able to"
- echo "*** make it link in! You will probably need to install it or some"
- echo "*** library that it depends on before this library will be fully"
- echo "*** functional. Installing it before continuing would be even better."
- fi
- else
- newdeplibs="$newdeplibs $i"
- fi
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method
- file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null \
- | grep " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib="$potent_lib"
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | sed 's/.* -> //'`
- case $potliblink in
- [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | sed 10q \
- | egrep "$file_magic_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- match_pattern*)
- set dummy $deplibs_check_method
- match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
- for a_deplib in $deplibs; do
- name="`expr $a_deplib : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test -n "$name" && test "$name" != "0"; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- if eval echo \"$potent_lib\" 2>/dev/null \
- | sed 10q \
- | egrep "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
- a_deplib=""
- break 2
- fi
- done
- done
- if test -n "$a_deplib" ; then
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- fi
- else
- # Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
- fi
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=""
- if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' |
- grep . >/dev/null; then
- echo
- if test "X$deplibs_check_method" = "Xnone"; then
- echo "*** Warning: inter-library dependencies are not supported in this platform."
- else
- echo "*** Warning: inter-library dependencies are not known to be supported."
- fi
- echo "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- fi
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- if test "$droppeddeps" = yes; then
- if test "$module" = yes; then
- echo
- echo "*** Warning: libtool could not satisfy all declared inter-library"
- echo "*** dependencies of module $libname. Therefore, libtool will create"
- echo "*** a static module, that should work as long as the dlopening"
- echo "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
- fi
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- echo "*** The inter-library dependencies that have been dropped here will be"
- echo "*** automatically added whenever a program is linked with this library"
- echo "*** or is declared to -dlopen it."
-
- if test $allow_undefined = no; then
- echo
- echo "*** Since this library must not contain undefined symbols,"
- echo "*** because either the platform does not support them or"
- echo "*** it was explicitly requested with -no-undefined,"
- echo "*** libtool will only create a static version of it."
- if test "$build_old_libs" = no; then
- oldlibs="$output_objdir/$libname.$libext"
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test "$build_libtool_libs" = yes; then
- if test $hardcode_into_libs = yes; then
- # Hardcode the library paths
- hardcode_libdirs=
- dep_rpath=
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- if test -n "$shlibpath"; then
- eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- realname="$2"
- shift; shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname="$realname"
- fi
- test -z "$dlname" && dlname=$soname
-
- lib="$output_objdir/$realname"
- for link
- do
- linknames="$linknames $link"
- done
-
- # Ensure that we have .o objects for linkers which dislike .lo
- # (e.g. aix) in case we are running --disable-static
- for obj in $libobjs; do
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- if test ! -f $xdir/$oldobj; then
- $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
- $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
- fi
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
- $show "generating symbol list for \`$libname.la'"
- export_symbols="$output_objdir/$libname.exp"
- $run $rm $export_symbols
- eval cmds=\"$export_symbols_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- if test -n "$export_symbols_regex"; then
- $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- $show "$mv \"${export_symbols}T\" \"$export_symbols\""
- $run eval '$mv "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
- fi
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
- fi
-
- if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- linker_flags="$linker_flags $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval cmds=\"$archive_expsym_cmds\"
- else
- eval cmds=\"$archive_cmds\"
- fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Restore the uninstalled library and exit
- if test "$mode" = relink; then
- $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
- exit 0
- fi
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test "$module" = yes || test "$export_dynamic" = yes; then
- # On all known operating systems, these are identical.
- dlname="$soname"
- fi
- fi
- ;;
-
- obj)
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
- fi
-
- if test -n "$rpath"; then
- $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
- fi
-
- if test -n "$xrpath"; then
- $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
- fi
-
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
- fi
-
- case $output in
- *.lo)
- if test -n "$objs$old_deplibs"; then
- $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
- exit 1
- fi
- libobj="$output"
- obj=`$echo "X$output" | $Xsed -e "$lo2o"`
- ;;
- *)
- libobj=
- obj="$output"
- ;;
- esac
-
- # Delete the old objects.
- $run $rm $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # reload_cmds runs $LD directly, so let us get rid of
- # -Wl from whole_archive_flag_spec
- wl=
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
- else
- gentop="$output_objdir/${obj}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- for xlib in $convenience; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
- done
- fi
- fi
-
- # Create the old-style object.
- reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
- output="$obj"
- eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit 0
- fi
-
- if test "$build_libtool_libs" != yes; then
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > $libobj" || exit $?
- exit 0
- fi
-
- if test -n "$pic_flag" || test "$pic_mode" != default; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output="$libobj"
- eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- else
- # Just create a symlink.
- $show $rm $libobj
- $run $rm $libobj
- xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$libobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- $show "(cd $xdir && $LN_S $oldobj $baseobj)"
- $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
- fi
-
- if test -n "$gentop"; then
- $show "${rm}r $gentop"
- $run ${rm}r $gentop
- fi
-
- exit 0
- ;;
-
- prog)
- case $host in
- *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
- esac
- if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
- fi
-
- if test -n "$release"; then
- $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
- fi
-
- if test "$preload" = yes; then
- if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
- test "$dlopen_self_static" = unknown; then
- $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
- fi
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
- ;;
- esac
-
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
- esac
- fi
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
- esac
- ;;
- esac
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath="$rpath"
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs="$libdir"
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir="$hardcode_libdirs"
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath="$rpath"
-
- if test -n "$libobjs" && test "$build_old_libs" = yes; then
- # Transform all the library objects into standard objects.
- compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- fi
-
- dlsyms=
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- dlsyms="${outputname}S.c"
- else
- $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
- fi
- fi
-
- if test -n "$dlsyms"; then
- case $dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist="$output_objdir/${outputname}.nm"
-
- $show "$rm $nlist ${nlist}S ${nlist}T"
- $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
- # Parse the name list into a source file.
- $show "creating $output_objdir/$dlsyms"
-
- test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test "$dlself" = yes; then
- $show "generating symbol list for \`$output'"
-
- test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- for arg in $progfiles; do
- $show "extracting global C symbols from \`$arg'"
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- if test -n "$export_symbols_regex"; then
- $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- $run eval '$mv "$nlist"T "$nlist"'
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols="$output_objdir/$output.exp"
- $run $rm $export_symbols
- $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- else
- $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
- $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
- $run eval 'mv "$nlist"T "$nlist"'
- fi
- fi
-
- for arg in $dlprefiles; do
- $show "extracting global C symbols from \`$arg'"
- name=`echo "$arg" | sed -e 's%^.*/%%'`
- $run eval 'echo ": $name " >> "$nlist"'
- $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -z "$run"; then
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $mv "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
- :
- else
- grep -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
- else
- echo '/* NONE */' >> "$output_objdir/$dlsyms"
- fi
-
- $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
- sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \
- -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \
- < "$nlist" >> "$output_objdir/$dlsyms"
-
- $echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr_t) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- fi
-
- pic_flag_for_symtable=
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
- esac;;
- *-*-hpux*)
- case "$compile_command " in
- *" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC";;
- esac
- esac
-
- # Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
- # Clean up the generated files.
- $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
- $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
- # Transform the symbol file into the correct name.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
- ;;
- *)
- $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
- exit 1
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
- fi
-
- if test $need_relink = no || test "$build_libtool_libs" != yes; then
- # Replace the output file specification.
- compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- link_command="$compile_command$compile_rpath"
-
- # We have no uninstalled library dependencies, so finalize right now.
- $show "$link_command"
- $run eval "$link_command"
- status=$?
-
- # Delete the generated files.
- if test -n "$dlsyms"; then
- $show "$rm $output_objdir/${outputname}S.${objext}"
- $run $rm "$output_objdir/${outputname}S.${objext}"
- fi
-
- exit $status
- fi
-
- if test -n "$shlibpath_var"; then
- # We should set the shlibpath_var
- rpath=
- for dir in $temp_rpath; do
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*)
- # Absolute path.
- rpath="$rpath$dir:"
- ;;
- *)
- # Relative path: add a thisdir entry.
- rpath="$rpath\$thisdir/$dir:"
- ;;
- esac
- done
- temp_rpath="$rpath"
- fi
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- rpath="$rpath$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test "$no_install" = yes; then
- # We don't need to create a wrapper script.
- link_command="$compile_var$compile_command$compile_rpath"
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
- # Delete the old output file.
- $run $rm $output
- # Link the executable and exit
- $show "$link_command"
- $run eval "$link_command" || exit $?
- exit 0
- fi
-
- if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
-
- $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
- $echo "$modename: \`$output' will be relinked during installation" 1>&2
- else
- if test "$fast_install" != no; then
- link_command="$finalize_var$compile_command$finalize_rpath"
- if test "$fast_install" = yes; then
- relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
- else
- # fast_install is set to needless
- relink_command=
- fi
- else
- link_command="$compile_var$compile_command$compile_rpath"
- relink_command="$finalize_var$finalize_command$finalize_rpath"
- fi
- fi
-
- # Replace the output file specification.
- link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- $show "$link_command"
- $run eval "$link_command" || exit $?
-
- # Now create the wrapper script.
- $show "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- relink_command="cd `pwd`; $relink_command"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Quote $echo for shipping.
- if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- case $0 in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
- *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
- esac
- qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Only actually do things if our run command is non-null.
- if test -z "$run"; then
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
- esac
- # test for cygwin because mv fails w/o .exe extensions
- case $host in
- *cygwin*) exeext=.exe ;;
- *) exeext= ;;
- esac
- $rm $output
- trap "$rm $output; exit 1" 1 2 15
-
- $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variable:
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$echo are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- echo=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$echo works!
- :
- else
- # Restart under the correct shell, and then maybe \$echo will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
-"
- $echo >> $output "\
-
- # Find the directory that this script lives in.
- thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
- done
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test "$fast_install" = yes; then
- echo >> $output "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $mkdir \"\$progdir\"
- else
- $rm \"\$progdir/\$file\"
- fi"
-
- echo >> $output "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if (eval \$relink_command); then :
- else
- $rm \"\$progdir/\$file\"
- exit 1
- fi
- fi
-
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $rm \"\$progdir/\$program\";
- $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $rm \"\$progdir/\$file\"
- fi"
- else
- echo >> $output "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- echo >> $output "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # Export our shlibpath_var if we have one.
- if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $echo >> $output "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $echo >> $output "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- $echo >> $output "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
-"
- case $host in
- # win32 systems need to use the prog path for dll
- # lookup to work
- *-*-cygwin* | *-*-pw32*)
- $echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
-"
- ;;
-
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2*)
- $echo >> $output "\
- exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
- ;;
-
- *)
- $echo >> $output "\
- # Export the path to the program.
- PATH=\"\$progdir:\$PATH\"
- export PATH
-
- exec \$program \${1+\"\$@\"}
-"
- ;;
- esac
- $echo >> $output "\
- \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
- exit 1
- fi
- else
- # The program doesn't exist.
- \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
- \$echo \"This script is just a wrapper for \$program.\" 1>&2
- echo \"See the $PACKAGE documentation for more information.\" 1>&2
- exit 1
- fi
-fi\
-"
- chmod +x $output
- fi
- exit 0
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- if test "$build_libtool_libs" = convenience; then
- oldobjs="$libobjs_save"
- addlibs="$convenience"
- build_libtool_libs=no
- else
- if test "$build_libtool_libs" = module; then
- oldobjs="$libobjs_save"
- build_libtool_libs=no
- else
- oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
- fi
- addlibs="$old_convenience"
- fi
-
- if test -n "$addlibs"; then
- gentop="$output_objdir/${outputname}x"
- $show "${rm}r $gentop"
- $run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
- status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
- exit $status
- fi
- generated="$generated $gentop"
-
- # Add in members from convenience archives.
- for xlib in $addlibs; do
- # Extract the objects.
- case $xlib in
- [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
- *) xabs=`pwd`"/$xlib" ;;
- esac
- xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
- xdir="$gentop/$xlib"
-
- $show "${rm}r $xdir"
- $run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
- status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
- exit $status
- fi
- $show "(cd $xdir && $AR x $xabs)"
- $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
- oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
- done
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
- eval cmds=\"$old_archive_from_new_cmds\"
- else
- # Ensure that we have .o objects in place in case we decided
- # not to build a shared library, and have fallen back to building
- # static libs even though --disable-static was passed!
- for oldobj in $oldobjs; do
- if test ! -f $oldobj; then
- xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$oldobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
- obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- $show "(cd $xdir && ${LN_S} $obj $baseobj)"
- $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
- fi
- done
-
- eval cmds=\"$old_archive_cmds\"
- fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$generated"; then
- $show "${rm}r$generated"
- $run ${rm}r$generated
- fi
-
- # Now create the libtool archive.
- case $output in
- *.la)
- old_library=
- test "$build_old_libs" = yes && old_library="$libname.$libext"
- $show "creating $output"
-
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
- relink_command="$var=\"$var_value\"; export $var; $relink_command"
- fi
- done
- # Quote the link command for shipping.
- relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
- relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-
- # Only create the output if not a dry run.
- if test -z "$run"; then
- for installed in no yes; do
- if test "$installed" = yes; then
- if test -z "$install_libdir"; then
- break
- fi
- output="$output_objdir/$outputname"i
- # Replace all uninstalled libtool libraries with the installed ones
- newdependency_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- *.la)
- name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- if test -z "$libdir"; then
- $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdependency_libs="$newdependency_libs $libdir/$name"
- ;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
- esac
- done
- dependency_libs="$newdependency_libs"
- newdlfiles=
- for lib in $dlfiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdlfiles="$newdlfiles $libdir/$name"
- done
- dlfiles="$newdlfiles"
- newdlprefiles=
- for lib in $dlprefiles; do
- name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
- eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- if test -z "$libdir"; then
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- exit 1
- fi
- newdlprefiles="$newdlprefiles $libdir/$name"
- done
- dlprefiles="$newdlprefiles"
- fi
- $rm $output
- # place dlname in correct position for cygwin
- tdlname=$dlname
- case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
- esac
- $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
- if test "$installed" = no && test $need_relink = yes; then
- $echo >> $output "\
-relink_command=\"$relink_command\""
- fi
- done
- fi
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
- ;;
- esac
- exit 0
- ;;
-
- # libtool install mode
- install)
- modename="$modename: install"
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
- # Allow the use of GNU shtool's install command.
- $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
- # Aesthetically quote it.
- arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$arg "
- arg="$1"
- shift
- else
- install_prog=
- arg="$nonopt"
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog$arg"
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=no
- stripme=
- for arg
- do
- if test -n "$dest"; then
- files="$files $dest"
- dest="$arg"
- continue
- fi
-
- case $arg in
- -d) isdir=yes ;;
- -f) prev="-f" ;;
- -g) prev="-g" ;;
- -m) prev="-m" ;;
- -o) prev="-o" ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*) ;;
-
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- prev=
- else
- dest="$arg"
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case $arg in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- install_prog="$install_prog $arg"
- done
-
- if test -z "$install_prog"; then
- $echo "$modename: you must specify an install program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prev' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- $echo "$modename: no file or destination specified" 1>&2
- else
- $echo "$modename: you must specify a destination" 1>&2
- fi
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Strip any trailing slash from the destination.
- dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=yes
- if test "$isdir" = yes; then
- destdir="$dest"
- destname=
- else
- destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
- test "X$destdir" = "X$dest" && destdir=.
- destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files
- if test $# -gt 2; then
- $echo "$modename: \`$dest' is not a directory" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- staticlibs="$staticlibs $file"
- ;;
-
- *.la)
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- library_names=
- old_library=
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
- esac
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
- test "X$dir" = "X$file/" && dir=
- dir="$dir$objdir"
-
- if test -n "$relink_command"; then
- $echo "$modename: warning: relinking \`$file'" 1>&2
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- continue
- fi
- fi
-
- # See the names of the shared library.
- set dummy $library_names
- if test -n "$2"; then
- realname="$2"
- shift
- shift
-
- srcname="$realname"
- test -n "$relink_command" && srcname="$realname"T
-
- # Install the shared library and build the symlinks.
- $show "$install_prog $dir/$srcname $destdir/$realname"
- $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$striplib $destdir/$realname"
- $run eval "$striplib $destdir/$realname" || exit $?
- fi
-
- if test $# -gt 0; then
- # Delete the old symlinks, and create new ones.
- for linkname
- do
- if test "$linkname" != "$realname"; then
- $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
- fi
- done
- fi
-
- # Do each command in the postinstall commands.
- lib="$destdir/$realname"
- eval cmds=\"$postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- fi
-
- # Install the pseudo-library for information purposes.
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- instname="$dir/$name"i
- $show "$install_prog $instname $destdir/$name"
- $run eval "$install_prog $instname $destdir/$name" || exit $?
-
- # Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
- ;;
- *.$objext)
- staticdest="$destfile"
- destfile=
- ;;
- *)
- $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
- esac
-
- # Install the libtool object if requested.
- if test -n "$destfile"; then
- $show "$install_prog $file $destfile"
- $run eval "$install_prog $file $destfile" || exit $?
- fi
-
- # Install the old object if enabled.
- if test "$build_old_libs" = yes; then
- # Deduce the name of the old-style object file.
- staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
- $show "$install_prog $staticobj $staticdest"
- $run eval "$install_prog \$staticobj \$staticdest" || exit $?
- fi
- exit 0
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile="$destdir/$destname"
- else
- destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- destfile="$destdir/$destfile"
- fi
-
- # Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- notinst_deplibs=
- relink_command=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Check the variables that should have been set.
- if test -z "$notinst_deplibs"; then
- $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
- exit 1
- fi
-
- finalize=yes
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- # If there is no directory component, then add one.
- case $lib in
- */* | *\\*) . $lib ;;
- *) . ./$lib ;;
- esac
- fi
- libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
- if test -n "$libdir" && test ! -f "$libfile"; then
- $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
- finalize=no
- fi
- done
-
- relink_command=
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- outputname=
- if test "$fast_install" = no && test -n "$relink_command"; then
- if test "$finalize" = yes && test -z "$run"; then
- tmpdir="/tmp"
- test -n "$TMPDIR" && tmpdir="$TMPDIR"
- tmpdir="$tmpdir/libtool-$$"
- if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
- else
- $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
- continue
- fi
- file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- outputname="$tmpdir/$file"
- # Replace the output file specification.
- relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
- $show "$relink_command"
- if $run eval "$relink_command"; then :
- else
- $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
- ${rm}r "$tmpdir"
- continue
- fi
- file="$outputname"
- else
- $echo "$modename: warning: cannot relink \`$file'" 1>&2
- fi
- else
- # Install the binary that we compiled earlier.
- file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyways
- case $install_prog,$host in
- /usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- destfile=`echo $destfile | sed -e 's,.exe$,,'`
- ;;
- esac
- ;;
- esac
- $show "$install_prog$stripme $file $destfile"
- $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
- test -n "$outputname" && ${rm}r "$tmpdir"
- ;;
- esac
- done
-
- for file in $staticlibs; do
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
- # Set up the ranlib parameters.
- oldlib="$destdir/$name"
-
- $show "$install_prog $file $oldlib"
- $run eval "$install_prog \$file \$oldlib" || exit $?
-
- if test -n "$stripme" && test -n "$striplib"; then
- $show "$old_striplib $oldlib"
- $run eval "$old_striplib $oldlib" || exit $?
- fi
-
- # Do each command in the postinstall commands.
- eval cmds=\"$old_postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
- done
- IFS="$save_ifs"
- done
-
- if test -n "$future_libdirs"; then
- $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
- fi
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec $SHELL $0 --finish$current_libdirs
- exit 1
- fi
-
- exit 0
- ;;
-
- # libtool finish mode
- finish)
- modename="$modename: finish"
- libdirs="$nonopt"
- admincmds=
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
-
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- eval cmds=\"$finish_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || admincmds="$admincmds
- $cmd"
- done
- IFS="$save_ifs"
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $run eval "$cmds" || admincmds="$admincmds
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- test "$show" = ":" && exit 0
-
- echo "----------------------------------------------------------------------"
- echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- echo " $libdir"
- done
- echo
- echo "If you ever happen to want to link against installed libraries"
- echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
- echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- echo " during execution"
- fi
- if test -n "$runpath_var"; then
- echo " - add LIBDIR to the \`$runpath_var' environment variable"
- echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- echo " - use the \`$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- echo " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
- fi
- echo
- echo "See any operating system documentation about shared libraries for"
- echo "more information, such as the ld(1) and ld.so(8) manual pages."
- echo "----------------------------------------------------------------------"
- exit 0
- ;;
-
- # libtool execute mode
- execute)
- modename="$modename: execute"
-
- # The first argument is the command name.
- cmd="$nonopt"
- if test -z "$cmd"; then
- $echo "$modename: you must specify a COMMAND" 1>&2
- $echo "$help"
- exit 1
- fi
-
- # Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
- if test ! -f "$file"; then
- $echo "$modename: \`$file' is not a file" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- dir=
- case $file in
- *.la)
- # Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
- else
- $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- # Read the libtool library.
- dlname=
- library_names=
-
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
- continue
- fi
-
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
-
- if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
- else
- $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
- exit 1
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
- ;;
-
- *)
- $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir="$absdir"
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic="$magic"
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -*) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- # If there is no directory component, then add one.
- case $file in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
- esac
-
- # Transform arg to wrapped name.
- file="$progdir/$program"
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
- args="$args \"$file\""
- done
-
- if test -z "$run"; then
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved enviroment variables
- if test "${save_LC_ALL+set}" = set; then
- LC_ALL="$save_LC_ALL"; export LC_ALL
- fi
- if test "${save_LANG+set}" = set; then
- LANG="$save_LANG"; export LANG
- fi
-
- # Now actually exec the command.
- eval "exec \$cmd$args"
-
- $echo "$modename: cannot exec \$cmd$args"
- exit 1
- else
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
- fi
- $echo "$cmd$args"
- exit 0
- fi
- ;;
-
- # libtool clean and uninstall mode
- clean | uninstall)
- modename="$modename: $mode"
- rm="$nonopt"
- files=
- rmforce=
- exit_status=0
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic="$magic"
-
- for arg
- do
- case $arg in
- -f) rm="$rm $arg"; rmforce=yes ;;
- -*) rm="$rm $arg" ;;
- *) files="$files $arg" ;;
- esac
- done
-
- if test -z "$rm"; then
- $echo "$modename: you must specify an RM program" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- rmdirs=
-
- for file in $files; do
- dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$file"; then
- dir=.
- objdir="$objdir"
- else
- objdir="$dir/$objdir"
- fi
- name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
- test $mode = uninstall && objdir="$dir"
-
- # Remember objdir for removal later, being careful to avoid duplicates
- if test $mode = clean; then
- case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
- esac
- fi
-
- # Don't error if the file doesn't exist and rm -f was used.
- if (test -L "$file") >/dev/null 2>&1 \
- || (test -h "$file") >/dev/null 2>&1 \
- || test -f "$file"; then
- :
- elif test -d "$file"; then
- exit_status=1
- continue
- elif test "$rmforce" = yes; then
- continue
- fi
-
- rmfiles="$file"
-
- case $name in
- *.la)
- # Possibly a libtool archive, so verify it.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- . $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
- done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
- test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-
- if test $mode = uninstall; then
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- eval cmds=\"$postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- if test $? != 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- eval cmds=\"$old_postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
- IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- if test $? != 0 && test "$rmforce" != yes; then
- exit_status=1
- fi
- done
- IFS="$save_ifs"
- fi
- # FIXME: should reinstall the best remaining shared library.
- fi
- fi
- ;;
-
- *.lo)
- if test "$build_old_libs" = yes; then
- oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
- rmfiles="$rmfiles $dir/$oldobj"
- fi
- ;;
-
- *)
- # Do a test to see if this is a libtool program.
- if test $mode = clean &&
- (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- relink_command=
- . $dir/$file
-
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
- if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
- fi
- fi
- ;;
- esac
- $show "$rm $rmfiles"
- $run $rm $rmfiles || exit_status=1
- done
-
- # Try to remove the ${objdir}s in the directories where we deleted files
- for dir in $rmdirs; do
- if test -d "$dir"; then
- $show "rmdir $dir"
- $run rmdir $dir >/dev/null 2>&1
- fi
- done
-
- exit $exit_status
- ;;
-
- "")
- $echo "$modename: you must specify a MODE" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
- ;;
- esac
-
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
-fi # test -z "$show_help"
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
- --config show all configuration variables
- --debug enable verbose shell tracing
--n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --finish same as \`--mode=finish'
- --help display this help message and exit
- --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
- --quiet same as \`--silent'
- --silent don't print informational messages
- --version print version information
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
- exit 0
- ;;
-
-clean)
- $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
-compile)
- $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -prefer-pic try to building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
- -static always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
- ;;
-
-execute)
- $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
-finish)
- $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the \`--dry-run' option if you just want to see what would be executed."
- ;;
-
-install)
- $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
-link)
- $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -static do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename. Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
-uninstall)
- $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
-*)
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-esac
-
-echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/srclib/pcre/maketables.c b/srclib/pcre/maketables.c
deleted file mode 100644
index 01078f19e6..0000000000
--- a/srclib/pcre/maketables.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This file is compiled on its own as part of the PCRE library. However,
-it is also included in the compilation of dftables.c, in which case the macro
-DFTABLES is defined. */
-
-#ifndef DFTABLES
-#include "internal.h"
-#endif
-
-
-
-/*************************************************
-* Create PCRE character tables *
-*************************************************/
-
-/* This function builds a set of character tables for use by PCRE and returns
-a pointer to them. They are build using the ctype functions, and consequently
-their contents will depend upon the current locale setting. When compiled as
-part of the library, the store is obtained via pcre_malloc(), but when compiled
-inside dftables, use malloc().
-
-Arguments: none
-Returns: pointer to the contiguous block of data
-*/
-
-const unsigned char *
-pcre_maketables(void)
-{
-unsigned char *yield, *p;
-int i;
-
-#ifndef DFTABLES
-yield = (unsigned char*)(pcre_malloc)(tables_length);
-#else
-yield = (unsigned char*)malloc(tables_length);
-#endif
-
-if (yield == NULL) return NULL;
-p = yield;
-
-/* First comes the lower casing table */
-
-for (i = 0; i < 256; i++) *p++ = tolower(i);
-
-/* Next the case-flipping table */
-
-for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
-
-/* Then the character class tables. Don't try to be clever and save effort
-on exclusive ones - in some locales things may be different. */
-
-memset(p, 0, cbit_length);
-for (i = 0; i < 256; i++)
- {
- if (isdigit(i))
- {
- p[cbit_digit + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (isupper(i))
- {
- p[cbit_upper + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (islower(i))
- {
- p[cbit_lower + i/8] |= 1 << (i&7);
- p[cbit_word + i/8] |= 1 << (i&7);
- }
- if (i == '_') p[cbit_word + i/8] |= 1 << (i&7);
- if (isspace(i)) p[cbit_space + i/8] |= 1 << (i&7);
- if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
- if (isgraph(i)) p[cbit_graph + i/8] |= 1 << (i&7);
- if (isprint(i)) p[cbit_print + i/8] |= 1 << (i&7);
- if (ispunct(i)) p[cbit_punct + i/8] |= 1 << (i&7);
- if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1 << (i&7);
- }
-p += cbit_length;
-
-/* Finally, the character type table */
-
-for (i = 0; i < 256; i++)
- {
- int x = 0;
- if (isspace(i)) x += ctype_space;
- if (isalpha(i)) x += ctype_letter;
- if (isdigit(i)) x += ctype_digit;
- if (isxdigit(i)) x += ctype_xdigit;
- if (isalnum(i) || i == '_') x += ctype_word;
- if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
- *p++ = x;
- }
-
-return yield;
-}
-
-/* End of maketables.c */
diff --git a/srclib/pcre/mkinstalldirs b/srclib/pcre/mkinstalldirs
deleted file mode 100755
index f4f054dc4f..0000000000
--- a/srclib/pcre/mkinstalldirs
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-# $Id: mkinstalldirs,v 1.1 2002/03/20 05:54:10 brianp Exp $
-
-errstatus=0
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/srclib/pcre/pcre-config.in b/srclib/pcre/pcre-config.in
deleted file mode 100644
index 8daded9fe1..0000000000
--- a/srclib/pcre/pcre-config.in
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
-
-usage="\
-Usage: pcre-config [--prefix] [--exec-prefix] [--version] [--libs] [--libs-posix] [--cflags] [--cflags-posix]"
-
-if test $# -eq 0; then
- echo "${usage}" 1>&2
- exit 1
-fi
-
-while test $# -gt 0; do
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
-
- case $1 in
- --prefix=*)
- prefix=$optarg
- if test $exec_prefix_set = no ; then
- exec_prefix=$optarg
- fi
- ;;
- --prefix)
- echo $prefix
- ;;
- --exec-prefix=*)
- exec_prefix=$optarg
- exec_prefix_set=yes
- ;;
- --exec-prefix)
- echo $exec_prefix
- ;;
- --version)
- echo @PCRE_VERSION@
- ;;
- --cflags | --cflags-posix)
- if test @includedir@ != /usr/include ; then
- includes=-I@includedir@
- fi
- echo $includes
- ;;
- --libs-posix)
- echo -L@libdir@ -lpcreposix -lpcre
- ;;
- --libs)
- echo -L@libdir@ -lpcre
- ;;
- *)
- echo "${usage}" 1>&2
- exit 1
- ;;
- esac
- shift
-done
diff --git a/srclib/pcre/pcre.c b/srclib/pcre/pcre.c
deleted file mode 100644
index ad3ddc7c57..0000000000
--- a/srclib/pcre/pcre.c
+++ /dev/null
@@ -1,5174 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Define DEBUG to get debugging output on stdout. */
-
-/* #define DEBUG */
-
-/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
-inline, and there are *still* stupid compilers about that don't like indented
-pre-processor statements. I suppose it's only been 10 years... */
-
-#ifdef DEBUG
-#define DPRINTF(p) printf p
-#else
-#define DPRINTF(p) /*nothing*/
-#endif
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-/* Allow compilation as C++ source code, should anybody want to do that. */
-
-#ifdef __cplusplus
-#define class pcre_class
-#endif
-
-
-/* Maximum number of items on the nested bracket stacks at compile time. This
-applies to the nesting of all kinds of parentheses. It does not limit
-un-nested, non-capturing parentheses. This number can be made bigger if
-necessary - it is used to dimension one int and one unsigned char vector at
-compile time. */
-
-#define BRASTACK_SIZE 200
-
-
-/* The number of bytes in a literal character string above which we can't add
-any more is different when UTF-8 characters may be encountered. */
-
-#ifdef SUPPORT_UTF8
-#define MAXLIT 250
-#else
-#define MAXLIT 255
-#endif
-
-
-/* Min and max values for the common repeats; for the maxima, 0 => infinity */
-
-static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
-static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
-
-/* Text forms of OP_ values and things, for debugging (not all used) */
-
-#ifdef DEBUG
-static const char *OP_names[] = {
- "End", "\\A", "\\B", "\\b", "\\D", "\\d",
- "\\S", "\\s", "\\W", "\\w", "\\Z", "\\z",
- "Opt", "^", "$", "Any", "chars", "not",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{",
- "class", "Ref", "Recurse",
- "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
- "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
- "Brazero", "Braminzero", "Branumber", "Bra"
-};
-#endif
-
-/* Table for handling escaped characters in the range '0'-'z'. Positive returns
-are simple data values; negative values are for special things like \d and so
-on. Zero means further processing is needed (for things like \x), or the escape
-is invalid. */
-
-static const short int escapes[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */
- 0, 0, ':', ';', '<', '=', '>', '?', /* 8 - ? */
- '@', -ESC_A, -ESC_B, 0, -ESC_D, 0, 0, 0, /* @ - G */
- 0, 0, 0, 0, 0, 0, 0, 0, /* H - O */
- 0, 0, 0, -ESC_S, 0, 0, 0, -ESC_W, /* P - W */
- 0, 0, -ESC_Z, '[', '\\', ']', '^', '_', /* X - _ */
- '`', 7, -ESC_b, 0, -ESC_d, ESC_E, ESC_F, 0, /* ` - g */
- 0, 0, 0, 0, 0, 0, ESC_N, 0, /* h - o */
- 0, 0, ESC_R, -ESC_s, ESC_T, 0, 0, -ESC_w, /* p - w */
- 0, 0, -ESC_z /* x - z */
-};
-
-/* Tables of names of POSIX character classes and their lengths. The list is
-terminated by a zero length entry. The first three must be alpha, upper, lower,
-as this is assumed for handling case independence. */
-
-static const char *posix_names[] = {
- "alpha", "lower", "upper",
- "alnum", "ascii", "cntrl", "digit", "graph",
- "print", "punct", "space", "word", "xdigit" };
-
-static const uschar posix_name_lengths[] = {
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
-
-/* Table of class bit maps for each POSIX class; up to three may be combined
-to form the class. */
-
-static const int posix_class_maps[] = {
- cbit_lower, cbit_upper, -1, /* alpha */
- cbit_lower, -1, -1, /* lower */
- cbit_upper, -1, -1, /* upper */
- cbit_digit, cbit_lower, cbit_upper, /* alnum */
- cbit_print, cbit_cntrl, -1, /* ascii */
- cbit_cntrl, -1, -1, /* cntrl */
- cbit_digit, -1, -1, /* digit */
- cbit_graph, -1, -1, /* graph */
- cbit_print, -1, -1, /* print */
- cbit_punct, -1, -1, /* punct */
- cbit_space, -1, -1, /* space */
- cbit_word, -1, -1, /* word */
- cbit_xdigit,-1, -1 /* xdigit */
-};
-
-
-/* Definition to allow mutual recursion */
-
-static BOOL
- compile_regex(int, int, int *, uschar **, const uschar **, const char **,
- BOOL, int, int *, int *, compile_data *);
-
-/* Structure for building a chain of data that actually lives on the
-stack, for holding the values of the subject pointer at the start of each
-subpattern, so as to detect when an empty string has been matched by a
-subpattern - to break infinite loops. */
-
-typedef struct eptrblock {
- struct eptrblock *prev;
- const uschar *saved_eptr;
-} eptrblock;
-
-/* Flag bits for the match() function */
-
-#define match_condassert 0x01 /* Called to check a condition assertion */
-#define match_isgroup 0x02 /* Set if start of bracketed group */
-
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-/* PCRE is thread-clean and doesn't use any global variables in the normal
-sense. However, it calls memory allocation and free functions via the two
-indirections below, which are can be changed by the caller, but are shared
-between all threads. */
-
-void *(*pcre_malloc)(size_t) = malloc;
-void (*pcre_free)(void *) = free;
-
-
-
-/*************************************************
-* Macros and tables for character handling *
-*************************************************/
-
-/* When UTF-8 encoding is being used, a character is no longer just a single
-byte. The macros for character handling generate simple sequences when used in
-byte-mode, and more complicated ones for UTF-8 characters. */
-
-#ifndef SUPPORT_UTF8
-#define GETCHARINC(c, eptr) c = *eptr++;
-#define GETCHARLEN(c, eptr, len) c = *eptr;
-#define BACKCHAR(eptr)
-
-#else /* SUPPORT_UTF8 */
-
-/* Get the next UTF-8 character, advancing the pointer */
-
-#define GETCHARINC(c, eptr) \
- c = *eptr++; \
- if (md->utf8 && (c & 0xc0) == 0xc0) \
- { \
- int a = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int s = 6*a; \
- c = (c & utf8_table3[a]) << s; \
- while (a-- > 0) \
- { \
- s -= 6; \
- c |= (*eptr++ & 0x3f) << s; \
- } \
- }
-
-/* Get the next UTF-8 character, not advancing the pointer, setting length */
-
-#define GETCHARLEN(c, eptr, len) \
- c = *eptr; \
- len = 1; \
- if (md->utf8 && (c & 0xc0) == 0xc0) \
- { \
- int i; \
- int a = utf8_table4[c & 0x3f]; /* Number of additional bytes */ \
- int s = 6*a; \
- c = (c & utf8_table3[a]) << s; \
- for (i = 1; i <= a; i++) \
- { \
- s -= 6; \
- c |= (eptr[i] & 0x3f) << s; \
- } \
- len += a; \
- }
-
-/* If the pointer is not at the start of a character, move it back until
-it is. */
-
-#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
-
-#endif
-
-
-
-/*************************************************
-* Default character tables *
-*************************************************/
-
-/* A default set of character tables is included in the PCRE binary. Its source
-is built by the maketables auxiliary program, which uses the default C ctypes
-functions, and put in the file chartables.c. These tables are used by PCRE
-whenever the caller of pcre_compile() does not provide an alternate set of
-tables. */
-
-#include "chartables.c"
-
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-* Tables for UTF-8 support *
-*************************************************/
-
-/* These are the breakpoints for different numbers of bytes in a UTF-8
-character. */
-
-static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
-
-/* These are the indicator bits and the mask for the data bits to set in the
-first byte of a character, indexed by the number of additional bytes. */
-
-static int utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-/* Table of the number of extra characters, indexed by the first character
-masked with 0x3f. The highest number for a valid UTF-8 character is in fact
-0x3d. */
-
-static uschar utf8_table4[] = {
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
-
-
-/*************************************************
-* Convert character value to UTF-8 *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
-Returns: number of characters placed in the buffer
-*/
-
-static int
-ord2utf8(int cvalue, uschar *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (cvalue <= utf8_table1[i]) break;
-buffer += i;
-for (j = i; j > 0; j--)
- {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-*buffer = utf8_table2[i] | cvalue;
-return i + 1;
-}
-#endif
-
-
-
-/*************************************************
-* Return version string *
-*************************************************/
-
-#define STRING(a) # a
-#define XSTRING(s) STRING(s)
-
-const char *
-pcre_version(void)
-{
-return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
-}
-
-
-
-
-/*************************************************
-* (Obsolete) Return info about compiled pattern *
-*************************************************/
-
-/* This is the original "info" function. It picks potentially useful data out
-of the private structure, but its interface was too rigid. It remains for
-backwards compatibility. The public options are passed back in an int - though
-the re->options field has been expanded to a long int, all the public options
-at the low end of it, and so even on 16-bit systems this will still be OK.
-Therefore, I haven't changed the API for pcre_info().
-
-Arguments:
- external_re points to compiled code
- optptr where to pass back the options
- first_char where to pass back the first character,
- or -1 if multiline and all branches start ^,
- or -2 otherwise
-
-Returns: number of capturing subpatterns
- or negative values on error
-*/
-
-int
-pcre_info(const pcre *external_re, int *optptr, int *first_char)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-if (re == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
-if (first_char != NULL)
- *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
- ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-return re->top_bracket;
-}
-
-
-
-/*************************************************
-* Return info about compiled pattern *
-*************************************************/
-
-/* This is a newer "info" function which has an extensible interface so
-that additional items can be added compatibly.
-
-Arguments:
- external_re points to compiled code
- external_study points to study data, or NULL
- what what information is required
- where where to put the information
-
-Returns: 0 if data returned, negative on error
-*/
-
-int
-pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
- void *where)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-const real_pcre_extra *study = (const real_pcre_extra *)study_data;
-
-if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-switch (what)
- {
- case PCRE_INFO_OPTIONS:
- *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
- break;
-
- case PCRE_INFO_SIZE:
- *((size_t *)where) = re->size;
- break;
-
- case PCRE_INFO_CAPTURECOUNT:
- *((int *)where) = re->top_bracket;
- break;
-
- case PCRE_INFO_BACKREFMAX:
- *((int *)where) = re->top_backref;
- break;
-
- case PCRE_INFO_FIRSTCHAR:
- *((int *)where) =
- ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
- ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
- break;
-
- case PCRE_INFO_FIRSTTABLE:
- *((const uschar **)where) =
- (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
- study->start_bits : NULL;
- break;
-
- case PCRE_INFO_LASTLITERAL:
- *((int *)where) =
- ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
- break;
-
- default: return PCRE_ERROR_BADOPTION;
- }
-
-return 0;
-}
-
-
-
-#ifdef DEBUG
-/*************************************************
-* Debugging function to print chars *
-*************************************************/
-
-/* Print a sequence of chars in printable format, stopping at the end of the
-subject if the requested.
-
-Arguments:
- p points to characters
- length number to print
- is_subject TRUE if printing from within md->start_subject
- md pointer to matching data block, if is_subject is TRUE
-
-Returns: nothing
-*/
-
-static void
-pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
-{
-int c;
-if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
-while (length-- > 0)
- if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
-}
-#endif
-
-
-
-
-/*************************************************
-* Handle escapes *
-*************************************************/
-
-/* This function is called when a \ has been encountered. It either returns a
-positive value for a simple escape such as \n, or a negative value which
-encodes one of the more complicated things such as \d. When UTF-8 is enabled,
-a positive value greater than 255 may be returned. On entry, ptr is pointing at
-the \. On exit, it is on the final character of the escape sequence.
-
-Arguments:
- ptrptr points to the pattern position pointer
- errorptr points to the pointer to the error message
- bracount number of previous extracting brackets
- options the options bits
- isclass TRUE if inside a character class
- cd pointer to char tables block
-
-Returns: zero or positive => a data character
- negative => a special escape sequence
- on error, errorptr is set
-*/
-
-static int
-check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
- int options, BOOL isclass, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-int c, i;
-
-/* If backslash is at the end of the pattern, it's an error. */
-
-c = *(++ptr);
-if (c == 0) *errorptr = ERR1;
-
-/* Digits or letters may have special meaning; all others are literals. */
-
-else if (c < '0' || c > 'z') {}
-
-/* Do an initial lookup in a table. A non-zero result is something that can be
-returned immediately. Otherwise further processing may be required. */
-
-else if ((i = escapes[c - '0']) != 0) c = i;
-
-/* Escapes that need further processing, or are illegal. */
-
-else
- {
- const uschar *oldptr;
- switch (c)
- {
- /* The handling of escape sequences consisting of a string of digits
- starting with one that is not zero is not straightforward. By experiment,
- the way Perl works seems to be as follows:
-
- Outside a character class, the digits are read as a decimal number. If the
- number is less than 10, or if there are that many previous extracting
- left brackets, then it is a back reference. Otherwise, up to three octal
- digits are read to form an escaped byte. Thus \123 is likely to be octal
- 123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
- value is greater than 377, the least significant 8 bits are taken. Inside a
- character class, \ followed by a digit is always an octal number. */
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
-
- if (!isclass)
- {
- oldptr = ptr;
- c -= '0';
- while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
- c = c * 10 + *(++ptr) - '0';
- if (c < 10 || c <= bracount)
- {
- c = -(ESC_REF + c);
- break;
- }
- ptr = oldptr; /* Put the pointer back and fall through */
- }
-
- /* Handle an octal number following \. If the first digit is 8 or 9, Perl
- generates a binary zero byte and treats the digit as a following literal.
- Thus we have to pull back the pointer by one. */
-
- if ((c = *ptr) >= '8')
- {
- ptr--;
- c = 0;
- break;
- }
-
- /* \0 always starts an octal number, but we may drop through to here with a
- larger first octal digit. */
-
- case '0':
- c -= '0';
- while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
- ptr[1] != '8' && ptr[1] != '9')
- c = c * 8 + *(++ptr) - '0';
- c &= 255; /* Take least significant 8 bits */
- break;
-
- /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
- which can be greater than 0xff, but only if the ddd are hex digits. */
-
- case 'x':
-#ifdef SUPPORT_UTF8
- if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
- {
- const uschar *pt = ptr + 2;
- register int count = 0;
- c = 0;
- while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
- {
- count++;
- c = c * 16 + cd->lcc[*pt] -
- (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
- pt++;
- }
- if (*pt == '}')
- {
- if (c < 0 || count > 8) *errorptr = ERR34;
- ptr = pt;
- break;
- }
- /* If the sequence of hex digits does not end with '}', then we don't
- recognize this construct; fall through to the normal \x handling. */
- }
-#endif
-
- /* Read just a single hex char */
-
- c = 0;
- while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
- {
- ptr++;
- c = c * 16 + cd->lcc[*ptr] -
- (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
- }
- break;
-
- /* Other special escapes not starting with a digit are straightforward */
-
- case 'c':
- c = *(++ptr);
- if (c == 0)
- {
- *errorptr = ERR2;
- return 0;
- }
-
- /* A letter is upper-cased; then the 0x40 bit is flipped */
-
- if (c >= 'a' && c <= 'z') c = cd->fcc[c];
- c ^= 0x40;
- break;
-
- /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
- other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
- for Perl compatibility, it is a literal. This code looks a bit odd, but
- there used to be some cases other than the default, and there may be again
- in future, so I haven't "optimized" it. */
-
- default:
- if ((options & PCRE_EXTRA) != 0) switch(c)
- {
- default:
- *errorptr = ERR3;
- break;
- }
- break;
- }
- }
-
-*ptrptr = ptr;
-return c;
-}
-
-
-
-/*************************************************
-* Check for counted repeat *
-*************************************************/
-
-/* This function is called when a '{' is encountered in a place where it might
-start a quantifier. It looks ahead to see if it really is a quantifier or not.
-It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
-where the ddds are digits.
-
-Arguments:
- p pointer to the first char after '{'
- cd pointer to char tables block
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_counted_repeat(const uschar *p, compile_data *cd)
-{
-if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
-while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
-if (*p == '}') return TRUE;
-
-if (*p++ != ',') return FALSE;
-if (*p == '}') return TRUE;
-
-if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
-while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
-return (*p == '}');
-}
-
-
-
-/*************************************************
-* Read repeat counts *
-*************************************************/
-
-/* Read an item of the form {n,m} and return the values. This is called only
-after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
-so the syntax is guaranteed to be correct, but we need to check the values.
-
-Arguments:
- p pointer to first char after '{'
- minp pointer to int for min
- maxp pointer to int for max
- returned as -1 if no max
- errorptr points to pointer to error message
- cd pointer to character tables clock
-
-Returns: pointer to '}' on success;
- current ptr on error, with errorptr set
-*/
-
-static const uschar *
-read_repeat_counts(const uschar *p, int *minp, int *maxp,
- const char **errorptr, compile_data *cd)
-{
-int min = 0;
-int max = -1;
-
-while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
-
-if (*p == '}') max = min; else
- {
- if (*(++p) != '}')
- {
- max = 0;
- while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
- if (max < min)
- {
- *errorptr = ERR4;
- return p;
- }
- }
- }
-
-/* Do paranoid checks, then fill in the required variables, and pass back the
-pointer to the terminating '}'. */
-
-if (min > 65535 || max > 65535)
- *errorptr = ERR5;
-else
- {
- *minp = min;
- *maxp = max;
- }
-return p;
-}
-
-
-
-/*************************************************
-* Find the fixed length of a pattern *
-*************************************************/
-
-/* Scan a pattern and compute the fixed length of subject that will match it,
-if the length is fixed. This is needed for dealing with backward assertions.
-
-Arguments:
- code points to the start of the pattern (the bracket)
- options the compiling options
-
-Returns: the fixed length, or -1 if there is no fixed length
-*/
-
-static int
-find_fixedlength(uschar *code, int options)
-{
-int length = -1;
-
-register int branchlength = 0;
-register uschar *cc = code + 3;
-
-/* Scan along the opcodes for this branch. If we get to the end of the
-branch, check the length against that of the other branches. */
-
-for (;;)
- {
- int d;
- register int op = *cc;
- if (op >= OP_BRA) op = OP_BRA;
-
- switch (op)
- {
- case OP_BRA:
- case OP_ONCE:
- case OP_COND:
- d = find_fixedlength(cc, options);
- if (d < 0) return -1;
- branchlength += d;
- do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
- cc += 3;
- break;
-
- /* Reached end of a branch; if it's a ket it is the end of a nested
- call. If it's ALT it is an alternation in a nested call. If it is
- END it's the end of the outer call. All can be handled by the same code. */
-
- case OP_ALT:
- case OP_KET:
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_END:
- if (length < 0) length = branchlength;
- else if (length != branchlength) return -1;
- if (*cc != OP_ALT) return length;
- cc += 3;
- branchlength = 0;
- break;
-
- /* Skip over assertive subpatterns */
-
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
- cc += 3;
- break;
-
- /* Skip over things that don't match chars */
-
- case OP_REVERSE:
- case OP_BRANUMBER:
- case OP_CREF:
- cc++;
- /* Fall through */
-
- case OP_OPT:
- cc++;
- /* Fall through */
-
- case OP_SOD:
- case OP_EOD:
- case OP_EODN:
- case OP_CIRC:
- case OP_DOLL:
- case OP_NOT_WORD_BOUNDARY:
- case OP_WORD_BOUNDARY:
- cc++;
- break;
-
- /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
- This requires a scan of the string, unfortunately. We assume valid UTF-8
- strings, so all we do is reduce the length by one for byte whose bits are
- 10xxxxxx. */
-
- case OP_CHARS:
- branchlength += *(++cc);
-#ifdef SUPPORT_UTF8
- for (d = 1; d <= *cc; d++)
- if ((cc[d] & 0xc0) == 0x80) branchlength--;
-#endif
- cc += *cc + 1;
- break;
-
- /* Handle exact repetitions */
-
- case OP_EXACT:
- case OP_TYPEEXACT:
- branchlength += (cc[1] << 8) + cc[2];
- cc += 4;
- break;
-
- /* Handle single-char matchers */
-
- case OP_NOT_DIGIT:
- case OP_DIGIT:
- case OP_NOT_WHITESPACE:
- case OP_WHITESPACE:
- case OP_NOT_WORDCHAR:
- case OP_WORDCHAR:
- case OP_ANY:
- branchlength++;
- cc++;
- break;
-
-
- /* Check a class for variable quantification */
-
- case OP_CLASS:
- cc += 33;
-
- switch (*cc)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- return -1;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
- branchlength += (cc[1] << 8) + cc[2];
- cc += 5;
- break;
-
- default:
- branchlength++;
- }
- break;
-
- /* Anything else is variable length */
-
- default:
- return -1;
- }
- }
-/* Control never gets here */
-}
-
-
-
-
-/*************************************************
-* Check for POSIX class syntax *
-*************************************************/
-
-/* This function is called when the sequence "[:" or "[." or "[=" is
-encountered in a character class. It checks whether this is followed by an
-optional ^ and then a sequence of letters, terminated by a matching ":]" or
-".]" or "=]".
-
-Argument:
- ptr pointer to the initial [
- endptr where to return the end pointer
- cd pointer to compile data
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
-{
-int terminator; /* Don't combine these lines; the Solaris cc */
-terminator = *(++ptr); /* compiler warns about "non-constant" initializer. */
-if (*(++ptr) == '^') ptr++;
-while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
-if (*ptr == terminator && ptr[1] == ']')
- {
- *endptr = ptr;
- return TRUE;
- }
-return FALSE;
-}
-
-
-
-
-/*************************************************
-* Check POSIX class name *
-*************************************************/
-
-/* This function is called to check the name given in a POSIX-style class entry
-such as [:alnum:].
-
-Arguments:
- ptr points to the first letter
- len the length of the name
-
-Returns: a value representing the name, or -1 if unknown
-*/
-
-static int
-check_posix_name(const uschar *ptr, int len)
-{
-register int yield = 0;
-while (posix_name_lengths[yield] != 0)
- {
- if (len == posix_name_lengths[yield] &&
- strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
- yield++;
- }
-return -1;
-}
-
-
-
-
-/*************************************************
-* Compile one branch *
-*************************************************/
-
-/* Scan the pattern, compiling it into the code vector.
-
-Arguments:
- options the option bits
- brackets points to number of extracting brackets used
- code points to the pointer to the current code point
- ptrptr points to the current pattern pointer
- errorptr points to pointer to error message
- optchanged set to the value of the last OP_OPT item compiled
- reqchar set to the last literal character required, else -1
- countlits set to count of mandatory literal characters
- cd contains pointers to tables
-
-Returns: TRUE on success
- FALSE, with *errorptr set on error
-*/
-
-static BOOL
-compile_branch(int options, int *brackets, uschar **codeptr,
- const uschar **ptrptr, const char **errorptr, int *optchanged,
- int *reqchar, int *countlits, compile_data *cd)
-{
-int repeat_type, op_type;
-int repeat_min, repeat_max;
-int bravalue, length;
-int greedy_default, greedy_non_default;
-int prevreqchar;
-int condcount = 0;
-int subcountlits = 0;
-register int c;
-register uschar *code = *codeptr;
-uschar *tempcode;
-const uschar *ptr = *ptrptr;
-const uschar *tempptr;
-uschar *previous = NULL;
-uschar class[32];
-
-/* Set up the default and non-default settings for greediness */
-
-greedy_default = ((options & PCRE_UNGREEDY) != 0);
-greedy_non_default = greedy_default ^ 1;
-
-/* Initialize no required char, and count of literals */
-
-*reqchar = prevreqchar = -1;
-*countlits = 0;
-
-/* Switch on next character until the end of the branch */
-
-for (;; ptr++)
- {
- BOOL negate_class;
- int class_charcount;
- int class_lastchar;
- int newoptions;
- int skipbytes;
- int subreqchar;
-
- c = *ptr;
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((cd->ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- continue;
- }
- }
-
- switch(c)
- {
- /* The branch terminates at end of string, |, or ). */
-
- case 0:
- case '|':
- case ')':
- *codeptr = code;
- *ptrptr = ptr;
- return TRUE;
-
- /* Handle single-character metacharacters */
-
- case '^':
- previous = NULL;
- *code++ = OP_CIRC;
- break;
-
- case '$':
- previous = NULL;
- *code++ = OP_DOLL;
- break;
-
- case '.':
- previous = code;
- *code++ = OP_ANY;
- break;
-
- /* Character classes. These always build a 32-byte bitmap of the permitted
- characters, except in the special case where there is only one character.
- For negated classes, we build the map as usual, then invert it at the end.
- */
-
- case '[':
- previous = code;
- *code++ = OP_CLASS;
-
- /* If the first character is '^', set the negation flag and skip it. */
-
- if ((c = *(++ptr)) == '^')
- {
- negate_class = TRUE;
- c = *(++ptr);
- }
- else negate_class = FALSE;
-
- /* Keep a count of chars so that we can optimize the case of just a single
- character. */
-
- class_charcount = 0;
- class_lastchar = -1;
-
- /* Initialize the 32-char bit map to all zeros. We have to build the
- map in a temporary bit of store, in case the class contains only 1
- character, because in that case the compiled code doesn't use the
- bit map. */
-
- memset(class, 0, 32 * sizeof(uschar));
-
- /* Process characters until ] is reached. By writing this as a "do" it
- means that an initial ] is taken as a data character. */
-
- do
- {
- if (c == 0)
- {
- *errorptr = ERR6;
- goto FAILED;
- }
-
- /* Handle POSIX class names. Perl allows a negation extension of the
- form [:^name]. A square bracket that doesn't match the syntax is
- treated as a literal. We also recognize the POSIX constructions
- [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
- 5.6 does. */
-
- if (c == '[' &&
- (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
- check_posix_syntax(ptr, &tempptr, cd))
- {
- BOOL local_negate = FALSE;
- int posix_class, i;
- register const uschar *cbits = cd->cbits;
-
- if (ptr[1] != ':')
- {
- *errorptr = ERR31;
- goto FAILED;
- }
-
- ptr += 2;
- if (*ptr == '^')
- {
- local_negate = TRUE;
- ptr++;
- }
-
- posix_class = check_posix_name(ptr, tempptr - ptr);
- if (posix_class < 0)
- {
- *errorptr = ERR30;
- goto FAILED;
- }
-
- /* If matching is caseless, upper and lower are converted to
- alpha. This relies on the fact that the class table starts with
- alpha, lower, upper as the first 3 entries. */
-
- if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
- posix_class = 0;
-
- /* Or into the map we are building up to 3 of the static class
- tables, or their negations. */
-
- posix_class *= 3;
- for (i = 0; i < 3; i++)
- {
- int taboffset = posix_class_maps[posix_class + i];
- if (taboffset < 0) break;
- if (local_negate)
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
- else
- for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
- }
-
- ptr = tempptr + 1;
- class_charcount = 10; /* Set > 1; assumes more than 1 per class */
- continue;
- }
-
- /* Backslash may introduce a single character, or it may introduce one
- of the specials, which just set a flag. Escaped items are checked for
- validity in the pre-compiling pass. The sequence \b is a special case.
- Inside a class (and only there) it is treated as backspace. Elsewhere
- it marks a word boundary. Other escapes have preset maps ready to
- or into the one we are building. We assume they have more than one
- character in them, so set class_count bigger than one. */
-
- if (c == '\\')
- {
- c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
- if (-c == ESC_b) c = '\b';
- else if (c < 0)
- {
- register const uschar *cbits = cd->cbits;
- class_charcount = 10;
- switch (-c)
- {
- case ESC_d:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
- continue;
-
- case ESC_D:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
- continue;
-
- case ESC_w:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
- continue;
-
- case ESC_W:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
- continue;
-
- case ESC_s:
- for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
- continue;
-
- case ESC_S:
- for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
- continue;
-
- default:
- *errorptr = ERR7;
- goto FAILED;
- }
- }
-
- /* Fall through if single character, but don't at present allow
- chars > 255 in UTF-8 mode. */
-
-#ifdef SUPPORT_UTF8
- if (c > 255)
- {
- *errorptr = ERR33;
- goto FAILED;
- }
-#endif
- }
-
- /* A single character may be followed by '-' to form a range. However,
- Perl does not permit ']' to be the end of the range. A '-' character
- here is treated as a literal. */
-
- if (ptr[1] == '-' && ptr[2] != ']')
- {
- int d;
- ptr += 2;
- d = *ptr;
-
- if (d == 0)
- {
- *errorptr = ERR6;
- goto FAILED;
- }
-
- /* The second part of a range can be a single-character escape, but
- not any of the other escapes. Perl 5.6 treats a hyphen as a literal
- in such circumstances. */
-
- if (d == '\\')
- {
- const uschar *oldptr = ptr;
- d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
-
-#ifdef SUPPORT_UTF8
- if (d > 255)
- {
- *errorptr = ERR33;
- goto FAILED;
- }
-#endif
- /* \b is backslash; any other special means the '-' was literal */
-
- if (d < 0)
- {
- if (d == -ESC_b) d = '\b'; else
- {
- ptr = oldptr - 2;
- goto SINGLE_CHARACTER; /* A few lines below */
- }
- }
- }
-
- if (d < c)
- {
- *errorptr = ERR8;
- goto FAILED;
- }
-
- for (; c <= d; c++)
- {
- class[c/8] |= (1 << (c&7));
- if ((options & PCRE_CASELESS) != 0)
- {
- int uc = cd->fcc[c]; /* flip case */
- class[uc/8] |= (1 << (uc&7));
- }
- class_charcount++; /* in case a one-char range */
- class_lastchar = c;
- }
- continue; /* Go get the next char in the class */
- }
-
- /* Handle a lone single character - we can get here for a normal
- non-escape char, or after \ that introduces a single character. */
-
- SINGLE_CHARACTER:
-
- class [c/8] |= (1 << (c&7));
- if ((options & PCRE_CASELESS) != 0)
- {
- c = cd->fcc[c]; /* flip case */
- class[c/8] |= (1 << (c&7));
- }
- class_charcount++;
- class_lastchar = c;
- }
-
- /* Loop until ']' reached; the check for end of string happens inside the
- loop. This "while" is the end of the "do" above. */
-
- while ((c = *(++ptr)) != ']');
-
- /* If class_charcount is 1 and class_lastchar is not negative, we saw
- precisely one character. This doesn't need the whole 32-byte bit map.
- We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
- it's negative. */
-
- if (class_charcount == 1 && class_lastchar >= 0)
- {
- if (negate_class)
- {
- code[-1] = OP_NOT;
- }
- else
- {
- code[-1] = OP_CHARS;
- *code++ = 1;
- }
- *code++ = class_lastchar;
- }
-
- /* Otherwise, negate the 32-byte map if necessary, and copy it into
- the code vector. */
-
- else
- {
- if (negate_class)
- for (c = 0; c < 32; c++) code[c] = ~class[c];
- else
- memcpy(code, class, 32);
- code += 32;
- }
- break;
-
- /* Various kinds of repeat */
-
- case '{':
- if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
- ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
- if (*errorptr != NULL) goto FAILED;
- goto REPEAT;
-
- case '*':
- repeat_min = 0;
- repeat_max = -1;
- goto REPEAT;
-
- case '+':
- repeat_min = 1;
- repeat_max = -1;
- goto REPEAT;
-
- case '?':
- repeat_min = 0;
- repeat_max = 1;
-
- REPEAT:
- if (previous == NULL)
- {
- *errorptr = ERR9;
- goto FAILED;
- }
-
- /* If the next character is '?' this is a minimizing repeat, by default,
- but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
- next character. */
-
- if (ptr[1] == '?')
- { repeat_type = greedy_non_default; ptr++; }
- else repeat_type = greedy_default;
-
- /* If previous was a string of characters, chop off the last one and use it
- as the subject of the repeat. If there was only one character, we can
- abolish the previous item altogether. A repeat with a zero minimum wipes
- out any reqchar setting, backing up to the previous value. We must also
- adjust the countlits value. */
-
- if (*previous == OP_CHARS)
- {
- int len = previous[1];
-
- if (repeat_min == 0) *reqchar = prevreqchar;
- *countlits += repeat_min - 1;
-
- if (len == 1)
- {
- c = previous[2];
- code = previous;
- }
- else
- {
- c = previous[len+1];
- previous[1]--;
- code--;
- }
- op_type = 0; /* Use single-char op codes */
- goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */
- }
-
- /* If previous was a single negated character ([^a] or similar), we use
- one of the special opcodes, replacing it. The code is shared with single-
- character repeats by adding a suitable offset into repeat_type. */
-
- else if ((int)*previous == OP_NOT)
- {
- op_type = OP_NOTSTAR - OP_STAR; /* Use "not" opcodes */
- c = previous[1];
- code = previous;
- goto OUTPUT_SINGLE_REPEAT;
- }
-
- /* If previous was a character type match (\d or similar), abolish it and
- create a suitable repeat item. The code is shared with single-character
- repeats by adding a suitable offset into repeat_type. */
-
- else if ((int)*previous < OP_EODN || *previous == OP_ANY)
- {
- op_type = OP_TYPESTAR - OP_STAR; /* Use type opcodes */
- c = *previous;
- code = previous;
-
- OUTPUT_SINGLE_REPEAT:
-
- /* If the maximum is zero then the minimum must also be zero; Perl allows
- this case, so we do too - by simply omitting the item altogether. */
-
- if (repeat_max == 0) goto END_REPEAT;
-
- /* Combine the op_type with the repeat_type */
-
- repeat_type += op_type;
-
- /* A minimum of zero is handled either as the special case * or ?, or as
- an UPTO, with the maximum given. */
-
- if (repeat_min == 0)
- {
- if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
- else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
- else
- {
- *code++ = OP_UPTO + repeat_type;
- *code++ = repeat_max >> 8;
- *code++ = (repeat_max & 255);
- }
- }
-
- /* The case {1,} is handled as the special case + */
-
- else if (repeat_min == 1 && repeat_max == -1)
- *code++ = OP_PLUS + repeat_type;
-
- /* The case {n,n} is just an EXACT, while the general case {n,m} is
- handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
-
- else
- {
- if (repeat_min != 1)
- {
- *code++ = OP_EXACT + op_type; /* NB EXACT doesn't have repeat_type */
- *code++ = repeat_min >> 8;
- *code++ = (repeat_min & 255);
- }
-
- /* If the mininum is 1 and the previous item was a character string,
- we either have to put back the item that got cancelled if the string
- length was 1, or add the character back onto the end of a longer
- string. For a character type nothing need be done; it will just get
- put back naturally. Note that the final character is always going to
- get added below. */
-
- else if (*previous == OP_CHARS)
- {
- if (code == previous) code += 2; else previous[1]++;
- }
-
- /* For a single negated character we also have to put back the
- item that got cancelled. */
-
- else if (*previous == OP_NOT) code++;
-
- /* If the maximum is unlimited, insert an OP_STAR. */
-
- if (repeat_max < 0)
- {
- *code++ = c;
- *code++ = OP_STAR + repeat_type;
- }
-
- /* Else insert an UPTO if the max is greater than the min. */
-
- else if (repeat_max != repeat_min)
- {
- *code++ = c;
- repeat_max -= repeat_min;
- *code++ = OP_UPTO + repeat_type;
- *code++ = repeat_max >> 8;
- *code++ = (repeat_max & 255);
- }
- }
-
- /* The character or character type itself comes last in all cases. */
-
- *code++ = c;
- }
-
- /* If previous was a character class or a back reference, we put the repeat
- stuff after it, but just skip the item if the repeat was {0,0}. */
-
- else if (*previous == OP_CLASS || *previous == OP_REF)
- {
- if (repeat_max == 0)
- {
- code = previous;
- goto END_REPEAT;
- }
- if (repeat_min == 0 && repeat_max == -1)
- *code++ = OP_CRSTAR + repeat_type;
- else if (repeat_min == 1 && repeat_max == -1)
- *code++ = OP_CRPLUS + repeat_type;
- else if (repeat_min == 0 && repeat_max == 1)
- *code++ = OP_CRQUERY + repeat_type;
- else
- {
- *code++ = OP_CRRANGE + repeat_type;
- *code++ = repeat_min >> 8;
- *code++ = repeat_min & 255;
- if (repeat_max == -1) repeat_max = 0; /* 2-byte encoding for max */
- *code++ = repeat_max >> 8;
- *code++ = repeat_max & 255;
- }
- }
-
- /* If previous was a bracket group, we may have to replicate it in certain
- cases. */
-
- else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
- (int)*previous == OP_COND)
- {
- register int i;
- int ketoffset = 0;
- int len = code - previous;
- uschar *bralink = NULL;
-
- /* If the maximum repeat count is unlimited, find the end of the bracket
- by scanning through from the start, and compute the offset back to it
- from the current code pointer. There may be an OP_OPT setting following
- the final KET, so we can't find the end just by going back from the code
- pointer. */
-
- if (repeat_max == -1)
- {
- register uschar *ket = previous;
- do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
- ketoffset = code - ket;
- }
-
- /* The case of a zero minimum is special because of the need to stick
- OP_BRAZERO in front of it, and because the group appears once in the
- data, whereas in other cases it appears the minimum number of times. For
- this reason, it is simplest to treat this case separately, as otherwise
- the code gets far too messy. There are several special subcases when the
- minimum is zero. */
-
- if (repeat_min == 0)
- {
- /* If we set up a required char from the bracket, we must back off
- to the previous value and reset the countlits value too. */
-
- if (subcountlits > 0)
- {
- *reqchar = prevreqchar;
- *countlits -= subcountlits;
- }
-
- /* If the maximum is also zero, we just omit the group from the output
- altogether. */
-
- if (repeat_max == 0)
- {
- code = previous;
- goto END_REPEAT;
- }
-
- /* If the maximum is 1 or unlimited, we just have to stick in the
- BRAZERO and do no more at this point. */
-
- if (repeat_max <= 1)
- {
- memmove(previous+1, previous, len);
- code++;
- *previous++ = OP_BRAZERO + repeat_type;
- }
-
- /* If the maximum is greater than 1 and limited, we have to replicate
- in a nested fashion, sticking OP_BRAZERO before each set of brackets.
- The first one has to be handled carefully because it's the original
- copy, which has to be moved up. The remainder can be handled by code
- that is common with the non-zero minimum case below. We just have to
- adjust the value or repeat_max, since one less copy is required. */
-
- else
- {
- int offset;
- memmove(previous+4, previous, len);
- code += 4;
- *previous++ = OP_BRAZERO + repeat_type;
- *previous++ = OP_BRA;
-
- /* We chain together the bracket offset fields that have to be
- filled in later when the ends of the brackets are reached. */
-
- offset = (bralink == NULL)? 0 : previous - bralink;
- bralink = previous;
- *previous++ = offset >> 8;
- *previous++ = offset & 255;
- }
-
- repeat_max--;
- }
-
- /* If the minimum is greater than zero, replicate the group as many
- times as necessary, and adjust the maximum to the number of subsequent
- copies that we need. */
-
- else
- {
- for (i = 1; i < repeat_min; i++)
- {
- memcpy(code, previous, len);
- code += len;
- }
- if (repeat_max > 0) repeat_max -= repeat_min;
- }
-
- /* This code is common to both the zero and non-zero minimum cases. If
- the maximum is limited, it replicates the group in a nested fashion,
- remembering the bracket starts on a stack. In the case of a zero minimum,
- the first one was set up above. In all cases the repeat_max now specifies
- the number of additional copies needed. */
-
- if (repeat_max >= 0)
- {
- for (i = repeat_max - 1; i >= 0; i--)
- {
- *code++ = OP_BRAZERO + repeat_type;
-
- /* All but the final copy start a new nesting, maintaining the
- chain of brackets outstanding. */
-
- if (i != 0)
- {
- int offset;
- *code++ = OP_BRA;
- offset = (bralink == NULL)? 0 : code - bralink;
- bralink = code;
- *code++ = offset >> 8;
- *code++ = offset & 255;
- }
-
- memcpy(code, previous, len);
- code += len;
- }
-
- /* Now chain through the pending brackets, and fill in their length
- fields (which are holding the chain links pro tem). */
-
- while (bralink != NULL)
- {
- int oldlinkoffset;
- int offset = code - bralink + 1;
- uschar *bra = code - offset;
- oldlinkoffset = (bra[1] << 8) + bra[2];
- bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
- *code++ = OP_KET;
- *code++ = bra[1] = offset >> 8;
- *code++ = bra[2] = (offset & 255);
- }
- }
-
- /* If the maximum is unlimited, set a repeater in the final copy. We
- can't just offset backwards from the current code point, because we
- don't know if there's been an options resetting after the ket. The
- correct offset was computed above. */
-
- else code[-ketoffset] = OP_KETRMAX + repeat_type;
- }
-
- /* Else there's some kind of shambles */
-
- else
- {
- *errorptr = ERR11;
- goto FAILED;
- }
-
- /* In all case we no longer have a previous item. */
-
- END_REPEAT:
- previous = NULL;
- break;
-
-
- /* Start of nested bracket sub-expression, or comment or lookahead or
- lookbehind or option setting or condition. First deal with special things
- that can come after a bracket; all are introduced by ?, and the appearance
- of any of them means that this is not a referencing group. They were
- checked for validity in the first pass over the string, so we don't have to
- check for syntax errors here. */
-
- case '(':
- newoptions = options;
- skipbytes = 0;
-
- if (*(++ptr) == '?')
- {
- int set, unset;
- int *optset;
-
- switch (*(++ptr))
- {
- case '#': /* Comment; skip to ket */
- ptr++;
- while (*ptr != ')') ptr++;
- continue;
-
- case ':': /* Non-extracting bracket */
- bravalue = OP_BRA;
- ptr++;
- break;
-
- case '(':
- bravalue = OP_COND; /* Conditional group */
- if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
- {
- int condref = *ptr - '0';
- while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
- if (condref == 0)
- {
- *errorptr = ERR35;
- goto FAILED;
- }
- ptr++;
- code[3] = OP_CREF;
- code[4] = condref >> 8;
- code[5] = condref & 255;
- skipbytes = 3;
- }
- else ptr--;
- break;
-
- case '=': /* Positive lookahead */
- bravalue = OP_ASSERT;
- ptr++;
- break;
-
- case '!': /* Negative lookahead */
- bravalue = OP_ASSERT_NOT;
- ptr++;
- break;
-
- case '<': /* Lookbehinds */
- switch (*(++ptr))
- {
- case '=': /* Positive lookbehind */
- bravalue = OP_ASSERTBACK;
- ptr++;
- break;
-
- case '!': /* Negative lookbehind */
- bravalue = OP_ASSERTBACK_NOT;
- ptr++;
- break;
-
- default: /* Syntax error */
- *errorptr = ERR24;
- goto FAILED;
- }
- break;
-
- case '>': /* One-time brackets */
- bravalue = OP_ONCE;
- ptr++;
- break;
-
- case 'R': /* Pattern recursion */
- *code++ = OP_RECURSE;
- ptr++;
- continue;
-
- default: /* Option setting */
- set = unset = 0;
- optset = &set;
-
- while (*ptr != ')' && *ptr != ':')
- {
- switch (*ptr++)
- {
- case '-': optset = &unset; break;
-
- case 'i': *optset |= PCRE_CASELESS; break;
- case 'm': *optset |= PCRE_MULTILINE; break;
- case 's': *optset |= PCRE_DOTALL; break;
- case 'x': *optset |= PCRE_EXTENDED; break;
- case 'U': *optset |= PCRE_UNGREEDY; break;
- case 'X': *optset |= PCRE_EXTRA; break;
-
- default:
- *errorptr = ERR12;
- goto FAILED;
- }
- }
-
- /* Set up the changed option bits, but don't change anything yet. */
-
- newoptions = (options | set) & (~unset);
-
- /* If the options ended with ')' this is not the start of a nested
- group with option changes, so the options change at this level. At top
- level there is nothing else to be done (the options will in fact have
- been set from the start of compiling as a result of the first pass) but
- at an inner level we must compile code to change the ims options if
- necessary, and pass the new setting back so that it can be put at the
- start of any following branches, and when this group ends, a resetting
- item can be compiled. */
-
- if (*ptr == ')')
- {
- if ((options & PCRE_INGROUP) != 0 &&
- (options & PCRE_IMS) != (newoptions & PCRE_IMS))
- {
- *code++ = OP_OPT;
- *code++ = *optchanged = newoptions & PCRE_IMS;
- }
- options = newoptions; /* Change options at this level */
- previous = NULL; /* This item can't be repeated */
- continue; /* It is complete */
- }
-
- /* If the options ended with ':' we are heading into a nested group
- with possible change of options. Such groups are non-capturing and are
- not assertions of any kind. All we need to do is skip over the ':';
- the newoptions value is handled below. */
-
- bravalue = OP_BRA;
- ptr++;
- }
- }
-
- /* Else we have a referencing group; adjust the opcode. If the bracket
- number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
- arrange for the true number to follow later, in an OP_BRANUMBER item. */
-
- else
- {
- if (++(*brackets) > EXTRACT_BASIC_MAX)
- {
- bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
- code[3] = OP_BRANUMBER;
- code[4] = *brackets >> 8;
- code[5] = *brackets & 255;
- skipbytes = 3;
- }
- else bravalue = OP_BRA + *brackets;
- }
-
- /* Process nested bracketed re. Assertions may not be repeated, but other
- kinds can be. We copy code into a non-register variable in order to be able
- to pass its address because some compilers complain otherwise. Pass in a
- new setting for the ims options if they have changed. */
-
- previous = (bravalue >= OP_ONCE)? code : NULL;
- *code = bravalue;
- tempcode = code;
-
- if (!compile_regex(
- options | PCRE_INGROUP, /* Set for all nested groups */
- ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
- newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
- brackets, /* Extracting bracket count */
- &tempcode, /* Where to put code (updated) */
- &ptr, /* Input pointer (updated) */
- errorptr, /* Where to put an error message */
- (bravalue == OP_ASSERTBACK ||
- bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
- skipbytes, /* Skip over OP_COND/OP_BRANUMBER */
- &subreqchar, /* For possible last char */
- &subcountlits, /* For literal count */
- cd)) /* Tables block */
- goto FAILED;
-
- /* At the end of compiling, code is still pointing to the start of the
- group, while tempcode has been updated to point past the end of the group
- and any option resetting that may follow it. The pattern pointer (ptr)
- is on the bracket. */
-
- /* If this is a conditional bracket, check that there are no more than
- two branches in the group. */
-
- else if (bravalue == OP_COND)
- {
- uschar *tc = code;
- condcount = 0;
-
- do {
- condcount++;
- tc += (tc[1] << 8) | tc[2];
- }
- while (*tc != OP_KET);
-
- if (condcount > 2)
- {
- *errorptr = ERR27;
- goto FAILED;
- }
- }
-
- /* Handle updating of the required character. If the subpattern didn't
- set one, leave it as it was. Otherwise, update it for normal brackets of
- all kinds, forward assertions, and conditions with two branches. Don't
- update the literal count for forward assertions, however. If the bracket
- is followed by a quantifier with zero repeat, we have to back off. Hence
- the definition of prevreqchar and subcountlits outside the main loop so
- that they can be accessed for the back off. */
-
- if (subreqchar > 0 &&
- (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
- (bravalue == OP_COND && condcount == 2)))
- {
- prevreqchar = *reqchar;
- *reqchar = subreqchar;
- if (bravalue != OP_ASSERT) *countlits += subcountlits;
- }
-
- /* Now update the main code pointer to the end of the group. */
-
- code = tempcode;
-
- /* Error if hit end of pattern */
-
- if (*ptr != ')')
- {
- *errorptr = ERR14;
- goto FAILED;
- }
- break;
-
- /* Check \ for being a real metacharacter; if not, fall through and handle
- it as a data character at the start of a string. Escape items are checked
- for validity in the pre-compiling pass. */
-
- case '\\':
- tempptr = ptr;
- c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
-
- /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
- are arranged to be the negation of the corresponding OP_values. For the
- back references, the values are ESC_REF plus the reference number. Only
- back references and those types that consume a character may be repeated.
- We can test for values between ESC_b and ESC_Z for the latter; this may
- have to change if any new ones are ever created. */
-
- if (c < 0)
- {
- if (-c >= ESC_REF)
- {
- int number = -c - ESC_REF;
- previous = code;
- *code++ = OP_REF;
- *code++ = number >> 8;
- *code++ = number & 255;
- }
- else
- {
- previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
- *code++ = -c;
- }
- continue;
- }
-
- /* Data character: reset and fall through */
-
- ptr = tempptr;
- c = '\\';
-
- /* Handle a run of data characters until a metacharacter is encountered.
- The first character is guaranteed not to be whitespace or # when the
- extended flag is set. */
-
- NORMAL_CHAR:
- default:
- previous = code;
- *code = OP_CHARS;
- code += 2;
- length = 0;
-
- do
- {
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((cd->ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- if (c == 0) break;
- continue;
- }
- }
-
- /* Backslash may introduce a data char or a metacharacter. Escaped items
- are checked for validity in the pre-compiling pass. Stop the string
- before a metaitem. */
-
- if (c == '\\')
- {
- tempptr = ptr;
- c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
- if (c < 0) { ptr = tempptr; break; }
-
- /* If a character is > 127 in UTF-8 mode, we have to turn it into
- two or more characters in the UTF-8 encoding. */
-
-#ifdef SUPPORT_UTF8
- if (c > 127 && (options & PCRE_UTF8) != 0)
- {
- uschar buffer[8];
- int len = ord2utf8(c, buffer);
- for (c = 0; c < len; c++) *code++ = buffer[c];
- length += len;
- continue;
- }
-#endif
- }
-
- /* Ordinary character or single-char escape */
-
- *code++ = c;
- length++;
- }
-
- /* This "while" is the end of the "do" above. */
-
- while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
- /* Update the last character and the count of literals */
-
- prevreqchar = (length > 1)? code[-2] : *reqchar;
- *reqchar = code[-1];
- *countlits += length;
-
- /* Compute the length and set it in the data vector, and advance to
- the next state. */
-
- previous[1] = length;
- if (length < MAXLIT) ptr--;
- break;
- }
- } /* end of big loop */
-
-/* Control never reaches here by falling through, only by a goto for all the
-error states. Pass back the position in the pattern so that it can be displayed
-to the user for diagnosing the error. */
-
-FAILED:
-*ptrptr = ptr;
-return FALSE;
-}
-
-
-
-
-/*************************************************
-* Compile sequence of alternatives *
-*************************************************/
-
-/* On entry, ptr is pointing past the bracket character, but on return
-it points to the closing bracket, or vertical bar, or end of string.
-The code variable is pointing at the byte into which the BRA operator has been
-stored. If the ims options are changed at the start (for a (?ims: group) or
-during any branch, we need to insert an OP_OPT item at the start of every
-following branch to ensure they get set correctly at run time, and also pass
-the new options into every subsequent branch compile.
-
-Argument:
- options the option bits
- optchanged new ims options to set as if (?ims) were at the start, or -1
- for no change
- brackets -> int containing the number of extracting brackets used
- codeptr -> the address of the current code pointer
- ptrptr -> the address of the current pattern pointer
- errorptr -> pointer to error message
- lookbehind TRUE if this is a lookbehind assertion
- skipbytes skip this many bytes at start (for OP_COND, OP_BRANUMBER)
- reqchar -> place to put the last required character, or a negative number
- countlits -> place to put the shortest literal count of any branch
- cd points to the data block with tables pointers
-
-Returns: TRUE on success
-*/
-
-static BOOL
-compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
- const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
- int *reqchar, int *countlits, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-uschar *code = *codeptr;
-uschar *last_branch = code;
-uschar *start_bracket = code;
-uschar *reverse_count = NULL;
-int oldoptions = options & PCRE_IMS;
-int branchreqchar, branchcountlits;
-
-*reqchar = -1;
-*countlits = INT_MAX;
-code += 3 + skipbytes;
-
-/* Loop for each alternative branch */
-
-for (;;)
- {
- int length;
-
- /* Handle change of options */
-
- if (optchanged >= 0)
- {
- *code++ = OP_OPT;
- *code++ = optchanged;
- options = (options & ~PCRE_IMS) | optchanged;
- }
-
- /* Set up dummy OP_REVERSE if lookbehind assertion */
-
- if (lookbehind)
- {
- *code++ = OP_REVERSE;
- reverse_count = code;
- *code++ = 0;
- *code++ = 0;
- }
-
- /* Now compile the branch */
-
- if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
- &branchreqchar, &branchcountlits, cd))
- {
- *ptrptr = ptr;
- return FALSE;
- }
-
- /* Fill in the length of the last branch */
-
- length = code - last_branch;
- last_branch[1] = length >> 8;
- last_branch[2] = length & 255;
-
- /* Save the last required character if all branches have the same; a current
- value of -1 means unset, while -2 means "previous branch had no last required
- char". */
-
- if (*reqchar != -2)
- {
- if (branchreqchar >= 0)
- {
- if (*reqchar == -1) *reqchar = branchreqchar;
- else if (*reqchar != branchreqchar) *reqchar = -2;
- }
- else *reqchar = -2;
- }
-
- /* Keep the shortest literal count */
-
- if (branchcountlits < *countlits) *countlits = branchcountlits;
- DPRINTF(("literal count = %d min=%d\n", branchcountlits, *countlits));
-
- /* If lookbehind, check that this branch matches a fixed-length string,
- and put the length into the OP_REVERSE item. Temporarily mark the end of
- the branch with OP_END. */
-
- if (lookbehind)
- {
- *code = OP_END;
- length = find_fixedlength(last_branch, options);
- DPRINTF(("fixed length = %d\n", length));
- if (length < 0)
- {
- *errorptr = ERR25;
- *ptrptr = ptr;
- return FALSE;
- }
- reverse_count[0] = (length >> 8);
- reverse_count[1] = length & 255;
- }
-
- /* Reached end of expression, either ')' or end of pattern. Insert a
- terminating ket and the length of the whole bracketed item, and return,
- leaving the pointer at the terminating char. If any of the ims options
- were changed inside the group, compile a resetting op-code following. */
-
- if (*ptr != '|')
- {
- length = code - start_bracket;
- *code++ = OP_KET;
- *code++ = length >> 8;
- *code++ = length & 255;
- if (optchanged >= 0)
- {
- *code++ = OP_OPT;
- *code++ = oldoptions;
- }
- *codeptr = code;
- *ptrptr = ptr;
- return TRUE;
- }
-
- /* Another branch follows; insert an "or" node and advance the pointer. */
-
- *code = OP_ALT;
- last_branch = code;
- code += 3;
- ptr++;
- }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Find first significant op code *
-*************************************************/
-
-/* This is called by several functions that scan a compiled expression looking
-for a fixed first character, or an anchoring op code etc. It skips over things
-that do not influence this. For one application, a change of caseless option is
-important.
-
-Arguments:
- code pointer to the start of the group
- options pointer to external options
- optbit the option bit whose changing is significant, or
- zero if none are
- optstop TRUE to return on option change, otherwise change the options
- value and continue
-
-Returns: pointer to the first significant opcode
-*/
-
-static const uschar*
-first_significant_code(const uschar *code, int *options, int optbit,
- BOOL optstop)
-{
-for (;;)
- {
- switch ((int)*code)
- {
- case OP_OPT:
- if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
- {
- if (optstop) return code;
- *options = (int)code[1];
- }
- code += 2;
- break;
-
- case OP_CREF:
- case OP_BRANUMBER:
- code += 3;
- break;
-
- case OP_WORD_BOUNDARY:
- case OP_NOT_WORD_BOUNDARY:
- code++;
- break;
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
- code += 3;
- break;
-
- default:
- return code;
- }
- }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Check for anchored expression *
-*************************************************/
-
-/* Try to find out if this is an anchored regular expression. Consider each
-alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
-all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
-it's anchored. However, if this is a multiline pattern, then only OP_SOD
-counts, since OP_CIRC can match in the middle.
-
-A branch is also implicitly anchored if it starts with .* and DOTALL is set,
-because that will try the rest of the pattern at all possible matching points,
-so there is no point trying them again.
-
-Arguments:
- code points to start of expression (the bracket)
- options points to the options setting
-
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_anchored(register const uschar *code, int *options)
-{
-do {
- const uschar *scode = first_significant_code(code + 3, options,
- PCRE_MULTILINE, FALSE);
- register int op = *scode;
- if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
- { if (!is_anchored(scode, options)) return FALSE; }
- else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
- (*options & PCRE_DOTALL) != 0)
- { if (scode[1] != OP_ANY) return FALSE; }
- else if (op != OP_SOD &&
- ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
- return FALSE;
- code += (code[1] << 8) + code[2];
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for starting with ^ or .* *
-*************************************************/
-
-/* This is called to find out if every branch starts with ^ or .* so that
-"first char" processing can be done to speed things up in multiline
-matching and for non-DOTALL patterns that start with .* (which must start at
-the beginning or after \n).
-
-Argument: points to start of expression (the bracket)
-Returns: TRUE or FALSE
-*/
-
-static BOOL
-is_startline(const uschar *code)
-{
-do {
- const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
- register int op = *scode;
- if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
- { if (!is_startline(scode)) return FALSE; }
- else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
- { if (scode[1] != OP_ANY) return FALSE; }
- else if (op != OP_CIRC) return FALSE;
- code += (code[1] << 8) + code[2];
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Check for fixed first char *
-*************************************************/
-
-/* Try to find out if there is a fixed first character. This is called for
-unanchored expressions, as it speeds up their processing quite considerably.
-Consider each alternative branch. If they all start with the same char, or with
-a bracket all of whose alternatives start with the same char (recurse ad lib),
-then we return that char, otherwise -1.
-
-Arguments:
- code points to start of expression (the bracket)
- options pointer to the options (used to check casing changes)
-
-Returns: -1 or the fixed first char
-*/
-
-static int
-find_firstchar(const uschar *code, int *options)
-{
-register int c = -1;
-do {
- int d;
- const uschar *scode = first_significant_code(code + 3, options,
- PCRE_CASELESS, TRUE);
- register int op = *scode;
-
- if (op >= OP_BRA) op = OP_BRA;
-
- switch(op)
- {
- default:
- return -1;
-
- case OP_BRA:
- case OP_ASSERT:
- case OP_ONCE:
- case OP_COND:
- if ((d = find_firstchar(scode, options)) < 0) return -1;
- if (c < 0) c = d; else if (c != d) return -1;
- break;
-
- case OP_EXACT: /* Fall through */
- scode++;
-
- case OP_CHARS: /* Fall through */
- scode++;
-
- case OP_PLUS:
- case OP_MINPLUS:
- if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
- break;
- }
-
- code += (code[1] << 8) + code[2];
- }
-while (*code == OP_ALT);
-return c;
-}
-
-
-
-
-
-/*************************************************
-* Compile a Regular Expression *
-*************************************************/
-
-/* This function takes a string and returns a pointer to a block of store
-holding a compiled version of the expression.
-
-Arguments:
- pattern the regular expression
- options various option bits
- errorptr pointer to pointer to error text
- erroroffset ptr offset in pattern where error was detected
- tables pointer to character tables or NULL
-
-Returns: pointer to compiled data block, or NULL on error,
- with errorptr and erroroffset set
-*/
-
-pcre *
-pcre_compile(const char *pattern, int options, const char **errorptr,
- int *erroroffset, const unsigned char *tables)
-{
-real_pcre *re;
-int length = 3; /* For initial BRA plus length */
-int runlength;
-int c, reqchar, countlits;
-int bracount = 0;
-int top_backref = 0;
-int branch_extra = 0;
-int branch_newextra;
-unsigned int brastackptr = 0;
-size_t size;
-uschar *code;
-const uschar *ptr;
-compile_data compile_block;
-int brastack[BRASTACK_SIZE];
-uschar bralenstack[BRASTACK_SIZE];
-
-#ifdef DEBUG
-uschar *code_base, *code_end;
-#endif
-
-/* Can't support UTF8 unless PCRE has been compiled to include the code. */
-
-#ifndef SUPPORT_UTF8
-if ((options & PCRE_UTF8) != 0)
- {
- *errorptr = ERR32;
- return NULL;
- }
-#endif
-
-/* We can't pass back an error message if errorptr is NULL; I guess the best we
-can do is just return NULL. */
-
-if (errorptr == NULL) return NULL;
-*errorptr = NULL;
-
-/* However, we can give a message for this error */
-
-if (erroroffset == NULL)
- {
- *errorptr = ERR16;
- return NULL;
- }
-*erroroffset = 0;
-
-if ((options & ~PUBLIC_OPTIONS) != 0)
- {
- *errorptr = ERR17;
- return NULL;
- }
-
-/* Set up pointers to the individual character tables */
-
-if (tables == NULL) tables = pcre_default_tables;
-compile_block.lcc = tables + lcc_offset;
-compile_block.fcc = tables + fcc_offset;
-compile_block.cbits = tables + cbits_offset;
-compile_block.ctypes = tables + ctypes_offset;
-
-/* Reflect pattern for debugging output */
-
-DPRINTF(("------------------------------------------------------------------\n"));
-DPRINTF(("%s\n", pattern));
-
-/* The first thing to do is to make a pass over the pattern to compute the
-amount of store required to hold the compiled code. This does not have to be
-perfect as long as errors are overestimates. At the same time we can detect any
-internal flag settings. Make an attempt to correct for any counted white space
-if an "extended" flag setting appears late in the pattern. We can't be so
-clever for #-comments. */
-
-ptr = (const uschar *)(pattern - 1);
-while ((c = *(++ptr)) != 0)
- {
- int min, max;
- int class_charcount;
- int bracket_length;
-
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- continue;
- }
- }
-
- switch(c)
- {
- /* A backslashed item may be an escaped "normal" character or a
- character type. For a "normal" character, put the pointers and
- character back so that tests for whitespace etc. in the input
- are done correctly. */
-
- case '\\':
- {
- const uschar *save_ptr = ptr;
- c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (c >= 0)
- {
- ptr = save_ptr;
- c = '\\';
- goto NORMAL_CHAR;
- }
- }
- length++;
-
- /* A back reference needs an additional 2 bytes, plus either one or 5
- bytes for a repeat. We also need to keep the value of the highest
- back reference. */
-
- if (c <= -ESC_REF)
- {
- int refnum = -c - ESC_REF;
- if (refnum > top_backref) top_backref = refnum;
- length += 2; /* For single back reference */
- if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else length += 5;
- if (ptr[1] == '?') ptr++;
- }
- }
- continue;
-
- case '^':
- case '.':
- case '$':
- case '*': /* These repeats won't be after brackets; */
- case '+': /* those are handled separately */
- case '?':
- length++;
- continue;
-
- /* This covers the cases of repeats after a single char, metachar, class,
- or back reference. */
-
- case '{':
- if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
- ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else
- {
- length--; /* Uncount the original char or metachar */
- if (min == 1) length++; else if (min > 0) length += 4;
- if (max > 0) length += 4; else length += 2;
- }
- if (ptr[1] == '?') ptr++;
- continue;
-
- /* An alternation contains an offset to the next branch or ket. If any ims
- options changed in the previous branch(es), and/or if we are in a
- lookbehind assertion, extra space will be needed at the start of the
- branch. This is handled by branch_extra. */
-
- case '|':
- length += 3 + branch_extra;
- continue;
-
- /* A character class uses 33 characters. Don't worry about character types
- that aren't allowed in classes - they'll get picked up during the compile.
- A character class that contains only one character uses 2 or 3 bytes,
- depending on whether it is negated or not. Notice this where we can. */
-
- case '[':
- class_charcount = 0;
- if (*(++ptr) == '^') ptr++;
- do
- {
- if (*ptr == '\\')
- {
- int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
- &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
- }
- else class_charcount++;
- ptr++;
- }
- while (*ptr != 0 && *ptr != ']');
-
- /* Repeats for negated single chars are handled by the general code */
-
- if (class_charcount == 1) length += 3; else
- {
- length += 33;
-
- /* A repeat needs either 1 or 5 bytes. */
-
- if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
- {
- ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if ((min == 0 && (max == 1 || max == -1)) ||
- (min == 1 && max == -1))
- length++;
- else length += 5;
- if (ptr[1] == '?') ptr++;
- }
- }
- continue;
-
- /* Brackets may be genuine groups or special things */
-
- case '(':
- branch_newextra = 0;
- bracket_length = 3;
-
- /* Handle special forms of bracket, which all start (? */
-
- if (ptr[1] == '?')
- {
- int set, unset;
- int *optset;
-
- switch (c = ptr[2])
- {
- /* Skip over comments entirely */
- case '#':
- ptr += 3;
- while (*ptr != 0 && *ptr != ')') ptr++;
- if (*ptr == 0)
- {
- *errorptr = ERR18;
- goto PCRE_ERROR_RETURN;
- }
- continue;
-
- /* Non-referencing groups and lookaheads just move the pointer on, and
- then behave like a non-special bracket, except that they don't increment
- the count of extracting brackets. Ditto for the "once only" bracket,
- which is in Perl from version 5.005. */
-
- case ':':
- case '=':
- case '!':
- case '>':
- ptr += 2;
- break;
-
- /* A recursive call to the regex is an extension, to provide the
- facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
-
- case 'R':
- if (ptr[3] != ')')
- {
- *errorptr = ERR29;
- goto PCRE_ERROR_RETURN;
- }
- ptr += 3;
- length += 1;
- break;
-
- /* Lookbehinds are in Perl from version 5.005 */
-
- case '<':
- if (ptr[3] == '=' || ptr[3] == '!')
- {
- ptr += 3;
- branch_newextra = 3;
- length += 3; /* For the first branch */
- break;
- }
- *errorptr = ERR24;
- goto PCRE_ERROR_RETURN;
-
- /* Conditionals are in Perl from version 5.005. The bracket must either
- be followed by a number (for bracket reference) or by an assertion
- group. */
-
- case '(':
- if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
- {
- ptr += 4;
- length += 3;
- while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
- if (*ptr != ')')
- {
- *errorptr = ERR26;
- goto PCRE_ERROR_RETURN;
- }
- }
- else /* An assertion must follow */
- {
- ptr++; /* Can treat like ':' as far as spacing is concerned */
- if (ptr[2] != '?' ||
- (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
- {
- ptr += 2; /* To get right offset in message */
- *errorptr = ERR28;
- goto PCRE_ERROR_RETURN;
- }
- }
- break;
-
- /* Else loop checking valid options until ) is met. Anything else is an
- error. If we are without any brackets, i.e. at top level, the settings
- act as if specified in the options, so massage the options immediately.
- This is for backward compatibility with Perl 5.004. */
-
- default:
- set = unset = 0;
- optset = &set;
- ptr += 2;
-
- for (;; ptr++)
- {
- c = *ptr;
- switch (c)
- {
- case 'i':
- *optset |= PCRE_CASELESS;
- continue;
-
- case 'm':
- *optset |= PCRE_MULTILINE;
- continue;
-
- case 's':
- *optset |= PCRE_DOTALL;
- continue;
-
- case 'x':
- *optset |= PCRE_EXTENDED;
- continue;
-
- case 'X':
- *optset |= PCRE_EXTRA;
- continue;
-
- case 'U':
- *optset |= PCRE_UNGREEDY;
- continue;
-
- case '-':
- optset = &unset;
- continue;
-
- /* A termination by ')' indicates an options-setting-only item;
- this is global at top level; otherwise nothing is done here and
- it is handled during the compiling process on a per-bracket-group
- basis. */
-
- case ')':
- if (brastackptr == 0)
- {
- options = (options | set) & (~unset);
- set = unset = 0; /* To save length */
- }
- /* Fall through */
-
- /* A termination by ':' indicates the start of a nested group with
- the given options set. This is again handled at compile time, but
- we must allow for compiled space if any of the ims options are
- set. We also have to allow for resetting space at the end of
- the group, which is why 4 is added to the length and not just 2.
- If there are several changes of options within the same group, this
- will lead to an over-estimate on the length, but this shouldn't
- matter very much. We also have to allow for resetting options at
- the start of any alternations, which we do by setting
- branch_newextra to 2. Finally, we record whether the case-dependent
- flag ever changes within the regex. This is used by the "required
- character" code. */
-
- case ':':
- if (((set|unset) & PCRE_IMS) != 0)
- {
- length += 4;
- branch_newextra = 2;
- if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
- }
- goto END_OPTIONS;
-
- /* Unrecognized option character */
-
- default:
- *errorptr = ERR12;
- goto PCRE_ERROR_RETURN;
- }
- }
-
- /* If we hit a closing bracket, that's it - this is a freestanding
- option-setting. We need to ensure that branch_extra is updated if
- necessary. The only values branch_newextra can have here are 0 or 2.
- If the value is 2, then branch_extra must either be 2 or 5, depending
- on whether this is a lookbehind group or not. */
-
- END_OPTIONS:
- if (c == ')')
- {
- if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
- branch_extra += branch_newextra;
- continue;
- }
-
- /* If options were terminated by ':' control comes here. Fall through
- to handle the group below. */
- }
- }
-
- /* Extracting brackets must be counted so we can process escapes in a
- Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
- need an additional 3 bytes of store per extracting bracket. */
-
- else
- {
- bracount++;
- if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
- }
-
- /* Save length for computing whole length at end if there's a repeat that
- requires duplication of the group. Also save the current value of
- branch_extra, and start the new group with the new value. If non-zero, this
- will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
-
- if (brastackptr >= sizeof(brastack)/sizeof(int))
- {
- *errorptr = ERR19;
- goto PCRE_ERROR_RETURN;
- }
-
- bralenstack[brastackptr] = branch_extra;
- branch_extra = branch_newextra;
-
- brastack[brastackptr++] = length;
- length += bracket_length;
- continue;
-
- /* Handle ket. Look for subsequent max/min; for certain sets of values we
- have to replicate this bracket up to that many times. If brastackptr is
- 0 this is an unmatched bracket which will generate an error, but take care
- not to try to access brastack[-1] when computing the length and restoring
- the branch_extra value. */
-
- case ')':
- length += 3;
- {
- int minval = 1;
- int maxval = 1;
- int duplength;
-
- if (brastackptr > 0)
- {
- duplength = length - brastack[--brastackptr];
- branch_extra = bralenstack[brastackptr];
- }
- else duplength = 0;
-
- /* Leave ptr at the final char; for read_repeat_counts this happens
- automatically; for the others we need an increment. */
-
- if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
- {
- ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
- &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- }
- else if (c == '*') { minval = 0; maxval = -1; ptr++; }
- else if (c == '+') { maxval = -1; ptr++; }
- else if (c == '?') { minval = 0; ptr++; }
-
- /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
- group, and if the maximum is greater than zero, we have to replicate
- maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
- bracket set - hence the 7. */
-
- if (minval == 0)
- {
- length++;
- if (maxval > 0) length += (maxval - 1) * (duplength + 7);
- }
-
- /* When the minimum is greater than zero, 1 we have to replicate up to
- minval-1 times, with no additions required in the copies. Then, if
- there is a limited maximum we have to replicate up to maxval-1 times
- allowing for a BRAZERO item before each optional copy and nesting
- brackets for all but one of the optional copies. */
-
- else
- {
- length += (minval - 1) * duplength;
- if (maxval > minval) /* Need this test as maxval=-1 means no limit */
- length += (maxval - minval) * (duplength + 7) - 6;
- }
- }
- continue;
-
- /* Non-special character. For a run of such characters the length required
- is the number of characters + 2, except that the maximum run length is 255.
- We won't get a skipped space or a non-data escape or the start of a #
- comment as the first character, so the length can't be zero. */
-
- NORMAL_CHAR:
- default:
- length += 2;
- runlength = 0;
- do
- {
- if ((options & PCRE_EXTENDED) != 0)
- {
- if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
- if (c == '#')
- {
- /* The space before the ; is to avoid a warning on a silly compiler
- on the Macintosh. */
- while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
- continue;
- }
- }
-
- /* Backslash may introduce a data char or a metacharacter; stop the
- string before the latter. */
-
- if (c == '\\')
- {
- const uschar *saveptr = ptr;
- c = check_escape(&ptr, errorptr, bracount, options, FALSE,
- &compile_block);
- if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
- if (c < 0) { ptr = saveptr; break; }
-
-#ifdef SUPPORT_UTF8
- if (c > 127 && (options & PCRE_UTF8) != 0)
- {
- int i;
- for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (c <= utf8_table1[i]) break;
- runlength += i;
- }
-#endif
- }
-
- /* Ordinary character or single-char escape */
-
- runlength++;
- }
-
- /* This "while" is the end of the "do" above. */
-
- while (runlength < MAXLIT &&
- (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
- ptr--;
- length += runlength;
- continue;
- }
- }
-
-length += 4; /* For final KET and END */
-
-if (length > 65539)
- {
- *errorptr = ERR20;
- return NULL;
- }
-
-/* Compute the size of data block needed and get it, either from malloc or
-externally provided function. We specify "code[0]" in the offsetof() expression
-rather than just "code", because it has been reported that one broken compiler
-fails on "code" because it is also an independent variable. It should make no
-difference to the value of the offsetof(). */
-
-size = length + offsetof(real_pcre, code[0]);
-re = (real_pcre *)(pcre_malloc)(size);
-
-if (re == NULL)
- {
- *errorptr = ERR21;
- return NULL;
- }
-
-/* Put in the magic number, and save the size, options, and table pointer */
-
-re->magic_number = MAGIC_NUMBER;
-re->size = size;
-re->options = options;
-re->tables = tables;
-
-/* Set up a starting, non-extracting bracket, then compile the expression. On
-error, *errorptr will be set non-NULL, so we don't need to look at the result
-of the function here. */
-
-ptr = (const uschar *)pattern;
-code = re->code;
-*code = OP_BRA;
-bracount = 0;
-(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, 0,
- &reqchar, &countlits, &compile_block);
-re->top_bracket = bracount;
-re->top_backref = top_backref;
-
-/* If not reached end of pattern on success, there's an excess bracket. */
-
-if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
-
-/* Fill in the terminating state and check for disastrous overflow, but
-if debugging, leave the test till after things are printed out. */
-
-*code++ = OP_END;
-
-#ifndef DEBUG
-if (code - re->code > length) *errorptr = ERR23;
-#endif
-
-/* Give an error if there's back reference to a non-existent capturing
-subpattern. */
-
-if (top_backref > re->top_bracket) *errorptr = ERR15;
-
-/* Failed to compile */
-
-if (*errorptr != NULL)
- {
- (pcre_free)(re);
- PCRE_ERROR_RETURN:
- *erroroffset = ptr - (const uschar *)pattern;
- return NULL;
- }
-
-/* If the anchored option was not passed, set flag if we can determine that the
-pattern is anchored by virtue of ^ characters or \A or anything else (such as
-starting with .* when DOTALL is set).
-
-Otherwise, see if we can determine what the first character has to be, because
-that speeds up unanchored matches no end. If not, see if we can set the
-PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
-start with ^. and also when all branches start with .* for non-DOTALL matches.
-*/
-
-if ((options & PCRE_ANCHORED) == 0)
- {
- int temp_options = options;
- if (is_anchored(re->code, &temp_options))
- re->options |= PCRE_ANCHORED;
- else
- {
- int ch = find_firstchar(re->code, &temp_options);
- if (ch >= 0)
- {
- re->first_char = ch;
- re->options |= PCRE_FIRSTSET;
- }
- else if (is_startline(re->code))
- re->options |= PCRE_STARTLINE;
- }
- }
-
-/* Save the last required character if there are at least two literal
-characters on all paths, or if there is no first character setting. */
-
-if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
- {
- re->req_char = reqchar;
- re->options |= PCRE_REQCHSET;
- }
-
-/* Print out the compiled data for debugging */
-
-#ifdef DEBUG
-
-printf("Length = %d top_bracket = %d top_backref = %d\n",
- length, re->top_bracket, re->top_backref);
-
-if (re->options != 0)
- {
- printf("%s%s%s%s%s%s%s%s%s\n",
- ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
- ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
- ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
- ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
- ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
- ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
- ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
- ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
- ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
- }
-
-if ((re->options & PCRE_FIRSTSET) != 0)
- {
- if (isprint(re->first_char)) printf("First char = %c\n", re->first_char);
- else printf("First char = \\x%02x\n", re->first_char);
- }
-
-if ((re->options & PCRE_REQCHSET) != 0)
- {
- if (isprint(re->req_char)) printf("Req char = %c\n", re->req_char);
- else printf("Req char = \\x%02x\n", re->req_char);
- }
-
-code_end = code;
-code_base = code = re->code;
-
-while (code < code_end)
- {
- int charlength;
-
- printf("%3d ", code - code_base);
-
- if (*code >= OP_BRA)
- {
- if (*code - OP_BRA > EXTRACT_BASIC_MAX)
- printf("%3d Bra extra", (code[1] << 8) + code[2]);
- else
- printf("%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
- code += 2;
- }
-
- else switch(*code)
- {
- case OP_OPT:
- printf(" %.2x %s", code[1], OP_names[*code]);
- code++;
- break;
-
- case OP_CHARS:
- charlength = *(++code);
- printf("%3d ", charlength);
- while (charlength-- > 0)
- if (isprint(c = *(++code))) printf("%c", c); else printf("\\x%02x", c);
- break;
-
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_ALT:
- case OP_KET:
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- case OP_ONCE:
- case OP_REVERSE:
- case OP_BRANUMBER:
- case OP_COND:
- case OP_CREF:
- printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
- code += 2;
- break;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- if (*code >= OP_TYPESTAR)
- printf(" %s", OP_names[code[1]]);
- else if (isprint(c = code[1])) printf(" %c", c);
- else printf(" \\x%02x", c);
- printf("%s", OP_names[*code++]);
- break;
-
- case OP_EXACT:
- case OP_UPTO:
- case OP_MINUPTO:
- if (isprint(c = code[3])) printf(" %c{", c);
- else printf(" \\x%02x{", c);
- if (*code != OP_EXACT) printf("0,");
- printf("%d}", (code[1] << 8) + code[2]);
- if (*code == OP_MINUPTO) printf("?");
- code += 3;
- break;
-
- case OP_TYPEEXACT:
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- printf(" %s{", OP_names[code[3]]);
- if (*code != OP_TYPEEXACT) printf(",");
- printf("%d}", (code[1] << 8) + code[2]);
- if (*code == OP_TYPEMINUPTO) printf("?");
- code += 3;
- break;
-
- case OP_NOT:
- if (isprint(c = *(++code))) printf(" [^%c]", c);
- else printf(" [^\\x%02x]", c);
- break;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- if (isprint(c = code[1])) printf(" [^%c]", c);
- else printf(" [^\\x%02x]", c);
- printf("%s", OP_names[*code++]);
- break;
-
- case OP_NOTEXACT:
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- if (isprint(c = code[3])) printf(" [^%c]{", c);
- else printf(" [^\\x%02x]{", c);
- if (*code != OP_NOTEXACT) printf(",");
- printf("%d}", (code[1] << 8) + code[2]);
- if (*code == OP_NOTMINUPTO) printf("?");
- code += 3;
- break;
-
- case OP_REF:
- printf(" \\%d", (code[1] << 8) | code[2]);
- code += 3;
- goto CLASS_REF_REPEAT;
-
- case OP_CLASS:
- {
- int i, min, max;
- code++;
- printf(" [");
-
- for (i = 0; i < 256; i++)
- {
- if ((code[i/8] & (1 << (i&7))) != 0)
- {
- int j;
- for (j = i+1; j < 256; j++)
- if ((code[j/8] & (1 << (j&7))) == 0) break;
- if (i == '-' || i == ']') printf("\\");
- if (isprint(i)) printf("%c", i); else printf("\\x%02x", i);
- if (--j > i)
- {
- printf("-");
- if (j == '-' || j == ']') printf("\\");
- if (isprint(j)) printf("%c", j); else printf("\\x%02x", j);
- }
- i = j;
- }
- }
- printf("]");
- code += 32;
-
- CLASS_REF_REPEAT:
-
- switch(*code)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- printf("%s", OP_names[*code]);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- min = (code[1] << 8) + code[2];
- max = (code[3] << 8) + code[4];
- if (max == 0) printf("{%d,}", min);
- else printf("{%d,%d}", min, max);
- if (*code == OP_CRMINRANGE) printf("?");
- code += 4;
- break;
-
- default:
- code--;
- }
- }
- break;
-
- /* Anything else is just a one-node item */
-
- default:
- printf(" %s", OP_names[*code]);
- break;
- }
-
- code++;
- printf("\n");
- }
-printf("------------------------------------------------------------------\n");
-
-/* This check is done here in the debugging case so that the code that
-was compiled can be seen. */
-
-if (code - re->code > length)
- {
- *errorptr = ERR23;
- (pcre_free)(re);
- *erroroffset = ptr - (uschar *)pattern;
- return NULL;
- }
-#endif
-
-return (pcre *)re;
-}
-
-
-
-/*************************************************
-* Match a back-reference *
-*************************************************/
-
-/* If a back reference hasn't been set, the length that is passed is greater
-than the number of characters left in the string, so the match fails.
-
-Arguments:
- offset index into the offset vector
- eptr points into the subject
- length length to be matched
- md points to match data block
- ims the ims flags
-
-Returns: TRUE if matched
-*/
-
-static BOOL
-match_ref(int offset, register const uschar *eptr, int length, match_data *md,
- unsigned long int ims)
-{
-const uschar *p = md->start_subject + md->offset_vector[offset];
-
-#ifdef DEBUG
-if (eptr >= md->end_subject)
- printf("matching subject <null>");
-else
- {
- printf("matching subject ");
- pchars(eptr, length, TRUE, md);
- }
-printf(" against backref ");
-pchars(p, length, FALSE, md);
-printf("\n");
-#endif
-
-/* Always fail if not enough characters left */
-
-if (length > md->end_subject - eptr) return FALSE;
-
-/* Separate the caselesss case for speed */
-
-if ((ims & PCRE_CASELESS) != 0)
- {
- while (length-- > 0)
- if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
- }
-else
- { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
-
-return TRUE;
-}
-
-
-
-/*************************************************
-* Match from current position *
-*************************************************/
-
-/* On entry ecode points to the first opcode, and eptr to the first character
-in the subject string, while eptrb holds the value of eptr at the start of the
-last bracketed group - used for breaking infinite loops matching zero-length
-strings.
-
-Arguments:
- eptr pointer in subject
- ecode position in code
- offset_top current top pointer
- md pointer to "static" info for the match
- ims current /i, /m, and /s options
- eptrb pointer to chain of blocks containing eptr at start of
- brackets - for testing for empty matches
- flags can contain
- match_condassert - this is an assertion condition
- match_isgroup - this is the start of a bracketed group
-
-Returns: TRUE if matched
-*/
-
-static BOOL
-match(register const uschar *eptr, register const uschar *ecode,
- int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
- int flags)
-{
-unsigned long int original_ims = ims; /* Save for resetting on ')' */
-eptrblock newptrb;
-
-/* At the start of a bracketed group, add the current subject pointer to the
-stack of such pointers, to be re-instated at the end of the group when we hit
-the closing ket. When match() is called in other circumstances, we don't add to
-the stack. */
-
-if ((flags & match_isgroup) != 0)
- {
- newptrb.prev = eptrb;
- newptrb.saved_eptr = eptr;
- eptrb = &newptrb;
- }
-
-/* Now start processing the operations. */
-
-for (;;)
- {
- int op = (int)*ecode;
- int min, max, ctype;
- register int i;
- register int c;
- BOOL minimize = FALSE;
-
- /* Opening capturing bracket. If there is space in the offset vector, save
- the current subject position in the working slot at the top of the vector. We
- mustn't change the current values of the data slot, because they may be set
- from a previous iteration of this group, and be referred to by a reference
- inside the group.
-
- If the bracket fails to match, we need to restore this value and also the
- values of the final offsets, in case they were set by a previous iteration of
- the same bracket.
-
- If there isn't enough space in the offset vector, treat this as if it were a
- non-capturing bracket. Don't worry about setting the flag for the error case
- here; that is handled in the code for KET. */
-
- if (op > OP_BRA)
- {
- int offset;
- int number = op - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out the
- number from a dummy opcode at the start. */
-
- if (number > EXTRACT_BASIC_MAX) number = (ecode[4] << 8) | ecode[5];
- offset = number << 1;
-
-#ifdef DEBUG
- printf("start bracket %d subject=", number);
- pchars(eptr, 16, TRUE, md);
- printf("\n");
-#endif
-
- if (offset < md->offset_max)
- {
- int save_offset1 = md->offset_vector[offset];
- int save_offset2 = md->offset_vector[offset+1];
- int save_offset3 = md->offset_vector[md->offset_end - number];
-
- DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
- md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
-
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
-
- DPRINTF(("bracket %d failed\n", number));
-
- md->offset_vector[offset] = save_offset1;
- md->offset_vector[offset+1] = save_offset2;
- md->offset_vector[md->offset_end - number] = save_offset3;
-
- return FALSE;
- }
-
- /* Insufficient room for saving captured contents */
-
- else op = OP_BRA;
- }
-
- /* Other types of node can be handled by a switch */
-
- switch(op)
- {
- case OP_BRA: /* Non-capturing bracket: optimized */
- DPRINTF(("start bracket 0\n"));
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
- DPRINTF(("bracket 0 failed\n"));
- return FALSE;
-
- /* Conditional group: compilation checked that there are no more than
- two branches. If the condition is false, skipping the first branch takes us
- past the end if there is only one branch, but that's OK because that is
- exactly what going to the ket would do. */
-
- case OP_COND:
- if (ecode[3] == OP_CREF) /* Condition is extraction test */
- {
- int offset = (ecode[4] << 9) | (ecode[5] << 1); /* Doubled ref number */
- return match(eptr,
- ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
- 6 : 3 + (ecode[1] << 8) + ecode[2]),
- offset_top, md, ims, eptrb, match_isgroup);
- }
-
- /* The condition is an assertion. Call match() to evaluate it - setting
- the final argument TRUE causes it to stop at the end of an assertion. */
-
- else
- {
- if (match(eptr, ecode+3, offset_top, md, ims, NULL,
- match_condassert | match_isgroup))
- {
- ecode += 3 + (ecode[4] << 8) + ecode[5];
- while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
- }
- else ecode += (ecode[1] << 8) + ecode[2];
- return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
- }
- /* Control never reaches here */
-
- /* Skip over conditional reference or large extraction number data if
- encountered. */
-
- case OP_CREF:
- case OP_BRANUMBER:
- ecode += 3;
- break;
-
- /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched
- an empty string - recursion will then try other alternatives, if any. */
-
- case OP_END:
- if (md->notempty && eptr == md->start_match) return FALSE;
- md->end_match_ptr = eptr; /* Record where we ended */
- md->end_offset_top = offset_top; /* and how many extracts were taken */
- return TRUE;
-
- /* Change option settings */
-
- case OP_OPT:
- ims = ecode[1];
- ecode += 2;
- DPRINTF(("ims set to %02lx\n", ims));
- break;
-
- /* Assertion brackets. Check the alternative branches in turn - the
- matching won't pass the KET for an assertion. If any one branch matches,
- the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
- start of each branch to move the current point backwards, so the code at
- this level is identical to the lookahead case. */
-
- case OP_ASSERT:
- case OP_ASSERTBACK:
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
- if (*ecode == OP_KET) return FALSE;
-
- /* If checking an assertion for a condition, return TRUE. */
-
- if ((flags & match_condassert) != 0) return TRUE;
-
- /* Continue from after the assertion, updating the offsets high water
- mark, since extracts may have been taken during the assertion. */
-
- do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
- ecode += 3;
- offset_top = md->end_offset_top;
- continue;
-
- /* Negative assertion: all branches must fail to match */
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK_NOT:
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
- return FALSE;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
-
- if ((flags & match_condassert) != 0) return TRUE;
-
- ecode += 3;
- continue;
-
- /* Move the subject pointer back. This occurs only at the start of
- each branch of a lookbehind assertion. If we are too close to the start to
- move back, this match function fails. When working with UTF-8 we move
- back a number of characters, not bytes. */
-
- case OP_REVERSE:
-#ifdef SUPPORT_UTF8
- c = (ecode[1] << 8) + ecode[2];
- for (i = 0; i < c; i++)
- {
- eptr--;
- BACKCHAR(eptr)
- }
-#else
- eptr -= (ecode[1] << 8) + ecode[2];
-#endif
-
- if (eptr < md->start_subject) return FALSE;
- ecode += 3;
- break;
-
- /* Recursion matches the current regex, nested. If there are any capturing
- brackets started but not finished, we have to save their starting points
- and reinstate them after the recursion. However, we don't know how many
- such there are (offset_top records the completed total) so we just have
- to save all the potential data. There may be up to 99 such values, which
- is a bit large to put on the stack, but using malloc for small numbers
- seems expensive. As a compromise, the stack is used when there are fewer
- than 16 values to store; otherwise malloc is used. A problem is what to do
- if the malloc fails ... there is no way of returning to the top level with
- an error. Save the top 15 values on the stack, and accept that the rest
- may be wrong. */
-
- case OP_RECURSE:
- {
- BOOL rc;
- int *save;
- int stacksave[15];
-
- c = md->offset_max;
-
- if (c < 16) save = stacksave; else
- {
- save = (int *)(pcre_malloc)((c+1) * sizeof(int));
- if (save == NULL)
- {
- save = stacksave;
- c = 15;
- }
- }
-
- for (i = 1; i <= c; i++)
- save[i] = md->offset_vector[md->offset_end - i];
- rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
- match_isgroup);
- for (i = 1; i <= c; i++)
- md->offset_vector[md->offset_end - i] = save[i];
- if (save != stacksave) (pcre_free)(save);
- if (!rc) return FALSE;
-
- /* In case the recursion has set more capturing values, save the final
- number, then move along the subject till after the recursive match,
- and advance one byte in the pattern code. */
-
- offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
- ecode++;
- }
- break;
-
- /* "Once" brackets are like assertion brackets except that after a match,
- the point in the subject string is not moved back. Thus there can never be
- a move back into the brackets. Check the alternative branches in turn - the
- matching won't pass the KET for this kind of subpattern. If any one branch
- matches, we carry on as at the end of a normal bracket, leaving the subject
- pointer. */
-
- case OP_ONCE:
- {
- const uschar *prev = ecode;
- const uschar *saved_eptr = eptr;
-
- do
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
- break;
- ecode += (ecode[1] << 8) + ecode[2];
- }
- while (*ecode == OP_ALT);
-
- /* If hit the end of the group (which could be repeated), fail */
-
- if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
-
- /* Continue as from after the assertion, updating the offsets high water
- mark, since extracts may have been taken. */
-
- do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
-
- offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*ecode == OP_KET || eptr == saved_eptr)
- {
- ecode += 3;
- break;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. We need to reset any options
- that changed within the bracket before re-running it, so check the next
- opcode. */
-
- if (ecode[3] == OP_OPT)
- {
- ims = (ims & ~PCRE_IMS) | ecode[4];
- DPRINTF(("ims set to %02lx at group repeat\n", ims));
- }
-
- if (*ecode == OP_KETRMIN)
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
- match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- }
- else /* OP_KETRMAX */
- {
- if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
- match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
- }
- }
- return FALSE;
-
- /* An alternation is the end of a branch; scan along to find the end of the
- bracketed group and go to there. */
-
- case OP_ALT:
- do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
- break;
-
- /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
- that it may occur zero times. It may repeat infinitely, or not at all -
- i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
- repeat limits are compiled as a number of copies, with the optional ones
- preceded by BRAZERO or BRAMINZERO. */
-
- case OP_BRAZERO:
- {
- const uschar *next = ecode+1;
- if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
- ecode = next + 3;
- }
- break;
-
- case OP_BRAMINZERO:
- {
- const uschar *next = ecode+1;
- do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
- if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- ecode++;
- }
- break;
-
- /* End of a group, repeated or non-repeating. If we are at the end of
- an assertion "group", stop matching and return TRUE, but record the
- current high water mark for use by positive assertions. Do this also
- for the "once" (not-backup up) groups. */
-
- case OP_KET:
- case OP_KETRMIN:
- case OP_KETRMAX:
- {
- const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
- const uschar *saved_eptr = eptrb->saved_eptr;
-
- eptrb = eptrb->prev; /* Back up the stack of bracket start pointers */
-
- if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
- *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
- *prev == OP_ONCE)
- {
- md->end_match_ptr = eptr; /* For ONCE */
- md->end_offset_top = offset_top;
- return TRUE;
- }
-
- /* In all other cases except a conditional group we have to check the
- group number back at the start and if necessary complete handling an
- extraction by setting the offsets and bumping the high water mark. */
-
- if (*prev != OP_COND)
- {
- int offset;
- int number = *prev - OP_BRA;
-
- /* For extended extraction brackets (large number), we have to fish out
- the number from a dummy opcode at the start. */
-
- if (number > EXTRACT_BASIC_MAX) number = (prev[4] << 8) | prev[5];
- offset = number << 1;
-
-#ifdef DEBUG
- printf("end bracket %d", number);
- printf("\n");
-#endif
-
- if (number > 0)
- {
- if (offset >= md->offset_max) md->offset_overflow = TRUE; else
- {
- md->offset_vector[offset] =
- md->offset_vector[md->offset_end - number];
- md->offset_vector[offset+1] = eptr - md->start_subject;
- if (offset_top <= offset) offset_top = offset + 2;
- }
- }
- }
-
- /* Reset the value of the ims flags, in case they got changed during
- the group. */
-
- ims = original_ims;
- DPRINTF(("ims reset to %02lx\n", ims));
-
- /* For a non-repeating ket, just continue at this level. This also
- happens for a repeating ket if no characters were matched in the group.
- This is the forcible breaking of infinite loops as implemented in Perl
- 5.005. If there is an options reset, it will get obeyed in the normal
- course of events. */
-
- if (*ecode == OP_KET || eptr == saved_eptr)
- {
- ecode += 3;
- break;
- }
-
- /* The repeating kets try the rest of the pattern or restart from the
- preceding bracket, in the appropriate order. */
-
- if (*ecode == OP_KETRMIN)
- {
- if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
- match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
- return TRUE;
- }
- else /* OP_KETRMAX */
- {
- if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
- match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
- }
- }
- return FALSE;
-
- /* Start of subject unless notbol, or after internal newline if multiline */
-
- case OP_CIRC:
- if (md->notbol && eptr == md->start_subject) return FALSE;
- if ((ims & PCRE_MULTILINE) != 0)
- {
- if (eptr != md->start_subject && eptr[-1] != NEWLINE) return FALSE;
- ecode++;
- break;
- }
- /* ... else fall through */
-
- /* Start of subject assertion */
-
- case OP_SOD:
- if (eptr != md->start_subject) return FALSE;
- ecode++;
- break;
-
- /* Assert before internal newline if multiline, or before a terminating
- newline unless endonly is set, else end of subject unless noteol is set. */
-
- case OP_DOLL:
- if ((ims & PCRE_MULTILINE) != 0)
- {
- if (eptr < md->end_subject) { if (*eptr != NEWLINE) return FALSE; }
- else { if (md->noteol) return FALSE; }
- ecode++;
- break;
- }
- else
- {
- if (md->noteol) return FALSE;
- if (!md->endonly)
- {
- if (eptr < md->end_subject - 1 ||
- (eptr == md->end_subject - 1 && *eptr != NEWLINE)) return FALSE;
-
- ecode++;
- break;
- }
- }
- /* ... else fall through */
-
- /* End of subject assertion (\z) */
-
- case OP_EOD:
- if (eptr < md->end_subject) return FALSE;
- ecode++;
- break;
-
- /* End of subject or ending \n assertion (\Z) */
-
- case OP_EODN:
- if (eptr < md->end_subject - 1 ||
- (eptr == md->end_subject - 1 && *eptr != NEWLINE)) return FALSE;
- ecode++;
- break;
-
- /* Word boundary assertions */
-
- case OP_NOT_WORD_BOUNDARY:
- case OP_WORD_BOUNDARY:
- {
- BOOL prev_is_word = (eptr != md->start_subject) &&
- ((md->ctypes[eptr[-1]] & ctype_word) != 0);
- BOOL cur_is_word = (eptr < md->end_subject) &&
- ((md->ctypes[*eptr] & ctype_word) != 0);
- if ((*ecode++ == OP_WORD_BOUNDARY)?
- cur_is_word == prev_is_word : cur_is_word != prev_is_word)
- return FALSE;
- }
- break;
-
- /* Match a single character type; inline for speed */
-
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE)
- return FALSE;
- if (eptr++ >= md->end_subject) return FALSE;
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-#endif
- ecode++;
- break;
-
- case OP_NOT_DIGIT:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_digit) != 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_DIGIT:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_digit) == 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_NOT_WHITESPACE:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_space) != 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_WHITESPACE:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_space) == 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_NOT_WORDCHAR:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_word) != 0)
- return FALSE;
- ecode++;
- break;
-
- case OP_WORDCHAR:
- if (eptr >= md->end_subject ||
- (md->ctypes[*eptr++] & ctype_word) == 0)
- return FALSE;
- ecode++;
- break;
-
- /* Match a back reference, possibly repeatedly. Look past the end of the
- item to see if there is repeat information following. The code is similar
- to that for character classes, but repeated for efficiency. Then obey
- similar code to character type repeats - written out again for speed.
- However, if the referenced string is the empty string, always treat
- it as matched, any number of times (otherwise there could be infinite
- loops). */
-
- case OP_REF:
- {
- int length;
- int offset = (ecode[1] << 9) | (ecode[2] << 1); /* Doubled ref number */
- ecode += 3; /* Advance past item */
-
- /* If the reference is unset, set the length to be longer than the amount
- of subject left; this ensures that every attempt at a match fails. We
- can't just fail here, because of the possibility of quantifiers with zero
- minima. */
-
- length = (offset >= offset_top || md->offset_vector[offset] < 0)?
- md->end_subject - eptr + 1 :
- md->offset_vector[offset+1] - md->offset_vector[offset];
-
- /* Set up for repetition, or handle the non-repeated case */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = (ecode[1] << 8) + ecode[2];
- max = (ecode[3] << 8) + ecode[4];
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
- eptr += length;
- continue; /* With the main loop */
- }
-
- /* If the length of the reference is zero, just continue with the
- main loop. */
-
- if (length == 0) continue;
-
- /* First, ensure the minimum number of matches are present. We get back
- the length of the reference string explicitly rather than passing the
- address of eptr, so that eptr can be a register variable. */
-
- for (i = 1; i <= min; i++)
- {
- if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
- eptr += length;
- }
-
- /* If min = max, continue at the same level without recursion.
- They are not both allowed to be zero. */
-
- if (min == max) continue;
-
- /* If minimizing, keep trying and advancing the pointer */
-
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || !match_ref(offset, eptr, length, md, ims))
- return FALSE;
- eptr += length;
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest string and work backwards */
-
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (!match_ref(offset, eptr, length, md, ims)) break;
- eptr += length;
- }
- while (eptr >= pp)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- eptr -= length;
- }
- return FALSE;
- }
- }
- /* Control never gets here */
-
-
-
- /* Match a character class, possibly repeatedly. Look past the end of the
- item to see if there is repeat information following. Then obey similar
- code to character type repeats - written out again for speed. */
-
- case OP_CLASS:
- {
- const uschar *data = ecode + 1; /* Save for matching */
- ecode += 33; /* Advance past the item */
-
- switch (*ecode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- c = *ecode++ - OP_CRSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- minimize = (*ecode == OP_CRMINRANGE);
- min = (ecode[1] << 8) + ecode[2];
- max = (ecode[3] << 8) + ecode[4];
- if (max == 0) max = INT_MAX;
- ecode += 5;
- break;
-
- default: /* No repeat follows */
- min = max = 1;
- break;
- }
-
- /* First, ensure the minimum number of matches are present. */
-
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject) return FALSE;
- GETCHARINC(c, eptr) /* Get character; increment eptr */
-
-#ifdef SUPPORT_UTF8
- /* We do not yet support class members > 255 */
- if (c > 255) return FALSE;
-#endif
-
- if ((data[c/8] & (1 << (c&7))) != 0) continue;
- return FALSE;
- }
-
- /* If max == min we can continue with the main loop without the
- need to recurse. */
-
- if (min == max) continue;
-
- /* If minimizing, keep testing the rest of the expression and advancing
- the pointer while it matches the class. */
-
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject) return FALSE;
- GETCHARINC(c, eptr) /* Get character; increment eptr */
-
-#ifdef SUPPORT_UTF8
- /* We do not yet support class members > 255 */
- if (c > 255) return FALSE;
-#endif
- if ((data[c/8] & (1 << (c&7))) != 0) continue;
- return FALSE;
- }
- /* Control never gets here */
- }
-
- /* If maximizing, find the longest possible run, then work backwards. */
-
- else
- {
- const uschar *pp = eptr;
- int len = 1;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject) break;
- GETCHARLEN(c, eptr, len) /* Get character, set length if UTF-8 */
-
-#ifdef SUPPORT_UTF8
- /* We do not yet support class members > 255 */
- if (c > 255) break;
-#endif
- if ((data[c/8] & (1 << (c&7))) == 0) break;
- eptr += len;
- }
-
- while (eptr >= pp)
- {
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
-
-#ifdef SUPPORT_UTF8
- BACKCHAR(eptr)
-#endif
- }
- return FALSE;
- }
- }
- /* Control never gets here */
-
- /* Match a run of characters */
-
- case OP_CHARS:
- {
- register int length = ecode[1];
- ecode += 2;
-
-#ifdef DEBUG /* Sigh. Some compilers never learn. */
- if (eptr >= md->end_subject)
- printf("matching subject <null> against pattern ");
- else
- {
- printf("matching subject ");
- pchars(eptr, length, TRUE, md);
- printf(" against pattern ");
- }
- pchars(ecode, length, FALSE, md);
- printf("\n");
-#endif
-
- if (length > md->end_subject - eptr) return FALSE;
- if ((ims & PCRE_CASELESS) != 0)
- {
- while (length-- > 0)
- if (md->lcc[*ecode++] != md->lcc[*eptr++])
- return FALSE;
- }
- else
- {
- while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
- }
- }
- break;
-
- /* Match a single character repeatedly; different opcodes share code. */
-
- case OP_EXACT:
- min = max = (ecode[1] << 8) + ecode[2];
- ecode += 3;
- goto REPEATCHAR;
-
- case OP_UPTO:
- case OP_MINUPTO:
- min = 0;
- max = (ecode[1] << 8) + ecode[2];
- minimize = *ecode == OP_MINUPTO;
- ecode += 3;
- goto REPEATCHAR;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- c = *ecode++ - OP_STAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single-character matches. We can give
- up quickly if there are fewer than the minimum number of characters left in
- the subject. */
-
- REPEATCHAR:
- if (min > md->end_subject - eptr) return FALSE;
- c = *ecode++;
-
- /* The code is duplicated for the caseless and caseful cases, for speed,
- since matching characters is likely to be quite common. First, ensure the
- minimum number of matches are present. If min = max, continue at the same
- level without recursing. Otherwise, if minimizing, keep trying the rest of
- the expression and advancing one matching character if failing, up to the
- maximum. Alternatively, if maximizing, find the maximum number of
- characters and work backwards. */
-
- DPRINTF(("matching %c{%d,%d} against subject %.*s\n", c, min, max,
- max, eptr));
-
- if ((ims & PCRE_CASELESS) != 0)
- {
- c = md->lcc[c];
- for (i = 1; i <= min; i++)
- if (c != md->lcc[*eptr++]) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject ||
- c != md->lcc[*eptr++])
- return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- /* Control never gets here */
- }
-
- /* Caseful comparisons */
-
- else
- {
- for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c != *eptr) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- }
- /* Control never gets here */
-
- /* Match a negated single character */
-
- case OP_NOT:
- if (eptr >= md->end_subject) return FALSE;
- ecode++;
- if ((ims & PCRE_CASELESS) != 0)
- {
- if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
- }
- else
- {
- if (*ecode++ == *eptr++) return FALSE;
- }
- break;
-
- /* Match a negated single character repeatedly. This is almost a repeat of
- the code for a repeated single character, but I haven't found a nice way of
- commoning these up that doesn't require a test of the positive/negative
- option for each character match. Maybe that wouldn't add very much to the
- time taken, but character matching *is* what this is all about... */
-
- case OP_NOTEXACT:
- min = max = (ecode[1] << 8) + ecode[2];
- ecode += 3;
- goto REPEATNOTCHAR;
-
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- min = 0;
- max = (ecode[1] << 8) + ecode[2];
- minimize = *ecode == OP_NOTMINUPTO;
- ecode += 3;
- goto REPEATNOTCHAR;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- c = *ecode++ - OP_NOTSTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single-character matches. We can give
- up quickly if there are fewer than the minimum number of characters left in
- the subject. */
-
- REPEATNOTCHAR:
- if (min > md->end_subject - eptr) return FALSE;
- c = *ecode++;
-
- /* The code is duplicated for the caseless and caseful cases, for speed,
- since matching characters is likely to be quite common. First, ensure the
- minimum number of matches are present. If min = max, continue at the same
- level without recursing. Otherwise, if minimizing, keep trying the rest of
- the expression and advancing one matching character if failing, up to the
- maximum. Alternatively, if maximizing, find the maximum number of
- characters and work backwards. */
-
- DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", c, min, max,
- max, eptr));
-
- if ((ims & PCRE_CASELESS) != 0)
- {
- c = md->lcc[c];
- for (i = 1; i <= min; i++)
- if (c == md->lcc[*eptr++]) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject ||
- c == md->lcc[*eptr++])
- return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- /* Control never gets here */
- }
-
- /* Caseful comparisons */
-
- else
- {
- for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
- if (min == max) continue;
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
- }
- /* Control never gets here */
- }
- else
- {
- const uschar *pp = eptr;
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || c == *eptr) break;
- eptr++;
- }
- while (eptr >= pp)
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
- return FALSE;
- }
- }
- /* Control never gets here */
-
- /* Match a single character type repeatedly; several different opcodes
- share code. This is very similar to the code for single characters, but we
- repeat it in the interests of efficiency. */
-
- case OP_TYPEEXACT:
- min = max = (ecode[1] << 8) + ecode[2];
- minimize = TRUE;
- ecode += 3;
- goto REPEATTYPE;
-
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- min = 0;
- max = (ecode[1] << 8) + ecode[2];
- minimize = *ecode == OP_TYPEMINUPTO;
- ecode += 3;
- goto REPEATTYPE;
-
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- c = *ecode++ - OP_TYPESTAR;
- minimize = (c & 1) != 0;
- min = rep_min[c]; /* Pick up values from tables; */
- max = rep_max[c]; /* zero for max => infinity */
- if (max == 0) max = INT_MAX;
-
- /* Common code for all repeated single character type matches */
-
- REPEATTYPE:
- ctype = *ecode++; /* Code for the character type */
-
- /* First, ensure the minimum number of matches are present. Use inline
- code for maximizing the speed, and do the type test once at the start
- (i.e. keep it out of the loop). Also we can test that there are at least
- the minimum number of bytes before we start, except when doing '.' in
- UTF8 mode. Leave the test in in all cases; in the special case we have
- to test after each character. */
-
- if (min > md->end_subject - eptr) return FALSE;
- if (min > 0) switch(ctype)
- {
- case OP_ANY:
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- {
- for (i = 1; i <= min; i++)
- {
- if (eptr >= md->end_subject ||
- (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0))
- return FALSE;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- break;
- }
-#endif
- /* Non-UTF8 can be faster */
- if ((ims & PCRE_DOTALL) == 0)
- { for (i = 1; i <= min; i++) if (*eptr++ == NEWLINE) return FALSE; }
- else eptr += min;
- break;
-
- case OP_NOT_DIGIT:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
- break;
-
- case OP_DIGIT:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
- break;
-
- case OP_WHITESPACE:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_word) != 0)
- return FALSE;
- break;
-
- case OP_WORDCHAR:
- for (i = 1; i <= min; i++)
- if ((md->ctypes[*eptr++] & ctype_word) == 0)
- return FALSE;
- break;
- }
-
- /* If min = max, continue at the same level without recursing */
-
- if (min == max) continue;
-
- /* If minimizing, we have to test the rest of the pattern before each
- subsequent match. */
-
- if (minimize)
- {
- for (i = min;; i++)
- {
- if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
- if (i >= max || eptr >= md->end_subject) return FALSE;
-
- c = *eptr++;
- switch(ctype)
- {
- case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) return FALSE;
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-#endif
- break;
-
- case OP_NOT_DIGIT:
- if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
- break;
-
- case OP_DIGIT:
- if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
- break;
-
- case OP_NOT_WHITESPACE:
- if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
- break;
-
- case OP_WHITESPACE:
- if ((md->ctypes[c] & ctype_space) == 0) return FALSE;
- break;
-
- case OP_NOT_WORDCHAR:
- if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
- break;
-
- case OP_WORDCHAR:
- if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
- break;
- }
- }
- /* Control never gets here */
- }
-
- /* If maximizing it is worth using inline code for speed, doing the type
- test once at the start (i.e. keep it out of the loop). */
-
- else
- {
- const uschar *pp = eptr;
- switch(ctype)
- {
- case OP_ANY:
-
- /* Special code is required for UTF8, but when the maximum is unlimited
- we don't need it. */
-
-#ifdef SUPPORT_UTF8
- if (md->utf8 && max < INT_MAX)
- {
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr++ == NEWLINE) break;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- else
- {
- for (i = min; i < max; i++)
- {
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- break;
- }
-#endif
- /* Non-UTF8 can be faster */
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || *eptr == NEWLINE) break;
- eptr++;
- }
- }
- else
- {
- c = max - min;
- if (c > md->end_subject - eptr) c = md->end_subject - eptr;
- eptr += c;
- }
- break;
-
- case OP_NOT_DIGIT:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_DIGIT:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
- break;
- eptr++;
- }
- break;
-
- case OP_NOT_WHITESPACE:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_WHITESPACE:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
- break;
- eptr++;
- }
- break;
-
- case OP_NOT_WORDCHAR:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
- break;
- eptr++;
- }
- break;
-
- case OP_WORDCHAR:
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
- break;
- eptr++;
- }
- break;
- }
-
- while (eptr >= pp)
- {
- if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
- return TRUE;
-#ifdef SUPPORT_UTF8
- if (md->utf8)
- while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
-#endif
- }
- return FALSE;
- }
- /* Control never gets here */
-
- /* There's been some horrible disaster. */
-
- default:
- DPRINTF(("Unknown opcode %d\n", *ecode));
- md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
- return FALSE;
- }
-
- /* Do not stick any code in here without much thought; it is assumed
- that "continue" in the code above comes out to here to repeat the main
- loop. */
-
- } /* End of main loop */
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-* Execute a Regular Expression *
-*************************************************/
-
-/* This function applies a compiled re to a subject string and picks out
-portions of the string if it matches. Two elements in the vector are set for
-each substring: the offsets to the start and end of the substring.
-
-Arguments:
- external_re points to the compiled expression
- external_extra points to "hints" from pcre_study() or is NULL
- subject points to the subject string
- length length of subject string (may contain binary zeros)
- start_offset where to start in the subject string
- options option bits
- offsets points to a vector of ints to be filled in with offsets
- offsetcount the number of elements in the vector
-
-Returns: > 0 => success; value is the number of elements filled in
- = 0 => success, but offsets is not big enough
- -1 => failed to match
- < -1 => some kind of unexpected problem
-*/
-
-int
-pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
- const char *subject, int length, int start_offset, int options, int *offsets,
- int offsetcount)
-{
-int resetcount, ocount;
-int first_char = -1;
-int req_char = -1;
-int req_char2 = -1;
-unsigned long int ims = 0;
-match_data match_block;
-const uschar *start_bits = NULL;
-const uschar *start_match = (const uschar *)subject + start_offset;
-const uschar *end_subject;
-const uschar *req_char_ptr = start_match - 1;
-const real_pcre *re = (const real_pcre *)external_re;
-const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
-BOOL using_temporary_offsets = FALSE;
-BOOL anchored;
-BOOL startline;
-
-if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
-
-if (re == NULL || subject == NULL ||
- (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
-startline = (re->options & PCRE_STARTLINE) != 0;
-
-match_block.start_pattern = re->code;
-match_block.start_subject = (const uschar *)subject;
-match_block.end_subject = match_block.start_subject + length;
-end_subject = match_block.end_subject;
-
-match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
-match_block.utf8 = (re->options & PCRE_UTF8) != 0;
-
-match_block.notbol = (options & PCRE_NOTBOL) != 0;
-match_block.noteol = (options & PCRE_NOTEOL) != 0;
-match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
-
-match_block.errorcode = PCRE_ERROR_NOMATCH; /* Default error */
-
-match_block.lcc = re->tables + lcc_offset;
-match_block.ctypes = re->tables + ctypes_offset;
-
-/* The ims options can vary during the matching as a result of the presence
-of (?ims) items in the pattern. They are kept in a local variable so that
-restoring at the exit of a group is easy. */
-
-ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
-
-/* If the expression has got more back references than the offsets supplied can
-hold, we get a temporary bit of working store to use during the matching.
-Otherwise, we can use the vector supplied, rounding down its size to a multiple
-of 3. */
-
-ocount = offsetcount - (offsetcount % 3);
-
-if (re->top_backref > 0 && re->top_backref >= ocount/3)
- {
- ocount = re->top_backref * 3 + 3;
- match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
- if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
- using_temporary_offsets = TRUE;
- DPRINTF(("Got memory to hold back references\n"));
- }
-else match_block.offset_vector = offsets;
-
-match_block.offset_end = ocount;
-match_block.offset_max = (2*ocount)/3;
-match_block.offset_overflow = FALSE;
-
-/* Compute the minimum number of offsets that we need to reset each time. Doing
-this makes a huge difference to execution time when there aren't many brackets
-in the pattern. */
-
-resetcount = 2 + re->top_bracket * 2;
-if (resetcount > offsetcount) resetcount = ocount;
-
-/* Reset the working variable associated with each extraction. These should
-never be used unless previously set, but they get saved and restored, and so we
-initialize them to avoid reading uninitialized locations. */
-
-if (match_block.offset_vector != NULL)
- {
- register int *iptr = match_block.offset_vector + ocount;
- register int *iend = iptr - resetcount/2 + 1;
- while (--iptr >= iend) *iptr = -1;
- }
-
-/* Set up the first character to match, if available. The first_char value is
-never set for an anchored regular expression, but the anchoring may be forced
-at run time, so we have to test for anchoring. The first char may be unset for
-an unanchored pattern, of course. If there's no first char and the pattern was
-studied, there may be a bitmap of possible first characters. */
-
-if (!anchored)
- {
- if ((re->options & PCRE_FIRSTSET) != 0)
- {
- first_char = re->first_char;
- if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
- }
- else
- if (!startline && extra != NULL &&
- (extra->options & PCRE_STUDY_MAPPED) != 0)
- start_bits = extra->start_bits;
- }
-
-/* For anchored or unanchored matches, there may be a "last known required
-character" set. If the PCRE_CASELESS is set, implying that the match starts
-caselessly, or if there are any changes of this flag within the regex, set up
-both cases of the character. Otherwise set the two values the same, which will
-avoid duplicate testing (which takes significant time). This covers the vast
-majority of cases. It will be suboptimal when the case flag changes in a regex
-and the required character in fact is caseful. */
-
-if ((re->options & PCRE_REQCHSET) != 0)
- {
- req_char = re->req_char;
- req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
- (re->tables + fcc_offset)[req_char] : req_char;
- }
-
-/* Loop for handling unanchored repeated matching attempts; for anchored regexs
-the loop runs just once. */
-
-do
- {
- int rc;
- register int *iptr = match_block.offset_vector;
- register int *iend = iptr + resetcount;
-
- /* Reset the maximum number of extractions we might see. */
-
- while (iptr < iend) *iptr++ = -1;
-
- /* Advance to a unique first char if possible */
-
- if (first_char >= 0)
- {
- if ((ims & PCRE_CASELESS) != 0)
- while (start_match < end_subject &&
- match_block.lcc[*start_match] != first_char)
- start_match++;
- else
- while (start_match < end_subject && *start_match != first_char)
- start_match++;
- }
-
- /* Or to just after \n for a multiline match if possible */
-
- else if (startline)
- {
- if (start_match > match_block.start_subject + start_offset)
- {
- while (start_match < end_subject && start_match[-1] != NEWLINE)
- start_match++;
- }
- }
-
- /* Or to a non-unique first char after study */
-
- else if (start_bits != NULL)
- {
- while (start_match < end_subject)
- {
- register int c = *start_match;
- if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
- }
- }
-
-#ifdef DEBUG /* Sigh. Some compilers never learn. */
- printf(">>>> Match against: ");
- pchars(start_match, end_subject - start_match, TRUE, &match_block);
- printf("\n");
-#endif
-
- /* If req_char is set, we know that that character must appear in the subject
- for the match to succeed. If the first character is set, req_char must be
- later in the subject; otherwise the test starts at the match point. This
- optimization can save a huge amount of backtracking in patterns with nested
- unlimited repeats that aren't going to match. We don't know what the state of
- case matching may be when this character is hit, so test for it in both its
- cases if necessary. However, the different cased versions will not be set up
- unless PCRE_CASELESS was given or the casing state changes within the regex.
- Writing separate code makes it go faster, as does using an autoincrement and
- backing off on a match. */
-
- if (req_char >= 0)
- {
- register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
-
- /* We don't need to repeat the search if we haven't yet reached the
- place we found it at last time. */
-
- if (p > req_char_ptr)
- {
- /* Do a single test if no case difference is set up */
-
- if (req_char == req_char2)
- {
- while (p < end_subject)
- {
- if (*p++ == req_char) { p--; break; }
- }
- }
-
- /* Otherwise test for either case */
-
- else
- {
- while (p < end_subject)
- {
- register int pp = *p++;
- if (pp == req_char || pp == req_char2) { p--; break; }
- }
- }
-
- /* If we can't find the required character, break the matching loop */
-
- if (p >= end_subject) break;
-
- /* If we have found the required character, save the point where we
- found it, so that we don't search again next time round the loop if
- the start hasn't passed this character yet. */
-
- req_char_ptr = p;
- }
- }
-
- /* When a match occurs, substrings will be set for all internal extractions;
- we just need to set up the whole thing as substring 0 before returning. If
- there were too many extractions, set the return code to zero. In the case
- where we had to get some local store to hold offsets for backreferences, copy
- those back references that we can. In this case there need not be overflow
- if certain parts of the pattern were not used. */
-
- match_block.start_match = start_match;
- if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
- continue;
-
- /* Copy the offset information from temporary store if necessary */
-
- if (using_temporary_offsets)
- {
- if (offsetcount >= 4)
- {
- memcpy(offsets + 2, match_block.offset_vector + 2,
- (offsetcount - 2) * sizeof(int));
- DPRINTF(("Copied offsets from temporary memory\n"));
- }
- if (match_block.end_offset_top > offsetcount)
- match_block.offset_overflow = TRUE;
-
- DPRINTF(("Freeing temporary memory\n"));
- (pcre_free)(match_block.offset_vector);
- }
-
- rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
-
- if (offsetcount < 2) rc = 0; else
- {
- offsets[0] = start_match - match_block.start_subject;
- offsets[1] = match_block.end_match_ptr - match_block.start_subject;
- }
-
- DPRINTF((">>>> returning %d\n", rc));
- return rc;
- }
-
-/* This "while" is the end of the "do" above */
-
-while (!anchored &&
- match_block.errorcode == PCRE_ERROR_NOMATCH &&
- start_match++ < end_subject);
-
-if (using_temporary_offsets)
- {
- DPRINTF(("Freeing temporary memory\n"));
- (pcre_free)(match_block.offset_vector);
- }
-
-DPRINTF((">>>> returning %d\n", match_block.errorcode));
-
-return match_block.errorcode;
-}
-
-/* End of pcre.c */
diff --git a/srclib/pcre/pcre.def b/srclib/pcre/pcre.def
deleted file mode 100644
index 0e8cf3f442..0000000000
--- a/srclib/pcre/pcre.def
+++ /dev/null
@@ -1,19 +0,0 @@
-EXPORTS
-
-pcre_malloc DATA
-pcre_free DATA
-
-pcre_compile
-pcre_copy_substring
-pcre_exec
-pcre_get_substring
-pcre_get_substring_list
-pcre_info
-pcre_maketables
-pcre_study
-pcre_version
-
-regcomp
-regexec
-regerror
-regfree
diff --git a/srclib/pcre/pcre.dsp b/srclib/pcre/pcre.dsp
deleted file mode 100644
index fab5d17a41..0000000000
--- a/srclib/pcre/pcre.dsp
+++ /dev/null
@@ -1,193 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pcre" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=pcre - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "pcre.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "pcre.mak" CFG="pcre - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "pcre - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "pcre - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "pcre - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "LibR"
-# PROP Intermediate_Dir "LibR"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibR/pcre_src" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "pcre - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "LibD"
-# PROP Intermediate_Dir "LibD"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibD/pcre_src" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "pcre - Win32 Release"
-# Name "pcre - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\dftables.exe
-
-!IF "$(CFG)" == "pcre - Win32 Release"
-
-# Begin Custom Build - Creating pcre chartables.c from dftables
-InputPath=.\dftables.exe
-
-".\chartables.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- .\dftables.exe >.\chartables.c
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "pcre - Win32 Debug"
-
-# Begin Custom Build - Creating pcre chartables.c from dftables
-InputPath=.\dftables.exe
-
-".\chartables.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- .\dftables.exe >.\chartables.c
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\get.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\maketables.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\study.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\config.hw
-
-!IF "$(CFG)" == "pcre - Win32 Release"
-
-# Begin Custom Build - Creating pcre config.h from config.hw
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\config.hw > .\config.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "pcre - Win32 Debug"
-
-# Begin Custom Build - Creating pcre config.h from config.hw
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\config.hw > .\config.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.hw
-
-!IF "$(CFG)" == "pcre - Win32 Release"
-
-# Begin Custom Build - Creating pcre.h from pcre.hw
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\pcre.hw > .\pcre.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "pcre - Win32 Debug"
-
-# Begin Custom Build - Creating pcre.h from pcre.hw
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\pcre.hw > .\pcre.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/srclib/pcre/pcre.hw b/srclib/pcre/pcre.hw
deleted file mode 100644
index 40d819818e..0000000000
--- a/srclib/pcre/pcre.hw
+++ /dev/null
@@ -1,113 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2001 University of Cambridge */
-
-#ifndef _PCRE_H
-#define _PCRE_H
-
-/* The file pcre.h is build by "configure" or copied from pcre.hw
-Do not edit it; instead make changes to pcre.in and/or pcre.hw */
-
-#define PCRE_MAJOR 3
-#define PCRE_MINOR 9
-#define PCRE_DATE 02-Jan-2002
-
-/* Win32 uses DLL by default */
-
-#ifdef _WIN32
-# ifdef STATIC
-# define PCRE_DL_IMPORT
-# else
-# define PCRE_DL_IMPORT __declspec(dllimport)
-# endif
-#else
-# define PCRE_DL_IMPORT
-#endif
-
-/* Have to include stdlib.h in order to ensure that size_t is defined;
-it is needed here for malloc. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options */
-
-#define PCRE_CASELESS 0x0001
-#define PCRE_MULTILINE 0x0002
-#define PCRE_DOTALL 0x0004
-#define PCRE_EXTENDED 0x0008
-#define PCRE_ANCHORED 0x0010
-#define PCRE_DOLLAR_ENDONLY 0x0020
-#define PCRE_EXTRA 0x0040
-#define PCRE_NOTBOL 0x0080
-#define PCRE_NOTEOL 0x0100
-#define PCRE_UNGREEDY 0x0200
-#define PCRE_NOTEMPTY 0x0400
-#define PCRE_UTF8 0x0800
-
-/* Exec-time and get-time error codes */
-
-#define PCRE_ERROR_NOMATCH (-1)
-#define PCRE_ERROR_NULL (-2)
-#define PCRE_ERROR_BADOPTION (-3)
-#define PCRE_ERROR_BADMAGIC (-4)
-#define PCRE_ERROR_UNKNOWN_NODE (-5)
-#define PCRE_ERROR_NOMEMORY (-6)
-#define PCRE_ERROR_NOSUBSTRING (-7)
-
-/* Request types for pcre_fullinfo() */
-
-#define PCRE_INFO_OPTIONS 0
-#define PCRE_INFO_SIZE 1
-#define PCRE_INFO_CAPTURECOUNT 2
-#define PCRE_INFO_BACKREFMAX 3
-#define PCRE_INFO_FIRSTCHAR 4
-#define PCRE_INFO_FIRSTTABLE 5
-#define PCRE_INFO_LASTLITERAL 6
-
-/* Types */
-
-struct real_pcre; /* declaration; the definition is private */
-struct real_pcre_extra; /* declaration; the definition is private */
-
-typedef struct real_pcre pcre;
-typedef struct real_pcre_extra pcre_extra;
-
-/* Store get and free functions. These can be set to alternative malloc/free
-functions if required. Some magic is required for Win32 DLL; it is null on
-other OS. */
-
-PCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);
-PCRE_DL_IMPORT extern void (*pcre_free)(void *);
-
-#undef PCRE_DL_IMPORT
-
-/* Functions */
-
-extern pcre *pcre_compile(const char *, int, const char **, int *,
- const unsigned char *);
-extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
-extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
- int, int, int, int *, int);
-extern void pcre_free_substring(const char *);
-extern void pcre_free_substring_list(const char **);
-extern int pcre_get_substring(const char *, int *, int, int, const char **);
-extern int pcre_get_substring_list(const char *, int *, int, const char ***);
-extern int pcre_info(const pcre *, int *, int *);
-extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
-extern const unsigned char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcre.h */
diff --git a/srclib/pcre/pcre.in b/srclib/pcre/pcre.in
deleted file mode 100644
index ef3756905e..0000000000
--- a/srclib/pcre/pcre.in
+++ /dev/null
@@ -1,113 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2001 University of Cambridge */
-
-#ifndef _PCRE_H
-#define _PCRE_H
-
-/* The file pcre.h is build by "configure". Do not edit it; instead
-make changes to pcre.in. */
-
-#define PCRE_MAJOR @PCRE_MAJOR@
-#define PCRE_MINOR @PCRE_MINOR@
-#define PCRE_DATE @PCRE_DATE@
-
-/* Win32 uses DLL by default */
-
-#ifdef _WIN32
-# ifdef STATIC
-# define PCRE_DL_IMPORT
-# else
-# define PCRE_DL_IMPORT __declspec(dllimport)
-# endif
-#else
-# define PCRE_DL_IMPORT
-#endif
-
-/* Have to include stdlib.h in order to ensure that size_t is defined;
-it is needed here for malloc. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options */
-
-#define PCRE_CASELESS 0x0001
-#define PCRE_MULTILINE 0x0002
-#define PCRE_DOTALL 0x0004
-#define PCRE_EXTENDED 0x0008
-#define PCRE_ANCHORED 0x0010
-#define PCRE_DOLLAR_ENDONLY 0x0020
-#define PCRE_EXTRA 0x0040
-#define PCRE_NOTBOL 0x0080
-#define PCRE_NOTEOL 0x0100
-#define PCRE_UNGREEDY 0x0200
-#define PCRE_NOTEMPTY 0x0400
-#define PCRE_UTF8 0x0800
-
-/* Exec-time and get-time error codes */
-
-#define PCRE_ERROR_NOMATCH (-1)
-#define PCRE_ERROR_NULL (-2)
-#define PCRE_ERROR_BADOPTION (-3)
-#define PCRE_ERROR_BADMAGIC (-4)
-#define PCRE_ERROR_UNKNOWN_NODE (-5)
-#define PCRE_ERROR_NOMEMORY (-6)
-#define PCRE_ERROR_NOSUBSTRING (-7)
-
-/* Request types for pcre_fullinfo() */
-
-#define PCRE_INFO_OPTIONS 0
-#define PCRE_INFO_SIZE 1
-#define PCRE_INFO_CAPTURECOUNT 2
-#define PCRE_INFO_BACKREFMAX 3
-#define PCRE_INFO_FIRSTCHAR 4
-#define PCRE_INFO_FIRSTTABLE 5
-#define PCRE_INFO_LASTLITERAL 6
-
-/* Types */
-
-struct real_pcre; /* declaration; the definition is private */
-struct real_pcre_extra; /* declaration; the definition is private */
-
-typedef struct real_pcre pcre;
-typedef struct real_pcre_extra pcre_extra;
-
-/* Store get and free functions. These can be set to alternative malloc/free
-functions if required. Some magic is required for Win32 DLL; it is null on
-other OS. */
-
-PCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);
-PCRE_DL_IMPORT extern void (*pcre_free)(void *);
-
-#undef PCRE_DL_IMPORT
-
-/* Functions */
-
-extern pcre *pcre_compile(const char *, int, const char **, int *,
- const unsigned char *);
-extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
-extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
- int, int, int, int *, int);
-extern void pcre_free_substring(const char *);
-extern void pcre_free_substring_list(const char **);
-extern int pcre_get_substring(const char *, int *, int, int, const char **);
-extern int pcre_get_substring_list(const char *, int *, int, const char ***);
-extern int pcre_info(const pcre *, int *, int *);
-extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
-extern const unsigned char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcre.h */
diff --git a/srclib/pcre/pcredemo.c b/srclib/pcre/pcredemo.c
deleted file mode 100644
index cb4e46f137..0000000000
--- a/srclib/pcre/pcredemo.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <pcre.h>
-
-/* Compile thuswise:
- gcc -Wall pcredemo.c -I/opt/local/include -L/opt/local/lib \
- -R/opt/local/lib -lpcre
-*/
-
-#define OVECCOUNT 30 /* should be a multiple of 3 */
-
-int main(int argc, char **argv)
-{
-pcre *re;
-const char *error;
-int erroffset;
-int ovector[OVECCOUNT];
-int rc, i;
-
-if (argc != 3)
- {
- printf("Two arguments required: a regex and a subject string\n");
- return 1;
- }
-
-/* Compile the regular expression in the first argument */
-
-re = pcre_compile(
- argv[1], /* the pattern */
- 0, /* default options */
- &error, /* for error message */
- &erroffset, /* for error offset */
- NULL); /* use default character tables */
-
-/* Compilation failed: print the error message and exit */
-
-if (re == NULL)
- {
- printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
- return 1;
- }
-
-/* Compilation succeeded: match the subject in the second argument */
-
-rc = pcre_exec(
- re, /* the compiled pattern */
- NULL, /* no extra data - we didn't study the pattern */
- argv[2], /* the subject string */
- (int)strlen(argv[2]), /* the length of the subject */
- 0, /* start at offset 0 in the subject */
- 0, /* default options */
- ovector, /* output vector for substring information */
- OVECCOUNT); /* number of elements in the output vector */
-
-/* Matching failed: handle error cases */
-
-if (rc < 0)
- {
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: printf("No match\n"); break;
- /*
- Handle other special cases if you like
- */
- default: printf("Matching error %d\n", rc); break;
- }
- return 1;
- }
-
-/* Match succeded */
-
-printf("Match succeeded\n");
-
-/* The output vector wasn't big enough */
-
-if (rc == 0)
- {
- rc = OVECCOUNT/3;
- printf("ovector only has room for %d captured substrings\n", rc - 1);
- }
-
-/* Show substrings stored in the output vector */
-
-for (i = 0; i < rc; i++)
- {
- char *substring_start = argv[2] + ovector[2*i];
- int substring_length = ovector[2*i+1] - ovector[2*i];
- printf("%2d: %.*s\n", i, substring_length, substring_start);
- }
-
-return 0;
-}
-
-
diff --git a/srclib/pcre/pcregrep.c b/srclib/pcre/pcregrep.c
deleted file mode 100644
index b50ed0780b..0000000000
--- a/srclib/pcre/pcregrep.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/*************************************************
-* pcregrep program *
-*************************************************/
-
-/* This is a grep program that uses the PCRE regular expression library to do
-its pattern matching. On a Unix system it can recurse into directories. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "config.h"
-#include "pcre.h"
-
-#define FALSE 0
-#define TRUE 1
-
-typedef int BOOL;
-
-#define VERSION "2.0 01-Aug-2001"
-#define MAX_PATTERN_COUNT 100
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-static char *pattern_filename = NULL;
-static int pattern_count = 0;
-static pcre **pattern_list;
-static pcre_extra **hints_list;
-
-static BOOL count_only = FALSE;
-static BOOL filenames = TRUE;
-static BOOL filenames_only = FALSE;
-static BOOL invert = FALSE;
-static BOOL number = FALSE;
-static BOOL recurse = FALSE;
-static BOOL silent = FALSE;
-static BOOL whole_lines = FALSE;
-
-/* Structure for options and list of them */
-
-typedef struct option_item {
- int one_char;
- char *long_name;
- char *help_text;
-} option_item;
-
-static option_item optionlist[] = {
- { -1, "help", "display this help and exit" },
- { 'c', "count", "print only a count of matching lines per FILE" },
- { 'h', "no-filename", "suppress the prefixing filename on output" },
- { 'i', "ignore-case", "ignore case distinctions" },
- { 'l', "files-with-matches", "print only FILE names containing matches" },
- { 'n', "line-number", "print line number with output lines" },
- { 'r', "recursive", "recursively scan sub-directories" },
- { 's', "no-messages", "suppress error messages" },
- { 'V', "version", "print version information and exit" },
- { 'v', "invert-match", "select non-matching lines" },
- { 'x', "line-regex", "force PATTERN to match only whole lines" },
- { 'x', "line-regexp", "force PATTERN to match only whole lines" },
- { 0, NULL, NULL }
-};
-
-
-/*************************************************
-* Functions for directory scanning *
-*************************************************/
-
-/* These functions are defined so that they can be made system specific,
-although at present the only ones are for Unix, and for "no directory recursion
-support". */
-
-
-/************* Directory scanning in Unix ***********/
-
-#if IS_UNIX
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-
-typedef DIR directory_type;
-
-int
-isdirectory(char *filename)
-{
-struct stat statbuf;
-if (stat(filename, &statbuf) < 0)
- return 0; /* In the expectation that opening as a file will fail */
-return ((statbuf.st_mode & S_IFMT) == S_IFDIR)? '/' : 0;
-}
-
-directory_type *
-opendirectory(char *filename)
-{
-return opendir(filename);
-}
-
-char *
-readdirectory(directory_type *dir)
-{
-for (;;)
- {
- struct dirent *dent = readdir(dir);
- if (dent == NULL) return NULL;
- if (strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0)
- return dent->d_name;
- }
-return NULL; /* Keep compiler happy; never executed */
-}
-
-void
-closedirectory(directory_type *dir)
-{
-closedir(dir);
-}
-
-
-#else
-
-
-/************* Directory scanning when we can't do it ***********/
-
-/* The type is void, and apart from isdirectory(), the functions do nothing. */
-
-typedef void directory_type;
-
-int isdirectory(char *filename) { return FALSE; }
-directory_type * opendirectory(char *filename) {}
-char *readdirectory(directory_type *dir) {}
-void closedirectory(directory_type *dir) {}
-
-#endif
-
-
-
-#if ! HAVE_STRERROR
-/*************************************************
-* Provide strerror() for non-ANSI libraries *
-*************************************************/
-
-/* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
-in their libraries, but can provide the same facility by this simple
-alternative function. */
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-char *
-strerror(int n)
-{
-if (n < 0 || n >= sys_nerr) return "unknown error number";
-return sys_errlist[n];
-}
-#endif /* HAVE_STRERROR */
-
-
-
-/*************************************************
-* Grep an individual file *
-*************************************************/
-
-static int
-pcregrep(FILE *in, char *name)
-{
-int rc = 1;
-int linenumber = 0;
-int count = 0;
-int offsets[99];
-char buffer[BUFSIZ];
-
-while (fgets(buffer, sizeof(buffer), in) != NULL)
- {
- BOOL match = FALSE;
- int i;
- int length = (int)strlen(buffer);
- if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
- linenumber++;
-
- for (i = 0; !match && i < pattern_count; i++)
- {
- match = pcre_exec(pattern_list[i], hints_list[i], buffer, length, 0, 0,
- offsets, 99) >= 0;
- if (match && whole_lines && offsets[1] != length) match = FALSE;
- }
-
- if (match != invert)
- {
- if (count_only) count++;
-
- else if (filenames_only)
- {
- fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
- return 0;
- }
-
- else if (silent) return 0;
-
- else
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- if (number) fprintf(stdout, "%d:", linenumber);
- fprintf(stdout, "%s\n", buffer);
- }
-
- rc = 0;
- }
- }
-
-if (count_only)
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- fprintf(stdout, "%d\n", count);
- }
-
-return rc;
-}
-
-
-
-
-/*************************************************
-* Grep a file or recurse into a directory *
-*************************************************/
-
-static int
-grep_or_recurse(char *filename, BOOL recurse, BOOL show_filenames,
- BOOL only_one_at_top)
-{
-int rc = 1;
-int sep;
-FILE *in;
-
-/* If the file is a directory and we are recursing, scan each file within it.
-The scanning code is localized so it can be made system-specific. */
-
-if ((sep = isdirectory(filename)) != 0 && recurse)
- {
- char buffer[1024];
- char *nextfile;
- directory_type *dir = opendirectory(filename);
-
- if (dir == NULL)
- {
- fprintf(stderr, "pcregrep: Failed to open directory %s: %s\n", filename,
- strerror(errno));
- return 2;
- }
-
- while ((nextfile = readdirectory(dir)) != NULL)
- {
- int frc;
- sprintf(buffer, "%.512s%c%.128s", filename, sep, nextfile);
- frc = grep_or_recurse(buffer, recurse, TRUE, FALSE);
- if (frc == 0 && rc == 1) rc = 0;
- }
-
- closedirectory(dir);
- return rc;
- }
-
-/* If the file is not a directory, or we are not recursing, scan it. If this is
-the first and only argument at top level, we don't show the file name.
-Otherwise, control is via the show_filenames variable. */
-
-in = fopen(filename, "r");
-if (in == NULL)
- {
- fprintf(stderr, "pcregrep: Failed to open %s: %s\n", filename, strerror(errno));
- return 2;
- }
-
-rc = pcregrep(in, (show_filenames && !only_one_at_top)? filename : NULL);
-fclose(in);
-return rc;
-}
-
-
-
-
-/*************************************************
-* Usage function *
-*************************************************/
-
-static int
-usage(int rc)
-{
-fprintf(stderr, "Usage: pcregrep [-Vcfhilnrsvx] [long-options] pattern [file] ...\n");
-fprintf(stderr, "Type `pcregrep --help' for more information.\n");
-return rc;
-}
-
-
-
-
-/*************************************************
-* Help function *
-*************************************************/
-
-static void
-help(void)
-{
-option_item *op;
-
-printf("Usage: pcregrep [OPTION]... PATTERN [FILE] ...\n");
-printf("Search for PATTERN in each FILE or standard input.\n");
-printf("Example: pcregrep -i 'hello.*world' menu.h main.c\n\n");
-
-printf("Options:\n");
-
-for (op = optionlist; op->one_char != 0; op++)
- {
- int n;
- char s[4];
- if (op->one_char > 0) sprintf(s, "-%c,", op->one_char); else strcpy(s, " ");
- printf(" %s --%s%n", s, op->long_name, &n);
- n = 30 - n;
- if (n < 1) n = 1;
- printf("%.*s%s\n", n, " ", op->help_text);
- }
-
-printf("\n -f<filename> or --file=<filename>\n");
-printf(" Read patterns from <filename> instead of using a command line option.\n");
-printf(" Trailing white space is removed; blanks lines are ignored.\n");
-printf(" There is a maximum of %d patterns.\n", MAX_PATTERN_COUNT);
-
-printf("\nWith no FILE, read standard input. If fewer than two FILEs given, assume -h.\n");
-printf("Exit status is 0 if any matches, 1 if no matches, and 2 if trouble.\n");
-}
-
-
-
-
-/*************************************************
-* Handle an option *
-*************************************************/
-
-static int
-handle_option(int letter, int options)
-{
-switch(letter)
- {
- case -1: help(); exit(0);
- case 'c': count_only = TRUE; break;
- case 'h': filenames = FALSE; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'l': filenames_only = TRUE;
- case 'n': number = TRUE; break;
- case 'r': recurse = TRUE; break;
- case 's': silent = TRUE; break;
- case 'v': invert = TRUE; break;
- case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
-
- case 'V':
- fprintf(stderr, "pcregrep version %s using ", VERSION);
- fprintf(stderr, "PCRE version %s\n", pcre_version());
- exit(0);
- break;
-
- default:
- fprintf(stderr, "pcregrep: Unknown option -%c\n", letter);
- exit(usage(2));
- }
-
-return options;
-}
-
-
-
-
-/*************************************************
-* Main program *
-*************************************************/
-
-int
-main(int argc, char **argv)
-{
-int i, j;
-int rc = 1;
-int options = 0;
-int errptr;
-const char *error;
-BOOL only_one_at_top;
-
-/* Process the options */
-
-for (i = 1; i < argc; i++)
- {
- if (argv[i][0] != '-') break;
-
- /* Long name options */
-
- if (argv[i][1] == '-')
- {
- option_item *op;
-
- if (strncmp(argv[i]+2, "file=", 5) == 0)
- {
- pattern_filename = argv[i] + 7;
- continue;
- }
-
- for (op = optionlist; op->one_char != 0; op++)
- {
- if (strcmp(argv[i]+2, op->long_name) == 0)
- {
- options = handle_option(op->one_char, options);
- break;
- }
- }
- if (op->one_char == 0)
- {
- fprintf(stderr, "pcregrep: Unknown option %s\n", argv[i]);
- exit(usage(2));
- }
- }
-
- /* One-char options */
-
- else
- {
- char *s = argv[i] + 1;
- while (*s != 0)
- {
- if (*s == 'f')
- {
- pattern_filename = s + 1;
- if (pattern_filename[0] == 0)
- {
- if (i >= argc - 1)
- {
- fprintf(stderr, "pcregrep: File name missing after -f\n");
- exit(usage(2));
- }
- pattern_filename = argv[++i];
- }
- break;
- }
- else options = handle_option(*s++, options);
- }
- }
- }
-
-pattern_list = malloc(MAX_PATTERN_COUNT * sizeof(pcre *));
-hints_list = malloc(MAX_PATTERN_COUNT * sizeof(pcre_extra *));
-
-if (pattern_list == NULL || hints_list == NULL)
- {
- fprintf(stderr, "pcregrep: malloc failed\n");
- return 2;
- }
-
-/* Compile the regular expression(s). */
-
-if (pattern_filename != NULL)
- {
- FILE *f = fopen(pattern_filename, "r");
- char buffer[BUFSIZ];
- if (f == NULL)
- {
- fprintf(stderr, "pcregrep: Failed to open %s: %s\n", pattern_filename,
- strerror(errno));
- return 2;
- }
- while (fgets(buffer, sizeof(buffer), f) != NULL)
- {
- char *s = buffer + (int)strlen(buffer);
- if (pattern_count >= MAX_PATTERN_COUNT)
- {
- fprintf(stderr, "pcregrep: Too many patterns in file (max %d)\n",
- MAX_PATTERN_COUNT);
- return 2;
- }
- while (s > buffer && isspace((unsigned char)(s[-1]))) s--;
- if (s == buffer) continue;
- *s = 0;
- pattern_list[pattern_count] = pcre_compile(buffer, options, &error,
- &errptr, NULL);
- if (pattern_list[pattern_count++] == NULL)
- {
- fprintf(stderr, "pcregrep: Error in regex number %d at offset %d: %s\n",
- pattern_count, errptr, error);
- return 2;
- }
- }
- fclose(f);
- }
-
-/* If no file name, a single regex must be given inline */
-
-else
- {
- if (i >= argc) return usage(0);
- pattern_list[0] = pcre_compile(argv[i++], options, &error, &errptr, NULL);
- if (pattern_list[0] == NULL)
- {
- fprintf(stderr, "pcregrep: Error in regex at offset %d: %s\n", errptr,
- error);
- return 2;
- }
- pattern_count++;
- }
-
-/* Study the regular expressions, as we will be running them may times */
-
-for (j = 0; j < pattern_count; j++)
- {
- hints_list[j] = pcre_study(pattern_list[j], 0, &error);
- if (error != NULL)
- {
- char s[16];
- if (pattern_count == 1) s[0] = 0; else sprintf(s, " number %d", j);
- fprintf(stderr, "pcregrep: Error while studying regex%s: %s\n", s, error);
- return 2;
- }
- }
-
-/* If there are no further arguments, do the business on stdin and exit */
-
-if (i >= argc) return pcregrep(stdin, NULL);
-
-/* Otherwise, work through the remaining arguments as files or directories.
-Pass in the fact that there is only one argument at top level - this suppresses
-the file name if the argument is not a directory. */
-
-only_one_at_top = (i == argc - 1);
-if (filenames_only) filenames = TRUE;
-
-for (; i < argc; i++)
- {
- int frc = grep_or_recurse(argv[i], recurse, filenames, only_one_at_top);
- if (frc == 0 && rc == 1) rc = 0;
- }
-
-return rc;
-}
-
-/* End */
diff --git a/srclib/pcre/pcreposix.c b/srclib/pcre/pcreposix.c
deleted file mode 100644
index 29f2e01740..0000000000
--- a/srclib/pcre/pcreposix.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-This module is a wrapper that provides a POSIX API to the underlying PCRE
-functions.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-#include "internal.h"
-#include "pcreposix.h"
-#include "stdlib.h"
-
-
-
-/* Corresponding tables of PCRE error messages and POSIX error codes. */
-
-static const char *estring[] = {
- ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10,
- ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
- ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
- ERR31 };
-
-static int eint[] = {
- REG_EESCAPE, /* "\\ at end of pattern" */
- REG_EESCAPE, /* "\\c at end of pattern" */
- REG_EESCAPE, /* "unrecognized character follows \\" */
- REG_BADBR, /* "numbers out of order in {} quantifier" */
- REG_BADBR, /* "number too big in {} quantifier" */
- REG_EBRACK, /* "missing terminating ] for character class" */
- REG_ECTYPE, /* "invalid escape sequence in character class" */
- REG_ERANGE, /* "range out of order in character class" */
- REG_BADRPT, /* "nothing to repeat" */
- REG_BADRPT, /* "operand of unlimited repeat could match the empty string" */
- REG_ASSERT, /* "internal error: unexpected repeat" */
- REG_BADPAT, /* "unrecognized character after (?" */
- REG_ASSERT, /* "unused error" */
- REG_EPAREN, /* "missing )" */
- REG_ESUBREG, /* "back reference to non-existent subpattern" */
- REG_INVARG, /* "erroffset passed as NULL" */
- REG_INVARG, /* "unknown option bit(s) set" */
- REG_EPAREN, /* "missing ) after comment" */
- REG_ESIZE, /* "parentheses nested too deeply" */
- REG_ESIZE, /* "regular expression too large" */
- REG_ESPACE, /* "failed to get memory" */
- REG_EPAREN, /* "unmatched brackets" */
- REG_ASSERT, /* "internal error: code overflow" */
- REG_BADPAT, /* "unrecognized character after (?<" */
- REG_BADPAT, /* "lookbehind assertion is not fixed length" */
- REG_BADPAT, /* "malformed number after (?(" */
- REG_BADPAT, /* "conditional group containe more than two branches" */
- REG_BADPAT, /* "assertion expected after (?(" */
- REG_BADPAT, /* "(?p must be followed by )" */
- REG_ECTYPE, /* "unknown POSIX class name" */
- REG_BADPAT, /* "POSIX collating elements are not supported" */
- REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 support" */
- REG_BADPAT, /* "characters with values > 255 are not yet supported in classes" */
- REG_BADPAT, /* "character value in \x{...} sequence is too large" */
- REG_BADPAT /* "invalid condition (?(0)" */
-};
-
-/* Table of texts corresponding to POSIX error codes */
-
-static const char *pstring[] = {
- "", /* Dummy for value 0 */
- "internal error", /* REG_ASSERT */
- "invalid repeat counts in {}", /* BADBR */
- "pattern error", /* BADPAT */
- "? * + invalid", /* BADRPT */
- "unbalanced {}", /* EBRACE */
- "unbalanced []", /* EBRACK */
- "collation error - not relevant", /* ECOLLATE */
- "bad class", /* ECTYPE */
- "bad escape sequence", /* EESCAPE */
- "empty expression", /* EMPTY */
- "unbalanced ()", /* EPAREN */
- "bad range inside []", /* ERANGE */
- "expression too big", /* ESIZE */
- "failed to get memory", /* ESPACE */
- "bad back reference", /* ESUBREG */
- "bad argument", /* INVARG */
- "match failed" /* NOMATCH */
-};
-
-
-
-
-/*************************************************
-* Translate PCRE text code to int *
-*************************************************/
-
-/* PCRE compile-time errors are given as strings defined as macros. We can just
-look them up in a table to turn them into POSIX-style error codes. */
-
-static int
-pcre_posix_error_code(const char *s)
-{
-size_t i;
-for (i = 0; i < sizeof(estring)/sizeof(char *); i++)
- if (strcmp(s, estring[i]) == 0) return eint[i];
-return REG_ASSERT;
-}
-
-
-
-/*************************************************
-* Translate error code to string *
-*************************************************/
-
-size_t
-regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
-{
-const char *message, *addmessage;
-size_t length, addlength;
-
-message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))?
- "unknown error code" : pstring[errcode];
-length = strlen(message) + 1;
-
-addmessage = " at offset ";
-addlength = (preg != NULL && (int)preg->re_erroffset != -1)?
- strlen(addmessage) + 6 : 0;
-
-if (errbuf_size > 0)
- {
- if (addlength > 0 && errbuf_size >= length + addlength)
- sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset);
- else
- {
- strncpy(errbuf, message, errbuf_size - 1);
- errbuf[errbuf_size-1] = 0;
- }
- }
-
-return length + addlength;
-}
-
-
-
-
-/*************************************************
-* Free store held by a regex *
-*************************************************/
-
-void
-regfree(regex_t *preg)
-{
-(pcre_free)(preg->re_pcre);
-}
-
-
-
-
-/*************************************************
-* Compile a regular expression *
-*************************************************/
-
-/*
-Arguments:
- preg points to a structure for recording the compiled expression
- pattern the pattern to compile
- cflags compilation flags
-
-Returns: 0 on success
- various non-zero codes on failure
-*/
-
-int
-regcomp(regex_t *preg, const char *pattern, int cflags)
-{
-const char *errorptr;
-int erroffset;
-int options = 0;
-
-if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;
-if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;
-
-preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);
-preg->re_erroffset = erroffset;
-
-if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);
-
-preg->re_nsub = pcre_info(preg->re_pcre, NULL, NULL);
-return 0;
-}
-
-
-
-
-/*************************************************
-* Match a regular expression *
-*************************************************/
-
-/* Unfortunately, PCRE requires 3 ints of working space for each captured
-substring, so we have to get and release working store instead of just using
-the POSIX structures as was done in earlier releases when PCRE needed only 2
-ints. */
-
-#define SMALL_NMATCH 5
-int
-regexec(regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags)
-{
-int rc;
-int options = 0;
-/* NOTE: The code related to the "SMALL_NMATCH" optimization
- * currently is unique to the httpd-2.0 copy of PCRE 3.9. I've
- * submitted the patch to the PCRE maintainer for inclusion in
- * the next PCRE release, slated for late 2002. At that time,
- * we can merge the new PCRE version into the httpd-2.0/srclib
- * tree. --brianp 3/20/2002
- */
-int small_ovector[SMALL_NMATCH * 3];
-int *ovector = NULL;
-int allocated_ovector = 0;
-
-if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;
-if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;
-
-#if 0
-/* This causes a memory segfault after locking the const, thread-shared *preg
- * generated at compile time, and is entirely unnecessary.
- */
-preg->re_erroffset = (size_t)(-1); /* Only has meaning after compile */
-#endif
-
-if (nmatch > 0)
- {
- if (nmatch <= SMALL_NMATCH)
- {
- ovector = &(small_ovector[0]);
- }
- else
- {
- ovector = (int *)malloc(sizeof(int) * nmatch * 3);
- if (ovector == NULL) return REG_ESPACE;
- allocated_ovector = 1;
- }
- }
-
-rc = pcre_exec(preg->re_pcre, NULL, string, (int)strlen(string), 0, options,
- ovector, nmatch * 3);
-
-if (rc == 0) rc = nmatch; /* All captured slots were filled in */
-
-if (rc >= 0)
- {
- size_t i;
- for (i = 0; i < (size_t) rc; i++)
- {
- pmatch[i].rm_so = ovector[i*2];
- pmatch[i].rm_eo = ovector[i*2+1];
- }
- if (allocated_ovector) free(ovector);
- for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;
- return 0;
- }
-
-else
- {
- if (allocated_ovector) free(ovector);
- switch(rc)
- {
- case PCRE_ERROR_NOMATCH: return REG_NOMATCH;
- case PCRE_ERROR_NULL: return REG_INVARG;
- case PCRE_ERROR_BADOPTION: return REG_INVARG;
- case PCRE_ERROR_BADMAGIC: return REG_INVARG;
- case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT;
- case PCRE_ERROR_NOMEMORY: return REG_ESPACE;
- default: return REG_ASSERT;
- }
- }
-}
-
-/* End of pcreposix.c */
diff --git a/srclib/pcre/pcreposix.dsp b/srclib/pcre/pcreposix.dsp
deleted file mode 100644
index 6f175bda31..0000000000
--- a/srclib/pcre/pcreposix.dsp
+++ /dev/null
@@ -1,154 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pcreposix" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=pcreposix - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "pcreposix.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "pcreposix.mak" CFG="pcreposix - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "pcreposix - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "pcreposix - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "pcreposix - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "LibR"
-# PROP Intermediate_Dir "LibR"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibR/pcreposix_src" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "pcreposix - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "LibD"
-# PROP Intermediate_Dir "LibD"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibD/pcreposix_src" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "pcreposix - Win32 Release"
-# Name "pcreposix - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\pcreposix.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\config.hw
-
-!IF "$(CFG)" == "pcreposix - Win32 Release"
-
-# Begin Custom Build - Creating pcre config.h from config.hw
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\config.hw > .\config.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "pcreposix - Win32 Debug"
-
-# Begin Custom Build - Creating pcre config.h from config.hw
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\config.hw > .\config.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.hw
-
-!IF "$(CFG)" == "pcreposix - Win32 Release"
-
-# Begin Custom Build - Creating pcre.h from pcre.hw
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\pcre.hw > .\pcre.h
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "pcreposix - Win32 Debug"
-
-# Begin Custom Build - Creating pcre.h from pcre.hw
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- type .\pcre.hw > .\pcre.h
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcreposix.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/srclib/pcre/pcreposix.h b/srclib/pcre/pcreposix.h
deleted file mode 100644
index e70af2de84..0000000000
--- a/srclib/pcre/pcreposix.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* Copyright (c) 1997-2001 University of Cambridge */
-
-#ifndef _PCREPOSIX_H
-#define _PCREPOSIX_H
-
-/* This is the header for the POSIX wrapper interface to the PCRE Perl-
-Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
-
-/* Have to include stdlib.h in order to ensure that size_t is defined. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options defined by POSIX. */
-
-#define REG_ICASE 0x01
-#define REG_NEWLINE 0x02
-#define REG_NOTBOL 0x04
-#define REG_NOTEOL 0x08
-
-/* These are not used by PCRE, but by defining them we make it easier
-to slot PCRE into existing programs that make POSIX calls. */
-
-#define REG_EXTENDED 0
-#define REG_NOSUB 0
-
-/* Error values. Not all these are relevant or used by the wrapper. */
-
-enum {
- REG_ASSERT = 1, /* internal error ? */
- REG_BADBR, /* invalid repeat counts in {} */
- REG_BADPAT, /* pattern error */
- REG_BADRPT, /* ? * + invalid */
- REG_EBRACE, /* unbalanced {} */
- REG_EBRACK, /* unbalanced [] */
- REG_ECOLLATE, /* collation error - not relevant */
- REG_ECTYPE, /* bad class */
- REG_EESCAPE, /* bad escape sequence */
- REG_EMPTY, /* empty expression */
- REG_EPAREN, /* unbalanced () */
- REG_ERANGE, /* bad range inside [] */
- REG_ESIZE, /* expression too big */
- REG_ESPACE, /* failed to get memory */
- REG_ESUBREG, /* bad back reference */
- REG_INVARG, /* bad argument */
- REG_NOMATCH /* match failed */
-};
-
-
-/* The structure representing a compiled regular expression. */
-
-typedef struct {
- void *re_pcre;
- size_t re_nsub;
- size_t re_erroffset;
-} regex_t;
-
-/* The structure in which a captured offset is returned. */
-
-typedef int regoff_t;
-
-typedef struct {
- regoff_t rm_so;
- regoff_t rm_eo;
-} regmatch_t;
-
-/* The functions */
-
-extern int regcomp(regex_t *, const char *, int);
-extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
-extern size_t regerror(int, const regex_t *, char *, size_t);
-extern void regfree(regex_t *);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* End of pcreposix.h */
diff --git a/srclib/pcre/pcretest.c b/srclib/pcre/pcretest.c
deleted file mode 100644
index f04443ab30..0000000000
--- a/srclib/pcre/pcretest.c
+++ /dev/null
@@ -1,1262 +0,0 @@
-/*************************************************
-* PCRE testing program *
-*************************************************/
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <locale.h>
-
-/* Use the internal info for displaying the results of pcre_study(). */
-
-#include "internal.h"
-
-/* It is possible to compile this test program without including support for
-testing the POSIX interface, though this is not available via the standard
-Makefile. */
-
-#if !defined NOPOSIX
-#include "pcreposix.h"
-#endif
-
-#ifndef CLOCKS_PER_SEC
-#ifdef CLK_TCK
-#define CLOCKS_PER_SEC CLK_TCK
-#else
-#define CLOCKS_PER_SEC 100
-#endif
-#endif
-
-#define LOOPREPEAT 20000
-
-
-static FILE *outfile;
-static int log_store = 0;
-static size_t gotten_store;
-
-
-
-static int utf8_table1[] = {
- 0x0000007f, 0x000007ff, 0x0000ffff, 0x001fffff, 0x03ffffff, 0x7fffffff};
-
-static int utf8_table2[] = {
- 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-
-static int utf8_table3[] = {
- 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-
-/*************************************************
-* Convert character value to UTF-8 *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
- cvalue the character value
- buffer pointer to buffer for result - at least 6 bytes long
-
-Returns: number of characters placed in the buffer
- -1 if input character is negative
- 0 if input character is positive but too big (only when
- int is longer than 32 bits)
-*/
-
-static int
-ord2utf8(int cvalue, unsigned char *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
- if (cvalue <= utf8_table1[i]) break;
-if (i >= sizeof(utf8_table1)/sizeof(int)) return 0;
-if (cvalue < 0) return -1;
-
-buffer += i;
-for (j = i; j > 0; j--)
- {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-*buffer = utf8_table2[i] | cvalue;
-return i + 1;
-}
-
-
-/*************************************************
-* Convert UTF-8 string to value *
-*************************************************/
-
-/* This function takes one or more bytes that represents a UTF-8 character,
-and returns the value of the character.
-
-Argument:
- buffer a pointer to the byte vector
- vptr a pointer to an int to receive the value
-
-Returns: > 0 => the number of bytes consumed
- -6 to 0 => malformed UTF-8 character at offset = (-return)
-*/
-
-int
-utf82ord(unsigned char *buffer, int *vptr)
-{
-int c = *buffer++;
-int d = c;
-int i, j, s;
-
-for (i = -1; i < 6; i++) /* i is number of additional bytes */
- {
- if ((d & 0x80) == 0) break;
- d <<= 1;
- }
-
-if (i == -1) { *vptr = c; return 1; } /* ascii character */
-if (i == 0 || i == 6) return 0; /* invalid UTF-8 */
-
-/* i now has a value in the range 1-5 */
-
-s = 6*i;
-d = (c & utf8_table3[i]) << s;
-
-for (j = 0; j < i; j++)
- {
- c = *buffer++;
- if ((c & 0xc0) != 0x80) return -(j+1);
- s -= 6;
- d |= (c & 0x3f) << s;
- }
-
-/* Check that encoding was the correct unique one */
-
-for (j = 0; j < sizeof(utf8_table1)/sizeof(int); j++)
- if (d <= utf8_table1[j]) break;
-if (j != i) return -(i+1);
-
-/* Valid value */
-
-*vptr = d;
-return i+1;
-}
-
-
-
-
-
-
-/* Debugging function to print the internal form of the regex. This is the same
-code as contained in pcre.c under the DEBUG macro. */
-
-static const char *OP_names[] = {
- "End", "\\A", "\\B", "\\b", "\\D", "\\d",
- "\\S", "\\s", "\\W", "\\w", "\\Z", "\\z",
- "Opt", "^", "$", "Any", "chars", "not",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
- "*", "*?", "+", "+?", "?", "??", "{", "{",
- "class", "Ref", "Recurse",
- "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
- "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
- "Brazero", "Braminzero", "Branumber", "Bra"
-};
-
-
-static void print_internals(pcre *re)
-{
-unsigned char *code = ((real_pcre *)re)->code;
-
-fprintf(outfile, "------------------------------------------------------------------\n");
-
-for(;;)
- {
- int c;
- int charlength;
-
- fprintf(outfile, "%3d ", (int)(code - ((real_pcre *)re)->code));
-
- if (*code >= OP_BRA)
- {
- if (*code - OP_BRA > EXTRACT_BASIC_MAX)
- fprintf(outfile, "%3d Bra extra", (code[1] << 8) + code[2]);
- else
- fprintf(outfile, "%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
- code += 2;
- }
-
- else switch(*code)
- {
- case OP_END:
- fprintf(outfile, " %s\n", OP_names[*code]);
- fprintf(outfile, "------------------------------------------------------------------\n");
- return;
-
- case OP_OPT:
- fprintf(outfile, " %.2x %s", code[1], OP_names[*code]);
- code++;
- break;
-
- case OP_CHARS:
- charlength = *(++code);
- fprintf(outfile, "%3d ", charlength);
- while (charlength-- > 0)
- if (isprint(c = *(++code))) fprintf(outfile, "%c", c);
- else fprintf(outfile, "\\x%02x", c);
- break;
-
- case OP_KETRMAX:
- case OP_KETRMIN:
- case OP_ALT:
- case OP_KET:
- case OP_ASSERT:
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- case OP_ONCE:
- case OP_COND:
- case OP_BRANUMBER:
- case OP_REVERSE:
- case OP_CREF:
- fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
- code += 2;
- break;
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_PLUS:
- case OP_MINPLUS:
- case OP_QUERY:
- case OP_MINQUERY:
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- if (*code >= OP_TYPESTAR)
- fprintf(outfile, " %s", OP_names[code[1]]);
- else if (isprint(c = code[1])) fprintf(outfile, " %c", c);
- else fprintf(outfile, " \\x%02x", c);
- fprintf(outfile, "%s", OP_names[*code++]);
- break;
-
- case OP_EXACT:
- case OP_UPTO:
- case OP_MINUPTO:
- if (isprint(c = code[3])) fprintf(outfile, " %c{", c);
- else fprintf(outfile, " \\x%02x{", c);
- if (*code != OP_EXACT) fprintf(outfile, ",");
- fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
- if (*code == OP_MINUPTO) fprintf(outfile, "?");
- code += 3;
- break;
-
- case OP_TYPEEXACT:
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- fprintf(outfile, " %s{", OP_names[code[3]]);
- if (*code != OP_TYPEEXACT) fprintf(outfile, "0,");
- fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
- if (*code == OP_TYPEMINUPTO) fprintf(outfile, "?");
- code += 3;
- break;
-
- case OP_NOT:
- if (isprint(c = *(++code))) fprintf(outfile, " [^%c]", c);
- else fprintf(outfile, " [^\\x%02x]", c);
- break;
-
- case OP_NOTSTAR:
- case OP_NOTMINSTAR:
- case OP_NOTPLUS:
- case OP_NOTMINPLUS:
- case OP_NOTQUERY:
- case OP_NOTMINQUERY:
- if (isprint(c = code[1])) fprintf(outfile, " [^%c]", c);
- else fprintf(outfile, " [^\\x%02x]", c);
- fprintf(outfile, "%s", OP_names[*code++]);
- break;
-
- case OP_NOTEXACT:
- case OP_NOTUPTO:
- case OP_NOTMINUPTO:
- if (isprint(c = code[3])) fprintf(outfile, " [^%c]{", c);
- else fprintf(outfile, " [^\\x%02x]{", c);
- if (*code != OP_NOTEXACT) fprintf(outfile, ",");
- fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
- if (*code == OP_NOTMINUPTO) fprintf(outfile, "?");
- code += 3;
- break;
-
- case OP_REF:
- fprintf(outfile, " \\%d", (code[1] << 8) | code[2]);
- code += 3;
- goto CLASS_REF_REPEAT;
-
- case OP_CLASS:
- {
- int i, min, max;
- code++;
- fprintf(outfile, " [");
-
- for (i = 0; i < 256; i++)
- {
- if ((code[i/8] & (1 << (i&7))) != 0)
- {
- int j;
- for (j = i+1; j < 256; j++)
- if ((code[j/8] & (1 << (j&7))) == 0) break;
- if (i == '-' || i == ']') fprintf(outfile, "\\");
- if (isprint(i)) fprintf(outfile, "%c", i); else fprintf(outfile, "\\x%02x", i);
- if (--j > i)
- {
- fprintf(outfile, "-");
- if (j == '-' || j == ']') fprintf(outfile, "\\");
- if (isprint(j)) fprintf(outfile, "%c", j); else fprintf(outfile, "\\x%02x", j);
- }
- i = j;
- }
- }
- fprintf(outfile, "]");
- code += 32;
-
- CLASS_REF_REPEAT:
-
- switch(*code)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRPLUS:
- case OP_CRMINPLUS:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- fprintf(outfile, "%s", OP_names[*code]);
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- min = (code[1] << 8) + code[2];
- max = (code[3] << 8) + code[4];
- if (max == 0) fprintf(outfile, "{%d,}", min);
- else fprintf(outfile, "{%d,%d}", min, max);
- if (*code == OP_CRMINRANGE) fprintf(outfile, "?");
- code += 4;
- break;
-
- default:
- code--;
- }
- }
- break;
-
- /* Anything else is just a one-node item */
-
- default:
- fprintf(outfile, " %s", OP_names[*code]);
- break;
- }
-
- code++;
- fprintf(outfile, "\n");
- }
-}
-
-
-
-/* Character string printing function. A "normal" and a UTF-8 version. */
-
-static void pchars(unsigned char *p, int length, int utf8)
-{
-int c;
-while (length-- > 0)
- {
- if (utf8)
- {
- int rc = utf82ord(p, &c);
- if (rc > 0)
- {
- length -= rc - 1;
- p += rc;
- if (c < 256 && isprint(c)) fprintf(outfile, "%c", c);
- else fprintf(outfile, "\\x{%02x}", c);
- continue;
- }
- }
-
- /* Not UTF-8, or malformed UTF-8 */
-
- if (isprint(c = *(p++))) fprintf(outfile, "%c", c);
- else fprintf(outfile, "\\x%02x", c);
- }
-}
-
-
-
-/* Alternative malloc function, to test functionality and show the size of the
-compiled re. */
-
-static void *new_malloc(size_t size)
-{
-gotten_store = size;
-if (log_store)
- fprintf(outfile, "Memory allocation (code space): %d\n",
- (int)((int)size - offsetof(real_pcre, code[0])));
-return malloc(size);
-}
-
-
-
-
-/* Get one piece of information from the pcre_fullinfo() function */
-
-static void new_info(pcre *re, pcre_extra *study, int option, void *ptr)
-{
-int rc;
-if ((rc = pcre_fullinfo(re, study, option, ptr)) < 0)
- fprintf(outfile, "Error %d from pcre_fullinfo(%d)\n", rc, option);
-}
-
-
-
-
-/* Read lines from named file or stdin and write to named file or stdout; lines
-consist of a regular expression, in delimiters and optionally followed by
-options, followed by a set of test data, terminated by an empty line. */
-
-int main(int argc, char **argv)
-{
-FILE *infile = stdin;
-int options = 0;
-int study_options = 0;
-int op = 1;
-int timeit = 0;
-int showinfo = 0;
-int showstore = 0;
-int size_offsets = 45;
-int size_offsets_max;
-int *offsets;
-#if !defined NOPOSIX
-int posix = 0;
-#endif
-int debug = 0;
-int done = 0;
-unsigned char buffer[30000];
-unsigned char dbuffer[1024];
-
-/* Static so that new_malloc can use it. */
-
-outfile = stdout;
-
-/* Scan options */
-
-while (argc > 1 && argv[op][0] == '-')
- {
- char *endptr;
-
- if (strcmp(argv[op], "-s") == 0 || strcmp(argv[op], "-m") == 0)
- showstore = 1;
- else if (strcmp(argv[op], "-t") == 0) timeit = 1;
- else if (strcmp(argv[op], "-i") == 0) showinfo = 1;
- else if (strcmp(argv[op], "-d") == 0) showinfo = debug = 1;
- else if (strcmp(argv[op], "-o") == 0 && argc > 2 &&
- ((size_offsets = (int)strtoul(argv[op+1], &endptr, 10)), *endptr == 0))
- {
- op++;
- argc--;
- }
-#if !defined NOPOSIX
- else if (strcmp(argv[op], "-p") == 0) posix = 1;
-#endif
- else
- {
- printf("** Unknown or malformed option %s\n", argv[op]);
- printf("Usage: pcretest [-d] [-i] [-o <n>] [-p] [-s] [-t] [<input> [<output>]]\n");
- printf(" -d debug: show compiled code; implies -i\n"
- " -i show information about compiled pattern\n"
- " -o <n> set size of offsets vector to <n>\n");
-#if !defined NOPOSIX
- printf(" -p use POSIX interface\n");
-#endif
- printf(" -s output store information\n"
- " -t time compilation and execution\n");
- return 1;
- }
- op++;
- argc--;
- }
-
-/* Get the store for the offsets vector, and remember what it was */
-
-size_offsets_max = size_offsets;
-offsets = malloc(size_offsets_max * sizeof(int));
-if (offsets == NULL)
- {
- printf("** Failed to get %d bytes of memory for offsets vector\n",
- size_offsets_max * sizeof(int));
- return 1;
- }
-
-/* Sort out the input and output files */
-
-if (argc > 1)
- {
- infile = fopen(argv[op], "r");
- if (infile == NULL)
- {
- printf("** Failed to open %s\n", argv[op]);
- return 1;
- }
- }
-
-if (argc > 2)
- {
- outfile = fopen(argv[op+1], "w");
- if (outfile == NULL)
- {
- printf("** Failed to open %s\n", argv[op+1]);
- return 1;
- }
- }
-
-/* Set alternative malloc function */
-
-pcre_malloc = new_malloc;
-
-/* Heading line, then prompt for first regex if stdin */
-
-fprintf(outfile, "PCRE version %s\n\n", pcre_version());
-
-/* Main loop */
-
-while (!done)
- {
- pcre *re = NULL;
- pcre_extra *extra = NULL;
-
-#if !defined NOPOSIX /* There are still compilers that require no indent */
- regex_t preg;
- int do_posix = 0;
-#endif
-
- const char *error;
- unsigned char *p, *pp, *ppp;
- const unsigned char *tables = NULL;
- int do_study = 0;
- int do_debug = debug;
- int do_G = 0;
- int do_g = 0;
- int do_showinfo = showinfo;
- int do_showrest = 0;
- int utf8 = 0;
- int erroroffset, len, delimiter;
-
- if (infile == stdin) printf(" re> ");
- if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) break;
- if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
- p = buffer;
- while (isspace(*p)) p++;
- if (*p == 0) continue;
-
- /* Get the delimiter and seek the end of the pattern; if is isn't
- complete, read more. */
-
- delimiter = *p++;
-
- if (isalnum(delimiter) || delimiter == '\\')
- {
- fprintf(outfile, "** Delimiter must not be alphameric or \\\n");
- goto SKIP_DATA;
- }
-
- pp = p;
-
- for(;;)
- {
- while (*pp != 0)
- {
- if (*pp == '\\' && pp[1] != 0) pp++;
- else if (*pp == delimiter) break;
- pp++;
- }
- if (*pp != 0) break;
-
- len = sizeof(buffer) - (pp - buffer);
- if (len < 256)
- {
- fprintf(outfile, "** Expression too long - missing delimiter?\n");
- goto SKIP_DATA;
- }
-
- if (infile == stdin) printf(" > ");
- if (fgets((char *)pp, len, infile) == NULL)
- {
- fprintf(outfile, "** Unexpected EOF\n");
- done = 1;
- goto CONTINUE;
- }
- if (infile != stdin) fprintf(outfile, "%s", (char *)pp);
- }
-
- /* If the first character after the delimiter is backslash, make
- the pattern end with backslash. This is purely to provide a way
- of testing for the error message when a pattern ends with backslash. */
-
- if (pp[1] == '\\') *pp++ = '\\';
-
- /* Terminate the pattern at the delimiter */
-
- *pp++ = 0;
-
- /* Look for options after final delimiter */
-
- options = 0;
- study_options = 0;
- log_store = showstore; /* default from command line */
-
- while (*pp != 0)
- {
- switch (*pp++)
- {
- case 'g': do_g = 1; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'm': options |= PCRE_MULTILINE; break;
- case 's': options |= PCRE_DOTALL; break;
- case 'x': options |= PCRE_EXTENDED; break;
-
- case '+': do_showrest = 1; break;
- case 'A': options |= PCRE_ANCHORED; break;
- case 'D': do_debug = do_showinfo = 1; break;
- case 'E': options |= PCRE_DOLLAR_ENDONLY; break;
- case 'G': do_G = 1; break;
- case 'I': do_showinfo = 1; break;
- case 'M': log_store = 1; break;
-
-#if !defined NOPOSIX
- case 'P': do_posix = 1; break;
-#endif
-
- case 'S': do_study = 1; break;
- case 'U': options |= PCRE_UNGREEDY; break;
- case 'X': options |= PCRE_EXTRA; break;
- case '8': options |= PCRE_UTF8; utf8 = 1; break;
-
- case 'L':
- ppp = pp;
- while (*ppp != '\n' && *ppp != ' ') ppp++;
- *ppp = 0;
- if (setlocale(LC_CTYPE, (const char *)pp) == NULL)
- {
- fprintf(outfile, "** Failed to set locale \"%s\"\n", pp);
- goto SKIP_DATA;
- }
- tables = pcre_maketables();
- pp = ppp;
- break;
-
- case '\n': case ' ': break;
- default:
- fprintf(outfile, "** Unknown option '%c'\n", pp[-1]);
- goto SKIP_DATA;
- }
- }
-
- /* Handle compiling via the POSIX interface, which doesn't support the
- timing, showing, or debugging options, nor the ability to pass over
- local character tables. */
-
-#if !defined NOPOSIX
- if (posix || do_posix)
- {
- int rc;
- int cflags = 0;
- if ((options & PCRE_CASELESS) != 0) cflags |= REG_ICASE;
- if ((options & PCRE_MULTILINE) != 0) cflags |= REG_NEWLINE;
- rc = regcomp(&preg, (char *)p, cflags);
-
- /* Compilation failed; go back for another re, skipping to blank line
- if non-interactive. */
-
- if (rc != 0)
- {
- (void)regerror(rc, &preg, (char *)buffer, sizeof(buffer));
- fprintf(outfile, "Failed: POSIX code %d: %s\n", rc, buffer);
- goto SKIP_DATA;
- }
- }
-
- /* Handle compiling via the native interface */
-
- else
-#endif /* !defined NOPOSIX */
-
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- {
- re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
- if (re != NULL) free(re);
- }
- time_taken = clock() - start_time;
- fprintf(outfile, "Compile time %.3f milliseconds\n",
- ((double)time_taken * 1000.0) /
- ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
- }
-
- re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
-
- /* Compilation failed; go back for another re, skipping to blank line
- if non-interactive. */
-
- if (re == NULL)
- {
- fprintf(outfile, "Failed: %s at offset %d\n", error, erroroffset);
- SKIP_DATA:
- if (infile != stdin)
- {
- for (;;)
- {
- if (fgets((char *)buffer, sizeof(buffer), infile) == NULL)
- {
- done = 1;
- goto CONTINUE;
- }
- len = (int)strlen((char *)buffer);
- while (len > 0 && isspace(buffer[len-1])) len--;
- if (len == 0) break;
- }
- fprintf(outfile, "\n");
- }
- goto CONTINUE;
- }
-
- /* Compilation succeeded; print data if required. There are now two
- info-returning functions. The old one has a limited interface and
- returns only limited data. Check that it agrees with the newer one. */
-
- if (do_showinfo)
- {
- unsigned long int get_options;
- int old_first_char, old_options, old_count;
- int count, backrefmax, first_char, need_char;
- size_t size;
-
- if (do_debug) print_internals(re);
-
- new_info(re, NULL, PCRE_INFO_OPTIONS, &get_options);
- new_info(re, NULL, PCRE_INFO_SIZE, &size);
- new_info(re, NULL, PCRE_INFO_CAPTURECOUNT, &count);
- new_info(re, NULL, PCRE_INFO_BACKREFMAX, &backrefmax);
- new_info(re, NULL, PCRE_INFO_FIRSTCHAR, &first_char);
- new_info(re, NULL, PCRE_INFO_LASTLITERAL, &need_char);
-
- old_count = pcre_info(re, &old_options, &old_first_char);
- if (count < 0) fprintf(outfile,
- "Error %d from pcre_info()\n", count);
- else
- {
- if (old_count != count) fprintf(outfile,
- "Count disagreement: pcre_fullinfo=%d pcre_info=%d\n", count,
- old_count);
-
- if (old_first_char != first_char) fprintf(outfile,
- "First char disagreement: pcre_fullinfo=%d pcre_info=%d\n",
- first_char, old_first_char);
-
- if (old_options != (int)get_options) fprintf(outfile,
- "Options disagreement: pcre_fullinfo=%ld pcre_info=%d\n",
- get_options, old_options);
- }
-
- if (size != gotten_store) fprintf(outfile,
- "Size disagreement: pcre_fullinfo=%d call to malloc for %d\n",
- size, gotten_store);
-
- fprintf(outfile, "Capturing subpattern count = %d\n", count);
- if (backrefmax > 0)
- fprintf(outfile, "Max back reference = %d\n", backrefmax);
- if (get_options == 0) fprintf(outfile, "No options\n");
- else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s\n",
- ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",
- ((get_options & PCRE_CASELESS) != 0)? " caseless" : "",
- ((get_options & PCRE_EXTENDED) != 0)? " extended" : "",
- ((get_options & PCRE_MULTILINE) != 0)? " multiline" : "",
- ((get_options & PCRE_DOTALL) != 0)? " dotall" : "",
- ((get_options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
- ((get_options & PCRE_EXTRA) != 0)? " extra" : "",
- ((get_options & PCRE_UNGREEDY) != 0)? " ungreedy" : "",
- ((get_options & PCRE_UTF8) != 0)? " utf8" : "");
-
- if (((((real_pcre *)re)->options) & PCRE_ICHANGED) != 0)
- fprintf(outfile, "Case state changes\n");
-
- if (first_char == -1)
- {
- fprintf(outfile, "First char at start or follows \\n\n");
- }
- else if (first_char < 0)
- {
- fprintf(outfile, "No first char\n");
- }
- else
- {
- if (isprint(first_char))
- fprintf(outfile, "First char = \'%c\'\n", first_char);
- else
- fprintf(outfile, "First char = %d\n", first_char);
- }
-
- if (need_char < 0)
- {
- fprintf(outfile, "No need char\n");
- }
- else
- {
- if (isprint(need_char))
- fprintf(outfile, "Need char = \'%c\'\n", need_char);
- else
- fprintf(outfile, "Need char = %d\n", need_char);
- }
- }
-
- /* If /S was present, study the regexp to generate additional info to
- help with the matching. */
-
- if (do_study)
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- extra = pcre_study(re, study_options, &error);
- time_taken = clock() - start_time;
- if (extra != NULL) free(extra);
- fprintf(outfile, " Study time %.3f milliseconds\n",
- ((double)time_taken * 1000.0)/
- ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
- }
-
- extra = pcre_study(re, study_options, &error);
- if (error != NULL)
- fprintf(outfile, "Failed to study: %s\n", error);
- else if (extra == NULL)
- fprintf(outfile, "Study returned NULL\n");
-
- else if (do_showinfo)
- {
- uschar *start_bits = NULL;
- new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
- if (start_bits == NULL)
- fprintf(outfile, "No starting character set\n");
- else
- {
- int i;
- int c = 24;
- fprintf(outfile, "Starting character set: ");
- for (i = 0; i < 256; i++)
- {
- if ((start_bits[i/8] & (1<<(i%8))) != 0)
- {
- if (c > 75)
- {
- fprintf(outfile, "\n ");
- c = 2;
- }
- if (isprint(i) && i != ' ')
- {
- fprintf(outfile, "%c ", i);
- c += 2;
- }
- else
- {
- fprintf(outfile, "\\x%02x ", i);
- c += 5;
- }
- }
- }
- fprintf(outfile, "\n");
- }
- }
- }
- }
-
- /* Read data lines and test them */
-
- for (;;)
- {
- unsigned char *q;
- unsigned char *bptr = dbuffer;
- int *use_offsets = offsets;
- int use_size_offsets = size_offsets;
- int count, c;
- int copystrings = 0;
- int getstrings = 0;
- int getlist = 0;
- int gmatched = 0;
- int start_offset = 0;
- int g_notempty = 0;
-
- options = 0;
-
- if (infile == stdin) printf("data> ");
- if (fgets((char *)buffer, sizeof(buffer), infile) == NULL)
- {
- done = 1;
- goto CONTINUE;
- }
- if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
- len = (int)strlen((char *)buffer);
- while (len > 0 && isspace(buffer[len-1])) len--;
- buffer[len] = 0;
- if (len == 0) break;
-
- p = buffer;
- while (isspace(*p)) p++;
-
- q = dbuffer;
- while ((c = *p++) != 0)
- {
- int i = 0;
- int n = 0;
- if (c == '\\') switch ((c = *p++))
- {
- case 'a': c = 7; break;
- case 'b': c = '\b'; break;
- case 'e': c = 27; break;
- case 'f': c = '\f'; break;
- case 'n': c = '\n'; break;
- case 'r': c = '\r'; break;
- case 't': c = '\t'; break;
- case 'v': c = '\v'; break;
-
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- c -= '0';
- while (i++ < 2 && isdigit(*p) && *p != '8' && *p != '9')
- c = c * 8 + *p++ - '0';
- break;
-
- case 'x':
-
- /* Handle \x{..} specially - new Perl thing for utf8 */
-
- if (*p == '{')
- {
- unsigned char *pt = p;
- c = 0;
- while (isxdigit(*(++pt)))
- c = c * 16 + tolower(*pt) - ((isdigit(*pt))? '0' : 'W');
- if (*pt == '}')
- {
- unsigned char buffer[8];
- int ii, utn;
- utn = ord2utf8(c, buffer);
- for (ii = 0; ii < utn - 1; ii++) *q++ = buffer[ii];
- c = buffer[ii]; /* Last byte */
- p = pt + 1;
- break;
- }
- /* Not correct form; fall through */
- }
-
- /* Ordinary \x */
-
- c = 0;
- while (i++ < 2 && isxdigit(*p))
- {
- c = c * 16 + tolower(*p) - ((isdigit(*p))? '0' : 'W');
- p++;
- }
- break;
-
- case 0: /* Allows for an empty line */
- p--;
- continue;
-
- case 'A': /* Option setting */
- options |= PCRE_ANCHORED;
- continue;
-
- case 'B':
- options |= PCRE_NOTBOL;
- continue;
-
- case 'C':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- copystrings |= 1 << n;
- continue;
-
- case 'G':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- getstrings |= 1 << n;
- continue;
-
- case 'L':
- getlist = 1;
- continue;
-
- case 'N':
- options |= PCRE_NOTEMPTY;
- continue;
-
- case 'O':
- while(isdigit(*p)) n = n * 10 + *p++ - '0';
- if (n > size_offsets_max)
- {
- size_offsets_max = n;
- free(offsets);
- use_offsets = offsets = malloc(size_offsets_max * sizeof(int));
- if (offsets == NULL)
- {
- printf("** Failed to get %d bytes of memory for offsets vector\n",
- size_offsets_max * sizeof(int));
- return 1;
- }
- }
- use_size_offsets = n;
- if (n == 0) use_offsets = NULL;
- continue;
-
- case 'Z':
- options |= PCRE_NOTEOL;
- continue;
- }
- *q++ = c;
- }
- *q = 0;
- len = q - dbuffer;
-
- /* Handle matching via the POSIX interface, which does not
- support timing. */
-
-#if !defined NOPOSIX
- if (posix || do_posix)
- {
- int rc;
- int eflags = 0;
- regmatch_t *pmatch = malloc(sizeof(regmatch_t) * use_size_offsets);
- if ((options & PCRE_NOTBOL) != 0) eflags |= REG_NOTBOL;
- if ((options & PCRE_NOTEOL) != 0) eflags |= REG_NOTEOL;
-
- rc = regexec(&preg, (const char *)bptr, use_size_offsets, pmatch, eflags);
-
- if (rc != 0)
- {
- (void)regerror(rc, &preg, (char *)buffer, sizeof(buffer));
- fprintf(outfile, "No match: POSIX code %d: %s\n", rc, buffer);
- }
- else
- {
- size_t i;
- for (i = 0; i < use_size_offsets; i++)
- {
- if (pmatch[i].rm_so >= 0)
- {
- fprintf(outfile, "%2d: ", (int)i);
- pchars(dbuffer + pmatch[i].rm_so,
- pmatch[i].rm_eo - pmatch[i].rm_so, utf8);
- fprintf(outfile, "\n");
- if (i == 0 && do_showrest)
- {
- fprintf(outfile, " 0+ ");
- pchars(dbuffer + pmatch[i].rm_eo, len - pmatch[i].rm_eo, utf8);
- fprintf(outfile, "\n");
- }
- }
- }
- }
- free(pmatch);
- }
-
- /* Handle matching via the native interface - repeats for /g and /G */
-
- else
-#endif /* !defined NOPOSIX */
-
- for (;; gmatched++) /* Loop for /g or /G */
- {
- if (timeit)
- {
- register int i;
- clock_t time_taken;
- clock_t start_time = clock();
- for (i = 0; i < LOOPREPEAT; i++)
- count = pcre_exec(re, extra, (char *)bptr, len,
- start_offset, options | g_notempty, use_offsets, use_size_offsets);
- time_taken = clock() - start_time;
- fprintf(outfile, "Execute time %.3f milliseconds\n",
- ((double)time_taken * 1000.0)/
- ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
- }
-
- count = pcre_exec(re, extra, (char *)bptr, len,
- start_offset, options | g_notempty, use_offsets, use_size_offsets);
-
- if (count == 0)
- {
- fprintf(outfile, "Matched, but too many substrings\n");
- count = use_size_offsets/3;
- }
-
- /* Matched */
-
- if (count >= 0)
- {
- int i;
- for (i = 0; i < count * 2; i += 2)
- {
- if (use_offsets[i] < 0)
- fprintf(outfile, "%2d: <unset>\n", i/2);
- else
- {
- fprintf(outfile, "%2d: ", i/2);
- pchars(bptr + use_offsets[i], use_offsets[i+1] - use_offsets[i], utf8);
- fprintf(outfile, "\n");
- if (i == 0)
- {
- if (do_showrest)
- {
- fprintf(outfile, " 0+ ");
- pchars(bptr + use_offsets[i+1], len - use_offsets[i+1], utf8);
- fprintf(outfile, "\n");
- }
- }
- }
- }
-
- for (i = 0; i < 32; i++)
- {
- if ((copystrings & (1 << i)) != 0)
- {
- char copybuffer[16];
- int rc = pcre_copy_substring((char *)bptr, use_offsets, count,
- i, copybuffer, sizeof(copybuffer));
- if (rc < 0)
- fprintf(outfile, "copy substring %d failed %d\n", i, rc);
- else
- fprintf(outfile, "%2dC %s (%d)\n", i, copybuffer, rc);
- }
- }
-
- for (i = 0; i < 32; i++)
- {
- if ((getstrings & (1 << i)) != 0)
- {
- const char *substring;
- int rc = pcre_get_substring((char *)bptr, use_offsets, count,
- i, &substring);
- if (rc < 0)
- fprintf(outfile, "get substring %d failed %d\n", i, rc);
- else
- {
- fprintf(outfile, "%2dG %s (%d)\n", i, substring, rc);
- /* free((void *)substring); */
- pcre_free_substring(substring);
- }
- }
- }
-
- if (getlist)
- {
- const char **stringlist;
- int rc = pcre_get_substring_list((char *)bptr, use_offsets, count,
- &stringlist);
- if (rc < 0)
- fprintf(outfile, "get substring list failed %d\n", rc);
- else
- {
- for (i = 0; i < count; i++)
- fprintf(outfile, "%2dL %s\n", i, stringlist[i]);
- if (stringlist[i] != NULL)
- fprintf(outfile, "string list not terminated by NULL\n");
- /* free((void *)stringlist); */
- pcre_free_substring_list(stringlist);
- }
- }
- }
-
- /* Failed to match. If this is a /g or /G loop and we previously set
- g_notempty after a null match, this is not necessarily the end.
- We want to advance the start offset, and continue. Fudge the offset
- values to achieve this. We won't be at the end of the string - that
- was checked before setting g_notempty. */
-
- else
- {
- if (g_notempty != 0)
- {
- use_offsets[0] = start_offset;
- use_offsets[1] = start_offset + 1;
- }
- else
- {
- if (gmatched == 0) /* Error if no previous matches */
- {
- if (count == -1) fprintf(outfile, "No match\n");
- else fprintf(outfile, "Error %d\n", count);
- }
- break; /* Out of the /g loop */
- }
- }
-
- /* If not /g or /G we are done */
-
- if (!do_g && !do_G) break;
-
- /* If we have matched an empty string, first check to see if we are at
- the end of the subject. If so, the /g loop is over. Otherwise, mimic
- what Perl's /g options does. This turns out to be rather cunning. First
- we set PCRE_NOTEMPTY and PCRE_ANCHORED and try the match again at the
- same point. If this fails (picked up above) we advance to the next
- character. */
-
- g_notempty = 0;
- if (use_offsets[0] == use_offsets[1])
- {
- if (use_offsets[0] == len) break;
- g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED;
- }
-
- /* For /g, update the start offset, leaving the rest alone */
-
- if (do_g) start_offset = use_offsets[1];
-
- /* For /G, update the pointer and length */
-
- else
- {
- bptr += use_offsets[1];
- len -= use_offsets[1];
- }
- } /* End of loop for /g and /G */
- } /* End of loop for data lines */
-
- CONTINUE:
-
-#if !defined NOPOSIX
- if (posix || do_posix) regfree(&preg);
-#endif
-
- if (re != NULL) free(re);
- if (extra != NULL) free(extra);
- if (tables != NULL)
- {
- free((void *)tables);
- setlocale(LC_CTYPE, "C");
- }
- }
-
-fprintf(outfile, "\n");
-return 0;
-}
-
-/* End */
diff --git a/srclib/pcre/perltest b/srclib/pcre/perltest
deleted file mode 100755
index e6f797498c..0000000000
--- a/srclib/pcre/perltest
+++ /dev/null
@@ -1,169 +0,0 @@
-#! /usr/bin/perl
-
-# Program for testing regular expressions with perl to check that PCRE handles
-# them the same.
-
-
-# Function for turning a string into a string of printing chars
-
-sub pchars {
-my($t) = "";
-
-foreach $c (split(//, $_[0]))
- {
- if (ord $c >= 32 && ord $c < 127) { $t .= $c; }
- else { $t .= sprintf("\\x%02x", ord $c); }
- }
-$t;
-}
-
-
-
-# Read lines from named file or stdin and write to named file or stdout; lines
-# consist of a regular expression, in delimiters and optionally followed by
-# options, followed by a set of test data, terminated by an empty line.
-
-# Sort out the input and output files
-
-if (@ARGV > 0)
- {
- open(INFILE, "<$ARGV[0]") || die "Failed to open $ARGV[0]\n";
- $infile = "INFILE";
- }
-else { $infile = "STDIN"; }
-
-if (@ARGV > 1)
- {
- open(OUTFILE, ">$ARGV[1]") || die "Failed to open $ARGV[1]\n";
- $outfile = "OUTFILE";
- }
-else { $outfile = "STDOUT"; }
-
-printf($outfile "Perl $] Regular Expressions\n\n");
-
-# Main loop
-
-NEXT_RE:
-for (;;)
- {
- printf " re> " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- next if ($_ eq "");
-
- $pattern = $_;
-
- while ($pattern !~ /^\s*(.).*\1/s)
- {
- printf " > " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- $pattern .= $_;
- }
-
- chomp($pattern);
- $pattern =~ s/\s+$//;
-
- # The private /+ modifier means "print $' afterwards". We use it
- # only on the end of patterns to make it easy to chop off here.
-
- $showrest = ($pattern =~ s/\+(?=[a-z]*$)//);
-
- # Check that the pattern is valid
-
- eval "\$_ =~ ${pattern}";
- if ($@)
- {
- printf $outfile "Error: $@";
- next NEXT_RE;
- }
-
- # If the /g modifier is present, we want to put a loop round the matching;
- # otherwise just a single "if".
-
- $cmd = ($pattern =~ /g[a-z]*$/)? "while" : "if";
-
- # If the pattern is actually the null string, Perl uses the most recently
- # executed (and successfully compiled) regex is used instead. This is a
- # nasty trap for the unwary! The PCRE test suite does contain null strings
- # in places - if they are allowed through here all sorts of weird and
- # unexpected effects happen. To avoid this, we replace such patterns with
- # a non-null pattern that has the same effect.
-
- $pattern = "/(?#)/$2" if ($pattern =~ /^(.)\1(.*)$/);
-
- # Read data lines and test them
-
- for (;;)
- {
- printf "data> " if $infile eq "STDIN";
- last NEXT_RE if ! ($_ = <$infile>);
- chomp;
- printf $outfile "$_\n" if $infile ne "STDIN";
-
- s/\s+$//;
- s/^\s+//;
-
- last if ($_ eq "");
-
- $x = eval "\"$_\""; # To get escapes processed
-
- # Empty array for holding results, then do the matching.
-
- @subs = ();
-
- eval "${cmd} (\$x =~ ${pattern}) {" .
- "push \@subs,\$&;" .
- "push \@subs,\$1;" .
- "push \@subs,\$2;" .
- "push \@subs,\$3;" .
- "push \@subs,\$4;" .
- "push \@subs,\$5;" .
- "push \@subs,\$6;" .
- "push \@subs,\$7;" .
- "push \@subs,\$8;" .
- "push \@subs,\$9;" .
- "push \@subs,\$10;" .
- "push \@subs,\$11;" .
- "push \@subs,\$12;" .
- "push \@subs,\$13;" .
- "push \@subs,\$14;" .
- "push \@subs,\$15;" .
- "push \@subs,\$16;" .
- "push \@subs,\$'; }";
-
- if ($@)
- {
- printf $outfile "Error: $@\n";
- next NEXT_RE;
- }
- elsif (scalar(@subs) == 0)
- {
- printf $outfile "No match\n";
- }
- else
- {
- while (scalar(@subs) != 0)
- {
- printf $outfile (" 0: %s\n", &pchars($subs[0]));
- printf $outfile (" 0+ %s\n", &pchars($subs[17])) if $showrest;
- $last_printed = 0;
- for ($i = 1; $i <= 16; $i++)
- {
- if (defined $subs[$i])
- {
- while ($last_printed++ < $i-1)
- { printf $outfile ("%2d: <unset>\n", $last_printed); }
- printf $outfile ("%2d: %s\n", $i, &pchars($subs[$i]));
- $last_printed = $i;
- }
- }
- splice(@subs, 0, 18);
- }
- }
- }
- }
-
-printf $outfile "\n";
-
-# End
diff --git a/srclib/pcre/perltest8 b/srclib/pcre/perltest8
deleted file mode 100755
index 2fe522d60d..0000000000
--- a/srclib/pcre/perltest8
+++ /dev/null
@@ -1,208 +0,0 @@
-#! /usr/bin/perl
-
-# Program for testing regular expressions with perl to check that PCRE handles
-# them the same. This is the version that supports /8 for UTF-8 testing. It
-# requires at least Perl 5.6.
-
-
-# Function for turning a string into a string of printing chars. There are
-# currently problems with UTF-8 strings; this fudges round them.
-
-sub pchars {
-my($t) = "";
-
-if ($utf8)
- {
- use utf8;
- @p = unpack('U*', $_[0]);
- foreach $c (@p)
- {
- if ($c >= 32 && $c < 127) { $t .= chr $c; }
- else { $t .= sprintf("\\x{%02x}", $c); }
- }
- }
-
-else
- {
- foreach $c (split(//, $_[0]))
- {
- if (ord $c >= 32 && ord $c < 127) { $t .= $c; }
- else { $t .= sprintf("\\x%02x", ord $c); }
- }
- }
-
-$t;
-}
-
-
-
-# Read lines from named file or stdin and write to named file or stdout; lines
-# consist of a regular expression, in delimiters and optionally followed by
-# options, followed by a set of test data, terminated by an empty line.
-
-# Sort out the input and output files
-
-if (@ARGV > 0)
- {
- open(INFILE, "<$ARGV[0]") || die "Failed to open $ARGV[0]\n";
- $infile = "INFILE";
- }
-else { $infile = "STDIN"; }
-
-if (@ARGV > 1)
- {
- open(OUTFILE, ">$ARGV[1]") || die "Failed to open $ARGV[1]\n";
- $outfile = "OUTFILE";
- }
-else { $outfile = "STDOUT"; }
-
-printf($outfile "Perl $] Regular Expressions\n\n");
-
-# Main loop
-
-NEXT_RE:
-for (;;)
- {
- printf " re> " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- next if ($_ eq "");
-
- $pattern = $_;
-
- while ($pattern !~ /^\s*(.).*\1/s)
- {
- printf " > " if $infile eq "STDIN";
- last if ! ($_ = <$infile>);
- printf $outfile "$_" if $infile ne "STDIN";
- $pattern .= $_;
- }
-
- chomp($pattern);
- $pattern =~ s/\s+$//;
-
- # The private /+ modifier means "print $' afterwards".
-
- $showrest = ($pattern =~ s/\+(?=[a-z]*$)//);
-
- # The private /8 modifier means "operate in UTF-8". Currently, Perl
- # has bugs that we try to work around using this flag.
-
- $utf8 = ($pattern =~ s/8(?=[a-z]*$)//);
-
- # Check that the pattern is valid
-
- if ($utf8)
- {
- use utf8;
- eval "\$_ =~ ${pattern}";
- }
- else
- {
- eval "\$_ =~ ${pattern}";
- }
-
- if ($@)
- {
- printf $outfile "Error: $@";
- next NEXT_RE;
- }
-
- # If the /g modifier is present, we want to put a loop round the matching;
- # otherwise just a single "if".
-
- $cmd = ($pattern =~ /g[a-z]*$/)? "while" : "if";
-
- # If the pattern is actually the null string, Perl uses the most recently
- # executed (and successfully compiled) regex is used instead. This is a
- # nasty trap for the unwary! The PCRE test suite does contain null strings
- # in places - if they are allowed through here all sorts of weird and
- # unexpected effects happen. To avoid this, we replace such patterns with
- # a non-null pattern that has the same effect.
-
- $pattern = "/(?#)/$2" if ($pattern =~ /^(.)\1(.*)$/);
-
- # Read data lines and test them
-
- for (;;)
- {
- printf "data> " if $infile eq "STDIN";
- last NEXT_RE if ! ($_ = <$infile>);
- chomp;
- printf $outfile "$_\n" if $infile ne "STDIN";
-
- s/\s+$//;
- s/^\s+//;
-
- last if ($_ eq "");
-
- $x = eval "\"$_\""; # To get escapes processed
-
- # Empty array for holding results, then do the matching.
-
- @subs = ();
-
- $pushes = "push \@subs,\$&;" .
- "push \@subs,\$1;" .
- "push \@subs,\$2;" .
- "push \@subs,\$3;" .
- "push \@subs,\$4;" .
- "push \@subs,\$5;" .
- "push \@subs,\$6;" .
- "push \@subs,\$7;" .
- "push \@subs,\$8;" .
- "push \@subs,\$9;" .
- "push \@subs,\$10;" .
- "push \@subs,\$11;" .
- "push \@subs,\$12;" .
- "push \@subs,\$13;" .
- "push \@subs,\$14;" .
- "push \@subs,\$15;" .
- "push \@subs,\$16;" .
- "push \@subs,\$'; }";
-
- if ($utf8)
- {
- use utf8;
- eval "${cmd} (\$x =~ ${pattern}) {" . $pushes;
- }
- else
- {
- eval "${cmd} (\$x =~ ${pattern}) {" . $pushes;
- }
-
- if ($@)
- {
- printf $outfile "Error: $@\n";
- next NEXT_RE;
- }
- elsif (scalar(@subs) == 0)
- {
- printf $outfile "No match\n";
- }
- else
- {
- while (scalar(@subs) != 0)
- {
- printf $outfile (" 0: %s\n", &pchars($subs[0]));
- printf $outfile (" 0+ %s\n", &pchars($subs[17])) if $showrest;
- $last_printed = 0;
- for ($i = 1; $i <= 16; $i++)
- {
- if (defined $subs[$i])
- {
- while ($last_printed++ < $i-1)
- { printf $outfile ("%2d: <unset>\n", $last_printed); }
- printf $outfile ("%2d: %s\n", $i, &pchars($subs[$i]));
- $last_printed = $i;
- }
- }
- splice(@subs, 0, 18);
- }
- }
- }
- }
-
-printf $outfile "\n";
-
-# End
diff --git a/srclib/pcre/pgrep.c b/srclib/pcre/pgrep.c
deleted file mode 100644
index ad1b87eae9..0000000000
--- a/srclib/pcre/pgrep.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*************************************************
-* PCRE grep program *
-*************************************************/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "config.h"
-#include "pcre.h"
-
-#define FALSE 0
-#define TRUE 1
-
-typedef int BOOL;
-
-
-
-/*************************************************
-* Global variables *
-*************************************************/
-
-static pcre *pattern;
-static pcre_extra *hints;
-
-static BOOL count_only = FALSE;
-static BOOL filenames_only = FALSE;
-static BOOL invert = FALSE;
-static BOOL number = FALSE;
-static BOOL silent = FALSE;
-static BOOL whole_lines = FALSE;
-
-
-
-#if ! HAVE_STRERROR
-/*************************************************
-* Provide strerror() for non-ANSI libraries *
-*************************************************/
-
-/* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
-in their libraries, but can provide the same facility by this simple
-alternative function. */
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-char *
-strerror(int n)
-{
-if (n < 0 || n >= sys_nerr) return "unknown error number";
-return sys_errlist[n];
-}
-#endif /* HAVE_STRERROR */
-
-
-
-/*************************************************
-* Grep an individual file *
-*************************************************/
-
-static int
-pgrep(FILE *in, char *name)
-{
-int rc = 1;
-int linenumber = 0;
-int count = 0;
-int offsets[99];
-char buffer[BUFSIZ];
-
-while (fgets(buffer, sizeof(buffer), in) != NULL)
- {
- BOOL match;
- int length = (int)strlen(buffer);
- if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
- linenumber++;
-
- match = pcre_exec(pattern, hints, buffer, length, 0, 0, offsets, 99) >= 0;
- if (match && whole_lines && offsets[1] != length) match = FALSE;
-
- if (match != invert)
- {
- if (count_only) count++;
-
- else if (filenames_only)
- {
- fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
- return 0;
- }
-
- else if (silent) return 0;
-
- else
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- if (number) fprintf(stdout, "%d:", linenumber);
- fprintf(stdout, "%s\n", buffer);
- }
-
- rc = 0;
- }
- }
-
-if (count_only)
- {
- if (name != NULL) fprintf(stdout, "%s:", name);
- fprintf(stdout, "%d\n", count);
- }
-
-return rc;
-}
-
-
-
-
-/*************************************************
-* Usage function *
-*************************************************/
-
-static int
-usage(int rc)
-{
-fprintf(stderr, "Usage: pgrep [-Vchilnsvx] pattern [file] ...\n");
-return rc;
-}
-
-
-
-
-/*************************************************
-* Main program *
-*************************************************/
-
-int
-main(int argc, char **argv)
-{
-int i;
-int rc = 1;
-int options = 0;
-int errptr;
-const char *error;
-BOOL filenames = TRUE;
-
-/* Process the options */
-
-for (i = 1; i < argc; i++)
- {
- char *s;
- if (argv[i][0] != '-') break;
- s = argv[i] + 1;
- while (*s != 0)
- {
- switch (*s++)
- {
- case 'c': count_only = TRUE; break;
- case 'h': filenames = FALSE; break;
- case 'i': options |= PCRE_CASELESS; break;
- case 'l': filenames_only = TRUE;
- case 'n': number = TRUE; break;
- case 's': silent = TRUE; break;
- case 'v': invert = TRUE; break;
- case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
-
- case 'V':
- fprintf(stderr, "PCRE version %s\n", pcre_version());
- break;
-
- default:
- fprintf(stderr, "pgrep: unknown option %c\n", s[-1]);
- return usage(2);
- }
- }
- }
-
-/* There must be at least a regexp argument */
-
-if (i >= argc) return usage(0);
-
-/* Compile the regular expression. */
-
-pattern = pcre_compile(argv[i++], options, &error, &errptr, NULL);
-if (pattern == NULL)
- {
- fprintf(stderr, "pgrep: error in regex at offset %d: %s\n", errptr, error);
- return 2;
- }
-
-/* Study the regular expression, as we will be running it may times */
-
-hints = pcre_study(pattern, 0, &error);
-if (error != NULL)
- {
- fprintf(stderr, "pgrep: error while studing regex: %s\n", error);
- return 2;
- }
-
-/* If there are no further arguments, do the business on stdin and exit */
-
-if (i >= argc) return pgrep(stdin, NULL);
-
-/* Otherwise, work through the remaining arguments as files. If there is only
-one, don't give its name on the output. */
-
-if (i == argc - 1) filenames = FALSE;
-if (filenames_only) filenames = TRUE;
-
-for (; i < argc; i++)
- {
- FILE *in = fopen(argv[i], "r");
- if (in == NULL)
- {
- fprintf(stderr, "%s: failed to open: %s\n", argv[i], strerror(errno));
- rc = 2;
- }
- else
- {
- int frc = pgrep(in, filenames? argv[i] : NULL);
- if (frc == 0 && rc == 1) rc = 0;
- fclose(in);
- }
- }
-
-return rc;
-}
-
-/* End */
diff --git a/srclib/pcre/study.c b/srclib/pcre/study.c
deleted file mode 100644
index f924543d21..0000000000
--- a/srclib/pcre/study.c
+++ /dev/null
@@ -1,401 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
- Copyright (c) 1997-2001 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
- explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
- General Purpose Licence (GPL), then the terms of that licence shall
- supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-* Set a bit and maybe its alternate case *
-*************************************************/
-
-/* Given a character, set its bit in the table, and also the bit for the other
-version of a letter if we are caseless.
-
-Arguments:
- start_bits points to the bit map
- c is the character
- caseless the caseless flag
- cd the block with char table pointers
-
-Returns: nothing
-*/
-
-static void
-set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
-{
-start_bits[c/8] |= (1 << (c&7));
-if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
- start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
-}
-
-
-
-/*************************************************
-* Create bitmap of starting chars *
-*************************************************/
-
-/* This function scans a compiled unanchored expression and attempts to build a
-bitmap of the set of initial characters. If it can't, it returns FALSE. As time
-goes by, we may be able to get more clever at doing this.
-
-Arguments:
- code points to an expression
- start_bits points to a 32-byte table, initialized to 0
- caseless the current state of the caseless flag
- cd the block with char table pointers
-
-Returns: TRUE if table built, FALSE otherwise
-*/
-
-static BOOL
-set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
- compile_data *cd)
-{
-register int c;
-
-/* This next statement and the later reference to dummy are here in order to
-trick the optimizer of the IBM C compiler for OS/2 into generating correct
-code. Apparently IBM isn't going to fix the problem, and we would rather not
-disable optimization (in this module it actually makes a big difference, and
-the pcre module can use all the optimization it can get). */
-
-volatile int dummy;
-
-do
- {
- const uschar *tcode = code + 3;
- BOOL try_next = TRUE;
-
- while (try_next)
- {
- /* If a branch starts with a bracket or a positive lookahead assertion,
- recurse to set bits from within them. That's all for this branch. */
-
- if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
- {
- if (!set_start_bits(tcode, start_bits, caseless, cd))
- return FALSE;
- try_next = FALSE;
- }
-
- else switch(*tcode)
- {
- default:
- return FALSE;
-
- /* Skip over extended extraction bracket number */
-
- case OP_BRANUMBER:
- tcode += 3;
- break;
-
- /* Skip over lookbehind and negative lookahead assertions */
-
- case OP_ASSERT_NOT:
- case OP_ASSERTBACK:
- case OP_ASSERTBACK_NOT:
- do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
- tcode += 3;
- break;
-
- /* Skip over an option setting, changing the caseless flag */
-
- case OP_OPT:
- caseless = (tcode[1] & PCRE_CASELESS) != 0;
- tcode += 2;
- break;
-
- /* BRAZERO does the bracket, but carries on. */
-
- case OP_BRAZERO:
- case OP_BRAMINZERO:
- if (!set_start_bits(++tcode, start_bits, caseless, cd))
- return FALSE;
- dummy = 1;
- do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
- tcode += 3;
- break;
-
- /* Single-char * or ? sets the bit and tries the next item */
-
- case OP_STAR:
- case OP_MINSTAR:
- case OP_QUERY:
- case OP_MINQUERY:
- set_bit(start_bits, tcode[1], caseless, cd);
- tcode += 2;
- break;
-
- /* Single-char upto sets the bit and tries the next */
-
- case OP_UPTO:
- case OP_MINUPTO:
- set_bit(start_bits, tcode[3], caseless, cd);
- tcode += 4;
- break;
-
- /* At least one single char sets the bit and stops */
-
- case OP_EXACT: /* Fall through */
- tcode++;
-
- case OP_CHARS: /* Fall through */
- tcode++;
-
- case OP_PLUS:
- case OP_MINPLUS:
- set_bit(start_bits, tcode[1], caseless, cd);
- try_next = FALSE;
- break;
-
- /* Single character type sets the bits and stops */
-
- case OP_NOT_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_digit];
- try_next = FALSE;
- break;
-
- case OP_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_digit];
- try_next = FALSE;
- break;
-
- case OP_NOT_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_space];
- try_next = FALSE;
- break;
-
- case OP_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_space];
- try_next = FALSE;
- break;
-
- case OP_NOT_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_word];
- try_next = FALSE;
- break;
-
- case OP_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_word];
- try_next = FALSE;
- break;
-
- /* One or more character type fudges the pointer and restarts, knowing
- it will hit a single character type and stop there. */
-
- case OP_TYPEPLUS:
- case OP_TYPEMINPLUS:
- tcode++;
- break;
-
- case OP_TYPEEXACT:
- tcode += 3;
- break;
-
- /* Zero or more repeats of character types set the bits and then
- try again. */
-
- case OP_TYPEUPTO:
- case OP_TYPEMINUPTO:
- tcode += 2; /* Fall through */
-
- case OP_TYPESTAR:
- case OP_TYPEMINSTAR:
- case OP_TYPEQUERY:
- case OP_TYPEMINQUERY:
- switch(tcode[1])
- {
- case OP_NOT_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_digit];
- break;
-
- case OP_DIGIT:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_digit];
- break;
-
- case OP_NOT_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_space];
- break;
-
- case OP_WHITESPACE:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_space];
- break;
-
- case OP_NOT_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= ~cd->cbits[c+cbit_word];
- break;
-
- case OP_WORDCHAR:
- for (c = 0; c < 32; c++)
- start_bits[c] |= cd->cbits[c+cbit_word];
- break;
- }
-
- tcode += 2;
- break;
-
- /* Character class: set the bits and either carry on or not,
- according to the repeat count. */
-
- case OP_CLASS:
- {
- tcode++;
- for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
- tcode += 32;
- switch (*tcode)
- {
- case OP_CRSTAR:
- case OP_CRMINSTAR:
- case OP_CRQUERY:
- case OP_CRMINQUERY:
- tcode++;
- break;
-
- case OP_CRRANGE:
- case OP_CRMINRANGE:
- if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
- else try_next = FALSE;
- break;
-
- default:
- try_next = FALSE;
- break;
- }
- }
- break; /* End of class handling */
-
- } /* End of switch */
- } /* End of try_next loop */
-
- code += (code[1] << 8) + code[2]; /* Advance to next branch */
- }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-* Study a compiled expression *
-*************************************************/
-
-/* This function is handed a compiled expression that it must study to produce
-information that will speed up the matching. It returns a pcre_extra block
-which then gets handed back to pcre_exec().
-
-Arguments:
- re points to the compiled expression
- options contains option bits
- errorptr points to where to place error messages;
- set NULL unless error
-
-Returns: pointer to a pcre_extra block,
- NULL on error or if no optimization possible
-*/
-
-pcre_extra *
-pcre_study(const pcre *external_re, int options, const char **errorptr)
-{
-uschar start_bits[32];
-real_pcre_extra *extra;
-const real_pcre *re = (const real_pcre *)external_re;
-compile_data compile_block;
-
-*errorptr = NULL;
-
-if (re == NULL || re->magic_number != MAGIC_NUMBER)
- {
- *errorptr = "argument is not a compiled regular expression";
- return NULL;
- }
-
-if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
- {
- *errorptr = "unknown or incorrect option bit(s) set";
- return NULL;
- }
-
-/* For an anchored pattern, or an unchored pattern that has a first char, or a
-multiline pattern that matches only at "line starts", no further processing at
-present. */
-
-if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
- return NULL;
-
-/* Set the character tables in the block which is passed around */
-
-compile_block.lcc = re->tables + lcc_offset;
-compile_block.fcc = re->tables + fcc_offset;
-compile_block.cbits = re->tables + cbits_offset;
-compile_block.ctypes = re->tables + ctypes_offset;
-
-/* See if we can find a fixed set of initial characters for the pattern. */
-
-memset(start_bits, 0, 32 * sizeof(uschar));
-if (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
- &compile_block)) return NULL;
-
-/* Get an "extra" block and put the information therein. */
-
-extra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));
-
-if (extra == NULL)
- {
- *errorptr = "failed to get memory";
- return NULL;
- }
-
-extra->options = PCRE_STUDY_MAPPED;
-memcpy(extra->start_bits, start_bits, sizeof(start_bits));
-
-return (pcre_extra *)extra;
-}
-
-/* End of study.c */
diff --git a/srclib/pcre/testdata/testinput1 b/srclib/pcre/testdata/testinput1
deleted file mode 100644
index 66df9b3d79..0000000000
--- a/srclib/pcre/testdata/testinput1
+++ /dev/null
@@ -1,1950 +0,0 @@
-/the quick brown fox/
- the quick brown fox
- The quick brown FOX
- What do you know about the quick brown fox?
- What do you know about THE QUICK BROWN FOX?
-
-/The quick brown fox/i
- the quick brown fox
- The quick brown FOX
- What do you know about the quick brown fox?
- What do you know about THE QUICK BROWN FOX?
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- *** Failers
- abxyzpqrrabbxyyyypqAzz
- abxyzpqrrrrabbxyyyypqAzz
- abxyzpqrrrabxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-
-/^(abc){1,2}zz/
- abczz
- abcabczz
- *** Failers
- zz
- abcabcabczz
- >>abczz
-
-/^(b+?|a){1,2}?c/
- bc
- bbc
- bbbc
- bac
- bbac
- aac
- abbbbbbbbbbbc
- bbbbbbbbbbbac
- *** Failers
- aaac
- abbbbbbbbbbbac
-
-/^(b+|a){1,2}c/
- bc
- bbc
- bbbc
- bac
- bbac
- aac
- abbbbbbbbbbbc
- bbbbbbbbbbbac
- *** Failers
- aaac
- abbbbbbbbbbbac
-
-/^(b+|a){1,2}?bc/
- bbc
-
-/^(b*|ba){1,2}?bc/
- babc
- bbabc
- bababc
- *** Failers
- bababbc
- babababc
-
-/^(ba|b*){1,2}?bc/
- babc
- bbabc
- bababc
- *** Failers
- bababbc
- babababc
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
-
-/^[ab\]cde]/
- athing
- bthing
- ]thing
- cthing
- dthing
- ething
- *** Failers
- fthing
- [thing
- \\thing
-
-/^[]cde]/
- ]thing
- cthing
- dthing
- ething
- *** Failers
- athing
- fthing
-
-/^[^ab\]cde]/
- fthing
- [thing
- \\thing
- *** Failers
- athing
- bthing
- ]thing
- cthing
- dthing
- ething
-
-/^[^]cde]/
- athing
- fthing
- *** Failers
- ]thing
- cthing
- dthing
- ething
-
-/^\/
-
-
-/^ÿ/
- ÿ
-
-/^[0-9]+$/
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 100
- *** Failers
- abc
-
-/^.*nter/
- enter
- inter
- uponter
-
-/^xxx[0-9]+$/
- xxx0
- xxx1234
- *** Failers
- xxx
-
-/^.+[0-9][0-9][0-9]$/
- x123
- xx123
- 123456
- *** Failers
- 123
- x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- xx123
- 123456
- *** Failers
- 123
- x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
- !pqr=apquxz.ixr.zzz.ac.uk
- abc!=apquxz.ixr.zzz.ac.uk
- abc!pqr=apquxz:ixr.zzz.ac.uk
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-
-/:/
- Well, we need a colon: somewhere
- *** Fail if we don't
-
-/([\da-f:]+)$/i
- 0abc
- abc
- fed
- E
- ::
- 5f03:12C0::932e
- fed def
- Any old stuff
- *** Failers
- 0zzz
- gzzz
- fed\x20
- Any old rubbish
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- A.12.123.0
- *** Failers
- .1.2.3333
- 1.2.3
- 1234.2.3
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 1 IN SOA non-sp1 non-sp2 (
- *** Failers
- 1IN SOA non-sp1 non-sp2(
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- Z.
- 2.
- ab-c.pq-r.
- sxk.zzz.ac.uk.
- x-.y-.
- *** Failers
- -abc.peq.
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- *.b0-a
- *.c3-b.c
- *.c-a.b-c
- *** Failers
- *.0
- *.a-
- *.a-b.c-
- *.c-a.0-c
-
-/^(?=ab(de))(abd)(e)/
- abde
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
-
-/^(?=(ab(cd)))(ab)/
- abcd
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- A.B.C.D
- a.b.c.1.2.3.C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- \"abcd\" ;
- \"\" ; rhubarb
- *** Failers
- \"1234\" : things
-
-/^$/
- \
- *** Failers
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- *** Failers
- abc
- ab cde
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- *** Failers
- abc
- ab cde
-
-/^ a\ b[c ]d $/x
- a bcd
- a b d
- *** Failers
- abcd
- ab d
-
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
-
-/^a*\w/
- z
- az
- aaaz
- a
- aa
- aaaa
- a+
- aa+
-
-/^a*?\w/
- z
- az
- aaaz
- a
- aa
- aaaa
- a+
- aa+
-
-/^a+\w/
- az
- aaaz
- aa
- aaaa
- aa+
-
-/^a+?\w/
- az
- aaaz
- aa
- aaaa
- aa+
-
-/^\d{8}\w{2,}/
- 1234567890
- 12345678ab
- 12345678__
- *** Failers
- 1234567
-
-/^[aeiou\d]{4,5}$/
- uoie
- 1234
- 12345
- aaaaa
- *** Failers
- 123456
-
-/^[aeiou\d]{4,5}?/
- uoie
- 1234
- 12345
- aaaaa
- 123456
-
-/\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- def=defdefdef
- *** Failers
- abc=defdef
-
-/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- abcdefghijkkkkcda2
-
-/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- catatonic catatonic23
- caterpillar caterpillar23
-
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- From abcd Mon Sep 1 12:33:02 1997
- *** Failers
- From abcd Sep 01 12:33:02 1997
-
-/^12.34/s
- 12\n34
- 12\r34
-
-/\w+(?=\t)/
- the quick brown\t fox
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- barrel
- 2barrel
- A barrel
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- *** Failers
- abc123
-
-/^1234(?# test newlines
- inside)/
- 1234
-
-/^1234 #comment in extended re
- /x
- 1234
-
-/#rhubarb
- abcd/x
- abcd
-
-/^abcd#rhubarb/x
- abcd
-
-/^(a)\1{2,3}(.)/
- aaab
- aaaab
- aaaaab
- aaaaaab
-
-/(?!^)abc/
- the abc
- *** Failers
- abc
-
-/(?=^)abc/
- abc
- *** Failers
- the abc
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- <user\@dom.ain>
- user\@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- A missing angle <user\@some.where
- *** Failers
- The quick brown fox
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- <user\@dom.ain>
- user\@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- A missing angle <user\@some.where
- *** Failers
- The quick brown fox
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
-
-/^[\000-\037]/
- \0A
- \01B
- \037C
-
-/\0*/
- \0\0\0\0
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- An A\0\x0\0Z
- *** Failers
- A\0Z
- A\0\x0\0\x0Z
-
-/^(cow|)\1(bell)/
- cowcowbell
- bell
- *** Failers
- cowbell
-
-/^\s/
- \040abc
- \x0cabc
- \nabc
- \rabc
- \tabc
- *** Failers
- abc
-
-/^a b
- c/x
- abc
-
-/^(a|)\1*b/
- ab
- aaaab
- b
- *** Failers
- acb
-
-/^(a|)\1+b/
- aab
- aaaab
- b
- *** Failers
- ab
-
-/^(a|)\1?b/
- ab
- aab
- b
- *** Failers
- acb
-
-/^(a|)\1{2}b/
- aaab
- b
- *** Failers
- ab
- aab
- aaaab
-
-/^(a|)\1{2,3}b/
- aaab
- aaaab
- b
- *** Failers
- ab
- aab
- aaaaab
-
-/ab{1,3}bc/
- abbbbc
- abbbc
- abbc
- *** Failers
- abc
- abbbbbc
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
-
-/^[W-c]+$/
- WXY_^abc
- ***Failers
- wxy
-
-/^[W-c]+$/i
- WXY_^abc
- wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- wxy_^ABC
-
-/^abc$/m
- abc
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/^abc$/
- abc
- *** Failers
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/\Aabc\Z/m
- abc
- abc\n
- *** Failers
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-/\A(.)*\Z/s
- abc\ndef
-
-/\A(.)*\Z/m
- *** Failers
- abc\ndef
-
-/(?:b)|(?::+)/
- b::c
- c::b
-
-/[-az]+/
- az-
- *** Failers
- b
-
-/[az-]+/
- za-
- *** Failers
- b
-
-/[a\-z]+/
- a-z
- *** Failers
- b
-
-/[a-z]+/
- abcdxyz
-
-/[\d-]+/
- 12-34
- *** Failers
- aaa
-
-/[\d-z]+/
- 12-34z
- *** Failers
- aaa
-
-/\x5c/
- \\
-
-/\x20Z/
- the Zoo
- *** Failers
- Zulu
-
-/(abc)\1/i
- abcabc
- ABCabc
- abcABC
-
-/ab{3cd/
- ab{3cd
-
-/ab{3,cd/
- ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
-
-/^a.b/
- a\rb
- *** Failers
- a\nb
-
-/abc$/
- abc
- abc\n
- *** Failers
- abc\ndef
-
-/(abc)\123/
- abc\x53
-
-/(abc)\223/
- abc\x93
-
-/(abc)\323/
- abc\xd3
-
-/(abc)\500/
- abc\x40
- abc\100
-
-/(abc)\5000/
- abc\x400
- abc\x40\x30
- abc\1000
- abc\100\x30
- abc\100\060
- abc\100\60
-
-/abc\81/
- abc\081
- abc\0\x38\x31
-
-/abc\91/
- abc\091
- abc\0\x39\x31
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
-
-/ab\gdef/
- abgdef
-
-/a{0}bc/
- bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
-
-/abc[\10]de/
- abc\010de
-
-/abc[\1]de/
- abc\1de
-
-/(abc)[\1]de/
- abc\1de
-
-/a.b(?s)/
- a\nb
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- baNOTcccd
- baNOTccd
- bacccd
- *** Failers
- anything
- b\bc
- baccd
-
-/[^a]/
- Abc
-
-/[^a]/i
- Abc
-
-/[^a]+/
- AAAaAbc
-
-/[^a]+/i
- AAAaAbc
-
-/[^a]+/
- bbb\nccc
-
-/[^k]$/
- abc
- *** Failers
- abk
-
-/[^k]{2,3}$/
- abc
- kbc
- kabc
- *** Failers
- abk
- akb
- akk
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 123456789\@x.y.z
- *** Failers
- 12345678\@x.y.uk
- 1234567\@a.b.c.d
-
-/(a)\1{8,}/
- aaaaaaaaa
- aaaaaaaaaa
- *** Failers
- aaaaaaa
-
-/[^a]/
- aaaabcd
- aaAabcd
-
-/[^a]/i
- aaaabcd
- aaAabcd
-
-/[^az]/
- aaaabcd
- aaAabcd
-
-/[^az]/i
- aaaabcd
- aaAabcd
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 1.875000282
- 1.235
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 1.875000282
- *** Failers
- 1.235
-
-/a(?)b/
- ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
-
-/foo(.*)bar/
- The food is under the bar in the barn.
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
-
-/^\D*(?!123)/
- ABC123
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- *** Failers
- ABC123
-
-/^[W-]46]/
- W46]789
- -46]789
- *** Failers
- Wall
- Zebra
- 42
- [abcd]
- ]abcd[
-
-/^[W-\]46]/
- W46]789
- Wall
- Zebra
- Xylophone
- 42
- [abcd]
- ]abcd[
- \\backslash
- *** Failers
- -46]789
- well
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/^(a){0,0}/
- bcd
- abc
- aab
-
-/^(a){0,1}/
- bcd
- abc
- aab
-
-/^(a){0,2}/
- bcd
- abc
- aab
-
-/^(a){0,3}/
- bcd
- abc
- aab
- aaa
-
-/^(a){0,}/
- bcd
- abc
- aab
- aaa
- aaaaaaaa
-
-/^(a){1,1}/
- bcd
- abc
- aab
-
-/^(a){1,2}/
- bcd
- abc
- aab
-
-/^(a){1,3}/
- bcd
- abc
- aab
- aaa
-
-/^(a){1,}/
- bcd
- abc
- aab
- aaa
- aaaaaaaa
-
-/.*\.gif/
- borfle\nbib.gif\nno
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
-
-/.*\.gif/m
- borfle\nbib.gif\nno
-
-/.*\.gif/s
- borfle\nbib.gif\nno
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
-
-/.*$/
- borfle\nbib.gif\nno
-
-/.*$/m
- borfle\nbib.gif\nno
-
-/.*$/s
- borfle\nbib.gif\nno
-
-/.*$/ms
- borfle\nbib.gif\nno
-
-/.*$/
- borfle\nbib.gif\nno\n
-
-/.*$/m
- borfle\nbib.gif\nno\n
-
-/.*$/s
- borfle\nbib.gif\nno\n
-
-/.*$/ms
- borfle\nbib.gif\nno\n
-
-/(.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- BarFoo
- abcde\nBar
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- BarFoo
- abcde\nBar
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- BarFoo
- *** Failers
- abcde\nBar
-
-/^.*B/
- **** Failers
- abc\nB
-
-/(?s)^.*B/
- abc\nB
-
-/(?m)^.*B/
- abc\nB
-
-/(?ms)^.*B/
- abc\nB
-
-/(?ms)^B/
- abc\nB
-
-/(?s)B$/
- B\n
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- *** Failers
- z
-
-/abcde{0,0}/
- abcd
- *** Failers
- abce
-
-/ab[cd]{0,0}e/
- abe
- *** Failers
- abcde
-
-/ab(c){0,0}d/
- abd
- *** Failers
- abcd
-
-/a(b*)/
- a
- ab
- abbbb
- *** Failers
- bbbbb
-
-/ab\d{0}e/
- abe
- *** Failers
- ab1e
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- \"the \\\"quick\\\" brown fox\"
-
-/.*?/g+
- abc
-
-/\b/g+
- abc
-
-/\b/+g
- abc
-
-//g
- abc
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
-
-/a[^a]b/
- acb
- a\nb
-
-/a.b/
- acb
- *** Failers
- a\nb
-
-/a[^a]b/s
- acb
- a\nb
-
-/a.b/s
- acb
- a\nb
-
-/^(b+?|a){1,2}?c/
- bac
- bbac
- bbbac
- bbbbac
- bbbbbac
-
-/^(b+|a){1,2}?c/
- bac
- bbac
- bbbac
- bbbbac
- bbbbbac
-
-/(?!\A)x/m
- x\nb\n
- a\bx\n
-
-/\x0{ab}/
- \0{ab}
-
-/(A|B)*?CD/
- CD
-
-/(A|B)*CD/
- CD
-
-/(AB)*?\1/
- ABABAB
-
-/(AB)*\1/
- ABABAB
-
-/ End of testinput1 /
diff --git a/srclib/pcre/testdata/testinput2 b/srclib/pcre/testdata/testinput2
deleted file mode 100644
index f41478e104..0000000000
--- a/srclib/pcre/testdata/testinput2
+++ /dev/null
@@ -1,723 +0,0 @@
-/(a)b|/
-
-/abc/
- abc
- defabc
- \Aabc
- *** Failers
- \Adefabc
- ABC
-
-/^abc/
- abc
- \Aabc
- *** Failers
- defabc
- \Adefabc
-
-/a+bc/
-
-/a*bc/
-
-/a{3}bc/
-
-/(abc|a+z)/
-
-/^abc$/
- abc
- *** Failers
- def\nabc
-
-/ab\gdef/X
-
-/(?X)ab\gdef/X
-
-/x{5,4}/
-
-/z{65536}/
-
-/[abcd/
-
-/[\B]/
-
-/[z-a]/
-
-/^*/
-
-/(abc/
-
-/(?# abc/
-
-/(?z)abc/
-
-/.*b/
-
-/.*?b/
-
-/cat|dog|elephant/
- this sentence eventually mentions a cat
- this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/S
- this sentence eventually mentions a cat
- this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/iS
- this sentence eventually mentions a CAT cat
- this sentences rambles on and on for a while to elephant ElePhant
-
-/a|[bcd]/S
-
-/(a|[^\dZ])/S
-
-/(a|b)*[\s]/S
-
-/(ab\2)/
-
-/{4,5}abc/
-
-/(a)(b)(c)\2/
- abcb
- \O0abcb
- \O3abcb
- \O6abcb
- \O9abcb
- \O12abcb
-
-/(a)bc|(a)(b)\2/
- abc
- \O0abc
- \O3abc
- \O6abc
- aba
- \O0aba
- \O3aba
- \O6aba
- \O9aba
- \O12aba
-
-/abc$/E
- abc
- *** Failers
- abc\n
- abc\ndef
-
-/(a)(b)(c)(d)(e)\6/
-
-/the quick brown fox/
- the quick brown fox
- this is a line with the quick brown fox
-
-/the quick brown fox/A
- the quick brown fox
- *** Failers
- this is a line with the quick brown fox
-
-/ab(?z)cd/
-
-/^abc|def/
- abcdef
- abcdef\B
-
-/.*((abc)$|(def))/
- defabc
- \Zdefabc
-
-/abc/P
- abc
- *** Failers
-
-/^abc|def/P
- abcdef
- abcdef\B
-
-/.*((abc)$|(def))/P
- defabc
- \Zdefabc
-
-/the quick brown fox/P
- the quick brown fox
- *** Failers
- The Quick Brown Fox
-
-/the quick brown fox/Pi
- the quick brown fox
- The Quick Brown Fox
-
-/abc.def/P
- *** Failers
- abc\ndef
-
-/abc$/P
- abc
- abc\n
-
-/(abc)\2/P
-
-/(abc\1)/P
- abc
-
-/)/
-
-/a[]b/
-
-/[^aeiou ]{3,}/
- co-processors, and for
-
-/<.*>/
- abc<def>ghi<klm>nop
-
-/<.*?>/
- abc<def>ghi<klm>nop
-
-/<.*>/U
- abc<def>ghi<klm>nop
-
-/<.*>(?U)/
- abc<def>ghi<klm>nop
-
-/<.*?>/U
- abc<def>ghi<klm>nop
-
-/={3,}/U
- abc========def
-
-/(?U)={3,}?/
- abc========def
-
-/(?<!bar|cattle)foo/
- foo
- catfoo
- *** Failers
- the barfoo
- and cattlefoo
-
-/(?<=a+)b/
-
-/(?<=aaa|b{0,3})b/
-
-/(?<!(foo)a\1)bar/
-
-/(?i)abc/
-
-/(a|(?m)a)/
-
-/(?i)^1234/
-
-/(^b|(?i)^d)/
-
-/(?s).*/
-
-/[abcd]/S
-
-/(?i)[abcd]/S
-
-/(?m)[xy]|(b|c)/S
-
-/(^a|^b)/m
-
-/(?i)(^a|^b)/m
-
-/(a)(?(1)a|b|c)/
-
-/(?(?=a)a|b|c)/
-
-/(?(1a)/
-
-/(?(?i))/
-
-/(?(abc))/
-
-/(?(?<ab))/
-
-/((?s)blah)\s+\1/
-
-/((?i)blah)\s+\1/
-
-/((?i)b)/DS
-
-/(a*b|(?i:c*(?-i)d))/S
-
-/a$/
- a
- a\n
- *** Failers
- \Za
- \Za\n
-
-/a$/m
- a
- a\n
- \Za\n
- *** Failers
- \Za
-
-/\Aabc/m
-
-/^abc/m
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
- aaaaabbbbbcccccdef
-
-/(?<=foo)[ab]/S
-
-/(?<!foo)(alpha|omega)/S
-
-/(?!alphabet)[ab]/S
-
-/(?<=foo\n)^bar/m
-
-/(?>^abc)/m
- abc
- def\nabc
- *** Failers
- defabc
-
-/(?<=ab(c+)d)ef/
-
-/(?<=ab(?<=c+)d)ef/
-
-/(?<=ab(c|de)f)g/
-
-/The next three are in testinput2 because they have variable length branches/
-
-/(?<=bullock|donkey)-cart/
- the bullock-cart
- a donkey-cart race
- *** Failers
- cart
- horse-and-cart
-
-/(?<=ab(?i)x|y|z)/
-
-/(?>.*)(?<=(abcd)|(xyz))/
- alphabetabcd
- endingxyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
- abxyZZ
- abXyZZ
- ZZZ
- zZZ
- bZZ
- BZZ
- *** Failers
- ZZ
- abXYZZ
- zzz
- bzz
-
-/(?<!(foo)a)bar/
- bar
- foobbar
- *** Failers
- fooabar
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-
-/^(a)?(?(1)a|b)+$/
- *** Failers
- a
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-
-/^(a\1?){4}$/
- aaaaaa
-
-/These are syntax tests from Perl 5.005/
-
-/a[b-a]/
-
-/a[]b/
-
-/a[/
-
-/*a/
-
-/(*)b/
-
-/abc)/
-
-/(abc/
-
-/a**/
-
-/)(/
-
-/\1/
-
-/\2/
-
-/(a)|\2/
-
-/a[b-a]/i
-
-/a[]b/i
-
-/a[/i
-
-/*a/i
-
-/(*)b/i
-
-/abc)/i
-
-/(abc/i
-
-/a**/i
-
-/)(/i
-
-/:(?:/
-
-/(?<%)b/
-
-/a(?{)b/
-
-/a(?{{})b/
-
-/a(?{}})b/
-
-/a(?{"{"})b/
-
-/a(?{"{"}})b/
-
-/(?(1?)a|b)/
-
-/(?(1)a|b|c)/
-
-/[a[:xyz:/
-
-/(?<=x+)y/
-
-/a{37,17}/
-
-/abc/\
-
-/abc/\P
-
-/abc/\i
-
-/(a)bc(d)/
- abcd
- abcd\C2
- abcd\C5
-
-/(.{20})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1
- abcdefghijklmnopqrstuvwxyz\G1
-
-/(.{15})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1\G1
-
-/(.{16})/
- abcdefghijklmnopqrstuvwxyz
- abcdefghijklmnopqrstuvwxyz\C1\G1\L
-
-/^(a|(bc))de(f)/
- adef\G1\G2\G3\G4\L
- bcdef\G1\G2\G3\G4\L
- adefghijk\C0
-
-/^abc\00def/
- abc\00def\L\C0
-
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)?)?)?)?)?)?)?)?)?otherword/M
-
-/.*X/D
-
-/.*X/Ds
-
-/(.*X|^B)/D
-
-/(.*X|^B)/Ds
-
-/(?s)(.*X|^B)/D
-
-/(?s:.*X|^B)/D
-
-/\Biss\B/+
- Mississippi
-
-/\Biss\B/+P
- Mississippi
-
-/iss/G+
- Mississippi
-
-/\Biss\B/G+
- Mississippi
-
-/\Biss\B/g+
- Mississippi
- *** Failers
- Mississippi\A
-
-/(?<=[Ms])iss/g+
- Mississippi
-
-/(?<=[Ms])iss/G+
- Mississippi
-
-/^iss/g+
- ississippi
-
-/.*iss/g+
- abciss\nxyzisspqr
-
-/.i./+g
- Mississippi
- Mississippi\A
- Missouri river
- Missouri river\A
-
-/^.is/+g
- Mississippi
-
-/^ab\n/g+
- ab\nab\ncd
-
-/^ab\n/mg+
- ab\nab\ncd
-
-/abc/
-
-/abc|bac/
-
-/(abc|bac)/
-
-/(abc|(c|dc))/
-
-/(abc|(d|de)c)/
-
-/a*/
-
-/a+/
-
-/(baa|a+)/
-
-/a{0,3}/
-
-/baa{3,}/
-
-/"([^\\"]+|\\.)*"/
-
-/(abc|ab[cd])/
-
-/(a|.)/
-
-/a|ba|\w/
-
-/abc(?=pqr)/
-
-/...(?<=abc)/
-
-/abc(?!pqr)/
-
-/ab./
-
-/ab[xyz]/
-
-/abc*/
-
-/ab.c*/
-
-/a.c*/
-
-/.c*/
-
-/ac*/
-
-/(a.c*|b.c*)/
-
-/a.c*|aba/
-
-/.+a/
-
-/(?=abcda)a.*/
-
-/(?=a)a.*/
-
-/a(b)*/
-
-/a\d*/
-
-/ab\d*/
-
-/a(\d)*/
-
-/abcde{0,0}/
-
-/ab\d+/
-
-/a(?(1)b)/
-
-/a(?(1)bag|big)/
-
-/a(?(1)bag|big)*/
-
-/a(?(1)bag|big)+/
-
-/a(?(1)b..|b..)/
-
-/ab\d{0}e/
-
-/a?b?/
- a
- b
- ab
- \
- *** Failers
- \N
-
-/|-/
- abcd
- -abc
- \Nab-c
- *** Failers
- \Nabc
-
-/a*(b+)(z)(z)/P
- aaaabbbbzzzz
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- aaaabbbbzzzz\O2
- aaaabbbbzzzz\O3
- aaaabbbbzzzz\O4
- aaaabbbbzzzz\O5
-
-/^.?abcd/S
-
-/\( # ( at start
- (?: # Non-capturing bracket
- (?>[^()]+) # Either a sequence of non-brackets (no backtracking)
- | # Or
- (?R) # Recurse - i.e. nested bracketed string
- )* # Zero or more contents
- \) # Closing )
- /x
- (abcd)
- (abcd)xyz
- xyz(abcd)
- (ab(xy)cd)pqr
- (ab(xycd)pqr
- () abc ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- *** Failers
- abcd
- abcd)
- (abcd
-
-/\( ( (?>[^()]+) | (?R) )* \) /xg
- (ab(xy)cd)pqr
- 1(abcd)(x(y)z)pqr
-
-/\( (?: (?>[^()]+) | (?R) ) \) /x
- (abcd)
- (ab(xy)cd)
- (a(b(c)d)e)
- ((ab))
- *** Failers
- ()
-
-/\( (?: (?>[^()]+) | (?R) )? \) /x
- ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
-
-/\( ( (?>[^()]+) | (?R) )* \) /x
- (ab(xy)cd)
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
- (123ab(xy)cd)
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
- (ab(xy)cd)
- (123ab(xy)cd)
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
- (ab(xy)cd)
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
- (abcd(xyz<p>qrs)123)
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
- (ab(cd)ef)
- (ab(cd(ef)gh)ij)
-
-/^[[:alnum:]]/D
-
-/^[[:alpha:]]/D
-
-/^[[:ascii:]]/D
-
-/^[[:cntrl:]]/D
-
-/^[[:digit:]]/D
-
-/^[[:graph:]]/D
-
-/^[[:lower:]]/D
-
-/^[[:print:]]/D
-
-/^[[:punct:]]/D
-
-/^[[:space:]]/D
-
-/^[[:upper:]]/D
-
-/^[[:xdigit:]]/D
-
-/^[[:word:]]/D
-
-/^[[:^cntrl:]]/D
-
-/^[12[:^digit:]]/D
-
-/[01[:alpha:]%]/D
-
-/[[.ch.]]/
-
-/[[=ch=]]/
-
-/[[:rhubarb:]]/
-
-/[[:upper:]]/i
- A
- a
-
-/[[:lower:]]/i
- A
- a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
- ab
- aB
- *** Failers
- Ab
- AB
-
-/[\200-\410]/
-
-/^(?(0)f|b)oo/
-
-/This one's here because of the large output vector needed/
-
-/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/
- \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
-
-/This one's here because Perl does this differently and PCRE can't at present/
-
-/(main(O)?)+/
- mainmain
- mainOmain
-
-/ End of testinput2 /
diff --git a/srclib/pcre/testdata/testinput3 b/srclib/pcre/testdata/testinput3
deleted file mode 100644
index d3bd74fdd3..0000000000
--- a/srclib/pcre/testdata/testinput3
+++ /dev/null
@@ -1,1724 +0,0 @@
-/(?<!bar)foo/
- foo
- catfood
- arfootle
- rfoosh
- *** Failers
- barfoo
- towbarfoo
-
-/\w{3}(?<!bar)foo/
- catfood
- *** Failers
- foo
- barfoo
- towbarfoo
-
-/(?<=(foo)a)bar/
- fooabar
- *** Failers
- bar
- foobbar
-
-/\Aabc\z/m
- abc
- *** Failers
- abc\n
- qqq\nabc
- abc\nzzz
- qqq\nabc\nzzz
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 1.875000282
- *** Failers
- 1.235
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- *** Failers
- this is not a line with only words and spaces!
-
-/(\d+)(\w)/
- 12345a
- 12345+
-
-/((?>\d+))(\w)/
- 12345a
- *** Failers
- 12345+
-
-/(?>a+)b/
- aaab
-
-/((?>a+)b)/
- aaab
-
-/(?>(a+))b/
- aaab
-
-/(?>b)+/
- aaabbbccc
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- (abc(def)xyz)
- *** Failers
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/a(?-i)b/i
- ab
- *** Failers
- Ab
- aB
- AB
-
-/(a (?x)b c)d e/
- a bcd e
- *** Failers
- a b cd e
- abcd e
- a bcde
-
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- *** Failers
- abcdef
-
-/(a(?i)b)c/
- abc
- aBc
- *** Failers
- abC
- aBC
- Abc
- ABc
- ABC
- AbC
-
-/a(?i:b)c/
- abc
- aBc
- *** Failers
- ABC
- abC
- aBC
-
-/a(?i:b)*c/
- aBc
- aBBc
- *** Failers
- aBC
- aBBC
-
-/a(?=b(?i)c)\w\wd/
- abcd
- abCd
- *** Failers
- aBCd
- abcD
-
-/(?s-i:more.*than).*million/i
- more than million
- more than MILLION
- more \n than Million
- *** Failers
- MORE THAN MILLION
- more \n than \n million
-
-/(?:(?s-i)more.*than).*million/i
- more than million
- more than MILLION
- more \n than Million
- *** Failers
- MORE THAN MILLION
- more \n than \n million
-
-/(?>a(?i)b+)+c/
- abc
- aBbc
- aBBc
- *** Failers
- Abc
- abAb
- abbC
-
-/(?=a(?i)b)\w\wc/
- abc
- aBc
- *** Failers
- Ab
- abC
- aBC
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- aBxxc
- *** Failers
- Abxxc
- ABxxc
- abxxC
-
-/(?:(a)|b)(?(1)A|B)/
- aA
- bB
- *** Failers
- aB
- bA
-
-/^(a)?(?(1)a|b)+$/
- aa
- b
- bb
- *** Failers
- ab
-
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 12
- *** Failers
- 123
- xyz
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 12
- *** Failers
- 123
- xyz
-
-/(?(?<=foo)bar|cat)/
- foobar
- cat
- fcat
- focat
- *** Failers
- foocat
-
-/(?(?<!foo)cat|bar)/
- foobar
- cat
- fcat
- focat
- *** Failers
- foocat
-
-/( \( )? [^()]+ (?(1) \) |) /x
- abcd
- (abcd)
- the quick (abcd) fox
- (abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
- abcd
- (abcd)
- the quick (abcd) fox
- (abcd
-
-/^(?(2)a|(1)(2))+$/
- 12
- 12a
- 12aa
- *** Failers
- 1234
-
-/((?i)blah)\s+\1/
- blah blah
- BLAH BLAH
- Blah Blah
- blaH blaH
- *** Failers
- blah BLAH
- Blah blah
- blaH blah
-
-/((?i)blah)\s+(?i:\1)/
- blah blah
- BLAH BLAH
- Blah Blah
- blaH blaH
- blah BLAH
- Blah blah
- blaH blah
-
-/(?>a*)*/
- a
- aa
- aaaa
-
-/(abc|)+/
- abc
- abcabc
- abcabcabc
- xyz
-
-/([a]*)*/
- a
- aaaaa
-
-/([ab]*)*/
- a
- b
- ababab
- aaaabcde
- bbbb
-
-/([^a]*)*/
- b
- bbbb
- aaa
-
-/([^ab]*)*/
- cccc
- abab
-
-/([a]*?)*/
- a
- aaaa
-
-/([ab]*?)*/
- a
- b
- abab
- baba
-
-/([^a]*?)*/
- b
- bbbb
- aaa
-
-/([^ab]*?)*/
- c
- cccc
- baba
-
-/(?>a*)*/
- a
- aaabcde
-
-/((?>a*))*/
- aaaaa
- aabbaa
-
-/((?>a*?))*/
- aaaaa
- aabbaa
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 12-09-98
- *** Failers
- sep-12-98
-
-/(?<=(foo))bar\1/
- foobarfoo
- foobarfootling
- *** Failers
- foobar
- barfoo
-
-/(?i:saturday|sunday)/
- saturday
- sunday
- Saturday
- Sunday
- SATURDAY
- SUNDAY
- SunDay
-
-/(a(?i)bc|BB)x/
- abcx
- aBCx
- bbx
- BBx
- *** Failers
- abcX
- aBCX
- bbX
- BBX
-
-/^([ab](?i)[cd]|[ef])/
- ac
- aC
- bD
- elephant
- Europe
- frog
- France
- *** Failers
- Africa
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- aBd
- xy
- xY
- zebra
- Zambesi
- *** Failers
- aCD
- XY
-
-/(?<=foo\n)^bar/m
- foo\nbar
- *** Failers
- bar
- baz\nbar
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- barbarbaz
- koobarbaz
- *** Failers
- baz
- foobarbaz
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-/where it does set $1 to aa when matching aaaaaa./
-
-/^(a\1?){4}$/
- a
- aa
- aaa
- aaaa
- aaaaa
- aaaaaaa
- aaaaaaaa
- aaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaaa
- aaaaaaaaaaaa
- aaaaaaaaaaaaa
- aaaaaaaaaaaaaa
- aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
- aa
- aaa
- aaaa
- aaaaa
- aaaaaa
- aaaaaaa
- aaaaaaaa
- aaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaaa
- aaaaaaaaaaaa
- aaaaaaaaaaaaa
- aaaaaaaaaaaaaa
- aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-
-/abc/
- abc
- xabcy
- ababc
- *** Failers
- xbc
- axc
- abx
-
-/ab*c/
- abc
-
-/ab*bc/
- abc
- abbc
- abbbbc
-
-/.{1}/
- abbbbc
-
-/.{3,4}/
- abbbbc
-
-/ab{0,}bc/
- abbbbc
-
-/ab+bc/
- abbc
- *** Failers
- abc
- abq
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
-
-/ab{1,}bc/
- abbbbc
-
-/ab{1,3}bc/
- abbbbc
-
-/ab{3,4}bc/
- abbbbc
-
-/ab{4,5}bc/
- *** Failers
- abq
- abbbbc
-
-/ab?bc/
- abbc
- abc
-
-/ab{0,1}bc/
- abc
-
-/ab?bc/
-
-/ab?c/
- abc
-
-/ab{0,1}c/
- abc
-
-/^abc$/
- abc
- *** Failers
- abbbbc
- abcc
-
-/^abc/
- abcc
-
-/^abc$/
-
-/abc$/
- aabc
- *** Failers
- aabc
- aabcd
-
-/^/
- abc
-
-/$/
- abc
-
-/a.c/
- abc
- axc
-
-/a.*c/
- axyzc
-
-/a[bc]d/
- abd
- *** Failers
- axyzd
- abc
-
-/a[b-d]e/
- ace
-
-/a[b-d]/
- aac
-
-/a[-b]/
- a-
-
-/a[b-]/
- a-
-
-/a]/
- a]
-
-/a[]]b/
- a]b
-
-/a[^bc]d/
- aed
- *** Failers
- abd
- abd
-
-/a[^-b]c/
- adc
-
-/a[^]b]c/
- adc
- *** Failers
- a-c
- a]c
-
-/\ba\b/
- a-
- -a
- -a-
-
-/\by\b/
- *** Failers
- xy
- yz
- xyz
-
-/\Ba\B/
- *** Failers
- a-
- -a
- -a-
-
-/\By\b/
- xy
-
-/\by\B/
- yz
-
-/\By\B/
- xyz
-
-/\w/
- a
-
-/\W/
- -
- *** Failers
- -
- a
-
-/a\sb/
- a b
-
-/a\Sb/
- a-b
- *** Failers
- a-b
- a b
-
-/\d/
- 1
-
-/\D/
- -
- *** Failers
- -
- 1
-
-/[\w]/
- a
-
-/[\W]/
- -
- *** Failers
- -
- a
-
-/a[\s]b/
- a b
-
-/a[\S]b/
- a-b
- *** Failers
- a-b
- a b
-
-/[\d]/
- 1
-
-/[\D]/
- -
- *** Failers
- -
- 1
-
-/ab|cd/
- abc
- abcd
-
-/()ef/
- def
-
-/$b/
-
-/a\(b/
- a(b
-
-/a\(*b/
- ab
- a((b
-
-/a\\b/
- a\b
-
-/((a))/
- abc
-
-/(a)b(c)/
- abc
-
-/a+b+c/
- aabbabc
-
-/a{1,}b{1,}c/
- aabbabc
-
-/a.+?c/
- abcabc
-
-/(a+|b)*/
- ab
-
-/(a+|b){0,}/
- ab
-
-/(a+|b)+/
- ab
-
-/(a+|b){1,}/
- ab
-
-/(a+|b)?/
- ab
-
-/(a+|b){0,1}/
- ab
-
-/[^ab]*/
- cde
-
-/abc/
- *** Failers
- b
-
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
-
-/([abc])*bcd/
- abcd
-
-/a|b|c|d|e/
- e
-
-/(a|b|c|d|e)f/
- ef
-
-/abcd*efg/
- abcdefg
-
-/ab*/
- xabyabbbz
- xayabbbz
-
-/(ab|cd)e/
- abcde
-
-/[abhgefdc]ij/
- hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
-
-/(a|b)c*d/
- abcd
-
-/(ab|ab*)bc/
- abc
-
-/a([bc]*)c*/
- abc
-
-/a([bc]*)(c*d)/
- abcd
-
-/a([bc]+)(c*d)/
- abcd
-
-/a([bc]*)(c+d)/
- abcd
-
-/a[bcd]*dcdcde/
- adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
- abcde
- adcdcde
-
-/(ab|a)b*c/
- abc
-
-/((a)(b)c)(d)/
- abcd
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
-
-/^a(bc+|b[eh])g|.h$/
- abh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- ij
- reffgz
- *** Failers
- effg
- bcdd
-
-/((((((((((a))))))))))/
- a
-
-/((((((((((a))))))))))\10/
- aa
-
-/(((((((((a)))))))))/
- a
-
-/multiple words of text/
- *** Failers
- aa
- uh-uh
-
-/multiple words/
- multiple words, yeah
-
-/(.*)c(.*)/
- abcde
-
-/\((.*), (.*)\)/
- (a, b)
-
-/[k]/
-
-/abcd/
- abcd
-
-/a(bc)d/
- abcd
-
-/a[-]?c/
- ac
-
-/(abc)\1/
- abcabc
-
-/([a-c]*)\1/
- abcabc
-
-/(a)|\1/
- a
- *** Failers
- ab
- x
-
-/(([a-c])b*?\2)*/
- ababbbcbc
-
-/(([a-c])b*?\2){3}/
- ababbbcbc
-
-/((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
-
-/((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
-
-/abc/i
- ABC
- XABCY
- ABABC
- *** Failers
- aaxabxbaxbbx
- XBC
- AXC
- ABX
-
-/ab*c/i
- ABC
-
-/ab*bc/i
- ABC
- ABBC
-
-/ab*?bc/i
- ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
-
-/ab+?bc/i
- ABBC
-
-/ab+bc/i
- *** Failers
- ABC
- ABQ
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
- ABQ
- ABBBBC
-
-/ab??bc/i
- ABBC
- ABC
-
-/ab{0,1}?bc/i
- ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
-
-/ab{0,1}?c/i
- ABC
-
-/^abc$/i
- ABC
- *** Failers
- ABBBBC
- ABCC
-
-/^abc/i
- ABCC
-
-/^abc$/i
-
-/abc$/i
- AABC
-
-/^/i
- ABC
-
-/$/i
- ABC
-
-/a.c/i
- ABC
- AXC
-
-/a.*?c/i
- AXYZC
-
-/a.*c/i
- *** Failers
- AABC
- AXYZD
-
-/a[bc]d/i
- ABD
-
-/a[b-d]e/i
- ACE
- *** Failers
- ABC
- ABD
-
-/a[b-d]/i
- AAC
-
-/a[-b]/i
- A-
-
-/a[b-]/i
- A-
-
-/a]/i
- A]
-
-/a[]]b/i
- A]B
-
-/a[^bc]d/i
- AED
-
-/a[^-b]c/i
- ADC
- *** Failers
- ABD
- A-C
-
-/a[^]b]c/i
- ADC
-
-/ab|cd/i
- ABC
- ABCD
-
-/()ef/i
- DEF
-
-/$b/i
- *** Failers
- A]C
- B
-
-/a\(b/i
- A(B
-
-/a\(*b/i
- AB
- A((B
-
-/a\\b/i
- A\B
-
-/((a))/i
- ABC
-
-/(a)b(c)/i
- ABC
-
-/a+b+c/i
- AABBABC
-
-/a{1,}b{1,}c/i
- AABBABC
-
-/a.+?c/i
- ABCABC
-
-/a.*?c/i
- ABCABC
-
-/a.{0,5}?c/i
- ABCABC
-
-/(a+|b)*/i
- AB
-
-/(a+|b){0,}/i
- AB
-
-/(a+|b)+/i
- AB
-
-/(a+|b){1,}/i
- AB
-
-/(a+|b)?/i
- AB
-
-/(a+|b){0,1}/i
- AB
-
-/(a+|b){0,1}?/i
- AB
-
-/[^ab]*/i
- CDE
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
-
-/([abc])*bcd/i
- ABCD
-
-/a|b|c|d|e/i
- E
-
-/(a|b|c|d|e)f/i
- EF
-
-/abcd*efg/i
- ABCDEFG
-
-/ab*/i
- XABYABBBZ
- XAYABBBZ
-
-/(ab|cd)e/i
- ABCDE
-
-/[abhgefdc]ij/i
- HIJ
-
-/^(ab|cd)e/i
- ABCDE
-
-/(abc|)ef/i
- ABCDEF
-
-/(a|b)c*d/i
- ABCD
-
-/(ab|ab*)bc/i
- ABC
-
-/a([bc]*)c*/i
- ABC
-
-/a([bc]*)(c*d)/i
- ABCD
-
-/a([bc]+)(c*d)/i
- ABCD
-
-/a([bc]*)(c+d)/i
- ABCD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
-
-/((a)(b)c)(d)/i
- ABCD
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- IJ
- REFFGZ
- *** Failers
- ADCDCDE
- EFFG
- BCDD
-
-/((((((((((a))))))))))/i
- A
-
-/((((((((((a))))))))))\10/i
- AA
-
-/(((((((((a)))))))))/i
- A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
-
-/multiple words of text/i
- *** Failers
- AA
- UH-UH
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
-
-/(.*)c(.*)/i
- ABCDE
-
-/\((.*), (.*)\)/i
- (A, B)
-
-/[k]/i
-
-/abcd/i
- ABCD
-
-/a(bc)d/i
- ABCD
-
-/a[-]?c/i
- AC
-
-/(abc)\1/i
- ABCABC
-
-/([a-c]*)\1/i
- ABCABC
-
-/a(?!b)./
- abad
-
-/a(?=d)./
- abad
-
-/a(?=c|d)./
- abad
-
-/a(?:b|c|d)(.)/
- ace
-
-/a(?:b|c|d)*(.)/
- ace
-
-/a(?:b|c|d)+?(.)/
- ace
- acdbcdbe
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
-
-/((foo)|(bar))*/
- foobar
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
-
-/^(.+)?B/
- AB
-
-/^([^a-z])|(\^)$/
- .
-
-/^[<>]&/
- <&OUT
-
-/^(a\1?){4}$/
- aaaaaaaaaa
- *** Failers
- AB
- aaaaaaaaa
- aaaaaaaaaaa
-
-/^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- *** Failers
- aaaaaaaaa
- aaaaaaaaaaa
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
-
-/(?<=a)b/
- ab
- *** Failers
- cb
- b
-
-/(?<!c)b/
- ab
- b
- b
-
-/(?:..)*a/
- aba
-
-/(?:..)*?a/
- aba
-
-/^(?:b|a(?=(.)))*\1/
- abc
-
-/^(){3,5}/
- abc
-
-/^(a+)*ax/
- aax
-
-/^((a|b)+)*ax/
- aax
-
-/^((a|bc)+)*ax/
- aax
-
-/(a|x)*ab/
- cab
-
-/(a)*ab/
- cab
-
-/(?:(?i)a)b/
- ab
-
-/((?i)a)b/
- ab
-
-/(?:(?i)a)b/
- Ab
-
-/((?i)a)b/
- Ab
-
-/(?:(?i)a)b/
- *** Failers
- cb
- aB
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
-
-/((?i:a))b/
- ab
-
-/(?i:a)b/
- Ab
-
-/((?i:a))b/
- Ab
-
-/(?i:a)b/
- *** Failers
- aB
- aB
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
-
-/((?-i)a)b/i
- ab
-
-/(?:(?-i)a)b/i
- aB
-
-/((?-i)a)b/i
- aB
-
-/(?:(?-i)a)b/i
- *** Failers
- aB
- Ab
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
-
-/((?-i)a)b/i
- aB
-
-/(?:(?-i)a)b/i
- *** Failers
- Ab
- AB
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
-
-/((?-i:a))b/i
- ab
-
-/(?-i:a)b/i
- aB
-
-/((?-i:a))b/i
- aB
-
-/(?-i:a)b/i
- *** Failers
- AB
- Ab
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
-
-/((?-i:a))b/i
- aB
-
-/(?-i:a)b/i
- *** Failers
- Ab
- AB
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
- AB
- a\nB
-
-/((?s-i:a.))b/i
- a\nB
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
- Ab4ab
- ab4Ab
-
-/foo\w*\d{4}baz/
- foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
-
-/^a(?#xxx){3}c/
- aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
-
-/(?<![cd])b/
- *** Failers
- B\nB
- dbcb
-
-/(?<![cd])[ab]/
- dbaacb
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
-
-/(?<!cd)[ab]/
- cdaccb
-
-/^(?:a?b?)*$/
- *** Failers
- dbcb
- a--
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
-
-/((?m)^b$)/
- a\nb\nc\n
-
-/(?m)^b/
- a\nb\n
-
-/(?m)^(b)/
- a\nb\n
-
-/((?m)^b)/
- a\nb\n
-
-/\n((?m)^b)/
- a\nb\n
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- a\nb\nc\n
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- a\nb\nc\n
-
-/^b/
-
-/()^b/
- *** Failers
- a\nb\nc\n
- a\nb\nc\n
-
-/((?m)^b)/
- a\nb\nc\n
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
- a
-
-/(x)?(?(1)a|b)/
- *** Failers
- a
- a
-
-/(x)?(?(1)b|a)/
- a
-
-/()?(?(1)b|a)/
- a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
- a
-
-/^(\()?blah(?(1)(\)))$/
- (blah)
- blah
- *** Failers
- a
- blah)
- (blah
-
-/^(\(+)?blah(?(1)(\)))$/
- (blah)
- blah
- *** Failers
- blah)
- (blah
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
-
-/(?(?=a)b|a)/
- *** Failers
- a
- a
-
-/(?(?=a)a|b)/
- a
-
-/(?=(a+?))(\1ab)/
- aaab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
- one:
-
-/$(?<=^(a))/
- a
-
-/(?=(a+?))(\1ab)/
- aaab
-
-/^(?=(a+?))\1ab/
- *** Failers
- aaab
- aaab
-
-/([\w:]+::)?(\w+)$/
- abcd
- xy:z:::abcd
-
-/^[^bcd]*(c+)/
- aexycd
-
-/(a*)b+/
- caab
-
-/([\w:]+::)?(\w+)$/
- abcd
- xy:z:::abcd
- *** Failers
- abcd:
- abcd:
-
-/^[^bcd]*(c+)/
- aexycd
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
-
-/([[:]+)/
- a:[b]:
-
-/([[=]+)/
- a=[b]=
-
-/([[.]+)/
- a.[b].
-
-/((?>a+)b)/
- aaab
-
-/(?>(a+))b/
- aaab
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
-
-/a\Z/
- *** Failers
- aaab
- a\nb\n
-
-/b\Z/
- a\nb\n
-
-/b\z/
-
-/b\Z/
- a\nb
-
-/b\z/
- a\nb
- *** Failers
-
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- abc
- a-b
- 0-9
- a.b
- 5.6.7
- the.quick.brown.fox
- a100.b200.300c
- 12-ab.1245
- ***Failers
- \
- .a
- -a
- a-
- a.
- a_b
- a.-
- a..
- ab..bc
- the.quick.brown.fox-
- the.quick.brown.fox.
- the.quick.brown.fox_
- the.quick.brown.fox+
-
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- endingwxyz
- *** Failers
- a rather long string that doesn't end with one of them
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 123999foo
- *** Failers
- 123abcfoo
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 123999foo
- *** Failers
- 123abcfoo
-
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 123456foo
- *** Failers
- 123999foo
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 123456foo
- *** Failers
- 123999foo
-
-/<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href=\'abcd xyz pqr\' cats
-
-/<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href = \'abcd xyz pqr\' cats
-
-/<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- <a href=\"abcd xyz pqr\" cats
- <a href = \'abcd xyz pqr\' cats
-
-/((Z)+|A)*/
- ZABCDEFG
-
-/(Z()|A)*/
- ZABCDEFG
-
-/(Z(())|A)*/
- ZABCDEFG
-
-/((?>Z)+|A)*/
- ZABCDEFG
-
-/((?>)+|A)*/
- ZABCDEFG
-
-/a*/g
- abbab
-
-/^[a-\d]/
- abcde
- -things
- 0digit
- *** Failers
- bcdef
-
-/^[\d-a]/
- abcde
- -things
- 0digit
- *** Failers
- bcdef
-
-/ End of testinput3 /
diff --git a/srclib/pcre/testdata/testinput4 b/srclib/pcre/testdata/testinput4
deleted file mode 100644
index f2878965f6..0000000000
--- a/srclib/pcre/testdata/testinput4
+++ /dev/null
@@ -1,65 +0,0 @@
-/^[\w]+/
- *** Failers
- École
-
-/^[\w]+/Lfr
- École
-
-/^[\w]+/
- *** Failers
- École
-
-/^[\W]+/
- École
-
-/^[\W]+/Lfr
- *** Failers
- École
-
-/[\b]/
- \b
- *** Failers
- a
-
-/[\b]/Lfr
- \b
- *** Failers
- a
-
-/^\w+/
- *** Failers
- École
-
-/^\w+/Lfr
- École
-
-/(.+)\b(.+)/
- École
-
-/(.+)\b(.+)/Lfr
- *** Failers
- École
-
-/École/i
- École
- *** Failers
- école
-
-/École/iLfr
- École
- école
-
-/\w/IS
-
-/\w/ISLfr
-
-/^[\xc8-\xc9]/iLfr
- École
- école
-
-/^[\xc8-\xc9]/Lfr
- École
- *** Failers
- école
-
-/ End of testinput4 /
diff --git a/srclib/pcre/testdata/testinput5 b/srclib/pcre/testdata/testinput5
deleted file mode 100644
index d66cfbddf3..0000000000
--- a/srclib/pcre/testdata/testinput5
+++ /dev/null
@@ -1,118 +0,0 @@
-/-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
-/-- strings automatically, do not use the \x{} construct except with --/
-/-- patterns that have the /8 option set, and don't use them without! --/
-
-/a.b/8
- acb
- a\x7fb
- a\x{100}b
- *** Failers
- a\nb
-
-/a(.{3})b/8
- a\x{4000}xyb
- a\x{4000}\x7fyb
- a\x{4000}\x{100}yb
- *** Failers
- a\x{4000}b
- ac\ncb
-
-/a(.*?)(.)/
- a\xc0\x88b
-
-/a(.*?)(.)/8
- a\x{100}b
-
-/a(.*)(.)/
- a\xc0\x88b
-
-/a(.*)(.)/8
- a\x{100}b
-
-/a(.)(.)/
- a\xc0\x92bcd
-
-/a(.)(.)/8
- a\x{240}bcd
-
-/a(.?)(.)/
- a\xc0\x92bcd
-
-/a(.?)(.)/8
- a\x{240}bcd
-
-/a(.??)(.)/
- a\xc0\x92bcd
-
-/a(.??)(.)/8
- a\x{240}bcd
-
-/a(.{3})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- *** Failers
- a\x{1234}b
- ac\ncb
-
-/a(.{3,})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
- a\x{1234}b
-
-/a(.{3,}?)b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
- a\x{1234}b
-
-/a(.{3,5})b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- axxxxxbcdefghijb
- *** Failers
- a\x{1234}b
- axxxxxxbcdefghijb
-
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- a\x{1234}\x{4321}yb
- a\x{1234}\x{4321}\x{3412}b
- axxxxbcdefghijb
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- axbxxbcdefghijb
- axxxxxbcdefghijb
- *** Failers
- a\x{1234}b
- axxxxxxbcdefghijb
-
-/^[a\x{c0}]/8
- *** Failers
- \x{100}
-
-/(?<=aXb)cd/8
- aXbcd
-
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
-
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
-
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- *** Failers
- \x{100}\x{100}b
-
-/ End of testinput5 /
diff --git a/srclib/pcre/testdata/testinput6 b/srclib/pcre/testdata/testinput6
deleted file mode 100644
index 00748513c6..0000000000
--- a/srclib/pcre/testdata/testinput6
+++ /dev/null
@@ -1,78 +0,0 @@
-/\x{100}/8DM
-
-/\x{1000}/8DM
-
-/\x{10000}/8DM
-
-/\x{100000}/8DM
-
-/\x{1000000}/8DM
-
-/\x{4000000}/8DM
-
-/\x{7fffFFFF}/8DM
-
-/[\x{ff}]/8DM
-
-/[\x{100}]/8DM
-
-/\x{ffffffff}/8
-
-/\x{100000000}/8
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
-
-/\x80/8D
-
-/\xff/8D
-
-/\x{0041}\x{2262}\x{0391}\x{002e}/D8
- \x{0041}\x{2262}\x{0391}\x{002e}
-
-/\x{D55c}\x{ad6d}\x{C5B4}/D8
- \x{D55c}\x{ad6d}\x{C5B4}
-
-/\x{65e5}\x{672c}\x{8a9e}/D8
- \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/D8
-
-/\x{084}/D8
-
-/\x{104}/D8
-
-/\x{861}/D8
-
-/\x{212ab}/D8
-
-/.{3,5}X/D8
- \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
-
-/.{3,5}?/D8
- \x{212ab}\x{212ab}\x{212ab}\x{861}
-
-/-- These tests are here rather than in testinput5 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-
-/^[a\x{c0}]b/8
- \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- a\x{c0}a\x{c0}aaa/
-
-/ End of testinput6 /
diff --git a/srclib/pcre/testdata/testoutput1 b/srclib/pcre/testdata/testoutput1
deleted file mode 100644
index f0047ffc40..0000000000
--- a/srclib/pcre/testdata/testoutput1
+++ /dev/null
@@ -1,3018 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/the quick brown fox/
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
-No match
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
-No match
-
-/The quick brown fox/i
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
- 0: The quick brown FOX
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
- 0: THE QUICK BROWN FOX
-
-/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
- 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
-
-/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- 0: aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- 0: aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- 0: aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- 0: aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- 0: abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- 0: aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- 0: abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- 0: aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- 0: aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- 0: aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- *** Failers
-No match
- abxyzpqrrabbxyyyypqAzz
-No match
- abxyzpqrrrrabbxyyyypqAzz
-No match
- abxyzpqrrrabxyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
-No match
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
-No match
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
-No match
-
-/^(abc){1,2}zz/
- abczz
- 0: abczz
- 1: abc
- abcabczz
- 0: abcabczz
- 1: abc
- *** Failers
-No match
- zz
-No match
- abcabcabczz
-No match
- >>abczz
-No match
-
-/^(b+?|a){1,2}?c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: b
- bbbc
- 0: bbbc
- 1: bb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: bb
- bbbc
- 0: bbbc
- 1: bbb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- *** Failers
-No match
- aaac
-No match
- abbbbbbbbbbbac
-No match
-
-/^(b+|a){1,2}?bc/
- bbc
- 0: bbc
- 1: b
-
-/^(b*|ba){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^(ba|b*){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- *** Failers
-No match
- bababbc
-No match
- babababc
-No match
-
-/^\ca\cA\c[\c{\c:/
- \x01\x01\e;z
- 0: \x01\x01\x1b;z
-
-/^[ab\]cde]/
- athing
- 0: a
- bthing
- 0: b
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- fthing
-No match
- [thing
-No match
- \\thing
-No match
-
-/^[]cde]/
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- *** Failers
-No match
- athing
-No match
- fthing
-No match
-
-/^[^ab\]cde]/
- fthing
- 0: f
- [thing
- 0: [
- \\thing
- 0: \
- *** Failers
- 0: *
- athing
-No match
- bthing
-No match
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
-No match
-
-/^[^]cde]/
- athing
- 0: a
- fthing
- 0: f
- *** Failers
- 0: *
- ]thing
-No match
- cthing
-No match
- dthing
-No match
- ething
-No match
-
-/^\/
-
- 0: \x81
-
-/^ÿ/
- ÿ
- 0: \xff
-
-/^[0-9]+$/
- 0
- 0: 0
- 1
- 0: 1
- 2
- 0: 2
- 3
- 0: 3
- 4
- 0: 4
- 5
- 0: 5
- 6
- 0: 6
- 7
- 0: 7
- 8
- 0: 8
- 9
- 0: 9
- 10
- 0: 10
- 100
- 0: 100
- *** Failers
-No match
- abc
-No match
-
-/^.*nter/
- enter
- 0: enter
- inter
- 0: inter
- uponter
- 0: uponter
-
-/^xxx[0-9]+$/
- xxx0
- 0: xxx0
- xxx1234
- 0: xxx1234
- *** Failers
-No match
- xxx
-No match
-
-/^.+[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^.+?[0-9][0-9][0-9]$/
- x123
- 0: x123
- xx123
- 0: xx123
- 123456
- 0: 123456
- *** Failers
-No match
- 123
-No match
- x1234
- 0: x1234
-
-/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- 0: abc!pqr=apquxz.ixr.zzz.ac.uk
- 1: abc
- 2: pqr
- *** Failers
-No match
- !pqr=apquxz.ixr.zzz.ac.uk
-No match
- abc!=apquxz.ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz:ixr.zzz.ac.uk
-No match
- abc!pqr=apquxz.ixr.zzz.ac.ukk
-No match
-
-/:/
- Well, we need a colon: somewhere
- 0: :
- *** Fail if we don't
-No match
-
-/([\da-f:]+)$/i
- 0abc
- 0: 0abc
- 1: 0abc
- abc
- 0: abc
- 1: abc
- fed
- 0: fed
- 1: fed
- E
- 0: E
- 1: E
- ::
- 0: ::
- 1: ::
- 5f03:12C0::932e
- 0: 5f03:12C0::932e
- 1: 5f03:12C0::932e
- fed def
- 0: def
- 1: def
- Any old stuff
- 0: ff
- 1: ff
- *** Failers
-No match
- 0zzz
-No match
- gzzz
-No match
- fed\x20
-No match
- Any old rubbish
-No match
-
-/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- 0: .1.2.3
- 1: 1
- 2: 2
- 3: 3
- A.12.123.0
- 0: A.12.123.0
- 1: 12
- 2: 123
- 3: 0
- *** Failers
-No match
- .1.2.3333
-No match
- 1.2.3
-No match
- 1234.2.3
-No match
-
-/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 0: 1 IN SOA non-sp1 non-sp2(
- 1: 1
- 2: non-sp1
- 3: non-sp2
- 1 IN SOA non-sp1 non-sp2 (
- 0: 1 IN SOA non-sp1 non-sp2 (
- 1: 1
- 2: non-sp1
- 3: non-sp2
- *** Failers
-No match
- 1IN SOA non-sp1 non-sp2(
-No match
-
-/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- 0: a.
- Z.
- 0: Z.
- 2.
- 0: 2.
- ab-c.pq-r.
- 0: ab-c.pq-r.
- 1: .pq-r
- sxk.zzz.ac.uk.
- 0: sxk.zzz.ac.uk.
- 1: .uk
- x-.y-.
- 0: x-.y-.
- 1: .y-
- *** Failers
-No match
- -abc.peq.
-No match
-
-/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- 0: *.a
- *.b0-a
- 0: *.b0-a
- 1: 0-a
- *.c3-b.c
- 0: *.c3-b.c
- 1: 3-b
- 2: .c
- *.c-a.b-c
- 0: *.c-a.b-c
- 1: -a
- 2: .b-c
- 3: -c
- *** Failers
-No match
- *.0
-No match
- *.a-
-No match
- *.a-b.c-
-No match
- *.c-a.0-c
-No match
-
-/^(?=ab(de))(abd)(e)/
- abde
- 0: abde
- 1: de
- 2: abd
- 3: e
-
-/^(?!(ab)de|x)(abd)(f)/
- abdf
- 0: abdf
- 1: <unset>
- 2: abd
- 3: f
-
-/^(?=(ab(cd)))(ab)/
- abcd
- 0: ab
- 1: abcd
- 2: cd
- 3: ab
-
-/^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- 0: a.b.c.d
- 1: .d
- A.B.C.D
- 0: A.B.C.D
- 1: .D
- a.b.c.1.2.3.C
- 0: a.b.c.1.2.3.C
- 1: .C
-
-/^\".*\"\s*(;.*)?$/
- \"1234\"
- 0: "1234"
- \"abcd\" ;
- 0: "abcd" ;
- 1: ;
- \"\" ; rhubarb
- 0: "" ; rhubarb
- 1: ; rhubarb
- *** Failers
-No match
- \"1234\" : things
-No match
-
-/^$/
- \
- 0:
- *** Failers
-No match
-
-/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- 0: ab c
- *** Failers
-No match
- abc
-No match
- ab cde
-No match
-
-/^ a\ b[c ]d $/x
- a bcd
- 0: a bcd
- a b d
- 0: a b d
- *** Failers
-No match
- abcd
-No match
- ab d
-No match
-
-/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: abc
- 2: bc
- 3: c
- 4: def
- 5: ef
- 6: f
- 7: hij
- 8: ij
- 9: j
-10: klm
-11: lm
-12: m
-
-/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: bc
- 2: c
- 3: ef
- 4: f
- 5: ij
- 6: j
- 7: lm
- 8: m
-
-/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
- 0: a+ Z0+\x08\x0a\x1d\x12
-
-/^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
- 0: .^$(*+)|{?,?}
-
-/^a*\w/
- z
- 0: z
- az
- 0: az
- aaaz
- 0: aaaz
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
- a+
- 0: a
- aa+
- 0: aa
-
-/^a*?\w/
- z
- 0: z
- az
- 0: a
- aaaz
- 0: a
- a
- 0: a
- aa
- 0: a
- aaaa
- 0: a
- a+
- 0: a
- aa+
- 0: a
-
-/^a+\w/
- az
- 0: az
- aaaz
- 0: aaaz
- aa
- 0: aa
- aaaa
- 0: aaaa
- aa+
- 0: aa
-
-/^a+?\w/
- az
- 0: az
- aaaz
- 0: aa
- aa
- 0: aa
- aaaa
- 0: aa
- aa+
- 0: aa
-
-/^\d{8}\w{2,}/
- 1234567890
- 0: 1234567890
- 12345678ab
- 0: 12345678ab
- 12345678__
- 0: 12345678__
- *** Failers
-No match
- 1234567
-No match
-
-/^[aeiou\d]{4,5}$/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- aaaaa
- 0: aaaaa
- *** Failers
-No match
- 123456
-No match
-
-/^[aeiou\d]{4,5}?/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 1234
- aaaaa
- 0: aaaa
- 123456
- 0: 1234
-
-/\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- 0: abc=abcabc
- 1: abc
- 2: abc
- def=defdefdef
- 0: def=defdefdef
- 1: def
- 2: def
- *** Failers
-No match
- abc=defdef
-No match
-
-/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- 0: abcdefghijkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: cd
- abcdefghijkkkkcda2
- 0: abcdefghijkkkkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: cd
-
-/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- 0: cataract cataract23
- 1: cataract
- 2: aract
- 3: ract
- 4:
- 5: 3
- catatonic catatonic23
- 0: catatonic catatonic23
- 1: catatonic
- 2: atonic
- 3: tonic
- 4:
- 5: 3
- caterpillar caterpillar23
- 0: caterpillar caterpillar23
- 1: caterpillar
- 2: erpillar
- 3: <unset>
- 4:
- 5: 3
-
-
-/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: abcd
-
-/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: Sep
- From abcd Mon Sep 1 12:33:02 1997
- 0: From abcd Mon Sep 1 12:33
- 1: Sep
- *** Failers
-No match
- From abcd Sep 01 12:33:02 1997
-No match
-
-/^12.34/s
- 12\n34
- 0: 12\x0a34
- 12\r34
- 0: 12\x0d34
-
-/\w+(?=\t)/
- the quick brown\t fox
- 0: brown
-
-/foo(?!bar)(.*)/
- foobar is foolish see?
- 0: foolish see?
- 1: lish see?
-
-/(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- 0: rowbar etc
- 1: etc
- barrel
- 0: barrel
- 1: rel
- 2barrel
- 0: 2barrel
- 1: rel
- A barrel
- 0: A barrel
- 1: rel
-
-/^(\D*)(?=\d)(?!123)/
- abc456
- 0: abc
- 1: abc
- *** Failers
-No match
- abc123
-No match
-
-/^1234(?# test newlines
- inside)/
- 1234
- 0: 1234
-
-/^1234 #comment in extended re
- /x
- 1234
- 0: 1234
-
-/#rhubarb
- abcd/x
- abcd
- 0: abcd
-
-/^abcd#rhubarb/x
- abcd
- 0: abcd
-
-/^(a)\1{2,3}(.)/
- aaab
- 0: aaab
- 1: a
- 2: b
- aaaab
- 0: aaaab
- 1: a
- 2: b
- aaaaab
- 0: aaaaa
- 1: a
- 2: a
- aaaaaab
- 0: aaaaa
- 1: a
- 2: a
-
-/(?!^)abc/
- the abc
- 0: abc
- *** Failers
-No match
- abc
-No match
-
-/(?=^)abc/
- abc
- 0: abc
- *** Failers
-No match
- the abc
-No match
-
-/^[ab]{1,3}(ab*|b)/
- aabbbbb
- 0: aabb
- 1: b
-
-/^[ab]{1,3}?(ab*|b)/
- aabbbbb
- 0: aabbbbb
- 1: abbbbb
-
-/^[ab]{1,3}?(ab*?|b)/
- aabbbbb
- 0: aa
- 1: a
-
-/^[ab]{1,3}(ab*?|b)/
- aabbbbb
- 0: aabb
- 1: b
-
-/ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional leading comment
-(?: (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # one word, optionally followed by....
-(?:
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
-\(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) | # comments, or...
-
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-# quoted strings
-)*
-< (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # leading <
-(?: @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* , (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-)* # further okay, if led by comma
-: # closing colon
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* )? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) # initial word
-(?: (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-" (?: # opening quote...
-[^\\\x80-\xff\n\015"] # Anything except backslash and quote
-| # or
-\\ [^\x80-\xff] # Escaped something (something != CR)
-)* " # closing quote
-) )* # further okay, if led by a period
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* @ (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # initial subdomain
-(?: #
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* \. # if led by a period...
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* (?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-| \[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-) # ...further okay
-)*
-# address spec
-(?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* > # trailing >
-# name and address
-) (?: [\040\t] | \(
-(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
-\) )* # optional trailing comment
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <user@dom.ain>
- <user\@dom.ain>
- 0: user@dom.ain
- user\@dom.ain
- 0: user@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <user.1234@dom.ain> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <user.1234@dom.ain> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: user@some.where
- *** Failers
-No match
- The quick brown fox
-No match
-
-/[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional leading comment
-(?:
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address
-| # or
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-# leading word
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
-(?:
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-|
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-) # "special" comment or quoted string
-[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
-)*
-<
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# <
-(?:
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-(?: ,
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-)* # additional domains
-:
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)? # optional route
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-# Atom
-| # or
-" # "
-[^\\\x80-\xff\n\015"] * # normal
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
-" # "
-# Quoted string
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# additional words
-)*
-@
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-(?:
-\.
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-(?:
-[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
-(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
-|
-\[ # [
-(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
-\] # ]
-)
-[\040\t]* # Nab whitespace.
-(?:
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: # (
-(?: \\ [^\x80-\xff] |
-\( # (
-[^\\\x80-\xff\n\015()] * # normal*
-(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
-\) # )
-) # special
-[^\\\x80-\xff\n\015()] * # normal*
-)* # )*
-\) # )
-[\040\t]* )* # If comment found, allow more spaces.
-# optional trailing comments
-)*
-# address spec
-> # >
-# name and address
-)
-/x
- Alan Other <user\@dom.ain>
- 0: Alan Other <user@dom.ain>
- <user\@dom.ain>
- 0: user@dom.ain
- user\@dom.ain
- 0: user@dom.ain
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <user.1234@dom.ain>
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <user.1234@dom.ain>
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: user@some.where
- *** Failers
-No match
- The quick brown fox
-No match
-
-/abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- 0: abc\x00def\x00pqr\x00xyz\x000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
- 0: abc\x00def\x00pqr\x00xyz\x000AB
-
-/abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
-
-/^[\000-\037]/
- \0A
- 0: \x00
- \01B
- 0: \x01
- \037C
- 0: \x1f
-
-/\0*/
- \0\0\0\0
- 0: \x00\x00\x00\x00
-
-/A\x0{2,3}Z/
- The A\x0\x0Z
- 0: A\x00\x00Z
- An A\0\x0\0Z
- 0: A\x00\x00\x00Z
- *** Failers
-No match
- A\0Z
-No match
- A\0\x0\0\x0Z
-No match
-
-/^(cow|)\1(bell)/
- cowcowbell
- 0: cowcowbell
- 1: cow
- 2: bell
- bell
- 0: bell
- 1:
- 2: bell
- *** Failers
-No match
- cowbell
-No match
-
-/^\s/
- \040abc
- 0:
- \x0cabc
- 0: \x0c
- \nabc
- 0: \x0a
- \rabc
- 0: \x0d
- \tabc
- 0: \x09
- *** Failers
-No match
- abc
-No match
-
-/^a b
- c/x
- abc
- 0: abc
-
-/^(a|)\1*b/
- ab
- 0: ab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- acb
-No match
-
-/^(a|)\1+b/
- aab
- 0: aab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
-
-/^(a|)\1?b/
- ab
- 0: ab
- 1: a
- aab
- 0: aab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- acb
-No match
-
-/^(a|)\1{2}b/
- aaab
- 0: aaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
- aab
-No match
- aaaab
-No match
-
-/^(a|)\1{2,3}b/
- aaab
- 0: aaab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- *** Failers
-No match
- ab
-No match
- aab
-No match
- aaaaab
-No match
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
- abbbc
- 0: abbbc
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abbbbbc
-No match
-
-/([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
-
-/^[W-c]+$/
- WXY_^abc
- 0: WXY_^abc
- ***Failers
-No match
- wxy
-No match
-
-/^[W-c]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^[\x3f-\x5F]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
-
-/^abc$/m
- abc
- 0: abc
- qqq\nabc
- 0: abc
- abc\nzzz
- 0: abc
- qqq\nabc\nzzz
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\Aabc\Z/m
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-/\A(.)*\Z/s
- abc\ndef
- 0: abc\x0adef
- 1: f
-
-/\A(.)*\Z/m
- *** Failers
- 0: *** Failers
- 1: s
- abc\ndef
-No match
-
-/(?:b)|(?::+)/
- b::c
- 0: b
- c::b
- 0: ::
-
-/[-az]+/
- az-
- 0: az-
- *** Failers
- 0: a
- b
-No match
-
-/[az-]+/
- za-
- 0: za-
- *** Failers
- 0: a
- b
-No match
-
-/[a\-z]+/
- a-z
- 0: a-z
- *** Failers
- 0: a
- b
-No match
-
-/[a-z]+/
- abcdxyz
- 0: abcdxyz
-
-/[\d-]+/
- 12-34
- 0: 12-34
- *** Failers
-No match
- aaa
-No match
-
-/[\d-z]+/
- 12-34z
- 0: 12-34z
- *** Failers
-No match
- aaa
-No match
-
-/\x5c/
- \\
- 0: \
-
-/\x20Z/
- the Zoo
- 0: Z
- *** Failers
-No match
- Zulu
-No match
-
-/(abc)\1/i
- abcabc
- 0: abcabc
- 1: abc
- ABCabc
- 0: ABCabc
- 1: ABC
- abcABC
- 0: abcABC
- 1: abc
-
-/ab{3cd/
- ab{3cd
- 0: ab{3cd
-
-/ab{3,cd/
- ab{3,cd
- 0: ab{3,cd
-
-/ab{3,4a}cd/
- ab{3,4a}cd
- 0: ab{3,4a}cd
-
-/{4,5a}bc/
- {4,5a}bc
- 0: {4,5a}bc
-
-/^a.b/
- a\rb
- 0: a\x0db
- *** Failers
-No match
- a\nb
-No match
-
-/abc$/
- abc
- 0: abc
- abc\n
- 0: abc
- *** Failers
-No match
- abc\ndef
-No match
-
-/(abc)\123/
- abc\x53
- 0: abcS
- 1: abc
-
-/(abc)\223/
- abc\x93
- 0: abc\x93
- 1: abc
-
-/(abc)\323/
- abc\xd3
- 0: abc\xd3
- 1: abc
-
-/(abc)\500/
- abc\x40
- 0: abc@
- 1: abc
- abc\100
- 0: abc@
- 1: abc
-
-/(abc)\5000/
- abc\x400
- 0: abc@0
- 1: abc
- abc\x40\x30
- 0: abc@0
- 1: abc
- abc\1000
- 0: abc@0
- 1: abc
- abc\100\x30
- 0: abc@0
- 1: abc
- abc\100\060
- 0: abc@0
- 1: abc
- abc\100\60
- 0: abc@0
- 1: abc
-
-/abc\81/
- abc\081
- 0: abc\x0081
- abc\0\x38\x31
- 0: abc\x0081
-
-/abc\91/
- abc\091
- 0: abc\x0091
- abc\0\x39\x31
- 0: abc\x0091
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
- 0: abcdefghijkllS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-12: l
-
-/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
- 0: abcdefghijk\x0aS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
-10: j
-11: k
-
-/ab\gdef/
- abgdef
- 0: abgdef
-
-/a{0}bc/
- bc
- 0: bc
-
-/(a|(bc)){0,0}?xyz/
- xyz
- 0: xyz
-
-/abc[\10]de/
- abc\010de
- 0: abc\x08de
-
-/abc[\1]de/
- abc\1de
- 0: abc\x01de
-
-/(abc)[\1]de/
- abc\1de
- 0: abc\x01de
- 1: abc
-
-/a.b(?s)/
- a\nb
- 0: a\x0ab
-
-/^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- 0: baNOTcccc
- 1: b
- 2: a
- 3: NOT
- 4: cccc
- baNOTcccd
- 0: baNOTccc
- 1: b
- 2: a
- 3: NOT
- 4: ccc
- baNOTccd
- 0: baNOTcc
- 1: b
- 2: a
- 3: NO
- 4: Tcc
- bacccd
- 0: baccc
- 1: b
- 2: a
- 3:
- 4: ccc
- *** Failers
- 0: *** Failers
- 1: *
- 2: *
- 3: * Fail
- 4: ers
- anything
-No match
- b\bc
-No match
- baccd
-No match
-
-/[^a]/
- Abc
- 0: A
-
-/[^a]/i
- Abc
- 0: b
-
-/[^a]+/
- AAAaAbc
- 0: AAA
-
-/[^a]+/i
- AAAaAbc
- 0: bc
-
-/[^a]+/
- bbb\nccc
- 0: bbb\x0accc
-
-/[^k]$/
- abc
- 0: c
- *** Failers
- 0: s
- abk
-No match
-
-/[^k]{2,3}$/
- abc
- 0: abc
- kbc
- 0: bc
- kabc
- 0: abc
- *** Failers
- 0: ers
- abk
-No match
- akb
-No match
- akk
-No match
-
-/^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 0: 12345678@a.b.c.d
- 123456789\@x.y.z
- 0: 123456789@x.y.z
- *** Failers
-No match
- 12345678\@x.y.uk
-No match
- 1234567\@a.b.c.d
-No match
-
-/(a)\1{8,}/
- aaaaaaaaa
- 0: aaaaaaaaa
- 1: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- *** Failers
-No match
- aaaaaaa
-No match
-
-/[^a]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
-
-/[^a]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/[^az]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
-
-/[^az]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
-
-/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
- 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
-
-/P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
-
-/(\.\d\d[1-9]?)\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- 1.235
- 0: .235
- 1: .23
-
-/(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 0: .23
- 1: .23
- 2:
- 1.875000282
- 0: .875
- 1: .875
- 2: 5
- *** Failers
-No match
- 1.235
-No match
-
-/a(?)b/
- ab
- 0: ab
-
-/\b(foo)\s+(\w+)/i
- Food is on the foo table
- 0: foo table
- 1: foo
- 2: table
-
-/foo(.*)bar/
- The food is under the bar in the barn.
- 0: food is under the bar in the bar
- 1: d is under the bar in the
-
-/foo(.*?)bar/
- The food is under the bar in the barn.
- 0: food is under the bar
- 1: d is under the
-
-/(.*)(\d*)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 53147
- 2:
-
-/(.*)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
-/(.*?)(\d*)/
- I have 2 numbers: 53147
- 0:
- 1:
- 2:
-
-/(.*?)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2
- 1: I have
- 2: 2
-
-/(.*)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
-/(.*?)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/(.*)\b(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/(.*\D)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
-
-/^\D*(?!123)/
- ABC123
- 0: AB
-
-/^(\D*)(?=\d)(?!123)/
- ABC445
- 0: ABC
- 1: ABC
- *** Failers
-No match
- ABC123
-No match
-
-/^[W-]46]/
- W46]789
- 0: W46]
- -46]789
- 0: -46]
- *** Failers
-No match
- Wall
-No match
- Zebra
-No match
- 42
-No match
- [abcd]
-No match
- ]abcd[
-No match
-
-/^[W-\]46]/
- W46]789
- 0: W
- Wall
- 0: W
- Zebra
- 0: Z
- Xylophone
- 0: X
- 42
- 0: 4
- [abcd]
- 0: [
- ]abcd[
- 0: ]
- \\backslash
- 0: \
- *** Failers
-No match
- -46]789
-No match
- well
-No match
-
-/\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
- 0: 01/01/2000
-
-/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/^(a){0,0}/
- bcd
- 0:
- abc
- 0:
- aab
- 0:
-
-/^(a){0,1}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
-
-/^(a){0,2}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
-
-/^(a){0,3}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
-
-/^(a){0,}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
-
-/^(a){1,1}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
-
-/^(a){1,2}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
-
-/^(a){1,3}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
-
-/^(a){1,}/
- bcd
-No match
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
-
-/.*\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.{0,}\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/m
- borfle\nbib.gif\nno
- 0: bib.gif
-
-/.*\.gif/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*\.gif/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
-/.*$/
- borfle\nbib.gif\nno
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
-/.*$/
- borfle\nbib.gif\nno\n
- 0: no
-
-/.*$/m
- borfle\nbib.gif\nno\n
- 0: borfle
-
-/.*$/s
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
-/.*$/ms
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
-/(.*X|^B)/
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/m
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
-
-/(.*X|^B)/s
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(.*X|^B)/ms
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
-
-/(?s)(.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/(?s:.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- *** Failers
-No match
- abcde\nBar
-No match
-
-/^.*B/
- **** Failers
-No match
- abc\nB
-No match
-
-/(?s)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?m)^.*B/
- abc\nB
- 0: B
-
-/(?ms)^.*B/
- abc\nB
- 0: abc\x0aB
-
-/(?ms)^B/
- abc\nB
- 0: B
-
-/(?s)B$/
- B\n
- 0: B
-
-/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
- 0: 123456654321
-
-/^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
- 0: 123456654321
-
-/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
- 0: 123456654321
-
-/^[abc]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^[a-c]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
-/^(a|b|c){12}/
- abcabcabcabc
- 0: abcabcabcabc
- 1: c
-
-/^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- 0: n
- *** Failers
-No match
- z
-No match
-
-/abcde{0,0}/
- abcd
- 0: abcd
- *** Failers
-No match
- abce
-No match
-
-/ab[cd]{0,0}e/
- abe
- 0: abe
- *** Failers
-No match
- abcde
-No match
-
-/ab(c){0,0}d/
- abd
- 0: abd
- *** Failers
-No match
- abcd
-No match
-
-/a(b*)/
- a
- 0: a
- 1:
- ab
- 0: ab
- 1: b
- abbbb
- 0: abbbb
- 1: bbbb
- *** Failers
- 0: a
- 1:
- bbbbb
-No match
-
-/ab\d{0}e/
- abe
- 0: abe
- *** Failers
-No match
- ab1e
-No match
-
-/"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- 0: "quick"
- 1: quick
- \"the \\\"quick\\\" brown fox\"
- 0: "the \"quick\" brown fox"
- 1: brown fox
-
-/.*?/g+
- abc
- 0:
- 0+ abc
- 0: a
- 0+ bc
- 0:
- 0+ bc
- 0: b
- 0+ c
- 0:
- 0+ c
- 0: c
- 0+
- 0:
- 0+
-
-/\b/g+
- abc
- 0:
- 0+ abc
- 0:
- 0+
-
-/\b/+g
- abc
- 0:
- 0+ abc
- 0:
- 0+
-
-//g
- abc
- 0:
- 0:
- 0:
- 0:
-
-/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 1: BGCOLOR='#DBE9E9'
- 2: align=left valign=top
- 3: 43.
- 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
- 5:
- 6:
- 7: <unset>
- 8: align=left valign=top
- 9: Lega lstaff.com
-10: align=left valign=top
-11: CA - Statewide
-
-/a[^a]b/
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/
- acb
- 0: acb
- *** Failers
-No match
- a\nb
-No match
-
-/a[^a]b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/a.b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
-/^(b+?|a){1,2}?c/
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- bbbac
- 0: bbbac
- 1: a
- bbbbac
- 0: bbbbac
- 1: a
- bbbbbac
- 0: bbbbbac
- 1: a
-
-/^(b+|a){1,2}?c/
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- bbbac
- 0: bbbac
- 1: a
- bbbbac
- 0: bbbbac
- 1: a
- bbbbbac
- 0: bbbbbac
- 1: a
-
-/(?!\A)x/m
- x\nb\n
-No match
- a\bx\n
- 0: x
-
-/\x0{ab}/
- \0{ab}
- 0: \x00{ab}
-
-/(A|B)*?CD/
- CD
- 0: CD
-
-/(A|B)*CD/
- CD
- 0: CD
-
-/(AB)*?\1/
- ABABAB
- 0: ABAB
- 1: AB
-
-/(AB)*\1/
- ABABAB
- 0: ABABAB
- 1: AB
-
-/ End of testinput1 /
-
diff --git a/srclib/pcre/testdata/testoutput2 b/srclib/pcre/testdata/testoutput2
deleted file mode 100644
index e8844d2aeb..0000000000
--- a/srclib/pcre/testdata/testoutput2
+++ /dev/null
@@ -1,2380 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/(a)b|/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
- abc
- 0: abc
- defabc
- 0: abc
- \Aabc
- 0: abc
- *** Failers
-No match
- \Adefabc
-No match
- ABC
-No match
-
-/^abc/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
- abc
- 0: abc
- \Aabc
- 0: abc
- *** Failers
-No match
- defabc
-No match
- \Adefabc
-No match
-
-/a+bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/a*bc/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/a{3}bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/(abc|a+z)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/^abc$/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
- abc
- 0: abc
- *** Failers
-No match
- def\nabc
-No match
-
-/ab\gdef/X
-Failed: unrecognized character follows \ at offset 3
-
-/(?X)ab\gdef/X
-Failed: unrecognized character follows \ at offset 7
-
-/x{5,4}/
-Failed: numbers out of order in {} quantifier at offset 5
-
-/z{65536}/
-Failed: number too big in {} quantifier at offset 7
-
-/[abcd/
-Failed: missing terminating ] for character class at offset 5
-
-/[\B]/
-Failed: invalid escape sequence in character class at offset 2
-
-/[z-a]/
-Failed: range out of order in character class at offset 3
-
-/^*/
-Failed: nothing to repeat at offset 1
-
-/(abc/
-Failed: missing ) at offset 4
-
-/(?# abc/
-Failed: missing ) after comment at offset 7
-
-/(?z)abc/
-Failed: unrecognized character after (? at offset 2
-
-/.*b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/.*?b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/cat|dog|elephant/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- this sentence eventually mentions a cat
- 0: cat
- this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: c d e
- this sentence eventually mentions a cat
- 0: cat
- this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/iS
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: C D E c d e
- this sentence eventually mentions a CAT cat
- 0: CAT
- this sentences rambles on and on for a while to elephant ElePhant
- 0: elephant
-
-/a|[bcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d
-
-/(a|[^\dZ])/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a
- \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19
- \x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / : ; < = >
- ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d
- e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83
- \x84 \x85 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92
- \x93 \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa0 \xa1
- \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0
- \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf
- \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce
- \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd
- \xde \xdf \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec
- \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb
- \xfc \xfd \xfe \xff
-
-/(a|b)*[\s]/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x09 \x0a \x0b \x0c \x0d \x20 a b
-
-/(ab\2)/
-Failed: back reference to non-existent subpattern at offset 6
-
-/{4,5}abc/
-Failed: nothing to repeat at offset 4
-
-/(a)(b)(c)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-Need char = 'c'
- abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
- \O0abcb
-Matched, but too many substrings
- \O3abcb
-Matched, but too many substrings
- 0: abcb
- \O6abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- \O9abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- 2: b
- \O12abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
-
-/(a)bc|(a)(b)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-No need char
- abc
- 0: abc
- 1: a
- \O0abc
-Matched, but too many substrings
- \O3abc
-Matched, but too many substrings
- 0: abc
- \O6abc
- 0: abc
- 1: a
- aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
- \O0aba
-Matched, but too many substrings
- \O3aba
-Matched, but too many substrings
- 0: aba
- \O6aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- \O9aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- 2: a
- \O12aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
-
-/abc$/E
-Capturing subpattern count = 0
-Options: dollar_endonly
-First char = 'a'
-Need char = 'c'
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- abc\ndef
-No match
-
-/(a)(b)(c)(d)(e)\6/
-Failed: back reference to non-existent subpattern at offset 17
-
-/the quick brown fox/
-Capturing subpattern count = 0
-No options
-First char = 't'
-Need char = 'x'
- the quick brown fox
- 0: the quick brown fox
- this is a line with the quick brown fox
- 0: the quick brown fox
-
-/the quick brown fox/A
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'x'
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match
- this is a line with the quick brown fox
-No match
-
-/ab(?z)cd/
-Failed: unrecognized character after (? at offset 4
-
-/^abc|def/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/
-Capturing subpattern count = 3
-No options
-First char at start or follows \n
-No need char
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 2: <unset>
- 3: def
-
-/abc/P
- abc
- 0: abc
- *** Failers
-No match: POSIX code 17: match failed
-
-/^abc|def/P
- abcdef
- 0: abc
- abcdef\B
- 0: def
-
-/.*((abc)$|(def))/P
- defabc
- 0: defabc
- 1: abc
- 2: abc
- \Zdefabc
- 0: def
- 1: def
- 3: def
-
-/the quick brown fox/P
- the quick brown fox
- 0: the quick brown fox
- *** Failers
-No match: POSIX code 17: match failed
- The Quick Brown Fox
-No match: POSIX code 17: match failed
-
-/the quick brown fox/Pi
- the quick brown fox
- 0: the quick brown fox
- The Quick Brown Fox
- 0: The Quick Brown Fox
-
-/abc.def/P
- *** Failers
-No match: POSIX code 17: match failed
- abc\ndef
-No match: POSIX code 17: match failed
-
-/abc$/P
- abc
- 0: abc
- abc\n
- 0: abc
-
-/(abc)\2/P
-Failed: POSIX code 15: bad back reference at offset 7
-
-/(abc\1)/P
- abc
-No match: POSIX code 17: match failed
-
-/)/
-Failed: unmatched parentheses at offset 0
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/[^aeiou ]{3,}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- co-processors, and for
- 0: -pr
-
-/<.*>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/<.*?>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*>(?U)/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*?>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
- abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/={3,}/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
- abc========def
- 0: ===
-
-/(?U)={3,}?/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
- abc========def
- 0: ========
-
-/(?<!bar|cattle)foo/
-Capturing subpattern count = 0
-No options
-First char = 'f'
-Need char = 'o'
- foo
- 0: foo
- catfoo
- 0: foo
- *** Failers
-No match
- the barfoo
-No match
- and cattlefoo
-No match
-
-/(?<=a+)b/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/(?<=aaa|b{0,3})b/
-Failed: lookbehind assertion is not fixed length at offset 14
-
-/(?<!(foo)a\1)bar/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?i)abc/
-Capturing subpattern count = 0
-Options: caseless
-First char = 'a'
-Need char = 'c'
-
-/(a|(?m)a)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(?i)^1234/
-Capturing subpattern count = 0
-Options: anchored caseless
-No first char
-Need char = '4'
-
-/(^b|(?i)^d)/
-Capturing subpattern count = 1
-Options: anchored
-Case state changes
-No first char
-No need char
-
-/(?s).*/
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-No need char
-
-/[abcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d
-
-/(?i)[abcd]/S
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: A B C D a b c d
-
-/(?m)[xy]|(b|c)/S
-Capturing subpattern count = 1
-Options: multiline
-No first char
-No need char
-Starting character set: b c x y
-
-/(^a|^b)/m
-Capturing subpattern count = 1
-Options: multiline
-First char at start or follows \n
-No need char
-
-/(?i)(^a|^b)/m
-Capturing subpattern count = 1
-Options: caseless multiline
-First char at start or follows \n
-No need char
-
-/(a)(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 13
-
-/(?(?=a)a|b|c)/
-Failed: conditional group contains more than two branches at offset 12
-
-/(?(1a)/
-Failed: malformed number after (?( at offset 4
-
-/(?(?i))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(abc))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(?<ab))/
-Failed: unrecognized character after (?< at offset 2
-
-/((?s)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-First char = 'b'
-Need char = 'h'
-
-/((?i)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-Case state changes
-No first char
-Need char = 'h'
-
-/((?i)b)/DS
-------------------------------------------------------------------
- 0 16 Bra 0
- 3 8 Bra 1
- 6 01 Opt
- 8 1 b
- 11 8 Ket
- 14 00 Opt
- 16 16 Ket
- 19 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-Need char = 'b'
-Starting character set: B b
-
-/(a*b|(?i:c*(?-i)d))/S
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-No need char
-Starting character set: C a b c d
-
-/a$/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
- a
- 0: a
- a\n
- 0: a
- *** Failers
-No match
- \Za
-No match
- \Za\n
-No match
-
-/a$/m
-Capturing subpattern count = 0
-Options: multiline
-First char = 'a'
-No need char
- a
- 0: a
- a\n
- 0: a
- \Za\n
- 0: a
- *** Failers
-No match
- \Za
-No match
-
-/\Aabc/m
-Capturing subpattern count = 0
-Options: anchored multiline
-No first char
-Need char = 'c'
-
-/^abc/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
-Capturing subpattern count = 5
-Options: anchored
-No first char
-Need char = 'a'
- aaaaabbbbbcccccdef
- 0: aaaaabbbbbcccccdef
- 1: aaaaabbbbbcccccdef
- 2: aaaaa
- 3: b
- 4: bbbbccccc
- 5: def
-
-/(?<=foo)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?<!foo)(alpha|omega)/S
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-Starting character set: a o
-
-/(?!alphabet)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b
-
-/(?<=foo\n)^bar/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'r'
-
-/(?>^abc)/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
- abc
- 0: abc
- def\nabc
- 0: abc
- *** Failers
-No match
- defabc
-No match
-
-/(?<=ab(c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 11
-
-/(?<=ab(?<=c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?<=ab(c|de)f)g/
-Failed: lookbehind assertion is not fixed length at offset 13
-
-/The next three are in testinput2 because they have variable length branches/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 's'
-
-/(?<=bullock|donkey)-cart/
-Capturing subpattern count = 0
-No options
-First char = '-'
-Need char = 't'
- the bullock-cart
- 0: -cart
- a donkey-cart race
- 0: -cart
- *** Failers
-No match
- cart
-No match
- horse-and-cart
-No match
-
-/(?<=ab(?i)x|y|z)/
-Capturing subpattern count = 0
-No options
-Case state changes
-No first char
-No need char
-
-/(?>.*)(?<=(abcd)|(xyz))/
-Capturing subpattern count = 2
-No options
-First char at start or follows \n
-No need char
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingxyz
- 0: endingxyz
- 1: <unset>
- 2: xyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
-Capturing subpattern count = 0
-No options
-Case state changes
-First char = 'Z'
-Need char = 'Z'
- abxyZZ
- 0: ZZ
- abXyZZ
- 0: ZZ
- ZZZ
- 0: ZZ
- zZZ
- 0: ZZ
- bZZ
- 0: ZZ
- BZZ
- 0: ZZ
- *** Failers
-No match
- ZZ
-No match
- abXYZZ
-No match
- zzz
-No match
- bzz
-No match
-
-/(?<!(foo)a)bar/
-Capturing subpattern count = 1
-No options
-First char = 'b'
-Need char = 'r'
- bar
- 0: bar
- foobbar
- 0: bar
- *** Failers
-No match
- fooabar
-No match
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/^(a)?(?(1)a|b)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
- *** Failers
-No match
- a
-No match
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 'g'
-
-/^(a\1?){4}$/
-Capturing subpattern count = 1
-Max back reference = 1
-Options: anchored
-No first char
-Need char = 'a'
- aaaaaa
- 0: aaaaaa
- 1: aa
-
-/These are syntax tests from Perl 5.005/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = '5'
-
-/a[b-a]/
-Failed: range out of order in character class at offset 4
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/a[/
-Failed: missing terminating ] for character class at offset 2
-
-/*a/
-Failed: nothing to repeat at offset 0
-
-/(*)b/
-Failed: nothing to repeat at offset 1
-
-/abc)/
-Failed: unmatched parentheses at offset 3
-
-/(abc/
-Failed: missing ) at offset 4
-
-/a**/
-Failed: nothing to repeat at offset 2
-
-/)(/
-Failed: unmatched parentheses at offset 0
-
-/\1/
-Failed: back reference to non-existent subpattern at offset 2
-
-/\2/
-Failed: back reference to non-existent subpattern at offset 2
-
-/(a)|\2/
-Failed: back reference to non-existent subpattern at offset 6
-
-/a[b-a]/i
-Failed: range out of order in character class at offset 4
-
-/a[]b/i
-Failed: missing terminating ] for character class at offset 4
-
-/a[/i
-Failed: missing terminating ] for character class at offset 2
-
-/*a/i
-Failed: nothing to repeat at offset 0
-
-/(*)b/i
-Failed: nothing to repeat at offset 1
-
-/abc)/i
-Failed: unmatched parentheses at offset 3
-
-/(abc/i
-Failed: missing ) at offset 4
-
-/a**/i
-Failed: nothing to repeat at offset 2
-
-/)(/i
-Failed: unmatched parentheses at offset 0
-
-/:(?:/
-Failed: missing ) at offset 4
-
-/(?<%)b/
-Failed: unrecognized character after (?< at offset 0
-
-/a(?{)b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{{})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{}})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"}})b/
-Failed: unrecognized character after (? at offset 3
-
-/(?(1?)a|b)/
-Failed: malformed number after (?( at offset 4
-
-/(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 10
-
-/[a[:xyz:/
-Failed: missing terminating ] for character class at offset 8
-
-/(?<=x+)y/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/a{37,17}/
-Failed: numbers out of order in {} quantifier at offset 7
-
-/abc/\
-Failed: \ at end of pattern at offset 4
-
-/abc/\P
-Failed: POSIX code 9: bad escape sequence at offset 4
-
-/abc/\i
-Failed: \ at end of pattern at offset 4
-
-/(a)bc(d)/
-Capturing subpattern count = 2
-No options
-First char = 'a'
-Need char = 'd'
- abcd
- 0: abcd
- 1: a
- 2: d
- abcd\C2
- 0: abcd
- 1: a
- 2: d
- 2C d (1)
- abcd\C5
- 0: abcd
- 1: a
- 2: d
-copy substring 5 failed -7
-
-/(.{20})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- abcdefghijklmnopqrstuvwxyz\C1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
-copy substring 1 failed -6
- abcdefghijklmnopqrstuvwxyz\G1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- 1G abcdefghijklmnopqrst (20)
-
-/(.{15})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- abcdefghijklmnopqrstuvwxyz\C1\G1
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- 1C abcdefghijklmno (15)
- 1G abcdefghijklmno (15)
-
-/(.{16})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
- abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
- abcdefghijklmnopqrstuvwxyz\C1\G1\L
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
-copy substring 1 failed -6
- 1G abcdefghijklmnop (16)
- 0L abcdefghijklmnop
- 1L abcdefghijklmnop
-
-/^(a|(bc))de(f)/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'f'
- adef\G1\G2\G3\G4\L
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 1G a (1)
- 2G (0)
- 3G f (1)
-get substring 4 failed -7
- 0L adef
- 1L a
- 2L
- 3L f
- bcdef\G1\G2\G3\G4\L
- 0: bcdef
- 1: bc
- 2: bc
- 3: f
- 1G bc (2)
- 2G bc (2)
- 3G f (1)
-get substring 4 failed -7
- 0L bcdef
- 1L bc
- 2L bc
- 3L f
- adefghijk\C0
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 0C adef (4)
-
-/^abc\00def/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'f'
- abc\00def\L\C0
- 0: abc\x00def
- 0C abc (7)
- 0L abc
-
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
-)?)?)?)?)?)?)?)?)?otherword/M
-Memory allocation (code space): 428
-Capturing subpattern count = 8
-No options
-First char = 'w'
-Need char = 'd'
-
-/.*X/D
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 Any*
- 5 1 X
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'X'
-
-/.*X/Ds
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 Any*
- 5 1 X
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-Need char = 'X'
-
-/(.*X|^B)/D
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char at start or follows \n
-No need char
-
-/(.*X|^B)/Ds
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s)(.*X|^B)/D
-------------------------------------------------------------------
- 0 21 Bra 0
- 3 8 Bra 1
- 6 Any*
- 8 1 X
- 11 7 Alt
- 14 ^
- 15 1 B
- 18 15 Ket
- 21 21 Ket
- 24 End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s:.*X|^B)/D
-------------------------------------------------------------------
- 0 27 Bra 0
- 3 10 Bra 0
- 6 04 Opt
- 8 Any*
- 10 1 X
- 13 9 Alt
- 16 04 Opt
- 18 ^
- 19 1 B
- 22 19 Ket
- 25 00 Opt
- 27 27 Ket
- 30 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-No need char
-
-/\Biss\B/+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/+P
- Mississippi
- 0: iss
- 0+ issippi
-
-/iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/\Biss\B/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
- *** Failers
-No match
- Mississippi\A
-No match
-
-/(?<=[Ms])iss/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/(?<=[Ms])iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
- Mississippi
- 0: iss
- 0+ issippi
-
-/^iss/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
- ississippi
- 0: iss
- 0+ issippi
-
-/.*iss/g+
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 's'
- abciss\nxyzisspqr
- 0: abciss
- 0+ \x0axyzisspqr
- 0: xyziss
- 0+ pqr
-
-/.i./+g
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'i'
- Mississippi
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
- Mississippi\A
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
- Missouri river
- 0: Mis
- 0+ souri river
- 0: ri
- 0+ river
- 0: riv
- 0+ er
- Missouri river\A
- 0: Mis
- 0+ souri river
-
-/^.is/+g
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
- Mississippi
- 0: Mis
- 0+ sissippi
-
-/^ab\n/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 10
- ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
-
-/^ab\n/mg+
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 10
- ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
- 0: ab\x0a
- 0+ cd
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/abc|bac/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/(abc|bac)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'c'
-
-/(abc|(c|dc))/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/(abc|(d|de)c)/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/a*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/a+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(baa|a+)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-
-/a{0,3}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/baa{3,}/
-Capturing subpattern count = 0
-No options
-First char = 'b'
-Need char = 'a'
-
-/"([^\\"]+|\\.)*"/
-Capturing subpattern count = 1
-No options
-First char = '"'
-Need char = '"'
-
-/(abc|ab[cd])/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(a|.)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a|ba|\w/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?=pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'r'
-
-/...(?<=abc)/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?!pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/ab./
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab[xyz]/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/abc*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.c*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/ac*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(a.c*|b.c*)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a.c*|aba/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.+a/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'a'
-
-/(?=abcda)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(?=a)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(b)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/a\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/ab\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(\d)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/abcde{0,0}/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'd'
-
-/ab\d+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(?(1)b)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)bag|big)*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)b..|b..)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab\d{0}e/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'e'
-
-/a?b?/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- a
- 0: a
- b
- 0: b
- ab
- 0: ab
- \
- 0:
- *** Failers
- 0:
- \N
-No match
-
-/|-/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
- abcd
- 0:
- -abc
- 0:
- \Nab-c
- 0: -
- *** Failers
- 0:
- \Nabc
-No match
-
-/a*(b+)(z)(z)/P
- aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O0
- aaaabbbbzzzz\O1
- 0: aaaabbbbzz
- aaaabbbbzzzz\O2
- 0: aaaabbbbzz
- 1: bbbb
- aaaabbbbzzzz\O3
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- aaaabbbbzzzz\O4
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\O5
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-
-/^.?abcd/S
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'd'
-Study returned NULL
-
-/\( # ( at start
- (?: # Non-capturing bracket
- (?>[^()]+) # Either a sequence of non-brackets (no backtracking)
- | # Or
- (?R) # Recurse - i.e. nested bracketed string
- )* # Zero or more contents
- \) # Closing )
- /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- (abcd)
- 0: (abcd)
- (abcd)xyz
- 0: (abcd)
- xyz(abcd)
- 0: (abcd)
- (ab(xy)cd)pqr
- 0: (ab(xy)cd)
- (ab(xycd)pqr
- 0: (xycd)
- () abc ()
- 0: ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (abcde(fsh)xyz(foo(bar))lmno)
- *** Failers
-No match
- abcd
-No match
- abcd)
-No match
- (abcd
-No match
-
-/\( ( (?>[^()]+) | (?R) )* \) /xg
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)pqr
- 0: (ab(xy)cd)
- 1: cd
- 1(abcd)(x(y)z)pqr
- 0: (abcd)
- 1: abcd
- 0: (x(y)z)
- 1: z
-
-/\( (?: (?>[^()]+) | (?R) ) \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- (abcd)
- 0: (abcd)
- (ab(xy)cd)
- 0: (xy)
- (a(b(c)d)e)
- 0: (c)
- ((ab))
- 0: ((ab))
- *** Failers
-No match
- ()
-No match
-
-/\( (?: (?>[^()]+) | (?R) )? \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
- ()
- 0: ()
- 12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (fsh)
-
-/\( ( (?>[^()]+) | (?R) )* \) /x
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: cd
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 2
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: cd
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: <unset>
- 2: ab(xy)cd
- 3: cd
- (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123
- 2: ab(xy)cd
- 3: cd
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: <unset>
- 3: cd
- (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123ab(xy)cd
- 2: 123
- 3: cd
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
-Capturing subpattern count = 11
-Options: extended
-First char = '('
-Need char = ')'
- (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: ab(xy)cd
- 3: ab(xy)cd
- 4: ab(xy)cd
- 5: ab(xy)cd
- 6: ab(xy)cd
- 7: ab(xy)cd
- 8: ab(xy)cd
- 9: ab(xy)cd
-10: ab(xy)cd
-11: cd
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (abcd(xyz<p>qrs)123)
- 0: (abcd(xyz<p>qrs)123)
- 1: abcd(xyz<p>qrs)123
- 2: 123
- 3: <p>qrs
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
- (ab(cd)ef)
- 0: (ab(cd)ef)
- 1: ab(cd)ef
- 2: ef
- 3: (cd)
- (ab(cd(ef)gh)ij)
- 0: (ab(cd(ef)gh)ij)
- 1: ab(cd(ef)gh)ij
- 2: ij
- 3: (cd(ef)gh)
-
-/^[[:alnum:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Za-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:alpha:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [A-Za-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:ascii:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x7f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:cntrl:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-\x1f\x7f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:digit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:graph:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [!-~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:lower:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [a-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:print:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [ -~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:punct:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [!-/:-@[-`{-~]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:space:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x09-\x0d ]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:upper:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [A-Z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:xdigit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Fa-f]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:word:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [0-9A-Z_a-z]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:^cntrl:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [ -~\x80-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[12[:^digit:]]/D
-------------------------------------------------------------------
- 0 37 Bra 0
- 3 ^
- 4 [\x00-/1-2:-\xff]
- 37 37 Ket
- 40 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/[01[:alpha:]%]/D
-------------------------------------------------------------------
- 0 36 Bra 0
- 3 [%0-1A-Za-z]
- 36 36 Ket
- 39 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[[.ch.]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[=ch=]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[:rhubarb:]]/
-Failed: unknown POSIX class name at offset 3
-
-/[[:upper:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
- A
- 0: A
- a
- 0: a
-
-/[[:lower:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
- A
- 0: A
- a
- 0: a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
-Capturing subpattern count = 1
-Options: caseless
-Case state changes
-No first char
-No need char
- ab
- 0: ab
- 1: a
- aB
- 0: aB
- 1: a
- *** Failers
- 0: ai
- 1: a
- Ab
-No match
- AB
-No match
-
-/[\200-\410]/
-Failed: range out of order in character class at offset 9
-
-/^(?(0)f|b)oo/
-Failed: invalid condition (?(0) at offset 5
-
-/This one's here because of the large output vector needed/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 'd'
-
-/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/
-Capturing subpattern count = 271
-Max back reference = 270
-No options
-No first char
-No need char
- \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
- 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
- 1: 1
- 2: 2
- 3: 3
- 4: 4
- 5: 5
- 6: 6
- 7: 7
- 8: 8
- 9: 9
-10: 10
-11: 11
-12: 12
-13: 13
-14: 14
-15: 15
-16: 16
-17: 17
-18: 18
-19: 19
-20: 20
-21: 21
-22: 22
-23: 23
-24: 24
-25: 25
-26: 26
-27: 27
-28: 28
-29: 29
-30: 30
-31: 31
-32: 32
-33: 33
-34: 34
-35: 35
-36: 36
-37: 37
-38: 38
-39: 39
-40: 40
-41: 41
-42: 42
-43: 43
-44: 44
-45: 45
-46: 46
-47: 47
-48: 48
-49: 49
-50: 50
-51: 51
-52: 52
-53: 53
-54: 54
-55: 55
-56: 56
-57: 57
-58: 58
-59: 59
-60: 60
-61: 61
-62: 62
-63: 63
-64: 64
-65: 65
-66: 66
-67: 67
-68: 68
-69: 69
-70: 70
-71: 71
-72: 72
-73: 73
-74: 74
-75: 75
-76: 76
-77: 77
-78: 78
-79: 79
-80: 80
-81: 81
-82: 82
-83: 83
-84: 84
-85: 85
-86: 86
-87: 87
-88: 88
-89: 89
-90: 90
-91: 91
-92: 92
-93: 93
-94: 94
-95: 95
-96: 96
-97: 97
-98: 98
-99: 99
-100: 100
-101: 101
-102: 102
-103: 103
-104: 104
-105: 105
-106: 106
-107: 107
-108: 108
-109: 109
-110: 110
-111: 111
-112: 112
-113: 113
-114: 114
-115: 115
-116: 116
-117: 117
-118: 118
-119: 119
-120: 120
-121: 121
-122: 122
-123: 123
-124: 124
-125: 125
-126: 126
-127: 127
-128: 128
-129: 129
-130: 130
-131: 131
-132: 132
-133: 133
-134: 134
-135: 135
-136: 136
-137: 137
-138: 138
-139: 139
-140: 140
-141: 141
-142: 142
-143: 143
-144: 144
-145: 145
-146: 146
-147: 147
-148: 148
-149: 149
-150: 150
-151: 151
-152: 152
-153: 153
-154: 154
-155: 155
-156: 156
-157: 157
-158: 158
-159: 159
-160: 160
-161: 161
-162: 162
-163: 163
-164: 164
-165: 165
-166: 166
-167: 167
-168: 168
-169: 169
-170: 170
-171: 171
-172: 172
-173: 173
-174: 174
-175: 175
-176: 176
-177: 177
-178: 178
-179: 179
-180: 180
-181: 181
-182: 182
-183: 183
-184: 184
-185: 185
-186: 186
-187: 187
-188: 188
-189: 189
-190: 190
-191: 191
-192: 192
-193: 193
-194: 194
-195: 195
-196: 196
-197: 197
-198: 198
-199: 199
-200: 200
-201: 201
-202: 202
-203: 203
-204: 204
-205: 205
-206: 206
-207: 207
-208: 208
-209: 209
-210: 210
-211: 211
-212: 212
-213: 213
-214: 214
-215: 215
-216: 216
-217: 217
-218: 218
-219: 219
-220: 220
-221: 221
-222: 222
-223: 223
-224: 224
-225: 225
-226: 226
-227: 227
-228: 228
-229: 229
-230: 230
-231: 231
-232: 232
-233: 233
-234: 234
-235: 235
-236: 236
-237: 237
-238: 238
-239: 239
-240: 240
-241: 241
-242: 242
-243: 243
-244: 244
-245: 245
-246: 246
-247: 247
-248: 248
-249: 249
-250: 250
-251: 251
-252: 252
-253: 253
-254: 254
-255: 255
-256: 256
-257: 257
-258: 258
-259: 259
-260: 260
-261: 261
-262: 262
-263: 263
-264: 264
-265: 265
-266: 266
-267: 267
-268: 268
-269: 269
-270: ABC
-271: ABC
-
-/This one's here because Perl does this differently and PCRE can't at present/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/(main(O)?)+/
-Capturing subpattern count = 2
-No options
-First char = 'm'
-Need char = 'n'
- mainmain
- 0: mainmain
- 1: main
- mainOmain
- 0: mainOmain
- 1: main
- 2: O
-
-/ End of testinput2 /
-Capturing subpattern count = 0
-No options
-First char = ' '
-Need char = ' '
-
diff --git a/srclib/pcre/testdata/testoutput3 b/srclib/pcre/testdata/testoutput3
deleted file mode 100644
index cbe9aaa755..0000000000
--- a/srclib/pcre/testdata/testoutput3
+++ /dev/null
@@ -1,2991 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/(?<!bar)foo/
- foo
- 0: foo
- catfood
- 0: foo
- arfootle
- 0: foo
- rfoosh
- 0: foo
- *** Failers
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/\w{3}(?<!bar)foo/
- catfood
- 0: catfoo
- *** Failers
-No match
- foo
-No match
- barfoo
-No match
- towbarfoo
-No match
-
-/(?<=(foo)a)bar/
- fooabar
- 0: bar
- 1: foo
- *** Failers
-No match
- bar
-No match
- foobbar
-No match
-
-/\Aabc\z/m
- abc
- 0: abc
- *** Failers
-No match
- abc\n
-No match
- qqq\nabc
-No match
- abc\nzzz
-No match
- qqq\nabc\nzzz
-No match
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-No match
-
-"(?>.*/)foo"
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- *** Failers
-No match
- 1.235
-No match
-
-/^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
- *** Failers
-No match
- this is not a line with only words and spaces!
-No match
-
-/(\d+)(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- 12345+
- 0: 12345
- 1: 1234
- 2: 5
-
-/((?>\d+))(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- *** Failers
-No match
- 12345+
-No match
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
-/(?>b)+/
- aaabbbccc
- 0: bbb
-
-/(?>a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbc
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- *** Failers
-No match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
-
-/a(?-i)b/i
- ab
- 0: ab
- *** Failers
-No match
- Ab
-No match
- aB
-No match
- AB
-No match
-
-/(a (?x)b c)d e/
- a bcd e
- 0: a bcd e
- 1: a bc
- *** Failers
-No match
- a b cd e
-No match
- abcd e
-No match
- a bcde
-No match
-
-/(a b(?x)c d (?-x)e f)/
- a bcde f
- 0: a bcde f
- 1: a bcde f
- *** Failers
-No match
- abcdef
-No match
-
-/(a(?i)b)c/
- abc
- 0: abc
- 1: ab
- aBc
- 0: aBc
- 1: aB
- *** Failers
-No match
- abC
-No match
- aBC
-No match
- Abc
-No match
- ABc
-No match
- ABC
-No match
- AbC
-No match
-
-/a(?i:b)c/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- ABC
-No match
- abC
-No match
- aBC
-No match
-
-/a(?i:b)*c/
- aBc
- 0: aBc
- aBBc
- 0: aBBc
- *** Failers
-No match
- aBC
-No match
- aBBC
-No match
-
-/a(?=b(?i)c)\w\wd/
- abcd
- 0: abcd
- abCd
- 0: abCd
- *** Failers
-No match
- aBCd
-No match
- abcD
-No match
-
-/(?s-i:more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?:(?s-i)more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- *** Failers
-No match
- MORE THAN MILLION
-No match
- more \n than \n million
-No match
-
-/(?>a(?i)b+)+c/
- abc
- 0: abc
- aBbc
- 0: aBbc
- aBBc
- 0: aBBc
- *** Failers
-No match
- Abc
-No match
- abAb
-No match
- abbC
-No match
-
-/(?=a(?i)b)\w\wc/
- abc
- 0: abc
- aBc
- 0: aBc
- *** Failers
-No match
- Ab
-No match
- abC
-No match
- aBC
-No match
-
-/(?<=a(?i)b)(\w\w)c/
- abxxc
- 0: xxc
- 1: xx
- aBxxc
- 0: xxc
- 1: xx
- *** Failers
-No match
- Abxxc
-No match
- ABxxc
-No match
- abxxC
-No match
-
-/(?:(a)|b)(?(1)A|B)/
- aA
- 0: aA
- 1: a
- bB
- 0: bB
- *** Failers
-No match
- aB
-No match
- bA
-No match
-
-/^(a)?(?(1)a|b)+$/
- aa
- 0: aa
- 1: a
- b
- 0: b
- bb
- 0: bb
- *** Failers
-No match
- ab
-No match
-
-/^(?(?=abc)\w{3}:|\d\d)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- *** Failers
-No match
- 123
-No match
- xyz
-No match
-
-/(?(?<=foo)bar|cat)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/(?(?<!foo)cat|bar)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- *** Failers
-No match
- foocat
-No match
-
-/( \( )? [^()]+ (?(1) \) |) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
-
-/^(?(2)a|(1)(2))+$/
- 12
- 0: 12
- 1: 1
- 2: 2
- 12a
- 0: 12a
- 1: 1
- 2: 2
- 12aa
- 0: 12aa
- 1: 1
- 2: 2
- *** Failers
-No match
- 1234
-No match
-
-/((?i)blah)\s+\1/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- *** Failers
-No match
- blah BLAH
-No match
- Blah blah
-No match
- blaH blah
-No match
-
-/((?i)blah)\s+(?i:\1)/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- blah BLAH
- 0: blah BLAH
- 1: blah
- Blah blah
- 0: Blah blah
- 1: Blah
- blaH blah
- 0: blaH blah
- 1: blaH
-
-/(?>a*)*/
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
-
-/(abc|)+/
- abc
- 0: abc
- 1:
- abcabc
- 0: abcabc
- 1:
- abcabcabc
- 0: abcabcabc
- 1:
- xyz
- 0:
- 1:
-
-/([a]*)*/
- a
- 0: a
- 1:
- aaaaa
- 0: aaaaa
- 1:
-
-/([ab]*)*/
- a
- 0: a
- 1:
- b
- 0: b
- 1:
- ababab
- 0: ababab
- 1:
- aaaabcde
- 0: aaaab
- 1:
- bbbb
- 0: bbbb
- 1:
-
-/([^a]*)*/
- b
- 0: b
- 1:
- bbbb
- 0: bbbb
- 1:
- aaa
- 0:
- 1:
-
-/([^ab]*)*/
- cccc
- 0: cccc
- 1:
- abab
- 0:
- 1:
-
-/([a]*?)*/
- a
- 0:
- 1:
- aaaa
- 0:
- 1:
-
-/([ab]*?)*/
- a
- 0:
- 1:
- b
- 0:
- 1:
- abab
- 0:
- 1:
- baba
- 0:
- 1:
-
-/([^a]*?)*/
- b
- 0:
- 1:
- bbbb
- 0:
- 1:
- aaa
- 0:
- 1:
-
-/([^ab]*?)*/
- c
- 0:
- 1:
- cccc
- 0:
- 1:
- baba
- 0:
- 1:
-
-/(?>a*)*/
- a
- 0: a
- aaabcde
- 0: aaa
-
-/((?>a*))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
-/((?>a*?))*/
- aaaaa
- 0:
- 1:
- aabbaa
- 0:
- 1:
-
-/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 0: 12-sep-98
- 12-09-98
- 0: 12-09-98
- *** Failers
-No match
- sep-12-98
-No match
-
-/(?<=(foo))bar\1/
- foobarfoo
- 0: barfoo
- 1: foo
- foobarfootling
- 0: barfoo
- 1: foo
- *** Failers
-No match
- foobar
-No match
- barfoo
-No match
-
-/(?i:saturday|sunday)/
- saturday
- 0: saturday
- sunday
- 0: sunday
- Saturday
- 0: Saturday
- Sunday
- 0: Sunday
- SATURDAY
- 0: SATURDAY
- SUNDAY
- 0: SUNDAY
- SunDay
- 0: SunDay
-
-/(a(?i)bc|BB)x/
- abcx
- 0: abcx
- 1: abc
- aBCx
- 0: aBCx
- 1: aBC
- bbx
- 0: bbx
- 1: bb
- BBx
- 0: BBx
- 1: BB
- *** Failers
-No match
- abcX
-No match
- aBCX
-No match
- bbX
-No match
- BBX
-No match
-
-/^([ab](?i)[cd]|[ef])/
- ac
- 0: ac
- 1: ac
- aC
- 0: aC
- 1: aC
- bD
- 0: bD
- 1: bD
- elephant
- 0: e
- 1: e
- Europe
- 0: E
- 1: E
- frog
- 0: f
- 1: f
- France
- 0: F
- 1: F
- *** Failers
-No match
- Africa
-No match
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- 0: ab
- 1: ab
- aBd
- 0: aBd
- 1: aBd
- xy
- 0: xy
- 1: xy
- xY
- 0: xY
- 1: xY
- zebra
- 0: z
- 1: z
- Zambesi
- 0: Z
- 1: Z
- *** Failers
-No match
- aCD
-No match
- XY
-No match
-
-/(?<=foo\n)^bar/m
- foo\nbar
- 0: bar
- *** Failers
-No match
- bar
-No match
- baz\nbar
-No match
-
-/(?<=(?<!foo)bar)baz/
- barbaz
- 0: baz
- barbarbaz
- 0: baz
- koobarbaz
- 0: baz
- *** Failers
-No match
- baz
-No match
- foobarbaz
-No match
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-No match
-/where it does set $1 to aa when matching aaaaaa./
-No match
-
-/^(a\1?){4}$/
- a
-No match
- aa
-No match
- aaa
-No match
- aaaa
- 0: aaaa
- 1: a
- aaaaa
- 0: aaaaa
- 1: a
- aaaaaaa
- 0: aaaaaaa
- 1: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- aaaaaaaaaaa
-No match
- aaaaaaaaaaaa
-No match
- aaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaa
-No match
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
-No match
- aa
-No match
- aaa
-No match
- aaaa
- 0: aaaa
- 1: a
- 2: a
- 3: a
- 4: a
- aaaaa
- 0: aaaaa
- 1: a
- 2: aa
- 3: a
- 4: a
- aaaaaa
- 0: aaaaaa
- 1: a
- 2: aa
- 3: a
- 4: aa
- aaaaaaa
- 0: aaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: aaaa
- aaaaaaaaaaa
-No match
- aaaaaaaaaaaa
-No match
- aaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaa
-No match
- aaaaaaaaaaaaaaaa
-No match
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-No match
-
-/abc/
- abc
- 0: abc
- xabcy
- 0: abc
- ababc
- 0: abc
- *** Failers
-No match
- xbc
-No match
- axc
-No match
- abx
-No match
-
-/ab*c/
- abc
- 0: abc
-
-/ab*bc/
- abc
- 0: abc
- abbc
- 0: abbc
- abbbbc
- 0: abbbbc
-
-/.{1}/
- abbbbc
- 0: a
-
-/.{3,4}/
- abbbbc
- 0: abbb
-
-/ab{0,}bc/
- abbbbc
- 0: abbbbc
-
-/ab+bc/
- abbc
- 0: abbc
- *** Failers
-No match
- abc
-No match
- abq
-No match
-
-/ab{1,}bc/
-
-/ab+bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,}bc/
- abbbbc
- 0: abbbbc
-
-/ab{1,3}bc/
- abbbbc
- 0: abbbbc
-
-/ab{3,4}bc/
- abbbbc
- 0: abbbbc
-
-/ab{4,5}bc/
- *** Failers
-No match
- abq
-No match
- abbbbc
-No match
-
-/ab?bc/
- abbc
- 0: abbc
- abc
- 0: abc
-
-/ab{0,1}bc/
- abc
- 0: abc
-
-/ab?bc/
-
-/ab?c/
- abc
- 0: abc
-
-/ab{0,1}c/
- abc
- 0: abc
-
-/^abc$/
- abc
- 0: abc
- *** Failers
-No match
- abbbbc
-No match
- abcc
-No match
-
-/^abc/
- abcc
- 0: abc
-
-/^abc$/
-
-/abc$/
- aabc
- 0: abc
- *** Failers
-No match
- aabc
- 0: abc
- aabcd
-No match
-
-/^/
- abc
- 0:
-
-/$/
- abc
- 0:
-
-/a.c/
- abc
- 0: abc
- axc
- 0: axc
-
-/a.*c/
- axyzc
- 0: axyzc
-
-/a[bc]d/
- abd
- 0: abd
- *** Failers
-No match
- axyzd
-No match
- abc
-No match
-
-/a[b-d]e/
- ace
- 0: ace
-
-/a[b-d]/
- aac
- 0: ac
-
-/a[-b]/
- a-
- 0: a-
-
-/a[b-]/
- a-
- 0: a-
-
-/a]/
- a]
- 0: a]
-
-/a[]]b/
- a]b
- 0: a]b
-
-/a[^bc]d/
- aed
- 0: aed
- *** Failers
-No match
- abd
-No match
- abd
-No match
-
-/a[^-b]c/
- adc
- 0: adc
-
-/a[^]b]c/
- adc
- 0: adc
- *** Failers
-No match
- a-c
- 0: a-c
- a]c
-No match
-
-/\ba\b/
- a-
- 0: a
- -a
- 0: a
- -a-
- 0: a
-
-/\by\b/
- *** Failers
-No match
- xy
-No match
- yz
-No match
- xyz
-No match
-
-/\Ba\B/
- *** Failers
- 0: a
- a-
-No match
- -a
-No match
- -a-
-No match
-
-/\By\b/
- xy
- 0: y
-
-/\by\B/
- yz
- 0: y
-
-/\By\B/
- xyz
- 0: y
-
-/\w/
- a
- 0: a
-
-/\W/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a\sb/
- a b
- 0: a b
-
-/a\Sb/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/\d/
- 1
- 0: 1
-
-/\D/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/[\w]/
- a
- 0: a
-
-/[\W]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- a
-No match
-
-/a[\s]b/
- a b
- 0: a b
-
-/a[\S]b/
- a-b
- 0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
- a b
-No match
-
-/[\d]/
- 1
- 0: 1
-
-/[\D]/
- -
- 0: -
- *** Failers
- 0: *
- -
- 0: -
- 1
-No match
-
-/ab|cd/
- abc
- 0: ab
- abcd
- 0: ab
-
-/()ef/
- def
- 0: ef
- 1:
-
-/$b/
-
-/a\(b/
- a(b
- 0: a(b
-
-/a\(*b/
- ab
- 0: ab
- a((b
- 0: a((b
-
-/a\\b/
- a\b
-No match
-
-/((a))/
- abc
- 0: a
- 1: a
- 2: a
-
-/(a)b(c)/
- abc
- 0: abc
- 1: a
- 2: c
-
-/a+b+c/
- aabbabc
- 0: abc
-
-/a{1,}b{1,}c/
- aabbabc
- 0: abc
-
-/a.+?c/
- abcabc
- 0: abc
-
-/(a+|b)*/
- ab
- 0: ab
- 1: b
-
-/(a+|b){0,}/
- ab
- 0: ab
- 1: b
-
-/(a+|b)+/
- ab
- 0: ab
- 1: b
-
-/(a+|b){1,}/
- ab
- 0: ab
- 1: b
-
-/(a+|b)?/
- ab
- 0: a
- 1: a
-
-/(a+|b){0,1}/
- ab
- 0: a
- 1: a
-
-/[^ab]*/
- cde
- 0: cde
-
-/abc/
- *** Failers
-No match
- b
-No match
-
-
-/a*/
-
-
-/([abc])*d/
- abbbcd
- 0: abbbcd
- 1: c
-
-/([abc])*bcd/
- abcd
- 0: abcd
- 1: a
-
-/a|b|c|d|e/
- e
- 0: e
-
-/(a|b|c|d|e)f/
- ef
- 0: ef
- 1: e
-
-/abcd*efg/
- abcdefg
- 0: abcdefg
-
-/ab*/
- xabyabbbz
- 0: ab
- xayabbbz
- 0: a
-
-/(ab|cd)e/
- abcde
- 0: cde
- 1: cd
-
-/[abhgefdc]ij/
- hij
- 0: hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
- abcdef
- 0: ef
- 1:
-
-/(a|b)c*d/
- abcd
- 0: bcd
- 1: b
-
-/(ab|ab*)bc/
- abc
- 0: abc
- 1: a
-
-/a([bc]*)c*/
- abc
- 0: abc
- 1: bc
-
-/a([bc]*)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]+)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]*)(c+d)/
- abcd
- 0: abcd
- 1: b
- 2: cd
-
-/a[bcd]*dcdcde/
- adcdcde
- 0: adcdcde
-
-/a[bcd]+dcdcde/
- *** Failers
-No match
- abcde
-No match
- adcdcde
-No match
-
-/(ab|a)b*c/
- abc
- 0: abc
- 1: ab
-
-/((a)(b)c)(d)/
- abcd
- 0: abcd
- 1: abc
- 2: a
- 3: b
- 4: d
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
- 0: alpha
-
-/^a(bc+|b[eh])g|.h$/
- abh
- 0: bh
-
-/(bc+d$|ef*g.|h?i(j|k))/
- effgz
- 0: effgz
- 1: effgz
- ij
- 0: ij
- 1: ij
- 2: j
- reffgz
- 0: effgz
- 1: effgz
- *** Failers
-No match
- effg
-No match
- bcdd
-No match
-
-/((((((((((a))))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/((((((((((a))))))))))\10/
- aa
- 0: aa
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/(((((((((a)))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-
-/multiple words of text/
- *** Failers
-No match
- aa
-No match
- uh-uh
-No match
-
-/multiple words/
- multiple words, yeah
- 0: multiple words
-
-/(.*)c(.*)/
- abcde
- 0: abcde
- 1: ab
- 2: de
-
-/\((.*), (.*)\)/
- (a, b)
- 0: (a, b)
- 1: a
- 2: b
-
-/[k]/
-
-/abcd/
- abcd
- 0: abcd
-
-/a(bc)d/
- abcd
- 0: abcd
- 1: bc
-
-/a[-]?c/
- ac
- 0: ac
-
-/(abc)\1/
- abcabc
- 0: abcabc
- 1: abc
-
-/([a-c]*)\1/
- abcabc
- 0: abcabc
- 1: abc
-
-/(a)|\1/
- a
- 0: a
- 1: a
- *** Failers
- 0: a
- 1: a
- ab
- 0: a
- 1: a
- x
-No match
-
-/(([a-c])b*?\2)*/
- ababbbcbc
- 0: ababb
- 1: bb
- 2: b
-
-/(([a-c])b*?\2){3}/
- ababbbcbc
- 0: ababbbcbc
- 1: cbc
- 2: c
-
-/((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
- 0: bbax
- 1: bbax
- 2: b
- 3: a
-
-/((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
- 0: bbaaaabba
- 1: bba
- 2: b
- 3: a
-
-/abc/i
- ABC
- 0: ABC
- XABCY
- 0: ABC
- ABABC
- 0: ABC
- *** Failers
-No match
- aaxabxbaxbbx
-No match
- XBC
-No match
- AXC
-No match
- ABX
-No match
-
-/ab*c/i
- ABC
- 0: ABC
-
-/ab*bc/i
- ABC
- 0: ABC
- ABBC
- 0: ABBC
-
-/ab*?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{0,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab+?bc/i
- ABBC
- 0: ABBC
-
-/ab+bc/i
- *** Failers
-No match
- ABC
-No match
- ABQ
-No match
-
-/ab{1,}bc/i
-
-/ab+bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{1,3}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{3,4}?bc/i
- ABBBBC
- 0: ABBBBC
-
-/ab{4,5}?bc/i
- *** Failers
-No match
- ABQ
-No match
- ABBBBC
-No match
-
-/ab??bc/i
- ABBC
- 0: ABBC
- ABC
- 0: ABC
-
-/ab{0,1}?bc/i
- ABC
- 0: ABC
-
-/ab??bc/i
-
-/ab??c/i
- ABC
- 0: ABC
-
-/ab{0,1}?c/i
- ABC
- 0: ABC
-
-/^abc$/i
- ABC
- 0: ABC
- *** Failers
-No match
- ABBBBC
-No match
- ABCC
-No match
-
-/^abc/i
- ABCC
- 0: ABC
-
-/^abc$/i
-
-/abc$/i
- AABC
- 0: ABC
-
-/^/i
- ABC
- 0:
-
-/$/i
- ABC
- 0:
-
-/a.c/i
- ABC
- 0: ABC
- AXC
- 0: AXC
-
-/a.*?c/i
- AXYZC
- 0: AXYZC
-
-/a.*c/i
- *** Failers
-No match
- AABC
- 0: AABC
- AXYZD
-No match
-
-/a[bc]d/i
- ABD
- 0: ABD
-
-/a[b-d]e/i
- ACE
- 0: ACE
- *** Failers
-No match
- ABC
-No match
- ABD
-No match
-
-/a[b-d]/i
- AAC
- 0: AC
-
-/a[-b]/i
- A-
- 0: A-
-
-/a[b-]/i
- A-
- 0: A-
-
-/a]/i
- A]
- 0: A]
-
-/a[]]b/i
- A]B
- 0: A]B
-
-/a[^bc]d/i
- AED
- 0: AED
-
-/a[^-b]c/i
- ADC
- 0: ADC
- *** Failers
-No match
- ABD
-No match
- A-C
-No match
-
-/a[^]b]c/i
- ADC
- 0: ADC
-
-/ab|cd/i
- ABC
- 0: AB
- ABCD
- 0: AB
-
-/()ef/i
- DEF
- 0: EF
- 1:
-
-/$b/i
- *** Failers
-No match
- A]C
-No match
- B
-No match
-
-/a\(b/i
- A(B
- 0: A(B
-
-/a\(*b/i
- AB
- 0: AB
- A((B
- 0: A((B
-
-/a\\b/i
- A\B
-No match
-
-/((a))/i
- ABC
- 0: A
- 1: A
- 2: A
-
-/(a)b(c)/i
- ABC
- 0: ABC
- 1: A
- 2: C
-
-/a+b+c/i
- AABBABC
- 0: ABC
-
-/a{1,}b{1,}c/i
- AABBABC
- 0: ABC
-
-/a.+?c/i
- ABCABC
- 0: ABC
-
-/a.*?c/i
- ABCABC
- 0: ABC
-
-/a.{0,5}?c/i
- ABCABC
- 0: ABC
-
-/(a+|b)*/i
- AB
- 0: AB
- 1: B
-
-/(a+|b){0,}/i
- AB
- 0: AB
- 1: B
-
-/(a+|b)+/i
- AB
- 0: AB
- 1: B
-
-/(a+|b){1,}/i
- AB
- 0: AB
- 1: B
-
-/(a+|b)?/i
- AB
- 0: A
- 1: A
-
-/(a+|b){0,1}/i
- AB
- 0: A
- 1: A
-
-/(a+|b){0,1}?/i
- AB
- 0:
-
-/[^ab]*/i
- CDE
- 0: CDE
-
-/abc/i
-
-/a*/i
-
-
-/([abc])*d/i
- ABBBCD
- 0: ABBBCD
- 1: C
-
-/([abc])*bcd/i
- ABCD
- 0: ABCD
- 1: A
-
-/a|b|c|d|e/i
- E
- 0: E
-
-/(a|b|c|d|e)f/i
- EF
- 0: EF
- 1: E
-
-/abcd*efg/i
- ABCDEFG
- 0: ABCDEFG
-
-/ab*/i
- XABYABBBZ
- 0: AB
- XAYABBBZ
- 0: A
-
-/(ab|cd)e/i
- ABCDE
- 0: CDE
- 1: CD
-
-/[abhgefdc]ij/i
- HIJ
- 0: HIJ
-
-/^(ab|cd)e/i
- ABCDE
-No match
-
-/(abc|)ef/i
- ABCDEF
- 0: EF
- 1:
-
-/(a|b)c*d/i
- ABCD
- 0: BCD
- 1: B
-
-/(ab|ab*)bc/i
- ABC
- 0: ABC
- 1: A
-
-/a([bc]*)c*/i
- ABC
- 0: ABC
- 1: BC
-
-/a([bc]*)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]+)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]*)(c+d)/i
- ABCD
- 0: ABCD
- 1: B
- 2: CD
-
-/a[bcd]*dcdcde/i
- ADCDCDE
- 0: ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
- ABC
- 0: ABC
- 1: AB
-
-/((a)(b)c)(d)/i
- ABCD
- 0: ABCD
- 1: ABC
- 2: A
- 3: B
- 4: D
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
- 0: ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
- ABH
- 0: BH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- 0: EFFGZ
- 1: EFFGZ
- IJ
- 0: IJ
- 1: IJ
- 2: J
- REFFGZ
- 0: EFFGZ
- 1: EFFGZ
- *** Failers
-No match
- ADCDCDE
-No match
- EFFG
-No match
- BCDD
-No match
-
-/((((((((((a))))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/((((((((((a))))))))))\10/i
- AA
- 0: AA
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/(((((((((a)))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
- 0: A
- 1: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
- 0: C
- 1: C
-
-/multiple words of text/i
- *** Failers
-No match
- AA
-No match
- UH-UH
-No match
-
-/multiple words/i
- MULTIPLE WORDS, YEAH
- 0: MULTIPLE WORDS
-
-/(.*)c(.*)/i
- ABCDE
- 0: ABCDE
- 1: AB
- 2: DE
-
-/\((.*), (.*)\)/i
- (A, B)
- 0: (A, B)
- 1: A
- 2: B
-
-/[k]/i
-
-/abcd/i
- ABCD
- 0: ABCD
-
-/a(bc)d/i
- ABCD
- 0: ABCD
- 1: BC
-
-/a[-]?c/i
- AC
- 0: AC
-
-/(abc)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/([a-c]*)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
-
-/a(?!b)./
- abad
- 0: ad
-
-/a(?=d)./
- abad
- 0: ad
-
-/a(?=c|d)./
- abad
- 0: ad
-
-/a(?:b|c|d)(.)/
- ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)*(.)/
- ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)+?(.)/
- ace
- 0: ace
- 1: e
- acdbcdbe
- 0: acd
- 1: d
-
-/a(?:b|c|d)+(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){2}(.)/
- acdbcdbe
- 0: acdb
- 1: b
-
-/a(?:b|c|d){4,5}(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){4,5}?(.)/
- acdbcdbe
- 0: acdbcd
- 1: d
-
-/((foo)|(bar))*/
- foobar
- 0: foobar
- 1: bar
- 2: foo
- 3: bar
-
-/a(?:b|c|d){6,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){6,7}?(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){5,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,7}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
- 0: ace
- 1: c
- 2: e
-
-/^(.+)?B/
- AB
- 0: AB
- 1: A
-
-/^([^a-z])|(\^)$/
- .
- 0: .
- 1: .
-
-/^[<>]&/
- <&OUT
- 0: <&
-
-/^(a\1?){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- *** Failers
-No match
- AB
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaaa
-No match
-
-/^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- *** Failers
-No match
- aaaaaaaaa
-No match
- aaaaaaaaaaa
-No match
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
- foobar
- 0: foobar
- 1: f
- 2: o
- 3: o
- 4: b
- 5: a
- 6: r
-
-/(?<=a)b/
- ab
- 0: b
- *** Failers
-No match
- cb
-No match
- b
-No match
-
-/(?<!c)b/
- ab
- 0: b
- b
- 0: b
- b
- 0: b
-
-/(?:..)*a/
- aba
- 0: aba
-
-/(?:..)*?a/
- aba
- 0: a
-
-/^(?:b|a(?=(.)))*\1/
- abc
- 0: ab
- 1: b
-
-/^(){3,5}/
- abc
- 0:
- 1:
-
-/^(a+)*ax/
- aax
- 0: aax
- 1: a
-
-/^((a|b)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
-
-/^((a|bc)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
-
-/(a|x)*ab/
- cab
- 0: ab
-
-/(a)*ab/
- cab
- 0: ab
-
-/(?:(?i)a)b/
- ab
- 0: ab
-
-/((?i)a)b/
- ab
- 0: ab
- 1: a
-
-/(?:(?i)a)b/
- Ab
- 0: Ab
-
-/((?i)a)b/
- Ab
- 0: Ab
- 1: A
-
-/(?:(?i)a)b/
- *** Failers
-No match
- cb
-No match
- aB
-No match
-
-/((?i)a)b/
-
-/(?i:a)b/
- ab
- 0: ab
-
-/((?i:a))b/
- ab
- 0: ab
- 1: a
-
-/(?i:a)b/
- Ab
- 0: Ab
-
-/((?i:a))b/
- Ab
- 0: Ab
- 1: A
-
-/(?i:a)b/
- *** Failers
-No match
- aB
-No match
- aB
-No match
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
- ab
- 0: ab
-
-/((?-i)a)b/i
- ab
- 0: ab
- 1: a
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- aB
- 0: aB
- Ab
-No match
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
- aB
- 0: aB
-
-/((?-i)a)b/i
- aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
- ab
- 0: ab
-
-/((?-i:a))b/i
- ab
- 0: ab
- 1: a
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
- *** Failers
-No match
- AB
-No match
- Ab
-No match
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
- aB
- 0: aB
-
-/((?-i:a))b/i
- aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
- *** Failers
-No match
- Ab
-No match
- AB
-No match
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
- *** Failers
-No match
- AB
-No match
- a\nB
-No match
-
-/((?s-i:a.))b/i
- a\nB
- 0: a\x0aB
- 1: a\x0a
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
- 0: cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
- Ab4ab
- 0: Ab4ab
- 1: Ab
- ab4Ab
- 0: ab4Ab
- 1: ab
-
-/foo\w*\d{4}baz/
- foobar1234baz
- 0: foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
- x~~
- 0: x~~
- 1: ~~
-
-/^a(?#xxx){3}c/
- aaac
- 0: aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
- aaac
- 0: aaac
-
-/(?<![cd])b/
- *** Failers
-No match
- B\nB
-No match
- dbcb
-No match
-
-/(?<![cd])[ab]/
- dbaacb
- 0: a
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
- dbaacb
- 0: a
-
-/(?<!cd)[ab]/
- cdaccb
- 0: b
-
-/^(?:a?b?)*$/
- *** Failers
-No match
- dbcb
-No match
- a--
-No match
-
-/((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
- 0: a\x0ab
- 1: a\x0a
- 2: \x0a
- 3: b
-
-/((?m)^b$)/
- a\nb\nc\n
- 0: b
- 1: b
-
-/(?m)^b/
- a\nb\n
- 0: b
-
-/(?m)^(b)/
- a\nb\n
- 0: b
- 1: b
-
-/((?m)^b)/
- a\nb\n
- 0: b
- 1: b
-
-/\n((?m)^b)/
- a\nb\n
- 0: \x0ab
- 1: b
-
-/((?s).)c(?!.)/
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
-
-/((?s)b.)c(?!.)/
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
-
-/^b/
-
-/()^b/
- *** Failers
-No match
- a\nb\nc\n
-No match
- a\nb\nc\n
-No match
-
-/((?m)^b)/
- a\nb\nc\n
- 0: b
- 1: b
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
- a
- 0: a
-
-/(x)?(?(1)a|b)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(x)?(?(1)b|a)/
- a
- 0: a
-
-/()?(?(1)b|a)/
- a
- 0: a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
- a
- 0: a
- 1:
-
-/^(\()?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- *** Failers
-No match
- a
-No match
- blah)
-No match
- (blah
-No match
-
-/^(\(+)?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- *** Failers
-No match
- blah)
-No match
- (blah
-No match
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
- a
- 0: a
-
-/(?(?=a)b|a)/
- *** Failers
-No match
- a
-No match
- a
-No match
-
-/(?(?=a)a|b)/
- a
- 0: a
-
-/(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
- one:
- 0: one:
- 1: one:
-
-/$(?<=^(a))/
- a
- 0:
- 1: a
-
-/(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
- *** Failers
-No match
- aaab
-No match
- aaab
-No match
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
-/(a*)b+/
- caab
- 0: aab
- 1: aa
-
-/([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
- *** Failers
- 0: Failers
- 1: <unset>
- 2: Failers
- abcd:
-No match
- abcd:
-No match
-
-/^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
-
-/(>a+)ab/
-
-/(?>a+)b/
- aaab
- 0: aaab
-
-/([[:]+)/
- a:[b]:
- 0: :[
- 1: :[
-
-/([[=]+)/
- a=[b]=
- 0: =[
- 1: =[
-
-/([[.]+)/
- a.[b].
- 0: .[
- 1: .[
-
-/((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
-
-/((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/a\Z/
- *** Failers
-No match
- aaab
-No match
- a\nb\n
-No match
-
-/b\Z/
- a\nb\n
- 0: b
-
-/b\z/
-
-/b\Z/
- a\nb
- 0: b
-
-/b\z/
- a\nb
- 0: b
- *** Failers
-No match
-
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- 0: a
- 1:
- abc
- 0: abc
- 1:
- a-b
- 0: a-b
- 1:
- 0-9
- 0: 0-9
- 1:
- a.b
- 0: a.b
- 1:
- 5.6.7
- 0: 5.6.7
- 1:
- the.quick.brown.fox
- 0: the.quick.brown.fox
- 1:
- a100.b200.300c
- 0: a100.b200.300c
- 1:
- 12-ab.1245
- 0: 12-ab.1245
- 1:
- ***Failers
-No match
- \
-No match
- .a
-No match
- -a
-No match
- a-
-No match
- a.
-No match
- a_b
-No match
- a.-
-No match
- a..
-No match
- ab..bc
-No match
- the.quick.brown.fox-
-No match
- the.quick.brown.fox.
-No match
- the.quick.brown.fox_
-No match
- the.quick.brown.fox+
-No match
-
-/(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: wxyz
- *** Failers
-No match
- a rather long string that doesn't end with one of them
-No match
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/(?<=\d{3}(?!999))foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=(?!...999)\d{3})foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- *** Failers
-No match
- 123abcfoo
-No match
-
-/(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
-No match
-
-/(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- *** Failers
-No match
- 123999foo
-No match
-
-/<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href=\'abcd xyz pqr\' cats
- 0: <a href='abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
-/isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/((Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2: Z
-
-/(Z()|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
-
-/(Z(())|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
- 3:
-
-/((?>Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
-
-/((?>)+|A)*/
- ZABCDEFG
- 0:
- 1:
-
-/a*/g
- abbab
- 0: a
- 0:
- 0:
- 0: a
- 0:
- 0:
-
-/^[a-\d]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/^[\d-a]/
- abcde
- 0: a
- -things
- 0: -
- 0digit
- 0: 0
- *** Failers
-No match
- bcdef
-No match
-
-/ End of testinput3 /
-
diff --git a/srclib/pcre/testdata/testoutput4 b/srclib/pcre/testdata/testoutput4
deleted file mode 100644
index df81a0f548..0000000000
--- a/srclib/pcre/testdata/testoutput4
+++ /dev/null
@@ -1,116 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/^[\w]+/
- *** Failers
-No match
- École
-No match
-
-/^[\w]+/Lfr
- École
- 0: École
-
-/^[\w]+/
- *** Failers
-No match
- École
-No match
-
-/^[\W]+/
- École
- 0: \xc9
-
-/^[\W]+/Lfr
- *** Failers
- 0: ***
- École
-No match
-
-/[\b]/
- \b
- 0: \x08
- *** Failers
-No match
- a
-No match
-
-/[\b]/Lfr
- \b
- 0: \x08
- *** Failers
-No match
- a
-No match
-
-/^\w+/
- *** Failers
-No match
- École
-No match
-
-/^\w+/Lfr
- École
- 0: École
-
-/(.+)\b(.+)/
- École
- 0: \xc9cole
- 1: \xc9
- 2: cole
-
-/(.+)\b(.+)/Lfr
- *** Failers
- 0: *** Failers
- 1: ***
- 2: Failers
- École
-No match
-
-/École/i
- École
- 0: \xc9cole
- *** Failers
-No match
- école
-No match
-
-/École/iLfr
- École
- 0: École
- école
- 0: école
-
-/\w/IS
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
- Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
-
-/\w/ISLfr
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
- Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
- À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å
- æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ
-
-/^[\xc8-\xc9]/iLfr
- École
- 0: É
- école
- 0: é
-
-/^[\xc8-\xc9]/Lfr
- École
- 0: É
- *** Failers
-No match
- école
-No match
-
-/ End of testinput4 /
-
diff --git a/srclib/pcre/testdata/testoutput5 b/srclib/pcre/testdata/testoutput5
deleted file mode 100644
index 6bb9ad31b4..0000000000
--- a/srclib/pcre/testdata/testoutput5
+++ /dev/null
@@ -1,242 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/-- Because of problems with Perl 5.6 in handling UTF-8 vs non UTF-8 --/
-/-- strings automatically, do not use the \x{} construct except with --/
-No match
-/-- patterns that have the /8 option set, and don't use them without! --/
-No match
-
-/a.b/8
- acb
- 0: acb
- a\x7fb
- 0: a\x{7f}b
- a\x{100}b
- 0: a\x{100}b
- *** Failers
-No match
- a\nb
-No match
-
-/a(.{3})b/8
- a\x{4000}xyb
- 0: a\x{4000}xyb
- 1: \x{4000}xy
- a\x{4000}\x7fyb
- 0: a\x{4000}\x{7f}yb
- 1: \x{4000}\x{7f}y
- a\x{4000}\x{100}yb
- 0: a\x{4000}\x{100}yb
- 1: \x{4000}\x{100}y
- *** Failers
-No match
- a\x{4000}b
-No match
- ac\ncb
-No match
-
-/a(.*?)(.)/
- a\xc0\x88b
- 0: a\xc0
- 1:
- 2: \xc0
-
-/a(.*?)(.)/8
- a\x{100}b
- 0: a\x{100}
- 1:
- 2: \x{100}
-
-/a(.*)(.)/
- a\xc0\x88b
- 0: a\xc0\x88b
- 1: \xc0\x88
- 2: b
-
-/a(.*)(.)/8
- a\x{100}b
- 0: a\x{100}b
- 1: \x{100}
- 2: b
-
-/a(.)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: \xc0
- 2: \x92
-
-/a(.)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: \x{240}
- 2: b
-
-/a(.?)(.)/
- a\xc0\x92bcd
- 0: a\xc0\x92
- 1: \xc0
- 2: \x92
-
-/a(.?)(.)/8
- a\x{240}bcd
- 0: a\x{240}b
- 1: \x{240}
- 2: b
-
-/a(.??)(.)/
- a\xc0\x92bcd
- 0: a\xc0
- 1:
- 2: \xc0
-
-/a(.??)(.)/8
- a\x{240}bcd
- 0: a\x{240}
- 1:
- 2: \x{240}
-
-/a(.{3})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- *** Failers
-No match
- a\x{1234}b
-No match
- ac\ncb
-No match
-
-/a(.{3,})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxbcdefghijb
- 1: xxxxbcdefghij
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
- a\x{1234}b
-No match
-
-/a(.{3,}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
- a\x{1234}b
-No match
-
-/a(.{3,5})b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- axbxxbcdefghijb
- 0: axbxxb
- 1: xbxx
- axxxxxbcdefghijb
- 0: axxxxxb
- 1: xxxxx
- *** Failers
-No match
- a\x{1234}b
-No match
- axxxxxxbcdefghijb
-No match
-
-/a(.{3,5}?)b/8
- a\x{1234}xyb
- 0: a\x{1234}xyb
- 1: \x{1234}xy
- a\x{1234}\x{4321}yb
- 0: a\x{1234}\x{4321}yb
- 1: \x{1234}\x{4321}y
- a\x{1234}\x{4321}\x{3412}b
- 0: a\x{1234}\x{4321}\x{3412}b
- 1: \x{1234}\x{4321}\x{3412}
- axxxxbcdefghijb
- 0: axxxxb
- 1: xxxx
- a\x{1234}\x{4321}\x{3412}\x{3421}b
- 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- 1: \x{1234}\x{4321}\x{3412}\x{3421}
- axbxxbcdefghijb
- 0: axbxxb
- 1: xbxx
- axxxxxbcdefghijb
- 0: axxxxxb
- 1: xxxxx
- *** Failers
-No match
- a\x{1234}b
-No match
- axxxxxxbcdefghijb
-No match
-
-/^[a\x{c0}]/8
- *** Failers
-No match
- \x{100}
-No match
-
-/(?<=aXb)cd/8
- aXbcd
- 0: cd
-
-/(?<=a\x{100}b)cd/8
- a\x{100}bcd
- 0: cd
-
-/(?<=a\x{100000}b)cd/8
- a\x{100000}bcd
- 0: cd
-
-/(?:\x{100}){3}b/8
- \x{100}\x{100}\x{100}b
- 0: \x{100}\x{100}\x{100}b
- *** Failers
-No match
- \x{100}\x{100}b
-No match
-
-/ End of testinput5 /
-
diff --git a/srclib/pcre/testdata/testoutput6 b/srclib/pcre/testdata/testoutput6
deleted file mode 100644
index fcf084670f..0000000000
--- a/srclib/pcre/testdata/testoutput6
+++ /dev/null
@@ -1,319 +0,0 @@
-PCRE version 3.9 02-Jan-2002
-
-/\x{100}/8DM
-Memory allocation (code space): 11
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc4\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 128
-
-/\x{1000}/8DM
-Memory allocation (code space): 12
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe1\x80\x80
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 225
-Need char = 128
-
-/\x{10000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\x90\x80\x80
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 128
-
-/\x{100000}/8DM
-Memory allocation (code space): 13
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf4\x80\x80\x80
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 244
-Need char = 128
-
-/\x{1000000}/8DM
-Memory allocation (code space): 14
-------------------------------------------------------------------
- 0 10 Bra 0
- 3 5 \xf9\x80\x80\x80\x80
- 10 10 Ket
- 13 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 249
-Need char = 128
-
-/\x{4000000}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfc\x84\x80\x80\x80\x80
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 252
-Need char = 128
-
-/\x{7fffFFFF}/8DM
-Memory allocation (code space): 15
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 6 \xfd\xbf\xbf\xbf\xbf\xbf
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 253
-Need char = 191
-
-/[\x{ff}]/8DM
-Memory allocation (code space): 40
-------------------------------------------------------------------
- 0 6 Bra 0
- 3 1 \xff
- 6 6 Ket
- 9 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 255
-No need char
-
-/[\x{100}]/8DM
-Memory allocation (code space): 40
-Failed: characters with values > 255 are not yet supported in classes at offset 7
-
-/\x{ffffffff}/8
-Failed: character value in \x{...} sequence is too large at offset 11
-
-/\x{100000000}/8
-Failed: character value in \x{...} sequence is too large at offset 12
-
-/^\x{100}a\x{1234}/8
- \x{100}a\x{1234}bcd
- 0: \x{100}a\x{1234}
-
-/\x80/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\xff/8D
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc3\xbf
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 195
-Need char = 191
-
-/\x{0041}\x{2262}\x{0391}\x{002e}/D8
-------------------------------------------------------------------
- 0 12 Bra 0
- 3 7 A\xe2\x89\xa2\xce\x91.
- 12 12 Ket
- 15 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 'A'
-Need char = '.'
- \x{0041}\x{2262}\x{0391}\x{002e}
- 0: A\x{2262}\x{391}.
-
-/\x{D55c}\x{ad6d}\x{C5B4}/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 9 \xed\x95\x9c\xea\xb5\xad\xec\x96\xb4
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 237
-Need char = 180
- \x{D55c}\x{ad6d}\x{C5B4}
- 0: \x{d55c}\x{ad6d}\x{c5b4}
-
-/\x{65e5}\x{672c}\x{8a9e}/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 9 \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 230
-Need char = 158
- \x{65e5}\x{672c}\x{8a9e}
- 0: \x{65e5}\x{672c}\x{8a9e}
-
-/\x{80}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x80
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 128
-
-/\x{084}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc2\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 194
-Need char = 132
-
-/\x{104}/D8
-------------------------------------------------------------------
- 0 7 Bra 0
- 3 2 \xc4\x84
- 7 7 Ket
- 10 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 196
-Need char = 132
-
-/\x{861}/D8
-------------------------------------------------------------------
- 0 8 Bra 0
- 3 3 \xe0\xa1\xa1
- 8 8 Ket
- 11 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 224
-Need char = 161
-
-/\x{212ab}/D8
-------------------------------------------------------------------
- 0 9 Bra 0
- 3 4 \xf0\xa1\x8a\xab
- 9 9 Ket
- 12 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-First char = 240
-Need char = 171
-
-/.{3,5}X/D8
-------------------------------------------------------------------
- 0 14 Bra 0
- 3 Any{3}
- 7 Any{0,2}
- 11 1 X
- 14 14 Ket
- 17 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-Need char = 'X'
- \x{212ab}\x{212ab}\x{212ab}\x{861}X
- 0: \x{212ab}\x{212ab}\x{212ab}\x{861}X
-
-
-/.{3,5}?/D8
-------------------------------------------------------------------
- 0 11 Bra 0
- 3 Any{3}
- 7 Any{0,2}?
- 11 11 Ket
- 14 End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: utf8
-No first char
-No need char
- \x{212ab}\x{212ab}\x{212ab}\x{861}
- 0: \x{212ab}\x{212ab}\x{212ab}
-
-/-- These tests are here rather than in testinput5 because Perl 5.6 has --/
-/-- some problems with UTF-8 support, in the area of \x{..} where the --/
-No match
-/-- value is < 255. It grumbles about invalid UTF-8 strings. --/
-No match
-
-/^[a\x{c0}]b/8
- \x{c0}b
- 0: \x{c0}b
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
-
-/^([a\x{c0}]*?)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aa
- 1: a\x{c0}
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aa
- 1: a\x{c0}a\x{c0}
-
-/^([a\x{c0}]*)aa/8
- a\x{c0}aaaa/
- 0: a\x{c0}aaaa
- 1: a\x{c0}aa
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}aaa
- 1: a\x{c0}a\x{c0}a
-
-/^([a\x{c0}]*)a\x{c0}/8
- a\x{c0}aaaa/
- 0: a\x{c0}
- 1:
- a\x{c0}a\x{c0}aaa/
- 0: a\x{c0}a\x{c0}
- 1: a\x{c0}
-
-/ End of testinput6 /
-
diff --git a/support/.cvsignore b/support/.cvsignore
deleted file mode 100644
index e4018d42be..0000000000
--- a/support/.cvsignore
+++ /dev/null
@@ -1,36 +0,0 @@
-.libs
-*.lo
-.deps
-Makefile
-*.mak
-rotatelogs
-htpasswd
-htdbm
-htdigest
-unescape
-inc2shtml
-httpd_monitor
-suexec
-logresolve
-ab
-apxs
-Debug
-Release
-apachectl
-checkgid
-dbmmanage
-envvars-std
-log_server_status
-logresolve.pl
-split-logfile
-phf_abuse_log.cgi
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/support/.indent.pro b/support/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/support/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/support/Makefile.in b/support/Makefile.in
deleted file mode 100644
index 8fca31c52b..0000000000
--- a/support/Makefile.in
+++ /dev/null
@@ -1,64 +0,0 @@
-DISTCLEAN_TARGETS = apxs apachectl dbmmanage log_server_status \
- logresolve.pl phf_abuse_log.cgi split-logfile envvars-std
-
-CLEAN_TARGETS = suexec
-
-PROGRAMS = htpasswd htdigest rotatelogs logresolve ab checkgid htdbm
-TARGETS = $(PROGRAMS)
-
-PROGRAM_LDADD = $(UTIL_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS) $(AP_LIBS)
-PROGRAM_DEPENDENCIES =
-
-include $(top_builddir)/build/rules.mk
-
-install:
- @test -d $(DESTDIR)$(bindir) || $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
- @test -d $(DESTDIR)$(sbindir) || $(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
- @test -d $(DESTDIR)$(libexecdir) || $(MKINSTALLDIRS) $(DESTDIR)$(libexecdir)
- @cp -p $(top_builddir)/server/httpd.exp $(DESTDIR)$(libexecdir)
- @for i in apxs apachectl dbmmanage; do \
- if test -f "$(builddir)/$$i"; then \
- cp -p $$i $(DESTDIR)$(sbindir); \
- chmod 755 $(DESTDIR)$(sbindir)/$$i; \
- fi ; \
- done
- @if test -f "$(builddir)/envvars-std"; then \
- cp -p envvars-std $(DESTDIR)$(sbindir); \
- if test ! -f $(DESTDIR)$(sbindir)/envvars; then \
- cp -p envvars-std $(DESTDIR)$(sbindir)/envvars ; \
- fi ; \
- fi
-
-htpasswd_OBJECTS = htpasswd.lo
-htpasswd: $(htpasswd_OBJECTS)
- $(LINK) $(htpasswd_LTFLAGS) $(htpasswd_OBJECTS) $(PROGRAM_LDADD)
-
-htdigest_OBJECTS = htdigest.lo
-htdigest: $(htdigest_OBJECTS)
- $(LINK) $(htdigest_LTFLAGS) $(htdigest_OBJECTS) $(PROGRAM_LDADD)
-
-rotatelogs_OBJECTS = rotatelogs.lo
-rotatelogs: $(rotatelogs_OBJECTS)
- $(LINK) $(rotatelogs_LTFLAGS) $(rotatelogs_OBJECTS) $(PROGRAM_LDADD)
-
-logresolve_OBJECTS = logresolve.lo
-logresolve: $(logresolve_OBJECTS)
- $(LINK) $(logresolve_LTFLAGS) $(logresolve_OBJECTS) $(PROGRAM_LDADD)
-
-htdbm_OBJECTS = htdbm.lo
-htdbm: $(htdbm_OBJECTS)
- $(LINK) $(htdbm_LTFLAGS) $(htdbm_OBJECTS) $(PROGRAM_LDADD)
-
-ab_OBJECTS = ab.lo
-ab_LDADD = $(PROGRAM_LDADD) $(SSL_LIBS)
-ab: $(ab_OBJECTS)
- $(LINK) $(ab_LTFLAGS) $(ab_OBJECTS) $(ab_LDADD)
-
-checkgid_OBJECTS = checkgid.lo
-checkgid: $(checkgid_OBJECTS)
- $(LINK) $(checkgid_LTFLAGS) $(checkgid_OBJECTS) $(PROGRAM_LDADD)
-
-suexec_OBJECTS = suexec.lo
-suexec: $(suexec_OBJECTS)
- $(LINK) $(suexec_OBJECTS)
-
diff --git a/support/NWGNUab b/support/NWGNUab
deleted file mode 100644
index d0ca39d1ba..0000000000
--- a/support/NWGNUab
+++ /dev/null
@@ -1,254 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(AP_WORK)/include \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr/misc/netware \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = ab
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Benchmark Utility for NetWare
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = ab
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-#NLM_SCREEN_NAME = Apache Bench
-NLM_SCREEN_NAME = DEFAULT
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/ab.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/ab.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUhtdbm b/support/NWGNUhtdbm
deleted file mode 100644
index efb2475a9e..0000000000
--- a/support/NWGNUhtdbm
+++ /dev/null
@@ -1,252 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr/misc/netware \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = htdbm
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) HT Database Management Utility for NetWare
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = htdbm
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-NLM_SCREEN_NAME = htdbm Password Management
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/htdbm.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/htdbm.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUhtdigest b/support/NWGNUhtdigest
deleted file mode 100644
index ae702e0ee2..0000000000
--- a/support/NWGNUhtdigest
+++ /dev/null
@@ -1,252 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr/misc/netware \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = htdigest
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) HT Digest Utility for NetWare
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = htdigest
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-NLM_SCREEN_NAME = Digest Password Management
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/htdigest.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/htdigest.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUhtpasswd b/support/NWGNUhtpasswd
deleted file mode 100644
index 53c7e511d5..0000000000
--- a/support/NWGNUhtpasswd
+++ /dev/null
@@ -1,252 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr/misc/netware \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = htpasswd
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) HT Password Utility for NetWare
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = htpasswd
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-NLM_SCREEN_NAME = htpasswd Password Management
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/htpasswd.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/htpasswd.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUlogres b/support/NWGNUlogres
deleted file mode 100644
index 0c717f7137..0000000000
--- a/support/NWGNUlogres
+++ /dev/null
@@ -1,254 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(AP_WORK)/include \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr-util/include \
- $(AP_WORK)/srclib/apr/misc/netware \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = logres
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Logresolve Utility for NetWare
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = logres
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-NLM_SCREEN_NAME = Log Resolve
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 65536
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/logres.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/logresolve.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @libc.imp \
- @ws2nlm.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUmakefile b/support/NWGNUmakefile
deleted file mode 100644
index 327cd4d8d6..0000000000
--- a/support/NWGNUmakefile
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
- $(EOLIST)
-
-#
-# Get the 'head' of the build environment. This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME =
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION =
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME =
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE =
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM =
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM =
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS =
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/ab.nlm \
- $(OBJDIR)/htpasswd.nlm \
- $(OBJDIR)/htdigest.nlm \
- $(OBJDIR)/htdbm.nlm \
- $(OBJDIR)/logres.nlm \
- $(OBJDIR)/rotlogs.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
- copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\bin\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/support/NWGNUrotlogs b/support/NWGNUrotlogs
deleted file mode 100644
index ab8d76b1f4..0000000000
--- a/support/NWGNUrotlogs
+++ /dev/null
@@ -1,251 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary. This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS += \
- $(NWOS) \
- $(AP_WORK)/srclib/apr/include \
- $(AP_WORK)/srclib/apr/misc/netware \
- $(AP_WORK)/srclib/apr \
- $(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS += \
- $(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES += \
- $(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS += \
- $(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS += \
- $(EOLIST)
-
-XCFLAGS += \
- $(EOLIST)
-
-XDEFINES += \
- $(EOLIST)
-
-XLFLAGS += \
- $(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm. If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME = rotlogs
-
-#
-# This is used by the link '-desc ' directive.
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION = Apache $(VERSION_STR) Log Rotation Utility for NetWare
-
-#
-# This is used by the '-threadname' directive. If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME = rotlogs
-
-#
-# This is used by the '-screenname' directive. If left blank,
-# 'Apache for NetWare' Thread will be used.
-#
-NLM_SCREEN_NAME = DEFAULT
-
-#
-# If this is specified, it will override VERSION value in
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION =
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE = 98304
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM = _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM = _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM =
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION, MULTIPLE
-
-#
-# If this is specified it will be linked in with the XDCData option in the def
-# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA =
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
- $(OBJDIR)/rotlogs.nlm \
- $(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
- $(OBJDIR)/rotatelogs.o \
- $(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
- libcpre.o \
- $(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
- aprlib \
- libc \
- $(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
-
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
- @$(APR)/aprlib.imp \
- @libc.imp \
- $(EOLIST)
-
-#
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
- $(EOLIST)
-
-#
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
- $(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the
-# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/README b/support/README
deleted file mode 100644
index 80e9cafde0..0000000000
--- a/support/README
+++ /dev/null
@@ -1,62 +0,0 @@
-Support files:
-
-ab
- ABuse your server with this benchmarker. Rudimentary
- command line testing tool.
-
-apachectl
- Apache run-time Control script. To facilitate the
- administrator and/or your rc.d scripts to control the
- functioning of the Apache httpd daemon.
-
-apxs
- APache eXtenSion tool. Eases building and installing
- DSO style modules.
-
-dbmmanage
- Create and update user authentication files in the faster
- DBM format used by mod_auth_db.
-
-htdigest
- Create and update user authentication files used in
- DIGEST authentification. See mod_auth_digest.
-
-htpasswd
- Create and update user authentication files used in
- BASIC authentification. I.e. the htpasswd files.
- See mod_auth.
-
-httpd.8
- General apache man page.
-
-log_server_status
- This script is designed to be run at a frequent interval by something
- like cron. It connects to the server and downloads the status
- information. It reformats the information to a single line and logs
- it to a file.
-
-logresolve
- resolve hostnames for IP-adresses in Apache logfiles
-
-phf_abuse_log.cgi
- This script can be used to detect people trying to abuse an ancient
- and long plugged security hole which existed in a CGI script distributed
- with Apache 1.0.3 and earlier versions.
-
-rotatelogs
- rotate Apache logs without having to kill the server.
-
-split-logfile
- This script will take a combined virtual hosts access
- log file and break its contents into separate files.
-
-suexec
- Switch User For Exec. Used internally by apache,
- see the document `Apache suEXEC Support'
- under http://www.apache.org/docs/suexec.html .
-
-SHA1
- This directory includes some utilities to allow Apache 1.3.6 to
- recognize passwords in SHA1 format, as used by Netscape web
- servers. It is not installed by default.
-
diff --git a/support/SHA1/README.sha1 b/support/SHA1/README.sha1
deleted file mode 100644
index 3998e1fdd9..0000000000
--- a/support/SHA1/README.sha1
+++ /dev/null
@@ -1,34 +0,0 @@
-This directory includes some utilities to allow Apache 1.3.6 to
-recognize passwords in SHA1 format, as used by Netscape web servers.
-
-From Netscape's admin interface, export the password database to an
-ldif file and then use convert.pl in this distribution to generate
-apache style password files.
-
-Note: SHA1 support is useful for migration purposes, but is less
- secure than Apache's password format, since Apache's (MD5)
- password format uses a random eight character salt to generate
- one of many possible hashes for the same password. Netscape
- uses plain SHA1 without a salt, so the same password
- will always generate the same hash, making it easier
- to break since the search space is smaller.
-
-This code was contributed by Clinton Wong <clintdw@netcom.com>.
-
-README.sha1
- this file
-
-convert-sha1.pl
- takes an ldif dump from Netscape's web server on
- standard in, outputs apache htpasswd format on standard out.
-
- Usage: convert.pl < ldif > passwords
-
-htpasswd-sha1.pl
- perl script to generate entries in apache htpasswd format.
-
- Usage: htpasswd-sha1.pl some_user some_password
-
-ldif-sha1.example
- sample ldif dump with one sha1 password and one crypt password.
-
diff --git a/support/SHA1/convert-sha1.pl b/support/SHA1/convert-sha1.pl
deleted file mode 100644
index 35228022a0..0000000000
--- a/support/SHA1/convert-sha1.pl
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-# This is public domain code. Do whatever you want with it.
-# It was originally included in Clinton Wong's Apache 1.3.6 SHA1/ldif
-# patch distribution as sample code for converting accounts from
-# ldif format (as used by Netscape web servers) to Apache password format.
-
-my $uid='';
-my $passwd='';
-
-while (my $line = <>) {
- chomp $line;
- if ( $line =~ /uid:\s*(.+)/) { $uid = $1 }
- if ( $line =~ /userpassword:\s*(\{\w+\}.+)/) {
- $passwd = $1;
- $passwd =~ s/^\{crypt\}//i; # Apache stores crypt without a magic string
- }
-
- if (length($line)==0) {
-
- if (length $uid and length $passwd) {
- print $uid, ':', $passwd, "\n";
- } # output if we have something to print
-
- $uid = '';
- $passwd = '';
-
- } # if newline
-} # while something to read
-
-# handle last entry if there isn't a newline before EOF
- if (length $uid and length $passwd) {
- print $uid, ':', $passwd, "\n";
-}
-
diff --git a/support/SHA1/htpasswd-sha1.pl b/support/SHA1/htpasswd-sha1.pl
deleted file mode 100644
index ad624d1101..0000000000
--- a/support/SHA1/htpasswd-sha1.pl
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-#
-# Utility which takes a username and password
-# on the command line and generates a username
-# sha1-encrytped password on the stdout.
-#
-# Typical useage:
-# ./htpasswd-sha1.pl dirkx MySecret >> sha1-passwd
-#
-# This is public domain code. Do whatever you want with it.
-# It was originally included in Clinton Wong's Apache 1.3.6 SHA1/ldif
-# patch distribution as sample code for generating entries for
-# Apache password files using SHA1.
-
-use MIME::Base64; # http://www.cpan.org/modules/by-module/MIME/
-use Digest::SHA1; # http://www.cpan.org/modules/by-module/MD5/
-
-if ($#ARGV!=1) { die "Usage $0: user password\n" }
-
-print $ARGV[0], ':{SHA}', encode_base64( Digest::SHA1::sha1($ARGV[1]) );
-
diff --git a/support/SHA1/ldif-sha1.example b/support/SHA1/ldif-sha1.example
deleted file mode 100644
index b8fe917eaf..0000000000
--- a/support/SHA1/ldif-sha1.example
+++ /dev/null
@@ -1,19 +0,0 @@
-dn: cn=someuser
-cn: someuser
-sn: someuser
-objectclass: top
-objectclass: person
-objectclass: organizationalPerson
-objectclass: inetOrgPerson
-uid: someuser
-userpassword: {SHA}GvF+c3IdvgxAARuC7Uuxp9vjzik=
-
-dn: cn=anotheruser
-cn: anotheruser
-sn: anotheruser
-objectclass: top
-objectclass: person
-objectclass: organizationalPerson
-objectclass: inetOrgPerson
-uid: anotheruser
-userpassword: {crypt}eFnp.4sz5XnH6
diff --git a/support/ab.c b/support/ab.c
deleted file mode 100644
index c623a141b2..0000000000
--- a/support/ab.c
+++ /dev/null
@@ -1,2216 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ** This program is based on ZeusBench V1.0 written by Adam Twiss
- ** which is Copyright (c) 1996 by Zeus Technology Ltd. http://www.zeustech.net/
- **
- ** This software is provided "as is" and any express or implied waranties,
- ** including but not limited to, the implied warranties of merchantability and
- ** fitness for a particular purpose are disclaimed. In no event shall
- ** Zeus Technology Ltd. be liable for any direct, indirect, incidental, special,
- ** exemplary, or consequential damaged (including, but not limited to,
- ** procurement of substitute good or services; loss of use, data, or profits;
- ** or business interruption) however caused and on theory of liability. Whether
- ** in contract, strict liability or tort (including negligence or otherwise)
- ** arising in any way out of the use of this software, even if advised of the
- ** possibility of such damage.
- **
- */
-
-/*
- ** HISTORY:
- ** - Originally written by Adam Twiss <adam@zeus.co.uk>, March 1996
- ** with input from Mike Belshe <mbelshe@netscape.com> and
- ** Michael Campanella <campanella@stevms.enet.dec.com>
- ** - Enhanced by Dean Gaudet <dgaudet@apache.org>, November 1997
- ** - Cleaned up by Ralf S. Engelschall <rse@apache.org>, March 1998
- ** - POST and verbosity by Kurt Sussman <kls@merlot.com>, August 1998
- ** - HTML table output added by David N. Welton <davidw@prosa.it>, January 1999
- ** - Added Cookie, Arbitrary header and auth support. <dirkx@webweaving.org>, April 1999
- ** Version 1.3d
- ** - Increased version number - as some of the socket/error handling has
- ** fundamentally changed - and will give fundamentally different results
- ** in situations where a server is dropping requests. Therefore you can
- ** no longer compare results of AB as easily. Hence the inc of the version.
- ** They should be closer to the truth though. Sander & <dirkx@covalent.net>, End 2000.
- ** - Fixed proxy functionality, added median/mean statistics, added gnuplot
- ** output option, added _experimental/rudimentary_ SSL support. Added
- ** confidence guestimators and warnings. Sander & <dirkx@covalent.net>, End 2000
- ** - Fixed serious int overflow issues which would cause realistic (longer
- ** than a few minutes) run's to have wrong (but believable) results. Added
- ** trapping of connection errors which influenced measurements.
- ** Contributed by Sander Temme, Early 2001
- ** Version 1.3e
- ** - Changed timeout behavour during write to work whilst the sockets
- ** are filling up and apr_write() does writes a few - but not all.
- ** This will potentially change results. <dirkx@webweaving.org>, April 2001
- ** Version 2.0.36-dev
- ** Improvements to concurrent processing:
- ** - Enabled non-blocking connect()s.
- ** - Prevent blocking calls to apr_socket_recv() (thereby allowing AB to
- ** manage its entire set of socket descriptors).
- ** - Any error returned from apr_socket_recv() that is not EAGAIN or EOF
- ** is now treated as fatal.
- ** Contributed by Aaron Bannert, April 24, 2002
- **
- ** Version 2.0.36-2
- ** Internalized the version string - this string is part
- ** of the Agent: header and the result output.
- **
- ** Version 2.0.37-dev
- ** Adopted SSL code by Madhu Mathihalli <madhusudan_mathihalli@hp.com>
- ** [PATCH] ab with SSL support Posted Wed, 15 Aug 2001 20:55:06 GMT
- ** Introduces four 'if (int == value)' tests per non-ssl request.
- **
- ** Version 2.0.40-dev
- ** Switched to the new abstract pollset API, allowing ab to
- ** take advantage of future apr_pollset_t scalability improvements.
- ** Contributed by Brian Pane, August 31, 2002
- **/
-
-/* Note: this version string should start with \d+[\d\.]* and be a valid
- * string for an HTTP Agent: header when prefixed with 'ApacheBench/'.
- * It should reflect the version of AB - and not that of the apache server
- * it happens to accompany. And it should be updated or changed whenever
- * the results are no longer fundamentally comparable to the results of
- * a previous version of ab. Either due to a change in the logic of
- * ab - or to due to a change in the distribution it is compiled with
- * (such as an APR change in for example blocking).
- */
-#define AP_AB_BASEREVISION "2.0.40-dev"
-
-/*
- * BUGS:
- *
- * - uses strcpy/etc.
- * - has various other poor buffer attacks related to the lazy parsing of
- * response headers from the server
- * - doesn't implement much of HTTP/1.x, only accepts certain forms of
- * responses
- * - (performance problem) heavy use of strstr shows up top in profile
- * only an issue for loopback usage
- */
-
-/* -------------------------------------------------------------------- */
-
-#if 'A' != 0x41
-/* Hmmm... This source code isn't being compiled in ASCII.
- * In order for data that flows over the network to make
- * sense, we need to translate to/from ASCII.
- */
-#define NOT_ASCII
-#endif
-
-/* affects include files on Solaris */
-#define BSD_COMP
-
-#include "apr.h"
-#include "apr_signal.h"
-#include "apr_strings.h"
-#include "apr_network_io.h"
-#include "apr_file_io.h"
-#include "apr_time.h"
-#include "apr_getopt.h"
-#include "apr_general.h"
-#include "apr_lib.h"
-#include "apr_portable.h"
-#include "ap_release.h"
-#include "apr_poll.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "apr_base64.h"
-#ifdef NOT_ASCII
-#include "apr_xlate.h"
-#endif
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h> /* for getpid() */
-#endif
-
-#if !defined(WIN32) && !defined(NETWARE)
-#include "ap_config_auto.h"
-#endif
-
-#if defined(HAVE_SSLC)
-
-/* Libraries for RSA SSL-C */
-#include <rsa.h>
-#include <x509.h>
-#include <pem.h>
-#include <err.h>
-#include <ssl.h>
-#include <r_rand.h>
-#include <sslc.h>
-#define USE_SSL
-#define RSAREF
-
-#elif defined(HAVE_OPENSSL)
-
-/* Libraries on most systems.. */
-#include <openssl/rsa.h>
-#include <openssl/crypto.h>
-#include <openssl/x509.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/ssl.h>
-#include <openssl/rand.h>
-#define USE_SSL
-
-#endif
-
-#include <math.h>
-#if APR_HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-/* ------------------- DEFINITIONS -------------------------- */
-
-#ifndef LLONG_MAX
-#define AB_MAX APR_INT64_C(0x7fffffffffffffff)
-#else
-#define AB_MAX LLONG_MAX
-#endif
-
-/* maximum number of requests on a time limited test */
-#define MAX_REQUESTS 50000
-
-/* good old state hostname */
-#define STATE_UNCONNECTED 0
-#define STATE_CONNECTING 1 /* TCP connect initiated, but we don't
- * know if it worked yet
- */
-#define STATE_CONNECTED 2 /* we know TCP connect completed */
-#define STATE_READ 3
-
-#define CBUFFSIZE (2048)
-
-struct connection {
- apr_pool_t *ctx;
- apr_socket_t *aprsock;
- int state;
- apr_size_t read; /* amount of bytes read */
- apr_size_t bread; /* amount of body read */
- apr_size_t rwrite, rwrote; /* keep pointers in what we write - across
- * EAGAINs */
- apr_size_t length; /* Content-Length value used for keep-alive */
- char cbuff[CBUFFSIZE]; /* a buffer to store server response header */
- int cbx; /* offset in cbuffer */
- int keepalive; /* non-zero if a keep-alive request */
- int gotheader; /* non-zero if we have the entire header in
- * cbuff */
- apr_time_t start, /* Start of connection */
- connect, /* Connected, start writing */
- endwrite, /* Request written */
- beginread, /* First byte of input */
- done; /* Connection closed */
-
- int socknum;
-#ifdef USE_SSL
- SSL *ssl;
-#endif
-};
-
-struct data {
-#ifdef USE_SSL
- /* XXXX insert SSL timings */
-#endif
- int read; /* number of bytes read */
- apr_time_t starttime; /* start time of connection in seconds since
- * Jan. 1, 1970 */
- apr_interval_time_t waittime; /* Between writing request and reading
- * response */
- apr_interval_time_t ctime; /* time in ms to connect */
- apr_interval_time_t time; /* time in ms for connection */
-};
-
-#define ap_min(a,b) ((a)<(b))?(a):(b)
-#define ap_max(a,b) ((a)>(b))?(a):(b)
-#define MAX_CONCURRENCY 20000
-
-/* --------------------- GLOBALS ---------------------------- */
-
-int verbosity = 0; /* no verbosity by default */
-int posting = 0; /* GET by default */
-int requests = 1; /* Number of requests to make */
-int heartbeatres = 100; /* How often do we say we're alive */
-int concurrency = 1; /* Number of multiple requests to make */
-int percentile = 1; /* Show percentile served */
-int confidence = 1; /* Show confidence estimator and warnings */
-int tlimit = 0; /* time limit in secs */
-int keepalive = 0; /* try and do keepalive connections */
-char servername[1024]; /* name that server reports */
-char *hostname; /* host name from URL */
-char *host_field; /* value of "Host:" header field */
-char *path; /* path name */
-char postfile[1024]; /* name of file containing post data */
-char *postdata; /* *buffer containing data from postfile */
-apr_size_t postlen = 0; /* length of data to be POSTed */
-char content_type[1024];/* content type to put in POST header */
-char *cookie, /* optional cookie line */
- *auth, /* optional (basic/uuencoded) auhentication */
- *hdrs; /* optional arbitrary headers */
-apr_port_t port; /* port number */
-char proxyhost[1024]; /* proxy host name */
-int proxyport = 0; /* proxy port */
-char *connecthost;
-apr_port_t connectport;
-char *gnuplot; /* GNUplot file */
-char *csvperc; /* CSV Percentile file */
-char url[1024];
-char * fullurl, * colonhost;
-int isproxy = 0;
-apr_interval_time_t aprtimeout = apr_time_from_sec(30); /* timeout value */
- /*
- * XXX - this is now a per read/write transact type of value
- */
-
-int use_html = 0; /* use html in the report */
-const char *tablestring;
-const char *trstring;
-const char *tdstring;
-
-apr_size_t doclen = 0; /* the length the document should be */
-long started = 0; /* number of requests started, so no excess */
-long totalread = 0; /* total number of bytes read */
-long totalbread = 0; /* totoal amount of entity body read */
-long totalposted = 0; /* total number of bytes posted, inc. headers */
-long done = 0; /* number of requests we have done */
-long doneka = 0; /* number of keep alive connections done */
-long good = 0, bad = 0; /* number of good and bad requests */
-long epipe = 0; /* number of broken pipe writes */
-
-#ifdef USE_SSL
-int ssl = 0;
-SSL_CTX *ctx;
-BIO *bio_out,*bio_err;
-static void write_request(struct connection * c);
-#endif
-
-/* store error cases */
-int err_length = 0, err_conn = 0, err_except = 0;
-int err_response = 0;
-
-apr_time_t start, endtime;
-
-/* global request (and its length) */
-char _request[2048];
-char *request = _request;
-apr_size_t reqlen;
-
-/* one global throw-away buffer to read stuff into */
-char buffer[8192];
-
-/* interesting percentiles */
-int percs[] = {50, 66, 75, 80, 90, 95, 98, 99, 100};
-
-struct connection *con; /* connection array */
-struct data *stats; /* date for each request */
-apr_pool_t *cntxt;
-
-apr_pollset_t *readbits;
-
-apr_sockaddr_t *destsa;
-
-#ifdef NOT_ASCII
-apr_xlate_t *from_ascii, *to_ascii;
-#endif
-
-static void close_connection(struct connection * c);
-/* --------------------------------------------------------- */
-
-/* simple little function to write an error string and exit */
-
-static void err(char *s)
-{
- fprintf(stderr, "%s\n", s);
- if (done)
- printf("Total of %ld requests completed\n" , done);
- exit(1);
-}
-
-/* simple little function to write an APR error string and exit */
-
-static void apr_err(char *s, apr_status_t rv)
-{
- char buf[120];
-
- fprintf(stderr,
- "%s: %s (%d)\n",
- s, apr_strerror(rv, buf, sizeof buf), rv);
- if (done)
- printf("Total of %ld requests completed\n" , done);
- exit(rv);
-}
-
-#if defined(USE_SSL) && USE_THREADS
-/*
- * To ensure thread-safetyness in OpenSSL - work in progress
- */
-
-static apr_thread_mutex_t **lock_cs;
-static int lock_num_locks;
-
-static void ssl_util_thr_lock(int mode, int type,
- const char *file, int line)
-{
- if (type < lock_num_locks) {
- if (mode & CRYPTO_LOCK) {
- apr_thread_mutex_lock(lock_cs[type]);
- }
- else {
- apr_thread_mutex_unlock(lock_cs[type]);
- }
- }
-}
-
-static unsigned long ssl_util_thr_id(void)
-{
- /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread
- * id is a structure twice that big. Use the TCB pointer instead as a
- * unique unsigned long.
- */
-#ifdef __MVS__
- struct PSA {
- char unmapped[540];
- unsigned long PSATOLD;
- } *psaptr = 0;
-
- return psaptr->PSATOLD;
-#else
- return (unsigned long) apr_os_thread_current();
-#endif
-}
-
-static apr_status_t ssl_util_thread_cleanup(void *data)
-{
- CRYPTO_set_locking_callback(NULL);
-
- /* Let the registered mutex cleanups do their own thing
- */
- return APR_SUCCESS;
-}
-
-void ssl_util_thread_setup(apr_pool_t *p)
-{
- int i;
-
- lock_num_locks = CRYPTO_num_locks();
- lock_cs = apr_palloc(p, lock_num_locks * sizeof(*lock_cs));
-
- for (i = 0; i < lock_num_locks; i++) {
- apr_thread_mutex_create(&(lock_cs[i]), APR_THREAD_MUTEX_DEFAULT, p);
- }
-
- CRYPTO_set_id_callback(ssl_util_thr_id);
-
- CRYPTO_set_locking_callback(ssl_util_thr_lock);
-
- apr_pool_cleanup_register(p, NULL, ssl_util_thread_cleanup,
- apr_pool_cleanup_null);
-}
-#endif
-
-/* --------------------------------------------------------- */
-/* write out request to a connection - assumes we can write
- * (small) request out in one go into our new socket buffer
- *
- */
-#ifdef USE_SSL
-static long ssl_print_cb(BIO *bio,int cmd,const char *argp,int argi,long argl,long ret)
-{
- BIO *out;
-
- out=(BIO *)BIO_get_callback_arg(bio);
- if (out == NULL) return(ret);
-
- if (cmd == (BIO_CB_READ|BIO_CB_RETURN))
- {
- BIO_printf(out,"read from %08X [%08lX] (%d bytes => %ld (0x%X))\n",
- bio,argp,argi,ret,ret);
- BIO_dump(out,(char *)argp,(int)ret);
- return(ret);
- }
- else if (cmd == (BIO_CB_WRITE|BIO_CB_RETURN))
- {
- BIO_printf(out,"write to %08X [%08lX] (%d bytes => %ld (0x%X))\n",
- bio,argp,argi,ret,ret);
- BIO_dump(out,(char *)argp,(int)ret);
- }
- return(ret);
-}
-
-#ifndef RAND_MAX
-#include <limits.h>
-#define RAND_MAX INT_MAX
-#endif
-
-static int ssl_rand_choosenum(int l, int h)
-{
- int i;
- char buf[50];
-
- srand((unsigned int)time(NULL));
- apr_snprintf(buf, sizeof(buf), "%.0f",
- (((double)(rand()%RAND_MAX)/RAND_MAX)*(h-l)));
- i = atoi(buf)+1;
- if (i < l) i = l;
- if (i > h) i = h;
- return i;
-}
-
-static void ssl_rand_seed(void)
-{
- int nDone = 0;
- int n, l;
- time_t t;
- pid_t pid;
- unsigned char stackdata[256];
-
- /*
- * seed in the current time (usually just 4 bytes)
- */
- t = time(NULL);
- l = sizeof(time_t);
- RAND_seed((unsigned char *)&t, l);
- nDone += l;
-
- /*
- * seed in the current process id (usually just 4 bytes)
- */
- pid = getpid();
- l = sizeof(pid_t);
- RAND_seed((unsigned char *)&pid, l);
- nDone += l;
-
- /*
- * seed in some current state of the run-time stack (128 bytes)
- */
- n = ssl_rand_choosenum(0, sizeof(stackdata)-128-1);
- RAND_seed(stackdata+n, 128);
- nDone += 128;
-}
-
-static int ssl_print_connection_info(BIO *bio, SSL *ssl)
-{
- SSL_CIPHER *c;
- int alg_bits,bits;
-
- c=SSL_get_current_cipher(ssl);
- BIO_printf(bio,"Cipher Suite Protocol :%s\n", SSL_CIPHER_get_version(c));
- BIO_printf(bio,"Cipher Suite Name :%s\n",SSL_CIPHER_get_name(c));
-
- bits=SSL_CIPHER_get_bits(c,&alg_bits);
- BIO_printf(bio,"Cipher Suite Cipher Bits:%d (%d)\n",bits,alg_bits);
-
- return(1);
-}
-
-static int ssl_print_cert_info(BIO *bio, X509 *x509cert)
-{
- X509_NAME *dn;
- char buf[64];
-
- BIO_printf(bio,"Certificate version: %d\n",X509_get_version(x509cert)+1);
-
- BIO_printf(bio,"Valid from: ");
- ASN1_UTCTIME_print(bio, X509_get_notBefore(x509cert));
- BIO_printf(bio,"\n");
-
- BIO_printf(bio,"Valid to : ");
- ASN1_UTCTIME_print(bio, X509_get_notAfter(x509cert));
- BIO_printf(bio,"\n");
-
- BIO_printf(bio,"Public key is %d bits\n",
- EVP_PKEY_bits(X509_get_pubkey(x509cert)));
-
- dn=X509_get_issuer_name(x509cert);
- X509_NAME_oneline(dn, buf, BUFSIZ);
- BIO_printf(bio,"The issuer name is %s\n", buf);
-
- dn=X509_get_subject_name(x509cert);
- X509_NAME_oneline(dn, buf, BUFSIZ);
- BIO_printf(bio,"The subject name is %s\n", buf);
-
- /* dump the extension list too */
- BIO_printf(bio,"Extension Count: %d\n",X509_get_ext_count(x509cert));
-
- return(1);
-}
-
-static void ssl_start_connect(struct connection * c)
-{
- BIO *bio;
- X509 *x509cert;
-#ifdef RSAREF
- STACK *sk;
-#else
- STACK_OF(X509) *sk;
-#endif
- int i, count, hdone = 0;
- char ssl_hostname[80];
-
- /* XXX - Verify if it's okay - TBD */
- if (requests < concurrency)
- requests = concurrency;
-
- if (!(started < requests))
- return;
-
- c->read = 0;
- c->bread = 0;
- c->keepalive = 0;
- c->cbx = 0;
- c->gotheader = 0;
- c->rwrite = 0;
- if (c->ctx)
- apr_pool_destroy(c->ctx);
- apr_pool_create(&c->ctx, cntxt);
-
- if ((c->ssl=SSL_new(ctx)) == NULL)
- {
- BIO_printf(bio_err,"SSL_new failed\n");
- exit(1);
- }
-
- ssl_rand_seed();
-
- c->start = apr_time_now();
- memset(ssl_hostname, 0, 80);
- sprintf(ssl_hostname, "%s:%d", hostname, port);
-
- if ((bio = BIO_new_connect(ssl_hostname)) == NULL)
- {
- BIO_printf(bio_err,"BIO_new_connect failed\n");
- exit(1);
- }
- SSL_set_bio(c->ssl,bio,bio);
- SSL_set_connect_state(c->ssl);
-
- if (verbosity >= 4)
- {
- BIO_set_callback(bio,ssl_print_cb);
- BIO_set_callback_arg(bio,(void*)bio_err);
- }
-
- while (!hdone)
- {
- i = SSL_do_handshake(c->ssl);
-
- switch (SSL_get_error(c->ssl,i))
- {
- case SSL_ERROR_NONE:
- hdone=1;
- break;
- case SSL_ERROR_SSL:
- case SSL_ERROR_SYSCALL:
- BIO_printf(bio_err,"SSL connection failed\n");
- err_conn++;
- c->state = STATE_UNCONNECTED;
- if (bad++ > 10) {
- SSL_free (c->ssl);
- BIO_printf(bio_err,"\nTest aborted after 10 failures\n\n");
- exit (1);
- }
- break;
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- case SSL_ERROR_WANT_CONNECT:
- BIO_printf(bio_err, "Waiting .. sleep(1)\n");
- apr_sleep(apr_time_from_sec(1));
- c->state = STATE_CONNECTED;
- c->rwrite = 0;
- break;
- case SSL_ERROR_ZERO_RETURN:
- BIO_printf(bio_err,"socket closed\n");
- break;
- }
- }
-
- if (verbosity >= 2)
- {
- BIO_printf(bio_err, "\n");
- sk = SSL_get_peer_cert_chain(c->ssl);
-#ifdef RSAREF
- if ((count = sk_num(sk)) > 0)
-#else
- if ((count = sk_X509_num(sk)) > 0)
-#endif
- {
- for (i=1; i<count; i++)
- {
-#ifdef RSAREF
- x509cert = (X509 *)sk_value(sk,i);
-#else
- x509cert = (X509 *)sk_X509_value(sk,i);
-#endif
- ssl_print_cert_info(bio_out,x509cert);
- X509_free(x509cert);
- }
- }
-
- x509cert = SSL_get_peer_certificate(c->ssl);
- if (x509cert == NULL)
- BIO_printf(bio_out, "Anon DH\n");
- else
- {
- BIO_printf(bio_out, "Peer certificate\n");
- ssl_print_cert_info(bio_out,x509cert);
- X509_free(x509cert);
- }
-
- ssl_print_connection_info(bio_err,c->ssl);
- SSL_SESSION_print(bio_err,SSL_get_session(c->ssl));
- }
-
- /* connected first time */
- started++;
- write_request(c);
-}
-#endif /* USE_SSL */
-
-static void write_request(struct connection * c)
-{
- do {
- apr_time_t tnow = apr_time_now();
- apr_size_t l = c->rwrite;
- apr_status_t e = APR_SUCCESS; /* prevent gcc warning */
-
- /*
- * First time round ?
- */
- if (c->rwrite == 0) {
-#ifdef USE_SSL
- if (ssl != 1)
-#endif
- apr_socket_timeout_set(c->aprsock, 0);
- c->connect = tnow;
- c->rwrite = reqlen;
- c->rwrote = 0;
- if (posting)
- c->rwrite += postlen;
- }
- else if (tnow > c->connect + aprtimeout) {
- printf("Send request timed out!\n");
- close_connection(c);
- return;
- }
-
-#ifdef USE_SSL
- if (ssl == 1) {
- apr_size_t e_ssl;
- e_ssl = SSL_write(c->ssl,request + c->rwrote, l);
- if (e_ssl != l)
- {
- printf("SSL write failed - closing connection\n");
- close_connection (c);
- return;
- }
- l = e_ssl;
- }
- else
-#endif
- e = apr_socket_send(c->aprsock, request + c->rwrote, &l);
-
- /*
- * Bail early on the most common case
- */
- if (l == c->rwrite)
- break;
-
-#ifdef USE_SSL
- if (ssl != 1)
-#endif
- if (e != APR_SUCCESS) {
- /*
- * Let's hope this traps EWOULDBLOCK too !
- */
- if (!APR_STATUS_IS_EAGAIN(e)) {
- epipe++;
- printf("Send request failed!\n");
- close_connection(c);
- }
- return;
- }
- c->rwrote += l;
- c->rwrite -= l;
- } while (1);
-
- totalposted += c->rwrite;
- c->state = STATE_READ;
- c->endwrite = apr_time_now();
-#ifdef USE_SSL
- if (ssl != 1)
-#endif
- {
- apr_pollfd_t new_pollfd;
- new_pollfd.desc_type = APR_POLL_SOCKET;
- new_pollfd.reqevents = APR_POLLIN;
- new_pollfd.desc.s = c->aprsock;
- new_pollfd.client_data = c;
- apr_pollset_add(readbits, &new_pollfd);
- }
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results */
-
-static int compradre(struct data * a, struct data * b)
-{
- if ((a->ctime) < (b->ctime))
- return -1;
- if ((a->ctime) > (b->ctime))
- return +1;
- return 0;
-}
-
-static int comprando(struct data * a, struct data * b)
-{
- if ((a->time) < (b->time))
- return -1;
- if ((a->time) > (b->time))
- return +1;
- return 0;
-}
-
-static int compri(struct data * a, struct data * b)
-{
- apr_interval_time_t p = a->time - a->ctime;
- apr_interval_time_t q = b->time - b->ctime;
- if (p < q)
- return -1;
- if (p > q)
- return +1;
- return 0;
-}
-
-static int compwait(struct data * a, struct data * b)
-{
- if ((a->waittime) < (b->waittime))
- return -1;
- if ((a->waittime) > (b->waittime))
- return 1;
- return 0;
-}
-
-static void output_results(void)
-{
- apr_interval_time_t timetakenusec;
- float timetaken;
-
- endtime = apr_time_now();
- timetakenusec = endtime - start;
- timetaken = ((float)apr_time_sec(timetakenusec)) +
- ((float)apr_time_usec(timetakenusec)) / 1000000.0F;
-
- printf("\n\n");
- printf("Server Software: %s\n", servername);
- printf("Server Hostname: %s\n", hostname);
- printf("Server Port: %hd\n", port);
- printf("\n");
- printf("Document Path: %s\n", path);
- printf("Document Length: %" APR_SIZE_T_FMT " bytes\n", doclen);
- printf("\n");
- printf("Concurrency Level: %d\n", concurrency);
- printf("Time taken for tests: %ld.%03ld seconds\n",
- (long) apr_time_sec(timetakenusec),
- (long) apr_time_usec(timetakenusec));
- printf("Complete requests: %ld\n", done);
- printf("Failed requests: %ld\n", bad);
- if (bad)
- printf(" (Connect: %d, Length: %d, Exceptions: %d)\n",
- err_conn, err_length, err_except);
- printf("Write errors: %ld\n", epipe);
- if (err_response)
- printf("Non-2xx responses: %d\n", err_response);
- if (keepalive)
- printf("Keep-Alive requests: %ld\n", doneka);
- printf("Total transferred: %ld bytes\n", totalread);
- if (posting > 0)
- printf("Total POSTed: %ld\n", totalposted);
- printf("HTML transferred: %ld bytes\n", totalbread);
-
- /* avoid divide by zero */
- if (timetaken) {
- printf("Requests per second: %.2f [#/sec] (mean)\n",
- (float) (done / timetaken));
- printf("Time per request: %.3f [ms] (mean)\n",
- (float) (1000 * concurrency * timetaken / done));
- printf("Time per request: %.3f [ms] (mean, across all concurrent requests)\n",
- (float) (1000 * timetaken / done));
- printf("Transfer rate: %.2f [Kbytes/sec] received\n",
- (float) (totalread / 1024 / timetaken));
- if (posting > 0) {
- printf(" %.2f kb/s sent\n",
- (float) (totalposted / timetaken / 1024));
- printf(" %.2f kb/s total\n",
- (float) ((totalread + totalposted) / timetaken / 1024));
- }
- }
-
- if (requests) {
- /* work out connection times */
- long i;
- apr_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0;
- apr_time_t meancon, meantot, meand, meanwait;
- apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX, mind = AB_MAX,
- minwait = AB_MAX;
- apr_interval_time_t maxcon = 0, maxtot = 0, maxd = 0, maxwait = 0;
- apr_interval_time_t mediancon = 0, mediantot = 0, mediand = 0, medianwait = 0;
- double sdtot = 0, sdcon = 0, sdd = 0, sdwait = 0;
-
- for (i = 0; i < requests; i++) {
- struct data s = stats[i];
- mincon = ap_min(mincon, s.ctime);
- mintot = ap_min(mintot, s.time);
- mind = ap_min(mind, s.time - s.ctime);
- minwait = ap_min(minwait, s.waittime);
-
- maxcon = ap_max(maxcon, s.ctime);
- maxtot = ap_max(maxtot, s.time);
- maxd = ap_max(maxd, s.time - s.ctime);
- maxwait = ap_max(maxwait, s.waittime);
-
- totalcon += s.ctime;
- total += s.time;
- totald += s.time - s.ctime;
- totalwait += s.waittime;
- }
- meancon = totalcon / requests;
- meantot = total / requests;
- meand = totald / requests;
- meanwait = totalwait / requests;
-
- /* calculating the sample variance: the sum of the squared deviations, divided by n-1 */
- for (i = 0; i < requests; i++) {
- struct data s = stats[i];
- double a;
- a = ((double)s.time - meantot);
- sdtot += a * a;
- a = ((double)s.ctime - meancon);
- sdcon += a * a;
- a = ((double)s.time - (double)s.ctime - meand);
- sdd += a * a;
- a = ((double)s.waittime - meanwait);
- sdwait += a * a;
- }
-
- sdtot = (requests > 1) ? sqrt(sdtot / (requests - 1)) : 0;
- sdcon = (requests > 1) ? sqrt(sdcon / (requests - 1)) : 0;
- sdd = (requests > 1) ? sqrt(sdd / (requests - 1)) : 0;
- sdwait = (requests > 1) ? sqrt(sdwait / (requests - 1)) : 0;
-
- if (gnuplot) {
- FILE *out = fopen(gnuplot, "w");
- long i;
- apr_time_t sttime;
- char tmstring[1024];/* XXXX */
- if (!out) {
- perror("Cannot open gnuplot output file");
- exit(1);
- }
- fprintf(out, "starttime\tseconds\tctime\tdtime\tttime\twait\n");
- for (i = 0; i < requests; i++) {
- apr_time_t diff = stats[i].time - stats[i].ctime;
-
- sttime = stats[i].starttime;
- (void) apr_ctime(tmstring, sttime);
- fprintf(out, "%s\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\n",
- tmstring,
- sttime,
- stats[i].ctime,
- diff,
- stats[i].time,
- stats[i].waittime);
- }
- fclose(out);
- }
- /*
- * XXX: what is better; this hideous cast of the compradre function; or
- * the four warnings during compile ? dirkx just does not know and
- * hates both/
- */
- qsort(stats, requests, sizeof(struct data),
- (int (*) (const void *, const void *)) compradre);
- if ((requests > 1) && (requests % 2))
- mediancon = (stats[requests / 2].ctime + stats[requests / 2 + 1].ctime) / 2;
- else
- mediancon = stats[requests / 2].ctime;
-
- qsort(stats, requests, sizeof(struct data),
- (int (*) (const void *, const void *)) compri);
- if ((requests > 1) && (requests % 2))
- mediand = (stats[requests / 2].time + stats[requests / 2 + 1].time \
- -stats[requests / 2].ctime - stats[requests / 2 + 1].ctime) / 2;
- else
- mediand = stats[requests / 2].time - stats[requests / 2].ctime;
-
- qsort(stats, requests, sizeof(struct data),
- (int (*) (const void *, const void *)) compwait);
- if ((requests > 1) && (requests % 2))
- medianwait = (stats[requests / 2].waittime + stats[requests / 2 + 1].waittime) / 2;
- else
- medianwait = stats[requests / 2].waittime;
-
- qsort(stats, requests, sizeof(struct data),
- (int (*) (const void *, const void *)) comprando);
- if ((requests > 1) && (requests % 2))
- mediantot = (stats[requests / 2].time + stats[requests / 2 + 1].time) / 2;
- else
- mediantot = stats[requests / 2].time;
-
- printf("\nConnection Times (ms)\n");
-
- if (confidence) {
-#define CONF_FMT_STRING "%5" APR_TIME_T_FMT " %4d %5.1f %6" APR_TIME_T_FMT " %7" APR_TIME_T_FMT "\n"
- printf(" min mean[+/-sd] median max\n");
- printf("Connect: " CONF_FMT_STRING,
- mincon, (int) (meancon + 0.5), sdcon, mediancon, maxcon);
- printf("Processing: " CONF_FMT_STRING,
- mind, (int) (meand + 0.5), sdd, mediand, maxd);
- printf("Waiting: " CONF_FMT_STRING,
- minwait, (int) (meanwait + 0.5), sdwait, medianwait, maxwait);
- printf("Total: " CONF_FMT_STRING,
- mintot, (int) (meantot + 0.5), sdtot, mediantot, maxtot);
-#undef CONF_FMT_STRING
-
-#define SANE(what,mean,median,sd) \
- { \
- double d = (double)mean - median; \
- if (d < 0) d = -d; \
- if (d > 2 * sd ) \
- printf("ERROR: The median and mean for " what " are more than twice the standard\n" \
- " deviation apart. These results are NOT reliable.\n"); \
- else if (d > sd ) \
- printf("WARNING: The median and mean for " what " are not within a normal deviation\n" \
- " These results are probably not that reliable.\n"); \
- }
- SANE("the initial connection time", meancon, mediancon, sdcon);
- SANE("the processing time", meand, mediand, sdd);
- SANE("the waiting time", meanwait, medianwait, sdwait);
- SANE("the total time", meantot, mediantot, sdtot);
- }
- else {
- printf(" min avg max\n");
-#define CONF_FMT_STRING "%5" APR_TIME_T_FMT " %5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "\n"
- printf("Connect: " CONF_FMT_STRING,
- mincon, meancon, maxcon);
- printf("Processing: " CONF_FMT_STRING,
- mintot - mincon, meantot - meancon, maxtot - maxcon);
- printf("Total: " CONF_FMT_STRING,
- mintot, meantot, maxtot);
-#undef CONF_FMT_STRING
- }
-
-
- /* Sorted on total connect times */
- if (percentile && (requests > 1)) {
- printf("\nPercentage of the requests served within a certain time (ms)\n");
- for (i = 0; i < sizeof(percs) / sizeof(int); i++) {
- if (percs[i] <= 0)
- printf(" 0%% <0> (never)\n");
- else if (percs[i] >= 100)
- printf(" 100%% %5" APR_TIME_T_FMT " (longest request)\n",
- stats[requests - 1].time);
- else
- printf(" %d%% %5" APR_TIME_T_FMT "\n", percs[i],
- stats[(int) (requests * percs[i] / 100)].time);
- }
- }
- if (csvperc) {
- FILE *out = fopen(csvperc, "w");
- int i;
- if (!out) {
- perror("Cannot open CSV output file");
- exit(1);
- }
- fprintf(out, "" "Percentage served" "," "Time in ms" "\n");
- for (i = 0; i < 100; i++) {
- apr_time_t t;
- if (i == 0)
- t = stats[0].time;
- else if (i == 100)
- t = stats[requests - 1].time;
- else
- t = stats[(int) (0.5 + requests * i / 100.0)].time;
- fprintf(out, "%d,%e\n", i, (double)t);
- }
- fclose(out);
- }
-
- }
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results in HTML */
-
-static void output_html_results(void)
-{
- long timetaken;
-
- endtime = apr_time_now();
- timetaken = (long)((endtime - start) / 1000);
-
- printf("\n\n<table %s>\n", tablestring);
- printf("<tr %s><th colspan=2 %s>Server Software:</th>"
- "<td colspan=2 %s>%s</td></tr>\n",
- trstring, tdstring, tdstring, servername);
- printf("<tr %s><th colspan=2 %s>Server Hostname:</th>"
- "<td colspan=2 %s>%s</td></tr>\n",
- trstring, tdstring, tdstring, hostname);
- printf("<tr %s><th colspan=2 %s>Server Port:</th>"
- "<td colspan=2 %s>%hd</td></tr>\n",
- trstring, tdstring, tdstring, port);
- printf("<tr %s><th colspan=2 %s>Document Path:</th>"
- "<td colspan=2 %s>%s</td></tr>\n",
- trstring, tdstring, tdstring, path);
- printf("<tr %s><th colspan=2 %s>Document Length:</th>"
- "<td colspan=2 %s>%" APR_SIZE_T_FMT " bytes</td></tr>\n",
- trstring, tdstring, tdstring, doclen);
- printf("<tr %s><th colspan=2 %s>Concurrency Level:</th>"
- "<td colspan=2 %s>%d</td></tr>\n",
- trstring, tdstring, tdstring, concurrency);
- printf("<tr %s><th colspan=2 %s>Time taken for tests:</th>"
- "<td colspan=2 %s>%" APR_INT64_T_FMT ".%03ld seconds</td></tr>\n",
- trstring, tdstring, tdstring, apr_time_sec(timetaken),
- (long)apr_time_usec(timetaken));
- printf("<tr %s><th colspan=2 %s>Complete requests:</th>"
- "<td colspan=2 %s>%ld</td></tr>\n",
- trstring, tdstring, tdstring, done);
- printf("<tr %s><th colspan=2 %s>Failed requests:</th>"
- "<td colspan=2 %s>%ld</td></tr>\n",
- trstring, tdstring, tdstring, bad);
- if (bad)
- printf("<tr %s><td colspan=4 %s > (Connect: %d, Length: %d, Exceptions: %d)</td></tr>\n",
- trstring, tdstring, err_conn, err_length, err_except);
- if (err_response)
- printf("<tr %s><th colspan=2 %s>Non-2xx responses:</th>"
- "<td colspan=2 %s>%d</td></tr>\n",
- trstring, tdstring, tdstring, err_response);
- if (keepalive)
- printf("<tr %s><th colspan=2 %s>Keep-Alive requests:</th>"
- "<td colspan=2 %s>%ld</td></tr>\n",
- trstring, tdstring, tdstring, doneka);
- printf("<tr %s><th colspan=2 %s>Total transferred:</th>"
- "<td colspan=2 %s>%ld bytes</td></tr>\n",
- trstring, tdstring, tdstring, totalread);
- if (posting > 0)
- printf("<tr %s><th colspan=2 %s>Total POSTed:</th>"
- "<td colspan=2 %s>%ld</td></tr>\n",
- trstring, tdstring, tdstring, totalposted);
- printf("<tr %s><th colspan=2 %s>HTML transferred:</th>"
- "<td colspan=2 %s>%ld bytes</td></tr>\n",
- trstring, tdstring, tdstring, totalbread);
-
- /* avoid divide by zero */
- if (timetaken) {
- printf("<tr %s><th colspan=2 %s>Requests per second:</th>"
- "<td colspan=2 %s>%.2f</td></tr>\n",
- trstring, tdstring, tdstring, 1000 * (float) (done) / timetaken);
- printf("<tr %s><th colspan=2 %s>Transfer rate:</th>"
- "<td colspan=2 %s>%.2f kb/s received</td></tr>\n",
- trstring, tdstring, tdstring, (float) (totalread) / timetaken);
- if (posting > 0) {
- printf("<tr %s><td colspan=2 %s>&nbsp;</td>"
- "<td colspan=2 %s>%.2f kb/s sent</td></tr>\n",
- trstring, tdstring, tdstring,
- (float) (totalposted) / timetaken);
- printf("<tr %s><td colspan=2 %s>&nbsp;</td>"
- "<td colspan=2 %s>%.2f kb/s total</td></tr>\n",
- trstring, tdstring, tdstring,
- (float) (totalread + totalposted) / timetaken);
- }
- }
- {
- /* work out connection times */
- long i;
- apr_interval_time_t totalcon = 0, total = 0;
- apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX;
- apr_interval_time_t maxcon = 0, maxtot = 0;
-
- for (i = 0; i < requests; i++) {
- struct data s = stats[i];
- mincon = ap_min(mincon, s.ctime);
- mintot = ap_min(mintot, s.time);
- maxcon = ap_max(maxcon, s.ctime);
- maxtot = ap_max(maxtot, s.time);
- totalcon += s.ctime;
- total += s.time;
- }
-
- if (requests > 0) { /* avoid division by zero (if 0 requests) */
- printf("<tr %s><th %s colspan=4>Connnection Times (ms)</th></tr>\n",
- trstring, tdstring);
- printf("<tr %s><th %s>&nbsp;</th> <th %s>min</th> <th %s>avg</th> <th %s>max</th></tr>\n",
- trstring, tdstring, tdstring, tdstring, tdstring);
- printf("<tr %s><th %s>Connect:</th>"
- "<td %s>%5" APR_TIME_T_FMT "</td>"
- "<td %s>%5" APR_TIME_T_FMT "</td>"
- "<td %s>%5" APR_TIME_T_FMT "</td></tr>\n",
- trstring, tdstring, tdstring, mincon, tdstring, totalcon / requests, tdstring, maxcon);
- printf("<tr %s><th %s>Processing:</th>"
- "<td %s>%5" APR_TIME_T_FMT "</td>"
- "<td %s>%5" APR_TIME_T_FMT "</td>"
- "<td %s>%5" APR_TIME_T_FMT "</td></tr>\n",
- trstring, tdstring, tdstring, mintot - mincon, tdstring,
- (total / requests) - (totalcon / requests), tdstring, maxtot - maxcon);
- printf("<tr %s><th %s>Total:</th>"
- "<td %s>%5" APR_TIME_T_FMT "</td>"
- "<td %s>%5" APR_TIME_T_FMT "</td>"
- "<td %s>%5" APR_TIME_T_FMT "</td></tr>\n",
- trstring, tdstring, tdstring, mintot, tdstring, total / requests, tdstring, maxtot);
- }
- printf("</table>\n");
- }
-}
-
-/* --------------------------------------------------------- */
-
-/* start asnchronous non-blocking connection */
-
-static void start_connect(struct connection * c)
-{
- apr_status_t rv;
-
-#ifdef USE_SSL
- if (ssl == 1) {
- ssl_start_connect(c);
- return;
- }
-#endif
-
- if (!(started < requests))
- return;
-
- c->read = 0;
- c->bread = 0;
- c->keepalive = 0;
- c->cbx = 0;
- c->gotheader = 0;
- c->rwrite = 0;
- if (c->ctx)
- apr_pool_destroy(c->ctx);
- apr_pool_create(&c->ctx, cntxt);
-
- if ((rv = apr_socket_create(&c->aprsock, destsa->family,
- SOCK_STREAM, 0, c->ctx)) != APR_SUCCESS) {
- apr_err("socket", rv);
- }
- if ((rv = apr_socket_opt_set(c->aprsock, APR_SO_NONBLOCK, 1))
- != APR_SUCCESS) {
- apr_err("socket nonblock", rv);
- }
- c->start = apr_time_now();
- if ((rv = apr_socket_connect(c->aprsock, destsa)) != APR_SUCCESS) {
- if (APR_STATUS_IS_EINPROGRESS(rv)) {
- apr_pollfd_t new_pollfd;
- c->state = STATE_CONNECTING;
- c->rwrite = 0;
- new_pollfd.desc_type = APR_POLL_SOCKET;
- new_pollfd.reqevents = APR_POLLOUT;
- new_pollfd.desc.s = c->aprsock;
- new_pollfd.client_data = c;
- apr_pollset_add(readbits, &new_pollfd);
- return;
- }
- else {
- apr_pollfd_t remove_pollfd;
- remove_pollfd.desc_type = APR_POLL_SOCKET;
- remove_pollfd.desc.s = c->aprsock;
- apr_pollset_remove(readbits, &remove_pollfd);
- apr_socket_close(c->aprsock);
- err_conn++;
- if (bad++ > 10) {
- fprintf(stderr,
- "\nTest aborted after 10 failures\n\n");
- apr_err("apr_socket_connect()", rv);
- }
- c->state = STATE_UNCONNECTED;
- start_connect(c);
- return;
- }
- }
-
- /* connected first time */
- c->state = STATE_CONNECTED;
- started++;
- write_request(c);
-}
-
-/* --------------------------------------------------------- */
-
-/* close down connection and save stats */
-
-static void close_connection(struct connection * c)
-{
- if (c->read == 0 && c->keepalive) {
- /*
- * server has legitimately shut down an idle keep alive request
- */
- if (good)
- good--; /* connection never happened */
- }
- else {
- if (good == 1) {
- /* first time here */
- doclen = c->bread;
- }
- else if (c->bread != doclen) {
- bad++;
- err_length++;
- }
- /* save out time */
- if (done < requests) {
- struct data s;
- if ((done) && heartbeatres && !(done % heartbeatres)) {
- fprintf(stderr, "Completed %ld requests\n", done);
- fflush(stderr);
- }
- c->done = apr_time_now();
- s.read = c->read;
- s.starttime = c->start;
- s.ctime = ap_max(0, (c->connect - c->start) / 1000);
- s.time = ap_max(0, (c->done - c->start) / 1000);
- s.waittime = ap_max(0, (c->beginread - c->endwrite) / 1000);
- stats[done++] = s;
- }
- }
-
-#ifdef USE_SSL
- if (ssl == 1) {
- SSL_shutdown(c->ssl);
- SSL_free(c->ssl);
- }
- else
-#endif
- {
- apr_pollfd_t remove_pollfd;
- remove_pollfd.desc_type = APR_POLL_SOCKET;
- remove_pollfd.desc.s = c->aprsock;
- apr_pollset_remove(readbits, &remove_pollfd);
- apr_socket_close(c->aprsock);
- }
- c->state = STATE_UNCONNECTED;
-
- /* connect again */
- start_connect(c);
- return;
-}
-
-/* --------------------------------------------------------- */
-
-/* read data from connection */
-
-static void read_connection(struct connection * c)
-{
- apr_size_t r;
- apr_status_t status;
- char *part;
- char respcode[4]; /* 3 digits and null */
-
- r = sizeof(buffer);
-#ifdef USE_SSL
- if (ssl == 1)
- {
- status = SSL_read (c->ssl, buffer, r);
- if (status <= 0) {
- good++; c->read = 0;
- if (status < 0) printf("SSL read failed - closing connection\n");
- close_connection(c);
- return;
- }
- r = status;
- }
- else {
-#endif
- status = apr_socket_recv(c->aprsock, buffer, &r);
- if (APR_STATUS_IS_EAGAIN(status))
- return;
- else if (r == 0 && APR_STATUS_IS_EOF(status)) {
- good++;
- close_connection(c);
- return;
- }
- /* catch legitimate fatal apr_socket_recv errors */
- else if (status != APR_SUCCESS) {
- err_except++; /* XXX: is this the right error counter? */
- /* XXX: Should errors here be fatal, or should we allow a
- * certain number of them before completely failing? -aaron */
- apr_err("apr_socket_recv", status);
- }
-#ifdef USE_SSL
- }
-#endif
-
- totalread += r;
- if (c->read == 0) {
- c->beginread = apr_time_now();
- }
- c->read += r;
-
-
- if (!c->gotheader) {
- char *s;
- int l = 4;
- apr_size_t space = CBUFFSIZE - c->cbx - 1; /* -1 allows for \0 term */
- int tocopy = (space < r) ? space : r;
-#ifdef NOT_ASCII
- apr_size_t inbytes_left = space, outbytes_left = space;
-
- status = apr_xlate_conv_buffer(from_ascii, buffer, &inbytes_left,
- c->cbuff + c->cbx, &outbytes_left);
- if (status || inbytes_left || outbytes_left) {
- fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n",
- status, inbytes_left, outbytes_left);
- exit(1);
- }
-#else
- memcpy(c->cbuff + c->cbx, buffer, space);
-#endif /* NOT_ASCII */
- c->cbx += tocopy;
- space -= tocopy;
- c->cbuff[c->cbx] = 0; /* terminate for benefit of strstr */
- if (verbosity >= 2) {
- printf("LOG: header received:\n%s\n", c->cbuff);
- }
- s = strstr(c->cbuff, "\r\n\r\n");
- /*
- * this next line is so that we talk to NCSA 1.5 which blatantly
- * breaks the http specifaction
- */
- if (!s) {
- s = strstr(c->cbuff, "\n\n");
- l = 2;
- }
-
- if (!s) {
- /* read rest next time */
- if (space) {
- return;
- }
- else {
- /* header is in invalid or too big - close connection */
- apr_pollfd_t remove_pollfd;
- remove_pollfd.desc_type = APR_POLL_SOCKET;
- remove_pollfd.desc.s = c->aprsock;
- apr_pollset_remove(readbits, &remove_pollfd);
- apr_socket_close(c->aprsock);
- err_response++;
- if (bad++ > 10) {
- err("\nTest aborted after 10 failures\n\n");
- }
- start_connect(c);
- }
- }
- else {
- /* have full header */
- if (!good) {
- /*
- * this is first time, extract some interesting info
- */
- char *p, *q;
- p = strstr(c->cbuff, "Server:");
- q = servername;
- if (p) {
- p += 8;
- while (*p > 32)
- *q++ = *p++;
- }
- *q = 0;
- }
- /*
- * XXX: this parsing isn't even remotely HTTP compliant... but in
- * the interest of speed it doesn't totally have to be, it just
- * needs to be extended to handle whatever servers folks want to
- * test against. -djg
- */
-
- /* check response code */
- part = strstr(c->cbuff, "HTTP"); /* really HTTP/1.x_ */
- if (part && strlen(part) > strlen("HTTP/1.x_")) {
- strncpy(respcode, (part + strlen("HTTP/1.x_")), 3);
- respcode[3] = '\0';
- }
- else {
- strcpy(respcode, "500");
- }
-
- if (respcode[0] != '2') {
- err_response++;
- if (verbosity >= 2)
- printf("WARNING: Response code not 2xx (%s)\n", respcode);
- }
- else if (verbosity >= 3) {
- printf("LOG: Response code = %s\n", respcode);
- }
- c->gotheader = 1;
- *s = 0; /* terminate at end of header */
- if (keepalive &&
- (strstr(c->cbuff, "Keep-Alive")
- || strstr(c->cbuff, "keep-alive"))) { /* for benefit of MSIIS */
- char *cl;
- cl = strstr(c->cbuff, "Content-Length:");
- /* handle NCSA, which sends Content-length: */
- if (!cl)
- cl = strstr(c->cbuff, "Content-length:");
- if (cl) {
- c->keepalive = 1;
- c->length = atoi(cl + 16);
- }
- }
- c->bread += c->cbx - (s + l - c->cbuff) + r - tocopy;
- totalbread += c->bread;
- }
- }
- else {
- /* outside header, everything we have read is entity body */
- c->bread += r;
- totalbread += r;
- }
-
- if (c->keepalive && (c->bread >= c->length)) {
- /* finished a keep-alive connection */
- good++;
- /* save out time */
- if (good == 1) {
- /* first time here */
- doclen = c->bread;
- }
- else if (c->bread != doclen) {
- bad++;
- err_length++;
- }
- if (done < requests) {
- struct data s;
- doneka++;
- if (done && heartbeatres && !(done % heartbeatres)) {
- fprintf(stderr, "Completed %ld requests\n", done);
- fflush(stderr);
- }
- c->done = apr_time_now();
- s.read = c->read;
- s.starttime = c->start;
- s.ctime = ap_max(0, (c->connect - c->start) / 1000);
- s.waittime = ap_max(0, (c->beginread - c->endwrite) / 1000);
- s.time = ap_max(0, (c->done - c->start) / 1000);
- stats[done++] = s;
- }
- c->keepalive = 0;
- c->length = 0;
- c->gotheader = 0;
- c->cbx = 0;
- c->read = c->bread = 0;
- c->start = c->connect = apr_time_now(); /* zero connect time with keep-alive */
- write_request(c);
- }
-}
-
-/* --------------------------------------------------------- */
-
-/* run the tests */
-
-static void test(void)
-{
- apr_time_t now;
- apr_int16_t rv;
- long i;
- apr_status_t status;
- int snprintf_res = 0;
-#ifdef NOT_ASCII
- apr_size_t inbytes_left, outbytes_left;
-#endif
-
- if (isproxy) {
- connecthost = apr_pstrdup(cntxt, proxyhost);
- connectport = proxyport;
- }
- else {
- connecthost = apr_pstrdup(cntxt, hostname);
- connectport = port;
- }
-
- if (!use_html) {
- printf("Benchmarking %s ", hostname);
- if (isproxy)
- printf("[through %s:%d] ", proxyhost, proxyport);
- printf("(be patient)%s",
- (heartbeatres ? "\n" : "..."));
- fflush(stdout);
- }
-
- now = apr_time_now();
-
- con = calloc(concurrency * sizeof(struct connection), 1);
-
- stats = calloc(requests * sizeof(struct data), 1);
-
- if ((status = apr_pollset_create(&readbits, concurrency, cntxt, 0)) != APR_SUCCESS) {
- apr_err("apr_pollset_create failed", status);
- }
-
- /* setup request */
- if (posting <= 0) {
- snprintf_res = apr_snprintf(request, sizeof(_request),
- "%s %s HTTP/1.0\r\n"
- "User-Agent: ApacheBench/%s\r\n"
- "%s" "%s" "%s"
- "Host: %s%s\r\n"
- "Accept: */*\r\n"
- "%s" "\r\n",
- (posting == 0) ? "GET" : "HEAD",
- (isproxy) ? fullurl : path,
- AP_AB_BASEREVISION,
- keepalive ? "Connection: Keep-Alive\r\n" : "",
- cookie, auth, host_field, colonhost, hdrs);
- }
- else {
- snprintf_res = apr_snprintf(request, sizeof(_request),
- "POST %s HTTP/1.0\r\n"
- "User-Agent: ApacheBench/%s\r\n"
- "%s" "%s" "%s"
- "Host: %s%s\r\n"
- "Accept: */*\r\n"
- "Content-length: %" APR_SIZE_T_FMT "\r\n"
- "Content-type: %s\r\n"
- "%s"
- "\r\n",
- (isproxy) ? fullurl : path,
- AP_AB_BASEREVISION,
- keepalive ? "Connection: Keep-Alive\r\n" : "",
- cookie, auth,
- host_field, colonhost, postlen,
- (content_type[0]) ? content_type : "text/plain", hdrs);
- }
- if (snprintf_res >= sizeof(_request)) {
- err("Request too long\n");
- }
-
- if (verbosity >= 2)
- printf("INFO: POST header == \n---\n%s\n---\n", request);
-
- reqlen = strlen(request);
-
- /*
- * Combine headers and (optional) post file into one contineous buffer
- */
- if (posting == 1) {
- char *buff = malloc(postlen + reqlen + 1);
- if (!buff) {
- fprintf(stderr, "error creating request buffer: out of memory\n");
- return;
- }
- strcpy(buff, request);
- strcpy(buff + reqlen, postdata);
- request = buff;
- }
-
-#ifdef NOT_ASCII
- inbytes_left = outbytes_left = reqlen;
- status = apr_xlate_conv_buffer(to_ascii, request, &inbytes_left,
- request, &outbytes_left);
- if (status || inbytes_left || outbytes_left) {
- fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n",
- status, inbytes_left, outbytes_left);
- exit(1);
- }
-#endif /* NOT_ASCII */
-
- /* This only needs to be done once */
-#ifdef USE_SSL
- if (ssl != 1)
-#endif
- if ((rv = apr_sockaddr_info_get(&destsa, connecthost, APR_UNSPEC, connectport, 0, cntxt))
- != APR_SUCCESS) {
- char buf[120];
- apr_snprintf(buf, sizeof(buf),
- "apr_sockaddr_info_get() for %s", connecthost);
- apr_err(buf, rv);
- }
-
- /* ok - lets start */
- start = apr_time_now();
-
- /* initialise lots of requests */
- for (i = 0; i < concurrency; i++) {
- con[i].socknum = i;
- start_connect(&con[i]);
- }
-
- while (done < requests) {
- apr_int32_t n;
- apr_int32_t timed;
- const apr_pollfd_t *pollresults;
-
- /* check for time limit expiry */
- now = apr_time_now();
- timed = (apr_int32_t)apr_time_sec(now - start);
- if (tlimit && timed >= tlimit) {
- requests = done; /* so stats are correct */
- break; /* no need to do another round */
- }
-
- n = concurrency;
-#ifdef USE_SSL
- if (ssl == 1)
- status = APR_SUCCESS;
- else
-#endif
- status = apr_pollset_poll(readbits, aprtimeout, &n, &pollresults);
- if (status != APR_SUCCESS)
- apr_err("apr_poll", status);
-
- if (!n) {
- err("\nServer timed out\n\n");
- }
-
- for (i = 0; i < n; i++) {
- const apr_pollfd_t *next_fd = &(pollresults[i]);
- struct connection *c;
-
-#ifdef USE_SSL
- if (ssl)
- c = &con[i];
- else
-#endif
- c = next_fd->client_data;
-
- /*
- * If the connection isn't connected how can we check it?
- */
- if (c->state == STATE_UNCONNECTED)
- continue;
-
-#ifdef USE_SSL
- if (ssl == 1)
- rv = APR_POLLIN;
- else
-#endif
- rv = next_fd->rtnevents;
-
- /*
- * Notes: APR_POLLHUP is set after FIN is received on some
- * systems, so treat that like APR_POLLIN so that we try to read
- * again.
- *
- * Some systems return APR_POLLERR with APR_POLLHUP. We need to
- * call read_connection() for APR_POLLHUP, so check for
- * APR_POLLHUP first so that a closed connection isn't treated
- * like an I/O error. If it is, we never figure out that the
- * connection is done and we loop here endlessly calling
- * apr_poll().
- */
- if ((rv & APR_POLLIN) || (rv & APR_POLLPRI) || (rv & APR_POLLHUP))
- read_connection(c);
- if ((rv & APR_POLLERR) || (rv & APR_POLLNVAL)) {
- bad++;
- err_except++;
- start_connect(c);
- continue;
- }
- if (rv & APR_POLLOUT) {
- if (c->state == STATE_CONNECTING) {
- apr_pollfd_t remove_pollfd;
- rv = apr_socket_connect(c->aprsock, destsa);
- remove_pollfd.desc_type = APR_POLL_SOCKET;
- remove_pollfd.desc.s = c->aprsock;
- apr_pollset_remove(readbits, &remove_pollfd);
- if (rv != APR_SUCCESS) {
- apr_socket_close(c->aprsock);
- err_conn++;
- if (bad++ > 10) {
- fprintf(stderr,
- "\nTest aborted after 10 failures\n\n");
- apr_err("apr_socket_connect()", rv);
- }
- c->state = STATE_UNCONNECTED;
- start_connect(c);
- continue;
- }
- else {
- c->state = STATE_CONNECTED;
- write_request(c);
- }
- }
- else {
- write_request(c);
- }
- }
-
- /*
- * When using a select based poll every time we check the bits
- * are reset. In 1.3's ab we copied the FD_SET's each time
- * through, but here we're going to check the state and if the
- * connection is in STATE_READ or STATE_CONNECTING we'll add the
- * socket back in as APR_POLLIN.
- */
-#ifdef USE_SSL
- if (ssl != 1)
-#endif
- if (c->state == STATE_READ) {
- apr_pollfd_t new_pollfd;
- new_pollfd.desc_type = APR_POLL_SOCKET;
- new_pollfd.reqevents = APR_POLLIN;
- new_pollfd.desc.s = c->aprsock;
- new_pollfd.client_data = c;
- apr_pollset_add(readbits, &new_pollfd);
- }
- }
- }
-
- if (heartbeatres)
- fprintf(stderr, "Finished %ld requests\n", done);
- else
- printf("..done\n");
-
- if (use_html)
- output_html_results();
- else
- output_results();
-}
-
-/* ------------------------------------------------------- */
-
-/* display copyright information */
-static void copyright(void)
-{
- if (!use_html) {
- printf("This is ApacheBench, Version %s\n", AP_AB_BASEREVISION " <$Revision: 1.146 $> apache-2.0");
- printf("Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\n");
- printf("Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/\n");
- printf("\n");
- }
- else {
- printf("<p>\n");
- printf(" This is ApacheBench, Version %s <i>&lt;%s&gt;</i> apache-2.0<br>\n", AP_AB_BASEREVISION, "$Revision: 1.146 $");
- printf(" Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br>\n");
- printf(" Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/<br>\n");
- printf("</p>\n<p>\n");
- }
-}
-
-/* display usage information */
-static void usage(const char *progname)
-{
- fprintf(stderr, "Usage: %s [options] [http"
-#ifdef USE_SSL
- "[s]"
-#endif
- "://]hostname[:port]/path\n", progname);
- fprintf(stderr, "Options are:\n");
- fprintf(stderr, " -n requests Number of requests to perform\n");
- fprintf(stderr, " -c concurrency Number of multiple requests to make\n");
- fprintf(stderr, " -t timelimit Seconds to max. wait for responses\n");
- fprintf(stderr, " -p postfile File containing data to POST\n");
- fprintf(stderr, " -T content-type Content-type header for POSTing\n");
- fprintf(stderr, " -v verbosity How much troubleshooting info to print\n");
- fprintf(stderr, " -w Print out results in HTML tables\n");
- fprintf(stderr, " -i Use HEAD instead of GET\n");
- fprintf(stderr, " -x attributes String to insert as table attributes\n");
- fprintf(stderr, " -y attributes String to insert as tr attributes\n");
- fprintf(stderr, " -z attributes String to insert as td or th attributes\n");
- fprintf(stderr, " -C attribute Add cookie, eg. 'Apache=1234. (repeatable)\n");
- fprintf(stderr, " -H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'\n");
- fprintf(stderr, " Inserted after all normal header lines. (repeatable)\n");
- fprintf(stderr, " -A attribute Add Basic WWW Authentication, the attributes\n");
- fprintf(stderr, " are a colon separated username and password.\n");
- fprintf(stderr, " -P attribute Add Basic Proxy Authentication, the attributes\n");
- fprintf(stderr, " are a colon separated username and password.\n");
- fprintf(stderr, " -X proxy:port Proxyserver and port number to use\n");
- fprintf(stderr, " -V Print version number and exit\n");
- fprintf(stderr, " -k Use HTTP KeepAlive feature\n");
- fprintf(stderr, " -d Do not show percentiles served table.\n");
- fprintf(stderr, " -S Do not show confidence estimators and warnings.\n");
- fprintf(stderr, " -g filename Output collected data to gnuplot format file.\n");
- fprintf(stderr, " -e filename Output CSV file with percentages served\n");
-#ifdef USE_SSL
- fprintf(stderr, " -s Use httpS instead of HTTP (SSL)\n");
-#endif
- fprintf(stderr, " -h Display usage information (this message)\n");
- exit(EINVAL);
-}
-
-/* ------------------------------------------------------- */
-
-/* split URL into parts */
-
-static int parse_url(char *url)
-{
- char *cp;
- char *h;
- char *scope_id;
- apr_status_t rv;
-
- /* Save a copy for the proxy */
- fullurl = apr_pstrdup(cntxt, url);
-
- if (strlen(url) > 7 && strncmp(url, "http://", 7) == 0) {
- url += 7;
-#ifdef USE_SSL
- ssl = 0;
-#endif
- }
- else
-#ifdef USE_SSL
- if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) {
- url += 8;
- ssl = 1;
- }
-#else
- if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) {
- fprintf(stderr, "SSL not compiled in; no https support\n");
- exit(1);
- }
-#endif
-
- if ((cp = strchr(url, '/')) == NULL)
- return 1;
- h = apr_palloc(cntxt, cp - url + 1);
- memcpy(h, url, cp - url);
- h[cp - url] = '\0';
- rv = apr_parse_addr_port(&hostname, &scope_id, &port, h, cntxt);
- if (rv != APR_SUCCESS || !hostname || scope_id) {
- return 1;
- }
- path = apr_pstrdup(cntxt, cp);
- *cp = '\0';
- if (*url == '[') { /* IPv6 numeric address string */
- host_field = apr_psprintf(cntxt, "[%s]", hostname);
- }
- else {
- host_field = hostname;
- }
-
- if (port == 0) { /* no port specified */
-#ifdef USE_SSL
- if (ssl == 1)
- port = 443;
- else
-#endif
- port = 80;
- }
-
- if ((
-#ifdef USE_SSL
- (ssl == 1) && (port != 443)) || (( ssl == 0 ) &&
-#endif
- (port != 80)))
- {
- colonhost = apr_psprintf(cntxt,":%d",port);
- } else
- colonhost = "";
- return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* read data to POST from file, save contents and length */
-
-static int open_postfile(const char *pfile)
-{
- apr_file_t *postfd = NULL;
- apr_finfo_t finfo;
- apr_fileperms_t mode = APR_OS_DEFAULT;
- apr_size_t length;
- apr_status_t rv;
- char errmsg[120];
-
- rv = apr_file_open(&postfd, pfile, APR_READ, mode, cntxt);
- if (rv != APR_SUCCESS) {
- printf("Invalid postfile name (%s): %s\n", pfile,
- apr_strerror(rv, errmsg, sizeof errmsg));
- return rv;
- }
-
- apr_file_info_get(&finfo, APR_FINFO_NORM, postfd);
- postlen = (apr_size_t)finfo.size;
- postdata = (char *) malloc(postlen);
- if (!postdata) {
- printf("Can\'t alloc postfile buffer\n");
- return APR_ENOMEM;
- }
- length = postlen;
- rv = apr_file_read(postfd, postdata, &length);
- if (rv != APR_SUCCESS) {
- printf("error reading postfile: %s\n",
- apr_strerror(rv, errmsg, sizeof errmsg));
- return rv;
- }
- if (length != postlen) {
- printf("error reading postfile: read only %"
- APR_SIZE_T_FMT " bytes",
- length);
- return APR_EINVAL;
- }
- apr_file_close(postfd);
- return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* sort out command-line args and call test */
-int main(int argc, const char * const argv[])
-{
- int r, l;
- char tmp[1024];
- apr_status_t status;
- apr_getopt_t *opt;
- const char *optarg;
- char c;
-
- /* table defaults */
- tablestring = "";
- trstring = "";
- tdstring = "bgcolor=white";
- cookie = "";
- auth = "";
- proxyhost[0] = '\0';
- hdrs = "";
-
- apr_app_initialize(&argc, &argv, NULL);
- atexit(apr_terminate);
- apr_pool_create(&cntxt, NULL);
-
-#ifdef NOT_ASCII
- status = apr_xlate_open(&to_ascii, "ISO-8859-1", APR_DEFAULT_CHARSET, cntxt);
- if (status) {
- fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", status);
- exit(1);
- }
- status = apr_xlate_open(&from_ascii, APR_DEFAULT_CHARSET, "ISO-8859-1", cntxt);
- if (status) {
- fprintf(stderr, "apr_xlate_open(from ASCII)->%d\n", status);
- exit(1);
- }
- status = apr_base64init_ebcdic(to_ascii, from_ascii);
- if (status) {
- fprintf(stderr, "apr_base64init_ebcdic()->%d\n", status);
- exit(1);
- }
-#endif
-
- apr_getopt_init(&opt, cntxt, argc, argv);
- while ((status = apr_getopt(opt, "n:c:t:T:p:v:kVhwix:y:z:C:H:P:A:g:X:de:Sq"
-#ifdef USE_SSL
- "s"
-#endif
- ,&c, &optarg)) == APR_SUCCESS) {
- switch (c) {
- case 's':
-#ifdef USE_SSL
- ssl = 1;
- break;
-#else
- fprintf(stderr, "SSL not compiled in; no https support\n");
- exit(1);
-#endif
- case 'n':
- requests = atoi(optarg);
- if (!requests) {
- err("Invalid number of requests\n");
- }
- break;
- case 'k':
- keepalive = 1;
- break;
- case 'q':
- heartbeatres = 0;
- break;
- case 'c':
- concurrency = atoi(optarg);
- break;
- case 'i':
- if (posting == 1)
- err("Cannot mix POST and HEAD\n");
- posting = -1;
- break;
- case 'g':
- gnuplot = strdup(optarg);
- break;
- case 'd':
- percentile = 0;
- break;
- case 'e':
- csvperc = strdup(optarg);
- break;
- case 'S':
- confidence = 0;
- break;
- case 'p':
- if (posting != 0)
- err("Cannot mix POST and HEAD\n");
- if (0 == (r = open_postfile(optarg))) {
- posting = 1;
- }
- else if (postdata) {
- exit(r);
- }
- break;
- case 'v':
- verbosity = atoi(optarg);
- break;
- case 't':
- tlimit = atoi(optarg);
- requests = MAX_REQUESTS; /* need to size data array on
- * something */
- break;
- case 'T':
- strcpy(content_type, optarg);
- break;
- case 'C':
- cookie = apr_pstrcat(cntxt, "Cookie: ", optarg, "\r\n", NULL);
- break;
- case 'A':
- /*
- * assume username passwd already to be in colon separated form.
- * Ready to be uu-encoded.
- */
- while (apr_isspace(*optarg))
- optarg++;
- if (apr_base64_encode_len(strlen(optarg)) > sizeof(tmp)) {
- err("Authentication credentials too long\n");
- }
- l = apr_base64_encode(tmp, optarg, strlen(optarg));
- tmp[l] = '\0';
-
- auth = apr_pstrcat(cntxt, auth, "Authorization: Basic ", tmp,
- "\r\n", NULL);
- break;
- case 'P':
- /*
- * assume username passwd already to be in colon separated form.
- */
- while (apr_isspace(*optarg))
- optarg++;
- if (apr_base64_encode_len(strlen(optarg)) > sizeof(tmp)) {
- err("Proxy credentials too long\n");
- }
- l = apr_base64_encode(tmp, optarg, strlen(optarg));
- tmp[l] = '\0';
-
- auth = apr_pstrcat(cntxt, auth, "Proxy-Authorization: Basic ",
- tmp, "\r\n", NULL);
- break;
- case 'H':
- hdrs = apr_pstrcat(cntxt, hdrs, optarg, "\r\n", NULL);
- break;
- case 'w':
- use_html = 1;
- break;
- /*
- * if any of the following three are used, turn on html output
- * automatically
- */
- case 'x':
- use_html = 1;
- tablestring = optarg;
- break;
- case 'X':
- {
- char *p;
- /*
- * assume proxy-name[:port]
- */
- if ((p = strchr(optarg, ':'))) {
- *p = '\0';
- p++;
- proxyport = atoi(p);
- }
- strcpy(proxyhost, optarg);
- isproxy = 1;
- }
- break;
- case 'y':
- use_html = 1;
- trstring = optarg;
- break;
- case 'z':
- use_html = 1;
- tdstring = optarg;
- break;
- case 'h':
- usage(argv[0]);
- break;
- case 'V':
- copyright();
- return 0;
- }
- }
-
- if (opt->ind != argc - 1) {
- fprintf(stderr, "%s: wrong number of arguments\n", argv[0]);
- usage(argv[0]);
- }
-
- if (parse_url(apr_pstrdup(cntxt, opt->argv[opt->ind++]))) {
- fprintf(stderr, "%s: invalid URL\n", argv[0]);
- usage(argv[0]);
- }
-
- if ((concurrency < 0) || (concurrency > MAX_CONCURRENCY)) {
- fprintf(stderr, "%s: Invalid Concurrency [Range 0..%d]\n",
- argv[0], MAX_CONCURRENCY);
- usage(argv[0]);
- }
-
- if ((heartbeatres) && (requests > 150)) {
- heartbeatres = requests / 10; /* Print line every 10% of requests */
- if (heartbeatres < 100)
- heartbeatres = 100; /* but never more often than once every 100
- * connections. */
- }
- else
- heartbeatres = 0;
-
-#ifdef USE_SSL
-#ifdef RSAREF
- R_malloc_init();
-#else
- CRYPTO_malloc_init();
-#endif
- SSL_load_error_strings();
- SSL_library_init();
- bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
- bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
-
- /* TODO: Allow force SSLv2_client_method() (TLSv1?) */
- if (!(ctx = SSL_CTX_new(SSLv23_client_method()))) {
- fprintf(stderr, "Could not init SSL CTX");
- ERR_print_errors_fp(stderr);
- exit(1);
- }
- SSL_CTX_set_options(ctx, SSL_OP_ALL);
-#ifdef USE_THREADS
- ssl_util_thread_setup(cntxt);
-#endif
-#endif
-#ifdef SIGPIPE
- apr_signal(SIGPIPE, SIG_IGN); /* Ignore writes to connections that
- * have been closed at the other end. */
-#endif
- copyright();
- test();
- apr_pool_destroy(cntxt);
-
- return 0;
-}
diff --git a/support/ab.dsp b/support/ab.dsp
deleted file mode 100644
index fe15e99336..0000000000
--- a/support/ab.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ab" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=ab - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ab.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ab.mak" CFG="ab - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ab - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "ab - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ab - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/ab_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "ab - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/ab_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "ab - Win32 Release"
-# Name "ab - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\ab.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ab.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "ab - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\ab.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk ab.exe "ApacheBench Utility" ../include/ap_release.h > .\ab.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ab - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\ab.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk ab.exe "ApacheBench Utility" ../include/ap_release.h > .\ab.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/abs.dsp b/support/abs.dsp
deleted file mode 100644
index 551cd0a14d..0000000000
--- a/support/abs.dsp
+++ /dev/null
@@ -1,134 +0,0 @@
-# Microsoft Developer Studio Project File - Name="abs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=abs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "abs.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "abs.mak" CFG="abs - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "abs - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "abs - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "abs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "SSL" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /I "../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "HAVE_OPENSSL" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /Fd"Release/abs_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /machine:I386 /libpath:"../srclib/openssl/out32dll"
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /debug /machine:I386 /libpath:"../srclib/openssl/out32dll" /opt:ref
-
-!ELSEIF "$(CFG)" == "abs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "SSL" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /I "../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "HAVE_OPENSSL" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /Fd"Debug/abs_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /libpath:"../srclib/openssl/out32dll"
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /libpath:"../srclib/openssl/out32dll"
-
-!ENDIF
-
-# Begin Target
-
-# Name "abs - Win32 Release"
-# Name "abs - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\ab.c
-
-!IF "$(CFG)" == "abs - Win32 Release"
-
-# ADD CPP /Fo"Release/abs.obj"
-
-!ELSEIF "$(CFG)" == "abs - Win32 Debug"
-
-# ADD CPP /Fo"Debug/abs.obj"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\abs.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "abs - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\abs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk ab.exe "ApacheBench/SSL Utility" ../include/ap_release.h > .\abs.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "abs - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\abs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk ab.exe "ApacheBench/SSL Utility" ../include/ap_release.h > .\abs.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/apachectl.in b/support/apachectl.in
deleted file mode 100644
index 8a959c6891..0000000000
--- a/support/apachectl.in
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# Apache control script designed to allow an easy command line interface
-# to controlling Apache. Written by Marc Slemko, 1997/08/23
-#
-# The exit codes returned are:
-# XXX this doc is no longer correct now that the interesting
-# XXX functions are handled by httpd
-# 0 - operation completed successfully
-# 1 -
-# 2 - usage error
-# 3 - httpd could not be started
-# 4 - httpd could not be stopped
-# 5 - httpd could not be started during a restart
-# 6 - httpd could not be restarted during a restart
-# 7 - httpd could not be restarted during a graceful restart
-# 8 - configuration syntax error
-#
-# When multiple arguments are given, only the error from the _last_
-# one is reported. Run "apachectl help" for usage info
-#
-ARGV="$@"
-#
-# |||||||||||||||||||| START CONFIGURATION SECTION ||||||||||||||||||||
-# -------------------- --------------------
-#
-# the path to your httpd binary, including options if necessary
-HTTPD='@exp_sbindir@/@progname@'
-#
-# pick up any necessary environment variables
-if test -f @exp_bindir@/envvars; then
- . @exp_bindir@/envvars
-fi
-#
-# a command that outputs a formatted text version of the HTML at the
-# url given on the command line. Designed for lynx, however other
-# programs may work.
-LYNX="@LYNX_PATH@ -dump"
-#
-# the URL to your server's mod_status status page. If you do not
-# have one, then status and fullstatus will not work.
-STATUSURL="http://localhost:@PORT@/server-status"
-#
-# Set this variable to a command that increases the maximum
-# number of file descriptors allowed per child process. This is
-# critical for configurations that use many file descriptors,
-# such as mass vhosting, or a multithreaded server.
-ULIMIT_MAX_FILES="@APACHECTL_ULIMIT@"
-# -------------------- --------------------
-# |||||||||||||||||||| END CONFIGURATION SECTION ||||||||||||||||||||
-
-# Set the maximum number of file descriptors allowed per child process.
-if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
- $ULIMIT_MAX_FILES
-fi
-
-ERROR=0
-if [ "x$ARGV" = "x" ] ; then
- ARGV="-h"
-fi
-
-case $ARGV in
-start|stop|restart|graceful)
- $HTTPD -k $ARGV
- ERROR=$?
- ;;
-startssl|sslstart|start-SSL)
- $HTTPD -k start -DSSL
- ERROR=$?
- ;;
-configtest)
- $HTTPD -t
- ERROR=$?
- ;;
-status)
- $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
- ;;
-fullstatus)
- $LYNX $STATUSURL
- ;;
-*)
- $HTTPD $ARGV
- ERROR=$?
-esac
-
-exit $ERROR
-
diff --git a/support/apxs.in b/support/apxs.in
deleted file mode 100644
index 8ad0799224..0000000000
--- a/support/apxs.in
+++ /dev/null
@@ -1,772 +0,0 @@
-#!@perlbin@ -w
-#
-# Copyright 1999-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-require 5.004;
-use strict;
-package apxs;
-
-##
-## Configuration
-##
-
-my %config_vars = ();
-
-my $installbuilddir = "@exp_installbuilddir@";
-get_config_vars("$installbuilddir/config_vars.mk",\%config_vars);
-
-# read the configuration variables once
-
-my $prefix = get_vars("prefix");
-my $CFG_PREFIX = $prefix;
-my $exec_prefix = get_vars("exec_prefix");
-my $datadir = get_vars("datadir");
-my $localstatedir = get_vars("localstatedir");
-my $CFG_TARGET = get_vars("progname");
-my $CFG_SYSCONFDIR = get_vars("sysconfdir");
-my $CFG_CFLAGS = join ' ', map { get_vars($_) }
- qw(SHLTCFLAGS CFLAGS NOTEST_CPPFLAGS EXTRA_CPPFLAGS EXTRA_CFLAGS);
-my $includedir = get_vars("includedir");
-my $CFG_INCLUDEDIR = eval qq("$includedir");
-my $CFG_CC = get_vars("CC");
-my $libexecdir = get_vars("libexecdir");
-my $CFG_LIBEXECDIR = eval qq("$libexecdir");
-my $sbindir = get_vars("sbindir");
-my $CFG_SBINDIR = eval qq("$sbindir");
-my $ltflags = $ENV{'LTFLAGS'};
-$ltflags or $ltflags = "--silent";
-
-my %internal_vars = map {$_ => 1}
- qw(TARGET CC CFLAGS CFLAGS_SHLIB LD_SHLIB LDFLAGS_SHLIB LIBS_SHLIB
- PREFIX SBINDIR INCLUDEDIR LIBEXECDIR SYSCONFDIR);
-
-##
-## parse argument line
-##
-
-# defaults for parameters
-my $opt_n = '';
-my $opt_g = '';
-my $opt_c = 0;
-my $opt_o = '';
-my @opt_D = ();
-my @opt_I = ();
-my @opt_L = ();
-my @opt_l = ();
-my @opt_W = ();
-my @opt_S = ();
-my $opt_e = 0;
-my $opt_i = 0;
-my $opt_a = 0;
-my $opt_A = 0;
-my $opt_q = 0;
-my $opt_h = 0;
-my $opt_p = 0;
-
-# this subroutine is derived from Perl's getopts.pl with the enhancement of
-# the "+" metacharacter at the format string to allow a list to be built by
-# subsequent occurrences of the same option.
-sub Getopts {
- my ($argumentative, @ARGV) = @_;
- my $errs = 0;
- local $_;
- local $[ = 0;
-
- my @args = split / */, $argumentative;
- while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- my ($first, $rest) = ($1,$2);
- if ($_ =~ m|^--$|) {
- shift @ARGV;
- last;
- }
- my $pos = index($argumentative,$first);
- if ($pos >= $[) {
- if ($pos < $#args && $args[$pos+1] eq ':') {
- shift @ARGV;
- if ($rest eq '') {
- unless (@ARGV) {
- error("Incomplete option: $first (needs an argument)");
- $errs++;
- }
- $rest = shift(@ARGV);
- }
- eval "\$opt_$first = \$rest;";
- }
- elsif ($pos < $#args && $args[$pos+1] eq '+') {
- shift @ARGV;
- if ($rest eq '') {
- unless (@ARGV) {
- error("Incomplete option: $first (needs an argument)");
- $errs++;
- }
- $rest = shift(@ARGV);
- }
- eval "push(\@opt_$first, \$rest);";
- }
- else {
- eval "\$opt_$first = 1";
- if ($rest eq '') {
- shift(@ARGV);
- }
- else {
- $ARGV[0] = "-$rest";
- }
- }
- }
- else {
- error("Unknown option: $first");
- $errs++;
- if ($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
- return ($errs == 0, @ARGV);
-}
-
-sub usage {
- print STDERR "Usage: apxs -g [-S <var>=<val>] -n <modname>\n";
- print STDERR " apxs -q [-S <var>=<val>] <query> ...\n";
- print STDERR " apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]]\n";
- print STDERR " [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>]\n";
- print STDERR " [-Wl,<flags>] [-p] <files> ...\n";
- print STDERR " apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...\n";
- print STDERR " apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...\n";
- exit(1);
-}
-
-# option handling
-my $rc;
-($rc, @ARGV) = &Getopts("qn:gco:I+D+L+l+W+S+eiaAp", @ARGV);
-&usage if ($rc == 0);
-&usage if ($#ARGV == -1 and not $opt_g);
-&usage if (not $opt_q and not ($opt_g and $opt_n) and not $opt_i and not $opt_c and not $opt_e);
-
-# argument handling
-my @args = @ARGV;
-my $name = 'unknown';
-$name = $opt_n if ($opt_n ne '');
-
-if (@opt_S) {
- my ($opt_S);
- foreach $opt_S (@opt_S) {
- if ($opt_S =~ m/^([^=]+)=(.*)$/) {
- my ($var) = $1;
- my ($val) = $2;
- my $oldval = eval "\$CFG_$var";
-
- unless ($var and $oldval) {
- print STDERR "apxs:Error: no config variable $var\n";
- &usage;
- }
-
- eval "\$CFG_${var}=\"${val}\"";
- } else {
- print STDERR "apxs:Error: malformatted -S option\n";
- &usage;
- }
- }
-}
-
-##
-## Initial shared object support check
-##
-my $httpd = get_vars("sbindir") . "/" . get_vars("progname");
-$httpd = eval qq("$httpd");
-$httpd = eval qq("$httpd");
-my $envvars = get_vars("sbindir") . "/envvars";
-$envvars = eval qq("$envvars");
-$envvars = eval qq("$envvars");
-
-#allow apxs to be run from the source tree, before installation
-if ($0 =~ m:support/apxs$:) {
- ($httpd = $0) =~ s:support/apxs$::;
-}
-
-unless (-x "$httpd") {
- error("$httpd not found or not executable");
- exit 1;
-}
-
-unless (grep /mod_so/, `. $envvars && $httpd -l`) {
- error("Sorry, no shared object support for Apache");
- error("available under your platform. Make sure");
- error("the Apache module mod_so is compiled into");
- error("your server binary `$httpd'.");
- exit 1;
-}
-
-sub get_config_vars{
- my ($file, $rh_config) = @_;
-
- open IN, $file or die "cannot open $file: $!";
- while (<IN>){
- if (/^\s*(.*?)\s*=\s*(.*)$/){
- $rh_config->{$1} = $2;
- }
- }
- close IN;
-}
-
-sub get_vars {
- my $result = '';
- my $ok = 0;
- my $arg;
- foreach $arg (@_) {
- if (exists $config_vars{$arg} or exists $config_vars{lc $arg}) {
- my $val = exists $config_vars{$arg}
- ? $config_vars{$arg}
- : $config_vars{lc $arg};
- $val =~ s/[()]//g;
- $result .= eval "qq($val)" if defined $val;
- $result .= ";;";
- $ok = 1;
- }
- if (not $ok) {
- if (exists $internal_vars{$arg} or exists $internal_vars{lc $arg}) {
- my $val = exists $internal_vars{$arg} ? $arg : lc $arg;
- $val = eval "\$CFG_$val";
- $result .= eval "qq($val)" if defined $val;
- $result .= ";;";
- $ok = 1;
- }
- if (not $ok) {
- error("Invalid query string `$arg'");
- exit(1);
- }
- }
- }
- $result =~ s|;;$||;
- $result =~ s|:| |;
- return $result;
-}
-
-##
-## Operation
-##
-
-# helper function for executing a list of
-# system command with return code checks
-sub execute_cmds {
- my (@cmds) = @_;
- my ($cmd, $rc);
-
- foreach $cmd (@cmds) {
- notice($cmd);
- $rc = system $cmd;
- if ($rc) {
- error(sprintf "Command failed with rc=%d\n", $rc << 8);
- exit 1 ;
- }
- }
-}
-
-if ($opt_g) {
- ##
- ## SAMPLE MODULE SOURCE GENERATION
- ##
-
- if (-d $name) {
- error("Directory `$name' already exists. Remove first");
- exit(1);
- }
-
- my $data = join('', <DATA>);
- $data =~ s|%NAME%|$name|sg;
- $data =~ s|%TARGET%|$CFG_TARGET|sg;
- $data =~ s|%PREFIX%|$prefix|sg;
- $data =~ s|%INSTALLBUILDDIR%|$installbuilddir|sg;
-
- my ($mkf, $mods, $src) = ($data =~ m|^(.+)-=#=-\n(.+)-=#=-\n(.+)|s);
-
- notice("Creating [DIR] $name");
- system("mkdir $name");
- notice("Creating [FILE] $name/Makefile");
- open(FP, ">${name}/Makefile") || die;
- print FP $mkf;
- close(FP);
- notice("Creating [FILE] $name/modules.mk");
- open(FP, ">${name}/modules.mk") || die;
- print FP $mods;
- close(FP);
- notice("Creating [FILE] $name/mod_$name.c");
- open(FP, ">${name}/mod_${name}.c") || die;
- print FP $src;
- close(FP);
- notice("Creating [FILE] $name/.deps");
- system("touch ${name}/.deps");
-
- exit(0);
-}
-
-
-if ($opt_q) {
- ##
- ## QUERY INFORMATION
- ##
- my $result = get_vars(@args);
- print "$result\n";
-}
-
-my $apr_bindir = get_vars("APR_BINDIR");
-my $apr_version = get_vars("APR_VERSION");
-$apr_version =~ s/(\d+)\.(\d).(\d)/$1/;
-my $apr_config="$apr_bindir/apr-$apr_version-config";
-
-if (! -x "$apr_config") {
- error("$apr_bindir/apr-config not found!");
- exit(1);
-}
-
-my $apu_bindir = get_vars("APU_BINDIR");
-my $apu_version = get_vars("APU_VERSION");
-$apu_version =~ s/(\d+)\.(\d).(\d)/$1/;
-my $apu_config="$apu_bindir/apu-$apu_version-config";
-
-if (! -x "$apu_config") {
- error("$apu_config not found!");
- exit(1);
-}
-
-my $libtool = `$apr_config --installbuilddir`;
-chomp($libtool);
-$libtool = "$libtool/libtool";
-
-my $apr_includedir = `$apr_config --includes`;
-chomp($apr_includedir);
-my $apu_includedir = `$apu_config --includes`;
-chomp($apu_includedir);
-
-if ($opt_c) {
- ##
- ## SHARED OBJECT COMPILATION
- ##
-
- # split files into sources and objects
- my @srcs = ();
- my @objs = ();
- my $f;
- foreach $f (@args) {
- if ($f =~ m|\.c$|) {
- push(@srcs, $f);
- }
- else {
- push(@objs, $f);
- }
- }
-
- # determine output file
- my $dso_file;
- if ($opt_o eq '') {
- if ($#srcs > -1) {
- $dso_file = $srcs[0];
- $dso_file =~ s|\.[^.]+$|.la|;
- }
- elsif ($#objs > -1) {
- $dso_file = $objs[0];
- $dso_file =~ s|\.[^.]+$|.la|;
- }
- else {
- $dso_file = "mod_unknown.so";
- }
- }
- else {
- $dso_file = $opt_o;
- }
-
- # create compilation commands
- my @cmds = ();
- my $opt = '';
- my ($opt_Wc, $opt_I, $opt_D);
- foreach $opt_Wc (@opt_W) {
- $opt .= "$1 " if ($opt_Wc =~ m|^\s*c,(.*)$|);
- }
- foreach $opt_I (@opt_I) {
- $opt .= "-I$opt_I ";
- }
- foreach $opt_D (@opt_D) {
- $opt .= "-D$opt_D ";
- }
- my $cflags = "$CFG_CFLAGS";
- my $s;
- my $mod;
- foreach $s (@srcs) {
- my $slo = $s;
- $slo =~ s|\.c$|.slo|;
- my $lo = $s;
- $lo =~ s|\.c$|.lo|;
- my $la = $s;
- $la =~ s|\.c$|.la|;
- my $o = $s;
- $o =~ s|\.c$|.o|;
- push(@cmds, "$libtool $ltflags --mode=compile $CFG_CC $cflags -I$CFG_INCLUDEDIR $apr_includedir $apu_includedir $opt -c -o $lo $s && touch $slo");
- unshift(@objs, $lo);
- }
-
- # create link command
- my $o;
- my $lo;
- foreach $o (@objs) {
- $lo .= " $o";
- }
- my ($opt_Wl, $opt_L, $opt_l);
- foreach $opt_Wl (@opt_W) {
- if ($CFG_CC !~ m/gcc$/) {
- $opt .= " $1" if ($opt_Wl =~ m|^\s*l,(.*)$|);
- } else {
- $opt .= " -W$opt_Wl";
- }
- }
- foreach $opt_L (@opt_L) {
- $opt .= " -L$opt_L";
- }
- foreach $opt_l (@opt_l) {
- $opt .= " -l$opt_l";
- }
-
- if ($opt_p == 1) {
-
- my $apr_libs=`$apr_config --cflags --ldflags --link-libtool --libs`;
- chomp($apr_libs);
- my $apu_libs=`$apu_config --ldflags --link-libtool --libs`;
- chomp($apu_libs);
-
- $opt .= " ".$apu_libs." ".$apr_libs;
- }
- else {
- my $apr_ldflags=`$apr_config --ldflags`;
- chomp($apr_ldflags);
- $opt .= " -rpath $CFG_LIBEXECDIR -module -avoid-version $apr_ldflags";
- }
-
- push(@cmds, "$libtool $ltflags --mode=link $CFG_CC -o $dso_file $opt $lo");
-
- # execute the commands
- &execute_cmds(@cmds);
-
- # allow one-step compilation and installation
- if ($opt_i or $opt_e) {
- @args = ( $dso_file );
- }
-}
-
-if ($opt_i or $opt_e) {
- ##
- ## SHARED OBJECT INSTALLATION
- ##
-
- # determine installation commands
- # and corresponding LoadModule directive
- my @lmd = ();
- my @cmds = ();
- my $f;
- foreach $f (@args) {
- if ($f !~ m#(\.so$|\.la$)#) {
- error("file $f is not a shared object");
- exit(1);
- }
- my $t = $f;
- $t =~ s|^.+/([^/]+)$|$1|;
- $t =~ s|\.la$|\.so|;
- if ($opt_i) {
- push(@cmds, "$installbuilddir/instdso.sh SH_LIBTOOL='" .
- "$libtool' $f $CFG_LIBEXECDIR");
- push(@cmds, "chmod 755 $CFG_LIBEXECDIR/$t");
- }
-
- # determine module symbolname and filename
- my $filename = '';
- if ($name eq 'unknown') {
- $name = '';
- my $base = $f;
- $base =~ s|\.[^.]+$||;
- if (-f "$base.c") {
- open(FP, "<$base.c");
- my $content = join('', <FP>);
- close(FP);
- if ($content =~ m|.*module\s+(?:AP_MODULE_DECLARE_DATA\s+)?([a-zA-Z0-9_]+)_module\s*=\s*.*|s) {
- $name = "$1";
- $filename = "$base.c";
- $filename =~ s|^[^/]+/||;
- }
- }
- if ($name eq '') {
- if ($base =~ m|.*mod_([a-zA-Z0-9_]+)\..+|) {
- $name = "$1";
- $filename = $base;
- $filename =~ s|^[^/]+/||;
- }
- }
- if ($name eq '') {
- error("Sorry, cannot determine bootstrap symbol name");
- error("Please specify one with option `-n'");
- exit(1);
- }
- }
- if ($filename eq '') {
- $filename = "mod_${name}.c";
- }
- my $dir = $CFG_LIBEXECDIR;
- $dir =~ s|^$CFG_PREFIX/?||;
- $dir =~ s|(.)$|$1/|;
- $t =~ s|\.la$|.so|;
- push(@lmd, sprintf("LoadModule %-18s %s", "${name}_module", "$dir$t"));
- }
-
- # execute the commands
- &execute_cmds(@cmds);
-
- # activate module via LoadModule/AddModule directive
- if ($opt_a or $opt_A) {
- if (not -f "$CFG_SYSCONFDIR/$CFG_TARGET.conf") {
- error("Config file $CFG_SYSCONFDIR/$CFG_TARGET.conf not found");
- exit(1);
- }
-
- open(FP, "<$CFG_SYSCONFDIR/$CFG_TARGET.conf") || die;
- my $content = join('', <FP>);
- close(FP);
-
- if ($content !~ m|\n#?\s*LoadModule\s+|) {
- error("Activation failed for custom $CFG_SYSCONFDIR/$CFG_TARGET.conf file.");
- error("At least one `LoadModule' directive already has to exist.");
- exit(1);
- }
-
- my $lmd;
- my $c = '';
- $c = '#' if ($opt_A);
- foreach $lmd (@lmd) {
- my $what = $opt_A ? "preparing" : "activating";
- if ($content !~ m|\n#?\s*$lmd|) {
- # check for open <containers>, so that the new LoadModule
- # directive always appears *outside* of an <container>.
-
- my $before = ($content =~ m|^(.*\n)#?\s*LoadModule\s+[^\n]+\n|s)[0];
-
- # the '()=' trick forces list context and the scalar
- # assignment counts the number of list members (aka number
- # of matches) then
- my $cntopen = () = ($before =~ m|^\s*<[^/].*$|mg);
- my $cntclose = () = ($before =~ m|^\s*</.*$|mg);
-
- if ($cntopen == $cntclose) {
- # fine. Last LoadModule is contextless.
- $content =~ s|^(.*\n#?\s*LoadModule\s+[^\n]+\n)|$1$c$lmd\n|s;
- }
- elsif ($cntopen < $cntclose) {
- error('Configuration file is not valid. There are sections'
- . ' closed before opened.');
- exit(1);
- }
- else {
- # put our cmd after the section containing the last
- # LoadModule.
- my $found =
- $content =~ s!\A ( # string and capture start
- (?:(?:
- ^\s* # start of conf line with a
- (?:[^<]|<[^/]) # directive which does not
- # start with '</'
-
- .*(?:$)\n # rest of the line.
- # the '$' is in parentheses
- # to avoid misinterpreting
- # the string "$\" as
- # perl variable.
-
- )* # catch as much as possible
- # of such lines. (including
- # zero)
-
- ^\s*</.*(?:$)\n? # after the above, we
- # expect a config line with
- # a closing container (</)
-
- ) {$cntopen} # the whole pattern (bunch
- # of lines that end up with
- # a closing directive) must
- # be repeated $cntopen
- # times. That's it.
- # Simple, eh? ;-)
-
- ) # capture end
- !$1$c$lmd\n!mx;
-
- unless ($found) {
- error('Configuration file is not valid. There are '
- . 'sections opened and not closed.');
- exit(1);
- }
- }
- } else {
- # replace already existing LoadModule line
- $content =~ s|^(.*\n)#?\s*$lmd[^\n]*\n|$1$c$lmd\n|s;
- }
- $lmd =~ m|LoadModule\s+(.+?)_module.*|;
- notice("[$what module `$1' in $CFG_SYSCONFDIR/$CFG_TARGET.conf]");
- }
- if (@lmd) {
- if (open(FP, ">$CFG_SYSCONFDIR/$CFG_TARGET.conf.new")) {
- print FP $content;
- close(FP);
- system("cp $CFG_SYSCONFDIR/$CFG_TARGET.conf $CFG_SYSCONFDIR/$CFG_TARGET.conf.bak && " .
- "cp $CFG_SYSCONFDIR/$CFG_TARGET.conf.new $CFG_SYSCONFDIR/$CFG_TARGET.conf && " .
- "rm $CFG_SYSCONFDIR/$CFG_TARGET.conf.new");
- } else {
- notice("unable to open configuration file");
- }
- }
- }
-}
-
-sub error{
- print STDERR "apxs:Error: $_[0].\n";
-}
-
-sub notice{
- print STDERR "$_[0]\n";
-}
-
-##EOF##
-__DATA__
-##
-## Makefile -- Build procedure for sample %NAME% Apache module
-## Autogenerated via ``apxs -n %NAME% -g''.
-##
-
-builddir=.
-top_srcdir=%PREFIX%
-top_builddir=%PREFIX%
-include %INSTALLBUILDDIR%/special.mk
-
-# the used tools
-APXS=apxs
-APACHECTL=apachectl
-
-# additional defines, includes and libraries
-#DEFS=-Dmy_define=my_value
-#INCLUDES=-Imy/include/dir
-#LIBS=-Lmy/lib/dir -lmylib
-
-# the default target
-all: local-shared-build
-
-# install the shared object file into Apache
-install: install-modules
-
-# cleanup
-clean:
- -rm -f mod_%NAME%.o mod_%NAME%.lo mod_%NAME%.slo mod_%NAME%.la
-
-# simple test
-test: reload
- lynx -mime_header http://localhost/%NAME%
-
-# install and activate shared object by reloading Apache to
-# force a reload of the shared object file
-reload: install restart
-
-# the general Apache start/restart/stop
-# procedures
-start:
- $(APACHECTL) start
-restart:
- $(APACHECTL) restart
-stop:
- $(APACHECTL) stop
-
--=#=-
-mod_%NAME%.la: mod_%NAME%.slo
- $(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_%NAME%.lo
-DISTCLEAN_TARGETS = modules.mk
-shared = mod_%NAME%.la
--=#=-
-/*
-** mod_%NAME%.c -- Apache sample %NAME% module
-** [Autogenerated via ``apxs -n %NAME% -g'']
-**
-** To play with this sample module first compile it into a
-** DSO file and install it into Apache's modules directory
-** by running:
-**
-** $ apxs -c -i mod_%NAME%.c
-**
-** Then activate it in Apache's %TARGET%.conf file for instance
-** for the URL /%NAME% in as follows:
-**
-** # %TARGET%.conf
-** LoadModule %NAME%_module modules/mod_%NAME%.so
-** <Location /%NAME%>
-** SetHandler %NAME%
-** </Location>
-**
-** Then after restarting Apache via
-**
-** $ apachectl restart
-**
-** you immediately can request the URL /%NAME% and watch for the
-** output of this module. This can be achieved for instance via:
-**
-** $ lynx -mime_header http://localhost/%NAME%
-**
-** The output should be similar to the following one:
-**
-** HTTP/1.1 200 OK
-** Date: Tue, 31 Mar 1998 14:42:22 GMT
-** Server: Apache/1.3.4 (Unix)
-** Connection: close
-** Content-Type: text/html
-**
-** The sample page from mod_%NAME%.c
-*/
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "ap_config.h"
-
-/* The sample content handler */
-static int %NAME%_handler(request_rec *r)
-{
- if (strcmp(r->handler, "%NAME%")) {
- return DECLINED;
- }
- r->content_type = "text/html";
-
- if (!r->header_only)
- ap_rputs("The sample page from mod_%NAME%.c\n", r);
- return OK;
-}
-
-static void %NAME%_register_hooks(apr_pool_t *p)
-{
- ap_hook_handler(%NAME%_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-/* Dispatch list for API hooks */
-module AP_MODULE_DECLARE_DATA %NAME%_module = {
- STANDARD20_MODULE_STUFF,
- NULL, /* create per-dir config structures */
- NULL, /* merge per-dir config structures */
- NULL, /* create per-server config structures */
- NULL, /* merge per-server config structures */
- NULL, /* table of config file commands */
- %NAME%_register_hooks /* register hooks */
-};
-
diff --git a/support/check_forensic b/support/check_forensic
deleted file mode 100755
index a3b530917b..0000000000
--- a/support/check_forensic
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-# check_forensic <forensic log file>
-
-# check the forensic log for requests that did not complete
-# output the request log for each one
-
-F=$1
-
-cut -f 1 -d '|' $F > /tmp/fc-all.$$
-grep + < /tmp/fc-all.$$ | cut -c2- | sort > /tmp/fc-in.$$
-grep -- - < /tmp/fc-all.$$ | cut -c2- | sort > /tmp/fc-out.$$
-# use -i instead of -I for GNU xargs
-join -v 1 /tmp/fc-in.$$ /tmp/fc-out.$$ | xargs -I xx egrep "^\\+xx" $F
-rm /tmp/fc-all.$$ /tmp/fc-in.$$ /tmp/fc-out.$$
diff --git a/support/checkgid.c b/support/checkgid.c
deleted file mode 100644
index a667fa310d..0000000000
--- a/support/checkgid.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Given one or more group identifers on the command line (e.g.,
- * "httpd" or "#-1"), figure out whether they'll be valid for
- * the server to use at run-time.
- *
- * If a groupname isn't found, or we can't setgid() to it, return
- * -1. If all groups are valid, return 0.
- *
- * This may need to be run as the superuser for the setgid() to
- * succeed; running it as any other user may result in a false
- * negative.
- */
-
-#include "ap_config.h"
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_GRP_H
-#include <grp.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-int main(int argc, char *argv[])
-{
- int i;
- int result;
- gid_t gid;
- struct group *grent;
- struct group fake_grent;
-
- /*
- * Assume success. :-)
- */
- result = 0;
- for (i = 1; i < argc; ++i) {
- char *arg;
- arg = argv[i];
-
- /*
- * If it's from a 'Group #-1' statement, get the numeric value
- * and skip the group lookup stuff.
- */
- if (*arg == '#') {
- gid = atoi(&arg[1]);
- fake_grent.gr_gid = gid;
- grent = &fake_grent;
- }
- else {
- grent = getgrnam(arg);
- }
-
- /*
- * A NULL return means no such group was found, so we're done
- * with this one.
- */
- if (grent == NULL) {
- fprintf(stderr, "%s: group '%s' not found\n", argv[0], arg);
- result = -1;
- }
- else {
- int check;
-
- /*
- * See if we can switch to the numeric GID we have. If so,
- * all well and good; if not, well..
- */
- gid = grent->gr_gid;
- check = setgid(gid);
- if (check != 0) {
- fprintf(stderr, "%s: invalid group '%s'\n", argv[0], arg);
- perror(argv[0]);
- result = -1;
- }
- }
- }
- /*
- * Worst-case return value.
- */
- return result;
-}
-/*
- * Local Variables:
- * mode: C
- * c-file-style: "bsd"
- * End:
- */
diff --git a/support/config.m4 b/support/config.m4
deleted file mode 100644
index cb2322ec8c..0000000000
--- a/support/config.m4
+++ /dev/null
@@ -1,104 +0,0 @@
-htpasswd_LTFLAGS=""
-htdigest_LTFLAGS=""
-rotatelogs_LTFLAGS=""
-logresolve_LTFLAGS=""
-htdbm_LTFLAGS=""
-ab_LTFLAGS=""
-checkgid_LTFLAGS=""
-
-AC_ARG_ENABLE(static-support,APACHE_HELP_STRING(--enable-static-support,Build a statically linked version of the support binaries),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(htpasswd_LTFLAGS, [-static])
- APR_ADDTO(htdigest_LTFLAGS, [-static])
- APR_ADDTO(rotatelogs_LTFLAGS, [-static])
- APR_ADDTO(logresolve_LTFLAGS, [-static])
- APR_ADDTO(htdbm_LTFLAGS, [-static])
- APR_ADDTO(ab_LTFLAGS, [-static])
- APR_ADDTO(checkgid_LTFLAGS, [-static])
-fi
-])
-
-AC_ARG_ENABLE(static-htpasswd,APACHE_HELP_STRING(--enable-static-htpasswd,Build a statically linked version of htpasswd),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(htpasswd_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(htpasswd_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(htpasswd_LTFLAGS)
-
-AC_ARG_ENABLE(static-htdigest,APACHE_HELP_STRING(--enable-static-htdigest,Build a statically linked version of htdigest),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(htdigest_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(htdigest_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(htdigest_LTFLAGS)
-
-AC_ARG_ENABLE(static-rotatelogs,APACHE_HELP_STRING(--enable-static-rotatelogs,Build a statically linked version of rotatelogs),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(rotatelogs_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(rotatelogs_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(rotatelogs_LTFLAGS)
-
-AC_ARG_ENABLE(static-logresolve,APACHE_HELP_STRING(--enable-static-logresolve,Build a statically linked version of logresolve),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(logresolve_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(logresolve_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(logresolve_LTFLAGS)
-
-AC_ARG_ENABLE(static-htdbm,APACHE_HELP_STRING(--enable-static-htdbm,Build a statically linked version of htdbm),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(htdbm_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(htdbm_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(htdbm_LTFLAGS)
-
-AC_ARG_ENABLE(static-ab,APACHE_HELP_STRING(--enable-static-ab,Build a statically linked version of ab),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(ab_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(ab_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(ab_LTFLAGS)
-
-AC_ARG_ENABLE(static-checkgid,APACHE_HELP_STRING(--enable-static-checkgid,Build a statically linked version of checkgid),[
-if test "$enableval" = "yes" ; then
- APR_ADDTO(checkgid_LTFLAGS, [-static])
-else
- APR_REMOVEFROM(checkgid_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(checkgid_LTFLAGS)
-
-case $host in
- *aix*)
- # this works in any locale, unlike the default command below, which
- # fails in a non-English locale if the hard limit is unlimited
- # since the display of the limit will translate "unlimited", but
- # ulimit only accepts English "unlimited" on input
- APACHECTL_ULIMIT="ulimit -S -n unlimited"
- ;;
- *alpha*-dec-osf*)
- # Tru64: -H is for setting, not retrieving
- APACHECTL_ULIMIT="ulimit -S -n \`ulimit -h -n\`"
- ;;
- *)
- if TMP_ULIMIT=`ulimit -H -n` && ulimit -S -n $TMP_ULIMIT ; then
- APACHECTL_ULIMIT="ulimit -S -n \`ulimit -H -n\`"
- else
- APACHECTL_ULIMIT=""
- fi
- ;;
-esac
-APACHE_SUBST(APACHECTL_ULIMIT)
diff --git a/support/dbmmanage b/support/dbmmanage
deleted file mode 100644
index 18bbf43224..0000000000
--- a/support/dbmmanage
+++ /dev/null
@@ -1,350 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2003 The Apache Software Foundation. All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-# if any, must include the following acknowledgment:
-# "This product includes software developed by the
-# Apache Software Foundation (http://www.apache.org/)."
-# Alternately, this acknowledgment may appear in the software itself,
-# if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-# not be used to endorse or promote products derived from this
-# software without prior written permission. For written
-# permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-# nor may "Apache" appear in their name, without prior written
-# permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation. For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-
-#for more functionality see the HTTPD::UserAdmin module:
-# http://www.perl.com/CPAN/modules/by-module/HTTPD/HTTPD-Tools-x.xx.tar.gz
-#
-# usage: dbmmanage <DBMfile> <command> <user> <password> <groups> <comment>
-
-package dbmmanage;
-# -ldb -lndbm -lgdbm -lsdbm
-BEGIN { @AnyDBM_File::ISA = qw(DB_File NDBM_File GDBM_File SDBM_File) }
-use strict;
-use Fcntl;
-use AnyDBM_File ();
-
-sub usage {
- my $cmds = join "|", sort keys %dbmc::;
- die <<SYNTAX;
-Usage: dbmmanage [enc] dbname command [username [pw [group[,group] [comment]]]]
-
- where enc is -d for crypt encryption (default except on Win32, Netware)
- -m for MD5 encryption (default on Win32, Netware)
- -s for SHA1 encryption
- -p for plaintext
-
- command is one of: $cmds
-
- pw of . for update command retains the old password
- pw of - (or blank) for update command prompts for the password
-
- groups or comment of . (or blank) for update command retains old values
- groups or comment of - for update command clears the existing value
- groups or comment of - for add and adduser commands is the empty value
-SYNTAX
-}
-
-sub need_sha1_crypt {
- if (!eval ('require "Digest/SHA1.pm";')) {
- print STDERR <<SHAERR;
-dbmmanage SHA1 passwords require the interface or the module Digest::SHA1
-available from CPAN:
-
- http://www.cpan.org/modules/by-module/Digest/Digest-MD5-2.12.tar.gz
-
-Please install Digest::SHA1 and try again, or use a different crypt option:
-
-SHAERR
- usage();
- }
-}
-
-sub need_md5_crypt {
- if (!eval ('require "Crypt/PasswdMD5.pm";')) {
- print STDERR <<MD5ERR;
-dbmmanage MD5 passwords require the module Crypt::PasswdMD5 available from CPAN
-
- http://www.cpan.org/modules/by-module/Crypt/Crypt-PasswdMD5-1.1.tar.gz
-
-Please install Crypt::PasswdMD5 and try again, or use a different crypt option:
-
-MD5ERR
- usage();
- }
-}
-
-# if your osname is in $newstyle_salt, then use new style salt (starts with '_' and contains
-# four bytes of iteration count and four bytes of salt). Otherwise, just use
-# the traditional two-byte salt.
-# see the man page on your system to decide if you have a newer crypt() lib.
-# I believe that 4.4BSD derived systems do (at least BSD/OS 2.0 does).
-# The new style crypt() allows up to 20 characters of the password to be
-# significant rather than only 8.
-#
-my $newstyle_salt_platforms = join '|', qw{bsdos}; #others?
-my $newstyle_salt = $^O =~ /(?:$newstyle_salt_platforms)/;
-
-# Some platforms just can't crypt() for Apache
-#
-my $crypt_not_supported_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $crypt_not_supported = $^O =~ /(?:$crypt_not_supported_platforms)/;
-
-my $crypt_method = "crypt";
-
-if ($crypt_not_supported) {
- $crypt_method = "md5";
-}
-
-# Some platforms won't jump through our favorite hoops
-#
-my $not_unix_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $not_unix = $^O =~ /(?:$not_unix_platforms)/;
-
-if ($crypt_not_supported) {
- $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-d") {
- shift @ARGV;
- if ($crypt_not_supported) {
- print STDERR
- "Warning: Apache/$^O does not support crypt()ed passwords!\n\n";
- }
- $crypt_method = "crypt";
-}
-
-if (@ARGV[0] eq "-m") {
- shift @ARGV;
- $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-p") {
- shift @ARGV;
- if (!$crypt_not_supported) {
- print STDERR
- "Warning: Apache/$^O does not support plaintext passwords!\n\n";
- }
- $crypt_method = "plain";
-}
-
-if (@ARGV[0] eq "-s") {
- shift @ARGV;
- need_sha1_crypt();
- $crypt_method = "sha1";
-}
-
-if ($crypt_method eq "md5") {
- need_md5_crypt();
-}
-
-my($file,$command,$key,$crypted_pwd,$groups,$comment) = @ARGV;
-
-usage() unless $file and $command and defined &{$dbmc::{$command}};
-
-# remove extension if any
-my $chop = join '|', qw{db.? pag dir};
-$file =~ s/\.($chop)$//;
-
-my $is_update = $command eq "update";
-my %DB = ();
-my @range = ();
-my($mode, $flags) = $command =~
- /^(?:view|check)$/ ? (0644, O_RDONLY) : (0644, O_RDWR|O_CREAT);
-
-tie (%DB, "AnyDBM_File", $file, $flags, $mode) || die "Can't tie $file: $!";
-dbmc->$command();
-untie %DB;
-
-
-my $x;
-sub genseed {
- my $psf;
- if ($not_unix) {
- srand (time ^ $$ or time ^ ($$ + ($$ << 15)));
- }
- else {
- for (qw(-xlwwa -le)) {
- `ps $_ 2>/dev/null`;
- $psf = $_, last unless $?;
- }
- srand (time ^ $$ ^ unpack("%L*", `ps $psf | gzip -f`));
- }
- @range = (qw(. /), '0'..'9','a'..'z','A'..'Z');
- $x = int scalar @range;
-}
-
-sub randchar {
- join '', map $range[rand $x], 1..shift||1;
-}
-
-sub saltpw_crypt {
- genseed() unless @range;
- return $newstyle_salt ?
- join '', "_", randchar, "a..", randchar(4) :
- randchar(2);
-}
-
-sub cryptpw_crypt {
- my ($pw, $salt) = @_;
- $salt = saltpw_crypt unless $salt;
- crypt $pw, $salt;
-}
-
-sub saltpw_md5 {
- genseed() unless @range;
- randchar(8);
-}
-
-sub cryptpw_md5 {
- my($pw, $salt) = @_;
- $salt = saltpw_md5 unless $salt;
- Crypt::PasswdMD5::apache_md5_crypt($pw, $salt);
-}
-
-sub cryptpw_sha1 {
- my($pw, $salt) = @_;
- '{SHA}' . Digest::SHA1::sha1_base64($pw) . "=";
-}
-
-sub cryptpw {
- if ($crypt_method eq "md5") {
- return cryptpw_md5(@_);
- } elsif ($crypt_method eq "sha1") {
- return cryptpw_sha1(@_);
- } elsif ($crypt_method eq "crypt") {
- return cryptpw_crypt(@_);
- }
- @_[0]; # otherwise return plaintext
-}
-
-sub getpass {
- my $prompt = shift || "Enter password:";
-
- unless($not_unix) {
- open STDIN, "/dev/tty" or warn "couldn't open /dev/tty $!\n";
- system "stty -echo;";
- }
-
- my($c,$pwd);
- print STDERR $prompt;
- while (($c = getc(STDIN)) ne '' and $c ne "\n" and $c ne "\r") {
- $pwd .= $c;
- }
-
- system "stty echo" unless $not_unix;
- print STDERR "\n";
- die "Can't use empty password!\n" unless length $pwd;
- return $pwd;
-}
-
-sub dbmc::update {
- die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
- $crypted_pwd = (split /:/, $DB{$key}, 3)[0] if $crypted_pwd eq '.';
- $groups = (split /:/, $DB{$key}, 3)[1] if !$groups || $groups eq '.';
- $comment = (split /:/, $DB{$key}, 3)[2] if !$comment || $comment eq '.';
- if (!$crypted_pwd || $crypted_pwd eq '-') {
- dbmc->adduser;
- }
- else {
- dbmc->add;
- }
-}
-
-sub dbmc::add {
- die "Can't use empty password!\n" unless $crypted_pwd;
- unless($is_update) {
- die "Sorry, user `$key' already exists!\n" if $DB{$key};
- }
- $groups = '' if $groups eq '-';
- $comment = '' if $comment eq '-';
- $groups .= ":" . $comment if $comment;
- $crypted_pwd .= ":" . $groups if $groups;
- $DB{$key} = $crypted_pwd;
- my $action = $is_update ? "updated" : "added";
- print "User $key $action with password encrypted to $DB{$key} using $crypt_method\n";
-}
-
-sub dbmc::adduser {
- my $value = getpass "New password:";
- die "They don't match, sorry.\n" unless getpass("Re-type new password:") eq $value;
- $crypted_pwd = cryptpw $value;
- dbmc->add;
-}
-
-sub dbmc::delete {
- die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
- delete $DB{$key}, print "`$key' deleted\n";
-}
-
-sub dbmc::view {
- print $key ? "$key:$DB{$key}\n" : map { "$_:$DB{$_}\n" if $DB{$_} } keys %DB;
-}
-
-sub dbmc::check {
- die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
- my $chkpass = (split /:/, $DB{$key}, 3)[0];
- my $testpass = getpass();
- if (substr($chkpass, 0, 6) eq '$apr1$') {
- need_md5_crypt;
- $crypt_method = "md5";
- } elsif (substr($chkpass, 0, 5) eq '{SHA}') {
- need_sha1_crypt;
- $crypt_method = "sha1";
- } elsif (length($chkpass) == 13 && $chkpass ne $testpass) {
- $crypt_method = "crypt";
- } else {
- $crypt_method = "plain";
- }
- print $crypt_method . (cryptpw($testpass, $chkpass) eq $chkpass
- ? " password ok\n" : " password mismatch\n");
-}
-
-sub dbmc::import {
- while(defined($_ = <STDIN>) and chomp) {
- ($key,$crypted_pwd,$groups,$comment) = split /:/, $_, 4;
- dbmc->add;
- }
-}
-
diff --git a/support/dbmmanage.in b/support/dbmmanage.in
deleted file mode 100644
index c4cd5c7277..0000000000
--- a/support/dbmmanage.in
+++ /dev/null
@@ -1,311 +0,0 @@
-#!@perlbin@
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#for more functionality see the HTTPD::UserAdmin module:
-# http://www.perl.com/CPAN/modules/by-module/HTTPD/HTTPD-Tools-x.xx.tar.gz
-#
-# usage: dbmmanage <DBMfile> <command> <user> <password> <groups> <comment>
-
-package dbmmanage;
-# -ldb -lndbm -lgdbm -lsdbm
-BEGIN { @AnyDBM_File::ISA = qw(DB_File NDBM_File GDBM_File SDBM_File) }
-use strict;
-use Fcntl;
-use AnyDBM_File ();
-
-sub usage {
- my $cmds = join "|", sort keys %dbmc::;
- die <<SYNTAX;
-Usage: dbmmanage [enc] dbname command [username [pw [group[,group] [comment]]]]
-
- where enc is -d for crypt encryption (default except on Win32, Netware)
- -m for MD5 encryption (default on Win32, Netware)
- -s for SHA1 encryption
- -p for plaintext
-
- command is one of: $cmds
-
- pw of . for update command retains the old password
- pw of - (or blank) for update command prompts for the password
-
- groups or comment of . (or blank) for update command retains old values
- groups or comment of - for update command clears the existing value
- groups or comment of - for add and adduser commands is the empty value
-SYNTAX
-}
-
-sub need_sha1_crypt {
- if (!eval ('require "Digest/SHA1.pm";')) {
- print STDERR <<SHAERR;
-dbmmanage SHA1 passwords require the interface or the module Digest::SHA1
-available from CPAN:
-
- http://www.cpan.org/modules/by-module/Digest/Digest-MD5-2.12.tar.gz
-
-Please install Digest::SHA1 and try again, or use a different crypt option:
-
-SHAERR
- usage();
- }
-}
-
-sub need_md5_crypt {
- if (!eval ('require "Crypt/PasswdMD5.pm";')) {
- print STDERR <<MD5ERR;
-dbmmanage MD5 passwords require the module Crypt::PasswdMD5 available from CPAN
-
- http://www.cpan.org/modules/by-module/Crypt/Crypt-PasswdMD5-1.1.tar.gz
-
-Please install Crypt::PasswdMD5 and try again, or use a different crypt option:
-
-MD5ERR
- usage();
- }
-}
-
-# if your osname is in $newstyle_salt, then use new style salt (starts with '_' and contains
-# four bytes of iteration count and four bytes of salt). Otherwise, just use
-# the traditional two-byte salt.
-# see the man page on your system to decide if you have a newer crypt() lib.
-# I believe that 4.4BSD derived systems do (at least BSD/OS 2.0 does).
-# The new style crypt() allows up to 20 characters of the password to be
-# significant rather than only 8.
-#
-my $newstyle_salt_platforms = join '|', qw{bsdos}; #others?
-my $newstyle_salt = $^O =~ /(?:$newstyle_salt_platforms)/;
-
-# Some platforms just can't crypt() for Apache
-#
-my $crypt_not_supported_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $crypt_not_supported = $^O =~ /(?:$crypt_not_supported_platforms)/;
-
-my $crypt_method = "crypt";
-
-if ($crypt_not_supported) {
- $crypt_method = "md5";
-}
-
-# Some platforms won't jump through our favorite hoops
-#
-my $not_unix_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $not_unix = $^O =~ /(?:$not_unix_platforms)/;
-
-if ($crypt_not_supported) {
- $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-d") {
- shift @ARGV;
- if ($crypt_not_supported) {
- print STDERR
- "Warning: Apache/$^O does not support crypt()ed passwords!\n\n";
- }
- $crypt_method = "crypt";
-}
-
-if (@ARGV[0] eq "-m") {
- shift @ARGV;
- $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-p") {
- shift @ARGV;
- if (!$crypt_not_supported) {
- print STDERR
- "Warning: Apache/$^O does not support plaintext passwords!\n\n";
- }
- $crypt_method = "plain";
-}
-
-if (@ARGV[0] eq "-s") {
- shift @ARGV;
- need_sha1_crypt();
- $crypt_method = "sha1";
-}
-
-if ($crypt_method eq "md5") {
- need_md5_crypt();
-}
-
-my($file,$command,$key,$crypted_pwd,$groups,$comment) = @ARGV;
-
-usage() unless $file and $command and defined &{$dbmc::{$command}};
-
-# remove extension if any
-my $chop = join '|', qw{db.? pag dir};
-$file =~ s/\.($chop)$//;
-
-my $is_update = $command eq "update";
-my %DB = ();
-my @range = ();
-my($mode, $flags) = $command =~
- /^(?:view|check)$/ ? (0644, O_RDONLY) : (0644, O_RDWR|O_CREAT);
-
-tie (%DB, "AnyDBM_File", $file, $flags, $mode) || die "Can't tie $file: $!";
-dbmc->$command();
-untie %DB;
-
-
-my $x;
-sub genseed {
- my $psf;
- if ($not_unix) {
- srand (time ^ $$ or time ^ ($$ + ($$ << 15)));
- }
- else {
- for (qw(-xlwwa -le)) {
- `ps $_ 2>/dev/null`;
- $psf = $_, last unless $?;
- }
- srand (time ^ $$ ^ unpack("%L*", `ps $psf | gzip -f`));
- }
- @range = (qw(. /), '0'..'9','a'..'z','A'..'Z');
- $x = int scalar @range;
-}
-
-sub randchar {
- join '', map $range[rand $x], 1..shift||1;
-}
-
-sub saltpw_crypt {
- genseed() unless @range;
- return $newstyle_salt ?
- join '', "_", randchar, "a..", randchar(4) :
- randchar(2);
-}
-
-sub cryptpw_crypt {
- my ($pw, $salt) = @_;
- $salt = saltpw_crypt unless $salt;
- crypt $pw, $salt;
-}
-
-sub saltpw_md5 {
- genseed() unless @range;
- randchar(8);
-}
-
-sub cryptpw_md5 {
- my($pw, $salt) = @_;
- $salt = saltpw_md5 unless $salt;
- Crypt::PasswdMD5::apache_md5_crypt($pw, $salt);
-}
-
-sub cryptpw_sha1 {
- my($pw, $salt) = @_;
- '{SHA}' . Digest::SHA1::sha1_base64($pw) . "=";
-}
-
-sub cryptpw {
- if ($crypt_method eq "md5") {
- return cryptpw_md5(@_);
- } elsif ($crypt_method eq "sha1") {
- return cryptpw_sha1(@_);
- } elsif ($crypt_method eq "crypt") {
- return cryptpw_crypt(@_);
- }
- @_[0]; # otherwise return plaintext
-}
-
-sub getpass {
- my $prompt = shift || "Enter password:";
-
- unless($not_unix) {
- open STDIN, "/dev/tty" or warn "couldn't open /dev/tty $!\n";
- system "stty -echo;";
- }
-
- my($c,$pwd);
- print STDERR $prompt;
- while (($c = getc(STDIN)) ne '' and $c ne "\n" and $c ne "\r") {
- $pwd .= $c;
- }
-
- system "stty echo" unless $not_unix;
- print STDERR "\n";
- die "Can't use empty password!\n" unless length $pwd;
- return $pwd;
-}
-
-sub dbmc::update {
- die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
- $crypted_pwd = (split /:/, $DB{$key}, 3)[0] if $crypted_pwd eq '.';
- $groups = (split /:/, $DB{$key}, 3)[1] if !$groups || $groups eq '.';
- $comment = (split /:/, $DB{$key}, 3)[2] if !$comment || $comment eq '.';
- if (!$crypted_pwd || $crypted_pwd eq '-') {
- dbmc->adduser;
- }
- else {
- dbmc->add;
- }
-}
-
-sub dbmc::add {
- die "Can't use empty password!\n" unless $crypted_pwd;
- unless($is_update) {
- die "Sorry, user `$key' already exists!\n" if $DB{$key};
- }
- $groups = '' if $groups eq '-';
- $comment = '' if $comment eq '-';
- $groups .= ":" . $comment if $comment;
- $crypted_pwd .= ":" . $groups if $groups;
- $DB{$key} = $crypted_pwd;
- my $action = $is_update ? "updated" : "added";
- print "User $key $action with password encrypted to $DB{$key} using $crypt_method\n";
-}
-
-sub dbmc::adduser {
- my $value = getpass "New password:";
- die "They don't match, sorry.\n" unless getpass("Re-type new password:") eq $value;
- $crypted_pwd = cryptpw $value;
- dbmc->add;
-}
-
-sub dbmc::delete {
- die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
- delete $DB{$key}, print "`$key' deleted\n";
-}
-
-sub dbmc::view {
- print $key ? "$key:$DB{$key}\n" : map { "$_:$DB{$_}\n" if $DB{$_} } keys %DB;
-}
-
-sub dbmc::check {
- die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
- my $chkpass = (split /:/, $DB{$key}, 3)[0];
- my $testpass = getpass();
- if (substr($chkpass, 0, 6) eq '$apr1$') {
- need_md5_crypt;
- $crypt_method = "md5";
- } elsif (substr($chkpass, 0, 5) eq '{SHA}') {
- need_sha1_crypt;
- $crypt_method = "sha1";
- } elsif (length($chkpass) == 13 && $chkpass ne $testpass) {
- $crypt_method = "crypt";
- } else {
- $crypt_method = "plain";
- }
- print $crypt_method . (cryptpw($testpass, $chkpass) eq $chkpass
- ? " password ok\n" : " password mismatch\n");
-}
-
-sub dbmc::import {
- while(defined($_ = <STDIN>) and chomp) {
- ($key,$crypted_pwd,$groups,$comment) = split /:/, $_, 4;
- dbmc->add;
- }
-}
-
diff --git a/support/envvars-std.in b/support/envvars-std.in
deleted file mode 100644
index c276665d08..0000000000
--- a/support/envvars-std.in
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# envvars-std - default environment variables for apachectl
-#
-# This file is generated from envvars-std.in
-#
-@SHLIBPATH_VAR@="@exp_libdir@:$@SHLIBPATH_VAR@"
-export @SHLIBPATH_VAR@
-#
-@OS_SPECIFIC_VARS@
diff --git a/support/htdbm.c b/support/htdbm.c
deleted file mode 100644
index 652d5d793f..0000000000
--- a/support/htdbm.c
+++ /dev/null
@@ -1,581 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * htdbm.c: simple program for manipulating DBM
- * password databases for the Apache HTTP server
- *
- * Contributed by Mladen Turk <mturk mappingsoft.com>
- * 12 Oct 2001
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_file_info.h"
-#include "apr_pools.h"
-#include "apr_signal.h"
-#include "apr_md5.h"
-#include "apr_sha1.h"
-#include "apr_dbm.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#include <time.h>
-
-#if APR_CHARSET_EBCDIC
-#include "apr_xlate.h"
-#endif /*APR_CHARSET_EBCDIC*/
-
-#if APR_HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-
-#if !APR_CHARSET_EBCDIC
-#define LF 10
-#define CR 13
-#else /*APR_CHARSET_EBCDIC*/
-#define LF '\n'
-#define CR '\r'
-#endif /*APR_CHARSET_EBCDIC*/
-
-#define MAX_STRING_LEN 256
-#define ALG_PLAIN 0
-#define ALG_APMD5 1
-#define ALG_APSHA 2
-
-#if APR_HAVE_CRYPT_H
-#define ALG_CRYPT 3
-#endif
-
-
-#define ERR_FILEPERM 1
-#define ERR_SYNTAX 2
-#define ERR_PWMISMATCH 3
-#define ERR_INTERRUPTED 4
-#define ERR_OVERFLOW 5
-#define ERR_BADUSER 6
-#define ERR_EMPTY 7
-
-
-typedef struct htdbm_t htdbm_t;
-
-struct htdbm_t {
- apr_dbm_t *dbm;
- apr_pool_t *pool;
-#if APR_CHARSET_EBCDIC
- apr_xlate_t *to_ascii;
-#endif
- char *filename;
- char *username;
- char *userpass;
- char *comment;
- char *type;
- int create;
- int rdonly;
- int alg;
-};
-
-
-#define HTDBM_MAKE 0
-#define HTDBM_DELETE 1
-#define HTDBM_VERIFY 2
-#define HTDBM_LIST 3
-#define HTDBM_NOFILE 4
-#define HTDBM_STDIN 5
-
-static void terminate(void)
-{
- apr_terminate();
-#ifdef NETWARE
- pressanykey();
-#endif
-}
-
-static void htdbm_terminate(htdbm_t *htdbm)
-{
- if (htdbm->dbm)
- apr_dbm_close(htdbm->dbm);
- htdbm->dbm = NULL;
-}
-
-static htdbm_t *h;
-
-static void htdbm_interrupted(void)
-{
- htdbm_terminate(h);
- fprintf(stderr, "htdbm Interrupted !\n");
- exit(ERR_INTERRUPTED);
-}
-
-static apr_status_t htdbm_init(apr_pool_t **pool, htdbm_t **hdbm)
-{
-
-#if APR_CHARSET_EBCDIC
- apr_status_t rv;
-#endif
-
- apr_pool_create( pool, NULL);
- apr_signal(SIGINT, (void (*)(int)) htdbm_interrupted);
-
- (*hdbm) = (htdbm_t *)apr_pcalloc(*pool, sizeof(htdbm_t));
- (*hdbm)->pool = *pool;
-
-#if APR_CHARSET_EBCDIC
- rv = apr_xlate_open(&((*hdbm)->to_ascii), "ISO-8859-1", APR_DEFAULT_CHARSET, (*hdbm)->pool);
- if (rv) {
- fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", rv);
- return APR_EGENERAL;
- }
- rv = apr_SHA1InitEBCDIC((*hdbm)->to_ascii);
- if (rv) {
- fprintf(stderr, "apr_SHA1InitEBCDIC()->%d\n", rv);
- return APR_EGENERAL;
- }
- rv = apr_MD5InitEBCDIC((*hdbm)->to_ascii);
- if (rv) {
- fprintf(stderr, "apr_MD5InitEBCDIC()->%d\n", rv);
- return APR_EGENERAL;
- }
-#endif /*APR_CHARSET_EBCDIC*/
-
- /* Set MD5 as default */
- (*hdbm)->alg = ALG_APMD5;
- (*hdbm)->type = "default";
- return APR_SUCCESS;
-}
-
-static apr_status_t htdbm_open(htdbm_t *htdbm)
-{
- if (htdbm->create)
- return apr_dbm_open_ex(&htdbm->dbm, htdbm->type, htdbm->filename, APR_DBM_RWCREATE,
- APR_OS_DEFAULT, htdbm->pool);
- else
- return apr_dbm_open_ex(&htdbm->dbm, htdbm->type, htdbm->filename,
- htdbm->rdonly ? APR_DBM_READONLY : APR_DBM_READWRITE,
- APR_OS_DEFAULT, htdbm->pool);
-}
-
-static apr_status_t htdbm_save(htdbm_t *htdbm, int *changed)
-{
- apr_datum_t key, val;
-
- if (!htdbm->username)
- return APR_SUCCESS;
-
- key.dptr = htdbm->username;
- key.dsize = strlen(htdbm->username);
- if (apr_dbm_exists(htdbm->dbm, key))
- *changed = 1;
-
- val.dsize = strlen(htdbm->userpass);
- if (!htdbm->comment)
- val.dptr = htdbm->userpass;
- else {
- val.dptr = apr_pstrcat(htdbm->pool, htdbm->userpass, ":",
- htdbm->comment, NULL);
- val.dsize += (strlen(htdbm->comment) + 1);
- }
- return apr_dbm_store(htdbm->dbm, key, val);
-}
-
-static apr_status_t htdbm_del(htdbm_t *htdbm)
-{
- apr_datum_t key;
-
- key.dptr = htdbm->username;
- key.dsize = strlen(htdbm->username);
- if (!apr_dbm_exists(htdbm->dbm, key))
- return APR_ENOENT;
-
- return apr_dbm_delete(htdbm->dbm, key);
-}
-
-static apr_status_t htdbm_verify(htdbm_t *htdbm)
-{
- apr_datum_t key, val;
- char pwd[MAX_STRING_LEN] = {0};
- char *rec, *cmnt;
-
- key.dptr = htdbm->username;
- key.dsize = strlen(htdbm->username);
- if (!apr_dbm_exists(htdbm->dbm, key))
- return APR_ENOENT;
- if (apr_dbm_fetch(htdbm->dbm, key, &val) != APR_SUCCESS)
- return APR_ENOENT;
- rec = apr_pstrndup(htdbm->pool, val.dptr, val.dsize);
- cmnt = strchr(rec, ';');
- if (cmnt)
- strncpy(pwd, rec, cmnt - rec);
- else
- strcpy(pwd, rec);
- return apr_password_validate(htdbm->userpass, pwd);
-}
-
-static apr_status_t htdbm_list(htdbm_t *htdbm)
-{
- apr_status_t rv;
- apr_datum_t key, val;
- char *rec, *cmnt;
- char kb[MAX_STRING_LEN];
- int i = 0;
-
- rv = apr_dbm_firstkey(htdbm->dbm, &key);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Empty database -- %s\n", htdbm->filename);
- return APR_ENOENT;
- }
- rec = apr_pcalloc(htdbm->pool, HUGE_STRING_LEN);
-
- fprintf(stderr, "Dumping records from database -- %s\n", htdbm->filename);
- fprintf(stderr, " %-32sComment\n", "Username");
- while (key.dptr != NULL) {
- rv = apr_dbm_fetch(htdbm->dbm, key, &val);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Failed getting data from %s\n", htdbm->filename);
- return APR_EGENERAL;
- }
- strncpy(kb, key.dptr, key.dsize);
- kb[key.dsize] = '\0';
- fprintf(stderr, " %-32s", kb);
- strncpy(rec, val.dptr, val.dsize);
- rec[val.dsize] = '\0';
- cmnt = strchr(rec, ':');
- if (cmnt)
- fprintf(stderr, cmnt + 1);
- fprintf(stderr, "\n");
- rv = apr_dbm_nextkey(htdbm->dbm, &key);
- if (rv != APR_SUCCESS)
- fprintf(stderr, "Failed getting NextKey\n");
- ++i;
- }
-
- fprintf(stderr, "Total #records : %d\n", i);
- return APR_SUCCESS;
-}
-
-static void to64(char *s, unsigned long v, int n)
-{
- static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */
- "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
- while (--n >= 0) {
- *s++ = itoa64[v&0x3f];
- v >>= 6;
- }
-}
-
-static apr_status_t htdbm_make(htdbm_t *htdbm)
-{
- char cpw[MAX_STRING_LEN];
- char salt[9];
-
- switch (htdbm->alg) {
- case ALG_APSHA:
- /* XXX cpw >= 28 + strlen(sha1) chars - fixed len SHA */
- apr_sha1_base64(htdbm->userpass,strlen(htdbm->userpass),cpw);
- break;
-
- case ALG_APMD5:
- (void) srand((int) time((time_t *) NULL));
- to64(&salt[0], rand(), 8);
- salt[8] = '\0';
- apr_md5_encode((const char *)htdbm->userpass, (const char *)salt,
- cpw, sizeof(cpw));
- break;
- case ALG_PLAIN:
- /* XXX this len limitation is not in sync with any HTTPd len. */
- apr_cpystrn(cpw,htdbm->userpass,sizeof(cpw));
- break;
-#if APR_HAVE_CRYPT_H
- case ALG_CRYPT:
- (void) srand((int) time((time_t *) NULL));
- to64(&salt[0], rand(), 8);
- salt[8] = '\0';
- apr_cpystrn(cpw, (char *)crypt(htdbm->userpass, salt), sizeof(cpw) - 1);
- fprintf(stderr, "CRYPT is now deprecated, use MD5 instead!\n");
-#endif
- default:
- break;
- }
- htdbm->userpass = apr_pstrdup(htdbm->pool, cpw);
- return APR_SUCCESS;
-}
-
-static apr_status_t htdbm_valid_username(htdbm_t *htdbm)
-{
- if (!htdbm->username || (strlen(htdbm->username) > 64) || (strlen(htdbm->username) < 1)) {
- fprintf(stderr, "Invalid username length\n");
- return APR_EINVAL;
- }
- if (strchr(htdbm->username, ':')) {
- fprintf(stderr, "Username contains invalid characters\n");
- return APR_EINVAL;
- }
- return APR_SUCCESS;
-}
-
-static void htdbm_usage(void)
-{
-
-#if APR_HAVE_CRYPT_H
-#define CRYPT_OPTION "d"
-#else
-#define CRYPT_OPTION ""
-#endif
- fprintf(stderr, "htdbm -- program for manipulating DBM password databases.\n\n");
- fprintf(stderr, "Usage: htdbm [-cm"CRYPT_OPTION"pstvx] [-TDBTYPE] database username\n");
- fprintf(stderr, " -b[cm"CRYPT_OPTION"ptsv] [-TDBTYPE] database username password\n");
- fprintf(stderr, " -n[m"CRYPT_OPTION"pst] username\n");
- fprintf(stderr, " -nb[m"CRYPT_OPTION"pst] username password\n");
- fprintf(stderr, " -v[m"CRYPT_OPTION"ps] [-TDBTYPE] database username\n");
- fprintf(stderr, " -vb[m"CRYPT_OPTION"ps] [-TDBTYPE] database username password\n");
- fprintf(stderr, " -x[m"CRYPT_OPTION"ps] [-TDBTYPE] database username\n");
- fprintf(stderr, " -l [-TDBTYPE] database\n");
- fprintf(stderr, "Options:\n");
- fprintf(stderr, " -b Use the password from the command line rather "
- "than prompting for it.\n");
- fprintf(stderr, " -c Create a new database.\n");
- fprintf(stderr, " -n Don't update database; display results on stdout.\n");
- fprintf(stderr, " -m Force MD5 encryption of the password (default).\n");
-#if APR_HAVE_CRYPT_H
- fprintf(stderr, " -d Force CRYPT encryption of the password (now deprecated).\n");
-#endif
- fprintf(stderr, " -p Do not encrypt the password (plaintext).\n");
- fprintf(stderr, " -s Force SHA encryption of the password.\n");
- fprintf(stderr, " -T DBM Type (SDBM|GDBM|DB|default).\n");
- fprintf(stderr, " -l Display usernames from database on stdout.\n");
- fprintf(stderr, " -t The last param is username comment.\n");
- fprintf(stderr, " -v Verify the username/password.\n");
- fprintf(stderr, " -x Remove the username record from database.\n");
- exit(ERR_SYNTAX);
-
-}
-
-
-int main(int argc, const char * const argv[])
-{
- apr_pool_t *pool;
- apr_status_t rv;
- apr_size_t l;
- char pwi[MAX_STRING_LEN];
- char pwc[MAX_STRING_LEN];
- char errbuf[MAX_STRING_LEN];
- const char *arg;
- int need_file = 1;
- int need_user = 1;
- int need_pwd = 1;
- int need_cmnt = 0;
- int pwd_supplied = 0;
- int changed;
- int cmd = HTDBM_MAKE;
- int i;
- int args_left = 2;
-
- apr_app_initialize(&argc, &argv, NULL);
- atexit(terminate);
-
- if ((rv = htdbm_init(&pool, &h)) != APR_SUCCESS) {
- fprintf(stderr, "Unable to initialize htdbm terminating!\n");
- apr_strerror(rv, errbuf, sizeof(errbuf));
- exit(1);
- }
- /*
- * Preliminary check to make sure they provided at least
- * three arguments, we'll do better argument checking as
- * we parse the command line.
- */
- if (argc < 3)
- htdbm_usage();
- /*
- * Go through the argument list and pick out any options. They
- * have to precede any other arguments.
- */
- for (i = 1; i < argc; i++) {
- arg = argv[i];
- if (*arg != '-')
- break;
-
- while (*++arg != '\0') {
- switch (*arg) {
- case 'b':
- pwd_supplied = 1;
- need_pwd = 0;
- args_left++;
- break;
- case 'c':
- h->create = 1;
- break;
- case 'n':
- need_file = 0;
- cmd = HTDBM_NOFILE;
- args_left--;
- break;
- case 'l':
- need_pwd = 0;
- need_user = 0;
- cmd = HTDBM_LIST;
- h->rdonly = 1;
- args_left--;
- break;
- case 't':
- need_cmnt = 1;
- args_left++;
- break;
- case 'T':
- h->type = apr_pstrdup(h->pool, ++arg);
- while (*arg != '\0')
- ++arg;
- --arg; /* so incrementing this in the loop with find a null */
- break;
- case 'v':
- h->rdonly = 1;
- cmd = HTDBM_VERIFY;
- break;
- case 'x':
- need_pwd = 0;
- cmd = HTDBM_DELETE;
- break;
- case 'm':
- h->alg = ALG_APMD5;
- break;
- case 'p':
- h->alg = ALG_PLAIN;
- break;
- case 's':
- h->alg = ALG_APSHA;
- break;
-#if APR_HAVE_CRYPT_H
- case 'd':
- h->alg = ALG_CRYPT;
- break;
-#endif
- default:
- htdbm_usage();
- break;
- }
- }
- }
- /*
- * Make sure we still have exactly the right number of arguments left
- * (the filename, the username, and possibly the password if -b was
- * specified).
- */
- if ((argc - i) != args_left)
- htdbm_usage();
-
- if (!need_file)
- i--;
- else {
- h->filename = apr_pstrdup(h->pool, argv[i]);
- if ((rv = htdbm_open(h)) != APR_SUCCESS) {
- fprintf(stderr, "Error opening database %s\n", argv[i]);
- apr_strerror(rv, errbuf, sizeof(errbuf));
- fprintf(stderr,"%s\n",errbuf);
- exit(ERR_FILEPERM);
- }
- }
- if (need_user) {
- h->username = apr_pstrdup(pool, argv[i+1]);
- if (htdbm_valid_username(h) != APR_SUCCESS)
- exit(ERR_BADUSER);
- }
- if (pwd_supplied)
- h->userpass = apr_pstrdup(pool, argv[i+2]);
-
- if (need_pwd) {
- l = sizeof(pwc);
- if (apr_password_get("Enter password : ", pwi, &l) != APR_SUCCESS) {
- fprintf(stderr, "Password too long\n");
- exit(ERR_OVERFLOW);
- }
- l = sizeof(pwc);
- if (apr_password_get("Re-type password : ", pwc, &l) != APR_SUCCESS) {
- fprintf(stderr, "Password too long\n");
- exit(ERR_OVERFLOW);
- }
- if (strcmp(pwi, pwc) != 0) {
- fprintf(stderr, "Password verification error\n");
- exit(ERR_PWMISMATCH);
- }
-
- h->userpass = apr_pstrdup(pool, pwi);
- }
- if (need_cmnt && pwd_supplied)
- h->comment = apr_pstrdup(pool, argv[i+3]);
- else if (need_cmnt)
- h->comment = apr_pstrdup(pool, argv[i+2]);
-
- switch (cmd) {
- case HTDBM_VERIFY:
- if ((rv = htdbm_verify(h)) != APR_SUCCESS) {
- if(rv == APR_ENOENT) {
- fprintf(stderr, "The user '%s' could not be found in database\n", h->username);
- exit(ERR_BADUSER);
- }
- else {
- fprintf(stderr, "Password mismatch for user '%s'\n", h->username);
- exit(ERR_PWMISMATCH);
- }
- }
- else
- fprintf(stderr, "Password validated for user '%s'\n", h->username);
- break;
- case HTDBM_DELETE:
- if (htdbm_del(h) != APR_SUCCESS) {
- fprintf(stderr, "Cannot find user '%s' in database\n", h->username);
- exit(ERR_BADUSER);
- }
- h->username = NULL;
- changed = 1;
- break;
- case HTDBM_LIST:
- htdbm_list(h);
- break;
- default:
- htdbm_make(h);
- break;
-
- }
- if (need_file && !h->rdonly) {
- if ((rv = htdbm_save(h, &changed)) != APR_SUCCESS) {
- apr_strerror(rv, errbuf, sizeof(errbuf));
- exit(ERR_FILEPERM);
- }
- fprintf(stdout, "Database %s %s.\n", h->filename,
- h->create ? "created" : (changed ? "modified" : "updated"));
- }
- if (cmd == HTDBM_NOFILE) {
- if (!need_cmnt) {
- fprintf(stderr, "%s:%s\n", h->username, h->userpass);
- }
- else {
- fprintf(stderr, "%s:%s:%s\n", h->username, h->userpass,
- h->comment);
- }
- }
- htdbm_terminate(h);
-
- return 0; /* Suppress compiler warning. */
-}
diff --git a/support/htdbm.dsp b/support/htdbm.dsp
deleted file mode 100644
index 11455a1dd0..0000000000
--- a/support/htdbm.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="htdbm" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=htdbm - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "htdbm.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "htdbm.mak" CFG="htdbm - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "htdbm - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "htdbm - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "htdbm - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/htdbm_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "htdbm - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/htdbm_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "htdbm - Win32 Release"
-# Name "htdbm - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\htdbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\htdbm.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "htdbm - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk htdbm.exe "htdbm Utility" ../include/ap_release.h > .\htdbm.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "htdbm - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk htdbm.exe "htdbm Utility" ../include/ap_release.h > .\htdbm.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/htdigest.c b/support/htdigest.c
deleted file mode 100644
index b3cc07875f..0000000000
--- a/support/htdigest.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/******************************************************************************
- ******************************************************************************
- * NOTE! This program is not safe as a setuid executable! Do not make it
- * setuid!
- ******************************************************************************
- *****************************************************************************/
-/*
- * htdigest.c: simple program for manipulating digest passwd file for Apache
- *
- * by Alexei Kosut, based on htpasswd.c, by Rob McCool
- */
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "apr_md5.h"
-#include "apr_lib.h" /* for apr_getpass() */
-#include "apr_general.h"
-#include "apr_signal.h"
-#include "apr_strings.h" /* for apr_pstrdup() */
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef WIN32
-#include <conio.h>
-#endif
-
-
-#if APR_CHARSET_EBCDIC
-#define LF '\n'
-#define CR '\r'
-#else
-#define LF 10
-#define CR 13
-#endif /* APR_CHARSET_EBCDIC */
-
-#define MAX_STRING_LEN 256
-
-apr_file_t *tfp = NULL;
-apr_file_t *errfile;
-apr_pool_t *cntxt;
-#if APR_CHARSET_EBCDIC
-apr_xlate_t *to_ascii;
-#endif
-
-static void cleanup_tempfile_and_exit(int rc)
-{
- if (tfp) {
- apr_file_close(tfp);
- }
- exit(rc);
-}
-
-static void getword(char *word, char *line, char stop)
-{
- int x = 0, y;
-
- for (x = 0; ((line[x]) && (line[x] != stop)); x++)
- word[x] = line[x];
-
- word[x] = '\0';
- if (line[x])
- ++x;
- y = 0;
-
- while ((line[y++] = line[x++]));
-}
-
-static int get_line(char *s, int n, apr_file_t *f)
-{
- register int i = 0;
- char ch;
- apr_status_t rv = APR_EINVAL;
-
- while (i < (n - 1) &&
- ((rv = apr_file_getc(&ch, f)) == APR_SUCCESS) && (ch != '\n')) {
- s[i++] = ch;
- }
- if (ch == '\n')
- s[i++] = ch;
- s[i] = '\0';
-
- if (rv != APR_SUCCESS)
- return 1;
-
- return 0;
-}
-
-static void putline(apr_file_t *f, char *l)
-{
- int x;
-
- for (x = 0; l[x]; x++)
- apr_file_putc(l[x], f);
-}
-
-
-static void add_password(const char *user, const char *realm, apr_file_t *f)
-{
- char *pw;
- apr_md5_ctx_t context;
- unsigned char digest[16];
- char string[MAX_STRING_LEN];
- char pwin[MAX_STRING_LEN];
- char pwv[MAX_STRING_LEN];
- unsigned int i;
- apr_size_t len = sizeof(pwin);
-
- if (apr_password_get("New password: ", pwin, &len) != APR_SUCCESS) {
- apr_file_printf(errfile, "password too long");
- cleanup_tempfile_and_exit(5);
- }
- len = sizeof(pwin);
- apr_password_get("Re-type new password: ", pwv, &len);
- if (strcmp(pwin, pwv) != 0) {
- apr_file_printf(errfile, "They don't match, sorry.\n");
- cleanup_tempfile_and_exit(1);
- }
- pw = pwin;
- apr_file_printf(f, "%s:%s:", user, realm);
-
- /* Do MD5 stuff */
- sprintf(string, "%s:%s:%s", user, realm, pw);
-
- apr_md5_init(&context);
-#if APR_CHARSET_EBCDIC
- apr_md5_set_xlate(&context, to_ascii);
-#endif
- apr_md5_update(&context, (unsigned char *) string, strlen(string));
- apr_md5_final(digest, &context);
-
- for (i = 0; i < 16; i++)
- apr_file_printf(f, "%02x", digest[i]);
-
- apr_file_printf(f, "\n");
-}
-
-static void usage(void)
-{
- apr_file_printf(errfile, "Usage: htdigest [-c] passwordfile realm username\n");
- apr_file_printf(errfile, "The -c flag creates a new file.\n");
- exit(1);
-}
-
-static void interrupted(void)
-{
- apr_file_printf(errfile, "Interrupted.\n");
- cleanup_tempfile_and_exit(1);
-}
-
-static void terminate(void)
-{
- apr_terminate();
-#ifdef NETWARE
- pressanykey();
-#endif
-}
-
-int main(int argc, const char * const argv[])
-{
- apr_file_t *f;
- apr_status_t rv;
- char tn[] = "htdigest.tmp.XXXXXX";
- char *dirname;
- char user[MAX_STRING_LEN];
- char realm[MAX_STRING_LEN];
- char line[MAX_STRING_LEN];
- char l[MAX_STRING_LEN];
- char w[MAX_STRING_LEN];
- char x[MAX_STRING_LEN];
- int found;
-
- apr_app_initialize(&argc, &argv, NULL);
- atexit(terminate);
- apr_pool_create(&cntxt, NULL);
- apr_file_open_stderr(&errfile, cntxt);
-
-#if APR_CHARSET_EBCDIC
- rv = apr_xlate_open(&to_ascii, "ISO-8859-1", APR_DEFAULT_CHARSET, cntxt);
- if (rv) {
- apr_file_printf(errfile, "apr_xlate_open(): %s (%d)\n",
- apr_strerror(rv, line, sizeof(line)), rv);
- exit(1);
- }
-#endif
-
- apr_signal(SIGINT, (void (*)(int)) interrupted);
- if (argc == 5) {
- if (strcmp(argv[1], "-c"))
- usage();
- rv = apr_file_open(&f, argv[2], APR_WRITE | APR_CREATE, -1, cntxt);
- if (rv != APR_SUCCESS) {
- char errmsg[120];
-
- apr_file_printf(errfile, "Could not open passwd file %s for writing: %s\n",
- argv[2],
- apr_strerror(rv, errmsg, sizeof errmsg));
- exit(1);
- }
- apr_file_printf(errfile, "Adding password for %s in realm %s.\n",
- argv[4], argv[3]);
- add_password(argv[4], argv[3], f);
- apr_file_close(f);
- exit(0);
- }
- else if (argc != 4)
- usage();
-
- if (apr_temp_dir_get((const char**)&dirname, cntxt) != APR_SUCCESS) {
- apr_file_printf(errfile, "%s: could not determine temp dir\n",
- argv[0]);
- exit(1);
- }
- dirname = apr_psprintf(cntxt, "%s/%s", dirname, tn);
-
- if (apr_file_mktemp(&tfp, dirname, 0, cntxt) != APR_SUCCESS) {
- apr_file_printf(errfile, "Could not open temp file %s.\n", dirname);
- exit(1);
- }
-
- if (apr_file_open(&f, argv[1], APR_READ, -1, cntxt) != APR_SUCCESS) {
- apr_file_printf(errfile,
- "Could not open passwd file %s for reading.\n", argv[1]);
- apr_file_printf(errfile, "Use -c option to create new one.\n");
- cleanup_tempfile_and_exit(1);
- }
- apr_cpystrn(user, argv[3], sizeof(user));
- apr_cpystrn(realm, argv[2], sizeof(realm));
-
- found = 0;
- while (!(get_line(line, MAX_STRING_LEN, f))) {
- if (found || (line[0] == '#') || (!line[0])) {
- putline(tfp, line);
- continue;
- }
- strcpy(l, line);
- getword(w, l, ':');
- getword(x, l, ':');
- if (strcmp(user, w) || strcmp(realm, x)) {
- putline(tfp, line);
- continue;
- }
- else {
- apr_file_printf(errfile, "Changing password for user %s in realm %s\n",
- user, realm);
- add_password(user, realm, tfp);
- found = 1;
- }
- }
- if (!found) {
- apr_file_printf(errfile, "Adding user %s in realm %s\n", user, realm);
- add_password(user, realm, tfp);
- }
- apr_file_close(f);
-
- /* The temporary file has all the data, just copy it to the new location.
- */
- if (apr_file_copy(dirname, argv[1], APR_FILE_SOURCE_PERMS, cntxt) !=
- APR_SUCCESS) {
- apr_file_printf(errfile, "%s: unable to update file %s\n",
- argv[0], argv[1]);
- }
- apr_file_close(tfp);
-
- return 0;
-}
diff --git a/support/htdigest.dsp b/support/htdigest.dsp
deleted file mode 100644
index c76329bf86..0000000000
--- a/support/htdigest.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="htdigest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=htdigest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "htdigest.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "htdigest.mak" CFG="htdigest - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "htdigest - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "htdigest - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "htdigest - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/htdigest_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "htdigest - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/htdigest_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "htdigest - Win32 Release"
-# Name "htdigest - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\htdigest.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\htdigest.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "htdigest - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdigest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk htdigest.exe "htdigest Utility" ../include/ap_release.h > .\htdigest.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "htdigest - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdigest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk htdigest.exe "htdigest Utility" ../include/ap_release.h > .\htdigest.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/htpasswd.c b/support/htpasswd.c
deleted file mode 100644
index af03b11c1f..0000000000
--- a/support/htpasswd.c
+++ /dev/null
@@ -1,609 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/******************************************************************************
- ******************************************************************************
- * NOTE! This program is not safe as a setuid executable! Do not make it
- * setuid!
- ******************************************************************************
- *****************************************************************************/
-/*
- * htpasswd.c: simple program for manipulating password file for
- * the Apache HTTP server
- *
- * Originally by Rob McCool
- *
- * Exit values:
- * 0: Success
- * 1: Failure; file access/permission problem
- * 2: Failure; command line syntax problem (usage message issued)
- * 3: Failure; password verification failure
- * 4: Failure; operation interrupted (such as with CTRL/C)
- * 5: Failure; buffer would overflow (username, filename, or computed
- * record too long)
- * 6: Failure; username contains illegal or reserved characters
- * 7: Failure; file is not a valid htpasswd file
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-#include "apr_file_io.h"
-#include "apr_general.h"
-#include "apr_signal.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-
-#include "apr_md5.h"
-#include "apr_sha1.h"
-#include <time.h>
-
-#if APR_HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef WIN32
-#include <conio.h>
-#define unlink _unlink
-#endif
-
-#if !APR_CHARSET_EBCDIC
-#define LF 10
-#define CR 13
-#else /*APR_CHARSET_EBCDIC*/
-#define LF '\n'
-#define CR '\r'
-#endif /*APR_CHARSET_EBCDIC*/
-
-#define MAX_STRING_LEN 256
-#define ALG_PLAIN 0
-#define ALG_CRYPT 1
-#define ALG_APMD5 2
-#define ALG_APSHA 3
-
-#define ERR_FILEPERM 1
-#define ERR_SYNTAX 2
-#define ERR_PWMISMATCH 3
-#define ERR_INTERRUPTED 4
-#define ERR_OVERFLOW 5
-#define ERR_BADUSER 6
-#define ERR_INVALID 7
-
-#define APHTP_NEWFILE 1
-#define APHTP_NOFILE 2
-#define APHTP_NONINTERACTIVE 4
-#define APHTP_DELUSER 8
-
-apr_file_t *errfile;
-apr_file_t *ftemp = NULL;
-
-static void to64(char *s, unsigned long v, int n)
-{
- static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */
- "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
- while (--n >= 0) {
- *s++ = itoa64[v&0x3f];
- v >>= 6;
- }
-}
-
-static void putline(apr_file_t *f, const char *l)
-{
- apr_file_puts(l, f);
-}
-
-/*
- * Make a password record from the given information. A zero return
- * indicates success; failure means that the output buffer contains an
- * error message instead.
- */
-static int mkrecord(char *user, char *record, apr_size_t rlen, char *passwd,
- int alg)
-{
- char *pw;
- char cpw[120];
- char pwin[MAX_STRING_LEN];
- char pwv[MAX_STRING_LEN];
- char salt[9];
- apr_size_t bufsize;
-
- if (passwd != NULL) {
- pw = passwd;
- }
- else {
- bufsize = sizeof(pwin);
- if (apr_password_get("New password: ", pwin, &bufsize) != 0) {
- apr_snprintf(record, (rlen - 1), "password too long (>%"
- APR_SIZE_T_FMT ")", sizeof(pwin) - 1);
- return ERR_OVERFLOW;
- }
- bufsize = sizeof(pwv);
- apr_password_get("Re-type new password: ", pwv, &bufsize);
- if (strcmp(pwin, pwv) != 0) {
- apr_cpystrn(record, "password verification error", (rlen - 1));
- return ERR_PWMISMATCH;
- }
- pw = pwin;
- memset(pwv, '\0', sizeof(pwin));
- }
- switch (alg) {
-
- case ALG_APSHA:
- /* XXX cpw >= 28 + strlen(sha1) chars - fixed len SHA */
- apr_sha1_base64(pw,strlen(pw),cpw);
- break;
-
- case ALG_APMD5:
- (void) srand((int) time((time_t *) NULL));
- to64(&salt[0], rand(), 8);
- salt[8] = '\0';
-
- apr_md5_encode((const char *)pw, (const char *)salt,
- cpw, sizeof(cpw));
- break;
-
- case ALG_PLAIN:
- /* XXX this len limitation is not in sync with any HTTPd len. */
- apr_cpystrn(cpw,pw,sizeof(cpw));
- break;
-
-#if !(defined(WIN32) || defined(NETWARE))
- case ALG_CRYPT:
- default:
- (void) srand((int) time((time_t *) NULL));
- to64(&salt[0], rand(), 8);
- salt[8] = '\0';
-
- apr_cpystrn(cpw, (char *)crypt(pw, salt), sizeof(cpw) - 1);
- break;
-#endif
- }
- memset(pw, '\0', strlen(pw));
-
- /*
- * Check to see if the buffer is large enough to hold the username,
- * hash, and delimiters.
- */
- if ((strlen(user) + 1 + strlen(cpw)) > (rlen - 1)) {
- apr_cpystrn(record, "resultant record too long", (rlen - 1));
- return ERR_OVERFLOW;
- }
- strcpy(record, user);
- strcat(record, ":");
- strcat(record, cpw);
- strcat(record, "\n");
- return 0;
-}
-
-static void usage(void)
-{
- apr_file_printf(errfile, "Usage:\n");
- apr_file_printf(errfile, "\thtpasswd [-cmdpsD] passwordfile username\n");
- apr_file_printf(errfile, "\thtpasswd -b[cmdpsD] passwordfile username "
- "password\n\n");
- apr_file_printf(errfile, "\thtpasswd -n[mdps] username\n");
- apr_file_printf(errfile, "\thtpasswd -nb[mdps] username password\n");
- apr_file_printf(errfile, " -c Create a new file.\n");
- apr_file_printf(errfile, " -n Don't update file; display results on "
- "stdout.\n");
- apr_file_printf(errfile, " -m Force MD5 encryption of the password"
-#if defined(WIN32) || defined(TPF) || defined(NETWARE)
- " (default)"
-#endif
- ".\n");
- apr_file_printf(errfile, " -d Force CRYPT encryption of the password"
-#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
- " (default)"
-#endif
- ".\n");
- apr_file_printf(errfile, " -p Do not encrypt the password (plaintext).\n");
- apr_file_printf(errfile, " -s Force SHA encryption of the password.\n");
- apr_file_printf(errfile, " -b Use the password from the command line "
- "rather than prompting for it.\n");
- apr_file_printf(errfile, " -D Delete the specified user.\n");
- apr_file_printf(errfile,
- "On Windows, NetWare and TPF systems the '-m' flag is used by "
- "default.\n");
- apr_file_printf(errfile,
- "On all other systems, the '-p' flag will probably not work.\n");
- exit(ERR_SYNTAX);
-}
-
-/*
- * Check to see if the specified file can be opened for the given
- * access.
- */
-static int accessible(apr_pool_t *pool, char *fname, int mode)
-{
- apr_file_t *f = NULL;
-
- if (apr_file_open(&f, fname, mode, APR_OS_DEFAULT, pool) != APR_SUCCESS) {
- return 0;
- }
- apr_file_close(f);
- return 1;
-}
-
-/*
- * Return true if the named file exists, regardless of permissions.
- */
-static int exists(char *fname, apr_pool_t *pool)
-{
- apr_finfo_t sbuf;
- apr_status_t check;
-
- check = apr_stat(&sbuf, fname, APR_FINFO_TYPE, pool);
- return ((check || sbuf.filetype != APR_REG) ? 0 : 1);
-}
-
-static void terminate(void)
-{
- apr_terminate();
-#ifdef NETWARE
- pressanykey();
-#endif
-}
-
-static void check_args(apr_pool_t *pool, int argc, const char *const argv[],
- int *alg, int *mask, char **user, char **pwfilename,
- char **password)
-{
- const char *arg;
- int args_left = 2;
- int i;
-
- /*
- * Preliminary check to make sure they provided at least
- * three arguments, we'll do better argument checking as
- * we parse the command line.
- */
- if (argc < 3) {
- usage();
- }
-
- /*
- * Go through the argument list and pick out any options. They
- * have to precede any other arguments.
- */
- for (i = 1; i < argc; i++) {
- arg = argv[i];
- if (*arg != '-') {
- break;
- }
- while (*++arg != '\0') {
- if (*arg == 'c') {
- *mask |= APHTP_NEWFILE;
- }
- else if (*arg == 'n') {
- *mask |= APHTP_NOFILE;
- args_left--;
- }
- else if (*arg == 'm') {
- *alg = ALG_APMD5;
- }
- else if (*arg == 's') {
- *alg = ALG_APSHA;
- }
- else if (*arg == 'p') {
- *alg = ALG_PLAIN;
- }
- else if (*arg == 'd') {
- *alg = ALG_CRYPT;
- }
- else if (*arg == 'b') {
- *mask |= APHTP_NONINTERACTIVE;
- args_left++;
- }
- else if (*arg == 'D') {
- *mask |= APHTP_DELUSER;
- }
- else {
- usage();
- }
- }
- }
-
- if ((*mask & APHTP_NEWFILE) && (*mask & APHTP_NOFILE)) {
- apr_file_printf(errfile, "%s: -c and -n options conflict\n", argv[0]);
- exit(ERR_SYNTAX);
- }
- if ((*mask & APHTP_NEWFILE) && (*mask & APHTP_DELUSER)) {
- apr_file_printf(errfile, "%s: -c and -D options conflict\n", argv[0]);
- exit(ERR_SYNTAX);
- }
- if ((*mask & APHTP_NOFILE) && (*mask & APHTP_DELUSER)) {
- apr_file_printf(errfile, "%s: -n and -D options conflict\n", argv[0]);
- exit(ERR_SYNTAX);
- }
- /*
- * Make sure we still have exactly the right number of arguments left
- * (the filename, the username, and possibly the password if -b was
- * specified).
- */
- if ((argc - i) != args_left) {
- usage();
- }
-
- if (*mask & APHTP_NOFILE) {
- i--;
- }
- else {
- if (strlen(argv[i]) > (APR_PATH_MAX - 1)) {
- apr_file_printf(errfile, "%s: filename too long\n", argv[0]);
- exit(ERR_OVERFLOW);
- }
- *pwfilename = apr_pstrdup(pool, argv[i]);
- if (strlen(argv[i + 1]) > (MAX_STRING_LEN - 1)) {
- apr_file_printf(errfile, "%s: username too long (> %d)\n",
- argv[0], MAX_STRING_LEN - 1);
- exit(ERR_OVERFLOW);
- }
- }
- *user = apr_pstrdup(pool, argv[i + 1]);
- if ((arg = strchr(*user, ':')) != NULL) {
- apr_file_printf(errfile, "%s: username contains illegal "
- "character '%c'\n", argv[0], *arg);
- exit(ERR_BADUSER);
- }
- if (*mask & APHTP_NONINTERACTIVE) {
- if (strlen(argv[i + 2]) > (MAX_STRING_LEN - 1)) {
- apr_file_printf(errfile, "%s: password too long (> %d)\n",
- argv[0], MAX_STRING_LEN);
- exit(ERR_OVERFLOW);
- }
- *password = apr_pstrdup(pool, argv[i + 2]);
- }
-}
-
-/*
- * Let's do it. We end up doing a lot of file opening and closing,
- * but what do we care? This application isn't run constantly.
- */
-int main(int argc, const char * const argv[])
-{
- apr_file_t *fpw = NULL;
- char record[MAX_STRING_LEN];
- char line[MAX_STRING_LEN];
- char *password = NULL;
- char *pwfilename = NULL;
- char *user = NULL;
- char tn[] = "htpasswd.tmp.XXXXXX";
- char *dirname;
- char *scratch, cp[MAX_STRING_LEN];
- int found = 0;
- int i;
- int alg = ALG_CRYPT;
- int mask = 0;
- apr_pool_t *pool;
- int existing_file = 0;
-#if APR_CHARSET_EBCDIC
- apr_status_t rv;
- apr_xlate_t *to_ascii;
-#endif
-
- apr_app_initialize(&argc, &argv, NULL);
- atexit(terminate);
- apr_pool_create(&pool, NULL);
- apr_file_open_stderr(&errfile, pool);
-
-#if APR_CHARSET_EBCDIC
- rv = apr_xlate_open(&to_ascii, "ISO-8859-1", APR_DEFAULT_CHARSET, pool);
- if (rv) {
- apr_file_printf(errfile, "apr_xlate_open(to ASCII)->%d\n", rv);
- exit(1);
- }
- rv = apr_SHA1InitEBCDIC(to_ascii);
- if (rv) {
- apr_file_printf(errfile, "apr_SHA1InitEBCDIC()->%d\n", rv);
- exit(1);
- }
- rv = apr_MD5InitEBCDIC(to_ascii);
- if (rv) {
- apr_file_printf(errfile, "apr_MD5InitEBCDIC()->%d\n", rv);
- exit(1);
- }
-#endif /*APR_CHARSET_EBCDIC*/
-
- check_args(pool, argc, argv, &alg, &mask, &user, &pwfilename, &password);
-
-
-#if defined(WIN32) || defined(NETWARE)
- if (alg == ALG_CRYPT) {
- alg = ALG_APMD5;
- apr_file_printf(errfile, "Automatically using MD5 format.\n");
- }
-#endif
-
-#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
- if (alg == ALG_PLAIN) {
- apr_file_printf(errfile,"Warning: storing passwords as plain text "
- "might just not work on this platform.\n");
- }
-#endif
-
- /*
- * Only do the file checks if we're supposed to frob it.
- */
- if (!(mask & APHTP_NOFILE)) {
- existing_file = exists(pwfilename, pool);
- if (existing_file) {
- /*
- * Check that this existing file is readable and writable.
- */
- if (!accessible(pool, pwfilename, APR_READ | APR_APPEND)) {
- apr_file_printf(errfile, "%s: cannot open file %s for "
- "read/write access\n", argv[0], pwfilename);
- exit(ERR_FILEPERM);
- }
- }
- else {
- /*
- * Error out if -c was omitted for this non-existant file.
- */
- if (!(mask & APHTP_NEWFILE)) {
- apr_file_printf(errfile,
- "%s: cannot modify file %s; use '-c' to create it\n",
- argv[0], pwfilename);
- exit(ERR_FILEPERM);
- }
- /*
- * As it doesn't exist yet, verify that we can create it.
- */
- if (!accessible(pool, pwfilename, APR_CREATE | APR_WRITE)) {
- apr_file_printf(errfile, "%s: cannot create file %s\n",
- argv[0], pwfilename);
- exit(ERR_FILEPERM);
- }
- }
- }
-
- /*
- * All the file access checks (if any) have been made. Time to go to work;
- * try to create the record for the username in question. If that
- * fails, there's no need to waste any time on file manipulations.
- * Any error message text is returned in the record buffer, since
- * the mkrecord() routine doesn't have access to argv[].
- */
- if (!(mask & APHTP_DELUSER)) {
- i = mkrecord(user, record, sizeof(record) - 1,
- password, alg);
- if (i != 0) {
- apr_file_printf(errfile, "%s: %s\n", argv[0], record);
- exit(i);
- }
- if (mask & APHTP_NOFILE) {
- printf("%s\n", record);
- exit(0);
- }
- }
-
- /*
- * We can access the files the right way, and we have a record
- * to add or update. Let's do it..
- */
- if (apr_temp_dir_get((const char**)&dirname, pool) != APR_SUCCESS) {
- apr_file_printf(errfile, "%s: could not determine temp dir\n",
- argv[0]);
- exit(ERR_FILEPERM);
- }
- dirname = apr_psprintf(pool, "%s/%s", dirname, tn);
-
- if (apr_file_mktemp(&ftemp, dirname, 0, pool) != APR_SUCCESS) {
- apr_file_printf(errfile, "%s: unable to create temporary file %s\n",
- argv[0], dirname);
- exit(ERR_FILEPERM);
- }
-
- /*
- * If we're not creating a new file, copy records from the existing
- * one to the temporary file until we find the specified user.
- */
- if (existing_file && !(mask & APHTP_NEWFILE)) {
- if (apr_file_open(&fpw, pwfilename, APR_READ | APR_BUFFERED,
- APR_OS_DEFAULT, pool) != APR_SUCCESS) {
- apr_file_printf(errfile, "%s: unable to read file %s\n",
- argv[0], pwfilename);
- exit(ERR_FILEPERM);
- }
- while (apr_file_gets(line, sizeof(line), fpw) == APR_SUCCESS) {
- char *colon;
-
- strcpy(cp, line);
- scratch = cp;
- while (apr_isspace(*scratch)) {
- ++scratch;
- }
-
- if (!*scratch || (*scratch == '#')) {
- putline(ftemp, line);
- continue;
- }
- /*
- * See if this is our user.
- */
- colon = strchr(scratch, ':');
- if (colon != NULL) {
- *colon = '\0';
- }
- else {
- /*
- * If we've not got a colon on the line, this could well
- * not be a valid htpasswd file.
- * We should bail at this point.
- */
- apr_file_printf(errfile, "\n%s: The file %s does not appear "
- "to be a valid htpasswd file.\n",
- argv[0], pwfilename);
- apr_file_close(fpw);
- exit(ERR_INVALID);
- }
- if (strcmp(user, scratch) != 0) {
- putline(ftemp, line);
- continue;
- }
- else {
- if (!(mask & APHTP_DELUSER)) {
- /* We found the user we were looking for.
- * Add him to the file.
- */
- apr_file_printf(errfile, "Updating ");
- putline(ftemp, record);
- found++;
- }
- else {
- /* We found the user we were looking for.
- * Delete them from the file.
- */
- apr_file_printf(errfile, "Deleting ");
- found++;
- }
- }
- }
- apr_file_close(fpw);
- }
- if (!found && !(mask & APHTP_DELUSER)) {
- apr_file_printf(errfile, "Adding ");
- putline(ftemp, record);
- }
- else if (!found && (mask & APHTP_DELUSER)) {
- apr_file_printf(errfile, "User %s not found\n", user);
- exit(0);
- }
- apr_file_printf(errfile, "password for user %s\n", user);
-
- /* The temporary file has all the data, just copy it to the new location.
- */
- if (apr_file_copy(dirname, pwfilename, APR_FILE_SOURCE_PERMS, pool) !=
- APR_SUCCESS) {
- apr_file_printf(errfile, "%s: unable to update file %s\n",
- argv[0], pwfilename);
- exit(ERR_FILEPERM);
- }
- apr_file_close(ftemp);
- return 0;
-}
diff --git a/support/htpasswd.dsp b/support/htpasswd.dsp
deleted file mode 100644
index cdfdb754d0..0000000000
--- a/support/htpasswd.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="htpasswd" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=htpasswd - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "htpasswd.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "htpasswd.mak" CFG="htpasswd - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "htpasswd - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "htpasswd - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "htpasswd - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/htpasswd_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "htpasswd - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/htpasswd_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "htpasswd - Win32 Release"
-# Name "htpasswd - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\htpasswd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\htpasswd.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "htpasswd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htpasswd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk htpasswd.exe "htpasswd Utility" ../include/ap_release.h > .\htpasswd.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "htpasswd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htpasswd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk htpasswd.exe "htpasswd Utility" ../include/ap_release.h > .\htpasswd.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/list_hooks.pl b/support/list_hooks.pl
deleted file mode 100755
index 8d54778a25..0000000000
--- a/support/list_hooks.pl
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-use strict;
-
-use Carp;
-
-my $path=shift || '.';
-
-findInDir($path);
-
-foreach my $hook (sort keys %::Hooks) {
- my $h=$::Hooks{$hook};
- for my $x (qw(declared implemented type args)) {
- print "$hook datum '$x' missing\n" if !exists $h->{$x};
- }
- print "$hook\n";
- print " declared in $h->{declared}\n" if defined $h->{declared};
- print " implemented in $h->{implemented}\n" if defined $h->{implemented};
- print " type is $h->{type}\n" if defined $h->{type};
- print " $h->{ret} $hook($h->{args})\n" if defined $h->{args};
- print "\n";
-}
-
-sub findInDir {
- my $path=shift;
-
- local(*D);
- opendir(D,$path) || croak "Can't open $path: $!";
- while(my $f=readdir D) {
- next if $f=~/^\./;
- my $file="$path/$f";
-
- if(-d $file) {
- findInDir($file);
- next;
- }
- next if $file !~ /\.[ch]$/;
-
- scanFile($file);
- }
- closedir D;
-}
-
-sub scanFile {
- my $file=shift;
-
-# print "scanning $file\n";
-
- open(F,$file) || croak "Can't open $file: $!";
- while(<F>) {
- next if /\#define/;
- next if /\@deffunc/;
- if(/AP_DECLARE_HOOK\((.*)\)/) {
- my $def=$1;
- my($ret,$name,$args)=$def=~/([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*\((.*)\)/;
- croak "Don't understand $def in $file" if !defined $args;
-# print "found $ret $name($args) in $file\n";
-
- croak "$name declared twice! ($_)"
- if exists $::Hooks{$name}->{declared};
- $::Hooks{$name}->{declared}=$file;
- $::Hooks{$name}->{ret}=$ret;
- $::Hooks{$name}->{args}=$args;
- } elsif(/AP_DECLARE_HOOK\((\s*[^,\s]+)\s*,\s*([^,\s]+)/) {
-# really we should swallow subsequent lines to get the arguments...
- my $name=$2;
- my $ret=$1;
- croak "$name declared twice! ($_)"
- if exists $::Hooks{$name}->{declared};
- $::Hooks{$name}->{declared}=$file;
- $::Hooks{$name}->{ret}=$ret;
- $::Hooks{$name}->{args}='???';
- }
- if(/AP_IMPLEMENT_HOOK_()(VOID)\(([^,\s]+)/
- || /AP_IMPLEMENT(_OPTIONAL|)_HOOK_(.*?)\([^,]+?\s*,\s*([^,\s]+)/) {
- my($type,$name)=($1 ? "OPTIONAL $2" : $2,$3);
-
-# print "found $name $type in $file\n";
-
- croak "$name implemented twice ($::Hooks{$name}->{implemented} and $file) ($_)"
- if exists $::Hooks{$name}->{implemented};
- $::Hooks{$name}->{implemented}=$file;
- $::Hooks{$name}->{type}=$type;
- }
- }
-}
diff --git a/support/log_server_status b/support/log_server_status
deleted file mode 100644
index f1d7f6777c..0000000000
--- a/support/log_server_status
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2003 The Apache Software Foundation. All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-# if any, must include the following acknowledgment:
-# "This product includes software developed by the
-# Apache Software Foundation (http://www.apache.org/)."
-# Alternately, this acknowledgment may appear in the software itself,
-# if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-# not be used to endorse or promote products derived from this
-# software without prior written permission. For written
-# permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-# nor may "Apache" appear in their name, without prior written
-# permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation. For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# Log Server Status
-# Mark J Cox, UK Web Ltd 1996, mark@ukweb.com
-#
-# This script is designed to be run at a frequent interval by something
-# like cron. It connects to the server and downloads the status
-# information. It reformats the information to a single line and logs
-# it to a file. Make sure the directory $wherelog is writable by the
-# user who runs this script.
-#
-require 'sys/socket.ph';
-
-$wherelog = "/var/log/graph/"; # Logs will be like "/var/log/graph/19960312"
-$server = "localhost"; # Name of server, could be "www.foo.com"
-$port = "80"; # Port on server
-$request = "/status/?auto"; # Request to send
-
-sub tcp_connect
-{
- local($host,$port) =@_;
- $sockaddr='S n a4 x8';
- chop($hostname=`hostname`);
- $port=(getservbyname($port, 'tcp'))[2] unless $port =~ /^\d+$/;
- $me=pack($sockaddr,&AF_INET,0,(gethostbyname($hostname))[4]);
- $them=pack($sockaddr,&AF_INET,$port,(gethostbyname($host))[4]);
- socket(S,&PF_INET,&SOCK_STREAM,(getprotobyname('tcp'))[2]) ||
- die "socket: $!";
- bind(S,$me) || return "bind: $!";
- connect(S,$them) || return "connect: $!";
- select(S);
- $| = 1;
- select(stdout);
- return "";
-}
-
-### Main
-
-{
- $year=`date +%y`;
- chomp($year);
- $year += ($year < 70) ? 2000 : 1900;
- $date = $year . `date +%m%d:%H%M%S`;
- chomp($date);
- ($day,$time)=split(/:/,$date);
- $res=&tcp_connect($server,$port);
- open(OUT,">>$wherelog$day");
- if ($res) {
- print OUT "$time:-1:-1:-1:-1:$res\n";
- exit 1;
- }
- print S "GET $request\n";
- while (<S>) {
- $requests=$1 if ( m|^BusyServers:\ (\S+)|);
- $idle=$1 if ( m|^IdleServers:\ (\S+)|);
- $number=$1 if ( m|sses:\ (\S+)|);
- $cpu=$1 if (m|^CPULoad:\ (\S+)|);
- }
- print OUT "$time:$requests:$idle:$number:$cpu\n";
-}
-
-
diff --git a/support/log_server_status.in b/support/log_server_status.in
deleted file mode 100644
index 95ebcaedb2..0000000000
--- a/support/log_server_status.in
+++ /dev/null
@@ -1,77 +0,0 @@
-#!@perlbin@
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# Log Server Status
-# Mark J Cox, UK Web Ltd 1996, mark ukweb.com
-#
-# This script is designed to be run at a frequent interval by something
-# like cron. It connects to the server and downloads the status
-# information. It reformats the information to a single line and logs
-# it to a file. Make sure the directory $wherelog is writable by the
-# user who runs this script.
-#
-require 'sys/socket.ph';
-
-$wherelog = "/var/log/graph/"; # Logs will be like "/var/log/graph/19960312"
-$server = "localhost"; # Name of server, could be "www.foo.com"
-$port = "80"; # Port on server
-$request = "/status/?auto"; # Request to send
-
-sub tcp_connect
-{
- local($host,$port) =@_;
- $sockaddr='S n a4 x8';
- chop($hostname=`hostname`);
- $port=(getservbyname($port, 'tcp'))[2] unless $port =~ /^\d+$/;
- $me=pack($sockaddr,&AF_INET,0,(gethostbyname($hostname))[4]);
- $them=pack($sockaddr,&AF_INET,$port,(gethostbyname($host))[4]);
- socket(S,&PF_INET,&SOCK_STREAM,(getprotobyname('tcp'))[2]) ||
- die "socket: $!";
- bind(S,$me) || return "bind: $!";
- connect(S,$them) || return "connect: $!";
- select(S);
- $| = 1;
- select(stdout);
- return "";
-}
-
-### Main
-
-{
- $year=`date +%y`;
- chomp($year);
- $year += ($year < 70) ? 2000 : 1900;
- $date = $year . `date +%m%d:%H%M%S`;
- chomp($date);
- ($day,$time)=split(/:/,$date);
- $res=&tcp_connect($server,$port);
- open(OUT,">>$wherelog$day");
- if ($res) {
- print OUT "$time:-1:-1:-1:-1:$res\n";
- exit 1;
- }
- print S "GET $request\n";
- while (<S>) {
- $requests=$1 if ( m|^BusyServers:\ (\S+)|);
- $idle=$1 if ( m|^IdleServers:\ (\S+)|);
- $number=$1 if ( m|sses:\ (\S+)|);
- $cpu=$1 if (m|^CPULoad:\ (\S+)|);
- }
- print OUT "$time:$requests:$idle:$number:$cpu\n";
-}
-
-
diff --git a/support/logresolve.c b/support/logresolve.c
deleted file mode 100644
index 024371132c..0000000000
--- a/support/logresolve.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * logresolve 1.1
- *
- * Tom Rathborne - tomr uunet.ca - http://www.uunet.ca/~tomr/
- * UUNET Canada, April 16, 1995
- *
- * Rewritten by David Robinson. (drtr ast.cam.ac.uk)
- *
- * Usage: logresolve [-s filename] [-c] < access_log > new_log
- *
- * Arguments:
- * -s filename name of a file to record statistics
- * -c check the DNS for a matching A record for the host.
- *
- * Notes:
- *
- * To generate meaningful statistics from an HTTPD log file, it's good
- * to have the domain name of each machine that accessed your site, but
- * doing this on the fly can slow HTTPD down.
- *
- * Compiling NCSA HTTPD with the -DMINIMAL_DNS flag turns IP#->hostname
- * resolution off. Before running your stats program, just run your log
- * file through this program (logresolve) and all of your IP numbers will
- * be resolved into hostnames (where possible).
- *
- * logresolve takes an HTTPD access log (in the COMMON log file format,
- * or any other format that has the IP number/domain name as the first
- * field for that matter), and outputs the same file with all of the
- * domain names looked up. Where no domain name can be found, the IP
- * number is left in.
- *
- * To minimize impact on your nameserver, logresolve has its very own
- * internal hash-table cache. This means that each IP number will only
- * be looked up the first time it is found in the log file.
- *
- * The -c option causes logresolve to apply the same check as httpd
- * compiled with -DMAXIMUM_DNS; after finding the hostname from the IP
- * address, it looks up the IP addresses for the hostname and checks
- * that one of these matches the original address.
- */
-
-#include "apr_lib.h"
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#if APR_HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#if APR_HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-static void cgethost(struct in_addr ipnum, char *string, int check);
-static int get_line(char *s, int n);
-static void stats(FILE *output);
-
-#ifdef BEOS
-#define NO_ADDRESS NO_DATA
-#endif
-
-
-/* maximum line length */
-#ifndef MAXLINE
-#define MAXLINE 1024
-#endif
-
-/* maximum length of a domain name */
-#ifndef MAXDNAME
-#define MAXDNAME 256
-#endif
-
-/* number of buckets in cache hash apr_table_t */
-#define BUCKETS 256
-
-/*
- * struct nsrec - record of nameservice for cache linked list
- *
- * ipnum - IP number hostname - hostname noname - nonzero if IP number has no
- * hostname, i.e. hostname=IP number
- */
-
-struct nsrec {
- struct in_addr ipnum;
- char *hostname;
- int noname;
- struct nsrec *next;
-} *nscache[BUCKETS];
-
-/*
- * statistics - obvious
- */
-
-#ifndef h_errno
-#ifdef __CYGWIN__
-extern __declspec(dllimport) int h_errno;
-#else
-extern int h_errno; /* some machines don't have this in their headers */
-#endif
-#endif
-
-/* largest value for h_errno */
-
-#define MAX_ERR (NO_ADDRESS)
-#define UNKNOWN_ERR (MAX_ERR+1)
-#define NO_REVERSE (MAX_ERR+2)
-
-static int cachehits = 0;
-static int cachesize = 0;
-static int entries = 0;
-static int resolves = 0;
-static int withname = 0;
-static int errors[MAX_ERR + 3];
-
-/*
- * cgethost - gets hostname by IP address, caching, and adding unresolvable
- * IP numbers with their IP number as hostname, setting noname flag
- */
-
-static void cgethost (struct in_addr ipnum, char *string, int check)
-{
- struct nsrec **current, *new;
- struct hostent *hostdata;
- char *name;
-
- current = &nscache[((ipnum.s_addr + (ipnum.s_addr >> 8) +
- (ipnum.s_addr >> 16) + (ipnum.s_addr >> 24)) % BUCKETS)];
-
- while (*current != NULL && ipnum.s_addr != (*current)->ipnum.s_addr)
- current = &(*current)->next;
-
- if (*current == NULL) {
- cachesize++;
- new = (struct nsrec *) malloc(sizeof(struct nsrec));
- if (new == NULL) {
- perror("malloc");
- fprintf(stderr, "Insufficient memory\n");
- exit(1);
- }
- *current = new;
- new->next = NULL;
-
- new->ipnum = ipnum;
-
- hostdata = gethostbyaddr((const char *) &ipnum, sizeof(struct in_addr),
- AF_INET);
- if (hostdata == NULL) {
- if (h_errno > MAX_ERR)
- errors[UNKNOWN_ERR]++;
- else
- errors[h_errno]++;
- new->noname = h_errno;
- name = strdup(inet_ntoa(ipnum));
- }
- else {
- new->noname = 0;
- name = strdup(hostdata->h_name);
- if (check) {
- if (name == NULL) {
- perror("strdup");
- fprintf(stderr, "Insufficient memory\n");
- exit(1);
- }
- hostdata = gethostbyname(name);
- if (hostdata != NULL) {
- char **hptr;
-
- for (hptr = hostdata->h_addr_list; *hptr != NULL; hptr++)
- if (((struct in_addr *) (*hptr))->s_addr == ipnum.s_addr)
- break;
- if (*hptr == NULL)
- hostdata = NULL;
- }
- if (hostdata == NULL) {
- fprintf(stderr, "Bad host: %s != %s\n", name,
- inet_ntoa(ipnum));
- new->noname = NO_REVERSE;
- free(name);
- name = strdup(inet_ntoa(ipnum));
- errors[NO_REVERSE]++;
- }
- }
- }
- new->hostname = name;
- if (new->hostname == NULL) {
- perror("strdup");
- fprintf(stderr, "Insufficient memory\n");
- exit(1);
- }
- }
- else
- cachehits++;
-
- /* size of string == MAXDNAME +1 */
- strncpy(string, (*current)->hostname, MAXDNAME);
- string[MAXDNAME] = '\0';
-}
-
-/*
- * prints various statistics to output
- */
-
-static void stats (FILE *output)
-{
- int i;
- char *ipstring;
- struct nsrec *current;
- char *errstring[MAX_ERR + 3];
-
- for (i = 0; i < MAX_ERR + 3; i++)
- errstring[i] = "Unknown error";
- errstring[HOST_NOT_FOUND] = "Host not found";
- errstring[TRY_AGAIN] = "Try again";
- errstring[NO_RECOVERY] = "Non recoverable error";
- errstring[NO_DATA] = "No data record";
- errstring[NO_ADDRESS] = "No address";
- errstring[NO_REVERSE] = "No reverse entry";
-
- fprintf(output, "logresolve Statistics:\n");
-
- fprintf(output, "Entries: %d\n", entries);
- fprintf(output, " With name : %d\n", withname);
- fprintf(output, " Resolves : %d\n", resolves);
- if (errors[HOST_NOT_FOUND])
- fprintf(output, " - Not found : %d\n", errors[HOST_NOT_FOUND]);
- if (errors[TRY_AGAIN])
- fprintf(output, " - Try again : %d\n", errors[TRY_AGAIN]);
- if (errors[NO_DATA])
- fprintf(output, " - No data : %d\n", errors[NO_DATA]);
- if (errors[NO_ADDRESS])
- fprintf(output, " - No address: %d\n", errors[NO_ADDRESS]);
- if (errors[NO_REVERSE])
- fprintf(output, " - No reverse: %d\n", errors[NO_REVERSE]);
- fprintf(output, "Cache hits : %d\n", cachehits);
- fprintf(output, "Cache size : %d\n", cachesize);
- fprintf(output, "Cache buckets : IP number * hostname\n");
-
- for (i = 0; i < BUCKETS; i++)
- for (current = nscache[i]; current != NULL; current = current->next) {
- ipstring = inet_ntoa(current->ipnum);
- if (current->noname == 0)
- fprintf(output, " %3d %15s - %s\n", i, ipstring,
- current->hostname);
- else {
- if (current->noname > MAX_ERR + 2)
- fprintf(output, " %3d %15s : Unknown error\n", i,
- ipstring);
- else
- fprintf(output, " %3d %15s : %s\n", i, ipstring,
- errstring[current->noname]);
- }
- }
-}
-
-
-/*
- * gets a line from stdin
- */
-
-static int get_line (char *s, int n)
-{
- char *cp;
-
- if (!fgets(s, n, stdin))
- return (0);
- cp = strchr(s, '\n');
- if (cp)
- *cp = '\0';
- return (1);
-}
-
-int main (int argc, char *argv[])
-{
- struct in_addr ipnum;
- char *bar, hoststring[MAXDNAME + 1], line[MAXLINE], *statfile;
- int i, check;
-
-#if defined(WIN32) || defined(NETWARE)
- /* If we apr'ify this code, apr_pool_create/apr_pool_destroy
- * should perform the WSAStartup/WSACleanup for us.
- */
- WSADATA wsaData;
- WSAStartup(MAKEWORD(2, 0), &wsaData);
-#endif
-
- check = 0;
- statfile = NULL;
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-c") == 0)
- check = 1;
- else if (strcmp(argv[i], "-s") == 0) {
- if (i == argc - 1) {
- fprintf(stderr, "logresolve: missing filename to -s\n");
- exit(1);
- }
- i++;
- statfile = argv[i];
- }
- else {
- fprintf(stderr, "Usage: logresolve [-s statfile] [-c] < input > output\n");
- exit(0);
- }
- }
-
- for (i = 0; i < BUCKETS; i++)
- nscache[i] = NULL;
- for (i = 0; i < MAX_ERR + 2; i++)
- errors[i] = 0;
-
- while (get_line(line, MAXLINE)) {
- if (line[0] == '\0')
- continue;
- entries++;
- if (!apr_isdigit(line[0])) { /* short cut */
- puts(line);
- withname++;
- continue;
- }
- bar = strchr(line, ' ');
- if (bar != NULL)
- *bar = '\0';
- ipnum.s_addr = inet_addr(line);
- if (ipnum.s_addr == 0xffffffffu) {
- if (bar != NULL)
- *bar = ' ';
- puts(line);
- withname++;
- continue;
- }
-
- resolves++;
-
- cgethost(ipnum, hoststring, check);
- if (bar != NULL)
- printf("%s %s\n", hoststring, bar + 1);
- else
- puts(hoststring);
- }
-
-#if defined(WIN32) || defined(NETWARE)
- WSACleanup();
-#endif
-
- if (statfile != NULL) {
- FILE *fp;
- fp = fopen(statfile, "w");
- if (fp == NULL) {
- fprintf(stderr, "logresolve: could not open statistics file '%s'\n"
- ,statfile);
- exit(1);
- }
- stats(fp);
- fclose(fp);
- }
-
- return (0);
-}
diff --git a/support/logresolve.dsp b/support/logresolve.dsp
deleted file mode 100644
index 5423523da0..0000000000
--- a/support/logresolve.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="logresolve" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=logresolve - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "logresolve.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "logresolve.mak" CFG="logresolve - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "logresolve - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "logresolve - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "logresolve - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/logresolve_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "logresolve - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/logresolve_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "logresolve - Win32 Release"
-# Name "logresolve - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\logresolve.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\logresolve.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "logresolve - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\logresolve.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk logresolve.exe "logresolve Utility" ../include/ap_release.h > .\logresolve.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "logresolve - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\logresolve.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk logresolve.exe "logresolve Utility" ../include/ap_release.h > .\logresolve.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/logresolve.pl b/support/logresolve.pl
deleted file mode 100644
index b99a5b8d83..0000000000
--- a/support/logresolve.pl
+++ /dev/null
@@ -1,261 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation. All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-# if any, must include the following acknowledgment:
-# "This product includes software developed by the
-# Apache Software Foundation (http://www.apache.org/)."
-# Alternately, this acknowledgment may appear in the software itself,
-# if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-# not be used to endorse or promote products derived from this
-# software without prior written permission. For written
-# permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-# nor may "Apache" appear in their name, without prior written
-# permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation. For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# logresolve.pl
-#
-# v 1.2 by robh @ imdb.com
-#
-# usage: logresolve.pl <infile >outfile
-#
-# input = Apache/NCSA/.. logfile with IP numbers at start of lines
-# output = same logfile with IP addresses resolved to hostnames where
-# name lookups succeeded.
-#
-# this differs from the C based 'logresolve' in that this script
-# spawns a number ($CHILDREN) of subprocesses to resolve addresses
-# concurrently and sets a short timeout ($TIMEOUT) for each lookup in
-# order to keep things moving quickly.
-#
-# the parent process handles caching of IP->hostnames using a Perl hash
-# it also avoids sending the same IP to multiple child processes to be
-# resolved multiple times concurrently.
-#
-# Depending on the settings of $CHILDREN and $TIMEOUT you should see
-# significant reductions in the overall time taken to resolve your
-# logfiles. With $CHILDREN=40 and $TIMEOUT=5 I've seen 200,000 - 300,000
-# logfile lines processed per hour compared to ~45,000 per hour
-# with 'logresolve'.
-#
-# I haven't yet seen any noticable reduction in the percentage of IPs
-# that fail to get resolved. Your mileage will no doubt vary. 5s is long
-# enough to wait IMO.
-#
-# Known to work with FreeBSD 2.2
-# Known to have problems with Solaris
-#
-# 980417 - use 'sockaddr_un' for bind/connect to make the script work
-# with linux. Fix from Luuk de Boer <luuk_de_boer@pi.net>
-
-require 5.004;
-
-$|=1;
-
-use FileHandle;
-use Socket;
-
-use strict;
-no strict 'refs';
-
-use vars qw($PROTOCOL);
-$PROTOCOL = 0;
-
-my $CHILDREN = 40;
-my $TIMEOUT = 5;
-
-my $filename;
-my %hash = ();
-my $parent = $$;
-
-my @children = ();
-for (my $child = 1; $child <=$CHILDREN; $child++) {
- my $f = fork();
- if (!$f) {
- $filename = "./.socket.$parent.$child";
- if (-e $filename) { unlink($filename) || warn "$filename .. $!\n";}
- &child($child);
- exit(0);
- }
- push(@children, $f);
-}
-
-&parent;
-&cleanup;
-
-## remove all temporary files before shutting down
-sub cleanup {
- # die kiddies, die
- kill(15, @children);
- for (my $child = 1; $child <=$CHILDREN; $child++) {
- if (-e "./.socket.$parent.$child") {
- unlink("./.socket.$parent.$child")
- || warn ".socket.$parent.$child $!";
- }
- }
-}
-
-sub parent {
- # Trap some possible signals to trigger temp file cleanup
- $SIG{'KILL'} = $SIG{'INT'} = $SIG{'PIPE'} = \&cleanup;
-
- my %CHILDSOCK;
- my $filename;
-
- ## fork child processes. Each child will create a socket connection
- ## to this parent and use an unique temp filename to do so.
- for (my $child = 1; $child <=$CHILDREN; $child++) {
- $CHILDSOCK{$child}= FileHandle->new;
-
- if (!socket($CHILDSOCK{$child}, AF_UNIX, SOCK_STREAM, $PROTOCOL)) {
- warn "parent socket to child failed $!";
- }
- $filename = "./.socket.$parent.$child";
- my $response;
- do {
- $response = connect($CHILDSOCK{$child}, sockaddr_un($filename));
- if ($response != 1) {
- sleep(1);
- }
- } while ($response != 1);
- $CHILDSOCK{$child}->autoflush;
- }
- ## All child processes should now be ready or at worst warming up
-
- my (@buffer, $child, $ip, $rest, $hostname, $response);
- ## read the logfile lines from STDIN
- while(<STDIN>) {
- @buffer = (); # empty the logfile line buffer array.
- $child = 1; # children are numbered 1..N, start with #1
-
- # while we have a child to talk to and data to give it..
- do {
- push(@buffer, $_); # buffer the line
- ($ip, $rest) = split(/ /, $_, 2); # separate IP form rest
-
- unless ($hash{$ip}) { # resolve if unseen IP
- $CHILDSOCK{$child}->print("$ip\n"); # pass IP to next child
- $hash{$ip} = $ip; # don't look it up again.
- $child++;
- }
- } while (($child < ($CHILDREN-1)) and ($_ = <STDIN>));
-
- ## now poll each child for a response
- while (--$child > 0) {
- $response = $CHILDSOCK{$child}->getline;
- chomp($response);
- # child sends us back both the IP and HOSTNAME, no need for us
- # to remember what child received any given IP, and no worries
- # what order we talk to the children
- ($ip, $hostname) = split(/\|/, $response, 2);
- $hash{$ip} = $hostname;
- }
-
- # resolve all the logfiles lines held in the log buffer array..
- for (my $line = 0; $line <=$#buffer; $line++) {
- # get next buffered line
- ($ip, $rest) = split(/ /, $buffer[$line], 2);
- # separate IP from rest and replace with cached hostname
- printf STDOUT ("%s %s", $hash{$ip}, $rest);
- }
- }
-}
-
-########################################
-
-sub child {
- # arg = numeric ID - how the parent refers to me
- my $me = shift;
-
- # add trap for alarm signals.
- $SIG{'ALRM'} = sub { die "alarmed"; };
-
- # create a socket to communicate with parent
- socket(INBOUND, AF_UNIX, SOCK_STREAM, $PROTOCOL)
- || die "Error with Socket: !$\n";
- $filename = "./.socket.$parent.$me";
- bind(INBOUND, sockaddr_un($filename))
- || die "Error Binding $filename: $!\n";
- listen(INBOUND, 5) || die "Error Listening: $!\n";
-
- my ($ip, $send_back);
- my $talk = FileHandle->new;
-
- # accept a connection from the parent process. We only ever have
- # have one connection where we exchange 1 line of info with the
- # parent.. 1 line in (IP address), 1 line out (IP + hostname).
- accept($talk, INBOUND) || die "Error Accepting: $!\n";
- # disable I/O buffering just in case
- $talk->autoflush;
- # while the parent keeps sending data, we keep responding..
- while(($ip = $talk->getline)) {
- chomp($ip);
- # resolve the IP if time permits and send back what we found..
- $send_back = sprintf("%s|%s", $ip, &nslookup($ip));
- $talk->print($send_back."\n");
- }
-}
-
-# perform a time restricted hostname lookup.
-sub nslookup {
- # get the IP as an arg
- my $ip = shift;
- my $hostname = undef;
-
- # do the hostname lookup inside an eval. The eval will use the
- # already configured SIGnal handler and drop out of the {} block
- # regardless of whether the alarm occured or not.
- eval {
- alarm($TIMEOUT);
- $hostname = gethostbyaddr(gethostbyname($ip), AF_INET);
- alarm(0);
- };
- if ($@ =~ /alarm/) {
- # useful for debugging perhaps..
- # print "alarming, isn't it? ($ip)";
- }
-
- # return the hostname or the IP address itself if there is no hostname
- $hostname ne "" ? $hostname : $ip;
-}
-
-
diff --git a/support/logresolve.pl.in b/support/logresolve.pl.in
deleted file mode 100644
index 086febd6fd..0000000000
--- a/support/logresolve.pl.in
+++ /dev/null
@@ -1,224 +0,0 @@
-#!@perlbin@
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# logresolve.pl
-#
-# v 1.2 by robh imdb.com
-#
-# usage: logresolve.pl <infile >outfile
-#
-# input = Apache/NCSA/.. logfile with IP numbers at start of lines
-# output = same logfile with IP addresses resolved to hostnames where
-# name lookups succeeded.
-#
-# this differs from the C based 'logresolve' in that this script
-# spawns a number ($CHILDREN) of subprocesses to resolve addresses
-# concurrently and sets a short timeout ($TIMEOUT) for each lookup in
-# order to keep things moving quickly.
-#
-# the parent process handles caching of IP->hostnames using a Perl hash
-# it also avoids sending the same IP to multiple child processes to be
-# resolved multiple times concurrently.
-#
-# Depending on the settings of $CHILDREN and $TIMEOUT you should see
-# significant reductions in the overall time taken to resolve your
-# logfiles. With $CHILDREN=40 and $TIMEOUT=5 I've seen 200,000 - 300,000
-# logfile lines processed per hour compared to ~45,000 per hour
-# with 'logresolve'.
-#
-# I haven't yet seen any noticable reduction in the percentage of IPs
-# that fail to get resolved. Your mileage will no doubt vary. 5s is long
-# enough to wait IMO.
-#
-# Known to work with FreeBSD 2.2
-# Known to have problems with Solaris
-#
-# 980417 - use 'sockaddr_un' for bind/connect to make the script work
-# with linux. Fix from Luuk de Boer <luuk_de_boer pi.net>
-
-require 5.004;
-
-$|=1;
-
-use FileHandle;
-use Socket;
-
-use strict;
-no strict 'refs';
-
-use vars qw($PROTOCOL);
-$PROTOCOL = 0;
-
-my $CHILDREN = 40;
-my $TIMEOUT = 5;
-
-my $filename;
-my %hash = ();
-my $parent = $$;
-
-my @children = ();
-for (my $child = 1; $child <=$CHILDREN; $child++) {
- my $f = fork();
- if (!$f) {
- $filename = "./.socket.$parent.$child";
- if (-e $filename) { unlink($filename) || warn "$filename .. $!\n";}
- &child($child);
- exit(0);
- }
- push(@children, $f);
-}
-
-&parent;
-&cleanup;
-
-## remove all temporary files before shutting down
-sub cleanup {
- # die kiddies, die
- kill(15, @children);
- for (my $child = 1; $child <=$CHILDREN; $child++) {
- if (-e "./.socket.$parent.$child") {
- unlink("./.socket.$parent.$child")
- || warn ".socket.$parent.$child $!";
- }
- }
-}
-
-sub parent {
- # Trap some possible signals to trigger temp file cleanup
- $SIG{'KILL'} = $SIG{'INT'} = $SIG{'PIPE'} = \&cleanup;
-
- my %CHILDSOCK;
- my $filename;
-
- ## fork child processes. Each child will create a socket connection
- ## to this parent and use an unique temp filename to do so.
- for (my $child = 1; $child <=$CHILDREN; $child++) {
- $CHILDSOCK{$child}= FileHandle->new;
-
- if (!socket($CHILDSOCK{$child}, AF_UNIX, SOCK_STREAM, $PROTOCOL)) {
- warn "parent socket to child failed $!";
- }
- $filename = "./.socket.$parent.$child";
- my $response;
- do {
- $response = connect($CHILDSOCK{$child}, sockaddr_un($filename));
- if ($response != 1) {
- sleep(1);
- }
- } while ($response != 1);
- $CHILDSOCK{$child}->autoflush;
- }
- ## All child processes should now be ready or at worst warming up
-
- my (@buffer, $child, $ip, $rest, $hostname, $response);
- ## read the logfile lines from STDIN
- while(<STDIN>) {
- @buffer = (); # empty the logfile line buffer array.
- $child = 1; # children are numbered 1..N, start with #1
-
- # while we have a child to talk to and data to give it..
- do {
- push(@buffer, $_); # buffer the line
- ($ip, $rest) = split(/ /, $_, 2); # separate IP form rest
-
- unless ($hash{$ip}) { # resolve if unseen IP
- $CHILDSOCK{$child}->print("$ip\n"); # pass IP to next child
- $hash{$ip} = $ip; # don't look it up again.
- $child++;
- }
- } while (($child < ($CHILDREN-1)) and ($_ = <STDIN>));
-
- ## now poll each child for a response
- while (--$child > 0) {
- $response = $CHILDSOCK{$child}->getline;
- chomp($response);
- # child sends us back both the IP and HOSTNAME, no need for us
- # to remember what child received any given IP, and no worries
- # what order we talk to the children
- ($ip, $hostname) = split(/\|/, $response, 2);
- $hash{$ip} = $hostname;
- }
-
- # resolve all the logfiles lines held in the log buffer array..
- for (my $line = 0; $line <=$#buffer; $line++) {
- # get next buffered line
- ($ip, $rest) = split(/ /, $buffer[$line], 2);
- # separate IP from rest and replace with cached hostname
- printf STDOUT ("%s %s", $hash{$ip}, $rest);
- }
- }
-}
-
-########################################
-
-sub child {
- # arg = numeric ID - how the parent refers to me
- my $me = shift;
-
- # add trap for alarm signals.
- $SIG{'ALRM'} = sub { die "alarmed"; };
-
- # create a socket to communicate with parent
- socket(INBOUND, AF_UNIX, SOCK_STREAM, $PROTOCOL)
- || die "Error with Socket: !$\n";
- $filename = "./.socket.$parent.$me";
- bind(INBOUND, sockaddr_un($filename))
- || die "Error Binding $filename: $!\n";
- listen(INBOUND, 5) || die "Error Listening: $!\n";
-
- my ($ip, $send_back);
- my $talk = FileHandle->new;
-
- # accept a connection from the parent process. We only ever have
- # have one connection where we exchange 1 line of info with the
- # parent.. 1 line in (IP address), 1 line out (IP + hostname).
- accept($talk, INBOUND) || die "Error Accepting: $!\n";
- # disable I/O buffering just in case
- $talk->autoflush;
- # while the parent keeps sending data, we keep responding..
- while(($ip = $talk->getline)) {
- chomp($ip);
- # resolve the IP if time permits and send back what we found..
- $send_back = sprintf("%s|%s", $ip, &nslookup($ip));
- $talk->print($send_back."\n");
- }
-}
-
-# perform a time restricted hostname lookup.
-sub nslookup {
- # get the IP as an arg
- my $ip = shift;
- my $hostname = undef;
-
- # do the hostname lookup inside an eval. The eval will use the
- # already configured SIGnal handler and drop out of the {} block
- # regardless of whether the alarm occured or not.
- eval {
- alarm($TIMEOUT);
- $hostname = gethostbyaddr(gethostbyname($ip), AF_INET);
- alarm(0);
- };
- if ($@ =~ /alarm/) {
- # useful for debugging perhaps..
- # print "alarming, isn't it? ($ip)";
- }
-
- # return the hostname or the IP address itself if there is no hostname
- $hostname ne "" ? $hostname : $ip;
-}
-
-
diff --git a/support/phf_abuse_log.cgi b/support/phf_abuse_log.cgi
deleted file mode 100644
index 87543ce5f4..0000000000
--- a/support/phf_abuse_log.cgi
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl
-
-# This script is used to detect people trying to abuse the security hole which
-# existed in A CGI script direstributed with Apache 1.0.3 and earlier versions.
-# You can redirect them to here using the "<Location /cgi-bin/phf*>" suggestion
-# in httpd.conf.
-#
-# The format logged to is
-# "[date] remote_addr remote_host [date] referrer user_agent".
-
-$LOG = "/var/log/phf_log";
-
-require "ctime.pl";
-$when = &ctime(time);
-$when =~ s/\n//go;
-$ENV{HTTP_USER_AGENT} .= " via $ENV{HTTP_VIA}" if($ENV{HTTP_VIA});
-
-open(LOG, ">>$LOG") || die "boo hoo, phf_log $!";
-print LOG "[$when] $ENV{REMOTE_ADDR} $ENV{REMOTE_HOST} $ENV{$HTTP_REFERER} $ENV{HTTP_USER_AGENT}\n";
-close(LOG);
-
-print "Content-type: text/html\r\n\r\n<BLINK>Smile, you're on Candid Camera.</BLINK>\n";
diff --git a/support/phf_abuse_log.cgi.in b/support/phf_abuse_log.cgi.in
deleted file mode 100644
index 5bc118df03..0000000000
--- a/support/phf_abuse_log.cgi.in
+++ /dev/null
@@ -1,37 +0,0 @@
-#!@perlbin@
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# This script is used to detect people trying to abuse the security hole which
-# existed in A CGI script direstributed with Apache 1.0.3 and earlier versions.
-# You can redirect them to here using the "<Location /cgi-bin/phf*>" suggestion
-# in httpd.conf.
-#
-# The format logged to is
-# "[date] remote_addr remote_host [date] referrer user_agent".
-
-$LOG = "/var/log/phf_log";
-
-require "ctime.pl";
-$when = &ctime(time);
-$when =~ s/\n//go;
-$ENV{HTTP_USER_AGENT} .= " via $ENV{HTTP_VIA}" if($ENV{HTTP_VIA});
-
-open(LOG, ">>$LOG") || die "boo hoo, phf_log $!";
-print LOG "[$when] $ENV{REMOTE_ADDR} $ENV{REMOTE_HOST} $ENV{$HTTP_REFERER} $ENV{HTTP_USER_AGENT}\n";
-close(LOG);
-
-print "Content-type: text/html\r\n\r\n<BLINK>Smile, you're on Candid Camera.</BLINK>\n";
diff --git a/support/rotatelogs.c b/support/rotatelogs.c
deleted file mode 100644
index 5f17dd534a..0000000000
--- a/support/rotatelogs.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Simple program to rotate Apache logs without having to kill the server.
- *
- * Contributed by Ben Laurie <ben algroup.co.uk>
- *
- * 12 Mar 1996
- *
- * Ported to APR by Mladen Turk <mturk mappingsoft.com>
- *
- * 23 Sep 2001
- *
- * -l option added 2004-06-11
- *
- * -l causes the use of local time rather than GMT as the base for the
- * interval. NB: Using -l in an environment which changes the GMT offset
- * (such as for BST or DST) can lead to unpredictable results!
- *
- */
-
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-#include "apr_file_io.h"
-#include "apr_file_info.h"
-#include "apr_general.h"
-#include "apr_time.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#define BUFSIZE 65536
-#define ERRMSGSZ 82
-
-#ifndef MAX_PATH
-#define MAX_PATH 1024
-#endif
-
-int main (int argc, const char * const argv[])
-{
- char buf[BUFSIZE], buf2[MAX_PATH], errbuf[ERRMSGSZ];
- int tLogEnd = 0, tRotation = 0, utc_offset = 0;
- unsigned int sRotation = 0;
- int nMessCount = 0;
- apr_size_t nRead, nWrite;
- int use_strftime = 0;
- int use_localtime = 0;
- int now = 0;
- const char *szLogRoot;
- apr_file_t *f_stdin, *nLogFD = NULL, *nLogFDprev = NULL;
- apr_pool_t *pool;
- char *ptr = NULL;
- int argBase = 0;
- int argFile = 1;
- int argIntv = 2;
- int argOffset = 3;
-
- apr_app_initialize(&argc, &argv, NULL);
- atexit(apr_terminate);
-
- apr_pool_create(&pool, NULL);
- if ((argc > 2) && (strcmp(argv[1], "-l") == 0)) {
- argBase++;
- argFile += argBase;
- argIntv += argBase;
- argOffset += argBase;
- use_localtime = 1;
- }
- if (argc < (argBase + 3) || argc > (argBase + 4)) {
- fprintf(stderr,
- "Usage: %s [-l] <logfile> <rotation time in seconds> "
- "[offset minutes from UTC] or <rotation size in megabytes>\n\n",
- argv[0]);
-#ifdef OS2
- fprintf(stderr,
- "Add this:\n\nTransferLog \"|%s.exe /some/where 86400\"\n\n",
- argv[0]);
-#else
- fprintf(stderr,
- "Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
- argv[0]);
- fprintf(stderr,
- "or \n\nTransferLog \"|%s /some/where 5M\"\n\n", argv[0]);
-#endif
- fprintf(stderr,
- "to httpd.conf. The generated name will be /some/where.nnnn "
- "where nnnn is the\nsystem time at which the log nominally "
- "starts (N.B. if using a rotation time,\nthe time will always "
- "be a multiple of the rotation time, so you can synchronize\n"
- "cron scripts with it). At the end of each rotation time or "
- "when the file size\nis reached a new log is started.\n");
- exit(1);
- }
-
- szLogRoot = argv[argFile];
-
- ptr = strchr(argv[argIntv], 'M');
- if (ptr) {
- if (*(ptr+1) == '\0') {
- sRotation = atoi(argv[argIntv]) * 1048576;
- }
- if (sRotation == 0) {
- fprintf(stderr, "Invalid rotation size parameter\n");
- exit(1);
- }
- }
- else {
- if (argc >= (argBase + 4)) {
- utc_offset = atoi(argv[argOffset]) * 60;
- }
- tRotation = atoi(argv[argIntv]);
- if (tRotation <= 0) {
- fprintf(stderr, "Rotation time must be > 0\n");
- exit(6);
- }
- }
-
- use_strftime = (strchr(szLogRoot, '%') != NULL);
- if (apr_file_open_stdin(&f_stdin, pool) != APR_SUCCESS) {
- fprintf(stderr, "Unable to open stdin\n");
- exit(1);
- }
-
- for (;;) {
- nRead = sizeof(buf);
- if (apr_file_read(f_stdin, buf, &nRead) != APR_SUCCESS) {
- exit(3);
- }
- if (tRotation) {
- /*
- * Check for our UTC offset every time through the loop, since
- * it might change if there's a switch between standard and
- * daylight savings time.
- */
- if (use_localtime) {
- apr_time_exp_t lt;
- apr_time_exp_lt(&lt, apr_time_now());
- utc_offset = lt.tm_gmtoff;
- }
- now = (int)(apr_time_now() / APR_USEC_PER_SEC) + utc_offset;
- if (nLogFD != NULL && now >= tLogEnd) {
- nLogFDprev = nLogFD;
- nLogFD = NULL;
- }
- }
- else if (sRotation) {
- apr_finfo_t finfo;
- apr_off_t current_size = -1;
-
- if ((nLogFD != NULL) &&
- (apr_file_info_get(&finfo, APR_FINFO_SIZE, nLogFD) == APR_SUCCESS)) {
- current_size = finfo.size;
- }
-
- if (current_size > sRotation) {
- nLogFDprev = nLogFD;
- nLogFD = NULL;
- }
- }
- else {
- fprintf(stderr, "No rotation time or size specified\n");
- exit(2);
- }
-
- if (nLogFD == NULL) {
- int tLogStart;
-
- if (tRotation) {
- tLogStart = (now / tRotation) * tRotation;
- }
- else {
- tLogStart = (int)apr_time_sec(apr_time_now());
- }
-
- if (use_strftime) {
- apr_time_t tNow = apr_time_from_sec(tLogStart);
- apr_time_exp_t e;
- apr_size_t rs;
-
- apr_time_exp_gmt(&e, tNow);
- apr_strftime(buf2, &rs, sizeof(buf2), szLogRoot, &e);
- }
- else {
- sprintf(buf2, "%s.%010d", szLogRoot, tLogStart);
- }
- tLogEnd = tLogStart + tRotation;
- apr_file_open(&nLogFD, buf2, APR_READ | APR_WRITE | APR_CREATE | APR_APPEND,
- APR_OS_DEFAULT, pool);
- if (nLogFD == NULL) {
- /* Uh-oh. Failed to open the new log file. Try to clear
- * the previous log file, note the lost log entries,
- * and keep on truckin'. */
- if (nLogFDprev == NULL) {
- fprintf(stderr, "1 Previous file handle doesn't exists %s\n", buf2);
- exit(2);
- }
- else {
- nLogFD = nLogFDprev;
- sprintf(errbuf,
- "Resetting log file due to error opening "
- "new log file. %10d messages lost.\n",
- nMessCount);
- nWrite = strlen(errbuf);
- apr_file_trunc(nLogFD, 0);
- if (apr_file_write(nLogFD, errbuf, &nWrite) != APR_SUCCESS) {
- fprintf(stderr, "Error writing to the file %s\n", buf2);
- exit(2);
- }
- }
- }
- else if (nLogFDprev) {
- apr_file_close(nLogFDprev);
- }
- nMessCount = 0;
- }
- nWrite = nRead;
- apr_file_write(nLogFD, buf, &nWrite);
- if (nWrite != nRead) {
- nMessCount++;
- sprintf(errbuf,
- "Error writing to log file. "
- "%10d messages lost.\n",
- nMessCount);
- nWrite = strlen(errbuf);
- apr_file_trunc(nLogFD, 0);
- if (apr_file_write(nLogFD, errbuf, &nWrite) != APR_SUCCESS) {
- fprintf(stderr, "Error writing to the file %s\n", buf2);
- exit(2);
- }
- }
- else {
- nMessCount++;
- }
- }
- /* Of course we never, but prevent compiler warnings */
- return 0;
-}
diff --git a/support/rotatelogs.dsp b/support/rotatelogs.dsp
deleted file mode 100644
index 544cf502ad..0000000000
--- a/support/rotatelogs.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="rotatelogs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=rotatelogs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "rotatelogs.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "rotatelogs.mak" CFG="rotatelogs - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "rotatelogs - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "rotatelogs - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "rotatelogs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/rotatelogs_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "rotatelogs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/rotatelogs_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "rotatelogs - Win32 Release"
-# Name "rotatelogs - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\rotatelogs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\rotatelogs.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "rotatelogs - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\rotatelogs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk rotatelogs.exe "rotatelogs Utility" ../include/ap_release.h > .\rotatelogs.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "rotatelogs - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\rotatelogs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../build/win32/win32ver.awk rotatelogs.exe "rotatelogs Utility" ../include/ap_release.h > .\rotatelogs.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/split-logfile b/support/split-logfile
deleted file mode 100644
index c0f34861aa..0000000000
--- a/support/split-logfile
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2001 The Apache Software Foundation. All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-# if any, must include the following acknowledgment:
-# "This product includes software developed by the
-# Apache Software Foundation (http://www.apache.org/)."
-# Alternately, this acknowledgment may appear in the software itself,
-# if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-# not be used to endorse or promote products derived from this
-# software without prior written permission. For written
-# permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-# nor may "Apache" appear in their name, without prior written
-# permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation. For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-
-# This script will take a combined Web server access
-# log file and break its contents into separate files.
-# It assumes that the first field of each line is the
-# virtual host identity (put there by "%v"), and that
-# the logfiles should be named that+".log" in the current
-# directory.
-#
-# The combined log file is read from stdin. Records read
-# will be appended to any existing log files.
-#
-%is_open = ();
-
-while ($log_line = <STDIN>) {
- #
- # Get the first token from the log record; it's the
- # identity of the virtual host to which the record
- # applies.
- #
- ($vhost) = split (/\s/, $log_line);
- #
- # Normalize the virtual host name to all lowercase.
- # If it's blank, the request was handled by the default
- # server, so supply a default name. This shouldn't
- # happen, but caution rocks.
- #
- $vhost = lc ($vhost) or "access";
- #
- # If the log file for this virtual host isn't opened
- # yet, do it now.
- #
- if (! $is_open{$vhost}) {
- open $vhost, ">>${vhost}.log"
- or die ("Can't open ${vhost}.log");
- $is_open{$vhost} = 1;
- }
- #
- # Strip off the first token (which may be null in the
- # case of the default server), and write the edited
- # record to the current log file.
- #
- $log_line =~ s/^\S*\s+//;
- printf $vhost "%s", $log_line;
-}
-exit 0;
diff --git a/support/split-logfile.in b/support/split-logfile.in
deleted file mode 100644
index 9375495d65..0000000000
--- a/support/split-logfile.in
+++ /dev/null
@@ -1,66 +0,0 @@
-#!@perlbin@
-#
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# This script will take a combined Web server access
-# log file and break its contents into separate files.
-# It assumes that the first field of each line is the
-# virtual host identity (put there by "%v"), and that
-# the logfiles should be named that+".log" in the current
-# directory.
-#
-# The combined log file is read from stdin. Records read
-# will be appended to any existing log files.
-#
-%is_open = ();
-
-while ($log_line = <STDIN>) {
- #
- # Get the first token from the log record; it's the
- # identity of the virtual host to which the record
- # applies.
- #
- ($vhost) = split (/\s/, $log_line);
- #
- # Normalize the virtual host name to all lowercase.
- # If it's blank, the request was handled by the default
- # server, so supply a default name. This shouldn't
- # happen, but caution rocks.
- #
- $vhost = lc ($vhost) or "access";
- #
- # if the vhost contains a "/" or "\", it is illegal so just use
- # the default log to avoid any security issues due if it is interprted
- # as a directory separator.
- if ($vhost =~ m#[/\\]#) { $vhost = "access" }
- #
- # If the log file for this virtual host isn't opened
- # yet, do it now.
- #
- if (! $is_open{$vhost}) {
- open $vhost, ">>${vhost}.log"
- or die ("Can't open ${vhost}.log");
- $is_open{$vhost} = 1;
- }
- #
- # Strip off the first token (which may be null in the
- # case of the default server), and write the edited
- # record to the current log file.
- #
- $log_line =~ s/^\S*\s+//;
- printf $vhost "%s", $log_line;
-}
-exit 0;
diff --git a/support/suexec.c b/support/suexec.c
deleted file mode 100644
index e2118f28e7..0000000000
--- a/support/suexec.c
+++ /dev/null
@@ -1,635 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * suexec.c -- "Wrapper" support program for suEXEC behaviour for Apache
- *
- ***********************************************************************
- *
- * NOTE! : DO NOT edit this code!!! Unless you know what you are doing,
- * editing this code might open up your system in unexpected
- * ways to would-be crackers. Every precaution has been taken
- * to make this code as safe as possible; alter it at your own
- * risk.
- *
- ***********************************************************************
- *
- *
- */
-
-#include "apr.h"
-#include "ap_config.h"
-#include "suexec.h"
-
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <string.h>
-#include <time.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-
-/*
- ***********************************************************************
- * There is no initgroups() in QNX, so I believe this is safe :-)
- * Use cc -osuexec -3 -O -mf -DQNX suexec.c to compile.
- *
- * May 17, 1997.
- * Igor N. Kovalenko -- infoh mail.wplus.net
- ***********************************************************************
- */
-
-#if defined(NEED_INITGROUPS)
-int initgroups(const char *name, gid_t basegid)
-{
- /* QNX and MPE do not appear to support supplementary groups. */
- return 0;
-}
-#endif
-
-#if defined(SUNOS4)
-extern char *sys_errlist[];
-#define strerror(x) sys_errlist[(x)]
-#endif
-
-#if defined(PATH_MAX)
-#define AP_MAXPATH PATH_MAX
-#elif defined(MAXPATHLEN)
-#define AP_MAXPATH MAXPATHLEN
-#else
-#define AP_MAXPATH 8192
-#endif
-
-#define AP_ENVBUF 256
-
-extern char **environ;
-static FILE *log = NULL;
-
-char *safe_env_lst[] =
-{
- /* variable name starts with */
- "HTTP_",
- "SSL_",
-
- /* variable name is */
- "AUTH_TYPE=",
- "CONTENT_LENGTH=",
- "CONTENT_TYPE=",
- "DATE_GMT=",
- "DATE_LOCAL=",
- "DOCUMENT_NAME=",
- "DOCUMENT_PATH_INFO=",
- "DOCUMENT_ROOT=",
- "DOCUMENT_URI=",
- "FILEPATH_INFO=",
- "GATEWAY_INTERFACE=",
- "HTTPS=",
- "LAST_MODIFIED=",
- "PATH_INFO=",
- "PATH_TRANSLATED=",
- "QUERY_STRING=",
- "QUERY_STRING_UNESCAPED=",
- "REMOTE_ADDR=",
- "REMOTE_HOST=",
- "REMOTE_IDENT=",
- "REMOTE_PORT=",
- "REMOTE_USER=",
- "REDIRECT_HANDLER=",
- "REDIRECT_QUERY_STRING=",
- "REDIRECT_REMOTE_USER=",
- "REDIRECT_STATUS=",
- "REDIRECT_URL=",
- "REQUEST_METHOD=",
- "REQUEST_URI=",
- "SCRIPT_FILENAME=",
- "SCRIPT_NAME=",
- "SCRIPT_URI=",
- "SCRIPT_URL=",
- "SERVER_ADMIN=",
- "SERVER_NAME=",
- "SERVER_ADDR=",
- "SERVER_PORT=",
- "SERVER_PROTOCOL=",
- "SERVER_SOFTWARE=",
- "UNIQUE_ID=",
- "USER_NAME=",
- "TZ=",
- NULL
-};
-
-
-static void err_output(int is_error, const char *fmt, va_list ap)
-{
-#ifdef AP_LOG_EXEC
- time_t timevar;
- struct tm *lt;
-
- if (!log) {
- if ((log = fopen(AP_LOG_EXEC, "a")) == NULL) {
- fprintf(stderr, "suexec failure: could not open log file\n");
- perror("fopen");
- exit(1);
- }
- }
-
- if (is_error) {
- fprintf(stderr, "suexec policy violation: see suexec log for more "
- "details\n");
- }
-
- time(&timevar);
- lt = localtime(&timevar);
-
- fprintf(log, "[%d-%.2d-%.2d %.2d:%.2d:%.2d]: ",
- lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
- lt->tm_hour, lt->tm_min, lt->tm_sec);
-
- vfprintf(log, fmt, ap);
-
- fflush(log);
-#endif /* AP_LOG_EXEC */
- return;
-}
-
-static void log_err(const char *fmt,...)
-{
-#ifdef AP_LOG_EXEC
- va_list ap;
-
- va_start(ap, fmt);
- err_output(1, fmt, ap); /* 1 == is_error */
- va_end(ap);
-#endif /* AP_LOG_EXEC */
- return;
-}
-
-static void log_no_err(const char *fmt,...)
-{
-#ifdef AP_LOG_EXEC
- va_list ap;
-
- va_start(ap, fmt);
- err_output(0, fmt, ap); /* 0 == !is_error */
- va_end(ap);
-#endif /* AP_LOG_EXEC */
- return;
-}
-
-static void clean_env(void)
-{
- char pathbuf[512];
- char **cleanenv;
- char **ep;
- int cidx = 0;
- int idx;
-
- /* While cleaning the environment, the environment should be clean.
- * (e.g. malloc() may get the name of a file for writing debugging info.
- * Bad news if MALLOC_DEBUG_FILE is set to /etc/passwd. Sprintf() may be
- * susceptible to bad locale settings....)
- * (from PR 2790)
- */
- char **envp = environ;
- char *empty_ptr = NULL;
-
- environ = &empty_ptr; /* VERY safe environment */
-
- if ((cleanenv = (char **) calloc(AP_ENVBUF, sizeof(char *))) == NULL) {
- log_err("failed to malloc memory for environment\n");
- exit(120);
- }
-
- sprintf(pathbuf, "PATH=%s", AP_SAFE_PATH);
- cleanenv[cidx] = strdup(pathbuf);
- cidx++;
-
- for (ep = envp; *ep && cidx < AP_ENVBUF-1; ep++) {
- for (idx = 0; safe_env_lst[idx]; idx++) {
- if (!strncmp(*ep, safe_env_lst[idx],
- strlen(safe_env_lst[idx]))) {
- cleanenv[cidx] = *ep;
- cidx++;
- break;
- }
- }
- }
-
- cleanenv[cidx] = NULL;
-
- environ = cleanenv;
-}
-
-int main(int argc, char *argv[])
-{
- int userdir = 0; /* ~userdir flag */
- uid_t uid; /* user information */
- gid_t gid; /* target group placeholder */
- char *target_uname; /* target user name */
- char *target_gname; /* target group name */
- char *target_homedir; /* target home directory */
- char *actual_uname; /* actual user name */
- char *actual_gname; /* actual group name */
- char *prog; /* name of this program */
- char *cmd; /* command to be executed */
- char cwd[AP_MAXPATH]; /* current working directory */
- char dwd[AP_MAXPATH]; /* docroot working directory */
- struct passwd *pw; /* password entry holder */
- struct group *gr; /* group entry holder */
- struct stat dir_info; /* directory info holder */
- struct stat prg_info; /* program info holder */
-
- /*
- * Start with a "clean" environment
- */
- clean_env();
-
- prog = argv[0];
- /*
- * Check existence/validity of the UID of the user
- * running this program. Error out if invalid.
- */
- uid = getuid();
- if ((pw = getpwuid(uid)) == NULL) {
- log_err("crit: invalid uid: (%ld)\n", uid);
- exit(102);
- }
- /*
- * See if this is a 'how were you compiled' request, and
- * comply if so.
- */
- if ((argc > 1)
- && (! strcmp(argv[1], "-V"))
- && ((uid == 0)
-#ifdef _OSD_POSIX
- /* User name comparisons are case insensitive on BS2000/OSD */
- || (! strcasecmp(AP_HTTPD_USER, pw->pw_name)))
-#else /* _OSD_POSIX */
- || (! strcmp(AP_HTTPD_USER, pw->pw_name)))
-#endif /* _OSD_POSIX */
- ) {
-#ifdef AP_DOC_ROOT
- fprintf(stderr, " -D AP_DOC_ROOT=\"%s\"\n", AP_DOC_ROOT);
-#endif
-#ifdef AP_GID_MIN
- fprintf(stderr, " -D AP_GID_MIN=%d\n", AP_GID_MIN);
-#endif
-#ifdef AP_HTTPD_USER
- fprintf(stderr, " -D AP_HTTPD_USER=\"%s\"\n", AP_HTTPD_USER);
-#endif
-#ifdef AP_LOG_EXEC
- fprintf(stderr, " -D AP_LOG_EXEC=\"%s\"\n", AP_LOG_EXEC);
-#endif
-#ifdef AP_SAFE_PATH
- fprintf(stderr, " -D AP_SAFE_PATH=\"%s\"\n", AP_SAFE_PATH);
-#endif
-#ifdef AP_SUEXEC_UMASK
- fprintf(stderr, " -D AP_SUEXEC_UMASK=%03o\n", AP_SUEXEC_UMASK);
-#endif
-#ifdef AP_UID_MIN
- fprintf(stderr, " -D AP_UID_MIN=%d\n", AP_UID_MIN);
-#endif
-#ifdef AP_USERDIR_SUFFIX
- fprintf(stderr, " -D AP_USERDIR_SUFFIX=\"%s\"\n", AP_USERDIR_SUFFIX);
-#endif
- exit(0);
- }
- /*
- * If there are a proper number of arguments, set
- * all of them to variables. Otherwise, error out.
- */
- if (argc < 4) {
- log_err("too few arguments\n");
- exit(101);
- }
- target_uname = argv[1];
- target_gname = argv[2];
- cmd = argv[3];
-
- /*
- * Check to see if the user running this program
- * is the user allowed to do so as defined in
- * suexec.h. If not the allowed user, error out.
- */
-#ifdef _OSD_POSIX
- /* User name comparisons are case insensitive on BS2000/OSD */
- if (strcasecmp(AP_HTTPD_USER, pw->pw_name)) {
- log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
- exit(103);
- }
-#else /*_OSD_POSIX*/
- if (strcmp(AP_HTTPD_USER, pw->pw_name)) {
- log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
- exit(103);
- }
-#endif /*_OSD_POSIX*/
-
- /*
- * Check for a leading '/' (absolute path) in the command to be executed,
- * or attempts to back up out of the current directory,
- * to protect against attacks. If any are
- * found, error out. Naughty naughty crackers.
- */
- if ((cmd[0] == '/') || (!strncmp(cmd, "../", 3))
- || (strstr(cmd, "/../") != NULL)) {
- log_err("invalid command (%s)\n", cmd);
- exit(104);
- }
-
- /*
- * Check to see if this is a ~userdir request. If
- * so, set the flag, and remove the '~' from the
- * target username.
- */
- if (!strncmp("~", target_uname, 1)) {
- target_uname++;
- userdir = 1;
- }
-
- /*
- * Error out if the target username is invalid.
- */
- if (strspn(target_uname, "1234567890") != strlen(target_uname)) {
- if ((pw = getpwnam(target_uname)) == NULL) {
- log_err("invalid target user name: (%s)\n", target_uname);
- exit(105);
- }
- }
- else {
- if ((pw = getpwuid(atoi(target_uname))) == NULL) {
- log_err("invalid target user id: (%s)\n", target_uname);
- exit(121);
- }
- }
-
- /*
- * Error out if the target group name is invalid.
- */
- if (strspn(target_gname, "1234567890") != strlen(target_gname)) {
- if ((gr = getgrnam(target_gname)) == NULL) {
- log_err("invalid target group name: (%s)\n", target_gname);
- exit(106);
- }
- gid = gr->gr_gid;
- actual_gname = strdup(gr->gr_name);
- }
- else {
- gid = atoi(target_gname);
- actual_gname = strdup(target_gname);
- }
-
-#ifdef _OSD_POSIX
- /*
- * Initialize BS2000 user environment
- */
- {
- pid_t pid;
- int status;
-
- switch (pid = ufork(target_uname)) {
- case -1: /* Error */
- log_err("failed to setup bs2000 environment for user %s: %s\n",
- target_uname, strerror(errno));
- exit(150);
- case 0: /* Child */
- break;
- default: /* Father */
- while (pid != waitpid(pid, &status, 0))
- ;
- /* @@@ FIXME: should we deal with STOP signals as well? */
- if (WIFSIGNALED(status)) {
- kill (getpid(), WTERMSIG(status));
- }
- exit(WEXITSTATUS(status));
- }
- }
-#endif /*_OSD_POSIX*/
-
- /*
- * Save these for later since initgroups will hose the struct
- */
- uid = pw->pw_uid;
- actual_uname = strdup(pw->pw_name);
- target_homedir = strdup(pw->pw_dir);
-
- /*
- * Log the transaction here to be sure we have an open log
- * before we setuid().
- */
- log_no_err("uid: (%s/%s) gid: (%s/%s) cmd: %s\n",
- target_uname, actual_uname,
- target_gname, actual_gname,
- cmd);
-
- /*
- * Error out if attempt is made to execute as root or as
- * a UID less than AP_UID_MIN. Tsk tsk.
- */
- if ((uid == 0) || (uid < AP_UID_MIN)) {
- log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd);
- exit(107);
- }
-
- /*
- * Error out if attempt is made to execute as root group
- * or as a GID less than AP_GID_MIN. Tsk tsk.
- */
- if ((gid == 0) || (gid < AP_GID_MIN)) {
- log_err("cannot run as forbidden gid (%d/%s)\n", gid, cmd);
- exit(108);
- }
-
- /*
- * Change UID/GID here so that the following tests work over NFS.
- *
- * Initialize the group access list for the target user,
- * and setgid() to the target group. If unsuccessful, error out.
- */
- if (((setgid(gid)) != 0) || (initgroups(actual_uname, gid) != 0)) {
- log_err("failed to setgid (%ld: %s)\n", gid, cmd);
- exit(109);
- }
-
- /*
- * setuid() to the target user. Error out on fail.
- */
- if ((setuid(uid)) != 0) {
- log_err("failed to setuid (%ld: %s)\n", uid, cmd);
- exit(110);
- }
-
- /*
- * Get the current working directory, as well as the proper
- * document root (dependant upon whether or not it is a
- * ~userdir request). Error out if we cannot get either one,
- * or if the current working directory is not in the docroot.
- * Use chdir()s and getcwd()s to avoid problems with symlinked
- * directories. Yuck.
- */
- if (getcwd(cwd, AP_MAXPATH) == NULL) {
- log_err("cannot get current working directory\n");
- exit(111);
- }
-
- if (userdir) {
- if (((chdir(target_homedir)) != 0) ||
- ((chdir(AP_USERDIR_SUFFIX)) != 0) ||
- ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
- ((chdir(cwd)) != 0)) {
- log_err("cannot get docroot information (%s)\n", target_homedir);
- exit(112);
- }
- }
- else {
- if (((chdir(AP_DOC_ROOT)) != 0) ||
- ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
- ((chdir(cwd)) != 0)) {
- log_err("cannot get docroot information (%s)\n", AP_DOC_ROOT);
- exit(113);
- }
- }
-
- if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
- log_err("command not in docroot (%s/%s)\n", cwd, cmd);
- exit(114);
- }
-
- /*
- * Stat the cwd and verify it is a directory, or error out.
- */
- if (((lstat(cwd, &dir_info)) != 0) || !(S_ISDIR(dir_info.st_mode))) {
- log_err("cannot stat directory: (%s)\n", cwd);
- exit(115);
- }
-
- /*
- * Error out if cwd is writable by others.
- */
- if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) {
- log_err("directory is writable by others: (%s)\n", cwd);
- exit(116);
- }
-
- /*
- * Error out if we cannot stat the program.
- */
- if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) {
- log_err("cannot stat program: (%s)\n", cmd);
- exit(117);
- }
-
- /*
- * Error out if the program is writable by others.
- */
- if ((prg_info.st_mode & S_IWOTH) || (prg_info.st_mode & S_IWGRP)) {
- log_err("file is writable by others: (%s/%s)\n", cwd, cmd);
- exit(118);
- }
-
- /*
- * Error out if the file is setuid or setgid.
- */
- if ((prg_info.st_mode & S_ISUID) || (prg_info.st_mode & S_ISGID)) {
- log_err("file is either setuid or setgid: (%s/%s)\n", cwd, cmd);
- exit(119);
- }
-
- /*
- * Error out if the target name/group is different from
- * the name/group of the cwd or the program.
- */
- if ((uid != dir_info.st_uid) ||
- (gid != dir_info.st_gid) ||
- (uid != prg_info.st_uid) ||
- (gid != prg_info.st_gid)) {
- log_err("target uid/gid (%ld/%ld) mismatch "
- "with directory (%ld/%ld) or program (%ld/%ld)\n",
- uid, gid,
- dir_info.st_uid, dir_info.st_gid,
- prg_info.st_uid, prg_info.st_gid);
- exit(120);
- }
- /*
- * Error out if the program is not executable for the user.
- * Otherwise, she won't find any error in the logs except for
- * "[error] Premature end of script headers: ..."
- */
- if (!(prg_info.st_mode & S_IXUSR)) {
- log_err("file has no execute permission: (%s/%s)\n", cwd, cmd);
- exit(121);
- }
-
-#ifdef AP_SUEXEC_UMASK
- /*
- * umask() uses inverse logic; bits are CLEAR for allowed access.
- */
- if ((~AP_SUEXEC_UMASK) & 0022) {
- log_err("notice: AP_SUEXEC_UMASK of %03o allows "
- "write permission to group and/or other\n", AP_SUEXEC_UMASK);
- }
- umask(AP_SUEXEC_UMASK);
-#endif /* AP_SUEXEC_UMASK */
-
- /*
- * Be sure to close the log file so the CGI can't
- * mess with it. If the exec fails, it will be reopened
- * automatically when log_err is called. Note that the log
- * might not actually be open if AP_LOG_EXEC isn't defined.
- * However, the "log" cell isn't ifdef'd so let's be defensive
- * and assume someone might have done something with it
- * outside an ifdef'd AP_LOG_EXEC block.
- */
- if (log != NULL) {
- fclose(log);
- log = NULL;
- }
-
- /*
- * Execute the command, replacing our image with its own.
- */
-#ifdef NEED_HASHBANG_EMUL
- /* We need the #! emulation when we want to execute scripts */
- {
- extern char **environ;
-
- ap_execve(cmd, &argv[3], environ);
- }
-#else /*NEED_HASHBANG_EMUL*/
- execv(cmd, &argv[3]);
-#endif /*NEED_HASHBANG_EMUL*/
-
- /*
- * (I can't help myself...sorry.)
- *
- * Uh oh. Still here. Where's the kaboom? There was supposed to be an
- * EARTH-shattering kaboom!
- *
- * Oh well, log the failure and error out.
- */
- log_err("(%d)%s: exec failed (%s)\n", errno, strerror(errno), cmd);
- exit(255);
-}
diff --git a/support/suexec.h b/support/suexec.h
deleted file mode 100644
index e76a3bb731..0000000000
--- a/support/suexec.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * suexec.h -- user-definable variables for the suexec wrapper code.
- * (See README.configure on how to customize these variables.)
- */
-
-
-#ifndef _SUEXEC_H
-#define _SUEXEC_H
-
-/*
- * Include ap_config_layout so we can work out where the default htdocsdir
- * and logsdir are.
- */
-#include "ap_config_layout.h"
-
-/*
- * HTTPD_USER -- Define as the username under which Apache normally
- * runs. This is the only user allowed to execute
- * this program.
- */
-#ifndef AP_HTTPD_USER
-#define AP_HTTPD_USER "www"
-#endif
-
-/*
- * UID_MIN -- Define this as the lowest UID allowed to be a target user
- * for suEXEC. For most systems, 500 or 100 is common.
- */
-#ifndef AP_UID_MIN
-#define AP_UID_MIN 100
-#endif
-
-/*
- * GID_MIN -- Define this as the lowest GID allowed to be a target group
- * for suEXEC. For most systems, 100 is common.
- */
-#ifndef AP_GID_MIN
-#define AP_GID_MIN 100
-#endif
-
-/*
- * USERDIR_SUFFIX -- Define to be the subdirectory under users'
- * home directories where suEXEC access should
- * be allowed. All executables under this directory
- * will be executable by suEXEC as the user so
- * they should be "safe" programs. If you are
- * using a "simple" UserDir directive (ie. one
- * without a "*" in it) this should be set to
- * the same value. suEXEC will not work properly
- * in cases where the UserDir directive points to
- * a location that is not the same as the user's
- * home directory as referenced in the passwd file.
- *
- * If you have VirtualHosts with a different
- * UserDir for each, you will need to define them to
- * all reside in one parent directory; then name that
- * parent directory here. IF THIS IS NOT DEFINED
- * PROPERLY, ~USERDIR CGI REQUESTS WILL NOT WORK!
- * See the suEXEC documentation for more detailed
- * information.
- */
-#ifndef AP_USERDIR_SUFFIX
-#define AP_USERDIR_SUFFIX "public_html"
-#endif
-
-/*
- * LOG_EXEC -- Define this as a filename if you want all suEXEC
- * transactions and errors logged for auditing and
- * debugging purposes.
- */
-#ifndef AP_LOG_EXEC
-#define AP_LOG_EXEC DEFAULT_EXP_LOGFILEDIR "/suexec_log" /* Need me? */
-#endif
-
-/*
- * DOC_ROOT -- Define as the DocumentRoot set for Apache. This
- * will be the only hierarchy (aside from UserDirs)
- * that can be used for suEXEC behavior.
- */
-#ifndef AP_DOC_ROOT
-#define AP_DOC_ROOT DEFAULT_EXP_HTDOCSDIR
-#endif
-
-/*
- * SAFE_PATH -- Define a safe PATH environment to pass to CGI executables.
- *
- */
-#ifndef AP_SAFE_PATH
-#define AP_SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
-#endif
-
-#endif /* _SUEXEC_H */
diff --git a/support/utilitiesnw.def b/support/utilitiesnw.def
deleted file mode 100644
index 426b8c96be..0000000000
--- a/support/utilitiesnw.def
+++ /dev/null
@@ -1,3 +0,0 @@
-MODULE APRLIB.NLM
-MODULE LIBC.NLM
-
diff --git a/support/win32/.cvsignore b/support/win32/.cvsignore
deleted file mode 100644
index e8f8ea19ec..0000000000
--- a/support/win32/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-Release
-Debug
-ApacheMonitorVer.rc
-wintty.rc
-*.plg
-*.aps
-*.dep
-*.mak
-BuildLog.htm
-*.stc
-*.stt
-*.sto
-*.vcproj
diff --git a/support/win32/ApacheMonitor.c b/support/win32/ApacheMonitor.c
deleted file mode 100644
index edf1f39579..0000000000
--- a/support/win32/ApacheMonitor.c
+++ /dev/null
@@ -1,1763 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ====================================================================
- * ApacheMonitor.c Simple program to manage and monitor Apache services.
- *
- * Contributed by Mladen Turk <mturk mappingsoft.com>
- *
- * 05 Aug 2001
- * ====================================================================
- */
-
-#define _WIN32_WINNT 0x0400
-#ifndef STRICT
-#define STRICT
-#endif
-#ifndef OEMRESOURCE
-#define OEMRESOURCE
-#endif
-
-#include <windows.h>
-#include <windowsx.h>
-#include <commctrl.h>
-#include <objbase.h>
-#include <shlobj.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "ApacheMonitor.h"
-
-
-#define OS_VERSION_WIN9X 1
-#define OS_VERSION_WINNT 2
-#define OS_VERSION_WIN2K 3
-/* Should be enough */
-#define MAX_APACHE_SERVICES 128
-#define MAX_APACHE_COMPUTERS 32
-
-#define WM_TRAYMESSAGE (WM_APP+1)
-#define WM_UPDATEMESSAGE (WM_USER+1)
-#define WM_MANAGEMESSAGE (WM_USER+2)
-#define WM_TIMER_REFRESH 10
-#define WM_TIMER_RESCAN 11
-#define SERVICE_APACHE_RESTART 128
-#define XBITMAP 16
-#define YBITMAP 16
-#define MAX_LOADSTRING 100
-#define REFRESH_TIME 2000 /* service refresh time (ms) */
-#define RESCAN_TIME 20000 /* registry rescan time (ms) */
-
-typedef struct _st_APACHE_SERVICE
-{
- LPSTR szServiceName;
- LPSTR szDisplayName;
- LPSTR szDescription;
- LPSTR szImagePath;
- LPSTR szComputerName;
- DWORD dwPid;
-} ST_APACHE_SERVICE;
-
-typedef struct _st_MONITORED_COMPUTERS
-{
- LPSTR szComputerName;
- HKEY hRegistry;
-} ST_MONITORED_COMP;
-
-/* Global variables */
-HINSTANCE g_hInstance = NULL;
-CHAR *g_szTitle; /* The title bar text */
-CHAR *g_szWindowClass; /* Window Class Name */
-HICON g_icoStop;
-HICON g_icoRun;
-UINT g_bUiTaskbarCreated;
-DWORD g_dwOSVersion;
-BOOL g_bDlgServiceOn = FALSE;
-BOOL g_bConsoleRun = FALSE;
-ST_APACHE_SERVICE g_stServices[MAX_APACHE_SERVICES];
-ST_MONITORED_COMP g_stComputers[MAX_APACHE_COMPUTERS];
-
-HBITMAP g_hBmpStart, g_hBmpStop;
-HBITMAP g_hBmpPicture, g_hBmpOld;
-BOOL g_bRescanServices;
-HWND g_hwndServiceDlg;
-HWND g_hwndMain;
-HWND g_hwndStdoutList;
-HWND g_hwndConnectDlg;
-HCURSOR g_hCursorHourglass;
-HCURSOR g_hCursorArrow;
-
-HANDLE g_hpipeOutRead;
-HANDLE g_hpipeOutWrite;
-HANDLE g_hpipeInRead;
-HANDLE g_hpipeInWrite;
-HANDLE g_hpipeStdError;
-LANGID g_LangID;
-PROCESS_INFORMATION g_lpRedirectProc;
-CRITICAL_SECTION g_stcSection;
-LPSTR g_szLocalHost;
-
-/* locale language support */
-static CHAR *g_lpMsg[IDS_MSG_LAST - IDS_MSG_FIRST + 1];
-
-
-void am_ClearServicesSt()
-{
- int i;
- for (i = 0; i < MAX_APACHE_SERVICES; i++)
- {
- if (g_stServices[i].szServiceName) {
- free(g_stServices[i].szServiceName);
- }
- if (g_stServices[i].szDisplayName) {
- free(g_stServices[i].szDisplayName);
- }
- if (g_stServices[i].szDescription) {
- free(g_stServices[i].szDescription);
- }
- if (g_stServices[i].szImagePath) {
- free(g_stServices[i].szImagePath);
- }
- if (g_stServices[i].szComputerName) {
- free(g_stServices[i].szComputerName);
- }
-
- }
- memset(g_stServices, 0, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES);
-
-}
-
-
-void am_ClearComputersSt()
-{
- int i;
- for (i = 0; i < MAX_APACHE_COMPUTERS; i++) {
- if (g_stComputers[i].szComputerName) {
- free(g_stComputers[i].szComputerName);
- RegCloseKey(g_stComputers[i].hRegistry);
- }
- }
- memset(g_stComputers, 0, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS);
-
-}
-
-
-BOOL am_IsComputerConnected(LPSTR szComputerName)
-{
- int i = 0;
- while (g_stComputers[i].szComputerName != NULL) {
- if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0) {
- return TRUE;
- }
- ++i;
- }
- return FALSE;
-}
-
-
-void am_DisconnectComputer(LPSTR szComputerName)
-{
- int i = 0, j;
- while (g_stComputers[i].szComputerName != NULL) {
- if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0) {
- break;
- }
- ++i;
- }
- if (g_stComputers[i].szComputerName != NULL) {
- free(g_stComputers[i].szComputerName);
- RegCloseKey(g_stComputers[i].hRegistry);
- for (j = i; j < MAX_APACHE_COMPUTERS - 1; j++) {
- g_stComputers[i].szComputerName= g_stComputers[i+1].szComputerName;
- g_stComputers[i].hRegistry = g_stComputers[i+1].hRegistry;
- }
- for (i = j; i < MAX_APACHE_COMPUTERS; i++) {
- g_stComputers[i].szComputerName = NULL;
- g_stComputers[i].hRegistry = NULL;
- }
- }
-
-}
-
-
-void ErrorMessage(LPCSTR szError, BOOL bFatal)
-{
- LPVOID lpMsgBuf = NULL;
- if (szError) {
- MessageBox(NULL, szError, g_lpMsg[IDS_MSG_ERROR - IDS_MSG_FIRST],
- MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION));
- }
- else {
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, GetLastError(), g_LangID,
- (LPSTR) &lpMsgBuf, 0, NULL);
- MessageBox(NULL, (LPCSTR)lpMsgBuf,
- g_lpMsg[IDS_MSG_ERROR - IDS_MSG_FIRST],
- MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION));
- LocalFree(lpMsgBuf);
- }
- if (bFatal) {
- PostQuitMessage(0);
- }
-}
-
-
-BOOL am_ConnectComputer(LPSTR szComputerName)
-{
- int i = 0;
- HKEY hKeyRemote;
- char szTmp[MAX_PATH];
-
- while (g_stComputers[i].szComputerName != NULL) {
- if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0) {
- return FALSE;
- }
- ++i;
- }
- if (i > MAX_APACHE_COMPUTERS - 1) {
- return FALSE;
- }
- if (RegConnectRegistry(szComputerName, HKEY_LOCAL_MACHINE, &hKeyRemote)
- != ERROR_SUCCESS) {
- sprintf(szTmp, g_lpMsg[IDS_MSG_ECONNECT - IDS_MSG_FIRST],
- szComputerName);
- ErrorMessage(szTmp, FALSE);
- return FALSE;
- }
- else {
- g_stComputers[i].szComputerName = strdup(szComputerName);
- g_stComputers[i].hRegistry = hKeyRemote;
- return TRUE;
- }
-}
-
-
-LPSTR GetStringRes(int id)
-{
- static CHAR buffer[MAX_PATH];
-
- buffer[0] = 0;
- LoadString(GetModuleHandle(NULL), id, buffer, MAX_PATH);
- return buffer;
-}
-
-
-BOOL GetSystemOSVersion(LPDWORD dwVersion)
-{
- OSVERSIONINFO osvi;
- /*
- Try calling GetVersionEx using the OSVERSIONINFOEX structure.
- If that fails, try using the OSVERSIONINFO structure.
- */
- memset(&osvi, 0, sizeof(OSVERSIONINFO));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- if (!GetVersionEx(&osvi)) {
- return FALSE;
- }
-
- switch (osvi.dwPlatformId)
- {
- case VER_PLATFORM_WIN32_NT:
- if (osvi.dwMajorVersion <= 4) {
- *dwVersion = OS_VERSION_WINNT;
- }
- else if (osvi.dwMajorVersion == 5) {
- *dwVersion = OS_VERSION_WIN2K;
- }
- else {
- return FALSE;
- }
- break;
-
- case VER_PLATFORM_WIN32_WINDOWS:
- *dwVersion = OS_VERSION_WIN9X;
- break;
-
- case VER_PLATFORM_WIN32s:
- default:
- *dwVersion = 0;
- return FALSE;
- }
- return TRUE;
-}
-
-
-static VOID ShowNotifyIcon(HWND hWnd, DWORD dwMessage)
-{
- NOTIFYICONDATA nid;
- int i = 0, n = 0;
-
- memset(&nid, 0, sizeof(nid));
- nid.cbSize = sizeof(NOTIFYICONDATA);
- nid.hWnd = hWnd;
- nid.uID = 0xFF;
- nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
- nid.uCallbackMessage = WM_TRAYMESSAGE;
-
- while (g_stServices[i].szServiceName != NULL)
- {
- if (g_stServices[i].dwPid != 0) {
- ++n;
- }
- ++i;
- }
- if (dwMessage != NIM_DELETE)
- {
- if (n) {
- nid.hIcon = g_icoRun;
- }
- else {
- nid.hIcon = g_icoStop;
- }
- }
- else {
- nid.hIcon = NULL;
- }
- if (n == i && n > 0) {
- lstrcpy(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGALL - IDS_MSG_FIRST]);
- }
- else if (n) {
- sprintf(nid.szTip, g_lpMsg[IDS_MSG_RUNNING - IDS_MSG_FIRST], n, i);
- }
- else if (i) {
- sprintf(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGNONE - IDS_MSG_FIRST], i);
- }
- else {
- lstrcpy(nid.szTip, g_lpMsg[IDS_MSG_NOSERVICES - IDS_MSG_FIRST]);
- }
- Shell_NotifyIcon(dwMessage, &nid);
-}
-
-
-void appendMenuItem(HMENU hMenu, UINT uMenuId, LPSTR szName,
- BOOL fDefault, BOOL fEnabled)
-{
- MENUITEMINFO mii;
-
- memset(&mii, 0, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
- if (lstrlen(szName))
- {
- mii.fType = MFT_STRING;
- mii.wID = uMenuId;
- if (fDefault) {
- mii.fState = MFS_DEFAULT;
- }
- if (!fEnabled) {
- mii.fState |= MFS_DISABLED;
- }
- mii.dwTypeData = szName;
- }
- else {
- mii.fType = MFT_SEPARATOR;
- }
- InsertMenuItem(hMenu, uMenuId, FALSE, &mii);
-}
-
-
-void appendServiceMenu(HMENU hMenu, UINT uMenuId,
- LPSTR szServiceName, BOOL fRunning)
-{
- MENUITEMINFO mii;
- HMENU smh;
-
- smh = CreatePopupMenu();
-
- appendMenuItem(smh, IDM_SM_START + uMenuId,
- g_lpMsg[IDS_MSG_SSTART - IDS_MSG_FIRST], FALSE, !fRunning);
- appendMenuItem(smh, IDM_SM_STOP + uMenuId,
- g_lpMsg[IDS_MSG_SSTOP - IDS_MSG_FIRST], FALSE, fRunning);
- appendMenuItem(smh, IDM_SM_RESTART + uMenuId,
- g_lpMsg[IDS_MSG_SRESTART - IDS_MSG_FIRST], FALSE, fRunning);
-
- memset(&mii, 0, sizeof(MENUITEMINFO));
- mii.cbSize = sizeof(MENUITEMINFO);
- mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU
- | MIIM_CHECKMARKS;
- mii.fType = MFT_STRING;
- mii.wID = uMenuId;
- mii.hbmpChecked = g_hBmpStart;
- mii.hbmpUnchecked = g_hBmpStop;
- mii.dwTypeData = szServiceName;
- mii.hSubMenu = smh;
- mii.fState = fRunning ? MFS_CHECKED : MFS_UNCHECKED;
- InsertMenuItem(hMenu, IDM_SM_SERVICE + uMenuId, FALSE, &mii);
-}
-
-
-void ShowTryPopupMenu(HWND hWnd)
-{
- /* create popup menu */
- HMENU hMenu = CreatePopupMenu();
- POINT pt;
-
- if (hMenu)
- {
- appendMenuItem(hMenu, IDM_RESTORE,
- g_lpMsg[IDS_MSG_MNUSHOW - IDS_MSG_FIRST],
- TRUE, TRUE);
- if (g_dwOSVersion >= OS_VERSION_WINNT) {
- appendMenuItem(hMenu, IDC_SMANAGER,
- g_lpMsg[IDS_MSG_MNUSERVICES - IDS_MSG_FIRST],
- FALSE, TRUE);
- }
- appendMenuItem(hMenu, 0, "", FALSE, TRUE);
- appendMenuItem(hMenu, IDM_EXIT,
- g_lpMsg[IDS_MSG_MNUEXIT - IDS_MSG_FIRST],
- FALSE, TRUE);
-
- if (!SetForegroundWindow(hWnd)) {
- SetForegroundWindow(NULL);
- }
- GetCursorPos(&pt);
- TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON,
- pt.x, pt.y, 0, hWnd, NULL);
- DestroyMenu(hMenu);
- }
-}
-
-
-void ShowTryServicesMenu(HWND hWnd)
-{
- /* create services list popup menu and submenus */
- HMENU hMenu = CreatePopupMenu();
- POINT pt;
- int i = 0;
-
- if (hMenu)
- {
- while (g_stServices[i].szServiceName != NULL)
- {
- appendServiceMenu(hMenu, i, g_stServices[i].szDisplayName,
- g_stServices[i].dwPid != 0);
- ++i;
- }
- if (i)
- {
- if (!SetForegroundWindow(hWnd)) {
- SetForegroundWindow(NULL);
- }
- GetCursorPos(&pt);
- TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON,
- pt.x, pt.y, 0, hWnd, NULL);
- DestroyMenu(hMenu);
- }
- }
-}
-
-
-BOOL CenterWindow(HWND hwndChild)
-{
- RECT rChild, rWorkArea;
- int wChild, hChild;
- int xNew, yNew;
- BOOL bResult;
-
- /* Get the Height and Width of the child window */
- GetWindowRect(hwndChild, &rChild);
- wChild = rChild.right - rChild.left;
- hChild = rChild.bottom - rChild.top;
-
- /* Get the limits of the 'workarea' */
- bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT),
- &rWorkArea, 0);
- if (!bResult) {
- rWorkArea.left = rWorkArea.top = 0;
- rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
- rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
- }
-
- /* Calculate new X and Y position*/
- xNew = (rWorkArea.right - wChild) / 2;
- yNew = (rWorkArea.bottom - hChild) / 2;
- return SetWindowPos(hwndChild, HWND_TOP, xNew, yNew, 0, 0,
- SWP_NOSIZE | SWP_SHOWWINDOW);
-}
-
-
-static void addListBoxItem(HWND hDlg, LPSTR lpStr, HBITMAP hBmp)
-{
- int nItem;
-
- nItem = SendMessage(hDlg, LB_ADDSTRING, 0, (LPARAM)lpStr);
- SendMessage(hDlg, LB_SETITEMDATA, nItem, (LPARAM)hBmp);
-}
-
-
-static void addListBoxString(HWND hListBox, LPSTR lpStr)
-{
- static int nItems = 0;
- if (!g_bDlgServiceOn) {
- return;
- }
- ++nItems;
- if (nItems > MAX_LOADSTRING)
- {
- SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
- nItems = 1;
- }
- ListBox_SetCurSel(hListBox,
- ListBox_AddString(hListBox, lpStr));
-
-}
-
-
-static DWORD WINAPI ConsoleOutputThread(LPVOID lpThreadParameter)
-{
- static BYTE lpBuffer[MAX_PATH+1];
- int nPtr = 0;
- BYTE ch;
- DWORD dwReaded;
-
- while (ReadFile(g_hpipeOutRead, &ch, 1, &dwReaded, NULL) == TRUE)
- {
- if (dwReaded > 0)
- {
- if (ch == '\n' || nPtr >= MAX_PATH)
- {
- lpBuffer[nPtr] = '\0';
- addListBoxString(g_hwndStdoutList, lpBuffer);
- nPtr = 0;
- }
- else if (ch == '\t' && nPtr < (MAX_PATH - 4))
- {
- int i;
- for (i = 0; i < 4; ++i) {
- lpBuffer[nPtr++] = ' ';
- }
- }
- else if (ch != '\r') {
- lpBuffer[nPtr++] = ch;
- }
- }
- }
- CloseHandle(g_hpipeInWrite);
- CloseHandle(g_hpipeOutRead);
- CloseHandle(g_hpipeStdError);
- return 0;
-}
-
-
-DWORD WINAPI ConsoleWaitingThread(LPVOID lpThreadParameter)
-{
- WaitForSingleObject(g_lpRedirectProc.hThread, INFINITE);
- CloseHandle(g_lpRedirectProc.hThread);
- MessageBeep(100);
- g_bConsoleRun = FALSE;
- SetCursor(g_hCursorArrow);
- return 0;
-}
-
-
-BOOL RunRedirectedConsole(LPSTR szCmdLine)
-{
- DWORD dwThreadId;
- HANDLE hProc;
- STARTUPINFO stInfo;
- BOOL bResult;
-
- memset(&stInfo, 0, sizeof(stInfo));
- stInfo.cb = sizeof(stInfo);
- stInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
- stInfo.wShowWindow = SW_HIDE;
-
- hProc = GetCurrentProcess();
-
- if (!CreatePipe(&g_hpipeInRead, &g_hpipeInWrite, NULL, MAX_PATH)) {
- ErrorMessage(NULL, TRUE);
- }
- if (!CreatePipe(&g_hpipeOutRead, &g_hpipeOutWrite, NULL, MAX_PATH*8)) {
- ErrorMessage(NULL, TRUE);
- }
- DuplicateHandle(hProc, g_hpipeInRead, hProc, &g_hpipeInRead, 0, TRUE,
- DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS);
- DuplicateHandle(hProc, g_hpipeOutWrite, hProc, &g_hpipeOutWrite, 0, TRUE,
- DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS);
- DuplicateHandle(hProc, g_hpipeOutWrite, hProc, &g_hpipeStdError, 0, TRUE,
- DUPLICATE_SAME_ACCESS);
- if (!g_hpipeInRead && !g_hpipeOutWrite && !g_hpipeStdError) {
- ErrorMessage(NULL, TRUE);
- }
- stInfo.hStdInput = g_hpipeInRead;
- stInfo.hStdOutput = g_hpipeOutWrite;
- stInfo.hStdError = g_hpipeStdError;
-
- bResult = CreateProcess(NULL,
- szCmdLine,
- NULL,
- NULL,
- TRUE,
- CREATE_SUSPENDED,
- NULL,
- NULL,
- &stInfo,
- &g_lpRedirectProc);
-
-
- CloseHandle(g_hpipeInRead);
- CloseHandle(g_hpipeOutWrite);
- CloseHandle(g_hpipeStdError);
-
- if (!bResult)
- {
- CloseHandle(g_hpipeInWrite);
- CloseHandle(g_hpipeOutRead);
- CloseHandle(g_hpipeStdError);
- return FALSE;
- }
-
- CloseHandle(CreateThread(NULL, 0, ConsoleOutputThread,
- 0, 0, &dwThreadId));
- ResumeThread(g_lpRedirectProc.hThread);
- CloseHandle(CreateThread(NULL, 0, ConsoleWaitingThread,
- 0, 0, &dwThreadId));
-
- return TRUE;
-}
-
-
-BOOL RunAndForgetConsole(LPSTR szCmdLine, BOOL bRedirectConsole)
-{
- STARTUPINFO stInfo;
- PROCESS_INFORMATION prInfo;
- BOOL bResult;
-
- if (bRedirectConsole) {
- return RunRedirectedConsole(szCmdLine);
- }
-
- memset(&stInfo, 0, sizeof(stInfo));
- stInfo.cb = sizeof(stInfo);
- stInfo.dwFlags = STARTF_USESHOWWINDOW;
- stInfo.wShowWindow = SW_HIDE;
-
- bResult = CreateProcess(NULL,
- szCmdLine,
- NULL,
- NULL,
- TRUE,
- CREATE_NEW_CONSOLE,
- NULL,
- NULL,
- &stInfo,
- &prInfo);
-
- if (!bResult) {
- return FALSE;
- }
- if (g_dwOSVersion == OS_VERSION_WIN9X) {
- /* give some time to rescan the status */
- Sleep(2000);
- }
- CloseHandle(prInfo.hThread);
- CloseHandle(prInfo.hProcess);
- return TRUE;
-}
-
-
-BOOL ApacheManageService(LPCSTR szServiceName, LPCSTR szImagePath,
- LPSTR szComputerName, DWORD dwCommand)
-{
- CHAR szBuf[MAX_PATH];
- CHAR szMsg[MAX_PATH];
- LPSTR sPos;
- BOOL retValue;
- BOOL serviceFlag = TRUE;
- SC_HANDLE schService;
- SC_HANDLE schSCManager;
- SERVICE_STATUS schSStatus;
- int ticks;
-
- if (g_dwOSVersion == OS_VERSION_WIN9X)
- {
- sPos = strstr(szImagePath, "-k start");
- if (sPos)
- {
- lstrcpyn(szBuf, szImagePath, sPos - szImagePath);
- switch (dwCommand)
- {
- case SERVICE_CONTROL_STOP:
- lstrcat(szBuf, " -k shutdown -n ");
- break;
-
- case SERVICE_CONTROL_CONTINUE:
- sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTART - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- lstrcat(szBuf, " -k start -n ");
- serviceFlag = FALSE;
- break;
-
- case SERVICE_APACHE_RESTART:
- lstrcat(szBuf, " -k restart -n ");
- break;
-
- default:
- return FALSE;
- }
- lstrcat(szBuf, szServiceName);
- }
- else {
- return FALSE;
- }
- g_bConsoleRun = TRUE;
- SetCursor(g_hCursorHourglass);
- if (!RunAndForgetConsole(szBuf, serviceFlag))
- {
- ErrorMessage(NULL, FALSE);
- g_bConsoleRun = FALSE;
- SetCursor(g_hCursorArrow);
- return FALSE;
- }
- else if (!serviceFlag)
- {
- sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- g_bConsoleRun = FALSE;
- SetCursor(g_hCursorArrow);
- return TRUE;
- }
- }
- else
- {
- schSCManager = OpenSCManager(szComputerName, NULL,
- SC_MANAGER_CONNECT);
- if (!schSCManager) {
- return FALSE;
- }
-
- schService = OpenService(schSCManager, szServiceName,
- SERVICE_QUERY_STATUS | SERVICE_START |
- SERVICE_STOP | SERVICE_USER_DEFINED_CONTROL);
- if (schService != NULL)
- {
- retValue = FALSE;
- g_bConsoleRun = TRUE;
- SetCursor(g_hCursorHourglass);
- switch (dwCommand)
- {
- case SERVICE_CONTROL_STOP:
- sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTOP - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- if (ControlService(schService, SERVICE_CONTROL_STOP,
- &schSStatus)) {
- Sleep(1000);
- while (QueryServiceStatus(schService, &schSStatus))
- {
- if (schSStatus.dwCurrentState == SERVICE_STOP_PENDING)
- {
- Sleep(1000);
- }
- else {
- break;
- }
- }
- }
- if (QueryServiceStatus(schService, &schSStatus))
- {
- if (schSStatus.dwCurrentState == SERVICE_STOPPED)
- {
- retValue = TRUE;
- sprintf(szMsg,
- g_lpMsg[IDS_MSG_SRVSTOPPED - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- }
- }
- break;
-
- case SERVICE_CONTROL_CONTINUE:
- sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTART - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
-
- if (StartService(schService, 0, NULL))
- {
- Sleep(1000);
- while (QueryServiceStatus(schService, &schSStatus))
- {
- if (schSStatus.dwCurrentState == SERVICE_START_PENDING)
- {
- Sleep(1000);
- }
- else {
- break;
- }
- }
- }
- if (QueryServiceStatus(schService, &schSStatus))
- {
- if (schSStatus.dwCurrentState == SERVICE_RUNNING)
- {
- retValue = TRUE;
- sprintf(szMsg,
- g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- }
- }
- break;
-
- case SERVICE_APACHE_RESTART:
- sprintf(szMsg, g_lpMsg[IDS_MSG_SRVRESTART - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- if (ControlService(schService, SERVICE_APACHE_RESTART,
- &schSStatus))
- {
- ticks = 60;
- while (schSStatus.dwCurrentState == SERVICE_START_PENDING)
- {
- Sleep(1000);
- if (!QueryServiceStatus(schService, &schSStatus))
- {
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- g_bConsoleRun = FALSE;
- SetCursor(g_hCursorArrow);
- return FALSE;
- }
- if (!--ticks) {
- break;
- }
- }
- }
- if (schSStatus.dwCurrentState == SERVICE_RUNNING)
- {
- retValue = TRUE;
- sprintf(szMsg,
- g_lpMsg[IDS_MSG_SRVRESTARTED - IDS_MSG_FIRST],
- szServiceName);
- addListBoxString(g_hwndStdoutList, szMsg);
- }
- break;
- }
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- if (!retValue) {
- ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],
- FALSE);
- }
- g_bConsoleRun = FALSE;
- SetCursor(g_hCursorArrow);
- return retValue;
- }
- else {
- g_bRescanServices = TRUE;
- }
- CloseServiceHandle(schSCManager);
- return FALSE;
- }
-
- return FALSE;
-}
-
-
-BOOL IsServiceRunning(LPCSTR szServiceName, LPCSTR szComputerName,
- LPDWORD lpdwPid)
-{
- DWORD dwPid;
- HWND hWnd;
- SC_HANDLE schService;
- SC_HANDLE schSCManager;
- SERVICE_STATUS schSStatus;
-
- if (g_dwOSVersion == OS_VERSION_WIN9X)
- {
- hWnd = FindWindow("ApacheWin95ServiceMonitor", szServiceName);
- if (hWnd && GetWindowThreadProcessId(hWnd, &dwPid))
- {
- *lpdwPid = 1;
- return TRUE;
- }
- else {
- return FALSE;
- }
- }
- else
- {
- dwPid = 0;
- schSCManager = OpenSCManager(szComputerName, NULL,
- SC_MANAGER_CONNECT);
- if (!schSCManager) {
- return FALSE;
- }
-
- schService = OpenService(schSCManager, szServiceName,
- SERVICE_QUERY_STATUS);
- if (schService != NULL)
- {
- if (QueryServiceStatus(schService, &schSStatus))
- {
- dwPid = schSStatus.dwCurrentState;
- if (lpdwPid) {
- *lpdwPid = 1;
- }
- }
- CloseServiceHandle(schService);
- CloseServiceHandle(schSCManager);
- return dwPid == SERVICE_RUNNING ? TRUE : FALSE;
- }
- else {
- g_bRescanServices = TRUE;
- }
- CloseServiceHandle(schSCManager);
- return FALSE;
-
- }
-
- return FALSE;
-}
-
-
-BOOL FindRunningServices(void)
-{
- int i = 0;
- DWORD dwPid;
- BOOL rv = FALSE;
- while (g_stServices[i].szServiceName != NULL)
- {
- if (!IsServiceRunning(g_stServices[i].szServiceName,
- g_stServices[i].szComputerName, &dwPid)) {
- dwPid = 0;
- }
- if (g_stServices[i].dwPid != dwPid) {
- rv = TRUE;
- }
- g_stServices[i].dwPid = dwPid;
- ++i;
- }
- return rv;
-}
-
-
-BOOL GetApacheServicesStatus()
-{
- CHAR szKey[MAX_PATH];
- CHAR achKey[MAX_PATH];
- CHAR szImagePath[MAX_PATH];
- CHAR szBuf[MAX_PATH];
- CHAR szTmp[MAX_PATH];
- HKEY hKey, hSubKey, hKeyRemote;
- DWORD retCode, rv, dwKeyType;
- DWORD dwBufLen = MAX_PATH;
- int i, stPos = 0;
- int computers = 0;
-
- g_bRescanServices = FALSE;
-
- am_ClearServicesSt();
- while (g_stComputers[computers].szComputerName != NULL) {
- hKeyRemote = g_stComputers[computers].hRegistry;
- retCode = RegOpenKeyEx(hKeyRemote,
- "System\\CurrentControlSet\\Services\\",
- 0, KEY_READ, &hKey);
- if (retCode != ERROR_SUCCESS)
- {
- ErrorMessage(NULL, FALSE);
- return FALSE;
- }
- for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++)
- {
- retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);
- if (retCode == ERROR_SUCCESS)
- {
- lstrcpy(szKey, "System\\CurrentControlSet\\Services\\");
- lstrcat(szKey, achKey);
-
- if (RegOpenKeyEx(hKeyRemote, szKey, 0,
- KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
- {
- dwBufLen = MAX_PATH;
- rv = RegQueryValueEx(hSubKey, "ImagePath", NULL,
- &dwKeyType, szImagePath, &dwBufLen);
-
- if (rv == ERROR_SUCCESS
- && (dwKeyType == REG_SZ
- || dwKeyType == REG_EXPAND_SZ)
- && dwBufLen)
- {
- lstrcpy(szBuf, szImagePath);
- CharLower(szBuf);
- /* the service name could be Apache*.exe */
- if ((strstr(szBuf, "\\apache") != NULL)
- && strstr(szBuf, ".exe")
- && (strstr(szBuf, "--ntservice") != NULL
- || strstr(szBuf, "-k ") != NULL))
- {
- g_stServices[stPos].szServiceName = strdup(achKey);
- g_stServices[stPos].szImagePath =
- strdup(szImagePath);
- g_stServices[stPos].szComputerName =
- strdup(g_stComputers[computers].szComputerName);
- dwBufLen = MAX_PATH;
- if (RegQueryValueEx(hSubKey, "Description", NULL,
- &dwKeyType, szBuf, &dwBufLen)
- == ERROR_SUCCESS) {
- g_stServices[stPos].szDescription =
- strdup(szBuf);
- }
- dwBufLen = MAX_PATH;
- if (RegQueryValueEx(hSubKey, "DisplayName", NULL,
- &dwKeyType, szBuf, &dwBufLen)
- == ERROR_SUCCESS)
- {
- if (strcmp(g_stComputers[computers]
- .szComputerName, g_szLocalHost) != 0)
- {
- strcpy(szTmp, g_stComputers[computers]
- .szComputerName + 2);
- strcat(szTmp, "@");
- strcat(szTmp, szBuf);
- }
- else {
- strcpy(szTmp, szBuf);
- }
- g_stServices[stPos].szDisplayName
- = strdup(szTmp);
-
- }
- ++stPos;
- if (stPos >= MAX_APACHE_SERVICES) {
- retCode = !ERROR_SUCCESS;
- }
- }
- }
- RegCloseKey(hSubKey);
- }
- }
- }
- ++computers;
- }
- RegCloseKey(hKey);
- FindRunningServices();
- return TRUE;
-}
-
-
-LRESULT CALLBACK ConnectDlgProc(HWND hDlg, UINT message,
- WPARAM wParam, LPARAM lParam)
-{
- CHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];
- switch (message)
- {
- case WM_INITDIALOG:
- ShowWindow(hDlg, SW_HIDE);
- g_hwndConnectDlg = hDlg;
- CenterWindow(hDlg);
- ShowWindow(hDlg, SW_SHOW);
- SetFocus(GetDlgItem(hDlg, IDC_COMPUTER));
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDOK:
- memset(szCmp, 0, MAX_COMPUTERNAME_LENGTH+4);
- strcpy(szCmp, "\\\\");
- SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), WM_GETTEXT,
- (WPARAM) MAX_COMPUTERNAME_LENGTH,
- (LPARAM) szCmp+2);
-
- strupr(szCmp);
- if (strlen(szCmp) < 3) {
- EndDialog(hDlg, TRUE);
- return TRUE;
- }
- am_ConnectComputer(szCmp);
- SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);
-
- case IDCANCEL:
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- case IDC_LBROWSE:
- {
- BROWSEINFO bi;
- ITEMIDLIST *il;
- LPMALLOC pMalloc;
- memset(&bi, 0, sizeof(BROWSEINFO));
- SHGetSpecialFolderLocation(hDlg, CSIDL_NETWORK, &il);
-
- bi.lpszTitle = "ApacheMonitor :\nSelect Network Computer!";
- bi.pszDisplayName = szCmp;
- bi.hwndOwner = hDlg;
- bi.ulFlags = BIF_BROWSEFORCOMPUTER;
- bi.lpfn = NULL;
- bi.lParam = 0;
- bi.iImage = 0;
- bi.pidlRoot = il;
-
- if (SHBrowseForFolder(&bi) != NULL) {
- SendMessage(GetDlgItem(hDlg, IDC_COMPUTER),
- WM_SETTEXT,
- (WPARAM) NULL, (LPARAM) szCmp);
- }
- if (SHGetMalloc(&pMalloc)) {
- pMalloc->lpVtbl->Free(pMalloc, il);
- pMalloc->lpVtbl->Release(pMalloc);
- }
- return TRUE;
- }
- }
- break;
-
- case WM_QUIT:
- case WM_CLOSE:
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- default:
- return FALSE;
- }
- return FALSE;
-
-}
-
-
-LRESULT CALLBACK ServiceDlgProc(HWND hDlg, UINT message,
- WPARAM wParam, LPARAM lParam)
-{
- CHAR szBuf[MAX_PATH];
- HWND hListBox;
- static HWND hStatusBar;
- TEXTMETRIC tm;
- int i, y;
- HDC hdcMem;
- RECT rcBitmap;
- UINT nItem;
- LPMEASUREITEMSTRUCT lpmis;
- LPDRAWITEMSTRUCT lpdis;
-
- memset(szBuf, 0, MAX_PATH);
- switch (message)
- {
- case WM_INITDIALOG:
- ShowWindow(hDlg, SW_HIDE);
- g_hwndServiceDlg = hDlg;
- SetWindowText(hDlg, g_szTitle);
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
- SetWindowText(GetDlgItem(hDlg, IDC_SSTART),
- g_lpMsg[IDS_MSG_SSTART - IDS_MSG_FIRST]);
- SetWindowText(GetDlgItem(hDlg, IDC_SSTOP),
- g_lpMsg[IDS_MSG_SSTOP - IDS_MSG_FIRST]);
- SetWindowText(GetDlgItem(hDlg, IDC_SRESTART),
- g_lpMsg[IDS_MSG_SRESTART - IDS_MSG_FIRST]);
- SetWindowText(GetDlgItem(hDlg, IDC_SMANAGER),
- g_lpMsg[IDS_MSG_SERVICES - IDS_MSG_FIRST]);
- SetWindowText(GetDlgItem(hDlg, IDC_SCONNECT),
- g_lpMsg[IDS_MSG_CONNECT - IDS_MSG_FIRST]);
- SetWindowText(GetDlgItem(hDlg, IDC_SEXIT),
- g_lpMsg[IDS_MSG_MNUEXIT - IDS_MSG_FIRST]);
- if (g_dwOSVersion < OS_VERSION_WINNT)
- {
- ShowWindow(GetDlgItem(hDlg, IDC_SMANAGER), SW_HIDE);
- ShowWindow(GetDlgItem(hDlg, IDC_SCONNECT), SW_HIDE);
- ShowWindow(GetDlgItem(hDlg, IDC_SDISCONN), SW_HIDE);
- }
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- g_hwndStdoutList = GetDlgItem(hDlg, IDL_STDOUT);
- hStatusBar = CreateStatusWindow(0x0800 /* SBT_TOOLTIPS */
- | WS_CHILD | WS_VISIBLE,
- "", hDlg, IDC_STATBAR);
- if (GetApacheServicesStatus())
- {
- i = 0;
- while (g_stServices[i].szServiceName != NULL)
- {
- addListBoxItem(hListBox, g_stServices[i].szDisplayName,
- g_stServices[i].dwPid == 0 ? g_hBmpStop
- : g_hBmpStart);
- ++i;
- }
- }
- CenterWindow(hDlg);
- ShowWindow(hDlg, SW_SHOW);
- SetFocus(hListBox);
- SendMessage(hListBox, LB_SETCURSEL, 0, 0);
- return TRUE;
- break;
-
- case WM_MANAGEMESSAGE:
- ApacheManageService(g_stServices[LOWORD(wParam)].szServiceName,
- g_stServices[LOWORD(wParam)].szImagePath,
- g_stServices[LOWORD(wParam)].szComputerName,
- LOWORD(lParam));
-
- return TRUE;
- break;
-
- case WM_UPDATEMESSAGE:
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
- SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)"");
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
- i = 0;
- while (g_stServices[i].szServiceName != NULL)
- {
- addListBoxItem(hListBox, g_stServices[i].szDisplayName,
- g_stServices[i].dwPid == 0 ? g_hBmpStop : g_hBmpStart);
- ++i;
- }
- SendMessage(hListBox, LB_SETCURSEL, 0, 0);
- /* Dirty hack to bring the window to the foreground */
- SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0,
- SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
- SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
- SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
- SetFocus(hListBox);
- return TRUE;
- break;
-
- case WM_MEASUREITEM:
- lpmis = (LPMEASUREITEMSTRUCT) lParam;
- lpmis->itemHeight = YBITMAP;
- return TRUE;
-
- case WM_SETCURSOR:
- if (g_bConsoleRun) {
- SetCursor(g_hCursorHourglass);
- }
- else {
- SetCursor(g_hCursorArrow);
- }
- return TRUE;
-
- case WM_DRAWITEM:
- lpdis = (LPDRAWITEMSTRUCT) lParam;
- if (lpdis->itemID == -1) {
- break;
- }
- switch (lpdis->itemAction)
- {
- case ODA_SELECT:
- case ODA_DRAWENTIRE:
- g_hBmpPicture = (HBITMAP)SendMessage(lpdis->hwndItem,
- LB_GETITEMDATA,
- lpdis->itemID, (LPARAM) 0);
-
- hdcMem = CreateCompatibleDC(lpdis->hDC);
- g_hBmpOld = SelectObject(hdcMem, g_hBmpPicture);
-
- BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
- lpdis->rcItem.right - lpdis->rcItem.left,
- lpdis->rcItem.bottom - lpdis->rcItem.top,
- hdcMem, 0, 0, SRCCOPY);
- SendMessage(lpdis->hwndItem, LB_GETTEXT,
- lpdis->itemID, (LPARAM) szBuf);
-
- GetTextMetrics(lpdis->hDC, &tm);
- y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tm.tmHeight) / 2;
-
- SelectObject(hdcMem, g_hBmpOld);
- DeleteDC(hdcMem);
-
- rcBitmap.left = lpdis->rcItem.left + XBITMAP + 2;
- rcBitmap.top = lpdis->rcItem.top;
- rcBitmap.right = lpdis->rcItem.right;
- rcBitmap.bottom = lpdis->rcItem.top + YBITMAP;
-
- if (lpdis->itemState & ODS_SELECTED)
- {
- if (g_hBmpPicture == g_hBmpStop)
- {
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE);
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
- }
- else if (g_hBmpPicture == g_hBmpStart)
- {
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE);
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE);
- }
- else {
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
- }
- if (strcmp(g_stServices[lpdis->itemID].szComputerName,
- g_szLocalHost) == 0) {
- Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
- }
- else {
- Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), TRUE);
- }
-
- if (g_stServices[lpdis->itemID].szDescription) {
- SendMessage(hStatusBar, SB_SETTEXT, 0,
- (LPARAM)g_stServices[lpdis->itemID].szDescription);
- }
- else {
- SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)"");
- }
- SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
- SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT));
- FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_HIGHLIGHTTEXT));
- }
- else
- {
- SetTextColor(lpdis->hDC, GetSysColor(COLOR_MENUTEXT));
- SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW));
- FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_WINDOW+1));
- }
- TextOut(lpdis->hDC, XBITMAP + 6, y, szBuf, strlen(szBuf));
- break;
-
- case ODA_FOCUS:
- break;
- }
- return TRUE;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDL_SERVICES:
- switch (HIWORD(wParam))
- {
- case LBN_DBLCLK:
- /* if started then stop, if stopped then start */
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
- if (nItem != LB_ERR)
- {
- g_hBmpPicture = (HBITMAP)SendMessage(hListBox,
- LB_GETITEMDATA,
- nItem, (LPARAM) 0);
- if (g_hBmpPicture == g_hBmpStop) {
- SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
- SERVICE_CONTROL_CONTINUE);
- }
- else {
- SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
- SERVICE_CONTROL_STOP);
- }
-
- }
- return TRUE;
- }
- break;
-
- case IDOK:
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- case IDC_SSTART:
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
- if (nItem != LB_ERR) {
- SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
- SERVICE_CONTROL_CONTINUE);
- }
- Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE);
- return TRUE;
-
- case IDC_SSTOP:
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
- if (nItem != LB_ERR) {
- SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
- SERVICE_CONTROL_STOP);
- }
- Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE);
- return TRUE;
-
- case IDC_SRESTART:
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
- if (nItem != LB_ERR) {
- SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
- SERVICE_APACHE_RESTART);
- }
- Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE);
- return TRUE;
-
- case IDC_SMANAGER:
- if (g_dwOSVersion >= OS_VERSION_WIN2K) {
- ShellExecute(hDlg, "open", "services.msc", "/s",
- NULL, SW_NORMAL);
- }
- else {
- WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL);
- }
- return TRUE;
-
- case IDC_SEXIT:
- EndDialog(hDlg, TRUE);
- SendMessage(g_hwndMain, WM_COMMAND, (WPARAM)IDM_EXIT, 0);
- return TRUE;
-
- case IDC_SCONNECT:
- DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGCONNECT),
- hDlg, (DLGPROC)ConnectDlgProc);
- return TRUE;
-
- case IDC_SDISCONN:
- hListBox = GetDlgItem(hDlg, IDL_SERVICES);
- nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
- if (nItem != LB_ERR) {
- am_DisconnectComputer(g_stServices[nItem].szComputerName);
- SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);
- }
- return TRUE;
- }
- break;
-
- case WM_SIZE:
- switch (LOWORD(wParam))
- {
- case SIZE_MINIMIZED:
- EndDialog(hDlg, TRUE);
- return TRUE;
- break;
- }
- break;
-
- case WM_QUIT:
- case WM_CLOSE:
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- default:
- return FALSE;
- }
- return FALSE;
-}
-
-
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
- WPARAM wParam, LPARAM lParam)
-{
- if (message == g_bUiTaskbarCreated)
- {
- /* restore the tray icon on shell restart */
- ShowNotifyIcon(hWnd, NIM_ADD);
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- switch (message)
- {
- case WM_CREATE:
- GetApacheServicesStatus();
- ShowNotifyIcon(hWnd, NIM_ADD);
- SetTimer(hWnd, WM_TIMER_REFRESH, REFRESH_TIME, NULL);
- SetTimer(hWnd, WM_TIMER_RESCAN, RESCAN_TIME, NULL);
- break;
-
- case WM_TIMER:
- switch (wParam)
- {
- case WM_TIMER_RESCAN:
- {
- int nPrev = 0, nNew = 0;
- EnterCriticalSection(&g_stcSection);
- if (FindRunningServices() || g_bRescanServices)
- {
- ShowNotifyIcon(hWnd, NIM_MODIFY);
- if (g_hwndServiceDlg)
- PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
- }
- /* check if services list changed */
- while (g_stServices[nPrev].szServiceName != NULL)
- ++nPrev;
- GetApacheServicesStatus();
- while (g_stServices[nNew].szServiceName != NULL)
- ++nNew;
- if (nPrev != nNew)
- {
- ShowNotifyIcon(hWnd, NIM_MODIFY);
- if (g_hwndServiceDlg) {
- PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
- }
- }
- LeaveCriticalSection(&g_stcSection);
- break;
- }
-
- case WM_TIMER_REFRESH:
- {
- int nPrev = 0, nNew = 0;
- EnterCriticalSection(&g_stcSection);
- if (g_bRescanServices)
- {
- GetApacheServicesStatus();
- ShowNotifyIcon(hWnd, NIM_MODIFY);
- if (g_hwndServiceDlg) {
- PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
- }
- }
- else if (FindRunningServices())
- {
- ShowNotifyIcon(hWnd, NIM_MODIFY);
- if (g_hwndServiceDlg) {
- PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
- }
- }
- LeaveCriticalSection(&g_stcSection);
- break;
- }
- }
- break;
-
- case WM_QUIT:
- ShowNotifyIcon(hWnd, NIM_DELETE);
- break;
-
- case WM_TRAYMESSAGE:
- switch (lParam)
- {
- case WM_LBUTTONDBLCLK:
- if (!g_bDlgServiceOn)
- {
- g_bDlgServiceOn = TRUE;
- DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES),
- hWnd, (DLGPROC)ServiceDlgProc);
- g_bDlgServiceOn = FALSE;
- g_hwndServiceDlg = NULL;
- }
- else if (IsWindow(g_hwndServiceDlg))
- {
- /* Dirty hack to bring the window to the foreground */
- SetWindowPos(g_hwndServiceDlg, HWND_TOPMOST, 0, 0, 0, 0,
- SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
- SetWindowPos(g_hwndServiceDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
- SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
- SetFocus(g_hwndServiceDlg);
- }
- break;
-
- case WM_LBUTTONUP:
- ShowTryServicesMenu(hWnd);
- break;
-
- case WM_RBUTTONUP:
- ShowTryPopupMenu(hWnd);
- break;
- }
- break;
-
- case WM_COMMAND:
- if ((LOWORD(wParam) & IDM_SM_START) == IDM_SM_START)
- {
- ApacheManageService(g_stServices[LOWORD(wParam)
- - IDM_SM_START].szServiceName,
- g_stServices[LOWORD(wParam)
- - IDM_SM_START].szImagePath,
- g_stServices[LOWORD(wParam)
- - IDM_SM_START].szComputerName,
- SERVICE_CONTROL_CONTINUE);
- return TRUE;
- }
- else if ((LOWORD(wParam) & IDM_SM_STOP) == IDM_SM_STOP)
- {
- ApacheManageService(g_stServices[LOWORD(wParam)
- - IDM_SM_STOP].szServiceName,
- g_stServices[LOWORD(wParam)
- - IDM_SM_STOP].szImagePath,
- g_stServices[LOWORD(wParam)
- - IDM_SM_STOP].szComputerName,
- SERVICE_CONTROL_STOP);
- return TRUE;
- }
- else if ((LOWORD(wParam) & IDM_SM_RESTART) == IDM_SM_RESTART)
- {
- ApacheManageService(g_stServices[LOWORD(wParam)
- - IDM_SM_RESTART].szServiceName,
- g_stServices[LOWORD(wParam)
- - IDM_SM_RESTART].szImagePath,
- g_stServices[LOWORD(wParam)
- - IDM_SM_RESTART].szComputerName,
- SERVICE_APACHE_RESTART);
- return TRUE;
- }
- switch (LOWORD(wParam))
- {
- case IDM_RESTORE:
- if (!g_bDlgServiceOn)
- {
- g_bDlgServiceOn = TRUE;
- DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES),
- hWnd, (DLGPROC)ServiceDlgProc);
- g_bDlgServiceOn = FALSE;
- g_hwndServiceDlg = NULL;
- }
- else if (IsWindow(g_hwndServiceDlg)) {
- SetFocus(g_hwndServiceDlg);
- }
- break;
-
- case IDC_SMANAGER:
- if (g_dwOSVersion >= OS_VERSION_WIN2K) {
- ShellExecute(NULL, "open", "services.msc", "/s",
- NULL, SW_NORMAL);
- }
- else {
- WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL);
- }
- return TRUE;
-
- case IDM_EXIT:
- ShowNotifyIcon(hWnd, NIM_DELETE);
- PostQuitMessage(0);
- return TRUE;
- }
-
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
-
- return FALSE;
-}
-
-
-/* Create main invisible window */
-HWND CreateMainWindow(HINSTANCE hInstance)
-{
- HWND hWnd = NULL;
- WNDCLASSEX wcex;
-
- if (!GetSystemOSVersion(&g_dwOSVersion))
- {
- ErrorMessage(NULL, TRUE);
- return hWnd;
- }
-
- wcex.cbSize = sizeof(WNDCLASSEX);
-
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = (WNDPROC)WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON),
- IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
- wcex.hCursor = g_hCursorArrow;
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wcex.lpszMenuName = 0;
- wcex.lpszClassName = g_szWindowClass;
- wcex.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON),
- IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
-
- if (RegisterClassEx(&wcex)) {
- hWnd = CreateWindow(g_szWindowClass, g_szTitle,
- 0, 0, 0, 0, 0,
- NULL, NULL, hInstance, NULL);
- }
- return hWnd;
-
-}
-
-
-int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR lpCmdLine, int nCmdShow)
-{
- CHAR szTmp[MAX_LOADSTRING];
- CHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];
- MSG msg;
- /* single instance mutex */
- HANDLE hMutex;
- int i;
- DWORD d;
-
- g_LangID = GetUserDefaultLangID();
- if ((g_LangID & 0xFF) != LANG_ENGLISH) {
- g_LangID = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
- }
- for (i = IDS_MSG_FIRST; i <= IDS_MSG_LAST; ++i) {
- LoadString(hInstance, i, szTmp, MAX_LOADSTRING);
- g_lpMsg[i - IDS_MSG_FIRST] = strdup(szTmp);
- }
- LoadString(hInstance, IDS_APMONITORTITLE, szTmp, MAX_LOADSTRING);
- d = MAX_COMPUTERNAME_LENGTH+1;
- strcpy(szCmp, "\\\\");
- GetComputerName(szCmp + 2, &d);
- strupr(szCmp);
- g_szLocalHost = strdup(szCmp);
-
- memset(g_stComputers, 0, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS);
- g_stComputers[0].szComputerName = strdup(szCmp);
- g_stComputers[0].hRegistry = HKEY_LOCAL_MACHINE;
- g_szTitle = strdup(szTmp);
- LoadString(hInstance, IDS_APMONITORCLASS, szTmp, MAX_LOADSTRING);
- g_szWindowClass = strdup(szTmp);
-
- g_icoStop = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICOSTOP),
- IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
- g_icoRun = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICORUN),
- IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
- g_hCursorHourglass = LoadImage(NULL, MAKEINTRESOURCE(OCR_WAIT),
- IMAGE_CURSOR, LR_DEFAULTSIZE,
- LR_DEFAULTSIZE, LR_SHARED);
- g_hCursorArrow = LoadImage(NULL, MAKEINTRESOURCE(OCR_NORMAL),
- IMAGE_CURSOR, LR_DEFAULTSIZE,
- LR_DEFAULTSIZE, LR_SHARED);
- g_hBmpStart = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPRUN),
- IMAGE_BITMAP, XBITMAP, YBITMAP,
- LR_DEFAULTCOLOR);
- g_hBmpStop = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP),
- IMAGE_BITMAP, XBITMAP, YBITMAP,
- LR_DEFAULTCOLOR);
-
- hMutex = CreateMutex(NULL, FALSE, "APSRVMON_MUTEX");
- if ((hMutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS))
- {
- ErrorMessage(g_lpMsg[IDS_MSG_APPRUNNING - IDS_MSG_FIRST], FALSE);
- if (hMutex) {
- CloseHandle(hMutex);
- }
- return 0;
- }
-
- memset(g_stServices, 0, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES);
- CoInitialize(NULL);
- InitCommonControls();
- g_hInstance = hInstance;
- g_hwndMain = CreateMainWindow(hInstance);
- g_bUiTaskbarCreated = RegisterWindowMessage("TaskbarCreated");
- InitializeCriticalSection(&g_stcSection);
- g_hwndServiceDlg = NULL;
- if (g_hwndMain != NULL)
- {
- while (GetMessage(&msg, NULL, 0, 0) == TRUE)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- am_ClearServicesSt();
- }
- am_ClearComputersSt();
- DeleteCriticalSection(&g_stcSection);
- CloseHandle(hMutex);
- DestroyIcon(g_icoStop);
- DestroyIcon(g_icoRun);
- DestroyCursor(g_hCursorHourglass);
- DestroyCursor(g_hCursorArrow);
- DeleteObject(g_hBmpStart);
- DeleteObject(g_hBmpStop);
- CoUninitialize();
- return 0;
-}
diff --git a/support/win32/ApacheMonitor.dsp b/support/win32/ApacheMonitor.dsp
deleted file mode 100644
index 32c8462999..0000000000
--- a/support/win32/ApacheMonitor.dsp
+++ /dev/null
@@ -1,175 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ApacheMonitor" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=ApacheMonitor - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ApacheMonitor.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ApacheMonitor.mak" CFG="ApacheMonitor - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ApacheMonitor - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "ApacheMonitor - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ApacheMonitor - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /Fd"Release/ApacheMonitor_src" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /i ".\\" /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib /nologo /subsystem:windows /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "ApacheMonitor - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /Fd"Debug/ApacheMonitor_src" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /i ".\\" /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib /nologo /subsystem:windows /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "ApacheMonitor - Win32 Release"
-# Name "ApacheMonitor - Win32 Debug"
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\apache_header.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.rc
-# PROP Exclude_From_Build 1
-# End Source File
-# Begin Source File
-
-SOURCE=.\aprun.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\apstop.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\srun.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\sstop.bmp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitorVer.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "ApacheMonitor - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__WIN32="..\..\include\ap_release.h" ".\ApacheMonitor.rc"
-# Begin Custom Build - Creating versioned resources
-InputPath=..\..\build\win32\win32ver.awk
-
-".\ApacheMonitorVer.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- echo /* This file is autogenerated from ApacheMonitor.rc > ApacheMonitorVer.rc
- echo * DO NOT EDIT! >> ApacheMonitorVer.rc
- echo */ >> ApacheMonitorVer.rc
- type ApacheMonitor.rc >> ApacheMonitorVer.rc
- awk -f ../../build/win32/win32ver.awk ApacheMonitor.exe "Apache HTTP Server Monitor" ../../include/ap_release.h >> ApacheMonitorVer.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "ApacheMonitor - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__WIN32="..\..\include\ap_release.h" ".\ApacheMonitor.rc"
-# Begin Custom Build - Creating versioned resources
-InputPath=..\..\build\win32\win32ver.awk
-
-".\ApacheMonitorVer.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- echo /* This file is autogenerated from ApacheMonitor.rc > ApacheMonitorVer.rc
- echo * DO NOT EDIT! >> ApacheMonitorVer.rc
- echo */ >> ApacheMonitorVer.rc
- type ApacheMonitor.rc >> ApacheMonitorVer.rc
- awk -f ../../build/win32/win32ver.awk ApacheMonitor.exe "Apache HTTP Server Monitor" ../../include/ap_release.h >> ApacheMonitorVer.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/win32/ApacheMonitor.h b/support/win32/ApacheMonitor.h
deleted file mode 100644
index db44acdb1a..0000000000
--- a/support/win32/ApacheMonitor.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Resource definitions for ApacheMonitor.rc and ApacheMonitor.c
- */
-
-#define IDD_DLGSERVICES 101
-#define IDS_APMONITORTITLE 102
-#define IDS_APMONITORCLASS 103
-#define IDM_RESTORE 104
-#define IDM_EXIT 105
-#define IDI_APSRVMON 106
-#define IDI_ICOSTOP 107
-#define IDI_ICORUN 108
-#define IDC_STATBAR 109
-#define IDC_SSTATUS 110
-#define IDB_BMPSTOP 111
-#define IDB_BMPRUN 112
-#define IDB_BMPHEADER 114
-#define IDL_SERVICES 115
-#define IDL_STDOUT 116
-#define IDC_SSTART 117
-#define IDC_SSTOP 118
-#define IDC_SRESTART 119
-#define IDC_SEXIT 120
-#define IDC_SMANAGER 121
-#define IDD_DLGCONNECT 122
-#define IDC_LREMOTE 123
-#define IDC_LBROWSE 124
-#define IDC_COMPUTER 125
-#define IDC_SCONNECT 126
-#define IDC_SDISCONN 127
-#define IDS_MSG_FIRST 256
-#define IDS_MSG_APPRUNNING 256
-#define IDS_MSG_ERROR 257
-#define IDS_MSG_RUNNINGALL 258
-#define IDS_MSG_RUNNING 259
-#define IDS_MSG_RUNNINGNONE 260
-#define IDS_MSG_NOSERVICES 261
-#define IDS_MSG_MNUSERVICES 262
-#define IDS_MSG_MNUSHOW 263
-#define IDS_MSG_MNUEXIT 264
-#define IDS_MSG_SRVSTART 265
-#define IDS_MSG_SRVSTARTED 266
-#define IDS_MSG_SRVSTOP 267
-#define IDS_MSG_SRVSTOPPED 268
-#define IDS_MSG_SRVRESTART 269
-#define IDS_MSG_SRVRESTARTED 270
-#define IDS_MSG_SRVFAILED 271
-#define IDS_MSG_SSTART 272
-#define IDS_MSG_SSTOP 273
-#define IDS_MSG_SRESTART 274
-#define IDS_MSG_SERVICES 275
-#define IDS_MSG_CONNECT 276
-#define IDS_MSG_ECONNECT 277
-#define IDS_MSG_LAST 277
-#define IDM_SM_SERVICE 0x1100
-#define IDM_SM_START 0x1200
-#define IDM_SM_STOP 0x1400
-#define IDM_SM_RESTART 0x1800
-#define IDC_STATIC -1
-
diff --git a/support/win32/ApacheMonitor.ico b/support/win32/ApacheMonitor.ico
deleted file mode 100644
index cd28dc520c..0000000000
--- a/support/win32/ApacheMonitor.ico
+++ /dev/null
Binary files differ
diff --git a/support/win32/ApacheMonitor.rc b/support/win32/ApacheMonitor.rc
deleted file mode 100644
index 3a881bbc7a..0000000000
--- a/support/win32/ApacheMonitor.rc
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <windows.h>
-
-#include "ApacheMonitor.h"
-
-IDI_APSRVMON ICON DISCARDABLE "ApacheMonitor.ico"
-IDI_ICOSTOP ICON DISCARDABLE "apstop.ico"
-IDI_ICORUN ICON DISCARDABLE "aprun.ico"
-
-IDD_DLGSERVICES DIALOGEX 0, 0, 350, 188
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_MINIMIZEBOX | WS_VISIBLE |
- WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "Apache Service Monitor"
-FONT 8, "MS Sans Serif"
-BEGIN
- DEFPUSHBUTTON "&OK",IDOK,298,49,50,14
- LTEXT "Service St&atus :",IDC_SSTATUS,3,40,272,8
- LISTBOX IDL_SERVICES,2,49,285,73,LBS_OWNERDRAWFIXED |
- LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT |
- LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
- LISTBOX IDL_STDOUT,2,124,285,51,LBS_NOINTEGRALHEIGHT |
- LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL
- PUSHBUTTON "&Start",IDC_SSTART,298,65,50,14
- PUSHBUTTON "S&top",IDC_SSTOP,298,81,50,14
- PUSHBUTTON "&Restart",IDC_SRESTART,298,97,50,14
- PUSHBUTTON "Ser&vices",IDC_SMANAGER,298,113,50,14
- CONTROL IDB_BMPHEADER,IDC_STATIC,"Static",SS_BITMAP,0,0,349,38
- PUSHBUTTON "&Connect",IDC_SCONNECT,298,129,50,14
- PUSHBUTTON "&Disconnect",IDC_SDISCONN,298,145,50,14
- PUSHBUTTON "E&xit",IDC_SEXIT,298,161,50,14
-END
-
-IDD_DLGCONNECT DIALOGEX 0, 0, 240, 54
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_VISIBLE | WS_CLIPCHILDREN |
- WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "Connect To A Remote Computer"
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "Computer &Name:",IDC_LREMOTE,7,4,155,8
- EDITTEXT IDC_COMPUTER,7,14,169,14,ES_AUTOHSCROLL
- DEFPUSHBUTTON "&OK",IDOK,183,14,50,14
- PUSHBUTTON "&Cancel",IDCANCEL,183,34,50,14
- PUSHBUTTON "&Browse",IDC_LBROWSE,7,34,50,14
-END
-
-IDB_BMPSTOP BITMAP DISCARDABLE "sstop.bmp"
-IDB_BMPRUN BITMAP DISCARDABLE "srun.bmp"
-IDB_BMPHEADER BITMAP DISCARDABLE "apache_header.bmp"
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_APMONITORTITLE "Apache Service Monitor"
- IDS_APMONITORCLASS "ApacheServiceMonitorClass"
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDS_MSG_APPRUNNING "Apache monitor is already started"
- IDS_MSG_ERROR "Error"
- IDS_MSG_RUNNINGALL "Running all Apache services"
- IDS_MSG_RUNNING "Running %d of %d Apache services"
- IDS_MSG_RUNNINGNONE "Running none of %d Apache services"
- IDS_MSG_NOSERVICES "No services installed"
- IDS_MSG_MNUSERVICES "Open &Services"
- IDS_MSG_MNUSHOW "&Open Apache Monitor"
- IDS_MSG_MNUEXIT "E&xit"
- IDS_MSG_SRVSTART "The %s service is starting."
- IDS_MSG_SRVSTARTED "The %s service has started."
- IDS_MSG_SRVSTOP "The %s service is stopping."
- IDS_MSG_SRVSTOPPED "The %s service has stopped."
- IDS_MSG_SRVRESTART "The %s service is restarting."
- IDS_MSG_SRVRESTARTED "The %s service has restarted."
- IDS_MSG_SRVFAILED "The requested operation has failed!"
- IDS_MSG_SSTART "&Start"
- IDS_MSG_SSTOP "S&top"
- IDS_MSG_SRESTART "&Restart"
- IDS_MSG_SERVICES "Ser&vices"
- IDS_MSG_CONNECT "&Connect"
- IDS_MSG_ECONNECT "Unable to connect to the remote registry on %s"
-END
diff --git a/support/win32/apache_header.bmp b/support/win32/apache_header.bmp
deleted file mode 100644
index 7340fac2ac..0000000000
--- a/support/win32/apache_header.bmp
+++ /dev/null
Binary files differ
diff --git a/support/win32/aprun.ico b/support/win32/aprun.ico
deleted file mode 100644
index dbd5832602..0000000000
--- a/support/win32/aprun.ico
+++ /dev/null
Binary files differ
diff --git a/support/win32/apstop.ico b/support/win32/apstop.ico
deleted file mode 100644
index fba49ad292..0000000000
--- a/support/win32/apstop.ico
+++ /dev/null
Binary files differ
diff --git a/support/win32/srun.bmp b/support/win32/srun.bmp
deleted file mode 100644
index 90ecd46f17..0000000000
--- a/support/win32/srun.bmp
+++ /dev/null
Binary files differ
diff --git a/support/win32/sstop.bmp b/support/win32/sstop.bmp
deleted file mode 100644
index ba73d87aec..0000000000
--- a/support/win32/sstop.bmp
+++ /dev/null
Binary files differ
diff --git a/support/win32/wintty.c b/support/win32/wintty.c
deleted file mode 100644
index 1c67d54c68..0000000000
--- a/support/win32/wintty.c
+++ /dev/null
@@ -1,368 +0,0 @@
-/* Copyright 2001-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* --------------------------------------------------------------------
- *
- * wintty : a Apache/WinNT support utility for monitoring and
- * reflecting user feedback from the Apache process via
- * stdin/stdout, even as running within the service context.
- *
- * Originally contributed by William Rowe <wrowe covalent.net>
- *
- * Note: this implementation is _very_ experimental, and error handling
- * is far from complete. Using it as a cgi or pipe process allows the
- * programmer to discover if facilities such as reliable piped logs
- * are working as expected, or answer operator prompts that would
- * otherwise be discarded by the service process.
- *
- * Also note the isservice detection semantics, which far exceed any
- * mechanism we have discovered thus far.
- *
- * --------------------------------------------------------------------
- */
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-const char *options =
-"\nwintty: a utility for echoing the stdin stream to a new console window,\n"
-"\teven when invoked from within a service (such as the Apache server.)\n"
-"\tAlso reflects the console input back to the stdout stream, allowing\n"
-"\tthe operator to respond to prompts from the context of a service.\n\n"
-"Syntax: %s [opts] [-t \"Window Title\"]\n\n"
-" opts: -c{haracter} or -l{ine} input\n"
-"\t-q{uiet} or -e{cho} input\n"
-"\t-u{nprocessed} or -p{rocessed} input\n"
-"\t-n{owrap} or -w{rap} output lines\n"
-"\t-f{ormatted} or -r{aw} output lines\n"
-"\t-O{output} [number of seconds]\n"
-"\t-v{erbose} error reporting (for debugging)\n"
-"\t-? for this message\n\n";
-
-BOOL verbose = FALSE;
-
-void printerr(char *fmt, ...)
-{
- char str[1024];
- va_list args;
- if (!verbose)
- return;
- va_start(args, fmt);
- wvsprintf(str, fmt, args);
- OutputDebugString(str);
-}
-
-DWORD WINAPI feedback(LPVOID args);
-
-typedef struct feedback_args_t {
- HANDLE in;
- HANDLE out;
-} feedback_args_t;
-
-int main(int argc, char** argv)
-{
- char str[1024], *contitle = NULL;
- HANDLE hproc, thread;
- HANDLE hwinsta = NULL, hsavewinsta;
- HANDLE hdesk = NULL, hsavedesk = NULL;
- HANDLE conin, conout;
- HANDLE hstdin, hstdout, hstderr, hdup;
- feedback_args_t feed;
- DWORD conmode;
- DWORD newinmode = 0, notinmode = 0;
- DWORD newoutmode = 0, notoutmode = 0;
- DWORD tid;
- DWORD len;
- DWORD timeout = INFINITE;
- BOOL isservice = FALSE;
- char *arg0 = argv[0];
-
- while (--argc) {
- ++argv;
- if (**argv == '/' || **argv == '-') {
- switch (tolower((*argv)[1])) {
- case 'c':
- notinmode |= ENABLE_LINE_INPUT; break;
- case 'l':
- newinmode |= ENABLE_LINE_INPUT; break;
- case 'q':
- notinmode |= ENABLE_ECHO_INPUT; break;
- case 'e':
- newinmode |= ENABLE_ECHO_INPUT; break;
- case 'u':
- notinmode |= ENABLE_PROCESSED_INPUT; break;
- case 'p':
- newinmode |= ENABLE_PROCESSED_INPUT; break;
- case 'n':
- notoutmode |= ENABLE_WRAP_AT_EOL_OUTPUT; break;
- case 'w':
- newoutmode |= ENABLE_WRAP_AT_EOL_OUTPUT; break;
- case 'r':
- notoutmode |= ENABLE_PROCESSED_OUTPUT; break;
- case 'f':
- newoutmode |= ENABLE_PROCESSED_OUTPUT; break;
- case 'o':
- if (*(argv + 1) && *(argv + 1)[0] != '-') {
- *(++argv);
- timeout = atoi(*argv) / 1000;
- --argc;
- }
- else {
- timeout = 0;
- }
- break;
- case 'v':
- verbose = TRUE;
- break;
- case 't':
- contitle = *(++argv);
- --argc;
- break;
- case '?':
- printf(options, arg0);
- exit(1);
- default:
- printf("wintty option %s not recognized, use -? for help.\n\n", *argv);
- exit(1);
- }
- }
- else {
- printf("wintty argument %s not understood, use -? for help.\n\n", *argv);
- exit(1);
- }
- }
-
- hproc = GetCurrentProcess();
- hsavewinsta = GetProcessWindowStation();
- if (!hsavewinsta || hsavewinsta == INVALID_HANDLE_VALUE) {
- printerr("GetProcessWindowStation() failed (%d)\n", GetLastError());
- }
- else if (!GetUserObjectInformation(hsavewinsta, UOI_NAME, str, sizeof(str), &len)) {
- printerr("GetUserObjectInfoformation(hWinSta) failed (%d)\n", GetLastError());
- }
- else if (strnicmp(str, "Service-", 8) == 0) {
- printerr("WindowStation Name %s is a service\n", str);
- isservice = TRUE;
- }
- SetLastError(0);
-
- hstdin = GetStdHandle(STD_INPUT_HANDLE);
- if (!hstdin || hstdin == INVALID_HANDLE_VALUE) {
- printerr("GetStdHandle(STD_INPUT_HANDLE) failed (%d)\n",
- GetLastError());
- }
- else if (DuplicateHandle(hproc, hstdin, hproc, &hdup, 0,
- isservice, DUPLICATE_SAME_ACCESS)) {
- CloseHandle(hstdin);
- hstdin = hdup;
- }
- else {
- printerr("DupHandle(stdin [%x]) failed (%d)\n",
- hstdin, GetLastError());
- }
-
- hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
- if (!hstdout || hstdout == INVALID_HANDLE_VALUE) {
- printerr("GetStdHandle(STD_OUTPUT_HANDLE) failed (%d)\n",
- GetLastError());
- }
- else if (DuplicateHandle(hproc, hstdout, hproc, &hdup, 0,
- isservice, DUPLICATE_SAME_ACCESS)) {
- CloseHandle(hstdout);
- hstdout = hdup;
- }
- else {
- printerr("DupHandle(stdout [%x]) failed (%d)\n",
- hstdout, GetLastError());
- }
-
- hstderr = GetStdHandle(STD_ERROR_HANDLE);
- if (!hstderr || hstderr == INVALID_HANDLE_VALUE) {
- printerr("GetStdHandle(STD_ERROR_HANDLE) failed (%d)\n",
- GetLastError());
- }
- else if (DuplicateHandle(hproc, hstderr, hproc, &hdup, 0,
- isservice, DUPLICATE_SAME_ACCESS)) {
- CloseHandle(hstderr);
- hstderr = hdup;
- }
- else {
- printerr("DupHandle(stderr [%x]) failed (%d)\n",
- hstderr, GetLastError());
- }
-
- /* You can't close the console till all the handles above were
- * rescued by DuplicateHandle()
- */
- if (!FreeConsole())
- printerr("FreeConsole() failed (%d)\n", GetLastError());
-
- if (isservice) {
-#ifdef WE_EVER_FIGURE_OUT_WHY_THIS_DOESNT_WORK
- hsavedesk = GetThreadDesktop(GetCurrentThreadId());
- if (!hsavedesk || hsavedesk == INVALID_HANDLE_VALUE) {
- printerr("GetThreadDesktop(GetTID()) failed (%d)\n", GetLastError());
- }
- CloseWindowStation(hwinsta);
- hwinsta = OpenWindowStation("WinSta0", TRUE, MAXIMUM_ALLOWED);
- if (!hwinsta || hwinsta == INVALID_HANDLE_VALUE) {
- printerr("OpenWinSta(WinSta0) failed (%d)\n", GetLastError());
- }
- else if (!SetProcessWindowStation(hwinsta)) {
- printerr("SetProcWinSta(WinSta0) failed (%d)\n", GetLastError());
- }
- hdesk = OpenDesktop("Default", 0, TRUE, MAXIMUM_ALLOWED);
- if (!hdesk || hdesk == INVALID_HANDLE_VALUE) {
- printerr("OpenDesktop(Default) failed (%d)\n", GetLastError());
- }
- else if (!SetThreadDesktop(hdesk)) {
- printerr("SetThreadDesktop(Default) failed (%d)\n", GetLastError());
- }
-#else
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- DWORD exitcode = 1;
- char appbuff[MAX_PATH];
- char *appname = NULL;
- char *cmdline = GetCommandLine();
-
- if (!GetModuleFileName(NULL, appbuff, sizeof(appbuff))) {
- appname = appbuff;
- }
-
- memset(&si, 0, sizeof(si));
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESHOWWINDOW
- | STARTF_USESTDHANDLES;
- si.lpDesktop = "WinSta0\\Default";
- si.wShowWindow = 1; /* SW_SHOWNORMAL */
- si.hStdInput = hstdin;
- si.hStdOutput = hstdout;
- si.hStdError = hstderr;
-
- /* Instantly, upon creating the new process, we will close our
- * copies of the handles so our parent isn't confused when the
- * child closes their copy of the handle. Without this action,
- * we would hold a copy of the handle, and the parent would not
- * receive their EOF notification.
- */
- if (CreateProcess(appname, cmdline, NULL, NULL, TRUE,
- CREATE_SUSPENDED | CREATE_NEW_CONSOLE,
- NULL, NULL, &si, &pi)) {
- CloseHandle(si.hStdInput);
- CloseHandle(si.hStdOutput);
- CloseHandle(si.hStdError);
- ResumeThread(pi.hThread);
- CloseHandle(pi.hThread);
- WaitForSingleObject(pi.hProcess, INFINITE);
- GetExitCodeProcess(pi.hProcess, &exitcode);
- CloseHandle(pi.hProcess);
- return exitcode;
- }
- return 1;
-#endif
- }
-
- if (!AllocConsole()) {
- printerr("AllocConsole(Default) failed (%d)\n", GetLastError());
- }
-
- if (contitle && !SetConsoleTitle(contitle)) {
- printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
- }
-
- conout = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- FALSE, OPEN_EXISTING, 0, NULL);
- if (!conout || conout == INVALID_HANDLE_VALUE) {
- printerr("CreateFile(CONOUT$) failed (%d)\n", GetLastError());
- }
- else if (!GetConsoleMode(conout, &conmode)) {
- printerr("GetConsoleMode(CONOUT) failed (%d)\n", GetLastError());
- }
- else if (!SetConsoleMode(conout, conmode = ((conmode | newoutmode)
- & ~notoutmode))) {
- printerr("SetConsoleMode(CONOUT, 0x%x) failed (%d)\n",
- conmode, GetLastError());
- }
-
- conin = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- FALSE, OPEN_EXISTING, 0, NULL);
- if (!conin || conin == INVALID_HANDLE_VALUE) {
- printerr("CreateFile(CONIN$) failed (%d)\n", GetLastError());
- }
- else if (!GetConsoleMode(conin, &conmode)) {
- printerr("GetConsoleMode(CONIN) failed (%d)\n", GetLastError());
- }
- else if (!SetConsoleMode(conin, conmode = ((conmode | newinmode)
- & ~notinmode))) {
- printerr("SetConsoleMode(CONIN, 0x%x) failed (%d)\n",
- conmode, GetLastError());
- }
-
- feed.in = conin;
- feed.out = hstdout;
- thread = CreateThread(NULL, 0, feedback, (LPVOID)&feed, 0, &tid);
-
- while (ReadFile(hstdin, str, sizeof(str), &len, NULL))
- if (!len || !WriteFile(conout, str, len, &len, NULL))
- break;
-
- printerr("[EOF] from stdin (%d)\n", GetLastError());
-
- CloseHandle(stdout);
- if (!GetConsoleTitle(str, sizeof(str))) {
- printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
- }
- else {
- strcat(str, " - [Finished]");
- if (!SetConsoleTitle(str)) {
- printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
- }
- }
-
- WaitForSingleObject(thread, timeout);
- FreeConsole();
- if (isservice) {
- if (!SetProcessWindowStation(hsavewinsta)) {
- len = GetLastError();
- }
- if (!SetThreadDesktop(hsavedesk)) {
- len = GetLastError();
- }
- CloseDesktop(hdesk);
- CloseWindowStation(hwinsta);
- }
- return 0;
-}
-
-
-DWORD WINAPI feedback(LPVOID arg)
-{
- feedback_args_t *feed = (feedback_args_t*)arg;
- char *str[1024];
- DWORD len;
-
- while (ReadFile(feed->in, str, sizeof(str), &len, NULL))
- if (!len || !WriteFile(feed->out, str, len, &len, NULL))
- break;
-
- printerr("[EOF] from Console (%d)\n", GetLastError());
-
- return 0;
-}
diff --git a/support/win32/wintty.dsp b/support/win32/wintty.dsp
deleted file mode 100644
index f7da977528..0000000000
--- a/support/win32/wintty.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="wintty" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=wintty - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "wintty.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "wintty.mak" CFG="wintty - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "wintty - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "wintty - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "wintty - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/wintty_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /debug /machine:I386 /opt:ref
-
-!ELSEIF "$(CFG)" == "wintty - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/wintty_src" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386
-
-!ENDIF
-
-# Begin Target
-
-# Name "wintty - Win32 Release"
-# Name "wintty - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF "$(CFG)" == "wintty - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\wintty.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk wintty.exe "wintty Console Utility" ../../include/ap_release.h > .\wintty.rc
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "wintty - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\wintty.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- awk -f ../../build/win32/win32ver.awk wintty.exe "wintty Console Utility" ../../include/ap_release.h > .\wintty.rc
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\wintty.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\wintty.rc
-# End Source File
-# End Target
-# End Project
diff --git a/test/.cvsignore b/test/.cvsignore
deleted file mode 100644
index d961cf092b..0000000000
--- a/test/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-a.out
-time-FCNTL
-time-FLOCK
-time-SYSVSEM
-time-SYSVSEM2
-time-PTHREAD
-time-USLOCK
-zb
-test-writev
-test_date
-test_select
-.libs
-.deps
-*.lo
-Makefile
-dbu
diff --git a/test/.indent.pro b/test/.indent.pro
deleted file mode 100644
index a9fbe9f9a1..0000000000
--- a/test/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/test/Makefile.in b/test/Makefile.in
deleted file mode 100644
index 6d83405477..0000000000
--- a/test/Makefile.in
+++ /dev/null
@@ -1,20 +0,0 @@
-
-# no targets: we don't want to build anything by default. if you want the
-# test programs, then "make test"
-TARGETS =
-
-PROGRAMS =
-
-PROGRAM_LDADD = $(EXTRA_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS)
-PROGRAM_DEPENDENCIES = \
- $(top_srcdir)/srclib/apr-util/libaprutil.la \
- $(top_srcdir)/srclib/apr/libapr.la
-
-include $(top_builddir)/build/rules.mk
-
-test: $(PROGRAMS)
-
-# example for building a test proggie
-# dbu_OBJECTS = dbu.lo
-# dbu: $(dbu_OBJECTS)
-# $(LINK) $(dbu_OBJECTS) $(PROGRAM_LDADD)
diff --git a/test/README b/test/README
deleted file mode 100644
index 9f8be502b8..0000000000
--- a/test/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains useful test code for testing various bits
-of Apache functionality. This stuff is for the developers only,
-so we might remove it on public releases.
diff --git a/test/check_chunked b/test/check_chunked
deleted file mode 100644
index 7dc5fa287d..0000000000
--- a/test/check_chunked
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright 2000-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# This is meant to be used on the raw output of an HTTP/1.1 connection
-# to check that the chunks are all correctly laid out. It's easiest
-# to use a tool like netcat to generate the output. This script
-# *insists* that \r exist in the output.
-#
-# You can find netcat at avian.org:/src/hacks/nc110.tgz.
-
-use strict;
-
-my $is_chunked = 0;
-
-# must toss headers
-while(<>) {
- if (/^Transfer-Encoding:\s+chunked/i) {
- $is_chunked = 1;
- }
- last if ($_ eq "\r\n");
-}
-
-$is_chunked || die "wasn't chunked\n";
-
-for(;;) {
- $_ = <> || die "unexpected end of file!\n";
-
- m#^([0-9a-f]+) *\r$#i || die "bogus chunklen: $_";
-
- my $chunklen = hex($1);
-
- exit 0 if ($chunklen == 0);
-
- chop; chop;
- print "$_ ";
-
- my $data = '';
- read(ARGV, $data, $chunklen) == $chunklen || die "short read!\n";
-
- $_ = <> || die "unexpected end of file!\n";
-
- $_ eq "\r\n" || die "missing chunk trailer!\n";
-}
diff --git a/test/cls.c b/test/cls.c
deleted file mode 100644
index 4f7a555105..0000000000
--- a/test/cls.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ctype.h>
-#include <dirent.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-/*
- * Compare a string to a mask
- * Mask characters:
- * @ - uppercase letter
- * # - lowercase letter
- * & - hex digit
- * # - digit
- * * - swallow remaining characters
- * <x> - exact match for any other character
- */
-static int checkmask(const char *data, const char *mask)
-{
- int i, ch, d;
-
- for (i = 0; mask[i] != '\0' && mask[i] != '*'; i++) {
- ch = mask[i];
- d = data[i];
- if (ch == '@') {
- if (!isupper(d))
- return 0;
- }
- else if (ch == '$') {
- if (!islower(d))
- return 0;
- }
- else if (ch == '#') {
- if (!isdigit(d))
- return 0;
- }
- else if (ch == '&') {
- if (!isxdigit(d))
- return 0;
- }
- else if (ch != d)
- return 0;
- }
-
- if (mask[i] == '*')
- return 1;
- else
- return (data[i] == '\0');
-}
-
-/*
- * Converts 8 hex digits to a time integer
- */
-static int hex2sec(const char *x)
-{
- int i, ch;
- unsigned int j;
-
- for (i = 0, j = 0; i < 8; i++) {
- ch = x[i];
- j <<= 4;
- if (isdigit(ch))
- j |= ch - '0';
- else if (isupper(ch))
- j |= ch - ('A' - 10);
- else
- j |= ch - ('a' - 10);
- }
- if (j == 0xffffffff)
- return -1; /* so that it works with 8-byte ints */
- else
- return j;
-}
-
-int main(int argc, char **argv)
-{
- int i, ver;
- DIR *d;
- struct dirent *e;
- const char *s;
- FILE *fp;
- char path[FILENAME_MAX + 1];
- char line[1035];
- time_t date, lmod, expire;
- unsigned int len;
- struct tm ts;
- char sdate[30], slmod[30], sexpire[30];
- const char time_format[] = "%e %b %Y %R";
-
- if (argc != 2) {
- printf("Usage: cls directory\n");
- exit(0);
- }
-
- d = opendir(argv[1]);
- if (d == NULL) {
- perror("opendir");
- exit(1);
- }
-
- for (;;) {
- e = readdir(d);
- if (e == NULL)
- break;
- s = e->d_name;
- if (s[0] == '.' || s[0] == '#')
- continue;
- sprintf(path, "%s/%s", argv[1], s);
- fp = fopen(path, "r");
- if (fp == NULL) {
- perror("fopen");
- continue;
- }
- if (fgets(line, 1034, fp) == NULL) {
- perror("fgets");
- fclose(fp);
- continue;
- }
- if (!checkmask(line, "&&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&&\n")) {
- fprintf(stderr, "Bad cache file\n");
- fclose(fp);
- continue;
- }
- date = hex2sec(line);
- lmod = hex2sec(line + 9);
- expire = hex2sec(line + 18);
- ver = hex2sec(line + 27);
- len = hex2sec(line + 35);
- if (fgets(line, 1034, fp) == NULL) {
- perror("fgets");
- fclose(fp);
- continue;
- }
- fclose(fp);
- i = strlen(line);
- if (strncmp(line, "X-URL: ", 7) != 0 || line[i - 1] != '\n') {
- fprintf(stderr, "Bad cache file\n");
- continue;
- }
- line[i - 1] = '\0';
- if (date != -1) {
- ts = *gmtime(&date);
- strftime(sdate, 30, time_format, &ts);
- }
- else
- strcpy(sdate, "-");
-
- if (lmod != -1) {
- ts = *gmtime(&lmod);
- strftime(slmod, 30, time_format, &ts);
- }
- else
- strcpy(slmod, "-");
-
- if (expire != -1) {
- ts = *gmtime(&expire);
- strftime(sexpire, 30, time_format, &ts);
- }
- else
- strcpy(sexpire, "-");
-
- printf("%s: %d; %s %s %s\n", line + 7, ver, sdate, slmod, sexpire);
- }
-
- closedir(d);
- return 0;
-}
diff --git a/test/tcpdumpscii.txt b/test/tcpdumpscii.txt
deleted file mode 100644
index 9c1060edab..0000000000
--- a/test/tcpdumpscii.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-
-From marcs@znep.com Fri Apr 17 15:16:16 1998
-Date: Sat, 22 Nov 1997 20:44:10 -0700 (MST)
-From: Marc Slemko <marcs@znep.com>
-To: TLOSAP <new-httpd@apache.org>
-Subject: Re: Getting ethernet packets content under FreeBSD? (fwd)
-Reply-To: new-httpd@apache.org
-
-Anyone too lazy to hack tcpdump (eg. my tcpdump has a -X option to display
-the data in ASCII) can use something like the below to grab HTTP headers
-when debugging broken clients.
-
-Nothing complicated, but handy.
-
----------- Forwarded message ----------
-Date: Sat, 22 Nov 1997 14:35:23 PST
-From: Bill Fenner <fenner@parc.xerox.com>
-To: Nate Williams <nate@mt.sri.com>
-Cc: bmah@ca.sandia.gov, hackers@FreeBSD.ORG
-Subject: Re: Getting ethernet packets content under FreeBSD?
-
-I usually just use this perl script, which I call "tcpdumpscii".
-Then run "tcpdumpscii -s 1500 -x [other tcpdump args]".
-
- Bill
-
-#!/import/misc/bin/perl
-#
-#
-open(TCPDUMP,"tcpdump -l @ARGV|");
-while (<TCPDUMP>) {
- if (/^\s+(\S\S)+/) {
- $sav = $_;
- $asc = "";
- while (s/\s*(\S\S)\s*//) {
- $i = hex($1);
- if ($i < 32 || $i > 126) {
- $asc .= ".";
- } else {
- $asc .= pack(C,hex($1));
- }
- }
- $foo = "." x length($asc);
- $_ = $sav;
- s/\t/ /g;
- s/^$foo/$asc/;
- }
- print;
-}
-
diff --git a/test/test-writev.c b/test/test-writev.c
deleted file mode 100644
index 9705f671f8..0000000000
--- a/test/test-writev.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- test-writev: use this to figure out if your writev() does intelligent
- things on the network. Some writev()s when given multiple buffers
- will break them up into multiple packets, which is a waste.
-
- Linux prior to 2.0.31 has this problem.
-
- Solaris 2.5, 2.5.1 doesn't appear to, 2.6 hasn't been tested.
-
- IRIX 5.3 doesn't have this problem.
-
- To use this you want to snoop the wire with tcpdump, and then run
- "test-writev a.b.c.d port#" ... against some TCP service on another
- box. For example you can run it against port 80 on another server.
- You want to look to see how many data packets are sent, you're hoping
- only one of size 300 is sent.
-*/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#include <sys/uio.h>
-#include <errno.h>
-
-#ifndef INADDR_NONE
-#define INADDR_NONE (-1ul)
-#endif
-
-void main( int argc, char **argv )
-{
- struct sockaddr_in server_addr;
- int s;
- struct iovec vector[3];
- char buf[100];
- int i;
- const int just_say_no = 1;
-
- if( argc != 3 ) {
-usage:
- fprintf( stderr, "usage: test-writev a.b.c.d port#\n" );
- exit( 1 );
- }
- server_addr.sin_family = AF_INET;
- server_addr.sin_addr.s_addr = inet_addr( argv[1] );
- if( server_addr.sin_addr.s_addr == INADDR_NONE ) {
- fprintf( stderr, "bogus address\n" );
- goto usage;
- }
- server_addr.sin_port = htons( atoi( argv[2] ) );
-
- s = socket( AF_INET, SOCK_STREAM, 0 );
- if( s < 0 ) {
- perror("socket");
- exit(1);
- }
- if( connect( s, (struct sockaddr *)&server_addr, sizeof( server_addr ) )
- != 0 ) {
- perror("connect");
- exit(1);
- }
-
- if( setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&just_say_no,
- sizeof(just_say_no)) != 0 ) {
- perror( "TCP_NODELAY" );
- exit(1);
- }
- /* now build up a two part writev and write it out */
- for( i = 0; i < sizeof( buf ); ++i ) {
- buf[i] = 'x';
- }
- vector[0].iov_base = buf;
- vector[0].iov_len = sizeof(buf);
- vector[1].iov_base = buf;
- vector[1].iov_len = sizeof(buf);
- vector[2].iov_base = buf;
- vector[2].iov_len = sizeof(buf);
-
- i = writev( s, &vector[0], 3 );
- fprintf( stdout, "i=%d, errno=%d\n", i, errno );
- exit(0);
-}
diff --git a/test/test_find.c b/test/test_find.c
deleted file mode 100644
index a2cda710bd..0000000000
--- a/test/test_find.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This program tests the ap_find_list_item routine in ../main/util.c.
- *
- * The defines in this sample compile line are specific to Roy's system.
- * They should match whatever was used to compile Apache first.
- *
- gcc -g -O2 -I../os/unix -I../include -o test_find \
- -DSOLARIS2=250 -Wall -DALLOC_DEBUG -DPOOL_DEBUG \
- ../main/alloc.o ../main/buff.o ../main/util.o \
- ../ap/libap.a -lsocket -lnsl test_find.c
- *
- * Roy Fielding, 1999
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "httpd.h"
-#include "apr_general.h"
-
-/*
- * Dummy a bunch of stuff just to get a compile
- */
-uid_t ap_user_id;
-gid_t ap_group_id;
-void *ap_dummy_mutex = &ap_dummy_mutex;
-char *ap_server_argv0;
-
-AP_DECLARE(void) ap_block_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_unblock_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
- const request_rec *r, const char *fmt, ...)
-{
- ;
-}
-
-int main (void)
-{
- apr_pool_t *p;
- char line[512];
- char tok[512];
-
- p = apr_pool_alloc_init();
-
- printf("Enter field value to find items within:\n");
- if (!gets(line))
- exit(0);
-
- printf("Enter search item:\n");
- while (gets(tok)) {
- printf(" [%s] == %s\n", tok, ap_find_list_item(p, line, tok)
- ? "Yes" : "No");
- printf("Enter search item:\n");
- }
-
- exit(0);
-}
diff --git a/test/test_limits.c b/test/test_limits.c
deleted file mode 100644
index 8dca825b21..0000000000
--- a/test/test_limits.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/**************************************************************
- * test_limits.c
- *
- * A simple program for sending abusive requests to a server, based
- * on the sioux.c exploit code that this nimrod posted (see below).
- * Roy added options for testing long header fieldsize (-t h), long
- * request-lines (-t r), and a long request body (-t b).
- *
- * FreeBSD 2.2.x, FreeBSD 3.0, IRIX 5.3, IRIX 6.2:
- * gcc -o test_limits test_limits.c
- *
- * Solaris 2.5.1:
- * gcc -o test_limits test_limits.c -lsocket -lnsl
- *
- *
- * Message-ID: <861zqspvtw.fsf@niobe.ewox.org>
- * Date: Fri, 7 Aug 1998 19:04:27 +0200
- * Sender: Bugtraq List <BUGTRAQ@netspace.org>
- * From: Dag-Erling Coidan =?ISO-8859-1?Q?Sm=F8rgrav?= <finrod@EWOX.ORG>
- * Subject: YA Apache DoS attack
- *
- * Copyright (c) 1998 Dag-Erling Codan Smrgrav
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software withough specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Kudos to Mark Huizer who originally suggested this on freebsd-current
- */
-
-#include <sys/types.h>
-#include <sys/uio.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define TEST_LONG_REQUEST_LINE 1
-#define TEST_LONG_REQUEST_FIELDS 2
-#define TEST_LONG_REQUEST_FIELDSIZE 3
-#define TEST_LONG_REQUEST_BODY 4
-
-void
-usage(void)
-{
- fprintf(stderr,
- "usage: test_limits [-t (r|n|h|b)] [-a address] [-p port] [-n num]\n");
- exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
- struct sockaddr_in sin;
- struct hostent *he;
- FILE *f;
- int o, sd;
-
- /* default parameters */
- char *addr = "localhost";
- int port = 80;
- int num = 1000;
- int testtype = TEST_LONG_REQUEST_FIELDS;
-
- /* get options */
- while ((o = getopt(argc, argv, "t:a:p:n:")) != EOF)
- switch (o) {
- case 't':
- if (*optarg == 'r')
- testtype = TEST_LONG_REQUEST_LINE;
- else if (*optarg == 'n')
- testtype = TEST_LONG_REQUEST_FIELDS;
- else if (*optarg == 'h')
- testtype = TEST_LONG_REQUEST_FIELDSIZE;
- else if (*optarg == 'b')
- testtype = TEST_LONG_REQUEST_BODY;
- break;
- case 'a':
- addr = optarg;
- break;
- case 'p':
- port = atoi(optarg);
- break;
- case 'n':
- num = atoi(optarg);
- break;
- default:
- usage();
- }
-
- if (argc != optind)
- usage();
-
- /* connect */
- if ((he = gethostbyname(addr)) == NULL) {
- perror("gethostbyname");
- exit(1);
- }
- bzero(&sin, sizeof(sin));
- bcopy(he->h_addr, (char *)&sin.sin_addr, he->h_length);
- sin.sin_family = he->h_addrtype;
- sin.sin_port = htons(port);
-
- if ((sd = socket(sin.sin_family, SOCK_STREAM, IPPROTO_TCP)) == -1) {
- perror("socket");
- exit(1);
- }
-
- if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
- perror("connect");
- exit(1);
- }
-
- if ((f = fdopen(sd, "r+")) == NULL) {
- perror("fdopen");
- exit(1);
- }
-
- /* attack! */
- fprintf(stderr, "Testing like a plague of locusts on %s\n", addr);
-
- if (testtype == TEST_LONG_REQUEST_LINE) {
- fprintf(f, "GET ");
- while (num-- && !ferror(f)) {
- fprintf(f, "/123456789");
- fflush(f);
- }
- fprintf(f, " HTTP/1.0\r\n\r\n");
- }
- else {
- fprintf(f, "GET /fred/foo HTTP/1.0\r\n");
-
- if (testtype == TEST_LONG_REQUEST_FIELDSIZE) {
- while (num-- && !ferror(f)) {
- fprintf(f, "User-Agent: sioux");
- fflush(f);
- }
- fprintf(f, "\r\n");
- }
- else if (testtype == TEST_LONG_REQUEST_FIELDS) {
- while (num-- && !ferror(f))
- fprintf(f, "User-Agent: sioux\r\n");
- fprintf(f, "\r\n");
- }
- else if (testtype == TEST_LONG_REQUEST_BODY) {
- fprintf(f, "User-Agent: sioux\r\n");
- fprintf(f, "Content-Length: 33554433\r\n");
- fprintf(f, "\r\n");
- while (num-- && !ferror(f))
- fprintf(f, "User-Agent: sioux\r\n");
- }
- else {
- fprintf(f, "\r\n");
- }
- }
- fflush(f);
-
- {
- apr_ssize_t len;
- char buff[512];
-
- while ((len = read(sd, buff, 512)) > 0)
- len = write(1, buff, len);
- }
- if (ferror(f)) {
- perror("fprintf");
- exit(1);
- }
-
- fclose(f);
- exit(0);
-}
diff --git a/test/test_parser.c b/test/test_parser.c
deleted file mode 100644
index 4ba031813d..0000000000
--- a/test/test_parser.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This program tests the ap_get_list_item routine in ../main/util.c.
- *
- * The defines in this sample compile line are specific to Roy's system.
- * They should match whatever was used to compile Apache first.
- *
- gcc -g -O2 -I../os/unix -I../include -o test_parser \
- -DSOLARIS2=250 -Wall -DALLOC_DEBUG -DPOOL_DEBUG \
- ../main/alloc.o ../main/buff.o ../main/util.o \
- ../ap/libap.a -lsocket -lnsl test_parser.c
- *
- * Roy Fielding, 1999
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "httpd.h"
-#include "apr_general.h"
-
-/*
- * Dummy a bunch of stuff just to get a compile
- */
-uid_t ap_user_id;
-gid_t ap_group_id;
-void *ap_dummy_mutex = &ap_dummy_mutex;
-char *ap_server_argv0;
-
-AP_DECLARE(void) ap_block_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_unblock_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
- const request_rec *r, const char *fmt, ...)
-{
- ;
-}
-
-int main (void)
-{
- apr_pool_t *p;
- const char *field;
- char *newstr;
- char instr[512];
-
- p = apr_pool_alloc_init();
-
- while (gets(instr)) {
- printf(" [%s] ==\n", instr);
- field = instr;
- while ((newstr = ap_get_list_item(p, &field)) != NULL)
- printf(" <%s> ..\n", newstr);
- }
-
- exit(0);
-}
diff --git a/test/test_select.c b/test/test_select.c
deleted file mode 100644
index f7b1edc178..0000000000
--- a/test/test_select.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This is just a quick test program to see how long a wait is
- * produced by a select loop with an exponential backoff.
- *
- * gcc -g -O2 -o test_select test_select.c
- * test_select
- *
- * Roy Fielding, 1996
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-int main (void)
-{
- int srv;
- long waittime = 4096;
- struct timeval tv;
-
- printf("Start\n");
- while ((waittime > 0) && (waittime < 3000000)) {
- printf("%d\n", waittime);
- tv.tv_sec = waittime/1000000;
- tv.tv_usec = waittime%1000000;
- waittime <<= 1;
- srv = select(0, NULL, NULL, NULL, &tv);
- }
- printf("End\n");
- exit(0);
-}
diff --git a/test/time-sem.c b/test/time-sem.c
deleted file mode 100644
index d53cab6c0d..0000000000
--- a/test/time-sem.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/* Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-time-sem.c has the basics of the semaphores we use in http_main.c. It's
-intended for timing differences between various methods on an
-architecture. In practice we've found many things affect which semaphore
-to be used:
-
- - NFS filesystems absolutely suck for fcntl() and flock()
-
- - uslock absolutely sucks on single-processor IRIX boxes, but
- absolutely rocks on multi-processor boxes. The converse
- is true for fcntl. sysvsem seems a moderate balance.
-
- - Under Solaris you can't have too many processes use SEM_UNDO, there
- might be a tuneable somewhere that increases the limit from 29.
- We're not sure what the tunable is, so there's a define
- NO_SEM_UNDO which can be used to simulate us trapping/blocking
- signals to be able to properly release the semaphore on a clean
- child death. You'll also need to define NEED_UNION_SEMUN
- under solaris.
-
-You'll need to define USE_SHMGET_SCOREBOARD if anonymous shared mmap()
-doesn't work on your system (i.e. linux).
-
-argv[1] is the #children, argv[2] is the #iterations per child
-
-You should run each over many different #children inputs, and choose
-#iter such that the program runs for at least a second or so... or even
-longer depending on your patience.
-
-compile with:
-
-gcc -o time-FCNTL -Wall -O time-sem.c -DUSE_FCNTL_SERIALIZED_ACCEPT
-gcc -o time-FLOCK -Wall -O time-sem.c -DUSE_FLOCK_SERIALIZED_ACCEPT
-gcc -o time-SYSVSEM -Wall -O time-sem.c -DUSE_SYSVSEM_SERIALIZED_ACCEPT
-gcc -o time-SYSVSEM2 -Wall -O time-sem.c -DUSE_SYSVSEM_SERIALIZED_ACCEPT -DNO_SEM_UNDO
-gcc -o time-PTHREAD -Wall -O time-sem.c -DUSE_PTHREAD_SERIALIZED_ACCEPT -lpthread
-gcc -o time-USLOCK -Wall -O time-sem.c -DUSE_USLOCK_SERIALIZED_ACCEPT
-
-not all versions work on all systems.
-*/
-
-#include <errno.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <sys/mman.h>
-#include <signal.h>
-
-#if defined(USE_FCNTL_SERIALIZED_ACCEPT)
-
-static struct flock lock_it;
-static struct flock unlock_it;
-
-static int fcntl_fd=-1;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-/*
- * Initialize mutex lock.
- * Must be safe to call this on a restart.
- */
-void
-accept_mutex_init(void)
-{
-
- lock_it.l_whence = SEEK_SET; /* from current point */
- lock_it.l_start = 0; /* -"- */
- lock_it.l_len = 0; /* until end of file */
- lock_it.l_type = F_WRLCK; /* set exclusive/write lock */
- lock_it.l_pid = 0; /* pid not actually interesting */
- unlock_it.l_whence = SEEK_SET; /* from current point */
- unlock_it.l_start = 0; /* -"- */
- unlock_it.l_len = 0; /* until end of file */
- unlock_it.l_type = F_UNLCK; /* set exclusive/write lock */
- unlock_it.l_pid = 0; /* pid not actually interesting */
-
- printf("opening test-lock-thing in current directory\n");
- fcntl_fd = open("test-lock-thing", O_CREAT | O_WRONLY | O_EXCL, 0644);
- if (fcntl_fd == -1)
- {
- perror ("open");
- fprintf (stderr, "Cannot open lock file: %s\n", "test-lock-thing");
- exit (1);
- }
- unlink("test-lock-thing");
-}
-
-void accept_mutex_on(void)
-{
- int ret;
-
- while ((ret = fcntl(fcntl_fd, F_SETLKW, &lock_it)) < 0 && errno == EINTR)
- continue;
-
- if (ret < 0) {
- perror ("fcntl lock_it");
- exit(1);
- }
-}
-
-void accept_mutex_off(void)
-{
- if (fcntl (fcntl_fd, F_SETLKW, &unlock_it) < 0)
- {
- perror ("fcntl unlock_it");
- exit(1);
- }
-}
-
-#elif defined(USE_FLOCK_SERIALIZED_ACCEPT)
-
-#include <sys/file.h>
-
-static int flock_fd=-1;
-
-#define FNAME "test-lock-thing"
-
-/*
- * Initialize mutex lock.
- * Must be safe to call this on a restart.
- */
-void accept_mutex_init(void)
-{
-
- printf("opening " FNAME " in current directory\n");
- flock_fd = open(FNAME, O_CREAT | O_WRONLY | O_EXCL, 0644);
- if (flock_fd == -1)
- {
- perror ("open");
- fprintf (stderr, "Cannot open lock file: %s\n", "test-lock-thing");
- exit (1);
- }
-}
-
-void accept_mutex_child_init(void)
-{
- flock_fd = open(FNAME, O_WRONLY, 0600);
- if (flock_fd == -1) {
- perror("open");
- exit(1);
- }
-}
-
-void accept_mutex_cleanup(void)
-{
- unlink(FNAME);
-}
-
-void accept_mutex_on(void)
-{
- int ret;
-
- while ((ret = flock(flock_fd, LOCK_EX)) < 0 && errno == EINTR)
- continue;
-
- if (ret < 0) {
- perror ("flock(LOCK_EX)");
- exit(1);
- }
-}
-
-void accept_mutex_off(void)
-{
- if (flock (flock_fd, LOCK_UN) < 0)
- {
- perror ("flock(LOCK_UN)");
- exit(1);
- }
-}
-
-#elif defined (USE_SYSVSEM_SERIALIZED_ACCEPT)
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-
-static int sem_id = -1;
-#ifdef NO_SEM_UNDO
-static sigset_t accept_block_mask;
-static sigset_t accept_previous_mask;
-#endif
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
-#ifdef NEED_UNION_SEMUN
- /* believe it or not, you need to define this under solaris */
- union semun {
- int val;
- struct semid_ds *buf;
- ushort *array;
- };
-#endif
-
- union semun ick;
-
- sem_id = semget(999, 1, IPC_CREAT | 0666);
- if (sem_id < 0) {
- perror ("semget");
- exit (1);
- }
- ick.val = 1;
- if (semctl(sem_id, 0, SETVAL, ick) < 0) {
- perror ("semctl");
- exit(1);
- }
-#ifdef NO_SEM_UNDO
- sigfillset(&accept_block_mask);
- sigdelset(&accept_block_mask, SIGHUP);
- sigdelset(&accept_block_mask, SIGTERM);
- sigdelset(&accept_block_mask, SIGUSR1);
-#endif
-}
-
-void accept_mutex_on()
-{
- struct sembuf op;
-
-#ifdef NO_SEM_UNDO
- if (sigprocmask(SIG_BLOCK, &accept_block_mask, &accept_previous_mask)) {
- perror("sigprocmask(SIG_BLOCK)");
- exit (1);
- }
- op.sem_flg = 0;
-#else
- op.sem_flg = SEM_UNDO;
-#endif
- op.sem_num = 0;
- op.sem_op = -1;
- if (semop(sem_id, &op, 1) < 0) {
- perror ("accept_mutex_on");
- exit (1);
- }
-}
-
-void accept_mutex_off()
-{
- struct sembuf op;
-
- op.sem_num = 0;
- op.sem_op = 1;
-#ifdef NO_SEM_UNDO
- op.sem_flg = 0;
-#else
- op.sem_flg = SEM_UNDO;
-#endif
- if (semop(sem_id, &op, 1) < 0) {
- perror ("accept_mutex_off");
- exit (1);
- }
-#ifdef NO_SEM_UNDO
- if (sigprocmask(SIG_SETMASK, &accept_previous_mask, NULL)) {
- perror("sigprocmask(SIG_SETMASK)");
- exit (1);
- }
-#endif
-}
-
-#elif defined (USE_PTHREAD_SERIALIZED_ACCEPT)
-
-/* note: pthread mutexes aren't released on child death, hence the
- * signal goop ... in a real implementation we'd do special things
- * during hup, term, usr1.
- */
-
-#include <pthread.h>
-
-static pthread_mutex_t *mutex;
-static sigset_t accept_block_mask;
-static sigset_t accept_previous_mask;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
- pthread_mutexattr_t mattr;
- int fd;
-
- fd = open ("/dev/zero", O_RDWR);
- if (fd == -1) {
- perror ("open(/dev/zero)");
- exit (1);
- }
- mutex = (pthread_mutex_t *)mmap ((caddr_t)0, sizeof (*mutex),
- PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- if (mutex == (void *)(caddr_t)-1) {
- perror ("mmap");
- exit (1);
- }
- close (fd);
- if (pthread_mutexattr_init(&mattr)) {
- perror ("pthread_mutexattr_init");
- exit (1);
- }
- if (pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED)) {
- perror ("pthread_mutexattr_setpshared");
- exit (1);
- }
- if (pthread_mutex_init(mutex, &mattr)) {
- perror ("pthread_mutex_init");
- exit (1);
- }
- sigfillset(&accept_block_mask);
- sigdelset(&accept_block_mask, SIGHUP);
- sigdelset(&accept_block_mask, SIGTERM);
- sigdelset(&accept_block_mask, SIGUSR1);
-}
-
-void accept_mutex_on()
-{
- if (sigprocmask(SIG_BLOCK, &accept_block_mask, &accept_previous_mask)) {
- perror("sigprocmask(SIG_BLOCK)");
- exit (1);
- }
- if (pthread_mutex_lock (mutex)) {
- perror ("pthread_mutex_lock");
- exit (1);
- }
-}
-
-void accept_mutex_off()
-{
- if (pthread_mutex_unlock (mutex)) {
- perror ("pthread_mutex_unlock");
- exit (1);
- }
- if (sigprocmask(SIG_SETMASK, &accept_previous_mask, NULL)) {
- perror("sigprocmask(SIG_SETMASK)");
- exit (1);
- }
-}
-
-#elif defined (USE_USLOCK_SERIALIZED_ACCEPT)
-
-#include <ulocks.h>
-
-static usptr_t *us = NULL;
-static ulock_t uslock = NULL;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
- ptrdiff_t old;
- /* default is 8 */
-#define CONF_INITUSERS_MAX 15
- if ((old = usconfig(CONF_INITUSERS, CONF_INITUSERS_MAX)) == -1) {
- perror("usconfig");
- exit(-1);
- }
- if ((old = usconfig(CONF_LOCKTYPE, US_NODEBUG)) == -1) {
- perror("usconfig");
- exit(-1);
- }
- if ((old = usconfig(CONF_ARENATYPE, US_SHAREDONLY)) == -1) {
- perror("usconfig");
- exit(-1);
- }
- if ((us = usinit("/dev/zero")) == NULL) {
- perror("usinit");
- exit(-1);
- }
- if ((uslock = usnewlock(us)) == NULL) {
- perror("usnewlock");
- exit(-1);
- }
-}
-void accept_mutex_on()
-{
- switch(ussetlock(uslock)) {
- case 1:
- /* got lock */
- break;
- case 0:
- fprintf(stderr, "didn't get lock\n");
- exit(-1);
- case -1:
- perror("ussetlock");
- exit(-1);
- }
-}
-void accept_mutex_off()
-{
- if (usunsetlock(uslock) == -1) {
- perror("usunsetlock");
- exit(-1);
- }
-}
-#endif
-
-
-#ifndef USE_SHMGET_SCOREBOARD
-static void *get_shared_mem(apr_size_t size)
-{
- void *result;
-
- /* allocate shared memory for the shared_counter */
- result = (unsigned long *)mmap ((caddr_t)0, size,
- PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
- if (result == (void *)(caddr_t)-1) {
- perror ("mmap");
- exit (1);
- }
- return result;
-}
-#else
-#include <sys/types.h>
-#include <sys/ipc.h>
-#ifdef HAVE_SYS_MUTEX_H
-#include <sys/mutex.h>
-#endif
-#include <sys/shm.h>
-
-static void *get_shared_mem(apr_size_t size)
-{
- key_t shmkey = IPC_PRIVATE;
- int shmid = -1;
- void *result;
-#ifdef MOVEBREAK
- char *obrk;
-#endif
-
- if ((shmid = shmget(shmkey, size, IPC_CREAT | SHM_R | SHM_W)) == -1) {
- perror("shmget");
- exit(1);
- }
-
-#ifdef MOVEBREAK
- /*
- * Some SysV systems place the shared segment WAY too close
- * to the dynamic memory break point (sbrk(0)). This severely
- * limits the use of malloc/sbrk in the program since sbrk will
- * refuse to move past that point.
- *
- * To get around this, we move the break point "way up there",
- * attach the segment and then move break back down. Ugly
- */
- if ((obrk = sbrk(MOVEBREAK)) == (char *) -1) {
- perror("sbrk");
- }
-#endif
-
-#define BADSHMAT ((void *)(-1))
- if ((result = shmat(shmid, 0, 0)) == BADSHMAT) {
- perror("shmat");
- }
- /*
- * We must avoid leaving segments in the kernel's
- * (small) tables.
- */
- if (shmctl(shmid, IPC_RMID, NULL) != 0) {
- perror("shmctl(IPC_RMID)");
- }
- if (result == BADSHMAT) /* now bailout */
- exit(1);
-
-#ifdef MOVEBREAK
- if (obrk == (char *) -1)
- return; /* nothing else to do */
- if (sbrk(-(MOVEBREAK)) == (char *) -1) {
- perror("sbrk 2");
- }
-#endif
- return result;
-}
-#endif
-
-#ifdef _POSIX_PRIORITY_SCHEDULING
-/* don't ask */
-#define _P __P
-#include <sched.h>
-#define YIELD sched_yield()
-#else
-#define YIELD do { struct timeval zero; zero.tv_sec = zero.tv_usec = 0; select(0,0,0,0,&zero); } while(0)
-#endif
-
-void main (int argc, char **argv)
-{
- int num_iter;
- int num_child;
- int i;
- struct timeval first;
- struct timeval last;
- long ms;
- int pid;
- unsigned long *shared_counter;
-
- if (argc != 3) {
- fprintf (stderr, "Usage: time-sem num-child num iter\n");
- exit (1);
- }
-
- num_child = atoi (argv[1]);
- num_iter = atoi (argv[2]);
-
- /* allocate shared memory for the shared_counter */
- shared_counter = get_shared_mem(sizeof(*shared_counter));
-
- /* initialize counter to 0 */
- *shared_counter = 0;
-
- accept_mutex_init ();
-
- /* parent grabs mutex until done spawning children */
- accept_mutex_on ();
-
- for (i = 0; i < num_child; ++i) {
- pid = fork();
- if (pid == 0) {
- /* child, do our thing */
- accept_mutex_child_init();
- for (i = 0; i < num_iter; ++i) {
- unsigned long tmp;
-
- accept_mutex_on ();
- tmp = *shared_counter;
- YIELD;
- *shared_counter = tmp + 1;
- accept_mutex_off ();
- }
- exit (0);
- } else if (pid == -1) {
- perror ("fork");
- exit (1);
- }
- }
-
- /* a quick test to see that nothing is screwed up */
- if (*shared_counter != 0) {
- puts ("WTF! shared_counter != 0 before the children have been started!");
- exit (1);
- }
-
- gettimeofday (&first, NULL);
- /* launch children into action */
- accept_mutex_off ();
- for (i = 0; i < num_child; ++i) {
- if (wait(NULL) == -1) {
- perror ("wait");
- }
- }
- gettimeofday (&last, NULL);
-
- if (*shared_counter != num_child * num_iter) {
- printf ("WTF! shared_counter != num_child * num_iter!\n"
- "shared_counter = %lu\nnum_child = %d\nnum_iter=%d\n",
- *shared_counter,
- num_child, num_iter);
- }
-
- last.tv_sec -= first.tv_sec;
- ms = last.tv_usec - first.tv_usec;
- if (ms < 0) {
- --last.tv_sec;
- ms += 1000000;
- }
- last.tv_usec = ms;
- printf ("%8lu.%06lu\n", last.tv_sec, last.tv_usec);
-
- accept_mutex_cleanup();
-
- exit(0);
-}
-
diff --git a/test/zb.c b/test/zb.c
deleted file mode 100644
index 0a6666eb25..0000000000
--- a/test/zb.c
+++ /dev/null
@@ -1,567 +0,0 @@
-
-/* ZeusBench V1.01
- ===============
-
-This program is Copyright (C) Zeus Technology Limited 1996.
-
-This program may be used and copied freely providing this copyright notice
-is not removed.
-
-This software is provided "as is" and any express or implied waranties,
-including but not limited to, the implied warranties of merchantability and
-fitness for a particular purpose are disclaimed. In no event shall
-Zeus Technology Ltd. be liable for any direct, indirect, incidental, special,
-exemplary, or consequential damaged (including, but not limited to,
-procurement of substitute good or services; loss of use, data, or profits;
-or business interruption) however caused and on theory of liability. Whether
-in contract, strict liability or tort (including negligence or otherwise)
-arising in any way out of the use of this software, even if advised of the
-possibility of such damage.
-
- Written by Adam Twiss (adam@zeus.co.uk). March 1996
-
-Thanks to the following people for their input:
- Mike Belshe (mbelshe@netscape.com)
- Michael Campanella (campanella@stevms.enet.dec.com)
-
-*/
-
-/* -------------------- Notes on compiling ------------------------------
-
-This should compile unmodified using gcc on HP-UX, FreeBSD, Linux,
-IRIX, Solaris, AIX and Digital Unix (OSF). On Solaris 2.x you will
-need to compile with "-lnsl -lsocket" options. If you have any
-difficulties compiling then let me know.
-
-On SunOS 4.x.x you may need to compile with -DSUNOS4 to add the following
-two lines of code which appear not to exist in my SunOS headers */
-
-#ifdef SUNOS4
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-
-/* -------------------------------------------------------------------- */
-
-/* affects include files on Solaris */
-#define BSD_COMP
-
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <errno.h>
-#include <sys/ioctl.h>
-#include <string.h>
-
-/* ------------------- DEFINITIONS -------------------------- */
-
-/* maximum number of requests on a time limited test */
-#define MAX_REQUESTS 50000
-
-/* good old state machine */
-#define STATE_UNCONNECTED 0
-#define STATE_CONNECTING 1
-#define STATE_READ 2
-
-#define CBUFFSIZE 512
-
-struct connection
-{
- int fd;
- int state;
- int read; /* amount of bytes read */
- int bread; /* amount of body read */
- int length; /* Content-Length value used for keep-alive */
- char cbuff[CBUFFSIZE]; /* a buffer to store server response header */
- int cbx; /* offset in cbuffer */
- int keepalive; /* non-zero if a keep-alive request */
- int gotheader; /* non-zero if we have the entire header in cbuff */
- struct timeval start, connect, done;
-};
-
-struct data
-{
- int read; /* number of bytes read */
- int ctime; /* time in ms to connect */
- int time; /* time in ms for connection */
-};
-
-#define min(a,b) ((a)<(b))?(a):(b)
-#define max(a,b) ((a)>(b))?(a):(b)
-
-/* --------------------- GLOBALS ---------------------------- */
-
-int requests = 1; /* Number of requests to make */
-int concurrency = 1; /* Number of multiple requests to make */
-int tlimit = 0; /* time limit in cs */
-int keepalive = 0; /* try and do keepalive connections */
-char *machine; /* Machine name */
-char *file; /* file name to use */
-char server_name[80]; /* name that server reports */
-int port = 80; /* port to use */
-
-int doclen = 0; /* the length the document should be */
-int totalread = 0; /* total number of bytes read */
-int totalbread = 0; /* totoal amount of entity body read */
-int done=0; /* number of requests we have done */
-int doneka=0; /* number of keep alive connections done */
-int good=0, bad=0; /* number of good and bad requests */
-
-/* store error cases */
-int err_length = 0, err_conn = 0, err_except = 0;
-
-struct timeval start, endtime;
-
-/* global request (and its length) */
-char request[512];
-int reqlen;
-
-/* one global throw-away buffer to read stuff into */
-char buffer[4096];
-
-struct connection *con; /* connection array */
-struct data *stats; /* date for each request */
-
-fd_set readbits, writebits; /* bits for select */
-struct sockaddr_in server; /* server addr structure */
-
-/* --------------------------------------------------------- */
-
-/* simple little function to perror and exit */
-
-static void err(char *s)
-{
- perror(s);
- exit(errno);
-}
-
-/* --------------------------------------------------------- */
-
-/* write out request to a connection - assumes we can write
- (small) request out in one go into our new socket buffer */
-
-void write_request(struct connection *c)
-{
- gettimeofday(&c->connect,0);
- write(c->fd,request, reqlen);
- c->state = STATE_READ;
- FD_SET(c->fd, &readbits);
- FD_CLR(c->fd, &writebits);
-}
-
-/* --------------------------------------------------------- */
-
-/* make an fd non blocking */
-
-void nonblock(int fd)
-{
- int i=1;
- ioctl(fd, FIONBIO, &i);
-}
-
-/* --------------------------------------------------------- */
-
-/* returns the time in ms between two timevals */
-
-int timedif(struct timeval a, struct timeval b)
-{
- register int us,s;
-
- us = a.tv_usec - b.tv_usec;
- us /= 1000;
- s = a.tv_sec - b.tv_sec;
- s *= 1000;
- return s+us;
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results and exit */
-
-void output_results()
-{
- int timetaken;
-
- gettimeofday(&endtime,0);
- timetaken = timedif(endtime, start);
-
- printf("\n---\n");
- printf("Server: %s\n", server_name);
- printf("Document Length: %d\n", doclen);
- printf("Concurency Level: %d\n", concurrency);
- printf("Time taken for tests: %d.%03d seconds\n",
- timetaken/1000, timetaken%1000);
- printf("Complete requests: %d\n", done);
- printf("Failed requests: %d\n", bad);
- if(bad) printf(" (Connect: %d, Length: %d, Exceptions: %d)\n",
- err_conn, err_length, err_except);
- if(keepalive) printf("Keep-Alive requests: %d\n", doneka);
- printf("Bytes transfered: %d\n", totalread);
- printf("HTML transfered: %d\n", totalbread);
-
- /* avoid divide by zero */
- if(timetaken) {
- printf("Requests per seconds: %.2f\n", 1000*(float)(done)/timetaken);
- printf("Transfer rate: %.2f kb/s\n",
- (float)(totalread)/timetaken);
- }
-
- {
- /* work out connection times */
- int i;
- int totalcon=0, total=0;
- int mincon=9999999, mintot=999999;
- int maxcon=0, maxtot=0;
-
- for(i=0; i<requests; i++) {
- struct data s = stats[i];
- mincon = min(mincon, s.ctime);
- mintot = min(mintot, s.time);
- maxcon = max(maxcon, s.ctime);
- maxtot = max(maxtot, s.time);
- totalcon += s.ctime;
- total += s.time;
- }
- printf("\nConnnection Times (ms)\n");
- printf(" min avg max\n");
- printf("Connect: %5d %5d %5d\n",mincon, totalcon/requests, maxcon );
- printf("Total: %5d %5d %5d\n", mintot, total/requests, maxtot);
- printf("---\n\n");
- }
-
- exit(0);
-}
-
-/* --------------------------------------------------------- */
-
-/* start asnchronous non-blocking connection */
-
-void start_connect(struct connection *c)
-{
- c->read = 0;
- c->bread = 0;
- c->keepalive = 0;
- c->cbx = 0;
- c->gotheader = 0;
-
- c->fd = socket(AF_INET, SOCK_STREAM, 0);
- if(c->fd<0) err("socket");
-
- nonblock(c->fd);
- gettimeofday(&c->start,0);
-
- if(connect(c->fd, (struct sockaddr *) &server, sizeof(server))<0) {
- if(errno==EINPROGRESS) {
- c->state = STATE_CONNECTING;
- FD_SET(c->fd, &writebits);
- return;
- }
- else {
- close(c->fd);
- err_conn++;
- if(bad++>10) {
- printf("\nTest aborted after 10 failures\n\n");
- exit(1);
- }
- start_connect(c);
- }
- }
-
- /* connected first time */
- write_request(c);
-}
-
-/* --------------------------------------------------------- */
-
-/* close down connection and save stats */
-
-void close_connection(struct connection *c)
-{
- if(c->read == 0 && c->keepalive) {
- /* server has legitiamately shut down an idle keep alive request */
- good--; /* connection never happend */
- }
- else {
- if(good==1) {
- /* first time here */
- doclen = c->bread;
- } else if (c->bread!=doclen) {
- bad++;
- err_length++;
- }
-
- /* save out time */
- if(done < requests) {
- struct data s;
- gettimeofday(&c->done,0);
- s.read = c->read;
- s.ctime = timedif(c->connect, c->start);
- s.time = timedif(c->done, c->start);
- stats[done++] = s;
- }
- }
-
- close(c->fd);
- FD_CLR(c->fd, &readbits);
- FD_CLR(c->fd, &writebits);
-
- /* connect again */
- start_connect(c);
- return;
-}
-
-/* --------------------------------------------------------- */
-
-/* read data from connection */
-
-void read_connection(struct connection *c)
-{
- int r;
-
- r=read(c->fd,buffer,sizeof(buffer));
- if(r==0 || (r<0 && errno!=EAGAIN)) {
- good++;
- close_connection(c);
- return;
- }
-
- if(r<0 && errno==EAGAIN) return;
-
- c->read += r;
- totalread += r;
-
- if(!c->gotheader) {
- char *s;
- int l=4;
- int space = CBUFFSIZE - c->cbx - 1; /* -1 to allow for 0 terminator */
- int tocopy = (space<r)?space:r;
- memcpy(c->cbuff+c->cbx, buffer, space);
- c->cbx += tocopy; space -= tocopy;
- c->cbuff[c->cbx] = 0; /* terminate for benefit of strstr */
- s = strstr(c->cbuff, "\r\n\r\n");
- /* this next line is so that we talk to NCSA 1.5 which blatantly breaks
- the http specifaction */
- if(!s) { s = strstr(c->cbuff,"\n\n"); l=2; }
-
- if(!s) {
- /* read rest next time */
- if(space)
- return;
- else {
- /* header is in invalid or too big - close connection */
- close(c->fd);
- if(bad++>10) {
- printf("\nTest aborted after 10 failures\n\n");
- exit(1);
- }
- FD_CLR(c->fd, &writebits);
- start_connect(c);
- }
- }
- else {
- /* have full header */
- if(!good) {
- /* this is first time, extract some interesting info */
- char *p, *q;
- p = strstr(c->cbuff, "Server:");
- q = server_name;
- if(p) { p+=8; while(*p>32) *q++ = *p++; }
- *q = 0;
- }
-
- c->gotheader = 1;
- *s = 0; /* terminate at end of header */
- if(keepalive &&
- (strstr(c->cbuff, "Keep-Alive")
- || strstr(c->cbuff, "keep-alive"))) /* for benefit of MSIIS */
- {
- char *cl;
- cl = strstr(c->cbuff, "Content-Length:");
- /* for cacky servers like NCSA which break the spec and send a
- lower case 'l' */
- if(!cl) cl = strstr(c->cbuff, "Content-length:");
- if(cl) {
- c->keepalive=1;
- c->length = atoi(cl+16);
- }
- }
- c->bread += c->cbx - (s+l-c->cbuff) + r-tocopy;
- totalbread += c->bread;
- }
- }
- else {
- /* outside header, everything we have read is entity body */
- c->bread += r;
- totalbread += r;
- }
-
- if(c->keepalive && (c->bread >= c->length)) {
- /* finished a keep-alive connection */
- good++; doneka++;
- /* save out time */
- if(good==1) {
- /* first time here */
- doclen = c->bread;
- } else if(c->bread!=doclen) { bad++; err_length++; }
- if(done < requests) {
- struct data s;
- gettimeofday(&c->done,0);
- s.read = c->read;
- s.ctime = timedif(c->connect, c->start);
- s.time = timedif(c->done, c->start);
- stats[done++] = s;
- }
- c->keepalive = 0; c->length = 0; c->gotheader=0; c->cbx = 0;
- c->read = c->bread = 0;
- write_request(c);
- c->start = c->connect; /* zero connect time with keep-alive */
- }
-}
-
-/* --------------------------------------------------------- */
-
-/* run the tests */
-
-int test()
-{
- struct timeval timeout, now;
- fd_set sel_read, sel_except, sel_write;
- int i;
-
- {
- /* get server information */
- struct hostent *he;
- he = gethostbyname(machine);
- if (!he) err("gethostbyname");
- server.sin_family = he->h_addrtype;
- server.sin_port = htons(port);
- server.sin_addr.s_addr = ((unsigned long *)(he->h_addr_list[0]))[0];
- }
-
- con = malloc(concurrency*sizeof(struct connection));
- memset(con,0,concurrency*sizeof(struct connection));
-
- stats = malloc(requests * sizeof(struct data));
-
- FD_ZERO(&readbits);
- FD_ZERO(&writebits);
-
- /* setup request */
- sprintf(request,"GET %s HTTP/1.0\r\nUser-Agent: ZeusBench/1.0\r\n"
- "%sHost: %s\r\nAccept: */*\r\n\r\n", file,
- keepalive?"Connection: Keep-Alive\r\n":"", machine );
-
- reqlen = strlen(request);
-
- /* ok - lets start */
- gettimeofday(&start,0);
-
- /* initialise lots of requests */
- for(i=0; i<concurrency; i++) start_connect(&con[i]);
-
- while(done<requests) {
- int n;
- /* setup bit arrays */
- memcpy(&sel_except, &readbits, sizeof(readbits));
- memcpy(&sel_read, &readbits, sizeof(readbits));
- memcpy(&sel_write, &writebits, sizeof(readbits));
-
- /* check for time limit expiry */
- gettimeofday(&now,0);
- if(tlimit && timedif(now,start) > (tlimit*1000)) {
- requests=done; /* so stats are correct */
- output_results();
- }
-
- /* Timeout of 30 seconds. */
- timeout.tv_sec=30; timeout.tv_usec=0;
- n=select(256, &sel_read, &sel_write, &sel_except, &timeout);
- if(!n) {
- printf("\nServer timed out\n\n");
- exit(1);
- }
- if(n<1) err("select");
-
- for(i=0; i<concurrency; i++) {
- int s = con[i].fd;
- if(FD_ISSET(s, &sel_except)) {
- bad++;
- err_except++;
- start_connect(&con[i]);
- continue;
- }
- if(FD_ISSET(s, &sel_read)) read_connection(&con[i]);
- if(FD_ISSET(s, &sel_write)) write_request(&con[i]);
- }
- if(done>=requests) output_results();
- }
- return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* display usage information */
-
-void usage(char *progname) {
- printf("\nZeusBench v1.0\n\n");
- printf("Usage: %s <machine> <file> [-k] [-n requests | -t timelimit (sec)]"
- "\n\t\t[-c concurrency] [-p port] \n",progname);
- printf("Filename should start with a '/' e.g. /index.html\n\n");
- exit(EINVAL);
-}
-
-/* ------------------------------------------------------- */
-
-/* sort out command-line args and call test */
-
-int main(int argc, char **argv) {
- int c;
- if (argc < 3) usage(argv[0]);
-
- machine = argv[1];
- file = argv[2];
- optind = 3;
- while ((c = getopt(argc,argv,"p:n:c:d:t:d:k"))>0) {
- switch(c) {
- case 'd':
- break;
- case 'n':
- requests = atoi(optarg);
- if(!requests) {
- printf("Invalid number of requests\n");
- exit(1);
- }
- break;
- case 'k':
- keepalive=1;
- break;
- case 'c':
- concurrency = atoi(optarg);
- break;
- case 'p':
- port = atoi(optarg);
- break;
- case 't':
- tlimit = atoi(optarg);
- requests = MAX_REQUESTS; /* need to size data array on something */
- break;
- default:
- usage(argv[0]);
- break;
- }
- }
- test();
- return 0;
-}
-
-
-
-
-
-